From c995981f99bae39e16a10875524afcff5bf71163 Mon Sep 17 00:00:00 2001 From: Brett Morgan Date: Mon, 14 Oct 2024 14:48:20 +1100 Subject: [PATCH 001/108] Update `adaptive_app` --- adaptive_app/codelab_rebuild.yaml | 6 +- adaptive_app/step_03/.gitignore | 2 + .../step_03/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- adaptive_app/step_03/android/settings.gradle | 4 +- adaptive_app/step_03/linux/CMakeLists.txt | 23 +-- .../step_03/linux/runner/CMakeLists.txt | 26 ++++ .../step_03/linux/{ => runner}/main.cc | 0 .../linux/{ => runner}/my_application.cc | 6 + .../linux/{ => runner}/my_application.h | 0 .../step_03/macos/Runner/AppDelegate.swift | 4 + adaptive_app/step_03/pubspec.yaml | 5 +- adaptive_app/step_03/web/index.html | 2 +- adaptive_app/step_04/.gitignore | 2 + .../step_04/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- adaptive_app/step_04/android/settings.gradle | 4 +- .../ios/Runner.xcodeproj/project.pbxproj | 114 +++++++------- adaptive_app/step_04/linux/CMakeLists.txt | 23 +-- .../step_04/linux/runner/CMakeLists.txt | 26 ++++ .../step_04/linux/{ => runner}/main.cc | 0 .../linux/{ => runner}/my_application.cc | 6 + .../linux/{ => runner}/my_application.h | 0 .../macos/Runner.xcodeproj/project.pbxproj | 104 ++++++------- .../step_04/macos/Runner/AppDelegate.swift | 4 + adaptive_app/step_04/pubspec.yaml | 9 +- adaptive_app/step_04/web/index.html | 2 +- adaptive_app/step_05/.gitignore | 2 + .../step_05/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- adaptive_app/step_05/android/settings.gradle | 4 +- .../ios/Runner.xcodeproj/project.pbxproj | 114 +++++++------- adaptive_app/step_05/linux/CMakeLists.txt | 23 +-- .../step_05/linux/runner/CMakeLists.txt | 26 ++++ .../step_05/linux/{ => runner}/main.cc | 0 .../linux/{ => runner}/my_application.cc | 6 + .../linux/{ => runner}/my_application.h | 0 .../macos/Runner.xcodeproj/project.pbxproj | 104 ++++++------- .../step_05/macos/Runner/AppDelegate.swift | 4 + adaptive_app/step_05/pubspec.yaml | 9 +- adaptive_app/step_05/web/index.html | 2 +- adaptive_app/step_06/.gitignore | 2 + .../step_06/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- adaptive_app/step_06/android/settings.gradle | 4 +- .../ios/Runner.xcodeproj/project.pbxproj | 114 +++++++------- adaptive_app/step_06/linux/CMakeLists.txt | 23 +-- .../step_06/linux/runner/CMakeLists.txt | 26 ++++ .../step_06/linux/{ => runner}/main.cc | 0 .../linux/{ => runner}/my_application.cc | 6 + .../linux/{ => runner}/my_application.h | 0 .../macos/Runner.xcodeproj/project.pbxproj | 104 ++++++------- .../step_06/macos/Runner/AppDelegate.swift | 4 + adaptive_app/step_06/pubspec.yaml | 9 +- adaptive_app/step_06/web/index.html | 2 +- .../step_06/yt_cors_proxy/pubspec.yaml | 4 +- adaptive_app/step_07/.gitignore | 2 + .../step_07/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- adaptive_app/step_07/android/settings.gradle | 4 +- .../ios/Runner.xcodeproj/project.pbxproj | 144 +++++++++--------- adaptive_app/step_07/linux/CMakeLists.txt | 23 +-- adaptive_app/step_07/linux/my_application.cc | 124 --------------- .../step_07/linux/runner/CMakeLists.txt | 26 ++++ .../step_07/linux/{ => runner}/main.cc | 0 .../step_07/linux/runner/my_application.cc | 130 ++++++++++++++++ .../linux/{ => runner}/my_application.h | 0 .../macos/Runner.xcodeproj/project.pbxproj | 124 +++++++-------- .../step_07/macos/Runner/AppDelegate.swift | 4 + adaptive_app/step_07/pubspec.yaml | 9 +- adaptive_app/step_07/web/index.html | 2 +- .../step_07/yt_cors_proxy/pubspec.yaml | 4 +- .../step_03/pubspec.yaml | 2 +- .../step_04/pubspec.yaml | 2 +- .../step_05/pubspec.yaml | 2 +- .../step_06/pubspec.yaml | 2 +- .../step_07/pubspec.yaml | 2 +- .../step_08/pubspec.yaml | 2 +- animations/codelab_rebuild.yaml | 2 +- animations/step_01/pubspec.yaml | 2 +- animations/step_02/pubspec.yaml | 2 +- animations/step_03/pubspec.yaml | 2 +- animations/step_04/pubspec.yaml | 2 +- animations/step_05/pubspec.yaml | 2 +- audio_soloud/step_02/pubspec.yaml | 2 +- audio_soloud/step_03/pubspec.yaml | 2 +- audio_soloud/step_04a/pubspec.yaml | 2 +- audio_soloud/step_04b/pubspec.yaml | 2 +- audio_soloud/step_05/pubspec.yaml | 2 +- audio_soloud/step_06/pubspec.yaml | 2 +- boring_to_beautiful/codelab_rebuild.yaml | 2 +- boring_to_beautiful/final/pubspec.yaml | 2 +- boring_to_beautiful/step_01/pubspec.yaml | 2 +- boring_to_beautiful/step_02/pubspec.yaml | 2 +- boring_to_beautiful/step_03/pubspec.yaml | 2 +- boring_to_beautiful/step_04/pubspec.yaml | 2 +- boring_to_beautiful/step_05/pubspec.yaml | 2 +- boring_to_beautiful/step_06/pubspec.yaml | 2 +- boring_to_beautiful/step_07/pubspec.yaml | 2 +- brick_breaker/codelab_rebuild.yaml | 2 +- brick_breaker/step_03/pubspec.yaml | 2 +- brick_breaker/step_04/pubspec.yaml | 2 +- brick_breaker/step_05/pubspec.yaml | 2 +- brick_breaker/step_06/pubspec.yaml | 2 +- brick_breaker/step_07/pubspec.yaml | 2 +- brick_breaker/step_08/pubspec.yaml | 2 +- brick_breaker/step_09/pubspec.yaml | 2 +- brick_breaker/step_10/pubspec.yaml | 2 +- .../codelab_rebuild.yaml | 2 +- .../step_03/pubspec.yaml | 2 +- .../step_04/pubspec.yaml | 2 +- .../step_05/pubspec.yaml | 2 +- .../step_06_a/pubspec.yaml | 2 +- .../step_06_b/pubspec.yaml | 2 +- .../step_07_a/pubspec.yaml | 2 +- .../step_07_b/pubspec.yaml | 2 +- .../step_08/pubspec.yaml | 2 +- .../step_09/pubspec.yaml | 2 +- .../step_10/pubspec.yaml | 2 +- .../step_11_a/pubspec.yaml | 2 +- .../step_11_b/pubspec.yaml | 2 +- .../step_12/pubspec.yaml | 2 +- deeplink_cookbook/pubspec.yaml | 2 +- ffigen_codelab/step_03/example/pubspec.yaml | 2 +- ffigen_codelab/step_03/pubspec.yaml | 2 +- ffigen_codelab/step_05/example/pubspec.yaml | 2 +- ffigen_codelab/step_05/pubspec.yaml | 2 +- ffigen_codelab/step_06/example/pubspec.yaml | 2 +- ffigen_codelab/step_06/pubspec.yaml | 2 +- ffigen_codelab/step_07/example/pubspec.yaml | 2 +- ffigen_codelab/step_07/pubspec.yaml | 2 +- .../complete/pubspec.yaml | 2 +- .../start/pubspec.yaml | 2 +- firebase-emulator-suite/complete/pubspec.yaml | 2 +- firebase-emulator-suite/start/pubspec.yaml | 2 +- .../step_02/pubspec.yaml | 2 +- .../step_04/pubspec.yaml | 2 +- .../step_05/pubspec.yaml | 2 +- .../step_06/pubspec.yaml | 2 +- .../step_07/pubspec.yaml | 2 +- .../step_09/pubspec.yaml | 2 +- forge2d_game/step_02/pubspec.yaml | 2 +- forge2d_game/step_03/pubspec.yaml | 2 +- forge2d_game/step_04/pubspec.yaml | 2 +- forge2d_game/step_05/pubspec.yaml | 2 +- forge2d_game/step_06/pubspec.yaml | 2 +- forge2d_game/step_07/pubspec.yaml | 2 +- generate_crossword/step_02/pubspec.yaml | 2 +- generate_crossword/step_03/pubspec.yaml | 2 +- generate_crossword/step_04/pubspec.yaml | 2 +- generate_crossword/step_05_a/pubspec.yaml | 2 +- generate_crossword/step_05_b/pubspec.yaml | 2 +- generate_crossword/step_05_c/pubspec.yaml | 2 +- generate_crossword/step_06/pubspec.yaml | 2 +- generate_crossword/step_07/pubspec.yaml | 2 +- generate_crossword/step_08/pubspec.yaml | 2 +- generate_crossword/step_09/pubspec.yaml | 2 +- github-client/step_03/pubspec.yaml | 2 +- github-client/step_04/pubspec.yaml | 2 +- github-client/step_05/pubspec.yaml | 2 +- github-client/step_06/pubspec.yaml | 2 +- github-client/step_07/pubspec.yaml | 2 +- github-client/window_to_front/pubspec.yaml | 2 +- google-maps-in-flutter/step_3/pubspec.yaml | 2 +- google-maps-in-flutter/step_4/pubspec.yaml | 2 +- google-maps-in-flutter/step_5/pubspec.yaml | 2 +- haiku_generator/finished/pubspec.yaml | 2 +- haiku_generator/step0/pubspec.yaml | 2 +- haiku_generator/step1/pubspec.yaml | 2 +- haiku_generator/step2/pubspec.yaml | 2 +- haiku_generator/step3/pubspec.yaml | 2 +- homescreen_codelab/step_03/pubspec.yaml | 2 +- homescreen_codelab/step_04/pubspec.yaml | 2 +- homescreen_codelab/step_05/pubspec.yaml | 2 +- homescreen_codelab/step_06/pubspec.yaml | 2 +- in_app_purchases/complete/app/pubspec.yaml | 2 +- .../complete/dart-backend/pubspec.yaml | 2 +- in_app_purchases/step_00/app/pubspec.yaml | 2 +- .../step_00/dart-backend/pubspec.yaml | 2 +- in_app_purchases/step_07/app/pubspec.yaml | 2 +- .../step_07/dart-backend/pubspec.yaml | 2 +- in_app_purchases/step_08/app/pubspec.yaml | 2 +- .../step_08/dart-backend/pubspec.yaml | 2 +- in_app_purchases/step_09/app/pubspec.yaml | 2 +- .../step_09/dart-backend/pubspec.yaml | 2 +- in_app_purchases/step_10/app/pubspec.yaml | 2 +- .../step_10/dart-backend/pubspec.yaml | 2 +- namer/codelab_rebuild.yaml | 2 +- namer/step_03/pubspec.yaml | 2 +- namer/step_04_a_widget/pubspec.yaml | 2 +- namer/step_04_b_behavior/pubspec.yaml | 2 +- namer/step_05_a_pair/pubspec.yaml | 2 +- namer/step_05_b_extract/pubspec.yaml | 2 +- namer/step_05_c_card_padding/pubspec.yaml | 2 +- namer/step_05_d_theme/pubspec.yaml | 2 +- namer/step_05_e_text_style/pubspec.yaml | 2 +- namer/step_05_f_accessibility/pubspec.yaml | 2 +- namer/step_05_g_center_vertical/pubspec.yaml | 2 +- .../step_05_h_center_horizontal/pubspec.yaml | 2 +- namer/step_05_i_optional_changes/pubspec.yaml | 2 +- namer/step_06_a_business_logic/pubspec.yaml | 2 +- namer/step_06_b_add_row/pubspec.yaml | 2 +- namer/step_06_c_add_like_button/pubspec.yaml | 2 +- .../step_07_a_split_my_home_page/pubspec.yaml | 2 +- .../pubspec.yaml | 2 +- .../step_07_c_add_selectedindex/pubspec.yaml | 2 +- .../step_07_d_use_selectedindex/pubspec.yaml | 2 +- .../step_07_e_add_layout_builder/pubspec.yaml | 2 +- namer/step_08/pubspec.yaml | 2 +- next-gen-ui/step_01/pubspec.yaml | 2 +- next-gen-ui/step_02_a/pubspec.yaml | 2 +- next-gen-ui/step_02_b/pubspec.yaml | 2 +- next-gen-ui/step_02_c/pubspec.yaml | 2 +- next-gen-ui/step_03_a/pubspec.yaml | 2 +- next-gen-ui/step_03_b/pubspec.yaml | 2 +- next-gen-ui/step_03_c/pubspec.yaml | 2 +- next-gen-ui/step_04_a/pubspec.yaml | 2 +- next-gen-ui/step_04_b/pubspec.yaml | 2 +- next-gen-ui/step_04_c/pubspec.yaml | 2 +- next-gen-ui/step_04_d/pubspec.yaml | 2 +- next-gen-ui/step_04_e/pubspec.yaml | 2 +- next-gen-ui/step_05_a/pubspec.yaml | 2 +- next-gen-ui/step_05_b/pubspec.yaml | 2 +- next-gen-ui/step_06/pubspec.yaml | 2 +- testing_codelab/step_03/pubspec.yaml | 2 +- testing_codelab/step_04/pubspec.yaml | 2 +- testing_codelab/step_05/pubspec.yaml | 2 +- testing_codelab/step_06/pubspec.yaml | 2 +- testing_codelab/step_07/pubspec.yaml | 2 +- testing_codelab/step_08/pubspec.yaml | 2 +- tooling/claat_export_images/pubspec.yaml | 2 +- tooling/codelab_rebuild/pubspec.yaml | 2 +- webview_flutter/step_03/pubspec.yaml | 2 +- webview_flutter/step_04/pubspec.yaml | 2 +- webview_flutter/step_05/pubspec.yaml | 2 +- webview_flutter/step_06/pubspec.yaml | 2 +- webview_flutter/step_07/pubspec.yaml | 2 +- webview_flutter/step_08/pubspec.yaml | 2 +- webview_flutter/step_09/pubspec.yaml | 2 +- webview_flutter/step_10/pubspec.yaml | 2 +- webview_flutter/step_11/pubspec.yaml | 2 +- webview_flutter/step_12/pubspec.yaml | 2 +- 242 files changed, 1010 insertions(+), 910 deletions(-) create mode 100644 adaptive_app/step_03/linux/runner/CMakeLists.txt rename adaptive_app/step_03/linux/{ => runner}/main.cc (100%) rename adaptive_app/step_03/linux/{ => runner}/my_application.cc (93%) rename adaptive_app/step_03/linux/{ => runner}/my_application.h (100%) create mode 100644 adaptive_app/step_04/linux/runner/CMakeLists.txt rename adaptive_app/step_04/linux/{ => runner}/main.cc (100%) rename adaptive_app/step_04/linux/{ => runner}/my_application.cc (93%) rename adaptive_app/step_04/linux/{ => runner}/my_application.h (100%) create mode 100644 adaptive_app/step_05/linux/runner/CMakeLists.txt rename adaptive_app/step_05/linux/{ => runner}/main.cc (100%) rename adaptive_app/step_05/linux/{ => runner}/my_application.cc (93%) rename adaptive_app/step_05/linux/{ => runner}/my_application.h (100%) create mode 100644 adaptive_app/step_06/linux/runner/CMakeLists.txt rename adaptive_app/step_06/linux/{ => runner}/main.cc (100%) rename adaptive_app/step_06/linux/{ => runner}/my_application.cc (93%) rename adaptive_app/step_06/linux/{ => runner}/my_application.h (100%) delete mode 100644 adaptive_app/step_07/linux/my_application.cc create mode 100644 adaptive_app/step_07/linux/runner/CMakeLists.txt rename adaptive_app/step_07/linux/{ => runner}/main.cc (100%) create mode 100644 adaptive_app/step_07/linux/runner/my_application.cc rename adaptive_app/step_07/linux/{ => runner}/my_application.h (100%) diff --git a/adaptive_app/codelab_rebuild.yaml b/adaptive_app/codelab_rebuild.yaml index 5a5625b3e5..d6fbdcc88e 100644 --- a/adaptive_app/codelab_rebuild.yaml +++ b/adaptive_app/codelab_rebuild.yaml @@ -1074,9 +1074,9 @@ steps: - name: Create yt_cors_proxy path: adaptive_app dart: create --template server-shelf yt_cors_proxy - - name: Remove args + - name: Remove shelf_router test path: adaptive_app/yt_cors_proxy - dart: pub remove args shelf_router test + dart: pub remove shelf_router test - name: Add http shelf_cors_headers path: adaptive_app/yt_cors_proxy dart: pub add http shelf_cors_headers @@ -1303,7 +1303,7 @@ steps: patch-u: | --- b/adaptive_app/step_07/.gitignore +++ a/adaptive_app/step_07/.gitignore - @@ -41,3 +41,6 @@ app.*.map.json + @@ -43,3 +43,6 @@ app.*.map.json /android/app/debug /android/app/profile /android/app/release diff --git a/adaptive_app/step_03/.gitignore b/adaptive_app/step_03/.gitignore index 29a3a5017f..79c113f9b5 100644 --- a/adaptive_app/step_03/.gitignore +++ b/adaptive_app/step_03/.gitignore @@ -5,9 +5,11 @@ *.swp .DS_Store .atom/ +.build/ .buildlog/ .history .svn/ +.swiftpm/ migrate_working_dir/ # IntelliJ related diff --git a/adaptive_app/step_03/android/gradle.properties b/adaptive_app/step_03/android/gradle.properties index 2597170821..f018a61817 100644 --- a/adaptive_app/step_03/android/gradle.properties +++ b/adaptive_app/step_03/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/adaptive_app/step_03/android/gradle/wrapper/gradle-wrapper.properties b/adaptive_app/step_03/android/gradle/wrapper/gradle-wrapper.properties index e1ca574ef0..7bb2df6ba6 100644 --- a/adaptive_app/step_03/android/gradle/wrapper/gradle-wrapper.properties +++ b/adaptive_app/step_03/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip diff --git a/adaptive_app/step_03/android/settings.gradle b/adaptive_app/step_03/android/settings.gradle index 536165d35a..b9e43bd376 100644 --- a/adaptive_app/step_03/android/settings.gradle +++ b/adaptive_app/step_03/android/settings.gradle @@ -18,8 +18,8 @@ pluginManagement { plugins { id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "7.3.0" apply false - id "org.jetbrains.kotlin.android" version "1.7.10" apply false + id "com.android.application" version "8.1.0" apply false + id "org.jetbrains.kotlin.android" version "1.8.22" apply false } include ":app" diff --git a/adaptive_app/step_03/linux/CMakeLists.txt b/adaptive_app/step_03/linux/CMakeLists.txt index 95047a637a..860cc230f2 100644 --- a/adaptive_app/step_03/linux/CMakeLists.txt +++ b/adaptive_app/step_03/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/adaptive_app/step_03/linux/runner/CMakeLists.txt b/adaptive_app/step_03/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/adaptive_app/step_03/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/adaptive_app/step_03/linux/main.cc b/adaptive_app/step_03/linux/runner/main.cc similarity index 100% rename from adaptive_app/step_03/linux/main.cc rename to adaptive_app/step_03/linux/runner/main.cc diff --git a/adaptive_app/step_03/linux/my_application.cc b/adaptive_app/step_03/linux/runner/my_application.cc similarity index 93% rename from adaptive_app/step_03/linux/my_application.cc rename to adaptive_app/step_03/linux/runner/my_application.cc index a2e720d593..c839eec643 100644 --- a/adaptive_app/step_03/linux/my_application.cc +++ b/adaptive_app/step_03/linux/runner/my_application.cc @@ -117,6 +117,12 @@ static void my_application_class_init(MyApplicationClass* klass) { static void my_application_init(MyApplication* self) {} MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + return MY_APPLICATION(g_object_new(my_application_get_type(), "application-id", APPLICATION_ID, "flags", G_APPLICATION_NON_UNIQUE, diff --git a/adaptive_app/step_03/linux/my_application.h b/adaptive_app/step_03/linux/runner/my_application.h similarity index 100% rename from adaptive_app/step_03/linux/my_application.h rename to adaptive_app/step_03/linux/runner/my_application.h diff --git a/adaptive_app/step_03/macos/Runner/AppDelegate.swift b/adaptive_app/step_03/macos/Runner/AppDelegate.swift index 8e02df2888..b3c1761412 100644 --- a/adaptive_app/step_03/macos/Runner/AppDelegate.swift +++ b/adaptive_app/step_03/macos/Runner/AppDelegate.swift @@ -6,4 +6,8 @@ class AppDelegate: FlutterAppDelegate { override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { return true } + + override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { + return true + } } diff --git a/adaptive_app/step_03/pubspec.yaml b/adaptive_app/step_03/pubspec.yaml index ea27217e4c..59a7434821 100644 --- a/adaptive_app/step_03/pubspec.yaml +++ b/adaptive_app/step_03/pubspec.yaml @@ -19,7 +19,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev version: 1.0.0+1 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 # Dependencies specify other packages that your package needs in order to work. # To automatically upgrade your package dependencies to the latest versions @@ -31,7 +31,6 @@ dependencies: flutter: sdk: flutter - # The following adds the Cupertino Icons font to your application. # Use with the CupertinoIcons class for iOS style icons. cupertino_icons: ^1.0.8 @@ -45,7 +44,7 @@ dev_dependencies: # activated in the `analysis_options.yaml` file located at the root of your # package. See that file for information about deactivating specific lint # rules and activating additional ones. - flutter_lints: ^4.0.0 + flutter_lints: ^5.0.0 # For information on the generic Dart part of this file, see the # following page: https://dart.dev/tools/pub/pubspec diff --git a/adaptive_app/step_03/web/index.html b/adaptive_app/step_03/web/index.html index ce0ee3b7e5..86f03b98cf 100644 --- a/adaptive_app/step_03/web/index.html +++ b/adaptive_app/step_03/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/adaptive_app/step_04/.gitignore b/adaptive_app/step_04/.gitignore index 29a3a5017f..79c113f9b5 100644 --- a/adaptive_app/step_04/.gitignore +++ b/adaptive_app/step_04/.gitignore @@ -5,9 +5,11 @@ *.swp .DS_Store .atom/ +.build/ .buildlog/ .history .svn/ +.swiftpm/ migrate_working_dir/ # IntelliJ related diff --git a/adaptive_app/step_04/android/gradle.properties b/adaptive_app/step_04/android/gradle.properties index 2597170821..f018a61817 100644 --- a/adaptive_app/step_04/android/gradle.properties +++ b/adaptive_app/step_04/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/adaptive_app/step_04/android/gradle/wrapper/gradle-wrapper.properties b/adaptive_app/step_04/android/gradle/wrapper/gradle-wrapper.properties index e1ca574ef0..7bb2df6ba6 100644 --- a/adaptive_app/step_04/android/gradle/wrapper/gradle-wrapper.properties +++ b/adaptive_app/step_04/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip diff --git a/adaptive_app/step_04/android/settings.gradle b/adaptive_app/step_04/android/settings.gradle index 536165d35a..b9e43bd376 100644 --- a/adaptive_app/step_04/android/settings.gradle +++ b/adaptive_app/step_04/android/settings.gradle @@ -18,8 +18,8 @@ pluginManagement { plugins { id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "7.3.0" apply false - id "org.jetbrains.kotlin.android" version "1.7.10" apply false + id "com.android.application" version "8.1.0" apply false + id "org.jetbrains.kotlin.android" version "1.8.22" apply false } include ":app" diff --git a/adaptive_app/step_04/ios/Runner.xcodeproj/project.pbxproj b/adaptive_app/step_04/ios/Runner.xcodeproj/project.pbxproj index e0a56310b0..2c18fc9e47 100644 --- a/adaptive_app/step_04/ios/Runner.xcodeproj/project.pbxproj +++ b/adaptive_app/step_04/ios/Runner.xcodeproj/project.pbxproj @@ -10,12 +10,12 @@ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; - 42C60D6590E858F862BC3BEC /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C194B19D5B3EF5F7535182F3 /* Pods_RunnerTests.framework */; }; + 6347137416242FF2FA3400D7 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 68B89C8BC43A0EB4D05CD361 /* Pods_RunnerTests.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - F48504C05DEF157508D4C422 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2748616BCB087C12B60D81C6 /* Pods_Runner.framework */; }; + D308D40B9602F03194CCC8C6 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BC6E7475880FE14C9797B3EA /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,13 +42,17 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 047EF70300003B3C5FDFEC24 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 2748616BCB087C12B60D81C6 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 251EE28A7FF501C44BF6B0F6 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 42159C927C1597F68701DAA2 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 6745E985BA95E828608C99DB /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 68B89C8BC43A0EB4D05CD361 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 6B85F831BE7920B112EE230D /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 6D751E93919DEED7F636EF65 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; @@ -59,28 +63,24 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - A81A3406F0D20D4946FC3BB2 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - C194B19D5B3EF5F7535182F3 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - C8F29CF7FD5B942D9A0E4B7B /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - CB61B2F33ED588F8A38B4D6C /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - CCDF2E9EA2888015B77A0964 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - F8DF0937E1551E76F35F3C45 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + A5C1F25F59E5AD5FD3838248 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + BC6E7475880FE14C9797B3EA /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 97C146EB1CF9000F007C117D /* Frameworks */ = { + 3DB9EA7E3142F079BD794E7C /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - F48504C05DEF157508D4C422 /* Pods_Runner.framework in Frameworks */, + 6347137416242FF2FA3400D7 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - F06670E8BAC92C483BCC1B7A /* Frameworks */ = { + 97C146EB1CF9000F007C117D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 42C60D6590E858F862BC3BEC /* Pods_RunnerTests.framework in Frameworks */, + D308D40B9602F03194CCC8C6 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -95,15 +95,6 @@ path = RunnerTests; sourceTree = ""; }; - 91D430A9A394C16D4F29B7B0 /* Frameworks */ = { - isa = PBXGroup; - children = ( - 2748616BCB087C12B60D81C6 /* Pods_Runner.framework */, - C194B19D5B3EF5F7535182F3 /* Pods_RunnerTests.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( @@ -122,8 +113,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - C9E387F3BE43FCDA922C0E34 /* Pods */, - 91D430A9A394C16D4F29B7B0 /* Frameworks */, + D006D16AAD3589AB2996AF19 /* Pods */, + F4496A5813DF2FCC0EF11787 /* Frameworks */, ); sourceTree = ""; }; @@ -151,20 +142,29 @@ path = Runner; sourceTree = ""; }; - C9E387F3BE43FCDA922C0E34 /* Pods */ = { + D006D16AAD3589AB2996AF19 /* Pods */ = { isa = PBXGroup; children = ( - F8DF0937E1551E76F35F3C45 /* Pods-Runner.debug.xcconfig */, - 42159C927C1597F68701DAA2 /* Pods-Runner.release.xcconfig */, - C8F29CF7FD5B942D9A0E4B7B /* Pods-Runner.profile.xcconfig */, - CCDF2E9EA2888015B77A0964 /* Pods-RunnerTests.debug.xcconfig */, - CB61B2F33ED588F8A38B4D6C /* Pods-RunnerTests.release.xcconfig */, - A81A3406F0D20D4946FC3BB2 /* Pods-RunnerTests.profile.xcconfig */, + A5C1F25F59E5AD5FD3838248 /* Pods-Runner.debug.xcconfig */, + 251EE28A7FF501C44BF6B0F6 /* Pods-Runner.release.xcconfig */, + 6745E985BA95E828608C99DB /* Pods-Runner.profile.xcconfig */, + 047EF70300003B3C5FDFEC24 /* Pods-RunnerTests.debug.xcconfig */, + 6B85F831BE7920B112EE230D /* Pods-RunnerTests.release.xcconfig */, + 6D751E93919DEED7F636EF65 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; sourceTree = ""; }; + F4496A5813DF2FCC0EF11787 /* Frameworks */ = { + isa = PBXGroup; + children = ( + BC6E7475880FE14C9797B3EA /* Pods_Runner.framework */, + 68B89C8BC43A0EB4D05CD361 /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 6320A3FB058755C937EC943F /* [CP] Check Pods Manifest.lock */, + 30D80C78F4BA8C88B202898C /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - F06670E8BAC92C483BCC1B7A /* Frameworks */, + 3DB9EA7E3142F079BD794E7C /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 9ED36595F4D9AD157018ED35 /* [CP] Check Pods Manifest.lock */, + E5D0453177845FBE309EB6CD /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - C48562E028A9C83584467B6D /* [CP] Embed Pods Frameworks */, + EFF678415838948476F54A4B /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -270,43 +270,43 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + 30D80C78F4BA8C88B202898C /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( - "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "Thin Binary"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - 6320A3FB058755C937EC943F /* [CP] Check Pods Manifest.lock */ = { + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); + name = "Thin Binary"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; @@ -323,7 +323,7 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - 9ED36595F4D9AD157018ED35 /* [CP] Check Pods Manifest.lock */ = { + E5D0453177845FBE309EB6CD /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -345,7 +345,7 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - C48562E028A9C83584467B6D /* [CP] Embed Pods Frameworks */ = { + EFF678415838948476F54A4B /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = CCDF2E9EA2888015B77A0964 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 047EF70300003B3C5FDFEC24 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = CB61B2F33ED588F8A38B4D6C /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 6B85F831BE7920B112EE230D /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = A81A3406F0D20D4946FC3BB2 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 6D751E93919DEED7F636EF65 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/adaptive_app/step_04/linux/CMakeLists.txt b/adaptive_app/step_04/linux/CMakeLists.txt index 95047a637a..860cc230f2 100644 --- a/adaptive_app/step_04/linux/CMakeLists.txt +++ b/adaptive_app/step_04/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/adaptive_app/step_04/linux/runner/CMakeLists.txt b/adaptive_app/step_04/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/adaptive_app/step_04/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/adaptive_app/step_04/linux/main.cc b/adaptive_app/step_04/linux/runner/main.cc similarity index 100% rename from adaptive_app/step_04/linux/main.cc rename to adaptive_app/step_04/linux/runner/main.cc diff --git a/adaptive_app/step_04/linux/my_application.cc b/adaptive_app/step_04/linux/runner/my_application.cc similarity index 93% rename from adaptive_app/step_04/linux/my_application.cc rename to adaptive_app/step_04/linux/runner/my_application.cc index a2e720d593..c839eec643 100644 --- a/adaptive_app/step_04/linux/my_application.cc +++ b/adaptive_app/step_04/linux/runner/my_application.cc @@ -117,6 +117,12 @@ static void my_application_class_init(MyApplicationClass* klass) { static void my_application_init(MyApplication* self) {} MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + return MY_APPLICATION(g_object_new(my_application_get_type(), "application-id", APPLICATION_ID, "flags", G_APPLICATION_NON_UNIQUE, diff --git a/adaptive_app/step_04/linux/my_application.h b/adaptive_app/step_04/linux/runner/my_application.h similarity index 100% rename from adaptive_app/step_04/linux/my_application.h rename to adaptive_app/step_04/linux/runner/my_application.h diff --git a/adaptive_app/step_04/macos/Runner.xcodeproj/project.pbxproj b/adaptive_app/step_04/macos/Runner.xcodeproj/project.pbxproj index 80749aeccf..4cc7e4c0a6 100644 --- a/adaptive_app/step_04/macos/Runner.xcodeproj/project.pbxproj +++ b/adaptive_app/step_04/macos/Runner.xcodeproj/project.pbxproj @@ -27,8 +27,8 @@ 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - ECB4C053DC55082E8A040D1A /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FD911459AD1F476DEDDCC9F4 /* Pods_RunnerTests.framework */; }; - FDC71A1EEAA254FEC886EB78 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F4F870AC638E18B9F9B060D3 /* Pods_Runner.framework */; }; + AD4816DC1A3E8B0FCF3EF97F /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 899E375D32A57DB46B0D5015 /* Pods_RunnerTests.framework */; }; + CB9653FB11619FF04E6D0A85 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DDCF1329859CB2B135009A90 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -78,16 +78,16 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 39BD53855A3E996DE13FF7E1 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 6465FEE961AF3C63F233ECEE /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 5E6CD848E5EAE9ED3804128A /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 72EA5204D593132D4180B92F /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 76C7A6CB8682BC6F15F956AB /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 891F8B0961956758849B5418 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 866BF68DD31095014D94FC9B /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 899E375D32A57DB46B0D5015 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - 9FC40E64AE7C38B1EE348DA5 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - A2E1A3E227A7DDA72E5906AF /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - CF403D156B0ADDBBF0864CCF /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - F4F870AC638E18B9F9B060D3 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - FD911459AD1F476DEDDCC9F4 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + A7621843ACCF358083274DC3 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + C5367377FB9F54B0D1F2FFB3 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + DDCF1329859CB2B135009A90 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - ECB4C053DC55082E8A040D1A /* Pods_RunnerTests.framework in Frameworks */, + AD4816DC1A3E8B0FCF3EF97F /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,27 +103,13 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - FDC71A1EEAA254FEC886EB78 /* Pods_Runner.framework in Frameworks */, + CB9653FB11619FF04E6D0A85 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 17A29378C91B2175D8B08B90 /* Pods */ = { - isa = PBXGroup; - children = ( - 39BD53855A3E996DE13FF7E1 /* Pods-Runner.debug.xcconfig */, - CF403D156B0ADDBBF0864CCF /* Pods-Runner.release.xcconfig */, - 9FC40E64AE7C38B1EE348DA5 /* Pods-Runner.profile.xcconfig */, - A2E1A3E227A7DDA72E5906AF /* Pods-RunnerTests.debug.xcconfig */, - 6465FEE961AF3C63F233ECEE /* Pods-RunnerTests.release.xcconfig */, - 891F8B0961956758849B5418 /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; 331C80D6294CF71000263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -151,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 17A29378C91B2175D8B08B90 /* Pods */, + 4C48F4B1A2BDCABA73181790 /* Pods */, ); sourceTree = ""; }; @@ -199,11 +185,25 @@ path = Runner; sourceTree = ""; }; + 4C48F4B1A2BDCABA73181790 /* Pods */ = { + isa = PBXGroup; + children = ( + 72EA5204D593132D4180B92F /* Pods-Runner.debug.xcconfig */, + 76C7A6CB8682BC6F15F956AB /* Pods-Runner.release.xcconfig */, + 5E6CD848E5EAE9ED3804128A /* Pods-Runner.profile.xcconfig */, + 866BF68DD31095014D94FC9B /* Pods-RunnerTests.debug.xcconfig */, + A7621843ACCF358083274DC3 /* Pods-RunnerTests.release.xcconfig */, + C5367377FB9F54B0D1F2FFB3 /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - F4F870AC638E18B9F9B060D3 /* Pods_Runner.framework */, - FD911459AD1F476DEDDCC9F4 /* Pods_RunnerTests.framework */, + DDCF1329859CB2B135009A90 /* Pods_Runner.framework */, + 899E375D32A57DB46B0D5015 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 45C864DC078748C1D62A95DC /* [CP] Check Pods Manifest.lock */, + 19A2D7810889EFE871D620A3 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - C5D943EB32FE4BF5C4040659 /* [CP] Check Pods Manifest.lock */, + 71A1F8B56A856017B515FABC /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - CCB8A7696C8846B70515A41B /* [CP] Embed Pods Frameworks */, + F1B6D708C1D90A015E3B23B9 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,67 +323,67 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 3399D490228B24CF009A79C7 /* ShellScript */ = { + 19A2D7810889EFE871D620A3 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( ); outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - 33CC111E2044C6BF0003C045 /* ShellScript */ = { + 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - Flutter/ephemeral/FlutterInputs.xcfilelist, ); inputPaths = ( - Flutter/ephemeral/tripwire, ); outputFileListPaths = ( - Flutter/ephemeral/FlutterOutputs.xcfilelist, ); outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; + shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; }; - 45C864DC078748C1D62A95DC /* [CP] Check Pods Manifest.lock */ = { + 33CC111E2044C6BF0003C045 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + Flutter/ephemeral/FlutterInputs.xcfilelist, ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", + Flutter/ephemeral/tripwire, ); - name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( + Flutter/ephemeral/FlutterOutputs.xcfilelist, ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - C5D943EB32FE4BF5C4040659 /* [CP] Check Pods Manifest.lock */ = { + 71A1F8B56A856017B515FABC /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -405,7 +405,7 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - CCB8A7696C8846B70515A41B /* [CP] Embed Pods Frameworks */ = { + F1B6D708C1D90A015E3B23B9 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = A2E1A3E227A7DDA72E5906AF /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 866BF68DD31095014D94FC9B /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 6465FEE961AF3C63F233ECEE /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = A7621843ACCF358083274DC3 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 891F8B0961956758849B5418 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = C5367377FB9F54B0D1F2FFB3 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/adaptive_app/step_04/macos/Runner/AppDelegate.swift b/adaptive_app/step_04/macos/Runner/AppDelegate.swift index 8e02df2888..b3c1761412 100644 --- a/adaptive_app/step_04/macos/Runner/AppDelegate.swift +++ b/adaptive_app/step_04/macos/Runner/AppDelegate.swift @@ -6,4 +6,8 @@ class AppDelegate: FlutterAppDelegate { override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { return true } + + override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { + return true + } } diff --git a/adaptive_app/step_04/pubspec.yaml b/adaptive_app/step_04/pubspec.yaml index 6b1026af79..47dfb366a8 100644 --- a/adaptive_app/step_04/pubspec.yaml +++ b/adaptive_app/step_04/pubspec.yaml @@ -19,7 +19,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev version: 1.0.0+1 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 # Dependencies specify other packages that your package needs in order to work. # To automatically upgrade your package dependencies to the latest versions @@ -31,16 +31,15 @@ dependencies: flutter: sdk: flutter - # The following adds the Cupertino Icons font to your application. # Use with the CupertinoIcons class for iOS style icons. cupertino_icons: ^1.0.8 googleapis: ^13.2.0 http: ^1.2.2 provider: ^6.1.2 - url_launcher: ^6.3.0 + url_launcher: ^6.3.1 flex_color_scheme: ^7.3.1 - go_router: ^14.2.7 + go_router: ^14.3.0 dev_dependencies: flutter_test: @@ -51,7 +50,7 @@ dev_dependencies: # activated in the `analysis_options.yaml` file located at the root of your # package. See that file for information about deactivating specific lint # rules and activating additional ones. - flutter_lints: ^4.0.0 + flutter_lints: ^5.0.0 # For information on the generic Dart part of this file, see the # following page: https://dart.dev/tools/pub/pubspec diff --git a/adaptive_app/step_04/web/index.html b/adaptive_app/step_04/web/index.html index ce0ee3b7e5..86f03b98cf 100644 --- a/adaptive_app/step_04/web/index.html +++ b/adaptive_app/step_04/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/adaptive_app/step_05/.gitignore b/adaptive_app/step_05/.gitignore index 29a3a5017f..79c113f9b5 100644 --- a/adaptive_app/step_05/.gitignore +++ b/adaptive_app/step_05/.gitignore @@ -5,9 +5,11 @@ *.swp .DS_Store .atom/ +.build/ .buildlog/ .history .svn/ +.swiftpm/ migrate_working_dir/ # IntelliJ related diff --git a/adaptive_app/step_05/android/gradle.properties b/adaptive_app/step_05/android/gradle.properties index 2597170821..f018a61817 100644 --- a/adaptive_app/step_05/android/gradle.properties +++ b/adaptive_app/step_05/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/adaptive_app/step_05/android/gradle/wrapper/gradle-wrapper.properties b/adaptive_app/step_05/android/gradle/wrapper/gradle-wrapper.properties index e1ca574ef0..7bb2df6ba6 100644 --- a/adaptive_app/step_05/android/gradle/wrapper/gradle-wrapper.properties +++ b/adaptive_app/step_05/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip diff --git a/adaptive_app/step_05/android/settings.gradle b/adaptive_app/step_05/android/settings.gradle index 536165d35a..b9e43bd376 100644 --- a/adaptive_app/step_05/android/settings.gradle +++ b/adaptive_app/step_05/android/settings.gradle @@ -18,8 +18,8 @@ pluginManagement { plugins { id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "7.3.0" apply false - id "org.jetbrains.kotlin.android" version "1.7.10" apply false + id "com.android.application" version "8.1.0" apply false + id "org.jetbrains.kotlin.android" version "1.8.22" apply false } include ":app" diff --git a/adaptive_app/step_05/ios/Runner.xcodeproj/project.pbxproj b/adaptive_app/step_05/ios/Runner.xcodeproj/project.pbxproj index e0a56310b0..2c18fc9e47 100644 --- a/adaptive_app/step_05/ios/Runner.xcodeproj/project.pbxproj +++ b/adaptive_app/step_05/ios/Runner.xcodeproj/project.pbxproj @@ -10,12 +10,12 @@ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; - 42C60D6590E858F862BC3BEC /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C194B19D5B3EF5F7535182F3 /* Pods_RunnerTests.framework */; }; + 6347137416242FF2FA3400D7 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 68B89C8BC43A0EB4D05CD361 /* Pods_RunnerTests.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - F48504C05DEF157508D4C422 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2748616BCB087C12B60D81C6 /* Pods_Runner.framework */; }; + D308D40B9602F03194CCC8C6 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BC6E7475880FE14C9797B3EA /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,13 +42,17 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 047EF70300003B3C5FDFEC24 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 2748616BCB087C12B60D81C6 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 251EE28A7FF501C44BF6B0F6 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 42159C927C1597F68701DAA2 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 6745E985BA95E828608C99DB /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 68B89C8BC43A0EB4D05CD361 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 6B85F831BE7920B112EE230D /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 6D751E93919DEED7F636EF65 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; @@ -59,28 +63,24 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - A81A3406F0D20D4946FC3BB2 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - C194B19D5B3EF5F7535182F3 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - C8F29CF7FD5B942D9A0E4B7B /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - CB61B2F33ED588F8A38B4D6C /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - CCDF2E9EA2888015B77A0964 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - F8DF0937E1551E76F35F3C45 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + A5C1F25F59E5AD5FD3838248 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + BC6E7475880FE14C9797B3EA /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 97C146EB1CF9000F007C117D /* Frameworks */ = { + 3DB9EA7E3142F079BD794E7C /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - F48504C05DEF157508D4C422 /* Pods_Runner.framework in Frameworks */, + 6347137416242FF2FA3400D7 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - F06670E8BAC92C483BCC1B7A /* Frameworks */ = { + 97C146EB1CF9000F007C117D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 42C60D6590E858F862BC3BEC /* Pods_RunnerTests.framework in Frameworks */, + D308D40B9602F03194CCC8C6 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -95,15 +95,6 @@ path = RunnerTests; sourceTree = ""; }; - 91D430A9A394C16D4F29B7B0 /* Frameworks */ = { - isa = PBXGroup; - children = ( - 2748616BCB087C12B60D81C6 /* Pods_Runner.framework */, - C194B19D5B3EF5F7535182F3 /* Pods_RunnerTests.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( @@ -122,8 +113,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - C9E387F3BE43FCDA922C0E34 /* Pods */, - 91D430A9A394C16D4F29B7B0 /* Frameworks */, + D006D16AAD3589AB2996AF19 /* Pods */, + F4496A5813DF2FCC0EF11787 /* Frameworks */, ); sourceTree = ""; }; @@ -151,20 +142,29 @@ path = Runner; sourceTree = ""; }; - C9E387F3BE43FCDA922C0E34 /* Pods */ = { + D006D16AAD3589AB2996AF19 /* Pods */ = { isa = PBXGroup; children = ( - F8DF0937E1551E76F35F3C45 /* Pods-Runner.debug.xcconfig */, - 42159C927C1597F68701DAA2 /* Pods-Runner.release.xcconfig */, - C8F29CF7FD5B942D9A0E4B7B /* Pods-Runner.profile.xcconfig */, - CCDF2E9EA2888015B77A0964 /* Pods-RunnerTests.debug.xcconfig */, - CB61B2F33ED588F8A38B4D6C /* Pods-RunnerTests.release.xcconfig */, - A81A3406F0D20D4946FC3BB2 /* Pods-RunnerTests.profile.xcconfig */, + A5C1F25F59E5AD5FD3838248 /* Pods-Runner.debug.xcconfig */, + 251EE28A7FF501C44BF6B0F6 /* Pods-Runner.release.xcconfig */, + 6745E985BA95E828608C99DB /* Pods-Runner.profile.xcconfig */, + 047EF70300003B3C5FDFEC24 /* Pods-RunnerTests.debug.xcconfig */, + 6B85F831BE7920B112EE230D /* Pods-RunnerTests.release.xcconfig */, + 6D751E93919DEED7F636EF65 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; sourceTree = ""; }; + F4496A5813DF2FCC0EF11787 /* Frameworks */ = { + isa = PBXGroup; + children = ( + BC6E7475880FE14C9797B3EA /* Pods_Runner.framework */, + 68B89C8BC43A0EB4D05CD361 /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 6320A3FB058755C937EC943F /* [CP] Check Pods Manifest.lock */, + 30D80C78F4BA8C88B202898C /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - F06670E8BAC92C483BCC1B7A /* Frameworks */, + 3DB9EA7E3142F079BD794E7C /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 9ED36595F4D9AD157018ED35 /* [CP] Check Pods Manifest.lock */, + E5D0453177845FBE309EB6CD /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - C48562E028A9C83584467B6D /* [CP] Embed Pods Frameworks */, + EFF678415838948476F54A4B /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -270,43 +270,43 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + 30D80C78F4BA8C88B202898C /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( - "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "Thin Binary"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - 6320A3FB058755C937EC943F /* [CP] Check Pods Manifest.lock */ = { + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); + name = "Thin Binary"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; @@ -323,7 +323,7 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - 9ED36595F4D9AD157018ED35 /* [CP] Check Pods Manifest.lock */ = { + E5D0453177845FBE309EB6CD /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -345,7 +345,7 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - C48562E028A9C83584467B6D /* [CP] Embed Pods Frameworks */ = { + EFF678415838948476F54A4B /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = CCDF2E9EA2888015B77A0964 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 047EF70300003B3C5FDFEC24 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = CB61B2F33ED588F8A38B4D6C /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 6B85F831BE7920B112EE230D /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = A81A3406F0D20D4946FC3BB2 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 6D751E93919DEED7F636EF65 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/adaptive_app/step_05/linux/CMakeLists.txt b/adaptive_app/step_05/linux/CMakeLists.txt index 95047a637a..860cc230f2 100644 --- a/adaptive_app/step_05/linux/CMakeLists.txt +++ b/adaptive_app/step_05/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/adaptive_app/step_05/linux/runner/CMakeLists.txt b/adaptive_app/step_05/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/adaptive_app/step_05/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/adaptive_app/step_05/linux/main.cc b/adaptive_app/step_05/linux/runner/main.cc similarity index 100% rename from adaptive_app/step_05/linux/main.cc rename to adaptive_app/step_05/linux/runner/main.cc diff --git a/adaptive_app/step_05/linux/my_application.cc b/adaptive_app/step_05/linux/runner/my_application.cc similarity index 93% rename from adaptive_app/step_05/linux/my_application.cc rename to adaptive_app/step_05/linux/runner/my_application.cc index a2e720d593..c839eec643 100644 --- a/adaptive_app/step_05/linux/my_application.cc +++ b/adaptive_app/step_05/linux/runner/my_application.cc @@ -117,6 +117,12 @@ static void my_application_class_init(MyApplicationClass* klass) { static void my_application_init(MyApplication* self) {} MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + return MY_APPLICATION(g_object_new(my_application_get_type(), "application-id", APPLICATION_ID, "flags", G_APPLICATION_NON_UNIQUE, diff --git a/adaptive_app/step_05/linux/my_application.h b/adaptive_app/step_05/linux/runner/my_application.h similarity index 100% rename from adaptive_app/step_05/linux/my_application.h rename to adaptive_app/step_05/linux/runner/my_application.h diff --git a/adaptive_app/step_05/macos/Runner.xcodeproj/project.pbxproj b/adaptive_app/step_05/macos/Runner.xcodeproj/project.pbxproj index 80749aeccf..4cc7e4c0a6 100644 --- a/adaptive_app/step_05/macos/Runner.xcodeproj/project.pbxproj +++ b/adaptive_app/step_05/macos/Runner.xcodeproj/project.pbxproj @@ -27,8 +27,8 @@ 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - ECB4C053DC55082E8A040D1A /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FD911459AD1F476DEDDCC9F4 /* Pods_RunnerTests.framework */; }; - FDC71A1EEAA254FEC886EB78 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F4F870AC638E18B9F9B060D3 /* Pods_Runner.framework */; }; + AD4816DC1A3E8B0FCF3EF97F /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 899E375D32A57DB46B0D5015 /* Pods_RunnerTests.framework */; }; + CB9653FB11619FF04E6D0A85 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DDCF1329859CB2B135009A90 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -78,16 +78,16 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 39BD53855A3E996DE13FF7E1 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 6465FEE961AF3C63F233ECEE /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 5E6CD848E5EAE9ED3804128A /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 72EA5204D593132D4180B92F /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 76C7A6CB8682BC6F15F956AB /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 891F8B0961956758849B5418 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 866BF68DD31095014D94FC9B /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 899E375D32A57DB46B0D5015 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - 9FC40E64AE7C38B1EE348DA5 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - A2E1A3E227A7DDA72E5906AF /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - CF403D156B0ADDBBF0864CCF /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - F4F870AC638E18B9F9B060D3 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - FD911459AD1F476DEDDCC9F4 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + A7621843ACCF358083274DC3 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + C5367377FB9F54B0D1F2FFB3 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + DDCF1329859CB2B135009A90 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - ECB4C053DC55082E8A040D1A /* Pods_RunnerTests.framework in Frameworks */, + AD4816DC1A3E8B0FCF3EF97F /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,27 +103,13 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - FDC71A1EEAA254FEC886EB78 /* Pods_Runner.framework in Frameworks */, + CB9653FB11619FF04E6D0A85 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 17A29378C91B2175D8B08B90 /* Pods */ = { - isa = PBXGroup; - children = ( - 39BD53855A3E996DE13FF7E1 /* Pods-Runner.debug.xcconfig */, - CF403D156B0ADDBBF0864CCF /* Pods-Runner.release.xcconfig */, - 9FC40E64AE7C38B1EE348DA5 /* Pods-Runner.profile.xcconfig */, - A2E1A3E227A7DDA72E5906AF /* Pods-RunnerTests.debug.xcconfig */, - 6465FEE961AF3C63F233ECEE /* Pods-RunnerTests.release.xcconfig */, - 891F8B0961956758849B5418 /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; 331C80D6294CF71000263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -151,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 17A29378C91B2175D8B08B90 /* Pods */, + 4C48F4B1A2BDCABA73181790 /* Pods */, ); sourceTree = ""; }; @@ -199,11 +185,25 @@ path = Runner; sourceTree = ""; }; + 4C48F4B1A2BDCABA73181790 /* Pods */ = { + isa = PBXGroup; + children = ( + 72EA5204D593132D4180B92F /* Pods-Runner.debug.xcconfig */, + 76C7A6CB8682BC6F15F956AB /* Pods-Runner.release.xcconfig */, + 5E6CD848E5EAE9ED3804128A /* Pods-Runner.profile.xcconfig */, + 866BF68DD31095014D94FC9B /* Pods-RunnerTests.debug.xcconfig */, + A7621843ACCF358083274DC3 /* Pods-RunnerTests.release.xcconfig */, + C5367377FB9F54B0D1F2FFB3 /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - F4F870AC638E18B9F9B060D3 /* Pods_Runner.framework */, - FD911459AD1F476DEDDCC9F4 /* Pods_RunnerTests.framework */, + DDCF1329859CB2B135009A90 /* Pods_Runner.framework */, + 899E375D32A57DB46B0D5015 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 45C864DC078748C1D62A95DC /* [CP] Check Pods Manifest.lock */, + 19A2D7810889EFE871D620A3 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - C5D943EB32FE4BF5C4040659 /* [CP] Check Pods Manifest.lock */, + 71A1F8B56A856017B515FABC /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - CCB8A7696C8846B70515A41B /* [CP] Embed Pods Frameworks */, + F1B6D708C1D90A015E3B23B9 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,67 +323,67 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 3399D490228B24CF009A79C7 /* ShellScript */ = { + 19A2D7810889EFE871D620A3 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( ); outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - 33CC111E2044C6BF0003C045 /* ShellScript */ = { + 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - Flutter/ephemeral/FlutterInputs.xcfilelist, ); inputPaths = ( - Flutter/ephemeral/tripwire, ); outputFileListPaths = ( - Flutter/ephemeral/FlutterOutputs.xcfilelist, ); outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; + shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; }; - 45C864DC078748C1D62A95DC /* [CP] Check Pods Manifest.lock */ = { + 33CC111E2044C6BF0003C045 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + Flutter/ephemeral/FlutterInputs.xcfilelist, ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", + Flutter/ephemeral/tripwire, ); - name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( + Flutter/ephemeral/FlutterOutputs.xcfilelist, ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - C5D943EB32FE4BF5C4040659 /* [CP] Check Pods Manifest.lock */ = { + 71A1F8B56A856017B515FABC /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -405,7 +405,7 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - CCB8A7696C8846B70515A41B /* [CP] Embed Pods Frameworks */ = { + F1B6D708C1D90A015E3B23B9 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = A2E1A3E227A7DDA72E5906AF /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 866BF68DD31095014D94FC9B /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 6465FEE961AF3C63F233ECEE /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = A7621843ACCF358083274DC3 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 891F8B0961956758849B5418 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = C5367377FB9F54B0D1F2FFB3 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/adaptive_app/step_05/macos/Runner/AppDelegate.swift b/adaptive_app/step_05/macos/Runner/AppDelegate.swift index 8e02df2888..b3c1761412 100644 --- a/adaptive_app/step_05/macos/Runner/AppDelegate.swift +++ b/adaptive_app/step_05/macos/Runner/AppDelegate.swift @@ -6,4 +6,8 @@ class AppDelegate: FlutterAppDelegate { override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { return true } + + override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { + return true + } } diff --git a/adaptive_app/step_05/pubspec.yaml b/adaptive_app/step_05/pubspec.yaml index 00ac343fcd..591b8067af 100644 --- a/adaptive_app/step_05/pubspec.yaml +++ b/adaptive_app/step_05/pubspec.yaml @@ -19,7 +19,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev version: 1.0.0+1 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 # Dependencies specify other packages that your package needs in order to work. # To automatically upgrade your package dependencies to the latest versions @@ -31,16 +31,15 @@ dependencies: flutter: sdk: flutter - # The following adds the Cupertino Icons font to your application. # Use with the CupertinoIcons class for iOS style icons. cupertino_icons: ^1.0.8 googleapis: ^13.2.0 http: ^1.2.2 provider: ^6.1.2 - url_launcher: ^6.3.0 + url_launcher: ^6.3.1 flex_color_scheme: ^7.3.1 - go_router: ^14.2.7 + go_router: ^14.3.0 split_view: ^3.2.1 dev_dependencies: @@ -52,7 +51,7 @@ dev_dependencies: # activated in the `analysis_options.yaml` file located at the root of your # package. See that file for information about deactivating specific lint # rules and activating additional ones. - flutter_lints: ^4.0.0 + flutter_lints: ^5.0.0 # For information on the generic Dart part of this file, see the # following page: https://dart.dev/tools/pub/pubspec diff --git a/adaptive_app/step_05/web/index.html b/adaptive_app/step_05/web/index.html index ce0ee3b7e5..86f03b98cf 100644 --- a/adaptive_app/step_05/web/index.html +++ b/adaptive_app/step_05/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/adaptive_app/step_06/.gitignore b/adaptive_app/step_06/.gitignore index 29a3a5017f..79c113f9b5 100644 --- a/adaptive_app/step_06/.gitignore +++ b/adaptive_app/step_06/.gitignore @@ -5,9 +5,11 @@ *.swp .DS_Store .atom/ +.build/ .buildlog/ .history .svn/ +.swiftpm/ migrate_working_dir/ # IntelliJ related diff --git a/adaptive_app/step_06/android/gradle.properties b/adaptive_app/step_06/android/gradle.properties index 2597170821..f018a61817 100644 --- a/adaptive_app/step_06/android/gradle.properties +++ b/adaptive_app/step_06/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/adaptive_app/step_06/android/gradle/wrapper/gradle-wrapper.properties b/adaptive_app/step_06/android/gradle/wrapper/gradle-wrapper.properties index e1ca574ef0..7bb2df6ba6 100644 --- a/adaptive_app/step_06/android/gradle/wrapper/gradle-wrapper.properties +++ b/adaptive_app/step_06/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip diff --git a/adaptive_app/step_06/android/settings.gradle b/adaptive_app/step_06/android/settings.gradle index 536165d35a..b9e43bd376 100644 --- a/adaptive_app/step_06/android/settings.gradle +++ b/adaptive_app/step_06/android/settings.gradle @@ -18,8 +18,8 @@ pluginManagement { plugins { id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "7.3.0" apply false - id "org.jetbrains.kotlin.android" version "1.7.10" apply false + id "com.android.application" version "8.1.0" apply false + id "org.jetbrains.kotlin.android" version "1.8.22" apply false } include ":app" diff --git a/adaptive_app/step_06/ios/Runner.xcodeproj/project.pbxproj b/adaptive_app/step_06/ios/Runner.xcodeproj/project.pbxproj index e0a56310b0..2c18fc9e47 100644 --- a/adaptive_app/step_06/ios/Runner.xcodeproj/project.pbxproj +++ b/adaptive_app/step_06/ios/Runner.xcodeproj/project.pbxproj @@ -10,12 +10,12 @@ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; - 42C60D6590E858F862BC3BEC /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C194B19D5B3EF5F7535182F3 /* Pods_RunnerTests.framework */; }; + 6347137416242FF2FA3400D7 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 68B89C8BC43A0EB4D05CD361 /* Pods_RunnerTests.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - F48504C05DEF157508D4C422 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2748616BCB087C12B60D81C6 /* Pods_Runner.framework */; }; + D308D40B9602F03194CCC8C6 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BC6E7475880FE14C9797B3EA /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,13 +42,17 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 047EF70300003B3C5FDFEC24 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 2748616BCB087C12B60D81C6 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 251EE28A7FF501C44BF6B0F6 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 42159C927C1597F68701DAA2 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 6745E985BA95E828608C99DB /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 68B89C8BC43A0EB4D05CD361 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 6B85F831BE7920B112EE230D /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 6D751E93919DEED7F636EF65 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; @@ -59,28 +63,24 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - A81A3406F0D20D4946FC3BB2 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - C194B19D5B3EF5F7535182F3 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - C8F29CF7FD5B942D9A0E4B7B /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - CB61B2F33ED588F8A38B4D6C /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - CCDF2E9EA2888015B77A0964 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - F8DF0937E1551E76F35F3C45 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + A5C1F25F59E5AD5FD3838248 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + BC6E7475880FE14C9797B3EA /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 97C146EB1CF9000F007C117D /* Frameworks */ = { + 3DB9EA7E3142F079BD794E7C /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - F48504C05DEF157508D4C422 /* Pods_Runner.framework in Frameworks */, + 6347137416242FF2FA3400D7 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - F06670E8BAC92C483BCC1B7A /* Frameworks */ = { + 97C146EB1CF9000F007C117D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 42C60D6590E858F862BC3BEC /* Pods_RunnerTests.framework in Frameworks */, + D308D40B9602F03194CCC8C6 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -95,15 +95,6 @@ path = RunnerTests; sourceTree = ""; }; - 91D430A9A394C16D4F29B7B0 /* Frameworks */ = { - isa = PBXGroup; - children = ( - 2748616BCB087C12B60D81C6 /* Pods_Runner.framework */, - C194B19D5B3EF5F7535182F3 /* Pods_RunnerTests.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( @@ -122,8 +113,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - C9E387F3BE43FCDA922C0E34 /* Pods */, - 91D430A9A394C16D4F29B7B0 /* Frameworks */, + D006D16AAD3589AB2996AF19 /* Pods */, + F4496A5813DF2FCC0EF11787 /* Frameworks */, ); sourceTree = ""; }; @@ -151,20 +142,29 @@ path = Runner; sourceTree = ""; }; - C9E387F3BE43FCDA922C0E34 /* Pods */ = { + D006D16AAD3589AB2996AF19 /* Pods */ = { isa = PBXGroup; children = ( - F8DF0937E1551E76F35F3C45 /* Pods-Runner.debug.xcconfig */, - 42159C927C1597F68701DAA2 /* Pods-Runner.release.xcconfig */, - C8F29CF7FD5B942D9A0E4B7B /* Pods-Runner.profile.xcconfig */, - CCDF2E9EA2888015B77A0964 /* Pods-RunnerTests.debug.xcconfig */, - CB61B2F33ED588F8A38B4D6C /* Pods-RunnerTests.release.xcconfig */, - A81A3406F0D20D4946FC3BB2 /* Pods-RunnerTests.profile.xcconfig */, + A5C1F25F59E5AD5FD3838248 /* Pods-Runner.debug.xcconfig */, + 251EE28A7FF501C44BF6B0F6 /* Pods-Runner.release.xcconfig */, + 6745E985BA95E828608C99DB /* Pods-Runner.profile.xcconfig */, + 047EF70300003B3C5FDFEC24 /* Pods-RunnerTests.debug.xcconfig */, + 6B85F831BE7920B112EE230D /* Pods-RunnerTests.release.xcconfig */, + 6D751E93919DEED7F636EF65 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; sourceTree = ""; }; + F4496A5813DF2FCC0EF11787 /* Frameworks */ = { + isa = PBXGroup; + children = ( + BC6E7475880FE14C9797B3EA /* Pods_Runner.framework */, + 68B89C8BC43A0EB4D05CD361 /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 6320A3FB058755C937EC943F /* [CP] Check Pods Manifest.lock */, + 30D80C78F4BA8C88B202898C /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - F06670E8BAC92C483BCC1B7A /* Frameworks */, + 3DB9EA7E3142F079BD794E7C /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 9ED36595F4D9AD157018ED35 /* [CP] Check Pods Manifest.lock */, + E5D0453177845FBE309EB6CD /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - C48562E028A9C83584467B6D /* [CP] Embed Pods Frameworks */, + EFF678415838948476F54A4B /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -270,43 +270,43 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + 30D80C78F4BA8C88B202898C /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( - "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "Thin Binary"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - 6320A3FB058755C937EC943F /* [CP] Check Pods Manifest.lock */ = { + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); + name = "Thin Binary"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; @@ -323,7 +323,7 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - 9ED36595F4D9AD157018ED35 /* [CP] Check Pods Manifest.lock */ = { + E5D0453177845FBE309EB6CD /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -345,7 +345,7 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - C48562E028A9C83584467B6D /* [CP] Embed Pods Frameworks */ = { + EFF678415838948476F54A4B /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = CCDF2E9EA2888015B77A0964 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 047EF70300003B3C5FDFEC24 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = CB61B2F33ED588F8A38B4D6C /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 6B85F831BE7920B112EE230D /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = A81A3406F0D20D4946FC3BB2 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 6D751E93919DEED7F636EF65 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/adaptive_app/step_06/linux/CMakeLists.txt b/adaptive_app/step_06/linux/CMakeLists.txt index 95047a637a..860cc230f2 100644 --- a/adaptive_app/step_06/linux/CMakeLists.txt +++ b/adaptive_app/step_06/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/adaptive_app/step_06/linux/runner/CMakeLists.txt b/adaptive_app/step_06/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/adaptive_app/step_06/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/adaptive_app/step_06/linux/main.cc b/adaptive_app/step_06/linux/runner/main.cc similarity index 100% rename from adaptive_app/step_06/linux/main.cc rename to adaptive_app/step_06/linux/runner/main.cc diff --git a/adaptive_app/step_06/linux/my_application.cc b/adaptive_app/step_06/linux/runner/my_application.cc similarity index 93% rename from adaptive_app/step_06/linux/my_application.cc rename to adaptive_app/step_06/linux/runner/my_application.cc index a2e720d593..c839eec643 100644 --- a/adaptive_app/step_06/linux/my_application.cc +++ b/adaptive_app/step_06/linux/runner/my_application.cc @@ -117,6 +117,12 @@ static void my_application_class_init(MyApplicationClass* klass) { static void my_application_init(MyApplication* self) {} MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + return MY_APPLICATION(g_object_new(my_application_get_type(), "application-id", APPLICATION_ID, "flags", G_APPLICATION_NON_UNIQUE, diff --git a/adaptive_app/step_06/linux/my_application.h b/adaptive_app/step_06/linux/runner/my_application.h similarity index 100% rename from adaptive_app/step_06/linux/my_application.h rename to adaptive_app/step_06/linux/runner/my_application.h diff --git a/adaptive_app/step_06/macos/Runner.xcodeproj/project.pbxproj b/adaptive_app/step_06/macos/Runner.xcodeproj/project.pbxproj index 80749aeccf..4cc7e4c0a6 100644 --- a/adaptive_app/step_06/macos/Runner.xcodeproj/project.pbxproj +++ b/adaptive_app/step_06/macos/Runner.xcodeproj/project.pbxproj @@ -27,8 +27,8 @@ 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - ECB4C053DC55082E8A040D1A /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FD911459AD1F476DEDDCC9F4 /* Pods_RunnerTests.framework */; }; - FDC71A1EEAA254FEC886EB78 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F4F870AC638E18B9F9B060D3 /* Pods_Runner.framework */; }; + AD4816DC1A3E8B0FCF3EF97F /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 899E375D32A57DB46B0D5015 /* Pods_RunnerTests.framework */; }; + CB9653FB11619FF04E6D0A85 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DDCF1329859CB2B135009A90 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -78,16 +78,16 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 39BD53855A3E996DE13FF7E1 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 6465FEE961AF3C63F233ECEE /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 5E6CD848E5EAE9ED3804128A /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 72EA5204D593132D4180B92F /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 76C7A6CB8682BC6F15F956AB /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 891F8B0961956758849B5418 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 866BF68DD31095014D94FC9B /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 899E375D32A57DB46B0D5015 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - 9FC40E64AE7C38B1EE348DA5 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - A2E1A3E227A7DDA72E5906AF /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - CF403D156B0ADDBBF0864CCF /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - F4F870AC638E18B9F9B060D3 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - FD911459AD1F476DEDDCC9F4 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + A7621843ACCF358083274DC3 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + C5367377FB9F54B0D1F2FFB3 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + DDCF1329859CB2B135009A90 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - ECB4C053DC55082E8A040D1A /* Pods_RunnerTests.framework in Frameworks */, + AD4816DC1A3E8B0FCF3EF97F /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,27 +103,13 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - FDC71A1EEAA254FEC886EB78 /* Pods_Runner.framework in Frameworks */, + CB9653FB11619FF04E6D0A85 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 17A29378C91B2175D8B08B90 /* Pods */ = { - isa = PBXGroup; - children = ( - 39BD53855A3E996DE13FF7E1 /* Pods-Runner.debug.xcconfig */, - CF403D156B0ADDBBF0864CCF /* Pods-Runner.release.xcconfig */, - 9FC40E64AE7C38B1EE348DA5 /* Pods-Runner.profile.xcconfig */, - A2E1A3E227A7DDA72E5906AF /* Pods-RunnerTests.debug.xcconfig */, - 6465FEE961AF3C63F233ECEE /* Pods-RunnerTests.release.xcconfig */, - 891F8B0961956758849B5418 /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; 331C80D6294CF71000263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -151,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 17A29378C91B2175D8B08B90 /* Pods */, + 4C48F4B1A2BDCABA73181790 /* Pods */, ); sourceTree = ""; }; @@ -199,11 +185,25 @@ path = Runner; sourceTree = ""; }; + 4C48F4B1A2BDCABA73181790 /* Pods */ = { + isa = PBXGroup; + children = ( + 72EA5204D593132D4180B92F /* Pods-Runner.debug.xcconfig */, + 76C7A6CB8682BC6F15F956AB /* Pods-Runner.release.xcconfig */, + 5E6CD848E5EAE9ED3804128A /* Pods-Runner.profile.xcconfig */, + 866BF68DD31095014D94FC9B /* Pods-RunnerTests.debug.xcconfig */, + A7621843ACCF358083274DC3 /* Pods-RunnerTests.release.xcconfig */, + C5367377FB9F54B0D1F2FFB3 /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - F4F870AC638E18B9F9B060D3 /* Pods_Runner.framework */, - FD911459AD1F476DEDDCC9F4 /* Pods_RunnerTests.framework */, + DDCF1329859CB2B135009A90 /* Pods_Runner.framework */, + 899E375D32A57DB46B0D5015 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 45C864DC078748C1D62A95DC /* [CP] Check Pods Manifest.lock */, + 19A2D7810889EFE871D620A3 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - C5D943EB32FE4BF5C4040659 /* [CP] Check Pods Manifest.lock */, + 71A1F8B56A856017B515FABC /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - CCB8A7696C8846B70515A41B /* [CP] Embed Pods Frameworks */, + F1B6D708C1D90A015E3B23B9 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,67 +323,67 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 3399D490228B24CF009A79C7 /* ShellScript */ = { + 19A2D7810889EFE871D620A3 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( ); outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - 33CC111E2044C6BF0003C045 /* ShellScript */ = { + 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - Flutter/ephemeral/FlutterInputs.xcfilelist, ); inputPaths = ( - Flutter/ephemeral/tripwire, ); outputFileListPaths = ( - Flutter/ephemeral/FlutterOutputs.xcfilelist, ); outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; + shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; }; - 45C864DC078748C1D62A95DC /* [CP] Check Pods Manifest.lock */ = { + 33CC111E2044C6BF0003C045 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + Flutter/ephemeral/FlutterInputs.xcfilelist, ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", + Flutter/ephemeral/tripwire, ); - name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( + Flutter/ephemeral/FlutterOutputs.xcfilelist, ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - C5D943EB32FE4BF5C4040659 /* [CP] Check Pods Manifest.lock */ = { + 71A1F8B56A856017B515FABC /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -405,7 +405,7 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - CCB8A7696C8846B70515A41B /* [CP] Embed Pods Frameworks */ = { + F1B6D708C1D90A015E3B23B9 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = A2E1A3E227A7DDA72E5906AF /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 866BF68DD31095014D94FC9B /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 6465FEE961AF3C63F233ECEE /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = A7621843ACCF358083274DC3 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 891F8B0961956758849B5418 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = C5367377FB9F54B0D1F2FFB3 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/adaptive_app/step_06/macos/Runner/AppDelegate.swift b/adaptive_app/step_06/macos/Runner/AppDelegate.swift index 8e02df2888..b3c1761412 100644 --- a/adaptive_app/step_06/macos/Runner/AppDelegate.swift +++ b/adaptive_app/step_06/macos/Runner/AppDelegate.swift @@ -6,4 +6,8 @@ class AppDelegate: FlutterAppDelegate { override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { return true } + + override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { + return true + } } diff --git a/adaptive_app/step_06/pubspec.yaml b/adaptive_app/step_06/pubspec.yaml index 00ac343fcd..591b8067af 100644 --- a/adaptive_app/step_06/pubspec.yaml +++ b/adaptive_app/step_06/pubspec.yaml @@ -19,7 +19,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev version: 1.0.0+1 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 # Dependencies specify other packages that your package needs in order to work. # To automatically upgrade your package dependencies to the latest versions @@ -31,16 +31,15 @@ dependencies: flutter: sdk: flutter - # The following adds the Cupertino Icons font to your application. # Use with the CupertinoIcons class for iOS style icons. cupertino_icons: ^1.0.8 googleapis: ^13.2.0 http: ^1.2.2 provider: ^6.1.2 - url_launcher: ^6.3.0 + url_launcher: ^6.3.1 flex_color_scheme: ^7.3.1 - go_router: ^14.2.7 + go_router: ^14.3.0 split_view: ^3.2.1 dev_dependencies: @@ -52,7 +51,7 @@ dev_dependencies: # activated in the `analysis_options.yaml` file located at the root of your # package. See that file for information about deactivating specific lint # rules and activating additional ones. - flutter_lints: ^4.0.0 + flutter_lints: ^5.0.0 # For information on the generic Dart part of this file, see the # following page: https://dart.dev/tools/pub/pubspec diff --git a/adaptive_app/step_06/web/index.html b/adaptive_app/step_06/web/index.html index ce0ee3b7e5..86f03b98cf 100644 --- a/adaptive_app/step_06/web/index.html +++ b/adaptive_app/step_06/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/adaptive_app/step_06/yt_cors_proxy/pubspec.yaml b/adaptive_app/step_06/yt_cors_proxy/pubspec.yaml index 227b29e1a8..1806246610 100644 --- a/adaptive_app/step_06/yt_cors_proxy/pubspec.yaml +++ b/adaptive_app/step_06/yt_cors_proxy/pubspec.yaml @@ -3,7 +3,7 @@ description: A YouTube CORS Proxy Server. version: 1.0.0 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 dependencies: shelf: ^1.4.0 @@ -11,4 +11,4 @@ dependencies: shelf_cors_headers: ^0.1.5 dev_dependencies: - lints: ^4.0.0 + lints: ^5.0.0 diff --git a/adaptive_app/step_07/.gitignore b/adaptive_app/step_07/.gitignore index b3142bea5a..7e5d8fcbc3 100644 --- a/adaptive_app/step_07/.gitignore +++ b/adaptive_app/step_07/.gitignore @@ -5,9 +5,11 @@ *.swp .DS_Store .atom/ +.build/ .buildlog/ .history .svn/ +.swiftpm/ migrate_working_dir/ # IntelliJ related diff --git a/adaptive_app/step_07/android/gradle.properties b/adaptive_app/step_07/android/gradle.properties index 2597170821..f018a61817 100644 --- a/adaptive_app/step_07/android/gradle.properties +++ b/adaptive_app/step_07/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/adaptive_app/step_07/android/gradle/wrapper/gradle-wrapper.properties b/adaptive_app/step_07/android/gradle/wrapper/gradle-wrapper.properties index e1ca574ef0..7bb2df6ba6 100644 --- a/adaptive_app/step_07/android/gradle/wrapper/gradle-wrapper.properties +++ b/adaptive_app/step_07/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip diff --git a/adaptive_app/step_07/android/settings.gradle b/adaptive_app/step_07/android/settings.gradle index 536165d35a..b9e43bd376 100644 --- a/adaptive_app/step_07/android/settings.gradle +++ b/adaptive_app/step_07/android/settings.gradle @@ -18,8 +18,8 @@ pluginManagement { plugins { id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "7.3.0" apply false - id "org.jetbrains.kotlin.android" version "1.7.10" apply false + id "com.android.application" version "8.1.0" apply false + id "org.jetbrains.kotlin.android" version "1.8.22" apply false } include ":app" diff --git a/adaptive_app/step_07/ios/Runner.xcodeproj/project.pbxproj b/adaptive_app/step_07/ios/Runner.xcodeproj/project.pbxproj index 30ae5ab666..8b819eeedd 100644 --- a/adaptive_app/step_07/ios/Runner.xcodeproj/project.pbxproj +++ b/adaptive_app/step_07/ios/Runner.xcodeproj/project.pbxproj @@ -10,12 +10,12 @@ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; - 42C60D6590E858F862BC3BEC /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C194B19D5B3EF5F7535182F3 /* Pods_RunnerTests.framework */; }; + 6347137416242FF2FA3400D7 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 68B89C8BC43A0EB4D05CD361 /* Pods_RunnerTests.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - F48504C05DEF157508D4C422 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2748616BCB087C12B60D81C6 /* Pods_Runner.framework */; }; + D308D40B9602F03194CCC8C6 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BC6E7475880FE14C9797B3EA /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,13 +42,17 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 047EF70300003B3C5FDFEC24 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 2748616BCB087C12B60D81C6 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 251EE28A7FF501C44BF6B0F6 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 42159C927C1597F68701DAA2 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 6745E985BA95E828608C99DB /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 68B89C8BC43A0EB4D05CD361 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 6B85F831BE7920B112EE230D /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 6D751E93919DEED7F636EF65 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; @@ -59,28 +63,24 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - A81A3406F0D20D4946FC3BB2 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - C194B19D5B3EF5F7535182F3 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - C8F29CF7FD5B942D9A0E4B7B /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - CB61B2F33ED588F8A38B4D6C /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - CCDF2E9EA2888015B77A0964 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - F8DF0937E1551E76F35F3C45 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + A5C1F25F59E5AD5FD3838248 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + BC6E7475880FE14C9797B3EA /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 97C146EB1CF9000F007C117D /* Frameworks */ = { + 3DB9EA7E3142F079BD794E7C /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - F48504C05DEF157508D4C422 /* Pods_Runner.framework in Frameworks */, + 6347137416242FF2FA3400D7 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - F06670E8BAC92C483BCC1B7A /* Frameworks */ = { + 97C146EB1CF9000F007C117D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 42C60D6590E858F862BC3BEC /* Pods_RunnerTests.framework in Frameworks */, + D308D40B9602F03194CCC8C6 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -95,15 +95,6 @@ path = RunnerTests; sourceTree = ""; }; - 91D430A9A394C16D4F29B7B0 /* Frameworks */ = { - isa = PBXGroup; - children = ( - 2748616BCB087C12B60D81C6 /* Pods_Runner.framework */, - C194B19D5B3EF5F7535182F3 /* Pods_RunnerTests.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( @@ -122,8 +113,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - C9E387F3BE43FCDA922C0E34 /* Pods */, - 91D430A9A394C16D4F29B7B0 /* Frameworks */, + D006D16AAD3589AB2996AF19 /* Pods */, + F4496A5813DF2FCC0EF11787 /* Frameworks */, ); sourceTree = ""; }; @@ -151,20 +142,29 @@ path = Runner; sourceTree = ""; }; - C9E387F3BE43FCDA922C0E34 /* Pods */ = { + D006D16AAD3589AB2996AF19 /* Pods */ = { isa = PBXGroup; children = ( - F8DF0937E1551E76F35F3C45 /* Pods-Runner.debug.xcconfig */, - 42159C927C1597F68701DAA2 /* Pods-Runner.release.xcconfig */, - C8F29CF7FD5B942D9A0E4B7B /* Pods-Runner.profile.xcconfig */, - CCDF2E9EA2888015B77A0964 /* Pods-RunnerTests.debug.xcconfig */, - CB61B2F33ED588F8A38B4D6C /* Pods-RunnerTests.release.xcconfig */, - A81A3406F0D20D4946FC3BB2 /* Pods-RunnerTests.profile.xcconfig */, + A5C1F25F59E5AD5FD3838248 /* Pods-Runner.debug.xcconfig */, + 251EE28A7FF501C44BF6B0F6 /* Pods-Runner.release.xcconfig */, + 6745E985BA95E828608C99DB /* Pods-Runner.profile.xcconfig */, + 047EF70300003B3C5FDFEC24 /* Pods-RunnerTests.debug.xcconfig */, + 6B85F831BE7920B112EE230D /* Pods-RunnerTests.release.xcconfig */, + 6D751E93919DEED7F636EF65 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; sourceTree = ""; }; + F4496A5813DF2FCC0EF11787 /* Frameworks */ = { + isa = PBXGroup; + children = ( + BC6E7475880FE14C9797B3EA /* Pods_Runner.framework */, + 68B89C8BC43A0EB4D05CD361 /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 6320A3FB058755C937EC943F /* [CP] Check Pods Manifest.lock */, + 30D80C78F4BA8C88B202898C /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - F06670E8BAC92C483BCC1B7A /* Frameworks */, + 3DB9EA7E3142F079BD794E7C /* Frameworks */, ); buildRules = ( ); @@ -191,15 +191,15 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 9ED36595F4D9AD157018ED35 /* [CP] Check Pods Manifest.lock */, + E5D0453177845FBE309EB6CD /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - C48562E028A9C83584467B6D /* [CP] Embed Pods Frameworks */, - B7EB2BFF8702E1333DE6F512 /* [CP] Copy Pods Resources */, + EFF678415838948476F54A4B /* [CP] Embed Pods Frameworks */, + AAB3673B687CAB8ABCA6F996 /* [CP] Copy Pods Resources */, ); buildRules = ( ); @@ -271,43 +271,43 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + 30D80C78F4BA8C88B202898C /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( - "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "Thin Binary"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - 6320A3FB058755C937EC943F /* [CP] Check Pods Manifest.lock */ = { + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); + name = "Thin Binary"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; @@ -324,46 +324,46 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - 9ED36595F4D9AD157018ED35 /* [CP] Check Pods Manifest.lock */ = { + AAB3673B687CAB8ABCA6F996 /* [CP] Copy Pods Resources */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; + name = "[CP] Copy Pods Resources"; outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n"; showEnvVarsInLog = 0; }; - B7EB2BFF8702E1333DE6F512 /* [CP] Copy Pods Resources */ = { + E5D0453177845FBE309EB6CD /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Copy Pods Resources"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - C48562E028A9C83584467B6D /* [CP] Embed Pods Frameworks */ = { + EFF678415838948476F54A4B /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -505,7 +505,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = CCDF2E9EA2888015B77A0964 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 047EF70300003B3C5FDFEC24 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -523,7 +523,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = CB61B2F33ED588F8A38B4D6C /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 6B85F831BE7920B112EE230D /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -539,7 +539,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = A81A3406F0D20D4946FC3BB2 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 6D751E93919DEED7F636EF65 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/adaptive_app/step_07/linux/CMakeLists.txt b/adaptive_app/step_07/linux/CMakeLists.txt index 95047a637a..860cc230f2 100644 --- a/adaptive_app/step_07/linux/CMakeLists.txt +++ b/adaptive_app/step_07/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/adaptive_app/step_07/linux/my_application.cc b/adaptive_app/step_07/linux/my_application.cc deleted file mode 100644 index a2e720d593..0000000000 --- a/adaptive_app/step_07/linux/my_application.cc +++ /dev/null @@ -1,124 +0,0 @@ -#include "my_application.h" - -#include -#ifdef GDK_WINDOWING_X11 -#include -#endif - -#include "flutter/generated_plugin_registrant.h" - -struct _MyApplication { - GtkApplication parent_instance; - char** dart_entrypoint_arguments; -}; - -G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) - -// Implements GApplication::activate. -static void my_application_activate(GApplication* application) { - MyApplication* self = MY_APPLICATION(application); - GtkWindow* window = - GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); - - // Use a header bar when running in GNOME as this is the common style used - // by applications and is the setup most users will be using (e.g. Ubuntu - // desktop). - // If running on X and not using GNOME then just use a traditional title bar - // in case the window manager does more exotic layout, e.g. tiling. - // If running on Wayland assume the header bar will work (may need changing - // if future cases occur). - gboolean use_header_bar = TRUE; -#ifdef GDK_WINDOWING_X11 - GdkScreen* screen = gtk_window_get_screen(window); - if (GDK_IS_X11_SCREEN(screen)) { - const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); - if (g_strcmp0(wm_name, "GNOME Shell") != 0) { - use_header_bar = FALSE; - } - } -#endif - if (use_header_bar) { - GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); - gtk_widget_show(GTK_WIDGET(header_bar)); - gtk_header_bar_set_title(header_bar, "adaptive_app"); - gtk_header_bar_set_show_close_button(header_bar, TRUE); - gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); - } else { - gtk_window_set_title(window, "adaptive_app"); - } - - gtk_window_set_default_size(window, 1280, 720); - gtk_widget_show(GTK_WIDGET(window)); - - g_autoptr(FlDartProject) project = fl_dart_project_new(); - fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); - - FlView* view = fl_view_new(project); - gtk_widget_show(GTK_WIDGET(view)); - gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); - - fl_register_plugins(FL_PLUGIN_REGISTRY(view)); - - gtk_widget_grab_focus(GTK_WIDGET(view)); -} - -// Implements GApplication::local_command_line. -static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { - MyApplication* self = MY_APPLICATION(application); - // Strip out the first argument as it is the binary name. - self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); - - g_autoptr(GError) error = nullptr; - if (!g_application_register(application, nullptr, &error)) { - g_warning("Failed to register: %s", error->message); - *exit_status = 1; - return TRUE; - } - - g_application_activate(application); - *exit_status = 0; - - return TRUE; -} - -// Implements GApplication::startup. -static void my_application_startup(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application startup. - - G_APPLICATION_CLASS(my_application_parent_class)->startup(application); -} - -// Implements GApplication::shutdown. -static void my_application_shutdown(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application shutdown. - - G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); -} - -// Implements GObject::dispose. -static void my_application_dispose(GObject* object) { - MyApplication* self = MY_APPLICATION(object); - g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); - G_OBJECT_CLASS(my_application_parent_class)->dispose(object); -} - -static void my_application_class_init(MyApplicationClass* klass) { - G_APPLICATION_CLASS(klass)->activate = my_application_activate; - G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; - G_APPLICATION_CLASS(klass)->startup = my_application_startup; - G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; - G_OBJECT_CLASS(klass)->dispose = my_application_dispose; -} - -static void my_application_init(MyApplication* self) {} - -MyApplication* my_application_new() { - return MY_APPLICATION(g_object_new(my_application_get_type(), - "application-id", APPLICATION_ID, - "flags", G_APPLICATION_NON_UNIQUE, - nullptr)); -} diff --git a/adaptive_app/step_07/linux/runner/CMakeLists.txt b/adaptive_app/step_07/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/adaptive_app/step_07/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/adaptive_app/step_07/linux/main.cc b/adaptive_app/step_07/linux/runner/main.cc similarity index 100% rename from adaptive_app/step_07/linux/main.cc rename to adaptive_app/step_07/linux/runner/main.cc diff --git a/adaptive_app/step_07/linux/runner/my_application.cc b/adaptive_app/step_07/linux/runner/my_application.cc new file mode 100644 index 0000000000..c839eec643 --- /dev/null +++ b/adaptive_app/step_07/linux/runner/my_application.cc @@ -0,0 +1,130 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "adaptive_app"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "adaptive_app"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/adaptive_app/step_07/linux/my_application.h b/adaptive_app/step_07/linux/runner/my_application.h similarity index 100% rename from adaptive_app/step_07/linux/my_application.h rename to adaptive_app/step_07/linux/runner/my_application.h diff --git a/adaptive_app/step_07/macos/Runner.xcodeproj/project.pbxproj b/adaptive_app/step_07/macos/Runner.xcodeproj/project.pbxproj index b6d169121e..464be58faa 100644 --- a/adaptive_app/step_07/macos/Runner.xcodeproj/project.pbxproj +++ b/adaptive_app/step_07/macos/Runner.xcodeproj/project.pbxproj @@ -27,8 +27,8 @@ 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - ECB4C053DC55082E8A040D1A /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FD911459AD1F476DEDDCC9F4 /* Pods_RunnerTests.framework */; }; - FDC71A1EEAA254FEC886EB78 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F4F870AC638E18B9F9B060D3 /* Pods_Runner.framework */; }; + AD4816DC1A3E8B0FCF3EF97F /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 899E375D32A57DB46B0D5015 /* Pods_RunnerTests.framework */; }; + CB9653FB11619FF04E6D0A85 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DDCF1329859CB2B135009A90 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -78,16 +78,16 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 39BD53855A3E996DE13FF7E1 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 6465FEE961AF3C63F233ECEE /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 5E6CD848E5EAE9ED3804128A /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 72EA5204D593132D4180B92F /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 76C7A6CB8682BC6F15F956AB /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 891F8B0961956758849B5418 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 866BF68DD31095014D94FC9B /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 899E375D32A57DB46B0D5015 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - 9FC40E64AE7C38B1EE348DA5 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - A2E1A3E227A7DDA72E5906AF /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - CF403D156B0ADDBBF0864CCF /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - F4F870AC638E18B9F9B060D3 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - FD911459AD1F476DEDDCC9F4 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + A7621843ACCF358083274DC3 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + C5367377FB9F54B0D1F2FFB3 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + DDCF1329859CB2B135009A90 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - ECB4C053DC55082E8A040D1A /* Pods_RunnerTests.framework in Frameworks */, + AD4816DC1A3E8B0FCF3EF97F /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,27 +103,13 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - FDC71A1EEAA254FEC886EB78 /* Pods_Runner.framework in Frameworks */, + CB9653FB11619FF04E6D0A85 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 17A29378C91B2175D8B08B90 /* Pods */ = { - isa = PBXGroup; - children = ( - 39BD53855A3E996DE13FF7E1 /* Pods-Runner.debug.xcconfig */, - CF403D156B0ADDBBF0864CCF /* Pods-Runner.release.xcconfig */, - 9FC40E64AE7C38B1EE348DA5 /* Pods-Runner.profile.xcconfig */, - A2E1A3E227A7DDA72E5906AF /* Pods-RunnerTests.debug.xcconfig */, - 6465FEE961AF3C63F233ECEE /* Pods-RunnerTests.release.xcconfig */, - 891F8B0961956758849B5418 /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; 331C80D6294CF71000263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -151,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 17A29378C91B2175D8B08B90 /* Pods */, + 4C48F4B1A2BDCABA73181790 /* Pods */, ); sourceTree = ""; }; @@ -199,11 +185,25 @@ path = Runner; sourceTree = ""; }; + 4C48F4B1A2BDCABA73181790 /* Pods */ = { + isa = PBXGroup; + children = ( + 72EA5204D593132D4180B92F /* Pods-Runner.debug.xcconfig */, + 76C7A6CB8682BC6F15F956AB /* Pods-Runner.release.xcconfig */, + 5E6CD848E5EAE9ED3804128A /* Pods-Runner.profile.xcconfig */, + 866BF68DD31095014D94FC9B /* Pods-RunnerTests.debug.xcconfig */, + A7621843ACCF358083274DC3 /* Pods-RunnerTests.release.xcconfig */, + C5367377FB9F54B0D1F2FFB3 /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - F4F870AC638E18B9F9B060D3 /* Pods_Runner.framework */, - FD911459AD1F476DEDDCC9F4 /* Pods_RunnerTests.framework */, + DDCF1329859CB2B135009A90 /* Pods_Runner.framework */, + 899E375D32A57DB46B0D5015 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 45C864DC078748C1D62A95DC /* [CP] Check Pods Manifest.lock */, + 19A2D7810889EFE871D620A3 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,14 +234,14 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - C5D943EB32FE4BF5C4040659 /* [CP] Check Pods Manifest.lock */, + 71A1F8B56A856017B515FABC /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - CCB8A7696C8846B70515A41B /* [CP] Embed Pods Frameworks */, - 4F2DD44082FE0A137D51A681 /* [CP] Copy Pods Resources */, + F1B6D708C1D90A015E3B23B9 /* [CP] Embed Pods Frameworks */, + 9FFDA361F6BA65B67648E90C /* [CP] Copy Pods Resources */, ); buildRules = ( ); @@ -324,6 +324,28 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ + 19A2D7810889EFE871D620A3 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -362,7 +384,7 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 45C864DC078748C1D62A95DC /* [CP] Check Pods Manifest.lock */ = { + 71A1F8B56A856017B515FABC /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -377,14 +399,14 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 4F2DD44082FE0A137D51A681 /* [CP] Copy Pods Resources */ = { + 9FFDA361F6BA65B67648E90C /* [CP] Copy Pods Resources */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -401,29 +423,7 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n"; showEnvVarsInLog = 0; }; - C5D943EB32FE4BF5C4040659 /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; - CCB8A7696C8846B70515A41B /* [CP] Embed Pods Frameworks */ = { + F1B6D708C1D90A015E3B23B9 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -491,7 +491,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = A2E1A3E227A7DDA72E5906AF /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 866BF68DD31095014D94FC9B /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -506,7 +506,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 6465FEE961AF3C63F233ECEE /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = A7621843ACCF358083274DC3 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -521,7 +521,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 891F8B0961956758849B5418 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = C5367377FB9F54B0D1F2FFB3 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/adaptive_app/step_07/macos/Runner/AppDelegate.swift b/adaptive_app/step_07/macos/Runner/AppDelegate.swift index 8e02df2888..b3c1761412 100644 --- a/adaptive_app/step_07/macos/Runner/AppDelegate.swift +++ b/adaptive_app/step_07/macos/Runner/AppDelegate.swift @@ -6,4 +6,8 @@ class AppDelegate: FlutterAppDelegate { override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { return true } + + override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { + return true + } } diff --git a/adaptive_app/step_07/pubspec.yaml b/adaptive_app/step_07/pubspec.yaml index e602258e28..808c330e72 100644 --- a/adaptive_app/step_07/pubspec.yaml +++ b/adaptive_app/step_07/pubspec.yaml @@ -19,7 +19,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev version: 1.0.0+1 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 # Dependencies specify other packages that your package needs in order to work. # To automatically upgrade your package dependencies to the latest versions @@ -31,15 +31,14 @@ dependencies: flutter: sdk: flutter - # The following adds the Cupertino Icons font to your application. # Use with the CupertinoIcons class for iOS style icons. cupertino_icons: ^1.0.8 googleapis: ^13.2.0 provider: ^6.1.2 - url_launcher: ^6.3.0 + url_launcher: ^6.3.1 flex_color_scheme: ^7.3.1 - go_router: ^14.2.7 + go_router: ^14.3.0 split_view: ^3.2.1 googleapis_auth: ^1.6.0 google_sign_in: ^6.2.1 @@ -55,7 +54,7 @@ dev_dependencies: # activated in the `analysis_options.yaml` file located at the root of your # package. See that file for information about deactivating specific lint # rules and activating additional ones. - flutter_lints: ^4.0.0 + flutter_lints: ^5.0.0 # For information on the generic Dart part of this file, see the # following page: https://dart.dev/tools/pub/pubspec diff --git a/adaptive_app/step_07/web/index.html b/adaptive_app/step_07/web/index.html index e29cfadf48..6200c16df1 100644 --- a/adaptive_app/step_07/web/index.html +++ b/adaptive_app/step_07/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/adaptive_app/step_07/yt_cors_proxy/pubspec.yaml b/adaptive_app/step_07/yt_cors_proxy/pubspec.yaml index 227b29e1a8..1806246610 100644 --- a/adaptive_app/step_07/yt_cors_proxy/pubspec.yaml +++ b/adaptive_app/step_07/yt_cors_proxy/pubspec.yaml @@ -3,7 +3,7 @@ description: A YouTube CORS Proxy Server. version: 1.0.0 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 dependencies: shelf: ^1.4.0 @@ -11,4 +11,4 @@ dependencies: shelf_cors_headers: ^0.1.5 dev_dependencies: - lints: ^4.0.0 + lints: ^5.0.0 diff --git a/animated-responsive-layout/step_03/pubspec.yaml b/animated-responsive-layout/step_03/pubspec.yaml index 0b322d4888..a991c6d7b9 100644 --- a/animated-responsive-layout/step_03/pubspec.yaml +++ b/animated-responsive-layout/step_03/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: 'none' version: 0.1.0 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 dependencies: flutter: diff --git a/animated-responsive-layout/step_04/pubspec.yaml b/animated-responsive-layout/step_04/pubspec.yaml index 79d8540291..106fc3a200 100644 --- a/animated-responsive-layout/step_04/pubspec.yaml +++ b/animated-responsive-layout/step_04/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: 'none' version: 0.1.0 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 dependencies: flutter: diff --git a/animated-responsive-layout/step_05/pubspec.yaml b/animated-responsive-layout/step_05/pubspec.yaml index 79d8540291..106fc3a200 100644 --- a/animated-responsive-layout/step_05/pubspec.yaml +++ b/animated-responsive-layout/step_05/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: 'none' version: 0.1.0 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 dependencies: flutter: diff --git a/animated-responsive-layout/step_06/pubspec.yaml b/animated-responsive-layout/step_06/pubspec.yaml index 79d8540291..106fc3a200 100644 --- a/animated-responsive-layout/step_06/pubspec.yaml +++ b/animated-responsive-layout/step_06/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: 'none' version: 0.1.0 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 dependencies: flutter: diff --git a/animated-responsive-layout/step_07/pubspec.yaml b/animated-responsive-layout/step_07/pubspec.yaml index 79d8540291..106fc3a200 100644 --- a/animated-responsive-layout/step_07/pubspec.yaml +++ b/animated-responsive-layout/step_07/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: 'none' version: 0.1.0 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 dependencies: flutter: diff --git a/animated-responsive-layout/step_08/pubspec.yaml b/animated-responsive-layout/step_08/pubspec.yaml index 79d8540291..106fc3a200 100644 --- a/animated-responsive-layout/step_08/pubspec.yaml +++ b/animated-responsive-layout/step_08/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: 'none' version: 0.1.0 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 dependencies: flutter: diff --git a/animations/codelab_rebuild.yaml b/animations/codelab_rebuild.yaml index 6d9d837664..2affda2eaa 100644 --- a/animations/codelab_rebuild.yaml +++ b/animations/codelab_rebuild.yaml @@ -20,7 +20,7 @@ steps: version: 1.0.0 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 dependencies: animations: ^2.0.0 diff --git a/animations/step_01/pubspec.yaml b/animations/step_01/pubspec.yaml index 52735dfa55..f3328a6945 100644 --- a/animations/step_01/pubspec.yaml +++ b/animations/step_01/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: "none" version: 1.0.0 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 dependencies: animations: ^2.0.0 diff --git a/animations/step_02/pubspec.yaml b/animations/step_02/pubspec.yaml index 52735dfa55..f3328a6945 100644 --- a/animations/step_02/pubspec.yaml +++ b/animations/step_02/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: "none" version: 1.0.0 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 dependencies: animations: ^2.0.0 diff --git a/animations/step_03/pubspec.yaml b/animations/step_03/pubspec.yaml index 52735dfa55..f3328a6945 100644 --- a/animations/step_03/pubspec.yaml +++ b/animations/step_03/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: "none" version: 1.0.0 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 dependencies: animations: ^2.0.0 diff --git a/animations/step_04/pubspec.yaml b/animations/step_04/pubspec.yaml index 52735dfa55..f3328a6945 100644 --- a/animations/step_04/pubspec.yaml +++ b/animations/step_04/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: "none" version: 1.0.0 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 dependencies: animations: ^2.0.0 diff --git a/animations/step_05/pubspec.yaml b/animations/step_05/pubspec.yaml index 52735dfa55..f3328a6945 100644 --- a/animations/step_05/pubspec.yaml +++ b/animations/step_05/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: "none" version: 1.0.0 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 dependencies: animations: ^2.0.0 diff --git a/audio_soloud/step_02/pubspec.yaml b/audio_soloud/step_02/pubspec.yaml index 7e11c31a24..6b97c88654 100644 --- a/audio_soloud/step_02/pubspec.yaml +++ b/audio_soloud/step_02/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: 'none' version: 0.1.0 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 dependencies: flutter: diff --git a/audio_soloud/step_03/pubspec.yaml b/audio_soloud/step_03/pubspec.yaml index 7e11c31a24..6b97c88654 100644 --- a/audio_soloud/step_03/pubspec.yaml +++ b/audio_soloud/step_03/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: 'none' version: 0.1.0 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 dependencies: flutter: diff --git a/audio_soloud/step_04a/pubspec.yaml b/audio_soloud/step_04a/pubspec.yaml index 7e11c31a24..6b97c88654 100644 --- a/audio_soloud/step_04a/pubspec.yaml +++ b/audio_soloud/step_04a/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: 'none' version: 0.1.0 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 dependencies: flutter: diff --git a/audio_soloud/step_04b/pubspec.yaml b/audio_soloud/step_04b/pubspec.yaml index 7e11c31a24..6b97c88654 100644 --- a/audio_soloud/step_04b/pubspec.yaml +++ b/audio_soloud/step_04b/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: 'none' version: 0.1.0 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 dependencies: flutter: diff --git a/audio_soloud/step_05/pubspec.yaml b/audio_soloud/step_05/pubspec.yaml index 7e11c31a24..6b97c88654 100644 --- a/audio_soloud/step_05/pubspec.yaml +++ b/audio_soloud/step_05/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: 'none' version: 0.1.0 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 dependencies: flutter: diff --git a/audio_soloud/step_06/pubspec.yaml b/audio_soloud/step_06/pubspec.yaml index 7e11c31a24..6b97c88654 100644 --- a/audio_soloud/step_06/pubspec.yaml +++ b/audio_soloud/step_06/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: 'none' version: 0.1.0 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 dependencies: flutter: diff --git a/boring_to_beautiful/codelab_rebuild.yaml b/boring_to_beautiful/codelab_rebuild.yaml index 2b65a84d96..b0d4612fca 100644 --- a/boring_to_beautiful/codelab_rebuild.yaml +++ b/boring_to_beautiful/codelab_rebuild.yaml @@ -42,7 +42,7 @@ steps: version: 1.0.0 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 dependencies: flutter: diff --git a/boring_to_beautiful/final/pubspec.yaml b/boring_to_beautiful/final/pubspec.yaml index dac70655b2..e41af5ebf4 100644 --- a/boring_to_beautiful/final/pubspec.yaml +++ b/boring_to_beautiful/final/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: "none" version: 1.0.0 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 dependencies: flutter: diff --git a/boring_to_beautiful/step_01/pubspec.yaml b/boring_to_beautiful/step_01/pubspec.yaml index 96e04885ec..03677ca8dc 100644 --- a/boring_to_beautiful/step_01/pubspec.yaml +++ b/boring_to_beautiful/step_01/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: "none" version: 1.0.0 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 dependencies: flutter: diff --git a/boring_to_beautiful/step_02/pubspec.yaml b/boring_to_beautiful/step_02/pubspec.yaml index 96e04885ec..03677ca8dc 100644 --- a/boring_to_beautiful/step_02/pubspec.yaml +++ b/boring_to_beautiful/step_02/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: "none" version: 1.0.0 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 dependencies: flutter: diff --git a/boring_to_beautiful/step_03/pubspec.yaml b/boring_to_beautiful/step_03/pubspec.yaml index dac70655b2..e41af5ebf4 100644 --- a/boring_to_beautiful/step_03/pubspec.yaml +++ b/boring_to_beautiful/step_03/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: "none" version: 1.0.0 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 dependencies: flutter: diff --git a/boring_to_beautiful/step_04/pubspec.yaml b/boring_to_beautiful/step_04/pubspec.yaml index dac70655b2..e41af5ebf4 100644 --- a/boring_to_beautiful/step_04/pubspec.yaml +++ b/boring_to_beautiful/step_04/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: "none" version: 1.0.0 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 dependencies: flutter: diff --git a/boring_to_beautiful/step_05/pubspec.yaml b/boring_to_beautiful/step_05/pubspec.yaml index dac70655b2..e41af5ebf4 100644 --- a/boring_to_beautiful/step_05/pubspec.yaml +++ b/boring_to_beautiful/step_05/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: "none" version: 1.0.0 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 dependencies: flutter: diff --git a/boring_to_beautiful/step_06/pubspec.yaml b/boring_to_beautiful/step_06/pubspec.yaml index dac70655b2..e41af5ebf4 100644 --- a/boring_to_beautiful/step_06/pubspec.yaml +++ b/boring_to_beautiful/step_06/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: "none" version: 1.0.0 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 dependencies: flutter: diff --git a/boring_to_beautiful/step_07/pubspec.yaml b/boring_to_beautiful/step_07/pubspec.yaml index dac70655b2..e41af5ebf4 100644 --- a/boring_to_beautiful/step_07/pubspec.yaml +++ b/boring_to_beautiful/step_07/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: "none" version: 1.0.0 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 dependencies: flutter: diff --git a/brick_breaker/codelab_rebuild.yaml b/brick_breaker/codelab_rebuild.yaml index 011da99168..ebe8bf548d 100644 --- a/brick_breaker/codelab_rebuild.yaml +++ b/brick_breaker/codelab_rebuild.yaml @@ -22,7 +22,7 @@ steps: version: 0.1.0 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 dependencies: flame: ^1.18.0 diff --git a/brick_breaker/step_03/pubspec.yaml b/brick_breaker/step_03/pubspec.yaml index 7f95792448..4da1f0923a 100644 --- a/brick_breaker/step_03/pubspec.yaml +++ b/brick_breaker/step_03/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: 'none' version: 0.1.0 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 dependencies: flame: ^1.18.0 diff --git a/brick_breaker/step_04/pubspec.yaml b/brick_breaker/step_04/pubspec.yaml index 7f95792448..4da1f0923a 100644 --- a/brick_breaker/step_04/pubspec.yaml +++ b/brick_breaker/step_04/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: 'none' version: 0.1.0 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 dependencies: flame: ^1.18.0 diff --git a/brick_breaker/step_05/pubspec.yaml b/brick_breaker/step_05/pubspec.yaml index 7f95792448..4da1f0923a 100644 --- a/brick_breaker/step_05/pubspec.yaml +++ b/brick_breaker/step_05/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: 'none' version: 0.1.0 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 dependencies: flame: ^1.18.0 diff --git a/brick_breaker/step_06/pubspec.yaml b/brick_breaker/step_06/pubspec.yaml index 7f95792448..4da1f0923a 100644 --- a/brick_breaker/step_06/pubspec.yaml +++ b/brick_breaker/step_06/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: 'none' version: 0.1.0 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 dependencies: flame: ^1.18.0 diff --git a/brick_breaker/step_07/pubspec.yaml b/brick_breaker/step_07/pubspec.yaml index 7f95792448..4da1f0923a 100644 --- a/brick_breaker/step_07/pubspec.yaml +++ b/brick_breaker/step_07/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: 'none' version: 0.1.0 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 dependencies: flame: ^1.18.0 diff --git a/brick_breaker/step_08/pubspec.yaml b/brick_breaker/step_08/pubspec.yaml index 7f95792448..4da1f0923a 100644 --- a/brick_breaker/step_08/pubspec.yaml +++ b/brick_breaker/step_08/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: 'none' version: 0.1.0 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 dependencies: flame: ^1.18.0 diff --git a/brick_breaker/step_09/pubspec.yaml b/brick_breaker/step_09/pubspec.yaml index 7f95792448..4da1f0923a 100644 --- a/brick_breaker/step_09/pubspec.yaml +++ b/brick_breaker/step_09/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: 'none' version: 0.1.0 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 dependencies: flame: ^1.18.0 diff --git a/brick_breaker/step_10/pubspec.yaml b/brick_breaker/step_10/pubspec.yaml index 7f95792448..4da1f0923a 100644 --- a/brick_breaker/step_10/pubspec.yaml +++ b/brick_breaker/step_10/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: 'none' version: 0.1.0 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 dependencies: flame: ^1.18.0 diff --git a/dart-patterns-and-records/codelab_rebuild.yaml b/dart-patterns-and-records/codelab_rebuild.yaml index cf23e05c67..62dbfb45e9 100644 --- a/dart-patterns-and-records/codelab_rebuild.yaml +++ b/dart-patterns-and-records/codelab_rebuild.yaml @@ -66,7 +66,7 @@ steps: version: 0.1.0 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 dependencies: flutter: diff --git a/dart-patterns-and-records/step_03/pubspec.yaml b/dart-patterns-and-records/step_03/pubspec.yaml index b927aa08e6..15be3ae8b1 100644 --- a/dart-patterns-and-records/step_03/pubspec.yaml +++ b/dart-patterns-and-records/step_03/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: 'none' version: 0.1.0 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 dependencies: flutter: diff --git a/dart-patterns-and-records/step_04/pubspec.yaml b/dart-patterns-and-records/step_04/pubspec.yaml index b927aa08e6..15be3ae8b1 100644 --- a/dart-patterns-and-records/step_04/pubspec.yaml +++ b/dart-patterns-and-records/step_04/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: 'none' version: 0.1.0 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 dependencies: flutter: diff --git a/dart-patterns-and-records/step_05/pubspec.yaml b/dart-patterns-and-records/step_05/pubspec.yaml index b927aa08e6..15be3ae8b1 100644 --- a/dart-patterns-and-records/step_05/pubspec.yaml +++ b/dart-patterns-and-records/step_05/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: 'none' version: 0.1.0 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 dependencies: flutter: diff --git a/dart-patterns-and-records/step_06_a/pubspec.yaml b/dart-patterns-and-records/step_06_a/pubspec.yaml index b927aa08e6..15be3ae8b1 100644 --- a/dart-patterns-and-records/step_06_a/pubspec.yaml +++ b/dart-patterns-and-records/step_06_a/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: 'none' version: 0.1.0 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 dependencies: flutter: diff --git a/dart-patterns-and-records/step_06_b/pubspec.yaml b/dart-patterns-and-records/step_06_b/pubspec.yaml index b927aa08e6..15be3ae8b1 100644 --- a/dart-patterns-and-records/step_06_b/pubspec.yaml +++ b/dart-patterns-and-records/step_06_b/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: 'none' version: 0.1.0 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 dependencies: flutter: diff --git a/dart-patterns-and-records/step_07_a/pubspec.yaml b/dart-patterns-and-records/step_07_a/pubspec.yaml index b927aa08e6..15be3ae8b1 100644 --- a/dart-patterns-and-records/step_07_a/pubspec.yaml +++ b/dart-patterns-and-records/step_07_a/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: 'none' version: 0.1.0 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 dependencies: flutter: diff --git a/dart-patterns-and-records/step_07_b/pubspec.yaml b/dart-patterns-and-records/step_07_b/pubspec.yaml index b927aa08e6..15be3ae8b1 100644 --- a/dart-patterns-and-records/step_07_b/pubspec.yaml +++ b/dart-patterns-and-records/step_07_b/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: 'none' version: 0.1.0 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 dependencies: flutter: diff --git a/dart-patterns-and-records/step_08/pubspec.yaml b/dart-patterns-and-records/step_08/pubspec.yaml index b927aa08e6..15be3ae8b1 100644 --- a/dart-patterns-and-records/step_08/pubspec.yaml +++ b/dart-patterns-and-records/step_08/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: 'none' version: 0.1.0 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 dependencies: flutter: diff --git a/dart-patterns-and-records/step_09/pubspec.yaml b/dart-patterns-and-records/step_09/pubspec.yaml index b927aa08e6..15be3ae8b1 100644 --- a/dart-patterns-and-records/step_09/pubspec.yaml +++ b/dart-patterns-and-records/step_09/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: 'none' version: 0.1.0 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 dependencies: flutter: diff --git a/dart-patterns-and-records/step_10/pubspec.yaml b/dart-patterns-and-records/step_10/pubspec.yaml index b927aa08e6..15be3ae8b1 100644 --- a/dart-patterns-and-records/step_10/pubspec.yaml +++ b/dart-patterns-and-records/step_10/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: 'none' version: 0.1.0 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 dependencies: flutter: diff --git a/dart-patterns-and-records/step_11_a/pubspec.yaml b/dart-patterns-and-records/step_11_a/pubspec.yaml index b927aa08e6..15be3ae8b1 100644 --- a/dart-patterns-and-records/step_11_a/pubspec.yaml +++ b/dart-patterns-and-records/step_11_a/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: 'none' version: 0.1.0 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 dependencies: flutter: diff --git a/dart-patterns-and-records/step_11_b/pubspec.yaml b/dart-patterns-and-records/step_11_b/pubspec.yaml index b927aa08e6..15be3ae8b1 100644 --- a/dart-patterns-and-records/step_11_b/pubspec.yaml +++ b/dart-patterns-and-records/step_11_b/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: 'none' version: 0.1.0 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 dependencies: flutter: diff --git a/dart-patterns-and-records/step_12/pubspec.yaml b/dart-patterns-and-records/step_12/pubspec.yaml index b927aa08e6..15be3ae8b1 100644 --- a/dart-patterns-and-records/step_12/pubspec.yaml +++ b/dart-patterns-and-records/step_12/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: 'none' version: 0.1.0 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 dependencies: flutter: diff --git a/deeplink_cookbook/pubspec.yaml b/deeplink_cookbook/pubspec.yaml index 5ea1ac9f8b..5def8945d8 100644 --- a/deeplink_cookbook/pubspec.yaml +++ b/deeplink_cookbook/pubspec.yaml @@ -19,7 +19,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev version: 1.0.0+1 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 # Dependencies specify other packages that your package needs in order to work. # To automatically upgrade your package dependencies to the latest versions diff --git a/ffigen_codelab/step_03/example/pubspec.yaml b/ffigen_codelab/step_03/example/pubspec.yaml index a15cf5d7b3..3398ed703c 100644 --- a/ffigen_codelab/step_03/example/pubspec.yaml +++ b/ffigen_codelab/step_03/example/pubspec.yaml @@ -19,7 +19,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev version: 1.0.0+1 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 # Dependencies specify other packages that your package needs in order to work. # To automatically upgrade your package dependencies to the latest versions diff --git a/ffigen_codelab/step_03/pubspec.yaml b/ffigen_codelab/step_03/pubspec.yaml index 21dcf18613..c2ab8a7df0 100644 --- a/ffigen_codelab/step_03/pubspec.yaml +++ b/ffigen_codelab/step_03/pubspec.yaml @@ -4,7 +4,7 @@ version: 0.0.1 homepage: environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 flutter: '>=3.3.0' dependencies: diff --git a/ffigen_codelab/step_05/example/pubspec.yaml b/ffigen_codelab/step_05/example/pubspec.yaml index a15cf5d7b3..3398ed703c 100644 --- a/ffigen_codelab/step_05/example/pubspec.yaml +++ b/ffigen_codelab/step_05/example/pubspec.yaml @@ -19,7 +19,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev version: 1.0.0+1 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 # Dependencies specify other packages that your package needs in order to work. # To automatically upgrade your package dependencies to the latest versions diff --git a/ffigen_codelab/step_05/pubspec.yaml b/ffigen_codelab/step_05/pubspec.yaml index 66067ad207..03c4abf21a 100644 --- a/ffigen_codelab/step_05/pubspec.yaml +++ b/ffigen_codelab/step_05/pubspec.yaml @@ -4,7 +4,7 @@ version: 0.0.1 homepage: environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 flutter: '>=3.3.0' dependencies: diff --git a/ffigen_codelab/step_06/example/pubspec.yaml b/ffigen_codelab/step_06/example/pubspec.yaml index a15cf5d7b3..3398ed703c 100644 --- a/ffigen_codelab/step_06/example/pubspec.yaml +++ b/ffigen_codelab/step_06/example/pubspec.yaml @@ -19,7 +19,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev version: 1.0.0+1 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 # Dependencies specify other packages that your package needs in order to work. # To automatically upgrade your package dependencies to the latest versions diff --git a/ffigen_codelab/step_06/pubspec.yaml b/ffigen_codelab/step_06/pubspec.yaml index 66067ad207..03c4abf21a 100644 --- a/ffigen_codelab/step_06/pubspec.yaml +++ b/ffigen_codelab/step_06/pubspec.yaml @@ -4,7 +4,7 @@ version: 0.0.1 homepage: environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 flutter: '>=3.3.0' dependencies: diff --git a/ffigen_codelab/step_07/example/pubspec.yaml b/ffigen_codelab/step_07/example/pubspec.yaml index 01b4176fa0..3e2ff90083 100644 --- a/ffigen_codelab/step_07/example/pubspec.yaml +++ b/ffigen_codelab/step_07/example/pubspec.yaml @@ -19,7 +19,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev version: 1.0.0+1 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 # Dependencies specify other packages that your package needs in order to work. # To automatically upgrade your package dependencies to the latest versions diff --git a/ffigen_codelab/step_07/pubspec.yaml b/ffigen_codelab/step_07/pubspec.yaml index 2c79758143..13ae9289bc 100644 --- a/ffigen_codelab/step_07/pubspec.yaml +++ b/ffigen_codelab/step_07/pubspec.yaml @@ -4,7 +4,7 @@ version: 0.0.1 homepage: environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 flutter: '>=3.3.0' dependencies: diff --git a/firebase-auth-flutterfire-ui/complete/pubspec.yaml b/firebase-auth-flutterfire-ui/complete/pubspec.yaml index 3340bd6913..f4913f4204 100644 --- a/firebase-auth-flutterfire-ui/complete/pubspec.yaml +++ b/firebase-auth-flutterfire-ui/complete/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: 'none' version: 0.1.0 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 dependencies: flutter: diff --git a/firebase-auth-flutterfire-ui/start/pubspec.yaml b/firebase-auth-flutterfire-ui/start/pubspec.yaml index 06075b0cac..8a61df9d67 100644 --- a/firebase-auth-flutterfire-ui/start/pubspec.yaml +++ b/firebase-auth-flutterfire-ui/start/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: 'none' version: 0.1.0 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 dependencies: flutter: diff --git a/firebase-emulator-suite/complete/pubspec.yaml b/firebase-emulator-suite/complete/pubspec.yaml index 20896077f3..960732d593 100644 --- a/firebase-emulator-suite/complete/pubspec.yaml +++ b/firebase-emulator-suite/complete/pubspec.yaml @@ -19,7 +19,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev version: 1.0.0+1 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 # Dependencies specify other packages that your package needs in order to work. # To automatically upgrade your package dependencies to the latest versions diff --git a/firebase-emulator-suite/start/pubspec.yaml b/firebase-emulator-suite/start/pubspec.yaml index 25e42940ca..a3aa7a461c 100644 --- a/firebase-emulator-suite/start/pubspec.yaml +++ b/firebase-emulator-suite/start/pubspec.yaml @@ -19,7 +19,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev version: 1.0.0+1 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 # Dependencies specify other packages that your package needs in order to work. # To automatically upgrade your package dependencies to the latest versions diff --git a/firebase-get-to-know-flutter/step_02/pubspec.yaml b/firebase-get-to-know-flutter/step_02/pubspec.yaml index bde08722fd..8fc844aab2 100644 --- a/firebase-get-to-know-flutter/step_02/pubspec.yaml +++ b/firebase-get-to-know-flutter/step_02/pubspec.yaml @@ -20,7 +20,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev version: 1.0.0+1 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 # Dependencies specify other packages that your package needs in order to work. # To automatically upgrade your package dependencies to the latest versions diff --git a/firebase-get-to-know-flutter/step_04/pubspec.yaml b/firebase-get-to-know-flutter/step_04/pubspec.yaml index 83f0dda388..9f35177d5c 100644 --- a/firebase-get-to-know-flutter/step_04/pubspec.yaml +++ b/firebase-get-to-know-flutter/step_04/pubspec.yaml @@ -20,7 +20,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev version: 1.0.0+1 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 # Dependencies specify other packages that your package needs in order to work. # To automatically upgrade your package dependencies to the latest versions diff --git a/firebase-get-to-know-flutter/step_05/pubspec.yaml b/firebase-get-to-know-flutter/step_05/pubspec.yaml index 83f0dda388..9f35177d5c 100644 --- a/firebase-get-to-know-flutter/step_05/pubspec.yaml +++ b/firebase-get-to-know-flutter/step_05/pubspec.yaml @@ -20,7 +20,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev version: 1.0.0+1 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 # Dependencies specify other packages that your package needs in order to work. # To automatically upgrade your package dependencies to the latest versions diff --git a/firebase-get-to-know-flutter/step_06/pubspec.yaml b/firebase-get-to-know-flutter/step_06/pubspec.yaml index 83f0dda388..9f35177d5c 100644 --- a/firebase-get-to-know-flutter/step_06/pubspec.yaml +++ b/firebase-get-to-know-flutter/step_06/pubspec.yaml @@ -20,7 +20,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev version: 1.0.0+1 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 # Dependencies specify other packages that your package needs in order to work. # To automatically upgrade your package dependencies to the latest versions diff --git a/firebase-get-to-know-flutter/step_07/pubspec.yaml b/firebase-get-to-know-flutter/step_07/pubspec.yaml index 83f0dda388..9f35177d5c 100644 --- a/firebase-get-to-know-flutter/step_07/pubspec.yaml +++ b/firebase-get-to-know-flutter/step_07/pubspec.yaml @@ -20,7 +20,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev version: 1.0.0+1 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 # Dependencies specify other packages that your package needs in order to work. # To automatically upgrade your package dependencies to the latest versions diff --git a/firebase-get-to-know-flutter/step_09/pubspec.yaml b/firebase-get-to-know-flutter/step_09/pubspec.yaml index 83f0dda388..9f35177d5c 100644 --- a/firebase-get-to-know-flutter/step_09/pubspec.yaml +++ b/firebase-get-to-know-flutter/step_09/pubspec.yaml @@ -20,7 +20,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev version: 1.0.0+1 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 # Dependencies specify other packages that your package needs in order to work. # To automatically upgrade your package dependencies to the latest versions diff --git a/forge2d_game/step_02/pubspec.yaml b/forge2d_game/step_02/pubspec.yaml index 8c280084ce..34e90115c1 100644 --- a/forge2d_game/step_02/pubspec.yaml +++ b/forge2d_game/step_02/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: 'none' version: 0.1.0 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 dependencies: flutter: diff --git a/forge2d_game/step_03/pubspec.yaml b/forge2d_game/step_03/pubspec.yaml index af738db345..c6033d9daa 100644 --- a/forge2d_game/step_03/pubspec.yaml +++ b/forge2d_game/step_03/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: 'none' version: 0.1.0 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 dependencies: flutter: diff --git a/forge2d_game/step_04/pubspec.yaml b/forge2d_game/step_04/pubspec.yaml index af738db345..c6033d9daa 100644 --- a/forge2d_game/step_04/pubspec.yaml +++ b/forge2d_game/step_04/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: 'none' version: 0.1.0 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 dependencies: flutter: diff --git a/forge2d_game/step_05/pubspec.yaml b/forge2d_game/step_05/pubspec.yaml index fbe0d23361..35782cb8fe 100644 --- a/forge2d_game/step_05/pubspec.yaml +++ b/forge2d_game/step_05/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: 'none' version: 0.1.0 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 dependencies: flutter: diff --git a/forge2d_game/step_06/pubspec.yaml b/forge2d_game/step_06/pubspec.yaml index fbe0d23361..35782cb8fe 100644 --- a/forge2d_game/step_06/pubspec.yaml +++ b/forge2d_game/step_06/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: 'none' version: 0.1.0 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 dependencies: flutter: diff --git a/forge2d_game/step_07/pubspec.yaml b/forge2d_game/step_07/pubspec.yaml index fbe0d23361..35782cb8fe 100644 --- a/forge2d_game/step_07/pubspec.yaml +++ b/forge2d_game/step_07/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: 'none' version: 0.1.0 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 dependencies: flutter: diff --git a/generate_crossword/step_02/pubspec.yaml b/generate_crossword/step_02/pubspec.yaml index 362aed624c..e0f00c52a7 100644 --- a/generate_crossword/step_02/pubspec.yaml +++ b/generate_crossword/step_02/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: 'none' version: 0.1.0 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 dependencies: flutter: diff --git a/generate_crossword/step_03/pubspec.yaml b/generate_crossword/step_03/pubspec.yaml index cc70f5ddf0..b2180dfe85 100644 --- a/generate_crossword/step_03/pubspec.yaml +++ b/generate_crossword/step_03/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: 'none' version: 0.1.0 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 dependencies: flutter: diff --git a/generate_crossword/step_04/pubspec.yaml b/generate_crossword/step_04/pubspec.yaml index cc70f5ddf0..b2180dfe85 100644 --- a/generate_crossword/step_04/pubspec.yaml +++ b/generate_crossword/step_04/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: 'none' version: 0.1.0 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 dependencies: flutter: diff --git a/generate_crossword/step_05_a/pubspec.yaml b/generate_crossword/step_05_a/pubspec.yaml index cc70f5ddf0..b2180dfe85 100644 --- a/generate_crossword/step_05_a/pubspec.yaml +++ b/generate_crossword/step_05_a/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: 'none' version: 0.1.0 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 dependencies: flutter: diff --git a/generate_crossword/step_05_b/pubspec.yaml b/generate_crossword/step_05_b/pubspec.yaml index cc70f5ddf0..b2180dfe85 100644 --- a/generate_crossword/step_05_b/pubspec.yaml +++ b/generate_crossword/step_05_b/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: 'none' version: 0.1.0 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 dependencies: flutter: diff --git a/generate_crossword/step_05_c/pubspec.yaml b/generate_crossword/step_05_c/pubspec.yaml index cc70f5ddf0..b2180dfe85 100644 --- a/generate_crossword/step_05_c/pubspec.yaml +++ b/generate_crossword/step_05_c/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: 'none' version: 0.1.0 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 dependencies: flutter: diff --git a/generate_crossword/step_06/pubspec.yaml b/generate_crossword/step_06/pubspec.yaml index cc70f5ddf0..b2180dfe85 100644 --- a/generate_crossword/step_06/pubspec.yaml +++ b/generate_crossword/step_06/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: 'none' version: 0.1.0 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 dependencies: flutter: diff --git a/generate_crossword/step_07/pubspec.yaml b/generate_crossword/step_07/pubspec.yaml index cc70f5ddf0..b2180dfe85 100644 --- a/generate_crossword/step_07/pubspec.yaml +++ b/generate_crossword/step_07/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: 'none' version: 0.1.0 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 dependencies: flutter: diff --git a/generate_crossword/step_08/pubspec.yaml b/generate_crossword/step_08/pubspec.yaml index cc70f5ddf0..b2180dfe85 100644 --- a/generate_crossword/step_08/pubspec.yaml +++ b/generate_crossword/step_08/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: 'none' version: 0.1.0 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 dependencies: flutter: diff --git a/generate_crossword/step_09/pubspec.yaml b/generate_crossword/step_09/pubspec.yaml index cc70f5ddf0..b2180dfe85 100644 --- a/generate_crossword/step_09/pubspec.yaml +++ b/generate_crossword/step_09/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: 'none' version: 0.1.0 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 dependencies: flutter: diff --git a/github-client/step_03/pubspec.yaml b/github-client/step_03/pubspec.yaml index 3a992858c8..d6c98d7007 100644 --- a/github-client/step_03/pubspec.yaml +++ b/github-client/step_03/pubspec.yaml @@ -19,7 +19,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev version: 1.0.0+1 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 # Dependencies specify other packages that your package needs in order to work. # To automatically upgrade your package dependencies to the latest versions diff --git a/github-client/step_04/pubspec.yaml b/github-client/step_04/pubspec.yaml index e28ffd75b7..73c910c3a7 100644 --- a/github-client/step_04/pubspec.yaml +++ b/github-client/step_04/pubspec.yaml @@ -19,7 +19,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev version: 1.0.0+1 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 # Dependencies specify other packages that your package needs in order to work. # To automatically upgrade your package dependencies to the latest versions diff --git a/github-client/step_05/pubspec.yaml b/github-client/step_05/pubspec.yaml index 115e87006b..f6313f6b55 100644 --- a/github-client/step_05/pubspec.yaml +++ b/github-client/step_05/pubspec.yaml @@ -19,7 +19,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev version: 1.0.0+1 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 # Dependencies specify other packages that your package needs in order to work. # To automatically upgrade your package dependencies to the latest versions diff --git a/github-client/step_06/pubspec.yaml b/github-client/step_06/pubspec.yaml index cabd6753f0..a1b0fd564f 100644 --- a/github-client/step_06/pubspec.yaml +++ b/github-client/step_06/pubspec.yaml @@ -19,7 +19,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev version: 1.0.0+1 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 # Dependencies specify other packages that your package needs in order to work. # To automatically upgrade your package dependencies to the latest versions diff --git a/github-client/step_07/pubspec.yaml b/github-client/step_07/pubspec.yaml index 1d6418d3fb..aba94baa9c 100644 --- a/github-client/step_07/pubspec.yaml +++ b/github-client/step_07/pubspec.yaml @@ -19,7 +19,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev version: 1.0.0+1 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 # Dependencies specify other packages that your package needs in order to work. # To automatically upgrade your package dependencies to the latest versions diff --git a/github-client/window_to_front/pubspec.yaml b/github-client/window_to_front/pubspec.yaml index e07373e4cf..2bfe2235ca 100644 --- a/github-client/window_to_front/pubspec.yaml +++ b/github-client/window_to_front/pubspec.yaml @@ -18,7 +18,7 @@ version: 0.0.1 homepage: environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 flutter: '>=3.3.0' dependencies: diff --git a/google-maps-in-flutter/step_3/pubspec.yaml b/google-maps-in-flutter/step_3/pubspec.yaml index 2d7bb480af..a14344db47 100644 --- a/google-maps-in-flutter/step_3/pubspec.yaml +++ b/google-maps-in-flutter/step_3/pubspec.yaml @@ -19,7 +19,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev version: 1.0.0+1 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 # Dependencies specify other packages that your package needs in order to work. # To automatically upgrade your package dependencies to the latest versions diff --git a/google-maps-in-flutter/step_4/pubspec.yaml b/google-maps-in-flutter/step_4/pubspec.yaml index 2d7bb480af..a14344db47 100644 --- a/google-maps-in-flutter/step_4/pubspec.yaml +++ b/google-maps-in-flutter/step_4/pubspec.yaml @@ -19,7 +19,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev version: 1.0.0+1 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 # Dependencies specify other packages that your package needs in order to work. # To automatically upgrade your package dependencies to the latest versions diff --git a/google-maps-in-flutter/step_5/pubspec.yaml b/google-maps-in-flutter/step_5/pubspec.yaml index 95c6942720..75b43416a8 100644 --- a/google-maps-in-flutter/step_5/pubspec.yaml +++ b/google-maps-in-flutter/step_5/pubspec.yaml @@ -19,7 +19,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev version: 1.0.0+1 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 # Dependencies specify other packages that your package needs in order to work. # To automatically upgrade your package dependencies to the latest versions diff --git a/haiku_generator/finished/pubspec.yaml b/haiku_generator/finished/pubspec.yaml index 25ee6b0edf..826e533279 100644 --- a/haiku_generator/finished/pubspec.yaml +++ b/haiku_generator/finished/pubspec.yaml @@ -18,7 +18,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev version: 1.0.0+1 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 # Dependencies specify other packages that your package needs in order to work. # To automatically upgrade your package dependencies to the latest versions diff --git a/haiku_generator/step0/pubspec.yaml b/haiku_generator/step0/pubspec.yaml index 25ee6b0edf..826e533279 100644 --- a/haiku_generator/step0/pubspec.yaml +++ b/haiku_generator/step0/pubspec.yaml @@ -18,7 +18,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev version: 1.0.0+1 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 # Dependencies specify other packages that your package needs in order to work. # To automatically upgrade your package dependencies to the latest versions diff --git a/haiku_generator/step1/pubspec.yaml b/haiku_generator/step1/pubspec.yaml index 25ee6b0edf..826e533279 100644 --- a/haiku_generator/step1/pubspec.yaml +++ b/haiku_generator/step1/pubspec.yaml @@ -18,7 +18,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev version: 1.0.0+1 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 # Dependencies specify other packages that your package needs in order to work. # To automatically upgrade your package dependencies to the latest versions diff --git a/haiku_generator/step2/pubspec.yaml b/haiku_generator/step2/pubspec.yaml index 25ee6b0edf..826e533279 100644 --- a/haiku_generator/step2/pubspec.yaml +++ b/haiku_generator/step2/pubspec.yaml @@ -18,7 +18,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev version: 1.0.0+1 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 # Dependencies specify other packages that your package needs in order to work. # To automatically upgrade your package dependencies to the latest versions diff --git a/haiku_generator/step3/pubspec.yaml b/haiku_generator/step3/pubspec.yaml index 25ee6b0edf..826e533279 100644 --- a/haiku_generator/step3/pubspec.yaml +++ b/haiku_generator/step3/pubspec.yaml @@ -18,7 +18,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev version: 1.0.0+1 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 # Dependencies specify other packages that your package needs in order to work. # To automatically upgrade your package dependencies to the latest versions diff --git a/homescreen_codelab/step_03/pubspec.yaml b/homescreen_codelab/step_03/pubspec.yaml index e18d8f0591..c18a94f920 100644 --- a/homescreen_codelab/step_03/pubspec.yaml +++ b/homescreen_codelab/step_03/pubspec.yaml @@ -6,7 +6,7 @@ publish_to: 'none' version: 1.0.0+1 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 dependencies: flutter: diff --git a/homescreen_codelab/step_04/pubspec.yaml b/homescreen_codelab/step_04/pubspec.yaml index 2c053759c1..e86043988f 100644 --- a/homescreen_codelab/step_04/pubspec.yaml +++ b/homescreen_codelab/step_04/pubspec.yaml @@ -6,7 +6,7 @@ publish_to: 'none' version: 1.0.0+1 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 dependencies: flutter: diff --git a/homescreen_codelab/step_05/pubspec.yaml b/homescreen_codelab/step_05/pubspec.yaml index 2c053759c1..e86043988f 100644 --- a/homescreen_codelab/step_05/pubspec.yaml +++ b/homescreen_codelab/step_05/pubspec.yaml @@ -6,7 +6,7 @@ publish_to: 'none' version: 1.0.0+1 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 dependencies: flutter: diff --git a/homescreen_codelab/step_06/pubspec.yaml b/homescreen_codelab/step_06/pubspec.yaml index 2c053759c1..e86043988f 100644 --- a/homescreen_codelab/step_06/pubspec.yaml +++ b/homescreen_codelab/step_06/pubspec.yaml @@ -6,7 +6,7 @@ publish_to: 'none' version: 1.0.0+1 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 dependencies: flutter: diff --git a/in_app_purchases/complete/app/pubspec.yaml b/in_app_purchases/complete/app/pubspec.yaml index f4572fb496..8cc03a3aa2 100644 --- a/in_app_purchases/complete/app/pubspec.yaml +++ b/in_app_purchases/complete/app/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: "none" version: 1.0.0+1 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 dependencies: cloud_firestore: ^4.0.3 diff --git a/in_app_purchases/complete/dart-backend/pubspec.yaml b/in_app_purchases/complete/dart-backend/pubspec.yaml index 11507e3f02..c57dee4b4b 100644 --- a/in_app_purchases/complete/dart-backend/pubspec.yaml +++ b/in_app_purchases/complete/dart-backend/pubspec.yaml @@ -4,7 +4,7 @@ version: 1.0.0 # homepage: https://www.example.com environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 dependencies: googleapis: ^11.0.0 diff --git a/in_app_purchases/step_00/app/pubspec.yaml b/in_app_purchases/step_00/app/pubspec.yaml index a7de8f7f6d..2a4f7f1c05 100644 --- a/in_app_purchases/step_00/app/pubspec.yaml +++ b/in_app_purchases/step_00/app/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: "none" version: 1.0.0+1 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 dependencies: cloud_firestore: ^4.0.3 diff --git a/in_app_purchases/step_00/dart-backend/pubspec.yaml b/in_app_purchases/step_00/dart-backend/pubspec.yaml index 11507e3f02..c57dee4b4b 100644 --- a/in_app_purchases/step_00/dart-backend/pubspec.yaml +++ b/in_app_purchases/step_00/dart-backend/pubspec.yaml @@ -4,7 +4,7 @@ version: 1.0.0 # homepage: https://www.example.com environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 dependencies: googleapis: ^11.0.0 diff --git a/in_app_purchases/step_07/app/pubspec.yaml b/in_app_purchases/step_07/app/pubspec.yaml index a7de8f7f6d..2a4f7f1c05 100644 --- a/in_app_purchases/step_07/app/pubspec.yaml +++ b/in_app_purchases/step_07/app/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: "none" version: 1.0.0+1 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 dependencies: cloud_firestore: ^4.0.3 diff --git a/in_app_purchases/step_07/dart-backend/pubspec.yaml b/in_app_purchases/step_07/dart-backend/pubspec.yaml index 11507e3f02..c57dee4b4b 100644 --- a/in_app_purchases/step_07/dart-backend/pubspec.yaml +++ b/in_app_purchases/step_07/dart-backend/pubspec.yaml @@ -4,7 +4,7 @@ version: 1.0.0 # homepage: https://www.example.com environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 dependencies: googleapis: ^11.0.0 diff --git a/in_app_purchases/step_08/app/pubspec.yaml b/in_app_purchases/step_08/app/pubspec.yaml index a7de8f7f6d..2a4f7f1c05 100644 --- a/in_app_purchases/step_08/app/pubspec.yaml +++ b/in_app_purchases/step_08/app/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: "none" version: 1.0.0+1 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 dependencies: cloud_firestore: ^4.0.3 diff --git a/in_app_purchases/step_08/dart-backend/pubspec.yaml b/in_app_purchases/step_08/dart-backend/pubspec.yaml index 11507e3f02..c57dee4b4b 100644 --- a/in_app_purchases/step_08/dart-backend/pubspec.yaml +++ b/in_app_purchases/step_08/dart-backend/pubspec.yaml @@ -4,7 +4,7 @@ version: 1.0.0 # homepage: https://www.example.com environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 dependencies: googleapis: ^11.0.0 diff --git a/in_app_purchases/step_09/app/pubspec.yaml b/in_app_purchases/step_09/app/pubspec.yaml index a7de8f7f6d..2a4f7f1c05 100644 --- a/in_app_purchases/step_09/app/pubspec.yaml +++ b/in_app_purchases/step_09/app/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: "none" version: 1.0.0+1 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 dependencies: cloud_firestore: ^4.0.3 diff --git a/in_app_purchases/step_09/dart-backend/pubspec.yaml b/in_app_purchases/step_09/dart-backend/pubspec.yaml index 21b54792eb..1cb7d17c93 100644 --- a/in_app_purchases/step_09/dart-backend/pubspec.yaml +++ b/in_app_purchases/step_09/dart-backend/pubspec.yaml @@ -4,7 +4,7 @@ version: 1.0.0 # homepage: https://www.example.com environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 dependencies: googleapis: ^11.0.0 diff --git a/in_app_purchases/step_10/app/pubspec.yaml b/in_app_purchases/step_10/app/pubspec.yaml index a7de8f7f6d..2a4f7f1c05 100644 --- a/in_app_purchases/step_10/app/pubspec.yaml +++ b/in_app_purchases/step_10/app/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: "none" version: 1.0.0+1 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 dependencies: cloud_firestore: ^4.0.3 diff --git a/in_app_purchases/step_10/dart-backend/pubspec.yaml b/in_app_purchases/step_10/dart-backend/pubspec.yaml index 11507e3f02..c57dee4b4b 100644 --- a/in_app_purchases/step_10/dart-backend/pubspec.yaml +++ b/in_app_purchases/step_10/dart-backend/pubspec.yaml @@ -4,7 +4,7 @@ version: 1.0.0 # homepage: https://www.example.com environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 dependencies: googleapis: ^11.0.0 diff --git a/namer/codelab_rebuild.yaml b/namer/codelab_rebuild.yaml index b0aac8e540..bb17a4b9fd 100644 --- a/namer/codelab_rebuild.yaml +++ b/namer/codelab_rebuild.yaml @@ -20,7 +20,7 @@ steps: version: 0.0.1+1 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 dependencies: flutter: diff --git a/namer/step_03/pubspec.yaml b/namer/step_03/pubspec.yaml index db375b5414..8e4d74a652 100644 --- a/namer/step_03/pubspec.yaml +++ b/namer/step_03/pubspec.yaml @@ -6,7 +6,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev version: 0.0.1+1 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 dependencies: flutter: diff --git a/namer/step_04_a_widget/pubspec.yaml b/namer/step_04_a_widget/pubspec.yaml index db375b5414..8e4d74a652 100644 --- a/namer/step_04_a_widget/pubspec.yaml +++ b/namer/step_04_a_widget/pubspec.yaml @@ -6,7 +6,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev version: 0.0.1+1 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 dependencies: flutter: diff --git a/namer/step_04_b_behavior/pubspec.yaml b/namer/step_04_b_behavior/pubspec.yaml index db375b5414..8e4d74a652 100644 --- a/namer/step_04_b_behavior/pubspec.yaml +++ b/namer/step_04_b_behavior/pubspec.yaml @@ -6,7 +6,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev version: 0.0.1+1 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 dependencies: flutter: diff --git a/namer/step_05_a_pair/pubspec.yaml b/namer/step_05_a_pair/pubspec.yaml index db375b5414..8e4d74a652 100644 --- a/namer/step_05_a_pair/pubspec.yaml +++ b/namer/step_05_a_pair/pubspec.yaml @@ -6,7 +6,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev version: 0.0.1+1 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 dependencies: flutter: diff --git a/namer/step_05_b_extract/pubspec.yaml b/namer/step_05_b_extract/pubspec.yaml index db375b5414..8e4d74a652 100644 --- a/namer/step_05_b_extract/pubspec.yaml +++ b/namer/step_05_b_extract/pubspec.yaml @@ -6,7 +6,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev version: 0.0.1+1 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 dependencies: flutter: diff --git a/namer/step_05_c_card_padding/pubspec.yaml b/namer/step_05_c_card_padding/pubspec.yaml index db375b5414..8e4d74a652 100644 --- a/namer/step_05_c_card_padding/pubspec.yaml +++ b/namer/step_05_c_card_padding/pubspec.yaml @@ -6,7 +6,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev version: 0.0.1+1 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 dependencies: flutter: diff --git a/namer/step_05_d_theme/pubspec.yaml b/namer/step_05_d_theme/pubspec.yaml index db375b5414..8e4d74a652 100644 --- a/namer/step_05_d_theme/pubspec.yaml +++ b/namer/step_05_d_theme/pubspec.yaml @@ -6,7 +6,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev version: 0.0.1+1 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 dependencies: flutter: diff --git a/namer/step_05_e_text_style/pubspec.yaml b/namer/step_05_e_text_style/pubspec.yaml index db375b5414..8e4d74a652 100644 --- a/namer/step_05_e_text_style/pubspec.yaml +++ b/namer/step_05_e_text_style/pubspec.yaml @@ -6,7 +6,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev version: 0.0.1+1 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 dependencies: flutter: diff --git a/namer/step_05_f_accessibility/pubspec.yaml b/namer/step_05_f_accessibility/pubspec.yaml index db375b5414..8e4d74a652 100644 --- a/namer/step_05_f_accessibility/pubspec.yaml +++ b/namer/step_05_f_accessibility/pubspec.yaml @@ -6,7 +6,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev version: 0.0.1+1 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 dependencies: flutter: diff --git a/namer/step_05_g_center_vertical/pubspec.yaml b/namer/step_05_g_center_vertical/pubspec.yaml index db375b5414..8e4d74a652 100644 --- a/namer/step_05_g_center_vertical/pubspec.yaml +++ b/namer/step_05_g_center_vertical/pubspec.yaml @@ -6,7 +6,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev version: 0.0.1+1 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 dependencies: flutter: diff --git a/namer/step_05_h_center_horizontal/pubspec.yaml b/namer/step_05_h_center_horizontal/pubspec.yaml index db375b5414..8e4d74a652 100644 --- a/namer/step_05_h_center_horizontal/pubspec.yaml +++ b/namer/step_05_h_center_horizontal/pubspec.yaml @@ -6,7 +6,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev version: 0.0.1+1 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 dependencies: flutter: diff --git a/namer/step_05_i_optional_changes/pubspec.yaml b/namer/step_05_i_optional_changes/pubspec.yaml index db375b5414..8e4d74a652 100644 --- a/namer/step_05_i_optional_changes/pubspec.yaml +++ b/namer/step_05_i_optional_changes/pubspec.yaml @@ -6,7 +6,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev version: 0.0.1+1 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 dependencies: flutter: diff --git a/namer/step_06_a_business_logic/pubspec.yaml b/namer/step_06_a_business_logic/pubspec.yaml index db375b5414..8e4d74a652 100644 --- a/namer/step_06_a_business_logic/pubspec.yaml +++ b/namer/step_06_a_business_logic/pubspec.yaml @@ -6,7 +6,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev version: 0.0.1+1 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 dependencies: flutter: diff --git a/namer/step_06_b_add_row/pubspec.yaml b/namer/step_06_b_add_row/pubspec.yaml index db375b5414..8e4d74a652 100644 --- a/namer/step_06_b_add_row/pubspec.yaml +++ b/namer/step_06_b_add_row/pubspec.yaml @@ -6,7 +6,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev version: 0.0.1+1 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 dependencies: flutter: diff --git a/namer/step_06_c_add_like_button/pubspec.yaml b/namer/step_06_c_add_like_button/pubspec.yaml index db375b5414..8e4d74a652 100644 --- a/namer/step_06_c_add_like_button/pubspec.yaml +++ b/namer/step_06_c_add_like_button/pubspec.yaml @@ -6,7 +6,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev version: 0.0.1+1 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 dependencies: flutter: diff --git a/namer/step_07_a_split_my_home_page/pubspec.yaml b/namer/step_07_a_split_my_home_page/pubspec.yaml index db375b5414..8e4d74a652 100644 --- a/namer/step_07_a_split_my_home_page/pubspec.yaml +++ b/namer/step_07_a_split_my_home_page/pubspec.yaml @@ -6,7 +6,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev version: 0.0.1+1 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 dependencies: flutter: diff --git a/namer/step_07_b_convert_to_stateful/pubspec.yaml b/namer/step_07_b_convert_to_stateful/pubspec.yaml index db375b5414..8e4d74a652 100644 --- a/namer/step_07_b_convert_to_stateful/pubspec.yaml +++ b/namer/step_07_b_convert_to_stateful/pubspec.yaml @@ -6,7 +6,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev version: 0.0.1+1 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 dependencies: flutter: diff --git a/namer/step_07_c_add_selectedindex/pubspec.yaml b/namer/step_07_c_add_selectedindex/pubspec.yaml index db375b5414..8e4d74a652 100644 --- a/namer/step_07_c_add_selectedindex/pubspec.yaml +++ b/namer/step_07_c_add_selectedindex/pubspec.yaml @@ -6,7 +6,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev version: 0.0.1+1 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 dependencies: flutter: diff --git a/namer/step_07_d_use_selectedindex/pubspec.yaml b/namer/step_07_d_use_selectedindex/pubspec.yaml index db375b5414..8e4d74a652 100644 --- a/namer/step_07_d_use_selectedindex/pubspec.yaml +++ b/namer/step_07_d_use_selectedindex/pubspec.yaml @@ -6,7 +6,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev version: 0.0.1+1 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 dependencies: flutter: diff --git a/namer/step_07_e_add_layout_builder/pubspec.yaml b/namer/step_07_e_add_layout_builder/pubspec.yaml index db375b5414..8e4d74a652 100644 --- a/namer/step_07_e_add_layout_builder/pubspec.yaml +++ b/namer/step_07_e_add_layout_builder/pubspec.yaml @@ -6,7 +6,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev version: 0.0.1+1 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 dependencies: flutter: diff --git a/namer/step_08/pubspec.yaml b/namer/step_08/pubspec.yaml index 1287fc6b60..7374b46b01 100644 --- a/namer/step_08/pubspec.yaml +++ b/namer/step_08/pubspec.yaml @@ -6,7 +6,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev version: 0.0.1+1 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 dependencies: flutter: diff --git a/next-gen-ui/step_01/pubspec.yaml b/next-gen-ui/step_01/pubspec.yaml index 948f3cfda2..726dd46e9e 100644 --- a/next-gen-ui/step_01/pubspec.yaml +++ b/next-gen-ui/step_01/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: 'none' version: 0.1.0 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 dependencies: flutter: diff --git a/next-gen-ui/step_02_a/pubspec.yaml b/next-gen-ui/step_02_a/pubspec.yaml index 948f3cfda2..726dd46e9e 100644 --- a/next-gen-ui/step_02_a/pubspec.yaml +++ b/next-gen-ui/step_02_a/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: 'none' version: 0.1.0 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 dependencies: flutter: diff --git a/next-gen-ui/step_02_b/pubspec.yaml b/next-gen-ui/step_02_b/pubspec.yaml index 948f3cfda2..726dd46e9e 100644 --- a/next-gen-ui/step_02_b/pubspec.yaml +++ b/next-gen-ui/step_02_b/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: 'none' version: 0.1.0 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 dependencies: flutter: diff --git a/next-gen-ui/step_02_c/pubspec.yaml b/next-gen-ui/step_02_c/pubspec.yaml index 948f3cfda2..726dd46e9e 100644 --- a/next-gen-ui/step_02_c/pubspec.yaml +++ b/next-gen-ui/step_02_c/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: 'none' version: 0.1.0 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 dependencies: flutter: diff --git a/next-gen-ui/step_03_a/pubspec.yaml b/next-gen-ui/step_03_a/pubspec.yaml index 948f3cfda2..726dd46e9e 100644 --- a/next-gen-ui/step_03_a/pubspec.yaml +++ b/next-gen-ui/step_03_a/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: 'none' version: 0.1.0 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 dependencies: flutter: diff --git a/next-gen-ui/step_03_b/pubspec.yaml b/next-gen-ui/step_03_b/pubspec.yaml index 948f3cfda2..726dd46e9e 100644 --- a/next-gen-ui/step_03_b/pubspec.yaml +++ b/next-gen-ui/step_03_b/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: 'none' version: 0.1.0 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 dependencies: flutter: diff --git a/next-gen-ui/step_03_c/pubspec.yaml b/next-gen-ui/step_03_c/pubspec.yaml index 948f3cfda2..726dd46e9e 100644 --- a/next-gen-ui/step_03_c/pubspec.yaml +++ b/next-gen-ui/step_03_c/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: 'none' version: 0.1.0 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 dependencies: flutter: diff --git a/next-gen-ui/step_04_a/pubspec.yaml b/next-gen-ui/step_04_a/pubspec.yaml index 948f3cfda2..726dd46e9e 100644 --- a/next-gen-ui/step_04_a/pubspec.yaml +++ b/next-gen-ui/step_04_a/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: 'none' version: 0.1.0 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 dependencies: flutter: diff --git a/next-gen-ui/step_04_b/pubspec.yaml b/next-gen-ui/step_04_b/pubspec.yaml index 948f3cfda2..726dd46e9e 100644 --- a/next-gen-ui/step_04_b/pubspec.yaml +++ b/next-gen-ui/step_04_b/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: 'none' version: 0.1.0 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 dependencies: flutter: diff --git a/next-gen-ui/step_04_c/pubspec.yaml b/next-gen-ui/step_04_c/pubspec.yaml index 948f3cfda2..726dd46e9e 100644 --- a/next-gen-ui/step_04_c/pubspec.yaml +++ b/next-gen-ui/step_04_c/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: 'none' version: 0.1.0 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 dependencies: flutter: diff --git a/next-gen-ui/step_04_d/pubspec.yaml b/next-gen-ui/step_04_d/pubspec.yaml index 948f3cfda2..726dd46e9e 100644 --- a/next-gen-ui/step_04_d/pubspec.yaml +++ b/next-gen-ui/step_04_d/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: 'none' version: 0.1.0 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 dependencies: flutter: diff --git a/next-gen-ui/step_04_e/pubspec.yaml b/next-gen-ui/step_04_e/pubspec.yaml index 948f3cfda2..726dd46e9e 100644 --- a/next-gen-ui/step_04_e/pubspec.yaml +++ b/next-gen-ui/step_04_e/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: 'none' version: 0.1.0 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 dependencies: flutter: diff --git a/next-gen-ui/step_05_a/pubspec.yaml b/next-gen-ui/step_05_a/pubspec.yaml index 948f3cfda2..726dd46e9e 100644 --- a/next-gen-ui/step_05_a/pubspec.yaml +++ b/next-gen-ui/step_05_a/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: 'none' version: 0.1.0 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 dependencies: flutter: diff --git a/next-gen-ui/step_05_b/pubspec.yaml b/next-gen-ui/step_05_b/pubspec.yaml index 948f3cfda2..726dd46e9e 100644 --- a/next-gen-ui/step_05_b/pubspec.yaml +++ b/next-gen-ui/step_05_b/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: 'none' version: 0.1.0 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 dependencies: flutter: diff --git a/next-gen-ui/step_06/pubspec.yaml b/next-gen-ui/step_06/pubspec.yaml index 948f3cfda2..726dd46e9e 100644 --- a/next-gen-ui/step_06/pubspec.yaml +++ b/next-gen-ui/step_06/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: 'none' version: 0.1.0 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 dependencies: flutter: diff --git a/testing_codelab/step_03/pubspec.yaml b/testing_codelab/step_03/pubspec.yaml index faacff2286..5d597e44ad 100644 --- a/testing_codelab/step_03/pubspec.yaml +++ b/testing_codelab/step_03/pubspec.yaml @@ -8,7 +8,7 @@ publish_to: 'none' version: 0.1.0 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 dependencies: flutter: diff --git a/testing_codelab/step_04/pubspec.yaml b/testing_codelab/step_04/pubspec.yaml index faacff2286..5d597e44ad 100644 --- a/testing_codelab/step_04/pubspec.yaml +++ b/testing_codelab/step_04/pubspec.yaml @@ -8,7 +8,7 @@ publish_to: 'none' version: 0.1.0 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 dependencies: flutter: diff --git a/testing_codelab/step_05/pubspec.yaml b/testing_codelab/step_05/pubspec.yaml index faacff2286..5d597e44ad 100644 --- a/testing_codelab/step_05/pubspec.yaml +++ b/testing_codelab/step_05/pubspec.yaml @@ -8,7 +8,7 @@ publish_to: 'none' version: 0.1.0 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 dependencies: flutter: diff --git a/testing_codelab/step_06/pubspec.yaml b/testing_codelab/step_06/pubspec.yaml index faacff2286..5d597e44ad 100644 --- a/testing_codelab/step_06/pubspec.yaml +++ b/testing_codelab/step_06/pubspec.yaml @@ -8,7 +8,7 @@ publish_to: 'none' version: 0.1.0 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 dependencies: flutter: diff --git a/testing_codelab/step_07/pubspec.yaml b/testing_codelab/step_07/pubspec.yaml index faacff2286..5d597e44ad 100644 --- a/testing_codelab/step_07/pubspec.yaml +++ b/testing_codelab/step_07/pubspec.yaml @@ -8,7 +8,7 @@ publish_to: 'none' version: 0.1.0 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 dependencies: flutter: diff --git a/testing_codelab/step_08/pubspec.yaml b/testing_codelab/step_08/pubspec.yaml index faacff2286..5d597e44ad 100644 --- a/testing_codelab/step_08/pubspec.yaml +++ b/testing_codelab/step_08/pubspec.yaml @@ -8,7 +8,7 @@ publish_to: 'none' version: 0.1.0 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 dependencies: flutter: diff --git a/tooling/claat_export_images/pubspec.yaml b/tooling/claat_export_images/pubspec.yaml index a62ecebde6..ee286a2e19 100644 --- a/tooling/claat_export_images/pubspec.yaml +++ b/tooling/claat_export_images/pubspec.yaml @@ -4,7 +4,7 @@ version: 1.0.0 repository: https://github.com/flutter/codelabs environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 dependencies: args: ^2.4.2 diff --git a/tooling/codelab_rebuild/pubspec.yaml b/tooling/codelab_rebuild/pubspec.yaml index cdc9cfef4a..13aba1d7cb 100644 --- a/tooling/codelab_rebuild/pubspec.yaml +++ b/tooling/codelab_rebuild/pubspec.yaml @@ -4,7 +4,7 @@ version: 1.0.0 # homepage: https://www.example.com environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 dependencies: checked_yaml: ^2.0.1 diff --git a/webview_flutter/step_03/pubspec.yaml b/webview_flutter/step_03/pubspec.yaml index 09067d1817..807b2b2902 100644 --- a/webview_flutter/step_03/pubspec.yaml +++ b/webview_flutter/step_03/pubspec.yaml @@ -19,7 +19,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev version: 1.0.0+1 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 # Dependencies specify other packages that your package needs in order to work. # To automatically upgrade your package dependencies to the latest versions diff --git a/webview_flutter/step_04/pubspec.yaml b/webview_flutter/step_04/pubspec.yaml index 09067d1817..807b2b2902 100644 --- a/webview_flutter/step_04/pubspec.yaml +++ b/webview_flutter/step_04/pubspec.yaml @@ -19,7 +19,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev version: 1.0.0+1 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 # Dependencies specify other packages that your package needs in order to work. # To automatically upgrade your package dependencies to the latest versions diff --git a/webview_flutter/step_05/pubspec.yaml b/webview_flutter/step_05/pubspec.yaml index 09067d1817..807b2b2902 100644 --- a/webview_flutter/step_05/pubspec.yaml +++ b/webview_flutter/step_05/pubspec.yaml @@ -19,7 +19,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev version: 1.0.0+1 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 # Dependencies specify other packages that your package needs in order to work. # To automatically upgrade your package dependencies to the latest versions diff --git a/webview_flutter/step_06/pubspec.yaml b/webview_flutter/step_06/pubspec.yaml index 09067d1817..807b2b2902 100644 --- a/webview_flutter/step_06/pubspec.yaml +++ b/webview_flutter/step_06/pubspec.yaml @@ -19,7 +19,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev version: 1.0.0+1 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 # Dependencies specify other packages that your package needs in order to work. # To automatically upgrade your package dependencies to the latest versions diff --git a/webview_flutter/step_07/pubspec.yaml b/webview_flutter/step_07/pubspec.yaml index 09067d1817..807b2b2902 100644 --- a/webview_flutter/step_07/pubspec.yaml +++ b/webview_flutter/step_07/pubspec.yaml @@ -19,7 +19,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev version: 1.0.0+1 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 # Dependencies specify other packages that your package needs in order to work. # To automatically upgrade your package dependencies to the latest versions diff --git a/webview_flutter/step_08/pubspec.yaml b/webview_flutter/step_08/pubspec.yaml index 09067d1817..807b2b2902 100644 --- a/webview_flutter/step_08/pubspec.yaml +++ b/webview_flutter/step_08/pubspec.yaml @@ -19,7 +19,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev version: 1.0.0+1 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 # Dependencies specify other packages that your package needs in order to work. # To automatically upgrade your package dependencies to the latest versions diff --git a/webview_flutter/step_09/pubspec.yaml b/webview_flutter/step_09/pubspec.yaml index 09067d1817..807b2b2902 100644 --- a/webview_flutter/step_09/pubspec.yaml +++ b/webview_flutter/step_09/pubspec.yaml @@ -19,7 +19,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev version: 1.0.0+1 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 # Dependencies specify other packages that your package needs in order to work. # To automatically upgrade your package dependencies to the latest versions diff --git a/webview_flutter/step_10/pubspec.yaml b/webview_flutter/step_10/pubspec.yaml index 09067d1817..807b2b2902 100644 --- a/webview_flutter/step_10/pubspec.yaml +++ b/webview_flutter/step_10/pubspec.yaml @@ -19,7 +19,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev version: 1.0.0+1 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 # Dependencies specify other packages that your package needs in order to work. # To automatically upgrade your package dependencies to the latest versions diff --git a/webview_flutter/step_11/pubspec.yaml b/webview_flutter/step_11/pubspec.yaml index 09067d1817..807b2b2902 100644 --- a/webview_flutter/step_11/pubspec.yaml +++ b/webview_flutter/step_11/pubspec.yaml @@ -19,7 +19,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev version: 1.0.0+1 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 # Dependencies specify other packages that your package needs in order to work. # To automatically upgrade your package dependencies to the latest versions diff --git a/webview_flutter/step_12/pubspec.yaml b/webview_flutter/step_12/pubspec.yaml index 2ffaae6578..619ae863d4 100644 --- a/webview_flutter/step_12/pubspec.yaml +++ b/webview_flutter/step_12/pubspec.yaml @@ -19,7 +19,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev version: 1.0.0+1 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 # Dependencies specify other packages that your package needs in order to work. # To automatically upgrade your package dependencies to the latest versions From b41644749723bf19395a67802979d0671e09d351 Mon Sep 17 00:00:00 2001 From: Brett Morgan Date: Mon, 14 Oct 2024 14:54:16 +1100 Subject: [PATCH 002/108] Update `animated-responsive-layout` --- .../step_03/android/gradle.properties | 2 +- .../step_03/linux/CMakeLists.txt | 23 +--- .../step_03/linux/runner/CMakeLists.txt | 26 ++++ .../step_03/linux/{ => runner}/main.cc | 0 .../linux/{ => runner}/my_application.cc | 6 + .../linux/{ => runner}/my_application.h | 0 .../step_03/pubspec.yaml | 2 +- .../step_03/web/index.html | 2 +- .../step_04/android/gradle.properties | 2 +- .../step_04/linux/CMakeLists.txt | 23 +--- .../step_04/linux/runner/CMakeLists.txt | 26 ++++ .../step_04/linux/{ => runner}/main.cc | 0 .../linux/{ => runner}/my_application.cc | 6 + .../linux/{ => runner}/my_application.h | 0 .../step_04/pubspec.yaml | 2 +- .../step_04/web/index.html | 2 +- .../step_05/android/gradle.properties | 2 +- .../step_05/linux/CMakeLists.txt | 23 +--- .../step_05/linux/runner/CMakeLists.txt | 26 ++++ .../step_05/linux/{ => runner}/main.cc | 0 .../linux/{ => runner}/my_application.cc | 6 + .../linux/{ => runner}/my_application.h | 0 .../step_05/pubspec.yaml | 2 +- .../step_05/web/index.html | 2 +- .../step_06/android/gradle.properties | 2 +- .../step_06/linux/CMakeLists.txt | 23 +--- .../step_06/linux/runner/CMakeLists.txt | 26 ++++ .../step_06/linux/{ => runner}/main.cc | 0 .../linux/{ => runner}/my_application.cc | 6 + .../linux/{ => runner}/my_application.h | 0 .../step_06/pubspec.yaml | 2 +- .../step_06/web/index.html | 2 +- .../step_07/android/gradle.properties | 2 +- .../step_07/linux/CMakeLists.txt | 23 +--- .../step_07/linux/my_application.cc | 124 ----------------- .../step_07/linux/runner/CMakeLists.txt | 26 ++++ .../step_07/linux/{ => runner}/main.cc | 0 .../step_07/linux/runner/my_application.cc | 130 ++++++++++++++++++ .../linux/{ => runner}/my_application.h | 0 .../step_07/pubspec.yaml | 2 +- .../step_07/web/index.html | 2 +- .../step_08/android/gradle.properties | 2 +- .../step_08/linux/CMakeLists.txt | 23 +--- .../step_08/linux/my_application.cc | 124 ----------------- .../step_08/linux/runner/CMakeLists.txt | 26 ++++ .../step_08/linux/{ => runner}/main.cc | 0 .../step_08/linux/runner/my_application.cc | 130 ++++++++++++++++++ .../linux/{ => runner}/my_application.h | 0 .../step_08/pubspec.yaml | 2 +- .../step_08/web/index.html | 2 +- 50 files changed, 476 insertions(+), 386 deletions(-) create mode 100644 animated-responsive-layout/step_03/linux/runner/CMakeLists.txt rename animated-responsive-layout/step_03/linux/{ => runner}/main.cc (100%) rename animated-responsive-layout/step_03/linux/{ => runner}/my_application.cc (93%) rename animated-responsive-layout/step_03/linux/{ => runner}/my_application.h (100%) create mode 100644 animated-responsive-layout/step_04/linux/runner/CMakeLists.txt rename animated-responsive-layout/step_04/linux/{ => runner}/main.cc (100%) rename animated-responsive-layout/step_04/linux/{ => runner}/my_application.cc (93%) rename animated-responsive-layout/step_04/linux/{ => runner}/my_application.h (100%) create mode 100644 animated-responsive-layout/step_05/linux/runner/CMakeLists.txt rename animated-responsive-layout/step_05/linux/{ => runner}/main.cc (100%) rename animated-responsive-layout/step_05/linux/{ => runner}/my_application.cc (93%) rename animated-responsive-layout/step_05/linux/{ => runner}/my_application.h (100%) create mode 100644 animated-responsive-layout/step_06/linux/runner/CMakeLists.txt rename animated-responsive-layout/step_06/linux/{ => runner}/main.cc (100%) rename animated-responsive-layout/step_06/linux/{ => runner}/my_application.cc (93%) rename animated-responsive-layout/step_06/linux/{ => runner}/my_application.h (100%) delete mode 100644 animated-responsive-layout/step_07/linux/my_application.cc create mode 100644 animated-responsive-layout/step_07/linux/runner/CMakeLists.txt rename animated-responsive-layout/step_07/linux/{ => runner}/main.cc (100%) create mode 100644 animated-responsive-layout/step_07/linux/runner/my_application.cc rename animated-responsive-layout/step_07/linux/{ => runner}/my_application.h (100%) delete mode 100644 animated-responsive-layout/step_08/linux/my_application.cc create mode 100644 animated-responsive-layout/step_08/linux/runner/CMakeLists.txt rename animated-responsive-layout/step_08/linux/{ => runner}/main.cc (100%) create mode 100644 animated-responsive-layout/step_08/linux/runner/my_application.cc rename animated-responsive-layout/step_08/linux/{ => runner}/my_application.h (100%) diff --git a/animated-responsive-layout/step_03/android/gradle.properties b/animated-responsive-layout/step_03/android/gradle.properties index 2597170821..f018a61817 100644 --- a/animated-responsive-layout/step_03/android/gradle.properties +++ b/animated-responsive-layout/step_03/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/animated-responsive-layout/step_03/linux/CMakeLists.txt b/animated-responsive-layout/step_03/linux/CMakeLists.txt index 0a7358f3d8..65d5443385 100644 --- a/animated-responsive-layout/step_03/linux/CMakeLists.txt +++ b/animated-responsive-layout/step_03/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/animated-responsive-layout/step_03/linux/runner/CMakeLists.txt b/animated-responsive-layout/step_03/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/animated-responsive-layout/step_03/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/animated-responsive-layout/step_03/linux/main.cc b/animated-responsive-layout/step_03/linux/runner/main.cc similarity index 100% rename from animated-responsive-layout/step_03/linux/main.cc rename to animated-responsive-layout/step_03/linux/runner/main.cc diff --git a/animated-responsive-layout/step_03/linux/my_application.cc b/animated-responsive-layout/step_03/linux/runner/my_application.cc similarity index 93% rename from animated-responsive-layout/step_03/linux/my_application.cc rename to animated-responsive-layout/step_03/linux/runner/my_application.cc index a11b92eb43..aaab2bbdcd 100644 --- a/animated-responsive-layout/step_03/linux/my_application.cc +++ b/animated-responsive-layout/step_03/linux/runner/my_application.cc @@ -117,6 +117,12 @@ static void my_application_class_init(MyApplicationClass* klass) { static void my_application_init(MyApplication* self) {} MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + return MY_APPLICATION(g_object_new(my_application_get_type(), "application-id", APPLICATION_ID, "flags", G_APPLICATION_NON_UNIQUE, diff --git a/animated-responsive-layout/step_03/linux/my_application.h b/animated-responsive-layout/step_03/linux/runner/my_application.h similarity index 100% rename from animated-responsive-layout/step_03/linux/my_application.h rename to animated-responsive-layout/step_03/linux/runner/my_application.h diff --git a/animated-responsive-layout/step_03/pubspec.yaml b/animated-responsive-layout/step_03/pubspec.yaml index a991c6d7b9..47ac9bb3e1 100644 --- a/animated-responsive-layout/step_03/pubspec.yaml +++ b/animated-responsive-layout/step_03/pubspec.yaml @@ -13,7 +13,7 @@ dependencies: dev_dependencies: flutter_test: sdk: flutter - flutter_lints: ^4.0.0 + flutter_lints: ^5.0.0 flutter: uses-material-design: true diff --git a/animated-responsive-layout/step_03/web/index.html b/animated-responsive-layout/step_03/web/index.html index 84d054020a..bae2a10642 100644 --- a/animated-responsive-layout/step_03/web/index.html +++ b/animated-responsive-layout/step_03/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/animated-responsive-layout/step_04/android/gradle.properties b/animated-responsive-layout/step_04/android/gradle.properties index 2597170821..f018a61817 100644 --- a/animated-responsive-layout/step_04/android/gradle.properties +++ b/animated-responsive-layout/step_04/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/animated-responsive-layout/step_04/linux/CMakeLists.txt b/animated-responsive-layout/step_04/linux/CMakeLists.txt index 0a7358f3d8..65d5443385 100644 --- a/animated-responsive-layout/step_04/linux/CMakeLists.txt +++ b/animated-responsive-layout/step_04/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/animated-responsive-layout/step_04/linux/runner/CMakeLists.txt b/animated-responsive-layout/step_04/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/animated-responsive-layout/step_04/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/animated-responsive-layout/step_04/linux/main.cc b/animated-responsive-layout/step_04/linux/runner/main.cc similarity index 100% rename from animated-responsive-layout/step_04/linux/main.cc rename to animated-responsive-layout/step_04/linux/runner/main.cc diff --git a/animated-responsive-layout/step_04/linux/my_application.cc b/animated-responsive-layout/step_04/linux/runner/my_application.cc similarity index 93% rename from animated-responsive-layout/step_04/linux/my_application.cc rename to animated-responsive-layout/step_04/linux/runner/my_application.cc index a11b92eb43..aaab2bbdcd 100644 --- a/animated-responsive-layout/step_04/linux/my_application.cc +++ b/animated-responsive-layout/step_04/linux/runner/my_application.cc @@ -117,6 +117,12 @@ static void my_application_class_init(MyApplicationClass* klass) { static void my_application_init(MyApplication* self) {} MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + return MY_APPLICATION(g_object_new(my_application_get_type(), "application-id", APPLICATION_ID, "flags", G_APPLICATION_NON_UNIQUE, diff --git a/animated-responsive-layout/step_04/linux/my_application.h b/animated-responsive-layout/step_04/linux/runner/my_application.h similarity index 100% rename from animated-responsive-layout/step_04/linux/my_application.h rename to animated-responsive-layout/step_04/linux/runner/my_application.h diff --git a/animated-responsive-layout/step_04/pubspec.yaml b/animated-responsive-layout/step_04/pubspec.yaml index 106fc3a200..f69a77e63c 100644 --- a/animated-responsive-layout/step_04/pubspec.yaml +++ b/animated-responsive-layout/step_04/pubspec.yaml @@ -13,7 +13,7 @@ dependencies: dev_dependencies: flutter_test: sdk: flutter - flutter_lints: ^4.0.0 + flutter_lints: ^5.0.0 flutter: uses-material-design: true diff --git a/animated-responsive-layout/step_04/web/index.html b/animated-responsive-layout/step_04/web/index.html index 84d054020a..bae2a10642 100644 --- a/animated-responsive-layout/step_04/web/index.html +++ b/animated-responsive-layout/step_04/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/animated-responsive-layout/step_05/android/gradle.properties b/animated-responsive-layout/step_05/android/gradle.properties index 2597170821..f018a61817 100644 --- a/animated-responsive-layout/step_05/android/gradle.properties +++ b/animated-responsive-layout/step_05/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/animated-responsive-layout/step_05/linux/CMakeLists.txt b/animated-responsive-layout/step_05/linux/CMakeLists.txt index 0a7358f3d8..65d5443385 100644 --- a/animated-responsive-layout/step_05/linux/CMakeLists.txt +++ b/animated-responsive-layout/step_05/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/animated-responsive-layout/step_05/linux/runner/CMakeLists.txt b/animated-responsive-layout/step_05/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/animated-responsive-layout/step_05/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/animated-responsive-layout/step_05/linux/main.cc b/animated-responsive-layout/step_05/linux/runner/main.cc similarity index 100% rename from animated-responsive-layout/step_05/linux/main.cc rename to animated-responsive-layout/step_05/linux/runner/main.cc diff --git a/animated-responsive-layout/step_05/linux/my_application.cc b/animated-responsive-layout/step_05/linux/runner/my_application.cc similarity index 93% rename from animated-responsive-layout/step_05/linux/my_application.cc rename to animated-responsive-layout/step_05/linux/runner/my_application.cc index a11b92eb43..aaab2bbdcd 100644 --- a/animated-responsive-layout/step_05/linux/my_application.cc +++ b/animated-responsive-layout/step_05/linux/runner/my_application.cc @@ -117,6 +117,12 @@ static void my_application_class_init(MyApplicationClass* klass) { static void my_application_init(MyApplication* self) {} MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + return MY_APPLICATION(g_object_new(my_application_get_type(), "application-id", APPLICATION_ID, "flags", G_APPLICATION_NON_UNIQUE, diff --git a/animated-responsive-layout/step_05/linux/my_application.h b/animated-responsive-layout/step_05/linux/runner/my_application.h similarity index 100% rename from animated-responsive-layout/step_05/linux/my_application.h rename to animated-responsive-layout/step_05/linux/runner/my_application.h diff --git a/animated-responsive-layout/step_05/pubspec.yaml b/animated-responsive-layout/step_05/pubspec.yaml index 106fc3a200..f69a77e63c 100644 --- a/animated-responsive-layout/step_05/pubspec.yaml +++ b/animated-responsive-layout/step_05/pubspec.yaml @@ -13,7 +13,7 @@ dependencies: dev_dependencies: flutter_test: sdk: flutter - flutter_lints: ^4.0.0 + flutter_lints: ^5.0.0 flutter: uses-material-design: true diff --git a/animated-responsive-layout/step_05/web/index.html b/animated-responsive-layout/step_05/web/index.html index 84d054020a..bae2a10642 100644 --- a/animated-responsive-layout/step_05/web/index.html +++ b/animated-responsive-layout/step_05/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/animated-responsive-layout/step_06/android/gradle.properties b/animated-responsive-layout/step_06/android/gradle.properties index 2597170821..f018a61817 100644 --- a/animated-responsive-layout/step_06/android/gradle.properties +++ b/animated-responsive-layout/step_06/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/animated-responsive-layout/step_06/linux/CMakeLists.txt b/animated-responsive-layout/step_06/linux/CMakeLists.txt index 0a7358f3d8..65d5443385 100644 --- a/animated-responsive-layout/step_06/linux/CMakeLists.txt +++ b/animated-responsive-layout/step_06/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/animated-responsive-layout/step_06/linux/runner/CMakeLists.txt b/animated-responsive-layout/step_06/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/animated-responsive-layout/step_06/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/animated-responsive-layout/step_06/linux/main.cc b/animated-responsive-layout/step_06/linux/runner/main.cc similarity index 100% rename from animated-responsive-layout/step_06/linux/main.cc rename to animated-responsive-layout/step_06/linux/runner/main.cc diff --git a/animated-responsive-layout/step_06/linux/my_application.cc b/animated-responsive-layout/step_06/linux/runner/my_application.cc similarity index 93% rename from animated-responsive-layout/step_06/linux/my_application.cc rename to animated-responsive-layout/step_06/linux/runner/my_application.cc index a11b92eb43..aaab2bbdcd 100644 --- a/animated-responsive-layout/step_06/linux/my_application.cc +++ b/animated-responsive-layout/step_06/linux/runner/my_application.cc @@ -117,6 +117,12 @@ static void my_application_class_init(MyApplicationClass* klass) { static void my_application_init(MyApplication* self) {} MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + return MY_APPLICATION(g_object_new(my_application_get_type(), "application-id", APPLICATION_ID, "flags", G_APPLICATION_NON_UNIQUE, diff --git a/animated-responsive-layout/step_06/linux/my_application.h b/animated-responsive-layout/step_06/linux/runner/my_application.h similarity index 100% rename from animated-responsive-layout/step_06/linux/my_application.h rename to animated-responsive-layout/step_06/linux/runner/my_application.h diff --git a/animated-responsive-layout/step_06/pubspec.yaml b/animated-responsive-layout/step_06/pubspec.yaml index 106fc3a200..f69a77e63c 100644 --- a/animated-responsive-layout/step_06/pubspec.yaml +++ b/animated-responsive-layout/step_06/pubspec.yaml @@ -13,7 +13,7 @@ dependencies: dev_dependencies: flutter_test: sdk: flutter - flutter_lints: ^4.0.0 + flutter_lints: ^5.0.0 flutter: uses-material-design: true diff --git a/animated-responsive-layout/step_06/web/index.html b/animated-responsive-layout/step_06/web/index.html index 84d054020a..bae2a10642 100644 --- a/animated-responsive-layout/step_06/web/index.html +++ b/animated-responsive-layout/step_06/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/animated-responsive-layout/step_07/android/gradle.properties b/animated-responsive-layout/step_07/android/gradle.properties index 2597170821..f018a61817 100644 --- a/animated-responsive-layout/step_07/android/gradle.properties +++ b/animated-responsive-layout/step_07/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/animated-responsive-layout/step_07/linux/CMakeLists.txt b/animated-responsive-layout/step_07/linux/CMakeLists.txt index 0a7358f3d8..65d5443385 100644 --- a/animated-responsive-layout/step_07/linux/CMakeLists.txt +++ b/animated-responsive-layout/step_07/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/animated-responsive-layout/step_07/linux/my_application.cc b/animated-responsive-layout/step_07/linux/my_application.cc deleted file mode 100644 index a11b92eb43..0000000000 --- a/animated-responsive-layout/step_07/linux/my_application.cc +++ /dev/null @@ -1,124 +0,0 @@ -#include "my_application.h" - -#include -#ifdef GDK_WINDOWING_X11 -#include -#endif - -#include "flutter/generated_plugin_registrant.h" - -struct _MyApplication { - GtkApplication parent_instance; - char** dart_entrypoint_arguments; -}; - -G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) - -// Implements GApplication::activate. -static void my_application_activate(GApplication* application) { - MyApplication* self = MY_APPLICATION(application); - GtkWindow* window = - GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); - - // Use a header bar when running in GNOME as this is the common style used - // by applications and is the setup most users will be using (e.g. Ubuntu - // desktop). - // If running on X and not using GNOME then just use a traditional title bar - // in case the window manager does more exotic layout, e.g. tiling. - // If running on Wayland assume the header bar will work (may need changing - // if future cases occur). - gboolean use_header_bar = TRUE; -#ifdef GDK_WINDOWING_X11 - GdkScreen* screen = gtk_window_get_screen(window); - if (GDK_IS_X11_SCREEN(screen)) { - const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); - if (g_strcmp0(wm_name, "GNOME Shell") != 0) { - use_header_bar = FALSE; - } - } -#endif - if (use_header_bar) { - GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); - gtk_widget_show(GTK_WIDGET(header_bar)); - gtk_header_bar_set_title(header_bar, "animated_responsive_layout"); - gtk_header_bar_set_show_close_button(header_bar, TRUE); - gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); - } else { - gtk_window_set_title(window, "animated_responsive_layout"); - } - - gtk_window_set_default_size(window, 1280, 720); - gtk_widget_show(GTK_WIDGET(window)); - - g_autoptr(FlDartProject) project = fl_dart_project_new(); - fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); - - FlView* view = fl_view_new(project); - gtk_widget_show(GTK_WIDGET(view)); - gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); - - fl_register_plugins(FL_PLUGIN_REGISTRY(view)); - - gtk_widget_grab_focus(GTK_WIDGET(view)); -} - -// Implements GApplication::local_command_line. -static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { - MyApplication* self = MY_APPLICATION(application); - // Strip out the first argument as it is the binary name. - self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); - - g_autoptr(GError) error = nullptr; - if (!g_application_register(application, nullptr, &error)) { - g_warning("Failed to register: %s", error->message); - *exit_status = 1; - return TRUE; - } - - g_application_activate(application); - *exit_status = 0; - - return TRUE; -} - -// Implements GApplication::startup. -static void my_application_startup(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application startup. - - G_APPLICATION_CLASS(my_application_parent_class)->startup(application); -} - -// Implements GApplication::shutdown. -static void my_application_shutdown(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application shutdown. - - G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); -} - -// Implements GObject::dispose. -static void my_application_dispose(GObject* object) { - MyApplication* self = MY_APPLICATION(object); - g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); - G_OBJECT_CLASS(my_application_parent_class)->dispose(object); -} - -static void my_application_class_init(MyApplicationClass* klass) { - G_APPLICATION_CLASS(klass)->activate = my_application_activate; - G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; - G_APPLICATION_CLASS(klass)->startup = my_application_startup; - G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; - G_OBJECT_CLASS(klass)->dispose = my_application_dispose; -} - -static void my_application_init(MyApplication* self) {} - -MyApplication* my_application_new() { - return MY_APPLICATION(g_object_new(my_application_get_type(), - "application-id", APPLICATION_ID, - "flags", G_APPLICATION_NON_UNIQUE, - nullptr)); -} diff --git a/animated-responsive-layout/step_07/linux/runner/CMakeLists.txt b/animated-responsive-layout/step_07/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/animated-responsive-layout/step_07/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/animated-responsive-layout/step_07/linux/main.cc b/animated-responsive-layout/step_07/linux/runner/main.cc similarity index 100% rename from animated-responsive-layout/step_07/linux/main.cc rename to animated-responsive-layout/step_07/linux/runner/main.cc diff --git a/animated-responsive-layout/step_07/linux/runner/my_application.cc b/animated-responsive-layout/step_07/linux/runner/my_application.cc new file mode 100644 index 0000000000..aaab2bbdcd --- /dev/null +++ b/animated-responsive-layout/step_07/linux/runner/my_application.cc @@ -0,0 +1,130 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "animated_responsive_layout"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "animated_responsive_layout"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/animated-responsive-layout/step_07/linux/my_application.h b/animated-responsive-layout/step_07/linux/runner/my_application.h similarity index 100% rename from animated-responsive-layout/step_07/linux/my_application.h rename to animated-responsive-layout/step_07/linux/runner/my_application.h diff --git a/animated-responsive-layout/step_07/pubspec.yaml b/animated-responsive-layout/step_07/pubspec.yaml index 106fc3a200..f69a77e63c 100644 --- a/animated-responsive-layout/step_07/pubspec.yaml +++ b/animated-responsive-layout/step_07/pubspec.yaml @@ -13,7 +13,7 @@ dependencies: dev_dependencies: flutter_test: sdk: flutter - flutter_lints: ^4.0.0 + flutter_lints: ^5.0.0 flutter: uses-material-design: true diff --git a/animated-responsive-layout/step_07/web/index.html b/animated-responsive-layout/step_07/web/index.html index 84d054020a..bae2a10642 100644 --- a/animated-responsive-layout/step_07/web/index.html +++ b/animated-responsive-layout/step_07/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/animated-responsive-layout/step_08/android/gradle.properties b/animated-responsive-layout/step_08/android/gradle.properties index 2597170821..f018a61817 100644 --- a/animated-responsive-layout/step_08/android/gradle.properties +++ b/animated-responsive-layout/step_08/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/animated-responsive-layout/step_08/linux/CMakeLists.txt b/animated-responsive-layout/step_08/linux/CMakeLists.txt index 0a7358f3d8..65d5443385 100644 --- a/animated-responsive-layout/step_08/linux/CMakeLists.txt +++ b/animated-responsive-layout/step_08/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/animated-responsive-layout/step_08/linux/my_application.cc b/animated-responsive-layout/step_08/linux/my_application.cc deleted file mode 100644 index a11b92eb43..0000000000 --- a/animated-responsive-layout/step_08/linux/my_application.cc +++ /dev/null @@ -1,124 +0,0 @@ -#include "my_application.h" - -#include -#ifdef GDK_WINDOWING_X11 -#include -#endif - -#include "flutter/generated_plugin_registrant.h" - -struct _MyApplication { - GtkApplication parent_instance; - char** dart_entrypoint_arguments; -}; - -G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) - -// Implements GApplication::activate. -static void my_application_activate(GApplication* application) { - MyApplication* self = MY_APPLICATION(application); - GtkWindow* window = - GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); - - // Use a header bar when running in GNOME as this is the common style used - // by applications and is the setup most users will be using (e.g. Ubuntu - // desktop). - // If running on X and not using GNOME then just use a traditional title bar - // in case the window manager does more exotic layout, e.g. tiling. - // If running on Wayland assume the header bar will work (may need changing - // if future cases occur). - gboolean use_header_bar = TRUE; -#ifdef GDK_WINDOWING_X11 - GdkScreen* screen = gtk_window_get_screen(window); - if (GDK_IS_X11_SCREEN(screen)) { - const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); - if (g_strcmp0(wm_name, "GNOME Shell") != 0) { - use_header_bar = FALSE; - } - } -#endif - if (use_header_bar) { - GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); - gtk_widget_show(GTK_WIDGET(header_bar)); - gtk_header_bar_set_title(header_bar, "animated_responsive_layout"); - gtk_header_bar_set_show_close_button(header_bar, TRUE); - gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); - } else { - gtk_window_set_title(window, "animated_responsive_layout"); - } - - gtk_window_set_default_size(window, 1280, 720); - gtk_widget_show(GTK_WIDGET(window)); - - g_autoptr(FlDartProject) project = fl_dart_project_new(); - fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); - - FlView* view = fl_view_new(project); - gtk_widget_show(GTK_WIDGET(view)); - gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); - - fl_register_plugins(FL_PLUGIN_REGISTRY(view)); - - gtk_widget_grab_focus(GTK_WIDGET(view)); -} - -// Implements GApplication::local_command_line. -static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { - MyApplication* self = MY_APPLICATION(application); - // Strip out the first argument as it is the binary name. - self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); - - g_autoptr(GError) error = nullptr; - if (!g_application_register(application, nullptr, &error)) { - g_warning("Failed to register: %s", error->message); - *exit_status = 1; - return TRUE; - } - - g_application_activate(application); - *exit_status = 0; - - return TRUE; -} - -// Implements GApplication::startup. -static void my_application_startup(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application startup. - - G_APPLICATION_CLASS(my_application_parent_class)->startup(application); -} - -// Implements GApplication::shutdown. -static void my_application_shutdown(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application shutdown. - - G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); -} - -// Implements GObject::dispose. -static void my_application_dispose(GObject* object) { - MyApplication* self = MY_APPLICATION(object); - g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); - G_OBJECT_CLASS(my_application_parent_class)->dispose(object); -} - -static void my_application_class_init(MyApplicationClass* klass) { - G_APPLICATION_CLASS(klass)->activate = my_application_activate; - G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; - G_APPLICATION_CLASS(klass)->startup = my_application_startup; - G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; - G_OBJECT_CLASS(klass)->dispose = my_application_dispose; -} - -static void my_application_init(MyApplication* self) {} - -MyApplication* my_application_new() { - return MY_APPLICATION(g_object_new(my_application_get_type(), - "application-id", APPLICATION_ID, - "flags", G_APPLICATION_NON_UNIQUE, - nullptr)); -} diff --git a/animated-responsive-layout/step_08/linux/runner/CMakeLists.txt b/animated-responsive-layout/step_08/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/animated-responsive-layout/step_08/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/animated-responsive-layout/step_08/linux/main.cc b/animated-responsive-layout/step_08/linux/runner/main.cc similarity index 100% rename from animated-responsive-layout/step_08/linux/main.cc rename to animated-responsive-layout/step_08/linux/runner/main.cc diff --git a/animated-responsive-layout/step_08/linux/runner/my_application.cc b/animated-responsive-layout/step_08/linux/runner/my_application.cc new file mode 100644 index 0000000000..aaab2bbdcd --- /dev/null +++ b/animated-responsive-layout/step_08/linux/runner/my_application.cc @@ -0,0 +1,130 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "animated_responsive_layout"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "animated_responsive_layout"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/animated-responsive-layout/step_08/linux/my_application.h b/animated-responsive-layout/step_08/linux/runner/my_application.h similarity index 100% rename from animated-responsive-layout/step_08/linux/my_application.h rename to animated-responsive-layout/step_08/linux/runner/my_application.h diff --git a/animated-responsive-layout/step_08/pubspec.yaml b/animated-responsive-layout/step_08/pubspec.yaml index 106fc3a200..f69a77e63c 100644 --- a/animated-responsive-layout/step_08/pubspec.yaml +++ b/animated-responsive-layout/step_08/pubspec.yaml @@ -13,7 +13,7 @@ dependencies: dev_dependencies: flutter_test: sdk: flutter - flutter_lints: ^4.0.0 + flutter_lints: ^5.0.0 flutter: uses-material-design: true diff --git a/animated-responsive-layout/step_08/web/index.html b/animated-responsive-layout/step_08/web/index.html index 84d054020a..bae2a10642 100644 --- a/animated-responsive-layout/step_08/web/index.html +++ b/animated-responsive-layout/step_08/web/index.html @@ -21,7 +21,7 @@ - + From 5d4d668c0b7cb93aad7e5ed04306841ddd91c283 Mon Sep 17 00:00:00 2001 From: Brett Morgan Date: Mon, 14 Oct 2024 15:01:08 +1100 Subject: [PATCH 003/108] Update `animations` --- animations/step_01/.gitignore | 2 + animations/step_01/android/gradle.properties | 2 +- animations/step_01/linux/CMakeLists.txt | 23 +--- .../step_01/linux/runner/CMakeLists.txt | 26 ++++ animations/step_01/linux/{ => runner}/main.cc | 0 .../linux/{ => runner}/my_application.cc | 6 + .../linux/{ => runner}/my_application.h | 0 .../step_01/macos/Runner/AppDelegate.swift | 4 + animations/step_01/web/index.html | 2 +- animations/step_02/.gitignore | 2 + animations/step_02/android/gradle.properties | 2 +- animations/step_02/linux/CMakeLists.txt | 23 +--- .../step_02/linux/runner/CMakeLists.txt | 26 ++++ animations/step_02/linux/runner/main.cc | 6 + .../step_02/linux/runner/my_application.cc | 130 ++++++++++++++++++ .../step_02/linux/runner/my_application.h | 18 +++ .../step_02/macos/Runner/AppDelegate.swift | 4 + animations/step_02/web/index.html | 2 +- animations/step_03/.gitignore | 2 + animations/step_03/android/gradle.properties | 2 +- animations/step_03/linux/CMakeLists.txt | 23 +--- .../step_03/linux/runner/CMakeLists.txt | 26 ++++ animations/step_03/linux/runner/main.cc | 6 + .../step_03/linux/runner/my_application.cc | 130 ++++++++++++++++++ .../step_03/linux/runner/my_application.h | 18 +++ .../step_03/macos/Runner/AppDelegate.swift | 4 + animations/step_03/web/index.html | 2 +- animations/step_04/.gitignore | 2 + animations/step_04/android/gradle.properties | 2 +- animations/step_04/linux/CMakeLists.txt | 23 +--- .../step_04/linux/runner/CMakeLists.txt | 26 ++++ animations/step_04/linux/runner/main.cc | 6 + .../step_04/linux/runner/my_application.cc | 130 ++++++++++++++++++ .../step_04/linux/runner/my_application.h | 18 +++ .../step_04/macos/Runner/AppDelegate.swift | 4 + animations/step_04/web/index.html | 2 +- animations/step_05/.gitignore | 2 + animations/step_05/android/gradle.properties | 2 +- animations/step_05/linux/CMakeLists.txt | 23 +--- .../step_05/linux/runner/CMakeLists.txt | 26 ++++ animations/step_05/linux/runner/main.cc | 6 + .../step_05/linux/runner/my_application.cc | 130 ++++++++++++++++++ .../step_05/linux/runner/my_application.h | 18 +++ .../step_05/macos/Runner/AppDelegate.swift | 4 + animations/step_05/web/index.html | 2 +- 45 files changed, 807 insertions(+), 110 deletions(-) create mode 100644 animations/step_01/linux/runner/CMakeLists.txt rename animations/step_01/linux/{ => runner}/main.cc (100%) rename animations/step_01/linux/{ => runner}/my_application.cc (93%) rename animations/step_01/linux/{ => runner}/my_application.h (100%) create mode 100644 animations/step_02/linux/runner/CMakeLists.txt create mode 100644 animations/step_02/linux/runner/main.cc create mode 100644 animations/step_02/linux/runner/my_application.cc create mode 100644 animations/step_02/linux/runner/my_application.h create mode 100644 animations/step_03/linux/runner/CMakeLists.txt create mode 100644 animations/step_03/linux/runner/main.cc create mode 100644 animations/step_03/linux/runner/my_application.cc create mode 100644 animations/step_03/linux/runner/my_application.h create mode 100644 animations/step_04/linux/runner/CMakeLists.txt create mode 100644 animations/step_04/linux/runner/main.cc create mode 100644 animations/step_04/linux/runner/my_application.cc create mode 100644 animations/step_04/linux/runner/my_application.h create mode 100644 animations/step_05/linux/runner/CMakeLists.txt create mode 100644 animations/step_05/linux/runner/main.cc create mode 100644 animations/step_05/linux/runner/my_application.cc create mode 100644 animations/step_05/linux/runner/my_application.h diff --git a/animations/step_01/.gitignore b/animations/step_01/.gitignore index 29a3a5017f..79c113f9b5 100644 --- a/animations/step_01/.gitignore +++ b/animations/step_01/.gitignore @@ -5,9 +5,11 @@ *.swp .DS_Store .atom/ +.build/ .buildlog/ .history .svn/ +.swiftpm/ migrate_working_dir/ # IntelliJ related diff --git a/animations/step_01/android/gradle.properties b/animations/step_01/android/gradle.properties index 2597170821..f018a61817 100644 --- a/animations/step_01/android/gradle.properties +++ b/animations/step_01/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/animations/step_01/linux/CMakeLists.txt b/animations/step_01/linux/CMakeLists.txt index 658be85ac5..7caf822271 100644 --- a/animations/step_01/linux/CMakeLists.txt +++ b/animations/step_01/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/animations/step_01/linux/runner/CMakeLists.txt b/animations/step_01/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/animations/step_01/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/animations/step_01/linux/main.cc b/animations/step_01/linux/runner/main.cc similarity index 100% rename from animations/step_01/linux/main.cc rename to animations/step_01/linux/runner/main.cc diff --git a/animations/step_01/linux/my_application.cc b/animations/step_01/linux/runner/my_application.cc similarity index 93% rename from animations/step_01/linux/my_application.cc rename to animations/step_01/linux/runner/my_application.cc index d6ea0e3c5f..0040d7e46c 100644 --- a/animations/step_01/linux/my_application.cc +++ b/animations/step_01/linux/runner/my_application.cc @@ -117,6 +117,12 @@ static void my_application_class_init(MyApplicationClass* klass) { static void my_application_init(MyApplication* self) {} MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + return MY_APPLICATION(g_object_new(my_application_get_type(), "application-id", APPLICATION_ID, "flags", G_APPLICATION_NON_UNIQUE, diff --git a/animations/step_01/linux/my_application.h b/animations/step_01/linux/runner/my_application.h similarity index 100% rename from animations/step_01/linux/my_application.h rename to animations/step_01/linux/runner/my_application.h diff --git a/animations/step_01/macos/Runner/AppDelegate.swift b/animations/step_01/macos/Runner/AppDelegate.swift index 8e02df2888..b3c1761412 100644 --- a/animations/step_01/macos/Runner/AppDelegate.swift +++ b/animations/step_01/macos/Runner/AppDelegate.swift @@ -6,4 +6,8 @@ class AppDelegate: FlutterAppDelegate { override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { return true } + + override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { + return true + } } diff --git a/animations/step_01/web/index.html b/animations/step_01/web/index.html index 89656d9a06..ec05768c59 100644 --- a/animations/step_01/web/index.html +++ b/animations/step_01/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/animations/step_02/.gitignore b/animations/step_02/.gitignore index 29a3a5017f..79c113f9b5 100644 --- a/animations/step_02/.gitignore +++ b/animations/step_02/.gitignore @@ -5,9 +5,11 @@ *.swp .DS_Store .atom/ +.build/ .buildlog/ .history .svn/ +.swiftpm/ migrate_working_dir/ # IntelliJ related diff --git a/animations/step_02/android/gradle.properties b/animations/step_02/android/gradle.properties index 2597170821..f018a61817 100644 --- a/animations/step_02/android/gradle.properties +++ b/animations/step_02/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/animations/step_02/linux/CMakeLists.txt b/animations/step_02/linux/CMakeLists.txt index 658be85ac5..7caf822271 100644 --- a/animations/step_02/linux/CMakeLists.txt +++ b/animations/step_02/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/animations/step_02/linux/runner/CMakeLists.txt b/animations/step_02/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/animations/step_02/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/animations/step_02/linux/runner/main.cc b/animations/step_02/linux/runner/main.cc new file mode 100644 index 0000000000..e7c5c54370 --- /dev/null +++ b/animations/step_02/linux/runner/main.cc @@ -0,0 +1,6 @@ +#include "my_application.h" + +int main(int argc, char** argv) { + g_autoptr(MyApplication) app = my_application_new(); + return g_application_run(G_APPLICATION(app), argc, argv); +} diff --git a/animations/step_02/linux/runner/my_application.cc b/animations/step_02/linux/runner/my_application.cc new file mode 100644 index 0000000000..0040d7e46c --- /dev/null +++ b/animations/step_02/linux/runner/my_application.cc @@ -0,0 +1,130 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "quiz"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "quiz"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/animations/step_02/linux/runner/my_application.h b/animations/step_02/linux/runner/my_application.h new file mode 100644 index 0000000000..72271d5e41 --- /dev/null +++ b/animations/step_02/linux/runner/my_application.h @@ -0,0 +1,18 @@ +#ifndef FLUTTER_MY_APPLICATION_H_ +#define FLUTTER_MY_APPLICATION_H_ + +#include + +G_DECLARE_FINAL_TYPE(MyApplication, my_application, MY, APPLICATION, + GtkApplication) + +/** + * my_application_new: + * + * Creates a new Flutter-based application. + * + * Returns: a new #MyApplication. + */ +MyApplication* my_application_new(); + +#endif // FLUTTER_MY_APPLICATION_H_ diff --git a/animations/step_02/macos/Runner/AppDelegate.swift b/animations/step_02/macos/Runner/AppDelegate.swift index 8e02df2888..b3c1761412 100644 --- a/animations/step_02/macos/Runner/AppDelegate.swift +++ b/animations/step_02/macos/Runner/AppDelegate.swift @@ -6,4 +6,8 @@ class AppDelegate: FlutterAppDelegate { override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { return true } + + override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { + return true + } } diff --git a/animations/step_02/web/index.html b/animations/step_02/web/index.html index 89656d9a06..ec05768c59 100644 --- a/animations/step_02/web/index.html +++ b/animations/step_02/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/animations/step_03/.gitignore b/animations/step_03/.gitignore index 29a3a5017f..79c113f9b5 100644 --- a/animations/step_03/.gitignore +++ b/animations/step_03/.gitignore @@ -5,9 +5,11 @@ *.swp .DS_Store .atom/ +.build/ .buildlog/ .history .svn/ +.swiftpm/ migrate_working_dir/ # IntelliJ related diff --git a/animations/step_03/android/gradle.properties b/animations/step_03/android/gradle.properties index 2597170821..f018a61817 100644 --- a/animations/step_03/android/gradle.properties +++ b/animations/step_03/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/animations/step_03/linux/CMakeLists.txt b/animations/step_03/linux/CMakeLists.txt index 658be85ac5..7caf822271 100644 --- a/animations/step_03/linux/CMakeLists.txt +++ b/animations/step_03/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/animations/step_03/linux/runner/CMakeLists.txt b/animations/step_03/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/animations/step_03/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/animations/step_03/linux/runner/main.cc b/animations/step_03/linux/runner/main.cc new file mode 100644 index 0000000000..e7c5c54370 --- /dev/null +++ b/animations/step_03/linux/runner/main.cc @@ -0,0 +1,6 @@ +#include "my_application.h" + +int main(int argc, char** argv) { + g_autoptr(MyApplication) app = my_application_new(); + return g_application_run(G_APPLICATION(app), argc, argv); +} diff --git a/animations/step_03/linux/runner/my_application.cc b/animations/step_03/linux/runner/my_application.cc new file mode 100644 index 0000000000..0040d7e46c --- /dev/null +++ b/animations/step_03/linux/runner/my_application.cc @@ -0,0 +1,130 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "quiz"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "quiz"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/animations/step_03/linux/runner/my_application.h b/animations/step_03/linux/runner/my_application.h new file mode 100644 index 0000000000..72271d5e41 --- /dev/null +++ b/animations/step_03/linux/runner/my_application.h @@ -0,0 +1,18 @@ +#ifndef FLUTTER_MY_APPLICATION_H_ +#define FLUTTER_MY_APPLICATION_H_ + +#include + +G_DECLARE_FINAL_TYPE(MyApplication, my_application, MY, APPLICATION, + GtkApplication) + +/** + * my_application_new: + * + * Creates a new Flutter-based application. + * + * Returns: a new #MyApplication. + */ +MyApplication* my_application_new(); + +#endif // FLUTTER_MY_APPLICATION_H_ diff --git a/animations/step_03/macos/Runner/AppDelegate.swift b/animations/step_03/macos/Runner/AppDelegate.swift index 8e02df2888..b3c1761412 100644 --- a/animations/step_03/macos/Runner/AppDelegate.swift +++ b/animations/step_03/macos/Runner/AppDelegate.swift @@ -6,4 +6,8 @@ class AppDelegate: FlutterAppDelegate { override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { return true } + + override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { + return true + } } diff --git a/animations/step_03/web/index.html b/animations/step_03/web/index.html index 89656d9a06..ec05768c59 100644 --- a/animations/step_03/web/index.html +++ b/animations/step_03/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/animations/step_04/.gitignore b/animations/step_04/.gitignore index 29a3a5017f..79c113f9b5 100644 --- a/animations/step_04/.gitignore +++ b/animations/step_04/.gitignore @@ -5,9 +5,11 @@ *.swp .DS_Store .atom/ +.build/ .buildlog/ .history .svn/ +.swiftpm/ migrate_working_dir/ # IntelliJ related diff --git a/animations/step_04/android/gradle.properties b/animations/step_04/android/gradle.properties index 2597170821..f018a61817 100644 --- a/animations/step_04/android/gradle.properties +++ b/animations/step_04/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/animations/step_04/linux/CMakeLists.txt b/animations/step_04/linux/CMakeLists.txt index 658be85ac5..7caf822271 100644 --- a/animations/step_04/linux/CMakeLists.txt +++ b/animations/step_04/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/animations/step_04/linux/runner/CMakeLists.txt b/animations/step_04/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/animations/step_04/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/animations/step_04/linux/runner/main.cc b/animations/step_04/linux/runner/main.cc new file mode 100644 index 0000000000..e7c5c54370 --- /dev/null +++ b/animations/step_04/linux/runner/main.cc @@ -0,0 +1,6 @@ +#include "my_application.h" + +int main(int argc, char** argv) { + g_autoptr(MyApplication) app = my_application_new(); + return g_application_run(G_APPLICATION(app), argc, argv); +} diff --git a/animations/step_04/linux/runner/my_application.cc b/animations/step_04/linux/runner/my_application.cc new file mode 100644 index 0000000000..0040d7e46c --- /dev/null +++ b/animations/step_04/linux/runner/my_application.cc @@ -0,0 +1,130 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "quiz"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "quiz"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/animations/step_04/linux/runner/my_application.h b/animations/step_04/linux/runner/my_application.h new file mode 100644 index 0000000000..72271d5e41 --- /dev/null +++ b/animations/step_04/linux/runner/my_application.h @@ -0,0 +1,18 @@ +#ifndef FLUTTER_MY_APPLICATION_H_ +#define FLUTTER_MY_APPLICATION_H_ + +#include + +G_DECLARE_FINAL_TYPE(MyApplication, my_application, MY, APPLICATION, + GtkApplication) + +/** + * my_application_new: + * + * Creates a new Flutter-based application. + * + * Returns: a new #MyApplication. + */ +MyApplication* my_application_new(); + +#endif // FLUTTER_MY_APPLICATION_H_ diff --git a/animations/step_04/macos/Runner/AppDelegate.swift b/animations/step_04/macos/Runner/AppDelegate.swift index 8e02df2888..b3c1761412 100644 --- a/animations/step_04/macos/Runner/AppDelegate.swift +++ b/animations/step_04/macos/Runner/AppDelegate.swift @@ -6,4 +6,8 @@ class AppDelegate: FlutterAppDelegate { override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { return true } + + override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { + return true + } } diff --git a/animations/step_04/web/index.html b/animations/step_04/web/index.html index 89656d9a06..ec05768c59 100644 --- a/animations/step_04/web/index.html +++ b/animations/step_04/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/animations/step_05/.gitignore b/animations/step_05/.gitignore index 29a3a5017f..79c113f9b5 100644 --- a/animations/step_05/.gitignore +++ b/animations/step_05/.gitignore @@ -5,9 +5,11 @@ *.swp .DS_Store .atom/ +.build/ .buildlog/ .history .svn/ +.swiftpm/ migrate_working_dir/ # IntelliJ related diff --git a/animations/step_05/android/gradle.properties b/animations/step_05/android/gradle.properties index 2597170821..f018a61817 100644 --- a/animations/step_05/android/gradle.properties +++ b/animations/step_05/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/animations/step_05/linux/CMakeLists.txt b/animations/step_05/linux/CMakeLists.txt index 658be85ac5..7caf822271 100644 --- a/animations/step_05/linux/CMakeLists.txt +++ b/animations/step_05/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/animations/step_05/linux/runner/CMakeLists.txt b/animations/step_05/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/animations/step_05/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/animations/step_05/linux/runner/main.cc b/animations/step_05/linux/runner/main.cc new file mode 100644 index 0000000000..e7c5c54370 --- /dev/null +++ b/animations/step_05/linux/runner/main.cc @@ -0,0 +1,6 @@ +#include "my_application.h" + +int main(int argc, char** argv) { + g_autoptr(MyApplication) app = my_application_new(); + return g_application_run(G_APPLICATION(app), argc, argv); +} diff --git a/animations/step_05/linux/runner/my_application.cc b/animations/step_05/linux/runner/my_application.cc new file mode 100644 index 0000000000..0040d7e46c --- /dev/null +++ b/animations/step_05/linux/runner/my_application.cc @@ -0,0 +1,130 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "quiz"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "quiz"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/animations/step_05/linux/runner/my_application.h b/animations/step_05/linux/runner/my_application.h new file mode 100644 index 0000000000..72271d5e41 --- /dev/null +++ b/animations/step_05/linux/runner/my_application.h @@ -0,0 +1,18 @@ +#ifndef FLUTTER_MY_APPLICATION_H_ +#define FLUTTER_MY_APPLICATION_H_ + +#include + +G_DECLARE_FINAL_TYPE(MyApplication, my_application, MY, APPLICATION, + GtkApplication) + +/** + * my_application_new: + * + * Creates a new Flutter-based application. + * + * Returns: a new #MyApplication. + */ +MyApplication* my_application_new(); + +#endif // FLUTTER_MY_APPLICATION_H_ diff --git a/animations/step_05/macos/Runner/AppDelegate.swift b/animations/step_05/macos/Runner/AppDelegate.swift index 8e02df2888..b3c1761412 100644 --- a/animations/step_05/macos/Runner/AppDelegate.swift +++ b/animations/step_05/macos/Runner/AppDelegate.swift @@ -6,4 +6,8 @@ class AppDelegate: FlutterAppDelegate { override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { return true } + + override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { + return true + } } diff --git a/animations/step_05/web/index.html b/animations/step_05/web/index.html index 89656d9a06..ec05768c59 100644 --- a/animations/step_05/web/index.html +++ b/animations/step_05/web/index.html @@ -21,7 +21,7 @@ - + From cbad6d5808437030689cc8e728bba9da38959821 Mon Sep 17 00:00:00 2001 From: Brett Morgan Date: Mon, 14 Oct 2024 15:16:27 +1100 Subject: [PATCH 004/108] Update `boring_to_beautiful` --- .../final/android/gradle.properties | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 118 ++++++++-------- .../final/linux/CMakeLists.txt | 23 +--- .../final/linux/runner/CMakeLists.txt | 26 ++++ .../final/linux/{ => runner}/main.cc | 0 .../linux/{ => runner}/my_application.cc | 6 + .../final/linux/{ => runner}/my_application.h | 0 .../macos/Runner.xcodeproj/project.pbxproj | 106 +++++++------- boring_to_beautiful/final/pubspec.yaml | 12 +- boring_to_beautiful/final/web/index.html | 2 +- .../step_01/android/gradle.properties | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 118 ++++++++-------- .../step_01/linux/CMakeLists.txt | 23 +--- .../step_01/linux/runner/CMakeLists.txt | 26 ++++ .../step_01/linux/{ => runner}/main.cc | 0 .../linux/{ => runner}/my_application.cc | 6 + .../linux/{ => runner}/my_application.h | 0 .../macos/Runner.xcodeproj/project.pbxproj | 106 +++++++------- boring_to_beautiful/step_01/pubspec.yaml | 12 +- boring_to_beautiful/step_01/web/index.html | 2 +- .../step_02/android/gradle.properties | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 118 ++++++++-------- .../step_02/linux/CMakeLists.txt | 23 +--- .../step_02/linux/runner/CMakeLists.txt | 26 ++++ .../step_02/linux/{ => runner}/main.cc | 0 .../linux/{ => runner}/my_application.cc | 6 + .../linux/{ => runner}/my_application.h | 0 .../macos/Runner.xcodeproj/project.pbxproj | 106 +++++++------- boring_to_beautiful/step_02/pubspec.yaml | 12 +- boring_to_beautiful/step_02/web/index.html | 2 +- .../step_03/android/gradle.properties | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 118 ++++++++-------- .../step_03/linux/CMakeLists.txt | 23 +--- .../step_03/linux/runner/CMakeLists.txt | 26 ++++ .../step_03/linux/{ => runner}/main.cc | 0 .../linux/{ => runner}/my_application.cc | 6 + .../linux/{ => runner}/my_application.h | 0 .../macos/Runner.xcodeproj/project.pbxproj | 106 +++++++------- boring_to_beautiful/step_03/pubspec.yaml | 12 +- boring_to_beautiful/step_03/web/index.html | 2 +- .../step_04/android/gradle.properties | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 118 ++++++++-------- .../step_04/linux/CMakeLists.txt | 23 +--- .../step_04/linux/my_application.cc | 124 ----------------- .../step_04/linux/runner/CMakeLists.txt | 26 ++++ .../step_04/linux/{ => runner}/main.cc | 0 .../step_04/linux/runner/my_application.cc | 130 ++++++++++++++++++ .../linux/{ => runner}/my_application.h | 0 .../macos/Runner.xcodeproj/project.pbxproj | 106 +++++++------- boring_to_beautiful/step_04/pubspec.yaml | 12 +- boring_to_beautiful/step_04/web/index.html | 2 +- .../step_05/android/gradle.properties | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 118 ++++++++-------- .../step_05/linux/CMakeLists.txt | 23 +--- .../step_05/linux/my_application.cc | 124 ----------------- .../step_05/linux/runner/CMakeLists.txt | 26 ++++ .../step_05/linux/{ => runner}/main.cc | 0 .../step_05/linux/runner/my_application.cc | 130 ++++++++++++++++++ .../linux/{ => runner}/my_application.h | 0 .../macos/Runner.xcodeproj/project.pbxproj | 106 +++++++------- boring_to_beautiful/step_05/pubspec.yaml | 12 +- boring_to_beautiful/step_05/web/index.html | 2 +- .../step_06/android/gradle.properties | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 118 ++++++++-------- .../step_06/linux/CMakeLists.txt | 23 +--- .../step_06/linux/my_application.cc | 124 ----------------- .../step_06/linux/runner/CMakeLists.txt | 26 ++++ .../step_06/linux/{ => runner}/main.cc | 0 .../step_06/linux/runner/my_application.cc | 130 ++++++++++++++++++ .../linux/{ => runner}/my_application.h | 0 .../macos/Runner.xcodeproj/project.pbxproj | 106 +++++++------- boring_to_beautiful/step_06/pubspec.yaml | 12 +- boring_to_beautiful/step_06/web/index.html | 2 +- .../step_07/android/gradle.properties | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 118 ++++++++-------- .../step_07/linux/CMakeLists.txt | 23 +--- .../step_07/linux/my_application.cc | 124 ----------------- .../step_07/linux/runner/CMakeLists.txt | 26 ++++ .../step_07/linux/{ => runner}/main.cc | 0 .../step_07/linux/runner/my_application.cc | 130 ++++++++++++++++++ .../linux/{ => runner}/my_application.h | 0 .../macos/Runner.xcodeproj/project.pbxproj | 106 +++++++------- boring_to_beautiful/step_07/pubspec.yaml | 12 +- boring_to_beautiful/step_07/web/index.html | 2 +- 84 files changed, 1736 insertions(+), 1616 deletions(-) create mode 100644 boring_to_beautiful/final/linux/runner/CMakeLists.txt rename boring_to_beautiful/final/linux/{ => runner}/main.cc (100%) rename boring_to_beautiful/final/linux/{ => runner}/my_application.cc (93%) rename boring_to_beautiful/final/linux/{ => runner}/my_application.h (100%) create mode 100644 boring_to_beautiful/step_01/linux/runner/CMakeLists.txt rename boring_to_beautiful/step_01/linux/{ => runner}/main.cc (100%) rename boring_to_beautiful/step_01/linux/{ => runner}/my_application.cc (93%) rename boring_to_beautiful/step_01/linux/{ => runner}/my_application.h (100%) create mode 100644 boring_to_beautiful/step_02/linux/runner/CMakeLists.txt rename boring_to_beautiful/step_02/linux/{ => runner}/main.cc (100%) rename boring_to_beautiful/step_02/linux/{ => runner}/my_application.cc (93%) rename boring_to_beautiful/step_02/linux/{ => runner}/my_application.h (100%) create mode 100644 boring_to_beautiful/step_03/linux/runner/CMakeLists.txt rename boring_to_beautiful/step_03/linux/{ => runner}/main.cc (100%) rename boring_to_beautiful/step_03/linux/{ => runner}/my_application.cc (93%) rename boring_to_beautiful/step_03/linux/{ => runner}/my_application.h (100%) delete mode 100644 boring_to_beautiful/step_04/linux/my_application.cc create mode 100644 boring_to_beautiful/step_04/linux/runner/CMakeLists.txt rename boring_to_beautiful/step_04/linux/{ => runner}/main.cc (100%) create mode 100644 boring_to_beautiful/step_04/linux/runner/my_application.cc rename boring_to_beautiful/step_04/linux/{ => runner}/my_application.h (100%) delete mode 100644 boring_to_beautiful/step_05/linux/my_application.cc create mode 100644 boring_to_beautiful/step_05/linux/runner/CMakeLists.txt rename boring_to_beautiful/step_05/linux/{ => runner}/main.cc (100%) create mode 100644 boring_to_beautiful/step_05/linux/runner/my_application.cc rename boring_to_beautiful/step_05/linux/{ => runner}/my_application.h (100%) delete mode 100644 boring_to_beautiful/step_06/linux/my_application.cc create mode 100644 boring_to_beautiful/step_06/linux/runner/CMakeLists.txt rename boring_to_beautiful/step_06/linux/{ => runner}/main.cc (100%) create mode 100644 boring_to_beautiful/step_06/linux/runner/my_application.cc rename boring_to_beautiful/step_06/linux/{ => runner}/my_application.h (100%) delete mode 100644 boring_to_beautiful/step_07/linux/my_application.cc create mode 100644 boring_to_beautiful/step_07/linux/runner/CMakeLists.txt rename boring_to_beautiful/step_07/linux/{ => runner}/main.cc (100%) create mode 100644 boring_to_beautiful/step_07/linux/runner/my_application.cc rename boring_to_beautiful/step_07/linux/{ => runner}/my_application.h (100%) diff --git a/boring_to_beautiful/final/android/gradle.properties b/boring_to_beautiful/final/android/gradle.properties index 2597170821..f018a61817 100644 --- a/boring_to_beautiful/final/android/gradle.properties +++ b/boring_to_beautiful/final/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/boring_to_beautiful/final/ios/Runner.xcodeproj/project.pbxproj b/boring_to_beautiful/final/ios/Runner.xcodeproj/project.pbxproj index 3f17d86d6e..27188f1a29 100644 --- a/boring_to_beautiful/final/ios/Runner.xcodeproj/project.pbxproj +++ b/boring_to_beautiful/final/ios/Runner.xcodeproj/project.pbxproj @@ -7,15 +7,15 @@ objects = { /* Begin PBXBuildFile section */ - 045D9DC041F68A933791819A /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1A5B8D1F6E2314D54252D714 /* Pods_Runner.framework */; }; 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; + 208962B53868BF2AFCDAD8E7 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 32C8ACDFE0B7706E1D63C8FC /* Pods_Runner.framework */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; - 6340AE5E0688CFEF81E588DB /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8C21E1E613517ACEAEC525DC /* Pods_RunnerTests.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; + A4B9B73FBC1F47ACF4A1C4A0 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F27A303A186C2A0809FCFE71 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,18 +42,19 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 028B86D9E5D62F1DCB40F65B /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 0F5809B4F9F50DCE58AED982 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 1A5B8D1F6E2314D54252D714 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 32C8ACDFE0B7706E1D63C8FC /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 612DF2F856DB475059D0216B /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 44AD5815711D9A48D9B79930 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 4E2630CD278C99A068304BFF /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 7BE5987796DB363652331093 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - 8C21E1E613517ACEAEC525DC /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -61,26 +62,25 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 9E4939688F843C9FB16910FC /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - C9E54593F7142BBA8B70B2AA /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - CB85765AE9FE44396BCEE420 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - EFFA2C9A0A544F6091D35176 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + AAD1FCD230C27D91828B1C7E /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + B521B76D1194933A83E8CA4F /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + F27A303A186C2A0809FCFE71 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 6A191B1B707AA2189ED7AEB7 /* Frameworks */ = { + 97C146EB1CF9000F007C117D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 6340AE5E0688CFEF81E588DB /* Pods_RunnerTests.framework in Frameworks */, + 208962B53868BF2AFCDAD8E7 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 97C146EB1CF9000F007C117D /* Frameworks */ = { + F1EB1A38D8D843224D93C592 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 045D9DC041F68A933791819A /* Pods_Runner.framework in Frameworks */, + A4B9B73FBC1F47ACF4A1C4A0 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -95,25 +95,11 @@ path = RunnerTests; sourceTree = ""; }; - 3FC66A828656DFEF6FEB944E /* Pods */ = { - isa = PBXGroup; - children = ( - C9E54593F7142BBA8B70B2AA /* Pods-Runner.debug.xcconfig */, - CB85765AE9FE44396BCEE420 /* Pods-Runner.release.xcconfig */, - EFFA2C9A0A544F6091D35176 /* Pods-Runner.profile.xcconfig */, - 612DF2F856DB475059D0216B /* Pods-RunnerTests.debug.xcconfig */, - 9E4939688F843C9FB16910FC /* Pods-RunnerTests.release.xcconfig */, - 7BE5987796DB363652331093 /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; - 7C4F6B5D0FD36966BC5B7640 /* Frameworks */ = { + 4F504FD1A7DEAA11371FD812 /* Frameworks */ = { isa = PBXGroup; children = ( - 1A5B8D1F6E2314D54252D714 /* Pods_Runner.framework */, - 8C21E1E613517ACEAEC525DC /* Pods_RunnerTests.framework */, + 32C8ACDFE0B7706E1D63C8FC /* Pods_Runner.framework */, + F27A303A186C2A0809FCFE71 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -136,8 +122,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - 3FC66A828656DFEF6FEB944E /* Pods */, - 7C4F6B5D0FD36966BC5B7640 /* Frameworks */, + EEC228E83A67A67530E39534 /* Pods */, + 4F504FD1A7DEAA11371FD812 /* Frameworks */, ); sourceTree = ""; }; @@ -165,6 +151,20 @@ path = Runner; sourceTree = ""; }; + EEC228E83A67A67530E39534 /* Pods */ = { + isa = PBXGroup; + children = ( + 4E2630CD278C99A068304BFF /* Pods-Runner.debug.xcconfig */, + B521B76D1194933A83E8CA4F /* Pods-Runner.release.xcconfig */, + AAD1FCD230C27D91828B1C7E /* Pods-Runner.profile.xcconfig */, + 028B86D9E5D62F1DCB40F65B /* Pods-RunnerTests.debug.xcconfig */, + 44AD5815711D9A48D9B79930 /* Pods-RunnerTests.release.xcconfig */, + 0F5809B4F9F50DCE58AED982 /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 1B0871ABDE9E880ACA9AF76E /* [CP] Check Pods Manifest.lock */, + 0033FF9EDA59710A08D92356 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 6A191B1B707AA2189ED7AEB7 /* Frameworks */, + F1EB1A38D8D843224D93C592 /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 152278CBCF53589D360B61BB /* [CP] Check Pods Manifest.lock */, + 61E108675EDD4B5F14470A53 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 9964E2B5C7FAD06A79BAAF89 /* [CP] Embed Pods Frameworks */, + 988934BE9015DDB2BD2671E2 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -270,7 +270,7 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 152278CBCF53589D360B61BB /* [CP] Check Pods Manifest.lock */ = { + 0033FF9EDA59710A08D92356 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -285,50 +285,50 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 1B0871ABDE9E880ACA9AF76E /* [CP] Check Pods Manifest.lock */ = { + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); + name = "Thin Binary"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + 61E108675EDD4B5F14470A53 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( - "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "Thin Binary"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; @@ -345,7 +345,7 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - 9964E2B5C7FAD06A79BAAF89 /* [CP] Embed Pods Frameworks */ = { + 988934BE9015DDB2BD2671E2 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 612DF2F856DB475059D0216B /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 028B86D9E5D62F1DCB40F65B /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 9E4939688F843C9FB16910FC /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 44AD5815711D9A48D9B79930 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 7BE5987796DB363652331093 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 0F5809B4F9F50DCE58AED982 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/boring_to_beautiful/final/linux/CMakeLists.txt b/boring_to_beautiful/final/linux/CMakeLists.txt index 74a8344fa9..0565f6a409 100644 --- a/boring_to_beautiful/final/linux/CMakeLists.txt +++ b/boring_to_beautiful/final/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/boring_to_beautiful/final/linux/runner/CMakeLists.txt b/boring_to_beautiful/final/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/boring_to_beautiful/final/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/boring_to_beautiful/final/linux/main.cc b/boring_to_beautiful/final/linux/runner/main.cc similarity index 100% rename from boring_to_beautiful/final/linux/main.cc rename to boring_to_beautiful/final/linux/runner/main.cc diff --git a/boring_to_beautiful/final/linux/my_application.cc b/boring_to_beautiful/final/linux/runner/my_application.cc similarity index 93% rename from boring_to_beautiful/final/linux/my_application.cc rename to boring_to_beautiful/final/linux/runner/my_application.cc index 59e1394236..f93ba9f71c 100644 --- a/boring_to_beautiful/final/linux/my_application.cc +++ b/boring_to_beautiful/final/linux/runner/my_application.cc @@ -117,6 +117,12 @@ static void my_application_class_init(MyApplicationClass* klass) { static void my_application_init(MyApplication* self) {} MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + return MY_APPLICATION(g_object_new(my_application_get_type(), "application-id", APPLICATION_ID, "flags", G_APPLICATION_NON_UNIQUE, diff --git a/boring_to_beautiful/final/linux/my_application.h b/boring_to_beautiful/final/linux/runner/my_application.h similarity index 100% rename from boring_to_beautiful/final/linux/my_application.h rename to boring_to_beautiful/final/linux/runner/my_application.h diff --git a/boring_to_beautiful/final/macos/Runner.xcodeproj/project.pbxproj b/boring_to_beautiful/final/macos/Runner.xcodeproj/project.pbxproj index 3b2e4ebdbe..a4ba51afb5 100644 --- a/boring_to_beautiful/final/macos/Runner.xcodeproj/project.pbxproj +++ b/boring_to_beautiful/final/macos/Runner.xcodeproj/project.pbxproj @@ -27,8 +27,8 @@ 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 63F13B68B978A8E76E978EE7 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5BAA81C4A6E7098556896E2F /* Pods_Runner.framework */; }; - A1EB5160E1186002E08A43FB /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 030CB9F0A41B69C812119E7A /* Pods_RunnerTests.framework */; }; + 4199224406A25A7474E0C79E /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 36423EA0CDE5981423B48AEE /* Pods_Runner.framework */; }; + 91BCC9003B49CC98CECBF0EC /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B80D78B7F0831CA886CFE751 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,8 +62,7 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 030CB9F0A41B69C812119E7A /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 03846B9F44BF1972C83E25FA /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 25E382F5DE97D2D47426B59B /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -80,14 +79,15 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 5BAA81C4A6E7098556896E2F /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 5C2816CD076396E37646986B /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - 5CE7AE4215797944E1BE1B53 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 5EE7E79790EC7251679ADEAC /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 36423EA0CDE5981423B48AEE /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 59981915FE452EAD0B851E3D /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 8CEF7ABB1ECE3EAA81DD03DB /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 92320B2EDC5B05B44B5CC56F /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - BCEE4E22E342BE2AE575AD2D /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + A0563A63B8D8D2BB44A67D02 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + B80D78B7F0831CA886CFE751 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + E881F22E1ED9CF3723A13CEC /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + F1D90A111512887B7981FE7C /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - A1EB5160E1186002E08A43FB /* Pods_RunnerTests.framework in Frameworks */, + 91BCC9003B49CC98CECBF0EC /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,7 +103,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 63F13B68B978A8E76E978EE7 /* Pods_Runner.framework in Frameworks */, + 4199224406A25A7474E0C79E /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -137,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - FD831DC61C04B5999E3388CF /* Pods */, + 7F3DCCA95ED45892CA7CC729 /* Pods */, ); sourceTree = ""; }; @@ -185,27 +185,27 @@ path = Runner; sourceTree = ""; }; - D73912EC22F37F3D000D13A0 /* Frameworks */ = { + 7F3DCCA95ED45892CA7CC729 /* Pods */ = { isa = PBXGroup; children = ( - 5BAA81C4A6E7098556896E2F /* Pods_Runner.framework */, - 030CB9F0A41B69C812119E7A /* Pods_RunnerTests.framework */, + A0563A63B8D8D2BB44A67D02 /* Pods-Runner.debug.xcconfig */, + 92320B2EDC5B05B44B5CC56F /* Pods-Runner.release.xcconfig */, + 59981915FE452EAD0B851E3D /* Pods-Runner.profile.xcconfig */, + E881F22E1ED9CF3723A13CEC /* Pods-RunnerTests.debug.xcconfig */, + F1D90A111512887B7981FE7C /* Pods-RunnerTests.release.xcconfig */, + 25E382F5DE97D2D47426B59B /* Pods-RunnerTests.profile.xcconfig */, ); - name = Frameworks; + name = Pods; + path = Pods; sourceTree = ""; }; - FD831DC61C04B5999E3388CF /* Pods */ = { + D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - 8CEF7ABB1ECE3EAA81DD03DB /* Pods-Runner.debug.xcconfig */, - 5CE7AE4215797944E1BE1B53 /* Pods-Runner.release.xcconfig */, - 5C2816CD076396E37646986B /* Pods-Runner.profile.xcconfig */, - BCEE4E22E342BE2AE575AD2D /* Pods-RunnerTests.debug.xcconfig */, - 03846B9F44BF1972C83E25FA /* Pods-RunnerTests.release.xcconfig */, - 5EE7E79790EC7251679ADEAC /* Pods-RunnerTests.profile.xcconfig */, + 36423EA0CDE5981423B48AEE /* Pods_Runner.framework */, + B80D78B7F0831CA886CFE751 /* Pods_RunnerTests.framework */, ); - name = Pods; - path = Pods; + name = Frameworks; sourceTree = ""; }; /* End PBXGroup section */ @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 904FB334C3FF8770F4FAA2F4 /* [CP] Check Pods Manifest.lock */, + ABDEED064F2EE34AC0D864AE /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 60646BBAFDF05E49F2FB1BEF /* [CP] Check Pods Manifest.lock */, + B9E6980CAE17BFE6BF2A9555 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 74EBA55F3EAADD88242C66DC /* [CP] Embed Pods Frameworks */, + 031FA17996CC4882D4AF14D9 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,6 +323,23 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ + 031FA17996CC4882D4AF14D9 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -361,7 +378,7 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 60646BBAFDF05E49F2FB1BEF /* [CP] Check Pods Manifest.lock */ = { + ABDEED064F2EE34AC0D864AE /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -376,31 +393,14 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 74EBA55F3EAADD88242C66DC /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; - 904FB334C3FF8770F4FAA2F4 /* [CP] Check Pods Manifest.lock */ = { + B9E6980CAE17BFE6BF2A9555 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -415,7 +415,7 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = BCEE4E22E342BE2AE575AD2D /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = E881F22E1ED9CF3723A13CEC /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 03846B9F44BF1972C83E25FA /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = F1D90A111512887B7981FE7C /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 5EE7E79790EC7251679ADEAC /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 25E382F5DE97D2D47426B59B /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/boring_to_beautiful/final/pubspec.yaml b/boring_to_beautiful/final/pubspec.yaml index e41af5ebf4..6452298e93 100644 --- a/boring_to_beautiful/final/pubspec.yaml +++ b/boring_to_beautiful/final/pubspec.yaml @@ -13,24 +13,24 @@ dependencies: adaptive_components: ^0.0.10 adaptive_navigation: ^0.0.10 animations: ^2.0.11 - collection: ^1.18.0 + collection: ^1.19.0 cupertino_icons: ^1.0.8 - desktop_window: ^0.4.0 + desktop_window: ^0.4.1 dynamic_color: ^1.7.0 english_words: ^4.0.0 flutter_bloc: ^8.1.6 freezed_annotation: ^2.4.4 - go_router: ^14.2.7 + go_router: ^14.3.0 material_color_utilities: any universal_platform: ^1.1.0 - url_launcher: ^6.3.0 + url_launcher: ^6.3.1 google_fonts: ^6.2.1 dev_dependencies: flutter_test: sdk: flutter - build_runner: ^2.4.12 - flutter_lints: ^4.0.0 + build_runner: ^2.4.13 + flutter_lints: ^5.0.0 freezed: ^2.5.7 flutter: diff --git a/boring_to_beautiful/final/web/index.html b/boring_to_beautiful/final/web/index.html index 0a8bd1ab80..e0a0abbbbf 100644 --- a/boring_to_beautiful/final/web/index.html +++ b/boring_to_beautiful/final/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/boring_to_beautiful/step_01/android/gradle.properties b/boring_to_beautiful/step_01/android/gradle.properties index 2597170821..f018a61817 100644 --- a/boring_to_beautiful/step_01/android/gradle.properties +++ b/boring_to_beautiful/step_01/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/boring_to_beautiful/step_01/ios/Runner.xcodeproj/project.pbxproj b/boring_to_beautiful/step_01/ios/Runner.xcodeproj/project.pbxproj index 3f17d86d6e..27188f1a29 100644 --- a/boring_to_beautiful/step_01/ios/Runner.xcodeproj/project.pbxproj +++ b/boring_to_beautiful/step_01/ios/Runner.xcodeproj/project.pbxproj @@ -7,15 +7,15 @@ objects = { /* Begin PBXBuildFile section */ - 045D9DC041F68A933791819A /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1A5B8D1F6E2314D54252D714 /* Pods_Runner.framework */; }; 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; + 208962B53868BF2AFCDAD8E7 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 32C8ACDFE0B7706E1D63C8FC /* Pods_Runner.framework */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; - 6340AE5E0688CFEF81E588DB /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8C21E1E613517ACEAEC525DC /* Pods_RunnerTests.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; + A4B9B73FBC1F47ACF4A1C4A0 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F27A303A186C2A0809FCFE71 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,18 +42,19 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 028B86D9E5D62F1DCB40F65B /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 0F5809B4F9F50DCE58AED982 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 1A5B8D1F6E2314D54252D714 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 32C8ACDFE0B7706E1D63C8FC /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 612DF2F856DB475059D0216B /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 44AD5815711D9A48D9B79930 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 4E2630CD278C99A068304BFF /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 7BE5987796DB363652331093 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - 8C21E1E613517ACEAEC525DC /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -61,26 +62,25 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 9E4939688F843C9FB16910FC /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - C9E54593F7142BBA8B70B2AA /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - CB85765AE9FE44396BCEE420 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - EFFA2C9A0A544F6091D35176 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + AAD1FCD230C27D91828B1C7E /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + B521B76D1194933A83E8CA4F /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + F27A303A186C2A0809FCFE71 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 6A191B1B707AA2189ED7AEB7 /* Frameworks */ = { + 97C146EB1CF9000F007C117D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 6340AE5E0688CFEF81E588DB /* Pods_RunnerTests.framework in Frameworks */, + 208962B53868BF2AFCDAD8E7 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 97C146EB1CF9000F007C117D /* Frameworks */ = { + F1EB1A38D8D843224D93C592 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 045D9DC041F68A933791819A /* Pods_Runner.framework in Frameworks */, + A4B9B73FBC1F47ACF4A1C4A0 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -95,25 +95,11 @@ path = RunnerTests; sourceTree = ""; }; - 3FC66A828656DFEF6FEB944E /* Pods */ = { - isa = PBXGroup; - children = ( - C9E54593F7142BBA8B70B2AA /* Pods-Runner.debug.xcconfig */, - CB85765AE9FE44396BCEE420 /* Pods-Runner.release.xcconfig */, - EFFA2C9A0A544F6091D35176 /* Pods-Runner.profile.xcconfig */, - 612DF2F856DB475059D0216B /* Pods-RunnerTests.debug.xcconfig */, - 9E4939688F843C9FB16910FC /* Pods-RunnerTests.release.xcconfig */, - 7BE5987796DB363652331093 /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; - 7C4F6B5D0FD36966BC5B7640 /* Frameworks */ = { + 4F504FD1A7DEAA11371FD812 /* Frameworks */ = { isa = PBXGroup; children = ( - 1A5B8D1F6E2314D54252D714 /* Pods_Runner.framework */, - 8C21E1E613517ACEAEC525DC /* Pods_RunnerTests.framework */, + 32C8ACDFE0B7706E1D63C8FC /* Pods_Runner.framework */, + F27A303A186C2A0809FCFE71 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -136,8 +122,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - 3FC66A828656DFEF6FEB944E /* Pods */, - 7C4F6B5D0FD36966BC5B7640 /* Frameworks */, + EEC228E83A67A67530E39534 /* Pods */, + 4F504FD1A7DEAA11371FD812 /* Frameworks */, ); sourceTree = ""; }; @@ -165,6 +151,20 @@ path = Runner; sourceTree = ""; }; + EEC228E83A67A67530E39534 /* Pods */ = { + isa = PBXGroup; + children = ( + 4E2630CD278C99A068304BFF /* Pods-Runner.debug.xcconfig */, + B521B76D1194933A83E8CA4F /* Pods-Runner.release.xcconfig */, + AAD1FCD230C27D91828B1C7E /* Pods-Runner.profile.xcconfig */, + 028B86D9E5D62F1DCB40F65B /* Pods-RunnerTests.debug.xcconfig */, + 44AD5815711D9A48D9B79930 /* Pods-RunnerTests.release.xcconfig */, + 0F5809B4F9F50DCE58AED982 /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 1B0871ABDE9E880ACA9AF76E /* [CP] Check Pods Manifest.lock */, + 0033FF9EDA59710A08D92356 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 6A191B1B707AA2189ED7AEB7 /* Frameworks */, + F1EB1A38D8D843224D93C592 /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 152278CBCF53589D360B61BB /* [CP] Check Pods Manifest.lock */, + 61E108675EDD4B5F14470A53 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 9964E2B5C7FAD06A79BAAF89 /* [CP] Embed Pods Frameworks */, + 988934BE9015DDB2BD2671E2 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -270,7 +270,7 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 152278CBCF53589D360B61BB /* [CP] Check Pods Manifest.lock */ = { + 0033FF9EDA59710A08D92356 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -285,50 +285,50 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 1B0871ABDE9E880ACA9AF76E /* [CP] Check Pods Manifest.lock */ = { + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); + name = "Thin Binary"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + 61E108675EDD4B5F14470A53 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( - "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "Thin Binary"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; @@ -345,7 +345,7 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - 9964E2B5C7FAD06A79BAAF89 /* [CP] Embed Pods Frameworks */ = { + 988934BE9015DDB2BD2671E2 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 612DF2F856DB475059D0216B /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 028B86D9E5D62F1DCB40F65B /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 9E4939688F843C9FB16910FC /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 44AD5815711D9A48D9B79930 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 7BE5987796DB363652331093 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 0F5809B4F9F50DCE58AED982 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/boring_to_beautiful/step_01/linux/CMakeLists.txt b/boring_to_beautiful/step_01/linux/CMakeLists.txt index 74a8344fa9..0565f6a409 100644 --- a/boring_to_beautiful/step_01/linux/CMakeLists.txt +++ b/boring_to_beautiful/step_01/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/boring_to_beautiful/step_01/linux/runner/CMakeLists.txt b/boring_to_beautiful/step_01/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/boring_to_beautiful/step_01/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/boring_to_beautiful/step_01/linux/main.cc b/boring_to_beautiful/step_01/linux/runner/main.cc similarity index 100% rename from boring_to_beautiful/step_01/linux/main.cc rename to boring_to_beautiful/step_01/linux/runner/main.cc diff --git a/boring_to_beautiful/step_01/linux/my_application.cc b/boring_to_beautiful/step_01/linux/runner/my_application.cc similarity index 93% rename from boring_to_beautiful/step_01/linux/my_application.cc rename to boring_to_beautiful/step_01/linux/runner/my_application.cc index 59e1394236..f93ba9f71c 100644 --- a/boring_to_beautiful/step_01/linux/my_application.cc +++ b/boring_to_beautiful/step_01/linux/runner/my_application.cc @@ -117,6 +117,12 @@ static void my_application_class_init(MyApplicationClass* klass) { static void my_application_init(MyApplication* self) {} MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + return MY_APPLICATION(g_object_new(my_application_get_type(), "application-id", APPLICATION_ID, "flags", G_APPLICATION_NON_UNIQUE, diff --git a/boring_to_beautiful/step_01/linux/my_application.h b/boring_to_beautiful/step_01/linux/runner/my_application.h similarity index 100% rename from boring_to_beautiful/step_01/linux/my_application.h rename to boring_to_beautiful/step_01/linux/runner/my_application.h diff --git a/boring_to_beautiful/step_01/macos/Runner.xcodeproj/project.pbxproj b/boring_to_beautiful/step_01/macos/Runner.xcodeproj/project.pbxproj index 3b2e4ebdbe..a4ba51afb5 100644 --- a/boring_to_beautiful/step_01/macos/Runner.xcodeproj/project.pbxproj +++ b/boring_to_beautiful/step_01/macos/Runner.xcodeproj/project.pbxproj @@ -27,8 +27,8 @@ 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 63F13B68B978A8E76E978EE7 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5BAA81C4A6E7098556896E2F /* Pods_Runner.framework */; }; - A1EB5160E1186002E08A43FB /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 030CB9F0A41B69C812119E7A /* Pods_RunnerTests.framework */; }; + 4199224406A25A7474E0C79E /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 36423EA0CDE5981423B48AEE /* Pods_Runner.framework */; }; + 91BCC9003B49CC98CECBF0EC /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B80D78B7F0831CA886CFE751 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,8 +62,7 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 030CB9F0A41B69C812119E7A /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 03846B9F44BF1972C83E25FA /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 25E382F5DE97D2D47426B59B /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -80,14 +79,15 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 5BAA81C4A6E7098556896E2F /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 5C2816CD076396E37646986B /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - 5CE7AE4215797944E1BE1B53 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 5EE7E79790EC7251679ADEAC /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 36423EA0CDE5981423B48AEE /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 59981915FE452EAD0B851E3D /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 8CEF7ABB1ECE3EAA81DD03DB /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 92320B2EDC5B05B44B5CC56F /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - BCEE4E22E342BE2AE575AD2D /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + A0563A63B8D8D2BB44A67D02 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + B80D78B7F0831CA886CFE751 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + E881F22E1ED9CF3723A13CEC /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + F1D90A111512887B7981FE7C /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - A1EB5160E1186002E08A43FB /* Pods_RunnerTests.framework in Frameworks */, + 91BCC9003B49CC98CECBF0EC /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,7 +103,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 63F13B68B978A8E76E978EE7 /* Pods_Runner.framework in Frameworks */, + 4199224406A25A7474E0C79E /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -137,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - FD831DC61C04B5999E3388CF /* Pods */, + 7F3DCCA95ED45892CA7CC729 /* Pods */, ); sourceTree = ""; }; @@ -185,27 +185,27 @@ path = Runner; sourceTree = ""; }; - D73912EC22F37F3D000D13A0 /* Frameworks */ = { + 7F3DCCA95ED45892CA7CC729 /* Pods */ = { isa = PBXGroup; children = ( - 5BAA81C4A6E7098556896E2F /* Pods_Runner.framework */, - 030CB9F0A41B69C812119E7A /* Pods_RunnerTests.framework */, + A0563A63B8D8D2BB44A67D02 /* Pods-Runner.debug.xcconfig */, + 92320B2EDC5B05B44B5CC56F /* Pods-Runner.release.xcconfig */, + 59981915FE452EAD0B851E3D /* Pods-Runner.profile.xcconfig */, + E881F22E1ED9CF3723A13CEC /* Pods-RunnerTests.debug.xcconfig */, + F1D90A111512887B7981FE7C /* Pods-RunnerTests.release.xcconfig */, + 25E382F5DE97D2D47426B59B /* Pods-RunnerTests.profile.xcconfig */, ); - name = Frameworks; + name = Pods; + path = Pods; sourceTree = ""; }; - FD831DC61C04B5999E3388CF /* Pods */ = { + D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - 8CEF7ABB1ECE3EAA81DD03DB /* Pods-Runner.debug.xcconfig */, - 5CE7AE4215797944E1BE1B53 /* Pods-Runner.release.xcconfig */, - 5C2816CD076396E37646986B /* Pods-Runner.profile.xcconfig */, - BCEE4E22E342BE2AE575AD2D /* Pods-RunnerTests.debug.xcconfig */, - 03846B9F44BF1972C83E25FA /* Pods-RunnerTests.release.xcconfig */, - 5EE7E79790EC7251679ADEAC /* Pods-RunnerTests.profile.xcconfig */, + 36423EA0CDE5981423B48AEE /* Pods_Runner.framework */, + B80D78B7F0831CA886CFE751 /* Pods_RunnerTests.framework */, ); - name = Pods; - path = Pods; + name = Frameworks; sourceTree = ""; }; /* End PBXGroup section */ @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 904FB334C3FF8770F4FAA2F4 /* [CP] Check Pods Manifest.lock */, + ABDEED064F2EE34AC0D864AE /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 60646BBAFDF05E49F2FB1BEF /* [CP] Check Pods Manifest.lock */, + B9E6980CAE17BFE6BF2A9555 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 74EBA55F3EAADD88242C66DC /* [CP] Embed Pods Frameworks */, + 031FA17996CC4882D4AF14D9 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,6 +323,23 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ + 031FA17996CC4882D4AF14D9 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -361,7 +378,7 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 60646BBAFDF05E49F2FB1BEF /* [CP] Check Pods Manifest.lock */ = { + ABDEED064F2EE34AC0D864AE /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -376,31 +393,14 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 74EBA55F3EAADD88242C66DC /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; - 904FB334C3FF8770F4FAA2F4 /* [CP] Check Pods Manifest.lock */ = { + B9E6980CAE17BFE6BF2A9555 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -415,7 +415,7 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = BCEE4E22E342BE2AE575AD2D /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = E881F22E1ED9CF3723A13CEC /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 03846B9F44BF1972C83E25FA /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = F1D90A111512887B7981FE7C /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 5EE7E79790EC7251679ADEAC /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 25E382F5DE97D2D47426B59B /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/boring_to_beautiful/step_01/pubspec.yaml b/boring_to_beautiful/step_01/pubspec.yaml index 03677ca8dc..16e4075129 100644 --- a/boring_to_beautiful/step_01/pubspec.yaml +++ b/boring_to_beautiful/step_01/pubspec.yaml @@ -13,23 +13,23 @@ dependencies: adaptive_components: ^0.0.10 adaptive_navigation: ^0.0.10 animations: ^2.0.11 - collection: ^1.18.0 + collection: ^1.19.0 cupertino_icons: ^1.0.8 - desktop_window: ^0.4.0 + desktop_window: ^0.4.1 dynamic_color: ^1.7.0 english_words: ^4.0.0 flutter_bloc: ^8.1.6 freezed_annotation: ^2.4.4 - go_router: ^14.2.7 + go_router: ^14.3.0 material_color_utilities: any universal_platform: ^1.1.0 - url_launcher: ^6.3.0 + url_launcher: ^6.3.1 dev_dependencies: flutter_test: sdk: flutter - build_runner: ^2.4.12 - flutter_lints: ^4.0.0 + build_runner: ^2.4.13 + flutter_lints: ^5.0.0 freezed: ^2.5.7 flutter: diff --git a/boring_to_beautiful/step_01/web/index.html b/boring_to_beautiful/step_01/web/index.html index 0a8bd1ab80..e0a0abbbbf 100644 --- a/boring_to_beautiful/step_01/web/index.html +++ b/boring_to_beautiful/step_01/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/boring_to_beautiful/step_02/android/gradle.properties b/boring_to_beautiful/step_02/android/gradle.properties index 2597170821..f018a61817 100644 --- a/boring_to_beautiful/step_02/android/gradle.properties +++ b/boring_to_beautiful/step_02/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/boring_to_beautiful/step_02/ios/Runner.xcodeproj/project.pbxproj b/boring_to_beautiful/step_02/ios/Runner.xcodeproj/project.pbxproj index 3f17d86d6e..27188f1a29 100644 --- a/boring_to_beautiful/step_02/ios/Runner.xcodeproj/project.pbxproj +++ b/boring_to_beautiful/step_02/ios/Runner.xcodeproj/project.pbxproj @@ -7,15 +7,15 @@ objects = { /* Begin PBXBuildFile section */ - 045D9DC041F68A933791819A /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1A5B8D1F6E2314D54252D714 /* Pods_Runner.framework */; }; 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; + 208962B53868BF2AFCDAD8E7 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 32C8ACDFE0B7706E1D63C8FC /* Pods_Runner.framework */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; - 6340AE5E0688CFEF81E588DB /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8C21E1E613517ACEAEC525DC /* Pods_RunnerTests.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; + A4B9B73FBC1F47ACF4A1C4A0 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F27A303A186C2A0809FCFE71 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,18 +42,19 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 028B86D9E5D62F1DCB40F65B /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 0F5809B4F9F50DCE58AED982 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 1A5B8D1F6E2314D54252D714 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 32C8ACDFE0B7706E1D63C8FC /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 612DF2F856DB475059D0216B /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 44AD5815711D9A48D9B79930 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 4E2630CD278C99A068304BFF /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 7BE5987796DB363652331093 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - 8C21E1E613517ACEAEC525DC /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -61,26 +62,25 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 9E4939688F843C9FB16910FC /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - C9E54593F7142BBA8B70B2AA /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - CB85765AE9FE44396BCEE420 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - EFFA2C9A0A544F6091D35176 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + AAD1FCD230C27D91828B1C7E /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + B521B76D1194933A83E8CA4F /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + F27A303A186C2A0809FCFE71 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 6A191B1B707AA2189ED7AEB7 /* Frameworks */ = { + 97C146EB1CF9000F007C117D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 6340AE5E0688CFEF81E588DB /* Pods_RunnerTests.framework in Frameworks */, + 208962B53868BF2AFCDAD8E7 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 97C146EB1CF9000F007C117D /* Frameworks */ = { + F1EB1A38D8D843224D93C592 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 045D9DC041F68A933791819A /* Pods_Runner.framework in Frameworks */, + A4B9B73FBC1F47ACF4A1C4A0 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -95,25 +95,11 @@ path = RunnerTests; sourceTree = ""; }; - 3FC66A828656DFEF6FEB944E /* Pods */ = { - isa = PBXGroup; - children = ( - C9E54593F7142BBA8B70B2AA /* Pods-Runner.debug.xcconfig */, - CB85765AE9FE44396BCEE420 /* Pods-Runner.release.xcconfig */, - EFFA2C9A0A544F6091D35176 /* Pods-Runner.profile.xcconfig */, - 612DF2F856DB475059D0216B /* Pods-RunnerTests.debug.xcconfig */, - 9E4939688F843C9FB16910FC /* Pods-RunnerTests.release.xcconfig */, - 7BE5987796DB363652331093 /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; - 7C4F6B5D0FD36966BC5B7640 /* Frameworks */ = { + 4F504FD1A7DEAA11371FD812 /* Frameworks */ = { isa = PBXGroup; children = ( - 1A5B8D1F6E2314D54252D714 /* Pods_Runner.framework */, - 8C21E1E613517ACEAEC525DC /* Pods_RunnerTests.framework */, + 32C8ACDFE0B7706E1D63C8FC /* Pods_Runner.framework */, + F27A303A186C2A0809FCFE71 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -136,8 +122,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - 3FC66A828656DFEF6FEB944E /* Pods */, - 7C4F6B5D0FD36966BC5B7640 /* Frameworks */, + EEC228E83A67A67530E39534 /* Pods */, + 4F504FD1A7DEAA11371FD812 /* Frameworks */, ); sourceTree = ""; }; @@ -165,6 +151,20 @@ path = Runner; sourceTree = ""; }; + EEC228E83A67A67530E39534 /* Pods */ = { + isa = PBXGroup; + children = ( + 4E2630CD278C99A068304BFF /* Pods-Runner.debug.xcconfig */, + B521B76D1194933A83E8CA4F /* Pods-Runner.release.xcconfig */, + AAD1FCD230C27D91828B1C7E /* Pods-Runner.profile.xcconfig */, + 028B86D9E5D62F1DCB40F65B /* Pods-RunnerTests.debug.xcconfig */, + 44AD5815711D9A48D9B79930 /* Pods-RunnerTests.release.xcconfig */, + 0F5809B4F9F50DCE58AED982 /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 1B0871ABDE9E880ACA9AF76E /* [CP] Check Pods Manifest.lock */, + 0033FF9EDA59710A08D92356 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 6A191B1B707AA2189ED7AEB7 /* Frameworks */, + F1EB1A38D8D843224D93C592 /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 152278CBCF53589D360B61BB /* [CP] Check Pods Manifest.lock */, + 61E108675EDD4B5F14470A53 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 9964E2B5C7FAD06A79BAAF89 /* [CP] Embed Pods Frameworks */, + 988934BE9015DDB2BD2671E2 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -270,7 +270,7 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 152278CBCF53589D360B61BB /* [CP] Check Pods Manifest.lock */ = { + 0033FF9EDA59710A08D92356 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -285,50 +285,50 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 1B0871ABDE9E880ACA9AF76E /* [CP] Check Pods Manifest.lock */ = { + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); + name = "Thin Binary"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + 61E108675EDD4B5F14470A53 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( - "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "Thin Binary"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; @@ -345,7 +345,7 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - 9964E2B5C7FAD06A79BAAF89 /* [CP] Embed Pods Frameworks */ = { + 988934BE9015DDB2BD2671E2 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 612DF2F856DB475059D0216B /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 028B86D9E5D62F1DCB40F65B /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 9E4939688F843C9FB16910FC /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 44AD5815711D9A48D9B79930 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 7BE5987796DB363652331093 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 0F5809B4F9F50DCE58AED982 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/boring_to_beautiful/step_02/linux/CMakeLists.txt b/boring_to_beautiful/step_02/linux/CMakeLists.txt index 74a8344fa9..0565f6a409 100644 --- a/boring_to_beautiful/step_02/linux/CMakeLists.txt +++ b/boring_to_beautiful/step_02/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/boring_to_beautiful/step_02/linux/runner/CMakeLists.txt b/boring_to_beautiful/step_02/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/boring_to_beautiful/step_02/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/boring_to_beautiful/step_02/linux/main.cc b/boring_to_beautiful/step_02/linux/runner/main.cc similarity index 100% rename from boring_to_beautiful/step_02/linux/main.cc rename to boring_to_beautiful/step_02/linux/runner/main.cc diff --git a/boring_to_beautiful/step_02/linux/my_application.cc b/boring_to_beautiful/step_02/linux/runner/my_application.cc similarity index 93% rename from boring_to_beautiful/step_02/linux/my_application.cc rename to boring_to_beautiful/step_02/linux/runner/my_application.cc index 59e1394236..f93ba9f71c 100644 --- a/boring_to_beautiful/step_02/linux/my_application.cc +++ b/boring_to_beautiful/step_02/linux/runner/my_application.cc @@ -117,6 +117,12 @@ static void my_application_class_init(MyApplicationClass* klass) { static void my_application_init(MyApplication* self) {} MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + return MY_APPLICATION(g_object_new(my_application_get_type(), "application-id", APPLICATION_ID, "flags", G_APPLICATION_NON_UNIQUE, diff --git a/boring_to_beautiful/step_02/linux/my_application.h b/boring_to_beautiful/step_02/linux/runner/my_application.h similarity index 100% rename from boring_to_beautiful/step_02/linux/my_application.h rename to boring_to_beautiful/step_02/linux/runner/my_application.h diff --git a/boring_to_beautiful/step_02/macos/Runner.xcodeproj/project.pbxproj b/boring_to_beautiful/step_02/macos/Runner.xcodeproj/project.pbxproj index 3b2e4ebdbe..a4ba51afb5 100644 --- a/boring_to_beautiful/step_02/macos/Runner.xcodeproj/project.pbxproj +++ b/boring_to_beautiful/step_02/macos/Runner.xcodeproj/project.pbxproj @@ -27,8 +27,8 @@ 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 63F13B68B978A8E76E978EE7 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5BAA81C4A6E7098556896E2F /* Pods_Runner.framework */; }; - A1EB5160E1186002E08A43FB /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 030CB9F0A41B69C812119E7A /* Pods_RunnerTests.framework */; }; + 4199224406A25A7474E0C79E /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 36423EA0CDE5981423B48AEE /* Pods_Runner.framework */; }; + 91BCC9003B49CC98CECBF0EC /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B80D78B7F0831CA886CFE751 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,8 +62,7 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 030CB9F0A41B69C812119E7A /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 03846B9F44BF1972C83E25FA /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 25E382F5DE97D2D47426B59B /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -80,14 +79,15 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 5BAA81C4A6E7098556896E2F /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 5C2816CD076396E37646986B /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - 5CE7AE4215797944E1BE1B53 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 5EE7E79790EC7251679ADEAC /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 36423EA0CDE5981423B48AEE /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 59981915FE452EAD0B851E3D /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 8CEF7ABB1ECE3EAA81DD03DB /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 92320B2EDC5B05B44B5CC56F /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - BCEE4E22E342BE2AE575AD2D /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + A0563A63B8D8D2BB44A67D02 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + B80D78B7F0831CA886CFE751 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + E881F22E1ED9CF3723A13CEC /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + F1D90A111512887B7981FE7C /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - A1EB5160E1186002E08A43FB /* Pods_RunnerTests.framework in Frameworks */, + 91BCC9003B49CC98CECBF0EC /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,7 +103,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 63F13B68B978A8E76E978EE7 /* Pods_Runner.framework in Frameworks */, + 4199224406A25A7474E0C79E /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -137,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - FD831DC61C04B5999E3388CF /* Pods */, + 7F3DCCA95ED45892CA7CC729 /* Pods */, ); sourceTree = ""; }; @@ -185,27 +185,27 @@ path = Runner; sourceTree = ""; }; - D73912EC22F37F3D000D13A0 /* Frameworks */ = { + 7F3DCCA95ED45892CA7CC729 /* Pods */ = { isa = PBXGroup; children = ( - 5BAA81C4A6E7098556896E2F /* Pods_Runner.framework */, - 030CB9F0A41B69C812119E7A /* Pods_RunnerTests.framework */, + A0563A63B8D8D2BB44A67D02 /* Pods-Runner.debug.xcconfig */, + 92320B2EDC5B05B44B5CC56F /* Pods-Runner.release.xcconfig */, + 59981915FE452EAD0B851E3D /* Pods-Runner.profile.xcconfig */, + E881F22E1ED9CF3723A13CEC /* Pods-RunnerTests.debug.xcconfig */, + F1D90A111512887B7981FE7C /* Pods-RunnerTests.release.xcconfig */, + 25E382F5DE97D2D47426B59B /* Pods-RunnerTests.profile.xcconfig */, ); - name = Frameworks; + name = Pods; + path = Pods; sourceTree = ""; }; - FD831DC61C04B5999E3388CF /* Pods */ = { + D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - 8CEF7ABB1ECE3EAA81DD03DB /* Pods-Runner.debug.xcconfig */, - 5CE7AE4215797944E1BE1B53 /* Pods-Runner.release.xcconfig */, - 5C2816CD076396E37646986B /* Pods-Runner.profile.xcconfig */, - BCEE4E22E342BE2AE575AD2D /* Pods-RunnerTests.debug.xcconfig */, - 03846B9F44BF1972C83E25FA /* Pods-RunnerTests.release.xcconfig */, - 5EE7E79790EC7251679ADEAC /* Pods-RunnerTests.profile.xcconfig */, + 36423EA0CDE5981423B48AEE /* Pods_Runner.framework */, + B80D78B7F0831CA886CFE751 /* Pods_RunnerTests.framework */, ); - name = Pods; - path = Pods; + name = Frameworks; sourceTree = ""; }; /* End PBXGroup section */ @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 904FB334C3FF8770F4FAA2F4 /* [CP] Check Pods Manifest.lock */, + ABDEED064F2EE34AC0D864AE /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 60646BBAFDF05E49F2FB1BEF /* [CP] Check Pods Manifest.lock */, + B9E6980CAE17BFE6BF2A9555 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 74EBA55F3EAADD88242C66DC /* [CP] Embed Pods Frameworks */, + 031FA17996CC4882D4AF14D9 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,6 +323,23 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ + 031FA17996CC4882D4AF14D9 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -361,7 +378,7 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 60646BBAFDF05E49F2FB1BEF /* [CP] Check Pods Manifest.lock */ = { + ABDEED064F2EE34AC0D864AE /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -376,31 +393,14 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 74EBA55F3EAADD88242C66DC /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; - 904FB334C3FF8770F4FAA2F4 /* [CP] Check Pods Manifest.lock */ = { + B9E6980CAE17BFE6BF2A9555 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -415,7 +415,7 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = BCEE4E22E342BE2AE575AD2D /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = E881F22E1ED9CF3723A13CEC /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 03846B9F44BF1972C83E25FA /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = F1D90A111512887B7981FE7C /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 5EE7E79790EC7251679ADEAC /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 25E382F5DE97D2D47426B59B /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/boring_to_beautiful/step_02/pubspec.yaml b/boring_to_beautiful/step_02/pubspec.yaml index 03677ca8dc..16e4075129 100644 --- a/boring_to_beautiful/step_02/pubspec.yaml +++ b/boring_to_beautiful/step_02/pubspec.yaml @@ -13,23 +13,23 @@ dependencies: adaptive_components: ^0.0.10 adaptive_navigation: ^0.0.10 animations: ^2.0.11 - collection: ^1.18.0 + collection: ^1.19.0 cupertino_icons: ^1.0.8 - desktop_window: ^0.4.0 + desktop_window: ^0.4.1 dynamic_color: ^1.7.0 english_words: ^4.0.0 flutter_bloc: ^8.1.6 freezed_annotation: ^2.4.4 - go_router: ^14.2.7 + go_router: ^14.3.0 material_color_utilities: any universal_platform: ^1.1.0 - url_launcher: ^6.3.0 + url_launcher: ^6.3.1 dev_dependencies: flutter_test: sdk: flutter - build_runner: ^2.4.12 - flutter_lints: ^4.0.0 + build_runner: ^2.4.13 + flutter_lints: ^5.0.0 freezed: ^2.5.7 flutter: diff --git a/boring_to_beautiful/step_02/web/index.html b/boring_to_beautiful/step_02/web/index.html index 0a8bd1ab80..e0a0abbbbf 100644 --- a/boring_to_beautiful/step_02/web/index.html +++ b/boring_to_beautiful/step_02/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/boring_to_beautiful/step_03/android/gradle.properties b/boring_to_beautiful/step_03/android/gradle.properties index 2597170821..f018a61817 100644 --- a/boring_to_beautiful/step_03/android/gradle.properties +++ b/boring_to_beautiful/step_03/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/boring_to_beautiful/step_03/ios/Runner.xcodeproj/project.pbxproj b/boring_to_beautiful/step_03/ios/Runner.xcodeproj/project.pbxproj index 3f17d86d6e..27188f1a29 100644 --- a/boring_to_beautiful/step_03/ios/Runner.xcodeproj/project.pbxproj +++ b/boring_to_beautiful/step_03/ios/Runner.xcodeproj/project.pbxproj @@ -7,15 +7,15 @@ objects = { /* Begin PBXBuildFile section */ - 045D9DC041F68A933791819A /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1A5B8D1F6E2314D54252D714 /* Pods_Runner.framework */; }; 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; + 208962B53868BF2AFCDAD8E7 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 32C8ACDFE0B7706E1D63C8FC /* Pods_Runner.framework */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; - 6340AE5E0688CFEF81E588DB /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8C21E1E613517ACEAEC525DC /* Pods_RunnerTests.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; + A4B9B73FBC1F47ACF4A1C4A0 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F27A303A186C2A0809FCFE71 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,18 +42,19 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 028B86D9E5D62F1DCB40F65B /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 0F5809B4F9F50DCE58AED982 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 1A5B8D1F6E2314D54252D714 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 32C8ACDFE0B7706E1D63C8FC /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 612DF2F856DB475059D0216B /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 44AD5815711D9A48D9B79930 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 4E2630CD278C99A068304BFF /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 7BE5987796DB363652331093 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - 8C21E1E613517ACEAEC525DC /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -61,26 +62,25 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 9E4939688F843C9FB16910FC /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - C9E54593F7142BBA8B70B2AA /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - CB85765AE9FE44396BCEE420 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - EFFA2C9A0A544F6091D35176 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + AAD1FCD230C27D91828B1C7E /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + B521B76D1194933A83E8CA4F /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + F27A303A186C2A0809FCFE71 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 6A191B1B707AA2189ED7AEB7 /* Frameworks */ = { + 97C146EB1CF9000F007C117D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 6340AE5E0688CFEF81E588DB /* Pods_RunnerTests.framework in Frameworks */, + 208962B53868BF2AFCDAD8E7 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 97C146EB1CF9000F007C117D /* Frameworks */ = { + F1EB1A38D8D843224D93C592 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 045D9DC041F68A933791819A /* Pods_Runner.framework in Frameworks */, + A4B9B73FBC1F47ACF4A1C4A0 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -95,25 +95,11 @@ path = RunnerTests; sourceTree = ""; }; - 3FC66A828656DFEF6FEB944E /* Pods */ = { - isa = PBXGroup; - children = ( - C9E54593F7142BBA8B70B2AA /* Pods-Runner.debug.xcconfig */, - CB85765AE9FE44396BCEE420 /* Pods-Runner.release.xcconfig */, - EFFA2C9A0A544F6091D35176 /* Pods-Runner.profile.xcconfig */, - 612DF2F856DB475059D0216B /* Pods-RunnerTests.debug.xcconfig */, - 9E4939688F843C9FB16910FC /* Pods-RunnerTests.release.xcconfig */, - 7BE5987796DB363652331093 /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; - 7C4F6B5D0FD36966BC5B7640 /* Frameworks */ = { + 4F504FD1A7DEAA11371FD812 /* Frameworks */ = { isa = PBXGroup; children = ( - 1A5B8D1F6E2314D54252D714 /* Pods_Runner.framework */, - 8C21E1E613517ACEAEC525DC /* Pods_RunnerTests.framework */, + 32C8ACDFE0B7706E1D63C8FC /* Pods_Runner.framework */, + F27A303A186C2A0809FCFE71 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -136,8 +122,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - 3FC66A828656DFEF6FEB944E /* Pods */, - 7C4F6B5D0FD36966BC5B7640 /* Frameworks */, + EEC228E83A67A67530E39534 /* Pods */, + 4F504FD1A7DEAA11371FD812 /* Frameworks */, ); sourceTree = ""; }; @@ -165,6 +151,20 @@ path = Runner; sourceTree = ""; }; + EEC228E83A67A67530E39534 /* Pods */ = { + isa = PBXGroup; + children = ( + 4E2630CD278C99A068304BFF /* Pods-Runner.debug.xcconfig */, + B521B76D1194933A83E8CA4F /* Pods-Runner.release.xcconfig */, + AAD1FCD230C27D91828B1C7E /* Pods-Runner.profile.xcconfig */, + 028B86D9E5D62F1DCB40F65B /* Pods-RunnerTests.debug.xcconfig */, + 44AD5815711D9A48D9B79930 /* Pods-RunnerTests.release.xcconfig */, + 0F5809B4F9F50DCE58AED982 /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 1B0871ABDE9E880ACA9AF76E /* [CP] Check Pods Manifest.lock */, + 0033FF9EDA59710A08D92356 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 6A191B1B707AA2189ED7AEB7 /* Frameworks */, + F1EB1A38D8D843224D93C592 /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 152278CBCF53589D360B61BB /* [CP] Check Pods Manifest.lock */, + 61E108675EDD4B5F14470A53 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 9964E2B5C7FAD06A79BAAF89 /* [CP] Embed Pods Frameworks */, + 988934BE9015DDB2BD2671E2 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -270,7 +270,7 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 152278CBCF53589D360B61BB /* [CP] Check Pods Manifest.lock */ = { + 0033FF9EDA59710A08D92356 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -285,50 +285,50 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 1B0871ABDE9E880ACA9AF76E /* [CP] Check Pods Manifest.lock */ = { + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); + name = "Thin Binary"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + 61E108675EDD4B5F14470A53 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( - "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "Thin Binary"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; @@ -345,7 +345,7 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - 9964E2B5C7FAD06A79BAAF89 /* [CP] Embed Pods Frameworks */ = { + 988934BE9015DDB2BD2671E2 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 612DF2F856DB475059D0216B /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 028B86D9E5D62F1DCB40F65B /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 9E4939688F843C9FB16910FC /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 44AD5815711D9A48D9B79930 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 7BE5987796DB363652331093 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 0F5809B4F9F50DCE58AED982 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/boring_to_beautiful/step_03/linux/CMakeLists.txt b/boring_to_beautiful/step_03/linux/CMakeLists.txt index 74a8344fa9..0565f6a409 100644 --- a/boring_to_beautiful/step_03/linux/CMakeLists.txt +++ b/boring_to_beautiful/step_03/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/boring_to_beautiful/step_03/linux/runner/CMakeLists.txt b/boring_to_beautiful/step_03/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/boring_to_beautiful/step_03/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/boring_to_beautiful/step_03/linux/main.cc b/boring_to_beautiful/step_03/linux/runner/main.cc similarity index 100% rename from boring_to_beautiful/step_03/linux/main.cc rename to boring_to_beautiful/step_03/linux/runner/main.cc diff --git a/boring_to_beautiful/step_03/linux/my_application.cc b/boring_to_beautiful/step_03/linux/runner/my_application.cc similarity index 93% rename from boring_to_beautiful/step_03/linux/my_application.cc rename to boring_to_beautiful/step_03/linux/runner/my_application.cc index 59e1394236..f93ba9f71c 100644 --- a/boring_to_beautiful/step_03/linux/my_application.cc +++ b/boring_to_beautiful/step_03/linux/runner/my_application.cc @@ -117,6 +117,12 @@ static void my_application_class_init(MyApplicationClass* klass) { static void my_application_init(MyApplication* self) {} MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + return MY_APPLICATION(g_object_new(my_application_get_type(), "application-id", APPLICATION_ID, "flags", G_APPLICATION_NON_UNIQUE, diff --git a/boring_to_beautiful/step_03/linux/my_application.h b/boring_to_beautiful/step_03/linux/runner/my_application.h similarity index 100% rename from boring_to_beautiful/step_03/linux/my_application.h rename to boring_to_beautiful/step_03/linux/runner/my_application.h diff --git a/boring_to_beautiful/step_03/macos/Runner.xcodeproj/project.pbxproj b/boring_to_beautiful/step_03/macos/Runner.xcodeproj/project.pbxproj index 3b2e4ebdbe..a4ba51afb5 100644 --- a/boring_to_beautiful/step_03/macos/Runner.xcodeproj/project.pbxproj +++ b/boring_to_beautiful/step_03/macos/Runner.xcodeproj/project.pbxproj @@ -27,8 +27,8 @@ 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 63F13B68B978A8E76E978EE7 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5BAA81C4A6E7098556896E2F /* Pods_Runner.framework */; }; - A1EB5160E1186002E08A43FB /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 030CB9F0A41B69C812119E7A /* Pods_RunnerTests.framework */; }; + 4199224406A25A7474E0C79E /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 36423EA0CDE5981423B48AEE /* Pods_Runner.framework */; }; + 91BCC9003B49CC98CECBF0EC /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B80D78B7F0831CA886CFE751 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,8 +62,7 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 030CB9F0A41B69C812119E7A /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 03846B9F44BF1972C83E25FA /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 25E382F5DE97D2D47426B59B /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -80,14 +79,15 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 5BAA81C4A6E7098556896E2F /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 5C2816CD076396E37646986B /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - 5CE7AE4215797944E1BE1B53 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 5EE7E79790EC7251679ADEAC /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 36423EA0CDE5981423B48AEE /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 59981915FE452EAD0B851E3D /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 8CEF7ABB1ECE3EAA81DD03DB /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 92320B2EDC5B05B44B5CC56F /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - BCEE4E22E342BE2AE575AD2D /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + A0563A63B8D8D2BB44A67D02 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + B80D78B7F0831CA886CFE751 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + E881F22E1ED9CF3723A13CEC /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + F1D90A111512887B7981FE7C /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - A1EB5160E1186002E08A43FB /* Pods_RunnerTests.framework in Frameworks */, + 91BCC9003B49CC98CECBF0EC /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,7 +103,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 63F13B68B978A8E76E978EE7 /* Pods_Runner.framework in Frameworks */, + 4199224406A25A7474E0C79E /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -137,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - FD831DC61C04B5999E3388CF /* Pods */, + 7F3DCCA95ED45892CA7CC729 /* Pods */, ); sourceTree = ""; }; @@ -185,27 +185,27 @@ path = Runner; sourceTree = ""; }; - D73912EC22F37F3D000D13A0 /* Frameworks */ = { + 7F3DCCA95ED45892CA7CC729 /* Pods */ = { isa = PBXGroup; children = ( - 5BAA81C4A6E7098556896E2F /* Pods_Runner.framework */, - 030CB9F0A41B69C812119E7A /* Pods_RunnerTests.framework */, + A0563A63B8D8D2BB44A67D02 /* Pods-Runner.debug.xcconfig */, + 92320B2EDC5B05B44B5CC56F /* Pods-Runner.release.xcconfig */, + 59981915FE452EAD0B851E3D /* Pods-Runner.profile.xcconfig */, + E881F22E1ED9CF3723A13CEC /* Pods-RunnerTests.debug.xcconfig */, + F1D90A111512887B7981FE7C /* Pods-RunnerTests.release.xcconfig */, + 25E382F5DE97D2D47426B59B /* Pods-RunnerTests.profile.xcconfig */, ); - name = Frameworks; + name = Pods; + path = Pods; sourceTree = ""; }; - FD831DC61C04B5999E3388CF /* Pods */ = { + D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - 8CEF7ABB1ECE3EAA81DD03DB /* Pods-Runner.debug.xcconfig */, - 5CE7AE4215797944E1BE1B53 /* Pods-Runner.release.xcconfig */, - 5C2816CD076396E37646986B /* Pods-Runner.profile.xcconfig */, - BCEE4E22E342BE2AE575AD2D /* Pods-RunnerTests.debug.xcconfig */, - 03846B9F44BF1972C83E25FA /* Pods-RunnerTests.release.xcconfig */, - 5EE7E79790EC7251679ADEAC /* Pods-RunnerTests.profile.xcconfig */, + 36423EA0CDE5981423B48AEE /* Pods_Runner.framework */, + B80D78B7F0831CA886CFE751 /* Pods_RunnerTests.framework */, ); - name = Pods; - path = Pods; + name = Frameworks; sourceTree = ""; }; /* End PBXGroup section */ @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 904FB334C3FF8770F4FAA2F4 /* [CP] Check Pods Manifest.lock */, + ABDEED064F2EE34AC0D864AE /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 60646BBAFDF05E49F2FB1BEF /* [CP] Check Pods Manifest.lock */, + B9E6980CAE17BFE6BF2A9555 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 74EBA55F3EAADD88242C66DC /* [CP] Embed Pods Frameworks */, + 031FA17996CC4882D4AF14D9 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,6 +323,23 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ + 031FA17996CC4882D4AF14D9 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -361,7 +378,7 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 60646BBAFDF05E49F2FB1BEF /* [CP] Check Pods Manifest.lock */ = { + ABDEED064F2EE34AC0D864AE /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -376,31 +393,14 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 74EBA55F3EAADD88242C66DC /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; - 904FB334C3FF8770F4FAA2F4 /* [CP] Check Pods Manifest.lock */ = { + B9E6980CAE17BFE6BF2A9555 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -415,7 +415,7 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = BCEE4E22E342BE2AE575AD2D /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = E881F22E1ED9CF3723A13CEC /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 03846B9F44BF1972C83E25FA /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = F1D90A111512887B7981FE7C /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 5EE7E79790EC7251679ADEAC /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 25E382F5DE97D2D47426B59B /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/boring_to_beautiful/step_03/pubspec.yaml b/boring_to_beautiful/step_03/pubspec.yaml index e41af5ebf4..6452298e93 100644 --- a/boring_to_beautiful/step_03/pubspec.yaml +++ b/boring_to_beautiful/step_03/pubspec.yaml @@ -13,24 +13,24 @@ dependencies: adaptive_components: ^0.0.10 adaptive_navigation: ^0.0.10 animations: ^2.0.11 - collection: ^1.18.0 + collection: ^1.19.0 cupertino_icons: ^1.0.8 - desktop_window: ^0.4.0 + desktop_window: ^0.4.1 dynamic_color: ^1.7.0 english_words: ^4.0.0 flutter_bloc: ^8.1.6 freezed_annotation: ^2.4.4 - go_router: ^14.2.7 + go_router: ^14.3.0 material_color_utilities: any universal_platform: ^1.1.0 - url_launcher: ^6.3.0 + url_launcher: ^6.3.1 google_fonts: ^6.2.1 dev_dependencies: flutter_test: sdk: flutter - build_runner: ^2.4.12 - flutter_lints: ^4.0.0 + build_runner: ^2.4.13 + flutter_lints: ^5.0.0 freezed: ^2.5.7 flutter: diff --git a/boring_to_beautiful/step_03/web/index.html b/boring_to_beautiful/step_03/web/index.html index 0a8bd1ab80..e0a0abbbbf 100644 --- a/boring_to_beautiful/step_03/web/index.html +++ b/boring_to_beautiful/step_03/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/boring_to_beautiful/step_04/android/gradle.properties b/boring_to_beautiful/step_04/android/gradle.properties index 2597170821..f018a61817 100644 --- a/boring_to_beautiful/step_04/android/gradle.properties +++ b/boring_to_beautiful/step_04/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/boring_to_beautiful/step_04/ios/Runner.xcodeproj/project.pbxproj b/boring_to_beautiful/step_04/ios/Runner.xcodeproj/project.pbxproj index 3f17d86d6e..27188f1a29 100644 --- a/boring_to_beautiful/step_04/ios/Runner.xcodeproj/project.pbxproj +++ b/boring_to_beautiful/step_04/ios/Runner.xcodeproj/project.pbxproj @@ -7,15 +7,15 @@ objects = { /* Begin PBXBuildFile section */ - 045D9DC041F68A933791819A /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1A5B8D1F6E2314D54252D714 /* Pods_Runner.framework */; }; 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; + 208962B53868BF2AFCDAD8E7 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 32C8ACDFE0B7706E1D63C8FC /* Pods_Runner.framework */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; - 6340AE5E0688CFEF81E588DB /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8C21E1E613517ACEAEC525DC /* Pods_RunnerTests.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; + A4B9B73FBC1F47ACF4A1C4A0 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F27A303A186C2A0809FCFE71 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,18 +42,19 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 028B86D9E5D62F1DCB40F65B /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 0F5809B4F9F50DCE58AED982 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 1A5B8D1F6E2314D54252D714 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 32C8ACDFE0B7706E1D63C8FC /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 612DF2F856DB475059D0216B /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 44AD5815711D9A48D9B79930 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 4E2630CD278C99A068304BFF /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 7BE5987796DB363652331093 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - 8C21E1E613517ACEAEC525DC /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -61,26 +62,25 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 9E4939688F843C9FB16910FC /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - C9E54593F7142BBA8B70B2AA /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - CB85765AE9FE44396BCEE420 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - EFFA2C9A0A544F6091D35176 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + AAD1FCD230C27D91828B1C7E /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + B521B76D1194933A83E8CA4F /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + F27A303A186C2A0809FCFE71 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 6A191B1B707AA2189ED7AEB7 /* Frameworks */ = { + 97C146EB1CF9000F007C117D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 6340AE5E0688CFEF81E588DB /* Pods_RunnerTests.framework in Frameworks */, + 208962B53868BF2AFCDAD8E7 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 97C146EB1CF9000F007C117D /* Frameworks */ = { + F1EB1A38D8D843224D93C592 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 045D9DC041F68A933791819A /* Pods_Runner.framework in Frameworks */, + A4B9B73FBC1F47ACF4A1C4A0 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -95,25 +95,11 @@ path = RunnerTests; sourceTree = ""; }; - 3FC66A828656DFEF6FEB944E /* Pods */ = { - isa = PBXGroup; - children = ( - C9E54593F7142BBA8B70B2AA /* Pods-Runner.debug.xcconfig */, - CB85765AE9FE44396BCEE420 /* Pods-Runner.release.xcconfig */, - EFFA2C9A0A544F6091D35176 /* Pods-Runner.profile.xcconfig */, - 612DF2F856DB475059D0216B /* Pods-RunnerTests.debug.xcconfig */, - 9E4939688F843C9FB16910FC /* Pods-RunnerTests.release.xcconfig */, - 7BE5987796DB363652331093 /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; - 7C4F6B5D0FD36966BC5B7640 /* Frameworks */ = { + 4F504FD1A7DEAA11371FD812 /* Frameworks */ = { isa = PBXGroup; children = ( - 1A5B8D1F6E2314D54252D714 /* Pods_Runner.framework */, - 8C21E1E613517ACEAEC525DC /* Pods_RunnerTests.framework */, + 32C8ACDFE0B7706E1D63C8FC /* Pods_Runner.framework */, + F27A303A186C2A0809FCFE71 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -136,8 +122,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - 3FC66A828656DFEF6FEB944E /* Pods */, - 7C4F6B5D0FD36966BC5B7640 /* Frameworks */, + EEC228E83A67A67530E39534 /* Pods */, + 4F504FD1A7DEAA11371FD812 /* Frameworks */, ); sourceTree = ""; }; @@ -165,6 +151,20 @@ path = Runner; sourceTree = ""; }; + EEC228E83A67A67530E39534 /* Pods */ = { + isa = PBXGroup; + children = ( + 4E2630CD278C99A068304BFF /* Pods-Runner.debug.xcconfig */, + B521B76D1194933A83E8CA4F /* Pods-Runner.release.xcconfig */, + AAD1FCD230C27D91828B1C7E /* Pods-Runner.profile.xcconfig */, + 028B86D9E5D62F1DCB40F65B /* Pods-RunnerTests.debug.xcconfig */, + 44AD5815711D9A48D9B79930 /* Pods-RunnerTests.release.xcconfig */, + 0F5809B4F9F50DCE58AED982 /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 1B0871ABDE9E880ACA9AF76E /* [CP] Check Pods Manifest.lock */, + 0033FF9EDA59710A08D92356 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 6A191B1B707AA2189ED7AEB7 /* Frameworks */, + F1EB1A38D8D843224D93C592 /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 152278CBCF53589D360B61BB /* [CP] Check Pods Manifest.lock */, + 61E108675EDD4B5F14470A53 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 9964E2B5C7FAD06A79BAAF89 /* [CP] Embed Pods Frameworks */, + 988934BE9015DDB2BD2671E2 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -270,7 +270,7 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 152278CBCF53589D360B61BB /* [CP] Check Pods Manifest.lock */ = { + 0033FF9EDA59710A08D92356 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -285,50 +285,50 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 1B0871ABDE9E880ACA9AF76E /* [CP] Check Pods Manifest.lock */ = { + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); + name = "Thin Binary"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + 61E108675EDD4B5F14470A53 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( - "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "Thin Binary"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; @@ -345,7 +345,7 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - 9964E2B5C7FAD06A79BAAF89 /* [CP] Embed Pods Frameworks */ = { + 988934BE9015DDB2BD2671E2 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 612DF2F856DB475059D0216B /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 028B86D9E5D62F1DCB40F65B /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 9E4939688F843C9FB16910FC /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 44AD5815711D9A48D9B79930 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 7BE5987796DB363652331093 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 0F5809B4F9F50DCE58AED982 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/boring_to_beautiful/step_04/linux/CMakeLists.txt b/boring_to_beautiful/step_04/linux/CMakeLists.txt index 74a8344fa9..0565f6a409 100644 --- a/boring_to_beautiful/step_04/linux/CMakeLists.txt +++ b/boring_to_beautiful/step_04/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/boring_to_beautiful/step_04/linux/my_application.cc b/boring_to_beautiful/step_04/linux/my_application.cc deleted file mode 100644 index 59e1394236..0000000000 --- a/boring_to_beautiful/step_04/linux/my_application.cc +++ /dev/null @@ -1,124 +0,0 @@ -#include "my_application.h" - -#include -#ifdef GDK_WINDOWING_X11 -#include -#endif - -#include "flutter/generated_plugin_registrant.h" - -struct _MyApplication { - GtkApplication parent_instance; - char** dart_entrypoint_arguments; -}; - -G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) - -// Implements GApplication::activate. -static void my_application_activate(GApplication* application) { - MyApplication* self = MY_APPLICATION(application); - GtkWindow* window = - GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); - - // Use a header bar when running in GNOME as this is the common style used - // by applications and is the setup most users will be using (e.g. Ubuntu - // desktop). - // If running on X and not using GNOME then just use a traditional title bar - // in case the window manager does more exotic layout, e.g. tiling. - // If running on Wayland assume the header bar will work (may need changing - // if future cases occur). - gboolean use_header_bar = TRUE; -#ifdef GDK_WINDOWING_X11 - GdkScreen* screen = gtk_window_get_screen(window); - if (GDK_IS_X11_SCREEN(screen)) { - const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); - if (g_strcmp0(wm_name, "GNOME Shell") != 0) { - use_header_bar = FALSE; - } - } -#endif - if (use_header_bar) { - GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); - gtk_widget_show(GTK_WIDGET(header_bar)); - gtk_header_bar_set_title(header_bar, "myartist"); - gtk_header_bar_set_show_close_button(header_bar, TRUE); - gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); - } else { - gtk_window_set_title(window, "myartist"); - } - - gtk_window_set_default_size(window, 1280, 720); - gtk_widget_show(GTK_WIDGET(window)); - - g_autoptr(FlDartProject) project = fl_dart_project_new(); - fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); - - FlView* view = fl_view_new(project); - gtk_widget_show(GTK_WIDGET(view)); - gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); - - fl_register_plugins(FL_PLUGIN_REGISTRY(view)); - - gtk_widget_grab_focus(GTK_WIDGET(view)); -} - -// Implements GApplication::local_command_line. -static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { - MyApplication* self = MY_APPLICATION(application); - // Strip out the first argument as it is the binary name. - self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); - - g_autoptr(GError) error = nullptr; - if (!g_application_register(application, nullptr, &error)) { - g_warning("Failed to register: %s", error->message); - *exit_status = 1; - return TRUE; - } - - g_application_activate(application); - *exit_status = 0; - - return TRUE; -} - -// Implements GApplication::startup. -static void my_application_startup(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application startup. - - G_APPLICATION_CLASS(my_application_parent_class)->startup(application); -} - -// Implements GApplication::shutdown. -static void my_application_shutdown(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application shutdown. - - G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); -} - -// Implements GObject::dispose. -static void my_application_dispose(GObject* object) { - MyApplication* self = MY_APPLICATION(object); - g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); - G_OBJECT_CLASS(my_application_parent_class)->dispose(object); -} - -static void my_application_class_init(MyApplicationClass* klass) { - G_APPLICATION_CLASS(klass)->activate = my_application_activate; - G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; - G_APPLICATION_CLASS(klass)->startup = my_application_startup; - G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; - G_OBJECT_CLASS(klass)->dispose = my_application_dispose; -} - -static void my_application_init(MyApplication* self) {} - -MyApplication* my_application_new() { - return MY_APPLICATION(g_object_new(my_application_get_type(), - "application-id", APPLICATION_ID, - "flags", G_APPLICATION_NON_UNIQUE, - nullptr)); -} diff --git a/boring_to_beautiful/step_04/linux/runner/CMakeLists.txt b/boring_to_beautiful/step_04/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/boring_to_beautiful/step_04/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/boring_to_beautiful/step_04/linux/main.cc b/boring_to_beautiful/step_04/linux/runner/main.cc similarity index 100% rename from boring_to_beautiful/step_04/linux/main.cc rename to boring_to_beautiful/step_04/linux/runner/main.cc diff --git a/boring_to_beautiful/step_04/linux/runner/my_application.cc b/boring_to_beautiful/step_04/linux/runner/my_application.cc new file mode 100644 index 0000000000..f93ba9f71c --- /dev/null +++ b/boring_to_beautiful/step_04/linux/runner/my_application.cc @@ -0,0 +1,130 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "myartist"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "myartist"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/boring_to_beautiful/step_04/linux/my_application.h b/boring_to_beautiful/step_04/linux/runner/my_application.h similarity index 100% rename from boring_to_beautiful/step_04/linux/my_application.h rename to boring_to_beautiful/step_04/linux/runner/my_application.h diff --git a/boring_to_beautiful/step_04/macos/Runner.xcodeproj/project.pbxproj b/boring_to_beautiful/step_04/macos/Runner.xcodeproj/project.pbxproj index 3b2e4ebdbe..a4ba51afb5 100644 --- a/boring_to_beautiful/step_04/macos/Runner.xcodeproj/project.pbxproj +++ b/boring_to_beautiful/step_04/macos/Runner.xcodeproj/project.pbxproj @@ -27,8 +27,8 @@ 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 63F13B68B978A8E76E978EE7 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5BAA81C4A6E7098556896E2F /* Pods_Runner.framework */; }; - A1EB5160E1186002E08A43FB /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 030CB9F0A41B69C812119E7A /* Pods_RunnerTests.framework */; }; + 4199224406A25A7474E0C79E /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 36423EA0CDE5981423B48AEE /* Pods_Runner.framework */; }; + 91BCC9003B49CC98CECBF0EC /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B80D78B7F0831CA886CFE751 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,8 +62,7 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 030CB9F0A41B69C812119E7A /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 03846B9F44BF1972C83E25FA /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 25E382F5DE97D2D47426B59B /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -80,14 +79,15 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 5BAA81C4A6E7098556896E2F /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 5C2816CD076396E37646986B /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - 5CE7AE4215797944E1BE1B53 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 5EE7E79790EC7251679ADEAC /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 36423EA0CDE5981423B48AEE /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 59981915FE452EAD0B851E3D /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 8CEF7ABB1ECE3EAA81DD03DB /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 92320B2EDC5B05B44B5CC56F /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - BCEE4E22E342BE2AE575AD2D /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + A0563A63B8D8D2BB44A67D02 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + B80D78B7F0831CA886CFE751 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + E881F22E1ED9CF3723A13CEC /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + F1D90A111512887B7981FE7C /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - A1EB5160E1186002E08A43FB /* Pods_RunnerTests.framework in Frameworks */, + 91BCC9003B49CC98CECBF0EC /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,7 +103,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 63F13B68B978A8E76E978EE7 /* Pods_Runner.framework in Frameworks */, + 4199224406A25A7474E0C79E /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -137,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - FD831DC61C04B5999E3388CF /* Pods */, + 7F3DCCA95ED45892CA7CC729 /* Pods */, ); sourceTree = ""; }; @@ -185,27 +185,27 @@ path = Runner; sourceTree = ""; }; - D73912EC22F37F3D000D13A0 /* Frameworks */ = { + 7F3DCCA95ED45892CA7CC729 /* Pods */ = { isa = PBXGroup; children = ( - 5BAA81C4A6E7098556896E2F /* Pods_Runner.framework */, - 030CB9F0A41B69C812119E7A /* Pods_RunnerTests.framework */, + A0563A63B8D8D2BB44A67D02 /* Pods-Runner.debug.xcconfig */, + 92320B2EDC5B05B44B5CC56F /* Pods-Runner.release.xcconfig */, + 59981915FE452EAD0B851E3D /* Pods-Runner.profile.xcconfig */, + E881F22E1ED9CF3723A13CEC /* Pods-RunnerTests.debug.xcconfig */, + F1D90A111512887B7981FE7C /* Pods-RunnerTests.release.xcconfig */, + 25E382F5DE97D2D47426B59B /* Pods-RunnerTests.profile.xcconfig */, ); - name = Frameworks; + name = Pods; + path = Pods; sourceTree = ""; }; - FD831DC61C04B5999E3388CF /* Pods */ = { + D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - 8CEF7ABB1ECE3EAA81DD03DB /* Pods-Runner.debug.xcconfig */, - 5CE7AE4215797944E1BE1B53 /* Pods-Runner.release.xcconfig */, - 5C2816CD076396E37646986B /* Pods-Runner.profile.xcconfig */, - BCEE4E22E342BE2AE575AD2D /* Pods-RunnerTests.debug.xcconfig */, - 03846B9F44BF1972C83E25FA /* Pods-RunnerTests.release.xcconfig */, - 5EE7E79790EC7251679ADEAC /* Pods-RunnerTests.profile.xcconfig */, + 36423EA0CDE5981423B48AEE /* Pods_Runner.framework */, + B80D78B7F0831CA886CFE751 /* Pods_RunnerTests.framework */, ); - name = Pods; - path = Pods; + name = Frameworks; sourceTree = ""; }; /* End PBXGroup section */ @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 904FB334C3FF8770F4FAA2F4 /* [CP] Check Pods Manifest.lock */, + ABDEED064F2EE34AC0D864AE /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 60646BBAFDF05E49F2FB1BEF /* [CP] Check Pods Manifest.lock */, + B9E6980CAE17BFE6BF2A9555 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 74EBA55F3EAADD88242C66DC /* [CP] Embed Pods Frameworks */, + 031FA17996CC4882D4AF14D9 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,6 +323,23 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ + 031FA17996CC4882D4AF14D9 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -361,7 +378,7 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 60646BBAFDF05E49F2FB1BEF /* [CP] Check Pods Manifest.lock */ = { + ABDEED064F2EE34AC0D864AE /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -376,31 +393,14 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 74EBA55F3EAADD88242C66DC /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; - 904FB334C3FF8770F4FAA2F4 /* [CP] Check Pods Manifest.lock */ = { + B9E6980CAE17BFE6BF2A9555 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -415,7 +415,7 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = BCEE4E22E342BE2AE575AD2D /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = E881F22E1ED9CF3723A13CEC /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 03846B9F44BF1972C83E25FA /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = F1D90A111512887B7981FE7C /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 5EE7E79790EC7251679ADEAC /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 25E382F5DE97D2D47426B59B /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/boring_to_beautiful/step_04/pubspec.yaml b/boring_to_beautiful/step_04/pubspec.yaml index e41af5ebf4..6452298e93 100644 --- a/boring_to_beautiful/step_04/pubspec.yaml +++ b/boring_to_beautiful/step_04/pubspec.yaml @@ -13,24 +13,24 @@ dependencies: adaptive_components: ^0.0.10 adaptive_navigation: ^0.0.10 animations: ^2.0.11 - collection: ^1.18.0 + collection: ^1.19.0 cupertino_icons: ^1.0.8 - desktop_window: ^0.4.0 + desktop_window: ^0.4.1 dynamic_color: ^1.7.0 english_words: ^4.0.0 flutter_bloc: ^8.1.6 freezed_annotation: ^2.4.4 - go_router: ^14.2.7 + go_router: ^14.3.0 material_color_utilities: any universal_platform: ^1.1.0 - url_launcher: ^6.3.0 + url_launcher: ^6.3.1 google_fonts: ^6.2.1 dev_dependencies: flutter_test: sdk: flutter - build_runner: ^2.4.12 - flutter_lints: ^4.0.0 + build_runner: ^2.4.13 + flutter_lints: ^5.0.0 freezed: ^2.5.7 flutter: diff --git a/boring_to_beautiful/step_04/web/index.html b/boring_to_beautiful/step_04/web/index.html index 0a8bd1ab80..e0a0abbbbf 100644 --- a/boring_to_beautiful/step_04/web/index.html +++ b/boring_to_beautiful/step_04/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/boring_to_beautiful/step_05/android/gradle.properties b/boring_to_beautiful/step_05/android/gradle.properties index 2597170821..f018a61817 100644 --- a/boring_to_beautiful/step_05/android/gradle.properties +++ b/boring_to_beautiful/step_05/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/boring_to_beautiful/step_05/ios/Runner.xcodeproj/project.pbxproj b/boring_to_beautiful/step_05/ios/Runner.xcodeproj/project.pbxproj index 3f17d86d6e..27188f1a29 100644 --- a/boring_to_beautiful/step_05/ios/Runner.xcodeproj/project.pbxproj +++ b/boring_to_beautiful/step_05/ios/Runner.xcodeproj/project.pbxproj @@ -7,15 +7,15 @@ objects = { /* Begin PBXBuildFile section */ - 045D9DC041F68A933791819A /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1A5B8D1F6E2314D54252D714 /* Pods_Runner.framework */; }; 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; + 208962B53868BF2AFCDAD8E7 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 32C8ACDFE0B7706E1D63C8FC /* Pods_Runner.framework */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; - 6340AE5E0688CFEF81E588DB /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8C21E1E613517ACEAEC525DC /* Pods_RunnerTests.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; + A4B9B73FBC1F47ACF4A1C4A0 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F27A303A186C2A0809FCFE71 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,18 +42,19 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 028B86D9E5D62F1DCB40F65B /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 0F5809B4F9F50DCE58AED982 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 1A5B8D1F6E2314D54252D714 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 32C8ACDFE0B7706E1D63C8FC /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 612DF2F856DB475059D0216B /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 44AD5815711D9A48D9B79930 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 4E2630CD278C99A068304BFF /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 7BE5987796DB363652331093 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - 8C21E1E613517ACEAEC525DC /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -61,26 +62,25 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 9E4939688F843C9FB16910FC /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - C9E54593F7142BBA8B70B2AA /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - CB85765AE9FE44396BCEE420 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - EFFA2C9A0A544F6091D35176 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + AAD1FCD230C27D91828B1C7E /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + B521B76D1194933A83E8CA4F /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + F27A303A186C2A0809FCFE71 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 6A191B1B707AA2189ED7AEB7 /* Frameworks */ = { + 97C146EB1CF9000F007C117D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 6340AE5E0688CFEF81E588DB /* Pods_RunnerTests.framework in Frameworks */, + 208962B53868BF2AFCDAD8E7 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 97C146EB1CF9000F007C117D /* Frameworks */ = { + F1EB1A38D8D843224D93C592 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 045D9DC041F68A933791819A /* Pods_Runner.framework in Frameworks */, + A4B9B73FBC1F47ACF4A1C4A0 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -95,25 +95,11 @@ path = RunnerTests; sourceTree = ""; }; - 3FC66A828656DFEF6FEB944E /* Pods */ = { - isa = PBXGroup; - children = ( - C9E54593F7142BBA8B70B2AA /* Pods-Runner.debug.xcconfig */, - CB85765AE9FE44396BCEE420 /* Pods-Runner.release.xcconfig */, - EFFA2C9A0A544F6091D35176 /* Pods-Runner.profile.xcconfig */, - 612DF2F856DB475059D0216B /* Pods-RunnerTests.debug.xcconfig */, - 9E4939688F843C9FB16910FC /* Pods-RunnerTests.release.xcconfig */, - 7BE5987796DB363652331093 /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; - 7C4F6B5D0FD36966BC5B7640 /* Frameworks */ = { + 4F504FD1A7DEAA11371FD812 /* Frameworks */ = { isa = PBXGroup; children = ( - 1A5B8D1F6E2314D54252D714 /* Pods_Runner.framework */, - 8C21E1E613517ACEAEC525DC /* Pods_RunnerTests.framework */, + 32C8ACDFE0B7706E1D63C8FC /* Pods_Runner.framework */, + F27A303A186C2A0809FCFE71 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -136,8 +122,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - 3FC66A828656DFEF6FEB944E /* Pods */, - 7C4F6B5D0FD36966BC5B7640 /* Frameworks */, + EEC228E83A67A67530E39534 /* Pods */, + 4F504FD1A7DEAA11371FD812 /* Frameworks */, ); sourceTree = ""; }; @@ -165,6 +151,20 @@ path = Runner; sourceTree = ""; }; + EEC228E83A67A67530E39534 /* Pods */ = { + isa = PBXGroup; + children = ( + 4E2630CD278C99A068304BFF /* Pods-Runner.debug.xcconfig */, + B521B76D1194933A83E8CA4F /* Pods-Runner.release.xcconfig */, + AAD1FCD230C27D91828B1C7E /* Pods-Runner.profile.xcconfig */, + 028B86D9E5D62F1DCB40F65B /* Pods-RunnerTests.debug.xcconfig */, + 44AD5815711D9A48D9B79930 /* Pods-RunnerTests.release.xcconfig */, + 0F5809B4F9F50DCE58AED982 /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 1B0871ABDE9E880ACA9AF76E /* [CP] Check Pods Manifest.lock */, + 0033FF9EDA59710A08D92356 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 6A191B1B707AA2189ED7AEB7 /* Frameworks */, + F1EB1A38D8D843224D93C592 /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 152278CBCF53589D360B61BB /* [CP] Check Pods Manifest.lock */, + 61E108675EDD4B5F14470A53 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 9964E2B5C7FAD06A79BAAF89 /* [CP] Embed Pods Frameworks */, + 988934BE9015DDB2BD2671E2 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -270,7 +270,7 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 152278CBCF53589D360B61BB /* [CP] Check Pods Manifest.lock */ = { + 0033FF9EDA59710A08D92356 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -285,50 +285,50 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 1B0871ABDE9E880ACA9AF76E /* [CP] Check Pods Manifest.lock */ = { + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); + name = "Thin Binary"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + 61E108675EDD4B5F14470A53 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( - "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "Thin Binary"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; @@ -345,7 +345,7 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - 9964E2B5C7FAD06A79BAAF89 /* [CP] Embed Pods Frameworks */ = { + 988934BE9015DDB2BD2671E2 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 612DF2F856DB475059D0216B /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 028B86D9E5D62F1DCB40F65B /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 9E4939688F843C9FB16910FC /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 44AD5815711D9A48D9B79930 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 7BE5987796DB363652331093 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 0F5809B4F9F50DCE58AED982 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/boring_to_beautiful/step_05/linux/CMakeLists.txt b/boring_to_beautiful/step_05/linux/CMakeLists.txt index 74a8344fa9..0565f6a409 100644 --- a/boring_to_beautiful/step_05/linux/CMakeLists.txt +++ b/boring_to_beautiful/step_05/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/boring_to_beautiful/step_05/linux/my_application.cc b/boring_to_beautiful/step_05/linux/my_application.cc deleted file mode 100644 index 59e1394236..0000000000 --- a/boring_to_beautiful/step_05/linux/my_application.cc +++ /dev/null @@ -1,124 +0,0 @@ -#include "my_application.h" - -#include -#ifdef GDK_WINDOWING_X11 -#include -#endif - -#include "flutter/generated_plugin_registrant.h" - -struct _MyApplication { - GtkApplication parent_instance; - char** dart_entrypoint_arguments; -}; - -G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) - -// Implements GApplication::activate. -static void my_application_activate(GApplication* application) { - MyApplication* self = MY_APPLICATION(application); - GtkWindow* window = - GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); - - // Use a header bar when running in GNOME as this is the common style used - // by applications and is the setup most users will be using (e.g. Ubuntu - // desktop). - // If running on X and not using GNOME then just use a traditional title bar - // in case the window manager does more exotic layout, e.g. tiling. - // If running on Wayland assume the header bar will work (may need changing - // if future cases occur). - gboolean use_header_bar = TRUE; -#ifdef GDK_WINDOWING_X11 - GdkScreen* screen = gtk_window_get_screen(window); - if (GDK_IS_X11_SCREEN(screen)) { - const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); - if (g_strcmp0(wm_name, "GNOME Shell") != 0) { - use_header_bar = FALSE; - } - } -#endif - if (use_header_bar) { - GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); - gtk_widget_show(GTK_WIDGET(header_bar)); - gtk_header_bar_set_title(header_bar, "myartist"); - gtk_header_bar_set_show_close_button(header_bar, TRUE); - gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); - } else { - gtk_window_set_title(window, "myartist"); - } - - gtk_window_set_default_size(window, 1280, 720); - gtk_widget_show(GTK_WIDGET(window)); - - g_autoptr(FlDartProject) project = fl_dart_project_new(); - fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); - - FlView* view = fl_view_new(project); - gtk_widget_show(GTK_WIDGET(view)); - gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); - - fl_register_plugins(FL_PLUGIN_REGISTRY(view)); - - gtk_widget_grab_focus(GTK_WIDGET(view)); -} - -// Implements GApplication::local_command_line. -static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { - MyApplication* self = MY_APPLICATION(application); - // Strip out the first argument as it is the binary name. - self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); - - g_autoptr(GError) error = nullptr; - if (!g_application_register(application, nullptr, &error)) { - g_warning("Failed to register: %s", error->message); - *exit_status = 1; - return TRUE; - } - - g_application_activate(application); - *exit_status = 0; - - return TRUE; -} - -// Implements GApplication::startup. -static void my_application_startup(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application startup. - - G_APPLICATION_CLASS(my_application_parent_class)->startup(application); -} - -// Implements GApplication::shutdown. -static void my_application_shutdown(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application shutdown. - - G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); -} - -// Implements GObject::dispose. -static void my_application_dispose(GObject* object) { - MyApplication* self = MY_APPLICATION(object); - g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); - G_OBJECT_CLASS(my_application_parent_class)->dispose(object); -} - -static void my_application_class_init(MyApplicationClass* klass) { - G_APPLICATION_CLASS(klass)->activate = my_application_activate; - G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; - G_APPLICATION_CLASS(klass)->startup = my_application_startup; - G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; - G_OBJECT_CLASS(klass)->dispose = my_application_dispose; -} - -static void my_application_init(MyApplication* self) {} - -MyApplication* my_application_new() { - return MY_APPLICATION(g_object_new(my_application_get_type(), - "application-id", APPLICATION_ID, - "flags", G_APPLICATION_NON_UNIQUE, - nullptr)); -} diff --git a/boring_to_beautiful/step_05/linux/runner/CMakeLists.txt b/boring_to_beautiful/step_05/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/boring_to_beautiful/step_05/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/boring_to_beautiful/step_05/linux/main.cc b/boring_to_beautiful/step_05/linux/runner/main.cc similarity index 100% rename from boring_to_beautiful/step_05/linux/main.cc rename to boring_to_beautiful/step_05/linux/runner/main.cc diff --git a/boring_to_beautiful/step_05/linux/runner/my_application.cc b/boring_to_beautiful/step_05/linux/runner/my_application.cc new file mode 100644 index 0000000000..f93ba9f71c --- /dev/null +++ b/boring_to_beautiful/step_05/linux/runner/my_application.cc @@ -0,0 +1,130 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "myartist"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "myartist"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/boring_to_beautiful/step_05/linux/my_application.h b/boring_to_beautiful/step_05/linux/runner/my_application.h similarity index 100% rename from boring_to_beautiful/step_05/linux/my_application.h rename to boring_to_beautiful/step_05/linux/runner/my_application.h diff --git a/boring_to_beautiful/step_05/macos/Runner.xcodeproj/project.pbxproj b/boring_to_beautiful/step_05/macos/Runner.xcodeproj/project.pbxproj index 3b2e4ebdbe..a4ba51afb5 100644 --- a/boring_to_beautiful/step_05/macos/Runner.xcodeproj/project.pbxproj +++ b/boring_to_beautiful/step_05/macos/Runner.xcodeproj/project.pbxproj @@ -27,8 +27,8 @@ 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 63F13B68B978A8E76E978EE7 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5BAA81C4A6E7098556896E2F /* Pods_Runner.framework */; }; - A1EB5160E1186002E08A43FB /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 030CB9F0A41B69C812119E7A /* Pods_RunnerTests.framework */; }; + 4199224406A25A7474E0C79E /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 36423EA0CDE5981423B48AEE /* Pods_Runner.framework */; }; + 91BCC9003B49CC98CECBF0EC /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B80D78B7F0831CA886CFE751 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,8 +62,7 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 030CB9F0A41B69C812119E7A /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 03846B9F44BF1972C83E25FA /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 25E382F5DE97D2D47426B59B /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -80,14 +79,15 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 5BAA81C4A6E7098556896E2F /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 5C2816CD076396E37646986B /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - 5CE7AE4215797944E1BE1B53 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 5EE7E79790EC7251679ADEAC /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 36423EA0CDE5981423B48AEE /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 59981915FE452EAD0B851E3D /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 8CEF7ABB1ECE3EAA81DD03DB /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 92320B2EDC5B05B44B5CC56F /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - BCEE4E22E342BE2AE575AD2D /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + A0563A63B8D8D2BB44A67D02 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + B80D78B7F0831CA886CFE751 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + E881F22E1ED9CF3723A13CEC /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + F1D90A111512887B7981FE7C /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - A1EB5160E1186002E08A43FB /* Pods_RunnerTests.framework in Frameworks */, + 91BCC9003B49CC98CECBF0EC /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,7 +103,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 63F13B68B978A8E76E978EE7 /* Pods_Runner.framework in Frameworks */, + 4199224406A25A7474E0C79E /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -137,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - FD831DC61C04B5999E3388CF /* Pods */, + 7F3DCCA95ED45892CA7CC729 /* Pods */, ); sourceTree = ""; }; @@ -185,27 +185,27 @@ path = Runner; sourceTree = ""; }; - D73912EC22F37F3D000D13A0 /* Frameworks */ = { + 7F3DCCA95ED45892CA7CC729 /* Pods */ = { isa = PBXGroup; children = ( - 5BAA81C4A6E7098556896E2F /* Pods_Runner.framework */, - 030CB9F0A41B69C812119E7A /* Pods_RunnerTests.framework */, + A0563A63B8D8D2BB44A67D02 /* Pods-Runner.debug.xcconfig */, + 92320B2EDC5B05B44B5CC56F /* Pods-Runner.release.xcconfig */, + 59981915FE452EAD0B851E3D /* Pods-Runner.profile.xcconfig */, + E881F22E1ED9CF3723A13CEC /* Pods-RunnerTests.debug.xcconfig */, + F1D90A111512887B7981FE7C /* Pods-RunnerTests.release.xcconfig */, + 25E382F5DE97D2D47426B59B /* Pods-RunnerTests.profile.xcconfig */, ); - name = Frameworks; + name = Pods; + path = Pods; sourceTree = ""; }; - FD831DC61C04B5999E3388CF /* Pods */ = { + D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - 8CEF7ABB1ECE3EAA81DD03DB /* Pods-Runner.debug.xcconfig */, - 5CE7AE4215797944E1BE1B53 /* Pods-Runner.release.xcconfig */, - 5C2816CD076396E37646986B /* Pods-Runner.profile.xcconfig */, - BCEE4E22E342BE2AE575AD2D /* Pods-RunnerTests.debug.xcconfig */, - 03846B9F44BF1972C83E25FA /* Pods-RunnerTests.release.xcconfig */, - 5EE7E79790EC7251679ADEAC /* Pods-RunnerTests.profile.xcconfig */, + 36423EA0CDE5981423B48AEE /* Pods_Runner.framework */, + B80D78B7F0831CA886CFE751 /* Pods_RunnerTests.framework */, ); - name = Pods; - path = Pods; + name = Frameworks; sourceTree = ""; }; /* End PBXGroup section */ @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 904FB334C3FF8770F4FAA2F4 /* [CP] Check Pods Manifest.lock */, + ABDEED064F2EE34AC0D864AE /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 60646BBAFDF05E49F2FB1BEF /* [CP] Check Pods Manifest.lock */, + B9E6980CAE17BFE6BF2A9555 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 74EBA55F3EAADD88242C66DC /* [CP] Embed Pods Frameworks */, + 031FA17996CC4882D4AF14D9 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,6 +323,23 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ + 031FA17996CC4882D4AF14D9 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -361,7 +378,7 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 60646BBAFDF05E49F2FB1BEF /* [CP] Check Pods Manifest.lock */ = { + ABDEED064F2EE34AC0D864AE /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -376,31 +393,14 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 74EBA55F3EAADD88242C66DC /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; - 904FB334C3FF8770F4FAA2F4 /* [CP] Check Pods Manifest.lock */ = { + B9E6980CAE17BFE6BF2A9555 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -415,7 +415,7 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = BCEE4E22E342BE2AE575AD2D /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = E881F22E1ED9CF3723A13CEC /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 03846B9F44BF1972C83E25FA /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = F1D90A111512887B7981FE7C /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 5EE7E79790EC7251679ADEAC /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 25E382F5DE97D2D47426B59B /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/boring_to_beautiful/step_05/pubspec.yaml b/boring_to_beautiful/step_05/pubspec.yaml index e41af5ebf4..6452298e93 100644 --- a/boring_to_beautiful/step_05/pubspec.yaml +++ b/boring_to_beautiful/step_05/pubspec.yaml @@ -13,24 +13,24 @@ dependencies: adaptive_components: ^0.0.10 adaptive_navigation: ^0.0.10 animations: ^2.0.11 - collection: ^1.18.0 + collection: ^1.19.0 cupertino_icons: ^1.0.8 - desktop_window: ^0.4.0 + desktop_window: ^0.4.1 dynamic_color: ^1.7.0 english_words: ^4.0.0 flutter_bloc: ^8.1.6 freezed_annotation: ^2.4.4 - go_router: ^14.2.7 + go_router: ^14.3.0 material_color_utilities: any universal_platform: ^1.1.0 - url_launcher: ^6.3.0 + url_launcher: ^6.3.1 google_fonts: ^6.2.1 dev_dependencies: flutter_test: sdk: flutter - build_runner: ^2.4.12 - flutter_lints: ^4.0.0 + build_runner: ^2.4.13 + flutter_lints: ^5.0.0 freezed: ^2.5.7 flutter: diff --git a/boring_to_beautiful/step_05/web/index.html b/boring_to_beautiful/step_05/web/index.html index 0a8bd1ab80..e0a0abbbbf 100644 --- a/boring_to_beautiful/step_05/web/index.html +++ b/boring_to_beautiful/step_05/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/boring_to_beautiful/step_06/android/gradle.properties b/boring_to_beautiful/step_06/android/gradle.properties index 2597170821..f018a61817 100644 --- a/boring_to_beautiful/step_06/android/gradle.properties +++ b/boring_to_beautiful/step_06/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/boring_to_beautiful/step_06/ios/Runner.xcodeproj/project.pbxproj b/boring_to_beautiful/step_06/ios/Runner.xcodeproj/project.pbxproj index 3f17d86d6e..27188f1a29 100644 --- a/boring_to_beautiful/step_06/ios/Runner.xcodeproj/project.pbxproj +++ b/boring_to_beautiful/step_06/ios/Runner.xcodeproj/project.pbxproj @@ -7,15 +7,15 @@ objects = { /* Begin PBXBuildFile section */ - 045D9DC041F68A933791819A /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1A5B8D1F6E2314D54252D714 /* Pods_Runner.framework */; }; 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; + 208962B53868BF2AFCDAD8E7 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 32C8ACDFE0B7706E1D63C8FC /* Pods_Runner.framework */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; - 6340AE5E0688CFEF81E588DB /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8C21E1E613517ACEAEC525DC /* Pods_RunnerTests.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; + A4B9B73FBC1F47ACF4A1C4A0 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F27A303A186C2A0809FCFE71 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,18 +42,19 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 028B86D9E5D62F1DCB40F65B /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 0F5809B4F9F50DCE58AED982 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 1A5B8D1F6E2314D54252D714 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 32C8ACDFE0B7706E1D63C8FC /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 612DF2F856DB475059D0216B /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 44AD5815711D9A48D9B79930 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 4E2630CD278C99A068304BFF /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 7BE5987796DB363652331093 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - 8C21E1E613517ACEAEC525DC /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -61,26 +62,25 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 9E4939688F843C9FB16910FC /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - C9E54593F7142BBA8B70B2AA /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - CB85765AE9FE44396BCEE420 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - EFFA2C9A0A544F6091D35176 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + AAD1FCD230C27D91828B1C7E /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + B521B76D1194933A83E8CA4F /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + F27A303A186C2A0809FCFE71 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 6A191B1B707AA2189ED7AEB7 /* Frameworks */ = { + 97C146EB1CF9000F007C117D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 6340AE5E0688CFEF81E588DB /* Pods_RunnerTests.framework in Frameworks */, + 208962B53868BF2AFCDAD8E7 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 97C146EB1CF9000F007C117D /* Frameworks */ = { + F1EB1A38D8D843224D93C592 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 045D9DC041F68A933791819A /* Pods_Runner.framework in Frameworks */, + A4B9B73FBC1F47ACF4A1C4A0 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -95,25 +95,11 @@ path = RunnerTests; sourceTree = ""; }; - 3FC66A828656DFEF6FEB944E /* Pods */ = { - isa = PBXGroup; - children = ( - C9E54593F7142BBA8B70B2AA /* Pods-Runner.debug.xcconfig */, - CB85765AE9FE44396BCEE420 /* Pods-Runner.release.xcconfig */, - EFFA2C9A0A544F6091D35176 /* Pods-Runner.profile.xcconfig */, - 612DF2F856DB475059D0216B /* Pods-RunnerTests.debug.xcconfig */, - 9E4939688F843C9FB16910FC /* Pods-RunnerTests.release.xcconfig */, - 7BE5987796DB363652331093 /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; - 7C4F6B5D0FD36966BC5B7640 /* Frameworks */ = { + 4F504FD1A7DEAA11371FD812 /* Frameworks */ = { isa = PBXGroup; children = ( - 1A5B8D1F6E2314D54252D714 /* Pods_Runner.framework */, - 8C21E1E613517ACEAEC525DC /* Pods_RunnerTests.framework */, + 32C8ACDFE0B7706E1D63C8FC /* Pods_Runner.framework */, + F27A303A186C2A0809FCFE71 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -136,8 +122,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - 3FC66A828656DFEF6FEB944E /* Pods */, - 7C4F6B5D0FD36966BC5B7640 /* Frameworks */, + EEC228E83A67A67530E39534 /* Pods */, + 4F504FD1A7DEAA11371FD812 /* Frameworks */, ); sourceTree = ""; }; @@ -165,6 +151,20 @@ path = Runner; sourceTree = ""; }; + EEC228E83A67A67530E39534 /* Pods */ = { + isa = PBXGroup; + children = ( + 4E2630CD278C99A068304BFF /* Pods-Runner.debug.xcconfig */, + B521B76D1194933A83E8CA4F /* Pods-Runner.release.xcconfig */, + AAD1FCD230C27D91828B1C7E /* Pods-Runner.profile.xcconfig */, + 028B86D9E5D62F1DCB40F65B /* Pods-RunnerTests.debug.xcconfig */, + 44AD5815711D9A48D9B79930 /* Pods-RunnerTests.release.xcconfig */, + 0F5809B4F9F50DCE58AED982 /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 1B0871ABDE9E880ACA9AF76E /* [CP] Check Pods Manifest.lock */, + 0033FF9EDA59710A08D92356 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 6A191B1B707AA2189ED7AEB7 /* Frameworks */, + F1EB1A38D8D843224D93C592 /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 152278CBCF53589D360B61BB /* [CP] Check Pods Manifest.lock */, + 61E108675EDD4B5F14470A53 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 9964E2B5C7FAD06A79BAAF89 /* [CP] Embed Pods Frameworks */, + 988934BE9015DDB2BD2671E2 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -270,7 +270,7 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 152278CBCF53589D360B61BB /* [CP] Check Pods Manifest.lock */ = { + 0033FF9EDA59710A08D92356 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -285,50 +285,50 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 1B0871ABDE9E880ACA9AF76E /* [CP] Check Pods Manifest.lock */ = { + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); + name = "Thin Binary"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + 61E108675EDD4B5F14470A53 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( - "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "Thin Binary"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; @@ -345,7 +345,7 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - 9964E2B5C7FAD06A79BAAF89 /* [CP] Embed Pods Frameworks */ = { + 988934BE9015DDB2BD2671E2 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 612DF2F856DB475059D0216B /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 028B86D9E5D62F1DCB40F65B /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 9E4939688F843C9FB16910FC /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 44AD5815711D9A48D9B79930 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 7BE5987796DB363652331093 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 0F5809B4F9F50DCE58AED982 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/boring_to_beautiful/step_06/linux/CMakeLists.txt b/boring_to_beautiful/step_06/linux/CMakeLists.txt index 74a8344fa9..0565f6a409 100644 --- a/boring_to_beautiful/step_06/linux/CMakeLists.txt +++ b/boring_to_beautiful/step_06/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/boring_to_beautiful/step_06/linux/my_application.cc b/boring_to_beautiful/step_06/linux/my_application.cc deleted file mode 100644 index 59e1394236..0000000000 --- a/boring_to_beautiful/step_06/linux/my_application.cc +++ /dev/null @@ -1,124 +0,0 @@ -#include "my_application.h" - -#include -#ifdef GDK_WINDOWING_X11 -#include -#endif - -#include "flutter/generated_plugin_registrant.h" - -struct _MyApplication { - GtkApplication parent_instance; - char** dart_entrypoint_arguments; -}; - -G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) - -// Implements GApplication::activate. -static void my_application_activate(GApplication* application) { - MyApplication* self = MY_APPLICATION(application); - GtkWindow* window = - GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); - - // Use a header bar when running in GNOME as this is the common style used - // by applications and is the setup most users will be using (e.g. Ubuntu - // desktop). - // If running on X and not using GNOME then just use a traditional title bar - // in case the window manager does more exotic layout, e.g. tiling. - // If running on Wayland assume the header bar will work (may need changing - // if future cases occur). - gboolean use_header_bar = TRUE; -#ifdef GDK_WINDOWING_X11 - GdkScreen* screen = gtk_window_get_screen(window); - if (GDK_IS_X11_SCREEN(screen)) { - const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); - if (g_strcmp0(wm_name, "GNOME Shell") != 0) { - use_header_bar = FALSE; - } - } -#endif - if (use_header_bar) { - GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); - gtk_widget_show(GTK_WIDGET(header_bar)); - gtk_header_bar_set_title(header_bar, "myartist"); - gtk_header_bar_set_show_close_button(header_bar, TRUE); - gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); - } else { - gtk_window_set_title(window, "myartist"); - } - - gtk_window_set_default_size(window, 1280, 720); - gtk_widget_show(GTK_WIDGET(window)); - - g_autoptr(FlDartProject) project = fl_dart_project_new(); - fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); - - FlView* view = fl_view_new(project); - gtk_widget_show(GTK_WIDGET(view)); - gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); - - fl_register_plugins(FL_PLUGIN_REGISTRY(view)); - - gtk_widget_grab_focus(GTK_WIDGET(view)); -} - -// Implements GApplication::local_command_line. -static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { - MyApplication* self = MY_APPLICATION(application); - // Strip out the first argument as it is the binary name. - self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); - - g_autoptr(GError) error = nullptr; - if (!g_application_register(application, nullptr, &error)) { - g_warning("Failed to register: %s", error->message); - *exit_status = 1; - return TRUE; - } - - g_application_activate(application); - *exit_status = 0; - - return TRUE; -} - -// Implements GApplication::startup. -static void my_application_startup(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application startup. - - G_APPLICATION_CLASS(my_application_parent_class)->startup(application); -} - -// Implements GApplication::shutdown. -static void my_application_shutdown(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application shutdown. - - G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); -} - -// Implements GObject::dispose. -static void my_application_dispose(GObject* object) { - MyApplication* self = MY_APPLICATION(object); - g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); - G_OBJECT_CLASS(my_application_parent_class)->dispose(object); -} - -static void my_application_class_init(MyApplicationClass* klass) { - G_APPLICATION_CLASS(klass)->activate = my_application_activate; - G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; - G_APPLICATION_CLASS(klass)->startup = my_application_startup; - G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; - G_OBJECT_CLASS(klass)->dispose = my_application_dispose; -} - -static void my_application_init(MyApplication* self) {} - -MyApplication* my_application_new() { - return MY_APPLICATION(g_object_new(my_application_get_type(), - "application-id", APPLICATION_ID, - "flags", G_APPLICATION_NON_UNIQUE, - nullptr)); -} diff --git a/boring_to_beautiful/step_06/linux/runner/CMakeLists.txt b/boring_to_beautiful/step_06/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/boring_to_beautiful/step_06/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/boring_to_beautiful/step_06/linux/main.cc b/boring_to_beautiful/step_06/linux/runner/main.cc similarity index 100% rename from boring_to_beautiful/step_06/linux/main.cc rename to boring_to_beautiful/step_06/linux/runner/main.cc diff --git a/boring_to_beautiful/step_06/linux/runner/my_application.cc b/boring_to_beautiful/step_06/linux/runner/my_application.cc new file mode 100644 index 0000000000..f93ba9f71c --- /dev/null +++ b/boring_to_beautiful/step_06/linux/runner/my_application.cc @@ -0,0 +1,130 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "myartist"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "myartist"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/boring_to_beautiful/step_06/linux/my_application.h b/boring_to_beautiful/step_06/linux/runner/my_application.h similarity index 100% rename from boring_to_beautiful/step_06/linux/my_application.h rename to boring_to_beautiful/step_06/linux/runner/my_application.h diff --git a/boring_to_beautiful/step_06/macos/Runner.xcodeproj/project.pbxproj b/boring_to_beautiful/step_06/macos/Runner.xcodeproj/project.pbxproj index 3b2e4ebdbe..a4ba51afb5 100644 --- a/boring_to_beautiful/step_06/macos/Runner.xcodeproj/project.pbxproj +++ b/boring_to_beautiful/step_06/macos/Runner.xcodeproj/project.pbxproj @@ -27,8 +27,8 @@ 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 63F13B68B978A8E76E978EE7 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5BAA81C4A6E7098556896E2F /* Pods_Runner.framework */; }; - A1EB5160E1186002E08A43FB /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 030CB9F0A41B69C812119E7A /* Pods_RunnerTests.framework */; }; + 4199224406A25A7474E0C79E /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 36423EA0CDE5981423B48AEE /* Pods_Runner.framework */; }; + 91BCC9003B49CC98CECBF0EC /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B80D78B7F0831CA886CFE751 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,8 +62,7 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 030CB9F0A41B69C812119E7A /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 03846B9F44BF1972C83E25FA /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 25E382F5DE97D2D47426B59B /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -80,14 +79,15 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 5BAA81C4A6E7098556896E2F /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 5C2816CD076396E37646986B /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - 5CE7AE4215797944E1BE1B53 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 5EE7E79790EC7251679ADEAC /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 36423EA0CDE5981423B48AEE /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 59981915FE452EAD0B851E3D /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 8CEF7ABB1ECE3EAA81DD03DB /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 92320B2EDC5B05B44B5CC56F /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - BCEE4E22E342BE2AE575AD2D /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + A0563A63B8D8D2BB44A67D02 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + B80D78B7F0831CA886CFE751 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + E881F22E1ED9CF3723A13CEC /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + F1D90A111512887B7981FE7C /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - A1EB5160E1186002E08A43FB /* Pods_RunnerTests.framework in Frameworks */, + 91BCC9003B49CC98CECBF0EC /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,7 +103,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 63F13B68B978A8E76E978EE7 /* Pods_Runner.framework in Frameworks */, + 4199224406A25A7474E0C79E /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -137,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - FD831DC61C04B5999E3388CF /* Pods */, + 7F3DCCA95ED45892CA7CC729 /* Pods */, ); sourceTree = ""; }; @@ -185,27 +185,27 @@ path = Runner; sourceTree = ""; }; - D73912EC22F37F3D000D13A0 /* Frameworks */ = { + 7F3DCCA95ED45892CA7CC729 /* Pods */ = { isa = PBXGroup; children = ( - 5BAA81C4A6E7098556896E2F /* Pods_Runner.framework */, - 030CB9F0A41B69C812119E7A /* Pods_RunnerTests.framework */, + A0563A63B8D8D2BB44A67D02 /* Pods-Runner.debug.xcconfig */, + 92320B2EDC5B05B44B5CC56F /* Pods-Runner.release.xcconfig */, + 59981915FE452EAD0B851E3D /* Pods-Runner.profile.xcconfig */, + E881F22E1ED9CF3723A13CEC /* Pods-RunnerTests.debug.xcconfig */, + F1D90A111512887B7981FE7C /* Pods-RunnerTests.release.xcconfig */, + 25E382F5DE97D2D47426B59B /* Pods-RunnerTests.profile.xcconfig */, ); - name = Frameworks; + name = Pods; + path = Pods; sourceTree = ""; }; - FD831DC61C04B5999E3388CF /* Pods */ = { + D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - 8CEF7ABB1ECE3EAA81DD03DB /* Pods-Runner.debug.xcconfig */, - 5CE7AE4215797944E1BE1B53 /* Pods-Runner.release.xcconfig */, - 5C2816CD076396E37646986B /* Pods-Runner.profile.xcconfig */, - BCEE4E22E342BE2AE575AD2D /* Pods-RunnerTests.debug.xcconfig */, - 03846B9F44BF1972C83E25FA /* Pods-RunnerTests.release.xcconfig */, - 5EE7E79790EC7251679ADEAC /* Pods-RunnerTests.profile.xcconfig */, + 36423EA0CDE5981423B48AEE /* Pods_Runner.framework */, + B80D78B7F0831CA886CFE751 /* Pods_RunnerTests.framework */, ); - name = Pods; - path = Pods; + name = Frameworks; sourceTree = ""; }; /* End PBXGroup section */ @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 904FB334C3FF8770F4FAA2F4 /* [CP] Check Pods Manifest.lock */, + ABDEED064F2EE34AC0D864AE /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 60646BBAFDF05E49F2FB1BEF /* [CP] Check Pods Manifest.lock */, + B9E6980CAE17BFE6BF2A9555 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 74EBA55F3EAADD88242C66DC /* [CP] Embed Pods Frameworks */, + 031FA17996CC4882D4AF14D9 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,6 +323,23 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ + 031FA17996CC4882D4AF14D9 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -361,7 +378,7 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 60646BBAFDF05E49F2FB1BEF /* [CP] Check Pods Manifest.lock */ = { + ABDEED064F2EE34AC0D864AE /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -376,31 +393,14 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 74EBA55F3EAADD88242C66DC /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; - 904FB334C3FF8770F4FAA2F4 /* [CP] Check Pods Manifest.lock */ = { + B9E6980CAE17BFE6BF2A9555 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -415,7 +415,7 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = BCEE4E22E342BE2AE575AD2D /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = E881F22E1ED9CF3723A13CEC /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 03846B9F44BF1972C83E25FA /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = F1D90A111512887B7981FE7C /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 5EE7E79790EC7251679ADEAC /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 25E382F5DE97D2D47426B59B /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/boring_to_beautiful/step_06/pubspec.yaml b/boring_to_beautiful/step_06/pubspec.yaml index e41af5ebf4..6452298e93 100644 --- a/boring_to_beautiful/step_06/pubspec.yaml +++ b/boring_to_beautiful/step_06/pubspec.yaml @@ -13,24 +13,24 @@ dependencies: adaptive_components: ^0.0.10 adaptive_navigation: ^0.0.10 animations: ^2.0.11 - collection: ^1.18.0 + collection: ^1.19.0 cupertino_icons: ^1.0.8 - desktop_window: ^0.4.0 + desktop_window: ^0.4.1 dynamic_color: ^1.7.0 english_words: ^4.0.0 flutter_bloc: ^8.1.6 freezed_annotation: ^2.4.4 - go_router: ^14.2.7 + go_router: ^14.3.0 material_color_utilities: any universal_platform: ^1.1.0 - url_launcher: ^6.3.0 + url_launcher: ^6.3.1 google_fonts: ^6.2.1 dev_dependencies: flutter_test: sdk: flutter - build_runner: ^2.4.12 - flutter_lints: ^4.0.0 + build_runner: ^2.4.13 + flutter_lints: ^5.0.0 freezed: ^2.5.7 flutter: diff --git a/boring_to_beautiful/step_06/web/index.html b/boring_to_beautiful/step_06/web/index.html index 0a8bd1ab80..e0a0abbbbf 100644 --- a/boring_to_beautiful/step_06/web/index.html +++ b/boring_to_beautiful/step_06/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/boring_to_beautiful/step_07/android/gradle.properties b/boring_to_beautiful/step_07/android/gradle.properties index 2597170821..f018a61817 100644 --- a/boring_to_beautiful/step_07/android/gradle.properties +++ b/boring_to_beautiful/step_07/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/boring_to_beautiful/step_07/ios/Runner.xcodeproj/project.pbxproj b/boring_to_beautiful/step_07/ios/Runner.xcodeproj/project.pbxproj index 3f17d86d6e..27188f1a29 100644 --- a/boring_to_beautiful/step_07/ios/Runner.xcodeproj/project.pbxproj +++ b/boring_to_beautiful/step_07/ios/Runner.xcodeproj/project.pbxproj @@ -7,15 +7,15 @@ objects = { /* Begin PBXBuildFile section */ - 045D9DC041F68A933791819A /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1A5B8D1F6E2314D54252D714 /* Pods_Runner.framework */; }; 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; + 208962B53868BF2AFCDAD8E7 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 32C8ACDFE0B7706E1D63C8FC /* Pods_Runner.framework */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; - 6340AE5E0688CFEF81E588DB /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8C21E1E613517ACEAEC525DC /* Pods_RunnerTests.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; + A4B9B73FBC1F47ACF4A1C4A0 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F27A303A186C2A0809FCFE71 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,18 +42,19 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 028B86D9E5D62F1DCB40F65B /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 0F5809B4F9F50DCE58AED982 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 1A5B8D1F6E2314D54252D714 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 32C8ACDFE0B7706E1D63C8FC /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 612DF2F856DB475059D0216B /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 44AD5815711D9A48D9B79930 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 4E2630CD278C99A068304BFF /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 7BE5987796DB363652331093 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - 8C21E1E613517ACEAEC525DC /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -61,26 +62,25 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 9E4939688F843C9FB16910FC /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - C9E54593F7142BBA8B70B2AA /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - CB85765AE9FE44396BCEE420 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - EFFA2C9A0A544F6091D35176 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + AAD1FCD230C27D91828B1C7E /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + B521B76D1194933A83E8CA4F /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + F27A303A186C2A0809FCFE71 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 6A191B1B707AA2189ED7AEB7 /* Frameworks */ = { + 97C146EB1CF9000F007C117D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 6340AE5E0688CFEF81E588DB /* Pods_RunnerTests.framework in Frameworks */, + 208962B53868BF2AFCDAD8E7 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 97C146EB1CF9000F007C117D /* Frameworks */ = { + F1EB1A38D8D843224D93C592 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 045D9DC041F68A933791819A /* Pods_Runner.framework in Frameworks */, + A4B9B73FBC1F47ACF4A1C4A0 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -95,25 +95,11 @@ path = RunnerTests; sourceTree = ""; }; - 3FC66A828656DFEF6FEB944E /* Pods */ = { - isa = PBXGroup; - children = ( - C9E54593F7142BBA8B70B2AA /* Pods-Runner.debug.xcconfig */, - CB85765AE9FE44396BCEE420 /* Pods-Runner.release.xcconfig */, - EFFA2C9A0A544F6091D35176 /* Pods-Runner.profile.xcconfig */, - 612DF2F856DB475059D0216B /* Pods-RunnerTests.debug.xcconfig */, - 9E4939688F843C9FB16910FC /* Pods-RunnerTests.release.xcconfig */, - 7BE5987796DB363652331093 /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; - 7C4F6B5D0FD36966BC5B7640 /* Frameworks */ = { + 4F504FD1A7DEAA11371FD812 /* Frameworks */ = { isa = PBXGroup; children = ( - 1A5B8D1F6E2314D54252D714 /* Pods_Runner.framework */, - 8C21E1E613517ACEAEC525DC /* Pods_RunnerTests.framework */, + 32C8ACDFE0B7706E1D63C8FC /* Pods_Runner.framework */, + F27A303A186C2A0809FCFE71 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -136,8 +122,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - 3FC66A828656DFEF6FEB944E /* Pods */, - 7C4F6B5D0FD36966BC5B7640 /* Frameworks */, + EEC228E83A67A67530E39534 /* Pods */, + 4F504FD1A7DEAA11371FD812 /* Frameworks */, ); sourceTree = ""; }; @@ -165,6 +151,20 @@ path = Runner; sourceTree = ""; }; + EEC228E83A67A67530E39534 /* Pods */ = { + isa = PBXGroup; + children = ( + 4E2630CD278C99A068304BFF /* Pods-Runner.debug.xcconfig */, + B521B76D1194933A83E8CA4F /* Pods-Runner.release.xcconfig */, + AAD1FCD230C27D91828B1C7E /* Pods-Runner.profile.xcconfig */, + 028B86D9E5D62F1DCB40F65B /* Pods-RunnerTests.debug.xcconfig */, + 44AD5815711D9A48D9B79930 /* Pods-RunnerTests.release.xcconfig */, + 0F5809B4F9F50DCE58AED982 /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 1B0871ABDE9E880ACA9AF76E /* [CP] Check Pods Manifest.lock */, + 0033FF9EDA59710A08D92356 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 6A191B1B707AA2189ED7AEB7 /* Frameworks */, + F1EB1A38D8D843224D93C592 /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 152278CBCF53589D360B61BB /* [CP] Check Pods Manifest.lock */, + 61E108675EDD4B5F14470A53 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 9964E2B5C7FAD06A79BAAF89 /* [CP] Embed Pods Frameworks */, + 988934BE9015DDB2BD2671E2 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -270,7 +270,7 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 152278CBCF53589D360B61BB /* [CP] Check Pods Manifest.lock */ = { + 0033FF9EDA59710A08D92356 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -285,50 +285,50 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 1B0871ABDE9E880ACA9AF76E /* [CP] Check Pods Manifest.lock */ = { + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); + name = "Thin Binary"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + 61E108675EDD4B5F14470A53 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( - "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "Thin Binary"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; @@ -345,7 +345,7 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - 9964E2B5C7FAD06A79BAAF89 /* [CP] Embed Pods Frameworks */ = { + 988934BE9015DDB2BD2671E2 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 612DF2F856DB475059D0216B /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 028B86D9E5D62F1DCB40F65B /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 9E4939688F843C9FB16910FC /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 44AD5815711D9A48D9B79930 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 7BE5987796DB363652331093 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 0F5809B4F9F50DCE58AED982 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/boring_to_beautiful/step_07/linux/CMakeLists.txt b/boring_to_beautiful/step_07/linux/CMakeLists.txt index 74a8344fa9..0565f6a409 100644 --- a/boring_to_beautiful/step_07/linux/CMakeLists.txt +++ b/boring_to_beautiful/step_07/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/boring_to_beautiful/step_07/linux/my_application.cc b/boring_to_beautiful/step_07/linux/my_application.cc deleted file mode 100644 index 59e1394236..0000000000 --- a/boring_to_beautiful/step_07/linux/my_application.cc +++ /dev/null @@ -1,124 +0,0 @@ -#include "my_application.h" - -#include -#ifdef GDK_WINDOWING_X11 -#include -#endif - -#include "flutter/generated_plugin_registrant.h" - -struct _MyApplication { - GtkApplication parent_instance; - char** dart_entrypoint_arguments; -}; - -G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) - -// Implements GApplication::activate. -static void my_application_activate(GApplication* application) { - MyApplication* self = MY_APPLICATION(application); - GtkWindow* window = - GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); - - // Use a header bar when running in GNOME as this is the common style used - // by applications and is the setup most users will be using (e.g. Ubuntu - // desktop). - // If running on X and not using GNOME then just use a traditional title bar - // in case the window manager does more exotic layout, e.g. tiling. - // If running on Wayland assume the header bar will work (may need changing - // if future cases occur). - gboolean use_header_bar = TRUE; -#ifdef GDK_WINDOWING_X11 - GdkScreen* screen = gtk_window_get_screen(window); - if (GDK_IS_X11_SCREEN(screen)) { - const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); - if (g_strcmp0(wm_name, "GNOME Shell") != 0) { - use_header_bar = FALSE; - } - } -#endif - if (use_header_bar) { - GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); - gtk_widget_show(GTK_WIDGET(header_bar)); - gtk_header_bar_set_title(header_bar, "myartist"); - gtk_header_bar_set_show_close_button(header_bar, TRUE); - gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); - } else { - gtk_window_set_title(window, "myartist"); - } - - gtk_window_set_default_size(window, 1280, 720); - gtk_widget_show(GTK_WIDGET(window)); - - g_autoptr(FlDartProject) project = fl_dart_project_new(); - fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); - - FlView* view = fl_view_new(project); - gtk_widget_show(GTK_WIDGET(view)); - gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); - - fl_register_plugins(FL_PLUGIN_REGISTRY(view)); - - gtk_widget_grab_focus(GTK_WIDGET(view)); -} - -// Implements GApplication::local_command_line. -static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { - MyApplication* self = MY_APPLICATION(application); - // Strip out the first argument as it is the binary name. - self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); - - g_autoptr(GError) error = nullptr; - if (!g_application_register(application, nullptr, &error)) { - g_warning("Failed to register: %s", error->message); - *exit_status = 1; - return TRUE; - } - - g_application_activate(application); - *exit_status = 0; - - return TRUE; -} - -// Implements GApplication::startup. -static void my_application_startup(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application startup. - - G_APPLICATION_CLASS(my_application_parent_class)->startup(application); -} - -// Implements GApplication::shutdown. -static void my_application_shutdown(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application shutdown. - - G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); -} - -// Implements GObject::dispose. -static void my_application_dispose(GObject* object) { - MyApplication* self = MY_APPLICATION(object); - g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); - G_OBJECT_CLASS(my_application_parent_class)->dispose(object); -} - -static void my_application_class_init(MyApplicationClass* klass) { - G_APPLICATION_CLASS(klass)->activate = my_application_activate; - G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; - G_APPLICATION_CLASS(klass)->startup = my_application_startup; - G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; - G_OBJECT_CLASS(klass)->dispose = my_application_dispose; -} - -static void my_application_init(MyApplication* self) {} - -MyApplication* my_application_new() { - return MY_APPLICATION(g_object_new(my_application_get_type(), - "application-id", APPLICATION_ID, - "flags", G_APPLICATION_NON_UNIQUE, - nullptr)); -} diff --git a/boring_to_beautiful/step_07/linux/runner/CMakeLists.txt b/boring_to_beautiful/step_07/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/boring_to_beautiful/step_07/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/boring_to_beautiful/step_07/linux/main.cc b/boring_to_beautiful/step_07/linux/runner/main.cc similarity index 100% rename from boring_to_beautiful/step_07/linux/main.cc rename to boring_to_beautiful/step_07/linux/runner/main.cc diff --git a/boring_to_beautiful/step_07/linux/runner/my_application.cc b/boring_to_beautiful/step_07/linux/runner/my_application.cc new file mode 100644 index 0000000000..f93ba9f71c --- /dev/null +++ b/boring_to_beautiful/step_07/linux/runner/my_application.cc @@ -0,0 +1,130 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "myartist"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "myartist"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/boring_to_beautiful/step_07/linux/my_application.h b/boring_to_beautiful/step_07/linux/runner/my_application.h similarity index 100% rename from boring_to_beautiful/step_07/linux/my_application.h rename to boring_to_beautiful/step_07/linux/runner/my_application.h diff --git a/boring_to_beautiful/step_07/macos/Runner.xcodeproj/project.pbxproj b/boring_to_beautiful/step_07/macos/Runner.xcodeproj/project.pbxproj index 3b2e4ebdbe..a4ba51afb5 100644 --- a/boring_to_beautiful/step_07/macos/Runner.xcodeproj/project.pbxproj +++ b/boring_to_beautiful/step_07/macos/Runner.xcodeproj/project.pbxproj @@ -27,8 +27,8 @@ 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 63F13B68B978A8E76E978EE7 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5BAA81C4A6E7098556896E2F /* Pods_Runner.framework */; }; - A1EB5160E1186002E08A43FB /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 030CB9F0A41B69C812119E7A /* Pods_RunnerTests.framework */; }; + 4199224406A25A7474E0C79E /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 36423EA0CDE5981423B48AEE /* Pods_Runner.framework */; }; + 91BCC9003B49CC98CECBF0EC /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B80D78B7F0831CA886CFE751 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,8 +62,7 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 030CB9F0A41B69C812119E7A /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 03846B9F44BF1972C83E25FA /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 25E382F5DE97D2D47426B59B /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -80,14 +79,15 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 5BAA81C4A6E7098556896E2F /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 5C2816CD076396E37646986B /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - 5CE7AE4215797944E1BE1B53 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 5EE7E79790EC7251679ADEAC /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 36423EA0CDE5981423B48AEE /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 59981915FE452EAD0B851E3D /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 8CEF7ABB1ECE3EAA81DD03DB /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 92320B2EDC5B05B44B5CC56F /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - BCEE4E22E342BE2AE575AD2D /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + A0563A63B8D8D2BB44A67D02 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + B80D78B7F0831CA886CFE751 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + E881F22E1ED9CF3723A13CEC /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + F1D90A111512887B7981FE7C /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - A1EB5160E1186002E08A43FB /* Pods_RunnerTests.framework in Frameworks */, + 91BCC9003B49CC98CECBF0EC /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,7 +103,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 63F13B68B978A8E76E978EE7 /* Pods_Runner.framework in Frameworks */, + 4199224406A25A7474E0C79E /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -137,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - FD831DC61C04B5999E3388CF /* Pods */, + 7F3DCCA95ED45892CA7CC729 /* Pods */, ); sourceTree = ""; }; @@ -185,27 +185,27 @@ path = Runner; sourceTree = ""; }; - D73912EC22F37F3D000D13A0 /* Frameworks */ = { + 7F3DCCA95ED45892CA7CC729 /* Pods */ = { isa = PBXGroup; children = ( - 5BAA81C4A6E7098556896E2F /* Pods_Runner.framework */, - 030CB9F0A41B69C812119E7A /* Pods_RunnerTests.framework */, + A0563A63B8D8D2BB44A67D02 /* Pods-Runner.debug.xcconfig */, + 92320B2EDC5B05B44B5CC56F /* Pods-Runner.release.xcconfig */, + 59981915FE452EAD0B851E3D /* Pods-Runner.profile.xcconfig */, + E881F22E1ED9CF3723A13CEC /* Pods-RunnerTests.debug.xcconfig */, + F1D90A111512887B7981FE7C /* Pods-RunnerTests.release.xcconfig */, + 25E382F5DE97D2D47426B59B /* Pods-RunnerTests.profile.xcconfig */, ); - name = Frameworks; + name = Pods; + path = Pods; sourceTree = ""; }; - FD831DC61C04B5999E3388CF /* Pods */ = { + D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - 8CEF7ABB1ECE3EAA81DD03DB /* Pods-Runner.debug.xcconfig */, - 5CE7AE4215797944E1BE1B53 /* Pods-Runner.release.xcconfig */, - 5C2816CD076396E37646986B /* Pods-Runner.profile.xcconfig */, - BCEE4E22E342BE2AE575AD2D /* Pods-RunnerTests.debug.xcconfig */, - 03846B9F44BF1972C83E25FA /* Pods-RunnerTests.release.xcconfig */, - 5EE7E79790EC7251679ADEAC /* Pods-RunnerTests.profile.xcconfig */, + 36423EA0CDE5981423B48AEE /* Pods_Runner.framework */, + B80D78B7F0831CA886CFE751 /* Pods_RunnerTests.framework */, ); - name = Pods; - path = Pods; + name = Frameworks; sourceTree = ""; }; /* End PBXGroup section */ @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 904FB334C3FF8770F4FAA2F4 /* [CP] Check Pods Manifest.lock */, + ABDEED064F2EE34AC0D864AE /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 60646BBAFDF05E49F2FB1BEF /* [CP] Check Pods Manifest.lock */, + B9E6980CAE17BFE6BF2A9555 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 74EBA55F3EAADD88242C66DC /* [CP] Embed Pods Frameworks */, + 031FA17996CC4882D4AF14D9 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,6 +323,23 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ + 031FA17996CC4882D4AF14D9 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -361,7 +378,7 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 60646BBAFDF05E49F2FB1BEF /* [CP] Check Pods Manifest.lock */ = { + ABDEED064F2EE34AC0D864AE /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -376,31 +393,14 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 74EBA55F3EAADD88242C66DC /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; - 904FB334C3FF8770F4FAA2F4 /* [CP] Check Pods Manifest.lock */ = { + B9E6980CAE17BFE6BF2A9555 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -415,7 +415,7 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = BCEE4E22E342BE2AE575AD2D /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = E881F22E1ED9CF3723A13CEC /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 03846B9F44BF1972C83E25FA /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = F1D90A111512887B7981FE7C /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 5EE7E79790EC7251679ADEAC /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 25E382F5DE97D2D47426B59B /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/boring_to_beautiful/step_07/pubspec.yaml b/boring_to_beautiful/step_07/pubspec.yaml index e41af5ebf4..6452298e93 100644 --- a/boring_to_beautiful/step_07/pubspec.yaml +++ b/boring_to_beautiful/step_07/pubspec.yaml @@ -13,24 +13,24 @@ dependencies: adaptive_components: ^0.0.10 adaptive_navigation: ^0.0.10 animations: ^2.0.11 - collection: ^1.18.0 + collection: ^1.19.0 cupertino_icons: ^1.0.8 - desktop_window: ^0.4.0 + desktop_window: ^0.4.1 dynamic_color: ^1.7.0 english_words: ^4.0.0 flutter_bloc: ^8.1.6 freezed_annotation: ^2.4.4 - go_router: ^14.2.7 + go_router: ^14.3.0 material_color_utilities: any universal_platform: ^1.1.0 - url_launcher: ^6.3.0 + url_launcher: ^6.3.1 google_fonts: ^6.2.1 dev_dependencies: flutter_test: sdk: flutter - build_runner: ^2.4.12 - flutter_lints: ^4.0.0 + build_runner: ^2.4.13 + flutter_lints: ^5.0.0 freezed: ^2.5.7 flutter: diff --git a/boring_to_beautiful/step_07/web/index.html b/boring_to_beautiful/step_07/web/index.html index 0a8bd1ab80..e0a0abbbbf 100644 --- a/boring_to_beautiful/step_07/web/index.html +++ b/boring_to_beautiful/step_07/web/index.html @@ -21,7 +21,7 @@ - + From 980fa08e4ff886d16d150800a65ca1e0a3bf8cb7 Mon Sep 17 00:00:00 2001 From: Brett Morgan Date: Mon, 14 Oct 2024 15:22:37 +1100 Subject: [PATCH 005/108] Update `brick_breaker` --- brick_breaker/step_03/.gitignore | 2 + .../step_03/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- brick_breaker/step_03/android/settings.gradle | 4 +- .../ios/Runner.xcodeproj/project.pbxproj | 104 +++++++------- brick_breaker/step_03/linux/CMakeLists.txt | 23 +--- .../step_03/linux/runner/CMakeLists.txt | 26 ++++ .../step_03/linux/{ => runner}/main.cc | 0 .../linux/{ => runner}/my_application.cc | 6 + .../linux/{ => runner}/my_application.h | 0 .../macos/Runner.xcodeproj/project.pbxproj | 118 ++++++++-------- .../step_03/macos/Runner/AppDelegate.swift | 4 + brick_breaker/step_03/pubspec.yaml | 2 +- brick_breaker/step_03/web/index.html | 2 +- brick_breaker/step_04/.gitignore | 2 + .../step_04/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- brick_breaker/step_04/android/settings.gradle | 4 +- .../ios/Runner.xcodeproj/project.pbxproj | 104 +++++++------- brick_breaker/step_04/linux/CMakeLists.txt | 23 +--- .../step_04/linux/runner/CMakeLists.txt | 26 ++++ .../step_04/linux/{ => runner}/main.cc | 0 .../linux/{ => runner}/my_application.cc | 6 + .../linux/{ => runner}/my_application.h | 0 .../macos/Runner.xcodeproj/project.pbxproj | 118 ++++++++-------- .../step_04/macos/Runner/AppDelegate.swift | 4 + brick_breaker/step_04/pubspec.yaml | 2 +- brick_breaker/step_04/web/index.html | 2 +- brick_breaker/step_05/.gitignore | 2 + .../step_05/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- brick_breaker/step_05/android/settings.gradle | 4 +- .../ios/Runner.xcodeproj/project.pbxproj | 104 +++++++------- brick_breaker/step_05/linux/CMakeLists.txt | 23 +--- .../step_05/linux/runner/CMakeLists.txt | 26 ++++ .../step_05/linux/{ => runner}/main.cc | 0 .../linux/{ => runner}/my_application.cc | 6 + .../linux/{ => runner}/my_application.h | 0 .../macos/Runner.xcodeproj/project.pbxproj | 118 ++++++++-------- .../step_05/macos/Runner/AppDelegate.swift | 4 + brick_breaker/step_05/pubspec.yaml | 2 +- brick_breaker/step_05/web/index.html | 2 +- brick_breaker/step_06/.gitignore | 2 + .../step_06/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- brick_breaker/step_06/android/settings.gradle | 4 +- .../ios/Runner.xcodeproj/project.pbxproj | 104 +++++++------- brick_breaker/step_06/linux/CMakeLists.txt | 23 +--- .../step_06/linux/runner/CMakeLists.txt | 26 ++++ .../step_06/linux/{ => runner}/main.cc | 0 .../linux/{ => runner}/my_application.cc | 6 + .../linux/{ => runner}/my_application.h | 0 .../macos/Runner.xcodeproj/project.pbxproj | 118 ++++++++-------- .../step_06/macos/Runner/AppDelegate.swift | 4 + brick_breaker/step_06/pubspec.yaml | 2 +- brick_breaker/step_06/web/index.html | 2 +- brick_breaker/step_07/.gitignore | 2 + .../step_07/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- brick_breaker/step_07/android/settings.gradle | 4 +- .../ios/Runner.xcodeproj/project.pbxproj | 104 +++++++------- brick_breaker/step_07/linux/CMakeLists.txt | 23 +--- brick_breaker/step_07/linux/my_application.cc | 124 ----------------- .../step_07/linux/runner/CMakeLists.txt | 26 ++++ .../step_07/linux/{ => runner}/main.cc | 0 .../step_07/linux/runner/my_application.cc | 130 ++++++++++++++++++ .../linux/{ => runner}/my_application.h | 0 .../macos/Runner.xcodeproj/project.pbxproj | 118 ++++++++-------- .../step_07/macos/Runner/AppDelegate.swift | 4 + brick_breaker/step_07/pubspec.yaml | 2 +- brick_breaker/step_07/web/index.html | 2 +- brick_breaker/step_08/.gitignore | 2 + .../step_08/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- brick_breaker/step_08/android/settings.gradle | 4 +- .../ios/Runner.xcodeproj/project.pbxproj | 104 +++++++------- brick_breaker/step_08/linux/CMakeLists.txt | 23 +--- brick_breaker/step_08/linux/my_application.cc | 124 ----------------- .../step_08/linux/runner/CMakeLists.txt | 26 ++++ .../step_08/linux/{ => runner}/main.cc | 0 .../step_08/linux/runner/my_application.cc | 130 ++++++++++++++++++ .../linux/{ => runner}/my_application.h | 0 .../macos/Runner.xcodeproj/project.pbxproj | 118 ++++++++-------- .../step_08/macos/Runner/AppDelegate.swift | 4 + brick_breaker/step_08/pubspec.yaml | 2 +- brick_breaker/step_08/web/index.html | 2 +- brick_breaker/step_09/.gitignore | 2 + .../step_09/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- brick_breaker/step_09/android/settings.gradle | 4 +- .../ios/Runner.xcodeproj/project.pbxproj | 104 +++++++------- brick_breaker/step_09/linux/CMakeLists.txt | 23 +--- brick_breaker/step_09/linux/my_application.cc | 124 ----------------- .../step_09/linux/runner/CMakeLists.txt | 26 ++++ .../step_09/linux/{ => runner}/main.cc | 0 .../step_09/linux/runner/my_application.cc | 130 ++++++++++++++++++ .../linux/{ => runner}/my_application.h | 0 .../macos/Runner.xcodeproj/project.pbxproj | 118 ++++++++-------- .../step_09/macos/Runner/AppDelegate.swift | 4 + brick_breaker/step_09/pubspec.yaml | 2 +- brick_breaker/step_09/web/index.html | 2 +- brick_breaker/step_10/.gitignore | 2 + .../step_10/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- brick_breaker/step_10/android/settings.gradle | 4 +- .../ios/Runner.xcodeproj/project.pbxproj | 104 +++++++------- brick_breaker/step_10/linux/CMakeLists.txt | 23 +--- brick_breaker/step_10/linux/my_application.cc | 124 ----------------- .../step_10/linux/runner/CMakeLists.txt | 26 ++++ .../step_10/linux/{ => runner}/main.cc | 0 .../step_10/linux/runner/my_application.cc | 130 ++++++++++++++++++ .../linux/{ => runner}/my_application.h | 0 .../macos/Runner.xcodeproj/project.pbxproj | 118 ++++++++-------- .../step_10/macos/Runner/AppDelegate.swift | 4 + brick_breaker/step_10/pubspec.yaml | 2 +- brick_breaker/step_10/web/index.html | 2 +- 116 files changed, 1760 insertions(+), 1592 deletions(-) create mode 100644 brick_breaker/step_03/linux/runner/CMakeLists.txt rename brick_breaker/step_03/linux/{ => runner}/main.cc (100%) rename brick_breaker/step_03/linux/{ => runner}/my_application.cc (93%) rename brick_breaker/step_03/linux/{ => runner}/my_application.h (100%) create mode 100644 brick_breaker/step_04/linux/runner/CMakeLists.txt rename brick_breaker/step_04/linux/{ => runner}/main.cc (100%) rename brick_breaker/step_04/linux/{ => runner}/my_application.cc (93%) rename brick_breaker/step_04/linux/{ => runner}/my_application.h (100%) create mode 100644 brick_breaker/step_05/linux/runner/CMakeLists.txt rename brick_breaker/step_05/linux/{ => runner}/main.cc (100%) rename brick_breaker/step_05/linux/{ => runner}/my_application.cc (93%) rename brick_breaker/step_05/linux/{ => runner}/my_application.h (100%) create mode 100644 brick_breaker/step_06/linux/runner/CMakeLists.txt rename brick_breaker/step_06/linux/{ => runner}/main.cc (100%) rename brick_breaker/step_06/linux/{ => runner}/my_application.cc (93%) rename brick_breaker/step_06/linux/{ => runner}/my_application.h (100%) delete mode 100644 brick_breaker/step_07/linux/my_application.cc create mode 100644 brick_breaker/step_07/linux/runner/CMakeLists.txt rename brick_breaker/step_07/linux/{ => runner}/main.cc (100%) create mode 100644 brick_breaker/step_07/linux/runner/my_application.cc rename brick_breaker/step_07/linux/{ => runner}/my_application.h (100%) delete mode 100644 brick_breaker/step_08/linux/my_application.cc create mode 100644 brick_breaker/step_08/linux/runner/CMakeLists.txt rename brick_breaker/step_08/linux/{ => runner}/main.cc (100%) create mode 100644 brick_breaker/step_08/linux/runner/my_application.cc rename brick_breaker/step_08/linux/{ => runner}/my_application.h (100%) delete mode 100644 brick_breaker/step_09/linux/my_application.cc create mode 100644 brick_breaker/step_09/linux/runner/CMakeLists.txt rename brick_breaker/step_09/linux/{ => runner}/main.cc (100%) create mode 100644 brick_breaker/step_09/linux/runner/my_application.cc rename brick_breaker/step_09/linux/{ => runner}/my_application.h (100%) delete mode 100644 brick_breaker/step_10/linux/my_application.cc create mode 100644 brick_breaker/step_10/linux/runner/CMakeLists.txt rename brick_breaker/step_10/linux/{ => runner}/main.cc (100%) create mode 100644 brick_breaker/step_10/linux/runner/my_application.cc rename brick_breaker/step_10/linux/{ => runner}/my_application.h (100%) diff --git a/brick_breaker/step_03/.gitignore b/brick_breaker/step_03/.gitignore index 29a3a5017f..79c113f9b5 100644 --- a/brick_breaker/step_03/.gitignore +++ b/brick_breaker/step_03/.gitignore @@ -5,9 +5,11 @@ *.swp .DS_Store .atom/ +.build/ .buildlog/ .history .svn/ +.swiftpm/ migrate_working_dir/ # IntelliJ related diff --git a/brick_breaker/step_03/android/gradle.properties b/brick_breaker/step_03/android/gradle.properties index 2597170821..f018a61817 100644 --- a/brick_breaker/step_03/android/gradle.properties +++ b/brick_breaker/step_03/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/brick_breaker/step_03/android/gradle/wrapper/gradle-wrapper.properties b/brick_breaker/step_03/android/gradle/wrapper/gradle-wrapper.properties index e1ca574ef0..7bb2df6ba6 100644 --- a/brick_breaker/step_03/android/gradle/wrapper/gradle-wrapper.properties +++ b/brick_breaker/step_03/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip diff --git a/brick_breaker/step_03/android/settings.gradle b/brick_breaker/step_03/android/settings.gradle index 536165d35a..b9e43bd376 100644 --- a/brick_breaker/step_03/android/settings.gradle +++ b/brick_breaker/step_03/android/settings.gradle @@ -18,8 +18,8 @@ pluginManagement { plugins { id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "7.3.0" apply false - id "org.jetbrains.kotlin.android" version "1.7.10" apply false + id "com.android.application" version "8.1.0" apply false + id "org.jetbrains.kotlin.android" version "1.8.22" apply false } include ":app" diff --git a/brick_breaker/step_03/ios/Runner.xcodeproj/project.pbxproj b/brick_breaker/step_03/ios/Runner.xcodeproj/project.pbxproj index b713cb952f..c78ae8b4ed 100644 --- a/brick_breaker/step_03/ios/Runner.xcodeproj/project.pbxproj +++ b/brick_breaker/step_03/ios/Runner.xcodeproj/project.pbxproj @@ -7,11 +7,11 @@ objects = { /* Begin PBXBuildFile section */ + 079C3C1D22F2289294620456 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 230907B81ABBBE54EDD3D92A /* Pods_Runner.framework */; }; 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; - 1FDE37956AB4405DD8DF9D25 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 33AC137755E9D28933403024 /* Pods_Runner.framework */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; - 4C5B5C8D953A89E286B2DF58 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CF26FA061076D0F56FAE0E55 /* Pods_RunnerTests.framework */; }; + 64FAAECB542C8A4AB2D063D2 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 468B3D82A8E7362654223F6F /* Pods_RunnerTests.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; @@ -44,35 +44,35 @@ /* Begin PBXFileReference section */ 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; + 230907B81ABBBE54EDD3D92A /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 33AC137755E9D28933403024 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 348DE31F4CCE0D6A451383E7 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 57108351B590B4D8C549D850 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 468B3D82A8E7362654223F6F /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 6BBD6F4451CA6EB726893C37 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 921754D0B5FB7D62B705CBDF /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 914F2DA382F9E2C3A7E83EB5 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; + 9747D350E0CF79FD5C0FECAB /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - C4EE440F4E6EB7D727A0ECC7 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - C7B83657D373454233D42409 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - CF26FA061076D0F56FAE0E55 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - D176009CABAF267344B2A2B1 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - F5DE27A058F7CDB67FD1011C /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + C94A641E14FACBB5C9C82B23 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + D594E156A999614A354720D9 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 1D3E82A57C39EDA2EC389B12 /* Frameworks */ = { + 936D3A87682C3D4617F2544B /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 4C5B5C8D953A89E286B2DF58 /* Pods_RunnerTests.framework in Frameworks */, + 64FAAECB542C8A4AB2D063D2 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -80,7 +80,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 1FDE37956AB4405DD8DF9D25 /* Pods_Runner.framework in Frameworks */, + 079C3C1D22F2289294620456 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -113,8 +113,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - D0C943B286C30AD52804559B /* Pods */, - DAFF73A92485097757492046 /* Frameworks */, + E11E89FF5D3D57A4206FAEE3 /* Pods */, + C1CD4192BD09C48BF2590FF1 /* Frameworks */, ); sourceTree = ""; }; @@ -142,27 +142,27 @@ path = Runner; sourceTree = ""; }; - D0C943B286C30AD52804559B /* Pods */ = { + C1CD4192BD09C48BF2590FF1 /* Frameworks */ = { isa = PBXGroup; children = ( - 921754D0B5FB7D62B705CBDF /* Pods-Runner.debug.xcconfig */, - C7B83657D373454233D42409 /* Pods-Runner.release.xcconfig */, - 57108351B590B4D8C549D850 /* Pods-Runner.profile.xcconfig */, - F5DE27A058F7CDB67FD1011C /* Pods-RunnerTests.debug.xcconfig */, - D176009CABAF267344B2A2B1 /* Pods-RunnerTests.release.xcconfig */, - C4EE440F4E6EB7D727A0ECC7 /* Pods-RunnerTests.profile.xcconfig */, + 230907B81ABBBE54EDD3D92A /* Pods_Runner.framework */, + 468B3D82A8E7362654223F6F /* Pods_RunnerTests.framework */, ); - name = Pods; - path = Pods; + name = Frameworks; sourceTree = ""; }; - DAFF73A92485097757492046 /* Frameworks */ = { + E11E89FF5D3D57A4206FAEE3 /* Pods */ = { isa = PBXGroup; children = ( - 33AC137755E9D28933403024 /* Pods_Runner.framework */, - CF26FA061076D0F56FAE0E55 /* Pods_RunnerTests.framework */, + 348DE31F4CCE0D6A451383E7 /* Pods-Runner.debug.xcconfig */, + 9747D350E0CF79FD5C0FECAB /* Pods-Runner.release.xcconfig */, + D594E156A999614A354720D9 /* Pods-Runner.profile.xcconfig */, + 914F2DA382F9E2C3A7E83EB5 /* Pods-RunnerTests.debug.xcconfig */, + 6BBD6F4451CA6EB726893C37 /* Pods-RunnerTests.release.xcconfig */, + C94A641E14FACBB5C9C82B23 /* Pods-RunnerTests.profile.xcconfig */, ); - name = Frameworks; + name = Pods; + path = Pods; sourceTree = ""; }; /* End PBXGroup section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 6C3F7E652D3D2C8D06E02A15 /* [CP] Check Pods Manifest.lock */, + 7F9FC99CA9E45369A25AF36A /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 1D3E82A57C39EDA2EC389B12 /* Frameworks */, + 936D3A87682C3D4617F2544B /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 8BE71F121AB8460C3BAA040B /* [CP] Check Pods Manifest.lock */, + 9B7E0515E2987B0F2F2161A0 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - EAF9488CA71F427DD9C4C126 /* [CP] Embed Pods Frameworks */, + 66245B0048ADE2CC238D41DE /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -286,29 +286,24 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 6C3F7E652D3D2C8D06E02A15 /* [CP] Check Pods Manifest.lock */ = { + 66245B0048ADE2CC238D41DE /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - 8BE71F121AB8460C3BAA040B /* [CP] Check Pods Manifest.lock */ = { + 7F9FC99CA9E45369A25AF36A /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -323,7 +318,7 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -345,21 +340,26 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - EAF9488CA71F427DD9C4C126 /* [CP] Embed Pods Frameworks */ = { + 9B7E0515E2987B0F2F2161A0 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = F5DE27A058F7CDB67FD1011C /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 914F2DA382F9E2C3A7E83EB5 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = D176009CABAF267344B2A2B1 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 6BBD6F4451CA6EB726893C37 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C4EE440F4E6EB7D727A0ECC7 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = C94A641E14FACBB5C9C82B23 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/brick_breaker/step_03/linux/CMakeLists.txt b/brick_breaker/step_03/linux/CMakeLists.txt index 97c400e174..9f288a67f3 100644 --- a/brick_breaker/step_03/linux/CMakeLists.txt +++ b/brick_breaker/step_03/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/brick_breaker/step_03/linux/runner/CMakeLists.txt b/brick_breaker/step_03/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/brick_breaker/step_03/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/brick_breaker/step_03/linux/main.cc b/brick_breaker/step_03/linux/runner/main.cc similarity index 100% rename from brick_breaker/step_03/linux/main.cc rename to brick_breaker/step_03/linux/runner/main.cc diff --git a/brick_breaker/step_03/linux/my_application.cc b/brick_breaker/step_03/linux/runner/my_application.cc similarity index 93% rename from brick_breaker/step_03/linux/my_application.cc rename to brick_breaker/step_03/linux/runner/my_application.cc index 5f348fea29..f80944a7ba 100644 --- a/brick_breaker/step_03/linux/my_application.cc +++ b/brick_breaker/step_03/linux/runner/my_application.cc @@ -117,6 +117,12 @@ static void my_application_class_init(MyApplicationClass* klass) { static void my_application_init(MyApplication* self) {} MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + return MY_APPLICATION(g_object_new(my_application_get_type(), "application-id", APPLICATION_ID, "flags", G_APPLICATION_NON_UNIQUE, diff --git a/brick_breaker/step_03/linux/my_application.h b/brick_breaker/step_03/linux/runner/my_application.h similarity index 100% rename from brick_breaker/step_03/linux/my_application.h rename to brick_breaker/step_03/linux/runner/my_application.h diff --git a/brick_breaker/step_03/macos/Runner.xcodeproj/project.pbxproj b/brick_breaker/step_03/macos/Runner.xcodeproj/project.pbxproj index a78fe5d634..636a28c53a 100644 --- a/brick_breaker/step_03/macos/Runner.xcodeproj/project.pbxproj +++ b/brick_breaker/step_03/macos/Runner.xcodeproj/project.pbxproj @@ -27,8 +27,8 @@ 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - C4C9574636BE6A4E4FB0B2CE /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6FCB2318B484E6B08BC225C9 /* Pods_RunnerTests.framework */; }; - E90E97A8060D14C84B8DA369 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C56C61E533A3BFDF4C1192D5 /* Pods_Runner.framework */; }; + 4EDE108470BB936D2121DAC2 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C352266AE7D36E6036C311DB /* Pods_Runner.framework */; }; + D1ADFA42F2A712AE0DDB3C4F /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F7DDA05F09C7BFFC6495BD57 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,6 +62,9 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 116A2D736E3DB4E136903D2C /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 16CD08E3FF9AD3D23AC8A89E /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 1771944E11EF7BBD50D4D2FD /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -78,16 +81,13 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 359D845285584F7E54CFA116 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - 444661201D8FE89234659006 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 6FCB2318B484E6B08BC225C9 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 3C11113B321AB882C8752E03 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 8439420B8D7BE1E12B824FFB /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - B6BD88C865BE44852BFF1199 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - C56C61E533A3BFDF4C1192D5 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - CD6AABE5E3D964B13C82E7E4 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - EB9690E51B4629D41E7CA82B /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + C352266AE7D36E6036C311DB /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + C4186463924752EE4186F1BD /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + F0E4CC2439991D402B203A71 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + F7DDA05F09C7BFFC6495BD57 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - C4C9574636BE6A4E4FB0B2CE /* Pods_RunnerTests.framework in Frameworks */, + D1ADFA42F2A712AE0DDB3C4F /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,7 +103,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - E90E97A8060D14C84B8DA369 /* Pods_Runner.framework in Frameworks */, + 4EDE108470BB936D2121DAC2 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -137,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 48B33EF507EB7B28B7E14EFF /* Pods */, + FE0B828880FE4FF908108270 /* Pods */, ); sourceTree = ""; }; @@ -185,27 +185,27 @@ path = Runner; sourceTree = ""; }; - 48B33EF507EB7B28B7E14EFF /* Pods */ = { + D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - B6BD88C865BE44852BFF1199 /* Pods-Runner.debug.xcconfig */, - EB9690E51B4629D41E7CA82B /* Pods-Runner.release.xcconfig */, - 359D845285584F7E54CFA116 /* Pods-Runner.profile.xcconfig */, - 444661201D8FE89234659006 /* Pods-RunnerTests.debug.xcconfig */, - 8439420B8D7BE1E12B824FFB /* Pods-RunnerTests.release.xcconfig */, - CD6AABE5E3D964B13C82E7E4 /* Pods-RunnerTests.profile.xcconfig */, + C352266AE7D36E6036C311DB /* Pods_Runner.framework */, + F7DDA05F09C7BFFC6495BD57 /* Pods_RunnerTests.framework */, ); - name = Pods; - path = Pods; + name = Frameworks; sourceTree = ""; }; - D73912EC22F37F3D000D13A0 /* Frameworks */ = { + FE0B828880FE4FF908108270 /* Pods */ = { isa = PBXGroup; children = ( - C56C61E533A3BFDF4C1192D5 /* Pods_Runner.framework */, - 6FCB2318B484E6B08BC225C9 /* Pods_RunnerTests.framework */, + 16CD08E3FF9AD3D23AC8A89E /* Pods-Runner.debug.xcconfig */, + C4186463924752EE4186F1BD /* Pods-Runner.release.xcconfig */, + 1771944E11EF7BBD50D4D2FD /* Pods-Runner.profile.xcconfig */, + 116A2D736E3DB4E136903D2C /* Pods-RunnerTests.debug.xcconfig */, + F0E4CC2439991D402B203A71 /* Pods-RunnerTests.release.xcconfig */, + 3C11113B321AB882C8752E03 /* Pods-RunnerTests.profile.xcconfig */, ); - name = Frameworks; + name = Pods; + path = Pods; sourceTree = ""; }; /* End PBXGroup section */ @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - C9C1A55E30F374EE956A43CF /* [CP] Check Pods Manifest.lock */, + 53D3984EB9BDCC15FE39632C /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 07CC4A63D503F82167533A3A /* [CP] Check Pods Manifest.lock */, + 8C9C6CB44270EC110E6DCD63 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 16DDFD5B0CD2FD63661C0661 /* [CP] Embed Pods Frameworks */, + 4BE7093447D6D7ADBFBF4C29 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,84 +323,84 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 07CC4A63D503F82167533A3A /* [CP] Check Pods Manifest.lock */ = { + 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", ); - name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; }; - 16DDFD5B0CD2FD63661C0661 /* [CP] Embed Pods Frameworks */ = { + 33CC111E2044C6BF0003C045 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + Flutter/ephemeral/FlutterInputs.xcfilelist, + ); + inputPaths = ( + Flutter/ephemeral/tripwire, ); - name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + Flutter/ephemeral/FlutterOutputs.xcfilelist, + ); + outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; + shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 3399D490228B24CF009A79C7 /* ShellScript */ = { + 4BE7093447D6D7ADBFBF4C29 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - ); + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; }; - 33CC111E2044C6BF0003C045 /* ShellScript */ = { + 53D3984EB9BDCC15FE39632C /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - Flutter/ephemeral/FlutterInputs.xcfilelist, ); inputPaths = ( - Flutter/ephemeral/tripwire, + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - Flutter/ephemeral/FlutterOutputs.xcfilelist, ); outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - C9C1A55E30F374EE956A43CF /* [CP] Check Pods Manifest.lock */ = { + 8C9C6CB44270EC110E6DCD63 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -415,7 +415,7 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 444661201D8FE89234659006 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 116A2D736E3DB4E136903D2C /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 8439420B8D7BE1E12B824FFB /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = F0E4CC2439991D402B203A71 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = CD6AABE5E3D964B13C82E7E4 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 3C11113B321AB882C8752E03 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/brick_breaker/step_03/macos/Runner/AppDelegate.swift b/brick_breaker/step_03/macos/Runner/AppDelegate.swift index 8e02df2888..b3c1761412 100644 --- a/brick_breaker/step_03/macos/Runner/AppDelegate.swift +++ b/brick_breaker/step_03/macos/Runner/AppDelegate.swift @@ -6,4 +6,8 @@ class AppDelegate: FlutterAppDelegate { override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { return true } + + override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { + return true + } } diff --git a/brick_breaker/step_03/pubspec.yaml b/brick_breaker/step_03/pubspec.yaml index 4da1f0923a..ce0c17eaf5 100644 --- a/brick_breaker/step_03/pubspec.yaml +++ b/brick_breaker/step_03/pubspec.yaml @@ -16,7 +16,7 @@ dependencies: dev_dependencies: flutter_test: sdk: flutter - flutter_lints: ^4.0.0 + flutter_lints: ^5.0.0 flutter: uses-material-design: true diff --git a/brick_breaker/step_03/web/index.html b/brick_breaker/step_03/web/index.html index 0ffbea0397..da690bb6c1 100644 --- a/brick_breaker/step_03/web/index.html +++ b/brick_breaker/step_03/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/brick_breaker/step_04/.gitignore b/brick_breaker/step_04/.gitignore index 29a3a5017f..79c113f9b5 100644 --- a/brick_breaker/step_04/.gitignore +++ b/brick_breaker/step_04/.gitignore @@ -5,9 +5,11 @@ *.swp .DS_Store .atom/ +.build/ .buildlog/ .history .svn/ +.swiftpm/ migrate_working_dir/ # IntelliJ related diff --git a/brick_breaker/step_04/android/gradle.properties b/brick_breaker/step_04/android/gradle.properties index 2597170821..f018a61817 100644 --- a/brick_breaker/step_04/android/gradle.properties +++ b/brick_breaker/step_04/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/brick_breaker/step_04/android/gradle/wrapper/gradle-wrapper.properties b/brick_breaker/step_04/android/gradle/wrapper/gradle-wrapper.properties index e1ca574ef0..7bb2df6ba6 100644 --- a/brick_breaker/step_04/android/gradle/wrapper/gradle-wrapper.properties +++ b/brick_breaker/step_04/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip diff --git a/brick_breaker/step_04/android/settings.gradle b/brick_breaker/step_04/android/settings.gradle index 536165d35a..b9e43bd376 100644 --- a/brick_breaker/step_04/android/settings.gradle +++ b/brick_breaker/step_04/android/settings.gradle @@ -18,8 +18,8 @@ pluginManagement { plugins { id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "7.3.0" apply false - id "org.jetbrains.kotlin.android" version "1.7.10" apply false + id "com.android.application" version "8.1.0" apply false + id "org.jetbrains.kotlin.android" version "1.8.22" apply false } include ":app" diff --git a/brick_breaker/step_04/ios/Runner.xcodeproj/project.pbxproj b/brick_breaker/step_04/ios/Runner.xcodeproj/project.pbxproj index b713cb952f..c78ae8b4ed 100644 --- a/brick_breaker/step_04/ios/Runner.xcodeproj/project.pbxproj +++ b/brick_breaker/step_04/ios/Runner.xcodeproj/project.pbxproj @@ -7,11 +7,11 @@ objects = { /* Begin PBXBuildFile section */ + 079C3C1D22F2289294620456 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 230907B81ABBBE54EDD3D92A /* Pods_Runner.framework */; }; 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; - 1FDE37956AB4405DD8DF9D25 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 33AC137755E9D28933403024 /* Pods_Runner.framework */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; - 4C5B5C8D953A89E286B2DF58 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CF26FA061076D0F56FAE0E55 /* Pods_RunnerTests.framework */; }; + 64FAAECB542C8A4AB2D063D2 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 468B3D82A8E7362654223F6F /* Pods_RunnerTests.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; @@ -44,35 +44,35 @@ /* Begin PBXFileReference section */ 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; + 230907B81ABBBE54EDD3D92A /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 33AC137755E9D28933403024 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 348DE31F4CCE0D6A451383E7 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 57108351B590B4D8C549D850 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 468B3D82A8E7362654223F6F /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 6BBD6F4451CA6EB726893C37 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 921754D0B5FB7D62B705CBDF /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 914F2DA382F9E2C3A7E83EB5 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; + 9747D350E0CF79FD5C0FECAB /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - C4EE440F4E6EB7D727A0ECC7 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - C7B83657D373454233D42409 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - CF26FA061076D0F56FAE0E55 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - D176009CABAF267344B2A2B1 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - F5DE27A058F7CDB67FD1011C /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + C94A641E14FACBB5C9C82B23 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + D594E156A999614A354720D9 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 1D3E82A57C39EDA2EC389B12 /* Frameworks */ = { + 936D3A87682C3D4617F2544B /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 4C5B5C8D953A89E286B2DF58 /* Pods_RunnerTests.framework in Frameworks */, + 64FAAECB542C8A4AB2D063D2 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -80,7 +80,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 1FDE37956AB4405DD8DF9D25 /* Pods_Runner.framework in Frameworks */, + 079C3C1D22F2289294620456 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -113,8 +113,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - D0C943B286C30AD52804559B /* Pods */, - DAFF73A92485097757492046 /* Frameworks */, + E11E89FF5D3D57A4206FAEE3 /* Pods */, + C1CD4192BD09C48BF2590FF1 /* Frameworks */, ); sourceTree = ""; }; @@ -142,27 +142,27 @@ path = Runner; sourceTree = ""; }; - D0C943B286C30AD52804559B /* Pods */ = { + C1CD4192BD09C48BF2590FF1 /* Frameworks */ = { isa = PBXGroup; children = ( - 921754D0B5FB7D62B705CBDF /* Pods-Runner.debug.xcconfig */, - C7B83657D373454233D42409 /* Pods-Runner.release.xcconfig */, - 57108351B590B4D8C549D850 /* Pods-Runner.profile.xcconfig */, - F5DE27A058F7CDB67FD1011C /* Pods-RunnerTests.debug.xcconfig */, - D176009CABAF267344B2A2B1 /* Pods-RunnerTests.release.xcconfig */, - C4EE440F4E6EB7D727A0ECC7 /* Pods-RunnerTests.profile.xcconfig */, + 230907B81ABBBE54EDD3D92A /* Pods_Runner.framework */, + 468B3D82A8E7362654223F6F /* Pods_RunnerTests.framework */, ); - name = Pods; - path = Pods; + name = Frameworks; sourceTree = ""; }; - DAFF73A92485097757492046 /* Frameworks */ = { + E11E89FF5D3D57A4206FAEE3 /* Pods */ = { isa = PBXGroup; children = ( - 33AC137755E9D28933403024 /* Pods_Runner.framework */, - CF26FA061076D0F56FAE0E55 /* Pods_RunnerTests.framework */, + 348DE31F4CCE0D6A451383E7 /* Pods-Runner.debug.xcconfig */, + 9747D350E0CF79FD5C0FECAB /* Pods-Runner.release.xcconfig */, + D594E156A999614A354720D9 /* Pods-Runner.profile.xcconfig */, + 914F2DA382F9E2C3A7E83EB5 /* Pods-RunnerTests.debug.xcconfig */, + 6BBD6F4451CA6EB726893C37 /* Pods-RunnerTests.release.xcconfig */, + C94A641E14FACBB5C9C82B23 /* Pods-RunnerTests.profile.xcconfig */, ); - name = Frameworks; + name = Pods; + path = Pods; sourceTree = ""; }; /* End PBXGroup section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 6C3F7E652D3D2C8D06E02A15 /* [CP] Check Pods Manifest.lock */, + 7F9FC99CA9E45369A25AF36A /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 1D3E82A57C39EDA2EC389B12 /* Frameworks */, + 936D3A87682C3D4617F2544B /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 8BE71F121AB8460C3BAA040B /* [CP] Check Pods Manifest.lock */, + 9B7E0515E2987B0F2F2161A0 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - EAF9488CA71F427DD9C4C126 /* [CP] Embed Pods Frameworks */, + 66245B0048ADE2CC238D41DE /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -286,29 +286,24 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 6C3F7E652D3D2C8D06E02A15 /* [CP] Check Pods Manifest.lock */ = { + 66245B0048ADE2CC238D41DE /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - 8BE71F121AB8460C3BAA040B /* [CP] Check Pods Manifest.lock */ = { + 7F9FC99CA9E45369A25AF36A /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -323,7 +318,7 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -345,21 +340,26 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - EAF9488CA71F427DD9C4C126 /* [CP] Embed Pods Frameworks */ = { + 9B7E0515E2987B0F2F2161A0 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = F5DE27A058F7CDB67FD1011C /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 914F2DA382F9E2C3A7E83EB5 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = D176009CABAF267344B2A2B1 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 6BBD6F4451CA6EB726893C37 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C4EE440F4E6EB7D727A0ECC7 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = C94A641E14FACBB5C9C82B23 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/brick_breaker/step_04/linux/CMakeLists.txt b/brick_breaker/step_04/linux/CMakeLists.txt index 97c400e174..9f288a67f3 100644 --- a/brick_breaker/step_04/linux/CMakeLists.txt +++ b/brick_breaker/step_04/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/brick_breaker/step_04/linux/runner/CMakeLists.txt b/brick_breaker/step_04/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/brick_breaker/step_04/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/brick_breaker/step_04/linux/main.cc b/brick_breaker/step_04/linux/runner/main.cc similarity index 100% rename from brick_breaker/step_04/linux/main.cc rename to brick_breaker/step_04/linux/runner/main.cc diff --git a/brick_breaker/step_04/linux/my_application.cc b/brick_breaker/step_04/linux/runner/my_application.cc similarity index 93% rename from brick_breaker/step_04/linux/my_application.cc rename to brick_breaker/step_04/linux/runner/my_application.cc index 5f348fea29..f80944a7ba 100644 --- a/brick_breaker/step_04/linux/my_application.cc +++ b/brick_breaker/step_04/linux/runner/my_application.cc @@ -117,6 +117,12 @@ static void my_application_class_init(MyApplicationClass* klass) { static void my_application_init(MyApplication* self) {} MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + return MY_APPLICATION(g_object_new(my_application_get_type(), "application-id", APPLICATION_ID, "flags", G_APPLICATION_NON_UNIQUE, diff --git a/brick_breaker/step_04/linux/my_application.h b/brick_breaker/step_04/linux/runner/my_application.h similarity index 100% rename from brick_breaker/step_04/linux/my_application.h rename to brick_breaker/step_04/linux/runner/my_application.h diff --git a/brick_breaker/step_04/macos/Runner.xcodeproj/project.pbxproj b/brick_breaker/step_04/macos/Runner.xcodeproj/project.pbxproj index a78fe5d634..636a28c53a 100644 --- a/brick_breaker/step_04/macos/Runner.xcodeproj/project.pbxproj +++ b/brick_breaker/step_04/macos/Runner.xcodeproj/project.pbxproj @@ -27,8 +27,8 @@ 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - C4C9574636BE6A4E4FB0B2CE /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6FCB2318B484E6B08BC225C9 /* Pods_RunnerTests.framework */; }; - E90E97A8060D14C84B8DA369 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C56C61E533A3BFDF4C1192D5 /* Pods_Runner.framework */; }; + 4EDE108470BB936D2121DAC2 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C352266AE7D36E6036C311DB /* Pods_Runner.framework */; }; + D1ADFA42F2A712AE0DDB3C4F /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F7DDA05F09C7BFFC6495BD57 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,6 +62,9 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 116A2D736E3DB4E136903D2C /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 16CD08E3FF9AD3D23AC8A89E /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 1771944E11EF7BBD50D4D2FD /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -78,16 +81,13 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 359D845285584F7E54CFA116 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - 444661201D8FE89234659006 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 6FCB2318B484E6B08BC225C9 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 3C11113B321AB882C8752E03 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 8439420B8D7BE1E12B824FFB /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - B6BD88C865BE44852BFF1199 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - C56C61E533A3BFDF4C1192D5 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - CD6AABE5E3D964B13C82E7E4 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - EB9690E51B4629D41E7CA82B /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + C352266AE7D36E6036C311DB /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + C4186463924752EE4186F1BD /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + F0E4CC2439991D402B203A71 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + F7DDA05F09C7BFFC6495BD57 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - C4C9574636BE6A4E4FB0B2CE /* Pods_RunnerTests.framework in Frameworks */, + D1ADFA42F2A712AE0DDB3C4F /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,7 +103,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - E90E97A8060D14C84B8DA369 /* Pods_Runner.framework in Frameworks */, + 4EDE108470BB936D2121DAC2 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -137,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 48B33EF507EB7B28B7E14EFF /* Pods */, + FE0B828880FE4FF908108270 /* Pods */, ); sourceTree = ""; }; @@ -185,27 +185,27 @@ path = Runner; sourceTree = ""; }; - 48B33EF507EB7B28B7E14EFF /* Pods */ = { + D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - B6BD88C865BE44852BFF1199 /* Pods-Runner.debug.xcconfig */, - EB9690E51B4629D41E7CA82B /* Pods-Runner.release.xcconfig */, - 359D845285584F7E54CFA116 /* Pods-Runner.profile.xcconfig */, - 444661201D8FE89234659006 /* Pods-RunnerTests.debug.xcconfig */, - 8439420B8D7BE1E12B824FFB /* Pods-RunnerTests.release.xcconfig */, - CD6AABE5E3D964B13C82E7E4 /* Pods-RunnerTests.profile.xcconfig */, + C352266AE7D36E6036C311DB /* Pods_Runner.framework */, + F7DDA05F09C7BFFC6495BD57 /* Pods_RunnerTests.framework */, ); - name = Pods; - path = Pods; + name = Frameworks; sourceTree = ""; }; - D73912EC22F37F3D000D13A0 /* Frameworks */ = { + FE0B828880FE4FF908108270 /* Pods */ = { isa = PBXGroup; children = ( - C56C61E533A3BFDF4C1192D5 /* Pods_Runner.framework */, - 6FCB2318B484E6B08BC225C9 /* Pods_RunnerTests.framework */, + 16CD08E3FF9AD3D23AC8A89E /* Pods-Runner.debug.xcconfig */, + C4186463924752EE4186F1BD /* Pods-Runner.release.xcconfig */, + 1771944E11EF7BBD50D4D2FD /* Pods-Runner.profile.xcconfig */, + 116A2D736E3DB4E136903D2C /* Pods-RunnerTests.debug.xcconfig */, + F0E4CC2439991D402B203A71 /* Pods-RunnerTests.release.xcconfig */, + 3C11113B321AB882C8752E03 /* Pods-RunnerTests.profile.xcconfig */, ); - name = Frameworks; + name = Pods; + path = Pods; sourceTree = ""; }; /* End PBXGroup section */ @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - C9C1A55E30F374EE956A43CF /* [CP] Check Pods Manifest.lock */, + 53D3984EB9BDCC15FE39632C /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 07CC4A63D503F82167533A3A /* [CP] Check Pods Manifest.lock */, + 8C9C6CB44270EC110E6DCD63 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 16DDFD5B0CD2FD63661C0661 /* [CP] Embed Pods Frameworks */, + 4BE7093447D6D7ADBFBF4C29 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,84 +323,84 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 07CC4A63D503F82167533A3A /* [CP] Check Pods Manifest.lock */ = { + 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", ); - name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; }; - 16DDFD5B0CD2FD63661C0661 /* [CP] Embed Pods Frameworks */ = { + 33CC111E2044C6BF0003C045 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + Flutter/ephemeral/FlutterInputs.xcfilelist, + ); + inputPaths = ( + Flutter/ephemeral/tripwire, ); - name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + Flutter/ephemeral/FlutterOutputs.xcfilelist, + ); + outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; + shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 3399D490228B24CF009A79C7 /* ShellScript */ = { + 4BE7093447D6D7ADBFBF4C29 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - ); + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; }; - 33CC111E2044C6BF0003C045 /* ShellScript */ = { + 53D3984EB9BDCC15FE39632C /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - Flutter/ephemeral/FlutterInputs.xcfilelist, ); inputPaths = ( - Flutter/ephemeral/tripwire, + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - Flutter/ephemeral/FlutterOutputs.xcfilelist, ); outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - C9C1A55E30F374EE956A43CF /* [CP] Check Pods Manifest.lock */ = { + 8C9C6CB44270EC110E6DCD63 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -415,7 +415,7 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 444661201D8FE89234659006 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 116A2D736E3DB4E136903D2C /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 8439420B8D7BE1E12B824FFB /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = F0E4CC2439991D402B203A71 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = CD6AABE5E3D964B13C82E7E4 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 3C11113B321AB882C8752E03 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/brick_breaker/step_04/macos/Runner/AppDelegate.swift b/brick_breaker/step_04/macos/Runner/AppDelegate.swift index 8e02df2888..b3c1761412 100644 --- a/brick_breaker/step_04/macos/Runner/AppDelegate.swift +++ b/brick_breaker/step_04/macos/Runner/AppDelegate.swift @@ -6,4 +6,8 @@ class AppDelegate: FlutterAppDelegate { override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { return true } + + override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { + return true + } } diff --git a/brick_breaker/step_04/pubspec.yaml b/brick_breaker/step_04/pubspec.yaml index 4da1f0923a..ce0c17eaf5 100644 --- a/brick_breaker/step_04/pubspec.yaml +++ b/brick_breaker/step_04/pubspec.yaml @@ -16,7 +16,7 @@ dependencies: dev_dependencies: flutter_test: sdk: flutter - flutter_lints: ^4.0.0 + flutter_lints: ^5.0.0 flutter: uses-material-design: true diff --git a/brick_breaker/step_04/web/index.html b/brick_breaker/step_04/web/index.html index 0ffbea0397..da690bb6c1 100644 --- a/brick_breaker/step_04/web/index.html +++ b/brick_breaker/step_04/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/brick_breaker/step_05/.gitignore b/brick_breaker/step_05/.gitignore index 29a3a5017f..79c113f9b5 100644 --- a/brick_breaker/step_05/.gitignore +++ b/brick_breaker/step_05/.gitignore @@ -5,9 +5,11 @@ *.swp .DS_Store .atom/ +.build/ .buildlog/ .history .svn/ +.swiftpm/ migrate_working_dir/ # IntelliJ related diff --git a/brick_breaker/step_05/android/gradle.properties b/brick_breaker/step_05/android/gradle.properties index 2597170821..f018a61817 100644 --- a/brick_breaker/step_05/android/gradle.properties +++ b/brick_breaker/step_05/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/brick_breaker/step_05/android/gradle/wrapper/gradle-wrapper.properties b/brick_breaker/step_05/android/gradle/wrapper/gradle-wrapper.properties index e1ca574ef0..7bb2df6ba6 100644 --- a/brick_breaker/step_05/android/gradle/wrapper/gradle-wrapper.properties +++ b/brick_breaker/step_05/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip diff --git a/brick_breaker/step_05/android/settings.gradle b/brick_breaker/step_05/android/settings.gradle index 536165d35a..b9e43bd376 100644 --- a/brick_breaker/step_05/android/settings.gradle +++ b/brick_breaker/step_05/android/settings.gradle @@ -18,8 +18,8 @@ pluginManagement { plugins { id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "7.3.0" apply false - id "org.jetbrains.kotlin.android" version "1.7.10" apply false + id "com.android.application" version "8.1.0" apply false + id "org.jetbrains.kotlin.android" version "1.8.22" apply false } include ":app" diff --git a/brick_breaker/step_05/ios/Runner.xcodeproj/project.pbxproj b/brick_breaker/step_05/ios/Runner.xcodeproj/project.pbxproj index b713cb952f..c78ae8b4ed 100644 --- a/brick_breaker/step_05/ios/Runner.xcodeproj/project.pbxproj +++ b/brick_breaker/step_05/ios/Runner.xcodeproj/project.pbxproj @@ -7,11 +7,11 @@ objects = { /* Begin PBXBuildFile section */ + 079C3C1D22F2289294620456 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 230907B81ABBBE54EDD3D92A /* Pods_Runner.framework */; }; 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; - 1FDE37956AB4405DD8DF9D25 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 33AC137755E9D28933403024 /* Pods_Runner.framework */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; - 4C5B5C8D953A89E286B2DF58 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CF26FA061076D0F56FAE0E55 /* Pods_RunnerTests.framework */; }; + 64FAAECB542C8A4AB2D063D2 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 468B3D82A8E7362654223F6F /* Pods_RunnerTests.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; @@ -44,35 +44,35 @@ /* Begin PBXFileReference section */ 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; + 230907B81ABBBE54EDD3D92A /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 33AC137755E9D28933403024 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 348DE31F4CCE0D6A451383E7 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 57108351B590B4D8C549D850 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 468B3D82A8E7362654223F6F /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 6BBD6F4451CA6EB726893C37 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 921754D0B5FB7D62B705CBDF /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 914F2DA382F9E2C3A7E83EB5 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; + 9747D350E0CF79FD5C0FECAB /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - C4EE440F4E6EB7D727A0ECC7 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - C7B83657D373454233D42409 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - CF26FA061076D0F56FAE0E55 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - D176009CABAF267344B2A2B1 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - F5DE27A058F7CDB67FD1011C /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + C94A641E14FACBB5C9C82B23 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + D594E156A999614A354720D9 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 1D3E82A57C39EDA2EC389B12 /* Frameworks */ = { + 936D3A87682C3D4617F2544B /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 4C5B5C8D953A89E286B2DF58 /* Pods_RunnerTests.framework in Frameworks */, + 64FAAECB542C8A4AB2D063D2 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -80,7 +80,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 1FDE37956AB4405DD8DF9D25 /* Pods_Runner.framework in Frameworks */, + 079C3C1D22F2289294620456 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -113,8 +113,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - D0C943B286C30AD52804559B /* Pods */, - DAFF73A92485097757492046 /* Frameworks */, + E11E89FF5D3D57A4206FAEE3 /* Pods */, + C1CD4192BD09C48BF2590FF1 /* Frameworks */, ); sourceTree = ""; }; @@ -142,27 +142,27 @@ path = Runner; sourceTree = ""; }; - D0C943B286C30AD52804559B /* Pods */ = { + C1CD4192BD09C48BF2590FF1 /* Frameworks */ = { isa = PBXGroup; children = ( - 921754D0B5FB7D62B705CBDF /* Pods-Runner.debug.xcconfig */, - C7B83657D373454233D42409 /* Pods-Runner.release.xcconfig */, - 57108351B590B4D8C549D850 /* Pods-Runner.profile.xcconfig */, - F5DE27A058F7CDB67FD1011C /* Pods-RunnerTests.debug.xcconfig */, - D176009CABAF267344B2A2B1 /* Pods-RunnerTests.release.xcconfig */, - C4EE440F4E6EB7D727A0ECC7 /* Pods-RunnerTests.profile.xcconfig */, + 230907B81ABBBE54EDD3D92A /* Pods_Runner.framework */, + 468B3D82A8E7362654223F6F /* Pods_RunnerTests.framework */, ); - name = Pods; - path = Pods; + name = Frameworks; sourceTree = ""; }; - DAFF73A92485097757492046 /* Frameworks */ = { + E11E89FF5D3D57A4206FAEE3 /* Pods */ = { isa = PBXGroup; children = ( - 33AC137755E9D28933403024 /* Pods_Runner.framework */, - CF26FA061076D0F56FAE0E55 /* Pods_RunnerTests.framework */, + 348DE31F4CCE0D6A451383E7 /* Pods-Runner.debug.xcconfig */, + 9747D350E0CF79FD5C0FECAB /* Pods-Runner.release.xcconfig */, + D594E156A999614A354720D9 /* Pods-Runner.profile.xcconfig */, + 914F2DA382F9E2C3A7E83EB5 /* Pods-RunnerTests.debug.xcconfig */, + 6BBD6F4451CA6EB726893C37 /* Pods-RunnerTests.release.xcconfig */, + C94A641E14FACBB5C9C82B23 /* Pods-RunnerTests.profile.xcconfig */, ); - name = Frameworks; + name = Pods; + path = Pods; sourceTree = ""; }; /* End PBXGroup section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 6C3F7E652D3D2C8D06E02A15 /* [CP] Check Pods Manifest.lock */, + 7F9FC99CA9E45369A25AF36A /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 1D3E82A57C39EDA2EC389B12 /* Frameworks */, + 936D3A87682C3D4617F2544B /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 8BE71F121AB8460C3BAA040B /* [CP] Check Pods Manifest.lock */, + 9B7E0515E2987B0F2F2161A0 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - EAF9488CA71F427DD9C4C126 /* [CP] Embed Pods Frameworks */, + 66245B0048ADE2CC238D41DE /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -286,29 +286,24 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 6C3F7E652D3D2C8D06E02A15 /* [CP] Check Pods Manifest.lock */ = { + 66245B0048ADE2CC238D41DE /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - 8BE71F121AB8460C3BAA040B /* [CP] Check Pods Manifest.lock */ = { + 7F9FC99CA9E45369A25AF36A /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -323,7 +318,7 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -345,21 +340,26 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - EAF9488CA71F427DD9C4C126 /* [CP] Embed Pods Frameworks */ = { + 9B7E0515E2987B0F2F2161A0 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = F5DE27A058F7CDB67FD1011C /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 914F2DA382F9E2C3A7E83EB5 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = D176009CABAF267344B2A2B1 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 6BBD6F4451CA6EB726893C37 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C4EE440F4E6EB7D727A0ECC7 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = C94A641E14FACBB5C9C82B23 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/brick_breaker/step_05/linux/CMakeLists.txt b/brick_breaker/step_05/linux/CMakeLists.txt index 97c400e174..9f288a67f3 100644 --- a/brick_breaker/step_05/linux/CMakeLists.txt +++ b/brick_breaker/step_05/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/brick_breaker/step_05/linux/runner/CMakeLists.txt b/brick_breaker/step_05/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/brick_breaker/step_05/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/brick_breaker/step_05/linux/main.cc b/brick_breaker/step_05/linux/runner/main.cc similarity index 100% rename from brick_breaker/step_05/linux/main.cc rename to brick_breaker/step_05/linux/runner/main.cc diff --git a/brick_breaker/step_05/linux/my_application.cc b/brick_breaker/step_05/linux/runner/my_application.cc similarity index 93% rename from brick_breaker/step_05/linux/my_application.cc rename to brick_breaker/step_05/linux/runner/my_application.cc index 5f348fea29..f80944a7ba 100644 --- a/brick_breaker/step_05/linux/my_application.cc +++ b/brick_breaker/step_05/linux/runner/my_application.cc @@ -117,6 +117,12 @@ static void my_application_class_init(MyApplicationClass* klass) { static void my_application_init(MyApplication* self) {} MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + return MY_APPLICATION(g_object_new(my_application_get_type(), "application-id", APPLICATION_ID, "flags", G_APPLICATION_NON_UNIQUE, diff --git a/brick_breaker/step_05/linux/my_application.h b/brick_breaker/step_05/linux/runner/my_application.h similarity index 100% rename from brick_breaker/step_05/linux/my_application.h rename to brick_breaker/step_05/linux/runner/my_application.h diff --git a/brick_breaker/step_05/macos/Runner.xcodeproj/project.pbxproj b/brick_breaker/step_05/macos/Runner.xcodeproj/project.pbxproj index a78fe5d634..636a28c53a 100644 --- a/brick_breaker/step_05/macos/Runner.xcodeproj/project.pbxproj +++ b/brick_breaker/step_05/macos/Runner.xcodeproj/project.pbxproj @@ -27,8 +27,8 @@ 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - C4C9574636BE6A4E4FB0B2CE /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6FCB2318B484E6B08BC225C9 /* Pods_RunnerTests.framework */; }; - E90E97A8060D14C84B8DA369 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C56C61E533A3BFDF4C1192D5 /* Pods_Runner.framework */; }; + 4EDE108470BB936D2121DAC2 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C352266AE7D36E6036C311DB /* Pods_Runner.framework */; }; + D1ADFA42F2A712AE0DDB3C4F /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F7DDA05F09C7BFFC6495BD57 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,6 +62,9 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 116A2D736E3DB4E136903D2C /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 16CD08E3FF9AD3D23AC8A89E /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 1771944E11EF7BBD50D4D2FD /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -78,16 +81,13 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 359D845285584F7E54CFA116 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - 444661201D8FE89234659006 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 6FCB2318B484E6B08BC225C9 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 3C11113B321AB882C8752E03 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 8439420B8D7BE1E12B824FFB /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - B6BD88C865BE44852BFF1199 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - C56C61E533A3BFDF4C1192D5 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - CD6AABE5E3D964B13C82E7E4 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - EB9690E51B4629D41E7CA82B /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + C352266AE7D36E6036C311DB /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + C4186463924752EE4186F1BD /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + F0E4CC2439991D402B203A71 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + F7DDA05F09C7BFFC6495BD57 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - C4C9574636BE6A4E4FB0B2CE /* Pods_RunnerTests.framework in Frameworks */, + D1ADFA42F2A712AE0DDB3C4F /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,7 +103,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - E90E97A8060D14C84B8DA369 /* Pods_Runner.framework in Frameworks */, + 4EDE108470BB936D2121DAC2 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -137,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 48B33EF507EB7B28B7E14EFF /* Pods */, + FE0B828880FE4FF908108270 /* Pods */, ); sourceTree = ""; }; @@ -185,27 +185,27 @@ path = Runner; sourceTree = ""; }; - 48B33EF507EB7B28B7E14EFF /* Pods */ = { + D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - B6BD88C865BE44852BFF1199 /* Pods-Runner.debug.xcconfig */, - EB9690E51B4629D41E7CA82B /* Pods-Runner.release.xcconfig */, - 359D845285584F7E54CFA116 /* Pods-Runner.profile.xcconfig */, - 444661201D8FE89234659006 /* Pods-RunnerTests.debug.xcconfig */, - 8439420B8D7BE1E12B824FFB /* Pods-RunnerTests.release.xcconfig */, - CD6AABE5E3D964B13C82E7E4 /* Pods-RunnerTests.profile.xcconfig */, + C352266AE7D36E6036C311DB /* Pods_Runner.framework */, + F7DDA05F09C7BFFC6495BD57 /* Pods_RunnerTests.framework */, ); - name = Pods; - path = Pods; + name = Frameworks; sourceTree = ""; }; - D73912EC22F37F3D000D13A0 /* Frameworks */ = { + FE0B828880FE4FF908108270 /* Pods */ = { isa = PBXGroup; children = ( - C56C61E533A3BFDF4C1192D5 /* Pods_Runner.framework */, - 6FCB2318B484E6B08BC225C9 /* Pods_RunnerTests.framework */, + 16CD08E3FF9AD3D23AC8A89E /* Pods-Runner.debug.xcconfig */, + C4186463924752EE4186F1BD /* Pods-Runner.release.xcconfig */, + 1771944E11EF7BBD50D4D2FD /* Pods-Runner.profile.xcconfig */, + 116A2D736E3DB4E136903D2C /* Pods-RunnerTests.debug.xcconfig */, + F0E4CC2439991D402B203A71 /* Pods-RunnerTests.release.xcconfig */, + 3C11113B321AB882C8752E03 /* Pods-RunnerTests.profile.xcconfig */, ); - name = Frameworks; + name = Pods; + path = Pods; sourceTree = ""; }; /* End PBXGroup section */ @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - C9C1A55E30F374EE956A43CF /* [CP] Check Pods Manifest.lock */, + 53D3984EB9BDCC15FE39632C /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 07CC4A63D503F82167533A3A /* [CP] Check Pods Manifest.lock */, + 8C9C6CB44270EC110E6DCD63 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 16DDFD5B0CD2FD63661C0661 /* [CP] Embed Pods Frameworks */, + 4BE7093447D6D7ADBFBF4C29 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,84 +323,84 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 07CC4A63D503F82167533A3A /* [CP] Check Pods Manifest.lock */ = { + 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", ); - name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; }; - 16DDFD5B0CD2FD63661C0661 /* [CP] Embed Pods Frameworks */ = { + 33CC111E2044C6BF0003C045 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + Flutter/ephemeral/FlutterInputs.xcfilelist, + ); + inputPaths = ( + Flutter/ephemeral/tripwire, ); - name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + Flutter/ephemeral/FlutterOutputs.xcfilelist, + ); + outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; + shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 3399D490228B24CF009A79C7 /* ShellScript */ = { + 4BE7093447D6D7ADBFBF4C29 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - ); + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; }; - 33CC111E2044C6BF0003C045 /* ShellScript */ = { + 53D3984EB9BDCC15FE39632C /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - Flutter/ephemeral/FlutterInputs.xcfilelist, ); inputPaths = ( - Flutter/ephemeral/tripwire, + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - Flutter/ephemeral/FlutterOutputs.xcfilelist, ); outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - C9C1A55E30F374EE956A43CF /* [CP] Check Pods Manifest.lock */ = { + 8C9C6CB44270EC110E6DCD63 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -415,7 +415,7 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 444661201D8FE89234659006 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 116A2D736E3DB4E136903D2C /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 8439420B8D7BE1E12B824FFB /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = F0E4CC2439991D402B203A71 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = CD6AABE5E3D964B13C82E7E4 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 3C11113B321AB882C8752E03 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/brick_breaker/step_05/macos/Runner/AppDelegate.swift b/brick_breaker/step_05/macos/Runner/AppDelegate.swift index 8e02df2888..b3c1761412 100644 --- a/brick_breaker/step_05/macos/Runner/AppDelegate.swift +++ b/brick_breaker/step_05/macos/Runner/AppDelegate.swift @@ -6,4 +6,8 @@ class AppDelegate: FlutterAppDelegate { override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { return true } + + override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { + return true + } } diff --git a/brick_breaker/step_05/pubspec.yaml b/brick_breaker/step_05/pubspec.yaml index 4da1f0923a..ce0c17eaf5 100644 --- a/brick_breaker/step_05/pubspec.yaml +++ b/brick_breaker/step_05/pubspec.yaml @@ -16,7 +16,7 @@ dependencies: dev_dependencies: flutter_test: sdk: flutter - flutter_lints: ^4.0.0 + flutter_lints: ^5.0.0 flutter: uses-material-design: true diff --git a/brick_breaker/step_05/web/index.html b/brick_breaker/step_05/web/index.html index 0ffbea0397..da690bb6c1 100644 --- a/brick_breaker/step_05/web/index.html +++ b/brick_breaker/step_05/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/brick_breaker/step_06/.gitignore b/brick_breaker/step_06/.gitignore index 29a3a5017f..79c113f9b5 100644 --- a/brick_breaker/step_06/.gitignore +++ b/brick_breaker/step_06/.gitignore @@ -5,9 +5,11 @@ *.swp .DS_Store .atom/ +.build/ .buildlog/ .history .svn/ +.swiftpm/ migrate_working_dir/ # IntelliJ related diff --git a/brick_breaker/step_06/android/gradle.properties b/brick_breaker/step_06/android/gradle.properties index 2597170821..f018a61817 100644 --- a/brick_breaker/step_06/android/gradle.properties +++ b/brick_breaker/step_06/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/brick_breaker/step_06/android/gradle/wrapper/gradle-wrapper.properties b/brick_breaker/step_06/android/gradle/wrapper/gradle-wrapper.properties index e1ca574ef0..7bb2df6ba6 100644 --- a/brick_breaker/step_06/android/gradle/wrapper/gradle-wrapper.properties +++ b/brick_breaker/step_06/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip diff --git a/brick_breaker/step_06/android/settings.gradle b/brick_breaker/step_06/android/settings.gradle index 536165d35a..b9e43bd376 100644 --- a/brick_breaker/step_06/android/settings.gradle +++ b/brick_breaker/step_06/android/settings.gradle @@ -18,8 +18,8 @@ pluginManagement { plugins { id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "7.3.0" apply false - id "org.jetbrains.kotlin.android" version "1.7.10" apply false + id "com.android.application" version "8.1.0" apply false + id "org.jetbrains.kotlin.android" version "1.8.22" apply false } include ":app" diff --git a/brick_breaker/step_06/ios/Runner.xcodeproj/project.pbxproj b/brick_breaker/step_06/ios/Runner.xcodeproj/project.pbxproj index b713cb952f..c78ae8b4ed 100644 --- a/brick_breaker/step_06/ios/Runner.xcodeproj/project.pbxproj +++ b/brick_breaker/step_06/ios/Runner.xcodeproj/project.pbxproj @@ -7,11 +7,11 @@ objects = { /* Begin PBXBuildFile section */ + 079C3C1D22F2289294620456 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 230907B81ABBBE54EDD3D92A /* Pods_Runner.framework */; }; 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; - 1FDE37956AB4405DD8DF9D25 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 33AC137755E9D28933403024 /* Pods_Runner.framework */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; - 4C5B5C8D953A89E286B2DF58 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CF26FA061076D0F56FAE0E55 /* Pods_RunnerTests.framework */; }; + 64FAAECB542C8A4AB2D063D2 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 468B3D82A8E7362654223F6F /* Pods_RunnerTests.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; @@ -44,35 +44,35 @@ /* Begin PBXFileReference section */ 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; + 230907B81ABBBE54EDD3D92A /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 33AC137755E9D28933403024 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 348DE31F4CCE0D6A451383E7 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 57108351B590B4D8C549D850 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 468B3D82A8E7362654223F6F /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 6BBD6F4451CA6EB726893C37 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 921754D0B5FB7D62B705CBDF /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 914F2DA382F9E2C3A7E83EB5 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; + 9747D350E0CF79FD5C0FECAB /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - C4EE440F4E6EB7D727A0ECC7 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - C7B83657D373454233D42409 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - CF26FA061076D0F56FAE0E55 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - D176009CABAF267344B2A2B1 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - F5DE27A058F7CDB67FD1011C /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + C94A641E14FACBB5C9C82B23 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + D594E156A999614A354720D9 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 1D3E82A57C39EDA2EC389B12 /* Frameworks */ = { + 936D3A87682C3D4617F2544B /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 4C5B5C8D953A89E286B2DF58 /* Pods_RunnerTests.framework in Frameworks */, + 64FAAECB542C8A4AB2D063D2 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -80,7 +80,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 1FDE37956AB4405DD8DF9D25 /* Pods_Runner.framework in Frameworks */, + 079C3C1D22F2289294620456 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -113,8 +113,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - D0C943B286C30AD52804559B /* Pods */, - DAFF73A92485097757492046 /* Frameworks */, + E11E89FF5D3D57A4206FAEE3 /* Pods */, + C1CD4192BD09C48BF2590FF1 /* Frameworks */, ); sourceTree = ""; }; @@ -142,27 +142,27 @@ path = Runner; sourceTree = ""; }; - D0C943B286C30AD52804559B /* Pods */ = { + C1CD4192BD09C48BF2590FF1 /* Frameworks */ = { isa = PBXGroup; children = ( - 921754D0B5FB7D62B705CBDF /* Pods-Runner.debug.xcconfig */, - C7B83657D373454233D42409 /* Pods-Runner.release.xcconfig */, - 57108351B590B4D8C549D850 /* Pods-Runner.profile.xcconfig */, - F5DE27A058F7CDB67FD1011C /* Pods-RunnerTests.debug.xcconfig */, - D176009CABAF267344B2A2B1 /* Pods-RunnerTests.release.xcconfig */, - C4EE440F4E6EB7D727A0ECC7 /* Pods-RunnerTests.profile.xcconfig */, + 230907B81ABBBE54EDD3D92A /* Pods_Runner.framework */, + 468B3D82A8E7362654223F6F /* Pods_RunnerTests.framework */, ); - name = Pods; - path = Pods; + name = Frameworks; sourceTree = ""; }; - DAFF73A92485097757492046 /* Frameworks */ = { + E11E89FF5D3D57A4206FAEE3 /* Pods */ = { isa = PBXGroup; children = ( - 33AC137755E9D28933403024 /* Pods_Runner.framework */, - CF26FA061076D0F56FAE0E55 /* Pods_RunnerTests.framework */, + 348DE31F4CCE0D6A451383E7 /* Pods-Runner.debug.xcconfig */, + 9747D350E0CF79FD5C0FECAB /* Pods-Runner.release.xcconfig */, + D594E156A999614A354720D9 /* Pods-Runner.profile.xcconfig */, + 914F2DA382F9E2C3A7E83EB5 /* Pods-RunnerTests.debug.xcconfig */, + 6BBD6F4451CA6EB726893C37 /* Pods-RunnerTests.release.xcconfig */, + C94A641E14FACBB5C9C82B23 /* Pods-RunnerTests.profile.xcconfig */, ); - name = Frameworks; + name = Pods; + path = Pods; sourceTree = ""; }; /* End PBXGroup section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 6C3F7E652D3D2C8D06E02A15 /* [CP] Check Pods Manifest.lock */, + 7F9FC99CA9E45369A25AF36A /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 1D3E82A57C39EDA2EC389B12 /* Frameworks */, + 936D3A87682C3D4617F2544B /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 8BE71F121AB8460C3BAA040B /* [CP] Check Pods Manifest.lock */, + 9B7E0515E2987B0F2F2161A0 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - EAF9488CA71F427DD9C4C126 /* [CP] Embed Pods Frameworks */, + 66245B0048ADE2CC238D41DE /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -286,29 +286,24 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 6C3F7E652D3D2C8D06E02A15 /* [CP] Check Pods Manifest.lock */ = { + 66245B0048ADE2CC238D41DE /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - 8BE71F121AB8460C3BAA040B /* [CP] Check Pods Manifest.lock */ = { + 7F9FC99CA9E45369A25AF36A /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -323,7 +318,7 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -345,21 +340,26 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - EAF9488CA71F427DD9C4C126 /* [CP] Embed Pods Frameworks */ = { + 9B7E0515E2987B0F2F2161A0 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = F5DE27A058F7CDB67FD1011C /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 914F2DA382F9E2C3A7E83EB5 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = D176009CABAF267344B2A2B1 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 6BBD6F4451CA6EB726893C37 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C4EE440F4E6EB7D727A0ECC7 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = C94A641E14FACBB5C9C82B23 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/brick_breaker/step_06/linux/CMakeLists.txt b/brick_breaker/step_06/linux/CMakeLists.txt index 97c400e174..9f288a67f3 100644 --- a/brick_breaker/step_06/linux/CMakeLists.txt +++ b/brick_breaker/step_06/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/brick_breaker/step_06/linux/runner/CMakeLists.txt b/brick_breaker/step_06/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/brick_breaker/step_06/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/brick_breaker/step_06/linux/main.cc b/brick_breaker/step_06/linux/runner/main.cc similarity index 100% rename from brick_breaker/step_06/linux/main.cc rename to brick_breaker/step_06/linux/runner/main.cc diff --git a/brick_breaker/step_06/linux/my_application.cc b/brick_breaker/step_06/linux/runner/my_application.cc similarity index 93% rename from brick_breaker/step_06/linux/my_application.cc rename to brick_breaker/step_06/linux/runner/my_application.cc index 5f348fea29..f80944a7ba 100644 --- a/brick_breaker/step_06/linux/my_application.cc +++ b/brick_breaker/step_06/linux/runner/my_application.cc @@ -117,6 +117,12 @@ static void my_application_class_init(MyApplicationClass* klass) { static void my_application_init(MyApplication* self) {} MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + return MY_APPLICATION(g_object_new(my_application_get_type(), "application-id", APPLICATION_ID, "flags", G_APPLICATION_NON_UNIQUE, diff --git a/brick_breaker/step_06/linux/my_application.h b/brick_breaker/step_06/linux/runner/my_application.h similarity index 100% rename from brick_breaker/step_06/linux/my_application.h rename to brick_breaker/step_06/linux/runner/my_application.h diff --git a/brick_breaker/step_06/macos/Runner.xcodeproj/project.pbxproj b/brick_breaker/step_06/macos/Runner.xcodeproj/project.pbxproj index a78fe5d634..636a28c53a 100644 --- a/brick_breaker/step_06/macos/Runner.xcodeproj/project.pbxproj +++ b/brick_breaker/step_06/macos/Runner.xcodeproj/project.pbxproj @@ -27,8 +27,8 @@ 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - C4C9574636BE6A4E4FB0B2CE /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6FCB2318B484E6B08BC225C9 /* Pods_RunnerTests.framework */; }; - E90E97A8060D14C84B8DA369 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C56C61E533A3BFDF4C1192D5 /* Pods_Runner.framework */; }; + 4EDE108470BB936D2121DAC2 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C352266AE7D36E6036C311DB /* Pods_Runner.framework */; }; + D1ADFA42F2A712AE0DDB3C4F /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F7DDA05F09C7BFFC6495BD57 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,6 +62,9 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 116A2D736E3DB4E136903D2C /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 16CD08E3FF9AD3D23AC8A89E /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 1771944E11EF7BBD50D4D2FD /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -78,16 +81,13 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 359D845285584F7E54CFA116 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - 444661201D8FE89234659006 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 6FCB2318B484E6B08BC225C9 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 3C11113B321AB882C8752E03 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 8439420B8D7BE1E12B824FFB /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - B6BD88C865BE44852BFF1199 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - C56C61E533A3BFDF4C1192D5 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - CD6AABE5E3D964B13C82E7E4 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - EB9690E51B4629D41E7CA82B /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + C352266AE7D36E6036C311DB /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + C4186463924752EE4186F1BD /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + F0E4CC2439991D402B203A71 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + F7DDA05F09C7BFFC6495BD57 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - C4C9574636BE6A4E4FB0B2CE /* Pods_RunnerTests.framework in Frameworks */, + D1ADFA42F2A712AE0DDB3C4F /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,7 +103,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - E90E97A8060D14C84B8DA369 /* Pods_Runner.framework in Frameworks */, + 4EDE108470BB936D2121DAC2 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -137,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 48B33EF507EB7B28B7E14EFF /* Pods */, + FE0B828880FE4FF908108270 /* Pods */, ); sourceTree = ""; }; @@ -185,27 +185,27 @@ path = Runner; sourceTree = ""; }; - 48B33EF507EB7B28B7E14EFF /* Pods */ = { + D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - B6BD88C865BE44852BFF1199 /* Pods-Runner.debug.xcconfig */, - EB9690E51B4629D41E7CA82B /* Pods-Runner.release.xcconfig */, - 359D845285584F7E54CFA116 /* Pods-Runner.profile.xcconfig */, - 444661201D8FE89234659006 /* Pods-RunnerTests.debug.xcconfig */, - 8439420B8D7BE1E12B824FFB /* Pods-RunnerTests.release.xcconfig */, - CD6AABE5E3D964B13C82E7E4 /* Pods-RunnerTests.profile.xcconfig */, + C352266AE7D36E6036C311DB /* Pods_Runner.framework */, + F7DDA05F09C7BFFC6495BD57 /* Pods_RunnerTests.framework */, ); - name = Pods; - path = Pods; + name = Frameworks; sourceTree = ""; }; - D73912EC22F37F3D000D13A0 /* Frameworks */ = { + FE0B828880FE4FF908108270 /* Pods */ = { isa = PBXGroup; children = ( - C56C61E533A3BFDF4C1192D5 /* Pods_Runner.framework */, - 6FCB2318B484E6B08BC225C9 /* Pods_RunnerTests.framework */, + 16CD08E3FF9AD3D23AC8A89E /* Pods-Runner.debug.xcconfig */, + C4186463924752EE4186F1BD /* Pods-Runner.release.xcconfig */, + 1771944E11EF7BBD50D4D2FD /* Pods-Runner.profile.xcconfig */, + 116A2D736E3DB4E136903D2C /* Pods-RunnerTests.debug.xcconfig */, + F0E4CC2439991D402B203A71 /* Pods-RunnerTests.release.xcconfig */, + 3C11113B321AB882C8752E03 /* Pods-RunnerTests.profile.xcconfig */, ); - name = Frameworks; + name = Pods; + path = Pods; sourceTree = ""; }; /* End PBXGroup section */ @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - C9C1A55E30F374EE956A43CF /* [CP] Check Pods Manifest.lock */, + 53D3984EB9BDCC15FE39632C /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 07CC4A63D503F82167533A3A /* [CP] Check Pods Manifest.lock */, + 8C9C6CB44270EC110E6DCD63 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 16DDFD5B0CD2FD63661C0661 /* [CP] Embed Pods Frameworks */, + 4BE7093447D6D7ADBFBF4C29 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,84 +323,84 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 07CC4A63D503F82167533A3A /* [CP] Check Pods Manifest.lock */ = { + 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", ); - name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; }; - 16DDFD5B0CD2FD63661C0661 /* [CP] Embed Pods Frameworks */ = { + 33CC111E2044C6BF0003C045 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + Flutter/ephemeral/FlutterInputs.xcfilelist, + ); + inputPaths = ( + Flutter/ephemeral/tripwire, ); - name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + Flutter/ephemeral/FlutterOutputs.xcfilelist, + ); + outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; + shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 3399D490228B24CF009A79C7 /* ShellScript */ = { + 4BE7093447D6D7ADBFBF4C29 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - ); + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; }; - 33CC111E2044C6BF0003C045 /* ShellScript */ = { + 53D3984EB9BDCC15FE39632C /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - Flutter/ephemeral/FlutterInputs.xcfilelist, ); inputPaths = ( - Flutter/ephemeral/tripwire, + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - Flutter/ephemeral/FlutterOutputs.xcfilelist, ); outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - C9C1A55E30F374EE956A43CF /* [CP] Check Pods Manifest.lock */ = { + 8C9C6CB44270EC110E6DCD63 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -415,7 +415,7 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 444661201D8FE89234659006 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 116A2D736E3DB4E136903D2C /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 8439420B8D7BE1E12B824FFB /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = F0E4CC2439991D402B203A71 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = CD6AABE5E3D964B13C82E7E4 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 3C11113B321AB882C8752E03 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/brick_breaker/step_06/macos/Runner/AppDelegate.swift b/brick_breaker/step_06/macos/Runner/AppDelegate.swift index 8e02df2888..b3c1761412 100644 --- a/brick_breaker/step_06/macos/Runner/AppDelegate.swift +++ b/brick_breaker/step_06/macos/Runner/AppDelegate.swift @@ -6,4 +6,8 @@ class AppDelegate: FlutterAppDelegate { override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { return true } + + override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { + return true + } } diff --git a/brick_breaker/step_06/pubspec.yaml b/brick_breaker/step_06/pubspec.yaml index 4da1f0923a..ce0c17eaf5 100644 --- a/brick_breaker/step_06/pubspec.yaml +++ b/brick_breaker/step_06/pubspec.yaml @@ -16,7 +16,7 @@ dependencies: dev_dependencies: flutter_test: sdk: flutter - flutter_lints: ^4.0.0 + flutter_lints: ^5.0.0 flutter: uses-material-design: true diff --git a/brick_breaker/step_06/web/index.html b/brick_breaker/step_06/web/index.html index 0ffbea0397..da690bb6c1 100644 --- a/brick_breaker/step_06/web/index.html +++ b/brick_breaker/step_06/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/brick_breaker/step_07/.gitignore b/brick_breaker/step_07/.gitignore index 29a3a5017f..79c113f9b5 100644 --- a/brick_breaker/step_07/.gitignore +++ b/brick_breaker/step_07/.gitignore @@ -5,9 +5,11 @@ *.swp .DS_Store .atom/ +.build/ .buildlog/ .history .svn/ +.swiftpm/ migrate_working_dir/ # IntelliJ related diff --git a/brick_breaker/step_07/android/gradle.properties b/brick_breaker/step_07/android/gradle.properties index 2597170821..f018a61817 100644 --- a/brick_breaker/step_07/android/gradle.properties +++ b/brick_breaker/step_07/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/brick_breaker/step_07/android/gradle/wrapper/gradle-wrapper.properties b/brick_breaker/step_07/android/gradle/wrapper/gradle-wrapper.properties index e1ca574ef0..7bb2df6ba6 100644 --- a/brick_breaker/step_07/android/gradle/wrapper/gradle-wrapper.properties +++ b/brick_breaker/step_07/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip diff --git a/brick_breaker/step_07/android/settings.gradle b/brick_breaker/step_07/android/settings.gradle index 536165d35a..b9e43bd376 100644 --- a/brick_breaker/step_07/android/settings.gradle +++ b/brick_breaker/step_07/android/settings.gradle @@ -18,8 +18,8 @@ pluginManagement { plugins { id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "7.3.0" apply false - id "org.jetbrains.kotlin.android" version "1.7.10" apply false + id "com.android.application" version "8.1.0" apply false + id "org.jetbrains.kotlin.android" version "1.8.22" apply false } include ":app" diff --git a/brick_breaker/step_07/ios/Runner.xcodeproj/project.pbxproj b/brick_breaker/step_07/ios/Runner.xcodeproj/project.pbxproj index b713cb952f..c78ae8b4ed 100644 --- a/brick_breaker/step_07/ios/Runner.xcodeproj/project.pbxproj +++ b/brick_breaker/step_07/ios/Runner.xcodeproj/project.pbxproj @@ -7,11 +7,11 @@ objects = { /* Begin PBXBuildFile section */ + 079C3C1D22F2289294620456 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 230907B81ABBBE54EDD3D92A /* Pods_Runner.framework */; }; 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; - 1FDE37956AB4405DD8DF9D25 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 33AC137755E9D28933403024 /* Pods_Runner.framework */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; - 4C5B5C8D953A89E286B2DF58 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CF26FA061076D0F56FAE0E55 /* Pods_RunnerTests.framework */; }; + 64FAAECB542C8A4AB2D063D2 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 468B3D82A8E7362654223F6F /* Pods_RunnerTests.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; @@ -44,35 +44,35 @@ /* Begin PBXFileReference section */ 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; + 230907B81ABBBE54EDD3D92A /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 33AC137755E9D28933403024 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 348DE31F4CCE0D6A451383E7 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 57108351B590B4D8C549D850 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 468B3D82A8E7362654223F6F /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 6BBD6F4451CA6EB726893C37 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 921754D0B5FB7D62B705CBDF /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 914F2DA382F9E2C3A7E83EB5 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; + 9747D350E0CF79FD5C0FECAB /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - C4EE440F4E6EB7D727A0ECC7 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - C7B83657D373454233D42409 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - CF26FA061076D0F56FAE0E55 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - D176009CABAF267344B2A2B1 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - F5DE27A058F7CDB67FD1011C /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + C94A641E14FACBB5C9C82B23 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + D594E156A999614A354720D9 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 1D3E82A57C39EDA2EC389B12 /* Frameworks */ = { + 936D3A87682C3D4617F2544B /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 4C5B5C8D953A89E286B2DF58 /* Pods_RunnerTests.framework in Frameworks */, + 64FAAECB542C8A4AB2D063D2 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -80,7 +80,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 1FDE37956AB4405DD8DF9D25 /* Pods_Runner.framework in Frameworks */, + 079C3C1D22F2289294620456 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -113,8 +113,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - D0C943B286C30AD52804559B /* Pods */, - DAFF73A92485097757492046 /* Frameworks */, + E11E89FF5D3D57A4206FAEE3 /* Pods */, + C1CD4192BD09C48BF2590FF1 /* Frameworks */, ); sourceTree = ""; }; @@ -142,27 +142,27 @@ path = Runner; sourceTree = ""; }; - D0C943B286C30AD52804559B /* Pods */ = { + C1CD4192BD09C48BF2590FF1 /* Frameworks */ = { isa = PBXGroup; children = ( - 921754D0B5FB7D62B705CBDF /* Pods-Runner.debug.xcconfig */, - C7B83657D373454233D42409 /* Pods-Runner.release.xcconfig */, - 57108351B590B4D8C549D850 /* Pods-Runner.profile.xcconfig */, - F5DE27A058F7CDB67FD1011C /* Pods-RunnerTests.debug.xcconfig */, - D176009CABAF267344B2A2B1 /* Pods-RunnerTests.release.xcconfig */, - C4EE440F4E6EB7D727A0ECC7 /* Pods-RunnerTests.profile.xcconfig */, + 230907B81ABBBE54EDD3D92A /* Pods_Runner.framework */, + 468B3D82A8E7362654223F6F /* Pods_RunnerTests.framework */, ); - name = Pods; - path = Pods; + name = Frameworks; sourceTree = ""; }; - DAFF73A92485097757492046 /* Frameworks */ = { + E11E89FF5D3D57A4206FAEE3 /* Pods */ = { isa = PBXGroup; children = ( - 33AC137755E9D28933403024 /* Pods_Runner.framework */, - CF26FA061076D0F56FAE0E55 /* Pods_RunnerTests.framework */, + 348DE31F4CCE0D6A451383E7 /* Pods-Runner.debug.xcconfig */, + 9747D350E0CF79FD5C0FECAB /* Pods-Runner.release.xcconfig */, + D594E156A999614A354720D9 /* Pods-Runner.profile.xcconfig */, + 914F2DA382F9E2C3A7E83EB5 /* Pods-RunnerTests.debug.xcconfig */, + 6BBD6F4451CA6EB726893C37 /* Pods-RunnerTests.release.xcconfig */, + C94A641E14FACBB5C9C82B23 /* Pods-RunnerTests.profile.xcconfig */, ); - name = Frameworks; + name = Pods; + path = Pods; sourceTree = ""; }; /* End PBXGroup section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 6C3F7E652D3D2C8D06E02A15 /* [CP] Check Pods Manifest.lock */, + 7F9FC99CA9E45369A25AF36A /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 1D3E82A57C39EDA2EC389B12 /* Frameworks */, + 936D3A87682C3D4617F2544B /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 8BE71F121AB8460C3BAA040B /* [CP] Check Pods Manifest.lock */, + 9B7E0515E2987B0F2F2161A0 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - EAF9488CA71F427DD9C4C126 /* [CP] Embed Pods Frameworks */, + 66245B0048ADE2CC238D41DE /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -286,29 +286,24 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 6C3F7E652D3D2C8D06E02A15 /* [CP] Check Pods Manifest.lock */ = { + 66245B0048ADE2CC238D41DE /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - 8BE71F121AB8460C3BAA040B /* [CP] Check Pods Manifest.lock */ = { + 7F9FC99CA9E45369A25AF36A /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -323,7 +318,7 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -345,21 +340,26 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - EAF9488CA71F427DD9C4C126 /* [CP] Embed Pods Frameworks */ = { + 9B7E0515E2987B0F2F2161A0 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = F5DE27A058F7CDB67FD1011C /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 914F2DA382F9E2C3A7E83EB5 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = D176009CABAF267344B2A2B1 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 6BBD6F4451CA6EB726893C37 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C4EE440F4E6EB7D727A0ECC7 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = C94A641E14FACBB5C9C82B23 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/brick_breaker/step_07/linux/CMakeLists.txt b/brick_breaker/step_07/linux/CMakeLists.txt index 97c400e174..9f288a67f3 100644 --- a/brick_breaker/step_07/linux/CMakeLists.txt +++ b/brick_breaker/step_07/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/brick_breaker/step_07/linux/my_application.cc b/brick_breaker/step_07/linux/my_application.cc deleted file mode 100644 index 5f348fea29..0000000000 --- a/brick_breaker/step_07/linux/my_application.cc +++ /dev/null @@ -1,124 +0,0 @@ -#include "my_application.h" - -#include -#ifdef GDK_WINDOWING_X11 -#include -#endif - -#include "flutter/generated_plugin_registrant.h" - -struct _MyApplication { - GtkApplication parent_instance; - char** dart_entrypoint_arguments; -}; - -G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) - -// Implements GApplication::activate. -static void my_application_activate(GApplication* application) { - MyApplication* self = MY_APPLICATION(application); - GtkWindow* window = - GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); - - // Use a header bar when running in GNOME as this is the common style used - // by applications and is the setup most users will be using (e.g. Ubuntu - // desktop). - // If running on X and not using GNOME then just use a traditional title bar - // in case the window manager does more exotic layout, e.g. tiling. - // If running on Wayland assume the header bar will work (may need changing - // if future cases occur). - gboolean use_header_bar = TRUE; -#ifdef GDK_WINDOWING_X11 - GdkScreen* screen = gtk_window_get_screen(window); - if (GDK_IS_X11_SCREEN(screen)) { - const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); - if (g_strcmp0(wm_name, "GNOME Shell") != 0) { - use_header_bar = FALSE; - } - } -#endif - if (use_header_bar) { - GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); - gtk_widget_show(GTK_WIDGET(header_bar)); - gtk_header_bar_set_title(header_bar, "brick_breaker"); - gtk_header_bar_set_show_close_button(header_bar, TRUE); - gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); - } else { - gtk_window_set_title(window, "brick_breaker"); - } - - gtk_window_set_default_size(window, 1280, 720); - gtk_widget_show(GTK_WIDGET(window)); - - g_autoptr(FlDartProject) project = fl_dart_project_new(); - fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); - - FlView* view = fl_view_new(project); - gtk_widget_show(GTK_WIDGET(view)); - gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); - - fl_register_plugins(FL_PLUGIN_REGISTRY(view)); - - gtk_widget_grab_focus(GTK_WIDGET(view)); -} - -// Implements GApplication::local_command_line. -static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { - MyApplication* self = MY_APPLICATION(application); - // Strip out the first argument as it is the binary name. - self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); - - g_autoptr(GError) error = nullptr; - if (!g_application_register(application, nullptr, &error)) { - g_warning("Failed to register: %s", error->message); - *exit_status = 1; - return TRUE; - } - - g_application_activate(application); - *exit_status = 0; - - return TRUE; -} - -// Implements GApplication::startup. -static void my_application_startup(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application startup. - - G_APPLICATION_CLASS(my_application_parent_class)->startup(application); -} - -// Implements GApplication::shutdown. -static void my_application_shutdown(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application shutdown. - - G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); -} - -// Implements GObject::dispose. -static void my_application_dispose(GObject* object) { - MyApplication* self = MY_APPLICATION(object); - g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); - G_OBJECT_CLASS(my_application_parent_class)->dispose(object); -} - -static void my_application_class_init(MyApplicationClass* klass) { - G_APPLICATION_CLASS(klass)->activate = my_application_activate; - G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; - G_APPLICATION_CLASS(klass)->startup = my_application_startup; - G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; - G_OBJECT_CLASS(klass)->dispose = my_application_dispose; -} - -static void my_application_init(MyApplication* self) {} - -MyApplication* my_application_new() { - return MY_APPLICATION(g_object_new(my_application_get_type(), - "application-id", APPLICATION_ID, - "flags", G_APPLICATION_NON_UNIQUE, - nullptr)); -} diff --git a/brick_breaker/step_07/linux/runner/CMakeLists.txt b/brick_breaker/step_07/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/brick_breaker/step_07/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/brick_breaker/step_07/linux/main.cc b/brick_breaker/step_07/linux/runner/main.cc similarity index 100% rename from brick_breaker/step_07/linux/main.cc rename to brick_breaker/step_07/linux/runner/main.cc diff --git a/brick_breaker/step_07/linux/runner/my_application.cc b/brick_breaker/step_07/linux/runner/my_application.cc new file mode 100644 index 0000000000..f80944a7ba --- /dev/null +++ b/brick_breaker/step_07/linux/runner/my_application.cc @@ -0,0 +1,130 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "brick_breaker"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "brick_breaker"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/brick_breaker/step_07/linux/my_application.h b/brick_breaker/step_07/linux/runner/my_application.h similarity index 100% rename from brick_breaker/step_07/linux/my_application.h rename to brick_breaker/step_07/linux/runner/my_application.h diff --git a/brick_breaker/step_07/macos/Runner.xcodeproj/project.pbxproj b/brick_breaker/step_07/macos/Runner.xcodeproj/project.pbxproj index a78fe5d634..636a28c53a 100644 --- a/brick_breaker/step_07/macos/Runner.xcodeproj/project.pbxproj +++ b/brick_breaker/step_07/macos/Runner.xcodeproj/project.pbxproj @@ -27,8 +27,8 @@ 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - C4C9574636BE6A4E4FB0B2CE /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6FCB2318B484E6B08BC225C9 /* Pods_RunnerTests.framework */; }; - E90E97A8060D14C84B8DA369 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C56C61E533A3BFDF4C1192D5 /* Pods_Runner.framework */; }; + 4EDE108470BB936D2121DAC2 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C352266AE7D36E6036C311DB /* Pods_Runner.framework */; }; + D1ADFA42F2A712AE0DDB3C4F /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F7DDA05F09C7BFFC6495BD57 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,6 +62,9 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 116A2D736E3DB4E136903D2C /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 16CD08E3FF9AD3D23AC8A89E /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 1771944E11EF7BBD50D4D2FD /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -78,16 +81,13 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 359D845285584F7E54CFA116 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - 444661201D8FE89234659006 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 6FCB2318B484E6B08BC225C9 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 3C11113B321AB882C8752E03 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 8439420B8D7BE1E12B824FFB /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - B6BD88C865BE44852BFF1199 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - C56C61E533A3BFDF4C1192D5 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - CD6AABE5E3D964B13C82E7E4 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - EB9690E51B4629D41E7CA82B /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + C352266AE7D36E6036C311DB /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + C4186463924752EE4186F1BD /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + F0E4CC2439991D402B203A71 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + F7DDA05F09C7BFFC6495BD57 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - C4C9574636BE6A4E4FB0B2CE /* Pods_RunnerTests.framework in Frameworks */, + D1ADFA42F2A712AE0DDB3C4F /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,7 +103,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - E90E97A8060D14C84B8DA369 /* Pods_Runner.framework in Frameworks */, + 4EDE108470BB936D2121DAC2 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -137,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 48B33EF507EB7B28B7E14EFF /* Pods */, + FE0B828880FE4FF908108270 /* Pods */, ); sourceTree = ""; }; @@ -185,27 +185,27 @@ path = Runner; sourceTree = ""; }; - 48B33EF507EB7B28B7E14EFF /* Pods */ = { + D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - B6BD88C865BE44852BFF1199 /* Pods-Runner.debug.xcconfig */, - EB9690E51B4629D41E7CA82B /* Pods-Runner.release.xcconfig */, - 359D845285584F7E54CFA116 /* Pods-Runner.profile.xcconfig */, - 444661201D8FE89234659006 /* Pods-RunnerTests.debug.xcconfig */, - 8439420B8D7BE1E12B824FFB /* Pods-RunnerTests.release.xcconfig */, - CD6AABE5E3D964B13C82E7E4 /* Pods-RunnerTests.profile.xcconfig */, + C352266AE7D36E6036C311DB /* Pods_Runner.framework */, + F7DDA05F09C7BFFC6495BD57 /* Pods_RunnerTests.framework */, ); - name = Pods; - path = Pods; + name = Frameworks; sourceTree = ""; }; - D73912EC22F37F3D000D13A0 /* Frameworks */ = { + FE0B828880FE4FF908108270 /* Pods */ = { isa = PBXGroup; children = ( - C56C61E533A3BFDF4C1192D5 /* Pods_Runner.framework */, - 6FCB2318B484E6B08BC225C9 /* Pods_RunnerTests.framework */, + 16CD08E3FF9AD3D23AC8A89E /* Pods-Runner.debug.xcconfig */, + C4186463924752EE4186F1BD /* Pods-Runner.release.xcconfig */, + 1771944E11EF7BBD50D4D2FD /* Pods-Runner.profile.xcconfig */, + 116A2D736E3DB4E136903D2C /* Pods-RunnerTests.debug.xcconfig */, + F0E4CC2439991D402B203A71 /* Pods-RunnerTests.release.xcconfig */, + 3C11113B321AB882C8752E03 /* Pods-RunnerTests.profile.xcconfig */, ); - name = Frameworks; + name = Pods; + path = Pods; sourceTree = ""; }; /* End PBXGroup section */ @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - C9C1A55E30F374EE956A43CF /* [CP] Check Pods Manifest.lock */, + 53D3984EB9BDCC15FE39632C /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 07CC4A63D503F82167533A3A /* [CP] Check Pods Manifest.lock */, + 8C9C6CB44270EC110E6DCD63 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 16DDFD5B0CD2FD63661C0661 /* [CP] Embed Pods Frameworks */, + 4BE7093447D6D7ADBFBF4C29 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,84 +323,84 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 07CC4A63D503F82167533A3A /* [CP] Check Pods Manifest.lock */ = { + 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", ); - name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; }; - 16DDFD5B0CD2FD63661C0661 /* [CP] Embed Pods Frameworks */ = { + 33CC111E2044C6BF0003C045 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + Flutter/ephemeral/FlutterInputs.xcfilelist, + ); + inputPaths = ( + Flutter/ephemeral/tripwire, ); - name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + Flutter/ephemeral/FlutterOutputs.xcfilelist, + ); + outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; + shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 3399D490228B24CF009A79C7 /* ShellScript */ = { + 4BE7093447D6D7ADBFBF4C29 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - ); + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; }; - 33CC111E2044C6BF0003C045 /* ShellScript */ = { + 53D3984EB9BDCC15FE39632C /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - Flutter/ephemeral/FlutterInputs.xcfilelist, ); inputPaths = ( - Flutter/ephemeral/tripwire, + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - Flutter/ephemeral/FlutterOutputs.xcfilelist, ); outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - C9C1A55E30F374EE956A43CF /* [CP] Check Pods Manifest.lock */ = { + 8C9C6CB44270EC110E6DCD63 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -415,7 +415,7 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 444661201D8FE89234659006 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 116A2D736E3DB4E136903D2C /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 8439420B8D7BE1E12B824FFB /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = F0E4CC2439991D402B203A71 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = CD6AABE5E3D964B13C82E7E4 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 3C11113B321AB882C8752E03 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/brick_breaker/step_07/macos/Runner/AppDelegate.swift b/brick_breaker/step_07/macos/Runner/AppDelegate.swift index 8e02df2888..b3c1761412 100644 --- a/brick_breaker/step_07/macos/Runner/AppDelegate.swift +++ b/brick_breaker/step_07/macos/Runner/AppDelegate.swift @@ -6,4 +6,8 @@ class AppDelegate: FlutterAppDelegate { override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { return true } + + override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { + return true + } } diff --git a/brick_breaker/step_07/pubspec.yaml b/brick_breaker/step_07/pubspec.yaml index 4da1f0923a..ce0c17eaf5 100644 --- a/brick_breaker/step_07/pubspec.yaml +++ b/brick_breaker/step_07/pubspec.yaml @@ -16,7 +16,7 @@ dependencies: dev_dependencies: flutter_test: sdk: flutter - flutter_lints: ^4.0.0 + flutter_lints: ^5.0.0 flutter: uses-material-design: true diff --git a/brick_breaker/step_07/web/index.html b/brick_breaker/step_07/web/index.html index 0ffbea0397..da690bb6c1 100644 --- a/brick_breaker/step_07/web/index.html +++ b/brick_breaker/step_07/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/brick_breaker/step_08/.gitignore b/brick_breaker/step_08/.gitignore index 29a3a5017f..79c113f9b5 100644 --- a/brick_breaker/step_08/.gitignore +++ b/brick_breaker/step_08/.gitignore @@ -5,9 +5,11 @@ *.swp .DS_Store .atom/ +.build/ .buildlog/ .history .svn/ +.swiftpm/ migrate_working_dir/ # IntelliJ related diff --git a/brick_breaker/step_08/android/gradle.properties b/brick_breaker/step_08/android/gradle.properties index 2597170821..f018a61817 100644 --- a/brick_breaker/step_08/android/gradle.properties +++ b/brick_breaker/step_08/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/brick_breaker/step_08/android/gradle/wrapper/gradle-wrapper.properties b/brick_breaker/step_08/android/gradle/wrapper/gradle-wrapper.properties index e1ca574ef0..7bb2df6ba6 100644 --- a/brick_breaker/step_08/android/gradle/wrapper/gradle-wrapper.properties +++ b/brick_breaker/step_08/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip diff --git a/brick_breaker/step_08/android/settings.gradle b/brick_breaker/step_08/android/settings.gradle index 536165d35a..b9e43bd376 100644 --- a/brick_breaker/step_08/android/settings.gradle +++ b/brick_breaker/step_08/android/settings.gradle @@ -18,8 +18,8 @@ pluginManagement { plugins { id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "7.3.0" apply false - id "org.jetbrains.kotlin.android" version "1.7.10" apply false + id "com.android.application" version "8.1.0" apply false + id "org.jetbrains.kotlin.android" version "1.8.22" apply false } include ":app" diff --git a/brick_breaker/step_08/ios/Runner.xcodeproj/project.pbxproj b/brick_breaker/step_08/ios/Runner.xcodeproj/project.pbxproj index b713cb952f..c78ae8b4ed 100644 --- a/brick_breaker/step_08/ios/Runner.xcodeproj/project.pbxproj +++ b/brick_breaker/step_08/ios/Runner.xcodeproj/project.pbxproj @@ -7,11 +7,11 @@ objects = { /* Begin PBXBuildFile section */ + 079C3C1D22F2289294620456 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 230907B81ABBBE54EDD3D92A /* Pods_Runner.framework */; }; 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; - 1FDE37956AB4405DD8DF9D25 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 33AC137755E9D28933403024 /* Pods_Runner.framework */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; - 4C5B5C8D953A89E286B2DF58 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CF26FA061076D0F56FAE0E55 /* Pods_RunnerTests.framework */; }; + 64FAAECB542C8A4AB2D063D2 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 468B3D82A8E7362654223F6F /* Pods_RunnerTests.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; @@ -44,35 +44,35 @@ /* Begin PBXFileReference section */ 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; + 230907B81ABBBE54EDD3D92A /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 33AC137755E9D28933403024 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 348DE31F4CCE0D6A451383E7 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 57108351B590B4D8C549D850 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 468B3D82A8E7362654223F6F /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 6BBD6F4451CA6EB726893C37 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 921754D0B5FB7D62B705CBDF /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 914F2DA382F9E2C3A7E83EB5 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; + 9747D350E0CF79FD5C0FECAB /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - C4EE440F4E6EB7D727A0ECC7 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - C7B83657D373454233D42409 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - CF26FA061076D0F56FAE0E55 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - D176009CABAF267344B2A2B1 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - F5DE27A058F7CDB67FD1011C /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + C94A641E14FACBB5C9C82B23 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + D594E156A999614A354720D9 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 1D3E82A57C39EDA2EC389B12 /* Frameworks */ = { + 936D3A87682C3D4617F2544B /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 4C5B5C8D953A89E286B2DF58 /* Pods_RunnerTests.framework in Frameworks */, + 64FAAECB542C8A4AB2D063D2 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -80,7 +80,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 1FDE37956AB4405DD8DF9D25 /* Pods_Runner.framework in Frameworks */, + 079C3C1D22F2289294620456 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -113,8 +113,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - D0C943B286C30AD52804559B /* Pods */, - DAFF73A92485097757492046 /* Frameworks */, + E11E89FF5D3D57A4206FAEE3 /* Pods */, + C1CD4192BD09C48BF2590FF1 /* Frameworks */, ); sourceTree = ""; }; @@ -142,27 +142,27 @@ path = Runner; sourceTree = ""; }; - D0C943B286C30AD52804559B /* Pods */ = { + C1CD4192BD09C48BF2590FF1 /* Frameworks */ = { isa = PBXGroup; children = ( - 921754D0B5FB7D62B705CBDF /* Pods-Runner.debug.xcconfig */, - C7B83657D373454233D42409 /* Pods-Runner.release.xcconfig */, - 57108351B590B4D8C549D850 /* Pods-Runner.profile.xcconfig */, - F5DE27A058F7CDB67FD1011C /* Pods-RunnerTests.debug.xcconfig */, - D176009CABAF267344B2A2B1 /* Pods-RunnerTests.release.xcconfig */, - C4EE440F4E6EB7D727A0ECC7 /* Pods-RunnerTests.profile.xcconfig */, + 230907B81ABBBE54EDD3D92A /* Pods_Runner.framework */, + 468B3D82A8E7362654223F6F /* Pods_RunnerTests.framework */, ); - name = Pods; - path = Pods; + name = Frameworks; sourceTree = ""; }; - DAFF73A92485097757492046 /* Frameworks */ = { + E11E89FF5D3D57A4206FAEE3 /* Pods */ = { isa = PBXGroup; children = ( - 33AC137755E9D28933403024 /* Pods_Runner.framework */, - CF26FA061076D0F56FAE0E55 /* Pods_RunnerTests.framework */, + 348DE31F4CCE0D6A451383E7 /* Pods-Runner.debug.xcconfig */, + 9747D350E0CF79FD5C0FECAB /* Pods-Runner.release.xcconfig */, + D594E156A999614A354720D9 /* Pods-Runner.profile.xcconfig */, + 914F2DA382F9E2C3A7E83EB5 /* Pods-RunnerTests.debug.xcconfig */, + 6BBD6F4451CA6EB726893C37 /* Pods-RunnerTests.release.xcconfig */, + C94A641E14FACBB5C9C82B23 /* Pods-RunnerTests.profile.xcconfig */, ); - name = Frameworks; + name = Pods; + path = Pods; sourceTree = ""; }; /* End PBXGroup section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 6C3F7E652D3D2C8D06E02A15 /* [CP] Check Pods Manifest.lock */, + 7F9FC99CA9E45369A25AF36A /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 1D3E82A57C39EDA2EC389B12 /* Frameworks */, + 936D3A87682C3D4617F2544B /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 8BE71F121AB8460C3BAA040B /* [CP] Check Pods Manifest.lock */, + 9B7E0515E2987B0F2F2161A0 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - EAF9488CA71F427DD9C4C126 /* [CP] Embed Pods Frameworks */, + 66245B0048ADE2CC238D41DE /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -286,29 +286,24 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 6C3F7E652D3D2C8D06E02A15 /* [CP] Check Pods Manifest.lock */ = { + 66245B0048ADE2CC238D41DE /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - 8BE71F121AB8460C3BAA040B /* [CP] Check Pods Manifest.lock */ = { + 7F9FC99CA9E45369A25AF36A /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -323,7 +318,7 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -345,21 +340,26 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - EAF9488CA71F427DD9C4C126 /* [CP] Embed Pods Frameworks */ = { + 9B7E0515E2987B0F2F2161A0 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = F5DE27A058F7CDB67FD1011C /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 914F2DA382F9E2C3A7E83EB5 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = D176009CABAF267344B2A2B1 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 6BBD6F4451CA6EB726893C37 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C4EE440F4E6EB7D727A0ECC7 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = C94A641E14FACBB5C9C82B23 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/brick_breaker/step_08/linux/CMakeLists.txt b/brick_breaker/step_08/linux/CMakeLists.txt index 97c400e174..9f288a67f3 100644 --- a/brick_breaker/step_08/linux/CMakeLists.txt +++ b/brick_breaker/step_08/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/brick_breaker/step_08/linux/my_application.cc b/brick_breaker/step_08/linux/my_application.cc deleted file mode 100644 index 5f348fea29..0000000000 --- a/brick_breaker/step_08/linux/my_application.cc +++ /dev/null @@ -1,124 +0,0 @@ -#include "my_application.h" - -#include -#ifdef GDK_WINDOWING_X11 -#include -#endif - -#include "flutter/generated_plugin_registrant.h" - -struct _MyApplication { - GtkApplication parent_instance; - char** dart_entrypoint_arguments; -}; - -G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) - -// Implements GApplication::activate. -static void my_application_activate(GApplication* application) { - MyApplication* self = MY_APPLICATION(application); - GtkWindow* window = - GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); - - // Use a header bar when running in GNOME as this is the common style used - // by applications and is the setup most users will be using (e.g. Ubuntu - // desktop). - // If running on X and not using GNOME then just use a traditional title bar - // in case the window manager does more exotic layout, e.g. tiling. - // If running on Wayland assume the header bar will work (may need changing - // if future cases occur). - gboolean use_header_bar = TRUE; -#ifdef GDK_WINDOWING_X11 - GdkScreen* screen = gtk_window_get_screen(window); - if (GDK_IS_X11_SCREEN(screen)) { - const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); - if (g_strcmp0(wm_name, "GNOME Shell") != 0) { - use_header_bar = FALSE; - } - } -#endif - if (use_header_bar) { - GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); - gtk_widget_show(GTK_WIDGET(header_bar)); - gtk_header_bar_set_title(header_bar, "brick_breaker"); - gtk_header_bar_set_show_close_button(header_bar, TRUE); - gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); - } else { - gtk_window_set_title(window, "brick_breaker"); - } - - gtk_window_set_default_size(window, 1280, 720); - gtk_widget_show(GTK_WIDGET(window)); - - g_autoptr(FlDartProject) project = fl_dart_project_new(); - fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); - - FlView* view = fl_view_new(project); - gtk_widget_show(GTK_WIDGET(view)); - gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); - - fl_register_plugins(FL_PLUGIN_REGISTRY(view)); - - gtk_widget_grab_focus(GTK_WIDGET(view)); -} - -// Implements GApplication::local_command_line. -static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { - MyApplication* self = MY_APPLICATION(application); - // Strip out the first argument as it is the binary name. - self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); - - g_autoptr(GError) error = nullptr; - if (!g_application_register(application, nullptr, &error)) { - g_warning("Failed to register: %s", error->message); - *exit_status = 1; - return TRUE; - } - - g_application_activate(application); - *exit_status = 0; - - return TRUE; -} - -// Implements GApplication::startup. -static void my_application_startup(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application startup. - - G_APPLICATION_CLASS(my_application_parent_class)->startup(application); -} - -// Implements GApplication::shutdown. -static void my_application_shutdown(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application shutdown. - - G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); -} - -// Implements GObject::dispose. -static void my_application_dispose(GObject* object) { - MyApplication* self = MY_APPLICATION(object); - g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); - G_OBJECT_CLASS(my_application_parent_class)->dispose(object); -} - -static void my_application_class_init(MyApplicationClass* klass) { - G_APPLICATION_CLASS(klass)->activate = my_application_activate; - G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; - G_APPLICATION_CLASS(klass)->startup = my_application_startup; - G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; - G_OBJECT_CLASS(klass)->dispose = my_application_dispose; -} - -static void my_application_init(MyApplication* self) {} - -MyApplication* my_application_new() { - return MY_APPLICATION(g_object_new(my_application_get_type(), - "application-id", APPLICATION_ID, - "flags", G_APPLICATION_NON_UNIQUE, - nullptr)); -} diff --git a/brick_breaker/step_08/linux/runner/CMakeLists.txt b/brick_breaker/step_08/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/brick_breaker/step_08/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/brick_breaker/step_08/linux/main.cc b/brick_breaker/step_08/linux/runner/main.cc similarity index 100% rename from brick_breaker/step_08/linux/main.cc rename to brick_breaker/step_08/linux/runner/main.cc diff --git a/brick_breaker/step_08/linux/runner/my_application.cc b/brick_breaker/step_08/linux/runner/my_application.cc new file mode 100644 index 0000000000..f80944a7ba --- /dev/null +++ b/brick_breaker/step_08/linux/runner/my_application.cc @@ -0,0 +1,130 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "brick_breaker"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "brick_breaker"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/brick_breaker/step_08/linux/my_application.h b/brick_breaker/step_08/linux/runner/my_application.h similarity index 100% rename from brick_breaker/step_08/linux/my_application.h rename to brick_breaker/step_08/linux/runner/my_application.h diff --git a/brick_breaker/step_08/macos/Runner.xcodeproj/project.pbxproj b/brick_breaker/step_08/macos/Runner.xcodeproj/project.pbxproj index a78fe5d634..636a28c53a 100644 --- a/brick_breaker/step_08/macos/Runner.xcodeproj/project.pbxproj +++ b/brick_breaker/step_08/macos/Runner.xcodeproj/project.pbxproj @@ -27,8 +27,8 @@ 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - C4C9574636BE6A4E4FB0B2CE /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6FCB2318B484E6B08BC225C9 /* Pods_RunnerTests.framework */; }; - E90E97A8060D14C84B8DA369 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C56C61E533A3BFDF4C1192D5 /* Pods_Runner.framework */; }; + 4EDE108470BB936D2121DAC2 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C352266AE7D36E6036C311DB /* Pods_Runner.framework */; }; + D1ADFA42F2A712AE0DDB3C4F /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F7DDA05F09C7BFFC6495BD57 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,6 +62,9 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 116A2D736E3DB4E136903D2C /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 16CD08E3FF9AD3D23AC8A89E /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 1771944E11EF7BBD50D4D2FD /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -78,16 +81,13 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 359D845285584F7E54CFA116 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - 444661201D8FE89234659006 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 6FCB2318B484E6B08BC225C9 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 3C11113B321AB882C8752E03 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 8439420B8D7BE1E12B824FFB /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - B6BD88C865BE44852BFF1199 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - C56C61E533A3BFDF4C1192D5 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - CD6AABE5E3D964B13C82E7E4 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - EB9690E51B4629D41E7CA82B /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + C352266AE7D36E6036C311DB /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + C4186463924752EE4186F1BD /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + F0E4CC2439991D402B203A71 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + F7DDA05F09C7BFFC6495BD57 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - C4C9574636BE6A4E4FB0B2CE /* Pods_RunnerTests.framework in Frameworks */, + D1ADFA42F2A712AE0DDB3C4F /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,7 +103,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - E90E97A8060D14C84B8DA369 /* Pods_Runner.framework in Frameworks */, + 4EDE108470BB936D2121DAC2 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -137,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 48B33EF507EB7B28B7E14EFF /* Pods */, + FE0B828880FE4FF908108270 /* Pods */, ); sourceTree = ""; }; @@ -185,27 +185,27 @@ path = Runner; sourceTree = ""; }; - 48B33EF507EB7B28B7E14EFF /* Pods */ = { + D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - B6BD88C865BE44852BFF1199 /* Pods-Runner.debug.xcconfig */, - EB9690E51B4629D41E7CA82B /* Pods-Runner.release.xcconfig */, - 359D845285584F7E54CFA116 /* Pods-Runner.profile.xcconfig */, - 444661201D8FE89234659006 /* Pods-RunnerTests.debug.xcconfig */, - 8439420B8D7BE1E12B824FFB /* Pods-RunnerTests.release.xcconfig */, - CD6AABE5E3D964B13C82E7E4 /* Pods-RunnerTests.profile.xcconfig */, + C352266AE7D36E6036C311DB /* Pods_Runner.framework */, + F7DDA05F09C7BFFC6495BD57 /* Pods_RunnerTests.framework */, ); - name = Pods; - path = Pods; + name = Frameworks; sourceTree = ""; }; - D73912EC22F37F3D000D13A0 /* Frameworks */ = { + FE0B828880FE4FF908108270 /* Pods */ = { isa = PBXGroup; children = ( - C56C61E533A3BFDF4C1192D5 /* Pods_Runner.framework */, - 6FCB2318B484E6B08BC225C9 /* Pods_RunnerTests.framework */, + 16CD08E3FF9AD3D23AC8A89E /* Pods-Runner.debug.xcconfig */, + C4186463924752EE4186F1BD /* Pods-Runner.release.xcconfig */, + 1771944E11EF7BBD50D4D2FD /* Pods-Runner.profile.xcconfig */, + 116A2D736E3DB4E136903D2C /* Pods-RunnerTests.debug.xcconfig */, + F0E4CC2439991D402B203A71 /* Pods-RunnerTests.release.xcconfig */, + 3C11113B321AB882C8752E03 /* Pods-RunnerTests.profile.xcconfig */, ); - name = Frameworks; + name = Pods; + path = Pods; sourceTree = ""; }; /* End PBXGroup section */ @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - C9C1A55E30F374EE956A43CF /* [CP] Check Pods Manifest.lock */, + 53D3984EB9BDCC15FE39632C /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 07CC4A63D503F82167533A3A /* [CP] Check Pods Manifest.lock */, + 8C9C6CB44270EC110E6DCD63 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 16DDFD5B0CD2FD63661C0661 /* [CP] Embed Pods Frameworks */, + 4BE7093447D6D7ADBFBF4C29 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,84 +323,84 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 07CC4A63D503F82167533A3A /* [CP] Check Pods Manifest.lock */ = { + 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", ); - name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; }; - 16DDFD5B0CD2FD63661C0661 /* [CP] Embed Pods Frameworks */ = { + 33CC111E2044C6BF0003C045 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + Flutter/ephemeral/FlutterInputs.xcfilelist, + ); + inputPaths = ( + Flutter/ephemeral/tripwire, ); - name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + Flutter/ephemeral/FlutterOutputs.xcfilelist, + ); + outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; + shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 3399D490228B24CF009A79C7 /* ShellScript */ = { + 4BE7093447D6D7ADBFBF4C29 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - ); + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; }; - 33CC111E2044C6BF0003C045 /* ShellScript */ = { + 53D3984EB9BDCC15FE39632C /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - Flutter/ephemeral/FlutterInputs.xcfilelist, ); inputPaths = ( - Flutter/ephemeral/tripwire, + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - Flutter/ephemeral/FlutterOutputs.xcfilelist, ); outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - C9C1A55E30F374EE956A43CF /* [CP] Check Pods Manifest.lock */ = { + 8C9C6CB44270EC110E6DCD63 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -415,7 +415,7 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 444661201D8FE89234659006 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 116A2D736E3DB4E136903D2C /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 8439420B8D7BE1E12B824FFB /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = F0E4CC2439991D402B203A71 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = CD6AABE5E3D964B13C82E7E4 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 3C11113B321AB882C8752E03 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/brick_breaker/step_08/macos/Runner/AppDelegate.swift b/brick_breaker/step_08/macos/Runner/AppDelegate.swift index 8e02df2888..b3c1761412 100644 --- a/brick_breaker/step_08/macos/Runner/AppDelegate.swift +++ b/brick_breaker/step_08/macos/Runner/AppDelegate.swift @@ -6,4 +6,8 @@ class AppDelegate: FlutterAppDelegate { override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { return true } + + override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { + return true + } } diff --git a/brick_breaker/step_08/pubspec.yaml b/brick_breaker/step_08/pubspec.yaml index 4da1f0923a..ce0c17eaf5 100644 --- a/brick_breaker/step_08/pubspec.yaml +++ b/brick_breaker/step_08/pubspec.yaml @@ -16,7 +16,7 @@ dependencies: dev_dependencies: flutter_test: sdk: flutter - flutter_lints: ^4.0.0 + flutter_lints: ^5.0.0 flutter: uses-material-design: true diff --git a/brick_breaker/step_08/web/index.html b/brick_breaker/step_08/web/index.html index 0ffbea0397..da690bb6c1 100644 --- a/brick_breaker/step_08/web/index.html +++ b/brick_breaker/step_08/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/brick_breaker/step_09/.gitignore b/brick_breaker/step_09/.gitignore index 29a3a5017f..79c113f9b5 100644 --- a/brick_breaker/step_09/.gitignore +++ b/brick_breaker/step_09/.gitignore @@ -5,9 +5,11 @@ *.swp .DS_Store .atom/ +.build/ .buildlog/ .history .svn/ +.swiftpm/ migrate_working_dir/ # IntelliJ related diff --git a/brick_breaker/step_09/android/gradle.properties b/brick_breaker/step_09/android/gradle.properties index 2597170821..f018a61817 100644 --- a/brick_breaker/step_09/android/gradle.properties +++ b/brick_breaker/step_09/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/brick_breaker/step_09/android/gradle/wrapper/gradle-wrapper.properties b/brick_breaker/step_09/android/gradle/wrapper/gradle-wrapper.properties index e1ca574ef0..7bb2df6ba6 100644 --- a/brick_breaker/step_09/android/gradle/wrapper/gradle-wrapper.properties +++ b/brick_breaker/step_09/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip diff --git a/brick_breaker/step_09/android/settings.gradle b/brick_breaker/step_09/android/settings.gradle index 536165d35a..b9e43bd376 100644 --- a/brick_breaker/step_09/android/settings.gradle +++ b/brick_breaker/step_09/android/settings.gradle @@ -18,8 +18,8 @@ pluginManagement { plugins { id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "7.3.0" apply false - id "org.jetbrains.kotlin.android" version "1.7.10" apply false + id "com.android.application" version "8.1.0" apply false + id "org.jetbrains.kotlin.android" version "1.8.22" apply false } include ":app" diff --git a/brick_breaker/step_09/ios/Runner.xcodeproj/project.pbxproj b/brick_breaker/step_09/ios/Runner.xcodeproj/project.pbxproj index b713cb952f..c78ae8b4ed 100644 --- a/brick_breaker/step_09/ios/Runner.xcodeproj/project.pbxproj +++ b/brick_breaker/step_09/ios/Runner.xcodeproj/project.pbxproj @@ -7,11 +7,11 @@ objects = { /* Begin PBXBuildFile section */ + 079C3C1D22F2289294620456 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 230907B81ABBBE54EDD3D92A /* Pods_Runner.framework */; }; 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; - 1FDE37956AB4405DD8DF9D25 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 33AC137755E9D28933403024 /* Pods_Runner.framework */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; - 4C5B5C8D953A89E286B2DF58 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CF26FA061076D0F56FAE0E55 /* Pods_RunnerTests.framework */; }; + 64FAAECB542C8A4AB2D063D2 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 468B3D82A8E7362654223F6F /* Pods_RunnerTests.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; @@ -44,35 +44,35 @@ /* Begin PBXFileReference section */ 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; + 230907B81ABBBE54EDD3D92A /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 33AC137755E9D28933403024 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 348DE31F4CCE0D6A451383E7 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 57108351B590B4D8C549D850 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 468B3D82A8E7362654223F6F /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 6BBD6F4451CA6EB726893C37 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 921754D0B5FB7D62B705CBDF /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 914F2DA382F9E2C3A7E83EB5 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; + 9747D350E0CF79FD5C0FECAB /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - C4EE440F4E6EB7D727A0ECC7 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - C7B83657D373454233D42409 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - CF26FA061076D0F56FAE0E55 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - D176009CABAF267344B2A2B1 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - F5DE27A058F7CDB67FD1011C /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + C94A641E14FACBB5C9C82B23 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + D594E156A999614A354720D9 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 1D3E82A57C39EDA2EC389B12 /* Frameworks */ = { + 936D3A87682C3D4617F2544B /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 4C5B5C8D953A89E286B2DF58 /* Pods_RunnerTests.framework in Frameworks */, + 64FAAECB542C8A4AB2D063D2 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -80,7 +80,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 1FDE37956AB4405DD8DF9D25 /* Pods_Runner.framework in Frameworks */, + 079C3C1D22F2289294620456 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -113,8 +113,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - D0C943B286C30AD52804559B /* Pods */, - DAFF73A92485097757492046 /* Frameworks */, + E11E89FF5D3D57A4206FAEE3 /* Pods */, + C1CD4192BD09C48BF2590FF1 /* Frameworks */, ); sourceTree = ""; }; @@ -142,27 +142,27 @@ path = Runner; sourceTree = ""; }; - D0C943B286C30AD52804559B /* Pods */ = { + C1CD4192BD09C48BF2590FF1 /* Frameworks */ = { isa = PBXGroup; children = ( - 921754D0B5FB7D62B705CBDF /* Pods-Runner.debug.xcconfig */, - C7B83657D373454233D42409 /* Pods-Runner.release.xcconfig */, - 57108351B590B4D8C549D850 /* Pods-Runner.profile.xcconfig */, - F5DE27A058F7CDB67FD1011C /* Pods-RunnerTests.debug.xcconfig */, - D176009CABAF267344B2A2B1 /* Pods-RunnerTests.release.xcconfig */, - C4EE440F4E6EB7D727A0ECC7 /* Pods-RunnerTests.profile.xcconfig */, + 230907B81ABBBE54EDD3D92A /* Pods_Runner.framework */, + 468B3D82A8E7362654223F6F /* Pods_RunnerTests.framework */, ); - name = Pods; - path = Pods; + name = Frameworks; sourceTree = ""; }; - DAFF73A92485097757492046 /* Frameworks */ = { + E11E89FF5D3D57A4206FAEE3 /* Pods */ = { isa = PBXGroup; children = ( - 33AC137755E9D28933403024 /* Pods_Runner.framework */, - CF26FA061076D0F56FAE0E55 /* Pods_RunnerTests.framework */, + 348DE31F4CCE0D6A451383E7 /* Pods-Runner.debug.xcconfig */, + 9747D350E0CF79FD5C0FECAB /* Pods-Runner.release.xcconfig */, + D594E156A999614A354720D9 /* Pods-Runner.profile.xcconfig */, + 914F2DA382F9E2C3A7E83EB5 /* Pods-RunnerTests.debug.xcconfig */, + 6BBD6F4451CA6EB726893C37 /* Pods-RunnerTests.release.xcconfig */, + C94A641E14FACBB5C9C82B23 /* Pods-RunnerTests.profile.xcconfig */, ); - name = Frameworks; + name = Pods; + path = Pods; sourceTree = ""; }; /* End PBXGroup section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 6C3F7E652D3D2C8D06E02A15 /* [CP] Check Pods Manifest.lock */, + 7F9FC99CA9E45369A25AF36A /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 1D3E82A57C39EDA2EC389B12 /* Frameworks */, + 936D3A87682C3D4617F2544B /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 8BE71F121AB8460C3BAA040B /* [CP] Check Pods Manifest.lock */, + 9B7E0515E2987B0F2F2161A0 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - EAF9488CA71F427DD9C4C126 /* [CP] Embed Pods Frameworks */, + 66245B0048ADE2CC238D41DE /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -286,29 +286,24 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 6C3F7E652D3D2C8D06E02A15 /* [CP] Check Pods Manifest.lock */ = { + 66245B0048ADE2CC238D41DE /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - 8BE71F121AB8460C3BAA040B /* [CP] Check Pods Manifest.lock */ = { + 7F9FC99CA9E45369A25AF36A /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -323,7 +318,7 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -345,21 +340,26 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - EAF9488CA71F427DD9C4C126 /* [CP] Embed Pods Frameworks */ = { + 9B7E0515E2987B0F2F2161A0 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = F5DE27A058F7CDB67FD1011C /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 914F2DA382F9E2C3A7E83EB5 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = D176009CABAF267344B2A2B1 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 6BBD6F4451CA6EB726893C37 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C4EE440F4E6EB7D727A0ECC7 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = C94A641E14FACBB5C9C82B23 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/brick_breaker/step_09/linux/CMakeLists.txt b/brick_breaker/step_09/linux/CMakeLists.txt index 97c400e174..9f288a67f3 100644 --- a/brick_breaker/step_09/linux/CMakeLists.txt +++ b/brick_breaker/step_09/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/brick_breaker/step_09/linux/my_application.cc b/brick_breaker/step_09/linux/my_application.cc deleted file mode 100644 index 5f348fea29..0000000000 --- a/brick_breaker/step_09/linux/my_application.cc +++ /dev/null @@ -1,124 +0,0 @@ -#include "my_application.h" - -#include -#ifdef GDK_WINDOWING_X11 -#include -#endif - -#include "flutter/generated_plugin_registrant.h" - -struct _MyApplication { - GtkApplication parent_instance; - char** dart_entrypoint_arguments; -}; - -G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) - -// Implements GApplication::activate. -static void my_application_activate(GApplication* application) { - MyApplication* self = MY_APPLICATION(application); - GtkWindow* window = - GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); - - // Use a header bar when running in GNOME as this is the common style used - // by applications and is the setup most users will be using (e.g. Ubuntu - // desktop). - // If running on X and not using GNOME then just use a traditional title bar - // in case the window manager does more exotic layout, e.g. tiling. - // If running on Wayland assume the header bar will work (may need changing - // if future cases occur). - gboolean use_header_bar = TRUE; -#ifdef GDK_WINDOWING_X11 - GdkScreen* screen = gtk_window_get_screen(window); - if (GDK_IS_X11_SCREEN(screen)) { - const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); - if (g_strcmp0(wm_name, "GNOME Shell") != 0) { - use_header_bar = FALSE; - } - } -#endif - if (use_header_bar) { - GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); - gtk_widget_show(GTK_WIDGET(header_bar)); - gtk_header_bar_set_title(header_bar, "brick_breaker"); - gtk_header_bar_set_show_close_button(header_bar, TRUE); - gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); - } else { - gtk_window_set_title(window, "brick_breaker"); - } - - gtk_window_set_default_size(window, 1280, 720); - gtk_widget_show(GTK_WIDGET(window)); - - g_autoptr(FlDartProject) project = fl_dart_project_new(); - fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); - - FlView* view = fl_view_new(project); - gtk_widget_show(GTK_WIDGET(view)); - gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); - - fl_register_plugins(FL_PLUGIN_REGISTRY(view)); - - gtk_widget_grab_focus(GTK_WIDGET(view)); -} - -// Implements GApplication::local_command_line. -static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { - MyApplication* self = MY_APPLICATION(application); - // Strip out the first argument as it is the binary name. - self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); - - g_autoptr(GError) error = nullptr; - if (!g_application_register(application, nullptr, &error)) { - g_warning("Failed to register: %s", error->message); - *exit_status = 1; - return TRUE; - } - - g_application_activate(application); - *exit_status = 0; - - return TRUE; -} - -// Implements GApplication::startup. -static void my_application_startup(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application startup. - - G_APPLICATION_CLASS(my_application_parent_class)->startup(application); -} - -// Implements GApplication::shutdown. -static void my_application_shutdown(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application shutdown. - - G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); -} - -// Implements GObject::dispose. -static void my_application_dispose(GObject* object) { - MyApplication* self = MY_APPLICATION(object); - g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); - G_OBJECT_CLASS(my_application_parent_class)->dispose(object); -} - -static void my_application_class_init(MyApplicationClass* klass) { - G_APPLICATION_CLASS(klass)->activate = my_application_activate; - G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; - G_APPLICATION_CLASS(klass)->startup = my_application_startup; - G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; - G_OBJECT_CLASS(klass)->dispose = my_application_dispose; -} - -static void my_application_init(MyApplication* self) {} - -MyApplication* my_application_new() { - return MY_APPLICATION(g_object_new(my_application_get_type(), - "application-id", APPLICATION_ID, - "flags", G_APPLICATION_NON_UNIQUE, - nullptr)); -} diff --git a/brick_breaker/step_09/linux/runner/CMakeLists.txt b/brick_breaker/step_09/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/brick_breaker/step_09/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/brick_breaker/step_09/linux/main.cc b/brick_breaker/step_09/linux/runner/main.cc similarity index 100% rename from brick_breaker/step_09/linux/main.cc rename to brick_breaker/step_09/linux/runner/main.cc diff --git a/brick_breaker/step_09/linux/runner/my_application.cc b/brick_breaker/step_09/linux/runner/my_application.cc new file mode 100644 index 0000000000..f80944a7ba --- /dev/null +++ b/brick_breaker/step_09/linux/runner/my_application.cc @@ -0,0 +1,130 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "brick_breaker"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "brick_breaker"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/brick_breaker/step_09/linux/my_application.h b/brick_breaker/step_09/linux/runner/my_application.h similarity index 100% rename from brick_breaker/step_09/linux/my_application.h rename to brick_breaker/step_09/linux/runner/my_application.h diff --git a/brick_breaker/step_09/macos/Runner.xcodeproj/project.pbxproj b/brick_breaker/step_09/macos/Runner.xcodeproj/project.pbxproj index a78fe5d634..636a28c53a 100644 --- a/brick_breaker/step_09/macos/Runner.xcodeproj/project.pbxproj +++ b/brick_breaker/step_09/macos/Runner.xcodeproj/project.pbxproj @@ -27,8 +27,8 @@ 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - C4C9574636BE6A4E4FB0B2CE /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6FCB2318B484E6B08BC225C9 /* Pods_RunnerTests.framework */; }; - E90E97A8060D14C84B8DA369 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C56C61E533A3BFDF4C1192D5 /* Pods_Runner.framework */; }; + 4EDE108470BB936D2121DAC2 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C352266AE7D36E6036C311DB /* Pods_Runner.framework */; }; + D1ADFA42F2A712AE0DDB3C4F /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F7DDA05F09C7BFFC6495BD57 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,6 +62,9 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 116A2D736E3DB4E136903D2C /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 16CD08E3FF9AD3D23AC8A89E /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 1771944E11EF7BBD50D4D2FD /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -78,16 +81,13 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 359D845285584F7E54CFA116 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - 444661201D8FE89234659006 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 6FCB2318B484E6B08BC225C9 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 3C11113B321AB882C8752E03 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 8439420B8D7BE1E12B824FFB /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - B6BD88C865BE44852BFF1199 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - C56C61E533A3BFDF4C1192D5 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - CD6AABE5E3D964B13C82E7E4 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - EB9690E51B4629D41E7CA82B /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + C352266AE7D36E6036C311DB /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + C4186463924752EE4186F1BD /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + F0E4CC2439991D402B203A71 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + F7DDA05F09C7BFFC6495BD57 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - C4C9574636BE6A4E4FB0B2CE /* Pods_RunnerTests.framework in Frameworks */, + D1ADFA42F2A712AE0DDB3C4F /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,7 +103,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - E90E97A8060D14C84B8DA369 /* Pods_Runner.framework in Frameworks */, + 4EDE108470BB936D2121DAC2 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -137,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 48B33EF507EB7B28B7E14EFF /* Pods */, + FE0B828880FE4FF908108270 /* Pods */, ); sourceTree = ""; }; @@ -185,27 +185,27 @@ path = Runner; sourceTree = ""; }; - 48B33EF507EB7B28B7E14EFF /* Pods */ = { + D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - B6BD88C865BE44852BFF1199 /* Pods-Runner.debug.xcconfig */, - EB9690E51B4629D41E7CA82B /* Pods-Runner.release.xcconfig */, - 359D845285584F7E54CFA116 /* Pods-Runner.profile.xcconfig */, - 444661201D8FE89234659006 /* Pods-RunnerTests.debug.xcconfig */, - 8439420B8D7BE1E12B824FFB /* Pods-RunnerTests.release.xcconfig */, - CD6AABE5E3D964B13C82E7E4 /* Pods-RunnerTests.profile.xcconfig */, + C352266AE7D36E6036C311DB /* Pods_Runner.framework */, + F7DDA05F09C7BFFC6495BD57 /* Pods_RunnerTests.framework */, ); - name = Pods; - path = Pods; + name = Frameworks; sourceTree = ""; }; - D73912EC22F37F3D000D13A0 /* Frameworks */ = { + FE0B828880FE4FF908108270 /* Pods */ = { isa = PBXGroup; children = ( - C56C61E533A3BFDF4C1192D5 /* Pods_Runner.framework */, - 6FCB2318B484E6B08BC225C9 /* Pods_RunnerTests.framework */, + 16CD08E3FF9AD3D23AC8A89E /* Pods-Runner.debug.xcconfig */, + C4186463924752EE4186F1BD /* Pods-Runner.release.xcconfig */, + 1771944E11EF7BBD50D4D2FD /* Pods-Runner.profile.xcconfig */, + 116A2D736E3DB4E136903D2C /* Pods-RunnerTests.debug.xcconfig */, + F0E4CC2439991D402B203A71 /* Pods-RunnerTests.release.xcconfig */, + 3C11113B321AB882C8752E03 /* Pods-RunnerTests.profile.xcconfig */, ); - name = Frameworks; + name = Pods; + path = Pods; sourceTree = ""; }; /* End PBXGroup section */ @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - C9C1A55E30F374EE956A43CF /* [CP] Check Pods Manifest.lock */, + 53D3984EB9BDCC15FE39632C /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 07CC4A63D503F82167533A3A /* [CP] Check Pods Manifest.lock */, + 8C9C6CB44270EC110E6DCD63 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 16DDFD5B0CD2FD63661C0661 /* [CP] Embed Pods Frameworks */, + 4BE7093447D6D7ADBFBF4C29 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,84 +323,84 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 07CC4A63D503F82167533A3A /* [CP] Check Pods Manifest.lock */ = { + 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", ); - name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; }; - 16DDFD5B0CD2FD63661C0661 /* [CP] Embed Pods Frameworks */ = { + 33CC111E2044C6BF0003C045 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + Flutter/ephemeral/FlutterInputs.xcfilelist, + ); + inputPaths = ( + Flutter/ephemeral/tripwire, ); - name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + Flutter/ephemeral/FlutterOutputs.xcfilelist, + ); + outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; + shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 3399D490228B24CF009A79C7 /* ShellScript */ = { + 4BE7093447D6D7ADBFBF4C29 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - ); + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; }; - 33CC111E2044C6BF0003C045 /* ShellScript */ = { + 53D3984EB9BDCC15FE39632C /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - Flutter/ephemeral/FlutterInputs.xcfilelist, ); inputPaths = ( - Flutter/ephemeral/tripwire, + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - Flutter/ephemeral/FlutterOutputs.xcfilelist, ); outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - C9C1A55E30F374EE956A43CF /* [CP] Check Pods Manifest.lock */ = { + 8C9C6CB44270EC110E6DCD63 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -415,7 +415,7 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 444661201D8FE89234659006 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 116A2D736E3DB4E136903D2C /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 8439420B8D7BE1E12B824FFB /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = F0E4CC2439991D402B203A71 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = CD6AABE5E3D964B13C82E7E4 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 3C11113B321AB882C8752E03 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/brick_breaker/step_09/macos/Runner/AppDelegate.swift b/brick_breaker/step_09/macos/Runner/AppDelegate.swift index 8e02df2888..b3c1761412 100644 --- a/brick_breaker/step_09/macos/Runner/AppDelegate.swift +++ b/brick_breaker/step_09/macos/Runner/AppDelegate.swift @@ -6,4 +6,8 @@ class AppDelegate: FlutterAppDelegate { override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { return true } + + override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { + return true + } } diff --git a/brick_breaker/step_09/pubspec.yaml b/brick_breaker/step_09/pubspec.yaml index 4da1f0923a..ce0c17eaf5 100644 --- a/brick_breaker/step_09/pubspec.yaml +++ b/brick_breaker/step_09/pubspec.yaml @@ -16,7 +16,7 @@ dependencies: dev_dependencies: flutter_test: sdk: flutter - flutter_lints: ^4.0.0 + flutter_lints: ^5.0.0 flutter: uses-material-design: true diff --git a/brick_breaker/step_09/web/index.html b/brick_breaker/step_09/web/index.html index 0ffbea0397..da690bb6c1 100644 --- a/brick_breaker/step_09/web/index.html +++ b/brick_breaker/step_09/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/brick_breaker/step_10/.gitignore b/brick_breaker/step_10/.gitignore index 29a3a5017f..79c113f9b5 100644 --- a/brick_breaker/step_10/.gitignore +++ b/brick_breaker/step_10/.gitignore @@ -5,9 +5,11 @@ *.swp .DS_Store .atom/ +.build/ .buildlog/ .history .svn/ +.swiftpm/ migrate_working_dir/ # IntelliJ related diff --git a/brick_breaker/step_10/android/gradle.properties b/brick_breaker/step_10/android/gradle.properties index 2597170821..f018a61817 100644 --- a/brick_breaker/step_10/android/gradle.properties +++ b/brick_breaker/step_10/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/brick_breaker/step_10/android/gradle/wrapper/gradle-wrapper.properties b/brick_breaker/step_10/android/gradle/wrapper/gradle-wrapper.properties index e1ca574ef0..7bb2df6ba6 100644 --- a/brick_breaker/step_10/android/gradle/wrapper/gradle-wrapper.properties +++ b/brick_breaker/step_10/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip diff --git a/brick_breaker/step_10/android/settings.gradle b/brick_breaker/step_10/android/settings.gradle index 536165d35a..b9e43bd376 100644 --- a/brick_breaker/step_10/android/settings.gradle +++ b/brick_breaker/step_10/android/settings.gradle @@ -18,8 +18,8 @@ pluginManagement { plugins { id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "7.3.0" apply false - id "org.jetbrains.kotlin.android" version "1.7.10" apply false + id "com.android.application" version "8.1.0" apply false + id "org.jetbrains.kotlin.android" version "1.8.22" apply false } include ":app" diff --git a/brick_breaker/step_10/ios/Runner.xcodeproj/project.pbxproj b/brick_breaker/step_10/ios/Runner.xcodeproj/project.pbxproj index b713cb952f..c78ae8b4ed 100644 --- a/brick_breaker/step_10/ios/Runner.xcodeproj/project.pbxproj +++ b/brick_breaker/step_10/ios/Runner.xcodeproj/project.pbxproj @@ -7,11 +7,11 @@ objects = { /* Begin PBXBuildFile section */ + 079C3C1D22F2289294620456 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 230907B81ABBBE54EDD3D92A /* Pods_Runner.framework */; }; 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; - 1FDE37956AB4405DD8DF9D25 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 33AC137755E9D28933403024 /* Pods_Runner.framework */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; - 4C5B5C8D953A89E286B2DF58 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CF26FA061076D0F56FAE0E55 /* Pods_RunnerTests.framework */; }; + 64FAAECB542C8A4AB2D063D2 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 468B3D82A8E7362654223F6F /* Pods_RunnerTests.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; @@ -44,35 +44,35 @@ /* Begin PBXFileReference section */ 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; + 230907B81ABBBE54EDD3D92A /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 33AC137755E9D28933403024 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 348DE31F4CCE0D6A451383E7 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 57108351B590B4D8C549D850 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 468B3D82A8E7362654223F6F /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 6BBD6F4451CA6EB726893C37 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 921754D0B5FB7D62B705CBDF /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 914F2DA382F9E2C3A7E83EB5 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; + 9747D350E0CF79FD5C0FECAB /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - C4EE440F4E6EB7D727A0ECC7 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - C7B83657D373454233D42409 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - CF26FA061076D0F56FAE0E55 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - D176009CABAF267344B2A2B1 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - F5DE27A058F7CDB67FD1011C /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + C94A641E14FACBB5C9C82B23 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + D594E156A999614A354720D9 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 1D3E82A57C39EDA2EC389B12 /* Frameworks */ = { + 936D3A87682C3D4617F2544B /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 4C5B5C8D953A89E286B2DF58 /* Pods_RunnerTests.framework in Frameworks */, + 64FAAECB542C8A4AB2D063D2 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -80,7 +80,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 1FDE37956AB4405DD8DF9D25 /* Pods_Runner.framework in Frameworks */, + 079C3C1D22F2289294620456 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -113,8 +113,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - D0C943B286C30AD52804559B /* Pods */, - DAFF73A92485097757492046 /* Frameworks */, + E11E89FF5D3D57A4206FAEE3 /* Pods */, + C1CD4192BD09C48BF2590FF1 /* Frameworks */, ); sourceTree = ""; }; @@ -142,27 +142,27 @@ path = Runner; sourceTree = ""; }; - D0C943B286C30AD52804559B /* Pods */ = { + C1CD4192BD09C48BF2590FF1 /* Frameworks */ = { isa = PBXGroup; children = ( - 921754D0B5FB7D62B705CBDF /* Pods-Runner.debug.xcconfig */, - C7B83657D373454233D42409 /* Pods-Runner.release.xcconfig */, - 57108351B590B4D8C549D850 /* Pods-Runner.profile.xcconfig */, - F5DE27A058F7CDB67FD1011C /* Pods-RunnerTests.debug.xcconfig */, - D176009CABAF267344B2A2B1 /* Pods-RunnerTests.release.xcconfig */, - C4EE440F4E6EB7D727A0ECC7 /* Pods-RunnerTests.profile.xcconfig */, + 230907B81ABBBE54EDD3D92A /* Pods_Runner.framework */, + 468B3D82A8E7362654223F6F /* Pods_RunnerTests.framework */, ); - name = Pods; - path = Pods; + name = Frameworks; sourceTree = ""; }; - DAFF73A92485097757492046 /* Frameworks */ = { + E11E89FF5D3D57A4206FAEE3 /* Pods */ = { isa = PBXGroup; children = ( - 33AC137755E9D28933403024 /* Pods_Runner.framework */, - CF26FA061076D0F56FAE0E55 /* Pods_RunnerTests.framework */, + 348DE31F4CCE0D6A451383E7 /* Pods-Runner.debug.xcconfig */, + 9747D350E0CF79FD5C0FECAB /* Pods-Runner.release.xcconfig */, + D594E156A999614A354720D9 /* Pods-Runner.profile.xcconfig */, + 914F2DA382F9E2C3A7E83EB5 /* Pods-RunnerTests.debug.xcconfig */, + 6BBD6F4451CA6EB726893C37 /* Pods-RunnerTests.release.xcconfig */, + C94A641E14FACBB5C9C82B23 /* Pods-RunnerTests.profile.xcconfig */, ); - name = Frameworks; + name = Pods; + path = Pods; sourceTree = ""; }; /* End PBXGroup section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 6C3F7E652D3D2C8D06E02A15 /* [CP] Check Pods Manifest.lock */, + 7F9FC99CA9E45369A25AF36A /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 1D3E82A57C39EDA2EC389B12 /* Frameworks */, + 936D3A87682C3D4617F2544B /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 8BE71F121AB8460C3BAA040B /* [CP] Check Pods Manifest.lock */, + 9B7E0515E2987B0F2F2161A0 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - EAF9488CA71F427DD9C4C126 /* [CP] Embed Pods Frameworks */, + 66245B0048ADE2CC238D41DE /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -286,29 +286,24 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 6C3F7E652D3D2C8D06E02A15 /* [CP] Check Pods Manifest.lock */ = { + 66245B0048ADE2CC238D41DE /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - 8BE71F121AB8460C3BAA040B /* [CP] Check Pods Manifest.lock */ = { + 7F9FC99CA9E45369A25AF36A /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -323,7 +318,7 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -345,21 +340,26 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - EAF9488CA71F427DD9C4C126 /* [CP] Embed Pods Frameworks */ = { + 9B7E0515E2987B0F2F2161A0 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = F5DE27A058F7CDB67FD1011C /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 914F2DA382F9E2C3A7E83EB5 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = D176009CABAF267344B2A2B1 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 6BBD6F4451CA6EB726893C37 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C4EE440F4E6EB7D727A0ECC7 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = C94A641E14FACBB5C9C82B23 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/brick_breaker/step_10/linux/CMakeLists.txt b/brick_breaker/step_10/linux/CMakeLists.txt index 97c400e174..9f288a67f3 100644 --- a/brick_breaker/step_10/linux/CMakeLists.txt +++ b/brick_breaker/step_10/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/brick_breaker/step_10/linux/my_application.cc b/brick_breaker/step_10/linux/my_application.cc deleted file mode 100644 index 5f348fea29..0000000000 --- a/brick_breaker/step_10/linux/my_application.cc +++ /dev/null @@ -1,124 +0,0 @@ -#include "my_application.h" - -#include -#ifdef GDK_WINDOWING_X11 -#include -#endif - -#include "flutter/generated_plugin_registrant.h" - -struct _MyApplication { - GtkApplication parent_instance; - char** dart_entrypoint_arguments; -}; - -G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) - -// Implements GApplication::activate. -static void my_application_activate(GApplication* application) { - MyApplication* self = MY_APPLICATION(application); - GtkWindow* window = - GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); - - // Use a header bar when running in GNOME as this is the common style used - // by applications and is the setup most users will be using (e.g. Ubuntu - // desktop). - // If running on X and not using GNOME then just use a traditional title bar - // in case the window manager does more exotic layout, e.g. tiling. - // If running on Wayland assume the header bar will work (may need changing - // if future cases occur). - gboolean use_header_bar = TRUE; -#ifdef GDK_WINDOWING_X11 - GdkScreen* screen = gtk_window_get_screen(window); - if (GDK_IS_X11_SCREEN(screen)) { - const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); - if (g_strcmp0(wm_name, "GNOME Shell") != 0) { - use_header_bar = FALSE; - } - } -#endif - if (use_header_bar) { - GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); - gtk_widget_show(GTK_WIDGET(header_bar)); - gtk_header_bar_set_title(header_bar, "brick_breaker"); - gtk_header_bar_set_show_close_button(header_bar, TRUE); - gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); - } else { - gtk_window_set_title(window, "brick_breaker"); - } - - gtk_window_set_default_size(window, 1280, 720); - gtk_widget_show(GTK_WIDGET(window)); - - g_autoptr(FlDartProject) project = fl_dart_project_new(); - fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); - - FlView* view = fl_view_new(project); - gtk_widget_show(GTK_WIDGET(view)); - gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); - - fl_register_plugins(FL_PLUGIN_REGISTRY(view)); - - gtk_widget_grab_focus(GTK_WIDGET(view)); -} - -// Implements GApplication::local_command_line. -static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { - MyApplication* self = MY_APPLICATION(application); - // Strip out the first argument as it is the binary name. - self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); - - g_autoptr(GError) error = nullptr; - if (!g_application_register(application, nullptr, &error)) { - g_warning("Failed to register: %s", error->message); - *exit_status = 1; - return TRUE; - } - - g_application_activate(application); - *exit_status = 0; - - return TRUE; -} - -// Implements GApplication::startup. -static void my_application_startup(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application startup. - - G_APPLICATION_CLASS(my_application_parent_class)->startup(application); -} - -// Implements GApplication::shutdown. -static void my_application_shutdown(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application shutdown. - - G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); -} - -// Implements GObject::dispose. -static void my_application_dispose(GObject* object) { - MyApplication* self = MY_APPLICATION(object); - g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); - G_OBJECT_CLASS(my_application_parent_class)->dispose(object); -} - -static void my_application_class_init(MyApplicationClass* klass) { - G_APPLICATION_CLASS(klass)->activate = my_application_activate; - G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; - G_APPLICATION_CLASS(klass)->startup = my_application_startup; - G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; - G_OBJECT_CLASS(klass)->dispose = my_application_dispose; -} - -static void my_application_init(MyApplication* self) {} - -MyApplication* my_application_new() { - return MY_APPLICATION(g_object_new(my_application_get_type(), - "application-id", APPLICATION_ID, - "flags", G_APPLICATION_NON_UNIQUE, - nullptr)); -} diff --git a/brick_breaker/step_10/linux/runner/CMakeLists.txt b/brick_breaker/step_10/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/brick_breaker/step_10/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/brick_breaker/step_10/linux/main.cc b/brick_breaker/step_10/linux/runner/main.cc similarity index 100% rename from brick_breaker/step_10/linux/main.cc rename to brick_breaker/step_10/linux/runner/main.cc diff --git a/brick_breaker/step_10/linux/runner/my_application.cc b/brick_breaker/step_10/linux/runner/my_application.cc new file mode 100644 index 0000000000..f80944a7ba --- /dev/null +++ b/brick_breaker/step_10/linux/runner/my_application.cc @@ -0,0 +1,130 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "brick_breaker"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "brick_breaker"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/brick_breaker/step_10/linux/my_application.h b/brick_breaker/step_10/linux/runner/my_application.h similarity index 100% rename from brick_breaker/step_10/linux/my_application.h rename to brick_breaker/step_10/linux/runner/my_application.h diff --git a/brick_breaker/step_10/macos/Runner.xcodeproj/project.pbxproj b/brick_breaker/step_10/macos/Runner.xcodeproj/project.pbxproj index a78fe5d634..636a28c53a 100644 --- a/brick_breaker/step_10/macos/Runner.xcodeproj/project.pbxproj +++ b/brick_breaker/step_10/macos/Runner.xcodeproj/project.pbxproj @@ -27,8 +27,8 @@ 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - C4C9574636BE6A4E4FB0B2CE /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6FCB2318B484E6B08BC225C9 /* Pods_RunnerTests.framework */; }; - E90E97A8060D14C84B8DA369 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C56C61E533A3BFDF4C1192D5 /* Pods_Runner.framework */; }; + 4EDE108470BB936D2121DAC2 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C352266AE7D36E6036C311DB /* Pods_Runner.framework */; }; + D1ADFA42F2A712AE0DDB3C4F /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F7DDA05F09C7BFFC6495BD57 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,6 +62,9 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 116A2D736E3DB4E136903D2C /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 16CD08E3FF9AD3D23AC8A89E /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 1771944E11EF7BBD50D4D2FD /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -78,16 +81,13 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 359D845285584F7E54CFA116 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - 444661201D8FE89234659006 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 6FCB2318B484E6B08BC225C9 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 3C11113B321AB882C8752E03 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 8439420B8D7BE1E12B824FFB /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - B6BD88C865BE44852BFF1199 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - C56C61E533A3BFDF4C1192D5 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - CD6AABE5E3D964B13C82E7E4 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - EB9690E51B4629D41E7CA82B /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + C352266AE7D36E6036C311DB /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + C4186463924752EE4186F1BD /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + F0E4CC2439991D402B203A71 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + F7DDA05F09C7BFFC6495BD57 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - C4C9574636BE6A4E4FB0B2CE /* Pods_RunnerTests.framework in Frameworks */, + D1ADFA42F2A712AE0DDB3C4F /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,7 +103,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - E90E97A8060D14C84B8DA369 /* Pods_Runner.framework in Frameworks */, + 4EDE108470BB936D2121DAC2 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -137,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 48B33EF507EB7B28B7E14EFF /* Pods */, + FE0B828880FE4FF908108270 /* Pods */, ); sourceTree = ""; }; @@ -185,27 +185,27 @@ path = Runner; sourceTree = ""; }; - 48B33EF507EB7B28B7E14EFF /* Pods */ = { + D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - B6BD88C865BE44852BFF1199 /* Pods-Runner.debug.xcconfig */, - EB9690E51B4629D41E7CA82B /* Pods-Runner.release.xcconfig */, - 359D845285584F7E54CFA116 /* Pods-Runner.profile.xcconfig */, - 444661201D8FE89234659006 /* Pods-RunnerTests.debug.xcconfig */, - 8439420B8D7BE1E12B824FFB /* Pods-RunnerTests.release.xcconfig */, - CD6AABE5E3D964B13C82E7E4 /* Pods-RunnerTests.profile.xcconfig */, + C352266AE7D36E6036C311DB /* Pods_Runner.framework */, + F7DDA05F09C7BFFC6495BD57 /* Pods_RunnerTests.framework */, ); - name = Pods; - path = Pods; + name = Frameworks; sourceTree = ""; }; - D73912EC22F37F3D000D13A0 /* Frameworks */ = { + FE0B828880FE4FF908108270 /* Pods */ = { isa = PBXGroup; children = ( - C56C61E533A3BFDF4C1192D5 /* Pods_Runner.framework */, - 6FCB2318B484E6B08BC225C9 /* Pods_RunnerTests.framework */, + 16CD08E3FF9AD3D23AC8A89E /* Pods-Runner.debug.xcconfig */, + C4186463924752EE4186F1BD /* Pods-Runner.release.xcconfig */, + 1771944E11EF7BBD50D4D2FD /* Pods-Runner.profile.xcconfig */, + 116A2D736E3DB4E136903D2C /* Pods-RunnerTests.debug.xcconfig */, + F0E4CC2439991D402B203A71 /* Pods-RunnerTests.release.xcconfig */, + 3C11113B321AB882C8752E03 /* Pods-RunnerTests.profile.xcconfig */, ); - name = Frameworks; + name = Pods; + path = Pods; sourceTree = ""; }; /* End PBXGroup section */ @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - C9C1A55E30F374EE956A43CF /* [CP] Check Pods Manifest.lock */, + 53D3984EB9BDCC15FE39632C /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 07CC4A63D503F82167533A3A /* [CP] Check Pods Manifest.lock */, + 8C9C6CB44270EC110E6DCD63 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 16DDFD5B0CD2FD63661C0661 /* [CP] Embed Pods Frameworks */, + 4BE7093447D6D7ADBFBF4C29 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,84 +323,84 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 07CC4A63D503F82167533A3A /* [CP] Check Pods Manifest.lock */ = { + 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", ); - name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; }; - 16DDFD5B0CD2FD63661C0661 /* [CP] Embed Pods Frameworks */ = { + 33CC111E2044C6BF0003C045 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + Flutter/ephemeral/FlutterInputs.xcfilelist, + ); + inputPaths = ( + Flutter/ephemeral/tripwire, ); - name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + Flutter/ephemeral/FlutterOutputs.xcfilelist, + ); + outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; + shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 3399D490228B24CF009A79C7 /* ShellScript */ = { + 4BE7093447D6D7ADBFBF4C29 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - ); + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; }; - 33CC111E2044C6BF0003C045 /* ShellScript */ = { + 53D3984EB9BDCC15FE39632C /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - Flutter/ephemeral/FlutterInputs.xcfilelist, ); inputPaths = ( - Flutter/ephemeral/tripwire, + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - Flutter/ephemeral/FlutterOutputs.xcfilelist, ); outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - C9C1A55E30F374EE956A43CF /* [CP] Check Pods Manifest.lock */ = { + 8C9C6CB44270EC110E6DCD63 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -415,7 +415,7 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 444661201D8FE89234659006 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 116A2D736E3DB4E136903D2C /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 8439420B8D7BE1E12B824FFB /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = F0E4CC2439991D402B203A71 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = CD6AABE5E3D964B13C82E7E4 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 3C11113B321AB882C8752E03 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/brick_breaker/step_10/macos/Runner/AppDelegate.swift b/brick_breaker/step_10/macos/Runner/AppDelegate.swift index 8e02df2888..b3c1761412 100644 --- a/brick_breaker/step_10/macos/Runner/AppDelegate.swift +++ b/brick_breaker/step_10/macos/Runner/AppDelegate.swift @@ -6,4 +6,8 @@ class AppDelegate: FlutterAppDelegate { override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { return true } + + override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { + return true + } } diff --git a/brick_breaker/step_10/pubspec.yaml b/brick_breaker/step_10/pubspec.yaml index 4da1f0923a..ce0c17eaf5 100644 --- a/brick_breaker/step_10/pubspec.yaml +++ b/brick_breaker/step_10/pubspec.yaml @@ -16,7 +16,7 @@ dependencies: dev_dependencies: flutter_test: sdk: flutter - flutter_lints: ^4.0.0 + flutter_lints: ^5.0.0 flutter: uses-material-design: true diff --git a/brick_breaker/step_10/web/index.html b/brick_breaker/step_10/web/index.html index 0ffbea0397..da690bb6c1 100644 --- a/brick_breaker/step_10/web/index.html +++ b/brick_breaker/step_10/web/index.html @@ -21,7 +21,7 @@ - + From 4f36c6b9f63d8807bf5c032e924841c6e5b3381d Mon Sep 17 00:00:00 2001 From: Brett Morgan Date: Mon, 14 Oct 2024 15:34:19 +1100 Subject: [PATCH 006/108] Update `dart-patterns-and-records` --- dart-patterns-and-records/step_03/.gitignore | 2 + .../step_03/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../step_03/android/settings.gradle | 4 +- .../step_03/linux/CMakeLists.txt | 23 +--- .../step_03/linux/runner/CMakeLists.txt | 26 ++++ .../step_03/linux/{ => runner}/main.cc | 0 .../linux/{ => runner}/my_application.cc | 6 + .../linux/{ => runner}/my_application.h | 0 .../step_03/macos/Runner/AppDelegate.swift | 4 + .../step_03/web/index.html | 2 +- dart-patterns-and-records/step_04/.gitignore | 2 + .../step_04/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../step_04/android/settings.gradle | 4 +- .../step_04/linux/CMakeLists.txt | 23 +--- .../step_04/linux/runner/CMakeLists.txt | 26 ++++ .../step_04/linux/{ => runner}/main.cc | 0 .../linux/{ => runner}/my_application.cc | 6 + .../linux/{ => runner}/my_application.h | 0 .../step_04/macos/Runner/AppDelegate.swift | 4 + .../step_04/web/index.html | 2 +- dart-patterns-and-records/step_05/.gitignore | 2 + .../step_05/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../step_05/android/settings.gradle | 4 +- .../step_05/linux/CMakeLists.txt | 23 +--- .../step_05/linux/runner/CMakeLists.txt | 26 ++++ .../step_05/linux/{ => runner}/main.cc | 0 .../linux/{ => runner}/my_application.cc | 6 + .../linux/{ => runner}/my_application.h | 0 .../step_05/macos/Runner/AppDelegate.swift | 4 + .../step_05/web/index.html | 2 +- .../step_06_a/.gitignore | 2 + .../step_06_a/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../step_06_a/android/settings.gradle | 4 +- .../step_06_a/linux/CMakeLists.txt | 23 +--- .../step_06_a/linux/runner/CMakeLists.txt | 26 ++++ .../step_06_a/linux/{ => runner}/main.cc | 0 .../linux/{ => runner}/my_application.cc | 6 + .../linux/{ => runner}/my_application.h | 0 .../step_06_a/macos/Runner/AppDelegate.swift | 4 + .../step_06_a/web/index.html | 2 +- .../step_06_b/.gitignore | 2 + .../step_06_b/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../step_06_b/android/settings.gradle | 4 +- .../step_06_b/linux/CMakeLists.txt | 23 +--- .../step_06_b/linux/my_application.cc | 124 ----------------- .../step_06_b/linux/runner/CMakeLists.txt | 26 ++++ .../step_06_b/linux/{ => runner}/main.cc | 0 .../step_06_b/linux/runner/my_application.cc | 130 ++++++++++++++++++ .../linux/{ => runner}/my_application.h | 0 .../step_06_b/macos/Runner/AppDelegate.swift | 4 + .../step_06_b/web/index.html | 2 +- .../step_07_a/.gitignore | 2 + .../step_07_a/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../step_07_a/android/settings.gradle | 4 +- .../step_07_a/linux/CMakeLists.txt | 23 +--- .../step_07_a/linux/my_application.cc | 124 ----------------- .../step_07_a/linux/runner/CMakeLists.txt | 26 ++++ .../step_07_a/linux/{ => runner}/main.cc | 0 .../step_07_a/linux/runner/my_application.cc | 130 ++++++++++++++++++ .../linux/{ => runner}/my_application.h | 0 .../step_07_a/macos/Runner/AppDelegate.swift | 4 + .../step_07_a/web/index.html | 2 +- .../step_07_b/.gitignore | 2 + .../step_07_b/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../step_07_b/android/settings.gradle | 4 +- .../step_07_b/linux/CMakeLists.txt | 23 +--- .../step_07_b/linux/my_application.cc | 124 ----------------- .../step_07_b/linux/runner/CMakeLists.txt | 26 ++++ .../step_07_b/linux/{ => runner}/main.cc | 0 .../step_07_b/linux/runner/my_application.cc | 130 ++++++++++++++++++ .../linux/{ => runner}/my_application.h | 0 .../step_07_b/macos/Runner/AppDelegate.swift | 4 + .../step_07_b/web/index.html | 2 +- dart-patterns-and-records/step_08/.gitignore | 2 + .../step_08/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../step_08/android/settings.gradle | 4 +- .../step_08/linux/CMakeLists.txt | 23 +--- .../step_08/linux/my_application.cc | 124 ----------------- .../step_08/linux/runner/CMakeLists.txt | 26 ++++ .../step_08/linux/{ => runner}/main.cc | 0 .../step_08/linux/runner/my_application.cc | 130 ++++++++++++++++++ .../linux/{ => runner}/my_application.h | 0 .../step_08/macos/Runner/AppDelegate.swift | 4 + .../step_08/web/index.html | 2 +- dart-patterns-and-records/step_09/.gitignore | 2 + .../step_09/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../step_09/android/settings.gradle | 4 +- .../step_09/linux/CMakeLists.txt | 23 +--- .../step_09/linux/my_application.cc | 124 ----------------- .../step_09/linux/runner/CMakeLists.txt | 26 ++++ .../step_09/linux/{ => runner}/main.cc | 0 .../step_09/linux/runner/my_application.cc | 130 ++++++++++++++++++ .../linux/{ => runner}/my_application.h | 0 .../step_09/macos/Runner/AppDelegate.swift | 4 + .../step_09/web/index.html | 2 +- dart-patterns-and-records/step_10/.gitignore | 2 + .../step_10/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../step_10/android/settings.gradle | 4 +- .../step_10/linux/CMakeLists.txt | 23 +--- .../step_10/linux/my_application.cc | 124 ----------------- .../step_10/linux/runner/CMakeLists.txt | 26 ++++ .../step_10/linux/{ => runner}/main.cc | 0 .../step_10/linux/runner/my_application.cc | 130 ++++++++++++++++++ .../linux/{ => runner}/my_application.h | 0 .../step_10/macos/Runner/AppDelegate.swift | 4 + .../step_10/web/index.html | 2 +- .../step_11_a/.gitignore | 2 + .../step_11_a/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../step_11_a/android/settings.gradle | 4 +- .../step_11_a/linux/CMakeLists.txt | 23 +--- .../step_11_a/linux/my_application.cc | 124 ----------------- .../step_11_a/linux/runner/CMakeLists.txt | 26 ++++ .../step_11_a/linux/{ => runner}/main.cc | 0 .../step_11_a/linux/runner/my_application.cc | 130 ++++++++++++++++++ .../linux/{ => runner}/my_application.h | 0 .../step_11_a/macos/Runner/AppDelegate.swift | 4 + .../step_11_a/web/index.html | 2 +- .../step_11_b/.gitignore | 2 + .../step_11_b/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../step_11_b/android/settings.gradle | 4 +- .../step_11_b/linux/CMakeLists.txt | 23 +--- .../step_11_b/linux/my_application.cc | 124 ----------------- .../step_11_b/linux/runner/CMakeLists.txt | 26 ++++ .../step_11_b/linux/{ => runner}/main.cc | 0 .../step_11_b/linux/runner/my_application.cc | 130 ++++++++++++++++++ .../linux/{ => runner}/my_application.h | 0 .../step_11_b/macos/Runner/AppDelegate.swift | 4 + .../step_11_b/web/index.html | 2 +- dart-patterns-and-records/step_12/.gitignore | 2 + .../step_12/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../step_12/android/settings.gradle | 4 +- .../step_12/linux/CMakeLists.txt | 23 +--- .../step_12/linux/my_application.cc | 124 ----------------- .../step_12/linux/runner/CMakeLists.txt | 26 ++++ .../step_12/linux/{ => runner}/main.cc | 0 .../step_12/linux/runner/my_application.cc | 130 ++++++++++++++++++ .../linux/{ => runner}/my_application.h | 0 .../step_12/macos/Runner/AppDelegate.swift | 4 + .../step_12/web/index.html | 2 +- 152 files changed, 1714 insertions(+), 1441 deletions(-) create mode 100644 dart-patterns-and-records/step_03/linux/runner/CMakeLists.txt rename dart-patterns-and-records/step_03/linux/{ => runner}/main.cc (100%) rename dart-patterns-and-records/step_03/linux/{ => runner}/my_application.cc (93%) rename dart-patterns-and-records/step_03/linux/{ => runner}/my_application.h (100%) create mode 100644 dart-patterns-and-records/step_04/linux/runner/CMakeLists.txt rename dart-patterns-and-records/step_04/linux/{ => runner}/main.cc (100%) rename dart-patterns-and-records/step_04/linux/{ => runner}/my_application.cc (93%) rename dart-patterns-and-records/step_04/linux/{ => runner}/my_application.h (100%) create mode 100644 dart-patterns-and-records/step_05/linux/runner/CMakeLists.txt rename dart-patterns-and-records/step_05/linux/{ => runner}/main.cc (100%) rename dart-patterns-and-records/step_05/linux/{ => runner}/my_application.cc (93%) rename dart-patterns-and-records/step_05/linux/{ => runner}/my_application.h (100%) create mode 100644 dart-patterns-and-records/step_06_a/linux/runner/CMakeLists.txt rename dart-patterns-and-records/step_06_a/linux/{ => runner}/main.cc (100%) rename dart-patterns-and-records/step_06_a/linux/{ => runner}/my_application.cc (93%) rename dart-patterns-and-records/step_06_a/linux/{ => runner}/my_application.h (100%) delete mode 100644 dart-patterns-and-records/step_06_b/linux/my_application.cc create mode 100644 dart-patterns-and-records/step_06_b/linux/runner/CMakeLists.txt rename dart-patterns-and-records/step_06_b/linux/{ => runner}/main.cc (100%) create mode 100644 dart-patterns-and-records/step_06_b/linux/runner/my_application.cc rename dart-patterns-and-records/step_06_b/linux/{ => runner}/my_application.h (100%) delete mode 100644 dart-patterns-and-records/step_07_a/linux/my_application.cc create mode 100644 dart-patterns-and-records/step_07_a/linux/runner/CMakeLists.txt rename dart-patterns-and-records/step_07_a/linux/{ => runner}/main.cc (100%) create mode 100644 dart-patterns-and-records/step_07_a/linux/runner/my_application.cc rename dart-patterns-and-records/step_07_a/linux/{ => runner}/my_application.h (100%) delete mode 100644 dart-patterns-and-records/step_07_b/linux/my_application.cc create mode 100644 dart-patterns-and-records/step_07_b/linux/runner/CMakeLists.txt rename dart-patterns-and-records/step_07_b/linux/{ => runner}/main.cc (100%) create mode 100644 dart-patterns-and-records/step_07_b/linux/runner/my_application.cc rename dart-patterns-and-records/step_07_b/linux/{ => runner}/my_application.h (100%) delete mode 100644 dart-patterns-and-records/step_08/linux/my_application.cc create mode 100644 dart-patterns-and-records/step_08/linux/runner/CMakeLists.txt rename dart-patterns-and-records/step_08/linux/{ => runner}/main.cc (100%) create mode 100644 dart-patterns-and-records/step_08/linux/runner/my_application.cc rename dart-patterns-and-records/step_08/linux/{ => runner}/my_application.h (100%) delete mode 100644 dart-patterns-and-records/step_09/linux/my_application.cc create mode 100644 dart-patterns-and-records/step_09/linux/runner/CMakeLists.txt rename dart-patterns-and-records/step_09/linux/{ => runner}/main.cc (100%) create mode 100644 dart-patterns-and-records/step_09/linux/runner/my_application.cc rename dart-patterns-and-records/step_09/linux/{ => runner}/my_application.h (100%) delete mode 100644 dart-patterns-and-records/step_10/linux/my_application.cc create mode 100644 dart-patterns-and-records/step_10/linux/runner/CMakeLists.txt rename dart-patterns-and-records/step_10/linux/{ => runner}/main.cc (100%) create mode 100644 dart-patterns-and-records/step_10/linux/runner/my_application.cc rename dart-patterns-and-records/step_10/linux/{ => runner}/my_application.h (100%) delete mode 100644 dart-patterns-and-records/step_11_a/linux/my_application.cc create mode 100644 dart-patterns-and-records/step_11_a/linux/runner/CMakeLists.txt rename dart-patterns-and-records/step_11_a/linux/{ => runner}/main.cc (100%) create mode 100644 dart-patterns-and-records/step_11_a/linux/runner/my_application.cc rename dart-patterns-and-records/step_11_a/linux/{ => runner}/my_application.h (100%) delete mode 100644 dart-patterns-and-records/step_11_b/linux/my_application.cc create mode 100644 dart-patterns-and-records/step_11_b/linux/runner/CMakeLists.txt rename dart-patterns-and-records/step_11_b/linux/{ => runner}/main.cc (100%) create mode 100644 dart-patterns-and-records/step_11_b/linux/runner/my_application.cc rename dart-patterns-and-records/step_11_b/linux/{ => runner}/my_application.h (100%) delete mode 100644 dart-patterns-and-records/step_12/linux/my_application.cc create mode 100644 dart-patterns-and-records/step_12/linux/runner/CMakeLists.txt rename dart-patterns-and-records/step_12/linux/{ => runner}/main.cc (100%) create mode 100644 dart-patterns-and-records/step_12/linux/runner/my_application.cc rename dart-patterns-and-records/step_12/linux/{ => runner}/my_application.h (100%) diff --git a/dart-patterns-and-records/step_03/.gitignore b/dart-patterns-and-records/step_03/.gitignore index 29a3a5017f..79c113f9b5 100644 --- a/dart-patterns-and-records/step_03/.gitignore +++ b/dart-patterns-and-records/step_03/.gitignore @@ -5,9 +5,11 @@ *.swp .DS_Store .atom/ +.build/ .buildlog/ .history .svn/ +.swiftpm/ migrate_working_dir/ # IntelliJ related diff --git a/dart-patterns-and-records/step_03/android/gradle.properties b/dart-patterns-and-records/step_03/android/gradle.properties index 2597170821..f018a61817 100644 --- a/dart-patterns-and-records/step_03/android/gradle.properties +++ b/dart-patterns-and-records/step_03/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/dart-patterns-and-records/step_03/android/gradle/wrapper/gradle-wrapper.properties b/dart-patterns-and-records/step_03/android/gradle/wrapper/gradle-wrapper.properties index e1ca574ef0..7bb2df6ba6 100644 --- a/dart-patterns-and-records/step_03/android/gradle/wrapper/gradle-wrapper.properties +++ b/dart-patterns-and-records/step_03/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip diff --git a/dart-patterns-and-records/step_03/android/settings.gradle b/dart-patterns-and-records/step_03/android/settings.gradle index 536165d35a..b9e43bd376 100644 --- a/dart-patterns-and-records/step_03/android/settings.gradle +++ b/dart-patterns-and-records/step_03/android/settings.gradle @@ -18,8 +18,8 @@ pluginManagement { plugins { id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "7.3.0" apply false - id "org.jetbrains.kotlin.android" version "1.7.10" apply false + id "com.android.application" version "8.1.0" apply false + id "org.jetbrains.kotlin.android" version "1.8.22" apply false } include ":app" diff --git a/dart-patterns-and-records/step_03/linux/CMakeLists.txt b/dart-patterns-and-records/step_03/linux/CMakeLists.txt index dc88dd5e7d..6f653779a7 100644 --- a/dart-patterns-and-records/step_03/linux/CMakeLists.txt +++ b/dart-patterns-and-records/step_03/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/dart-patterns-and-records/step_03/linux/runner/CMakeLists.txt b/dart-patterns-and-records/step_03/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/dart-patterns-and-records/step_03/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/dart-patterns-and-records/step_03/linux/main.cc b/dart-patterns-and-records/step_03/linux/runner/main.cc similarity index 100% rename from dart-patterns-and-records/step_03/linux/main.cc rename to dart-patterns-and-records/step_03/linux/runner/main.cc diff --git a/dart-patterns-and-records/step_03/linux/my_application.cc b/dart-patterns-and-records/step_03/linux/runner/my_application.cc similarity index 93% rename from dart-patterns-and-records/step_03/linux/my_application.cc rename to dart-patterns-and-records/step_03/linux/runner/my_application.cc index 2e328e01f8..7065b83916 100644 --- a/dart-patterns-and-records/step_03/linux/my_application.cc +++ b/dart-patterns-and-records/step_03/linux/runner/my_application.cc @@ -117,6 +117,12 @@ static void my_application_class_init(MyApplicationClass* klass) { static void my_application_init(MyApplication* self) {} MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + return MY_APPLICATION(g_object_new(my_application_get_type(), "application-id", APPLICATION_ID, "flags", G_APPLICATION_NON_UNIQUE, diff --git a/dart-patterns-and-records/step_03/linux/my_application.h b/dart-patterns-and-records/step_03/linux/runner/my_application.h similarity index 100% rename from dart-patterns-and-records/step_03/linux/my_application.h rename to dart-patterns-and-records/step_03/linux/runner/my_application.h diff --git a/dart-patterns-and-records/step_03/macos/Runner/AppDelegate.swift b/dart-patterns-and-records/step_03/macos/Runner/AppDelegate.swift index 8e02df2888..b3c1761412 100644 --- a/dart-patterns-and-records/step_03/macos/Runner/AppDelegate.swift +++ b/dart-patterns-and-records/step_03/macos/Runner/AppDelegate.swift @@ -6,4 +6,8 @@ class AppDelegate: FlutterAppDelegate { override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { return true } + + override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { + return true + } } diff --git a/dart-patterns-and-records/step_03/web/index.html b/dart-patterns-and-records/step_03/web/index.html index e14846e8ce..adcc31bddb 100644 --- a/dart-patterns-and-records/step_03/web/index.html +++ b/dart-patterns-and-records/step_03/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/dart-patterns-and-records/step_04/.gitignore b/dart-patterns-and-records/step_04/.gitignore index 29a3a5017f..79c113f9b5 100644 --- a/dart-patterns-and-records/step_04/.gitignore +++ b/dart-patterns-and-records/step_04/.gitignore @@ -5,9 +5,11 @@ *.swp .DS_Store .atom/ +.build/ .buildlog/ .history .svn/ +.swiftpm/ migrate_working_dir/ # IntelliJ related diff --git a/dart-patterns-and-records/step_04/android/gradle.properties b/dart-patterns-and-records/step_04/android/gradle.properties index 2597170821..f018a61817 100644 --- a/dart-patterns-and-records/step_04/android/gradle.properties +++ b/dart-patterns-and-records/step_04/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/dart-patterns-and-records/step_04/android/gradle/wrapper/gradle-wrapper.properties b/dart-patterns-and-records/step_04/android/gradle/wrapper/gradle-wrapper.properties index e1ca574ef0..7bb2df6ba6 100644 --- a/dart-patterns-and-records/step_04/android/gradle/wrapper/gradle-wrapper.properties +++ b/dart-patterns-and-records/step_04/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip diff --git a/dart-patterns-and-records/step_04/android/settings.gradle b/dart-patterns-and-records/step_04/android/settings.gradle index 536165d35a..b9e43bd376 100644 --- a/dart-patterns-and-records/step_04/android/settings.gradle +++ b/dart-patterns-and-records/step_04/android/settings.gradle @@ -18,8 +18,8 @@ pluginManagement { plugins { id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "7.3.0" apply false - id "org.jetbrains.kotlin.android" version "1.7.10" apply false + id "com.android.application" version "8.1.0" apply false + id "org.jetbrains.kotlin.android" version "1.8.22" apply false } include ":app" diff --git a/dart-patterns-and-records/step_04/linux/CMakeLists.txt b/dart-patterns-and-records/step_04/linux/CMakeLists.txt index dc88dd5e7d..6f653779a7 100644 --- a/dart-patterns-and-records/step_04/linux/CMakeLists.txt +++ b/dart-patterns-and-records/step_04/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/dart-patterns-and-records/step_04/linux/runner/CMakeLists.txt b/dart-patterns-and-records/step_04/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/dart-patterns-and-records/step_04/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/dart-patterns-and-records/step_04/linux/main.cc b/dart-patterns-and-records/step_04/linux/runner/main.cc similarity index 100% rename from dart-patterns-and-records/step_04/linux/main.cc rename to dart-patterns-and-records/step_04/linux/runner/main.cc diff --git a/dart-patterns-and-records/step_04/linux/my_application.cc b/dart-patterns-and-records/step_04/linux/runner/my_application.cc similarity index 93% rename from dart-patterns-and-records/step_04/linux/my_application.cc rename to dart-patterns-and-records/step_04/linux/runner/my_application.cc index 2e328e01f8..7065b83916 100644 --- a/dart-patterns-and-records/step_04/linux/my_application.cc +++ b/dart-patterns-and-records/step_04/linux/runner/my_application.cc @@ -117,6 +117,12 @@ static void my_application_class_init(MyApplicationClass* klass) { static void my_application_init(MyApplication* self) {} MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + return MY_APPLICATION(g_object_new(my_application_get_type(), "application-id", APPLICATION_ID, "flags", G_APPLICATION_NON_UNIQUE, diff --git a/dart-patterns-and-records/step_04/linux/my_application.h b/dart-patterns-and-records/step_04/linux/runner/my_application.h similarity index 100% rename from dart-patterns-and-records/step_04/linux/my_application.h rename to dart-patterns-and-records/step_04/linux/runner/my_application.h diff --git a/dart-patterns-and-records/step_04/macos/Runner/AppDelegate.swift b/dart-patterns-and-records/step_04/macos/Runner/AppDelegate.swift index 8e02df2888..b3c1761412 100644 --- a/dart-patterns-and-records/step_04/macos/Runner/AppDelegate.swift +++ b/dart-patterns-and-records/step_04/macos/Runner/AppDelegate.swift @@ -6,4 +6,8 @@ class AppDelegate: FlutterAppDelegate { override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { return true } + + override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { + return true + } } diff --git a/dart-patterns-and-records/step_04/web/index.html b/dart-patterns-and-records/step_04/web/index.html index e14846e8ce..adcc31bddb 100644 --- a/dart-patterns-and-records/step_04/web/index.html +++ b/dart-patterns-and-records/step_04/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/dart-patterns-and-records/step_05/.gitignore b/dart-patterns-and-records/step_05/.gitignore index 29a3a5017f..79c113f9b5 100644 --- a/dart-patterns-and-records/step_05/.gitignore +++ b/dart-patterns-and-records/step_05/.gitignore @@ -5,9 +5,11 @@ *.swp .DS_Store .atom/ +.build/ .buildlog/ .history .svn/ +.swiftpm/ migrate_working_dir/ # IntelliJ related diff --git a/dart-patterns-and-records/step_05/android/gradle.properties b/dart-patterns-and-records/step_05/android/gradle.properties index 2597170821..f018a61817 100644 --- a/dart-patterns-and-records/step_05/android/gradle.properties +++ b/dart-patterns-and-records/step_05/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/dart-patterns-and-records/step_05/android/gradle/wrapper/gradle-wrapper.properties b/dart-patterns-and-records/step_05/android/gradle/wrapper/gradle-wrapper.properties index e1ca574ef0..7bb2df6ba6 100644 --- a/dart-patterns-and-records/step_05/android/gradle/wrapper/gradle-wrapper.properties +++ b/dart-patterns-and-records/step_05/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip diff --git a/dart-patterns-and-records/step_05/android/settings.gradle b/dart-patterns-and-records/step_05/android/settings.gradle index 536165d35a..b9e43bd376 100644 --- a/dart-patterns-and-records/step_05/android/settings.gradle +++ b/dart-patterns-and-records/step_05/android/settings.gradle @@ -18,8 +18,8 @@ pluginManagement { plugins { id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "7.3.0" apply false - id "org.jetbrains.kotlin.android" version "1.7.10" apply false + id "com.android.application" version "8.1.0" apply false + id "org.jetbrains.kotlin.android" version "1.8.22" apply false } include ":app" diff --git a/dart-patterns-and-records/step_05/linux/CMakeLists.txt b/dart-patterns-and-records/step_05/linux/CMakeLists.txt index dc88dd5e7d..6f653779a7 100644 --- a/dart-patterns-and-records/step_05/linux/CMakeLists.txt +++ b/dart-patterns-and-records/step_05/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/dart-patterns-and-records/step_05/linux/runner/CMakeLists.txt b/dart-patterns-and-records/step_05/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/dart-patterns-and-records/step_05/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/dart-patterns-and-records/step_05/linux/main.cc b/dart-patterns-and-records/step_05/linux/runner/main.cc similarity index 100% rename from dart-patterns-and-records/step_05/linux/main.cc rename to dart-patterns-and-records/step_05/linux/runner/main.cc diff --git a/dart-patterns-and-records/step_05/linux/my_application.cc b/dart-patterns-and-records/step_05/linux/runner/my_application.cc similarity index 93% rename from dart-patterns-and-records/step_05/linux/my_application.cc rename to dart-patterns-and-records/step_05/linux/runner/my_application.cc index 2e328e01f8..7065b83916 100644 --- a/dart-patterns-and-records/step_05/linux/my_application.cc +++ b/dart-patterns-and-records/step_05/linux/runner/my_application.cc @@ -117,6 +117,12 @@ static void my_application_class_init(MyApplicationClass* klass) { static void my_application_init(MyApplication* self) {} MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + return MY_APPLICATION(g_object_new(my_application_get_type(), "application-id", APPLICATION_ID, "flags", G_APPLICATION_NON_UNIQUE, diff --git a/dart-patterns-and-records/step_05/linux/my_application.h b/dart-patterns-and-records/step_05/linux/runner/my_application.h similarity index 100% rename from dart-patterns-and-records/step_05/linux/my_application.h rename to dart-patterns-and-records/step_05/linux/runner/my_application.h diff --git a/dart-patterns-and-records/step_05/macos/Runner/AppDelegate.swift b/dart-patterns-and-records/step_05/macos/Runner/AppDelegate.swift index 8e02df2888..b3c1761412 100644 --- a/dart-patterns-and-records/step_05/macos/Runner/AppDelegate.swift +++ b/dart-patterns-and-records/step_05/macos/Runner/AppDelegate.swift @@ -6,4 +6,8 @@ class AppDelegate: FlutterAppDelegate { override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { return true } + + override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { + return true + } } diff --git a/dart-patterns-and-records/step_05/web/index.html b/dart-patterns-and-records/step_05/web/index.html index e14846e8ce..adcc31bddb 100644 --- a/dart-patterns-and-records/step_05/web/index.html +++ b/dart-patterns-and-records/step_05/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/dart-patterns-and-records/step_06_a/.gitignore b/dart-patterns-and-records/step_06_a/.gitignore index 29a3a5017f..79c113f9b5 100644 --- a/dart-patterns-and-records/step_06_a/.gitignore +++ b/dart-patterns-and-records/step_06_a/.gitignore @@ -5,9 +5,11 @@ *.swp .DS_Store .atom/ +.build/ .buildlog/ .history .svn/ +.swiftpm/ migrate_working_dir/ # IntelliJ related diff --git a/dart-patterns-and-records/step_06_a/android/gradle.properties b/dart-patterns-and-records/step_06_a/android/gradle.properties index 2597170821..f018a61817 100644 --- a/dart-patterns-and-records/step_06_a/android/gradle.properties +++ b/dart-patterns-and-records/step_06_a/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/dart-patterns-and-records/step_06_a/android/gradle/wrapper/gradle-wrapper.properties b/dart-patterns-and-records/step_06_a/android/gradle/wrapper/gradle-wrapper.properties index e1ca574ef0..7bb2df6ba6 100644 --- a/dart-patterns-and-records/step_06_a/android/gradle/wrapper/gradle-wrapper.properties +++ b/dart-patterns-and-records/step_06_a/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip diff --git a/dart-patterns-and-records/step_06_a/android/settings.gradle b/dart-patterns-and-records/step_06_a/android/settings.gradle index 536165d35a..b9e43bd376 100644 --- a/dart-patterns-and-records/step_06_a/android/settings.gradle +++ b/dart-patterns-and-records/step_06_a/android/settings.gradle @@ -18,8 +18,8 @@ pluginManagement { plugins { id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "7.3.0" apply false - id "org.jetbrains.kotlin.android" version "1.7.10" apply false + id "com.android.application" version "8.1.0" apply false + id "org.jetbrains.kotlin.android" version "1.8.22" apply false } include ":app" diff --git a/dart-patterns-and-records/step_06_a/linux/CMakeLists.txt b/dart-patterns-and-records/step_06_a/linux/CMakeLists.txt index dc88dd5e7d..6f653779a7 100644 --- a/dart-patterns-and-records/step_06_a/linux/CMakeLists.txt +++ b/dart-patterns-and-records/step_06_a/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/dart-patterns-and-records/step_06_a/linux/runner/CMakeLists.txt b/dart-patterns-and-records/step_06_a/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/dart-patterns-and-records/step_06_a/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/dart-patterns-and-records/step_06_a/linux/main.cc b/dart-patterns-and-records/step_06_a/linux/runner/main.cc similarity index 100% rename from dart-patterns-and-records/step_06_a/linux/main.cc rename to dart-patterns-and-records/step_06_a/linux/runner/main.cc diff --git a/dart-patterns-and-records/step_06_a/linux/my_application.cc b/dart-patterns-and-records/step_06_a/linux/runner/my_application.cc similarity index 93% rename from dart-patterns-and-records/step_06_a/linux/my_application.cc rename to dart-patterns-and-records/step_06_a/linux/runner/my_application.cc index 2e328e01f8..7065b83916 100644 --- a/dart-patterns-and-records/step_06_a/linux/my_application.cc +++ b/dart-patterns-and-records/step_06_a/linux/runner/my_application.cc @@ -117,6 +117,12 @@ static void my_application_class_init(MyApplicationClass* klass) { static void my_application_init(MyApplication* self) {} MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + return MY_APPLICATION(g_object_new(my_application_get_type(), "application-id", APPLICATION_ID, "flags", G_APPLICATION_NON_UNIQUE, diff --git a/dart-patterns-and-records/step_06_a/linux/my_application.h b/dart-patterns-and-records/step_06_a/linux/runner/my_application.h similarity index 100% rename from dart-patterns-and-records/step_06_a/linux/my_application.h rename to dart-patterns-and-records/step_06_a/linux/runner/my_application.h diff --git a/dart-patterns-and-records/step_06_a/macos/Runner/AppDelegate.swift b/dart-patterns-and-records/step_06_a/macos/Runner/AppDelegate.swift index 8e02df2888..b3c1761412 100644 --- a/dart-patterns-and-records/step_06_a/macos/Runner/AppDelegate.swift +++ b/dart-patterns-and-records/step_06_a/macos/Runner/AppDelegate.swift @@ -6,4 +6,8 @@ class AppDelegate: FlutterAppDelegate { override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { return true } + + override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { + return true + } } diff --git a/dart-patterns-and-records/step_06_a/web/index.html b/dart-patterns-and-records/step_06_a/web/index.html index e14846e8ce..adcc31bddb 100644 --- a/dart-patterns-and-records/step_06_a/web/index.html +++ b/dart-patterns-and-records/step_06_a/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/dart-patterns-and-records/step_06_b/.gitignore b/dart-patterns-and-records/step_06_b/.gitignore index 29a3a5017f..79c113f9b5 100644 --- a/dart-patterns-and-records/step_06_b/.gitignore +++ b/dart-patterns-and-records/step_06_b/.gitignore @@ -5,9 +5,11 @@ *.swp .DS_Store .atom/ +.build/ .buildlog/ .history .svn/ +.swiftpm/ migrate_working_dir/ # IntelliJ related diff --git a/dart-patterns-and-records/step_06_b/android/gradle.properties b/dart-patterns-and-records/step_06_b/android/gradle.properties index 2597170821..f018a61817 100644 --- a/dart-patterns-and-records/step_06_b/android/gradle.properties +++ b/dart-patterns-and-records/step_06_b/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/dart-patterns-and-records/step_06_b/android/gradle/wrapper/gradle-wrapper.properties b/dart-patterns-and-records/step_06_b/android/gradle/wrapper/gradle-wrapper.properties index e1ca574ef0..7bb2df6ba6 100644 --- a/dart-patterns-and-records/step_06_b/android/gradle/wrapper/gradle-wrapper.properties +++ b/dart-patterns-and-records/step_06_b/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip diff --git a/dart-patterns-and-records/step_06_b/android/settings.gradle b/dart-patterns-and-records/step_06_b/android/settings.gradle index 536165d35a..b9e43bd376 100644 --- a/dart-patterns-and-records/step_06_b/android/settings.gradle +++ b/dart-patterns-and-records/step_06_b/android/settings.gradle @@ -18,8 +18,8 @@ pluginManagement { plugins { id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "7.3.0" apply false - id "org.jetbrains.kotlin.android" version "1.7.10" apply false + id "com.android.application" version "8.1.0" apply false + id "org.jetbrains.kotlin.android" version "1.8.22" apply false } include ":app" diff --git a/dart-patterns-and-records/step_06_b/linux/CMakeLists.txt b/dart-patterns-and-records/step_06_b/linux/CMakeLists.txt index dc88dd5e7d..6f653779a7 100644 --- a/dart-patterns-and-records/step_06_b/linux/CMakeLists.txt +++ b/dart-patterns-and-records/step_06_b/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/dart-patterns-and-records/step_06_b/linux/my_application.cc b/dart-patterns-and-records/step_06_b/linux/my_application.cc deleted file mode 100644 index 2e328e01f8..0000000000 --- a/dart-patterns-and-records/step_06_b/linux/my_application.cc +++ /dev/null @@ -1,124 +0,0 @@ -#include "my_application.h" - -#include -#ifdef GDK_WINDOWING_X11 -#include -#endif - -#include "flutter/generated_plugin_registrant.h" - -struct _MyApplication { - GtkApplication parent_instance; - char** dart_entrypoint_arguments; -}; - -G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) - -// Implements GApplication::activate. -static void my_application_activate(GApplication* application) { - MyApplication* self = MY_APPLICATION(application); - GtkWindow* window = - GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); - - // Use a header bar when running in GNOME as this is the common style used - // by applications and is the setup most users will be using (e.g. Ubuntu - // desktop). - // If running on X and not using GNOME then just use a traditional title bar - // in case the window manager does more exotic layout, e.g. tiling. - // If running on Wayland assume the header bar will work (may need changing - // if future cases occur). - gboolean use_header_bar = TRUE; -#ifdef GDK_WINDOWING_X11 - GdkScreen* screen = gtk_window_get_screen(window); - if (GDK_IS_X11_SCREEN(screen)) { - const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); - if (g_strcmp0(wm_name, "GNOME Shell") != 0) { - use_header_bar = FALSE; - } - } -#endif - if (use_header_bar) { - GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); - gtk_widget_show(GTK_WIDGET(header_bar)); - gtk_header_bar_set_title(header_bar, "patterns_codelab"); - gtk_header_bar_set_show_close_button(header_bar, TRUE); - gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); - } else { - gtk_window_set_title(window, "patterns_codelab"); - } - - gtk_window_set_default_size(window, 1280, 720); - gtk_widget_show(GTK_WIDGET(window)); - - g_autoptr(FlDartProject) project = fl_dart_project_new(); - fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); - - FlView* view = fl_view_new(project); - gtk_widget_show(GTK_WIDGET(view)); - gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); - - fl_register_plugins(FL_PLUGIN_REGISTRY(view)); - - gtk_widget_grab_focus(GTK_WIDGET(view)); -} - -// Implements GApplication::local_command_line. -static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { - MyApplication* self = MY_APPLICATION(application); - // Strip out the first argument as it is the binary name. - self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); - - g_autoptr(GError) error = nullptr; - if (!g_application_register(application, nullptr, &error)) { - g_warning("Failed to register: %s", error->message); - *exit_status = 1; - return TRUE; - } - - g_application_activate(application); - *exit_status = 0; - - return TRUE; -} - -// Implements GApplication::startup. -static void my_application_startup(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application startup. - - G_APPLICATION_CLASS(my_application_parent_class)->startup(application); -} - -// Implements GApplication::shutdown. -static void my_application_shutdown(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application shutdown. - - G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); -} - -// Implements GObject::dispose. -static void my_application_dispose(GObject* object) { - MyApplication* self = MY_APPLICATION(object); - g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); - G_OBJECT_CLASS(my_application_parent_class)->dispose(object); -} - -static void my_application_class_init(MyApplicationClass* klass) { - G_APPLICATION_CLASS(klass)->activate = my_application_activate; - G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; - G_APPLICATION_CLASS(klass)->startup = my_application_startup; - G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; - G_OBJECT_CLASS(klass)->dispose = my_application_dispose; -} - -static void my_application_init(MyApplication* self) {} - -MyApplication* my_application_new() { - return MY_APPLICATION(g_object_new(my_application_get_type(), - "application-id", APPLICATION_ID, - "flags", G_APPLICATION_NON_UNIQUE, - nullptr)); -} diff --git a/dart-patterns-and-records/step_06_b/linux/runner/CMakeLists.txt b/dart-patterns-and-records/step_06_b/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/dart-patterns-and-records/step_06_b/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/dart-patterns-and-records/step_06_b/linux/main.cc b/dart-patterns-and-records/step_06_b/linux/runner/main.cc similarity index 100% rename from dart-patterns-and-records/step_06_b/linux/main.cc rename to dart-patterns-and-records/step_06_b/linux/runner/main.cc diff --git a/dart-patterns-and-records/step_06_b/linux/runner/my_application.cc b/dart-patterns-and-records/step_06_b/linux/runner/my_application.cc new file mode 100644 index 0000000000..7065b83916 --- /dev/null +++ b/dart-patterns-and-records/step_06_b/linux/runner/my_application.cc @@ -0,0 +1,130 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "patterns_codelab"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "patterns_codelab"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/dart-patterns-and-records/step_06_b/linux/my_application.h b/dart-patterns-and-records/step_06_b/linux/runner/my_application.h similarity index 100% rename from dart-patterns-and-records/step_06_b/linux/my_application.h rename to dart-patterns-and-records/step_06_b/linux/runner/my_application.h diff --git a/dart-patterns-and-records/step_06_b/macos/Runner/AppDelegate.swift b/dart-patterns-and-records/step_06_b/macos/Runner/AppDelegate.swift index 8e02df2888..b3c1761412 100644 --- a/dart-patterns-and-records/step_06_b/macos/Runner/AppDelegate.swift +++ b/dart-patterns-and-records/step_06_b/macos/Runner/AppDelegate.swift @@ -6,4 +6,8 @@ class AppDelegate: FlutterAppDelegate { override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { return true } + + override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { + return true + } } diff --git a/dart-patterns-and-records/step_06_b/web/index.html b/dart-patterns-and-records/step_06_b/web/index.html index e14846e8ce..adcc31bddb 100644 --- a/dart-patterns-and-records/step_06_b/web/index.html +++ b/dart-patterns-and-records/step_06_b/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/dart-patterns-and-records/step_07_a/.gitignore b/dart-patterns-and-records/step_07_a/.gitignore index 29a3a5017f..79c113f9b5 100644 --- a/dart-patterns-and-records/step_07_a/.gitignore +++ b/dart-patterns-and-records/step_07_a/.gitignore @@ -5,9 +5,11 @@ *.swp .DS_Store .atom/ +.build/ .buildlog/ .history .svn/ +.swiftpm/ migrate_working_dir/ # IntelliJ related diff --git a/dart-patterns-and-records/step_07_a/android/gradle.properties b/dart-patterns-and-records/step_07_a/android/gradle.properties index 2597170821..f018a61817 100644 --- a/dart-patterns-and-records/step_07_a/android/gradle.properties +++ b/dart-patterns-and-records/step_07_a/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/dart-patterns-and-records/step_07_a/android/gradle/wrapper/gradle-wrapper.properties b/dart-patterns-and-records/step_07_a/android/gradle/wrapper/gradle-wrapper.properties index e1ca574ef0..7bb2df6ba6 100644 --- a/dart-patterns-and-records/step_07_a/android/gradle/wrapper/gradle-wrapper.properties +++ b/dart-patterns-and-records/step_07_a/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip diff --git a/dart-patterns-and-records/step_07_a/android/settings.gradle b/dart-patterns-and-records/step_07_a/android/settings.gradle index 536165d35a..b9e43bd376 100644 --- a/dart-patterns-and-records/step_07_a/android/settings.gradle +++ b/dart-patterns-and-records/step_07_a/android/settings.gradle @@ -18,8 +18,8 @@ pluginManagement { plugins { id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "7.3.0" apply false - id "org.jetbrains.kotlin.android" version "1.7.10" apply false + id "com.android.application" version "8.1.0" apply false + id "org.jetbrains.kotlin.android" version "1.8.22" apply false } include ":app" diff --git a/dart-patterns-and-records/step_07_a/linux/CMakeLists.txt b/dart-patterns-and-records/step_07_a/linux/CMakeLists.txt index dc88dd5e7d..6f653779a7 100644 --- a/dart-patterns-and-records/step_07_a/linux/CMakeLists.txt +++ b/dart-patterns-and-records/step_07_a/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/dart-patterns-and-records/step_07_a/linux/my_application.cc b/dart-patterns-and-records/step_07_a/linux/my_application.cc deleted file mode 100644 index 2e328e01f8..0000000000 --- a/dart-patterns-and-records/step_07_a/linux/my_application.cc +++ /dev/null @@ -1,124 +0,0 @@ -#include "my_application.h" - -#include -#ifdef GDK_WINDOWING_X11 -#include -#endif - -#include "flutter/generated_plugin_registrant.h" - -struct _MyApplication { - GtkApplication parent_instance; - char** dart_entrypoint_arguments; -}; - -G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) - -// Implements GApplication::activate. -static void my_application_activate(GApplication* application) { - MyApplication* self = MY_APPLICATION(application); - GtkWindow* window = - GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); - - // Use a header bar when running in GNOME as this is the common style used - // by applications and is the setup most users will be using (e.g. Ubuntu - // desktop). - // If running on X and not using GNOME then just use a traditional title bar - // in case the window manager does more exotic layout, e.g. tiling. - // If running on Wayland assume the header bar will work (may need changing - // if future cases occur). - gboolean use_header_bar = TRUE; -#ifdef GDK_WINDOWING_X11 - GdkScreen* screen = gtk_window_get_screen(window); - if (GDK_IS_X11_SCREEN(screen)) { - const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); - if (g_strcmp0(wm_name, "GNOME Shell") != 0) { - use_header_bar = FALSE; - } - } -#endif - if (use_header_bar) { - GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); - gtk_widget_show(GTK_WIDGET(header_bar)); - gtk_header_bar_set_title(header_bar, "patterns_codelab"); - gtk_header_bar_set_show_close_button(header_bar, TRUE); - gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); - } else { - gtk_window_set_title(window, "patterns_codelab"); - } - - gtk_window_set_default_size(window, 1280, 720); - gtk_widget_show(GTK_WIDGET(window)); - - g_autoptr(FlDartProject) project = fl_dart_project_new(); - fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); - - FlView* view = fl_view_new(project); - gtk_widget_show(GTK_WIDGET(view)); - gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); - - fl_register_plugins(FL_PLUGIN_REGISTRY(view)); - - gtk_widget_grab_focus(GTK_WIDGET(view)); -} - -// Implements GApplication::local_command_line. -static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { - MyApplication* self = MY_APPLICATION(application); - // Strip out the first argument as it is the binary name. - self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); - - g_autoptr(GError) error = nullptr; - if (!g_application_register(application, nullptr, &error)) { - g_warning("Failed to register: %s", error->message); - *exit_status = 1; - return TRUE; - } - - g_application_activate(application); - *exit_status = 0; - - return TRUE; -} - -// Implements GApplication::startup. -static void my_application_startup(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application startup. - - G_APPLICATION_CLASS(my_application_parent_class)->startup(application); -} - -// Implements GApplication::shutdown. -static void my_application_shutdown(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application shutdown. - - G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); -} - -// Implements GObject::dispose. -static void my_application_dispose(GObject* object) { - MyApplication* self = MY_APPLICATION(object); - g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); - G_OBJECT_CLASS(my_application_parent_class)->dispose(object); -} - -static void my_application_class_init(MyApplicationClass* klass) { - G_APPLICATION_CLASS(klass)->activate = my_application_activate; - G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; - G_APPLICATION_CLASS(klass)->startup = my_application_startup; - G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; - G_OBJECT_CLASS(klass)->dispose = my_application_dispose; -} - -static void my_application_init(MyApplication* self) {} - -MyApplication* my_application_new() { - return MY_APPLICATION(g_object_new(my_application_get_type(), - "application-id", APPLICATION_ID, - "flags", G_APPLICATION_NON_UNIQUE, - nullptr)); -} diff --git a/dart-patterns-and-records/step_07_a/linux/runner/CMakeLists.txt b/dart-patterns-and-records/step_07_a/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/dart-patterns-and-records/step_07_a/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/dart-patterns-and-records/step_07_a/linux/main.cc b/dart-patterns-and-records/step_07_a/linux/runner/main.cc similarity index 100% rename from dart-patterns-and-records/step_07_a/linux/main.cc rename to dart-patterns-and-records/step_07_a/linux/runner/main.cc diff --git a/dart-patterns-and-records/step_07_a/linux/runner/my_application.cc b/dart-patterns-and-records/step_07_a/linux/runner/my_application.cc new file mode 100644 index 0000000000..7065b83916 --- /dev/null +++ b/dart-patterns-and-records/step_07_a/linux/runner/my_application.cc @@ -0,0 +1,130 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "patterns_codelab"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "patterns_codelab"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/dart-patterns-and-records/step_07_a/linux/my_application.h b/dart-patterns-and-records/step_07_a/linux/runner/my_application.h similarity index 100% rename from dart-patterns-and-records/step_07_a/linux/my_application.h rename to dart-patterns-and-records/step_07_a/linux/runner/my_application.h diff --git a/dart-patterns-and-records/step_07_a/macos/Runner/AppDelegate.swift b/dart-patterns-and-records/step_07_a/macos/Runner/AppDelegate.swift index 8e02df2888..b3c1761412 100644 --- a/dart-patterns-and-records/step_07_a/macos/Runner/AppDelegate.swift +++ b/dart-patterns-and-records/step_07_a/macos/Runner/AppDelegate.swift @@ -6,4 +6,8 @@ class AppDelegate: FlutterAppDelegate { override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { return true } + + override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { + return true + } } diff --git a/dart-patterns-and-records/step_07_a/web/index.html b/dart-patterns-and-records/step_07_a/web/index.html index e14846e8ce..adcc31bddb 100644 --- a/dart-patterns-and-records/step_07_a/web/index.html +++ b/dart-patterns-and-records/step_07_a/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/dart-patterns-and-records/step_07_b/.gitignore b/dart-patterns-and-records/step_07_b/.gitignore index 29a3a5017f..79c113f9b5 100644 --- a/dart-patterns-and-records/step_07_b/.gitignore +++ b/dart-patterns-and-records/step_07_b/.gitignore @@ -5,9 +5,11 @@ *.swp .DS_Store .atom/ +.build/ .buildlog/ .history .svn/ +.swiftpm/ migrate_working_dir/ # IntelliJ related diff --git a/dart-patterns-and-records/step_07_b/android/gradle.properties b/dart-patterns-and-records/step_07_b/android/gradle.properties index 2597170821..f018a61817 100644 --- a/dart-patterns-and-records/step_07_b/android/gradle.properties +++ b/dart-patterns-and-records/step_07_b/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/dart-patterns-and-records/step_07_b/android/gradle/wrapper/gradle-wrapper.properties b/dart-patterns-and-records/step_07_b/android/gradle/wrapper/gradle-wrapper.properties index e1ca574ef0..7bb2df6ba6 100644 --- a/dart-patterns-and-records/step_07_b/android/gradle/wrapper/gradle-wrapper.properties +++ b/dart-patterns-and-records/step_07_b/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip diff --git a/dart-patterns-and-records/step_07_b/android/settings.gradle b/dart-patterns-and-records/step_07_b/android/settings.gradle index 536165d35a..b9e43bd376 100644 --- a/dart-patterns-and-records/step_07_b/android/settings.gradle +++ b/dart-patterns-and-records/step_07_b/android/settings.gradle @@ -18,8 +18,8 @@ pluginManagement { plugins { id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "7.3.0" apply false - id "org.jetbrains.kotlin.android" version "1.7.10" apply false + id "com.android.application" version "8.1.0" apply false + id "org.jetbrains.kotlin.android" version "1.8.22" apply false } include ":app" diff --git a/dart-patterns-and-records/step_07_b/linux/CMakeLists.txt b/dart-patterns-and-records/step_07_b/linux/CMakeLists.txt index dc88dd5e7d..6f653779a7 100644 --- a/dart-patterns-and-records/step_07_b/linux/CMakeLists.txt +++ b/dart-patterns-and-records/step_07_b/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/dart-patterns-and-records/step_07_b/linux/my_application.cc b/dart-patterns-and-records/step_07_b/linux/my_application.cc deleted file mode 100644 index 2e328e01f8..0000000000 --- a/dart-patterns-and-records/step_07_b/linux/my_application.cc +++ /dev/null @@ -1,124 +0,0 @@ -#include "my_application.h" - -#include -#ifdef GDK_WINDOWING_X11 -#include -#endif - -#include "flutter/generated_plugin_registrant.h" - -struct _MyApplication { - GtkApplication parent_instance; - char** dart_entrypoint_arguments; -}; - -G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) - -// Implements GApplication::activate. -static void my_application_activate(GApplication* application) { - MyApplication* self = MY_APPLICATION(application); - GtkWindow* window = - GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); - - // Use a header bar when running in GNOME as this is the common style used - // by applications and is the setup most users will be using (e.g. Ubuntu - // desktop). - // If running on X and not using GNOME then just use a traditional title bar - // in case the window manager does more exotic layout, e.g. tiling. - // If running on Wayland assume the header bar will work (may need changing - // if future cases occur). - gboolean use_header_bar = TRUE; -#ifdef GDK_WINDOWING_X11 - GdkScreen* screen = gtk_window_get_screen(window); - if (GDK_IS_X11_SCREEN(screen)) { - const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); - if (g_strcmp0(wm_name, "GNOME Shell") != 0) { - use_header_bar = FALSE; - } - } -#endif - if (use_header_bar) { - GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); - gtk_widget_show(GTK_WIDGET(header_bar)); - gtk_header_bar_set_title(header_bar, "patterns_codelab"); - gtk_header_bar_set_show_close_button(header_bar, TRUE); - gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); - } else { - gtk_window_set_title(window, "patterns_codelab"); - } - - gtk_window_set_default_size(window, 1280, 720); - gtk_widget_show(GTK_WIDGET(window)); - - g_autoptr(FlDartProject) project = fl_dart_project_new(); - fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); - - FlView* view = fl_view_new(project); - gtk_widget_show(GTK_WIDGET(view)); - gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); - - fl_register_plugins(FL_PLUGIN_REGISTRY(view)); - - gtk_widget_grab_focus(GTK_WIDGET(view)); -} - -// Implements GApplication::local_command_line. -static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { - MyApplication* self = MY_APPLICATION(application); - // Strip out the first argument as it is the binary name. - self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); - - g_autoptr(GError) error = nullptr; - if (!g_application_register(application, nullptr, &error)) { - g_warning("Failed to register: %s", error->message); - *exit_status = 1; - return TRUE; - } - - g_application_activate(application); - *exit_status = 0; - - return TRUE; -} - -// Implements GApplication::startup. -static void my_application_startup(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application startup. - - G_APPLICATION_CLASS(my_application_parent_class)->startup(application); -} - -// Implements GApplication::shutdown. -static void my_application_shutdown(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application shutdown. - - G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); -} - -// Implements GObject::dispose. -static void my_application_dispose(GObject* object) { - MyApplication* self = MY_APPLICATION(object); - g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); - G_OBJECT_CLASS(my_application_parent_class)->dispose(object); -} - -static void my_application_class_init(MyApplicationClass* klass) { - G_APPLICATION_CLASS(klass)->activate = my_application_activate; - G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; - G_APPLICATION_CLASS(klass)->startup = my_application_startup; - G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; - G_OBJECT_CLASS(klass)->dispose = my_application_dispose; -} - -static void my_application_init(MyApplication* self) {} - -MyApplication* my_application_new() { - return MY_APPLICATION(g_object_new(my_application_get_type(), - "application-id", APPLICATION_ID, - "flags", G_APPLICATION_NON_UNIQUE, - nullptr)); -} diff --git a/dart-patterns-and-records/step_07_b/linux/runner/CMakeLists.txt b/dart-patterns-and-records/step_07_b/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/dart-patterns-and-records/step_07_b/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/dart-patterns-and-records/step_07_b/linux/main.cc b/dart-patterns-and-records/step_07_b/linux/runner/main.cc similarity index 100% rename from dart-patterns-and-records/step_07_b/linux/main.cc rename to dart-patterns-and-records/step_07_b/linux/runner/main.cc diff --git a/dart-patterns-and-records/step_07_b/linux/runner/my_application.cc b/dart-patterns-and-records/step_07_b/linux/runner/my_application.cc new file mode 100644 index 0000000000..7065b83916 --- /dev/null +++ b/dart-patterns-and-records/step_07_b/linux/runner/my_application.cc @@ -0,0 +1,130 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "patterns_codelab"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "patterns_codelab"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/dart-patterns-and-records/step_07_b/linux/my_application.h b/dart-patterns-and-records/step_07_b/linux/runner/my_application.h similarity index 100% rename from dart-patterns-and-records/step_07_b/linux/my_application.h rename to dart-patterns-and-records/step_07_b/linux/runner/my_application.h diff --git a/dart-patterns-and-records/step_07_b/macos/Runner/AppDelegate.swift b/dart-patterns-and-records/step_07_b/macos/Runner/AppDelegate.swift index 8e02df2888..b3c1761412 100644 --- a/dart-patterns-and-records/step_07_b/macos/Runner/AppDelegate.swift +++ b/dart-patterns-and-records/step_07_b/macos/Runner/AppDelegate.swift @@ -6,4 +6,8 @@ class AppDelegate: FlutterAppDelegate { override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { return true } + + override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { + return true + } } diff --git a/dart-patterns-and-records/step_07_b/web/index.html b/dart-patterns-and-records/step_07_b/web/index.html index e14846e8ce..adcc31bddb 100644 --- a/dart-patterns-and-records/step_07_b/web/index.html +++ b/dart-patterns-and-records/step_07_b/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/dart-patterns-and-records/step_08/.gitignore b/dart-patterns-and-records/step_08/.gitignore index 29a3a5017f..79c113f9b5 100644 --- a/dart-patterns-and-records/step_08/.gitignore +++ b/dart-patterns-and-records/step_08/.gitignore @@ -5,9 +5,11 @@ *.swp .DS_Store .atom/ +.build/ .buildlog/ .history .svn/ +.swiftpm/ migrate_working_dir/ # IntelliJ related diff --git a/dart-patterns-and-records/step_08/android/gradle.properties b/dart-patterns-and-records/step_08/android/gradle.properties index 2597170821..f018a61817 100644 --- a/dart-patterns-and-records/step_08/android/gradle.properties +++ b/dart-patterns-and-records/step_08/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/dart-patterns-and-records/step_08/android/gradle/wrapper/gradle-wrapper.properties b/dart-patterns-and-records/step_08/android/gradle/wrapper/gradle-wrapper.properties index e1ca574ef0..7bb2df6ba6 100644 --- a/dart-patterns-and-records/step_08/android/gradle/wrapper/gradle-wrapper.properties +++ b/dart-patterns-and-records/step_08/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip diff --git a/dart-patterns-and-records/step_08/android/settings.gradle b/dart-patterns-and-records/step_08/android/settings.gradle index 536165d35a..b9e43bd376 100644 --- a/dart-patterns-and-records/step_08/android/settings.gradle +++ b/dart-patterns-and-records/step_08/android/settings.gradle @@ -18,8 +18,8 @@ pluginManagement { plugins { id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "7.3.0" apply false - id "org.jetbrains.kotlin.android" version "1.7.10" apply false + id "com.android.application" version "8.1.0" apply false + id "org.jetbrains.kotlin.android" version "1.8.22" apply false } include ":app" diff --git a/dart-patterns-and-records/step_08/linux/CMakeLists.txt b/dart-patterns-and-records/step_08/linux/CMakeLists.txt index dc88dd5e7d..6f653779a7 100644 --- a/dart-patterns-and-records/step_08/linux/CMakeLists.txt +++ b/dart-patterns-and-records/step_08/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/dart-patterns-and-records/step_08/linux/my_application.cc b/dart-patterns-and-records/step_08/linux/my_application.cc deleted file mode 100644 index 2e328e01f8..0000000000 --- a/dart-patterns-and-records/step_08/linux/my_application.cc +++ /dev/null @@ -1,124 +0,0 @@ -#include "my_application.h" - -#include -#ifdef GDK_WINDOWING_X11 -#include -#endif - -#include "flutter/generated_plugin_registrant.h" - -struct _MyApplication { - GtkApplication parent_instance; - char** dart_entrypoint_arguments; -}; - -G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) - -// Implements GApplication::activate. -static void my_application_activate(GApplication* application) { - MyApplication* self = MY_APPLICATION(application); - GtkWindow* window = - GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); - - // Use a header bar when running in GNOME as this is the common style used - // by applications and is the setup most users will be using (e.g. Ubuntu - // desktop). - // If running on X and not using GNOME then just use a traditional title bar - // in case the window manager does more exotic layout, e.g. tiling. - // If running on Wayland assume the header bar will work (may need changing - // if future cases occur). - gboolean use_header_bar = TRUE; -#ifdef GDK_WINDOWING_X11 - GdkScreen* screen = gtk_window_get_screen(window); - if (GDK_IS_X11_SCREEN(screen)) { - const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); - if (g_strcmp0(wm_name, "GNOME Shell") != 0) { - use_header_bar = FALSE; - } - } -#endif - if (use_header_bar) { - GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); - gtk_widget_show(GTK_WIDGET(header_bar)); - gtk_header_bar_set_title(header_bar, "patterns_codelab"); - gtk_header_bar_set_show_close_button(header_bar, TRUE); - gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); - } else { - gtk_window_set_title(window, "patterns_codelab"); - } - - gtk_window_set_default_size(window, 1280, 720); - gtk_widget_show(GTK_WIDGET(window)); - - g_autoptr(FlDartProject) project = fl_dart_project_new(); - fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); - - FlView* view = fl_view_new(project); - gtk_widget_show(GTK_WIDGET(view)); - gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); - - fl_register_plugins(FL_PLUGIN_REGISTRY(view)); - - gtk_widget_grab_focus(GTK_WIDGET(view)); -} - -// Implements GApplication::local_command_line. -static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { - MyApplication* self = MY_APPLICATION(application); - // Strip out the first argument as it is the binary name. - self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); - - g_autoptr(GError) error = nullptr; - if (!g_application_register(application, nullptr, &error)) { - g_warning("Failed to register: %s", error->message); - *exit_status = 1; - return TRUE; - } - - g_application_activate(application); - *exit_status = 0; - - return TRUE; -} - -// Implements GApplication::startup. -static void my_application_startup(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application startup. - - G_APPLICATION_CLASS(my_application_parent_class)->startup(application); -} - -// Implements GApplication::shutdown. -static void my_application_shutdown(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application shutdown. - - G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); -} - -// Implements GObject::dispose. -static void my_application_dispose(GObject* object) { - MyApplication* self = MY_APPLICATION(object); - g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); - G_OBJECT_CLASS(my_application_parent_class)->dispose(object); -} - -static void my_application_class_init(MyApplicationClass* klass) { - G_APPLICATION_CLASS(klass)->activate = my_application_activate; - G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; - G_APPLICATION_CLASS(klass)->startup = my_application_startup; - G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; - G_OBJECT_CLASS(klass)->dispose = my_application_dispose; -} - -static void my_application_init(MyApplication* self) {} - -MyApplication* my_application_new() { - return MY_APPLICATION(g_object_new(my_application_get_type(), - "application-id", APPLICATION_ID, - "flags", G_APPLICATION_NON_UNIQUE, - nullptr)); -} diff --git a/dart-patterns-and-records/step_08/linux/runner/CMakeLists.txt b/dart-patterns-and-records/step_08/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/dart-patterns-and-records/step_08/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/dart-patterns-and-records/step_08/linux/main.cc b/dart-patterns-and-records/step_08/linux/runner/main.cc similarity index 100% rename from dart-patterns-and-records/step_08/linux/main.cc rename to dart-patterns-and-records/step_08/linux/runner/main.cc diff --git a/dart-patterns-and-records/step_08/linux/runner/my_application.cc b/dart-patterns-and-records/step_08/linux/runner/my_application.cc new file mode 100644 index 0000000000..7065b83916 --- /dev/null +++ b/dart-patterns-and-records/step_08/linux/runner/my_application.cc @@ -0,0 +1,130 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "patterns_codelab"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "patterns_codelab"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/dart-patterns-and-records/step_08/linux/my_application.h b/dart-patterns-and-records/step_08/linux/runner/my_application.h similarity index 100% rename from dart-patterns-and-records/step_08/linux/my_application.h rename to dart-patterns-and-records/step_08/linux/runner/my_application.h diff --git a/dart-patterns-and-records/step_08/macos/Runner/AppDelegate.swift b/dart-patterns-and-records/step_08/macos/Runner/AppDelegate.swift index 8e02df2888..b3c1761412 100644 --- a/dart-patterns-and-records/step_08/macos/Runner/AppDelegate.swift +++ b/dart-patterns-and-records/step_08/macos/Runner/AppDelegate.swift @@ -6,4 +6,8 @@ class AppDelegate: FlutterAppDelegate { override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { return true } + + override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { + return true + } } diff --git a/dart-patterns-and-records/step_08/web/index.html b/dart-patterns-and-records/step_08/web/index.html index e14846e8ce..adcc31bddb 100644 --- a/dart-patterns-and-records/step_08/web/index.html +++ b/dart-patterns-and-records/step_08/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/dart-patterns-and-records/step_09/.gitignore b/dart-patterns-and-records/step_09/.gitignore index 29a3a5017f..79c113f9b5 100644 --- a/dart-patterns-and-records/step_09/.gitignore +++ b/dart-patterns-and-records/step_09/.gitignore @@ -5,9 +5,11 @@ *.swp .DS_Store .atom/ +.build/ .buildlog/ .history .svn/ +.swiftpm/ migrate_working_dir/ # IntelliJ related diff --git a/dart-patterns-and-records/step_09/android/gradle.properties b/dart-patterns-and-records/step_09/android/gradle.properties index 2597170821..f018a61817 100644 --- a/dart-patterns-and-records/step_09/android/gradle.properties +++ b/dart-patterns-and-records/step_09/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/dart-patterns-and-records/step_09/android/gradle/wrapper/gradle-wrapper.properties b/dart-patterns-and-records/step_09/android/gradle/wrapper/gradle-wrapper.properties index e1ca574ef0..7bb2df6ba6 100644 --- a/dart-patterns-and-records/step_09/android/gradle/wrapper/gradle-wrapper.properties +++ b/dart-patterns-and-records/step_09/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip diff --git a/dart-patterns-and-records/step_09/android/settings.gradle b/dart-patterns-and-records/step_09/android/settings.gradle index 536165d35a..b9e43bd376 100644 --- a/dart-patterns-and-records/step_09/android/settings.gradle +++ b/dart-patterns-and-records/step_09/android/settings.gradle @@ -18,8 +18,8 @@ pluginManagement { plugins { id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "7.3.0" apply false - id "org.jetbrains.kotlin.android" version "1.7.10" apply false + id "com.android.application" version "8.1.0" apply false + id "org.jetbrains.kotlin.android" version "1.8.22" apply false } include ":app" diff --git a/dart-patterns-and-records/step_09/linux/CMakeLists.txt b/dart-patterns-and-records/step_09/linux/CMakeLists.txt index dc88dd5e7d..6f653779a7 100644 --- a/dart-patterns-and-records/step_09/linux/CMakeLists.txt +++ b/dart-patterns-and-records/step_09/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/dart-patterns-and-records/step_09/linux/my_application.cc b/dart-patterns-and-records/step_09/linux/my_application.cc deleted file mode 100644 index 2e328e01f8..0000000000 --- a/dart-patterns-and-records/step_09/linux/my_application.cc +++ /dev/null @@ -1,124 +0,0 @@ -#include "my_application.h" - -#include -#ifdef GDK_WINDOWING_X11 -#include -#endif - -#include "flutter/generated_plugin_registrant.h" - -struct _MyApplication { - GtkApplication parent_instance; - char** dart_entrypoint_arguments; -}; - -G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) - -// Implements GApplication::activate. -static void my_application_activate(GApplication* application) { - MyApplication* self = MY_APPLICATION(application); - GtkWindow* window = - GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); - - // Use a header bar when running in GNOME as this is the common style used - // by applications and is the setup most users will be using (e.g. Ubuntu - // desktop). - // If running on X and not using GNOME then just use a traditional title bar - // in case the window manager does more exotic layout, e.g. tiling. - // If running on Wayland assume the header bar will work (may need changing - // if future cases occur). - gboolean use_header_bar = TRUE; -#ifdef GDK_WINDOWING_X11 - GdkScreen* screen = gtk_window_get_screen(window); - if (GDK_IS_X11_SCREEN(screen)) { - const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); - if (g_strcmp0(wm_name, "GNOME Shell") != 0) { - use_header_bar = FALSE; - } - } -#endif - if (use_header_bar) { - GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); - gtk_widget_show(GTK_WIDGET(header_bar)); - gtk_header_bar_set_title(header_bar, "patterns_codelab"); - gtk_header_bar_set_show_close_button(header_bar, TRUE); - gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); - } else { - gtk_window_set_title(window, "patterns_codelab"); - } - - gtk_window_set_default_size(window, 1280, 720); - gtk_widget_show(GTK_WIDGET(window)); - - g_autoptr(FlDartProject) project = fl_dart_project_new(); - fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); - - FlView* view = fl_view_new(project); - gtk_widget_show(GTK_WIDGET(view)); - gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); - - fl_register_plugins(FL_PLUGIN_REGISTRY(view)); - - gtk_widget_grab_focus(GTK_WIDGET(view)); -} - -// Implements GApplication::local_command_line. -static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { - MyApplication* self = MY_APPLICATION(application); - // Strip out the first argument as it is the binary name. - self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); - - g_autoptr(GError) error = nullptr; - if (!g_application_register(application, nullptr, &error)) { - g_warning("Failed to register: %s", error->message); - *exit_status = 1; - return TRUE; - } - - g_application_activate(application); - *exit_status = 0; - - return TRUE; -} - -// Implements GApplication::startup. -static void my_application_startup(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application startup. - - G_APPLICATION_CLASS(my_application_parent_class)->startup(application); -} - -// Implements GApplication::shutdown. -static void my_application_shutdown(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application shutdown. - - G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); -} - -// Implements GObject::dispose. -static void my_application_dispose(GObject* object) { - MyApplication* self = MY_APPLICATION(object); - g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); - G_OBJECT_CLASS(my_application_parent_class)->dispose(object); -} - -static void my_application_class_init(MyApplicationClass* klass) { - G_APPLICATION_CLASS(klass)->activate = my_application_activate; - G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; - G_APPLICATION_CLASS(klass)->startup = my_application_startup; - G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; - G_OBJECT_CLASS(klass)->dispose = my_application_dispose; -} - -static void my_application_init(MyApplication* self) {} - -MyApplication* my_application_new() { - return MY_APPLICATION(g_object_new(my_application_get_type(), - "application-id", APPLICATION_ID, - "flags", G_APPLICATION_NON_UNIQUE, - nullptr)); -} diff --git a/dart-patterns-and-records/step_09/linux/runner/CMakeLists.txt b/dart-patterns-and-records/step_09/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/dart-patterns-and-records/step_09/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/dart-patterns-and-records/step_09/linux/main.cc b/dart-patterns-and-records/step_09/linux/runner/main.cc similarity index 100% rename from dart-patterns-and-records/step_09/linux/main.cc rename to dart-patterns-and-records/step_09/linux/runner/main.cc diff --git a/dart-patterns-and-records/step_09/linux/runner/my_application.cc b/dart-patterns-and-records/step_09/linux/runner/my_application.cc new file mode 100644 index 0000000000..7065b83916 --- /dev/null +++ b/dart-patterns-and-records/step_09/linux/runner/my_application.cc @@ -0,0 +1,130 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "patterns_codelab"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "patterns_codelab"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/dart-patterns-and-records/step_09/linux/my_application.h b/dart-patterns-and-records/step_09/linux/runner/my_application.h similarity index 100% rename from dart-patterns-and-records/step_09/linux/my_application.h rename to dart-patterns-and-records/step_09/linux/runner/my_application.h diff --git a/dart-patterns-and-records/step_09/macos/Runner/AppDelegate.swift b/dart-patterns-and-records/step_09/macos/Runner/AppDelegate.swift index 8e02df2888..b3c1761412 100644 --- a/dart-patterns-and-records/step_09/macos/Runner/AppDelegate.swift +++ b/dart-patterns-and-records/step_09/macos/Runner/AppDelegate.swift @@ -6,4 +6,8 @@ class AppDelegate: FlutterAppDelegate { override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { return true } + + override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { + return true + } } diff --git a/dart-patterns-and-records/step_09/web/index.html b/dart-patterns-and-records/step_09/web/index.html index e14846e8ce..adcc31bddb 100644 --- a/dart-patterns-and-records/step_09/web/index.html +++ b/dart-patterns-and-records/step_09/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/dart-patterns-and-records/step_10/.gitignore b/dart-patterns-and-records/step_10/.gitignore index 29a3a5017f..79c113f9b5 100644 --- a/dart-patterns-and-records/step_10/.gitignore +++ b/dart-patterns-and-records/step_10/.gitignore @@ -5,9 +5,11 @@ *.swp .DS_Store .atom/ +.build/ .buildlog/ .history .svn/ +.swiftpm/ migrate_working_dir/ # IntelliJ related diff --git a/dart-patterns-and-records/step_10/android/gradle.properties b/dart-patterns-and-records/step_10/android/gradle.properties index 2597170821..f018a61817 100644 --- a/dart-patterns-and-records/step_10/android/gradle.properties +++ b/dart-patterns-and-records/step_10/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/dart-patterns-and-records/step_10/android/gradle/wrapper/gradle-wrapper.properties b/dart-patterns-and-records/step_10/android/gradle/wrapper/gradle-wrapper.properties index e1ca574ef0..7bb2df6ba6 100644 --- a/dart-patterns-and-records/step_10/android/gradle/wrapper/gradle-wrapper.properties +++ b/dart-patterns-and-records/step_10/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip diff --git a/dart-patterns-and-records/step_10/android/settings.gradle b/dart-patterns-and-records/step_10/android/settings.gradle index 536165d35a..b9e43bd376 100644 --- a/dart-patterns-and-records/step_10/android/settings.gradle +++ b/dart-patterns-and-records/step_10/android/settings.gradle @@ -18,8 +18,8 @@ pluginManagement { plugins { id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "7.3.0" apply false - id "org.jetbrains.kotlin.android" version "1.7.10" apply false + id "com.android.application" version "8.1.0" apply false + id "org.jetbrains.kotlin.android" version "1.8.22" apply false } include ":app" diff --git a/dart-patterns-and-records/step_10/linux/CMakeLists.txt b/dart-patterns-and-records/step_10/linux/CMakeLists.txt index dc88dd5e7d..6f653779a7 100644 --- a/dart-patterns-and-records/step_10/linux/CMakeLists.txt +++ b/dart-patterns-and-records/step_10/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/dart-patterns-and-records/step_10/linux/my_application.cc b/dart-patterns-and-records/step_10/linux/my_application.cc deleted file mode 100644 index 2e328e01f8..0000000000 --- a/dart-patterns-and-records/step_10/linux/my_application.cc +++ /dev/null @@ -1,124 +0,0 @@ -#include "my_application.h" - -#include -#ifdef GDK_WINDOWING_X11 -#include -#endif - -#include "flutter/generated_plugin_registrant.h" - -struct _MyApplication { - GtkApplication parent_instance; - char** dart_entrypoint_arguments; -}; - -G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) - -// Implements GApplication::activate. -static void my_application_activate(GApplication* application) { - MyApplication* self = MY_APPLICATION(application); - GtkWindow* window = - GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); - - // Use a header bar when running in GNOME as this is the common style used - // by applications and is the setup most users will be using (e.g. Ubuntu - // desktop). - // If running on X and not using GNOME then just use a traditional title bar - // in case the window manager does more exotic layout, e.g. tiling. - // If running on Wayland assume the header bar will work (may need changing - // if future cases occur). - gboolean use_header_bar = TRUE; -#ifdef GDK_WINDOWING_X11 - GdkScreen* screen = gtk_window_get_screen(window); - if (GDK_IS_X11_SCREEN(screen)) { - const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); - if (g_strcmp0(wm_name, "GNOME Shell") != 0) { - use_header_bar = FALSE; - } - } -#endif - if (use_header_bar) { - GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); - gtk_widget_show(GTK_WIDGET(header_bar)); - gtk_header_bar_set_title(header_bar, "patterns_codelab"); - gtk_header_bar_set_show_close_button(header_bar, TRUE); - gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); - } else { - gtk_window_set_title(window, "patterns_codelab"); - } - - gtk_window_set_default_size(window, 1280, 720); - gtk_widget_show(GTK_WIDGET(window)); - - g_autoptr(FlDartProject) project = fl_dart_project_new(); - fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); - - FlView* view = fl_view_new(project); - gtk_widget_show(GTK_WIDGET(view)); - gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); - - fl_register_plugins(FL_PLUGIN_REGISTRY(view)); - - gtk_widget_grab_focus(GTK_WIDGET(view)); -} - -// Implements GApplication::local_command_line. -static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { - MyApplication* self = MY_APPLICATION(application); - // Strip out the first argument as it is the binary name. - self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); - - g_autoptr(GError) error = nullptr; - if (!g_application_register(application, nullptr, &error)) { - g_warning("Failed to register: %s", error->message); - *exit_status = 1; - return TRUE; - } - - g_application_activate(application); - *exit_status = 0; - - return TRUE; -} - -// Implements GApplication::startup. -static void my_application_startup(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application startup. - - G_APPLICATION_CLASS(my_application_parent_class)->startup(application); -} - -// Implements GApplication::shutdown. -static void my_application_shutdown(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application shutdown. - - G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); -} - -// Implements GObject::dispose. -static void my_application_dispose(GObject* object) { - MyApplication* self = MY_APPLICATION(object); - g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); - G_OBJECT_CLASS(my_application_parent_class)->dispose(object); -} - -static void my_application_class_init(MyApplicationClass* klass) { - G_APPLICATION_CLASS(klass)->activate = my_application_activate; - G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; - G_APPLICATION_CLASS(klass)->startup = my_application_startup; - G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; - G_OBJECT_CLASS(klass)->dispose = my_application_dispose; -} - -static void my_application_init(MyApplication* self) {} - -MyApplication* my_application_new() { - return MY_APPLICATION(g_object_new(my_application_get_type(), - "application-id", APPLICATION_ID, - "flags", G_APPLICATION_NON_UNIQUE, - nullptr)); -} diff --git a/dart-patterns-and-records/step_10/linux/runner/CMakeLists.txt b/dart-patterns-and-records/step_10/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/dart-patterns-and-records/step_10/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/dart-patterns-and-records/step_10/linux/main.cc b/dart-patterns-and-records/step_10/linux/runner/main.cc similarity index 100% rename from dart-patterns-and-records/step_10/linux/main.cc rename to dart-patterns-and-records/step_10/linux/runner/main.cc diff --git a/dart-patterns-and-records/step_10/linux/runner/my_application.cc b/dart-patterns-and-records/step_10/linux/runner/my_application.cc new file mode 100644 index 0000000000..7065b83916 --- /dev/null +++ b/dart-patterns-and-records/step_10/linux/runner/my_application.cc @@ -0,0 +1,130 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "patterns_codelab"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "patterns_codelab"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/dart-patterns-and-records/step_10/linux/my_application.h b/dart-patterns-and-records/step_10/linux/runner/my_application.h similarity index 100% rename from dart-patterns-and-records/step_10/linux/my_application.h rename to dart-patterns-and-records/step_10/linux/runner/my_application.h diff --git a/dart-patterns-and-records/step_10/macos/Runner/AppDelegate.swift b/dart-patterns-and-records/step_10/macos/Runner/AppDelegate.swift index 8e02df2888..b3c1761412 100644 --- a/dart-patterns-and-records/step_10/macos/Runner/AppDelegate.swift +++ b/dart-patterns-and-records/step_10/macos/Runner/AppDelegate.swift @@ -6,4 +6,8 @@ class AppDelegate: FlutterAppDelegate { override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { return true } + + override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { + return true + } } diff --git a/dart-patterns-and-records/step_10/web/index.html b/dart-patterns-and-records/step_10/web/index.html index e14846e8ce..adcc31bddb 100644 --- a/dart-patterns-and-records/step_10/web/index.html +++ b/dart-patterns-and-records/step_10/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/dart-patterns-and-records/step_11_a/.gitignore b/dart-patterns-and-records/step_11_a/.gitignore index 29a3a5017f..79c113f9b5 100644 --- a/dart-patterns-and-records/step_11_a/.gitignore +++ b/dart-patterns-and-records/step_11_a/.gitignore @@ -5,9 +5,11 @@ *.swp .DS_Store .atom/ +.build/ .buildlog/ .history .svn/ +.swiftpm/ migrate_working_dir/ # IntelliJ related diff --git a/dart-patterns-and-records/step_11_a/android/gradle.properties b/dart-patterns-and-records/step_11_a/android/gradle.properties index 2597170821..f018a61817 100644 --- a/dart-patterns-and-records/step_11_a/android/gradle.properties +++ b/dart-patterns-and-records/step_11_a/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/dart-patterns-and-records/step_11_a/android/gradle/wrapper/gradle-wrapper.properties b/dart-patterns-and-records/step_11_a/android/gradle/wrapper/gradle-wrapper.properties index e1ca574ef0..7bb2df6ba6 100644 --- a/dart-patterns-and-records/step_11_a/android/gradle/wrapper/gradle-wrapper.properties +++ b/dart-patterns-and-records/step_11_a/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip diff --git a/dart-patterns-and-records/step_11_a/android/settings.gradle b/dart-patterns-and-records/step_11_a/android/settings.gradle index 536165d35a..b9e43bd376 100644 --- a/dart-patterns-and-records/step_11_a/android/settings.gradle +++ b/dart-patterns-and-records/step_11_a/android/settings.gradle @@ -18,8 +18,8 @@ pluginManagement { plugins { id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "7.3.0" apply false - id "org.jetbrains.kotlin.android" version "1.7.10" apply false + id "com.android.application" version "8.1.0" apply false + id "org.jetbrains.kotlin.android" version "1.8.22" apply false } include ":app" diff --git a/dart-patterns-and-records/step_11_a/linux/CMakeLists.txt b/dart-patterns-and-records/step_11_a/linux/CMakeLists.txt index dc88dd5e7d..6f653779a7 100644 --- a/dart-patterns-and-records/step_11_a/linux/CMakeLists.txt +++ b/dart-patterns-and-records/step_11_a/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/dart-patterns-and-records/step_11_a/linux/my_application.cc b/dart-patterns-and-records/step_11_a/linux/my_application.cc deleted file mode 100644 index 2e328e01f8..0000000000 --- a/dart-patterns-and-records/step_11_a/linux/my_application.cc +++ /dev/null @@ -1,124 +0,0 @@ -#include "my_application.h" - -#include -#ifdef GDK_WINDOWING_X11 -#include -#endif - -#include "flutter/generated_plugin_registrant.h" - -struct _MyApplication { - GtkApplication parent_instance; - char** dart_entrypoint_arguments; -}; - -G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) - -// Implements GApplication::activate. -static void my_application_activate(GApplication* application) { - MyApplication* self = MY_APPLICATION(application); - GtkWindow* window = - GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); - - // Use a header bar when running in GNOME as this is the common style used - // by applications and is the setup most users will be using (e.g. Ubuntu - // desktop). - // If running on X and not using GNOME then just use a traditional title bar - // in case the window manager does more exotic layout, e.g. tiling. - // If running on Wayland assume the header bar will work (may need changing - // if future cases occur). - gboolean use_header_bar = TRUE; -#ifdef GDK_WINDOWING_X11 - GdkScreen* screen = gtk_window_get_screen(window); - if (GDK_IS_X11_SCREEN(screen)) { - const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); - if (g_strcmp0(wm_name, "GNOME Shell") != 0) { - use_header_bar = FALSE; - } - } -#endif - if (use_header_bar) { - GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); - gtk_widget_show(GTK_WIDGET(header_bar)); - gtk_header_bar_set_title(header_bar, "patterns_codelab"); - gtk_header_bar_set_show_close_button(header_bar, TRUE); - gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); - } else { - gtk_window_set_title(window, "patterns_codelab"); - } - - gtk_window_set_default_size(window, 1280, 720); - gtk_widget_show(GTK_WIDGET(window)); - - g_autoptr(FlDartProject) project = fl_dart_project_new(); - fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); - - FlView* view = fl_view_new(project); - gtk_widget_show(GTK_WIDGET(view)); - gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); - - fl_register_plugins(FL_PLUGIN_REGISTRY(view)); - - gtk_widget_grab_focus(GTK_WIDGET(view)); -} - -// Implements GApplication::local_command_line. -static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { - MyApplication* self = MY_APPLICATION(application); - // Strip out the first argument as it is the binary name. - self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); - - g_autoptr(GError) error = nullptr; - if (!g_application_register(application, nullptr, &error)) { - g_warning("Failed to register: %s", error->message); - *exit_status = 1; - return TRUE; - } - - g_application_activate(application); - *exit_status = 0; - - return TRUE; -} - -// Implements GApplication::startup. -static void my_application_startup(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application startup. - - G_APPLICATION_CLASS(my_application_parent_class)->startup(application); -} - -// Implements GApplication::shutdown. -static void my_application_shutdown(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application shutdown. - - G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); -} - -// Implements GObject::dispose. -static void my_application_dispose(GObject* object) { - MyApplication* self = MY_APPLICATION(object); - g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); - G_OBJECT_CLASS(my_application_parent_class)->dispose(object); -} - -static void my_application_class_init(MyApplicationClass* klass) { - G_APPLICATION_CLASS(klass)->activate = my_application_activate; - G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; - G_APPLICATION_CLASS(klass)->startup = my_application_startup; - G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; - G_OBJECT_CLASS(klass)->dispose = my_application_dispose; -} - -static void my_application_init(MyApplication* self) {} - -MyApplication* my_application_new() { - return MY_APPLICATION(g_object_new(my_application_get_type(), - "application-id", APPLICATION_ID, - "flags", G_APPLICATION_NON_UNIQUE, - nullptr)); -} diff --git a/dart-patterns-and-records/step_11_a/linux/runner/CMakeLists.txt b/dart-patterns-and-records/step_11_a/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/dart-patterns-and-records/step_11_a/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/dart-patterns-and-records/step_11_a/linux/main.cc b/dart-patterns-and-records/step_11_a/linux/runner/main.cc similarity index 100% rename from dart-patterns-and-records/step_11_a/linux/main.cc rename to dart-patterns-and-records/step_11_a/linux/runner/main.cc diff --git a/dart-patterns-and-records/step_11_a/linux/runner/my_application.cc b/dart-patterns-and-records/step_11_a/linux/runner/my_application.cc new file mode 100644 index 0000000000..7065b83916 --- /dev/null +++ b/dart-patterns-and-records/step_11_a/linux/runner/my_application.cc @@ -0,0 +1,130 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "patterns_codelab"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "patterns_codelab"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/dart-patterns-and-records/step_11_a/linux/my_application.h b/dart-patterns-and-records/step_11_a/linux/runner/my_application.h similarity index 100% rename from dart-patterns-and-records/step_11_a/linux/my_application.h rename to dart-patterns-and-records/step_11_a/linux/runner/my_application.h diff --git a/dart-patterns-and-records/step_11_a/macos/Runner/AppDelegate.swift b/dart-patterns-and-records/step_11_a/macos/Runner/AppDelegate.swift index 8e02df2888..b3c1761412 100644 --- a/dart-patterns-and-records/step_11_a/macos/Runner/AppDelegate.swift +++ b/dart-patterns-and-records/step_11_a/macos/Runner/AppDelegate.swift @@ -6,4 +6,8 @@ class AppDelegate: FlutterAppDelegate { override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { return true } + + override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { + return true + } } diff --git a/dart-patterns-and-records/step_11_a/web/index.html b/dart-patterns-and-records/step_11_a/web/index.html index e14846e8ce..adcc31bddb 100644 --- a/dart-patterns-and-records/step_11_a/web/index.html +++ b/dart-patterns-and-records/step_11_a/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/dart-patterns-and-records/step_11_b/.gitignore b/dart-patterns-and-records/step_11_b/.gitignore index 29a3a5017f..79c113f9b5 100644 --- a/dart-patterns-and-records/step_11_b/.gitignore +++ b/dart-patterns-and-records/step_11_b/.gitignore @@ -5,9 +5,11 @@ *.swp .DS_Store .atom/ +.build/ .buildlog/ .history .svn/ +.swiftpm/ migrate_working_dir/ # IntelliJ related diff --git a/dart-patterns-and-records/step_11_b/android/gradle.properties b/dart-patterns-and-records/step_11_b/android/gradle.properties index 2597170821..f018a61817 100644 --- a/dart-patterns-and-records/step_11_b/android/gradle.properties +++ b/dart-patterns-and-records/step_11_b/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/dart-patterns-and-records/step_11_b/android/gradle/wrapper/gradle-wrapper.properties b/dart-patterns-and-records/step_11_b/android/gradle/wrapper/gradle-wrapper.properties index e1ca574ef0..7bb2df6ba6 100644 --- a/dart-patterns-and-records/step_11_b/android/gradle/wrapper/gradle-wrapper.properties +++ b/dart-patterns-and-records/step_11_b/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip diff --git a/dart-patterns-and-records/step_11_b/android/settings.gradle b/dart-patterns-and-records/step_11_b/android/settings.gradle index 536165d35a..b9e43bd376 100644 --- a/dart-patterns-and-records/step_11_b/android/settings.gradle +++ b/dart-patterns-and-records/step_11_b/android/settings.gradle @@ -18,8 +18,8 @@ pluginManagement { plugins { id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "7.3.0" apply false - id "org.jetbrains.kotlin.android" version "1.7.10" apply false + id "com.android.application" version "8.1.0" apply false + id "org.jetbrains.kotlin.android" version "1.8.22" apply false } include ":app" diff --git a/dart-patterns-and-records/step_11_b/linux/CMakeLists.txt b/dart-patterns-and-records/step_11_b/linux/CMakeLists.txt index dc88dd5e7d..6f653779a7 100644 --- a/dart-patterns-and-records/step_11_b/linux/CMakeLists.txt +++ b/dart-patterns-and-records/step_11_b/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/dart-patterns-and-records/step_11_b/linux/my_application.cc b/dart-patterns-and-records/step_11_b/linux/my_application.cc deleted file mode 100644 index 2e328e01f8..0000000000 --- a/dart-patterns-and-records/step_11_b/linux/my_application.cc +++ /dev/null @@ -1,124 +0,0 @@ -#include "my_application.h" - -#include -#ifdef GDK_WINDOWING_X11 -#include -#endif - -#include "flutter/generated_plugin_registrant.h" - -struct _MyApplication { - GtkApplication parent_instance; - char** dart_entrypoint_arguments; -}; - -G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) - -// Implements GApplication::activate. -static void my_application_activate(GApplication* application) { - MyApplication* self = MY_APPLICATION(application); - GtkWindow* window = - GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); - - // Use a header bar when running in GNOME as this is the common style used - // by applications and is the setup most users will be using (e.g. Ubuntu - // desktop). - // If running on X and not using GNOME then just use a traditional title bar - // in case the window manager does more exotic layout, e.g. tiling. - // If running on Wayland assume the header bar will work (may need changing - // if future cases occur). - gboolean use_header_bar = TRUE; -#ifdef GDK_WINDOWING_X11 - GdkScreen* screen = gtk_window_get_screen(window); - if (GDK_IS_X11_SCREEN(screen)) { - const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); - if (g_strcmp0(wm_name, "GNOME Shell") != 0) { - use_header_bar = FALSE; - } - } -#endif - if (use_header_bar) { - GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); - gtk_widget_show(GTK_WIDGET(header_bar)); - gtk_header_bar_set_title(header_bar, "patterns_codelab"); - gtk_header_bar_set_show_close_button(header_bar, TRUE); - gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); - } else { - gtk_window_set_title(window, "patterns_codelab"); - } - - gtk_window_set_default_size(window, 1280, 720); - gtk_widget_show(GTK_WIDGET(window)); - - g_autoptr(FlDartProject) project = fl_dart_project_new(); - fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); - - FlView* view = fl_view_new(project); - gtk_widget_show(GTK_WIDGET(view)); - gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); - - fl_register_plugins(FL_PLUGIN_REGISTRY(view)); - - gtk_widget_grab_focus(GTK_WIDGET(view)); -} - -// Implements GApplication::local_command_line. -static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { - MyApplication* self = MY_APPLICATION(application); - // Strip out the first argument as it is the binary name. - self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); - - g_autoptr(GError) error = nullptr; - if (!g_application_register(application, nullptr, &error)) { - g_warning("Failed to register: %s", error->message); - *exit_status = 1; - return TRUE; - } - - g_application_activate(application); - *exit_status = 0; - - return TRUE; -} - -// Implements GApplication::startup. -static void my_application_startup(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application startup. - - G_APPLICATION_CLASS(my_application_parent_class)->startup(application); -} - -// Implements GApplication::shutdown. -static void my_application_shutdown(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application shutdown. - - G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); -} - -// Implements GObject::dispose. -static void my_application_dispose(GObject* object) { - MyApplication* self = MY_APPLICATION(object); - g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); - G_OBJECT_CLASS(my_application_parent_class)->dispose(object); -} - -static void my_application_class_init(MyApplicationClass* klass) { - G_APPLICATION_CLASS(klass)->activate = my_application_activate; - G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; - G_APPLICATION_CLASS(klass)->startup = my_application_startup; - G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; - G_OBJECT_CLASS(klass)->dispose = my_application_dispose; -} - -static void my_application_init(MyApplication* self) {} - -MyApplication* my_application_new() { - return MY_APPLICATION(g_object_new(my_application_get_type(), - "application-id", APPLICATION_ID, - "flags", G_APPLICATION_NON_UNIQUE, - nullptr)); -} diff --git a/dart-patterns-and-records/step_11_b/linux/runner/CMakeLists.txt b/dart-patterns-and-records/step_11_b/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/dart-patterns-and-records/step_11_b/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/dart-patterns-and-records/step_11_b/linux/main.cc b/dart-patterns-and-records/step_11_b/linux/runner/main.cc similarity index 100% rename from dart-patterns-and-records/step_11_b/linux/main.cc rename to dart-patterns-and-records/step_11_b/linux/runner/main.cc diff --git a/dart-patterns-and-records/step_11_b/linux/runner/my_application.cc b/dart-patterns-and-records/step_11_b/linux/runner/my_application.cc new file mode 100644 index 0000000000..7065b83916 --- /dev/null +++ b/dart-patterns-and-records/step_11_b/linux/runner/my_application.cc @@ -0,0 +1,130 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "patterns_codelab"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "patterns_codelab"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/dart-patterns-and-records/step_11_b/linux/my_application.h b/dart-patterns-and-records/step_11_b/linux/runner/my_application.h similarity index 100% rename from dart-patterns-and-records/step_11_b/linux/my_application.h rename to dart-patterns-and-records/step_11_b/linux/runner/my_application.h diff --git a/dart-patterns-and-records/step_11_b/macos/Runner/AppDelegate.swift b/dart-patterns-and-records/step_11_b/macos/Runner/AppDelegate.swift index 8e02df2888..b3c1761412 100644 --- a/dart-patterns-and-records/step_11_b/macos/Runner/AppDelegate.swift +++ b/dart-patterns-and-records/step_11_b/macos/Runner/AppDelegate.swift @@ -6,4 +6,8 @@ class AppDelegate: FlutterAppDelegate { override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { return true } + + override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { + return true + } } diff --git a/dart-patterns-and-records/step_11_b/web/index.html b/dart-patterns-and-records/step_11_b/web/index.html index e14846e8ce..adcc31bddb 100644 --- a/dart-patterns-and-records/step_11_b/web/index.html +++ b/dart-patterns-and-records/step_11_b/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/dart-patterns-and-records/step_12/.gitignore b/dart-patterns-and-records/step_12/.gitignore index 29a3a5017f..79c113f9b5 100644 --- a/dart-patterns-and-records/step_12/.gitignore +++ b/dart-patterns-and-records/step_12/.gitignore @@ -5,9 +5,11 @@ *.swp .DS_Store .atom/ +.build/ .buildlog/ .history .svn/ +.swiftpm/ migrate_working_dir/ # IntelliJ related diff --git a/dart-patterns-and-records/step_12/android/gradle.properties b/dart-patterns-and-records/step_12/android/gradle.properties index 2597170821..f018a61817 100644 --- a/dart-patterns-and-records/step_12/android/gradle.properties +++ b/dart-patterns-and-records/step_12/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/dart-patterns-and-records/step_12/android/gradle/wrapper/gradle-wrapper.properties b/dart-patterns-and-records/step_12/android/gradle/wrapper/gradle-wrapper.properties index e1ca574ef0..7bb2df6ba6 100644 --- a/dart-patterns-and-records/step_12/android/gradle/wrapper/gradle-wrapper.properties +++ b/dart-patterns-and-records/step_12/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip diff --git a/dart-patterns-and-records/step_12/android/settings.gradle b/dart-patterns-and-records/step_12/android/settings.gradle index 536165d35a..b9e43bd376 100644 --- a/dart-patterns-and-records/step_12/android/settings.gradle +++ b/dart-patterns-and-records/step_12/android/settings.gradle @@ -18,8 +18,8 @@ pluginManagement { plugins { id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "7.3.0" apply false - id "org.jetbrains.kotlin.android" version "1.7.10" apply false + id "com.android.application" version "8.1.0" apply false + id "org.jetbrains.kotlin.android" version "1.8.22" apply false } include ":app" diff --git a/dart-patterns-and-records/step_12/linux/CMakeLists.txt b/dart-patterns-and-records/step_12/linux/CMakeLists.txt index dc88dd5e7d..6f653779a7 100644 --- a/dart-patterns-and-records/step_12/linux/CMakeLists.txt +++ b/dart-patterns-and-records/step_12/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/dart-patterns-and-records/step_12/linux/my_application.cc b/dart-patterns-and-records/step_12/linux/my_application.cc deleted file mode 100644 index 2e328e01f8..0000000000 --- a/dart-patterns-and-records/step_12/linux/my_application.cc +++ /dev/null @@ -1,124 +0,0 @@ -#include "my_application.h" - -#include -#ifdef GDK_WINDOWING_X11 -#include -#endif - -#include "flutter/generated_plugin_registrant.h" - -struct _MyApplication { - GtkApplication parent_instance; - char** dart_entrypoint_arguments; -}; - -G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) - -// Implements GApplication::activate. -static void my_application_activate(GApplication* application) { - MyApplication* self = MY_APPLICATION(application); - GtkWindow* window = - GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); - - // Use a header bar when running in GNOME as this is the common style used - // by applications and is the setup most users will be using (e.g. Ubuntu - // desktop). - // If running on X and not using GNOME then just use a traditional title bar - // in case the window manager does more exotic layout, e.g. tiling. - // If running on Wayland assume the header bar will work (may need changing - // if future cases occur). - gboolean use_header_bar = TRUE; -#ifdef GDK_WINDOWING_X11 - GdkScreen* screen = gtk_window_get_screen(window); - if (GDK_IS_X11_SCREEN(screen)) { - const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); - if (g_strcmp0(wm_name, "GNOME Shell") != 0) { - use_header_bar = FALSE; - } - } -#endif - if (use_header_bar) { - GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); - gtk_widget_show(GTK_WIDGET(header_bar)); - gtk_header_bar_set_title(header_bar, "patterns_codelab"); - gtk_header_bar_set_show_close_button(header_bar, TRUE); - gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); - } else { - gtk_window_set_title(window, "patterns_codelab"); - } - - gtk_window_set_default_size(window, 1280, 720); - gtk_widget_show(GTK_WIDGET(window)); - - g_autoptr(FlDartProject) project = fl_dart_project_new(); - fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); - - FlView* view = fl_view_new(project); - gtk_widget_show(GTK_WIDGET(view)); - gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); - - fl_register_plugins(FL_PLUGIN_REGISTRY(view)); - - gtk_widget_grab_focus(GTK_WIDGET(view)); -} - -// Implements GApplication::local_command_line. -static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { - MyApplication* self = MY_APPLICATION(application); - // Strip out the first argument as it is the binary name. - self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); - - g_autoptr(GError) error = nullptr; - if (!g_application_register(application, nullptr, &error)) { - g_warning("Failed to register: %s", error->message); - *exit_status = 1; - return TRUE; - } - - g_application_activate(application); - *exit_status = 0; - - return TRUE; -} - -// Implements GApplication::startup. -static void my_application_startup(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application startup. - - G_APPLICATION_CLASS(my_application_parent_class)->startup(application); -} - -// Implements GApplication::shutdown. -static void my_application_shutdown(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application shutdown. - - G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); -} - -// Implements GObject::dispose. -static void my_application_dispose(GObject* object) { - MyApplication* self = MY_APPLICATION(object); - g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); - G_OBJECT_CLASS(my_application_parent_class)->dispose(object); -} - -static void my_application_class_init(MyApplicationClass* klass) { - G_APPLICATION_CLASS(klass)->activate = my_application_activate; - G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; - G_APPLICATION_CLASS(klass)->startup = my_application_startup; - G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; - G_OBJECT_CLASS(klass)->dispose = my_application_dispose; -} - -static void my_application_init(MyApplication* self) {} - -MyApplication* my_application_new() { - return MY_APPLICATION(g_object_new(my_application_get_type(), - "application-id", APPLICATION_ID, - "flags", G_APPLICATION_NON_UNIQUE, - nullptr)); -} diff --git a/dart-patterns-and-records/step_12/linux/runner/CMakeLists.txt b/dart-patterns-and-records/step_12/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/dart-patterns-and-records/step_12/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/dart-patterns-and-records/step_12/linux/main.cc b/dart-patterns-and-records/step_12/linux/runner/main.cc similarity index 100% rename from dart-patterns-and-records/step_12/linux/main.cc rename to dart-patterns-and-records/step_12/linux/runner/main.cc diff --git a/dart-patterns-and-records/step_12/linux/runner/my_application.cc b/dart-patterns-and-records/step_12/linux/runner/my_application.cc new file mode 100644 index 0000000000..7065b83916 --- /dev/null +++ b/dart-patterns-and-records/step_12/linux/runner/my_application.cc @@ -0,0 +1,130 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "patterns_codelab"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "patterns_codelab"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/dart-patterns-and-records/step_12/linux/my_application.h b/dart-patterns-and-records/step_12/linux/runner/my_application.h similarity index 100% rename from dart-patterns-and-records/step_12/linux/my_application.h rename to dart-patterns-and-records/step_12/linux/runner/my_application.h diff --git a/dart-patterns-and-records/step_12/macos/Runner/AppDelegate.swift b/dart-patterns-and-records/step_12/macos/Runner/AppDelegate.swift index 8e02df2888..b3c1761412 100644 --- a/dart-patterns-and-records/step_12/macos/Runner/AppDelegate.swift +++ b/dart-patterns-and-records/step_12/macos/Runner/AppDelegate.swift @@ -6,4 +6,8 @@ class AppDelegate: FlutterAppDelegate { override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { return true } + + override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { + return true + } } diff --git a/dart-patterns-and-records/step_12/web/index.html b/dart-patterns-and-records/step_12/web/index.html index e14846e8ce..adcc31bddb 100644 --- a/dart-patterns-and-records/step_12/web/index.html +++ b/dart-patterns-and-records/step_12/web/index.html @@ -21,7 +21,7 @@ - + From 2d1ce1e8b536b3d76793cb53a97ba2d7fc4e478e Mon Sep 17 00:00:00 2001 From: Brett Morgan Date: Mon, 14 Oct 2024 15:53:22 +1100 Subject: [PATCH 007/108] Update `ffigen_codelab` --- ffigen_codelab/step_03/.gitignore | 4 + ffigen_codelab/step_03/android/build.gradle | 12 +- ffigen_codelab/step_03/example/.gitignore | 2 + .../step_03/example/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../step_03/example/android/settings.gradle | 4 +- .../ios/Runner.xcodeproj/project.pbxproj | 126 +++++++++--------- .../step_03/example/linux/CMakeLists.txt | 23 +--- .../example/linux/runner/CMakeLists.txt | 26 ++++ .../example/linux/{ => runner}/main.cc | 0 .../linux/{ => runner}/my_application.cc | 6 + .../linux/{ => runner}/my_application.h | 0 .../macos/Runner.xcodeproj/project.pbxproj | 102 +++++++------- .../example/macos/Runner/AppDelegate.swift | 4 + ffigen_codelab/step_03/example/pubspec.yaml | 2 +- .../step_03/macos/ffigen_app.podspec | 7 + ffigen_codelab/step_03/pubspec.yaml | 6 +- ffigen_codelab/step_03/src/CMakeLists.txt | 5 + ffigen_codelab/step_05/.gitignore | 4 + ffigen_codelab/step_05/android/build.gradle | 12 +- ffigen_codelab/step_05/example/.gitignore | 2 + .../step_05/example/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../step_05/example/android/settings.gradle | 4 +- .../ios/Runner.xcodeproj/project.pbxproj | 126 +++++++++--------- .../step_05/example/linux/CMakeLists.txt | 23 +--- .../example/linux/runner/CMakeLists.txt | 26 ++++ .../example/linux/{ => runner}/main.cc | 0 .../linux/{ => runner}/my_application.cc | 6 + .../linux/{ => runner}/my_application.h | 0 .../macos/Runner.xcodeproj/project.pbxproj | 102 +++++++------- .../example/macos/Runner/AppDelegate.swift | 4 + ffigen_codelab/step_05/example/pubspec.yaml | 2 +- .../step_05/macos/ffigen_app.podspec | 7 + ffigen_codelab/step_05/pubspec.yaml | 4 +- ffigen_codelab/step_05/src/CMakeLists.txt | 5 + ffigen_codelab/step_06/.gitignore | 4 + ffigen_codelab/step_06/android/build.gradle | 12 +- ffigen_codelab/step_06/example/.gitignore | 2 + .../step_06/example/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../step_06/example/android/settings.gradle | 4 +- .../ios/Runner.xcodeproj/project.pbxproj | 126 +++++++++--------- .../step_06/example/linux/CMakeLists.txt | 23 +--- .../example/linux/runner/CMakeLists.txt | 26 ++++ .../example/linux/{ => runner}/main.cc | 0 .../linux/{ => runner}/my_application.cc | 6 + .../linux/{ => runner}/my_application.h | 0 .../macos/Runner.xcodeproj/project.pbxproj | 102 +++++++------- .../example/macos/Runner/AppDelegate.swift | 4 + ffigen_codelab/step_06/example/pubspec.yaml | 2 +- .../step_06/macos/ffigen_app.podspec | 7 + ffigen_codelab/step_06/pubspec.yaml | 4 +- ffigen_codelab/step_06/src/CMakeLists.txt | 5 + ffigen_codelab/step_07/.gitignore | 4 + ffigen_codelab/step_07/android/build.gradle | 12 +- ffigen_codelab/step_07/example/.gitignore | 2 + .../step_07/example/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../step_07/example/android/settings.gradle | 4 +- .../ios/Runner.xcodeproj/project.pbxproj | 126 +++++++++--------- .../step_07/example/linux/CMakeLists.txt | 23 +--- .../example/linux/runner/CMakeLists.txt | 26 ++++ .../example/linux/{ => runner}/main.cc | 0 .../linux/{ => runner}/my_application.cc | 6 + .../linux/{ => runner}/my_application.h | 0 .../macos/Runner.xcodeproj/project.pbxproj | 102 +++++++------- .../example/macos/Runner/AppDelegate.swift | 4 + ffigen_codelab/step_07/example/pubspec.yaml | 6 +- .../step_07/macos/ffigen_app.podspec | 7 + ffigen_codelab/step_07/pubspec.yaml | 4 +- ffigen_codelab/step_07/src/CMakeLists.txt | 5 + 72 files changed, 735 insertions(+), 595 deletions(-) create mode 100644 ffigen_codelab/step_03/example/linux/runner/CMakeLists.txt rename ffigen_codelab/step_03/example/linux/{ => runner}/main.cc (100%) rename ffigen_codelab/step_03/example/linux/{ => runner}/my_application.cc (93%) rename ffigen_codelab/step_03/example/linux/{ => runner}/my_application.h (100%) create mode 100644 ffigen_codelab/step_05/example/linux/runner/CMakeLists.txt rename ffigen_codelab/step_05/example/linux/{ => runner}/main.cc (100%) rename ffigen_codelab/step_05/example/linux/{ => runner}/my_application.cc (93%) rename ffigen_codelab/step_05/example/linux/{ => runner}/my_application.h (100%) create mode 100644 ffigen_codelab/step_06/example/linux/runner/CMakeLists.txt rename ffigen_codelab/step_06/example/linux/{ => runner}/main.cc (100%) rename ffigen_codelab/step_06/example/linux/{ => runner}/my_application.cc (93%) rename ffigen_codelab/step_06/example/linux/{ => runner}/my_application.h (100%) create mode 100644 ffigen_codelab/step_07/example/linux/runner/CMakeLists.txt rename ffigen_codelab/step_07/example/linux/{ => runner}/main.cc (100%) rename ffigen_codelab/step_07/example/linux/{ => runner}/my_application.cc (93%) rename ffigen_codelab/step_07/example/linux/{ => runner}/my_application.h (100%) diff --git a/ffigen_codelab/step_03/.gitignore b/ffigen_codelab/step_03/.gitignore index ac5aa9893e..e7d347d9d3 100644 --- a/ffigen_codelab/step_03/.gitignore +++ b/ffigen_codelab/step_03/.gitignore @@ -5,9 +5,11 @@ *.swp .DS_Store .atom/ +.build/ .buildlog/ .history .svn/ +.swiftpm/ migrate_working_dir/ # IntelliJ related @@ -26,4 +28,6 @@ migrate_working_dir/ /pubspec.lock **/doc/api/ .dart_tool/ +.flutter-plugins +.flutter-plugins-dependencies build/ diff --git a/ffigen_codelab/step_03/android/build.gradle b/ffigen_codelab/step_03/android/build.gradle index 16a1825537..5681b7125e 100644 --- a/ffigen_codelab/step_03/android/build.gradle +++ b/ffigen_codelab/step_03/android/build.gradle @@ -11,7 +11,7 @@ buildscript { dependencies { // The Android Gradle Plugin knows how to build native code with the NDK. - classpath("com.android.tools.build:gradle:7.3.0") + classpath("com.android.tools.build:gradle:8.1.0") } } @@ -25,13 +25,11 @@ rootProject.allprojects { apply plugin: "com.android.library" android { - if (project.android.hasProperty("namespace")) { - namespace = "com.example.ffigen_app" - } + namespace = "com.example.ffigen_app" // Bumping the plugin compileSdk version requires all clients of this plugin // to bump the version in their app. - compileSdk = 34 + compileSdk = 35 // Use the NDK version // declared in /android/app/build.gradle file of the Flutter project. @@ -55,8 +53,8 @@ android { } compileOptions { - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 + sourceCompatibility = JavaVersion.VERSION_11 + targetCompatibility = JavaVersion.VERSION_11 } defaultConfig { diff --git a/ffigen_codelab/step_03/example/.gitignore b/ffigen_codelab/step_03/example/.gitignore index 29a3a5017f..79c113f9b5 100644 --- a/ffigen_codelab/step_03/example/.gitignore +++ b/ffigen_codelab/step_03/example/.gitignore @@ -5,9 +5,11 @@ *.swp .DS_Store .atom/ +.build/ .buildlog/ .history .svn/ +.swiftpm/ migrate_working_dir/ # IntelliJ related diff --git a/ffigen_codelab/step_03/example/android/gradle.properties b/ffigen_codelab/step_03/example/android/gradle.properties index 2597170821..f018a61817 100644 --- a/ffigen_codelab/step_03/example/android/gradle.properties +++ b/ffigen_codelab/step_03/example/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/ffigen_codelab/step_03/example/android/gradle/wrapper/gradle-wrapper.properties b/ffigen_codelab/step_03/example/android/gradle/wrapper/gradle-wrapper.properties index e1ca574ef0..7bb2df6ba6 100644 --- a/ffigen_codelab/step_03/example/android/gradle/wrapper/gradle-wrapper.properties +++ b/ffigen_codelab/step_03/example/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip diff --git a/ffigen_codelab/step_03/example/android/settings.gradle b/ffigen_codelab/step_03/example/android/settings.gradle index 536165d35a..b9e43bd376 100644 --- a/ffigen_codelab/step_03/example/android/settings.gradle +++ b/ffigen_codelab/step_03/example/android/settings.gradle @@ -18,8 +18,8 @@ pluginManagement { plugins { id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "7.3.0" apply false - id "org.jetbrains.kotlin.android" version "1.7.10" apply false + id "com.android.application" version "8.1.0" apply false + id "org.jetbrains.kotlin.android" version "1.8.22" apply false } include ":app" diff --git a/ffigen_codelab/step_03/example/ios/Runner.xcodeproj/project.pbxproj b/ffigen_codelab/step_03/example/ios/Runner.xcodeproj/project.pbxproj index 4604462fa2..addb2d9d27 100644 --- a/ffigen_codelab/step_03/example/ios/Runner.xcodeproj/project.pbxproj +++ b/ffigen_codelab/step_03/example/ios/Runner.xcodeproj/project.pbxproj @@ -7,7 +7,6 @@ objects = { /* Begin PBXBuildFile section */ - 0DEC01485F3DCF73B30EDBC9 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8D58493F2CA75B7FBCFB3223 /* Pods_Runner.framework */; }; 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; @@ -15,7 +14,8 @@ 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - C061F61A4A060906BB85D6B0 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1007B9A9A0C57F51F1397C5A /* Pods_RunnerTests.framework */; }; + E877D048132D3B7EB5F82226 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C2F2CEAC6F6A0C9CB9EDDDFA /* Pods_Runner.framework */; }; + F84DA7186408FE37502DC307 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1F81C7A96749BCF879B4AA0E /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,22 +42,19 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 1007B9A9A0C57F51F1397C5A /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 17A4766EEED294992EDF39EE /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 1D841FE4C37F5EC231941F77 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 2B90EDD96DA7CD62A13E62BC /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 1F81C7A96749BCF879B4AA0E /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 36F8C04D2EB0411ADA50D258 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 55A8F5B8D3CC97EB458EC9B3 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 3BFA581CCCE704FFCB699F0D /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 4A9018625F52C60DD2AB19A4 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 760EB38BCE7B373982137EFF /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 7FE24439FAAD244AC8DBEDCA /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - 8D58493F2CA75B7FBCFB3223 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 8D89798C3848C6C513D55F6C /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -65,22 +62,25 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + A8B84461C0AE17B571F25210 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + B899FC964E4D721CBCF8B32A /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + C2F2CEAC6F6A0C9CB9EDDDFA /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 5F6F40F571AB458D9F29F8D6 /* Frameworks */ = { + 97C146EB1CF9000F007C117D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - C061F61A4A060906BB85D6B0 /* Pods_RunnerTests.framework in Frameworks */, + E877D048132D3B7EB5F82226 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 97C146EB1CF9000F007C117D /* Frameworks */ = { + FFDFB7A91DA3CC3FB7D3ED28 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 0DEC01485F3DCF73B30EDBC9 /* Pods_Runner.framework in Frameworks */, + F84DA7186408FE37502DC307 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -95,11 +95,11 @@ path = RunnerTests; sourceTree = ""; }; - 61D4B3EB81252FE0FF3C81EE /* Frameworks */ = { + 7765C30B327B729707FF946C /* Frameworks */ = { isa = PBXGroup; children = ( - 8D58493F2CA75B7FBCFB3223 /* Pods_Runner.framework */, - 1007B9A9A0C57F51F1397C5A /* Pods_RunnerTests.framework */, + C2F2CEAC6F6A0C9CB9EDDDFA /* Pods_Runner.framework */, + 1F81C7A96749BCF879B4AA0E /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -115,6 +115,20 @@ name = Flutter; sourceTree = ""; }; + 979C260ADDD4EF8BE0C2FB07 /* Pods */ = { + isa = PBXGroup; + children = ( + 3BFA581CCCE704FFCB699F0D /* Pods-Runner.debug.xcconfig */, + B899FC964E4D721CBCF8B32A /* Pods-Runner.release.xcconfig */, + 4A9018625F52C60DD2AB19A4 /* Pods-Runner.profile.xcconfig */, + A8B84461C0AE17B571F25210 /* Pods-RunnerTests.debug.xcconfig */, + 36F8C04D2EB0411ADA50D258 /* Pods-RunnerTests.release.xcconfig */, + 760EB38BCE7B373982137EFF /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; 97C146E51CF9000F007C117D = { isa = PBXGroup; children = ( @@ -122,8 +136,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - E849079E5A297CEDF29184DD /* Pods */, - 61D4B3EB81252FE0FF3C81EE /* Frameworks */, + 979C260ADDD4EF8BE0C2FB07 /* Pods */, + 7765C30B327B729707FF946C /* Frameworks */, ); sourceTree = ""; }; @@ -151,20 +165,6 @@ path = Runner; sourceTree = ""; }; - E849079E5A297CEDF29184DD /* Pods */ = { - isa = PBXGroup; - children = ( - 17A4766EEED294992EDF39EE /* Pods-Runner.debug.xcconfig */, - 1D841FE4C37F5EC231941F77 /* Pods-Runner.release.xcconfig */, - 7FE24439FAAD244AC8DBEDCA /* Pods-Runner.profile.xcconfig */, - 55A8F5B8D3CC97EB458EC9B3 /* Pods-RunnerTests.debug.xcconfig */, - 8D89798C3848C6C513D55F6C /* Pods-RunnerTests.release.xcconfig */, - 2B90EDD96DA7CD62A13E62BC /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 9F17ED10509476A4CE87A422 /* [CP] Check Pods Manifest.lock */, + 43635CDE8835859F5B5A334F /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 5F6F40F571AB458D9F29F8D6 /* Frameworks */, + FFDFB7A91DA3CC3FB7D3ED28 /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 91FDA4365200BC61D568A91D /* [CP] Check Pods Manifest.lock */, + 4EBAC9F11BC6A2553D3C2EB3 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 3F4D379EC3EDE85F5F9D07BE /* [CP] Embed Pods Frameworks */, + 6E4DA2AD8C24FEE355BEA43C /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -286,24 +286,29 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 3F4D379EC3EDE85F5F9D07BE /* [CP] Embed Pods Frameworks */ = { + 43635CDE8835859F5B5A334F /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 91FDA4365200BC61D568A91D /* [CP] Check Pods Manifest.lock */ = { + 4EBAC9F11BC6A2553D3C2EB3 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -325,42 +330,37 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { + 6E4DA2AD8C24FEE355BEA43C /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputPaths = ( + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "Run Script"; - outputPaths = ( + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; }; - 9F17ED10509476A4CE87A422 /* [CP] Check Pods Manifest.lock */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( ); + name = "Run Script"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; /* End PBXShellScriptBuildPhase section */ @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 55A8F5B8D3CC97EB458EC9B3 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = A8B84461C0AE17B571F25210 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 8D89798C3848C6C513D55F6C /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 36F8C04D2EB0411ADA50D258 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 2B90EDD96DA7CD62A13E62BC /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 760EB38BCE7B373982137EFF /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/ffigen_codelab/step_03/example/linux/CMakeLists.txt b/ffigen_codelab/step_03/example/linux/CMakeLists.txt index e6a7756343..0225fd0ac0 100644 --- a/ffigen_codelab/step_03/example/linux/CMakeLists.txt +++ b/ffigen_codelab/step_03/example/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/ffigen_codelab/step_03/example/linux/runner/CMakeLists.txt b/ffigen_codelab/step_03/example/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/ffigen_codelab/step_03/example/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/ffigen_codelab/step_03/example/linux/main.cc b/ffigen_codelab/step_03/example/linux/runner/main.cc similarity index 100% rename from ffigen_codelab/step_03/example/linux/main.cc rename to ffigen_codelab/step_03/example/linux/runner/main.cc diff --git a/ffigen_codelab/step_03/example/linux/my_application.cc b/ffigen_codelab/step_03/example/linux/runner/my_application.cc similarity index 93% rename from ffigen_codelab/step_03/example/linux/my_application.cc rename to ffigen_codelab/step_03/example/linux/runner/my_application.cc index dda095336c..6233c3a531 100644 --- a/ffigen_codelab/step_03/example/linux/my_application.cc +++ b/ffigen_codelab/step_03/example/linux/runner/my_application.cc @@ -117,6 +117,12 @@ static void my_application_class_init(MyApplicationClass* klass) { static void my_application_init(MyApplication* self) {} MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + return MY_APPLICATION(g_object_new(my_application_get_type(), "application-id", APPLICATION_ID, "flags", G_APPLICATION_NON_UNIQUE, diff --git a/ffigen_codelab/step_03/example/linux/my_application.h b/ffigen_codelab/step_03/example/linux/runner/my_application.h similarity index 100% rename from ffigen_codelab/step_03/example/linux/my_application.h rename to ffigen_codelab/step_03/example/linux/runner/my_application.h diff --git a/ffigen_codelab/step_03/example/macos/Runner.xcodeproj/project.pbxproj b/ffigen_codelab/step_03/example/macos/Runner.xcodeproj/project.pbxproj index 2b6323e38b..ffdf71b13a 100644 --- a/ffigen_codelab/step_03/example/macos/Runner.xcodeproj/project.pbxproj +++ b/ffigen_codelab/step_03/example/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ - 0611C0E62E9F07BE97FC36E2 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4BD43A0C849673AF89382BBE /* Pods_Runner.framework */; }; + 191C21C9FABD3637223435E3 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CD122BD18D351DED3CBE9C58 /* Pods_RunnerTests.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - CDACCF779212F3BBFA2F9E89 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 97B02168A592270015629E0A /* Pods_RunnerTests.framework */; }; + 9F7DDDDB746990659C5E51CC /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ED7316D326168056B8E0BF61 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,7 +62,7 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 206132BF754C0D4876C94C27 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 1C0042885A741B0FCD9A30E4 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -79,15 +79,15 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 3B1F431398FF4DC3ED6497B7 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - 43F214F402E1FF88ED50AC83 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 4BD43A0C849673AF89382BBE /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - 97B02168A592270015629E0A /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - A4B361DEECFE5D3D5D8AA4BE /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - D5B7C7E43D49BE26544629FB /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - E7A9C277D1F0C1E18BB07934 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 9AEB332B62E5753B98290AE7 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 9BC21DE994A16B5895E402FF /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + C7A4F7E292E04215221DA70F /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + CD122BD18D351DED3CBE9C58 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D50CDFE9011082D8765687C9 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + ED7316D326168056B8E0BF61 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + FC60D21C0DD8E928760CF13E /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - CDACCF779212F3BBFA2F9E89 /* Pods_RunnerTests.framework in Frameworks */, + 191C21C9FABD3637223435E3 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,27 +103,13 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 0611C0E62E9F07BE97FC36E2 /* Pods_Runner.framework in Frameworks */, + 9F7DDDDB746990659C5E51CC /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 12882181BD91BF46813F99B0 /* Pods */ = { - isa = PBXGroup; - children = ( - 206132BF754C0D4876C94C27 /* Pods-Runner.debug.xcconfig */, - 43F214F402E1FF88ED50AC83 /* Pods-Runner.release.xcconfig */, - E7A9C277D1F0C1E18BB07934 /* Pods-Runner.profile.xcconfig */, - A4B361DEECFE5D3D5D8AA4BE /* Pods-RunnerTests.debug.xcconfig */, - 3B1F431398FF4DC3ED6497B7 /* Pods-RunnerTests.release.xcconfig */, - D5B7C7E43D49BE26544629FB /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; 331C80D6294CF71000263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -151,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 12882181BD91BF46813F99B0 /* Pods */, + 80FDF5788B7AFEFFF6BCF906 /* Pods */, ); sourceTree = ""; }; @@ -199,11 +185,25 @@ path = Runner; sourceTree = ""; }; + 80FDF5788B7AFEFFF6BCF906 /* Pods */ = { + isa = PBXGroup; + children = ( + 9AEB332B62E5753B98290AE7 /* Pods-Runner.debug.xcconfig */, + C7A4F7E292E04215221DA70F /* Pods-Runner.release.xcconfig */, + 1C0042885A741B0FCD9A30E4 /* Pods-Runner.profile.xcconfig */, + FC60D21C0DD8E928760CF13E /* Pods-RunnerTests.debug.xcconfig */, + D50CDFE9011082D8765687C9 /* Pods-RunnerTests.release.xcconfig */, + 9BC21DE994A16B5895E402FF /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - 4BD43A0C849673AF89382BBE /* Pods_Runner.framework */, - 97B02168A592270015629E0A /* Pods_RunnerTests.framework */, + ED7316D326168056B8E0BF61 /* Pods_Runner.framework */, + CD122BD18D351DED3CBE9C58 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - AA2D9882E2111CB8B951164B /* [CP] Check Pods Manifest.lock */, + 424F806F1791245CCBFE4273 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 06D46A080576FE55FACAE021 /* [CP] Check Pods Manifest.lock */, + 2C449A7997ED00E74DA5AF4B /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 444198964BE797FE755EC229 /* [CP] Embed Pods Frameworks */, + 6A093E120D2D7152871422C7 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,7 +323,7 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 06D46A080576FE55FACAE021 /* [CP] Check Pods Manifest.lock */ = { + 2C449A7997ED00E74DA5AF4B /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -383,43 +383,43 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 444198964BE797FE755EC229 /* [CP] Embed Pods Frameworks */ = { + 424F806F1791245CCBFE4273 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - AA2D9882E2111CB8B951164B /* [CP] Check Pods Manifest.lock */ = { + 6A093E120D2D7152871422C7 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = A4B361DEECFE5D3D5D8AA4BE /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = FC60D21C0DD8E928760CF13E /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 3B1F431398FF4DC3ED6497B7 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = D50CDFE9011082D8765687C9 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = D5B7C7E43D49BE26544629FB /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 9BC21DE994A16B5895E402FF /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/ffigen_codelab/step_03/example/macos/Runner/AppDelegate.swift b/ffigen_codelab/step_03/example/macos/Runner/AppDelegate.swift index 8e02df2888..b3c1761412 100644 --- a/ffigen_codelab/step_03/example/macos/Runner/AppDelegate.swift +++ b/ffigen_codelab/step_03/example/macos/Runner/AppDelegate.swift @@ -6,4 +6,8 @@ class AppDelegate: FlutterAppDelegate { override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { return true } + + override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { + return true + } } diff --git a/ffigen_codelab/step_03/example/pubspec.yaml b/ffigen_codelab/step_03/example/pubspec.yaml index 3398ed703c..806a8504d7 100644 --- a/ffigen_codelab/step_03/example/pubspec.yaml +++ b/ffigen_codelab/step_03/example/pubspec.yaml @@ -52,7 +52,7 @@ dev_dependencies: # activated in the `analysis_options.yaml` file located at the root of your # package. See that file for information about deactivating specific lint # rules and activating additional ones. - flutter_lints: ^4.0.0 + flutter_lints: ^5.0.0 # For information on the generic Dart part of this file, see the # following page: https://dart.dev/tools/pub/pubspec diff --git a/ffigen_codelab/step_03/macos/ffigen_app.podspec b/ffigen_codelab/step_03/macos/ffigen_app.podspec index b03ff8d4d8..507dd0a9d3 100644 --- a/ffigen_codelab/step_03/macos/ffigen_app.podspec +++ b/ffigen_codelab/step_03/macos/ffigen_app.podspec @@ -19,6 +19,13 @@ A new Flutter FFI plugin project. # `../src/*` so that the C sources can be shared among all target platforms. s.source = { :path => '.' } s.source_files = 'Classes/**/*' + + # If your plugin requires a privacy manifest, for example if it collects user + # data, update the PrivacyInfo.xcprivacy file to describe your plugin's + # privacy impact, and then uncomment this line. For more information, + # see https://developer.apple.com/documentation/bundleresources/privacy_manifest_files + # s.resource_bundles = {'ffigen_app_privacy' => ['Resources/PrivacyInfo.xcprivacy']} + s.dependency 'FlutterMacOS' s.platform = :osx, '10.11' diff --git a/ffigen_codelab/step_03/pubspec.yaml b/ffigen_codelab/step_03/pubspec.yaml index c2ab8a7df0..ba96d8eb68 100644 --- a/ffigen_codelab/step_03/pubspec.yaml +++ b/ffigen_codelab/step_03/pubspec.yaml @@ -13,11 +13,11 @@ dependencies: plugin_platform_interface: ^2.0.2 dev_dependencies: - ffi: ^2.1.0 - ffigen: ^13.0.0 + ffi: ^2.1.3 + ffigen: ^14.0.1 flutter_test: sdk: flutter - flutter_lints: ^4.0.0 + flutter_lints: ^5.0.0 # For information on the generic Dart part of this file, see the # following page: https://dart.dev/tools/pub/pubspec diff --git a/ffigen_codelab/step_03/src/CMakeLists.txt b/ffigen_codelab/step_03/src/CMakeLists.txt index d2390e362c..0060b246ab 100644 --- a/ffigen_codelab/step_03/src/CMakeLists.txt +++ b/ffigen_codelab/step_03/src/CMakeLists.txt @@ -15,3 +15,8 @@ set_target_properties(ffigen_app PROPERTIES ) target_compile_definitions(ffigen_app PUBLIC DART_SHARED_LIB) + +if (ANDROID) + # Support Android 15 16k page size + target_link_options(ffigen_app PRIVATE "-Wl,-z,max-page-size=16384") +endif() diff --git a/ffigen_codelab/step_05/.gitignore b/ffigen_codelab/step_05/.gitignore index ac5aa9893e..e7d347d9d3 100644 --- a/ffigen_codelab/step_05/.gitignore +++ b/ffigen_codelab/step_05/.gitignore @@ -5,9 +5,11 @@ *.swp .DS_Store .atom/ +.build/ .buildlog/ .history .svn/ +.swiftpm/ migrate_working_dir/ # IntelliJ related @@ -26,4 +28,6 @@ migrate_working_dir/ /pubspec.lock **/doc/api/ .dart_tool/ +.flutter-plugins +.flutter-plugins-dependencies build/ diff --git a/ffigen_codelab/step_05/android/build.gradle b/ffigen_codelab/step_05/android/build.gradle index 16a1825537..5681b7125e 100644 --- a/ffigen_codelab/step_05/android/build.gradle +++ b/ffigen_codelab/step_05/android/build.gradle @@ -11,7 +11,7 @@ buildscript { dependencies { // The Android Gradle Plugin knows how to build native code with the NDK. - classpath("com.android.tools.build:gradle:7.3.0") + classpath("com.android.tools.build:gradle:8.1.0") } } @@ -25,13 +25,11 @@ rootProject.allprojects { apply plugin: "com.android.library" android { - if (project.android.hasProperty("namespace")) { - namespace = "com.example.ffigen_app" - } + namespace = "com.example.ffigen_app" // Bumping the plugin compileSdk version requires all clients of this plugin // to bump the version in their app. - compileSdk = 34 + compileSdk = 35 // Use the NDK version // declared in /android/app/build.gradle file of the Flutter project. @@ -55,8 +53,8 @@ android { } compileOptions { - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 + sourceCompatibility = JavaVersion.VERSION_11 + targetCompatibility = JavaVersion.VERSION_11 } defaultConfig { diff --git a/ffigen_codelab/step_05/example/.gitignore b/ffigen_codelab/step_05/example/.gitignore index 29a3a5017f..79c113f9b5 100644 --- a/ffigen_codelab/step_05/example/.gitignore +++ b/ffigen_codelab/step_05/example/.gitignore @@ -5,9 +5,11 @@ *.swp .DS_Store .atom/ +.build/ .buildlog/ .history .svn/ +.swiftpm/ migrate_working_dir/ # IntelliJ related diff --git a/ffigen_codelab/step_05/example/android/gradle.properties b/ffigen_codelab/step_05/example/android/gradle.properties index 2597170821..f018a61817 100644 --- a/ffigen_codelab/step_05/example/android/gradle.properties +++ b/ffigen_codelab/step_05/example/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/ffigen_codelab/step_05/example/android/gradle/wrapper/gradle-wrapper.properties b/ffigen_codelab/step_05/example/android/gradle/wrapper/gradle-wrapper.properties index e1ca574ef0..7bb2df6ba6 100644 --- a/ffigen_codelab/step_05/example/android/gradle/wrapper/gradle-wrapper.properties +++ b/ffigen_codelab/step_05/example/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip diff --git a/ffigen_codelab/step_05/example/android/settings.gradle b/ffigen_codelab/step_05/example/android/settings.gradle index 536165d35a..b9e43bd376 100644 --- a/ffigen_codelab/step_05/example/android/settings.gradle +++ b/ffigen_codelab/step_05/example/android/settings.gradle @@ -18,8 +18,8 @@ pluginManagement { plugins { id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "7.3.0" apply false - id "org.jetbrains.kotlin.android" version "1.7.10" apply false + id "com.android.application" version "8.1.0" apply false + id "org.jetbrains.kotlin.android" version "1.8.22" apply false } include ":app" diff --git a/ffigen_codelab/step_05/example/ios/Runner.xcodeproj/project.pbxproj b/ffigen_codelab/step_05/example/ios/Runner.xcodeproj/project.pbxproj index 4604462fa2..addb2d9d27 100644 --- a/ffigen_codelab/step_05/example/ios/Runner.xcodeproj/project.pbxproj +++ b/ffigen_codelab/step_05/example/ios/Runner.xcodeproj/project.pbxproj @@ -7,7 +7,6 @@ objects = { /* Begin PBXBuildFile section */ - 0DEC01485F3DCF73B30EDBC9 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8D58493F2CA75B7FBCFB3223 /* Pods_Runner.framework */; }; 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; @@ -15,7 +14,8 @@ 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - C061F61A4A060906BB85D6B0 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1007B9A9A0C57F51F1397C5A /* Pods_RunnerTests.framework */; }; + E877D048132D3B7EB5F82226 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C2F2CEAC6F6A0C9CB9EDDDFA /* Pods_Runner.framework */; }; + F84DA7186408FE37502DC307 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1F81C7A96749BCF879B4AA0E /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,22 +42,19 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 1007B9A9A0C57F51F1397C5A /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 17A4766EEED294992EDF39EE /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 1D841FE4C37F5EC231941F77 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 2B90EDD96DA7CD62A13E62BC /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 1F81C7A96749BCF879B4AA0E /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 36F8C04D2EB0411ADA50D258 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 55A8F5B8D3CC97EB458EC9B3 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 3BFA581CCCE704FFCB699F0D /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 4A9018625F52C60DD2AB19A4 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 760EB38BCE7B373982137EFF /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 7FE24439FAAD244AC8DBEDCA /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - 8D58493F2CA75B7FBCFB3223 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 8D89798C3848C6C513D55F6C /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -65,22 +62,25 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + A8B84461C0AE17B571F25210 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + B899FC964E4D721CBCF8B32A /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + C2F2CEAC6F6A0C9CB9EDDDFA /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 5F6F40F571AB458D9F29F8D6 /* Frameworks */ = { + 97C146EB1CF9000F007C117D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - C061F61A4A060906BB85D6B0 /* Pods_RunnerTests.framework in Frameworks */, + E877D048132D3B7EB5F82226 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 97C146EB1CF9000F007C117D /* Frameworks */ = { + FFDFB7A91DA3CC3FB7D3ED28 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 0DEC01485F3DCF73B30EDBC9 /* Pods_Runner.framework in Frameworks */, + F84DA7186408FE37502DC307 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -95,11 +95,11 @@ path = RunnerTests; sourceTree = ""; }; - 61D4B3EB81252FE0FF3C81EE /* Frameworks */ = { + 7765C30B327B729707FF946C /* Frameworks */ = { isa = PBXGroup; children = ( - 8D58493F2CA75B7FBCFB3223 /* Pods_Runner.framework */, - 1007B9A9A0C57F51F1397C5A /* Pods_RunnerTests.framework */, + C2F2CEAC6F6A0C9CB9EDDDFA /* Pods_Runner.framework */, + 1F81C7A96749BCF879B4AA0E /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -115,6 +115,20 @@ name = Flutter; sourceTree = ""; }; + 979C260ADDD4EF8BE0C2FB07 /* Pods */ = { + isa = PBXGroup; + children = ( + 3BFA581CCCE704FFCB699F0D /* Pods-Runner.debug.xcconfig */, + B899FC964E4D721CBCF8B32A /* Pods-Runner.release.xcconfig */, + 4A9018625F52C60DD2AB19A4 /* Pods-Runner.profile.xcconfig */, + A8B84461C0AE17B571F25210 /* Pods-RunnerTests.debug.xcconfig */, + 36F8C04D2EB0411ADA50D258 /* Pods-RunnerTests.release.xcconfig */, + 760EB38BCE7B373982137EFF /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; 97C146E51CF9000F007C117D = { isa = PBXGroup; children = ( @@ -122,8 +136,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - E849079E5A297CEDF29184DD /* Pods */, - 61D4B3EB81252FE0FF3C81EE /* Frameworks */, + 979C260ADDD4EF8BE0C2FB07 /* Pods */, + 7765C30B327B729707FF946C /* Frameworks */, ); sourceTree = ""; }; @@ -151,20 +165,6 @@ path = Runner; sourceTree = ""; }; - E849079E5A297CEDF29184DD /* Pods */ = { - isa = PBXGroup; - children = ( - 17A4766EEED294992EDF39EE /* Pods-Runner.debug.xcconfig */, - 1D841FE4C37F5EC231941F77 /* Pods-Runner.release.xcconfig */, - 7FE24439FAAD244AC8DBEDCA /* Pods-Runner.profile.xcconfig */, - 55A8F5B8D3CC97EB458EC9B3 /* Pods-RunnerTests.debug.xcconfig */, - 8D89798C3848C6C513D55F6C /* Pods-RunnerTests.release.xcconfig */, - 2B90EDD96DA7CD62A13E62BC /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 9F17ED10509476A4CE87A422 /* [CP] Check Pods Manifest.lock */, + 43635CDE8835859F5B5A334F /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 5F6F40F571AB458D9F29F8D6 /* Frameworks */, + FFDFB7A91DA3CC3FB7D3ED28 /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 91FDA4365200BC61D568A91D /* [CP] Check Pods Manifest.lock */, + 4EBAC9F11BC6A2553D3C2EB3 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 3F4D379EC3EDE85F5F9D07BE /* [CP] Embed Pods Frameworks */, + 6E4DA2AD8C24FEE355BEA43C /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -286,24 +286,29 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 3F4D379EC3EDE85F5F9D07BE /* [CP] Embed Pods Frameworks */ = { + 43635CDE8835859F5B5A334F /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 91FDA4365200BC61D568A91D /* [CP] Check Pods Manifest.lock */ = { + 4EBAC9F11BC6A2553D3C2EB3 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -325,42 +330,37 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { + 6E4DA2AD8C24FEE355BEA43C /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputPaths = ( + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "Run Script"; - outputPaths = ( + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; }; - 9F17ED10509476A4CE87A422 /* [CP] Check Pods Manifest.lock */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( ); + name = "Run Script"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; /* End PBXShellScriptBuildPhase section */ @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 55A8F5B8D3CC97EB458EC9B3 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = A8B84461C0AE17B571F25210 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 8D89798C3848C6C513D55F6C /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 36F8C04D2EB0411ADA50D258 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 2B90EDD96DA7CD62A13E62BC /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 760EB38BCE7B373982137EFF /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/ffigen_codelab/step_05/example/linux/CMakeLists.txt b/ffigen_codelab/step_05/example/linux/CMakeLists.txt index e6a7756343..0225fd0ac0 100644 --- a/ffigen_codelab/step_05/example/linux/CMakeLists.txt +++ b/ffigen_codelab/step_05/example/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/ffigen_codelab/step_05/example/linux/runner/CMakeLists.txt b/ffigen_codelab/step_05/example/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/ffigen_codelab/step_05/example/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/ffigen_codelab/step_05/example/linux/main.cc b/ffigen_codelab/step_05/example/linux/runner/main.cc similarity index 100% rename from ffigen_codelab/step_05/example/linux/main.cc rename to ffigen_codelab/step_05/example/linux/runner/main.cc diff --git a/ffigen_codelab/step_05/example/linux/my_application.cc b/ffigen_codelab/step_05/example/linux/runner/my_application.cc similarity index 93% rename from ffigen_codelab/step_05/example/linux/my_application.cc rename to ffigen_codelab/step_05/example/linux/runner/my_application.cc index dda095336c..6233c3a531 100644 --- a/ffigen_codelab/step_05/example/linux/my_application.cc +++ b/ffigen_codelab/step_05/example/linux/runner/my_application.cc @@ -117,6 +117,12 @@ static void my_application_class_init(MyApplicationClass* klass) { static void my_application_init(MyApplication* self) {} MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + return MY_APPLICATION(g_object_new(my_application_get_type(), "application-id", APPLICATION_ID, "flags", G_APPLICATION_NON_UNIQUE, diff --git a/ffigen_codelab/step_05/example/linux/my_application.h b/ffigen_codelab/step_05/example/linux/runner/my_application.h similarity index 100% rename from ffigen_codelab/step_05/example/linux/my_application.h rename to ffigen_codelab/step_05/example/linux/runner/my_application.h diff --git a/ffigen_codelab/step_05/example/macos/Runner.xcodeproj/project.pbxproj b/ffigen_codelab/step_05/example/macos/Runner.xcodeproj/project.pbxproj index 2b6323e38b..ffdf71b13a 100644 --- a/ffigen_codelab/step_05/example/macos/Runner.xcodeproj/project.pbxproj +++ b/ffigen_codelab/step_05/example/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ - 0611C0E62E9F07BE97FC36E2 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4BD43A0C849673AF89382BBE /* Pods_Runner.framework */; }; + 191C21C9FABD3637223435E3 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CD122BD18D351DED3CBE9C58 /* Pods_RunnerTests.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - CDACCF779212F3BBFA2F9E89 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 97B02168A592270015629E0A /* Pods_RunnerTests.framework */; }; + 9F7DDDDB746990659C5E51CC /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ED7316D326168056B8E0BF61 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,7 +62,7 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 206132BF754C0D4876C94C27 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 1C0042885A741B0FCD9A30E4 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -79,15 +79,15 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 3B1F431398FF4DC3ED6497B7 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - 43F214F402E1FF88ED50AC83 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 4BD43A0C849673AF89382BBE /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - 97B02168A592270015629E0A /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - A4B361DEECFE5D3D5D8AA4BE /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - D5B7C7E43D49BE26544629FB /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - E7A9C277D1F0C1E18BB07934 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 9AEB332B62E5753B98290AE7 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 9BC21DE994A16B5895E402FF /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + C7A4F7E292E04215221DA70F /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + CD122BD18D351DED3CBE9C58 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D50CDFE9011082D8765687C9 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + ED7316D326168056B8E0BF61 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + FC60D21C0DD8E928760CF13E /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - CDACCF779212F3BBFA2F9E89 /* Pods_RunnerTests.framework in Frameworks */, + 191C21C9FABD3637223435E3 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,27 +103,13 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 0611C0E62E9F07BE97FC36E2 /* Pods_Runner.framework in Frameworks */, + 9F7DDDDB746990659C5E51CC /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 12882181BD91BF46813F99B0 /* Pods */ = { - isa = PBXGroup; - children = ( - 206132BF754C0D4876C94C27 /* Pods-Runner.debug.xcconfig */, - 43F214F402E1FF88ED50AC83 /* Pods-Runner.release.xcconfig */, - E7A9C277D1F0C1E18BB07934 /* Pods-Runner.profile.xcconfig */, - A4B361DEECFE5D3D5D8AA4BE /* Pods-RunnerTests.debug.xcconfig */, - 3B1F431398FF4DC3ED6497B7 /* Pods-RunnerTests.release.xcconfig */, - D5B7C7E43D49BE26544629FB /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; 331C80D6294CF71000263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -151,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 12882181BD91BF46813F99B0 /* Pods */, + 80FDF5788B7AFEFFF6BCF906 /* Pods */, ); sourceTree = ""; }; @@ -199,11 +185,25 @@ path = Runner; sourceTree = ""; }; + 80FDF5788B7AFEFFF6BCF906 /* Pods */ = { + isa = PBXGroup; + children = ( + 9AEB332B62E5753B98290AE7 /* Pods-Runner.debug.xcconfig */, + C7A4F7E292E04215221DA70F /* Pods-Runner.release.xcconfig */, + 1C0042885A741B0FCD9A30E4 /* Pods-Runner.profile.xcconfig */, + FC60D21C0DD8E928760CF13E /* Pods-RunnerTests.debug.xcconfig */, + D50CDFE9011082D8765687C9 /* Pods-RunnerTests.release.xcconfig */, + 9BC21DE994A16B5895E402FF /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - 4BD43A0C849673AF89382BBE /* Pods_Runner.framework */, - 97B02168A592270015629E0A /* Pods_RunnerTests.framework */, + ED7316D326168056B8E0BF61 /* Pods_Runner.framework */, + CD122BD18D351DED3CBE9C58 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - AA2D9882E2111CB8B951164B /* [CP] Check Pods Manifest.lock */, + 424F806F1791245CCBFE4273 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 06D46A080576FE55FACAE021 /* [CP] Check Pods Manifest.lock */, + 2C449A7997ED00E74DA5AF4B /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 444198964BE797FE755EC229 /* [CP] Embed Pods Frameworks */, + 6A093E120D2D7152871422C7 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,7 +323,7 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 06D46A080576FE55FACAE021 /* [CP] Check Pods Manifest.lock */ = { + 2C449A7997ED00E74DA5AF4B /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -383,43 +383,43 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 444198964BE797FE755EC229 /* [CP] Embed Pods Frameworks */ = { + 424F806F1791245CCBFE4273 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - AA2D9882E2111CB8B951164B /* [CP] Check Pods Manifest.lock */ = { + 6A093E120D2D7152871422C7 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = A4B361DEECFE5D3D5D8AA4BE /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = FC60D21C0DD8E928760CF13E /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 3B1F431398FF4DC3ED6497B7 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = D50CDFE9011082D8765687C9 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = D5B7C7E43D49BE26544629FB /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 9BC21DE994A16B5895E402FF /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/ffigen_codelab/step_05/example/macos/Runner/AppDelegate.swift b/ffigen_codelab/step_05/example/macos/Runner/AppDelegate.swift index 8e02df2888..b3c1761412 100644 --- a/ffigen_codelab/step_05/example/macos/Runner/AppDelegate.swift +++ b/ffigen_codelab/step_05/example/macos/Runner/AppDelegate.swift @@ -6,4 +6,8 @@ class AppDelegate: FlutterAppDelegate { override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { return true } + + override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { + return true + } } diff --git a/ffigen_codelab/step_05/example/pubspec.yaml b/ffigen_codelab/step_05/example/pubspec.yaml index 3398ed703c..806a8504d7 100644 --- a/ffigen_codelab/step_05/example/pubspec.yaml +++ b/ffigen_codelab/step_05/example/pubspec.yaml @@ -52,7 +52,7 @@ dev_dependencies: # activated in the `analysis_options.yaml` file located at the root of your # package. See that file for information about deactivating specific lint # rules and activating additional ones. - flutter_lints: ^4.0.0 + flutter_lints: ^5.0.0 # For information on the generic Dart part of this file, see the # following page: https://dart.dev/tools/pub/pubspec diff --git a/ffigen_codelab/step_05/macos/ffigen_app.podspec b/ffigen_codelab/step_05/macos/ffigen_app.podspec index b03ff8d4d8..507dd0a9d3 100644 --- a/ffigen_codelab/step_05/macos/ffigen_app.podspec +++ b/ffigen_codelab/step_05/macos/ffigen_app.podspec @@ -19,6 +19,13 @@ A new Flutter FFI plugin project. # `../src/*` so that the C sources can be shared among all target platforms. s.source = { :path => '.' } s.source_files = 'Classes/**/*' + + # If your plugin requires a privacy manifest, for example if it collects user + # data, update the PrivacyInfo.xcprivacy file to describe your plugin's + # privacy impact, and then uncomment this line. For more information, + # see https://developer.apple.com/documentation/bundleresources/privacy_manifest_files + # s.resource_bundles = {'ffigen_app_privacy' => ['Resources/PrivacyInfo.xcprivacy']} + s.dependency 'FlutterMacOS' s.platform = :osx, '10.11' diff --git a/ffigen_codelab/step_05/pubspec.yaml b/ffigen_codelab/step_05/pubspec.yaml index 03c4abf21a..267c1b71f3 100644 --- a/ffigen_codelab/step_05/pubspec.yaml +++ b/ffigen_codelab/step_05/pubspec.yaml @@ -14,10 +14,10 @@ dependencies: plugin_platform_interface: ^2.0.2 dev_dependencies: - ffigen: ^13.0.0 + ffigen: ^14.0.1 flutter_test: sdk: flutter - flutter_lints: ^4.0.0 + flutter_lints: ^5.0.0 # For information on the generic Dart part of this file, see the # following page: https://dart.dev/tools/pub/pubspec diff --git a/ffigen_codelab/step_05/src/CMakeLists.txt b/ffigen_codelab/step_05/src/CMakeLists.txt index db7f672be6..176008e445 100644 --- a/ffigen_codelab/step_05/src/CMakeLists.txt +++ b/ffigen_codelab/step_05/src/CMakeLists.txt @@ -22,3 +22,8 @@ set_target_properties(ffigen_app PROPERTIES endif (WIN32) target_compile_definitions(ffigen_app PUBLIC DART_SHARED_LIB) + +if (ANDROID) + # Support Android 15 16k page size + target_link_options(ffigen_app PRIVATE "-Wl,-z,max-page-size=16384") +endif() diff --git a/ffigen_codelab/step_06/.gitignore b/ffigen_codelab/step_06/.gitignore index ac5aa9893e..e7d347d9d3 100644 --- a/ffigen_codelab/step_06/.gitignore +++ b/ffigen_codelab/step_06/.gitignore @@ -5,9 +5,11 @@ *.swp .DS_Store .atom/ +.build/ .buildlog/ .history .svn/ +.swiftpm/ migrate_working_dir/ # IntelliJ related @@ -26,4 +28,6 @@ migrate_working_dir/ /pubspec.lock **/doc/api/ .dart_tool/ +.flutter-plugins +.flutter-plugins-dependencies build/ diff --git a/ffigen_codelab/step_06/android/build.gradle b/ffigen_codelab/step_06/android/build.gradle index 16a1825537..5681b7125e 100644 --- a/ffigen_codelab/step_06/android/build.gradle +++ b/ffigen_codelab/step_06/android/build.gradle @@ -11,7 +11,7 @@ buildscript { dependencies { // The Android Gradle Plugin knows how to build native code with the NDK. - classpath("com.android.tools.build:gradle:7.3.0") + classpath("com.android.tools.build:gradle:8.1.0") } } @@ -25,13 +25,11 @@ rootProject.allprojects { apply plugin: "com.android.library" android { - if (project.android.hasProperty("namespace")) { - namespace = "com.example.ffigen_app" - } + namespace = "com.example.ffigen_app" // Bumping the plugin compileSdk version requires all clients of this plugin // to bump the version in their app. - compileSdk = 34 + compileSdk = 35 // Use the NDK version // declared in /android/app/build.gradle file of the Flutter project. @@ -55,8 +53,8 @@ android { } compileOptions { - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 + sourceCompatibility = JavaVersion.VERSION_11 + targetCompatibility = JavaVersion.VERSION_11 } defaultConfig { diff --git a/ffigen_codelab/step_06/example/.gitignore b/ffigen_codelab/step_06/example/.gitignore index 29a3a5017f..79c113f9b5 100644 --- a/ffigen_codelab/step_06/example/.gitignore +++ b/ffigen_codelab/step_06/example/.gitignore @@ -5,9 +5,11 @@ *.swp .DS_Store .atom/ +.build/ .buildlog/ .history .svn/ +.swiftpm/ migrate_working_dir/ # IntelliJ related diff --git a/ffigen_codelab/step_06/example/android/gradle.properties b/ffigen_codelab/step_06/example/android/gradle.properties index 2597170821..f018a61817 100644 --- a/ffigen_codelab/step_06/example/android/gradle.properties +++ b/ffigen_codelab/step_06/example/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/ffigen_codelab/step_06/example/android/gradle/wrapper/gradle-wrapper.properties b/ffigen_codelab/step_06/example/android/gradle/wrapper/gradle-wrapper.properties index e1ca574ef0..7bb2df6ba6 100644 --- a/ffigen_codelab/step_06/example/android/gradle/wrapper/gradle-wrapper.properties +++ b/ffigen_codelab/step_06/example/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip diff --git a/ffigen_codelab/step_06/example/android/settings.gradle b/ffigen_codelab/step_06/example/android/settings.gradle index 536165d35a..b9e43bd376 100644 --- a/ffigen_codelab/step_06/example/android/settings.gradle +++ b/ffigen_codelab/step_06/example/android/settings.gradle @@ -18,8 +18,8 @@ pluginManagement { plugins { id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "7.3.0" apply false - id "org.jetbrains.kotlin.android" version "1.7.10" apply false + id "com.android.application" version "8.1.0" apply false + id "org.jetbrains.kotlin.android" version "1.8.22" apply false } include ":app" diff --git a/ffigen_codelab/step_06/example/ios/Runner.xcodeproj/project.pbxproj b/ffigen_codelab/step_06/example/ios/Runner.xcodeproj/project.pbxproj index 4604462fa2..addb2d9d27 100644 --- a/ffigen_codelab/step_06/example/ios/Runner.xcodeproj/project.pbxproj +++ b/ffigen_codelab/step_06/example/ios/Runner.xcodeproj/project.pbxproj @@ -7,7 +7,6 @@ objects = { /* Begin PBXBuildFile section */ - 0DEC01485F3DCF73B30EDBC9 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8D58493F2CA75B7FBCFB3223 /* Pods_Runner.framework */; }; 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; @@ -15,7 +14,8 @@ 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - C061F61A4A060906BB85D6B0 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1007B9A9A0C57F51F1397C5A /* Pods_RunnerTests.framework */; }; + E877D048132D3B7EB5F82226 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C2F2CEAC6F6A0C9CB9EDDDFA /* Pods_Runner.framework */; }; + F84DA7186408FE37502DC307 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1F81C7A96749BCF879B4AA0E /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,22 +42,19 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 1007B9A9A0C57F51F1397C5A /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 17A4766EEED294992EDF39EE /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 1D841FE4C37F5EC231941F77 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 2B90EDD96DA7CD62A13E62BC /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 1F81C7A96749BCF879B4AA0E /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 36F8C04D2EB0411ADA50D258 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 55A8F5B8D3CC97EB458EC9B3 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 3BFA581CCCE704FFCB699F0D /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 4A9018625F52C60DD2AB19A4 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 760EB38BCE7B373982137EFF /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 7FE24439FAAD244AC8DBEDCA /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - 8D58493F2CA75B7FBCFB3223 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 8D89798C3848C6C513D55F6C /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -65,22 +62,25 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + A8B84461C0AE17B571F25210 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + B899FC964E4D721CBCF8B32A /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + C2F2CEAC6F6A0C9CB9EDDDFA /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 5F6F40F571AB458D9F29F8D6 /* Frameworks */ = { + 97C146EB1CF9000F007C117D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - C061F61A4A060906BB85D6B0 /* Pods_RunnerTests.framework in Frameworks */, + E877D048132D3B7EB5F82226 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 97C146EB1CF9000F007C117D /* Frameworks */ = { + FFDFB7A91DA3CC3FB7D3ED28 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 0DEC01485F3DCF73B30EDBC9 /* Pods_Runner.framework in Frameworks */, + F84DA7186408FE37502DC307 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -95,11 +95,11 @@ path = RunnerTests; sourceTree = ""; }; - 61D4B3EB81252FE0FF3C81EE /* Frameworks */ = { + 7765C30B327B729707FF946C /* Frameworks */ = { isa = PBXGroup; children = ( - 8D58493F2CA75B7FBCFB3223 /* Pods_Runner.framework */, - 1007B9A9A0C57F51F1397C5A /* Pods_RunnerTests.framework */, + C2F2CEAC6F6A0C9CB9EDDDFA /* Pods_Runner.framework */, + 1F81C7A96749BCF879B4AA0E /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -115,6 +115,20 @@ name = Flutter; sourceTree = ""; }; + 979C260ADDD4EF8BE0C2FB07 /* Pods */ = { + isa = PBXGroup; + children = ( + 3BFA581CCCE704FFCB699F0D /* Pods-Runner.debug.xcconfig */, + B899FC964E4D721CBCF8B32A /* Pods-Runner.release.xcconfig */, + 4A9018625F52C60DD2AB19A4 /* Pods-Runner.profile.xcconfig */, + A8B84461C0AE17B571F25210 /* Pods-RunnerTests.debug.xcconfig */, + 36F8C04D2EB0411ADA50D258 /* Pods-RunnerTests.release.xcconfig */, + 760EB38BCE7B373982137EFF /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; 97C146E51CF9000F007C117D = { isa = PBXGroup; children = ( @@ -122,8 +136,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - E849079E5A297CEDF29184DD /* Pods */, - 61D4B3EB81252FE0FF3C81EE /* Frameworks */, + 979C260ADDD4EF8BE0C2FB07 /* Pods */, + 7765C30B327B729707FF946C /* Frameworks */, ); sourceTree = ""; }; @@ -151,20 +165,6 @@ path = Runner; sourceTree = ""; }; - E849079E5A297CEDF29184DD /* Pods */ = { - isa = PBXGroup; - children = ( - 17A4766EEED294992EDF39EE /* Pods-Runner.debug.xcconfig */, - 1D841FE4C37F5EC231941F77 /* Pods-Runner.release.xcconfig */, - 7FE24439FAAD244AC8DBEDCA /* Pods-Runner.profile.xcconfig */, - 55A8F5B8D3CC97EB458EC9B3 /* Pods-RunnerTests.debug.xcconfig */, - 8D89798C3848C6C513D55F6C /* Pods-RunnerTests.release.xcconfig */, - 2B90EDD96DA7CD62A13E62BC /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 9F17ED10509476A4CE87A422 /* [CP] Check Pods Manifest.lock */, + 43635CDE8835859F5B5A334F /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 5F6F40F571AB458D9F29F8D6 /* Frameworks */, + FFDFB7A91DA3CC3FB7D3ED28 /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 91FDA4365200BC61D568A91D /* [CP] Check Pods Manifest.lock */, + 4EBAC9F11BC6A2553D3C2EB3 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 3F4D379EC3EDE85F5F9D07BE /* [CP] Embed Pods Frameworks */, + 6E4DA2AD8C24FEE355BEA43C /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -286,24 +286,29 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 3F4D379EC3EDE85F5F9D07BE /* [CP] Embed Pods Frameworks */ = { + 43635CDE8835859F5B5A334F /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 91FDA4365200BC61D568A91D /* [CP] Check Pods Manifest.lock */ = { + 4EBAC9F11BC6A2553D3C2EB3 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -325,42 +330,37 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { + 6E4DA2AD8C24FEE355BEA43C /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputPaths = ( + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "Run Script"; - outputPaths = ( + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; }; - 9F17ED10509476A4CE87A422 /* [CP] Check Pods Manifest.lock */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( ); + name = "Run Script"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; /* End PBXShellScriptBuildPhase section */ @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 55A8F5B8D3CC97EB458EC9B3 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = A8B84461C0AE17B571F25210 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 8D89798C3848C6C513D55F6C /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 36F8C04D2EB0411ADA50D258 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 2B90EDD96DA7CD62A13E62BC /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 760EB38BCE7B373982137EFF /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/ffigen_codelab/step_06/example/linux/CMakeLists.txt b/ffigen_codelab/step_06/example/linux/CMakeLists.txt index e6a7756343..0225fd0ac0 100644 --- a/ffigen_codelab/step_06/example/linux/CMakeLists.txt +++ b/ffigen_codelab/step_06/example/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/ffigen_codelab/step_06/example/linux/runner/CMakeLists.txt b/ffigen_codelab/step_06/example/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/ffigen_codelab/step_06/example/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/ffigen_codelab/step_06/example/linux/main.cc b/ffigen_codelab/step_06/example/linux/runner/main.cc similarity index 100% rename from ffigen_codelab/step_06/example/linux/main.cc rename to ffigen_codelab/step_06/example/linux/runner/main.cc diff --git a/ffigen_codelab/step_06/example/linux/my_application.cc b/ffigen_codelab/step_06/example/linux/runner/my_application.cc similarity index 93% rename from ffigen_codelab/step_06/example/linux/my_application.cc rename to ffigen_codelab/step_06/example/linux/runner/my_application.cc index dda095336c..6233c3a531 100644 --- a/ffigen_codelab/step_06/example/linux/my_application.cc +++ b/ffigen_codelab/step_06/example/linux/runner/my_application.cc @@ -117,6 +117,12 @@ static void my_application_class_init(MyApplicationClass* klass) { static void my_application_init(MyApplication* self) {} MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + return MY_APPLICATION(g_object_new(my_application_get_type(), "application-id", APPLICATION_ID, "flags", G_APPLICATION_NON_UNIQUE, diff --git a/ffigen_codelab/step_06/example/linux/my_application.h b/ffigen_codelab/step_06/example/linux/runner/my_application.h similarity index 100% rename from ffigen_codelab/step_06/example/linux/my_application.h rename to ffigen_codelab/step_06/example/linux/runner/my_application.h diff --git a/ffigen_codelab/step_06/example/macos/Runner.xcodeproj/project.pbxproj b/ffigen_codelab/step_06/example/macos/Runner.xcodeproj/project.pbxproj index 2b6323e38b..ffdf71b13a 100644 --- a/ffigen_codelab/step_06/example/macos/Runner.xcodeproj/project.pbxproj +++ b/ffigen_codelab/step_06/example/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ - 0611C0E62E9F07BE97FC36E2 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4BD43A0C849673AF89382BBE /* Pods_Runner.framework */; }; + 191C21C9FABD3637223435E3 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CD122BD18D351DED3CBE9C58 /* Pods_RunnerTests.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - CDACCF779212F3BBFA2F9E89 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 97B02168A592270015629E0A /* Pods_RunnerTests.framework */; }; + 9F7DDDDB746990659C5E51CC /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ED7316D326168056B8E0BF61 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,7 +62,7 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 206132BF754C0D4876C94C27 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 1C0042885A741B0FCD9A30E4 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -79,15 +79,15 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 3B1F431398FF4DC3ED6497B7 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - 43F214F402E1FF88ED50AC83 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 4BD43A0C849673AF89382BBE /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - 97B02168A592270015629E0A /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - A4B361DEECFE5D3D5D8AA4BE /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - D5B7C7E43D49BE26544629FB /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - E7A9C277D1F0C1E18BB07934 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 9AEB332B62E5753B98290AE7 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 9BC21DE994A16B5895E402FF /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + C7A4F7E292E04215221DA70F /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + CD122BD18D351DED3CBE9C58 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D50CDFE9011082D8765687C9 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + ED7316D326168056B8E0BF61 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + FC60D21C0DD8E928760CF13E /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - CDACCF779212F3BBFA2F9E89 /* Pods_RunnerTests.framework in Frameworks */, + 191C21C9FABD3637223435E3 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,27 +103,13 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 0611C0E62E9F07BE97FC36E2 /* Pods_Runner.framework in Frameworks */, + 9F7DDDDB746990659C5E51CC /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 12882181BD91BF46813F99B0 /* Pods */ = { - isa = PBXGroup; - children = ( - 206132BF754C0D4876C94C27 /* Pods-Runner.debug.xcconfig */, - 43F214F402E1FF88ED50AC83 /* Pods-Runner.release.xcconfig */, - E7A9C277D1F0C1E18BB07934 /* Pods-Runner.profile.xcconfig */, - A4B361DEECFE5D3D5D8AA4BE /* Pods-RunnerTests.debug.xcconfig */, - 3B1F431398FF4DC3ED6497B7 /* Pods-RunnerTests.release.xcconfig */, - D5B7C7E43D49BE26544629FB /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; 331C80D6294CF71000263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -151,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 12882181BD91BF46813F99B0 /* Pods */, + 80FDF5788B7AFEFFF6BCF906 /* Pods */, ); sourceTree = ""; }; @@ -199,11 +185,25 @@ path = Runner; sourceTree = ""; }; + 80FDF5788B7AFEFFF6BCF906 /* Pods */ = { + isa = PBXGroup; + children = ( + 9AEB332B62E5753B98290AE7 /* Pods-Runner.debug.xcconfig */, + C7A4F7E292E04215221DA70F /* Pods-Runner.release.xcconfig */, + 1C0042885A741B0FCD9A30E4 /* Pods-Runner.profile.xcconfig */, + FC60D21C0DD8E928760CF13E /* Pods-RunnerTests.debug.xcconfig */, + D50CDFE9011082D8765687C9 /* Pods-RunnerTests.release.xcconfig */, + 9BC21DE994A16B5895E402FF /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - 4BD43A0C849673AF89382BBE /* Pods_Runner.framework */, - 97B02168A592270015629E0A /* Pods_RunnerTests.framework */, + ED7316D326168056B8E0BF61 /* Pods_Runner.framework */, + CD122BD18D351DED3CBE9C58 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - AA2D9882E2111CB8B951164B /* [CP] Check Pods Manifest.lock */, + 424F806F1791245CCBFE4273 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 06D46A080576FE55FACAE021 /* [CP] Check Pods Manifest.lock */, + 2C449A7997ED00E74DA5AF4B /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 444198964BE797FE755EC229 /* [CP] Embed Pods Frameworks */, + 6A093E120D2D7152871422C7 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,7 +323,7 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 06D46A080576FE55FACAE021 /* [CP] Check Pods Manifest.lock */ = { + 2C449A7997ED00E74DA5AF4B /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -383,43 +383,43 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 444198964BE797FE755EC229 /* [CP] Embed Pods Frameworks */ = { + 424F806F1791245CCBFE4273 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - AA2D9882E2111CB8B951164B /* [CP] Check Pods Manifest.lock */ = { + 6A093E120D2D7152871422C7 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = A4B361DEECFE5D3D5D8AA4BE /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = FC60D21C0DD8E928760CF13E /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 3B1F431398FF4DC3ED6497B7 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = D50CDFE9011082D8765687C9 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = D5B7C7E43D49BE26544629FB /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 9BC21DE994A16B5895E402FF /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/ffigen_codelab/step_06/example/macos/Runner/AppDelegate.swift b/ffigen_codelab/step_06/example/macos/Runner/AppDelegate.swift index 8e02df2888..b3c1761412 100644 --- a/ffigen_codelab/step_06/example/macos/Runner/AppDelegate.swift +++ b/ffigen_codelab/step_06/example/macos/Runner/AppDelegate.swift @@ -6,4 +6,8 @@ class AppDelegate: FlutterAppDelegate { override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { return true } + + override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { + return true + } } diff --git a/ffigen_codelab/step_06/example/pubspec.yaml b/ffigen_codelab/step_06/example/pubspec.yaml index 3398ed703c..806a8504d7 100644 --- a/ffigen_codelab/step_06/example/pubspec.yaml +++ b/ffigen_codelab/step_06/example/pubspec.yaml @@ -52,7 +52,7 @@ dev_dependencies: # activated in the `analysis_options.yaml` file located at the root of your # package. See that file for information about deactivating specific lint # rules and activating additional ones. - flutter_lints: ^4.0.0 + flutter_lints: ^5.0.0 # For information on the generic Dart part of this file, see the # following page: https://dart.dev/tools/pub/pubspec diff --git a/ffigen_codelab/step_06/macos/ffigen_app.podspec b/ffigen_codelab/step_06/macos/ffigen_app.podspec index b03ff8d4d8..507dd0a9d3 100644 --- a/ffigen_codelab/step_06/macos/ffigen_app.podspec +++ b/ffigen_codelab/step_06/macos/ffigen_app.podspec @@ -19,6 +19,13 @@ A new Flutter FFI plugin project. # `../src/*` so that the C sources can be shared among all target platforms. s.source = { :path => '.' } s.source_files = 'Classes/**/*' + + # If your plugin requires a privacy manifest, for example if it collects user + # data, update the PrivacyInfo.xcprivacy file to describe your plugin's + # privacy impact, and then uncomment this line. For more information, + # see https://developer.apple.com/documentation/bundleresources/privacy_manifest_files + # s.resource_bundles = {'ffigen_app_privacy' => ['Resources/PrivacyInfo.xcprivacy']} + s.dependency 'FlutterMacOS' s.platform = :osx, '10.11' diff --git a/ffigen_codelab/step_06/pubspec.yaml b/ffigen_codelab/step_06/pubspec.yaml index 03c4abf21a..267c1b71f3 100644 --- a/ffigen_codelab/step_06/pubspec.yaml +++ b/ffigen_codelab/step_06/pubspec.yaml @@ -14,10 +14,10 @@ dependencies: plugin_platform_interface: ^2.0.2 dev_dependencies: - ffigen: ^13.0.0 + ffigen: ^14.0.1 flutter_test: sdk: flutter - flutter_lints: ^4.0.0 + flutter_lints: ^5.0.0 # For information on the generic Dart part of this file, see the # following page: https://dart.dev/tools/pub/pubspec diff --git a/ffigen_codelab/step_06/src/CMakeLists.txt b/ffigen_codelab/step_06/src/CMakeLists.txt index db7f672be6..176008e445 100644 --- a/ffigen_codelab/step_06/src/CMakeLists.txt +++ b/ffigen_codelab/step_06/src/CMakeLists.txt @@ -22,3 +22,8 @@ set_target_properties(ffigen_app PROPERTIES endif (WIN32) target_compile_definitions(ffigen_app PUBLIC DART_SHARED_LIB) + +if (ANDROID) + # Support Android 15 16k page size + target_link_options(ffigen_app PRIVATE "-Wl,-z,max-page-size=16384") +endif() diff --git a/ffigen_codelab/step_07/.gitignore b/ffigen_codelab/step_07/.gitignore index ac5aa9893e..e7d347d9d3 100644 --- a/ffigen_codelab/step_07/.gitignore +++ b/ffigen_codelab/step_07/.gitignore @@ -5,9 +5,11 @@ *.swp .DS_Store .atom/ +.build/ .buildlog/ .history .svn/ +.swiftpm/ migrate_working_dir/ # IntelliJ related @@ -26,4 +28,6 @@ migrate_working_dir/ /pubspec.lock **/doc/api/ .dart_tool/ +.flutter-plugins +.flutter-plugins-dependencies build/ diff --git a/ffigen_codelab/step_07/android/build.gradle b/ffigen_codelab/step_07/android/build.gradle index 16a1825537..5681b7125e 100644 --- a/ffigen_codelab/step_07/android/build.gradle +++ b/ffigen_codelab/step_07/android/build.gradle @@ -11,7 +11,7 @@ buildscript { dependencies { // The Android Gradle Plugin knows how to build native code with the NDK. - classpath("com.android.tools.build:gradle:7.3.0") + classpath("com.android.tools.build:gradle:8.1.0") } } @@ -25,13 +25,11 @@ rootProject.allprojects { apply plugin: "com.android.library" android { - if (project.android.hasProperty("namespace")) { - namespace = "com.example.ffigen_app" - } + namespace = "com.example.ffigen_app" // Bumping the plugin compileSdk version requires all clients of this plugin // to bump the version in their app. - compileSdk = 34 + compileSdk = 35 // Use the NDK version // declared in /android/app/build.gradle file of the Flutter project. @@ -55,8 +53,8 @@ android { } compileOptions { - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 + sourceCompatibility = JavaVersion.VERSION_11 + targetCompatibility = JavaVersion.VERSION_11 } defaultConfig { diff --git a/ffigen_codelab/step_07/example/.gitignore b/ffigen_codelab/step_07/example/.gitignore index 29a3a5017f..79c113f9b5 100644 --- a/ffigen_codelab/step_07/example/.gitignore +++ b/ffigen_codelab/step_07/example/.gitignore @@ -5,9 +5,11 @@ *.swp .DS_Store .atom/ +.build/ .buildlog/ .history .svn/ +.swiftpm/ migrate_working_dir/ # IntelliJ related diff --git a/ffigen_codelab/step_07/example/android/gradle.properties b/ffigen_codelab/step_07/example/android/gradle.properties index 2597170821..f018a61817 100644 --- a/ffigen_codelab/step_07/example/android/gradle.properties +++ b/ffigen_codelab/step_07/example/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/ffigen_codelab/step_07/example/android/gradle/wrapper/gradle-wrapper.properties b/ffigen_codelab/step_07/example/android/gradle/wrapper/gradle-wrapper.properties index e1ca574ef0..7bb2df6ba6 100644 --- a/ffigen_codelab/step_07/example/android/gradle/wrapper/gradle-wrapper.properties +++ b/ffigen_codelab/step_07/example/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip diff --git a/ffigen_codelab/step_07/example/android/settings.gradle b/ffigen_codelab/step_07/example/android/settings.gradle index 536165d35a..b9e43bd376 100644 --- a/ffigen_codelab/step_07/example/android/settings.gradle +++ b/ffigen_codelab/step_07/example/android/settings.gradle @@ -18,8 +18,8 @@ pluginManagement { plugins { id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "7.3.0" apply false - id "org.jetbrains.kotlin.android" version "1.7.10" apply false + id "com.android.application" version "8.1.0" apply false + id "org.jetbrains.kotlin.android" version "1.8.22" apply false } include ":app" diff --git a/ffigen_codelab/step_07/example/ios/Runner.xcodeproj/project.pbxproj b/ffigen_codelab/step_07/example/ios/Runner.xcodeproj/project.pbxproj index 4604462fa2..addb2d9d27 100644 --- a/ffigen_codelab/step_07/example/ios/Runner.xcodeproj/project.pbxproj +++ b/ffigen_codelab/step_07/example/ios/Runner.xcodeproj/project.pbxproj @@ -7,7 +7,6 @@ objects = { /* Begin PBXBuildFile section */ - 0DEC01485F3DCF73B30EDBC9 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8D58493F2CA75B7FBCFB3223 /* Pods_Runner.framework */; }; 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; @@ -15,7 +14,8 @@ 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - C061F61A4A060906BB85D6B0 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1007B9A9A0C57F51F1397C5A /* Pods_RunnerTests.framework */; }; + E877D048132D3B7EB5F82226 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C2F2CEAC6F6A0C9CB9EDDDFA /* Pods_Runner.framework */; }; + F84DA7186408FE37502DC307 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1F81C7A96749BCF879B4AA0E /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,22 +42,19 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 1007B9A9A0C57F51F1397C5A /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 17A4766EEED294992EDF39EE /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 1D841FE4C37F5EC231941F77 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 2B90EDD96DA7CD62A13E62BC /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 1F81C7A96749BCF879B4AA0E /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 36F8C04D2EB0411ADA50D258 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 55A8F5B8D3CC97EB458EC9B3 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 3BFA581CCCE704FFCB699F0D /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 4A9018625F52C60DD2AB19A4 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 760EB38BCE7B373982137EFF /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 7FE24439FAAD244AC8DBEDCA /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - 8D58493F2CA75B7FBCFB3223 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 8D89798C3848C6C513D55F6C /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -65,22 +62,25 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + A8B84461C0AE17B571F25210 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + B899FC964E4D721CBCF8B32A /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + C2F2CEAC6F6A0C9CB9EDDDFA /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 5F6F40F571AB458D9F29F8D6 /* Frameworks */ = { + 97C146EB1CF9000F007C117D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - C061F61A4A060906BB85D6B0 /* Pods_RunnerTests.framework in Frameworks */, + E877D048132D3B7EB5F82226 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 97C146EB1CF9000F007C117D /* Frameworks */ = { + FFDFB7A91DA3CC3FB7D3ED28 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 0DEC01485F3DCF73B30EDBC9 /* Pods_Runner.framework in Frameworks */, + F84DA7186408FE37502DC307 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -95,11 +95,11 @@ path = RunnerTests; sourceTree = ""; }; - 61D4B3EB81252FE0FF3C81EE /* Frameworks */ = { + 7765C30B327B729707FF946C /* Frameworks */ = { isa = PBXGroup; children = ( - 8D58493F2CA75B7FBCFB3223 /* Pods_Runner.framework */, - 1007B9A9A0C57F51F1397C5A /* Pods_RunnerTests.framework */, + C2F2CEAC6F6A0C9CB9EDDDFA /* Pods_Runner.framework */, + 1F81C7A96749BCF879B4AA0E /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -115,6 +115,20 @@ name = Flutter; sourceTree = ""; }; + 979C260ADDD4EF8BE0C2FB07 /* Pods */ = { + isa = PBXGroup; + children = ( + 3BFA581CCCE704FFCB699F0D /* Pods-Runner.debug.xcconfig */, + B899FC964E4D721CBCF8B32A /* Pods-Runner.release.xcconfig */, + 4A9018625F52C60DD2AB19A4 /* Pods-Runner.profile.xcconfig */, + A8B84461C0AE17B571F25210 /* Pods-RunnerTests.debug.xcconfig */, + 36F8C04D2EB0411ADA50D258 /* Pods-RunnerTests.release.xcconfig */, + 760EB38BCE7B373982137EFF /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; 97C146E51CF9000F007C117D = { isa = PBXGroup; children = ( @@ -122,8 +136,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - E849079E5A297CEDF29184DD /* Pods */, - 61D4B3EB81252FE0FF3C81EE /* Frameworks */, + 979C260ADDD4EF8BE0C2FB07 /* Pods */, + 7765C30B327B729707FF946C /* Frameworks */, ); sourceTree = ""; }; @@ -151,20 +165,6 @@ path = Runner; sourceTree = ""; }; - E849079E5A297CEDF29184DD /* Pods */ = { - isa = PBXGroup; - children = ( - 17A4766EEED294992EDF39EE /* Pods-Runner.debug.xcconfig */, - 1D841FE4C37F5EC231941F77 /* Pods-Runner.release.xcconfig */, - 7FE24439FAAD244AC8DBEDCA /* Pods-Runner.profile.xcconfig */, - 55A8F5B8D3CC97EB458EC9B3 /* Pods-RunnerTests.debug.xcconfig */, - 8D89798C3848C6C513D55F6C /* Pods-RunnerTests.release.xcconfig */, - 2B90EDD96DA7CD62A13E62BC /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 9F17ED10509476A4CE87A422 /* [CP] Check Pods Manifest.lock */, + 43635CDE8835859F5B5A334F /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 5F6F40F571AB458D9F29F8D6 /* Frameworks */, + FFDFB7A91DA3CC3FB7D3ED28 /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 91FDA4365200BC61D568A91D /* [CP] Check Pods Manifest.lock */, + 4EBAC9F11BC6A2553D3C2EB3 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 3F4D379EC3EDE85F5F9D07BE /* [CP] Embed Pods Frameworks */, + 6E4DA2AD8C24FEE355BEA43C /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -286,24 +286,29 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 3F4D379EC3EDE85F5F9D07BE /* [CP] Embed Pods Frameworks */ = { + 43635CDE8835859F5B5A334F /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 91FDA4365200BC61D568A91D /* [CP] Check Pods Manifest.lock */ = { + 4EBAC9F11BC6A2553D3C2EB3 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -325,42 +330,37 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { + 6E4DA2AD8C24FEE355BEA43C /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputPaths = ( + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "Run Script"; - outputPaths = ( + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; }; - 9F17ED10509476A4CE87A422 /* [CP] Check Pods Manifest.lock */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( ); + name = "Run Script"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; /* End PBXShellScriptBuildPhase section */ @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 55A8F5B8D3CC97EB458EC9B3 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = A8B84461C0AE17B571F25210 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 8D89798C3848C6C513D55F6C /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 36F8C04D2EB0411ADA50D258 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 2B90EDD96DA7CD62A13E62BC /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 760EB38BCE7B373982137EFF /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/ffigen_codelab/step_07/example/linux/CMakeLists.txt b/ffigen_codelab/step_07/example/linux/CMakeLists.txt index e6a7756343..0225fd0ac0 100644 --- a/ffigen_codelab/step_07/example/linux/CMakeLists.txt +++ b/ffigen_codelab/step_07/example/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/ffigen_codelab/step_07/example/linux/runner/CMakeLists.txt b/ffigen_codelab/step_07/example/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/ffigen_codelab/step_07/example/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/ffigen_codelab/step_07/example/linux/main.cc b/ffigen_codelab/step_07/example/linux/runner/main.cc similarity index 100% rename from ffigen_codelab/step_07/example/linux/main.cc rename to ffigen_codelab/step_07/example/linux/runner/main.cc diff --git a/ffigen_codelab/step_07/example/linux/my_application.cc b/ffigen_codelab/step_07/example/linux/runner/my_application.cc similarity index 93% rename from ffigen_codelab/step_07/example/linux/my_application.cc rename to ffigen_codelab/step_07/example/linux/runner/my_application.cc index dda095336c..6233c3a531 100644 --- a/ffigen_codelab/step_07/example/linux/my_application.cc +++ b/ffigen_codelab/step_07/example/linux/runner/my_application.cc @@ -117,6 +117,12 @@ static void my_application_class_init(MyApplicationClass* klass) { static void my_application_init(MyApplication* self) {} MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + return MY_APPLICATION(g_object_new(my_application_get_type(), "application-id", APPLICATION_ID, "flags", G_APPLICATION_NON_UNIQUE, diff --git a/ffigen_codelab/step_07/example/linux/my_application.h b/ffigen_codelab/step_07/example/linux/runner/my_application.h similarity index 100% rename from ffigen_codelab/step_07/example/linux/my_application.h rename to ffigen_codelab/step_07/example/linux/runner/my_application.h diff --git a/ffigen_codelab/step_07/example/macos/Runner.xcodeproj/project.pbxproj b/ffigen_codelab/step_07/example/macos/Runner.xcodeproj/project.pbxproj index 2b6323e38b..ffdf71b13a 100644 --- a/ffigen_codelab/step_07/example/macos/Runner.xcodeproj/project.pbxproj +++ b/ffigen_codelab/step_07/example/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ - 0611C0E62E9F07BE97FC36E2 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4BD43A0C849673AF89382BBE /* Pods_Runner.framework */; }; + 191C21C9FABD3637223435E3 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CD122BD18D351DED3CBE9C58 /* Pods_RunnerTests.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - CDACCF779212F3BBFA2F9E89 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 97B02168A592270015629E0A /* Pods_RunnerTests.framework */; }; + 9F7DDDDB746990659C5E51CC /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ED7316D326168056B8E0BF61 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,7 +62,7 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 206132BF754C0D4876C94C27 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 1C0042885A741B0FCD9A30E4 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -79,15 +79,15 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 3B1F431398FF4DC3ED6497B7 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - 43F214F402E1FF88ED50AC83 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 4BD43A0C849673AF89382BBE /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - 97B02168A592270015629E0A /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - A4B361DEECFE5D3D5D8AA4BE /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - D5B7C7E43D49BE26544629FB /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - E7A9C277D1F0C1E18BB07934 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 9AEB332B62E5753B98290AE7 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 9BC21DE994A16B5895E402FF /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + C7A4F7E292E04215221DA70F /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + CD122BD18D351DED3CBE9C58 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D50CDFE9011082D8765687C9 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + ED7316D326168056B8E0BF61 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + FC60D21C0DD8E928760CF13E /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - CDACCF779212F3BBFA2F9E89 /* Pods_RunnerTests.framework in Frameworks */, + 191C21C9FABD3637223435E3 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,27 +103,13 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 0611C0E62E9F07BE97FC36E2 /* Pods_Runner.framework in Frameworks */, + 9F7DDDDB746990659C5E51CC /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 12882181BD91BF46813F99B0 /* Pods */ = { - isa = PBXGroup; - children = ( - 206132BF754C0D4876C94C27 /* Pods-Runner.debug.xcconfig */, - 43F214F402E1FF88ED50AC83 /* Pods-Runner.release.xcconfig */, - E7A9C277D1F0C1E18BB07934 /* Pods-Runner.profile.xcconfig */, - A4B361DEECFE5D3D5D8AA4BE /* Pods-RunnerTests.debug.xcconfig */, - 3B1F431398FF4DC3ED6497B7 /* Pods-RunnerTests.release.xcconfig */, - D5B7C7E43D49BE26544629FB /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; 331C80D6294CF71000263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -151,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 12882181BD91BF46813F99B0 /* Pods */, + 80FDF5788B7AFEFFF6BCF906 /* Pods */, ); sourceTree = ""; }; @@ -199,11 +185,25 @@ path = Runner; sourceTree = ""; }; + 80FDF5788B7AFEFFF6BCF906 /* Pods */ = { + isa = PBXGroup; + children = ( + 9AEB332B62E5753B98290AE7 /* Pods-Runner.debug.xcconfig */, + C7A4F7E292E04215221DA70F /* Pods-Runner.release.xcconfig */, + 1C0042885A741B0FCD9A30E4 /* Pods-Runner.profile.xcconfig */, + FC60D21C0DD8E928760CF13E /* Pods-RunnerTests.debug.xcconfig */, + D50CDFE9011082D8765687C9 /* Pods-RunnerTests.release.xcconfig */, + 9BC21DE994A16B5895E402FF /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - 4BD43A0C849673AF89382BBE /* Pods_Runner.framework */, - 97B02168A592270015629E0A /* Pods_RunnerTests.framework */, + ED7316D326168056B8E0BF61 /* Pods_Runner.framework */, + CD122BD18D351DED3CBE9C58 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - AA2D9882E2111CB8B951164B /* [CP] Check Pods Manifest.lock */, + 424F806F1791245CCBFE4273 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 06D46A080576FE55FACAE021 /* [CP] Check Pods Manifest.lock */, + 2C449A7997ED00E74DA5AF4B /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 444198964BE797FE755EC229 /* [CP] Embed Pods Frameworks */, + 6A093E120D2D7152871422C7 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,7 +323,7 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 06D46A080576FE55FACAE021 /* [CP] Check Pods Manifest.lock */ = { + 2C449A7997ED00E74DA5AF4B /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -383,43 +383,43 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 444198964BE797FE755EC229 /* [CP] Embed Pods Frameworks */ = { + 424F806F1791245CCBFE4273 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - AA2D9882E2111CB8B951164B /* [CP] Check Pods Manifest.lock */ = { + 6A093E120D2D7152871422C7 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = A4B361DEECFE5D3D5D8AA4BE /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = FC60D21C0DD8E928760CF13E /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 3B1F431398FF4DC3ED6497B7 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = D50CDFE9011082D8765687C9 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = D5B7C7E43D49BE26544629FB /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 9BC21DE994A16B5895E402FF /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/ffigen_codelab/step_07/example/macos/Runner/AppDelegate.swift b/ffigen_codelab/step_07/example/macos/Runner/AppDelegate.swift index 8e02df2888..b3c1761412 100644 --- a/ffigen_codelab/step_07/example/macos/Runner/AppDelegate.swift +++ b/ffigen_codelab/step_07/example/macos/Runner/AppDelegate.swift @@ -6,4 +6,8 @@ class AppDelegate: FlutterAppDelegate { override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { return true } + + override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { + return true + } } diff --git a/ffigen_codelab/step_07/example/pubspec.yaml b/ffigen_codelab/step_07/example/pubspec.yaml index 3e2ff90083..36eedf32d0 100644 --- a/ffigen_codelab/step_07/example/pubspec.yaml +++ b/ffigen_codelab/step_07/example/pubspec.yaml @@ -42,7 +42,7 @@ dependencies: # The following adds the Cupertino Icons font to your application. # Use with the CupertinoIcons class for iOS style icons. cupertino_icons: ^1.0.8 - flutter_riverpod: ^2.5.1 + flutter_riverpod: ^2.5.3 freezed_annotation: ^2.4.4 google_fonts: ^6.2.1 @@ -55,8 +55,8 @@ dev_dependencies: # activated in the `analysis_options.yaml` file located at the root of your # package. See that file for information about deactivating specific lint # rules and activating additional ones. - flutter_lints: ^4.0.0 - build_runner: ^2.4.12 + flutter_lints: ^5.0.0 + build_runner: ^2.4.13 freezed: ^2.5.7 # For information on the generic Dart part of this file, see the diff --git a/ffigen_codelab/step_07/macos/ffigen_app.podspec b/ffigen_codelab/step_07/macos/ffigen_app.podspec index b03ff8d4d8..507dd0a9d3 100644 --- a/ffigen_codelab/step_07/macos/ffigen_app.podspec +++ b/ffigen_codelab/step_07/macos/ffigen_app.podspec @@ -19,6 +19,13 @@ A new Flutter FFI plugin project. # `../src/*` so that the C sources can be shared among all target platforms. s.source = { :path => '.' } s.source_files = 'Classes/**/*' + + # If your plugin requires a privacy manifest, for example if it collects user + # data, update the PrivacyInfo.xcprivacy file to describe your plugin's + # privacy impact, and then uncomment this line. For more information, + # see https://developer.apple.com/documentation/bundleresources/privacy_manifest_files + # s.resource_bundles = {'ffigen_app_privacy' => ['Resources/PrivacyInfo.xcprivacy']} + s.dependency 'FlutterMacOS' s.platform = :osx, '10.11' diff --git a/ffigen_codelab/step_07/pubspec.yaml b/ffigen_codelab/step_07/pubspec.yaml index 13ae9289bc..70c23336f1 100644 --- a/ffigen_codelab/step_07/pubspec.yaml +++ b/ffigen_codelab/step_07/pubspec.yaml @@ -15,10 +15,10 @@ dependencies: plugin_platform_interface: ^2.0.2 dev_dependencies: - ffigen: ^13.0.0 + ffigen: ^14.0.1 flutter_test: sdk: flutter - flutter_lints: ^4.0.0 + flutter_lints: ^5.0.0 # For information on the generic Dart part of this file, see the # following page: https://dart.dev/tools/pub/pubspec diff --git a/ffigen_codelab/step_07/src/CMakeLists.txt b/ffigen_codelab/step_07/src/CMakeLists.txt index db7f672be6..176008e445 100644 --- a/ffigen_codelab/step_07/src/CMakeLists.txt +++ b/ffigen_codelab/step_07/src/CMakeLists.txt @@ -22,3 +22,8 @@ set_target_properties(ffigen_app PROPERTIES endif (WIN32) target_compile_definitions(ffigen_app PUBLIC DART_SHARED_LIB) + +if (ANDROID) + # Support Android 15 16k page size + target_link_options(ffigen_app PRIVATE "-Wl,-z,max-page-size=16384") +endif() From 10a2a7551ec8f4aa096ee31c3925d7d6d9c20dba Mon Sep 17 00:00:00 2001 From: Brett Morgan Date: Mon, 14 Oct 2024 16:12:01 +1100 Subject: [PATCH 008/108] Update `firebase-emulator-suite` --- firebase-emulator-suite/complete/.gitignore | 2 ++ .../complete/android/gradle.properties | 2 +- .../android/gradle/wrapper/gradle-wrapper.properties | 2 +- .../complete/android/settings.gradle | 4 ++-- .../complete/macos/Runner/AppDelegate.swift | 4 ++++ firebase-emulator-suite/complete/pubspec.yaml | 11 +++++------ firebase-emulator-suite/complete/web/index.html | 2 +- firebase-emulator-suite/start/.gitignore | 2 ++ .../start/android/gradle.properties | 2 +- .../android/gradle/wrapper/gradle-wrapper.properties | 2 +- firebase-emulator-suite/start/android/settings.gradle | 4 ++-- .../start/macos/Runner/AppDelegate.swift | 4 ++++ firebase-emulator-suite/start/pubspec.yaml | 5 ++--- firebase-emulator-suite/start/web/index.html | 2 +- 14 files changed, 29 insertions(+), 19 deletions(-) diff --git a/firebase-emulator-suite/complete/.gitignore b/firebase-emulator-suite/complete/.gitignore index 29a3a5017f..79c113f9b5 100644 --- a/firebase-emulator-suite/complete/.gitignore +++ b/firebase-emulator-suite/complete/.gitignore @@ -5,9 +5,11 @@ *.swp .DS_Store .atom/ +.build/ .buildlog/ .history .svn/ +.swiftpm/ migrate_working_dir/ # IntelliJ related diff --git a/firebase-emulator-suite/complete/android/gradle.properties b/firebase-emulator-suite/complete/android/gradle.properties index 2597170821..f018a61817 100644 --- a/firebase-emulator-suite/complete/android/gradle.properties +++ b/firebase-emulator-suite/complete/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/firebase-emulator-suite/complete/android/gradle/wrapper/gradle-wrapper.properties b/firebase-emulator-suite/complete/android/gradle/wrapper/gradle-wrapper.properties index e1ca574ef0..7bb2df6ba6 100644 --- a/firebase-emulator-suite/complete/android/gradle/wrapper/gradle-wrapper.properties +++ b/firebase-emulator-suite/complete/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip diff --git a/firebase-emulator-suite/complete/android/settings.gradle b/firebase-emulator-suite/complete/android/settings.gradle index 536165d35a..b9e43bd376 100644 --- a/firebase-emulator-suite/complete/android/settings.gradle +++ b/firebase-emulator-suite/complete/android/settings.gradle @@ -18,8 +18,8 @@ pluginManagement { plugins { id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "7.3.0" apply false - id "org.jetbrains.kotlin.android" version "1.7.10" apply false + id "com.android.application" version "8.1.0" apply false + id "org.jetbrains.kotlin.android" version "1.8.22" apply false } include ":app" diff --git a/firebase-emulator-suite/complete/macos/Runner/AppDelegate.swift b/firebase-emulator-suite/complete/macos/Runner/AppDelegate.swift index 8e02df2888..b3c1761412 100644 --- a/firebase-emulator-suite/complete/macos/Runner/AppDelegate.swift +++ b/firebase-emulator-suite/complete/macos/Runner/AppDelegate.swift @@ -6,4 +6,8 @@ class AppDelegate: FlutterAppDelegate { override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { return true } + + override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { + return true + } } diff --git a/firebase-emulator-suite/complete/pubspec.yaml b/firebase-emulator-suite/complete/pubspec.yaml index 960732d593..7c014933f8 100644 --- a/firebase-emulator-suite/complete/pubspec.yaml +++ b/firebase-emulator-suite/complete/pubspec.yaml @@ -31,14 +31,13 @@ dependencies: flutter: sdk: flutter - # The following adds the Cupertino Icons font to your application. # Use with the CupertinoIcons class for iOS style icons. cupertino_icons: ^1.0.8 - go_router: ^14.2.7 - firebase_core: ^3.4.0 - firebase_auth: ^5.2.0 - cloud_firestore: ^5.3.0 + go_router: ^14.3.0 + firebase_core: ^3.6.0 + firebase_auth: ^5.3.1 + cloud_firestore: ^5.4.4 dev_dependencies: flutter_test: @@ -49,7 +48,7 @@ dev_dependencies: # activated in the `analysis_options.yaml` file located at the root of your # package. See that file for information about deactivating specific lint # rules and activating additional ones. - flutter_lints: ^4.0.0 + flutter_lints: ^5.0.0 # For information on the generic Dart part of this file, see the # following page: https://dart.dev/tools/pub/pubspec diff --git a/firebase-emulator-suite/complete/web/index.html b/firebase-emulator-suite/complete/web/index.html index 628701a38a..4a9befb647 100644 --- a/firebase-emulator-suite/complete/web/index.html +++ b/firebase-emulator-suite/complete/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/firebase-emulator-suite/start/.gitignore b/firebase-emulator-suite/start/.gitignore index 29a3a5017f..79c113f9b5 100644 --- a/firebase-emulator-suite/start/.gitignore +++ b/firebase-emulator-suite/start/.gitignore @@ -5,9 +5,11 @@ *.swp .DS_Store .atom/ +.build/ .buildlog/ .history .svn/ +.swiftpm/ migrate_working_dir/ # IntelliJ related diff --git a/firebase-emulator-suite/start/android/gradle.properties b/firebase-emulator-suite/start/android/gradle.properties index 2597170821..f018a61817 100644 --- a/firebase-emulator-suite/start/android/gradle.properties +++ b/firebase-emulator-suite/start/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/firebase-emulator-suite/start/android/gradle/wrapper/gradle-wrapper.properties b/firebase-emulator-suite/start/android/gradle/wrapper/gradle-wrapper.properties index e1ca574ef0..7bb2df6ba6 100644 --- a/firebase-emulator-suite/start/android/gradle/wrapper/gradle-wrapper.properties +++ b/firebase-emulator-suite/start/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip diff --git a/firebase-emulator-suite/start/android/settings.gradle b/firebase-emulator-suite/start/android/settings.gradle index 536165d35a..b9e43bd376 100644 --- a/firebase-emulator-suite/start/android/settings.gradle +++ b/firebase-emulator-suite/start/android/settings.gradle @@ -18,8 +18,8 @@ pluginManagement { plugins { id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "7.3.0" apply false - id "org.jetbrains.kotlin.android" version "1.7.10" apply false + id "com.android.application" version "8.1.0" apply false + id "org.jetbrains.kotlin.android" version "1.8.22" apply false } include ":app" diff --git a/firebase-emulator-suite/start/macos/Runner/AppDelegate.swift b/firebase-emulator-suite/start/macos/Runner/AppDelegate.swift index 8e02df2888..b3c1761412 100644 --- a/firebase-emulator-suite/start/macos/Runner/AppDelegate.swift +++ b/firebase-emulator-suite/start/macos/Runner/AppDelegate.swift @@ -6,4 +6,8 @@ class AppDelegate: FlutterAppDelegate { override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { return true } + + override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { + return true + } } diff --git a/firebase-emulator-suite/start/pubspec.yaml b/firebase-emulator-suite/start/pubspec.yaml index a3aa7a461c..3d8214e88e 100644 --- a/firebase-emulator-suite/start/pubspec.yaml +++ b/firebase-emulator-suite/start/pubspec.yaml @@ -31,11 +31,10 @@ dependencies: flutter: sdk: flutter - # The following adds the Cupertino Icons font to your application. # Use with the CupertinoIcons class for iOS style icons. cupertino_icons: ^1.0.8 - go_router: ^14.2.7 + go_router: ^14.3.0 dev_dependencies: flutter_test: @@ -46,7 +45,7 @@ dev_dependencies: # activated in the `analysis_options.yaml` file located at the root of your # package. See that file for information about deactivating specific lint # rules and activating additional ones. - flutter_lints: ^4.0.0 + flutter_lints: ^5.0.0 # For information on the generic Dart part of this file, see the # following page: https://dart.dev/tools/pub/pubspec diff --git a/firebase-emulator-suite/start/web/index.html b/firebase-emulator-suite/start/web/index.html index 628701a38a..4a9befb647 100644 --- a/firebase-emulator-suite/start/web/index.html +++ b/firebase-emulator-suite/start/web/index.html @@ -21,7 +21,7 @@ - + From 30465fcda825d92f035b170194ad035d01730bf3 Mon Sep 17 00:00:00 2001 From: Brett Morgan Date: Tue, 15 Oct 2024 17:07:38 +1100 Subject: [PATCH 009/108] Update `firebase-get-to-know-flutter` --- .../codelab_rebuild.yaml | 64 +++++-- .../step_02/.gitignore | 2 + .../step_02/android/app/build.gradle | 2 +- .../step_02/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../step_02/android/settings.gradle | 4 +- .../step_02/ios/Podfile | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 164 +++++++++--------- .../step_02/macos/Podfile | 2 +- .../macos/Runner.xcodeproj/project.pbxproj | 105 +---------- .../contents.xcworkspacedata | 3 - .../step_02/macos/Runner/AppDelegate.swift | 4 + .../step_02/pubspec.yaml | 5 +- .../step_02/web/index.html | 2 +- .../step_04/.gitignore | 2 + .../step_04/android/app/build.gradle | 2 +- .../step_04/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../step_04/android/settings.gradle | 4 +- .../step_04/ios/Podfile | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 164 +++++++++--------- .../step_04/macos/Podfile | 2 +- .../macos/Runner.xcodeproj/project.pbxproj | 85 +++++---- .../step_04/macos/Runner/AppDelegate.swift | 4 + .../step_04/pubspec.yaml | 13 +- .../step_04/web/index.html | 2 +- .../step_05/.gitignore | 2 + .../step_05/android/app/build.gradle | 2 +- .../step_05/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../step_05/android/settings.gradle | 4 +- .../step_05/ios/Podfile | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 164 +++++++++--------- .../step_05/macos/Podfile | 2 +- .../macos/Runner.xcodeproj/project.pbxproj | 85 +++++---- .../step_05/macos/Runner/AppDelegate.swift | 4 + .../step_05/pubspec.yaml | 13 +- .../step_05/web/index.html | 2 +- .../step_06/.gitignore | 2 + .../step_06/android/app/build.gradle | 2 +- .../step_06/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../step_06/android/settings.gradle | 4 +- .../step_06/ios/Podfile | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 164 +++++++++--------- .../step_06/macos/Podfile | 2 +- .../macos/Runner.xcodeproj/project.pbxproj | 85 +++++---- .../step_06/macos/Runner/AppDelegate.swift | 4 + .../step_06/pubspec.yaml | 13 +- .../step_06/web/index.html | 2 +- .../step_07/.gitignore | 2 + .../step_07/android/app/build.gradle | 2 +- .../step_07/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../step_07/android/settings.gradle | 4 +- .../step_07/ios/Podfile | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 164 +++++++++--------- .../step_07/macos/Podfile | 2 +- .../macos/Runner.xcodeproj/project.pbxproj | 85 +++++---- .../step_07/macos/Runner/AppDelegate.swift | 4 + .../step_07/pubspec.yaml | 13 +- .../step_07/web/index.html | 2 +- .../step_09/.gitignore | 2 + .../step_09/android/app/build.gradle | 2 +- .../step_09/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../step_09/android/settings.gradle | 4 +- .../step_09/ios/Podfile | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 164 +++++++++--------- .../step_09/macos/Podfile | 2 +- .../macos/Runner.xcodeproj/project.pbxproj | 85 +++++---- .../step_09/macos/Runner/AppDelegate.swift | 4 + .../step_09/pubspec.yaml | 13 +- .../step_09/web/index.html | 2 +- .../codelab_rebuild/lib/src/blueprint.dart | 26 ++- .../codelab_rebuild/lib/src/blueprint.g.dart | 12 +- .../lib/src/rebuild_blueprint.dart | 48 ++++- tooling/codelab_rebuild/pubspec.yaml | 5 +- .../test/load_config_test.dart | 24 +++ 79 files changed, 1025 insertions(+), 873 deletions(-) diff --git a/firebase-get-to-know-flutter/codelab_rebuild.yaml b/firebase-get-to-know-flutter/codelab_rebuild.yaml index 97859b2230..ce660acc5e 100644 --- a/firebase-get-to-know-flutter/codelab_rebuild.yaml +++ b/firebase-get-to-know-flutter/codelab_rebuild.yaml @@ -32,7 +32,7 @@ steps: # The following line prevents the package from being accidentally published to # pub.dev using `flutter pub publish`. This is preferred for private packages. publish_to: 'none' # Remove this line if you wish to publish to pub.dev - @@ -59,6 +60,8 @@ flutter: + @@ -58,6 +59,8 @@ flutter: # included with your application, so that you can use the icons in # the material Icons class. uses-material-design: true @@ -51,10 +51,39 @@ steps: // You can update the following values to match your application needs. // For more information, see: https://flutter.dev/to/review-gradle-config. - minSdk = flutter.minSdkVersion - + minSdk = 21 + + minSdk = 23 targetSdk = flutter.targetSdkVersion versionCode = flutter.versionCode versionName = flutter.versionName + - name: Patch macos/Podfile + path: gtk_flutter/macos/Podfile + patch-u: | + --- b/gtk_flutter/step_02/macos/Podfile + +++ a/gtk_flutter/step_02/macos/Podfile + @@ -1,4 +1,4 @@ + -platform :osx, '10.14' + +platform :osx, '10.15' + + # CocoaPods analytics sends network stats synchronously affecting flutter build latency. + ENV['COCOAPODS_DISABLE_STATS'] = 'true' + - name: Patch macos/Runner.xcodeproj/project.pbxproj + xcode-project-path: gtk_flutter/macos/Runner.xcodeproj + macosx-deployment-target: '10.15' + - name: Patch ios/Podfile + path: gtk_flutter/ios/Podfile + patch-u: | + --- a/firebase-get-to-know-flutter/step_02/ios/Podfile + +++ b/firebase-get-to-know-flutter/step_02/ios/Podfile + @@ -1,5 +1,5 @@ + # Uncomment this line to define a global platform for your project + -# platform :ios, '12.0' + +platform :ios, '13.0' + + # CocoaPods analytics sends network stats synchronously affecting flutter build latency. + ENV['COCOAPODS_DISABLE_STATS'] = 'true' + - name: Patch ios/Runner.xcodeproj/project.pbxproj + xcode-project-path: gtk_flutter/ios/Runner.xcodeproj + iphoneos-deployment-target: '13.0' - name: Remove the README.md rm: gtk_flutter/README.md - name: VSCode config @@ -1670,10 +1699,11 @@ steps: platforms: [ macos ] path: gtk_flutter flutter: build apk - - name: Build for macOS - platforms: [ macos ] - path: gtk_flutter - flutter: build macos --debug + # TODO: Re-enable once macOS Firebase configuration builds + # - name: Build for macOS + # platforms: [ macos ] + # path: gtk_flutter + # flutter: build macos --debug - name: Copy step_02 copydir: from: gtk_flutter @@ -1787,6 +1817,19 @@ steps: - name: Add cloud_firestore firebase_auth firebase_core provider firebase_ui_auth path: gtk_flutter flutter: pub add cloud_firestore firebase_auth firebase_core provider firebase_ui_auth + - name: Build for iOS + platforms: [ macos ] + path: gtk_flutter + flutter: build ios --debug --simulator + - name: Build for Android + platforms: [ macos ] + path: gtk_flutter + flutter: build apk + # TODO: Re-enable once macOS Firebase configuration builds + # - name: Build for macOS + # platforms: [ macos ] + # path: gtk_flutter + # flutter: build macos --debug - name: Copy step_04 copydir: from: gtk_flutter @@ -2791,10 +2834,11 @@ steps: platforms: [ macos ] path: gtk_flutter flutter: build apk - - name: Build for macOS - platforms: [ macos ] - path: gtk_flutter - flutter: build macos --debug + # TODO: Re-enable once macOS Firebase configuration builds + # - name: Build for macOS + # platforms: [ macos ] + # path: gtk_flutter + # flutter: build macos --debug - name: Build for iOS platforms: [ macos ] path: gtk_flutter diff --git a/firebase-get-to-know-flutter/step_02/.gitignore b/firebase-get-to-know-flutter/step_02/.gitignore index 29a3a5017f..79c113f9b5 100644 --- a/firebase-get-to-know-flutter/step_02/.gitignore +++ b/firebase-get-to-know-flutter/step_02/.gitignore @@ -5,9 +5,11 @@ *.swp .DS_Store .atom/ +.build/ .buildlog/ .history .svn/ +.swiftpm/ migrate_working_dir/ # IntelliJ related diff --git a/firebase-get-to-know-flutter/step_02/android/app/build.gradle b/firebase-get-to-know-flutter/step_02/android/app/build.gradle index 8f860b1041..ad5859ad24 100644 --- a/firebase-get-to-know-flutter/step_02/android/app/build.gradle +++ b/firebase-get-to-know-flutter/step_02/android/app/build.gradle @@ -24,7 +24,7 @@ android { applicationId = "com.example.gtk_flutter" // You can update the following values to match your application needs. // For more information, see: https://flutter.dev/to/review-gradle-config. - minSdk = 21 + minSdk = 23 targetSdk = flutter.targetSdkVersion versionCode = flutter.versionCode versionName = flutter.versionName diff --git a/firebase-get-to-know-flutter/step_02/android/gradle.properties b/firebase-get-to-know-flutter/step_02/android/gradle.properties index 2597170821..f018a61817 100644 --- a/firebase-get-to-know-flutter/step_02/android/gradle.properties +++ b/firebase-get-to-know-flutter/step_02/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/firebase-get-to-know-flutter/step_02/android/gradle/wrapper/gradle-wrapper.properties b/firebase-get-to-know-flutter/step_02/android/gradle/wrapper/gradle-wrapper.properties index e1ca574ef0..7bb2df6ba6 100644 --- a/firebase-get-to-know-flutter/step_02/android/gradle/wrapper/gradle-wrapper.properties +++ b/firebase-get-to-know-flutter/step_02/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip diff --git a/firebase-get-to-know-flutter/step_02/android/settings.gradle b/firebase-get-to-know-flutter/step_02/android/settings.gradle index 536165d35a..b9e43bd376 100644 --- a/firebase-get-to-know-flutter/step_02/android/settings.gradle +++ b/firebase-get-to-know-flutter/step_02/android/settings.gradle @@ -18,8 +18,8 @@ pluginManagement { plugins { id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "7.3.0" apply false - id "org.jetbrains.kotlin.android" version "1.7.10" apply false + id "com.android.application" version "8.1.0" apply false + id "org.jetbrains.kotlin.android" version "1.8.22" apply false } include ":app" diff --git a/firebase-get-to-know-flutter/step_02/ios/Podfile b/firebase-get-to-know-flutter/step_02/ios/Podfile index d97f17e223..3e44f9c6f7 100644 --- a/firebase-get-to-know-flutter/step_02/ios/Podfile +++ b/firebase-get-to-know-flutter/step_02/ios/Podfile @@ -1,5 +1,5 @@ # Uncomment this line to define a global platform for your project -# platform :ios, '12.0' +platform :ios, '13.0' # CocoaPods analytics sends network stats synchronously affecting flutter build latency. ENV['COCOAPODS_DISABLE_STATS'] = 'true' diff --git a/firebase-get-to-know-flutter/step_02/ios/Runner.xcodeproj/project.pbxproj b/firebase-get-to-know-flutter/step_02/ios/Runner.xcodeproj/project.pbxproj index cff41d9a0e..1fec3b176b 100644 --- a/firebase-get-to-know-flutter/step_02/ios/Runner.xcodeproj/project.pbxproj +++ b/firebase-get-to-know-flutter/step_02/ios/Runner.xcodeproj/project.pbxproj @@ -10,12 +10,12 @@ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; + 48F92C47F6785B74B10426B6 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 67399F5529C4A8216833DD0F /* Pods_Runner.framework */; }; + 55A8A58D691856D8A8E2F81B /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 744A688AA80D90AEFEEE8B5D /* Pods_RunnerTests.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; - 8CD0E9720BD91BDBBD9340F6 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8886DF0EEBBAB07EE7638A22 /* Pods_RunnerTests.framework */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - C3D37E9D20867668255235F1 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B37AC028927CF85F4F1E6AF4 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,20 +42,20 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 11FB88AA8219013083C1A563 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 2C07D3E95C6ADEBD01A487A1 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 52B80850C4A9D6972C04E12A /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - 55189409B49D05C850A746FE /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 6D520546C7CA0758836AEB7B /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 41F4E541C0B0FF23D9DA5C04 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 67399F5529C4A8216833DD0F /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 744A688AA80D90AEFEEE8B5D /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 868E6B058CFC333D7D5B670A /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 8886DF0EEBBAB07EE7638A22 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 822914433177537C9D4A073F /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 8C22EFD2575ACEF2BA9301A3 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -63,8 +63,8 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - AA801BE035164BEDC59AEA5D /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - B37AC028927CF85F4F1E6AF4 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + A219FA1BA4AD7A0CCE184560 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + B37F3F7BA1352CC58F5B42CE /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -72,21 +72,35 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - C3D37E9D20867668255235F1 /* Pods_Runner.framework in Frameworks */, + 48F92C47F6785B74B10426B6 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - ECBEEC4513F2C1A27B9F9639 /* Frameworks */ = { + BA3F021047083BC8B18D3E0D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 8CD0E9720BD91BDBBD9340F6 /* Pods_RunnerTests.framework in Frameworks */, + 55A8A58D691856D8A8E2F81B /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 2686497132B27AC72C49AAEC /* Pods */ = { + isa = PBXGroup; + children = ( + B37F3F7BA1352CC58F5B42CE /* Pods-Runner.debug.xcconfig */, + 822914433177537C9D4A073F /* Pods-Runner.release.xcconfig */, + 8C22EFD2575ACEF2BA9301A3 /* Pods-Runner.profile.xcconfig */, + A219FA1BA4AD7A0CCE184560 /* Pods-RunnerTests.debug.xcconfig */, + 41F4E541C0B0FF23D9DA5C04 /* Pods-RunnerTests.release.xcconfig */, + 11FB88AA8219013083C1A563 /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; 331C8082294A63A400263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -95,6 +109,15 @@ path = RunnerTests; sourceTree = ""; }; + 561A1CA3EA2AB9F0AF534DA6 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 67399F5529C4A8216833DD0F /* Pods_Runner.framework */, + 744A688AA80D90AEFEEE8B5D /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( @@ -113,8 +136,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - B60295F6527672F63B9715A6 /* Pods */, - 98BD3EAB3093E15872776455 /* Frameworks */, + 2686497132B27AC72C49AAEC /* Pods */, + 561A1CA3EA2AB9F0AF534DA6 /* Frameworks */, ); sourceTree = ""; }; @@ -142,29 +165,6 @@ path = Runner; sourceTree = ""; }; - 98BD3EAB3093E15872776455 /* Frameworks */ = { - isa = PBXGroup; - children = ( - B37AC028927CF85F4F1E6AF4 /* Pods_Runner.framework */, - 8886DF0EEBBAB07EE7638A22 /* Pods_RunnerTests.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; - B60295F6527672F63B9715A6 /* Pods */ = { - isa = PBXGroup; - children = ( - 55189409B49D05C850A746FE /* Pods-Runner.debug.xcconfig */, - 868E6B058CFC333D7D5B670A /* Pods-Runner.release.xcconfig */, - AA801BE035164BEDC59AEA5D /* Pods-Runner.profile.xcconfig */, - 2C07D3E95C6ADEBD01A487A1 /* Pods-RunnerTests.debug.xcconfig */, - 52B80850C4A9D6972C04E12A /* Pods-RunnerTests.release.xcconfig */, - 6D520546C7CA0758836AEB7B /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 16081A976461F215B31F373D /* [CP] Check Pods Manifest.lock */, + A14A71C6D96CA2EED75B677B /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - ECBEEC4513F2C1A27B9F9639 /* Frameworks */, + BA3F021047083BC8B18D3E0D /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 32CCB81A5402B8B355886233 /* [CP] Check Pods Manifest.lock */, + FB86AE7D40B4243F86145360 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - F2DC197D00F362F12C2D5A6D /* [CP] Embed Pods Frameworks */, + 69881ECA2F74BD08FB925BC2 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -270,96 +270,96 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 16081A976461F215B31F373D /* [CP] Check Pods Manifest.lock */ = { + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); + name = "Thin Binary"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 32CCB81A5402B8B355886233 /* [CP] Check Pods Manifest.lock */ = { + 69881ECA2F74BD08FB925BC2 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputPaths = ( - "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); - name = "Thin Binary"; + name = "Run Script"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { + A14A71C6D96CA2EED75B677B /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "Run Script"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - F2DC197D00F362F12C2D5A6D /* [CP] Embed Pods Frameworks */ = { + FB86AE7D40B4243F86145360 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -473,6 +473,7 @@ CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; ENABLE_BITCODE = NO; INFOPLIST_FILE = Runner/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -487,12 +488,13 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 2C07D3E95C6ADEBD01A487A1 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = A219FA1BA4AD7A0CCE184560 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 1; GENERATE_INFOPLIST_FILE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; MARKETING_VERSION = 1.0; PRODUCT_BUNDLE_IDENTIFIER = com.example.gtkFlutter.RunnerTests; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -505,12 +507,13 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 52B80850C4A9D6972C04E12A /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 41F4E541C0B0FF23D9DA5C04 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 1; GENERATE_INFOPLIST_FILE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; MARKETING_VERSION = 1.0; PRODUCT_BUNDLE_IDENTIFIER = com.example.gtkFlutter.RunnerTests; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -521,12 +524,13 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 6D520546C7CA0758836AEB7B /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 11FB88AA8219013083C1A563 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 1; GENERATE_INFOPLIST_FILE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; MARKETING_VERSION = 1.0; PRODUCT_BUNDLE_IDENTIFIER = com.example.gtkFlutter.RunnerTests; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -655,6 +659,7 @@ CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; ENABLE_BITCODE = NO; INFOPLIST_FILE = Runner/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -677,6 +682,7 @@ CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; ENABLE_BITCODE = NO; INFOPLIST_FILE = Runner/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", diff --git a/firebase-get-to-know-flutter/step_02/macos/Podfile b/firebase-get-to-know-flutter/step_02/macos/Podfile index c795730db8..b52666a103 100644 --- a/firebase-get-to-know-flutter/step_02/macos/Podfile +++ b/firebase-get-to-know-flutter/step_02/macos/Podfile @@ -1,4 +1,4 @@ -platform :osx, '10.14' +platform :osx, '10.15' # CocoaPods analytics sends network stats synchronously affecting flutter build latency. ENV['COCOAPODS_DISABLE_STATS'] = 'true' diff --git a/firebase-get-to-know-flutter/step_02/macos/Runner.xcodeproj/project.pbxproj b/firebase-get-to-know-flutter/step_02/macos/Runner.xcodeproj/project.pbxproj index 24fdf06249..d5358edb24 100644 --- a/firebase-get-to-know-flutter/step_02/macos/Runner.xcodeproj/project.pbxproj +++ b/firebase-get-to-know-flutter/step_02/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,12 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ - 203193014212ECC97C8C922A /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 564568BF62B09CDA743E4EA4 /* Pods_Runner.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 4DC40AAF5EF27875E93C5045 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 99C02A2276E6E2D7CA6E538C /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,7 +60,6 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 25D676E7E62FC1C8B5A14D1D /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -79,15 +76,8 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 38BA081A8D3C41280A93431B /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - 3CA5C22CDCEC34F15537CF53 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 564568BF62B09CDA743E4EA4 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 8795A839324FE95A82F6F08C /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - 9047E4269D9A628EB4E508AF /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - 99C02A2276E6E2D7CA6E538C /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - ABEC84D092E3F21E5C186822 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +85,6 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 4DC40AAF5EF27875E93C5045 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,27 +92,12 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 203193014212ECC97C8C922A /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 0A1CC31397BD0156F52A8340 /* Pods */ = { - isa = PBXGroup; - children = ( - 25D676E7E62FC1C8B5A14D1D /* Pods-Runner.debug.xcconfig */, - 3CA5C22CDCEC34F15537CF53 /* Pods-Runner.release.xcconfig */, - ABEC84D092E3F21E5C186822 /* Pods-Runner.profile.xcconfig */, - 9047E4269D9A628EB4E508AF /* Pods-RunnerTests.debug.xcconfig */, - 8795A839324FE95A82F6F08C /* Pods-RunnerTests.release.xcconfig */, - 38BA081A8D3C41280A93431B /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; 331C80D6294CF71000263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -151,7 +125,6 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 0A1CC31397BD0156F52A8340 /* Pods */, ); sourceTree = ""; }; @@ -202,8 +175,6 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - 564568BF62B09CDA743E4EA4 /* Pods_Runner.framework */, - 99C02A2276E6E2D7CA6E538C /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +186,6 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - B9B47CC91AE302DCA3053624 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +204,11 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 0898364673EBCE98B3186893 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 4BB300EB47FADD99DADAF70B /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,28 +291,6 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 0898364673EBCE98B3186893 /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -383,45 +329,6 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 4BB300EB47FADD99DADAF70B /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; - B9B47CC91AE302DCA3053624 /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -473,11 +380,11 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 9047E4269D9A628EB4E508AF /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; GENERATE_INFOPLIST_FILE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.15; MARKETING_VERSION = 1.0; PRODUCT_BUNDLE_IDENTIFIER = com.example.gtkFlutter.RunnerTests; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -488,11 +395,11 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 8795A839324FE95A82F6F08C /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; GENERATE_INFOPLIST_FILE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.15; MARKETING_VERSION = 1.0; PRODUCT_BUNDLE_IDENTIFIER = com.example.gtkFlutter.RunnerTests; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -503,11 +410,11 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 38BA081A8D3C41280A93431B /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; GENERATE_INFOPLIST_FILE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.15; MARKETING_VERSION = 1.0; PRODUCT_BUNDLE_IDENTIFIER = com.example.gtkFlutter.RunnerTests; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -579,6 +486,7 @@ "$(inherited)", "@executable_path/../Frameworks", ); + MACOSX_DEPLOYMENT_TARGET = 10.15; PROVISIONING_PROFILE_SPECIFIER = ""; SWIFT_VERSION = 5.0; }; @@ -588,6 +496,7 @@ isa = XCBuildConfiguration; buildSettings = { CODE_SIGN_STYLE = Manual; + MACOSX_DEPLOYMENT_TARGET = 10.15; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Profile; @@ -711,6 +620,7 @@ "$(inherited)", "@executable_path/../Frameworks", ); + MACOSX_DEPLOYMENT_TARGET = 10.15; PROVISIONING_PROFILE_SPECIFIER = ""; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 5.0; @@ -731,6 +641,7 @@ "$(inherited)", "@executable_path/../Frameworks", ); + MACOSX_DEPLOYMENT_TARGET = 10.15; PROVISIONING_PROFILE_SPECIFIER = ""; SWIFT_VERSION = 5.0; }; @@ -740,6 +651,7 @@ isa = XCBuildConfiguration; buildSettings = { CODE_SIGN_STYLE = Manual; + MACOSX_DEPLOYMENT_TARGET = 10.15; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; @@ -748,6 +660,7 @@ isa = XCBuildConfiguration; buildSettings = { CODE_SIGN_STYLE = Automatic; + MACOSX_DEPLOYMENT_TARGET = 10.15; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; diff --git a/firebase-get-to-know-flutter/step_02/macos/Runner.xcworkspace/contents.xcworkspacedata b/firebase-get-to-know-flutter/step_02/macos/Runner.xcworkspace/contents.xcworkspacedata index 21a3cc14c7..1d526a16ed 100644 --- a/firebase-get-to-know-flutter/step_02/macos/Runner.xcworkspace/contents.xcworkspacedata +++ b/firebase-get-to-know-flutter/step_02/macos/Runner.xcworkspace/contents.xcworkspacedata @@ -4,7 +4,4 @@ - - diff --git a/firebase-get-to-know-flutter/step_02/macos/Runner/AppDelegate.swift b/firebase-get-to-know-flutter/step_02/macos/Runner/AppDelegate.swift index 8e02df2888..b3c1761412 100644 --- a/firebase-get-to-know-flutter/step_02/macos/Runner/AppDelegate.swift +++ b/firebase-get-to-know-flutter/step_02/macos/Runner/AppDelegate.swift @@ -6,4 +6,8 @@ class AppDelegate: FlutterAppDelegate { override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { return true } + + override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { + return true + } } diff --git a/firebase-get-to-know-flutter/step_02/pubspec.yaml b/firebase-get-to-know-flutter/step_02/pubspec.yaml index 8fc844aab2..994a835cf6 100644 --- a/firebase-get-to-know-flutter/step_02/pubspec.yaml +++ b/firebase-get-to-know-flutter/step_02/pubspec.yaml @@ -32,12 +32,11 @@ dependencies: flutter: sdk: flutter - # The following adds the Cupertino Icons font to your application. # Use with the CupertinoIcons class for iOS style icons. cupertino_icons: ^1.0.8 google_fonts: ^6.2.1 - go_router: ^14.2.7 + go_router: ^14.3.0 dev_dependencies: flutter_test: @@ -48,7 +47,7 @@ dev_dependencies: # activated in the `analysis_options.yaml` file located at the root of your # package. See that file for information about deactivating specific lint # rules and activating additional ones. - flutter_lints: ^4.0.0 + flutter_lints: ^5.0.0 # For information on the generic Dart part of this file, see the # following page: https://dart.dev/tools/pub/pubspec diff --git a/firebase-get-to-know-flutter/step_02/web/index.html b/firebase-get-to-know-flutter/step_02/web/index.html index 92f64576d8..ec3bcd0112 100644 --- a/firebase-get-to-know-flutter/step_02/web/index.html +++ b/firebase-get-to-know-flutter/step_02/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/firebase-get-to-know-flutter/step_04/.gitignore b/firebase-get-to-know-flutter/step_04/.gitignore index 29a3a5017f..79c113f9b5 100644 --- a/firebase-get-to-know-flutter/step_04/.gitignore +++ b/firebase-get-to-know-flutter/step_04/.gitignore @@ -5,9 +5,11 @@ *.swp .DS_Store .atom/ +.build/ .buildlog/ .history .svn/ +.swiftpm/ migrate_working_dir/ # IntelliJ related diff --git a/firebase-get-to-know-flutter/step_04/android/app/build.gradle b/firebase-get-to-know-flutter/step_04/android/app/build.gradle index 8f860b1041..ad5859ad24 100644 --- a/firebase-get-to-know-flutter/step_04/android/app/build.gradle +++ b/firebase-get-to-know-flutter/step_04/android/app/build.gradle @@ -24,7 +24,7 @@ android { applicationId = "com.example.gtk_flutter" // You can update the following values to match your application needs. // For more information, see: https://flutter.dev/to/review-gradle-config. - minSdk = 21 + minSdk = 23 targetSdk = flutter.targetSdkVersion versionCode = flutter.versionCode versionName = flutter.versionName diff --git a/firebase-get-to-know-flutter/step_04/android/gradle.properties b/firebase-get-to-know-flutter/step_04/android/gradle.properties index 2597170821..f018a61817 100644 --- a/firebase-get-to-know-flutter/step_04/android/gradle.properties +++ b/firebase-get-to-know-flutter/step_04/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/firebase-get-to-know-flutter/step_04/android/gradle/wrapper/gradle-wrapper.properties b/firebase-get-to-know-flutter/step_04/android/gradle/wrapper/gradle-wrapper.properties index e1ca574ef0..7bb2df6ba6 100644 --- a/firebase-get-to-know-flutter/step_04/android/gradle/wrapper/gradle-wrapper.properties +++ b/firebase-get-to-know-flutter/step_04/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip diff --git a/firebase-get-to-know-flutter/step_04/android/settings.gradle b/firebase-get-to-know-flutter/step_04/android/settings.gradle index 536165d35a..b9e43bd376 100644 --- a/firebase-get-to-know-flutter/step_04/android/settings.gradle +++ b/firebase-get-to-know-flutter/step_04/android/settings.gradle @@ -18,8 +18,8 @@ pluginManagement { plugins { id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "7.3.0" apply false - id "org.jetbrains.kotlin.android" version "1.7.10" apply false + id "com.android.application" version "8.1.0" apply false + id "org.jetbrains.kotlin.android" version "1.8.22" apply false } include ":app" diff --git a/firebase-get-to-know-flutter/step_04/ios/Podfile b/firebase-get-to-know-flutter/step_04/ios/Podfile index d97f17e223..3e44f9c6f7 100644 --- a/firebase-get-to-know-flutter/step_04/ios/Podfile +++ b/firebase-get-to-know-flutter/step_04/ios/Podfile @@ -1,5 +1,5 @@ # Uncomment this line to define a global platform for your project -# platform :ios, '12.0' +platform :ios, '13.0' # CocoaPods analytics sends network stats synchronously affecting flutter build latency. ENV['COCOAPODS_DISABLE_STATS'] = 'true' diff --git a/firebase-get-to-know-flutter/step_04/ios/Runner.xcodeproj/project.pbxproj b/firebase-get-to-know-flutter/step_04/ios/Runner.xcodeproj/project.pbxproj index cff41d9a0e..1fec3b176b 100644 --- a/firebase-get-to-know-flutter/step_04/ios/Runner.xcodeproj/project.pbxproj +++ b/firebase-get-to-know-flutter/step_04/ios/Runner.xcodeproj/project.pbxproj @@ -10,12 +10,12 @@ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; + 48F92C47F6785B74B10426B6 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 67399F5529C4A8216833DD0F /* Pods_Runner.framework */; }; + 55A8A58D691856D8A8E2F81B /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 744A688AA80D90AEFEEE8B5D /* Pods_RunnerTests.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; - 8CD0E9720BD91BDBBD9340F6 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8886DF0EEBBAB07EE7638A22 /* Pods_RunnerTests.framework */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - C3D37E9D20867668255235F1 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B37AC028927CF85F4F1E6AF4 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,20 +42,20 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 11FB88AA8219013083C1A563 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 2C07D3E95C6ADEBD01A487A1 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 52B80850C4A9D6972C04E12A /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - 55189409B49D05C850A746FE /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 6D520546C7CA0758836AEB7B /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 41F4E541C0B0FF23D9DA5C04 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 67399F5529C4A8216833DD0F /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 744A688AA80D90AEFEEE8B5D /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 868E6B058CFC333D7D5B670A /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 8886DF0EEBBAB07EE7638A22 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 822914433177537C9D4A073F /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 8C22EFD2575ACEF2BA9301A3 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -63,8 +63,8 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - AA801BE035164BEDC59AEA5D /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - B37AC028927CF85F4F1E6AF4 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + A219FA1BA4AD7A0CCE184560 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + B37F3F7BA1352CC58F5B42CE /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -72,21 +72,35 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - C3D37E9D20867668255235F1 /* Pods_Runner.framework in Frameworks */, + 48F92C47F6785B74B10426B6 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - ECBEEC4513F2C1A27B9F9639 /* Frameworks */ = { + BA3F021047083BC8B18D3E0D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 8CD0E9720BD91BDBBD9340F6 /* Pods_RunnerTests.framework in Frameworks */, + 55A8A58D691856D8A8E2F81B /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 2686497132B27AC72C49AAEC /* Pods */ = { + isa = PBXGroup; + children = ( + B37F3F7BA1352CC58F5B42CE /* Pods-Runner.debug.xcconfig */, + 822914433177537C9D4A073F /* Pods-Runner.release.xcconfig */, + 8C22EFD2575ACEF2BA9301A3 /* Pods-Runner.profile.xcconfig */, + A219FA1BA4AD7A0CCE184560 /* Pods-RunnerTests.debug.xcconfig */, + 41F4E541C0B0FF23D9DA5C04 /* Pods-RunnerTests.release.xcconfig */, + 11FB88AA8219013083C1A563 /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; 331C8082294A63A400263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -95,6 +109,15 @@ path = RunnerTests; sourceTree = ""; }; + 561A1CA3EA2AB9F0AF534DA6 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 67399F5529C4A8216833DD0F /* Pods_Runner.framework */, + 744A688AA80D90AEFEEE8B5D /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( @@ -113,8 +136,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - B60295F6527672F63B9715A6 /* Pods */, - 98BD3EAB3093E15872776455 /* Frameworks */, + 2686497132B27AC72C49AAEC /* Pods */, + 561A1CA3EA2AB9F0AF534DA6 /* Frameworks */, ); sourceTree = ""; }; @@ -142,29 +165,6 @@ path = Runner; sourceTree = ""; }; - 98BD3EAB3093E15872776455 /* Frameworks */ = { - isa = PBXGroup; - children = ( - B37AC028927CF85F4F1E6AF4 /* Pods_Runner.framework */, - 8886DF0EEBBAB07EE7638A22 /* Pods_RunnerTests.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; - B60295F6527672F63B9715A6 /* Pods */ = { - isa = PBXGroup; - children = ( - 55189409B49D05C850A746FE /* Pods-Runner.debug.xcconfig */, - 868E6B058CFC333D7D5B670A /* Pods-Runner.release.xcconfig */, - AA801BE035164BEDC59AEA5D /* Pods-Runner.profile.xcconfig */, - 2C07D3E95C6ADEBD01A487A1 /* Pods-RunnerTests.debug.xcconfig */, - 52B80850C4A9D6972C04E12A /* Pods-RunnerTests.release.xcconfig */, - 6D520546C7CA0758836AEB7B /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 16081A976461F215B31F373D /* [CP] Check Pods Manifest.lock */, + A14A71C6D96CA2EED75B677B /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - ECBEEC4513F2C1A27B9F9639 /* Frameworks */, + BA3F021047083BC8B18D3E0D /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 32CCB81A5402B8B355886233 /* [CP] Check Pods Manifest.lock */, + FB86AE7D40B4243F86145360 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - F2DC197D00F362F12C2D5A6D /* [CP] Embed Pods Frameworks */, + 69881ECA2F74BD08FB925BC2 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -270,96 +270,96 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 16081A976461F215B31F373D /* [CP] Check Pods Manifest.lock */ = { + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); + name = "Thin Binary"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 32CCB81A5402B8B355886233 /* [CP] Check Pods Manifest.lock */ = { + 69881ECA2F74BD08FB925BC2 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputPaths = ( - "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); - name = "Thin Binary"; + name = "Run Script"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { + A14A71C6D96CA2EED75B677B /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "Run Script"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - F2DC197D00F362F12C2D5A6D /* [CP] Embed Pods Frameworks */ = { + FB86AE7D40B4243F86145360 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -473,6 +473,7 @@ CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; ENABLE_BITCODE = NO; INFOPLIST_FILE = Runner/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -487,12 +488,13 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 2C07D3E95C6ADEBD01A487A1 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = A219FA1BA4AD7A0CCE184560 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 1; GENERATE_INFOPLIST_FILE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; MARKETING_VERSION = 1.0; PRODUCT_BUNDLE_IDENTIFIER = com.example.gtkFlutter.RunnerTests; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -505,12 +507,13 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 52B80850C4A9D6972C04E12A /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 41F4E541C0B0FF23D9DA5C04 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 1; GENERATE_INFOPLIST_FILE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; MARKETING_VERSION = 1.0; PRODUCT_BUNDLE_IDENTIFIER = com.example.gtkFlutter.RunnerTests; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -521,12 +524,13 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 6D520546C7CA0758836AEB7B /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 11FB88AA8219013083C1A563 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 1; GENERATE_INFOPLIST_FILE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; MARKETING_VERSION = 1.0; PRODUCT_BUNDLE_IDENTIFIER = com.example.gtkFlutter.RunnerTests; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -655,6 +659,7 @@ CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; ENABLE_BITCODE = NO; INFOPLIST_FILE = Runner/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -677,6 +682,7 @@ CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; ENABLE_BITCODE = NO; INFOPLIST_FILE = Runner/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", diff --git a/firebase-get-to-know-flutter/step_04/macos/Podfile b/firebase-get-to-know-flutter/step_04/macos/Podfile index c795730db8..b52666a103 100644 --- a/firebase-get-to-know-flutter/step_04/macos/Podfile +++ b/firebase-get-to-know-flutter/step_04/macos/Podfile @@ -1,4 +1,4 @@ -platform :osx, '10.14' +platform :osx, '10.15' # CocoaPods analytics sends network stats synchronously affecting flutter build latency. ENV['COCOAPODS_DISABLE_STATS'] = 'true' diff --git a/firebase-get-to-know-flutter/step_04/macos/Runner.xcodeproj/project.pbxproj b/firebase-get-to-know-flutter/step_04/macos/Runner.xcodeproj/project.pbxproj index 24fdf06249..a8d91af57e 100644 --- a/firebase-get-to-know-flutter/step_04/macos/Runner.xcodeproj/project.pbxproj +++ b/firebase-get-to-know-flutter/step_04/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ - 203193014212ECC97C8C922A /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 564568BF62B09CDA743E4EA4 /* Pods_Runner.framework */; }; + 28823A3C182EE12E8A57E818 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8DE94FCB4C93C934DB82ED0C /* Pods_Runner.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 4DC40AAF5EF27875E93C5045 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 99C02A2276E6E2D7CA6E538C /* Pods_RunnerTests.framework */; }; + A5ADD6B5904AA82515194D84 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AB709786B7AC18EE740D5375 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,7 +62,7 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 25D676E7E62FC1C8B5A14D1D /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 18B4AB14ED0B2BC5C115306D /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -79,15 +79,15 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 38BA081A8D3C41280A93431B /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - 3CA5C22CDCEC34F15537CF53 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 564568BF62B09CDA743E4EA4 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 4086F8438660B0B0FA223108 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 5E0D4E06649BF28D8D882A8B /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 64B67A849939B632D038250B /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 8795A839324FE95A82F6F08C /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - 9047E4269D9A628EB4E508AF /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 8DE94FCB4C93C934DB82ED0C /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - 99C02A2276E6E2D7CA6E538C /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - ABEC84D092E3F21E5C186822 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + A224E642823E0216BF12C1D3 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + AB709786B7AC18EE740D5375 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + EB8947F87314B3A353FCF67C /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 4DC40AAF5EF27875E93C5045 /* Pods_RunnerTests.framework in Frameworks */, + A5ADD6B5904AA82515194D84 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,27 +103,13 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 203193014212ECC97C8C922A /* Pods_Runner.framework in Frameworks */, + 28823A3C182EE12E8A57E818 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 0A1CC31397BD0156F52A8340 /* Pods */ = { - isa = PBXGroup; - children = ( - 25D676E7E62FC1C8B5A14D1D /* Pods-Runner.debug.xcconfig */, - 3CA5C22CDCEC34F15537CF53 /* Pods-Runner.release.xcconfig */, - ABEC84D092E3F21E5C186822 /* Pods-Runner.profile.xcconfig */, - 9047E4269D9A628EB4E508AF /* Pods-RunnerTests.debug.xcconfig */, - 8795A839324FE95A82F6F08C /* Pods-RunnerTests.release.xcconfig */, - 38BA081A8D3C41280A93431B /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; 331C80D6294CF71000263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -151,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 0A1CC31397BD0156F52A8340 /* Pods */, + 82C11B689FF0D3F4BA2C6780 /* Pods */, ); sourceTree = ""; }; @@ -199,11 +185,25 @@ path = Runner; sourceTree = ""; }; + 82C11B689FF0D3F4BA2C6780 /* Pods */ = { + isa = PBXGroup; + children = ( + 5E0D4E06649BF28D8D882A8B /* Pods-Runner.debug.xcconfig */, + 18B4AB14ED0B2BC5C115306D /* Pods-Runner.release.xcconfig */, + 64B67A849939B632D038250B /* Pods-Runner.profile.xcconfig */, + EB8947F87314B3A353FCF67C /* Pods-RunnerTests.debug.xcconfig */, + A224E642823E0216BF12C1D3 /* Pods-RunnerTests.release.xcconfig */, + 4086F8438660B0B0FA223108 /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - 564568BF62B09CDA743E4EA4 /* Pods_Runner.framework */, - 99C02A2276E6E2D7CA6E538C /* Pods_RunnerTests.framework */, + 8DE94FCB4C93C934DB82ED0C /* Pods_Runner.framework */, + AB709786B7AC18EE740D5375 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - B9B47CC91AE302DCA3053624 /* [CP] Check Pods Manifest.lock */, + F3CEA25B7E77975C7E78773F /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 0898364673EBCE98B3186893 /* [CP] Check Pods Manifest.lock */, + 2A85CCABAD294FADC367351F /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 4BB300EB47FADD99DADAF70B /* [CP] Embed Pods Frameworks */, + 79EEF1D7B56626FC53E21766 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,7 +323,7 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 0898364673EBCE98B3186893 /* [CP] Check Pods Manifest.lock */ = { + 2A85CCABAD294FADC367351F /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -383,7 +383,7 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 4BB300EB47FADD99DADAF70B /* [CP] Embed Pods Frameworks */ = { + 79EEF1D7B56626FC53E21766 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -400,7 +400,7 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - B9B47CC91AE302DCA3053624 /* [CP] Check Pods Manifest.lock */ = { + F3CEA25B7E77975C7E78773F /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -473,11 +473,12 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 9047E4269D9A628EB4E508AF /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = EB8947F87314B3A353FCF67C /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; GENERATE_INFOPLIST_FILE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.15; MARKETING_VERSION = 1.0; PRODUCT_BUNDLE_IDENTIFIER = com.example.gtkFlutter.RunnerTests; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -488,11 +489,12 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 8795A839324FE95A82F6F08C /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = A224E642823E0216BF12C1D3 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; GENERATE_INFOPLIST_FILE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.15; MARKETING_VERSION = 1.0; PRODUCT_BUNDLE_IDENTIFIER = com.example.gtkFlutter.RunnerTests; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -503,11 +505,12 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 38BA081A8D3C41280A93431B /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 4086F8438660B0B0FA223108 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; GENERATE_INFOPLIST_FILE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.15; MARKETING_VERSION = 1.0; PRODUCT_BUNDLE_IDENTIFIER = com.example.gtkFlutter.RunnerTests; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -579,6 +582,7 @@ "$(inherited)", "@executable_path/../Frameworks", ); + MACOSX_DEPLOYMENT_TARGET = 10.15; PROVISIONING_PROFILE_SPECIFIER = ""; SWIFT_VERSION = 5.0; }; @@ -588,6 +592,7 @@ isa = XCBuildConfiguration; buildSettings = { CODE_SIGN_STYLE = Manual; + MACOSX_DEPLOYMENT_TARGET = 10.15; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Profile; @@ -711,6 +716,7 @@ "$(inherited)", "@executable_path/../Frameworks", ); + MACOSX_DEPLOYMENT_TARGET = 10.15; PROVISIONING_PROFILE_SPECIFIER = ""; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 5.0; @@ -731,6 +737,7 @@ "$(inherited)", "@executable_path/../Frameworks", ); + MACOSX_DEPLOYMENT_TARGET = 10.15; PROVISIONING_PROFILE_SPECIFIER = ""; SWIFT_VERSION = 5.0; }; @@ -740,6 +747,7 @@ isa = XCBuildConfiguration; buildSettings = { CODE_SIGN_STYLE = Manual; + MACOSX_DEPLOYMENT_TARGET = 10.15; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; @@ -748,6 +756,7 @@ isa = XCBuildConfiguration; buildSettings = { CODE_SIGN_STYLE = Automatic; + MACOSX_DEPLOYMENT_TARGET = 10.15; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; diff --git a/firebase-get-to-know-flutter/step_04/macos/Runner/AppDelegate.swift b/firebase-get-to-know-flutter/step_04/macos/Runner/AppDelegate.swift index 8e02df2888..b3c1761412 100644 --- a/firebase-get-to-know-flutter/step_04/macos/Runner/AppDelegate.swift +++ b/firebase-get-to-know-flutter/step_04/macos/Runner/AppDelegate.swift @@ -6,4 +6,8 @@ class AppDelegate: FlutterAppDelegate { override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { return true } + + override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { + return true + } } diff --git a/firebase-get-to-know-flutter/step_04/pubspec.yaml b/firebase-get-to-know-flutter/step_04/pubspec.yaml index 9f35177d5c..7a39a8a411 100644 --- a/firebase-get-to-know-flutter/step_04/pubspec.yaml +++ b/firebase-get-to-know-flutter/step_04/pubspec.yaml @@ -32,17 +32,16 @@ dependencies: flutter: sdk: flutter - # The following adds the Cupertino Icons font to your application. # Use with the CupertinoIcons class for iOS style icons. cupertino_icons: ^1.0.8 google_fonts: ^6.2.1 - go_router: ^14.2.7 - cloud_firestore: ^4.14.0 - firebase_auth: ^4.16.0 - firebase_core: ^2.24.2 + go_router: ^14.3.0 + cloud_firestore: ^5.4.4 + firebase_auth: ^5.3.1 + firebase_core: ^3.6.0 provider: ^6.1.2 - firebase_ui_auth: ^1.13.0 + firebase_ui_auth: ^1.16.0 dev_dependencies: flutter_test: @@ -53,7 +52,7 @@ dev_dependencies: # activated in the `analysis_options.yaml` file located at the root of your # package. See that file for information about deactivating specific lint # rules and activating additional ones. - flutter_lints: ^4.0.0 + flutter_lints: ^5.0.0 # For information on the generic Dart part of this file, see the # following page: https://dart.dev/tools/pub/pubspec diff --git a/firebase-get-to-know-flutter/step_04/web/index.html b/firebase-get-to-know-flutter/step_04/web/index.html index 92f64576d8..ec3bcd0112 100644 --- a/firebase-get-to-know-flutter/step_04/web/index.html +++ b/firebase-get-to-know-flutter/step_04/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/firebase-get-to-know-flutter/step_05/.gitignore b/firebase-get-to-know-flutter/step_05/.gitignore index 29a3a5017f..79c113f9b5 100644 --- a/firebase-get-to-know-flutter/step_05/.gitignore +++ b/firebase-get-to-know-flutter/step_05/.gitignore @@ -5,9 +5,11 @@ *.swp .DS_Store .atom/ +.build/ .buildlog/ .history .svn/ +.swiftpm/ migrate_working_dir/ # IntelliJ related diff --git a/firebase-get-to-know-flutter/step_05/android/app/build.gradle b/firebase-get-to-know-flutter/step_05/android/app/build.gradle index 8f860b1041..ad5859ad24 100644 --- a/firebase-get-to-know-flutter/step_05/android/app/build.gradle +++ b/firebase-get-to-know-flutter/step_05/android/app/build.gradle @@ -24,7 +24,7 @@ android { applicationId = "com.example.gtk_flutter" // You can update the following values to match your application needs. // For more information, see: https://flutter.dev/to/review-gradle-config. - minSdk = 21 + minSdk = 23 targetSdk = flutter.targetSdkVersion versionCode = flutter.versionCode versionName = flutter.versionName diff --git a/firebase-get-to-know-flutter/step_05/android/gradle.properties b/firebase-get-to-know-flutter/step_05/android/gradle.properties index 2597170821..f018a61817 100644 --- a/firebase-get-to-know-flutter/step_05/android/gradle.properties +++ b/firebase-get-to-know-flutter/step_05/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/firebase-get-to-know-flutter/step_05/android/gradle/wrapper/gradle-wrapper.properties b/firebase-get-to-know-flutter/step_05/android/gradle/wrapper/gradle-wrapper.properties index e1ca574ef0..7bb2df6ba6 100644 --- a/firebase-get-to-know-flutter/step_05/android/gradle/wrapper/gradle-wrapper.properties +++ b/firebase-get-to-know-flutter/step_05/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip diff --git a/firebase-get-to-know-flutter/step_05/android/settings.gradle b/firebase-get-to-know-flutter/step_05/android/settings.gradle index 536165d35a..b9e43bd376 100644 --- a/firebase-get-to-know-flutter/step_05/android/settings.gradle +++ b/firebase-get-to-know-flutter/step_05/android/settings.gradle @@ -18,8 +18,8 @@ pluginManagement { plugins { id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "7.3.0" apply false - id "org.jetbrains.kotlin.android" version "1.7.10" apply false + id "com.android.application" version "8.1.0" apply false + id "org.jetbrains.kotlin.android" version "1.8.22" apply false } include ":app" diff --git a/firebase-get-to-know-flutter/step_05/ios/Podfile b/firebase-get-to-know-flutter/step_05/ios/Podfile index d97f17e223..3e44f9c6f7 100644 --- a/firebase-get-to-know-flutter/step_05/ios/Podfile +++ b/firebase-get-to-know-flutter/step_05/ios/Podfile @@ -1,5 +1,5 @@ # Uncomment this line to define a global platform for your project -# platform :ios, '12.0' +platform :ios, '13.0' # CocoaPods analytics sends network stats synchronously affecting flutter build latency. ENV['COCOAPODS_DISABLE_STATS'] = 'true' diff --git a/firebase-get-to-know-flutter/step_05/ios/Runner.xcodeproj/project.pbxproj b/firebase-get-to-know-flutter/step_05/ios/Runner.xcodeproj/project.pbxproj index cff41d9a0e..1fec3b176b 100644 --- a/firebase-get-to-know-flutter/step_05/ios/Runner.xcodeproj/project.pbxproj +++ b/firebase-get-to-know-flutter/step_05/ios/Runner.xcodeproj/project.pbxproj @@ -10,12 +10,12 @@ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; + 48F92C47F6785B74B10426B6 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 67399F5529C4A8216833DD0F /* Pods_Runner.framework */; }; + 55A8A58D691856D8A8E2F81B /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 744A688AA80D90AEFEEE8B5D /* Pods_RunnerTests.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; - 8CD0E9720BD91BDBBD9340F6 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8886DF0EEBBAB07EE7638A22 /* Pods_RunnerTests.framework */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - C3D37E9D20867668255235F1 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B37AC028927CF85F4F1E6AF4 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,20 +42,20 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 11FB88AA8219013083C1A563 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 2C07D3E95C6ADEBD01A487A1 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 52B80850C4A9D6972C04E12A /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - 55189409B49D05C850A746FE /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 6D520546C7CA0758836AEB7B /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 41F4E541C0B0FF23D9DA5C04 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 67399F5529C4A8216833DD0F /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 744A688AA80D90AEFEEE8B5D /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 868E6B058CFC333D7D5B670A /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 8886DF0EEBBAB07EE7638A22 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 822914433177537C9D4A073F /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 8C22EFD2575ACEF2BA9301A3 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -63,8 +63,8 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - AA801BE035164BEDC59AEA5D /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - B37AC028927CF85F4F1E6AF4 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + A219FA1BA4AD7A0CCE184560 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + B37F3F7BA1352CC58F5B42CE /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -72,21 +72,35 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - C3D37E9D20867668255235F1 /* Pods_Runner.framework in Frameworks */, + 48F92C47F6785B74B10426B6 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - ECBEEC4513F2C1A27B9F9639 /* Frameworks */ = { + BA3F021047083BC8B18D3E0D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 8CD0E9720BD91BDBBD9340F6 /* Pods_RunnerTests.framework in Frameworks */, + 55A8A58D691856D8A8E2F81B /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 2686497132B27AC72C49AAEC /* Pods */ = { + isa = PBXGroup; + children = ( + B37F3F7BA1352CC58F5B42CE /* Pods-Runner.debug.xcconfig */, + 822914433177537C9D4A073F /* Pods-Runner.release.xcconfig */, + 8C22EFD2575ACEF2BA9301A3 /* Pods-Runner.profile.xcconfig */, + A219FA1BA4AD7A0CCE184560 /* Pods-RunnerTests.debug.xcconfig */, + 41F4E541C0B0FF23D9DA5C04 /* Pods-RunnerTests.release.xcconfig */, + 11FB88AA8219013083C1A563 /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; 331C8082294A63A400263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -95,6 +109,15 @@ path = RunnerTests; sourceTree = ""; }; + 561A1CA3EA2AB9F0AF534DA6 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 67399F5529C4A8216833DD0F /* Pods_Runner.framework */, + 744A688AA80D90AEFEEE8B5D /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( @@ -113,8 +136,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - B60295F6527672F63B9715A6 /* Pods */, - 98BD3EAB3093E15872776455 /* Frameworks */, + 2686497132B27AC72C49AAEC /* Pods */, + 561A1CA3EA2AB9F0AF534DA6 /* Frameworks */, ); sourceTree = ""; }; @@ -142,29 +165,6 @@ path = Runner; sourceTree = ""; }; - 98BD3EAB3093E15872776455 /* Frameworks */ = { - isa = PBXGroup; - children = ( - B37AC028927CF85F4F1E6AF4 /* Pods_Runner.framework */, - 8886DF0EEBBAB07EE7638A22 /* Pods_RunnerTests.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; - B60295F6527672F63B9715A6 /* Pods */ = { - isa = PBXGroup; - children = ( - 55189409B49D05C850A746FE /* Pods-Runner.debug.xcconfig */, - 868E6B058CFC333D7D5B670A /* Pods-Runner.release.xcconfig */, - AA801BE035164BEDC59AEA5D /* Pods-Runner.profile.xcconfig */, - 2C07D3E95C6ADEBD01A487A1 /* Pods-RunnerTests.debug.xcconfig */, - 52B80850C4A9D6972C04E12A /* Pods-RunnerTests.release.xcconfig */, - 6D520546C7CA0758836AEB7B /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 16081A976461F215B31F373D /* [CP] Check Pods Manifest.lock */, + A14A71C6D96CA2EED75B677B /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - ECBEEC4513F2C1A27B9F9639 /* Frameworks */, + BA3F021047083BC8B18D3E0D /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 32CCB81A5402B8B355886233 /* [CP] Check Pods Manifest.lock */, + FB86AE7D40B4243F86145360 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - F2DC197D00F362F12C2D5A6D /* [CP] Embed Pods Frameworks */, + 69881ECA2F74BD08FB925BC2 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -270,96 +270,96 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 16081A976461F215B31F373D /* [CP] Check Pods Manifest.lock */ = { + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); + name = "Thin Binary"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 32CCB81A5402B8B355886233 /* [CP] Check Pods Manifest.lock */ = { + 69881ECA2F74BD08FB925BC2 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputPaths = ( - "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); - name = "Thin Binary"; + name = "Run Script"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { + A14A71C6D96CA2EED75B677B /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "Run Script"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - F2DC197D00F362F12C2D5A6D /* [CP] Embed Pods Frameworks */ = { + FB86AE7D40B4243F86145360 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -473,6 +473,7 @@ CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; ENABLE_BITCODE = NO; INFOPLIST_FILE = Runner/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -487,12 +488,13 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 2C07D3E95C6ADEBD01A487A1 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = A219FA1BA4AD7A0CCE184560 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 1; GENERATE_INFOPLIST_FILE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; MARKETING_VERSION = 1.0; PRODUCT_BUNDLE_IDENTIFIER = com.example.gtkFlutter.RunnerTests; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -505,12 +507,13 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 52B80850C4A9D6972C04E12A /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 41F4E541C0B0FF23D9DA5C04 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 1; GENERATE_INFOPLIST_FILE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; MARKETING_VERSION = 1.0; PRODUCT_BUNDLE_IDENTIFIER = com.example.gtkFlutter.RunnerTests; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -521,12 +524,13 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 6D520546C7CA0758836AEB7B /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 11FB88AA8219013083C1A563 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 1; GENERATE_INFOPLIST_FILE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; MARKETING_VERSION = 1.0; PRODUCT_BUNDLE_IDENTIFIER = com.example.gtkFlutter.RunnerTests; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -655,6 +659,7 @@ CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; ENABLE_BITCODE = NO; INFOPLIST_FILE = Runner/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -677,6 +682,7 @@ CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; ENABLE_BITCODE = NO; INFOPLIST_FILE = Runner/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", diff --git a/firebase-get-to-know-flutter/step_05/macos/Podfile b/firebase-get-to-know-flutter/step_05/macos/Podfile index c795730db8..b52666a103 100644 --- a/firebase-get-to-know-flutter/step_05/macos/Podfile +++ b/firebase-get-to-know-flutter/step_05/macos/Podfile @@ -1,4 +1,4 @@ -platform :osx, '10.14' +platform :osx, '10.15' # CocoaPods analytics sends network stats synchronously affecting flutter build latency. ENV['COCOAPODS_DISABLE_STATS'] = 'true' diff --git a/firebase-get-to-know-flutter/step_05/macos/Runner.xcodeproj/project.pbxproj b/firebase-get-to-know-flutter/step_05/macos/Runner.xcodeproj/project.pbxproj index 24fdf06249..a8d91af57e 100644 --- a/firebase-get-to-know-flutter/step_05/macos/Runner.xcodeproj/project.pbxproj +++ b/firebase-get-to-know-flutter/step_05/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ - 203193014212ECC97C8C922A /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 564568BF62B09CDA743E4EA4 /* Pods_Runner.framework */; }; + 28823A3C182EE12E8A57E818 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8DE94FCB4C93C934DB82ED0C /* Pods_Runner.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 4DC40AAF5EF27875E93C5045 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 99C02A2276E6E2D7CA6E538C /* Pods_RunnerTests.framework */; }; + A5ADD6B5904AA82515194D84 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AB709786B7AC18EE740D5375 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,7 +62,7 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 25D676E7E62FC1C8B5A14D1D /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 18B4AB14ED0B2BC5C115306D /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -79,15 +79,15 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 38BA081A8D3C41280A93431B /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - 3CA5C22CDCEC34F15537CF53 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 564568BF62B09CDA743E4EA4 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 4086F8438660B0B0FA223108 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 5E0D4E06649BF28D8D882A8B /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 64B67A849939B632D038250B /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 8795A839324FE95A82F6F08C /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - 9047E4269D9A628EB4E508AF /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 8DE94FCB4C93C934DB82ED0C /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - 99C02A2276E6E2D7CA6E538C /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - ABEC84D092E3F21E5C186822 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + A224E642823E0216BF12C1D3 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + AB709786B7AC18EE740D5375 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + EB8947F87314B3A353FCF67C /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 4DC40AAF5EF27875E93C5045 /* Pods_RunnerTests.framework in Frameworks */, + A5ADD6B5904AA82515194D84 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,27 +103,13 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 203193014212ECC97C8C922A /* Pods_Runner.framework in Frameworks */, + 28823A3C182EE12E8A57E818 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 0A1CC31397BD0156F52A8340 /* Pods */ = { - isa = PBXGroup; - children = ( - 25D676E7E62FC1C8B5A14D1D /* Pods-Runner.debug.xcconfig */, - 3CA5C22CDCEC34F15537CF53 /* Pods-Runner.release.xcconfig */, - ABEC84D092E3F21E5C186822 /* Pods-Runner.profile.xcconfig */, - 9047E4269D9A628EB4E508AF /* Pods-RunnerTests.debug.xcconfig */, - 8795A839324FE95A82F6F08C /* Pods-RunnerTests.release.xcconfig */, - 38BA081A8D3C41280A93431B /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; 331C80D6294CF71000263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -151,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 0A1CC31397BD0156F52A8340 /* Pods */, + 82C11B689FF0D3F4BA2C6780 /* Pods */, ); sourceTree = ""; }; @@ -199,11 +185,25 @@ path = Runner; sourceTree = ""; }; + 82C11B689FF0D3F4BA2C6780 /* Pods */ = { + isa = PBXGroup; + children = ( + 5E0D4E06649BF28D8D882A8B /* Pods-Runner.debug.xcconfig */, + 18B4AB14ED0B2BC5C115306D /* Pods-Runner.release.xcconfig */, + 64B67A849939B632D038250B /* Pods-Runner.profile.xcconfig */, + EB8947F87314B3A353FCF67C /* Pods-RunnerTests.debug.xcconfig */, + A224E642823E0216BF12C1D3 /* Pods-RunnerTests.release.xcconfig */, + 4086F8438660B0B0FA223108 /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - 564568BF62B09CDA743E4EA4 /* Pods_Runner.framework */, - 99C02A2276E6E2D7CA6E538C /* Pods_RunnerTests.framework */, + 8DE94FCB4C93C934DB82ED0C /* Pods_Runner.framework */, + AB709786B7AC18EE740D5375 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - B9B47CC91AE302DCA3053624 /* [CP] Check Pods Manifest.lock */, + F3CEA25B7E77975C7E78773F /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 0898364673EBCE98B3186893 /* [CP] Check Pods Manifest.lock */, + 2A85CCABAD294FADC367351F /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 4BB300EB47FADD99DADAF70B /* [CP] Embed Pods Frameworks */, + 79EEF1D7B56626FC53E21766 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,7 +323,7 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 0898364673EBCE98B3186893 /* [CP] Check Pods Manifest.lock */ = { + 2A85CCABAD294FADC367351F /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -383,7 +383,7 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 4BB300EB47FADD99DADAF70B /* [CP] Embed Pods Frameworks */ = { + 79EEF1D7B56626FC53E21766 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -400,7 +400,7 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - B9B47CC91AE302DCA3053624 /* [CP] Check Pods Manifest.lock */ = { + F3CEA25B7E77975C7E78773F /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -473,11 +473,12 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 9047E4269D9A628EB4E508AF /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = EB8947F87314B3A353FCF67C /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; GENERATE_INFOPLIST_FILE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.15; MARKETING_VERSION = 1.0; PRODUCT_BUNDLE_IDENTIFIER = com.example.gtkFlutter.RunnerTests; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -488,11 +489,12 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 8795A839324FE95A82F6F08C /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = A224E642823E0216BF12C1D3 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; GENERATE_INFOPLIST_FILE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.15; MARKETING_VERSION = 1.0; PRODUCT_BUNDLE_IDENTIFIER = com.example.gtkFlutter.RunnerTests; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -503,11 +505,12 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 38BA081A8D3C41280A93431B /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 4086F8438660B0B0FA223108 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; GENERATE_INFOPLIST_FILE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.15; MARKETING_VERSION = 1.0; PRODUCT_BUNDLE_IDENTIFIER = com.example.gtkFlutter.RunnerTests; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -579,6 +582,7 @@ "$(inherited)", "@executable_path/../Frameworks", ); + MACOSX_DEPLOYMENT_TARGET = 10.15; PROVISIONING_PROFILE_SPECIFIER = ""; SWIFT_VERSION = 5.0; }; @@ -588,6 +592,7 @@ isa = XCBuildConfiguration; buildSettings = { CODE_SIGN_STYLE = Manual; + MACOSX_DEPLOYMENT_TARGET = 10.15; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Profile; @@ -711,6 +716,7 @@ "$(inherited)", "@executable_path/../Frameworks", ); + MACOSX_DEPLOYMENT_TARGET = 10.15; PROVISIONING_PROFILE_SPECIFIER = ""; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 5.0; @@ -731,6 +737,7 @@ "$(inherited)", "@executable_path/../Frameworks", ); + MACOSX_DEPLOYMENT_TARGET = 10.15; PROVISIONING_PROFILE_SPECIFIER = ""; SWIFT_VERSION = 5.0; }; @@ -740,6 +747,7 @@ isa = XCBuildConfiguration; buildSettings = { CODE_SIGN_STYLE = Manual; + MACOSX_DEPLOYMENT_TARGET = 10.15; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; @@ -748,6 +756,7 @@ isa = XCBuildConfiguration; buildSettings = { CODE_SIGN_STYLE = Automatic; + MACOSX_DEPLOYMENT_TARGET = 10.15; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; diff --git a/firebase-get-to-know-flutter/step_05/macos/Runner/AppDelegate.swift b/firebase-get-to-know-flutter/step_05/macos/Runner/AppDelegate.swift index 8e02df2888..b3c1761412 100644 --- a/firebase-get-to-know-flutter/step_05/macos/Runner/AppDelegate.swift +++ b/firebase-get-to-know-flutter/step_05/macos/Runner/AppDelegate.swift @@ -6,4 +6,8 @@ class AppDelegate: FlutterAppDelegate { override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { return true } + + override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { + return true + } } diff --git a/firebase-get-to-know-flutter/step_05/pubspec.yaml b/firebase-get-to-know-flutter/step_05/pubspec.yaml index 9f35177d5c..7a39a8a411 100644 --- a/firebase-get-to-know-flutter/step_05/pubspec.yaml +++ b/firebase-get-to-know-flutter/step_05/pubspec.yaml @@ -32,17 +32,16 @@ dependencies: flutter: sdk: flutter - # The following adds the Cupertino Icons font to your application. # Use with the CupertinoIcons class for iOS style icons. cupertino_icons: ^1.0.8 google_fonts: ^6.2.1 - go_router: ^14.2.7 - cloud_firestore: ^4.14.0 - firebase_auth: ^4.16.0 - firebase_core: ^2.24.2 + go_router: ^14.3.0 + cloud_firestore: ^5.4.4 + firebase_auth: ^5.3.1 + firebase_core: ^3.6.0 provider: ^6.1.2 - firebase_ui_auth: ^1.13.0 + firebase_ui_auth: ^1.16.0 dev_dependencies: flutter_test: @@ -53,7 +52,7 @@ dev_dependencies: # activated in the `analysis_options.yaml` file located at the root of your # package. See that file for information about deactivating specific lint # rules and activating additional ones. - flutter_lints: ^4.0.0 + flutter_lints: ^5.0.0 # For information on the generic Dart part of this file, see the # following page: https://dart.dev/tools/pub/pubspec diff --git a/firebase-get-to-know-flutter/step_05/web/index.html b/firebase-get-to-know-flutter/step_05/web/index.html index 92f64576d8..ec3bcd0112 100644 --- a/firebase-get-to-know-flutter/step_05/web/index.html +++ b/firebase-get-to-know-flutter/step_05/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/firebase-get-to-know-flutter/step_06/.gitignore b/firebase-get-to-know-flutter/step_06/.gitignore index 29a3a5017f..79c113f9b5 100644 --- a/firebase-get-to-know-flutter/step_06/.gitignore +++ b/firebase-get-to-know-flutter/step_06/.gitignore @@ -5,9 +5,11 @@ *.swp .DS_Store .atom/ +.build/ .buildlog/ .history .svn/ +.swiftpm/ migrate_working_dir/ # IntelliJ related diff --git a/firebase-get-to-know-flutter/step_06/android/app/build.gradle b/firebase-get-to-know-flutter/step_06/android/app/build.gradle index 8f860b1041..ad5859ad24 100644 --- a/firebase-get-to-know-flutter/step_06/android/app/build.gradle +++ b/firebase-get-to-know-flutter/step_06/android/app/build.gradle @@ -24,7 +24,7 @@ android { applicationId = "com.example.gtk_flutter" // You can update the following values to match your application needs. // For more information, see: https://flutter.dev/to/review-gradle-config. - minSdk = 21 + minSdk = 23 targetSdk = flutter.targetSdkVersion versionCode = flutter.versionCode versionName = flutter.versionName diff --git a/firebase-get-to-know-flutter/step_06/android/gradle.properties b/firebase-get-to-know-flutter/step_06/android/gradle.properties index 2597170821..f018a61817 100644 --- a/firebase-get-to-know-flutter/step_06/android/gradle.properties +++ b/firebase-get-to-know-flutter/step_06/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/firebase-get-to-know-flutter/step_06/android/gradle/wrapper/gradle-wrapper.properties b/firebase-get-to-know-flutter/step_06/android/gradle/wrapper/gradle-wrapper.properties index e1ca574ef0..7bb2df6ba6 100644 --- a/firebase-get-to-know-flutter/step_06/android/gradle/wrapper/gradle-wrapper.properties +++ b/firebase-get-to-know-flutter/step_06/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip diff --git a/firebase-get-to-know-flutter/step_06/android/settings.gradle b/firebase-get-to-know-flutter/step_06/android/settings.gradle index 536165d35a..b9e43bd376 100644 --- a/firebase-get-to-know-flutter/step_06/android/settings.gradle +++ b/firebase-get-to-know-flutter/step_06/android/settings.gradle @@ -18,8 +18,8 @@ pluginManagement { plugins { id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "7.3.0" apply false - id "org.jetbrains.kotlin.android" version "1.7.10" apply false + id "com.android.application" version "8.1.0" apply false + id "org.jetbrains.kotlin.android" version "1.8.22" apply false } include ":app" diff --git a/firebase-get-to-know-flutter/step_06/ios/Podfile b/firebase-get-to-know-flutter/step_06/ios/Podfile index d97f17e223..3e44f9c6f7 100644 --- a/firebase-get-to-know-flutter/step_06/ios/Podfile +++ b/firebase-get-to-know-flutter/step_06/ios/Podfile @@ -1,5 +1,5 @@ # Uncomment this line to define a global platform for your project -# platform :ios, '12.0' +platform :ios, '13.0' # CocoaPods analytics sends network stats synchronously affecting flutter build latency. ENV['COCOAPODS_DISABLE_STATS'] = 'true' diff --git a/firebase-get-to-know-flutter/step_06/ios/Runner.xcodeproj/project.pbxproj b/firebase-get-to-know-flutter/step_06/ios/Runner.xcodeproj/project.pbxproj index cff41d9a0e..1fec3b176b 100644 --- a/firebase-get-to-know-flutter/step_06/ios/Runner.xcodeproj/project.pbxproj +++ b/firebase-get-to-know-flutter/step_06/ios/Runner.xcodeproj/project.pbxproj @@ -10,12 +10,12 @@ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; + 48F92C47F6785B74B10426B6 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 67399F5529C4A8216833DD0F /* Pods_Runner.framework */; }; + 55A8A58D691856D8A8E2F81B /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 744A688AA80D90AEFEEE8B5D /* Pods_RunnerTests.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; - 8CD0E9720BD91BDBBD9340F6 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8886DF0EEBBAB07EE7638A22 /* Pods_RunnerTests.framework */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - C3D37E9D20867668255235F1 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B37AC028927CF85F4F1E6AF4 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,20 +42,20 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 11FB88AA8219013083C1A563 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 2C07D3E95C6ADEBD01A487A1 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 52B80850C4A9D6972C04E12A /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - 55189409B49D05C850A746FE /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 6D520546C7CA0758836AEB7B /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 41F4E541C0B0FF23D9DA5C04 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 67399F5529C4A8216833DD0F /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 744A688AA80D90AEFEEE8B5D /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 868E6B058CFC333D7D5B670A /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 8886DF0EEBBAB07EE7638A22 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 822914433177537C9D4A073F /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 8C22EFD2575ACEF2BA9301A3 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -63,8 +63,8 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - AA801BE035164BEDC59AEA5D /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - B37AC028927CF85F4F1E6AF4 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + A219FA1BA4AD7A0CCE184560 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + B37F3F7BA1352CC58F5B42CE /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -72,21 +72,35 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - C3D37E9D20867668255235F1 /* Pods_Runner.framework in Frameworks */, + 48F92C47F6785B74B10426B6 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - ECBEEC4513F2C1A27B9F9639 /* Frameworks */ = { + BA3F021047083BC8B18D3E0D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 8CD0E9720BD91BDBBD9340F6 /* Pods_RunnerTests.framework in Frameworks */, + 55A8A58D691856D8A8E2F81B /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 2686497132B27AC72C49AAEC /* Pods */ = { + isa = PBXGroup; + children = ( + B37F3F7BA1352CC58F5B42CE /* Pods-Runner.debug.xcconfig */, + 822914433177537C9D4A073F /* Pods-Runner.release.xcconfig */, + 8C22EFD2575ACEF2BA9301A3 /* Pods-Runner.profile.xcconfig */, + A219FA1BA4AD7A0CCE184560 /* Pods-RunnerTests.debug.xcconfig */, + 41F4E541C0B0FF23D9DA5C04 /* Pods-RunnerTests.release.xcconfig */, + 11FB88AA8219013083C1A563 /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; 331C8082294A63A400263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -95,6 +109,15 @@ path = RunnerTests; sourceTree = ""; }; + 561A1CA3EA2AB9F0AF534DA6 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 67399F5529C4A8216833DD0F /* Pods_Runner.framework */, + 744A688AA80D90AEFEEE8B5D /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( @@ -113,8 +136,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - B60295F6527672F63B9715A6 /* Pods */, - 98BD3EAB3093E15872776455 /* Frameworks */, + 2686497132B27AC72C49AAEC /* Pods */, + 561A1CA3EA2AB9F0AF534DA6 /* Frameworks */, ); sourceTree = ""; }; @@ -142,29 +165,6 @@ path = Runner; sourceTree = ""; }; - 98BD3EAB3093E15872776455 /* Frameworks */ = { - isa = PBXGroup; - children = ( - B37AC028927CF85F4F1E6AF4 /* Pods_Runner.framework */, - 8886DF0EEBBAB07EE7638A22 /* Pods_RunnerTests.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; - B60295F6527672F63B9715A6 /* Pods */ = { - isa = PBXGroup; - children = ( - 55189409B49D05C850A746FE /* Pods-Runner.debug.xcconfig */, - 868E6B058CFC333D7D5B670A /* Pods-Runner.release.xcconfig */, - AA801BE035164BEDC59AEA5D /* Pods-Runner.profile.xcconfig */, - 2C07D3E95C6ADEBD01A487A1 /* Pods-RunnerTests.debug.xcconfig */, - 52B80850C4A9D6972C04E12A /* Pods-RunnerTests.release.xcconfig */, - 6D520546C7CA0758836AEB7B /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 16081A976461F215B31F373D /* [CP] Check Pods Manifest.lock */, + A14A71C6D96CA2EED75B677B /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - ECBEEC4513F2C1A27B9F9639 /* Frameworks */, + BA3F021047083BC8B18D3E0D /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 32CCB81A5402B8B355886233 /* [CP] Check Pods Manifest.lock */, + FB86AE7D40B4243F86145360 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - F2DC197D00F362F12C2D5A6D /* [CP] Embed Pods Frameworks */, + 69881ECA2F74BD08FB925BC2 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -270,96 +270,96 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 16081A976461F215B31F373D /* [CP] Check Pods Manifest.lock */ = { + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); + name = "Thin Binary"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 32CCB81A5402B8B355886233 /* [CP] Check Pods Manifest.lock */ = { + 69881ECA2F74BD08FB925BC2 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputPaths = ( - "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); - name = "Thin Binary"; + name = "Run Script"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { + A14A71C6D96CA2EED75B677B /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "Run Script"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - F2DC197D00F362F12C2D5A6D /* [CP] Embed Pods Frameworks */ = { + FB86AE7D40B4243F86145360 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -473,6 +473,7 @@ CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; ENABLE_BITCODE = NO; INFOPLIST_FILE = Runner/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -487,12 +488,13 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 2C07D3E95C6ADEBD01A487A1 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = A219FA1BA4AD7A0CCE184560 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 1; GENERATE_INFOPLIST_FILE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; MARKETING_VERSION = 1.0; PRODUCT_BUNDLE_IDENTIFIER = com.example.gtkFlutter.RunnerTests; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -505,12 +507,13 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 52B80850C4A9D6972C04E12A /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 41F4E541C0B0FF23D9DA5C04 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 1; GENERATE_INFOPLIST_FILE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; MARKETING_VERSION = 1.0; PRODUCT_BUNDLE_IDENTIFIER = com.example.gtkFlutter.RunnerTests; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -521,12 +524,13 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 6D520546C7CA0758836AEB7B /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 11FB88AA8219013083C1A563 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 1; GENERATE_INFOPLIST_FILE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; MARKETING_VERSION = 1.0; PRODUCT_BUNDLE_IDENTIFIER = com.example.gtkFlutter.RunnerTests; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -655,6 +659,7 @@ CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; ENABLE_BITCODE = NO; INFOPLIST_FILE = Runner/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -677,6 +682,7 @@ CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; ENABLE_BITCODE = NO; INFOPLIST_FILE = Runner/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", diff --git a/firebase-get-to-know-flutter/step_06/macos/Podfile b/firebase-get-to-know-flutter/step_06/macos/Podfile index c795730db8..b52666a103 100644 --- a/firebase-get-to-know-flutter/step_06/macos/Podfile +++ b/firebase-get-to-know-flutter/step_06/macos/Podfile @@ -1,4 +1,4 @@ -platform :osx, '10.14' +platform :osx, '10.15' # CocoaPods analytics sends network stats synchronously affecting flutter build latency. ENV['COCOAPODS_DISABLE_STATS'] = 'true' diff --git a/firebase-get-to-know-flutter/step_06/macos/Runner.xcodeproj/project.pbxproj b/firebase-get-to-know-flutter/step_06/macos/Runner.xcodeproj/project.pbxproj index 24fdf06249..a8d91af57e 100644 --- a/firebase-get-to-know-flutter/step_06/macos/Runner.xcodeproj/project.pbxproj +++ b/firebase-get-to-know-flutter/step_06/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ - 203193014212ECC97C8C922A /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 564568BF62B09CDA743E4EA4 /* Pods_Runner.framework */; }; + 28823A3C182EE12E8A57E818 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8DE94FCB4C93C934DB82ED0C /* Pods_Runner.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 4DC40AAF5EF27875E93C5045 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 99C02A2276E6E2D7CA6E538C /* Pods_RunnerTests.framework */; }; + A5ADD6B5904AA82515194D84 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AB709786B7AC18EE740D5375 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,7 +62,7 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 25D676E7E62FC1C8B5A14D1D /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 18B4AB14ED0B2BC5C115306D /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -79,15 +79,15 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 38BA081A8D3C41280A93431B /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - 3CA5C22CDCEC34F15537CF53 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 564568BF62B09CDA743E4EA4 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 4086F8438660B0B0FA223108 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 5E0D4E06649BF28D8D882A8B /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 64B67A849939B632D038250B /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 8795A839324FE95A82F6F08C /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - 9047E4269D9A628EB4E508AF /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 8DE94FCB4C93C934DB82ED0C /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - 99C02A2276E6E2D7CA6E538C /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - ABEC84D092E3F21E5C186822 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + A224E642823E0216BF12C1D3 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + AB709786B7AC18EE740D5375 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + EB8947F87314B3A353FCF67C /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 4DC40AAF5EF27875E93C5045 /* Pods_RunnerTests.framework in Frameworks */, + A5ADD6B5904AA82515194D84 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,27 +103,13 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 203193014212ECC97C8C922A /* Pods_Runner.framework in Frameworks */, + 28823A3C182EE12E8A57E818 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 0A1CC31397BD0156F52A8340 /* Pods */ = { - isa = PBXGroup; - children = ( - 25D676E7E62FC1C8B5A14D1D /* Pods-Runner.debug.xcconfig */, - 3CA5C22CDCEC34F15537CF53 /* Pods-Runner.release.xcconfig */, - ABEC84D092E3F21E5C186822 /* Pods-Runner.profile.xcconfig */, - 9047E4269D9A628EB4E508AF /* Pods-RunnerTests.debug.xcconfig */, - 8795A839324FE95A82F6F08C /* Pods-RunnerTests.release.xcconfig */, - 38BA081A8D3C41280A93431B /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; 331C80D6294CF71000263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -151,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 0A1CC31397BD0156F52A8340 /* Pods */, + 82C11B689FF0D3F4BA2C6780 /* Pods */, ); sourceTree = ""; }; @@ -199,11 +185,25 @@ path = Runner; sourceTree = ""; }; + 82C11B689FF0D3F4BA2C6780 /* Pods */ = { + isa = PBXGroup; + children = ( + 5E0D4E06649BF28D8D882A8B /* Pods-Runner.debug.xcconfig */, + 18B4AB14ED0B2BC5C115306D /* Pods-Runner.release.xcconfig */, + 64B67A849939B632D038250B /* Pods-Runner.profile.xcconfig */, + EB8947F87314B3A353FCF67C /* Pods-RunnerTests.debug.xcconfig */, + A224E642823E0216BF12C1D3 /* Pods-RunnerTests.release.xcconfig */, + 4086F8438660B0B0FA223108 /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - 564568BF62B09CDA743E4EA4 /* Pods_Runner.framework */, - 99C02A2276E6E2D7CA6E538C /* Pods_RunnerTests.framework */, + 8DE94FCB4C93C934DB82ED0C /* Pods_Runner.framework */, + AB709786B7AC18EE740D5375 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - B9B47CC91AE302DCA3053624 /* [CP] Check Pods Manifest.lock */, + F3CEA25B7E77975C7E78773F /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 0898364673EBCE98B3186893 /* [CP] Check Pods Manifest.lock */, + 2A85CCABAD294FADC367351F /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 4BB300EB47FADD99DADAF70B /* [CP] Embed Pods Frameworks */, + 79EEF1D7B56626FC53E21766 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,7 +323,7 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 0898364673EBCE98B3186893 /* [CP] Check Pods Manifest.lock */ = { + 2A85CCABAD294FADC367351F /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -383,7 +383,7 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 4BB300EB47FADD99DADAF70B /* [CP] Embed Pods Frameworks */ = { + 79EEF1D7B56626FC53E21766 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -400,7 +400,7 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - B9B47CC91AE302DCA3053624 /* [CP] Check Pods Manifest.lock */ = { + F3CEA25B7E77975C7E78773F /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -473,11 +473,12 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 9047E4269D9A628EB4E508AF /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = EB8947F87314B3A353FCF67C /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; GENERATE_INFOPLIST_FILE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.15; MARKETING_VERSION = 1.0; PRODUCT_BUNDLE_IDENTIFIER = com.example.gtkFlutter.RunnerTests; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -488,11 +489,12 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 8795A839324FE95A82F6F08C /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = A224E642823E0216BF12C1D3 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; GENERATE_INFOPLIST_FILE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.15; MARKETING_VERSION = 1.0; PRODUCT_BUNDLE_IDENTIFIER = com.example.gtkFlutter.RunnerTests; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -503,11 +505,12 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 38BA081A8D3C41280A93431B /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 4086F8438660B0B0FA223108 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; GENERATE_INFOPLIST_FILE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.15; MARKETING_VERSION = 1.0; PRODUCT_BUNDLE_IDENTIFIER = com.example.gtkFlutter.RunnerTests; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -579,6 +582,7 @@ "$(inherited)", "@executable_path/../Frameworks", ); + MACOSX_DEPLOYMENT_TARGET = 10.15; PROVISIONING_PROFILE_SPECIFIER = ""; SWIFT_VERSION = 5.0; }; @@ -588,6 +592,7 @@ isa = XCBuildConfiguration; buildSettings = { CODE_SIGN_STYLE = Manual; + MACOSX_DEPLOYMENT_TARGET = 10.15; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Profile; @@ -711,6 +716,7 @@ "$(inherited)", "@executable_path/../Frameworks", ); + MACOSX_DEPLOYMENT_TARGET = 10.15; PROVISIONING_PROFILE_SPECIFIER = ""; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 5.0; @@ -731,6 +737,7 @@ "$(inherited)", "@executable_path/../Frameworks", ); + MACOSX_DEPLOYMENT_TARGET = 10.15; PROVISIONING_PROFILE_SPECIFIER = ""; SWIFT_VERSION = 5.0; }; @@ -740,6 +747,7 @@ isa = XCBuildConfiguration; buildSettings = { CODE_SIGN_STYLE = Manual; + MACOSX_DEPLOYMENT_TARGET = 10.15; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; @@ -748,6 +756,7 @@ isa = XCBuildConfiguration; buildSettings = { CODE_SIGN_STYLE = Automatic; + MACOSX_DEPLOYMENT_TARGET = 10.15; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; diff --git a/firebase-get-to-know-flutter/step_06/macos/Runner/AppDelegate.swift b/firebase-get-to-know-flutter/step_06/macos/Runner/AppDelegate.swift index 8e02df2888..b3c1761412 100644 --- a/firebase-get-to-know-flutter/step_06/macos/Runner/AppDelegate.swift +++ b/firebase-get-to-know-flutter/step_06/macos/Runner/AppDelegate.swift @@ -6,4 +6,8 @@ class AppDelegate: FlutterAppDelegate { override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { return true } + + override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { + return true + } } diff --git a/firebase-get-to-know-flutter/step_06/pubspec.yaml b/firebase-get-to-know-flutter/step_06/pubspec.yaml index 9f35177d5c..7a39a8a411 100644 --- a/firebase-get-to-know-flutter/step_06/pubspec.yaml +++ b/firebase-get-to-know-flutter/step_06/pubspec.yaml @@ -32,17 +32,16 @@ dependencies: flutter: sdk: flutter - # The following adds the Cupertino Icons font to your application. # Use with the CupertinoIcons class for iOS style icons. cupertino_icons: ^1.0.8 google_fonts: ^6.2.1 - go_router: ^14.2.7 - cloud_firestore: ^4.14.0 - firebase_auth: ^4.16.0 - firebase_core: ^2.24.2 + go_router: ^14.3.0 + cloud_firestore: ^5.4.4 + firebase_auth: ^5.3.1 + firebase_core: ^3.6.0 provider: ^6.1.2 - firebase_ui_auth: ^1.13.0 + firebase_ui_auth: ^1.16.0 dev_dependencies: flutter_test: @@ -53,7 +52,7 @@ dev_dependencies: # activated in the `analysis_options.yaml` file located at the root of your # package. See that file for information about deactivating specific lint # rules and activating additional ones. - flutter_lints: ^4.0.0 + flutter_lints: ^5.0.0 # For information on the generic Dart part of this file, see the # following page: https://dart.dev/tools/pub/pubspec diff --git a/firebase-get-to-know-flutter/step_06/web/index.html b/firebase-get-to-know-flutter/step_06/web/index.html index 92f64576d8..ec3bcd0112 100644 --- a/firebase-get-to-know-flutter/step_06/web/index.html +++ b/firebase-get-to-know-flutter/step_06/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/firebase-get-to-know-flutter/step_07/.gitignore b/firebase-get-to-know-flutter/step_07/.gitignore index 29a3a5017f..79c113f9b5 100644 --- a/firebase-get-to-know-flutter/step_07/.gitignore +++ b/firebase-get-to-know-flutter/step_07/.gitignore @@ -5,9 +5,11 @@ *.swp .DS_Store .atom/ +.build/ .buildlog/ .history .svn/ +.swiftpm/ migrate_working_dir/ # IntelliJ related diff --git a/firebase-get-to-know-flutter/step_07/android/app/build.gradle b/firebase-get-to-know-flutter/step_07/android/app/build.gradle index 8f860b1041..ad5859ad24 100644 --- a/firebase-get-to-know-flutter/step_07/android/app/build.gradle +++ b/firebase-get-to-know-flutter/step_07/android/app/build.gradle @@ -24,7 +24,7 @@ android { applicationId = "com.example.gtk_flutter" // You can update the following values to match your application needs. // For more information, see: https://flutter.dev/to/review-gradle-config. - minSdk = 21 + minSdk = 23 targetSdk = flutter.targetSdkVersion versionCode = flutter.versionCode versionName = flutter.versionName diff --git a/firebase-get-to-know-flutter/step_07/android/gradle.properties b/firebase-get-to-know-flutter/step_07/android/gradle.properties index 2597170821..f018a61817 100644 --- a/firebase-get-to-know-flutter/step_07/android/gradle.properties +++ b/firebase-get-to-know-flutter/step_07/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/firebase-get-to-know-flutter/step_07/android/gradle/wrapper/gradle-wrapper.properties b/firebase-get-to-know-flutter/step_07/android/gradle/wrapper/gradle-wrapper.properties index e1ca574ef0..7bb2df6ba6 100644 --- a/firebase-get-to-know-flutter/step_07/android/gradle/wrapper/gradle-wrapper.properties +++ b/firebase-get-to-know-flutter/step_07/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip diff --git a/firebase-get-to-know-flutter/step_07/android/settings.gradle b/firebase-get-to-know-flutter/step_07/android/settings.gradle index 536165d35a..b9e43bd376 100644 --- a/firebase-get-to-know-flutter/step_07/android/settings.gradle +++ b/firebase-get-to-know-flutter/step_07/android/settings.gradle @@ -18,8 +18,8 @@ pluginManagement { plugins { id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "7.3.0" apply false - id "org.jetbrains.kotlin.android" version "1.7.10" apply false + id "com.android.application" version "8.1.0" apply false + id "org.jetbrains.kotlin.android" version "1.8.22" apply false } include ":app" diff --git a/firebase-get-to-know-flutter/step_07/ios/Podfile b/firebase-get-to-know-flutter/step_07/ios/Podfile index d97f17e223..3e44f9c6f7 100644 --- a/firebase-get-to-know-flutter/step_07/ios/Podfile +++ b/firebase-get-to-know-flutter/step_07/ios/Podfile @@ -1,5 +1,5 @@ # Uncomment this line to define a global platform for your project -# platform :ios, '12.0' +platform :ios, '13.0' # CocoaPods analytics sends network stats synchronously affecting flutter build latency. ENV['COCOAPODS_DISABLE_STATS'] = 'true' diff --git a/firebase-get-to-know-flutter/step_07/ios/Runner.xcodeproj/project.pbxproj b/firebase-get-to-know-flutter/step_07/ios/Runner.xcodeproj/project.pbxproj index cff41d9a0e..1fec3b176b 100644 --- a/firebase-get-to-know-flutter/step_07/ios/Runner.xcodeproj/project.pbxproj +++ b/firebase-get-to-know-flutter/step_07/ios/Runner.xcodeproj/project.pbxproj @@ -10,12 +10,12 @@ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; + 48F92C47F6785B74B10426B6 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 67399F5529C4A8216833DD0F /* Pods_Runner.framework */; }; + 55A8A58D691856D8A8E2F81B /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 744A688AA80D90AEFEEE8B5D /* Pods_RunnerTests.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; - 8CD0E9720BD91BDBBD9340F6 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8886DF0EEBBAB07EE7638A22 /* Pods_RunnerTests.framework */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - C3D37E9D20867668255235F1 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B37AC028927CF85F4F1E6AF4 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,20 +42,20 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 11FB88AA8219013083C1A563 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 2C07D3E95C6ADEBD01A487A1 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 52B80850C4A9D6972C04E12A /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - 55189409B49D05C850A746FE /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 6D520546C7CA0758836AEB7B /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 41F4E541C0B0FF23D9DA5C04 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 67399F5529C4A8216833DD0F /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 744A688AA80D90AEFEEE8B5D /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 868E6B058CFC333D7D5B670A /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 8886DF0EEBBAB07EE7638A22 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 822914433177537C9D4A073F /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 8C22EFD2575ACEF2BA9301A3 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -63,8 +63,8 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - AA801BE035164BEDC59AEA5D /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - B37AC028927CF85F4F1E6AF4 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + A219FA1BA4AD7A0CCE184560 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + B37F3F7BA1352CC58F5B42CE /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -72,21 +72,35 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - C3D37E9D20867668255235F1 /* Pods_Runner.framework in Frameworks */, + 48F92C47F6785B74B10426B6 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - ECBEEC4513F2C1A27B9F9639 /* Frameworks */ = { + BA3F021047083BC8B18D3E0D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 8CD0E9720BD91BDBBD9340F6 /* Pods_RunnerTests.framework in Frameworks */, + 55A8A58D691856D8A8E2F81B /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 2686497132B27AC72C49AAEC /* Pods */ = { + isa = PBXGroup; + children = ( + B37F3F7BA1352CC58F5B42CE /* Pods-Runner.debug.xcconfig */, + 822914433177537C9D4A073F /* Pods-Runner.release.xcconfig */, + 8C22EFD2575ACEF2BA9301A3 /* Pods-Runner.profile.xcconfig */, + A219FA1BA4AD7A0CCE184560 /* Pods-RunnerTests.debug.xcconfig */, + 41F4E541C0B0FF23D9DA5C04 /* Pods-RunnerTests.release.xcconfig */, + 11FB88AA8219013083C1A563 /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; 331C8082294A63A400263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -95,6 +109,15 @@ path = RunnerTests; sourceTree = ""; }; + 561A1CA3EA2AB9F0AF534DA6 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 67399F5529C4A8216833DD0F /* Pods_Runner.framework */, + 744A688AA80D90AEFEEE8B5D /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( @@ -113,8 +136,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - B60295F6527672F63B9715A6 /* Pods */, - 98BD3EAB3093E15872776455 /* Frameworks */, + 2686497132B27AC72C49AAEC /* Pods */, + 561A1CA3EA2AB9F0AF534DA6 /* Frameworks */, ); sourceTree = ""; }; @@ -142,29 +165,6 @@ path = Runner; sourceTree = ""; }; - 98BD3EAB3093E15872776455 /* Frameworks */ = { - isa = PBXGroup; - children = ( - B37AC028927CF85F4F1E6AF4 /* Pods_Runner.framework */, - 8886DF0EEBBAB07EE7638A22 /* Pods_RunnerTests.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; - B60295F6527672F63B9715A6 /* Pods */ = { - isa = PBXGroup; - children = ( - 55189409B49D05C850A746FE /* Pods-Runner.debug.xcconfig */, - 868E6B058CFC333D7D5B670A /* Pods-Runner.release.xcconfig */, - AA801BE035164BEDC59AEA5D /* Pods-Runner.profile.xcconfig */, - 2C07D3E95C6ADEBD01A487A1 /* Pods-RunnerTests.debug.xcconfig */, - 52B80850C4A9D6972C04E12A /* Pods-RunnerTests.release.xcconfig */, - 6D520546C7CA0758836AEB7B /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 16081A976461F215B31F373D /* [CP] Check Pods Manifest.lock */, + A14A71C6D96CA2EED75B677B /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - ECBEEC4513F2C1A27B9F9639 /* Frameworks */, + BA3F021047083BC8B18D3E0D /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 32CCB81A5402B8B355886233 /* [CP] Check Pods Manifest.lock */, + FB86AE7D40B4243F86145360 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - F2DC197D00F362F12C2D5A6D /* [CP] Embed Pods Frameworks */, + 69881ECA2F74BD08FB925BC2 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -270,96 +270,96 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 16081A976461F215B31F373D /* [CP] Check Pods Manifest.lock */ = { + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); + name = "Thin Binary"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 32CCB81A5402B8B355886233 /* [CP] Check Pods Manifest.lock */ = { + 69881ECA2F74BD08FB925BC2 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputPaths = ( - "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); - name = "Thin Binary"; + name = "Run Script"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { + A14A71C6D96CA2EED75B677B /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "Run Script"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - F2DC197D00F362F12C2D5A6D /* [CP] Embed Pods Frameworks */ = { + FB86AE7D40B4243F86145360 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -473,6 +473,7 @@ CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; ENABLE_BITCODE = NO; INFOPLIST_FILE = Runner/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -487,12 +488,13 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 2C07D3E95C6ADEBD01A487A1 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = A219FA1BA4AD7A0CCE184560 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 1; GENERATE_INFOPLIST_FILE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; MARKETING_VERSION = 1.0; PRODUCT_BUNDLE_IDENTIFIER = com.example.gtkFlutter.RunnerTests; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -505,12 +507,13 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 52B80850C4A9D6972C04E12A /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 41F4E541C0B0FF23D9DA5C04 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 1; GENERATE_INFOPLIST_FILE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; MARKETING_VERSION = 1.0; PRODUCT_BUNDLE_IDENTIFIER = com.example.gtkFlutter.RunnerTests; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -521,12 +524,13 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 6D520546C7CA0758836AEB7B /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 11FB88AA8219013083C1A563 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 1; GENERATE_INFOPLIST_FILE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; MARKETING_VERSION = 1.0; PRODUCT_BUNDLE_IDENTIFIER = com.example.gtkFlutter.RunnerTests; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -655,6 +659,7 @@ CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; ENABLE_BITCODE = NO; INFOPLIST_FILE = Runner/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -677,6 +682,7 @@ CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; ENABLE_BITCODE = NO; INFOPLIST_FILE = Runner/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", diff --git a/firebase-get-to-know-flutter/step_07/macos/Podfile b/firebase-get-to-know-flutter/step_07/macos/Podfile index c795730db8..b52666a103 100644 --- a/firebase-get-to-know-flutter/step_07/macos/Podfile +++ b/firebase-get-to-know-flutter/step_07/macos/Podfile @@ -1,4 +1,4 @@ -platform :osx, '10.14' +platform :osx, '10.15' # CocoaPods analytics sends network stats synchronously affecting flutter build latency. ENV['COCOAPODS_DISABLE_STATS'] = 'true' diff --git a/firebase-get-to-know-flutter/step_07/macos/Runner.xcodeproj/project.pbxproj b/firebase-get-to-know-flutter/step_07/macos/Runner.xcodeproj/project.pbxproj index 24fdf06249..a8d91af57e 100644 --- a/firebase-get-to-know-flutter/step_07/macos/Runner.xcodeproj/project.pbxproj +++ b/firebase-get-to-know-flutter/step_07/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ - 203193014212ECC97C8C922A /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 564568BF62B09CDA743E4EA4 /* Pods_Runner.framework */; }; + 28823A3C182EE12E8A57E818 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8DE94FCB4C93C934DB82ED0C /* Pods_Runner.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 4DC40AAF5EF27875E93C5045 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 99C02A2276E6E2D7CA6E538C /* Pods_RunnerTests.framework */; }; + A5ADD6B5904AA82515194D84 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AB709786B7AC18EE740D5375 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,7 +62,7 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 25D676E7E62FC1C8B5A14D1D /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 18B4AB14ED0B2BC5C115306D /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -79,15 +79,15 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 38BA081A8D3C41280A93431B /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - 3CA5C22CDCEC34F15537CF53 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 564568BF62B09CDA743E4EA4 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 4086F8438660B0B0FA223108 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 5E0D4E06649BF28D8D882A8B /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 64B67A849939B632D038250B /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 8795A839324FE95A82F6F08C /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - 9047E4269D9A628EB4E508AF /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 8DE94FCB4C93C934DB82ED0C /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - 99C02A2276E6E2D7CA6E538C /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - ABEC84D092E3F21E5C186822 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + A224E642823E0216BF12C1D3 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + AB709786B7AC18EE740D5375 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + EB8947F87314B3A353FCF67C /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 4DC40AAF5EF27875E93C5045 /* Pods_RunnerTests.framework in Frameworks */, + A5ADD6B5904AA82515194D84 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,27 +103,13 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 203193014212ECC97C8C922A /* Pods_Runner.framework in Frameworks */, + 28823A3C182EE12E8A57E818 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 0A1CC31397BD0156F52A8340 /* Pods */ = { - isa = PBXGroup; - children = ( - 25D676E7E62FC1C8B5A14D1D /* Pods-Runner.debug.xcconfig */, - 3CA5C22CDCEC34F15537CF53 /* Pods-Runner.release.xcconfig */, - ABEC84D092E3F21E5C186822 /* Pods-Runner.profile.xcconfig */, - 9047E4269D9A628EB4E508AF /* Pods-RunnerTests.debug.xcconfig */, - 8795A839324FE95A82F6F08C /* Pods-RunnerTests.release.xcconfig */, - 38BA081A8D3C41280A93431B /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; 331C80D6294CF71000263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -151,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 0A1CC31397BD0156F52A8340 /* Pods */, + 82C11B689FF0D3F4BA2C6780 /* Pods */, ); sourceTree = ""; }; @@ -199,11 +185,25 @@ path = Runner; sourceTree = ""; }; + 82C11B689FF0D3F4BA2C6780 /* Pods */ = { + isa = PBXGroup; + children = ( + 5E0D4E06649BF28D8D882A8B /* Pods-Runner.debug.xcconfig */, + 18B4AB14ED0B2BC5C115306D /* Pods-Runner.release.xcconfig */, + 64B67A849939B632D038250B /* Pods-Runner.profile.xcconfig */, + EB8947F87314B3A353FCF67C /* Pods-RunnerTests.debug.xcconfig */, + A224E642823E0216BF12C1D3 /* Pods-RunnerTests.release.xcconfig */, + 4086F8438660B0B0FA223108 /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - 564568BF62B09CDA743E4EA4 /* Pods_Runner.framework */, - 99C02A2276E6E2D7CA6E538C /* Pods_RunnerTests.framework */, + 8DE94FCB4C93C934DB82ED0C /* Pods_Runner.framework */, + AB709786B7AC18EE740D5375 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - B9B47CC91AE302DCA3053624 /* [CP] Check Pods Manifest.lock */, + F3CEA25B7E77975C7E78773F /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 0898364673EBCE98B3186893 /* [CP] Check Pods Manifest.lock */, + 2A85CCABAD294FADC367351F /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 4BB300EB47FADD99DADAF70B /* [CP] Embed Pods Frameworks */, + 79EEF1D7B56626FC53E21766 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,7 +323,7 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 0898364673EBCE98B3186893 /* [CP] Check Pods Manifest.lock */ = { + 2A85CCABAD294FADC367351F /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -383,7 +383,7 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 4BB300EB47FADD99DADAF70B /* [CP] Embed Pods Frameworks */ = { + 79EEF1D7B56626FC53E21766 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -400,7 +400,7 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - B9B47CC91AE302DCA3053624 /* [CP] Check Pods Manifest.lock */ = { + F3CEA25B7E77975C7E78773F /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -473,11 +473,12 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 9047E4269D9A628EB4E508AF /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = EB8947F87314B3A353FCF67C /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; GENERATE_INFOPLIST_FILE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.15; MARKETING_VERSION = 1.0; PRODUCT_BUNDLE_IDENTIFIER = com.example.gtkFlutter.RunnerTests; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -488,11 +489,12 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 8795A839324FE95A82F6F08C /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = A224E642823E0216BF12C1D3 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; GENERATE_INFOPLIST_FILE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.15; MARKETING_VERSION = 1.0; PRODUCT_BUNDLE_IDENTIFIER = com.example.gtkFlutter.RunnerTests; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -503,11 +505,12 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 38BA081A8D3C41280A93431B /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 4086F8438660B0B0FA223108 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; GENERATE_INFOPLIST_FILE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.15; MARKETING_VERSION = 1.0; PRODUCT_BUNDLE_IDENTIFIER = com.example.gtkFlutter.RunnerTests; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -579,6 +582,7 @@ "$(inherited)", "@executable_path/../Frameworks", ); + MACOSX_DEPLOYMENT_TARGET = 10.15; PROVISIONING_PROFILE_SPECIFIER = ""; SWIFT_VERSION = 5.0; }; @@ -588,6 +592,7 @@ isa = XCBuildConfiguration; buildSettings = { CODE_SIGN_STYLE = Manual; + MACOSX_DEPLOYMENT_TARGET = 10.15; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Profile; @@ -711,6 +716,7 @@ "$(inherited)", "@executable_path/../Frameworks", ); + MACOSX_DEPLOYMENT_TARGET = 10.15; PROVISIONING_PROFILE_SPECIFIER = ""; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 5.0; @@ -731,6 +737,7 @@ "$(inherited)", "@executable_path/../Frameworks", ); + MACOSX_DEPLOYMENT_TARGET = 10.15; PROVISIONING_PROFILE_SPECIFIER = ""; SWIFT_VERSION = 5.0; }; @@ -740,6 +747,7 @@ isa = XCBuildConfiguration; buildSettings = { CODE_SIGN_STYLE = Manual; + MACOSX_DEPLOYMENT_TARGET = 10.15; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; @@ -748,6 +756,7 @@ isa = XCBuildConfiguration; buildSettings = { CODE_SIGN_STYLE = Automatic; + MACOSX_DEPLOYMENT_TARGET = 10.15; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; diff --git a/firebase-get-to-know-flutter/step_07/macos/Runner/AppDelegate.swift b/firebase-get-to-know-flutter/step_07/macos/Runner/AppDelegate.swift index 8e02df2888..b3c1761412 100644 --- a/firebase-get-to-know-flutter/step_07/macos/Runner/AppDelegate.swift +++ b/firebase-get-to-know-flutter/step_07/macos/Runner/AppDelegate.swift @@ -6,4 +6,8 @@ class AppDelegate: FlutterAppDelegate { override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { return true } + + override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { + return true + } } diff --git a/firebase-get-to-know-flutter/step_07/pubspec.yaml b/firebase-get-to-know-flutter/step_07/pubspec.yaml index 9f35177d5c..7a39a8a411 100644 --- a/firebase-get-to-know-flutter/step_07/pubspec.yaml +++ b/firebase-get-to-know-flutter/step_07/pubspec.yaml @@ -32,17 +32,16 @@ dependencies: flutter: sdk: flutter - # The following adds the Cupertino Icons font to your application. # Use with the CupertinoIcons class for iOS style icons. cupertino_icons: ^1.0.8 google_fonts: ^6.2.1 - go_router: ^14.2.7 - cloud_firestore: ^4.14.0 - firebase_auth: ^4.16.0 - firebase_core: ^2.24.2 + go_router: ^14.3.0 + cloud_firestore: ^5.4.4 + firebase_auth: ^5.3.1 + firebase_core: ^3.6.0 provider: ^6.1.2 - firebase_ui_auth: ^1.13.0 + firebase_ui_auth: ^1.16.0 dev_dependencies: flutter_test: @@ -53,7 +52,7 @@ dev_dependencies: # activated in the `analysis_options.yaml` file located at the root of your # package. See that file for information about deactivating specific lint # rules and activating additional ones. - flutter_lints: ^4.0.0 + flutter_lints: ^5.0.0 # For information on the generic Dart part of this file, see the # following page: https://dart.dev/tools/pub/pubspec diff --git a/firebase-get-to-know-flutter/step_07/web/index.html b/firebase-get-to-know-flutter/step_07/web/index.html index 92f64576d8..ec3bcd0112 100644 --- a/firebase-get-to-know-flutter/step_07/web/index.html +++ b/firebase-get-to-know-flutter/step_07/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/firebase-get-to-know-flutter/step_09/.gitignore b/firebase-get-to-know-flutter/step_09/.gitignore index 29a3a5017f..79c113f9b5 100644 --- a/firebase-get-to-know-flutter/step_09/.gitignore +++ b/firebase-get-to-know-flutter/step_09/.gitignore @@ -5,9 +5,11 @@ *.swp .DS_Store .atom/ +.build/ .buildlog/ .history .svn/ +.swiftpm/ migrate_working_dir/ # IntelliJ related diff --git a/firebase-get-to-know-flutter/step_09/android/app/build.gradle b/firebase-get-to-know-flutter/step_09/android/app/build.gradle index 8f860b1041..ad5859ad24 100644 --- a/firebase-get-to-know-flutter/step_09/android/app/build.gradle +++ b/firebase-get-to-know-flutter/step_09/android/app/build.gradle @@ -24,7 +24,7 @@ android { applicationId = "com.example.gtk_flutter" // You can update the following values to match your application needs. // For more information, see: https://flutter.dev/to/review-gradle-config. - minSdk = 21 + minSdk = 23 targetSdk = flutter.targetSdkVersion versionCode = flutter.versionCode versionName = flutter.versionName diff --git a/firebase-get-to-know-flutter/step_09/android/gradle.properties b/firebase-get-to-know-flutter/step_09/android/gradle.properties index 2597170821..f018a61817 100644 --- a/firebase-get-to-know-flutter/step_09/android/gradle.properties +++ b/firebase-get-to-know-flutter/step_09/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/firebase-get-to-know-flutter/step_09/android/gradle/wrapper/gradle-wrapper.properties b/firebase-get-to-know-flutter/step_09/android/gradle/wrapper/gradle-wrapper.properties index e1ca574ef0..7bb2df6ba6 100644 --- a/firebase-get-to-know-flutter/step_09/android/gradle/wrapper/gradle-wrapper.properties +++ b/firebase-get-to-know-flutter/step_09/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip diff --git a/firebase-get-to-know-flutter/step_09/android/settings.gradle b/firebase-get-to-know-flutter/step_09/android/settings.gradle index 536165d35a..b9e43bd376 100644 --- a/firebase-get-to-know-flutter/step_09/android/settings.gradle +++ b/firebase-get-to-know-flutter/step_09/android/settings.gradle @@ -18,8 +18,8 @@ pluginManagement { plugins { id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "7.3.0" apply false - id "org.jetbrains.kotlin.android" version "1.7.10" apply false + id "com.android.application" version "8.1.0" apply false + id "org.jetbrains.kotlin.android" version "1.8.22" apply false } include ":app" diff --git a/firebase-get-to-know-flutter/step_09/ios/Podfile b/firebase-get-to-know-flutter/step_09/ios/Podfile index d97f17e223..3e44f9c6f7 100644 --- a/firebase-get-to-know-flutter/step_09/ios/Podfile +++ b/firebase-get-to-know-flutter/step_09/ios/Podfile @@ -1,5 +1,5 @@ # Uncomment this line to define a global platform for your project -# platform :ios, '12.0' +platform :ios, '13.0' # CocoaPods analytics sends network stats synchronously affecting flutter build latency. ENV['COCOAPODS_DISABLE_STATS'] = 'true' diff --git a/firebase-get-to-know-flutter/step_09/ios/Runner.xcodeproj/project.pbxproj b/firebase-get-to-know-flutter/step_09/ios/Runner.xcodeproj/project.pbxproj index cff41d9a0e..1fec3b176b 100644 --- a/firebase-get-to-know-flutter/step_09/ios/Runner.xcodeproj/project.pbxproj +++ b/firebase-get-to-know-flutter/step_09/ios/Runner.xcodeproj/project.pbxproj @@ -10,12 +10,12 @@ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; + 48F92C47F6785B74B10426B6 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 67399F5529C4A8216833DD0F /* Pods_Runner.framework */; }; + 55A8A58D691856D8A8E2F81B /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 744A688AA80D90AEFEEE8B5D /* Pods_RunnerTests.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; - 8CD0E9720BD91BDBBD9340F6 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8886DF0EEBBAB07EE7638A22 /* Pods_RunnerTests.framework */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - C3D37E9D20867668255235F1 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B37AC028927CF85F4F1E6AF4 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,20 +42,20 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 11FB88AA8219013083C1A563 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 2C07D3E95C6ADEBD01A487A1 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 52B80850C4A9D6972C04E12A /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - 55189409B49D05C850A746FE /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 6D520546C7CA0758836AEB7B /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 41F4E541C0B0FF23D9DA5C04 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 67399F5529C4A8216833DD0F /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 744A688AA80D90AEFEEE8B5D /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 868E6B058CFC333D7D5B670A /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 8886DF0EEBBAB07EE7638A22 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 822914433177537C9D4A073F /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 8C22EFD2575ACEF2BA9301A3 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -63,8 +63,8 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - AA801BE035164BEDC59AEA5D /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - B37AC028927CF85F4F1E6AF4 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + A219FA1BA4AD7A0CCE184560 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + B37F3F7BA1352CC58F5B42CE /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -72,21 +72,35 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - C3D37E9D20867668255235F1 /* Pods_Runner.framework in Frameworks */, + 48F92C47F6785B74B10426B6 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - ECBEEC4513F2C1A27B9F9639 /* Frameworks */ = { + BA3F021047083BC8B18D3E0D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 8CD0E9720BD91BDBBD9340F6 /* Pods_RunnerTests.framework in Frameworks */, + 55A8A58D691856D8A8E2F81B /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 2686497132B27AC72C49AAEC /* Pods */ = { + isa = PBXGroup; + children = ( + B37F3F7BA1352CC58F5B42CE /* Pods-Runner.debug.xcconfig */, + 822914433177537C9D4A073F /* Pods-Runner.release.xcconfig */, + 8C22EFD2575ACEF2BA9301A3 /* Pods-Runner.profile.xcconfig */, + A219FA1BA4AD7A0CCE184560 /* Pods-RunnerTests.debug.xcconfig */, + 41F4E541C0B0FF23D9DA5C04 /* Pods-RunnerTests.release.xcconfig */, + 11FB88AA8219013083C1A563 /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; 331C8082294A63A400263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -95,6 +109,15 @@ path = RunnerTests; sourceTree = ""; }; + 561A1CA3EA2AB9F0AF534DA6 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 67399F5529C4A8216833DD0F /* Pods_Runner.framework */, + 744A688AA80D90AEFEEE8B5D /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( @@ -113,8 +136,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - B60295F6527672F63B9715A6 /* Pods */, - 98BD3EAB3093E15872776455 /* Frameworks */, + 2686497132B27AC72C49AAEC /* Pods */, + 561A1CA3EA2AB9F0AF534DA6 /* Frameworks */, ); sourceTree = ""; }; @@ -142,29 +165,6 @@ path = Runner; sourceTree = ""; }; - 98BD3EAB3093E15872776455 /* Frameworks */ = { - isa = PBXGroup; - children = ( - B37AC028927CF85F4F1E6AF4 /* Pods_Runner.framework */, - 8886DF0EEBBAB07EE7638A22 /* Pods_RunnerTests.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; - B60295F6527672F63B9715A6 /* Pods */ = { - isa = PBXGroup; - children = ( - 55189409B49D05C850A746FE /* Pods-Runner.debug.xcconfig */, - 868E6B058CFC333D7D5B670A /* Pods-Runner.release.xcconfig */, - AA801BE035164BEDC59AEA5D /* Pods-Runner.profile.xcconfig */, - 2C07D3E95C6ADEBD01A487A1 /* Pods-RunnerTests.debug.xcconfig */, - 52B80850C4A9D6972C04E12A /* Pods-RunnerTests.release.xcconfig */, - 6D520546C7CA0758836AEB7B /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 16081A976461F215B31F373D /* [CP] Check Pods Manifest.lock */, + A14A71C6D96CA2EED75B677B /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - ECBEEC4513F2C1A27B9F9639 /* Frameworks */, + BA3F021047083BC8B18D3E0D /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 32CCB81A5402B8B355886233 /* [CP] Check Pods Manifest.lock */, + FB86AE7D40B4243F86145360 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - F2DC197D00F362F12C2D5A6D /* [CP] Embed Pods Frameworks */, + 69881ECA2F74BD08FB925BC2 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -270,96 +270,96 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 16081A976461F215B31F373D /* [CP] Check Pods Manifest.lock */ = { + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); + name = "Thin Binary"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 32CCB81A5402B8B355886233 /* [CP] Check Pods Manifest.lock */ = { + 69881ECA2F74BD08FB925BC2 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputPaths = ( - "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); - name = "Thin Binary"; + name = "Run Script"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { + A14A71C6D96CA2EED75B677B /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "Run Script"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - F2DC197D00F362F12C2D5A6D /* [CP] Embed Pods Frameworks */ = { + FB86AE7D40B4243F86145360 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -473,6 +473,7 @@ CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; ENABLE_BITCODE = NO; INFOPLIST_FILE = Runner/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -487,12 +488,13 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 2C07D3E95C6ADEBD01A487A1 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = A219FA1BA4AD7A0CCE184560 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 1; GENERATE_INFOPLIST_FILE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; MARKETING_VERSION = 1.0; PRODUCT_BUNDLE_IDENTIFIER = com.example.gtkFlutter.RunnerTests; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -505,12 +507,13 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 52B80850C4A9D6972C04E12A /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 41F4E541C0B0FF23D9DA5C04 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 1; GENERATE_INFOPLIST_FILE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; MARKETING_VERSION = 1.0; PRODUCT_BUNDLE_IDENTIFIER = com.example.gtkFlutter.RunnerTests; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -521,12 +524,13 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 6D520546C7CA0758836AEB7B /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 11FB88AA8219013083C1A563 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 1; GENERATE_INFOPLIST_FILE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; MARKETING_VERSION = 1.0; PRODUCT_BUNDLE_IDENTIFIER = com.example.gtkFlutter.RunnerTests; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -655,6 +659,7 @@ CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; ENABLE_BITCODE = NO; INFOPLIST_FILE = Runner/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -677,6 +682,7 @@ CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; ENABLE_BITCODE = NO; INFOPLIST_FILE = Runner/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", diff --git a/firebase-get-to-know-flutter/step_09/macos/Podfile b/firebase-get-to-know-flutter/step_09/macos/Podfile index c795730db8..b52666a103 100644 --- a/firebase-get-to-know-flutter/step_09/macos/Podfile +++ b/firebase-get-to-know-flutter/step_09/macos/Podfile @@ -1,4 +1,4 @@ -platform :osx, '10.14' +platform :osx, '10.15' # CocoaPods analytics sends network stats synchronously affecting flutter build latency. ENV['COCOAPODS_DISABLE_STATS'] = 'true' diff --git a/firebase-get-to-know-flutter/step_09/macos/Runner.xcodeproj/project.pbxproj b/firebase-get-to-know-flutter/step_09/macos/Runner.xcodeproj/project.pbxproj index 24fdf06249..a8d91af57e 100644 --- a/firebase-get-to-know-flutter/step_09/macos/Runner.xcodeproj/project.pbxproj +++ b/firebase-get-to-know-flutter/step_09/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ - 203193014212ECC97C8C922A /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 564568BF62B09CDA743E4EA4 /* Pods_Runner.framework */; }; + 28823A3C182EE12E8A57E818 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8DE94FCB4C93C934DB82ED0C /* Pods_Runner.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 4DC40AAF5EF27875E93C5045 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 99C02A2276E6E2D7CA6E538C /* Pods_RunnerTests.framework */; }; + A5ADD6B5904AA82515194D84 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AB709786B7AC18EE740D5375 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,7 +62,7 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 25D676E7E62FC1C8B5A14D1D /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 18B4AB14ED0B2BC5C115306D /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -79,15 +79,15 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 38BA081A8D3C41280A93431B /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - 3CA5C22CDCEC34F15537CF53 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 564568BF62B09CDA743E4EA4 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 4086F8438660B0B0FA223108 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 5E0D4E06649BF28D8D882A8B /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 64B67A849939B632D038250B /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 8795A839324FE95A82F6F08C /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - 9047E4269D9A628EB4E508AF /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 8DE94FCB4C93C934DB82ED0C /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - 99C02A2276E6E2D7CA6E538C /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - ABEC84D092E3F21E5C186822 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + A224E642823E0216BF12C1D3 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + AB709786B7AC18EE740D5375 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + EB8947F87314B3A353FCF67C /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 4DC40AAF5EF27875E93C5045 /* Pods_RunnerTests.framework in Frameworks */, + A5ADD6B5904AA82515194D84 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,27 +103,13 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 203193014212ECC97C8C922A /* Pods_Runner.framework in Frameworks */, + 28823A3C182EE12E8A57E818 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 0A1CC31397BD0156F52A8340 /* Pods */ = { - isa = PBXGroup; - children = ( - 25D676E7E62FC1C8B5A14D1D /* Pods-Runner.debug.xcconfig */, - 3CA5C22CDCEC34F15537CF53 /* Pods-Runner.release.xcconfig */, - ABEC84D092E3F21E5C186822 /* Pods-Runner.profile.xcconfig */, - 9047E4269D9A628EB4E508AF /* Pods-RunnerTests.debug.xcconfig */, - 8795A839324FE95A82F6F08C /* Pods-RunnerTests.release.xcconfig */, - 38BA081A8D3C41280A93431B /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; 331C80D6294CF71000263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -151,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 0A1CC31397BD0156F52A8340 /* Pods */, + 82C11B689FF0D3F4BA2C6780 /* Pods */, ); sourceTree = ""; }; @@ -199,11 +185,25 @@ path = Runner; sourceTree = ""; }; + 82C11B689FF0D3F4BA2C6780 /* Pods */ = { + isa = PBXGroup; + children = ( + 5E0D4E06649BF28D8D882A8B /* Pods-Runner.debug.xcconfig */, + 18B4AB14ED0B2BC5C115306D /* Pods-Runner.release.xcconfig */, + 64B67A849939B632D038250B /* Pods-Runner.profile.xcconfig */, + EB8947F87314B3A353FCF67C /* Pods-RunnerTests.debug.xcconfig */, + A224E642823E0216BF12C1D3 /* Pods-RunnerTests.release.xcconfig */, + 4086F8438660B0B0FA223108 /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - 564568BF62B09CDA743E4EA4 /* Pods_Runner.framework */, - 99C02A2276E6E2D7CA6E538C /* Pods_RunnerTests.framework */, + 8DE94FCB4C93C934DB82ED0C /* Pods_Runner.framework */, + AB709786B7AC18EE740D5375 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - B9B47CC91AE302DCA3053624 /* [CP] Check Pods Manifest.lock */, + F3CEA25B7E77975C7E78773F /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 0898364673EBCE98B3186893 /* [CP] Check Pods Manifest.lock */, + 2A85CCABAD294FADC367351F /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 4BB300EB47FADD99DADAF70B /* [CP] Embed Pods Frameworks */, + 79EEF1D7B56626FC53E21766 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,7 +323,7 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 0898364673EBCE98B3186893 /* [CP] Check Pods Manifest.lock */ = { + 2A85CCABAD294FADC367351F /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -383,7 +383,7 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 4BB300EB47FADD99DADAF70B /* [CP] Embed Pods Frameworks */ = { + 79EEF1D7B56626FC53E21766 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -400,7 +400,7 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - B9B47CC91AE302DCA3053624 /* [CP] Check Pods Manifest.lock */ = { + F3CEA25B7E77975C7E78773F /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -473,11 +473,12 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 9047E4269D9A628EB4E508AF /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = EB8947F87314B3A353FCF67C /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; GENERATE_INFOPLIST_FILE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.15; MARKETING_VERSION = 1.0; PRODUCT_BUNDLE_IDENTIFIER = com.example.gtkFlutter.RunnerTests; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -488,11 +489,12 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 8795A839324FE95A82F6F08C /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = A224E642823E0216BF12C1D3 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; GENERATE_INFOPLIST_FILE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.15; MARKETING_VERSION = 1.0; PRODUCT_BUNDLE_IDENTIFIER = com.example.gtkFlutter.RunnerTests; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -503,11 +505,12 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 38BA081A8D3C41280A93431B /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 4086F8438660B0B0FA223108 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; GENERATE_INFOPLIST_FILE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.15; MARKETING_VERSION = 1.0; PRODUCT_BUNDLE_IDENTIFIER = com.example.gtkFlutter.RunnerTests; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -579,6 +582,7 @@ "$(inherited)", "@executable_path/../Frameworks", ); + MACOSX_DEPLOYMENT_TARGET = 10.15; PROVISIONING_PROFILE_SPECIFIER = ""; SWIFT_VERSION = 5.0; }; @@ -588,6 +592,7 @@ isa = XCBuildConfiguration; buildSettings = { CODE_SIGN_STYLE = Manual; + MACOSX_DEPLOYMENT_TARGET = 10.15; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Profile; @@ -711,6 +716,7 @@ "$(inherited)", "@executable_path/../Frameworks", ); + MACOSX_DEPLOYMENT_TARGET = 10.15; PROVISIONING_PROFILE_SPECIFIER = ""; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 5.0; @@ -731,6 +737,7 @@ "$(inherited)", "@executable_path/../Frameworks", ); + MACOSX_DEPLOYMENT_TARGET = 10.15; PROVISIONING_PROFILE_SPECIFIER = ""; SWIFT_VERSION = 5.0; }; @@ -740,6 +747,7 @@ isa = XCBuildConfiguration; buildSettings = { CODE_SIGN_STYLE = Manual; + MACOSX_DEPLOYMENT_TARGET = 10.15; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; @@ -748,6 +756,7 @@ isa = XCBuildConfiguration; buildSettings = { CODE_SIGN_STYLE = Automatic; + MACOSX_DEPLOYMENT_TARGET = 10.15; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; diff --git a/firebase-get-to-know-flutter/step_09/macos/Runner/AppDelegate.swift b/firebase-get-to-know-flutter/step_09/macos/Runner/AppDelegate.swift index 8e02df2888..b3c1761412 100644 --- a/firebase-get-to-know-flutter/step_09/macos/Runner/AppDelegate.swift +++ b/firebase-get-to-know-flutter/step_09/macos/Runner/AppDelegate.swift @@ -6,4 +6,8 @@ class AppDelegate: FlutterAppDelegate { override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { return true } + + override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { + return true + } } diff --git a/firebase-get-to-know-flutter/step_09/pubspec.yaml b/firebase-get-to-know-flutter/step_09/pubspec.yaml index 9f35177d5c..7a39a8a411 100644 --- a/firebase-get-to-know-flutter/step_09/pubspec.yaml +++ b/firebase-get-to-know-flutter/step_09/pubspec.yaml @@ -32,17 +32,16 @@ dependencies: flutter: sdk: flutter - # The following adds the Cupertino Icons font to your application. # Use with the CupertinoIcons class for iOS style icons. cupertino_icons: ^1.0.8 google_fonts: ^6.2.1 - go_router: ^14.2.7 - cloud_firestore: ^4.14.0 - firebase_auth: ^4.16.0 - firebase_core: ^2.24.2 + go_router: ^14.3.0 + cloud_firestore: ^5.4.4 + firebase_auth: ^5.3.1 + firebase_core: ^3.6.0 provider: ^6.1.2 - firebase_ui_auth: ^1.13.0 + firebase_ui_auth: ^1.16.0 dev_dependencies: flutter_test: @@ -53,7 +52,7 @@ dev_dependencies: # activated in the `analysis_options.yaml` file located at the root of your # package. See that file for information about deactivating specific lint # rules and activating additional ones. - flutter_lints: ^4.0.0 + flutter_lints: ^5.0.0 # For information on the generic Dart part of this file, see the # following page: https://dart.dev/tools/pub/pubspec diff --git a/firebase-get-to-know-flutter/step_09/web/index.html b/firebase-get-to-know-flutter/step_09/web/index.html index 92f64576d8..ec3bcd0112 100644 --- a/firebase-get-to-know-flutter/step_09/web/index.html +++ b/firebase-get-to-know-flutter/step_09/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/tooling/codelab_rebuild/lib/src/blueprint.dart b/tooling/codelab_rebuild/lib/src/blueprint.dart index fe0ab83e22..8141a4334d 100644 --- a/tooling/codelab_rebuild/lib/src/blueprint.dart +++ b/tooling/codelab_rebuild/lib/src/blueprint.dart @@ -33,7 +33,15 @@ class Blueprint { /// Verifies if this blueprint is valid by checking that the steps /// are valid. - bool get isValid => !steps.any((s) => s.isNotValid); + bool get isValid { + for (final step in steps) { + if (step.isNotValid) { + _logger.warning('Invalid step: $step'); + return false; + } + } + return true; + } factory Blueprint.fromJson(Map json) => _$BlueprintFromJson(json); @@ -128,6 +136,13 @@ class BlueprintStep { @JsonKey(name: 'xcode-project-path') final String? xcodeProjectPath; + // IPHONEOS_DEPLOYMENT_TARGET + @JsonKey(name: 'iphoneos-deployment-target') + final String? iphoneosDeploymentTarget; + // MACOSX_DEPLOYMENT_TARGET + @JsonKey(name: 'macosx-deployment-target') + final String? macosxDeploymentTarget; + // Modifies a macOS MainMenu.xib file to make the titlebar transparent, // content full window, and hide the title bar. @JsonKey(name: 'full-screen-macos-main-menu-xib') @@ -163,6 +178,8 @@ class BlueprintStep { this.xcodeAddFile, this.xcodeProjectPath, this.macOsMainMenuXib, + this.iphoneosDeploymentTarget, + this.macosxDeploymentTarget, }) { if (name.isEmpty) { throw ArgumentError.value(name, 'name', 'Cannot be empty.'); @@ -296,9 +313,12 @@ class BlueprintStep { } // If we have a xcodeAddFile, we need a path to the xcode project path - if (xcodeAddFile != null && xcodeProjectPath == null) { + if (xcodeAddFile != null && + xcodeProjectPath == null && + iphoneosDeploymentTarget == null && + macosxDeploymentTarget == null) { _logger.warning( - 'Invalid step, xcode-add-file with no xcode-project-path: $name'); + 'Invalid step, xcode-add-file with no xcode-project-path, iphoneos-deployment-target or macosx-deployment-target: $name'); return false; } diff --git a/tooling/codelab_rebuild/lib/src/blueprint.g.dart b/tooling/codelab_rebuild/lib/src/blueprint.g.dart index 2e1334d50f..3bdb4a3572 100644 --- a/tooling/codelab_rebuild/lib/src/blueprint.g.dart +++ b/tooling/codelab_rebuild/lib/src/blueprint.g.dart @@ -67,6 +67,8 @@ BlueprintStep _$BlueprintStepFromJson(Map json) => $checkedCreate( 'stop', 'xcode-add-file', 'xcode-project-path', + 'iphoneos-deployment-target', + 'macosx-deployment-target', 'full-screen-macos-main-menu-xib' ], requiredKeys: const ['name'], @@ -124,6 +126,10 @@ BlueprintStep _$BlueprintStepFromJson(Map json) => $checkedCreate( $checkedConvert('xcode-project-path', (v) => v as String?), macOsMainMenuXib: $checkedConvert( 'full-screen-macos-main-menu-xib', (v) => v as String?), + iphoneosDeploymentTarget: $checkedConvert( + 'iphoneos-deployment-target', (v) => v as String?), + macosxDeploymentTarget: + $checkedConvert('macosx-deployment-target', (v) => v as String?), ); return val; }, @@ -137,7 +143,9 @@ BlueprintStep _$BlueprintStepFromJson(Map json) => $checkedCreate( 'stripLinesContaining': 'strip-lines-containing', 'xcodeAddFile': 'xcode-add-file', 'xcodeProjectPath': 'xcode-project-path', - 'macOsMainMenuXib': 'full-screen-macos-main-menu-xib' + 'macOsMainMenuXib': 'full-screen-macos-main-menu-xib', + 'iphoneosDeploymentTarget': 'iphoneos-deployment-target', + 'macosxDeploymentTarget': 'macosx-deployment-target' }, ); @@ -171,6 +179,8 @@ Map _$BlueprintStepToJson(BlueprintStep instance) => 'stop': instance.stop, 'xcode-add-file': instance.xcodeAddFile, 'xcode-project-path': instance.xcodeProjectPath, + 'iphoneos-deployment-target': instance.iphoneosDeploymentTarget, + 'macosx-deployment-target': instance.macosxDeploymentTarget, 'full-screen-macos-main-menu-xib': instance.macOsMainMenuXib, }; diff --git a/tooling/codelab_rebuild/lib/src/rebuild_blueprint.dart b/tooling/codelab_rebuild/lib/src/rebuild_blueprint.dart index de5db18d67..953aa059ae 100644 --- a/tooling/codelab_rebuild/lib/src/rebuild_blueprint.dart +++ b/tooling/codelab_rebuild/lib/src/rebuild_blueprint.dart @@ -248,19 +248,54 @@ Future _buildBlueprintStep(Directory cwd, BlueprintStep step) async { return; } - final xcodeAddFile = step.xcodeAddFile; final xcodeProjectPath = step.xcodeProjectPath; - if (xcodeAddFile != null && xcodeProjectPath != null) { - final script = ''' + if (xcodeProjectPath != null && xcodeProjectPath.isNotEmpty) { + final xcodeAddFile = step.xcodeAddFile; + final iphoneosDeploymentTarget = step.iphoneosDeploymentTarget; + final macosxDeploymentTarget = step.macosxDeploymentTarget; + late String script; + if (xcodeAddFile != null && xcodeAddFile.isNotEmpty) { + script = ''' require "xcodeproj" project = Xcodeproj::Project.open("$xcodeProjectPath") group = project.main_group["Runner"] project.targets.first.add_file_references([group.new_file("$xcodeAddFile")]) project.save ''' - .split('\n') - .map((str) => "-e '$str'") - .join(' '); + .split('\n') + .map((str) => "-e '$str'") + .join(' '); + } else if (iphoneosDeploymentTarget != null && + iphoneosDeploymentTarget.isNotEmpty) { + script = ''' +require "xcodeproj" +project = Xcodeproj::Project.open("$xcodeProjectPath") +group = project.main_group["Runner"] +project.targets.each { |t| t.build_configurations.each { |c| c.build_settings["IPHONEOS_DEPLOYMENT_TARGET"] ||= $iphoneosDeploymentTarget } } +project.save +''' + .split('\n') + .map((str) => "-e '$str'") + .join(' '); + } else if (macosxDeploymentTarget != null && + macosxDeploymentTarget.isNotEmpty) { + script = ''' +require "xcodeproj" +project = Xcodeproj::Project.open("$xcodeProjectPath") +group = project.main_group["Runner"] +project.targets.each { |t| t.build_configurations.each { |c| c.build_settings["MACOSX_DEPLOYMENT_TARGET"] ||= $macosxDeploymentTarget } } +project.save +''' + .split('\n') + .map((str) => "-e '$str'") + .join(' '); + } else { + _logger.severe( + 'xcode-add-file requires xcode-project-path, iphoneos-deployment-target' + ' or macosx-deployment-target: ${step.name}'); + exit(-1); + } + await _runNamedCommand( command: 'ruby', step: step, @@ -269,7 +304,6 @@ project.save exitOnStdErr: false); return; } - // Modifies a macOS MainMenu.xib file to make the titlebar transparent, // content full window, and hide the title bar. final macOsMainMenuXib = step.macOsMainMenuXib; diff --git a/tooling/codelab_rebuild/pubspec.yaml b/tooling/codelab_rebuild/pubspec.yaml index 13aba1d7cb..6361b736d3 100644 --- a/tooling/codelab_rebuild/pubspec.yaml +++ b/tooling/codelab_rebuild/pubspec.yaml @@ -1,7 +1,6 @@ name: codelab_rebuild -description: A sample command-line application. +description: Rebuild codelabs from a yaml file. version: 1.0.0 -# homepage: https://www.example.com environment: sdk: ^3.6.0-0 @@ -17,7 +16,7 @@ dependencies: dev_dependencies: build_runner: ^2.3.3 json_serializable: ^6.5.4 - lints: ">=2.0.0 <4.0.0" + lints: ^5.0.0 test: ^1.16.0 executables: diff --git a/tooling/codelab_rebuild/test/load_config_test.dart b/tooling/codelab_rebuild/test/load_config_test.dart index 68198eb8e4..773737e516 100644 --- a/tooling/codelab_rebuild/test/load_config_test.dart +++ b/tooling/codelab_rebuild/test/load_config_test.dart @@ -391,6 +391,30 @@ steps: - name: Strip DEVELOPMENT_TEAM strip-lines-containing: DEVELOPMENT_TEAM = path: codelab_app/ios/Runner.xcodeproj/project.pbxproj +'''; + final blueprint = Blueprint.fromString(input); + expect(blueprint.isValid, equals(true)); + }); + + test('Test macosx-deployment-target', () { + final input = ''' +name: macosx-deployment-target +steps: + - name: Patch macos/Runner.xcodeproj/project.pbxproj + xcode-project-path: gtk_flutter/macos/Runner.xcodeproj + macosx-deployment-target: '10.15' +'''; + final blueprint = Blueprint.fromString(input); + expect(blueprint.isValid, equals(true)); + }); + + test('Test iphoneos-deployment-target', () { + final input = ''' +name: iphoneos-deployment-target +steps: + - name: Patch ios/Runner.xcodeproj/project.pbxproj + xcode-project-path: gtk_flutter/ios/Runner.xcodeproj + iphoneos-deployment-target: '13.0' '''; final blueprint = Blueprint.fromString(input); expect(blueprint.isValid, equals(true)); From 0f63b37d2fc3aa9c646c8bc1ea67df64a43c6d10 Mon Sep 17 00:00:00 2001 From: Brett Morgan Date: Tue, 15 Oct 2024 17:16:13 +1100 Subject: [PATCH 010/108] Update `forge2d_game` --- .../step_02/android/gradle.properties | 2 +- forge2d_game/step_02/linux/CMakeLists.txt | 23 +--- .../step_02/linux/runner/CMakeLists.txt | 26 ++++ .../step_02/linux/{ => runner}/main.cc | 0 .../linux/{ => runner}/my_application.cc | 6 + .../linux/{ => runner}/my_application.h | 0 forge2d_game/step_02/pubspec.yaml | 8 +- forge2d_game/step_02/web/index.html | 2 +- .../step_03/android/gradle.properties | 2 +- forge2d_game/step_03/linux/CMakeLists.txt | 23 +--- .../step_03/linux/runner/CMakeLists.txt | 26 ++++ .../step_03/linux/{ => runner}/main.cc | 0 .../linux/{ => runner}/my_application.cc | 6 + .../linux/{ => runner}/my_application.h | 0 forge2d_game/step_03/pubspec.yaml | 8 +- forge2d_game/step_03/web/index.html | 2 +- .../step_04/android/gradle.properties | 2 +- forge2d_game/step_04/linux/CMakeLists.txt | 23 +--- .../step_04/linux/runner/CMakeLists.txt | 26 ++++ .../step_04/linux/{ => runner}/main.cc | 0 .../linux/{ => runner}/my_application.cc | 6 + .../linux/{ => runner}/my_application.h | 0 forge2d_game/step_04/pubspec.yaml | 8 +- forge2d_game/step_04/web/index.html | 2 +- .../step_05/android/gradle.properties | 2 +- forge2d_game/step_05/linux/CMakeLists.txt | 23 +--- .../step_05/linux/runner/CMakeLists.txt | 26 ++++ .../step_05/linux/{ => runner}/main.cc | 0 .../linux/{ => runner}/my_application.cc | 6 + .../linux/{ => runner}/my_application.h | 0 forge2d_game/step_05/pubspec.yaml | 8 +- forge2d_game/step_05/web/index.html | 2 +- .../step_06/android/gradle.properties | 2 +- forge2d_game/step_06/linux/CMakeLists.txt | 23 +--- forge2d_game/step_06/linux/my_application.cc | 124 ----------------- .../step_06/linux/runner/CMakeLists.txt | 26 ++++ .../step_06/linux/{ => runner}/main.cc | 0 .../step_06/linux/runner/my_application.cc | 130 ++++++++++++++++++ .../linux/{ => runner}/my_application.h | 0 forge2d_game/step_06/pubspec.yaml | 8 +- forge2d_game/step_06/web/index.html | 2 +- .../step_07/android/gradle.properties | 2 +- forge2d_game/step_07/linux/CMakeLists.txt | 23 +--- forge2d_game/step_07/linux/my_application.cc | 124 ----------------- .../step_07/linux/runner/CMakeLists.txt | 26 ++++ .../step_07/linux/{ => runner}/main.cc | 0 .../step_07/linux/runner/my_application.cc | 130 ++++++++++++++++++ .../linux/{ => runner}/my_application.h | 0 forge2d_game/step_07/pubspec.yaml | 8 +- forge2d_game/step_07/web/index.html | 2 +- 50 files changed, 494 insertions(+), 404 deletions(-) create mode 100644 forge2d_game/step_02/linux/runner/CMakeLists.txt rename forge2d_game/step_02/linux/{ => runner}/main.cc (100%) rename forge2d_game/step_02/linux/{ => runner}/my_application.cc (93%) rename forge2d_game/step_02/linux/{ => runner}/my_application.h (100%) create mode 100644 forge2d_game/step_03/linux/runner/CMakeLists.txt rename forge2d_game/step_03/linux/{ => runner}/main.cc (100%) rename forge2d_game/step_03/linux/{ => runner}/my_application.cc (93%) rename forge2d_game/step_03/linux/{ => runner}/my_application.h (100%) create mode 100644 forge2d_game/step_04/linux/runner/CMakeLists.txt rename forge2d_game/step_04/linux/{ => runner}/main.cc (100%) rename forge2d_game/step_04/linux/{ => runner}/my_application.cc (93%) rename forge2d_game/step_04/linux/{ => runner}/my_application.h (100%) create mode 100644 forge2d_game/step_05/linux/runner/CMakeLists.txt rename forge2d_game/step_05/linux/{ => runner}/main.cc (100%) rename forge2d_game/step_05/linux/{ => runner}/my_application.cc (93%) rename forge2d_game/step_05/linux/{ => runner}/my_application.h (100%) delete mode 100644 forge2d_game/step_06/linux/my_application.cc create mode 100644 forge2d_game/step_06/linux/runner/CMakeLists.txt rename forge2d_game/step_06/linux/{ => runner}/main.cc (100%) create mode 100644 forge2d_game/step_06/linux/runner/my_application.cc rename forge2d_game/step_06/linux/{ => runner}/my_application.h (100%) delete mode 100644 forge2d_game/step_07/linux/my_application.cc create mode 100644 forge2d_game/step_07/linux/runner/CMakeLists.txt rename forge2d_game/step_07/linux/{ => runner}/main.cc (100%) create mode 100644 forge2d_game/step_07/linux/runner/my_application.cc rename forge2d_game/step_07/linux/{ => runner}/my_application.h (100%) diff --git a/forge2d_game/step_02/android/gradle.properties b/forge2d_game/step_02/android/gradle.properties index 2597170821..f018a61817 100644 --- a/forge2d_game/step_02/android/gradle.properties +++ b/forge2d_game/step_02/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/forge2d_game/step_02/linux/CMakeLists.txt b/forge2d_game/step_02/linux/CMakeLists.txt index 4451095030..784bc59065 100644 --- a/forge2d_game/step_02/linux/CMakeLists.txt +++ b/forge2d_game/step_02/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/forge2d_game/step_02/linux/runner/CMakeLists.txt b/forge2d_game/step_02/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/forge2d_game/step_02/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/forge2d_game/step_02/linux/main.cc b/forge2d_game/step_02/linux/runner/main.cc similarity index 100% rename from forge2d_game/step_02/linux/main.cc rename to forge2d_game/step_02/linux/runner/main.cc diff --git a/forge2d_game/step_02/linux/my_application.cc b/forge2d_game/step_02/linux/runner/my_application.cc similarity index 93% rename from forge2d_game/step_02/linux/my_application.cc rename to forge2d_game/step_02/linux/runner/my_application.cc index 68a614170c..9a172938c7 100644 --- a/forge2d_game/step_02/linux/my_application.cc +++ b/forge2d_game/step_02/linux/runner/my_application.cc @@ -117,6 +117,12 @@ static void my_application_class_init(MyApplicationClass* klass) { static void my_application_init(MyApplication* self) {} MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + return MY_APPLICATION(g_object_new(my_application_get_type(), "application-id", APPLICATION_ID, "flags", G_APPLICATION_NON_UNIQUE, diff --git a/forge2d_game/step_02/linux/my_application.h b/forge2d_game/step_02/linux/runner/my_application.h similarity index 100% rename from forge2d_game/step_02/linux/my_application.h rename to forge2d_game/step_02/linux/runner/my_application.h diff --git a/forge2d_game/step_02/pubspec.yaml b/forge2d_game/step_02/pubspec.yaml index 34e90115c1..b2aa0f77c4 100644 --- a/forge2d_game/step_02/pubspec.yaml +++ b/forge2d_game/step_02/pubspec.yaml @@ -10,15 +10,15 @@ dependencies: flutter: sdk: flutter characters: ^1.3.0 - flame: ^1.19.0 - flame_forge2d: ^0.18.2 - flame_kenney_xml: ^0.1.1 + flame: ^1.20.0 + flame_forge2d: ^0.18.2+1 + flame_kenney_xml: ^0.1.1+1 xml: ^6.5.0 dev_dependencies: flutter_test: sdk: flutter - flutter_lints: ^4.0.0 + flutter_lints: ^5.0.0 flutter: uses-material-design: true diff --git a/forge2d_game/step_02/web/index.html b/forge2d_game/step_02/web/index.html index 405c6e494e..500ab53278 100644 --- a/forge2d_game/step_02/web/index.html +++ b/forge2d_game/step_02/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/forge2d_game/step_03/android/gradle.properties b/forge2d_game/step_03/android/gradle.properties index 2597170821..f018a61817 100644 --- a/forge2d_game/step_03/android/gradle.properties +++ b/forge2d_game/step_03/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/forge2d_game/step_03/linux/CMakeLists.txt b/forge2d_game/step_03/linux/CMakeLists.txt index 4451095030..784bc59065 100644 --- a/forge2d_game/step_03/linux/CMakeLists.txt +++ b/forge2d_game/step_03/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/forge2d_game/step_03/linux/runner/CMakeLists.txt b/forge2d_game/step_03/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/forge2d_game/step_03/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/forge2d_game/step_03/linux/main.cc b/forge2d_game/step_03/linux/runner/main.cc similarity index 100% rename from forge2d_game/step_03/linux/main.cc rename to forge2d_game/step_03/linux/runner/main.cc diff --git a/forge2d_game/step_03/linux/my_application.cc b/forge2d_game/step_03/linux/runner/my_application.cc similarity index 93% rename from forge2d_game/step_03/linux/my_application.cc rename to forge2d_game/step_03/linux/runner/my_application.cc index 68a614170c..9a172938c7 100644 --- a/forge2d_game/step_03/linux/my_application.cc +++ b/forge2d_game/step_03/linux/runner/my_application.cc @@ -117,6 +117,12 @@ static void my_application_class_init(MyApplicationClass* klass) { static void my_application_init(MyApplication* self) {} MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + return MY_APPLICATION(g_object_new(my_application_get_type(), "application-id", APPLICATION_ID, "flags", G_APPLICATION_NON_UNIQUE, diff --git a/forge2d_game/step_03/linux/my_application.h b/forge2d_game/step_03/linux/runner/my_application.h similarity index 100% rename from forge2d_game/step_03/linux/my_application.h rename to forge2d_game/step_03/linux/runner/my_application.h diff --git a/forge2d_game/step_03/pubspec.yaml b/forge2d_game/step_03/pubspec.yaml index c6033d9daa..e6f9c1f8a2 100644 --- a/forge2d_game/step_03/pubspec.yaml +++ b/forge2d_game/step_03/pubspec.yaml @@ -10,15 +10,15 @@ dependencies: flutter: sdk: flutter characters: ^1.3.0 - flame: ^1.19.0 - flame_forge2d: ^0.18.2 - flame_kenney_xml: ^0.1.1 + flame: ^1.20.0 + flame_forge2d: ^0.18.2+1 + flame_kenney_xml: ^0.1.1+1 xml: ^6.5.0 dev_dependencies: flutter_test: sdk: flutter - flutter_lints: ^4.0.0 + flutter_lints: ^5.0.0 flutter: uses-material-design: true diff --git a/forge2d_game/step_03/web/index.html b/forge2d_game/step_03/web/index.html index 405c6e494e..500ab53278 100644 --- a/forge2d_game/step_03/web/index.html +++ b/forge2d_game/step_03/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/forge2d_game/step_04/android/gradle.properties b/forge2d_game/step_04/android/gradle.properties index 2597170821..f018a61817 100644 --- a/forge2d_game/step_04/android/gradle.properties +++ b/forge2d_game/step_04/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/forge2d_game/step_04/linux/CMakeLists.txt b/forge2d_game/step_04/linux/CMakeLists.txt index 4451095030..784bc59065 100644 --- a/forge2d_game/step_04/linux/CMakeLists.txt +++ b/forge2d_game/step_04/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/forge2d_game/step_04/linux/runner/CMakeLists.txt b/forge2d_game/step_04/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/forge2d_game/step_04/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/forge2d_game/step_04/linux/main.cc b/forge2d_game/step_04/linux/runner/main.cc similarity index 100% rename from forge2d_game/step_04/linux/main.cc rename to forge2d_game/step_04/linux/runner/main.cc diff --git a/forge2d_game/step_04/linux/my_application.cc b/forge2d_game/step_04/linux/runner/my_application.cc similarity index 93% rename from forge2d_game/step_04/linux/my_application.cc rename to forge2d_game/step_04/linux/runner/my_application.cc index 68a614170c..9a172938c7 100644 --- a/forge2d_game/step_04/linux/my_application.cc +++ b/forge2d_game/step_04/linux/runner/my_application.cc @@ -117,6 +117,12 @@ static void my_application_class_init(MyApplicationClass* klass) { static void my_application_init(MyApplication* self) {} MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + return MY_APPLICATION(g_object_new(my_application_get_type(), "application-id", APPLICATION_ID, "flags", G_APPLICATION_NON_UNIQUE, diff --git a/forge2d_game/step_04/linux/my_application.h b/forge2d_game/step_04/linux/runner/my_application.h similarity index 100% rename from forge2d_game/step_04/linux/my_application.h rename to forge2d_game/step_04/linux/runner/my_application.h diff --git a/forge2d_game/step_04/pubspec.yaml b/forge2d_game/step_04/pubspec.yaml index c6033d9daa..e6f9c1f8a2 100644 --- a/forge2d_game/step_04/pubspec.yaml +++ b/forge2d_game/step_04/pubspec.yaml @@ -10,15 +10,15 @@ dependencies: flutter: sdk: flutter characters: ^1.3.0 - flame: ^1.19.0 - flame_forge2d: ^0.18.2 - flame_kenney_xml: ^0.1.1 + flame: ^1.20.0 + flame_forge2d: ^0.18.2+1 + flame_kenney_xml: ^0.1.1+1 xml: ^6.5.0 dev_dependencies: flutter_test: sdk: flutter - flutter_lints: ^4.0.0 + flutter_lints: ^5.0.0 flutter: uses-material-design: true diff --git a/forge2d_game/step_04/web/index.html b/forge2d_game/step_04/web/index.html index 405c6e494e..500ab53278 100644 --- a/forge2d_game/step_04/web/index.html +++ b/forge2d_game/step_04/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/forge2d_game/step_05/android/gradle.properties b/forge2d_game/step_05/android/gradle.properties index 2597170821..f018a61817 100644 --- a/forge2d_game/step_05/android/gradle.properties +++ b/forge2d_game/step_05/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/forge2d_game/step_05/linux/CMakeLists.txt b/forge2d_game/step_05/linux/CMakeLists.txt index 4451095030..784bc59065 100644 --- a/forge2d_game/step_05/linux/CMakeLists.txt +++ b/forge2d_game/step_05/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/forge2d_game/step_05/linux/runner/CMakeLists.txt b/forge2d_game/step_05/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/forge2d_game/step_05/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/forge2d_game/step_05/linux/main.cc b/forge2d_game/step_05/linux/runner/main.cc similarity index 100% rename from forge2d_game/step_05/linux/main.cc rename to forge2d_game/step_05/linux/runner/main.cc diff --git a/forge2d_game/step_05/linux/my_application.cc b/forge2d_game/step_05/linux/runner/my_application.cc similarity index 93% rename from forge2d_game/step_05/linux/my_application.cc rename to forge2d_game/step_05/linux/runner/my_application.cc index 68a614170c..9a172938c7 100644 --- a/forge2d_game/step_05/linux/my_application.cc +++ b/forge2d_game/step_05/linux/runner/my_application.cc @@ -117,6 +117,12 @@ static void my_application_class_init(MyApplicationClass* klass) { static void my_application_init(MyApplication* self) {} MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + return MY_APPLICATION(g_object_new(my_application_get_type(), "application-id", APPLICATION_ID, "flags", G_APPLICATION_NON_UNIQUE, diff --git a/forge2d_game/step_05/linux/my_application.h b/forge2d_game/step_05/linux/runner/my_application.h similarity index 100% rename from forge2d_game/step_05/linux/my_application.h rename to forge2d_game/step_05/linux/runner/my_application.h diff --git a/forge2d_game/step_05/pubspec.yaml b/forge2d_game/step_05/pubspec.yaml index 35782cb8fe..ef3ccb6a7f 100644 --- a/forge2d_game/step_05/pubspec.yaml +++ b/forge2d_game/step_05/pubspec.yaml @@ -10,16 +10,16 @@ dependencies: flutter: sdk: flutter characters: ^1.3.0 - flame: ^1.19.0 - flame_forge2d: ^0.18.2 - flame_kenney_xml: ^0.1.1 + flame: ^1.20.0 + flame_forge2d: ^0.18.2+1 + flame_kenney_xml: ^0.1.1+1 xml: ^6.5.0 equatable: ^2.0.5 dev_dependencies: flutter_test: sdk: flutter - flutter_lints: ^4.0.0 + flutter_lints: ^5.0.0 flutter: uses-material-design: true diff --git a/forge2d_game/step_05/web/index.html b/forge2d_game/step_05/web/index.html index 405c6e494e..500ab53278 100644 --- a/forge2d_game/step_05/web/index.html +++ b/forge2d_game/step_05/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/forge2d_game/step_06/android/gradle.properties b/forge2d_game/step_06/android/gradle.properties index 2597170821..f018a61817 100644 --- a/forge2d_game/step_06/android/gradle.properties +++ b/forge2d_game/step_06/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/forge2d_game/step_06/linux/CMakeLists.txt b/forge2d_game/step_06/linux/CMakeLists.txt index 4451095030..784bc59065 100644 --- a/forge2d_game/step_06/linux/CMakeLists.txt +++ b/forge2d_game/step_06/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/forge2d_game/step_06/linux/my_application.cc b/forge2d_game/step_06/linux/my_application.cc deleted file mode 100644 index 68a614170c..0000000000 --- a/forge2d_game/step_06/linux/my_application.cc +++ /dev/null @@ -1,124 +0,0 @@ -#include "my_application.h" - -#include -#ifdef GDK_WINDOWING_X11 -#include -#endif - -#include "flutter/generated_plugin_registrant.h" - -struct _MyApplication { - GtkApplication parent_instance; - char** dart_entrypoint_arguments; -}; - -G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) - -// Implements GApplication::activate. -static void my_application_activate(GApplication* application) { - MyApplication* self = MY_APPLICATION(application); - GtkWindow* window = - GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); - - // Use a header bar when running in GNOME as this is the common style used - // by applications and is the setup most users will be using (e.g. Ubuntu - // desktop). - // If running on X and not using GNOME then just use a traditional title bar - // in case the window manager does more exotic layout, e.g. tiling. - // If running on Wayland assume the header bar will work (may need changing - // if future cases occur). - gboolean use_header_bar = TRUE; -#ifdef GDK_WINDOWING_X11 - GdkScreen* screen = gtk_window_get_screen(window); - if (GDK_IS_X11_SCREEN(screen)) { - const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); - if (g_strcmp0(wm_name, "GNOME Shell") != 0) { - use_header_bar = FALSE; - } - } -#endif - if (use_header_bar) { - GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); - gtk_widget_show(GTK_WIDGET(header_bar)); - gtk_header_bar_set_title(header_bar, "forge2d_game"); - gtk_header_bar_set_show_close_button(header_bar, TRUE); - gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); - } else { - gtk_window_set_title(window, "forge2d_game"); - } - - gtk_window_set_default_size(window, 1280, 720); - gtk_widget_show(GTK_WIDGET(window)); - - g_autoptr(FlDartProject) project = fl_dart_project_new(); - fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); - - FlView* view = fl_view_new(project); - gtk_widget_show(GTK_WIDGET(view)); - gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); - - fl_register_plugins(FL_PLUGIN_REGISTRY(view)); - - gtk_widget_grab_focus(GTK_WIDGET(view)); -} - -// Implements GApplication::local_command_line. -static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { - MyApplication* self = MY_APPLICATION(application); - // Strip out the first argument as it is the binary name. - self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); - - g_autoptr(GError) error = nullptr; - if (!g_application_register(application, nullptr, &error)) { - g_warning("Failed to register: %s", error->message); - *exit_status = 1; - return TRUE; - } - - g_application_activate(application); - *exit_status = 0; - - return TRUE; -} - -// Implements GApplication::startup. -static void my_application_startup(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application startup. - - G_APPLICATION_CLASS(my_application_parent_class)->startup(application); -} - -// Implements GApplication::shutdown. -static void my_application_shutdown(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application shutdown. - - G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); -} - -// Implements GObject::dispose. -static void my_application_dispose(GObject* object) { - MyApplication* self = MY_APPLICATION(object); - g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); - G_OBJECT_CLASS(my_application_parent_class)->dispose(object); -} - -static void my_application_class_init(MyApplicationClass* klass) { - G_APPLICATION_CLASS(klass)->activate = my_application_activate; - G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; - G_APPLICATION_CLASS(klass)->startup = my_application_startup; - G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; - G_OBJECT_CLASS(klass)->dispose = my_application_dispose; -} - -static void my_application_init(MyApplication* self) {} - -MyApplication* my_application_new() { - return MY_APPLICATION(g_object_new(my_application_get_type(), - "application-id", APPLICATION_ID, - "flags", G_APPLICATION_NON_UNIQUE, - nullptr)); -} diff --git a/forge2d_game/step_06/linux/runner/CMakeLists.txt b/forge2d_game/step_06/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/forge2d_game/step_06/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/forge2d_game/step_06/linux/main.cc b/forge2d_game/step_06/linux/runner/main.cc similarity index 100% rename from forge2d_game/step_06/linux/main.cc rename to forge2d_game/step_06/linux/runner/main.cc diff --git a/forge2d_game/step_06/linux/runner/my_application.cc b/forge2d_game/step_06/linux/runner/my_application.cc new file mode 100644 index 0000000000..9a172938c7 --- /dev/null +++ b/forge2d_game/step_06/linux/runner/my_application.cc @@ -0,0 +1,130 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "forge2d_game"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "forge2d_game"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/forge2d_game/step_06/linux/my_application.h b/forge2d_game/step_06/linux/runner/my_application.h similarity index 100% rename from forge2d_game/step_06/linux/my_application.h rename to forge2d_game/step_06/linux/runner/my_application.h diff --git a/forge2d_game/step_06/pubspec.yaml b/forge2d_game/step_06/pubspec.yaml index 35782cb8fe..ef3ccb6a7f 100644 --- a/forge2d_game/step_06/pubspec.yaml +++ b/forge2d_game/step_06/pubspec.yaml @@ -10,16 +10,16 @@ dependencies: flutter: sdk: flutter characters: ^1.3.0 - flame: ^1.19.0 - flame_forge2d: ^0.18.2 - flame_kenney_xml: ^0.1.1 + flame: ^1.20.0 + flame_forge2d: ^0.18.2+1 + flame_kenney_xml: ^0.1.1+1 xml: ^6.5.0 equatable: ^2.0.5 dev_dependencies: flutter_test: sdk: flutter - flutter_lints: ^4.0.0 + flutter_lints: ^5.0.0 flutter: uses-material-design: true diff --git a/forge2d_game/step_06/web/index.html b/forge2d_game/step_06/web/index.html index 405c6e494e..500ab53278 100644 --- a/forge2d_game/step_06/web/index.html +++ b/forge2d_game/step_06/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/forge2d_game/step_07/android/gradle.properties b/forge2d_game/step_07/android/gradle.properties index 2597170821..f018a61817 100644 --- a/forge2d_game/step_07/android/gradle.properties +++ b/forge2d_game/step_07/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/forge2d_game/step_07/linux/CMakeLists.txt b/forge2d_game/step_07/linux/CMakeLists.txt index 4451095030..784bc59065 100644 --- a/forge2d_game/step_07/linux/CMakeLists.txt +++ b/forge2d_game/step_07/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/forge2d_game/step_07/linux/my_application.cc b/forge2d_game/step_07/linux/my_application.cc deleted file mode 100644 index 68a614170c..0000000000 --- a/forge2d_game/step_07/linux/my_application.cc +++ /dev/null @@ -1,124 +0,0 @@ -#include "my_application.h" - -#include -#ifdef GDK_WINDOWING_X11 -#include -#endif - -#include "flutter/generated_plugin_registrant.h" - -struct _MyApplication { - GtkApplication parent_instance; - char** dart_entrypoint_arguments; -}; - -G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) - -// Implements GApplication::activate. -static void my_application_activate(GApplication* application) { - MyApplication* self = MY_APPLICATION(application); - GtkWindow* window = - GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); - - // Use a header bar when running in GNOME as this is the common style used - // by applications and is the setup most users will be using (e.g. Ubuntu - // desktop). - // If running on X and not using GNOME then just use a traditional title bar - // in case the window manager does more exotic layout, e.g. tiling. - // If running on Wayland assume the header bar will work (may need changing - // if future cases occur). - gboolean use_header_bar = TRUE; -#ifdef GDK_WINDOWING_X11 - GdkScreen* screen = gtk_window_get_screen(window); - if (GDK_IS_X11_SCREEN(screen)) { - const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); - if (g_strcmp0(wm_name, "GNOME Shell") != 0) { - use_header_bar = FALSE; - } - } -#endif - if (use_header_bar) { - GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); - gtk_widget_show(GTK_WIDGET(header_bar)); - gtk_header_bar_set_title(header_bar, "forge2d_game"); - gtk_header_bar_set_show_close_button(header_bar, TRUE); - gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); - } else { - gtk_window_set_title(window, "forge2d_game"); - } - - gtk_window_set_default_size(window, 1280, 720); - gtk_widget_show(GTK_WIDGET(window)); - - g_autoptr(FlDartProject) project = fl_dart_project_new(); - fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); - - FlView* view = fl_view_new(project); - gtk_widget_show(GTK_WIDGET(view)); - gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); - - fl_register_plugins(FL_PLUGIN_REGISTRY(view)); - - gtk_widget_grab_focus(GTK_WIDGET(view)); -} - -// Implements GApplication::local_command_line. -static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { - MyApplication* self = MY_APPLICATION(application); - // Strip out the first argument as it is the binary name. - self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); - - g_autoptr(GError) error = nullptr; - if (!g_application_register(application, nullptr, &error)) { - g_warning("Failed to register: %s", error->message); - *exit_status = 1; - return TRUE; - } - - g_application_activate(application); - *exit_status = 0; - - return TRUE; -} - -// Implements GApplication::startup. -static void my_application_startup(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application startup. - - G_APPLICATION_CLASS(my_application_parent_class)->startup(application); -} - -// Implements GApplication::shutdown. -static void my_application_shutdown(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application shutdown. - - G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); -} - -// Implements GObject::dispose. -static void my_application_dispose(GObject* object) { - MyApplication* self = MY_APPLICATION(object); - g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); - G_OBJECT_CLASS(my_application_parent_class)->dispose(object); -} - -static void my_application_class_init(MyApplicationClass* klass) { - G_APPLICATION_CLASS(klass)->activate = my_application_activate; - G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; - G_APPLICATION_CLASS(klass)->startup = my_application_startup; - G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; - G_OBJECT_CLASS(klass)->dispose = my_application_dispose; -} - -static void my_application_init(MyApplication* self) {} - -MyApplication* my_application_new() { - return MY_APPLICATION(g_object_new(my_application_get_type(), - "application-id", APPLICATION_ID, - "flags", G_APPLICATION_NON_UNIQUE, - nullptr)); -} diff --git a/forge2d_game/step_07/linux/runner/CMakeLists.txt b/forge2d_game/step_07/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/forge2d_game/step_07/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/forge2d_game/step_07/linux/main.cc b/forge2d_game/step_07/linux/runner/main.cc similarity index 100% rename from forge2d_game/step_07/linux/main.cc rename to forge2d_game/step_07/linux/runner/main.cc diff --git a/forge2d_game/step_07/linux/runner/my_application.cc b/forge2d_game/step_07/linux/runner/my_application.cc new file mode 100644 index 0000000000..9a172938c7 --- /dev/null +++ b/forge2d_game/step_07/linux/runner/my_application.cc @@ -0,0 +1,130 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "forge2d_game"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "forge2d_game"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/forge2d_game/step_07/linux/my_application.h b/forge2d_game/step_07/linux/runner/my_application.h similarity index 100% rename from forge2d_game/step_07/linux/my_application.h rename to forge2d_game/step_07/linux/runner/my_application.h diff --git a/forge2d_game/step_07/pubspec.yaml b/forge2d_game/step_07/pubspec.yaml index 35782cb8fe..ef3ccb6a7f 100644 --- a/forge2d_game/step_07/pubspec.yaml +++ b/forge2d_game/step_07/pubspec.yaml @@ -10,16 +10,16 @@ dependencies: flutter: sdk: flutter characters: ^1.3.0 - flame: ^1.19.0 - flame_forge2d: ^0.18.2 - flame_kenney_xml: ^0.1.1 + flame: ^1.20.0 + flame_forge2d: ^0.18.2+1 + flame_kenney_xml: ^0.1.1+1 xml: ^6.5.0 equatable: ^2.0.5 dev_dependencies: flutter_test: sdk: flutter - flutter_lints: ^4.0.0 + flutter_lints: ^5.0.0 flutter: uses-material-design: true diff --git a/forge2d_game/step_07/web/index.html b/forge2d_game/step_07/web/index.html index 405c6e494e..500ab53278 100644 --- a/forge2d_game/step_07/web/index.html +++ b/forge2d_game/step_07/web/index.html @@ -21,7 +21,7 @@ - + From 7923abcff5294ecac4da4a3dc0f5a8569b3f26c9 Mon Sep 17 00:00:00 2001 From: Brett Morgan Date: Tue, 15 Oct 2024 17:56:12 +1100 Subject: [PATCH 011/108] Update `generate_crossword` --- generate_crossword/step_02/.gitignore | 2 + .../step_02/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../step_02/android/settings.gradle | 4 +- .../step_02/linux/CMakeLists.txt | 23 +--- .../step_02/linux/runner/CMakeLists.txt | 26 ++++ .../step_02/linux/{ => runner}/main.cc | 0 .../linux/{ => runner}/my_application.cc | 6 + .../linux/{ => runner}/my_application.h | 0 .../step_02/macos/Runner/AppDelegate.swift | 4 + generate_crossword/step_02/pubspec.yaml | 18 +-- generate_crossword/step_03/.gitignore | 2 + .../step_03/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../step_03/android/settings.gradle | 4 +- .../step_03/linux/CMakeLists.txt | 23 +--- .../step_03/linux/runner/CMakeLists.txt | 26 ++++ .../step_03/linux/{ => runner}/main.cc | 0 .../linux/{ => runner}/my_application.cc | 6 + .../linux/{ => runner}/my_application.h | 0 .../step_03/macos/Runner/AppDelegate.swift | 4 + generate_crossword/step_03/pubspec.yaml | 18 +-- generate_crossword/step_04/.gitignore | 2 + .../step_04/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../step_04/android/settings.gradle | 4 +- .../step_04/linux/CMakeLists.txt | 23 +--- .../step_04/linux/runner/CMakeLists.txt | 26 ++++ .../step_04/linux/{ => runner}/main.cc | 0 .../linux/{ => runner}/my_application.cc | 6 + .../linux/{ => runner}/my_application.h | 0 .../step_04/macos/Runner/AppDelegate.swift | 4 + generate_crossword/step_04/pubspec.yaml | 18 +-- generate_crossword/step_05_a/.gitignore | 2 + .../step_05_a/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../step_05_a/android/settings.gradle | 4 +- .../step_05_a/linux/CMakeLists.txt | 23 +--- .../step_05_a/linux/runner/CMakeLists.txt | 26 ++++ .../step_05_a/linux/{ => runner}/main.cc | 0 .../linux/{ => runner}/my_application.cc | 6 + .../linux/{ => runner}/my_application.h | 0 .../step_05_a/macos/Runner/AppDelegate.swift | 4 + generate_crossword/step_05_a/pubspec.yaml | 18 +-- generate_crossword/step_05_b/.gitignore | 2 + .../step_05_b/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../step_05_b/android/settings.gradle | 4 +- .../step_05_b/linux/CMakeLists.txt | 23 +--- .../step_05_b/linux/my_application.cc | 124 ----------------- .../step_05_b/linux/runner/CMakeLists.txt | 26 ++++ .../step_05_b/linux/{ => runner}/main.cc | 0 .../step_05_b/linux/runner/my_application.cc | 130 ++++++++++++++++++ .../linux/{ => runner}/my_application.h | 0 .../step_05_b/macos/Runner/AppDelegate.swift | 4 + generate_crossword/step_05_b/pubspec.yaml | 18 +-- generate_crossword/step_05_c/.gitignore | 2 + .../step_05_c/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../step_05_c/android/settings.gradle | 4 +- .../step_05_c/linux/CMakeLists.txt | 23 +--- .../step_05_c/linux/my_application.cc | 124 ----------------- .../step_05_c/linux/runner/CMakeLists.txt | 26 ++++ .../step_05_c/linux/{ => runner}/main.cc | 0 .../step_05_c/linux/runner/my_application.cc | 130 ++++++++++++++++++ .../linux/{ => runner}/my_application.h | 0 .../step_05_c/macos/Runner/AppDelegate.swift | 4 + generate_crossword/step_05_c/pubspec.yaml | 18 +-- generate_crossword/step_06/.gitignore | 2 + .../step_06/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../step_06/android/settings.gradle | 4 +- .../step_06/linux/CMakeLists.txt | 23 +--- .../step_06/linux/my_application.cc | 124 ----------------- .../step_06/linux/runner/CMakeLists.txt | 26 ++++ .../step_06/linux/{ => runner}/main.cc | 0 .../step_06/linux/runner/my_application.cc | 130 ++++++++++++++++++ .../linux/{ => runner}/my_application.h | 0 .../step_06/macos/Runner/AppDelegate.swift | 4 + generate_crossword/step_06/pubspec.yaml | 18 +-- generate_crossword/step_07/.gitignore | 2 + .../step_07/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../step_07/android/settings.gradle | 4 +- .../step_07/linux/CMakeLists.txt | 23 +--- .../step_07/linux/my_application.cc | 124 ----------------- .../step_07/linux/runner/CMakeLists.txt | 26 ++++ .../step_07/linux/{ => runner}/main.cc | 0 .../step_07/linux/runner/my_application.cc | 130 ++++++++++++++++++ .../linux/{ => runner}/my_application.h | 0 .../step_07/macos/Runner/AppDelegate.swift | 4 + generate_crossword/step_07/pubspec.yaml | 18 +-- generate_crossword/step_08/.gitignore | 2 + .../step_08/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../step_08/android/settings.gradle | 4 +- .../step_08/linux/CMakeLists.txt | 23 +--- .../step_08/linux/my_application.cc | 124 ----------------- .../step_08/linux/runner/CMakeLists.txt | 26 ++++ .../step_08/linux/{ => runner}/main.cc | 0 .../step_08/linux/runner/my_application.cc | 130 ++++++++++++++++++ .../linux/{ => runner}/my_application.h | 0 .../step_08/macos/Runner/AppDelegate.swift | 4 + generate_crossword/step_08/pubspec.yaml | 18 +-- generate_crossword/step_09/.gitignore | 2 + .../step_09/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../step_09/android/settings.gradle | 4 +- .../step_09/linux/CMakeLists.txt | 23 +--- .../step_09/linux/my_application.cc | 124 ----------------- .../step_09/linux/runner/CMakeLists.txt | 26 ++++ .../step_09/linux/{ => runner}/main.cc | 0 .../step_09/linux/runner/my_application.cc | 130 ++++++++++++++++++ .../linux/{ => runner}/my_application.h | 0 .../step_09/macos/Runner/AppDelegate.swift | 4 + generate_crossword/step_09/pubspec.yaml | 18 +-- 116 files changed, 1284 insertions(+), 1074 deletions(-) create mode 100644 generate_crossword/step_02/linux/runner/CMakeLists.txt rename generate_crossword/step_02/linux/{ => runner}/main.cc (100%) rename generate_crossword/step_02/linux/{ => runner}/my_application.cc (93%) rename generate_crossword/step_02/linux/{ => runner}/my_application.h (100%) create mode 100644 generate_crossword/step_03/linux/runner/CMakeLists.txt rename generate_crossword/step_03/linux/{ => runner}/main.cc (100%) rename generate_crossword/step_03/linux/{ => runner}/my_application.cc (93%) rename generate_crossword/step_03/linux/{ => runner}/my_application.h (100%) create mode 100644 generate_crossword/step_04/linux/runner/CMakeLists.txt rename generate_crossword/step_04/linux/{ => runner}/main.cc (100%) rename generate_crossword/step_04/linux/{ => runner}/my_application.cc (93%) rename generate_crossword/step_04/linux/{ => runner}/my_application.h (100%) create mode 100644 generate_crossword/step_05_a/linux/runner/CMakeLists.txt rename generate_crossword/step_05_a/linux/{ => runner}/main.cc (100%) rename generate_crossword/step_05_a/linux/{ => runner}/my_application.cc (93%) rename generate_crossword/step_05_a/linux/{ => runner}/my_application.h (100%) delete mode 100644 generate_crossword/step_05_b/linux/my_application.cc create mode 100644 generate_crossword/step_05_b/linux/runner/CMakeLists.txt rename generate_crossword/step_05_b/linux/{ => runner}/main.cc (100%) create mode 100644 generate_crossword/step_05_b/linux/runner/my_application.cc rename generate_crossword/step_05_b/linux/{ => runner}/my_application.h (100%) delete mode 100644 generate_crossword/step_05_c/linux/my_application.cc create mode 100644 generate_crossword/step_05_c/linux/runner/CMakeLists.txt rename generate_crossword/step_05_c/linux/{ => runner}/main.cc (100%) create mode 100644 generate_crossword/step_05_c/linux/runner/my_application.cc rename generate_crossword/step_05_c/linux/{ => runner}/my_application.h (100%) delete mode 100644 generate_crossword/step_06/linux/my_application.cc create mode 100644 generate_crossword/step_06/linux/runner/CMakeLists.txt rename generate_crossword/step_06/linux/{ => runner}/main.cc (100%) create mode 100644 generate_crossword/step_06/linux/runner/my_application.cc rename generate_crossword/step_06/linux/{ => runner}/my_application.h (100%) delete mode 100644 generate_crossword/step_07/linux/my_application.cc create mode 100644 generate_crossword/step_07/linux/runner/CMakeLists.txt rename generate_crossword/step_07/linux/{ => runner}/main.cc (100%) create mode 100644 generate_crossword/step_07/linux/runner/my_application.cc rename generate_crossword/step_07/linux/{ => runner}/my_application.h (100%) delete mode 100644 generate_crossword/step_08/linux/my_application.cc create mode 100644 generate_crossword/step_08/linux/runner/CMakeLists.txt rename generate_crossword/step_08/linux/{ => runner}/main.cc (100%) create mode 100644 generate_crossword/step_08/linux/runner/my_application.cc rename generate_crossword/step_08/linux/{ => runner}/my_application.h (100%) delete mode 100644 generate_crossword/step_09/linux/my_application.cc create mode 100644 generate_crossword/step_09/linux/runner/CMakeLists.txt rename generate_crossword/step_09/linux/{ => runner}/main.cc (100%) create mode 100644 generate_crossword/step_09/linux/runner/my_application.cc rename generate_crossword/step_09/linux/{ => runner}/my_application.h (100%) diff --git a/generate_crossword/step_02/.gitignore b/generate_crossword/step_02/.gitignore index 29a3a5017f..79c113f9b5 100644 --- a/generate_crossword/step_02/.gitignore +++ b/generate_crossword/step_02/.gitignore @@ -5,9 +5,11 @@ *.swp .DS_Store .atom/ +.build/ .buildlog/ .history .svn/ +.swiftpm/ migrate_working_dir/ # IntelliJ related diff --git a/generate_crossword/step_02/android/gradle.properties b/generate_crossword/step_02/android/gradle.properties index 2597170821..f018a61817 100644 --- a/generate_crossword/step_02/android/gradle.properties +++ b/generate_crossword/step_02/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/generate_crossword/step_02/android/gradle/wrapper/gradle-wrapper.properties b/generate_crossword/step_02/android/gradle/wrapper/gradle-wrapper.properties index e1ca574ef0..7bb2df6ba6 100644 --- a/generate_crossword/step_02/android/gradle/wrapper/gradle-wrapper.properties +++ b/generate_crossword/step_02/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip diff --git a/generate_crossword/step_02/android/settings.gradle b/generate_crossword/step_02/android/settings.gradle index 536165d35a..b9e43bd376 100644 --- a/generate_crossword/step_02/android/settings.gradle +++ b/generate_crossword/step_02/android/settings.gradle @@ -18,8 +18,8 @@ pluginManagement { plugins { id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "7.3.0" apply false - id "org.jetbrains.kotlin.android" version "1.7.10" apply false + id "com.android.application" version "8.1.0" apply false + id "org.jetbrains.kotlin.android" version "1.8.22" apply false } include ":app" diff --git a/generate_crossword/step_02/linux/CMakeLists.txt b/generate_crossword/step_02/linux/CMakeLists.txt index fc29586ba7..76ad2b9b7e 100644 --- a/generate_crossword/step_02/linux/CMakeLists.txt +++ b/generate_crossword/step_02/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/generate_crossword/step_02/linux/runner/CMakeLists.txt b/generate_crossword/step_02/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/generate_crossword/step_02/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/generate_crossword/step_02/linux/main.cc b/generate_crossword/step_02/linux/runner/main.cc similarity index 100% rename from generate_crossword/step_02/linux/main.cc rename to generate_crossword/step_02/linux/runner/main.cc diff --git a/generate_crossword/step_02/linux/my_application.cc b/generate_crossword/step_02/linux/runner/my_application.cc similarity index 93% rename from generate_crossword/step_02/linux/my_application.cc rename to generate_crossword/step_02/linux/runner/my_application.cc index 7030cf20f4..dbf3c88029 100644 --- a/generate_crossword/step_02/linux/my_application.cc +++ b/generate_crossword/step_02/linux/runner/my_application.cc @@ -117,6 +117,12 @@ static void my_application_class_init(MyApplicationClass* klass) { static void my_application_init(MyApplication* self) {} MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + return MY_APPLICATION(g_object_new(my_application_get_type(), "application-id", APPLICATION_ID, "flags", G_APPLICATION_NON_UNIQUE, diff --git a/generate_crossword/step_02/linux/my_application.h b/generate_crossword/step_02/linux/runner/my_application.h similarity index 100% rename from generate_crossword/step_02/linux/my_application.h rename to generate_crossword/step_02/linux/runner/my_application.h diff --git a/generate_crossword/step_02/macos/Runner/AppDelegate.swift b/generate_crossword/step_02/macos/Runner/AppDelegate.swift index 8e02df2888..b3c1761412 100644 --- a/generate_crossword/step_02/macos/Runner/AppDelegate.swift +++ b/generate_crossword/step_02/macos/Runner/AppDelegate.swift @@ -6,4 +6,8 @@ class AppDelegate: FlutterAppDelegate { override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { return true } + + override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { + return true + } } diff --git a/generate_crossword/step_02/pubspec.yaml b/generate_crossword/step_02/pubspec.yaml index e0f00c52a7..5437d28aef 100644 --- a/generate_crossword/step_02/pubspec.yaml +++ b/generate_crossword/step_02/pubspec.yaml @@ -12,21 +12,21 @@ dependencies: built_collection: ^5.1.1 built_value: ^8.9.2 characters: ^1.3.0 - flutter_riverpod: ^2.5.1 + flutter_riverpod: ^2.5.3 intl: ^0.19.0 - riverpod: ^2.5.1 - riverpod_annotation: ^2.3.5 - two_dimensional_scrollables: ^0.3.1 + riverpod: ^2.5.3 + riverpod_annotation: ^2.5.3 + two_dimensional_scrollables: ^0.3.2 dev_dependencies: flutter_test: sdk: flutter - flutter_lints: ^4.0.0 - build_runner: ^2.4.12 + flutter_lints: ^5.0.0 + build_runner: ^2.4.13 built_value_generator: ^8.9.2 - custom_lint: ^0.6.5 - riverpod_generator: ^2.4.3 - riverpod_lint: ^2.3.13 + custom_lint: ^0.6.10 + riverpod_generator: ^2.4.4 + riverpod_lint: ^2.3.14 flutter: uses-material-design: true diff --git a/generate_crossword/step_03/.gitignore b/generate_crossword/step_03/.gitignore index 29a3a5017f..79c113f9b5 100644 --- a/generate_crossword/step_03/.gitignore +++ b/generate_crossword/step_03/.gitignore @@ -5,9 +5,11 @@ *.swp .DS_Store .atom/ +.build/ .buildlog/ .history .svn/ +.swiftpm/ migrate_working_dir/ # IntelliJ related diff --git a/generate_crossword/step_03/android/gradle.properties b/generate_crossword/step_03/android/gradle.properties index 2597170821..f018a61817 100644 --- a/generate_crossword/step_03/android/gradle.properties +++ b/generate_crossword/step_03/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/generate_crossword/step_03/android/gradle/wrapper/gradle-wrapper.properties b/generate_crossword/step_03/android/gradle/wrapper/gradle-wrapper.properties index e1ca574ef0..7bb2df6ba6 100644 --- a/generate_crossword/step_03/android/gradle/wrapper/gradle-wrapper.properties +++ b/generate_crossword/step_03/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip diff --git a/generate_crossword/step_03/android/settings.gradle b/generate_crossword/step_03/android/settings.gradle index 536165d35a..b9e43bd376 100644 --- a/generate_crossword/step_03/android/settings.gradle +++ b/generate_crossword/step_03/android/settings.gradle @@ -18,8 +18,8 @@ pluginManagement { plugins { id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "7.3.0" apply false - id "org.jetbrains.kotlin.android" version "1.7.10" apply false + id "com.android.application" version "8.1.0" apply false + id "org.jetbrains.kotlin.android" version "1.8.22" apply false } include ":app" diff --git a/generate_crossword/step_03/linux/CMakeLists.txt b/generate_crossword/step_03/linux/CMakeLists.txt index fc29586ba7..76ad2b9b7e 100644 --- a/generate_crossword/step_03/linux/CMakeLists.txt +++ b/generate_crossword/step_03/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/generate_crossword/step_03/linux/runner/CMakeLists.txt b/generate_crossword/step_03/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/generate_crossword/step_03/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/generate_crossword/step_03/linux/main.cc b/generate_crossword/step_03/linux/runner/main.cc similarity index 100% rename from generate_crossword/step_03/linux/main.cc rename to generate_crossword/step_03/linux/runner/main.cc diff --git a/generate_crossword/step_03/linux/my_application.cc b/generate_crossword/step_03/linux/runner/my_application.cc similarity index 93% rename from generate_crossword/step_03/linux/my_application.cc rename to generate_crossword/step_03/linux/runner/my_application.cc index 7030cf20f4..dbf3c88029 100644 --- a/generate_crossword/step_03/linux/my_application.cc +++ b/generate_crossword/step_03/linux/runner/my_application.cc @@ -117,6 +117,12 @@ static void my_application_class_init(MyApplicationClass* klass) { static void my_application_init(MyApplication* self) {} MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + return MY_APPLICATION(g_object_new(my_application_get_type(), "application-id", APPLICATION_ID, "flags", G_APPLICATION_NON_UNIQUE, diff --git a/generate_crossword/step_03/linux/my_application.h b/generate_crossword/step_03/linux/runner/my_application.h similarity index 100% rename from generate_crossword/step_03/linux/my_application.h rename to generate_crossword/step_03/linux/runner/my_application.h diff --git a/generate_crossword/step_03/macos/Runner/AppDelegate.swift b/generate_crossword/step_03/macos/Runner/AppDelegate.swift index 8e02df2888..b3c1761412 100644 --- a/generate_crossword/step_03/macos/Runner/AppDelegate.swift +++ b/generate_crossword/step_03/macos/Runner/AppDelegate.swift @@ -6,4 +6,8 @@ class AppDelegate: FlutterAppDelegate { override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { return true } + + override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { + return true + } } diff --git a/generate_crossword/step_03/pubspec.yaml b/generate_crossword/step_03/pubspec.yaml index b2180dfe85..ed0d380d27 100644 --- a/generate_crossword/step_03/pubspec.yaml +++ b/generate_crossword/step_03/pubspec.yaml @@ -12,21 +12,21 @@ dependencies: built_collection: ^5.1.1 built_value: ^8.9.2 characters: ^1.3.0 - flutter_riverpod: ^2.5.1 + flutter_riverpod: ^2.5.3 intl: ^0.19.0 - riverpod: ^2.5.1 - riverpod_annotation: ^2.3.5 - two_dimensional_scrollables: ^0.3.1 + riverpod: ^2.5.3 + riverpod_annotation: ^2.5.3 + two_dimensional_scrollables: ^0.3.2 dev_dependencies: flutter_test: sdk: flutter - flutter_lints: ^4.0.0 - build_runner: ^2.4.12 + flutter_lints: ^5.0.0 + build_runner: ^2.4.13 built_value_generator: ^8.9.2 - custom_lint: ^0.6.5 - riverpod_generator: ^2.4.3 - riverpod_lint: ^2.3.13 + custom_lint: ^0.6.10 + riverpod_generator: ^2.4.4 + riverpod_lint: ^2.3.14 flutter: uses-material-design: true diff --git a/generate_crossword/step_04/.gitignore b/generate_crossword/step_04/.gitignore index 29a3a5017f..79c113f9b5 100644 --- a/generate_crossword/step_04/.gitignore +++ b/generate_crossword/step_04/.gitignore @@ -5,9 +5,11 @@ *.swp .DS_Store .atom/ +.build/ .buildlog/ .history .svn/ +.swiftpm/ migrate_working_dir/ # IntelliJ related diff --git a/generate_crossword/step_04/android/gradle.properties b/generate_crossword/step_04/android/gradle.properties index 2597170821..f018a61817 100644 --- a/generate_crossword/step_04/android/gradle.properties +++ b/generate_crossword/step_04/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/generate_crossword/step_04/android/gradle/wrapper/gradle-wrapper.properties b/generate_crossword/step_04/android/gradle/wrapper/gradle-wrapper.properties index e1ca574ef0..7bb2df6ba6 100644 --- a/generate_crossword/step_04/android/gradle/wrapper/gradle-wrapper.properties +++ b/generate_crossword/step_04/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip diff --git a/generate_crossword/step_04/android/settings.gradle b/generate_crossword/step_04/android/settings.gradle index 536165d35a..b9e43bd376 100644 --- a/generate_crossword/step_04/android/settings.gradle +++ b/generate_crossword/step_04/android/settings.gradle @@ -18,8 +18,8 @@ pluginManagement { plugins { id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "7.3.0" apply false - id "org.jetbrains.kotlin.android" version "1.7.10" apply false + id "com.android.application" version "8.1.0" apply false + id "org.jetbrains.kotlin.android" version "1.8.22" apply false } include ":app" diff --git a/generate_crossword/step_04/linux/CMakeLists.txt b/generate_crossword/step_04/linux/CMakeLists.txt index fc29586ba7..76ad2b9b7e 100644 --- a/generate_crossword/step_04/linux/CMakeLists.txt +++ b/generate_crossword/step_04/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/generate_crossword/step_04/linux/runner/CMakeLists.txt b/generate_crossword/step_04/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/generate_crossword/step_04/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/generate_crossword/step_04/linux/main.cc b/generate_crossword/step_04/linux/runner/main.cc similarity index 100% rename from generate_crossword/step_04/linux/main.cc rename to generate_crossword/step_04/linux/runner/main.cc diff --git a/generate_crossword/step_04/linux/my_application.cc b/generate_crossword/step_04/linux/runner/my_application.cc similarity index 93% rename from generate_crossword/step_04/linux/my_application.cc rename to generate_crossword/step_04/linux/runner/my_application.cc index 7030cf20f4..dbf3c88029 100644 --- a/generate_crossword/step_04/linux/my_application.cc +++ b/generate_crossword/step_04/linux/runner/my_application.cc @@ -117,6 +117,12 @@ static void my_application_class_init(MyApplicationClass* klass) { static void my_application_init(MyApplication* self) {} MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + return MY_APPLICATION(g_object_new(my_application_get_type(), "application-id", APPLICATION_ID, "flags", G_APPLICATION_NON_UNIQUE, diff --git a/generate_crossword/step_04/linux/my_application.h b/generate_crossword/step_04/linux/runner/my_application.h similarity index 100% rename from generate_crossword/step_04/linux/my_application.h rename to generate_crossword/step_04/linux/runner/my_application.h diff --git a/generate_crossword/step_04/macos/Runner/AppDelegate.swift b/generate_crossword/step_04/macos/Runner/AppDelegate.swift index 8e02df2888..b3c1761412 100644 --- a/generate_crossword/step_04/macos/Runner/AppDelegate.swift +++ b/generate_crossword/step_04/macos/Runner/AppDelegate.swift @@ -6,4 +6,8 @@ class AppDelegate: FlutterAppDelegate { override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { return true } + + override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { + return true + } } diff --git a/generate_crossword/step_04/pubspec.yaml b/generate_crossword/step_04/pubspec.yaml index b2180dfe85..ed0d380d27 100644 --- a/generate_crossword/step_04/pubspec.yaml +++ b/generate_crossword/step_04/pubspec.yaml @@ -12,21 +12,21 @@ dependencies: built_collection: ^5.1.1 built_value: ^8.9.2 characters: ^1.3.0 - flutter_riverpod: ^2.5.1 + flutter_riverpod: ^2.5.3 intl: ^0.19.0 - riverpod: ^2.5.1 - riverpod_annotation: ^2.3.5 - two_dimensional_scrollables: ^0.3.1 + riverpod: ^2.5.3 + riverpod_annotation: ^2.5.3 + two_dimensional_scrollables: ^0.3.2 dev_dependencies: flutter_test: sdk: flutter - flutter_lints: ^4.0.0 - build_runner: ^2.4.12 + flutter_lints: ^5.0.0 + build_runner: ^2.4.13 built_value_generator: ^8.9.2 - custom_lint: ^0.6.5 - riverpod_generator: ^2.4.3 - riverpod_lint: ^2.3.13 + custom_lint: ^0.6.10 + riverpod_generator: ^2.4.4 + riverpod_lint: ^2.3.14 flutter: uses-material-design: true diff --git a/generate_crossword/step_05_a/.gitignore b/generate_crossword/step_05_a/.gitignore index 29a3a5017f..79c113f9b5 100644 --- a/generate_crossword/step_05_a/.gitignore +++ b/generate_crossword/step_05_a/.gitignore @@ -5,9 +5,11 @@ *.swp .DS_Store .atom/ +.build/ .buildlog/ .history .svn/ +.swiftpm/ migrate_working_dir/ # IntelliJ related diff --git a/generate_crossword/step_05_a/android/gradle.properties b/generate_crossword/step_05_a/android/gradle.properties index 2597170821..f018a61817 100644 --- a/generate_crossword/step_05_a/android/gradle.properties +++ b/generate_crossword/step_05_a/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/generate_crossword/step_05_a/android/gradle/wrapper/gradle-wrapper.properties b/generate_crossword/step_05_a/android/gradle/wrapper/gradle-wrapper.properties index e1ca574ef0..7bb2df6ba6 100644 --- a/generate_crossword/step_05_a/android/gradle/wrapper/gradle-wrapper.properties +++ b/generate_crossword/step_05_a/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip diff --git a/generate_crossword/step_05_a/android/settings.gradle b/generate_crossword/step_05_a/android/settings.gradle index 536165d35a..b9e43bd376 100644 --- a/generate_crossword/step_05_a/android/settings.gradle +++ b/generate_crossword/step_05_a/android/settings.gradle @@ -18,8 +18,8 @@ pluginManagement { plugins { id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "7.3.0" apply false - id "org.jetbrains.kotlin.android" version "1.7.10" apply false + id "com.android.application" version "8.1.0" apply false + id "org.jetbrains.kotlin.android" version "1.8.22" apply false } include ":app" diff --git a/generate_crossword/step_05_a/linux/CMakeLists.txt b/generate_crossword/step_05_a/linux/CMakeLists.txt index fc29586ba7..76ad2b9b7e 100644 --- a/generate_crossword/step_05_a/linux/CMakeLists.txt +++ b/generate_crossword/step_05_a/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/generate_crossword/step_05_a/linux/runner/CMakeLists.txt b/generate_crossword/step_05_a/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/generate_crossword/step_05_a/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/generate_crossword/step_05_a/linux/main.cc b/generate_crossword/step_05_a/linux/runner/main.cc similarity index 100% rename from generate_crossword/step_05_a/linux/main.cc rename to generate_crossword/step_05_a/linux/runner/main.cc diff --git a/generate_crossword/step_05_a/linux/my_application.cc b/generate_crossword/step_05_a/linux/runner/my_application.cc similarity index 93% rename from generate_crossword/step_05_a/linux/my_application.cc rename to generate_crossword/step_05_a/linux/runner/my_application.cc index 7030cf20f4..dbf3c88029 100644 --- a/generate_crossword/step_05_a/linux/my_application.cc +++ b/generate_crossword/step_05_a/linux/runner/my_application.cc @@ -117,6 +117,12 @@ static void my_application_class_init(MyApplicationClass* klass) { static void my_application_init(MyApplication* self) {} MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + return MY_APPLICATION(g_object_new(my_application_get_type(), "application-id", APPLICATION_ID, "flags", G_APPLICATION_NON_UNIQUE, diff --git a/generate_crossword/step_05_a/linux/my_application.h b/generate_crossword/step_05_a/linux/runner/my_application.h similarity index 100% rename from generate_crossword/step_05_a/linux/my_application.h rename to generate_crossword/step_05_a/linux/runner/my_application.h diff --git a/generate_crossword/step_05_a/macos/Runner/AppDelegate.swift b/generate_crossword/step_05_a/macos/Runner/AppDelegate.swift index 8e02df2888..b3c1761412 100644 --- a/generate_crossword/step_05_a/macos/Runner/AppDelegate.swift +++ b/generate_crossword/step_05_a/macos/Runner/AppDelegate.swift @@ -6,4 +6,8 @@ class AppDelegate: FlutterAppDelegate { override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { return true } + + override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { + return true + } } diff --git a/generate_crossword/step_05_a/pubspec.yaml b/generate_crossword/step_05_a/pubspec.yaml index b2180dfe85..ed0d380d27 100644 --- a/generate_crossword/step_05_a/pubspec.yaml +++ b/generate_crossword/step_05_a/pubspec.yaml @@ -12,21 +12,21 @@ dependencies: built_collection: ^5.1.1 built_value: ^8.9.2 characters: ^1.3.0 - flutter_riverpod: ^2.5.1 + flutter_riverpod: ^2.5.3 intl: ^0.19.0 - riverpod: ^2.5.1 - riverpod_annotation: ^2.3.5 - two_dimensional_scrollables: ^0.3.1 + riverpod: ^2.5.3 + riverpod_annotation: ^2.5.3 + two_dimensional_scrollables: ^0.3.2 dev_dependencies: flutter_test: sdk: flutter - flutter_lints: ^4.0.0 - build_runner: ^2.4.12 + flutter_lints: ^5.0.0 + build_runner: ^2.4.13 built_value_generator: ^8.9.2 - custom_lint: ^0.6.5 - riverpod_generator: ^2.4.3 - riverpod_lint: ^2.3.13 + custom_lint: ^0.6.10 + riverpod_generator: ^2.4.4 + riverpod_lint: ^2.3.14 flutter: uses-material-design: true diff --git a/generate_crossword/step_05_b/.gitignore b/generate_crossword/step_05_b/.gitignore index 29a3a5017f..79c113f9b5 100644 --- a/generate_crossword/step_05_b/.gitignore +++ b/generate_crossword/step_05_b/.gitignore @@ -5,9 +5,11 @@ *.swp .DS_Store .atom/ +.build/ .buildlog/ .history .svn/ +.swiftpm/ migrate_working_dir/ # IntelliJ related diff --git a/generate_crossword/step_05_b/android/gradle.properties b/generate_crossword/step_05_b/android/gradle.properties index 2597170821..f018a61817 100644 --- a/generate_crossword/step_05_b/android/gradle.properties +++ b/generate_crossword/step_05_b/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/generate_crossword/step_05_b/android/gradle/wrapper/gradle-wrapper.properties b/generate_crossword/step_05_b/android/gradle/wrapper/gradle-wrapper.properties index e1ca574ef0..7bb2df6ba6 100644 --- a/generate_crossword/step_05_b/android/gradle/wrapper/gradle-wrapper.properties +++ b/generate_crossword/step_05_b/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip diff --git a/generate_crossword/step_05_b/android/settings.gradle b/generate_crossword/step_05_b/android/settings.gradle index 536165d35a..b9e43bd376 100644 --- a/generate_crossword/step_05_b/android/settings.gradle +++ b/generate_crossword/step_05_b/android/settings.gradle @@ -18,8 +18,8 @@ pluginManagement { plugins { id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "7.3.0" apply false - id "org.jetbrains.kotlin.android" version "1.7.10" apply false + id "com.android.application" version "8.1.0" apply false + id "org.jetbrains.kotlin.android" version "1.8.22" apply false } include ":app" diff --git a/generate_crossword/step_05_b/linux/CMakeLists.txt b/generate_crossword/step_05_b/linux/CMakeLists.txt index fc29586ba7..76ad2b9b7e 100644 --- a/generate_crossword/step_05_b/linux/CMakeLists.txt +++ b/generate_crossword/step_05_b/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/generate_crossword/step_05_b/linux/my_application.cc b/generate_crossword/step_05_b/linux/my_application.cc deleted file mode 100644 index 7030cf20f4..0000000000 --- a/generate_crossword/step_05_b/linux/my_application.cc +++ /dev/null @@ -1,124 +0,0 @@ -#include "my_application.h" - -#include -#ifdef GDK_WINDOWING_X11 -#include -#endif - -#include "flutter/generated_plugin_registrant.h" - -struct _MyApplication { - GtkApplication parent_instance; - char** dart_entrypoint_arguments; -}; - -G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) - -// Implements GApplication::activate. -static void my_application_activate(GApplication* application) { - MyApplication* self = MY_APPLICATION(application); - GtkWindow* window = - GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); - - // Use a header bar when running in GNOME as this is the common style used - // by applications and is the setup most users will be using (e.g. Ubuntu - // desktop). - // If running on X and not using GNOME then just use a traditional title bar - // in case the window manager does more exotic layout, e.g. tiling. - // If running on Wayland assume the header bar will work (may need changing - // if future cases occur). - gboolean use_header_bar = TRUE; -#ifdef GDK_WINDOWING_X11 - GdkScreen* screen = gtk_window_get_screen(window); - if (GDK_IS_X11_SCREEN(screen)) { - const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); - if (g_strcmp0(wm_name, "GNOME Shell") != 0) { - use_header_bar = FALSE; - } - } -#endif - if (use_header_bar) { - GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); - gtk_widget_show(GTK_WIDGET(header_bar)); - gtk_header_bar_set_title(header_bar, "generate_crossword"); - gtk_header_bar_set_show_close_button(header_bar, TRUE); - gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); - } else { - gtk_window_set_title(window, "generate_crossword"); - } - - gtk_window_set_default_size(window, 1280, 720); - gtk_widget_show(GTK_WIDGET(window)); - - g_autoptr(FlDartProject) project = fl_dart_project_new(); - fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); - - FlView* view = fl_view_new(project); - gtk_widget_show(GTK_WIDGET(view)); - gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); - - fl_register_plugins(FL_PLUGIN_REGISTRY(view)); - - gtk_widget_grab_focus(GTK_WIDGET(view)); -} - -// Implements GApplication::local_command_line. -static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { - MyApplication* self = MY_APPLICATION(application); - // Strip out the first argument as it is the binary name. - self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); - - g_autoptr(GError) error = nullptr; - if (!g_application_register(application, nullptr, &error)) { - g_warning("Failed to register: %s", error->message); - *exit_status = 1; - return TRUE; - } - - g_application_activate(application); - *exit_status = 0; - - return TRUE; -} - -// Implements GApplication::startup. -static void my_application_startup(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application startup. - - G_APPLICATION_CLASS(my_application_parent_class)->startup(application); -} - -// Implements GApplication::shutdown. -static void my_application_shutdown(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application shutdown. - - G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); -} - -// Implements GObject::dispose. -static void my_application_dispose(GObject* object) { - MyApplication* self = MY_APPLICATION(object); - g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); - G_OBJECT_CLASS(my_application_parent_class)->dispose(object); -} - -static void my_application_class_init(MyApplicationClass* klass) { - G_APPLICATION_CLASS(klass)->activate = my_application_activate; - G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; - G_APPLICATION_CLASS(klass)->startup = my_application_startup; - G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; - G_OBJECT_CLASS(klass)->dispose = my_application_dispose; -} - -static void my_application_init(MyApplication* self) {} - -MyApplication* my_application_new() { - return MY_APPLICATION(g_object_new(my_application_get_type(), - "application-id", APPLICATION_ID, - "flags", G_APPLICATION_NON_UNIQUE, - nullptr)); -} diff --git a/generate_crossword/step_05_b/linux/runner/CMakeLists.txt b/generate_crossword/step_05_b/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/generate_crossword/step_05_b/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/generate_crossword/step_05_b/linux/main.cc b/generate_crossword/step_05_b/linux/runner/main.cc similarity index 100% rename from generate_crossword/step_05_b/linux/main.cc rename to generate_crossword/step_05_b/linux/runner/main.cc diff --git a/generate_crossword/step_05_b/linux/runner/my_application.cc b/generate_crossword/step_05_b/linux/runner/my_application.cc new file mode 100644 index 0000000000..dbf3c88029 --- /dev/null +++ b/generate_crossword/step_05_b/linux/runner/my_application.cc @@ -0,0 +1,130 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "generate_crossword"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "generate_crossword"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/generate_crossword/step_05_b/linux/my_application.h b/generate_crossword/step_05_b/linux/runner/my_application.h similarity index 100% rename from generate_crossword/step_05_b/linux/my_application.h rename to generate_crossword/step_05_b/linux/runner/my_application.h diff --git a/generate_crossword/step_05_b/macos/Runner/AppDelegate.swift b/generate_crossword/step_05_b/macos/Runner/AppDelegate.swift index 8e02df2888..b3c1761412 100644 --- a/generate_crossword/step_05_b/macos/Runner/AppDelegate.swift +++ b/generate_crossword/step_05_b/macos/Runner/AppDelegate.swift @@ -6,4 +6,8 @@ class AppDelegate: FlutterAppDelegate { override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { return true } + + override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { + return true + } } diff --git a/generate_crossword/step_05_b/pubspec.yaml b/generate_crossword/step_05_b/pubspec.yaml index b2180dfe85..ed0d380d27 100644 --- a/generate_crossword/step_05_b/pubspec.yaml +++ b/generate_crossword/step_05_b/pubspec.yaml @@ -12,21 +12,21 @@ dependencies: built_collection: ^5.1.1 built_value: ^8.9.2 characters: ^1.3.0 - flutter_riverpod: ^2.5.1 + flutter_riverpod: ^2.5.3 intl: ^0.19.0 - riverpod: ^2.5.1 - riverpod_annotation: ^2.3.5 - two_dimensional_scrollables: ^0.3.1 + riverpod: ^2.5.3 + riverpod_annotation: ^2.5.3 + two_dimensional_scrollables: ^0.3.2 dev_dependencies: flutter_test: sdk: flutter - flutter_lints: ^4.0.0 - build_runner: ^2.4.12 + flutter_lints: ^5.0.0 + build_runner: ^2.4.13 built_value_generator: ^8.9.2 - custom_lint: ^0.6.5 - riverpod_generator: ^2.4.3 - riverpod_lint: ^2.3.13 + custom_lint: ^0.6.10 + riverpod_generator: ^2.4.4 + riverpod_lint: ^2.3.14 flutter: uses-material-design: true diff --git a/generate_crossword/step_05_c/.gitignore b/generate_crossword/step_05_c/.gitignore index 29a3a5017f..79c113f9b5 100644 --- a/generate_crossword/step_05_c/.gitignore +++ b/generate_crossword/step_05_c/.gitignore @@ -5,9 +5,11 @@ *.swp .DS_Store .atom/ +.build/ .buildlog/ .history .svn/ +.swiftpm/ migrate_working_dir/ # IntelliJ related diff --git a/generate_crossword/step_05_c/android/gradle.properties b/generate_crossword/step_05_c/android/gradle.properties index 2597170821..f018a61817 100644 --- a/generate_crossword/step_05_c/android/gradle.properties +++ b/generate_crossword/step_05_c/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/generate_crossword/step_05_c/android/gradle/wrapper/gradle-wrapper.properties b/generate_crossword/step_05_c/android/gradle/wrapper/gradle-wrapper.properties index e1ca574ef0..7bb2df6ba6 100644 --- a/generate_crossword/step_05_c/android/gradle/wrapper/gradle-wrapper.properties +++ b/generate_crossword/step_05_c/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip diff --git a/generate_crossword/step_05_c/android/settings.gradle b/generate_crossword/step_05_c/android/settings.gradle index 536165d35a..b9e43bd376 100644 --- a/generate_crossword/step_05_c/android/settings.gradle +++ b/generate_crossword/step_05_c/android/settings.gradle @@ -18,8 +18,8 @@ pluginManagement { plugins { id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "7.3.0" apply false - id "org.jetbrains.kotlin.android" version "1.7.10" apply false + id "com.android.application" version "8.1.0" apply false + id "org.jetbrains.kotlin.android" version "1.8.22" apply false } include ":app" diff --git a/generate_crossword/step_05_c/linux/CMakeLists.txt b/generate_crossword/step_05_c/linux/CMakeLists.txt index fc29586ba7..76ad2b9b7e 100644 --- a/generate_crossword/step_05_c/linux/CMakeLists.txt +++ b/generate_crossword/step_05_c/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/generate_crossword/step_05_c/linux/my_application.cc b/generate_crossword/step_05_c/linux/my_application.cc deleted file mode 100644 index 7030cf20f4..0000000000 --- a/generate_crossword/step_05_c/linux/my_application.cc +++ /dev/null @@ -1,124 +0,0 @@ -#include "my_application.h" - -#include -#ifdef GDK_WINDOWING_X11 -#include -#endif - -#include "flutter/generated_plugin_registrant.h" - -struct _MyApplication { - GtkApplication parent_instance; - char** dart_entrypoint_arguments; -}; - -G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) - -// Implements GApplication::activate. -static void my_application_activate(GApplication* application) { - MyApplication* self = MY_APPLICATION(application); - GtkWindow* window = - GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); - - // Use a header bar when running in GNOME as this is the common style used - // by applications and is the setup most users will be using (e.g. Ubuntu - // desktop). - // If running on X and not using GNOME then just use a traditional title bar - // in case the window manager does more exotic layout, e.g. tiling. - // If running on Wayland assume the header bar will work (may need changing - // if future cases occur). - gboolean use_header_bar = TRUE; -#ifdef GDK_WINDOWING_X11 - GdkScreen* screen = gtk_window_get_screen(window); - if (GDK_IS_X11_SCREEN(screen)) { - const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); - if (g_strcmp0(wm_name, "GNOME Shell") != 0) { - use_header_bar = FALSE; - } - } -#endif - if (use_header_bar) { - GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); - gtk_widget_show(GTK_WIDGET(header_bar)); - gtk_header_bar_set_title(header_bar, "generate_crossword"); - gtk_header_bar_set_show_close_button(header_bar, TRUE); - gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); - } else { - gtk_window_set_title(window, "generate_crossword"); - } - - gtk_window_set_default_size(window, 1280, 720); - gtk_widget_show(GTK_WIDGET(window)); - - g_autoptr(FlDartProject) project = fl_dart_project_new(); - fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); - - FlView* view = fl_view_new(project); - gtk_widget_show(GTK_WIDGET(view)); - gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); - - fl_register_plugins(FL_PLUGIN_REGISTRY(view)); - - gtk_widget_grab_focus(GTK_WIDGET(view)); -} - -// Implements GApplication::local_command_line. -static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { - MyApplication* self = MY_APPLICATION(application); - // Strip out the first argument as it is the binary name. - self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); - - g_autoptr(GError) error = nullptr; - if (!g_application_register(application, nullptr, &error)) { - g_warning("Failed to register: %s", error->message); - *exit_status = 1; - return TRUE; - } - - g_application_activate(application); - *exit_status = 0; - - return TRUE; -} - -// Implements GApplication::startup. -static void my_application_startup(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application startup. - - G_APPLICATION_CLASS(my_application_parent_class)->startup(application); -} - -// Implements GApplication::shutdown. -static void my_application_shutdown(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application shutdown. - - G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); -} - -// Implements GObject::dispose. -static void my_application_dispose(GObject* object) { - MyApplication* self = MY_APPLICATION(object); - g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); - G_OBJECT_CLASS(my_application_parent_class)->dispose(object); -} - -static void my_application_class_init(MyApplicationClass* klass) { - G_APPLICATION_CLASS(klass)->activate = my_application_activate; - G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; - G_APPLICATION_CLASS(klass)->startup = my_application_startup; - G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; - G_OBJECT_CLASS(klass)->dispose = my_application_dispose; -} - -static void my_application_init(MyApplication* self) {} - -MyApplication* my_application_new() { - return MY_APPLICATION(g_object_new(my_application_get_type(), - "application-id", APPLICATION_ID, - "flags", G_APPLICATION_NON_UNIQUE, - nullptr)); -} diff --git a/generate_crossword/step_05_c/linux/runner/CMakeLists.txt b/generate_crossword/step_05_c/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/generate_crossword/step_05_c/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/generate_crossword/step_05_c/linux/main.cc b/generate_crossword/step_05_c/linux/runner/main.cc similarity index 100% rename from generate_crossword/step_05_c/linux/main.cc rename to generate_crossword/step_05_c/linux/runner/main.cc diff --git a/generate_crossword/step_05_c/linux/runner/my_application.cc b/generate_crossword/step_05_c/linux/runner/my_application.cc new file mode 100644 index 0000000000..dbf3c88029 --- /dev/null +++ b/generate_crossword/step_05_c/linux/runner/my_application.cc @@ -0,0 +1,130 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "generate_crossword"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "generate_crossword"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/generate_crossword/step_05_c/linux/my_application.h b/generate_crossword/step_05_c/linux/runner/my_application.h similarity index 100% rename from generate_crossword/step_05_c/linux/my_application.h rename to generate_crossword/step_05_c/linux/runner/my_application.h diff --git a/generate_crossword/step_05_c/macos/Runner/AppDelegate.swift b/generate_crossword/step_05_c/macos/Runner/AppDelegate.swift index 8e02df2888..b3c1761412 100644 --- a/generate_crossword/step_05_c/macos/Runner/AppDelegate.swift +++ b/generate_crossword/step_05_c/macos/Runner/AppDelegate.swift @@ -6,4 +6,8 @@ class AppDelegate: FlutterAppDelegate { override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { return true } + + override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { + return true + } } diff --git a/generate_crossword/step_05_c/pubspec.yaml b/generate_crossword/step_05_c/pubspec.yaml index b2180dfe85..ed0d380d27 100644 --- a/generate_crossword/step_05_c/pubspec.yaml +++ b/generate_crossword/step_05_c/pubspec.yaml @@ -12,21 +12,21 @@ dependencies: built_collection: ^5.1.1 built_value: ^8.9.2 characters: ^1.3.0 - flutter_riverpod: ^2.5.1 + flutter_riverpod: ^2.5.3 intl: ^0.19.0 - riverpod: ^2.5.1 - riverpod_annotation: ^2.3.5 - two_dimensional_scrollables: ^0.3.1 + riverpod: ^2.5.3 + riverpod_annotation: ^2.5.3 + two_dimensional_scrollables: ^0.3.2 dev_dependencies: flutter_test: sdk: flutter - flutter_lints: ^4.0.0 - build_runner: ^2.4.12 + flutter_lints: ^5.0.0 + build_runner: ^2.4.13 built_value_generator: ^8.9.2 - custom_lint: ^0.6.5 - riverpod_generator: ^2.4.3 - riverpod_lint: ^2.3.13 + custom_lint: ^0.6.10 + riverpod_generator: ^2.4.4 + riverpod_lint: ^2.3.14 flutter: uses-material-design: true diff --git a/generate_crossword/step_06/.gitignore b/generate_crossword/step_06/.gitignore index 29a3a5017f..79c113f9b5 100644 --- a/generate_crossword/step_06/.gitignore +++ b/generate_crossword/step_06/.gitignore @@ -5,9 +5,11 @@ *.swp .DS_Store .atom/ +.build/ .buildlog/ .history .svn/ +.swiftpm/ migrate_working_dir/ # IntelliJ related diff --git a/generate_crossword/step_06/android/gradle.properties b/generate_crossword/step_06/android/gradle.properties index 2597170821..f018a61817 100644 --- a/generate_crossword/step_06/android/gradle.properties +++ b/generate_crossword/step_06/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/generate_crossword/step_06/android/gradle/wrapper/gradle-wrapper.properties b/generate_crossword/step_06/android/gradle/wrapper/gradle-wrapper.properties index e1ca574ef0..7bb2df6ba6 100644 --- a/generate_crossword/step_06/android/gradle/wrapper/gradle-wrapper.properties +++ b/generate_crossword/step_06/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip diff --git a/generate_crossword/step_06/android/settings.gradle b/generate_crossword/step_06/android/settings.gradle index 536165d35a..b9e43bd376 100644 --- a/generate_crossword/step_06/android/settings.gradle +++ b/generate_crossword/step_06/android/settings.gradle @@ -18,8 +18,8 @@ pluginManagement { plugins { id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "7.3.0" apply false - id "org.jetbrains.kotlin.android" version "1.7.10" apply false + id "com.android.application" version "8.1.0" apply false + id "org.jetbrains.kotlin.android" version "1.8.22" apply false } include ":app" diff --git a/generate_crossword/step_06/linux/CMakeLists.txt b/generate_crossword/step_06/linux/CMakeLists.txt index fc29586ba7..76ad2b9b7e 100644 --- a/generate_crossword/step_06/linux/CMakeLists.txt +++ b/generate_crossword/step_06/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/generate_crossword/step_06/linux/my_application.cc b/generate_crossword/step_06/linux/my_application.cc deleted file mode 100644 index 7030cf20f4..0000000000 --- a/generate_crossword/step_06/linux/my_application.cc +++ /dev/null @@ -1,124 +0,0 @@ -#include "my_application.h" - -#include -#ifdef GDK_WINDOWING_X11 -#include -#endif - -#include "flutter/generated_plugin_registrant.h" - -struct _MyApplication { - GtkApplication parent_instance; - char** dart_entrypoint_arguments; -}; - -G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) - -// Implements GApplication::activate. -static void my_application_activate(GApplication* application) { - MyApplication* self = MY_APPLICATION(application); - GtkWindow* window = - GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); - - // Use a header bar when running in GNOME as this is the common style used - // by applications and is the setup most users will be using (e.g. Ubuntu - // desktop). - // If running on X and not using GNOME then just use a traditional title bar - // in case the window manager does more exotic layout, e.g. tiling. - // If running on Wayland assume the header bar will work (may need changing - // if future cases occur). - gboolean use_header_bar = TRUE; -#ifdef GDK_WINDOWING_X11 - GdkScreen* screen = gtk_window_get_screen(window); - if (GDK_IS_X11_SCREEN(screen)) { - const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); - if (g_strcmp0(wm_name, "GNOME Shell") != 0) { - use_header_bar = FALSE; - } - } -#endif - if (use_header_bar) { - GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); - gtk_widget_show(GTK_WIDGET(header_bar)); - gtk_header_bar_set_title(header_bar, "generate_crossword"); - gtk_header_bar_set_show_close_button(header_bar, TRUE); - gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); - } else { - gtk_window_set_title(window, "generate_crossword"); - } - - gtk_window_set_default_size(window, 1280, 720); - gtk_widget_show(GTK_WIDGET(window)); - - g_autoptr(FlDartProject) project = fl_dart_project_new(); - fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); - - FlView* view = fl_view_new(project); - gtk_widget_show(GTK_WIDGET(view)); - gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); - - fl_register_plugins(FL_PLUGIN_REGISTRY(view)); - - gtk_widget_grab_focus(GTK_WIDGET(view)); -} - -// Implements GApplication::local_command_line. -static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { - MyApplication* self = MY_APPLICATION(application); - // Strip out the first argument as it is the binary name. - self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); - - g_autoptr(GError) error = nullptr; - if (!g_application_register(application, nullptr, &error)) { - g_warning("Failed to register: %s", error->message); - *exit_status = 1; - return TRUE; - } - - g_application_activate(application); - *exit_status = 0; - - return TRUE; -} - -// Implements GApplication::startup. -static void my_application_startup(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application startup. - - G_APPLICATION_CLASS(my_application_parent_class)->startup(application); -} - -// Implements GApplication::shutdown. -static void my_application_shutdown(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application shutdown. - - G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); -} - -// Implements GObject::dispose. -static void my_application_dispose(GObject* object) { - MyApplication* self = MY_APPLICATION(object); - g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); - G_OBJECT_CLASS(my_application_parent_class)->dispose(object); -} - -static void my_application_class_init(MyApplicationClass* klass) { - G_APPLICATION_CLASS(klass)->activate = my_application_activate; - G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; - G_APPLICATION_CLASS(klass)->startup = my_application_startup; - G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; - G_OBJECT_CLASS(klass)->dispose = my_application_dispose; -} - -static void my_application_init(MyApplication* self) {} - -MyApplication* my_application_new() { - return MY_APPLICATION(g_object_new(my_application_get_type(), - "application-id", APPLICATION_ID, - "flags", G_APPLICATION_NON_UNIQUE, - nullptr)); -} diff --git a/generate_crossword/step_06/linux/runner/CMakeLists.txt b/generate_crossword/step_06/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/generate_crossword/step_06/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/generate_crossword/step_06/linux/main.cc b/generate_crossword/step_06/linux/runner/main.cc similarity index 100% rename from generate_crossword/step_06/linux/main.cc rename to generate_crossword/step_06/linux/runner/main.cc diff --git a/generate_crossword/step_06/linux/runner/my_application.cc b/generate_crossword/step_06/linux/runner/my_application.cc new file mode 100644 index 0000000000..dbf3c88029 --- /dev/null +++ b/generate_crossword/step_06/linux/runner/my_application.cc @@ -0,0 +1,130 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "generate_crossword"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "generate_crossword"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/generate_crossword/step_06/linux/my_application.h b/generate_crossword/step_06/linux/runner/my_application.h similarity index 100% rename from generate_crossword/step_06/linux/my_application.h rename to generate_crossword/step_06/linux/runner/my_application.h diff --git a/generate_crossword/step_06/macos/Runner/AppDelegate.swift b/generate_crossword/step_06/macos/Runner/AppDelegate.swift index 8e02df2888..b3c1761412 100644 --- a/generate_crossword/step_06/macos/Runner/AppDelegate.swift +++ b/generate_crossword/step_06/macos/Runner/AppDelegate.swift @@ -6,4 +6,8 @@ class AppDelegate: FlutterAppDelegate { override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { return true } + + override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { + return true + } } diff --git a/generate_crossword/step_06/pubspec.yaml b/generate_crossword/step_06/pubspec.yaml index b2180dfe85..ed0d380d27 100644 --- a/generate_crossword/step_06/pubspec.yaml +++ b/generate_crossword/step_06/pubspec.yaml @@ -12,21 +12,21 @@ dependencies: built_collection: ^5.1.1 built_value: ^8.9.2 characters: ^1.3.0 - flutter_riverpod: ^2.5.1 + flutter_riverpod: ^2.5.3 intl: ^0.19.0 - riverpod: ^2.5.1 - riverpod_annotation: ^2.3.5 - two_dimensional_scrollables: ^0.3.1 + riverpod: ^2.5.3 + riverpod_annotation: ^2.5.3 + two_dimensional_scrollables: ^0.3.2 dev_dependencies: flutter_test: sdk: flutter - flutter_lints: ^4.0.0 - build_runner: ^2.4.12 + flutter_lints: ^5.0.0 + build_runner: ^2.4.13 built_value_generator: ^8.9.2 - custom_lint: ^0.6.5 - riverpod_generator: ^2.4.3 - riverpod_lint: ^2.3.13 + custom_lint: ^0.6.10 + riverpod_generator: ^2.4.4 + riverpod_lint: ^2.3.14 flutter: uses-material-design: true diff --git a/generate_crossword/step_07/.gitignore b/generate_crossword/step_07/.gitignore index 29a3a5017f..79c113f9b5 100644 --- a/generate_crossword/step_07/.gitignore +++ b/generate_crossword/step_07/.gitignore @@ -5,9 +5,11 @@ *.swp .DS_Store .atom/ +.build/ .buildlog/ .history .svn/ +.swiftpm/ migrate_working_dir/ # IntelliJ related diff --git a/generate_crossword/step_07/android/gradle.properties b/generate_crossword/step_07/android/gradle.properties index 2597170821..f018a61817 100644 --- a/generate_crossword/step_07/android/gradle.properties +++ b/generate_crossword/step_07/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/generate_crossword/step_07/android/gradle/wrapper/gradle-wrapper.properties b/generate_crossword/step_07/android/gradle/wrapper/gradle-wrapper.properties index e1ca574ef0..7bb2df6ba6 100644 --- a/generate_crossword/step_07/android/gradle/wrapper/gradle-wrapper.properties +++ b/generate_crossword/step_07/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip diff --git a/generate_crossword/step_07/android/settings.gradle b/generate_crossword/step_07/android/settings.gradle index 536165d35a..b9e43bd376 100644 --- a/generate_crossword/step_07/android/settings.gradle +++ b/generate_crossword/step_07/android/settings.gradle @@ -18,8 +18,8 @@ pluginManagement { plugins { id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "7.3.0" apply false - id "org.jetbrains.kotlin.android" version "1.7.10" apply false + id "com.android.application" version "8.1.0" apply false + id "org.jetbrains.kotlin.android" version "1.8.22" apply false } include ":app" diff --git a/generate_crossword/step_07/linux/CMakeLists.txt b/generate_crossword/step_07/linux/CMakeLists.txt index fc29586ba7..76ad2b9b7e 100644 --- a/generate_crossword/step_07/linux/CMakeLists.txt +++ b/generate_crossword/step_07/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/generate_crossword/step_07/linux/my_application.cc b/generate_crossword/step_07/linux/my_application.cc deleted file mode 100644 index 7030cf20f4..0000000000 --- a/generate_crossword/step_07/linux/my_application.cc +++ /dev/null @@ -1,124 +0,0 @@ -#include "my_application.h" - -#include -#ifdef GDK_WINDOWING_X11 -#include -#endif - -#include "flutter/generated_plugin_registrant.h" - -struct _MyApplication { - GtkApplication parent_instance; - char** dart_entrypoint_arguments; -}; - -G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) - -// Implements GApplication::activate. -static void my_application_activate(GApplication* application) { - MyApplication* self = MY_APPLICATION(application); - GtkWindow* window = - GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); - - // Use a header bar when running in GNOME as this is the common style used - // by applications and is the setup most users will be using (e.g. Ubuntu - // desktop). - // If running on X and not using GNOME then just use a traditional title bar - // in case the window manager does more exotic layout, e.g. tiling. - // If running on Wayland assume the header bar will work (may need changing - // if future cases occur). - gboolean use_header_bar = TRUE; -#ifdef GDK_WINDOWING_X11 - GdkScreen* screen = gtk_window_get_screen(window); - if (GDK_IS_X11_SCREEN(screen)) { - const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); - if (g_strcmp0(wm_name, "GNOME Shell") != 0) { - use_header_bar = FALSE; - } - } -#endif - if (use_header_bar) { - GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); - gtk_widget_show(GTK_WIDGET(header_bar)); - gtk_header_bar_set_title(header_bar, "generate_crossword"); - gtk_header_bar_set_show_close_button(header_bar, TRUE); - gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); - } else { - gtk_window_set_title(window, "generate_crossword"); - } - - gtk_window_set_default_size(window, 1280, 720); - gtk_widget_show(GTK_WIDGET(window)); - - g_autoptr(FlDartProject) project = fl_dart_project_new(); - fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); - - FlView* view = fl_view_new(project); - gtk_widget_show(GTK_WIDGET(view)); - gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); - - fl_register_plugins(FL_PLUGIN_REGISTRY(view)); - - gtk_widget_grab_focus(GTK_WIDGET(view)); -} - -// Implements GApplication::local_command_line. -static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { - MyApplication* self = MY_APPLICATION(application); - // Strip out the first argument as it is the binary name. - self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); - - g_autoptr(GError) error = nullptr; - if (!g_application_register(application, nullptr, &error)) { - g_warning("Failed to register: %s", error->message); - *exit_status = 1; - return TRUE; - } - - g_application_activate(application); - *exit_status = 0; - - return TRUE; -} - -// Implements GApplication::startup. -static void my_application_startup(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application startup. - - G_APPLICATION_CLASS(my_application_parent_class)->startup(application); -} - -// Implements GApplication::shutdown. -static void my_application_shutdown(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application shutdown. - - G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); -} - -// Implements GObject::dispose. -static void my_application_dispose(GObject* object) { - MyApplication* self = MY_APPLICATION(object); - g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); - G_OBJECT_CLASS(my_application_parent_class)->dispose(object); -} - -static void my_application_class_init(MyApplicationClass* klass) { - G_APPLICATION_CLASS(klass)->activate = my_application_activate; - G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; - G_APPLICATION_CLASS(klass)->startup = my_application_startup; - G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; - G_OBJECT_CLASS(klass)->dispose = my_application_dispose; -} - -static void my_application_init(MyApplication* self) {} - -MyApplication* my_application_new() { - return MY_APPLICATION(g_object_new(my_application_get_type(), - "application-id", APPLICATION_ID, - "flags", G_APPLICATION_NON_UNIQUE, - nullptr)); -} diff --git a/generate_crossword/step_07/linux/runner/CMakeLists.txt b/generate_crossword/step_07/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/generate_crossword/step_07/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/generate_crossword/step_07/linux/main.cc b/generate_crossword/step_07/linux/runner/main.cc similarity index 100% rename from generate_crossword/step_07/linux/main.cc rename to generate_crossword/step_07/linux/runner/main.cc diff --git a/generate_crossword/step_07/linux/runner/my_application.cc b/generate_crossword/step_07/linux/runner/my_application.cc new file mode 100644 index 0000000000..dbf3c88029 --- /dev/null +++ b/generate_crossword/step_07/linux/runner/my_application.cc @@ -0,0 +1,130 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "generate_crossword"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "generate_crossword"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/generate_crossword/step_07/linux/my_application.h b/generate_crossword/step_07/linux/runner/my_application.h similarity index 100% rename from generate_crossword/step_07/linux/my_application.h rename to generate_crossword/step_07/linux/runner/my_application.h diff --git a/generate_crossword/step_07/macos/Runner/AppDelegate.swift b/generate_crossword/step_07/macos/Runner/AppDelegate.swift index 8e02df2888..b3c1761412 100644 --- a/generate_crossword/step_07/macos/Runner/AppDelegate.swift +++ b/generate_crossword/step_07/macos/Runner/AppDelegate.swift @@ -6,4 +6,8 @@ class AppDelegate: FlutterAppDelegate { override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { return true } + + override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { + return true + } } diff --git a/generate_crossword/step_07/pubspec.yaml b/generate_crossword/step_07/pubspec.yaml index b2180dfe85..ed0d380d27 100644 --- a/generate_crossword/step_07/pubspec.yaml +++ b/generate_crossword/step_07/pubspec.yaml @@ -12,21 +12,21 @@ dependencies: built_collection: ^5.1.1 built_value: ^8.9.2 characters: ^1.3.0 - flutter_riverpod: ^2.5.1 + flutter_riverpod: ^2.5.3 intl: ^0.19.0 - riverpod: ^2.5.1 - riverpod_annotation: ^2.3.5 - two_dimensional_scrollables: ^0.3.1 + riverpod: ^2.5.3 + riverpod_annotation: ^2.5.3 + two_dimensional_scrollables: ^0.3.2 dev_dependencies: flutter_test: sdk: flutter - flutter_lints: ^4.0.0 - build_runner: ^2.4.12 + flutter_lints: ^5.0.0 + build_runner: ^2.4.13 built_value_generator: ^8.9.2 - custom_lint: ^0.6.5 - riverpod_generator: ^2.4.3 - riverpod_lint: ^2.3.13 + custom_lint: ^0.6.10 + riverpod_generator: ^2.4.4 + riverpod_lint: ^2.3.14 flutter: uses-material-design: true diff --git a/generate_crossword/step_08/.gitignore b/generate_crossword/step_08/.gitignore index 29a3a5017f..79c113f9b5 100644 --- a/generate_crossword/step_08/.gitignore +++ b/generate_crossword/step_08/.gitignore @@ -5,9 +5,11 @@ *.swp .DS_Store .atom/ +.build/ .buildlog/ .history .svn/ +.swiftpm/ migrate_working_dir/ # IntelliJ related diff --git a/generate_crossword/step_08/android/gradle.properties b/generate_crossword/step_08/android/gradle.properties index 2597170821..f018a61817 100644 --- a/generate_crossword/step_08/android/gradle.properties +++ b/generate_crossword/step_08/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/generate_crossword/step_08/android/gradle/wrapper/gradle-wrapper.properties b/generate_crossword/step_08/android/gradle/wrapper/gradle-wrapper.properties index e1ca574ef0..7bb2df6ba6 100644 --- a/generate_crossword/step_08/android/gradle/wrapper/gradle-wrapper.properties +++ b/generate_crossword/step_08/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip diff --git a/generate_crossword/step_08/android/settings.gradle b/generate_crossword/step_08/android/settings.gradle index 536165d35a..b9e43bd376 100644 --- a/generate_crossword/step_08/android/settings.gradle +++ b/generate_crossword/step_08/android/settings.gradle @@ -18,8 +18,8 @@ pluginManagement { plugins { id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "7.3.0" apply false - id "org.jetbrains.kotlin.android" version "1.7.10" apply false + id "com.android.application" version "8.1.0" apply false + id "org.jetbrains.kotlin.android" version "1.8.22" apply false } include ":app" diff --git a/generate_crossword/step_08/linux/CMakeLists.txt b/generate_crossword/step_08/linux/CMakeLists.txt index fc29586ba7..76ad2b9b7e 100644 --- a/generate_crossword/step_08/linux/CMakeLists.txt +++ b/generate_crossword/step_08/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/generate_crossword/step_08/linux/my_application.cc b/generate_crossword/step_08/linux/my_application.cc deleted file mode 100644 index 7030cf20f4..0000000000 --- a/generate_crossword/step_08/linux/my_application.cc +++ /dev/null @@ -1,124 +0,0 @@ -#include "my_application.h" - -#include -#ifdef GDK_WINDOWING_X11 -#include -#endif - -#include "flutter/generated_plugin_registrant.h" - -struct _MyApplication { - GtkApplication parent_instance; - char** dart_entrypoint_arguments; -}; - -G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) - -// Implements GApplication::activate. -static void my_application_activate(GApplication* application) { - MyApplication* self = MY_APPLICATION(application); - GtkWindow* window = - GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); - - // Use a header bar when running in GNOME as this is the common style used - // by applications and is the setup most users will be using (e.g. Ubuntu - // desktop). - // If running on X and not using GNOME then just use a traditional title bar - // in case the window manager does more exotic layout, e.g. tiling. - // If running on Wayland assume the header bar will work (may need changing - // if future cases occur). - gboolean use_header_bar = TRUE; -#ifdef GDK_WINDOWING_X11 - GdkScreen* screen = gtk_window_get_screen(window); - if (GDK_IS_X11_SCREEN(screen)) { - const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); - if (g_strcmp0(wm_name, "GNOME Shell") != 0) { - use_header_bar = FALSE; - } - } -#endif - if (use_header_bar) { - GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); - gtk_widget_show(GTK_WIDGET(header_bar)); - gtk_header_bar_set_title(header_bar, "generate_crossword"); - gtk_header_bar_set_show_close_button(header_bar, TRUE); - gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); - } else { - gtk_window_set_title(window, "generate_crossword"); - } - - gtk_window_set_default_size(window, 1280, 720); - gtk_widget_show(GTK_WIDGET(window)); - - g_autoptr(FlDartProject) project = fl_dart_project_new(); - fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); - - FlView* view = fl_view_new(project); - gtk_widget_show(GTK_WIDGET(view)); - gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); - - fl_register_plugins(FL_PLUGIN_REGISTRY(view)); - - gtk_widget_grab_focus(GTK_WIDGET(view)); -} - -// Implements GApplication::local_command_line. -static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { - MyApplication* self = MY_APPLICATION(application); - // Strip out the first argument as it is the binary name. - self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); - - g_autoptr(GError) error = nullptr; - if (!g_application_register(application, nullptr, &error)) { - g_warning("Failed to register: %s", error->message); - *exit_status = 1; - return TRUE; - } - - g_application_activate(application); - *exit_status = 0; - - return TRUE; -} - -// Implements GApplication::startup. -static void my_application_startup(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application startup. - - G_APPLICATION_CLASS(my_application_parent_class)->startup(application); -} - -// Implements GApplication::shutdown. -static void my_application_shutdown(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application shutdown. - - G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); -} - -// Implements GObject::dispose. -static void my_application_dispose(GObject* object) { - MyApplication* self = MY_APPLICATION(object); - g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); - G_OBJECT_CLASS(my_application_parent_class)->dispose(object); -} - -static void my_application_class_init(MyApplicationClass* klass) { - G_APPLICATION_CLASS(klass)->activate = my_application_activate; - G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; - G_APPLICATION_CLASS(klass)->startup = my_application_startup; - G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; - G_OBJECT_CLASS(klass)->dispose = my_application_dispose; -} - -static void my_application_init(MyApplication* self) {} - -MyApplication* my_application_new() { - return MY_APPLICATION(g_object_new(my_application_get_type(), - "application-id", APPLICATION_ID, - "flags", G_APPLICATION_NON_UNIQUE, - nullptr)); -} diff --git a/generate_crossword/step_08/linux/runner/CMakeLists.txt b/generate_crossword/step_08/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/generate_crossword/step_08/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/generate_crossword/step_08/linux/main.cc b/generate_crossword/step_08/linux/runner/main.cc similarity index 100% rename from generate_crossword/step_08/linux/main.cc rename to generate_crossword/step_08/linux/runner/main.cc diff --git a/generate_crossword/step_08/linux/runner/my_application.cc b/generate_crossword/step_08/linux/runner/my_application.cc new file mode 100644 index 0000000000..dbf3c88029 --- /dev/null +++ b/generate_crossword/step_08/linux/runner/my_application.cc @@ -0,0 +1,130 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "generate_crossword"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "generate_crossword"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/generate_crossword/step_08/linux/my_application.h b/generate_crossword/step_08/linux/runner/my_application.h similarity index 100% rename from generate_crossword/step_08/linux/my_application.h rename to generate_crossword/step_08/linux/runner/my_application.h diff --git a/generate_crossword/step_08/macos/Runner/AppDelegate.swift b/generate_crossword/step_08/macos/Runner/AppDelegate.swift index 8e02df2888..b3c1761412 100644 --- a/generate_crossword/step_08/macos/Runner/AppDelegate.swift +++ b/generate_crossword/step_08/macos/Runner/AppDelegate.swift @@ -6,4 +6,8 @@ class AppDelegate: FlutterAppDelegate { override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { return true } + + override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { + return true + } } diff --git a/generate_crossword/step_08/pubspec.yaml b/generate_crossword/step_08/pubspec.yaml index b2180dfe85..ed0d380d27 100644 --- a/generate_crossword/step_08/pubspec.yaml +++ b/generate_crossword/step_08/pubspec.yaml @@ -12,21 +12,21 @@ dependencies: built_collection: ^5.1.1 built_value: ^8.9.2 characters: ^1.3.0 - flutter_riverpod: ^2.5.1 + flutter_riverpod: ^2.5.3 intl: ^0.19.0 - riverpod: ^2.5.1 - riverpod_annotation: ^2.3.5 - two_dimensional_scrollables: ^0.3.1 + riverpod: ^2.5.3 + riverpod_annotation: ^2.5.3 + two_dimensional_scrollables: ^0.3.2 dev_dependencies: flutter_test: sdk: flutter - flutter_lints: ^4.0.0 - build_runner: ^2.4.12 + flutter_lints: ^5.0.0 + build_runner: ^2.4.13 built_value_generator: ^8.9.2 - custom_lint: ^0.6.5 - riverpod_generator: ^2.4.3 - riverpod_lint: ^2.3.13 + custom_lint: ^0.6.10 + riverpod_generator: ^2.4.4 + riverpod_lint: ^2.3.14 flutter: uses-material-design: true diff --git a/generate_crossword/step_09/.gitignore b/generate_crossword/step_09/.gitignore index 29a3a5017f..79c113f9b5 100644 --- a/generate_crossword/step_09/.gitignore +++ b/generate_crossword/step_09/.gitignore @@ -5,9 +5,11 @@ *.swp .DS_Store .atom/ +.build/ .buildlog/ .history .svn/ +.swiftpm/ migrate_working_dir/ # IntelliJ related diff --git a/generate_crossword/step_09/android/gradle.properties b/generate_crossword/step_09/android/gradle.properties index 2597170821..f018a61817 100644 --- a/generate_crossword/step_09/android/gradle.properties +++ b/generate_crossword/step_09/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/generate_crossword/step_09/android/gradle/wrapper/gradle-wrapper.properties b/generate_crossword/step_09/android/gradle/wrapper/gradle-wrapper.properties index e1ca574ef0..7bb2df6ba6 100644 --- a/generate_crossword/step_09/android/gradle/wrapper/gradle-wrapper.properties +++ b/generate_crossword/step_09/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip diff --git a/generate_crossword/step_09/android/settings.gradle b/generate_crossword/step_09/android/settings.gradle index 536165d35a..b9e43bd376 100644 --- a/generate_crossword/step_09/android/settings.gradle +++ b/generate_crossword/step_09/android/settings.gradle @@ -18,8 +18,8 @@ pluginManagement { plugins { id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "7.3.0" apply false - id "org.jetbrains.kotlin.android" version "1.7.10" apply false + id "com.android.application" version "8.1.0" apply false + id "org.jetbrains.kotlin.android" version "1.8.22" apply false } include ":app" diff --git a/generate_crossword/step_09/linux/CMakeLists.txt b/generate_crossword/step_09/linux/CMakeLists.txt index fc29586ba7..76ad2b9b7e 100644 --- a/generate_crossword/step_09/linux/CMakeLists.txt +++ b/generate_crossword/step_09/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/generate_crossword/step_09/linux/my_application.cc b/generate_crossword/step_09/linux/my_application.cc deleted file mode 100644 index 7030cf20f4..0000000000 --- a/generate_crossword/step_09/linux/my_application.cc +++ /dev/null @@ -1,124 +0,0 @@ -#include "my_application.h" - -#include -#ifdef GDK_WINDOWING_X11 -#include -#endif - -#include "flutter/generated_plugin_registrant.h" - -struct _MyApplication { - GtkApplication parent_instance; - char** dart_entrypoint_arguments; -}; - -G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) - -// Implements GApplication::activate. -static void my_application_activate(GApplication* application) { - MyApplication* self = MY_APPLICATION(application); - GtkWindow* window = - GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); - - // Use a header bar when running in GNOME as this is the common style used - // by applications and is the setup most users will be using (e.g. Ubuntu - // desktop). - // If running on X and not using GNOME then just use a traditional title bar - // in case the window manager does more exotic layout, e.g. tiling. - // If running on Wayland assume the header bar will work (may need changing - // if future cases occur). - gboolean use_header_bar = TRUE; -#ifdef GDK_WINDOWING_X11 - GdkScreen* screen = gtk_window_get_screen(window); - if (GDK_IS_X11_SCREEN(screen)) { - const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); - if (g_strcmp0(wm_name, "GNOME Shell") != 0) { - use_header_bar = FALSE; - } - } -#endif - if (use_header_bar) { - GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); - gtk_widget_show(GTK_WIDGET(header_bar)); - gtk_header_bar_set_title(header_bar, "generate_crossword"); - gtk_header_bar_set_show_close_button(header_bar, TRUE); - gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); - } else { - gtk_window_set_title(window, "generate_crossword"); - } - - gtk_window_set_default_size(window, 1280, 720); - gtk_widget_show(GTK_WIDGET(window)); - - g_autoptr(FlDartProject) project = fl_dart_project_new(); - fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); - - FlView* view = fl_view_new(project); - gtk_widget_show(GTK_WIDGET(view)); - gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); - - fl_register_plugins(FL_PLUGIN_REGISTRY(view)); - - gtk_widget_grab_focus(GTK_WIDGET(view)); -} - -// Implements GApplication::local_command_line. -static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { - MyApplication* self = MY_APPLICATION(application); - // Strip out the first argument as it is the binary name. - self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); - - g_autoptr(GError) error = nullptr; - if (!g_application_register(application, nullptr, &error)) { - g_warning("Failed to register: %s", error->message); - *exit_status = 1; - return TRUE; - } - - g_application_activate(application); - *exit_status = 0; - - return TRUE; -} - -// Implements GApplication::startup. -static void my_application_startup(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application startup. - - G_APPLICATION_CLASS(my_application_parent_class)->startup(application); -} - -// Implements GApplication::shutdown. -static void my_application_shutdown(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application shutdown. - - G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); -} - -// Implements GObject::dispose. -static void my_application_dispose(GObject* object) { - MyApplication* self = MY_APPLICATION(object); - g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); - G_OBJECT_CLASS(my_application_parent_class)->dispose(object); -} - -static void my_application_class_init(MyApplicationClass* klass) { - G_APPLICATION_CLASS(klass)->activate = my_application_activate; - G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; - G_APPLICATION_CLASS(klass)->startup = my_application_startup; - G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; - G_OBJECT_CLASS(klass)->dispose = my_application_dispose; -} - -static void my_application_init(MyApplication* self) {} - -MyApplication* my_application_new() { - return MY_APPLICATION(g_object_new(my_application_get_type(), - "application-id", APPLICATION_ID, - "flags", G_APPLICATION_NON_UNIQUE, - nullptr)); -} diff --git a/generate_crossword/step_09/linux/runner/CMakeLists.txt b/generate_crossword/step_09/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/generate_crossword/step_09/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/generate_crossword/step_09/linux/main.cc b/generate_crossword/step_09/linux/runner/main.cc similarity index 100% rename from generate_crossword/step_09/linux/main.cc rename to generate_crossword/step_09/linux/runner/main.cc diff --git a/generate_crossword/step_09/linux/runner/my_application.cc b/generate_crossword/step_09/linux/runner/my_application.cc new file mode 100644 index 0000000000..dbf3c88029 --- /dev/null +++ b/generate_crossword/step_09/linux/runner/my_application.cc @@ -0,0 +1,130 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "generate_crossword"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "generate_crossword"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/generate_crossword/step_09/linux/my_application.h b/generate_crossword/step_09/linux/runner/my_application.h similarity index 100% rename from generate_crossword/step_09/linux/my_application.h rename to generate_crossword/step_09/linux/runner/my_application.h diff --git a/generate_crossword/step_09/macos/Runner/AppDelegate.swift b/generate_crossword/step_09/macos/Runner/AppDelegate.swift index 8e02df2888..b3c1761412 100644 --- a/generate_crossword/step_09/macos/Runner/AppDelegate.swift +++ b/generate_crossword/step_09/macos/Runner/AppDelegate.swift @@ -6,4 +6,8 @@ class AppDelegate: FlutterAppDelegate { override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { return true } + + override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { + return true + } } diff --git a/generate_crossword/step_09/pubspec.yaml b/generate_crossword/step_09/pubspec.yaml index b2180dfe85..ed0d380d27 100644 --- a/generate_crossword/step_09/pubspec.yaml +++ b/generate_crossword/step_09/pubspec.yaml @@ -12,21 +12,21 @@ dependencies: built_collection: ^5.1.1 built_value: ^8.9.2 characters: ^1.3.0 - flutter_riverpod: ^2.5.1 + flutter_riverpod: ^2.5.3 intl: ^0.19.0 - riverpod: ^2.5.1 - riverpod_annotation: ^2.3.5 - two_dimensional_scrollables: ^0.3.1 + riverpod: ^2.5.3 + riverpod_annotation: ^2.5.3 + two_dimensional_scrollables: ^0.3.2 dev_dependencies: flutter_test: sdk: flutter - flutter_lints: ^4.0.0 - build_runner: ^2.4.12 + flutter_lints: ^5.0.0 + build_runner: ^2.4.13 built_value_generator: ^8.9.2 - custom_lint: ^0.6.5 - riverpod_generator: ^2.4.3 - riverpod_lint: ^2.3.13 + custom_lint: ^0.6.10 + riverpod_generator: ^2.4.4 + riverpod_lint: ^2.3.14 flutter: uses-material-design: true From 877023e9f6dad73a34226bfed54156a142034899 Mon Sep 17 00:00:00 2001 From: Brett Morgan Date: Tue, 15 Oct 2024 17:56:39 +1100 Subject: [PATCH 012/108] Re-enable CI for `next-gen-ui` --- flutter_ci_script_beta.sh | 3 +-- flutter_ci_script_master.sh | 3 +-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/flutter_ci_script_beta.sh b/flutter_ci_script_beta.sh index c64d26c150..9e736583e2 100755 --- a/flutter_ci_script_beta.sh +++ b/flutter_ci_script_beta.sh @@ -27,8 +27,7 @@ declare -a CODELABS=( "homescreen_codelab" "in_app_purchases" "namer" - # TODO(domesticmouse): Color.red/green/blue are deprecated - # "next-gen-ui" + "next-gen-ui" "testing_codelab" "tfagents-flutter" "tfrs-flutter" diff --git a/flutter_ci_script_master.sh b/flutter_ci_script_master.sh index 5c79cdcddd..580010df14 100755 --- a/flutter_ci_script_master.sh +++ b/flutter_ci_script_master.sh @@ -27,8 +27,7 @@ declare -a CODELABS=( "homescreen_codelab" "in_app_purchases" "namer" - # TODO(domesticmouse): Color.red/green/blue are deprecated - # "next-gen-ui" + "next-gen-ui" "testing_codelab" "tfagents-flutter" "tfrs-flutter" From 48c57a9114d8cd8b62ab7384f2603f8a54b3830d Mon Sep 17 00:00:00 2001 From: Brett Morgan Date: Tue, 15 Oct 2024 20:09:17 +1100 Subject: [PATCH 013/108] version bump the tool --- tooling/codelab_rebuild/pubspec.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tooling/codelab_rebuild/pubspec.yaml b/tooling/codelab_rebuild/pubspec.yaml index 6361b736d3..bfda8f3496 100644 --- a/tooling/codelab_rebuild/pubspec.yaml +++ b/tooling/codelab_rebuild/pubspec.yaml @@ -1,6 +1,6 @@ name: codelab_rebuild description: Rebuild codelabs from a yaml file. -version: 1.0.0 +version: 1.0.1 environment: sdk: ^3.6.0-0 From 66f79de54e471dc372aae49b4eced097400585ad Mon Sep 17 00:00:00 2001 From: Brett Morgan Date: Fri, 18 Oct 2024 08:55:06 +1100 Subject: [PATCH 014/108] Update `firebase-auth-flutterfire-ui` --- .../complete/.gitignore | 2 + .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../complete/android/settings.gradle | 4 +- .../ios/Runner.xcodeproj/project.pbxproj | 166 +++++++++--------- .../complete/macos/Runner/AppDelegate.swift | 4 + .../complete/pubspec.yaml | 10 +- firebase-auth-flutterfire-ui/start/.gitignore | 2 + .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../start/android/settings.gradle | 4 +- .../ios/Runner.xcodeproj/project.pbxproj | 132 +++++++------- .../start/macos/Runner/AppDelegate.swift | 4 + .../start/pubspec.yaml | 10 +- 12 files changed, 177 insertions(+), 165 deletions(-) diff --git a/firebase-auth-flutterfire-ui/complete/.gitignore b/firebase-auth-flutterfire-ui/complete/.gitignore index 29a3a5017f..79c113f9b5 100644 --- a/firebase-auth-flutterfire-ui/complete/.gitignore +++ b/firebase-auth-flutterfire-ui/complete/.gitignore @@ -5,9 +5,11 @@ *.swp .DS_Store .atom/ +.build/ .buildlog/ .history .svn/ +.swiftpm/ migrate_working_dir/ # IntelliJ related diff --git a/firebase-auth-flutterfire-ui/complete/android/gradle/wrapper/gradle-wrapper.properties b/firebase-auth-flutterfire-ui/complete/android/gradle/wrapper/gradle-wrapper.properties index e1ca574ef0..7bb2df6ba6 100644 --- a/firebase-auth-flutterfire-ui/complete/android/gradle/wrapper/gradle-wrapper.properties +++ b/firebase-auth-flutterfire-ui/complete/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip diff --git a/firebase-auth-flutterfire-ui/complete/android/settings.gradle b/firebase-auth-flutterfire-ui/complete/android/settings.gradle index 536165d35a..b9e43bd376 100644 --- a/firebase-auth-flutterfire-ui/complete/android/settings.gradle +++ b/firebase-auth-flutterfire-ui/complete/android/settings.gradle @@ -18,8 +18,8 @@ pluginManagement { plugins { id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "7.3.0" apply false - id "org.jetbrains.kotlin.android" version "1.7.10" apply false + id "com.android.application" version "8.1.0" apply false + id "org.jetbrains.kotlin.android" version "1.8.22" apply false } include ":app" diff --git a/firebase-auth-flutterfire-ui/complete/ios/Runner.xcodeproj/project.pbxproj b/firebase-auth-flutterfire-ui/complete/ios/Runner.xcodeproj/project.pbxproj index ffa3760378..5d6c6a37ba 100644 --- a/firebase-auth-flutterfire-ui/complete/ios/Runner.xcodeproj/project.pbxproj +++ b/firebase-auth-flutterfire-ui/complete/ios/Runner.xcodeproj/project.pbxproj @@ -10,12 +10,12 @@ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; + 62D22B8A112D9990C8157059 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F79465058B5E2BB1BAC34508 /* Pods_Runner.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - 9BA21A75FAF3270BD938EE1B /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C506456B76C812E37421DFE4 /* Pods_Runner.framework */; }; - FF00470B3DBC33171077038D /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E6C75CC358AC38E170601C6C /* Pods_RunnerTests.framework */; }; + DBA385BF752C3B541EE8C5ED /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 94D7AC61F6F575395C270D20 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,17 +42,18 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 052186F11F6A70D2D329AF86 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 53E36B3AEEE9510797045BD8 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - 689DBBD939EB82613640954D /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 693C1789277466044A57A28B /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 79252337E18AC465C8D37B5E /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; + 803E49C6EC6F2F1E0667F4FA /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 94D7AC61F6F575395C270D20 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -60,42 +61,32 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 997266D10C5B86518174D231 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - C506456B76C812E37421DFE4 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - C575A25D4D74EE69F5363C68 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - E6C75CC358AC38E170601C6C /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - FC00BBCBE4674F35B81FA1B9 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + B2EA444633C17CACFFB14A86 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + BBB1589572AEE9E995E50B70 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + F79465058B5E2BB1BAC34508 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + FC061349555ED87BD5AAB958 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 97C146EB1CF9000F007C117D /* Frameworks */ = { + 53BB0C25D942B3D9A258E42A /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 9BA21A75FAF3270BD938EE1B /* Pods_Runner.framework in Frameworks */, + DBA385BF752C3B541EE8C5ED /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - B07B6FBB3EE8CB94D87C594F /* Frameworks */ = { + 97C146EB1CF9000F007C117D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - FF00470B3DBC33171077038D /* Pods_RunnerTests.framework in Frameworks */, + 62D22B8A112D9990C8157059 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 0A5C658124CB6FFFC12DBD67 /* Frameworks */ = { - isa = PBXGroup; - children = ( - C506456B76C812E37421DFE4 /* Pods_Runner.framework */, - E6C75CC358AC38E170601C6C /* Pods_RunnerTests.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; 331C8082294A63A400263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -104,15 +95,15 @@ path = RunnerTests; sourceTree = ""; }; - 44156560E39C3BBBA59807C3 /* Pods */ = { + 796E4BDC9383A1796D6E8286 /* Pods */ = { isa = PBXGroup; children = ( - 997266D10C5B86518174D231 /* Pods-Runner.debug.xcconfig */, - 689DBBD939EB82613640954D /* Pods-Runner.release.xcconfig */, - 693C1789277466044A57A28B /* Pods-Runner.profile.xcconfig */, - FC00BBCBE4674F35B81FA1B9 /* Pods-RunnerTests.debug.xcconfig */, - C575A25D4D74EE69F5363C68 /* Pods-RunnerTests.release.xcconfig */, - 53E36B3AEEE9510797045BD8 /* Pods-RunnerTests.profile.xcconfig */, + FC061349555ED87BD5AAB958 /* Pods-Runner.debug.xcconfig */, + 803E49C6EC6F2F1E0667F4FA /* Pods-Runner.release.xcconfig */, + BBB1589572AEE9E995E50B70 /* Pods-Runner.profile.xcconfig */, + B2EA444633C17CACFFB14A86 /* Pods-RunnerTests.debug.xcconfig */, + 052186F11F6A70D2D329AF86 /* Pods-RunnerTests.release.xcconfig */, + 79252337E18AC465C8D37B5E /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -136,8 +127,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - 44156560E39C3BBBA59807C3 /* Pods */, - 0A5C658124CB6FFFC12DBD67 /* Frameworks */, + 796E4BDC9383A1796D6E8286 /* Pods */, + C22AEA5CCEBDA18AFE0FF861 /* Frameworks */, ); sourceTree = ""; }; @@ -165,6 +156,15 @@ path = Runner; sourceTree = ""; }; + C22AEA5CCEBDA18AFE0FF861 /* Frameworks */ = { + isa = PBXGroup; + children = ( + F79465058B5E2BB1BAC34508 /* Pods_Runner.framework */, + 94D7AC61F6F575395C270D20 /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 2869AF21FD9DF8A99AC9229A /* [CP] Check Pods Manifest.lock */, + FDC549F740CA5756E6978B2F /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - B07B6FBB3EE8CB94D87C594F /* Frameworks */, + 53BB0C25D942B3D9A258E42A /* Frameworks */, ); buildRules = ( ); @@ -191,15 +191,15 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 2047184AD1DDC2065C746FCA /* [CP] Check Pods Manifest.lock */, + A3E297969A045C20DEF4D6E7 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 1C58E7E74985B1161C6B166B /* [CP] Embed Pods Frameworks */, - DA3B9A68A29CBB1BC4877079 /* [CP] Copy Pods Resources */, + AC6BF0E031C5DF0B347E4269 /* [CP] Embed Pods Frameworks */, + 16F0635085D859708DF9619C /* [CP] Copy Pods Resources */, ); buildRules = ( ); @@ -271,113 +271,113 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 1C58E7E74985B1161C6B166B /* [CP] Embed Pods Frameworks */ = { + 16F0635085D859708DF9619C /* [CP] Copy Pods Resources */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + name = "[CP] Copy Pods Resources"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n"; showEnvVarsInLog = 0; }; - 2047184AD1DDC2065C746FCA /* [CP] Check Pods Manifest.lock */ = { + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); + name = "Thin Binary"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 2869AF21FD9DF8A99AC9229A /* [CP] Check Pods Manifest.lock */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( ); + name = "Run Script"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + A3E297969A045C20DEF4D6E7 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( - "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "Thin Binary"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { + AC6BF0E031C5DF0B347E4269 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputPaths = ( + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "Run Script"; - outputPaths = ( + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; }; - DA3B9A68A29CBB1BC4877079 /* [CP] Copy Pods Resources */ = { + FDC549F740CA5756E6978B2F /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Copy Pods Resources"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -505,7 +505,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = FC00BBCBE4674F35B81FA1B9 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = B2EA444633C17CACFFB14A86 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -523,7 +523,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C575A25D4D74EE69F5363C68 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 052186F11F6A70D2D329AF86 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -539,7 +539,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 53E36B3AEEE9510797045BD8 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 79252337E18AC465C8D37B5E /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/firebase-auth-flutterfire-ui/complete/macos/Runner/AppDelegate.swift b/firebase-auth-flutterfire-ui/complete/macos/Runner/AppDelegate.swift index 8e02df2888..b3c1761412 100644 --- a/firebase-auth-flutterfire-ui/complete/macos/Runner/AppDelegate.swift +++ b/firebase-auth-flutterfire-ui/complete/macos/Runner/AppDelegate.swift @@ -6,4 +6,8 @@ class AppDelegate: FlutterAppDelegate { override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { return true } + + override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { + return true + } } diff --git a/firebase-auth-flutterfire-ui/complete/pubspec.yaml b/firebase-auth-flutterfire-ui/complete/pubspec.yaml index f4913f4204..f06af60549 100644 --- a/firebase-auth-flutterfire-ui/complete/pubspec.yaml +++ b/firebase-auth-flutterfire-ui/complete/pubspec.yaml @@ -9,16 +9,16 @@ environment: dependencies: flutter: sdk: flutter - firebase_auth: ^5.2.0 - firebase_core: ^3.4.0 - firebase_ui_auth: ^1.15.0 - firebase_ui_oauth_google: ^1.3.3 + firebase_auth: ^5.3.1 + firebase_core: ^3.6.0 + firebase_ui_auth: ^1.16.0 + firebase_ui_oauth_google: ^1.4.0 google_sign_in: ^6.2.1 dev_dependencies: flutter_test: sdk: flutter - flutter_lints: ^4.0.0 + flutter_lints: ^5.0.0 flutter: uses-material-design: true diff --git a/firebase-auth-flutterfire-ui/start/.gitignore b/firebase-auth-flutterfire-ui/start/.gitignore index 29a3a5017f..79c113f9b5 100644 --- a/firebase-auth-flutterfire-ui/start/.gitignore +++ b/firebase-auth-flutterfire-ui/start/.gitignore @@ -5,9 +5,11 @@ *.swp .DS_Store .atom/ +.build/ .buildlog/ .history .svn/ +.swiftpm/ migrate_working_dir/ # IntelliJ related diff --git a/firebase-auth-flutterfire-ui/start/android/gradle/wrapper/gradle-wrapper.properties b/firebase-auth-flutterfire-ui/start/android/gradle/wrapper/gradle-wrapper.properties index e1ca574ef0..7bb2df6ba6 100644 --- a/firebase-auth-flutterfire-ui/start/android/gradle/wrapper/gradle-wrapper.properties +++ b/firebase-auth-flutterfire-ui/start/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip diff --git a/firebase-auth-flutterfire-ui/start/android/settings.gradle b/firebase-auth-flutterfire-ui/start/android/settings.gradle index 536165d35a..b9e43bd376 100644 --- a/firebase-auth-flutterfire-ui/start/android/settings.gradle +++ b/firebase-auth-flutterfire-ui/start/android/settings.gradle @@ -18,8 +18,8 @@ pluginManagement { plugins { id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "7.3.0" apply false - id "org.jetbrains.kotlin.android" version "1.7.10" apply false + id "com.android.application" version "8.1.0" apply false + id "org.jetbrains.kotlin.android" version "1.8.22" apply false } include ":app" diff --git a/firebase-auth-flutterfire-ui/start/ios/Runner.xcodeproj/project.pbxproj b/firebase-auth-flutterfire-ui/start/ios/Runner.xcodeproj/project.pbxproj index 69ed33324a..5291aea26a 100644 --- a/firebase-auth-flutterfire-ui/start/ios/Runner.xcodeproj/project.pbxproj +++ b/firebase-auth-flutterfire-ui/start/ios/Runner.xcodeproj/project.pbxproj @@ -10,12 +10,12 @@ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; + 404DFB4241C91BE1CB9267BE /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 91B0D158B703976BE6935E27 /* Pods_Runner.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; - 8F0027A84E42817EE1DA80F5 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9FBD6491FB7629A257018272 /* Pods_RunnerTests.framework */; }; + 88DB9572DA82E2B639AB8711 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6AE99D215675A905D0F2A204 /* Pods_RunnerTests.framework */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - F86A8BB5593CDEC65860978A /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 86AA203D389BEEC1FF3F23D5 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,18 +42,18 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 044A199FAD94D1B2AA450A20 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 38C8858BF40464CFD8AC4608 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 6E6B1493A252AFC457B7385C /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 41B1F82750F41CF1BC53C715 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 6AE99D215675A905D0F2A204 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 77E8ACB4FA744D8C324DC6F7 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 86AA203D389BEEC1FF3F23D5 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 91B0D158B703976BE6935E27 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -61,26 +61,26 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 9FBD6491FB7629A257018272 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - B1EA0AEB47C4B15A2C9F2AB2 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - D1FF7B256DC1901680230CC7 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - EF42F4DB9738DAA06F54298D /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + B75CA59D2070C23A598ABD65 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + C3CA379EE11C774419B0D602 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + E258D501E58476878EF7141D /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + F2D5F858D9F8B30E8AF4E0C8 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 97C146EB1CF9000F007C117D /* Frameworks */ = { + 12F8AD281278A4FF2E32AB5D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - F86A8BB5593CDEC65860978A /* Pods_Runner.framework in Frameworks */, + 88DB9572DA82E2B639AB8711 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - CF085F5451485BE418C944D7 /* Frameworks */ = { + 97C146EB1CF9000F007C117D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 8F0027A84E42817EE1DA80F5 /* Pods_RunnerTests.framework in Frameworks */, + 404DFB4241C91BE1CB9267BE /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -95,6 +95,29 @@ path = RunnerTests; sourceTree = ""; }; + 723B6523BE4F897C7B697E66 /* Pods */ = { + isa = PBXGroup; + children = ( + C3CA379EE11C774419B0D602 /* Pods-Runner.debug.xcconfig */, + F2D5F858D9F8B30E8AF4E0C8 /* Pods-Runner.release.xcconfig */, + B75CA59D2070C23A598ABD65 /* Pods-Runner.profile.xcconfig */, + 41B1F82750F41CF1BC53C715 /* Pods-RunnerTests.debug.xcconfig */, + E258D501E58476878EF7141D /* Pods-RunnerTests.release.xcconfig */, + 77E8ACB4FA744D8C324DC6F7 /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; + 95C2CDB900EC6B0BE1BDFB84 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 91B0D158B703976BE6935E27 /* Pods_Runner.framework */, + 6AE99D215675A905D0F2A204 /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( @@ -113,8 +136,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - ED695A22786608EB75D67254 /* Pods */, - C71C06E6CA3358455B56BAFB /* Frameworks */, + 723B6523BE4F897C7B697E66 /* Pods */, + 95C2CDB900EC6B0BE1BDFB84 /* Frameworks */, ); sourceTree = ""; }; @@ -142,29 +165,6 @@ path = Runner; sourceTree = ""; }; - C71C06E6CA3358455B56BAFB /* Frameworks */ = { - isa = PBXGroup; - children = ( - 86AA203D389BEEC1FF3F23D5 /* Pods_Runner.framework */, - 9FBD6491FB7629A257018272 /* Pods_RunnerTests.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; - ED695A22786608EB75D67254 /* Pods */ = { - isa = PBXGroup; - children = ( - D1FF7B256DC1901680230CC7 /* Pods-Runner.debug.xcconfig */, - EF42F4DB9738DAA06F54298D /* Pods-Runner.release.xcconfig */, - 38C8858BF40464CFD8AC4608 /* Pods-Runner.profile.xcconfig */, - 044A199FAD94D1B2AA450A20 /* Pods-RunnerTests.debug.xcconfig */, - B1EA0AEB47C4B15A2C9F2AB2 /* Pods-RunnerTests.release.xcconfig */, - 6E6B1493A252AFC457B7385C /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 8E7DCAE03208EB0CA443E7EF /* [CP] Check Pods Manifest.lock */, + 539D7EB0A321656716812953 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - CF085F5451485BE418C944D7 /* Frameworks */, + 12F8AD281278A4FF2E32AB5D /* Frameworks */, ); buildRules = ( ); @@ -191,15 +191,15 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - B3745EE0EA942450ADC5A6DD /* [CP] Check Pods Manifest.lock */, + 42667759B05C7986D01B3386 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - D6D03A3DCDBB8CDF231C25B9 /* [CP] Embed Pods Frameworks */, - F6E44D0BAE7DC7BAD505D023 /* [CP] Copy Pods Resources */, + F572C1D86990758D8A105EF3 /* [CP] Embed Pods Frameworks */, + FCBEBF6D505C904BBBF02431 /* [CP] Copy Pods Resources */, ); buildRules = ( ); @@ -287,7 +287,7 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 8E7DCAE03208EB0CA443E7EF /* [CP] Check Pods Manifest.lock */ = { + 42667759B05C7986D01B3386 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -302,51 +302,51 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { + 539D7EB0A321656716812953 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "Run Script"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - B3745EE0EA942450ADC5A6DD /* [CP] Check Pods Manifest.lock */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( ); + name = "Run Script"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - D6D03A3DCDBB8CDF231C25B9 /* [CP] Embed Pods Frameworks */ = { + F572C1D86990758D8A105EF3 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -363,7 +363,7 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - F6E44D0BAE7DC7BAD505D023 /* [CP] Copy Pods Resources */ = { + FCBEBF6D505C904BBBF02431 /* [CP] Copy Pods Resources */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -505,7 +505,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 044A199FAD94D1B2AA450A20 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 41B1F82750F41CF1BC53C715 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -523,7 +523,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = B1EA0AEB47C4B15A2C9F2AB2 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = E258D501E58476878EF7141D /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -539,7 +539,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 6E6B1493A252AFC457B7385C /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 77E8ACB4FA744D8C324DC6F7 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/firebase-auth-flutterfire-ui/start/macos/Runner/AppDelegate.swift b/firebase-auth-flutterfire-ui/start/macos/Runner/AppDelegate.swift index 8e02df2888..b3c1761412 100644 --- a/firebase-auth-flutterfire-ui/start/macos/Runner/AppDelegate.swift +++ b/firebase-auth-flutterfire-ui/start/macos/Runner/AppDelegate.swift @@ -6,4 +6,8 @@ class AppDelegate: FlutterAppDelegate { override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { return true } + + override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { + return true + } } diff --git a/firebase-auth-flutterfire-ui/start/pubspec.yaml b/firebase-auth-flutterfire-ui/start/pubspec.yaml index 8a61df9d67..39808e764b 100644 --- a/firebase-auth-flutterfire-ui/start/pubspec.yaml +++ b/firebase-auth-flutterfire-ui/start/pubspec.yaml @@ -9,16 +9,16 @@ environment: dependencies: flutter: sdk: flutter - firebase_auth: ^5.2.0 - firebase_core: ^3.4.0 - firebase_ui_auth: ^1.15.0 - firebase_ui_oauth_google: ^1.3.3 + firebase_auth: ^5.3.1 + firebase_core: ^3.6.0 + firebase_ui_auth: ^1.16.0 + firebase_ui_oauth_google: ^1.4.0 google_sign_in: ^6.2.1 dev_dependencies: flutter_test: sdk: flutter - flutter_lints: ^4.0.0 + flutter_lints: ^5.0.0 flutter: uses-material-design: true From dea6e8eb9f75619755e660cfcbec73df0bfb204d Mon Sep 17 00:00:00 2001 From: Brett Morgan Date: Fri, 18 Oct 2024 09:39:49 +1100 Subject: [PATCH 015/108] Make `adaptive_app` match flutter beta --- adaptive_app/codelab_rebuild.yaml | 4 +- .../step_03/android/gradle.properties | 2 +- adaptive_app/step_03/linux/CMakeLists.txt | 23 ++- .../step_03/linux/{runner => }/main.cc | 0 .../linux}/my_application.cc | 6 - .../linux/{runner => }/my_application.h | 0 .../step_03/linux/runner/CMakeLists.txt | 26 --- adaptive_app/step_03/pubspec.yaml | 1 + adaptive_app/step_03/web/index.html | 2 +- .../step_04/android/gradle.properties | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 128 +++++++-------- adaptive_app/step_04/linux/CMakeLists.txt | 23 ++- .../step_04/linux/{runner => }/main.cc | 0 .../linux}/my_application.cc | 6 - .../linux/{runner => }/my_application.h | 0 .../step_04/linux/runner/CMakeLists.txt | 26 --- .../macos/Runner.xcodeproj/project.pbxproj | 90 +++++------ adaptive_app/step_04/pubspec.yaml | 1 + adaptive_app/step_04/web/index.html | 2 +- .../step_05/android/gradle.properties | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 128 +++++++-------- adaptive_app/step_05/linux/CMakeLists.txt | 23 ++- .../step_05/linux/{runner => }/main.cc | 0 .../linux}/my_application.cc | 6 - .../linux/{runner => }/my_application.h | 0 .../step_05/linux/runner/CMakeLists.txt | 26 --- .../macos/Runner.xcodeproj/project.pbxproj | 90 +++++------ adaptive_app/step_05/pubspec.yaml | 1 + adaptive_app/step_05/web/index.html | 2 +- .../step_06/android/gradle.properties | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 128 +++++++-------- adaptive_app/step_06/linux/CMakeLists.txt | 23 ++- .../step_06/linux/{runner => }/main.cc | 0 .../linux}/my_application.cc | 6 - .../linux/{runner => }/my_application.h | 0 .../step_06/linux/runner/CMakeLists.txt | 26 --- .../macos/Runner.xcodeproj/project.pbxproj | 90 +++++------ adaptive_app/step_06/pubspec.yaml | 1 + adaptive_app/step_06/web/index.html | 2 +- .../step_06/yt_cors_proxy/pubspec.yaml | 2 +- .../step_07/android/gradle.properties | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 150 +++++++++--------- adaptive_app/step_07/linux/CMakeLists.txt | 23 ++- .../step_07/linux/{runner => }/main.cc | 0 adaptive_app/step_07/linux/my_application.cc | 124 +++++++++++++++ .../linux/{runner => }/my_application.h | 0 .../step_07/linux/runner/CMakeLists.txt | 26 --- .../step_07/linux/runner/my_application.cc | 130 --------------- .../macos/Runner.xcodeproj/project.pbxproj | 112 ++++++------- adaptive_app/step_07/pubspec.yaml | 1 + adaptive_app/step_07/web/index.html | 2 +- .../step_07/yt_cors_proxy/pubspec.yaml | 2 +- 52 files changed, 701 insertions(+), 771 deletions(-) rename adaptive_app/step_03/linux/{runner => }/main.cc (100%) rename adaptive_app/{step_05/linux/runner => step_03/linux}/my_application.cc (93%) rename adaptive_app/step_03/linux/{runner => }/my_application.h (100%) delete mode 100644 adaptive_app/step_03/linux/runner/CMakeLists.txt rename adaptive_app/step_04/linux/{runner => }/main.cc (100%) rename adaptive_app/{step_03/linux/runner => step_04/linux}/my_application.cc (93%) rename adaptive_app/step_04/linux/{runner => }/my_application.h (100%) delete mode 100644 adaptive_app/step_04/linux/runner/CMakeLists.txt rename adaptive_app/step_05/linux/{runner => }/main.cc (100%) rename adaptive_app/{step_06/linux/runner => step_05/linux}/my_application.cc (93%) rename adaptive_app/step_05/linux/{runner => }/my_application.h (100%) delete mode 100644 adaptive_app/step_05/linux/runner/CMakeLists.txt rename adaptive_app/step_06/linux/{runner => }/main.cc (100%) rename adaptive_app/{step_04/linux/runner => step_06/linux}/my_application.cc (93%) rename adaptive_app/step_06/linux/{runner => }/my_application.h (100%) delete mode 100644 adaptive_app/step_06/linux/runner/CMakeLists.txt rename adaptive_app/step_07/linux/{runner => }/main.cc (100%) create mode 100644 adaptive_app/step_07/linux/my_application.cc rename adaptive_app/step_07/linux/{runner => }/my_application.h (100%) delete mode 100644 adaptive_app/step_07/linux/runner/CMakeLists.txt delete mode 100644 adaptive_app/step_07/linux/runner/my_application.cc diff --git a/adaptive_app/codelab_rebuild.yaml b/adaptive_app/codelab_rebuild.yaml index d6fbdcc88e..83d941bae9 100644 --- a/adaptive_app/codelab_rebuild.yaml +++ b/adaptive_app/codelab_rebuild.yaml @@ -1074,9 +1074,9 @@ steps: - name: Create yt_cors_proxy path: adaptive_app dart: create --template server-shelf yt_cors_proxy - - name: Remove shelf_router test + - name: Remove args shelf_router test path: adaptive_app/yt_cors_proxy - dart: pub remove shelf_router test + dart: pub remove args shelf_router test - name: Add http shelf_cors_headers path: adaptive_app/yt_cors_proxy dart: pub add http shelf_cors_headers diff --git a/adaptive_app/step_03/android/gradle.properties b/adaptive_app/step_03/android/gradle.properties index f018a61817..2597170821 100644 --- a/adaptive_app/step_03/android/gradle.properties +++ b/adaptive_app/step_03/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/adaptive_app/step_03/linux/CMakeLists.txt b/adaptive_app/step_03/linux/CMakeLists.txt index 860cc230f2..95047a637a 100644 --- a/adaptive_app/step_03/linux/CMakeLists.txt +++ b/adaptive_app/step_03/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.13) +cmake_minimum_required(VERSION 3.10) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,8 +54,25 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -# Application build; see runner/CMakeLists.txt. -add_subdirectory("runner") +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Define the application target. To change its name, change BINARY_NAME above, +# not the value here, or `flutter run` will no longer work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/adaptive_app/step_03/linux/runner/main.cc b/adaptive_app/step_03/linux/main.cc similarity index 100% rename from adaptive_app/step_03/linux/runner/main.cc rename to adaptive_app/step_03/linux/main.cc diff --git a/adaptive_app/step_05/linux/runner/my_application.cc b/adaptive_app/step_03/linux/my_application.cc similarity index 93% rename from adaptive_app/step_05/linux/runner/my_application.cc rename to adaptive_app/step_03/linux/my_application.cc index c839eec643..a2e720d593 100644 --- a/adaptive_app/step_05/linux/runner/my_application.cc +++ b/adaptive_app/step_03/linux/my_application.cc @@ -117,12 +117,6 @@ static void my_application_class_init(MyApplicationClass* klass) { static void my_application_init(MyApplication* self) {} MyApplication* my_application_new() { - // Set the program name to the application ID, which helps various systems - // like GTK and desktop environments map this running application to its - // corresponding .desktop file. This ensures better integration by allowing - // the application to be recognized beyond its binary name. - g_set_prgname(APPLICATION_ID); - return MY_APPLICATION(g_object_new(my_application_get_type(), "application-id", APPLICATION_ID, "flags", G_APPLICATION_NON_UNIQUE, diff --git a/adaptive_app/step_03/linux/runner/my_application.h b/adaptive_app/step_03/linux/my_application.h similarity index 100% rename from adaptive_app/step_03/linux/runner/my_application.h rename to adaptive_app/step_03/linux/my_application.h diff --git a/adaptive_app/step_03/linux/runner/CMakeLists.txt b/adaptive_app/step_03/linux/runner/CMakeLists.txt deleted file mode 100644 index e97dabc702..0000000000 --- a/adaptive_app/step_03/linux/runner/CMakeLists.txt +++ /dev/null @@ -1,26 +0,0 @@ -cmake_minimum_required(VERSION 3.13) -project(runner LANGUAGES CXX) - -# Define the application target. To change its name, change BINARY_NAME in the -# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer -# work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add preprocessor definitions for the application ID. -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) - -target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/adaptive_app/step_03/pubspec.yaml b/adaptive_app/step_03/pubspec.yaml index 59a7434821..102da5c96b 100644 --- a/adaptive_app/step_03/pubspec.yaml +++ b/adaptive_app/step_03/pubspec.yaml @@ -31,6 +31,7 @@ dependencies: flutter: sdk: flutter + # The following adds the Cupertino Icons font to your application. # Use with the CupertinoIcons class for iOS style icons. cupertino_icons: ^1.0.8 diff --git a/adaptive_app/step_03/web/index.html b/adaptive_app/step_03/web/index.html index 86f03b98cf..ce0ee3b7e5 100644 --- a/adaptive_app/step_03/web/index.html +++ b/adaptive_app/step_03/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/adaptive_app/step_04/android/gradle.properties b/adaptive_app/step_04/android/gradle.properties index f018a61817..2597170821 100644 --- a/adaptive_app/step_04/android/gradle.properties +++ b/adaptive_app/step_04/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/adaptive_app/step_04/ios/Runner.xcodeproj/project.pbxproj b/adaptive_app/step_04/ios/Runner.xcodeproj/project.pbxproj index 2c18fc9e47..c6f3ba5ca1 100644 --- a/adaptive_app/step_04/ios/Runner.xcodeproj/project.pbxproj +++ b/adaptive_app/step_04/ios/Runner.xcodeproj/project.pbxproj @@ -10,12 +10,12 @@ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; - 6347137416242FF2FA3400D7 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 68B89C8BC43A0EB4D05CD361 /* Pods_RunnerTests.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; + 818857E73EDFF566602D3979 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 076253C42DA8398DAD9D0C5E /* Pods_Runner.framework */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - D308D40B9602F03194CCC8C6 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BC6E7475880FE14C9797B3EA /* Pods_Runner.framework */; }; + C53864E63C88D9E3FC6471E4 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A265904E40237EBD76393AA5 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,20 +42,19 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 047EF70300003B3C5FDFEC24 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 03DE4A7390E81C1529576B4D /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 076253C42DA8398DAD9D0C5E /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 09CDCA9C423B2CDBEE5880DC /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 0C2DDD7828CF904B25EAC222 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 251EE28A7FF501C44BF6B0F6 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 6745E985BA95E828608C99DB /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - 68B89C8BC43A0EB4D05CD361 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 6B85F831BE7920B112EE230D /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - 6D751E93919DEED7F636EF65 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; + 900B8CCF12E3F041E3872BF1 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -63,16 +62,17 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - A5C1F25F59E5AD5FD3838248 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - BC6E7475880FE14C9797B3EA /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 9CECD94FC0E21C4E2F3471FF /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + A265904E40237EBD76393AA5 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + F099B0A652C0F4AAE15492B0 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 3DB9EA7E3142F079BD794E7C /* Frameworks */ = { + 23A5040ECE20822260D727D1 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 6347137416242FF2FA3400D7 /* Pods_RunnerTests.framework in Frameworks */, + C53864E63C88D9E3FC6471E4 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -80,13 +80,36 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - D308D40B9602F03194CCC8C6 /* Pods_Runner.framework in Frameworks */, + 818857E73EDFF566602D3979 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 0D5C22ED61BF09A0B2D63659 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 076253C42DA8398DAD9D0C5E /* Pods_Runner.framework */, + A265904E40237EBD76393AA5 /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; + 1D3E27B5CE2CC03AC9FED23D /* Pods */ = { + isa = PBXGroup; + children = ( + 09CDCA9C423B2CDBEE5880DC /* Pods-Runner.debug.xcconfig */, + 900B8CCF12E3F041E3872BF1 /* Pods-Runner.release.xcconfig */, + F099B0A652C0F4AAE15492B0 /* Pods-Runner.profile.xcconfig */, + 9CECD94FC0E21C4E2F3471FF /* Pods-RunnerTests.debug.xcconfig */, + 03DE4A7390E81C1529576B4D /* Pods-RunnerTests.release.xcconfig */, + 0C2DDD7828CF904B25EAC222 /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; 331C8082294A63A400263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -113,8 +136,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - D006D16AAD3589AB2996AF19 /* Pods */, - F4496A5813DF2FCC0EF11787 /* Frameworks */, + 1D3E27B5CE2CC03AC9FED23D /* Pods */, + 0D5C22ED61BF09A0B2D63659 /* Frameworks */, ); sourceTree = ""; }; @@ -142,29 +165,6 @@ path = Runner; sourceTree = ""; }; - D006D16AAD3589AB2996AF19 /* Pods */ = { - isa = PBXGroup; - children = ( - A5C1F25F59E5AD5FD3838248 /* Pods-Runner.debug.xcconfig */, - 251EE28A7FF501C44BF6B0F6 /* Pods-Runner.release.xcconfig */, - 6745E985BA95E828608C99DB /* Pods-Runner.profile.xcconfig */, - 047EF70300003B3C5FDFEC24 /* Pods-RunnerTests.debug.xcconfig */, - 6B85F831BE7920B112EE230D /* Pods-RunnerTests.release.xcconfig */, - 6D751E93919DEED7F636EF65 /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; - F4496A5813DF2FCC0EF11787 /* Frameworks */ = { - isa = PBXGroup; - children = ( - BC6E7475880FE14C9797B3EA /* Pods_Runner.framework */, - 68B89C8BC43A0EB4D05CD361 /* Pods_RunnerTests.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 30D80C78F4BA8C88B202898C /* [CP] Check Pods Manifest.lock */, + EF1662C484A2B971954E5DE7 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 3DB9EA7E3142F079BD794E7C /* Frameworks */, + 23A5040ECE20822260D727D1 /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - E5D0453177845FBE309EB6CD /* [CP] Check Pods Manifest.lock */, + 4B400C64A9F780E303D56362 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - EFF678415838948476F54A4B /* [CP] Embed Pods Frameworks */, + F6ED726599594C9355B00DE8 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -270,43 +270,43 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 30D80C78F4BA8C88B202898C /* [CP] Check Pods Manifest.lock */ = { + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); + name = "Thin Binary"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + 4B400C64A9F780E303D56362 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( - "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "Thin Binary"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; @@ -323,7 +323,7 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - E5D0453177845FBE309EB6CD /* [CP] Check Pods Manifest.lock */ = { + EF1662C484A2B971954E5DE7 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -338,14 +338,14 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - EFF678415838948476F54A4B /* [CP] Embed Pods Frameworks */ = { + F6ED726599594C9355B00DE8 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 047EF70300003B3C5FDFEC24 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 9CECD94FC0E21C4E2F3471FF /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 6B85F831BE7920B112EE230D /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 03DE4A7390E81C1529576B4D /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 6D751E93919DEED7F636EF65 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 0C2DDD7828CF904B25EAC222 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/adaptive_app/step_04/linux/CMakeLists.txt b/adaptive_app/step_04/linux/CMakeLists.txt index 860cc230f2..95047a637a 100644 --- a/adaptive_app/step_04/linux/CMakeLists.txt +++ b/adaptive_app/step_04/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.13) +cmake_minimum_required(VERSION 3.10) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,8 +54,25 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -# Application build; see runner/CMakeLists.txt. -add_subdirectory("runner") +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Define the application target. To change its name, change BINARY_NAME above, +# not the value here, or `flutter run` will no longer work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/adaptive_app/step_04/linux/runner/main.cc b/adaptive_app/step_04/linux/main.cc similarity index 100% rename from adaptive_app/step_04/linux/runner/main.cc rename to adaptive_app/step_04/linux/main.cc diff --git a/adaptive_app/step_03/linux/runner/my_application.cc b/adaptive_app/step_04/linux/my_application.cc similarity index 93% rename from adaptive_app/step_03/linux/runner/my_application.cc rename to adaptive_app/step_04/linux/my_application.cc index c839eec643..a2e720d593 100644 --- a/adaptive_app/step_03/linux/runner/my_application.cc +++ b/adaptive_app/step_04/linux/my_application.cc @@ -117,12 +117,6 @@ static void my_application_class_init(MyApplicationClass* klass) { static void my_application_init(MyApplication* self) {} MyApplication* my_application_new() { - // Set the program name to the application ID, which helps various systems - // like GTK and desktop environments map this running application to its - // corresponding .desktop file. This ensures better integration by allowing - // the application to be recognized beyond its binary name. - g_set_prgname(APPLICATION_ID); - return MY_APPLICATION(g_object_new(my_application_get_type(), "application-id", APPLICATION_ID, "flags", G_APPLICATION_NON_UNIQUE, diff --git a/adaptive_app/step_04/linux/runner/my_application.h b/adaptive_app/step_04/linux/my_application.h similarity index 100% rename from adaptive_app/step_04/linux/runner/my_application.h rename to adaptive_app/step_04/linux/my_application.h diff --git a/adaptive_app/step_04/linux/runner/CMakeLists.txt b/adaptive_app/step_04/linux/runner/CMakeLists.txt deleted file mode 100644 index e97dabc702..0000000000 --- a/adaptive_app/step_04/linux/runner/CMakeLists.txt +++ /dev/null @@ -1,26 +0,0 @@ -cmake_minimum_required(VERSION 3.13) -project(runner LANGUAGES CXX) - -# Define the application target. To change its name, change BINARY_NAME in the -# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer -# work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add preprocessor definitions for the application ID. -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) - -target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/adaptive_app/step_04/macos/Runner.xcodeproj/project.pbxproj b/adaptive_app/step_04/macos/Runner.xcodeproj/project.pbxproj index 4cc7e4c0a6..272eda14e7 100644 --- a/adaptive_app/step_04/macos/Runner.xcodeproj/project.pbxproj +++ b/adaptive_app/step_04/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ + 0779940B4A2BFA69C1614EF1 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 83C8BE81D2605F4F3D5D6E43 /* Pods_Runner.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - AD4816DC1A3E8B0FCF3EF97F /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 899E375D32A57DB46B0D5015 /* Pods_RunnerTests.framework */; }; - CB9653FB11619FF04E6D0A85 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DDCF1329859CB2B135009A90 /* Pods_Runner.framework */; }; + D6BDF6487E1167604CD70873 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1702629233BAC4D256765DCD /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,6 +62,10 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 139BE8CDBBED09BD185EB46F /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 1702629233BAC4D256765DCD /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 28D6467ED5715E597D403B78 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 2F826F1F76A42B4953226C72 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -78,16 +82,12 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 5E6CD848E5EAE9ED3804128A /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - 72EA5204D593132D4180B92F /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 76C7A6CB8682BC6F15F956AB /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 5D3AEF155FBD871F42636FA6 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 866BF68DD31095014D94FC9B /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 899E375D32A57DB46B0D5015 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 83C8BE81D2605F4F3D5D6E43 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - A7621843ACCF358083274DC3 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - C5367377FB9F54B0D1F2FFB3 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - DDCF1329859CB2B135009A90 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 9C1C341528E24056DC0A3967 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + A02E023F403266AD4FD51FE3 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - AD4816DC1A3E8B0FCF3EF97F /* Pods_RunnerTests.framework in Frameworks */, + D6BDF6487E1167604CD70873 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,7 +103,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - CB9653FB11619FF04E6D0A85 /* Pods_Runner.framework in Frameworks */, + 0779940B4A2BFA69C1614EF1 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -137,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 4C48F4B1A2BDCABA73181790 /* Pods */, + 865DA271F115C3C9A9290FB5 /* Pods */, ); sourceTree = ""; }; @@ -185,15 +185,15 @@ path = Runner; sourceTree = ""; }; - 4C48F4B1A2BDCABA73181790 /* Pods */ = { + 865DA271F115C3C9A9290FB5 /* Pods */ = { isa = PBXGroup; children = ( - 72EA5204D593132D4180B92F /* Pods-Runner.debug.xcconfig */, - 76C7A6CB8682BC6F15F956AB /* Pods-Runner.release.xcconfig */, - 5E6CD848E5EAE9ED3804128A /* Pods-Runner.profile.xcconfig */, - 866BF68DD31095014D94FC9B /* Pods-RunnerTests.debug.xcconfig */, - A7621843ACCF358083274DC3 /* Pods-RunnerTests.release.xcconfig */, - C5367377FB9F54B0D1F2FFB3 /* Pods-RunnerTests.profile.xcconfig */, + 2F826F1F76A42B4953226C72 /* Pods-Runner.debug.xcconfig */, + A02E023F403266AD4FD51FE3 /* Pods-Runner.release.xcconfig */, + 9C1C341528E24056DC0A3967 /* Pods-Runner.profile.xcconfig */, + 5D3AEF155FBD871F42636FA6 /* Pods-RunnerTests.debug.xcconfig */, + 28D6467ED5715E597D403B78 /* Pods-RunnerTests.release.xcconfig */, + 139BE8CDBBED09BD185EB46F /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -202,8 +202,8 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - DDCF1329859CB2B135009A90 /* Pods_Runner.framework */, - 899E375D32A57DB46B0D5015 /* Pods_RunnerTests.framework */, + 83C8BE81D2605F4F3D5D6E43 /* Pods_Runner.framework */, + 1702629233BAC4D256765DCD /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 19A2D7810889EFE871D620A3 /* [CP] Check Pods Manifest.lock */, + 662BB0A9A865DC319D87667E /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 71A1F8B56A856017B515FABC /* [CP] Check Pods Manifest.lock */, + D68F277E53A7CDF7BBD90DDA /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - F1B6D708C1D90A015E3B23B9 /* [CP] Embed Pods Frameworks */, + E50A2F9A715EDADE00C36A18 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,67 +323,67 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 19A2D7810889EFE871D620A3 /* [CP] Check Pods Manifest.lock */ = { + 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", ); - name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; }; - 3399D490228B24CF009A79C7 /* ShellScript */ = { + 33CC111E2044C6BF0003C045 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + Flutter/ephemeral/FlutterInputs.xcfilelist, ); inputPaths = ( + Flutter/ephemeral/tripwire, ); outputFileListPaths = ( + Flutter/ephemeral/FlutterOutputs.xcfilelist, ); outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; + shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 33CC111E2044C6BF0003C045 /* ShellScript */ = { + 662BB0A9A865DC319D87667E /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - Flutter/ephemeral/FlutterInputs.xcfilelist, ); inputPaths = ( - Flutter/ephemeral/tripwire, + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - Flutter/ephemeral/FlutterOutputs.xcfilelist, ); outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - 71A1F8B56A856017B515FABC /* [CP] Check Pods Manifest.lock */ = { + D68F277E53A7CDF7BBD90DDA /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -405,7 +405,7 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - F1B6D708C1D90A015E3B23B9 /* [CP] Embed Pods Frameworks */ = { + E50A2F9A715EDADE00C36A18 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 866BF68DD31095014D94FC9B /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 5D3AEF155FBD871F42636FA6 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = A7621843ACCF358083274DC3 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 28D6467ED5715E597D403B78 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C5367377FB9F54B0D1F2FFB3 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 139BE8CDBBED09BD185EB46F /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/adaptive_app/step_04/pubspec.yaml b/adaptive_app/step_04/pubspec.yaml index 47dfb366a8..f7c0a02e0d 100644 --- a/adaptive_app/step_04/pubspec.yaml +++ b/adaptive_app/step_04/pubspec.yaml @@ -31,6 +31,7 @@ dependencies: flutter: sdk: flutter + # The following adds the Cupertino Icons font to your application. # Use with the CupertinoIcons class for iOS style icons. cupertino_icons: ^1.0.8 diff --git a/adaptive_app/step_04/web/index.html b/adaptive_app/step_04/web/index.html index 86f03b98cf..ce0ee3b7e5 100644 --- a/adaptive_app/step_04/web/index.html +++ b/adaptive_app/step_04/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/adaptive_app/step_05/android/gradle.properties b/adaptive_app/step_05/android/gradle.properties index f018a61817..2597170821 100644 --- a/adaptive_app/step_05/android/gradle.properties +++ b/adaptive_app/step_05/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/adaptive_app/step_05/ios/Runner.xcodeproj/project.pbxproj b/adaptive_app/step_05/ios/Runner.xcodeproj/project.pbxproj index 2c18fc9e47..c6f3ba5ca1 100644 --- a/adaptive_app/step_05/ios/Runner.xcodeproj/project.pbxproj +++ b/adaptive_app/step_05/ios/Runner.xcodeproj/project.pbxproj @@ -10,12 +10,12 @@ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; - 6347137416242FF2FA3400D7 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 68B89C8BC43A0EB4D05CD361 /* Pods_RunnerTests.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; + 818857E73EDFF566602D3979 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 076253C42DA8398DAD9D0C5E /* Pods_Runner.framework */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - D308D40B9602F03194CCC8C6 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BC6E7475880FE14C9797B3EA /* Pods_Runner.framework */; }; + C53864E63C88D9E3FC6471E4 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A265904E40237EBD76393AA5 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,20 +42,19 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 047EF70300003B3C5FDFEC24 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 03DE4A7390E81C1529576B4D /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 076253C42DA8398DAD9D0C5E /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 09CDCA9C423B2CDBEE5880DC /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 0C2DDD7828CF904B25EAC222 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 251EE28A7FF501C44BF6B0F6 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 6745E985BA95E828608C99DB /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - 68B89C8BC43A0EB4D05CD361 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 6B85F831BE7920B112EE230D /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - 6D751E93919DEED7F636EF65 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; + 900B8CCF12E3F041E3872BF1 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -63,16 +62,17 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - A5C1F25F59E5AD5FD3838248 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - BC6E7475880FE14C9797B3EA /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 9CECD94FC0E21C4E2F3471FF /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + A265904E40237EBD76393AA5 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + F099B0A652C0F4AAE15492B0 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 3DB9EA7E3142F079BD794E7C /* Frameworks */ = { + 23A5040ECE20822260D727D1 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 6347137416242FF2FA3400D7 /* Pods_RunnerTests.framework in Frameworks */, + C53864E63C88D9E3FC6471E4 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -80,13 +80,36 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - D308D40B9602F03194CCC8C6 /* Pods_Runner.framework in Frameworks */, + 818857E73EDFF566602D3979 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 0D5C22ED61BF09A0B2D63659 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 076253C42DA8398DAD9D0C5E /* Pods_Runner.framework */, + A265904E40237EBD76393AA5 /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; + 1D3E27B5CE2CC03AC9FED23D /* Pods */ = { + isa = PBXGroup; + children = ( + 09CDCA9C423B2CDBEE5880DC /* Pods-Runner.debug.xcconfig */, + 900B8CCF12E3F041E3872BF1 /* Pods-Runner.release.xcconfig */, + F099B0A652C0F4AAE15492B0 /* Pods-Runner.profile.xcconfig */, + 9CECD94FC0E21C4E2F3471FF /* Pods-RunnerTests.debug.xcconfig */, + 03DE4A7390E81C1529576B4D /* Pods-RunnerTests.release.xcconfig */, + 0C2DDD7828CF904B25EAC222 /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; 331C8082294A63A400263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -113,8 +136,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - D006D16AAD3589AB2996AF19 /* Pods */, - F4496A5813DF2FCC0EF11787 /* Frameworks */, + 1D3E27B5CE2CC03AC9FED23D /* Pods */, + 0D5C22ED61BF09A0B2D63659 /* Frameworks */, ); sourceTree = ""; }; @@ -142,29 +165,6 @@ path = Runner; sourceTree = ""; }; - D006D16AAD3589AB2996AF19 /* Pods */ = { - isa = PBXGroup; - children = ( - A5C1F25F59E5AD5FD3838248 /* Pods-Runner.debug.xcconfig */, - 251EE28A7FF501C44BF6B0F6 /* Pods-Runner.release.xcconfig */, - 6745E985BA95E828608C99DB /* Pods-Runner.profile.xcconfig */, - 047EF70300003B3C5FDFEC24 /* Pods-RunnerTests.debug.xcconfig */, - 6B85F831BE7920B112EE230D /* Pods-RunnerTests.release.xcconfig */, - 6D751E93919DEED7F636EF65 /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; - F4496A5813DF2FCC0EF11787 /* Frameworks */ = { - isa = PBXGroup; - children = ( - BC6E7475880FE14C9797B3EA /* Pods_Runner.framework */, - 68B89C8BC43A0EB4D05CD361 /* Pods_RunnerTests.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 30D80C78F4BA8C88B202898C /* [CP] Check Pods Manifest.lock */, + EF1662C484A2B971954E5DE7 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 3DB9EA7E3142F079BD794E7C /* Frameworks */, + 23A5040ECE20822260D727D1 /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - E5D0453177845FBE309EB6CD /* [CP] Check Pods Manifest.lock */, + 4B400C64A9F780E303D56362 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - EFF678415838948476F54A4B /* [CP] Embed Pods Frameworks */, + F6ED726599594C9355B00DE8 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -270,43 +270,43 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 30D80C78F4BA8C88B202898C /* [CP] Check Pods Manifest.lock */ = { + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); + name = "Thin Binary"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + 4B400C64A9F780E303D56362 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( - "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "Thin Binary"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; @@ -323,7 +323,7 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - E5D0453177845FBE309EB6CD /* [CP] Check Pods Manifest.lock */ = { + EF1662C484A2B971954E5DE7 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -338,14 +338,14 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - EFF678415838948476F54A4B /* [CP] Embed Pods Frameworks */ = { + F6ED726599594C9355B00DE8 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 047EF70300003B3C5FDFEC24 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 9CECD94FC0E21C4E2F3471FF /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 6B85F831BE7920B112EE230D /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 03DE4A7390E81C1529576B4D /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 6D751E93919DEED7F636EF65 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 0C2DDD7828CF904B25EAC222 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/adaptive_app/step_05/linux/CMakeLists.txt b/adaptive_app/step_05/linux/CMakeLists.txt index 860cc230f2..95047a637a 100644 --- a/adaptive_app/step_05/linux/CMakeLists.txt +++ b/adaptive_app/step_05/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.13) +cmake_minimum_required(VERSION 3.10) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,8 +54,25 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -# Application build; see runner/CMakeLists.txt. -add_subdirectory("runner") +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Define the application target. To change its name, change BINARY_NAME above, +# not the value here, or `flutter run` will no longer work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/adaptive_app/step_05/linux/runner/main.cc b/adaptive_app/step_05/linux/main.cc similarity index 100% rename from adaptive_app/step_05/linux/runner/main.cc rename to adaptive_app/step_05/linux/main.cc diff --git a/adaptive_app/step_06/linux/runner/my_application.cc b/adaptive_app/step_05/linux/my_application.cc similarity index 93% rename from adaptive_app/step_06/linux/runner/my_application.cc rename to adaptive_app/step_05/linux/my_application.cc index c839eec643..a2e720d593 100644 --- a/adaptive_app/step_06/linux/runner/my_application.cc +++ b/adaptive_app/step_05/linux/my_application.cc @@ -117,12 +117,6 @@ static void my_application_class_init(MyApplicationClass* klass) { static void my_application_init(MyApplication* self) {} MyApplication* my_application_new() { - // Set the program name to the application ID, which helps various systems - // like GTK and desktop environments map this running application to its - // corresponding .desktop file. This ensures better integration by allowing - // the application to be recognized beyond its binary name. - g_set_prgname(APPLICATION_ID); - return MY_APPLICATION(g_object_new(my_application_get_type(), "application-id", APPLICATION_ID, "flags", G_APPLICATION_NON_UNIQUE, diff --git a/adaptive_app/step_05/linux/runner/my_application.h b/adaptive_app/step_05/linux/my_application.h similarity index 100% rename from adaptive_app/step_05/linux/runner/my_application.h rename to adaptive_app/step_05/linux/my_application.h diff --git a/adaptive_app/step_05/linux/runner/CMakeLists.txt b/adaptive_app/step_05/linux/runner/CMakeLists.txt deleted file mode 100644 index e97dabc702..0000000000 --- a/adaptive_app/step_05/linux/runner/CMakeLists.txt +++ /dev/null @@ -1,26 +0,0 @@ -cmake_minimum_required(VERSION 3.13) -project(runner LANGUAGES CXX) - -# Define the application target. To change its name, change BINARY_NAME in the -# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer -# work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add preprocessor definitions for the application ID. -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) - -target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/adaptive_app/step_05/macos/Runner.xcodeproj/project.pbxproj b/adaptive_app/step_05/macos/Runner.xcodeproj/project.pbxproj index 4cc7e4c0a6..272eda14e7 100644 --- a/adaptive_app/step_05/macos/Runner.xcodeproj/project.pbxproj +++ b/adaptive_app/step_05/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ + 0779940B4A2BFA69C1614EF1 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 83C8BE81D2605F4F3D5D6E43 /* Pods_Runner.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - AD4816DC1A3E8B0FCF3EF97F /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 899E375D32A57DB46B0D5015 /* Pods_RunnerTests.framework */; }; - CB9653FB11619FF04E6D0A85 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DDCF1329859CB2B135009A90 /* Pods_Runner.framework */; }; + D6BDF6487E1167604CD70873 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1702629233BAC4D256765DCD /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,6 +62,10 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 139BE8CDBBED09BD185EB46F /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 1702629233BAC4D256765DCD /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 28D6467ED5715E597D403B78 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 2F826F1F76A42B4953226C72 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -78,16 +82,12 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 5E6CD848E5EAE9ED3804128A /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - 72EA5204D593132D4180B92F /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 76C7A6CB8682BC6F15F956AB /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 5D3AEF155FBD871F42636FA6 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 866BF68DD31095014D94FC9B /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 899E375D32A57DB46B0D5015 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 83C8BE81D2605F4F3D5D6E43 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - A7621843ACCF358083274DC3 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - C5367377FB9F54B0D1F2FFB3 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - DDCF1329859CB2B135009A90 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 9C1C341528E24056DC0A3967 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + A02E023F403266AD4FD51FE3 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - AD4816DC1A3E8B0FCF3EF97F /* Pods_RunnerTests.framework in Frameworks */, + D6BDF6487E1167604CD70873 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,7 +103,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - CB9653FB11619FF04E6D0A85 /* Pods_Runner.framework in Frameworks */, + 0779940B4A2BFA69C1614EF1 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -137,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 4C48F4B1A2BDCABA73181790 /* Pods */, + 865DA271F115C3C9A9290FB5 /* Pods */, ); sourceTree = ""; }; @@ -185,15 +185,15 @@ path = Runner; sourceTree = ""; }; - 4C48F4B1A2BDCABA73181790 /* Pods */ = { + 865DA271F115C3C9A9290FB5 /* Pods */ = { isa = PBXGroup; children = ( - 72EA5204D593132D4180B92F /* Pods-Runner.debug.xcconfig */, - 76C7A6CB8682BC6F15F956AB /* Pods-Runner.release.xcconfig */, - 5E6CD848E5EAE9ED3804128A /* Pods-Runner.profile.xcconfig */, - 866BF68DD31095014D94FC9B /* Pods-RunnerTests.debug.xcconfig */, - A7621843ACCF358083274DC3 /* Pods-RunnerTests.release.xcconfig */, - C5367377FB9F54B0D1F2FFB3 /* Pods-RunnerTests.profile.xcconfig */, + 2F826F1F76A42B4953226C72 /* Pods-Runner.debug.xcconfig */, + A02E023F403266AD4FD51FE3 /* Pods-Runner.release.xcconfig */, + 9C1C341528E24056DC0A3967 /* Pods-Runner.profile.xcconfig */, + 5D3AEF155FBD871F42636FA6 /* Pods-RunnerTests.debug.xcconfig */, + 28D6467ED5715E597D403B78 /* Pods-RunnerTests.release.xcconfig */, + 139BE8CDBBED09BD185EB46F /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -202,8 +202,8 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - DDCF1329859CB2B135009A90 /* Pods_Runner.framework */, - 899E375D32A57DB46B0D5015 /* Pods_RunnerTests.framework */, + 83C8BE81D2605F4F3D5D6E43 /* Pods_Runner.framework */, + 1702629233BAC4D256765DCD /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 19A2D7810889EFE871D620A3 /* [CP] Check Pods Manifest.lock */, + 662BB0A9A865DC319D87667E /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 71A1F8B56A856017B515FABC /* [CP] Check Pods Manifest.lock */, + D68F277E53A7CDF7BBD90DDA /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - F1B6D708C1D90A015E3B23B9 /* [CP] Embed Pods Frameworks */, + E50A2F9A715EDADE00C36A18 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,67 +323,67 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 19A2D7810889EFE871D620A3 /* [CP] Check Pods Manifest.lock */ = { + 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", ); - name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; }; - 3399D490228B24CF009A79C7 /* ShellScript */ = { + 33CC111E2044C6BF0003C045 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + Flutter/ephemeral/FlutterInputs.xcfilelist, ); inputPaths = ( + Flutter/ephemeral/tripwire, ); outputFileListPaths = ( + Flutter/ephemeral/FlutterOutputs.xcfilelist, ); outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; + shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 33CC111E2044C6BF0003C045 /* ShellScript */ = { + 662BB0A9A865DC319D87667E /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - Flutter/ephemeral/FlutterInputs.xcfilelist, ); inputPaths = ( - Flutter/ephemeral/tripwire, + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - Flutter/ephemeral/FlutterOutputs.xcfilelist, ); outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - 71A1F8B56A856017B515FABC /* [CP] Check Pods Manifest.lock */ = { + D68F277E53A7CDF7BBD90DDA /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -405,7 +405,7 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - F1B6D708C1D90A015E3B23B9 /* [CP] Embed Pods Frameworks */ = { + E50A2F9A715EDADE00C36A18 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 866BF68DD31095014D94FC9B /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 5D3AEF155FBD871F42636FA6 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = A7621843ACCF358083274DC3 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 28D6467ED5715E597D403B78 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C5367377FB9F54B0D1F2FFB3 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 139BE8CDBBED09BD185EB46F /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/adaptive_app/step_05/pubspec.yaml b/adaptive_app/step_05/pubspec.yaml index 591b8067af..e36988d4a1 100644 --- a/adaptive_app/step_05/pubspec.yaml +++ b/adaptive_app/step_05/pubspec.yaml @@ -31,6 +31,7 @@ dependencies: flutter: sdk: flutter + # The following adds the Cupertino Icons font to your application. # Use with the CupertinoIcons class for iOS style icons. cupertino_icons: ^1.0.8 diff --git a/adaptive_app/step_05/web/index.html b/adaptive_app/step_05/web/index.html index 86f03b98cf..ce0ee3b7e5 100644 --- a/adaptive_app/step_05/web/index.html +++ b/adaptive_app/step_05/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/adaptive_app/step_06/android/gradle.properties b/adaptive_app/step_06/android/gradle.properties index f018a61817..2597170821 100644 --- a/adaptive_app/step_06/android/gradle.properties +++ b/adaptive_app/step_06/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/adaptive_app/step_06/ios/Runner.xcodeproj/project.pbxproj b/adaptive_app/step_06/ios/Runner.xcodeproj/project.pbxproj index 2c18fc9e47..c6f3ba5ca1 100644 --- a/adaptive_app/step_06/ios/Runner.xcodeproj/project.pbxproj +++ b/adaptive_app/step_06/ios/Runner.xcodeproj/project.pbxproj @@ -10,12 +10,12 @@ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; - 6347137416242FF2FA3400D7 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 68B89C8BC43A0EB4D05CD361 /* Pods_RunnerTests.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; + 818857E73EDFF566602D3979 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 076253C42DA8398DAD9D0C5E /* Pods_Runner.framework */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - D308D40B9602F03194CCC8C6 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BC6E7475880FE14C9797B3EA /* Pods_Runner.framework */; }; + C53864E63C88D9E3FC6471E4 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A265904E40237EBD76393AA5 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,20 +42,19 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 047EF70300003B3C5FDFEC24 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 03DE4A7390E81C1529576B4D /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 076253C42DA8398DAD9D0C5E /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 09CDCA9C423B2CDBEE5880DC /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 0C2DDD7828CF904B25EAC222 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 251EE28A7FF501C44BF6B0F6 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 6745E985BA95E828608C99DB /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - 68B89C8BC43A0EB4D05CD361 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 6B85F831BE7920B112EE230D /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - 6D751E93919DEED7F636EF65 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; + 900B8CCF12E3F041E3872BF1 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -63,16 +62,17 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - A5C1F25F59E5AD5FD3838248 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - BC6E7475880FE14C9797B3EA /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 9CECD94FC0E21C4E2F3471FF /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + A265904E40237EBD76393AA5 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + F099B0A652C0F4AAE15492B0 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 3DB9EA7E3142F079BD794E7C /* Frameworks */ = { + 23A5040ECE20822260D727D1 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 6347137416242FF2FA3400D7 /* Pods_RunnerTests.framework in Frameworks */, + C53864E63C88D9E3FC6471E4 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -80,13 +80,36 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - D308D40B9602F03194CCC8C6 /* Pods_Runner.framework in Frameworks */, + 818857E73EDFF566602D3979 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 0D5C22ED61BF09A0B2D63659 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 076253C42DA8398DAD9D0C5E /* Pods_Runner.framework */, + A265904E40237EBD76393AA5 /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; + 1D3E27B5CE2CC03AC9FED23D /* Pods */ = { + isa = PBXGroup; + children = ( + 09CDCA9C423B2CDBEE5880DC /* Pods-Runner.debug.xcconfig */, + 900B8CCF12E3F041E3872BF1 /* Pods-Runner.release.xcconfig */, + F099B0A652C0F4AAE15492B0 /* Pods-Runner.profile.xcconfig */, + 9CECD94FC0E21C4E2F3471FF /* Pods-RunnerTests.debug.xcconfig */, + 03DE4A7390E81C1529576B4D /* Pods-RunnerTests.release.xcconfig */, + 0C2DDD7828CF904B25EAC222 /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; 331C8082294A63A400263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -113,8 +136,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - D006D16AAD3589AB2996AF19 /* Pods */, - F4496A5813DF2FCC0EF11787 /* Frameworks */, + 1D3E27B5CE2CC03AC9FED23D /* Pods */, + 0D5C22ED61BF09A0B2D63659 /* Frameworks */, ); sourceTree = ""; }; @@ -142,29 +165,6 @@ path = Runner; sourceTree = ""; }; - D006D16AAD3589AB2996AF19 /* Pods */ = { - isa = PBXGroup; - children = ( - A5C1F25F59E5AD5FD3838248 /* Pods-Runner.debug.xcconfig */, - 251EE28A7FF501C44BF6B0F6 /* Pods-Runner.release.xcconfig */, - 6745E985BA95E828608C99DB /* Pods-Runner.profile.xcconfig */, - 047EF70300003B3C5FDFEC24 /* Pods-RunnerTests.debug.xcconfig */, - 6B85F831BE7920B112EE230D /* Pods-RunnerTests.release.xcconfig */, - 6D751E93919DEED7F636EF65 /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; - F4496A5813DF2FCC0EF11787 /* Frameworks */ = { - isa = PBXGroup; - children = ( - BC6E7475880FE14C9797B3EA /* Pods_Runner.framework */, - 68B89C8BC43A0EB4D05CD361 /* Pods_RunnerTests.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 30D80C78F4BA8C88B202898C /* [CP] Check Pods Manifest.lock */, + EF1662C484A2B971954E5DE7 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 3DB9EA7E3142F079BD794E7C /* Frameworks */, + 23A5040ECE20822260D727D1 /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - E5D0453177845FBE309EB6CD /* [CP] Check Pods Manifest.lock */, + 4B400C64A9F780E303D56362 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - EFF678415838948476F54A4B /* [CP] Embed Pods Frameworks */, + F6ED726599594C9355B00DE8 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -270,43 +270,43 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 30D80C78F4BA8C88B202898C /* [CP] Check Pods Manifest.lock */ = { + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); + name = "Thin Binary"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + 4B400C64A9F780E303D56362 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( - "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "Thin Binary"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; @@ -323,7 +323,7 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - E5D0453177845FBE309EB6CD /* [CP] Check Pods Manifest.lock */ = { + EF1662C484A2B971954E5DE7 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -338,14 +338,14 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - EFF678415838948476F54A4B /* [CP] Embed Pods Frameworks */ = { + F6ED726599594C9355B00DE8 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 047EF70300003B3C5FDFEC24 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 9CECD94FC0E21C4E2F3471FF /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 6B85F831BE7920B112EE230D /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 03DE4A7390E81C1529576B4D /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 6D751E93919DEED7F636EF65 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 0C2DDD7828CF904B25EAC222 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/adaptive_app/step_06/linux/CMakeLists.txt b/adaptive_app/step_06/linux/CMakeLists.txt index 860cc230f2..95047a637a 100644 --- a/adaptive_app/step_06/linux/CMakeLists.txt +++ b/adaptive_app/step_06/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.13) +cmake_minimum_required(VERSION 3.10) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,8 +54,25 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -# Application build; see runner/CMakeLists.txt. -add_subdirectory("runner") +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Define the application target. To change its name, change BINARY_NAME above, +# not the value here, or `flutter run` will no longer work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/adaptive_app/step_06/linux/runner/main.cc b/adaptive_app/step_06/linux/main.cc similarity index 100% rename from adaptive_app/step_06/linux/runner/main.cc rename to adaptive_app/step_06/linux/main.cc diff --git a/adaptive_app/step_04/linux/runner/my_application.cc b/adaptive_app/step_06/linux/my_application.cc similarity index 93% rename from adaptive_app/step_04/linux/runner/my_application.cc rename to adaptive_app/step_06/linux/my_application.cc index c839eec643..a2e720d593 100644 --- a/adaptive_app/step_04/linux/runner/my_application.cc +++ b/adaptive_app/step_06/linux/my_application.cc @@ -117,12 +117,6 @@ static void my_application_class_init(MyApplicationClass* klass) { static void my_application_init(MyApplication* self) {} MyApplication* my_application_new() { - // Set the program name to the application ID, which helps various systems - // like GTK and desktop environments map this running application to its - // corresponding .desktop file. This ensures better integration by allowing - // the application to be recognized beyond its binary name. - g_set_prgname(APPLICATION_ID); - return MY_APPLICATION(g_object_new(my_application_get_type(), "application-id", APPLICATION_ID, "flags", G_APPLICATION_NON_UNIQUE, diff --git a/adaptive_app/step_06/linux/runner/my_application.h b/adaptive_app/step_06/linux/my_application.h similarity index 100% rename from adaptive_app/step_06/linux/runner/my_application.h rename to adaptive_app/step_06/linux/my_application.h diff --git a/adaptive_app/step_06/linux/runner/CMakeLists.txt b/adaptive_app/step_06/linux/runner/CMakeLists.txt deleted file mode 100644 index e97dabc702..0000000000 --- a/adaptive_app/step_06/linux/runner/CMakeLists.txt +++ /dev/null @@ -1,26 +0,0 @@ -cmake_minimum_required(VERSION 3.13) -project(runner LANGUAGES CXX) - -# Define the application target. To change its name, change BINARY_NAME in the -# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer -# work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add preprocessor definitions for the application ID. -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) - -target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/adaptive_app/step_06/macos/Runner.xcodeproj/project.pbxproj b/adaptive_app/step_06/macos/Runner.xcodeproj/project.pbxproj index 4cc7e4c0a6..272eda14e7 100644 --- a/adaptive_app/step_06/macos/Runner.xcodeproj/project.pbxproj +++ b/adaptive_app/step_06/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ + 0779940B4A2BFA69C1614EF1 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 83C8BE81D2605F4F3D5D6E43 /* Pods_Runner.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - AD4816DC1A3E8B0FCF3EF97F /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 899E375D32A57DB46B0D5015 /* Pods_RunnerTests.framework */; }; - CB9653FB11619FF04E6D0A85 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DDCF1329859CB2B135009A90 /* Pods_Runner.framework */; }; + D6BDF6487E1167604CD70873 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1702629233BAC4D256765DCD /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,6 +62,10 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 139BE8CDBBED09BD185EB46F /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 1702629233BAC4D256765DCD /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 28D6467ED5715E597D403B78 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 2F826F1F76A42B4953226C72 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -78,16 +82,12 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 5E6CD848E5EAE9ED3804128A /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - 72EA5204D593132D4180B92F /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 76C7A6CB8682BC6F15F956AB /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 5D3AEF155FBD871F42636FA6 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 866BF68DD31095014D94FC9B /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 899E375D32A57DB46B0D5015 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 83C8BE81D2605F4F3D5D6E43 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - A7621843ACCF358083274DC3 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - C5367377FB9F54B0D1F2FFB3 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - DDCF1329859CB2B135009A90 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 9C1C341528E24056DC0A3967 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + A02E023F403266AD4FD51FE3 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - AD4816DC1A3E8B0FCF3EF97F /* Pods_RunnerTests.framework in Frameworks */, + D6BDF6487E1167604CD70873 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,7 +103,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - CB9653FB11619FF04E6D0A85 /* Pods_Runner.framework in Frameworks */, + 0779940B4A2BFA69C1614EF1 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -137,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 4C48F4B1A2BDCABA73181790 /* Pods */, + 865DA271F115C3C9A9290FB5 /* Pods */, ); sourceTree = ""; }; @@ -185,15 +185,15 @@ path = Runner; sourceTree = ""; }; - 4C48F4B1A2BDCABA73181790 /* Pods */ = { + 865DA271F115C3C9A9290FB5 /* Pods */ = { isa = PBXGroup; children = ( - 72EA5204D593132D4180B92F /* Pods-Runner.debug.xcconfig */, - 76C7A6CB8682BC6F15F956AB /* Pods-Runner.release.xcconfig */, - 5E6CD848E5EAE9ED3804128A /* Pods-Runner.profile.xcconfig */, - 866BF68DD31095014D94FC9B /* Pods-RunnerTests.debug.xcconfig */, - A7621843ACCF358083274DC3 /* Pods-RunnerTests.release.xcconfig */, - C5367377FB9F54B0D1F2FFB3 /* Pods-RunnerTests.profile.xcconfig */, + 2F826F1F76A42B4953226C72 /* Pods-Runner.debug.xcconfig */, + A02E023F403266AD4FD51FE3 /* Pods-Runner.release.xcconfig */, + 9C1C341528E24056DC0A3967 /* Pods-Runner.profile.xcconfig */, + 5D3AEF155FBD871F42636FA6 /* Pods-RunnerTests.debug.xcconfig */, + 28D6467ED5715E597D403B78 /* Pods-RunnerTests.release.xcconfig */, + 139BE8CDBBED09BD185EB46F /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -202,8 +202,8 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - DDCF1329859CB2B135009A90 /* Pods_Runner.framework */, - 899E375D32A57DB46B0D5015 /* Pods_RunnerTests.framework */, + 83C8BE81D2605F4F3D5D6E43 /* Pods_Runner.framework */, + 1702629233BAC4D256765DCD /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 19A2D7810889EFE871D620A3 /* [CP] Check Pods Manifest.lock */, + 662BB0A9A865DC319D87667E /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 71A1F8B56A856017B515FABC /* [CP] Check Pods Manifest.lock */, + D68F277E53A7CDF7BBD90DDA /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - F1B6D708C1D90A015E3B23B9 /* [CP] Embed Pods Frameworks */, + E50A2F9A715EDADE00C36A18 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,67 +323,67 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 19A2D7810889EFE871D620A3 /* [CP] Check Pods Manifest.lock */ = { + 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", ); - name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; }; - 3399D490228B24CF009A79C7 /* ShellScript */ = { + 33CC111E2044C6BF0003C045 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + Flutter/ephemeral/FlutterInputs.xcfilelist, ); inputPaths = ( + Flutter/ephemeral/tripwire, ); outputFileListPaths = ( + Flutter/ephemeral/FlutterOutputs.xcfilelist, ); outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; + shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 33CC111E2044C6BF0003C045 /* ShellScript */ = { + 662BB0A9A865DC319D87667E /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - Flutter/ephemeral/FlutterInputs.xcfilelist, ); inputPaths = ( - Flutter/ephemeral/tripwire, + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - Flutter/ephemeral/FlutterOutputs.xcfilelist, ); outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - 71A1F8B56A856017B515FABC /* [CP] Check Pods Manifest.lock */ = { + D68F277E53A7CDF7BBD90DDA /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -405,7 +405,7 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - F1B6D708C1D90A015E3B23B9 /* [CP] Embed Pods Frameworks */ = { + E50A2F9A715EDADE00C36A18 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 866BF68DD31095014D94FC9B /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 5D3AEF155FBD871F42636FA6 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = A7621843ACCF358083274DC3 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 28D6467ED5715E597D403B78 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C5367377FB9F54B0D1F2FFB3 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 139BE8CDBBED09BD185EB46F /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/adaptive_app/step_06/pubspec.yaml b/adaptive_app/step_06/pubspec.yaml index 591b8067af..e36988d4a1 100644 --- a/adaptive_app/step_06/pubspec.yaml +++ b/adaptive_app/step_06/pubspec.yaml @@ -31,6 +31,7 @@ dependencies: flutter: sdk: flutter + # The following adds the Cupertino Icons font to your application. # Use with the CupertinoIcons class for iOS style icons. cupertino_icons: ^1.0.8 diff --git a/adaptive_app/step_06/web/index.html b/adaptive_app/step_06/web/index.html index 86f03b98cf..ce0ee3b7e5 100644 --- a/adaptive_app/step_06/web/index.html +++ b/adaptive_app/step_06/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/adaptive_app/step_06/yt_cors_proxy/pubspec.yaml b/adaptive_app/step_06/yt_cors_proxy/pubspec.yaml index 1806246610..d2f8fb5dc1 100644 --- a/adaptive_app/step_06/yt_cors_proxy/pubspec.yaml +++ b/adaptive_app/step_06/yt_cors_proxy/pubspec.yaml @@ -11,4 +11,4 @@ dependencies: shelf_cors_headers: ^0.1.5 dev_dependencies: - lints: ^5.0.0 + lints: ^5.1.0 diff --git a/adaptive_app/step_07/android/gradle.properties b/adaptive_app/step_07/android/gradle.properties index f018a61817..2597170821 100644 --- a/adaptive_app/step_07/android/gradle.properties +++ b/adaptive_app/step_07/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/adaptive_app/step_07/ios/Runner.xcodeproj/project.pbxproj b/adaptive_app/step_07/ios/Runner.xcodeproj/project.pbxproj index 8b819eeedd..df046ee794 100644 --- a/adaptive_app/step_07/ios/Runner.xcodeproj/project.pbxproj +++ b/adaptive_app/step_07/ios/Runner.xcodeproj/project.pbxproj @@ -10,12 +10,12 @@ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; - 6347137416242FF2FA3400D7 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 68B89C8BC43A0EB4D05CD361 /* Pods_RunnerTests.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; + 818857E73EDFF566602D3979 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 076253C42DA8398DAD9D0C5E /* Pods_Runner.framework */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - D308D40B9602F03194CCC8C6 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BC6E7475880FE14C9797B3EA /* Pods_Runner.framework */; }; + C53864E63C88D9E3FC6471E4 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A265904E40237EBD76393AA5 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,20 +42,19 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 047EF70300003B3C5FDFEC24 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 03DE4A7390E81C1529576B4D /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 076253C42DA8398DAD9D0C5E /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 09CDCA9C423B2CDBEE5880DC /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 0C2DDD7828CF904B25EAC222 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 251EE28A7FF501C44BF6B0F6 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 6745E985BA95E828608C99DB /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - 68B89C8BC43A0EB4D05CD361 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 6B85F831BE7920B112EE230D /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - 6D751E93919DEED7F636EF65 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; + 900B8CCF12E3F041E3872BF1 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -63,16 +62,17 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - A5C1F25F59E5AD5FD3838248 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - BC6E7475880FE14C9797B3EA /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 9CECD94FC0E21C4E2F3471FF /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + A265904E40237EBD76393AA5 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + F099B0A652C0F4AAE15492B0 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 3DB9EA7E3142F079BD794E7C /* Frameworks */ = { + 23A5040ECE20822260D727D1 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 6347137416242FF2FA3400D7 /* Pods_RunnerTests.framework in Frameworks */, + C53864E63C88D9E3FC6471E4 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -80,13 +80,36 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - D308D40B9602F03194CCC8C6 /* Pods_Runner.framework in Frameworks */, + 818857E73EDFF566602D3979 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 0D5C22ED61BF09A0B2D63659 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 076253C42DA8398DAD9D0C5E /* Pods_Runner.framework */, + A265904E40237EBD76393AA5 /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; + 1D3E27B5CE2CC03AC9FED23D /* Pods */ = { + isa = PBXGroup; + children = ( + 09CDCA9C423B2CDBEE5880DC /* Pods-Runner.debug.xcconfig */, + 900B8CCF12E3F041E3872BF1 /* Pods-Runner.release.xcconfig */, + F099B0A652C0F4AAE15492B0 /* Pods-Runner.profile.xcconfig */, + 9CECD94FC0E21C4E2F3471FF /* Pods-RunnerTests.debug.xcconfig */, + 03DE4A7390E81C1529576B4D /* Pods-RunnerTests.release.xcconfig */, + 0C2DDD7828CF904B25EAC222 /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; 331C8082294A63A400263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -113,8 +136,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - D006D16AAD3589AB2996AF19 /* Pods */, - F4496A5813DF2FCC0EF11787 /* Frameworks */, + 1D3E27B5CE2CC03AC9FED23D /* Pods */, + 0D5C22ED61BF09A0B2D63659 /* Frameworks */, ); sourceTree = ""; }; @@ -142,29 +165,6 @@ path = Runner; sourceTree = ""; }; - D006D16AAD3589AB2996AF19 /* Pods */ = { - isa = PBXGroup; - children = ( - A5C1F25F59E5AD5FD3838248 /* Pods-Runner.debug.xcconfig */, - 251EE28A7FF501C44BF6B0F6 /* Pods-Runner.release.xcconfig */, - 6745E985BA95E828608C99DB /* Pods-Runner.profile.xcconfig */, - 047EF70300003B3C5FDFEC24 /* Pods-RunnerTests.debug.xcconfig */, - 6B85F831BE7920B112EE230D /* Pods-RunnerTests.release.xcconfig */, - 6D751E93919DEED7F636EF65 /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; - F4496A5813DF2FCC0EF11787 /* Frameworks */ = { - isa = PBXGroup; - children = ( - BC6E7475880FE14C9797B3EA /* Pods_Runner.framework */, - 68B89C8BC43A0EB4D05CD361 /* Pods_RunnerTests.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 30D80C78F4BA8C88B202898C /* [CP] Check Pods Manifest.lock */, + EF1662C484A2B971954E5DE7 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 3DB9EA7E3142F079BD794E7C /* Frameworks */, + 23A5040ECE20822260D727D1 /* Frameworks */, ); buildRules = ( ); @@ -191,15 +191,15 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - E5D0453177845FBE309EB6CD /* [CP] Check Pods Manifest.lock */, + 4B400C64A9F780E303D56362 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - EFF678415838948476F54A4B /* [CP] Embed Pods Frameworks */, - AAB3673B687CAB8ABCA6F996 /* [CP] Copy Pods Resources */, + F6ED726599594C9355B00DE8 /* [CP] Embed Pods Frameworks */, + 7837EF41E638292961CF7084 /* [CP] Copy Pods Resources */, ); buildRules = ( ); @@ -271,7 +271,23 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 30D80C78F4BA8C88B202898C /* [CP] Check Pods Manifest.lock */ = { + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", + ); + name = "Thin Binary"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + }; + 4B400C64A9F780E303D56362 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -286,28 +302,29 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + 7837EF41E638292961CF7084 /* [CP] Copy Pods Resources */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputPaths = ( - "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-input-files.xcfilelist", ); - name = "Thin Binary"; - outputPaths = ( + name = "[CP] Copy Pods Resources"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n"; + showEnvVarsInLog = 0; }; 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; @@ -324,24 +341,7 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - AAB3673B687CAB8ABCA6F996 /* [CP] Copy Pods Resources */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Copy Pods Resources"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n"; - showEnvVarsInLog = 0; - }; - E5D0453177845FBE309EB6CD /* [CP] Check Pods Manifest.lock */ = { + EF1662C484A2B971954E5DE7 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -356,14 +356,14 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - EFF678415838948476F54A4B /* [CP] Embed Pods Frameworks */ = { + F6ED726599594C9355B00DE8 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -505,7 +505,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 047EF70300003B3C5FDFEC24 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 9CECD94FC0E21C4E2F3471FF /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -523,7 +523,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 6B85F831BE7920B112EE230D /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 03DE4A7390E81C1529576B4D /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -539,7 +539,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 6D751E93919DEED7F636EF65 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 0C2DDD7828CF904B25EAC222 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/adaptive_app/step_07/linux/CMakeLists.txt b/adaptive_app/step_07/linux/CMakeLists.txt index 860cc230f2..95047a637a 100644 --- a/adaptive_app/step_07/linux/CMakeLists.txt +++ b/adaptive_app/step_07/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.13) +cmake_minimum_required(VERSION 3.10) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,8 +54,25 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -# Application build; see runner/CMakeLists.txt. -add_subdirectory("runner") +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Define the application target. To change its name, change BINARY_NAME above, +# not the value here, or `flutter run` will no longer work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/adaptive_app/step_07/linux/runner/main.cc b/adaptive_app/step_07/linux/main.cc similarity index 100% rename from adaptive_app/step_07/linux/runner/main.cc rename to adaptive_app/step_07/linux/main.cc diff --git a/adaptive_app/step_07/linux/my_application.cc b/adaptive_app/step_07/linux/my_application.cc new file mode 100644 index 0000000000..a2e720d593 --- /dev/null +++ b/adaptive_app/step_07/linux/my_application.cc @@ -0,0 +1,124 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "adaptive_app"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "adaptive_app"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/adaptive_app/step_07/linux/runner/my_application.h b/adaptive_app/step_07/linux/my_application.h similarity index 100% rename from adaptive_app/step_07/linux/runner/my_application.h rename to adaptive_app/step_07/linux/my_application.h diff --git a/adaptive_app/step_07/linux/runner/CMakeLists.txt b/adaptive_app/step_07/linux/runner/CMakeLists.txt deleted file mode 100644 index e97dabc702..0000000000 --- a/adaptive_app/step_07/linux/runner/CMakeLists.txt +++ /dev/null @@ -1,26 +0,0 @@ -cmake_minimum_required(VERSION 3.13) -project(runner LANGUAGES CXX) - -# Define the application target. To change its name, change BINARY_NAME in the -# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer -# work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add preprocessor definitions for the application ID. -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) - -target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/adaptive_app/step_07/linux/runner/my_application.cc b/adaptive_app/step_07/linux/runner/my_application.cc deleted file mode 100644 index c839eec643..0000000000 --- a/adaptive_app/step_07/linux/runner/my_application.cc +++ /dev/null @@ -1,130 +0,0 @@ -#include "my_application.h" - -#include -#ifdef GDK_WINDOWING_X11 -#include -#endif - -#include "flutter/generated_plugin_registrant.h" - -struct _MyApplication { - GtkApplication parent_instance; - char** dart_entrypoint_arguments; -}; - -G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) - -// Implements GApplication::activate. -static void my_application_activate(GApplication* application) { - MyApplication* self = MY_APPLICATION(application); - GtkWindow* window = - GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); - - // Use a header bar when running in GNOME as this is the common style used - // by applications and is the setup most users will be using (e.g. Ubuntu - // desktop). - // If running on X and not using GNOME then just use a traditional title bar - // in case the window manager does more exotic layout, e.g. tiling. - // If running on Wayland assume the header bar will work (may need changing - // if future cases occur). - gboolean use_header_bar = TRUE; -#ifdef GDK_WINDOWING_X11 - GdkScreen* screen = gtk_window_get_screen(window); - if (GDK_IS_X11_SCREEN(screen)) { - const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); - if (g_strcmp0(wm_name, "GNOME Shell") != 0) { - use_header_bar = FALSE; - } - } -#endif - if (use_header_bar) { - GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); - gtk_widget_show(GTK_WIDGET(header_bar)); - gtk_header_bar_set_title(header_bar, "adaptive_app"); - gtk_header_bar_set_show_close_button(header_bar, TRUE); - gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); - } else { - gtk_window_set_title(window, "adaptive_app"); - } - - gtk_window_set_default_size(window, 1280, 720); - gtk_widget_show(GTK_WIDGET(window)); - - g_autoptr(FlDartProject) project = fl_dart_project_new(); - fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); - - FlView* view = fl_view_new(project); - gtk_widget_show(GTK_WIDGET(view)); - gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); - - fl_register_plugins(FL_PLUGIN_REGISTRY(view)); - - gtk_widget_grab_focus(GTK_WIDGET(view)); -} - -// Implements GApplication::local_command_line. -static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { - MyApplication* self = MY_APPLICATION(application); - // Strip out the first argument as it is the binary name. - self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); - - g_autoptr(GError) error = nullptr; - if (!g_application_register(application, nullptr, &error)) { - g_warning("Failed to register: %s", error->message); - *exit_status = 1; - return TRUE; - } - - g_application_activate(application); - *exit_status = 0; - - return TRUE; -} - -// Implements GApplication::startup. -static void my_application_startup(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application startup. - - G_APPLICATION_CLASS(my_application_parent_class)->startup(application); -} - -// Implements GApplication::shutdown. -static void my_application_shutdown(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application shutdown. - - G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); -} - -// Implements GObject::dispose. -static void my_application_dispose(GObject* object) { - MyApplication* self = MY_APPLICATION(object); - g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); - G_OBJECT_CLASS(my_application_parent_class)->dispose(object); -} - -static void my_application_class_init(MyApplicationClass* klass) { - G_APPLICATION_CLASS(klass)->activate = my_application_activate; - G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; - G_APPLICATION_CLASS(klass)->startup = my_application_startup; - G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; - G_OBJECT_CLASS(klass)->dispose = my_application_dispose; -} - -static void my_application_init(MyApplication* self) {} - -MyApplication* my_application_new() { - // Set the program name to the application ID, which helps various systems - // like GTK and desktop environments map this running application to its - // corresponding .desktop file. This ensures better integration by allowing - // the application to be recognized beyond its binary name. - g_set_prgname(APPLICATION_ID); - - return MY_APPLICATION(g_object_new(my_application_get_type(), - "application-id", APPLICATION_ID, - "flags", G_APPLICATION_NON_UNIQUE, - nullptr)); -} diff --git a/adaptive_app/step_07/macos/Runner.xcodeproj/project.pbxproj b/adaptive_app/step_07/macos/Runner.xcodeproj/project.pbxproj index 464be58faa..77696375a5 100644 --- a/adaptive_app/step_07/macos/Runner.xcodeproj/project.pbxproj +++ b/adaptive_app/step_07/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ + 0779940B4A2BFA69C1614EF1 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 83C8BE81D2605F4F3D5D6E43 /* Pods_Runner.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - AD4816DC1A3E8B0FCF3EF97F /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 899E375D32A57DB46B0D5015 /* Pods_RunnerTests.framework */; }; - CB9653FB11619FF04E6D0A85 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DDCF1329859CB2B135009A90 /* Pods_Runner.framework */; }; + D6BDF6487E1167604CD70873 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1702629233BAC4D256765DCD /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,6 +62,10 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 139BE8CDBBED09BD185EB46F /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 1702629233BAC4D256765DCD /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 28D6467ED5715E597D403B78 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 2F826F1F76A42B4953226C72 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -78,16 +82,12 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 5E6CD848E5EAE9ED3804128A /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - 72EA5204D593132D4180B92F /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 76C7A6CB8682BC6F15F956AB /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 5D3AEF155FBD871F42636FA6 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 866BF68DD31095014D94FC9B /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 899E375D32A57DB46B0D5015 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 83C8BE81D2605F4F3D5D6E43 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - A7621843ACCF358083274DC3 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - C5367377FB9F54B0D1F2FFB3 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - DDCF1329859CB2B135009A90 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 9C1C341528E24056DC0A3967 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + A02E023F403266AD4FD51FE3 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - AD4816DC1A3E8B0FCF3EF97F /* Pods_RunnerTests.framework in Frameworks */, + D6BDF6487E1167604CD70873 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,7 +103,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - CB9653FB11619FF04E6D0A85 /* Pods_Runner.framework in Frameworks */, + 0779940B4A2BFA69C1614EF1 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -137,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 4C48F4B1A2BDCABA73181790 /* Pods */, + 865DA271F115C3C9A9290FB5 /* Pods */, ); sourceTree = ""; }; @@ -185,15 +185,15 @@ path = Runner; sourceTree = ""; }; - 4C48F4B1A2BDCABA73181790 /* Pods */ = { + 865DA271F115C3C9A9290FB5 /* Pods */ = { isa = PBXGroup; children = ( - 72EA5204D593132D4180B92F /* Pods-Runner.debug.xcconfig */, - 76C7A6CB8682BC6F15F956AB /* Pods-Runner.release.xcconfig */, - 5E6CD848E5EAE9ED3804128A /* Pods-Runner.profile.xcconfig */, - 866BF68DD31095014D94FC9B /* Pods-RunnerTests.debug.xcconfig */, - A7621843ACCF358083274DC3 /* Pods-RunnerTests.release.xcconfig */, - C5367377FB9F54B0D1F2FFB3 /* Pods-RunnerTests.profile.xcconfig */, + 2F826F1F76A42B4953226C72 /* Pods-Runner.debug.xcconfig */, + A02E023F403266AD4FD51FE3 /* Pods-Runner.release.xcconfig */, + 9C1C341528E24056DC0A3967 /* Pods-Runner.profile.xcconfig */, + 5D3AEF155FBD871F42636FA6 /* Pods-RunnerTests.debug.xcconfig */, + 28D6467ED5715E597D403B78 /* Pods-RunnerTests.release.xcconfig */, + 139BE8CDBBED09BD185EB46F /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -202,8 +202,8 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - DDCF1329859CB2B135009A90 /* Pods_Runner.framework */, - 899E375D32A57DB46B0D5015 /* Pods_RunnerTests.framework */, + 83C8BE81D2605F4F3D5D6E43 /* Pods_Runner.framework */, + 1702629233BAC4D256765DCD /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 19A2D7810889EFE871D620A3 /* [CP] Check Pods Manifest.lock */, + 662BB0A9A865DC319D87667E /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,14 +234,14 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 71A1F8B56A856017B515FABC /* [CP] Check Pods Manifest.lock */, + D68F277E53A7CDF7BBD90DDA /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - F1B6D708C1D90A015E3B23B9 /* [CP] Embed Pods Frameworks */, - 9FFDA361F6BA65B67648E90C /* [CP] Copy Pods Resources */, + E50A2F9A715EDADE00C36A18 /* [CP] Embed Pods Frameworks */, + 3B5571E4719A0B49AEC8299C /* [CP] Copy Pods Resources */, ); buildRules = ( ); @@ -324,67 +324,62 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 19A2D7810889EFE871D620A3 /* [CP] Check Pods Manifest.lock */ = { + 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", ); - name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; }; - 3399D490228B24CF009A79C7 /* ShellScript */ = { + 33CC111E2044C6BF0003C045 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + Flutter/ephemeral/FlutterInputs.xcfilelist, ); inputPaths = ( + Flutter/ephemeral/tripwire, ); outputFileListPaths = ( + Flutter/ephemeral/FlutterOutputs.xcfilelist, ); outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; + shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 33CC111E2044C6BF0003C045 /* ShellScript */ = { + 3B5571E4719A0B49AEC8299C /* [CP] Copy Pods Resources */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - Flutter/ephemeral/FlutterInputs.xcfilelist, - ); - inputPaths = ( - Flutter/ephemeral/tripwire, + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-input-files.xcfilelist", ); + name = "[CP] Copy Pods Resources"; outputFileListPaths = ( - Flutter/ephemeral/FlutterOutputs.xcfilelist, - ); - outputPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n"; + showEnvVarsInLog = 0; }; - 71A1F8B56A856017B515FABC /* [CP] Check Pods Manifest.lock */ = { + 662BB0A9A865DC319D87667E /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -399,31 +394,36 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 9FFDA361F6BA65B67648E90C /* [CP] Copy Pods Resources */ = { + D68F277E53A7CDF7BBD90DDA /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Copy Pods Resources"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - F1B6D708C1D90A015E3B23B9 /* [CP] Embed Pods Frameworks */ = { + E50A2F9A715EDADE00C36A18 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -491,7 +491,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 866BF68DD31095014D94FC9B /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 5D3AEF155FBD871F42636FA6 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -506,7 +506,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = A7621843ACCF358083274DC3 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 28D6467ED5715E597D403B78 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -521,7 +521,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C5367377FB9F54B0D1F2FFB3 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 139BE8CDBBED09BD185EB46F /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/adaptive_app/step_07/pubspec.yaml b/adaptive_app/step_07/pubspec.yaml index 808c330e72..4223dae908 100644 --- a/adaptive_app/step_07/pubspec.yaml +++ b/adaptive_app/step_07/pubspec.yaml @@ -31,6 +31,7 @@ dependencies: flutter: sdk: flutter + # The following adds the Cupertino Icons font to your application. # Use with the CupertinoIcons class for iOS style icons. cupertino_icons: ^1.0.8 diff --git a/adaptive_app/step_07/web/index.html b/adaptive_app/step_07/web/index.html index 6200c16df1..e29cfadf48 100644 --- a/adaptive_app/step_07/web/index.html +++ b/adaptive_app/step_07/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/adaptive_app/step_07/yt_cors_proxy/pubspec.yaml b/adaptive_app/step_07/yt_cors_proxy/pubspec.yaml index 1806246610..d2f8fb5dc1 100644 --- a/adaptive_app/step_07/yt_cors_proxy/pubspec.yaml +++ b/adaptive_app/step_07/yt_cors_proxy/pubspec.yaml @@ -11,4 +11,4 @@ dependencies: shelf_cors_headers: ^0.1.5 dev_dependencies: - lints: ^5.0.0 + lints: ^5.1.0 From d9e7cd1380653a299385b2ce3c4d4660f317205d Mon Sep 17 00:00:00 2001 From: Brett Morgan Date: Fri, 18 Oct 2024 09:47:15 +1100 Subject: [PATCH 016/108] Update `animated-responsive-layout` for flutter beta --- .../step_03/android/gradle.properties | 2 +- .../step_03/linux/CMakeLists.txt | 23 +++- .../step_03/linux/{runner => }/main.cc | 0 .../linux}/my_application.cc | 6 - .../linux/{runner => }/my_application.h | 0 .../step_03/linux/runner/CMakeLists.txt | 26 ---- .../step_03/web/index.html | 2 +- .../step_04/android/gradle.properties | 2 +- .../step_04/linux/CMakeLists.txt | 23 +++- .../step_04/linux/{runner => }/main.cc | 0 .../linux}/my_application.cc | 6 - .../linux/{runner => }/my_application.h | 0 .../step_04/linux/runner/CMakeLists.txt | 26 ---- .../step_04/web/index.html | 2 +- .../step_05/android/gradle.properties | 2 +- .../step_05/linux/CMakeLists.txt | 23 +++- .../step_05/linux/{runner => }/main.cc | 0 .../linux}/my_application.cc | 6 - .../linux/{runner => }/my_application.h | 0 .../step_05/linux/runner/CMakeLists.txt | 26 ---- .../step_05/web/index.html | 2 +- .../step_06/android/gradle.properties | 2 +- .../step_06/linux/CMakeLists.txt | 23 +++- .../step_06/linux/{runner => }/main.cc | 0 .../linux}/my_application.cc | 6 - .../linux/{runner => }/my_application.h | 0 .../step_06/linux/runner/CMakeLists.txt | 26 ---- .../step_06/web/index.html | 2 +- .../step_07/android/gradle.properties | 2 +- .../step_07/linux/CMakeLists.txt | 23 +++- .../step_07/linux/{runner => }/main.cc | 0 .../step_07/linux/my_application.cc | 124 +++++++++++++++++ .../linux/{runner => }/my_application.h | 0 .../step_07/linux/runner/CMakeLists.txt | 26 ---- .../step_07/linux/runner/my_application.cc | 130 ------------------ .../step_07/web/index.html | 2 +- .../step_08/android/gradle.properties | 2 +- .../step_08/linux/CMakeLists.txt | 23 +++- .../step_08/linux/{runner => }/main.cc | 0 .../step_08/linux/my_application.cc | 124 +++++++++++++++++ .../linux/{runner => }/my_application.h | 0 .../step_08/linux/runner/CMakeLists.txt | 26 ---- .../step_08/linux/runner/my_application.cc | 130 ------------------ .../step_08/web/index.html | 2 +- 44 files changed, 380 insertions(+), 470 deletions(-) rename animated-responsive-layout/step_03/linux/{runner => }/main.cc (100%) rename animated-responsive-layout/{step_05/linux/runner => step_03/linux}/my_application.cc (93%) rename animated-responsive-layout/step_03/linux/{runner => }/my_application.h (100%) delete mode 100644 animated-responsive-layout/step_03/linux/runner/CMakeLists.txt rename animated-responsive-layout/step_04/linux/{runner => }/main.cc (100%) rename animated-responsive-layout/{step_03/linux/runner => step_04/linux}/my_application.cc (93%) rename animated-responsive-layout/step_04/linux/{runner => }/my_application.h (100%) delete mode 100644 animated-responsive-layout/step_04/linux/runner/CMakeLists.txt rename animated-responsive-layout/step_05/linux/{runner => }/main.cc (100%) rename animated-responsive-layout/{step_06/linux/runner => step_05/linux}/my_application.cc (93%) rename animated-responsive-layout/step_05/linux/{runner => }/my_application.h (100%) delete mode 100644 animated-responsive-layout/step_05/linux/runner/CMakeLists.txt rename animated-responsive-layout/step_06/linux/{runner => }/main.cc (100%) rename animated-responsive-layout/{step_04/linux/runner => step_06/linux}/my_application.cc (93%) rename animated-responsive-layout/step_06/linux/{runner => }/my_application.h (100%) delete mode 100644 animated-responsive-layout/step_06/linux/runner/CMakeLists.txt rename animated-responsive-layout/step_07/linux/{runner => }/main.cc (100%) create mode 100644 animated-responsive-layout/step_07/linux/my_application.cc rename animated-responsive-layout/step_07/linux/{runner => }/my_application.h (100%) delete mode 100644 animated-responsive-layout/step_07/linux/runner/CMakeLists.txt delete mode 100644 animated-responsive-layout/step_07/linux/runner/my_application.cc rename animated-responsive-layout/step_08/linux/{runner => }/main.cc (100%) create mode 100644 animated-responsive-layout/step_08/linux/my_application.cc rename animated-responsive-layout/step_08/linux/{runner => }/my_application.h (100%) delete mode 100644 animated-responsive-layout/step_08/linux/runner/CMakeLists.txt delete mode 100644 animated-responsive-layout/step_08/linux/runner/my_application.cc diff --git a/animated-responsive-layout/step_03/android/gradle.properties b/animated-responsive-layout/step_03/android/gradle.properties index f018a61817..2597170821 100644 --- a/animated-responsive-layout/step_03/android/gradle.properties +++ b/animated-responsive-layout/step_03/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/animated-responsive-layout/step_03/linux/CMakeLists.txt b/animated-responsive-layout/step_03/linux/CMakeLists.txt index 65d5443385..0a7358f3d8 100644 --- a/animated-responsive-layout/step_03/linux/CMakeLists.txt +++ b/animated-responsive-layout/step_03/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.13) +cmake_minimum_required(VERSION 3.10) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,8 +54,25 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -# Application build; see runner/CMakeLists.txt. -add_subdirectory("runner") +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Define the application target. To change its name, change BINARY_NAME above, +# not the value here, or `flutter run` will no longer work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/animated-responsive-layout/step_03/linux/runner/main.cc b/animated-responsive-layout/step_03/linux/main.cc similarity index 100% rename from animated-responsive-layout/step_03/linux/runner/main.cc rename to animated-responsive-layout/step_03/linux/main.cc diff --git a/animated-responsive-layout/step_05/linux/runner/my_application.cc b/animated-responsive-layout/step_03/linux/my_application.cc similarity index 93% rename from animated-responsive-layout/step_05/linux/runner/my_application.cc rename to animated-responsive-layout/step_03/linux/my_application.cc index aaab2bbdcd..a11b92eb43 100644 --- a/animated-responsive-layout/step_05/linux/runner/my_application.cc +++ b/animated-responsive-layout/step_03/linux/my_application.cc @@ -117,12 +117,6 @@ static void my_application_class_init(MyApplicationClass* klass) { static void my_application_init(MyApplication* self) {} MyApplication* my_application_new() { - // Set the program name to the application ID, which helps various systems - // like GTK and desktop environments map this running application to its - // corresponding .desktop file. This ensures better integration by allowing - // the application to be recognized beyond its binary name. - g_set_prgname(APPLICATION_ID); - return MY_APPLICATION(g_object_new(my_application_get_type(), "application-id", APPLICATION_ID, "flags", G_APPLICATION_NON_UNIQUE, diff --git a/animated-responsive-layout/step_03/linux/runner/my_application.h b/animated-responsive-layout/step_03/linux/my_application.h similarity index 100% rename from animated-responsive-layout/step_03/linux/runner/my_application.h rename to animated-responsive-layout/step_03/linux/my_application.h diff --git a/animated-responsive-layout/step_03/linux/runner/CMakeLists.txt b/animated-responsive-layout/step_03/linux/runner/CMakeLists.txt deleted file mode 100644 index e97dabc702..0000000000 --- a/animated-responsive-layout/step_03/linux/runner/CMakeLists.txt +++ /dev/null @@ -1,26 +0,0 @@ -cmake_minimum_required(VERSION 3.13) -project(runner LANGUAGES CXX) - -# Define the application target. To change its name, change BINARY_NAME in the -# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer -# work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add preprocessor definitions for the application ID. -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) - -target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/animated-responsive-layout/step_03/web/index.html b/animated-responsive-layout/step_03/web/index.html index bae2a10642..84d054020a 100644 --- a/animated-responsive-layout/step_03/web/index.html +++ b/animated-responsive-layout/step_03/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/animated-responsive-layout/step_04/android/gradle.properties b/animated-responsive-layout/step_04/android/gradle.properties index f018a61817..2597170821 100644 --- a/animated-responsive-layout/step_04/android/gradle.properties +++ b/animated-responsive-layout/step_04/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/animated-responsive-layout/step_04/linux/CMakeLists.txt b/animated-responsive-layout/step_04/linux/CMakeLists.txt index 65d5443385..0a7358f3d8 100644 --- a/animated-responsive-layout/step_04/linux/CMakeLists.txt +++ b/animated-responsive-layout/step_04/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.13) +cmake_minimum_required(VERSION 3.10) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,8 +54,25 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -# Application build; see runner/CMakeLists.txt. -add_subdirectory("runner") +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Define the application target. To change its name, change BINARY_NAME above, +# not the value here, or `flutter run` will no longer work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/animated-responsive-layout/step_04/linux/runner/main.cc b/animated-responsive-layout/step_04/linux/main.cc similarity index 100% rename from animated-responsive-layout/step_04/linux/runner/main.cc rename to animated-responsive-layout/step_04/linux/main.cc diff --git a/animated-responsive-layout/step_03/linux/runner/my_application.cc b/animated-responsive-layout/step_04/linux/my_application.cc similarity index 93% rename from animated-responsive-layout/step_03/linux/runner/my_application.cc rename to animated-responsive-layout/step_04/linux/my_application.cc index aaab2bbdcd..a11b92eb43 100644 --- a/animated-responsive-layout/step_03/linux/runner/my_application.cc +++ b/animated-responsive-layout/step_04/linux/my_application.cc @@ -117,12 +117,6 @@ static void my_application_class_init(MyApplicationClass* klass) { static void my_application_init(MyApplication* self) {} MyApplication* my_application_new() { - // Set the program name to the application ID, which helps various systems - // like GTK and desktop environments map this running application to its - // corresponding .desktop file. This ensures better integration by allowing - // the application to be recognized beyond its binary name. - g_set_prgname(APPLICATION_ID); - return MY_APPLICATION(g_object_new(my_application_get_type(), "application-id", APPLICATION_ID, "flags", G_APPLICATION_NON_UNIQUE, diff --git a/animated-responsive-layout/step_04/linux/runner/my_application.h b/animated-responsive-layout/step_04/linux/my_application.h similarity index 100% rename from animated-responsive-layout/step_04/linux/runner/my_application.h rename to animated-responsive-layout/step_04/linux/my_application.h diff --git a/animated-responsive-layout/step_04/linux/runner/CMakeLists.txt b/animated-responsive-layout/step_04/linux/runner/CMakeLists.txt deleted file mode 100644 index e97dabc702..0000000000 --- a/animated-responsive-layout/step_04/linux/runner/CMakeLists.txt +++ /dev/null @@ -1,26 +0,0 @@ -cmake_minimum_required(VERSION 3.13) -project(runner LANGUAGES CXX) - -# Define the application target. To change its name, change BINARY_NAME in the -# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer -# work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add preprocessor definitions for the application ID. -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) - -target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/animated-responsive-layout/step_04/web/index.html b/animated-responsive-layout/step_04/web/index.html index bae2a10642..84d054020a 100644 --- a/animated-responsive-layout/step_04/web/index.html +++ b/animated-responsive-layout/step_04/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/animated-responsive-layout/step_05/android/gradle.properties b/animated-responsive-layout/step_05/android/gradle.properties index f018a61817..2597170821 100644 --- a/animated-responsive-layout/step_05/android/gradle.properties +++ b/animated-responsive-layout/step_05/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/animated-responsive-layout/step_05/linux/CMakeLists.txt b/animated-responsive-layout/step_05/linux/CMakeLists.txt index 65d5443385..0a7358f3d8 100644 --- a/animated-responsive-layout/step_05/linux/CMakeLists.txt +++ b/animated-responsive-layout/step_05/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.13) +cmake_minimum_required(VERSION 3.10) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,8 +54,25 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -# Application build; see runner/CMakeLists.txt. -add_subdirectory("runner") +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Define the application target. To change its name, change BINARY_NAME above, +# not the value here, or `flutter run` will no longer work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/animated-responsive-layout/step_05/linux/runner/main.cc b/animated-responsive-layout/step_05/linux/main.cc similarity index 100% rename from animated-responsive-layout/step_05/linux/runner/main.cc rename to animated-responsive-layout/step_05/linux/main.cc diff --git a/animated-responsive-layout/step_06/linux/runner/my_application.cc b/animated-responsive-layout/step_05/linux/my_application.cc similarity index 93% rename from animated-responsive-layout/step_06/linux/runner/my_application.cc rename to animated-responsive-layout/step_05/linux/my_application.cc index aaab2bbdcd..a11b92eb43 100644 --- a/animated-responsive-layout/step_06/linux/runner/my_application.cc +++ b/animated-responsive-layout/step_05/linux/my_application.cc @@ -117,12 +117,6 @@ static void my_application_class_init(MyApplicationClass* klass) { static void my_application_init(MyApplication* self) {} MyApplication* my_application_new() { - // Set the program name to the application ID, which helps various systems - // like GTK and desktop environments map this running application to its - // corresponding .desktop file. This ensures better integration by allowing - // the application to be recognized beyond its binary name. - g_set_prgname(APPLICATION_ID); - return MY_APPLICATION(g_object_new(my_application_get_type(), "application-id", APPLICATION_ID, "flags", G_APPLICATION_NON_UNIQUE, diff --git a/animated-responsive-layout/step_05/linux/runner/my_application.h b/animated-responsive-layout/step_05/linux/my_application.h similarity index 100% rename from animated-responsive-layout/step_05/linux/runner/my_application.h rename to animated-responsive-layout/step_05/linux/my_application.h diff --git a/animated-responsive-layout/step_05/linux/runner/CMakeLists.txt b/animated-responsive-layout/step_05/linux/runner/CMakeLists.txt deleted file mode 100644 index e97dabc702..0000000000 --- a/animated-responsive-layout/step_05/linux/runner/CMakeLists.txt +++ /dev/null @@ -1,26 +0,0 @@ -cmake_minimum_required(VERSION 3.13) -project(runner LANGUAGES CXX) - -# Define the application target. To change its name, change BINARY_NAME in the -# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer -# work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add preprocessor definitions for the application ID. -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) - -target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/animated-responsive-layout/step_05/web/index.html b/animated-responsive-layout/step_05/web/index.html index bae2a10642..84d054020a 100644 --- a/animated-responsive-layout/step_05/web/index.html +++ b/animated-responsive-layout/step_05/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/animated-responsive-layout/step_06/android/gradle.properties b/animated-responsive-layout/step_06/android/gradle.properties index f018a61817..2597170821 100644 --- a/animated-responsive-layout/step_06/android/gradle.properties +++ b/animated-responsive-layout/step_06/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/animated-responsive-layout/step_06/linux/CMakeLists.txt b/animated-responsive-layout/step_06/linux/CMakeLists.txt index 65d5443385..0a7358f3d8 100644 --- a/animated-responsive-layout/step_06/linux/CMakeLists.txt +++ b/animated-responsive-layout/step_06/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.13) +cmake_minimum_required(VERSION 3.10) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,8 +54,25 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -# Application build; see runner/CMakeLists.txt. -add_subdirectory("runner") +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Define the application target. To change its name, change BINARY_NAME above, +# not the value here, or `flutter run` will no longer work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/animated-responsive-layout/step_06/linux/runner/main.cc b/animated-responsive-layout/step_06/linux/main.cc similarity index 100% rename from animated-responsive-layout/step_06/linux/runner/main.cc rename to animated-responsive-layout/step_06/linux/main.cc diff --git a/animated-responsive-layout/step_04/linux/runner/my_application.cc b/animated-responsive-layout/step_06/linux/my_application.cc similarity index 93% rename from animated-responsive-layout/step_04/linux/runner/my_application.cc rename to animated-responsive-layout/step_06/linux/my_application.cc index aaab2bbdcd..a11b92eb43 100644 --- a/animated-responsive-layout/step_04/linux/runner/my_application.cc +++ b/animated-responsive-layout/step_06/linux/my_application.cc @@ -117,12 +117,6 @@ static void my_application_class_init(MyApplicationClass* klass) { static void my_application_init(MyApplication* self) {} MyApplication* my_application_new() { - // Set the program name to the application ID, which helps various systems - // like GTK and desktop environments map this running application to its - // corresponding .desktop file. This ensures better integration by allowing - // the application to be recognized beyond its binary name. - g_set_prgname(APPLICATION_ID); - return MY_APPLICATION(g_object_new(my_application_get_type(), "application-id", APPLICATION_ID, "flags", G_APPLICATION_NON_UNIQUE, diff --git a/animated-responsive-layout/step_06/linux/runner/my_application.h b/animated-responsive-layout/step_06/linux/my_application.h similarity index 100% rename from animated-responsive-layout/step_06/linux/runner/my_application.h rename to animated-responsive-layout/step_06/linux/my_application.h diff --git a/animated-responsive-layout/step_06/linux/runner/CMakeLists.txt b/animated-responsive-layout/step_06/linux/runner/CMakeLists.txt deleted file mode 100644 index e97dabc702..0000000000 --- a/animated-responsive-layout/step_06/linux/runner/CMakeLists.txt +++ /dev/null @@ -1,26 +0,0 @@ -cmake_minimum_required(VERSION 3.13) -project(runner LANGUAGES CXX) - -# Define the application target. To change its name, change BINARY_NAME in the -# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer -# work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add preprocessor definitions for the application ID. -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) - -target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/animated-responsive-layout/step_06/web/index.html b/animated-responsive-layout/step_06/web/index.html index bae2a10642..84d054020a 100644 --- a/animated-responsive-layout/step_06/web/index.html +++ b/animated-responsive-layout/step_06/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/animated-responsive-layout/step_07/android/gradle.properties b/animated-responsive-layout/step_07/android/gradle.properties index f018a61817..2597170821 100644 --- a/animated-responsive-layout/step_07/android/gradle.properties +++ b/animated-responsive-layout/step_07/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/animated-responsive-layout/step_07/linux/CMakeLists.txt b/animated-responsive-layout/step_07/linux/CMakeLists.txt index 65d5443385..0a7358f3d8 100644 --- a/animated-responsive-layout/step_07/linux/CMakeLists.txt +++ b/animated-responsive-layout/step_07/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.13) +cmake_minimum_required(VERSION 3.10) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,8 +54,25 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -# Application build; see runner/CMakeLists.txt. -add_subdirectory("runner") +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Define the application target. To change its name, change BINARY_NAME above, +# not the value here, or `flutter run` will no longer work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/animated-responsive-layout/step_07/linux/runner/main.cc b/animated-responsive-layout/step_07/linux/main.cc similarity index 100% rename from animated-responsive-layout/step_07/linux/runner/main.cc rename to animated-responsive-layout/step_07/linux/main.cc diff --git a/animated-responsive-layout/step_07/linux/my_application.cc b/animated-responsive-layout/step_07/linux/my_application.cc new file mode 100644 index 0000000000..a11b92eb43 --- /dev/null +++ b/animated-responsive-layout/step_07/linux/my_application.cc @@ -0,0 +1,124 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "animated_responsive_layout"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "animated_responsive_layout"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/animated-responsive-layout/step_07/linux/runner/my_application.h b/animated-responsive-layout/step_07/linux/my_application.h similarity index 100% rename from animated-responsive-layout/step_07/linux/runner/my_application.h rename to animated-responsive-layout/step_07/linux/my_application.h diff --git a/animated-responsive-layout/step_07/linux/runner/CMakeLists.txt b/animated-responsive-layout/step_07/linux/runner/CMakeLists.txt deleted file mode 100644 index e97dabc702..0000000000 --- a/animated-responsive-layout/step_07/linux/runner/CMakeLists.txt +++ /dev/null @@ -1,26 +0,0 @@ -cmake_minimum_required(VERSION 3.13) -project(runner LANGUAGES CXX) - -# Define the application target. To change its name, change BINARY_NAME in the -# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer -# work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add preprocessor definitions for the application ID. -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) - -target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/animated-responsive-layout/step_07/linux/runner/my_application.cc b/animated-responsive-layout/step_07/linux/runner/my_application.cc deleted file mode 100644 index aaab2bbdcd..0000000000 --- a/animated-responsive-layout/step_07/linux/runner/my_application.cc +++ /dev/null @@ -1,130 +0,0 @@ -#include "my_application.h" - -#include -#ifdef GDK_WINDOWING_X11 -#include -#endif - -#include "flutter/generated_plugin_registrant.h" - -struct _MyApplication { - GtkApplication parent_instance; - char** dart_entrypoint_arguments; -}; - -G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) - -// Implements GApplication::activate. -static void my_application_activate(GApplication* application) { - MyApplication* self = MY_APPLICATION(application); - GtkWindow* window = - GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); - - // Use a header bar when running in GNOME as this is the common style used - // by applications and is the setup most users will be using (e.g. Ubuntu - // desktop). - // If running on X and not using GNOME then just use a traditional title bar - // in case the window manager does more exotic layout, e.g. tiling. - // If running on Wayland assume the header bar will work (may need changing - // if future cases occur). - gboolean use_header_bar = TRUE; -#ifdef GDK_WINDOWING_X11 - GdkScreen* screen = gtk_window_get_screen(window); - if (GDK_IS_X11_SCREEN(screen)) { - const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); - if (g_strcmp0(wm_name, "GNOME Shell") != 0) { - use_header_bar = FALSE; - } - } -#endif - if (use_header_bar) { - GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); - gtk_widget_show(GTK_WIDGET(header_bar)); - gtk_header_bar_set_title(header_bar, "animated_responsive_layout"); - gtk_header_bar_set_show_close_button(header_bar, TRUE); - gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); - } else { - gtk_window_set_title(window, "animated_responsive_layout"); - } - - gtk_window_set_default_size(window, 1280, 720); - gtk_widget_show(GTK_WIDGET(window)); - - g_autoptr(FlDartProject) project = fl_dart_project_new(); - fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); - - FlView* view = fl_view_new(project); - gtk_widget_show(GTK_WIDGET(view)); - gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); - - fl_register_plugins(FL_PLUGIN_REGISTRY(view)); - - gtk_widget_grab_focus(GTK_WIDGET(view)); -} - -// Implements GApplication::local_command_line. -static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { - MyApplication* self = MY_APPLICATION(application); - // Strip out the first argument as it is the binary name. - self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); - - g_autoptr(GError) error = nullptr; - if (!g_application_register(application, nullptr, &error)) { - g_warning("Failed to register: %s", error->message); - *exit_status = 1; - return TRUE; - } - - g_application_activate(application); - *exit_status = 0; - - return TRUE; -} - -// Implements GApplication::startup. -static void my_application_startup(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application startup. - - G_APPLICATION_CLASS(my_application_parent_class)->startup(application); -} - -// Implements GApplication::shutdown. -static void my_application_shutdown(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application shutdown. - - G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); -} - -// Implements GObject::dispose. -static void my_application_dispose(GObject* object) { - MyApplication* self = MY_APPLICATION(object); - g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); - G_OBJECT_CLASS(my_application_parent_class)->dispose(object); -} - -static void my_application_class_init(MyApplicationClass* klass) { - G_APPLICATION_CLASS(klass)->activate = my_application_activate; - G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; - G_APPLICATION_CLASS(klass)->startup = my_application_startup; - G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; - G_OBJECT_CLASS(klass)->dispose = my_application_dispose; -} - -static void my_application_init(MyApplication* self) {} - -MyApplication* my_application_new() { - // Set the program name to the application ID, which helps various systems - // like GTK and desktop environments map this running application to its - // corresponding .desktop file. This ensures better integration by allowing - // the application to be recognized beyond its binary name. - g_set_prgname(APPLICATION_ID); - - return MY_APPLICATION(g_object_new(my_application_get_type(), - "application-id", APPLICATION_ID, - "flags", G_APPLICATION_NON_UNIQUE, - nullptr)); -} diff --git a/animated-responsive-layout/step_07/web/index.html b/animated-responsive-layout/step_07/web/index.html index bae2a10642..84d054020a 100644 --- a/animated-responsive-layout/step_07/web/index.html +++ b/animated-responsive-layout/step_07/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/animated-responsive-layout/step_08/android/gradle.properties b/animated-responsive-layout/step_08/android/gradle.properties index f018a61817..2597170821 100644 --- a/animated-responsive-layout/step_08/android/gradle.properties +++ b/animated-responsive-layout/step_08/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/animated-responsive-layout/step_08/linux/CMakeLists.txt b/animated-responsive-layout/step_08/linux/CMakeLists.txt index 65d5443385..0a7358f3d8 100644 --- a/animated-responsive-layout/step_08/linux/CMakeLists.txt +++ b/animated-responsive-layout/step_08/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.13) +cmake_minimum_required(VERSION 3.10) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,8 +54,25 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -# Application build; see runner/CMakeLists.txt. -add_subdirectory("runner") +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Define the application target. To change its name, change BINARY_NAME above, +# not the value here, or `flutter run` will no longer work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/animated-responsive-layout/step_08/linux/runner/main.cc b/animated-responsive-layout/step_08/linux/main.cc similarity index 100% rename from animated-responsive-layout/step_08/linux/runner/main.cc rename to animated-responsive-layout/step_08/linux/main.cc diff --git a/animated-responsive-layout/step_08/linux/my_application.cc b/animated-responsive-layout/step_08/linux/my_application.cc new file mode 100644 index 0000000000..a11b92eb43 --- /dev/null +++ b/animated-responsive-layout/step_08/linux/my_application.cc @@ -0,0 +1,124 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "animated_responsive_layout"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "animated_responsive_layout"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/animated-responsive-layout/step_08/linux/runner/my_application.h b/animated-responsive-layout/step_08/linux/my_application.h similarity index 100% rename from animated-responsive-layout/step_08/linux/runner/my_application.h rename to animated-responsive-layout/step_08/linux/my_application.h diff --git a/animated-responsive-layout/step_08/linux/runner/CMakeLists.txt b/animated-responsive-layout/step_08/linux/runner/CMakeLists.txt deleted file mode 100644 index e97dabc702..0000000000 --- a/animated-responsive-layout/step_08/linux/runner/CMakeLists.txt +++ /dev/null @@ -1,26 +0,0 @@ -cmake_minimum_required(VERSION 3.13) -project(runner LANGUAGES CXX) - -# Define the application target. To change its name, change BINARY_NAME in the -# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer -# work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add preprocessor definitions for the application ID. -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) - -target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/animated-responsive-layout/step_08/linux/runner/my_application.cc b/animated-responsive-layout/step_08/linux/runner/my_application.cc deleted file mode 100644 index aaab2bbdcd..0000000000 --- a/animated-responsive-layout/step_08/linux/runner/my_application.cc +++ /dev/null @@ -1,130 +0,0 @@ -#include "my_application.h" - -#include -#ifdef GDK_WINDOWING_X11 -#include -#endif - -#include "flutter/generated_plugin_registrant.h" - -struct _MyApplication { - GtkApplication parent_instance; - char** dart_entrypoint_arguments; -}; - -G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) - -// Implements GApplication::activate. -static void my_application_activate(GApplication* application) { - MyApplication* self = MY_APPLICATION(application); - GtkWindow* window = - GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); - - // Use a header bar when running in GNOME as this is the common style used - // by applications and is the setup most users will be using (e.g. Ubuntu - // desktop). - // If running on X and not using GNOME then just use a traditional title bar - // in case the window manager does more exotic layout, e.g. tiling. - // If running on Wayland assume the header bar will work (may need changing - // if future cases occur). - gboolean use_header_bar = TRUE; -#ifdef GDK_WINDOWING_X11 - GdkScreen* screen = gtk_window_get_screen(window); - if (GDK_IS_X11_SCREEN(screen)) { - const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); - if (g_strcmp0(wm_name, "GNOME Shell") != 0) { - use_header_bar = FALSE; - } - } -#endif - if (use_header_bar) { - GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); - gtk_widget_show(GTK_WIDGET(header_bar)); - gtk_header_bar_set_title(header_bar, "animated_responsive_layout"); - gtk_header_bar_set_show_close_button(header_bar, TRUE); - gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); - } else { - gtk_window_set_title(window, "animated_responsive_layout"); - } - - gtk_window_set_default_size(window, 1280, 720); - gtk_widget_show(GTK_WIDGET(window)); - - g_autoptr(FlDartProject) project = fl_dart_project_new(); - fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); - - FlView* view = fl_view_new(project); - gtk_widget_show(GTK_WIDGET(view)); - gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); - - fl_register_plugins(FL_PLUGIN_REGISTRY(view)); - - gtk_widget_grab_focus(GTK_WIDGET(view)); -} - -// Implements GApplication::local_command_line. -static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { - MyApplication* self = MY_APPLICATION(application); - // Strip out the first argument as it is the binary name. - self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); - - g_autoptr(GError) error = nullptr; - if (!g_application_register(application, nullptr, &error)) { - g_warning("Failed to register: %s", error->message); - *exit_status = 1; - return TRUE; - } - - g_application_activate(application); - *exit_status = 0; - - return TRUE; -} - -// Implements GApplication::startup. -static void my_application_startup(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application startup. - - G_APPLICATION_CLASS(my_application_parent_class)->startup(application); -} - -// Implements GApplication::shutdown. -static void my_application_shutdown(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application shutdown. - - G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); -} - -// Implements GObject::dispose. -static void my_application_dispose(GObject* object) { - MyApplication* self = MY_APPLICATION(object); - g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); - G_OBJECT_CLASS(my_application_parent_class)->dispose(object); -} - -static void my_application_class_init(MyApplicationClass* klass) { - G_APPLICATION_CLASS(klass)->activate = my_application_activate; - G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; - G_APPLICATION_CLASS(klass)->startup = my_application_startup; - G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; - G_OBJECT_CLASS(klass)->dispose = my_application_dispose; -} - -static void my_application_init(MyApplication* self) {} - -MyApplication* my_application_new() { - // Set the program name to the application ID, which helps various systems - // like GTK and desktop environments map this running application to its - // corresponding .desktop file. This ensures better integration by allowing - // the application to be recognized beyond its binary name. - g_set_prgname(APPLICATION_ID); - - return MY_APPLICATION(g_object_new(my_application_get_type(), - "application-id", APPLICATION_ID, - "flags", G_APPLICATION_NON_UNIQUE, - nullptr)); -} diff --git a/animated-responsive-layout/step_08/web/index.html b/animated-responsive-layout/step_08/web/index.html index bae2a10642..84d054020a 100644 --- a/animated-responsive-layout/step_08/web/index.html +++ b/animated-responsive-layout/step_08/web/index.html @@ -21,7 +21,7 @@ - + From 63f34c403ab828a84efb728558f57d59e803db49 Mon Sep 17 00:00:00 2001 From: Brett Morgan Date: Fri, 18 Oct 2024 09:53:31 +1100 Subject: [PATCH 017/108] Update `animations` for flutter beta --- animations/step_01/android/gradle.properties | 2 +- animations/step_01/linux/CMakeLists.txt | 23 +++++++++++++--- animations/step_01/linux/{runner => }/main.cc | 0 .../linux/{runner => }/my_application.cc | 6 ----- .../linux/{runner => }/my_application.h | 0 .../step_01/linux/runner/CMakeLists.txt | 26 ------------------- animations/step_01/web/index.html | 2 +- animations/step_02/android/gradle.properties | 2 +- animations/step_02/linux/CMakeLists.txt | 23 +++++++++++++--- animations/step_02/web/index.html | 2 +- animations/step_03/android/gradle.properties | 2 +- animations/step_03/linux/CMakeLists.txt | 23 +++++++++++++--- animations/step_03/web/index.html | 2 +- animations/step_04/android/gradle.properties | 2 +- animations/step_04/linux/CMakeLists.txt | 23 +++++++++++++--- animations/step_04/web/index.html | 2 +- animations/step_05/android/gradle.properties | 2 +- animations/step_05/linux/CMakeLists.txt | 23 +++++++++++++--- animations/step_05/web/index.html | 2 +- 19 files changed, 110 insertions(+), 57 deletions(-) rename animations/step_01/linux/{runner => }/main.cc (100%) rename animations/step_01/linux/{runner => }/my_application.cc (93%) rename animations/step_01/linux/{runner => }/my_application.h (100%) delete mode 100644 animations/step_01/linux/runner/CMakeLists.txt diff --git a/animations/step_01/android/gradle.properties b/animations/step_01/android/gradle.properties index f018a61817..2597170821 100644 --- a/animations/step_01/android/gradle.properties +++ b/animations/step_01/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/animations/step_01/linux/CMakeLists.txt b/animations/step_01/linux/CMakeLists.txt index 7caf822271..658be85ac5 100644 --- a/animations/step_01/linux/CMakeLists.txt +++ b/animations/step_01/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.13) +cmake_minimum_required(VERSION 3.10) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,8 +54,25 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -# Application build; see runner/CMakeLists.txt. -add_subdirectory("runner") +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Define the application target. To change its name, change BINARY_NAME above, +# not the value here, or `flutter run` will no longer work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/animations/step_01/linux/runner/main.cc b/animations/step_01/linux/main.cc similarity index 100% rename from animations/step_01/linux/runner/main.cc rename to animations/step_01/linux/main.cc diff --git a/animations/step_01/linux/runner/my_application.cc b/animations/step_01/linux/my_application.cc similarity index 93% rename from animations/step_01/linux/runner/my_application.cc rename to animations/step_01/linux/my_application.cc index 0040d7e46c..d6ea0e3c5f 100644 --- a/animations/step_01/linux/runner/my_application.cc +++ b/animations/step_01/linux/my_application.cc @@ -117,12 +117,6 @@ static void my_application_class_init(MyApplicationClass* klass) { static void my_application_init(MyApplication* self) {} MyApplication* my_application_new() { - // Set the program name to the application ID, which helps various systems - // like GTK and desktop environments map this running application to its - // corresponding .desktop file. This ensures better integration by allowing - // the application to be recognized beyond its binary name. - g_set_prgname(APPLICATION_ID); - return MY_APPLICATION(g_object_new(my_application_get_type(), "application-id", APPLICATION_ID, "flags", G_APPLICATION_NON_UNIQUE, diff --git a/animations/step_01/linux/runner/my_application.h b/animations/step_01/linux/my_application.h similarity index 100% rename from animations/step_01/linux/runner/my_application.h rename to animations/step_01/linux/my_application.h diff --git a/animations/step_01/linux/runner/CMakeLists.txt b/animations/step_01/linux/runner/CMakeLists.txt deleted file mode 100644 index e97dabc702..0000000000 --- a/animations/step_01/linux/runner/CMakeLists.txt +++ /dev/null @@ -1,26 +0,0 @@ -cmake_minimum_required(VERSION 3.13) -project(runner LANGUAGES CXX) - -# Define the application target. To change its name, change BINARY_NAME in the -# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer -# work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add preprocessor definitions for the application ID. -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) - -target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/animations/step_01/web/index.html b/animations/step_01/web/index.html index ec05768c59..89656d9a06 100644 --- a/animations/step_01/web/index.html +++ b/animations/step_01/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/animations/step_02/android/gradle.properties b/animations/step_02/android/gradle.properties index f018a61817..2597170821 100644 --- a/animations/step_02/android/gradle.properties +++ b/animations/step_02/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/animations/step_02/linux/CMakeLists.txt b/animations/step_02/linux/CMakeLists.txt index 7caf822271..658be85ac5 100644 --- a/animations/step_02/linux/CMakeLists.txt +++ b/animations/step_02/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.13) +cmake_minimum_required(VERSION 3.10) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,8 +54,25 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -# Application build; see runner/CMakeLists.txt. -add_subdirectory("runner") +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Define the application target. To change its name, change BINARY_NAME above, +# not the value here, or `flutter run` will no longer work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/animations/step_02/web/index.html b/animations/step_02/web/index.html index ec05768c59..89656d9a06 100644 --- a/animations/step_02/web/index.html +++ b/animations/step_02/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/animations/step_03/android/gradle.properties b/animations/step_03/android/gradle.properties index f018a61817..2597170821 100644 --- a/animations/step_03/android/gradle.properties +++ b/animations/step_03/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/animations/step_03/linux/CMakeLists.txt b/animations/step_03/linux/CMakeLists.txt index 7caf822271..658be85ac5 100644 --- a/animations/step_03/linux/CMakeLists.txt +++ b/animations/step_03/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.13) +cmake_minimum_required(VERSION 3.10) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,8 +54,25 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -# Application build; see runner/CMakeLists.txt. -add_subdirectory("runner") +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Define the application target. To change its name, change BINARY_NAME above, +# not the value here, or `flutter run` will no longer work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/animations/step_03/web/index.html b/animations/step_03/web/index.html index ec05768c59..89656d9a06 100644 --- a/animations/step_03/web/index.html +++ b/animations/step_03/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/animations/step_04/android/gradle.properties b/animations/step_04/android/gradle.properties index f018a61817..2597170821 100644 --- a/animations/step_04/android/gradle.properties +++ b/animations/step_04/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/animations/step_04/linux/CMakeLists.txt b/animations/step_04/linux/CMakeLists.txt index 7caf822271..658be85ac5 100644 --- a/animations/step_04/linux/CMakeLists.txt +++ b/animations/step_04/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.13) +cmake_minimum_required(VERSION 3.10) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,8 +54,25 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -# Application build; see runner/CMakeLists.txt. -add_subdirectory("runner") +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Define the application target. To change its name, change BINARY_NAME above, +# not the value here, or `flutter run` will no longer work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/animations/step_04/web/index.html b/animations/step_04/web/index.html index ec05768c59..89656d9a06 100644 --- a/animations/step_04/web/index.html +++ b/animations/step_04/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/animations/step_05/android/gradle.properties b/animations/step_05/android/gradle.properties index f018a61817..2597170821 100644 --- a/animations/step_05/android/gradle.properties +++ b/animations/step_05/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/animations/step_05/linux/CMakeLists.txt b/animations/step_05/linux/CMakeLists.txt index 7caf822271..658be85ac5 100644 --- a/animations/step_05/linux/CMakeLists.txt +++ b/animations/step_05/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.13) +cmake_minimum_required(VERSION 3.10) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,8 +54,25 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -# Application build; see runner/CMakeLists.txt. -add_subdirectory("runner") +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Define the application target. To change its name, change BINARY_NAME above, +# not the value here, or `flutter run` will no longer work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/animations/step_05/web/index.html b/animations/step_05/web/index.html index ec05768c59..89656d9a06 100644 --- a/animations/step_05/web/index.html +++ b/animations/step_05/web/index.html @@ -21,7 +21,7 @@ - + From a1e95b802faf9dedbcf2fc9168b272a7bf39c81a Mon Sep 17 00:00:00 2001 From: Brett Morgan Date: Fri, 18 Oct 2024 10:07:16 +1100 Subject: [PATCH 018/108] Update `boring_to_beautiful` for flutter beta --- .../final/android/gradle.properties | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 122 ++++++++-------- .../final/linux/CMakeLists.txt | 23 +++- .../final/linux/{runner => }/main.cc | 0 .../runner => final/linux}/my_application.cc | 6 - .../final/linux/{runner => }/my_application.h | 0 .../final/linux/runner/CMakeLists.txt | 26 ---- .../macos/Runner.xcodeproj/project.pbxproj | 100 +++++++------- boring_to_beautiful/final/web/index.html | 2 +- .../step_01/android/gradle.properties | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 122 ++++++++-------- .../step_01/linux/CMakeLists.txt | 23 +++- .../step_01/linux/{runner => }/main.cc | 0 .../linux}/my_application.cc | 6 - .../linux/{runner => }/my_application.h | 0 .../step_01/linux/runner/CMakeLists.txt | 26 ---- .../macos/Runner.xcodeproj/project.pbxproj | 100 +++++++------- boring_to_beautiful/step_01/web/index.html | 2 +- .../step_02/android/gradle.properties | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 122 ++++++++-------- .../step_02/linux/CMakeLists.txt | 23 +++- .../step_02/linux/{runner => }/main.cc | 0 .../linux}/my_application.cc | 6 - .../linux/{runner => }/my_application.h | 0 .../step_02/linux/runner/CMakeLists.txt | 26 ---- .../macos/Runner.xcodeproj/project.pbxproj | 100 +++++++------- boring_to_beautiful/step_02/web/index.html | 2 +- .../step_03/android/gradle.properties | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 122 ++++++++-------- .../step_03/linux/CMakeLists.txt | 23 +++- .../step_03/linux/{runner => }/main.cc | 0 .../linux}/my_application.cc | 6 - .../linux/{runner => }/my_application.h | 0 .../step_03/linux/runner/CMakeLists.txt | 26 ---- .../macos/Runner.xcodeproj/project.pbxproj | 100 +++++++------- boring_to_beautiful/step_03/web/index.html | 2 +- .../step_04/android/gradle.properties | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 122 ++++++++-------- .../step_04/linux/CMakeLists.txt | 23 +++- .../step_04/linux/{runner => }/main.cc | 0 .../step_04/linux/my_application.cc | 124 +++++++++++++++++ .../linux/{runner => }/my_application.h | 0 .../step_04/linux/runner/CMakeLists.txt | 26 ---- .../step_04/linux/runner/my_application.cc | 130 ------------------ .../macos/Runner.xcodeproj/project.pbxproj | 100 +++++++------- boring_to_beautiful/step_04/web/index.html | 2 +- .../step_05/android/gradle.properties | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 122 ++++++++-------- .../step_05/linux/CMakeLists.txt | 23 +++- .../step_05/linux/{runner => }/main.cc | 0 .../step_05/linux/my_application.cc | 124 +++++++++++++++++ .../linux/{runner => }/my_application.h | 0 .../step_05/linux/runner/CMakeLists.txt | 26 ---- .../step_05/linux/runner/my_application.cc | 130 ------------------ .../macos/Runner.xcodeproj/project.pbxproj | 100 +++++++------- boring_to_beautiful/step_05/web/index.html | 2 +- .../step_06/android/gradle.properties | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 122 ++++++++-------- .../step_06/linux/CMakeLists.txt | 23 +++- .../step_06/linux/{runner => }/main.cc | 0 .../step_06/linux/my_application.cc | 124 +++++++++++++++++ .../linux/{runner => }/my_application.h | 0 .../step_06/linux/runner/CMakeLists.txt | 26 ---- .../step_06/linux/runner/my_application.cc | 130 ------------------ .../macos/Runner.xcodeproj/project.pbxproj | 100 +++++++------- boring_to_beautiful/step_06/web/index.html | 2 +- .../step_07/android/gradle.properties | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 122 ++++++++-------- .../step_07/linux/CMakeLists.txt | 23 +++- .../step_07/linux/{runner => }/main.cc | 0 .../step_07/linux/my_application.cc | 124 +++++++++++++++++ .../linux/{runner => }/my_application.h | 0 .../step_07/linux/runner/CMakeLists.txt | 26 ---- .../step_07/linux/runner/my_application.cc | 130 ------------------ .../macos/Runner.xcodeproj/project.pbxproj | 100 +++++++------- boring_to_beautiful/step_07/web/index.html | 2 +- 76 files changed, 1560 insertions(+), 1680 deletions(-) rename boring_to_beautiful/final/linux/{runner => }/main.cc (100%) rename boring_to_beautiful/{step_02/linux/runner => final/linux}/my_application.cc (93%) rename boring_to_beautiful/final/linux/{runner => }/my_application.h (100%) delete mode 100644 boring_to_beautiful/final/linux/runner/CMakeLists.txt rename boring_to_beautiful/step_01/linux/{runner => }/main.cc (100%) rename boring_to_beautiful/{final/linux/runner => step_01/linux}/my_application.cc (93%) rename boring_to_beautiful/step_01/linux/{runner => }/my_application.h (100%) delete mode 100644 boring_to_beautiful/step_01/linux/runner/CMakeLists.txt rename boring_to_beautiful/step_02/linux/{runner => }/main.cc (100%) rename boring_to_beautiful/{step_03/linux/runner => step_02/linux}/my_application.cc (93%) rename boring_to_beautiful/step_02/linux/{runner => }/my_application.h (100%) delete mode 100644 boring_to_beautiful/step_02/linux/runner/CMakeLists.txt rename boring_to_beautiful/step_03/linux/{runner => }/main.cc (100%) rename boring_to_beautiful/{step_01/linux/runner => step_03/linux}/my_application.cc (93%) rename boring_to_beautiful/step_03/linux/{runner => }/my_application.h (100%) delete mode 100644 boring_to_beautiful/step_03/linux/runner/CMakeLists.txt rename boring_to_beautiful/step_04/linux/{runner => }/main.cc (100%) create mode 100644 boring_to_beautiful/step_04/linux/my_application.cc rename boring_to_beautiful/step_04/linux/{runner => }/my_application.h (100%) delete mode 100644 boring_to_beautiful/step_04/linux/runner/CMakeLists.txt delete mode 100644 boring_to_beautiful/step_04/linux/runner/my_application.cc rename boring_to_beautiful/step_05/linux/{runner => }/main.cc (100%) create mode 100644 boring_to_beautiful/step_05/linux/my_application.cc rename boring_to_beautiful/step_05/linux/{runner => }/my_application.h (100%) delete mode 100644 boring_to_beautiful/step_05/linux/runner/CMakeLists.txt delete mode 100644 boring_to_beautiful/step_05/linux/runner/my_application.cc rename boring_to_beautiful/step_06/linux/{runner => }/main.cc (100%) create mode 100644 boring_to_beautiful/step_06/linux/my_application.cc rename boring_to_beautiful/step_06/linux/{runner => }/my_application.h (100%) delete mode 100644 boring_to_beautiful/step_06/linux/runner/CMakeLists.txt delete mode 100644 boring_to_beautiful/step_06/linux/runner/my_application.cc rename boring_to_beautiful/step_07/linux/{runner => }/main.cc (100%) create mode 100644 boring_to_beautiful/step_07/linux/my_application.cc rename boring_to_beautiful/step_07/linux/{runner => }/my_application.h (100%) delete mode 100644 boring_to_beautiful/step_07/linux/runner/CMakeLists.txt delete mode 100644 boring_to_beautiful/step_07/linux/runner/my_application.cc diff --git a/boring_to_beautiful/final/android/gradle.properties b/boring_to_beautiful/final/android/gradle.properties index f018a61817..2597170821 100644 --- a/boring_to_beautiful/final/android/gradle.properties +++ b/boring_to_beautiful/final/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/boring_to_beautiful/final/ios/Runner.xcodeproj/project.pbxproj b/boring_to_beautiful/final/ios/Runner.xcodeproj/project.pbxproj index 27188f1a29..d33a503139 100644 --- a/boring_to_beautiful/final/ios/Runner.xcodeproj/project.pbxproj +++ b/boring_to_beautiful/final/ios/Runner.xcodeproj/project.pbxproj @@ -8,14 +8,14 @@ /* Begin PBXBuildFile section */ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; - 208962B53868BF2AFCDAD8E7 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 32C8ACDFE0B7706E1D63C8FC /* Pods_Runner.framework */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; + 49381EA0685B1F13BE864379 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CB41BC21C7A12C73E18A4BD4 /* Pods_RunnerTests.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - A4B9B73FBC1F47ACF4A1C4A0 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F27A303A186C2A0809FCFE71 /* Pods_RunnerTests.framework */; }; + C0064E05A4506D109FC14284 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FF179308D1EFBD41B1CD1303 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,16 +42,16 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 028B86D9E5D62F1DCB40F65B /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 0F5809B4F9F50DCE58AED982 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 32C8ACDFE0B7706E1D63C8FC /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 1EC93CE997E0EDD54CB41295 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 44AD5815711D9A48D9B79930 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - 4E2630CD278C99A068304BFF /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 458F284D4389ADAFFD7FBAA5 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 46ED109558BB0B52911CEDF2 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 507F761A690329C8C75A65E2 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 57AE46D9D874FE5FFBB3E047 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; @@ -62,25 +62,25 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - AAD1FCD230C27D91828B1C7E /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - B521B76D1194933A83E8CA4F /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - F27A303A186C2A0809FCFE71 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + AA54CE87B515BC3531FEEF48 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + CB41BC21C7A12C73E18A4BD4 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + FF179308D1EFBD41B1CD1303 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 97C146EB1CF9000F007C117D /* Frameworks */ = { + 515422840D633F6AC1588AC7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 208962B53868BF2AFCDAD8E7 /* Pods_Runner.framework in Frameworks */, + 49381EA0685B1F13BE864379 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - F1EB1A38D8D843224D93C592 /* Frameworks */ = { + 97C146EB1CF9000F007C117D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - A4B9B73FBC1F47ACF4A1C4A0 /* Pods_RunnerTests.framework in Frameworks */, + C0064E05A4506D109FC14284 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -95,11 +95,11 @@ path = RunnerTests; sourceTree = ""; }; - 4F504FD1A7DEAA11371FD812 /* Frameworks */ = { + 760CB6645FC65AE3E9230AD2 /* Frameworks */ = { isa = PBXGroup; children = ( - 32C8ACDFE0B7706E1D63C8FC /* Pods_Runner.framework */, - F27A303A186C2A0809FCFE71 /* Pods_RunnerTests.framework */, + FF179308D1EFBD41B1CD1303 /* Pods_Runner.framework */, + CB41BC21C7A12C73E18A4BD4 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -122,8 +122,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - EEC228E83A67A67530E39534 /* Pods */, - 4F504FD1A7DEAA11371FD812 /* Frameworks */, + BD60B01F7CC3F37BDE902B8C /* Pods */, + 760CB6645FC65AE3E9230AD2 /* Frameworks */, ); sourceTree = ""; }; @@ -151,15 +151,15 @@ path = Runner; sourceTree = ""; }; - EEC228E83A67A67530E39534 /* Pods */ = { + BD60B01F7CC3F37BDE902B8C /* Pods */ = { isa = PBXGroup; children = ( - 4E2630CD278C99A068304BFF /* Pods-Runner.debug.xcconfig */, - B521B76D1194933A83E8CA4F /* Pods-Runner.release.xcconfig */, - AAD1FCD230C27D91828B1C7E /* Pods-Runner.profile.xcconfig */, - 028B86D9E5D62F1DCB40F65B /* Pods-RunnerTests.debug.xcconfig */, - 44AD5815711D9A48D9B79930 /* Pods-RunnerTests.release.xcconfig */, - 0F5809B4F9F50DCE58AED982 /* Pods-RunnerTests.profile.xcconfig */, + 507F761A690329C8C75A65E2 /* Pods-Runner.debug.xcconfig */, + 458F284D4389ADAFFD7FBAA5 /* Pods-Runner.release.xcconfig */, + 46ED109558BB0B52911CEDF2 /* Pods-Runner.profile.xcconfig */, + AA54CE87B515BC3531FEEF48 /* Pods-RunnerTests.debug.xcconfig */, + 57AE46D9D874FE5FFBB3E047 /* Pods-RunnerTests.release.xcconfig */, + 1EC93CE997E0EDD54CB41295 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 0033FF9EDA59710A08D92356 /* [CP] Check Pods Manifest.lock */, + D56C93D4DD0C64DF97BCE97D /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - F1EB1A38D8D843224D93C592 /* Frameworks */, + 515422840D633F6AC1588AC7 /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 61E108675EDD4B5F14470A53 /* [CP] Check Pods Manifest.lock */, + 41BD58AF92D87F35673F336C /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 988934BE9015DDB2BD2671E2 /* [CP] Embed Pods Frameworks */, + 4BF732A76041B0DBA38F7214 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -270,28 +270,6 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 0033FF9EDA59710A08D92356 /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -308,7 +286,7 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 61E108675EDD4B5F14470A53 /* [CP] Check Pods Manifest.lock */ = { + 41BD58AF92D87F35673F336C /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -330,6 +308,23 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; + 4BF732A76041B0DBA38F7214 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -345,21 +340,26 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - 988934BE9015DDB2BD2671E2 /* [CP] Embed Pods Frameworks */ = { + D56C93D4DD0C64DF97BCE97D /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 028B86D9E5D62F1DCB40F65B /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = AA54CE87B515BC3531FEEF48 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 44AD5815711D9A48D9B79930 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 57AE46D9D874FE5FFBB3E047 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 0F5809B4F9F50DCE58AED982 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 1EC93CE997E0EDD54CB41295 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/boring_to_beautiful/final/linux/CMakeLists.txt b/boring_to_beautiful/final/linux/CMakeLists.txt index 0565f6a409..74a8344fa9 100644 --- a/boring_to_beautiful/final/linux/CMakeLists.txt +++ b/boring_to_beautiful/final/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.13) +cmake_minimum_required(VERSION 3.10) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,8 +54,25 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -# Application build; see runner/CMakeLists.txt. -add_subdirectory("runner") +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Define the application target. To change its name, change BINARY_NAME above, +# not the value here, or `flutter run` will no longer work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/boring_to_beautiful/final/linux/runner/main.cc b/boring_to_beautiful/final/linux/main.cc similarity index 100% rename from boring_to_beautiful/final/linux/runner/main.cc rename to boring_to_beautiful/final/linux/main.cc diff --git a/boring_to_beautiful/step_02/linux/runner/my_application.cc b/boring_to_beautiful/final/linux/my_application.cc similarity index 93% rename from boring_to_beautiful/step_02/linux/runner/my_application.cc rename to boring_to_beautiful/final/linux/my_application.cc index f93ba9f71c..59e1394236 100644 --- a/boring_to_beautiful/step_02/linux/runner/my_application.cc +++ b/boring_to_beautiful/final/linux/my_application.cc @@ -117,12 +117,6 @@ static void my_application_class_init(MyApplicationClass* klass) { static void my_application_init(MyApplication* self) {} MyApplication* my_application_new() { - // Set the program name to the application ID, which helps various systems - // like GTK and desktop environments map this running application to its - // corresponding .desktop file. This ensures better integration by allowing - // the application to be recognized beyond its binary name. - g_set_prgname(APPLICATION_ID); - return MY_APPLICATION(g_object_new(my_application_get_type(), "application-id", APPLICATION_ID, "flags", G_APPLICATION_NON_UNIQUE, diff --git a/boring_to_beautiful/final/linux/runner/my_application.h b/boring_to_beautiful/final/linux/my_application.h similarity index 100% rename from boring_to_beautiful/final/linux/runner/my_application.h rename to boring_to_beautiful/final/linux/my_application.h diff --git a/boring_to_beautiful/final/linux/runner/CMakeLists.txt b/boring_to_beautiful/final/linux/runner/CMakeLists.txt deleted file mode 100644 index e97dabc702..0000000000 --- a/boring_to_beautiful/final/linux/runner/CMakeLists.txt +++ /dev/null @@ -1,26 +0,0 @@ -cmake_minimum_required(VERSION 3.13) -project(runner LANGUAGES CXX) - -# Define the application target. To change its name, change BINARY_NAME in the -# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer -# work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add preprocessor definitions for the application ID. -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) - -target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/boring_to_beautiful/final/macos/Runner.xcodeproj/project.pbxproj b/boring_to_beautiful/final/macos/Runner.xcodeproj/project.pbxproj index a4ba51afb5..11e7ec7971 100644 --- a/boring_to_beautiful/final/macos/Runner.xcodeproj/project.pbxproj +++ b/boring_to_beautiful/final/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ + 122A14BB17CAE5827A96C600 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E721C61EEA1D01D1541205E2 /* Pods_RunnerTests.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 4199224406A25A7474E0C79E /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 36423EA0CDE5981423B48AEE /* Pods_Runner.framework */; }; - 91BCC9003B49CC98CECBF0EC /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B80D78B7F0831CA886CFE751 /* Pods_RunnerTests.framework */; }; + C0A311100478C3723AF3A1A3 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2B7F6D65CBE030418F0F8AFE /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,7 +62,10 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 25E382F5DE97D2D47426B59B /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 095235CA8E3718CE04BECCFD /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 1965E0AFE652202B66FE3359 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 2B7F6D65CBE030418F0F8AFE /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 2BE96204F8153212C1B2FFD5 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -79,15 +82,12 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 36423EA0CDE5981423B48AEE /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 59981915FE452EAD0B851E3D /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 92320B2EDC5B05B44B5CC56F /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - A0563A63B8D8D2BB44A67D02 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - B80D78B7F0831CA886CFE751 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - E881F22E1ED9CF3723A13CEC /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - F1D90A111512887B7981FE7C /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + B1C9C34FAF086E24D95B4FE5 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + B2992FC7568D7321F2EE4E8A /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + DA0493143D84740D445AC807 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + E721C61EEA1D01D1541205E2 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 91BCC9003B49CC98CECBF0EC /* Pods_RunnerTests.framework in Frameworks */, + 122A14BB17CAE5827A96C600 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,13 +103,27 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 4199224406A25A7474E0C79E /* Pods_Runner.framework in Frameworks */, + C0A311100478C3723AF3A1A3 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 1B3BB2FE7EC0BD319E6A18A5 /* Pods */ = { + isa = PBXGroup; + children = ( + B1C9C34FAF086E24D95B4FE5 /* Pods-Runner.debug.xcconfig */, + B2992FC7568D7321F2EE4E8A /* Pods-Runner.release.xcconfig */, + DA0493143D84740D445AC807 /* Pods-Runner.profile.xcconfig */, + 2BE96204F8153212C1B2FFD5 /* Pods-RunnerTests.debug.xcconfig */, + 095235CA8E3718CE04BECCFD /* Pods-RunnerTests.release.xcconfig */, + 1965E0AFE652202B66FE3359 /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; 331C80D6294CF71000263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -137,7 +151,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 7F3DCCA95ED45892CA7CC729 /* Pods */, + 1B3BB2FE7EC0BD319E6A18A5 /* Pods */, ); sourceTree = ""; }; @@ -185,25 +199,11 @@ path = Runner; sourceTree = ""; }; - 7F3DCCA95ED45892CA7CC729 /* Pods */ = { - isa = PBXGroup; - children = ( - A0563A63B8D8D2BB44A67D02 /* Pods-Runner.debug.xcconfig */, - 92320B2EDC5B05B44B5CC56F /* Pods-Runner.release.xcconfig */, - 59981915FE452EAD0B851E3D /* Pods-Runner.profile.xcconfig */, - E881F22E1ED9CF3723A13CEC /* Pods-RunnerTests.debug.xcconfig */, - F1D90A111512887B7981FE7C /* Pods-RunnerTests.release.xcconfig */, - 25E382F5DE97D2D47426B59B /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - 36423EA0CDE5981423B48AEE /* Pods_Runner.framework */, - B80D78B7F0831CA886CFE751 /* Pods_RunnerTests.framework */, + 2B7F6D65CBE030418F0F8AFE /* Pods_Runner.framework */, + E721C61EEA1D01D1541205E2 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - ABDEED064F2EE34AC0D864AE /* [CP] Check Pods Manifest.lock */, + 8BBDD854D9E775DA9D2E29E7 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - B9E6980CAE17BFE6BF2A9555 /* [CP] Check Pods Manifest.lock */, + 8D3EC8A5A25E8C0969226ECA /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 031FA17996CC4882D4AF14D9 /* [CP] Embed Pods Frameworks */, + 33B24C690BD4B02DCC978698 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,40 +323,40 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 031FA17996CC4882D4AF14D9 /* [CP] Embed Pods Frameworks */ = { + 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + ); outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; + shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; }; - 3399D490228B24CF009A79C7 /* ShellScript */ = { + 33B24C690BD4B02DCC978698 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - ); + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; }; 33CC111E2044C6BF0003C045 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; @@ -378,7 +378,7 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - ABDEED064F2EE34AC0D864AE /* [CP] Check Pods Manifest.lock */ = { + 8BBDD854D9E775DA9D2E29E7 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -400,7 +400,7 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - B9E6980CAE17BFE6BF2A9555 /* [CP] Check Pods Manifest.lock */ = { + 8D3EC8A5A25E8C0969226ECA /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = E881F22E1ED9CF3723A13CEC /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 2BE96204F8153212C1B2FFD5 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = F1D90A111512887B7981FE7C /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 095235CA8E3718CE04BECCFD /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 25E382F5DE97D2D47426B59B /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 1965E0AFE652202B66FE3359 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/boring_to_beautiful/final/web/index.html b/boring_to_beautiful/final/web/index.html index e0a0abbbbf..0a8bd1ab80 100644 --- a/boring_to_beautiful/final/web/index.html +++ b/boring_to_beautiful/final/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/boring_to_beautiful/step_01/android/gradle.properties b/boring_to_beautiful/step_01/android/gradle.properties index f018a61817..2597170821 100644 --- a/boring_to_beautiful/step_01/android/gradle.properties +++ b/boring_to_beautiful/step_01/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/boring_to_beautiful/step_01/ios/Runner.xcodeproj/project.pbxproj b/boring_to_beautiful/step_01/ios/Runner.xcodeproj/project.pbxproj index 27188f1a29..d33a503139 100644 --- a/boring_to_beautiful/step_01/ios/Runner.xcodeproj/project.pbxproj +++ b/boring_to_beautiful/step_01/ios/Runner.xcodeproj/project.pbxproj @@ -8,14 +8,14 @@ /* Begin PBXBuildFile section */ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; - 208962B53868BF2AFCDAD8E7 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 32C8ACDFE0B7706E1D63C8FC /* Pods_Runner.framework */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; + 49381EA0685B1F13BE864379 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CB41BC21C7A12C73E18A4BD4 /* Pods_RunnerTests.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - A4B9B73FBC1F47ACF4A1C4A0 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F27A303A186C2A0809FCFE71 /* Pods_RunnerTests.framework */; }; + C0064E05A4506D109FC14284 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FF179308D1EFBD41B1CD1303 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,16 +42,16 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 028B86D9E5D62F1DCB40F65B /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 0F5809B4F9F50DCE58AED982 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 32C8ACDFE0B7706E1D63C8FC /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 1EC93CE997E0EDD54CB41295 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 44AD5815711D9A48D9B79930 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - 4E2630CD278C99A068304BFF /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 458F284D4389ADAFFD7FBAA5 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 46ED109558BB0B52911CEDF2 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 507F761A690329C8C75A65E2 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 57AE46D9D874FE5FFBB3E047 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; @@ -62,25 +62,25 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - AAD1FCD230C27D91828B1C7E /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - B521B76D1194933A83E8CA4F /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - F27A303A186C2A0809FCFE71 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + AA54CE87B515BC3531FEEF48 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + CB41BC21C7A12C73E18A4BD4 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + FF179308D1EFBD41B1CD1303 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 97C146EB1CF9000F007C117D /* Frameworks */ = { + 515422840D633F6AC1588AC7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 208962B53868BF2AFCDAD8E7 /* Pods_Runner.framework in Frameworks */, + 49381EA0685B1F13BE864379 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - F1EB1A38D8D843224D93C592 /* Frameworks */ = { + 97C146EB1CF9000F007C117D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - A4B9B73FBC1F47ACF4A1C4A0 /* Pods_RunnerTests.framework in Frameworks */, + C0064E05A4506D109FC14284 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -95,11 +95,11 @@ path = RunnerTests; sourceTree = ""; }; - 4F504FD1A7DEAA11371FD812 /* Frameworks */ = { + 760CB6645FC65AE3E9230AD2 /* Frameworks */ = { isa = PBXGroup; children = ( - 32C8ACDFE0B7706E1D63C8FC /* Pods_Runner.framework */, - F27A303A186C2A0809FCFE71 /* Pods_RunnerTests.framework */, + FF179308D1EFBD41B1CD1303 /* Pods_Runner.framework */, + CB41BC21C7A12C73E18A4BD4 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -122,8 +122,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - EEC228E83A67A67530E39534 /* Pods */, - 4F504FD1A7DEAA11371FD812 /* Frameworks */, + BD60B01F7CC3F37BDE902B8C /* Pods */, + 760CB6645FC65AE3E9230AD2 /* Frameworks */, ); sourceTree = ""; }; @@ -151,15 +151,15 @@ path = Runner; sourceTree = ""; }; - EEC228E83A67A67530E39534 /* Pods */ = { + BD60B01F7CC3F37BDE902B8C /* Pods */ = { isa = PBXGroup; children = ( - 4E2630CD278C99A068304BFF /* Pods-Runner.debug.xcconfig */, - B521B76D1194933A83E8CA4F /* Pods-Runner.release.xcconfig */, - AAD1FCD230C27D91828B1C7E /* Pods-Runner.profile.xcconfig */, - 028B86D9E5D62F1DCB40F65B /* Pods-RunnerTests.debug.xcconfig */, - 44AD5815711D9A48D9B79930 /* Pods-RunnerTests.release.xcconfig */, - 0F5809B4F9F50DCE58AED982 /* Pods-RunnerTests.profile.xcconfig */, + 507F761A690329C8C75A65E2 /* Pods-Runner.debug.xcconfig */, + 458F284D4389ADAFFD7FBAA5 /* Pods-Runner.release.xcconfig */, + 46ED109558BB0B52911CEDF2 /* Pods-Runner.profile.xcconfig */, + AA54CE87B515BC3531FEEF48 /* Pods-RunnerTests.debug.xcconfig */, + 57AE46D9D874FE5FFBB3E047 /* Pods-RunnerTests.release.xcconfig */, + 1EC93CE997E0EDD54CB41295 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 0033FF9EDA59710A08D92356 /* [CP] Check Pods Manifest.lock */, + D56C93D4DD0C64DF97BCE97D /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - F1EB1A38D8D843224D93C592 /* Frameworks */, + 515422840D633F6AC1588AC7 /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 61E108675EDD4B5F14470A53 /* [CP] Check Pods Manifest.lock */, + 41BD58AF92D87F35673F336C /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 988934BE9015DDB2BD2671E2 /* [CP] Embed Pods Frameworks */, + 4BF732A76041B0DBA38F7214 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -270,28 +270,6 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 0033FF9EDA59710A08D92356 /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -308,7 +286,7 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 61E108675EDD4B5F14470A53 /* [CP] Check Pods Manifest.lock */ = { + 41BD58AF92D87F35673F336C /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -330,6 +308,23 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; + 4BF732A76041B0DBA38F7214 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -345,21 +340,26 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - 988934BE9015DDB2BD2671E2 /* [CP] Embed Pods Frameworks */ = { + D56C93D4DD0C64DF97BCE97D /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 028B86D9E5D62F1DCB40F65B /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = AA54CE87B515BC3531FEEF48 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 44AD5815711D9A48D9B79930 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 57AE46D9D874FE5FFBB3E047 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 0F5809B4F9F50DCE58AED982 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 1EC93CE997E0EDD54CB41295 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/boring_to_beautiful/step_01/linux/CMakeLists.txt b/boring_to_beautiful/step_01/linux/CMakeLists.txt index 0565f6a409..74a8344fa9 100644 --- a/boring_to_beautiful/step_01/linux/CMakeLists.txt +++ b/boring_to_beautiful/step_01/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.13) +cmake_minimum_required(VERSION 3.10) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,8 +54,25 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -# Application build; see runner/CMakeLists.txt. -add_subdirectory("runner") +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Define the application target. To change its name, change BINARY_NAME above, +# not the value here, or `flutter run` will no longer work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/boring_to_beautiful/step_01/linux/runner/main.cc b/boring_to_beautiful/step_01/linux/main.cc similarity index 100% rename from boring_to_beautiful/step_01/linux/runner/main.cc rename to boring_to_beautiful/step_01/linux/main.cc diff --git a/boring_to_beautiful/final/linux/runner/my_application.cc b/boring_to_beautiful/step_01/linux/my_application.cc similarity index 93% rename from boring_to_beautiful/final/linux/runner/my_application.cc rename to boring_to_beautiful/step_01/linux/my_application.cc index f93ba9f71c..59e1394236 100644 --- a/boring_to_beautiful/final/linux/runner/my_application.cc +++ b/boring_to_beautiful/step_01/linux/my_application.cc @@ -117,12 +117,6 @@ static void my_application_class_init(MyApplicationClass* klass) { static void my_application_init(MyApplication* self) {} MyApplication* my_application_new() { - // Set the program name to the application ID, which helps various systems - // like GTK and desktop environments map this running application to its - // corresponding .desktop file. This ensures better integration by allowing - // the application to be recognized beyond its binary name. - g_set_prgname(APPLICATION_ID); - return MY_APPLICATION(g_object_new(my_application_get_type(), "application-id", APPLICATION_ID, "flags", G_APPLICATION_NON_UNIQUE, diff --git a/boring_to_beautiful/step_01/linux/runner/my_application.h b/boring_to_beautiful/step_01/linux/my_application.h similarity index 100% rename from boring_to_beautiful/step_01/linux/runner/my_application.h rename to boring_to_beautiful/step_01/linux/my_application.h diff --git a/boring_to_beautiful/step_01/linux/runner/CMakeLists.txt b/boring_to_beautiful/step_01/linux/runner/CMakeLists.txt deleted file mode 100644 index e97dabc702..0000000000 --- a/boring_to_beautiful/step_01/linux/runner/CMakeLists.txt +++ /dev/null @@ -1,26 +0,0 @@ -cmake_minimum_required(VERSION 3.13) -project(runner LANGUAGES CXX) - -# Define the application target. To change its name, change BINARY_NAME in the -# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer -# work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add preprocessor definitions for the application ID. -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) - -target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/boring_to_beautiful/step_01/macos/Runner.xcodeproj/project.pbxproj b/boring_to_beautiful/step_01/macos/Runner.xcodeproj/project.pbxproj index a4ba51afb5..11e7ec7971 100644 --- a/boring_to_beautiful/step_01/macos/Runner.xcodeproj/project.pbxproj +++ b/boring_to_beautiful/step_01/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ + 122A14BB17CAE5827A96C600 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E721C61EEA1D01D1541205E2 /* Pods_RunnerTests.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 4199224406A25A7474E0C79E /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 36423EA0CDE5981423B48AEE /* Pods_Runner.framework */; }; - 91BCC9003B49CC98CECBF0EC /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B80D78B7F0831CA886CFE751 /* Pods_RunnerTests.framework */; }; + C0A311100478C3723AF3A1A3 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2B7F6D65CBE030418F0F8AFE /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,7 +62,10 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 25E382F5DE97D2D47426B59B /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 095235CA8E3718CE04BECCFD /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 1965E0AFE652202B66FE3359 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 2B7F6D65CBE030418F0F8AFE /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 2BE96204F8153212C1B2FFD5 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -79,15 +82,12 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 36423EA0CDE5981423B48AEE /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 59981915FE452EAD0B851E3D /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 92320B2EDC5B05B44B5CC56F /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - A0563A63B8D8D2BB44A67D02 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - B80D78B7F0831CA886CFE751 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - E881F22E1ED9CF3723A13CEC /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - F1D90A111512887B7981FE7C /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + B1C9C34FAF086E24D95B4FE5 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + B2992FC7568D7321F2EE4E8A /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + DA0493143D84740D445AC807 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + E721C61EEA1D01D1541205E2 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 91BCC9003B49CC98CECBF0EC /* Pods_RunnerTests.framework in Frameworks */, + 122A14BB17CAE5827A96C600 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,13 +103,27 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 4199224406A25A7474E0C79E /* Pods_Runner.framework in Frameworks */, + C0A311100478C3723AF3A1A3 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 1B3BB2FE7EC0BD319E6A18A5 /* Pods */ = { + isa = PBXGroup; + children = ( + B1C9C34FAF086E24D95B4FE5 /* Pods-Runner.debug.xcconfig */, + B2992FC7568D7321F2EE4E8A /* Pods-Runner.release.xcconfig */, + DA0493143D84740D445AC807 /* Pods-Runner.profile.xcconfig */, + 2BE96204F8153212C1B2FFD5 /* Pods-RunnerTests.debug.xcconfig */, + 095235CA8E3718CE04BECCFD /* Pods-RunnerTests.release.xcconfig */, + 1965E0AFE652202B66FE3359 /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; 331C80D6294CF71000263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -137,7 +151,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 7F3DCCA95ED45892CA7CC729 /* Pods */, + 1B3BB2FE7EC0BD319E6A18A5 /* Pods */, ); sourceTree = ""; }; @@ -185,25 +199,11 @@ path = Runner; sourceTree = ""; }; - 7F3DCCA95ED45892CA7CC729 /* Pods */ = { - isa = PBXGroup; - children = ( - A0563A63B8D8D2BB44A67D02 /* Pods-Runner.debug.xcconfig */, - 92320B2EDC5B05B44B5CC56F /* Pods-Runner.release.xcconfig */, - 59981915FE452EAD0B851E3D /* Pods-Runner.profile.xcconfig */, - E881F22E1ED9CF3723A13CEC /* Pods-RunnerTests.debug.xcconfig */, - F1D90A111512887B7981FE7C /* Pods-RunnerTests.release.xcconfig */, - 25E382F5DE97D2D47426B59B /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - 36423EA0CDE5981423B48AEE /* Pods_Runner.framework */, - B80D78B7F0831CA886CFE751 /* Pods_RunnerTests.framework */, + 2B7F6D65CBE030418F0F8AFE /* Pods_Runner.framework */, + E721C61EEA1D01D1541205E2 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - ABDEED064F2EE34AC0D864AE /* [CP] Check Pods Manifest.lock */, + 8BBDD854D9E775DA9D2E29E7 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - B9E6980CAE17BFE6BF2A9555 /* [CP] Check Pods Manifest.lock */, + 8D3EC8A5A25E8C0969226ECA /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 031FA17996CC4882D4AF14D9 /* [CP] Embed Pods Frameworks */, + 33B24C690BD4B02DCC978698 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,40 +323,40 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 031FA17996CC4882D4AF14D9 /* [CP] Embed Pods Frameworks */ = { + 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + ); outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; + shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; }; - 3399D490228B24CF009A79C7 /* ShellScript */ = { + 33B24C690BD4B02DCC978698 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - ); + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; }; 33CC111E2044C6BF0003C045 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; @@ -378,7 +378,7 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - ABDEED064F2EE34AC0D864AE /* [CP] Check Pods Manifest.lock */ = { + 8BBDD854D9E775DA9D2E29E7 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -400,7 +400,7 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - B9E6980CAE17BFE6BF2A9555 /* [CP] Check Pods Manifest.lock */ = { + 8D3EC8A5A25E8C0969226ECA /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = E881F22E1ED9CF3723A13CEC /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 2BE96204F8153212C1B2FFD5 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = F1D90A111512887B7981FE7C /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 095235CA8E3718CE04BECCFD /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 25E382F5DE97D2D47426B59B /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 1965E0AFE652202B66FE3359 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/boring_to_beautiful/step_01/web/index.html b/boring_to_beautiful/step_01/web/index.html index e0a0abbbbf..0a8bd1ab80 100644 --- a/boring_to_beautiful/step_01/web/index.html +++ b/boring_to_beautiful/step_01/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/boring_to_beautiful/step_02/android/gradle.properties b/boring_to_beautiful/step_02/android/gradle.properties index f018a61817..2597170821 100644 --- a/boring_to_beautiful/step_02/android/gradle.properties +++ b/boring_to_beautiful/step_02/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/boring_to_beautiful/step_02/ios/Runner.xcodeproj/project.pbxproj b/boring_to_beautiful/step_02/ios/Runner.xcodeproj/project.pbxproj index 27188f1a29..d33a503139 100644 --- a/boring_to_beautiful/step_02/ios/Runner.xcodeproj/project.pbxproj +++ b/boring_to_beautiful/step_02/ios/Runner.xcodeproj/project.pbxproj @@ -8,14 +8,14 @@ /* Begin PBXBuildFile section */ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; - 208962B53868BF2AFCDAD8E7 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 32C8ACDFE0B7706E1D63C8FC /* Pods_Runner.framework */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; + 49381EA0685B1F13BE864379 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CB41BC21C7A12C73E18A4BD4 /* Pods_RunnerTests.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - A4B9B73FBC1F47ACF4A1C4A0 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F27A303A186C2A0809FCFE71 /* Pods_RunnerTests.framework */; }; + C0064E05A4506D109FC14284 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FF179308D1EFBD41B1CD1303 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,16 +42,16 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 028B86D9E5D62F1DCB40F65B /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 0F5809B4F9F50DCE58AED982 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 32C8ACDFE0B7706E1D63C8FC /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 1EC93CE997E0EDD54CB41295 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 44AD5815711D9A48D9B79930 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - 4E2630CD278C99A068304BFF /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 458F284D4389ADAFFD7FBAA5 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 46ED109558BB0B52911CEDF2 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 507F761A690329C8C75A65E2 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 57AE46D9D874FE5FFBB3E047 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; @@ -62,25 +62,25 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - AAD1FCD230C27D91828B1C7E /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - B521B76D1194933A83E8CA4F /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - F27A303A186C2A0809FCFE71 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + AA54CE87B515BC3531FEEF48 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + CB41BC21C7A12C73E18A4BD4 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + FF179308D1EFBD41B1CD1303 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 97C146EB1CF9000F007C117D /* Frameworks */ = { + 515422840D633F6AC1588AC7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 208962B53868BF2AFCDAD8E7 /* Pods_Runner.framework in Frameworks */, + 49381EA0685B1F13BE864379 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - F1EB1A38D8D843224D93C592 /* Frameworks */ = { + 97C146EB1CF9000F007C117D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - A4B9B73FBC1F47ACF4A1C4A0 /* Pods_RunnerTests.framework in Frameworks */, + C0064E05A4506D109FC14284 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -95,11 +95,11 @@ path = RunnerTests; sourceTree = ""; }; - 4F504FD1A7DEAA11371FD812 /* Frameworks */ = { + 760CB6645FC65AE3E9230AD2 /* Frameworks */ = { isa = PBXGroup; children = ( - 32C8ACDFE0B7706E1D63C8FC /* Pods_Runner.framework */, - F27A303A186C2A0809FCFE71 /* Pods_RunnerTests.framework */, + FF179308D1EFBD41B1CD1303 /* Pods_Runner.framework */, + CB41BC21C7A12C73E18A4BD4 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -122,8 +122,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - EEC228E83A67A67530E39534 /* Pods */, - 4F504FD1A7DEAA11371FD812 /* Frameworks */, + BD60B01F7CC3F37BDE902B8C /* Pods */, + 760CB6645FC65AE3E9230AD2 /* Frameworks */, ); sourceTree = ""; }; @@ -151,15 +151,15 @@ path = Runner; sourceTree = ""; }; - EEC228E83A67A67530E39534 /* Pods */ = { + BD60B01F7CC3F37BDE902B8C /* Pods */ = { isa = PBXGroup; children = ( - 4E2630CD278C99A068304BFF /* Pods-Runner.debug.xcconfig */, - B521B76D1194933A83E8CA4F /* Pods-Runner.release.xcconfig */, - AAD1FCD230C27D91828B1C7E /* Pods-Runner.profile.xcconfig */, - 028B86D9E5D62F1DCB40F65B /* Pods-RunnerTests.debug.xcconfig */, - 44AD5815711D9A48D9B79930 /* Pods-RunnerTests.release.xcconfig */, - 0F5809B4F9F50DCE58AED982 /* Pods-RunnerTests.profile.xcconfig */, + 507F761A690329C8C75A65E2 /* Pods-Runner.debug.xcconfig */, + 458F284D4389ADAFFD7FBAA5 /* Pods-Runner.release.xcconfig */, + 46ED109558BB0B52911CEDF2 /* Pods-Runner.profile.xcconfig */, + AA54CE87B515BC3531FEEF48 /* Pods-RunnerTests.debug.xcconfig */, + 57AE46D9D874FE5FFBB3E047 /* Pods-RunnerTests.release.xcconfig */, + 1EC93CE997E0EDD54CB41295 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 0033FF9EDA59710A08D92356 /* [CP] Check Pods Manifest.lock */, + D56C93D4DD0C64DF97BCE97D /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - F1EB1A38D8D843224D93C592 /* Frameworks */, + 515422840D633F6AC1588AC7 /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 61E108675EDD4B5F14470A53 /* [CP] Check Pods Manifest.lock */, + 41BD58AF92D87F35673F336C /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 988934BE9015DDB2BD2671E2 /* [CP] Embed Pods Frameworks */, + 4BF732A76041B0DBA38F7214 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -270,28 +270,6 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 0033FF9EDA59710A08D92356 /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -308,7 +286,7 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 61E108675EDD4B5F14470A53 /* [CP] Check Pods Manifest.lock */ = { + 41BD58AF92D87F35673F336C /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -330,6 +308,23 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; + 4BF732A76041B0DBA38F7214 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -345,21 +340,26 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - 988934BE9015DDB2BD2671E2 /* [CP] Embed Pods Frameworks */ = { + D56C93D4DD0C64DF97BCE97D /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 028B86D9E5D62F1DCB40F65B /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = AA54CE87B515BC3531FEEF48 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 44AD5815711D9A48D9B79930 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 57AE46D9D874FE5FFBB3E047 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 0F5809B4F9F50DCE58AED982 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 1EC93CE997E0EDD54CB41295 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/boring_to_beautiful/step_02/linux/CMakeLists.txt b/boring_to_beautiful/step_02/linux/CMakeLists.txt index 0565f6a409..74a8344fa9 100644 --- a/boring_to_beautiful/step_02/linux/CMakeLists.txt +++ b/boring_to_beautiful/step_02/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.13) +cmake_minimum_required(VERSION 3.10) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,8 +54,25 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -# Application build; see runner/CMakeLists.txt. -add_subdirectory("runner") +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Define the application target. To change its name, change BINARY_NAME above, +# not the value here, or `flutter run` will no longer work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/boring_to_beautiful/step_02/linux/runner/main.cc b/boring_to_beautiful/step_02/linux/main.cc similarity index 100% rename from boring_to_beautiful/step_02/linux/runner/main.cc rename to boring_to_beautiful/step_02/linux/main.cc diff --git a/boring_to_beautiful/step_03/linux/runner/my_application.cc b/boring_to_beautiful/step_02/linux/my_application.cc similarity index 93% rename from boring_to_beautiful/step_03/linux/runner/my_application.cc rename to boring_to_beautiful/step_02/linux/my_application.cc index f93ba9f71c..59e1394236 100644 --- a/boring_to_beautiful/step_03/linux/runner/my_application.cc +++ b/boring_to_beautiful/step_02/linux/my_application.cc @@ -117,12 +117,6 @@ static void my_application_class_init(MyApplicationClass* klass) { static void my_application_init(MyApplication* self) {} MyApplication* my_application_new() { - // Set the program name to the application ID, which helps various systems - // like GTK and desktop environments map this running application to its - // corresponding .desktop file. This ensures better integration by allowing - // the application to be recognized beyond its binary name. - g_set_prgname(APPLICATION_ID); - return MY_APPLICATION(g_object_new(my_application_get_type(), "application-id", APPLICATION_ID, "flags", G_APPLICATION_NON_UNIQUE, diff --git a/boring_to_beautiful/step_02/linux/runner/my_application.h b/boring_to_beautiful/step_02/linux/my_application.h similarity index 100% rename from boring_to_beautiful/step_02/linux/runner/my_application.h rename to boring_to_beautiful/step_02/linux/my_application.h diff --git a/boring_to_beautiful/step_02/linux/runner/CMakeLists.txt b/boring_to_beautiful/step_02/linux/runner/CMakeLists.txt deleted file mode 100644 index e97dabc702..0000000000 --- a/boring_to_beautiful/step_02/linux/runner/CMakeLists.txt +++ /dev/null @@ -1,26 +0,0 @@ -cmake_minimum_required(VERSION 3.13) -project(runner LANGUAGES CXX) - -# Define the application target. To change its name, change BINARY_NAME in the -# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer -# work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add preprocessor definitions for the application ID. -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) - -target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/boring_to_beautiful/step_02/macos/Runner.xcodeproj/project.pbxproj b/boring_to_beautiful/step_02/macos/Runner.xcodeproj/project.pbxproj index a4ba51afb5..11e7ec7971 100644 --- a/boring_to_beautiful/step_02/macos/Runner.xcodeproj/project.pbxproj +++ b/boring_to_beautiful/step_02/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ + 122A14BB17CAE5827A96C600 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E721C61EEA1D01D1541205E2 /* Pods_RunnerTests.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 4199224406A25A7474E0C79E /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 36423EA0CDE5981423B48AEE /* Pods_Runner.framework */; }; - 91BCC9003B49CC98CECBF0EC /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B80D78B7F0831CA886CFE751 /* Pods_RunnerTests.framework */; }; + C0A311100478C3723AF3A1A3 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2B7F6D65CBE030418F0F8AFE /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,7 +62,10 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 25E382F5DE97D2D47426B59B /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 095235CA8E3718CE04BECCFD /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 1965E0AFE652202B66FE3359 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 2B7F6D65CBE030418F0F8AFE /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 2BE96204F8153212C1B2FFD5 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -79,15 +82,12 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 36423EA0CDE5981423B48AEE /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 59981915FE452EAD0B851E3D /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 92320B2EDC5B05B44B5CC56F /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - A0563A63B8D8D2BB44A67D02 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - B80D78B7F0831CA886CFE751 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - E881F22E1ED9CF3723A13CEC /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - F1D90A111512887B7981FE7C /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + B1C9C34FAF086E24D95B4FE5 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + B2992FC7568D7321F2EE4E8A /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + DA0493143D84740D445AC807 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + E721C61EEA1D01D1541205E2 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 91BCC9003B49CC98CECBF0EC /* Pods_RunnerTests.framework in Frameworks */, + 122A14BB17CAE5827A96C600 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,13 +103,27 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 4199224406A25A7474E0C79E /* Pods_Runner.framework in Frameworks */, + C0A311100478C3723AF3A1A3 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 1B3BB2FE7EC0BD319E6A18A5 /* Pods */ = { + isa = PBXGroup; + children = ( + B1C9C34FAF086E24D95B4FE5 /* Pods-Runner.debug.xcconfig */, + B2992FC7568D7321F2EE4E8A /* Pods-Runner.release.xcconfig */, + DA0493143D84740D445AC807 /* Pods-Runner.profile.xcconfig */, + 2BE96204F8153212C1B2FFD5 /* Pods-RunnerTests.debug.xcconfig */, + 095235CA8E3718CE04BECCFD /* Pods-RunnerTests.release.xcconfig */, + 1965E0AFE652202B66FE3359 /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; 331C80D6294CF71000263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -137,7 +151,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 7F3DCCA95ED45892CA7CC729 /* Pods */, + 1B3BB2FE7EC0BD319E6A18A5 /* Pods */, ); sourceTree = ""; }; @@ -185,25 +199,11 @@ path = Runner; sourceTree = ""; }; - 7F3DCCA95ED45892CA7CC729 /* Pods */ = { - isa = PBXGroup; - children = ( - A0563A63B8D8D2BB44A67D02 /* Pods-Runner.debug.xcconfig */, - 92320B2EDC5B05B44B5CC56F /* Pods-Runner.release.xcconfig */, - 59981915FE452EAD0B851E3D /* Pods-Runner.profile.xcconfig */, - E881F22E1ED9CF3723A13CEC /* Pods-RunnerTests.debug.xcconfig */, - F1D90A111512887B7981FE7C /* Pods-RunnerTests.release.xcconfig */, - 25E382F5DE97D2D47426B59B /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - 36423EA0CDE5981423B48AEE /* Pods_Runner.framework */, - B80D78B7F0831CA886CFE751 /* Pods_RunnerTests.framework */, + 2B7F6D65CBE030418F0F8AFE /* Pods_Runner.framework */, + E721C61EEA1D01D1541205E2 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - ABDEED064F2EE34AC0D864AE /* [CP] Check Pods Manifest.lock */, + 8BBDD854D9E775DA9D2E29E7 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - B9E6980CAE17BFE6BF2A9555 /* [CP] Check Pods Manifest.lock */, + 8D3EC8A5A25E8C0969226ECA /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 031FA17996CC4882D4AF14D9 /* [CP] Embed Pods Frameworks */, + 33B24C690BD4B02DCC978698 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,40 +323,40 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 031FA17996CC4882D4AF14D9 /* [CP] Embed Pods Frameworks */ = { + 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + ); outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; + shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; }; - 3399D490228B24CF009A79C7 /* ShellScript */ = { + 33B24C690BD4B02DCC978698 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - ); + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; }; 33CC111E2044C6BF0003C045 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; @@ -378,7 +378,7 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - ABDEED064F2EE34AC0D864AE /* [CP] Check Pods Manifest.lock */ = { + 8BBDD854D9E775DA9D2E29E7 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -400,7 +400,7 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - B9E6980CAE17BFE6BF2A9555 /* [CP] Check Pods Manifest.lock */ = { + 8D3EC8A5A25E8C0969226ECA /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = E881F22E1ED9CF3723A13CEC /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 2BE96204F8153212C1B2FFD5 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = F1D90A111512887B7981FE7C /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 095235CA8E3718CE04BECCFD /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 25E382F5DE97D2D47426B59B /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 1965E0AFE652202B66FE3359 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/boring_to_beautiful/step_02/web/index.html b/boring_to_beautiful/step_02/web/index.html index e0a0abbbbf..0a8bd1ab80 100644 --- a/boring_to_beautiful/step_02/web/index.html +++ b/boring_to_beautiful/step_02/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/boring_to_beautiful/step_03/android/gradle.properties b/boring_to_beautiful/step_03/android/gradle.properties index f018a61817..2597170821 100644 --- a/boring_to_beautiful/step_03/android/gradle.properties +++ b/boring_to_beautiful/step_03/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/boring_to_beautiful/step_03/ios/Runner.xcodeproj/project.pbxproj b/boring_to_beautiful/step_03/ios/Runner.xcodeproj/project.pbxproj index 27188f1a29..d33a503139 100644 --- a/boring_to_beautiful/step_03/ios/Runner.xcodeproj/project.pbxproj +++ b/boring_to_beautiful/step_03/ios/Runner.xcodeproj/project.pbxproj @@ -8,14 +8,14 @@ /* Begin PBXBuildFile section */ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; - 208962B53868BF2AFCDAD8E7 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 32C8ACDFE0B7706E1D63C8FC /* Pods_Runner.framework */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; + 49381EA0685B1F13BE864379 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CB41BC21C7A12C73E18A4BD4 /* Pods_RunnerTests.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - A4B9B73FBC1F47ACF4A1C4A0 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F27A303A186C2A0809FCFE71 /* Pods_RunnerTests.framework */; }; + C0064E05A4506D109FC14284 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FF179308D1EFBD41B1CD1303 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,16 +42,16 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 028B86D9E5D62F1DCB40F65B /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 0F5809B4F9F50DCE58AED982 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 32C8ACDFE0B7706E1D63C8FC /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 1EC93CE997E0EDD54CB41295 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 44AD5815711D9A48D9B79930 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - 4E2630CD278C99A068304BFF /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 458F284D4389ADAFFD7FBAA5 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 46ED109558BB0B52911CEDF2 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 507F761A690329C8C75A65E2 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 57AE46D9D874FE5FFBB3E047 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; @@ -62,25 +62,25 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - AAD1FCD230C27D91828B1C7E /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - B521B76D1194933A83E8CA4F /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - F27A303A186C2A0809FCFE71 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + AA54CE87B515BC3531FEEF48 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + CB41BC21C7A12C73E18A4BD4 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + FF179308D1EFBD41B1CD1303 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 97C146EB1CF9000F007C117D /* Frameworks */ = { + 515422840D633F6AC1588AC7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 208962B53868BF2AFCDAD8E7 /* Pods_Runner.framework in Frameworks */, + 49381EA0685B1F13BE864379 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - F1EB1A38D8D843224D93C592 /* Frameworks */ = { + 97C146EB1CF9000F007C117D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - A4B9B73FBC1F47ACF4A1C4A0 /* Pods_RunnerTests.framework in Frameworks */, + C0064E05A4506D109FC14284 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -95,11 +95,11 @@ path = RunnerTests; sourceTree = ""; }; - 4F504FD1A7DEAA11371FD812 /* Frameworks */ = { + 760CB6645FC65AE3E9230AD2 /* Frameworks */ = { isa = PBXGroup; children = ( - 32C8ACDFE0B7706E1D63C8FC /* Pods_Runner.framework */, - F27A303A186C2A0809FCFE71 /* Pods_RunnerTests.framework */, + FF179308D1EFBD41B1CD1303 /* Pods_Runner.framework */, + CB41BC21C7A12C73E18A4BD4 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -122,8 +122,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - EEC228E83A67A67530E39534 /* Pods */, - 4F504FD1A7DEAA11371FD812 /* Frameworks */, + BD60B01F7CC3F37BDE902B8C /* Pods */, + 760CB6645FC65AE3E9230AD2 /* Frameworks */, ); sourceTree = ""; }; @@ -151,15 +151,15 @@ path = Runner; sourceTree = ""; }; - EEC228E83A67A67530E39534 /* Pods */ = { + BD60B01F7CC3F37BDE902B8C /* Pods */ = { isa = PBXGroup; children = ( - 4E2630CD278C99A068304BFF /* Pods-Runner.debug.xcconfig */, - B521B76D1194933A83E8CA4F /* Pods-Runner.release.xcconfig */, - AAD1FCD230C27D91828B1C7E /* Pods-Runner.profile.xcconfig */, - 028B86D9E5D62F1DCB40F65B /* Pods-RunnerTests.debug.xcconfig */, - 44AD5815711D9A48D9B79930 /* Pods-RunnerTests.release.xcconfig */, - 0F5809B4F9F50DCE58AED982 /* Pods-RunnerTests.profile.xcconfig */, + 507F761A690329C8C75A65E2 /* Pods-Runner.debug.xcconfig */, + 458F284D4389ADAFFD7FBAA5 /* Pods-Runner.release.xcconfig */, + 46ED109558BB0B52911CEDF2 /* Pods-Runner.profile.xcconfig */, + AA54CE87B515BC3531FEEF48 /* Pods-RunnerTests.debug.xcconfig */, + 57AE46D9D874FE5FFBB3E047 /* Pods-RunnerTests.release.xcconfig */, + 1EC93CE997E0EDD54CB41295 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 0033FF9EDA59710A08D92356 /* [CP] Check Pods Manifest.lock */, + D56C93D4DD0C64DF97BCE97D /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - F1EB1A38D8D843224D93C592 /* Frameworks */, + 515422840D633F6AC1588AC7 /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 61E108675EDD4B5F14470A53 /* [CP] Check Pods Manifest.lock */, + 41BD58AF92D87F35673F336C /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 988934BE9015DDB2BD2671E2 /* [CP] Embed Pods Frameworks */, + 4BF732A76041B0DBA38F7214 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -270,28 +270,6 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 0033FF9EDA59710A08D92356 /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -308,7 +286,7 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 61E108675EDD4B5F14470A53 /* [CP] Check Pods Manifest.lock */ = { + 41BD58AF92D87F35673F336C /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -330,6 +308,23 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; + 4BF732A76041B0DBA38F7214 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -345,21 +340,26 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - 988934BE9015DDB2BD2671E2 /* [CP] Embed Pods Frameworks */ = { + D56C93D4DD0C64DF97BCE97D /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 028B86D9E5D62F1DCB40F65B /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = AA54CE87B515BC3531FEEF48 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 44AD5815711D9A48D9B79930 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 57AE46D9D874FE5FFBB3E047 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 0F5809B4F9F50DCE58AED982 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 1EC93CE997E0EDD54CB41295 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/boring_to_beautiful/step_03/linux/CMakeLists.txt b/boring_to_beautiful/step_03/linux/CMakeLists.txt index 0565f6a409..74a8344fa9 100644 --- a/boring_to_beautiful/step_03/linux/CMakeLists.txt +++ b/boring_to_beautiful/step_03/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.13) +cmake_minimum_required(VERSION 3.10) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,8 +54,25 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -# Application build; see runner/CMakeLists.txt. -add_subdirectory("runner") +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Define the application target. To change its name, change BINARY_NAME above, +# not the value here, or `flutter run` will no longer work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/boring_to_beautiful/step_03/linux/runner/main.cc b/boring_to_beautiful/step_03/linux/main.cc similarity index 100% rename from boring_to_beautiful/step_03/linux/runner/main.cc rename to boring_to_beautiful/step_03/linux/main.cc diff --git a/boring_to_beautiful/step_01/linux/runner/my_application.cc b/boring_to_beautiful/step_03/linux/my_application.cc similarity index 93% rename from boring_to_beautiful/step_01/linux/runner/my_application.cc rename to boring_to_beautiful/step_03/linux/my_application.cc index f93ba9f71c..59e1394236 100644 --- a/boring_to_beautiful/step_01/linux/runner/my_application.cc +++ b/boring_to_beautiful/step_03/linux/my_application.cc @@ -117,12 +117,6 @@ static void my_application_class_init(MyApplicationClass* klass) { static void my_application_init(MyApplication* self) {} MyApplication* my_application_new() { - // Set the program name to the application ID, which helps various systems - // like GTK and desktop environments map this running application to its - // corresponding .desktop file. This ensures better integration by allowing - // the application to be recognized beyond its binary name. - g_set_prgname(APPLICATION_ID); - return MY_APPLICATION(g_object_new(my_application_get_type(), "application-id", APPLICATION_ID, "flags", G_APPLICATION_NON_UNIQUE, diff --git a/boring_to_beautiful/step_03/linux/runner/my_application.h b/boring_to_beautiful/step_03/linux/my_application.h similarity index 100% rename from boring_to_beautiful/step_03/linux/runner/my_application.h rename to boring_to_beautiful/step_03/linux/my_application.h diff --git a/boring_to_beautiful/step_03/linux/runner/CMakeLists.txt b/boring_to_beautiful/step_03/linux/runner/CMakeLists.txt deleted file mode 100644 index e97dabc702..0000000000 --- a/boring_to_beautiful/step_03/linux/runner/CMakeLists.txt +++ /dev/null @@ -1,26 +0,0 @@ -cmake_minimum_required(VERSION 3.13) -project(runner LANGUAGES CXX) - -# Define the application target. To change its name, change BINARY_NAME in the -# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer -# work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add preprocessor definitions for the application ID. -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) - -target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/boring_to_beautiful/step_03/macos/Runner.xcodeproj/project.pbxproj b/boring_to_beautiful/step_03/macos/Runner.xcodeproj/project.pbxproj index a4ba51afb5..11e7ec7971 100644 --- a/boring_to_beautiful/step_03/macos/Runner.xcodeproj/project.pbxproj +++ b/boring_to_beautiful/step_03/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ + 122A14BB17CAE5827A96C600 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E721C61EEA1D01D1541205E2 /* Pods_RunnerTests.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 4199224406A25A7474E0C79E /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 36423EA0CDE5981423B48AEE /* Pods_Runner.framework */; }; - 91BCC9003B49CC98CECBF0EC /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B80D78B7F0831CA886CFE751 /* Pods_RunnerTests.framework */; }; + C0A311100478C3723AF3A1A3 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2B7F6D65CBE030418F0F8AFE /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,7 +62,10 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 25E382F5DE97D2D47426B59B /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 095235CA8E3718CE04BECCFD /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 1965E0AFE652202B66FE3359 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 2B7F6D65CBE030418F0F8AFE /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 2BE96204F8153212C1B2FFD5 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -79,15 +82,12 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 36423EA0CDE5981423B48AEE /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 59981915FE452EAD0B851E3D /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 92320B2EDC5B05B44B5CC56F /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - A0563A63B8D8D2BB44A67D02 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - B80D78B7F0831CA886CFE751 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - E881F22E1ED9CF3723A13CEC /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - F1D90A111512887B7981FE7C /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + B1C9C34FAF086E24D95B4FE5 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + B2992FC7568D7321F2EE4E8A /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + DA0493143D84740D445AC807 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + E721C61EEA1D01D1541205E2 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 91BCC9003B49CC98CECBF0EC /* Pods_RunnerTests.framework in Frameworks */, + 122A14BB17CAE5827A96C600 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,13 +103,27 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 4199224406A25A7474E0C79E /* Pods_Runner.framework in Frameworks */, + C0A311100478C3723AF3A1A3 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 1B3BB2FE7EC0BD319E6A18A5 /* Pods */ = { + isa = PBXGroup; + children = ( + B1C9C34FAF086E24D95B4FE5 /* Pods-Runner.debug.xcconfig */, + B2992FC7568D7321F2EE4E8A /* Pods-Runner.release.xcconfig */, + DA0493143D84740D445AC807 /* Pods-Runner.profile.xcconfig */, + 2BE96204F8153212C1B2FFD5 /* Pods-RunnerTests.debug.xcconfig */, + 095235CA8E3718CE04BECCFD /* Pods-RunnerTests.release.xcconfig */, + 1965E0AFE652202B66FE3359 /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; 331C80D6294CF71000263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -137,7 +151,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 7F3DCCA95ED45892CA7CC729 /* Pods */, + 1B3BB2FE7EC0BD319E6A18A5 /* Pods */, ); sourceTree = ""; }; @@ -185,25 +199,11 @@ path = Runner; sourceTree = ""; }; - 7F3DCCA95ED45892CA7CC729 /* Pods */ = { - isa = PBXGroup; - children = ( - A0563A63B8D8D2BB44A67D02 /* Pods-Runner.debug.xcconfig */, - 92320B2EDC5B05B44B5CC56F /* Pods-Runner.release.xcconfig */, - 59981915FE452EAD0B851E3D /* Pods-Runner.profile.xcconfig */, - E881F22E1ED9CF3723A13CEC /* Pods-RunnerTests.debug.xcconfig */, - F1D90A111512887B7981FE7C /* Pods-RunnerTests.release.xcconfig */, - 25E382F5DE97D2D47426B59B /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - 36423EA0CDE5981423B48AEE /* Pods_Runner.framework */, - B80D78B7F0831CA886CFE751 /* Pods_RunnerTests.framework */, + 2B7F6D65CBE030418F0F8AFE /* Pods_Runner.framework */, + E721C61EEA1D01D1541205E2 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - ABDEED064F2EE34AC0D864AE /* [CP] Check Pods Manifest.lock */, + 8BBDD854D9E775DA9D2E29E7 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - B9E6980CAE17BFE6BF2A9555 /* [CP] Check Pods Manifest.lock */, + 8D3EC8A5A25E8C0969226ECA /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 031FA17996CC4882D4AF14D9 /* [CP] Embed Pods Frameworks */, + 33B24C690BD4B02DCC978698 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,40 +323,40 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 031FA17996CC4882D4AF14D9 /* [CP] Embed Pods Frameworks */ = { + 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + ); outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; + shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; }; - 3399D490228B24CF009A79C7 /* ShellScript */ = { + 33B24C690BD4B02DCC978698 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - ); + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; }; 33CC111E2044C6BF0003C045 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; @@ -378,7 +378,7 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - ABDEED064F2EE34AC0D864AE /* [CP] Check Pods Manifest.lock */ = { + 8BBDD854D9E775DA9D2E29E7 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -400,7 +400,7 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - B9E6980CAE17BFE6BF2A9555 /* [CP] Check Pods Manifest.lock */ = { + 8D3EC8A5A25E8C0969226ECA /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = E881F22E1ED9CF3723A13CEC /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 2BE96204F8153212C1B2FFD5 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = F1D90A111512887B7981FE7C /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 095235CA8E3718CE04BECCFD /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 25E382F5DE97D2D47426B59B /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 1965E0AFE652202B66FE3359 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/boring_to_beautiful/step_03/web/index.html b/boring_to_beautiful/step_03/web/index.html index e0a0abbbbf..0a8bd1ab80 100644 --- a/boring_to_beautiful/step_03/web/index.html +++ b/boring_to_beautiful/step_03/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/boring_to_beautiful/step_04/android/gradle.properties b/boring_to_beautiful/step_04/android/gradle.properties index f018a61817..2597170821 100644 --- a/boring_to_beautiful/step_04/android/gradle.properties +++ b/boring_to_beautiful/step_04/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/boring_to_beautiful/step_04/ios/Runner.xcodeproj/project.pbxproj b/boring_to_beautiful/step_04/ios/Runner.xcodeproj/project.pbxproj index 27188f1a29..d33a503139 100644 --- a/boring_to_beautiful/step_04/ios/Runner.xcodeproj/project.pbxproj +++ b/boring_to_beautiful/step_04/ios/Runner.xcodeproj/project.pbxproj @@ -8,14 +8,14 @@ /* Begin PBXBuildFile section */ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; - 208962B53868BF2AFCDAD8E7 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 32C8ACDFE0B7706E1D63C8FC /* Pods_Runner.framework */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; + 49381EA0685B1F13BE864379 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CB41BC21C7A12C73E18A4BD4 /* Pods_RunnerTests.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - A4B9B73FBC1F47ACF4A1C4A0 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F27A303A186C2A0809FCFE71 /* Pods_RunnerTests.framework */; }; + C0064E05A4506D109FC14284 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FF179308D1EFBD41B1CD1303 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,16 +42,16 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 028B86D9E5D62F1DCB40F65B /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 0F5809B4F9F50DCE58AED982 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 32C8ACDFE0B7706E1D63C8FC /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 1EC93CE997E0EDD54CB41295 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 44AD5815711D9A48D9B79930 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - 4E2630CD278C99A068304BFF /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 458F284D4389ADAFFD7FBAA5 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 46ED109558BB0B52911CEDF2 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 507F761A690329C8C75A65E2 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 57AE46D9D874FE5FFBB3E047 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; @@ -62,25 +62,25 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - AAD1FCD230C27D91828B1C7E /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - B521B76D1194933A83E8CA4F /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - F27A303A186C2A0809FCFE71 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + AA54CE87B515BC3531FEEF48 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + CB41BC21C7A12C73E18A4BD4 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + FF179308D1EFBD41B1CD1303 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 97C146EB1CF9000F007C117D /* Frameworks */ = { + 515422840D633F6AC1588AC7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 208962B53868BF2AFCDAD8E7 /* Pods_Runner.framework in Frameworks */, + 49381EA0685B1F13BE864379 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - F1EB1A38D8D843224D93C592 /* Frameworks */ = { + 97C146EB1CF9000F007C117D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - A4B9B73FBC1F47ACF4A1C4A0 /* Pods_RunnerTests.framework in Frameworks */, + C0064E05A4506D109FC14284 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -95,11 +95,11 @@ path = RunnerTests; sourceTree = ""; }; - 4F504FD1A7DEAA11371FD812 /* Frameworks */ = { + 760CB6645FC65AE3E9230AD2 /* Frameworks */ = { isa = PBXGroup; children = ( - 32C8ACDFE0B7706E1D63C8FC /* Pods_Runner.framework */, - F27A303A186C2A0809FCFE71 /* Pods_RunnerTests.framework */, + FF179308D1EFBD41B1CD1303 /* Pods_Runner.framework */, + CB41BC21C7A12C73E18A4BD4 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -122,8 +122,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - EEC228E83A67A67530E39534 /* Pods */, - 4F504FD1A7DEAA11371FD812 /* Frameworks */, + BD60B01F7CC3F37BDE902B8C /* Pods */, + 760CB6645FC65AE3E9230AD2 /* Frameworks */, ); sourceTree = ""; }; @@ -151,15 +151,15 @@ path = Runner; sourceTree = ""; }; - EEC228E83A67A67530E39534 /* Pods */ = { + BD60B01F7CC3F37BDE902B8C /* Pods */ = { isa = PBXGroup; children = ( - 4E2630CD278C99A068304BFF /* Pods-Runner.debug.xcconfig */, - B521B76D1194933A83E8CA4F /* Pods-Runner.release.xcconfig */, - AAD1FCD230C27D91828B1C7E /* Pods-Runner.profile.xcconfig */, - 028B86D9E5D62F1DCB40F65B /* Pods-RunnerTests.debug.xcconfig */, - 44AD5815711D9A48D9B79930 /* Pods-RunnerTests.release.xcconfig */, - 0F5809B4F9F50DCE58AED982 /* Pods-RunnerTests.profile.xcconfig */, + 507F761A690329C8C75A65E2 /* Pods-Runner.debug.xcconfig */, + 458F284D4389ADAFFD7FBAA5 /* Pods-Runner.release.xcconfig */, + 46ED109558BB0B52911CEDF2 /* Pods-Runner.profile.xcconfig */, + AA54CE87B515BC3531FEEF48 /* Pods-RunnerTests.debug.xcconfig */, + 57AE46D9D874FE5FFBB3E047 /* Pods-RunnerTests.release.xcconfig */, + 1EC93CE997E0EDD54CB41295 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 0033FF9EDA59710A08D92356 /* [CP] Check Pods Manifest.lock */, + D56C93D4DD0C64DF97BCE97D /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - F1EB1A38D8D843224D93C592 /* Frameworks */, + 515422840D633F6AC1588AC7 /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 61E108675EDD4B5F14470A53 /* [CP] Check Pods Manifest.lock */, + 41BD58AF92D87F35673F336C /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 988934BE9015DDB2BD2671E2 /* [CP] Embed Pods Frameworks */, + 4BF732A76041B0DBA38F7214 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -270,28 +270,6 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 0033FF9EDA59710A08D92356 /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -308,7 +286,7 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 61E108675EDD4B5F14470A53 /* [CP] Check Pods Manifest.lock */ = { + 41BD58AF92D87F35673F336C /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -330,6 +308,23 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; + 4BF732A76041B0DBA38F7214 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -345,21 +340,26 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - 988934BE9015DDB2BD2671E2 /* [CP] Embed Pods Frameworks */ = { + D56C93D4DD0C64DF97BCE97D /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 028B86D9E5D62F1DCB40F65B /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = AA54CE87B515BC3531FEEF48 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 44AD5815711D9A48D9B79930 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 57AE46D9D874FE5FFBB3E047 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 0F5809B4F9F50DCE58AED982 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 1EC93CE997E0EDD54CB41295 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/boring_to_beautiful/step_04/linux/CMakeLists.txt b/boring_to_beautiful/step_04/linux/CMakeLists.txt index 0565f6a409..74a8344fa9 100644 --- a/boring_to_beautiful/step_04/linux/CMakeLists.txt +++ b/boring_to_beautiful/step_04/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.13) +cmake_minimum_required(VERSION 3.10) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,8 +54,25 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -# Application build; see runner/CMakeLists.txt. -add_subdirectory("runner") +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Define the application target. To change its name, change BINARY_NAME above, +# not the value here, or `flutter run` will no longer work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/boring_to_beautiful/step_04/linux/runner/main.cc b/boring_to_beautiful/step_04/linux/main.cc similarity index 100% rename from boring_to_beautiful/step_04/linux/runner/main.cc rename to boring_to_beautiful/step_04/linux/main.cc diff --git a/boring_to_beautiful/step_04/linux/my_application.cc b/boring_to_beautiful/step_04/linux/my_application.cc new file mode 100644 index 0000000000..59e1394236 --- /dev/null +++ b/boring_to_beautiful/step_04/linux/my_application.cc @@ -0,0 +1,124 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "myartist"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "myartist"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/boring_to_beautiful/step_04/linux/runner/my_application.h b/boring_to_beautiful/step_04/linux/my_application.h similarity index 100% rename from boring_to_beautiful/step_04/linux/runner/my_application.h rename to boring_to_beautiful/step_04/linux/my_application.h diff --git a/boring_to_beautiful/step_04/linux/runner/CMakeLists.txt b/boring_to_beautiful/step_04/linux/runner/CMakeLists.txt deleted file mode 100644 index e97dabc702..0000000000 --- a/boring_to_beautiful/step_04/linux/runner/CMakeLists.txt +++ /dev/null @@ -1,26 +0,0 @@ -cmake_minimum_required(VERSION 3.13) -project(runner LANGUAGES CXX) - -# Define the application target. To change its name, change BINARY_NAME in the -# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer -# work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add preprocessor definitions for the application ID. -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) - -target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/boring_to_beautiful/step_04/linux/runner/my_application.cc b/boring_to_beautiful/step_04/linux/runner/my_application.cc deleted file mode 100644 index f93ba9f71c..0000000000 --- a/boring_to_beautiful/step_04/linux/runner/my_application.cc +++ /dev/null @@ -1,130 +0,0 @@ -#include "my_application.h" - -#include -#ifdef GDK_WINDOWING_X11 -#include -#endif - -#include "flutter/generated_plugin_registrant.h" - -struct _MyApplication { - GtkApplication parent_instance; - char** dart_entrypoint_arguments; -}; - -G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) - -// Implements GApplication::activate. -static void my_application_activate(GApplication* application) { - MyApplication* self = MY_APPLICATION(application); - GtkWindow* window = - GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); - - // Use a header bar when running in GNOME as this is the common style used - // by applications and is the setup most users will be using (e.g. Ubuntu - // desktop). - // If running on X and not using GNOME then just use a traditional title bar - // in case the window manager does more exotic layout, e.g. tiling. - // If running on Wayland assume the header bar will work (may need changing - // if future cases occur). - gboolean use_header_bar = TRUE; -#ifdef GDK_WINDOWING_X11 - GdkScreen* screen = gtk_window_get_screen(window); - if (GDK_IS_X11_SCREEN(screen)) { - const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); - if (g_strcmp0(wm_name, "GNOME Shell") != 0) { - use_header_bar = FALSE; - } - } -#endif - if (use_header_bar) { - GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); - gtk_widget_show(GTK_WIDGET(header_bar)); - gtk_header_bar_set_title(header_bar, "myartist"); - gtk_header_bar_set_show_close_button(header_bar, TRUE); - gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); - } else { - gtk_window_set_title(window, "myartist"); - } - - gtk_window_set_default_size(window, 1280, 720); - gtk_widget_show(GTK_WIDGET(window)); - - g_autoptr(FlDartProject) project = fl_dart_project_new(); - fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); - - FlView* view = fl_view_new(project); - gtk_widget_show(GTK_WIDGET(view)); - gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); - - fl_register_plugins(FL_PLUGIN_REGISTRY(view)); - - gtk_widget_grab_focus(GTK_WIDGET(view)); -} - -// Implements GApplication::local_command_line. -static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { - MyApplication* self = MY_APPLICATION(application); - // Strip out the first argument as it is the binary name. - self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); - - g_autoptr(GError) error = nullptr; - if (!g_application_register(application, nullptr, &error)) { - g_warning("Failed to register: %s", error->message); - *exit_status = 1; - return TRUE; - } - - g_application_activate(application); - *exit_status = 0; - - return TRUE; -} - -// Implements GApplication::startup. -static void my_application_startup(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application startup. - - G_APPLICATION_CLASS(my_application_parent_class)->startup(application); -} - -// Implements GApplication::shutdown. -static void my_application_shutdown(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application shutdown. - - G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); -} - -// Implements GObject::dispose. -static void my_application_dispose(GObject* object) { - MyApplication* self = MY_APPLICATION(object); - g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); - G_OBJECT_CLASS(my_application_parent_class)->dispose(object); -} - -static void my_application_class_init(MyApplicationClass* klass) { - G_APPLICATION_CLASS(klass)->activate = my_application_activate; - G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; - G_APPLICATION_CLASS(klass)->startup = my_application_startup; - G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; - G_OBJECT_CLASS(klass)->dispose = my_application_dispose; -} - -static void my_application_init(MyApplication* self) {} - -MyApplication* my_application_new() { - // Set the program name to the application ID, which helps various systems - // like GTK and desktop environments map this running application to its - // corresponding .desktop file. This ensures better integration by allowing - // the application to be recognized beyond its binary name. - g_set_prgname(APPLICATION_ID); - - return MY_APPLICATION(g_object_new(my_application_get_type(), - "application-id", APPLICATION_ID, - "flags", G_APPLICATION_NON_UNIQUE, - nullptr)); -} diff --git a/boring_to_beautiful/step_04/macos/Runner.xcodeproj/project.pbxproj b/boring_to_beautiful/step_04/macos/Runner.xcodeproj/project.pbxproj index a4ba51afb5..11e7ec7971 100644 --- a/boring_to_beautiful/step_04/macos/Runner.xcodeproj/project.pbxproj +++ b/boring_to_beautiful/step_04/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ + 122A14BB17CAE5827A96C600 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E721C61EEA1D01D1541205E2 /* Pods_RunnerTests.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 4199224406A25A7474E0C79E /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 36423EA0CDE5981423B48AEE /* Pods_Runner.framework */; }; - 91BCC9003B49CC98CECBF0EC /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B80D78B7F0831CA886CFE751 /* Pods_RunnerTests.framework */; }; + C0A311100478C3723AF3A1A3 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2B7F6D65CBE030418F0F8AFE /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,7 +62,10 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 25E382F5DE97D2D47426B59B /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 095235CA8E3718CE04BECCFD /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 1965E0AFE652202B66FE3359 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 2B7F6D65CBE030418F0F8AFE /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 2BE96204F8153212C1B2FFD5 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -79,15 +82,12 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 36423EA0CDE5981423B48AEE /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 59981915FE452EAD0B851E3D /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 92320B2EDC5B05B44B5CC56F /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - A0563A63B8D8D2BB44A67D02 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - B80D78B7F0831CA886CFE751 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - E881F22E1ED9CF3723A13CEC /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - F1D90A111512887B7981FE7C /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + B1C9C34FAF086E24D95B4FE5 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + B2992FC7568D7321F2EE4E8A /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + DA0493143D84740D445AC807 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + E721C61EEA1D01D1541205E2 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 91BCC9003B49CC98CECBF0EC /* Pods_RunnerTests.framework in Frameworks */, + 122A14BB17CAE5827A96C600 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,13 +103,27 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 4199224406A25A7474E0C79E /* Pods_Runner.framework in Frameworks */, + C0A311100478C3723AF3A1A3 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 1B3BB2FE7EC0BD319E6A18A5 /* Pods */ = { + isa = PBXGroup; + children = ( + B1C9C34FAF086E24D95B4FE5 /* Pods-Runner.debug.xcconfig */, + B2992FC7568D7321F2EE4E8A /* Pods-Runner.release.xcconfig */, + DA0493143D84740D445AC807 /* Pods-Runner.profile.xcconfig */, + 2BE96204F8153212C1B2FFD5 /* Pods-RunnerTests.debug.xcconfig */, + 095235CA8E3718CE04BECCFD /* Pods-RunnerTests.release.xcconfig */, + 1965E0AFE652202B66FE3359 /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; 331C80D6294CF71000263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -137,7 +151,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 7F3DCCA95ED45892CA7CC729 /* Pods */, + 1B3BB2FE7EC0BD319E6A18A5 /* Pods */, ); sourceTree = ""; }; @@ -185,25 +199,11 @@ path = Runner; sourceTree = ""; }; - 7F3DCCA95ED45892CA7CC729 /* Pods */ = { - isa = PBXGroup; - children = ( - A0563A63B8D8D2BB44A67D02 /* Pods-Runner.debug.xcconfig */, - 92320B2EDC5B05B44B5CC56F /* Pods-Runner.release.xcconfig */, - 59981915FE452EAD0B851E3D /* Pods-Runner.profile.xcconfig */, - E881F22E1ED9CF3723A13CEC /* Pods-RunnerTests.debug.xcconfig */, - F1D90A111512887B7981FE7C /* Pods-RunnerTests.release.xcconfig */, - 25E382F5DE97D2D47426B59B /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - 36423EA0CDE5981423B48AEE /* Pods_Runner.framework */, - B80D78B7F0831CA886CFE751 /* Pods_RunnerTests.framework */, + 2B7F6D65CBE030418F0F8AFE /* Pods_Runner.framework */, + E721C61EEA1D01D1541205E2 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - ABDEED064F2EE34AC0D864AE /* [CP] Check Pods Manifest.lock */, + 8BBDD854D9E775DA9D2E29E7 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - B9E6980CAE17BFE6BF2A9555 /* [CP] Check Pods Manifest.lock */, + 8D3EC8A5A25E8C0969226ECA /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 031FA17996CC4882D4AF14D9 /* [CP] Embed Pods Frameworks */, + 33B24C690BD4B02DCC978698 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,40 +323,40 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 031FA17996CC4882D4AF14D9 /* [CP] Embed Pods Frameworks */ = { + 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + ); outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; + shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; }; - 3399D490228B24CF009A79C7 /* ShellScript */ = { + 33B24C690BD4B02DCC978698 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - ); + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; }; 33CC111E2044C6BF0003C045 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; @@ -378,7 +378,7 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - ABDEED064F2EE34AC0D864AE /* [CP] Check Pods Manifest.lock */ = { + 8BBDD854D9E775DA9D2E29E7 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -400,7 +400,7 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - B9E6980CAE17BFE6BF2A9555 /* [CP] Check Pods Manifest.lock */ = { + 8D3EC8A5A25E8C0969226ECA /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = E881F22E1ED9CF3723A13CEC /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 2BE96204F8153212C1B2FFD5 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = F1D90A111512887B7981FE7C /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 095235CA8E3718CE04BECCFD /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 25E382F5DE97D2D47426B59B /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 1965E0AFE652202B66FE3359 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/boring_to_beautiful/step_04/web/index.html b/boring_to_beautiful/step_04/web/index.html index e0a0abbbbf..0a8bd1ab80 100644 --- a/boring_to_beautiful/step_04/web/index.html +++ b/boring_to_beautiful/step_04/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/boring_to_beautiful/step_05/android/gradle.properties b/boring_to_beautiful/step_05/android/gradle.properties index f018a61817..2597170821 100644 --- a/boring_to_beautiful/step_05/android/gradle.properties +++ b/boring_to_beautiful/step_05/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/boring_to_beautiful/step_05/ios/Runner.xcodeproj/project.pbxproj b/boring_to_beautiful/step_05/ios/Runner.xcodeproj/project.pbxproj index 27188f1a29..d33a503139 100644 --- a/boring_to_beautiful/step_05/ios/Runner.xcodeproj/project.pbxproj +++ b/boring_to_beautiful/step_05/ios/Runner.xcodeproj/project.pbxproj @@ -8,14 +8,14 @@ /* Begin PBXBuildFile section */ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; - 208962B53868BF2AFCDAD8E7 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 32C8ACDFE0B7706E1D63C8FC /* Pods_Runner.framework */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; + 49381EA0685B1F13BE864379 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CB41BC21C7A12C73E18A4BD4 /* Pods_RunnerTests.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - A4B9B73FBC1F47ACF4A1C4A0 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F27A303A186C2A0809FCFE71 /* Pods_RunnerTests.framework */; }; + C0064E05A4506D109FC14284 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FF179308D1EFBD41B1CD1303 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,16 +42,16 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 028B86D9E5D62F1DCB40F65B /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 0F5809B4F9F50DCE58AED982 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 32C8ACDFE0B7706E1D63C8FC /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 1EC93CE997E0EDD54CB41295 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 44AD5815711D9A48D9B79930 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - 4E2630CD278C99A068304BFF /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 458F284D4389ADAFFD7FBAA5 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 46ED109558BB0B52911CEDF2 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 507F761A690329C8C75A65E2 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 57AE46D9D874FE5FFBB3E047 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; @@ -62,25 +62,25 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - AAD1FCD230C27D91828B1C7E /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - B521B76D1194933A83E8CA4F /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - F27A303A186C2A0809FCFE71 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + AA54CE87B515BC3531FEEF48 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + CB41BC21C7A12C73E18A4BD4 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + FF179308D1EFBD41B1CD1303 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 97C146EB1CF9000F007C117D /* Frameworks */ = { + 515422840D633F6AC1588AC7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 208962B53868BF2AFCDAD8E7 /* Pods_Runner.framework in Frameworks */, + 49381EA0685B1F13BE864379 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - F1EB1A38D8D843224D93C592 /* Frameworks */ = { + 97C146EB1CF9000F007C117D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - A4B9B73FBC1F47ACF4A1C4A0 /* Pods_RunnerTests.framework in Frameworks */, + C0064E05A4506D109FC14284 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -95,11 +95,11 @@ path = RunnerTests; sourceTree = ""; }; - 4F504FD1A7DEAA11371FD812 /* Frameworks */ = { + 760CB6645FC65AE3E9230AD2 /* Frameworks */ = { isa = PBXGroup; children = ( - 32C8ACDFE0B7706E1D63C8FC /* Pods_Runner.framework */, - F27A303A186C2A0809FCFE71 /* Pods_RunnerTests.framework */, + FF179308D1EFBD41B1CD1303 /* Pods_Runner.framework */, + CB41BC21C7A12C73E18A4BD4 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -122,8 +122,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - EEC228E83A67A67530E39534 /* Pods */, - 4F504FD1A7DEAA11371FD812 /* Frameworks */, + BD60B01F7CC3F37BDE902B8C /* Pods */, + 760CB6645FC65AE3E9230AD2 /* Frameworks */, ); sourceTree = ""; }; @@ -151,15 +151,15 @@ path = Runner; sourceTree = ""; }; - EEC228E83A67A67530E39534 /* Pods */ = { + BD60B01F7CC3F37BDE902B8C /* Pods */ = { isa = PBXGroup; children = ( - 4E2630CD278C99A068304BFF /* Pods-Runner.debug.xcconfig */, - B521B76D1194933A83E8CA4F /* Pods-Runner.release.xcconfig */, - AAD1FCD230C27D91828B1C7E /* Pods-Runner.profile.xcconfig */, - 028B86D9E5D62F1DCB40F65B /* Pods-RunnerTests.debug.xcconfig */, - 44AD5815711D9A48D9B79930 /* Pods-RunnerTests.release.xcconfig */, - 0F5809B4F9F50DCE58AED982 /* Pods-RunnerTests.profile.xcconfig */, + 507F761A690329C8C75A65E2 /* Pods-Runner.debug.xcconfig */, + 458F284D4389ADAFFD7FBAA5 /* Pods-Runner.release.xcconfig */, + 46ED109558BB0B52911CEDF2 /* Pods-Runner.profile.xcconfig */, + AA54CE87B515BC3531FEEF48 /* Pods-RunnerTests.debug.xcconfig */, + 57AE46D9D874FE5FFBB3E047 /* Pods-RunnerTests.release.xcconfig */, + 1EC93CE997E0EDD54CB41295 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 0033FF9EDA59710A08D92356 /* [CP] Check Pods Manifest.lock */, + D56C93D4DD0C64DF97BCE97D /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - F1EB1A38D8D843224D93C592 /* Frameworks */, + 515422840D633F6AC1588AC7 /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 61E108675EDD4B5F14470A53 /* [CP] Check Pods Manifest.lock */, + 41BD58AF92D87F35673F336C /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 988934BE9015DDB2BD2671E2 /* [CP] Embed Pods Frameworks */, + 4BF732A76041B0DBA38F7214 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -270,28 +270,6 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 0033FF9EDA59710A08D92356 /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -308,7 +286,7 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 61E108675EDD4B5F14470A53 /* [CP] Check Pods Manifest.lock */ = { + 41BD58AF92D87F35673F336C /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -330,6 +308,23 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; + 4BF732A76041B0DBA38F7214 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -345,21 +340,26 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - 988934BE9015DDB2BD2671E2 /* [CP] Embed Pods Frameworks */ = { + D56C93D4DD0C64DF97BCE97D /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 028B86D9E5D62F1DCB40F65B /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = AA54CE87B515BC3531FEEF48 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 44AD5815711D9A48D9B79930 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 57AE46D9D874FE5FFBB3E047 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 0F5809B4F9F50DCE58AED982 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 1EC93CE997E0EDD54CB41295 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/boring_to_beautiful/step_05/linux/CMakeLists.txt b/boring_to_beautiful/step_05/linux/CMakeLists.txt index 0565f6a409..74a8344fa9 100644 --- a/boring_to_beautiful/step_05/linux/CMakeLists.txt +++ b/boring_to_beautiful/step_05/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.13) +cmake_minimum_required(VERSION 3.10) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,8 +54,25 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -# Application build; see runner/CMakeLists.txt. -add_subdirectory("runner") +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Define the application target. To change its name, change BINARY_NAME above, +# not the value here, or `flutter run` will no longer work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/boring_to_beautiful/step_05/linux/runner/main.cc b/boring_to_beautiful/step_05/linux/main.cc similarity index 100% rename from boring_to_beautiful/step_05/linux/runner/main.cc rename to boring_to_beautiful/step_05/linux/main.cc diff --git a/boring_to_beautiful/step_05/linux/my_application.cc b/boring_to_beautiful/step_05/linux/my_application.cc new file mode 100644 index 0000000000..59e1394236 --- /dev/null +++ b/boring_to_beautiful/step_05/linux/my_application.cc @@ -0,0 +1,124 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "myartist"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "myartist"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/boring_to_beautiful/step_05/linux/runner/my_application.h b/boring_to_beautiful/step_05/linux/my_application.h similarity index 100% rename from boring_to_beautiful/step_05/linux/runner/my_application.h rename to boring_to_beautiful/step_05/linux/my_application.h diff --git a/boring_to_beautiful/step_05/linux/runner/CMakeLists.txt b/boring_to_beautiful/step_05/linux/runner/CMakeLists.txt deleted file mode 100644 index e97dabc702..0000000000 --- a/boring_to_beautiful/step_05/linux/runner/CMakeLists.txt +++ /dev/null @@ -1,26 +0,0 @@ -cmake_minimum_required(VERSION 3.13) -project(runner LANGUAGES CXX) - -# Define the application target. To change its name, change BINARY_NAME in the -# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer -# work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add preprocessor definitions for the application ID. -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) - -target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/boring_to_beautiful/step_05/linux/runner/my_application.cc b/boring_to_beautiful/step_05/linux/runner/my_application.cc deleted file mode 100644 index f93ba9f71c..0000000000 --- a/boring_to_beautiful/step_05/linux/runner/my_application.cc +++ /dev/null @@ -1,130 +0,0 @@ -#include "my_application.h" - -#include -#ifdef GDK_WINDOWING_X11 -#include -#endif - -#include "flutter/generated_plugin_registrant.h" - -struct _MyApplication { - GtkApplication parent_instance; - char** dart_entrypoint_arguments; -}; - -G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) - -// Implements GApplication::activate. -static void my_application_activate(GApplication* application) { - MyApplication* self = MY_APPLICATION(application); - GtkWindow* window = - GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); - - // Use a header bar when running in GNOME as this is the common style used - // by applications and is the setup most users will be using (e.g. Ubuntu - // desktop). - // If running on X and not using GNOME then just use a traditional title bar - // in case the window manager does more exotic layout, e.g. tiling. - // If running on Wayland assume the header bar will work (may need changing - // if future cases occur). - gboolean use_header_bar = TRUE; -#ifdef GDK_WINDOWING_X11 - GdkScreen* screen = gtk_window_get_screen(window); - if (GDK_IS_X11_SCREEN(screen)) { - const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); - if (g_strcmp0(wm_name, "GNOME Shell") != 0) { - use_header_bar = FALSE; - } - } -#endif - if (use_header_bar) { - GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); - gtk_widget_show(GTK_WIDGET(header_bar)); - gtk_header_bar_set_title(header_bar, "myartist"); - gtk_header_bar_set_show_close_button(header_bar, TRUE); - gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); - } else { - gtk_window_set_title(window, "myartist"); - } - - gtk_window_set_default_size(window, 1280, 720); - gtk_widget_show(GTK_WIDGET(window)); - - g_autoptr(FlDartProject) project = fl_dart_project_new(); - fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); - - FlView* view = fl_view_new(project); - gtk_widget_show(GTK_WIDGET(view)); - gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); - - fl_register_plugins(FL_PLUGIN_REGISTRY(view)); - - gtk_widget_grab_focus(GTK_WIDGET(view)); -} - -// Implements GApplication::local_command_line. -static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { - MyApplication* self = MY_APPLICATION(application); - // Strip out the first argument as it is the binary name. - self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); - - g_autoptr(GError) error = nullptr; - if (!g_application_register(application, nullptr, &error)) { - g_warning("Failed to register: %s", error->message); - *exit_status = 1; - return TRUE; - } - - g_application_activate(application); - *exit_status = 0; - - return TRUE; -} - -// Implements GApplication::startup. -static void my_application_startup(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application startup. - - G_APPLICATION_CLASS(my_application_parent_class)->startup(application); -} - -// Implements GApplication::shutdown. -static void my_application_shutdown(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application shutdown. - - G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); -} - -// Implements GObject::dispose. -static void my_application_dispose(GObject* object) { - MyApplication* self = MY_APPLICATION(object); - g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); - G_OBJECT_CLASS(my_application_parent_class)->dispose(object); -} - -static void my_application_class_init(MyApplicationClass* klass) { - G_APPLICATION_CLASS(klass)->activate = my_application_activate; - G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; - G_APPLICATION_CLASS(klass)->startup = my_application_startup; - G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; - G_OBJECT_CLASS(klass)->dispose = my_application_dispose; -} - -static void my_application_init(MyApplication* self) {} - -MyApplication* my_application_new() { - // Set the program name to the application ID, which helps various systems - // like GTK and desktop environments map this running application to its - // corresponding .desktop file. This ensures better integration by allowing - // the application to be recognized beyond its binary name. - g_set_prgname(APPLICATION_ID); - - return MY_APPLICATION(g_object_new(my_application_get_type(), - "application-id", APPLICATION_ID, - "flags", G_APPLICATION_NON_UNIQUE, - nullptr)); -} diff --git a/boring_to_beautiful/step_05/macos/Runner.xcodeproj/project.pbxproj b/boring_to_beautiful/step_05/macos/Runner.xcodeproj/project.pbxproj index a4ba51afb5..11e7ec7971 100644 --- a/boring_to_beautiful/step_05/macos/Runner.xcodeproj/project.pbxproj +++ b/boring_to_beautiful/step_05/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ + 122A14BB17CAE5827A96C600 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E721C61EEA1D01D1541205E2 /* Pods_RunnerTests.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 4199224406A25A7474E0C79E /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 36423EA0CDE5981423B48AEE /* Pods_Runner.framework */; }; - 91BCC9003B49CC98CECBF0EC /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B80D78B7F0831CA886CFE751 /* Pods_RunnerTests.framework */; }; + C0A311100478C3723AF3A1A3 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2B7F6D65CBE030418F0F8AFE /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,7 +62,10 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 25E382F5DE97D2D47426B59B /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 095235CA8E3718CE04BECCFD /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 1965E0AFE652202B66FE3359 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 2B7F6D65CBE030418F0F8AFE /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 2BE96204F8153212C1B2FFD5 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -79,15 +82,12 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 36423EA0CDE5981423B48AEE /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 59981915FE452EAD0B851E3D /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 92320B2EDC5B05B44B5CC56F /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - A0563A63B8D8D2BB44A67D02 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - B80D78B7F0831CA886CFE751 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - E881F22E1ED9CF3723A13CEC /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - F1D90A111512887B7981FE7C /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + B1C9C34FAF086E24D95B4FE5 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + B2992FC7568D7321F2EE4E8A /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + DA0493143D84740D445AC807 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + E721C61EEA1D01D1541205E2 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 91BCC9003B49CC98CECBF0EC /* Pods_RunnerTests.framework in Frameworks */, + 122A14BB17CAE5827A96C600 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,13 +103,27 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 4199224406A25A7474E0C79E /* Pods_Runner.framework in Frameworks */, + C0A311100478C3723AF3A1A3 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 1B3BB2FE7EC0BD319E6A18A5 /* Pods */ = { + isa = PBXGroup; + children = ( + B1C9C34FAF086E24D95B4FE5 /* Pods-Runner.debug.xcconfig */, + B2992FC7568D7321F2EE4E8A /* Pods-Runner.release.xcconfig */, + DA0493143D84740D445AC807 /* Pods-Runner.profile.xcconfig */, + 2BE96204F8153212C1B2FFD5 /* Pods-RunnerTests.debug.xcconfig */, + 095235CA8E3718CE04BECCFD /* Pods-RunnerTests.release.xcconfig */, + 1965E0AFE652202B66FE3359 /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; 331C80D6294CF71000263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -137,7 +151,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 7F3DCCA95ED45892CA7CC729 /* Pods */, + 1B3BB2FE7EC0BD319E6A18A5 /* Pods */, ); sourceTree = ""; }; @@ -185,25 +199,11 @@ path = Runner; sourceTree = ""; }; - 7F3DCCA95ED45892CA7CC729 /* Pods */ = { - isa = PBXGroup; - children = ( - A0563A63B8D8D2BB44A67D02 /* Pods-Runner.debug.xcconfig */, - 92320B2EDC5B05B44B5CC56F /* Pods-Runner.release.xcconfig */, - 59981915FE452EAD0B851E3D /* Pods-Runner.profile.xcconfig */, - E881F22E1ED9CF3723A13CEC /* Pods-RunnerTests.debug.xcconfig */, - F1D90A111512887B7981FE7C /* Pods-RunnerTests.release.xcconfig */, - 25E382F5DE97D2D47426B59B /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - 36423EA0CDE5981423B48AEE /* Pods_Runner.framework */, - B80D78B7F0831CA886CFE751 /* Pods_RunnerTests.framework */, + 2B7F6D65CBE030418F0F8AFE /* Pods_Runner.framework */, + E721C61EEA1D01D1541205E2 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - ABDEED064F2EE34AC0D864AE /* [CP] Check Pods Manifest.lock */, + 8BBDD854D9E775DA9D2E29E7 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - B9E6980CAE17BFE6BF2A9555 /* [CP] Check Pods Manifest.lock */, + 8D3EC8A5A25E8C0969226ECA /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 031FA17996CC4882D4AF14D9 /* [CP] Embed Pods Frameworks */, + 33B24C690BD4B02DCC978698 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,40 +323,40 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 031FA17996CC4882D4AF14D9 /* [CP] Embed Pods Frameworks */ = { + 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + ); outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; + shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; }; - 3399D490228B24CF009A79C7 /* ShellScript */ = { + 33B24C690BD4B02DCC978698 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - ); + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; }; 33CC111E2044C6BF0003C045 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; @@ -378,7 +378,7 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - ABDEED064F2EE34AC0D864AE /* [CP] Check Pods Manifest.lock */ = { + 8BBDD854D9E775DA9D2E29E7 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -400,7 +400,7 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - B9E6980CAE17BFE6BF2A9555 /* [CP] Check Pods Manifest.lock */ = { + 8D3EC8A5A25E8C0969226ECA /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = E881F22E1ED9CF3723A13CEC /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 2BE96204F8153212C1B2FFD5 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = F1D90A111512887B7981FE7C /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 095235CA8E3718CE04BECCFD /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 25E382F5DE97D2D47426B59B /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 1965E0AFE652202B66FE3359 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/boring_to_beautiful/step_05/web/index.html b/boring_to_beautiful/step_05/web/index.html index e0a0abbbbf..0a8bd1ab80 100644 --- a/boring_to_beautiful/step_05/web/index.html +++ b/boring_to_beautiful/step_05/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/boring_to_beautiful/step_06/android/gradle.properties b/boring_to_beautiful/step_06/android/gradle.properties index f018a61817..2597170821 100644 --- a/boring_to_beautiful/step_06/android/gradle.properties +++ b/boring_to_beautiful/step_06/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/boring_to_beautiful/step_06/ios/Runner.xcodeproj/project.pbxproj b/boring_to_beautiful/step_06/ios/Runner.xcodeproj/project.pbxproj index 27188f1a29..d33a503139 100644 --- a/boring_to_beautiful/step_06/ios/Runner.xcodeproj/project.pbxproj +++ b/boring_to_beautiful/step_06/ios/Runner.xcodeproj/project.pbxproj @@ -8,14 +8,14 @@ /* Begin PBXBuildFile section */ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; - 208962B53868BF2AFCDAD8E7 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 32C8ACDFE0B7706E1D63C8FC /* Pods_Runner.framework */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; + 49381EA0685B1F13BE864379 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CB41BC21C7A12C73E18A4BD4 /* Pods_RunnerTests.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - A4B9B73FBC1F47ACF4A1C4A0 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F27A303A186C2A0809FCFE71 /* Pods_RunnerTests.framework */; }; + C0064E05A4506D109FC14284 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FF179308D1EFBD41B1CD1303 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,16 +42,16 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 028B86D9E5D62F1DCB40F65B /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 0F5809B4F9F50DCE58AED982 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 32C8ACDFE0B7706E1D63C8FC /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 1EC93CE997E0EDD54CB41295 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 44AD5815711D9A48D9B79930 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - 4E2630CD278C99A068304BFF /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 458F284D4389ADAFFD7FBAA5 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 46ED109558BB0B52911CEDF2 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 507F761A690329C8C75A65E2 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 57AE46D9D874FE5FFBB3E047 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; @@ -62,25 +62,25 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - AAD1FCD230C27D91828B1C7E /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - B521B76D1194933A83E8CA4F /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - F27A303A186C2A0809FCFE71 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + AA54CE87B515BC3531FEEF48 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + CB41BC21C7A12C73E18A4BD4 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + FF179308D1EFBD41B1CD1303 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 97C146EB1CF9000F007C117D /* Frameworks */ = { + 515422840D633F6AC1588AC7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 208962B53868BF2AFCDAD8E7 /* Pods_Runner.framework in Frameworks */, + 49381EA0685B1F13BE864379 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - F1EB1A38D8D843224D93C592 /* Frameworks */ = { + 97C146EB1CF9000F007C117D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - A4B9B73FBC1F47ACF4A1C4A0 /* Pods_RunnerTests.framework in Frameworks */, + C0064E05A4506D109FC14284 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -95,11 +95,11 @@ path = RunnerTests; sourceTree = ""; }; - 4F504FD1A7DEAA11371FD812 /* Frameworks */ = { + 760CB6645FC65AE3E9230AD2 /* Frameworks */ = { isa = PBXGroup; children = ( - 32C8ACDFE0B7706E1D63C8FC /* Pods_Runner.framework */, - F27A303A186C2A0809FCFE71 /* Pods_RunnerTests.framework */, + FF179308D1EFBD41B1CD1303 /* Pods_Runner.framework */, + CB41BC21C7A12C73E18A4BD4 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -122,8 +122,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - EEC228E83A67A67530E39534 /* Pods */, - 4F504FD1A7DEAA11371FD812 /* Frameworks */, + BD60B01F7CC3F37BDE902B8C /* Pods */, + 760CB6645FC65AE3E9230AD2 /* Frameworks */, ); sourceTree = ""; }; @@ -151,15 +151,15 @@ path = Runner; sourceTree = ""; }; - EEC228E83A67A67530E39534 /* Pods */ = { + BD60B01F7CC3F37BDE902B8C /* Pods */ = { isa = PBXGroup; children = ( - 4E2630CD278C99A068304BFF /* Pods-Runner.debug.xcconfig */, - B521B76D1194933A83E8CA4F /* Pods-Runner.release.xcconfig */, - AAD1FCD230C27D91828B1C7E /* Pods-Runner.profile.xcconfig */, - 028B86D9E5D62F1DCB40F65B /* Pods-RunnerTests.debug.xcconfig */, - 44AD5815711D9A48D9B79930 /* Pods-RunnerTests.release.xcconfig */, - 0F5809B4F9F50DCE58AED982 /* Pods-RunnerTests.profile.xcconfig */, + 507F761A690329C8C75A65E2 /* Pods-Runner.debug.xcconfig */, + 458F284D4389ADAFFD7FBAA5 /* Pods-Runner.release.xcconfig */, + 46ED109558BB0B52911CEDF2 /* Pods-Runner.profile.xcconfig */, + AA54CE87B515BC3531FEEF48 /* Pods-RunnerTests.debug.xcconfig */, + 57AE46D9D874FE5FFBB3E047 /* Pods-RunnerTests.release.xcconfig */, + 1EC93CE997E0EDD54CB41295 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 0033FF9EDA59710A08D92356 /* [CP] Check Pods Manifest.lock */, + D56C93D4DD0C64DF97BCE97D /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - F1EB1A38D8D843224D93C592 /* Frameworks */, + 515422840D633F6AC1588AC7 /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 61E108675EDD4B5F14470A53 /* [CP] Check Pods Manifest.lock */, + 41BD58AF92D87F35673F336C /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 988934BE9015DDB2BD2671E2 /* [CP] Embed Pods Frameworks */, + 4BF732A76041B0DBA38F7214 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -270,28 +270,6 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 0033FF9EDA59710A08D92356 /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -308,7 +286,7 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 61E108675EDD4B5F14470A53 /* [CP] Check Pods Manifest.lock */ = { + 41BD58AF92D87F35673F336C /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -330,6 +308,23 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; + 4BF732A76041B0DBA38F7214 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -345,21 +340,26 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - 988934BE9015DDB2BD2671E2 /* [CP] Embed Pods Frameworks */ = { + D56C93D4DD0C64DF97BCE97D /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 028B86D9E5D62F1DCB40F65B /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = AA54CE87B515BC3531FEEF48 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 44AD5815711D9A48D9B79930 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 57AE46D9D874FE5FFBB3E047 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 0F5809B4F9F50DCE58AED982 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 1EC93CE997E0EDD54CB41295 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/boring_to_beautiful/step_06/linux/CMakeLists.txt b/boring_to_beautiful/step_06/linux/CMakeLists.txt index 0565f6a409..74a8344fa9 100644 --- a/boring_to_beautiful/step_06/linux/CMakeLists.txt +++ b/boring_to_beautiful/step_06/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.13) +cmake_minimum_required(VERSION 3.10) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,8 +54,25 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -# Application build; see runner/CMakeLists.txt. -add_subdirectory("runner") +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Define the application target. To change its name, change BINARY_NAME above, +# not the value here, or `flutter run` will no longer work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/boring_to_beautiful/step_06/linux/runner/main.cc b/boring_to_beautiful/step_06/linux/main.cc similarity index 100% rename from boring_to_beautiful/step_06/linux/runner/main.cc rename to boring_to_beautiful/step_06/linux/main.cc diff --git a/boring_to_beautiful/step_06/linux/my_application.cc b/boring_to_beautiful/step_06/linux/my_application.cc new file mode 100644 index 0000000000..59e1394236 --- /dev/null +++ b/boring_to_beautiful/step_06/linux/my_application.cc @@ -0,0 +1,124 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "myartist"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "myartist"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/boring_to_beautiful/step_06/linux/runner/my_application.h b/boring_to_beautiful/step_06/linux/my_application.h similarity index 100% rename from boring_to_beautiful/step_06/linux/runner/my_application.h rename to boring_to_beautiful/step_06/linux/my_application.h diff --git a/boring_to_beautiful/step_06/linux/runner/CMakeLists.txt b/boring_to_beautiful/step_06/linux/runner/CMakeLists.txt deleted file mode 100644 index e97dabc702..0000000000 --- a/boring_to_beautiful/step_06/linux/runner/CMakeLists.txt +++ /dev/null @@ -1,26 +0,0 @@ -cmake_minimum_required(VERSION 3.13) -project(runner LANGUAGES CXX) - -# Define the application target. To change its name, change BINARY_NAME in the -# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer -# work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add preprocessor definitions for the application ID. -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) - -target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/boring_to_beautiful/step_06/linux/runner/my_application.cc b/boring_to_beautiful/step_06/linux/runner/my_application.cc deleted file mode 100644 index f93ba9f71c..0000000000 --- a/boring_to_beautiful/step_06/linux/runner/my_application.cc +++ /dev/null @@ -1,130 +0,0 @@ -#include "my_application.h" - -#include -#ifdef GDK_WINDOWING_X11 -#include -#endif - -#include "flutter/generated_plugin_registrant.h" - -struct _MyApplication { - GtkApplication parent_instance; - char** dart_entrypoint_arguments; -}; - -G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) - -// Implements GApplication::activate. -static void my_application_activate(GApplication* application) { - MyApplication* self = MY_APPLICATION(application); - GtkWindow* window = - GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); - - // Use a header bar when running in GNOME as this is the common style used - // by applications and is the setup most users will be using (e.g. Ubuntu - // desktop). - // If running on X and not using GNOME then just use a traditional title bar - // in case the window manager does more exotic layout, e.g. tiling. - // If running on Wayland assume the header bar will work (may need changing - // if future cases occur). - gboolean use_header_bar = TRUE; -#ifdef GDK_WINDOWING_X11 - GdkScreen* screen = gtk_window_get_screen(window); - if (GDK_IS_X11_SCREEN(screen)) { - const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); - if (g_strcmp0(wm_name, "GNOME Shell") != 0) { - use_header_bar = FALSE; - } - } -#endif - if (use_header_bar) { - GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); - gtk_widget_show(GTK_WIDGET(header_bar)); - gtk_header_bar_set_title(header_bar, "myartist"); - gtk_header_bar_set_show_close_button(header_bar, TRUE); - gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); - } else { - gtk_window_set_title(window, "myartist"); - } - - gtk_window_set_default_size(window, 1280, 720); - gtk_widget_show(GTK_WIDGET(window)); - - g_autoptr(FlDartProject) project = fl_dart_project_new(); - fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); - - FlView* view = fl_view_new(project); - gtk_widget_show(GTK_WIDGET(view)); - gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); - - fl_register_plugins(FL_PLUGIN_REGISTRY(view)); - - gtk_widget_grab_focus(GTK_WIDGET(view)); -} - -// Implements GApplication::local_command_line. -static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { - MyApplication* self = MY_APPLICATION(application); - // Strip out the first argument as it is the binary name. - self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); - - g_autoptr(GError) error = nullptr; - if (!g_application_register(application, nullptr, &error)) { - g_warning("Failed to register: %s", error->message); - *exit_status = 1; - return TRUE; - } - - g_application_activate(application); - *exit_status = 0; - - return TRUE; -} - -// Implements GApplication::startup. -static void my_application_startup(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application startup. - - G_APPLICATION_CLASS(my_application_parent_class)->startup(application); -} - -// Implements GApplication::shutdown. -static void my_application_shutdown(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application shutdown. - - G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); -} - -// Implements GObject::dispose. -static void my_application_dispose(GObject* object) { - MyApplication* self = MY_APPLICATION(object); - g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); - G_OBJECT_CLASS(my_application_parent_class)->dispose(object); -} - -static void my_application_class_init(MyApplicationClass* klass) { - G_APPLICATION_CLASS(klass)->activate = my_application_activate; - G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; - G_APPLICATION_CLASS(klass)->startup = my_application_startup; - G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; - G_OBJECT_CLASS(klass)->dispose = my_application_dispose; -} - -static void my_application_init(MyApplication* self) {} - -MyApplication* my_application_new() { - // Set the program name to the application ID, which helps various systems - // like GTK and desktop environments map this running application to its - // corresponding .desktop file. This ensures better integration by allowing - // the application to be recognized beyond its binary name. - g_set_prgname(APPLICATION_ID); - - return MY_APPLICATION(g_object_new(my_application_get_type(), - "application-id", APPLICATION_ID, - "flags", G_APPLICATION_NON_UNIQUE, - nullptr)); -} diff --git a/boring_to_beautiful/step_06/macos/Runner.xcodeproj/project.pbxproj b/boring_to_beautiful/step_06/macos/Runner.xcodeproj/project.pbxproj index a4ba51afb5..11e7ec7971 100644 --- a/boring_to_beautiful/step_06/macos/Runner.xcodeproj/project.pbxproj +++ b/boring_to_beautiful/step_06/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ + 122A14BB17CAE5827A96C600 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E721C61EEA1D01D1541205E2 /* Pods_RunnerTests.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 4199224406A25A7474E0C79E /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 36423EA0CDE5981423B48AEE /* Pods_Runner.framework */; }; - 91BCC9003B49CC98CECBF0EC /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B80D78B7F0831CA886CFE751 /* Pods_RunnerTests.framework */; }; + C0A311100478C3723AF3A1A3 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2B7F6D65CBE030418F0F8AFE /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,7 +62,10 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 25E382F5DE97D2D47426B59B /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 095235CA8E3718CE04BECCFD /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 1965E0AFE652202B66FE3359 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 2B7F6D65CBE030418F0F8AFE /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 2BE96204F8153212C1B2FFD5 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -79,15 +82,12 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 36423EA0CDE5981423B48AEE /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 59981915FE452EAD0B851E3D /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 92320B2EDC5B05B44B5CC56F /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - A0563A63B8D8D2BB44A67D02 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - B80D78B7F0831CA886CFE751 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - E881F22E1ED9CF3723A13CEC /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - F1D90A111512887B7981FE7C /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + B1C9C34FAF086E24D95B4FE5 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + B2992FC7568D7321F2EE4E8A /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + DA0493143D84740D445AC807 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + E721C61EEA1D01D1541205E2 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 91BCC9003B49CC98CECBF0EC /* Pods_RunnerTests.framework in Frameworks */, + 122A14BB17CAE5827A96C600 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,13 +103,27 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 4199224406A25A7474E0C79E /* Pods_Runner.framework in Frameworks */, + C0A311100478C3723AF3A1A3 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 1B3BB2FE7EC0BD319E6A18A5 /* Pods */ = { + isa = PBXGroup; + children = ( + B1C9C34FAF086E24D95B4FE5 /* Pods-Runner.debug.xcconfig */, + B2992FC7568D7321F2EE4E8A /* Pods-Runner.release.xcconfig */, + DA0493143D84740D445AC807 /* Pods-Runner.profile.xcconfig */, + 2BE96204F8153212C1B2FFD5 /* Pods-RunnerTests.debug.xcconfig */, + 095235CA8E3718CE04BECCFD /* Pods-RunnerTests.release.xcconfig */, + 1965E0AFE652202B66FE3359 /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; 331C80D6294CF71000263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -137,7 +151,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 7F3DCCA95ED45892CA7CC729 /* Pods */, + 1B3BB2FE7EC0BD319E6A18A5 /* Pods */, ); sourceTree = ""; }; @@ -185,25 +199,11 @@ path = Runner; sourceTree = ""; }; - 7F3DCCA95ED45892CA7CC729 /* Pods */ = { - isa = PBXGroup; - children = ( - A0563A63B8D8D2BB44A67D02 /* Pods-Runner.debug.xcconfig */, - 92320B2EDC5B05B44B5CC56F /* Pods-Runner.release.xcconfig */, - 59981915FE452EAD0B851E3D /* Pods-Runner.profile.xcconfig */, - E881F22E1ED9CF3723A13CEC /* Pods-RunnerTests.debug.xcconfig */, - F1D90A111512887B7981FE7C /* Pods-RunnerTests.release.xcconfig */, - 25E382F5DE97D2D47426B59B /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - 36423EA0CDE5981423B48AEE /* Pods_Runner.framework */, - B80D78B7F0831CA886CFE751 /* Pods_RunnerTests.framework */, + 2B7F6D65CBE030418F0F8AFE /* Pods_Runner.framework */, + E721C61EEA1D01D1541205E2 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - ABDEED064F2EE34AC0D864AE /* [CP] Check Pods Manifest.lock */, + 8BBDD854D9E775DA9D2E29E7 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - B9E6980CAE17BFE6BF2A9555 /* [CP] Check Pods Manifest.lock */, + 8D3EC8A5A25E8C0969226ECA /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 031FA17996CC4882D4AF14D9 /* [CP] Embed Pods Frameworks */, + 33B24C690BD4B02DCC978698 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,40 +323,40 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 031FA17996CC4882D4AF14D9 /* [CP] Embed Pods Frameworks */ = { + 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + ); outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; + shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; }; - 3399D490228B24CF009A79C7 /* ShellScript */ = { + 33B24C690BD4B02DCC978698 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - ); + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; }; 33CC111E2044C6BF0003C045 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; @@ -378,7 +378,7 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - ABDEED064F2EE34AC0D864AE /* [CP] Check Pods Manifest.lock */ = { + 8BBDD854D9E775DA9D2E29E7 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -400,7 +400,7 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - B9E6980CAE17BFE6BF2A9555 /* [CP] Check Pods Manifest.lock */ = { + 8D3EC8A5A25E8C0969226ECA /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = E881F22E1ED9CF3723A13CEC /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 2BE96204F8153212C1B2FFD5 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = F1D90A111512887B7981FE7C /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 095235CA8E3718CE04BECCFD /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 25E382F5DE97D2D47426B59B /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 1965E0AFE652202B66FE3359 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/boring_to_beautiful/step_06/web/index.html b/boring_to_beautiful/step_06/web/index.html index e0a0abbbbf..0a8bd1ab80 100644 --- a/boring_to_beautiful/step_06/web/index.html +++ b/boring_to_beautiful/step_06/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/boring_to_beautiful/step_07/android/gradle.properties b/boring_to_beautiful/step_07/android/gradle.properties index f018a61817..2597170821 100644 --- a/boring_to_beautiful/step_07/android/gradle.properties +++ b/boring_to_beautiful/step_07/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/boring_to_beautiful/step_07/ios/Runner.xcodeproj/project.pbxproj b/boring_to_beautiful/step_07/ios/Runner.xcodeproj/project.pbxproj index 27188f1a29..d33a503139 100644 --- a/boring_to_beautiful/step_07/ios/Runner.xcodeproj/project.pbxproj +++ b/boring_to_beautiful/step_07/ios/Runner.xcodeproj/project.pbxproj @@ -8,14 +8,14 @@ /* Begin PBXBuildFile section */ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; - 208962B53868BF2AFCDAD8E7 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 32C8ACDFE0B7706E1D63C8FC /* Pods_Runner.framework */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; + 49381EA0685B1F13BE864379 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CB41BC21C7A12C73E18A4BD4 /* Pods_RunnerTests.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - A4B9B73FBC1F47ACF4A1C4A0 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F27A303A186C2A0809FCFE71 /* Pods_RunnerTests.framework */; }; + C0064E05A4506D109FC14284 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FF179308D1EFBD41B1CD1303 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,16 +42,16 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 028B86D9E5D62F1DCB40F65B /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 0F5809B4F9F50DCE58AED982 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 32C8ACDFE0B7706E1D63C8FC /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 1EC93CE997E0EDD54CB41295 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 44AD5815711D9A48D9B79930 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - 4E2630CD278C99A068304BFF /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 458F284D4389ADAFFD7FBAA5 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 46ED109558BB0B52911CEDF2 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 507F761A690329C8C75A65E2 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 57AE46D9D874FE5FFBB3E047 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; @@ -62,25 +62,25 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - AAD1FCD230C27D91828B1C7E /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - B521B76D1194933A83E8CA4F /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - F27A303A186C2A0809FCFE71 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + AA54CE87B515BC3531FEEF48 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + CB41BC21C7A12C73E18A4BD4 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + FF179308D1EFBD41B1CD1303 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 97C146EB1CF9000F007C117D /* Frameworks */ = { + 515422840D633F6AC1588AC7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 208962B53868BF2AFCDAD8E7 /* Pods_Runner.framework in Frameworks */, + 49381EA0685B1F13BE864379 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - F1EB1A38D8D843224D93C592 /* Frameworks */ = { + 97C146EB1CF9000F007C117D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - A4B9B73FBC1F47ACF4A1C4A0 /* Pods_RunnerTests.framework in Frameworks */, + C0064E05A4506D109FC14284 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -95,11 +95,11 @@ path = RunnerTests; sourceTree = ""; }; - 4F504FD1A7DEAA11371FD812 /* Frameworks */ = { + 760CB6645FC65AE3E9230AD2 /* Frameworks */ = { isa = PBXGroup; children = ( - 32C8ACDFE0B7706E1D63C8FC /* Pods_Runner.framework */, - F27A303A186C2A0809FCFE71 /* Pods_RunnerTests.framework */, + FF179308D1EFBD41B1CD1303 /* Pods_Runner.framework */, + CB41BC21C7A12C73E18A4BD4 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -122,8 +122,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - EEC228E83A67A67530E39534 /* Pods */, - 4F504FD1A7DEAA11371FD812 /* Frameworks */, + BD60B01F7CC3F37BDE902B8C /* Pods */, + 760CB6645FC65AE3E9230AD2 /* Frameworks */, ); sourceTree = ""; }; @@ -151,15 +151,15 @@ path = Runner; sourceTree = ""; }; - EEC228E83A67A67530E39534 /* Pods */ = { + BD60B01F7CC3F37BDE902B8C /* Pods */ = { isa = PBXGroup; children = ( - 4E2630CD278C99A068304BFF /* Pods-Runner.debug.xcconfig */, - B521B76D1194933A83E8CA4F /* Pods-Runner.release.xcconfig */, - AAD1FCD230C27D91828B1C7E /* Pods-Runner.profile.xcconfig */, - 028B86D9E5D62F1DCB40F65B /* Pods-RunnerTests.debug.xcconfig */, - 44AD5815711D9A48D9B79930 /* Pods-RunnerTests.release.xcconfig */, - 0F5809B4F9F50DCE58AED982 /* Pods-RunnerTests.profile.xcconfig */, + 507F761A690329C8C75A65E2 /* Pods-Runner.debug.xcconfig */, + 458F284D4389ADAFFD7FBAA5 /* Pods-Runner.release.xcconfig */, + 46ED109558BB0B52911CEDF2 /* Pods-Runner.profile.xcconfig */, + AA54CE87B515BC3531FEEF48 /* Pods-RunnerTests.debug.xcconfig */, + 57AE46D9D874FE5FFBB3E047 /* Pods-RunnerTests.release.xcconfig */, + 1EC93CE997E0EDD54CB41295 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 0033FF9EDA59710A08D92356 /* [CP] Check Pods Manifest.lock */, + D56C93D4DD0C64DF97BCE97D /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - F1EB1A38D8D843224D93C592 /* Frameworks */, + 515422840D633F6AC1588AC7 /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 61E108675EDD4B5F14470A53 /* [CP] Check Pods Manifest.lock */, + 41BD58AF92D87F35673F336C /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 988934BE9015DDB2BD2671E2 /* [CP] Embed Pods Frameworks */, + 4BF732A76041B0DBA38F7214 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -270,28 +270,6 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 0033FF9EDA59710A08D92356 /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -308,7 +286,7 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 61E108675EDD4B5F14470A53 /* [CP] Check Pods Manifest.lock */ = { + 41BD58AF92D87F35673F336C /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -330,6 +308,23 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; + 4BF732A76041B0DBA38F7214 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -345,21 +340,26 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - 988934BE9015DDB2BD2671E2 /* [CP] Embed Pods Frameworks */ = { + D56C93D4DD0C64DF97BCE97D /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 028B86D9E5D62F1DCB40F65B /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = AA54CE87B515BC3531FEEF48 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 44AD5815711D9A48D9B79930 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 57AE46D9D874FE5FFBB3E047 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 0F5809B4F9F50DCE58AED982 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 1EC93CE997E0EDD54CB41295 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/boring_to_beautiful/step_07/linux/CMakeLists.txt b/boring_to_beautiful/step_07/linux/CMakeLists.txt index 0565f6a409..74a8344fa9 100644 --- a/boring_to_beautiful/step_07/linux/CMakeLists.txt +++ b/boring_to_beautiful/step_07/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.13) +cmake_minimum_required(VERSION 3.10) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,8 +54,25 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -# Application build; see runner/CMakeLists.txt. -add_subdirectory("runner") +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Define the application target. To change its name, change BINARY_NAME above, +# not the value here, or `flutter run` will no longer work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/boring_to_beautiful/step_07/linux/runner/main.cc b/boring_to_beautiful/step_07/linux/main.cc similarity index 100% rename from boring_to_beautiful/step_07/linux/runner/main.cc rename to boring_to_beautiful/step_07/linux/main.cc diff --git a/boring_to_beautiful/step_07/linux/my_application.cc b/boring_to_beautiful/step_07/linux/my_application.cc new file mode 100644 index 0000000000..59e1394236 --- /dev/null +++ b/boring_to_beautiful/step_07/linux/my_application.cc @@ -0,0 +1,124 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "myartist"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "myartist"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/boring_to_beautiful/step_07/linux/runner/my_application.h b/boring_to_beautiful/step_07/linux/my_application.h similarity index 100% rename from boring_to_beautiful/step_07/linux/runner/my_application.h rename to boring_to_beautiful/step_07/linux/my_application.h diff --git a/boring_to_beautiful/step_07/linux/runner/CMakeLists.txt b/boring_to_beautiful/step_07/linux/runner/CMakeLists.txt deleted file mode 100644 index e97dabc702..0000000000 --- a/boring_to_beautiful/step_07/linux/runner/CMakeLists.txt +++ /dev/null @@ -1,26 +0,0 @@ -cmake_minimum_required(VERSION 3.13) -project(runner LANGUAGES CXX) - -# Define the application target. To change its name, change BINARY_NAME in the -# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer -# work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add preprocessor definitions for the application ID. -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) - -target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/boring_to_beautiful/step_07/linux/runner/my_application.cc b/boring_to_beautiful/step_07/linux/runner/my_application.cc deleted file mode 100644 index f93ba9f71c..0000000000 --- a/boring_to_beautiful/step_07/linux/runner/my_application.cc +++ /dev/null @@ -1,130 +0,0 @@ -#include "my_application.h" - -#include -#ifdef GDK_WINDOWING_X11 -#include -#endif - -#include "flutter/generated_plugin_registrant.h" - -struct _MyApplication { - GtkApplication parent_instance; - char** dart_entrypoint_arguments; -}; - -G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) - -// Implements GApplication::activate. -static void my_application_activate(GApplication* application) { - MyApplication* self = MY_APPLICATION(application); - GtkWindow* window = - GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); - - // Use a header bar when running in GNOME as this is the common style used - // by applications and is the setup most users will be using (e.g. Ubuntu - // desktop). - // If running on X and not using GNOME then just use a traditional title bar - // in case the window manager does more exotic layout, e.g. tiling. - // If running on Wayland assume the header bar will work (may need changing - // if future cases occur). - gboolean use_header_bar = TRUE; -#ifdef GDK_WINDOWING_X11 - GdkScreen* screen = gtk_window_get_screen(window); - if (GDK_IS_X11_SCREEN(screen)) { - const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); - if (g_strcmp0(wm_name, "GNOME Shell") != 0) { - use_header_bar = FALSE; - } - } -#endif - if (use_header_bar) { - GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); - gtk_widget_show(GTK_WIDGET(header_bar)); - gtk_header_bar_set_title(header_bar, "myartist"); - gtk_header_bar_set_show_close_button(header_bar, TRUE); - gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); - } else { - gtk_window_set_title(window, "myartist"); - } - - gtk_window_set_default_size(window, 1280, 720); - gtk_widget_show(GTK_WIDGET(window)); - - g_autoptr(FlDartProject) project = fl_dart_project_new(); - fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); - - FlView* view = fl_view_new(project); - gtk_widget_show(GTK_WIDGET(view)); - gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); - - fl_register_plugins(FL_PLUGIN_REGISTRY(view)); - - gtk_widget_grab_focus(GTK_WIDGET(view)); -} - -// Implements GApplication::local_command_line. -static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { - MyApplication* self = MY_APPLICATION(application); - // Strip out the first argument as it is the binary name. - self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); - - g_autoptr(GError) error = nullptr; - if (!g_application_register(application, nullptr, &error)) { - g_warning("Failed to register: %s", error->message); - *exit_status = 1; - return TRUE; - } - - g_application_activate(application); - *exit_status = 0; - - return TRUE; -} - -// Implements GApplication::startup. -static void my_application_startup(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application startup. - - G_APPLICATION_CLASS(my_application_parent_class)->startup(application); -} - -// Implements GApplication::shutdown. -static void my_application_shutdown(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application shutdown. - - G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); -} - -// Implements GObject::dispose. -static void my_application_dispose(GObject* object) { - MyApplication* self = MY_APPLICATION(object); - g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); - G_OBJECT_CLASS(my_application_parent_class)->dispose(object); -} - -static void my_application_class_init(MyApplicationClass* klass) { - G_APPLICATION_CLASS(klass)->activate = my_application_activate; - G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; - G_APPLICATION_CLASS(klass)->startup = my_application_startup; - G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; - G_OBJECT_CLASS(klass)->dispose = my_application_dispose; -} - -static void my_application_init(MyApplication* self) {} - -MyApplication* my_application_new() { - // Set the program name to the application ID, which helps various systems - // like GTK and desktop environments map this running application to its - // corresponding .desktop file. This ensures better integration by allowing - // the application to be recognized beyond its binary name. - g_set_prgname(APPLICATION_ID); - - return MY_APPLICATION(g_object_new(my_application_get_type(), - "application-id", APPLICATION_ID, - "flags", G_APPLICATION_NON_UNIQUE, - nullptr)); -} diff --git a/boring_to_beautiful/step_07/macos/Runner.xcodeproj/project.pbxproj b/boring_to_beautiful/step_07/macos/Runner.xcodeproj/project.pbxproj index a4ba51afb5..11e7ec7971 100644 --- a/boring_to_beautiful/step_07/macos/Runner.xcodeproj/project.pbxproj +++ b/boring_to_beautiful/step_07/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ + 122A14BB17CAE5827A96C600 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E721C61EEA1D01D1541205E2 /* Pods_RunnerTests.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 4199224406A25A7474E0C79E /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 36423EA0CDE5981423B48AEE /* Pods_Runner.framework */; }; - 91BCC9003B49CC98CECBF0EC /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B80D78B7F0831CA886CFE751 /* Pods_RunnerTests.framework */; }; + C0A311100478C3723AF3A1A3 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2B7F6D65CBE030418F0F8AFE /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,7 +62,10 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 25E382F5DE97D2D47426B59B /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 095235CA8E3718CE04BECCFD /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 1965E0AFE652202B66FE3359 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 2B7F6D65CBE030418F0F8AFE /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 2BE96204F8153212C1B2FFD5 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -79,15 +82,12 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 36423EA0CDE5981423B48AEE /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 59981915FE452EAD0B851E3D /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 92320B2EDC5B05B44B5CC56F /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - A0563A63B8D8D2BB44A67D02 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - B80D78B7F0831CA886CFE751 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - E881F22E1ED9CF3723A13CEC /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - F1D90A111512887B7981FE7C /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + B1C9C34FAF086E24D95B4FE5 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + B2992FC7568D7321F2EE4E8A /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + DA0493143D84740D445AC807 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + E721C61EEA1D01D1541205E2 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 91BCC9003B49CC98CECBF0EC /* Pods_RunnerTests.framework in Frameworks */, + 122A14BB17CAE5827A96C600 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,13 +103,27 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 4199224406A25A7474E0C79E /* Pods_Runner.framework in Frameworks */, + C0A311100478C3723AF3A1A3 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 1B3BB2FE7EC0BD319E6A18A5 /* Pods */ = { + isa = PBXGroup; + children = ( + B1C9C34FAF086E24D95B4FE5 /* Pods-Runner.debug.xcconfig */, + B2992FC7568D7321F2EE4E8A /* Pods-Runner.release.xcconfig */, + DA0493143D84740D445AC807 /* Pods-Runner.profile.xcconfig */, + 2BE96204F8153212C1B2FFD5 /* Pods-RunnerTests.debug.xcconfig */, + 095235CA8E3718CE04BECCFD /* Pods-RunnerTests.release.xcconfig */, + 1965E0AFE652202B66FE3359 /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; 331C80D6294CF71000263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -137,7 +151,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 7F3DCCA95ED45892CA7CC729 /* Pods */, + 1B3BB2FE7EC0BD319E6A18A5 /* Pods */, ); sourceTree = ""; }; @@ -185,25 +199,11 @@ path = Runner; sourceTree = ""; }; - 7F3DCCA95ED45892CA7CC729 /* Pods */ = { - isa = PBXGroup; - children = ( - A0563A63B8D8D2BB44A67D02 /* Pods-Runner.debug.xcconfig */, - 92320B2EDC5B05B44B5CC56F /* Pods-Runner.release.xcconfig */, - 59981915FE452EAD0B851E3D /* Pods-Runner.profile.xcconfig */, - E881F22E1ED9CF3723A13CEC /* Pods-RunnerTests.debug.xcconfig */, - F1D90A111512887B7981FE7C /* Pods-RunnerTests.release.xcconfig */, - 25E382F5DE97D2D47426B59B /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - 36423EA0CDE5981423B48AEE /* Pods_Runner.framework */, - B80D78B7F0831CA886CFE751 /* Pods_RunnerTests.framework */, + 2B7F6D65CBE030418F0F8AFE /* Pods_Runner.framework */, + E721C61EEA1D01D1541205E2 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - ABDEED064F2EE34AC0D864AE /* [CP] Check Pods Manifest.lock */, + 8BBDD854D9E775DA9D2E29E7 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - B9E6980CAE17BFE6BF2A9555 /* [CP] Check Pods Manifest.lock */, + 8D3EC8A5A25E8C0969226ECA /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 031FA17996CC4882D4AF14D9 /* [CP] Embed Pods Frameworks */, + 33B24C690BD4B02DCC978698 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,40 +323,40 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 031FA17996CC4882D4AF14D9 /* [CP] Embed Pods Frameworks */ = { + 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + ); outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; + shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; }; - 3399D490228B24CF009A79C7 /* ShellScript */ = { + 33B24C690BD4B02DCC978698 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - ); + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; }; 33CC111E2044C6BF0003C045 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; @@ -378,7 +378,7 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - ABDEED064F2EE34AC0D864AE /* [CP] Check Pods Manifest.lock */ = { + 8BBDD854D9E775DA9D2E29E7 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -400,7 +400,7 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - B9E6980CAE17BFE6BF2A9555 /* [CP] Check Pods Manifest.lock */ = { + 8D3EC8A5A25E8C0969226ECA /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = E881F22E1ED9CF3723A13CEC /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 2BE96204F8153212C1B2FFD5 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = F1D90A111512887B7981FE7C /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 095235CA8E3718CE04BECCFD /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 25E382F5DE97D2D47426B59B /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 1965E0AFE652202B66FE3359 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/boring_to_beautiful/step_07/web/index.html b/boring_to_beautiful/step_07/web/index.html index e0a0abbbbf..0a8bd1ab80 100644 --- a/boring_to_beautiful/step_07/web/index.html +++ b/boring_to_beautiful/step_07/web/index.html @@ -21,7 +21,7 @@ - + From adbf0f63b4d175b02e8e2d977785b27ba10897de Mon Sep 17 00:00:00 2001 From: Brett Morgan Date: Fri, 18 Oct 2024 10:24:45 +1100 Subject: [PATCH 019/108] Update `brick_breaker` for flutter beta --- .../step_03/android/gradle.properties | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 124 ++++++++--------- brick_breaker/step_03/linux/CMakeLists.txt | 23 +++- .../step_03/linux/{runner => }/main.cc | 0 .../linux}/my_application.cc | 6 - .../linux/{runner => }/my_application.h | 0 .../step_03/linux/runner/CMakeLists.txt | 26 ---- .../macos/Runner.xcodeproj/project.pbxproj | 104 +++++++------- brick_breaker/step_03/web/index.html | 2 +- .../step_04/android/gradle.properties | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 124 ++++++++--------- brick_breaker/step_04/linux/CMakeLists.txt | 23 +++- .../step_04/linux/{runner => }/main.cc | 0 .../linux}/my_application.cc | 6 - .../linux/{runner => }/my_application.h | 0 .../step_04/linux/runner/CMakeLists.txt | 26 ---- .../macos/Runner.xcodeproj/project.pbxproj | 104 +++++++------- brick_breaker/step_04/web/index.html | 2 +- .../step_05/android/gradle.properties | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 124 ++++++++--------- brick_breaker/step_05/linux/CMakeLists.txt | 23 +++- .../step_05/linux/{runner => }/main.cc | 0 .../linux}/my_application.cc | 6 - .../linux/{runner => }/my_application.h | 0 .../step_05/linux/runner/CMakeLists.txt | 26 ---- .../macos/Runner.xcodeproj/project.pbxproj | 104 +++++++------- brick_breaker/step_05/web/index.html | 2 +- .../step_06/android/gradle.properties | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 124 ++++++++--------- brick_breaker/step_06/linux/CMakeLists.txt | 23 +++- .../step_06/linux/{runner => }/main.cc | 0 .../linux}/my_application.cc | 6 - .../linux/{runner => }/my_application.h | 0 .../step_06/linux/runner/CMakeLists.txt | 26 ---- .../macos/Runner.xcodeproj/project.pbxproj | 104 +++++++------- brick_breaker/step_06/web/index.html | 2 +- .../step_07/android/gradle.properties | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 124 ++++++++--------- brick_breaker/step_07/linux/CMakeLists.txt | 23 +++- .../step_07/linux/{runner => }/main.cc | 0 brick_breaker/step_07/linux/my_application.cc | 124 +++++++++++++++++ .../linux/{runner => }/my_application.h | 0 .../step_07/linux/runner/CMakeLists.txt | 26 ---- .../step_07/linux/runner/my_application.cc | 130 ------------------ .../macos/Runner.xcodeproj/project.pbxproj | 104 +++++++------- brick_breaker/step_07/web/index.html | 2 +- .../step_08/android/gradle.properties | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 124 ++++++++--------- brick_breaker/step_08/linux/CMakeLists.txt | 23 +++- .../step_08/linux/{runner => }/main.cc | 0 brick_breaker/step_08/linux/my_application.cc | 124 +++++++++++++++++ .../linux/{runner => }/my_application.h | 0 .../step_08/linux/runner/CMakeLists.txt | 26 ---- .../step_08/linux/runner/my_application.cc | 130 ------------------ .../macos/Runner.xcodeproj/project.pbxproj | 104 +++++++------- brick_breaker/step_08/web/index.html | 2 +- .../step_09/android/gradle.properties | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 124 ++++++++--------- brick_breaker/step_09/linux/CMakeLists.txt | 23 +++- .../step_09/linux/{runner => }/main.cc | 0 brick_breaker/step_09/linux/my_application.cc | 124 +++++++++++++++++ .../linux/{runner => }/my_application.h | 0 .../step_09/linux/runner/CMakeLists.txt | 26 ---- .../step_09/linux/runner/my_application.cc | 130 ------------------ .../macos/Runner.xcodeproj/project.pbxproj | 104 +++++++------- brick_breaker/step_09/web/index.html | 2 +- .../step_10/android/gradle.properties | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 124 ++++++++--------- brick_breaker/step_10/linux/CMakeLists.txt | 23 +++- .../step_10/linux/{runner => }/main.cc | 0 brick_breaker/step_10/linux/my_application.cc | 124 +++++++++++++++++ .../linux/{runner => }/my_application.h | 0 .../step_10/linux/runner/CMakeLists.txt | 26 ---- .../step_10/linux/runner/my_application.cc | 130 ------------------ .../macos/Runner.xcodeproj/project.pbxproj | 104 +++++++------- brick_breaker/step_10/web/index.html | 2 +- 76 files changed, 1584 insertions(+), 1704 deletions(-) rename brick_breaker/step_03/linux/{runner => }/main.cc (100%) rename brick_breaker/{step_05/linux/runner => step_03/linux}/my_application.cc (93%) rename brick_breaker/step_03/linux/{runner => }/my_application.h (100%) delete mode 100644 brick_breaker/step_03/linux/runner/CMakeLists.txt rename brick_breaker/step_04/linux/{runner => }/main.cc (100%) rename brick_breaker/{step_03/linux/runner => step_04/linux}/my_application.cc (93%) rename brick_breaker/step_04/linux/{runner => }/my_application.h (100%) delete mode 100644 brick_breaker/step_04/linux/runner/CMakeLists.txt rename brick_breaker/step_05/linux/{runner => }/main.cc (100%) rename brick_breaker/{step_06/linux/runner => step_05/linux}/my_application.cc (93%) rename brick_breaker/step_05/linux/{runner => }/my_application.h (100%) delete mode 100644 brick_breaker/step_05/linux/runner/CMakeLists.txt rename brick_breaker/step_06/linux/{runner => }/main.cc (100%) rename brick_breaker/{step_04/linux/runner => step_06/linux}/my_application.cc (93%) rename brick_breaker/step_06/linux/{runner => }/my_application.h (100%) delete mode 100644 brick_breaker/step_06/linux/runner/CMakeLists.txt rename brick_breaker/step_07/linux/{runner => }/main.cc (100%) create mode 100644 brick_breaker/step_07/linux/my_application.cc rename brick_breaker/step_07/linux/{runner => }/my_application.h (100%) delete mode 100644 brick_breaker/step_07/linux/runner/CMakeLists.txt delete mode 100644 brick_breaker/step_07/linux/runner/my_application.cc rename brick_breaker/step_08/linux/{runner => }/main.cc (100%) create mode 100644 brick_breaker/step_08/linux/my_application.cc rename brick_breaker/step_08/linux/{runner => }/my_application.h (100%) delete mode 100644 brick_breaker/step_08/linux/runner/CMakeLists.txt delete mode 100644 brick_breaker/step_08/linux/runner/my_application.cc rename brick_breaker/step_09/linux/{runner => }/main.cc (100%) create mode 100644 brick_breaker/step_09/linux/my_application.cc rename brick_breaker/step_09/linux/{runner => }/my_application.h (100%) delete mode 100644 brick_breaker/step_09/linux/runner/CMakeLists.txt delete mode 100644 brick_breaker/step_09/linux/runner/my_application.cc rename brick_breaker/step_10/linux/{runner => }/main.cc (100%) create mode 100644 brick_breaker/step_10/linux/my_application.cc rename brick_breaker/step_10/linux/{runner => }/my_application.h (100%) delete mode 100644 brick_breaker/step_10/linux/runner/CMakeLists.txt delete mode 100644 brick_breaker/step_10/linux/runner/my_application.cc diff --git a/brick_breaker/step_03/android/gradle.properties b/brick_breaker/step_03/android/gradle.properties index f018a61817..2597170821 100644 --- a/brick_breaker/step_03/android/gradle.properties +++ b/brick_breaker/step_03/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/brick_breaker/step_03/ios/Runner.xcodeproj/project.pbxproj b/brick_breaker/step_03/ios/Runner.xcodeproj/project.pbxproj index c78ae8b4ed..6d1a96d63a 100644 --- a/brick_breaker/step_03/ios/Runner.xcodeproj/project.pbxproj +++ b/brick_breaker/step_03/ios/Runner.xcodeproj/project.pbxproj @@ -7,11 +7,11 @@ objects = { /* Begin PBXBuildFile section */ - 079C3C1D22F2289294620456 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 230907B81ABBBE54EDD3D92A /* Pods_Runner.framework */; }; 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; - 64FAAECB542C8A4AB2D063D2 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 468B3D82A8E7362654223F6F /* Pods_RunnerTests.framework */; }; + 435C672EDB3C79EF8289B1E5 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9C8A6BA03FC59B0344DC9E5F /* Pods_RunnerTests.framework */; }; + 4894AF48D2F94D6F1DABB2D3 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 57D6C7E904CFDCF3B7D477C6 /* Pods_Runner.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; @@ -44,35 +44,35 @@ /* Begin PBXFileReference section */ 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 230907B81ABBBE54EDD3D92A /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 348DE31F4CCE0D6A451383E7 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 468B3D82A8E7362654223F6F /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 6BBD6F4451CA6EB726893C37 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 43E393EFCAC4AAC9B6E9AB99 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 4E857F5A50355F5D8711BD08 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 57D6C7E904CFDCF3B7D477C6 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 71648F3D10B18A805A5C5B83 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 914F2DA382F9E2C3A7E83EB5 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 91AE6679660B5BFDE37CA10C /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; - 9747D350E0CF79FD5C0FECAB /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - C94A641E14FACBB5C9C82B23 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - D594E156A999614A354720D9 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 9C8A6BA03FC59B0344DC9E5F /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + AC955D3DBF778EEBAF66455F /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + F6D81E7FFA76393DDD83EDE7 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 936D3A87682C3D4617F2544B /* Frameworks */ = { + 0B544D9D6451D8B7513063BD /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 64FAAECB542C8A4AB2D063D2 /* Pods_RunnerTests.framework in Frameworks */, + 435C672EDB3C79EF8289B1E5 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -80,7 +80,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 079C3C1D22F2289294620456 /* Pods_Runner.framework in Frameworks */, + 4894AF48D2F94D6F1DABB2D3 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -95,6 +95,20 @@ path = RunnerTests; sourceTree = ""; }; + 9135670FD92EB74D54D0AB79 /* Pods */ = { + isa = PBXGroup; + children = ( + 43E393EFCAC4AAC9B6E9AB99 /* Pods-Runner.debug.xcconfig */, + 4E857F5A50355F5D8711BD08 /* Pods-Runner.release.xcconfig */, + F6D81E7FFA76393DDD83EDE7 /* Pods-Runner.profile.xcconfig */, + 71648F3D10B18A805A5C5B83 /* Pods-RunnerTests.debug.xcconfig */, + AC955D3DBF778EEBAF66455F /* Pods-RunnerTests.release.xcconfig */, + 91AE6679660B5BFDE37CA10C /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( @@ -113,8 +127,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - E11E89FF5D3D57A4206FAEE3 /* Pods */, - C1CD4192BD09C48BF2590FF1 /* Frameworks */, + 9135670FD92EB74D54D0AB79 /* Pods */, + F20E1DAAA380CE8C17F7F24D /* Frameworks */, ); sourceTree = ""; }; @@ -142,29 +156,15 @@ path = Runner; sourceTree = ""; }; - C1CD4192BD09C48BF2590FF1 /* Frameworks */ = { + F20E1DAAA380CE8C17F7F24D /* Frameworks */ = { isa = PBXGroup; children = ( - 230907B81ABBBE54EDD3D92A /* Pods_Runner.framework */, - 468B3D82A8E7362654223F6F /* Pods_RunnerTests.framework */, + 57D6C7E904CFDCF3B7D477C6 /* Pods_Runner.framework */, + 9C8A6BA03FC59B0344DC9E5F /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; }; - E11E89FF5D3D57A4206FAEE3 /* Pods */ = { - isa = PBXGroup; - children = ( - 348DE31F4CCE0D6A451383E7 /* Pods-Runner.debug.xcconfig */, - 9747D350E0CF79FD5C0FECAB /* Pods-Runner.release.xcconfig */, - D594E156A999614A354720D9 /* Pods-Runner.profile.xcconfig */, - 914F2DA382F9E2C3A7E83EB5 /* Pods-RunnerTests.debug.xcconfig */, - 6BBD6F4451CA6EB726893C37 /* Pods-RunnerTests.release.xcconfig */, - C94A641E14FACBB5C9C82B23 /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 7F9FC99CA9E45369A25AF36A /* [CP] Check Pods Manifest.lock */, + B0951A5E64A8BCDFA6315953 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 936D3A87682C3D4617F2544B /* Frameworks */, + 0B544D9D6451D8B7513063BD /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 9B7E0515E2987B0F2F2161A0 /* [CP] Check Pods Manifest.lock */, + C6BE0A2E972E4BF469954FE7 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 66245B0048ADE2CC238D41DE /* [CP] Embed Pods Frameworks */, + EA8C715000E3367B65E72722 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -286,24 +286,22 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 66245B0048ADE2CC238D41DE /* [CP] Embed Pods Frameworks */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + inputPaths = ( ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + name = "Run Script"; + outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - 7F9FC99CA9E45369A25AF36A /* [CP] Check Pods Manifest.lock */ = { + B0951A5E64A8BCDFA6315953 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -325,41 +323,43 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { + C6BE0A2E972E4BF469954FE7 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "Run Script"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - 9B7E0515E2987B0F2F2161A0 /* [CP] Check Pods Manifest.lock */ = { + EA8C715000E3367B65E72722 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 914F2DA382F9E2C3A7E83EB5 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 71648F3D10B18A805A5C5B83 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 6BBD6F4451CA6EB726893C37 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = AC955D3DBF778EEBAF66455F /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C94A641E14FACBB5C9C82B23 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 91AE6679660B5BFDE37CA10C /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/brick_breaker/step_03/linux/CMakeLists.txt b/brick_breaker/step_03/linux/CMakeLists.txt index 9f288a67f3..97c400e174 100644 --- a/brick_breaker/step_03/linux/CMakeLists.txt +++ b/brick_breaker/step_03/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.13) +cmake_minimum_required(VERSION 3.10) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,8 +54,25 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -# Application build; see runner/CMakeLists.txt. -add_subdirectory("runner") +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Define the application target. To change its name, change BINARY_NAME above, +# not the value here, or `flutter run` will no longer work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/brick_breaker/step_03/linux/runner/main.cc b/brick_breaker/step_03/linux/main.cc similarity index 100% rename from brick_breaker/step_03/linux/runner/main.cc rename to brick_breaker/step_03/linux/main.cc diff --git a/brick_breaker/step_05/linux/runner/my_application.cc b/brick_breaker/step_03/linux/my_application.cc similarity index 93% rename from brick_breaker/step_05/linux/runner/my_application.cc rename to brick_breaker/step_03/linux/my_application.cc index f80944a7ba..5f348fea29 100644 --- a/brick_breaker/step_05/linux/runner/my_application.cc +++ b/brick_breaker/step_03/linux/my_application.cc @@ -117,12 +117,6 @@ static void my_application_class_init(MyApplicationClass* klass) { static void my_application_init(MyApplication* self) {} MyApplication* my_application_new() { - // Set the program name to the application ID, which helps various systems - // like GTK and desktop environments map this running application to its - // corresponding .desktop file. This ensures better integration by allowing - // the application to be recognized beyond its binary name. - g_set_prgname(APPLICATION_ID); - return MY_APPLICATION(g_object_new(my_application_get_type(), "application-id", APPLICATION_ID, "flags", G_APPLICATION_NON_UNIQUE, diff --git a/brick_breaker/step_03/linux/runner/my_application.h b/brick_breaker/step_03/linux/my_application.h similarity index 100% rename from brick_breaker/step_03/linux/runner/my_application.h rename to brick_breaker/step_03/linux/my_application.h diff --git a/brick_breaker/step_03/linux/runner/CMakeLists.txt b/brick_breaker/step_03/linux/runner/CMakeLists.txt deleted file mode 100644 index e97dabc702..0000000000 --- a/brick_breaker/step_03/linux/runner/CMakeLists.txt +++ /dev/null @@ -1,26 +0,0 @@ -cmake_minimum_required(VERSION 3.13) -project(runner LANGUAGES CXX) - -# Define the application target. To change its name, change BINARY_NAME in the -# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer -# work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add preprocessor definitions for the application ID. -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) - -target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/brick_breaker/step_03/macos/Runner.xcodeproj/project.pbxproj b/brick_breaker/step_03/macos/Runner.xcodeproj/project.pbxproj index 636a28c53a..139f2ab564 100644 --- a/brick_breaker/step_03/macos/Runner.xcodeproj/project.pbxproj +++ b/brick_breaker/step_03/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ + 26DEE62C40082E048AB2DAC9 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F92CB96B5E92665177C18209 /* Pods_Runner.framework */; }; + 302724C6CB220CF55A24A7F6 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6405B62D2CA2577368E77111 /* Pods_RunnerTests.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 4EDE108470BB936D2121DAC2 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C352266AE7D36E6036C311DB /* Pods_Runner.framework */; }; - D1ADFA42F2A712AE0DDB3C4F /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F7DDA05F09C7BFFC6495BD57 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,9 +62,7 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 116A2D736E3DB4E136903D2C /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 16CD08E3FF9AD3D23AC8A89E /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 1771944E11EF7BBD50D4D2FD /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 114979CB87B99A65FC62EC11 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -81,13 +79,15 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 3C11113B321AB882C8752E03 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 35582EBA48CF0CAD302E6F20 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 44116D975D14ACE930B555BE /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 6405B62D2CA2577368E77111 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; + 81C82BB4E8EABFAC2304248A /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - C352266AE7D36E6036C311DB /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - C4186463924752EE4186F1BD /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - F0E4CC2439991D402B203A71 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - F7DDA05F09C7BFFC6495BD57 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + E93D02470CD1D3EA960793F9 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + F92CB96B5E92665177C18209 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + FF398A0A44AD651D2C2EF977 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - D1ADFA42F2A712AE0DDB3C4F /* Pods_RunnerTests.framework in Frameworks */, + 302724C6CB220CF55A24A7F6 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,13 +103,27 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 4EDE108470BB936D2121DAC2 /* Pods_Runner.framework in Frameworks */, + 26DEE62C40082E048AB2DAC9 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 1AD2B861098DC69EDF5A5504 /* Pods */ = { + isa = PBXGroup; + children = ( + 35582EBA48CF0CAD302E6F20 /* Pods-Runner.debug.xcconfig */, + 44116D975D14ACE930B555BE /* Pods-Runner.release.xcconfig */, + 114979CB87B99A65FC62EC11 /* Pods-Runner.profile.xcconfig */, + 81C82BB4E8EABFAC2304248A /* Pods-RunnerTests.debug.xcconfig */, + FF398A0A44AD651D2C2EF977 /* Pods-RunnerTests.release.xcconfig */, + E93D02470CD1D3EA960793F9 /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; 331C80D6294CF71000263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -137,7 +151,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - FE0B828880FE4FF908108270 /* Pods */, + 1AD2B861098DC69EDF5A5504 /* Pods */, ); sourceTree = ""; }; @@ -188,26 +202,12 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - C352266AE7D36E6036C311DB /* Pods_Runner.framework */, - F7DDA05F09C7BFFC6495BD57 /* Pods_RunnerTests.framework */, + F92CB96B5E92665177C18209 /* Pods_Runner.framework */, + 6405B62D2CA2577368E77111 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; }; - FE0B828880FE4FF908108270 /* Pods */ = { - isa = PBXGroup; - children = ( - 16CD08E3FF9AD3D23AC8A89E /* Pods-Runner.debug.xcconfig */, - C4186463924752EE4186F1BD /* Pods-Runner.release.xcconfig */, - 1771944E11EF7BBD50D4D2FD /* Pods-Runner.profile.xcconfig */, - 116A2D736E3DB4E136903D2C /* Pods-RunnerTests.debug.xcconfig */, - F0E4CC2439991D402B203A71 /* Pods-RunnerTests.release.xcconfig */, - 3C11113B321AB882C8752E03 /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 53D3984EB9BDCC15FE39632C /* [CP] Check Pods Manifest.lock */, + C4789C072FD8F107A45D1C43 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 8C9C6CB44270EC110E6DCD63 /* [CP] Check Pods Manifest.lock */, + 95500D3C1EE7FB7DACCE08DC /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 4BE7093447D6D7ADBFBF4C29 /* [CP] Embed Pods Frameworks */, + B311D48FC89BEDF4EB2DCDDE /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -361,46 +361,46 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 4BE7093447D6D7ADBFBF4C29 /* [CP] Embed Pods Frameworks */ = { + 95500D3C1EE7FB7DACCE08DC /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 53D3984EB9BDCC15FE39632C /* [CP] Check Pods Manifest.lock */ = { + B311D48FC89BEDF4EB2DCDDE /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - 8C9C6CB44270EC110E6DCD63 /* [CP] Check Pods Manifest.lock */ = { + C4789C072FD8F107A45D1C43 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -415,7 +415,7 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 116A2D736E3DB4E136903D2C /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 81C82BB4E8EABFAC2304248A /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = F0E4CC2439991D402B203A71 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = FF398A0A44AD651D2C2EF977 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 3C11113B321AB882C8752E03 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = E93D02470CD1D3EA960793F9 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/brick_breaker/step_03/web/index.html b/brick_breaker/step_03/web/index.html index da690bb6c1..0ffbea0397 100644 --- a/brick_breaker/step_03/web/index.html +++ b/brick_breaker/step_03/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/brick_breaker/step_04/android/gradle.properties b/brick_breaker/step_04/android/gradle.properties index f018a61817..2597170821 100644 --- a/brick_breaker/step_04/android/gradle.properties +++ b/brick_breaker/step_04/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/brick_breaker/step_04/ios/Runner.xcodeproj/project.pbxproj b/brick_breaker/step_04/ios/Runner.xcodeproj/project.pbxproj index c78ae8b4ed..6d1a96d63a 100644 --- a/brick_breaker/step_04/ios/Runner.xcodeproj/project.pbxproj +++ b/brick_breaker/step_04/ios/Runner.xcodeproj/project.pbxproj @@ -7,11 +7,11 @@ objects = { /* Begin PBXBuildFile section */ - 079C3C1D22F2289294620456 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 230907B81ABBBE54EDD3D92A /* Pods_Runner.framework */; }; 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; - 64FAAECB542C8A4AB2D063D2 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 468B3D82A8E7362654223F6F /* Pods_RunnerTests.framework */; }; + 435C672EDB3C79EF8289B1E5 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9C8A6BA03FC59B0344DC9E5F /* Pods_RunnerTests.framework */; }; + 4894AF48D2F94D6F1DABB2D3 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 57D6C7E904CFDCF3B7D477C6 /* Pods_Runner.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; @@ -44,35 +44,35 @@ /* Begin PBXFileReference section */ 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 230907B81ABBBE54EDD3D92A /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 348DE31F4CCE0D6A451383E7 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 468B3D82A8E7362654223F6F /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 6BBD6F4451CA6EB726893C37 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 43E393EFCAC4AAC9B6E9AB99 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 4E857F5A50355F5D8711BD08 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 57D6C7E904CFDCF3B7D477C6 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 71648F3D10B18A805A5C5B83 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 914F2DA382F9E2C3A7E83EB5 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 91AE6679660B5BFDE37CA10C /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; - 9747D350E0CF79FD5C0FECAB /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - C94A641E14FACBB5C9C82B23 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - D594E156A999614A354720D9 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 9C8A6BA03FC59B0344DC9E5F /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + AC955D3DBF778EEBAF66455F /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + F6D81E7FFA76393DDD83EDE7 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 936D3A87682C3D4617F2544B /* Frameworks */ = { + 0B544D9D6451D8B7513063BD /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 64FAAECB542C8A4AB2D063D2 /* Pods_RunnerTests.framework in Frameworks */, + 435C672EDB3C79EF8289B1E5 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -80,7 +80,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 079C3C1D22F2289294620456 /* Pods_Runner.framework in Frameworks */, + 4894AF48D2F94D6F1DABB2D3 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -95,6 +95,20 @@ path = RunnerTests; sourceTree = ""; }; + 9135670FD92EB74D54D0AB79 /* Pods */ = { + isa = PBXGroup; + children = ( + 43E393EFCAC4AAC9B6E9AB99 /* Pods-Runner.debug.xcconfig */, + 4E857F5A50355F5D8711BD08 /* Pods-Runner.release.xcconfig */, + F6D81E7FFA76393DDD83EDE7 /* Pods-Runner.profile.xcconfig */, + 71648F3D10B18A805A5C5B83 /* Pods-RunnerTests.debug.xcconfig */, + AC955D3DBF778EEBAF66455F /* Pods-RunnerTests.release.xcconfig */, + 91AE6679660B5BFDE37CA10C /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( @@ -113,8 +127,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - E11E89FF5D3D57A4206FAEE3 /* Pods */, - C1CD4192BD09C48BF2590FF1 /* Frameworks */, + 9135670FD92EB74D54D0AB79 /* Pods */, + F20E1DAAA380CE8C17F7F24D /* Frameworks */, ); sourceTree = ""; }; @@ -142,29 +156,15 @@ path = Runner; sourceTree = ""; }; - C1CD4192BD09C48BF2590FF1 /* Frameworks */ = { + F20E1DAAA380CE8C17F7F24D /* Frameworks */ = { isa = PBXGroup; children = ( - 230907B81ABBBE54EDD3D92A /* Pods_Runner.framework */, - 468B3D82A8E7362654223F6F /* Pods_RunnerTests.framework */, + 57D6C7E904CFDCF3B7D477C6 /* Pods_Runner.framework */, + 9C8A6BA03FC59B0344DC9E5F /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; }; - E11E89FF5D3D57A4206FAEE3 /* Pods */ = { - isa = PBXGroup; - children = ( - 348DE31F4CCE0D6A451383E7 /* Pods-Runner.debug.xcconfig */, - 9747D350E0CF79FD5C0FECAB /* Pods-Runner.release.xcconfig */, - D594E156A999614A354720D9 /* Pods-Runner.profile.xcconfig */, - 914F2DA382F9E2C3A7E83EB5 /* Pods-RunnerTests.debug.xcconfig */, - 6BBD6F4451CA6EB726893C37 /* Pods-RunnerTests.release.xcconfig */, - C94A641E14FACBB5C9C82B23 /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 7F9FC99CA9E45369A25AF36A /* [CP] Check Pods Manifest.lock */, + B0951A5E64A8BCDFA6315953 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 936D3A87682C3D4617F2544B /* Frameworks */, + 0B544D9D6451D8B7513063BD /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 9B7E0515E2987B0F2F2161A0 /* [CP] Check Pods Manifest.lock */, + C6BE0A2E972E4BF469954FE7 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 66245B0048ADE2CC238D41DE /* [CP] Embed Pods Frameworks */, + EA8C715000E3367B65E72722 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -286,24 +286,22 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 66245B0048ADE2CC238D41DE /* [CP] Embed Pods Frameworks */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + inputPaths = ( ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + name = "Run Script"; + outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - 7F9FC99CA9E45369A25AF36A /* [CP] Check Pods Manifest.lock */ = { + B0951A5E64A8BCDFA6315953 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -325,41 +323,43 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { + C6BE0A2E972E4BF469954FE7 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "Run Script"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - 9B7E0515E2987B0F2F2161A0 /* [CP] Check Pods Manifest.lock */ = { + EA8C715000E3367B65E72722 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 914F2DA382F9E2C3A7E83EB5 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 71648F3D10B18A805A5C5B83 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 6BBD6F4451CA6EB726893C37 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = AC955D3DBF778EEBAF66455F /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C94A641E14FACBB5C9C82B23 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 91AE6679660B5BFDE37CA10C /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/brick_breaker/step_04/linux/CMakeLists.txt b/brick_breaker/step_04/linux/CMakeLists.txt index 9f288a67f3..97c400e174 100644 --- a/brick_breaker/step_04/linux/CMakeLists.txt +++ b/brick_breaker/step_04/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.13) +cmake_minimum_required(VERSION 3.10) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,8 +54,25 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -# Application build; see runner/CMakeLists.txt. -add_subdirectory("runner") +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Define the application target. To change its name, change BINARY_NAME above, +# not the value here, or `flutter run` will no longer work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/brick_breaker/step_04/linux/runner/main.cc b/brick_breaker/step_04/linux/main.cc similarity index 100% rename from brick_breaker/step_04/linux/runner/main.cc rename to brick_breaker/step_04/linux/main.cc diff --git a/brick_breaker/step_03/linux/runner/my_application.cc b/brick_breaker/step_04/linux/my_application.cc similarity index 93% rename from brick_breaker/step_03/linux/runner/my_application.cc rename to brick_breaker/step_04/linux/my_application.cc index f80944a7ba..5f348fea29 100644 --- a/brick_breaker/step_03/linux/runner/my_application.cc +++ b/brick_breaker/step_04/linux/my_application.cc @@ -117,12 +117,6 @@ static void my_application_class_init(MyApplicationClass* klass) { static void my_application_init(MyApplication* self) {} MyApplication* my_application_new() { - // Set the program name to the application ID, which helps various systems - // like GTK and desktop environments map this running application to its - // corresponding .desktop file. This ensures better integration by allowing - // the application to be recognized beyond its binary name. - g_set_prgname(APPLICATION_ID); - return MY_APPLICATION(g_object_new(my_application_get_type(), "application-id", APPLICATION_ID, "flags", G_APPLICATION_NON_UNIQUE, diff --git a/brick_breaker/step_04/linux/runner/my_application.h b/brick_breaker/step_04/linux/my_application.h similarity index 100% rename from brick_breaker/step_04/linux/runner/my_application.h rename to brick_breaker/step_04/linux/my_application.h diff --git a/brick_breaker/step_04/linux/runner/CMakeLists.txt b/brick_breaker/step_04/linux/runner/CMakeLists.txt deleted file mode 100644 index e97dabc702..0000000000 --- a/brick_breaker/step_04/linux/runner/CMakeLists.txt +++ /dev/null @@ -1,26 +0,0 @@ -cmake_minimum_required(VERSION 3.13) -project(runner LANGUAGES CXX) - -# Define the application target. To change its name, change BINARY_NAME in the -# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer -# work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add preprocessor definitions for the application ID. -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) - -target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/brick_breaker/step_04/macos/Runner.xcodeproj/project.pbxproj b/brick_breaker/step_04/macos/Runner.xcodeproj/project.pbxproj index 636a28c53a..139f2ab564 100644 --- a/brick_breaker/step_04/macos/Runner.xcodeproj/project.pbxproj +++ b/brick_breaker/step_04/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ + 26DEE62C40082E048AB2DAC9 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F92CB96B5E92665177C18209 /* Pods_Runner.framework */; }; + 302724C6CB220CF55A24A7F6 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6405B62D2CA2577368E77111 /* Pods_RunnerTests.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 4EDE108470BB936D2121DAC2 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C352266AE7D36E6036C311DB /* Pods_Runner.framework */; }; - D1ADFA42F2A712AE0DDB3C4F /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F7DDA05F09C7BFFC6495BD57 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,9 +62,7 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 116A2D736E3DB4E136903D2C /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 16CD08E3FF9AD3D23AC8A89E /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 1771944E11EF7BBD50D4D2FD /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 114979CB87B99A65FC62EC11 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -81,13 +79,15 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 3C11113B321AB882C8752E03 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 35582EBA48CF0CAD302E6F20 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 44116D975D14ACE930B555BE /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 6405B62D2CA2577368E77111 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; + 81C82BB4E8EABFAC2304248A /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - C352266AE7D36E6036C311DB /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - C4186463924752EE4186F1BD /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - F0E4CC2439991D402B203A71 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - F7DDA05F09C7BFFC6495BD57 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + E93D02470CD1D3EA960793F9 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + F92CB96B5E92665177C18209 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + FF398A0A44AD651D2C2EF977 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - D1ADFA42F2A712AE0DDB3C4F /* Pods_RunnerTests.framework in Frameworks */, + 302724C6CB220CF55A24A7F6 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,13 +103,27 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 4EDE108470BB936D2121DAC2 /* Pods_Runner.framework in Frameworks */, + 26DEE62C40082E048AB2DAC9 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 1AD2B861098DC69EDF5A5504 /* Pods */ = { + isa = PBXGroup; + children = ( + 35582EBA48CF0CAD302E6F20 /* Pods-Runner.debug.xcconfig */, + 44116D975D14ACE930B555BE /* Pods-Runner.release.xcconfig */, + 114979CB87B99A65FC62EC11 /* Pods-Runner.profile.xcconfig */, + 81C82BB4E8EABFAC2304248A /* Pods-RunnerTests.debug.xcconfig */, + FF398A0A44AD651D2C2EF977 /* Pods-RunnerTests.release.xcconfig */, + E93D02470CD1D3EA960793F9 /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; 331C80D6294CF71000263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -137,7 +151,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - FE0B828880FE4FF908108270 /* Pods */, + 1AD2B861098DC69EDF5A5504 /* Pods */, ); sourceTree = ""; }; @@ -188,26 +202,12 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - C352266AE7D36E6036C311DB /* Pods_Runner.framework */, - F7DDA05F09C7BFFC6495BD57 /* Pods_RunnerTests.framework */, + F92CB96B5E92665177C18209 /* Pods_Runner.framework */, + 6405B62D2CA2577368E77111 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; }; - FE0B828880FE4FF908108270 /* Pods */ = { - isa = PBXGroup; - children = ( - 16CD08E3FF9AD3D23AC8A89E /* Pods-Runner.debug.xcconfig */, - C4186463924752EE4186F1BD /* Pods-Runner.release.xcconfig */, - 1771944E11EF7BBD50D4D2FD /* Pods-Runner.profile.xcconfig */, - 116A2D736E3DB4E136903D2C /* Pods-RunnerTests.debug.xcconfig */, - F0E4CC2439991D402B203A71 /* Pods-RunnerTests.release.xcconfig */, - 3C11113B321AB882C8752E03 /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 53D3984EB9BDCC15FE39632C /* [CP] Check Pods Manifest.lock */, + C4789C072FD8F107A45D1C43 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 8C9C6CB44270EC110E6DCD63 /* [CP] Check Pods Manifest.lock */, + 95500D3C1EE7FB7DACCE08DC /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 4BE7093447D6D7ADBFBF4C29 /* [CP] Embed Pods Frameworks */, + B311D48FC89BEDF4EB2DCDDE /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -361,46 +361,46 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 4BE7093447D6D7ADBFBF4C29 /* [CP] Embed Pods Frameworks */ = { + 95500D3C1EE7FB7DACCE08DC /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 53D3984EB9BDCC15FE39632C /* [CP] Check Pods Manifest.lock */ = { + B311D48FC89BEDF4EB2DCDDE /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - 8C9C6CB44270EC110E6DCD63 /* [CP] Check Pods Manifest.lock */ = { + C4789C072FD8F107A45D1C43 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -415,7 +415,7 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 116A2D736E3DB4E136903D2C /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 81C82BB4E8EABFAC2304248A /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = F0E4CC2439991D402B203A71 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = FF398A0A44AD651D2C2EF977 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 3C11113B321AB882C8752E03 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = E93D02470CD1D3EA960793F9 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/brick_breaker/step_04/web/index.html b/brick_breaker/step_04/web/index.html index da690bb6c1..0ffbea0397 100644 --- a/brick_breaker/step_04/web/index.html +++ b/brick_breaker/step_04/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/brick_breaker/step_05/android/gradle.properties b/brick_breaker/step_05/android/gradle.properties index f018a61817..2597170821 100644 --- a/brick_breaker/step_05/android/gradle.properties +++ b/brick_breaker/step_05/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/brick_breaker/step_05/ios/Runner.xcodeproj/project.pbxproj b/brick_breaker/step_05/ios/Runner.xcodeproj/project.pbxproj index c78ae8b4ed..6d1a96d63a 100644 --- a/brick_breaker/step_05/ios/Runner.xcodeproj/project.pbxproj +++ b/brick_breaker/step_05/ios/Runner.xcodeproj/project.pbxproj @@ -7,11 +7,11 @@ objects = { /* Begin PBXBuildFile section */ - 079C3C1D22F2289294620456 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 230907B81ABBBE54EDD3D92A /* Pods_Runner.framework */; }; 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; - 64FAAECB542C8A4AB2D063D2 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 468B3D82A8E7362654223F6F /* Pods_RunnerTests.framework */; }; + 435C672EDB3C79EF8289B1E5 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9C8A6BA03FC59B0344DC9E5F /* Pods_RunnerTests.framework */; }; + 4894AF48D2F94D6F1DABB2D3 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 57D6C7E904CFDCF3B7D477C6 /* Pods_Runner.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; @@ -44,35 +44,35 @@ /* Begin PBXFileReference section */ 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 230907B81ABBBE54EDD3D92A /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 348DE31F4CCE0D6A451383E7 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 468B3D82A8E7362654223F6F /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 6BBD6F4451CA6EB726893C37 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 43E393EFCAC4AAC9B6E9AB99 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 4E857F5A50355F5D8711BD08 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 57D6C7E904CFDCF3B7D477C6 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 71648F3D10B18A805A5C5B83 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 914F2DA382F9E2C3A7E83EB5 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 91AE6679660B5BFDE37CA10C /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; - 9747D350E0CF79FD5C0FECAB /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - C94A641E14FACBB5C9C82B23 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - D594E156A999614A354720D9 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 9C8A6BA03FC59B0344DC9E5F /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + AC955D3DBF778EEBAF66455F /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + F6D81E7FFA76393DDD83EDE7 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 936D3A87682C3D4617F2544B /* Frameworks */ = { + 0B544D9D6451D8B7513063BD /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 64FAAECB542C8A4AB2D063D2 /* Pods_RunnerTests.framework in Frameworks */, + 435C672EDB3C79EF8289B1E5 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -80,7 +80,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 079C3C1D22F2289294620456 /* Pods_Runner.framework in Frameworks */, + 4894AF48D2F94D6F1DABB2D3 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -95,6 +95,20 @@ path = RunnerTests; sourceTree = ""; }; + 9135670FD92EB74D54D0AB79 /* Pods */ = { + isa = PBXGroup; + children = ( + 43E393EFCAC4AAC9B6E9AB99 /* Pods-Runner.debug.xcconfig */, + 4E857F5A50355F5D8711BD08 /* Pods-Runner.release.xcconfig */, + F6D81E7FFA76393DDD83EDE7 /* Pods-Runner.profile.xcconfig */, + 71648F3D10B18A805A5C5B83 /* Pods-RunnerTests.debug.xcconfig */, + AC955D3DBF778EEBAF66455F /* Pods-RunnerTests.release.xcconfig */, + 91AE6679660B5BFDE37CA10C /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( @@ -113,8 +127,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - E11E89FF5D3D57A4206FAEE3 /* Pods */, - C1CD4192BD09C48BF2590FF1 /* Frameworks */, + 9135670FD92EB74D54D0AB79 /* Pods */, + F20E1DAAA380CE8C17F7F24D /* Frameworks */, ); sourceTree = ""; }; @@ -142,29 +156,15 @@ path = Runner; sourceTree = ""; }; - C1CD4192BD09C48BF2590FF1 /* Frameworks */ = { + F20E1DAAA380CE8C17F7F24D /* Frameworks */ = { isa = PBXGroup; children = ( - 230907B81ABBBE54EDD3D92A /* Pods_Runner.framework */, - 468B3D82A8E7362654223F6F /* Pods_RunnerTests.framework */, + 57D6C7E904CFDCF3B7D477C6 /* Pods_Runner.framework */, + 9C8A6BA03FC59B0344DC9E5F /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; }; - E11E89FF5D3D57A4206FAEE3 /* Pods */ = { - isa = PBXGroup; - children = ( - 348DE31F4CCE0D6A451383E7 /* Pods-Runner.debug.xcconfig */, - 9747D350E0CF79FD5C0FECAB /* Pods-Runner.release.xcconfig */, - D594E156A999614A354720D9 /* Pods-Runner.profile.xcconfig */, - 914F2DA382F9E2C3A7E83EB5 /* Pods-RunnerTests.debug.xcconfig */, - 6BBD6F4451CA6EB726893C37 /* Pods-RunnerTests.release.xcconfig */, - C94A641E14FACBB5C9C82B23 /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 7F9FC99CA9E45369A25AF36A /* [CP] Check Pods Manifest.lock */, + B0951A5E64A8BCDFA6315953 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 936D3A87682C3D4617F2544B /* Frameworks */, + 0B544D9D6451D8B7513063BD /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 9B7E0515E2987B0F2F2161A0 /* [CP] Check Pods Manifest.lock */, + C6BE0A2E972E4BF469954FE7 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 66245B0048ADE2CC238D41DE /* [CP] Embed Pods Frameworks */, + EA8C715000E3367B65E72722 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -286,24 +286,22 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 66245B0048ADE2CC238D41DE /* [CP] Embed Pods Frameworks */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + inputPaths = ( ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + name = "Run Script"; + outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - 7F9FC99CA9E45369A25AF36A /* [CP] Check Pods Manifest.lock */ = { + B0951A5E64A8BCDFA6315953 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -325,41 +323,43 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { + C6BE0A2E972E4BF469954FE7 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "Run Script"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - 9B7E0515E2987B0F2F2161A0 /* [CP] Check Pods Manifest.lock */ = { + EA8C715000E3367B65E72722 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 914F2DA382F9E2C3A7E83EB5 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 71648F3D10B18A805A5C5B83 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 6BBD6F4451CA6EB726893C37 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = AC955D3DBF778EEBAF66455F /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C94A641E14FACBB5C9C82B23 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 91AE6679660B5BFDE37CA10C /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/brick_breaker/step_05/linux/CMakeLists.txt b/brick_breaker/step_05/linux/CMakeLists.txt index 9f288a67f3..97c400e174 100644 --- a/brick_breaker/step_05/linux/CMakeLists.txt +++ b/brick_breaker/step_05/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.13) +cmake_minimum_required(VERSION 3.10) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,8 +54,25 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -# Application build; see runner/CMakeLists.txt. -add_subdirectory("runner") +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Define the application target. To change its name, change BINARY_NAME above, +# not the value here, or `flutter run` will no longer work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/brick_breaker/step_05/linux/runner/main.cc b/brick_breaker/step_05/linux/main.cc similarity index 100% rename from brick_breaker/step_05/linux/runner/main.cc rename to brick_breaker/step_05/linux/main.cc diff --git a/brick_breaker/step_06/linux/runner/my_application.cc b/brick_breaker/step_05/linux/my_application.cc similarity index 93% rename from brick_breaker/step_06/linux/runner/my_application.cc rename to brick_breaker/step_05/linux/my_application.cc index f80944a7ba..5f348fea29 100644 --- a/brick_breaker/step_06/linux/runner/my_application.cc +++ b/brick_breaker/step_05/linux/my_application.cc @@ -117,12 +117,6 @@ static void my_application_class_init(MyApplicationClass* klass) { static void my_application_init(MyApplication* self) {} MyApplication* my_application_new() { - // Set the program name to the application ID, which helps various systems - // like GTK and desktop environments map this running application to its - // corresponding .desktop file. This ensures better integration by allowing - // the application to be recognized beyond its binary name. - g_set_prgname(APPLICATION_ID); - return MY_APPLICATION(g_object_new(my_application_get_type(), "application-id", APPLICATION_ID, "flags", G_APPLICATION_NON_UNIQUE, diff --git a/brick_breaker/step_05/linux/runner/my_application.h b/brick_breaker/step_05/linux/my_application.h similarity index 100% rename from brick_breaker/step_05/linux/runner/my_application.h rename to brick_breaker/step_05/linux/my_application.h diff --git a/brick_breaker/step_05/linux/runner/CMakeLists.txt b/brick_breaker/step_05/linux/runner/CMakeLists.txt deleted file mode 100644 index e97dabc702..0000000000 --- a/brick_breaker/step_05/linux/runner/CMakeLists.txt +++ /dev/null @@ -1,26 +0,0 @@ -cmake_minimum_required(VERSION 3.13) -project(runner LANGUAGES CXX) - -# Define the application target. To change its name, change BINARY_NAME in the -# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer -# work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add preprocessor definitions for the application ID. -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) - -target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/brick_breaker/step_05/macos/Runner.xcodeproj/project.pbxproj b/brick_breaker/step_05/macos/Runner.xcodeproj/project.pbxproj index 636a28c53a..139f2ab564 100644 --- a/brick_breaker/step_05/macos/Runner.xcodeproj/project.pbxproj +++ b/brick_breaker/step_05/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ + 26DEE62C40082E048AB2DAC9 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F92CB96B5E92665177C18209 /* Pods_Runner.framework */; }; + 302724C6CB220CF55A24A7F6 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6405B62D2CA2577368E77111 /* Pods_RunnerTests.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 4EDE108470BB936D2121DAC2 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C352266AE7D36E6036C311DB /* Pods_Runner.framework */; }; - D1ADFA42F2A712AE0DDB3C4F /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F7DDA05F09C7BFFC6495BD57 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,9 +62,7 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 116A2D736E3DB4E136903D2C /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 16CD08E3FF9AD3D23AC8A89E /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 1771944E11EF7BBD50D4D2FD /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 114979CB87B99A65FC62EC11 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -81,13 +79,15 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 3C11113B321AB882C8752E03 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 35582EBA48CF0CAD302E6F20 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 44116D975D14ACE930B555BE /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 6405B62D2CA2577368E77111 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; + 81C82BB4E8EABFAC2304248A /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - C352266AE7D36E6036C311DB /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - C4186463924752EE4186F1BD /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - F0E4CC2439991D402B203A71 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - F7DDA05F09C7BFFC6495BD57 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + E93D02470CD1D3EA960793F9 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + F92CB96B5E92665177C18209 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + FF398A0A44AD651D2C2EF977 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - D1ADFA42F2A712AE0DDB3C4F /* Pods_RunnerTests.framework in Frameworks */, + 302724C6CB220CF55A24A7F6 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,13 +103,27 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 4EDE108470BB936D2121DAC2 /* Pods_Runner.framework in Frameworks */, + 26DEE62C40082E048AB2DAC9 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 1AD2B861098DC69EDF5A5504 /* Pods */ = { + isa = PBXGroup; + children = ( + 35582EBA48CF0CAD302E6F20 /* Pods-Runner.debug.xcconfig */, + 44116D975D14ACE930B555BE /* Pods-Runner.release.xcconfig */, + 114979CB87B99A65FC62EC11 /* Pods-Runner.profile.xcconfig */, + 81C82BB4E8EABFAC2304248A /* Pods-RunnerTests.debug.xcconfig */, + FF398A0A44AD651D2C2EF977 /* Pods-RunnerTests.release.xcconfig */, + E93D02470CD1D3EA960793F9 /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; 331C80D6294CF71000263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -137,7 +151,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - FE0B828880FE4FF908108270 /* Pods */, + 1AD2B861098DC69EDF5A5504 /* Pods */, ); sourceTree = ""; }; @@ -188,26 +202,12 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - C352266AE7D36E6036C311DB /* Pods_Runner.framework */, - F7DDA05F09C7BFFC6495BD57 /* Pods_RunnerTests.framework */, + F92CB96B5E92665177C18209 /* Pods_Runner.framework */, + 6405B62D2CA2577368E77111 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; }; - FE0B828880FE4FF908108270 /* Pods */ = { - isa = PBXGroup; - children = ( - 16CD08E3FF9AD3D23AC8A89E /* Pods-Runner.debug.xcconfig */, - C4186463924752EE4186F1BD /* Pods-Runner.release.xcconfig */, - 1771944E11EF7BBD50D4D2FD /* Pods-Runner.profile.xcconfig */, - 116A2D736E3DB4E136903D2C /* Pods-RunnerTests.debug.xcconfig */, - F0E4CC2439991D402B203A71 /* Pods-RunnerTests.release.xcconfig */, - 3C11113B321AB882C8752E03 /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 53D3984EB9BDCC15FE39632C /* [CP] Check Pods Manifest.lock */, + C4789C072FD8F107A45D1C43 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 8C9C6CB44270EC110E6DCD63 /* [CP] Check Pods Manifest.lock */, + 95500D3C1EE7FB7DACCE08DC /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 4BE7093447D6D7ADBFBF4C29 /* [CP] Embed Pods Frameworks */, + B311D48FC89BEDF4EB2DCDDE /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -361,46 +361,46 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 4BE7093447D6D7ADBFBF4C29 /* [CP] Embed Pods Frameworks */ = { + 95500D3C1EE7FB7DACCE08DC /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 53D3984EB9BDCC15FE39632C /* [CP] Check Pods Manifest.lock */ = { + B311D48FC89BEDF4EB2DCDDE /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - 8C9C6CB44270EC110E6DCD63 /* [CP] Check Pods Manifest.lock */ = { + C4789C072FD8F107A45D1C43 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -415,7 +415,7 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 116A2D736E3DB4E136903D2C /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 81C82BB4E8EABFAC2304248A /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = F0E4CC2439991D402B203A71 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = FF398A0A44AD651D2C2EF977 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 3C11113B321AB882C8752E03 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = E93D02470CD1D3EA960793F9 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/brick_breaker/step_05/web/index.html b/brick_breaker/step_05/web/index.html index da690bb6c1..0ffbea0397 100644 --- a/brick_breaker/step_05/web/index.html +++ b/brick_breaker/step_05/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/brick_breaker/step_06/android/gradle.properties b/brick_breaker/step_06/android/gradle.properties index f018a61817..2597170821 100644 --- a/brick_breaker/step_06/android/gradle.properties +++ b/brick_breaker/step_06/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/brick_breaker/step_06/ios/Runner.xcodeproj/project.pbxproj b/brick_breaker/step_06/ios/Runner.xcodeproj/project.pbxproj index c78ae8b4ed..6d1a96d63a 100644 --- a/brick_breaker/step_06/ios/Runner.xcodeproj/project.pbxproj +++ b/brick_breaker/step_06/ios/Runner.xcodeproj/project.pbxproj @@ -7,11 +7,11 @@ objects = { /* Begin PBXBuildFile section */ - 079C3C1D22F2289294620456 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 230907B81ABBBE54EDD3D92A /* Pods_Runner.framework */; }; 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; - 64FAAECB542C8A4AB2D063D2 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 468B3D82A8E7362654223F6F /* Pods_RunnerTests.framework */; }; + 435C672EDB3C79EF8289B1E5 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9C8A6BA03FC59B0344DC9E5F /* Pods_RunnerTests.framework */; }; + 4894AF48D2F94D6F1DABB2D3 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 57D6C7E904CFDCF3B7D477C6 /* Pods_Runner.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; @@ -44,35 +44,35 @@ /* Begin PBXFileReference section */ 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 230907B81ABBBE54EDD3D92A /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 348DE31F4CCE0D6A451383E7 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 468B3D82A8E7362654223F6F /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 6BBD6F4451CA6EB726893C37 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 43E393EFCAC4AAC9B6E9AB99 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 4E857F5A50355F5D8711BD08 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 57D6C7E904CFDCF3B7D477C6 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 71648F3D10B18A805A5C5B83 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 914F2DA382F9E2C3A7E83EB5 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 91AE6679660B5BFDE37CA10C /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; - 9747D350E0CF79FD5C0FECAB /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - C94A641E14FACBB5C9C82B23 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - D594E156A999614A354720D9 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 9C8A6BA03FC59B0344DC9E5F /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + AC955D3DBF778EEBAF66455F /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + F6D81E7FFA76393DDD83EDE7 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 936D3A87682C3D4617F2544B /* Frameworks */ = { + 0B544D9D6451D8B7513063BD /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 64FAAECB542C8A4AB2D063D2 /* Pods_RunnerTests.framework in Frameworks */, + 435C672EDB3C79EF8289B1E5 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -80,7 +80,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 079C3C1D22F2289294620456 /* Pods_Runner.framework in Frameworks */, + 4894AF48D2F94D6F1DABB2D3 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -95,6 +95,20 @@ path = RunnerTests; sourceTree = ""; }; + 9135670FD92EB74D54D0AB79 /* Pods */ = { + isa = PBXGroup; + children = ( + 43E393EFCAC4AAC9B6E9AB99 /* Pods-Runner.debug.xcconfig */, + 4E857F5A50355F5D8711BD08 /* Pods-Runner.release.xcconfig */, + F6D81E7FFA76393DDD83EDE7 /* Pods-Runner.profile.xcconfig */, + 71648F3D10B18A805A5C5B83 /* Pods-RunnerTests.debug.xcconfig */, + AC955D3DBF778EEBAF66455F /* Pods-RunnerTests.release.xcconfig */, + 91AE6679660B5BFDE37CA10C /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( @@ -113,8 +127,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - E11E89FF5D3D57A4206FAEE3 /* Pods */, - C1CD4192BD09C48BF2590FF1 /* Frameworks */, + 9135670FD92EB74D54D0AB79 /* Pods */, + F20E1DAAA380CE8C17F7F24D /* Frameworks */, ); sourceTree = ""; }; @@ -142,29 +156,15 @@ path = Runner; sourceTree = ""; }; - C1CD4192BD09C48BF2590FF1 /* Frameworks */ = { + F20E1DAAA380CE8C17F7F24D /* Frameworks */ = { isa = PBXGroup; children = ( - 230907B81ABBBE54EDD3D92A /* Pods_Runner.framework */, - 468B3D82A8E7362654223F6F /* Pods_RunnerTests.framework */, + 57D6C7E904CFDCF3B7D477C6 /* Pods_Runner.framework */, + 9C8A6BA03FC59B0344DC9E5F /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; }; - E11E89FF5D3D57A4206FAEE3 /* Pods */ = { - isa = PBXGroup; - children = ( - 348DE31F4CCE0D6A451383E7 /* Pods-Runner.debug.xcconfig */, - 9747D350E0CF79FD5C0FECAB /* Pods-Runner.release.xcconfig */, - D594E156A999614A354720D9 /* Pods-Runner.profile.xcconfig */, - 914F2DA382F9E2C3A7E83EB5 /* Pods-RunnerTests.debug.xcconfig */, - 6BBD6F4451CA6EB726893C37 /* Pods-RunnerTests.release.xcconfig */, - C94A641E14FACBB5C9C82B23 /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 7F9FC99CA9E45369A25AF36A /* [CP] Check Pods Manifest.lock */, + B0951A5E64A8BCDFA6315953 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 936D3A87682C3D4617F2544B /* Frameworks */, + 0B544D9D6451D8B7513063BD /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 9B7E0515E2987B0F2F2161A0 /* [CP] Check Pods Manifest.lock */, + C6BE0A2E972E4BF469954FE7 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 66245B0048ADE2CC238D41DE /* [CP] Embed Pods Frameworks */, + EA8C715000E3367B65E72722 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -286,24 +286,22 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 66245B0048ADE2CC238D41DE /* [CP] Embed Pods Frameworks */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + inputPaths = ( ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + name = "Run Script"; + outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - 7F9FC99CA9E45369A25AF36A /* [CP] Check Pods Manifest.lock */ = { + B0951A5E64A8BCDFA6315953 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -325,41 +323,43 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { + C6BE0A2E972E4BF469954FE7 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "Run Script"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - 9B7E0515E2987B0F2F2161A0 /* [CP] Check Pods Manifest.lock */ = { + EA8C715000E3367B65E72722 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 914F2DA382F9E2C3A7E83EB5 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 71648F3D10B18A805A5C5B83 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 6BBD6F4451CA6EB726893C37 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = AC955D3DBF778EEBAF66455F /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C94A641E14FACBB5C9C82B23 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 91AE6679660B5BFDE37CA10C /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/brick_breaker/step_06/linux/CMakeLists.txt b/brick_breaker/step_06/linux/CMakeLists.txt index 9f288a67f3..97c400e174 100644 --- a/brick_breaker/step_06/linux/CMakeLists.txt +++ b/brick_breaker/step_06/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.13) +cmake_minimum_required(VERSION 3.10) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,8 +54,25 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -# Application build; see runner/CMakeLists.txt. -add_subdirectory("runner") +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Define the application target. To change its name, change BINARY_NAME above, +# not the value here, or `flutter run` will no longer work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/brick_breaker/step_06/linux/runner/main.cc b/brick_breaker/step_06/linux/main.cc similarity index 100% rename from brick_breaker/step_06/linux/runner/main.cc rename to brick_breaker/step_06/linux/main.cc diff --git a/brick_breaker/step_04/linux/runner/my_application.cc b/brick_breaker/step_06/linux/my_application.cc similarity index 93% rename from brick_breaker/step_04/linux/runner/my_application.cc rename to brick_breaker/step_06/linux/my_application.cc index f80944a7ba..5f348fea29 100644 --- a/brick_breaker/step_04/linux/runner/my_application.cc +++ b/brick_breaker/step_06/linux/my_application.cc @@ -117,12 +117,6 @@ static void my_application_class_init(MyApplicationClass* klass) { static void my_application_init(MyApplication* self) {} MyApplication* my_application_new() { - // Set the program name to the application ID, which helps various systems - // like GTK and desktop environments map this running application to its - // corresponding .desktop file. This ensures better integration by allowing - // the application to be recognized beyond its binary name. - g_set_prgname(APPLICATION_ID); - return MY_APPLICATION(g_object_new(my_application_get_type(), "application-id", APPLICATION_ID, "flags", G_APPLICATION_NON_UNIQUE, diff --git a/brick_breaker/step_06/linux/runner/my_application.h b/brick_breaker/step_06/linux/my_application.h similarity index 100% rename from brick_breaker/step_06/linux/runner/my_application.h rename to brick_breaker/step_06/linux/my_application.h diff --git a/brick_breaker/step_06/linux/runner/CMakeLists.txt b/brick_breaker/step_06/linux/runner/CMakeLists.txt deleted file mode 100644 index e97dabc702..0000000000 --- a/brick_breaker/step_06/linux/runner/CMakeLists.txt +++ /dev/null @@ -1,26 +0,0 @@ -cmake_minimum_required(VERSION 3.13) -project(runner LANGUAGES CXX) - -# Define the application target. To change its name, change BINARY_NAME in the -# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer -# work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add preprocessor definitions for the application ID. -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) - -target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/brick_breaker/step_06/macos/Runner.xcodeproj/project.pbxproj b/brick_breaker/step_06/macos/Runner.xcodeproj/project.pbxproj index 636a28c53a..139f2ab564 100644 --- a/brick_breaker/step_06/macos/Runner.xcodeproj/project.pbxproj +++ b/brick_breaker/step_06/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ + 26DEE62C40082E048AB2DAC9 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F92CB96B5E92665177C18209 /* Pods_Runner.framework */; }; + 302724C6CB220CF55A24A7F6 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6405B62D2CA2577368E77111 /* Pods_RunnerTests.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 4EDE108470BB936D2121DAC2 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C352266AE7D36E6036C311DB /* Pods_Runner.framework */; }; - D1ADFA42F2A712AE0DDB3C4F /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F7DDA05F09C7BFFC6495BD57 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,9 +62,7 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 116A2D736E3DB4E136903D2C /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 16CD08E3FF9AD3D23AC8A89E /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 1771944E11EF7BBD50D4D2FD /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 114979CB87B99A65FC62EC11 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -81,13 +79,15 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 3C11113B321AB882C8752E03 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 35582EBA48CF0CAD302E6F20 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 44116D975D14ACE930B555BE /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 6405B62D2CA2577368E77111 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; + 81C82BB4E8EABFAC2304248A /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - C352266AE7D36E6036C311DB /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - C4186463924752EE4186F1BD /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - F0E4CC2439991D402B203A71 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - F7DDA05F09C7BFFC6495BD57 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + E93D02470CD1D3EA960793F9 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + F92CB96B5E92665177C18209 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + FF398A0A44AD651D2C2EF977 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - D1ADFA42F2A712AE0DDB3C4F /* Pods_RunnerTests.framework in Frameworks */, + 302724C6CB220CF55A24A7F6 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,13 +103,27 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 4EDE108470BB936D2121DAC2 /* Pods_Runner.framework in Frameworks */, + 26DEE62C40082E048AB2DAC9 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 1AD2B861098DC69EDF5A5504 /* Pods */ = { + isa = PBXGroup; + children = ( + 35582EBA48CF0CAD302E6F20 /* Pods-Runner.debug.xcconfig */, + 44116D975D14ACE930B555BE /* Pods-Runner.release.xcconfig */, + 114979CB87B99A65FC62EC11 /* Pods-Runner.profile.xcconfig */, + 81C82BB4E8EABFAC2304248A /* Pods-RunnerTests.debug.xcconfig */, + FF398A0A44AD651D2C2EF977 /* Pods-RunnerTests.release.xcconfig */, + E93D02470CD1D3EA960793F9 /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; 331C80D6294CF71000263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -137,7 +151,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - FE0B828880FE4FF908108270 /* Pods */, + 1AD2B861098DC69EDF5A5504 /* Pods */, ); sourceTree = ""; }; @@ -188,26 +202,12 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - C352266AE7D36E6036C311DB /* Pods_Runner.framework */, - F7DDA05F09C7BFFC6495BD57 /* Pods_RunnerTests.framework */, + F92CB96B5E92665177C18209 /* Pods_Runner.framework */, + 6405B62D2CA2577368E77111 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; }; - FE0B828880FE4FF908108270 /* Pods */ = { - isa = PBXGroup; - children = ( - 16CD08E3FF9AD3D23AC8A89E /* Pods-Runner.debug.xcconfig */, - C4186463924752EE4186F1BD /* Pods-Runner.release.xcconfig */, - 1771944E11EF7BBD50D4D2FD /* Pods-Runner.profile.xcconfig */, - 116A2D736E3DB4E136903D2C /* Pods-RunnerTests.debug.xcconfig */, - F0E4CC2439991D402B203A71 /* Pods-RunnerTests.release.xcconfig */, - 3C11113B321AB882C8752E03 /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 53D3984EB9BDCC15FE39632C /* [CP] Check Pods Manifest.lock */, + C4789C072FD8F107A45D1C43 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 8C9C6CB44270EC110E6DCD63 /* [CP] Check Pods Manifest.lock */, + 95500D3C1EE7FB7DACCE08DC /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 4BE7093447D6D7ADBFBF4C29 /* [CP] Embed Pods Frameworks */, + B311D48FC89BEDF4EB2DCDDE /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -361,46 +361,46 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 4BE7093447D6D7ADBFBF4C29 /* [CP] Embed Pods Frameworks */ = { + 95500D3C1EE7FB7DACCE08DC /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 53D3984EB9BDCC15FE39632C /* [CP] Check Pods Manifest.lock */ = { + B311D48FC89BEDF4EB2DCDDE /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - 8C9C6CB44270EC110E6DCD63 /* [CP] Check Pods Manifest.lock */ = { + C4789C072FD8F107A45D1C43 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -415,7 +415,7 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 116A2D736E3DB4E136903D2C /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 81C82BB4E8EABFAC2304248A /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = F0E4CC2439991D402B203A71 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = FF398A0A44AD651D2C2EF977 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 3C11113B321AB882C8752E03 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = E93D02470CD1D3EA960793F9 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/brick_breaker/step_06/web/index.html b/brick_breaker/step_06/web/index.html index da690bb6c1..0ffbea0397 100644 --- a/brick_breaker/step_06/web/index.html +++ b/brick_breaker/step_06/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/brick_breaker/step_07/android/gradle.properties b/brick_breaker/step_07/android/gradle.properties index f018a61817..2597170821 100644 --- a/brick_breaker/step_07/android/gradle.properties +++ b/brick_breaker/step_07/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/brick_breaker/step_07/ios/Runner.xcodeproj/project.pbxproj b/brick_breaker/step_07/ios/Runner.xcodeproj/project.pbxproj index c78ae8b4ed..6d1a96d63a 100644 --- a/brick_breaker/step_07/ios/Runner.xcodeproj/project.pbxproj +++ b/brick_breaker/step_07/ios/Runner.xcodeproj/project.pbxproj @@ -7,11 +7,11 @@ objects = { /* Begin PBXBuildFile section */ - 079C3C1D22F2289294620456 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 230907B81ABBBE54EDD3D92A /* Pods_Runner.framework */; }; 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; - 64FAAECB542C8A4AB2D063D2 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 468B3D82A8E7362654223F6F /* Pods_RunnerTests.framework */; }; + 435C672EDB3C79EF8289B1E5 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9C8A6BA03FC59B0344DC9E5F /* Pods_RunnerTests.framework */; }; + 4894AF48D2F94D6F1DABB2D3 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 57D6C7E904CFDCF3B7D477C6 /* Pods_Runner.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; @@ -44,35 +44,35 @@ /* Begin PBXFileReference section */ 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 230907B81ABBBE54EDD3D92A /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 348DE31F4CCE0D6A451383E7 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 468B3D82A8E7362654223F6F /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 6BBD6F4451CA6EB726893C37 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 43E393EFCAC4AAC9B6E9AB99 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 4E857F5A50355F5D8711BD08 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 57D6C7E904CFDCF3B7D477C6 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 71648F3D10B18A805A5C5B83 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 914F2DA382F9E2C3A7E83EB5 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 91AE6679660B5BFDE37CA10C /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; - 9747D350E0CF79FD5C0FECAB /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - C94A641E14FACBB5C9C82B23 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - D594E156A999614A354720D9 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 9C8A6BA03FC59B0344DC9E5F /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + AC955D3DBF778EEBAF66455F /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + F6D81E7FFA76393DDD83EDE7 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 936D3A87682C3D4617F2544B /* Frameworks */ = { + 0B544D9D6451D8B7513063BD /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 64FAAECB542C8A4AB2D063D2 /* Pods_RunnerTests.framework in Frameworks */, + 435C672EDB3C79EF8289B1E5 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -80,7 +80,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 079C3C1D22F2289294620456 /* Pods_Runner.framework in Frameworks */, + 4894AF48D2F94D6F1DABB2D3 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -95,6 +95,20 @@ path = RunnerTests; sourceTree = ""; }; + 9135670FD92EB74D54D0AB79 /* Pods */ = { + isa = PBXGroup; + children = ( + 43E393EFCAC4AAC9B6E9AB99 /* Pods-Runner.debug.xcconfig */, + 4E857F5A50355F5D8711BD08 /* Pods-Runner.release.xcconfig */, + F6D81E7FFA76393DDD83EDE7 /* Pods-Runner.profile.xcconfig */, + 71648F3D10B18A805A5C5B83 /* Pods-RunnerTests.debug.xcconfig */, + AC955D3DBF778EEBAF66455F /* Pods-RunnerTests.release.xcconfig */, + 91AE6679660B5BFDE37CA10C /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( @@ -113,8 +127,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - E11E89FF5D3D57A4206FAEE3 /* Pods */, - C1CD4192BD09C48BF2590FF1 /* Frameworks */, + 9135670FD92EB74D54D0AB79 /* Pods */, + F20E1DAAA380CE8C17F7F24D /* Frameworks */, ); sourceTree = ""; }; @@ -142,29 +156,15 @@ path = Runner; sourceTree = ""; }; - C1CD4192BD09C48BF2590FF1 /* Frameworks */ = { + F20E1DAAA380CE8C17F7F24D /* Frameworks */ = { isa = PBXGroup; children = ( - 230907B81ABBBE54EDD3D92A /* Pods_Runner.framework */, - 468B3D82A8E7362654223F6F /* Pods_RunnerTests.framework */, + 57D6C7E904CFDCF3B7D477C6 /* Pods_Runner.framework */, + 9C8A6BA03FC59B0344DC9E5F /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; }; - E11E89FF5D3D57A4206FAEE3 /* Pods */ = { - isa = PBXGroup; - children = ( - 348DE31F4CCE0D6A451383E7 /* Pods-Runner.debug.xcconfig */, - 9747D350E0CF79FD5C0FECAB /* Pods-Runner.release.xcconfig */, - D594E156A999614A354720D9 /* Pods-Runner.profile.xcconfig */, - 914F2DA382F9E2C3A7E83EB5 /* Pods-RunnerTests.debug.xcconfig */, - 6BBD6F4451CA6EB726893C37 /* Pods-RunnerTests.release.xcconfig */, - C94A641E14FACBB5C9C82B23 /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 7F9FC99CA9E45369A25AF36A /* [CP] Check Pods Manifest.lock */, + B0951A5E64A8BCDFA6315953 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 936D3A87682C3D4617F2544B /* Frameworks */, + 0B544D9D6451D8B7513063BD /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 9B7E0515E2987B0F2F2161A0 /* [CP] Check Pods Manifest.lock */, + C6BE0A2E972E4BF469954FE7 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 66245B0048ADE2CC238D41DE /* [CP] Embed Pods Frameworks */, + EA8C715000E3367B65E72722 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -286,24 +286,22 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 66245B0048ADE2CC238D41DE /* [CP] Embed Pods Frameworks */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + inputPaths = ( ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + name = "Run Script"; + outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - 7F9FC99CA9E45369A25AF36A /* [CP] Check Pods Manifest.lock */ = { + B0951A5E64A8BCDFA6315953 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -325,41 +323,43 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { + C6BE0A2E972E4BF469954FE7 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "Run Script"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - 9B7E0515E2987B0F2F2161A0 /* [CP] Check Pods Manifest.lock */ = { + EA8C715000E3367B65E72722 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 914F2DA382F9E2C3A7E83EB5 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 71648F3D10B18A805A5C5B83 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 6BBD6F4451CA6EB726893C37 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = AC955D3DBF778EEBAF66455F /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C94A641E14FACBB5C9C82B23 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 91AE6679660B5BFDE37CA10C /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/brick_breaker/step_07/linux/CMakeLists.txt b/brick_breaker/step_07/linux/CMakeLists.txt index 9f288a67f3..97c400e174 100644 --- a/brick_breaker/step_07/linux/CMakeLists.txt +++ b/brick_breaker/step_07/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.13) +cmake_minimum_required(VERSION 3.10) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,8 +54,25 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -# Application build; see runner/CMakeLists.txt. -add_subdirectory("runner") +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Define the application target. To change its name, change BINARY_NAME above, +# not the value here, or `flutter run` will no longer work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/brick_breaker/step_07/linux/runner/main.cc b/brick_breaker/step_07/linux/main.cc similarity index 100% rename from brick_breaker/step_07/linux/runner/main.cc rename to brick_breaker/step_07/linux/main.cc diff --git a/brick_breaker/step_07/linux/my_application.cc b/brick_breaker/step_07/linux/my_application.cc new file mode 100644 index 0000000000..5f348fea29 --- /dev/null +++ b/brick_breaker/step_07/linux/my_application.cc @@ -0,0 +1,124 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "brick_breaker"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "brick_breaker"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/brick_breaker/step_07/linux/runner/my_application.h b/brick_breaker/step_07/linux/my_application.h similarity index 100% rename from brick_breaker/step_07/linux/runner/my_application.h rename to brick_breaker/step_07/linux/my_application.h diff --git a/brick_breaker/step_07/linux/runner/CMakeLists.txt b/brick_breaker/step_07/linux/runner/CMakeLists.txt deleted file mode 100644 index e97dabc702..0000000000 --- a/brick_breaker/step_07/linux/runner/CMakeLists.txt +++ /dev/null @@ -1,26 +0,0 @@ -cmake_minimum_required(VERSION 3.13) -project(runner LANGUAGES CXX) - -# Define the application target. To change its name, change BINARY_NAME in the -# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer -# work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add preprocessor definitions for the application ID. -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) - -target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/brick_breaker/step_07/linux/runner/my_application.cc b/brick_breaker/step_07/linux/runner/my_application.cc deleted file mode 100644 index f80944a7ba..0000000000 --- a/brick_breaker/step_07/linux/runner/my_application.cc +++ /dev/null @@ -1,130 +0,0 @@ -#include "my_application.h" - -#include -#ifdef GDK_WINDOWING_X11 -#include -#endif - -#include "flutter/generated_plugin_registrant.h" - -struct _MyApplication { - GtkApplication parent_instance; - char** dart_entrypoint_arguments; -}; - -G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) - -// Implements GApplication::activate. -static void my_application_activate(GApplication* application) { - MyApplication* self = MY_APPLICATION(application); - GtkWindow* window = - GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); - - // Use a header bar when running in GNOME as this is the common style used - // by applications and is the setup most users will be using (e.g. Ubuntu - // desktop). - // If running on X and not using GNOME then just use a traditional title bar - // in case the window manager does more exotic layout, e.g. tiling. - // If running on Wayland assume the header bar will work (may need changing - // if future cases occur). - gboolean use_header_bar = TRUE; -#ifdef GDK_WINDOWING_X11 - GdkScreen* screen = gtk_window_get_screen(window); - if (GDK_IS_X11_SCREEN(screen)) { - const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); - if (g_strcmp0(wm_name, "GNOME Shell") != 0) { - use_header_bar = FALSE; - } - } -#endif - if (use_header_bar) { - GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); - gtk_widget_show(GTK_WIDGET(header_bar)); - gtk_header_bar_set_title(header_bar, "brick_breaker"); - gtk_header_bar_set_show_close_button(header_bar, TRUE); - gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); - } else { - gtk_window_set_title(window, "brick_breaker"); - } - - gtk_window_set_default_size(window, 1280, 720); - gtk_widget_show(GTK_WIDGET(window)); - - g_autoptr(FlDartProject) project = fl_dart_project_new(); - fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); - - FlView* view = fl_view_new(project); - gtk_widget_show(GTK_WIDGET(view)); - gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); - - fl_register_plugins(FL_PLUGIN_REGISTRY(view)); - - gtk_widget_grab_focus(GTK_WIDGET(view)); -} - -// Implements GApplication::local_command_line. -static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { - MyApplication* self = MY_APPLICATION(application); - // Strip out the first argument as it is the binary name. - self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); - - g_autoptr(GError) error = nullptr; - if (!g_application_register(application, nullptr, &error)) { - g_warning("Failed to register: %s", error->message); - *exit_status = 1; - return TRUE; - } - - g_application_activate(application); - *exit_status = 0; - - return TRUE; -} - -// Implements GApplication::startup. -static void my_application_startup(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application startup. - - G_APPLICATION_CLASS(my_application_parent_class)->startup(application); -} - -// Implements GApplication::shutdown. -static void my_application_shutdown(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application shutdown. - - G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); -} - -// Implements GObject::dispose. -static void my_application_dispose(GObject* object) { - MyApplication* self = MY_APPLICATION(object); - g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); - G_OBJECT_CLASS(my_application_parent_class)->dispose(object); -} - -static void my_application_class_init(MyApplicationClass* klass) { - G_APPLICATION_CLASS(klass)->activate = my_application_activate; - G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; - G_APPLICATION_CLASS(klass)->startup = my_application_startup; - G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; - G_OBJECT_CLASS(klass)->dispose = my_application_dispose; -} - -static void my_application_init(MyApplication* self) {} - -MyApplication* my_application_new() { - // Set the program name to the application ID, which helps various systems - // like GTK and desktop environments map this running application to its - // corresponding .desktop file. This ensures better integration by allowing - // the application to be recognized beyond its binary name. - g_set_prgname(APPLICATION_ID); - - return MY_APPLICATION(g_object_new(my_application_get_type(), - "application-id", APPLICATION_ID, - "flags", G_APPLICATION_NON_UNIQUE, - nullptr)); -} diff --git a/brick_breaker/step_07/macos/Runner.xcodeproj/project.pbxproj b/brick_breaker/step_07/macos/Runner.xcodeproj/project.pbxproj index 636a28c53a..139f2ab564 100644 --- a/brick_breaker/step_07/macos/Runner.xcodeproj/project.pbxproj +++ b/brick_breaker/step_07/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ + 26DEE62C40082E048AB2DAC9 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F92CB96B5E92665177C18209 /* Pods_Runner.framework */; }; + 302724C6CB220CF55A24A7F6 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6405B62D2CA2577368E77111 /* Pods_RunnerTests.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 4EDE108470BB936D2121DAC2 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C352266AE7D36E6036C311DB /* Pods_Runner.framework */; }; - D1ADFA42F2A712AE0DDB3C4F /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F7DDA05F09C7BFFC6495BD57 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,9 +62,7 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 116A2D736E3DB4E136903D2C /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 16CD08E3FF9AD3D23AC8A89E /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 1771944E11EF7BBD50D4D2FD /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 114979CB87B99A65FC62EC11 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -81,13 +79,15 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 3C11113B321AB882C8752E03 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 35582EBA48CF0CAD302E6F20 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 44116D975D14ACE930B555BE /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 6405B62D2CA2577368E77111 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; + 81C82BB4E8EABFAC2304248A /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - C352266AE7D36E6036C311DB /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - C4186463924752EE4186F1BD /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - F0E4CC2439991D402B203A71 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - F7DDA05F09C7BFFC6495BD57 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + E93D02470CD1D3EA960793F9 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + F92CB96B5E92665177C18209 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + FF398A0A44AD651D2C2EF977 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - D1ADFA42F2A712AE0DDB3C4F /* Pods_RunnerTests.framework in Frameworks */, + 302724C6CB220CF55A24A7F6 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,13 +103,27 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 4EDE108470BB936D2121DAC2 /* Pods_Runner.framework in Frameworks */, + 26DEE62C40082E048AB2DAC9 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 1AD2B861098DC69EDF5A5504 /* Pods */ = { + isa = PBXGroup; + children = ( + 35582EBA48CF0CAD302E6F20 /* Pods-Runner.debug.xcconfig */, + 44116D975D14ACE930B555BE /* Pods-Runner.release.xcconfig */, + 114979CB87B99A65FC62EC11 /* Pods-Runner.profile.xcconfig */, + 81C82BB4E8EABFAC2304248A /* Pods-RunnerTests.debug.xcconfig */, + FF398A0A44AD651D2C2EF977 /* Pods-RunnerTests.release.xcconfig */, + E93D02470CD1D3EA960793F9 /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; 331C80D6294CF71000263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -137,7 +151,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - FE0B828880FE4FF908108270 /* Pods */, + 1AD2B861098DC69EDF5A5504 /* Pods */, ); sourceTree = ""; }; @@ -188,26 +202,12 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - C352266AE7D36E6036C311DB /* Pods_Runner.framework */, - F7DDA05F09C7BFFC6495BD57 /* Pods_RunnerTests.framework */, + F92CB96B5E92665177C18209 /* Pods_Runner.framework */, + 6405B62D2CA2577368E77111 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; }; - FE0B828880FE4FF908108270 /* Pods */ = { - isa = PBXGroup; - children = ( - 16CD08E3FF9AD3D23AC8A89E /* Pods-Runner.debug.xcconfig */, - C4186463924752EE4186F1BD /* Pods-Runner.release.xcconfig */, - 1771944E11EF7BBD50D4D2FD /* Pods-Runner.profile.xcconfig */, - 116A2D736E3DB4E136903D2C /* Pods-RunnerTests.debug.xcconfig */, - F0E4CC2439991D402B203A71 /* Pods-RunnerTests.release.xcconfig */, - 3C11113B321AB882C8752E03 /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 53D3984EB9BDCC15FE39632C /* [CP] Check Pods Manifest.lock */, + C4789C072FD8F107A45D1C43 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 8C9C6CB44270EC110E6DCD63 /* [CP] Check Pods Manifest.lock */, + 95500D3C1EE7FB7DACCE08DC /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 4BE7093447D6D7ADBFBF4C29 /* [CP] Embed Pods Frameworks */, + B311D48FC89BEDF4EB2DCDDE /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -361,46 +361,46 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 4BE7093447D6D7ADBFBF4C29 /* [CP] Embed Pods Frameworks */ = { + 95500D3C1EE7FB7DACCE08DC /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 53D3984EB9BDCC15FE39632C /* [CP] Check Pods Manifest.lock */ = { + B311D48FC89BEDF4EB2DCDDE /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - 8C9C6CB44270EC110E6DCD63 /* [CP] Check Pods Manifest.lock */ = { + C4789C072FD8F107A45D1C43 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -415,7 +415,7 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 116A2D736E3DB4E136903D2C /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 81C82BB4E8EABFAC2304248A /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = F0E4CC2439991D402B203A71 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = FF398A0A44AD651D2C2EF977 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 3C11113B321AB882C8752E03 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = E93D02470CD1D3EA960793F9 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/brick_breaker/step_07/web/index.html b/brick_breaker/step_07/web/index.html index da690bb6c1..0ffbea0397 100644 --- a/brick_breaker/step_07/web/index.html +++ b/brick_breaker/step_07/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/brick_breaker/step_08/android/gradle.properties b/brick_breaker/step_08/android/gradle.properties index f018a61817..2597170821 100644 --- a/brick_breaker/step_08/android/gradle.properties +++ b/brick_breaker/step_08/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/brick_breaker/step_08/ios/Runner.xcodeproj/project.pbxproj b/brick_breaker/step_08/ios/Runner.xcodeproj/project.pbxproj index c78ae8b4ed..6d1a96d63a 100644 --- a/brick_breaker/step_08/ios/Runner.xcodeproj/project.pbxproj +++ b/brick_breaker/step_08/ios/Runner.xcodeproj/project.pbxproj @@ -7,11 +7,11 @@ objects = { /* Begin PBXBuildFile section */ - 079C3C1D22F2289294620456 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 230907B81ABBBE54EDD3D92A /* Pods_Runner.framework */; }; 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; - 64FAAECB542C8A4AB2D063D2 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 468B3D82A8E7362654223F6F /* Pods_RunnerTests.framework */; }; + 435C672EDB3C79EF8289B1E5 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9C8A6BA03FC59B0344DC9E5F /* Pods_RunnerTests.framework */; }; + 4894AF48D2F94D6F1DABB2D3 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 57D6C7E904CFDCF3B7D477C6 /* Pods_Runner.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; @@ -44,35 +44,35 @@ /* Begin PBXFileReference section */ 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 230907B81ABBBE54EDD3D92A /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 348DE31F4CCE0D6A451383E7 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 468B3D82A8E7362654223F6F /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 6BBD6F4451CA6EB726893C37 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 43E393EFCAC4AAC9B6E9AB99 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 4E857F5A50355F5D8711BD08 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 57D6C7E904CFDCF3B7D477C6 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 71648F3D10B18A805A5C5B83 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 914F2DA382F9E2C3A7E83EB5 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 91AE6679660B5BFDE37CA10C /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; - 9747D350E0CF79FD5C0FECAB /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - C94A641E14FACBB5C9C82B23 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - D594E156A999614A354720D9 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 9C8A6BA03FC59B0344DC9E5F /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + AC955D3DBF778EEBAF66455F /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + F6D81E7FFA76393DDD83EDE7 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 936D3A87682C3D4617F2544B /* Frameworks */ = { + 0B544D9D6451D8B7513063BD /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 64FAAECB542C8A4AB2D063D2 /* Pods_RunnerTests.framework in Frameworks */, + 435C672EDB3C79EF8289B1E5 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -80,7 +80,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 079C3C1D22F2289294620456 /* Pods_Runner.framework in Frameworks */, + 4894AF48D2F94D6F1DABB2D3 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -95,6 +95,20 @@ path = RunnerTests; sourceTree = ""; }; + 9135670FD92EB74D54D0AB79 /* Pods */ = { + isa = PBXGroup; + children = ( + 43E393EFCAC4AAC9B6E9AB99 /* Pods-Runner.debug.xcconfig */, + 4E857F5A50355F5D8711BD08 /* Pods-Runner.release.xcconfig */, + F6D81E7FFA76393DDD83EDE7 /* Pods-Runner.profile.xcconfig */, + 71648F3D10B18A805A5C5B83 /* Pods-RunnerTests.debug.xcconfig */, + AC955D3DBF778EEBAF66455F /* Pods-RunnerTests.release.xcconfig */, + 91AE6679660B5BFDE37CA10C /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( @@ -113,8 +127,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - E11E89FF5D3D57A4206FAEE3 /* Pods */, - C1CD4192BD09C48BF2590FF1 /* Frameworks */, + 9135670FD92EB74D54D0AB79 /* Pods */, + F20E1DAAA380CE8C17F7F24D /* Frameworks */, ); sourceTree = ""; }; @@ -142,29 +156,15 @@ path = Runner; sourceTree = ""; }; - C1CD4192BD09C48BF2590FF1 /* Frameworks */ = { + F20E1DAAA380CE8C17F7F24D /* Frameworks */ = { isa = PBXGroup; children = ( - 230907B81ABBBE54EDD3D92A /* Pods_Runner.framework */, - 468B3D82A8E7362654223F6F /* Pods_RunnerTests.framework */, + 57D6C7E904CFDCF3B7D477C6 /* Pods_Runner.framework */, + 9C8A6BA03FC59B0344DC9E5F /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; }; - E11E89FF5D3D57A4206FAEE3 /* Pods */ = { - isa = PBXGroup; - children = ( - 348DE31F4CCE0D6A451383E7 /* Pods-Runner.debug.xcconfig */, - 9747D350E0CF79FD5C0FECAB /* Pods-Runner.release.xcconfig */, - D594E156A999614A354720D9 /* Pods-Runner.profile.xcconfig */, - 914F2DA382F9E2C3A7E83EB5 /* Pods-RunnerTests.debug.xcconfig */, - 6BBD6F4451CA6EB726893C37 /* Pods-RunnerTests.release.xcconfig */, - C94A641E14FACBB5C9C82B23 /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 7F9FC99CA9E45369A25AF36A /* [CP] Check Pods Manifest.lock */, + B0951A5E64A8BCDFA6315953 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 936D3A87682C3D4617F2544B /* Frameworks */, + 0B544D9D6451D8B7513063BD /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 9B7E0515E2987B0F2F2161A0 /* [CP] Check Pods Manifest.lock */, + C6BE0A2E972E4BF469954FE7 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 66245B0048ADE2CC238D41DE /* [CP] Embed Pods Frameworks */, + EA8C715000E3367B65E72722 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -286,24 +286,22 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 66245B0048ADE2CC238D41DE /* [CP] Embed Pods Frameworks */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + inputPaths = ( ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + name = "Run Script"; + outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - 7F9FC99CA9E45369A25AF36A /* [CP] Check Pods Manifest.lock */ = { + B0951A5E64A8BCDFA6315953 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -325,41 +323,43 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { + C6BE0A2E972E4BF469954FE7 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "Run Script"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - 9B7E0515E2987B0F2F2161A0 /* [CP] Check Pods Manifest.lock */ = { + EA8C715000E3367B65E72722 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 914F2DA382F9E2C3A7E83EB5 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 71648F3D10B18A805A5C5B83 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 6BBD6F4451CA6EB726893C37 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = AC955D3DBF778EEBAF66455F /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C94A641E14FACBB5C9C82B23 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 91AE6679660B5BFDE37CA10C /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/brick_breaker/step_08/linux/CMakeLists.txt b/brick_breaker/step_08/linux/CMakeLists.txt index 9f288a67f3..97c400e174 100644 --- a/brick_breaker/step_08/linux/CMakeLists.txt +++ b/brick_breaker/step_08/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.13) +cmake_minimum_required(VERSION 3.10) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,8 +54,25 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -# Application build; see runner/CMakeLists.txt. -add_subdirectory("runner") +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Define the application target. To change its name, change BINARY_NAME above, +# not the value here, or `flutter run` will no longer work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/brick_breaker/step_08/linux/runner/main.cc b/brick_breaker/step_08/linux/main.cc similarity index 100% rename from brick_breaker/step_08/linux/runner/main.cc rename to brick_breaker/step_08/linux/main.cc diff --git a/brick_breaker/step_08/linux/my_application.cc b/brick_breaker/step_08/linux/my_application.cc new file mode 100644 index 0000000000..5f348fea29 --- /dev/null +++ b/brick_breaker/step_08/linux/my_application.cc @@ -0,0 +1,124 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "brick_breaker"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "brick_breaker"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/brick_breaker/step_08/linux/runner/my_application.h b/brick_breaker/step_08/linux/my_application.h similarity index 100% rename from brick_breaker/step_08/linux/runner/my_application.h rename to brick_breaker/step_08/linux/my_application.h diff --git a/brick_breaker/step_08/linux/runner/CMakeLists.txt b/brick_breaker/step_08/linux/runner/CMakeLists.txt deleted file mode 100644 index e97dabc702..0000000000 --- a/brick_breaker/step_08/linux/runner/CMakeLists.txt +++ /dev/null @@ -1,26 +0,0 @@ -cmake_minimum_required(VERSION 3.13) -project(runner LANGUAGES CXX) - -# Define the application target. To change its name, change BINARY_NAME in the -# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer -# work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add preprocessor definitions for the application ID. -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) - -target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/brick_breaker/step_08/linux/runner/my_application.cc b/brick_breaker/step_08/linux/runner/my_application.cc deleted file mode 100644 index f80944a7ba..0000000000 --- a/brick_breaker/step_08/linux/runner/my_application.cc +++ /dev/null @@ -1,130 +0,0 @@ -#include "my_application.h" - -#include -#ifdef GDK_WINDOWING_X11 -#include -#endif - -#include "flutter/generated_plugin_registrant.h" - -struct _MyApplication { - GtkApplication parent_instance; - char** dart_entrypoint_arguments; -}; - -G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) - -// Implements GApplication::activate. -static void my_application_activate(GApplication* application) { - MyApplication* self = MY_APPLICATION(application); - GtkWindow* window = - GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); - - // Use a header bar when running in GNOME as this is the common style used - // by applications and is the setup most users will be using (e.g. Ubuntu - // desktop). - // If running on X and not using GNOME then just use a traditional title bar - // in case the window manager does more exotic layout, e.g. tiling. - // If running on Wayland assume the header bar will work (may need changing - // if future cases occur). - gboolean use_header_bar = TRUE; -#ifdef GDK_WINDOWING_X11 - GdkScreen* screen = gtk_window_get_screen(window); - if (GDK_IS_X11_SCREEN(screen)) { - const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); - if (g_strcmp0(wm_name, "GNOME Shell") != 0) { - use_header_bar = FALSE; - } - } -#endif - if (use_header_bar) { - GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); - gtk_widget_show(GTK_WIDGET(header_bar)); - gtk_header_bar_set_title(header_bar, "brick_breaker"); - gtk_header_bar_set_show_close_button(header_bar, TRUE); - gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); - } else { - gtk_window_set_title(window, "brick_breaker"); - } - - gtk_window_set_default_size(window, 1280, 720); - gtk_widget_show(GTK_WIDGET(window)); - - g_autoptr(FlDartProject) project = fl_dart_project_new(); - fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); - - FlView* view = fl_view_new(project); - gtk_widget_show(GTK_WIDGET(view)); - gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); - - fl_register_plugins(FL_PLUGIN_REGISTRY(view)); - - gtk_widget_grab_focus(GTK_WIDGET(view)); -} - -// Implements GApplication::local_command_line. -static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { - MyApplication* self = MY_APPLICATION(application); - // Strip out the first argument as it is the binary name. - self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); - - g_autoptr(GError) error = nullptr; - if (!g_application_register(application, nullptr, &error)) { - g_warning("Failed to register: %s", error->message); - *exit_status = 1; - return TRUE; - } - - g_application_activate(application); - *exit_status = 0; - - return TRUE; -} - -// Implements GApplication::startup. -static void my_application_startup(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application startup. - - G_APPLICATION_CLASS(my_application_parent_class)->startup(application); -} - -// Implements GApplication::shutdown. -static void my_application_shutdown(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application shutdown. - - G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); -} - -// Implements GObject::dispose. -static void my_application_dispose(GObject* object) { - MyApplication* self = MY_APPLICATION(object); - g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); - G_OBJECT_CLASS(my_application_parent_class)->dispose(object); -} - -static void my_application_class_init(MyApplicationClass* klass) { - G_APPLICATION_CLASS(klass)->activate = my_application_activate; - G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; - G_APPLICATION_CLASS(klass)->startup = my_application_startup; - G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; - G_OBJECT_CLASS(klass)->dispose = my_application_dispose; -} - -static void my_application_init(MyApplication* self) {} - -MyApplication* my_application_new() { - // Set the program name to the application ID, which helps various systems - // like GTK and desktop environments map this running application to its - // corresponding .desktop file. This ensures better integration by allowing - // the application to be recognized beyond its binary name. - g_set_prgname(APPLICATION_ID); - - return MY_APPLICATION(g_object_new(my_application_get_type(), - "application-id", APPLICATION_ID, - "flags", G_APPLICATION_NON_UNIQUE, - nullptr)); -} diff --git a/brick_breaker/step_08/macos/Runner.xcodeproj/project.pbxproj b/brick_breaker/step_08/macos/Runner.xcodeproj/project.pbxproj index 636a28c53a..139f2ab564 100644 --- a/brick_breaker/step_08/macos/Runner.xcodeproj/project.pbxproj +++ b/brick_breaker/step_08/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ + 26DEE62C40082E048AB2DAC9 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F92CB96B5E92665177C18209 /* Pods_Runner.framework */; }; + 302724C6CB220CF55A24A7F6 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6405B62D2CA2577368E77111 /* Pods_RunnerTests.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 4EDE108470BB936D2121DAC2 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C352266AE7D36E6036C311DB /* Pods_Runner.framework */; }; - D1ADFA42F2A712AE0DDB3C4F /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F7DDA05F09C7BFFC6495BD57 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,9 +62,7 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 116A2D736E3DB4E136903D2C /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 16CD08E3FF9AD3D23AC8A89E /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 1771944E11EF7BBD50D4D2FD /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 114979CB87B99A65FC62EC11 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -81,13 +79,15 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 3C11113B321AB882C8752E03 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 35582EBA48CF0CAD302E6F20 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 44116D975D14ACE930B555BE /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 6405B62D2CA2577368E77111 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; + 81C82BB4E8EABFAC2304248A /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - C352266AE7D36E6036C311DB /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - C4186463924752EE4186F1BD /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - F0E4CC2439991D402B203A71 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - F7DDA05F09C7BFFC6495BD57 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + E93D02470CD1D3EA960793F9 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + F92CB96B5E92665177C18209 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + FF398A0A44AD651D2C2EF977 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - D1ADFA42F2A712AE0DDB3C4F /* Pods_RunnerTests.framework in Frameworks */, + 302724C6CB220CF55A24A7F6 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,13 +103,27 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 4EDE108470BB936D2121DAC2 /* Pods_Runner.framework in Frameworks */, + 26DEE62C40082E048AB2DAC9 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 1AD2B861098DC69EDF5A5504 /* Pods */ = { + isa = PBXGroup; + children = ( + 35582EBA48CF0CAD302E6F20 /* Pods-Runner.debug.xcconfig */, + 44116D975D14ACE930B555BE /* Pods-Runner.release.xcconfig */, + 114979CB87B99A65FC62EC11 /* Pods-Runner.profile.xcconfig */, + 81C82BB4E8EABFAC2304248A /* Pods-RunnerTests.debug.xcconfig */, + FF398A0A44AD651D2C2EF977 /* Pods-RunnerTests.release.xcconfig */, + E93D02470CD1D3EA960793F9 /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; 331C80D6294CF71000263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -137,7 +151,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - FE0B828880FE4FF908108270 /* Pods */, + 1AD2B861098DC69EDF5A5504 /* Pods */, ); sourceTree = ""; }; @@ -188,26 +202,12 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - C352266AE7D36E6036C311DB /* Pods_Runner.framework */, - F7DDA05F09C7BFFC6495BD57 /* Pods_RunnerTests.framework */, + F92CB96B5E92665177C18209 /* Pods_Runner.framework */, + 6405B62D2CA2577368E77111 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; }; - FE0B828880FE4FF908108270 /* Pods */ = { - isa = PBXGroup; - children = ( - 16CD08E3FF9AD3D23AC8A89E /* Pods-Runner.debug.xcconfig */, - C4186463924752EE4186F1BD /* Pods-Runner.release.xcconfig */, - 1771944E11EF7BBD50D4D2FD /* Pods-Runner.profile.xcconfig */, - 116A2D736E3DB4E136903D2C /* Pods-RunnerTests.debug.xcconfig */, - F0E4CC2439991D402B203A71 /* Pods-RunnerTests.release.xcconfig */, - 3C11113B321AB882C8752E03 /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 53D3984EB9BDCC15FE39632C /* [CP] Check Pods Manifest.lock */, + C4789C072FD8F107A45D1C43 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 8C9C6CB44270EC110E6DCD63 /* [CP] Check Pods Manifest.lock */, + 95500D3C1EE7FB7DACCE08DC /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 4BE7093447D6D7ADBFBF4C29 /* [CP] Embed Pods Frameworks */, + B311D48FC89BEDF4EB2DCDDE /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -361,46 +361,46 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 4BE7093447D6D7ADBFBF4C29 /* [CP] Embed Pods Frameworks */ = { + 95500D3C1EE7FB7DACCE08DC /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 53D3984EB9BDCC15FE39632C /* [CP] Check Pods Manifest.lock */ = { + B311D48FC89BEDF4EB2DCDDE /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - 8C9C6CB44270EC110E6DCD63 /* [CP] Check Pods Manifest.lock */ = { + C4789C072FD8F107A45D1C43 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -415,7 +415,7 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 116A2D736E3DB4E136903D2C /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 81C82BB4E8EABFAC2304248A /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = F0E4CC2439991D402B203A71 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = FF398A0A44AD651D2C2EF977 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 3C11113B321AB882C8752E03 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = E93D02470CD1D3EA960793F9 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/brick_breaker/step_08/web/index.html b/brick_breaker/step_08/web/index.html index da690bb6c1..0ffbea0397 100644 --- a/brick_breaker/step_08/web/index.html +++ b/brick_breaker/step_08/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/brick_breaker/step_09/android/gradle.properties b/brick_breaker/step_09/android/gradle.properties index f018a61817..2597170821 100644 --- a/brick_breaker/step_09/android/gradle.properties +++ b/brick_breaker/step_09/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/brick_breaker/step_09/ios/Runner.xcodeproj/project.pbxproj b/brick_breaker/step_09/ios/Runner.xcodeproj/project.pbxproj index c78ae8b4ed..6d1a96d63a 100644 --- a/brick_breaker/step_09/ios/Runner.xcodeproj/project.pbxproj +++ b/brick_breaker/step_09/ios/Runner.xcodeproj/project.pbxproj @@ -7,11 +7,11 @@ objects = { /* Begin PBXBuildFile section */ - 079C3C1D22F2289294620456 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 230907B81ABBBE54EDD3D92A /* Pods_Runner.framework */; }; 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; - 64FAAECB542C8A4AB2D063D2 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 468B3D82A8E7362654223F6F /* Pods_RunnerTests.framework */; }; + 435C672EDB3C79EF8289B1E5 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9C8A6BA03FC59B0344DC9E5F /* Pods_RunnerTests.framework */; }; + 4894AF48D2F94D6F1DABB2D3 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 57D6C7E904CFDCF3B7D477C6 /* Pods_Runner.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; @@ -44,35 +44,35 @@ /* Begin PBXFileReference section */ 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 230907B81ABBBE54EDD3D92A /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 348DE31F4CCE0D6A451383E7 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 468B3D82A8E7362654223F6F /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 6BBD6F4451CA6EB726893C37 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 43E393EFCAC4AAC9B6E9AB99 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 4E857F5A50355F5D8711BD08 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 57D6C7E904CFDCF3B7D477C6 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 71648F3D10B18A805A5C5B83 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 914F2DA382F9E2C3A7E83EB5 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 91AE6679660B5BFDE37CA10C /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; - 9747D350E0CF79FD5C0FECAB /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - C94A641E14FACBB5C9C82B23 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - D594E156A999614A354720D9 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 9C8A6BA03FC59B0344DC9E5F /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + AC955D3DBF778EEBAF66455F /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + F6D81E7FFA76393DDD83EDE7 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 936D3A87682C3D4617F2544B /* Frameworks */ = { + 0B544D9D6451D8B7513063BD /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 64FAAECB542C8A4AB2D063D2 /* Pods_RunnerTests.framework in Frameworks */, + 435C672EDB3C79EF8289B1E5 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -80,7 +80,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 079C3C1D22F2289294620456 /* Pods_Runner.framework in Frameworks */, + 4894AF48D2F94D6F1DABB2D3 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -95,6 +95,20 @@ path = RunnerTests; sourceTree = ""; }; + 9135670FD92EB74D54D0AB79 /* Pods */ = { + isa = PBXGroup; + children = ( + 43E393EFCAC4AAC9B6E9AB99 /* Pods-Runner.debug.xcconfig */, + 4E857F5A50355F5D8711BD08 /* Pods-Runner.release.xcconfig */, + F6D81E7FFA76393DDD83EDE7 /* Pods-Runner.profile.xcconfig */, + 71648F3D10B18A805A5C5B83 /* Pods-RunnerTests.debug.xcconfig */, + AC955D3DBF778EEBAF66455F /* Pods-RunnerTests.release.xcconfig */, + 91AE6679660B5BFDE37CA10C /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( @@ -113,8 +127,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - E11E89FF5D3D57A4206FAEE3 /* Pods */, - C1CD4192BD09C48BF2590FF1 /* Frameworks */, + 9135670FD92EB74D54D0AB79 /* Pods */, + F20E1DAAA380CE8C17F7F24D /* Frameworks */, ); sourceTree = ""; }; @@ -142,29 +156,15 @@ path = Runner; sourceTree = ""; }; - C1CD4192BD09C48BF2590FF1 /* Frameworks */ = { + F20E1DAAA380CE8C17F7F24D /* Frameworks */ = { isa = PBXGroup; children = ( - 230907B81ABBBE54EDD3D92A /* Pods_Runner.framework */, - 468B3D82A8E7362654223F6F /* Pods_RunnerTests.framework */, + 57D6C7E904CFDCF3B7D477C6 /* Pods_Runner.framework */, + 9C8A6BA03FC59B0344DC9E5F /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; }; - E11E89FF5D3D57A4206FAEE3 /* Pods */ = { - isa = PBXGroup; - children = ( - 348DE31F4CCE0D6A451383E7 /* Pods-Runner.debug.xcconfig */, - 9747D350E0CF79FD5C0FECAB /* Pods-Runner.release.xcconfig */, - D594E156A999614A354720D9 /* Pods-Runner.profile.xcconfig */, - 914F2DA382F9E2C3A7E83EB5 /* Pods-RunnerTests.debug.xcconfig */, - 6BBD6F4451CA6EB726893C37 /* Pods-RunnerTests.release.xcconfig */, - C94A641E14FACBB5C9C82B23 /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 7F9FC99CA9E45369A25AF36A /* [CP] Check Pods Manifest.lock */, + B0951A5E64A8BCDFA6315953 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 936D3A87682C3D4617F2544B /* Frameworks */, + 0B544D9D6451D8B7513063BD /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 9B7E0515E2987B0F2F2161A0 /* [CP] Check Pods Manifest.lock */, + C6BE0A2E972E4BF469954FE7 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 66245B0048ADE2CC238D41DE /* [CP] Embed Pods Frameworks */, + EA8C715000E3367B65E72722 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -286,24 +286,22 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 66245B0048ADE2CC238D41DE /* [CP] Embed Pods Frameworks */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + inputPaths = ( ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + name = "Run Script"; + outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - 7F9FC99CA9E45369A25AF36A /* [CP] Check Pods Manifest.lock */ = { + B0951A5E64A8BCDFA6315953 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -325,41 +323,43 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { + C6BE0A2E972E4BF469954FE7 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "Run Script"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - 9B7E0515E2987B0F2F2161A0 /* [CP] Check Pods Manifest.lock */ = { + EA8C715000E3367B65E72722 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 914F2DA382F9E2C3A7E83EB5 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 71648F3D10B18A805A5C5B83 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 6BBD6F4451CA6EB726893C37 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = AC955D3DBF778EEBAF66455F /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C94A641E14FACBB5C9C82B23 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 91AE6679660B5BFDE37CA10C /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/brick_breaker/step_09/linux/CMakeLists.txt b/brick_breaker/step_09/linux/CMakeLists.txt index 9f288a67f3..97c400e174 100644 --- a/brick_breaker/step_09/linux/CMakeLists.txt +++ b/brick_breaker/step_09/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.13) +cmake_minimum_required(VERSION 3.10) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,8 +54,25 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -# Application build; see runner/CMakeLists.txt. -add_subdirectory("runner") +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Define the application target. To change its name, change BINARY_NAME above, +# not the value here, or `flutter run` will no longer work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/brick_breaker/step_09/linux/runner/main.cc b/brick_breaker/step_09/linux/main.cc similarity index 100% rename from brick_breaker/step_09/linux/runner/main.cc rename to brick_breaker/step_09/linux/main.cc diff --git a/brick_breaker/step_09/linux/my_application.cc b/brick_breaker/step_09/linux/my_application.cc new file mode 100644 index 0000000000..5f348fea29 --- /dev/null +++ b/brick_breaker/step_09/linux/my_application.cc @@ -0,0 +1,124 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "brick_breaker"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "brick_breaker"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/brick_breaker/step_09/linux/runner/my_application.h b/brick_breaker/step_09/linux/my_application.h similarity index 100% rename from brick_breaker/step_09/linux/runner/my_application.h rename to brick_breaker/step_09/linux/my_application.h diff --git a/brick_breaker/step_09/linux/runner/CMakeLists.txt b/brick_breaker/step_09/linux/runner/CMakeLists.txt deleted file mode 100644 index e97dabc702..0000000000 --- a/brick_breaker/step_09/linux/runner/CMakeLists.txt +++ /dev/null @@ -1,26 +0,0 @@ -cmake_minimum_required(VERSION 3.13) -project(runner LANGUAGES CXX) - -# Define the application target. To change its name, change BINARY_NAME in the -# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer -# work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add preprocessor definitions for the application ID. -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) - -target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/brick_breaker/step_09/linux/runner/my_application.cc b/brick_breaker/step_09/linux/runner/my_application.cc deleted file mode 100644 index f80944a7ba..0000000000 --- a/brick_breaker/step_09/linux/runner/my_application.cc +++ /dev/null @@ -1,130 +0,0 @@ -#include "my_application.h" - -#include -#ifdef GDK_WINDOWING_X11 -#include -#endif - -#include "flutter/generated_plugin_registrant.h" - -struct _MyApplication { - GtkApplication parent_instance; - char** dart_entrypoint_arguments; -}; - -G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) - -// Implements GApplication::activate. -static void my_application_activate(GApplication* application) { - MyApplication* self = MY_APPLICATION(application); - GtkWindow* window = - GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); - - // Use a header bar when running in GNOME as this is the common style used - // by applications and is the setup most users will be using (e.g. Ubuntu - // desktop). - // If running on X and not using GNOME then just use a traditional title bar - // in case the window manager does more exotic layout, e.g. tiling. - // If running on Wayland assume the header bar will work (may need changing - // if future cases occur). - gboolean use_header_bar = TRUE; -#ifdef GDK_WINDOWING_X11 - GdkScreen* screen = gtk_window_get_screen(window); - if (GDK_IS_X11_SCREEN(screen)) { - const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); - if (g_strcmp0(wm_name, "GNOME Shell") != 0) { - use_header_bar = FALSE; - } - } -#endif - if (use_header_bar) { - GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); - gtk_widget_show(GTK_WIDGET(header_bar)); - gtk_header_bar_set_title(header_bar, "brick_breaker"); - gtk_header_bar_set_show_close_button(header_bar, TRUE); - gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); - } else { - gtk_window_set_title(window, "brick_breaker"); - } - - gtk_window_set_default_size(window, 1280, 720); - gtk_widget_show(GTK_WIDGET(window)); - - g_autoptr(FlDartProject) project = fl_dart_project_new(); - fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); - - FlView* view = fl_view_new(project); - gtk_widget_show(GTK_WIDGET(view)); - gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); - - fl_register_plugins(FL_PLUGIN_REGISTRY(view)); - - gtk_widget_grab_focus(GTK_WIDGET(view)); -} - -// Implements GApplication::local_command_line. -static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { - MyApplication* self = MY_APPLICATION(application); - // Strip out the first argument as it is the binary name. - self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); - - g_autoptr(GError) error = nullptr; - if (!g_application_register(application, nullptr, &error)) { - g_warning("Failed to register: %s", error->message); - *exit_status = 1; - return TRUE; - } - - g_application_activate(application); - *exit_status = 0; - - return TRUE; -} - -// Implements GApplication::startup. -static void my_application_startup(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application startup. - - G_APPLICATION_CLASS(my_application_parent_class)->startup(application); -} - -// Implements GApplication::shutdown. -static void my_application_shutdown(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application shutdown. - - G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); -} - -// Implements GObject::dispose. -static void my_application_dispose(GObject* object) { - MyApplication* self = MY_APPLICATION(object); - g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); - G_OBJECT_CLASS(my_application_parent_class)->dispose(object); -} - -static void my_application_class_init(MyApplicationClass* klass) { - G_APPLICATION_CLASS(klass)->activate = my_application_activate; - G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; - G_APPLICATION_CLASS(klass)->startup = my_application_startup; - G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; - G_OBJECT_CLASS(klass)->dispose = my_application_dispose; -} - -static void my_application_init(MyApplication* self) {} - -MyApplication* my_application_new() { - // Set the program name to the application ID, which helps various systems - // like GTK and desktop environments map this running application to its - // corresponding .desktop file. This ensures better integration by allowing - // the application to be recognized beyond its binary name. - g_set_prgname(APPLICATION_ID); - - return MY_APPLICATION(g_object_new(my_application_get_type(), - "application-id", APPLICATION_ID, - "flags", G_APPLICATION_NON_UNIQUE, - nullptr)); -} diff --git a/brick_breaker/step_09/macos/Runner.xcodeproj/project.pbxproj b/brick_breaker/step_09/macos/Runner.xcodeproj/project.pbxproj index 636a28c53a..139f2ab564 100644 --- a/brick_breaker/step_09/macos/Runner.xcodeproj/project.pbxproj +++ b/brick_breaker/step_09/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ + 26DEE62C40082E048AB2DAC9 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F92CB96B5E92665177C18209 /* Pods_Runner.framework */; }; + 302724C6CB220CF55A24A7F6 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6405B62D2CA2577368E77111 /* Pods_RunnerTests.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 4EDE108470BB936D2121DAC2 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C352266AE7D36E6036C311DB /* Pods_Runner.framework */; }; - D1ADFA42F2A712AE0DDB3C4F /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F7DDA05F09C7BFFC6495BD57 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,9 +62,7 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 116A2D736E3DB4E136903D2C /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 16CD08E3FF9AD3D23AC8A89E /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 1771944E11EF7BBD50D4D2FD /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 114979CB87B99A65FC62EC11 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -81,13 +79,15 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 3C11113B321AB882C8752E03 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 35582EBA48CF0CAD302E6F20 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 44116D975D14ACE930B555BE /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 6405B62D2CA2577368E77111 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; + 81C82BB4E8EABFAC2304248A /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - C352266AE7D36E6036C311DB /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - C4186463924752EE4186F1BD /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - F0E4CC2439991D402B203A71 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - F7DDA05F09C7BFFC6495BD57 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + E93D02470CD1D3EA960793F9 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + F92CB96B5E92665177C18209 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + FF398A0A44AD651D2C2EF977 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - D1ADFA42F2A712AE0DDB3C4F /* Pods_RunnerTests.framework in Frameworks */, + 302724C6CB220CF55A24A7F6 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,13 +103,27 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 4EDE108470BB936D2121DAC2 /* Pods_Runner.framework in Frameworks */, + 26DEE62C40082E048AB2DAC9 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 1AD2B861098DC69EDF5A5504 /* Pods */ = { + isa = PBXGroup; + children = ( + 35582EBA48CF0CAD302E6F20 /* Pods-Runner.debug.xcconfig */, + 44116D975D14ACE930B555BE /* Pods-Runner.release.xcconfig */, + 114979CB87B99A65FC62EC11 /* Pods-Runner.profile.xcconfig */, + 81C82BB4E8EABFAC2304248A /* Pods-RunnerTests.debug.xcconfig */, + FF398A0A44AD651D2C2EF977 /* Pods-RunnerTests.release.xcconfig */, + E93D02470CD1D3EA960793F9 /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; 331C80D6294CF71000263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -137,7 +151,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - FE0B828880FE4FF908108270 /* Pods */, + 1AD2B861098DC69EDF5A5504 /* Pods */, ); sourceTree = ""; }; @@ -188,26 +202,12 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - C352266AE7D36E6036C311DB /* Pods_Runner.framework */, - F7DDA05F09C7BFFC6495BD57 /* Pods_RunnerTests.framework */, + F92CB96B5E92665177C18209 /* Pods_Runner.framework */, + 6405B62D2CA2577368E77111 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; }; - FE0B828880FE4FF908108270 /* Pods */ = { - isa = PBXGroup; - children = ( - 16CD08E3FF9AD3D23AC8A89E /* Pods-Runner.debug.xcconfig */, - C4186463924752EE4186F1BD /* Pods-Runner.release.xcconfig */, - 1771944E11EF7BBD50D4D2FD /* Pods-Runner.profile.xcconfig */, - 116A2D736E3DB4E136903D2C /* Pods-RunnerTests.debug.xcconfig */, - F0E4CC2439991D402B203A71 /* Pods-RunnerTests.release.xcconfig */, - 3C11113B321AB882C8752E03 /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 53D3984EB9BDCC15FE39632C /* [CP] Check Pods Manifest.lock */, + C4789C072FD8F107A45D1C43 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 8C9C6CB44270EC110E6DCD63 /* [CP] Check Pods Manifest.lock */, + 95500D3C1EE7FB7DACCE08DC /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 4BE7093447D6D7ADBFBF4C29 /* [CP] Embed Pods Frameworks */, + B311D48FC89BEDF4EB2DCDDE /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -361,46 +361,46 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 4BE7093447D6D7ADBFBF4C29 /* [CP] Embed Pods Frameworks */ = { + 95500D3C1EE7FB7DACCE08DC /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 53D3984EB9BDCC15FE39632C /* [CP] Check Pods Manifest.lock */ = { + B311D48FC89BEDF4EB2DCDDE /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - 8C9C6CB44270EC110E6DCD63 /* [CP] Check Pods Manifest.lock */ = { + C4789C072FD8F107A45D1C43 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -415,7 +415,7 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 116A2D736E3DB4E136903D2C /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 81C82BB4E8EABFAC2304248A /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = F0E4CC2439991D402B203A71 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = FF398A0A44AD651D2C2EF977 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 3C11113B321AB882C8752E03 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = E93D02470CD1D3EA960793F9 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/brick_breaker/step_09/web/index.html b/brick_breaker/step_09/web/index.html index da690bb6c1..0ffbea0397 100644 --- a/brick_breaker/step_09/web/index.html +++ b/brick_breaker/step_09/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/brick_breaker/step_10/android/gradle.properties b/brick_breaker/step_10/android/gradle.properties index f018a61817..2597170821 100644 --- a/brick_breaker/step_10/android/gradle.properties +++ b/brick_breaker/step_10/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/brick_breaker/step_10/ios/Runner.xcodeproj/project.pbxproj b/brick_breaker/step_10/ios/Runner.xcodeproj/project.pbxproj index c78ae8b4ed..6d1a96d63a 100644 --- a/brick_breaker/step_10/ios/Runner.xcodeproj/project.pbxproj +++ b/brick_breaker/step_10/ios/Runner.xcodeproj/project.pbxproj @@ -7,11 +7,11 @@ objects = { /* Begin PBXBuildFile section */ - 079C3C1D22F2289294620456 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 230907B81ABBBE54EDD3D92A /* Pods_Runner.framework */; }; 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; - 64FAAECB542C8A4AB2D063D2 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 468B3D82A8E7362654223F6F /* Pods_RunnerTests.framework */; }; + 435C672EDB3C79EF8289B1E5 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9C8A6BA03FC59B0344DC9E5F /* Pods_RunnerTests.framework */; }; + 4894AF48D2F94D6F1DABB2D3 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 57D6C7E904CFDCF3B7D477C6 /* Pods_Runner.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; @@ -44,35 +44,35 @@ /* Begin PBXFileReference section */ 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 230907B81ABBBE54EDD3D92A /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 348DE31F4CCE0D6A451383E7 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 468B3D82A8E7362654223F6F /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 6BBD6F4451CA6EB726893C37 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 43E393EFCAC4AAC9B6E9AB99 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 4E857F5A50355F5D8711BD08 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 57D6C7E904CFDCF3B7D477C6 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 71648F3D10B18A805A5C5B83 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 914F2DA382F9E2C3A7E83EB5 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 91AE6679660B5BFDE37CA10C /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; - 9747D350E0CF79FD5C0FECAB /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - C94A641E14FACBB5C9C82B23 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - D594E156A999614A354720D9 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 9C8A6BA03FC59B0344DC9E5F /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + AC955D3DBF778EEBAF66455F /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + F6D81E7FFA76393DDD83EDE7 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 936D3A87682C3D4617F2544B /* Frameworks */ = { + 0B544D9D6451D8B7513063BD /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 64FAAECB542C8A4AB2D063D2 /* Pods_RunnerTests.framework in Frameworks */, + 435C672EDB3C79EF8289B1E5 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -80,7 +80,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 079C3C1D22F2289294620456 /* Pods_Runner.framework in Frameworks */, + 4894AF48D2F94D6F1DABB2D3 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -95,6 +95,20 @@ path = RunnerTests; sourceTree = ""; }; + 9135670FD92EB74D54D0AB79 /* Pods */ = { + isa = PBXGroup; + children = ( + 43E393EFCAC4AAC9B6E9AB99 /* Pods-Runner.debug.xcconfig */, + 4E857F5A50355F5D8711BD08 /* Pods-Runner.release.xcconfig */, + F6D81E7FFA76393DDD83EDE7 /* Pods-Runner.profile.xcconfig */, + 71648F3D10B18A805A5C5B83 /* Pods-RunnerTests.debug.xcconfig */, + AC955D3DBF778EEBAF66455F /* Pods-RunnerTests.release.xcconfig */, + 91AE6679660B5BFDE37CA10C /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( @@ -113,8 +127,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - E11E89FF5D3D57A4206FAEE3 /* Pods */, - C1CD4192BD09C48BF2590FF1 /* Frameworks */, + 9135670FD92EB74D54D0AB79 /* Pods */, + F20E1DAAA380CE8C17F7F24D /* Frameworks */, ); sourceTree = ""; }; @@ -142,29 +156,15 @@ path = Runner; sourceTree = ""; }; - C1CD4192BD09C48BF2590FF1 /* Frameworks */ = { + F20E1DAAA380CE8C17F7F24D /* Frameworks */ = { isa = PBXGroup; children = ( - 230907B81ABBBE54EDD3D92A /* Pods_Runner.framework */, - 468B3D82A8E7362654223F6F /* Pods_RunnerTests.framework */, + 57D6C7E904CFDCF3B7D477C6 /* Pods_Runner.framework */, + 9C8A6BA03FC59B0344DC9E5F /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; }; - E11E89FF5D3D57A4206FAEE3 /* Pods */ = { - isa = PBXGroup; - children = ( - 348DE31F4CCE0D6A451383E7 /* Pods-Runner.debug.xcconfig */, - 9747D350E0CF79FD5C0FECAB /* Pods-Runner.release.xcconfig */, - D594E156A999614A354720D9 /* Pods-Runner.profile.xcconfig */, - 914F2DA382F9E2C3A7E83EB5 /* Pods-RunnerTests.debug.xcconfig */, - 6BBD6F4451CA6EB726893C37 /* Pods-RunnerTests.release.xcconfig */, - C94A641E14FACBB5C9C82B23 /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 7F9FC99CA9E45369A25AF36A /* [CP] Check Pods Manifest.lock */, + B0951A5E64A8BCDFA6315953 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 936D3A87682C3D4617F2544B /* Frameworks */, + 0B544D9D6451D8B7513063BD /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 9B7E0515E2987B0F2F2161A0 /* [CP] Check Pods Manifest.lock */, + C6BE0A2E972E4BF469954FE7 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 66245B0048ADE2CC238D41DE /* [CP] Embed Pods Frameworks */, + EA8C715000E3367B65E72722 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -286,24 +286,22 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 66245B0048ADE2CC238D41DE /* [CP] Embed Pods Frameworks */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + inputPaths = ( ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + name = "Run Script"; + outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - 7F9FC99CA9E45369A25AF36A /* [CP] Check Pods Manifest.lock */ = { + B0951A5E64A8BCDFA6315953 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -325,41 +323,43 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { + C6BE0A2E972E4BF469954FE7 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "Run Script"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - 9B7E0515E2987B0F2F2161A0 /* [CP] Check Pods Manifest.lock */ = { + EA8C715000E3367B65E72722 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 914F2DA382F9E2C3A7E83EB5 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 71648F3D10B18A805A5C5B83 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 6BBD6F4451CA6EB726893C37 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = AC955D3DBF778EEBAF66455F /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C94A641E14FACBB5C9C82B23 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 91AE6679660B5BFDE37CA10C /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/brick_breaker/step_10/linux/CMakeLists.txt b/brick_breaker/step_10/linux/CMakeLists.txt index 9f288a67f3..97c400e174 100644 --- a/brick_breaker/step_10/linux/CMakeLists.txt +++ b/brick_breaker/step_10/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.13) +cmake_minimum_required(VERSION 3.10) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,8 +54,25 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -# Application build; see runner/CMakeLists.txt. -add_subdirectory("runner") +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Define the application target. To change its name, change BINARY_NAME above, +# not the value here, or `flutter run` will no longer work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/brick_breaker/step_10/linux/runner/main.cc b/brick_breaker/step_10/linux/main.cc similarity index 100% rename from brick_breaker/step_10/linux/runner/main.cc rename to brick_breaker/step_10/linux/main.cc diff --git a/brick_breaker/step_10/linux/my_application.cc b/brick_breaker/step_10/linux/my_application.cc new file mode 100644 index 0000000000..5f348fea29 --- /dev/null +++ b/brick_breaker/step_10/linux/my_application.cc @@ -0,0 +1,124 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "brick_breaker"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "brick_breaker"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/brick_breaker/step_10/linux/runner/my_application.h b/brick_breaker/step_10/linux/my_application.h similarity index 100% rename from brick_breaker/step_10/linux/runner/my_application.h rename to brick_breaker/step_10/linux/my_application.h diff --git a/brick_breaker/step_10/linux/runner/CMakeLists.txt b/brick_breaker/step_10/linux/runner/CMakeLists.txt deleted file mode 100644 index e97dabc702..0000000000 --- a/brick_breaker/step_10/linux/runner/CMakeLists.txt +++ /dev/null @@ -1,26 +0,0 @@ -cmake_minimum_required(VERSION 3.13) -project(runner LANGUAGES CXX) - -# Define the application target. To change its name, change BINARY_NAME in the -# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer -# work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add preprocessor definitions for the application ID. -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) - -target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/brick_breaker/step_10/linux/runner/my_application.cc b/brick_breaker/step_10/linux/runner/my_application.cc deleted file mode 100644 index f80944a7ba..0000000000 --- a/brick_breaker/step_10/linux/runner/my_application.cc +++ /dev/null @@ -1,130 +0,0 @@ -#include "my_application.h" - -#include -#ifdef GDK_WINDOWING_X11 -#include -#endif - -#include "flutter/generated_plugin_registrant.h" - -struct _MyApplication { - GtkApplication parent_instance; - char** dart_entrypoint_arguments; -}; - -G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) - -// Implements GApplication::activate. -static void my_application_activate(GApplication* application) { - MyApplication* self = MY_APPLICATION(application); - GtkWindow* window = - GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); - - // Use a header bar when running in GNOME as this is the common style used - // by applications and is the setup most users will be using (e.g. Ubuntu - // desktop). - // If running on X and not using GNOME then just use a traditional title bar - // in case the window manager does more exotic layout, e.g. tiling. - // If running on Wayland assume the header bar will work (may need changing - // if future cases occur). - gboolean use_header_bar = TRUE; -#ifdef GDK_WINDOWING_X11 - GdkScreen* screen = gtk_window_get_screen(window); - if (GDK_IS_X11_SCREEN(screen)) { - const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); - if (g_strcmp0(wm_name, "GNOME Shell") != 0) { - use_header_bar = FALSE; - } - } -#endif - if (use_header_bar) { - GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); - gtk_widget_show(GTK_WIDGET(header_bar)); - gtk_header_bar_set_title(header_bar, "brick_breaker"); - gtk_header_bar_set_show_close_button(header_bar, TRUE); - gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); - } else { - gtk_window_set_title(window, "brick_breaker"); - } - - gtk_window_set_default_size(window, 1280, 720); - gtk_widget_show(GTK_WIDGET(window)); - - g_autoptr(FlDartProject) project = fl_dart_project_new(); - fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); - - FlView* view = fl_view_new(project); - gtk_widget_show(GTK_WIDGET(view)); - gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); - - fl_register_plugins(FL_PLUGIN_REGISTRY(view)); - - gtk_widget_grab_focus(GTK_WIDGET(view)); -} - -// Implements GApplication::local_command_line. -static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { - MyApplication* self = MY_APPLICATION(application); - // Strip out the first argument as it is the binary name. - self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); - - g_autoptr(GError) error = nullptr; - if (!g_application_register(application, nullptr, &error)) { - g_warning("Failed to register: %s", error->message); - *exit_status = 1; - return TRUE; - } - - g_application_activate(application); - *exit_status = 0; - - return TRUE; -} - -// Implements GApplication::startup. -static void my_application_startup(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application startup. - - G_APPLICATION_CLASS(my_application_parent_class)->startup(application); -} - -// Implements GApplication::shutdown. -static void my_application_shutdown(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application shutdown. - - G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); -} - -// Implements GObject::dispose. -static void my_application_dispose(GObject* object) { - MyApplication* self = MY_APPLICATION(object); - g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); - G_OBJECT_CLASS(my_application_parent_class)->dispose(object); -} - -static void my_application_class_init(MyApplicationClass* klass) { - G_APPLICATION_CLASS(klass)->activate = my_application_activate; - G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; - G_APPLICATION_CLASS(klass)->startup = my_application_startup; - G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; - G_OBJECT_CLASS(klass)->dispose = my_application_dispose; -} - -static void my_application_init(MyApplication* self) {} - -MyApplication* my_application_new() { - // Set the program name to the application ID, which helps various systems - // like GTK and desktop environments map this running application to its - // corresponding .desktop file. This ensures better integration by allowing - // the application to be recognized beyond its binary name. - g_set_prgname(APPLICATION_ID); - - return MY_APPLICATION(g_object_new(my_application_get_type(), - "application-id", APPLICATION_ID, - "flags", G_APPLICATION_NON_UNIQUE, - nullptr)); -} diff --git a/brick_breaker/step_10/macos/Runner.xcodeproj/project.pbxproj b/brick_breaker/step_10/macos/Runner.xcodeproj/project.pbxproj index 636a28c53a..139f2ab564 100644 --- a/brick_breaker/step_10/macos/Runner.xcodeproj/project.pbxproj +++ b/brick_breaker/step_10/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ + 26DEE62C40082E048AB2DAC9 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F92CB96B5E92665177C18209 /* Pods_Runner.framework */; }; + 302724C6CB220CF55A24A7F6 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6405B62D2CA2577368E77111 /* Pods_RunnerTests.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 4EDE108470BB936D2121DAC2 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C352266AE7D36E6036C311DB /* Pods_Runner.framework */; }; - D1ADFA42F2A712AE0DDB3C4F /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F7DDA05F09C7BFFC6495BD57 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,9 +62,7 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 116A2D736E3DB4E136903D2C /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 16CD08E3FF9AD3D23AC8A89E /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 1771944E11EF7BBD50D4D2FD /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 114979CB87B99A65FC62EC11 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -81,13 +79,15 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 3C11113B321AB882C8752E03 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 35582EBA48CF0CAD302E6F20 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 44116D975D14ACE930B555BE /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 6405B62D2CA2577368E77111 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; + 81C82BB4E8EABFAC2304248A /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - C352266AE7D36E6036C311DB /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - C4186463924752EE4186F1BD /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - F0E4CC2439991D402B203A71 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - F7DDA05F09C7BFFC6495BD57 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + E93D02470CD1D3EA960793F9 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + F92CB96B5E92665177C18209 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + FF398A0A44AD651D2C2EF977 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - D1ADFA42F2A712AE0DDB3C4F /* Pods_RunnerTests.framework in Frameworks */, + 302724C6CB220CF55A24A7F6 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,13 +103,27 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 4EDE108470BB936D2121DAC2 /* Pods_Runner.framework in Frameworks */, + 26DEE62C40082E048AB2DAC9 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 1AD2B861098DC69EDF5A5504 /* Pods */ = { + isa = PBXGroup; + children = ( + 35582EBA48CF0CAD302E6F20 /* Pods-Runner.debug.xcconfig */, + 44116D975D14ACE930B555BE /* Pods-Runner.release.xcconfig */, + 114979CB87B99A65FC62EC11 /* Pods-Runner.profile.xcconfig */, + 81C82BB4E8EABFAC2304248A /* Pods-RunnerTests.debug.xcconfig */, + FF398A0A44AD651D2C2EF977 /* Pods-RunnerTests.release.xcconfig */, + E93D02470CD1D3EA960793F9 /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; 331C80D6294CF71000263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -137,7 +151,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - FE0B828880FE4FF908108270 /* Pods */, + 1AD2B861098DC69EDF5A5504 /* Pods */, ); sourceTree = ""; }; @@ -188,26 +202,12 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - C352266AE7D36E6036C311DB /* Pods_Runner.framework */, - F7DDA05F09C7BFFC6495BD57 /* Pods_RunnerTests.framework */, + F92CB96B5E92665177C18209 /* Pods_Runner.framework */, + 6405B62D2CA2577368E77111 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; }; - FE0B828880FE4FF908108270 /* Pods */ = { - isa = PBXGroup; - children = ( - 16CD08E3FF9AD3D23AC8A89E /* Pods-Runner.debug.xcconfig */, - C4186463924752EE4186F1BD /* Pods-Runner.release.xcconfig */, - 1771944E11EF7BBD50D4D2FD /* Pods-Runner.profile.xcconfig */, - 116A2D736E3DB4E136903D2C /* Pods-RunnerTests.debug.xcconfig */, - F0E4CC2439991D402B203A71 /* Pods-RunnerTests.release.xcconfig */, - 3C11113B321AB882C8752E03 /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 53D3984EB9BDCC15FE39632C /* [CP] Check Pods Manifest.lock */, + C4789C072FD8F107A45D1C43 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 8C9C6CB44270EC110E6DCD63 /* [CP] Check Pods Manifest.lock */, + 95500D3C1EE7FB7DACCE08DC /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 4BE7093447D6D7ADBFBF4C29 /* [CP] Embed Pods Frameworks */, + B311D48FC89BEDF4EB2DCDDE /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -361,46 +361,46 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 4BE7093447D6D7ADBFBF4C29 /* [CP] Embed Pods Frameworks */ = { + 95500D3C1EE7FB7DACCE08DC /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 53D3984EB9BDCC15FE39632C /* [CP] Check Pods Manifest.lock */ = { + B311D48FC89BEDF4EB2DCDDE /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - 8C9C6CB44270EC110E6DCD63 /* [CP] Check Pods Manifest.lock */ = { + C4789C072FD8F107A45D1C43 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -415,7 +415,7 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 116A2D736E3DB4E136903D2C /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 81C82BB4E8EABFAC2304248A /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = F0E4CC2439991D402B203A71 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = FF398A0A44AD651D2C2EF977 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 3C11113B321AB882C8752E03 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = E93D02470CD1D3EA960793F9 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/brick_breaker/step_10/web/index.html b/brick_breaker/step_10/web/index.html index da690bb6c1..0ffbea0397 100644 --- a/brick_breaker/step_10/web/index.html +++ b/brick_breaker/step_10/web/index.html @@ -21,7 +21,7 @@ - + From 8b215ca41acd52c45f958055e0680148dfb8ab7a Mon Sep 17 00:00:00 2001 From: Brett Morgan Date: Fri, 18 Oct 2024 10:44:00 +1100 Subject: [PATCH 020/108] Update `dart-patterns-and-records` for flutter beta --- .../step_03/android/gradle.properties | 2 +- .../step_03/linux/CMakeLists.txt | 23 +++- .../step_03/linux/{runner => }/main.cc | 0 .../linux}/my_application.cc | 6 - .../linux/{runner => }/my_application.h | 0 .../step_03/linux/runner/CMakeLists.txt | 26 ---- .../step_03/web/index.html | 2 +- .../step_04/android/gradle.properties | 2 +- .../step_04/linux/CMakeLists.txt | 23 +++- .../step_04/linux/{runner => }/main.cc | 0 .../linux}/my_application.cc | 6 - .../linux/{runner => }/my_application.h | 0 .../step_04/linux/runner/CMakeLists.txt | 26 ---- .../step_04/web/index.html | 2 +- .../step_05/android/gradle.properties | 2 +- .../step_05/linux/CMakeLists.txt | 23 +++- .../step_05/linux/{runner => }/main.cc | 0 .../linux}/my_application.cc | 6 - .../linux/{runner => }/my_application.h | 0 .../step_05/linux/runner/CMakeLists.txt | 26 ---- .../step_05/web/index.html | 2 +- .../step_06_a/android/gradle.properties | 2 +- .../step_06_a/linux/CMakeLists.txt | 23 +++- .../step_06_a/linux/{runner => }/main.cc | 0 .../linux}/my_application.cc | 6 - .../linux/{runner => }/my_application.h | 0 .../step_06_a/linux/runner/CMakeLists.txt | 26 ---- .../step_06_a/web/index.html | 2 +- .../step_06_b/android/gradle.properties | 2 +- .../step_06_b/linux/CMakeLists.txt | 23 +++- .../step_06_b/linux/{runner => }/main.cc | 0 .../step_06_b/linux/my_application.cc | 124 +++++++++++++++++ .../linux/{runner => }/my_application.h | 0 .../step_06_b/linux/runner/CMakeLists.txt | 26 ---- .../step_06_b/linux/runner/my_application.cc | 130 ------------------ .../step_06_b/web/index.html | 2 +- .../step_07_a/android/gradle.properties | 2 +- .../step_07_a/linux/CMakeLists.txt | 23 +++- .../step_07_a/linux/{runner => }/main.cc | 0 .../step_07_a/linux/my_application.cc | 124 +++++++++++++++++ .../linux/{runner => }/my_application.h | 0 .../step_07_a/linux/runner/CMakeLists.txt | 26 ---- .../step_07_a/linux/runner/my_application.cc | 130 ------------------ .../step_07_a/web/index.html | 2 +- .../step_07_b/android/gradle.properties | 2 +- .../step_07_b/linux/CMakeLists.txt | 23 +++- .../step_07_b/linux/{runner => }/main.cc | 0 .../step_07_b/linux/my_application.cc | 124 +++++++++++++++++ .../linux/{runner => }/my_application.h | 0 .../step_07_b/linux/runner/CMakeLists.txt | 26 ---- .../step_07_b/linux/runner/my_application.cc | 130 ------------------ .../step_07_b/web/index.html | 2 +- .../step_08/android/gradle.properties | 2 +- .../step_08/linux/CMakeLists.txt | 23 +++- .../step_08/linux/{runner => }/main.cc | 0 .../step_08/linux/my_application.cc | 124 +++++++++++++++++ .../linux/{runner => }/my_application.h | 0 .../step_08/linux/runner/CMakeLists.txt | 26 ---- .../step_08/linux/runner/my_application.cc | 130 ------------------ .../step_08/web/index.html | 2 +- .../step_09/android/gradle.properties | 2 +- .../step_09/linux/CMakeLists.txt | 23 +++- .../step_09/linux/{runner => }/main.cc | 0 .../step_09/linux/my_application.cc | 124 +++++++++++++++++ .../linux/{runner => }/my_application.h | 0 .../step_09/linux/runner/CMakeLists.txt | 26 ---- .../step_09/linux/runner/my_application.cc | 130 ------------------ .../step_09/web/index.html | 2 +- .../step_10/android/gradle.properties | 2 +- .../step_10/linux/CMakeLists.txt | 23 +++- .../step_10/linux/{runner => }/main.cc | 0 .../step_10/linux/my_application.cc | 124 +++++++++++++++++ .../linux/{runner => }/my_application.h | 0 .../step_10/linux/runner/CMakeLists.txt | 26 ---- .../step_10/linux/runner/my_application.cc | 130 ------------------ .../step_10/web/index.html | 2 +- .../step_11_a/android/gradle.properties | 2 +- .../step_11_a/linux/CMakeLists.txt | 23 +++- .../step_11_a/linux/{runner => }/main.cc | 0 .../step_11_a/linux/my_application.cc | 124 +++++++++++++++++ .../linux/{runner => }/my_application.h | 0 .../step_11_a/linux/runner/CMakeLists.txt | 26 ---- .../step_11_a/linux/runner/my_application.cc | 130 ------------------ .../step_11_a/web/index.html | 2 +- .../step_11_b/android/gradle.properties | 2 +- .../step_11_b/linux/CMakeLists.txt | 23 +++- .../step_11_b/linux/{runner => }/main.cc | 0 .../step_11_b/linux/my_application.cc | 124 +++++++++++++++++ .../linux/{runner => }/my_application.h | 0 .../step_11_b/linux/runner/CMakeLists.txt | 26 ---- .../step_11_b/linux/runner/my_application.cc | 130 ------------------ .../step_11_b/web/index.html | 2 +- .../step_12/android/gradle.properties | 2 +- .../step_12/linux/CMakeLists.txt | 23 +++- .../step_12/linux/{runner => }/main.cc | 0 .../step_12/linux/my_application.cc | 124 +++++++++++++++++ .../linux/{runner => }/my_application.h | 0 .../step_12/linux/runner/CMakeLists.txt | 26 ---- .../step_12/linux/runner/my_application.cc | 130 ------------------ .../step_12/web/index.html | 2 +- 100 files changed, 1402 insertions(+), 1597 deletions(-) rename dart-patterns-and-records/step_03/linux/{runner => }/main.cc (100%) rename dart-patterns-and-records/{step_05/linux/runner => step_03/linux}/my_application.cc (93%) rename dart-patterns-and-records/step_03/linux/{runner => }/my_application.h (100%) delete mode 100644 dart-patterns-and-records/step_03/linux/runner/CMakeLists.txt rename dart-patterns-and-records/step_04/linux/{runner => }/main.cc (100%) rename dart-patterns-and-records/{step_03/linux/runner => step_04/linux}/my_application.cc (93%) rename dart-patterns-and-records/step_04/linux/{runner => }/my_application.h (100%) delete mode 100644 dart-patterns-and-records/step_04/linux/runner/CMakeLists.txt rename dart-patterns-and-records/step_05/linux/{runner => }/main.cc (100%) rename dart-patterns-and-records/{step_06_a/linux/runner => step_05/linux}/my_application.cc (93%) rename dart-patterns-and-records/step_05/linux/{runner => }/my_application.h (100%) delete mode 100644 dart-patterns-and-records/step_05/linux/runner/CMakeLists.txt rename dart-patterns-and-records/step_06_a/linux/{runner => }/main.cc (100%) rename dart-patterns-and-records/{step_04/linux/runner => step_06_a/linux}/my_application.cc (93%) rename dart-patterns-and-records/step_06_a/linux/{runner => }/my_application.h (100%) delete mode 100644 dart-patterns-and-records/step_06_a/linux/runner/CMakeLists.txt rename dart-patterns-and-records/step_06_b/linux/{runner => }/main.cc (100%) create mode 100644 dart-patterns-and-records/step_06_b/linux/my_application.cc rename dart-patterns-and-records/step_06_b/linux/{runner => }/my_application.h (100%) delete mode 100644 dart-patterns-and-records/step_06_b/linux/runner/CMakeLists.txt delete mode 100644 dart-patterns-and-records/step_06_b/linux/runner/my_application.cc rename dart-patterns-and-records/step_07_a/linux/{runner => }/main.cc (100%) create mode 100644 dart-patterns-and-records/step_07_a/linux/my_application.cc rename dart-patterns-and-records/step_07_a/linux/{runner => }/my_application.h (100%) delete mode 100644 dart-patterns-and-records/step_07_a/linux/runner/CMakeLists.txt delete mode 100644 dart-patterns-and-records/step_07_a/linux/runner/my_application.cc rename dart-patterns-and-records/step_07_b/linux/{runner => }/main.cc (100%) create mode 100644 dart-patterns-and-records/step_07_b/linux/my_application.cc rename dart-patterns-and-records/step_07_b/linux/{runner => }/my_application.h (100%) delete mode 100644 dart-patterns-and-records/step_07_b/linux/runner/CMakeLists.txt delete mode 100644 dart-patterns-and-records/step_07_b/linux/runner/my_application.cc rename dart-patterns-and-records/step_08/linux/{runner => }/main.cc (100%) create mode 100644 dart-patterns-and-records/step_08/linux/my_application.cc rename dart-patterns-and-records/step_08/linux/{runner => }/my_application.h (100%) delete mode 100644 dart-patterns-and-records/step_08/linux/runner/CMakeLists.txt delete mode 100644 dart-patterns-and-records/step_08/linux/runner/my_application.cc rename dart-patterns-and-records/step_09/linux/{runner => }/main.cc (100%) create mode 100644 dart-patterns-and-records/step_09/linux/my_application.cc rename dart-patterns-and-records/step_09/linux/{runner => }/my_application.h (100%) delete mode 100644 dart-patterns-and-records/step_09/linux/runner/CMakeLists.txt delete mode 100644 dart-patterns-and-records/step_09/linux/runner/my_application.cc rename dart-patterns-and-records/step_10/linux/{runner => }/main.cc (100%) create mode 100644 dart-patterns-and-records/step_10/linux/my_application.cc rename dart-patterns-and-records/step_10/linux/{runner => }/my_application.h (100%) delete mode 100644 dart-patterns-and-records/step_10/linux/runner/CMakeLists.txt delete mode 100644 dart-patterns-and-records/step_10/linux/runner/my_application.cc rename dart-patterns-and-records/step_11_a/linux/{runner => }/main.cc (100%) create mode 100644 dart-patterns-and-records/step_11_a/linux/my_application.cc rename dart-patterns-and-records/step_11_a/linux/{runner => }/my_application.h (100%) delete mode 100644 dart-patterns-and-records/step_11_a/linux/runner/CMakeLists.txt delete mode 100644 dart-patterns-and-records/step_11_a/linux/runner/my_application.cc rename dart-patterns-and-records/step_11_b/linux/{runner => }/main.cc (100%) create mode 100644 dart-patterns-and-records/step_11_b/linux/my_application.cc rename dart-patterns-and-records/step_11_b/linux/{runner => }/my_application.h (100%) delete mode 100644 dart-patterns-and-records/step_11_b/linux/runner/CMakeLists.txt delete mode 100644 dart-patterns-and-records/step_11_b/linux/runner/my_application.cc rename dart-patterns-and-records/step_12/linux/{runner => }/main.cc (100%) create mode 100644 dart-patterns-and-records/step_12/linux/my_application.cc rename dart-patterns-and-records/step_12/linux/{runner => }/my_application.h (100%) delete mode 100644 dart-patterns-and-records/step_12/linux/runner/CMakeLists.txt delete mode 100644 dart-patterns-and-records/step_12/linux/runner/my_application.cc diff --git a/dart-patterns-and-records/step_03/android/gradle.properties b/dart-patterns-and-records/step_03/android/gradle.properties index f018a61817..2597170821 100644 --- a/dart-patterns-and-records/step_03/android/gradle.properties +++ b/dart-patterns-and-records/step_03/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/dart-patterns-and-records/step_03/linux/CMakeLists.txt b/dart-patterns-and-records/step_03/linux/CMakeLists.txt index 6f653779a7..dc88dd5e7d 100644 --- a/dart-patterns-and-records/step_03/linux/CMakeLists.txt +++ b/dart-patterns-and-records/step_03/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.13) +cmake_minimum_required(VERSION 3.10) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,8 +54,25 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -# Application build; see runner/CMakeLists.txt. -add_subdirectory("runner") +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Define the application target. To change its name, change BINARY_NAME above, +# not the value here, or `flutter run` will no longer work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/dart-patterns-and-records/step_03/linux/runner/main.cc b/dart-patterns-and-records/step_03/linux/main.cc similarity index 100% rename from dart-patterns-and-records/step_03/linux/runner/main.cc rename to dart-patterns-and-records/step_03/linux/main.cc diff --git a/dart-patterns-and-records/step_05/linux/runner/my_application.cc b/dart-patterns-and-records/step_03/linux/my_application.cc similarity index 93% rename from dart-patterns-and-records/step_05/linux/runner/my_application.cc rename to dart-patterns-and-records/step_03/linux/my_application.cc index 7065b83916..2e328e01f8 100644 --- a/dart-patterns-and-records/step_05/linux/runner/my_application.cc +++ b/dart-patterns-and-records/step_03/linux/my_application.cc @@ -117,12 +117,6 @@ static void my_application_class_init(MyApplicationClass* klass) { static void my_application_init(MyApplication* self) {} MyApplication* my_application_new() { - // Set the program name to the application ID, which helps various systems - // like GTK and desktop environments map this running application to its - // corresponding .desktop file. This ensures better integration by allowing - // the application to be recognized beyond its binary name. - g_set_prgname(APPLICATION_ID); - return MY_APPLICATION(g_object_new(my_application_get_type(), "application-id", APPLICATION_ID, "flags", G_APPLICATION_NON_UNIQUE, diff --git a/dart-patterns-and-records/step_03/linux/runner/my_application.h b/dart-patterns-and-records/step_03/linux/my_application.h similarity index 100% rename from dart-patterns-and-records/step_03/linux/runner/my_application.h rename to dart-patterns-and-records/step_03/linux/my_application.h diff --git a/dart-patterns-and-records/step_03/linux/runner/CMakeLists.txt b/dart-patterns-and-records/step_03/linux/runner/CMakeLists.txt deleted file mode 100644 index e97dabc702..0000000000 --- a/dart-patterns-and-records/step_03/linux/runner/CMakeLists.txt +++ /dev/null @@ -1,26 +0,0 @@ -cmake_minimum_required(VERSION 3.13) -project(runner LANGUAGES CXX) - -# Define the application target. To change its name, change BINARY_NAME in the -# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer -# work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add preprocessor definitions for the application ID. -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) - -target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/dart-patterns-and-records/step_03/web/index.html b/dart-patterns-and-records/step_03/web/index.html index adcc31bddb..e14846e8ce 100644 --- a/dart-patterns-and-records/step_03/web/index.html +++ b/dart-patterns-and-records/step_03/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/dart-patterns-and-records/step_04/android/gradle.properties b/dart-patterns-and-records/step_04/android/gradle.properties index f018a61817..2597170821 100644 --- a/dart-patterns-and-records/step_04/android/gradle.properties +++ b/dart-patterns-and-records/step_04/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/dart-patterns-and-records/step_04/linux/CMakeLists.txt b/dart-patterns-and-records/step_04/linux/CMakeLists.txt index 6f653779a7..dc88dd5e7d 100644 --- a/dart-patterns-and-records/step_04/linux/CMakeLists.txt +++ b/dart-patterns-and-records/step_04/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.13) +cmake_minimum_required(VERSION 3.10) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,8 +54,25 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -# Application build; see runner/CMakeLists.txt. -add_subdirectory("runner") +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Define the application target. To change its name, change BINARY_NAME above, +# not the value here, or `flutter run` will no longer work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/dart-patterns-and-records/step_04/linux/runner/main.cc b/dart-patterns-and-records/step_04/linux/main.cc similarity index 100% rename from dart-patterns-and-records/step_04/linux/runner/main.cc rename to dart-patterns-and-records/step_04/linux/main.cc diff --git a/dart-patterns-and-records/step_03/linux/runner/my_application.cc b/dart-patterns-and-records/step_04/linux/my_application.cc similarity index 93% rename from dart-patterns-and-records/step_03/linux/runner/my_application.cc rename to dart-patterns-and-records/step_04/linux/my_application.cc index 7065b83916..2e328e01f8 100644 --- a/dart-patterns-and-records/step_03/linux/runner/my_application.cc +++ b/dart-patterns-and-records/step_04/linux/my_application.cc @@ -117,12 +117,6 @@ static void my_application_class_init(MyApplicationClass* klass) { static void my_application_init(MyApplication* self) {} MyApplication* my_application_new() { - // Set the program name to the application ID, which helps various systems - // like GTK and desktop environments map this running application to its - // corresponding .desktop file. This ensures better integration by allowing - // the application to be recognized beyond its binary name. - g_set_prgname(APPLICATION_ID); - return MY_APPLICATION(g_object_new(my_application_get_type(), "application-id", APPLICATION_ID, "flags", G_APPLICATION_NON_UNIQUE, diff --git a/dart-patterns-and-records/step_04/linux/runner/my_application.h b/dart-patterns-and-records/step_04/linux/my_application.h similarity index 100% rename from dart-patterns-and-records/step_04/linux/runner/my_application.h rename to dart-patterns-and-records/step_04/linux/my_application.h diff --git a/dart-patterns-and-records/step_04/linux/runner/CMakeLists.txt b/dart-patterns-and-records/step_04/linux/runner/CMakeLists.txt deleted file mode 100644 index e97dabc702..0000000000 --- a/dart-patterns-and-records/step_04/linux/runner/CMakeLists.txt +++ /dev/null @@ -1,26 +0,0 @@ -cmake_minimum_required(VERSION 3.13) -project(runner LANGUAGES CXX) - -# Define the application target. To change its name, change BINARY_NAME in the -# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer -# work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add preprocessor definitions for the application ID. -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) - -target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/dart-patterns-and-records/step_04/web/index.html b/dart-patterns-and-records/step_04/web/index.html index adcc31bddb..e14846e8ce 100644 --- a/dart-patterns-and-records/step_04/web/index.html +++ b/dart-patterns-and-records/step_04/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/dart-patterns-and-records/step_05/android/gradle.properties b/dart-patterns-and-records/step_05/android/gradle.properties index f018a61817..2597170821 100644 --- a/dart-patterns-and-records/step_05/android/gradle.properties +++ b/dart-patterns-and-records/step_05/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/dart-patterns-and-records/step_05/linux/CMakeLists.txt b/dart-patterns-and-records/step_05/linux/CMakeLists.txt index 6f653779a7..dc88dd5e7d 100644 --- a/dart-patterns-and-records/step_05/linux/CMakeLists.txt +++ b/dart-patterns-and-records/step_05/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.13) +cmake_minimum_required(VERSION 3.10) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,8 +54,25 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -# Application build; see runner/CMakeLists.txt. -add_subdirectory("runner") +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Define the application target. To change its name, change BINARY_NAME above, +# not the value here, or `flutter run` will no longer work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/dart-patterns-and-records/step_05/linux/runner/main.cc b/dart-patterns-and-records/step_05/linux/main.cc similarity index 100% rename from dart-patterns-and-records/step_05/linux/runner/main.cc rename to dart-patterns-and-records/step_05/linux/main.cc diff --git a/dart-patterns-and-records/step_06_a/linux/runner/my_application.cc b/dart-patterns-and-records/step_05/linux/my_application.cc similarity index 93% rename from dart-patterns-and-records/step_06_a/linux/runner/my_application.cc rename to dart-patterns-and-records/step_05/linux/my_application.cc index 7065b83916..2e328e01f8 100644 --- a/dart-patterns-and-records/step_06_a/linux/runner/my_application.cc +++ b/dart-patterns-and-records/step_05/linux/my_application.cc @@ -117,12 +117,6 @@ static void my_application_class_init(MyApplicationClass* klass) { static void my_application_init(MyApplication* self) {} MyApplication* my_application_new() { - // Set the program name to the application ID, which helps various systems - // like GTK and desktop environments map this running application to its - // corresponding .desktop file. This ensures better integration by allowing - // the application to be recognized beyond its binary name. - g_set_prgname(APPLICATION_ID); - return MY_APPLICATION(g_object_new(my_application_get_type(), "application-id", APPLICATION_ID, "flags", G_APPLICATION_NON_UNIQUE, diff --git a/dart-patterns-and-records/step_05/linux/runner/my_application.h b/dart-patterns-and-records/step_05/linux/my_application.h similarity index 100% rename from dart-patterns-and-records/step_05/linux/runner/my_application.h rename to dart-patterns-and-records/step_05/linux/my_application.h diff --git a/dart-patterns-and-records/step_05/linux/runner/CMakeLists.txt b/dart-patterns-and-records/step_05/linux/runner/CMakeLists.txt deleted file mode 100644 index e97dabc702..0000000000 --- a/dart-patterns-and-records/step_05/linux/runner/CMakeLists.txt +++ /dev/null @@ -1,26 +0,0 @@ -cmake_minimum_required(VERSION 3.13) -project(runner LANGUAGES CXX) - -# Define the application target. To change its name, change BINARY_NAME in the -# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer -# work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add preprocessor definitions for the application ID. -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) - -target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/dart-patterns-and-records/step_05/web/index.html b/dart-patterns-and-records/step_05/web/index.html index adcc31bddb..e14846e8ce 100644 --- a/dart-patterns-and-records/step_05/web/index.html +++ b/dart-patterns-and-records/step_05/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/dart-patterns-and-records/step_06_a/android/gradle.properties b/dart-patterns-and-records/step_06_a/android/gradle.properties index f018a61817..2597170821 100644 --- a/dart-patterns-and-records/step_06_a/android/gradle.properties +++ b/dart-patterns-and-records/step_06_a/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/dart-patterns-and-records/step_06_a/linux/CMakeLists.txt b/dart-patterns-and-records/step_06_a/linux/CMakeLists.txt index 6f653779a7..dc88dd5e7d 100644 --- a/dart-patterns-and-records/step_06_a/linux/CMakeLists.txt +++ b/dart-patterns-and-records/step_06_a/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.13) +cmake_minimum_required(VERSION 3.10) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,8 +54,25 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -# Application build; see runner/CMakeLists.txt. -add_subdirectory("runner") +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Define the application target. To change its name, change BINARY_NAME above, +# not the value here, or `flutter run` will no longer work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/dart-patterns-and-records/step_06_a/linux/runner/main.cc b/dart-patterns-and-records/step_06_a/linux/main.cc similarity index 100% rename from dart-patterns-and-records/step_06_a/linux/runner/main.cc rename to dart-patterns-and-records/step_06_a/linux/main.cc diff --git a/dart-patterns-and-records/step_04/linux/runner/my_application.cc b/dart-patterns-and-records/step_06_a/linux/my_application.cc similarity index 93% rename from dart-patterns-and-records/step_04/linux/runner/my_application.cc rename to dart-patterns-and-records/step_06_a/linux/my_application.cc index 7065b83916..2e328e01f8 100644 --- a/dart-patterns-and-records/step_04/linux/runner/my_application.cc +++ b/dart-patterns-and-records/step_06_a/linux/my_application.cc @@ -117,12 +117,6 @@ static void my_application_class_init(MyApplicationClass* klass) { static void my_application_init(MyApplication* self) {} MyApplication* my_application_new() { - // Set the program name to the application ID, which helps various systems - // like GTK and desktop environments map this running application to its - // corresponding .desktop file. This ensures better integration by allowing - // the application to be recognized beyond its binary name. - g_set_prgname(APPLICATION_ID); - return MY_APPLICATION(g_object_new(my_application_get_type(), "application-id", APPLICATION_ID, "flags", G_APPLICATION_NON_UNIQUE, diff --git a/dart-patterns-and-records/step_06_a/linux/runner/my_application.h b/dart-patterns-and-records/step_06_a/linux/my_application.h similarity index 100% rename from dart-patterns-and-records/step_06_a/linux/runner/my_application.h rename to dart-patterns-and-records/step_06_a/linux/my_application.h diff --git a/dart-patterns-and-records/step_06_a/linux/runner/CMakeLists.txt b/dart-patterns-and-records/step_06_a/linux/runner/CMakeLists.txt deleted file mode 100644 index e97dabc702..0000000000 --- a/dart-patterns-and-records/step_06_a/linux/runner/CMakeLists.txt +++ /dev/null @@ -1,26 +0,0 @@ -cmake_minimum_required(VERSION 3.13) -project(runner LANGUAGES CXX) - -# Define the application target. To change its name, change BINARY_NAME in the -# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer -# work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add preprocessor definitions for the application ID. -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) - -target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/dart-patterns-and-records/step_06_a/web/index.html b/dart-patterns-and-records/step_06_a/web/index.html index adcc31bddb..e14846e8ce 100644 --- a/dart-patterns-and-records/step_06_a/web/index.html +++ b/dart-patterns-and-records/step_06_a/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/dart-patterns-and-records/step_06_b/android/gradle.properties b/dart-patterns-and-records/step_06_b/android/gradle.properties index f018a61817..2597170821 100644 --- a/dart-patterns-and-records/step_06_b/android/gradle.properties +++ b/dart-patterns-and-records/step_06_b/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/dart-patterns-and-records/step_06_b/linux/CMakeLists.txt b/dart-patterns-and-records/step_06_b/linux/CMakeLists.txt index 6f653779a7..dc88dd5e7d 100644 --- a/dart-patterns-and-records/step_06_b/linux/CMakeLists.txt +++ b/dart-patterns-and-records/step_06_b/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.13) +cmake_minimum_required(VERSION 3.10) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,8 +54,25 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -# Application build; see runner/CMakeLists.txt. -add_subdirectory("runner") +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Define the application target. To change its name, change BINARY_NAME above, +# not the value here, or `flutter run` will no longer work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/dart-patterns-and-records/step_06_b/linux/runner/main.cc b/dart-patterns-and-records/step_06_b/linux/main.cc similarity index 100% rename from dart-patterns-and-records/step_06_b/linux/runner/main.cc rename to dart-patterns-and-records/step_06_b/linux/main.cc diff --git a/dart-patterns-and-records/step_06_b/linux/my_application.cc b/dart-patterns-and-records/step_06_b/linux/my_application.cc new file mode 100644 index 0000000000..2e328e01f8 --- /dev/null +++ b/dart-patterns-and-records/step_06_b/linux/my_application.cc @@ -0,0 +1,124 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "patterns_codelab"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "patterns_codelab"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/dart-patterns-and-records/step_06_b/linux/runner/my_application.h b/dart-patterns-and-records/step_06_b/linux/my_application.h similarity index 100% rename from dart-patterns-and-records/step_06_b/linux/runner/my_application.h rename to dart-patterns-and-records/step_06_b/linux/my_application.h diff --git a/dart-patterns-and-records/step_06_b/linux/runner/CMakeLists.txt b/dart-patterns-and-records/step_06_b/linux/runner/CMakeLists.txt deleted file mode 100644 index e97dabc702..0000000000 --- a/dart-patterns-and-records/step_06_b/linux/runner/CMakeLists.txt +++ /dev/null @@ -1,26 +0,0 @@ -cmake_minimum_required(VERSION 3.13) -project(runner LANGUAGES CXX) - -# Define the application target. To change its name, change BINARY_NAME in the -# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer -# work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add preprocessor definitions for the application ID. -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) - -target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/dart-patterns-and-records/step_06_b/linux/runner/my_application.cc b/dart-patterns-and-records/step_06_b/linux/runner/my_application.cc deleted file mode 100644 index 7065b83916..0000000000 --- a/dart-patterns-and-records/step_06_b/linux/runner/my_application.cc +++ /dev/null @@ -1,130 +0,0 @@ -#include "my_application.h" - -#include -#ifdef GDK_WINDOWING_X11 -#include -#endif - -#include "flutter/generated_plugin_registrant.h" - -struct _MyApplication { - GtkApplication parent_instance; - char** dart_entrypoint_arguments; -}; - -G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) - -// Implements GApplication::activate. -static void my_application_activate(GApplication* application) { - MyApplication* self = MY_APPLICATION(application); - GtkWindow* window = - GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); - - // Use a header bar when running in GNOME as this is the common style used - // by applications and is the setup most users will be using (e.g. Ubuntu - // desktop). - // If running on X and not using GNOME then just use a traditional title bar - // in case the window manager does more exotic layout, e.g. tiling. - // If running on Wayland assume the header bar will work (may need changing - // if future cases occur). - gboolean use_header_bar = TRUE; -#ifdef GDK_WINDOWING_X11 - GdkScreen* screen = gtk_window_get_screen(window); - if (GDK_IS_X11_SCREEN(screen)) { - const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); - if (g_strcmp0(wm_name, "GNOME Shell") != 0) { - use_header_bar = FALSE; - } - } -#endif - if (use_header_bar) { - GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); - gtk_widget_show(GTK_WIDGET(header_bar)); - gtk_header_bar_set_title(header_bar, "patterns_codelab"); - gtk_header_bar_set_show_close_button(header_bar, TRUE); - gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); - } else { - gtk_window_set_title(window, "patterns_codelab"); - } - - gtk_window_set_default_size(window, 1280, 720); - gtk_widget_show(GTK_WIDGET(window)); - - g_autoptr(FlDartProject) project = fl_dart_project_new(); - fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); - - FlView* view = fl_view_new(project); - gtk_widget_show(GTK_WIDGET(view)); - gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); - - fl_register_plugins(FL_PLUGIN_REGISTRY(view)); - - gtk_widget_grab_focus(GTK_WIDGET(view)); -} - -// Implements GApplication::local_command_line. -static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { - MyApplication* self = MY_APPLICATION(application); - // Strip out the first argument as it is the binary name. - self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); - - g_autoptr(GError) error = nullptr; - if (!g_application_register(application, nullptr, &error)) { - g_warning("Failed to register: %s", error->message); - *exit_status = 1; - return TRUE; - } - - g_application_activate(application); - *exit_status = 0; - - return TRUE; -} - -// Implements GApplication::startup. -static void my_application_startup(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application startup. - - G_APPLICATION_CLASS(my_application_parent_class)->startup(application); -} - -// Implements GApplication::shutdown. -static void my_application_shutdown(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application shutdown. - - G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); -} - -// Implements GObject::dispose. -static void my_application_dispose(GObject* object) { - MyApplication* self = MY_APPLICATION(object); - g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); - G_OBJECT_CLASS(my_application_parent_class)->dispose(object); -} - -static void my_application_class_init(MyApplicationClass* klass) { - G_APPLICATION_CLASS(klass)->activate = my_application_activate; - G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; - G_APPLICATION_CLASS(klass)->startup = my_application_startup; - G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; - G_OBJECT_CLASS(klass)->dispose = my_application_dispose; -} - -static void my_application_init(MyApplication* self) {} - -MyApplication* my_application_new() { - // Set the program name to the application ID, which helps various systems - // like GTK and desktop environments map this running application to its - // corresponding .desktop file. This ensures better integration by allowing - // the application to be recognized beyond its binary name. - g_set_prgname(APPLICATION_ID); - - return MY_APPLICATION(g_object_new(my_application_get_type(), - "application-id", APPLICATION_ID, - "flags", G_APPLICATION_NON_UNIQUE, - nullptr)); -} diff --git a/dart-patterns-and-records/step_06_b/web/index.html b/dart-patterns-and-records/step_06_b/web/index.html index adcc31bddb..e14846e8ce 100644 --- a/dart-patterns-and-records/step_06_b/web/index.html +++ b/dart-patterns-and-records/step_06_b/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/dart-patterns-and-records/step_07_a/android/gradle.properties b/dart-patterns-and-records/step_07_a/android/gradle.properties index f018a61817..2597170821 100644 --- a/dart-patterns-and-records/step_07_a/android/gradle.properties +++ b/dart-patterns-and-records/step_07_a/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/dart-patterns-and-records/step_07_a/linux/CMakeLists.txt b/dart-patterns-and-records/step_07_a/linux/CMakeLists.txt index 6f653779a7..dc88dd5e7d 100644 --- a/dart-patterns-and-records/step_07_a/linux/CMakeLists.txt +++ b/dart-patterns-and-records/step_07_a/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.13) +cmake_minimum_required(VERSION 3.10) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,8 +54,25 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -# Application build; see runner/CMakeLists.txt. -add_subdirectory("runner") +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Define the application target. To change its name, change BINARY_NAME above, +# not the value here, or `flutter run` will no longer work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/dart-patterns-and-records/step_07_a/linux/runner/main.cc b/dart-patterns-and-records/step_07_a/linux/main.cc similarity index 100% rename from dart-patterns-and-records/step_07_a/linux/runner/main.cc rename to dart-patterns-and-records/step_07_a/linux/main.cc diff --git a/dart-patterns-and-records/step_07_a/linux/my_application.cc b/dart-patterns-and-records/step_07_a/linux/my_application.cc new file mode 100644 index 0000000000..2e328e01f8 --- /dev/null +++ b/dart-patterns-and-records/step_07_a/linux/my_application.cc @@ -0,0 +1,124 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "patterns_codelab"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "patterns_codelab"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/dart-patterns-and-records/step_07_a/linux/runner/my_application.h b/dart-patterns-and-records/step_07_a/linux/my_application.h similarity index 100% rename from dart-patterns-and-records/step_07_a/linux/runner/my_application.h rename to dart-patterns-and-records/step_07_a/linux/my_application.h diff --git a/dart-patterns-and-records/step_07_a/linux/runner/CMakeLists.txt b/dart-patterns-and-records/step_07_a/linux/runner/CMakeLists.txt deleted file mode 100644 index e97dabc702..0000000000 --- a/dart-patterns-and-records/step_07_a/linux/runner/CMakeLists.txt +++ /dev/null @@ -1,26 +0,0 @@ -cmake_minimum_required(VERSION 3.13) -project(runner LANGUAGES CXX) - -# Define the application target. To change its name, change BINARY_NAME in the -# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer -# work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add preprocessor definitions for the application ID. -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) - -target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/dart-patterns-and-records/step_07_a/linux/runner/my_application.cc b/dart-patterns-and-records/step_07_a/linux/runner/my_application.cc deleted file mode 100644 index 7065b83916..0000000000 --- a/dart-patterns-and-records/step_07_a/linux/runner/my_application.cc +++ /dev/null @@ -1,130 +0,0 @@ -#include "my_application.h" - -#include -#ifdef GDK_WINDOWING_X11 -#include -#endif - -#include "flutter/generated_plugin_registrant.h" - -struct _MyApplication { - GtkApplication parent_instance; - char** dart_entrypoint_arguments; -}; - -G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) - -// Implements GApplication::activate. -static void my_application_activate(GApplication* application) { - MyApplication* self = MY_APPLICATION(application); - GtkWindow* window = - GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); - - // Use a header bar when running in GNOME as this is the common style used - // by applications and is the setup most users will be using (e.g. Ubuntu - // desktop). - // If running on X and not using GNOME then just use a traditional title bar - // in case the window manager does more exotic layout, e.g. tiling. - // If running on Wayland assume the header bar will work (may need changing - // if future cases occur). - gboolean use_header_bar = TRUE; -#ifdef GDK_WINDOWING_X11 - GdkScreen* screen = gtk_window_get_screen(window); - if (GDK_IS_X11_SCREEN(screen)) { - const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); - if (g_strcmp0(wm_name, "GNOME Shell") != 0) { - use_header_bar = FALSE; - } - } -#endif - if (use_header_bar) { - GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); - gtk_widget_show(GTK_WIDGET(header_bar)); - gtk_header_bar_set_title(header_bar, "patterns_codelab"); - gtk_header_bar_set_show_close_button(header_bar, TRUE); - gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); - } else { - gtk_window_set_title(window, "patterns_codelab"); - } - - gtk_window_set_default_size(window, 1280, 720); - gtk_widget_show(GTK_WIDGET(window)); - - g_autoptr(FlDartProject) project = fl_dart_project_new(); - fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); - - FlView* view = fl_view_new(project); - gtk_widget_show(GTK_WIDGET(view)); - gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); - - fl_register_plugins(FL_PLUGIN_REGISTRY(view)); - - gtk_widget_grab_focus(GTK_WIDGET(view)); -} - -// Implements GApplication::local_command_line. -static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { - MyApplication* self = MY_APPLICATION(application); - // Strip out the first argument as it is the binary name. - self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); - - g_autoptr(GError) error = nullptr; - if (!g_application_register(application, nullptr, &error)) { - g_warning("Failed to register: %s", error->message); - *exit_status = 1; - return TRUE; - } - - g_application_activate(application); - *exit_status = 0; - - return TRUE; -} - -// Implements GApplication::startup. -static void my_application_startup(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application startup. - - G_APPLICATION_CLASS(my_application_parent_class)->startup(application); -} - -// Implements GApplication::shutdown. -static void my_application_shutdown(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application shutdown. - - G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); -} - -// Implements GObject::dispose. -static void my_application_dispose(GObject* object) { - MyApplication* self = MY_APPLICATION(object); - g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); - G_OBJECT_CLASS(my_application_parent_class)->dispose(object); -} - -static void my_application_class_init(MyApplicationClass* klass) { - G_APPLICATION_CLASS(klass)->activate = my_application_activate; - G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; - G_APPLICATION_CLASS(klass)->startup = my_application_startup; - G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; - G_OBJECT_CLASS(klass)->dispose = my_application_dispose; -} - -static void my_application_init(MyApplication* self) {} - -MyApplication* my_application_new() { - // Set the program name to the application ID, which helps various systems - // like GTK and desktop environments map this running application to its - // corresponding .desktop file. This ensures better integration by allowing - // the application to be recognized beyond its binary name. - g_set_prgname(APPLICATION_ID); - - return MY_APPLICATION(g_object_new(my_application_get_type(), - "application-id", APPLICATION_ID, - "flags", G_APPLICATION_NON_UNIQUE, - nullptr)); -} diff --git a/dart-patterns-and-records/step_07_a/web/index.html b/dart-patterns-and-records/step_07_a/web/index.html index adcc31bddb..e14846e8ce 100644 --- a/dart-patterns-and-records/step_07_a/web/index.html +++ b/dart-patterns-and-records/step_07_a/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/dart-patterns-and-records/step_07_b/android/gradle.properties b/dart-patterns-and-records/step_07_b/android/gradle.properties index f018a61817..2597170821 100644 --- a/dart-patterns-and-records/step_07_b/android/gradle.properties +++ b/dart-patterns-and-records/step_07_b/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/dart-patterns-and-records/step_07_b/linux/CMakeLists.txt b/dart-patterns-and-records/step_07_b/linux/CMakeLists.txt index 6f653779a7..dc88dd5e7d 100644 --- a/dart-patterns-and-records/step_07_b/linux/CMakeLists.txt +++ b/dart-patterns-and-records/step_07_b/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.13) +cmake_minimum_required(VERSION 3.10) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,8 +54,25 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -# Application build; see runner/CMakeLists.txt. -add_subdirectory("runner") +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Define the application target. To change its name, change BINARY_NAME above, +# not the value here, or `flutter run` will no longer work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/dart-patterns-and-records/step_07_b/linux/runner/main.cc b/dart-patterns-and-records/step_07_b/linux/main.cc similarity index 100% rename from dart-patterns-and-records/step_07_b/linux/runner/main.cc rename to dart-patterns-and-records/step_07_b/linux/main.cc diff --git a/dart-patterns-and-records/step_07_b/linux/my_application.cc b/dart-patterns-and-records/step_07_b/linux/my_application.cc new file mode 100644 index 0000000000..2e328e01f8 --- /dev/null +++ b/dart-patterns-and-records/step_07_b/linux/my_application.cc @@ -0,0 +1,124 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "patterns_codelab"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "patterns_codelab"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/dart-patterns-and-records/step_07_b/linux/runner/my_application.h b/dart-patterns-and-records/step_07_b/linux/my_application.h similarity index 100% rename from dart-patterns-and-records/step_07_b/linux/runner/my_application.h rename to dart-patterns-and-records/step_07_b/linux/my_application.h diff --git a/dart-patterns-and-records/step_07_b/linux/runner/CMakeLists.txt b/dart-patterns-and-records/step_07_b/linux/runner/CMakeLists.txt deleted file mode 100644 index e97dabc702..0000000000 --- a/dart-patterns-and-records/step_07_b/linux/runner/CMakeLists.txt +++ /dev/null @@ -1,26 +0,0 @@ -cmake_minimum_required(VERSION 3.13) -project(runner LANGUAGES CXX) - -# Define the application target. To change its name, change BINARY_NAME in the -# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer -# work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add preprocessor definitions for the application ID. -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) - -target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/dart-patterns-and-records/step_07_b/linux/runner/my_application.cc b/dart-patterns-and-records/step_07_b/linux/runner/my_application.cc deleted file mode 100644 index 7065b83916..0000000000 --- a/dart-patterns-and-records/step_07_b/linux/runner/my_application.cc +++ /dev/null @@ -1,130 +0,0 @@ -#include "my_application.h" - -#include -#ifdef GDK_WINDOWING_X11 -#include -#endif - -#include "flutter/generated_plugin_registrant.h" - -struct _MyApplication { - GtkApplication parent_instance; - char** dart_entrypoint_arguments; -}; - -G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) - -// Implements GApplication::activate. -static void my_application_activate(GApplication* application) { - MyApplication* self = MY_APPLICATION(application); - GtkWindow* window = - GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); - - // Use a header bar when running in GNOME as this is the common style used - // by applications and is the setup most users will be using (e.g. Ubuntu - // desktop). - // If running on X and not using GNOME then just use a traditional title bar - // in case the window manager does more exotic layout, e.g. tiling. - // If running on Wayland assume the header bar will work (may need changing - // if future cases occur). - gboolean use_header_bar = TRUE; -#ifdef GDK_WINDOWING_X11 - GdkScreen* screen = gtk_window_get_screen(window); - if (GDK_IS_X11_SCREEN(screen)) { - const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); - if (g_strcmp0(wm_name, "GNOME Shell") != 0) { - use_header_bar = FALSE; - } - } -#endif - if (use_header_bar) { - GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); - gtk_widget_show(GTK_WIDGET(header_bar)); - gtk_header_bar_set_title(header_bar, "patterns_codelab"); - gtk_header_bar_set_show_close_button(header_bar, TRUE); - gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); - } else { - gtk_window_set_title(window, "patterns_codelab"); - } - - gtk_window_set_default_size(window, 1280, 720); - gtk_widget_show(GTK_WIDGET(window)); - - g_autoptr(FlDartProject) project = fl_dart_project_new(); - fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); - - FlView* view = fl_view_new(project); - gtk_widget_show(GTK_WIDGET(view)); - gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); - - fl_register_plugins(FL_PLUGIN_REGISTRY(view)); - - gtk_widget_grab_focus(GTK_WIDGET(view)); -} - -// Implements GApplication::local_command_line. -static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { - MyApplication* self = MY_APPLICATION(application); - // Strip out the first argument as it is the binary name. - self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); - - g_autoptr(GError) error = nullptr; - if (!g_application_register(application, nullptr, &error)) { - g_warning("Failed to register: %s", error->message); - *exit_status = 1; - return TRUE; - } - - g_application_activate(application); - *exit_status = 0; - - return TRUE; -} - -// Implements GApplication::startup. -static void my_application_startup(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application startup. - - G_APPLICATION_CLASS(my_application_parent_class)->startup(application); -} - -// Implements GApplication::shutdown. -static void my_application_shutdown(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application shutdown. - - G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); -} - -// Implements GObject::dispose. -static void my_application_dispose(GObject* object) { - MyApplication* self = MY_APPLICATION(object); - g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); - G_OBJECT_CLASS(my_application_parent_class)->dispose(object); -} - -static void my_application_class_init(MyApplicationClass* klass) { - G_APPLICATION_CLASS(klass)->activate = my_application_activate; - G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; - G_APPLICATION_CLASS(klass)->startup = my_application_startup; - G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; - G_OBJECT_CLASS(klass)->dispose = my_application_dispose; -} - -static void my_application_init(MyApplication* self) {} - -MyApplication* my_application_new() { - // Set the program name to the application ID, which helps various systems - // like GTK and desktop environments map this running application to its - // corresponding .desktop file. This ensures better integration by allowing - // the application to be recognized beyond its binary name. - g_set_prgname(APPLICATION_ID); - - return MY_APPLICATION(g_object_new(my_application_get_type(), - "application-id", APPLICATION_ID, - "flags", G_APPLICATION_NON_UNIQUE, - nullptr)); -} diff --git a/dart-patterns-and-records/step_07_b/web/index.html b/dart-patterns-and-records/step_07_b/web/index.html index adcc31bddb..e14846e8ce 100644 --- a/dart-patterns-and-records/step_07_b/web/index.html +++ b/dart-patterns-and-records/step_07_b/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/dart-patterns-and-records/step_08/android/gradle.properties b/dart-patterns-and-records/step_08/android/gradle.properties index f018a61817..2597170821 100644 --- a/dart-patterns-and-records/step_08/android/gradle.properties +++ b/dart-patterns-and-records/step_08/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/dart-patterns-and-records/step_08/linux/CMakeLists.txt b/dart-patterns-and-records/step_08/linux/CMakeLists.txt index 6f653779a7..dc88dd5e7d 100644 --- a/dart-patterns-and-records/step_08/linux/CMakeLists.txt +++ b/dart-patterns-and-records/step_08/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.13) +cmake_minimum_required(VERSION 3.10) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,8 +54,25 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -# Application build; see runner/CMakeLists.txt. -add_subdirectory("runner") +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Define the application target. To change its name, change BINARY_NAME above, +# not the value here, or `flutter run` will no longer work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/dart-patterns-and-records/step_08/linux/runner/main.cc b/dart-patterns-and-records/step_08/linux/main.cc similarity index 100% rename from dart-patterns-and-records/step_08/linux/runner/main.cc rename to dart-patterns-and-records/step_08/linux/main.cc diff --git a/dart-patterns-and-records/step_08/linux/my_application.cc b/dart-patterns-and-records/step_08/linux/my_application.cc new file mode 100644 index 0000000000..2e328e01f8 --- /dev/null +++ b/dart-patterns-and-records/step_08/linux/my_application.cc @@ -0,0 +1,124 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "patterns_codelab"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "patterns_codelab"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/dart-patterns-and-records/step_08/linux/runner/my_application.h b/dart-patterns-and-records/step_08/linux/my_application.h similarity index 100% rename from dart-patterns-and-records/step_08/linux/runner/my_application.h rename to dart-patterns-and-records/step_08/linux/my_application.h diff --git a/dart-patterns-and-records/step_08/linux/runner/CMakeLists.txt b/dart-patterns-and-records/step_08/linux/runner/CMakeLists.txt deleted file mode 100644 index e97dabc702..0000000000 --- a/dart-patterns-and-records/step_08/linux/runner/CMakeLists.txt +++ /dev/null @@ -1,26 +0,0 @@ -cmake_minimum_required(VERSION 3.13) -project(runner LANGUAGES CXX) - -# Define the application target. To change its name, change BINARY_NAME in the -# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer -# work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add preprocessor definitions for the application ID. -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) - -target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/dart-patterns-and-records/step_08/linux/runner/my_application.cc b/dart-patterns-and-records/step_08/linux/runner/my_application.cc deleted file mode 100644 index 7065b83916..0000000000 --- a/dart-patterns-and-records/step_08/linux/runner/my_application.cc +++ /dev/null @@ -1,130 +0,0 @@ -#include "my_application.h" - -#include -#ifdef GDK_WINDOWING_X11 -#include -#endif - -#include "flutter/generated_plugin_registrant.h" - -struct _MyApplication { - GtkApplication parent_instance; - char** dart_entrypoint_arguments; -}; - -G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) - -// Implements GApplication::activate. -static void my_application_activate(GApplication* application) { - MyApplication* self = MY_APPLICATION(application); - GtkWindow* window = - GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); - - // Use a header bar when running in GNOME as this is the common style used - // by applications and is the setup most users will be using (e.g. Ubuntu - // desktop). - // If running on X and not using GNOME then just use a traditional title bar - // in case the window manager does more exotic layout, e.g. tiling. - // If running on Wayland assume the header bar will work (may need changing - // if future cases occur). - gboolean use_header_bar = TRUE; -#ifdef GDK_WINDOWING_X11 - GdkScreen* screen = gtk_window_get_screen(window); - if (GDK_IS_X11_SCREEN(screen)) { - const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); - if (g_strcmp0(wm_name, "GNOME Shell") != 0) { - use_header_bar = FALSE; - } - } -#endif - if (use_header_bar) { - GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); - gtk_widget_show(GTK_WIDGET(header_bar)); - gtk_header_bar_set_title(header_bar, "patterns_codelab"); - gtk_header_bar_set_show_close_button(header_bar, TRUE); - gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); - } else { - gtk_window_set_title(window, "patterns_codelab"); - } - - gtk_window_set_default_size(window, 1280, 720); - gtk_widget_show(GTK_WIDGET(window)); - - g_autoptr(FlDartProject) project = fl_dart_project_new(); - fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); - - FlView* view = fl_view_new(project); - gtk_widget_show(GTK_WIDGET(view)); - gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); - - fl_register_plugins(FL_PLUGIN_REGISTRY(view)); - - gtk_widget_grab_focus(GTK_WIDGET(view)); -} - -// Implements GApplication::local_command_line. -static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { - MyApplication* self = MY_APPLICATION(application); - // Strip out the first argument as it is the binary name. - self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); - - g_autoptr(GError) error = nullptr; - if (!g_application_register(application, nullptr, &error)) { - g_warning("Failed to register: %s", error->message); - *exit_status = 1; - return TRUE; - } - - g_application_activate(application); - *exit_status = 0; - - return TRUE; -} - -// Implements GApplication::startup. -static void my_application_startup(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application startup. - - G_APPLICATION_CLASS(my_application_parent_class)->startup(application); -} - -// Implements GApplication::shutdown. -static void my_application_shutdown(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application shutdown. - - G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); -} - -// Implements GObject::dispose. -static void my_application_dispose(GObject* object) { - MyApplication* self = MY_APPLICATION(object); - g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); - G_OBJECT_CLASS(my_application_parent_class)->dispose(object); -} - -static void my_application_class_init(MyApplicationClass* klass) { - G_APPLICATION_CLASS(klass)->activate = my_application_activate; - G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; - G_APPLICATION_CLASS(klass)->startup = my_application_startup; - G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; - G_OBJECT_CLASS(klass)->dispose = my_application_dispose; -} - -static void my_application_init(MyApplication* self) {} - -MyApplication* my_application_new() { - // Set the program name to the application ID, which helps various systems - // like GTK and desktop environments map this running application to its - // corresponding .desktop file. This ensures better integration by allowing - // the application to be recognized beyond its binary name. - g_set_prgname(APPLICATION_ID); - - return MY_APPLICATION(g_object_new(my_application_get_type(), - "application-id", APPLICATION_ID, - "flags", G_APPLICATION_NON_UNIQUE, - nullptr)); -} diff --git a/dart-patterns-and-records/step_08/web/index.html b/dart-patterns-and-records/step_08/web/index.html index adcc31bddb..e14846e8ce 100644 --- a/dart-patterns-and-records/step_08/web/index.html +++ b/dart-patterns-and-records/step_08/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/dart-patterns-and-records/step_09/android/gradle.properties b/dart-patterns-and-records/step_09/android/gradle.properties index f018a61817..2597170821 100644 --- a/dart-patterns-and-records/step_09/android/gradle.properties +++ b/dart-patterns-and-records/step_09/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/dart-patterns-and-records/step_09/linux/CMakeLists.txt b/dart-patterns-and-records/step_09/linux/CMakeLists.txt index 6f653779a7..dc88dd5e7d 100644 --- a/dart-patterns-and-records/step_09/linux/CMakeLists.txt +++ b/dart-patterns-and-records/step_09/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.13) +cmake_minimum_required(VERSION 3.10) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,8 +54,25 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -# Application build; see runner/CMakeLists.txt. -add_subdirectory("runner") +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Define the application target. To change its name, change BINARY_NAME above, +# not the value here, or `flutter run` will no longer work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/dart-patterns-and-records/step_09/linux/runner/main.cc b/dart-patterns-and-records/step_09/linux/main.cc similarity index 100% rename from dart-patterns-and-records/step_09/linux/runner/main.cc rename to dart-patterns-and-records/step_09/linux/main.cc diff --git a/dart-patterns-and-records/step_09/linux/my_application.cc b/dart-patterns-and-records/step_09/linux/my_application.cc new file mode 100644 index 0000000000..2e328e01f8 --- /dev/null +++ b/dart-patterns-and-records/step_09/linux/my_application.cc @@ -0,0 +1,124 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "patterns_codelab"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "patterns_codelab"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/dart-patterns-and-records/step_09/linux/runner/my_application.h b/dart-patterns-and-records/step_09/linux/my_application.h similarity index 100% rename from dart-patterns-and-records/step_09/linux/runner/my_application.h rename to dart-patterns-and-records/step_09/linux/my_application.h diff --git a/dart-patterns-and-records/step_09/linux/runner/CMakeLists.txt b/dart-patterns-and-records/step_09/linux/runner/CMakeLists.txt deleted file mode 100644 index e97dabc702..0000000000 --- a/dart-patterns-and-records/step_09/linux/runner/CMakeLists.txt +++ /dev/null @@ -1,26 +0,0 @@ -cmake_minimum_required(VERSION 3.13) -project(runner LANGUAGES CXX) - -# Define the application target. To change its name, change BINARY_NAME in the -# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer -# work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add preprocessor definitions for the application ID. -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) - -target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/dart-patterns-and-records/step_09/linux/runner/my_application.cc b/dart-patterns-and-records/step_09/linux/runner/my_application.cc deleted file mode 100644 index 7065b83916..0000000000 --- a/dart-patterns-and-records/step_09/linux/runner/my_application.cc +++ /dev/null @@ -1,130 +0,0 @@ -#include "my_application.h" - -#include -#ifdef GDK_WINDOWING_X11 -#include -#endif - -#include "flutter/generated_plugin_registrant.h" - -struct _MyApplication { - GtkApplication parent_instance; - char** dart_entrypoint_arguments; -}; - -G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) - -// Implements GApplication::activate. -static void my_application_activate(GApplication* application) { - MyApplication* self = MY_APPLICATION(application); - GtkWindow* window = - GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); - - // Use a header bar when running in GNOME as this is the common style used - // by applications and is the setup most users will be using (e.g. Ubuntu - // desktop). - // If running on X and not using GNOME then just use a traditional title bar - // in case the window manager does more exotic layout, e.g. tiling. - // If running on Wayland assume the header bar will work (may need changing - // if future cases occur). - gboolean use_header_bar = TRUE; -#ifdef GDK_WINDOWING_X11 - GdkScreen* screen = gtk_window_get_screen(window); - if (GDK_IS_X11_SCREEN(screen)) { - const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); - if (g_strcmp0(wm_name, "GNOME Shell") != 0) { - use_header_bar = FALSE; - } - } -#endif - if (use_header_bar) { - GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); - gtk_widget_show(GTK_WIDGET(header_bar)); - gtk_header_bar_set_title(header_bar, "patterns_codelab"); - gtk_header_bar_set_show_close_button(header_bar, TRUE); - gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); - } else { - gtk_window_set_title(window, "patterns_codelab"); - } - - gtk_window_set_default_size(window, 1280, 720); - gtk_widget_show(GTK_WIDGET(window)); - - g_autoptr(FlDartProject) project = fl_dart_project_new(); - fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); - - FlView* view = fl_view_new(project); - gtk_widget_show(GTK_WIDGET(view)); - gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); - - fl_register_plugins(FL_PLUGIN_REGISTRY(view)); - - gtk_widget_grab_focus(GTK_WIDGET(view)); -} - -// Implements GApplication::local_command_line. -static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { - MyApplication* self = MY_APPLICATION(application); - // Strip out the first argument as it is the binary name. - self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); - - g_autoptr(GError) error = nullptr; - if (!g_application_register(application, nullptr, &error)) { - g_warning("Failed to register: %s", error->message); - *exit_status = 1; - return TRUE; - } - - g_application_activate(application); - *exit_status = 0; - - return TRUE; -} - -// Implements GApplication::startup. -static void my_application_startup(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application startup. - - G_APPLICATION_CLASS(my_application_parent_class)->startup(application); -} - -// Implements GApplication::shutdown. -static void my_application_shutdown(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application shutdown. - - G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); -} - -// Implements GObject::dispose. -static void my_application_dispose(GObject* object) { - MyApplication* self = MY_APPLICATION(object); - g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); - G_OBJECT_CLASS(my_application_parent_class)->dispose(object); -} - -static void my_application_class_init(MyApplicationClass* klass) { - G_APPLICATION_CLASS(klass)->activate = my_application_activate; - G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; - G_APPLICATION_CLASS(klass)->startup = my_application_startup; - G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; - G_OBJECT_CLASS(klass)->dispose = my_application_dispose; -} - -static void my_application_init(MyApplication* self) {} - -MyApplication* my_application_new() { - // Set the program name to the application ID, which helps various systems - // like GTK and desktop environments map this running application to its - // corresponding .desktop file. This ensures better integration by allowing - // the application to be recognized beyond its binary name. - g_set_prgname(APPLICATION_ID); - - return MY_APPLICATION(g_object_new(my_application_get_type(), - "application-id", APPLICATION_ID, - "flags", G_APPLICATION_NON_UNIQUE, - nullptr)); -} diff --git a/dart-patterns-and-records/step_09/web/index.html b/dart-patterns-and-records/step_09/web/index.html index adcc31bddb..e14846e8ce 100644 --- a/dart-patterns-and-records/step_09/web/index.html +++ b/dart-patterns-and-records/step_09/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/dart-patterns-and-records/step_10/android/gradle.properties b/dart-patterns-and-records/step_10/android/gradle.properties index f018a61817..2597170821 100644 --- a/dart-patterns-and-records/step_10/android/gradle.properties +++ b/dart-patterns-and-records/step_10/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/dart-patterns-and-records/step_10/linux/CMakeLists.txt b/dart-patterns-and-records/step_10/linux/CMakeLists.txt index 6f653779a7..dc88dd5e7d 100644 --- a/dart-patterns-and-records/step_10/linux/CMakeLists.txt +++ b/dart-patterns-and-records/step_10/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.13) +cmake_minimum_required(VERSION 3.10) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,8 +54,25 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -# Application build; see runner/CMakeLists.txt. -add_subdirectory("runner") +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Define the application target. To change its name, change BINARY_NAME above, +# not the value here, or `flutter run` will no longer work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/dart-patterns-and-records/step_10/linux/runner/main.cc b/dart-patterns-and-records/step_10/linux/main.cc similarity index 100% rename from dart-patterns-and-records/step_10/linux/runner/main.cc rename to dart-patterns-and-records/step_10/linux/main.cc diff --git a/dart-patterns-and-records/step_10/linux/my_application.cc b/dart-patterns-and-records/step_10/linux/my_application.cc new file mode 100644 index 0000000000..2e328e01f8 --- /dev/null +++ b/dart-patterns-and-records/step_10/linux/my_application.cc @@ -0,0 +1,124 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "patterns_codelab"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "patterns_codelab"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/dart-patterns-and-records/step_10/linux/runner/my_application.h b/dart-patterns-and-records/step_10/linux/my_application.h similarity index 100% rename from dart-patterns-and-records/step_10/linux/runner/my_application.h rename to dart-patterns-and-records/step_10/linux/my_application.h diff --git a/dart-patterns-and-records/step_10/linux/runner/CMakeLists.txt b/dart-patterns-and-records/step_10/linux/runner/CMakeLists.txt deleted file mode 100644 index e97dabc702..0000000000 --- a/dart-patterns-and-records/step_10/linux/runner/CMakeLists.txt +++ /dev/null @@ -1,26 +0,0 @@ -cmake_minimum_required(VERSION 3.13) -project(runner LANGUAGES CXX) - -# Define the application target. To change its name, change BINARY_NAME in the -# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer -# work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add preprocessor definitions for the application ID. -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) - -target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/dart-patterns-and-records/step_10/linux/runner/my_application.cc b/dart-patterns-and-records/step_10/linux/runner/my_application.cc deleted file mode 100644 index 7065b83916..0000000000 --- a/dart-patterns-and-records/step_10/linux/runner/my_application.cc +++ /dev/null @@ -1,130 +0,0 @@ -#include "my_application.h" - -#include -#ifdef GDK_WINDOWING_X11 -#include -#endif - -#include "flutter/generated_plugin_registrant.h" - -struct _MyApplication { - GtkApplication parent_instance; - char** dart_entrypoint_arguments; -}; - -G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) - -// Implements GApplication::activate. -static void my_application_activate(GApplication* application) { - MyApplication* self = MY_APPLICATION(application); - GtkWindow* window = - GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); - - // Use a header bar when running in GNOME as this is the common style used - // by applications and is the setup most users will be using (e.g. Ubuntu - // desktop). - // If running on X and not using GNOME then just use a traditional title bar - // in case the window manager does more exotic layout, e.g. tiling. - // If running on Wayland assume the header bar will work (may need changing - // if future cases occur). - gboolean use_header_bar = TRUE; -#ifdef GDK_WINDOWING_X11 - GdkScreen* screen = gtk_window_get_screen(window); - if (GDK_IS_X11_SCREEN(screen)) { - const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); - if (g_strcmp0(wm_name, "GNOME Shell") != 0) { - use_header_bar = FALSE; - } - } -#endif - if (use_header_bar) { - GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); - gtk_widget_show(GTK_WIDGET(header_bar)); - gtk_header_bar_set_title(header_bar, "patterns_codelab"); - gtk_header_bar_set_show_close_button(header_bar, TRUE); - gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); - } else { - gtk_window_set_title(window, "patterns_codelab"); - } - - gtk_window_set_default_size(window, 1280, 720); - gtk_widget_show(GTK_WIDGET(window)); - - g_autoptr(FlDartProject) project = fl_dart_project_new(); - fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); - - FlView* view = fl_view_new(project); - gtk_widget_show(GTK_WIDGET(view)); - gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); - - fl_register_plugins(FL_PLUGIN_REGISTRY(view)); - - gtk_widget_grab_focus(GTK_WIDGET(view)); -} - -// Implements GApplication::local_command_line. -static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { - MyApplication* self = MY_APPLICATION(application); - // Strip out the first argument as it is the binary name. - self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); - - g_autoptr(GError) error = nullptr; - if (!g_application_register(application, nullptr, &error)) { - g_warning("Failed to register: %s", error->message); - *exit_status = 1; - return TRUE; - } - - g_application_activate(application); - *exit_status = 0; - - return TRUE; -} - -// Implements GApplication::startup. -static void my_application_startup(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application startup. - - G_APPLICATION_CLASS(my_application_parent_class)->startup(application); -} - -// Implements GApplication::shutdown. -static void my_application_shutdown(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application shutdown. - - G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); -} - -// Implements GObject::dispose. -static void my_application_dispose(GObject* object) { - MyApplication* self = MY_APPLICATION(object); - g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); - G_OBJECT_CLASS(my_application_parent_class)->dispose(object); -} - -static void my_application_class_init(MyApplicationClass* klass) { - G_APPLICATION_CLASS(klass)->activate = my_application_activate; - G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; - G_APPLICATION_CLASS(klass)->startup = my_application_startup; - G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; - G_OBJECT_CLASS(klass)->dispose = my_application_dispose; -} - -static void my_application_init(MyApplication* self) {} - -MyApplication* my_application_new() { - // Set the program name to the application ID, which helps various systems - // like GTK and desktop environments map this running application to its - // corresponding .desktop file. This ensures better integration by allowing - // the application to be recognized beyond its binary name. - g_set_prgname(APPLICATION_ID); - - return MY_APPLICATION(g_object_new(my_application_get_type(), - "application-id", APPLICATION_ID, - "flags", G_APPLICATION_NON_UNIQUE, - nullptr)); -} diff --git a/dart-patterns-and-records/step_10/web/index.html b/dart-patterns-and-records/step_10/web/index.html index adcc31bddb..e14846e8ce 100644 --- a/dart-patterns-and-records/step_10/web/index.html +++ b/dart-patterns-and-records/step_10/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/dart-patterns-and-records/step_11_a/android/gradle.properties b/dart-patterns-and-records/step_11_a/android/gradle.properties index f018a61817..2597170821 100644 --- a/dart-patterns-and-records/step_11_a/android/gradle.properties +++ b/dart-patterns-and-records/step_11_a/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/dart-patterns-and-records/step_11_a/linux/CMakeLists.txt b/dart-patterns-and-records/step_11_a/linux/CMakeLists.txt index 6f653779a7..dc88dd5e7d 100644 --- a/dart-patterns-and-records/step_11_a/linux/CMakeLists.txt +++ b/dart-patterns-and-records/step_11_a/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.13) +cmake_minimum_required(VERSION 3.10) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,8 +54,25 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -# Application build; see runner/CMakeLists.txt. -add_subdirectory("runner") +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Define the application target. To change its name, change BINARY_NAME above, +# not the value here, or `flutter run` will no longer work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/dart-patterns-and-records/step_11_a/linux/runner/main.cc b/dart-patterns-and-records/step_11_a/linux/main.cc similarity index 100% rename from dart-patterns-and-records/step_11_a/linux/runner/main.cc rename to dart-patterns-and-records/step_11_a/linux/main.cc diff --git a/dart-patterns-and-records/step_11_a/linux/my_application.cc b/dart-patterns-and-records/step_11_a/linux/my_application.cc new file mode 100644 index 0000000000..2e328e01f8 --- /dev/null +++ b/dart-patterns-and-records/step_11_a/linux/my_application.cc @@ -0,0 +1,124 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "patterns_codelab"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "patterns_codelab"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/dart-patterns-and-records/step_11_a/linux/runner/my_application.h b/dart-patterns-and-records/step_11_a/linux/my_application.h similarity index 100% rename from dart-patterns-and-records/step_11_a/linux/runner/my_application.h rename to dart-patterns-and-records/step_11_a/linux/my_application.h diff --git a/dart-patterns-and-records/step_11_a/linux/runner/CMakeLists.txt b/dart-patterns-and-records/step_11_a/linux/runner/CMakeLists.txt deleted file mode 100644 index e97dabc702..0000000000 --- a/dart-patterns-and-records/step_11_a/linux/runner/CMakeLists.txt +++ /dev/null @@ -1,26 +0,0 @@ -cmake_minimum_required(VERSION 3.13) -project(runner LANGUAGES CXX) - -# Define the application target. To change its name, change BINARY_NAME in the -# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer -# work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add preprocessor definitions for the application ID. -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) - -target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/dart-patterns-and-records/step_11_a/linux/runner/my_application.cc b/dart-patterns-and-records/step_11_a/linux/runner/my_application.cc deleted file mode 100644 index 7065b83916..0000000000 --- a/dart-patterns-and-records/step_11_a/linux/runner/my_application.cc +++ /dev/null @@ -1,130 +0,0 @@ -#include "my_application.h" - -#include -#ifdef GDK_WINDOWING_X11 -#include -#endif - -#include "flutter/generated_plugin_registrant.h" - -struct _MyApplication { - GtkApplication parent_instance; - char** dart_entrypoint_arguments; -}; - -G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) - -// Implements GApplication::activate. -static void my_application_activate(GApplication* application) { - MyApplication* self = MY_APPLICATION(application); - GtkWindow* window = - GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); - - // Use a header bar when running in GNOME as this is the common style used - // by applications and is the setup most users will be using (e.g. Ubuntu - // desktop). - // If running on X and not using GNOME then just use a traditional title bar - // in case the window manager does more exotic layout, e.g. tiling. - // If running on Wayland assume the header bar will work (may need changing - // if future cases occur). - gboolean use_header_bar = TRUE; -#ifdef GDK_WINDOWING_X11 - GdkScreen* screen = gtk_window_get_screen(window); - if (GDK_IS_X11_SCREEN(screen)) { - const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); - if (g_strcmp0(wm_name, "GNOME Shell") != 0) { - use_header_bar = FALSE; - } - } -#endif - if (use_header_bar) { - GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); - gtk_widget_show(GTK_WIDGET(header_bar)); - gtk_header_bar_set_title(header_bar, "patterns_codelab"); - gtk_header_bar_set_show_close_button(header_bar, TRUE); - gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); - } else { - gtk_window_set_title(window, "patterns_codelab"); - } - - gtk_window_set_default_size(window, 1280, 720); - gtk_widget_show(GTK_WIDGET(window)); - - g_autoptr(FlDartProject) project = fl_dart_project_new(); - fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); - - FlView* view = fl_view_new(project); - gtk_widget_show(GTK_WIDGET(view)); - gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); - - fl_register_plugins(FL_PLUGIN_REGISTRY(view)); - - gtk_widget_grab_focus(GTK_WIDGET(view)); -} - -// Implements GApplication::local_command_line. -static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { - MyApplication* self = MY_APPLICATION(application); - // Strip out the first argument as it is the binary name. - self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); - - g_autoptr(GError) error = nullptr; - if (!g_application_register(application, nullptr, &error)) { - g_warning("Failed to register: %s", error->message); - *exit_status = 1; - return TRUE; - } - - g_application_activate(application); - *exit_status = 0; - - return TRUE; -} - -// Implements GApplication::startup. -static void my_application_startup(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application startup. - - G_APPLICATION_CLASS(my_application_parent_class)->startup(application); -} - -// Implements GApplication::shutdown. -static void my_application_shutdown(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application shutdown. - - G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); -} - -// Implements GObject::dispose. -static void my_application_dispose(GObject* object) { - MyApplication* self = MY_APPLICATION(object); - g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); - G_OBJECT_CLASS(my_application_parent_class)->dispose(object); -} - -static void my_application_class_init(MyApplicationClass* klass) { - G_APPLICATION_CLASS(klass)->activate = my_application_activate; - G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; - G_APPLICATION_CLASS(klass)->startup = my_application_startup; - G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; - G_OBJECT_CLASS(klass)->dispose = my_application_dispose; -} - -static void my_application_init(MyApplication* self) {} - -MyApplication* my_application_new() { - // Set the program name to the application ID, which helps various systems - // like GTK and desktop environments map this running application to its - // corresponding .desktop file. This ensures better integration by allowing - // the application to be recognized beyond its binary name. - g_set_prgname(APPLICATION_ID); - - return MY_APPLICATION(g_object_new(my_application_get_type(), - "application-id", APPLICATION_ID, - "flags", G_APPLICATION_NON_UNIQUE, - nullptr)); -} diff --git a/dart-patterns-and-records/step_11_a/web/index.html b/dart-patterns-and-records/step_11_a/web/index.html index adcc31bddb..e14846e8ce 100644 --- a/dart-patterns-and-records/step_11_a/web/index.html +++ b/dart-patterns-and-records/step_11_a/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/dart-patterns-and-records/step_11_b/android/gradle.properties b/dart-patterns-and-records/step_11_b/android/gradle.properties index f018a61817..2597170821 100644 --- a/dart-patterns-and-records/step_11_b/android/gradle.properties +++ b/dart-patterns-and-records/step_11_b/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/dart-patterns-and-records/step_11_b/linux/CMakeLists.txt b/dart-patterns-and-records/step_11_b/linux/CMakeLists.txt index 6f653779a7..dc88dd5e7d 100644 --- a/dart-patterns-and-records/step_11_b/linux/CMakeLists.txt +++ b/dart-patterns-and-records/step_11_b/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.13) +cmake_minimum_required(VERSION 3.10) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,8 +54,25 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -# Application build; see runner/CMakeLists.txt. -add_subdirectory("runner") +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Define the application target. To change its name, change BINARY_NAME above, +# not the value here, or `flutter run` will no longer work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/dart-patterns-and-records/step_11_b/linux/runner/main.cc b/dart-patterns-and-records/step_11_b/linux/main.cc similarity index 100% rename from dart-patterns-and-records/step_11_b/linux/runner/main.cc rename to dart-patterns-and-records/step_11_b/linux/main.cc diff --git a/dart-patterns-and-records/step_11_b/linux/my_application.cc b/dart-patterns-and-records/step_11_b/linux/my_application.cc new file mode 100644 index 0000000000..2e328e01f8 --- /dev/null +++ b/dart-patterns-and-records/step_11_b/linux/my_application.cc @@ -0,0 +1,124 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "patterns_codelab"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "patterns_codelab"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/dart-patterns-and-records/step_11_b/linux/runner/my_application.h b/dart-patterns-and-records/step_11_b/linux/my_application.h similarity index 100% rename from dart-patterns-and-records/step_11_b/linux/runner/my_application.h rename to dart-patterns-and-records/step_11_b/linux/my_application.h diff --git a/dart-patterns-and-records/step_11_b/linux/runner/CMakeLists.txt b/dart-patterns-and-records/step_11_b/linux/runner/CMakeLists.txt deleted file mode 100644 index e97dabc702..0000000000 --- a/dart-patterns-and-records/step_11_b/linux/runner/CMakeLists.txt +++ /dev/null @@ -1,26 +0,0 @@ -cmake_minimum_required(VERSION 3.13) -project(runner LANGUAGES CXX) - -# Define the application target. To change its name, change BINARY_NAME in the -# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer -# work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add preprocessor definitions for the application ID. -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) - -target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/dart-patterns-and-records/step_11_b/linux/runner/my_application.cc b/dart-patterns-and-records/step_11_b/linux/runner/my_application.cc deleted file mode 100644 index 7065b83916..0000000000 --- a/dart-patterns-and-records/step_11_b/linux/runner/my_application.cc +++ /dev/null @@ -1,130 +0,0 @@ -#include "my_application.h" - -#include -#ifdef GDK_WINDOWING_X11 -#include -#endif - -#include "flutter/generated_plugin_registrant.h" - -struct _MyApplication { - GtkApplication parent_instance; - char** dart_entrypoint_arguments; -}; - -G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) - -// Implements GApplication::activate. -static void my_application_activate(GApplication* application) { - MyApplication* self = MY_APPLICATION(application); - GtkWindow* window = - GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); - - // Use a header bar when running in GNOME as this is the common style used - // by applications and is the setup most users will be using (e.g. Ubuntu - // desktop). - // If running on X and not using GNOME then just use a traditional title bar - // in case the window manager does more exotic layout, e.g. tiling. - // If running on Wayland assume the header bar will work (may need changing - // if future cases occur). - gboolean use_header_bar = TRUE; -#ifdef GDK_WINDOWING_X11 - GdkScreen* screen = gtk_window_get_screen(window); - if (GDK_IS_X11_SCREEN(screen)) { - const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); - if (g_strcmp0(wm_name, "GNOME Shell") != 0) { - use_header_bar = FALSE; - } - } -#endif - if (use_header_bar) { - GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); - gtk_widget_show(GTK_WIDGET(header_bar)); - gtk_header_bar_set_title(header_bar, "patterns_codelab"); - gtk_header_bar_set_show_close_button(header_bar, TRUE); - gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); - } else { - gtk_window_set_title(window, "patterns_codelab"); - } - - gtk_window_set_default_size(window, 1280, 720); - gtk_widget_show(GTK_WIDGET(window)); - - g_autoptr(FlDartProject) project = fl_dart_project_new(); - fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); - - FlView* view = fl_view_new(project); - gtk_widget_show(GTK_WIDGET(view)); - gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); - - fl_register_plugins(FL_PLUGIN_REGISTRY(view)); - - gtk_widget_grab_focus(GTK_WIDGET(view)); -} - -// Implements GApplication::local_command_line. -static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { - MyApplication* self = MY_APPLICATION(application); - // Strip out the first argument as it is the binary name. - self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); - - g_autoptr(GError) error = nullptr; - if (!g_application_register(application, nullptr, &error)) { - g_warning("Failed to register: %s", error->message); - *exit_status = 1; - return TRUE; - } - - g_application_activate(application); - *exit_status = 0; - - return TRUE; -} - -// Implements GApplication::startup. -static void my_application_startup(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application startup. - - G_APPLICATION_CLASS(my_application_parent_class)->startup(application); -} - -// Implements GApplication::shutdown. -static void my_application_shutdown(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application shutdown. - - G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); -} - -// Implements GObject::dispose. -static void my_application_dispose(GObject* object) { - MyApplication* self = MY_APPLICATION(object); - g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); - G_OBJECT_CLASS(my_application_parent_class)->dispose(object); -} - -static void my_application_class_init(MyApplicationClass* klass) { - G_APPLICATION_CLASS(klass)->activate = my_application_activate; - G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; - G_APPLICATION_CLASS(klass)->startup = my_application_startup; - G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; - G_OBJECT_CLASS(klass)->dispose = my_application_dispose; -} - -static void my_application_init(MyApplication* self) {} - -MyApplication* my_application_new() { - // Set the program name to the application ID, which helps various systems - // like GTK and desktop environments map this running application to its - // corresponding .desktop file. This ensures better integration by allowing - // the application to be recognized beyond its binary name. - g_set_prgname(APPLICATION_ID); - - return MY_APPLICATION(g_object_new(my_application_get_type(), - "application-id", APPLICATION_ID, - "flags", G_APPLICATION_NON_UNIQUE, - nullptr)); -} diff --git a/dart-patterns-and-records/step_11_b/web/index.html b/dart-patterns-and-records/step_11_b/web/index.html index adcc31bddb..e14846e8ce 100644 --- a/dart-patterns-and-records/step_11_b/web/index.html +++ b/dart-patterns-and-records/step_11_b/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/dart-patterns-and-records/step_12/android/gradle.properties b/dart-patterns-and-records/step_12/android/gradle.properties index f018a61817..2597170821 100644 --- a/dart-patterns-and-records/step_12/android/gradle.properties +++ b/dart-patterns-and-records/step_12/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/dart-patterns-and-records/step_12/linux/CMakeLists.txt b/dart-patterns-and-records/step_12/linux/CMakeLists.txt index 6f653779a7..dc88dd5e7d 100644 --- a/dart-patterns-and-records/step_12/linux/CMakeLists.txt +++ b/dart-patterns-and-records/step_12/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.13) +cmake_minimum_required(VERSION 3.10) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,8 +54,25 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -# Application build; see runner/CMakeLists.txt. -add_subdirectory("runner") +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Define the application target. To change its name, change BINARY_NAME above, +# not the value here, or `flutter run` will no longer work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/dart-patterns-and-records/step_12/linux/runner/main.cc b/dart-patterns-and-records/step_12/linux/main.cc similarity index 100% rename from dart-patterns-and-records/step_12/linux/runner/main.cc rename to dart-patterns-and-records/step_12/linux/main.cc diff --git a/dart-patterns-and-records/step_12/linux/my_application.cc b/dart-patterns-and-records/step_12/linux/my_application.cc new file mode 100644 index 0000000000..2e328e01f8 --- /dev/null +++ b/dart-patterns-and-records/step_12/linux/my_application.cc @@ -0,0 +1,124 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "patterns_codelab"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "patterns_codelab"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/dart-patterns-and-records/step_12/linux/runner/my_application.h b/dart-patterns-and-records/step_12/linux/my_application.h similarity index 100% rename from dart-patterns-and-records/step_12/linux/runner/my_application.h rename to dart-patterns-and-records/step_12/linux/my_application.h diff --git a/dart-patterns-and-records/step_12/linux/runner/CMakeLists.txt b/dart-patterns-and-records/step_12/linux/runner/CMakeLists.txt deleted file mode 100644 index e97dabc702..0000000000 --- a/dart-patterns-and-records/step_12/linux/runner/CMakeLists.txt +++ /dev/null @@ -1,26 +0,0 @@ -cmake_minimum_required(VERSION 3.13) -project(runner LANGUAGES CXX) - -# Define the application target. To change its name, change BINARY_NAME in the -# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer -# work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add preprocessor definitions for the application ID. -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) - -target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/dart-patterns-and-records/step_12/linux/runner/my_application.cc b/dart-patterns-and-records/step_12/linux/runner/my_application.cc deleted file mode 100644 index 7065b83916..0000000000 --- a/dart-patterns-and-records/step_12/linux/runner/my_application.cc +++ /dev/null @@ -1,130 +0,0 @@ -#include "my_application.h" - -#include -#ifdef GDK_WINDOWING_X11 -#include -#endif - -#include "flutter/generated_plugin_registrant.h" - -struct _MyApplication { - GtkApplication parent_instance; - char** dart_entrypoint_arguments; -}; - -G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) - -// Implements GApplication::activate. -static void my_application_activate(GApplication* application) { - MyApplication* self = MY_APPLICATION(application); - GtkWindow* window = - GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); - - // Use a header bar when running in GNOME as this is the common style used - // by applications and is the setup most users will be using (e.g. Ubuntu - // desktop). - // If running on X and not using GNOME then just use a traditional title bar - // in case the window manager does more exotic layout, e.g. tiling. - // If running on Wayland assume the header bar will work (may need changing - // if future cases occur). - gboolean use_header_bar = TRUE; -#ifdef GDK_WINDOWING_X11 - GdkScreen* screen = gtk_window_get_screen(window); - if (GDK_IS_X11_SCREEN(screen)) { - const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); - if (g_strcmp0(wm_name, "GNOME Shell") != 0) { - use_header_bar = FALSE; - } - } -#endif - if (use_header_bar) { - GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); - gtk_widget_show(GTK_WIDGET(header_bar)); - gtk_header_bar_set_title(header_bar, "patterns_codelab"); - gtk_header_bar_set_show_close_button(header_bar, TRUE); - gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); - } else { - gtk_window_set_title(window, "patterns_codelab"); - } - - gtk_window_set_default_size(window, 1280, 720); - gtk_widget_show(GTK_WIDGET(window)); - - g_autoptr(FlDartProject) project = fl_dart_project_new(); - fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); - - FlView* view = fl_view_new(project); - gtk_widget_show(GTK_WIDGET(view)); - gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); - - fl_register_plugins(FL_PLUGIN_REGISTRY(view)); - - gtk_widget_grab_focus(GTK_WIDGET(view)); -} - -// Implements GApplication::local_command_line. -static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { - MyApplication* self = MY_APPLICATION(application); - // Strip out the first argument as it is the binary name. - self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); - - g_autoptr(GError) error = nullptr; - if (!g_application_register(application, nullptr, &error)) { - g_warning("Failed to register: %s", error->message); - *exit_status = 1; - return TRUE; - } - - g_application_activate(application); - *exit_status = 0; - - return TRUE; -} - -// Implements GApplication::startup. -static void my_application_startup(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application startup. - - G_APPLICATION_CLASS(my_application_parent_class)->startup(application); -} - -// Implements GApplication::shutdown. -static void my_application_shutdown(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application shutdown. - - G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); -} - -// Implements GObject::dispose. -static void my_application_dispose(GObject* object) { - MyApplication* self = MY_APPLICATION(object); - g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); - G_OBJECT_CLASS(my_application_parent_class)->dispose(object); -} - -static void my_application_class_init(MyApplicationClass* klass) { - G_APPLICATION_CLASS(klass)->activate = my_application_activate; - G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; - G_APPLICATION_CLASS(klass)->startup = my_application_startup; - G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; - G_OBJECT_CLASS(klass)->dispose = my_application_dispose; -} - -static void my_application_init(MyApplication* self) {} - -MyApplication* my_application_new() { - // Set the program name to the application ID, which helps various systems - // like GTK and desktop environments map this running application to its - // corresponding .desktop file. This ensures better integration by allowing - // the application to be recognized beyond its binary name. - g_set_prgname(APPLICATION_ID); - - return MY_APPLICATION(g_object_new(my_application_get_type(), - "application-id", APPLICATION_ID, - "flags", G_APPLICATION_NON_UNIQUE, - nullptr)); -} diff --git a/dart-patterns-and-records/step_12/web/index.html b/dart-patterns-and-records/step_12/web/index.html index adcc31bddb..e14846e8ce 100644 --- a/dart-patterns-and-records/step_12/web/index.html +++ b/dart-patterns-and-records/step_12/web/index.html @@ -21,7 +21,7 @@ - + From 81a5fb8cb211875177a610db2b4549b524825cd0 Mon Sep 17 00:00:00 2001 From: Brett Morgan Date: Fri, 18 Oct 2024 11:12:54 +1100 Subject: [PATCH 021/108] Update `ffigen_codelab` for flutter beta --- ffigen_codelab/step_03/android/build.gradle | 8 +- .../step_03/example/android/gradle.properties | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 132 +++++++++--------- .../step_03/example/linux/CMakeLists.txt | 23 ++- .../example/linux/{runner => }/main.cc | 0 .../example/linux}/my_application.cc | 6 - .../linux/{runner => }/my_application.h | 0 .../example/linux/runner/CMakeLists.txt | 26 ---- .../macos/Runner.xcodeproj/project.pbxproj | 106 +++++++------- .../step_03/macos/ffigen_app.podspec | 7 - ffigen_codelab/step_03/src/CMakeLists.txt | 5 - ffigen_codelab/step_05/android/build.gradle | 8 +- .../step_05/example/android/gradle.properties | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 132 +++++++++--------- .../step_05/example/linux/CMakeLists.txt | 23 ++- .../example/linux/{runner => }/main.cc | 0 .../example/linux}/my_application.cc | 6 - .../linux/{runner => }/my_application.h | 0 .../example/linux/runner/CMakeLists.txt | 26 ---- .../macos/Runner.xcodeproj/project.pbxproj | 106 +++++++------- .../step_05/macos/ffigen_app.podspec | 7 - ffigen_codelab/step_05/src/CMakeLists.txt | 5 - ffigen_codelab/step_06/android/build.gradle | 8 +- .../step_06/example/android/gradle.properties | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 132 +++++++++--------- .../step_06/example/linux/CMakeLists.txt | 23 ++- .../example/linux/{runner => }/main.cc | 0 .../example/linux}/my_application.cc | 6 - .../linux/{runner => }/my_application.h | 0 .../example/linux/runner/CMakeLists.txt | 26 ---- .../macos/Runner.xcodeproj/project.pbxproj | 106 +++++++------- .../step_06/macos/ffigen_app.podspec | 7 - ffigen_codelab/step_06/src/CMakeLists.txt | 5 - ffigen_codelab/step_07/android/build.gradle | 8 +- .../step_07/example/android/gradle.properties | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 132 +++++++++--------- .../step_07/example/linux/CMakeLists.txt | 23 ++- .../example/linux/{runner => }/main.cc | 0 .../example/linux}/my_application.cc | 6 - .../linux/{runner => }/my_application.h | 0 .../example/linux/runner/CMakeLists.txt | 26 ---- .../macos/Runner.xcodeproj/project.pbxproj | 106 +++++++------- .../step_07/macos/ffigen_app.podspec | 7 - ffigen_codelab/step_07/src/CMakeLists.txt | 5 - 44 files changed, 580 insertions(+), 680 deletions(-) rename ffigen_codelab/step_03/example/linux/{runner => }/main.cc (100%) rename ffigen_codelab/{step_06/example/linux/runner => step_03/example/linux}/my_application.cc (93%) rename ffigen_codelab/step_03/example/linux/{runner => }/my_application.h (100%) delete mode 100644 ffigen_codelab/step_03/example/linux/runner/CMakeLists.txt rename ffigen_codelab/step_05/example/linux/{runner => }/main.cc (100%) rename ffigen_codelab/{step_03/example/linux/runner => step_05/example/linux}/my_application.cc (93%) rename ffigen_codelab/step_05/example/linux/{runner => }/my_application.h (100%) delete mode 100644 ffigen_codelab/step_05/example/linux/runner/CMakeLists.txt rename ffigen_codelab/step_06/example/linux/{runner => }/main.cc (100%) rename ffigen_codelab/{step_07/example/linux/runner => step_06/example/linux}/my_application.cc (93%) rename ffigen_codelab/step_06/example/linux/{runner => }/my_application.h (100%) delete mode 100644 ffigen_codelab/step_06/example/linux/runner/CMakeLists.txt rename ffigen_codelab/step_07/example/linux/{runner => }/main.cc (100%) rename ffigen_codelab/{step_05/example/linux/runner => step_07/example/linux}/my_application.cc (93%) rename ffigen_codelab/step_07/example/linux/{runner => }/my_application.h (100%) delete mode 100644 ffigen_codelab/step_07/example/linux/runner/CMakeLists.txt diff --git a/ffigen_codelab/step_03/android/build.gradle b/ffigen_codelab/step_03/android/build.gradle index 5681b7125e..09a2474ff1 100644 --- a/ffigen_codelab/step_03/android/build.gradle +++ b/ffigen_codelab/step_03/android/build.gradle @@ -25,7 +25,9 @@ rootProject.allprojects { apply plugin: "com.android.library" android { - namespace = "com.example.ffigen_app" + if (project.android.hasProperty("namespace")) { + namespace = "com.example.ffigen_app" + } // Bumping the plugin compileSdk version requires all clients of this plugin // to bump the version in their app. @@ -53,8 +55,8 @@ android { } compileOptions { - sourceCompatibility = JavaVersion.VERSION_11 - targetCompatibility = JavaVersion.VERSION_11 + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 } defaultConfig { diff --git a/ffigen_codelab/step_03/example/android/gradle.properties b/ffigen_codelab/step_03/example/android/gradle.properties index f018a61817..2597170821 100644 --- a/ffigen_codelab/step_03/example/android/gradle.properties +++ b/ffigen_codelab/step_03/example/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/ffigen_codelab/step_03/example/ios/Runner.xcodeproj/project.pbxproj b/ffigen_codelab/step_03/example/ios/Runner.xcodeproj/project.pbxproj index addb2d9d27..d4a7f84f6f 100644 --- a/ffigen_codelab/step_03/example/ios/Runner.xcodeproj/project.pbxproj +++ b/ffigen_codelab/step_03/example/ios/Runner.xcodeproj/project.pbxproj @@ -14,8 +14,8 @@ 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - E877D048132D3B7EB5F82226 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C2F2CEAC6F6A0C9CB9EDDDFA /* Pods_Runner.framework */; }; - F84DA7186408FE37502DC307 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1F81C7A96749BCF879B4AA0E /* Pods_RunnerTests.framework */; }; + A06930C0B91EF70DA9CE4397 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 08806D17B22EF3C21A38F092 /* Pods_Runner.framework */; }; + D822B98219FD34ACB5EB5698 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B03D772360D1034B2572877B /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,19 +42,20 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 08806D17B22EF3C21A38F092 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 1F81C7A96749BCF879B4AA0E /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 36F8C04D2EB0411ADA50D258 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 3BFA581CCCE704FFCB699F0D /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 4A9018625F52C60DD2AB19A4 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 4311D8E3C3A17D0AEC213B8D /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 6CBCFC22D800681C25E71760 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; - 760EB38BCE7B373982137EFF /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 776B7AEAFA1C47BA10114ED8 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; + 7BAAB17D435C542729E431FD /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 86E3CE0E2E977F39CDC4B358 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -62,9 +63,8 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - A8B84461C0AE17B571F25210 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - B899FC964E4D721CBCF8B32A /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - C2F2CEAC6F6A0C9CB9EDDDFA /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + B03D772360D1034B2572877B /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D44D616AE522B55E38A366B2 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -72,15 +72,15 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - E877D048132D3B7EB5F82226 /* Pods_Runner.framework in Frameworks */, + A06930C0B91EF70DA9CE4397 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - FFDFB7A91DA3CC3FB7D3ED28 /* Frameworks */ = { + DE0A2B7074F6DCE8A0B0EA9A /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - F84DA7186408FE37502DC307 /* Pods_RunnerTests.framework in Frameworks */, + D822B98219FD34ACB5EB5698 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -95,13 +95,18 @@ path = RunnerTests; sourceTree = ""; }; - 7765C30B327B729707FF946C /* Frameworks */ = { + 4856352D3A596BC21C6FA148 /* Pods */ = { isa = PBXGroup; children = ( - C2F2CEAC6F6A0C9CB9EDDDFA /* Pods_Runner.framework */, - 1F81C7A96749BCF879B4AA0E /* Pods_RunnerTests.framework */, + 4311D8E3C3A17D0AEC213B8D /* Pods-Runner.debug.xcconfig */, + 6CBCFC22D800681C25E71760 /* Pods-Runner.release.xcconfig */, + 7BAAB17D435C542729E431FD /* Pods-Runner.profile.xcconfig */, + 86E3CE0E2E977F39CDC4B358 /* Pods-RunnerTests.debug.xcconfig */, + D44D616AE522B55E38A366B2 /* Pods-RunnerTests.release.xcconfig */, + 776B7AEAFA1C47BA10114ED8 /* Pods-RunnerTests.profile.xcconfig */, ); - name = Frameworks; + name = Pods; + path = Pods; sourceTree = ""; }; 9740EEB11CF90186004384FC /* Flutter */ = { @@ -115,20 +120,6 @@ name = Flutter; sourceTree = ""; }; - 979C260ADDD4EF8BE0C2FB07 /* Pods */ = { - isa = PBXGroup; - children = ( - 3BFA581CCCE704FFCB699F0D /* Pods-Runner.debug.xcconfig */, - B899FC964E4D721CBCF8B32A /* Pods-Runner.release.xcconfig */, - 4A9018625F52C60DD2AB19A4 /* Pods-Runner.profile.xcconfig */, - A8B84461C0AE17B571F25210 /* Pods-RunnerTests.debug.xcconfig */, - 36F8C04D2EB0411ADA50D258 /* Pods-RunnerTests.release.xcconfig */, - 760EB38BCE7B373982137EFF /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; 97C146E51CF9000F007C117D = { isa = PBXGroup; children = ( @@ -136,8 +127,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - 979C260ADDD4EF8BE0C2FB07 /* Pods */, - 7765C30B327B729707FF946C /* Frameworks */, + 4856352D3A596BC21C6FA148 /* Pods */, + A98232C95B2001FA5C3391CE /* Frameworks */, ); sourceTree = ""; }; @@ -165,6 +156,15 @@ path = Runner; sourceTree = ""; }; + A98232C95B2001FA5C3391CE /* Frameworks */ = { + isa = PBXGroup; + children = ( + 08806D17B22EF3C21A38F092 /* Pods_Runner.framework */, + B03D772360D1034B2572877B /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 43635CDE8835859F5B5A334F /* [CP] Check Pods Manifest.lock */, + 2452CEDE6CA3AEBBDEF8AAD3 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - FFDFB7A91DA3CC3FB7D3ED28 /* Frameworks */, + DE0A2B7074F6DCE8A0B0EA9A /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 4EBAC9F11BC6A2553D3C2EB3 /* [CP] Check Pods Manifest.lock */, + 2D8C42768D2C771C76365DA6 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 6E4DA2AD8C24FEE355BEA43C /* [CP] Embed Pods Frameworks */, + C6CDBA5DFB75AE6FE8042136 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -270,23 +270,7 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { - isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", - ); - name = "Thin Binary"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; - }; - 43635CDE8835859F5B5A334F /* [CP] Check Pods Manifest.lock */ = { + 2452CEDE6CA3AEBBDEF8AAD3 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -308,7 +292,7 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 4EBAC9F11BC6A2553D3C2EB3 /* [CP] Check Pods Manifest.lock */ = { + 2D8C42768D2C771C76365DA6 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -330,22 +314,21 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 6E4DA2AD8C24FEE355BEA43C /* [CP] Embed Pods Frameworks */ = { + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + inputPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + name = "Thin Binary"; + outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; @@ -362,6 +345,23 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; + C6CDBA5DFB75AE6FE8042136 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = A8B84461C0AE17B571F25210 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 86E3CE0E2E977F39CDC4B358 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 36F8C04D2EB0411ADA50D258 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = D44D616AE522B55E38A366B2 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 760EB38BCE7B373982137EFF /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 776B7AEAFA1C47BA10114ED8 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/ffigen_codelab/step_03/example/linux/CMakeLists.txt b/ffigen_codelab/step_03/example/linux/CMakeLists.txt index 0225fd0ac0..e6a7756343 100644 --- a/ffigen_codelab/step_03/example/linux/CMakeLists.txt +++ b/ffigen_codelab/step_03/example/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.13) +cmake_minimum_required(VERSION 3.10) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,8 +54,25 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -# Application build; see runner/CMakeLists.txt. -add_subdirectory("runner") +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Define the application target. To change its name, change BINARY_NAME above, +# not the value here, or `flutter run` will no longer work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/ffigen_codelab/step_03/example/linux/runner/main.cc b/ffigen_codelab/step_03/example/linux/main.cc similarity index 100% rename from ffigen_codelab/step_03/example/linux/runner/main.cc rename to ffigen_codelab/step_03/example/linux/main.cc diff --git a/ffigen_codelab/step_06/example/linux/runner/my_application.cc b/ffigen_codelab/step_03/example/linux/my_application.cc similarity index 93% rename from ffigen_codelab/step_06/example/linux/runner/my_application.cc rename to ffigen_codelab/step_03/example/linux/my_application.cc index 6233c3a531..dda095336c 100644 --- a/ffigen_codelab/step_06/example/linux/runner/my_application.cc +++ b/ffigen_codelab/step_03/example/linux/my_application.cc @@ -117,12 +117,6 @@ static void my_application_class_init(MyApplicationClass* klass) { static void my_application_init(MyApplication* self) {} MyApplication* my_application_new() { - // Set the program name to the application ID, which helps various systems - // like GTK and desktop environments map this running application to its - // corresponding .desktop file. This ensures better integration by allowing - // the application to be recognized beyond its binary name. - g_set_prgname(APPLICATION_ID); - return MY_APPLICATION(g_object_new(my_application_get_type(), "application-id", APPLICATION_ID, "flags", G_APPLICATION_NON_UNIQUE, diff --git a/ffigen_codelab/step_03/example/linux/runner/my_application.h b/ffigen_codelab/step_03/example/linux/my_application.h similarity index 100% rename from ffigen_codelab/step_03/example/linux/runner/my_application.h rename to ffigen_codelab/step_03/example/linux/my_application.h diff --git a/ffigen_codelab/step_03/example/linux/runner/CMakeLists.txt b/ffigen_codelab/step_03/example/linux/runner/CMakeLists.txt deleted file mode 100644 index e97dabc702..0000000000 --- a/ffigen_codelab/step_03/example/linux/runner/CMakeLists.txt +++ /dev/null @@ -1,26 +0,0 @@ -cmake_minimum_required(VERSION 3.13) -project(runner LANGUAGES CXX) - -# Define the application target. To change its name, change BINARY_NAME in the -# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer -# work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add preprocessor definitions for the application ID. -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) - -target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/ffigen_codelab/step_03/example/macos/Runner.xcodeproj/project.pbxproj b/ffigen_codelab/step_03/example/macos/Runner.xcodeproj/project.pbxproj index ffdf71b13a..c46af4bc41 100644 --- a/ffigen_codelab/step_03/example/macos/Runner.xcodeproj/project.pbxproj +++ b/ffigen_codelab/step_03/example/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ - 191C21C9FABD3637223435E3 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CD122BD18D351DED3CBE9C58 /* Pods_RunnerTests.framework */; }; + 22A321ADA93F6BE57C8DB371 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6308EF3D68EB994287CCB311 /* Pods_RunnerTests.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 9F7DDDDB746990659C5E51CC /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ED7316D326168056B8E0BF61 /* Pods_Runner.framework */; }; + 6D34367F00C866FA2CD0434B /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 19B85926E300672C928F485E /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,7 +62,7 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 1C0042885A741B0FCD9A30E4 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 19B85926E300672C928F485E /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -79,15 +79,15 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; + 575427019D162B19FF420B51 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 6308EF3D68EB994287CCB311 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; + 7CA36ECAA2AEF85F59D3357E /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 86D133FFF185D5443960DFD4 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 8EAA887323D967C5E5107C4C /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 8F41DA1F04C4782597E80A53 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - 9AEB332B62E5753B98290AE7 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 9BC21DE994A16B5895E402FF /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - C7A4F7E292E04215221DA70F /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - CD122BD18D351DED3CBE9C58 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - D50CDFE9011082D8765687C9 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - ED7316D326168056B8E0BF61 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - FC60D21C0DD8E928760CF13E /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + A55B4566B2B9F1D3890CE08A /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 191C21C9FABD3637223435E3 /* Pods_RunnerTests.framework in Frameworks */, + 22A321ADA93F6BE57C8DB371 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,13 +103,27 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 9F7DDDDB746990659C5E51CC /* Pods_Runner.framework in Frameworks */, + 6D34367F00C866FA2CD0434B /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 16D64D86743EC00FC59F2CDD /* Pods */ = { + isa = PBXGroup; + children = ( + A55B4566B2B9F1D3890CE08A /* Pods-Runner.debug.xcconfig */, + 575427019D162B19FF420B51 /* Pods-Runner.release.xcconfig */, + 8EAA887323D967C5E5107C4C /* Pods-Runner.profile.xcconfig */, + 7CA36ECAA2AEF85F59D3357E /* Pods-RunnerTests.debug.xcconfig */, + 86D133FFF185D5443960DFD4 /* Pods-RunnerTests.release.xcconfig */, + 8F41DA1F04C4782597E80A53 /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; 331C80D6294CF71000263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -137,7 +151,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 80FDF5788B7AFEFFF6BCF906 /* Pods */, + 16D64D86743EC00FC59F2CDD /* Pods */, ); sourceTree = ""; }; @@ -185,25 +199,11 @@ path = Runner; sourceTree = ""; }; - 80FDF5788B7AFEFFF6BCF906 /* Pods */ = { - isa = PBXGroup; - children = ( - 9AEB332B62E5753B98290AE7 /* Pods-Runner.debug.xcconfig */, - C7A4F7E292E04215221DA70F /* Pods-Runner.release.xcconfig */, - 1C0042885A741B0FCD9A30E4 /* Pods-Runner.profile.xcconfig */, - FC60D21C0DD8E928760CF13E /* Pods-RunnerTests.debug.xcconfig */, - D50CDFE9011082D8765687C9 /* Pods-RunnerTests.release.xcconfig */, - 9BC21DE994A16B5895E402FF /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - ED7316D326168056B8E0BF61 /* Pods_Runner.framework */, - CD122BD18D351DED3CBE9C58 /* Pods_RunnerTests.framework */, + 19B85926E300672C928F485E /* Pods_Runner.framework */, + 6308EF3D68EB994287CCB311 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 424F806F1791245CCBFE4273 /* [CP] Check Pods Manifest.lock */, + 3FCD6F6A40D1F341883C2B52 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 2C449A7997ED00E74DA5AF4B /* [CP] Check Pods Manifest.lock */, + 573CACD78CD2526BB9087C8C /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 6A093E120D2D7152871422C7 /* [CP] Embed Pods Frameworks */, + A0D71596DFBA1F193DFBD8AD /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,67 +323,67 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 2C449A7997ED00E74DA5AF4B /* [CP] Check Pods Manifest.lock */ = { + 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", ); - name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; }; - 3399D490228B24CF009A79C7 /* ShellScript */ = { + 33CC111E2044C6BF0003C045 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + Flutter/ephemeral/FlutterInputs.xcfilelist, ); inputPaths = ( + Flutter/ephemeral/tripwire, ); outputFileListPaths = ( + Flutter/ephemeral/FlutterOutputs.xcfilelist, ); outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; + shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 33CC111E2044C6BF0003C045 /* ShellScript */ = { + 3FCD6F6A40D1F341883C2B52 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - Flutter/ephemeral/FlutterInputs.xcfilelist, ); inputPaths = ( - Flutter/ephemeral/tripwire, + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - Flutter/ephemeral/FlutterOutputs.xcfilelist, ); outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - 424F806F1791245CCBFE4273 /* [CP] Check Pods Manifest.lock */ = { + 573CACD78CD2526BB9087C8C /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -398,14 +398,14 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 6A093E120D2D7152871422C7 /* [CP] Embed Pods Frameworks */ = { + A0D71596DFBA1F193DFBD8AD /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = FC60D21C0DD8E928760CF13E /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 7CA36ECAA2AEF85F59D3357E /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = D50CDFE9011082D8765687C9 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 86D133FFF185D5443960DFD4 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 9BC21DE994A16B5895E402FF /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 8F41DA1F04C4782597E80A53 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/ffigen_codelab/step_03/macos/ffigen_app.podspec b/ffigen_codelab/step_03/macos/ffigen_app.podspec index 507dd0a9d3..b03ff8d4d8 100644 --- a/ffigen_codelab/step_03/macos/ffigen_app.podspec +++ b/ffigen_codelab/step_03/macos/ffigen_app.podspec @@ -19,13 +19,6 @@ A new Flutter FFI plugin project. # `../src/*` so that the C sources can be shared among all target platforms. s.source = { :path => '.' } s.source_files = 'Classes/**/*' - - # If your plugin requires a privacy manifest, for example if it collects user - # data, update the PrivacyInfo.xcprivacy file to describe your plugin's - # privacy impact, and then uncomment this line. For more information, - # see https://developer.apple.com/documentation/bundleresources/privacy_manifest_files - # s.resource_bundles = {'ffigen_app_privacy' => ['Resources/PrivacyInfo.xcprivacy']} - s.dependency 'FlutterMacOS' s.platform = :osx, '10.11' diff --git a/ffigen_codelab/step_03/src/CMakeLists.txt b/ffigen_codelab/step_03/src/CMakeLists.txt index 0060b246ab..d2390e362c 100644 --- a/ffigen_codelab/step_03/src/CMakeLists.txt +++ b/ffigen_codelab/step_03/src/CMakeLists.txt @@ -15,8 +15,3 @@ set_target_properties(ffigen_app PROPERTIES ) target_compile_definitions(ffigen_app PUBLIC DART_SHARED_LIB) - -if (ANDROID) - # Support Android 15 16k page size - target_link_options(ffigen_app PRIVATE "-Wl,-z,max-page-size=16384") -endif() diff --git a/ffigen_codelab/step_05/android/build.gradle b/ffigen_codelab/step_05/android/build.gradle index 5681b7125e..09a2474ff1 100644 --- a/ffigen_codelab/step_05/android/build.gradle +++ b/ffigen_codelab/step_05/android/build.gradle @@ -25,7 +25,9 @@ rootProject.allprojects { apply plugin: "com.android.library" android { - namespace = "com.example.ffigen_app" + if (project.android.hasProperty("namespace")) { + namespace = "com.example.ffigen_app" + } // Bumping the plugin compileSdk version requires all clients of this plugin // to bump the version in their app. @@ -53,8 +55,8 @@ android { } compileOptions { - sourceCompatibility = JavaVersion.VERSION_11 - targetCompatibility = JavaVersion.VERSION_11 + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 } defaultConfig { diff --git a/ffigen_codelab/step_05/example/android/gradle.properties b/ffigen_codelab/step_05/example/android/gradle.properties index f018a61817..2597170821 100644 --- a/ffigen_codelab/step_05/example/android/gradle.properties +++ b/ffigen_codelab/step_05/example/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/ffigen_codelab/step_05/example/ios/Runner.xcodeproj/project.pbxproj b/ffigen_codelab/step_05/example/ios/Runner.xcodeproj/project.pbxproj index addb2d9d27..d4a7f84f6f 100644 --- a/ffigen_codelab/step_05/example/ios/Runner.xcodeproj/project.pbxproj +++ b/ffigen_codelab/step_05/example/ios/Runner.xcodeproj/project.pbxproj @@ -14,8 +14,8 @@ 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - E877D048132D3B7EB5F82226 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C2F2CEAC6F6A0C9CB9EDDDFA /* Pods_Runner.framework */; }; - F84DA7186408FE37502DC307 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1F81C7A96749BCF879B4AA0E /* Pods_RunnerTests.framework */; }; + A06930C0B91EF70DA9CE4397 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 08806D17B22EF3C21A38F092 /* Pods_Runner.framework */; }; + D822B98219FD34ACB5EB5698 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B03D772360D1034B2572877B /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,19 +42,20 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 08806D17B22EF3C21A38F092 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 1F81C7A96749BCF879B4AA0E /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 36F8C04D2EB0411ADA50D258 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 3BFA581CCCE704FFCB699F0D /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 4A9018625F52C60DD2AB19A4 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 4311D8E3C3A17D0AEC213B8D /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 6CBCFC22D800681C25E71760 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; - 760EB38BCE7B373982137EFF /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 776B7AEAFA1C47BA10114ED8 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; + 7BAAB17D435C542729E431FD /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 86E3CE0E2E977F39CDC4B358 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -62,9 +63,8 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - A8B84461C0AE17B571F25210 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - B899FC964E4D721CBCF8B32A /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - C2F2CEAC6F6A0C9CB9EDDDFA /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + B03D772360D1034B2572877B /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D44D616AE522B55E38A366B2 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -72,15 +72,15 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - E877D048132D3B7EB5F82226 /* Pods_Runner.framework in Frameworks */, + A06930C0B91EF70DA9CE4397 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - FFDFB7A91DA3CC3FB7D3ED28 /* Frameworks */ = { + DE0A2B7074F6DCE8A0B0EA9A /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - F84DA7186408FE37502DC307 /* Pods_RunnerTests.framework in Frameworks */, + D822B98219FD34ACB5EB5698 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -95,13 +95,18 @@ path = RunnerTests; sourceTree = ""; }; - 7765C30B327B729707FF946C /* Frameworks */ = { + 4856352D3A596BC21C6FA148 /* Pods */ = { isa = PBXGroup; children = ( - C2F2CEAC6F6A0C9CB9EDDDFA /* Pods_Runner.framework */, - 1F81C7A96749BCF879B4AA0E /* Pods_RunnerTests.framework */, + 4311D8E3C3A17D0AEC213B8D /* Pods-Runner.debug.xcconfig */, + 6CBCFC22D800681C25E71760 /* Pods-Runner.release.xcconfig */, + 7BAAB17D435C542729E431FD /* Pods-Runner.profile.xcconfig */, + 86E3CE0E2E977F39CDC4B358 /* Pods-RunnerTests.debug.xcconfig */, + D44D616AE522B55E38A366B2 /* Pods-RunnerTests.release.xcconfig */, + 776B7AEAFA1C47BA10114ED8 /* Pods-RunnerTests.profile.xcconfig */, ); - name = Frameworks; + name = Pods; + path = Pods; sourceTree = ""; }; 9740EEB11CF90186004384FC /* Flutter */ = { @@ -115,20 +120,6 @@ name = Flutter; sourceTree = ""; }; - 979C260ADDD4EF8BE0C2FB07 /* Pods */ = { - isa = PBXGroup; - children = ( - 3BFA581CCCE704FFCB699F0D /* Pods-Runner.debug.xcconfig */, - B899FC964E4D721CBCF8B32A /* Pods-Runner.release.xcconfig */, - 4A9018625F52C60DD2AB19A4 /* Pods-Runner.profile.xcconfig */, - A8B84461C0AE17B571F25210 /* Pods-RunnerTests.debug.xcconfig */, - 36F8C04D2EB0411ADA50D258 /* Pods-RunnerTests.release.xcconfig */, - 760EB38BCE7B373982137EFF /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; 97C146E51CF9000F007C117D = { isa = PBXGroup; children = ( @@ -136,8 +127,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - 979C260ADDD4EF8BE0C2FB07 /* Pods */, - 7765C30B327B729707FF946C /* Frameworks */, + 4856352D3A596BC21C6FA148 /* Pods */, + A98232C95B2001FA5C3391CE /* Frameworks */, ); sourceTree = ""; }; @@ -165,6 +156,15 @@ path = Runner; sourceTree = ""; }; + A98232C95B2001FA5C3391CE /* Frameworks */ = { + isa = PBXGroup; + children = ( + 08806D17B22EF3C21A38F092 /* Pods_Runner.framework */, + B03D772360D1034B2572877B /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 43635CDE8835859F5B5A334F /* [CP] Check Pods Manifest.lock */, + 2452CEDE6CA3AEBBDEF8AAD3 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - FFDFB7A91DA3CC3FB7D3ED28 /* Frameworks */, + DE0A2B7074F6DCE8A0B0EA9A /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 4EBAC9F11BC6A2553D3C2EB3 /* [CP] Check Pods Manifest.lock */, + 2D8C42768D2C771C76365DA6 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 6E4DA2AD8C24FEE355BEA43C /* [CP] Embed Pods Frameworks */, + C6CDBA5DFB75AE6FE8042136 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -270,23 +270,7 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { - isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", - ); - name = "Thin Binary"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; - }; - 43635CDE8835859F5B5A334F /* [CP] Check Pods Manifest.lock */ = { + 2452CEDE6CA3AEBBDEF8AAD3 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -308,7 +292,7 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 4EBAC9F11BC6A2553D3C2EB3 /* [CP] Check Pods Manifest.lock */ = { + 2D8C42768D2C771C76365DA6 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -330,22 +314,21 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 6E4DA2AD8C24FEE355BEA43C /* [CP] Embed Pods Frameworks */ = { + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + inputPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + name = "Thin Binary"; + outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; @@ -362,6 +345,23 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; + C6CDBA5DFB75AE6FE8042136 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = A8B84461C0AE17B571F25210 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 86E3CE0E2E977F39CDC4B358 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 36F8C04D2EB0411ADA50D258 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = D44D616AE522B55E38A366B2 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 760EB38BCE7B373982137EFF /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 776B7AEAFA1C47BA10114ED8 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/ffigen_codelab/step_05/example/linux/CMakeLists.txt b/ffigen_codelab/step_05/example/linux/CMakeLists.txt index 0225fd0ac0..e6a7756343 100644 --- a/ffigen_codelab/step_05/example/linux/CMakeLists.txt +++ b/ffigen_codelab/step_05/example/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.13) +cmake_minimum_required(VERSION 3.10) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,8 +54,25 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -# Application build; see runner/CMakeLists.txt. -add_subdirectory("runner") +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Define the application target. To change its name, change BINARY_NAME above, +# not the value here, or `flutter run` will no longer work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/ffigen_codelab/step_05/example/linux/runner/main.cc b/ffigen_codelab/step_05/example/linux/main.cc similarity index 100% rename from ffigen_codelab/step_05/example/linux/runner/main.cc rename to ffigen_codelab/step_05/example/linux/main.cc diff --git a/ffigen_codelab/step_03/example/linux/runner/my_application.cc b/ffigen_codelab/step_05/example/linux/my_application.cc similarity index 93% rename from ffigen_codelab/step_03/example/linux/runner/my_application.cc rename to ffigen_codelab/step_05/example/linux/my_application.cc index 6233c3a531..dda095336c 100644 --- a/ffigen_codelab/step_03/example/linux/runner/my_application.cc +++ b/ffigen_codelab/step_05/example/linux/my_application.cc @@ -117,12 +117,6 @@ static void my_application_class_init(MyApplicationClass* klass) { static void my_application_init(MyApplication* self) {} MyApplication* my_application_new() { - // Set the program name to the application ID, which helps various systems - // like GTK and desktop environments map this running application to its - // corresponding .desktop file. This ensures better integration by allowing - // the application to be recognized beyond its binary name. - g_set_prgname(APPLICATION_ID); - return MY_APPLICATION(g_object_new(my_application_get_type(), "application-id", APPLICATION_ID, "flags", G_APPLICATION_NON_UNIQUE, diff --git a/ffigen_codelab/step_05/example/linux/runner/my_application.h b/ffigen_codelab/step_05/example/linux/my_application.h similarity index 100% rename from ffigen_codelab/step_05/example/linux/runner/my_application.h rename to ffigen_codelab/step_05/example/linux/my_application.h diff --git a/ffigen_codelab/step_05/example/linux/runner/CMakeLists.txt b/ffigen_codelab/step_05/example/linux/runner/CMakeLists.txt deleted file mode 100644 index e97dabc702..0000000000 --- a/ffigen_codelab/step_05/example/linux/runner/CMakeLists.txt +++ /dev/null @@ -1,26 +0,0 @@ -cmake_minimum_required(VERSION 3.13) -project(runner LANGUAGES CXX) - -# Define the application target. To change its name, change BINARY_NAME in the -# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer -# work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add preprocessor definitions for the application ID. -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) - -target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/ffigen_codelab/step_05/example/macos/Runner.xcodeproj/project.pbxproj b/ffigen_codelab/step_05/example/macos/Runner.xcodeproj/project.pbxproj index ffdf71b13a..c46af4bc41 100644 --- a/ffigen_codelab/step_05/example/macos/Runner.xcodeproj/project.pbxproj +++ b/ffigen_codelab/step_05/example/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ - 191C21C9FABD3637223435E3 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CD122BD18D351DED3CBE9C58 /* Pods_RunnerTests.framework */; }; + 22A321ADA93F6BE57C8DB371 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6308EF3D68EB994287CCB311 /* Pods_RunnerTests.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 9F7DDDDB746990659C5E51CC /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ED7316D326168056B8E0BF61 /* Pods_Runner.framework */; }; + 6D34367F00C866FA2CD0434B /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 19B85926E300672C928F485E /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,7 +62,7 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 1C0042885A741B0FCD9A30E4 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 19B85926E300672C928F485E /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -79,15 +79,15 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; + 575427019D162B19FF420B51 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 6308EF3D68EB994287CCB311 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; + 7CA36ECAA2AEF85F59D3357E /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 86D133FFF185D5443960DFD4 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 8EAA887323D967C5E5107C4C /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 8F41DA1F04C4782597E80A53 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - 9AEB332B62E5753B98290AE7 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 9BC21DE994A16B5895E402FF /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - C7A4F7E292E04215221DA70F /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - CD122BD18D351DED3CBE9C58 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - D50CDFE9011082D8765687C9 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - ED7316D326168056B8E0BF61 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - FC60D21C0DD8E928760CF13E /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + A55B4566B2B9F1D3890CE08A /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 191C21C9FABD3637223435E3 /* Pods_RunnerTests.framework in Frameworks */, + 22A321ADA93F6BE57C8DB371 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,13 +103,27 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 9F7DDDDB746990659C5E51CC /* Pods_Runner.framework in Frameworks */, + 6D34367F00C866FA2CD0434B /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 16D64D86743EC00FC59F2CDD /* Pods */ = { + isa = PBXGroup; + children = ( + A55B4566B2B9F1D3890CE08A /* Pods-Runner.debug.xcconfig */, + 575427019D162B19FF420B51 /* Pods-Runner.release.xcconfig */, + 8EAA887323D967C5E5107C4C /* Pods-Runner.profile.xcconfig */, + 7CA36ECAA2AEF85F59D3357E /* Pods-RunnerTests.debug.xcconfig */, + 86D133FFF185D5443960DFD4 /* Pods-RunnerTests.release.xcconfig */, + 8F41DA1F04C4782597E80A53 /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; 331C80D6294CF71000263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -137,7 +151,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 80FDF5788B7AFEFFF6BCF906 /* Pods */, + 16D64D86743EC00FC59F2CDD /* Pods */, ); sourceTree = ""; }; @@ -185,25 +199,11 @@ path = Runner; sourceTree = ""; }; - 80FDF5788B7AFEFFF6BCF906 /* Pods */ = { - isa = PBXGroup; - children = ( - 9AEB332B62E5753B98290AE7 /* Pods-Runner.debug.xcconfig */, - C7A4F7E292E04215221DA70F /* Pods-Runner.release.xcconfig */, - 1C0042885A741B0FCD9A30E4 /* Pods-Runner.profile.xcconfig */, - FC60D21C0DD8E928760CF13E /* Pods-RunnerTests.debug.xcconfig */, - D50CDFE9011082D8765687C9 /* Pods-RunnerTests.release.xcconfig */, - 9BC21DE994A16B5895E402FF /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - ED7316D326168056B8E0BF61 /* Pods_Runner.framework */, - CD122BD18D351DED3CBE9C58 /* Pods_RunnerTests.framework */, + 19B85926E300672C928F485E /* Pods_Runner.framework */, + 6308EF3D68EB994287CCB311 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 424F806F1791245CCBFE4273 /* [CP] Check Pods Manifest.lock */, + 3FCD6F6A40D1F341883C2B52 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 2C449A7997ED00E74DA5AF4B /* [CP] Check Pods Manifest.lock */, + 573CACD78CD2526BB9087C8C /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 6A093E120D2D7152871422C7 /* [CP] Embed Pods Frameworks */, + A0D71596DFBA1F193DFBD8AD /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,67 +323,67 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 2C449A7997ED00E74DA5AF4B /* [CP] Check Pods Manifest.lock */ = { + 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", ); - name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; }; - 3399D490228B24CF009A79C7 /* ShellScript */ = { + 33CC111E2044C6BF0003C045 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + Flutter/ephemeral/FlutterInputs.xcfilelist, ); inputPaths = ( + Flutter/ephemeral/tripwire, ); outputFileListPaths = ( + Flutter/ephemeral/FlutterOutputs.xcfilelist, ); outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; + shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 33CC111E2044C6BF0003C045 /* ShellScript */ = { + 3FCD6F6A40D1F341883C2B52 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - Flutter/ephemeral/FlutterInputs.xcfilelist, ); inputPaths = ( - Flutter/ephemeral/tripwire, + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - Flutter/ephemeral/FlutterOutputs.xcfilelist, ); outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - 424F806F1791245CCBFE4273 /* [CP] Check Pods Manifest.lock */ = { + 573CACD78CD2526BB9087C8C /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -398,14 +398,14 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 6A093E120D2D7152871422C7 /* [CP] Embed Pods Frameworks */ = { + A0D71596DFBA1F193DFBD8AD /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = FC60D21C0DD8E928760CF13E /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 7CA36ECAA2AEF85F59D3357E /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = D50CDFE9011082D8765687C9 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 86D133FFF185D5443960DFD4 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 9BC21DE994A16B5895E402FF /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 8F41DA1F04C4782597E80A53 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/ffigen_codelab/step_05/macos/ffigen_app.podspec b/ffigen_codelab/step_05/macos/ffigen_app.podspec index 507dd0a9d3..b03ff8d4d8 100644 --- a/ffigen_codelab/step_05/macos/ffigen_app.podspec +++ b/ffigen_codelab/step_05/macos/ffigen_app.podspec @@ -19,13 +19,6 @@ A new Flutter FFI plugin project. # `../src/*` so that the C sources can be shared among all target platforms. s.source = { :path => '.' } s.source_files = 'Classes/**/*' - - # If your plugin requires a privacy manifest, for example if it collects user - # data, update the PrivacyInfo.xcprivacy file to describe your plugin's - # privacy impact, and then uncomment this line. For more information, - # see https://developer.apple.com/documentation/bundleresources/privacy_manifest_files - # s.resource_bundles = {'ffigen_app_privacy' => ['Resources/PrivacyInfo.xcprivacy']} - s.dependency 'FlutterMacOS' s.platform = :osx, '10.11' diff --git a/ffigen_codelab/step_05/src/CMakeLists.txt b/ffigen_codelab/step_05/src/CMakeLists.txt index 176008e445..db7f672be6 100644 --- a/ffigen_codelab/step_05/src/CMakeLists.txt +++ b/ffigen_codelab/step_05/src/CMakeLists.txt @@ -22,8 +22,3 @@ set_target_properties(ffigen_app PROPERTIES endif (WIN32) target_compile_definitions(ffigen_app PUBLIC DART_SHARED_LIB) - -if (ANDROID) - # Support Android 15 16k page size - target_link_options(ffigen_app PRIVATE "-Wl,-z,max-page-size=16384") -endif() diff --git a/ffigen_codelab/step_06/android/build.gradle b/ffigen_codelab/step_06/android/build.gradle index 5681b7125e..09a2474ff1 100644 --- a/ffigen_codelab/step_06/android/build.gradle +++ b/ffigen_codelab/step_06/android/build.gradle @@ -25,7 +25,9 @@ rootProject.allprojects { apply plugin: "com.android.library" android { - namespace = "com.example.ffigen_app" + if (project.android.hasProperty("namespace")) { + namespace = "com.example.ffigen_app" + } // Bumping the plugin compileSdk version requires all clients of this plugin // to bump the version in their app. @@ -53,8 +55,8 @@ android { } compileOptions { - sourceCompatibility = JavaVersion.VERSION_11 - targetCompatibility = JavaVersion.VERSION_11 + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 } defaultConfig { diff --git a/ffigen_codelab/step_06/example/android/gradle.properties b/ffigen_codelab/step_06/example/android/gradle.properties index f018a61817..2597170821 100644 --- a/ffigen_codelab/step_06/example/android/gradle.properties +++ b/ffigen_codelab/step_06/example/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/ffigen_codelab/step_06/example/ios/Runner.xcodeproj/project.pbxproj b/ffigen_codelab/step_06/example/ios/Runner.xcodeproj/project.pbxproj index addb2d9d27..d4a7f84f6f 100644 --- a/ffigen_codelab/step_06/example/ios/Runner.xcodeproj/project.pbxproj +++ b/ffigen_codelab/step_06/example/ios/Runner.xcodeproj/project.pbxproj @@ -14,8 +14,8 @@ 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - E877D048132D3B7EB5F82226 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C2F2CEAC6F6A0C9CB9EDDDFA /* Pods_Runner.framework */; }; - F84DA7186408FE37502DC307 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1F81C7A96749BCF879B4AA0E /* Pods_RunnerTests.framework */; }; + A06930C0B91EF70DA9CE4397 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 08806D17B22EF3C21A38F092 /* Pods_Runner.framework */; }; + D822B98219FD34ACB5EB5698 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B03D772360D1034B2572877B /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,19 +42,20 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 08806D17B22EF3C21A38F092 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 1F81C7A96749BCF879B4AA0E /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 36F8C04D2EB0411ADA50D258 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 3BFA581CCCE704FFCB699F0D /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 4A9018625F52C60DD2AB19A4 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 4311D8E3C3A17D0AEC213B8D /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 6CBCFC22D800681C25E71760 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; - 760EB38BCE7B373982137EFF /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 776B7AEAFA1C47BA10114ED8 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; + 7BAAB17D435C542729E431FD /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 86E3CE0E2E977F39CDC4B358 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -62,9 +63,8 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - A8B84461C0AE17B571F25210 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - B899FC964E4D721CBCF8B32A /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - C2F2CEAC6F6A0C9CB9EDDDFA /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + B03D772360D1034B2572877B /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D44D616AE522B55E38A366B2 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -72,15 +72,15 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - E877D048132D3B7EB5F82226 /* Pods_Runner.framework in Frameworks */, + A06930C0B91EF70DA9CE4397 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - FFDFB7A91DA3CC3FB7D3ED28 /* Frameworks */ = { + DE0A2B7074F6DCE8A0B0EA9A /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - F84DA7186408FE37502DC307 /* Pods_RunnerTests.framework in Frameworks */, + D822B98219FD34ACB5EB5698 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -95,13 +95,18 @@ path = RunnerTests; sourceTree = ""; }; - 7765C30B327B729707FF946C /* Frameworks */ = { + 4856352D3A596BC21C6FA148 /* Pods */ = { isa = PBXGroup; children = ( - C2F2CEAC6F6A0C9CB9EDDDFA /* Pods_Runner.framework */, - 1F81C7A96749BCF879B4AA0E /* Pods_RunnerTests.framework */, + 4311D8E3C3A17D0AEC213B8D /* Pods-Runner.debug.xcconfig */, + 6CBCFC22D800681C25E71760 /* Pods-Runner.release.xcconfig */, + 7BAAB17D435C542729E431FD /* Pods-Runner.profile.xcconfig */, + 86E3CE0E2E977F39CDC4B358 /* Pods-RunnerTests.debug.xcconfig */, + D44D616AE522B55E38A366B2 /* Pods-RunnerTests.release.xcconfig */, + 776B7AEAFA1C47BA10114ED8 /* Pods-RunnerTests.profile.xcconfig */, ); - name = Frameworks; + name = Pods; + path = Pods; sourceTree = ""; }; 9740EEB11CF90186004384FC /* Flutter */ = { @@ -115,20 +120,6 @@ name = Flutter; sourceTree = ""; }; - 979C260ADDD4EF8BE0C2FB07 /* Pods */ = { - isa = PBXGroup; - children = ( - 3BFA581CCCE704FFCB699F0D /* Pods-Runner.debug.xcconfig */, - B899FC964E4D721CBCF8B32A /* Pods-Runner.release.xcconfig */, - 4A9018625F52C60DD2AB19A4 /* Pods-Runner.profile.xcconfig */, - A8B84461C0AE17B571F25210 /* Pods-RunnerTests.debug.xcconfig */, - 36F8C04D2EB0411ADA50D258 /* Pods-RunnerTests.release.xcconfig */, - 760EB38BCE7B373982137EFF /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; 97C146E51CF9000F007C117D = { isa = PBXGroup; children = ( @@ -136,8 +127,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - 979C260ADDD4EF8BE0C2FB07 /* Pods */, - 7765C30B327B729707FF946C /* Frameworks */, + 4856352D3A596BC21C6FA148 /* Pods */, + A98232C95B2001FA5C3391CE /* Frameworks */, ); sourceTree = ""; }; @@ -165,6 +156,15 @@ path = Runner; sourceTree = ""; }; + A98232C95B2001FA5C3391CE /* Frameworks */ = { + isa = PBXGroup; + children = ( + 08806D17B22EF3C21A38F092 /* Pods_Runner.framework */, + B03D772360D1034B2572877B /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 43635CDE8835859F5B5A334F /* [CP] Check Pods Manifest.lock */, + 2452CEDE6CA3AEBBDEF8AAD3 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - FFDFB7A91DA3CC3FB7D3ED28 /* Frameworks */, + DE0A2B7074F6DCE8A0B0EA9A /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 4EBAC9F11BC6A2553D3C2EB3 /* [CP] Check Pods Manifest.lock */, + 2D8C42768D2C771C76365DA6 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 6E4DA2AD8C24FEE355BEA43C /* [CP] Embed Pods Frameworks */, + C6CDBA5DFB75AE6FE8042136 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -270,23 +270,7 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { - isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", - ); - name = "Thin Binary"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; - }; - 43635CDE8835859F5B5A334F /* [CP] Check Pods Manifest.lock */ = { + 2452CEDE6CA3AEBBDEF8AAD3 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -308,7 +292,7 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 4EBAC9F11BC6A2553D3C2EB3 /* [CP] Check Pods Manifest.lock */ = { + 2D8C42768D2C771C76365DA6 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -330,22 +314,21 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 6E4DA2AD8C24FEE355BEA43C /* [CP] Embed Pods Frameworks */ = { + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + inputPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + name = "Thin Binary"; + outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; @@ -362,6 +345,23 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; + C6CDBA5DFB75AE6FE8042136 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = A8B84461C0AE17B571F25210 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 86E3CE0E2E977F39CDC4B358 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 36F8C04D2EB0411ADA50D258 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = D44D616AE522B55E38A366B2 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 760EB38BCE7B373982137EFF /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 776B7AEAFA1C47BA10114ED8 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/ffigen_codelab/step_06/example/linux/CMakeLists.txt b/ffigen_codelab/step_06/example/linux/CMakeLists.txt index 0225fd0ac0..e6a7756343 100644 --- a/ffigen_codelab/step_06/example/linux/CMakeLists.txt +++ b/ffigen_codelab/step_06/example/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.13) +cmake_minimum_required(VERSION 3.10) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,8 +54,25 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -# Application build; see runner/CMakeLists.txt. -add_subdirectory("runner") +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Define the application target. To change its name, change BINARY_NAME above, +# not the value here, or `flutter run` will no longer work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/ffigen_codelab/step_06/example/linux/runner/main.cc b/ffigen_codelab/step_06/example/linux/main.cc similarity index 100% rename from ffigen_codelab/step_06/example/linux/runner/main.cc rename to ffigen_codelab/step_06/example/linux/main.cc diff --git a/ffigen_codelab/step_07/example/linux/runner/my_application.cc b/ffigen_codelab/step_06/example/linux/my_application.cc similarity index 93% rename from ffigen_codelab/step_07/example/linux/runner/my_application.cc rename to ffigen_codelab/step_06/example/linux/my_application.cc index 6233c3a531..dda095336c 100644 --- a/ffigen_codelab/step_07/example/linux/runner/my_application.cc +++ b/ffigen_codelab/step_06/example/linux/my_application.cc @@ -117,12 +117,6 @@ static void my_application_class_init(MyApplicationClass* klass) { static void my_application_init(MyApplication* self) {} MyApplication* my_application_new() { - // Set the program name to the application ID, which helps various systems - // like GTK and desktop environments map this running application to its - // corresponding .desktop file. This ensures better integration by allowing - // the application to be recognized beyond its binary name. - g_set_prgname(APPLICATION_ID); - return MY_APPLICATION(g_object_new(my_application_get_type(), "application-id", APPLICATION_ID, "flags", G_APPLICATION_NON_UNIQUE, diff --git a/ffigen_codelab/step_06/example/linux/runner/my_application.h b/ffigen_codelab/step_06/example/linux/my_application.h similarity index 100% rename from ffigen_codelab/step_06/example/linux/runner/my_application.h rename to ffigen_codelab/step_06/example/linux/my_application.h diff --git a/ffigen_codelab/step_06/example/linux/runner/CMakeLists.txt b/ffigen_codelab/step_06/example/linux/runner/CMakeLists.txt deleted file mode 100644 index e97dabc702..0000000000 --- a/ffigen_codelab/step_06/example/linux/runner/CMakeLists.txt +++ /dev/null @@ -1,26 +0,0 @@ -cmake_minimum_required(VERSION 3.13) -project(runner LANGUAGES CXX) - -# Define the application target. To change its name, change BINARY_NAME in the -# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer -# work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add preprocessor definitions for the application ID. -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) - -target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/ffigen_codelab/step_06/example/macos/Runner.xcodeproj/project.pbxproj b/ffigen_codelab/step_06/example/macos/Runner.xcodeproj/project.pbxproj index ffdf71b13a..c46af4bc41 100644 --- a/ffigen_codelab/step_06/example/macos/Runner.xcodeproj/project.pbxproj +++ b/ffigen_codelab/step_06/example/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ - 191C21C9FABD3637223435E3 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CD122BD18D351DED3CBE9C58 /* Pods_RunnerTests.framework */; }; + 22A321ADA93F6BE57C8DB371 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6308EF3D68EB994287CCB311 /* Pods_RunnerTests.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 9F7DDDDB746990659C5E51CC /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ED7316D326168056B8E0BF61 /* Pods_Runner.framework */; }; + 6D34367F00C866FA2CD0434B /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 19B85926E300672C928F485E /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,7 +62,7 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 1C0042885A741B0FCD9A30E4 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 19B85926E300672C928F485E /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -79,15 +79,15 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; + 575427019D162B19FF420B51 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 6308EF3D68EB994287CCB311 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; + 7CA36ECAA2AEF85F59D3357E /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 86D133FFF185D5443960DFD4 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 8EAA887323D967C5E5107C4C /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 8F41DA1F04C4782597E80A53 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - 9AEB332B62E5753B98290AE7 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 9BC21DE994A16B5895E402FF /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - C7A4F7E292E04215221DA70F /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - CD122BD18D351DED3CBE9C58 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - D50CDFE9011082D8765687C9 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - ED7316D326168056B8E0BF61 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - FC60D21C0DD8E928760CF13E /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + A55B4566B2B9F1D3890CE08A /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 191C21C9FABD3637223435E3 /* Pods_RunnerTests.framework in Frameworks */, + 22A321ADA93F6BE57C8DB371 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,13 +103,27 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 9F7DDDDB746990659C5E51CC /* Pods_Runner.framework in Frameworks */, + 6D34367F00C866FA2CD0434B /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 16D64D86743EC00FC59F2CDD /* Pods */ = { + isa = PBXGroup; + children = ( + A55B4566B2B9F1D3890CE08A /* Pods-Runner.debug.xcconfig */, + 575427019D162B19FF420B51 /* Pods-Runner.release.xcconfig */, + 8EAA887323D967C5E5107C4C /* Pods-Runner.profile.xcconfig */, + 7CA36ECAA2AEF85F59D3357E /* Pods-RunnerTests.debug.xcconfig */, + 86D133FFF185D5443960DFD4 /* Pods-RunnerTests.release.xcconfig */, + 8F41DA1F04C4782597E80A53 /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; 331C80D6294CF71000263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -137,7 +151,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 80FDF5788B7AFEFFF6BCF906 /* Pods */, + 16D64D86743EC00FC59F2CDD /* Pods */, ); sourceTree = ""; }; @@ -185,25 +199,11 @@ path = Runner; sourceTree = ""; }; - 80FDF5788B7AFEFFF6BCF906 /* Pods */ = { - isa = PBXGroup; - children = ( - 9AEB332B62E5753B98290AE7 /* Pods-Runner.debug.xcconfig */, - C7A4F7E292E04215221DA70F /* Pods-Runner.release.xcconfig */, - 1C0042885A741B0FCD9A30E4 /* Pods-Runner.profile.xcconfig */, - FC60D21C0DD8E928760CF13E /* Pods-RunnerTests.debug.xcconfig */, - D50CDFE9011082D8765687C9 /* Pods-RunnerTests.release.xcconfig */, - 9BC21DE994A16B5895E402FF /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - ED7316D326168056B8E0BF61 /* Pods_Runner.framework */, - CD122BD18D351DED3CBE9C58 /* Pods_RunnerTests.framework */, + 19B85926E300672C928F485E /* Pods_Runner.framework */, + 6308EF3D68EB994287CCB311 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 424F806F1791245CCBFE4273 /* [CP] Check Pods Manifest.lock */, + 3FCD6F6A40D1F341883C2B52 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 2C449A7997ED00E74DA5AF4B /* [CP] Check Pods Manifest.lock */, + 573CACD78CD2526BB9087C8C /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 6A093E120D2D7152871422C7 /* [CP] Embed Pods Frameworks */, + A0D71596DFBA1F193DFBD8AD /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,67 +323,67 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 2C449A7997ED00E74DA5AF4B /* [CP] Check Pods Manifest.lock */ = { + 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", ); - name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; }; - 3399D490228B24CF009A79C7 /* ShellScript */ = { + 33CC111E2044C6BF0003C045 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + Flutter/ephemeral/FlutterInputs.xcfilelist, ); inputPaths = ( + Flutter/ephemeral/tripwire, ); outputFileListPaths = ( + Flutter/ephemeral/FlutterOutputs.xcfilelist, ); outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; + shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 33CC111E2044C6BF0003C045 /* ShellScript */ = { + 3FCD6F6A40D1F341883C2B52 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - Flutter/ephemeral/FlutterInputs.xcfilelist, ); inputPaths = ( - Flutter/ephemeral/tripwire, + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - Flutter/ephemeral/FlutterOutputs.xcfilelist, ); outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - 424F806F1791245CCBFE4273 /* [CP] Check Pods Manifest.lock */ = { + 573CACD78CD2526BB9087C8C /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -398,14 +398,14 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 6A093E120D2D7152871422C7 /* [CP] Embed Pods Frameworks */ = { + A0D71596DFBA1F193DFBD8AD /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = FC60D21C0DD8E928760CF13E /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 7CA36ECAA2AEF85F59D3357E /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = D50CDFE9011082D8765687C9 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 86D133FFF185D5443960DFD4 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 9BC21DE994A16B5895E402FF /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 8F41DA1F04C4782597E80A53 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/ffigen_codelab/step_06/macos/ffigen_app.podspec b/ffigen_codelab/step_06/macos/ffigen_app.podspec index 507dd0a9d3..b03ff8d4d8 100644 --- a/ffigen_codelab/step_06/macos/ffigen_app.podspec +++ b/ffigen_codelab/step_06/macos/ffigen_app.podspec @@ -19,13 +19,6 @@ A new Flutter FFI plugin project. # `../src/*` so that the C sources can be shared among all target platforms. s.source = { :path => '.' } s.source_files = 'Classes/**/*' - - # If your plugin requires a privacy manifest, for example if it collects user - # data, update the PrivacyInfo.xcprivacy file to describe your plugin's - # privacy impact, and then uncomment this line. For more information, - # see https://developer.apple.com/documentation/bundleresources/privacy_manifest_files - # s.resource_bundles = {'ffigen_app_privacy' => ['Resources/PrivacyInfo.xcprivacy']} - s.dependency 'FlutterMacOS' s.platform = :osx, '10.11' diff --git a/ffigen_codelab/step_06/src/CMakeLists.txt b/ffigen_codelab/step_06/src/CMakeLists.txt index 176008e445..db7f672be6 100644 --- a/ffigen_codelab/step_06/src/CMakeLists.txt +++ b/ffigen_codelab/step_06/src/CMakeLists.txt @@ -22,8 +22,3 @@ set_target_properties(ffigen_app PROPERTIES endif (WIN32) target_compile_definitions(ffigen_app PUBLIC DART_SHARED_LIB) - -if (ANDROID) - # Support Android 15 16k page size - target_link_options(ffigen_app PRIVATE "-Wl,-z,max-page-size=16384") -endif() diff --git a/ffigen_codelab/step_07/android/build.gradle b/ffigen_codelab/step_07/android/build.gradle index 5681b7125e..09a2474ff1 100644 --- a/ffigen_codelab/step_07/android/build.gradle +++ b/ffigen_codelab/step_07/android/build.gradle @@ -25,7 +25,9 @@ rootProject.allprojects { apply plugin: "com.android.library" android { - namespace = "com.example.ffigen_app" + if (project.android.hasProperty("namespace")) { + namespace = "com.example.ffigen_app" + } // Bumping the plugin compileSdk version requires all clients of this plugin // to bump the version in their app. @@ -53,8 +55,8 @@ android { } compileOptions { - sourceCompatibility = JavaVersion.VERSION_11 - targetCompatibility = JavaVersion.VERSION_11 + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 } defaultConfig { diff --git a/ffigen_codelab/step_07/example/android/gradle.properties b/ffigen_codelab/step_07/example/android/gradle.properties index f018a61817..2597170821 100644 --- a/ffigen_codelab/step_07/example/android/gradle.properties +++ b/ffigen_codelab/step_07/example/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/ffigen_codelab/step_07/example/ios/Runner.xcodeproj/project.pbxproj b/ffigen_codelab/step_07/example/ios/Runner.xcodeproj/project.pbxproj index addb2d9d27..d4a7f84f6f 100644 --- a/ffigen_codelab/step_07/example/ios/Runner.xcodeproj/project.pbxproj +++ b/ffigen_codelab/step_07/example/ios/Runner.xcodeproj/project.pbxproj @@ -14,8 +14,8 @@ 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - E877D048132D3B7EB5F82226 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C2F2CEAC6F6A0C9CB9EDDDFA /* Pods_Runner.framework */; }; - F84DA7186408FE37502DC307 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1F81C7A96749BCF879B4AA0E /* Pods_RunnerTests.framework */; }; + A06930C0B91EF70DA9CE4397 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 08806D17B22EF3C21A38F092 /* Pods_Runner.framework */; }; + D822B98219FD34ACB5EB5698 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B03D772360D1034B2572877B /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,19 +42,20 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 08806D17B22EF3C21A38F092 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 1F81C7A96749BCF879B4AA0E /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 36F8C04D2EB0411ADA50D258 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 3BFA581CCCE704FFCB699F0D /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 4A9018625F52C60DD2AB19A4 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 4311D8E3C3A17D0AEC213B8D /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 6CBCFC22D800681C25E71760 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; - 760EB38BCE7B373982137EFF /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 776B7AEAFA1C47BA10114ED8 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; + 7BAAB17D435C542729E431FD /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 86E3CE0E2E977F39CDC4B358 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -62,9 +63,8 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - A8B84461C0AE17B571F25210 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - B899FC964E4D721CBCF8B32A /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - C2F2CEAC6F6A0C9CB9EDDDFA /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + B03D772360D1034B2572877B /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D44D616AE522B55E38A366B2 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -72,15 +72,15 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - E877D048132D3B7EB5F82226 /* Pods_Runner.framework in Frameworks */, + A06930C0B91EF70DA9CE4397 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - FFDFB7A91DA3CC3FB7D3ED28 /* Frameworks */ = { + DE0A2B7074F6DCE8A0B0EA9A /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - F84DA7186408FE37502DC307 /* Pods_RunnerTests.framework in Frameworks */, + D822B98219FD34ACB5EB5698 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -95,13 +95,18 @@ path = RunnerTests; sourceTree = ""; }; - 7765C30B327B729707FF946C /* Frameworks */ = { + 4856352D3A596BC21C6FA148 /* Pods */ = { isa = PBXGroup; children = ( - C2F2CEAC6F6A0C9CB9EDDDFA /* Pods_Runner.framework */, - 1F81C7A96749BCF879B4AA0E /* Pods_RunnerTests.framework */, + 4311D8E3C3A17D0AEC213B8D /* Pods-Runner.debug.xcconfig */, + 6CBCFC22D800681C25E71760 /* Pods-Runner.release.xcconfig */, + 7BAAB17D435C542729E431FD /* Pods-Runner.profile.xcconfig */, + 86E3CE0E2E977F39CDC4B358 /* Pods-RunnerTests.debug.xcconfig */, + D44D616AE522B55E38A366B2 /* Pods-RunnerTests.release.xcconfig */, + 776B7AEAFA1C47BA10114ED8 /* Pods-RunnerTests.profile.xcconfig */, ); - name = Frameworks; + name = Pods; + path = Pods; sourceTree = ""; }; 9740EEB11CF90186004384FC /* Flutter */ = { @@ -115,20 +120,6 @@ name = Flutter; sourceTree = ""; }; - 979C260ADDD4EF8BE0C2FB07 /* Pods */ = { - isa = PBXGroup; - children = ( - 3BFA581CCCE704FFCB699F0D /* Pods-Runner.debug.xcconfig */, - B899FC964E4D721CBCF8B32A /* Pods-Runner.release.xcconfig */, - 4A9018625F52C60DD2AB19A4 /* Pods-Runner.profile.xcconfig */, - A8B84461C0AE17B571F25210 /* Pods-RunnerTests.debug.xcconfig */, - 36F8C04D2EB0411ADA50D258 /* Pods-RunnerTests.release.xcconfig */, - 760EB38BCE7B373982137EFF /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; 97C146E51CF9000F007C117D = { isa = PBXGroup; children = ( @@ -136,8 +127,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - 979C260ADDD4EF8BE0C2FB07 /* Pods */, - 7765C30B327B729707FF946C /* Frameworks */, + 4856352D3A596BC21C6FA148 /* Pods */, + A98232C95B2001FA5C3391CE /* Frameworks */, ); sourceTree = ""; }; @@ -165,6 +156,15 @@ path = Runner; sourceTree = ""; }; + A98232C95B2001FA5C3391CE /* Frameworks */ = { + isa = PBXGroup; + children = ( + 08806D17B22EF3C21A38F092 /* Pods_Runner.framework */, + B03D772360D1034B2572877B /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 43635CDE8835859F5B5A334F /* [CP] Check Pods Manifest.lock */, + 2452CEDE6CA3AEBBDEF8AAD3 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - FFDFB7A91DA3CC3FB7D3ED28 /* Frameworks */, + DE0A2B7074F6DCE8A0B0EA9A /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 4EBAC9F11BC6A2553D3C2EB3 /* [CP] Check Pods Manifest.lock */, + 2D8C42768D2C771C76365DA6 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 6E4DA2AD8C24FEE355BEA43C /* [CP] Embed Pods Frameworks */, + C6CDBA5DFB75AE6FE8042136 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -270,23 +270,7 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { - isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", - ); - name = "Thin Binary"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; - }; - 43635CDE8835859F5B5A334F /* [CP] Check Pods Manifest.lock */ = { + 2452CEDE6CA3AEBBDEF8AAD3 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -308,7 +292,7 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 4EBAC9F11BC6A2553D3C2EB3 /* [CP] Check Pods Manifest.lock */ = { + 2D8C42768D2C771C76365DA6 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -330,22 +314,21 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 6E4DA2AD8C24FEE355BEA43C /* [CP] Embed Pods Frameworks */ = { + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + inputPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + name = "Thin Binary"; + outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; @@ -362,6 +345,23 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; + C6CDBA5DFB75AE6FE8042136 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = A8B84461C0AE17B571F25210 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 86E3CE0E2E977F39CDC4B358 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 36F8C04D2EB0411ADA50D258 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = D44D616AE522B55E38A366B2 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 760EB38BCE7B373982137EFF /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 776B7AEAFA1C47BA10114ED8 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/ffigen_codelab/step_07/example/linux/CMakeLists.txt b/ffigen_codelab/step_07/example/linux/CMakeLists.txt index 0225fd0ac0..e6a7756343 100644 --- a/ffigen_codelab/step_07/example/linux/CMakeLists.txt +++ b/ffigen_codelab/step_07/example/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.13) +cmake_minimum_required(VERSION 3.10) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,8 +54,25 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -# Application build; see runner/CMakeLists.txt. -add_subdirectory("runner") +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Define the application target. To change its name, change BINARY_NAME above, +# not the value here, or `flutter run` will no longer work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/ffigen_codelab/step_07/example/linux/runner/main.cc b/ffigen_codelab/step_07/example/linux/main.cc similarity index 100% rename from ffigen_codelab/step_07/example/linux/runner/main.cc rename to ffigen_codelab/step_07/example/linux/main.cc diff --git a/ffigen_codelab/step_05/example/linux/runner/my_application.cc b/ffigen_codelab/step_07/example/linux/my_application.cc similarity index 93% rename from ffigen_codelab/step_05/example/linux/runner/my_application.cc rename to ffigen_codelab/step_07/example/linux/my_application.cc index 6233c3a531..dda095336c 100644 --- a/ffigen_codelab/step_05/example/linux/runner/my_application.cc +++ b/ffigen_codelab/step_07/example/linux/my_application.cc @@ -117,12 +117,6 @@ static void my_application_class_init(MyApplicationClass* klass) { static void my_application_init(MyApplication* self) {} MyApplication* my_application_new() { - // Set the program name to the application ID, which helps various systems - // like GTK and desktop environments map this running application to its - // corresponding .desktop file. This ensures better integration by allowing - // the application to be recognized beyond its binary name. - g_set_prgname(APPLICATION_ID); - return MY_APPLICATION(g_object_new(my_application_get_type(), "application-id", APPLICATION_ID, "flags", G_APPLICATION_NON_UNIQUE, diff --git a/ffigen_codelab/step_07/example/linux/runner/my_application.h b/ffigen_codelab/step_07/example/linux/my_application.h similarity index 100% rename from ffigen_codelab/step_07/example/linux/runner/my_application.h rename to ffigen_codelab/step_07/example/linux/my_application.h diff --git a/ffigen_codelab/step_07/example/linux/runner/CMakeLists.txt b/ffigen_codelab/step_07/example/linux/runner/CMakeLists.txt deleted file mode 100644 index e97dabc702..0000000000 --- a/ffigen_codelab/step_07/example/linux/runner/CMakeLists.txt +++ /dev/null @@ -1,26 +0,0 @@ -cmake_minimum_required(VERSION 3.13) -project(runner LANGUAGES CXX) - -# Define the application target. To change its name, change BINARY_NAME in the -# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer -# work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add preprocessor definitions for the application ID. -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) - -target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/ffigen_codelab/step_07/example/macos/Runner.xcodeproj/project.pbxproj b/ffigen_codelab/step_07/example/macos/Runner.xcodeproj/project.pbxproj index ffdf71b13a..c46af4bc41 100644 --- a/ffigen_codelab/step_07/example/macos/Runner.xcodeproj/project.pbxproj +++ b/ffigen_codelab/step_07/example/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ - 191C21C9FABD3637223435E3 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CD122BD18D351DED3CBE9C58 /* Pods_RunnerTests.framework */; }; + 22A321ADA93F6BE57C8DB371 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6308EF3D68EB994287CCB311 /* Pods_RunnerTests.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 9F7DDDDB746990659C5E51CC /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ED7316D326168056B8E0BF61 /* Pods_Runner.framework */; }; + 6D34367F00C866FA2CD0434B /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 19B85926E300672C928F485E /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,7 +62,7 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 1C0042885A741B0FCD9A30E4 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 19B85926E300672C928F485E /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -79,15 +79,15 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; + 575427019D162B19FF420B51 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 6308EF3D68EB994287CCB311 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; + 7CA36ECAA2AEF85F59D3357E /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 86D133FFF185D5443960DFD4 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 8EAA887323D967C5E5107C4C /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 8F41DA1F04C4782597E80A53 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - 9AEB332B62E5753B98290AE7 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 9BC21DE994A16B5895E402FF /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - C7A4F7E292E04215221DA70F /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - CD122BD18D351DED3CBE9C58 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - D50CDFE9011082D8765687C9 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - ED7316D326168056B8E0BF61 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - FC60D21C0DD8E928760CF13E /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + A55B4566B2B9F1D3890CE08A /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 191C21C9FABD3637223435E3 /* Pods_RunnerTests.framework in Frameworks */, + 22A321ADA93F6BE57C8DB371 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,13 +103,27 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 9F7DDDDB746990659C5E51CC /* Pods_Runner.framework in Frameworks */, + 6D34367F00C866FA2CD0434B /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 16D64D86743EC00FC59F2CDD /* Pods */ = { + isa = PBXGroup; + children = ( + A55B4566B2B9F1D3890CE08A /* Pods-Runner.debug.xcconfig */, + 575427019D162B19FF420B51 /* Pods-Runner.release.xcconfig */, + 8EAA887323D967C5E5107C4C /* Pods-Runner.profile.xcconfig */, + 7CA36ECAA2AEF85F59D3357E /* Pods-RunnerTests.debug.xcconfig */, + 86D133FFF185D5443960DFD4 /* Pods-RunnerTests.release.xcconfig */, + 8F41DA1F04C4782597E80A53 /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; 331C80D6294CF71000263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -137,7 +151,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 80FDF5788B7AFEFFF6BCF906 /* Pods */, + 16D64D86743EC00FC59F2CDD /* Pods */, ); sourceTree = ""; }; @@ -185,25 +199,11 @@ path = Runner; sourceTree = ""; }; - 80FDF5788B7AFEFFF6BCF906 /* Pods */ = { - isa = PBXGroup; - children = ( - 9AEB332B62E5753B98290AE7 /* Pods-Runner.debug.xcconfig */, - C7A4F7E292E04215221DA70F /* Pods-Runner.release.xcconfig */, - 1C0042885A741B0FCD9A30E4 /* Pods-Runner.profile.xcconfig */, - FC60D21C0DD8E928760CF13E /* Pods-RunnerTests.debug.xcconfig */, - D50CDFE9011082D8765687C9 /* Pods-RunnerTests.release.xcconfig */, - 9BC21DE994A16B5895E402FF /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - ED7316D326168056B8E0BF61 /* Pods_Runner.framework */, - CD122BD18D351DED3CBE9C58 /* Pods_RunnerTests.framework */, + 19B85926E300672C928F485E /* Pods_Runner.framework */, + 6308EF3D68EB994287CCB311 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 424F806F1791245CCBFE4273 /* [CP] Check Pods Manifest.lock */, + 3FCD6F6A40D1F341883C2B52 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 2C449A7997ED00E74DA5AF4B /* [CP] Check Pods Manifest.lock */, + 573CACD78CD2526BB9087C8C /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 6A093E120D2D7152871422C7 /* [CP] Embed Pods Frameworks */, + A0D71596DFBA1F193DFBD8AD /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,67 +323,67 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 2C449A7997ED00E74DA5AF4B /* [CP] Check Pods Manifest.lock */ = { + 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", ); - name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; }; - 3399D490228B24CF009A79C7 /* ShellScript */ = { + 33CC111E2044C6BF0003C045 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + Flutter/ephemeral/FlutterInputs.xcfilelist, ); inputPaths = ( + Flutter/ephemeral/tripwire, ); outputFileListPaths = ( + Flutter/ephemeral/FlutterOutputs.xcfilelist, ); outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; + shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 33CC111E2044C6BF0003C045 /* ShellScript */ = { + 3FCD6F6A40D1F341883C2B52 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - Flutter/ephemeral/FlutterInputs.xcfilelist, ); inputPaths = ( - Flutter/ephemeral/tripwire, + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - Flutter/ephemeral/FlutterOutputs.xcfilelist, ); outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - 424F806F1791245CCBFE4273 /* [CP] Check Pods Manifest.lock */ = { + 573CACD78CD2526BB9087C8C /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -398,14 +398,14 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 6A093E120D2D7152871422C7 /* [CP] Embed Pods Frameworks */ = { + A0D71596DFBA1F193DFBD8AD /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = FC60D21C0DD8E928760CF13E /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 7CA36ECAA2AEF85F59D3357E /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = D50CDFE9011082D8765687C9 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 86D133FFF185D5443960DFD4 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 9BC21DE994A16B5895E402FF /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 8F41DA1F04C4782597E80A53 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/ffigen_codelab/step_07/macos/ffigen_app.podspec b/ffigen_codelab/step_07/macos/ffigen_app.podspec index 507dd0a9d3..b03ff8d4d8 100644 --- a/ffigen_codelab/step_07/macos/ffigen_app.podspec +++ b/ffigen_codelab/step_07/macos/ffigen_app.podspec @@ -19,13 +19,6 @@ A new Flutter FFI plugin project. # `../src/*` so that the C sources can be shared among all target platforms. s.source = { :path => '.' } s.source_files = 'Classes/**/*' - - # If your plugin requires a privacy manifest, for example if it collects user - # data, update the PrivacyInfo.xcprivacy file to describe your plugin's - # privacy impact, and then uncomment this line. For more information, - # see https://developer.apple.com/documentation/bundleresources/privacy_manifest_files - # s.resource_bundles = {'ffigen_app_privacy' => ['Resources/PrivacyInfo.xcprivacy']} - s.dependency 'FlutterMacOS' s.platform = :osx, '10.11' diff --git a/ffigen_codelab/step_07/src/CMakeLists.txt b/ffigen_codelab/step_07/src/CMakeLists.txt index 176008e445..db7f672be6 100644 --- a/ffigen_codelab/step_07/src/CMakeLists.txt +++ b/ffigen_codelab/step_07/src/CMakeLists.txt @@ -22,8 +22,3 @@ set_target_properties(ffigen_app PROPERTIES endif (WIN32) target_compile_definitions(ffigen_app PUBLIC DART_SHARED_LIB) - -if (ANDROID) - # Support Android 15 16k page size - target_link_options(ffigen_app PRIVATE "-Wl,-z,max-page-size=16384") -endif() From d4702247082c927f6a329f1ba7d0dbf80f957159 Mon Sep 17 00:00:00 2001 From: Brett Morgan Date: Fri, 18 Oct 2024 11:32:47 +1100 Subject: [PATCH 022/108] Update `firebase-emulator-suite` for flutter beta --- firebase-emulator-suite/complete/android/gradle.properties | 2 +- firebase-emulator-suite/complete/pubspec.yaml | 1 + firebase-emulator-suite/complete/web/index.html | 2 +- firebase-emulator-suite/start/android/gradle.properties | 2 +- firebase-emulator-suite/start/pubspec.yaml | 1 + firebase-emulator-suite/start/web/index.html | 2 +- 6 files changed, 6 insertions(+), 4 deletions(-) diff --git a/firebase-emulator-suite/complete/android/gradle.properties b/firebase-emulator-suite/complete/android/gradle.properties index f018a61817..2597170821 100644 --- a/firebase-emulator-suite/complete/android/gradle.properties +++ b/firebase-emulator-suite/complete/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/firebase-emulator-suite/complete/pubspec.yaml b/firebase-emulator-suite/complete/pubspec.yaml index 7c014933f8..48d578a778 100644 --- a/firebase-emulator-suite/complete/pubspec.yaml +++ b/firebase-emulator-suite/complete/pubspec.yaml @@ -31,6 +31,7 @@ dependencies: flutter: sdk: flutter + # The following adds the Cupertino Icons font to your application. # Use with the CupertinoIcons class for iOS style icons. cupertino_icons: ^1.0.8 diff --git a/firebase-emulator-suite/complete/web/index.html b/firebase-emulator-suite/complete/web/index.html index 4a9befb647..628701a38a 100644 --- a/firebase-emulator-suite/complete/web/index.html +++ b/firebase-emulator-suite/complete/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/firebase-emulator-suite/start/android/gradle.properties b/firebase-emulator-suite/start/android/gradle.properties index f018a61817..2597170821 100644 --- a/firebase-emulator-suite/start/android/gradle.properties +++ b/firebase-emulator-suite/start/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/firebase-emulator-suite/start/pubspec.yaml b/firebase-emulator-suite/start/pubspec.yaml index 3d8214e88e..d63d2daa10 100644 --- a/firebase-emulator-suite/start/pubspec.yaml +++ b/firebase-emulator-suite/start/pubspec.yaml @@ -31,6 +31,7 @@ dependencies: flutter: sdk: flutter + # The following adds the Cupertino Icons font to your application. # Use with the CupertinoIcons class for iOS style icons. cupertino_icons: ^1.0.8 diff --git a/firebase-emulator-suite/start/web/index.html b/firebase-emulator-suite/start/web/index.html index 4a9befb647..628701a38a 100644 --- a/firebase-emulator-suite/start/web/index.html +++ b/firebase-emulator-suite/start/web/index.html @@ -21,7 +21,7 @@ - + From cfa0d5a973224e3feaa04868b479c3ae86f88e76 Mon Sep 17 00:00:00 2001 From: Brett Morgan Date: Fri, 18 Oct 2024 16:07:10 +1100 Subject: [PATCH 023/108] Update `firebase-get-to-know-flutter` for flutter beta --- .../codelab_rebuild.yaml | 29 ++-- .../step_02/android/gradle.properties | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 144 +++++++++--------- .../macos/Runner.xcodeproj/project.pbxproj | 96 ++++++++++++ .../contents.xcworkspacedata | 3 + .../step_02/pubspec.yaml | 1 + .../step_02/web/index.html | 2 +- .../step_04/android/gradle.properties | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 144 +++++++++--------- .../macos/Runner.xcodeproj/project.pbxproj | 96 ++++++------ .../step_04/pubspec.yaml | 1 + .../step_04/web/index.html | 2 +- .../step_05/android/gradle.properties | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 144 +++++++++--------- .../macos/Runner.xcodeproj/project.pbxproj | 96 ++++++------ .../step_05/pubspec.yaml | 1 + .../step_05/web/index.html | 2 +- .../step_06/android/gradle.properties | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 144 +++++++++--------- .../macos/Runner.xcodeproj/project.pbxproj | 96 ++++++------ .../step_06/pubspec.yaml | 1 + .../step_06/web/index.html | 2 +- .../step_07/android/gradle.properties | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 144 +++++++++--------- .../macos/Runner.xcodeproj/project.pbxproj | 96 ++++++------ .../step_07/pubspec.yaml | 1 + .../step_07/web/index.html | 2 +- .../step_09/android/gradle.properties | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 144 +++++++++--------- .../macos/Runner.xcodeproj/project.pbxproj | 96 ++++++------ .../step_09/pubspec.yaml | 1 + .../step_09/web/index.html | 2 +- 32 files changed, 802 insertions(+), 700 deletions(-) diff --git a/firebase-get-to-know-flutter/codelab_rebuild.yaml b/firebase-get-to-know-flutter/codelab_rebuild.yaml index ce660acc5e..3d101f18ff 100644 --- a/firebase-get-to-know-flutter/codelab_rebuild.yaml +++ b/firebase-get-to-know-flutter/codelab_rebuild.yaml @@ -32,7 +32,7 @@ steps: # The following line prevents the package from being accidentally published to # pub.dev using `flutter pub publish`. This is preferred for private packages. publish_to: 'none' # Remove this line if you wish to publish to pub.dev - @@ -58,6 +59,8 @@ flutter: + @@ -59,6 +60,8 @@ flutter: # included with your application, so that you can use the icons in # the material Icons class. uses-material-design: true @@ -1699,11 +1699,10 @@ steps: platforms: [ macos ] path: gtk_flutter flutter: build apk - # TODO: Re-enable once macOS Firebase configuration builds - # - name: Build for macOS - # platforms: [ macos ] - # path: gtk_flutter - # flutter: build macos --debug + - name: Build for macOS + platforms: [ macos ] + path: gtk_flutter + flutter: build macos --debug - name: Copy step_02 copydir: from: gtk_flutter @@ -1825,11 +1824,10 @@ steps: platforms: [ macos ] path: gtk_flutter flutter: build apk - # TODO: Re-enable once macOS Firebase configuration builds - # - name: Build for macOS - # platforms: [ macos ] - # path: gtk_flutter - # flutter: build macos --debug + - name: Build for macOS + platforms: [ macos ] + path: gtk_flutter + flutter: build macos --debug - name: Copy step_04 copydir: from: gtk_flutter @@ -2834,11 +2832,10 @@ steps: platforms: [ macos ] path: gtk_flutter flutter: build apk - # TODO: Re-enable once macOS Firebase configuration builds - # - name: Build for macOS - # platforms: [ macos ] - # path: gtk_flutter - # flutter: build macos --debug + - name: Build for macOS + platforms: [ macos ] + path: gtk_flutter + flutter: build macos --debug - name: Build for iOS platforms: [ macos ] path: gtk_flutter diff --git a/firebase-get-to-know-flutter/step_02/android/gradle.properties b/firebase-get-to-know-flutter/step_02/android/gradle.properties index f018a61817..2597170821 100644 --- a/firebase-get-to-know-flutter/step_02/android/gradle.properties +++ b/firebase-get-to-know-flutter/step_02/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/firebase-get-to-know-flutter/step_02/ios/Runner.xcodeproj/project.pbxproj b/firebase-get-to-know-flutter/step_02/ios/Runner.xcodeproj/project.pbxproj index 1fec3b176b..f55a47cb43 100644 --- a/firebase-get-to-know-flutter/step_02/ios/Runner.xcodeproj/project.pbxproj +++ b/firebase-get-to-know-flutter/step_02/ios/Runner.xcodeproj/project.pbxproj @@ -10,12 +10,12 @@ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; - 48F92C47F6785B74B10426B6 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 67399F5529C4A8216833DD0F /* Pods_Runner.framework */; }; - 55A8A58D691856D8A8E2F81B /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 744A688AA80D90AEFEEE8B5D /* Pods_RunnerTests.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; + 94424699B3A14C2982732B02 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6B9BB003A54B638618107ADC /* Pods_Runner.framework */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; + EB6293D774039F2596010319 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4DE10BC9E8056DBF9301BFB3 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,20 +42,20 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 11FB88AA8219013083C1A563 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 41F4E541C0B0FF23D9DA5C04 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - 67399F5529C4A8216833DD0F /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 744A688AA80D90AEFEEE8B5D /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 44A86022FD4B88620A074AD6 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 458E75D9DD87189355FF674B /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 4DE10BC9E8056DBF9301BFB3 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 6B9BB003A54B638618107ADC /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 822914433177537C9D4A073F /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 8C22EFD2575ACEF2BA9301A3 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 91F97278880AEE3F91F1B85F /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 95BD23190F06780AFA8F708F /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -63,8 +63,8 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - A219FA1BA4AD7A0CCE184560 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - B37F3F7BA1352CC58F5B42CE /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + C106B318B7E4C757686D82A4 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + C4C4C0A87AC28ABBD674D966 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -72,50 +72,50 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 48F92C47F6785B74B10426B6 /* Pods_Runner.framework in Frameworks */, + 94424699B3A14C2982732B02 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - BA3F021047083BC8B18D3E0D /* Frameworks */ = { + C59F8CC1D73F354D282AD010 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 55A8A58D691856D8A8E2F81B /* Pods_RunnerTests.framework in Frameworks */, + EB6293D774039F2596010319 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 2686497132B27AC72C49AAEC /* Pods */ = { + 331C8082294A63A400263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( - B37F3F7BA1352CC58F5B42CE /* Pods-Runner.debug.xcconfig */, - 822914433177537C9D4A073F /* Pods-Runner.release.xcconfig */, - 8C22EFD2575ACEF2BA9301A3 /* Pods-Runner.profile.xcconfig */, - A219FA1BA4AD7A0CCE184560 /* Pods-RunnerTests.debug.xcconfig */, - 41F4E541C0B0FF23D9DA5C04 /* Pods-RunnerTests.release.xcconfig */, - 11FB88AA8219013083C1A563 /* Pods-RunnerTests.profile.xcconfig */, + 331C807B294A618700263BE5 /* RunnerTests.swift */, ); - name = Pods; - path = Pods; + path = RunnerTests; sourceTree = ""; }; - 331C8082294A63A400263BE5 /* RunnerTests */ = { + 61F983CEA43E1634EC9BD97C /* Frameworks */ = { isa = PBXGroup; children = ( - 331C807B294A618700263BE5 /* RunnerTests.swift */, + 6B9BB003A54B638618107ADC /* Pods_Runner.framework */, + 4DE10BC9E8056DBF9301BFB3 /* Pods_RunnerTests.framework */, ); - path = RunnerTests; + name = Frameworks; sourceTree = ""; }; - 561A1CA3EA2AB9F0AF534DA6 /* Frameworks */ = { + 7D07664DF19CED6C7E7482CF /* Pods */ = { isa = PBXGroup; children = ( - 67399F5529C4A8216833DD0F /* Pods_Runner.framework */, - 744A688AA80D90AEFEEE8B5D /* Pods_RunnerTests.framework */, + C4C4C0A87AC28ABBD674D966 /* Pods-Runner.debug.xcconfig */, + 458E75D9DD87189355FF674B /* Pods-Runner.release.xcconfig */, + 44A86022FD4B88620A074AD6 /* Pods-Runner.profile.xcconfig */, + 95BD23190F06780AFA8F708F /* Pods-RunnerTests.debug.xcconfig */, + 91F97278880AEE3F91F1B85F /* Pods-RunnerTests.release.xcconfig */, + C106B318B7E4C757686D82A4 /* Pods-RunnerTests.profile.xcconfig */, ); - name = Frameworks; + name = Pods; + path = Pods; sourceTree = ""; }; 9740EEB11CF90186004384FC /* Flutter */ = { @@ -136,8 +136,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - 2686497132B27AC72C49AAEC /* Pods */, - 561A1CA3EA2AB9F0AF534DA6 /* Frameworks */, + 7D07664DF19CED6C7E7482CF /* Pods */, + 61F983CEA43E1634EC9BD97C /* Frameworks */, ); sourceTree = ""; }; @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - A14A71C6D96CA2EED75B677B /* [CP] Check Pods Manifest.lock */, + 280BA5287C63B597F9749D8E /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - BA3F021047083BC8B18D3E0D /* Frameworks */, + C59F8CC1D73F354D282AD010 /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - FB86AE7D40B4243F86145360 /* [CP] Check Pods Manifest.lock */, + 13C8762D11FCF7A1D54D3CC7 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 69881ECA2F74BD08FB925BC2 /* [CP] Embed Pods Frameworks */, + 4D7CADDC4DF6943F118206BD /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -270,97 +270,97 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + 13C8762D11FCF7A1D54D3CC7 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( - "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "Thin Binary"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - 69881ECA2F74BD08FB925BC2 /* [CP] Embed Pods Frameworks */ = { + 280BA5287C63B597F9749D8E /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); - name = "Run Script"; + name = "Thin Binary"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - A14A71C6D96CA2EED75B677B /* [CP] Check Pods Manifest.lock */ = { + 4D7CADDC4DF6943F118206BD /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - FB86AE7D40B4243F86145360 /* [CP] Check Pods Manifest.lock */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( ); + name = "Run Script"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; /* End PBXShellScriptBuildPhase section */ @@ -488,7 +488,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = A219FA1BA4AD7A0CCE184560 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 95BD23190F06780AFA8F708F /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -507,7 +507,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 41F4E541C0B0FF23D9DA5C04 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 91F97278880AEE3F91F1B85F /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -524,7 +524,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 11FB88AA8219013083C1A563 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = C106B318B7E4C757686D82A4 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/firebase-get-to-know-flutter/step_02/macos/Runner.xcodeproj/project.pbxproj b/firebase-get-to-know-flutter/step_02/macos/Runner.xcodeproj/project.pbxproj index d5358edb24..61d0d1b080 100644 --- a/firebase-get-to-know-flutter/step_02/macos/Runner.xcodeproj/project.pbxproj +++ b/firebase-get-to-know-flutter/step_02/macos/Runner.xcodeproj/project.pbxproj @@ -21,12 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ + 128B8F8A6B5C6CF14D6E0342 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4D5B5999B70200B3809C6D01 /* Pods_RunnerTests.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; + 4A2FD2A9AD946C2E174286CE /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 90F1F021E64641C89665DD10 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -60,6 +62,7 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 1C25B3513592ABFAAB2831E2 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -76,8 +79,15 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; + 4D5B5999B70200B3809C6D01 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 563FAA1D5896D8E471921C79 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; + 90F1F021E64641C89665DD10 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 95D0AE963ADC3E494A4D37F0 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; + A2FFC262C51DDC226C58343C /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + BEA42C2E42664EC2D5EA8594 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + F22AA56F8A11105EB865C7C0 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -85,6 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 128B8F8A6B5C6CF14D6E0342 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -92,6 +103,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 4A2FD2A9AD946C2E174286CE /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -125,6 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, + E51BE6CEB1BDEEEF7114DDF8 /* Pods */, ); sourceTree = ""; }; @@ -175,10 +188,26 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( + 90F1F021E64641C89665DD10 /* Pods_Runner.framework */, + 4D5B5999B70200B3809C6D01 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; }; + E51BE6CEB1BDEEEF7114DDF8 /* Pods */ = { + isa = PBXGroup; + children = ( + 563FAA1D5896D8E471921C79 /* Pods-Runner.debug.xcconfig */, + A2FFC262C51DDC226C58343C /* Pods-Runner.release.xcconfig */, + 1C25B3513592ABFAAB2831E2 /* Pods-Runner.profile.xcconfig */, + BEA42C2E42664EC2D5EA8594 /* Pods-RunnerTests.debug.xcconfig */, + F22AA56F8A11105EB865C7C0 /* Pods-RunnerTests.release.xcconfig */, + 95D0AE963ADC3E494A4D37F0 /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -186,6 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( + 6C13E7904DC3004B41332335 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -204,11 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( + 0F9D9D66708D755567BE1F99 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, + D82041256BE3E1863C6F9760 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -291,6 +323,28 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ + 0F9D9D66708D755567BE1F99 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -329,6 +383,45 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; + 6C13E7904DC3004B41332335 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; + D82041256BE3E1863C6F9760 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -380,6 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; + baseConfigurationReference = BEA42C2E42664EC2D5EA8594 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -395,6 +489,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; + baseConfigurationReference = F22AA56F8A11105EB865C7C0 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -410,6 +505,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; + baseConfigurationReference = 95D0AE963ADC3E494A4D37F0 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/firebase-get-to-know-flutter/step_02/macos/Runner.xcworkspace/contents.xcworkspacedata b/firebase-get-to-know-flutter/step_02/macos/Runner.xcworkspace/contents.xcworkspacedata index 1d526a16ed..21a3cc14c7 100644 --- a/firebase-get-to-know-flutter/step_02/macos/Runner.xcworkspace/contents.xcworkspacedata +++ b/firebase-get-to-know-flutter/step_02/macos/Runner.xcworkspace/contents.xcworkspacedata @@ -4,4 +4,7 @@ + + diff --git a/firebase-get-to-know-flutter/step_02/pubspec.yaml b/firebase-get-to-know-flutter/step_02/pubspec.yaml index 994a835cf6..9fbdc07dbe 100644 --- a/firebase-get-to-know-flutter/step_02/pubspec.yaml +++ b/firebase-get-to-know-flutter/step_02/pubspec.yaml @@ -32,6 +32,7 @@ dependencies: flutter: sdk: flutter + # The following adds the Cupertino Icons font to your application. # Use with the CupertinoIcons class for iOS style icons. cupertino_icons: ^1.0.8 diff --git a/firebase-get-to-know-flutter/step_02/web/index.html b/firebase-get-to-know-flutter/step_02/web/index.html index ec3bcd0112..92f64576d8 100644 --- a/firebase-get-to-know-flutter/step_02/web/index.html +++ b/firebase-get-to-know-flutter/step_02/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/firebase-get-to-know-flutter/step_04/android/gradle.properties b/firebase-get-to-know-flutter/step_04/android/gradle.properties index f018a61817..2597170821 100644 --- a/firebase-get-to-know-flutter/step_04/android/gradle.properties +++ b/firebase-get-to-know-flutter/step_04/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/firebase-get-to-know-flutter/step_04/ios/Runner.xcodeproj/project.pbxproj b/firebase-get-to-know-flutter/step_04/ios/Runner.xcodeproj/project.pbxproj index 1fec3b176b..f55a47cb43 100644 --- a/firebase-get-to-know-flutter/step_04/ios/Runner.xcodeproj/project.pbxproj +++ b/firebase-get-to-know-flutter/step_04/ios/Runner.xcodeproj/project.pbxproj @@ -10,12 +10,12 @@ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; - 48F92C47F6785B74B10426B6 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 67399F5529C4A8216833DD0F /* Pods_Runner.framework */; }; - 55A8A58D691856D8A8E2F81B /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 744A688AA80D90AEFEEE8B5D /* Pods_RunnerTests.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; + 94424699B3A14C2982732B02 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6B9BB003A54B638618107ADC /* Pods_Runner.framework */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; + EB6293D774039F2596010319 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4DE10BC9E8056DBF9301BFB3 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,20 +42,20 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 11FB88AA8219013083C1A563 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 41F4E541C0B0FF23D9DA5C04 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - 67399F5529C4A8216833DD0F /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 744A688AA80D90AEFEEE8B5D /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 44A86022FD4B88620A074AD6 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 458E75D9DD87189355FF674B /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 4DE10BC9E8056DBF9301BFB3 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 6B9BB003A54B638618107ADC /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 822914433177537C9D4A073F /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 8C22EFD2575ACEF2BA9301A3 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 91F97278880AEE3F91F1B85F /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 95BD23190F06780AFA8F708F /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -63,8 +63,8 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - A219FA1BA4AD7A0CCE184560 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - B37F3F7BA1352CC58F5B42CE /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + C106B318B7E4C757686D82A4 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + C4C4C0A87AC28ABBD674D966 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -72,50 +72,50 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 48F92C47F6785B74B10426B6 /* Pods_Runner.framework in Frameworks */, + 94424699B3A14C2982732B02 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - BA3F021047083BC8B18D3E0D /* Frameworks */ = { + C59F8CC1D73F354D282AD010 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 55A8A58D691856D8A8E2F81B /* Pods_RunnerTests.framework in Frameworks */, + EB6293D774039F2596010319 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 2686497132B27AC72C49AAEC /* Pods */ = { + 331C8082294A63A400263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( - B37F3F7BA1352CC58F5B42CE /* Pods-Runner.debug.xcconfig */, - 822914433177537C9D4A073F /* Pods-Runner.release.xcconfig */, - 8C22EFD2575ACEF2BA9301A3 /* Pods-Runner.profile.xcconfig */, - A219FA1BA4AD7A0CCE184560 /* Pods-RunnerTests.debug.xcconfig */, - 41F4E541C0B0FF23D9DA5C04 /* Pods-RunnerTests.release.xcconfig */, - 11FB88AA8219013083C1A563 /* Pods-RunnerTests.profile.xcconfig */, + 331C807B294A618700263BE5 /* RunnerTests.swift */, ); - name = Pods; - path = Pods; + path = RunnerTests; sourceTree = ""; }; - 331C8082294A63A400263BE5 /* RunnerTests */ = { + 61F983CEA43E1634EC9BD97C /* Frameworks */ = { isa = PBXGroup; children = ( - 331C807B294A618700263BE5 /* RunnerTests.swift */, + 6B9BB003A54B638618107ADC /* Pods_Runner.framework */, + 4DE10BC9E8056DBF9301BFB3 /* Pods_RunnerTests.framework */, ); - path = RunnerTests; + name = Frameworks; sourceTree = ""; }; - 561A1CA3EA2AB9F0AF534DA6 /* Frameworks */ = { + 7D07664DF19CED6C7E7482CF /* Pods */ = { isa = PBXGroup; children = ( - 67399F5529C4A8216833DD0F /* Pods_Runner.framework */, - 744A688AA80D90AEFEEE8B5D /* Pods_RunnerTests.framework */, + C4C4C0A87AC28ABBD674D966 /* Pods-Runner.debug.xcconfig */, + 458E75D9DD87189355FF674B /* Pods-Runner.release.xcconfig */, + 44A86022FD4B88620A074AD6 /* Pods-Runner.profile.xcconfig */, + 95BD23190F06780AFA8F708F /* Pods-RunnerTests.debug.xcconfig */, + 91F97278880AEE3F91F1B85F /* Pods-RunnerTests.release.xcconfig */, + C106B318B7E4C757686D82A4 /* Pods-RunnerTests.profile.xcconfig */, ); - name = Frameworks; + name = Pods; + path = Pods; sourceTree = ""; }; 9740EEB11CF90186004384FC /* Flutter */ = { @@ -136,8 +136,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - 2686497132B27AC72C49AAEC /* Pods */, - 561A1CA3EA2AB9F0AF534DA6 /* Frameworks */, + 7D07664DF19CED6C7E7482CF /* Pods */, + 61F983CEA43E1634EC9BD97C /* Frameworks */, ); sourceTree = ""; }; @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - A14A71C6D96CA2EED75B677B /* [CP] Check Pods Manifest.lock */, + 280BA5287C63B597F9749D8E /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - BA3F021047083BC8B18D3E0D /* Frameworks */, + C59F8CC1D73F354D282AD010 /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - FB86AE7D40B4243F86145360 /* [CP] Check Pods Manifest.lock */, + 13C8762D11FCF7A1D54D3CC7 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 69881ECA2F74BD08FB925BC2 /* [CP] Embed Pods Frameworks */, + 4D7CADDC4DF6943F118206BD /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -270,97 +270,97 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + 13C8762D11FCF7A1D54D3CC7 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( - "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "Thin Binary"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - 69881ECA2F74BD08FB925BC2 /* [CP] Embed Pods Frameworks */ = { + 280BA5287C63B597F9749D8E /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); - name = "Run Script"; + name = "Thin Binary"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - A14A71C6D96CA2EED75B677B /* [CP] Check Pods Manifest.lock */ = { + 4D7CADDC4DF6943F118206BD /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - FB86AE7D40B4243F86145360 /* [CP] Check Pods Manifest.lock */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( ); + name = "Run Script"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; /* End PBXShellScriptBuildPhase section */ @@ -488,7 +488,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = A219FA1BA4AD7A0CCE184560 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 95BD23190F06780AFA8F708F /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -507,7 +507,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 41F4E541C0B0FF23D9DA5C04 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 91F97278880AEE3F91F1B85F /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -524,7 +524,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 11FB88AA8219013083C1A563 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = C106B318B7E4C757686D82A4 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/firebase-get-to-know-flutter/step_04/macos/Runner.xcodeproj/project.pbxproj b/firebase-get-to-know-flutter/step_04/macos/Runner.xcodeproj/project.pbxproj index a8d91af57e..61d0d1b080 100644 --- a/firebase-get-to-know-flutter/step_04/macos/Runner.xcodeproj/project.pbxproj +++ b/firebase-get-to-know-flutter/step_04/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ - 28823A3C182EE12E8A57E818 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8DE94FCB4C93C934DB82ED0C /* Pods_Runner.framework */; }; + 128B8F8A6B5C6CF14D6E0342 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4D5B5999B70200B3809C6D01 /* Pods_RunnerTests.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - A5ADD6B5904AA82515194D84 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AB709786B7AC18EE740D5375 /* Pods_RunnerTests.framework */; }; + 4A2FD2A9AD946C2E174286CE /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 90F1F021E64641C89665DD10 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,7 +62,7 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 18B4AB14ED0B2BC5C115306D /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 1C25B3513592ABFAAB2831E2 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -79,15 +79,15 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 4086F8438660B0B0FA223108 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - 5E0D4E06649BF28D8D882A8B /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 64B67A849939B632D038250B /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 4D5B5999B70200B3809C6D01 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 563FAA1D5896D8E471921C79 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 8DE94FCB4C93C934DB82ED0C /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 90F1F021E64641C89665DD10 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 95D0AE963ADC3E494A4D37F0 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - A224E642823E0216BF12C1D3 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - AB709786B7AC18EE740D5375 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - EB8947F87314B3A353FCF67C /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + A2FFC262C51DDC226C58343C /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + BEA42C2E42664EC2D5EA8594 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + F22AA56F8A11105EB865C7C0 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - A5ADD6B5904AA82515194D84 /* Pods_RunnerTests.framework in Frameworks */, + 128B8F8A6B5C6CF14D6E0342 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,7 +103,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 28823A3C182EE12E8A57E818 /* Pods_Runner.framework in Frameworks */, + 4A2FD2A9AD946C2E174286CE /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -137,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 82C11B689FF0D3F4BA2C6780 /* Pods */, + E51BE6CEB1BDEEEF7114DDF8 /* Pods */, ); sourceTree = ""; }; @@ -185,27 +185,27 @@ path = Runner; sourceTree = ""; }; - 82C11B689FF0D3F4BA2C6780 /* Pods */ = { + D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - 5E0D4E06649BF28D8D882A8B /* Pods-Runner.debug.xcconfig */, - 18B4AB14ED0B2BC5C115306D /* Pods-Runner.release.xcconfig */, - 64B67A849939B632D038250B /* Pods-Runner.profile.xcconfig */, - EB8947F87314B3A353FCF67C /* Pods-RunnerTests.debug.xcconfig */, - A224E642823E0216BF12C1D3 /* Pods-RunnerTests.release.xcconfig */, - 4086F8438660B0B0FA223108 /* Pods-RunnerTests.profile.xcconfig */, + 90F1F021E64641C89665DD10 /* Pods_Runner.framework */, + 4D5B5999B70200B3809C6D01 /* Pods_RunnerTests.framework */, ); - name = Pods; - path = Pods; + name = Frameworks; sourceTree = ""; }; - D73912EC22F37F3D000D13A0 /* Frameworks */ = { + E51BE6CEB1BDEEEF7114DDF8 /* Pods */ = { isa = PBXGroup; children = ( - 8DE94FCB4C93C934DB82ED0C /* Pods_Runner.framework */, - AB709786B7AC18EE740D5375 /* Pods_RunnerTests.framework */, + 563FAA1D5896D8E471921C79 /* Pods-Runner.debug.xcconfig */, + A2FFC262C51DDC226C58343C /* Pods-Runner.release.xcconfig */, + 1C25B3513592ABFAAB2831E2 /* Pods-Runner.profile.xcconfig */, + BEA42C2E42664EC2D5EA8594 /* Pods-RunnerTests.debug.xcconfig */, + F22AA56F8A11105EB865C7C0 /* Pods-RunnerTests.release.xcconfig */, + 95D0AE963ADC3E494A4D37F0 /* Pods-RunnerTests.profile.xcconfig */, ); - name = Frameworks; + name = Pods; + path = Pods; sourceTree = ""; }; /* End PBXGroup section */ @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - F3CEA25B7E77975C7E78773F /* [CP] Check Pods Manifest.lock */, + 6C13E7904DC3004B41332335 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 2A85CCABAD294FADC367351F /* [CP] Check Pods Manifest.lock */, + 0F9D9D66708D755567BE1F99 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 79EEF1D7B56626FC53E21766 /* [CP] Embed Pods Frameworks */, + D82041256BE3E1863C6F9760 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,7 +323,7 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 2A85CCABAD294FADC367351F /* [CP] Check Pods Manifest.lock */ = { + 0F9D9D66708D755567BE1F99 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -383,43 +383,43 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 79EEF1D7B56626FC53E21766 /* [CP] Embed Pods Frameworks */ = { + 6C13E7904DC3004B41332335 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - F3CEA25B7E77975C7E78773F /* [CP] Check Pods Manifest.lock */ = { + D82041256BE3E1863C6F9760 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = EB8947F87314B3A353FCF67C /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = BEA42C2E42664EC2D5EA8594 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -489,7 +489,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = A224E642823E0216BF12C1D3 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = F22AA56F8A11105EB865C7C0 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -505,7 +505,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 4086F8438660B0B0FA223108 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 95D0AE963ADC3E494A4D37F0 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/firebase-get-to-know-flutter/step_04/pubspec.yaml b/firebase-get-to-know-flutter/step_04/pubspec.yaml index 7a39a8a411..5a192dd65c 100644 --- a/firebase-get-to-know-flutter/step_04/pubspec.yaml +++ b/firebase-get-to-know-flutter/step_04/pubspec.yaml @@ -32,6 +32,7 @@ dependencies: flutter: sdk: flutter + # The following adds the Cupertino Icons font to your application. # Use with the CupertinoIcons class for iOS style icons. cupertino_icons: ^1.0.8 diff --git a/firebase-get-to-know-flutter/step_04/web/index.html b/firebase-get-to-know-flutter/step_04/web/index.html index ec3bcd0112..92f64576d8 100644 --- a/firebase-get-to-know-flutter/step_04/web/index.html +++ b/firebase-get-to-know-flutter/step_04/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/firebase-get-to-know-flutter/step_05/android/gradle.properties b/firebase-get-to-know-flutter/step_05/android/gradle.properties index f018a61817..2597170821 100644 --- a/firebase-get-to-know-flutter/step_05/android/gradle.properties +++ b/firebase-get-to-know-flutter/step_05/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/firebase-get-to-know-flutter/step_05/ios/Runner.xcodeproj/project.pbxproj b/firebase-get-to-know-flutter/step_05/ios/Runner.xcodeproj/project.pbxproj index 1fec3b176b..f55a47cb43 100644 --- a/firebase-get-to-know-flutter/step_05/ios/Runner.xcodeproj/project.pbxproj +++ b/firebase-get-to-know-flutter/step_05/ios/Runner.xcodeproj/project.pbxproj @@ -10,12 +10,12 @@ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; - 48F92C47F6785B74B10426B6 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 67399F5529C4A8216833DD0F /* Pods_Runner.framework */; }; - 55A8A58D691856D8A8E2F81B /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 744A688AA80D90AEFEEE8B5D /* Pods_RunnerTests.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; + 94424699B3A14C2982732B02 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6B9BB003A54B638618107ADC /* Pods_Runner.framework */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; + EB6293D774039F2596010319 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4DE10BC9E8056DBF9301BFB3 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,20 +42,20 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 11FB88AA8219013083C1A563 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 41F4E541C0B0FF23D9DA5C04 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - 67399F5529C4A8216833DD0F /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 744A688AA80D90AEFEEE8B5D /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 44A86022FD4B88620A074AD6 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 458E75D9DD87189355FF674B /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 4DE10BC9E8056DBF9301BFB3 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 6B9BB003A54B638618107ADC /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 822914433177537C9D4A073F /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 8C22EFD2575ACEF2BA9301A3 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 91F97278880AEE3F91F1B85F /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 95BD23190F06780AFA8F708F /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -63,8 +63,8 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - A219FA1BA4AD7A0CCE184560 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - B37F3F7BA1352CC58F5B42CE /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + C106B318B7E4C757686D82A4 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + C4C4C0A87AC28ABBD674D966 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -72,50 +72,50 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 48F92C47F6785B74B10426B6 /* Pods_Runner.framework in Frameworks */, + 94424699B3A14C2982732B02 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - BA3F021047083BC8B18D3E0D /* Frameworks */ = { + C59F8CC1D73F354D282AD010 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 55A8A58D691856D8A8E2F81B /* Pods_RunnerTests.framework in Frameworks */, + EB6293D774039F2596010319 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 2686497132B27AC72C49AAEC /* Pods */ = { + 331C8082294A63A400263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( - B37F3F7BA1352CC58F5B42CE /* Pods-Runner.debug.xcconfig */, - 822914433177537C9D4A073F /* Pods-Runner.release.xcconfig */, - 8C22EFD2575ACEF2BA9301A3 /* Pods-Runner.profile.xcconfig */, - A219FA1BA4AD7A0CCE184560 /* Pods-RunnerTests.debug.xcconfig */, - 41F4E541C0B0FF23D9DA5C04 /* Pods-RunnerTests.release.xcconfig */, - 11FB88AA8219013083C1A563 /* Pods-RunnerTests.profile.xcconfig */, + 331C807B294A618700263BE5 /* RunnerTests.swift */, ); - name = Pods; - path = Pods; + path = RunnerTests; sourceTree = ""; }; - 331C8082294A63A400263BE5 /* RunnerTests */ = { + 61F983CEA43E1634EC9BD97C /* Frameworks */ = { isa = PBXGroup; children = ( - 331C807B294A618700263BE5 /* RunnerTests.swift */, + 6B9BB003A54B638618107ADC /* Pods_Runner.framework */, + 4DE10BC9E8056DBF9301BFB3 /* Pods_RunnerTests.framework */, ); - path = RunnerTests; + name = Frameworks; sourceTree = ""; }; - 561A1CA3EA2AB9F0AF534DA6 /* Frameworks */ = { + 7D07664DF19CED6C7E7482CF /* Pods */ = { isa = PBXGroup; children = ( - 67399F5529C4A8216833DD0F /* Pods_Runner.framework */, - 744A688AA80D90AEFEEE8B5D /* Pods_RunnerTests.framework */, + C4C4C0A87AC28ABBD674D966 /* Pods-Runner.debug.xcconfig */, + 458E75D9DD87189355FF674B /* Pods-Runner.release.xcconfig */, + 44A86022FD4B88620A074AD6 /* Pods-Runner.profile.xcconfig */, + 95BD23190F06780AFA8F708F /* Pods-RunnerTests.debug.xcconfig */, + 91F97278880AEE3F91F1B85F /* Pods-RunnerTests.release.xcconfig */, + C106B318B7E4C757686D82A4 /* Pods-RunnerTests.profile.xcconfig */, ); - name = Frameworks; + name = Pods; + path = Pods; sourceTree = ""; }; 9740EEB11CF90186004384FC /* Flutter */ = { @@ -136,8 +136,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - 2686497132B27AC72C49AAEC /* Pods */, - 561A1CA3EA2AB9F0AF534DA6 /* Frameworks */, + 7D07664DF19CED6C7E7482CF /* Pods */, + 61F983CEA43E1634EC9BD97C /* Frameworks */, ); sourceTree = ""; }; @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - A14A71C6D96CA2EED75B677B /* [CP] Check Pods Manifest.lock */, + 280BA5287C63B597F9749D8E /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - BA3F021047083BC8B18D3E0D /* Frameworks */, + C59F8CC1D73F354D282AD010 /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - FB86AE7D40B4243F86145360 /* [CP] Check Pods Manifest.lock */, + 13C8762D11FCF7A1D54D3CC7 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 69881ECA2F74BD08FB925BC2 /* [CP] Embed Pods Frameworks */, + 4D7CADDC4DF6943F118206BD /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -270,97 +270,97 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + 13C8762D11FCF7A1D54D3CC7 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( - "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "Thin Binary"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - 69881ECA2F74BD08FB925BC2 /* [CP] Embed Pods Frameworks */ = { + 280BA5287C63B597F9749D8E /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); - name = "Run Script"; + name = "Thin Binary"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - A14A71C6D96CA2EED75B677B /* [CP] Check Pods Manifest.lock */ = { + 4D7CADDC4DF6943F118206BD /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - FB86AE7D40B4243F86145360 /* [CP] Check Pods Manifest.lock */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( ); + name = "Run Script"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; /* End PBXShellScriptBuildPhase section */ @@ -488,7 +488,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = A219FA1BA4AD7A0CCE184560 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 95BD23190F06780AFA8F708F /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -507,7 +507,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 41F4E541C0B0FF23D9DA5C04 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 91F97278880AEE3F91F1B85F /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -524,7 +524,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 11FB88AA8219013083C1A563 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = C106B318B7E4C757686D82A4 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/firebase-get-to-know-flutter/step_05/macos/Runner.xcodeproj/project.pbxproj b/firebase-get-to-know-flutter/step_05/macos/Runner.xcodeproj/project.pbxproj index a8d91af57e..61d0d1b080 100644 --- a/firebase-get-to-know-flutter/step_05/macos/Runner.xcodeproj/project.pbxproj +++ b/firebase-get-to-know-flutter/step_05/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ - 28823A3C182EE12E8A57E818 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8DE94FCB4C93C934DB82ED0C /* Pods_Runner.framework */; }; + 128B8F8A6B5C6CF14D6E0342 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4D5B5999B70200B3809C6D01 /* Pods_RunnerTests.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - A5ADD6B5904AA82515194D84 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AB709786B7AC18EE740D5375 /* Pods_RunnerTests.framework */; }; + 4A2FD2A9AD946C2E174286CE /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 90F1F021E64641C89665DD10 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,7 +62,7 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 18B4AB14ED0B2BC5C115306D /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 1C25B3513592ABFAAB2831E2 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -79,15 +79,15 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 4086F8438660B0B0FA223108 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - 5E0D4E06649BF28D8D882A8B /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 64B67A849939B632D038250B /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 4D5B5999B70200B3809C6D01 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 563FAA1D5896D8E471921C79 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 8DE94FCB4C93C934DB82ED0C /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 90F1F021E64641C89665DD10 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 95D0AE963ADC3E494A4D37F0 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - A224E642823E0216BF12C1D3 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - AB709786B7AC18EE740D5375 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - EB8947F87314B3A353FCF67C /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + A2FFC262C51DDC226C58343C /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + BEA42C2E42664EC2D5EA8594 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + F22AA56F8A11105EB865C7C0 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - A5ADD6B5904AA82515194D84 /* Pods_RunnerTests.framework in Frameworks */, + 128B8F8A6B5C6CF14D6E0342 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,7 +103,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 28823A3C182EE12E8A57E818 /* Pods_Runner.framework in Frameworks */, + 4A2FD2A9AD946C2E174286CE /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -137,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 82C11B689FF0D3F4BA2C6780 /* Pods */, + E51BE6CEB1BDEEEF7114DDF8 /* Pods */, ); sourceTree = ""; }; @@ -185,27 +185,27 @@ path = Runner; sourceTree = ""; }; - 82C11B689FF0D3F4BA2C6780 /* Pods */ = { + D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - 5E0D4E06649BF28D8D882A8B /* Pods-Runner.debug.xcconfig */, - 18B4AB14ED0B2BC5C115306D /* Pods-Runner.release.xcconfig */, - 64B67A849939B632D038250B /* Pods-Runner.profile.xcconfig */, - EB8947F87314B3A353FCF67C /* Pods-RunnerTests.debug.xcconfig */, - A224E642823E0216BF12C1D3 /* Pods-RunnerTests.release.xcconfig */, - 4086F8438660B0B0FA223108 /* Pods-RunnerTests.profile.xcconfig */, + 90F1F021E64641C89665DD10 /* Pods_Runner.framework */, + 4D5B5999B70200B3809C6D01 /* Pods_RunnerTests.framework */, ); - name = Pods; - path = Pods; + name = Frameworks; sourceTree = ""; }; - D73912EC22F37F3D000D13A0 /* Frameworks */ = { + E51BE6CEB1BDEEEF7114DDF8 /* Pods */ = { isa = PBXGroup; children = ( - 8DE94FCB4C93C934DB82ED0C /* Pods_Runner.framework */, - AB709786B7AC18EE740D5375 /* Pods_RunnerTests.framework */, + 563FAA1D5896D8E471921C79 /* Pods-Runner.debug.xcconfig */, + A2FFC262C51DDC226C58343C /* Pods-Runner.release.xcconfig */, + 1C25B3513592ABFAAB2831E2 /* Pods-Runner.profile.xcconfig */, + BEA42C2E42664EC2D5EA8594 /* Pods-RunnerTests.debug.xcconfig */, + F22AA56F8A11105EB865C7C0 /* Pods-RunnerTests.release.xcconfig */, + 95D0AE963ADC3E494A4D37F0 /* Pods-RunnerTests.profile.xcconfig */, ); - name = Frameworks; + name = Pods; + path = Pods; sourceTree = ""; }; /* End PBXGroup section */ @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - F3CEA25B7E77975C7E78773F /* [CP] Check Pods Manifest.lock */, + 6C13E7904DC3004B41332335 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 2A85CCABAD294FADC367351F /* [CP] Check Pods Manifest.lock */, + 0F9D9D66708D755567BE1F99 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 79EEF1D7B56626FC53E21766 /* [CP] Embed Pods Frameworks */, + D82041256BE3E1863C6F9760 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,7 +323,7 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 2A85CCABAD294FADC367351F /* [CP] Check Pods Manifest.lock */ = { + 0F9D9D66708D755567BE1F99 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -383,43 +383,43 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 79EEF1D7B56626FC53E21766 /* [CP] Embed Pods Frameworks */ = { + 6C13E7904DC3004B41332335 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - F3CEA25B7E77975C7E78773F /* [CP] Check Pods Manifest.lock */ = { + D82041256BE3E1863C6F9760 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = EB8947F87314B3A353FCF67C /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = BEA42C2E42664EC2D5EA8594 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -489,7 +489,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = A224E642823E0216BF12C1D3 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = F22AA56F8A11105EB865C7C0 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -505,7 +505,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 4086F8438660B0B0FA223108 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 95D0AE963ADC3E494A4D37F0 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/firebase-get-to-know-flutter/step_05/pubspec.yaml b/firebase-get-to-know-flutter/step_05/pubspec.yaml index 7a39a8a411..5a192dd65c 100644 --- a/firebase-get-to-know-flutter/step_05/pubspec.yaml +++ b/firebase-get-to-know-flutter/step_05/pubspec.yaml @@ -32,6 +32,7 @@ dependencies: flutter: sdk: flutter + # The following adds the Cupertino Icons font to your application. # Use with the CupertinoIcons class for iOS style icons. cupertino_icons: ^1.0.8 diff --git a/firebase-get-to-know-flutter/step_05/web/index.html b/firebase-get-to-know-flutter/step_05/web/index.html index ec3bcd0112..92f64576d8 100644 --- a/firebase-get-to-know-flutter/step_05/web/index.html +++ b/firebase-get-to-know-flutter/step_05/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/firebase-get-to-know-flutter/step_06/android/gradle.properties b/firebase-get-to-know-flutter/step_06/android/gradle.properties index f018a61817..2597170821 100644 --- a/firebase-get-to-know-flutter/step_06/android/gradle.properties +++ b/firebase-get-to-know-flutter/step_06/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/firebase-get-to-know-flutter/step_06/ios/Runner.xcodeproj/project.pbxproj b/firebase-get-to-know-flutter/step_06/ios/Runner.xcodeproj/project.pbxproj index 1fec3b176b..f55a47cb43 100644 --- a/firebase-get-to-know-flutter/step_06/ios/Runner.xcodeproj/project.pbxproj +++ b/firebase-get-to-know-flutter/step_06/ios/Runner.xcodeproj/project.pbxproj @@ -10,12 +10,12 @@ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; - 48F92C47F6785B74B10426B6 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 67399F5529C4A8216833DD0F /* Pods_Runner.framework */; }; - 55A8A58D691856D8A8E2F81B /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 744A688AA80D90AEFEEE8B5D /* Pods_RunnerTests.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; + 94424699B3A14C2982732B02 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6B9BB003A54B638618107ADC /* Pods_Runner.framework */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; + EB6293D774039F2596010319 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4DE10BC9E8056DBF9301BFB3 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,20 +42,20 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 11FB88AA8219013083C1A563 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 41F4E541C0B0FF23D9DA5C04 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - 67399F5529C4A8216833DD0F /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 744A688AA80D90AEFEEE8B5D /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 44A86022FD4B88620A074AD6 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 458E75D9DD87189355FF674B /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 4DE10BC9E8056DBF9301BFB3 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 6B9BB003A54B638618107ADC /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 822914433177537C9D4A073F /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 8C22EFD2575ACEF2BA9301A3 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 91F97278880AEE3F91F1B85F /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 95BD23190F06780AFA8F708F /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -63,8 +63,8 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - A219FA1BA4AD7A0CCE184560 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - B37F3F7BA1352CC58F5B42CE /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + C106B318B7E4C757686D82A4 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + C4C4C0A87AC28ABBD674D966 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -72,50 +72,50 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 48F92C47F6785B74B10426B6 /* Pods_Runner.framework in Frameworks */, + 94424699B3A14C2982732B02 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - BA3F021047083BC8B18D3E0D /* Frameworks */ = { + C59F8CC1D73F354D282AD010 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 55A8A58D691856D8A8E2F81B /* Pods_RunnerTests.framework in Frameworks */, + EB6293D774039F2596010319 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 2686497132B27AC72C49AAEC /* Pods */ = { + 331C8082294A63A400263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( - B37F3F7BA1352CC58F5B42CE /* Pods-Runner.debug.xcconfig */, - 822914433177537C9D4A073F /* Pods-Runner.release.xcconfig */, - 8C22EFD2575ACEF2BA9301A3 /* Pods-Runner.profile.xcconfig */, - A219FA1BA4AD7A0CCE184560 /* Pods-RunnerTests.debug.xcconfig */, - 41F4E541C0B0FF23D9DA5C04 /* Pods-RunnerTests.release.xcconfig */, - 11FB88AA8219013083C1A563 /* Pods-RunnerTests.profile.xcconfig */, + 331C807B294A618700263BE5 /* RunnerTests.swift */, ); - name = Pods; - path = Pods; + path = RunnerTests; sourceTree = ""; }; - 331C8082294A63A400263BE5 /* RunnerTests */ = { + 61F983CEA43E1634EC9BD97C /* Frameworks */ = { isa = PBXGroup; children = ( - 331C807B294A618700263BE5 /* RunnerTests.swift */, + 6B9BB003A54B638618107ADC /* Pods_Runner.framework */, + 4DE10BC9E8056DBF9301BFB3 /* Pods_RunnerTests.framework */, ); - path = RunnerTests; + name = Frameworks; sourceTree = ""; }; - 561A1CA3EA2AB9F0AF534DA6 /* Frameworks */ = { + 7D07664DF19CED6C7E7482CF /* Pods */ = { isa = PBXGroup; children = ( - 67399F5529C4A8216833DD0F /* Pods_Runner.framework */, - 744A688AA80D90AEFEEE8B5D /* Pods_RunnerTests.framework */, + C4C4C0A87AC28ABBD674D966 /* Pods-Runner.debug.xcconfig */, + 458E75D9DD87189355FF674B /* Pods-Runner.release.xcconfig */, + 44A86022FD4B88620A074AD6 /* Pods-Runner.profile.xcconfig */, + 95BD23190F06780AFA8F708F /* Pods-RunnerTests.debug.xcconfig */, + 91F97278880AEE3F91F1B85F /* Pods-RunnerTests.release.xcconfig */, + C106B318B7E4C757686D82A4 /* Pods-RunnerTests.profile.xcconfig */, ); - name = Frameworks; + name = Pods; + path = Pods; sourceTree = ""; }; 9740EEB11CF90186004384FC /* Flutter */ = { @@ -136,8 +136,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - 2686497132B27AC72C49AAEC /* Pods */, - 561A1CA3EA2AB9F0AF534DA6 /* Frameworks */, + 7D07664DF19CED6C7E7482CF /* Pods */, + 61F983CEA43E1634EC9BD97C /* Frameworks */, ); sourceTree = ""; }; @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - A14A71C6D96CA2EED75B677B /* [CP] Check Pods Manifest.lock */, + 280BA5287C63B597F9749D8E /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - BA3F021047083BC8B18D3E0D /* Frameworks */, + C59F8CC1D73F354D282AD010 /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - FB86AE7D40B4243F86145360 /* [CP] Check Pods Manifest.lock */, + 13C8762D11FCF7A1D54D3CC7 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 69881ECA2F74BD08FB925BC2 /* [CP] Embed Pods Frameworks */, + 4D7CADDC4DF6943F118206BD /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -270,97 +270,97 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + 13C8762D11FCF7A1D54D3CC7 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( - "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "Thin Binary"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - 69881ECA2F74BD08FB925BC2 /* [CP] Embed Pods Frameworks */ = { + 280BA5287C63B597F9749D8E /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); - name = "Run Script"; + name = "Thin Binary"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - A14A71C6D96CA2EED75B677B /* [CP] Check Pods Manifest.lock */ = { + 4D7CADDC4DF6943F118206BD /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - FB86AE7D40B4243F86145360 /* [CP] Check Pods Manifest.lock */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( ); + name = "Run Script"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; /* End PBXShellScriptBuildPhase section */ @@ -488,7 +488,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = A219FA1BA4AD7A0CCE184560 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 95BD23190F06780AFA8F708F /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -507,7 +507,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 41F4E541C0B0FF23D9DA5C04 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 91F97278880AEE3F91F1B85F /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -524,7 +524,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 11FB88AA8219013083C1A563 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = C106B318B7E4C757686D82A4 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/firebase-get-to-know-flutter/step_06/macos/Runner.xcodeproj/project.pbxproj b/firebase-get-to-know-flutter/step_06/macos/Runner.xcodeproj/project.pbxproj index a8d91af57e..61d0d1b080 100644 --- a/firebase-get-to-know-flutter/step_06/macos/Runner.xcodeproj/project.pbxproj +++ b/firebase-get-to-know-flutter/step_06/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ - 28823A3C182EE12E8A57E818 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8DE94FCB4C93C934DB82ED0C /* Pods_Runner.framework */; }; + 128B8F8A6B5C6CF14D6E0342 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4D5B5999B70200B3809C6D01 /* Pods_RunnerTests.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - A5ADD6B5904AA82515194D84 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AB709786B7AC18EE740D5375 /* Pods_RunnerTests.framework */; }; + 4A2FD2A9AD946C2E174286CE /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 90F1F021E64641C89665DD10 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,7 +62,7 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 18B4AB14ED0B2BC5C115306D /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 1C25B3513592ABFAAB2831E2 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -79,15 +79,15 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 4086F8438660B0B0FA223108 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - 5E0D4E06649BF28D8D882A8B /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 64B67A849939B632D038250B /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 4D5B5999B70200B3809C6D01 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 563FAA1D5896D8E471921C79 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 8DE94FCB4C93C934DB82ED0C /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 90F1F021E64641C89665DD10 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 95D0AE963ADC3E494A4D37F0 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - A224E642823E0216BF12C1D3 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - AB709786B7AC18EE740D5375 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - EB8947F87314B3A353FCF67C /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + A2FFC262C51DDC226C58343C /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + BEA42C2E42664EC2D5EA8594 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + F22AA56F8A11105EB865C7C0 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - A5ADD6B5904AA82515194D84 /* Pods_RunnerTests.framework in Frameworks */, + 128B8F8A6B5C6CF14D6E0342 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,7 +103,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 28823A3C182EE12E8A57E818 /* Pods_Runner.framework in Frameworks */, + 4A2FD2A9AD946C2E174286CE /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -137,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 82C11B689FF0D3F4BA2C6780 /* Pods */, + E51BE6CEB1BDEEEF7114DDF8 /* Pods */, ); sourceTree = ""; }; @@ -185,27 +185,27 @@ path = Runner; sourceTree = ""; }; - 82C11B689FF0D3F4BA2C6780 /* Pods */ = { + D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - 5E0D4E06649BF28D8D882A8B /* Pods-Runner.debug.xcconfig */, - 18B4AB14ED0B2BC5C115306D /* Pods-Runner.release.xcconfig */, - 64B67A849939B632D038250B /* Pods-Runner.profile.xcconfig */, - EB8947F87314B3A353FCF67C /* Pods-RunnerTests.debug.xcconfig */, - A224E642823E0216BF12C1D3 /* Pods-RunnerTests.release.xcconfig */, - 4086F8438660B0B0FA223108 /* Pods-RunnerTests.profile.xcconfig */, + 90F1F021E64641C89665DD10 /* Pods_Runner.framework */, + 4D5B5999B70200B3809C6D01 /* Pods_RunnerTests.framework */, ); - name = Pods; - path = Pods; + name = Frameworks; sourceTree = ""; }; - D73912EC22F37F3D000D13A0 /* Frameworks */ = { + E51BE6CEB1BDEEEF7114DDF8 /* Pods */ = { isa = PBXGroup; children = ( - 8DE94FCB4C93C934DB82ED0C /* Pods_Runner.framework */, - AB709786B7AC18EE740D5375 /* Pods_RunnerTests.framework */, + 563FAA1D5896D8E471921C79 /* Pods-Runner.debug.xcconfig */, + A2FFC262C51DDC226C58343C /* Pods-Runner.release.xcconfig */, + 1C25B3513592ABFAAB2831E2 /* Pods-Runner.profile.xcconfig */, + BEA42C2E42664EC2D5EA8594 /* Pods-RunnerTests.debug.xcconfig */, + F22AA56F8A11105EB865C7C0 /* Pods-RunnerTests.release.xcconfig */, + 95D0AE963ADC3E494A4D37F0 /* Pods-RunnerTests.profile.xcconfig */, ); - name = Frameworks; + name = Pods; + path = Pods; sourceTree = ""; }; /* End PBXGroup section */ @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - F3CEA25B7E77975C7E78773F /* [CP] Check Pods Manifest.lock */, + 6C13E7904DC3004B41332335 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 2A85CCABAD294FADC367351F /* [CP] Check Pods Manifest.lock */, + 0F9D9D66708D755567BE1F99 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 79EEF1D7B56626FC53E21766 /* [CP] Embed Pods Frameworks */, + D82041256BE3E1863C6F9760 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,7 +323,7 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 2A85CCABAD294FADC367351F /* [CP] Check Pods Manifest.lock */ = { + 0F9D9D66708D755567BE1F99 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -383,43 +383,43 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 79EEF1D7B56626FC53E21766 /* [CP] Embed Pods Frameworks */ = { + 6C13E7904DC3004B41332335 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - F3CEA25B7E77975C7E78773F /* [CP] Check Pods Manifest.lock */ = { + D82041256BE3E1863C6F9760 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = EB8947F87314B3A353FCF67C /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = BEA42C2E42664EC2D5EA8594 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -489,7 +489,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = A224E642823E0216BF12C1D3 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = F22AA56F8A11105EB865C7C0 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -505,7 +505,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 4086F8438660B0B0FA223108 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 95D0AE963ADC3E494A4D37F0 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/firebase-get-to-know-flutter/step_06/pubspec.yaml b/firebase-get-to-know-flutter/step_06/pubspec.yaml index 7a39a8a411..5a192dd65c 100644 --- a/firebase-get-to-know-flutter/step_06/pubspec.yaml +++ b/firebase-get-to-know-flutter/step_06/pubspec.yaml @@ -32,6 +32,7 @@ dependencies: flutter: sdk: flutter + # The following adds the Cupertino Icons font to your application. # Use with the CupertinoIcons class for iOS style icons. cupertino_icons: ^1.0.8 diff --git a/firebase-get-to-know-flutter/step_06/web/index.html b/firebase-get-to-know-flutter/step_06/web/index.html index ec3bcd0112..92f64576d8 100644 --- a/firebase-get-to-know-flutter/step_06/web/index.html +++ b/firebase-get-to-know-flutter/step_06/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/firebase-get-to-know-flutter/step_07/android/gradle.properties b/firebase-get-to-know-flutter/step_07/android/gradle.properties index f018a61817..2597170821 100644 --- a/firebase-get-to-know-flutter/step_07/android/gradle.properties +++ b/firebase-get-to-know-flutter/step_07/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/firebase-get-to-know-flutter/step_07/ios/Runner.xcodeproj/project.pbxproj b/firebase-get-to-know-flutter/step_07/ios/Runner.xcodeproj/project.pbxproj index 1fec3b176b..f55a47cb43 100644 --- a/firebase-get-to-know-flutter/step_07/ios/Runner.xcodeproj/project.pbxproj +++ b/firebase-get-to-know-flutter/step_07/ios/Runner.xcodeproj/project.pbxproj @@ -10,12 +10,12 @@ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; - 48F92C47F6785B74B10426B6 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 67399F5529C4A8216833DD0F /* Pods_Runner.framework */; }; - 55A8A58D691856D8A8E2F81B /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 744A688AA80D90AEFEEE8B5D /* Pods_RunnerTests.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; + 94424699B3A14C2982732B02 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6B9BB003A54B638618107ADC /* Pods_Runner.framework */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; + EB6293D774039F2596010319 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4DE10BC9E8056DBF9301BFB3 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,20 +42,20 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 11FB88AA8219013083C1A563 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 41F4E541C0B0FF23D9DA5C04 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - 67399F5529C4A8216833DD0F /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 744A688AA80D90AEFEEE8B5D /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 44A86022FD4B88620A074AD6 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 458E75D9DD87189355FF674B /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 4DE10BC9E8056DBF9301BFB3 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 6B9BB003A54B638618107ADC /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 822914433177537C9D4A073F /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 8C22EFD2575ACEF2BA9301A3 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 91F97278880AEE3F91F1B85F /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 95BD23190F06780AFA8F708F /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -63,8 +63,8 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - A219FA1BA4AD7A0CCE184560 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - B37F3F7BA1352CC58F5B42CE /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + C106B318B7E4C757686D82A4 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + C4C4C0A87AC28ABBD674D966 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -72,50 +72,50 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 48F92C47F6785B74B10426B6 /* Pods_Runner.framework in Frameworks */, + 94424699B3A14C2982732B02 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - BA3F021047083BC8B18D3E0D /* Frameworks */ = { + C59F8CC1D73F354D282AD010 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 55A8A58D691856D8A8E2F81B /* Pods_RunnerTests.framework in Frameworks */, + EB6293D774039F2596010319 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 2686497132B27AC72C49AAEC /* Pods */ = { + 331C8082294A63A400263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( - B37F3F7BA1352CC58F5B42CE /* Pods-Runner.debug.xcconfig */, - 822914433177537C9D4A073F /* Pods-Runner.release.xcconfig */, - 8C22EFD2575ACEF2BA9301A3 /* Pods-Runner.profile.xcconfig */, - A219FA1BA4AD7A0CCE184560 /* Pods-RunnerTests.debug.xcconfig */, - 41F4E541C0B0FF23D9DA5C04 /* Pods-RunnerTests.release.xcconfig */, - 11FB88AA8219013083C1A563 /* Pods-RunnerTests.profile.xcconfig */, + 331C807B294A618700263BE5 /* RunnerTests.swift */, ); - name = Pods; - path = Pods; + path = RunnerTests; sourceTree = ""; }; - 331C8082294A63A400263BE5 /* RunnerTests */ = { + 61F983CEA43E1634EC9BD97C /* Frameworks */ = { isa = PBXGroup; children = ( - 331C807B294A618700263BE5 /* RunnerTests.swift */, + 6B9BB003A54B638618107ADC /* Pods_Runner.framework */, + 4DE10BC9E8056DBF9301BFB3 /* Pods_RunnerTests.framework */, ); - path = RunnerTests; + name = Frameworks; sourceTree = ""; }; - 561A1CA3EA2AB9F0AF534DA6 /* Frameworks */ = { + 7D07664DF19CED6C7E7482CF /* Pods */ = { isa = PBXGroup; children = ( - 67399F5529C4A8216833DD0F /* Pods_Runner.framework */, - 744A688AA80D90AEFEEE8B5D /* Pods_RunnerTests.framework */, + C4C4C0A87AC28ABBD674D966 /* Pods-Runner.debug.xcconfig */, + 458E75D9DD87189355FF674B /* Pods-Runner.release.xcconfig */, + 44A86022FD4B88620A074AD6 /* Pods-Runner.profile.xcconfig */, + 95BD23190F06780AFA8F708F /* Pods-RunnerTests.debug.xcconfig */, + 91F97278880AEE3F91F1B85F /* Pods-RunnerTests.release.xcconfig */, + C106B318B7E4C757686D82A4 /* Pods-RunnerTests.profile.xcconfig */, ); - name = Frameworks; + name = Pods; + path = Pods; sourceTree = ""; }; 9740EEB11CF90186004384FC /* Flutter */ = { @@ -136,8 +136,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - 2686497132B27AC72C49AAEC /* Pods */, - 561A1CA3EA2AB9F0AF534DA6 /* Frameworks */, + 7D07664DF19CED6C7E7482CF /* Pods */, + 61F983CEA43E1634EC9BD97C /* Frameworks */, ); sourceTree = ""; }; @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - A14A71C6D96CA2EED75B677B /* [CP] Check Pods Manifest.lock */, + 280BA5287C63B597F9749D8E /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - BA3F021047083BC8B18D3E0D /* Frameworks */, + C59F8CC1D73F354D282AD010 /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - FB86AE7D40B4243F86145360 /* [CP] Check Pods Manifest.lock */, + 13C8762D11FCF7A1D54D3CC7 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 69881ECA2F74BD08FB925BC2 /* [CP] Embed Pods Frameworks */, + 4D7CADDC4DF6943F118206BD /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -270,97 +270,97 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + 13C8762D11FCF7A1D54D3CC7 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( - "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "Thin Binary"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - 69881ECA2F74BD08FB925BC2 /* [CP] Embed Pods Frameworks */ = { + 280BA5287C63B597F9749D8E /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); - name = "Run Script"; + name = "Thin Binary"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - A14A71C6D96CA2EED75B677B /* [CP] Check Pods Manifest.lock */ = { + 4D7CADDC4DF6943F118206BD /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - FB86AE7D40B4243F86145360 /* [CP] Check Pods Manifest.lock */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( ); + name = "Run Script"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; /* End PBXShellScriptBuildPhase section */ @@ -488,7 +488,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = A219FA1BA4AD7A0CCE184560 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 95BD23190F06780AFA8F708F /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -507,7 +507,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 41F4E541C0B0FF23D9DA5C04 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 91F97278880AEE3F91F1B85F /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -524,7 +524,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 11FB88AA8219013083C1A563 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = C106B318B7E4C757686D82A4 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/firebase-get-to-know-flutter/step_07/macos/Runner.xcodeproj/project.pbxproj b/firebase-get-to-know-flutter/step_07/macos/Runner.xcodeproj/project.pbxproj index a8d91af57e..61d0d1b080 100644 --- a/firebase-get-to-know-flutter/step_07/macos/Runner.xcodeproj/project.pbxproj +++ b/firebase-get-to-know-flutter/step_07/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ - 28823A3C182EE12E8A57E818 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8DE94FCB4C93C934DB82ED0C /* Pods_Runner.framework */; }; + 128B8F8A6B5C6CF14D6E0342 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4D5B5999B70200B3809C6D01 /* Pods_RunnerTests.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - A5ADD6B5904AA82515194D84 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AB709786B7AC18EE740D5375 /* Pods_RunnerTests.framework */; }; + 4A2FD2A9AD946C2E174286CE /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 90F1F021E64641C89665DD10 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,7 +62,7 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 18B4AB14ED0B2BC5C115306D /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 1C25B3513592ABFAAB2831E2 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -79,15 +79,15 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 4086F8438660B0B0FA223108 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - 5E0D4E06649BF28D8D882A8B /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 64B67A849939B632D038250B /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 4D5B5999B70200B3809C6D01 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 563FAA1D5896D8E471921C79 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 8DE94FCB4C93C934DB82ED0C /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 90F1F021E64641C89665DD10 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 95D0AE963ADC3E494A4D37F0 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - A224E642823E0216BF12C1D3 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - AB709786B7AC18EE740D5375 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - EB8947F87314B3A353FCF67C /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + A2FFC262C51DDC226C58343C /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + BEA42C2E42664EC2D5EA8594 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + F22AA56F8A11105EB865C7C0 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - A5ADD6B5904AA82515194D84 /* Pods_RunnerTests.framework in Frameworks */, + 128B8F8A6B5C6CF14D6E0342 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,7 +103,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 28823A3C182EE12E8A57E818 /* Pods_Runner.framework in Frameworks */, + 4A2FD2A9AD946C2E174286CE /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -137,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 82C11B689FF0D3F4BA2C6780 /* Pods */, + E51BE6CEB1BDEEEF7114DDF8 /* Pods */, ); sourceTree = ""; }; @@ -185,27 +185,27 @@ path = Runner; sourceTree = ""; }; - 82C11B689FF0D3F4BA2C6780 /* Pods */ = { + D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - 5E0D4E06649BF28D8D882A8B /* Pods-Runner.debug.xcconfig */, - 18B4AB14ED0B2BC5C115306D /* Pods-Runner.release.xcconfig */, - 64B67A849939B632D038250B /* Pods-Runner.profile.xcconfig */, - EB8947F87314B3A353FCF67C /* Pods-RunnerTests.debug.xcconfig */, - A224E642823E0216BF12C1D3 /* Pods-RunnerTests.release.xcconfig */, - 4086F8438660B0B0FA223108 /* Pods-RunnerTests.profile.xcconfig */, + 90F1F021E64641C89665DD10 /* Pods_Runner.framework */, + 4D5B5999B70200B3809C6D01 /* Pods_RunnerTests.framework */, ); - name = Pods; - path = Pods; + name = Frameworks; sourceTree = ""; }; - D73912EC22F37F3D000D13A0 /* Frameworks */ = { + E51BE6CEB1BDEEEF7114DDF8 /* Pods */ = { isa = PBXGroup; children = ( - 8DE94FCB4C93C934DB82ED0C /* Pods_Runner.framework */, - AB709786B7AC18EE740D5375 /* Pods_RunnerTests.framework */, + 563FAA1D5896D8E471921C79 /* Pods-Runner.debug.xcconfig */, + A2FFC262C51DDC226C58343C /* Pods-Runner.release.xcconfig */, + 1C25B3513592ABFAAB2831E2 /* Pods-Runner.profile.xcconfig */, + BEA42C2E42664EC2D5EA8594 /* Pods-RunnerTests.debug.xcconfig */, + F22AA56F8A11105EB865C7C0 /* Pods-RunnerTests.release.xcconfig */, + 95D0AE963ADC3E494A4D37F0 /* Pods-RunnerTests.profile.xcconfig */, ); - name = Frameworks; + name = Pods; + path = Pods; sourceTree = ""; }; /* End PBXGroup section */ @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - F3CEA25B7E77975C7E78773F /* [CP] Check Pods Manifest.lock */, + 6C13E7904DC3004B41332335 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 2A85CCABAD294FADC367351F /* [CP] Check Pods Manifest.lock */, + 0F9D9D66708D755567BE1F99 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 79EEF1D7B56626FC53E21766 /* [CP] Embed Pods Frameworks */, + D82041256BE3E1863C6F9760 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,7 +323,7 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 2A85CCABAD294FADC367351F /* [CP] Check Pods Manifest.lock */ = { + 0F9D9D66708D755567BE1F99 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -383,43 +383,43 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 79EEF1D7B56626FC53E21766 /* [CP] Embed Pods Frameworks */ = { + 6C13E7904DC3004B41332335 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - F3CEA25B7E77975C7E78773F /* [CP] Check Pods Manifest.lock */ = { + D82041256BE3E1863C6F9760 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = EB8947F87314B3A353FCF67C /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = BEA42C2E42664EC2D5EA8594 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -489,7 +489,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = A224E642823E0216BF12C1D3 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = F22AA56F8A11105EB865C7C0 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -505,7 +505,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 4086F8438660B0B0FA223108 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 95D0AE963ADC3E494A4D37F0 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/firebase-get-to-know-flutter/step_07/pubspec.yaml b/firebase-get-to-know-flutter/step_07/pubspec.yaml index 7a39a8a411..5a192dd65c 100644 --- a/firebase-get-to-know-flutter/step_07/pubspec.yaml +++ b/firebase-get-to-know-flutter/step_07/pubspec.yaml @@ -32,6 +32,7 @@ dependencies: flutter: sdk: flutter + # The following adds the Cupertino Icons font to your application. # Use with the CupertinoIcons class for iOS style icons. cupertino_icons: ^1.0.8 diff --git a/firebase-get-to-know-flutter/step_07/web/index.html b/firebase-get-to-know-flutter/step_07/web/index.html index ec3bcd0112..92f64576d8 100644 --- a/firebase-get-to-know-flutter/step_07/web/index.html +++ b/firebase-get-to-know-flutter/step_07/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/firebase-get-to-know-flutter/step_09/android/gradle.properties b/firebase-get-to-know-flutter/step_09/android/gradle.properties index f018a61817..2597170821 100644 --- a/firebase-get-to-know-flutter/step_09/android/gradle.properties +++ b/firebase-get-to-know-flutter/step_09/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/firebase-get-to-know-flutter/step_09/ios/Runner.xcodeproj/project.pbxproj b/firebase-get-to-know-flutter/step_09/ios/Runner.xcodeproj/project.pbxproj index 1fec3b176b..f55a47cb43 100644 --- a/firebase-get-to-know-flutter/step_09/ios/Runner.xcodeproj/project.pbxproj +++ b/firebase-get-to-know-flutter/step_09/ios/Runner.xcodeproj/project.pbxproj @@ -10,12 +10,12 @@ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; - 48F92C47F6785B74B10426B6 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 67399F5529C4A8216833DD0F /* Pods_Runner.framework */; }; - 55A8A58D691856D8A8E2F81B /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 744A688AA80D90AEFEEE8B5D /* Pods_RunnerTests.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; + 94424699B3A14C2982732B02 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6B9BB003A54B638618107ADC /* Pods_Runner.framework */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; + EB6293D774039F2596010319 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4DE10BC9E8056DBF9301BFB3 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,20 +42,20 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 11FB88AA8219013083C1A563 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 41F4E541C0B0FF23D9DA5C04 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - 67399F5529C4A8216833DD0F /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 744A688AA80D90AEFEEE8B5D /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 44A86022FD4B88620A074AD6 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 458E75D9DD87189355FF674B /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 4DE10BC9E8056DBF9301BFB3 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 6B9BB003A54B638618107ADC /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 822914433177537C9D4A073F /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 8C22EFD2575ACEF2BA9301A3 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 91F97278880AEE3F91F1B85F /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 95BD23190F06780AFA8F708F /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -63,8 +63,8 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - A219FA1BA4AD7A0CCE184560 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - B37F3F7BA1352CC58F5B42CE /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + C106B318B7E4C757686D82A4 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + C4C4C0A87AC28ABBD674D966 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -72,50 +72,50 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 48F92C47F6785B74B10426B6 /* Pods_Runner.framework in Frameworks */, + 94424699B3A14C2982732B02 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - BA3F021047083BC8B18D3E0D /* Frameworks */ = { + C59F8CC1D73F354D282AD010 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 55A8A58D691856D8A8E2F81B /* Pods_RunnerTests.framework in Frameworks */, + EB6293D774039F2596010319 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 2686497132B27AC72C49AAEC /* Pods */ = { + 331C8082294A63A400263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( - B37F3F7BA1352CC58F5B42CE /* Pods-Runner.debug.xcconfig */, - 822914433177537C9D4A073F /* Pods-Runner.release.xcconfig */, - 8C22EFD2575ACEF2BA9301A3 /* Pods-Runner.profile.xcconfig */, - A219FA1BA4AD7A0CCE184560 /* Pods-RunnerTests.debug.xcconfig */, - 41F4E541C0B0FF23D9DA5C04 /* Pods-RunnerTests.release.xcconfig */, - 11FB88AA8219013083C1A563 /* Pods-RunnerTests.profile.xcconfig */, + 331C807B294A618700263BE5 /* RunnerTests.swift */, ); - name = Pods; - path = Pods; + path = RunnerTests; sourceTree = ""; }; - 331C8082294A63A400263BE5 /* RunnerTests */ = { + 61F983CEA43E1634EC9BD97C /* Frameworks */ = { isa = PBXGroup; children = ( - 331C807B294A618700263BE5 /* RunnerTests.swift */, + 6B9BB003A54B638618107ADC /* Pods_Runner.framework */, + 4DE10BC9E8056DBF9301BFB3 /* Pods_RunnerTests.framework */, ); - path = RunnerTests; + name = Frameworks; sourceTree = ""; }; - 561A1CA3EA2AB9F0AF534DA6 /* Frameworks */ = { + 7D07664DF19CED6C7E7482CF /* Pods */ = { isa = PBXGroup; children = ( - 67399F5529C4A8216833DD0F /* Pods_Runner.framework */, - 744A688AA80D90AEFEEE8B5D /* Pods_RunnerTests.framework */, + C4C4C0A87AC28ABBD674D966 /* Pods-Runner.debug.xcconfig */, + 458E75D9DD87189355FF674B /* Pods-Runner.release.xcconfig */, + 44A86022FD4B88620A074AD6 /* Pods-Runner.profile.xcconfig */, + 95BD23190F06780AFA8F708F /* Pods-RunnerTests.debug.xcconfig */, + 91F97278880AEE3F91F1B85F /* Pods-RunnerTests.release.xcconfig */, + C106B318B7E4C757686D82A4 /* Pods-RunnerTests.profile.xcconfig */, ); - name = Frameworks; + name = Pods; + path = Pods; sourceTree = ""; }; 9740EEB11CF90186004384FC /* Flutter */ = { @@ -136,8 +136,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - 2686497132B27AC72C49AAEC /* Pods */, - 561A1CA3EA2AB9F0AF534DA6 /* Frameworks */, + 7D07664DF19CED6C7E7482CF /* Pods */, + 61F983CEA43E1634EC9BD97C /* Frameworks */, ); sourceTree = ""; }; @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - A14A71C6D96CA2EED75B677B /* [CP] Check Pods Manifest.lock */, + 280BA5287C63B597F9749D8E /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - BA3F021047083BC8B18D3E0D /* Frameworks */, + C59F8CC1D73F354D282AD010 /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - FB86AE7D40B4243F86145360 /* [CP] Check Pods Manifest.lock */, + 13C8762D11FCF7A1D54D3CC7 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 69881ECA2F74BD08FB925BC2 /* [CP] Embed Pods Frameworks */, + 4D7CADDC4DF6943F118206BD /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -270,97 +270,97 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + 13C8762D11FCF7A1D54D3CC7 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( - "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "Thin Binary"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - 69881ECA2F74BD08FB925BC2 /* [CP] Embed Pods Frameworks */ = { + 280BA5287C63B597F9749D8E /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); - name = "Run Script"; + name = "Thin Binary"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - A14A71C6D96CA2EED75B677B /* [CP] Check Pods Manifest.lock */ = { + 4D7CADDC4DF6943F118206BD /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - FB86AE7D40B4243F86145360 /* [CP] Check Pods Manifest.lock */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( ); + name = "Run Script"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; /* End PBXShellScriptBuildPhase section */ @@ -488,7 +488,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = A219FA1BA4AD7A0CCE184560 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 95BD23190F06780AFA8F708F /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -507,7 +507,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 41F4E541C0B0FF23D9DA5C04 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 91F97278880AEE3F91F1B85F /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -524,7 +524,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 11FB88AA8219013083C1A563 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = C106B318B7E4C757686D82A4 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/firebase-get-to-know-flutter/step_09/macos/Runner.xcodeproj/project.pbxproj b/firebase-get-to-know-flutter/step_09/macos/Runner.xcodeproj/project.pbxproj index a8d91af57e..61d0d1b080 100644 --- a/firebase-get-to-know-flutter/step_09/macos/Runner.xcodeproj/project.pbxproj +++ b/firebase-get-to-know-flutter/step_09/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ - 28823A3C182EE12E8A57E818 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8DE94FCB4C93C934DB82ED0C /* Pods_Runner.framework */; }; + 128B8F8A6B5C6CF14D6E0342 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4D5B5999B70200B3809C6D01 /* Pods_RunnerTests.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - A5ADD6B5904AA82515194D84 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AB709786B7AC18EE740D5375 /* Pods_RunnerTests.framework */; }; + 4A2FD2A9AD946C2E174286CE /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 90F1F021E64641C89665DD10 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,7 +62,7 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 18B4AB14ED0B2BC5C115306D /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 1C25B3513592ABFAAB2831E2 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -79,15 +79,15 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 4086F8438660B0B0FA223108 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - 5E0D4E06649BF28D8D882A8B /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 64B67A849939B632D038250B /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 4D5B5999B70200B3809C6D01 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 563FAA1D5896D8E471921C79 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 8DE94FCB4C93C934DB82ED0C /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 90F1F021E64641C89665DD10 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 95D0AE963ADC3E494A4D37F0 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - A224E642823E0216BF12C1D3 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - AB709786B7AC18EE740D5375 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - EB8947F87314B3A353FCF67C /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + A2FFC262C51DDC226C58343C /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + BEA42C2E42664EC2D5EA8594 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + F22AA56F8A11105EB865C7C0 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - A5ADD6B5904AA82515194D84 /* Pods_RunnerTests.framework in Frameworks */, + 128B8F8A6B5C6CF14D6E0342 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,7 +103,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 28823A3C182EE12E8A57E818 /* Pods_Runner.framework in Frameworks */, + 4A2FD2A9AD946C2E174286CE /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -137,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 82C11B689FF0D3F4BA2C6780 /* Pods */, + E51BE6CEB1BDEEEF7114DDF8 /* Pods */, ); sourceTree = ""; }; @@ -185,27 +185,27 @@ path = Runner; sourceTree = ""; }; - 82C11B689FF0D3F4BA2C6780 /* Pods */ = { + D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - 5E0D4E06649BF28D8D882A8B /* Pods-Runner.debug.xcconfig */, - 18B4AB14ED0B2BC5C115306D /* Pods-Runner.release.xcconfig */, - 64B67A849939B632D038250B /* Pods-Runner.profile.xcconfig */, - EB8947F87314B3A353FCF67C /* Pods-RunnerTests.debug.xcconfig */, - A224E642823E0216BF12C1D3 /* Pods-RunnerTests.release.xcconfig */, - 4086F8438660B0B0FA223108 /* Pods-RunnerTests.profile.xcconfig */, + 90F1F021E64641C89665DD10 /* Pods_Runner.framework */, + 4D5B5999B70200B3809C6D01 /* Pods_RunnerTests.framework */, ); - name = Pods; - path = Pods; + name = Frameworks; sourceTree = ""; }; - D73912EC22F37F3D000D13A0 /* Frameworks */ = { + E51BE6CEB1BDEEEF7114DDF8 /* Pods */ = { isa = PBXGroup; children = ( - 8DE94FCB4C93C934DB82ED0C /* Pods_Runner.framework */, - AB709786B7AC18EE740D5375 /* Pods_RunnerTests.framework */, + 563FAA1D5896D8E471921C79 /* Pods-Runner.debug.xcconfig */, + A2FFC262C51DDC226C58343C /* Pods-Runner.release.xcconfig */, + 1C25B3513592ABFAAB2831E2 /* Pods-Runner.profile.xcconfig */, + BEA42C2E42664EC2D5EA8594 /* Pods-RunnerTests.debug.xcconfig */, + F22AA56F8A11105EB865C7C0 /* Pods-RunnerTests.release.xcconfig */, + 95D0AE963ADC3E494A4D37F0 /* Pods-RunnerTests.profile.xcconfig */, ); - name = Frameworks; + name = Pods; + path = Pods; sourceTree = ""; }; /* End PBXGroup section */ @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - F3CEA25B7E77975C7E78773F /* [CP] Check Pods Manifest.lock */, + 6C13E7904DC3004B41332335 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 2A85CCABAD294FADC367351F /* [CP] Check Pods Manifest.lock */, + 0F9D9D66708D755567BE1F99 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 79EEF1D7B56626FC53E21766 /* [CP] Embed Pods Frameworks */, + D82041256BE3E1863C6F9760 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,7 +323,7 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 2A85CCABAD294FADC367351F /* [CP] Check Pods Manifest.lock */ = { + 0F9D9D66708D755567BE1F99 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -383,43 +383,43 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 79EEF1D7B56626FC53E21766 /* [CP] Embed Pods Frameworks */ = { + 6C13E7904DC3004B41332335 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - F3CEA25B7E77975C7E78773F /* [CP] Check Pods Manifest.lock */ = { + D82041256BE3E1863C6F9760 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = EB8947F87314B3A353FCF67C /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = BEA42C2E42664EC2D5EA8594 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -489,7 +489,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = A224E642823E0216BF12C1D3 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = F22AA56F8A11105EB865C7C0 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -505,7 +505,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 4086F8438660B0B0FA223108 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 95D0AE963ADC3E494A4D37F0 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/firebase-get-to-know-flutter/step_09/pubspec.yaml b/firebase-get-to-know-flutter/step_09/pubspec.yaml index 7a39a8a411..5a192dd65c 100644 --- a/firebase-get-to-know-flutter/step_09/pubspec.yaml +++ b/firebase-get-to-know-flutter/step_09/pubspec.yaml @@ -32,6 +32,7 @@ dependencies: flutter: sdk: flutter + # The following adds the Cupertino Icons font to your application. # Use with the CupertinoIcons class for iOS style icons. cupertino_icons: ^1.0.8 diff --git a/firebase-get-to-know-flutter/step_09/web/index.html b/firebase-get-to-know-flutter/step_09/web/index.html index ec3bcd0112..92f64576d8 100644 --- a/firebase-get-to-know-flutter/step_09/web/index.html +++ b/firebase-get-to-know-flutter/step_09/web/index.html @@ -21,7 +21,7 @@ - + From 4731ae894c61abd7d514bebec9cd220089105921 Mon Sep 17 00:00:00 2001 From: Brett Morgan Date: Fri, 18 Oct 2024 16:16:12 +1100 Subject: [PATCH 024/108] Update `forge2d_game` for flutter beta --- .../step_02/android/gradle.properties | 2 +- forge2d_game/step_02/linux/CMakeLists.txt | 23 +++- .../step_02/linux/{runner => }/main.cc | 0 .../linux}/my_application.cc | 6 - .../linux/{runner => }/my_application.h | 0 .../step_02/linux/runner/CMakeLists.txt | 26 ---- forge2d_game/step_02/pubspec.yaml | 4 +- forge2d_game/step_02/web/index.html | 2 +- .../step_03/android/gradle.properties | 2 +- forge2d_game/step_03/linux/CMakeLists.txt | 23 +++- .../step_03/linux/{runner => }/main.cc | 0 .../linux}/my_application.cc | 6 - .../linux/{runner => }/my_application.h | 0 .../step_03/linux/runner/CMakeLists.txt | 26 ---- forge2d_game/step_03/pubspec.yaml | 4 +- forge2d_game/step_03/web/index.html | 2 +- .../step_04/android/gradle.properties | 2 +- forge2d_game/step_04/linux/CMakeLists.txt | 23 +++- .../step_04/linux/{runner => }/main.cc | 0 .../linux}/my_application.cc | 6 - .../linux/{runner => }/my_application.h | 0 .../step_04/linux/runner/CMakeLists.txt | 26 ---- forge2d_game/step_04/pubspec.yaml | 4 +- forge2d_game/step_04/web/index.html | 2 +- .../step_05/android/gradle.properties | 2 +- forge2d_game/step_05/linux/CMakeLists.txt | 23 +++- .../step_05/linux/{runner => }/main.cc | 0 .../linux}/my_application.cc | 6 - .../linux/{runner => }/my_application.h | 0 .../step_05/linux/runner/CMakeLists.txt | 26 ---- forge2d_game/step_05/pubspec.yaml | 4 +- forge2d_game/step_05/web/index.html | 2 +- .../step_06/android/gradle.properties | 2 +- forge2d_game/step_06/linux/CMakeLists.txt | 23 +++- .../step_06/linux/{runner => }/main.cc | 0 forge2d_game/step_06/linux/my_application.cc | 124 +++++++++++++++++ .../linux/{runner => }/my_application.h | 0 .../step_06/linux/runner/CMakeLists.txt | 26 ---- .../step_06/linux/runner/my_application.cc | 130 ------------------ forge2d_game/step_06/pubspec.yaml | 4 +- forge2d_game/step_06/web/index.html | 2 +- .../step_07/android/gradle.properties | 2 +- forge2d_game/step_07/linux/CMakeLists.txt | 23 +++- .../step_07/linux/{runner => }/main.cc | 0 forge2d_game/step_07/linux/my_application.cc | 124 +++++++++++++++++ .../linux/{runner => }/my_application.h | 0 .../step_07/linux/runner/CMakeLists.txt | 26 ---- .../step_07/linux/runner/my_application.cc | 130 ------------------ forge2d_game/step_07/pubspec.yaml | 4 +- forge2d_game/step_07/web/index.html | 2 +- 50 files changed, 392 insertions(+), 482 deletions(-) rename forge2d_game/step_02/linux/{runner => }/main.cc (100%) rename forge2d_game/{step_04/linux/runner => step_02/linux}/my_application.cc (93%) rename forge2d_game/step_02/linux/{runner => }/my_application.h (100%) delete mode 100644 forge2d_game/step_02/linux/runner/CMakeLists.txt rename forge2d_game/step_03/linux/{runner => }/main.cc (100%) rename forge2d_game/{step_02/linux/runner => step_03/linux}/my_application.cc (93%) rename forge2d_game/step_03/linux/{runner => }/my_application.h (100%) delete mode 100644 forge2d_game/step_03/linux/runner/CMakeLists.txt rename forge2d_game/step_04/linux/{runner => }/main.cc (100%) rename forge2d_game/{step_05/linux/runner => step_04/linux}/my_application.cc (93%) rename forge2d_game/step_04/linux/{runner => }/my_application.h (100%) delete mode 100644 forge2d_game/step_04/linux/runner/CMakeLists.txt rename forge2d_game/step_05/linux/{runner => }/main.cc (100%) rename forge2d_game/{step_03/linux/runner => step_05/linux}/my_application.cc (93%) rename forge2d_game/step_05/linux/{runner => }/my_application.h (100%) delete mode 100644 forge2d_game/step_05/linux/runner/CMakeLists.txt rename forge2d_game/step_06/linux/{runner => }/main.cc (100%) create mode 100644 forge2d_game/step_06/linux/my_application.cc rename forge2d_game/step_06/linux/{runner => }/my_application.h (100%) delete mode 100644 forge2d_game/step_06/linux/runner/CMakeLists.txt delete mode 100644 forge2d_game/step_06/linux/runner/my_application.cc rename forge2d_game/step_07/linux/{runner => }/main.cc (100%) create mode 100644 forge2d_game/step_07/linux/my_application.cc rename forge2d_game/step_07/linux/{runner => }/my_application.h (100%) delete mode 100644 forge2d_game/step_07/linux/runner/CMakeLists.txt delete mode 100644 forge2d_game/step_07/linux/runner/my_application.cc diff --git a/forge2d_game/step_02/android/gradle.properties b/forge2d_game/step_02/android/gradle.properties index f018a61817..2597170821 100644 --- a/forge2d_game/step_02/android/gradle.properties +++ b/forge2d_game/step_02/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/forge2d_game/step_02/linux/CMakeLists.txt b/forge2d_game/step_02/linux/CMakeLists.txt index 784bc59065..4451095030 100644 --- a/forge2d_game/step_02/linux/CMakeLists.txt +++ b/forge2d_game/step_02/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.13) +cmake_minimum_required(VERSION 3.10) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,8 +54,25 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -# Application build; see runner/CMakeLists.txt. -add_subdirectory("runner") +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Define the application target. To change its name, change BINARY_NAME above, +# not the value here, or `flutter run` will no longer work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/forge2d_game/step_02/linux/runner/main.cc b/forge2d_game/step_02/linux/main.cc similarity index 100% rename from forge2d_game/step_02/linux/runner/main.cc rename to forge2d_game/step_02/linux/main.cc diff --git a/forge2d_game/step_04/linux/runner/my_application.cc b/forge2d_game/step_02/linux/my_application.cc similarity index 93% rename from forge2d_game/step_04/linux/runner/my_application.cc rename to forge2d_game/step_02/linux/my_application.cc index 9a172938c7..68a614170c 100644 --- a/forge2d_game/step_04/linux/runner/my_application.cc +++ b/forge2d_game/step_02/linux/my_application.cc @@ -117,12 +117,6 @@ static void my_application_class_init(MyApplicationClass* klass) { static void my_application_init(MyApplication* self) {} MyApplication* my_application_new() { - // Set the program name to the application ID, which helps various systems - // like GTK and desktop environments map this running application to its - // corresponding .desktop file. This ensures better integration by allowing - // the application to be recognized beyond its binary name. - g_set_prgname(APPLICATION_ID); - return MY_APPLICATION(g_object_new(my_application_get_type(), "application-id", APPLICATION_ID, "flags", G_APPLICATION_NON_UNIQUE, diff --git a/forge2d_game/step_02/linux/runner/my_application.h b/forge2d_game/step_02/linux/my_application.h similarity index 100% rename from forge2d_game/step_02/linux/runner/my_application.h rename to forge2d_game/step_02/linux/my_application.h diff --git a/forge2d_game/step_02/linux/runner/CMakeLists.txt b/forge2d_game/step_02/linux/runner/CMakeLists.txt deleted file mode 100644 index e97dabc702..0000000000 --- a/forge2d_game/step_02/linux/runner/CMakeLists.txt +++ /dev/null @@ -1,26 +0,0 @@ -cmake_minimum_required(VERSION 3.13) -project(runner LANGUAGES CXX) - -# Define the application target. To change its name, change BINARY_NAME in the -# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer -# work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add preprocessor definitions for the application ID. -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) - -target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/forge2d_game/step_02/pubspec.yaml b/forge2d_game/step_02/pubspec.yaml index b2aa0f77c4..0d24a3a6dd 100644 --- a/forge2d_game/step_02/pubspec.yaml +++ b/forge2d_game/step_02/pubspec.yaml @@ -10,7 +10,7 @@ dependencies: flutter: sdk: flutter characters: ^1.3.0 - flame: ^1.20.0 + flame: ^1.21.0 flame_forge2d: ^0.18.2+1 flame_kenney_xml: ^0.1.1+1 xml: ^6.5.0 @@ -18,7 +18,7 @@ dependencies: dev_dependencies: flutter_test: sdk: flutter - flutter_lints: ^5.0.0 + flutter_lints: ^4.0.0 flutter: uses-material-design: true diff --git a/forge2d_game/step_02/web/index.html b/forge2d_game/step_02/web/index.html index 500ab53278..405c6e494e 100644 --- a/forge2d_game/step_02/web/index.html +++ b/forge2d_game/step_02/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/forge2d_game/step_03/android/gradle.properties b/forge2d_game/step_03/android/gradle.properties index f018a61817..2597170821 100644 --- a/forge2d_game/step_03/android/gradle.properties +++ b/forge2d_game/step_03/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/forge2d_game/step_03/linux/CMakeLists.txt b/forge2d_game/step_03/linux/CMakeLists.txt index 784bc59065..4451095030 100644 --- a/forge2d_game/step_03/linux/CMakeLists.txt +++ b/forge2d_game/step_03/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.13) +cmake_minimum_required(VERSION 3.10) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,8 +54,25 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -# Application build; see runner/CMakeLists.txt. -add_subdirectory("runner") +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Define the application target. To change its name, change BINARY_NAME above, +# not the value here, or `flutter run` will no longer work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/forge2d_game/step_03/linux/runner/main.cc b/forge2d_game/step_03/linux/main.cc similarity index 100% rename from forge2d_game/step_03/linux/runner/main.cc rename to forge2d_game/step_03/linux/main.cc diff --git a/forge2d_game/step_02/linux/runner/my_application.cc b/forge2d_game/step_03/linux/my_application.cc similarity index 93% rename from forge2d_game/step_02/linux/runner/my_application.cc rename to forge2d_game/step_03/linux/my_application.cc index 9a172938c7..68a614170c 100644 --- a/forge2d_game/step_02/linux/runner/my_application.cc +++ b/forge2d_game/step_03/linux/my_application.cc @@ -117,12 +117,6 @@ static void my_application_class_init(MyApplicationClass* klass) { static void my_application_init(MyApplication* self) {} MyApplication* my_application_new() { - // Set the program name to the application ID, which helps various systems - // like GTK and desktop environments map this running application to its - // corresponding .desktop file. This ensures better integration by allowing - // the application to be recognized beyond its binary name. - g_set_prgname(APPLICATION_ID); - return MY_APPLICATION(g_object_new(my_application_get_type(), "application-id", APPLICATION_ID, "flags", G_APPLICATION_NON_UNIQUE, diff --git a/forge2d_game/step_03/linux/runner/my_application.h b/forge2d_game/step_03/linux/my_application.h similarity index 100% rename from forge2d_game/step_03/linux/runner/my_application.h rename to forge2d_game/step_03/linux/my_application.h diff --git a/forge2d_game/step_03/linux/runner/CMakeLists.txt b/forge2d_game/step_03/linux/runner/CMakeLists.txt deleted file mode 100644 index e97dabc702..0000000000 --- a/forge2d_game/step_03/linux/runner/CMakeLists.txt +++ /dev/null @@ -1,26 +0,0 @@ -cmake_minimum_required(VERSION 3.13) -project(runner LANGUAGES CXX) - -# Define the application target. To change its name, change BINARY_NAME in the -# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer -# work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add preprocessor definitions for the application ID. -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) - -target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/forge2d_game/step_03/pubspec.yaml b/forge2d_game/step_03/pubspec.yaml index e6f9c1f8a2..63290065bd 100644 --- a/forge2d_game/step_03/pubspec.yaml +++ b/forge2d_game/step_03/pubspec.yaml @@ -10,7 +10,7 @@ dependencies: flutter: sdk: flutter characters: ^1.3.0 - flame: ^1.20.0 + flame: ^1.21.0 flame_forge2d: ^0.18.2+1 flame_kenney_xml: ^0.1.1+1 xml: ^6.5.0 @@ -18,7 +18,7 @@ dependencies: dev_dependencies: flutter_test: sdk: flutter - flutter_lints: ^5.0.0 + flutter_lints: ^4.0.0 flutter: uses-material-design: true diff --git a/forge2d_game/step_03/web/index.html b/forge2d_game/step_03/web/index.html index 500ab53278..405c6e494e 100644 --- a/forge2d_game/step_03/web/index.html +++ b/forge2d_game/step_03/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/forge2d_game/step_04/android/gradle.properties b/forge2d_game/step_04/android/gradle.properties index f018a61817..2597170821 100644 --- a/forge2d_game/step_04/android/gradle.properties +++ b/forge2d_game/step_04/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/forge2d_game/step_04/linux/CMakeLists.txt b/forge2d_game/step_04/linux/CMakeLists.txt index 784bc59065..4451095030 100644 --- a/forge2d_game/step_04/linux/CMakeLists.txt +++ b/forge2d_game/step_04/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.13) +cmake_minimum_required(VERSION 3.10) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,8 +54,25 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -# Application build; see runner/CMakeLists.txt. -add_subdirectory("runner") +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Define the application target. To change its name, change BINARY_NAME above, +# not the value here, or `flutter run` will no longer work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/forge2d_game/step_04/linux/runner/main.cc b/forge2d_game/step_04/linux/main.cc similarity index 100% rename from forge2d_game/step_04/linux/runner/main.cc rename to forge2d_game/step_04/linux/main.cc diff --git a/forge2d_game/step_05/linux/runner/my_application.cc b/forge2d_game/step_04/linux/my_application.cc similarity index 93% rename from forge2d_game/step_05/linux/runner/my_application.cc rename to forge2d_game/step_04/linux/my_application.cc index 9a172938c7..68a614170c 100644 --- a/forge2d_game/step_05/linux/runner/my_application.cc +++ b/forge2d_game/step_04/linux/my_application.cc @@ -117,12 +117,6 @@ static void my_application_class_init(MyApplicationClass* klass) { static void my_application_init(MyApplication* self) {} MyApplication* my_application_new() { - // Set the program name to the application ID, which helps various systems - // like GTK and desktop environments map this running application to its - // corresponding .desktop file. This ensures better integration by allowing - // the application to be recognized beyond its binary name. - g_set_prgname(APPLICATION_ID); - return MY_APPLICATION(g_object_new(my_application_get_type(), "application-id", APPLICATION_ID, "flags", G_APPLICATION_NON_UNIQUE, diff --git a/forge2d_game/step_04/linux/runner/my_application.h b/forge2d_game/step_04/linux/my_application.h similarity index 100% rename from forge2d_game/step_04/linux/runner/my_application.h rename to forge2d_game/step_04/linux/my_application.h diff --git a/forge2d_game/step_04/linux/runner/CMakeLists.txt b/forge2d_game/step_04/linux/runner/CMakeLists.txt deleted file mode 100644 index e97dabc702..0000000000 --- a/forge2d_game/step_04/linux/runner/CMakeLists.txt +++ /dev/null @@ -1,26 +0,0 @@ -cmake_minimum_required(VERSION 3.13) -project(runner LANGUAGES CXX) - -# Define the application target. To change its name, change BINARY_NAME in the -# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer -# work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add preprocessor definitions for the application ID. -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) - -target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/forge2d_game/step_04/pubspec.yaml b/forge2d_game/step_04/pubspec.yaml index e6f9c1f8a2..63290065bd 100644 --- a/forge2d_game/step_04/pubspec.yaml +++ b/forge2d_game/step_04/pubspec.yaml @@ -10,7 +10,7 @@ dependencies: flutter: sdk: flutter characters: ^1.3.0 - flame: ^1.20.0 + flame: ^1.21.0 flame_forge2d: ^0.18.2+1 flame_kenney_xml: ^0.1.1+1 xml: ^6.5.0 @@ -18,7 +18,7 @@ dependencies: dev_dependencies: flutter_test: sdk: flutter - flutter_lints: ^5.0.0 + flutter_lints: ^4.0.0 flutter: uses-material-design: true diff --git a/forge2d_game/step_04/web/index.html b/forge2d_game/step_04/web/index.html index 500ab53278..405c6e494e 100644 --- a/forge2d_game/step_04/web/index.html +++ b/forge2d_game/step_04/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/forge2d_game/step_05/android/gradle.properties b/forge2d_game/step_05/android/gradle.properties index f018a61817..2597170821 100644 --- a/forge2d_game/step_05/android/gradle.properties +++ b/forge2d_game/step_05/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/forge2d_game/step_05/linux/CMakeLists.txt b/forge2d_game/step_05/linux/CMakeLists.txt index 784bc59065..4451095030 100644 --- a/forge2d_game/step_05/linux/CMakeLists.txt +++ b/forge2d_game/step_05/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.13) +cmake_minimum_required(VERSION 3.10) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,8 +54,25 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -# Application build; see runner/CMakeLists.txt. -add_subdirectory("runner") +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Define the application target. To change its name, change BINARY_NAME above, +# not the value here, or `flutter run` will no longer work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/forge2d_game/step_05/linux/runner/main.cc b/forge2d_game/step_05/linux/main.cc similarity index 100% rename from forge2d_game/step_05/linux/runner/main.cc rename to forge2d_game/step_05/linux/main.cc diff --git a/forge2d_game/step_03/linux/runner/my_application.cc b/forge2d_game/step_05/linux/my_application.cc similarity index 93% rename from forge2d_game/step_03/linux/runner/my_application.cc rename to forge2d_game/step_05/linux/my_application.cc index 9a172938c7..68a614170c 100644 --- a/forge2d_game/step_03/linux/runner/my_application.cc +++ b/forge2d_game/step_05/linux/my_application.cc @@ -117,12 +117,6 @@ static void my_application_class_init(MyApplicationClass* klass) { static void my_application_init(MyApplication* self) {} MyApplication* my_application_new() { - // Set the program name to the application ID, which helps various systems - // like GTK and desktop environments map this running application to its - // corresponding .desktop file. This ensures better integration by allowing - // the application to be recognized beyond its binary name. - g_set_prgname(APPLICATION_ID); - return MY_APPLICATION(g_object_new(my_application_get_type(), "application-id", APPLICATION_ID, "flags", G_APPLICATION_NON_UNIQUE, diff --git a/forge2d_game/step_05/linux/runner/my_application.h b/forge2d_game/step_05/linux/my_application.h similarity index 100% rename from forge2d_game/step_05/linux/runner/my_application.h rename to forge2d_game/step_05/linux/my_application.h diff --git a/forge2d_game/step_05/linux/runner/CMakeLists.txt b/forge2d_game/step_05/linux/runner/CMakeLists.txt deleted file mode 100644 index e97dabc702..0000000000 --- a/forge2d_game/step_05/linux/runner/CMakeLists.txt +++ /dev/null @@ -1,26 +0,0 @@ -cmake_minimum_required(VERSION 3.13) -project(runner LANGUAGES CXX) - -# Define the application target. To change its name, change BINARY_NAME in the -# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer -# work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add preprocessor definitions for the application ID. -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) - -target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/forge2d_game/step_05/pubspec.yaml b/forge2d_game/step_05/pubspec.yaml index ef3ccb6a7f..d3c28402fc 100644 --- a/forge2d_game/step_05/pubspec.yaml +++ b/forge2d_game/step_05/pubspec.yaml @@ -10,7 +10,7 @@ dependencies: flutter: sdk: flutter characters: ^1.3.0 - flame: ^1.20.0 + flame: ^1.21.0 flame_forge2d: ^0.18.2+1 flame_kenney_xml: ^0.1.1+1 xml: ^6.5.0 @@ -19,7 +19,7 @@ dependencies: dev_dependencies: flutter_test: sdk: flutter - flutter_lints: ^5.0.0 + flutter_lints: ^4.0.0 flutter: uses-material-design: true diff --git a/forge2d_game/step_05/web/index.html b/forge2d_game/step_05/web/index.html index 500ab53278..405c6e494e 100644 --- a/forge2d_game/step_05/web/index.html +++ b/forge2d_game/step_05/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/forge2d_game/step_06/android/gradle.properties b/forge2d_game/step_06/android/gradle.properties index f018a61817..2597170821 100644 --- a/forge2d_game/step_06/android/gradle.properties +++ b/forge2d_game/step_06/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/forge2d_game/step_06/linux/CMakeLists.txt b/forge2d_game/step_06/linux/CMakeLists.txt index 784bc59065..4451095030 100644 --- a/forge2d_game/step_06/linux/CMakeLists.txt +++ b/forge2d_game/step_06/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.13) +cmake_minimum_required(VERSION 3.10) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,8 +54,25 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -# Application build; see runner/CMakeLists.txt. -add_subdirectory("runner") +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Define the application target. To change its name, change BINARY_NAME above, +# not the value here, or `flutter run` will no longer work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/forge2d_game/step_06/linux/runner/main.cc b/forge2d_game/step_06/linux/main.cc similarity index 100% rename from forge2d_game/step_06/linux/runner/main.cc rename to forge2d_game/step_06/linux/main.cc diff --git a/forge2d_game/step_06/linux/my_application.cc b/forge2d_game/step_06/linux/my_application.cc new file mode 100644 index 0000000000..68a614170c --- /dev/null +++ b/forge2d_game/step_06/linux/my_application.cc @@ -0,0 +1,124 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "forge2d_game"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "forge2d_game"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/forge2d_game/step_06/linux/runner/my_application.h b/forge2d_game/step_06/linux/my_application.h similarity index 100% rename from forge2d_game/step_06/linux/runner/my_application.h rename to forge2d_game/step_06/linux/my_application.h diff --git a/forge2d_game/step_06/linux/runner/CMakeLists.txt b/forge2d_game/step_06/linux/runner/CMakeLists.txt deleted file mode 100644 index e97dabc702..0000000000 --- a/forge2d_game/step_06/linux/runner/CMakeLists.txt +++ /dev/null @@ -1,26 +0,0 @@ -cmake_minimum_required(VERSION 3.13) -project(runner LANGUAGES CXX) - -# Define the application target. To change its name, change BINARY_NAME in the -# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer -# work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add preprocessor definitions for the application ID. -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) - -target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/forge2d_game/step_06/linux/runner/my_application.cc b/forge2d_game/step_06/linux/runner/my_application.cc deleted file mode 100644 index 9a172938c7..0000000000 --- a/forge2d_game/step_06/linux/runner/my_application.cc +++ /dev/null @@ -1,130 +0,0 @@ -#include "my_application.h" - -#include -#ifdef GDK_WINDOWING_X11 -#include -#endif - -#include "flutter/generated_plugin_registrant.h" - -struct _MyApplication { - GtkApplication parent_instance; - char** dart_entrypoint_arguments; -}; - -G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) - -// Implements GApplication::activate. -static void my_application_activate(GApplication* application) { - MyApplication* self = MY_APPLICATION(application); - GtkWindow* window = - GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); - - // Use a header bar when running in GNOME as this is the common style used - // by applications and is the setup most users will be using (e.g. Ubuntu - // desktop). - // If running on X and not using GNOME then just use a traditional title bar - // in case the window manager does more exotic layout, e.g. tiling. - // If running on Wayland assume the header bar will work (may need changing - // if future cases occur). - gboolean use_header_bar = TRUE; -#ifdef GDK_WINDOWING_X11 - GdkScreen* screen = gtk_window_get_screen(window); - if (GDK_IS_X11_SCREEN(screen)) { - const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); - if (g_strcmp0(wm_name, "GNOME Shell") != 0) { - use_header_bar = FALSE; - } - } -#endif - if (use_header_bar) { - GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); - gtk_widget_show(GTK_WIDGET(header_bar)); - gtk_header_bar_set_title(header_bar, "forge2d_game"); - gtk_header_bar_set_show_close_button(header_bar, TRUE); - gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); - } else { - gtk_window_set_title(window, "forge2d_game"); - } - - gtk_window_set_default_size(window, 1280, 720); - gtk_widget_show(GTK_WIDGET(window)); - - g_autoptr(FlDartProject) project = fl_dart_project_new(); - fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); - - FlView* view = fl_view_new(project); - gtk_widget_show(GTK_WIDGET(view)); - gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); - - fl_register_plugins(FL_PLUGIN_REGISTRY(view)); - - gtk_widget_grab_focus(GTK_WIDGET(view)); -} - -// Implements GApplication::local_command_line. -static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { - MyApplication* self = MY_APPLICATION(application); - // Strip out the first argument as it is the binary name. - self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); - - g_autoptr(GError) error = nullptr; - if (!g_application_register(application, nullptr, &error)) { - g_warning("Failed to register: %s", error->message); - *exit_status = 1; - return TRUE; - } - - g_application_activate(application); - *exit_status = 0; - - return TRUE; -} - -// Implements GApplication::startup. -static void my_application_startup(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application startup. - - G_APPLICATION_CLASS(my_application_parent_class)->startup(application); -} - -// Implements GApplication::shutdown. -static void my_application_shutdown(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application shutdown. - - G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); -} - -// Implements GObject::dispose. -static void my_application_dispose(GObject* object) { - MyApplication* self = MY_APPLICATION(object); - g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); - G_OBJECT_CLASS(my_application_parent_class)->dispose(object); -} - -static void my_application_class_init(MyApplicationClass* klass) { - G_APPLICATION_CLASS(klass)->activate = my_application_activate; - G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; - G_APPLICATION_CLASS(klass)->startup = my_application_startup; - G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; - G_OBJECT_CLASS(klass)->dispose = my_application_dispose; -} - -static void my_application_init(MyApplication* self) {} - -MyApplication* my_application_new() { - // Set the program name to the application ID, which helps various systems - // like GTK and desktop environments map this running application to its - // corresponding .desktop file. This ensures better integration by allowing - // the application to be recognized beyond its binary name. - g_set_prgname(APPLICATION_ID); - - return MY_APPLICATION(g_object_new(my_application_get_type(), - "application-id", APPLICATION_ID, - "flags", G_APPLICATION_NON_UNIQUE, - nullptr)); -} diff --git a/forge2d_game/step_06/pubspec.yaml b/forge2d_game/step_06/pubspec.yaml index ef3ccb6a7f..d3c28402fc 100644 --- a/forge2d_game/step_06/pubspec.yaml +++ b/forge2d_game/step_06/pubspec.yaml @@ -10,7 +10,7 @@ dependencies: flutter: sdk: flutter characters: ^1.3.0 - flame: ^1.20.0 + flame: ^1.21.0 flame_forge2d: ^0.18.2+1 flame_kenney_xml: ^0.1.1+1 xml: ^6.5.0 @@ -19,7 +19,7 @@ dependencies: dev_dependencies: flutter_test: sdk: flutter - flutter_lints: ^5.0.0 + flutter_lints: ^4.0.0 flutter: uses-material-design: true diff --git a/forge2d_game/step_06/web/index.html b/forge2d_game/step_06/web/index.html index 500ab53278..405c6e494e 100644 --- a/forge2d_game/step_06/web/index.html +++ b/forge2d_game/step_06/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/forge2d_game/step_07/android/gradle.properties b/forge2d_game/step_07/android/gradle.properties index f018a61817..2597170821 100644 --- a/forge2d_game/step_07/android/gradle.properties +++ b/forge2d_game/step_07/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/forge2d_game/step_07/linux/CMakeLists.txt b/forge2d_game/step_07/linux/CMakeLists.txt index 784bc59065..4451095030 100644 --- a/forge2d_game/step_07/linux/CMakeLists.txt +++ b/forge2d_game/step_07/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.13) +cmake_minimum_required(VERSION 3.10) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,8 +54,25 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -# Application build; see runner/CMakeLists.txt. -add_subdirectory("runner") +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Define the application target. To change its name, change BINARY_NAME above, +# not the value here, or `flutter run` will no longer work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/forge2d_game/step_07/linux/runner/main.cc b/forge2d_game/step_07/linux/main.cc similarity index 100% rename from forge2d_game/step_07/linux/runner/main.cc rename to forge2d_game/step_07/linux/main.cc diff --git a/forge2d_game/step_07/linux/my_application.cc b/forge2d_game/step_07/linux/my_application.cc new file mode 100644 index 0000000000..68a614170c --- /dev/null +++ b/forge2d_game/step_07/linux/my_application.cc @@ -0,0 +1,124 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "forge2d_game"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "forge2d_game"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/forge2d_game/step_07/linux/runner/my_application.h b/forge2d_game/step_07/linux/my_application.h similarity index 100% rename from forge2d_game/step_07/linux/runner/my_application.h rename to forge2d_game/step_07/linux/my_application.h diff --git a/forge2d_game/step_07/linux/runner/CMakeLists.txt b/forge2d_game/step_07/linux/runner/CMakeLists.txt deleted file mode 100644 index e97dabc702..0000000000 --- a/forge2d_game/step_07/linux/runner/CMakeLists.txt +++ /dev/null @@ -1,26 +0,0 @@ -cmake_minimum_required(VERSION 3.13) -project(runner LANGUAGES CXX) - -# Define the application target. To change its name, change BINARY_NAME in the -# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer -# work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add preprocessor definitions for the application ID. -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) - -target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/forge2d_game/step_07/linux/runner/my_application.cc b/forge2d_game/step_07/linux/runner/my_application.cc deleted file mode 100644 index 9a172938c7..0000000000 --- a/forge2d_game/step_07/linux/runner/my_application.cc +++ /dev/null @@ -1,130 +0,0 @@ -#include "my_application.h" - -#include -#ifdef GDK_WINDOWING_X11 -#include -#endif - -#include "flutter/generated_plugin_registrant.h" - -struct _MyApplication { - GtkApplication parent_instance; - char** dart_entrypoint_arguments; -}; - -G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) - -// Implements GApplication::activate. -static void my_application_activate(GApplication* application) { - MyApplication* self = MY_APPLICATION(application); - GtkWindow* window = - GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); - - // Use a header bar when running in GNOME as this is the common style used - // by applications and is the setup most users will be using (e.g. Ubuntu - // desktop). - // If running on X and not using GNOME then just use a traditional title bar - // in case the window manager does more exotic layout, e.g. tiling. - // If running on Wayland assume the header bar will work (may need changing - // if future cases occur). - gboolean use_header_bar = TRUE; -#ifdef GDK_WINDOWING_X11 - GdkScreen* screen = gtk_window_get_screen(window); - if (GDK_IS_X11_SCREEN(screen)) { - const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); - if (g_strcmp0(wm_name, "GNOME Shell") != 0) { - use_header_bar = FALSE; - } - } -#endif - if (use_header_bar) { - GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); - gtk_widget_show(GTK_WIDGET(header_bar)); - gtk_header_bar_set_title(header_bar, "forge2d_game"); - gtk_header_bar_set_show_close_button(header_bar, TRUE); - gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); - } else { - gtk_window_set_title(window, "forge2d_game"); - } - - gtk_window_set_default_size(window, 1280, 720); - gtk_widget_show(GTK_WIDGET(window)); - - g_autoptr(FlDartProject) project = fl_dart_project_new(); - fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); - - FlView* view = fl_view_new(project); - gtk_widget_show(GTK_WIDGET(view)); - gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); - - fl_register_plugins(FL_PLUGIN_REGISTRY(view)); - - gtk_widget_grab_focus(GTK_WIDGET(view)); -} - -// Implements GApplication::local_command_line. -static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { - MyApplication* self = MY_APPLICATION(application); - // Strip out the first argument as it is the binary name. - self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); - - g_autoptr(GError) error = nullptr; - if (!g_application_register(application, nullptr, &error)) { - g_warning("Failed to register: %s", error->message); - *exit_status = 1; - return TRUE; - } - - g_application_activate(application); - *exit_status = 0; - - return TRUE; -} - -// Implements GApplication::startup. -static void my_application_startup(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application startup. - - G_APPLICATION_CLASS(my_application_parent_class)->startup(application); -} - -// Implements GApplication::shutdown. -static void my_application_shutdown(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application shutdown. - - G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); -} - -// Implements GObject::dispose. -static void my_application_dispose(GObject* object) { - MyApplication* self = MY_APPLICATION(object); - g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); - G_OBJECT_CLASS(my_application_parent_class)->dispose(object); -} - -static void my_application_class_init(MyApplicationClass* klass) { - G_APPLICATION_CLASS(klass)->activate = my_application_activate; - G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; - G_APPLICATION_CLASS(klass)->startup = my_application_startup; - G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; - G_OBJECT_CLASS(klass)->dispose = my_application_dispose; -} - -static void my_application_init(MyApplication* self) {} - -MyApplication* my_application_new() { - // Set the program name to the application ID, which helps various systems - // like GTK and desktop environments map this running application to its - // corresponding .desktop file. This ensures better integration by allowing - // the application to be recognized beyond its binary name. - g_set_prgname(APPLICATION_ID); - - return MY_APPLICATION(g_object_new(my_application_get_type(), - "application-id", APPLICATION_ID, - "flags", G_APPLICATION_NON_UNIQUE, - nullptr)); -} diff --git a/forge2d_game/step_07/pubspec.yaml b/forge2d_game/step_07/pubspec.yaml index ef3ccb6a7f..d3c28402fc 100644 --- a/forge2d_game/step_07/pubspec.yaml +++ b/forge2d_game/step_07/pubspec.yaml @@ -10,7 +10,7 @@ dependencies: flutter: sdk: flutter characters: ^1.3.0 - flame: ^1.20.0 + flame: ^1.21.0 flame_forge2d: ^0.18.2+1 flame_kenney_xml: ^0.1.1+1 xml: ^6.5.0 @@ -19,7 +19,7 @@ dependencies: dev_dependencies: flutter_test: sdk: flutter - flutter_lints: ^5.0.0 + flutter_lints: ^4.0.0 flutter: uses-material-design: true diff --git a/forge2d_game/step_07/web/index.html b/forge2d_game/step_07/web/index.html index 500ab53278..405c6e494e 100644 --- a/forge2d_game/step_07/web/index.html +++ b/forge2d_game/step_07/web/index.html @@ -21,7 +21,7 @@ - + From b581095ff7e9535a3d6231dcfa0cde8e65c32f34 Mon Sep 17 00:00:00 2001 From: Brett Morgan Date: Fri, 18 Oct 2024 16:36:58 +1100 Subject: [PATCH 025/108] Update `generate_crossword` for flutter beta --- .../step_02/android/gradle.properties | 2 +- .../step_02/linux/CMakeLists.txt | 23 +++- .../step_02/linux/{runner => }/main.cc | 0 .../linux}/my_application.cc | 6 - .../linux/{runner => }/my_application.h | 0 .../step_02/linux/runner/CMakeLists.txt | 26 ---- generate_crossword/step_02/pubspec.yaml | 10 +- .../step_03/android/gradle.properties | 2 +- .../step_03/linux/CMakeLists.txt | 23 +++- .../step_03/linux/{runner => }/main.cc | 0 .../linux}/my_application.cc | 6 - .../linux/{runner => }/my_application.h | 0 .../step_03/linux/runner/CMakeLists.txt | 26 ---- generate_crossword/step_03/pubspec.yaml | 10 +- .../step_04/android/gradle.properties | 2 +- .../step_04/linux/CMakeLists.txt | 23 +++- .../step_04/linux/{runner => }/main.cc | 0 .../linux}/my_application.cc | 6 - .../linux/{runner => }/my_application.h | 0 .../step_04/linux/runner/CMakeLists.txt | 26 ---- generate_crossword/step_04/pubspec.yaml | 10 +- .../step_05_a/android/gradle.properties | 2 +- .../step_05_a/linux/CMakeLists.txt | 23 +++- .../step_05_a/linux/{runner => }/main.cc | 0 .../linux}/my_application.cc | 6 - .../linux/{runner => }/my_application.h | 0 .../step_05_a/linux/runner/CMakeLists.txt | 26 ---- generate_crossword/step_05_a/pubspec.yaml | 10 +- .../step_05_b/android/gradle.properties | 2 +- .../step_05_b/linux/CMakeLists.txt | 23 +++- .../step_05_b/linux/{runner => }/main.cc | 0 .../step_05_b/linux/my_application.cc | 124 +++++++++++++++++ .../linux/{runner => }/my_application.h | 0 .../step_05_b/linux/runner/CMakeLists.txt | 26 ---- .../step_05_b/linux/runner/my_application.cc | 130 ------------------ generate_crossword/step_05_b/pubspec.yaml | 10 +- .../step_05_c/android/gradle.properties | 2 +- .../step_05_c/linux/CMakeLists.txt | 23 +++- .../step_05_c/linux/{runner => }/main.cc | 0 .../step_05_c/linux/my_application.cc | 124 +++++++++++++++++ .../linux/{runner => }/my_application.h | 0 .../step_05_c/linux/runner/CMakeLists.txt | 26 ---- .../step_05_c/linux/runner/my_application.cc | 130 ------------------ generate_crossword/step_05_c/pubspec.yaml | 10 +- .../step_06/android/gradle.properties | 2 +- .../step_06/linux/CMakeLists.txt | 23 +++- .../step_06/linux/{runner => }/main.cc | 0 .../step_06/linux/my_application.cc | 124 +++++++++++++++++ .../linux/{runner => }/my_application.h | 0 .../step_06/linux/runner/CMakeLists.txt | 26 ---- .../step_06/linux/runner/my_application.cc | 130 ------------------ generate_crossword/step_06/pubspec.yaml | 10 +- .../step_07/android/gradle.properties | 2 +- .../step_07/linux/CMakeLists.txt | 23 +++- .../step_07/linux/{runner => }/main.cc | 0 .../step_07/linux/my_application.cc | 124 +++++++++++++++++ .../linux/{runner => }/my_application.h | 0 .../step_07/linux/runner/CMakeLists.txt | 26 ---- .../step_07/linux/runner/my_application.cc | 130 ------------------ generate_crossword/step_07/pubspec.yaml | 10 +- .../step_08/android/gradle.properties | 2 +- .../step_08/linux/CMakeLists.txt | 23 +++- .../step_08/linux/{runner => }/main.cc | 0 .../step_08/linux/my_application.cc | 124 +++++++++++++++++ .../linux/{runner => }/my_application.h | 0 .../step_08/linux/runner/CMakeLists.txt | 26 ---- .../step_08/linux/runner/my_application.cc | 130 ------------------ generate_crossword/step_08/pubspec.yaml | 10 +- .../step_09/android/gradle.properties | 2 +- .../step_09/linux/CMakeLists.txt | 23 +++- .../step_09/linux/{runner => }/main.cc | 0 .../step_09/linux/my_application.cc | 124 +++++++++++++++++ .../linux/{runner => }/my_application.h | 0 .../step_09/linux/runner/CMakeLists.txt | 26 ---- .../step_09/linux/runner/my_application.cc | 130 ------------------ generate_crossword/step_09/pubspec.yaml | 10 +- 76 files changed, 1004 insertions(+), 1154 deletions(-) rename generate_crossword/step_02/linux/{runner => }/main.cc (100%) rename generate_crossword/{step_04/linux/runner => step_02/linux}/my_application.cc (93%) rename generate_crossword/step_02/linux/{runner => }/my_application.h (100%) delete mode 100644 generate_crossword/step_02/linux/runner/CMakeLists.txt rename generate_crossword/step_03/linux/{runner => }/main.cc (100%) rename generate_crossword/{step_02/linux/runner => step_03/linux}/my_application.cc (93%) rename generate_crossword/step_03/linux/{runner => }/my_application.h (100%) delete mode 100644 generate_crossword/step_03/linux/runner/CMakeLists.txt rename generate_crossword/step_04/linux/{runner => }/main.cc (100%) rename generate_crossword/{step_05_a/linux/runner => step_04/linux}/my_application.cc (93%) rename generate_crossword/step_04/linux/{runner => }/my_application.h (100%) delete mode 100644 generate_crossword/step_04/linux/runner/CMakeLists.txt rename generate_crossword/step_05_a/linux/{runner => }/main.cc (100%) rename generate_crossword/{step_03/linux/runner => step_05_a/linux}/my_application.cc (93%) rename generate_crossword/step_05_a/linux/{runner => }/my_application.h (100%) delete mode 100644 generate_crossword/step_05_a/linux/runner/CMakeLists.txt rename generate_crossword/step_05_b/linux/{runner => }/main.cc (100%) create mode 100644 generate_crossword/step_05_b/linux/my_application.cc rename generate_crossword/step_05_b/linux/{runner => }/my_application.h (100%) delete mode 100644 generate_crossword/step_05_b/linux/runner/CMakeLists.txt delete mode 100644 generate_crossword/step_05_b/linux/runner/my_application.cc rename generate_crossword/step_05_c/linux/{runner => }/main.cc (100%) create mode 100644 generate_crossword/step_05_c/linux/my_application.cc rename generate_crossword/step_05_c/linux/{runner => }/my_application.h (100%) delete mode 100644 generate_crossword/step_05_c/linux/runner/CMakeLists.txt delete mode 100644 generate_crossword/step_05_c/linux/runner/my_application.cc rename generate_crossword/step_06/linux/{runner => }/main.cc (100%) create mode 100644 generate_crossword/step_06/linux/my_application.cc rename generate_crossword/step_06/linux/{runner => }/my_application.h (100%) delete mode 100644 generate_crossword/step_06/linux/runner/CMakeLists.txt delete mode 100644 generate_crossword/step_06/linux/runner/my_application.cc rename generate_crossword/step_07/linux/{runner => }/main.cc (100%) create mode 100644 generate_crossword/step_07/linux/my_application.cc rename generate_crossword/step_07/linux/{runner => }/my_application.h (100%) delete mode 100644 generate_crossword/step_07/linux/runner/CMakeLists.txt delete mode 100644 generate_crossword/step_07/linux/runner/my_application.cc rename generate_crossword/step_08/linux/{runner => }/main.cc (100%) create mode 100644 generate_crossword/step_08/linux/my_application.cc rename generate_crossword/step_08/linux/{runner => }/my_application.h (100%) delete mode 100644 generate_crossword/step_08/linux/runner/CMakeLists.txt delete mode 100644 generate_crossword/step_08/linux/runner/my_application.cc rename generate_crossword/step_09/linux/{runner => }/main.cc (100%) create mode 100644 generate_crossword/step_09/linux/my_application.cc rename generate_crossword/step_09/linux/{runner => }/my_application.h (100%) delete mode 100644 generate_crossword/step_09/linux/runner/CMakeLists.txt delete mode 100644 generate_crossword/step_09/linux/runner/my_application.cc diff --git a/generate_crossword/step_02/android/gradle.properties b/generate_crossword/step_02/android/gradle.properties index f018a61817..2597170821 100644 --- a/generate_crossword/step_02/android/gradle.properties +++ b/generate_crossword/step_02/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/generate_crossword/step_02/linux/CMakeLists.txt b/generate_crossword/step_02/linux/CMakeLists.txt index 76ad2b9b7e..fc29586ba7 100644 --- a/generate_crossword/step_02/linux/CMakeLists.txt +++ b/generate_crossword/step_02/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.13) +cmake_minimum_required(VERSION 3.10) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,8 +54,25 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -# Application build; see runner/CMakeLists.txt. -add_subdirectory("runner") +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Define the application target. To change its name, change BINARY_NAME above, +# not the value here, or `flutter run` will no longer work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/generate_crossword/step_02/linux/runner/main.cc b/generate_crossword/step_02/linux/main.cc similarity index 100% rename from generate_crossword/step_02/linux/runner/main.cc rename to generate_crossword/step_02/linux/main.cc diff --git a/generate_crossword/step_04/linux/runner/my_application.cc b/generate_crossword/step_02/linux/my_application.cc similarity index 93% rename from generate_crossword/step_04/linux/runner/my_application.cc rename to generate_crossword/step_02/linux/my_application.cc index dbf3c88029..7030cf20f4 100644 --- a/generate_crossword/step_04/linux/runner/my_application.cc +++ b/generate_crossword/step_02/linux/my_application.cc @@ -117,12 +117,6 @@ static void my_application_class_init(MyApplicationClass* klass) { static void my_application_init(MyApplication* self) {} MyApplication* my_application_new() { - // Set the program name to the application ID, which helps various systems - // like GTK and desktop environments map this running application to its - // corresponding .desktop file. This ensures better integration by allowing - // the application to be recognized beyond its binary name. - g_set_prgname(APPLICATION_ID); - return MY_APPLICATION(g_object_new(my_application_get_type(), "application-id", APPLICATION_ID, "flags", G_APPLICATION_NON_UNIQUE, diff --git a/generate_crossword/step_02/linux/runner/my_application.h b/generate_crossword/step_02/linux/my_application.h similarity index 100% rename from generate_crossword/step_02/linux/runner/my_application.h rename to generate_crossword/step_02/linux/my_application.h diff --git a/generate_crossword/step_02/linux/runner/CMakeLists.txt b/generate_crossword/step_02/linux/runner/CMakeLists.txt deleted file mode 100644 index e97dabc702..0000000000 --- a/generate_crossword/step_02/linux/runner/CMakeLists.txt +++ /dev/null @@ -1,26 +0,0 @@ -cmake_minimum_required(VERSION 3.13) -project(runner LANGUAGES CXX) - -# Define the application target. To change its name, change BINARY_NAME in the -# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer -# work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add preprocessor definitions for the application ID. -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) - -target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/generate_crossword/step_02/pubspec.yaml b/generate_crossword/step_02/pubspec.yaml index 5437d28aef..247b1f132c 100644 --- a/generate_crossword/step_02/pubspec.yaml +++ b/generate_crossword/step_02/pubspec.yaml @@ -16,17 +16,17 @@ dependencies: intl: ^0.19.0 riverpod: ^2.5.3 riverpod_annotation: ^2.5.3 - two_dimensional_scrollables: ^0.3.2 + two_dimensional_scrollables: ^0.3.3 dev_dependencies: flutter_test: sdk: flutter - flutter_lints: ^5.0.0 + flutter_lints: ^4.0.0 build_runner: ^2.4.13 built_value_generator: ^8.9.2 - custom_lint: ^0.6.10 - riverpod_generator: ^2.4.4 - riverpod_lint: ^2.3.14 + custom_lint: ^0.6.8 + riverpod_generator: ^2.4.3 + riverpod_lint: ^2.3.13 flutter: uses-material-design: true diff --git a/generate_crossword/step_03/android/gradle.properties b/generate_crossword/step_03/android/gradle.properties index f018a61817..2597170821 100644 --- a/generate_crossword/step_03/android/gradle.properties +++ b/generate_crossword/step_03/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/generate_crossword/step_03/linux/CMakeLists.txt b/generate_crossword/step_03/linux/CMakeLists.txt index 76ad2b9b7e..fc29586ba7 100644 --- a/generate_crossword/step_03/linux/CMakeLists.txt +++ b/generate_crossword/step_03/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.13) +cmake_minimum_required(VERSION 3.10) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,8 +54,25 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -# Application build; see runner/CMakeLists.txt. -add_subdirectory("runner") +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Define the application target. To change its name, change BINARY_NAME above, +# not the value here, or `flutter run` will no longer work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/generate_crossword/step_03/linux/runner/main.cc b/generate_crossword/step_03/linux/main.cc similarity index 100% rename from generate_crossword/step_03/linux/runner/main.cc rename to generate_crossword/step_03/linux/main.cc diff --git a/generate_crossword/step_02/linux/runner/my_application.cc b/generate_crossword/step_03/linux/my_application.cc similarity index 93% rename from generate_crossword/step_02/linux/runner/my_application.cc rename to generate_crossword/step_03/linux/my_application.cc index dbf3c88029..7030cf20f4 100644 --- a/generate_crossword/step_02/linux/runner/my_application.cc +++ b/generate_crossword/step_03/linux/my_application.cc @@ -117,12 +117,6 @@ static void my_application_class_init(MyApplicationClass* klass) { static void my_application_init(MyApplication* self) {} MyApplication* my_application_new() { - // Set the program name to the application ID, which helps various systems - // like GTK and desktop environments map this running application to its - // corresponding .desktop file. This ensures better integration by allowing - // the application to be recognized beyond its binary name. - g_set_prgname(APPLICATION_ID); - return MY_APPLICATION(g_object_new(my_application_get_type(), "application-id", APPLICATION_ID, "flags", G_APPLICATION_NON_UNIQUE, diff --git a/generate_crossword/step_03/linux/runner/my_application.h b/generate_crossword/step_03/linux/my_application.h similarity index 100% rename from generate_crossword/step_03/linux/runner/my_application.h rename to generate_crossword/step_03/linux/my_application.h diff --git a/generate_crossword/step_03/linux/runner/CMakeLists.txt b/generate_crossword/step_03/linux/runner/CMakeLists.txt deleted file mode 100644 index e97dabc702..0000000000 --- a/generate_crossword/step_03/linux/runner/CMakeLists.txt +++ /dev/null @@ -1,26 +0,0 @@ -cmake_minimum_required(VERSION 3.13) -project(runner LANGUAGES CXX) - -# Define the application target. To change its name, change BINARY_NAME in the -# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer -# work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add preprocessor definitions for the application ID. -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) - -target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/generate_crossword/step_03/pubspec.yaml b/generate_crossword/step_03/pubspec.yaml index ed0d380d27..4eeb51c8a3 100644 --- a/generate_crossword/step_03/pubspec.yaml +++ b/generate_crossword/step_03/pubspec.yaml @@ -16,17 +16,17 @@ dependencies: intl: ^0.19.0 riverpod: ^2.5.3 riverpod_annotation: ^2.5.3 - two_dimensional_scrollables: ^0.3.2 + two_dimensional_scrollables: ^0.3.3 dev_dependencies: flutter_test: sdk: flutter - flutter_lints: ^5.0.0 + flutter_lints: ^4.0.0 build_runner: ^2.4.13 built_value_generator: ^8.9.2 - custom_lint: ^0.6.10 - riverpod_generator: ^2.4.4 - riverpod_lint: ^2.3.14 + custom_lint: ^0.6.8 + riverpod_generator: ^2.4.3 + riverpod_lint: ^2.3.13 flutter: uses-material-design: true diff --git a/generate_crossword/step_04/android/gradle.properties b/generate_crossword/step_04/android/gradle.properties index f018a61817..2597170821 100644 --- a/generate_crossword/step_04/android/gradle.properties +++ b/generate_crossword/step_04/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/generate_crossword/step_04/linux/CMakeLists.txt b/generate_crossword/step_04/linux/CMakeLists.txt index 76ad2b9b7e..fc29586ba7 100644 --- a/generate_crossword/step_04/linux/CMakeLists.txt +++ b/generate_crossword/step_04/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.13) +cmake_minimum_required(VERSION 3.10) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,8 +54,25 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -# Application build; see runner/CMakeLists.txt. -add_subdirectory("runner") +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Define the application target. To change its name, change BINARY_NAME above, +# not the value here, or `flutter run` will no longer work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/generate_crossword/step_04/linux/runner/main.cc b/generate_crossword/step_04/linux/main.cc similarity index 100% rename from generate_crossword/step_04/linux/runner/main.cc rename to generate_crossword/step_04/linux/main.cc diff --git a/generate_crossword/step_05_a/linux/runner/my_application.cc b/generate_crossword/step_04/linux/my_application.cc similarity index 93% rename from generate_crossword/step_05_a/linux/runner/my_application.cc rename to generate_crossword/step_04/linux/my_application.cc index dbf3c88029..7030cf20f4 100644 --- a/generate_crossword/step_05_a/linux/runner/my_application.cc +++ b/generate_crossword/step_04/linux/my_application.cc @@ -117,12 +117,6 @@ static void my_application_class_init(MyApplicationClass* klass) { static void my_application_init(MyApplication* self) {} MyApplication* my_application_new() { - // Set the program name to the application ID, which helps various systems - // like GTK and desktop environments map this running application to its - // corresponding .desktop file. This ensures better integration by allowing - // the application to be recognized beyond its binary name. - g_set_prgname(APPLICATION_ID); - return MY_APPLICATION(g_object_new(my_application_get_type(), "application-id", APPLICATION_ID, "flags", G_APPLICATION_NON_UNIQUE, diff --git a/generate_crossword/step_04/linux/runner/my_application.h b/generate_crossword/step_04/linux/my_application.h similarity index 100% rename from generate_crossword/step_04/linux/runner/my_application.h rename to generate_crossword/step_04/linux/my_application.h diff --git a/generate_crossword/step_04/linux/runner/CMakeLists.txt b/generate_crossword/step_04/linux/runner/CMakeLists.txt deleted file mode 100644 index e97dabc702..0000000000 --- a/generate_crossword/step_04/linux/runner/CMakeLists.txt +++ /dev/null @@ -1,26 +0,0 @@ -cmake_minimum_required(VERSION 3.13) -project(runner LANGUAGES CXX) - -# Define the application target. To change its name, change BINARY_NAME in the -# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer -# work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add preprocessor definitions for the application ID. -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) - -target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/generate_crossword/step_04/pubspec.yaml b/generate_crossword/step_04/pubspec.yaml index ed0d380d27..4eeb51c8a3 100644 --- a/generate_crossword/step_04/pubspec.yaml +++ b/generate_crossword/step_04/pubspec.yaml @@ -16,17 +16,17 @@ dependencies: intl: ^0.19.0 riverpod: ^2.5.3 riverpod_annotation: ^2.5.3 - two_dimensional_scrollables: ^0.3.2 + two_dimensional_scrollables: ^0.3.3 dev_dependencies: flutter_test: sdk: flutter - flutter_lints: ^5.0.0 + flutter_lints: ^4.0.0 build_runner: ^2.4.13 built_value_generator: ^8.9.2 - custom_lint: ^0.6.10 - riverpod_generator: ^2.4.4 - riverpod_lint: ^2.3.14 + custom_lint: ^0.6.8 + riverpod_generator: ^2.4.3 + riverpod_lint: ^2.3.13 flutter: uses-material-design: true diff --git a/generate_crossword/step_05_a/android/gradle.properties b/generate_crossword/step_05_a/android/gradle.properties index f018a61817..2597170821 100644 --- a/generate_crossword/step_05_a/android/gradle.properties +++ b/generate_crossword/step_05_a/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/generate_crossword/step_05_a/linux/CMakeLists.txt b/generate_crossword/step_05_a/linux/CMakeLists.txt index 76ad2b9b7e..fc29586ba7 100644 --- a/generate_crossword/step_05_a/linux/CMakeLists.txt +++ b/generate_crossword/step_05_a/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.13) +cmake_minimum_required(VERSION 3.10) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,8 +54,25 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -# Application build; see runner/CMakeLists.txt. -add_subdirectory("runner") +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Define the application target. To change its name, change BINARY_NAME above, +# not the value here, or `flutter run` will no longer work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/generate_crossword/step_05_a/linux/runner/main.cc b/generate_crossword/step_05_a/linux/main.cc similarity index 100% rename from generate_crossword/step_05_a/linux/runner/main.cc rename to generate_crossword/step_05_a/linux/main.cc diff --git a/generate_crossword/step_03/linux/runner/my_application.cc b/generate_crossword/step_05_a/linux/my_application.cc similarity index 93% rename from generate_crossword/step_03/linux/runner/my_application.cc rename to generate_crossword/step_05_a/linux/my_application.cc index dbf3c88029..7030cf20f4 100644 --- a/generate_crossword/step_03/linux/runner/my_application.cc +++ b/generate_crossword/step_05_a/linux/my_application.cc @@ -117,12 +117,6 @@ static void my_application_class_init(MyApplicationClass* klass) { static void my_application_init(MyApplication* self) {} MyApplication* my_application_new() { - // Set the program name to the application ID, which helps various systems - // like GTK and desktop environments map this running application to its - // corresponding .desktop file. This ensures better integration by allowing - // the application to be recognized beyond its binary name. - g_set_prgname(APPLICATION_ID); - return MY_APPLICATION(g_object_new(my_application_get_type(), "application-id", APPLICATION_ID, "flags", G_APPLICATION_NON_UNIQUE, diff --git a/generate_crossword/step_05_a/linux/runner/my_application.h b/generate_crossword/step_05_a/linux/my_application.h similarity index 100% rename from generate_crossword/step_05_a/linux/runner/my_application.h rename to generate_crossword/step_05_a/linux/my_application.h diff --git a/generate_crossword/step_05_a/linux/runner/CMakeLists.txt b/generate_crossword/step_05_a/linux/runner/CMakeLists.txt deleted file mode 100644 index e97dabc702..0000000000 --- a/generate_crossword/step_05_a/linux/runner/CMakeLists.txt +++ /dev/null @@ -1,26 +0,0 @@ -cmake_minimum_required(VERSION 3.13) -project(runner LANGUAGES CXX) - -# Define the application target. To change its name, change BINARY_NAME in the -# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer -# work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add preprocessor definitions for the application ID. -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) - -target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/generate_crossword/step_05_a/pubspec.yaml b/generate_crossword/step_05_a/pubspec.yaml index ed0d380d27..4eeb51c8a3 100644 --- a/generate_crossword/step_05_a/pubspec.yaml +++ b/generate_crossword/step_05_a/pubspec.yaml @@ -16,17 +16,17 @@ dependencies: intl: ^0.19.0 riverpod: ^2.5.3 riverpod_annotation: ^2.5.3 - two_dimensional_scrollables: ^0.3.2 + two_dimensional_scrollables: ^0.3.3 dev_dependencies: flutter_test: sdk: flutter - flutter_lints: ^5.0.0 + flutter_lints: ^4.0.0 build_runner: ^2.4.13 built_value_generator: ^8.9.2 - custom_lint: ^0.6.10 - riverpod_generator: ^2.4.4 - riverpod_lint: ^2.3.14 + custom_lint: ^0.6.8 + riverpod_generator: ^2.4.3 + riverpod_lint: ^2.3.13 flutter: uses-material-design: true diff --git a/generate_crossword/step_05_b/android/gradle.properties b/generate_crossword/step_05_b/android/gradle.properties index f018a61817..2597170821 100644 --- a/generate_crossword/step_05_b/android/gradle.properties +++ b/generate_crossword/step_05_b/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/generate_crossword/step_05_b/linux/CMakeLists.txt b/generate_crossword/step_05_b/linux/CMakeLists.txt index 76ad2b9b7e..fc29586ba7 100644 --- a/generate_crossword/step_05_b/linux/CMakeLists.txt +++ b/generate_crossword/step_05_b/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.13) +cmake_minimum_required(VERSION 3.10) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,8 +54,25 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -# Application build; see runner/CMakeLists.txt. -add_subdirectory("runner") +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Define the application target. To change its name, change BINARY_NAME above, +# not the value here, or `flutter run` will no longer work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/generate_crossword/step_05_b/linux/runner/main.cc b/generate_crossword/step_05_b/linux/main.cc similarity index 100% rename from generate_crossword/step_05_b/linux/runner/main.cc rename to generate_crossword/step_05_b/linux/main.cc diff --git a/generate_crossword/step_05_b/linux/my_application.cc b/generate_crossword/step_05_b/linux/my_application.cc new file mode 100644 index 0000000000..7030cf20f4 --- /dev/null +++ b/generate_crossword/step_05_b/linux/my_application.cc @@ -0,0 +1,124 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "generate_crossword"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "generate_crossword"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/generate_crossword/step_05_b/linux/runner/my_application.h b/generate_crossword/step_05_b/linux/my_application.h similarity index 100% rename from generate_crossword/step_05_b/linux/runner/my_application.h rename to generate_crossword/step_05_b/linux/my_application.h diff --git a/generate_crossword/step_05_b/linux/runner/CMakeLists.txt b/generate_crossword/step_05_b/linux/runner/CMakeLists.txt deleted file mode 100644 index e97dabc702..0000000000 --- a/generate_crossword/step_05_b/linux/runner/CMakeLists.txt +++ /dev/null @@ -1,26 +0,0 @@ -cmake_minimum_required(VERSION 3.13) -project(runner LANGUAGES CXX) - -# Define the application target. To change its name, change BINARY_NAME in the -# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer -# work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add preprocessor definitions for the application ID. -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) - -target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/generate_crossword/step_05_b/linux/runner/my_application.cc b/generate_crossword/step_05_b/linux/runner/my_application.cc deleted file mode 100644 index dbf3c88029..0000000000 --- a/generate_crossword/step_05_b/linux/runner/my_application.cc +++ /dev/null @@ -1,130 +0,0 @@ -#include "my_application.h" - -#include -#ifdef GDK_WINDOWING_X11 -#include -#endif - -#include "flutter/generated_plugin_registrant.h" - -struct _MyApplication { - GtkApplication parent_instance; - char** dart_entrypoint_arguments; -}; - -G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) - -// Implements GApplication::activate. -static void my_application_activate(GApplication* application) { - MyApplication* self = MY_APPLICATION(application); - GtkWindow* window = - GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); - - // Use a header bar when running in GNOME as this is the common style used - // by applications and is the setup most users will be using (e.g. Ubuntu - // desktop). - // If running on X and not using GNOME then just use a traditional title bar - // in case the window manager does more exotic layout, e.g. tiling. - // If running on Wayland assume the header bar will work (may need changing - // if future cases occur). - gboolean use_header_bar = TRUE; -#ifdef GDK_WINDOWING_X11 - GdkScreen* screen = gtk_window_get_screen(window); - if (GDK_IS_X11_SCREEN(screen)) { - const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); - if (g_strcmp0(wm_name, "GNOME Shell") != 0) { - use_header_bar = FALSE; - } - } -#endif - if (use_header_bar) { - GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); - gtk_widget_show(GTK_WIDGET(header_bar)); - gtk_header_bar_set_title(header_bar, "generate_crossword"); - gtk_header_bar_set_show_close_button(header_bar, TRUE); - gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); - } else { - gtk_window_set_title(window, "generate_crossword"); - } - - gtk_window_set_default_size(window, 1280, 720); - gtk_widget_show(GTK_WIDGET(window)); - - g_autoptr(FlDartProject) project = fl_dart_project_new(); - fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); - - FlView* view = fl_view_new(project); - gtk_widget_show(GTK_WIDGET(view)); - gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); - - fl_register_plugins(FL_PLUGIN_REGISTRY(view)); - - gtk_widget_grab_focus(GTK_WIDGET(view)); -} - -// Implements GApplication::local_command_line. -static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { - MyApplication* self = MY_APPLICATION(application); - // Strip out the first argument as it is the binary name. - self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); - - g_autoptr(GError) error = nullptr; - if (!g_application_register(application, nullptr, &error)) { - g_warning("Failed to register: %s", error->message); - *exit_status = 1; - return TRUE; - } - - g_application_activate(application); - *exit_status = 0; - - return TRUE; -} - -// Implements GApplication::startup. -static void my_application_startup(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application startup. - - G_APPLICATION_CLASS(my_application_parent_class)->startup(application); -} - -// Implements GApplication::shutdown. -static void my_application_shutdown(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application shutdown. - - G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); -} - -// Implements GObject::dispose. -static void my_application_dispose(GObject* object) { - MyApplication* self = MY_APPLICATION(object); - g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); - G_OBJECT_CLASS(my_application_parent_class)->dispose(object); -} - -static void my_application_class_init(MyApplicationClass* klass) { - G_APPLICATION_CLASS(klass)->activate = my_application_activate; - G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; - G_APPLICATION_CLASS(klass)->startup = my_application_startup; - G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; - G_OBJECT_CLASS(klass)->dispose = my_application_dispose; -} - -static void my_application_init(MyApplication* self) {} - -MyApplication* my_application_new() { - // Set the program name to the application ID, which helps various systems - // like GTK and desktop environments map this running application to its - // corresponding .desktop file. This ensures better integration by allowing - // the application to be recognized beyond its binary name. - g_set_prgname(APPLICATION_ID); - - return MY_APPLICATION(g_object_new(my_application_get_type(), - "application-id", APPLICATION_ID, - "flags", G_APPLICATION_NON_UNIQUE, - nullptr)); -} diff --git a/generate_crossword/step_05_b/pubspec.yaml b/generate_crossword/step_05_b/pubspec.yaml index ed0d380d27..4eeb51c8a3 100644 --- a/generate_crossword/step_05_b/pubspec.yaml +++ b/generate_crossword/step_05_b/pubspec.yaml @@ -16,17 +16,17 @@ dependencies: intl: ^0.19.0 riverpod: ^2.5.3 riverpod_annotation: ^2.5.3 - two_dimensional_scrollables: ^0.3.2 + two_dimensional_scrollables: ^0.3.3 dev_dependencies: flutter_test: sdk: flutter - flutter_lints: ^5.0.0 + flutter_lints: ^4.0.0 build_runner: ^2.4.13 built_value_generator: ^8.9.2 - custom_lint: ^0.6.10 - riverpod_generator: ^2.4.4 - riverpod_lint: ^2.3.14 + custom_lint: ^0.6.8 + riverpod_generator: ^2.4.3 + riverpod_lint: ^2.3.13 flutter: uses-material-design: true diff --git a/generate_crossword/step_05_c/android/gradle.properties b/generate_crossword/step_05_c/android/gradle.properties index f018a61817..2597170821 100644 --- a/generate_crossword/step_05_c/android/gradle.properties +++ b/generate_crossword/step_05_c/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/generate_crossword/step_05_c/linux/CMakeLists.txt b/generate_crossword/step_05_c/linux/CMakeLists.txt index 76ad2b9b7e..fc29586ba7 100644 --- a/generate_crossword/step_05_c/linux/CMakeLists.txt +++ b/generate_crossword/step_05_c/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.13) +cmake_minimum_required(VERSION 3.10) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,8 +54,25 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -# Application build; see runner/CMakeLists.txt. -add_subdirectory("runner") +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Define the application target. To change its name, change BINARY_NAME above, +# not the value here, or `flutter run` will no longer work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/generate_crossword/step_05_c/linux/runner/main.cc b/generate_crossword/step_05_c/linux/main.cc similarity index 100% rename from generate_crossword/step_05_c/linux/runner/main.cc rename to generate_crossword/step_05_c/linux/main.cc diff --git a/generate_crossword/step_05_c/linux/my_application.cc b/generate_crossword/step_05_c/linux/my_application.cc new file mode 100644 index 0000000000..7030cf20f4 --- /dev/null +++ b/generate_crossword/step_05_c/linux/my_application.cc @@ -0,0 +1,124 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "generate_crossword"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "generate_crossword"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/generate_crossword/step_05_c/linux/runner/my_application.h b/generate_crossword/step_05_c/linux/my_application.h similarity index 100% rename from generate_crossword/step_05_c/linux/runner/my_application.h rename to generate_crossword/step_05_c/linux/my_application.h diff --git a/generate_crossword/step_05_c/linux/runner/CMakeLists.txt b/generate_crossword/step_05_c/linux/runner/CMakeLists.txt deleted file mode 100644 index e97dabc702..0000000000 --- a/generate_crossword/step_05_c/linux/runner/CMakeLists.txt +++ /dev/null @@ -1,26 +0,0 @@ -cmake_minimum_required(VERSION 3.13) -project(runner LANGUAGES CXX) - -# Define the application target. To change its name, change BINARY_NAME in the -# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer -# work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add preprocessor definitions for the application ID. -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) - -target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/generate_crossword/step_05_c/linux/runner/my_application.cc b/generate_crossword/step_05_c/linux/runner/my_application.cc deleted file mode 100644 index dbf3c88029..0000000000 --- a/generate_crossword/step_05_c/linux/runner/my_application.cc +++ /dev/null @@ -1,130 +0,0 @@ -#include "my_application.h" - -#include -#ifdef GDK_WINDOWING_X11 -#include -#endif - -#include "flutter/generated_plugin_registrant.h" - -struct _MyApplication { - GtkApplication parent_instance; - char** dart_entrypoint_arguments; -}; - -G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) - -// Implements GApplication::activate. -static void my_application_activate(GApplication* application) { - MyApplication* self = MY_APPLICATION(application); - GtkWindow* window = - GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); - - // Use a header bar when running in GNOME as this is the common style used - // by applications and is the setup most users will be using (e.g. Ubuntu - // desktop). - // If running on X and not using GNOME then just use a traditional title bar - // in case the window manager does more exotic layout, e.g. tiling. - // If running on Wayland assume the header bar will work (may need changing - // if future cases occur). - gboolean use_header_bar = TRUE; -#ifdef GDK_WINDOWING_X11 - GdkScreen* screen = gtk_window_get_screen(window); - if (GDK_IS_X11_SCREEN(screen)) { - const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); - if (g_strcmp0(wm_name, "GNOME Shell") != 0) { - use_header_bar = FALSE; - } - } -#endif - if (use_header_bar) { - GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); - gtk_widget_show(GTK_WIDGET(header_bar)); - gtk_header_bar_set_title(header_bar, "generate_crossword"); - gtk_header_bar_set_show_close_button(header_bar, TRUE); - gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); - } else { - gtk_window_set_title(window, "generate_crossword"); - } - - gtk_window_set_default_size(window, 1280, 720); - gtk_widget_show(GTK_WIDGET(window)); - - g_autoptr(FlDartProject) project = fl_dart_project_new(); - fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); - - FlView* view = fl_view_new(project); - gtk_widget_show(GTK_WIDGET(view)); - gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); - - fl_register_plugins(FL_PLUGIN_REGISTRY(view)); - - gtk_widget_grab_focus(GTK_WIDGET(view)); -} - -// Implements GApplication::local_command_line. -static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { - MyApplication* self = MY_APPLICATION(application); - // Strip out the first argument as it is the binary name. - self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); - - g_autoptr(GError) error = nullptr; - if (!g_application_register(application, nullptr, &error)) { - g_warning("Failed to register: %s", error->message); - *exit_status = 1; - return TRUE; - } - - g_application_activate(application); - *exit_status = 0; - - return TRUE; -} - -// Implements GApplication::startup. -static void my_application_startup(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application startup. - - G_APPLICATION_CLASS(my_application_parent_class)->startup(application); -} - -// Implements GApplication::shutdown. -static void my_application_shutdown(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application shutdown. - - G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); -} - -// Implements GObject::dispose. -static void my_application_dispose(GObject* object) { - MyApplication* self = MY_APPLICATION(object); - g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); - G_OBJECT_CLASS(my_application_parent_class)->dispose(object); -} - -static void my_application_class_init(MyApplicationClass* klass) { - G_APPLICATION_CLASS(klass)->activate = my_application_activate; - G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; - G_APPLICATION_CLASS(klass)->startup = my_application_startup; - G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; - G_OBJECT_CLASS(klass)->dispose = my_application_dispose; -} - -static void my_application_init(MyApplication* self) {} - -MyApplication* my_application_new() { - // Set the program name to the application ID, which helps various systems - // like GTK and desktop environments map this running application to its - // corresponding .desktop file. This ensures better integration by allowing - // the application to be recognized beyond its binary name. - g_set_prgname(APPLICATION_ID); - - return MY_APPLICATION(g_object_new(my_application_get_type(), - "application-id", APPLICATION_ID, - "flags", G_APPLICATION_NON_UNIQUE, - nullptr)); -} diff --git a/generate_crossword/step_05_c/pubspec.yaml b/generate_crossword/step_05_c/pubspec.yaml index ed0d380d27..4eeb51c8a3 100644 --- a/generate_crossword/step_05_c/pubspec.yaml +++ b/generate_crossword/step_05_c/pubspec.yaml @@ -16,17 +16,17 @@ dependencies: intl: ^0.19.0 riverpod: ^2.5.3 riverpod_annotation: ^2.5.3 - two_dimensional_scrollables: ^0.3.2 + two_dimensional_scrollables: ^0.3.3 dev_dependencies: flutter_test: sdk: flutter - flutter_lints: ^5.0.0 + flutter_lints: ^4.0.0 build_runner: ^2.4.13 built_value_generator: ^8.9.2 - custom_lint: ^0.6.10 - riverpod_generator: ^2.4.4 - riverpod_lint: ^2.3.14 + custom_lint: ^0.6.8 + riverpod_generator: ^2.4.3 + riverpod_lint: ^2.3.13 flutter: uses-material-design: true diff --git a/generate_crossword/step_06/android/gradle.properties b/generate_crossword/step_06/android/gradle.properties index f018a61817..2597170821 100644 --- a/generate_crossword/step_06/android/gradle.properties +++ b/generate_crossword/step_06/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/generate_crossword/step_06/linux/CMakeLists.txt b/generate_crossword/step_06/linux/CMakeLists.txt index 76ad2b9b7e..fc29586ba7 100644 --- a/generate_crossword/step_06/linux/CMakeLists.txt +++ b/generate_crossword/step_06/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.13) +cmake_minimum_required(VERSION 3.10) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,8 +54,25 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -# Application build; see runner/CMakeLists.txt. -add_subdirectory("runner") +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Define the application target. To change its name, change BINARY_NAME above, +# not the value here, or `flutter run` will no longer work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/generate_crossword/step_06/linux/runner/main.cc b/generate_crossword/step_06/linux/main.cc similarity index 100% rename from generate_crossword/step_06/linux/runner/main.cc rename to generate_crossword/step_06/linux/main.cc diff --git a/generate_crossword/step_06/linux/my_application.cc b/generate_crossword/step_06/linux/my_application.cc new file mode 100644 index 0000000000..7030cf20f4 --- /dev/null +++ b/generate_crossword/step_06/linux/my_application.cc @@ -0,0 +1,124 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "generate_crossword"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "generate_crossword"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/generate_crossword/step_06/linux/runner/my_application.h b/generate_crossword/step_06/linux/my_application.h similarity index 100% rename from generate_crossword/step_06/linux/runner/my_application.h rename to generate_crossword/step_06/linux/my_application.h diff --git a/generate_crossword/step_06/linux/runner/CMakeLists.txt b/generate_crossword/step_06/linux/runner/CMakeLists.txt deleted file mode 100644 index e97dabc702..0000000000 --- a/generate_crossword/step_06/linux/runner/CMakeLists.txt +++ /dev/null @@ -1,26 +0,0 @@ -cmake_minimum_required(VERSION 3.13) -project(runner LANGUAGES CXX) - -# Define the application target. To change its name, change BINARY_NAME in the -# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer -# work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add preprocessor definitions for the application ID. -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) - -target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/generate_crossword/step_06/linux/runner/my_application.cc b/generate_crossword/step_06/linux/runner/my_application.cc deleted file mode 100644 index dbf3c88029..0000000000 --- a/generate_crossword/step_06/linux/runner/my_application.cc +++ /dev/null @@ -1,130 +0,0 @@ -#include "my_application.h" - -#include -#ifdef GDK_WINDOWING_X11 -#include -#endif - -#include "flutter/generated_plugin_registrant.h" - -struct _MyApplication { - GtkApplication parent_instance; - char** dart_entrypoint_arguments; -}; - -G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) - -// Implements GApplication::activate. -static void my_application_activate(GApplication* application) { - MyApplication* self = MY_APPLICATION(application); - GtkWindow* window = - GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); - - // Use a header bar when running in GNOME as this is the common style used - // by applications and is the setup most users will be using (e.g. Ubuntu - // desktop). - // If running on X and not using GNOME then just use a traditional title bar - // in case the window manager does more exotic layout, e.g. tiling. - // If running on Wayland assume the header bar will work (may need changing - // if future cases occur). - gboolean use_header_bar = TRUE; -#ifdef GDK_WINDOWING_X11 - GdkScreen* screen = gtk_window_get_screen(window); - if (GDK_IS_X11_SCREEN(screen)) { - const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); - if (g_strcmp0(wm_name, "GNOME Shell") != 0) { - use_header_bar = FALSE; - } - } -#endif - if (use_header_bar) { - GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); - gtk_widget_show(GTK_WIDGET(header_bar)); - gtk_header_bar_set_title(header_bar, "generate_crossword"); - gtk_header_bar_set_show_close_button(header_bar, TRUE); - gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); - } else { - gtk_window_set_title(window, "generate_crossword"); - } - - gtk_window_set_default_size(window, 1280, 720); - gtk_widget_show(GTK_WIDGET(window)); - - g_autoptr(FlDartProject) project = fl_dart_project_new(); - fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); - - FlView* view = fl_view_new(project); - gtk_widget_show(GTK_WIDGET(view)); - gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); - - fl_register_plugins(FL_PLUGIN_REGISTRY(view)); - - gtk_widget_grab_focus(GTK_WIDGET(view)); -} - -// Implements GApplication::local_command_line. -static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { - MyApplication* self = MY_APPLICATION(application); - // Strip out the first argument as it is the binary name. - self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); - - g_autoptr(GError) error = nullptr; - if (!g_application_register(application, nullptr, &error)) { - g_warning("Failed to register: %s", error->message); - *exit_status = 1; - return TRUE; - } - - g_application_activate(application); - *exit_status = 0; - - return TRUE; -} - -// Implements GApplication::startup. -static void my_application_startup(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application startup. - - G_APPLICATION_CLASS(my_application_parent_class)->startup(application); -} - -// Implements GApplication::shutdown. -static void my_application_shutdown(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application shutdown. - - G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); -} - -// Implements GObject::dispose. -static void my_application_dispose(GObject* object) { - MyApplication* self = MY_APPLICATION(object); - g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); - G_OBJECT_CLASS(my_application_parent_class)->dispose(object); -} - -static void my_application_class_init(MyApplicationClass* klass) { - G_APPLICATION_CLASS(klass)->activate = my_application_activate; - G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; - G_APPLICATION_CLASS(klass)->startup = my_application_startup; - G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; - G_OBJECT_CLASS(klass)->dispose = my_application_dispose; -} - -static void my_application_init(MyApplication* self) {} - -MyApplication* my_application_new() { - // Set the program name to the application ID, which helps various systems - // like GTK and desktop environments map this running application to its - // corresponding .desktop file. This ensures better integration by allowing - // the application to be recognized beyond its binary name. - g_set_prgname(APPLICATION_ID); - - return MY_APPLICATION(g_object_new(my_application_get_type(), - "application-id", APPLICATION_ID, - "flags", G_APPLICATION_NON_UNIQUE, - nullptr)); -} diff --git a/generate_crossword/step_06/pubspec.yaml b/generate_crossword/step_06/pubspec.yaml index ed0d380d27..4eeb51c8a3 100644 --- a/generate_crossword/step_06/pubspec.yaml +++ b/generate_crossword/step_06/pubspec.yaml @@ -16,17 +16,17 @@ dependencies: intl: ^0.19.0 riverpod: ^2.5.3 riverpod_annotation: ^2.5.3 - two_dimensional_scrollables: ^0.3.2 + two_dimensional_scrollables: ^0.3.3 dev_dependencies: flutter_test: sdk: flutter - flutter_lints: ^5.0.0 + flutter_lints: ^4.0.0 build_runner: ^2.4.13 built_value_generator: ^8.9.2 - custom_lint: ^0.6.10 - riverpod_generator: ^2.4.4 - riverpod_lint: ^2.3.14 + custom_lint: ^0.6.8 + riverpod_generator: ^2.4.3 + riverpod_lint: ^2.3.13 flutter: uses-material-design: true diff --git a/generate_crossword/step_07/android/gradle.properties b/generate_crossword/step_07/android/gradle.properties index f018a61817..2597170821 100644 --- a/generate_crossword/step_07/android/gradle.properties +++ b/generate_crossword/step_07/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/generate_crossword/step_07/linux/CMakeLists.txt b/generate_crossword/step_07/linux/CMakeLists.txt index 76ad2b9b7e..fc29586ba7 100644 --- a/generate_crossword/step_07/linux/CMakeLists.txt +++ b/generate_crossword/step_07/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.13) +cmake_minimum_required(VERSION 3.10) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,8 +54,25 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -# Application build; see runner/CMakeLists.txt. -add_subdirectory("runner") +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Define the application target. To change its name, change BINARY_NAME above, +# not the value here, or `flutter run` will no longer work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/generate_crossword/step_07/linux/runner/main.cc b/generate_crossword/step_07/linux/main.cc similarity index 100% rename from generate_crossword/step_07/linux/runner/main.cc rename to generate_crossword/step_07/linux/main.cc diff --git a/generate_crossword/step_07/linux/my_application.cc b/generate_crossword/step_07/linux/my_application.cc new file mode 100644 index 0000000000..7030cf20f4 --- /dev/null +++ b/generate_crossword/step_07/linux/my_application.cc @@ -0,0 +1,124 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "generate_crossword"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "generate_crossword"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/generate_crossword/step_07/linux/runner/my_application.h b/generate_crossword/step_07/linux/my_application.h similarity index 100% rename from generate_crossword/step_07/linux/runner/my_application.h rename to generate_crossword/step_07/linux/my_application.h diff --git a/generate_crossword/step_07/linux/runner/CMakeLists.txt b/generate_crossword/step_07/linux/runner/CMakeLists.txt deleted file mode 100644 index e97dabc702..0000000000 --- a/generate_crossword/step_07/linux/runner/CMakeLists.txt +++ /dev/null @@ -1,26 +0,0 @@ -cmake_minimum_required(VERSION 3.13) -project(runner LANGUAGES CXX) - -# Define the application target. To change its name, change BINARY_NAME in the -# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer -# work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add preprocessor definitions for the application ID. -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) - -target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/generate_crossword/step_07/linux/runner/my_application.cc b/generate_crossword/step_07/linux/runner/my_application.cc deleted file mode 100644 index dbf3c88029..0000000000 --- a/generate_crossword/step_07/linux/runner/my_application.cc +++ /dev/null @@ -1,130 +0,0 @@ -#include "my_application.h" - -#include -#ifdef GDK_WINDOWING_X11 -#include -#endif - -#include "flutter/generated_plugin_registrant.h" - -struct _MyApplication { - GtkApplication parent_instance; - char** dart_entrypoint_arguments; -}; - -G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) - -// Implements GApplication::activate. -static void my_application_activate(GApplication* application) { - MyApplication* self = MY_APPLICATION(application); - GtkWindow* window = - GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); - - // Use a header bar when running in GNOME as this is the common style used - // by applications and is the setup most users will be using (e.g. Ubuntu - // desktop). - // If running on X and not using GNOME then just use a traditional title bar - // in case the window manager does more exotic layout, e.g. tiling. - // If running on Wayland assume the header bar will work (may need changing - // if future cases occur). - gboolean use_header_bar = TRUE; -#ifdef GDK_WINDOWING_X11 - GdkScreen* screen = gtk_window_get_screen(window); - if (GDK_IS_X11_SCREEN(screen)) { - const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); - if (g_strcmp0(wm_name, "GNOME Shell") != 0) { - use_header_bar = FALSE; - } - } -#endif - if (use_header_bar) { - GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); - gtk_widget_show(GTK_WIDGET(header_bar)); - gtk_header_bar_set_title(header_bar, "generate_crossword"); - gtk_header_bar_set_show_close_button(header_bar, TRUE); - gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); - } else { - gtk_window_set_title(window, "generate_crossword"); - } - - gtk_window_set_default_size(window, 1280, 720); - gtk_widget_show(GTK_WIDGET(window)); - - g_autoptr(FlDartProject) project = fl_dart_project_new(); - fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); - - FlView* view = fl_view_new(project); - gtk_widget_show(GTK_WIDGET(view)); - gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); - - fl_register_plugins(FL_PLUGIN_REGISTRY(view)); - - gtk_widget_grab_focus(GTK_WIDGET(view)); -} - -// Implements GApplication::local_command_line. -static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { - MyApplication* self = MY_APPLICATION(application); - // Strip out the first argument as it is the binary name. - self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); - - g_autoptr(GError) error = nullptr; - if (!g_application_register(application, nullptr, &error)) { - g_warning("Failed to register: %s", error->message); - *exit_status = 1; - return TRUE; - } - - g_application_activate(application); - *exit_status = 0; - - return TRUE; -} - -// Implements GApplication::startup. -static void my_application_startup(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application startup. - - G_APPLICATION_CLASS(my_application_parent_class)->startup(application); -} - -// Implements GApplication::shutdown. -static void my_application_shutdown(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application shutdown. - - G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); -} - -// Implements GObject::dispose. -static void my_application_dispose(GObject* object) { - MyApplication* self = MY_APPLICATION(object); - g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); - G_OBJECT_CLASS(my_application_parent_class)->dispose(object); -} - -static void my_application_class_init(MyApplicationClass* klass) { - G_APPLICATION_CLASS(klass)->activate = my_application_activate; - G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; - G_APPLICATION_CLASS(klass)->startup = my_application_startup; - G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; - G_OBJECT_CLASS(klass)->dispose = my_application_dispose; -} - -static void my_application_init(MyApplication* self) {} - -MyApplication* my_application_new() { - // Set the program name to the application ID, which helps various systems - // like GTK and desktop environments map this running application to its - // corresponding .desktop file. This ensures better integration by allowing - // the application to be recognized beyond its binary name. - g_set_prgname(APPLICATION_ID); - - return MY_APPLICATION(g_object_new(my_application_get_type(), - "application-id", APPLICATION_ID, - "flags", G_APPLICATION_NON_UNIQUE, - nullptr)); -} diff --git a/generate_crossword/step_07/pubspec.yaml b/generate_crossword/step_07/pubspec.yaml index ed0d380d27..4eeb51c8a3 100644 --- a/generate_crossword/step_07/pubspec.yaml +++ b/generate_crossword/step_07/pubspec.yaml @@ -16,17 +16,17 @@ dependencies: intl: ^0.19.0 riverpod: ^2.5.3 riverpod_annotation: ^2.5.3 - two_dimensional_scrollables: ^0.3.2 + two_dimensional_scrollables: ^0.3.3 dev_dependencies: flutter_test: sdk: flutter - flutter_lints: ^5.0.0 + flutter_lints: ^4.0.0 build_runner: ^2.4.13 built_value_generator: ^8.9.2 - custom_lint: ^0.6.10 - riverpod_generator: ^2.4.4 - riverpod_lint: ^2.3.14 + custom_lint: ^0.6.8 + riverpod_generator: ^2.4.3 + riverpod_lint: ^2.3.13 flutter: uses-material-design: true diff --git a/generate_crossword/step_08/android/gradle.properties b/generate_crossword/step_08/android/gradle.properties index f018a61817..2597170821 100644 --- a/generate_crossword/step_08/android/gradle.properties +++ b/generate_crossword/step_08/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/generate_crossword/step_08/linux/CMakeLists.txt b/generate_crossword/step_08/linux/CMakeLists.txt index 76ad2b9b7e..fc29586ba7 100644 --- a/generate_crossword/step_08/linux/CMakeLists.txt +++ b/generate_crossword/step_08/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.13) +cmake_minimum_required(VERSION 3.10) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,8 +54,25 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -# Application build; see runner/CMakeLists.txt. -add_subdirectory("runner") +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Define the application target. To change its name, change BINARY_NAME above, +# not the value here, or `flutter run` will no longer work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/generate_crossword/step_08/linux/runner/main.cc b/generate_crossword/step_08/linux/main.cc similarity index 100% rename from generate_crossword/step_08/linux/runner/main.cc rename to generate_crossword/step_08/linux/main.cc diff --git a/generate_crossword/step_08/linux/my_application.cc b/generate_crossword/step_08/linux/my_application.cc new file mode 100644 index 0000000000..7030cf20f4 --- /dev/null +++ b/generate_crossword/step_08/linux/my_application.cc @@ -0,0 +1,124 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "generate_crossword"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "generate_crossword"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/generate_crossword/step_08/linux/runner/my_application.h b/generate_crossword/step_08/linux/my_application.h similarity index 100% rename from generate_crossword/step_08/linux/runner/my_application.h rename to generate_crossword/step_08/linux/my_application.h diff --git a/generate_crossword/step_08/linux/runner/CMakeLists.txt b/generate_crossword/step_08/linux/runner/CMakeLists.txt deleted file mode 100644 index e97dabc702..0000000000 --- a/generate_crossword/step_08/linux/runner/CMakeLists.txt +++ /dev/null @@ -1,26 +0,0 @@ -cmake_minimum_required(VERSION 3.13) -project(runner LANGUAGES CXX) - -# Define the application target. To change its name, change BINARY_NAME in the -# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer -# work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add preprocessor definitions for the application ID. -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) - -target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/generate_crossword/step_08/linux/runner/my_application.cc b/generate_crossword/step_08/linux/runner/my_application.cc deleted file mode 100644 index dbf3c88029..0000000000 --- a/generate_crossword/step_08/linux/runner/my_application.cc +++ /dev/null @@ -1,130 +0,0 @@ -#include "my_application.h" - -#include -#ifdef GDK_WINDOWING_X11 -#include -#endif - -#include "flutter/generated_plugin_registrant.h" - -struct _MyApplication { - GtkApplication parent_instance; - char** dart_entrypoint_arguments; -}; - -G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) - -// Implements GApplication::activate. -static void my_application_activate(GApplication* application) { - MyApplication* self = MY_APPLICATION(application); - GtkWindow* window = - GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); - - // Use a header bar when running in GNOME as this is the common style used - // by applications and is the setup most users will be using (e.g. Ubuntu - // desktop). - // If running on X and not using GNOME then just use a traditional title bar - // in case the window manager does more exotic layout, e.g. tiling. - // If running on Wayland assume the header bar will work (may need changing - // if future cases occur). - gboolean use_header_bar = TRUE; -#ifdef GDK_WINDOWING_X11 - GdkScreen* screen = gtk_window_get_screen(window); - if (GDK_IS_X11_SCREEN(screen)) { - const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); - if (g_strcmp0(wm_name, "GNOME Shell") != 0) { - use_header_bar = FALSE; - } - } -#endif - if (use_header_bar) { - GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); - gtk_widget_show(GTK_WIDGET(header_bar)); - gtk_header_bar_set_title(header_bar, "generate_crossword"); - gtk_header_bar_set_show_close_button(header_bar, TRUE); - gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); - } else { - gtk_window_set_title(window, "generate_crossword"); - } - - gtk_window_set_default_size(window, 1280, 720); - gtk_widget_show(GTK_WIDGET(window)); - - g_autoptr(FlDartProject) project = fl_dart_project_new(); - fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); - - FlView* view = fl_view_new(project); - gtk_widget_show(GTK_WIDGET(view)); - gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); - - fl_register_plugins(FL_PLUGIN_REGISTRY(view)); - - gtk_widget_grab_focus(GTK_WIDGET(view)); -} - -// Implements GApplication::local_command_line. -static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { - MyApplication* self = MY_APPLICATION(application); - // Strip out the first argument as it is the binary name. - self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); - - g_autoptr(GError) error = nullptr; - if (!g_application_register(application, nullptr, &error)) { - g_warning("Failed to register: %s", error->message); - *exit_status = 1; - return TRUE; - } - - g_application_activate(application); - *exit_status = 0; - - return TRUE; -} - -// Implements GApplication::startup. -static void my_application_startup(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application startup. - - G_APPLICATION_CLASS(my_application_parent_class)->startup(application); -} - -// Implements GApplication::shutdown. -static void my_application_shutdown(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application shutdown. - - G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); -} - -// Implements GObject::dispose. -static void my_application_dispose(GObject* object) { - MyApplication* self = MY_APPLICATION(object); - g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); - G_OBJECT_CLASS(my_application_parent_class)->dispose(object); -} - -static void my_application_class_init(MyApplicationClass* klass) { - G_APPLICATION_CLASS(klass)->activate = my_application_activate; - G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; - G_APPLICATION_CLASS(klass)->startup = my_application_startup; - G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; - G_OBJECT_CLASS(klass)->dispose = my_application_dispose; -} - -static void my_application_init(MyApplication* self) {} - -MyApplication* my_application_new() { - // Set the program name to the application ID, which helps various systems - // like GTK and desktop environments map this running application to its - // corresponding .desktop file. This ensures better integration by allowing - // the application to be recognized beyond its binary name. - g_set_prgname(APPLICATION_ID); - - return MY_APPLICATION(g_object_new(my_application_get_type(), - "application-id", APPLICATION_ID, - "flags", G_APPLICATION_NON_UNIQUE, - nullptr)); -} diff --git a/generate_crossword/step_08/pubspec.yaml b/generate_crossword/step_08/pubspec.yaml index ed0d380d27..4eeb51c8a3 100644 --- a/generate_crossword/step_08/pubspec.yaml +++ b/generate_crossword/step_08/pubspec.yaml @@ -16,17 +16,17 @@ dependencies: intl: ^0.19.0 riverpod: ^2.5.3 riverpod_annotation: ^2.5.3 - two_dimensional_scrollables: ^0.3.2 + two_dimensional_scrollables: ^0.3.3 dev_dependencies: flutter_test: sdk: flutter - flutter_lints: ^5.0.0 + flutter_lints: ^4.0.0 build_runner: ^2.4.13 built_value_generator: ^8.9.2 - custom_lint: ^0.6.10 - riverpod_generator: ^2.4.4 - riverpod_lint: ^2.3.14 + custom_lint: ^0.6.8 + riverpod_generator: ^2.4.3 + riverpod_lint: ^2.3.13 flutter: uses-material-design: true diff --git a/generate_crossword/step_09/android/gradle.properties b/generate_crossword/step_09/android/gradle.properties index f018a61817..2597170821 100644 --- a/generate_crossword/step_09/android/gradle.properties +++ b/generate_crossword/step_09/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/generate_crossword/step_09/linux/CMakeLists.txt b/generate_crossword/step_09/linux/CMakeLists.txt index 76ad2b9b7e..fc29586ba7 100644 --- a/generate_crossword/step_09/linux/CMakeLists.txt +++ b/generate_crossword/step_09/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.13) +cmake_minimum_required(VERSION 3.10) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,8 +54,25 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -# Application build; see runner/CMakeLists.txt. -add_subdirectory("runner") +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Define the application target. To change its name, change BINARY_NAME above, +# not the value here, or `flutter run` will no longer work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/generate_crossword/step_09/linux/runner/main.cc b/generate_crossword/step_09/linux/main.cc similarity index 100% rename from generate_crossword/step_09/linux/runner/main.cc rename to generate_crossword/step_09/linux/main.cc diff --git a/generate_crossword/step_09/linux/my_application.cc b/generate_crossword/step_09/linux/my_application.cc new file mode 100644 index 0000000000..7030cf20f4 --- /dev/null +++ b/generate_crossword/step_09/linux/my_application.cc @@ -0,0 +1,124 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "generate_crossword"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "generate_crossword"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/generate_crossword/step_09/linux/runner/my_application.h b/generate_crossword/step_09/linux/my_application.h similarity index 100% rename from generate_crossword/step_09/linux/runner/my_application.h rename to generate_crossword/step_09/linux/my_application.h diff --git a/generate_crossword/step_09/linux/runner/CMakeLists.txt b/generate_crossword/step_09/linux/runner/CMakeLists.txt deleted file mode 100644 index e97dabc702..0000000000 --- a/generate_crossword/step_09/linux/runner/CMakeLists.txt +++ /dev/null @@ -1,26 +0,0 @@ -cmake_minimum_required(VERSION 3.13) -project(runner LANGUAGES CXX) - -# Define the application target. To change its name, change BINARY_NAME in the -# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer -# work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add preprocessor definitions for the application ID. -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) - -target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/generate_crossword/step_09/linux/runner/my_application.cc b/generate_crossword/step_09/linux/runner/my_application.cc deleted file mode 100644 index dbf3c88029..0000000000 --- a/generate_crossword/step_09/linux/runner/my_application.cc +++ /dev/null @@ -1,130 +0,0 @@ -#include "my_application.h" - -#include -#ifdef GDK_WINDOWING_X11 -#include -#endif - -#include "flutter/generated_plugin_registrant.h" - -struct _MyApplication { - GtkApplication parent_instance; - char** dart_entrypoint_arguments; -}; - -G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) - -// Implements GApplication::activate. -static void my_application_activate(GApplication* application) { - MyApplication* self = MY_APPLICATION(application); - GtkWindow* window = - GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); - - // Use a header bar when running in GNOME as this is the common style used - // by applications and is the setup most users will be using (e.g. Ubuntu - // desktop). - // If running on X and not using GNOME then just use a traditional title bar - // in case the window manager does more exotic layout, e.g. tiling. - // If running on Wayland assume the header bar will work (may need changing - // if future cases occur). - gboolean use_header_bar = TRUE; -#ifdef GDK_WINDOWING_X11 - GdkScreen* screen = gtk_window_get_screen(window); - if (GDK_IS_X11_SCREEN(screen)) { - const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); - if (g_strcmp0(wm_name, "GNOME Shell") != 0) { - use_header_bar = FALSE; - } - } -#endif - if (use_header_bar) { - GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); - gtk_widget_show(GTK_WIDGET(header_bar)); - gtk_header_bar_set_title(header_bar, "generate_crossword"); - gtk_header_bar_set_show_close_button(header_bar, TRUE); - gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); - } else { - gtk_window_set_title(window, "generate_crossword"); - } - - gtk_window_set_default_size(window, 1280, 720); - gtk_widget_show(GTK_WIDGET(window)); - - g_autoptr(FlDartProject) project = fl_dart_project_new(); - fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); - - FlView* view = fl_view_new(project); - gtk_widget_show(GTK_WIDGET(view)); - gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); - - fl_register_plugins(FL_PLUGIN_REGISTRY(view)); - - gtk_widget_grab_focus(GTK_WIDGET(view)); -} - -// Implements GApplication::local_command_line. -static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { - MyApplication* self = MY_APPLICATION(application); - // Strip out the first argument as it is the binary name. - self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); - - g_autoptr(GError) error = nullptr; - if (!g_application_register(application, nullptr, &error)) { - g_warning("Failed to register: %s", error->message); - *exit_status = 1; - return TRUE; - } - - g_application_activate(application); - *exit_status = 0; - - return TRUE; -} - -// Implements GApplication::startup. -static void my_application_startup(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application startup. - - G_APPLICATION_CLASS(my_application_parent_class)->startup(application); -} - -// Implements GApplication::shutdown. -static void my_application_shutdown(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application shutdown. - - G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); -} - -// Implements GObject::dispose. -static void my_application_dispose(GObject* object) { - MyApplication* self = MY_APPLICATION(object); - g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); - G_OBJECT_CLASS(my_application_parent_class)->dispose(object); -} - -static void my_application_class_init(MyApplicationClass* klass) { - G_APPLICATION_CLASS(klass)->activate = my_application_activate; - G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; - G_APPLICATION_CLASS(klass)->startup = my_application_startup; - G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; - G_OBJECT_CLASS(klass)->dispose = my_application_dispose; -} - -static void my_application_init(MyApplication* self) {} - -MyApplication* my_application_new() { - // Set the program name to the application ID, which helps various systems - // like GTK and desktop environments map this running application to its - // corresponding .desktop file. This ensures better integration by allowing - // the application to be recognized beyond its binary name. - g_set_prgname(APPLICATION_ID); - - return MY_APPLICATION(g_object_new(my_application_get_type(), - "application-id", APPLICATION_ID, - "flags", G_APPLICATION_NON_UNIQUE, - nullptr)); -} diff --git a/generate_crossword/step_09/pubspec.yaml b/generate_crossword/step_09/pubspec.yaml index ed0d380d27..4eeb51c8a3 100644 --- a/generate_crossword/step_09/pubspec.yaml +++ b/generate_crossword/step_09/pubspec.yaml @@ -16,17 +16,17 @@ dependencies: intl: ^0.19.0 riverpod: ^2.5.3 riverpod_annotation: ^2.5.3 - two_dimensional_scrollables: ^0.3.2 + two_dimensional_scrollables: ^0.3.3 dev_dependencies: flutter_test: sdk: flutter - flutter_lints: ^5.0.0 + flutter_lints: ^4.0.0 build_runner: ^2.4.13 built_value_generator: ^8.9.2 - custom_lint: ^0.6.10 - riverpod_generator: ^2.4.4 - riverpod_lint: ^2.3.14 + custom_lint: ^0.6.8 + riverpod_generator: ^2.4.3 + riverpod_lint: ^2.3.13 flutter: uses-material-design: true From 5d52fd2a1eec283f8d137ea455732844f5e9d9a6 Mon Sep 17 00:00:00 2001 From: Brett Morgan Date: Fri, 18 Oct 2024 16:42:59 +1100 Subject: [PATCH 026/108] Update `github-client` for flutter beta --- github-client/step_03/.gitignore | 2 + .../step_03/macos/Runner/AppDelegate.swift | 4 + github-client/step_03/pubspec.yaml | 2 +- github-client/step_04/.gitignore | 2 + .../macos/Runner.xcodeproj/project.pbxproj | 126 +++++++++--------- .../step_04/macos/Runner/AppDelegate.swift | 4 + github-client/step_04/pubspec.yaml | 4 +- github-client/step_05/.gitignore | 2 + .../macos/Runner.xcodeproj/project.pbxproj | 126 +++++++++--------- .../step_05/macos/Runner/AppDelegate.swift | 4 + github-client/step_05/pubspec.yaml | 4 +- github-client/step_06/.gitignore | 2 + .../macos/Runner.xcodeproj/project.pbxproj | 126 +++++++++--------- .../step_06/macos/Runner/AppDelegate.swift | 4 + github-client/step_06/pubspec.yaml | 4 +- github-client/step_07/.gitignore | 2 + .../macos/Runner.xcodeproj/project.pbxproj | 126 +++++++++--------- .../step_07/macos/Runner/AppDelegate.swift | 4 + github-client/step_07/pubspec.yaml | 4 +- github-client/window_to_front/.gitignore | 4 + github-client/window_to_front/pubspec.yaml | 2 +- 21 files changed, 296 insertions(+), 262 deletions(-) diff --git a/github-client/step_03/.gitignore b/github-client/step_03/.gitignore index 29a3a5017f..79c113f9b5 100644 --- a/github-client/step_03/.gitignore +++ b/github-client/step_03/.gitignore @@ -5,9 +5,11 @@ *.swp .DS_Store .atom/ +.build/ .buildlog/ .history .svn/ +.swiftpm/ migrate_working_dir/ # IntelliJ related diff --git a/github-client/step_03/macos/Runner/AppDelegate.swift b/github-client/step_03/macos/Runner/AppDelegate.swift index 8e02df2888..b3c1761412 100644 --- a/github-client/step_03/macos/Runner/AppDelegate.swift +++ b/github-client/step_03/macos/Runner/AppDelegate.swift @@ -6,4 +6,8 @@ class AppDelegate: FlutterAppDelegate { override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { return true } + + override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { + return true + } } diff --git a/github-client/step_03/pubspec.yaml b/github-client/step_03/pubspec.yaml index d6c98d7007..4058aacc8f 100644 --- a/github-client/step_03/pubspec.yaml +++ b/github-client/step_03/pubspec.yaml @@ -45,7 +45,7 @@ dev_dependencies: # activated in the `analysis_options.yaml` file located at the root of your # package. See that file for information about deactivating specific lint # rules and activating additional ones. - flutter_lints: ^4.0.0 + flutter_lints: ^5.0.0 # For information on the generic Dart part of this file, see the # following page: https://dart.dev/tools/pub/pubspec diff --git a/github-client/step_04/.gitignore b/github-client/step_04/.gitignore index 29a3a5017f..79c113f9b5 100644 --- a/github-client/step_04/.gitignore +++ b/github-client/step_04/.gitignore @@ -5,9 +5,11 @@ *.swp .DS_Store .atom/ +.build/ .buildlog/ .history .svn/ +.swiftpm/ migrate_working_dir/ # IntelliJ related diff --git a/github-client/step_04/macos/Runner.xcodeproj/project.pbxproj b/github-client/step_04/macos/Runner.xcodeproj/project.pbxproj index 08ac73bba3..d5ff68ba5d 100644 --- a/github-client/step_04/macos/Runner.xcodeproj/project.pbxproj +++ b/github-client/step_04/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ + 0946E2799DE0A59CB7358911 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 08CEF5CD328AFD86D5CEBAFE /* Pods_RunnerTests.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 34989BFBD7DC97767DEC7AA4 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 95A120ED9E9F8574D6A7B73B /* Pods_Runner.framework */; }; - BA6EBF4204D7678280BCC7BF /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0DC1937BBE159E659B688F54 /* Pods_RunnerTests.framework */; }; + CDD74361318F0EC8CD4FE27A /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2FEEE168DC0B35E320DA0BEC /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,7 +62,10 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 0DC1937BBE159E659B688F54 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 08CEF5CD328AFD86D5CEBAFE /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 1C8A255B6AD66CD525D09CFE /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 2CBB88C47DC5B271C996602F /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 2FEEE168DC0B35E320DA0BEC /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -79,15 +82,12 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 493FDDE337BD49363B00B191 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 60EF38771AF925517479C24C /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 40C998280C91B1859A8FC1AD /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 84F52D97E87886C2EA0FCFD2 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 95A120ED9E9F8574D6A7B73B /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 8C1C90B1873B2D3753EC80D6 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - 989C7B15EEF94B9D54F8CBA8 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - A5A5E5C62B37DD32DD9FAC00 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - B679D7F58ADDAFDF129AE5D2 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 9EEC144CCD91A3CED313F52F /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + CE8E57BFB22132959266F9FB /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - BA6EBF4204D7678280BCC7BF /* Pods_RunnerTests.framework in Frameworks */, + 0946E2799DE0A59CB7358911 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,27 +103,13 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 34989BFBD7DC97767DEC7AA4 /* Pods_Runner.framework in Frameworks */, + CDD74361318F0EC8CD4FE27A /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 09046C2480B235E127689360 /* Pods */ = { - isa = PBXGroup; - children = ( - 84F52D97E87886C2EA0FCFD2 /* Pods-Runner.debug.xcconfig */, - 493FDDE337BD49363B00B191 /* Pods-Runner.release.xcconfig */, - 989C7B15EEF94B9D54F8CBA8 /* Pods-Runner.profile.xcconfig */, - B679D7F58ADDAFDF129AE5D2 /* Pods-RunnerTests.debug.xcconfig */, - 60EF38771AF925517479C24C /* Pods-RunnerTests.release.xcconfig */, - A5A5E5C62B37DD32DD9FAC00 /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; 331C80D6294CF71000263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -151,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 09046C2480B235E127689360 /* Pods */, + BF572836E3F26F7228BC0732 /* Pods */, ); sourceTree = ""; }; @@ -199,11 +185,25 @@ path = Runner; sourceTree = ""; }; + BF572836E3F26F7228BC0732 /* Pods */ = { + isa = PBXGroup; + children = ( + 40C998280C91B1859A8FC1AD /* Pods-Runner.debug.xcconfig */, + 8C1C90B1873B2D3753EC80D6 /* Pods-Runner.release.xcconfig */, + 1C8A255B6AD66CD525D09CFE /* Pods-Runner.profile.xcconfig */, + 9EEC144CCD91A3CED313F52F /* Pods-RunnerTests.debug.xcconfig */, + CE8E57BFB22132959266F9FB /* Pods-RunnerTests.release.xcconfig */, + 2CBB88C47DC5B271C996602F /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - 95A120ED9E9F8574D6A7B73B /* Pods_Runner.framework */, - 0DC1937BBE159E659B688F54 /* Pods_RunnerTests.framework */, + 2FEEE168DC0B35E320DA0BEC /* Pods_Runner.framework */, + 08CEF5CD328AFD86D5CEBAFE /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 6758FBD9C71A7FA18468870E /* [CP] Check Pods Manifest.lock */, + 9CD1CF7C425C9F14158A0F65 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 14E78A427298D9FE572BFA25 /* [CP] Check Pods Manifest.lock */, + 569E096BB5DFDB3FFC2AC78F /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 6249FFDEBAF91073C7EFCD71 /* [CP] Embed Pods Frameworks */, + B9F959D3AF0503D111F56672 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,28 +323,6 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 14E78A427298D9FE572BFA25 /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -383,24 +361,29 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 6249FFDEBAF91073C7EFCD71 /* [CP] Embed Pods Frameworks */ = { + 569E096BB5DFDB3FFC2AC78F /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 6758FBD9C71A7FA18468870E /* [CP] Check Pods Manifest.lock */ = { + 9CD1CF7C425C9F14158A0F65 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -422,6 +405,23 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; + B9F959D3AF0503D111F56672 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = B679D7F58ADDAFDF129AE5D2 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 9EEC144CCD91A3CED313F52F /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 60EF38771AF925517479C24C /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = CE8E57BFB22132959266F9FB /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = A5A5E5C62B37DD32DD9FAC00 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 2CBB88C47DC5B271C996602F /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/github-client/step_04/macos/Runner/AppDelegate.swift b/github-client/step_04/macos/Runner/AppDelegate.swift index 8e02df2888..b3c1761412 100644 --- a/github-client/step_04/macos/Runner/AppDelegate.swift +++ b/github-client/step_04/macos/Runner/AppDelegate.swift @@ -6,4 +6,8 @@ class AppDelegate: FlutterAppDelegate { override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { return true } + + override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { + return true + } } diff --git a/github-client/step_04/pubspec.yaml b/github-client/step_04/pubspec.yaml index 73c910c3a7..414b6a558f 100644 --- a/github-client/step_04/pubspec.yaml +++ b/github-client/step_04/pubspec.yaml @@ -37,7 +37,7 @@ dependencies: cupertino_icons: ^1.0.8 http: ^1.2.2 oauth2: ^2.0.3 - url_launcher: ^6.3.0 + url_launcher: ^6.3.1 dev_dependencies: flutter_test: @@ -48,7 +48,7 @@ dev_dependencies: # activated in the `analysis_options.yaml` file located at the root of your # package. See that file for information about deactivating specific lint # rules and activating additional ones. - flutter_lints: ^4.0.0 + flutter_lints: ^5.0.0 # For information on the generic Dart part of this file, see the # following page: https://dart.dev/tools/pub/pubspec diff --git a/github-client/step_05/.gitignore b/github-client/step_05/.gitignore index 29a3a5017f..79c113f9b5 100644 --- a/github-client/step_05/.gitignore +++ b/github-client/step_05/.gitignore @@ -5,9 +5,11 @@ *.swp .DS_Store .atom/ +.build/ .buildlog/ .history .svn/ +.swiftpm/ migrate_working_dir/ # IntelliJ related diff --git a/github-client/step_05/macos/Runner.xcodeproj/project.pbxproj b/github-client/step_05/macos/Runner.xcodeproj/project.pbxproj index 08ac73bba3..d5ff68ba5d 100644 --- a/github-client/step_05/macos/Runner.xcodeproj/project.pbxproj +++ b/github-client/step_05/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ + 0946E2799DE0A59CB7358911 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 08CEF5CD328AFD86D5CEBAFE /* Pods_RunnerTests.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 34989BFBD7DC97767DEC7AA4 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 95A120ED9E9F8574D6A7B73B /* Pods_Runner.framework */; }; - BA6EBF4204D7678280BCC7BF /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0DC1937BBE159E659B688F54 /* Pods_RunnerTests.framework */; }; + CDD74361318F0EC8CD4FE27A /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2FEEE168DC0B35E320DA0BEC /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,7 +62,10 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 0DC1937BBE159E659B688F54 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 08CEF5CD328AFD86D5CEBAFE /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 1C8A255B6AD66CD525D09CFE /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 2CBB88C47DC5B271C996602F /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 2FEEE168DC0B35E320DA0BEC /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -79,15 +82,12 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 493FDDE337BD49363B00B191 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 60EF38771AF925517479C24C /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 40C998280C91B1859A8FC1AD /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 84F52D97E87886C2EA0FCFD2 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 95A120ED9E9F8574D6A7B73B /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 8C1C90B1873B2D3753EC80D6 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - 989C7B15EEF94B9D54F8CBA8 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - A5A5E5C62B37DD32DD9FAC00 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - B679D7F58ADDAFDF129AE5D2 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 9EEC144CCD91A3CED313F52F /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + CE8E57BFB22132959266F9FB /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - BA6EBF4204D7678280BCC7BF /* Pods_RunnerTests.framework in Frameworks */, + 0946E2799DE0A59CB7358911 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,27 +103,13 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 34989BFBD7DC97767DEC7AA4 /* Pods_Runner.framework in Frameworks */, + CDD74361318F0EC8CD4FE27A /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 09046C2480B235E127689360 /* Pods */ = { - isa = PBXGroup; - children = ( - 84F52D97E87886C2EA0FCFD2 /* Pods-Runner.debug.xcconfig */, - 493FDDE337BD49363B00B191 /* Pods-Runner.release.xcconfig */, - 989C7B15EEF94B9D54F8CBA8 /* Pods-Runner.profile.xcconfig */, - B679D7F58ADDAFDF129AE5D2 /* Pods-RunnerTests.debug.xcconfig */, - 60EF38771AF925517479C24C /* Pods-RunnerTests.release.xcconfig */, - A5A5E5C62B37DD32DD9FAC00 /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; 331C80D6294CF71000263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -151,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 09046C2480B235E127689360 /* Pods */, + BF572836E3F26F7228BC0732 /* Pods */, ); sourceTree = ""; }; @@ -199,11 +185,25 @@ path = Runner; sourceTree = ""; }; + BF572836E3F26F7228BC0732 /* Pods */ = { + isa = PBXGroup; + children = ( + 40C998280C91B1859A8FC1AD /* Pods-Runner.debug.xcconfig */, + 8C1C90B1873B2D3753EC80D6 /* Pods-Runner.release.xcconfig */, + 1C8A255B6AD66CD525D09CFE /* Pods-Runner.profile.xcconfig */, + 9EEC144CCD91A3CED313F52F /* Pods-RunnerTests.debug.xcconfig */, + CE8E57BFB22132959266F9FB /* Pods-RunnerTests.release.xcconfig */, + 2CBB88C47DC5B271C996602F /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - 95A120ED9E9F8574D6A7B73B /* Pods_Runner.framework */, - 0DC1937BBE159E659B688F54 /* Pods_RunnerTests.framework */, + 2FEEE168DC0B35E320DA0BEC /* Pods_Runner.framework */, + 08CEF5CD328AFD86D5CEBAFE /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 6758FBD9C71A7FA18468870E /* [CP] Check Pods Manifest.lock */, + 9CD1CF7C425C9F14158A0F65 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 14E78A427298D9FE572BFA25 /* [CP] Check Pods Manifest.lock */, + 569E096BB5DFDB3FFC2AC78F /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 6249FFDEBAF91073C7EFCD71 /* [CP] Embed Pods Frameworks */, + B9F959D3AF0503D111F56672 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,28 +323,6 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 14E78A427298D9FE572BFA25 /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -383,24 +361,29 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 6249FFDEBAF91073C7EFCD71 /* [CP] Embed Pods Frameworks */ = { + 569E096BB5DFDB3FFC2AC78F /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 6758FBD9C71A7FA18468870E /* [CP] Check Pods Manifest.lock */ = { + 9CD1CF7C425C9F14158A0F65 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -422,6 +405,23 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; + B9F959D3AF0503D111F56672 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = B679D7F58ADDAFDF129AE5D2 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 9EEC144CCD91A3CED313F52F /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 60EF38771AF925517479C24C /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = CE8E57BFB22132959266F9FB /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = A5A5E5C62B37DD32DD9FAC00 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 2CBB88C47DC5B271C996602F /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/github-client/step_05/macos/Runner/AppDelegate.swift b/github-client/step_05/macos/Runner/AppDelegate.swift index 8e02df2888..b3c1761412 100644 --- a/github-client/step_05/macos/Runner/AppDelegate.swift +++ b/github-client/step_05/macos/Runner/AppDelegate.swift @@ -6,4 +6,8 @@ class AppDelegate: FlutterAppDelegate { override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { return true } + + override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { + return true + } } diff --git a/github-client/step_05/pubspec.yaml b/github-client/step_05/pubspec.yaml index f6313f6b55..9915695eca 100644 --- a/github-client/step_05/pubspec.yaml +++ b/github-client/step_05/pubspec.yaml @@ -37,7 +37,7 @@ dependencies: cupertino_icons: ^1.0.8 http: ^1.2.2 oauth2: ^2.0.3 - url_launcher: ^6.3.0 + url_launcher: ^6.3.1 github: ^9.24.0 dev_dependencies: @@ -49,7 +49,7 @@ dev_dependencies: # activated in the `analysis_options.yaml` file located at the root of your # package. See that file for information about deactivating specific lint # rules and activating additional ones. - flutter_lints: ^4.0.0 + flutter_lints: ^5.0.0 # For information on the generic Dart part of this file, see the # following page: https://dart.dev/tools/pub/pubspec diff --git a/github-client/step_06/.gitignore b/github-client/step_06/.gitignore index 29a3a5017f..79c113f9b5 100644 --- a/github-client/step_06/.gitignore +++ b/github-client/step_06/.gitignore @@ -5,9 +5,11 @@ *.swp .DS_Store .atom/ +.build/ .buildlog/ .history .svn/ +.swiftpm/ migrate_working_dir/ # IntelliJ related diff --git a/github-client/step_06/macos/Runner.xcodeproj/project.pbxproj b/github-client/step_06/macos/Runner.xcodeproj/project.pbxproj index 08ac73bba3..d5ff68ba5d 100644 --- a/github-client/step_06/macos/Runner.xcodeproj/project.pbxproj +++ b/github-client/step_06/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ + 0946E2799DE0A59CB7358911 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 08CEF5CD328AFD86D5CEBAFE /* Pods_RunnerTests.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 34989BFBD7DC97767DEC7AA4 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 95A120ED9E9F8574D6A7B73B /* Pods_Runner.framework */; }; - BA6EBF4204D7678280BCC7BF /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0DC1937BBE159E659B688F54 /* Pods_RunnerTests.framework */; }; + CDD74361318F0EC8CD4FE27A /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2FEEE168DC0B35E320DA0BEC /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,7 +62,10 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 0DC1937BBE159E659B688F54 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 08CEF5CD328AFD86D5CEBAFE /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 1C8A255B6AD66CD525D09CFE /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 2CBB88C47DC5B271C996602F /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 2FEEE168DC0B35E320DA0BEC /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -79,15 +82,12 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 493FDDE337BD49363B00B191 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 60EF38771AF925517479C24C /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 40C998280C91B1859A8FC1AD /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 84F52D97E87886C2EA0FCFD2 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 95A120ED9E9F8574D6A7B73B /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 8C1C90B1873B2D3753EC80D6 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - 989C7B15EEF94B9D54F8CBA8 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - A5A5E5C62B37DD32DD9FAC00 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - B679D7F58ADDAFDF129AE5D2 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 9EEC144CCD91A3CED313F52F /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + CE8E57BFB22132959266F9FB /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - BA6EBF4204D7678280BCC7BF /* Pods_RunnerTests.framework in Frameworks */, + 0946E2799DE0A59CB7358911 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,27 +103,13 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 34989BFBD7DC97767DEC7AA4 /* Pods_Runner.framework in Frameworks */, + CDD74361318F0EC8CD4FE27A /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 09046C2480B235E127689360 /* Pods */ = { - isa = PBXGroup; - children = ( - 84F52D97E87886C2EA0FCFD2 /* Pods-Runner.debug.xcconfig */, - 493FDDE337BD49363B00B191 /* Pods-Runner.release.xcconfig */, - 989C7B15EEF94B9D54F8CBA8 /* Pods-Runner.profile.xcconfig */, - B679D7F58ADDAFDF129AE5D2 /* Pods-RunnerTests.debug.xcconfig */, - 60EF38771AF925517479C24C /* Pods-RunnerTests.release.xcconfig */, - A5A5E5C62B37DD32DD9FAC00 /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; 331C80D6294CF71000263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -151,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 09046C2480B235E127689360 /* Pods */, + BF572836E3F26F7228BC0732 /* Pods */, ); sourceTree = ""; }; @@ -199,11 +185,25 @@ path = Runner; sourceTree = ""; }; + BF572836E3F26F7228BC0732 /* Pods */ = { + isa = PBXGroup; + children = ( + 40C998280C91B1859A8FC1AD /* Pods-Runner.debug.xcconfig */, + 8C1C90B1873B2D3753EC80D6 /* Pods-Runner.release.xcconfig */, + 1C8A255B6AD66CD525D09CFE /* Pods-Runner.profile.xcconfig */, + 9EEC144CCD91A3CED313F52F /* Pods-RunnerTests.debug.xcconfig */, + CE8E57BFB22132959266F9FB /* Pods-RunnerTests.release.xcconfig */, + 2CBB88C47DC5B271C996602F /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - 95A120ED9E9F8574D6A7B73B /* Pods_Runner.framework */, - 0DC1937BBE159E659B688F54 /* Pods_RunnerTests.framework */, + 2FEEE168DC0B35E320DA0BEC /* Pods_Runner.framework */, + 08CEF5CD328AFD86D5CEBAFE /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 6758FBD9C71A7FA18468870E /* [CP] Check Pods Manifest.lock */, + 9CD1CF7C425C9F14158A0F65 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 14E78A427298D9FE572BFA25 /* [CP] Check Pods Manifest.lock */, + 569E096BB5DFDB3FFC2AC78F /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 6249FFDEBAF91073C7EFCD71 /* [CP] Embed Pods Frameworks */, + B9F959D3AF0503D111F56672 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,28 +323,6 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 14E78A427298D9FE572BFA25 /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -383,24 +361,29 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 6249FFDEBAF91073C7EFCD71 /* [CP] Embed Pods Frameworks */ = { + 569E096BB5DFDB3FFC2AC78F /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 6758FBD9C71A7FA18468870E /* [CP] Check Pods Manifest.lock */ = { + 9CD1CF7C425C9F14158A0F65 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -422,6 +405,23 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; + B9F959D3AF0503D111F56672 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = B679D7F58ADDAFDF129AE5D2 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 9EEC144CCD91A3CED313F52F /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 60EF38771AF925517479C24C /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = CE8E57BFB22132959266F9FB /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = A5A5E5C62B37DD32DD9FAC00 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 2CBB88C47DC5B271C996602F /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/github-client/step_06/macos/Runner/AppDelegate.swift b/github-client/step_06/macos/Runner/AppDelegate.swift index 8e02df2888..b3c1761412 100644 --- a/github-client/step_06/macos/Runner/AppDelegate.swift +++ b/github-client/step_06/macos/Runner/AppDelegate.swift @@ -6,4 +6,8 @@ class AppDelegate: FlutterAppDelegate { override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { return true } + + override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { + return true + } } diff --git a/github-client/step_06/pubspec.yaml b/github-client/step_06/pubspec.yaml index a1b0fd564f..95fa5b95a8 100644 --- a/github-client/step_06/pubspec.yaml +++ b/github-client/step_06/pubspec.yaml @@ -37,7 +37,7 @@ dependencies: cupertino_icons: ^1.0.8 http: ^1.2.2 oauth2: ^2.0.3 - url_launcher: ^6.3.0 + url_launcher: ^6.3.1 github: ^9.24.0 window_to_front: path: ../window_to_front @@ -51,7 +51,7 @@ dev_dependencies: # activated in the `analysis_options.yaml` file located at the root of your # package. See that file for information about deactivating specific lint # rules and activating additional ones. - flutter_lints: ^4.0.0 + flutter_lints: ^5.0.0 # For information on the generic Dart part of this file, see the # following page: https://dart.dev/tools/pub/pubspec diff --git a/github-client/step_07/.gitignore b/github-client/step_07/.gitignore index 29a3a5017f..79c113f9b5 100644 --- a/github-client/step_07/.gitignore +++ b/github-client/step_07/.gitignore @@ -5,9 +5,11 @@ *.swp .DS_Store .atom/ +.build/ .buildlog/ .history .svn/ +.swiftpm/ migrate_working_dir/ # IntelliJ related diff --git a/github-client/step_07/macos/Runner.xcodeproj/project.pbxproj b/github-client/step_07/macos/Runner.xcodeproj/project.pbxproj index 08ac73bba3..d5ff68ba5d 100644 --- a/github-client/step_07/macos/Runner.xcodeproj/project.pbxproj +++ b/github-client/step_07/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ + 0946E2799DE0A59CB7358911 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 08CEF5CD328AFD86D5CEBAFE /* Pods_RunnerTests.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 34989BFBD7DC97767DEC7AA4 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 95A120ED9E9F8574D6A7B73B /* Pods_Runner.framework */; }; - BA6EBF4204D7678280BCC7BF /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0DC1937BBE159E659B688F54 /* Pods_RunnerTests.framework */; }; + CDD74361318F0EC8CD4FE27A /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2FEEE168DC0B35E320DA0BEC /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,7 +62,10 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 0DC1937BBE159E659B688F54 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 08CEF5CD328AFD86D5CEBAFE /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 1C8A255B6AD66CD525D09CFE /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 2CBB88C47DC5B271C996602F /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 2FEEE168DC0B35E320DA0BEC /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -79,15 +82,12 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 493FDDE337BD49363B00B191 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 60EF38771AF925517479C24C /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 40C998280C91B1859A8FC1AD /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 84F52D97E87886C2EA0FCFD2 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 95A120ED9E9F8574D6A7B73B /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 8C1C90B1873B2D3753EC80D6 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - 989C7B15EEF94B9D54F8CBA8 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - A5A5E5C62B37DD32DD9FAC00 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - B679D7F58ADDAFDF129AE5D2 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 9EEC144CCD91A3CED313F52F /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + CE8E57BFB22132959266F9FB /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - BA6EBF4204D7678280BCC7BF /* Pods_RunnerTests.framework in Frameworks */, + 0946E2799DE0A59CB7358911 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,27 +103,13 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 34989BFBD7DC97767DEC7AA4 /* Pods_Runner.framework in Frameworks */, + CDD74361318F0EC8CD4FE27A /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 09046C2480B235E127689360 /* Pods */ = { - isa = PBXGroup; - children = ( - 84F52D97E87886C2EA0FCFD2 /* Pods-Runner.debug.xcconfig */, - 493FDDE337BD49363B00B191 /* Pods-Runner.release.xcconfig */, - 989C7B15EEF94B9D54F8CBA8 /* Pods-Runner.profile.xcconfig */, - B679D7F58ADDAFDF129AE5D2 /* Pods-RunnerTests.debug.xcconfig */, - 60EF38771AF925517479C24C /* Pods-RunnerTests.release.xcconfig */, - A5A5E5C62B37DD32DD9FAC00 /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; 331C80D6294CF71000263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -151,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 09046C2480B235E127689360 /* Pods */, + BF572836E3F26F7228BC0732 /* Pods */, ); sourceTree = ""; }; @@ -199,11 +185,25 @@ path = Runner; sourceTree = ""; }; + BF572836E3F26F7228BC0732 /* Pods */ = { + isa = PBXGroup; + children = ( + 40C998280C91B1859A8FC1AD /* Pods-Runner.debug.xcconfig */, + 8C1C90B1873B2D3753EC80D6 /* Pods-Runner.release.xcconfig */, + 1C8A255B6AD66CD525D09CFE /* Pods-Runner.profile.xcconfig */, + 9EEC144CCD91A3CED313F52F /* Pods-RunnerTests.debug.xcconfig */, + CE8E57BFB22132959266F9FB /* Pods-RunnerTests.release.xcconfig */, + 2CBB88C47DC5B271C996602F /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - 95A120ED9E9F8574D6A7B73B /* Pods_Runner.framework */, - 0DC1937BBE159E659B688F54 /* Pods_RunnerTests.framework */, + 2FEEE168DC0B35E320DA0BEC /* Pods_Runner.framework */, + 08CEF5CD328AFD86D5CEBAFE /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 6758FBD9C71A7FA18468870E /* [CP] Check Pods Manifest.lock */, + 9CD1CF7C425C9F14158A0F65 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 14E78A427298D9FE572BFA25 /* [CP] Check Pods Manifest.lock */, + 569E096BB5DFDB3FFC2AC78F /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 6249FFDEBAF91073C7EFCD71 /* [CP] Embed Pods Frameworks */, + B9F959D3AF0503D111F56672 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,28 +323,6 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 14E78A427298D9FE572BFA25 /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -383,24 +361,29 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 6249FFDEBAF91073C7EFCD71 /* [CP] Embed Pods Frameworks */ = { + 569E096BB5DFDB3FFC2AC78F /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 6758FBD9C71A7FA18468870E /* [CP] Check Pods Manifest.lock */ = { + 9CD1CF7C425C9F14158A0F65 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -422,6 +405,23 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; + B9F959D3AF0503D111F56672 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = B679D7F58ADDAFDF129AE5D2 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 9EEC144CCD91A3CED313F52F /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 60EF38771AF925517479C24C /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = CE8E57BFB22132959266F9FB /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = A5A5E5C62B37DD32DD9FAC00 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 2CBB88C47DC5B271C996602F /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/github-client/step_07/macos/Runner/AppDelegate.swift b/github-client/step_07/macos/Runner/AppDelegate.swift index 8e02df2888..b3c1761412 100644 --- a/github-client/step_07/macos/Runner/AppDelegate.swift +++ b/github-client/step_07/macos/Runner/AppDelegate.swift @@ -6,4 +6,8 @@ class AppDelegate: FlutterAppDelegate { override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { return true } + + override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { + return true + } } diff --git a/github-client/step_07/pubspec.yaml b/github-client/step_07/pubspec.yaml index aba94baa9c..329bf61a3a 100644 --- a/github-client/step_07/pubspec.yaml +++ b/github-client/step_07/pubspec.yaml @@ -37,7 +37,7 @@ dependencies: cupertino_icons: ^1.0.8 http: ^1.2.2 oauth2: ^2.0.3 - url_launcher: ^6.3.0 + url_launcher: ^6.3.1 github: ^9.24.0 window_to_front: path: ../window_to_front @@ -52,7 +52,7 @@ dev_dependencies: # activated in the `analysis_options.yaml` file located at the root of your # package. See that file for information about deactivating specific lint # rules and activating additional ones. - flutter_lints: ^4.0.0 + flutter_lints: ^5.0.0 # For information on the generic Dart part of this file, see the # following page: https://dart.dev/tools/pub/pubspec diff --git a/github-client/window_to_front/.gitignore b/github-client/window_to_front/.gitignore index ac5aa9893e..e7d347d9d3 100644 --- a/github-client/window_to_front/.gitignore +++ b/github-client/window_to_front/.gitignore @@ -5,9 +5,11 @@ *.swp .DS_Store .atom/ +.build/ .buildlog/ .history .svn/ +.swiftpm/ migrate_working_dir/ # IntelliJ related @@ -26,4 +28,6 @@ migrate_working_dir/ /pubspec.lock **/doc/api/ .dart_tool/ +.flutter-plugins +.flutter-plugins-dependencies build/ diff --git a/github-client/window_to_front/pubspec.yaml b/github-client/window_to_front/pubspec.yaml index 2bfe2235ca..3892b0866a 100644 --- a/github-client/window_to_front/pubspec.yaml +++ b/github-client/window_to_front/pubspec.yaml @@ -29,7 +29,7 @@ dependencies: dev_dependencies: flutter_test: sdk: flutter - flutter_lints: ^4.0.0 + flutter_lints: ^5.0.0 # For information on the generic Dart part of this file, see the # following page: https://dart.dev/tools/pub/pubspec From 35003c69890879e55db1b9812889a0184a4755bc Mon Sep 17 00:00:00 2001 From: Brett Morgan Date: Fri, 18 Oct 2024 17:03:31 +1100 Subject: [PATCH 027/108] Update `google-maps-in-flutter` for flutter beta --- google-maps-in-flutter/step_3/.gitignore | 2 + .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../step_3/android/settings.gradle | 4 +- .../ios/Runner.xcodeproj/project.pbxproj | 138 +++++++++--------- google-maps-in-flutter/step_3/pubspec.yaml | 2 +- google-maps-in-flutter/step_4/.gitignore | 2 + .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../step_4/android/settings.gradle | 4 +- .../ios/Runner.xcodeproj/project.pbxproj | 138 +++++++++--------- google-maps-in-flutter/step_4/pubspec.yaml | 2 +- google-maps-in-flutter/step_5/.gitignore | 2 + .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../step_5/android/settings.gradle | 4 +- .../ios/Runner.xcodeproj/project.pbxproj | 138 +++++++++--------- google-maps-in-flutter/step_5/pubspec.yaml | 4 +- 15 files changed, 226 insertions(+), 220 deletions(-) diff --git a/google-maps-in-flutter/step_3/.gitignore b/google-maps-in-flutter/step_3/.gitignore index 29a3a5017f..79c113f9b5 100644 --- a/google-maps-in-flutter/step_3/.gitignore +++ b/google-maps-in-flutter/step_3/.gitignore @@ -5,9 +5,11 @@ *.swp .DS_Store .atom/ +.build/ .buildlog/ .history .svn/ +.swiftpm/ migrate_working_dir/ # IntelliJ related diff --git a/google-maps-in-flutter/step_3/android/gradle/wrapper/gradle-wrapper.properties b/google-maps-in-flutter/step_3/android/gradle/wrapper/gradle-wrapper.properties index e1ca574ef0..7bb2df6ba6 100644 --- a/google-maps-in-flutter/step_3/android/gradle/wrapper/gradle-wrapper.properties +++ b/google-maps-in-flutter/step_3/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip diff --git a/google-maps-in-flutter/step_3/android/settings.gradle b/google-maps-in-flutter/step_3/android/settings.gradle index 536165d35a..b9e43bd376 100644 --- a/google-maps-in-flutter/step_3/android/settings.gradle +++ b/google-maps-in-flutter/step_3/android/settings.gradle @@ -18,8 +18,8 @@ pluginManagement { plugins { id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "7.3.0" apply false - id "org.jetbrains.kotlin.android" version "1.7.10" apply false + id "com.android.application" version "8.1.0" apply false + id "org.jetbrains.kotlin.android" version "1.8.22" apply false } include ":app" diff --git a/google-maps-in-flutter/step_3/ios/Runner.xcodeproj/project.pbxproj b/google-maps-in-flutter/step_3/ios/Runner.xcodeproj/project.pbxproj index a697b3139c..398f0b9f0b 100644 --- a/google-maps-in-flutter/step_3/ios/Runner.xcodeproj/project.pbxproj +++ b/google-maps-in-flutter/step_3/ios/Runner.xcodeproj/project.pbxproj @@ -10,12 +10,12 @@ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; - 4A4327716BEA119C6B5C7AE1 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 59E9DDA0767EFDD1FFE95D3E /* Pods_RunnerTests.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; - 7E3B1C7719DA228FBD7806C2 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 71605B1F7C8BCD424B6A8BA1 /* Pods_Runner.framework */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; + 9E0F70688A3091F9486161D2 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 09C37DCE872715D686A62AC6 /* Pods_Runner.framework */; }; + F075F74C4399201114FDCDB7 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F72E91D76B8E433805F17B29 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,20 +42,19 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 095C742AB07F93444EADB2A8 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 09C37DCE872715D686A62AC6 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 2DBF17E3C582BE0C35455850 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 47A67EB4C978EB215AE7D638 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - 59E9DDA0767EFDD1FFE95D3E /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 71605B1F7C8BCD424B6A8BA1 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 62B85A57E9B56F064DD39D86 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 6C3254DBAB169ED6F65DFCDC /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 8C80180EC1882D8C59A0ABC2 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 8ED847A9F5DB54F5EBF10F38 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 837ACBF826A70ED2E7A6DF05 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -63,30 +62,40 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - F7535A5A3C325EC2404D6B91 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - FB1385F89E9824A2B6C113EB /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + A63DD4555619517F97A4227E /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + E18236640870F7B697A57742 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + F72E91D76B8E433805F17B29 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 6E33EE250277DA9B5D87B5A0 /* Frameworks */ = { + 97C146EB1CF9000F007C117D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 4A4327716BEA119C6B5C7AE1 /* Pods_RunnerTests.framework in Frameworks */, + 9E0F70688A3091F9486161D2 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 97C146EB1CF9000F007C117D /* Frameworks */ = { + B2AEB873C105440C4D370A71 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 7E3B1C7719DA228FBD7806C2 /* Pods_Runner.framework in Frameworks */, + F075F74C4399201114FDCDB7 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 1236266A674D135122F42F80 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 09C37DCE872715D686A62AC6 /* Pods_Runner.framework */, + F72E91D76B8E433805F17B29 /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; 331C8082294A63A400263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -113,8 +122,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - ABBAE412E9FB10D88EDEA0AC /* Pods */, - EEF6895B31342FF08BD04E87 /* Frameworks */, + C4865760D467DF3F9015E4EC /* Pods */, + 1236266A674D135122F42F80 /* Frameworks */, ); sourceTree = ""; }; @@ -142,29 +151,20 @@ path = Runner; sourceTree = ""; }; - ABBAE412E9FB10D88EDEA0AC /* Pods */ = { + C4865760D467DF3F9015E4EC /* Pods */ = { isa = PBXGroup; children = ( - 2DBF17E3C582BE0C35455850 /* Pods-Runner.debug.xcconfig */, - 8C80180EC1882D8C59A0ABC2 /* Pods-Runner.release.xcconfig */, - 8ED847A9F5DB54F5EBF10F38 /* Pods-Runner.profile.xcconfig */, - FB1385F89E9824A2B6C113EB /* Pods-RunnerTests.debug.xcconfig */, - F7535A5A3C325EC2404D6B91 /* Pods-RunnerTests.release.xcconfig */, - 47A67EB4C978EB215AE7D638 /* Pods-RunnerTests.profile.xcconfig */, + A63DD4555619517F97A4227E /* Pods-Runner.debug.xcconfig */, + E18236640870F7B697A57742 /* Pods-Runner.release.xcconfig */, + 095C742AB07F93444EADB2A8 /* Pods-Runner.profile.xcconfig */, + 6C3254DBAB169ED6F65DFCDC /* Pods-RunnerTests.debug.xcconfig */, + 837ACBF826A70ED2E7A6DF05 /* Pods-RunnerTests.release.xcconfig */, + 62B85A57E9B56F064DD39D86 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; sourceTree = ""; }; - EEF6895B31342FF08BD04E87 /* Frameworks */ = { - isa = PBXGroup; - children = ( - 71605B1F7C8BCD424B6A8BA1 /* Pods_Runner.framework */, - 59E9DDA0767EFDD1FFE95D3E /* Pods_RunnerTests.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - CE60775061CB32FEDDA75665 /* [CP] Check Pods Manifest.lock */, + 05939E9CC810245F0D53E5FC /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 6E33EE250277DA9B5D87B5A0 /* Frameworks */, + B2AEB873C105440C4D370A71 /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - EFF69F5DF9F97747048BBF87 /* [CP] Check Pods Manifest.lock */, + 61DA26113B165296670A3CAF /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 3ABC074A098DC10F1ED40AA0 /* [CP] Copy Pods Resources */, + E196DA6FAC5C9ECB6AE21F8C /* [CP] Copy Pods Resources */, ); buildRules = ( ); @@ -270,21 +270,26 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 3ABC074A098DC10F1ED40AA0 /* [CP] Copy Pods Resources */ = { + 05939E9CC810245F0D53E5FC /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Copy Pods Resources"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { @@ -303,63 +308,58 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { + 61DA26113B165296670A3CAF /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "Run Script"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - CE60775061CB32FEDDA75665 /* [CP] Check Pods Manifest.lock */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( ); + name = "Run Script"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - EFF69F5DF9F97747048BBF87 /* [CP] Check Pods Manifest.lock */ = { + E196DA6FAC5C9ECB6AE21F8C /* [CP] Copy Pods Resources */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; + name = "[CP] Copy Pods Resources"; outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n"; showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = FB1385F89E9824A2B6C113EB /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 6C3254DBAB169ED6F65DFCDC /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = F7535A5A3C325EC2404D6B91 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 837ACBF826A70ED2E7A6DF05 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 47A67EB4C978EB215AE7D638 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 62B85A57E9B56F064DD39D86 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/google-maps-in-flutter/step_3/pubspec.yaml b/google-maps-in-flutter/step_3/pubspec.yaml index a14344db47..9c3bb2cf92 100644 --- a/google-maps-in-flutter/step_3/pubspec.yaml +++ b/google-maps-in-flutter/step_3/pubspec.yaml @@ -46,7 +46,7 @@ dev_dependencies: # activated in the `analysis_options.yaml` file located at the root of your # package. See that file for information about deactivating specific lint # rules and activating additional ones. - flutter_lints: ^4.0.0 + flutter_lints: ^5.0.0 # For information on the generic Dart part of this file, see the # following page: https://dart.dev/tools/pub/pubspec diff --git a/google-maps-in-flutter/step_4/.gitignore b/google-maps-in-flutter/step_4/.gitignore index 29a3a5017f..79c113f9b5 100644 --- a/google-maps-in-flutter/step_4/.gitignore +++ b/google-maps-in-flutter/step_4/.gitignore @@ -5,9 +5,11 @@ *.swp .DS_Store .atom/ +.build/ .buildlog/ .history .svn/ +.swiftpm/ migrate_working_dir/ # IntelliJ related diff --git a/google-maps-in-flutter/step_4/android/gradle/wrapper/gradle-wrapper.properties b/google-maps-in-flutter/step_4/android/gradle/wrapper/gradle-wrapper.properties index e1ca574ef0..7bb2df6ba6 100644 --- a/google-maps-in-flutter/step_4/android/gradle/wrapper/gradle-wrapper.properties +++ b/google-maps-in-flutter/step_4/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip diff --git a/google-maps-in-flutter/step_4/android/settings.gradle b/google-maps-in-flutter/step_4/android/settings.gradle index 536165d35a..b9e43bd376 100644 --- a/google-maps-in-flutter/step_4/android/settings.gradle +++ b/google-maps-in-flutter/step_4/android/settings.gradle @@ -18,8 +18,8 @@ pluginManagement { plugins { id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "7.3.0" apply false - id "org.jetbrains.kotlin.android" version "1.7.10" apply false + id "com.android.application" version "8.1.0" apply false + id "org.jetbrains.kotlin.android" version "1.8.22" apply false } include ":app" diff --git a/google-maps-in-flutter/step_4/ios/Runner.xcodeproj/project.pbxproj b/google-maps-in-flutter/step_4/ios/Runner.xcodeproj/project.pbxproj index a697b3139c..398f0b9f0b 100644 --- a/google-maps-in-flutter/step_4/ios/Runner.xcodeproj/project.pbxproj +++ b/google-maps-in-flutter/step_4/ios/Runner.xcodeproj/project.pbxproj @@ -10,12 +10,12 @@ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; - 4A4327716BEA119C6B5C7AE1 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 59E9DDA0767EFDD1FFE95D3E /* Pods_RunnerTests.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; - 7E3B1C7719DA228FBD7806C2 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 71605B1F7C8BCD424B6A8BA1 /* Pods_Runner.framework */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; + 9E0F70688A3091F9486161D2 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 09C37DCE872715D686A62AC6 /* Pods_Runner.framework */; }; + F075F74C4399201114FDCDB7 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F72E91D76B8E433805F17B29 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,20 +42,19 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 095C742AB07F93444EADB2A8 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 09C37DCE872715D686A62AC6 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 2DBF17E3C582BE0C35455850 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 47A67EB4C978EB215AE7D638 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - 59E9DDA0767EFDD1FFE95D3E /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 71605B1F7C8BCD424B6A8BA1 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 62B85A57E9B56F064DD39D86 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 6C3254DBAB169ED6F65DFCDC /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 8C80180EC1882D8C59A0ABC2 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 8ED847A9F5DB54F5EBF10F38 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 837ACBF826A70ED2E7A6DF05 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -63,30 +62,40 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - F7535A5A3C325EC2404D6B91 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - FB1385F89E9824A2B6C113EB /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + A63DD4555619517F97A4227E /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + E18236640870F7B697A57742 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + F72E91D76B8E433805F17B29 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 6E33EE250277DA9B5D87B5A0 /* Frameworks */ = { + 97C146EB1CF9000F007C117D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 4A4327716BEA119C6B5C7AE1 /* Pods_RunnerTests.framework in Frameworks */, + 9E0F70688A3091F9486161D2 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 97C146EB1CF9000F007C117D /* Frameworks */ = { + B2AEB873C105440C4D370A71 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 7E3B1C7719DA228FBD7806C2 /* Pods_Runner.framework in Frameworks */, + F075F74C4399201114FDCDB7 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 1236266A674D135122F42F80 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 09C37DCE872715D686A62AC6 /* Pods_Runner.framework */, + F72E91D76B8E433805F17B29 /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; 331C8082294A63A400263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -113,8 +122,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - ABBAE412E9FB10D88EDEA0AC /* Pods */, - EEF6895B31342FF08BD04E87 /* Frameworks */, + C4865760D467DF3F9015E4EC /* Pods */, + 1236266A674D135122F42F80 /* Frameworks */, ); sourceTree = ""; }; @@ -142,29 +151,20 @@ path = Runner; sourceTree = ""; }; - ABBAE412E9FB10D88EDEA0AC /* Pods */ = { + C4865760D467DF3F9015E4EC /* Pods */ = { isa = PBXGroup; children = ( - 2DBF17E3C582BE0C35455850 /* Pods-Runner.debug.xcconfig */, - 8C80180EC1882D8C59A0ABC2 /* Pods-Runner.release.xcconfig */, - 8ED847A9F5DB54F5EBF10F38 /* Pods-Runner.profile.xcconfig */, - FB1385F89E9824A2B6C113EB /* Pods-RunnerTests.debug.xcconfig */, - F7535A5A3C325EC2404D6B91 /* Pods-RunnerTests.release.xcconfig */, - 47A67EB4C978EB215AE7D638 /* Pods-RunnerTests.profile.xcconfig */, + A63DD4555619517F97A4227E /* Pods-Runner.debug.xcconfig */, + E18236640870F7B697A57742 /* Pods-Runner.release.xcconfig */, + 095C742AB07F93444EADB2A8 /* Pods-Runner.profile.xcconfig */, + 6C3254DBAB169ED6F65DFCDC /* Pods-RunnerTests.debug.xcconfig */, + 837ACBF826A70ED2E7A6DF05 /* Pods-RunnerTests.release.xcconfig */, + 62B85A57E9B56F064DD39D86 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; sourceTree = ""; }; - EEF6895B31342FF08BD04E87 /* Frameworks */ = { - isa = PBXGroup; - children = ( - 71605B1F7C8BCD424B6A8BA1 /* Pods_Runner.framework */, - 59E9DDA0767EFDD1FFE95D3E /* Pods_RunnerTests.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - CE60775061CB32FEDDA75665 /* [CP] Check Pods Manifest.lock */, + 05939E9CC810245F0D53E5FC /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 6E33EE250277DA9B5D87B5A0 /* Frameworks */, + B2AEB873C105440C4D370A71 /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - EFF69F5DF9F97747048BBF87 /* [CP] Check Pods Manifest.lock */, + 61DA26113B165296670A3CAF /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 3ABC074A098DC10F1ED40AA0 /* [CP] Copy Pods Resources */, + E196DA6FAC5C9ECB6AE21F8C /* [CP] Copy Pods Resources */, ); buildRules = ( ); @@ -270,21 +270,26 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 3ABC074A098DC10F1ED40AA0 /* [CP] Copy Pods Resources */ = { + 05939E9CC810245F0D53E5FC /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Copy Pods Resources"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { @@ -303,63 +308,58 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { + 61DA26113B165296670A3CAF /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "Run Script"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - CE60775061CB32FEDDA75665 /* [CP] Check Pods Manifest.lock */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( ); + name = "Run Script"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - EFF69F5DF9F97747048BBF87 /* [CP] Check Pods Manifest.lock */ = { + E196DA6FAC5C9ECB6AE21F8C /* [CP] Copy Pods Resources */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; + name = "[CP] Copy Pods Resources"; outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n"; showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = FB1385F89E9824A2B6C113EB /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 6C3254DBAB169ED6F65DFCDC /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = F7535A5A3C325EC2404D6B91 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 837ACBF826A70ED2E7A6DF05 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 47A67EB4C978EB215AE7D638 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 62B85A57E9B56F064DD39D86 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/google-maps-in-flutter/step_4/pubspec.yaml b/google-maps-in-flutter/step_4/pubspec.yaml index a14344db47..9c3bb2cf92 100644 --- a/google-maps-in-flutter/step_4/pubspec.yaml +++ b/google-maps-in-flutter/step_4/pubspec.yaml @@ -46,7 +46,7 @@ dev_dependencies: # activated in the `analysis_options.yaml` file located at the root of your # package. See that file for information about deactivating specific lint # rules and activating additional ones. - flutter_lints: ^4.0.0 + flutter_lints: ^5.0.0 # For information on the generic Dart part of this file, see the # following page: https://dart.dev/tools/pub/pubspec diff --git a/google-maps-in-flutter/step_5/.gitignore b/google-maps-in-flutter/step_5/.gitignore index 29a3a5017f..79c113f9b5 100644 --- a/google-maps-in-flutter/step_5/.gitignore +++ b/google-maps-in-flutter/step_5/.gitignore @@ -5,9 +5,11 @@ *.swp .DS_Store .atom/ +.build/ .buildlog/ .history .svn/ +.swiftpm/ migrate_working_dir/ # IntelliJ related diff --git a/google-maps-in-flutter/step_5/android/gradle/wrapper/gradle-wrapper.properties b/google-maps-in-flutter/step_5/android/gradle/wrapper/gradle-wrapper.properties index e1ca574ef0..7bb2df6ba6 100644 --- a/google-maps-in-flutter/step_5/android/gradle/wrapper/gradle-wrapper.properties +++ b/google-maps-in-flutter/step_5/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip diff --git a/google-maps-in-flutter/step_5/android/settings.gradle b/google-maps-in-flutter/step_5/android/settings.gradle index 536165d35a..b9e43bd376 100644 --- a/google-maps-in-flutter/step_5/android/settings.gradle +++ b/google-maps-in-flutter/step_5/android/settings.gradle @@ -18,8 +18,8 @@ pluginManagement { plugins { id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "7.3.0" apply false - id "org.jetbrains.kotlin.android" version "1.7.10" apply false + id "com.android.application" version "8.1.0" apply false + id "org.jetbrains.kotlin.android" version "1.8.22" apply false } include ":app" diff --git a/google-maps-in-flutter/step_5/ios/Runner.xcodeproj/project.pbxproj b/google-maps-in-flutter/step_5/ios/Runner.xcodeproj/project.pbxproj index a697b3139c..398f0b9f0b 100644 --- a/google-maps-in-flutter/step_5/ios/Runner.xcodeproj/project.pbxproj +++ b/google-maps-in-flutter/step_5/ios/Runner.xcodeproj/project.pbxproj @@ -10,12 +10,12 @@ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; - 4A4327716BEA119C6B5C7AE1 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 59E9DDA0767EFDD1FFE95D3E /* Pods_RunnerTests.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; - 7E3B1C7719DA228FBD7806C2 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 71605B1F7C8BCD424B6A8BA1 /* Pods_Runner.framework */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; + 9E0F70688A3091F9486161D2 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 09C37DCE872715D686A62AC6 /* Pods_Runner.framework */; }; + F075F74C4399201114FDCDB7 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F72E91D76B8E433805F17B29 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,20 +42,19 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 095C742AB07F93444EADB2A8 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 09C37DCE872715D686A62AC6 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 2DBF17E3C582BE0C35455850 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 47A67EB4C978EB215AE7D638 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - 59E9DDA0767EFDD1FFE95D3E /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 71605B1F7C8BCD424B6A8BA1 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 62B85A57E9B56F064DD39D86 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 6C3254DBAB169ED6F65DFCDC /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 8C80180EC1882D8C59A0ABC2 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 8ED847A9F5DB54F5EBF10F38 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 837ACBF826A70ED2E7A6DF05 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -63,30 +62,40 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - F7535A5A3C325EC2404D6B91 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - FB1385F89E9824A2B6C113EB /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + A63DD4555619517F97A4227E /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + E18236640870F7B697A57742 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + F72E91D76B8E433805F17B29 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 6E33EE250277DA9B5D87B5A0 /* Frameworks */ = { + 97C146EB1CF9000F007C117D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 4A4327716BEA119C6B5C7AE1 /* Pods_RunnerTests.framework in Frameworks */, + 9E0F70688A3091F9486161D2 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 97C146EB1CF9000F007C117D /* Frameworks */ = { + B2AEB873C105440C4D370A71 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 7E3B1C7719DA228FBD7806C2 /* Pods_Runner.framework in Frameworks */, + F075F74C4399201114FDCDB7 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 1236266A674D135122F42F80 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 09C37DCE872715D686A62AC6 /* Pods_Runner.framework */, + F72E91D76B8E433805F17B29 /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; 331C8082294A63A400263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -113,8 +122,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - ABBAE412E9FB10D88EDEA0AC /* Pods */, - EEF6895B31342FF08BD04E87 /* Frameworks */, + C4865760D467DF3F9015E4EC /* Pods */, + 1236266A674D135122F42F80 /* Frameworks */, ); sourceTree = ""; }; @@ -142,29 +151,20 @@ path = Runner; sourceTree = ""; }; - ABBAE412E9FB10D88EDEA0AC /* Pods */ = { + C4865760D467DF3F9015E4EC /* Pods */ = { isa = PBXGroup; children = ( - 2DBF17E3C582BE0C35455850 /* Pods-Runner.debug.xcconfig */, - 8C80180EC1882D8C59A0ABC2 /* Pods-Runner.release.xcconfig */, - 8ED847A9F5DB54F5EBF10F38 /* Pods-Runner.profile.xcconfig */, - FB1385F89E9824A2B6C113EB /* Pods-RunnerTests.debug.xcconfig */, - F7535A5A3C325EC2404D6B91 /* Pods-RunnerTests.release.xcconfig */, - 47A67EB4C978EB215AE7D638 /* Pods-RunnerTests.profile.xcconfig */, + A63DD4555619517F97A4227E /* Pods-Runner.debug.xcconfig */, + E18236640870F7B697A57742 /* Pods-Runner.release.xcconfig */, + 095C742AB07F93444EADB2A8 /* Pods-Runner.profile.xcconfig */, + 6C3254DBAB169ED6F65DFCDC /* Pods-RunnerTests.debug.xcconfig */, + 837ACBF826A70ED2E7A6DF05 /* Pods-RunnerTests.release.xcconfig */, + 62B85A57E9B56F064DD39D86 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; sourceTree = ""; }; - EEF6895B31342FF08BD04E87 /* Frameworks */ = { - isa = PBXGroup; - children = ( - 71605B1F7C8BCD424B6A8BA1 /* Pods_Runner.framework */, - 59E9DDA0767EFDD1FFE95D3E /* Pods_RunnerTests.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - CE60775061CB32FEDDA75665 /* [CP] Check Pods Manifest.lock */, + 05939E9CC810245F0D53E5FC /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 6E33EE250277DA9B5D87B5A0 /* Frameworks */, + B2AEB873C105440C4D370A71 /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - EFF69F5DF9F97747048BBF87 /* [CP] Check Pods Manifest.lock */, + 61DA26113B165296670A3CAF /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 3ABC074A098DC10F1ED40AA0 /* [CP] Copy Pods Resources */, + E196DA6FAC5C9ECB6AE21F8C /* [CP] Copy Pods Resources */, ); buildRules = ( ); @@ -270,21 +270,26 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 3ABC074A098DC10F1ED40AA0 /* [CP] Copy Pods Resources */ = { + 05939E9CC810245F0D53E5FC /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Copy Pods Resources"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { @@ -303,63 +308,58 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { + 61DA26113B165296670A3CAF /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "Run Script"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - CE60775061CB32FEDDA75665 /* [CP] Check Pods Manifest.lock */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( ); + name = "Run Script"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - EFF69F5DF9F97747048BBF87 /* [CP] Check Pods Manifest.lock */ = { + E196DA6FAC5C9ECB6AE21F8C /* [CP] Copy Pods Resources */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; + name = "[CP] Copy Pods Resources"; outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n"; showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = FB1385F89E9824A2B6C113EB /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 6C3254DBAB169ED6F65DFCDC /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = F7535A5A3C325EC2404D6B91 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 837ACBF826A70ED2E7A6DF05 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 47A67EB4C978EB215AE7D638 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 62B85A57E9B56F064DD39D86 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/google-maps-in-flutter/step_5/pubspec.yaml b/google-maps-in-flutter/step_5/pubspec.yaml index 75b43416a8..a1922ba619 100644 --- a/google-maps-in-flutter/step_5/pubspec.yaml +++ b/google-maps-in-flutter/step_5/pubspec.yaml @@ -49,8 +49,8 @@ dev_dependencies: # activated in the `analysis_options.yaml` file located at the root of your # package. See that file for information about deactivating specific lint # rules and activating additional ones. - flutter_lints: ^4.0.0 - build_runner: ^2.4.12 + flutter_lints: ^5.0.0 + build_runner: ^2.4.13 # For information on the generic Dart part of this file, see the # following page: https://dart.dev/tools/pub/pubspec From 318004000dbe3e104b1c31655b900b1988aecbd9 Mon Sep 17 00:00:00 2001 From: Brett Morgan Date: Fri, 18 Oct 2024 17:12:45 +1100 Subject: [PATCH 028/108] Update `namer` for flutter beta --- namer/step_03/.gitignore | 2 ++ .../step_03/android/gradle/wrapper/gradle-wrapper.properties | 2 +- namer/step_03/android/settings.gradle | 4 ++-- namer/step_03/macos/Runner/AppDelegate.swift | 4 ++++ namer/step_03/pubspec.yaml | 2 +- namer/step_04_a_widget/.gitignore | 2 ++ .../android/gradle/wrapper/gradle-wrapper.properties | 2 +- namer/step_04_a_widget/android/settings.gradle | 4 ++-- namer/step_04_a_widget/macos/Runner/AppDelegate.swift | 4 ++++ namer/step_04_a_widget/pubspec.yaml | 2 +- namer/step_04_b_behavior/.gitignore | 2 ++ .../android/gradle/wrapper/gradle-wrapper.properties | 2 +- namer/step_04_b_behavior/android/settings.gradle | 4 ++-- namer/step_04_b_behavior/macos/Runner/AppDelegate.swift | 4 ++++ namer/step_04_b_behavior/pubspec.yaml | 2 +- namer/step_05_a_pair/.gitignore | 2 ++ .../android/gradle/wrapper/gradle-wrapper.properties | 2 +- namer/step_05_a_pair/android/settings.gradle | 4 ++-- namer/step_05_a_pair/macos/Runner/AppDelegate.swift | 4 ++++ namer/step_05_a_pair/pubspec.yaml | 2 +- namer/step_05_b_extract/.gitignore | 2 ++ .../android/gradle/wrapper/gradle-wrapper.properties | 2 +- namer/step_05_b_extract/android/settings.gradle | 4 ++-- namer/step_05_b_extract/macos/Runner/AppDelegate.swift | 4 ++++ namer/step_05_b_extract/pubspec.yaml | 2 +- namer/step_05_c_card_padding/.gitignore | 2 ++ .../android/gradle/wrapper/gradle-wrapper.properties | 2 +- namer/step_05_c_card_padding/android/settings.gradle | 4 ++-- namer/step_05_c_card_padding/macos/Runner/AppDelegate.swift | 4 ++++ namer/step_05_c_card_padding/pubspec.yaml | 2 +- namer/step_05_d_theme/.gitignore | 2 ++ .../android/gradle/wrapper/gradle-wrapper.properties | 2 +- namer/step_05_d_theme/android/settings.gradle | 4 ++-- namer/step_05_d_theme/macos/Runner/AppDelegate.swift | 4 ++++ namer/step_05_d_theme/pubspec.yaml | 2 +- namer/step_05_e_text_style/.gitignore | 2 ++ .../android/gradle/wrapper/gradle-wrapper.properties | 2 +- namer/step_05_e_text_style/android/settings.gradle | 4 ++-- namer/step_05_e_text_style/macos/Runner/AppDelegate.swift | 4 ++++ namer/step_05_e_text_style/pubspec.yaml | 2 +- namer/step_05_f_accessibility/.gitignore | 2 ++ .../android/gradle/wrapper/gradle-wrapper.properties | 2 +- namer/step_05_f_accessibility/android/settings.gradle | 4 ++-- namer/step_05_f_accessibility/macos/Runner/AppDelegate.swift | 4 ++++ namer/step_05_f_accessibility/pubspec.yaml | 2 +- namer/step_05_g_center_vertical/.gitignore | 2 ++ .../android/gradle/wrapper/gradle-wrapper.properties | 2 +- namer/step_05_g_center_vertical/android/settings.gradle | 4 ++-- .../step_05_g_center_vertical/macos/Runner/AppDelegate.swift | 4 ++++ namer/step_05_g_center_vertical/pubspec.yaml | 2 +- namer/step_05_h_center_horizontal/.gitignore | 2 ++ .../android/gradle/wrapper/gradle-wrapper.properties | 2 +- namer/step_05_h_center_horizontal/android/settings.gradle | 4 ++-- .../macos/Runner/AppDelegate.swift | 4 ++++ namer/step_05_h_center_horizontal/pubspec.yaml | 2 +- namer/step_05_i_optional_changes/.gitignore | 2 ++ .../android/gradle/wrapper/gradle-wrapper.properties | 2 +- namer/step_05_i_optional_changes/android/settings.gradle | 4 ++-- .../step_05_i_optional_changes/macos/Runner/AppDelegate.swift | 4 ++++ namer/step_05_i_optional_changes/pubspec.yaml | 2 +- namer/step_06_a_business_logic/.gitignore | 2 ++ .../android/gradle/wrapper/gradle-wrapper.properties | 2 +- namer/step_06_a_business_logic/android/settings.gradle | 4 ++-- namer/step_06_a_business_logic/macos/Runner/AppDelegate.swift | 4 ++++ namer/step_06_a_business_logic/pubspec.yaml | 2 +- namer/step_06_b_add_row/.gitignore | 2 ++ .../android/gradle/wrapper/gradle-wrapper.properties | 2 +- namer/step_06_b_add_row/android/settings.gradle | 4 ++-- namer/step_06_b_add_row/macos/Runner/AppDelegate.swift | 4 ++++ namer/step_06_b_add_row/pubspec.yaml | 2 +- namer/step_06_c_add_like_button/.gitignore | 2 ++ .../android/gradle/wrapper/gradle-wrapper.properties | 2 +- namer/step_06_c_add_like_button/android/settings.gradle | 4 ++-- .../step_06_c_add_like_button/macos/Runner/AppDelegate.swift | 4 ++++ namer/step_06_c_add_like_button/pubspec.yaml | 2 +- namer/step_07_a_split_my_home_page/.gitignore | 2 ++ .../android/gradle/wrapper/gradle-wrapper.properties | 2 +- namer/step_07_a_split_my_home_page/android/settings.gradle | 4 ++-- .../macos/Runner/AppDelegate.swift | 4 ++++ namer/step_07_a_split_my_home_page/pubspec.yaml | 2 +- namer/step_07_b_convert_to_stateful/.gitignore | 2 ++ .../android/gradle/wrapper/gradle-wrapper.properties | 2 +- namer/step_07_b_convert_to_stateful/android/settings.gradle | 4 ++-- .../macos/Runner/AppDelegate.swift | 4 ++++ namer/step_07_b_convert_to_stateful/pubspec.yaml | 2 +- namer/step_07_c_add_selectedindex/.gitignore | 2 ++ .../android/gradle/wrapper/gradle-wrapper.properties | 2 +- namer/step_07_c_add_selectedindex/android/settings.gradle | 4 ++-- .../macos/Runner/AppDelegate.swift | 4 ++++ namer/step_07_c_add_selectedindex/pubspec.yaml | 2 +- namer/step_07_d_use_selectedindex/.gitignore | 2 ++ .../android/gradle/wrapper/gradle-wrapper.properties | 2 +- namer/step_07_d_use_selectedindex/android/settings.gradle | 4 ++-- .../macos/Runner/AppDelegate.swift | 4 ++++ namer/step_07_d_use_selectedindex/pubspec.yaml | 2 +- namer/step_07_e_add_layout_builder/.gitignore | 2 ++ .../android/gradle/wrapper/gradle-wrapper.properties | 2 +- namer/step_07_e_add_layout_builder/android/settings.gradle | 4 ++-- .../macos/Runner/AppDelegate.swift | 4 ++++ namer/step_07_e_add_layout_builder/pubspec.yaml | 2 +- namer/step_08/.gitignore | 2 ++ .../step_08/android/gradle/wrapper/gradle-wrapper.properties | 2 +- namer/step_08/android/settings.gradle | 4 ++-- namer/step_08/macos/Runner/AppDelegate.swift | 4 ++++ namer/step_08/pubspec.yaml | 2 +- 105 files changed, 210 insertions(+), 84 deletions(-) diff --git a/namer/step_03/.gitignore b/namer/step_03/.gitignore index 29a3a5017f..79c113f9b5 100644 --- a/namer/step_03/.gitignore +++ b/namer/step_03/.gitignore @@ -5,9 +5,11 @@ *.swp .DS_Store .atom/ +.build/ .buildlog/ .history .svn/ +.swiftpm/ migrate_working_dir/ # IntelliJ related diff --git a/namer/step_03/android/gradle/wrapper/gradle-wrapper.properties b/namer/step_03/android/gradle/wrapper/gradle-wrapper.properties index e1ca574ef0..7bb2df6ba6 100644 --- a/namer/step_03/android/gradle/wrapper/gradle-wrapper.properties +++ b/namer/step_03/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip diff --git a/namer/step_03/android/settings.gradle b/namer/step_03/android/settings.gradle index 536165d35a..b9e43bd376 100644 --- a/namer/step_03/android/settings.gradle +++ b/namer/step_03/android/settings.gradle @@ -18,8 +18,8 @@ pluginManagement { plugins { id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "7.3.0" apply false - id "org.jetbrains.kotlin.android" version "1.7.10" apply false + id "com.android.application" version "8.1.0" apply false + id "org.jetbrains.kotlin.android" version "1.8.22" apply false } include ":app" diff --git a/namer/step_03/macos/Runner/AppDelegate.swift b/namer/step_03/macos/Runner/AppDelegate.swift index 8e02df2888..b3c1761412 100644 --- a/namer/step_03/macos/Runner/AppDelegate.swift +++ b/namer/step_03/macos/Runner/AppDelegate.swift @@ -6,4 +6,8 @@ class AppDelegate: FlutterAppDelegate { override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { return true } + + override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { + return true + } } diff --git a/namer/step_03/pubspec.yaml b/namer/step_03/pubspec.yaml index 8e4d74a652..c83392b54d 100644 --- a/namer/step_03/pubspec.yaml +++ b/namer/step_03/pubspec.yaml @@ -19,7 +19,7 @@ dev_dependencies: flutter_test: sdk: flutter - flutter_lints: ^4.0.0 + flutter_lints: ^5.0.0 flutter: uses-material-design: true diff --git a/namer/step_04_a_widget/.gitignore b/namer/step_04_a_widget/.gitignore index 29a3a5017f..79c113f9b5 100644 --- a/namer/step_04_a_widget/.gitignore +++ b/namer/step_04_a_widget/.gitignore @@ -5,9 +5,11 @@ *.swp .DS_Store .atom/ +.build/ .buildlog/ .history .svn/ +.swiftpm/ migrate_working_dir/ # IntelliJ related diff --git a/namer/step_04_a_widget/android/gradle/wrapper/gradle-wrapper.properties b/namer/step_04_a_widget/android/gradle/wrapper/gradle-wrapper.properties index e1ca574ef0..7bb2df6ba6 100644 --- a/namer/step_04_a_widget/android/gradle/wrapper/gradle-wrapper.properties +++ b/namer/step_04_a_widget/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip diff --git a/namer/step_04_a_widget/android/settings.gradle b/namer/step_04_a_widget/android/settings.gradle index 536165d35a..b9e43bd376 100644 --- a/namer/step_04_a_widget/android/settings.gradle +++ b/namer/step_04_a_widget/android/settings.gradle @@ -18,8 +18,8 @@ pluginManagement { plugins { id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "7.3.0" apply false - id "org.jetbrains.kotlin.android" version "1.7.10" apply false + id "com.android.application" version "8.1.0" apply false + id "org.jetbrains.kotlin.android" version "1.8.22" apply false } include ":app" diff --git a/namer/step_04_a_widget/macos/Runner/AppDelegate.swift b/namer/step_04_a_widget/macos/Runner/AppDelegate.swift index 8e02df2888..b3c1761412 100644 --- a/namer/step_04_a_widget/macos/Runner/AppDelegate.swift +++ b/namer/step_04_a_widget/macos/Runner/AppDelegate.swift @@ -6,4 +6,8 @@ class AppDelegate: FlutterAppDelegate { override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { return true } + + override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { + return true + } } diff --git a/namer/step_04_a_widget/pubspec.yaml b/namer/step_04_a_widget/pubspec.yaml index 8e4d74a652..c83392b54d 100644 --- a/namer/step_04_a_widget/pubspec.yaml +++ b/namer/step_04_a_widget/pubspec.yaml @@ -19,7 +19,7 @@ dev_dependencies: flutter_test: sdk: flutter - flutter_lints: ^4.0.0 + flutter_lints: ^5.0.0 flutter: uses-material-design: true diff --git a/namer/step_04_b_behavior/.gitignore b/namer/step_04_b_behavior/.gitignore index 29a3a5017f..79c113f9b5 100644 --- a/namer/step_04_b_behavior/.gitignore +++ b/namer/step_04_b_behavior/.gitignore @@ -5,9 +5,11 @@ *.swp .DS_Store .atom/ +.build/ .buildlog/ .history .svn/ +.swiftpm/ migrate_working_dir/ # IntelliJ related diff --git a/namer/step_04_b_behavior/android/gradle/wrapper/gradle-wrapper.properties b/namer/step_04_b_behavior/android/gradle/wrapper/gradle-wrapper.properties index e1ca574ef0..7bb2df6ba6 100644 --- a/namer/step_04_b_behavior/android/gradle/wrapper/gradle-wrapper.properties +++ b/namer/step_04_b_behavior/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip diff --git a/namer/step_04_b_behavior/android/settings.gradle b/namer/step_04_b_behavior/android/settings.gradle index 536165d35a..b9e43bd376 100644 --- a/namer/step_04_b_behavior/android/settings.gradle +++ b/namer/step_04_b_behavior/android/settings.gradle @@ -18,8 +18,8 @@ pluginManagement { plugins { id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "7.3.0" apply false - id "org.jetbrains.kotlin.android" version "1.7.10" apply false + id "com.android.application" version "8.1.0" apply false + id "org.jetbrains.kotlin.android" version "1.8.22" apply false } include ":app" diff --git a/namer/step_04_b_behavior/macos/Runner/AppDelegate.swift b/namer/step_04_b_behavior/macos/Runner/AppDelegate.swift index 8e02df2888..b3c1761412 100644 --- a/namer/step_04_b_behavior/macos/Runner/AppDelegate.swift +++ b/namer/step_04_b_behavior/macos/Runner/AppDelegate.swift @@ -6,4 +6,8 @@ class AppDelegate: FlutterAppDelegate { override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { return true } + + override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { + return true + } } diff --git a/namer/step_04_b_behavior/pubspec.yaml b/namer/step_04_b_behavior/pubspec.yaml index 8e4d74a652..c83392b54d 100644 --- a/namer/step_04_b_behavior/pubspec.yaml +++ b/namer/step_04_b_behavior/pubspec.yaml @@ -19,7 +19,7 @@ dev_dependencies: flutter_test: sdk: flutter - flutter_lints: ^4.0.0 + flutter_lints: ^5.0.0 flutter: uses-material-design: true diff --git a/namer/step_05_a_pair/.gitignore b/namer/step_05_a_pair/.gitignore index 29a3a5017f..79c113f9b5 100644 --- a/namer/step_05_a_pair/.gitignore +++ b/namer/step_05_a_pair/.gitignore @@ -5,9 +5,11 @@ *.swp .DS_Store .atom/ +.build/ .buildlog/ .history .svn/ +.swiftpm/ migrate_working_dir/ # IntelliJ related diff --git a/namer/step_05_a_pair/android/gradle/wrapper/gradle-wrapper.properties b/namer/step_05_a_pair/android/gradle/wrapper/gradle-wrapper.properties index e1ca574ef0..7bb2df6ba6 100644 --- a/namer/step_05_a_pair/android/gradle/wrapper/gradle-wrapper.properties +++ b/namer/step_05_a_pair/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip diff --git a/namer/step_05_a_pair/android/settings.gradle b/namer/step_05_a_pair/android/settings.gradle index 536165d35a..b9e43bd376 100644 --- a/namer/step_05_a_pair/android/settings.gradle +++ b/namer/step_05_a_pair/android/settings.gradle @@ -18,8 +18,8 @@ pluginManagement { plugins { id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "7.3.0" apply false - id "org.jetbrains.kotlin.android" version "1.7.10" apply false + id "com.android.application" version "8.1.0" apply false + id "org.jetbrains.kotlin.android" version "1.8.22" apply false } include ":app" diff --git a/namer/step_05_a_pair/macos/Runner/AppDelegate.swift b/namer/step_05_a_pair/macos/Runner/AppDelegate.swift index 8e02df2888..b3c1761412 100644 --- a/namer/step_05_a_pair/macos/Runner/AppDelegate.swift +++ b/namer/step_05_a_pair/macos/Runner/AppDelegate.swift @@ -6,4 +6,8 @@ class AppDelegate: FlutterAppDelegate { override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { return true } + + override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { + return true + } } diff --git a/namer/step_05_a_pair/pubspec.yaml b/namer/step_05_a_pair/pubspec.yaml index 8e4d74a652..c83392b54d 100644 --- a/namer/step_05_a_pair/pubspec.yaml +++ b/namer/step_05_a_pair/pubspec.yaml @@ -19,7 +19,7 @@ dev_dependencies: flutter_test: sdk: flutter - flutter_lints: ^4.0.0 + flutter_lints: ^5.0.0 flutter: uses-material-design: true diff --git a/namer/step_05_b_extract/.gitignore b/namer/step_05_b_extract/.gitignore index 29a3a5017f..79c113f9b5 100644 --- a/namer/step_05_b_extract/.gitignore +++ b/namer/step_05_b_extract/.gitignore @@ -5,9 +5,11 @@ *.swp .DS_Store .atom/ +.build/ .buildlog/ .history .svn/ +.swiftpm/ migrate_working_dir/ # IntelliJ related diff --git a/namer/step_05_b_extract/android/gradle/wrapper/gradle-wrapper.properties b/namer/step_05_b_extract/android/gradle/wrapper/gradle-wrapper.properties index e1ca574ef0..7bb2df6ba6 100644 --- a/namer/step_05_b_extract/android/gradle/wrapper/gradle-wrapper.properties +++ b/namer/step_05_b_extract/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip diff --git a/namer/step_05_b_extract/android/settings.gradle b/namer/step_05_b_extract/android/settings.gradle index 536165d35a..b9e43bd376 100644 --- a/namer/step_05_b_extract/android/settings.gradle +++ b/namer/step_05_b_extract/android/settings.gradle @@ -18,8 +18,8 @@ pluginManagement { plugins { id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "7.3.0" apply false - id "org.jetbrains.kotlin.android" version "1.7.10" apply false + id "com.android.application" version "8.1.0" apply false + id "org.jetbrains.kotlin.android" version "1.8.22" apply false } include ":app" diff --git a/namer/step_05_b_extract/macos/Runner/AppDelegate.swift b/namer/step_05_b_extract/macos/Runner/AppDelegate.swift index 8e02df2888..b3c1761412 100644 --- a/namer/step_05_b_extract/macos/Runner/AppDelegate.swift +++ b/namer/step_05_b_extract/macos/Runner/AppDelegate.swift @@ -6,4 +6,8 @@ class AppDelegate: FlutterAppDelegate { override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { return true } + + override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { + return true + } } diff --git a/namer/step_05_b_extract/pubspec.yaml b/namer/step_05_b_extract/pubspec.yaml index 8e4d74a652..c83392b54d 100644 --- a/namer/step_05_b_extract/pubspec.yaml +++ b/namer/step_05_b_extract/pubspec.yaml @@ -19,7 +19,7 @@ dev_dependencies: flutter_test: sdk: flutter - flutter_lints: ^4.0.0 + flutter_lints: ^5.0.0 flutter: uses-material-design: true diff --git a/namer/step_05_c_card_padding/.gitignore b/namer/step_05_c_card_padding/.gitignore index 29a3a5017f..79c113f9b5 100644 --- a/namer/step_05_c_card_padding/.gitignore +++ b/namer/step_05_c_card_padding/.gitignore @@ -5,9 +5,11 @@ *.swp .DS_Store .atom/ +.build/ .buildlog/ .history .svn/ +.swiftpm/ migrate_working_dir/ # IntelliJ related diff --git a/namer/step_05_c_card_padding/android/gradle/wrapper/gradle-wrapper.properties b/namer/step_05_c_card_padding/android/gradle/wrapper/gradle-wrapper.properties index e1ca574ef0..7bb2df6ba6 100644 --- a/namer/step_05_c_card_padding/android/gradle/wrapper/gradle-wrapper.properties +++ b/namer/step_05_c_card_padding/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip diff --git a/namer/step_05_c_card_padding/android/settings.gradle b/namer/step_05_c_card_padding/android/settings.gradle index 536165d35a..b9e43bd376 100644 --- a/namer/step_05_c_card_padding/android/settings.gradle +++ b/namer/step_05_c_card_padding/android/settings.gradle @@ -18,8 +18,8 @@ pluginManagement { plugins { id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "7.3.0" apply false - id "org.jetbrains.kotlin.android" version "1.7.10" apply false + id "com.android.application" version "8.1.0" apply false + id "org.jetbrains.kotlin.android" version "1.8.22" apply false } include ":app" diff --git a/namer/step_05_c_card_padding/macos/Runner/AppDelegate.swift b/namer/step_05_c_card_padding/macos/Runner/AppDelegate.swift index 8e02df2888..b3c1761412 100644 --- a/namer/step_05_c_card_padding/macos/Runner/AppDelegate.swift +++ b/namer/step_05_c_card_padding/macos/Runner/AppDelegate.swift @@ -6,4 +6,8 @@ class AppDelegate: FlutterAppDelegate { override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { return true } + + override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { + return true + } } diff --git a/namer/step_05_c_card_padding/pubspec.yaml b/namer/step_05_c_card_padding/pubspec.yaml index 8e4d74a652..c83392b54d 100644 --- a/namer/step_05_c_card_padding/pubspec.yaml +++ b/namer/step_05_c_card_padding/pubspec.yaml @@ -19,7 +19,7 @@ dev_dependencies: flutter_test: sdk: flutter - flutter_lints: ^4.0.0 + flutter_lints: ^5.0.0 flutter: uses-material-design: true diff --git a/namer/step_05_d_theme/.gitignore b/namer/step_05_d_theme/.gitignore index 29a3a5017f..79c113f9b5 100644 --- a/namer/step_05_d_theme/.gitignore +++ b/namer/step_05_d_theme/.gitignore @@ -5,9 +5,11 @@ *.swp .DS_Store .atom/ +.build/ .buildlog/ .history .svn/ +.swiftpm/ migrate_working_dir/ # IntelliJ related diff --git a/namer/step_05_d_theme/android/gradle/wrapper/gradle-wrapper.properties b/namer/step_05_d_theme/android/gradle/wrapper/gradle-wrapper.properties index e1ca574ef0..7bb2df6ba6 100644 --- a/namer/step_05_d_theme/android/gradle/wrapper/gradle-wrapper.properties +++ b/namer/step_05_d_theme/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip diff --git a/namer/step_05_d_theme/android/settings.gradle b/namer/step_05_d_theme/android/settings.gradle index 536165d35a..b9e43bd376 100644 --- a/namer/step_05_d_theme/android/settings.gradle +++ b/namer/step_05_d_theme/android/settings.gradle @@ -18,8 +18,8 @@ pluginManagement { plugins { id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "7.3.0" apply false - id "org.jetbrains.kotlin.android" version "1.7.10" apply false + id "com.android.application" version "8.1.0" apply false + id "org.jetbrains.kotlin.android" version "1.8.22" apply false } include ":app" diff --git a/namer/step_05_d_theme/macos/Runner/AppDelegate.swift b/namer/step_05_d_theme/macos/Runner/AppDelegate.swift index 8e02df2888..b3c1761412 100644 --- a/namer/step_05_d_theme/macos/Runner/AppDelegate.swift +++ b/namer/step_05_d_theme/macos/Runner/AppDelegate.swift @@ -6,4 +6,8 @@ class AppDelegate: FlutterAppDelegate { override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { return true } + + override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { + return true + } } diff --git a/namer/step_05_d_theme/pubspec.yaml b/namer/step_05_d_theme/pubspec.yaml index 8e4d74a652..c83392b54d 100644 --- a/namer/step_05_d_theme/pubspec.yaml +++ b/namer/step_05_d_theme/pubspec.yaml @@ -19,7 +19,7 @@ dev_dependencies: flutter_test: sdk: flutter - flutter_lints: ^4.0.0 + flutter_lints: ^5.0.0 flutter: uses-material-design: true diff --git a/namer/step_05_e_text_style/.gitignore b/namer/step_05_e_text_style/.gitignore index 29a3a5017f..79c113f9b5 100644 --- a/namer/step_05_e_text_style/.gitignore +++ b/namer/step_05_e_text_style/.gitignore @@ -5,9 +5,11 @@ *.swp .DS_Store .atom/ +.build/ .buildlog/ .history .svn/ +.swiftpm/ migrate_working_dir/ # IntelliJ related diff --git a/namer/step_05_e_text_style/android/gradle/wrapper/gradle-wrapper.properties b/namer/step_05_e_text_style/android/gradle/wrapper/gradle-wrapper.properties index e1ca574ef0..7bb2df6ba6 100644 --- a/namer/step_05_e_text_style/android/gradle/wrapper/gradle-wrapper.properties +++ b/namer/step_05_e_text_style/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip diff --git a/namer/step_05_e_text_style/android/settings.gradle b/namer/step_05_e_text_style/android/settings.gradle index 536165d35a..b9e43bd376 100644 --- a/namer/step_05_e_text_style/android/settings.gradle +++ b/namer/step_05_e_text_style/android/settings.gradle @@ -18,8 +18,8 @@ pluginManagement { plugins { id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "7.3.0" apply false - id "org.jetbrains.kotlin.android" version "1.7.10" apply false + id "com.android.application" version "8.1.0" apply false + id "org.jetbrains.kotlin.android" version "1.8.22" apply false } include ":app" diff --git a/namer/step_05_e_text_style/macos/Runner/AppDelegate.swift b/namer/step_05_e_text_style/macos/Runner/AppDelegate.swift index 8e02df2888..b3c1761412 100644 --- a/namer/step_05_e_text_style/macos/Runner/AppDelegate.swift +++ b/namer/step_05_e_text_style/macos/Runner/AppDelegate.swift @@ -6,4 +6,8 @@ class AppDelegate: FlutterAppDelegate { override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { return true } + + override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { + return true + } } diff --git a/namer/step_05_e_text_style/pubspec.yaml b/namer/step_05_e_text_style/pubspec.yaml index 8e4d74a652..c83392b54d 100644 --- a/namer/step_05_e_text_style/pubspec.yaml +++ b/namer/step_05_e_text_style/pubspec.yaml @@ -19,7 +19,7 @@ dev_dependencies: flutter_test: sdk: flutter - flutter_lints: ^4.0.0 + flutter_lints: ^5.0.0 flutter: uses-material-design: true diff --git a/namer/step_05_f_accessibility/.gitignore b/namer/step_05_f_accessibility/.gitignore index 29a3a5017f..79c113f9b5 100644 --- a/namer/step_05_f_accessibility/.gitignore +++ b/namer/step_05_f_accessibility/.gitignore @@ -5,9 +5,11 @@ *.swp .DS_Store .atom/ +.build/ .buildlog/ .history .svn/ +.swiftpm/ migrate_working_dir/ # IntelliJ related diff --git a/namer/step_05_f_accessibility/android/gradle/wrapper/gradle-wrapper.properties b/namer/step_05_f_accessibility/android/gradle/wrapper/gradle-wrapper.properties index e1ca574ef0..7bb2df6ba6 100644 --- a/namer/step_05_f_accessibility/android/gradle/wrapper/gradle-wrapper.properties +++ b/namer/step_05_f_accessibility/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip diff --git a/namer/step_05_f_accessibility/android/settings.gradle b/namer/step_05_f_accessibility/android/settings.gradle index 536165d35a..b9e43bd376 100644 --- a/namer/step_05_f_accessibility/android/settings.gradle +++ b/namer/step_05_f_accessibility/android/settings.gradle @@ -18,8 +18,8 @@ pluginManagement { plugins { id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "7.3.0" apply false - id "org.jetbrains.kotlin.android" version "1.7.10" apply false + id "com.android.application" version "8.1.0" apply false + id "org.jetbrains.kotlin.android" version "1.8.22" apply false } include ":app" diff --git a/namer/step_05_f_accessibility/macos/Runner/AppDelegate.swift b/namer/step_05_f_accessibility/macos/Runner/AppDelegate.swift index 8e02df2888..b3c1761412 100644 --- a/namer/step_05_f_accessibility/macos/Runner/AppDelegate.swift +++ b/namer/step_05_f_accessibility/macos/Runner/AppDelegate.swift @@ -6,4 +6,8 @@ class AppDelegate: FlutterAppDelegate { override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { return true } + + override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { + return true + } } diff --git a/namer/step_05_f_accessibility/pubspec.yaml b/namer/step_05_f_accessibility/pubspec.yaml index 8e4d74a652..c83392b54d 100644 --- a/namer/step_05_f_accessibility/pubspec.yaml +++ b/namer/step_05_f_accessibility/pubspec.yaml @@ -19,7 +19,7 @@ dev_dependencies: flutter_test: sdk: flutter - flutter_lints: ^4.0.0 + flutter_lints: ^5.0.0 flutter: uses-material-design: true diff --git a/namer/step_05_g_center_vertical/.gitignore b/namer/step_05_g_center_vertical/.gitignore index 29a3a5017f..79c113f9b5 100644 --- a/namer/step_05_g_center_vertical/.gitignore +++ b/namer/step_05_g_center_vertical/.gitignore @@ -5,9 +5,11 @@ *.swp .DS_Store .atom/ +.build/ .buildlog/ .history .svn/ +.swiftpm/ migrate_working_dir/ # IntelliJ related diff --git a/namer/step_05_g_center_vertical/android/gradle/wrapper/gradle-wrapper.properties b/namer/step_05_g_center_vertical/android/gradle/wrapper/gradle-wrapper.properties index e1ca574ef0..7bb2df6ba6 100644 --- a/namer/step_05_g_center_vertical/android/gradle/wrapper/gradle-wrapper.properties +++ b/namer/step_05_g_center_vertical/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip diff --git a/namer/step_05_g_center_vertical/android/settings.gradle b/namer/step_05_g_center_vertical/android/settings.gradle index 536165d35a..b9e43bd376 100644 --- a/namer/step_05_g_center_vertical/android/settings.gradle +++ b/namer/step_05_g_center_vertical/android/settings.gradle @@ -18,8 +18,8 @@ pluginManagement { plugins { id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "7.3.0" apply false - id "org.jetbrains.kotlin.android" version "1.7.10" apply false + id "com.android.application" version "8.1.0" apply false + id "org.jetbrains.kotlin.android" version "1.8.22" apply false } include ":app" diff --git a/namer/step_05_g_center_vertical/macos/Runner/AppDelegate.swift b/namer/step_05_g_center_vertical/macos/Runner/AppDelegate.swift index 8e02df2888..b3c1761412 100644 --- a/namer/step_05_g_center_vertical/macos/Runner/AppDelegate.swift +++ b/namer/step_05_g_center_vertical/macos/Runner/AppDelegate.swift @@ -6,4 +6,8 @@ class AppDelegate: FlutterAppDelegate { override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { return true } + + override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { + return true + } } diff --git a/namer/step_05_g_center_vertical/pubspec.yaml b/namer/step_05_g_center_vertical/pubspec.yaml index 8e4d74a652..c83392b54d 100644 --- a/namer/step_05_g_center_vertical/pubspec.yaml +++ b/namer/step_05_g_center_vertical/pubspec.yaml @@ -19,7 +19,7 @@ dev_dependencies: flutter_test: sdk: flutter - flutter_lints: ^4.0.0 + flutter_lints: ^5.0.0 flutter: uses-material-design: true diff --git a/namer/step_05_h_center_horizontal/.gitignore b/namer/step_05_h_center_horizontal/.gitignore index 29a3a5017f..79c113f9b5 100644 --- a/namer/step_05_h_center_horizontal/.gitignore +++ b/namer/step_05_h_center_horizontal/.gitignore @@ -5,9 +5,11 @@ *.swp .DS_Store .atom/ +.build/ .buildlog/ .history .svn/ +.swiftpm/ migrate_working_dir/ # IntelliJ related diff --git a/namer/step_05_h_center_horizontal/android/gradle/wrapper/gradle-wrapper.properties b/namer/step_05_h_center_horizontal/android/gradle/wrapper/gradle-wrapper.properties index e1ca574ef0..7bb2df6ba6 100644 --- a/namer/step_05_h_center_horizontal/android/gradle/wrapper/gradle-wrapper.properties +++ b/namer/step_05_h_center_horizontal/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip diff --git a/namer/step_05_h_center_horizontal/android/settings.gradle b/namer/step_05_h_center_horizontal/android/settings.gradle index 536165d35a..b9e43bd376 100644 --- a/namer/step_05_h_center_horizontal/android/settings.gradle +++ b/namer/step_05_h_center_horizontal/android/settings.gradle @@ -18,8 +18,8 @@ pluginManagement { plugins { id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "7.3.0" apply false - id "org.jetbrains.kotlin.android" version "1.7.10" apply false + id "com.android.application" version "8.1.0" apply false + id "org.jetbrains.kotlin.android" version "1.8.22" apply false } include ":app" diff --git a/namer/step_05_h_center_horizontal/macos/Runner/AppDelegate.swift b/namer/step_05_h_center_horizontal/macos/Runner/AppDelegate.swift index 8e02df2888..b3c1761412 100644 --- a/namer/step_05_h_center_horizontal/macos/Runner/AppDelegate.swift +++ b/namer/step_05_h_center_horizontal/macos/Runner/AppDelegate.swift @@ -6,4 +6,8 @@ class AppDelegate: FlutterAppDelegate { override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { return true } + + override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { + return true + } } diff --git a/namer/step_05_h_center_horizontal/pubspec.yaml b/namer/step_05_h_center_horizontal/pubspec.yaml index 8e4d74a652..c83392b54d 100644 --- a/namer/step_05_h_center_horizontal/pubspec.yaml +++ b/namer/step_05_h_center_horizontal/pubspec.yaml @@ -19,7 +19,7 @@ dev_dependencies: flutter_test: sdk: flutter - flutter_lints: ^4.0.0 + flutter_lints: ^5.0.0 flutter: uses-material-design: true diff --git a/namer/step_05_i_optional_changes/.gitignore b/namer/step_05_i_optional_changes/.gitignore index 29a3a5017f..79c113f9b5 100644 --- a/namer/step_05_i_optional_changes/.gitignore +++ b/namer/step_05_i_optional_changes/.gitignore @@ -5,9 +5,11 @@ *.swp .DS_Store .atom/ +.build/ .buildlog/ .history .svn/ +.swiftpm/ migrate_working_dir/ # IntelliJ related diff --git a/namer/step_05_i_optional_changes/android/gradle/wrapper/gradle-wrapper.properties b/namer/step_05_i_optional_changes/android/gradle/wrapper/gradle-wrapper.properties index e1ca574ef0..7bb2df6ba6 100644 --- a/namer/step_05_i_optional_changes/android/gradle/wrapper/gradle-wrapper.properties +++ b/namer/step_05_i_optional_changes/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip diff --git a/namer/step_05_i_optional_changes/android/settings.gradle b/namer/step_05_i_optional_changes/android/settings.gradle index 536165d35a..b9e43bd376 100644 --- a/namer/step_05_i_optional_changes/android/settings.gradle +++ b/namer/step_05_i_optional_changes/android/settings.gradle @@ -18,8 +18,8 @@ pluginManagement { plugins { id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "7.3.0" apply false - id "org.jetbrains.kotlin.android" version "1.7.10" apply false + id "com.android.application" version "8.1.0" apply false + id "org.jetbrains.kotlin.android" version "1.8.22" apply false } include ":app" diff --git a/namer/step_05_i_optional_changes/macos/Runner/AppDelegate.swift b/namer/step_05_i_optional_changes/macos/Runner/AppDelegate.swift index 8e02df2888..b3c1761412 100644 --- a/namer/step_05_i_optional_changes/macos/Runner/AppDelegate.swift +++ b/namer/step_05_i_optional_changes/macos/Runner/AppDelegate.swift @@ -6,4 +6,8 @@ class AppDelegate: FlutterAppDelegate { override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { return true } + + override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { + return true + } } diff --git a/namer/step_05_i_optional_changes/pubspec.yaml b/namer/step_05_i_optional_changes/pubspec.yaml index 8e4d74a652..c83392b54d 100644 --- a/namer/step_05_i_optional_changes/pubspec.yaml +++ b/namer/step_05_i_optional_changes/pubspec.yaml @@ -19,7 +19,7 @@ dev_dependencies: flutter_test: sdk: flutter - flutter_lints: ^4.0.0 + flutter_lints: ^5.0.0 flutter: uses-material-design: true diff --git a/namer/step_06_a_business_logic/.gitignore b/namer/step_06_a_business_logic/.gitignore index 29a3a5017f..79c113f9b5 100644 --- a/namer/step_06_a_business_logic/.gitignore +++ b/namer/step_06_a_business_logic/.gitignore @@ -5,9 +5,11 @@ *.swp .DS_Store .atom/ +.build/ .buildlog/ .history .svn/ +.swiftpm/ migrate_working_dir/ # IntelliJ related diff --git a/namer/step_06_a_business_logic/android/gradle/wrapper/gradle-wrapper.properties b/namer/step_06_a_business_logic/android/gradle/wrapper/gradle-wrapper.properties index e1ca574ef0..7bb2df6ba6 100644 --- a/namer/step_06_a_business_logic/android/gradle/wrapper/gradle-wrapper.properties +++ b/namer/step_06_a_business_logic/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip diff --git a/namer/step_06_a_business_logic/android/settings.gradle b/namer/step_06_a_business_logic/android/settings.gradle index 536165d35a..b9e43bd376 100644 --- a/namer/step_06_a_business_logic/android/settings.gradle +++ b/namer/step_06_a_business_logic/android/settings.gradle @@ -18,8 +18,8 @@ pluginManagement { plugins { id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "7.3.0" apply false - id "org.jetbrains.kotlin.android" version "1.7.10" apply false + id "com.android.application" version "8.1.0" apply false + id "org.jetbrains.kotlin.android" version "1.8.22" apply false } include ":app" diff --git a/namer/step_06_a_business_logic/macos/Runner/AppDelegate.swift b/namer/step_06_a_business_logic/macos/Runner/AppDelegate.swift index 8e02df2888..b3c1761412 100644 --- a/namer/step_06_a_business_logic/macos/Runner/AppDelegate.swift +++ b/namer/step_06_a_business_logic/macos/Runner/AppDelegate.swift @@ -6,4 +6,8 @@ class AppDelegate: FlutterAppDelegate { override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { return true } + + override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { + return true + } } diff --git a/namer/step_06_a_business_logic/pubspec.yaml b/namer/step_06_a_business_logic/pubspec.yaml index 8e4d74a652..c83392b54d 100644 --- a/namer/step_06_a_business_logic/pubspec.yaml +++ b/namer/step_06_a_business_logic/pubspec.yaml @@ -19,7 +19,7 @@ dev_dependencies: flutter_test: sdk: flutter - flutter_lints: ^4.0.0 + flutter_lints: ^5.0.0 flutter: uses-material-design: true diff --git a/namer/step_06_b_add_row/.gitignore b/namer/step_06_b_add_row/.gitignore index 29a3a5017f..79c113f9b5 100644 --- a/namer/step_06_b_add_row/.gitignore +++ b/namer/step_06_b_add_row/.gitignore @@ -5,9 +5,11 @@ *.swp .DS_Store .atom/ +.build/ .buildlog/ .history .svn/ +.swiftpm/ migrate_working_dir/ # IntelliJ related diff --git a/namer/step_06_b_add_row/android/gradle/wrapper/gradle-wrapper.properties b/namer/step_06_b_add_row/android/gradle/wrapper/gradle-wrapper.properties index e1ca574ef0..7bb2df6ba6 100644 --- a/namer/step_06_b_add_row/android/gradle/wrapper/gradle-wrapper.properties +++ b/namer/step_06_b_add_row/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip diff --git a/namer/step_06_b_add_row/android/settings.gradle b/namer/step_06_b_add_row/android/settings.gradle index 536165d35a..b9e43bd376 100644 --- a/namer/step_06_b_add_row/android/settings.gradle +++ b/namer/step_06_b_add_row/android/settings.gradle @@ -18,8 +18,8 @@ pluginManagement { plugins { id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "7.3.0" apply false - id "org.jetbrains.kotlin.android" version "1.7.10" apply false + id "com.android.application" version "8.1.0" apply false + id "org.jetbrains.kotlin.android" version "1.8.22" apply false } include ":app" diff --git a/namer/step_06_b_add_row/macos/Runner/AppDelegate.swift b/namer/step_06_b_add_row/macos/Runner/AppDelegate.swift index 8e02df2888..b3c1761412 100644 --- a/namer/step_06_b_add_row/macos/Runner/AppDelegate.swift +++ b/namer/step_06_b_add_row/macos/Runner/AppDelegate.swift @@ -6,4 +6,8 @@ class AppDelegate: FlutterAppDelegate { override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { return true } + + override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { + return true + } } diff --git a/namer/step_06_b_add_row/pubspec.yaml b/namer/step_06_b_add_row/pubspec.yaml index 8e4d74a652..c83392b54d 100644 --- a/namer/step_06_b_add_row/pubspec.yaml +++ b/namer/step_06_b_add_row/pubspec.yaml @@ -19,7 +19,7 @@ dev_dependencies: flutter_test: sdk: flutter - flutter_lints: ^4.0.0 + flutter_lints: ^5.0.0 flutter: uses-material-design: true diff --git a/namer/step_06_c_add_like_button/.gitignore b/namer/step_06_c_add_like_button/.gitignore index 29a3a5017f..79c113f9b5 100644 --- a/namer/step_06_c_add_like_button/.gitignore +++ b/namer/step_06_c_add_like_button/.gitignore @@ -5,9 +5,11 @@ *.swp .DS_Store .atom/ +.build/ .buildlog/ .history .svn/ +.swiftpm/ migrate_working_dir/ # IntelliJ related diff --git a/namer/step_06_c_add_like_button/android/gradle/wrapper/gradle-wrapper.properties b/namer/step_06_c_add_like_button/android/gradle/wrapper/gradle-wrapper.properties index e1ca574ef0..7bb2df6ba6 100644 --- a/namer/step_06_c_add_like_button/android/gradle/wrapper/gradle-wrapper.properties +++ b/namer/step_06_c_add_like_button/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip diff --git a/namer/step_06_c_add_like_button/android/settings.gradle b/namer/step_06_c_add_like_button/android/settings.gradle index 536165d35a..b9e43bd376 100644 --- a/namer/step_06_c_add_like_button/android/settings.gradle +++ b/namer/step_06_c_add_like_button/android/settings.gradle @@ -18,8 +18,8 @@ pluginManagement { plugins { id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "7.3.0" apply false - id "org.jetbrains.kotlin.android" version "1.7.10" apply false + id "com.android.application" version "8.1.0" apply false + id "org.jetbrains.kotlin.android" version "1.8.22" apply false } include ":app" diff --git a/namer/step_06_c_add_like_button/macos/Runner/AppDelegate.swift b/namer/step_06_c_add_like_button/macos/Runner/AppDelegate.swift index 8e02df2888..b3c1761412 100644 --- a/namer/step_06_c_add_like_button/macos/Runner/AppDelegate.swift +++ b/namer/step_06_c_add_like_button/macos/Runner/AppDelegate.swift @@ -6,4 +6,8 @@ class AppDelegate: FlutterAppDelegate { override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { return true } + + override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { + return true + } } diff --git a/namer/step_06_c_add_like_button/pubspec.yaml b/namer/step_06_c_add_like_button/pubspec.yaml index 8e4d74a652..c83392b54d 100644 --- a/namer/step_06_c_add_like_button/pubspec.yaml +++ b/namer/step_06_c_add_like_button/pubspec.yaml @@ -19,7 +19,7 @@ dev_dependencies: flutter_test: sdk: flutter - flutter_lints: ^4.0.0 + flutter_lints: ^5.0.0 flutter: uses-material-design: true diff --git a/namer/step_07_a_split_my_home_page/.gitignore b/namer/step_07_a_split_my_home_page/.gitignore index 29a3a5017f..79c113f9b5 100644 --- a/namer/step_07_a_split_my_home_page/.gitignore +++ b/namer/step_07_a_split_my_home_page/.gitignore @@ -5,9 +5,11 @@ *.swp .DS_Store .atom/ +.build/ .buildlog/ .history .svn/ +.swiftpm/ migrate_working_dir/ # IntelliJ related diff --git a/namer/step_07_a_split_my_home_page/android/gradle/wrapper/gradle-wrapper.properties b/namer/step_07_a_split_my_home_page/android/gradle/wrapper/gradle-wrapper.properties index e1ca574ef0..7bb2df6ba6 100644 --- a/namer/step_07_a_split_my_home_page/android/gradle/wrapper/gradle-wrapper.properties +++ b/namer/step_07_a_split_my_home_page/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip diff --git a/namer/step_07_a_split_my_home_page/android/settings.gradle b/namer/step_07_a_split_my_home_page/android/settings.gradle index 536165d35a..b9e43bd376 100644 --- a/namer/step_07_a_split_my_home_page/android/settings.gradle +++ b/namer/step_07_a_split_my_home_page/android/settings.gradle @@ -18,8 +18,8 @@ pluginManagement { plugins { id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "7.3.0" apply false - id "org.jetbrains.kotlin.android" version "1.7.10" apply false + id "com.android.application" version "8.1.0" apply false + id "org.jetbrains.kotlin.android" version "1.8.22" apply false } include ":app" diff --git a/namer/step_07_a_split_my_home_page/macos/Runner/AppDelegate.swift b/namer/step_07_a_split_my_home_page/macos/Runner/AppDelegate.swift index 8e02df2888..b3c1761412 100644 --- a/namer/step_07_a_split_my_home_page/macos/Runner/AppDelegate.swift +++ b/namer/step_07_a_split_my_home_page/macos/Runner/AppDelegate.swift @@ -6,4 +6,8 @@ class AppDelegate: FlutterAppDelegate { override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { return true } + + override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { + return true + } } diff --git a/namer/step_07_a_split_my_home_page/pubspec.yaml b/namer/step_07_a_split_my_home_page/pubspec.yaml index 8e4d74a652..c83392b54d 100644 --- a/namer/step_07_a_split_my_home_page/pubspec.yaml +++ b/namer/step_07_a_split_my_home_page/pubspec.yaml @@ -19,7 +19,7 @@ dev_dependencies: flutter_test: sdk: flutter - flutter_lints: ^4.0.0 + flutter_lints: ^5.0.0 flutter: uses-material-design: true diff --git a/namer/step_07_b_convert_to_stateful/.gitignore b/namer/step_07_b_convert_to_stateful/.gitignore index 29a3a5017f..79c113f9b5 100644 --- a/namer/step_07_b_convert_to_stateful/.gitignore +++ b/namer/step_07_b_convert_to_stateful/.gitignore @@ -5,9 +5,11 @@ *.swp .DS_Store .atom/ +.build/ .buildlog/ .history .svn/ +.swiftpm/ migrate_working_dir/ # IntelliJ related diff --git a/namer/step_07_b_convert_to_stateful/android/gradle/wrapper/gradle-wrapper.properties b/namer/step_07_b_convert_to_stateful/android/gradle/wrapper/gradle-wrapper.properties index e1ca574ef0..7bb2df6ba6 100644 --- a/namer/step_07_b_convert_to_stateful/android/gradle/wrapper/gradle-wrapper.properties +++ b/namer/step_07_b_convert_to_stateful/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip diff --git a/namer/step_07_b_convert_to_stateful/android/settings.gradle b/namer/step_07_b_convert_to_stateful/android/settings.gradle index 536165d35a..b9e43bd376 100644 --- a/namer/step_07_b_convert_to_stateful/android/settings.gradle +++ b/namer/step_07_b_convert_to_stateful/android/settings.gradle @@ -18,8 +18,8 @@ pluginManagement { plugins { id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "7.3.0" apply false - id "org.jetbrains.kotlin.android" version "1.7.10" apply false + id "com.android.application" version "8.1.0" apply false + id "org.jetbrains.kotlin.android" version "1.8.22" apply false } include ":app" diff --git a/namer/step_07_b_convert_to_stateful/macos/Runner/AppDelegate.swift b/namer/step_07_b_convert_to_stateful/macos/Runner/AppDelegate.swift index 8e02df2888..b3c1761412 100644 --- a/namer/step_07_b_convert_to_stateful/macos/Runner/AppDelegate.swift +++ b/namer/step_07_b_convert_to_stateful/macos/Runner/AppDelegate.swift @@ -6,4 +6,8 @@ class AppDelegate: FlutterAppDelegate { override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { return true } + + override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { + return true + } } diff --git a/namer/step_07_b_convert_to_stateful/pubspec.yaml b/namer/step_07_b_convert_to_stateful/pubspec.yaml index 8e4d74a652..c83392b54d 100644 --- a/namer/step_07_b_convert_to_stateful/pubspec.yaml +++ b/namer/step_07_b_convert_to_stateful/pubspec.yaml @@ -19,7 +19,7 @@ dev_dependencies: flutter_test: sdk: flutter - flutter_lints: ^4.0.0 + flutter_lints: ^5.0.0 flutter: uses-material-design: true diff --git a/namer/step_07_c_add_selectedindex/.gitignore b/namer/step_07_c_add_selectedindex/.gitignore index 29a3a5017f..79c113f9b5 100644 --- a/namer/step_07_c_add_selectedindex/.gitignore +++ b/namer/step_07_c_add_selectedindex/.gitignore @@ -5,9 +5,11 @@ *.swp .DS_Store .atom/ +.build/ .buildlog/ .history .svn/ +.swiftpm/ migrate_working_dir/ # IntelliJ related diff --git a/namer/step_07_c_add_selectedindex/android/gradle/wrapper/gradle-wrapper.properties b/namer/step_07_c_add_selectedindex/android/gradle/wrapper/gradle-wrapper.properties index e1ca574ef0..7bb2df6ba6 100644 --- a/namer/step_07_c_add_selectedindex/android/gradle/wrapper/gradle-wrapper.properties +++ b/namer/step_07_c_add_selectedindex/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip diff --git a/namer/step_07_c_add_selectedindex/android/settings.gradle b/namer/step_07_c_add_selectedindex/android/settings.gradle index 536165d35a..b9e43bd376 100644 --- a/namer/step_07_c_add_selectedindex/android/settings.gradle +++ b/namer/step_07_c_add_selectedindex/android/settings.gradle @@ -18,8 +18,8 @@ pluginManagement { plugins { id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "7.3.0" apply false - id "org.jetbrains.kotlin.android" version "1.7.10" apply false + id "com.android.application" version "8.1.0" apply false + id "org.jetbrains.kotlin.android" version "1.8.22" apply false } include ":app" diff --git a/namer/step_07_c_add_selectedindex/macos/Runner/AppDelegate.swift b/namer/step_07_c_add_selectedindex/macos/Runner/AppDelegate.swift index 8e02df2888..b3c1761412 100644 --- a/namer/step_07_c_add_selectedindex/macos/Runner/AppDelegate.swift +++ b/namer/step_07_c_add_selectedindex/macos/Runner/AppDelegate.swift @@ -6,4 +6,8 @@ class AppDelegate: FlutterAppDelegate { override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { return true } + + override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { + return true + } } diff --git a/namer/step_07_c_add_selectedindex/pubspec.yaml b/namer/step_07_c_add_selectedindex/pubspec.yaml index 8e4d74a652..c83392b54d 100644 --- a/namer/step_07_c_add_selectedindex/pubspec.yaml +++ b/namer/step_07_c_add_selectedindex/pubspec.yaml @@ -19,7 +19,7 @@ dev_dependencies: flutter_test: sdk: flutter - flutter_lints: ^4.0.0 + flutter_lints: ^5.0.0 flutter: uses-material-design: true diff --git a/namer/step_07_d_use_selectedindex/.gitignore b/namer/step_07_d_use_selectedindex/.gitignore index 29a3a5017f..79c113f9b5 100644 --- a/namer/step_07_d_use_selectedindex/.gitignore +++ b/namer/step_07_d_use_selectedindex/.gitignore @@ -5,9 +5,11 @@ *.swp .DS_Store .atom/ +.build/ .buildlog/ .history .svn/ +.swiftpm/ migrate_working_dir/ # IntelliJ related diff --git a/namer/step_07_d_use_selectedindex/android/gradle/wrapper/gradle-wrapper.properties b/namer/step_07_d_use_selectedindex/android/gradle/wrapper/gradle-wrapper.properties index e1ca574ef0..7bb2df6ba6 100644 --- a/namer/step_07_d_use_selectedindex/android/gradle/wrapper/gradle-wrapper.properties +++ b/namer/step_07_d_use_selectedindex/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip diff --git a/namer/step_07_d_use_selectedindex/android/settings.gradle b/namer/step_07_d_use_selectedindex/android/settings.gradle index 536165d35a..b9e43bd376 100644 --- a/namer/step_07_d_use_selectedindex/android/settings.gradle +++ b/namer/step_07_d_use_selectedindex/android/settings.gradle @@ -18,8 +18,8 @@ pluginManagement { plugins { id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "7.3.0" apply false - id "org.jetbrains.kotlin.android" version "1.7.10" apply false + id "com.android.application" version "8.1.0" apply false + id "org.jetbrains.kotlin.android" version "1.8.22" apply false } include ":app" diff --git a/namer/step_07_d_use_selectedindex/macos/Runner/AppDelegate.swift b/namer/step_07_d_use_selectedindex/macos/Runner/AppDelegate.swift index 8e02df2888..b3c1761412 100644 --- a/namer/step_07_d_use_selectedindex/macos/Runner/AppDelegate.swift +++ b/namer/step_07_d_use_selectedindex/macos/Runner/AppDelegate.swift @@ -6,4 +6,8 @@ class AppDelegate: FlutterAppDelegate { override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { return true } + + override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { + return true + } } diff --git a/namer/step_07_d_use_selectedindex/pubspec.yaml b/namer/step_07_d_use_selectedindex/pubspec.yaml index 8e4d74a652..c83392b54d 100644 --- a/namer/step_07_d_use_selectedindex/pubspec.yaml +++ b/namer/step_07_d_use_selectedindex/pubspec.yaml @@ -19,7 +19,7 @@ dev_dependencies: flutter_test: sdk: flutter - flutter_lints: ^4.0.0 + flutter_lints: ^5.0.0 flutter: uses-material-design: true diff --git a/namer/step_07_e_add_layout_builder/.gitignore b/namer/step_07_e_add_layout_builder/.gitignore index 29a3a5017f..79c113f9b5 100644 --- a/namer/step_07_e_add_layout_builder/.gitignore +++ b/namer/step_07_e_add_layout_builder/.gitignore @@ -5,9 +5,11 @@ *.swp .DS_Store .atom/ +.build/ .buildlog/ .history .svn/ +.swiftpm/ migrate_working_dir/ # IntelliJ related diff --git a/namer/step_07_e_add_layout_builder/android/gradle/wrapper/gradle-wrapper.properties b/namer/step_07_e_add_layout_builder/android/gradle/wrapper/gradle-wrapper.properties index e1ca574ef0..7bb2df6ba6 100644 --- a/namer/step_07_e_add_layout_builder/android/gradle/wrapper/gradle-wrapper.properties +++ b/namer/step_07_e_add_layout_builder/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip diff --git a/namer/step_07_e_add_layout_builder/android/settings.gradle b/namer/step_07_e_add_layout_builder/android/settings.gradle index 536165d35a..b9e43bd376 100644 --- a/namer/step_07_e_add_layout_builder/android/settings.gradle +++ b/namer/step_07_e_add_layout_builder/android/settings.gradle @@ -18,8 +18,8 @@ pluginManagement { plugins { id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "7.3.0" apply false - id "org.jetbrains.kotlin.android" version "1.7.10" apply false + id "com.android.application" version "8.1.0" apply false + id "org.jetbrains.kotlin.android" version "1.8.22" apply false } include ":app" diff --git a/namer/step_07_e_add_layout_builder/macos/Runner/AppDelegate.swift b/namer/step_07_e_add_layout_builder/macos/Runner/AppDelegate.swift index 8e02df2888..b3c1761412 100644 --- a/namer/step_07_e_add_layout_builder/macos/Runner/AppDelegate.swift +++ b/namer/step_07_e_add_layout_builder/macos/Runner/AppDelegate.swift @@ -6,4 +6,8 @@ class AppDelegate: FlutterAppDelegate { override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { return true } + + override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { + return true + } } diff --git a/namer/step_07_e_add_layout_builder/pubspec.yaml b/namer/step_07_e_add_layout_builder/pubspec.yaml index 8e4d74a652..c83392b54d 100644 --- a/namer/step_07_e_add_layout_builder/pubspec.yaml +++ b/namer/step_07_e_add_layout_builder/pubspec.yaml @@ -19,7 +19,7 @@ dev_dependencies: flutter_test: sdk: flutter - flutter_lints: ^4.0.0 + flutter_lints: ^5.0.0 flutter: uses-material-design: true diff --git a/namer/step_08/.gitignore b/namer/step_08/.gitignore index 29a3a5017f..79c113f9b5 100644 --- a/namer/step_08/.gitignore +++ b/namer/step_08/.gitignore @@ -5,9 +5,11 @@ *.swp .DS_Store .atom/ +.build/ .buildlog/ .history .svn/ +.swiftpm/ migrate_working_dir/ # IntelliJ related diff --git a/namer/step_08/android/gradle/wrapper/gradle-wrapper.properties b/namer/step_08/android/gradle/wrapper/gradle-wrapper.properties index e1ca574ef0..7bb2df6ba6 100644 --- a/namer/step_08/android/gradle/wrapper/gradle-wrapper.properties +++ b/namer/step_08/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip diff --git a/namer/step_08/android/settings.gradle b/namer/step_08/android/settings.gradle index 536165d35a..b9e43bd376 100644 --- a/namer/step_08/android/settings.gradle +++ b/namer/step_08/android/settings.gradle @@ -18,8 +18,8 @@ pluginManagement { plugins { id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "7.3.0" apply false - id "org.jetbrains.kotlin.android" version "1.7.10" apply false + id "com.android.application" version "8.1.0" apply false + id "org.jetbrains.kotlin.android" version "1.8.22" apply false } include ":app" diff --git a/namer/step_08/macos/Runner/AppDelegate.swift b/namer/step_08/macos/Runner/AppDelegate.swift index 8e02df2888..b3c1761412 100644 --- a/namer/step_08/macos/Runner/AppDelegate.swift +++ b/namer/step_08/macos/Runner/AppDelegate.swift @@ -6,4 +6,8 @@ class AppDelegate: FlutterAppDelegate { override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { return true } + + override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { + return true + } } diff --git a/namer/step_08/pubspec.yaml b/namer/step_08/pubspec.yaml index 7374b46b01..cade592614 100644 --- a/namer/step_08/pubspec.yaml +++ b/namer/step_08/pubspec.yaml @@ -20,7 +20,7 @@ dev_dependencies: flutter_test: sdk: flutter - flutter_lints: ^4.0.0 + flutter_lints: ^5.0.0 flutter: uses-material-design: true From 403119716abc2fbba8bb4af3f42a571cd4105a0c Mon Sep 17 00:00:00 2001 From: Brett Morgan Date: Fri, 18 Oct 2024 17:50:46 +1100 Subject: [PATCH 029/108] Update `next-gen-ui` for flutter beta --- next-gen-ui/codelab_rebuild.yaml | 26 +++-- .../ios/Runner.xcodeproj/project.pbxproj | 94 ++++++++++++++++++ .../contents.xcworkspacedata | 3 + .../lib/orb_shader/orb_shader_painter.dart | 8 +- .../macos/Runner.xcodeproj/project.pbxproj | 98 ++++++++++++++++++- .../contents.xcworkspacedata | 3 + next-gen-ui/step_01/pubspec.yaml | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 94 ++++++++++++++++++ .../contents.xcworkspacedata | 3 + .../lib/orb_shader/orb_shader_painter.dart | 8 +- .../macos/Runner.xcodeproj/project.pbxproj | 98 ++++++++++++++++++- .../contents.xcworkspacedata | 3 + next-gen-ui/step_02_a/pubspec.yaml | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 94 ++++++++++++++++++ .../contents.xcworkspacedata | 3 + .../lib/orb_shader/orb_shader_painter.dart | 8 +- .../macos/Runner.xcodeproj/project.pbxproj | 98 ++++++++++++++++++- .../contents.xcworkspacedata | 3 + next-gen-ui/step_02_b/pubspec.yaml | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 94 ++++++++++++++++++ .../contents.xcworkspacedata | 3 + .../lib/orb_shader/orb_shader_painter.dart | 8 +- .../macos/Runner.xcodeproj/project.pbxproj | 98 ++++++++++++++++++- .../contents.xcworkspacedata | 3 + next-gen-ui/step_02_c/pubspec.yaml | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 94 ++++++++++++++++++ .../contents.xcworkspacedata | 3 + .../lib/orb_shader/orb_shader_painter.dart | 8 +- .../macos/Runner.xcodeproj/project.pbxproj | 98 ++++++++++++++++++- .../contents.xcworkspacedata | 3 + next-gen-ui/step_03_a/pubspec.yaml | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 94 ++++++++++++++++++ .../contents.xcworkspacedata | 3 + .../lib/orb_shader/orb_shader_painter.dart | 8 +- .../macos/Runner.xcodeproj/project.pbxproj | 98 ++++++++++++++++++- .../contents.xcworkspacedata | 3 + next-gen-ui/step_03_b/pubspec.yaml | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 94 ++++++++++++++++++ .../contents.xcworkspacedata | 3 + .../lib/orb_shader/orb_shader_painter.dart | 8 +- .../macos/Runner.xcodeproj/project.pbxproj | 98 ++++++++++++++++++- .../contents.xcworkspacedata | 3 + next-gen-ui/step_03_c/pubspec.yaml | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 94 ++++++++++++++++++ .../contents.xcworkspacedata | 3 + .../lib/orb_shader/orb_shader_painter.dart | 8 +- .../macos/Runner.xcodeproj/project.pbxproj | 98 ++++++++++++++++++- .../contents.xcworkspacedata | 3 + next-gen-ui/step_04_a/pubspec.yaml | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 94 ++++++++++++++++++ .../contents.xcworkspacedata | 3 + .../lib/orb_shader/orb_shader_painter.dart | 8 +- .../macos/Runner.xcodeproj/project.pbxproj | 98 ++++++++++++++++++- .../contents.xcworkspacedata | 3 + next-gen-ui/step_04_b/pubspec.yaml | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 94 ++++++++++++++++++ .../contents.xcworkspacedata | 3 + .../lib/orb_shader/orb_shader_painter.dart | 8 +- .../macos/Runner.xcodeproj/project.pbxproj | 98 ++++++++++++++++++- .../contents.xcworkspacedata | 3 + next-gen-ui/step_04_c/pubspec.yaml | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 94 ++++++++++++++++++ .../contents.xcworkspacedata | 3 + .../lib/orb_shader/orb_shader_painter.dart | 8 +- .../macos/Runner.xcodeproj/project.pbxproj | 98 ++++++++++++++++++- .../contents.xcworkspacedata | 3 + next-gen-ui/step_04_d/pubspec.yaml | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 94 ++++++++++++++++++ .../contents.xcworkspacedata | 3 + .../lib/orb_shader/orb_shader_painter.dart | 8 +- .../macos/Runner.xcodeproj/project.pbxproj | 98 ++++++++++++++++++- .../contents.xcworkspacedata | 3 + next-gen-ui/step_04_e/pubspec.yaml | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 94 ++++++++++++++++++ .../contents.xcworkspacedata | 3 + .../lib/orb_shader/orb_shader_painter.dart | 8 +- .../macos/Runner.xcodeproj/project.pbxproj | 98 ++++++++++++++++++- .../contents.xcworkspacedata | 3 + next-gen-ui/step_05_a/pubspec.yaml | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 94 ++++++++++++++++++ .../contents.xcworkspacedata | 3 + .../lib/orb_shader/orb_shader_painter.dart | 8 +- .../macos/Runner.xcodeproj/project.pbxproj | 98 ++++++++++++++++++- .../contents.xcworkspacedata | 3 + next-gen-ui/step_05_b/pubspec.yaml | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 94 ++++++++++++++++++ .../contents.xcworkspacedata | 3 + .../lib/orb_shader/orb_shader_painter.dart | 8 +- .../macos/Runner.xcodeproj/project.pbxproj | 98 ++++++++++++++++++- .../contents.xcworkspacedata | 3 + next-gen-ui/step_06/pubspec.yaml | 2 +- 91 files changed, 3004 insertions(+), 142 deletions(-) diff --git a/next-gen-ui/codelab_rebuild.yaml b/next-gen-ui/codelab_rebuild.yaml index 814d9c19a2..d085a11a71 100644 --- a/next-gen-ui/codelab_rebuild.yaml +++ b/next-gen-ui/codelab_rebuild.yaml @@ -1452,13 +1452,7 @@ steps: void paint(Canvas canvas, Size size) { double fov = v64.mix(pi / 4.3, pi / 2.0, config.zoom.clamp(0.0, 1.0)); - v64.Vector3 colorToVector3(Color c) => - v64.Vector3( - c.red.toDouble(), - c.green.toDouble(), - c.blue.toDouble(), - ) / - 255.0; + v64.Vector3 colorToVector3(Color c) => v64.Vector3(c.r, c.g, c.b); v64.Vector3 lightLumP = colorToVector3(config.lightColor).normalized() * max(0.0, config.lightBrightness); @@ -1666,6 +1660,15 @@ steps: - name: Build Web app path: next_gen_ui flutter: build web + - name: Build iOS app + path: next_gen_ui + flutter: build ios --simulator + - name: Build Android app + path: next_gen_ui + flutter: build apk + - name: Build macOS app + path: next_gen_ui + flutter: build macos - name: Copy to step_01 copydir: from: next_gen_ui @@ -3400,6 +3403,15 @@ steps: - name: Build Web app path: next_gen_ui flutter: build web + - name: Build iOS app + path: next_gen_ui + flutter: build ios --simulator + - name: Build Android app + path: next_gen_ui + flutter: build apk + - name: Build macOS app + path: next_gen_ui + flutter: build macos - name: Copy to step_06 copydir: from: next_gen_ui diff --git a/next-gen-ui/step_01/ios/Runner.xcodeproj/project.pbxproj b/next-gen-ui/step_01/ios/Runner.xcodeproj/project.pbxproj index 61751e92da..43b8398d4f 100644 --- a/next-gen-ui/step_01/ios/Runner.xcodeproj/project.pbxproj +++ b/next-gen-ui/step_01/ios/Runner.xcodeproj/project.pbxproj @@ -11,9 +11,11 @@ 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; + 95B86EC706B280ECBF05B340 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F29266F85C81E223DE38826F /* Pods_RunnerTests.framework */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; + E9B1620F2EF5AF6175681809 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DE20D8731F5AC68BA1712A5A /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -45,9 +47,12 @@ 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; + 531021BCFBF6DEA7A588EEFB /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 5C244634881A8C4BD75C5C03 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; + 8094A5C0BD3F742D973F4EBB /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -55,13 +60,27 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + D324E46E5A8253E05C3A901E /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + DC699C7AADC6A46B95166F6E /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + DE20D8731F5AC68BA1712A5A /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + F29266F85C81E223DE38826F /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + FFE5027C7AD199E12A7AF98E /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ + 344BA4708047A433A26140BD /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 95B86EC706B280ECBF05B340 /* Pods_RunnerTests.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 97C146EB1CF9000F007C117D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + E9B1620F2EF5AF6175681809 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -76,6 +95,20 @@ path = RunnerTests; sourceTree = ""; }; + 6655F551DEE09BD8E2ABAAD2 /* Pods */ = { + isa = PBXGroup; + children = ( + 8094A5C0BD3F742D973F4EBB /* Pods-Runner.debug.xcconfig */, + 5C244634881A8C4BD75C5C03 /* Pods-Runner.release.xcconfig */, + DC699C7AADC6A46B95166F6E /* Pods-Runner.profile.xcconfig */, + 531021BCFBF6DEA7A588EEFB /* Pods-RunnerTests.debug.xcconfig */, + FFE5027C7AD199E12A7AF98E /* Pods-RunnerTests.release.xcconfig */, + D324E46E5A8253E05C3A901E /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( @@ -94,6 +127,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, + 6655F551DEE09BD8E2ABAAD2 /* Pods */, + AB471AC81B5F3E3EAC08510D /* Frameworks */, ); sourceTree = ""; }; @@ -121,6 +156,15 @@ path = Runner; sourceTree = ""; }; + AB471AC81B5F3E3EAC08510D /* Frameworks */ = { + isa = PBXGroup; + children = ( + DE20D8731F5AC68BA1712A5A /* Pods_Runner.framework */, + F29266F85C81E223DE38826F /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -128,8 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( + C143E5EEC573FBD89B16A658 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, + 344BA4708047A433A26140BD /* Frameworks */, ); buildRules = ( ); @@ -145,6 +191,7 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( + 3AAEDA8BA83E71CC34259A37 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, @@ -222,6 +269,28 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ + 3AAEDA8BA83E71CC34259A37 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -253,6 +322,28 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; + C143E5EEC573FBD89B16A658 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -378,6 +469,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; + baseConfigurationReference = 531021BCFBF6DEA7A588EEFB /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -395,6 +487,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; + baseConfigurationReference = FFE5027C7AD199E12A7AF98E /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -410,6 +503,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; + baseConfigurationReference = D324E46E5A8253E05C3A901E /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/next-gen-ui/step_01/ios/Runner.xcworkspace/contents.xcworkspacedata b/next-gen-ui/step_01/ios/Runner.xcworkspace/contents.xcworkspacedata index 1d526a16ed..21a3cc14c7 100644 --- a/next-gen-ui/step_01/ios/Runner.xcworkspace/contents.xcworkspacedata +++ b/next-gen-ui/step_01/ios/Runner.xcworkspace/contents.xcworkspacedata @@ -4,4 +4,7 @@ + + diff --git a/next-gen-ui/step_01/lib/orb_shader/orb_shader_painter.dart b/next-gen-ui/step_01/lib/orb_shader/orb_shader_painter.dart index 50213545d9..399c20ab7e 100644 --- a/next-gen-ui/step_01/lib/orb_shader/orb_shader_painter.dart +++ b/next-gen-ui/step_01/lib/orb_shader/orb_shader_painter.dart @@ -28,13 +28,7 @@ class OrbShaderPainter extends CustomPainter { void paint(Canvas canvas, Size size) { double fov = v64.mix(pi / 4.3, pi / 2.0, config.zoom.clamp(0.0, 1.0)); - v64.Vector3 colorToVector3(Color c) => - v64.Vector3( - c.red.toDouble(), - c.green.toDouble(), - c.blue.toDouble(), - ) / - 255.0; + v64.Vector3 colorToVector3(Color c) => v64.Vector3(c.r, c.g, c.b); v64.Vector3 lightLumP = colorToVector3(config.lightColor).normalized() * max(0.0, config.lightBrightness); diff --git a/next-gen-ui/step_01/macos/Runner.xcodeproj/project.pbxproj b/next-gen-ui/step_01/macos/Runner.xcodeproj/project.pbxproj index 9c11821227..a260461a61 100644 --- a/next-gen-ui/step_01/macos/Runner.xcodeproj/project.pbxproj +++ b/next-gen-ui/step_01/macos/Runner.xcodeproj/project.pbxproj @@ -27,6 +27,8 @@ 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; + 44BBBA76B13EEB94F9DCE170 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2984A5AD2129F6C671F00164 /* Pods_Runner.framework */; }; + 4E0858D90CA55751E7BE4898 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 39010BEDE01EF3B7F309CBE7 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -60,11 +62,14 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 2984A5AD2129F6C671F00164 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 2CF773F4C2430EAC834646B3 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; }; - 33CC10ED2044A3C60003C045 /* next_gen_ui.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "next_gen_ui.app"; sourceTree = BUILT_PRODUCTS_DIR; }; + 337BA55CC083EAE0C41E02E7 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 33CC10ED2044A3C60003C045 /* next_gen_ui.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = next_gen_ui.app; sourceTree = BUILT_PRODUCTS_DIR; }; 33CC10F02044A3C60003C045 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 33CC10F22044A3C60003C045 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = Runner/Assets.xcassets; sourceTree = ""; }; 33CC10F52044A3C60003C045 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = ""; }; @@ -73,11 +78,16 @@ 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Debug.xcconfig"; sourceTree = ""; }; 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Release.xcconfig"; sourceTree = ""; }; 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = "Flutter-Generated.xcconfig"; path = "ephemeral/Flutter-Generated.xcconfig"; sourceTree = ""; }; + 33D3C1661150E5CF9FD9C336 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; + 39010BEDE01EF3B7F309CBE7 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 6B406084562E7BBF7435D2FF /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; + 7FDC8102767980E531E73AC5 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; + A4F4B5072EE42AC6A44D036B /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -85,6 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 4E0858D90CA55751E7BE4898 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -92,12 +103,27 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 44BBBA76B13EEB94F9DCE170 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 1C1096D0206D3CBABCC06686 /* Pods */ = { + isa = PBXGroup; + children = ( + 2CF773F4C2430EAC834646B3 /* Pods-Runner.debug.xcconfig */, + 7FDC8102767980E531E73AC5 /* Pods-Runner.release.xcconfig */, + 6B406084562E7BBF7435D2FF /* Pods-Runner.profile.xcconfig */, + A4F4B5072EE42AC6A44D036B /* Pods-RunnerTests.debug.xcconfig */, + 33D3C1661150E5CF9FD9C336 /* Pods-RunnerTests.release.xcconfig */, + 337BA55CC083EAE0C41E02E7 /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; 331C80D6294CF71000263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -125,6 +151,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, + 1C1096D0206D3CBABCC06686 /* Pods */, ); sourceTree = ""; }; @@ -175,6 +202,8 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( + 2984A5AD2129F6C671F00164 /* Pods_Runner.framework */, + 39010BEDE01EF3B7F309CBE7 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -186,6 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( + FE0C7B1BBD5CA48F75CD6536 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -204,11 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( + BF702552288C4603E192F687 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, + 978AFB595B79A33D319A948F /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -329,6 +361,67 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; + 978AFB595B79A33D319A948F /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; + BF702552288C4603E192F687 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; + FE0C7B1BBD5CA48F75CD6536 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -380,6 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; + baseConfigurationReference = A4F4B5072EE42AC6A44D036B /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -394,6 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; + baseConfigurationReference = 33D3C1661150E5CF9FD9C336 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -408,6 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; + baseConfigurationReference = 337BA55CC083EAE0C41E02E7 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/next-gen-ui/step_01/macos/Runner.xcworkspace/contents.xcworkspacedata b/next-gen-ui/step_01/macos/Runner.xcworkspace/contents.xcworkspacedata index 1d526a16ed..21a3cc14c7 100644 --- a/next-gen-ui/step_01/macos/Runner.xcworkspace/contents.xcworkspacedata +++ b/next-gen-ui/step_01/macos/Runner.xcworkspace/contents.xcworkspacedata @@ -4,4 +4,7 @@ + + diff --git a/next-gen-ui/step_01/pubspec.yaml b/next-gen-ui/step_01/pubspec.yaml index 726dd46e9e..dd3eb24959 100644 --- a/next-gen-ui/step_01/pubspec.yaml +++ b/next-gen-ui/step_01/pubspec.yaml @@ -27,7 +27,7 @@ dependencies: dev_dependencies: flutter_test: sdk: flutter - flutter_lints: ^4.0.0 + flutter_lints: ^5.0.0 flutter: uses-material-design: true diff --git a/next-gen-ui/step_02_a/ios/Runner.xcodeproj/project.pbxproj b/next-gen-ui/step_02_a/ios/Runner.xcodeproj/project.pbxproj index 61751e92da..43b8398d4f 100644 --- a/next-gen-ui/step_02_a/ios/Runner.xcodeproj/project.pbxproj +++ b/next-gen-ui/step_02_a/ios/Runner.xcodeproj/project.pbxproj @@ -11,9 +11,11 @@ 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; + 95B86EC706B280ECBF05B340 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F29266F85C81E223DE38826F /* Pods_RunnerTests.framework */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; + E9B1620F2EF5AF6175681809 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DE20D8731F5AC68BA1712A5A /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -45,9 +47,12 @@ 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; + 531021BCFBF6DEA7A588EEFB /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 5C244634881A8C4BD75C5C03 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; + 8094A5C0BD3F742D973F4EBB /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -55,13 +60,27 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + D324E46E5A8253E05C3A901E /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + DC699C7AADC6A46B95166F6E /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + DE20D8731F5AC68BA1712A5A /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + F29266F85C81E223DE38826F /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + FFE5027C7AD199E12A7AF98E /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ + 344BA4708047A433A26140BD /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 95B86EC706B280ECBF05B340 /* Pods_RunnerTests.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 97C146EB1CF9000F007C117D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + E9B1620F2EF5AF6175681809 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -76,6 +95,20 @@ path = RunnerTests; sourceTree = ""; }; + 6655F551DEE09BD8E2ABAAD2 /* Pods */ = { + isa = PBXGroup; + children = ( + 8094A5C0BD3F742D973F4EBB /* Pods-Runner.debug.xcconfig */, + 5C244634881A8C4BD75C5C03 /* Pods-Runner.release.xcconfig */, + DC699C7AADC6A46B95166F6E /* Pods-Runner.profile.xcconfig */, + 531021BCFBF6DEA7A588EEFB /* Pods-RunnerTests.debug.xcconfig */, + FFE5027C7AD199E12A7AF98E /* Pods-RunnerTests.release.xcconfig */, + D324E46E5A8253E05C3A901E /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( @@ -94,6 +127,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, + 6655F551DEE09BD8E2ABAAD2 /* Pods */, + AB471AC81B5F3E3EAC08510D /* Frameworks */, ); sourceTree = ""; }; @@ -121,6 +156,15 @@ path = Runner; sourceTree = ""; }; + AB471AC81B5F3E3EAC08510D /* Frameworks */ = { + isa = PBXGroup; + children = ( + DE20D8731F5AC68BA1712A5A /* Pods_Runner.framework */, + F29266F85C81E223DE38826F /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -128,8 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( + C143E5EEC573FBD89B16A658 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, + 344BA4708047A433A26140BD /* Frameworks */, ); buildRules = ( ); @@ -145,6 +191,7 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( + 3AAEDA8BA83E71CC34259A37 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, @@ -222,6 +269,28 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ + 3AAEDA8BA83E71CC34259A37 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -253,6 +322,28 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; + C143E5EEC573FBD89B16A658 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -378,6 +469,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; + baseConfigurationReference = 531021BCFBF6DEA7A588EEFB /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -395,6 +487,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; + baseConfigurationReference = FFE5027C7AD199E12A7AF98E /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -410,6 +503,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; + baseConfigurationReference = D324E46E5A8253E05C3A901E /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/next-gen-ui/step_02_a/ios/Runner.xcworkspace/contents.xcworkspacedata b/next-gen-ui/step_02_a/ios/Runner.xcworkspace/contents.xcworkspacedata index 1d526a16ed..21a3cc14c7 100644 --- a/next-gen-ui/step_02_a/ios/Runner.xcworkspace/contents.xcworkspacedata +++ b/next-gen-ui/step_02_a/ios/Runner.xcworkspace/contents.xcworkspacedata @@ -4,4 +4,7 @@ + + diff --git a/next-gen-ui/step_02_a/lib/orb_shader/orb_shader_painter.dart b/next-gen-ui/step_02_a/lib/orb_shader/orb_shader_painter.dart index 50213545d9..399c20ab7e 100644 --- a/next-gen-ui/step_02_a/lib/orb_shader/orb_shader_painter.dart +++ b/next-gen-ui/step_02_a/lib/orb_shader/orb_shader_painter.dart @@ -28,13 +28,7 @@ class OrbShaderPainter extends CustomPainter { void paint(Canvas canvas, Size size) { double fov = v64.mix(pi / 4.3, pi / 2.0, config.zoom.clamp(0.0, 1.0)); - v64.Vector3 colorToVector3(Color c) => - v64.Vector3( - c.red.toDouble(), - c.green.toDouble(), - c.blue.toDouble(), - ) / - 255.0; + v64.Vector3 colorToVector3(Color c) => v64.Vector3(c.r, c.g, c.b); v64.Vector3 lightLumP = colorToVector3(config.lightColor).normalized() * max(0.0, config.lightBrightness); diff --git a/next-gen-ui/step_02_a/macos/Runner.xcodeproj/project.pbxproj b/next-gen-ui/step_02_a/macos/Runner.xcodeproj/project.pbxproj index 9c11821227..a260461a61 100644 --- a/next-gen-ui/step_02_a/macos/Runner.xcodeproj/project.pbxproj +++ b/next-gen-ui/step_02_a/macos/Runner.xcodeproj/project.pbxproj @@ -27,6 +27,8 @@ 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; + 44BBBA76B13EEB94F9DCE170 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2984A5AD2129F6C671F00164 /* Pods_Runner.framework */; }; + 4E0858D90CA55751E7BE4898 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 39010BEDE01EF3B7F309CBE7 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -60,11 +62,14 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 2984A5AD2129F6C671F00164 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 2CF773F4C2430EAC834646B3 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; }; - 33CC10ED2044A3C60003C045 /* next_gen_ui.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "next_gen_ui.app"; sourceTree = BUILT_PRODUCTS_DIR; }; + 337BA55CC083EAE0C41E02E7 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 33CC10ED2044A3C60003C045 /* next_gen_ui.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = next_gen_ui.app; sourceTree = BUILT_PRODUCTS_DIR; }; 33CC10F02044A3C60003C045 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 33CC10F22044A3C60003C045 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = Runner/Assets.xcassets; sourceTree = ""; }; 33CC10F52044A3C60003C045 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = ""; }; @@ -73,11 +78,16 @@ 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Debug.xcconfig"; sourceTree = ""; }; 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Release.xcconfig"; sourceTree = ""; }; 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = "Flutter-Generated.xcconfig"; path = "ephemeral/Flutter-Generated.xcconfig"; sourceTree = ""; }; + 33D3C1661150E5CF9FD9C336 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; + 39010BEDE01EF3B7F309CBE7 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 6B406084562E7BBF7435D2FF /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; + 7FDC8102767980E531E73AC5 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; + A4F4B5072EE42AC6A44D036B /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -85,6 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 4E0858D90CA55751E7BE4898 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -92,12 +103,27 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 44BBBA76B13EEB94F9DCE170 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 1C1096D0206D3CBABCC06686 /* Pods */ = { + isa = PBXGroup; + children = ( + 2CF773F4C2430EAC834646B3 /* Pods-Runner.debug.xcconfig */, + 7FDC8102767980E531E73AC5 /* Pods-Runner.release.xcconfig */, + 6B406084562E7BBF7435D2FF /* Pods-Runner.profile.xcconfig */, + A4F4B5072EE42AC6A44D036B /* Pods-RunnerTests.debug.xcconfig */, + 33D3C1661150E5CF9FD9C336 /* Pods-RunnerTests.release.xcconfig */, + 337BA55CC083EAE0C41E02E7 /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; 331C80D6294CF71000263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -125,6 +151,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, + 1C1096D0206D3CBABCC06686 /* Pods */, ); sourceTree = ""; }; @@ -175,6 +202,8 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( + 2984A5AD2129F6C671F00164 /* Pods_Runner.framework */, + 39010BEDE01EF3B7F309CBE7 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -186,6 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( + FE0C7B1BBD5CA48F75CD6536 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -204,11 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( + BF702552288C4603E192F687 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, + 978AFB595B79A33D319A948F /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -329,6 +361,67 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; + 978AFB595B79A33D319A948F /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; + BF702552288C4603E192F687 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; + FE0C7B1BBD5CA48F75CD6536 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -380,6 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; + baseConfigurationReference = A4F4B5072EE42AC6A44D036B /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -394,6 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; + baseConfigurationReference = 33D3C1661150E5CF9FD9C336 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -408,6 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; + baseConfigurationReference = 337BA55CC083EAE0C41E02E7 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/next-gen-ui/step_02_a/macos/Runner.xcworkspace/contents.xcworkspacedata b/next-gen-ui/step_02_a/macos/Runner.xcworkspace/contents.xcworkspacedata index 1d526a16ed..21a3cc14c7 100644 --- a/next-gen-ui/step_02_a/macos/Runner.xcworkspace/contents.xcworkspacedata +++ b/next-gen-ui/step_02_a/macos/Runner.xcworkspace/contents.xcworkspacedata @@ -4,4 +4,7 @@ + + diff --git a/next-gen-ui/step_02_a/pubspec.yaml b/next-gen-ui/step_02_a/pubspec.yaml index 726dd46e9e..dd3eb24959 100644 --- a/next-gen-ui/step_02_a/pubspec.yaml +++ b/next-gen-ui/step_02_a/pubspec.yaml @@ -27,7 +27,7 @@ dependencies: dev_dependencies: flutter_test: sdk: flutter - flutter_lints: ^4.0.0 + flutter_lints: ^5.0.0 flutter: uses-material-design: true diff --git a/next-gen-ui/step_02_b/ios/Runner.xcodeproj/project.pbxproj b/next-gen-ui/step_02_b/ios/Runner.xcodeproj/project.pbxproj index 61751e92da..43b8398d4f 100644 --- a/next-gen-ui/step_02_b/ios/Runner.xcodeproj/project.pbxproj +++ b/next-gen-ui/step_02_b/ios/Runner.xcodeproj/project.pbxproj @@ -11,9 +11,11 @@ 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; + 95B86EC706B280ECBF05B340 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F29266F85C81E223DE38826F /* Pods_RunnerTests.framework */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; + E9B1620F2EF5AF6175681809 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DE20D8731F5AC68BA1712A5A /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -45,9 +47,12 @@ 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; + 531021BCFBF6DEA7A588EEFB /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 5C244634881A8C4BD75C5C03 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; + 8094A5C0BD3F742D973F4EBB /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -55,13 +60,27 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + D324E46E5A8253E05C3A901E /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + DC699C7AADC6A46B95166F6E /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + DE20D8731F5AC68BA1712A5A /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + F29266F85C81E223DE38826F /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + FFE5027C7AD199E12A7AF98E /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ + 344BA4708047A433A26140BD /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 95B86EC706B280ECBF05B340 /* Pods_RunnerTests.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 97C146EB1CF9000F007C117D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + E9B1620F2EF5AF6175681809 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -76,6 +95,20 @@ path = RunnerTests; sourceTree = ""; }; + 6655F551DEE09BD8E2ABAAD2 /* Pods */ = { + isa = PBXGroup; + children = ( + 8094A5C0BD3F742D973F4EBB /* Pods-Runner.debug.xcconfig */, + 5C244634881A8C4BD75C5C03 /* Pods-Runner.release.xcconfig */, + DC699C7AADC6A46B95166F6E /* Pods-Runner.profile.xcconfig */, + 531021BCFBF6DEA7A588EEFB /* Pods-RunnerTests.debug.xcconfig */, + FFE5027C7AD199E12A7AF98E /* Pods-RunnerTests.release.xcconfig */, + D324E46E5A8253E05C3A901E /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( @@ -94,6 +127,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, + 6655F551DEE09BD8E2ABAAD2 /* Pods */, + AB471AC81B5F3E3EAC08510D /* Frameworks */, ); sourceTree = ""; }; @@ -121,6 +156,15 @@ path = Runner; sourceTree = ""; }; + AB471AC81B5F3E3EAC08510D /* Frameworks */ = { + isa = PBXGroup; + children = ( + DE20D8731F5AC68BA1712A5A /* Pods_Runner.framework */, + F29266F85C81E223DE38826F /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -128,8 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( + C143E5EEC573FBD89B16A658 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, + 344BA4708047A433A26140BD /* Frameworks */, ); buildRules = ( ); @@ -145,6 +191,7 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( + 3AAEDA8BA83E71CC34259A37 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, @@ -222,6 +269,28 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ + 3AAEDA8BA83E71CC34259A37 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -253,6 +322,28 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; + C143E5EEC573FBD89B16A658 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -378,6 +469,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; + baseConfigurationReference = 531021BCFBF6DEA7A588EEFB /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -395,6 +487,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; + baseConfigurationReference = FFE5027C7AD199E12A7AF98E /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -410,6 +503,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; + baseConfigurationReference = D324E46E5A8253E05C3A901E /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/next-gen-ui/step_02_b/ios/Runner.xcworkspace/contents.xcworkspacedata b/next-gen-ui/step_02_b/ios/Runner.xcworkspace/contents.xcworkspacedata index 1d526a16ed..21a3cc14c7 100644 --- a/next-gen-ui/step_02_b/ios/Runner.xcworkspace/contents.xcworkspacedata +++ b/next-gen-ui/step_02_b/ios/Runner.xcworkspace/contents.xcworkspacedata @@ -4,4 +4,7 @@ + + diff --git a/next-gen-ui/step_02_b/lib/orb_shader/orb_shader_painter.dart b/next-gen-ui/step_02_b/lib/orb_shader/orb_shader_painter.dart index 50213545d9..399c20ab7e 100644 --- a/next-gen-ui/step_02_b/lib/orb_shader/orb_shader_painter.dart +++ b/next-gen-ui/step_02_b/lib/orb_shader/orb_shader_painter.dart @@ -28,13 +28,7 @@ class OrbShaderPainter extends CustomPainter { void paint(Canvas canvas, Size size) { double fov = v64.mix(pi / 4.3, pi / 2.0, config.zoom.clamp(0.0, 1.0)); - v64.Vector3 colorToVector3(Color c) => - v64.Vector3( - c.red.toDouble(), - c.green.toDouble(), - c.blue.toDouble(), - ) / - 255.0; + v64.Vector3 colorToVector3(Color c) => v64.Vector3(c.r, c.g, c.b); v64.Vector3 lightLumP = colorToVector3(config.lightColor).normalized() * max(0.0, config.lightBrightness); diff --git a/next-gen-ui/step_02_b/macos/Runner.xcodeproj/project.pbxproj b/next-gen-ui/step_02_b/macos/Runner.xcodeproj/project.pbxproj index 9c11821227..a260461a61 100644 --- a/next-gen-ui/step_02_b/macos/Runner.xcodeproj/project.pbxproj +++ b/next-gen-ui/step_02_b/macos/Runner.xcodeproj/project.pbxproj @@ -27,6 +27,8 @@ 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; + 44BBBA76B13EEB94F9DCE170 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2984A5AD2129F6C671F00164 /* Pods_Runner.framework */; }; + 4E0858D90CA55751E7BE4898 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 39010BEDE01EF3B7F309CBE7 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -60,11 +62,14 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 2984A5AD2129F6C671F00164 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 2CF773F4C2430EAC834646B3 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; }; - 33CC10ED2044A3C60003C045 /* next_gen_ui.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "next_gen_ui.app"; sourceTree = BUILT_PRODUCTS_DIR; }; + 337BA55CC083EAE0C41E02E7 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 33CC10ED2044A3C60003C045 /* next_gen_ui.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = next_gen_ui.app; sourceTree = BUILT_PRODUCTS_DIR; }; 33CC10F02044A3C60003C045 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 33CC10F22044A3C60003C045 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = Runner/Assets.xcassets; sourceTree = ""; }; 33CC10F52044A3C60003C045 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = ""; }; @@ -73,11 +78,16 @@ 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Debug.xcconfig"; sourceTree = ""; }; 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Release.xcconfig"; sourceTree = ""; }; 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = "Flutter-Generated.xcconfig"; path = "ephemeral/Flutter-Generated.xcconfig"; sourceTree = ""; }; + 33D3C1661150E5CF9FD9C336 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; + 39010BEDE01EF3B7F309CBE7 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 6B406084562E7BBF7435D2FF /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; + 7FDC8102767980E531E73AC5 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; + A4F4B5072EE42AC6A44D036B /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -85,6 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 4E0858D90CA55751E7BE4898 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -92,12 +103,27 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 44BBBA76B13EEB94F9DCE170 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 1C1096D0206D3CBABCC06686 /* Pods */ = { + isa = PBXGroup; + children = ( + 2CF773F4C2430EAC834646B3 /* Pods-Runner.debug.xcconfig */, + 7FDC8102767980E531E73AC5 /* Pods-Runner.release.xcconfig */, + 6B406084562E7BBF7435D2FF /* Pods-Runner.profile.xcconfig */, + A4F4B5072EE42AC6A44D036B /* Pods-RunnerTests.debug.xcconfig */, + 33D3C1661150E5CF9FD9C336 /* Pods-RunnerTests.release.xcconfig */, + 337BA55CC083EAE0C41E02E7 /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; 331C80D6294CF71000263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -125,6 +151,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, + 1C1096D0206D3CBABCC06686 /* Pods */, ); sourceTree = ""; }; @@ -175,6 +202,8 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( + 2984A5AD2129F6C671F00164 /* Pods_Runner.framework */, + 39010BEDE01EF3B7F309CBE7 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -186,6 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( + FE0C7B1BBD5CA48F75CD6536 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -204,11 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( + BF702552288C4603E192F687 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, + 978AFB595B79A33D319A948F /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -329,6 +361,67 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; + 978AFB595B79A33D319A948F /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; + BF702552288C4603E192F687 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; + FE0C7B1BBD5CA48F75CD6536 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -380,6 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; + baseConfigurationReference = A4F4B5072EE42AC6A44D036B /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -394,6 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; + baseConfigurationReference = 33D3C1661150E5CF9FD9C336 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -408,6 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; + baseConfigurationReference = 337BA55CC083EAE0C41E02E7 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/next-gen-ui/step_02_b/macos/Runner.xcworkspace/contents.xcworkspacedata b/next-gen-ui/step_02_b/macos/Runner.xcworkspace/contents.xcworkspacedata index 1d526a16ed..21a3cc14c7 100644 --- a/next-gen-ui/step_02_b/macos/Runner.xcworkspace/contents.xcworkspacedata +++ b/next-gen-ui/step_02_b/macos/Runner.xcworkspace/contents.xcworkspacedata @@ -4,4 +4,7 @@ + + diff --git a/next-gen-ui/step_02_b/pubspec.yaml b/next-gen-ui/step_02_b/pubspec.yaml index 726dd46e9e..dd3eb24959 100644 --- a/next-gen-ui/step_02_b/pubspec.yaml +++ b/next-gen-ui/step_02_b/pubspec.yaml @@ -27,7 +27,7 @@ dependencies: dev_dependencies: flutter_test: sdk: flutter - flutter_lints: ^4.0.0 + flutter_lints: ^5.0.0 flutter: uses-material-design: true diff --git a/next-gen-ui/step_02_c/ios/Runner.xcodeproj/project.pbxproj b/next-gen-ui/step_02_c/ios/Runner.xcodeproj/project.pbxproj index 61751e92da..43b8398d4f 100644 --- a/next-gen-ui/step_02_c/ios/Runner.xcodeproj/project.pbxproj +++ b/next-gen-ui/step_02_c/ios/Runner.xcodeproj/project.pbxproj @@ -11,9 +11,11 @@ 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; + 95B86EC706B280ECBF05B340 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F29266F85C81E223DE38826F /* Pods_RunnerTests.framework */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; + E9B1620F2EF5AF6175681809 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DE20D8731F5AC68BA1712A5A /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -45,9 +47,12 @@ 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; + 531021BCFBF6DEA7A588EEFB /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 5C244634881A8C4BD75C5C03 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; + 8094A5C0BD3F742D973F4EBB /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -55,13 +60,27 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + D324E46E5A8253E05C3A901E /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + DC699C7AADC6A46B95166F6E /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + DE20D8731F5AC68BA1712A5A /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + F29266F85C81E223DE38826F /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + FFE5027C7AD199E12A7AF98E /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ + 344BA4708047A433A26140BD /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 95B86EC706B280ECBF05B340 /* Pods_RunnerTests.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 97C146EB1CF9000F007C117D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + E9B1620F2EF5AF6175681809 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -76,6 +95,20 @@ path = RunnerTests; sourceTree = ""; }; + 6655F551DEE09BD8E2ABAAD2 /* Pods */ = { + isa = PBXGroup; + children = ( + 8094A5C0BD3F742D973F4EBB /* Pods-Runner.debug.xcconfig */, + 5C244634881A8C4BD75C5C03 /* Pods-Runner.release.xcconfig */, + DC699C7AADC6A46B95166F6E /* Pods-Runner.profile.xcconfig */, + 531021BCFBF6DEA7A588EEFB /* Pods-RunnerTests.debug.xcconfig */, + FFE5027C7AD199E12A7AF98E /* Pods-RunnerTests.release.xcconfig */, + D324E46E5A8253E05C3A901E /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( @@ -94,6 +127,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, + 6655F551DEE09BD8E2ABAAD2 /* Pods */, + AB471AC81B5F3E3EAC08510D /* Frameworks */, ); sourceTree = ""; }; @@ -121,6 +156,15 @@ path = Runner; sourceTree = ""; }; + AB471AC81B5F3E3EAC08510D /* Frameworks */ = { + isa = PBXGroup; + children = ( + DE20D8731F5AC68BA1712A5A /* Pods_Runner.framework */, + F29266F85C81E223DE38826F /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -128,8 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( + C143E5EEC573FBD89B16A658 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, + 344BA4708047A433A26140BD /* Frameworks */, ); buildRules = ( ); @@ -145,6 +191,7 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( + 3AAEDA8BA83E71CC34259A37 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, @@ -222,6 +269,28 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ + 3AAEDA8BA83E71CC34259A37 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -253,6 +322,28 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; + C143E5EEC573FBD89B16A658 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -378,6 +469,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; + baseConfigurationReference = 531021BCFBF6DEA7A588EEFB /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -395,6 +487,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; + baseConfigurationReference = FFE5027C7AD199E12A7AF98E /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -410,6 +503,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; + baseConfigurationReference = D324E46E5A8253E05C3A901E /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/next-gen-ui/step_02_c/ios/Runner.xcworkspace/contents.xcworkspacedata b/next-gen-ui/step_02_c/ios/Runner.xcworkspace/contents.xcworkspacedata index 1d526a16ed..21a3cc14c7 100644 --- a/next-gen-ui/step_02_c/ios/Runner.xcworkspace/contents.xcworkspacedata +++ b/next-gen-ui/step_02_c/ios/Runner.xcworkspace/contents.xcworkspacedata @@ -4,4 +4,7 @@ + + diff --git a/next-gen-ui/step_02_c/lib/orb_shader/orb_shader_painter.dart b/next-gen-ui/step_02_c/lib/orb_shader/orb_shader_painter.dart index 50213545d9..399c20ab7e 100644 --- a/next-gen-ui/step_02_c/lib/orb_shader/orb_shader_painter.dart +++ b/next-gen-ui/step_02_c/lib/orb_shader/orb_shader_painter.dart @@ -28,13 +28,7 @@ class OrbShaderPainter extends CustomPainter { void paint(Canvas canvas, Size size) { double fov = v64.mix(pi / 4.3, pi / 2.0, config.zoom.clamp(0.0, 1.0)); - v64.Vector3 colorToVector3(Color c) => - v64.Vector3( - c.red.toDouble(), - c.green.toDouble(), - c.blue.toDouble(), - ) / - 255.0; + v64.Vector3 colorToVector3(Color c) => v64.Vector3(c.r, c.g, c.b); v64.Vector3 lightLumP = colorToVector3(config.lightColor).normalized() * max(0.0, config.lightBrightness); diff --git a/next-gen-ui/step_02_c/macos/Runner.xcodeproj/project.pbxproj b/next-gen-ui/step_02_c/macos/Runner.xcodeproj/project.pbxproj index 9c11821227..a260461a61 100644 --- a/next-gen-ui/step_02_c/macos/Runner.xcodeproj/project.pbxproj +++ b/next-gen-ui/step_02_c/macos/Runner.xcodeproj/project.pbxproj @@ -27,6 +27,8 @@ 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; + 44BBBA76B13EEB94F9DCE170 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2984A5AD2129F6C671F00164 /* Pods_Runner.framework */; }; + 4E0858D90CA55751E7BE4898 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 39010BEDE01EF3B7F309CBE7 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -60,11 +62,14 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 2984A5AD2129F6C671F00164 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 2CF773F4C2430EAC834646B3 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; }; - 33CC10ED2044A3C60003C045 /* next_gen_ui.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "next_gen_ui.app"; sourceTree = BUILT_PRODUCTS_DIR; }; + 337BA55CC083EAE0C41E02E7 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 33CC10ED2044A3C60003C045 /* next_gen_ui.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = next_gen_ui.app; sourceTree = BUILT_PRODUCTS_DIR; }; 33CC10F02044A3C60003C045 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 33CC10F22044A3C60003C045 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = Runner/Assets.xcassets; sourceTree = ""; }; 33CC10F52044A3C60003C045 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = ""; }; @@ -73,11 +78,16 @@ 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Debug.xcconfig"; sourceTree = ""; }; 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Release.xcconfig"; sourceTree = ""; }; 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = "Flutter-Generated.xcconfig"; path = "ephemeral/Flutter-Generated.xcconfig"; sourceTree = ""; }; + 33D3C1661150E5CF9FD9C336 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; + 39010BEDE01EF3B7F309CBE7 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 6B406084562E7BBF7435D2FF /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; + 7FDC8102767980E531E73AC5 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; + A4F4B5072EE42AC6A44D036B /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -85,6 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 4E0858D90CA55751E7BE4898 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -92,12 +103,27 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 44BBBA76B13EEB94F9DCE170 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 1C1096D0206D3CBABCC06686 /* Pods */ = { + isa = PBXGroup; + children = ( + 2CF773F4C2430EAC834646B3 /* Pods-Runner.debug.xcconfig */, + 7FDC8102767980E531E73AC5 /* Pods-Runner.release.xcconfig */, + 6B406084562E7BBF7435D2FF /* Pods-Runner.profile.xcconfig */, + A4F4B5072EE42AC6A44D036B /* Pods-RunnerTests.debug.xcconfig */, + 33D3C1661150E5CF9FD9C336 /* Pods-RunnerTests.release.xcconfig */, + 337BA55CC083EAE0C41E02E7 /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; 331C80D6294CF71000263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -125,6 +151,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, + 1C1096D0206D3CBABCC06686 /* Pods */, ); sourceTree = ""; }; @@ -175,6 +202,8 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( + 2984A5AD2129F6C671F00164 /* Pods_Runner.framework */, + 39010BEDE01EF3B7F309CBE7 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -186,6 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( + FE0C7B1BBD5CA48F75CD6536 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -204,11 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( + BF702552288C4603E192F687 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, + 978AFB595B79A33D319A948F /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -329,6 +361,67 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; + 978AFB595B79A33D319A948F /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; + BF702552288C4603E192F687 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; + FE0C7B1BBD5CA48F75CD6536 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -380,6 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; + baseConfigurationReference = A4F4B5072EE42AC6A44D036B /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -394,6 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; + baseConfigurationReference = 33D3C1661150E5CF9FD9C336 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -408,6 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; + baseConfigurationReference = 337BA55CC083EAE0C41E02E7 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/next-gen-ui/step_02_c/macos/Runner.xcworkspace/contents.xcworkspacedata b/next-gen-ui/step_02_c/macos/Runner.xcworkspace/contents.xcworkspacedata index 1d526a16ed..21a3cc14c7 100644 --- a/next-gen-ui/step_02_c/macos/Runner.xcworkspace/contents.xcworkspacedata +++ b/next-gen-ui/step_02_c/macos/Runner.xcworkspace/contents.xcworkspacedata @@ -4,4 +4,7 @@ + + diff --git a/next-gen-ui/step_02_c/pubspec.yaml b/next-gen-ui/step_02_c/pubspec.yaml index 726dd46e9e..dd3eb24959 100644 --- a/next-gen-ui/step_02_c/pubspec.yaml +++ b/next-gen-ui/step_02_c/pubspec.yaml @@ -27,7 +27,7 @@ dependencies: dev_dependencies: flutter_test: sdk: flutter - flutter_lints: ^4.0.0 + flutter_lints: ^5.0.0 flutter: uses-material-design: true diff --git a/next-gen-ui/step_03_a/ios/Runner.xcodeproj/project.pbxproj b/next-gen-ui/step_03_a/ios/Runner.xcodeproj/project.pbxproj index 61751e92da..43b8398d4f 100644 --- a/next-gen-ui/step_03_a/ios/Runner.xcodeproj/project.pbxproj +++ b/next-gen-ui/step_03_a/ios/Runner.xcodeproj/project.pbxproj @@ -11,9 +11,11 @@ 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; + 95B86EC706B280ECBF05B340 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F29266F85C81E223DE38826F /* Pods_RunnerTests.framework */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; + E9B1620F2EF5AF6175681809 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DE20D8731F5AC68BA1712A5A /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -45,9 +47,12 @@ 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; + 531021BCFBF6DEA7A588EEFB /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 5C244634881A8C4BD75C5C03 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; + 8094A5C0BD3F742D973F4EBB /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -55,13 +60,27 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + D324E46E5A8253E05C3A901E /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + DC699C7AADC6A46B95166F6E /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + DE20D8731F5AC68BA1712A5A /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + F29266F85C81E223DE38826F /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + FFE5027C7AD199E12A7AF98E /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ + 344BA4708047A433A26140BD /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 95B86EC706B280ECBF05B340 /* Pods_RunnerTests.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 97C146EB1CF9000F007C117D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + E9B1620F2EF5AF6175681809 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -76,6 +95,20 @@ path = RunnerTests; sourceTree = ""; }; + 6655F551DEE09BD8E2ABAAD2 /* Pods */ = { + isa = PBXGroup; + children = ( + 8094A5C0BD3F742D973F4EBB /* Pods-Runner.debug.xcconfig */, + 5C244634881A8C4BD75C5C03 /* Pods-Runner.release.xcconfig */, + DC699C7AADC6A46B95166F6E /* Pods-Runner.profile.xcconfig */, + 531021BCFBF6DEA7A588EEFB /* Pods-RunnerTests.debug.xcconfig */, + FFE5027C7AD199E12A7AF98E /* Pods-RunnerTests.release.xcconfig */, + D324E46E5A8253E05C3A901E /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( @@ -94,6 +127,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, + 6655F551DEE09BD8E2ABAAD2 /* Pods */, + AB471AC81B5F3E3EAC08510D /* Frameworks */, ); sourceTree = ""; }; @@ -121,6 +156,15 @@ path = Runner; sourceTree = ""; }; + AB471AC81B5F3E3EAC08510D /* Frameworks */ = { + isa = PBXGroup; + children = ( + DE20D8731F5AC68BA1712A5A /* Pods_Runner.framework */, + F29266F85C81E223DE38826F /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -128,8 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( + C143E5EEC573FBD89B16A658 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, + 344BA4708047A433A26140BD /* Frameworks */, ); buildRules = ( ); @@ -145,6 +191,7 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( + 3AAEDA8BA83E71CC34259A37 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, @@ -222,6 +269,28 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ + 3AAEDA8BA83E71CC34259A37 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -253,6 +322,28 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; + C143E5EEC573FBD89B16A658 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -378,6 +469,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; + baseConfigurationReference = 531021BCFBF6DEA7A588EEFB /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -395,6 +487,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; + baseConfigurationReference = FFE5027C7AD199E12A7AF98E /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -410,6 +503,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; + baseConfigurationReference = D324E46E5A8253E05C3A901E /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/next-gen-ui/step_03_a/ios/Runner.xcworkspace/contents.xcworkspacedata b/next-gen-ui/step_03_a/ios/Runner.xcworkspace/contents.xcworkspacedata index 1d526a16ed..21a3cc14c7 100644 --- a/next-gen-ui/step_03_a/ios/Runner.xcworkspace/contents.xcworkspacedata +++ b/next-gen-ui/step_03_a/ios/Runner.xcworkspace/contents.xcworkspacedata @@ -4,4 +4,7 @@ + + diff --git a/next-gen-ui/step_03_a/lib/orb_shader/orb_shader_painter.dart b/next-gen-ui/step_03_a/lib/orb_shader/orb_shader_painter.dart index 50213545d9..399c20ab7e 100644 --- a/next-gen-ui/step_03_a/lib/orb_shader/orb_shader_painter.dart +++ b/next-gen-ui/step_03_a/lib/orb_shader/orb_shader_painter.dart @@ -28,13 +28,7 @@ class OrbShaderPainter extends CustomPainter { void paint(Canvas canvas, Size size) { double fov = v64.mix(pi / 4.3, pi / 2.0, config.zoom.clamp(0.0, 1.0)); - v64.Vector3 colorToVector3(Color c) => - v64.Vector3( - c.red.toDouble(), - c.green.toDouble(), - c.blue.toDouble(), - ) / - 255.0; + v64.Vector3 colorToVector3(Color c) => v64.Vector3(c.r, c.g, c.b); v64.Vector3 lightLumP = colorToVector3(config.lightColor).normalized() * max(0.0, config.lightBrightness); diff --git a/next-gen-ui/step_03_a/macos/Runner.xcodeproj/project.pbxproj b/next-gen-ui/step_03_a/macos/Runner.xcodeproj/project.pbxproj index 9c11821227..a260461a61 100644 --- a/next-gen-ui/step_03_a/macos/Runner.xcodeproj/project.pbxproj +++ b/next-gen-ui/step_03_a/macos/Runner.xcodeproj/project.pbxproj @@ -27,6 +27,8 @@ 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; + 44BBBA76B13EEB94F9DCE170 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2984A5AD2129F6C671F00164 /* Pods_Runner.framework */; }; + 4E0858D90CA55751E7BE4898 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 39010BEDE01EF3B7F309CBE7 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -60,11 +62,14 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 2984A5AD2129F6C671F00164 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 2CF773F4C2430EAC834646B3 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; }; - 33CC10ED2044A3C60003C045 /* next_gen_ui.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "next_gen_ui.app"; sourceTree = BUILT_PRODUCTS_DIR; }; + 337BA55CC083EAE0C41E02E7 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 33CC10ED2044A3C60003C045 /* next_gen_ui.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = next_gen_ui.app; sourceTree = BUILT_PRODUCTS_DIR; }; 33CC10F02044A3C60003C045 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 33CC10F22044A3C60003C045 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = Runner/Assets.xcassets; sourceTree = ""; }; 33CC10F52044A3C60003C045 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = ""; }; @@ -73,11 +78,16 @@ 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Debug.xcconfig"; sourceTree = ""; }; 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Release.xcconfig"; sourceTree = ""; }; 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = "Flutter-Generated.xcconfig"; path = "ephemeral/Flutter-Generated.xcconfig"; sourceTree = ""; }; + 33D3C1661150E5CF9FD9C336 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; + 39010BEDE01EF3B7F309CBE7 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 6B406084562E7BBF7435D2FF /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; + 7FDC8102767980E531E73AC5 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; + A4F4B5072EE42AC6A44D036B /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -85,6 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 4E0858D90CA55751E7BE4898 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -92,12 +103,27 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 44BBBA76B13EEB94F9DCE170 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 1C1096D0206D3CBABCC06686 /* Pods */ = { + isa = PBXGroup; + children = ( + 2CF773F4C2430EAC834646B3 /* Pods-Runner.debug.xcconfig */, + 7FDC8102767980E531E73AC5 /* Pods-Runner.release.xcconfig */, + 6B406084562E7BBF7435D2FF /* Pods-Runner.profile.xcconfig */, + A4F4B5072EE42AC6A44D036B /* Pods-RunnerTests.debug.xcconfig */, + 33D3C1661150E5CF9FD9C336 /* Pods-RunnerTests.release.xcconfig */, + 337BA55CC083EAE0C41E02E7 /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; 331C80D6294CF71000263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -125,6 +151,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, + 1C1096D0206D3CBABCC06686 /* Pods */, ); sourceTree = ""; }; @@ -175,6 +202,8 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( + 2984A5AD2129F6C671F00164 /* Pods_Runner.framework */, + 39010BEDE01EF3B7F309CBE7 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -186,6 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( + FE0C7B1BBD5CA48F75CD6536 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -204,11 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( + BF702552288C4603E192F687 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, + 978AFB595B79A33D319A948F /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -329,6 +361,67 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; + 978AFB595B79A33D319A948F /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; + BF702552288C4603E192F687 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; + FE0C7B1BBD5CA48F75CD6536 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -380,6 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; + baseConfigurationReference = A4F4B5072EE42AC6A44D036B /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -394,6 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; + baseConfigurationReference = 33D3C1661150E5CF9FD9C336 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -408,6 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; + baseConfigurationReference = 337BA55CC083EAE0C41E02E7 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/next-gen-ui/step_03_a/macos/Runner.xcworkspace/contents.xcworkspacedata b/next-gen-ui/step_03_a/macos/Runner.xcworkspace/contents.xcworkspacedata index 1d526a16ed..21a3cc14c7 100644 --- a/next-gen-ui/step_03_a/macos/Runner.xcworkspace/contents.xcworkspacedata +++ b/next-gen-ui/step_03_a/macos/Runner.xcworkspace/contents.xcworkspacedata @@ -4,4 +4,7 @@ + + diff --git a/next-gen-ui/step_03_a/pubspec.yaml b/next-gen-ui/step_03_a/pubspec.yaml index 726dd46e9e..dd3eb24959 100644 --- a/next-gen-ui/step_03_a/pubspec.yaml +++ b/next-gen-ui/step_03_a/pubspec.yaml @@ -27,7 +27,7 @@ dependencies: dev_dependencies: flutter_test: sdk: flutter - flutter_lints: ^4.0.0 + flutter_lints: ^5.0.0 flutter: uses-material-design: true diff --git a/next-gen-ui/step_03_b/ios/Runner.xcodeproj/project.pbxproj b/next-gen-ui/step_03_b/ios/Runner.xcodeproj/project.pbxproj index 61751e92da..43b8398d4f 100644 --- a/next-gen-ui/step_03_b/ios/Runner.xcodeproj/project.pbxproj +++ b/next-gen-ui/step_03_b/ios/Runner.xcodeproj/project.pbxproj @@ -11,9 +11,11 @@ 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; + 95B86EC706B280ECBF05B340 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F29266F85C81E223DE38826F /* Pods_RunnerTests.framework */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; + E9B1620F2EF5AF6175681809 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DE20D8731F5AC68BA1712A5A /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -45,9 +47,12 @@ 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; + 531021BCFBF6DEA7A588EEFB /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 5C244634881A8C4BD75C5C03 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; + 8094A5C0BD3F742D973F4EBB /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -55,13 +60,27 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + D324E46E5A8253E05C3A901E /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + DC699C7AADC6A46B95166F6E /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + DE20D8731F5AC68BA1712A5A /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + F29266F85C81E223DE38826F /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + FFE5027C7AD199E12A7AF98E /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ + 344BA4708047A433A26140BD /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 95B86EC706B280ECBF05B340 /* Pods_RunnerTests.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 97C146EB1CF9000F007C117D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + E9B1620F2EF5AF6175681809 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -76,6 +95,20 @@ path = RunnerTests; sourceTree = ""; }; + 6655F551DEE09BD8E2ABAAD2 /* Pods */ = { + isa = PBXGroup; + children = ( + 8094A5C0BD3F742D973F4EBB /* Pods-Runner.debug.xcconfig */, + 5C244634881A8C4BD75C5C03 /* Pods-Runner.release.xcconfig */, + DC699C7AADC6A46B95166F6E /* Pods-Runner.profile.xcconfig */, + 531021BCFBF6DEA7A588EEFB /* Pods-RunnerTests.debug.xcconfig */, + FFE5027C7AD199E12A7AF98E /* Pods-RunnerTests.release.xcconfig */, + D324E46E5A8253E05C3A901E /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( @@ -94,6 +127,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, + 6655F551DEE09BD8E2ABAAD2 /* Pods */, + AB471AC81B5F3E3EAC08510D /* Frameworks */, ); sourceTree = ""; }; @@ -121,6 +156,15 @@ path = Runner; sourceTree = ""; }; + AB471AC81B5F3E3EAC08510D /* Frameworks */ = { + isa = PBXGroup; + children = ( + DE20D8731F5AC68BA1712A5A /* Pods_Runner.framework */, + F29266F85C81E223DE38826F /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -128,8 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( + C143E5EEC573FBD89B16A658 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, + 344BA4708047A433A26140BD /* Frameworks */, ); buildRules = ( ); @@ -145,6 +191,7 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( + 3AAEDA8BA83E71CC34259A37 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, @@ -222,6 +269,28 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ + 3AAEDA8BA83E71CC34259A37 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -253,6 +322,28 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; + C143E5EEC573FBD89B16A658 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -378,6 +469,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; + baseConfigurationReference = 531021BCFBF6DEA7A588EEFB /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -395,6 +487,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; + baseConfigurationReference = FFE5027C7AD199E12A7AF98E /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -410,6 +503,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; + baseConfigurationReference = D324E46E5A8253E05C3A901E /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/next-gen-ui/step_03_b/ios/Runner.xcworkspace/contents.xcworkspacedata b/next-gen-ui/step_03_b/ios/Runner.xcworkspace/contents.xcworkspacedata index 1d526a16ed..21a3cc14c7 100644 --- a/next-gen-ui/step_03_b/ios/Runner.xcworkspace/contents.xcworkspacedata +++ b/next-gen-ui/step_03_b/ios/Runner.xcworkspace/contents.xcworkspacedata @@ -4,4 +4,7 @@ + + diff --git a/next-gen-ui/step_03_b/lib/orb_shader/orb_shader_painter.dart b/next-gen-ui/step_03_b/lib/orb_shader/orb_shader_painter.dart index 50213545d9..399c20ab7e 100644 --- a/next-gen-ui/step_03_b/lib/orb_shader/orb_shader_painter.dart +++ b/next-gen-ui/step_03_b/lib/orb_shader/orb_shader_painter.dart @@ -28,13 +28,7 @@ class OrbShaderPainter extends CustomPainter { void paint(Canvas canvas, Size size) { double fov = v64.mix(pi / 4.3, pi / 2.0, config.zoom.clamp(0.0, 1.0)); - v64.Vector3 colorToVector3(Color c) => - v64.Vector3( - c.red.toDouble(), - c.green.toDouble(), - c.blue.toDouble(), - ) / - 255.0; + v64.Vector3 colorToVector3(Color c) => v64.Vector3(c.r, c.g, c.b); v64.Vector3 lightLumP = colorToVector3(config.lightColor).normalized() * max(0.0, config.lightBrightness); diff --git a/next-gen-ui/step_03_b/macos/Runner.xcodeproj/project.pbxproj b/next-gen-ui/step_03_b/macos/Runner.xcodeproj/project.pbxproj index 9c11821227..a260461a61 100644 --- a/next-gen-ui/step_03_b/macos/Runner.xcodeproj/project.pbxproj +++ b/next-gen-ui/step_03_b/macos/Runner.xcodeproj/project.pbxproj @@ -27,6 +27,8 @@ 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; + 44BBBA76B13EEB94F9DCE170 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2984A5AD2129F6C671F00164 /* Pods_Runner.framework */; }; + 4E0858D90CA55751E7BE4898 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 39010BEDE01EF3B7F309CBE7 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -60,11 +62,14 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 2984A5AD2129F6C671F00164 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 2CF773F4C2430EAC834646B3 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; }; - 33CC10ED2044A3C60003C045 /* next_gen_ui.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "next_gen_ui.app"; sourceTree = BUILT_PRODUCTS_DIR; }; + 337BA55CC083EAE0C41E02E7 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 33CC10ED2044A3C60003C045 /* next_gen_ui.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = next_gen_ui.app; sourceTree = BUILT_PRODUCTS_DIR; }; 33CC10F02044A3C60003C045 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 33CC10F22044A3C60003C045 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = Runner/Assets.xcassets; sourceTree = ""; }; 33CC10F52044A3C60003C045 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = ""; }; @@ -73,11 +78,16 @@ 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Debug.xcconfig"; sourceTree = ""; }; 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Release.xcconfig"; sourceTree = ""; }; 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = "Flutter-Generated.xcconfig"; path = "ephemeral/Flutter-Generated.xcconfig"; sourceTree = ""; }; + 33D3C1661150E5CF9FD9C336 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; + 39010BEDE01EF3B7F309CBE7 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 6B406084562E7BBF7435D2FF /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; + 7FDC8102767980E531E73AC5 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; + A4F4B5072EE42AC6A44D036B /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -85,6 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 4E0858D90CA55751E7BE4898 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -92,12 +103,27 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 44BBBA76B13EEB94F9DCE170 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 1C1096D0206D3CBABCC06686 /* Pods */ = { + isa = PBXGroup; + children = ( + 2CF773F4C2430EAC834646B3 /* Pods-Runner.debug.xcconfig */, + 7FDC8102767980E531E73AC5 /* Pods-Runner.release.xcconfig */, + 6B406084562E7BBF7435D2FF /* Pods-Runner.profile.xcconfig */, + A4F4B5072EE42AC6A44D036B /* Pods-RunnerTests.debug.xcconfig */, + 33D3C1661150E5CF9FD9C336 /* Pods-RunnerTests.release.xcconfig */, + 337BA55CC083EAE0C41E02E7 /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; 331C80D6294CF71000263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -125,6 +151,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, + 1C1096D0206D3CBABCC06686 /* Pods */, ); sourceTree = ""; }; @@ -175,6 +202,8 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( + 2984A5AD2129F6C671F00164 /* Pods_Runner.framework */, + 39010BEDE01EF3B7F309CBE7 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -186,6 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( + FE0C7B1BBD5CA48F75CD6536 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -204,11 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( + BF702552288C4603E192F687 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, + 978AFB595B79A33D319A948F /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -329,6 +361,67 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; + 978AFB595B79A33D319A948F /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; + BF702552288C4603E192F687 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; + FE0C7B1BBD5CA48F75CD6536 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -380,6 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; + baseConfigurationReference = A4F4B5072EE42AC6A44D036B /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -394,6 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; + baseConfigurationReference = 33D3C1661150E5CF9FD9C336 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -408,6 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; + baseConfigurationReference = 337BA55CC083EAE0C41E02E7 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/next-gen-ui/step_03_b/macos/Runner.xcworkspace/contents.xcworkspacedata b/next-gen-ui/step_03_b/macos/Runner.xcworkspace/contents.xcworkspacedata index 1d526a16ed..21a3cc14c7 100644 --- a/next-gen-ui/step_03_b/macos/Runner.xcworkspace/contents.xcworkspacedata +++ b/next-gen-ui/step_03_b/macos/Runner.xcworkspace/contents.xcworkspacedata @@ -4,4 +4,7 @@ + + diff --git a/next-gen-ui/step_03_b/pubspec.yaml b/next-gen-ui/step_03_b/pubspec.yaml index 726dd46e9e..dd3eb24959 100644 --- a/next-gen-ui/step_03_b/pubspec.yaml +++ b/next-gen-ui/step_03_b/pubspec.yaml @@ -27,7 +27,7 @@ dependencies: dev_dependencies: flutter_test: sdk: flutter - flutter_lints: ^4.0.0 + flutter_lints: ^5.0.0 flutter: uses-material-design: true diff --git a/next-gen-ui/step_03_c/ios/Runner.xcodeproj/project.pbxproj b/next-gen-ui/step_03_c/ios/Runner.xcodeproj/project.pbxproj index 61751e92da..43b8398d4f 100644 --- a/next-gen-ui/step_03_c/ios/Runner.xcodeproj/project.pbxproj +++ b/next-gen-ui/step_03_c/ios/Runner.xcodeproj/project.pbxproj @@ -11,9 +11,11 @@ 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; + 95B86EC706B280ECBF05B340 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F29266F85C81E223DE38826F /* Pods_RunnerTests.framework */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; + E9B1620F2EF5AF6175681809 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DE20D8731F5AC68BA1712A5A /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -45,9 +47,12 @@ 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; + 531021BCFBF6DEA7A588EEFB /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 5C244634881A8C4BD75C5C03 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; + 8094A5C0BD3F742D973F4EBB /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -55,13 +60,27 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + D324E46E5A8253E05C3A901E /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + DC699C7AADC6A46B95166F6E /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + DE20D8731F5AC68BA1712A5A /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + F29266F85C81E223DE38826F /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + FFE5027C7AD199E12A7AF98E /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ + 344BA4708047A433A26140BD /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 95B86EC706B280ECBF05B340 /* Pods_RunnerTests.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 97C146EB1CF9000F007C117D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + E9B1620F2EF5AF6175681809 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -76,6 +95,20 @@ path = RunnerTests; sourceTree = ""; }; + 6655F551DEE09BD8E2ABAAD2 /* Pods */ = { + isa = PBXGroup; + children = ( + 8094A5C0BD3F742D973F4EBB /* Pods-Runner.debug.xcconfig */, + 5C244634881A8C4BD75C5C03 /* Pods-Runner.release.xcconfig */, + DC699C7AADC6A46B95166F6E /* Pods-Runner.profile.xcconfig */, + 531021BCFBF6DEA7A588EEFB /* Pods-RunnerTests.debug.xcconfig */, + FFE5027C7AD199E12A7AF98E /* Pods-RunnerTests.release.xcconfig */, + D324E46E5A8253E05C3A901E /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( @@ -94,6 +127,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, + 6655F551DEE09BD8E2ABAAD2 /* Pods */, + AB471AC81B5F3E3EAC08510D /* Frameworks */, ); sourceTree = ""; }; @@ -121,6 +156,15 @@ path = Runner; sourceTree = ""; }; + AB471AC81B5F3E3EAC08510D /* Frameworks */ = { + isa = PBXGroup; + children = ( + DE20D8731F5AC68BA1712A5A /* Pods_Runner.framework */, + F29266F85C81E223DE38826F /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -128,8 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( + C143E5EEC573FBD89B16A658 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, + 344BA4708047A433A26140BD /* Frameworks */, ); buildRules = ( ); @@ -145,6 +191,7 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( + 3AAEDA8BA83E71CC34259A37 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, @@ -222,6 +269,28 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ + 3AAEDA8BA83E71CC34259A37 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -253,6 +322,28 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; + C143E5EEC573FBD89B16A658 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -378,6 +469,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; + baseConfigurationReference = 531021BCFBF6DEA7A588EEFB /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -395,6 +487,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; + baseConfigurationReference = FFE5027C7AD199E12A7AF98E /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -410,6 +503,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; + baseConfigurationReference = D324E46E5A8253E05C3A901E /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/next-gen-ui/step_03_c/ios/Runner.xcworkspace/contents.xcworkspacedata b/next-gen-ui/step_03_c/ios/Runner.xcworkspace/contents.xcworkspacedata index 1d526a16ed..21a3cc14c7 100644 --- a/next-gen-ui/step_03_c/ios/Runner.xcworkspace/contents.xcworkspacedata +++ b/next-gen-ui/step_03_c/ios/Runner.xcworkspace/contents.xcworkspacedata @@ -4,4 +4,7 @@ + + diff --git a/next-gen-ui/step_03_c/lib/orb_shader/orb_shader_painter.dart b/next-gen-ui/step_03_c/lib/orb_shader/orb_shader_painter.dart index 50213545d9..399c20ab7e 100644 --- a/next-gen-ui/step_03_c/lib/orb_shader/orb_shader_painter.dart +++ b/next-gen-ui/step_03_c/lib/orb_shader/orb_shader_painter.dart @@ -28,13 +28,7 @@ class OrbShaderPainter extends CustomPainter { void paint(Canvas canvas, Size size) { double fov = v64.mix(pi / 4.3, pi / 2.0, config.zoom.clamp(0.0, 1.0)); - v64.Vector3 colorToVector3(Color c) => - v64.Vector3( - c.red.toDouble(), - c.green.toDouble(), - c.blue.toDouble(), - ) / - 255.0; + v64.Vector3 colorToVector3(Color c) => v64.Vector3(c.r, c.g, c.b); v64.Vector3 lightLumP = colorToVector3(config.lightColor).normalized() * max(0.0, config.lightBrightness); diff --git a/next-gen-ui/step_03_c/macos/Runner.xcodeproj/project.pbxproj b/next-gen-ui/step_03_c/macos/Runner.xcodeproj/project.pbxproj index 9c11821227..a260461a61 100644 --- a/next-gen-ui/step_03_c/macos/Runner.xcodeproj/project.pbxproj +++ b/next-gen-ui/step_03_c/macos/Runner.xcodeproj/project.pbxproj @@ -27,6 +27,8 @@ 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; + 44BBBA76B13EEB94F9DCE170 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2984A5AD2129F6C671F00164 /* Pods_Runner.framework */; }; + 4E0858D90CA55751E7BE4898 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 39010BEDE01EF3B7F309CBE7 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -60,11 +62,14 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 2984A5AD2129F6C671F00164 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 2CF773F4C2430EAC834646B3 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; }; - 33CC10ED2044A3C60003C045 /* next_gen_ui.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "next_gen_ui.app"; sourceTree = BUILT_PRODUCTS_DIR; }; + 337BA55CC083EAE0C41E02E7 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 33CC10ED2044A3C60003C045 /* next_gen_ui.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = next_gen_ui.app; sourceTree = BUILT_PRODUCTS_DIR; }; 33CC10F02044A3C60003C045 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 33CC10F22044A3C60003C045 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = Runner/Assets.xcassets; sourceTree = ""; }; 33CC10F52044A3C60003C045 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = ""; }; @@ -73,11 +78,16 @@ 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Debug.xcconfig"; sourceTree = ""; }; 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Release.xcconfig"; sourceTree = ""; }; 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = "Flutter-Generated.xcconfig"; path = "ephemeral/Flutter-Generated.xcconfig"; sourceTree = ""; }; + 33D3C1661150E5CF9FD9C336 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; + 39010BEDE01EF3B7F309CBE7 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 6B406084562E7BBF7435D2FF /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; + 7FDC8102767980E531E73AC5 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; + A4F4B5072EE42AC6A44D036B /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -85,6 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 4E0858D90CA55751E7BE4898 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -92,12 +103,27 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 44BBBA76B13EEB94F9DCE170 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 1C1096D0206D3CBABCC06686 /* Pods */ = { + isa = PBXGroup; + children = ( + 2CF773F4C2430EAC834646B3 /* Pods-Runner.debug.xcconfig */, + 7FDC8102767980E531E73AC5 /* Pods-Runner.release.xcconfig */, + 6B406084562E7BBF7435D2FF /* Pods-Runner.profile.xcconfig */, + A4F4B5072EE42AC6A44D036B /* Pods-RunnerTests.debug.xcconfig */, + 33D3C1661150E5CF9FD9C336 /* Pods-RunnerTests.release.xcconfig */, + 337BA55CC083EAE0C41E02E7 /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; 331C80D6294CF71000263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -125,6 +151,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, + 1C1096D0206D3CBABCC06686 /* Pods */, ); sourceTree = ""; }; @@ -175,6 +202,8 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( + 2984A5AD2129F6C671F00164 /* Pods_Runner.framework */, + 39010BEDE01EF3B7F309CBE7 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -186,6 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( + FE0C7B1BBD5CA48F75CD6536 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -204,11 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( + BF702552288C4603E192F687 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, + 978AFB595B79A33D319A948F /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -329,6 +361,67 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; + 978AFB595B79A33D319A948F /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; + BF702552288C4603E192F687 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; + FE0C7B1BBD5CA48F75CD6536 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -380,6 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; + baseConfigurationReference = A4F4B5072EE42AC6A44D036B /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -394,6 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; + baseConfigurationReference = 33D3C1661150E5CF9FD9C336 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -408,6 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; + baseConfigurationReference = 337BA55CC083EAE0C41E02E7 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/next-gen-ui/step_03_c/macos/Runner.xcworkspace/contents.xcworkspacedata b/next-gen-ui/step_03_c/macos/Runner.xcworkspace/contents.xcworkspacedata index 1d526a16ed..21a3cc14c7 100644 --- a/next-gen-ui/step_03_c/macos/Runner.xcworkspace/contents.xcworkspacedata +++ b/next-gen-ui/step_03_c/macos/Runner.xcworkspace/contents.xcworkspacedata @@ -4,4 +4,7 @@ + + diff --git a/next-gen-ui/step_03_c/pubspec.yaml b/next-gen-ui/step_03_c/pubspec.yaml index 726dd46e9e..dd3eb24959 100644 --- a/next-gen-ui/step_03_c/pubspec.yaml +++ b/next-gen-ui/step_03_c/pubspec.yaml @@ -27,7 +27,7 @@ dependencies: dev_dependencies: flutter_test: sdk: flutter - flutter_lints: ^4.0.0 + flutter_lints: ^5.0.0 flutter: uses-material-design: true diff --git a/next-gen-ui/step_04_a/ios/Runner.xcodeproj/project.pbxproj b/next-gen-ui/step_04_a/ios/Runner.xcodeproj/project.pbxproj index 61751e92da..43b8398d4f 100644 --- a/next-gen-ui/step_04_a/ios/Runner.xcodeproj/project.pbxproj +++ b/next-gen-ui/step_04_a/ios/Runner.xcodeproj/project.pbxproj @@ -11,9 +11,11 @@ 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; + 95B86EC706B280ECBF05B340 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F29266F85C81E223DE38826F /* Pods_RunnerTests.framework */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; + E9B1620F2EF5AF6175681809 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DE20D8731F5AC68BA1712A5A /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -45,9 +47,12 @@ 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; + 531021BCFBF6DEA7A588EEFB /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 5C244634881A8C4BD75C5C03 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; + 8094A5C0BD3F742D973F4EBB /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -55,13 +60,27 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + D324E46E5A8253E05C3A901E /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + DC699C7AADC6A46B95166F6E /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + DE20D8731F5AC68BA1712A5A /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + F29266F85C81E223DE38826F /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + FFE5027C7AD199E12A7AF98E /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ + 344BA4708047A433A26140BD /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 95B86EC706B280ECBF05B340 /* Pods_RunnerTests.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 97C146EB1CF9000F007C117D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + E9B1620F2EF5AF6175681809 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -76,6 +95,20 @@ path = RunnerTests; sourceTree = ""; }; + 6655F551DEE09BD8E2ABAAD2 /* Pods */ = { + isa = PBXGroup; + children = ( + 8094A5C0BD3F742D973F4EBB /* Pods-Runner.debug.xcconfig */, + 5C244634881A8C4BD75C5C03 /* Pods-Runner.release.xcconfig */, + DC699C7AADC6A46B95166F6E /* Pods-Runner.profile.xcconfig */, + 531021BCFBF6DEA7A588EEFB /* Pods-RunnerTests.debug.xcconfig */, + FFE5027C7AD199E12A7AF98E /* Pods-RunnerTests.release.xcconfig */, + D324E46E5A8253E05C3A901E /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( @@ -94,6 +127,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, + 6655F551DEE09BD8E2ABAAD2 /* Pods */, + AB471AC81B5F3E3EAC08510D /* Frameworks */, ); sourceTree = ""; }; @@ -121,6 +156,15 @@ path = Runner; sourceTree = ""; }; + AB471AC81B5F3E3EAC08510D /* Frameworks */ = { + isa = PBXGroup; + children = ( + DE20D8731F5AC68BA1712A5A /* Pods_Runner.framework */, + F29266F85C81E223DE38826F /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -128,8 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( + C143E5EEC573FBD89B16A658 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, + 344BA4708047A433A26140BD /* Frameworks */, ); buildRules = ( ); @@ -145,6 +191,7 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( + 3AAEDA8BA83E71CC34259A37 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, @@ -222,6 +269,28 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ + 3AAEDA8BA83E71CC34259A37 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -253,6 +322,28 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; + C143E5EEC573FBD89B16A658 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -378,6 +469,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; + baseConfigurationReference = 531021BCFBF6DEA7A588EEFB /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -395,6 +487,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; + baseConfigurationReference = FFE5027C7AD199E12A7AF98E /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -410,6 +503,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; + baseConfigurationReference = D324E46E5A8253E05C3A901E /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/next-gen-ui/step_04_a/ios/Runner.xcworkspace/contents.xcworkspacedata b/next-gen-ui/step_04_a/ios/Runner.xcworkspace/contents.xcworkspacedata index 1d526a16ed..21a3cc14c7 100644 --- a/next-gen-ui/step_04_a/ios/Runner.xcworkspace/contents.xcworkspacedata +++ b/next-gen-ui/step_04_a/ios/Runner.xcworkspace/contents.xcworkspacedata @@ -4,4 +4,7 @@ + + diff --git a/next-gen-ui/step_04_a/lib/orb_shader/orb_shader_painter.dart b/next-gen-ui/step_04_a/lib/orb_shader/orb_shader_painter.dart index 50213545d9..399c20ab7e 100644 --- a/next-gen-ui/step_04_a/lib/orb_shader/orb_shader_painter.dart +++ b/next-gen-ui/step_04_a/lib/orb_shader/orb_shader_painter.dart @@ -28,13 +28,7 @@ class OrbShaderPainter extends CustomPainter { void paint(Canvas canvas, Size size) { double fov = v64.mix(pi / 4.3, pi / 2.0, config.zoom.clamp(0.0, 1.0)); - v64.Vector3 colorToVector3(Color c) => - v64.Vector3( - c.red.toDouble(), - c.green.toDouble(), - c.blue.toDouble(), - ) / - 255.0; + v64.Vector3 colorToVector3(Color c) => v64.Vector3(c.r, c.g, c.b); v64.Vector3 lightLumP = colorToVector3(config.lightColor).normalized() * max(0.0, config.lightBrightness); diff --git a/next-gen-ui/step_04_a/macos/Runner.xcodeproj/project.pbxproj b/next-gen-ui/step_04_a/macos/Runner.xcodeproj/project.pbxproj index 9c11821227..a260461a61 100644 --- a/next-gen-ui/step_04_a/macos/Runner.xcodeproj/project.pbxproj +++ b/next-gen-ui/step_04_a/macos/Runner.xcodeproj/project.pbxproj @@ -27,6 +27,8 @@ 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; + 44BBBA76B13EEB94F9DCE170 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2984A5AD2129F6C671F00164 /* Pods_Runner.framework */; }; + 4E0858D90CA55751E7BE4898 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 39010BEDE01EF3B7F309CBE7 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -60,11 +62,14 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 2984A5AD2129F6C671F00164 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 2CF773F4C2430EAC834646B3 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; }; - 33CC10ED2044A3C60003C045 /* next_gen_ui.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "next_gen_ui.app"; sourceTree = BUILT_PRODUCTS_DIR; }; + 337BA55CC083EAE0C41E02E7 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 33CC10ED2044A3C60003C045 /* next_gen_ui.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = next_gen_ui.app; sourceTree = BUILT_PRODUCTS_DIR; }; 33CC10F02044A3C60003C045 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 33CC10F22044A3C60003C045 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = Runner/Assets.xcassets; sourceTree = ""; }; 33CC10F52044A3C60003C045 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = ""; }; @@ -73,11 +78,16 @@ 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Debug.xcconfig"; sourceTree = ""; }; 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Release.xcconfig"; sourceTree = ""; }; 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = "Flutter-Generated.xcconfig"; path = "ephemeral/Flutter-Generated.xcconfig"; sourceTree = ""; }; + 33D3C1661150E5CF9FD9C336 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; + 39010BEDE01EF3B7F309CBE7 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 6B406084562E7BBF7435D2FF /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; + 7FDC8102767980E531E73AC5 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; + A4F4B5072EE42AC6A44D036B /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -85,6 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 4E0858D90CA55751E7BE4898 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -92,12 +103,27 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 44BBBA76B13EEB94F9DCE170 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 1C1096D0206D3CBABCC06686 /* Pods */ = { + isa = PBXGroup; + children = ( + 2CF773F4C2430EAC834646B3 /* Pods-Runner.debug.xcconfig */, + 7FDC8102767980E531E73AC5 /* Pods-Runner.release.xcconfig */, + 6B406084562E7BBF7435D2FF /* Pods-Runner.profile.xcconfig */, + A4F4B5072EE42AC6A44D036B /* Pods-RunnerTests.debug.xcconfig */, + 33D3C1661150E5CF9FD9C336 /* Pods-RunnerTests.release.xcconfig */, + 337BA55CC083EAE0C41E02E7 /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; 331C80D6294CF71000263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -125,6 +151,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, + 1C1096D0206D3CBABCC06686 /* Pods */, ); sourceTree = ""; }; @@ -175,6 +202,8 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( + 2984A5AD2129F6C671F00164 /* Pods_Runner.framework */, + 39010BEDE01EF3B7F309CBE7 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -186,6 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( + FE0C7B1BBD5CA48F75CD6536 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -204,11 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( + BF702552288C4603E192F687 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, + 978AFB595B79A33D319A948F /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -329,6 +361,67 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; + 978AFB595B79A33D319A948F /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; + BF702552288C4603E192F687 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; + FE0C7B1BBD5CA48F75CD6536 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -380,6 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; + baseConfigurationReference = A4F4B5072EE42AC6A44D036B /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -394,6 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; + baseConfigurationReference = 33D3C1661150E5CF9FD9C336 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -408,6 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; + baseConfigurationReference = 337BA55CC083EAE0C41E02E7 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/next-gen-ui/step_04_a/macos/Runner.xcworkspace/contents.xcworkspacedata b/next-gen-ui/step_04_a/macos/Runner.xcworkspace/contents.xcworkspacedata index 1d526a16ed..21a3cc14c7 100644 --- a/next-gen-ui/step_04_a/macos/Runner.xcworkspace/contents.xcworkspacedata +++ b/next-gen-ui/step_04_a/macos/Runner.xcworkspace/contents.xcworkspacedata @@ -4,4 +4,7 @@ + + diff --git a/next-gen-ui/step_04_a/pubspec.yaml b/next-gen-ui/step_04_a/pubspec.yaml index 726dd46e9e..dd3eb24959 100644 --- a/next-gen-ui/step_04_a/pubspec.yaml +++ b/next-gen-ui/step_04_a/pubspec.yaml @@ -27,7 +27,7 @@ dependencies: dev_dependencies: flutter_test: sdk: flutter - flutter_lints: ^4.0.0 + flutter_lints: ^5.0.0 flutter: uses-material-design: true diff --git a/next-gen-ui/step_04_b/ios/Runner.xcodeproj/project.pbxproj b/next-gen-ui/step_04_b/ios/Runner.xcodeproj/project.pbxproj index 61751e92da..43b8398d4f 100644 --- a/next-gen-ui/step_04_b/ios/Runner.xcodeproj/project.pbxproj +++ b/next-gen-ui/step_04_b/ios/Runner.xcodeproj/project.pbxproj @@ -11,9 +11,11 @@ 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; + 95B86EC706B280ECBF05B340 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F29266F85C81E223DE38826F /* Pods_RunnerTests.framework */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; + E9B1620F2EF5AF6175681809 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DE20D8731F5AC68BA1712A5A /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -45,9 +47,12 @@ 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; + 531021BCFBF6DEA7A588EEFB /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 5C244634881A8C4BD75C5C03 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; + 8094A5C0BD3F742D973F4EBB /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -55,13 +60,27 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + D324E46E5A8253E05C3A901E /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + DC699C7AADC6A46B95166F6E /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + DE20D8731F5AC68BA1712A5A /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + F29266F85C81E223DE38826F /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + FFE5027C7AD199E12A7AF98E /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ + 344BA4708047A433A26140BD /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 95B86EC706B280ECBF05B340 /* Pods_RunnerTests.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 97C146EB1CF9000F007C117D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + E9B1620F2EF5AF6175681809 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -76,6 +95,20 @@ path = RunnerTests; sourceTree = ""; }; + 6655F551DEE09BD8E2ABAAD2 /* Pods */ = { + isa = PBXGroup; + children = ( + 8094A5C0BD3F742D973F4EBB /* Pods-Runner.debug.xcconfig */, + 5C244634881A8C4BD75C5C03 /* Pods-Runner.release.xcconfig */, + DC699C7AADC6A46B95166F6E /* Pods-Runner.profile.xcconfig */, + 531021BCFBF6DEA7A588EEFB /* Pods-RunnerTests.debug.xcconfig */, + FFE5027C7AD199E12A7AF98E /* Pods-RunnerTests.release.xcconfig */, + D324E46E5A8253E05C3A901E /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( @@ -94,6 +127,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, + 6655F551DEE09BD8E2ABAAD2 /* Pods */, + AB471AC81B5F3E3EAC08510D /* Frameworks */, ); sourceTree = ""; }; @@ -121,6 +156,15 @@ path = Runner; sourceTree = ""; }; + AB471AC81B5F3E3EAC08510D /* Frameworks */ = { + isa = PBXGroup; + children = ( + DE20D8731F5AC68BA1712A5A /* Pods_Runner.framework */, + F29266F85C81E223DE38826F /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -128,8 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( + C143E5EEC573FBD89B16A658 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, + 344BA4708047A433A26140BD /* Frameworks */, ); buildRules = ( ); @@ -145,6 +191,7 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( + 3AAEDA8BA83E71CC34259A37 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, @@ -222,6 +269,28 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ + 3AAEDA8BA83E71CC34259A37 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -253,6 +322,28 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; + C143E5EEC573FBD89B16A658 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -378,6 +469,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; + baseConfigurationReference = 531021BCFBF6DEA7A588EEFB /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -395,6 +487,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; + baseConfigurationReference = FFE5027C7AD199E12A7AF98E /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -410,6 +503,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; + baseConfigurationReference = D324E46E5A8253E05C3A901E /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/next-gen-ui/step_04_b/ios/Runner.xcworkspace/contents.xcworkspacedata b/next-gen-ui/step_04_b/ios/Runner.xcworkspace/contents.xcworkspacedata index 1d526a16ed..21a3cc14c7 100644 --- a/next-gen-ui/step_04_b/ios/Runner.xcworkspace/contents.xcworkspacedata +++ b/next-gen-ui/step_04_b/ios/Runner.xcworkspace/contents.xcworkspacedata @@ -4,4 +4,7 @@ + + diff --git a/next-gen-ui/step_04_b/lib/orb_shader/orb_shader_painter.dart b/next-gen-ui/step_04_b/lib/orb_shader/orb_shader_painter.dart index 50213545d9..399c20ab7e 100644 --- a/next-gen-ui/step_04_b/lib/orb_shader/orb_shader_painter.dart +++ b/next-gen-ui/step_04_b/lib/orb_shader/orb_shader_painter.dart @@ -28,13 +28,7 @@ class OrbShaderPainter extends CustomPainter { void paint(Canvas canvas, Size size) { double fov = v64.mix(pi / 4.3, pi / 2.0, config.zoom.clamp(0.0, 1.0)); - v64.Vector3 colorToVector3(Color c) => - v64.Vector3( - c.red.toDouble(), - c.green.toDouble(), - c.blue.toDouble(), - ) / - 255.0; + v64.Vector3 colorToVector3(Color c) => v64.Vector3(c.r, c.g, c.b); v64.Vector3 lightLumP = colorToVector3(config.lightColor).normalized() * max(0.0, config.lightBrightness); diff --git a/next-gen-ui/step_04_b/macos/Runner.xcodeproj/project.pbxproj b/next-gen-ui/step_04_b/macos/Runner.xcodeproj/project.pbxproj index 9c11821227..a260461a61 100644 --- a/next-gen-ui/step_04_b/macos/Runner.xcodeproj/project.pbxproj +++ b/next-gen-ui/step_04_b/macos/Runner.xcodeproj/project.pbxproj @@ -27,6 +27,8 @@ 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; + 44BBBA76B13EEB94F9DCE170 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2984A5AD2129F6C671F00164 /* Pods_Runner.framework */; }; + 4E0858D90CA55751E7BE4898 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 39010BEDE01EF3B7F309CBE7 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -60,11 +62,14 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 2984A5AD2129F6C671F00164 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 2CF773F4C2430EAC834646B3 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; }; - 33CC10ED2044A3C60003C045 /* next_gen_ui.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "next_gen_ui.app"; sourceTree = BUILT_PRODUCTS_DIR; }; + 337BA55CC083EAE0C41E02E7 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 33CC10ED2044A3C60003C045 /* next_gen_ui.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = next_gen_ui.app; sourceTree = BUILT_PRODUCTS_DIR; }; 33CC10F02044A3C60003C045 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 33CC10F22044A3C60003C045 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = Runner/Assets.xcassets; sourceTree = ""; }; 33CC10F52044A3C60003C045 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = ""; }; @@ -73,11 +78,16 @@ 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Debug.xcconfig"; sourceTree = ""; }; 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Release.xcconfig"; sourceTree = ""; }; 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = "Flutter-Generated.xcconfig"; path = "ephemeral/Flutter-Generated.xcconfig"; sourceTree = ""; }; + 33D3C1661150E5CF9FD9C336 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; + 39010BEDE01EF3B7F309CBE7 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 6B406084562E7BBF7435D2FF /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; + 7FDC8102767980E531E73AC5 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; + A4F4B5072EE42AC6A44D036B /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -85,6 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 4E0858D90CA55751E7BE4898 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -92,12 +103,27 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 44BBBA76B13EEB94F9DCE170 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 1C1096D0206D3CBABCC06686 /* Pods */ = { + isa = PBXGroup; + children = ( + 2CF773F4C2430EAC834646B3 /* Pods-Runner.debug.xcconfig */, + 7FDC8102767980E531E73AC5 /* Pods-Runner.release.xcconfig */, + 6B406084562E7BBF7435D2FF /* Pods-Runner.profile.xcconfig */, + A4F4B5072EE42AC6A44D036B /* Pods-RunnerTests.debug.xcconfig */, + 33D3C1661150E5CF9FD9C336 /* Pods-RunnerTests.release.xcconfig */, + 337BA55CC083EAE0C41E02E7 /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; 331C80D6294CF71000263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -125,6 +151,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, + 1C1096D0206D3CBABCC06686 /* Pods */, ); sourceTree = ""; }; @@ -175,6 +202,8 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( + 2984A5AD2129F6C671F00164 /* Pods_Runner.framework */, + 39010BEDE01EF3B7F309CBE7 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -186,6 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( + FE0C7B1BBD5CA48F75CD6536 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -204,11 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( + BF702552288C4603E192F687 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, + 978AFB595B79A33D319A948F /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -329,6 +361,67 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; + 978AFB595B79A33D319A948F /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; + BF702552288C4603E192F687 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; + FE0C7B1BBD5CA48F75CD6536 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -380,6 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; + baseConfigurationReference = A4F4B5072EE42AC6A44D036B /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -394,6 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; + baseConfigurationReference = 33D3C1661150E5CF9FD9C336 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -408,6 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; + baseConfigurationReference = 337BA55CC083EAE0C41E02E7 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/next-gen-ui/step_04_b/macos/Runner.xcworkspace/contents.xcworkspacedata b/next-gen-ui/step_04_b/macos/Runner.xcworkspace/contents.xcworkspacedata index 1d526a16ed..21a3cc14c7 100644 --- a/next-gen-ui/step_04_b/macos/Runner.xcworkspace/contents.xcworkspacedata +++ b/next-gen-ui/step_04_b/macos/Runner.xcworkspace/contents.xcworkspacedata @@ -4,4 +4,7 @@ + + diff --git a/next-gen-ui/step_04_b/pubspec.yaml b/next-gen-ui/step_04_b/pubspec.yaml index 726dd46e9e..dd3eb24959 100644 --- a/next-gen-ui/step_04_b/pubspec.yaml +++ b/next-gen-ui/step_04_b/pubspec.yaml @@ -27,7 +27,7 @@ dependencies: dev_dependencies: flutter_test: sdk: flutter - flutter_lints: ^4.0.0 + flutter_lints: ^5.0.0 flutter: uses-material-design: true diff --git a/next-gen-ui/step_04_c/ios/Runner.xcodeproj/project.pbxproj b/next-gen-ui/step_04_c/ios/Runner.xcodeproj/project.pbxproj index 61751e92da..43b8398d4f 100644 --- a/next-gen-ui/step_04_c/ios/Runner.xcodeproj/project.pbxproj +++ b/next-gen-ui/step_04_c/ios/Runner.xcodeproj/project.pbxproj @@ -11,9 +11,11 @@ 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; + 95B86EC706B280ECBF05B340 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F29266F85C81E223DE38826F /* Pods_RunnerTests.framework */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; + E9B1620F2EF5AF6175681809 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DE20D8731F5AC68BA1712A5A /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -45,9 +47,12 @@ 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; + 531021BCFBF6DEA7A588EEFB /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 5C244634881A8C4BD75C5C03 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; + 8094A5C0BD3F742D973F4EBB /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -55,13 +60,27 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + D324E46E5A8253E05C3A901E /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + DC699C7AADC6A46B95166F6E /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + DE20D8731F5AC68BA1712A5A /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + F29266F85C81E223DE38826F /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + FFE5027C7AD199E12A7AF98E /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ + 344BA4708047A433A26140BD /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 95B86EC706B280ECBF05B340 /* Pods_RunnerTests.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 97C146EB1CF9000F007C117D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + E9B1620F2EF5AF6175681809 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -76,6 +95,20 @@ path = RunnerTests; sourceTree = ""; }; + 6655F551DEE09BD8E2ABAAD2 /* Pods */ = { + isa = PBXGroup; + children = ( + 8094A5C0BD3F742D973F4EBB /* Pods-Runner.debug.xcconfig */, + 5C244634881A8C4BD75C5C03 /* Pods-Runner.release.xcconfig */, + DC699C7AADC6A46B95166F6E /* Pods-Runner.profile.xcconfig */, + 531021BCFBF6DEA7A588EEFB /* Pods-RunnerTests.debug.xcconfig */, + FFE5027C7AD199E12A7AF98E /* Pods-RunnerTests.release.xcconfig */, + D324E46E5A8253E05C3A901E /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( @@ -94,6 +127,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, + 6655F551DEE09BD8E2ABAAD2 /* Pods */, + AB471AC81B5F3E3EAC08510D /* Frameworks */, ); sourceTree = ""; }; @@ -121,6 +156,15 @@ path = Runner; sourceTree = ""; }; + AB471AC81B5F3E3EAC08510D /* Frameworks */ = { + isa = PBXGroup; + children = ( + DE20D8731F5AC68BA1712A5A /* Pods_Runner.framework */, + F29266F85C81E223DE38826F /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -128,8 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( + C143E5EEC573FBD89B16A658 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, + 344BA4708047A433A26140BD /* Frameworks */, ); buildRules = ( ); @@ -145,6 +191,7 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( + 3AAEDA8BA83E71CC34259A37 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, @@ -222,6 +269,28 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ + 3AAEDA8BA83E71CC34259A37 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -253,6 +322,28 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; + C143E5EEC573FBD89B16A658 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -378,6 +469,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; + baseConfigurationReference = 531021BCFBF6DEA7A588EEFB /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -395,6 +487,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; + baseConfigurationReference = FFE5027C7AD199E12A7AF98E /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -410,6 +503,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; + baseConfigurationReference = D324E46E5A8253E05C3A901E /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/next-gen-ui/step_04_c/ios/Runner.xcworkspace/contents.xcworkspacedata b/next-gen-ui/step_04_c/ios/Runner.xcworkspace/contents.xcworkspacedata index 1d526a16ed..21a3cc14c7 100644 --- a/next-gen-ui/step_04_c/ios/Runner.xcworkspace/contents.xcworkspacedata +++ b/next-gen-ui/step_04_c/ios/Runner.xcworkspace/contents.xcworkspacedata @@ -4,4 +4,7 @@ + + diff --git a/next-gen-ui/step_04_c/lib/orb_shader/orb_shader_painter.dart b/next-gen-ui/step_04_c/lib/orb_shader/orb_shader_painter.dart index 50213545d9..399c20ab7e 100644 --- a/next-gen-ui/step_04_c/lib/orb_shader/orb_shader_painter.dart +++ b/next-gen-ui/step_04_c/lib/orb_shader/orb_shader_painter.dart @@ -28,13 +28,7 @@ class OrbShaderPainter extends CustomPainter { void paint(Canvas canvas, Size size) { double fov = v64.mix(pi / 4.3, pi / 2.0, config.zoom.clamp(0.0, 1.0)); - v64.Vector3 colorToVector3(Color c) => - v64.Vector3( - c.red.toDouble(), - c.green.toDouble(), - c.blue.toDouble(), - ) / - 255.0; + v64.Vector3 colorToVector3(Color c) => v64.Vector3(c.r, c.g, c.b); v64.Vector3 lightLumP = colorToVector3(config.lightColor).normalized() * max(0.0, config.lightBrightness); diff --git a/next-gen-ui/step_04_c/macos/Runner.xcodeproj/project.pbxproj b/next-gen-ui/step_04_c/macos/Runner.xcodeproj/project.pbxproj index 9c11821227..a260461a61 100644 --- a/next-gen-ui/step_04_c/macos/Runner.xcodeproj/project.pbxproj +++ b/next-gen-ui/step_04_c/macos/Runner.xcodeproj/project.pbxproj @@ -27,6 +27,8 @@ 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; + 44BBBA76B13EEB94F9DCE170 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2984A5AD2129F6C671F00164 /* Pods_Runner.framework */; }; + 4E0858D90CA55751E7BE4898 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 39010BEDE01EF3B7F309CBE7 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -60,11 +62,14 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 2984A5AD2129F6C671F00164 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 2CF773F4C2430EAC834646B3 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; }; - 33CC10ED2044A3C60003C045 /* next_gen_ui.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "next_gen_ui.app"; sourceTree = BUILT_PRODUCTS_DIR; }; + 337BA55CC083EAE0C41E02E7 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 33CC10ED2044A3C60003C045 /* next_gen_ui.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = next_gen_ui.app; sourceTree = BUILT_PRODUCTS_DIR; }; 33CC10F02044A3C60003C045 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 33CC10F22044A3C60003C045 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = Runner/Assets.xcassets; sourceTree = ""; }; 33CC10F52044A3C60003C045 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = ""; }; @@ -73,11 +78,16 @@ 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Debug.xcconfig"; sourceTree = ""; }; 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Release.xcconfig"; sourceTree = ""; }; 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = "Flutter-Generated.xcconfig"; path = "ephemeral/Flutter-Generated.xcconfig"; sourceTree = ""; }; + 33D3C1661150E5CF9FD9C336 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; + 39010BEDE01EF3B7F309CBE7 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 6B406084562E7BBF7435D2FF /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; + 7FDC8102767980E531E73AC5 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; + A4F4B5072EE42AC6A44D036B /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -85,6 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 4E0858D90CA55751E7BE4898 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -92,12 +103,27 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 44BBBA76B13EEB94F9DCE170 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 1C1096D0206D3CBABCC06686 /* Pods */ = { + isa = PBXGroup; + children = ( + 2CF773F4C2430EAC834646B3 /* Pods-Runner.debug.xcconfig */, + 7FDC8102767980E531E73AC5 /* Pods-Runner.release.xcconfig */, + 6B406084562E7BBF7435D2FF /* Pods-Runner.profile.xcconfig */, + A4F4B5072EE42AC6A44D036B /* Pods-RunnerTests.debug.xcconfig */, + 33D3C1661150E5CF9FD9C336 /* Pods-RunnerTests.release.xcconfig */, + 337BA55CC083EAE0C41E02E7 /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; 331C80D6294CF71000263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -125,6 +151,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, + 1C1096D0206D3CBABCC06686 /* Pods */, ); sourceTree = ""; }; @@ -175,6 +202,8 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( + 2984A5AD2129F6C671F00164 /* Pods_Runner.framework */, + 39010BEDE01EF3B7F309CBE7 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -186,6 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( + FE0C7B1BBD5CA48F75CD6536 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -204,11 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( + BF702552288C4603E192F687 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, + 978AFB595B79A33D319A948F /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -329,6 +361,67 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; + 978AFB595B79A33D319A948F /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; + BF702552288C4603E192F687 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; + FE0C7B1BBD5CA48F75CD6536 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -380,6 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; + baseConfigurationReference = A4F4B5072EE42AC6A44D036B /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -394,6 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; + baseConfigurationReference = 33D3C1661150E5CF9FD9C336 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -408,6 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; + baseConfigurationReference = 337BA55CC083EAE0C41E02E7 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/next-gen-ui/step_04_c/macos/Runner.xcworkspace/contents.xcworkspacedata b/next-gen-ui/step_04_c/macos/Runner.xcworkspace/contents.xcworkspacedata index 1d526a16ed..21a3cc14c7 100644 --- a/next-gen-ui/step_04_c/macos/Runner.xcworkspace/contents.xcworkspacedata +++ b/next-gen-ui/step_04_c/macos/Runner.xcworkspace/contents.xcworkspacedata @@ -4,4 +4,7 @@ + + diff --git a/next-gen-ui/step_04_c/pubspec.yaml b/next-gen-ui/step_04_c/pubspec.yaml index 726dd46e9e..dd3eb24959 100644 --- a/next-gen-ui/step_04_c/pubspec.yaml +++ b/next-gen-ui/step_04_c/pubspec.yaml @@ -27,7 +27,7 @@ dependencies: dev_dependencies: flutter_test: sdk: flutter - flutter_lints: ^4.0.0 + flutter_lints: ^5.0.0 flutter: uses-material-design: true diff --git a/next-gen-ui/step_04_d/ios/Runner.xcodeproj/project.pbxproj b/next-gen-ui/step_04_d/ios/Runner.xcodeproj/project.pbxproj index 61751e92da..43b8398d4f 100644 --- a/next-gen-ui/step_04_d/ios/Runner.xcodeproj/project.pbxproj +++ b/next-gen-ui/step_04_d/ios/Runner.xcodeproj/project.pbxproj @@ -11,9 +11,11 @@ 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; + 95B86EC706B280ECBF05B340 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F29266F85C81E223DE38826F /* Pods_RunnerTests.framework */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; + E9B1620F2EF5AF6175681809 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DE20D8731F5AC68BA1712A5A /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -45,9 +47,12 @@ 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; + 531021BCFBF6DEA7A588EEFB /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 5C244634881A8C4BD75C5C03 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; + 8094A5C0BD3F742D973F4EBB /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -55,13 +60,27 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + D324E46E5A8253E05C3A901E /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + DC699C7AADC6A46B95166F6E /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + DE20D8731F5AC68BA1712A5A /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + F29266F85C81E223DE38826F /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + FFE5027C7AD199E12A7AF98E /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ + 344BA4708047A433A26140BD /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 95B86EC706B280ECBF05B340 /* Pods_RunnerTests.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 97C146EB1CF9000F007C117D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + E9B1620F2EF5AF6175681809 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -76,6 +95,20 @@ path = RunnerTests; sourceTree = ""; }; + 6655F551DEE09BD8E2ABAAD2 /* Pods */ = { + isa = PBXGroup; + children = ( + 8094A5C0BD3F742D973F4EBB /* Pods-Runner.debug.xcconfig */, + 5C244634881A8C4BD75C5C03 /* Pods-Runner.release.xcconfig */, + DC699C7AADC6A46B95166F6E /* Pods-Runner.profile.xcconfig */, + 531021BCFBF6DEA7A588EEFB /* Pods-RunnerTests.debug.xcconfig */, + FFE5027C7AD199E12A7AF98E /* Pods-RunnerTests.release.xcconfig */, + D324E46E5A8253E05C3A901E /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( @@ -94,6 +127,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, + 6655F551DEE09BD8E2ABAAD2 /* Pods */, + AB471AC81B5F3E3EAC08510D /* Frameworks */, ); sourceTree = ""; }; @@ -121,6 +156,15 @@ path = Runner; sourceTree = ""; }; + AB471AC81B5F3E3EAC08510D /* Frameworks */ = { + isa = PBXGroup; + children = ( + DE20D8731F5AC68BA1712A5A /* Pods_Runner.framework */, + F29266F85C81E223DE38826F /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -128,8 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( + C143E5EEC573FBD89B16A658 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, + 344BA4708047A433A26140BD /* Frameworks */, ); buildRules = ( ); @@ -145,6 +191,7 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( + 3AAEDA8BA83E71CC34259A37 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, @@ -222,6 +269,28 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ + 3AAEDA8BA83E71CC34259A37 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -253,6 +322,28 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; + C143E5EEC573FBD89B16A658 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -378,6 +469,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; + baseConfigurationReference = 531021BCFBF6DEA7A588EEFB /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -395,6 +487,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; + baseConfigurationReference = FFE5027C7AD199E12A7AF98E /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -410,6 +503,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; + baseConfigurationReference = D324E46E5A8253E05C3A901E /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/next-gen-ui/step_04_d/ios/Runner.xcworkspace/contents.xcworkspacedata b/next-gen-ui/step_04_d/ios/Runner.xcworkspace/contents.xcworkspacedata index 1d526a16ed..21a3cc14c7 100644 --- a/next-gen-ui/step_04_d/ios/Runner.xcworkspace/contents.xcworkspacedata +++ b/next-gen-ui/step_04_d/ios/Runner.xcworkspace/contents.xcworkspacedata @@ -4,4 +4,7 @@ + + diff --git a/next-gen-ui/step_04_d/lib/orb_shader/orb_shader_painter.dart b/next-gen-ui/step_04_d/lib/orb_shader/orb_shader_painter.dart index 50213545d9..399c20ab7e 100644 --- a/next-gen-ui/step_04_d/lib/orb_shader/orb_shader_painter.dart +++ b/next-gen-ui/step_04_d/lib/orb_shader/orb_shader_painter.dart @@ -28,13 +28,7 @@ class OrbShaderPainter extends CustomPainter { void paint(Canvas canvas, Size size) { double fov = v64.mix(pi / 4.3, pi / 2.0, config.zoom.clamp(0.0, 1.0)); - v64.Vector3 colorToVector3(Color c) => - v64.Vector3( - c.red.toDouble(), - c.green.toDouble(), - c.blue.toDouble(), - ) / - 255.0; + v64.Vector3 colorToVector3(Color c) => v64.Vector3(c.r, c.g, c.b); v64.Vector3 lightLumP = colorToVector3(config.lightColor).normalized() * max(0.0, config.lightBrightness); diff --git a/next-gen-ui/step_04_d/macos/Runner.xcodeproj/project.pbxproj b/next-gen-ui/step_04_d/macos/Runner.xcodeproj/project.pbxproj index 9c11821227..a260461a61 100644 --- a/next-gen-ui/step_04_d/macos/Runner.xcodeproj/project.pbxproj +++ b/next-gen-ui/step_04_d/macos/Runner.xcodeproj/project.pbxproj @@ -27,6 +27,8 @@ 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; + 44BBBA76B13EEB94F9DCE170 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2984A5AD2129F6C671F00164 /* Pods_Runner.framework */; }; + 4E0858D90CA55751E7BE4898 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 39010BEDE01EF3B7F309CBE7 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -60,11 +62,14 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 2984A5AD2129F6C671F00164 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 2CF773F4C2430EAC834646B3 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; }; - 33CC10ED2044A3C60003C045 /* next_gen_ui.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "next_gen_ui.app"; sourceTree = BUILT_PRODUCTS_DIR; }; + 337BA55CC083EAE0C41E02E7 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 33CC10ED2044A3C60003C045 /* next_gen_ui.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = next_gen_ui.app; sourceTree = BUILT_PRODUCTS_DIR; }; 33CC10F02044A3C60003C045 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 33CC10F22044A3C60003C045 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = Runner/Assets.xcassets; sourceTree = ""; }; 33CC10F52044A3C60003C045 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = ""; }; @@ -73,11 +78,16 @@ 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Debug.xcconfig"; sourceTree = ""; }; 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Release.xcconfig"; sourceTree = ""; }; 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = "Flutter-Generated.xcconfig"; path = "ephemeral/Flutter-Generated.xcconfig"; sourceTree = ""; }; + 33D3C1661150E5CF9FD9C336 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; + 39010BEDE01EF3B7F309CBE7 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 6B406084562E7BBF7435D2FF /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; + 7FDC8102767980E531E73AC5 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; + A4F4B5072EE42AC6A44D036B /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -85,6 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 4E0858D90CA55751E7BE4898 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -92,12 +103,27 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 44BBBA76B13EEB94F9DCE170 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 1C1096D0206D3CBABCC06686 /* Pods */ = { + isa = PBXGroup; + children = ( + 2CF773F4C2430EAC834646B3 /* Pods-Runner.debug.xcconfig */, + 7FDC8102767980E531E73AC5 /* Pods-Runner.release.xcconfig */, + 6B406084562E7BBF7435D2FF /* Pods-Runner.profile.xcconfig */, + A4F4B5072EE42AC6A44D036B /* Pods-RunnerTests.debug.xcconfig */, + 33D3C1661150E5CF9FD9C336 /* Pods-RunnerTests.release.xcconfig */, + 337BA55CC083EAE0C41E02E7 /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; 331C80D6294CF71000263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -125,6 +151,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, + 1C1096D0206D3CBABCC06686 /* Pods */, ); sourceTree = ""; }; @@ -175,6 +202,8 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( + 2984A5AD2129F6C671F00164 /* Pods_Runner.framework */, + 39010BEDE01EF3B7F309CBE7 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -186,6 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( + FE0C7B1BBD5CA48F75CD6536 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -204,11 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( + BF702552288C4603E192F687 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, + 978AFB595B79A33D319A948F /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -329,6 +361,67 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; + 978AFB595B79A33D319A948F /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; + BF702552288C4603E192F687 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; + FE0C7B1BBD5CA48F75CD6536 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -380,6 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; + baseConfigurationReference = A4F4B5072EE42AC6A44D036B /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -394,6 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; + baseConfigurationReference = 33D3C1661150E5CF9FD9C336 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -408,6 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; + baseConfigurationReference = 337BA55CC083EAE0C41E02E7 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/next-gen-ui/step_04_d/macos/Runner.xcworkspace/contents.xcworkspacedata b/next-gen-ui/step_04_d/macos/Runner.xcworkspace/contents.xcworkspacedata index 1d526a16ed..21a3cc14c7 100644 --- a/next-gen-ui/step_04_d/macos/Runner.xcworkspace/contents.xcworkspacedata +++ b/next-gen-ui/step_04_d/macos/Runner.xcworkspace/contents.xcworkspacedata @@ -4,4 +4,7 @@ + + diff --git a/next-gen-ui/step_04_d/pubspec.yaml b/next-gen-ui/step_04_d/pubspec.yaml index 726dd46e9e..dd3eb24959 100644 --- a/next-gen-ui/step_04_d/pubspec.yaml +++ b/next-gen-ui/step_04_d/pubspec.yaml @@ -27,7 +27,7 @@ dependencies: dev_dependencies: flutter_test: sdk: flutter - flutter_lints: ^4.0.0 + flutter_lints: ^5.0.0 flutter: uses-material-design: true diff --git a/next-gen-ui/step_04_e/ios/Runner.xcodeproj/project.pbxproj b/next-gen-ui/step_04_e/ios/Runner.xcodeproj/project.pbxproj index 61751e92da..43b8398d4f 100644 --- a/next-gen-ui/step_04_e/ios/Runner.xcodeproj/project.pbxproj +++ b/next-gen-ui/step_04_e/ios/Runner.xcodeproj/project.pbxproj @@ -11,9 +11,11 @@ 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; + 95B86EC706B280ECBF05B340 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F29266F85C81E223DE38826F /* Pods_RunnerTests.framework */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; + E9B1620F2EF5AF6175681809 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DE20D8731F5AC68BA1712A5A /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -45,9 +47,12 @@ 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; + 531021BCFBF6DEA7A588EEFB /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 5C244634881A8C4BD75C5C03 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; + 8094A5C0BD3F742D973F4EBB /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -55,13 +60,27 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + D324E46E5A8253E05C3A901E /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + DC699C7AADC6A46B95166F6E /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + DE20D8731F5AC68BA1712A5A /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + F29266F85C81E223DE38826F /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + FFE5027C7AD199E12A7AF98E /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ + 344BA4708047A433A26140BD /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 95B86EC706B280ECBF05B340 /* Pods_RunnerTests.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 97C146EB1CF9000F007C117D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + E9B1620F2EF5AF6175681809 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -76,6 +95,20 @@ path = RunnerTests; sourceTree = ""; }; + 6655F551DEE09BD8E2ABAAD2 /* Pods */ = { + isa = PBXGroup; + children = ( + 8094A5C0BD3F742D973F4EBB /* Pods-Runner.debug.xcconfig */, + 5C244634881A8C4BD75C5C03 /* Pods-Runner.release.xcconfig */, + DC699C7AADC6A46B95166F6E /* Pods-Runner.profile.xcconfig */, + 531021BCFBF6DEA7A588EEFB /* Pods-RunnerTests.debug.xcconfig */, + FFE5027C7AD199E12A7AF98E /* Pods-RunnerTests.release.xcconfig */, + D324E46E5A8253E05C3A901E /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( @@ -94,6 +127,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, + 6655F551DEE09BD8E2ABAAD2 /* Pods */, + AB471AC81B5F3E3EAC08510D /* Frameworks */, ); sourceTree = ""; }; @@ -121,6 +156,15 @@ path = Runner; sourceTree = ""; }; + AB471AC81B5F3E3EAC08510D /* Frameworks */ = { + isa = PBXGroup; + children = ( + DE20D8731F5AC68BA1712A5A /* Pods_Runner.framework */, + F29266F85C81E223DE38826F /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -128,8 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( + C143E5EEC573FBD89B16A658 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, + 344BA4708047A433A26140BD /* Frameworks */, ); buildRules = ( ); @@ -145,6 +191,7 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( + 3AAEDA8BA83E71CC34259A37 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, @@ -222,6 +269,28 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ + 3AAEDA8BA83E71CC34259A37 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -253,6 +322,28 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; + C143E5EEC573FBD89B16A658 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -378,6 +469,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; + baseConfigurationReference = 531021BCFBF6DEA7A588EEFB /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -395,6 +487,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; + baseConfigurationReference = FFE5027C7AD199E12A7AF98E /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -410,6 +503,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; + baseConfigurationReference = D324E46E5A8253E05C3A901E /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/next-gen-ui/step_04_e/ios/Runner.xcworkspace/contents.xcworkspacedata b/next-gen-ui/step_04_e/ios/Runner.xcworkspace/contents.xcworkspacedata index 1d526a16ed..21a3cc14c7 100644 --- a/next-gen-ui/step_04_e/ios/Runner.xcworkspace/contents.xcworkspacedata +++ b/next-gen-ui/step_04_e/ios/Runner.xcworkspace/contents.xcworkspacedata @@ -4,4 +4,7 @@ + + diff --git a/next-gen-ui/step_04_e/lib/orb_shader/orb_shader_painter.dart b/next-gen-ui/step_04_e/lib/orb_shader/orb_shader_painter.dart index 50213545d9..399c20ab7e 100644 --- a/next-gen-ui/step_04_e/lib/orb_shader/orb_shader_painter.dart +++ b/next-gen-ui/step_04_e/lib/orb_shader/orb_shader_painter.dart @@ -28,13 +28,7 @@ class OrbShaderPainter extends CustomPainter { void paint(Canvas canvas, Size size) { double fov = v64.mix(pi / 4.3, pi / 2.0, config.zoom.clamp(0.0, 1.0)); - v64.Vector3 colorToVector3(Color c) => - v64.Vector3( - c.red.toDouble(), - c.green.toDouble(), - c.blue.toDouble(), - ) / - 255.0; + v64.Vector3 colorToVector3(Color c) => v64.Vector3(c.r, c.g, c.b); v64.Vector3 lightLumP = colorToVector3(config.lightColor).normalized() * max(0.0, config.lightBrightness); diff --git a/next-gen-ui/step_04_e/macos/Runner.xcodeproj/project.pbxproj b/next-gen-ui/step_04_e/macos/Runner.xcodeproj/project.pbxproj index 9c11821227..a260461a61 100644 --- a/next-gen-ui/step_04_e/macos/Runner.xcodeproj/project.pbxproj +++ b/next-gen-ui/step_04_e/macos/Runner.xcodeproj/project.pbxproj @@ -27,6 +27,8 @@ 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; + 44BBBA76B13EEB94F9DCE170 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2984A5AD2129F6C671F00164 /* Pods_Runner.framework */; }; + 4E0858D90CA55751E7BE4898 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 39010BEDE01EF3B7F309CBE7 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -60,11 +62,14 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 2984A5AD2129F6C671F00164 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 2CF773F4C2430EAC834646B3 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; }; - 33CC10ED2044A3C60003C045 /* next_gen_ui.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "next_gen_ui.app"; sourceTree = BUILT_PRODUCTS_DIR; }; + 337BA55CC083EAE0C41E02E7 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 33CC10ED2044A3C60003C045 /* next_gen_ui.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = next_gen_ui.app; sourceTree = BUILT_PRODUCTS_DIR; }; 33CC10F02044A3C60003C045 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 33CC10F22044A3C60003C045 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = Runner/Assets.xcassets; sourceTree = ""; }; 33CC10F52044A3C60003C045 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = ""; }; @@ -73,11 +78,16 @@ 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Debug.xcconfig"; sourceTree = ""; }; 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Release.xcconfig"; sourceTree = ""; }; 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = "Flutter-Generated.xcconfig"; path = "ephemeral/Flutter-Generated.xcconfig"; sourceTree = ""; }; + 33D3C1661150E5CF9FD9C336 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; + 39010BEDE01EF3B7F309CBE7 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 6B406084562E7BBF7435D2FF /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; + 7FDC8102767980E531E73AC5 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; + A4F4B5072EE42AC6A44D036B /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -85,6 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 4E0858D90CA55751E7BE4898 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -92,12 +103,27 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 44BBBA76B13EEB94F9DCE170 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 1C1096D0206D3CBABCC06686 /* Pods */ = { + isa = PBXGroup; + children = ( + 2CF773F4C2430EAC834646B3 /* Pods-Runner.debug.xcconfig */, + 7FDC8102767980E531E73AC5 /* Pods-Runner.release.xcconfig */, + 6B406084562E7BBF7435D2FF /* Pods-Runner.profile.xcconfig */, + A4F4B5072EE42AC6A44D036B /* Pods-RunnerTests.debug.xcconfig */, + 33D3C1661150E5CF9FD9C336 /* Pods-RunnerTests.release.xcconfig */, + 337BA55CC083EAE0C41E02E7 /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; 331C80D6294CF71000263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -125,6 +151,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, + 1C1096D0206D3CBABCC06686 /* Pods */, ); sourceTree = ""; }; @@ -175,6 +202,8 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( + 2984A5AD2129F6C671F00164 /* Pods_Runner.framework */, + 39010BEDE01EF3B7F309CBE7 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -186,6 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( + FE0C7B1BBD5CA48F75CD6536 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -204,11 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( + BF702552288C4603E192F687 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, + 978AFB595B79A33D319A948F /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -329,6 +361,67 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; + 978AFB595B79A33D319A948F /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; + BF702552288C4603E192F687 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; + FE0C7B1BBD5CA48F75CD6536 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -380,6 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; + baseConfigurationReference = A4F4B5072EE42AC6A44D036B /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -394,6 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; + baseConfigurationReference = 33D3C1661150E5CF9FD9C336 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -408,6 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; + baseConfigurationReference = 337BA55CC083EAE0C41E02E7 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/next-gen-ui/step_04_e/macos/Runner.xcworkspace/contents.xcworkspacedata b/next-gen-ui/step_04_e/macos/Runner.xcworkspace/contents.xcworkspacedata index 1d526a16ed..21a3cc14c7 100644 --- a/next-gen-ui/step_04_e/macos/Runner.xcworkspace/contents.xcworkspacedata +++ b/next-gen-ui/step_04_e/macos/Runner.xcworkspace/contents.xcworkspacedata @@ -4,4 +4,7 @@ + + diff --git a/next-gen-ui/step_04_e/pubspec.yaml b/next-gen-ui/step_04_e/pubspec.yaml index 726dd46e9e..dd3eb24959 100644 --- a/next-gen-ui/step_04_e/pubspec.yaml +++ b/next-gen-ui/step_04_e/pubspec.yaml @@ -27,7 +27,7 @@ dependencies: dev_dependencies: flutter_test: sdk: flutter - flutter_lints: ^4.0.0 + flutter_lints: ^5.0.0 flutter: uses-material-design: true diff --git a/next-gen-ui/step_05_a/ios/Runner.xcodeproj/project.pbxproj b/next-gen-ui/step_05_a/ios/Runner.xcodeproj/project.pbxproj index 61751e92da..43b8398d4f 100644 --- a/next-gen-ui/step_05_a/ios/Runner.xcodeproj/project.pbxproj +++ b/next-gen-ui/step_05_a/ios/Runner.xcodeproj/project.pbxproj @@ -11,9 +11,11 @@ 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; + 95B86EC706B280ECBF05B340 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F29266F85C81E223DE38826F /* Pods_RunnerTests.framework */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; + E9B1620F2EF5AF6175681809 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DE20D8731F5AC68BA1712A5A /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -45,9 +47,12 @@ 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; + 531021BCFBF6DEA7A588EEFB /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 5C244634881A8C4BD75C5C03 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; + 8094A5C0BD3F742D973F4EBB /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -55,13 +60,27 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + D324E46E5A8253E05C3A901E /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + DC699C7AADC6A46B95166F6E /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + DE20D8731F5AC68BA1712A5A /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + F29266F85C81E223DE38826F /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + FFE5027C7AD199E12A7AF98E /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ + 344BA4708047A433A26140BD /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 95B86EC706B280ECBF05B340 /* Pods_RunnerTests.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 97C146EB1CF9000F007C117D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + E9B1620F2EF5AF6175681809 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -76,6 +95,20 @@ path = RunnerTests; sourceTree = ""; }; + 6655F551DEE09BD8E2ABAAD2 /* Pods */ = { + isa = PBXGroup; + children = ( + 8094A5C0BD3F742D973F4EBB /* Pods-Runner.debug.xcconfig */, + 5C244634881A8C4BD75C5C03 /* Pods-Runner.release.xcconfig */, + DC699C7AADC6A46B95166F6E /* Pods-Runner.profile.xcconfig */, + 531021BCFBF6DEA7A588EEFB /* Pods-RunnerTests.debug.xcconfig */, + FFE5027C7AD199E12A7AF98E /* Pods-RunnerTests.release.xcconfig */, + D324E46E5A8253E05C3A901E /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( @@ -94,6 +127,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, + 6655F551DEE09BD8E2ABAAD2 /* Pods */, + AB471AC81B5F3E3EAC08510D /* Frameworks */, ); sourceTree = ""; }; @@ -121,6 +156,15 @@ path = Runner; sourceTree = ""; }; + AB471AC81B5F3E3EAC08510D /* Frameworks */ = { + isa = PBXGroup; + children = ( + DE20D8731F5AC68BA1712A5A /* Pods_Runner.framework */, + F29266F85C81E223DE38826F /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -128,8 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( + C143E5EEC573FBD89B16A658 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, + 344BA4708047A433A26140BD /* Frameworks */, ); buildRules = ( ); @@ -145,6 +191,7 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( + 3AAEDA8BA83E71CC34259A37 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, @@ -222,6 +269,28 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ + 3AAEDA8BA83E71CC34259A37 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -253,6 +322,28 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; + C143E5EEC573FBD89B16A658 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -378,6 +469,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; + baseConfigurationReference = 531021BCFBF6DEA7A588EEFB /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -395,6 +487,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; + baseConfigurationReference = FFE5027C7AD199E12A7AF98E /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -410,6 +503,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; + baseConfigurationReference = D324E46E5A8253E05C3A901E /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/next-gen-ui/step_05_a/ios/Runner.xcworkspace/contents.xcworkspacedata b/next-gen-ui/step_05_a/ios/Runner.xcworkspace/contents.xcworkspacedata index 1d526a16ed..21a3cc14c7 100644 --- a/next-gen-ui/step_05_a/ios/Runner.xcworkspace/contents.xcworkspacedata +++ b/next-gen-ui/step_05_a/ios/Runner.xcworkspace/contents.xcworkspacedata @@ -4,4 +4,7 @@ + + diff --git a/next-gen-ui/step_05_a/lib/orb_shader/orb_shader_painter.dart b/next-gen-ui/step_05_a/lib/orb_shader/orb_shader_painter.dart index 50213545d9..399c20ab7e 100644 --- a/next-gen-ui/step_05_a/lib/orb_shader/orb_shader_painter.dart +++ b/next-gen-ui/step_05_a/lib/orb_shader/orb_shader_painter.dart @@ -28,13 +28,7 @@ class OrbShaderPainter extends CustomPainter { void paint(Canvas canvas, Size size) { double fov = v64.mix(pi / 4.3, pi / 2.0, config.zoom.clamp(0.0, 1.0)); - v64.Vector3 colorToVector3(Color c) => - v64.Vector3( - c.red.toDouble(), - c.green.toDouble(), - c.blue.toDouble(), - ) / - 255.0; + v64.Vector3 colorToVector3(Color c) => v64.Vector3(c.r, c.g, c.b); v64.Vector3 lightLumP = colorToVector3(config.lightColor).normalized() * max(0.0, config.lightBrightness); diff --git a/next-gen-ui/step_05_a/macos/Runner.xcodeproj/project.pbxproj b/next-gen-ui/step_05_a/macos/Runner.xcodeproj/project.pbxproj index 9c11821227..a260461a61 100644 --- a/next-gen-ui/step_05_a/macos/Runner.xcodeproj/project.pbxproj +++ b/next-gen-ui/step_05_a/macos/Runner.xcodeproj/project.pbxproj @@ -27,6 +27,8 @@ 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; + 44BBBA76B13EEB94F9DCE170 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2984A5AD2129F6C671F00164 /* Pods_Runner.framework */; }; + 4E0858D90CA55751E7BE4898 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 39010BEDE01EF3B7F309CBE7 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -60,11 +62,14 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 2984A5AD2129F6C671F00164 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 2CF773F4C2430EAC834646B3 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; }; - 33CC10ED2044A3C60003C045 /* next_gen_ui.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "next_gen_ui.app"; sourceTree = BUILT_PRODUCTS_DIR; }; + 337BA55CC083EAE0C41E02E7 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 33CC10ED2044A3C60003C045 /* next_gen_ui.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = next_gen_ui.app; sourceTree = BUILT_PRODUCTS_DIR; }; 33CC10F02044A3C60003C045 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 33CC10F22044A3C60003C045 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = Runner/Assets.xcassets; sourceTree = ""; }; 33CC10F52044A3C60003C045 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = ""; }; @@ -73,11 +78,16 @@ 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Debug.xcconfig"; sourceTree = ""; }; 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Release.xcconfig"; sourceTree = ""; }; 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = "Flutter-Generated.xcconfig"; path = "ephemeral/Flutter-Generated.xcconfig"; sourceTree = ""; }; + 33D3C1661150E5CF9FD9C336 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; + 39010BEDE01EF3B7F309CBE7 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 6B406084562E7BBF7435D2FF /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; + 7FDC8102767980E531E73AC5 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; + A4F4B5072EE42AC6A44D036B /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -85,6 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 4E0858D90CA55751E7BE4898 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -92,12 +103,27 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 44BBBA76B13EEB94F9DCE170 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 1C1096D0206D3CBABCC06686 /* Pods */ = { + isa = PBXGroup; + children = ( + 2CF773F4C2430EAC834646B3 /* Pods-Runner.debug.xcconfig */, + 7FDC8102767980E531E73AC5 /* Pods-Runner.release.xcconfig */, + 6B406084562E7BBF7435D2FF /* Pods-Runner.profile.xcconfig */, + A4F4B5072EE42AC6A44D036B /* Pods-RunnerTests.debug.xcconfig */, + 33D3C1661150E5CF9FD9C336 /* Pods-RunnerTests.release.xcconfig */, + 337BA55CC083EAE0C41E02E7 /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; 331C80D6294CF71000263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -125,6 +151,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, + 1C1096D0206D3CBABCC06686 /* Pods */, ); sourceTree = ""; }; @@ -175,6 +202,8 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( + 2984A5AD2129F6C671F00164 /* Pods_Runner.framework */, + 39010BEDE01EF3B7F309CBE7 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -186,6 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( + FE0C7B1BBD5CA48F75CD6536 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -204,11 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( + BF702552288C4603E192F687 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, + 978AFB595B79A33D319A948F /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -329,6 +361,67 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; + 978AFB595B79A33D319A948F /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; + BF702552288C4603E192F687 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; + FE0C7B1BBD5CA48F75CD6536 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -380,6 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; + baseConfigurationReference = A4F4B5072EE42AC6A44D036B /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -394,6 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; + baseConfigurationReference = 33D3C1661150E5CF9FD9C336 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -408,6 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; + baseConfigurationReference = 337BA55CC083EAE0C41E02E7 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/next-gen-ui/step_05_a/macos/Runner.xcworkspace/contents.xcworkspacedata b/next-gen-ui/step_05_a/macos/Runner.xcworkspace/contents.xcworkspacedata index 1d526a16ed..21a3cc14c7 100644 --- a/next-gen-ui/step_05_a/macos/Runner.xcworkspace/contents.xcworkspacedata +++ b/next-gen-ui/step_05_a/macos/Runner.xcworkspace/contents.xcworkspacedata @@ -4,4 +4,7 @@ + + diff --git a/next-gen-ui/step_05_a/pubspec.yaml b/next-gen-ui/step_05_a/pubspec.yaml index 726dd46e9e..dd3eb24959 100644 --- a/next-gen-ui/step_05_a/pubspec.yaml +++ b/next-gen-ui/step_05_a/pubspec.yaml @@ -27,7 +27,7 @@ dependencies: dev_dependencies: flutter_test: sdk: flutter - flutter_lints: ^4.0.0 + flutter_lints: ^5.0.0 flutter: uses-material-design: true diff --git a/next-gen-ui/step_05_b/ios/Runner.xcodeproj/project.pbxproj b/next-gen-ui/step_05_b/ios/Runner.xcodeproj/project.pbxproj index 61751e92da..43b8398d4f 100644 --- a/next-gen-ui/step_05_b/ios/Runner.xcodeproj/project.pbxproj +++ b/next-gen-ui/step_05_b/ios/Runner.xcodeproj/project.pbxproj @@ -11,9 +11,11 @@ 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; + 95B86EC706B280ECBF05B340 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F29266F85C81E223DE38826F /* Pods_RunnerTests.framework */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; + E9B1620F2EF5AF6175681809 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DE20D8731F5AC68BA1712A5A /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -45,9 +47,12 @@ 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; + 531021BCFBF6DEA7A588EEFB /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 5C244634881A8C4BD75C5C03 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; + 8094A5C0BD3F742D973F4EBB /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -55,13 +60,27 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + D324E46E5A8253E05C3A901E /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + DC699C7AADC6A46B95166F6E /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + DE20D8731F5AC68BA1712A5A /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + F29266F85C81E223DE38826F /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + FFE5027C7AD199E12A7AF98E /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ + 344BA4708047A433A26140BD /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 95B86EC706B280ECBF05B340 /* Pods_RunnerTests.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 97C146EB1CF9000F007C117D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + E9B1620F2EF5AF6175681809 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -76,6 +95,20 @@ path = RunnerTests; sourceTree = ""; }; + 6655F551DEE09BD8E2ABAAD2 /* Pods */ = { + isa = PBXGroup; + children = ( + 8094A5C0BD3F742D973F4EBB /* Pods-Runner.debug.xcconfig */, + 5C244634881A8C4BD75C5C03 /* Pods-Runner.release.xcconfig */, + DC699C7AADC6A46B95166F6E /* Pods-Runner.profile.xcconfig */, + 531021BCFBF6DEA7A588EEFB /* Pods-RunnerTests.debug.xcconfig */, + FFE5027C7AD199E12A7AF98E /* Pods-RunnerTests.release.xcconfig */, + D324E46E5A8253E05C3A901E /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( @@ -94,6 +127,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, + 6655F551DEE09BD8E2ABAAD2 /* Pods */, + AB471AC81B5F3E3EAC08510D /* Frameworks */, ); sourceTree = ""; }; @@ -121,6 +156,15 @@ path = Runner; sourceTree = ""; }; + AB471AC81B5F3E3EAC08510D /* Frameworks */ = { + isa = PBXGroup; + children = ( + DE20D8731F5AC68BA1712A5A /* Pods_Runner.framework */, + F29266F85C81E223DE38826F /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -128,8 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( + C143E5EEC573FBD89B16A658 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, + 344BA4708047A433A26140BD /* Frameworks */, ); buildRules = ( ); @@ -145,6 +191,7 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( + 3AAEDA8BA83E71CC34259A37 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, @@ -222,6 +269,28 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ + 3AAEDA8BA83E71CC34259A37 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -253,6 +322,28 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; + C143E5EEC573FBD89B16A658 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -378,6 +469,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; + baseConfigurationReference = 531021BCFBF6DEA7A588EEFB /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -395,6 +487,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; + baseConfigurationReference = FFE5027C7AD199E12A7AF98E /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -410,6 +503,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; + baseConfigurationReference = D324E46E5A8253E05C3A901E /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/next-gen-ui/step_05_b/ios/Runner.xcworkspace/contents.xcworkspacedata b/next-gen-ui/step_05_b/ios/Runner.xcworkspace/contents.xcworkspacedata index 1d526a16ed..21a3cc14c7 100644 --- a/next-gen-ui/step_05_b/ios/Runner.xcworkspace/contents.xcworkspacedata +++ b/next-gen-ui/step_05_b/ios/Runner.xcworkspace/contents.xcworkspacedata @@ -4,4 +4,7 @@ + + diff --git a/next-gen-ui/step_05_b/lib/orb_shader/orb_shader_painter.dart b/next-gen-ui/step_05_b/lib/orb_shader/orb_shader_painter.dart index 50213545d9..399c20ab7e 100644 --- a/next-gen-ui/step_05_b/lib/orb_shader/orb_shader_painter.dart +++ b/next-gen-ui/step_05_b/lib/orb_shader/orb_shader_painter.dart @@ -28,13 +28,7 @@ class OrbShaderPainter extends CustomPainter { void paint(Canvas canvas, Size size) { double fov = v64.mix(pi / 4.3, pi / 2.0, config.zoom.clamp(0.0, 1.0)); - v64.Vector3 colorToVector3(Color c) => - v64.Vector3( - c.red.toDouble(), - c.green.toDouble(), - c.blue.toDouble(), - ) / - 255.0; + v64.Vector3 colorToVector3(Color c) => v64.Vector3(c.r, c.g, c.b); v64.Vector3 lightLumP = colorToVector3(config.lightColor).normalized() * max(0.0, config.lightBrightness); diff --git a/next-gen-ui/step_05_b/macos/Runner.xcodeproj/project.pbxproj b/next-gen-ui/step_05_b/macos/Runner.xcodeproj/project.pbxproj index 9c11821227..a260461a61 100644 --- a/next-gen-ui/step_05_b/macos/Runner.xcodeproj/project.pbxproj +++ b/next-gen-ui/step_05_b/macos/Runner.xcodeproj/project.pbxproj @@ -27,6 +27,8 @@ 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; + 44BBBA76B13EEB94F9DCE170 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2984A5AD2129F6C671F00164 /* Pods_Runner.framework */; }; + 4E0858D90CA55751E7BE4898 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 39010BEDE01EF3B7F309CBE7 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -60,11 +62,14 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 2984A5AD2129F6C671F00164 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 2CF773F4C2430EAC834646B3 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; }; - 33CC10ED2044A3C60003C045 /* next_gen_ui.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "next_gen_ui.app"; sourceTree = BUILT_PRODUCTS_DIR; }; + 337BA55CC083EAE0C41E02E7 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 33CC10ED2044A3C60003C045 /* next_gen_ui.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = next_gen_ui.app; sourceTree = BUILT_PRODUCTS_DIR; }; 33CC10F02044A3C60003C045 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 33CC10F22044A3C60003C045 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = Runner/Assets.xcassets; sourceTree = ""; }; 33CC10F52044A3C60003C045 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = ""; }; @@ -73,11 +78,16 @@ 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Debug.xcconfig"; sourceTree = ""; }; 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Release.xcconfig"; sourceTree = ""; }; 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = "Flutter-Generated.xcconfig"; path = "ephemeral/Flutter-Generated.xcconfig"; sourceTree = ""; }; + 33D3C1661150E5CF9FD9C336 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; + 39010BEDE01EF3B7F309CBE7 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 6B406084562E7BBF7435D2FF /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; + 7FDC8102767980E531E73AC5 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; + A4F4B5072EE42AC6A44D036B /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -85,6 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 4E0858D90CA55751E7BE4898 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -92,12 +103,27 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 44BBBA76B13EEB94F9DCE170 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 1C1096D0206D3CBABCC06686 /* Pods */ = { + isa = PBXGroup; + children = ( + 2CF773F4C2430EAC834646B3 /* Pods-Runner.debug.xcconfig */, + 7FDC8102767980E531E73AC5 /* Pods-Runner.release.xcconfig */, + 6B406084562E7BBF7435D2FF /* Pods-Runner.profile.xcconfig */, + A4F4B5072EE42AC6A44D036B /* Pods-RunnerTests.debug.xcconfig */, + 33D3C1661150E5CF9FD9C336 /* Pods-RunnerTests.release.xcconfig */, + 337BA55CC083EAE0C41E02E7 /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; 331C80D6294CF71000263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -125,6 +151,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, + 1C1096D0206D3CBABCC06686 /* Pods */, ); sourceTree = ""; }; @@ -175,6 +202,8 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( + 2984A5AD2129F6C671F00164 /* Pods_Runner.framework */, + 39010BEDE01EF3B7F309CBE7 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -186,6 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( + FE0C7B1BBD5CA48F75CD6536 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -204,11 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( + BF702552288C4603E192F687 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, + 978AFB595B79A33D319A948F /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -329,6 +361,67 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; + 978AFB595B79A33D319A948F /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; + BF702552288C4603E192F687 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; + FE0C7B1BBD5CA48F75CD6536 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -380,6 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; + baseConfigurationReference = A4F4B5072EE42AC6A44D036B /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -394,6 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; + baseConfigurationReference = 33D3C1661150E5CF9FD9C336 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -408,6 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; + baseConfigurationReference = 337BA55CC083EAE0C41E02E7 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/next-gen-ui/step_05_b/macos/Runner.xcworkspace/contents.xcworkspacedata b/next-gen-ui/step_05_b/macos/Runner.xcworkspace/contents.xcworkspacedata index 1d526a16ed..21a3cc14c7 100644 --- a/next-gen-ui/step_05_b/macos/Runner.xcworkspace/contents.xcworkspacedata +++ b/next-gen-ui/step_05_b/macos/Runner.xcworkspace/contents.xcworkspacedata @@ -4,4 +4,7 @@ + + diff --git a/next-gen-ui/step_05_b/pubspec.yaml b/next-gen-ui/step_05_b/pubspec.yaml index 726dd46e9e..dd3eb24959 100644 --- a/next-gen-ui/step_05_b/pubspec.yaml +++ b/next-gen-ui/step_05_b/pubspec.yaml @@ -27,7 +27,7 @@ dependencies: dev_dependencies: flutter_test: sdk: flutter - flutter_lints: ^4.0.0 + flutter_lints: ^5.0.0 flutter: uses-material-design: true diff --git a/next-gen-ui/step_06/ios/Runner.xcodeproj/project.pbxproj b/next-gen-ui/step_06/ios/Runner.xcodeproj/project.pbxproj index 61751e92da..43b8398d4f 100644 --- a/next-gen-ui/step_06/ios/Runner.xcodeproj/project.pbxproj +++ b/next-gen-ui/step_06/ios/Runner.xcodeproj/project.pbxproj @@ -11,9 +11,11 @@ 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; + 95B86EC706B280ECBF05B340 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F29266F85C81E223DE38826F /* Pods_RunnerTests.framework */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; + E9B1620F2EF5AF6175681809 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DE20D8731F5AC68BA1712A5A /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -45,9 +47,12 @@ 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; + 531021BCFBF6DEA7A588EEFB /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 5C244634881A8C4BD75C5C03 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; + 8094A5C0BD3F742D973F4EBB /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -55,13 +60,27 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + D324E46E5A8253E05C3A901E /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + DC699C7AADC6A46B95166F6E /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + DE20D8731F5AC68BA1712A5A /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + F29266F85C81E223DE38826F /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + FFE5027C7AD199E12A7AF98E /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ + 344BA4708047A433A26140BD /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 95B86EC706B280ECBF05B340 /* Pods_RunnerTests.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 97C146EB1CF9000F007C117D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + E9B1620F2EF5AF6175681809 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -76,6 +95,20 @@ path = RunnerTests; sourceTree = ""; }; + 6655F551DEE09BD8E2ABAAD2 /* Pods */ = { + isa = PBXGroup; + children = ( + 8094A5C0BD3F742D973F4EBB /* Pods-Runner.debug.xcconfig */, + 5C244634881A8C4BD75C5C03 /* Pods-Runner.release.xcconfig */, + DC699C7AADC6A46B95166F6E /* Pods-Runner.profile.xcconfig */, + 531021BCFBF6DEA7A588EEFB /* Pods-RunnerTests.debug.xcconfig */, + FFE5027C7AD199E12A7AF98E /* Pods-RunnerTests.release.xcconfig */, + D324E46E5A8253E05C3A901E /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( @@ -94,6 +127,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, + 6655F551DEE09BD8E2ABAAD2 /* Pods */, + AB471AC81B5F3E3EAC08510D /* Frameworks */, ); sourceTree = ""; }; @@ -121,6 +156,15 @@ path = Runner; sourceTree = ""; }; + AB471AC81B5F3E3EAC08510D /* Frameworks */ = { + isa = PBXGroup; + children = ( + DE20D8731F5AC68BA1712A5A /* Pods_Runner.framework */, + F29266F85C81E223DE38826F /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -128,8 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( + C143E5EEC573FBD89B16A658 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, + 344BA4708047A433A26140BD /* Frameworks */, ); buildRules = ( ); @@ -145,6 +191,7 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( + 3AAEDA8BA83E71CC34259A37 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, @@ -222,6 +269,28 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ + 3AAEDA8BA83E71CC34259A37 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -253,6 +322,28 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; + C143E5EEC573FBD89B16A658 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -378,6 +469,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; + baseConfigurationReference = 531021BCFBF6DEA7A588EEFB /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -395,6 +487,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; + baseConfigurationReference = FFE5027C7AD199E12A7AF98E /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -410,6 +503,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; + baseConfigurationReference = D324E46E5A8253E05C3A901E /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/next-gen-ui/step_06/ios/Runner.xcworkspace/contents.xcworkspacedata b/next-gen-ui/step_06/ios/Runner.xcworkspace/contents.xcworkspacedata index 1d526a16ed..21a3cc14c7 100644 --- a/next-gen-ui/step_06/ios/Runner.xcworkspace/contents.xcworkspacedata +++ b/next-gen-ui/step_06/ios/Runner.xcworkspace/contents.xcworkspacedata @@ -4,4 +4,7 @@ + + diff --git a/next-gen-ui/step_06/lib/orb_shader/orb_shader_painter.dart b/next-gen-ui/step_06/lib/orb_shader/orb_shader_painter.dart index 50213545d9..399c20ab7e 100644 --- a/next-gen-ui/step_06/lib/orb_shader/orb_shader_painter.dart +++ b/next-gen-ui/step_06/lib/orb_shader/orb_shader_painter.dart @@ -28,13 +28,7 @@ class OrbShaderPainter extends CustomPainter { void paint(Canvas canvas, Size size) { double fov = v64.mix(pi / 4.3, pi / 2.0, config.zoom.clamp(0.0, 1.0)); - v64.Vector3 colorToVector3(Color c) => - v64.Vector3( - c.red.toDouble(), - c.green.toDouble(), - c.blue.toDouble(), - ) / - 255.0; + v64.Vector3 colorToVector3(Color c) => v64.Vector3(c.r, c.g, c.b); v64.Vector3 lightLumP = colorToVector3(config.lightColor).normalized() * max(0.0, config.lightBrightness); diff --git a/next-gen-ui/step_06/macos/Runner.xcodeproj/project.pbxproj b/next-gen-ui/step_06/macos/Runner.xcodeproj/project.pbxproj index 9c11821227..a260461a61 100644 --- a/next-gen-ui/step_06/macos/Runner.xcodeproj/project.pbxproj +++ b/next-gen-ui/step_06/macos/Runner.xcodeproj/project.pbxproj @@ -27,6 +27,8 @@ 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; + 44BBBA76B13EEB94F9DCE170 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2984A5AD2129F6C671F00164 /* Pods_Runner.framework */; }; + 4E0858D90CA55751E7BE4898 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 39010BEDE01EF3B7F309CBE7 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -60,11 +62,14 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 2984A5AD2129F6C671F00164 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 2CF773F4C2430EAC834646B3 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; }; - 33CC10ED2044A3C60003C045 /* next_gen_ui.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "next_gen_ui.app"; sourceTree = BUILT_PRODUCTS_DIR; }; + 337BA55CC083EAE0C41E02E7 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 33CC10ED2044A3C60003C045 /* next_gen_ui.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = next_gen_ui.app; sourceTree = BUILT_PRODUCTS_DIR; }; 33CC10F02044A3C60003C045 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 33CC10F22044A3C60003C045 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = Runner/Assets.xcassets; sourceTree = ""; }; 33CC10F52044A3C60003C045 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = ""; }; @@ -73,11 +78,16 @@ 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Debug.xcconfig"; sourceTree = ""; }; 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Release.xcconfig"; sourceTree = ""; }; 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = "Flutter-Generated.xcconfig"; path = "ephemeral/Flutter-Generated.xcconfig"; sourceTree = ""; }; + 33D3C1661150E5CF9FD9C336 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; + 39010BEDE01EF3B7F309CBE7 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 6B406084562E7BBF7435D2FF /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; + 7FDC8102767980E531E73AC5 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; + A4F4B5072EE42AC6A44D036B /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -85,6 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 4E0858D90CA55751E7BE4898 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -92,12 +103,27 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 44BBBA76B13EEB94F9DCE170 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 1C1096D0206D3CBABCC06686 /* Pods */ = { + isa = PBXGroup; + children = ( + 2CF773F4C2430EAC834646B3 /* Pods-Runner.debug.xcconfig */, + 7FDC8102767980E531E73AC5 /* Pods-Runner.release.xcconfig */, + 6B406084562E7BBF7435D2FF /* Pods-Runner.profile.xcconfig */, + A4F4B5072EE42AC6A44D036B /* Pods-RunnerTests.debug.xcconfig */, + 33D3C1661150E5CF9FD9C336 /* Pods-RunnerTests.release.xcconfig */, + 337BA55CC083EAE0C41E02E7 /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; 331C80D6294CF71000263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -125,6 +151,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, + 1C1096D0206D3CBABCC06686 /* Pods */, ); sourceTree = ""; }; @@ -175,6 +202,8 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( + 2984A5AD2129F6C671F00164 /* Pods_Runner.framework */, + 39010BEDE01EF3B7F309CBE7 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -186,6 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( + FE0C7B1BBD5CA48F75CD6536 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -204,11 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( + BF702552288C4603E192F687 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, + 978AFB595B79A33D319A948F /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -329,6 +361,67 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; + 978AFB595B79A33D319A948F /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; + BF702552288C4603E192F687 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; + FE0C7B1BBD5CA48F75CD6536 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -380,6 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; + baseConfigurationReference = A4F4B5072EE42AC6A44D036B /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -394,6 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; + baseConfigurationReference = 33D3C1661150E5CF9FD9C336 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -408,6 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; + baseConfigurationReference = 337BA55CC083EAE0C41E02E7 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/next-gen-ui/step_06/macos/Runner.xcworkspace/contents.xcworkspacedata b/next-gen-ui/step_06/macos/Runner.xcworkspace/contents.xcworkspacedata index 1d526a16ed..21a3cc14c7 100644 --- a/next-gen-ui/step_06/macos/Runner.xcworkspace/contents.xcworkspacedata +++ b/next-gen-ui/step_06/macos/Runner.xcworkspace/contents.xcworkspacedata @@ -4,4 +4,7 @@ + + diff --git a/next-gen-ui/step_06/pubspec.yaml b/next-gen-ui/step_06/pubspec.yaml index 726dd46e9e..dd3eb24959 100644 --- a/next-gen-ui/step_06/pubspec.yaml +++ b/next-gen-ui/step_06/pubspec.yaml @@ -27,7 +27,7 @@ dependencies: dev_dependencies: flutter_test: sdk: flutter - flutter_lints: ^4.0.0 + flutter_lints: ^5.0.0 flutter: uses-material-design: true From b01df2b8144c454128926f1fd2057c55b8d5df7e Mon Sep 17 00:00:00 2001 From: Brett Morgan Date: Sat, 19 Oct 2024 09:32:41 +1100 Subject: [PATCH 030/108] Update `audio_soloud` for flutter beta --- audio_soloud/step_02/.gitignore | 2 + .../ios/Runner.xcodeproj/project.pbxproj | 98 +++++++++---------- .../macos/Runner.xcodeproj/project.pbxproj | 90 ++++++++--------- .../step_02/macos/Runner/AppDelegate.swift | 4 + audio_soloud/step_03/.gitignore | 2 + .../ios/Runner.xcodeproj/project.pbxproj | 98 +++++++++---------- .../macos/Runner.xcodeproj/project.pbxproj | 90 ++++++++--------- .../step_03/macos/Runner/AppDelegate.swift | 4 + audio_soloud/step_04a/.gitignore | 2 + .../ios/Runner.xcodeproj/project.pbxproj | 98 +++++++++---------- .../macos/Runner.xcodeproj/project.pbxproj | 90 ++++++++--------- .../step_04a/macos/Runner/AppDelegate.swift | 4 + audio_soloud/step_04b/.gitignore | 2 + .../ios/Runner.xcodeproj/project.pbxproj | 98 +++++++++---------- .../macos/Runner.xcodeproj/project.pbxproj | 90 ++++++++--------- .../step_04b/macos/Runner/AppDelegate.swift | 4 + audio_soloud/step_05/.gitignore | 2 + .../ios/Runner.xcodeproj/project.pbxproj | 98 +++++++++---------- .../macos/Runner.xcodeproj/project.pbxproj | 90 ++++++++--------- .../step_05/macos/Runner/AppDelegate.swift | 4 + audio_soloud/step_06/.gitignore | 2 + .../ios/Runner.xcodeproj/project.pbxproj | 98 +++++++++---------- .../macos/Runner.xcodeproj/project.pbxproj | 90 ++++++++--------- .../step_06/macos/Runner/AppDelegate.swift | 4 + 24 files changed, 600 insertions(+), 564 deletions(-) diff --git a/audio_soloud/step_02/.gitignore b/audio_soloud/step_02/.gitignore index 29a3a5017f..79c113f9b5 100644 --- a/audio_soloud/step_02/.gitignore +++ b/audio_soloud/step_02/.gitignore @@ -5,9 +5,11 @@ *.swp .DS_Store .atom/ +.build/ .buildlog/ .history .svn/ +.swiftpm/ migrate_working_dir/ # IntelliJ related diff --git a/audio_soloud/step_02/ios/Runner.xcodeproj/project.pbxproj b/audio_soloud/step_02/ios/Runner.xcodeproj/project.pbxproj index bc497dff98..78c3338736 100644 --- a/audio_soloud/step_02/ios/Runner.xcodeproj/project.pbxproj +++ b/audio_soloud/step_02/ios/Runner.xcodeproj/project.pbxproj @@ -8,14 +8,14 @@ /* Begin PBXBuildFile section */ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; - 2B0C23F77C98CBE7D196EE25 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 57DDEA73F66304F49A2BE54F /* Pods_RunnerTests.framework */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - B1E6B3223C98EBC109378B92 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8BE99D81E98E9F739F0F0CDD /* Pods_Runner.framework */; }; + C239903147E007ACE2539FF1 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 64271C2B15D5289E7A273234 /* Pods_Runner.framework */; }; + FD411C6D5C71698ACB812C16 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FA8209B958FEB61BC3944230 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -44,18 +44,19 @@ /* Begin PBXFileReference section */ 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 2A2F92ECBDFB8D6264B9D847 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 293F5491067EBC5019B765DA /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 2F8CD2D2F3F3094219372FF1 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 57DDEA73F66304F49A2BE54F /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 5FFF2B0D0B3FE850BDFFF1B4 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 607C5C89235EC713B8C81942 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 616EF572B3F38B0AAFD45993 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 64271C2B15D5289E7A273234 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 66CE0956CC2434D27E7C94D7 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 834811EBD7CFE5B1A51AEE40 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - 8BE99D81E98E9F739F0F0CDD /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 95B843EC0A7D8549D813A11E /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 95C3B45C72B55FC36CA6C1EF /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -63,16 +64,15 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - CC8AE2DC85ECFB82466E7296 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - D9693967CFADB58C9517556E /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + FA8209B958FEB61BC3944230 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 08DD36075E0947E0A246C0C3 /* Frameworks */ = { + 2D62EF768A55B90467C2DC36 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 2B0C23F77C98CBE7D196EE25 /* Pods_RunnerTests.framework in Frameworks */, + FD411C6D5C71698ACB812C16 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -80,7 +80,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - B1E6B3223C98EBC109378B92 /* Pods_Runner.framework in Frameworks */, + C239903147E007ACE2539FF1 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -95,11 +95,11 @@ path = RunnerTests; sourceTree = ""; }; - 444DE75936DFAA5F99D521C2 /* Frameworks */ = { + 84B8570AECF15F5B7E9ABCD4 /* Frameworks */ = { isa = PBXGroup; children = ( - 8BE99D81E98E9F739F0F0CDD /* Pods_Runner.framework */, - 57DDEA73F66304F49A2BE54F /* Pods_RunnerTests.framework */, + 64271C2B15D5289E7A273234 /* Pods_Runner.framework */, + FA8209B958FEB61BC3944230 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -122,8 +122,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - C781053A9E2356B6F20F5846 /* Pods */, - 444DE75936DFAA5F99D521C2 /* Frameworks */, + D90EC8F042F876C28292E594 /* Pods */, + 84B8570AECF15F5B7E9ABCD4 /* Frameworks */, ); sourceTree = ""; }; @@ -151,15 +151,15 @@ path = Runner; sourceTree = ""; }; - C781053A9E2356B6F20F5846 /* Pods */ = { + D90EC8F042F876C28292E594 /* Pods */ = { isa = PBXGroup; children = ( - 95C3B45C72B55FC36CA6C1EF /* Pods-Runner.debug.xcconfig */, - 95B843EC0A7D8549D813A11E /* Pods-Runner.release.xcconfig */, - 834811EBD7CFE5B1A51AEE40 /* Pods-Runner.profile.xcconfig */, - D9693967CFADB58C9517556E /* Pods-RunnerTests.debug.xcconfig */, - 2A2F92ECBDFB8D6264B9D847 /* Pods-RunnerTests.release.xcconfig */, - CC8AE2DC85ECFB82466E7296 /* Pods-RunnerTests.profile.xcconfig */, + 293F5491067EBC5019B765DA /* Pods-Runner.debug.xcconfig */, + 607C5C89235EC713B8C81942 /* Pods-Runner.release.xcconfig */, + 616EF572B3F38B0AAFD45993 /* Pods-Runner.profile.xcconfig */, + 5FFF2B0D0B3FE850BDFFF1B4 /* Pods-RunnerTests.debug.xcconfig */, + 66CE0956CC2434D27E7C94D7 /* Pods-RunnerTests.release.xcconfig */, + 2F8CD2D2F3F3094219372FF1 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - EBF274A22A80ABCE6A369346 /* [CP] Check Pods Manifest.lock */, + FB4A750F315CD4B3B7445826 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 08DD36075E0947E0A246C0C3 /* Frameworks */, + 2D62EF768A55B90467C2DC36 /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 62AC8376D2414F60A7BE0789 /* [CP] Check Pods Manifest.lock */, + D73333ECF2B7DB012811699D /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 933DEA12F0A22E1760A935F9 /* [CP] Embed Pods Frameworks */, + C0491FA95CBB4B76896F17FB /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -286,29 +286,22 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 62AC8376D2414F60A7BE0789 /* [CP] Check Pods Manifest.lock */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( ); + name = "Run Script"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - 933DEA12F0A22E1760A935F9 /* [CP] Embed Pods Frameworks */ = { + C0491FA95CBB4B76896F17FB /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -325,22 +318,29 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { + D73333ECF2B7DB012811699D /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "Run Script"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - EBF274A22A80ABCE6A369346 /* [CP] Check Pods Manifest.lock */ = { + FB4A750F315CD4B3B7445826 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = D9693967CFADB58C9517556E /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 5FFF2B0D0B3FE850BDFFF1B4 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 2A2F92ECBDFB8D6264B9D847 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 66CE0956CC2434D27E7C94D7 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = CC8AE2DC85ECFB82466E7296 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 2F8CD2D2F3F3094219372FF1 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/audio_soloud/step_02/macos/Runner.xcodeproj/project.pbxproj b/audio_soloud/step_02/macos/Runner.xcodeproj/project.pbxproj index ea336784b8..5db54b3cea 100644 --- a/audio_soloud/step_02/macos/Runner.xcodeproj/project.pbxproj +++ b/audio_soloud/step_02/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ + 2A999699495574DFF92F9C13 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 70CA73A69EDF65C4071EA773 /* Pods_RunnerTests.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 76DFACCE4300C352F2EB8A62 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 664A09801CF281205EE995EF /* Pods_RunnerTests.framework */; }; - D6A89633325E62A7FD2FDB22 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DDA0530D4D5DE80DD5982D5C /* Pods_Runner.framework */; }; + 75FA62EC905AFABA4C6D6257 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 221BFA348F774DE675CBCC12 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,7 +62,8 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 1D416ABD8F5A3399C6DA2EC7 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 221BFA348F774DE675CBCC12 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 22378825C86C3FCA9520398A /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -79,15 +80,14 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 592E16EE055DFACE2771A0F8 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 664A09801CF281205EE995EF /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 665D2332FAFD748F393CCDB5 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 37DAFECFA76D59E2A458BB07 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 3F74DD5097636041EA867C42 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 70CA73A69EDF65C4071EA773 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 8EB66CFABA6B979CA5E1A44E /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - C2575B69935ACB50284B89A2 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - DA93B1BE801C7281234DB717 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - DDA0530D4D5DE80DD5982D5C /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + BC1BA37313853A1980F86C0C /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + EF84E844E5DD67F17F27BA36 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + FCB14AEAECB87AE9FC4E9459 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 76DFACCE4300C352F2EB8A62 /* Pods_RunnerTests.framework in Frameworks */, + 2A999699495574DFF92F9C13 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,7 +103,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - D6A89633325E62A7FD2FDB22 /* Pods_Runner.framework in Frameworks */, + 75FA62EC905AFABA4C6D6257 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -137,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - C538B7F78DC03FEF6D876A67 /* Pods */, + 6BE4410505BBFC9196DDDE0E /* Pods */, ); sourceTree = ""; }; @@ -185,15 +185,15 @@ path = Runner; sourceTree = ""; }; - C538B7F78DC03FEF6D876A67 /* Pods */ = { + 6BE4410505BBFC9196DDDE0E /* Pods */ = { isa = PBXGroup; children = ( - C2575B69935ACB50284B89A2 /* Pods-Runner.debug.xcconfig */, - 592E16EE055DFACE2771A0F8 /* Pods-Runner.release.xcconfig */, - DA93B1BE801C7281234DB717 /* Pods-Runner.profile.xcconfig */, - 8EB66CFABA6B979CA5E1A44E /* Pods-RunnerTests.debug.xcconfig */, - 665D2332FAFD748F393CCDB5 /* Pods-RunnerTests.release.xcconfig */, - 1D416ABD8F5A3399C6DA2EC7 /* Pods-RunnerTests.profile.xcconfig */, + FCB14AEAECB87AE9FC4E9459 /* Pods-Runner.debug.xcconfig */, + BC1BA37313853A1980F86C0C /* Pods-Runner.release.xcconfig */, + 37DAFECFA76D59E2A458BB07 /* Pods-Runner.profile.xcconfig */, + 3F74DD5097636041EA867C42 /* Pods-RunnerTests.debug.xcconfig */, + 22378825C86C3FCA9520398A /* Pods-RunnerTests.release.xcconfig */, + EF84E844E5DD67F17F27BA36 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -202,8 +202,8 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - DDA0530D4D5DE80DD5982D5C /* Pods_Runner.framework */, - 664A09801CF281205EE995EF /* Pods_RunnerTests.framework */, + 221BFA348F774DE675CBCC12 /* Pods_Runner.framework */, + 70CA73A69EDF65C4071EA773 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - D5A04ACAB1D2D44506ACBF95 /* [CP] Check Pods Manifest.lock */, + 911DBE09204FE02F8AFBFF29 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - E1EEAD5D6C44810CB56DE3D6 /* [CP] Check Pods Manifest.lock */, + 46CFC3737DD0E472F2B60D50 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - AA9CAE603FE596B6C667AEC1 /* [CP] Embed Pods Frameworks */, + 84D778B3E1B9F06119D3EF71 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -361,46 +361,46 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - AA9CAE603FE596B6C667AEC1 /* [CP] Embed Pods Frameworks */ = { + 46CFC3737DD0E472F2B60D50 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - D5A04ACAB1D2D44506ACBF95 /* [CP] Check Pods Manifest.lock */ = { + 84D778B3E1B9F06119D3EF71 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - E1EEAD5D6C44810CB56DE3D6 /* [CP] Check Pods Manifest.lock */ = { + 911DBE09204FE02F8AFBFF29 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -415,7 +415,7 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 8EB66CFABA6B979CA5E1A44E /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 3F74DD5097636041EA867C42 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 665D2332FAFD748F393CCDB5 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 22378825C86C3FCA9520398A /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 1D416ABD8F5A3399C6DA2EC7 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = EF84E844E5DD67F17F27BA36 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/audio_soloud/step_02/macos/Runner/AppDelegate.swift b/audio_soloud/step_02/macos/Runner/AppDelegate.swift index 8e02df2888..b3c1761412 100644 --- a/audio_soloud/step_02/macos/Runner/AppDelegate.swift +++ b/audio_soloud/step_02/macos/Runner/AppDelegate.swift @@ -6,4 +6,8 @@ class AppDelegate: FlutterAppDelegate { override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { return true } + + override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { + return true + } } diff --git a/audio_soloud/step_03/.gitignore b/audio_soloud/step_03/.gitignore index 29a3a5017f..79c113f9b5 100644 --- a/audio_soloud/step_03/.gitignore +++ b/audio_soloud/step_03/.gitignore @@ -5,9 +5,11 @@ *.swp .DS_Store .atom/ +.build/ .buildlog/ .history .svn/ +.swiftpm/ migrate_working_dir/ # IntelliJ related diff --git a/audio_soloud/step_03/ios/Runner.xcodeproj/project.pbxproj b/audio_soloud/step_03/ios/Runner.xcodeproj/project.pbxproj index bc497dff98..78c3338736 100644 --- a/audio_soloud/step_03/ios/Runner.xcodeproj/project.pbxproj +++ b/audio_soloud/step_03/ios/Runner.xcodeproj/project.pbxproj @@ -8,14 +8,14 @@ /* Begin PBXBuildFile section */ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; - 2B0C23F77C98CBE7D196EE25 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 57DDEA73F66304F49A2BE54F /* Pods_RunnerTests.framework */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - B1E6B3223C98EBC109378B92 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8BE99D81E98E9F739F0F0CDD /* Pods_Runner.framework */; }; + C239903147E007ACE2539FF1 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 64271C2B15D5289E7A273234 /* Pods_Runner.framework */; }; + FD411C6D5C71698ACB812C16 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FA8209B958FEB61BC3944230 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -44,18 +44,19 @@ /* Begin PBXFileReference section */ 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 2A2F92ECBDFB8D6264B9D847 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 293F5491067EBC5019B765DA /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 2F8CD2D2F3F3094219372FF1 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 57DDEA73F66304F49A2BE54F /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 5FFF2B0D0B3FE850BDFFF1B4 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 607C5C89235EC713B8C81942 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 616EF572B3F38B0AAFD45993 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 64271C2B15D5289E7A273234 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 66CE0956CC2434D27E7C94D7 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 834811EBD7CFE5B1A51AEE40 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - 8BE99D81E98E9F739F0F0CDD /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 95B843EC0A7D8549D813A11E /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 95C3B45C72B55FC36CA6C1EF /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -63,16 +64,15 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - CC8AE2DC85ECFB82466E7296 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - D9693967CFADB58C9517556E /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + FA8209B958FEB61BC3944230 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 08DD36075E0947E0A246C0C3 /* Frameworks */ = { + 2D62EF768A55B90467C2DC36 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 2B0C23F77C98CBE7D196EE25 /* Pods_RunnerTests.framework in Frameworks */, + FD411C6D5C71698ACB812C16 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -80,7 +80,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - B1E6B3223C98EBC109378B92 /* Pods_Runner.framework in Frameworks */, + C239903147E007ACE2539FF1 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -95,11 +95,11 @@ path = RunnerTests; sourceTree = ""; }; - 444DE75936DFAA5F99D521C2 /* Frameworks */ = { + 84B8570AECF15F5B7E9ABCD4 /* Frameworks */ = { isa = PBXGroup; children = ( - 8BE99D81E98E9F739F0F0CDD /* Pods_Runner.framework */, - 57DDEA73F66304F49A2BE54F /* Pods_RunnerTests.framework */, + 64271C2B15D5289E7A273234 /* Pods_Runner.framework */, + FA8209B958FEB61BC3944230 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -122,8 +122,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - C781053A9E2356B6F20F5846 /* Pods */, - 444DE75936DFAA5F99D521C2 /* Frameworks */, + D90EC8F042F876C28292E594 /* Pods */, + 84B8570AECF15F5B7E9ABCD4 /* Frameworks */, ); sourceTree = ""; }; @@ -151,15 +151,15 @@ path = Runner; sourceTree = ""; }; - C781053A9E2356B6F20F5846 /* Pods */ = { + D90EC8F042F876C28292E594 /* Pods */ = { isa = PBXGroup; children = ( - 95C3B45C72B55FC36CA6C1EF /* Pods-Runner.debug.xcconfig */, - 95B843EC0A7D8549D813A11E /* Pods-Runner.release.xcconfig */, - 834811EBD7CFE5B1A51AEE40 /* Pods-Runner.profile.xcconfig */, - D9693967CFADB58C9517556E /* Pods-RunnerTests.debug.xcconfig */, - 2A2F92ECBDFB8D6264B9D847 /* Pods-RunnerTests.release.xcconfig */, - CC8AE2DC85ECFB82466E7296 /* Pods-RunnerTests.profile.xcconfig */, + 293F5491067EBC5019B765DA /* Pods-Runner.debug.xcconfig */, + 607C5C89235EC713B8C81942 /* Pods-Runner.release.xcconfig */, + 616EF572B3F38B0AAFD45993 /* Pods-Runner.profile.xcconfig */, + 5FFF2B0D0B3FE850BDFFF1B4 /* Pods-RunnerTests.debug.xcconfig */, + 66CE0956CC2434D27E7C94D7 /* Pods-RunnerTests.release.xcconfig */, + 2F8CD2D2F3F3094219372FF1 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - EBF274A22A80ABCE6A369346 /* [CP] Check Pods Manifest.lock */, + FB4A750F315CD4B3B7445826 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 08DD36075E0947E0A246C0C3 /* Frameworks */, + 2D62EF768A55B90467C2DC36 /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 62AC8376D2414F60A7BE0789 /* [CP] Check Pods Manifest.lock */, + D73333ECF2B7DB012811699D /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 933DEA12F0A22E1760A935F9 /* [CP] Embed Pods Frameworks */, + C0491FA95CBB4B76896F17FB /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -286,29 +286,22 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 62AC8376D2414F60A7BE0789 /* [CP] Check Pods Manifest.lock */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( ); + name = "Run Script"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - 933DEA12F0A22E1760A935F9 /* [CP] Embed Pods Frameworks */ = { + C0491FA95CBB4B76896F17FB /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -325,22 +318,29 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { + D73333ECF2B7DB012811699D /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "Run Script"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - EBF274A22A80ABCE6A369346 /* [CP] Check Pods Manifest.lock */ = { + FB4A750F315CD4B3B7445826 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = D9693967CFADB58C9517556E /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 5FFF2B0D0B3FE850BDFFF1B4 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 2A2F92ECBDFB8D6264B9D847 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 66CE0956CC2434D27E7C94D7 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = CC8AE2DC85ECFB82466E7296 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 2F8CD2D2F3F3094219372FF1 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/audio_soloud/step_03/macos/Runner.xcodeproj/project.pbxproj b/audio_soloud/step_03/macos/Runner.xcodeproj/project.pbxproj index ea336784b8..5db54b3cea 100644 --- a/audio_soloud/step_03/macos/Runner.xcodeproj/project.pbxproj +++ b/audio_soloud/step_03/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ + 2A999699495574DFF92F9C13 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 70CA73A69EDF65C4071EA773 /* Pods_RunnerTests.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 76DFACCE4300C352F2EB8A62 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 664A09801CF281205EE995EF /* Pods_RunnerTests.framework */; }; - D6A89633325E62A7FD2FDB22 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DDA0530D4D5DE80DD5982D5C /* Pods_Runner.framework */; }; + 75FA62EC905AFABA4C6D6257 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 221BFA348F774DE675CBCC12 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,7 +62,8 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 1D416ABD8F5A3399C6DA2EC7 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 221BFA348F774DE675CBCC12 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 22378825C86C3FCA9520398A /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -79,15 +80,14 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 592E16EE055DFACE2771A0F8 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 664A09801CF281205EE995EF /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 665D2332FAFD748F393CCDB5 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 37DAFECFA76D59E2A458BB07 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 3F74DD5097636041EA867C42 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 70CA73A69EDF65C4071EA773 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 8EB66CFABA6B979CA5E1A44E /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - C2575B69935ACB50284B89A2 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - DA93B1BE801C7281234DB717 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - DDA0530D4D5DE80DD5982D5C /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + BC1BA37313853A1980F86C0C /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + EF84E844E5DD67F17F27BA36 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + FCB14AEAECB87AE9FC4E9459 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 76DFACCE4300C352F2EB8A62 /* Pods_RunnerTests.framework in Frameworks */, + 2A999699495574DFF92F9C13 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,7 +103,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - D6A89633325E62A7FD2FDB22 /* Pods_Runner.framework in Frameworks */, + 75FA62EC905AFABA4C6D6257 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -137,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - C538B7F78DC03FEF6D876A67 /* Pods */, + 6BE4410505BBFC9196DDDE0E /* Pods */, ); sourceTree = ""; }; @@ -185,15 +185,15 @@ path = Runner; sourceTree = ""; }; - C538B7F78DC03FEF6D876A67 /* Pods */ = { + 6BE4410505BBFC9196DDDE0E /* Pods */ = { isa = PBXGroup; children = ( - C2575B69935ACB50284B89A2 /* Pods-Runner.debug.xcconfig */, - 592E16EE055DFACE2771A0F8 /* Pods-Runner.release.xcconfig */, - DA93B1BE801C7281234DB717 /* Pods-Runner.profile.xcconfig */, - 8EB66CFABA6B979CA5E1A44E /* Pods-RunnerTests.debug.xcconfig */, - 665D2332FAFD748F393CCDB5 /* Pods-RunnerTests.release.xcconfig */, - 1D416ABD8F5A3399C6DA2EC7 /* Pods-RunnerTests.profile.xcconfig */, + FCB14AEAECB87AE9FC4E9459 /* Pods-Runner.debug.xcconfig */, + BC1BA37313853A1980F86C0C /* Pods-Runner.release.xcconfig */, + 37DAFECFA76D59E2A458BB07 /* Pods-Runner.profile.xcconfig */, + 3F74DD5097636041EA867C42 /* Pods-RunnerTests.debug.xcconfig */, + 22378825C86C3FCA9520398A /* Pods-RunnerTests.release.xcconfig */, + EF84E844E5DD67F17F27BA36 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -202,8 +202,8 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - DDA0530D4D5DE80DD5982D5C /* Pods_Runner.framework */, - 664A09801CF281205EE995EF /* Pods_RunnerTests.framework */, + 221BFA348F774DE675CBCC12 /* Pods_Runner.framework */, + 70CA73A69EDF65C4071EA773 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - D5A04ACAB1D2D44506ACBF95 /* [CP] Check Pods Manifest.lock */, + 911DBE09204FE02F8AFBFF29 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - E1EEAD5D6C44810CB56DE3D6 /* [CP] Check Pods Manifest.lock */, + 46CFC3737DD0E472F2B60D50 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - AA9CAE603FE596B6C667AEC1 /* [CP] Embed Pods Frameworks */, + 84D778B3E1B9F06119D3EF71 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -361,46 +361,46 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - AA9CAE603FE596B6C667AEC1 /* [CP] Embed Pods Frameworks */ = { + 46CFC3737DD0E472F2B60D50 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - D5A04ACAB1D2D44506ACBF95 /* [CP] Check Pods Manifest.lock */ = { + 84D778B3E1B9F06119D3EF71 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - E1EEAD5D6C44810CB56DE3D6 /* [CP] Check Pods Manifest.lock */ = { + 911DBE09204FE02F8AFBFF29 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -415,7 +415,7 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 8EB66CFABA6B979CA5E1A44E /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 3F74DD5097636041EA867C42 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 665D2332FAFD748F393CCDB5 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 22378825C86C3FCA9520398A /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 1D416ABD8F5A3399C6DA2EC7 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = EF84E844E5DD67F17F27BA36 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/audio_soloud/step_03/macos/Runner/AppDelegate.swift b/audio_soloud/step_03/macos/Runner/AppDelegate.swift index 8e02df2888..b3c1761412 100644 --- a/audio_soloud/step_03/macos/Runner/AppDelegate.swift +++ b/audio_soloud/step_03/macos/Runner/AppDelegate.swift @@ -6,4 +6,8 @@ class AppDelegate: FlutterAppDelegate { override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { return true } + + override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { + return true + } } diff --git a/audio_soloud/step_04a/.gitignore b/audio_soloud/step_04a/.gitignore index 29a3a5017f..79c113f9b5 100644 --- a/audio_soloud/step_04a/.gitignore +++ b/audio_soloud/step_04a/.gitignore @@ -5,9 +5,11 @@ *.swp .DS_Store .atom/ +.build/ .buildlog/ .history .svn/ +.swiftpm/ migrate_working_dir/ # IntelliJ related diff --git a/audio_soloud/step_04a/ios/Runner.xcodeproj/project.pbxproj b/audio_soloud/step_04a/ios/Runner.xcodeproj/project.pbxproj index bc497dff98..78c3338736 100644 --- a/audio_soloud/step_04a/ios/Runner.xcodeproj/project.pbxproj +++ b/audio_soloud/step_04a/ios/Runner.xcodeproj/project.pbxproj @@ -8,14 +8,14 @@ /* Begin PBXBuildFile section */ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; - 2B0C23F77C98CBE7D196EE25 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 57DDEA73F66304F49A2BE54F /* Pods_RunnerTests.framework */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - B1E6B3223C98EBC109378B92 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8BE99D81E98E9F739F0F0CDD /* Pods_Runner.framework */; }; + C239903147E007ACE2539FF1 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 64271C2B15D5289E7A273234 /* Pods_Runner.framework */; }; + FD411C6D5C71698ACB812C16 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FA8209B958FEB61BC3944230 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -44,18 +44,19 @@ /* Begin PBXFileReference section */ 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 2A2F92ECBDFB8D6264B9D847 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 293F5491067EBC5019B765DA /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 2F8CD2D2F3F3094219372FF1 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 57DDEA73F66304F49A2BE54F /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 5FFF2B0D0B3FE850BDFFF1B4 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 607C5C89235EC713B8C81942 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 616EF572B3F38B0AAFD45993 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 64271C2B15D5289E7A273234 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 66CE0956CC2434D27E7C94D7 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 834811EBD7CFE5B1A51AEE40 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - 8BE99D81E98E9F739F0F0CDD /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 95B843EC0A7D8549D813A11E /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 95C3B45C72B55FC36CA6C1EF /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -63,16 +64,15 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - CC8AE2DC85ECFB82466E7296 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - D9693967CFADB58C9517556E /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + FA8209B958FEB61BC3944230 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 08DD36075E0947E0A246C0C3 /* Frameworks */ = { + 2D62EF768A55B90467C2DC36 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 2B0C23F77C98CBE7D196EE25 /* Pods_RunnerTests.framework in Frameworks */, + FD411C6D5C71698ACB812C16 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -80,7 +80,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - B1E6B3223C98EBC109378B92 /* Pods_Runner.framework in Frameworks */, + C239903147E007ACE2539FF1 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -95,11 +95,11 @@ path = RunnerTests; sourceTree = ""; }; - 444DE75936DFAA5F99D521C2 /* Frameworks */ = { + 84B8570AECF15F5B7E9ABCD4 /* Frameworks */ = { isa = PBXGroup; children = ( - 8BE99D81E98E9F739F0F0CDD /* Pods_Runner.framework */, - 57DDEA73F66304F49A2BE54F /* Pods_RunnerTests.framework */, + 64271C2B15D5289E7A273234 /* Pods_Runner.framework */, + FA8209B958FEB61BC3944230 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -122,8 +122,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - C781053A9E2356B6F20F5846 /* Pods */, - 444DE75936DFAA5F99D521C2 /* Frameworks */, + D90EC8F042F876C28292E594 /* Pods */, + 84B8570AECF15F5B7E9ABCD4 /* Frameworks */, ); sourceTree = ""; }; @@ -151,15 +151,15 @@ path = Runner; sourceTree = ""; }; - C781053A9E2356B6F20F5846 /* Pods */ = { + D90EC8F042F876C28292E594 /* Pods */ = { isa = PBXGroup; children = ( - 95C3B45C72B55FC36CA6C1EF /* Pods-Runner.debug.xcconfig */, - 95B843EC0A7D8549D813A11E /* Pods-Runner.release.xcconfig */, - 834811EBD7CFE5B1A51AEE40 /* Pods-Runner.profile.xcconfig */, - D9693967CFADB58C9517556E /* Pods-RunnerTests.debug.xcconfig */, - 2A2F92ECBDFB8D6264B9D847 /* Pods-RunnerTests.release.xcconfig */, - CC8AE2DC85ECFB82466E7296 /* Pods-RunnerTests.profile.xcconfig */, + 293F5491067EBC5019B765DA /* Pods-Runner.debug.xcconfig */, + 607C5C89235EC713B8C81942 /* Pods-Runner.release.xcconfig */, + 616EF572B3F38B0AAFD45993 /* Pods-Runner.profile.xcconfig */, + 5FFF2B0D0B3FE850BDFFF1B4 /* Pods-RunnerTests.debug.xcconfig */, + 66CE0956CC2434D27E7C94D7 /* Pods-RunnerTests.release.xcconfig */, + 2F8CD2D2F3F3094219372FF1 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - EBF274A22A80ABCE6A369346 /* [CP] Check Pods Manifest.lock */, + FB4A750F315CD4B3B7445826 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 08DD36075E0947E0A246C0C3 /* Frameworks */, + 2D62EF768A55B90467C2DC36 /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 62AC8376D2414F60A7BE0789 /* [CP] Check Pods Manifest.lock */, + D73333ECF2B7DB012811699D /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 933DEA12F0A22E1760A935F9 /* [CP] Embed Pods Frameworks */, + C0491FA95CBB4B76896F17FB /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -286,29 +286,22 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 62AC8376D2414F60A7BE0789 /* [CP] Check Pods Manifest.lock */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( ); + name = "Run Script"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - 933DEA12F0A22E1760A935F9 /* [CP] Embed Pods Frameworks */ = { + C0491FA95CBB4B76896F17FB /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -325,22 +318,29 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { + D73333ECF2B7DB012811699D /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "Run Script"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - EBF274A22A80ABCE6A369346 /* [CP] Check Pods Manifest.lock */ = { + FB4A750F315CD4B3B7445826 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = D9693967CFADB58C9517556E /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 5FFF2B0D0B3FE850BDFFF1B4 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 2A2F92ECBDFB8D6264B9D847 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 66CE0956CC2434D27E7C94D7 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = CC8AE2DC85ECFB82466E7296 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 2F8CD2D2F3F3094219372FF1 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/audio_soloud/step_04a/macos/Runner.xcodeproj/project.pbxproj b/audio_soloud/step_04a/macos/Runner.xcodeproj/project.pbxproj index ea336784b8..5db54b3cea 100644 --- a/audio_soloud/step_04a/macos/Runner.xcodeproj/project.pbxproj +++ b/audio_soloud/step_04a/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ + 2A999699495574DFF92F9C13 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 70CA73A69EDF65C4071EA773 /* Pods_RunnerTests.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 76DFACCE4300C352F2EB8A62 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 664A09801CF281205EE995EF /* Pods_RunnerTests.framework */; }; - D6A89633325E62A7FD2FDB22 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DDA0530D4D5DE80DD5982D5C /* Pods_Runner.framework */; }; + 75FA62EC905AFABA4C6D6257 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 221BFA348F774DE675CBCC12 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,7 +62,8 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 1D416ABD8F5A3399C6DA2EC7 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 221BFA348F774DE675CBCC12 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 22378825C86C3FCA9520398A /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -79,15 +80,14 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 592E16EE055DFACE2771A0F8 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 664A09801CF281205EE995EF /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 665D2332FAFD748F393CCDB5 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 37DAFECFA76D59E2A458BB07 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 3F74DD5097636041EA867C42 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 70CA73A69EDF65C4071EA773 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 8EB66CFABA6B979CA5E1A44E /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - C2575B69935ACB50284B89A2 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - DA93B1BE801C7281234DB717 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - DDA0530D4D5DE80DD5982D5C /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + BC1BA37313853A1980F86C0C /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + EF84E844E5DD67F17F27BA36 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + FCB14AEAECB87AE9FC4E9459 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 76DFACCE4300C352F2EB8A62 /* Pods_RunnerTests.framework in Frameworks */, + 2A999699495574DFF92F9C13 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,7 +103,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - D6A89633325E62A7FD2FDB22 /* Pods_Runner.framework in Frameworks */, + 75FA62EC905AFABA4C6D6257 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -137,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - C538B7F78DC03FEF6D876A67 /* Pods */, + 6BE4410505BBFC9196DDDE0E /* Pods */, ); sourceTree = ""; }; @@ -185,15 +185,15 @@ path = Runner; sourceTree = ""; }; - C538B7F78DC03FEF6D876A67 /* Pods */ = { + 6BE4410505BBFC9196DDDE0E /* Pods */ = { isa = PBXGroup; children = ( - C2575B69935ACB50284B89A2 /* Pods-Runner.debug.xcconfig */, - 592E16EE055DFACE2771A0F8 /* Pods-Runner.release.xcconfig */, - DA93B1BE801C7281234DB717 /* Pods-Runner.profile.xcconfig */, - 8EB66CFABA6B979CA5E1A44E /* Pods-RunnerTests.debug.xcconfig */, - 665D2332FAFD748F393CCDB5 /* Pods-RunnerTests.release.xcconfig */, - 1D416ABD8F5A3399C6DA2EC7 /* Pods-RunnerTests.profile.xcconfig */, + FCB14AEAECB87AE9FC4E9459 /* Pods-Runner.debug.xcconfig */, + BC1BA37313853A1980F86C0C /* Pods-Runner.release.xcconfig */, + 37DAFECFA76D59E2A458BB07 /* Pods-Runner.profile.xcconfig */, + 3F74DD5097636041EA867C42 /* Pods-RunnerTests.debug.xcconfig */, + 22378825C86C3FCA9520398A /* Pods-RunnerTests.release.xcconfig */, + EF84E844E5DD67F17F27BA36 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -202,8 +202,8 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - DDA0530D4D5DE80DD5982D5C /* Pods_Runner.framework */, - 664A09801CF281205EE995EF /* Pods_RunnerTests.framework */, + 221BFA348F774DE675CBCC12 /* Pods_Runner.framework */, + 70CA73A69EDF65C4071EA773 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - D5A04ACAB1D2D44506ACBF95 /* [CP] Check Pods Manifest.lock */, + 911DBE09204FE02F8AFBFF29 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - E1EEAD5D6C44810CB56DE3D6 /* [CP] Check Pods Manifest.lock */, + 46CFC3737DD0E472F2B60D50 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - AA9CAE603FE596B6C667AEC1 /* [CP] Embed Pods Frameworks */, + 84D778B3E1B9F06119D3EF71 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -361,46 +361,46 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - AA9CAE603FE596B6C667AEC1 /* [CP] Embed Pods Frameworks */ = { + 46CFC3737DD0E472F2B60D50 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - D5A04ACAB1D2D44506ACBF95 /* [CP] Check Pods Manifest.lock */ = { + 84D778B3E1B9F06119D3EF71 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - E1EEAD5D6C44810CB56DE3D6 /* [CP] Check Pods Manifest.lock */ = { + 911DBE09204FE02F8AFBFF29 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -415,7 +415,7 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 8EB66CFABA6B979CA5E1A44E /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 3F74DD5097636041EA867C42 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 665D2332FAFD748F393CCDB5 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 22378825C86C3FCA9520398A /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 1D416ABD8F5A3399C6DA2EC7 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = EF84E844E5DD67F17F27BA36 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/audio_soloud/step_04a/macos/Runner/AppDelegate.swift b/audio_soloud/step_04a/macos/Runner/AppDelegate.swift index 8e02df2888..b3c1761412 100644 --- a/audio_soloud/step_04a/macos/Runner/AppDelegate.swift +++ b/audio_soloud/step_04a/macos/Runner/AppDelegate.swift @@ -6,4 +6,8 @@ class AppDelegate: FlutterAppDelegate { override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { return true } + + override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { + return true + } } diff --git a/audio_soloud/step_04b/.gitignore b/audio_soloud/step_04b/.gitignore index 29a3a5017f..79c113f9b5 100644 --- a/audio_soloud/step_04b/.gitignore +++ b/audio_soloud/step_04b/.gitignore @@ -5,9 +5,11 @@ *.swp .DS_Store .atom/ +.build/ .buildlog/ .history .svn/ +.swiftpm/ migrate_working_dir/ # IntelliJ related diff --git a/audio_soloud/step_04b/ios/Runner.xcodeproj/project.pbxproj b/audio_soloud/step_04b/ios/Runner.xcodeproj/project.pbxproj index bc497dff98..78c3338736 100644 --- a/audio_soloud/step_04b/ios/Runner.xcodeproj/project.pbxproj +++ b/audio_soloud/step_04b/ios/Runner.xcodeproj/project.pbxproj @@ -8,14 +8,14 @@ /* Begin PBXBuildFile section */ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; - 2B0C23F77C98CBE7D196EE25 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 57DDEA73F66304F49A2BE54F /* Pods_RunnerTests.framework */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - B1E6B3223C98EBC109378B92 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8BE99D81E98E9F739F0F0CDD /* Pods_Runner.framework */; }; + C239903147E007ACE2539FF1 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 64271C2B15D5289E7A273234 /* Pods_Runner.framework */; }; + FD411C6D5C71698ACB812C16 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FA8209B958FEB61BC3944230 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -44,18 +44,19 @@ /* Begin PBXFileReference section */ 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 2A2F92ECBDFB8D6264B9D847 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 293F5491067EBC5019B765DA /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 2F8CD2D2F3F3094219372FF1 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 57DDEA73F66304F49A2BE54F /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 5FFF2B0D0B3FE850BDFFF1B4 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 607C5C89235EC713B8C81942 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 616EF572B3F38B0AAFD45993 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 64271C2B15D5289E7A273234 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 66CE0956CC2434D27E7C94D7 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 834811EBD7CFE5B1A51AEE40 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - 8BE99D81E98E9F739F0F0CDD /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 95B843EC0A7D8549D813A11E /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 95C3B45C72B55FC36CA6C1EF /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -63,16 +64,15 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - CC8AE2DC85ECFB82466E7296 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - D9693967CFADB58C9517556E /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + FA8209B958FEB61BC3944230 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 08DD36075E0947E0A246C0C3 /* Frameworks */ = { + 2D62EF768A55B90467C2DC36 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 2B0C23F77C98CBE7D196EE25 /* Pods_RunnerTests.framework in Frameworks */, + FD411C6D5C71698ACB812C16 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -80,7 +80,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - B1E6B3223C98EBC109378B92 /* Pods_Runner.framework in Frameworks */, + C239903147E007ACE2539FF1 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -95,11 +95,11 @@ path = RunnerTests; sourceTree = ""; }; - 444DE75936DFAA5F99D521C2 /* Frameworks */ = { + 84B8570AECF15F5B7E9ABCD4 /* Frameworks */ = { isa = PBXGroup; children = ( - 8BE99D81E98E9F739F0F0CDD /* Pods_Runner.framework */, - 57DDEA73F66304F49A2BE54F /* Pods_RunnerTests.framework */, + 64271C2B15D5289E7A273234 /* Pods_Runner.framework */, + FA8209B958FEB61BC3944230 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -122,8 +122,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - C781053A9E2356B6F20F5846 /* Pods */, - 444DE75936DFAA5F99D521C2 /* Frameworks */, + D90EC8F042F876C28292E594 /* Pods */, + 84B8570AECF15F5B7E9ABCD4 /* Frameworks */, ); sourceTree = ""; }; @@ -151,15 +151,15 @@ path = Runner; sourceTree = ""; }; - C781053A9E2356B6F20F5846 /* Pods */ = { + D90EC8F042F876C28292E594 /* Pods */ = { isa = PBXGroup; children = ( - 95C3B45C72B55FC36CA6C1EF /* Pods-Runner.debug.xcconfig */, - 95B843EC0A7D8549D813A11E /* Pods-Runner.release.xcconfig */, - 834811EBD7CFE5B1A51AEE40 /* Pods-Runner.profile.xcconfig */, - D9693967CFADB58C9517556E /* Pods-RunnerTests.debug.xcconfig */, - 2A2F92ECBDFB8D6264B9D847 /* Pods-RunnerTests.release.xcconfig */, - CC8AE2DC85ECFB82466E7296 /* Pods-RunnerTests.profile.xcconfig */, + 293F5491067EBC5019B765DA /* Pods-Runner.debug.xcconfig */, + 607C5C89235EC713B8C81942 /* Pods-Runner.release.xcconfig */, + 616EF572B3F38B0AAFD45993 /* Pods-Runner.profile.xcconfig */, + 5FFF2B0D0B3FE850BDFFF1B4 /* Pods-RunnerTests.debug.xcconfig */, + 66CE0956CC2434D27E7C94D7 /* Pods-RunnerTests.release.xcconfig */, + 2F8CD2D2F3F3094219372FF1 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - EBF274A22A80ABCE6A369346 /* [CP] Check Pods Manifest.lock */, + FB4A750F315CD4B3B7445826 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 08DD36075E0947E0A246C0C3 /* Frameworks */, + 2D62EF768A55B90467C2DC36 /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 62AC8376D2414F60A7BE0789 /* [CP] Check Pods Manifest.lock */, + D73333ECF2B7DB012811699D /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 933DEA12F0A22E1760A935F9 /* [CP] Embed Pods Frameworks */, + C0491FA95CBB4B76896F17FB /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -286,29 +286,22 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 62AC8376D2414F60A7BE0789 /* [CP] Check Pods Manifest.lock */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( ); + name = "Run Script"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - 933DEA12F0A22E1760A935F9 /* [CP] Embed Pods Frameworks */ = { + C0491FA95CBB4B76896F17FB /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -325,22 +318,29 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { + D73333ECF2B7DB012811699D /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "Run Script"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - EBF274A22A80ABCE6A369346 /* [CP] Check Pods Manifest.lock */ = { + FB4A750F315CD4B3B7445826 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = D9693967CFADB58C9517556E /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 5FFF2B0D0B3FE850BDFFF1B4 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 2A2F92ECBDFB8D6264B9D847 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 66CE0956CC2434D27E7C94D7 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = CC8AE2DC85ECFB82466E7296 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 2F8CD2D2F3F3094219372FF1 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/audio_soloud/step_04b/macos/Runner.xcodeproj/project.pbxproj b/audio_soloud/step_04b/macos/Runner.xcodeproj/project.pbxproj index ea336784b8..5db54b3cea 100644 --- a/audio_soloud/step_04b/macos/Runner.xcodeproj/project.pbxproj +++ b/audio_soloud/step_04b/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ + 2A999699495574DFF92F9C13 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 70CA73A69EDF65C4071EA773 /* Pods_RunnerTests.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 76DFACCE4300C352F2EB8A62 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 664A09801CF281205EE995EF /* Pods_RunnerTests.framework */; }; - D6A89633325E62A7FD2FDB22 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DDA0530D4D5DE80DD5982D5C /* Pods_Runner.framework */; }; + 75FA62EC905AFABA4C6D6257 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 221BFA348F774DE675CBCC12 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,7 +62,8 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 1D416ABD8F5A3399C6DA2EC7 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 221BFA348F774DE675CBCC12 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 22378825C86C3FCA9520398A /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -79,15 +80,14 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 592E16EE055DFACE2771A0F8 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 664A09801CF281205EE995EF /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 665D2332FAFD748F393CCDB5 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 37DAFECFA76D59E2A458BB07 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 3F74DD5097636041EA867C42 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 70CA73A69EDF65C4071EA773 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 8EB66CFABA6B979CA5E1A44E /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - C2575B69935ACB50284B89A2 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - DA93B1BE801C7281234DB717 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - DDA0530D4D5DE80DD5982D5C /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + BC1BA37313853A1980F86C0C /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + EF84E844E5DD67F17F27BA36 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + FCB14AEAECB87AE9FC4E9459 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 76DFACCE4300C352F2EB8A62 /* Pods_RunnerTests.framework in Frameworks */, + 2A999699495574DFF92F9C13 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,7 +103,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - D6A89633325E62A7FD2FDB22 /* Pods_Runner.framework in Frameworks */, + 75FA62EC905AFABA4C6D6257 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -137,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - C538B7F78DC03FEF6D876A67 /* Pods */, + 6BE4410505BBFC9196DDDE0E /* Pods */, ); sourceTree = ""; }; @@ -185,15 +185,15 @@ path = Runner; sourceTree = ""; }; - C538B7F78DC03FEF6D876A67 /* Pods */ = { + 6BE4410505BBFC9196DDDE0E /* Pods */ = { isa = PBXGroup; children = ( - C2575B69935ACB50284B89A2 /* Pods-Runner.debug.xcconfig */, - 592E16EE055DFACE2771A0F8 /* Pods-Runner.release.xcconfig */, - DA93B1BE801C7281234DB717 /* Pods-Runner.profile.xcconfig */, - 8EB66CFABA6B979CA5E1A44E /* Pods-RunnerTests.debug.xcconfig */, - 665D2332FAFD748F393CCDB5 /* Pods-RunnerTests.release.xcconfig */, - 1D416ABD8F5A3399C6DA2EC7 /* Pods-RunnerTests.profile.xcconfig */, + FCB14AEAECB87AE9FC4E9459 /* Pods-Runner.debug.xcconfig */, + BC1BA37313853A1980F86C0C /* Pods-Runner.release.xcconfig */, + 37DAFECFA76D59E2A458BB07 /* Pods-Runner.profile.xcconfig */, + 3F74DD5097636041EA867C42 /* Pods-RunnerTests.debug.xcconfig */, + 22378825C86C3FCA9520398A /* Pods-RunnerTests.release.xcconfig */, + EF84E844E5DD67F17F27BA36 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -202,8 +202,8 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - DDA0530D4D5DE80DD5982D5C /* Pods_Runner.framework */, - 664A09801CF281205EE995EF /* Pods_RunnerTests.framework */, + 221BFA348F774DE675CBCC12 /* Pods_Runner.framework */, + 70CA73A69EDF65C4071EA773 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - D5A04ACAB1D2D44506ACBF95 /* [CP] Check Pods Manifest.lock */, + 911DBE09204FE02F8AFBFF29 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - E1EEAD5D6C44810CB56DE3D6 /* [CP] Check Pods Manifest.lock */, + 46CFC3737DD0E472F2B60D50 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - AA9CAE603FE596B6C667AEC1 /* [CP] Embed Pods Frameworks */, + 84D778B3E1B9F06119D3EF71 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -361,46 +361,46 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - AA9CAE603FE596B6C667AEC1 /* [CP] Embed Pods Frameworks */ = { + 46CFC3737DD0E472F2B60D50 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - D5A04ACAB1D2D44506ACBF95 /* [CP] Check Pods Manifest.lock */ = { + 84D778B3E1B9F06119D3EF71 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - E1EEAD5D6C44810CB56DE3D6 /* [CP] Check Pods Manifest.lock */ = { + 911DBE09204FE02F8AFBFF29 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -415,7 +415,7 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 8EB66CFABA6B979CA5E1A44E /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 3F74DD5097636041EA867C42 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 665D2332FAFD748F393CCDB5 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 22378825C86C3FCA9520398A /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 1D416ABD8F5A3399C6DA2EC7 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = EF84E844E5DD67F17F27BA36 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/audio_soloud/step_04b/macos/Runner/AppDelegate.swift b/audio_soloud/step_04b/macos/Runner/AppDelegate.swift index 8e02df2888..b3c1761412 100644 --- a/audio_soloud/step_04b/macos/Runner/AppDelegate.swift +++ b/audio_soloud/step_04b/macos/Runner/AppDelegate.swift @@ -6,4 +6,8 @@ class AppDelegate: FlutterAppDelegate { override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { return true } + + override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { + return true + } } diff --git a/audio_soloud/step_05/.gitignore b/audio_soloud/step_05/.gitignore index 29a3a5017f..79c113f9b5 100644 --- a/audio_soloud/step_05/.gitignore +++ b/audio_soloud/step_05/.gitignore @@ -5,9 +5,11 @@ *.swp .DS_Store .atom/ +.build/ .buildlog/ .history .svn/ +.swiftpm/ migrate_working_dir/ # IntelliJ related diff --git a/audio_soloud/step_05/ios/Runner.xcodeproj/project.pbxproj b/audio_soloud/step_05/ios/Runner.xcodeproj/project.pbxproj index bc497dff98..78c3338736 100644 --- a/audio_soloud/step_05/ios/Runner.xcodeproj/project.pbxproj +++ b/audio_soloud/step_05/ios/Runner.xcodeproj/project.pbxproj @@ -8,14 +8,14 @@ /* Begin PBXBuildFile section */ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; - 2B0C23F77C98CBE7D196EE25 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 57DDEA73F66304F49A2BE54F /* Pods_RunnerTests.framework */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - B1E6B3223C98EBC109378B92 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8BE99D81E98E9F739F0F0CDD /* Pods_Runner.framework */; }; + C239903147E007ACE2539FF1 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 64271C2B15D5289E7A273234 /* Pods_Runner.framework */; }; + FD411C6D5C71698ACB812C16 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FA8209B958FEB61BC3944230 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -44,18 +44,19 @@ /* Begin PBXFileReference section */ 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 2A2F92ECBDFB8D6264B9D847 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 293F5491067EBC5019B765DA /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 2F8CD2D2F3F3094219372FF1 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 57DDEA73F66304F49A2BE54F /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 5FFF2B0D0B3FE850BDFFF1B4 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 607C5C89235EC713B8C81942 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 616EF572B3F38B0AAFD45993 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 64271C2B15D5289E7A273234 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 66CE0956CC2434D27E7C94D7 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 834811EBD7CFE5B1A51AEE40 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - 8BE99D81E98E9F739F0F0CDD /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 95B843EC0A7D8549D813A11E /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 95C3B45C72B55FC36CA6C1EF /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -63,16 +64,15 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - CC8AE2DC85ECFB82466E7296 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - D9693967CFADB58C9517556E /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + FA8209B958FEB61BC3944230 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 08DD36075E0947E0A246C0C3 /* Frameworks */ = { + 2D62EF768A55B90467C2DC36 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 2B0C23F77C98CBE7D196EE25 /* Pods_RunnerTests.framework in Frameworks */, + FD411C6D5C71698ACB812C16 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -80,7 +80,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - B1E6B3223C98EBC109378B92 /* Pods_Runner.framework in Frameworks */, + C239903147E007ACE2539FF1 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -95,11 +95,11 @@ path = RunnerTests; sourceTree = ""; }; - 444DE75936DFAA5F99D521C2 /* Frameworks */ = { + 84B8570AECF15F5B7E9ABCD4 /* Frameworks */ = { isa = PBXGroup; children = ( - 8BE99D81E98E9F739F0F0CDD /* Pods_Runner.framework */, - 57DDEA73F66304F49A2BE54F /* Pods_RunnerTests.framework */, + 64271C2B15D5289E7A273234 /* Pods_Runner.framework */, + FA8209B958FEB61BC3944230 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -122,8 +122,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - C781053A9E2356B6F20F5846 /* Pods */, - 444DE75936DFAA5F99D521C2 /* Frameworks */, + D90EC8F042F876C28292E594 /* Pods */, + 84B8570AECF15F5B7E9ABCD4 /* Frameworks */, ); sourceTree = ""; }; @@ -151,15 +151,15 @@ path = Runner; sourceTree = ""; }; - C781053A9E2356B6F20F5846 /* Pods */ = { + D90EC8F042F876C28292E594 /* Pods */ = { isa = PBXGroup; children = ( - 95C3B45C72B55FC36CA6C1EF /* Pods-Runner.debug.xcconfig */, - 95B843EC0A7D8549D813A11E /* Pods-Runner.release.xcconfig */, - 834811EBD7CFE5B1A51AEE40 /* Pods-Runner.profile.xcconfig */, - D9693967CFADB58C9517556E /* Pods-RunnerTests.debug.xcconfig */, - 2A2F92ECBDFB8D6264B9D847 /* Pods-RunnerTests.release.xcconfig */, - CC8AE2DC85ECFB82466E7296 /* Pods-RunnerTests.profile.xcconfig */, + 293F5491067EBC5019B765DA /* Pods-Runner.debug.xcconfig */, + 607C5C89235EC713B8C81942 /* Pods-Runner.release.xcconfig */, + 616EF572B3F38B0AAFD45993 /* Pods-Runner.profile.xcconfig */, + 5FFF2B0D0B3FE850BDFFF1B4 /* Pods-RunnerTests.debug.xcconfig */, + 66CE0956CC2434D27E7C94D7 /* Pods-RunnerTests.release.xcconfig */, + 2F8CD2D2F3F3094219372FF1 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - EBF274A22A80ABCE6A369346 /* [CP] Check Pods Manifest.lock */, + FB4A750F315CD4B3B7445826 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 08DD36075E0947E0A246C0C3 /* Frameworks */, + 2D62EF768A55B90467C2DC36 /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 62AC8376D2414F60A7BE0789 /* [CP] Check Pods Manifest.lock */, + D73333ECF2B7DB012811699D /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 933DEA12F0A22E1760A935F9 /* [CP] Embed Pods Frameworks */, + C0491FA95CBB4B76896F17FB /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -286,29 +286,22 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 62AC8376D2414F60A7BE0789 /* [CP] Check Pods Manifest.lock */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( ); + name = "Run Script"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - 933DEA12F0A22E1760A935F9 /* [CP] Embed Pods Frameworks */ = { + C0491FA95CBB4B76896F17FB /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -325,22 +318,29 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { + D73333ECF2B7DB012811699D /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "Run Script"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - EBF274A22A80ABCE6A369346 /* [CP] Check Pods Manifest.lock */ = { + FB4A750F315CD4B3B7445826 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = D9693967CFADB58C9517556E /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 5FFF2B0D0B3FE850BDFFF1B4 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 2A2F92ECBDFB8D6264B9D847 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 66CE0956CC2434D27E7C94D7 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = CC8AE2DC85ECFB82466E7296 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 2F8CD2D2F3F3094219372FF1 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/audio_soloud/step_05/macos/Runner.xcodeproj/project.pbxproj b/audio_soloud/step_05/macos/Runner.xcodeproj/project.pbxproj index ea336784b8..5db54b3cea 100644 --- a/audio_soloud/step_05/macos/Runner.xcodeproj/project.pbxproj +++ b/audio_soloud/step_05/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ + 2A999699495574DFF92F9C13 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 70CA73A69EDF65C4071EA773 /* Pods_RunnerTests.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 76DFACCE4300C352F2EB8A62 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 664A09801CF281205EE995EF /* Pods_RunnerTests.framework */; }; - D6A89633325E62A7FD2FDB22 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DDA0530D4D5DE80DD5982D5C /* Pods_Runner.framework */; }; + 75FA62EC905AFABA4C6D6257 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 221BFA348F774DE675CBCC12 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,7 +62,8 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 1D416ABD8F5A3399C6DA2EC7 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 221BFA348F774DE675CBCC12 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 22378825C86C3FCA9520398A /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -79,15 +80,14 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 592E16EE055DFACE2771A0F8 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 664A09801CF281205EE995EF /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 665D2332FAFD748F393CCDB5 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 37DAFECFA76D59E2A458BB07 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 3F74DD5097636041EA867C42 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 70CA73A69EDF65C4071EA773 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 8EB66CFABA6B979CA5E1A44E /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - C2575B69935ACB50284B89A2 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - DA93B1BE801C7281234DB717 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - DDA0530D4D5DE80DD5982D5C /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + BC1BA37313853A1980F86C0C /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + EF84E844E5DD67F17F27BA36 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + FCB14AEAECB87AE9FC4E9459 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 76DFACCE4300C352F2EB8A62 /* Pods_RunnerTests.framework in Frameworks */, + 2A999699495574DFF92F9C13 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,7 +103,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - D6A89633325E62A7FD2FDB22 /* Pods_Runner.framework in Frameworks */, + 75FA62EC905AFABA4C6D6257 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -137,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - C538B7F78DC03FEF6D876A67 /* Pods */, + 6BE4410505BBFC9196DDDE0E /* Pods */, ); sourceTree = ""; }; @@ -185,15 +185,15 @@ path = Runner; sourceTree = ""; }; - C538B7F78DC03FEF6D876A67 /* Pods */ = { + 6BE4410505BBFC9196DDDE0E /* Pods */ = { isa = PBXGroup; children = ( - C2575B69935ACB50284B89A2 /* Pods-Runner.debug.xcconfig */, - 592E16EE055DFACE2771A0F8 /* Pods-Runner.release.xcconfig */, - DA93B1BE801C7281234DB717 /* Pods-Runner.profile.xcconfig */, - 8EB66CFABA6B979CA5E1A44E /* Pods-RunnerTests.debug.xcconfig */, - 665D2332FAFD748F393CCDB5 /* Pods-RunnerTests.release.xcconfig */, - 1D416ABD8F5A3399C6DA2EC7 /* Pods-RunnerTests.profile.xcconfig */, + FCB14AEAECB87AE9FC4E9459 /* Pods-Runner.debug.xcconfig */, + BC1BA37313853A1980F86C0C /* Pods-Runner.release.xcconfig */, + 37DAFECFA76D59E2A458BB07 /* Pods-Runner.profile.xcconfig */, + 3F74DD5097636041EA867C42 /* Pods-RunnerTests.debug.xcconfig */, + 22378825C86C3FCA9520398A /* Pods-RunnerTests.release.xcconfig */, + EF84E844E5DD67F17F27BA36 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -202,8 +202,8 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - DDA0530D4D5DE80DD5982D5C /* Pods_Runner.framework */, - 664A09801CF281205EE995EF /* Pods_RunnerTests.framework */, + 221BFA348F774DE675CBCC12 /* Pods_Runner.framework */, + 70CA73A69EDF65C4071EA773 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - D5A04ACAB1D2D44506ACBF95 /* [CP] Check Pods Manifest.lock */, + 911DBE09204FE02F8AFBFF29 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - E1EEAD5D6C44810CB56DE3D6 /* [CP] Check Pods Manifest.lock */, + 46CFC3737DD0E472F2B60D50 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - AA9CAE603FE596B6C667AEC1 /* [CP] Embed Pods Frameworks */, + 84D778B3E1B9F06119D3EF71 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -361,46 +361,46 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - AA9CAE603FE596B6C667AEC1 /* [CP] Embed Pods Frameworks */ = { + 46CFC3737DD0E472F2B60D50 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - D5A04ACAB1D2D44506ACBF95 /* [CP] Check Pods Manifest.lock */ = { + 84D778B3E1B9F06119D3EF71 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - E1EEAD5D6C44810CB56DE3D6 /* [CP] Check Pods Manifest.lock */ = { + 911DBE09204FE02F8AFBFF29 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -415,7 +415,7 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 8EB66CFABA6B979CA5E1A44E /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 3F74DD5097636041EA867C42 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 665D2332FAFD748F393CCDB5 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 22378825C86C3FCA9520398A /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 1D416ABD8F5A3399C6DA2EC7 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = EF84E844E5DD67F17F27BA36 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/audio_soloud/step_05/macos/Runner/AppDelegate.swift b/audio_soloud/step_05/macos/Runner/AppDelegate.swift index 8e02df2888..b3c1761412 100644 --- a/audio_soloud/step_05/macos/Runner/AppDelegate.swift +++ b/audio_soloud/step_05/macos/Runner/AppDelegate.swift @@ -6,4 +6,8 @@ class AppDelegate: FlutterAppDelegate { override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { return true } + + override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { + return true + } } diff --git a/audio_soloud/step_06/.gitignore b/audio_soloud/step_06/.gitignore index 29a3a5017f..79c113f9b5 100644 --- a/audio_soloud/step_06/.gitignore +++ b/audio_soloud/step_06/.gitignore @@ -5,9 +5,11 @@ *.swp .DS_Store .atom/ +.build/ .buildlog/ .history .svn/ +.swiftpm/ migrate_working_dir/ # IntelliJ related diff --git a/audio_soloud/step_06/ios/Runner.xcodeproj/project.pbxproj b/audio_soloud/step_06/ios/Runner.xcodeproj/project.pbxproj index bc497dff98..78c3338736 100644 --- a/audio_soloud/step_06/ios/Runner.xcodeproj/project.pbxproj +++ b/audio_soloud/step_06/ios/Runner.xcodeproj/project.pbxproj @@ -8,14 +8,14 @@ /* Begin PBXBuildFile section */ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; - 2B0C23F77C98CBE7D196EE25 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 57DDEA73F66304F49A2BE54F /* Pods_RunnerTests.framework */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - B1E6B3223C98EBC109378B92 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8BE99D81E98E9F739F0F0CDD /* Pods_Runner.framework */; }; + C239903147E007ACE2539FF1 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 64271C2B15D5289E7A273234 /* Pods_Runner.framework */; }; + FD411C6D5C71698ACB812C16 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FA8209B958FEB61BC3944230 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -44,18 +44,19 @@ /* Begin PBXFileReference section */ 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 2A2F92ECBDFB8D6264B9D847 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 293F5491067EBC5019B765DA /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 2F8CD2D2F3F3094219372FF1 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 57DDEA73F66304F49A2BE54F /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 5FFF2B0D0B3FE850BDFFF1B4 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 607C5C89235EC713B8C81942 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 616EF572B3F38B0AAFD45993 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 64271C2B15D5289E7A273234 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 66CE0956CC2434D27E7C94D7 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 834811EBD7CFE5B1A51AEE40 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - 8BE99D81E98E9F739F0F0CDD /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 95B843EC0A7D8549D813A11E /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 95C3B45C72B55FC36CA6C1EF /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -63,16 +64,15 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - CC8AE2DC85ECFB82466E7296 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - D9693967CFADB58C9517556E /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + FA8209B958FEB61BC3944230 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 08DD36075E0947E0A246C0C3 /* Frameworks */ = { + 2D62EF768A55B90467C2DC36 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 2B0C23F77C98CBE7D196EE25 /* Pods_RunnerTests.framework in Frameworks */, + FD411C6D5C71698ACB812C16 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -80,7 +80,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - B1E6B3223C98EBC109378B92 /* Pods_Runner.framework in Frameworks */, + C239903147E007ACE2539FF1 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -95,11 +95,11 @@ path = RunnerTests; sourceTree = ""; }; - 444DE75936DFAA5F99D521C2 /* Frameworks */ = { + 84B8570AECF15F5B7E9ABCD4 /* Frameworks */ = { isa = PBXGroup; children = ( - 8BE99D81E98E9F739F0F0CDD /* Pods_Runner.framework */, - 57DDEA73F66304F49A2BE54F /* Pods_RunnerTests.framework */, + 64271C2B15D5289E7A273234 /* Pods_Runner.framework */, + FA8209B958FEB61BC3944230 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -122,8 +122,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - C781053A9E2356B6F20F5846 /* Pods */, - 444DE75936DFAA5F99D521C2 /* Frameworks */, + D90EC8F042F876C28292E594 /* Pods */, + 84B8570AECF15F5B7E9ABCD4 /* Frameworks */, ); sourceTree = ""; }; @@ -151,15 +151,15 @@ path = Runner; sourceTree = ""; }; - C781053A9E2356B6F20F5846 /* Pods */ = { + D90EC8F042F876C28292E594 /* Pods */ = { isa = PBXGroup; children = ( - 95C3B45C72B55FC36CA6C1EF /* Pods-Runner.debug.xcconfig */, - 95B843EC0A7D8549D813A11E /* Pods-Runner.release.xcconfig */, - 834811EBD7CFE5B1A51AEE40 /* Pods-Runner.profile.xcconfig */, - D9693967CFADB58C9517556E /* Pods-RunnerTests.debug.xcconfig */, - 2A2F92ECBDFB8D6264B9D847 /* Pods-RunnerTests.release.xcconfig */, - CC8AE2DC85ECFB82466E7296 /* Pods-RunnerTests.profile.xcconfig */, + 293F5491067EBC5019B765DA /* Pods-Runner.debug.xcconfig */, + 607C5C89235EC713B8C81942 /* Pods-Runner.release.xcconfig */, + 616EF572B3F38B0AAFD45993 /* Pods-Runner.profile.xcconfig */, + 5FFF2B0D0B3FE850BDFFF1B4 /* Pods-RunnerTests.debug.xcconfig */, + 66CE0956CC2434D27E7C94D7 /* Pods-RunnerTests.release.xcconfig */, + 2F8CD2D2F3F3094219372FF1 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - EBF274A22A80ABCE6A369346 /* [CP] Check Pods Manifest.lock */, + FB4A750F315CD4B3B7445826 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 08DD36075E0947E0A246C0C3 /* Frameworks */, + 2D62EF768A55B90467C2DC36 /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 62AC8376D2414F60A7BE0789 /* [CP] Check Pods Manifest.lock */, + D73333ECF2B7DB012811699D /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 933DEA12F0A22E1760A935F9 /* [CP] Embed Pods Frameworks */, + C0491FA95CBB4B76896F17FB /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -286,29 +286,22 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 62AC8376D2414F60A7BE0789 /* [CP] Check Pods Manifest.lock */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( ); + name = "Run Script"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - 933DEA12F0A22E1760A935F9 /* [CP] Embed Pods Frameworks */ = { + C0491FA95CBB4B76896F17FB /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -325,22 +318,29 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { + D73333ECF2B7DB012811699D /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "Run Script"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - EBF274A22A80ABCE6A369346 /* [CP] Check Pods Manifest.lock */ = { + FB4A750F315CD4B3B7445826 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = D9693967CFADB58C9517556E /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 5FFF2B0D0B3FE850BDFFF1B4 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 2A2F92ECBDFB8D6264B9D847 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 66CE0956CC2434D27E7C94D7 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = CC8AE2DC85ECFB82466E7296 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 2F8CD2D2F3F3094219372FF1 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/audio_soloud/step_06/macos/Runner.xcodeproj/project.pbxproj b/audio_soloud/step_06/macos/Runner.xcodeproj/project.pbxproj index ea336784b8..5db54b3cea 100644 --- a/audio_soloud/step_06/macos/Runner.xcodeproj/project.pbxproj +++ b/audio_soloud/step_06/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ + 2A999699495574DFF92F9C13 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 70CA73A69EDF65C4071EA773 /* Pods_RunnerTests.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 76DFACCE4300C352F2EB8A62 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 664A09801CF281205EE995EF /* Pods_RunnerTests.framework */; }; - D6A89633325E62A7FD2FDB22 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DDA0530D4D5DE80DD5982D5C /* Pods_Runner.framework */; }; + 75FA62EC905AFABA4C6D6257 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 221BFA348F774DE675CBCC12 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,7 +62,8 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 1D416ABD8F5A3399C6DA2EC7 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 221BFA348F774DE675CBCC12 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 22378825C86C3FCA9520398A /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -79,15 +80,14 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 592E16EE055DFACE2771A0F8 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 664A09801CF281205EE995EF /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 665D2332FAFD748F393CCDB5 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 37DAFECFA76D59E2A458BB07 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 3F74DD5097636041EA867C42 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 70CA73A69EDF65C4071EA773 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 8EB66CFABA6B979CA5E1A44E /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - C2575B69935ACB50284B89A2 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - DA93B1BE801C7281234DB717 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - DDA0530D4D5DE80DD5982D5C /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + BC1BA37313853A1980F86C0C /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + EF84E844E5DD67F17F27BA36 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + FCB14AEAECB87AE9FC4E9459 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 76DFACCE4300C352F2EB8A62 /* Pods_RunnerTests.framework in Frameworks */, + 2A999699495574DFF92F9C13 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,7 +103,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - D6A89633325E62A7FD2FDB22 /* Pods_Runner.framework in Frameworks */, + 75FA62EC905AFABA4C6D6257 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -137,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - C538B7F78DC03FEF6D876A67 /* Pods */, + 6BE4410505BBFC9196DDDE0E /* Pods */, ); sourceTree = ""; }; @@ -185,15 +185,15 @@ path = Runner; sourceTree = ""; }; - C538B7F78DC03FEF6D876A67 /* Pods */ = { + 6BE4410505BBFC9196DDDE0E /* Pods */ = { isa = PBXGroup; children = ( - C2575B69935ACB50284B89A2 /* Pods-Runner.debug.xcconfig */, - 592E16EE055DFACE2771A0F8 /* Pods-Runner.release.xcconfig */, - DA93B1BE801C7281234DB717 /* Pods-Runner.profile.xcconfig */, - 8EB66CFABA6B979CA5E1A44E /* Pods-RunnerTests.debug.xcconfig */, - 665D2332FAFD748F393CCDB5 /* Pods-RunnerTests.release.xcconfig */, - 1D416ABD8F5A3399C6DA2EC7 /* Pods-RunnerTests.profile.xcconfig */, + FCB14AEAECB87AE9FC4E9459 /* Pods-Runner.debug.xcconfig */, + BC1BA37313853A1980F86C0C /* Pods-Runner.release.xcconfig */, + 37DAFECFA76D59E2A458BB07 /* Pods-Runner.profile.xcconfig */, + 3F74DD5097636041EA867C42 /* Pods-RunnerTests.debug.xcconfig */, + 22378825C86C3FCA9520398A /* Pods-RunnerTests.release.xcconfig */, + EF84E844E5DD67F17F27BA36 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -202,8 +202,8 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - DDA0530D4D5DE80DD5982D5C /* Pods_Runner.framework */, - 664A09801CF281205EE995EF /* Pods_RunnerTests.framework */, + 221BFA348F774DE675CBCC12 /* Pods_Runner.framework */, + 70CA73A69EDF65C4071EA773 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - D5A04ACAB1D2D44506ACBF95 /* [CP] Check Pods Manifest.lock */, + 911DBE09204FE02F8AFBFF29 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - E1EEAD5D6C44810CB56DE3D6 /* [CP] Check Pods Manifest.lock */, + 46CFC3737DD0E472F2B60D50 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - AA9CAE603FE596B6C667AEC1 /* [CP] Embed Pods Frameworks */, + 84D778B3E1B9F06119D3EF71 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -361,46 +361,46 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - AA9CAE603FE596B6C667AEC1 /* [CP] Embed Pods Frameworks */ = { + 46CFC3737DD0E472F2B60D50 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - D5A04ACAB1D2D44506ACBF95 /* [CP] Check Pods Manifest.lock */ = { + 84D778B3E1B9F06119D3EF71 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - E1EEAD5D6C44810CB56DE3D6 /* [CP] Check Pods Manifest.lock */ = { + 911DBE09204FE02F8AFBFF29 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -415,7 +415,7 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 8EB66CFABA6B979CA5E1A44E /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 3F74DD5097636041EA867C42 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 665D2332FAFD748F393CCDB5 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 22378825C86C3FCA9520398A /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 1D416ABD8F5A3399C6DA2EC7 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = EF84E844E5DD67F17F27BA36 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/audio_soloud/step_06/macos/Runner/AppDelegate.swift b/audio_soloud/step_06/macos/Runner/AppDelegate.swift index 8e02df2888..b3c1761412 100644 --- a/audio_soloud/step_06/macos/Runner/AppDelegate.swift +++ b/audio_soloud/step_06/macos/Runner/AppDelegate.swift @@ -6,4 +6,8 @@ class AppDelegate: FlutterAppDelegate { override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { return true } + + override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { + return true + } } From 3efe5e11aec7ee1437a6cdabd3bc81e699a892c7 Mon Sep 17 00:00:00 2001 From: Brett Morgan Date: Sat, 19 Oct 2024 09:37:53 +1100 Subject: [PATCH 031/108] Update `testing_codelab` for flutter beta --- testing_codelab/step_03/.gitignore | 2 + .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../step_03/android/settings.gradle | 4 +- .../step_03/macos/Runner/AppDelegate.swift | 4 ++ testing_codelab/step_03/pubspec.yaml | 4 +- testing_codelab/step_04/.gitignore | 2 + .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../step_04/android/settings.gradle | 4 +- .../step_04/macos/Runner/AppDelegate.swift | 4 ++ testing_codelab/step_04/pubspec.yaml | 4 +- testing_codelab/step_05/.gitignore | 2 + .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../step_05/android/settings.gradle | 4 +- .../step_05/macos/Runner/AppDelegate.swift | 4 ++ testing_codelab/step_05/pubspec.yaml | 4 +- testing_codelab/step_06/.gitignore | 2 + .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../step_06/android/settings.gradle | 4 +- .../step_06/macos/Runner/AppDelegate.swift | 4 ++ testing_codelab/step_06/pubspec.yaml | 4 +- testing_codelab/step_07/.gitignore | 2 + .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../step_07/android/settings.gradle | 4 +- .../macos/Runner.xcodeproj/project.pbxproj | 58 +++++++++---------- .../step_07/macos/Runner/AppDelegate.swift | 4 ++ testing_codelab/step_07/pubspec.yaml | 4 +- testing_codelab/step_08/.gitignore | 2 + .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../step_08/android/settings.gradle | 4 +- .../macos/Runner.xcodeproj/project.pbxproj | 58 +++++++++---------- .../step_08/macos/Runner/AppDelegate.swift | 4 ++ testing_codelab/step_08/pubspec.yaml | 4 +- 32 files changed, 124 insertions(+), 88 deletions(-) diff --git a/testing_codelab/step_03/.gitignore b/testing_codelab/step_03/.gitignore index 29a3a5017f..79c113f9b5 100644 --- a/testing_codelab/step_03/.gitignore +++ b/testing_codelab/step_03/.gitignore @@ -5,9 +5,11 @@ *.swp .DS_Store .atom/ +.build/ .buildlog/ .history .svn/ +.swiftpm/ migrate_working_dir/ # IntelliJ related diff --git a/testing_codelab/step_03/android/gradle/wrapper/gradle-wrapper.properties b/testing_codelab/step_03/android/gradle/wrapper/gradle-wrapper.properties index e1ca574ef0..7bb2df6ba6 100644 --- a/testing_codelab/step_03/android/gradle/wrapper/gradle-wrapper.properties +++ b/testing_codelab/step_03/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip diff --git a/testing_codelab/step_03/android/settings.gradle b/testing_codelab/step_03/android/settings.gradle index 536165d35a..b9e43bd376 100644 --- a/testing_codelab/step_03/android/settings.gradle +++ b/testing_codelab/step_03/android/settings.gradle @@ -18,8 +18,8 @@ pluginManagement { plugins { id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "7.3.0" apply false - id "org.jetbrains.kotlin.android" version "1.7.10" apply false + id "com.android.application" version "8.1.0" apply false + id "org.jetbrains.kotlin.android" version "1.8.22" apply false } include ":app" diff --git a/testing_codelab/step_03/macos/Runner/AppDelegate.swift b/testing_codelab/step_03/macos/Runner/AppDelegate.swift index 8e02df2888..b3c1761412 100644 --- a/testing_codelab/step_03/macos/Runner/AppDelegate.swift +++ b/testing_codelab/step_03/macos/Runner/AppDelegate.swift @@ -6,4 +6,8 @@ class AppDelegate: FlutterAppDelegate { override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { return true } + + override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { + return true + } } diff --git a/testing_codelab/step_03/pubspec.yaml b/testing_codelab/step_03/pubspec.yaml index 5d597e44ad..6456008068 100644 --- a/testing_codelab/step_03/pubspec.yaml +++ b/testing_codelab/step_03/pubspec.yaml @@ -13,14 +13,14 @@ environment: dependencies: flutter: sdk: flutter - go_router: ^14.2.7 + go_router: ^14.3.0 provider: ^6.1.2 dev_dependencies: flutter_test: sdk: flutter flutter_lints: ^4.0.0 - test: ^1.25.7 + test: ^1.25.8 flutter_driver: sdk: flutter integration_test: diff --git a/testing_codelab/step_04/.gitignore b/testing_codelab/step_04/.gitignore index 29a3a5017f..79c113f9b5 100644 --- a/testing_codelab/step_04/.gitignore +++ b/testing_codelab/step_04/.gitignore @@ -5,9 +5,11 @@ *.swp .DS_Store .atom/ +.build/ .buildlog/ .history .svn/ +.swiftpm/ migrate_working_dir/ # IntelliJ related diff --git a/testing_codelab/step_04/android/gradle/wrapper/gradle-wrapper.properties b/testing_codelab/step_04/android/gradle/wrapper/gradle-wrapper.properties index e1ca574ef0..7bb2df6ba6 100644 --- a/testing_codelab/step_04/android/gradle/wrapper/gradle-wrapper.properties +++ b/testing_codelab/step_04/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip diff --git a/testing_codelab/step_04/android/settings.gradle b/testing_codelab/step_04/android/settings.gradle index 536165d35a..b9e43bd376 100644 --- a/testing_codelab/step_04/android/settings.gradle +++ b/testing_codelab/step_04/android/settings.gradle @@ -18,8 +18,8 @@ pluginManagement { plugins { id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "7.3.0" apply false - id "org.jetbrains.kotlin.android" version "1.7.10" apply false + id "com.android.application" version "8.1.0" apply false + id "org.jetbrains.kotlin.android" version "1.8.22" apply false } include ":app" diff --git a/testing_codelab/step_04/macos/Runner/AppDelegate.swift b/testing_codelab/step_04/macos/Runner/AppDelegate.swift index 8e02df2888..b3c1761412 100644 --- a/testing_codelab/step_04/macos/Runner/AppDelegate.swift +++ b/testing_codelab/step_04/macos/Runner/AppDelegate.swift @@ -6,4 +6,8 @@ class AppDelegate: FlutterAppDelegate { override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { return true } + + override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { + return true + } } diff --git a/testing_codelab/step_04/pubspec.yaml b/testing_codelab/step_04/pubspec.yaml index 5d597e44ad..6456008068 100644 --- a/testing_codelab/step_04/pubspec.yaml +++ b/testing_codelab/step_04/pubspec.yaml @@ -13,14 +13,14 @@ environment: dependencies: flutter: sdk: flutter - go_router: ^14.2.7 + go_router: ^14.3.0 provider: ^6.1.2 dev_dependencies: flutter_test: sdk: flutter flutter_lints: ^4.0.0 - test: ^1.25.7 + test: ^1.25.8 flutter_driver: sdk: flutter integration_test: diff --git a/testing_codelab/step_05/.gitignore b/testing_codelab/step_05/.gitignore index 29a3a5017f..79c113f9b5 100644 --- a/testing_codelab/step_05/.gitignore +++ b/testing_codelab/step_05/.gitignore @@ -5,9 +5,11 @@ *.swp .DS_Store .atom/ +.build/ .buildlog/ .history .svn/ +.swiftpm/ migrate_working_dir/ # IntelliJ related diff --git a/testing_codelab/step_05/android/gradle/wrapper/gradle-wrapper.properties b/testing_codelab/step_05/android/gradle/wrapper/gradle-wrapper.properties index e1ca574ef0..7bb2df6ba6 100644 --- a/testing_codelab/step_05/android/gradle/wrapper/gradle-wrapper.properties +++ b/testing_codelab/step_05/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip diff --git a/testing_codelab/step_05/android/settings.gradle b/testing_codelab/step_05/android/settings.gradle index 536165d35a..b9e43bd376 100644 --- a/testing_codelab/step_05/android/settings.gradle +++ b/testing_codelab/step_05/android/settings.gradle @@ -18,8 +18,8 @@ pluginManagement { plugins { id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "7.3.0" apply false - id "org.jetbrains.kotlin.android" version "1.7.10" apply false + id "com.android.application" version "8.1.0" apply false + id "org.jetbrains.kotlin.android" version "1.8.22" apply false } include ":app" diff --git a/testing_codelab/step_05/macos/Runner/AppDelegate.swift b/testing_codelab/step_05/macos/Runner/AppDelegate.swift index 8e02df2888..b3c1761412 100644 --- a/testing_codelab/step_05/macos/Runner/AppDelegate.swift +++ b/testing_codelab/step_05/macos/Runner/AppDelegate.swift @@ -6,4 +6,8 @@ class AppDelegate: FlutterAppDelegate { override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { return true } + + override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { + return true + } } diff --git a/testing_codelab/step_05/pubspec.yaml b/testing_codelab/step_05/pubspec.yaml index 5d597e44ad..6456008068 100644 --- a/testing_codelab/step_05/pubspec.yaml +++ b/testing_codelab/step_05/pubspec.yaml @@ -13,14 +13,14 @@ environment: dependencies: flutter: sdk: flutter - go_router: ^14.2.7 + go_router: ^14.3.0 provider: ^6.1.2 dev_dependencies: flutter_test: sdk: flutter flutter_lints: ^4.0.0 - test: ^1.25.7 + test: ^1.25.8 flutter_driver: sdk: flutter integration_test: diff --git a/testing_codelab/step_06/.gitignore b/testing_codelab/step_06/.gitignore index 29a3a5017f..79c113f9b5 100644 --- a/testing_codelab/step_06/.gitignore +++ b/testing_codelab/step_06/.gitignore @@ -5,9 +5,11 @@ *.swp .DS_Store .atom/ +.build/ .buildlog/ .history .svn/ +.swiftpm/ migrate_working_dir/ # IntelliJ related diff --git a/testing_codelab/step_06/android/gradle/wrapper/gradle-wrapper.properties b/testing_codelab/step_06/android/gradle/wrapper/gradle-wrapper.properties index e1ca574ef0..7bb2df6ba6 100644 --- a/testing_codelab/step_06/android/gradle/wrapper/gradle-wrapper.properties +++ b/testing_codelab/step_06/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip diff --git a/testing_codelab/step_06/android/settings.gradle b/testing_codelab/step_06/android/settings.gradle index 536165d35a..b9e43bd376 100644 --- a/testing_codelab/step_06/android/settings.gradle +++ b/testing_codelab/step_06/android/settings.gradle @@ -18,8 +18,8 @@ pluginManagement { plugins { id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "7.3.0" apply false - id "org.jetbrains.kotlin.android" version "1.7.10" apply false + id "com.android.application" version "8.1.0" apply false + id "org.jetbrains.kotlin.android" version "1.8.22" apply false } include ":app" diff --git a/testing_codelab/step_06/macos/Runner/AppDelegate.swift b/testing_codelab/step_06/macos/Runner/AppDelegate.swift index 8e02df2888..b3c1761412 100644 --- a/testing_codelab/step_06/macos/Runner/AppDelegate.swift +++ b/testing_codelab/step_06/macos/Runner/AppDelegate.swift @@ -6,4 +6,8 @@ class AppDelegate: FlutterAppDelegate { override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { return true } + + override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { + return true + } } diff --git a/testing_codelab/step_06/pubspec.yaml b/testing_codelab/step_06/pubspec.yaml index 5d597e44ad..6456008068 100644 --- a/testing_codelab/step_06/pubspec.yaml +++ b/testing_codelab/step_06/pubspec.yaml @@ -13,14 +13,14 @@ environment: dependencies: flutter: sdk: flutter - go_router: ^14.2.7 + go_router: ^14.3.0 provider: ^6.1.2 dev_dependencies: flutter_test: sdk: flutter flutter_lints: ^4.0.0 - test: ^1.25.7 + test: ^1.25.8 flutter_driver: sdk: flutter integration_test: diff --git a/testing_codelab/step_07/.gitignore b/testing_codelab/step_07/.gitignore index 29a3a5017f..79c113f9b5 100644 --- a/testing_codelab/step_07/.gitignore +++ b/testing_codelab/step_07/.gitignore @@ -5,9 +5,11 @@ *.swp .DS_Store .atom/ +.build/ .buildlog/ .history .svn/ +.swiftpm/ migrate_working_dir/ # IntelliJ related diff --git a/testing_codelab/step_07/android/gradle/wrapper/gradle-wrapper.properties b/testing_codelab/step_07/android/gradle/wrapper/gradle-wrapper.properties index e1ca574ef0..7bb2df6ba6 100644 --- a/testing_codelab/step_07/android/gradle/wrapper/gradle-wrapper.properties +++ b/testing_codelab/step_07/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip diff --git a/testing_codelab/step_07/android/settings.gradle b/testing_codelab/step_07/android/settings.gradle index 536165d35a..b9e43bd376 100644 --- a/testing_codelab/step_07/android/settings.gradle +++ b/testing_codelab/step_07/android/settings.gradle @@ -18,8 +18,8 @@ pluginManagement { plugins { id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "7.3.0" apply false - id "org.jetbrains.kotlin.android" version "1.7.10" apply false + id "com.android.application" version "8.1.0" apply false + id "org.jetbrains.kotlin.android" version "1.8.22" apply false } include ":app" diff --git a/testing_codelab/step_07/macos/Runner.xcodeproj/project.pbxproj b/testing_codelab/step_07/macos/Runner.xcodeproj/project.pbxproj index d154252060..372e0d44b7 100644 --- a/testing_codelab/step_07/macos/Runner.xcodeproj/project.pbxproj +++ b/testing_codelab/step_07/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ + 1488C5A9C2F84598CAC9C902 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8A4079373BB0FCF184332962 /* Pods_RunnerTests.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 67C1F0B746A053D191CADB6B /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 45A58CD66A623F0B76A52DF8 /* Pods_Runner.framework */; }; - D423F7DE055EC6926671E104 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A3FD8BBAA36AA0E5C720540E /* Pods_RunnerTests.framework */; }; + B85EF54B34F9C9BD6EE2D734 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A6C2731234E5752075934F11 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,9 +62,6 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 00704965E3C7CEEF09AD0F90 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - 05314F75B60025BB33A295EB /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - 1A1CBEDDDE1257F50BBA157D /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -81,13 +78,16 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 45A58CD66A623F0B76A52DF8 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 5C8E2EEE9F104DDD71D49AB1 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 6B2794AA2CE1D2A34FD0217B /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 7CC5256E800D75F5CC3E2573 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 856D0EF4F21EC855038BE3FF /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 87A8E5CE02ED23494E2D1E09 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 8A4079373BB0FCF184332962 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 960F1F1AC3283913D9EAF31A /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - A3FD8BBAA36AA0E5C720540E /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - A52F207F3C7FE1C0D031777C /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - D32C94663207BBE10164E74E /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + A6C2731234E5752075934F11 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + E1D3A53F9F47467D85C61C37 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - D423F7DE055EC6926671E104 /* Pods_RunnerTests.framework in Frameworks */, + 1488C5A9C2F84598CAC9C902 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,7 +103,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 67C1F0B746A053D191CADB6B /* Pods_Runner.framework in Frameworks */, + B85EF54B34F9C9BD6EE2D734 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -137,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 8F4612A998DA31F37DCC7658 /* Pods */, + C25B22F4A01832267B4E686C /* Pods */, ); sourceTree = ""; }; @@ -185,15 +185,15 @@ path = Runner; sourceTree = ""; }; - 8F4612A998DA31F37DCC7658 /* Pods */ = { + C25B22F4A01832267B4E686C /* Pods */ = { isa = PBXGroup; children = ( - 1A1CBEDDDE1257F50BBA157D /* Pods-Runner.debug.xcconfig */, - A52F207F3C7FE1C0D031777C /* Pods-Runner.release.xcconfig */, - D32C94663207BBE10164E74E /* Pods-Runner.profile.xcconfig */, - 7CC5256E800D75F5CC3E2573 /* Pods-RunnerTests.debug.xcconfig */, - 00704965E3C7CEEF09AD0F90 /* Pods-RunnerTests.release.xcconfig */, - 05314F75B60025BB33A295EB /* Pods-RunnerTests.profile.xcconfig */, + 5C8E2EEE9F104DDD71D49AB1 /* Pods-Runner.debug.xcconfig */, + 6B2794AA2CE1D2A34FD0217B /* Pods-Runner.release.xcconfig */, + 960F1F1AC3283913D9EAF31A /* Pods-Runner.profile.xcconfig */, + 87A8E5CE02ED23494E2D1E09 /* Pods-RunnerTests.debug.xcconfig */, + 856D0EF4F21EC855038BE3FF /* Pods-RunnerTests.release.xcconfig */, + E1D3A53F9F47467D85C61C37 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -202,8 +202,8 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - 45A58CD66A623F0B76A52DF8 /* Pods_Runner.framework */, - A3FD8BBAA36AA0E5C720540E /* Pods_RunnerTests.framework */, + A6C2731234E5752075934F11 /* Pods_Runner.framework */, + 8A4079373BB0FCF184332962 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - C67B157E208D5423D989A032 /* [CP] Check Pods Manifest.lock */, + DACFB3DA3FA46D6685ED3785 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,7 +234,7 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 471378B7F9CCD36B98D37BC4 /* [CP] Check Pods Manifest.lock */, + A3AD0D91F5F60D2CD3B847FA /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, @@ -360,7 +360,7 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 471378B7F9CCD36B98D37BC4 /* [CP] Check Pods Manifest.lock */ = { + A3AD0D91F5F60D2CD3B847FA /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -382,7 +382,7 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - C67B157E208D5423D989A032 /* [CP] Check Pods Manifest.lock */ = { + DACFB3DA3FA46D6685ED3785 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -455,7 +455,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 7CC5256E800D75F5CC3E2573 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 87A8E5CE02ED23494E2D1E09 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -470,7 +470,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 00704965E3C7CEEF09AD0F90 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 856D0EF4F21EC855038BE3FF /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -485,7 +485,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 05314F75B60025BB33A295EB /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = E1D3A53F9F47467D85C61C37 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/testing_codelab/step_07/macos/Runner/AppDelegate.swift b/testing_codelab/step_07/macos/Runner/AppDelegate.swift index 8e02df2888..b3c1761412 100644 --- a/testing_codelab/step_07/macos/Runner/AppDelegate.swift +++ b/testing_codelab/step_07/macos/Runner/AppDelegate.swift @@ -6,4 +6,8 @@ class AppDelegate: FlutterAppDelegate { override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { return true } + + override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { + return true + } } diff --git a/testing_codelab/step_07/pubspec.yaml b/testing_codelab/step_07/pubspec.yaml index 5d597e44ad..6456008068 100644 --- a/testing_codelab/step_07/pubspec.yaml +++ b/testing_codelab/step_07/pubspec.yaml @@ -13,14 +13,14 @@ environment: dependencies: flutter: sdk: flutter - go_router: ^14.2.7 + go_router: ^14.3.0 provider: ^6.1.2 dev_dependencies: flutter_test: sdk: flutter flutter_lints: ^4.0.0 - test: ^1.25.7 + test: ^1.25.8 flutter_driver: sdk: flutter integration_test: diff --git a/testing_codelab/step_08/.gitignore b/testing_codelab/step_08/.gitignore index 29a3a5017f..79c113f9b5 100644 --- a/testing_codelab/step_08/.gitignore +++ b/testing_codelab/step_08/.gitignore @@ -5,9 +5,11 @@ *.swp .DS_Store .atom/ +.build/ .buildlog/ .history .svn/ +.swiftpm/ migrate_working_dir/ # IntelliJ related diff --git a/testing_codelab/step_08/android/gradle/wrapper/gradle-wrapper.properties b/testing_codelab/step_08/android/gradle/wrapper/gradle-wrapper.properties index e1ca574ef0..7bb2df6ba6 100644 --- a/testing_codelab/step_08/android/gradle/wrapper/gradle-wrapper.properties +++ b/testing_codelab/step_08/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip diff --git a/testing_codelab/step_08/android/settings.gradle b/testing_codelab/step_08/android/settings.gradle index 536165d35a..b9e43bd376 100644 --- a/testing_codelab/step_08/android/settings.gradle +++ b/testing_codelab/step_08/android/settings.gradle @@ -18,8 +18,8 @@ pluginManagement { plugins { id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "7.3.0" apply false - id "org.jetbrains.kotlin.android" version "1.7.10" apply false + id "com.android.application" version "8.1.0" apply false + id "org.jetbrains.kotlin.android" version "1.8.22" apply false } include ":app" diff --git a/testing_codelab/step_08/macos/Runner.xcodeproj/project.pbxproj b/testing_codelab/step_08/macos/Runner.xcodeproj/project.pbxproj index d154252060..372e0d44b7 100644 --- a/testing_codelab/step_08/macos/Runner.xcodeproj/project.pbxproj +++ b/testing_codelab/step_08/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ + 1488C5A9C2F84598CAC9C902 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8A4079373BB0FCF184332962 /* Pods_RunnerTests.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 67C1F0B746A053D191CADB6B /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 45A58CD66A623F0B76A52DF8 /* Pods_Runner.framework */; }; - D423F7DE055EC6926671E104 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A3FD8BBAA36AA0E5C720540E /* Pods_RunnerTests.framework */; }; + B85EF54B34F9C9BD6EE2D734 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A6C2731234E5752075934F11 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,9 +62,6 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 00704965E3C7CEEF09AD0F90 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - 05314F75B60025BB33A295EB /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - 1A1CBEDDDE1257F50BBA157D /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -81,13 +78,16 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 45A58CD66A623F0B76A52DF8 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 5C8E2EEE9F104DDD71D49AB1 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 6B2794AA2CE1D2A34FD0217B /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 7CC5256E800D75F5CC3E2573 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 856D0EF4F21EC855038BE3FF /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 87A8E5CE02ED23494E2D1E09 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 8A4079373BB0FCF184332962 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 960F1F1AC3283913D9EAF31A /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - A3FD8BBAA36AA0E5C720540E /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - A52F207F3C7FE1C0D031777C /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - D32C94663207BBE10164E74E /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + A6C2731234E5752075934F11 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + E1D3A53F9F47467D85C61C37 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - D423F7DE055EC6926671E104 /* Pods_RunnerTests.framework in Frameworks */, + 1488C5A9C2F84598CAC9C902 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,7 +103,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 67C1F0B746A053D191CADB6B /* Pods_Runner.framework in Frameworks */, + B85EF54B34F9C9BD6EE2D734 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -137,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 8F4612A998DA31F37DCC7658 /* Pods */, + C25B22F4A01832267B4E686C /* Pods */, ); sourceTree = ""; }; @@ -185,15 +185,15 @@ path = Runner; sourceTree = ""; }; - 8F4612A998DA31F37DCC7658 /* Pods */ = { + C25B22F4A01832267B4E686C /* Pods */ = { isa = PBXGroup; children = ( - 1A1CBEDDDE1257F50BBA157D /* Pods-Runner.debug.xcconfig */, - A52F207F3C7FE1C0D031777C /* Pods-Runner.release.xcconfig */, - D32C94663207BBE10164E74E /* Pods-Runner.profile.xcconfig */, - 7CC5256E800D75F5CC3E2573 /* Pods-RunnerTests.debug.xcconfig */, - 00704965E3C7CEEF09AD0F90 /* Pods-RunnerTests.release.xcconfig */, - 05314F75B60025BB33A295EB /* Pods-RunnerTests.profile.xcconfig */, + 5C8E2EEE9F104DDD71D49AB1 /* Pods-Runner.debug.xcconfig */, + 6B2794AA2CE1D2A34FD0217B /* Pods-Runner.release.xcconfig */, + 960F1F1AC3283913D9EAF31A /* Pods-Runner.profile.xcconfig */, + 87A8E5CE02ED23494E2D1E09 /* Pods-RunnerTests.debug.xcconfig */, + 856D0EF4F21EC855038BE3FF /* Pods-RunnerTests.release.xcconfig */, + E1D3A53F9F47467D85C61C37 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -202,8 +202,8 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - 45A58CD66A623F0B76A52DF8 /* Pods_Runner.framework */, - A3FD8BBAA36AA0E5C720540E /* Pods_RunnerTests.framework */, + A6C2731234E5752075934F11 /* Pods_Runner.framework */, + 8A4079373BB0FCF184332962 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - C67B157E208D5423D989A032 /* [CP] Check Pods Manifest.lock */, + DACFB3DA3FA46D6685ED3785 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,7 +234,7 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 471378B7F9CCD36B98D37BC4 /* [CP] Check Pods Manifest.lock */, + A3AD0D91F5F60D2CD3B847FA /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, @@ -360,7 +360,7 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 471378B7F9CCD36B98D37BC4 /* [CP] Check Pods Manifest.lock */ = { + A3AD0D91F5F60D2CD3B847FA /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -382,7 +382,7 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - C67B157E208D5423D989A032 /* [CP] Check Pods Manifest.lock */ = { + DACFB3DA3FA46D6685ED3785 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -455,7 +455,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 7CC5256E800D75F5CC3E2573 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 87A8E5CE02ED23494E2D1E09 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -470,7 +470,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 00704965E3C7CEEF09AD0F90 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 856D0EF4F21EC855038BE3FF /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -485,7 +485,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 05314F75B60025BB33A295EB /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = E1D3A53F9F47467D85C61C37 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/testing_codelab/step_08/macos/Runner/AppDelegate.swift b/testing_codelab/step_08/macos/Runner/AppDelegate.swift index 8e02df2888..b3c1761412 100644 --- a/testing_codelab/step_08/macos/Runner/AppDelegate.swift +++ b/testing_codelab/step_08/macos/Runner/AppDelegate.swift @@ -6,4 +6,8 @@ class AppDelegate: FlutterAppDelegate { override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { return true } + + override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { + return true + } } diff --git a/testing_codelab/step_08/pubspec.yaml b/testing_codelab/step_08/pubspec.yaml index 5d597e44ad..6456008068 100644 --- a/testing_codelab/step_08/pubspec.yaml +++ b/testing_codelab/step_08/pubspec.yaml @@ -13,14 +13,14 @@ environment: dependencies: flutter: sdk: flutter - go_router: ^14.2.7 + go_router: ^14.3.0 provider: ^6.1.2 dev_dependencies: flutter_test: sdk: flutter flutter_lints: ^4.0.0 - test: ^1.25.7 + test: ^1.25.8 flutter_driver: sdk: flutter integration_test: From 4f07ad3154a6b0148e79c363a5845b571b8a6b36 Mon Sep 17 00:00:00 2001 From: Brett Morgan Date: Sat, 19 Oct 2024 09:51:47 +1100 Subject: [PATCH 032/108] Update `webview_flutter` for flutter beta --- webview_flutter/codelab_rebuild.yaml | 6 +- webview_flutter/step_03/.gitignore | 2 + .../step_03/android/app/build.gradle | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../step_03/android/settings.gradle | 4 +- .../ios/Runner.xcodeproj/project.pbxproj | 134 +++++++++--------- webview_flutter/step_03/pubspec.yaml | 4 +- webview_flutter/step_04/.gitignore | 2 + .../step_04/android/app/build.gradle | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../step_04/android/settings.gradle | 4 +- .../ios/Runner.xcodeproj/project.pbxproj | 134 +++++++++--------- webview_flutter/step_04/pubspec.yaml | 4 +- webview_flutter/step_05/.gitignore | 2 + .../step_05/android/app/build.gradle | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../step_05/android/settings.gradle | 4 +- .../ios/Runner.xcodeproj/project.pbxproj | 134 +++++++++--------- webview_flutter/step_05/pubspec.yaml | 4 +- webview_flutter/step_06/.gitignore | 2 + .../step_06/android/app/build.gradle | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../step_06/android/settings.gradle | 4 +- .../ios/Runner.xcodeproj/project.pbxproj | 134 +++++++++--------- webview_flutter/step_06/pubspec.yaml | 4 +- webview_flutter/step_07/.gitignore | 2 + .../step_07/android/app/build.gradle | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../step_07/android/settings.gradle | 4 +- .../ios/Runner.xcodeproj/project.pbxproj | 134 +++++++++--------- webview_flutter/step_07/pubspec.yaml | 4 +- webview_flutter/step_08/.gitignore | 2 + .../step_08/android/app/build.gradle | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../step_08/android/settings.gradle | 4 +- .../ios/Runner.xcodeproj/project.pbxproj | 134 +++++++++--------- webview_flutter/step_08/pubspec.yaml | 4 +- webview_flutter/step_09/.gitignore | 2 + .../step_09/android/app/build.gradle | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../step_09/android/settings.gradle | 4 +- .../ios/Runner.xcodeproj/project.pbxproj | 134 +++++++++--------- webview_flutter/step_09/pubspec.yaml | 4 +- webview_flutter/step_10/.gitignore | 2 + .../step_10/android/app/build.gradle | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../step_10/android/settings.gradle | 4 +- .../ios/Runner.xcodeproj/project.pbxproj | 134 +++++++++--------- webview_flutter/step_10/pubspec.yaml | 4 +- webview_flutter/step_11/.gitignore | 2 + .../step_11/android/app/build.gradle | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../step_11/android/settings.gradle | 4 +- .../ios/Runner.xcodeproj/project.pbxproj | 134 +++++++++--------- webview_flutter/step_11/pubspec.yaml | 4 +- webview_flutter/step_12/.gitignore | 2 + .../step_12/android/app/build.gradle | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../step_12/android/settings.gradle | 4 +- .../ios/Runner.xcodeproj/project.pbxproj | 134 +++++++++--------- webview_flutter/step_12/pubspec.yaml | 4 +- 61 files changed, 755 insertions(+), 731 deletions(-) diff --git a/webview_flutter/codelab_rebuild.yaml b/webview_flutter/codelab_rebuild.yaml index df2074848a..330bae3ab4 100644 --- a/webview_flutter/codelab_rebuild.yaml +++ b/webview_flutter/codelab_rebuild.yaml @@ -52,7 +52,7 @@ steps: // You can update the following values to match your application needs. // For more information, see: https://flutter.dev/to/review-gradle-config. - minSdk = flutter.minSdkVersion - + minSdk = 20 + + minSdk = 21 targetSdk = flutter.targetSdkVersion versionCode = flutter.versionCode versionName = flutter.versionName @@ -60,6 +60,10 @@ steps: platforms: [ macos ] path: webview_in_flutter flutter: build ios --simulator + - name: Build Android + platforms: [ macos ] + path: webview_in_flutter + flutter: build apk - name: Copy step_03 copydir: from: webview_in_flutter diff --git a/webview_flutter/step_03/.gitignore b/webview_flutter/step_03/.gitignore index 29a3a5017f..79c113f9b5 100644 --- a/webview_flutter/step_03/.gitignore +++ b/webview_flutter/step_03/.gitignore @@ -5,9 +5,11 @@ *.swp .DS_Store .atom/ +.build/ .buildlog/ .history .svn/ +.swiftpm/ migrate_working_dir/ # IntelliJ related diff --git a/webview_flutter/step_03/android/app/build.gradle b/webview_flutter/step_03/android/app/build.gradle index 13f68a50de..9e345ad06f 100644 --- a/webview_flutter/step_03/android/app/build.gradle +++ b/webview_flutter/step_03/android/app/build.gradle @@ -24,7 +24,7 @@ android { applicationId = "com.example.webview_in_flutter" // You can update the following values to match your application needs. // For more information, see: https://flutter.dev/to/review-gradle-config. - minSdk = 20 + minSdk = 21 targetSdk = flutter.targetSdkVersion versionCode = flutter.versionCode versionName = flutter.versionName diff --git a/webview_flutter/step_03/android/gradle/wrapper/gradle-wrapper.properties b/webview_flutter/step_03/android/gradle/wrapper/gradle-wrapper.properties index e1ca574ef0..7bb2df6ba6 100644 --- a/webview_flutter/step_03/android/gradle/wrapper/gradle-wrapper.properties +++ b/webview_flutter/step_03/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip diff --git a/webview_flutter/step_03/android/settings.gradle b/webview_flutter/step_03/android/settings.gradle index 536165d35a..b9e43bd376 100644 --- a/webview_flutter/step_03/android/settings.gradle +++ b/webview_flutter/step_03/android/settings.gradle @@ -18,8 +18,8 @@ pluginManagement { plugins { id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "7.3.0" apply false - id "org.jetbrains.kotlin.android" version "1.7.10" apply false + id "com.android.application" version "8.1.0" apply false + id "org.jetbrains.kotlin.android" version "1.8.22" apply false } include ":app" diff --git a/webview_flutter/step_03/ios/Runner.xcodeproj/project.pbxproj b/webview_flutter/step_03/ios/Runner.xcodeproj/project.pbxproj index cf51903b09..8f6e3ffc09 100644 --- a/webview_flutter/step_03/ios/Runner.xcodeproj/project.pbxproj +++ b/webview_flutter/step_03/ios/Runner.xcodeproj/project.pbxproj @@ -14,8 +14,8 @@ 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - B9DE530C7B15745FBC6089B3 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1DF215D2045A862AA16E337D /* Pods_Runner.framework */; }; - D63B4C76C7AB9736D882CA16 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F8811F5E8715C99DA35A84D6 /* Pods_RunnerTests.framework */; }; + AAC2E12D306CAB59FFBBCD45 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0D4620345C5D87B0E7060169 /* Pods_Runner.framework */; }; + F5B795DBC53CA272FBEFA879 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D99586C11302D0BD51376E49 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,19 +42,16 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 08FD4DDEEB83912CF46C4224 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 0D4620345C5D87B0E7060169 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 1DF215D2045A862AA16E337D /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 26698DC1B810E2C00BB7B378 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 27C8E373455216AE4DA82D9B /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 3C97732FF1EA5C9DAA9F391D /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - 63E625B586191DEAC303C062 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 531C22CC0DE7F035D9A34AA8 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; - 79F89EA0A8A52B57C3BF1E52 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; @@ -63,16 +60,19 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - E1CD57D06D4BEE1194540422 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - F8811F5E8715C99DA35A84D6 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 98E54C4176D400311D9B31BA /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + A916079A171A129DC4E2A044 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + B55481032FB34D452CFFA8F4 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + D99586C11302D0BD51376E49 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + E5FD24814B513998232432D1 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 2C10B07186173E1D877E0FB4 /* Frameworks */ = { + 2FEC5FC3719CD823CD6B55B8 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - D63B4C76C7AB9736D882CA16 /* Pods_RunnerTests.framework in Frameworks */, + F5B795DBC53CA272FBEFA879 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -80,7 +80,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - B9DE530C7B15745FBC6089B3 /* Pods_Runner.framework in Frameworks */, + AAC2E12D306CAB59FFBBCD45 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -95,18 +95,13 @@ path = RunnerTests; sourceTree = ""; }; - 8156CC600B09FA299845756B /* Pods */ = { + 970CAEF4A0EA5D94B91BBBA3 /* Frameworks */ = { isa = PBXGroup; children = ( - 79F89EA0A8A52B57C3BF1E52 /* Pods-Runner.debug.xcconfig */, - 26698DC1B810E2C00BB7B378 /* Pods-Runner.release.xcconfig */, - 27C8E373455216AE4DA82D9B /* Pods-Runner.profile.xcconfig */, - 63E625B586191DEAC303C062 /* Pods-RunnerTests.debug.xcconfig */, - E1CD57D06D4BEE1194540422 /* Pods-RunnerTests.release.xcconfig */, - 3C97732FF1EA5C9DAA9F391D /* Pods-RunnerTests.profile.xcconfig */, + 0D4620345C5D87B0E7060169 /* Pods_Runner.framework */, + D99586C11302D0BD51376E49 /* Pods_RunnerTests.framework */, ); - name = Pods; - path = Pods; + name = Frameworks; sourceTree = ""; }; 9740EEB11CF90186004384FC /* Flutter */ = { @@ -127,8 +122,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - 8156CC600B09FA299845756B /* Pods */, - D255FAC6646F2E9A1C64FB51 /* Frameworks */, + E587FBDAF5D3BEFD5D2C0C4F /* Pods */, + 970CAEF4A0EA5D94B91BBBA3 /* Frameworks */, ); sourceTree = ""; }; @@ -156,13 +151,18 @@ path = Runner; sourceTree = ""; }; - D255FAC6646F2E9A1C64FB51 /* Frameworks */ = { + E587FBDAF5D3BEFD5D2C0C4F /* Pods */ = { isa = PBXGroup; children = ( - 1DF215D2045A862AA16E337D /* Pods_Runner.framework */, - F8811F5E8715C99DA35A84D6 /* Pods_RunnerTests.framework */, + A916079A171A129DC4E2A044 /* Pods-Runner.debug.xcconfig */, + B55481032FB34D452CFFA8F4 /* Pods-Runner.release.xcconfig */, + 531C22CC0DE7F035D9A34AA8 /* Pods-Runner.profile.xcconfig */, + 08FD4DDEEB83912CF46C4224 /* Pods-RunnerTests.debug.xcconfig */, + 98E54C4176D400311D9B31BA /* Pods-RunnerTests.release.xcconfig */, + E5FD24814B513998232432D1 /* Pods-RunnerTests.profile.xcconfig */, ); - name = Frameworks; + name = Pods; + path = Pods; sourceTree = ""; }; /* End PBXGroup section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 92AAEFC9448918682FC02E39 /* [CP] Check Pods Manifest.lock */, + 608B22E300D6DE6B6AAD535A /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 2C10B07186173E1D877E0FB4 /* Frameworks */, + 2FEC5FC3719CD823CD6B55B8 /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - E6E819BC2848B8F7350740CF /* [CP] Check Pods Manifest.lock */, + 662E2EF6148D023D7E7DB791 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 9CC5405ADE547F481588188A /* [CP] Embed Pods Frameworks */, + 284DD42A03DD50B0335DA1F5 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -270,6 +270,23 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ + 284DD42A03DD50B0335DA1F5 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -286,7 +303,7 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 92AAEFC9448918682FC02E39 /* [CP] Check Pods Manifest.lock */ = { + 608B22E300D6DE6B6AAD535A /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -308,59 +325,42 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { - isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "Run Script"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; - }; - 9CC5405ADE547F481588188A /* [CP] Embed Pods Frameworks */ = { + 662E2EF6148D023D7E7DB791 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - E6E819BC2848B8F7350740CF /* [CP] Check Pods Manifest.lock */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( ); + name = "Run Script"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; /* End PBXShellScriptBuildPhase section */ @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 63E625B586191DEAC303C062 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 08FD4DDEEB83912CF46C4224 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = E1CD57D06D4BEE1194540422 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 98E54C4176D400311D9B31BA /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 3C97732FF1EA5C9DAA9F391D /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = E5FD24814B513998232432D1 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/webview_flutter/step_03/pubspec.yaml b/webview_flutter/step_03/pubspec.yaml index 807b2b2902..310f8ce028 100644 --- a/webview_flutter/step_03/pubspec.yaml +++ b/webview_flutter/step_03/pubspec.yaml @@ -35,7 +35,7 @@ dependencies: # The following adds the Cupertino Icons font to your application. # Use with the CupertinoIcons class for iOS style icons. cupertino_icons: ^1.0.8 - webview_flutter: ^4.9.0 + webview_flutter: ^4.10.0 dev_dependencies: flutter_test: @@ -46,7 +46,7 @@ dev_dependencies: # activated in the `analysis_options.yaml` file located at the root of your # package. See that file for information about deactivating specific lint # rules and activating additional ones. - flutter_lints: ^4.0.0 + flutter_lints: ^5.0.0 # For information on the generic Dart part of this file, see the # following page: https://dart.dev/tools/pub/pubspec diff --git a/webview_flutter/step_04/.gitignore b/webview_flutter/step_04/.gitignore index 29a3a5017f..79c113f9b5 100644 --- a/webview_flutter/step_04/.gitignore +++ b/webview_flutter/step_04/.gitignore @@ -5,9 +5,11 @@ *.swp .DS_Store .atom/ +.build/ .buildlog/ .history .svn/ +.swiftpm/ migrate_working_dir/ # IntelliJ related diff --git a/webview_flutter/step_04/android/app/build.gradle b/webview_flutter/step_04/android/app/build.gradle index 13f68a50de..9e345ad06f 100644 --- a/webview_flutter/step_04/android/app/build.gradle +++ b/webview_flutter/step_04/android/app/build.gradle @@ -24,7 +24,7 @@ android { applicationId = "com.example.webview_in_flutter" // You can update the following values to match your application needs. // For more information, see: https://flutter.dev/to/review-gradle-config. - minSdk = 20 + minSdk = 21 targetSdk = flutter.targetSdkVersion versionCode = flutter.versionCode versionName = flutter.versionName diff --git a/webview_flutter/step_04/android/gradle/wrapper/gradle-wrapper.properties b/webview_flutter/step_04/android/gradle/wrapper/gradle-wrapper.properties index e1ca574ef0..7bb2df6ba6 100644 --- a/webview_flutter/step_04/android/gradle/wrapper/gradle-wrapper.properties +++ b/webview_flutter/step_04/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip diff --git a/webview_flutter/step_04/android/settings.gradle b/webview_flutter/step_04/android/settings.gradle index 536165d35a..b9e43bd376 100644 --- a/webview_flutter/step_04/android/settings.gradle +++ b/webview_flutter/step_04/android/settings.gradle @@ -18,8 +18,8 @@ pluginManagement { plugins { id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "7.3.0" apply false - id "org.jetbrains.kotlin.android" version "1.7.10" apply false + id "com.android.application" version "8.1.0" apply false + id "org.jetbrains.kotlin.android" version "1.8.22" apply false } include ":app" diff --git a/webview_flutter/step_04/ios/Runner.xcodeproj/project.pbxproj b/webview_flutter/step_04/ios/Runner.xcodeproj/project.pbxproj index cf51903b09..8f6e3ffc09 100644 --- a/webview_flutter/step_04/ios/Runner.xcodeproj/project.pbxproj +++ b/webview_flutter/step_04/ios/Runner.xcodeproj/project.pbxproj @@ -14,8 +14,8 @@ 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - B9DE530C7B15745FBC6089B3 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1DF215D2045A862AA16E337D /* Pods_Runner.framework */; }; - D63B4C76C7AB9736D882CA16 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F8811F5E8715C99DA35A84D6 /* Pods_RunnerTests.framework */; }; + AAC2E12D306CAB59FFBBCD45 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0D4620345C5D87B0E7060169 /* Pods_Runner.framework */; }; + F5B795DBC53CA272FBEFA879 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D99586C11302D0BD51376E49 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,19 +42,16 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 08FD4DDEEB83912CF46C4224 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 0D4620345C5D87B0E7060169 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 1DF215D2045A862AA16E337D /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 26698DC1B810E2C00BB7B378 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 27C8E373455216AE4DA82D9B /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 3C97732FF1EA5C9DAA9F391D /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - 63E625B586191DEAC303C062 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 531C22CC0DE7F035D9A34AA8 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; - 79F89EA0A8A52B57C3BF1E52 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; @@ -63,16 +60,19 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - E1CD57D06D4BEE1194540422 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - F8811F5E8715C99DA35A84D6 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 98E54C4176D400311D9B31BA /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + A916079A171A129DC4E2A044 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + B55481032FB34D452CFFA8F4 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + D99586C11302D0BD51376E49 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + E5FD24814B513998232432D1 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 2C10B07186173E1D877E0FB4 /* Frameworks */ = { + 2FEC5FC3719CD823CD6B55B8 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - D63B4C76C7AB9736D882CA16 /* Pods_RunnerTests.framework in Frameworks */, + F5B795DBC53CA272FBEFA879 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -80,7 +80,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - B9DE530C7B15745FBC6089B3 /* Pods_Runner.framework in Frameworks */, + AAC2E12D306CAB59FFBBCD45 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -95,18 +95,13 @@ path = RunnerTests; sourceTree = ""; }; - 8156CC600B09FA299845756B /* Pods */ = { + 970CAEF4A0EA5D94B91BBBA3 /* Frameworks */ = { isa = PBXGroup; children = ( - 79F89EA0A8A52B57C3BF1E52 /* Pods-Runner.debug.xcconfig */, - 26698DC1B810E2C00BB7B378 /* Pods-Runner.release.xcconfig */, - 27C8E373455216AE4DA82D9B /* Pods-Runner.profile.xcconfig */, - 63E625B586191DEAC303C062 /* Pods-RunnerTests.debug.xcconfig */, - E1CD57D06D4BEE1194540422 /* Pods-RunnerTests.release.xcconfig */, - 3C97732FF1EA5C9DAA9F391D /* Pods-RunnerTests.profile.xcconfig */, + 0D4620345C5D87B0E7060169 /* Pods_Runner.framework */, + D99586C11302D0BD51376E49 /* Pods_RunnerTests.framework */, ); - name = Pods; - path = Pods; + name = Frameworks; sourceTree = ""; }; 9740EEB11CF90186004384FC /* Flutter */ = { @@ -127,8 +122,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - 8156CC600B09FA299845756B /* Pods */, - D255FAC6646F2E9A1C64FB51 /* Frameworks */, + E587FBDAF5D3BEFD5D2C0C4F /* Pods */, + 970CAEF4A0EA5D94B91BBBA3 /* Frameworks */, ); sourceTree = ""; }; @@ -156,13 +151,18 @@ path = Runner; sourceTree = ""; }; - D255FAC6646F2E9A1C64FB51 /* Frameworks */ = { + E587FBDAF5D3BEFD5D2C0C4F /* Pods */ = { isa = PBXGroup; children = ( - 1DF215D2045A862AA16E337D /* Pods_Runner.framework */, - F8811F5E8715C99DA35A84D6 /* Pods_RunnerTests.framework */, + A916079A171A129DC4E2A044 /* Pods-Runner.debug.xcconfig */, + B55481032FB34D452CFFA8F4 /* Pods-Runner.release.xcconfig */, + 531C22CC0DE7F035D9A34AA8 /* Pods-Runner.profile.xcconfig */, + 08FD4DDEEB83912CF46C4224 /* Pods-RunnerTests.debug.xcconfig */, + 98E54C4176D400311D9B31BA /* Pods-RunnerTests.release.xcconfig */, + E5FD24814B513998232432D1 /* Pods-RunnerTests.profile.xcconfig */, ); - name = Frameworks; + name = Pods; + path = Pods; sourceTree = ""; }; /* End PBXGroup section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 92AAEFC9448918682FC02E39 /* [CP] Check Pods Manifest.lock */, + 608B22E300D6DE6B6AAD535A /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 2C10B07186173E1D877E0FB4 /* Frameworks */, + 2FEC5FC3719CD823CD6B55B8 /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - E6E819BC2848B8F7350740CF /* [CP] Check Pods Manifest.lock */, + 662E2EF6148D023D7E7DB791 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 9CC5405ADE547F481588188A /* [CP] Embed Pods Frameworks */, + 284DD42A03DD50B0335DA1F5 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -270,6 +270,23 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ + 284DD42A03DD50B0335DA1F5 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -286,7 +303,7 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 92AAEFC9448918682FC02E39 /* [CP] Check Pods Manifest.lock */ = { + 608B22E300D6DE6B6AAD535A /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -308,59 +325,42 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { - isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "Run Script"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; - }; - 9CC5405ADE547F481588188A /* [CP] Embed Pods Frameworks */ = { + 662E2EF6148D023D7E7DB791 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - E6E819BC2848B8F7350740CF /* [CP] Check Pods Manifest.lock */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( ); + name = "Run Script"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; /* End PBXShellScriptBuildPhase section */ @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 63E625B586191DEAC303C062 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 08FD4DDEEB83912CF46C4224 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = E1CD57D06D4BEE1194540422 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 98E54C4176D400311D9B31BA /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 3C97732FF1EA5C9DAA9F391D /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = E5FD24814B513998232432D1 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/webview_flutter/step_04/pubspec.yaml b/webview_flutter/step_04/pubspec.yaml index 807b2b2902..310f8ce028 100644 --- a/webview_flutter/step_04/pubspec.yaml +++ b/webview_flutter/step_04/pubspec.yaml @@ -35,7 +35,7 @@ dependencies: # The following adds the Cupertino Icons font to your application. # Use with the CupertinoIcons class for iOS style icons. cupertino_icons: ^1.0.8 - webview_flutter: ^4.9.0 + webview_flutter: ^4.10.0 dev_dependencies: flutter_test: @@ -46,7 +46,7 @@ dev_dependencies: # activated in the `analysis_options.yaml` file located at the root of your # package. See that file for information about deactivating specific lint # rules and activating additional ones. - flutter_lints: ^4.0.0 + flutter_lints: ^5.0.0 # For information on the generic Dart part of this file, see the # following page: https://dart.dev/tools/pub/pubspec diff --git a/webview_flutter/step_05/.gitignore b/webview_flutter/step_05/.gitignore index 29a3a5017f..79c113f9b5 100644 --- a/webview_flutter/step_05/.gitignore +++ b/webview_flutter/step_05/.gitignore @@ -5,9 +5,11 @@ *.swp .DS_Store .atom/ +.build/ .buildlog/ .history .svn/ +.swiftpm/ migrate_working_dir/ # IntelliJ related diff --git a/webview_flutter/step_05/android/app/build.gradle b/webview_flutter/step_05/android/app/build.gradle index 13f68a50de..9e345ad06f 100644 --- a/webview_flutter/step_05/android/app/build.gradle +++ b/webview_flutter/step_05/android/app/build.gradle @@ -24,7 +24,7 @@ android { applicationId = "com.example.webview_in_flutter" // You can update the following values to match your application needs. // For more information, see: https://flutter.dev/to/review-gradle-config. - minSdk = 20 + minSdk = 21 targetSdk = flutter.targetSdkVersion versionCode = flutter.versionCode versionName = flutter.versionName diff --git a/webview_flutter/step_05/android/gradle/wrapper/gradle-wrapper.properties b/webview_flutter/step_05/android/gradle/wrapper/gradle-wrapper.properties index e1ca574ef0..7bb2df6ba6 100644 --- a/webview_flutter/step_05/android/gradle/wrapper/gradle-wrapper.properties +++ b/webview_flutter/step_05/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip diff --git a/webview_flutter/step_05/android/settings.gradle b/webview_flutter/step_05/android/settings.gradle index 536165d35a..b9e43bd376 100644 --- a/webview_flutter/step_05/android/settings.gradle +++ b/webview_flutter/step_05/android/settings.gradle @@ -18,8 +18,8 @@ pluginManagement { plugins { id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "7.3.0" apply false - id "org.jetbrains.kotlin.android" version "1.7.10" apply false + id "com.android.application" version "8.1.0" apply false + id "org.jetbrains.kotlin.android" version "1.8.22" apply false } include ":app" diff --git a/webview_flutter/step_05/ios/Runner.xcodeproj/project.pbxproj b/webview_flutter/step_05/ios/Runner.xcodeproj/project.pbxproj index cf51903b09..8f6e3ffc09 100644 --- a/webview_flutter/step_05/ios/Runner.xcodeproj/project.pbxproj +++ b/webview_flutter/step_05/ios/Runner.xcodeproj/project.pbxproj @@ -14,8 +14,8 @@ 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - B9DE530C7B15745FBC6089B3 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1DF215D2045A862AA16E337D /* Pods_Runner.framework */; }; - D63B4C76C7AB9736D882CA16 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F8811F5E8715C99DA35A84D6 /* Pods_RunnerTests.framework */; }; + AAC2E12D306CAB59FFBBCD45 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0D4620345C5D87B0E7060169 /* Pods_Runner.framework */; }; + F5B795DBC53CA272FBEFA879 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D99586C11302D0BD51376E49 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,19 +42,16 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 08FD4DDEEB83912CF46C4224 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 0D4620345C5D87B0E7060169 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 1DF215D2045A862AA16E337D /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 26698DC1B810E2C00BB7B378 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 27C8E373455216AE4DA82D9B /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 3C97732FF1EA5C9DAA9F391D /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - 63E625B586191DEAC303C062 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 531C22CC0DE7F035D9A34AA8 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; - 79F89EA0A8A52B57C3BF1E52 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; @@ -63,16 +60,19 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - E1CD57D06D4BEE1194540422 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - F8811F5E8715C99DA35A84D6 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 98E54C4176D400311D9B31BA /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + A916079A171A129DC4E2A044 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + B55481032FB34D452CFFA8F4 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + D99586C11302D0BD51376E49 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + E5FD24814B513998232432D1 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 2C10B07186173E1D877E0FB4 /* Frameworks */ = { + 2FEC5FC3719CD823CD6B55B8 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - D63B4C76C7AB9736D882CA16 /* Pods_RunnerTests.framework in Frameworks */, + F5B795DBC53CA272FBEFA879 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -80,7 +80,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - B9DE530C7B15745FBC6089B3 /* Pods_Runner.framework in Frameworks */, + AAC2E12D306CAB59FFBBCD45 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -95,18 +95,13 @@ path = RunnerTests; sourceTree = ""; }; - 8156CC600B09FA299845756B /* Pods */ = { + 970CAEF4A0EA5D94B91BBBA3 /* Frameworks */ = { isa = PBXGroup; children = ( - 79F89EA0A8A52B57C3BF1E52 /* Pods-Runner.debug.xcconfig */, - 26698DC1B810E2C00BB7B378 /* Pods-Runner.release.xcconfig */, - 27C8E373455216AE4DA82D9B /* Pods-Runner.profile.xcconfig */, - 63E625B586191DEAC303C062 /* Pods-RunnerTests.debug.xcconfig */, - E1CD57D06D4BEE1194540422 /* Pods-RunnerTests.release.xcconfig */, - 3C97732FF1EA5C9DAA9F391D /* Pods-RunnerTests.profile.xcconfig */, + 0D4620345C5D87B0E7060169 /* Pods_Runner.framework */, + D99586C11302D0BD51376E49 /* Pods_RunnerTests.framework */, ); - name = Pods; - path = Pods; + name = Frameworks; sourceTree = ""; }; 9740EEB11CF90186004384FC /* Flutter */ = { @@ -127,8 +122,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - 8156CC600B09FA299845756B /* Pods */, - D255FAC6646F2E9A1C64FB51 /* Frameworks */, + E587FBDAF5D3BEFD5D2C0C4F /* Pods */, + 970CAEF4A0EA5D94B91BBBA3 /* Frameworks */, ); sourceTree = ""; }; @@ -156,13 +151,18 @@ path = Runner; sourceTree = ""; }; - D255FAC6646F2E9A1C64FB51 /* Frameworks */ = { + E587FBDAF5D3BEFD5D2C0C4F /* Pods */ = { isa = PBXGroup; children = ( - 1DF215D2045A862AA16E337D /* Pods_Runner.framework */, - F8811F5E8715C99DA35A84D6 /* Pods_RunnerTests.framework */, + A916079A171A129DC4E2A044 /* Pods-Runner.debug.xcconfig */, + B55481032FB34D452CFFA8F4 /* Pods-Runner.release.xcconfig */, + 531C22CC0DE7F035D9A34AA8 /* Pods-Runner.profile.xcconfig */, + 08FD4DDEEB83912CF46C4224 /* Pods-RunnerTests.debug.xcconfig */, + 98E54C4176D400311D9B31BA /* Pods-RunnerTests.release.xcconfig */, + E5FD24814B513998232432D1 /* Pods-RunnerTests.profile.xcconfig */, ); - name = Frameworks; + name = Pods; + path = Pods; sourceTree = ""; }; /* End PBXGroup section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 92AAEFC9448918682FC02E39 /* [CP] Check Pods Manifest.lock */, + 608B22E300D6DE6B6AAD535A /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 2C10B07186173E1D877E0FB4 /* Frameworks */, + 2FEC5FC3719CD823CD6B55B8 /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - E6E819BC2848B8F7350740CF /* [CP] Check Pods Manifest.lock */, + 662E2EF6148D023D7E7DB791 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 9CC5405ADE547F481588188A /* [CP] Embed Pods Frameworks */, + 284DD42A03DD50B0335DA1F5 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -270,6 +270,23 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ + 284DD42A03DD50B0335DA1F5 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -286,7 +303,7 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 92AAEFC9448918682FC02E39 /* [CP] Check Pods Manifest.lock */ = { + 608B22E300D6DE6B6AAD535A /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -308,59 +325,42 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { - isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "Run Script"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; - }; - 9CC5405ADE547F481588188A /* [CP] Embed Pods Frameworks */ = { + 662E2EF6148D023D7E7DB791 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - E6E819BC2848B8F7350740CF /* [CP] Check Pods Manifest.lock */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( ); + name = "Run Script"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; /* End PBXShellScriptBuildPhase section */ @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 63E625B586191DEAC303C062 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 08FD4DDEEB83912CF46C4224 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = E1CD57D06D4BEE1194540422 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 98E54C4176D400311D9B31BA /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 3C97732FF1EA5C9DAA9F391D /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = E5FD24814B513998232432D1 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/webview_flutter/step_05/pubspec.yaml b/webview_flutter/step_05/pubspec.yaml index 807b2b2902..310f8ce028 100644 --- a/webview_flutter/step_05/pubspec.yaml +++ b/webview_flutter/step_05/pubspec.yaml @@ -35,7 +35,7 @@ dependencies: # The following adds the Cupertino Icons font to your application. # Use with the CupertinoIcons class for iOS style icons. cupertino_icons: ^1.0.8 - webview_flutter: ^4.9.0 + webview_flutter: ^4.10.0 dev_dependencies: flutter_test: @@ -46,7 +46,7 @@ dev_dependencies: # activated in the `analysis_options.yaml` file located at the root of your # package. See that file for information about deactivating specific lint # rules and activating additional ones. - flutter_lints: ^4.0.0 + flutter_lints: ^5.0.0 # For information on the generic Dart part of this file, see the # following page: https://dart.dev/tools/pub/pubspec diff --git a/webview_flutter/step_06/.gitignore b/webview_flutter/step_06/.gitignore index 29a3a5017f..79c113f9b5 100644 --- a/webview_flutter/step_06/.gitignore +++ b/webview_flutter/step_06/.gitignore @@ -5,9 +5,11 @@ *.swp .DS_Store .atom/ +.build/ .buildlog/ .history .svn/ +.swiftpm/ migrate_working_dir/ # IntelliJ related diff --git a/webview_flutter/step_06/android/app/build.gradle b/webview_flutter/step_06/android/app/build.gradle index 13f68a50de..9e345ad06f 100644 --- a/webview_flutter/step_06/android/app/build.gradle +++ b/webview_flutter/step_06/android/app/build.gradle @@ -24,7 +24,7 @@ android { applicationId = "com.example.webview_in_flutter" // You can update the following values to match your application needs. // For more information, see: https://flutter.dev/to/review-gradle-config. - minSdk = 20 + minSdk = 21 targetSdk = flutter.targetSdkVersion versionCode = flutter.versionCode versionName = flutter.versionName diff --git a/webview_flutter/step_06/android/gradle/wrapper/gradle-wrapper.properties b/webview_flutter/step_06/android/gradle/wrapper/gradle-wrapper.properties index e1ca574ef0..7bb2df6ba6 100644 --- a/webview_flutter/step_06/android/gradle/wrapper/gradle-wrapper.properties +++ b/webview_flutter/step_06/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip diff --git a/webview_flutter/step_06/android/settings.gradle b/webview_flutter/step_06/android/settings.gradle index 536165d35a..b9e43bd376 100644 --- a/webview_flutter/step_06/android/settings.gradle +++ b/webview_flutter/step_06/android/settings.gradle @@ -18,8 +18,8 @@ pluginManagement { plugins { id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "7.3.0" apply false - id "org.jetbrains.kotlin.android" version "1.7.10" apply false + id "com.android.application" version "8.1.0" apply false + id "org.jetbrains.kotlin.android" version "1.8.22" apply false } include ":app" diff --git a/webview_flutter/step_06/ios/Runner.xcodeproj/project.pbxproj b/webview_flutter/step_06/ios/Runner.xcodeproj/project.pbxproj index cf51903b09..8f6e3ffc09 100644 --- a/webview_flutter/step_06/ios/Runner.xcodeproj/project.pbxproj +++ b/webview_flutter/step_06/ios/Runner.xcodeproj/project.pbxproj @@ -14,8 +14,8 @@ 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - B9DE530C7B15745FBC6089B3 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1DF215D2045A862AA16E337D /* Pods_Runner.framework */; }; - D63B4C76C7AB9736D882CA16 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F8811F5E8715C99DA35A84D6 /* Pods_RunnerTests.framework */; }; + AAC2E12D306CAB59FFBBCD45 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0D4620345C5D87B0E7060169 /* Pods_Runner.framework */; }; + F5B795DBC53CA272FBEFA879 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D99586C11302D0BD51376E49 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,19 +42,16 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 08FD4DDEEB83912CF46C4224 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 0D4620345C5D87B0E7060169 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 1DF215D2045A862AA16E337D /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 26698DC1B810E2C00BB7B378 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 27C8E373455216AE4DA82D9B /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 3C97732FF1EA5C9DAA9F391D /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - 63E625B586191DEAC303C062 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 531C22CC0DE7F035D9A34AA8 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; - 79F89EA0A8A52B57C3BF1E52 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; @@ -63,16 +60,19 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - E1CD57D06D4BEE1194540422 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - F8811F5E8715C99DA35A84D6 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 98E54C4176D400311D9B31BA /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + A916079A171A129DC4E2A044 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + B55481032FB34D452CFFA8F4 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + D99586C11302D0BD51376E49 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + E5FD24814B513998232432D1 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 2C10B07186173E1D877E0FB4 /* Frameworks */ = { + 2FEC5FC3719CD823CD6B55B8 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - D63B4C76C7AB9736D882CA16 /* Pods_RunnerTests.framework in Frameworks */, + F5B795DBC53CA272FBEFA879 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -80,7 +80,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - B9DE530C7B15745FBC6089B3 /* Pods_Runner.framework in Frameworks */, + AAC2E12D306CAB59FFBBCD45 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -95,18 +95,13 @@ path = RunnerTests; sourceTree = ""; }; - 8156CC600B09FA299845756B /* Pods */ = { + 970CAEF4A0EA5D94B91BBBA3 /* Frameworks */ = { isa = PBXGroup; children = ( - 79F89EA0A8A52B57C3BF1E52 /* Pods-Runner.debug.xcconfig */, - 26698DC1B810E2C00BB7B378 /* Pods-Runner.release.xcconfig */, - 27C8E373455216AE4DA82D9B /* Pods-Runner.profile.xcconfig */, - 63E625B586191DEAC303C062 /* Pods-RunnerTests.debug.xcconfig */, - E1CD57D06D4BEE1194540422 /* Pods-RunnerTests.release.xcconfig */, - 3C97732FF1EA5C9DAA9F391D /* Pods-RunnerTests.profile.xcconfig */, + 0D4620345C5D87B0E7060169 /* Pods_Runner.framework */, + D99586C11302D0BD51376E49 /* Pods_RunnerTests.framework */, ); - name = Pods; - path = Pods; + name = Frameworks; sourceTree = ""; }; 9740EEB11CF90186004384FC /* Flutter */ = { @@ -127,8 +122,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - 8156CC600B09FA299845756B /* Pods */, - D255FAC6646F2E9A1C64FB51 /* Frameworks */, + E587FBDAF5D3BEFD5D2C0C4F /* Pods */, + 970CAEF4A0EA5D94B91BBBA3 /* Frameworks */, ); sourceTree = ""; }; @@ -156,13 +151,18 @@ path = Runner; sourceTree = ""; }; - D255FAC6646F2E9A1C64FB51 /* Frameworks */ = { + E587FBDAF5D3BEFD5D2C0C4F /* Pods */ = { isa = PBXGroup; children = ( - 1DF215D2045A862AA16E337D /* Pods_Runner.framework */, - F8811F5E8715C99DA35A84D6 /* Pods_RunnerTests.framework */, + A916079A171A129DC4E2A044 /* Pods-Runner.debug.xcconfig */, + B55481032FB34D452CFFA8F4 /* Pods-Runner.release.xcconfig */, + 531C22CC0DE7F035D9A34AA8 /* Pods-Runner.profile.xcconfig */, + 08FD4DDEEB83912CF46C4224 /* Pods-RunnerTests.debug.xcconfig */, + 98E54C4176D400311D9B31BA /* Pods-RunnerTests.release.xcconfig */, + E5FD24814B513998232432D1 /* Pods-RunnerTests.profile.xcconfig */, ); - name = Frameworks; + name = Pods; + path = Pods; sourceTree = ""; }; /* End PBXGroup section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 92AAEFC9448918682FC02E39 /* [CP] Check Pods Manifest.lock */, + 608B22E300D6DE6B6AAD535A /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 2C10B07186173E1D877E0FB4 /* Frameworks */, + 2FEC5FC3719CD823CD6B55B8 /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - E6E819BC2848B8F7350740CF /* [CP] Check Pods Manifest.lock */, + 662E2EF6148D023D7E7DB791 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 9CC5405ADE547F481588188A /* [CP] Embed Pods Frameworks */, + 284DD42A03DD50B0335DA1F5 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -270,6 +270,23 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ + 284DD42A03DD50B0335DA1F5 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -286,7 +303,7 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 92AAEFC9448918682FC02E39 /* [CP] Check Pods Manifest.lock */ = { + 608B22E300D6DE6B6AAD535A /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -308,59 +325,42 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { - isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "Run Script"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; - }; - 9CC5405ADE547F481588188A /* [CP] Embed Pods Frameworks */ = { + 662E2EF6148D023D7E7DB791 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - E6E819BC2848B8F7350740CF /* [CP] Check Pods Manifest.lock */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( ); + name = "Run Script"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; /* End PBXShellScriptBuildPhase section */ @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 63E625B586191DEAC303C062 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 08FD4DDEEB83912CF46C4224 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = E1CD57D06D4BEE1194540422 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 98E54C4176D400311D9B31BA /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 3C97732FF1EA5C9DAA9F391D /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = E5FD24814B513998232432D1 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/webview_flutter/step_06/pubspec.yaml b/webview_flutter/step_06/pubspec.yaml index 807b2b2902..310f8ce028 100644 --- a/webview_flutter/step_06/pubspec.yaml +++ b/webview_flutter/step_06/pubspec.yaml @@ -35,7 +35,7 @@ dependencies: # The following adds the Cupertino Icons font to your application. # Use with the CupertinoIcons class for iOS style icons. cupertino_icons: ^1.0.8 - webview_flutter: ^4.9.0 + webview_flutter: ^4.10.0 dev_dependencies: flutter_test: @@ -46,7 +46,7 @@ dev_dependencies: # activated in the `analysis_options.yaml` file located at the root of your # package. See that file for information about deactivating specific lint # rules and activating additional ones. - flutter_lints: ^4.0.0 + flutter_lints: ^5.0.0 # For information on the generic Dart part of this file, see the # following page: https://dart.dev/tools/pub/pubspec diff --git a/webview_flutter/step_07/.gitignore b/webview_flutter/step_07/.gitignore index 29a3a5017f..79c113f9b5 100644 --- a/webview_flutter/step_07/.gitignore +++ b/webview_flutter/step_07/.gitignore @@ -5,9 +5,11 @@ *.swp .DS_Store .atom/ +.build/ .buildlog/ .history .svn/ +.swiftpm/ migrate_working_dir/ # IntelliJ related diff --git a/webview_flutter/step_07/android/app/build.gradle b/webview_flutter/step_07/android/app/build.gradle index 13f68a50de..9e345ad06f 100644 --- a/webview_flutter/step_07/android/app/build.gradle +++ b/webview_flutter/step_07/android/app/build.gradle @@ -24,7 +24,7 @@ android { applicationId = "com.example.webview_in_flutter" // You can update the following values to match your application needs. // For more information, see: https://flutter.dev/to/review-gradle-config. - minSdk = 20 + minSdk = 21 targetSdk = flutter.targetSdkVersion versionCode = flutter.versionCode versionName = flutter.versionName diff --git a/webview_flutter/step_07/android/gradle/wrapper/gradle-wrapper.properties b/webview_flutter/step_07/android/gradle/wrapper/gradle-wrapper.properties index e1ca574ef0..7bb2df6ba6 100644 --- a/webview_flutter/step_07/android/gradle/wrapper/gradle-wrapper.properties +++ b/webview_flutter/step_07/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip diff --git a/webview_flutter/step_07/android/settings.gradle b/webview_flutter/step_07/android/settings.gradle index 536165d35a..b9e43bd376 100644 --- a/webview_flutter/step_07/android/settings.gradle +++ b/webview_flutter/step_07/android/settings.gradle @@ -18,8 +18,8 @@ pluginManagement { plugins { id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "7.3.0" apply false - id "org.jetbrains.kotlin.android" version "1.7.10" apply false + id "com.android.application" version "8.1.0" apply false + id "org.jetbrains.kotlin.android" version "1.8.22" apply false } include ":app" diff --git a/webview_flutter/step_07/ios/Runner.xcodeproj/project.pbxproj b/webview_flutter/step_07/ios/Runner.xcodeproj/project.pbxproj index cf51903b09..8f6e3ffc09 100644 --- a/webview_flutter/step_07/ios/Runner.xcodeproj/project.pbxproj +++ b/webview_flutter/step_07/ios/Runner.xcodeproj/project.pbxproj @@ -14,8 +14,8 @@ 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - B9DE530C7B15745FBC6089B3 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1DF215D2045A862AA16E337D /* Pods_Runner.framework */; }; - D63B4C76C7AB9736D882CA16 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F8811F5E8715C99DA35A84D6 /* Pods_RunnerTests.framework */; }; + AAC2E12D306CAB59FFBBCD45 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0D4620345C5D87B0E7060169 /* Pods_Runner.framework */; }; + F5B795DBC53CA272FBEFA879 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D99586C11302D0BD51376E49 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,19 +42,16 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 08FD4DDEEB83912CF46C4224 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 0D4620345C5D87B0E7060169 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 1DF215D2045A862AA16E337D /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 26698DC1B810E2C00BB7B378 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 27C8E373455216AE4DA82D9B /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 3C97732FF1EA5C9DAA9F391D /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - 63E625B586191DEAC303C062 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 531C22CC0DE7F035D9A34AA8 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; - 79F89EA0A8A52B57C3BF1E52 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; @@ -63,16 +60,19 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - E1CD57D06D4BEE1194540422 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - F8811F5E8715C99DA35A84D6 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 98E54C4176D400311D9B31BA /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + A916079A171A129DC4E2A044 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + B55481032FB34D452CFFA8F4 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + D99586C11302D0BD51376E49 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + E5FD24814B513998232432D1 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 2C10B07186173E1D877E0FB4 /* Frameworks */ = { + 2FEC5FC3719CD823CD6B55B8 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - D63B4C76C7AB9736D882CA16 /* Pods_RunnerTests.framework in Frameworks */, + F5B795DBC53CA272FBEFA879 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -80,7 +80,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - B9DE530C7B15745FBC6089B3 /* Pods_Runner.framework in Frameworks */, + AAC2E12D306CAB59FFBBCD45 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -95,18 +95,13 @@ path = RunnerTests; sourceTree = ""; }; - 8156CC600B09FA299845756B /* Pods */ = { + 970CAEF4A0EA5D94B91BBBA3 /* Frameworks */ = { isa = PBXGroup; children = ( - 79F89EA0A8A52B57C3BF1E52 /* Pods-Runner.debug.xcconfig */, - 26698DC1B810E2C00BB7B378 /* Pods-Runner.release.xcconfig */, - 27C8E373455216AE4DA82D9B /* Pods-Runner.profile.xcconfig */, - 63E625B586191DEAC303C062 /* Pods-RunnerTests.debug.xcconfig */, - E1CD57D06D4BEE1194540422 /* Pods-RunnerTests.release.xcconfig */, - 3C97732FF1EA5C9DAA9F391D /* Pods-RunnerTests.profile.xcconfig */, + 0D4620345C5D87B0E7060169 /* Pods_Runner.framework */, + D99586C11302D0BD51376E49 /* Pods_RunnerTests.framework */, ); - name = Pods; - path = Pods; + name = Frameworks; sourceTree = ""; }; 9740EEB11CF90186004384FC /* Flutter */ = { @@ -127,8 +122,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - 8156CC600B09FA299845756B /* Pods */, - D255FAC6646F2E9A1C64FB51 /* Frameworks */, + E587FBDAF5D3BEFD5D2C0C4F /* Pods */, + 970CAEF4A0EA5D94B91BBBA3 /* Frameworks */, ); sourceTree = ""; }; @@ -156,13 +151,18 @@ path = Runner; sourceTree = ""; }; - D255FAC6646F2E9A1C64FB51 /* Frameworks */ = { + E587FBDAF5D3BEFD5D2C0C4F /* Pods */ = { isa = PBXGroup; children = ( - 1DF215D2045A862AA16E337D /* Pods_Runner.framework */, - F8811F5E8715C99DA35A84D6 /* Pods_RunnerTests.framework */, + A916079A171A129DC4E2A044 /* Pods-Runner.debug.xcconfig */, + B55481032FB34D452CFFA8F4 /* Pods-Runner.release.xcconfig */, + 531C22CC0DE7F035D9A34AA8 /* Pods-Runner.profile.xcconfig */, + 08FD4DDEEB83912CF46C4224 /* Pods-RunnerTests.debug.xcconfig */, + 98E54C4176D400311D9B31BA /* Pods-RunnerTests.release.xcconfig */, + E5FD24814B513998232432D1 /* Pods-RunnerTests.profile.xcconfig */, ); - name = Frameworks; + name = Pods; + path = Pods; sourceTree = ""; }; /* End PBXGroup section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 92AAEFC9448918682FC02E39 /* [CP] Check Pods Manifest.lock */, + 608B22E300D6DE6B6AAD535A /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 2C10B07186173E1D877E0FB4 /* Frameworks */, + 2FEC5FC3719CD823CD6B55B8 /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - E6E819BC2848B8F7350740CF /* [CP] Check Pods Manifest.lock */, + 662E2EF6148D023D7E7DB791 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 9CC5405ADE547F481588188A /* [CP] Embed Pods Frameworks */, + 284DD42A03DD50B0335DA1F5 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -270,6 +270,23 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ + 284DD42A03DD50B0335DA1F5 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -286,7 +303,7 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 92AAEFC9448918682FC02E39 /* [CP] Check Pods Manifest.lock */ = { + 608B22E300D6DE6B6AAD535A /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -308,59 +325,42 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { - isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "Run Script"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; - }; - 9CC5405ADE547F481588188A /* [CP] Embed Pods Frameworks */ = { + 662E2EF6148D023D7E7DB791 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - E6E819BC2848B8F7350740CF /* [CP] Check Pods Manifest.lock */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( ); + name = "Run Script"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; /* End PBXShellScriptBuildPhase section */ @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 63E625B586191DEAC303C062 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 08FD4DDEEB83912CF46C4224 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = E1CD57D06D4BEE1194540422 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 98E54C4176D400311D9B31BA /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 3C97732FF1EA5C9DAA9F391D /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = E5FD24814B513998232432D1 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/webview_flutter/step_07/pubspec.yaml b/webview_flutter/step_07/pubspec.yaml index 807b2b2902..310f8ce028 100644 --- a/webview_flutter/step_07/pubspec.yaml +++ b/webview_flutter/step_07/pubspec.yaml @@ -35,7 +35,7 @@ dependencies: # The following adds the Cupertino Icons font to your application. # Use with the CupertinoIcons class for iOS style icons. cupertino_icons: ^1.0.8 - webview_flutter: ^4.9.0 + webview_flutter: ^4.10.0 dev_dependencies: flutter_test: @@ -46,7 +46,7 @@ dev_dependencies: # activated in the `analysis_options.yaml` file located at the root of your # package. See that file for information about deactivating specific lint # rules and activating additional ones. - flutter_lints: ^4.0.0 + flutter_lints: ^5.0.0 # For information on the generic Dart part of this file, see the # following page: https://dart.dev/tools/pub/pubspec diff --git a/webview_flutter/step_08/.gitignore b/webview_flutter/step_08/.gitignore index 29a3a5017f..79c113f9b5 100644 --- a/webview_flutter/step_08/.gitignore +++ b/webview_flutter/step_08/.gitignore @@ -5,9 +5,11 @@ *.swp .DS_Store .atom/ +.build/ .buildlog/ .history .svn/ +.swiftpm/ migrate_working_dir/ # IntelliJ related diff --git a/webview_flutter/step_08/android/app/build.gradle b/webview_flutter/step_08/android/app/build.gradle index 13f68a50de..9e345ad06f 100644 --- a/webview_flutter/step_08/android/app/build.gradle +++ b/webview_flutter/step_08/android/app/build.gradle @@ -24,7 +24,7 @@ android { applicationId = "com.example.webview_in_flutter" // You can update the following values to match your application needs. // For more information, see: https://flutter.dev/to/review-gradle-config. - minSdk = 20 + minSdk = 21 targetSdk = flutter.targetSdkVersion versionCode = flutter.versionCode versionName = flutter.versionName diff --git a/webview_flutter/step_08/android/gradle/wrapper/gradle-wrapper.properties b/webview_flutter/step_08/android/gradle/wrapper/gradle-wrapper.properties index e1ca574ef0..7bb2df6ba6 100644 --- a/webview_flutter/step_08/android/gradle/wrapper/gradle-wrapper.properties +++ b/webview_flutter/step_08/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip diff --git a/webview_flutter/step_08/android/settings.gradle b/webview_flutter/step_08/android/settings.gradle index 536165d35a..b9e43bd376 100644 --- a/webview_flutter/step_08/android/settings.gradle +++ b/webview_flutter/step_08/android/settings.gradle @@ -18,8 +18,8 @@ pluginManagement { plugins { id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "7.3.0" apply false - id "org.jetbrains.kotlin.android" version "1.7.10" apply false + id "com.android.application" version "8.1.0" apply false + id "org.jetbrains.kotlin.android" version "1.8.22" apply false } include ":app" diff --git a/webview_flutter/step_08/ios/Runner.xcodeproj/project.pbxproj b/webview_flutter/step_08/ios/Runner.xcodeproj/project.pbxproj index cf51903b09..8f6e3ffc09 100644 --- a/webview_flutter/step_08/ios/Runner.xcodeproj/project.pbxproj +++ b/webview_flutter/step_08/ios/Runner.xcodeproj/project.pbxproj @@ -14,8 +14,8 @@ 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - B9DE530C7B15745FBC6089B3 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1DF215D2045A862AA16E337D /* Pods_Runner.framework */; }; - D63B4C76C7AB9736D882CA16 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F8811F5E8715C99DA35A84D6 /* Pods_RunnerTests.framework */; }; + AAC2E12D306CAB59FFBBCD45 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0D4620345C5D87B0E7060169 /* Pods_Runner.framework */; }; + F5B795DBC53CA272FBEFA879 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D99586C11302D0BD51376E49 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,19 +42,16 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 08FD4DDEEB83912CF46C4224 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 0D4620345C5D87B0E7060169 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 1DF215D2045A862AA16E337D /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 26698DC1B810E2C00BB7B378 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 27C8E373455216AE4DA82D9B /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 3C97732FF1EA5C9DAA9F391D /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - 63E625B586191DEAC303C062 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 531C22CC0DE7F035D9A34AA8 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; - 79F89EA0A8A52B57C3BF1E52 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; @@ -63,16 +60,19 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - E1CD57D06D4BEE1194540422 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - F8811F5E8715C99DA35A84D6 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 98E54C4176D400311D9B31BA /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + A916079A171A129DC4E2A044 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + B55481032FB34D452CFFA8F4 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + D99586C11302D0BD51376E49 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + E5FD24814B513998232432D1 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 2C10B07186173E1D877E0FB4 /* Frameworks */ = { + 2FEC5FC3719CD823CD6B55B8 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - D63B4C76C7AB9736D882CA16 /* Pods_RunnerTests.framework in Frameworks */, + F5B795DBC53CA272FBEFA879 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -80,7 +80,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - B9DE530C7B15745FBC6089B3 /* Pods_Runner.framework in Frameworks */, + AAC2E12D306CAB59FFBBCD45 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -95,18 +95,13 @@ path = RunnerTests; sourceTree = ""; }; - 8156CC600B09FA299845756B /* Pods */ = { + 970CAEF4A0EA5D94B91BBBA3 /* Frameworks */ = { isa = PBXGroup; children = ( - 79F89EA0A8A52B57C3BF1E52 /* Pods-Runner.debug.xcconfig */, - 26698DC1B810E2C00BB7B378 /* Pods-Runner.release.xcconfig */, - 27C8E373455216AE4DA82D9B /* Pods-Runner.profile.xcconfig */, - 63E625B586191DEAC303C062 /* Pods-RunnerTests.debug.xcconfig */, - E1CD57D06D4BEE1194540422 /* Pods-RunnerTests.release.xcconfig */, - 3C97732FF1EA5C9DAA9F391D /* Pods-RunnerTests.profile.xcconfig */, + 0D4620345C5D87B0E7060169 /* Pods_Runner.framework */, + D99586C11302D0BD51376E49 /* Pods_RunnerTests.framework */, ); - name = Pods; - path = Pods; + name = Frameworks; sourceTree = ""; }; 9740EEB11CF90186004384FC /* Flutter */ = { @@ -127,8 +122,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - 8156CC600B09FA299845756B /* Pods */, - D255FAC6646F2E9A1C64FB51 /* Frameworks */, + E587FBDAF5D3BEFD5D2C0C4F /* Pods */, + 970CAEF4A0EA5D94B91BBBA3 /* Frameworks */, ); sourceTree = ""; }; @@ -156,13 +151,18 @@ path = Runner; sourceTree = ""; }; - D255FAC6646F2E9A1C64FB51 /* Frameworks */ = { + E587FBDAF5D3BEFD5D2C0C4F /* Pods */ = { isa = PBXGroup; children = ( - 1DF215D2045A862AA16E337D /* Pods_Runner.framework */, - F8811F5E8715C99DA35A84D6 /* Pods_RunnerTests.framework */, + A916079A171A129DC4E2A044 /* Pods-Runner.debug.xcconfig */, + B55481032FB34D452CFFA8F4 /* Pods-Runner.release.xcconfig */, + 531C22CC0DE7F035D9A34AA8 /* Pods-Runner.profile.xcconfig */, + 08FD4DDEEB83912CF46C4224 /* Pods-RunnerTests.debug.xcconfig */, + 98E54C4176D400311D9B31BA /* Pods-RunnerTests.release.xcconfig */, + E5FD24814B513998232432D1 /* Pods-RunnerTests.profile.xcconfig */, ); - name = Frameworks; + name = Pods; + path = Pods; sourceTree = ""; }; /* End PBXGroup section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 92AAEFC9448918682FC02E39 /* [CP] Check Pods Manifest.lock */, + 608B22E300D6DE6B6AAD535A /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 2C10B07186173E1D877E0FB4 /* Frameworks */, + 2FEC5FC3719CD823CD6B55B8 /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - E6E819BC2848B8F7350740CF /* [CP] Check Pods Manifest.lock */, + 662E2EF6148D023D7E7DB791 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 9CC5405ADE547F481588188A /* [CP] Embed Pods Frameworks */, + 284DD42A03DD50B0335DA1F5 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -270,6 +270,23 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ + 284DD42A03DD50B0335DA1F5 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -286,7 +303,7 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 92AAEFC9448918682FC02E39 /* [CP] Check Pods Manifest.lock */ = { + 608B22E300D6DE6B6AAD535A /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -308,59 +325,42 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { - isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "Run Script"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; - }; - 9CC5405ADE547F481588188A /* [CP] Embed Pods Frameworks */ = { + 662E2EF6148D023D7E7DB791 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - E6E819BC2848B8F7350740CF /* [CP] Check Pods Manifest.lock */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( ); + name = "Run Script"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; /* End PBXShellScriptBuildPhase section */ @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 63E625B586191DEAC303C062 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 08FD4DDEEB83912CF46C4224 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = E1CD57D06D4BEE1194540422 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 98E54C4176D400311D9B31BA /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 3C97732FF1EA5C9DAA9F391D /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = E5FD24814B513998232432D1 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/webview_flutter/step_08/pubspec.yaml b/webview_flutter/step_08/pubspec.yaml index 807b2b2902..310f8ce028 100644 --- a/webview_flutter/step_08/pubspec.yaml +++ b/webview_flutter/step_08/pubspec.yaml @@ -35,7 +35,7 @@ dependencies: # The following adds the Cupertino Icons font to your application. # Use with the CupertinoIcons class for iOS style icons. cupertino_icons: ^1.0.8 - webview_flutter: ^4.9.0 + webview_flutter: ^4.10.0 dev_dependencies: flutter_test: @@ -46,7 +46,7 @@ dev_dependencies: # activated in the `analysis_options.yaml` file located at the root of your # package. See that file for information about deactivating specific lint # rules and activating additional ones. - flutter_lints: ^4.0.0 + flutter_lints: ^5.0.0 # For information on the generic Dart part of this file, see the # following page: https://dart.dev/tools/pub/pubspec diff --git a/webview_flutter/step_09/.gitignore b/webview_flutter/step_09/.gitignore index 29a3a5017f..79c113f9b5 100644 --- a/webview_flutter/step_09/.gitignore +++ b/webview_flutter/step_09/.gitignore @@ -5,9 +5,11 @@ *.swp .DS_Store .atom/ +.build/ .buildlog/ .history .svn/ +.swiftpm/ migrate_working_dir/ # IntelliJ related diff --git a/webview_flutter/step_09/android/app/build.gradle b/webview_flutter/step_09/android/app/build.gradle index 13f68a50de..9e345ad06f 100644 --- a/webview_flutter/step_09/android/app/build.gradle +++ b/webview_flutter/step_09/android/app/build.gradle @@ -24,7 +24,7 @@ android { applicationId = "com.example.webview_in_flutter" // You can update the following values to match your application needs. // For more information, see: https://flutter.dev/to/review-gradle-config. - minSdk = 20 + minSdk = 21 targetSdk = flutter.targetSdkVersion versionCode = flutter.versionCode versionName = flutter.versionName diff --git a/webview_flutter/step_09/android/gradle/wrapper/gradle-wrapper.properties b/webview_flutter/step_09/android/gradle/wrapper/gradle-wrapper.properties index e1ca574ef0..7bb2df6ba6 100644 --- a/webview_flutter/step_09/android/gradle/wrapper/gradle-wrapper.properties +++ b/webview_flutter/step_09/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip diff --git a/webview_flutter/step_09/android/settings.gradle b/webview_flutter/step_09/android/settings.gradle index 536165d35a..b9e43bd376 100644 --- a/webview_flutter/step_09/android/settings.gradle +++ b/webview_flutter/step_09/android/settings.gradle @@ -18,8 +18,8 @@ pluginManagement { plugins { id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "7.3.0" apply false - id "org.jetbrains.kotlin.android" version "1.7.10" apply false + id "com.android.application" version "8.1.0" apply false + id "org.jetbrains.kotlin.android" version "1.8.22" apply false } include ":app" diff --git a/webview_flutter/step_09/ios/Runner.xcodeproj/project.pbxproj b/webview_flutter/step_09/ios/Runner.xcodeproj/project.pbxproj index cf51903b09..8f6e3ffc09 100644 --- a/webview_flutter/step_09/ios/Runner.xcodeproj/project.pbxproj +++ b/webview_flutter/step_09/ios/Runner.xcodeproj/project.pbxproj @@ -14,8 +14,8 @@ 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - B9DE530C7B15745FBC6089B3 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1DF215D2045A862AA16E337D /* Pods_Runner.framework */; }; - D63B4C76C7AB9736D882CA16 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F8811F5E8715C99DA35A84D6 /* Pods_RunnerTests.framework */; }; + AAC2E12D306CAB59FFBBCD45 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0D4620345C5D87B0E7060169 /* Pods_Runner.framework */; }; + F5B795DBC53CA272FBEFA879 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D99586C11302D0BD51376E49 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,19 +42,16 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 08FD4DDEEB83912CF46C4224 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 0D4620345C5D87B0E7060169 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 1DF215D2045A862AA16E337D /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 26698DC1B810E2C00BB7B378 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 27C8E373455216AE4DA82D9B /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 3C97732FF1EA5C9DAA9F391D /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - 63E625B586191DEAC303C062 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 531C22CC0DE7F035D9A34AA8 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; - 79F89EA0A8A52B57C3BF1E52 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; @@ -63,16 +60,19 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - E1CD57D06D4BEE1194540422 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - F8811F5E8715C99DA35A84D6 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 98E54C4176D400311D9B31BA /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + A916079A171A129DC4E2A044 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + B55481032FB34D452CFFA8F4 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + D99586C11302D0BD51376E49 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + E5FD24814B513998232432D1 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 2C10B07186173E1D877E0FB4 /* Frameworks */ = { + 2FEC5FC3719CD823CD6B55B8 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - D63B4C76C7AB9736D882CA16 /* Pods_RunnerTests.framework in Frameworks */, + F5B795DBC53CA272FBEFA879 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -80,7 +80,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - B9DE530C7B15745FBC6089B3 /* Pods_Runner.framework in Frameworks */, + AAC2E12D306CAB59FFBBCD45 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -95,18 +95,13 @@ path = RunnerTests; sourceTree = ""; }; - 8156CC600B09FA299845756B /* Pods */ = { + 970CAEF4A0EA5D94B91BBBA3 /* Frameworks */ = { isa = PBXGroup; children = ( - 79F89EA0A8A52B57C3BF1E52 /* Pods-Runner.debug.xcconfig */, - 26698DC1B810E2C00BB7B378 /* Pods-Runner.release.xcconfig */, - 27C8E373455216AE4DA82D9B /* Pods-Runner.profile.xcconfig */, - 63E625B586191DEAC303C062 /* Pods-RunnerTests.debug.xcconfig */, - E1CD57D06D4BEE1194540422 /* Pods-RunnerTests.release.xcconfig */, - 3C97732FF1EA5C9DAA9F391D /* Pods-RunnerTests.profile.xcconfig */, + 0D4620345C5D87B0E7060169 /* Pods_Runner.framework */, + D99586C11302D0BD51376E49 /* Pods_RunnerTests.framework */, ); - name = Pods; - path = Pods; + name = Frameworks; sourceTree = ""; }; 9740EEB11CF90186004384FC /* Flutter */ = { @@ -127,8 +122,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - 8156CC600B09FA299845756B /* Pods */, - D255FAC6646F2E9A1C64FB51 /* Frameworks */, + E587FBDAF5D3BEFD5D2C0C4F /* Pods */, + 970CAEF4A0EA5D94B91BBBA3 /* Frameworks */, ); sourceTree = ""; }; @@ -156,13 +151,18 @@ path = Runner; sourceTree = ""; }; - D255FAC6646F2E9A1C64FB51 /* Frameworks */ = { + E587FBDAF5D3BEFD5D2C0C4F /* Pods */ = { isa = PBXGroup; children = ( - 1DF215D2045A862AA16E337D /* Pods_Runner.framework */, - F8811F5E8715C99DA35A84D6 /* Pods_RunnerTests.framework */, + A916079A171A129DC4E2A044 /* Pods-Runner.debug.xcconfig */, + B55481032FB34D452CFFA8F4 /* Pods-Runner.release.xcconfig */, + 531C22CC0DE7F035D9A34AA8 /* Pods-Runner.profile.xcconfig */, + 08FD4DDEEB83912CF46C4224 /* Pods-RunnerTests.debug.xcconfig */, + 98E54C4176D400311D9B31BA /* Pods-RunnerTests.release.xcconfig */, + E5FD24814B513998232432D1 /* Pods-RunnerTests.profile.xcconfig */, ); - name = Frameworks; + name = Pods; + path = Pods; sourceTree = ""; }; /* End PBXGroup section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 92AAEFC9448918682FC02E39 /* [CP] Check Pods Manifest.lock */, + 608B22E300D6DE6B6AAD535A /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 2C10B07186173E1D877E0FB4 /* Frameworks */, + 2FEC5FC3719CD823CD6B55B8 /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - E6E819BC2848B8F7350740CF /* [CP] Check Pods Manifest.lock */, + 662E2EF6148D023D7E7DB791 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 9CC5405ADE547F481588188A /* [CP] Embed Pods Frameworks */, + 284DD42A03DD50B0335DA1F5 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -270,6 +270,23 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ + 284DD42A03DD50B0335DA1F5 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -286,7 +303,7 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 92AAEFC9448918682FC02E39 /* [CP] Check Pods Manifest.lock */ = { + 608B22E300D6DE6B6AAD535A /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -308,59 +325,42 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { - isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "Run Script"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; - }; - 9CC5405ADE547F481588188A /* [CP] Embed Pods Frameworks */ = { + 662E2EF6148D023D7E7DB791 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - E6E819BC2848B8F7350740CF /* [CP] Check Pods Manifest.lock */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( ); + name = "Run Script"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; /* End PBXShellScriptBuildPhase section */ @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 63E625B586191DEAC303C062 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 08FD4DDEEB83912CF46C4224 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = E1CD57D06D4BEE1194540422 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 98E54C4176D400311D9B31BA /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 3C97732FF1EA5C9DAA9F391D /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = E5FD24814B513998232432D1 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/webview_flutter/step_09/pubspec.yaml b/webview_flutter/step_09/pubspec.yaml index 807b2b2902..310f8ce028 100644 --- a/webview_flutter/step_09/pubspec.yaml +++ b/webview_flutter/step_09/pubspec.yaml @@ -35,7 +35,7 @@ dependencies: # The following adds the Cupertino Icons font to your application. # Use with the CupertinoIcons class for iOS style icons. cupertino_icons: ^1.0.8 - webview_flutter: ^4.9.0 + webview_flutter: ^4.10.0 dev_dependencies: flutter_test: @@ -46,7 +46,7 @@ dev_dependencies: # activated in the `analysis_options.yaml` file located at the root of your # package. See that file for information about deactivating specific lint # rules and activating additional ones. - flutter_lints: ^4.0.0 + flutter_lints: ^5.0.0 # For information on the generic Dart part of this file, see the # following page: https://dart.dev/tools/pub/pubspec diff --git a/webview_flutter/step_10/.gitignore b/webview_flutter/step_10/.gitignore index 29a3a5017f..79c113f9b5 100644 --- a/webview_flutter/step_10/.gitignore +++ b/webview_flutter/step_10/.gitignore @@ -5,9 +5,11 @@ *.swp .DS_Store .atom/ +.build/ .buildlog/ .history .svn/ +.swiftpm/ migrate_working_dir/ # IntelliJ related diff --git a/webview_flutter/step_10/android/app/build.gradle b/webview_flutter/step_10/android/app/build.gradle index 13f68a50de..9e345ad06f 100644 --- a/webview_flutter/step_10/android/app/build.gradle +++ b/webview_flutter/step_10/android/app/build.gradle @@ -24,7 +24,7 @@ android { applicationId = "com.example.webview_in_flutter" // You can update the following values to match your application needs. // For more information, see: https://flutter.dev/to/review-gradle-config. - minSdk = 20 + minSdk = 21 targetSdk = flutter.targetSdkVersion versionCode = flutter.versionCode versionName = flutter.versionName diff --git a/webview_flutter/step_10/android/gradle/wrapper/gradle-wrapper.properties b/webview_flutter/step_10/android/gradle/wrapper/gradle-wrapper.properties index e1ca574ef0..7bb2df6ba6 100644 --- a/webview_flutter/step_10/android/gradle/wrapper/gradle-wrapper.properties +++ b/webview_flutter/step_10/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip diff --git a/webview_flutter/step_10/android/settings.gradle b/webview_flutter/step_10/android/settings.gradle index 536165d35a..b9e43bd376 100644 --- a/webview_flutter/step_10/android/settings.gradle +++ b/webview_flutter/step_10/android/settings.gradle @@ -18,8 +18,8 @@ pluginManagement { plugins { id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "7.3.0" apply false - id "org.jetbrains.kotlin.android" version "1.7.10" apply false + id "com.android.application" version "8.1.0" apply false + id "org.jetbrains.kotlin.android" version "1.8.22" apply false } include ":app" diff --git a/webview_flutter/step_10/ios/Runner.xcodeproj/project.pbxproj b/webview_flutter/step_10/ios/Runner.xcodeproj/project.pbxproj index cf51903b09..8f6e3ffc09 100644 --- a/webview_flutter/step_10/ios/Runner.xcodeproj/project.pbxproj +++ b/webview_flutter/step_10/ios/Runner.xcodeproj/project.pbxproj @@ -14,8 +14,8 @@ 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - B9DE530C7B15745FBC6089B3 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1DF215D2045A862AA16E337D /* Pods_Runner.framework */; }; - D63B4C76C7AB9736D882CA16 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F8811F5E8715C99DA35A84D6 /* Pods_RunnerTests.framework */; }; + AAC2E12D306CAB59FFBBCD45 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0D4620345C5D87B0E7060169 /* Pods_Runner.framework */; }; + F5B795DBC53CA272FBEFA879 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D99586C11302D0BD51376E49 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,19 +42,16 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 08FD4DDEEB83912CF46C4224 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 0D4620345C5D87B0E7060169 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 1DF215D2045A862AA16E337D /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 26698DC1B810E2C00BB7B378 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 27C8E373455216AE4DA82D9B /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 3C97732FF1EA5C9DAA9F391D /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - 63E625B586191DEAC303C062 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 531C22CC0DE7F035D9A34AA8 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; - 79F89EA0A8A52B57C3BF1E52 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; @@ -63,16 +60,19 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - E1CD57D06D4BEE1194540422 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - F8811F5E8715C99DA35A84D6 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 98E54C4176D400311D9B31BA /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + A916079A171A129DC4E2A044 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + B55481032FB34D452CFFA8F4 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + D99586C11302D0BD51376E49 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + E5FD24814B513998232432D1 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 2C10B07186173E1D877E0FB4 /* Frameworks */ = { + 2FEC5FC3719CD823CD6B55B8 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - D63B4C76C7AB9736D882CA16 /* Pods_RunnerTests.framework in Frameworks */, + F5B795DBC53CA272FBEFA879 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -80,7 +80,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - B9DE530C7B15745FBC6089B3 /* Pods_Runner.framework in Frameworks */, + AAC2E12D306CAB59FFBBCD45 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -95,18 +95,13 @@ path = RunnerTests; sourceTree = ""; }; - 8156CC600B09FA299845756B /* Pods */ = { + 970CAEF4A0EA5D94B91BBBA3 /* Frameworks */ = { isa = PBXGroup; children = ( - 79F89EA0A8A52B57C3BF1E52 /* Pods-Runner.debug.xcconfig */, - 26698DC1B810E2C00BB7B378 /* Pods-Runner.release.xcconfig */, - 27C8E373455216AE4DA82D9B /* Pods-Runner.profile.xcconfig */, - 63E625B586191DEAC303C062 /* Pods-RunnerTests.debug.xcconfig */, - E1CD57D06D4BEE1194540422 /* Pods-RunnerTests.release.xcconfig */, - 3C97732FF1EA5C9DAA9F391D /* Pods-RunnerTests.profile.xcconfig */, + 0D4620345C5D87B0E7060169 /* Pods_Runner.framework */, + D99586C11302D0BD51376E49 /* Pods_RunnerTests.framework */, ); - name = Pods; - path = Pods; + name = Frameworks; sourceTree = ""; }; 9740EEB11CF90186004384FC /* Flutter */ = { @@ -127,8 +122,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - 8156CC600B09FA299845756B /* Pods */, - D255FAC6646F2E9A1C64FB51 /* Frameworks */, + E587FBDAF5D3BEFD5D2C0C4F /* Pods */, + 970CAEF4A0EA5D94B91BBBA3 /* Frameworks */, ); sourceTree = ""; }; @@ -156,13 +151,18 @@ path = Runner; sourceTree = ""; }; - D255FAC6646F2E9A1C64FB51 /* Frameworks */ = { + E587FBDAF5D3BEFD5D2C0C4F /* Pods */ = { isa = PBXGroup; children = ( - 1DF215D2045A862AA16E337D /* Pods_Runner.framework */, - F8811F5E8715C99DA35A84D6 /* Pods_RunnerTests.framework */, + A916079A171A129DC4E2A044 /* Pods-Runner.debug.xcconfig */, + B55481032FB34D452CFFA8F4 /* Pods-Runner.release.xcconfig */, + 531C22CC0DE7F035D9A34AA8 /* Pods-Runner.profile.xcconfig */, + 08FD4DDEEB83912CF46C4224 /* Pods-RunnerTests.debug.xcconfig */, + 98E54C4176D400311D9B31BA /* Pods-RunnerTests.release.xcconfig */, + E5FD24814B513998232432D1 /* Pods-RunnerTests.profile.xcconfig */, ); - name = Frameworks; + name = Pods; + path = Pods; sourceTree = ""; }; /* End PBXGroup section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 92AAEFC9448918682FC02E39 /* [CP] Check Pods Manifest.lock */, + 608B22E300D6DE6B6AAD535A /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 2C10B07186173E1D877E0FB4 /* Frameworks */, + 2FEC5FC3719CD823CD6B55B8 /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - E6E819BC2848B8F7350740CF /* [CP] Check Pods Manifest.lock */, + 662E2EF6148D023D7E7DB791 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 9CC5405ADE547F481588188A /* [CP] Embed Pods Frameworks */, + 284DD42A03DD50B0335DA1F5 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -270,6 +270,23 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ + 284DD42A03DD50B0335DA1F5 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -286,7 +303,7 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 92AAEFC9448918682FC02E39 /* [CP] Check Pods Manifest.lock */ = { + 608B22E300D6DE6B6AAD535A /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -308,59 +325,42 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { - isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "Run Script"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; - }; - 9CC5405ADE547F481588188A /* [CP] Embed Pods Frameworks */ = { + 662E2EF6148D023D7E7DB791 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - E6E819BC2848B8F7350740CF /* [CP] Check Pods Manifest.lock */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( ); + name = "Run Script"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; /* End PBXShellScriptBuildPhase section */ @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 63E625B586191DEAC303C062 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 08FD4DDEEB83912CF46C4224 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = E1CD57D06D4BEE1194540422 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 98E54C4176D400311D9B31BA /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 3C97732FF1EA5C9DAA9F391D /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = E5FD24814B513998232432D1 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/webview_flutter/step_10/pubspec.yaml b/webview_flutter/step_10/pubspec.yaml index 807b2b2902..310f8ce028 100644 --- a/webview_flutter/step_10/pubspec.yaml +++ b/webview_flutter/step_10/pubspec.yaml @@ -35,7 +35,7 @@ dependencies: # The following adds the Cupertino Icons font to your application. # Use with the CupertinoIcons class for iOS style icons. cupertino_icons: ^1.0.8 - webview_flutter: ^4.9.0 + webview_flutter: ^4.10.0 dev_dependencies: flutter_test: @@ -46,7 +46,7 @@ dev_dependencies: # activated in the `analysis_options.yaml` file located at the root of your # package. See that file for information about deactivating specific lint # rules and activating additional ones. - flutter_lints: ^4.0.0 + flutter_lints: ^5.0.0 # For information on the generic Dart part of this file, see the # following page: https://dart.dev/tools/pub/pubspec diff --git a/webview_flutter/step_11/.gitignore b/webview_flutter/step_11/.gitignore index 29a3a5017f..79c113f9b5 100644 --- a/webview_flutter/step_11/.gitignore +++ b/webview_flutter/step_11/.gitignore @@ -5,9 +5,11 @@ *.swp .DS_Store .atom/ +.build/ .buildlog/ .history .svn/ +.swiftpm/ migrate_working_dir/ # IntelliJ related diff --git a/webview_flutter/step_11/android/app/build.gradle b/webview_flutter/step_11/android/app/build.gradle index 13f68a50de..9e345ad06f 100644 --- a/webview_flutter/step_11/android/app/build.gradle +++ b/webview_flutter/step_11/android/app/build.gradle @@ -24,7 +24,7 @@ android { applicationId = "com.example.webview_in_flutter" // You can update the following values to match your application needs. // For more information, see: https://flutter.dev/to/review-gradle-config. - minSdk = 20 + minSdk = 21 targetSdk = flutter.targetSdkVersion versionCode = flutter.versionCode versionName = flutter.versionName diff --git a/webview_flutter/step_11/android/gradle/wrapper/gradle-wrapper.properties b/webview_flutter/step_11/android/gradle/wrapper/gradle-wrapper.properties index e1ca574ef0..7bb2df6ba6 100644 --- a/webview_flutter/step_11/android/gradle/wrapper/gradle-wrapper.properties +++ b/webview_flutter/step_11/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip diff --git a/webview_flutter/step_11/android/settings.gradle b/webview_flutter/step_11/android/settings.gradle index 536165d35a..b9e43bd376 100644 --- a/webview_flutter/step_11/android/settings.gradle +++ b/webview_flutter/step_11/android/settings.gradle @@ -18,8 +18,8 @@ pluginManagement { plugins { id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "7.3.0" apply false - id "org.jetbrains.kotlin.android" version "1.7.10" apply false + id "com.android.application" version "8.1.0" apply false + id "org.jetbrains.kotlin.android" version "1.8.22" apply false } include ":app" diff --git a/webview_flutter/step_11/ios/Runner.xcodeproj/project.pbxproj b/webview_flutter/step_11/ios/Runner.xcodeproj/project.pbxproj index cf51903b09..8f6e3ffc09 100644 --- a/webview_flutter/step_11/ios/Runner.xcodeproj/project.pbxproj +++ b/webview_flutter/step_11/ios/Runner.xcodeproj/project.pbxproj @@ -14,8 +14,8 @@ 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - B9DE530C7B15745FBC6089B3 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1DF215D2045A862AA16E337D /* Pods_Runner.framework */; }; - D63B4C76C7AB9736D882CA16 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F8811F5E8715C99DA35A84D6 /* Pods_RunnerTests.framework */; }; + AAC2E12D306CAB59FFBBCD45 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0D4620345C5D87B0E7060169 /* Pods_Runner.framework */; }; + F5B795DBC53CA272FBEFA879 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D99586C11302D0BD51376E49 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,19 +42,16 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 08FD4DDEEB83912CF46C4224 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 0D4620345C5D87B0E7060169 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 1DF215D2045A862AA16E337D /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 26698DC1B810E2C00BB7B378 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 27C8E373455216AE4DA82D9B /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 3C97732FF1EA5C9DAA9F391D /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - 63E625B586191DEAC303C062 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 531C22CC0DE7F035D9A34AA8 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; - 79F89EA0A8A52B57C3BF1E52 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; @@ -63,16 +60,19 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - E1CD57D06D4BEE1194540422 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - F8811F5E8715C99DA35A84D6 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 98E54C4176D400311D9B31BA /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + A916079A171A129DC4E2A044 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + B55481032FB34D452CFFA8F4 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + D99586C11302D0BD51376E49 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + E5FD24814B513998232432D1 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 2C10B07186173E1D877E0FB4 /* Frameworks */ = { + 2FEC5FC3719CD823CD6B55B8 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - D63B4C76C7AB9736D882CA16 /* Pods_RunnerTests.framework in Frameworks */, + F5B795DBC53CA272FBEFA879 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -80,7 +80,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - B9DE530C7B15745FBC6089B3 /* Pods_Runner.framework in Frameworks */, + AAC2E12D306CAB59FFBBCD45 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -95,18 +95,13 @@ path = RunnerTests; sourceTree = ""; }; - 8156CC600B09FA299845756B /* Pods */ = { + 970CAEF4A0EA5D94B91BBBA3 /* Frameworks */ = { isa = PBXGroup; children = ( - 79F89EA0A8A52B57C3BF1E52 /* Pods-Runner.debug.xcconfig */, - 26698DC1B810E2C00BB7B378 /* Pods-Runner.release.xcconfig */, - 27C8E373455216AE4DA82D9B /* Pods-Runner.profile.xcconfig */, - 63E625B586191DEAC303C062 /* Pods-RunnerTests.debug.xcconfig */, - E1CD57D06D4BEE1194540422 /* Pods-RunnerTests.release.xcconfig */, - 3C97732FF1EA5C9DAA9F391D /* Pods-RunnerTests.profile.xcconfig */, + 0D4620345C5D87B0E7060169 /* Pods_Runner.framework */, + D99586C11302D0BD51376E49 /* Pods_RunnerTests.framework */, ); - name = Pods; - path = Pods; + name = Frameworks; sourceTree = ""; }; 9740EEB11CF90186004384FC /* Flutter */ = { @@ -127,8 +122,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - 8156CC600B09FA299845756B /* Pods */, - D255FAC6646F2E9A1C64FB51 /* Frameworks */, + E587FBDAF5D3BEFD5D2C0C4F /* Pods */, + 970CAEF4A0EA5D94B91BBBA3 /* Frameworks */, ); sourceTree = ""; }; @@ -156,13 +151,18 @@ path = Runner; sourceTree = ""; }; - D255FAC6646F2E9A1C64FB51 /* Frameworks */ = { + E587FBDAF5D3BEFD5D2C0C4F /* Pods */ = { isa = PBXGroup; children = ( - 1DF215D2045A862AA16E337D /* Pods_Runner.framework */, - F8811F5E8715C99DA35A84D6 /* Pods_RunnerTests.framework */, + A916079A171A129DC4E2A044 /* Pods-Runner.debug.xcconfig */, + B55481032FB34D452CFFA8F4 /* Pods-Runner.release.xcconfig */, + 531C22CC0DE7F035D9A34AA8 /* Pods-Runner.profile.xcconfig */, + 08FD4DDEEB83912CF46C4224 /* Pods-RunnerTests.debug.xcconfig */, + 98E54C4176D400311D9B31BA /* Pods-RunnerTests.release.xcconfig */, + E5FD24814B513998232432D1 /* Pods-RunnerTests.profile.xcconfig */, ); - name = Frameworks; + name = Pods; + path = Pods; sourceTree = ""; }; /* End PBXGroup section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 92AAEFC9448918682FC02E39 /* [CP] Check Pods Manifest.lock */, + 608B22E300D6DE6B6AAD535A /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 2C10B07186173E1D877E0FB4 /* Frameworks */, + 2FEC5FC3719CD823CD6B55B8 /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - E6E819BC2848B8F7350740CF /* [CP] Check Pods Manifest.lock */, + 662E2EF6148D023D7E7DB791 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 9CC5405ADE547F481588188A /* [CP] Embed Pods Frameworks */, + 284DD42A03DD50B0335DA1F5 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -270,6 +270,23 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ + 284DD42A03DD50B0335DA1F5 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -286,7 +303,7 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 92AAEFC9448918682FC02E39 /* [CP] Check Pods Manifest.lock */ = { + 608B22E300D6DE6B6AAD535A /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -308,59 +325,42 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { - isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "Run Script"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; - }; - 9CC5405ADE547F481588188A /* [CP] Embed Pods Frameworks */ = { + 662E2EF6148D023D7E7DB791 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - E6E819BC2848B8F7350740CF /* [CP] Check Pods Manifest.lock */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( ); + name = "Run Script"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; /* End PBXShellScriptBuildPhase section */ @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 63E625B586191DEAC303C062 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 08FD4DDEEB83912CF46C4224 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = E1CD57D06D4BEE1194540422 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 98E54C4176D400311D9B31BA /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 3C97732FF1EA5C9DAA9F391D /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = E5FD24814B513998232432D1 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/webview_flutter/step_11/pubspec.yaml b/webview_flutter/step_11/pubspec.yaml index 807b2b2902..310f8ce028 100644 --- a/webview_flutter/step_11/pubspec.yaml +++ b/webview_flutter/step_11/pubspec.yaml @@ -35,7 +35,7 @@ dependencies: # The following adds the Cupertino Icons font to your application. # Use with the CupertinoIcons class for iOS style icons. cupertino_icons: ^1.0.8 - webview_flutter: ^4.9.0 + webview_flutter: ^4.10.0 dev_dependencies: flutter_test: @@ -46,7 +46,7 @@ dev_dependencies: # activated in the `analysis_options.yaml` file located at the root of your # package. See that file for information about deactivating specific lint # rules and activating additional ones. - flutter_lints: ^4.0.0 + flutter_lints: ^5.0.0 # For information on the generic Dart part of this file, see the # following page: https://dart.dev/tools/pub/pubspec diff --git a/webview_flutter/step_12/.gitignore b/webview_flutter/step_12/.gitignore index 29a3a5017f..79c113f9b5 100644 --- a/webview_flutter/step_12/.gitignore +++ b/webview_flutter/step_12/.gitignore @@ -5,9 +5,11 @@ *.swp .DS_Store .atom/ +.build/ .buildlog/ .history .svn/ +.swiftpm/ migrate_working_dir/ # IntelliJ related diff --git a/webview_flutter/step_12/android/app/build.gradle b/webview_flutter/step_12/android/app/build.gradle index 13f68a50de..9e345ad06f 100644 --- a/webview_flutter/step_12/android/app/build.gradle +++ b/webview_flutter/step_12/android/app/build.gradle @@ -24,7 +24,7 @@ android { applicationId = "com.example.webview_in_flutter" // You can update the following values to match your application needs. // For more information, see: https://flutter.dev/to/review-gradle-config. - minSdk = 20 + minSdk = 21 targetSdk = flutter.targetSdkVersion versionCode = flutter.versionCode versionName = flutter.versionName diff --git a/webview_flutter/step_12/android/gradle/wrapper/gradle-wrapper.properties b/webview_flutter/step_12/android/gradle/wrapper/gradle-wrapper.properties index e1ca574ef0..7bb2df6ba6 100644 --- a/webview_flutter/step_12/android/gradle/wrapper/gradle-wrapper.properties +++ b/webview_flutter/step_12/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip diff --git a/webview_flutter/step_12/android/settings.gradle b/webview_flutter/step_12/android/settings.gradle index 536165d35a..b9e43bd376 100644 --- a/webview_flutter/step_12/android/settings.gradle +++ b/webview_flutter/step_12/android/settings.gradle @@ -18,8 +18,8 @@ pluginManagement { plugins { id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "7.3.0" apply false - id "org.jetbrains.kotlin.android" version "1.7.10" apply false + id "com.android.application" version "8.1.0" apply false + id "org.jetbrains.kotlin.android" version "1.8.22" apply false } include ":app" diff --git a/webview_flutter/step_12/ios/Runner.xcodeproj/project.pbxproj b/webview_flutter/step_12/ios/Runner.xcodeproj/project.pbxproj index cf51903b09..8f6e3ffc09 100644 --- a/webview_flutter/step_12/ios/Runner.xcodeproj/project.pbxproj +++ b/webview_flutter/step_12/ios/Runner.xcodeproj/project.pbxproj @@ -14,8 +14,8 @@ 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - B9DE530C7B15745FBC6089B3 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1DF215D2045A862AA16E337D /* Pods_Runner.framework */; }; - D63B4C76C7AB9736D882CA16 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F8811F5E8715C99DA35A84D6 /* Pods_RunnerTests.framework */; }; + AAC2E12D306CAB59FFBBCD45 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0D4620345C5D87B0E7060169 /* Pods_Runner.framework */; }; + F5B795DBC53CA272FBEFA879 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D99586C11302D0BD51376E49 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,19 +42,16 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 08FD4DDEEB83912CF46C4224 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 0D4620345C5D87B0E7060169 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 1DF215D2045A862AA16E337D /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 26698DC1B810E2C00BB7B378 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 27C8E373455216AE4DA82D9B /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 3C97732FF1EA5C9DAA9F391D /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - 63E625B586191DEAC303C062 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 531C22CC0DE7F035D9A34AA8 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; - 79F89EA0A8A52B57C3BF1E52 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; @@ -63,16 +60,19 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - E1CD57D06D4BEE1194540422 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - F8811F5E8715C99DA35A84D6 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 98E54C4176D400311D9B31BA /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + A916079A171A129DC4E2A044 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + B55481032FB34D452CFFA8F4 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + D99586C11302D0BD51376E49 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + E5FD24814B513998232432D1 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 2C10B07186173E1D877E0FB4 /* Frameworks */ = { + 2FEC5FC3719CD823CD6B55B8 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - D63B4C76C7AB9736D882CA16 /* Pods_RunnerTests.framework in Frameworks */, + F5B795DBC53CA272FBEFA879 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -80,7 +80,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - B9DE530C7B15745FBC6089B3 /* Pods_Runner.framework in Frameworks */, + AAC2E12D306CAB59FFBBCD45 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -95,18 +95,13 @@ path = RunnerTests; sourceTree = ""; }; - 8156CC600B09FA299845756B /* Pods */ = { + 970CAEF4A0EA5D94B91BBBA3 /* Frameworks */ = { isa = PBXGroup; children = ( - 79F89EA0A8A52B57C3BF1E52 /* Pods-Runner.debug.xcconfig */, - 26698DC1B810E2C00BB7B378 /* Pods-Runner.release.xcconfig */, - 27C8E373455216AE4DA82D9B /* Pods-Runner.profile.xcconfig */, - 63E625B586191DEAC303C062 /* Pods-RunnerTests.debug.xcconfig */, - E1CD57D06D4BEE1194540422 /* Pods-RunnerTests.release.xcconfig */, - 3C97732FF1EA5C9DAA9F391D /* Pods-RunnerTests.profile.xcconfig */, + 0D4620345C5D87B0E7060169 /* Pods_Runner.framework */, + D99586C11302D0BD51376E49 /* Pods_RunnerTests.framework */, ); - name = Pods; - path = Pods; + name = Frameworks; sourceTree = ""; }; 9740EEB11CF90186004384FC /* Flutter */ = { @@ -127,8 +122,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - 8156CC600B09FA299845756B /* Pods */, - D255FAC6646F2E9A1C64FB51 /* Frameworks */, + E587FBDAF5D3BEFD5D2C0C4F /* Pods */, + 970CAEF4A0EA5D94B91BBBA3 /* Frameworks */, ); sourceTree = ""; }; @@ -156,13 +151,18 @@ path = Runner; sourceTree = ""; }; - D255FAC6646F2E9A1C64FB51 /* Frameworks */ = { + E587FBDAF5D3BEFD5D2C0C4F /* Pods */ = { isa = PBXGroup; children = ( - 1DF215D2045A862AA16E337D /* Pods_Runner.framework */, - F8811F5E8715C99DA35A84D6 /* Pods_RunnerTests.framework */, + A916079A171A129DC4E2A044 /* Pods-Runner.debug.xcconfig */, + B55481032FB34D452CFFA8F4 /* Pods-Runner.release.xcconfig */, + 531C22CC0DE7F035D9A34AA8 /* Pods-Runner.profile.xcconfig */, + 08FD4DDEEB83912CF46C4224 /* Pods-RunnerTests.debug.xcconfig */, + 98E54C4176D400311D9B31BA /* Pods-RunnerTests.release.xcconfig */, + E5FD24814B513998232432D1 /* Pods-RunnerTests.profile.xcconfig */, ); - name = Frameworks; + name = Pods; + path = Pods; sourceTree = ""; }; /* End PBXGroup section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 92AAEFC9448918682FC02E39 /* [CP] Check Pods Manifest.lock */, + 608B22E300D6DE6B6AAD535A /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 2C10B07186173E1D877E0FB4 /* Frameworks */, + 2FEC5FC3719CD823CD6B55B8 /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - E6E819BC2848B8F7350740CF /* [CP] Check Pods Manifest.lock */, + 662E2EF6148D023D7E7DB791 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 9CC5405ADE547F481588188A /* [CP] Embed Pods Frameworks */, + 284DD42A03DD50B0335DA1F5 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -270,6 +270,23 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ + 284DD42A03DD50B0335DA1F5 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -286,7 +303,7 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 92AAEFC9448918682FC02E39 /* [CP] Check Pods Manifest.lock */ = { + 608B22E300D6DE6B6AAD535A /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -308,59 +325,42 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { - isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "Run Script"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; - }; - 9CC5405ADE547F481588188A /* [CP] Embed Pods Frameworks */ = { + 662E2EF6148D023D7E7DB791 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - E6E819BC2848B8F7350740CF /* [CP] Check Pods Manifest.lock */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( ); + name = "Run Script"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; /* End PBXShellScriptBuildPhase section */ @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 63E625B586191DEAC303C062 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 08FD4DDEEB83912CF46C4224 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = E1CD57D06D4BEE1194540422 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 98E54C4176D400311D9B31BA /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 3C97732FF1EA5C9DAA9F391D /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = E5FD24814B513998232432D1 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/webview_flutter/step_12/pubspec.yaml b/webview_flutter/step_12/pubspec.yaml index 619ae863d4..36047015d6 100644 --- a/webview_flutter/step_12/pubspec.yaml +++ b/webview_flutter/step_12/pubspec.yaml @@ -35,7 +35,7 @@ dependencies: # The following adds the Cupertino Icons font to your application. # Use with the CupertinoIcons class for iOS style icons. cupertino_icons: ^1.0.8 - webview_flutter: ^4.9.0 + webview_flutter: ^4.10.0 path_provider: ^2.1.4 dev_dependencies: @@ -47,7 +47,7 @@ dev_dependencies: # activated in the `analysis_options.yaml` file located at the root of your # package. See that file for information about deactivating specific lint # rules and activating additional ones. - flutter_lints: ^4.0.0 + flutter_lints: ^5.0.0 # For information on the generic Dart part of this file, see the # following page: https://dart.dev/tools/pub/pubspec From 610f3010cf1e14735ba9c233441a83a19e2608a6 Mon Sep 17 00:00:00 2001 From: Brett Morgan Date: Fri, 25 Oct 2024 11:41:24 +1100 Subject: [PATCH 033/108] Update `generate_crossword` after `riverpod` fix --- .../step_02/linux/CMakeLists.txt | 23 +--- .../step_02/linux/runner/CMakeLists.txt | 26 ++++ .../step_02/linux/{ => runner}/main.cc | 0 .../linux/{ => runner}/my_application.cc | 6 + .../linux/{ => runner}/my_application.h | 0 generate_crossword/step_02/pubspec.yaml | 4 +- .../step_03/linux/CMakeLists.txt | 23 +--- .../step_03/linux/runner/CMakeLists.txt | 26 ++++ .../step_03/linux/{ => runner}/main.cc | 0 .../linux/{ => runner}/my_application.cc | 6 + .../linux/{ => runner}/my_application.h | 0 generate_crossword/step_03/pubspec.yaml | 4 +- .../step_04/linux/CMakeLists.txt | 23 +--- .../step_04/linux/runner/CMakeLists.txt | 26 ++++ .../step_04/linux/{ => runner}/main.cc | 0 .../linux/{ => runner}/my_application.cc | 6 + .../linux/{ => runner}/my_application.h | 0 generate_crossword/step_04/pubspec.yaml | 4 +- .../step_05_a/linux/CMakeLists.txt | 23 +--- .../step_05_a/linux/runner/CMakeLists.txt | 26 ++++ .../step_05_a/linux/{ => runner}/main.cc | 0 .../linux/{ => runner}/my_application.cc | 6 + .../linux/{ => runner}/my_application.h | 0 generate_crossword/step_05_a/pubspec.yaml | 4 +- .../step_05_b/linux/CMakeLists.txt | 23 +--- .../step_05_b/linux/my_application.cc | 124 ----------------- .../step_05_b/linux/runner/CMakeLists.txt | 26 ++++ .../step_05_b/linux/{ => runner}/main.cc | 0 .../step_05_b/linux/runner/my_application.cc | 130 ++++++++++++++++++ .../linux/{ => runner}/my_application.h | 0 generate_crossword/step_05_b/pubspec.yaml | 4 +- .../step_05_c/linux/CMakeLists.txt | 23 +--- .../step_05_c/linux/my_application.cc | 124 ----------------- .../step_05_c/linux/runner/CMakeLists.txt | 26 ++++ .../step_05_c/linux/{ => runner}/main.cc | 0 .../step_05_c/linux/runner/my_application.cc | 130 ++++++++++++++++++ .../linux/{ => runner}/my_application.h | 0 generate_crossword/step_05_c/pubspec.yaml | 4 +- .../step_06/linux/CMakeLists.txt | 23 +--- .../step_06/linux/my_application.cc | 124 ----------------- .../step_06/linux/runner/CMakeLists.txt | 26 ++++ .../step_06/linux/{ => runner}/main.cc | 0 .../step_06/linux/runner/my_application.cc | 130 ++++++++++++++++++ .../linux/{ => runner}/my_application.h | 0 generate_crossword/step_06/pubspec.yaml | 4 +- .../step_07/linux/CMakeLists.txt | 23 +--- .../step_07/linux/my_application.cc | 124 ----------------- .../step_07/linux/runner/CMakeLists.txt | 26 ++++ .../step_07/linux/{ => runner}/main.cc | 0 .../step_07/linux/runner/my_application.cc | 130 ++++++++++++++++++ .../linux/{ => runner}/my_application.h | 0 generate_crossword/step_07/pubspec.yaml | 4 +- .../step_08/linux/CMakeLists.txt | 23 +--- .../step_08/linux/my_application.cc | 124 ----------------- .../step_08/linux/runner/CMakeLists.txt | 26 ++++ .../step_08/linux/{ => runner}/main.cc | 0 .../step_08/linux/runner/my_application.cc | 130 ++++++++++++++++++ .../linux/{ => runner}/my_application.h | 0 generate_crossword/step_08/pubspec.yaml | 4 +- .../step_09/linux/CMakeLists.txt | 23 +--- .../step_09/linux/my_application.cc | 124 ----------------- .../step_09/linux/runner/CMakeLists.txt | 26 ++++ .../step_09/linux/{ => runner}/main.cc | 0 .../step_09/linux/runner/my_application.cc | 130 ++++++++++++++++++ .../linux/{ => runner}/my_application.h | 0 generate_crossword/step_09/pubspec.yaml | 4 +- 66 files changed, 1114 insertions(+), 964 deletions(-) create mode 100644 generate_crossword/step_02/linux/runner/CMakeLists.txt rename generate_crossword/step_02/linux/{ => runner}/main.cc (100%) rename generate_crossword/step_02/linux/{ => runner}/my_application.cc (93%) rename generate_crossword/step_02/linux/{ => runner}/my_application.h (100%) create mode 100644 generate_crossword/step_03/linux/runner/CMakeLists.txt rename generate_crossword/step_03/linux/{ => runner}/main.cc (100%) rename generate_crossword/step_03/linux/{ => runner}/my_application.cc (93%) rename generate_crossword/step_03/linux/{ => runner}/my_application.h (100%) create mode 100644 generate_crossword/step_04/linux/runner/CMakeLists.txt rename generate_crossword/step_04/linux/{ => runner}/main.cc (100%) rename generate_crossword/step_04/linux/{ => runner}/my_application.cc (93%) rename generate_crossword/step_04/linux/{ => runner}/my_application.h (100%) create mode 100644 generate_crossword/step_05_a/linux/runner/CMakeLists.txt rename generate_crossword/step_05_a/linux/{ => runner}/main.cc (100%) rename generate_crossword/step_05_a/linux/{ => runner}/my_application.cc (93%) rename generate_crossword/step_05_a/linux/{ => runner}/my_application.h (100%) delete mode 100644 generate_crossword/step_05_b/linux/my_application.cc create mode 100644 generate_crossword/step_05_b/linux/runner/CMakeLists.txt rename generate_crossword/step_05_b/linux/{ => runner}/main.cc (100%) create mode 100644 generate_crossword/step_05_b/linux/runner/my_application.cc rename generate_crossword/step_05_b/linux/{ => runner}/my_application.h (100%) delete mode 100644 generate_crossword/step_05_c/linux/my_application.cc create mode 100644 generate_crossword/step_05_c/linux/runner/CMakeLists.txt rename generate_crossword/step_05_c/linux/{ => runner}/main.cc (100%) create mode 100644 generate_crossword/step_05_c/linux/runner/my_application.cc rename generate_crossword/step_05_c/linux/{ => runner}/my_application.h (100%) delete mode 100644 generate_crossword/step_06/linux/my_application.cc create mode 100644 generate_crossword/step_06/linux/runner/CMakeLists.txt rename generate_crossword/step_06/linux/{ => runner}/main.cc (100%) create mode 100644 generate_crossword/step_06/linux/runner/my_application.cc rename generate_crossword/step_06/linux/{ => runner}/my_application.h (100%) delete mode 100644 generate_crossword/step_07/linux/my_application.cc create mode 100644 generate_crossword/step_07/linux/runner/CMakeLists.txt rename generate_crossword/step_07/linux/{ => runner}/main.cc (100%) create mode 100644 generate_crossword/step_07/linux/runner/my_application.cc rename generate_crossword/step_07/linux/{ => runner}/my_application.h (100%) delete mode 100644 generate_crossword/step_08/linux/my_application.cc create mode 100644 generate_crossword/step_08/linux/runner/CMakeLists.txt rename generate_crossword/step_08/linux/{ => runner}/main.cc (100%) create mode 100644 generate_crossword/step_08/linux/runner/my_application.cc rename generate_crossword/step_08/linux/{ => runner}/my_application.h (100%) delete mode 100644 generate_crossword/step_09/linux/my_application.cc create mode 100644 generate_crossword/step_09/linux/runner/CMakeLists.txt rename generate_crossword/step_09/linux/{ => runner}/main.cc (100%) create mode 100644 generate_crossword/step_09/linux/runner/my_application.cc rename generate_crossword/step_09/linux/{ => runner}/my_application.h (100%) diff --git a/generate_crossword/step_02/linux/CMakeLists.txt b/generate_crossword/step_02/linux/CMakeLists.txt index fc29586ba7..76ad2b9b7e 100644 --- a/generate_crossword/step_02/linux/CMakeLists.txt +++ b/generate_crossword/step_02/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/generate_crossword/step_02/linux/runner/CMakeLists.txt b/generate_crossword/step_02/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/generate_crossword/step_02/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/generate_crossword/step_02/linux/main.cc b/generate_crossword/step_02/linux/runner/main.cc similarity index 100% rename from generate_crossword/step_02/linux/main.cc rename to generate_crossword/step_02/linux/runner/main.cc diff --git a/generate_crossword/step_02/linux/my_application.cc b/generate_crossword/step_02/linux/runner/my_application.cc similarity index 93% rename from generate_crossword/step_02/linux/my_application.cc rename to generate_crossword/step_02/linux/runner/my_application.cc index 7030cf20f4..dbf3c88029 100644 --- a/generate_crossword/step_02/linux/my_application.cc +++ b/generate_crossword/step_02/linux/runner/my_application.cc @@ -117,6 +117,12 @@ static void my_application_class_init(MyApplicationClass* klass) { static void my_application_init(MyApplication* self) {} MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + return MY_APPLICATION(g_object_new(my_application_get_type(), "application-id", APPLICATION_ID, "flags", G_APPLICATION_NON_UNIQUE, diff --git a/generate_crossword/step_02/linux/my_application.h b/generate_crossword/step_02/linux/runner/my_application.h similarity index 100% rename from generate_crossword/step_02/linux/my_application.h rename to generate_crossword/step_02/linux/runner/my_application.h diff --git a/generate_crossword/step_02/pubspec.yaml b/generate_crossword/step_02/pubspec.yaml index 4ca42d62d8..8bb5dfe238 100644 --- a/generate_crossword/step_02/pubspec.yaml +++ b/generate_crossword/step_02/pubspec.yaml @@ -21,10 +21,10 @@ dependencies: dev_dependencies: flutter_test: sdk: flutter - flutter_lints: ^4.0.0 + flutter_lints: ^5.0.0 build_runner: ^2.4.13 built_value_generator: ^8.9.2 - custom_lint: ^0.6.8 + custom_lint: ^0.6.10 riverpod_generator: ^2.6.1 riverpod_lint: ^2.6.1 diff --git a/generate_crossword/step_03/linux/CMakeLists.txt b/generate_crossword/step_03/linux/CMakeLists.txt index fc29586ba7..76ad2b9b7e 100644 --- a/generate_crossword/step_03/linux/CMakeLists.txt +++ b/generate_crossword/step_03/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/generate_crossword/step_03/linux/runner/CMakeLists.txt b/generate_crossword/step_03/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/generate_crossword/step_03/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/generate_crossword/step_03/linux/main.cc b/generate_crossword/step_03/linux/runner/main.cc similarity index 100% rename from generate_crossword/step_03/linux/main.cc rename to generate_crossword/step_03/linux/runner/main.cc diff --git a/generate_crossword/step_03/linux/my_application.cc b/generate_crossword/step_03/linux/runner/my_application.cc similarity index 93% rename from generate_crossword/step_03/linux/my_application.cc rename to generate_crossword/step_03/linux/runner/my_application.cc index 7030cf20f4..dbf3c88029 100644 --- a/generate_crossword/step_03/linux/my_application.cc +++ b/generate_crossword/step_03/linux/runner/my_application.cc @@ -117,6 +117,12 @@ static void my_application_class_init(MyApplicationClass* klass) { static void my_application_init(MyApplication* self) {} MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + return MY_APPLICATION(g_object_new(my_application_get_type(), "application-id", APPLICATION_ID, "flags", G_APPLICATION_NON_UNIQUE, diff --git a/generate_crossword/step_03/linux/my_application.h b/generate_crossword/step_03/linux/runner/my_application.h similarity index 100% rename from generate_crossword/step_03/linux/my_application.h rename to generate_crossword/step_03/linux/runner/my_application.h diff --git a/generate_crossword/step_03/pubspec.yaml b/generate_crossword/step_03/pubspec.yaml index d7d6b4985d..d2de9bff3c 100644 --- a/generate_crossword/step_03/pubspec.yaml +++ b/generate_crossword/step_03/pubspec.yaml @@ -21,10 +21,10 @@ dependencies: dev_dependencies: flutter_test: sdk: flutter - flutter_lints: ^4.0.0 + flutter_lints: ^5.0.0 build_runner: ^2.4.13 built_value_generator: ^8.9.2 - custom_lint: ^0.6.8 + custom_lint: ^0.6.10 riverpod_generator: ^2.6.1 riverpod_lint: ^2.6.1 diff --git a/generate_crossword/step_04/linux/CMakeLists.txt b/generate_crossword/step_04/linux/CMakeLists.txt index fc29586ba7..76ad2b9b7e 100644 --- a/generate_crossword/step_04/linux/CMakeLists.txt +++ b/generate_crossword/step_04/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/generate_crossword/step_04/linux/runner/CMakeLists.txt b/generate_crossword/step_04/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/generate_crossword/step_04/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/generate_crossword/step_04/linux/main.cc b/generate_crossword/step_04/linux/runner/main.cc similarity index 100% rename from generate_crossword/step_04/linux/main.cc rename to generate_crossword/step_04/linux/runner/main.cc diff --git a/generate_crossword/step_04/linux/my_application.cc b/generate_crossword/step_04/linux/runner/my_application.cc similarity index 93% rename from generate_crossword/step_04/linux/my_application.cc rename to generate_crossword/step_04/linux/runner/my_application.cc index 7030cf20f4..dbf3c88029 100644 --- a/generate_crossword/step_04/linux/my_application.cc +++ b/generate_crossword/step_04/linux/runner/my_application.cc @@ -117,6 +117,12 @@ static void my_application_class_init(MyApplicationClass* klass) { static void my_application_init(MyApplication* self) {} MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + return MY_APPLICATION(g_object_new(my_application_get_type(), "application-id", APPLICATION_ID, "flags", G_APPLICATION_NON_UNIQUE, diff --git a/generate_crossword/step_04/linux/my_application.h b/generate_crossword/step_04/linux/runner/my_application.h similarity index 100% rename from generate_crossword/step_04/linux/my_application.h rename to generate_crossword/step_04/linux/runner/my_application.h diff --git a/generate_crossword/step_04/pubspec.yaml b/generate_crossword/step_04/pubspec.yaml index d7d6b4985d..d2de9bff3c 100644 --- a/generate_crossword/step_04/pubspec.yaml +++ b/generate_crossword/step_04/pubspec.yaml @@ -21,10 +21,10 @@ dependencies: dev_dependencies: flutter_test: sdk: flutter - flutter_lints: ^4.0.0 + flutter_lints: ^5.0.0 build_runner: ^2.4.13 built_value_generator: ^8.9.2 - custom_lint: ^0.6.8 + custom_lint: ^0.6.10 riverpod_generator: ^2.6.1 riverpod_lint: ^2.6.1 diff --git a/generate_crossword/step_05_a/linux/CMakeLists.txt b/generate_crossword/step_05_a/linux/CMakeLists.txt index fc29586ba7..76ad2b9b7e 100644 --- a/generate_crossword/step_05_a/linux/CMakeLists.txt +++ b/generate_crossword/step_05_a/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/generate_crossword/step_05_a/linux/runner/CMakeLists.txt b/generate_crossword/step_05_a/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/generate_crossword/step_05_a/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/generate_crossword/step_05_a/linux/main.cc b/generate_crossword/step_05_a/linux/runner/main.cc similarity index 100% rename from generate_crossword/step_05_a/linux/main.cc rename to generate_crossword/step_05_a/linux/runner/main.cc diff --git a/generate_crossword/step_05_a/linux/my_application.cc b/generate_crossword/step_05_a/linux/runner/my_application.cc similarity index 93% rename from generate_crossword/step_05_a/linux/my_application.cc rename to generate_crossword/step_05_a/linux/runner/my_application.cc index 7030cf20f4..dbf3c88029 100644 --- a/generate_crossword/step_05_a/linux/my_application.cc +++ b/generate_crossword/step_05_a/linux/runner/my_application.cc @@ -117,6 +117,12 @@ static void my_application_class_init(MyApplicationClass* klass) { static void my_application_init(MyApplication* self) {} MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + return MY_APPLICATION(g_object_new(my_application_get_type(), "application-id", APPLICATION_ID, "flags", G_APPLICATION_NON_UNIQUE, diff --git a/generate_crossword/step_05_a/linux/my_application.h b/generate_crossword/step_05_a/linux/runner/my_application.h similarity index 100% rename from generate_crossword/step_05_a/linux/my_application.h rename to generate_crossword/step_05_a/linux/runner/my_application.h diff --git a/generate_crossword/step_05_a/pubspec.yaml b/generate_crossword/step_05_a/pubspec.yaml index d7d6b4985d..d2de9bff3c 100644 --- a/generate_crossword/step_05_a/pubspec.yaml +++ b/generate_crossword/step_05_a/pubspec.yaml @@ -21,10 +21,10 @@ dependencies: dev_dependencies: flutter_test: sdk: flutter - flutter_lints: ^4.0.0 + flutter_lints: ^5.0.0 build_runner: ^2.4.13 built_value_generator: ^8.9.2 - custom_lint: ^0.6.8 + custom_lint: ^0.6.10 riverpod_generator: ^2.6.1 riverpod_lint: ^2.6.1 diff --git a/generate_crossword/step_05_b/linux/CMakeLists.txt b/generate_crossword/step_05_b/linux/CMakeLists.txt index fc29586ba7..76ad2b9b7e 100644 --- a/generate_crossword/step_05_b/linux/CMakeLists.txt +++ b/generate_crossword/step_05_b/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/generate_crossword/step_05_b/linux/my_application.cc b/generate_crossword/step_05_b/linux/my_application.cc deleted file mode 100644 index 7030cf20f4..0000000000 --- a/generate_crossword/step_05_b/linux/my_application.cc +++ /dev/null @@ -1,124 +0,0 @@ -#include "my_application.h" - -#include -#ifdef GDK_WINDOWING_X11 -#include -#endif - -#include "flutter/generated_plugin_registrant.h" - -struct _MyApplication { - GtkApplication parent_instance; - char** dart_entrypoint_arguments; -}; - -G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) - -// Implements GApplication::activate. -static void my_application_activate(GApplication* application) { - MyApplication* self = MY_APPLICATION(application); - GtkWindow* window = - GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); - - // Use a header bar when running in GNOME as this is the common style used - // by applications and is the setup most users will be using (e.g. Ubuntu - // desktop). - // If running on X and not using GNOME then just use a traditional title bar - // in case the window manager does more exotic layout, e.g. tiling. - // If running on Wayland assume the header bar will work (may need changing - // if future cases occur). - gboolean use_header_bar = TRUE; -#ifdef GDK_WINDOWING_X11 - GdkScreen* screen = gtk_window_get_screen(window); - if (GDK_IS_X11_SCREEN(screen)) { - const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); - if (g_strcmp0(wm_name, "GNOME Shell") != 0) { - use_header_bar = FALSE; - } - } -#endif - if (use_header_bar) { - GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); - gtk_widget_show(GTK_WIDGET(header_bar)); - gtk_header_bar_set_title(header_bar, "generate_crossword"); - gtk_header_bar_set_show_close_button(header_bar, TRUE); - gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); - } else { - gtk_window_set_title(window, "generate_crossword"); - } - - gtk_window_set_default_size(window, 1280, 720); - gtk_widget_show(GTK_WIDGET(window)); - - g_autoptr(FlDartProject) project = fl_dart_project_new(); - fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); - - FlView* view = fl_view_new(project); - gtk_widget_show(GTK_WIDGET(view)); - gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); - - fl_register_plugins(FL_PLUGIN_REGISTRY(view)); - - gtk_widget_grab_focus(GTK_WIDGET(view)); -} - -// Implements GApplication::local_command_line. -static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { - MyApplication* self = MY_APPLICATION(application); - // Strip out the first argument as it is the binary name. - self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); - - g_autoptr(GError) error = nullptr; - if (!g_application_register(application, nullptr, &error)) { - g_warning("Failed to register: %s", error->message); - *exit_status = 1; - return TRUE; - } - - g_application_activate(application); - *exit_status = 0; - - return TRUE; -} - -// Implements GApplication::startup. -static void my_application_startup(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application startup. - - G_APPLICATION_CLASS(my_application_parent_class)->startup(application); -} - -// Implements GApplication::shutdown. -static void my_application_shutdown(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application shutdown. - - G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); -} - -// Implements GObject::dispose. -static void my_application_dispose(GObject* object) { - MyApplication* self = MY_APPLICATION(object); - g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); - G_OBJECT_CLASS(my_application_parent_class)->dispose(object); -} - -static void my_application_class_init(MyApplicationClass* klass) { - G_APPLICATION_CLASS(klass)->activate = my_application_activate; - G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; - G_APPLICATION_CLASS(klass)->startup = my_application_startup; - G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; - G_OBJECT_CLASS(klass)->dispose = my_application_dispose; -} - -static void my_application_init(MyApplication* self) {} - -MyApplication* my_application_new() { - return MY_APPLICATION(g_object_new(my_application_get_type(), - "application-id", APPLICATION_ID, - "flags", G_APPLICATION_NON_UNIQUE, - nullptr)); -} diff --git a/generate_crossword/step_05_b/linux/runner/CMakeLists.txt b/generate_crossword/step_05_b/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/generate_crossword/step_05_b/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/generate_crossword/step_05_b/linux/main.cc b/generate_crossword/step_05_b/linux/runner/main.cc similarity index 100% rename from generate_crossword/step_05_b/linux/main.cc rename to generate_crossword/step_05_b/linux/runner/main.cc diff --git a/generate_crossword/step_05_b/linux/runner/my_application.cc b/generate_crossword/step_05_b/linux/runner/my_application.cc new file mode 100644 index 0000000000..dbf3c88029 --- /dev/null +++ b/generate_crossword/step_05_b/linux/runner/my_application.cc @@ -0,0 +1,130 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "generate_crossword"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "generate_crossword"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/generate_crossword/step_05_b/linux/my_application.h b/generate_crossword/step_05_b/linux/runner/my_application.h similarity index 100% rename from generate_crossword/step_05_b/linux/my_application.h rename to generate_crossword/step_05_b/linux/runner/my_application.h diff --git a/generate_crossword/step_05_b/pubspec.yaml b/generate_crossword/step_05_b/pubspec.yaml index d7d6b4985d..d2de9bff3c 100644 --- a/generate_crossword/step_05_b/pubspec.yaml +++ b/generate_crossword/step_05_b/pubspec.yaml @@ -21,10 +21,10 @@ dependencies: dev_dependencies: flutter_test: sdk: flutter - flutter_lints: ^4.0.0 + flutter_lints: ^5.0.0 build_runner: ^2.4.13 built_value_generator: ^8.9.2 - custom_lint: ^0.6.8 + custom_lint: ^0.6.10 riverpod_generator: ^2.6.1 riverpod_lint: ^2.6.1 diff --git a/generate_crossword/step_05_c/linux/CMakeLists.txt b/generate_crossword/step_05_c/linux/CMakeLists.txt index fc29586ba7..76ad2b9b7e 100644 --- a/generate_crossword/step_05_c/linux/CMakeLists.txt +++ b/generate_crossword/step_05_c/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/generate_crossword/step_05_c/linux/my_application.cc b/generate_crossword/step_05_c/linux/my_application.cc deleted file mode 100644 index 7030cf20f4..0000000000 --- a/generate_crossword/step_05_c/linux/my_application.cc +++ /dev/null @@ -1,124 +0,0 @@ -#include "my_application.h" - -#include -#ifdef GDK_WINDOWING_X11 -#include -#endif - -#include "flutter/generated_plugin_registrant.h" - -struct _MyApplication { - GtkApplication parent_instance; - char** dart_entrypoint_arguments; -}; - -G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) - -// Implements GApplication::activate. -static void my_application_activate(GApplication* application) { - MyApplication* self = MY_APPLICATION(application); - GtkWindow* window = - GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); - - // Use a header bar when running in GNOME as this is the common style used - // by applications and is the setup most users will be using (e.g. Ubuntu - // desktop). - // If running on X and not using GNOME then just use a traditional title bar - // in case the window manager does more exotic layout, e.g. tiling. - // If running on Wayland assume the header bar will work (may need changing - // if future cases occur). - gboolean use_header_bar = TRUE; -#ifdef GDK_WINDOWING_X11 - GdkScreen* screen = gtk_window_get_screen(window); - if (GDK_IS_X11_SCREEN(screen)) { - const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); - if (g_strcmp0(wm_name, "GNOME Shell") != 0) { - use_header_bar = FALSE; - } - } -#endif - if (use_header_bar) { - GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); - gtk_widget_show(GTK_WIDGET(header_bar)); - gtk_header_bar_set_title(header_bar, "generate_crossword"); - gtk_header_bar_set_show_close_button(header_bar, TRUE); - gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); - } else { - gtk_window_set_title(window, "generate_crossword"); - } - - gtk_window_set_default_size(window, 1280, 720); - gtk_widget_show(GTK_WIDGET(window)); - - g_autoptr(FlDartProject) project = fl_dart_project_new(); - fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); - - FlView* view = fl_view_new(project); - gtk_widget_show(GTK_WIDGET(view)); - gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); - - fl_register_plugins(FL_PLUGIN_REGISTRY(view)); - - gtk_widget_grab_focus(GTK_WIDGET(view)); -} - -// Implements GApplication::local_command_line. -static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { - MyApplication* self = MY_APPLICATION(application); - // Strip out the first argument as it is the binary name. - self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); - - g_autoptr(GError) error = nullptr; - if (!g_application_register(application, nullptr, &error)) { - g_warning("Failed to register: %s", error->message); - *exit_status = 1; - return TRUE; - } - - g_application_activate(application); - *exit_status = 0; - - return TRUE; -} - -// Implements GApplication::startup. -static void my_application_startup(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application startup. - - G_APPLICATION_CLASS(my_application_parent_class)->startup(application); -} - -// Implements GApplication::shutdown. -static void my_application_shutdown(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application shutdown. - - G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); -} - -// Implements GObject::dispose. -static void my_application_dispose(GObject* object) { - MyApplication* self = MY_APPLICATION(object); - g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); - G_OBJECT_CLASS(my_application_parent_class)->dispose(object); -} - -static void my_application_class_init(MyApplicationClass* klass) { - G_APPLICATION_CLASS(klass)->activate = my_application_activate; - G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; - G_APPLICATION_CLASS(klass)->startup = my_application_startup; - G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; - G_OBJECT_CLASS(klass)->dispose = my_application_dispose; -} - -static void my_application_init(MyApplication* self) {} - -MyApplication* my_application_new() { - return MY_APPLICATION(g_object_new(my_application_get_type(), - "application-id", APPLICATION_ID, - "flags", G_APPLICATION_NON_UNIQUE, - nullptr)); -} diff --git a/generate_crossword/step_05_c/linux/runner/CMakeLists.txt b/generate_crossword/step_05_c/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/generate_crossword/step_05_c/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/generate_crossword/step_05_c/linux/main.cc b/generate_crossword/step_05_c/linux/runner/main.cc similarity index 100% rename from generate_crossword/step_05_c/linux/main.cc rename to generate_crossword/step_05_c/linux/runner/main.cc diff --git a/generate_crossword/step_05_c/linux/runner/my_application.cc b/generate_crossword/step_05_c/linux/runner/my_application.cc new file mode 100644 index 0000000000..dbf3c88029 --- /dev/null +++ b/generate_crossword/step_05_c/linux/runner/my_application.cc @@ -0,0 +1,130 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "generate_crossword"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "generate_crossword"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/generate_crossword/step_05_c/linux/my_application.h b/generate_crossword/step_05_c/linux/runner/my_application.h similarity index 100% rename from generate_crossword/step_05_c/linux/my_application.h rename to generate_crossword/step_05_c/linux/runner/my_application.h diff --git a/generate_crossword/step_05_c/pubspec.yaml b/generate_crossword/step_05_c/pubspec.yaml index d7d6b4985d..d2de9bff3c 100644 --- a/generate_crossword/step_05_c/pubspec.yaml +++ b/generate_crossword/step_05_c/pubspec.yaml @@ -21,10 +21,10 @@ dependencies: dev_dependencies: flutter_test: sdk: flutter - flutter_lints: ^4.0.0 + flutter_lints: ^5.0.0 build_runner: ^2.4.13 built_value_generator: ^8.9.2 - custom_lint: ^0.6.8 + custom_lint: ^0.6.10 riverpod_generator: ^2.6.1 riverpod_lint: ^2.6.1 diff --git a/generate_crossword/step_06/linux/CMakeLists.txt b/generate_crossword/step_06/linux/CMakeLists.txt index fc29586ba7..76ad2b9b7e 100644 --- a/generate_crossword/step_06/linux/CMakeLists.txt +++ b/generate_crossword/step_06/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/generate_crossword/step_06/linux/my_application.cc b/generate_crossword/step_06/linux/my_application.cc deleted file mode 100644 index 7030cf20f4..0000000000 --- a/generate_crossword/step_06/linux/my_application.cc +++ /dev/null @@ -1,124 +0,0 @@ -#include "my_application.h" - -#include -#ifdef GDK_WINDOWING_X11 -#include -#endif - -#include "flutter/generated_plugin_registrant.h" - -struct _MyApplication { - GtkApplication parent_instance; - char** dart_entrypoint_arguments; -}; - -G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) - -// Implements GApplication::activate. -static void my_application_activate(GApplication* application) { - MyApplication* self = MY_APPLICATION(application); - GtkWindow* window = - GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); - - // Use a header bar when running in GNOME as this is the common style used - // by applications and is the setup most users will be using (e.g. Ubuntu - // desktop). - // If running on X and not using GNOME then just use a traditional title bar - // in case the window manager does more exotic layout, e.g. tiling. - // If running on Wayland assume the header bar will work (may need changing - // if future cases occur). - gboolean use_header_bar = TRUE; -#ifdef GDK_WINDOWING_X11 - GdkScreen* screen = gtk_window_get_screen(window); - if (GDK_IS_X11_SCREEN(screen)) { - const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); - if (g_strcmp0(wm_name, "GNOME Shell") != 0) { - use_header_bar = FALSE; - } - } -#endif - if (use_header_bar) { - GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); - gtk_widget_show(GTK_WIDGET(header_bar)); - gtk_header_bar_set_title(header_bar, "generate_crossword"); - gtk_header_bar_set_show_close_button(header_bar, TRUE); - gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); - } else { - gtk_window_set_title(window, "generate_crossword"); - } - - gtk_window_set_default_size(window, 1280, 720); - gtk_widget_show(GTK_WIDGET(window)); - - g_autoptr(FlDartProject) project = fl_dart_project_new(); - fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); - - FlView* view = fl_view_new(project); - gtk_widget_show(GTK_WIDGET(view)); - gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); - - fl_register_plugins(FL_PLUGIN_REGISTRY(view)); - - gtk_widget_grab_focus(GTK_WIDGET(view)); -} - -// Implements GApplication::local_command_line. -static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { - MyApplication* self = MY_APPLICATION(application); - // Strip out the first argument as it is the binary name. - self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); - - g_autoptr(GError) error = nullptr; - if (!g_application_register(application, nullptr, &error)) { - g_warning("Failed to register: %s", error->message); - *exit_status = 1; - return TRUE; - } - - g_application_activate(application); - *exit_status = 0; - - return TRUE; -} - -// Implements GApplication::startup. -static void my_application_startup(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application startup. - - G_APPLICATION_CLASS(my_application_parent_class)->startup(application); -} - -// Implements GApplication::shutdown. -static void my_application_shutdown(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application shutdown. - - G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); -} - -// Implements GObject::dispose. -static void my_application_dispose(GObject* object) { - MyApplication* self = MY_APPLICATION(object); - g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); - G_OBJECT_CLASS(my_application_parent_class)->dispose(object); -} - -static void my_application_class_init(MyApplicationClass* klass) { - G_APPLICATION_CLASS(klass)->activate = my_application_activate; - G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; - G_APPLICATION_CLASS(klass)->startup = my_application_startup; - G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; - G_OBJECT_CLASS(klass)->dispose = my_application_dispose; -} - -static void my_application_init(MyApplication* self) {} - -MyApplication* my_application_new() { - return MY_APPLICATION(g_object_new(my_application_get_type(), - "application-id", APPLICATION_ID, - "flags", G_APPLICATION_NON_UNIQUE, - nullptr)); -} diff --git a/generate_crossword/step_06/linux/runner/CMakeLists.txt b/generate_crossword/step_06/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/generate_crossword/step_06/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/generate_crossword/step_06/linux/main.cc b/generate_crossword/step_06/linux/runner/main.cc similarity index 100% rename from generate_crossword/step_06/linux/main.cc rename to generate_crossword/step_06/linux/runner/main.cc diff --git a/generate_crossword/step_06/linux/runner/my_application.cc b/generate_crossword/step_06/linux/runner/my_application.cc new file mode 100644 index 0000000000..dbf3c88029 --- /dev/null +++ b/generate_crossword/step_06/linux/runner/my_application.cc @@ -0,0 +1,130 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "generate_crossword"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "generate_crossword"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/generate_crossword/step_06/linux/my_application.h b/generate_crossword/step_06/linux/runner/my_application.h similarity index 100% rename from generate_crossword/step_06/linux/my_application.h rename to generate_crossword/step_06/linux/runner/my_application.h diff --git a/generate_crossword/step_06/pubspec.yaml b/generate_crossword/step_06/pubspec.yaml index d7d6b4985d..d2de9bff3c 100644 --- a/generate_crossword/step_06/pubspec.yaml +++ b/generate_crossword/step_06/pubspec.yaml @@ -21,10 +21,10 @@ dependencies: dev_dependencies: flutter_test: sdk: flutter - flutter_lints: ^4.0.0 + flutter_lints: ^5.0.0 build_runner: ^2.4.13 built_value_generator: ^8.9.2 - custom_lint: ^0.6.8 + custom_lint: ^0.6.10 riverpod_generator: ^2.6.1 riverpod_lint: ^2.6.1 diff --git a/generate_crossword/step_07/linux/CMakeLists.txt b/generate_crossword/step_07/linux/CMakeLists.txt index fc29586ba7..76ad2b9b7e 100644 --- a/generate_crossword/step_07/linux/CMakeLists.txt +++ b/generate_crossword/step_07/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/generate_crossword/step_07/linux/my_application.cc b/generate_crossword/step_07/linux/my_application.cc deleted file mode 100644 index 7030cf20f4..0000000000 --- a/generate_crossword/step_07/linux/my_application.cc +++ /dev/null @@ -1,124 +0,0 @@ -#include "my_application.h" - -#include -#ifdef GDK_WINDOWING_X11 -#include -#endif - -#include "flutter/generated_plugin_registrant.h" - -struct _MyApplication { - GtkApplication parent_instance; - char** dart_entrypoint_arguments; -}; - -G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) - -// Implements GApplication::activate. -static void my_application_activate(GApplication* application) { - MyApplication* self = MY_APPLICATION(application); - GtkWindow* window = - GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); - - // Use a header bar when running in GNOME as this is the common style used - // by applications and is the setup most users will be using (e.g. Ubuntu - // desktop). - // If running on X and not using GNOME then just use a traditional title bar - // in case the window manager does more exotic layout, e.g. tiling. - // If running on Wayland assume the header bar will work (may need changing - // if future cases occur). - gboolean use_header_bar = TRUE; -#ifdef GDK_WINDOWING_X11 - GdkScreen* screen = gtk_window_get_screen(window); - if (GDK_IS_X11_SCREEN(screen)) { - const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); - if (g_strcmp0(wm_name, "GNOME Shell") != 0) { - use_header_bar = FALSE; - } - } -#endif - if (use_header_bar) { - GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); - gtk_widget_show(GTK_WIDGET(header_bar)); - gtk_header_bar_set_title(header_bar, "generate_crossword"); - gtk_header_bar_set_show_close_button(header_bar, TRUE); - gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); - } else { - gtk_window_set_title(window, "generate_crossword"); - } - - gtk_window_set_default_size(window, 1280, 720); - gtk_widget_show(GTK_WIDGET(window)); - - g_autoptr(FlDartProject) project = fl_dart_project_new(); - fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); - - FlView* view = fl_view_new(project); - gtk_widget_show(GTK_WIDGET(view)); - gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); - - fl_register_plugins(FL_PLUGIN_REGISTRY(view)); - - gtk_widget_grab_focus(GTK_WIDGET(view)); -} - -// Implements GApplication::local_command_line. -static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { - MyApplication* self = MY_APPLICATION(application); - // Strip out the first argument as it is the binary name. - self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); - - g_autoptr(GError) error = nullptr; - if (!g_application_register(application, nullptr, &error)) { - g_warning("Failed to register: %s", error->message); - *exit_status = 1; - return TRUE; - } - - g_application_activate(application); - *exit_status = 0; - - return TRUE; -} - -// Implements GApplication::startup. -static void my_application_startup(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application startup. - - G_APPLICATION_CLASS(my_application_parent_class)->startup(application); -} - -// Implements GApplication::shutdown. -static void my_application_shutdown(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application shutdown. - - G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); -} - -// Implements GObject::dispose. -static void my_application_dispose(GObject* object) { - MyApplication* self = MY_APPLICATION(object); - g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); - G_OBJECT_CLASS(my_application_parent_class)->dispose(object); -} - -static void my_application_class_init(MyApplicationClass* klass) { - G_APPLICATION_CLASS(klass)->activate = my_application_activate; - G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; - G_APPLICATION_CLASS(klass)->startup = my_application_startup; - G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; - G_OBJECT_CLASS(klass)->dispose = my_application_dispose; -} - -static void my_application_init(MyApplication* self) {} - -MyApplication* my_application_new() { - return MY_APPLICATION(g_object_new(my_application_get_type(), - "application-id", APPLICATION_ID, - "flags", G_APPLICATION_NON_UNIQUE, - nullptr)); -} diff --git a/generate_crossword/step_07/linux/runner/CMakeLists.txt b/generate_crossword/step_07/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/generate_crossword/step_07/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/generate_crossword/step_07/linux/main.cc b/generate_crossword/step_07/linux/runner/main.cc similarity index 100% rename from generate_crossword/step_07/linux/main.cc rename to generate_crossword/step_07/linux/runner/main.cc diff --git a/generate_crossword/step_07/linux/runner/my_application.cc b/generate_crossword/step_07/linux/runner/my_application.cc new file mode 100644 index 0000000000..dbf3c88029 --- /dev/null +++ b/generate_crossword/step_07/linux/runner/my_application.cc @@ -0,0 +1,130 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "generate_crossword"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "generate_crossword"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/generate_crossword/step_07/linux/my_application.h b/generate_crossword/step_07/linux/runner/my_application.h similarity index 100% rename from generate_crossword/step_07/linux/my_application.h rename to generate_crossword/step_07/linux/runner/my_application.h diff --git a/generate_crossword/step_07/pubspec.yaml b/generate_crossword/step_07/pubspec.yaml index d7d6b4985d..d2de9bff3c 100644 --- a/generate_crossword/step_07/pubspec.yaml +++ b/generate_crossword/step_07/pubspec.yaml @@ -21,10 +21,10 @@ dependencies: dev_dependencies: flutter_test: sdk: flutter - flutter_lints: ^4.0.0 + flutter_lints: ^5.0.0 build_runner: ^2.4.13 built_value_generator: ^8.9.2 - custom_lint: ^0.6.8 + custom_lint: ^0.6.10 riverpod_generator: ^2.6.1 riverpod_lint: ^2.6.1 diff --git a/generate_crossword/step_08/linux/CMakeLists.txt b/generate_crossword/step_08/linux/CMakeLists.txt index fc29586ba7..76ad2b9b7e 100644 --- a/generate_crossword/step_08/linux/CMakeLists.txt +++ b/generate_crossword/step_08/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/generate_crossword/step_08/linux/my_application.cc b/generate_crossword/step_08/linux/my_application.cc deleted file mode 100644 index 7030cf20f4..0000000000 --- a/generate_crossword/step_08/linux/my_application.cc +++ /dev/null @@ -1,124 +0,0 @@ -#include "my_application.h" - -#include -#ifdef GDK_WINDOWING_X11 -#include -#endif - -#include "flutter/generated_plugin_registrant.h" - -struct _MyApplication { - GtkApplication parent_instance; - char** dart_entrypoint_arguments; -}; - -G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) - -// Implements GApplication::activate. -static void my_application_activate(GApplication* application) { - MyApplication* self = MY_APPLICATION(application); - GtkWindow* window = - GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); - - // Use a header bar when running in GNOME as this is the common style used - // by applications and is the setup most users will be using (e.g. Ubuntu - // desktop). - // If running on X and not using GNOME then just use a traditional title bar - // in case the window manager does more exotic layout, e.g. tiling. - // If running on Wayland assume the header bar will work (may need changing - // if future cases occur). - gboolean use_header_bar = TRUE; -#ifdef GDK_WINDOWING_X11 - GdkScreen* screen = gtk_window_get_screen(window); - if (GDK_IS_X11_SCREEN(screen)) { - const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); - if (g_strcmp0(wm_name, "GNOME Shell") != 0) { - use_header_bar = FALSE; - } - } -#endif - if (use_header_bar) { - GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); - gtk_widget_show(GTK_WIDGET(header_bar)); - gtk_header_bar_set_title(header_bar, "generate_crossword"); - gtk_header_bar_set_show_close_button(header_bar, TRUE); - gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); - } else { - gtk_window_set_title(window, "generate_crossword"); - } - - gtk_window_set_default_size(window, 1280, 720); - gtk_widget_show(GTK_WIDGET(window)); - - g_autoptr(FlDartProject) project = fl_dart_project_new(); - fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); - - FlView* view = fl_view_new(project); - gtk_widget_show(GTK_WIDGET(view)); - gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); - - fl_register_plugins(FL_PLUGIN_REGISTRY(view)); - - gtk_widget_grab_focus(GTK_WIDGET(view)); -} - -// Implements GApplication::local_command_line. -static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { - MyApplication* self = MY_APPLICATION(application); - // Strip out the first argument as it is the binary name. - self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); - - g_autoptr(GError) error = nullptr; - if (!g_application_register(application, nullptr, &error)) { - g_warning("Failed to register: %s", error->message); - *exit_status = 1; - return TRUE; - } - - g_application_activate(application); - *exit_status = 0; - - return TRUE; -} - -// Implements GApplication::startup. -static void my_application_startup(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application startup. - - G_APPLICATION_CLASS(my_application_parent_class)->startup(application); -} - -// Implements GApplication::shutdown. -static void my_application_shutdown(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application shutdown. - - G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); -} - -// Implements GObject::dispose. -static void my_application_dispose(GObject* object) { - MyApplication* self = MY_APPLICATION(object); - g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); - G_OBJECT_CLASS(my_application_parent_class)->dispose(object); -} - -static void my_application_class_init(MyApplicationClass* klass) { - G_APPLICATION_CLASS(klass)->activate = my_application_activate; - G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; - G_APPLICATION_CLASS(klass)->startup = my_application_startup; - G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; - G_OBJECT_CLASS(klass)->dispose = my_application_dispose; -} - -static void my_application_init(MyApplication* self) {} - -MyApplication* my_application_new() { - return MY_APPLICATION(g_object_new(my_application_get_type(), - "application-id", APPLICATION_ID, - "flags", G_APPLICATION_NON_UNIQUE, - nullptr)); -} diff --git a/generate_crossword/step_08/linux/runner/CMakeLists.txt b/generate_crossword/step_08/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/generate_crossword/step_08/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/generate_crossword/step_08/linux/main.cc b/generate_crossword/step_08/linux/runner/main.cc similarity index 100% rename from generate_crossword/step_08/linux/main.cc rename to generate_crossword/step_08/linux/runner/main.cc diff --git a/generate_crossword/step_08/linux/runner/my_application.cc b/generate_crossword/step_08/linux/runner/my_application.cc new file mode 100644 index 0000000000..dbf3c88029 --- /dev/null +++ b/generate_crossword/step_08/linux/runner/my_application.cc @@ -0,0 +1,130 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "generate_crossword"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "generate_crossword"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/generate_crossword/step_08/linux/my_application.h b/generate_crossword/step_08/linux/runner/my_application.h similarity index 100% rename from generate_crossword/step_08/linux/my_application.h rename to generate_crossword/step_08/linux/runner/my_application.h diff --git a/generate_crossword/step_08/pubspec.yaml b/generate_crossword/step_08/pubspec.yaml index d7d6b4985d..d2de9bff3c 100644 --- a/generate_crossword/step_08/pubspec.yaml +++ b/generate_crossword/step_08/pubspec.yaml @@ -21,10 +21,10 @@ dependencies: dev_dependencies: flutter_test: sdk: flutter - flutter_lints: ^4.0.0 + flutter_lints: ^5.0.0 build_runner: ^2.4.13 built_value_generator: ^8.9.2 - custom_lint: ^0.6.8 + custom_lint: ^0.6.10 riverpod_generator: ^2.6.1 riverpod_lint: ^2.6.1 diff --git a/generate_crossword/step_09/linux/CMakeLists.txt b/generate_crossword/step_09/linux/CMakeLists.txt index fc29586ba7..76ad2b9b7e 100644 --- a/generate_crossword/step_09/linux/CMakeLists.txt +++ b/generate_crossword/step_09/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/generate_crossword/step_09/linux/my_application.cc b/generate_crossword/step_09/linux/my_application.cc deleted file mode 100644 index 7030cf20f4..0000000000 --- a/generate_crossword/step_09/linux/my_application.cc +++ /dev/null @@ -1,124 +0,0 @@ -#include "my_application.h" - -#include -#ifdef GDK_WINDOWING_X11 -#include -#endif - -#include "flutter/generated_plugin_registrant.h" - -struct _MyApplication { - GtkApplication parent_instance; - char** dart_entrypoint_arguments; -}; - -G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) - -// Implements GApplication::activate. -static void my_application_activate(GApplication* application) { - MyApplication* self = MY_APPLICATION(application); - GtkWindow* window = - GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); - - // Use a header bar when running in GNOME as this is the common style used - // by applications and is the setup most users will be using (e.g. Ubuntu - // desktop). - // If running on X and not using GNOME then just use a traditional title bar - // in case the window manager does more exotic layout, e.g. tiling. - // If running on Wayland assume the header bar will work (may need changing - // if future cases occur). - gboolean use_header_bar = TRUE; -#ifdef GDK_WINDOWING_X11 - GdkScreen* screen = gtk_window_get_screen(window); - if (GDK_IS_X11_SCREEN(screen)) { - const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); - if (g_strcmp0(wm_name, "GNOME Shell") != 0) { - use_header_bar = FALSE; - } - } -#endif - if (use_header_bar) { - GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); - gtk_widget_show(GTK_WIDGET(header_bar)); - gtk_header_bar_set_title(header_bar, "generate_crossword"); - gtk_header_bar_set_show_close_button(header_bar, TRUE); - gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); - } else { - gtk_window_set_title(window, "generate_crossword"); - } - - gtk_window_set_default_size(window, 1280, 720); - gtk_widget_show(GTK_WIDGET(window)); - - g_autoptr(FlDartProject) project = fl_dart_project_new(); - fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); - - FlView* view = fl_view_new(project); - gtk_widget_show(GTK_WIDGET(view)); - gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); - - fl_register_plugins(FL_PLUGIN_REGISTRY(view)); - - gtk_widget_grab_focus(GTK_WIDGET(view)); -} - -// Implements GApplication::local_command_line. -static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { - MyApplication* self = MY_APPLICATION(application); - // Strip out the first argument as it is the binary name. - self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); - - g_autoptr(GError) error = nullptr; - if (!g_application_register(application, nullptr, &error)) { - g_warning("Failed to register: %s", error->message); - *exit_status = 1; - return TRUE; - } - - g_application_activate(application); - *exit_status = 0; - - return TRUE; -} - -// Implements GApplication::startup. -static void my_application_startup(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application startup. - - G_APPLICATION_CLASS(my_application_parent_class)->startup(application); -} - -// Implements GApplication::shutdown. -static void my_application_shutdown(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application shutdown. - - G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); -} - -// Implements GObject::dispose. -static void my_application_dispose(GObject* object) { - MyApplication* self = MY_APPLICATION(object); - g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); - G_OBJECT_CLASS(my_application_parent_class)->dispose(object); -} - -static void my_application_class_init(MyApplicationClass* klass) { - G_APPLICATION_CLASS(klass)->activate = my_application_activate; - G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; - G_APPLICATION_CLASS(klass)->startup = my_application_startup; - G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; - G_OBJECT_CLASS(klass)->dispose = my_application_dispose; -} - -static void my_application_init(MyApplication* self) {} - -MyApplication* my_application_new() { - return MY_APPLICATION(g_object_new(my_application_get_type(), - "application-id", APPLICATION_ID, - "flags", G_APPLICATION_NON_UNIQUE, - nullptr)); -} diff --git a/generate_crossword/step_09/linux/runner/CMakeLists.txt b/generate_crossword/step_09/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/generate_crossword/step_09/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/generate_crossword/step_09/linux/main.cc b/generate_crossword/step_09/linux/runner/main.cc similarity index 100% rename from generate_crossword/step_09/linux/main.cc rename to generate_crossword/step_09/linux/runner/main.cc diff --git a/generate_crossword/step_09/linux/runner/my_application.cc b/generate_crossword/step_09/linux/runner/my_application.cc new file mode 100644 index 0000000000..dbf3c88029 --- /dev/null +++ b/generate_crossword/step_09/linux/runner/my_application.cc @@ -0,0 +1,130 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "generate_crossword"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "generate_crossword"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/generate_crossword/step_09/linux/my_application.h b/generate_crossword/step_09/linux/runner/my_application.h similarity index 100% rename from generate_crossword/step_09/linux/my_application.h rename to generate_crossword/step_09/linux/runner/my_application.h diff --git a/generate_crossword/step_09/pubspec.yaml b/generate_crossword/step_09/pubspec.yaml index d7d6b4985d..d2de9bff3c 100644 --- a/generate_crossword/step_09/pubspec.yaml +++ b/generate_crossword/step_09/pubspec.yaml @@ -21,10 +21,10 @@ dependencies: dev_dependencies: flutter_test: sdk: flutter - flutter_lints: ^4.0.0 + flutter_lints: ^5.0.0 build_runner: ^2.4.13 built_value_generator: ^8.9.2 - custom_lint: ^0.6.8 + custom_lint: ^0.6.10 riverpod_generator: ^2.6.1 riverpod_lint: ^2.6.1 From 28a1794530750f2b6c3546cb4a43dca599d4eca5 Mon Sep 17 00:00:00 2001 From: Brett Morgan Date: Tue, 12 Nov 2024 16:51:38 +1100 Subject: [PATCH 034/108] Update `adaptive_app` --- adaptive_app/codelab_rebuild.yaml | 4 +- adaptive_app/step_03/linux/CMakeLists.txt | 23 +-- .../step_03/linux/runner/CMakeLists.txt | 26 ++++ .../step_03/linux/{ => runner}/main.cc | 0 .../linux/{ => runner}/my_application.cc | 6 + .../linux/{ => runner}/my_application.h | 0 adaptive_app/step_03/pubspec.yaml | 1 - adaptive_app/step_03/web/index.html | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 128 ++++++++-------- adaptive_app/step_04/linux/CMakeLists.txt | 23 +-- .../step_04/linux/runner/CMakeLists.txt | 26 ++++ .../step_04/linux/{ => runner}/main.cc | 0 .../linux/{ => runner}/my_application.cc | 6 + .../linux/{ => runner}/my_application.h | 0 .../macos/Runner.xcodeproj/project.pbxproj | 98 ++++++------ adaptive_app/step_04/pubspec.yaml | 5 +- adaptive_app/step_04/web/index.html | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 128 ++++++++-------- adaptive_app/step_05/linux/CMakeLists.txt | 23 +-- .../step_05/linux/runner/CMakeLists.txt | 26 ++++ .../step_05/linux/{ => runner}/main.cc | 0 .../linux/{ => runner}/my_application.cc | 6 + .../linux/{ => runner}/my_application.h | 0 .../macos/Runner.xcodeproj/project.pbxproj | 98 ++++++------ adaptive_app/step_05/pubspec.yaml | 5 +- adaptive_app/step_05/web/index.html | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 128 ++++++++-------- adaptive_app/step_06/linux/CMakeLists.txt | 23 +-- .../step_06/linux/runner/CMakeLists.txt | 26 ++++ .../step_06/linux/{ => runner}/main.cc | 0 .../linux/{ => runner}/my_application.cc | 6 + .../linux/{ => runner}/my_application.h | 0 .../macos/Runner.xcodeproj/project.pbxproj | 98 ++++++------ adaptive_app/step_06/pubspec.yaml | 5 +- adaptive_app/step_06/web/index.html | 2 +- .../step_06/yt_cors_proxy/pubspec.yaml | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 144 +++++++++--------- adaptive_app/step_07/linux/CMakeLists.txt | 23 +-- adaptive_app/step_07/linux/my_application.cc | 124 --------------- .../step_07/linux/runner/CMakeLists.txt | 26 ++++ .../step_07/linux/{ => runner}/main.cc | 0 .../step_07/linux/runner/my_application.cc | 130 ++++++++++++++++ .../linux/{ => runner}/my_application.h | 0 .../macos/Runner.xcodeproj/project.pbxproj | 128 ++++++++-------- adaptive_app/step_07/pubspec.yaml | 7 +- adaptive_app/step_07/web/index.html | 2 +- .../step_07/yt_cors_proxy/pubspec.yaml | 2 +- 47 files changed, 792 insertions(+), 722 deletions(-) create mode 100644 adaptive_app/step_03/linux/runner/CMakeLists.txt rename adaptive_app/step_03/linux/{ => runner}/main.cc (100%) rename adaptive_app/step_03/linux/{ => runner}/my_application.cc (93%) rename adaptive_app/step_03/linux/{ => runner}/my_application.h (100%) create mode 100644 adaptive_app/step_04/linux/runner/CMakeLists.txt rename adaptive_app/step_04/linux/{ => runner}/main.cc (100%) rename adaptive_app/step_04/linux/{ => runner}/my_application.cc (93%) rename adaptive_app/step_04/linux/{ => runner}/my_application.h (100%) create mode 100644 adaptive_app/step_05/linux/runner/CMakeLists.txt rename adaptive_app/step_05/linux/{ => runner}/main.cc (100%) rename adaptive_app/step_05/linux/{ => runner}/my_application.cc (93%) rename adaptive_app/step_05/linux/{ => runner}/my_application.h (100%) create mode 100644 adaptive_app/step_06/linux/runner/CMakeLists.txt rename adaptive_app/step_06/linux/{ => runner}/main.cc (100%) rename adaptive_app/step_06/linux/{ => runner}/my_application.cc (93%) rename adaptive_app/step_06/linux/{ => runner}/my_application.h (100%) delete mode 100644 adaptive_app/step_07/linux/my_application.cc create mode 100644 adaptive_app/step_07/linux/runner/CMakeLists.txt rename adaptive_app/step_07/linux/{ => runner}/main.cc (100%) create mode 100644 adaptive_app/step_07/linux/runner/my_application.cc rename adaptive_app/step_07/linux/{ => runner}/my_application.h (100%) diff --git a/adaptive_app/codelab_rebuild.yaml b/adaptive_app/codelab_rebuild.yaml index 83d941bae9..d6fbdcc88e 100644 --- a/adaptive_app/codelab_rebuild.yaml +++ b/adaptive_app/codelab_rebuild.yaml @@ -1074,9 +1074,9 @@ steps: - name: Create yt_cors_proxy path: adaptive_app dart: create --template server-shelf yt_cors_proxy - - name: Remove args shelf_router test + - name: Remove shelf_router test path: adaptive_app/yt_cors_proxy - dart: pub remove args shelf_router test + dart: pub remove shelf_router test - name: Add http shelf_cors_headers path: adaptive_app/yt_cors_proxy dart: pub add http shelf_cors_headers diff --git a/adaptive_app/step_03/linux/CMakeLists.txt b/adaptive_app/step_03/linux/CMakeLists.txt index 95047a637a..860cc230f2 100644 --- a/adaptive_app/step_03/linux/CMakeLists.txt +++ b/adaptive_app/step_03/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/adaptive_app/step_03/linux/runner/CMakeLists.txt b/adaptive_app/step_03/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/adaptive_app/step_03/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/adaptive_app/step_03/linux/main.cc b/adaptive_app/step_03/linux/runner/main.cc similarity index 100% rename from adaptive_app/step_03/linux/main.cc rename to adaptive_app/step_03/linux/runner/main.cc diff --git a/adaptive_app/step_03/linux/my_application.cc b/adaptive_app/step_03/linux/runner/my_application.cc similarity index 93% rename from adaptive_app/step_03/linux/my_application.cc rename to adaptive_app/step_03/linux/runner/my_application.cc index a2e720d593..c839eec643 100644 --- a/adaptive_app/step_03/linux/my_application.cc +++ b/adaptive_app/step_03/linux/runner/my_application.cc @@ -117,6 +117,12 @@ static void my_application_class_init(MyApplicationClass* klass) { static void my_application_init(MyApplication* self) {} MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + return MY_APPLICATION(g_object_new(my_application_get_type(), "application-id", APPLICATION_ID, "flags", G_APPLICATION_NON_UNIQUE, diff --git a/adaptive_app/step_03/linux/my_application.h b/adaptive_app/step_03/linux/runner/my_application.h similarity index 100% rename from adaptive_app/step_03/linux/my_application.h rename to adaptive_app/step_03/linux/runner/my_application.h diff --git a/adaptive_app/step_03/pubspec.yaml b/adaptive_app/step_03/pubspec.yaml index 102da5c96b..59a7434821 100644 --- a/adaptive_app/step_03/pubspec.yaml +++ b/adaptive_app/step_03/pubspec.yaml @@ -31,7 +31,6 @@ dependencies: flutter: sdk: flutter - # The following adds the Cupertino Icons font to your application. # Use with the CupertinoIcons class for iOS style icons. cupertino_icons: ^1.0.8 diff --git a/adaptive_app/step_03/web/index.html b/adaptive_app/step_03/web/index.html index ce0ee3b7e5..86f03b98cf 100644 --- a/adaptive_app/step_03/web/index.html +++ b/adaptive_app/step_03/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/adaptive_app/step_04/ios/Runner.xcodeproj/project.pbxproj b/adaptive_app/step_04/ios/Runner.xcodeproj/project.pbxproj index c6f3ba5ca1..512b5a18de 100644 --- a/adaptive_app/step_04/ios/Runner.xcodeproj/project.pbxproj +++ b/adaptive_app/step_04/ios/Runner.xcodeproj/project.pbxproj @@ -9,13 +9,13 @@ /* Begin PBXBuildFile section */ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; + 3AE7C7DF67AA4CDF243E2E1C /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7C07A2960006E0A16CB1B561 /* Pods_Runner.framework */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; - 818857E73EDFF566602D3979 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 076253C42DA8398DAD9D0C5E /* Pods_Runner.framework */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - C53864E63C88D9E3FC6471E4 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A265904E40237EBD76393AA5 /* Pods_RunnerTests.framework */; }; + E1DB66C58B70207C10007CBF /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 73DB936017B364807528B099 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,19 +42,20 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 03DE4A7390E81C1529576B4D /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - 076253C42DA8398DAD9D0C5E /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 09CDCA9C423B2CDBEE5880DC /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 0C2DDD7828CF904B25EAC222 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 3667019138558933973CD77A /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; + 5F88E23C37558266340B2D91 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 7140F2A21BE1D4615BE7905B /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 73DB936017B364807528B099 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 900B8CCF12E3F041E3872BF1 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 7C07A2960006E0A16CB1B561 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 91CF80C7305E0756AD09AC93 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -62,54 +63,30 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 9CECD94FC0E21C4E2F3471FF /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - A265904E40237EBD76393AA5 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - F099B0A652C0F4AAE15492B0 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + B3E2F20D5F23748D9C9431A1 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + DCAD021F025D21E0842F9C11 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 23A5040ECE20822260D727D1 /* Frameworks */ = { + 97C146EB1CF9000F007C117D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - C53864E63C88D9E3FC6471E4 /* Pods_RunnerTests.framework in Frameworks */, + 3AE7C7DF67AA4CDF243E2E1C /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 97C146EB1CF9000F007C117D /* Frameworks */ = { + C97E2568A22FD470B376D43A /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 818857E73EDFF566602D3979 /* Pods_Runner.framework in Frameworks */, + E1DB66C58B70207C10007CBF /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 0D5C22ED61BF09A0B2D63659 /* Frameworks */ = { - isa = PBXGroup; - children = ( - 076253C42DA8398DAD9D0C5E /* Pods_Runner.framework */, - A265904E40237EBD76393AA5 /* Pods_RunnerTests.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; - 1D3E27B5CE2CC03AC9FED23D /* Pods */ = { - isa = PBXGroup; - children = ( - 09CDCA9C423B2CDBEE5880DC /* Pods-Runner.debug.xcconfig */, - 900B8CCF12E3F041E3872BF1 /* Pods-Runner.release.xcconfig */, - F099B0A652C0F4AAE15492B0 /* Pods-Runner.profile.xcconfig */, - 9CECD94FC0E21C4E2F3471FF /* Pods-RunnerTests.debug.xcconfig */, - 03DE4A7390E81C1529576B4D /* Pods-RunnerTests.release.xcconfig */, - 0C2DDD7828CF904B25EAC222 /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; 331C8082294A63A400263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -136,8 +113,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - 1D3E27B5CE2CC03AC9FED23D /* Pods */, - 0D5C22ED61BF09A0B2D63659 /* Frameworks */, + E135EF9AADA269FF5FC2ED2C /* Pods */, + CC59AB8EBA23BDDE38EA5FCC /* Frameworks */, ); sourceTree = ""; }; @@ -165,6 +142,29 @@ path = Runner; sourceTree = ""; }; + CC59AB8EBA23BDDE38EA5FCC /* Frameworks */ = { + isa = PBXGroup; + children = ( + 7C07A2960006E0A16CB1B561 /* Pods_Runner.framework */, + 73DB936017B364807528B099 /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; + E135EF9AADA269FF5FC2ED2C /* Pods */ = { + isa = PBXGroup; + children = ( + 91CF80C7305E0756AD09AC93 /* Pods-Runner.debug.xcconfig */, + 5F88E23C37558266340B2D91 /* Pods-Runner.release.xcconfig */, + B3E2F20D5F23748D9C9431A1 /* Pods-Runner.profile.xcconfig */, + 3667019138558933973CD77A /* Pods-RunnerTests.debug.xcconfig */, + DCAD021F025D21E0842F9C11 /* Pods-RunnerTests.release.xcconfig */, + 7140F2A21BE1D4615BE7905B /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - EF1662C484A2B971954E5DE7 /* [CP] Check Pods Manifest.lock */, + A001BA7F57EE3D79EFFD0EF1 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 23A5040ECE20822260D727D1 /* Frameworks */, + C97E2568A22FD470B376D43A /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 4B400C64A9F780E303D56362 /* [CP] Check Pods Manifest.lock */, + C41B444AA018B8FD8810556B /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - F6ED726599594C9355B00DE8 /* [CP] Embed Pods Frameworks */, + EA6AA4E9EF4215A1718DDDC9 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -286,44 +286,44 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 4B400C64A9F780E303D56362 /* [CP] Check Pods Manifest.lock */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( ); + name = "Run Script"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { + A001BA7F57EE3D79EFFD0EF1 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "Run Script"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - EF1662C484A2B971954E5DE7 /* [CP] Check Pods Manifest.lock */ = { + C41B444AA018B8FD8810556B /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -338,14 +338,14 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - F6ED726599594C9355B00DE8 /* [CP] Embed Pods Frameworks */ = { + EA6AA4E9EF4215A1718DDDC9 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 9CECD94FC0E21C4E2F3471FF /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 3667019138558933973CD77A /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 03DE4A7390E81C1529576B4D /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = DCAD021F025D21E0842F9C11 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 0C2DDD7828CF904B25EAC222 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 7140F2A21BE1D4615BE7905B /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/adaptive_app/step_04/linux/CMakeLists.txt b/adaptive_app/step_04/linux/CMakeLists.txt index 95047a637a..860cc230f2 100644 --- a/adaptive_app/step_04/linux/CMakeLists.txt +++ b/adaptive_app/step_04/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/adaptive_app/step_04/linux/runner/CMakeLists.txt b/adaptive_app/step_04/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/adaptive_app/step_04/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/adaptive_app/step_04/linux/main.cc b/adaptive_app/step_04/linux/runner/main.cc similarity index 100% rename from adaptive_app/step_04/linux/main.cc rename to adaptive_app/step_04/linux/runner/main.cc diff --git a/adaptive_app/step_04/linux/my_application.cc b/adaptive_app/step_04/linux/runner/my_application.cc similarity index 93% rename from adaptive_app/step_04/linux/my_application.cc rename to adaptive_app/step_04/linux/runner/my_application.cc index a2e720d593..c839eec643 100644 --- a/adaptive_app/step_04/linux/my_application.cc +++ b/adaptive_app/step_04/linux/runner/my_application.cc @@ -117,6 +117,12 @@ static void my_application_class_init(MyApplicationClass* klass) { static void my_application_init(MyApplication* self) {} MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + return MY_APPLICATION(g_object_new(my_application_get_type(), "application-id", APPLICATION_ID, "flags", G_APPLICATION_NON_UNIQUE, diff --git a/adaptive_app/step_04/linux/my_application.h b/adaptive_app/step_04/linux/runner/my_application.h similarity index 100% rename from adaptive_app/step_04/linux/my_application.h rename to adaptive_app/step_04/linux/runner/my_application.h diff --git a/adaptive_app/step_04/macos/Runner.xcodeproj/project.pbxproj b/adaptive_app/step_04/macos/Runner.xcodeproj/project.pbxproj index 272eda14e7..83effe2fe4 100644 --- a/adaptive_app/step_04/macos/Runner.xcodeproj/project.pbxproj +++ b/adaptive_app/step_04/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ - 0779940B4A2BFA69C1614EF1 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 83C8BE81D2605F4F3D5D6E43 /* Pods_Runner.framework */; }; + 2F9B180810AB765F1B54E002 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DA383A1C3D90B37EDAE6D729 /* Pods_Runner.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - D6BDF6487E1167604CD70873 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1702629233BAC4D256765DCD /* Pods_RunnerTests.framework */; }; + 69309F61A50CA3C54E77F970 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 58A5BBA4148C365D540080FF /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,10 +62,7 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 139BE8CDBBED09BD185EB46F /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - 1702629233BAC4D256765DCD /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 28D6467ED5715E597D403B78 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - 2F826F1F76A42B4953226C72 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 0FB8EF672BA40059DAE0971D /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -82,12 +79,15 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 5D3AEF155FBD871F42636FA6 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 48A5C0A56B536CFD25892C9D /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 4FCB4CB74835465DBF76AEE2 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 58A5BBA4148C365D540080FF /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 6191C3D6D5D8FE1E4C40E774 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 76BE812573BEA526EFADD390 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 83C8BE81D2605F4F3D5D6E43 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - 9C1C341528E24056DC0A3967 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - A02E023F403266AD4FD51FE3 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + B29B36FD5C12742852AC4DFE /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + DA383A1C3D90B37EDAE6D729 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - D6BDF6487E1167604CD70873 /* Pods_RunnerTests.framework in Frameworks */, + 69309F61A50CA3C54E77F970 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,7 +103,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 0779940B4A2BFA69C1614EF1 /* Pods_Runner.framework in Frameworks */, + 2F9B180810AB765F1B54E002 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -137,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 865DA271F115C3C9A9290FB5 /* Pods */, + 823035D7AE10C88CEA68C175 /* Pods */, ); sourceTree = ""; }; @@ -185,15 +185,15 @@ path = Runner; sourceTree = ""; }; - 865DA271F115C3C9A9290FB5 /* Pods */ = { + 823035D7AE10C88CEA68C175 /* Pods */ = { isa = PBXGroup; children = ( - 2F826F1F76A42B4953226C72 /* Pods-Runner.debug.xcconfig */, - A02E023F403266AD4FD51FE3 /* Pods-Runner.release.xcconfig */, - 9C1C341528E24056DC0A3967 /* Pods-Runner.profile.xcconfig */, - 5D3AEF155FBD871F42636FA6 /* Pods-RunnerTests.debug.xcconfig */, - 28D6467ED5715E597D403B78 /* Pods-RunnerTests.release.xcconfig */, - 139BE8CDBBED09BD185EB46F /* Pods-RunnerTests.profile.xcconfig */, + B29B36FD5C12742852AC4DFE /* Pods-Runner.debug.xcconfig */, + 6191C3D6D5D8FE1E4C40E774 /* Pods-Runner.release.xcconfig */, + 48A5C0A56B536CFD25892C9D /* Pods-Runner.profile.xcconfig */, + 0FB8EF672BA40059DAE0971D /* Pods-RunnerTests.debug.xcconfig */, + 4FCB4CB74835465DBF76AEE2 /* Pods-RunnerTests.release.xcconfig */, + 76BE812573BEA526EFADD390 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -202,8 +202,8 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - 83C8BE81D2605F4F3D5D6E43 /* Pods_Runner.framework */, - 1702629233BAC4D256765DCD /* Pods_RunnerTests.framework */, + DA383A1C3D90B37EDAE6D729 /* Pods_Runner.framework */, + 58A5BBA4148C365D540080FF /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 662BB0A9A865DC319D87667E /* [CP] Check Pods Manifest.lock */, + 6B021C8235C0E046BDDCAC79 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - D68F277E53A7CDF7BBD90DDA /* [CP] Check Pods Manifest.lock */, + 6175E7F7D6386C261A7CA2B1 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - E50A2F9A715EDADE00C36A18 /* [CP] Embed Pods Frameworks */, + 13DA6B85C9A60F79C86317E9 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,6 +323,23 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ + 13DA6B85C9A60F79C86317E9 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -361,7 +378,7 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 662BB0A9A865DC319D87667E /* [CP] Check Pods Manifest.lock */ = { + 6175E7F7D6386C261A7CA2B1 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -376,14 +393,14 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - D68F277E53A7CDF7BBD90DDA /* [CP] Check Pods Manifest.lock */ = { + 6B021C8235C0E046BDDCAC79 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -398,30 +415,13 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - E50A2F9A715EDADE00C36A18 /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 5D3AEF155FBD871F42636FA6 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 0FB8EF672BA40059DAE0971D /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 28D6467ED5715E597D403B78 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 4FCB4CB74835465DBF76AEE2 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 139BE8CDBBED09BD185EB46F /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 76BE812573BEA526EFADD390 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/adaptive_app/step_04/pubspec.yaml b/adaptive_app/step_04/pubspec.yaml index f7c0a02e0d..dc4b0b15c2 100644 --- a/adaptive_app/step_04/pubspec.yaml +++ b/adaptive_app/step_04/pubspec.yaml @@ -31,7 +31,6 @@ dependencies: flutter: sdk: flutter - # The following adds the Cupertino Icons font to your application. # Use with the CupertinoIcons class for iOS style icons. cupertino_icons: ^1.0.8 @@ -39,8 +38,8 @@ dependencies: http: ^1.2.2 provider: ^6.1.2 url_launcher: ^6.3.1 - flex_color_scheme: ^7.3.1 - go_router: ^14.3.0 + flex_color_scheme: ^8.0.0 + go_router: ^14.4.1 dev_dependencies: flutter_test: diff --git a/adaptive_app/step_04/web/index.html b/adaptive_app/step_04/web/index.html index ce0ee3b7e5..86f03b98cf 100644 --- a/adaptive_app/step_04/web/index.html +++ b/adaptive_app/step_04/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/adaptive_app/step_05/ios/Runner.xcodeproj/project.pbxproj b/adaptive_app/step_05/ios/Runner.xcodeproj/project.pbxproj index c6f3ba5ca1..512b5a18de 100644 --- a/adaptive_app/step_05/ios/Runner.xcodeproj/project.pbxproj +++ b/adaptive_app/step_05/ios/Runner.xcodeproj/project.pbxproj @@ -9,13 +9,13 @@ /* Begin PBXBuildFile section */ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; + 3AE7C7DF67AA4CDF243E2E1C /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7C07A2960006E0A16CB1B561 /* Pods_Runner.framework */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; - 818857E73EDFF566602D3979 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 076253C42DA8398DAD9D0C5E /* Pods_Runner.framework */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - C53864E63C88D9E3FC6471E4 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A265904E40237EBD76393AA5 /* Pods_RunnerTests.framework */; }; + E1DB66C58B70207C10007CBF /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 73DB936017B364807528B099 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,19 +42,20 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 03DE4A7390E81C1529576B4D /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - 076253C42DA8398DAD9D0C5E /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 09CDCA9C423B2CDBEE5880DC /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 0C2DDD7828CF904B25EAC222 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 3667019138558933973CD77A /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; + 5F88E23C37558266340B2D91 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 7140F2A21BE1D4615BE7905B /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 73DB936017B364807528B099 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 900B8CCF12E3F041E3872BF1 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 7C07A2960006E0A16CB1B561 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 91CF80C7305E0756AD09AC93 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -62,54 +63,30 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 9CECD94FC0E21C4E2F3471FF /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - A265904E40237EBD76393AA5 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - F099B0A652C0F4AAE15492B0 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + B3E2F20D5F23748D9C9431A1 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + DCAD021F025D21E0842F9C11 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 23A5040ECE20822260D727D1 /* Frameworks */ = { + 97C146EB1CF9000F007C117D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - C53864E63C88D9E3FC6471E4 /* Pods_RunnerTests.framework in Frameworks */, + 3AE7C7DF67AA4CDF243E2E1C /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 97C146EB1CF9000F007C117D /* Frameworks */ = { + C97E2568A22FD470B376D43A /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 818857E73EDFF566602D3979 /* Pods_Runner.framework in Frameworks */, + E1DB66C58B70207C10007CBF /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 0D5C22ED61BF09A0B2D63659 /* Frameworks */ = { - isa = PBXGroup; - children = ( - 076253C42DA8398DAD9D0C5E /* Pods_Runner.framework */, - A265904E40237EBD76393AA5 /* Pods_RunnerTests.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; - 1D3E27B5CE2CC03AC9FED23D /* Pods */ = { - isa = PBXGroup; - children = ( - 09CDCA9C423B2CDBEE5880DC /* Pods-Runner.debug.xcconfig */, - 900B8CCF12E3F041E3872BF1 /* Pods-Runner.release.xcconfig */, - F099B0A652C0F4AAE15492B0 /* Pods-Runner.profile.xcconfig */, - 9CECD94FC0E21C4E2F3471FF /* Pods-RunnerTests.debug.xcconfig */, - 03DE4A7390E81C1529576B4D /* Pods-RunnerTests.release.xcconfig */, - 0C2DDD7828CF904B25EAC222 /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; 331C8082294A63A400263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -136,8 +113,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - 1D3E27B5CE2CC03AC9FED23D /* Pods */, - 0D5C22ED61BF09A0B2D63659 /* Frameworks */, + E135EF9AADA269FF5FC2ED2C /* Pods */, + CC59AB8EBA23BDDE38EA5FCC /* Frameworks */, ); sourceTree = ""; }; @@ -165,6 +142,29 @@ path = Runner; sourceTree = ""; }; + CC59AB8EBA23BDDE38EA5FCC /* Frameworks */ = { + isa = PBXGroup; + children = ( + 7C07A2960006E0A16CB1B561 /* Pods_Runner.framework */, + 73DB936017B364807528B099 /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; + E135EF9AADA269FF5FC2ED2C /* Pods */ = { + isa = PBXGroup; + children = ( + 91CF80C7305E0756AD09AC93 /* Pods-Runner.debug.xcconfig */, + 5F88E23C37558266340B2D91 /* Pods-Runner.release.xcconfig */, + B3E2F20D5F23748D9C9431A1 /* Pods-Runner.profile.xcconfig */, + 3667019138558933973CD77A /* Pods-RunnerTests.debug.xcconfig */, + DCAD021F025D21E0842F9C11 /* Pods-RunnerTests.release.xcconfig */, + 7140F2A21BE1D4615BE7905B /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - EF1662C484A2B971954E5DE7 /* [CP] Check Pods Manifest.lock */, + A001BA7F57EE3D79EFFD0EF1 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 23A5040ECE20822260D727D1 /* Frameworks */, + C97E2568A22FD470B376D43A /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 4B400C64A9F780E303D56362 /* [CP] Check Pods Manifest.lock */, + C41B444AA018B8FD8810556B /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - F6ED726599594C9355B00DE8 /* [CP] Embed Pods Frameworks */, + EA6AA4E9EF4215A1718DDDC9 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -286,44 +286,44 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 4B400C64A9F780E303D56362 /* [CP] Check Pods Manifest.lock */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( ); + name = "Run Script"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { + A001BA7F57EE3D79EFFD0EF1 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "Run Script"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - EF1662C484A2B971954E5DE7 /* [CP] Check Pods Manifest.lock */ = { + C41B444AA018B8FD8810556B /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -338,14 +338,14 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - F6ED726599594C9355B00DE8 /* [CP] Embed Pods Frameworks */ = { + EA6AA4E9EF4215A1718DDDC9 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 9CECD94FC0E21C4E2F3471FF /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 3667019138558933973CD77A /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 03DE4A7390E81C1529576B4D /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = DCAD021F025D21E0842F9C11 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 0C2DDD7828CF904B25EAC222 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 7140F2A21BE1D4615BE7905B /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/adaptive_app/step_05/linux/CMakeLists.txt b/adaptive_app/step_05/linux/CMakeLists.txt index 95047a637a..860cc230f2 100644 --- a/adaptive_app/step_05/linux/CMakeLists.txt +++ b/adaptive_app/step_05/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/adaptive_app/step_05/linux/runner/CMakeLists.txt b/adaptive_app/step_05/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/adaptive_app/step_05/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/adaptive_app/step_05/linux/main.cc b/adaptive_app/step_05/linux/runner/main.cc similarity index 100% rename from adaptive_app/step_05/linux/main.cc rename to adaptive_app/step_05/linux/runner/main.cc diff --git a/adaptive_app/step_05/linux/my_application.cc b/adaptive_app/step_05/linux/runner/my_application.cc similarity index 93% rename from adaptive_app/step_05/linux/my_application.cc rename to adaptive_app/step_05/linux/runner/my_application.cc index a2e720d593..c839eec643 100644 --- a/adaptive_app/step_05/linux/my_application.cc +++ b/adaptive_app/step_05/linux/runner/my_application.cc @@ -117,6 +117,12 @@ static void my_application_class_init(MyApplicationClass* klass) { static void my_application_init(MyApplication* self) {} MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + return MY_APPLICATION(g_object_new(my_application_get_type(), "application-id", APPLICATION_ID, "flags", G_APPLICATION_NON_UNIQUE, diff --git a/adaptive_app/step_05/linux/my_application.h b/adaptive_app/step_05/linux/runner/my_application.h similarity index 100% rename from adaptive_app/step_05/linux/my_application.h rename to adaptive_app/step_05/linux/runner/my_application.h diff --git a/adaptive_app/step_05/macos/Runner.xcodeproj/project.pbxproj b/adaptive_app/step_05/macos/Runner.xcodeproj/project.pbxproj index 272eda14e7..83effe2fe4 100644 --- a/adaptive_app/step_05/macos/Runner.xcodeproj/project.pbxproj +++ b/adaptive_app/step_05/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ - 0779940B4A2BFA69C1614EF1 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 83C8BE81D2605F4F3D5D6E43 /* Pods_Runner.framework */; }; + 2F9B180810AB765F1B54E002 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DA383A1C3D90B37EDAE6D729 /* Pods_Runner.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - D6BDF6487E1167604CD70873 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1702629233BAC4D256765DCD /* Pods_RunnerTests.framework */; }; + 69309F61A50CA3C54E77F970 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 58A5BBA4148C365D540080FF /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,10 +62,7 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 139BE8CDBBED09BD185EB46F /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - 1702629233BAC4D256765DCD /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 28D6467ED5715E597D403B78 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - 2F826F1F76A42B4953226C72 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 0FB8EF672BA40059DAE0971D /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -82,12 +79,15 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 5D3AEF155FBD871F42636FA6 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 48A5C0A56B536CFD25892C9D /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 4FCB4CB74835465DBF76AEE2 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 58A5BBA4148C365D540080FF /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 6191C3D6D5D8FE1E4C40E774 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 76BE812573BEA526EFADD390 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 83C8BE81D2605F4F3D5D6E43 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - 9C1C341528E24056DC0A3967 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - A02E023F403266AD4FD51FE3 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + B29B36FD5C12742852AC4DFE /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + DA383A1C3D90B37EDAE6D729 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - D6BDF6487E1167604CD70873 /* Pods_RunnerTests.framework in Frameworks */, + 69309F61A50CA3C54E77F970 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,7 +103,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 0779940B4A2BFA69C1614EF1 /* Pods_Runner.framework in Frameworks */, + 2F9B180810AB765F1B54E002 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -137,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 865DA271F115C3C9A9290FB5 /* Pods */, + 823035D7AE10C88CEA68C175 /* Pods */, ); sourceTree = ""; }; @@ -185,15 +185,15 @@ path = Runner; sourceTree = ""; }; - 865DA271F115C3C9A9290FB5 /* Pods */ = { + 823035D7AE10C88CEA68C175 /* Pods */ = { isa = PBXGroup; children = ( - 2F826F1F76A42B4953226C72 /* Pods-Runner.debug.xcconfig */, - A02E023F403266AD4FD51FE3 /* Pods-Runner.release.xcconfig */, - 9C1C341528E24056DC0A3967 /* Pods-Runner.profile.xcconfig */, - 5D3AEF155FBD871F42636FA6 /* Pods-RunnerTests.debug.xcconfig */, - 28D6467ED5715E597D403B78 /* Pods-RunnerTests.release.xcconfig */, - 139BE8CDBBED09BD185EB46F /* Pods-RunnerTests.profile.xcconfig */, + B29B36FD5C12742852AC4DFE /* Pods-Runner.debug.xcconfig */, + 6191C3D6D5D8FE1E4C40E774 /* Pods-Runner.release.xcconfig */, + 48A5C0A56B536CFD25892C9D /* Pods-Runner.profile.xcconfig */, + 0FB8EF672BA40059DAE0971D /* Pods-RunnerTests.debug.xcconfig */, + 4FCB4CB74835465DBF76AEE2 /* Pods-RunnerTests.release.xcconfig */, + 76BE812573BEA526EFADD390 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -202,8 +202,8 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - 83C8BE81D2605F4F3D5D6E43 /* Pods_Runner.framework */, - 1702629233BAC4D256765DCD /* Pods_RunnerTests.framework */, + DA383A1C3D90B37EDAE6D729 /* Pods_Runner.framework */, + 58A5BBA4148C365D540080FF /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 662BB0A9A865DC319D87667E /* [CP] Check Pods Manifest.lock */, + 6B021C8235C0E046BDDCAC79 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - D68F277E53A7CDF7BBD90DDA /* [CP] Check Pods Manifest.lock */, + 6175E7F7D6386C261A7CA2B1 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - E50A2F9A715EDADE00C36A18 /* [CP] Embed Pods Frameworks */, + 13DA6B85C9A60F79C86317E9 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,6 +323,23 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ + 13DA6B85C9A60F79C86317E9 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -361,7 +378,7 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 662BB0A9A865DC319D87667E /* [CP] Check Pods Manifest.lock */ = { + 6175E7F7D6386C261A7CA2B1 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -376,14 +393,14 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - D68F277E53A7CDF7BBD90DDA /* [CP] Check Pods Manifest.lock */ = { + 6B021C8235C0E046BDDCAC79 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -398,30 +415,13 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - E50A2F9A715EDADE00C36A18 /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 5D3AEF155FBD871F42636FA6 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 0FB8EF672BA40059DAE0971D /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 28D6467ED5715E597D403B78 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 4FCB4CB74835465DBF76AEE2 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 139BE8CDBBED09BD185EB46F /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 76BE812573BEA526EFADD390 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/adaptive_app/step_05/pubspec.yaml b/adaptive_app/step_05/pubspec.yaml index e36988d4a1..285c3d112f 100644 --- a/adaptive_app/step_05/pubspec.yaml +++ b/adaptive_app/step_05/pubspec.yaml @@ -31,7 +31,6 @@ dependencies: flutter: sdk: flutter - # The following adds the Cupertino Icons font to your application. # Use with the CupertinoIcons class for iOS style icons. cupertino_icons: ^1.0.8 @@ -39,8 +38,8 @@ dependencies: http: ^1.2.2 provider: ^6.1.2 url_launcher: ^6.3.1 - flex_color_scheme: ^7.3.1 - go_router: ^14.3.0 + flex_color_scheme: ^8.0.0 + go_router: ^14.4.1 split_view: ^3.2.1 dev_dependencies: diff --git a/adaptive_app/step_05/web/index.html b/adaptive_app/step_05/web/index.html index ce0ee3b7e5..86f03b98cf 100644 --- a/adaptive_app/step_05/web/index.html +++ b/adaptive_app/step_05/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/adaptive_app/step_06/ios/Runner.xcodeproj/project.pbxproj b/adaptive_app/step_06/ios/Runner.xcodeproj/project.pbxproj index c6f3ba5ca1..512b5a18de 100644 --- a/adaptive_app/step_06/ios/Runner.xcodeproj/project.pbxproj +++ b/adaptive_app/step_06/ios/Runner.xcodeproj/project.pbxproj @@ -9,13 +9,13 @@ /* Begin PBXBuildFile section */ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; + 3AE7C7DF67AA4CDF243E2E1C /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7C07A2960006E0A16CB1B561 /* Pods_Runner.framework */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; - 818857E73EDFF566602D3979 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 076253C42DA8398DAD9D0C5E /* Pods_Runner.framework */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - C53864E63C88D9E3FC6471E4 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A265904E40237EBD76393AA5 /* Pods_RunnerTests.framework */; }; + E1DB66C58B70207C10007CBF /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 73DB936017B364807528B099 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,19 +42,20 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 03DE4A7390E81C1529576B4D /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - 076253C42DA8398DAD9D0C5E /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 09CDCA9C423B2CDBEE5880DC /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 0C2DDD7828CF904B25EAC222 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 3667019138558933973CD77A /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; + 5F88E23C37558266340B2D91 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 7140F2A21BE1D4615BE7905B /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 73DB936017B364807528B099 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 900B8CCF12E3F041E3872BF1 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 7C07A2960006E0A16CB1B561 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 91CF80C7305E0756AD09AC93 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -62,54 +63,30 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 9CECD94FC0E21C4E2F3471FF /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - A265904E40237EBD76393AA5 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - F099B0A652C0F4AAE15492B0 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + B3E2F20D5F23748D9C9431A1 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + DCAD021F025D21E0842F9C11 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 23A5040ECE20822260D727D1 /* Frameworks */ = { + 97C146EB1CF9000F007C117D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - C53864E63C88D9E3FC6471E4 /* Pods_RunnerTests.framework in Frameworks */, + 3AE7C7DF67AA4CDF243E2E1C /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 97C146EB1CF9000F007C117D /* Frameworks */ = { + C97E2568A22FD470B376D43A /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 818857E73EDFF566602D3979 /* Pods_Runner.framework in Frameworks */, + E1DB66C58B70207C10007CBF /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 0D5C22ED61BF09A0B2D63659 /* Frameworks */ = { - isa = PBXGroup; - children = ( - 076253C42DA8398DAD9D0C5E /* Pods_Runner.framework */, - A265904E40237EBD76393AA5 /* Pods_RunnerTests.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; - 1D3E27B5CE2CC03AC9FED23D /* Pods */ = { - isa = PBXGroup; - children = ( - 09CDCA9C423B2CDBEE5880DC /* Pods-Runner.debug.xcconfig */, - 900B8CCF12E3F041E3872BF1 /* Pods-Runner.release.xcconfig */, - F099B0A652C0F4AAE15492B0 /* Pods-Runner.profile.xcconfig */, - 9CECD94FC0E21C4E2F3471FF /* Pods-RunnerTests.debug.xcconfig */, - 03DE4A7390E81C1529576B4D /* Pods-RunnerTests.release.xcconfig */, - 0C2DDD7828CF904B25EAC222 /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; 331C8082294A63A400263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -136,8 +113,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - 1D3E27B5CE2CC03AC9FED23D /* Pods */, - 0D5C22ED61BF09A0B2D63659 /* Frameworks */, + E135EF9AADA269FF5FC2ED2C /* Pods */, + CC59AB8EBA23BDDE38EA5FCC /* Frameworks */, ); sourceTree = ""; }; @@ -165,6 +142,29 @@ path = Runner; sourceTree = ""; }; + CC59AB8EBA23BDDE38EA5FCC /* Frameworks */ = { + isa = PBXGroup; + children = ( + 7C07A2960006E0A16CB1B561 /* Pods_Runner.framework */, + 73DB936017B364807528B099 /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; + E135EF9AADA269FF5FC2ED2C /* Pods */ = { + isa = PBXGroup; + children = ( + 91CF80C7305E0756AD09AC93 /* Pods-Runner.debug.xcconfig */, + 5F88E23C37558266340B2D91 /* Pods-Runner.release.xcconfig */, + B3E2F20D5F23748D9C9431A1 /* Pods-Runner.profile.xcconfig */, + 3667019138558933973CD77A /* Pods-RunnerTests.debug.xcconfig */, + DCAD021F025D21E0842F9C11 /* Pods-RunnerTests.release.xcconfig */, + 7140F2A21BE1D4615BE7905B /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - EF1662C484A2B971954E5DE7 /* [CP] Check Pods Manifest.lock */, + A001BA7F57EE3D79EFFD0EF1 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 23A5040ECE20822260D727D1 /* Frameworks */, + C97E2568A22FD470B376D43A /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 4B400C64A9F780E303D56362 /* [CP] Check Pods Manifest.lock */, + C41B444AA018B8FD8810556B /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - F6ED726599594C9355B00DE8 /* [CP] Embed Pods Frameworks */, + EA6AA4E9EF4215A1718DDDC9 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -286,44 +286,44 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 4B400C64A9F780E303D56362 /* [CP] Check Pods Manifest.lock */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( ); + name = "Run Script"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { + A001BA7F57EE3D79EFFD0EF1 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "Run Script"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - EF1662C484A2B971954E5DE7 /* [CP] Check Pods Manifest.lock */ = { + C41B444AA018B8FD8810556B /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -338,14 +338,14 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - F6ED726599594C9355B00DE8 /* [CP] Embed Pods Frameworks */ = { + EA6AA4E9EF4215A1718DDDC9 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 9CECD94FC0E21C4E2F3471FF /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 3667019138558933973CD77A /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 03DE4A7390E81C1529576B4D /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = DCAD021F025D21E0842F9C11 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 0C2DDD7828CF904B25EAC222 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 7140F2A21BE1D4615BE7905B /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/adaptive_app/step_06/linux/CMakeLists.txt b/adaptive_app/step_06/linux/CMakeLists.txt index 95047a637a..860cc230f2 100644 --- a/adaptive_app/step_06/linux/CMakeLists.txt +++ b/adaptive_app/step_06/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/adaptive_app/step_06/linux/runner/CMakeLists.txt b/adaptive_app/step_06/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/adaptive_app/step_06/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/adaptive_app/step_06/linux/main.cc b/adaptive_app/step_06/linux/runner/main.cc similarity index 100% rename from adaptive_app/step_06/linux/main.cc rename to adaptive_app/step_06/linux/runner/main.cc diff --git a/adaptive_app/step_06/linux/my_application.cc b/adaptive_app/step_06/linux/runner/my_application.cc similarity index 93% rename from adaptive_app/step_06/linux/my_application.cc rename to adaptive_app/step_06/linux/runner/my_application.cc index a2e720d593..c839eec643 100644 --- a/adaptive_app/step_06/linux/my_application.cc +++ b/adaptive_app/step_06/linux/runner/my_application.cc @@ -117,6 +117,12 @@ static void my_application_class_init(MyApplicationClass* klass) { static void my_application_init(MyApplication* self) {} MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + return MY_APPLICATION(g_object_new(my_application_get_type(), "application-id", APPLICATION_ID, "flags", G_APPLICATION_NON_UNIQUE, diff --git a/adaptive_app/step_06/linux/my_application.h b/adaptive_app/step_06/linux/runner/my_application.h similarity index 100% rename from adaptive_app/step_06/linux/my_application.h rename to adaptive_app/step_06/linux/runner/my_application.h diff --git a/adaptive_app/step_06/macos/Runner.xcodeproj/project.pbxproj b/adaptive_app/step_06/macos/Runner.xcodeproj/project.pbxproj index 272eda14e7..83effe2fe4 100644 --- a/adaptive_app/step_06/macos/Runner.xcodeproj/project.pbxproj +++ b/adaptive_app/step_06/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ - 0779940B4A2BFA69C1614EF1 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 83C8BE81D2605F4F3D5D6E43 /* Pods_Runner.framework */; }; + 2F9B180810AB765F1B54E002 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DA383A1C3D90B37EDAE6D729 /* Pods_Runner.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - D6BDF6487E1167604CD70873 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1702629233BAC4D256765DCD /* Pods_RunnerTests.framework */; }; + 69309F61A50CA3C54E77F970 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 58A5BBA4148C365D540080FF /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,10 +62,7 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 139BE8CDBBED09BD185EB46F /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - 1702629233BAC4D256765DCD /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 28D6467ED5715E597D403B78 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - 2F826F1F76A42B4953226C72 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 0FB8EF672BA40059DAE0971D /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -82,12 +79,15 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 5D3AEF155FBD871F42636FA6 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 48A5C0A56B536CFD25892C9D /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 4FCB4CB74835465DBF76AEE2 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 58A5BBA4148C365D540080FF /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 6191C3D6D5D8FE1E4C40E774 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 76BE812573BEA526EFADD390 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 83C8BE81D2605F4F3D5D6E43 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - 9C1C341528E24056DC0A3967 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - A02E023F403266AD4FD51FE3 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + B29B36FD5C12742852AC4DFE /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + DA383A1C3D90B37EDAE6D729 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - D6BDF6487E1167604CD70873 /* Pods_RunnerTests.framework in Frameworks */, + 69309F61A50CA3C54E77F970 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,7 +103,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 0779940B4A2BFA69C1614EF1 /* Pods_Runner.framework in Frameworks */, + 2F9B180810AB765F1B54E002 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -137,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 865DA271F115C3C9A9290FB5 /* Pods */, + 823035D7AE10C88CEA68C175 /* Pods */, ); sourceTree = ""; }; @@ -185,15 +185,15 @@ path = Runner; sourceTree = ""; }; - 865DA271F115C3C9A9290FB5 /* Pods */ = { + 823035D7AE10C88CEA68C175 /* Pods */ = { isa = PBXGroup; children = ( - 2F826F1F76A42B4953226C72 /* Pods-Runner.debug.xcconfig */, - A02E023F403266AD4FD51FE3 /* Pods-Runner.release.xcconfig */, - 9C1C341528E24056DC0A3967 /* Pods-Runner.profile.xcconfig */, - 5D3AEF155FBD871F42636FA6 /* Pods-RunnerTests.debug.xcconfig */, - 28D6467ED5715E597D403B78 /* Pods-RunnerTests.release.xcconfig */, - 139BE8CDBBED09BD185EB46F /* Pods-RunnerTests.profile.xcconfig */, + B29B36FD5C12742852AC4DFE /* Pods-Runner.debug.xcconfig */, + 6191C3D6D5D8FE1E4C40E774 /* Pods-Runner.release.xcconfig */, + 48A5C0A56B536CFD25892C9D /* Pods-Runner.profile.xcconfig */, + 0FB8EF672BA40059DAE0971D /* Pods-RunnerTests.debug.xcconfig */, + 4FCB4CB74835465DBF76AEE2 /* Pods-RunnerTests.release.xcconfig */, + 76BE812573BEA526EFADD390 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -202,8 +202,8 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - 83C8BE81D2605F4F3D5D6E43 /* Pods_Runner.framework */, - 1702629233BAC4D256765DCD /* Pods_RunnerTests.framework */, + DA383A1C3D90B37EDAE6D729 /* Pods_Runner.framework */, + 58A5BBA4148C365D540080FF /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 662BB0A9A865DC319D87667E /* [CP] Check Pods Manifest.lock */, + 6B021C8235C0E046BDDCAC79 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - D68F277E53A7CDF7BBD90DDA /* [CP] Check Pods Manifest.lock */, + 6175E7F7D6386C261A7CA2B1 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - E50A2F9A715EDADE00C36A18 /* [CP] Embed Pods Frameworks */, + 13DA6B85C9A60F79C86317E9 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,6 +323,23 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ + 13DA6B85C9A60F79C86317E9 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -361,7 +378,7 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 662BB0A9A865DC319D87667E /* [CP] Check Pods Manifest.lock */ = { + 6175E7F7D6386C261A7CA2B1 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -376,14 +393,14 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - D68F277E53A7CDF7BBD90DDA /* [CP] Check Pods Manifest.lock */ = { + 6B021C8235C0E046BDDCAC79 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -398,30 +415,13 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - E50A2F9A715EDADE00C36A18 /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 5D3AEF155FBD871F42636FA6 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 0FB8EF672BA40059DAE0971D /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 28D6467ED5715E597D403B78 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 4FCB4CB74835465DBF76AEE2 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 139BE8CDBBED09BD185EB46F /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 76BE812573BEA526EFADD390 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/adaptive_app/step_06/pubspec.yaml b/adaptive_app/step_06/pubspec.yaml index e36988d4a1..285c3d112f 100644 --- a/adaptive_app/step_06/pubspec.yaml +++ b/adaptive_app/step_06/pubspec.yaml @@ -31,7 +31,6 @@ dependencies: flutter: sdk: flutter - # The following adds the Cupertino Icons font to your application. # Use with the CupertinoIcons class for iOS style icons. cupertino_icons: ^1.0.8 @@ -39,8 +38,8 @@ dependencies: http: ^1.2.2 provider: ^6.1.2 url_launcher: ^6.3.1 - flex_color_scheme: ^7.3.1 - go_router: ^14.3.0 + flex_color_scheme: ^8.0.0 + go_router: ^14.4.1 split_view: ^3.2.1 dev_dependencies: diff --git a/adaptive_app/step_06/web/index.html b/adaptive_app/step_06/web/index.html index ce0ee3b7e5..86f03b98cf 100644 --- a/adaptive_app/step_06/web/index.html +++ b/adaptive_app/step_06/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/adaptive_app/step_06/yt_cors_proxy/pubspec.yaml b/adaptive_app/step_06/yt_cors_proxy/pubspec.yaml index d2f8fb5dc1..1806246610 100644 --- a/adaptive_app/step_06/yt_cors_proxy/pubspec.yaml +++ b/adaptive_app/step_06/yt_cors_proxy/pubspec.yaml @@ -11,4 +11,4 @@ dependencies: shelf_cors_headers: ^0.1.5 dev_dependencies: - lints: ^5.1.0 + lints: ^5.0.0 diff --git a/adaptive_app/step_07/ios/Runner.xcodeproj/project.pbxproj b/adaptive_app/step_07/ios/Runner.xcodeproj/project.pbxproj index df046ee794..a7d885d0e6 100644 --- a/adaptive_app/step_07/ios/Runner.xcodeproj/project.pbxproj +++ b/adaptive_app/step_07/ios/Runner.xcodeproj/project.pbxproj @@ -9,13 +9,13 @@ /* Begin PBXBuildFile section */ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; + 3AE7C7DF67AA4CDF243E2E1C /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7C07A2960006E0A16CB1B561 /* Pods_Runner.framework */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; - 818857E73EDFF566602D3979 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 076253C42DA8398DAD9D0C5E /* Pods_Runner.framework */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - C53864E63C88D9E3FC6471E4 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A265904E40237EBD76393AA5 /* Pods_RunnerTests.framework */; }; + E1DB66C58B70207C10007CBF /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 73DB936017B364807528B099 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,19 +42,20 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 03DE4A7390E81C1529576B4D /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - 076253C42DA8398DAD9D0C5E /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 09CDCA9C423B2CDBEE5880DC /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 0C2DDD7828CF904B25EAC222 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 3667019138558933973CD77A /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; + 5F88E23C37558266340B2D91 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 7140F2A21BE1D4615BE7905B /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 73DB936017B364807528B099 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 900B8CCF12E3F041E3872BF1 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 7C07A2960006E0A16CB1B561 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 91CF80C7305E0756AD09AC93 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -62,54 +63,30 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 9CECD94FC0E21C4E2F3471FF /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - A265904E40237EBD76393AA5 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - F099B0A652C0F4AAE15492B0 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + B3E2F20D5F23748D9C9431A1 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + DCAD021F025D21E0842F9C11 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 23A5040ECE20822260D727D1 /* Frameworks */ = { + 97C146EB1CF9000F007C117D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - C53864E63C88D9E3FC6471E4 /* Pods_RunnerTests.framework in Frameworks */, + 3AE7C7DF67AA4CDF243E2E1C /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 97C146EB1CF9000F007C117D /* Frameworks */ = { + C97E2568A22FD470B376D43A /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 818857E73EDFF566602D3979 /* Pods_Runner.framework in Frameworks */, + E1DB66C58B70207C10007CBF /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 0D5C22ED61BF09A0B2D63659 /* Frameworks */ = { - isa = PBXGroup; - children = ( - 076253C42DA8398DAD9D0C5E /* Pods_Runner.framework */, - A265904E40237EBD76393AA5 /* Pods_RunnerTests.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; - 1D3E27B5CE2CC03AC9FED23D /* Pods */ = { - isa = PBXGroup; - children = ( - 09CDCA9C423B2CDBEE5880DC /* Pods-Runner.debug.xcconfig */, - 900B8CCF12E3F041E3872BF1 /* Pods-Runner.release.xcconfig */, - F099B0A652C0F4AAE15492B0 /* Pods-Runner.profile.xcconfig */, - 9CECD94FC0E21C4E2F3471FF /* Pods-RunnerTests.debug.xcconfig */, - 03DE4A7390E81C1529576B4D /* Pods-RunnerTests.release.xcconfig */, - 0C2DDD7828CF904B25EAC222 /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; 331C8082294A63A400263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -136,8 +113,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - 1D3E27B5CE2CC03AC9FED23D /* Pods */, - 0D5C22ED61BF09A0B2D63659 /* Frameworks */, + E135EF9AADA269FF5FC2ED2C /* Pods */, + CC59AB8EBA23BDDE38EA5FCC /* Frameworks */, ); sourceTree = ""; }; @@ -165,6 +142,29 @@ path = Runner; sourceTree = ""; }; + CC59AB8EBA23BDDE38EA5FCC /* Frameworks */ = { + isa = PBXGroup; + children = ( + 7C07A2960006E0A16CB1B561 /* Pods_Runner.framework */, + 73DB936017B364807528B099 /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; + E135EF9AADA269FF5FC2ED2C /* Pods */ = { + isa = PBXGroup; + children = ( + 91CF80C7305E0756AD09AC93 /* Pods-Runner.debug.xcconfig */, + 5F88E23C37558266340B2D91 /* Pods-Runner.release.xcconfig */, + B3E2F20D5F23748D9C9431A1 /* Pods-Runner.profile.xcconfig */, + 3667019138558933973CD77A /* Pods-RunnerTests.debug.xcconfig */, + DCAD021F025D21E0842F9C11 /* Pods-RunnerTests.release.xcconfig */, + 7140F2A21BE1D4615BE7905B /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - EF1662C484A2B971954E5DE7 /* [CP] Check Pods Manifest.lock */, + A001BA7F57EE3D79EFFD0EF1 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 23A5040ECE20822260D727D1 /* Frameworks */, + C97E2568A22FD470B376D43A /* Frameworks */, ); buildRules = ( ); @@ -191,15 +191,15 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 4B400C64A9F780E303D56362 /* [CP] Check Pods Manifest.lock */, + C41B444AA018B8FD8810556B /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - F6ED726599594C9355B00DE8 /* [CP] Embed Pods Frameworks */, - 7837EF41E638292961CF7084 /* [CP] Copy Pods Resources */, + EA6AA4E9EF4215A1718DDDC9 /* [CP] Embed Pods Frameworks */, + 79DB2413E811A211B40FF2DC /* [CP] Copy Pods Resources */, ); buildRules = ( ); @@ -287,29 +287,7 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 4B400C64A9F780E303D56362 /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; - 7837EF41E638292961CF7084 /* [CP] Copy Pods Resources */ = { + 79DB2413E811A211B40FF2DC /* [CP] Copy Pods Resources */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -341,7 +319,7 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - EF1662C484A2B971954E5DE7 /* [CP] Check Pods Manifest.lock */ = { + A001BA7F57EE3D79EFFD0EF1 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -363,7 +341,29 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - F6ED726599594C9355B00DE8 /* [CP] Embed Pods Frameworks */ = { + C41B444AA018B8FD8810556B /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; + EA6AA4E9EF4215A1718DDDC9 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -505,7 +505,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 9CECD94FC0E21C4E2F3471FF /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 3667019138558933973CD77A /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -523,7 +523,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 03DE4A7390E81C1529576B4D /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = DCAD021F025D21E0842F9C11 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -539,7 +539,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 0C2DDD7828CF904B25EAC222 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 7140F2A21BE1D4615BE7905B /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/adaptive_app/step_07/linux/CMakeLists.txt b/adaptive_app/step_07/linux/CMakeLists.txt index 95047a637a..860cc230f2 100644 --- a/adaptive_app/step_07/linux/CMakeLists.txt +++ b/adaptive_app/step_07/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/adaptive_app/step_07/linux/my_application.cc b/adaptive_app/step_07/linux/my_application.cc deleted file mode 100644 index a2e720d593..0000000000 --- a/adaptive_app/step_07/linux/my_application.cc +++ /dev/null @@ -1,124 +0,0 @@ -#include "my_application.h" - -#include -#ifdef GDK_WINDOWING_X11 -#include -#endif - -#include "flutter/generated_plugin_registrant.h" - -struct _MyApplication { - GtkApplication parent_instance; - char** dart_entrypoint_arguments; -}; - -G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) - -// Implements GApplication::activate. -static void my_application_activate(GApplication* application) { - MyApplication* self = MY_APPLICATION(application); - GtkWindow* window = - GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); - - // Use a header bar when running in GNOME as this is the common style used - // by applications and is the setup most users will be using (e.g. Ubuntu - // desktop). - // If running on X and not using GNOME then just use a traditional title bar - // in case the window manager does more exotic layout, e.g. tiling. - // If running on Wayland assume the header bar will work (may need changing - // if future cases occur). - gboolean use_header_bar = TRUE; -#ifdef GDK_WINDOWING_X11 - GdkScreen* screen = gtk_window_get_screen(window); - if (GDK_IS_X11_SCREEN(screen)) { - const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); - if (g_strcmp0(wm_name, "GNOME Shell") != 0) { - use_header_bar = FALSE; - } - } -#endif - if (use_header_bar) { - GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); - gtk_widget_show(GTK_WIDGET(header_bar)); - gtk_header_bar_set_title(header_bar, "adaptive_app"); - gtk_header_bar_set_show_close_button(header_bar, TRUE); - gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); - } else { - gtk_window_set_title(window, "adaptive_app"); - } - - gtk_window_set_default_size(window, 1280, 720); - gtk_widget_show(GTK_WIDGET(window)); - - g_autoptr(FlDartProject) project = fl_dart_project_new(); - fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); - - FlView* view = fl_view_new(project); - gtk_widget_show(GTK_WIDGET(view)); - gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); - - fl_register_plugins(FL_PLUGIN_REGISTRY(view)); - - gtk_widget_grab_focus(GTK_WIDGET(view)); -} - -// Implements GApplication::local_command_line. -static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { - MyApplication* self = MY_APPLICATION(application); - // Strip out the first argument as it is the binary name. - self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); - - g_autoptr(GError) error = nullptr; - if (!g_application_register(application, nullptr, &error)) { - g_warning("Failed to register: %s", error->message); - *exit_status = 1; - return TRUE; - } - - g_application_activate(application); - *exit_status = 0; - - return TRUE; -} - -// Implements GApplication::startup. -static void my_application_startup(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application startup. - - G_APPLICATION_CLASS(my_application_parent_class)->startup(application); -} - -// Implements GApplication::shutdown. -static void my_application_shutdown(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application shutdown. - - G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); -} - -// Implements GObject::dispose. -static void my_application_dispose(GObject* object) { - MyApplication* self = MY_APPLICATION(object); - g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); - G_OBJECT_CLASS(my_application_parent_class)->dispose(object); -} - -static void my_application_class_init(MyApplicationClass* klass) { - G_APPLICATION_CLASS(klass)->activate = my_application_activate; - G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; - G_APPLICATION_CLASS(klass)->startup = my_application_startup; - G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; - G_OBJECT_CLASS(klass)->dispose = my_application_dispose; -} - -static void my_application_init(MyApplication* self) {} - -MyApplication* my_application_new() { - return MY_APPLICATION(g_object_new(my_application_get_type(), - "application-id", APPLICATION_ID, - "flags", G_APPLICATION_NON_UNIQUE, - nullptr)); -} diff --git a/adaptive_app/step_07/linux/runner/CMakeLists.txt b/adaptive_app/step_07/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/adaptive_app/step_07/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/adaptive_app/step_07/linux/main.cc b/adaptive_app/step_07/linux/runner/main.cc similarity index 100% rename from adaptive_app/step_07/linux/main.cc rename to adaptive_app/step_07/linux/runner/main.cc diff --git a/adaptive_app/step_07/linux/runner/my_application.cc b/adaptive_app/step_07/linux/runner/my_application.cc new file mode 100644 index 0000000000..c839eec643 --- /dev/null +++ b/adaptive_app/step_07/linux/runner/my_application.cc @@ -0,0 +1,130 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "adaptive_app"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "adaptive_app"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/adaptive_app/step_07/linux/my_application.h b/adaptive_app/step_07/linux/runner/my_application.h similarity index 100% rename from adaptive_app/step_07/linux/my_application.h rename to adaptive_app/step_07/linux/runner/my_application.h diff --git a/adaptive_app/step_07/macos/Runner.xcodeproj/project.pbxproj b/adaptive_app/step_07/macos/Runner.xcodeproj/project.pbxproj index 77696375a5..18993faf39 100644 --- a/adaptive_app/step_07/macos/Runner.xcodeproj/project.pbxproj +++ b/adaptive_app/step_07/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ - 0779940B4A2BFA69C1614EF1 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 83C8BE81D2605F4F3D5D6E43 /* Pods_Runner.framework */; }; + 2F9B180810AB765F1B54E002 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DA383A1C3D90B37EDAE6D729 /* Pods_Runner.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - D6BDF6487E1167604CD70873 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1702629233BAC4D256765DCD /* Pods_RunnerTests.framework */; }; + 69309F61A50CA3C54E77F970 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 58A5BBA4148C365D540080FF /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,10 +62,7 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 139BE8CDBBED09BD185EB46F /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - 1702629233BAC4D256765DCD /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 28D6467ED5715E597D403B78 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - 2F826F1F76A42B4953226C72 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 0FB8EF672BA40059DAE0971D /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -82,12 +79,15 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 5D3AEF155FBD871F42636FA6 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 48A5C0A56B536CFD25892C9D /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 4FCB4CB74835465DBF76AEE2 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 58A5BBA4148C365D540080FF /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 6191C3D6D5D8FE1E4C40E774 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 76BE812573BEA526EFADD390 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 83C8BE81D2605F4F3D5D6E43 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - 9C1C341528E24056DC0A3967 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - A02E023F403266AD4FD51FE3 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + B29B36FD5C12742852AC4DFE /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + DA383A1C3D90B37EDAE6D729 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - D6BDF6487E1167604CD70873 /* Pods_RunnerTests.framework in Frameworks */, + 69309F61A50CA3C54E77F970 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,7 +103,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 0779940B4A2BFA69C1614EF1 /* Pods_Runner.framework in Frameworks */, + 2F9B180810AB765F1B54E002 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -137,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 865DA271F115C3C9A9290FB5 /* Pods */, + 823035D7AE10C88CEA68C175 /* Pods */, ); sourceTree = ""; }; @@ -185,15 +185,15 @@ path = Runner; sourceTree = ""; }; - 865DA271F115C3C9A9290FB5 /* Pods */ = { + 823035D7AE10C88CEA68C175 /* Pods */ = { isa = PBXGroup; children = ( - 2F826F1F76A42B4953226C72 /* Pods-Runner.debug.xcconfig */, - A02E023F403266AD4FD51FE3 /* Pods-Runner.release.xcconfig */, - 9C1C341528E24056DC0A3967 /* Pods-Runner.profile.xcconfig */, - 5D3AEF155FBD871F42636FA6 /* Pods-RunnerTests.debug.xcconfig */, - 28D6467ED5715E597D403B78 /* Pods-RunnerTests.release.xcconfig */, - 139BE8CDBBED09BD185EB46F /* Pods-RunnerTests.profile.xcconfig */, + B29B36FD5C12742852AC4DFE /* Pods-Runner.debug.xcconfig */, + 6191C3D6D5D8FE1E4C40E774 /* Pods-Runner.release.xcconfig */, + 48A5C0A56B536CFD25892C9D /* Pods-Runner.profile.xcconfig */, + 0FB8EF672BA40059DAE0971D /* Pods-RunnerTests.debug.xcconfig */, + 4FCB4CB74835465DBF76AEE2 /* Pods-RunnerTests.release.xcconfig */, + 76BE812573BEA526EFADD390 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -202,8 +202,8 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - 83C8BE81D2605F4F3D5D6E43 /* Pods_Runner.framework */, - 1702629233BAC4D256765DCD /* Pods_RunnerTests.framework */, + DA383A1C3D90B37EDAE6D729 /* Pods_Runner.framework */, + 58A5BBA4148C365D540080FF /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 662BB0A9A865DC319D87667E /* [CP] Check Pods Manifest.lock */, + 6B021C8235C0E046BDDCAC79 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,14 +234,14 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - D68F277E53A7CDF7BBD90DDA /* [CP] Check Pods Manifest.lock */, + 6175E7F7D6386C261A7CA2B1 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - E50A2F9A715EDADE00C36A18 /* [CP] Embed Pods Frameworks */, - 3B5571E4719A0B49AEC8299C /* [CP] Copy Pods Resources */, + 13DA6B85C9A60F79C86317E9 /* [CP] Embed Pods Frameworks */, + 2AB337462971F4A09F29C5FE /* [CP] Copy Pods Resources */, ); buildRules = ( ); @@ -324,84 +324,79 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 3399D490228B24CF009A79C7 /* ShellScript */ = { + 13DA6B85C9A60F79C86317E9 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - ); + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; }; - 33CC111E2044C6BF0003C045 /* ShellScript */ = { + 2AB337462971F4A09F29C5FE /* [CP] Copy Pods Resources */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - Flutter/ephemeral/FlutterInputs.xcfilelist, - ); - inputPaths = ( - Flutter/ephemeral/tripwire, + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-input-files.xcfilelist", ); + name = "[CP] Copy Pods Resources"; outputFileListPaths = ( - Flutter/ephemeral/FlutterOutputs.xcfilelist, - ); - outputPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n"; + showEnvVarsInLog = 0; }; - 3B5571E4719A0B49AEC8299C /* [CP] Copy Pods Resources */ = { + 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Copy Pods Resources"; + inputPaths = ( + ); outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n"; - showEnvVarsInLog = 0; + shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; }; - 662BB0A9A865DC319D87667E /* [CP] Check Pods Manifest.lock */ = { + 33CC111E2044C6BF0003C045 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + Flutter/ephemeral/FlutterInputs.xcfilelist, ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", + Flutter/ephemeral/tripwire, ); - name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( + Flutter/ephemeral/FlutterOutputs.xcfilelist, ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - D68F277E53A7CDF7BBD90DDA /* [CP] Check Pods Manifest.lock */ = { + 6175E7F7D6386C261A7CA2B1 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -423,21 +418,26 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - E50A2F9A715EDADE00C36A18 /* [CP] Embed Pods Frameworks */ = { + 6B021C8235C0E046BDDCAC79 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -491,7 +491,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 5D3AEF155FBD871F42636FA6 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 0FB8EF672BA40059DAE0971D /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -506,7 +506,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 28D6467ED5715E597D403B78 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 4FCB4CB74835465DBF76AEE2 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -521,7 +521,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 139BE8CDBBED09BD185EB46F /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 76BE812573BEA526EFADD390 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/adaptive_app/step_07/pubspec.yaml b/adaptive_app/step_07/pubspec.yaml index 4223dae908..465ef7215b 100644 --- a/adaptive_app/step_07/pubspec.yaml +++ b/adaptive_app/step_07/pubspec.yaml @@ -31,18 +31,17 @@ dependencies: flutter: sdk: flutter - # The following adds the Cupertino Icons font to your application. # Use with the CupertinoIcons class for iOS style icons. cupertino_icons: ^1.0.8 googleapis: ^13.2.0 provider: ^6.1.2 url_launcher: ^6.3.1 - flex_color_scheme: ^7.3.1 - go_router: ^14.3.0 + flex_color_scheme: ^8.0.0 + go_router: ^14.4.1 split_view: ^3.2.1 googleapis_auth: ^1.6.0 - google_sign_in: ^6.2.1 + google_sign_in: ^6.2.2 extension_google_sign_in_as_googleapis_auth: ^2.0.12 http: ^1.2.2 diff --git a/adaptive_app/step_07/web/index.html b/adaptive_app/step_07/web/index.html index e29cfadf48..6200c16df1 100644 --- a/adaptive_app/step_07/web/index.html +++ b/adaptive_app/step_07/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/adaptive_app/step_07/yt_cors_proxy/pubspec.yaml b/adaptive_app/step_07/yt_cors_proxy/pubspec.yaml index d2f8fb5dc1..1806246610 100644 --- a/adaptive_app/step_07/yt_cors_proxy/pubspec.yaml +++ b/adaptive_app/step_07/yt_cors_proxy/pubspec.yaml @@ -11,4 +11,4 @@ dependencies: shelf_cors_headers: ^0.1.5 dev_dependencies: - lints: ^5.1.0 + lints: ^5.0.0 From c19e03b420a9a79540ccecde6a30ce5af7b3c795 Mon Sep 17 00:00:00 2001 From: Brett Morgan Date: Tue, 12 Nov 2024 16:57:58 +1100 Subject: [PATCH 035/108] Update `animated-responsive-layout` --- .../step_03/linux/CMakeLists.txt | 23 +--- .../step_03/linux/runner/CMakeLists.txt | 26 ++++ .../step_03/linux/{ => runner}/main.cc | 0 .../linux/{ => runner}/my_application.cc | 6 + .../linux/{ => runner}/my_application.h | 0 .../step_03/web/index.html | 2 +- .../step_04/linux/CMakeLists.txt | 23 +--- .../step_04/linux/runner/CMakeLists.txt | 26 ++++ .../step_04/linux/{ => runner}/main.cc | 0 .../linux/{ => runner}/my_application.cc | 6 + .../linux/{ => runner}/my_application.h | 0 .../step_04/web/index.html | 2 +- .../step_05/linux/CMakeLists.txt | 23 +--- .../step_05/linux/runner/CMakeLists.txt | 26 ++++ .../step_05/linux/{ => runner}/main.cc | 0 .../linux/{ => runner}/my_application.cc | 6 + .../linux/{ => runner}/my_application.h | 0 .../step_05/web/index.html | 2 +- .../step_06/linux/CMakeLists.txt | 23 +--- .../step_06/linux/runner/CMakeLists.txt | 26 ++++ .../step_06/linux/{ => runner}/main.cc | 0 .../linux/{ => runner}/my_application.cc | 6 + .../linux/{ => runner}/my_application.h | 0 .../step_06/web/index.html | 2 +- .../step_07/linux/CMakeLists.txt | 23 +--- .../step_07/linux/my_application.cc | 124 ----------------- .../step_07/linux/runner/CMakeLists.txt | 26 ++++ .../step_07/linux/{ => runner}/main.cc | 0 .../step_07/linux/runner/my_application.cc | 130 ++++++++++++++++++ .../linux/{ => runner}/my_application.h | 0 .../step_07/web/index.html | 2 +- .../step_08/linux/CMakeLists.txt | 23 +--- .../step_08/linux/my_application.cc | 124 ----------------- .../step_08/linux/runner/CMakeLists.txt | 26 ++++ .../step_08/linux/{ => runner}/main.cc | 0 .../step_08/linux/runner/my_application.cc | 130 ++++++++++++++++++ .../linux/{ => runner}/my_application.h | 0 .../step_08/web/index.html | 2 +- 38 files changed, 464 insertions(+), 374 deletions(-) create mode 100644 animated-responsive-layout/step_03/linux/runner/CMakeLists.txt rename animated-responsive-layout/step_03/linux/{ => runner}/main.cc (100%) rename animated-responsive-layout/step_03/linux/{ => runner}/my_application.cc (93%) rename animated-responsive-layout/step_03/linux/{ => runner}/my_application.h (100%) create mode 100644 animated-responsive-layout/step_04/linux/runner/CMakeLists.txt rename animated-responsive-layout/step_04/linux/{ => runner}/main.cc (100%) rename animated-responsive-layout/step_04/linux/{ => runner}/my_application.cc (93%) rename animated-responsive-layout/step_04/linux/{ => runner}/my_application.h (100%) create mode 100644 animated-responsive-layout/step_05/linux/runner/CMakeLists.txt rename animated-responsive-layout/step_05/linux/{ => runner}/main.cc (100%) rename animated-responsive-layout/step_05/linux/{ => runner}/my_application.cc (93%) rename animated-responsive-layout/step_05/linux/{ => runner}/my_application.h (100%) create mode 100644 animated-responsive-layout/step_06/linux/runner/CMakeLists.txt rename animated-responsive-layout/step_06/linux/{ => runner}/main.cc (100%) rename animated-responsive-layout/step_06/linux/{ => runner}/my_application.cc (93%) rename animated-responsive-layout/step_06/linux/{ => runner}/my_application.h (100%) delete mode 100644 animated-responsive-layout/step_07/linux/my_application.cc create mode 100644 animated-responsive-layout/step_07/linux/runner/CMakeLists.txt rename animated-responsive-layout/step_07/linux/{ => runner}/main.cc (100%) create mode 100644 animated-responsive-layout/step_07/linux/runner/my_application.cc rename animated-responsive-layout/step_07/linux/{ => runner}/my_application.h (100%) delete mode 100644 animated-responsive-layout/step_08/linux/my_application.cc create mode 100644 animated-responsive-layout/step_08/linux/runner/CMakeLists.txt rename animated-responsive-layout/step_08/linux/{ => runner}/main.cc (100%) create mode 100644 animated-responsive-layout/step_08/linux/runner/my_application.cc rename animated-responsive-layout/step_08/linux/{ => runner}/my_application.h (100%) diff --git a/animated-responsive-layout/step_03/linux/CMakeLists.txt b/animated-responsive-layout/step_03/linux/CMakeLists.txt index 0a7358f3d8..65d5443385 100644 --- a/animated-responsive-layout/step_03/linux/CMakeLists.txt +++ b/animated-responsive-layout/step_03/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/animated-responsive-layout/step_03/linux/runner/CMakeLists.txt b/animated-responsive-layout/step_03/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/animated-responsive-layout/step_03/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/animated-responsive-layout/step_03/linux/main.cc b/animated-responsive-layout/step_03/linux/runner/main.cc similarity index 100% rename from animated-responsive-layout/step_03/linux/main.cc rename to animated-responsive-layout/step_03/linux/runner/main.cc diff --git a/animated-responsive-layout/step_03/linux/my_application.cc b/animated-responsive-layout/step_03/linux/runner/my_application.cc similarity index 93% rename from animated-responsive-layout/step_03/linux/my_application.cc rename to animated-responsive-layout/step_03/linux/runner/my_application.cc index a11b92eb43..aaab2bbdcd 100644 --- a/animated-responsive-layout/step_03/linux/my_application.cc +++ b/animated-responsive-layout/step_03/linux/runner/my_application.cc @@ -117,6 +117,12 @@ static void my_application_class_init(MyApplicationClass* klass) { static void my_application_init(MyApplication* self) {} MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + return MY_APPLICATION(g_object_new(my_application_get_type(), "application-id", APPLICATION_ID, "flags", G_APPLICATION_NON_UNIQUE, diff --git a/animated-responsive-layout/step_03/linux/my_application.h b/animated-responsive-layout/step_03/linux/runner/my_application.h similarity index 100% rename from animated-responsive-layout/step_03/linux/my_application.h rename to animated-responsive-layout/step_03/linux/runner/my_application.h diff --git a/animated-responsive-layout/step_03/web/index.html b/animated-responsive-layout/step_03/web/index.html index 84d054020a..bae2a10642 100644 --- a/animated-responsive-layout/step_03/web/index.html +++ b/animated-responsive-layout/step_03/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/animated-responsive-layout/step_04/linux/CMakeLists.txt b/animated-responsive-layout/step_04/linux/CMakeLists.txt index 0a7358f3d8..65d5443385 100644 --- a/animated-responsive-layout/step_04/linux/CMakeLists.txt +++ b/animated-responsive-layout/step_04/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/animated-responsive-layout/step_04/linux/runner/CMakeLists.txt b/animated-responsive-layout/step_04/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/animated-responsive-layout/step_04/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/animated-responsive-layout/step_04/linux/main.cc b/animated-responsive-layout/step_04/linux/runner/main.cc similarity index 100% rename from animated-responsive-layout/step_04/linux/main.cc rename to animated-responsive-layout/step_04/linux/runner/main.cc diff --git a/animated-responsive-layout/step_04/linux/my_application.cc b/animated-responsive-layout/step_04/linux/runner/my_application.cc similarity index 93% rename from animated-responsive-layout/step_04/linux/my_application.cc rename to animated-responsive-layout/step_04/linux/runner/my_application.cc index a11b92eb43..aaab2bbdcd 100644 --- a/animated-responsive-layout/step_04/linux/my_application.cc +++ b/animated-responsive-layout/step_04/linux/runner/my_application.cc @@ -117,6 +117,12 @@ static void my_application_class_init(MyApplicationClass* klass) { static void my_application_init(MyApplication* self) {} MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + return MY_APPLICATION(g_object_new(my_application_get_type(), "application-id", APPLICATION_ID, "flags", G_APPLICATION_NON_UNIQUE, diff --git a/animated-responsive-layout/step_04/linux/my_application.h b/animated-responsive-layout/step_04/linux/runner/my_application.h similarity index 100% rename from animated-responsive-layout/step_04/linux/my_application.h rename to animated-responsive-layout/step_04/linux/runner/my_application.h diff --git a/animated-responsive-layout/step_04/web/index.html b/animated-responsive-layout/step_04/web/index.html index 84d054020a..bae2a10642 100644 --- a/animated-responsive-layout/step_04/web/index.html +++ b/animated-responsive-layout/step_04/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/animated-responsive-layout/step_05/linux/CMakeLists.txt b/animated-responsive-layout/step_05/linux/CMakeLists.txt index 0a7358f3d8..65d5443385 100644 --- a/animated-responsive-layout/step_05/linux/CMakeLists.txt +++ b/animated-responsive-layout/step_05/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/animated-responsive-layout/step_05/linux/runner/CMakeLists.txt b/animated-responsive-layout/step_05/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/animated-responsive-layout/step_05/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/animated-responsive-layout/step_05/linux/main.cc b/animated-responsive-layout/step_05/linux/runner/main.cc similarity index 100% rename from animated-responsive-layout/step_05/linux/main.cc rename to animated-responsive-layout/step_05/linux/runner/main.cc diff --git a/animated-responsive-layout/step_05/linux/my_application.cc b/animated-responsive-layout/step_05/linux/runner/my_application.cc similarity index 93% rename from animated-responsive-layout/step_05/linux/my_application.cc rename to animated-responsive-layout/step_05/linux/runner/my_application.cc index a11b92eb43..aaab2bbdcd 100644 --- a/animated-responsive-layout/step_05/linux/my_application.cc +++ b/animated-responsive-layout/step_05/linux/runner/my_application.cc @@ -117,6 +117,12 @@ static void my_application_class_init(MyApplicationClass* klass) { static void my_application_init(MyApplication* self) {} MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + return MY_APPLICATION(g_object_new(my_application_get_type(), "application-id", APPLICATION_ID, "flags", G_APPLICATION_NON_UNIQUE, diff --git a/animated-responsive-layout/step_05/linux/my_application.h b/animated-responsive-layout/step_05/linux/runner/my_application.h similarity index 100% rename from animated-responsive-layout/step_05/linux/my_application.h rename to animated-responsive-layout/step_05/linux/runner/my_application.h diff --git a/animated-responsive-layout/step_05/web/index.html b/animated-responsive-layout/step_05/web/index.html index 84d054020a..bae2a10642 100644 --- a/animated-responsive-layout/step_05/web/index.html +++ b/animated-responsive-layout/step_05/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/animated-responsive-layout/step_06/linux/CMakeLists.txt b/animated-responsive-layout/step_06/linux/CMakeLists.txt index 0a7358f3d8..65d5443385 100644 --- a/animated-responsive-layout/step_06/linux/CMakeLists.txt +++ b/animated-responsive-layout/step_06/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/animated-responsive-layout/step_06/linux/runner/CMakeLists.txt b/animated-responsive-layout/step_06/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/animated-responsive-layout/step_06/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/animated-responsive-layout/step_06/linux/main.cc b/animated-responsive-layout/step_06/linux/runner/main.cc similarity index 100% rename from animated-responsive-layout/step_06/linux/main.cc rename to animated-responsive-layout/step_06/linux/runner/main.cc diff --git a/animated-responsive-layout/step_06/linux/my_application.cc b/animated-responsive-layout/step_06/linux/runner/my_application.cc similarity index 93% rename from animated-responsive-layout/step_06/linux/my_application.cc rename to animated-responsive-layout/step_06/linux/runner/my_application.cc index a11b92eb43..aaab2bbdcd 100644 --- a/animated-responsive-layout/step_06/linux/my_application.cc +++ b/animated-responsive-layout/step_06/linux/runner/my_application.cc @@ -117,6 +117,12 @@ static void my_application_class_init(MyApplicationClass* klass) { static void my_application_init(MyApplication* self) {} MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + return MY_APPLICATION(g_object_new(my_application_get_type(), "application-id", APPLICATION_ID, "flags", G_APPLICATION_NON_UNIQUE, diff --git a/animated-responsive-layout/step_06/linux/my_application.h b/animated-responsive-layout/step_06/linux/runner/my_application.h similarity index 100% rename from animated-responsive-layout/step_06/linux/my_application.h rename to animated-responsive-layout/step_06/linux/runner/my_application.h diff --git a/animated-responsive-layout/step_06/web/index.html b/animated-responsive-layout/step_06/web/index.html index 84d054020a..bae2a10642 100644 --- a/animated-responsive-layout/step_06/web/index.html +++ b/animated-responsive-layout/step_06/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/animated-responsive-layout/step_07/linux/CMakeLists.txt b/animated-responsive-layout/step_07/linux/CMakeLists.txt index 0a7358f3d8..65d5443385 100644 --- a/animated-responsive-layout/step_07/linux/CMakeLists.txt +++ b/animated-responsive-layout/step_07/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/animated-responsive-layout/step_07/linux/my_application.cc b/animated-responsive-layout/step_07/linux/my_application.cc deleted file mode 100644 index a11b92eb43..0000000000 --- a/animated-responsive-layout/step_07/linux/my_application.cc +++ /dev/null @@ -1,124 +0,0 @@ -#include "my_application.h" - -#include -#ifdef GDK_WINDOWING_X11 -#include -#endif - -#include "flutter/generated_plugin_registrant.h" - -struct _MyApplication { - GtkApplication parent_instance; - char** dart_entrypoint_arguments; -}; - -G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) - -// Implements GApplication::activate. -static void my_application_activate(GApplication* application) { - MyApplication* self = MY_APPLICATION(application); - GtkWindow* window = - GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); - - // Use a header bar when running in GNOME as this is the common style used - // by applications and is the setup most users will be using (e.g. Ubuntu - // desktop). - // If running on X and not using GNOME then just use a traditional title bar - // in case the window manager does more exotic layout, e.g. tiling. - // If running on Wayland assume the header bar will work (may need changing - // if future cases occur). - gboolean use_header_bar = TRUE; -#ifdef GDK_WINDOWING_X11 - GdkScreen* screen = gtk_window_get_screen(window); - if (GDK_IS_X11_SCREEN(screen)) { - const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); - if (g_strcmp0(wm_name, "GNOME Shell") != 0) { - use_header_bar = FALSE; - } - } -#endif - if (use_header_bar) { - GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); - gtk_widget_show(GTK_WIDGET(header_bar)); - gtk_header_bar_set_title(header_bar, "animated_responsive_layout"); - gtk_header_bar_set_show_close_button(header_bar, TRUE); - gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); - } else { - gtk_window_set_title(window, "animated_responsive_layout"); - } - - gtk_window_set_default_size(window, 1280, 720); - gtk_widget_show(GTK_WIDGET(window)); - - g_autoptr(FlDartProject) project = fl_dart_project_new(); - fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); - - FlView* view = fl_view_new(project); - gtk_widget_show(GTK_WIDGET(view)); - gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); - - fl_register_plugins(FL_PLUGIN_REGISTRY(view)); - - gtk_widget_grab_focus(GTK_WIDGET(view)); -} - -// Implements GApplication::local_command_line. -static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { - MyApplication* self = MY_APPLICATION(application); - // Strip out the first argument as it is the binary name. - self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); - - g_autoptr(GError) error = nullptr; - if (!g_application_register(application, nullptr, &error)) { - g_warning("Failed to register: %s", error->message); - *exit_status = 1; - return TRUE; - } - - g_application_activate(application); - *exit_status = 0; - - return TRUE; -} - -// Implements GApplication::startup. -static void my_application_startup(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application startup. - - G_APPLICATION_CLASS(my_application_parent_class)->startup(application); -} - -// Implements GApplication::shutdown. -static void my_application_shutdown(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application shutdown. - - G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); -} - -// Implements GObject::dispose. -static void my_application_dispose(GObject* object) { - MyApplication* self = MY_APPLICATION(object); - g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); - G_OBJECT_CLASS(my_application_parent_class)->dispose(object); -} - -static void my_application_class_init(MyApplicationClass* klass) { - G_APPLICATION_CLASS(klass)->activate = my_application_activate; - G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; - G_APPLICATION_CLASS(klass)->startup = my_application_startup; - G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; - G_OBJECT_CLASS(klass)->dispose = my_application_dispose; -} - -static void my_application_init(MyApplication* self) {} - -MyApplication* my_application_new() { - return MY_APPLICATION(g_object_new(my_application_get_type(), - "application-id", APPLICATION_ID, - "flags", G_APPLICATION_NON_UNIQUE, - nullptr)); -} diff --git a/animated-responsive-layout/step_07/linux/runner/CMakeLists.txt b/animated-responsive-layout/step_07/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/animated-responsive-layout/step_07/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/animated-responsive-layout/step_07/linux/main.cc b/animated-responsive-layout/step_07/linux/runner/main.cc similarity index 100% rename from animated-responsive-layout/step_07/linux/main.cc rename to animated-responsive-layout/step_07/linux/runner/main.cc diff --git a/animated-responsive-layout/step_07/linux/runner/my_application.cc b/animated-responsive-layout/step_07/linux/runner/my_application.cc new file mode 100644 index 0000000000..aaab2bbdcd --- /dev/null +++ b/animated-responsive-layout/step_07/linux/runner/my_application.cc @@ -0,0 +1,130 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "animated_responsive_layout"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "animated_responsive_layout"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/animated-responsive-layout/step_07/linux/my_application.h b/animated-responsive-layout/step_07/linux/runner/my_application.h similarity index 100% rename from animated-responsive-layout/step_07/linux/my_application.h rename to animated-responsive-layout/step_07/linux/runner/my_application.h diff --git a/animated-responsive-layout/step_07/web/index.html b/animated-responsive-layout/step_07/web/index.html index 84d054020a..bae2a10642 100644 --- a/animated-responsive-layout/step_07/web/index.html +++ b/animated-responsive-layout/step_07/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/animated-responsive-layout/step_08/linux/CMakeLists.txt b/animated-responsive-layout/step_08/linux/CMakeLists.txt index 0a7358f3d8..65d5443385 100644 --- a/animated-responsive-layout/step_08/linux/CMakeLists.txt +++ b/animated-responsive-layout/step_08/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/animated-responsive-layout/step_08/linux/my_application.cc b/animated-responsive-layout/step_08/linux/my_application.cc deleted file mode 100644 index a11b92eb43..0000000000 --- a/animated-responsive-layout/step_08/linux/my_application.cc +++ /dev/null @@ -1,124 +0,0 @@ -#include "my_application.h" - -#include -#ifdef GDK_WINDOWING_X11 -#include -#endif - -#include "flutter/generated_plugin_registrant.h" - -struct _MyApplication { - GtkApplication parent_instance; - char** dart_entrypoint_arguments; -}; - -G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) - -// Implements GApplication::activate. -static void my_application_activate(GApplication* application) { - MyApplication* self = MY_APPLICATION(application); - GtkWindow* window = - GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); - - // Use a header bar when running in GNOME as this is the common style used - // by applications and is the setup most users will be using (e.g. Ubuntu - // desktop). - // If running on X and not using GNOME then just use a traditional title bar - // in case the window manager does more exotic layout, e.g. tiling. - // If running on Wayland assume the header bar will work (may need changing - // if future cases occur). - gboolean use_header_bar = TRUE; -#ifdef GDK_WINDOWING_X11 - GdkScreen* screen = gtk_window_get_screen(window); - if (GDK_IS_X11_SCREEN(screen)) { - const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); - if (g_strcmp0(wm_name, "GNOME Shell") != 0) { - use_header_bar = FALSE; - } - } -#endif - if (use_header_bar) { - GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); - gtk_widget_show(GTK_WIDGET(header_bar)); - gtk_header_bar_set_title(header_bar, "animated_responsive_layout"); - gtk_header_bar_set_show_close_button(header_bar, TRUE); - gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); - } else { - gtk_window_set_title(window, "animated_responsive_layout"); - } - - gtk_window_set_default_size(window, 1280, 720); - gtk_widget_show(GTK_WIDGET(window)); - - g_autoptr(FlDartProject) project = fl_dart_project_new(); - fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); - - FlView* view = fl_view_new(project); - gtk_widget_show(GTK_WIDGET(view)); - gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); - - fl_register_plugins(FL_PLUGIN_REGISTRY(view)); - - gtk_widget_grab_focus(GTK_WIDGET(view)); -} - -// Implements GApplication::local_command_line. -static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { - MyApplication* self = MY_APPLICATION(application); - // Strip out the first argument as it is the binary name. - self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); - - g_autoptr(GError) error = nullptr; - if (!g_application_register(application, nullptr, &error)) { - g_warning("Failed to register: %s", error->message); - *exit_status = 1; - return TRUE; - } - - g_application_activate(application); - *exit_status = 0; - - return TRUE; -} - -// Implements GApplication::startup. -static void my_application_startup(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application startup. - - G_APPLICATION_CLASS(my_application_parent_class)->startup(application); -} - -// Implements GApplication::shutdown. -static void my_application_shutdown(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application shutdown. - - G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); -} - -// Implements GObject::dispose. -static void my_application_dispose(GObject* object) { - MyApplication* self = MY_APPLICATION(object); - g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); - G_OBJECT_CLASS(my_application_parent_class)->dispose(object); -} - -static void my_application_class_init(MyApplicationClass* klass) { - G_APPLICATION_CLASS(klass)->activate = my_application_activate; - G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; - G_APPLICATION_CLASS(klass)->startup = my_application_startup; - G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; - G_OBJECT_CLASS(klass)->dispose = my_application_dispose; -} - -static void my_application_init(MyApplication* self) {} - -MyApplication* my_application_new() { - return MY_APPLICATION(g_object_new(my_application_get_type(), - "application-id", APPLICATION_ID, - "flags", G_APPLICATION_NON_UNIQUE, - nullptr)); -} diff --git a/animated-responsive-layout/step_08/linux/runner/CMakeLists.txt b/animated-responsive-layout/step_08/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/animated-responsive-layout/step_08/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/animated-responsive-layout/step_08/linux/main.cc b/animated-responsive-layout/step_08/linux/runner/main.cc similarity index 100% rename from animated-responsive-layout/step_08/linux/main.cc rename to animated-responsive-layout/step_08/linux/runner/main.cc diff --git a/animated-responsive-layout/step_08/linux/runner/my_application.cc b/animated-responsive-layout/step_08/linux/runner/my_application.cc new file mode 100644 index 0000000000..aaab2bbdcd --- /dev/null +++ b/animated-responsive-layout/step_08/linux/runner/my_application.cc @@ -0,0 +1,130 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "animated_responsive_layout"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "animated_responsive_layout"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/animated-responsive-layout/step_08/linux/my_application.h b/animated-responsive-layout/step_08/linux/runner/my_application.h similarity index 100% rename from animated-responsive-layout/step_08/linux/my_application.h rename to animated-responsive-layout/step_08/linux/runner/my_application.h diff --git a/animated-responsive-layout/step_08/web/index.html b/animated-responsive-layout/step_08/web/index.html index 84d054020a..bae2a10642 100644 --- a/animated-responsive-layout/step_08/web/index.html +++ b/animated-responsive-layout/step_08/web/index.html @@ -21,7 +21,7 @@ - + From f98624ce7c89ca1e3e6a89132e9201b48285baf2 Mon Sep 17 00:00:00 2001 From: Brett Morgan Date: Tue, 12 Nov 2024 17:03:51 +1100 Subject: [PATCH 036/108] Update `animations` --- animations/step_01/linux/CMakeLists.txt | 23 +++------------- .../step_01/linux/runner/CMakeLists.txt | 26 +++++++++++++++++++ animations/step_01/linux/{ => runner}/main.cc | 0 .../linux/{ => runner}/my_application.cc | 6 +++++ .../linux/{ => runner}/my_application.h | 0 animations/step_01/web/index.html | 2 +- animations/step_02/linux/CMakeLists.txt | 23 +++------------- animations/step_02/web/index.html | 2 +- animations/step_03/linux/CMakeLists.txt | 23 +++------------- animations/step_03/web/index.html | 2 +- animations/step_04/linux/CMakeLists.txt | 23 +++------------- animations/step_04/web/index.html | 2 +- animations/step_05/linux/CMakeLists.txt | 23 +++------------- animations/step_05/web/index.html | 2 +- 14 files changed, 52 insertions(+), 105 deletions(-) create mode 100644 animations/step_01/linux/runner/CMakeLists.txt rename animations/step_01/linux/{ => runner}/main.cc (100%) rename animations/step_01/linux/{ => runner}/my_application.cc (93%) rename animations/step_01/linux/{ => runner}/my_application.h (100%) diff --git a/animations/step_01/linux/CMakeLists.txt b/animations/step_01/linux/CMakeLists.txt index 658be85ac5..7caf822271 100644 --- a/animations/step_01/linux/CMakeLists.txt +++ b/animations/step_01/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/animations/step_01/linux/runner/CMakeLists.txt b/animations/step_01/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/animations/step_01/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/animations/step_01/linux/main.cc b/animations/step_01/linux/runner/main.cc similarity index 100% rename from animations/step_01/linux/main.cc rename to animations/step_01/linux/runner/main.cc diff --git a/animations/step_01/linux/my_application.cc b/animations/step_01/linux/runner/my_application.cc similarity index 93% rename from animations/step_01/linux/my_application.cc rename to animations/step_01/linux/runner/my_application.cc index d6ea0e3c5f..0040d7e46c 100644 --- a/animations/step_01/linux/my_application.cc +++ b/animations/step_01/linux/runner/my_application.cc @@ -117,6 +117,12 @@ static void my_application_class_init(MyApplicationClass* klass) { static void my_application_init(MyApplication* self) {} MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + return MY_APPLICATION(g_object_new(my_application_get_type(), "application-id", APPLICATION_ID, "flags", G_APPLICATION_NON_UNIQUE, diff --git a/animations/step_01/linux/my_application.h b/animations/step_01/linux/runner/my_application.h similarity index 100% rename from animations/step_01/linux/my_application.h rename to animations/step_01/linux/runner/my_application.h diff --git a/animations/step_01/web/index.html b/animations/step_01/web/index.html index 89656d9a06..ec05768c59 100644 --- a/animations/step_01/web/index.html +++ b/animations/step_01/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/animations/step_02/linux/CMakeLists.txt b/animations/step_02/linux/CMakeLists.txt index 658be85ac5..7caf822271 100644 --- a/animations/step_02/linux/CMakeLists.txt +++ b/animations/step_02/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/animations/step_02/web/index.html b/animations/step_02/web/index.html index 89656d9a06..ec05768c59 100644 --- a/animations/step_02/web/index.html +++ b/animations/step_02/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/animations/step_03/linux/CMakeLists.txt b/animations/step_03/linux/CMakeLists.txt index 658be85ac5..7caf822271 100644 --- a/animations/step_03/linux/CMakeLists.txt +++ b/animations/step_03/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/animations/step_03/web/index.html b/animations/step_03/web/index.html index 89656d9a06..ec05768c59 100644 --- a/animations/step_03/web/index.html +++ b/animations/step_03/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/animations/step_04/linux/CMakeLists.txt b/animations/step_04/linux/CMakeLists.txt index 658be85ac5..7caf822271 100644 --- a/animations/step_04/linux/CMakeLists.txt +++ b/animations/step_04/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/animations/step_04/web/index.html b/animations/step_04/web/index.html index 89656d9a06..ec05768c59 100644 --- a/animations/step_04/web/index.html +++ b/animations/step_04/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/animations/step_05/linux/CMakeLists.txt b/animations/step_05/linux/CMakeLists.txt index 658be85ac5..7caf822271 100644 --- a/animations/step_05/linux/CMakeLists.txt +++ b/animations/step_05/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/animations/step_05/web/index.html b/animations/step_05/web/index.html index 89656d9a06..ec05768c59 100644 --- a/animations/step_05/web/index.html +++ b/animations/step_05/web/index.html @@ -21,7 +21,7 @@ - + From 0a4c510404984ef3e0b37bd19d53738dd38aa93d Mon Sep 17 00:00:00 2001 From: Brett Morgan Date: Wed, 13 Nov 2024 06:12:45 +1100 Subject: [PATCH 037/108] Update `audio_soloud` --- .../ios/Runner.xcodeproj/project.pbxproj | 112 +++++++-------- audio_soloud/step_02/linux/CMakeLists.txt | 23 +--- .../step_02/linux/runner/CMakeLists.txt | 26 ++++ .../step_02/linux/{ => runner}/main.cc | 0 .../linux/{ => runner}/my_application.cc | 6 + .../linux/{ => runner}/my_application.h | 0 .../macos/Runner.xcodeproj/project.pbxproj | 92 ++++++------- .../ios/Runner.xcodeproj/project.pbxproj | 112 +++++++-------- audio_soloud/step_03/linux/CMakeLists.txt | 23 +--- .../step_03/linux/runner/CMakeLists.txt | 26 ++++ .../step_03/linux/{ => runner}/main.cc | 0 .../linux/{ => runner}/my_application.cc | 6 + .../linux/{ => runner}/my_application.h | 0 .../macos/Runner.xcodeproj/project.pbxproj | 92 ++++++------- .../ios/Runner.xcodeproj/project.pbxproj | 112 +++++++-------- audio_soloud/step_04a/linux/CMakeLists.txt | 23 +--- .../step_04a/linux/runner/CMakeLists.txt | 26 ++++ .../step_04a/linux/{ => runner}/main.cc | 0 .../linux/{ => runner}/my_application.cc | 6 + .../linux/{ => runner}/my_application.h | 0 .../macos/Runner.xcodeproj/project.pbxproj | 92 ++++++------- .../ios/Runner.xcodeproj/project.pbxproj | 112 +++++++-------- audio_soloud/step_04b/linux/CMakeLists.txt | 23 +--- .../step_04b/linux/runner/CMakeLists.txt | 26 ++++ .../step_04b/linux/{ => runner}/main.cc | 0 .../linux/{ => runner}/my_application.cc | 6 + .../linux/{ => runner}/my_application.h | 0 .../macos/Runner.xcodeproj/project.pbxproj | 92 ++++++------- .../ios/Runner.xcodeproj/project.pbxproj | 112 +++++++-------- audio_soloud/step_05/linux/CMakeLists.txt | 23 +--- audio_soloud/step_05/linux/my_application.cc | 124 ----------------- .../step_05/linux/runner/CMakeLists.txt | 26 ++++ .../step_05/linux/{ => runner}/main.cc | 0 .../step_05/linux/runner/my_application.cc | 130 ++++++++++++++++++ .../linux/{ => runner}/my_application.h | 0 .../macos/Runner.xcodeproj/project.pbxproj | 92 ++++++------- .../ios/Runner.xcodeproj/project.pbxproj | 112 +++++++-------- audio_soloud/step_06/linux/CMakeLists.txt | 23 +--- audio_soloud/step_06/linux/my_application.cc | 124 ----------------- .../step_06/linux/runner/CMakeLists.txt | 26 ++++ .../step_06/linux/{ => runner}/main.cc | 0 .../step_06/linux/runner/my_application.cc | 130 ++++++++++++++++++ .../linux/{ => runner}/my_application.h | 0 .../macos/Runner.xcodeproj/project.pbxproj | 92 ++++++------- 44 files changed, 1070 insertions(+), 980 deletions(-) create mode 100644 audio_soloud/step_02/linux/runner/CMakeLists.txt rename audio_soloud/step_02/linux/{ => runner}/main.cc (100%) rename audio_soloud/step_02/linux/{ => runner}/my_application.cc (93%) rename audio_soloud/step_02/linux/{ => runner}/my_application.h (100%) create mode 100644 audio_soloud/step_03/linux/runner/CMakeLists.txt rename audio_soloud/step_03/linux/{ => runner}/main.cc (100%) rename audio_soloud/step_03/linux/{ => runner}/my_application.cc (93%) rename audio_soloud/step_03/linux/{ => runner}/my_application.h (100%) create mode 100644 audio_soloud/step_04a/linux/runner/CMakeLists.txt rename audio_soloud/step_04a/linux/{ => runner}/main.cc (100%) rename audio_soloud/step_04a/linux/{ => runner}/my_application.cc (93%) rename audio_soloud/step_04a/linux/{ => runner}/my_application.h (100%) create mode 100644 audio_soloud/step_04b/linux/runner/CMakeLists.txt rename audio_soloud/step_04b/linux/{ => runner}/main.cc (100%) rename audio_soloud/step_04b/linux/{ => runner}/my_application.cc (93%) rename audio_soloud/step_04b/linux/{ => runner}/my_application.h (100%) delete mode 100644 audio_soloud/step_05/linux/my_application.cc create mode 100644 audio_soloud/step_05/linux/runner/CMakeLists.txt rename audio_soloud/step_05/linux/{ => runner}/main.cc (100%) create mode 100644 audio_soloud/step_05/linux/runner/my_application.cc rename audio_soloud/step_05/linux/{ => runner}/my_application.h (100%) delete mode 100644 audio_soloud/step_06/linux/my_application.cc create mode 100644 audio_soloud/step_06/linux/runner/CMakeLists.txt rename audio_soloud/step_06/linux/{ => runner}/main.cc (100%) create mode 100644 audio_soloud/step_06/linux/runner/my_application.cc rename audio_soloud/step_06/linux/{ => runner}/my_application.h (100%) diff --git a/audio_soloud/step_02/ios/Runner.xcodeproj/project.pbxproj b/audio_soloud/step_02/ios/Runner.xcodeproj/project.pbxproj index 78c3338736..1b9ce23f29 100644 --- a/audio_soloud/step_02/ios/Runner.xcodeproj/project.pbxproj +++ b/audio_soloud/step_02/ios/Runner.xcodeproj/project.pbxproj @@ -10,12 +10,12 @@ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; + 660451A8A4F7B5016E2BE610 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5331A371F0116A607BB11374 /* Pods_Runner.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - C239903147E007ACE2539FF1 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 64271C2B15D5289E7A273234 /* Pods_Runner.framework */; }; - FD411C6D5C71698ACB812C16 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FA8209B958FEB61BC3944230 /* Pods_RunnerTests.framework */; }; + A6631C561FD82D31CBA4956D /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9A5F864F2C140D5AB62D37C2 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -44,16 +44,13 @@ /* Begin PBXFileReference section */ 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 293F5491067EBC5019B765DA /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 2F8CD2D2F3F3094219372FF1 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 1A15B1F8A041262C230BED54 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 1A3676A19DF22D28E9BD1FC2 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 5FFF2B0D0B3FE850BDFFF1B4 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 607C5C89235EC713B8C81942 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 616EF572B3F38B0AAFD45993 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - 64271C2B15D5289E7A273234 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 66CE0956CC2434D27E7C94D7 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 419220FE5D8CCA17E4449148 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 5331A371F0116A607BB11374 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; @@ -64,15 +61,18 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - FA8209B958FEB61BC3944230 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 9A5F864F2C140D5AB62D37C2 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + BFF0A9ECF48DB9005E43855A /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + D07E5EC4B7EF798A3348CFAA /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + EE6B331A67AAC0FCD2EA6C9D /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 2D62EF768A55B90467C2DC36 /* Frameworks */ = { + 797442CBBB46F44138B8A62F /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - FD411C6D5C71698ACB812C16 /* Pods_RunnerTests.framework in Frameworks */, + A6631C561FD82D31CBA4956D /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -80,7 +80,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - C239903147E007ACE2539FF1 /* Pods_Runner.framework in Frameworks */, + 660451A8A4F7B5016E2BE610 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -95,13 +95,18 @@ path = RunnerTests; sourceTree = ""; }; - 84B8570AECF15F5B7E9ABCD4 /* Frameworks */ = { + 84DBD755DD72CD62634B38A6 /* Pods */ = { isa = PBXGroup; children = ( - 64271C2B15D5289E7A273234 /* Pods_Runner.framework */, - FA8209B958FEB61BC3944230 /* Pods_RunnerTests.framework */, + EE6B331A67AAC0FCD2EA6C9D /* Pods-Runner.debug.xcconfig */, + 1A3676A19DF22D28E9BD1FC2 /* Pods-Runner.release.xcconfig */, + D07E5EC4B7EF798A3348CFAA /* Pods-Runner.profile.xcconfig */, + 419220FE5D8CCA17E4449148 /* Pods-RunnerTests.debug.xcconfig */, + BFF0A9ECF48DB9005E43855A /* Pods-RunnerTests.release.xcconfig */, + 1A15B1F8A041262C230BED54 /* Pods-RunnerTests.profile.xcconfig */, ); - name = Frameworks; + name = Pods; + path = Pods; sourceTree = ""; }; 9740EEB11CF90186004384FC /* Flutter */ = { @@ -122,8 +127,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - D90EC8F042F876C28292E594 /* Pods */, - 84B8570AECF15F5B7E9ABCD4 /* Frameworks */, + 84DBD755DD72CD62634B38A6 /* Pods */, + CB3C27D4F94DA2B14436D57E /* Frameworks */, ); sourceTree = ""; }; @@ -151,18 +156,13 @@ path = Runner; sourceTree = ""; }; - D90EC8F042F876C28292E594 /* Pods */ = { + CB3C27D4F94DA2B14436D57E /* Frameworks */ = { isa = PBXGroup; children = ( - 293F5491067EBC5019B765DA /* Pods-Runner.debug.xcconfig */, - 607C5C89235EC713B8C81942 /* Pods-Runner.release.xcconfig */, - 616EF572B3F38B0AAFD45993 /* Pods-Runner.profile.xcconfig */, - 5FFF2B0D0B3FE850BDFFF1B4 /* Pods-RunnerTests.debug.xcconfig */, - 66CE0956CC2434D27E7C94D7 /* Pods-RunnerTests.release.xcconfig */, - 2F8CD2D2F3F3094219372FF1 /* Pods-RunnerTests.profile.xcconfig */, + 5331A371F0116A607BB11374 /* Pods_Runner.framework */, + 9A5F864F2C140D5AB62D37C2 /* Pods_RunnerTests.framework */, ); - name = Pods; - path = Pods; + name = Frameworks; sourceTree = ""; }; /* End PBXGroup section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - FB4A750F315CD4B3B7445826 /* [CP] Check Pods Manifest.lock */, + 2062CF2AA90746DBEBF6222E /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 2D62EF768A55B90467C2DC36 /* Frameworks */, + 797442CBBB46F44138B8A62F /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - D73333ECF2B7DB012811699D /* [CP] Check Pods Manifest.lock */, + 8A9478015A4593F36E3CD603 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - C0491FA95CBB4B76896F17FB /* [CP] Embed Pods Frameworks */, + 7A80B7559B6CC8A2CE24A777 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -270,38 +270,45 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + 2062CF2AA90746DBEBF6222E /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( - "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "Thin Binary"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); - name = "Run Script"; + name = "Thin Binary"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - C0491FA95CBB4B76896F17FB /* [CP] Embed Pods Frameworks */ = { + 7A80B7559B6CC8A2CE24A777 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -318,7 +325,7 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - D73333ECF2B7DB012811699D /* [CP] Check Pods Manifest.lock */ = { + 8A9478015A4593F36E3CD603 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -340,27 +347,20 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - FB4A750F315CD4B3B7445826 /* [CP] Check Pods Manifest.lock */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( ); + name = "Run Script"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; /* End PBXShellScriptBuildPhase section */ @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 5FFF2B0D0B3FE850BDFFF1B4 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 419220FE5D8CCA17E4449148 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 66CE0956CC2434D27E7C94D7 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = BFF0A9ECF48DB9005E43855A /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 2F8CD2D2F3F3094219372FF1 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 1A15B1F8A041262C230BED54 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/audio_soloud/step_02/linux/CMakeLists.txt b/audio_soloud/step_02/linux/CMakeLists.txt index c64e0cfd5b..74dd33a829 100644 --- a/audio_soloud/step_02/linux/CMakeLists.txt +++ b/audio_soloud/step_02/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/audio_soloud/step_02/linux/runner/CMakeLists.txt b/audio_soloud/step_02/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/audio_soloud/step_02/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/audio_soloud/step_02/linux/main.cc b/audio_soloud/step_02/linux/runner/main.cc similarity index 100% rename from audio_soloud/step_02/linux/main.cc rename to audio_soloud/step_02/linux/runner/main.cc diff --git a/audio_soloud/step_02/linux/my_application.cc b/audio_soloud/step_02/linux/runner/my_application.cc similarity index 93% rename from audio_soloud/step_02/linux/my_application.cc rename to audio_soloud/step_02/linux/runner/my_application.cc index 521305a6ae..5df4c311a3 100644 --- a/audio_soloud/step_02/linux/my_application.cc +++ b/audio_soloud/step_02/linux/runner/my_application.cc @@ -117,6 +117,12 @@ static void my_application_class_init(MyApplicationClass* klass) { static void my_application_init(MyApplication* self) {} MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + return MY_APPLICATION(g_object_new(my_application_get_type(), "application-id", APPLICATION_ID, "flags", G_APPLICATION_NON_UNIQUE, diff --git a/audio_soloud/step_02/linux/my_application.h b/audio_soloud/step_02/linux/runner/my_application.h similarity index 100% rename from audio_soloud/step_02/linux/my_application.h rename to audio_soloud/step_02/linux/runner/my_application.h diff --git a/audio_soloud/step_02/macos/Runner.xcodeproj/project.pbxproj b/audio_soloud/step_02/macos/Runner.xcodeproj/project.pbxproj index 5db54b3cea..b7362422cc 100644 --- a/audio_soloud/step_02/macos/Runner.xcodeproj/project.pbxproj +++ b/audio_soloud/step_02/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ - 2A999699495574DFF92F9C13 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 70CA73A69EDF65C4071EA773 /* Pods_RunnerTests.framework */; }; + 0D73403B8E98B133AA7CE204 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A47A3F9816C6B404C923F26A /* Pods_RunnerTests.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 75FA62EC905AFABA4C6D6257 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 221BFA348F774DE675CBCC12 /* Pods_Runner.framework */; }; + 64997B24FD16265E26078B31 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E9FF240A7207DE9140CCA6E3 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,8 +62,7 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 221BFA348F774DE675CBCC12 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 22378825C86C3FCA9520398A /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 2EFEC354148C8AED5D35BDE0 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -80,14 +79,15 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 37DAFECFA76D59E2A458BB07 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - 3F74DD5097636041EA867C42 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 70CA73A69EDF65C4071EA773 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 5BB8546BA2CD9C2B62569053 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 6A8117CC8A0D7F170A118ACB /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; + 920D8C3ABC08DF577D3461CF /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 95615250CC33E1E207BF1C7A /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - BC1BA37313853A1980F86C0C /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - EF84E844E5DD67F17F27BA36 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - FCB14AEAECB87AE9FC4E9459 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + A47A3F9816C6B404C923F26A /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + E074DB6C779DC9B0BAB22369 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + E9FF240A7207DE9140CCA6E3 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 2A999699495574DFF92F9C13 /* Pods_RunnerTests.framework in Frameworks */, + 0D73403B8E98B133AA7CE204 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,7 +103,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 75FA62EC905AFABA4C6D6257 /* Pods_Runner.framework in Frameworks */, + 64997B24FD16265E26078B31 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -137,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 6BE4410505BBFC9196DDDE0E /* Pods */, + C7208C9BEB8A8FE581EACF67 /* Pods */, ); sourceTree = ""; }; @@ -185,15 +185,15 @@ path = Runner; sourceTree = ""; }; - 6BE4410505BBFC9196DDDE0E /* Pods */ = { + C7208C9BEB8A8FE581EACF67 /* Pods */ = { isa = PBXGroup; children = ( - FCB14AEAECB87AE9FC4E9459 /* Pods-Runner.debug.xcconfig */, - BC1BA37313853A1980F86C0C /* Pods-Runner.release.xcconfig */, - 37DAFECFA76D59E2A458BB07 /* Pods-Runner.profile.xcconfig */, - 3F74DD5097636041EA867C42 /* Pods-RunnerTests.debug.xcconfig */, - 22378825C86C3FCA9520398A /* Pods-RunnerTests.release.xcconfig */, - EF84E844E5DD67F17F27BA36 /* Pods-RunnerTests.profile.xcconfig */, + 2EFEC354148C8AED5D35BDE0 /* Pods-Runner.debug.xcconfig */, + 6A8117CC8A0D7F170A118ACB /* Pods-Runner.release.xcconfig */, + 5BB8546BA2CD9C2B62569053 /* Pods-Runner.profile.xcconfig */, + 95615250CC33E1E207BF1C7A /* Pods-RunnerTests.debug.xcconfig */, + 920D8C3ABC08DF577D3461CF /* Pods-RunnerTests.release.xcconfig */, + E074DB6C779DC9B0BAB22369 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -202,8 +202,8 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - 221BFA348F774DE675CBCC12 /* Pods_Runner.framework */, - 70CA73A69EDF65C4071EA773 /* Pods_RunnerTests.framework */, + E9FF240A7207DE9140CCA6E3 /* Pods_Runner.framework */, + A47A3F9816C6B404C923F26A /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 911DBE09204FE02F8AFBFF29 /* [CP] Check Pods Manifest.lock */, + 17F5D3067CAF6C4336E34B3C /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 46CFC3737DD0E472F2B60D50 /* [CP] Check Pods Manifest.lock */, + 58A93043BC52AB230C967806 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 84D778B3E1B9F06119D3EF71 /* [CP] Embed Pods Frameworks */, + 38850385B5B0D324974EA1CE /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,67 +323,67 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 3399D490228B24CF009A79C7 /* ShellScript */ = { + 17F5D3067CAF6C4336E34B3C /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( ); outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - 33CC111E2044C6BF0003C045 /* ShellScript */ = { + 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - Flutter/ephemeral/FlutterInputs.xcfilelist, ); inputPaths = ( - Flutter/ephemeral/tripwire, ); outputFileListPaths = ( - Flutter/ephemeral/FlutterOutputs.xcfilelist, ); outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; + shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; }; - 46CFC3737DD0E472F2B60D50 /* [CP] Check Pods Manifest.lock */ = { + 33CC111E2044C6BF0003C045 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + Flutter/ephemeral/FlutterInputs.xcfilelist, ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", + Flutter/ephemeral/tripwire, ); - name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( + Flutter/ephemeral/FlutterOutputs.xcfilelist, ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 84D778B3E1B9F06119D3EF71 /* [CP] Embed Pods Frameworks */ = { + 38850385B5B0D324974EA1CE /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -400,7 +400,7 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - 911DBE09204FE02F8AFBFF29 /* [CP] Check Pods Manifest.lock */ = { + 58A93043BC52AB230C967806 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -415,7 +415,7 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 3F74DD5097636041EA867C42 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 95615250CC33E1E207BF1C7A /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 22378825C86C3FCA9520398A /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 920D8C3ABC08DF577D3461CF /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = EF84E844E5DD67F17F27BA36 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = E074DB6C779DC9B0BAB22369 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/audio_soloud/step_03/ios/Runner.xcodeproj/project.pbxproj b/audio_soloud/step_03/ios/Runner.xcodeproj/project.pbxproj index 78c3338736..1b9ce23f29 100644 --- a/audio_soloud/step_03/ios/Runner.xcodeproj/project.pbxproj +++ b/audio_soloud/step_03/ios/Runner.xcodeproj/project.pbxproj @@ -10,12 +10,12 @@ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; + 660451A8A4F7B5016E2BE610 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5331A371F0116A607BB11374 /* Pods_Runner.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - C239903147E007ACE2539FF1 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 64271C2B15D5289E7A273234 /* Pods_Runner.framework */; }; - FD411C6D5C71698ACB812C16 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FA8209B958FEB61BC3944230 /* Pods_RunnerTests.framework */; }; + A6631C561FD82D31CBA4956D /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9A5F864F2C140D5AB62D37C2 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -44,16 +44,13 @@ /* Begin PBXFileReference section */ 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 293F5491067EBC5019B765DA /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 2F8CD2D2F3F3094219372FF1 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 1A15B1F8A041262C230BED54 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 1A3676A19DF22D28E9BD1FC2 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 5FFF2B0D0B3FE850BDFFF1B4 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 607C5C89235EC713B8C81942 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 616EF572B3F38B0AAFD45993 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - 64271C2B15D5289E7A273234 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 66CE0956CC2434D27E7C94D7 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 419220FE5D8CCA17E4449148 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 5331A371F0116A607BB11374 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; @@ -64,15 +61,18 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - FA8209B958FEB61BC3944230 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 9A5F864F2C140D5AB62D37C2 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + BFF0A9ECF48DB9005E43855A /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + D07E5EC4B7EF798A3348CFAA /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + EE6B331A67AAC0FCD2EA6C9D /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 2D62EF768A55B90467C2DC36 /* Frameworks */ = { + 797442CBBB46F44138B8A62F /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - FD411C6D5C71698ACB812C16 /* Pods_RunnerTests.framework in Frameworks */, + A6631C561FD82D31CBA4956D /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -80,7 +80,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - C239903147E007ACE2539FF1 /* Pods_Runner.framework in Frameworks */, + 660451A8A4F7B5016E2BE610 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -95,13 +95,18 @@ path = RunnerTests; sourceTree = ""; }; - 84B8570AECF15F5B7E9ABCD4 /* Frameworks */ = { + 84DBD755DD72CD62634B38A6 /* Pods */ = { isa = PBXGroup; children = ( - 64271C2B15D5289E7A273234 /* Pods_Runner.framework */, - FA8209B958FEB61BC3944230 /* Pods_RunnerTests.framework */, + EE6B331A67AAC0FCD2EA6C9D /* Pods-Runner.debug.xcconfig */, + 1A3676A19DF22D28E9BD1FC2 /* Pods-Runner.release.xcconfig */, + D07E5EC4B7EF798A3348CFAA /* Pods-Runner.profile.xcconfig */, + 419220FE5D8CCA17E4449148 /* Pods-RunnerTests.debug.xcconfig */, + BFF0A9ECF48DB9005E43855A /* Pods-RunnerTests.release.xcconfig */, + 1A15B1F8A041262C230BED54 /* Pods-RunnerTests.profile.xcconfig */, ); - name = Frameworks; + name = Pods; + path = Pods; sourceTree = ""; }; 9740EEB11CF90186004384FC /* Flutter */ = { @@ -122,8 +127,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - D90EC8F042F876C28292E594 /* Pods */, - 84B8570AECF15F5B7E9ABCD4 /* Frameworks */, + 84DBD755DD72CD62634B38A6 /* Pods */, + CB3C27D4F94DA2B14436D57E /* Frameworks */, ); sourceTree = ""; }; @@ -151,18 +156,13 @@ path = Runner; sourceTree = ""; }; - D90EC8F042F876C28292E594 /* Pods */ = { + CB3C27D4F94DA2B14436D57E /* Frameworks */ = { isa = PBXGroup; children = ( - 293F5491067EBC5019B765DA /* Pods-Runner.debug.xcconfig */, - 607C5C89235EC713B8C81942 /* Pods-Runner.release.xcconfig */, - 616EF572B3F38B0AAFD45993 /* Pods-Runner.profile.xcconfig */, - 5FFF2B0D0B3FE850BDFFF1B4 /* Pods-RunnerTests.debug.xcconfig */, - 66CE0956CC2434D27E7C94D7 /* Pods-RunnerTests.release.xcconfig */, - 2F8CD2D2F3F3094219372FF1 /* Pods-RunnerTests.profile.xcconfig */, + 5331A371F0116A607BB11374 /* Pods_Runner.framework */, + 9A5F864F2C140D5AB62D37C2 /* Pods_RunnerTests.framework */, ); - name = Pods; - path = Pods; + name = Frameworks; sourceTree = ""; }; /* End PBXGroup section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - FB4A750F315CD4B3B7445826 /* [CP] Check Pods Manifest.lock */, + 2062CF2AA90746DBEBF6222E /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 2D62EF768A55B90467C2DC36 /* Frameworks */, + 797442CBBB46F44138B8A62F /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - D73333ECF2B7DB012811699D /* [CP] Check Pods Manifest.lock */, + 8A9478015A4593F36E3CD603 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - C0491FA95CBB4B76896F17FB /* [CP] Embed Pods Frameworks */, + 7A80B7559B6CC8A2CE24A777 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -270,38 +270,45 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + 2062CF2AA90746DBEBF6222E /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( - "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "Thin Binary"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); - name = "Run Script"; + name = "Thin Binary"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - C0491FA95CBB4B76896F17FB /* [CP] Embed Pods Frameworks */ = { + 7A80B7559B6CC8A2CE24A777 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -318,7 +325,7 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - D73333ECF2B7DB012811699D /* [CP] Check Pods Manifest.lock */ = { + 8A9478015A4593F36E3CD603 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -340,27 +347,20 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - FB4A750F315CD4B3B7445826 /* [CP] Check Pods Manifest.lock */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( ); + name = "Run Script"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; /* End PBXShellScriptBuildPhase section */ @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 5FFF2B0D0B3FE850BDFFF1B4 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 419220FE5D8CCA17E4449148 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 66CE0956CC2434D27E7C94D7 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = BFF0A9ECF48DB9005E43855A /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 2F8CD2D2F3F3094219372FF1 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 1A15B1F8A041262C230BED54 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/audio_soloud/step_03/linux/CMakeLists.txt b/audio_soloud/step_03/linux/CMakeLists.txt index c64e0cfd5b..74dd33a829 100644 --- a/audio_soloud/step_03/linux/CMakeLists.txt +++ b/audio_soloud/step_03/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/audio_soloud/step_03/linux/runner/CMakeLists.txt b/audio_soloud/step_03/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/audio_soloud/step_03/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/audio_soloud/step_03/linux/main.cc b/audio_soloud/step_03/linux/runner/main.cc similarity index 100% rename from audio_soloud/step_03/linux/main.cc rename to audio_soloud/step_03/linux/runner/main.cc diff --git a/audio_soloud/step_03/linux/my_application.cc b/audio_soloud/step_03/linux/runner/my_application.cc similarity index 93% rename from audio_soloud/step_03/linux/my_application.cc rename to audio_soloud/step_03/linux/runner/my_application.cc index 521305a6ae..5df4c311a3 100644 --- a/audio_soloud/step_03/linux/my_application.cc +++ b/audio_soloud/step_03/linux/runner/my_application.cc @@ -117,6 +117,12 @@ static void my_application_class_init(MyApplicationClass* klass) { static void my_application_init(MyApplication* self) {} MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + return MY_APPLICATION(g_object_new(my_application_get_type(), "application-id", APPLICATION_ID, "flags", G_APPLICATION_NON_UNIQUE, diff --git a/audio_soloud/step_03/linux/my_application.h b/audio_soloud/step_03/linux/runner/my_application.h similarity index 100% rename from audio_soloud/step_03/linux/my_application.h rename to audio_soloud/step_03/linux/runner/my_application.h diff --git a/audio_soloud/step_03/macos/Runner.xcodeproj/project.pbxproj b/audio_soloud/step_03/macos/Runner.xcodeproj/project.pbxproj index 5db54b3cea..b7362422cc 100644 --- a/audio_soloud/step_03/macos/Runner.xcodeproj/project.pbxproj +++ b/audio_soloud/step_03/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ - 2A999699495574DFF92F9C13 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 70CA73A69EDF65C4071EA773 /* Pods_RunnerTests.framework */; }; + 0D73403B8E98B133AA7CE204 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A47A3F9816C6B404C923F26A /* Pods_RunnerTests.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 75FA62EC905AFABA4C6D6257 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 221BFA348F774DE675CBCC12 /* Pods_Runner.framework */; }; + 64997B24FD16265E26078B31 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E9FF240A7207DE9140CCA6E3 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,8 +62,7 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 221BFA348F774DE675CBCC12 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 22378825C86C3FCA9520398A /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 2EFEC354148C8AED5D35BDE0 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -80,14 +79,15 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 37DAFECFA76D59E2A458BB07 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - 3F74DD5097636041EA867C42 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 70CA73A69EDF65C4071EA773 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 5BB8546BA2CD9C2B62569053 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 6A8117CC8A0D7F170A118ACB /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; + 920D8C3ABC08DF577D3461CF /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 95615250CC33E1E207BF1C7A /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - BC1BA37313853A1980F86C0C /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - EF84E844E5DD67F17F27BA36 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - FCB14AEAECB87AE9FC4E9459 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + A47A3F9816C6B404C923F26A /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + E074DB6C779DC9B0BAB22369 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + E9FF240A7207DE9140CCA6E3 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 2A999699495574DFF92F9C13 /* Pods_RunnerTests.framework in Frameworks */, + 0D73403B8E98B133AA7CE204 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,7 +103,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 75FA62EC905AFABA4C6D6257 /* Pods_Runner.framework in Frameworks */, + 64997B24FD16265E26078B31 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -137,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 6BE4410505BBFC9196DDDE0E /* Pods */, + C7208C9BEB8A8FE581EACF67 /* Pods */, ); sourceTree = ""; }; @@ -185,15 +185,15 @@ path = Runner; sourceTree = ""; }; - 6BE4410505BBFC9196DDDE0E /* Pods */ = { + C7208C9BEB8A8FE581EACF67 /* Pods */ = { isa = PBXGroup; children = ( - FCB14AEAECB87AE9FC4E9459 /* Pods-Runner.debug.xcconfig */, - BC1BA37313853A1980F86C0C /* Pods-Runner.release.xcconfig */, - 37DAFECFA76D59E2A458BB07 /* Pods-Runner.profile.xcconfig */, - 3F74DD5097636041EA867C42 /* Pods-RunnerTests.debug.xcconfig */, - 22378825C86C3FCA9520398A /* Pods-RunnerTests.release.xcconfig */, - EF84E844E5DD67F17F27BA36 /* Pods-RunnerTests.profile.xcconfig */, + 2EFEC354148C8AED5D35BDE0 /* Pods-Runner.debug.xcconfig */, + 6A8117CC8A0D7F170A118ACB /* Pods-Runner.release.xcconfig */, + 5BB8546BA2CD9C2B62569053 /* Pods-Runner.profile.xcconfig */, + 95615250CC33E1E207BF1C7A /* Pods-RunnerTests.debug.xcconfig */, + 920D8C3ABC08DF577D3461CF /* Pods-RunnerTests.release.xcconfig */, + E074DB6C779DC9B0BAB22369 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -202,8 +202,8 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - 221BFA348F774DE675CBCC12 /* Pods_Runner.framework */, - 70CA73A69EDF65C4071EA773 /* Pods_RunnerTests.framework */, + E9FF240A7207DE9140CCA6E3 /* Pods_Runner.framework */, + A47A3F9816C6B404C923F26A /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 911DBE09204FE02F8AFBFF29 /* [CP] Check Pods Manifest.lock */, + 17F5D3067CAF6C4336E34B3C /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 46CFC3737DD0E472F2B60D50 /* [CP] Check Pods Manifest.lock */, + 58A93043BC52AB230C967806 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 84D778B3E1B9F06119D3EF71 /* [CP] Embed Pods Frameworks */, + 38850385B5B0D324974EA1CE /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,67 +323,67 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 3399D490228B24CF009A79C7 /* ShellScript */ = { + 17F5D3067CAF6C4336E34B3C /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( ); outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - 33CC111E2044C6BF0003C045 /* ShellScript */ = { + 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - Flutter/ephemeral/FlutterInputs.xcfilelist, ); inputPaths = ( - Flutter/ephemeral/tripwire, ); outputFileListPaths = ( - Flutter/ephemeral/FlutterOutputs.xcfilelist, ); outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; + shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; }; - 46CFC3737DD0E472F2B60D50 /* [CP] Check Pods Manifest.lock */ = { + 33CC111E2044C6BF0003C045 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + Flutter/ephemeral/FlutterInputs.xcfilelist, ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", + Flutter/ephemeral/tripwire, ); - name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( + Flutter/ephemeral/FlutterOutputs.xcfilelist, ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 84D778B3E1B9F06119D3EF71 /* [CP] Embed Pods Frameworks */ = { + 38850385B5B0D324974EA1CE /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -400,7 +400,7 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - 911DBE09204FE02F8AFBFF29 /* [CP] Check Pods Manifest.lock */ = { + 58A93043BC52AB230C967806 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -415,7 +415,7 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 3F74DD5097636041EA867C42 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 95615250CC33E1E207BF1C7A /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 22378825C86C3FCA9520398A /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 920D8C3ABC08DF577D3461CF /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = EF84E844E5DD67F17F27BA36 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = E074DB6C779DC9B0BAB22369 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/audio_soloud/step_04a/ios/Runner.xcodeproj/project.pbxproj b/audio_soloud/step_04a/ios/Runner.xcodeproj/project.pbxproj index 78c3338736..1b9ce23f29 100644 --- a/audio_soloud/step_04a/ios/Runner.xcodeproj/project.pbxproj +++ b/audio_soloud/step_04a/ios/Runner.xcodeproj/project.pbxproj @@ -10,12 +10,12 @@ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; + 660451A8A4F7B5016E2BE610 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5331A371F0116A607BB11374 /* Pods_Runner.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - C239903147E007ACE2539FF1 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 64271C2B15D5289E7A273234 /* Pods_Runner.framework */; }; - FD411C6D5C71698ACB812C16 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FA8209B958FEB61BC3944230 /* Pods_RunnerTests.framework */; }; + A6631C561FD82D31CBA4956D /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9A5F864F2C140D5AB62D37C2 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -44,16 +44,13 @@ /* Begin PBXFileReference section */ 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 293F5491067EBC5019B765DA /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 2F8CD2D2F3F3094219372FF1 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 1A15B1F8A041262C230BED54 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 1A3676A19DF22D28E9BD1FC2 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 5FFF2B0D0B3FE850BDFFF1B4 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 607C5C89235EC713B8C81942 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 616EF572B3F38B0AAFD45993 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - 64271C2B15D5289E7A273234 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 66CE0956CC2434D27E7C94D7 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 419220FE5D8CCA17E4449148 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 5331A371F0116A607BB11374 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; @@ -64,15 +61,18 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - FA8209B958FEB61BC3944230 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 9A5F864F2C140D5AB62D37C2 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + BFF0A9ECF48DB9005E43855A /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + D07E5EC4B7EF798A3348CFAA /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + EE6B331A67AAC0FCD2EA6C9D /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 2D62EF768A55B90467C2DC36 /* Frameworks */ = { + 797442CBBB46F44138B8A62F /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - FD411C6D5C71698ACB812C16 /* Pods_RunnerTests.framework in Frameworks */, + A6631C561FD82D31CBA4956D /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -80,7 +80,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - C239903147E007ACE2539FF1 /* Pods_Runner.framework in Frameworks */, + 660451A8A4F7B5016E2BE610 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -95,13 +95,18 @@ path = RunnerTests; sourceTree = ""; }; - 84B8570AECF15F5B7E9ABCD4 /* Frameworks */ = { + 84DBD755DD72CD62634B38A6 /* Pods */ = { isa = PBXGroup; children = ( - 64271C2B15D5289E7A273234 /* Pods_Runner.framework */, - FA8209B958FEB61BC3944230 /* Pods_RunnerTests.framework */, + EE6B331A67AAC0FCD2EA6C9D /* Pods-Runner.debug.xcconfig */, + 1A3676A19DF22D28E9BD1FC2 /* Pods-Runner.release.xcconfig */, + D07E5EC4B7EF798A3348CFAA /* Pods-Runner.profile.xcconfig */, + 419220FE5D8CCA17E4449148 /* Pods-RunnerTests.debug.xcconfig */, + BFF0A9ECF48DB9005E43855A /* Pods-RunnerTests.release.xcconfig */, + 1A15B1F8A041262C230BED54 /* Pods-RunnerTests.profile.xcconfig */, ); - name = Frameworks; + name = Pods; + path = Pods; sourceTree = ""; }; 9740EEB11CF90186004384FC /* Flutter */ = { @@ -122,8 +127,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - D90EC8F042F876C28292E594 /* Pods */, - 84B8570AECF15F5B7E9ABCD4 /* Frameworks */, + 84DBD755DD72CD62634B38A6 /* Pods */, + CB3C27D4F94DA2B14436D57E /* Frameworks */, ); sourceTree = ""; }; @@ -151,18 +156,13 @@ path = Runner; sourceTree = ""; }; - D90EC8F042F876C28292E594 /* Pods */ = { + CB3C27D4F94DA2B14436D57E /* Frameworks */ = { isa = PBXGroup; children = ( - 293F5491067EBC5019B765DA /* Pods-Runner.debug.xcconfig */, - 607C5C89235EC713B8C81942 /* Pods-Runner.release.xcconfig */, - 616EF572B3F38B0AAFD45993 /* Pods-Runner.profile.xcconfig */, - 5FFF2B0D0B3FE850BDFFF1B4 /* Pods-RunnerTests.debug.xcconfig */, - 66CE0956CC2434D27E7C94D7 /* Pods-RunnerTests.release.xcconfig */, - 2F8CD2D2F3F3094219372FF1 /* Pods-RunnerTests.profile.xcconfig */, + 5331A371F0116A607BB11374 /* Pods_Runner.framework */, + 9A5F864F2C140D5AB62D37C2 /* Pods_RunnerTests.framework */, ); - name = Pods; - path = Pods; + name = Frameworks; sourceTree = ""; }; /* End PBXGroup section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - FB4A750F315CD4B3B7445826 /* [CP] Check Pods Manifest.lock */, + 2062CF2AA90746DBEBF6222E /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 2D62EF768A55B90467C2DC36 /* Frameworks */, + 797442CBBB46F44138B8A62F /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - D73333ECF2B7DB012811699D /* [CP] Check Pods Manifest.lock */, + 8A9478015A4593F36E3CD603 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - C0491FA95CBB4B76896F17FB /* [CP] Embed Pods Frameworks */, + 7A80B7559B6CC8A2CE24A777 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -270,38 +270,45 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + 2062CF2AA90746DBEBF6222E /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( - "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "Thin Binary"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); - name = "Run Script"; + name = "Thin Binary"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - C0491FA95CBB4B76896F17FB /* [CP] Embed Pods Frameworks */ = { + 7A80B7559B6CC8A2CE24A777 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -318,7 +325,7 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - D73333ECF2B7DB012811699D /* [CP] Check Pods Manifest.lock */ = { + 8A9478015A4593F36E3CD603 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -340,27 +347,20 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - FB4A750F315CD4B3B7445826 /* [CP] Check Pods Manifest.lock */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( ); + name = "Run Script"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; /* End PBXShellScriptBuildPhase section */ @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 5FFF2B0D0B3FE850BDFFF1B4 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 419220FE5D8CCA17E4449148 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 66CE0956CC2434D27E7C94D7 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = BFF0A9ECF48DB9005E43855A /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 2F8CD2D2F3F3094219372FF1 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 1A15B1F8A041262C230BED54 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/audio_soloud/step_04a/linux/CMakeLists.txt b/audio_soloud/step_04a/linux/CMakeLists.txt index c64e0cfd5b..74dd33a829 100644 --- a/audio_soloud/step_04a/linux/CMakeLists.txt +++ b/audio_soloud/step_04a/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/audio_soloud/step_04a/linux/runner/CMakeLists.txt b/audio_soloud/step_04a/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/audio_soloud/step_04a/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/audio_soloud/step_04a/linux/main.cc b/audio_soloud/step_04a/linux/runner/main.cc similarity index 100% rename from audio_soloud/step_04a/linux/main.cc rename to audio_soloud/step_04a/linux/runner/main.cc diff --git a/audio_soloud/step_04a/linux/my_application.cc b/audio_soloud/step_04a/linux/runner/my_application.cc similarity index 93% rename from audio_soloud/step_04a/linux/my_application.cc rename to audio_soloud/step_04a/linux/runner/my_application.cc index 521305a6ae..5df4c311a3 100644 --- a/audio_soloud/step_04a/linux/my_application.cc +++ b/audio_soloud/step_04a/linux/runner/my_application.cc @@ -117,6 +117,12 @@ static void my_application_class_init(MyApplicationClass* klass) { static void my_application_init(MyApplication* self) {} MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + return MY_APPLICATION(g_object_new(my_application_get_type(), "application-id", APPLICATION_ID, "flags", G_APPLICATION_NON_UNIQUE, diff --git a/audio_soloud/step_04a/linux/my_application.h b/audio_soloud/step_04a/linux/runner/my_application.h similarity index 100% rename from audio_soloud/step_04a/linux/my_application.h rename to audio_soloud/step_04a/linux/runner/my_application.h diff --git a/audio_soloud/step_04a/macos/Runner.xcodeproj/project.pbxproj b/audio_soloud/step_04a/macos/Runner.xcodeproj/project.pbxproj index 5db54b3cea..b7362422cc 100644 --- a/audio_soloud/step_04a/macos/Runner.xcodeproj/project.pbxproj +++ b/audio_soloud/step_04a/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ - 2A999699495574DFF92F9C13 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 70CA73A69EDF65C4071EA773 /* Pods_RunnerTests.framework */; }; + 0D73403B8E98B133AA7CE204 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A47A3F9816C6B404C923F26A /* Pods_RunnerTests.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 75FA62EC905AFABA4C6D6257 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 221BFA348F774DE675CBCC12 /* Pods_Runner.framework */; }; + 64997B24FD16265E26078B31 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E9FF240A7207DE9140CCA6E3 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,8 +62,7 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 221BFA348F774DE675CBCC12 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 22378825C86C3FCA9520398A /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 2EFEC354148C8AED5D35BDE0 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -80,14 +79,15 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 37DAFECFA76D59E2A458BB07 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - 3F74DD5097636041EA867C42 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 70CA73A69EDF65C4071EA773 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 5BB8546BA2CD9C2B62569053 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 6A8117CC8A0D7F170A118ACB /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; + 920D8C3ABC08DF577D3461CF /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 95615250CC33E1E207BF1C7A /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - BC1BA37313853A1980F86C0C /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - EF84E844E5DD67F17F27BA36 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - FCB14AEAECB87AE9FC4E9459 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + A47A3F9816C6B404C923F26A /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + E074DB6C779DC9B0BAB22369 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + E9FF240A7207DE9140CCA6E3 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 2A999699495574DFF92F9C13 /* Pods_RunnerTests.framework in Frameworks */, + 0D73403B8E98B133AA7CE204 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,7 +103,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 75FA62EC905AFABA4C6D6257 /* Pods_Runner.framework in Frameworks */, + 64997B24FD16265E26078B31 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -137,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 6BE4410505BBFC9196DDDE0E /* Pods */, + C7208C9BEB8A8FE581EACF67 /* Pods */, ); sourceTree = ""; }; @@ -185,15 +185,15 @@ path = Runner; sourceTree = ""; }; - 6BE4410505BBFC9196DDDE0E /* Pods */ = { + C7208C9BEB8A8FE581EACF67 /* Pods */ = { isa = PBXGroup; children = ( - FCB14AEAECB87AE9FC4E9459 /* Pods-Runner.debug.xcconfig */, - BC1BA37313853A1980F86C0C /* Pods-Runner.release.xcconfig */, - 37DAFECFA76D59E2A458BB07 /* Pods-Runner.profile.xcconfig */, - 3F74DD5097636041EA867C42 /* Pods-RunnerTests.debug.xcconfig */, - 22378825C86C3FCA9520398A /* Pods-RunnerTests.release.xcconfig */, - EF84E844E5DD67F17F27BA36 /* Pods-RunnerTests.profile.xcconfig */, + 2EFEC354148C8AED5D35BDE0 /* Pods-Runner.debug.xcconfig */, + 6A8117CC8A0D7F170A118ACB /* Pods-Runner.release.xcconfig */, + 5BB8546BA2CD9C2B62569053 /* Pods-Runner.profile.xcconfig */, + 95615250CC33E1E207BF1C7A /* Pods-RunnerTests.debug.xcconfig */, + 920D8C3ABC08DF577D3461CF /* Pods-RunnerTests.release.xcconfig */, + E074DB6C779DC9B0BAB22369 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -202,8 +202,8 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - 221BFA348F774DE675CBCC12 /* Pods_Runner.framework */, - 70CA73A69EDF65C4071EA773 /* Pods_RunnerTests.framework */, + E9FF240A7207DE9140CCA6E3 /* Pods_Runner.framework */, + A47A3F9816C6B404C923F26A /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 911DBE09204FE02F8AFBFF29 /* [CP] Check Pods Manifest.lock */, + 17F5D3067CAF6C4336E34B3C /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 46CFC3737DD0E472F2B60D50 /* [CP] Check Pods Manifest.lock */, + 58A93043BC52AB230C967806 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 84D778B3E1B9F06119D3EF71 /* [CP] Embed Pods Frameworks */, + 38850385B5B0D324974EA1CE /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,67 +323,67 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 3399D490228B24CF009A79C7 /* ShellScript */ = { + 17F5D3067CAF6C4336E34B3C /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( ); outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - 33CC111E2044C6BF0003C045 /* ShellScript */ = { + 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - Flutter/ephemeral/FlutterInputs.xcfilelist, ); inputPaths = ( - Flutter/ephemeral/tripwire, ); outputFileListPaths = ( - Flutter/ephemeral/FlutterOutputs.xcfilelist, ); outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; + shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; }; - 46CFC3737DD0E472F2B60D50 /* [CP] Check Pods Manifest.lock */ = { + 33CC111E2044C6BF0003C045 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + Flutter/ephemeral/FlutterInputs.xcfilelist, ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", + Flutter/ephemeral/tripwire, ); - name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( + Flutter/ephemeral/FlutterOutputs.xcfilelist, ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 84D778B3E1B9F06119D3EF71 /* [CP] Embed Pods Frameworks */ = { + 38850385B5B0D324974EA1CE /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -400,7 +400,7 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - 911DBE09204FE02F8AFBFF29 /* [CP] Check Pods Manifest.lock */ = { + 58A93043BC52AB230C967806 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -415,7 +415,7 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 3F74DD5097636041EA867C42 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 95615250CC33E1E207BF1C7A /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 22378825C86C3FCA9520398A /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 920D8C3ABC08DF577D3461CF /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = EF84E844E5DD67F17F27BA36 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = E074DB6C779DC9B0BAB22369 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/audio_soloud/step_04b/ios/Runner.xcodeproj/project.pbxproj b/audio_soloud/step_04b/ios/Runner.xcodeproj/project.pbxproj index 78c3338736..1b9ce23f29 100644 --- a/audio_soloud/step_04b/ios/Runner.xcodeproj/project.pbxproj +++ b/audio_soloud/step_04b/ios/Runner.xcodeproj/project.pbxproj @@ -10,12 +10,12 @@ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; + 660451A8A4F7B5016E2BE610 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5331A371F0116A607BB11374 /* Pods_Runner.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - C239903147E007ACE2539FF1 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 64271C2B15D5289E7A273234 /* Pods_Runner.framework */; }; - FD411C6D5C71698ACB812C16 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FA8209B958FEB61BC3944230 /* Pods_RunnerTests.framework */; }; + A6631C561FD82D31CBA4956D /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9A5F864F2C140D5AB62D37C2 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -44,16 +44,13 @@ /* Begin PBXFileReference section */ 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 293F5491067EBC5019B765DA /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 2F8CD2D2F3F3094219372FF1 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 1A15B1F8A041262C230BED54 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 1A3676A19DF22D28E9BD1FC2 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 5FFF2B0D0B3FE850BDFFF1B4 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 607C5C89235EC713B8C81942 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 616EF572B3F38B0AAFD45993 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - 64271C2B15D5289E7A273234 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 66CE0956CC2434D27E7C94D7 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 419220FE5D8CCA17E4449148 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 5331A371F0116A607BB11374 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; @@ -64,15 +61,18 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - FA8209B958FEB61BC3944230 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 9A5F864F2C140D5AB62D37C2 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + BFF0A9ECF48DB9005E43855A /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + D07E5EC4B7EF798A3348CFAA /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + EE6B331A67AAC0FCD2EA6C9D /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 2D62EF768A55B90467C2DC36 /* Frameworks */ = { + 797442CBBB46F44138B8A62F /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - FD411C6D5C71698ACB812C16 /* Pods_RunnerTests.framework in Frameworks */, + A6631C561FD82D31CBA4956D /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -80,7 +80,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - C239903147E007ACE2539FF1 /* Pods_Runner.framework in Frameworks */, + 660451A8A4F7B5016E2BE610 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -95,13 +95,18 @@ path = RunnerTests; sourceTree = ""; }; - 84B8570AECF15F5B7E9ABCD4 /* Frameworks */ = { + 84DBD755DD72CD62634B38A6 /* Pods */ = { isa = PBXGroup; children = ( - 64271C2B15D5289E7A273234 /* Pods_Runner.framework */, - FA8209B958FEB61BC3944230 /* Pods_RunnerTests.framework */, + EE6B331A67AAC0FCD2EA6C9D /* Pods-Runner.debug.xcconfig */, + 1A3676A19DF22D28E9BD1FC2 /* Pods-Runner.release.xcconfig */, + D07E5EC4B7EF798A3348CFAA /* Pods-Runner.profile.xcconfig */, + 419220FE5D8CCA17E4449148 /* Pods-RunnerTests.debug.xcconfig */, + BFF0A9ECF48DB9005E43855A /* Pods-RunnerTests.release.xcconfig */, + 1A15B1F8A041262C230BED54 /* Pods-RunnerTests.profile.xcconfig */, ); - name = Frameworks; + name = Pods; + path = Pods; sourceTree = ""; }; 9740EEB11CF90186004384FC /* Flutter */ = { @@ -122,8 +127,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - D90EC8F042F876C28292E594 /* Pods */, - 84B8570AECF15F5B7E9ABCD4 /* Frameworks */, + 84DBD755DD72CD62634B38A6 /* Pods */, + CB3C27D4F94DA2B14436D57E /* Frameworks */, ); sourceTree = ""; }; @@ -151,18 +156,13 @@ path = Runner; sourceTree = ""; }; - D90EC8F042F876C28292E594 /* Pods */ = { + CB3C27D4F94DA2B14436D57E /* Frameworks */ = { isa = PBXGroup; children = ( - 293F5491067EBC5019B765DA /* Pods-Runner.debug.xcconfig */, - 607C5C89235EC713B8C81942 /* Pods-Runner.release.xcconfig */, - 616EF572B3F38B0AAFD45993 /* Pods-Runner.profile.xcconfig */, - 5FFF2B0D0B3FE850BDFFF1B4 /* Pods-RunnerTests.debug.xcconfig */, - 66CE0956CC2434D27E7C94D7 /* Pods-RunnerTests.release.xcconfig */, - 2F8CD2D2F3F3094219372FF1 /* Pods-RunnerTests.profile.xcconfig */, + 5331A371F0116A607BB11374 /* Pods_Runner.framework */, + 9A5F864F2C140D5AB62D37C2 /* Pods_RunnerTests.framework */, ); - name = Pods; - path = Pods; + name = Frameworks; sourceTree = ""; }; /* End PBXGroup section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - FB4A750F315CD4B3B7445826 /* [CP] Check Pods Manifest.lock */, + 2062CF2AA90746DBEBF6222E /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 2D62EF768A55B90467C2DC36 /* Frameworks */, + 797442CBBB46F44138B8A62F /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - D73333ECF2B7DB012811699D /* [CP] Check Pods Manifest.lock */, + 8A9478015A4593F36E3CD603 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - C0491FA95CBB4B76896F17FB /* [CP] Embed Pods Frameworks */, + 7A80B7559B6CC8A2CE24A777 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -270,38 +270,45 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + 2062CF2AA90746DBEBF6222E /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( - "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "Thin Binary"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); - name = "Run Script"; + name = "Thin Binary"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - C0491FA95CBB4B76896F17FB /* [CP] Embed Pods Frameworks */ = { + 7A80B7559B6CC8A2CE24A777 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -318,7 +325,7 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - D73333ECF2B7DB012811699D /* [CP] Check Pods Manifest.lock */ = { + 8A9478015A4593F36E3CD603 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -340,27 +347,20 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - FB4A750F315CD4B3B7445826 /* [CP] Check Pods Manifest.lock */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( ); + name = "Run Script"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; /* End PBXShellScriptBuildPhase section */ @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 5FFF2B0D0B3FE850BDFFF1B4 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 419220FE5D8CCA17E4449148 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 66CE0956CC2434D27E7C94D7 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = BFF0A9ECF48DB9005E43855A /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 2F8CD2D2F3F3094219372FF1 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 1A15B1F8A041262C230BED54 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/audio_soloud/step_04b/linux/CMakeLists.txt b/audio_soloud/step_04b/linux/CMakeLists.txt index c64e0cfd5b..74dd33a829 100644 --- a/audio_soloud/step_04b/linux/CMakeLists.txt +++ b/audio_soloud/step_04b/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/audio_soloud/step_04b/linux/runner/CMakeLists.txt b/audio_soloud/step_04b/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/audio_soloud/step_04b/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/audio_soloud/step_04b/linux/main.cc b/audio_soloud/step_04b/linux/runner/main.cc similarity index 100% rename from audio_soloud/step_04b/linux/main.cc rename to audio_soloud/step_04b/linux/runner/main.cc diff --git a/audio_soloud/step_04b/linux/my_application.cc b/audio_soloud/step_04b/linux/runner/my_application.cc similarity index 93% rename from audio_soloud/step_04b/linux/my_application.cc rename to audio_soloud/step_04b/linux/runner/my_application.cc index 521305a6ae..5df4c311a3 100644 --- a/audio_soloud/step_04b/linux/my_application.cc +++ b/audio_soloud/step_04b/linux/runner/my_application.cc @@ -117,6 +117,12 @@ static void my_application_class_init(MyApplicationClass* klass) { static void my_application_init(MyApplication* self) {} MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + return MY_APPLICATION(g_object_new(my_application_get_type(), "application-id", APPLICATION_ID, "flags", G_APPLICATION_NON_UNIQUE, diff --git a/audio_soloud/step_04b/linux/my_application.h b/audio_soloud/step_04b/linux/runner/my_application.h similarity index 100% rename from audio_soloud/step_04b/linux/my_application.h rename to audio_soloud/step_04b/linux/runner/my_application.h diff --git a/audio_soloud/step_04b/macos/Runner.xcodeproj/project.pbxproj b/audio_soloud/step_04b/macos/Runner.xcodeproj/project.pbxproj index 5db54b3cea..b7362422cc 100644 --- a/audio_soloud/step_04b/macos/Runner.xcodeproj/project.pbxproj +++ b/audio_soloud/step_04b/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ - 2A999699495574DFF92F9C13 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 70CA73A69EDF65C4071EA773 /* Pods_RunnerTests.framework */; }; + 0D73403B8E98B133AA7CE204 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A47A3F9816C6B404C923F26A /* Pods_RunnerTests.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 75FA62EC905AFABA4C6D6257 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 221BFA348F774DE675CBCC12 /* Pods_Runner.framework */; }; + 64997B24FD16265E26078B31 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E9FF240A7207DE9140CCA6E3 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,8 +62,7 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 221BFA348F774DE675CBCC12 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 22378825C86C3FCA9520398A /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 2EFEC354148C8AED5D35BDE0 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -80,14 +79,15 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 37DAFECFA76D59E2A458BB07 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - 3F74DD5097636041EA867C42 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 70CA73A69EDF65C4071EA773 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 5BB8546BA2CD9C2B62569053 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 6A8117CC8A0D7F170A118ACB /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; + 920D8C3ABC08DF577D3461CF /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 95615250CC33E1E207BF1C7A /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - BC1BA37313853A1980F86C0C /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - EF84E844E5DD67F17F27BA36 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - FCB14AEAECB87AE9FC4E9459 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + A47A3F9816C6B404C923F26A /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + E074DB6C779DC9B0BAB22369 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + E9FF240A7207DE9140CCA6E3 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 2A999699495574DFF92F9C13 /* Pods_RunnerTests.framework in Frameworks */, + 0D73403B8E98B133AA7CE204 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,7 +103,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 75FA62EC905AFABA4C6D6257 /* Pods_Runner.framework in Frameworks */, + 64997B24FD16265E26078B31 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -137,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 6BE4410505BBFC9196DDDE0E /* Pods */, + C7208C9BEB8A8FE581EACF67 /* Pods */, ); sourceTree = ""; }; @@ -185,15 +185,15 @@ path = Runner; sourceTree = ""; }; - 6BE4410505BBFC9196DDDE0E /* Pods */ = { + C7208C9BEB8A8FE581EACF67 /* Pods */ = { isa = PBXGroup; children = ( - FCB14AEAECB87AE9FC4E9459 /* Pods-Runner.debug.xcconfig */, - BC1BA37313853A1980F86C0C /* Pods-Runner.release.xcconfig */, - 37DAFECFA76D59E2A458BB07 /* Pods-Runner.profile.xcconfig */, - 3F74DD5097636041EA867C42 /* Pods-RunnerTests.debug.xcconfig */, - 22378825C86C3FCA9520398A /* Pods-RunnerTests.release.xcconfig */, - EF84E844E5DD67F17F27BA36 /* Pods-RunnerTests.profile.xcconfig */, + 2EFEC354148C8AED5D35BDE0 /* Pods-Runner.debug.xcconfig */, + 6A8117CC8A0D7F170A118ACB /* Pods-Runner.release.xcconfig */, + 5BB8546BA2CD9C2B62569053 /* Pods-Runner.profile.xcconfig */, + 95615250CC33E1E207BF1C7A /* Pods-RunnerTests.debug.xcconfig */, + 920D8C3ABC08DF577D3461CF /* Pods-RunnerTests.release.xcconfig */, + E074DB6C779DC9B0BAB22369 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -202,8 +202,8 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - 221BFA348F774DE675CBCC12 /* Pods_Runner.framework */, - 70CA73A69EDF65C4071EA773 /* Pods_RunnerTests.framework */, + E9FF240A7207DE9140CCA6E3 /* Pods_Runner.framework */, + A47A3F9816C6B404C923F26A /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 911DBE09204FE02F8AFBFF29 /* [CP] Check Pods Manifest.lock */, + 17F5D3067CAF6C4336E34B3C /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 46CFC3737DD0E472F2B60D50 /* [CP] Check Pods Manifest.lock */, + 58A93043BC52AB230C967806 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 84D778B3E1B9F06119D3EF71 /* [CP] Embed Pods Frameworks */, + 38850385B5B0D324974EA1CE /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,67 +323,67 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 3399D490228B24CF009A79C7 /* ShellScript */ = { + 17F5D3067CAF6C4336E34B3C /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( ); outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - 33CC111E2044C6BF0003C045 /* ShellScript */ = { + 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - Flutter/ephemeral/FlutterInputs.xcfilelist, ); inputPaths = ( - Flutter/ephemeral/tripwire, ); outputFileListPaths = ( - Flutter/ephemeral/FlutterOutputs.xcfilelist, ); outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; + shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; }; - 46CFC3737DD0E472F2B60D50 /* [CP] Check Pods Manifest.lock */ = { + 33CC111E2044C6BF0003C045 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + Flutter/ephemeral/FlutterInputs.xcfilelist, ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", + Flutter/ephemeral/tripwire, ); - name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( + Flutter/ephemeral/FlutterOutputs.xcfilelist, ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 84D778B3E1B9F06119D3EF71 /* [CP] Embed Pods Frameworks */ = { + 38850385B5B0D324974EA1CE /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -400,7 +400,7 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - 911DBE09204FE02F8AFBFF29 /* [CP] Check Pods Manifest.lock */ = { + 58A93043BC52AB230C967806 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -415,7 +415,7 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 3F74DD5097636041EA867C42 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 95615250CC33E1E207BF1C7A /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 22378825C86C3FCA9520398A /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 920D8C3ABC08DF577D3461CF /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = EF84E844E5DD67F17F27BA36 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = E074DB6C779DC9B0BAB22369 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/audio_soloud/step_05/ios/Runner.xcodeproj/project.pbxproj b/audio_soloud/step_05/ios/Runner.xcodeproj/project.pbxproj index 78c3338736..1b9ce23f29 100644 --- a/audio_soloud/step_05/ios/Runner.xcodeproj/project.pbxproj +++ b/audio_soloud/step_05/ios/Runner.xcodeproj/project.pbxproj @@ -10,12 +10,12 @@ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; + 660451A8A4F7B5016E2BE610 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5331A371F0116A607BB11374 /* Pods_Runner.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - C239903147E007ACE2539FF1 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 64271C2B15D5289E7A273234 /* Pods_Runner.framework */; }; - FD411C6D5C71698ACB812C16 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FA8209B958FEB61BC3944230 /* Pods_RunnerTests.framework */; }; + A6631C561FD82D31CBA4956D /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9A5F864F2C140D5AB62D37C2 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -44,16 +44,13 @@ /* Begin PBXFileReference section */ 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 293F5491067EBC5019B765DA /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 2F8CD2D2F3F3094219372FF1 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 1A15B1F8A041262C230BED54 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 1A3676A19DF22D28E9BD1FC2 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 5FFF2B0D0B3FE850BDFFF1B4 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 607C5C89235EC713B8C81942 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 616EF572B3F38B0AAFD45993 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - 64271C2B15D5289E7A273234 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 66CE0956CC2434D27E7C94D7 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 419220FE5D8CCA17E4449148 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 5331A371F0116A607BB11374 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; @@ -64,15 +61,18 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - FA8209B958FEB61BC3944230 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 9A5F864F2C140D5AB62D37C2 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + BFF0A9ECF48DB9005E43855A /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + D07E5EC4B7EF798A3348CFAA /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + EE6B331A67AAC0FCD2EA6C9D /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 2D62EF768A55B90467C2DC36 /* Frameworks */ = { + 797442CBBB46F44138B8A62F /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - FD411C6D5C71698ACB812C16 /* Pods_RunnerTests.framework in Frameworks */, + A6631C561FD82D31CBA4956D /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -80,7 +80,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - C239903147E007ACE2539FF1 /* Pods_Runner.framework in Frameworks */, + 660451A8A4F7B5016E2BE610 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -95,13 +95,18 @@ path = RunnerTests; sourceTree = ""; }; - 84B8570AECF15F5B7E9ABCD4 /* Frameworks */ = { + 84DBD755DD72CD62634B38A6 /* Pods */ = { isa = PBXGroup; children = ( - 64271C2B15D5289E7A273234 /* Pods_Runner.framework */, - FA8209B958FEB61BC3944230 /* Pods_RunnerTests.framework */, + EE6B331A67AAC0FCD2EA6C9D /* Pods-Runner.debug.xcconfig */, + 1A3676A19DF22D28E9BD1FC2 /* Pods-Runner.release.xcconfig */, + D07E5EC4B7EF798A3348CFAA /* Pods-Runner.profile.xcconfig */, + 419220FE5D8CCA17E4449148 /* Pods-RunnerTests.debug.xcconfig */, + BFF0A9ECF48DB9005E43855A /* Pods-RunnerTests.release.xcconfig */, + 1A15B1F8A041262C230BED54 /* Pods-RunnerTests.profile.xcconfig */, ); - name = Frameworks; + name = Pods; + path = Pods; sourceTree = ""; }; 9740EEB11CF90186004384FC /* Flutter */ = { @@ -122,8 +127,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - D90EC8F042F876C28292E594 /* Pods */, - 84B8570AECF15F5B7E9ABCD4 /* Frameworks */, + 84DBD755DD72CD62634B38A6 /* Pods */, + CB3C27D4F94DA2B14436D57E /* Frameworks */, ); sourceTree = ""; }; @@ -151,18 +156,13 @@ path = Runner; sourceTree = ""; }; - D90EC8F042F876C28292E594 /* Pods */ = { + CB3C27D4F94DA2B14436D57E /* Frameworks */ = { isa = PBXGroup; children = ( - 293F5491067EBC5019B765DA /* Pods-Runner.debug.xcconfig */, - 607C5C89235EC713B8C81942 /* Pods-Runner.release.xcconfig */, - 616EF572B3F38B0AAFD45993 /* Pods-Runner.profile.xcconfig */, - 5FFF2B0D0B3FE850BDFFF1B4 /* Pods-RunnerTests.debug.xcconfig */, - 66CE0956CC2434D27E7C94D7 /* Pods-RunnerTests.release.xcconfig */, - 2F8CD2D2F3F3094219372FF1 /* Pods-RunnerTests.profile.xcconfig */, + 5331A371F0116A607BB11374 /* Pods_Runner.framework */, + 9A5F864F2C140D5AB62D37C2 /* Pods_RunnerTests.framework */, ); - name = Pods; - path = Pods; + name = Frameworks; sourceTree = ""; }; /* End PBXGroup section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - FB4A750F315CD4B3B7445826 /* [CP] Check Pods Manifest.lock */, + 2062CF2AA90746DBEBF6222E /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 2D62EF768A55B90467C2DC36 /* Frameworks */, + 797442CBBB46F44138B8A62F /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - D73333ECF2B7DB012811699D /* [CP] Check Pods Manifest.lock */, + 8A9478015A4593F36E3CD603 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - C0491FA95CBB4B76896F17FB /* [CP] Embed Pods Frameworks */, + 7A80B7559B6CC8A2CE24A777 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -270,38 +270,45 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + 2062CF2AA90746DBEBF6222E /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( - "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "Thin Binary"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); - name = "Run Script"; + name = "Thin Binary"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - C0491FA95CBB4B76896F17FB /* [CP] Embed Pods Frameworks */ = { + 7A80B7559B6CC8A2CE24A777 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -318,7 +325,7 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - D73333ECF2B7DB012811699D /* [CP] Check Pods Manifest.lock */ = { + 8A9478015A4593F36E3CD603 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -340,27 +347,20 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - FB4A750F315CD4B3B7445826 /* [CP] Check Pods Manifest.lock */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( ); + name = "Run Script"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; /* End PBXShellScriptBuildPhase section */ @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 5FFF2B0D0B3FE850BDFFF1B4 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 419220FE5D8CCA17E4449148 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 66CE0956CC2434D27E7C94D7 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = BFF0A9ECF48DB9005E43855A /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 2F8CD2D2F3F3094219372FF1 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 1A15B1F8A041262C230BED54 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/audio_soloud/step_05/linux/CMakeLists.txt b/audio_soloud/step_05/linux/CMakeLists.txt index c64e0cfd5b..74dd33a829 100644 --- a/audio_soloud/step_05/linux/CMakeLists.txt +++ b/audio_soloud/step_05/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/audio_soloud/step_05/linux/my_application.cc b/audio_soloud/step_05/linux/my_application.cc deleted file mode 100644 index 521305a6ae..0000000000 --- a/audio_soloud/step_05/linux/my_application.cc +++ /dev/null @@ -1,124 +0,0 @@ -#include "my_application.h" - -#include -#ifdef GDK_WINDOWING_X11 -#include -#endif - -#include "flutter/generated_plugin_registrant.h" - -struct _MyApplication { - GtkApplication parent_instance; - char** dart_entrypoint_arguments; -}; - -G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) - -// Implements GApplication::activate. -static void my_application_activate(GApplication* application) { - MyApplication* self = MY_APPLICATION(application); - GtkWindow* window = - GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); - - // Use a header bar when running in GNOME as this is the common style used - // by applications and is the setup most users will be using (e.g. Ubuntu - // desktop). - // If running on X and not using GNOME then just use a traditional title bar - // in case the window manager does more exotic layout, e.g. tiling. - // If running on Wayland assume the header bar will work (may need changing - // if future cases occur). - gboolean use_header_bar = TRUE; -#ifdef GDK_WINDOWING_X11 - GdkScreen* screen = gtk_window_get_screen(window); - if (GDK_IS_X11_SCREEN(screen)) { - const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); - if (g_strcmp0(wm_name, "GNOME Shell") != 0) { - use_header_bar = FALSE; - } - } -#endif - if (use_header_bar) { - GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); - gtk_widget_show(GTK_WIDGET(header_bar)); - gtk_header_bar_set_title(header_bar, "audio_soloud"); - gtk_header_bar_set_show_close_button(header_bar, TRUE); - gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); - } else { - gtk_window_set_title(window, "audio_soloud"); - } - - gtk_window_set_default_size(window, 1280, 720); - gtk_widget_show(GTK_WIDGET(window)); - - g_autoptr(FlDartProject) project = fl_dart_project_new(); - fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); - - FlView* view = fl_view_new(project); - gtk_widget_show(GTK_WIDGET(view)); - gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); - - fl_register_plugins(FL_PLUGIN_REGISTRY(view)); - - gtk_widget_grab_focus(GTK_WIDGET(view)); -} - -// Implements GApplication::local_command_line. -static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { - MyApplication* self = MY_APPLICATION(application); - // Strip out the first argument as it is the binary name. - self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); - - g_autoptr(GError) error = nullptr; - if (!g_application_register(application, nullptr, &error)) { - g_warning("Failed to register: %s", error->message); - *exit_status = 1; - return TRUE; - } - - g_application_activate(application); - *exit_status = 0; - - return TRUE; -} - -// Implements GApplication::startup. -static void my_application_startup(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application startup. - - G_APPLICATION_CLASS(my_application_parent_class)->startup(application); -} - -// Implements GApplication::shutdown. -static void my_application_shutdown(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application shutdown. - - G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); -} - -// Implements GObject::dispose. -static void my_application_dispose(GObject* object) { - MyApplication* self = MY_APPLICATION(object); - g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); - G_OBJECT_CLASS(my_application_parent_class)->dispose(object); -} - -static void my_application_class_init(MyApplicationClass* klass) { - G_APPLICATION_CLASS(klass)->activate = my_application_activate; - G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; - G_APPLICATION_CLASS(klass)->startup = my_application_startup; - G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; - G_OBJECT_CLASS(klass)->dispose = my_application_dispose; -} - -static void my_application_init(MyApplication* self) {} - -MyApplication* my_application_new() { - return MY_APPLICATION(g_object_new(my_application_get_type(), - "application-id", APPLICATION_ID, - "flags", G_APPLICATION_NON_UNIQUE, - nullptr)); -} diff --git a/audio_soloud/step_05/linux/runner/CMakeLists.txt b/audio_soloud/step_05/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/audio_soloud/step_05/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/audio_soloud/step_05/linux/main.cc b/audio_soloud/step_05/linux/runner/main.cc similarity index 100% rename from audio_soloud/step_05/linux/main.cc rename to audio_soloud/step_05/linux/runner/main.cc diff --git a/audio_soloud/step_05/linux/runner/my_application.cc b/audio_soloud/step_05/linux/runner/my_application.cc new file mode 100644 index 0000000000..5df4c311a3 --- /dev/null +++ b/audio_soloud/step_05/linux/runner/my_application.cc @@ -0,0 +1,130 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "audio_soloud"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "audio_soloud"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/audio_soloud/step_05/linux/my_application.h b/audio_soloud/step_05/linux/runner/my_application.h similarity index 100% rename from audio_soloud/step_05/linux/my_application.h rename to audio_soloud/step_05/linux/runner/my_application.h diff --git a/audio_soloud/step_05/macos/Runner.xcodeproj/project.pbxproj b/audio_soloud/step_05/macos/Runner.xcodeproj/project.pbxproj index 5db54b3cea..b7362422cc 100644 --- a/audio_soloud/step_05/macos/Runner.xcodeproj/project.pbxproj +++ b/audio_soloud/step_05/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ - 2A999699495574DFF92F9C13 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 70CA73A69EDF65C4071EA773 /* Pods_RunnerTests.framework */; }; + 0D73403B8E98B133AA7CE204 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A47A3F9816C6B404C923F26A /* Pods_RunnerTests.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 75FA62EC905AFABA4C6D6257 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 221BFA348F774DE675CBCC12 /* Pods_Runner.framework */; }; + 64997B24FD16265E26078B31 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E9FF240A7207DE9140CCA6E3 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,8 +62,7 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 221BFA348F774DE675CBCC12 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 22378825C86C3FCA9520398A /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 2EFEC354148C8AED5D35BDE0 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -80,14 +79,15 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 37DAFECFA76D59E2A458BB07 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - 3F74DD5097636041EA867C42 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 70CA73A69EDF65C4071EA773 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 5BB8546BA2CD9C2B62569053 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 6A8117CC8A0D7F170A118ACB /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; + 920D8C3ABC08DF577D3461CF /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 95615250CC33E1E207BF1C7A /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - BC1BA37313853A1980F86C0C /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - EF84E844E5DD67F17F27BA36 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - FCB14AEAECB87AE9FC4E9459 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + A47A3F9816C6B404C923F26A /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + E074DB6C779DC9B0BAB22369 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + E9FF240A7207DE9140CCA6E3 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 2A999699495574DFF92F9C13 /* Pods_RunnerTests.framework in Frameworks */, + 0D73403B8E98B133AA7CE204 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,7 +103,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 75FA62EC905AFABA4C6D6257 /* Pods_Runner.framework in Frameworks */, + 64997B24FD16265E26078B31 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -137,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 6BE4410505BBFC9196DDDE0E /* Pods */, + C7208C9BEB8A8FE581EACF67 /* Pods */, ); sourceTree = ""; }; @@ -185,15 +185,15 @@ path = Runner; sourceTree = ""; }; - 6BE4410505BBFC9196DDDE0E /* Pods */ = { + C7208C9BEB8A8FE581EACF67 /* Pods */ = { isa = PBXGroup; children = ( - FCB14AEAECB87AE9FC4E9459 /* Pods-Runner.debug.xcconfig */, - BC1BA37313853A1980F86C0C /* Pods-Runner.release.xcconfig */, - 37DAFECFA76D59E2A458BB07 /* Pods-Runner.profile.xcconfig */, - 3F74DD5097636041EA867C42 /* Pods-RunnerTests.debug.xcconfig */, - 22378825C86C3FCA9520398A /* Pods-RunnerTests.release.xcconfig */, - EF84E844E5DD67F17F27BA36 /* Pods-RunnerTests.profile.xcconfig */, + 2EFEC354148C8AED5D35BDE0 /* Pods-Runner.debug.xcconfig */, + 6A8117CC8A0D7F170A118ACB /* Pods-Runner.release.xcconfig */, + 5BB8546BA2CD9C2B62569053 /* Pods-Runner.profile.xcconfig */, + 95615250CC33E1E207BF1C7A /* Pods-RunnerTests.debug.xcconfig */, + 920D8C3ABC08DF577D3461CF /* Pods-RunnerTests.release.xcconfig */, + E074DB6C779DC9B0BAB22369 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -202,8 +202,8 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - 221BFA348F774DE675CBCC12 /* Pods_Runner.framework */, - 70CA73A69EDF65C4071EA773 /* Pods_RunnerTests.framework */, + E9FF240A7207DE9140CCA6E3 /* Pods_Runner.framework */, + A47A3F9816C6B404C923F26A /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 911DBE09204FE02F8AFBFF29 /* [CP] Check Pods Manifest.lock */, + 17F5D3067CAF6C4336E34B3C /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 46CFC3737DD0E472F2B60D50 /* [CP] Check Pods Manifest.lock */, + 58A93043BC52AB230C967806 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 84D778B3E1B9F06119D3EF71 /* [CP] Embed Pods Frameworks */, + 38850385B5B0D324974EA1CE /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,67 +323,67 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 3399D490228B24CF009A79C7 /* ShellScript */ = { + 17F5D3067CAF6C4336E34B3C /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( ); outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - 33CC111E2044C6BF0003C045 /* ShellScript */ = { + 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - Flutter/ephemeral/FlutterInputs.xcfilelist, ); inputPaths = ( - Flutter/ephemeral/tripwire, ); outputFileListPaths = ( - Flutter/ephemeral/FlutterOutputs.xcfilelist, ); outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; + shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; }; - 46CFC3737DD0E472F2B60D50 /* [CP] Check Pods Manifest.lock */ = { + 33CC111E2044C6BF0003C045 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + Flutter/ephemeral/FlutterInputs.xcfilelist, ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", + Flutter/ephemeral/tripwire, ); - name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( + Flutter/ephemeral/FlutterOutputs.xcfilelist, ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 84D778B3E1B9F06119D3EF71 /* [CP] Embed Pods Frameworks */ = { + 38850385B5B0D324974EA1CE /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -400,7 +400,7 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - 911DBE09204FE02F8AFBFF29 /* [CP] Check Pods Manifest.lock */ = { + 58A93043BC52AB230C967806 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -415,7 +415,7 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 3F74DD5097636041EA867C42 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 95615250CC33E1E207BF1C7A /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 22378825C86C3FCA9520398A /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 920D8C3ABC08DF577D3461CF /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = EF84E844E5DD67F17F27BA36 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = E074DB6C779DC9B0BAB22369 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/audio_soloud/step_06/ios/Runner.xcodeproj/project.pbxproj b/audio_soloud/step_06/ios/Runner.xcodeproj/project.pbxproj index 78c3338736..1b9ce23f29 100644 --- a/audio_soloud/step_06/ios/Runner.xcodeproj/project.pbxproj +++ b/audio_soloud/step_06/ios/Runner.xcodeproj/project.pbxproj @@ -10,12 +10,12 @@ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; + 660451A8A4F7B5016E2BE610 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5331A371F0116A607BB11374 /* Pods_Runner.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - C239903147E007ACE2539FF1 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 64271C2B15D5289E7A273234 /* Pods_Runner.framework */; }; - FD411C6D5C71698ACB812C16 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FA8209B958FEB61BC3944230 /* Pods_RunnerTests.framework */; }; + A6631C561FD82D31CBA4956D /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9A5F864F2C140D5AB62D37C2 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -44,16 +44,13 @@ /* Begin PBXFileReference section */ 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 293F5491067EBC5019B765DA /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 2F8CD2D2F3F3094219372FF1 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 1A15B1F8A041262C230BED54 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 1A3676A19DF22D28E9BD1FC2 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 5FFF2B0D0B3FE850BDFFF1B4 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 607C5C89235EC713B8C81942 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 616EF572B3F38B0AAFD45993 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - 64271C2B15D5289E7A273234 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 66CE0956CC2434D27E7C94D7 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 419220FE5D8CCA17E4449148 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 5331A371F0116A607BB11374 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; @@ -64,15 +61,18 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - FA8209B958FEB61BC3944230 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 9A5F864F2C140D5AB62D37C2 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + BFF0A9ECF48DB9005E43855A /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + D07E5EC4B7EF798A3348CFAA /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + EE6B331A67AAC0FCD2EA6C9D /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 2D62EF768A55B90467C2DC36 /* Frameworks */ = { + 797442CBBB46F44138B8A62F /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - FD411C6D5C71698ACB812C16 /* Pods_RunnerTests.framework in Frameworks */, + A6631C561FD82D31CBA4956D /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -80,7 +80,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - C239903147E007ACE2539FF1 /* Pods_Runner.framework in Frameworks */, + 660451A8A4F7B5016E2BE610 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -95,13 +95,18 @@ path = RunnerTests; sourceTree = ""; }; - 84B8570AECF15F5B7E9ABCD4 /* Frameworks */ = { + 84DBD755DD72CD62634B38A6 /* Pods */ = { isa = PBXGroup; children = ( - 64271C2B15D5289E7A273234 /* Pods_Runner.framework */, - FA8209B958FEB61BC3944230 /* Pods_RunnerTests.framework */, + EE6B331A67AAC0FCD2EA6C9D /* Pods-Runner.debug.xcconfig */, + 1A3676A19DF22D28E9BD1FC2 /* Pods-Runner.release.xcconfig */, + D07E5EC4B7EF798A3348CFAA /* Pods-Runner.profile.xcconfig */, + 419220FE5D8CCA17E4449148 /* Pods-RunnerTests.debug.xcconfig */, + BFF0A9ECF48DB9005E43855A /* Pods-RunnerTests.release.xcconfig */, + 1A15B1F8A041262C230BED54 /* Pods-RunnerTests.profile.xcconfig */, ); - name = Frameworks; + name = Pods; + path = Pods; sourceTree = ""; }; 9740EEB11CF90186004384FC /* Flutter */ = { @@ -122,8 +127,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - D90EC8F042F876C28292E594 /* Pods */, - 84B8570AECF15F5B7E9ABCD4 /* Frameworks */, + 84DBD755DD72CD62634B38A6 /* Pods */, + CB3C27D4F94DA2B14436D57E /* Frameworks */, ); sourceTree = ""; }; @@ -151,18 +156,13 @@ path = Runner; sourceTree = ""; }; - D90EC8F042F876C28292E594 /* Pods */ = { + CB3C27D4F94DA2B14436D57E /* Frameworks */ = { isa = PBXGroup; children = ( - 293F5491067EBC5019B765DA /* Pods-Runner.debug.xcconfig */, - 607C5C89235EC713B8C81942 /* Pods-Runner.release.xcconfig */, - 616EF572B3F38B0AAFD45993 /* Pods-Runner.profile.xcconfig */, - 5FFF2B0D0B3FE850BDFFF1B4 /* Pods-RunnerTests.debug.xcconfig */, - 66CE0956CC2434D27E7C94D7 /* Pods-RunnerTests.release.xcconfig */, - 2F8CD2D2F3F3094219372FF1 /* Pods-RunnerTests.profile.xcconfig */, + 5331A371F0116A607BB11374 /* Pods_Runner.framework */, + 9A5F864F2C140D5AB62D37C2 /* Pods_RunnerTests.framework */, ); - name = Pods; - path = Pods; + name = Frameworks; sourceTree = ""; }; /* End PBXGroup section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - FB4A750F315CD4B3B7445826 /* [CP] Check Pods Manifest.lock */, + 2062CF2AA90746DBEBF6222E /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 2D62EF768A55B90467C2DC36 /* Frameworks */, + 797442CBBB46F44138B8A62F /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - D73333ECF2B7DB012811699D /* [CP] Check Pods Manifest.lock */, + 8A9478015A4593F36E3CD603 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - C0491FA95CBB4B76896F17FB /* [CP] Embed Pods Frameworks */, + 7A80B7559B6CC8A2CE24A777 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -270,38 +270,45 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + 2062CF2AA90746DBEBF6222E /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( - "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "Thin Binary"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); - name = "Run Script"; + name = "Thin Binary"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - C0491FA95CBB4B76896F17FB /* [CP] Embed Pods Frameworks */ = { + 7A80B7559B6CC8A2CE24A777 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -318,7 +325,7 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - D73333ECF2B7DB012811699D /* [CP] Check Pods Manifest.lock */ = { + 8A9478015A4593F36E3CD603 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -340,27 +347,20 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - FB4A750F315CD4B3B7445826 /* [CP] Check Pods Manifest.lock */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( ); + name = "Run Script"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; /* End PBXShellScriptBuildPhase section */ @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 5FFF2B0D0B3FE850BDFFF1B4 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 419220FE5D8CCA17E4449148 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 66CE0956CC2434D27E7C94D7 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = BFF0A9ECF48DB9005E43855A /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 2F8CD2D2F3F3094219372FF1 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 1A15B1F8A041262C230BED54 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/audio_soloud/step_06/linux/CMakeLists.txt b/audio_soloud/step_06/linux/CMakeLists.txt index c64e0cfd5b..74dd33a829 100644 --- a/audio_soloud/step_06/linux/CMakeLists.txt +++ b/audio_soloud/step_06/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/audio_soloud/step_06/linux/my_application.cc b/audio_soloud/step_06/linux/my_application.cc deleted file mode 100644 index 521305a6ae..0000000000 --- a/audio_soloud/step_06/linux/my_application.cc +++ /dev/null @@ -1,124 +0,0 @@ -#include "my_application.h" - -#include -#ifdef GDK_WINDOWING_X11 -#include -#endif - -#include "flutter/generated_plugin_registrant.h" - -struct _MyApplication { - GtkApplication parent_instance; - char** dart_entrypoint_arguments; -}; - -G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) - -// Implements GApplication::activate. -static void my_application_activate(GApplication* application) { - MyApplication* self = MY_APPLICATION(application); - GtkWindow* window = - GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); - - // Use a header bar when running in GNOME as this is the common style used - // by applications and is the setup most users will be using (e.g. Ubuntu - // desktop). - // If running on X and not using GNOME then just use a traditional title bar - // in case the window manager does more exotic layout, e.g. tiling. - // If running on Wayland assume the header bar will work (may need changing - // if future cases occur). - gboolean use_header_bar = TRUE; -#ifdef GDK_WINDOWING_X11 - GdkScreen* screen = gtk_window_get_screen(window); - if (GDK_IS_X11_SCREEN(screen)) { - const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); - if (g_strcmp0(wm_name, "GNOME Shell") != 0) { - use_header_bar = FALSE; - } - } -#endif - if (use_header_bar) { - GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); - gtk_widget_show(GTK_WIDGET(header_bar)); - gtk_header_bar_set_title(header_bar, "audio_soloud"); - gtk_header_bar_set_show_close_button(header_bar, TRUE); - gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); - } else { - gtk_window_set_title(window, "audio_soloud"); - } - - gtk_window_set_default_size(window, 1280, 720); - gtk_widget_show(GTK_WIDGET(window)); - - g_autoptr(FlDartProject) project = fl_dart_project_new(); - fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); - - FlView* view = fl_view_new(project); - gtk_widget_show(GTK_WIDGET(view)); - gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); - - fl_register_plugins(FL_PLUGIN_REGISTRY(view)); - - gtk_widget_grab_focus(GTK_WIDGET(view)); -} - -// Implements GApplication::local_command_line. -static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { - MyApplication* self = MY_APPLICATION(application); - // Strip out the first argument as it is the binary name. - self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); - - g_autoptr(GError) error = nullptr; - if (!g_application_register(application, nullptr, &error)) { - g_warning("Failed to register: %s", error->message); - *exit_status = 1; - return TRUE; - } - - g_application_activate(application); - *exit_status = 0; - - return TRUE; -} - -// Implements GApplication::startup. -static void my_application_startup(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application startup. - - G_APPLICATION_CLASS(my_application_parent_class)->startup(application); -} - -// Implements GApplication::shutdown. -static void my_application_shutdown(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application shutdown. - - G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); -} - -// Implements GObject::dispose. -static void my_application_dispose(GObject* object) { - MyApplication* self = MY_APPLICATION(object); - g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); - G_OBJECT_CLASS(my_application_parent_class)->dispose(object); -} - -static void my_application_class_init(MyApplicationClass* klass) { - G_APPLICATION_CLASS(klass)->activate = my_application_activate; - G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; - G_APPLICATION_CLASS(klass)->startup = my_application_startup; - G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; - G_OBJECT_CLASS(klass)->dispose = my_application_dispose; -} - -static void my_application_init(MyApplication* self) {} - -MyApplication* my_application_new() { - return MY_APPLICATION(g_object_new(my_application_get_type(), - "application-id", APPLICATION_ID, - "flags", G_APPLICATION_NON_UNIQUE, - nullptr)); -} diff --git a/audio_soloud/step_06/linux/runner/CMakeLists.txt b/audio_soloud/step_06/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/audio_soloud/step_06/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/audio_soloud/step_06/linux/main.cc b/audio_soloud/step_06/linux/runner/main.cc similarity index 100% rename from audio_soloud/step_06/linux/main.cc rename to audio_soloud/step_06/linux/runner/main.cc diff --git a/audio_soloud/step_06/linux/runner/my_application.cc b/audio_soloud/step_06/linux/runner/my_application.cc new file mode 100644 index 0000000000..5df4c311a3 --- /dev/null +++ b/audio_soloud/step_06/linux/runner/my_application.cc @@ -0,0 +1,130 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "audio_soloud"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "audio_soloud"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/audio_soloud/step_06/linux/my_application.h b/audio_soloud/step_06/linux/runner/my_application.h similarity index 100% rename from audio_soloud/step_06/linux/my_application.h rename to audio_soloud/step_06/linux/runner/my_application.h diff --git a/audio_soloud/step_06/macos/Runner.xcodeproj/project.pbxproj b/audio_soloud/step_06/macos/Runner.xcodeproj/project.pbxproj index 5db54b3cea..b7362422cc 100644 --- a/audio_soloud/step_06/macos/Runner.xcodeproj/project.pbxproj +++ b/audio_soloud/step_06/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ - 2A999699495574DFF92F9C13 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 70CA73A69EDF65C4071EA773 /* Pods_RunnerTests.framework */; }; + 0D73403B8E98B133AA7CE204 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A47A3F9816C6B404C923F26A /* Pods_RunnerTests.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 75FA62EC905AFABA4C6D6257 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 221BFA348F774DE675CBCC12 /* Pods_Runner.framework */; }; + 64997B24FD16265E26078B31 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E9FF240A7207DE9140CCA6E3 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,8 +62,7 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 221BFA348F774DE675CBCC12 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 22378825C86C3FCA9520398A /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 2EFEC354148C8AED5D35BDE0 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -80,14 +79,15 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 37DAFECFA76D59E2A458BB07 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - 3F74DD5097636041EA867C42 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 70CA73A69EDF65C4071EA773 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 5BB8546BA2CD9C2B62569053 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 6A8117CC8A0D7F170A118ACB /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; + 920D8C3ABC08DF577D3461CF /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 95615250CC33E1E207BF1C7A /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - BC1BA37313853A1980F86C0C /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - EF84E844E5DD67F17F27BA36 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - FCB14AEAECB87AE9FC4E9459 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + A47A3F9816C6B404C923F26A /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + E074DB6C779DC9B0BAB22369 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + E9FF240A7207DE9140CCA6E3 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 2A999699495574DFF92F9C13 /* Pods_RunnerTests.framework in Frameworks */, + 0D73403B8E98B133AA7CE204 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,7 +103,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 75FA62EC905AFABA4C6D6257 /* Pods_Runner.framework in Frameworks */, + 64997B24FD16265E26078B31 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -137,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 6BE4410505BBFC9196DDDE0E /* Pods */, + C7208C9BEB8A8FE581EACF67 /* Pods */, ); sourceTree = ""; }; @@ -185,15 +185,15 @@ path = Runner; sourceTree = ""; }; - 6BE4410505BBFC9196DDDE0E /* Pods */ = { + C7208C9BEB8A8FE581EACF67 /* Pods */ = { isa = PBXGroup; children = ( - FCB14AEAECB87AE9FC4E9459 /* Pods-Runner.debug.xcconfig */, - BC1BA37313853A1980F86C0C /* Pods-Runner.release.xcconfig */, - 37DAFECFA76D59E2A458BB07 /* Pods-Runner.profile.xcconfig */, - 3F74DD5097636041EA867C42 /* Pods-RunnerTests.debug.xcconfig */, - 22378825C86C3FCA9520398A /* Pods-RunnerTests.release.xcconfig */, - EF84E844E5DD67F17F27BA36 /* Pods-RunnerTests.profile.xcconfig */, + 2EFEC354148C8AED5D35BDE0 /* Pods-Runner.debug.xcconfig */, + 6A8117CC8A0D7F170A118ACB /* Pods-Runner.release.xcconfig */, + 5BB8546BA2CD9C2B62569053 /* Pods-Runner.profile.xcconfig */, + 95615250CC33E1E207BF1C7A /* Pods-RunnerTests.debug.xcconfig */, + 920D8C3ABC08DF577D3461CF /* Pods-RunnerTests.release.xcconfig */, + E074DB6C779DC9B0BAB22369 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -202,8 +202,8 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - 221BFA348F774DE675CBCC12 /* Pods_Runner.framework */, - 70CA73A69EDF65C4071EA773 /* Pods_RunnerTests.framework */, + E9FF240A7207DE9140CCA6E3 /* Pods_Runner.framework */, + A47A3F9816C6B404C923F26A /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 911DBE09204FE02F8AFBFF29 /* [CP] Check Pods Manifest.lock */, + 17F5D3067CAF6C4336E34B3C /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 46CFC3737DD0E472F2B60D50 /* [CP] Check Pods Manifest.lock */, + 58A93043BC52AB230C967806 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 84D778B3E1B9F06119D3EF71 /* [CP] Embed Pods Frameworks */, + 38850385B5B0D324974EA1CE /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,67 +323,67 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 3399D490228B24CF009A79C7 /* ShellScript */ = { + 17F5D3067CAF6C4336E34B3C /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( ); outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - 33CC111E2044C6BF0003C045 /* ShellScript */ = { + 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - Flutter/ephemeral/FlutterInputs.xcfilelist, ); inputPaths = ( - Flutter/ephemeral/tripwire, ); outputFileListPaths = ( - Flutter/ephemeral/FlutterOutputs.xcfilelist, ); outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; + shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; }; - 46CFC3737DD0E472F2B60D50 /* [CP] Check Pods Manifest.lock */ = { + 33CC111E2044C6BF0003C045 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + Flutter/ephemeral/FlutterInputs.xcfilelist, ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", + Flutter/ephemeral/tripwire, ); - name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( + Flutter/ephemeral/FlutterOutputs.xcfilelist, ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 84D778B3E1B9F06119D3EF71 /* [CP] Embed Pods Frameworks */ = { + 38850385B5B0D324974EA1CE /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -400,7 +400,7 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - 911DBE09204FE02F8AFBFF29 /* [CP] Check Pods Manifest.lock */ = { + 58A93043BC52AB230C967806 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -415,7 +415,7 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 3F74DD5097636041EA867C42 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 95615250CC33E1E207BF1C7A /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 22378825C86C3FCA9520398A /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 920D8C3ABC08DF577D3461CF /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = EF84E844E5DD67F17F27BA36 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = E074DB6C779DC9B0BAB22369 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; From e9a0544221f711134bf0efe97f6f49e3517fe500 Mon Sep 17 00:00:00 2001 From: Brett Morgan Date: Wed, 13 Nov 2024 06:20:27 +1100 Subject: [PATCH 038/108] Update `boring_to_beautiful` --- .../ios/Runner.xcodeproj/project.pbxproj | 140 +++++++++--------- .../final/linux/CMakeLists.txt | 23 +-- .../final/linux/runner/CMakeLists.txt | 26 ++++ .../final/linux/{ => runner}/main.cc | 0 .../linux/{ => runner}/my_application.cc | 6 + .../final/linux/{ => runner}/my_application.h | 0 .../macos/Runner.xcodeproj/project.pbxproj | 112 +++++++------- boring_to_beautiful/final/pubspec.yaml | 4 +- boring_to_beautiful/final/web/index.html | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 140 +++++++++--------- .../step_01/linux/CMakeLists.txt | 23 +-- .../step_01/linux/runner/CMakeLists.txt | 26 ++++ .../step_01/linux/{ => runner}/main.cc | 0 .../linux/{ => runner}/my_application.cc | 6 + .../linux/{ => runner}/my_application.h | 0 .../macos/Runner.xcodeproj/project.pbxproj | 112 +++++++------- boring_to_beautiful/step_01/pubspec.yaml | 4 +- boring_to_beautiful/step_01/web/index.html | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 140 +++++++++--------- .../step_02/linux/CMakeLists.txt | 23 +-- .../step_02/linux/runner/CMakeLists.txt | 26 ++++ .../step_02/linux/{ => runner}/main.cc | 0 .../linux/{ => runner}/my_application.cc | 6 + .../linux/{ => runner}/my_application.h | 0 .../macos/Runner.xcodeproj/project.pbxproj | 112 +++++++------- boring_to_beautiful/step_02/pubspec.yaml | 4 +- boring_to_beautiful/step_02/web/index.html | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 140 +++++++++--------- .../step_03/linux/CMakeLists.txt | 23 +-- .../step_03/linux/runner/CMakeLists.txt | 26 ++++ .../step_03/linux/{ => runner}/main.cc | 0 .../linux/{ => runner}/my_application.cc | 6 + .../linux/{ => runner}/my_application.h | 0 .../macos/Runner.xcodeproj/project.pbxproj | 112 +++++++------- boring_to_beautiful/step_03/pubspec.yaml | 4 +- boring_to_beautiful/step_03/web/index.html | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 140 +++++++++--------- .../step_04/linux/CMakeLists.txt | 23 +-- .../step_04/linux/my_application.cc | 124 ---------------- .../step_04/linux/runner/CMakeLists.txt | 26 ++++ .../step_04/linux/{ => runner}/main.cc | 0 .../step_04/linux/runner/my_application.cc | 130 ++++++++++++++++ .../linux/{ => runner}/my_application.h | 0 .../macos/Runner.xcodeproj/project.pbxproj | 112 +++++++------- boring_to_beautiful/step_04/pubspec.yaml | 4 +- boring_to_beautiful/step_04/web/index.html | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 140 +++++++++--------- .../step_05/linux/CMakeLists.txt | 23 +-- .../step_05/linux/my_application.cc | 124 ---------------- .../step_05/linux/runner/CMakeLists.txt | 26 ++++ .../step_05/linux/{ => runner}/main.cc | 0 .../step_05/linux/runner/my_application.cc | 130 ++++++++++++++++ .../linux/{ => runner}/my_application.h | 0 .../macos/Runner.xcodeproj/project.pbxproj | 112 +++++++------- boring_to_beautiful/step_05/pubspec.yaml | 4 +- boring_to_beautiful/step_05/web/index.html | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 140 +++++++++--------- .../step_06/linux/CMakeLists.txt | 23 +-- .../step_06/linux/my_application.cc | 124 ---------------- .../step_06/linux/runner/CMakeLists.txt | 26 ++++ .../step_06/linux/{ => runner}/main.cc | 0 .../step_06/linux/runner/my_application.cc | 130 ++++++++++++++++ .../linux/{ => runner}/my_application.h | 0 .../macos/Runner.xcodeproj/project.pbxproj | 112 +++++++------- boring_to_beautiful/step_06/pubspec.yaml | 4 +- boring_to_beautiful/step_06/web/index.html | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 140 +++++++++--------- .../step_07/linux/CMakeLists.txt | 23 +-- .../step_07/linux/my_application.cc | 124 ---------------- .../step_07/linux/runner/CMakeLists.txt | 26 ++++ .../step_07/linux/{ => runner}/main.cc | 0 .../step_07/linux/runner/my_application.cc | 130 ++++++++++++++++ .../linux/{ => runner}/my_application.h | 0 .../macos/Runner.xcodeproj/project.pbxproj | 112 +++++++------- boring_to_beautiful/step_07/pubspec.yaml | 4 +- boring_to_beautiful/step_07/web/index.html | 2 +- 76 files changed, 1808 insertions(+), 1688 deletions(-) create mode 100644 boring_to_beautiful/final/linux/runner/CMakeLists.txt rename boring_to_beautiful/final/linux/{ => runner}/main.cc (100%) rename boring_to_beautiful/final/linux/{ => runner}/my_application.cc (93%) rename boring_to_beautiful/final/linux/{ => runner}/my_application.h (100%) create mode 100644 boring_to_beautiful/step_01/linux/runner/CMakeLists.txt rename boring_to_beautiful/step_01/linux/{ => runner}/main.cc (100%) rename boring_to_beautiful/step_01/linux/{ => runner}/my_application.cc (93%) rename boring_to_beautiful/step_01/linux/{ => runner}/my_application.h (100%) create mode 100644 boring_to_beautiful/step_02/linux/runner/CMakeLists.txt rename boring_to_beautiful/step_02/linux/{ => runner}/main.cc (100%) rename boring_to_beautiful/step_02/linux/{ => runner}/my_application.cc (93%) rename boring_to_beautiful/step_02/linux/{ => runner}/my_application.h (100%) create mode 100644 boring_to_beautiful/step_03/linux/runner/CMakeLists.txt rename boring_to_beautiful/step_03/linux/{ => runner}/main.cc (100%) rename boring_to_beautiful/step_03/linux/{ => runner}/my_application.cc (93%) rename boring_to_beautiful/step_03/linux/{ => runner}/my_application.h (100%) delete mode 100644 boring_to_beautiful/step_04/linux/my_application.cc create mode 100644 boring_to_beautiful/step_04/linux/runner/CMakeLists.txt rename boring_to_beautiful/step_04/linux/{ => runner}/main.cc (100%) create mode 100644 boring_to_beautiful/step_04/linux/runner/my_application.cc rename boring_to_beautiful/step_04/linux/{ => runner}/my_application.h (100%) delete mode 100644 boring_to_beautiful/step_05/linux/my_application.cc create mode 100644 boring_to_beautiful/step_05/linux/runner/CMakeLists.txt rename boring_to_beautiful/step_05/linux/{ => runner}/main.cc (100%) create mode 100644 boring_to_beautiful/step_05/linux/runner/my_application.cc rename boring_to_beautiful/step_05/linux/{ => runner}/my_application.h (100%) delete mode 100644 boring_to_beautiful/step_06/linux/my_application.cc create mode 100644 boring_to_beautiful/step_06/linux/runner/CMakeLists.txt rename boring_to_beautiful/step_06/linux/{ => runner}/main.cc (100%) create mode 100644 boring_to_beautiful/step_06/linux/runner/my_application.cc rename boring_to_beautiful/step_06/linux/{ => runner}/my_application.h (100%) delete mode 100644 boring_to_beautiful/step_07/linux/my_application.cc create mode 100644 boring_to_beautiful/step_07/linux/runner/CMakeLists.txt rename boring_to_beautiful/step_07/linux/{ => runner}/main.cc (100%) create mode 100644 boring_to_beautiful/step_07/linux/runner/my_application.cc rename boring_to_beautiful/step_07/linux/{ => runner}/my_application.h (100%) diff --git a/boring_to_beautiful/final/ios/Runner.xcodeproj/project.pbxproj b/boring_to_beautiful/final/ios/Runner.xcodeproj/project.pbxproj index d33a503139..8c24a73146 100644 --- a/boring_to_beautiful/final/ios/Runner.xcodeproj/project.pbxproj +++ b/boring_to_beautiful/final/ios/Runner.xcodeproj/project.pbxproj @@ -10,12 +10,12 @@ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; - 49381EA0685B1F13BE864379 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CB41BC21C7A12C73E18A4BD4 /* Pods_RunnerTests.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - C0064E05A4506D109FC14284 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FF179308D1EFBD41B1CD1303 /* Pods_Runner.framework */; }; + 9B56D0E6D2220ABAA3DCF805 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 66AE42AB618EEF74EA35FAFF /* Pods_Runner.framework */; }; + B589DC7DC7B2D3D3438369C2 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E5357285461CA23D84727993 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -44,14 +44,13 @@ /* Begin PBXFileReference section */ 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 1EC93CE997E0EDD54CB41295 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 2CFC8D32DC8431A771DB05E5 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 458F284D4389ADAFFD7FBAA5 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 46ED109558BB0B52911CEDF2 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - 507F761A690329C8C75A65E2 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 57AE46D9D874FE5FFBB3E047 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 54DBFF5C8D89E736A0167B68 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 5A4EA9B6A5B733A5877FACBC /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 66AE42AB618EEF74EA35FAFF /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; @@ -62,17 +61,18 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - AA54CE87B515BC3531FEEF48 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - CB41BC21C7A12C73E18A4BD4 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - FF179308D1EFBD41B1CD1303 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 9CDB7B42A6F8620995CB6CF2 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + CC18E624AAFABC6DD311F438 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + E5357285461CA23D84727993 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + F5AF1F094CAA852F7BFA8616 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 515422840D633F6AC1588AC7 /* Frameworks */ = { + 1ECFA6AA5DAB14ADED5C4715 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 49381EA0685B1F13BE864379 /* Pods_RunnerTests.framework in Frameworks */, + B589DC7DC7B2D3D3438369C2 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -80,7 +80,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - C0064E05A4506D109FC14284 /* Pods_Runner.framework in Frameworks */, + 9B56D0E6D2220ABAA3DCF805 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -95,15 +95,6 @@ path = RunnerTests; sourceTree = ""; }; - 760CB6645FC65AE3E9230AD2 /* Frameworks */ = { - isa = PBXGroup; - children = ( - FF179308D1EFBD41B1CD1303 /* Pods_Runner.framework */, - CB41BC21C7A12C73E18A4BD4 /* Pods_RunnerTests.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( @@ -122,8 +113,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - BD60B01F7CC3F37BDE902B8C /* Pods */, - 760CB6645FC65AE3E9230AD2 /* Frameworks */, + D3F2C84AD816806F625749C5 /* Pods */, + CB82902E04104E07EF849C18 /* Frameworks */, ); sourceTree = ""; }; @@ -151,15 +142,24 @@ path = Runner; sourceTree = ""; }; - BD60B01F7CC3F37BDE902B8C /* Pods */ = { + CB82902E04104E07EF849C18 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 66AE42AB618EEF74EA35FAFF /* Pods_Runner.framework */, + E5357285461CA23D84727993 /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; + D3F2C84AD816806F625749C5 /* Pods */ = { isa = PBXGroup; children = ( - 507F761A690329C8C75A65E2 /* Pods-Runner.debug.xcconfig */, - 458F284D4389ADAFFD7FBAA5 /* Pods-Runner.release.xcconfig */, - 46ED109558BB0B52911CEDF2 /* Pods-Runner.profile.xcconfig */, - AA54CE87B515BC3531FEEF48 /* Pods-RunnerTests.debug.xcconfig */, - 57AE46D9D874FE5FFBB3E047 /* Pods-RunnerTests.release.xcconfig */, - 1EC93CE997E0EDD54CB41295 /* Pods-RunnerTests.profile.xcconfig */, + 54DBFF5C8D89E736A0167B68 /* Pods-Runner.debug.xcconfig */, + 9CDB7B42A6F8620995CB6CF2 /* Pods-Runner.release.xcconfig */, + CC18E624AAFABC6DD311F438 /* Pods-Runner.profile.xcconfig */, + 5A4EA9B6A5B733A5877FACBC /* Pods-RunnerTests.debug.xcconfig */, + 2CFC8D32DC8431A771DB05E5 /* Pods-RunnerTests.release.xcconfig */, + F5AF1F094CAA852F7BFA8616 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - D56C93D4DD0C64DF97BCE97D /* [CP] Check Pods Manifest.lock */, + 34D2B9D1D9CE963363BA0A5B /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 515422840D633F6AC1588AC7 /* Frameworks */, + 1ECFA6AA5DAB14ADED5C4715 /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 41BD58AF92D87F35673F336C /* [CP] Check Pods Manifest.lock */, + 713F52C5655971916519E71C /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 4BF732A76041B0DBA38F7214 /* [CP] Embed Pods Frameworks */, + 4B094A3D6BA73A5B5C65723A /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -270,45 +270,45 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + 34D2B9D1D9CE963363BA0A5B /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( - "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "Thin Binary"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - 41BD58AF92D87F35673F336C /* [CP] Check Pods Manifest.lock */ = { + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); + name = "Thin Binary"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 4BF732A76041B0DBA38F7214 /* [CP] Embed Pods Frameworks */ = { + 4B094A3D6BA73A5B5C65723A /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -325,42 +325,42 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { + 713F52C5655971916519E71C /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "Run Script"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - D56C93D4DD0C64DF97BCE97D /* [CP] Check Pods Manifest.lock */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( ); + name = "Run Script"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; /* End PBXShellScriptBuildPhase section */ @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = AA54CE87B515BC3531FEEF48 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 5A4EA9B6A5B733A5877FACBC /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 57AE46D9D874FE5FFBB3E047 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 2CFC8D32DC8431A771DB05E5 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 1EC93CE997E0EDD54CB41295 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = F5AF1F094CAA852F7BFA8616 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/boring_to_beautiful/final/linux/CMakeLists.txt b/boring_to_beautiful/final/linux/CMakeLists.txt index 74a8344fa9..0565f6a409 100644 --- a/boring_to_beautiful/final/linux/CMakeLists.txt +++ b/boring_to_beautiful/final/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/boring_to_beautiful/final/linux/runner/CMakeLists.txt b/boring_to_beautiful/final/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/boring_to_beautiful/final/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/boring_to_beautiful/final/linux/main.cc b/boring_to_beautiful/final/linux/runner/main.cc similarity index 100% rename from boring_to_beautiful/final/linux/main.cc rename to boring_to_beautiful/final/linux/runner/main.cc diff --git a/boring_to_beautiful/final/linux/my_application.cc b/boring_to_beautiful/final/linux/runner/my_application.cc similarity index 93% rename from boring_to_beautiful/final/linux/my_application.cc rename to boring_to_beautiful/final/linux/runner/my_application.cc index 59e1394236..f93ba9f71c 100644 --- a/boring_to_beautiful/final/linux/my_application.cc +++ b/boring_to_beautiful/final/linux/runner/my_application.cc @@ -117,6 +117,12 @@ static void my_application_class_init(MyApplicationClass* klass) { static void my_application_init(MyApplication* self) {} MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + return MY_APPLICATION(g_object_new(my_application_get_type(), "application-id", APPLICATION_ID, "flags", G_APPLICATION_NON_UNIQUE, diff --git a/boring_to_beautiful/final/linux/my_application.h b/boring_to_beautiful/final/linux/runner/my_application.h similarity index 100% rename from boring_to_beautiful/final/linux/my_application.h rename to boring_to_beautiful/final/linux/runner/my_application.h diff --git a/boring_to_beautiful/final/macos/Runner.xcodeproj/project.pbxproj b/boring_to_beautiful/final/macos/Runner.xcodeproj/project.pbxproj index 11e7ec7971..934ea98536 100644 --- a/boring_to_beautiful/final/macos/Runner.xcodeproj/project.pbxproj +++ b/boring_to_beautiful/final/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ - 122A14BB17CAE5827A96C600 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E721C61EEA1D01D1541205E2 /* Pods_RunnerTests.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - C0A311100478C3723AF3A1A3 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2B7F6D65CBE030418F0F8AFE /* Pods_Runner.framework */; }; + 7D7A4A5CAEB316CD69FCEFCD /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DBF93DFB67EA7D2AD5967AE4 /* Pods_Runner.framework */; }; + A3110385685B3E3544E9425E /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 14444A669D4E611BC45B0FB6 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,10 +62,7 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 095235CA8E3718CE04BECCFD /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - 1965E0AFE652202B66FE3359 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - 2B7F6D65CBE030418F0F8AFE /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 2BE96204F8153212C1B2FFD5 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 14444A669D4E611BC45B0FB6 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -82,12 +79,15 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; + 4ECA459CDC624519673B0579 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 5BD2C9EEA1CFBEC2C3745D8F /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; + 8A22315681F20849245600B8 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - B1C9C34FAF086E24D95B4FE5 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - B2992FC7568D7321F2EE4E8A /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - DA0493143D84740D445AC807 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - E721C61EEA1D01D1541205E2 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + DBF93DFB67EA7D2AD5967AE4 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + ED098600EDD4C45849C1CA92 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + F432CC14780751D0ECFDA11E /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + F962DA6A47D4A923B2BF1844 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 122A14BB17CAE5827A96C600 /* Pods_RunnerTests.framework in Frameworks */, + A3110385685B3E3544E9425E /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,27 +103,13 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - C0A311100478C3723AF3A1A3 /* Pods_Runner.framework in Frameworks */, + 7D7A4A5CAEB316CD69FCEFCD /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 1B3BB2FE7EC0BD319E6A18A5 /* Pods */ = { - isa = PBXGroup; - children = ( - B1C9C34FAF086E24D95B4FE5 /* Pods-Runner.debug.xcconfig */, - B2992FC7568D7321F2EE4E8A /* Pods-Runner.release.xcconfig */, - DA0493143D84740D445AC807 /* Pods-Runner.profile.xcconfig */, - 2BE96204F8153212C1B2FFD5 /* Pods-RunnerTests.debug.xcconfig */, - 095235CA8E3718CE04BECCFD /* Pods-RunnerTests.release.xcconfig */, - 1965E0AFE652202B66FE3359 /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; 331C80D6294CF71000263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -151,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 1B3BB2FE7EC0BD319E6A18A5 /* Pods */, + 97F435B99F0F5B9104CCDE86 /* Pods */, ); sourceTree = ""; }; @@ -199,11 +185,25 @@ path = Runner; sourceTree = ""; }; + 97F435B99F0F5B9104CCDE86 /* Pods */ = { + isa = PBXGroup; + children = ( + 8A22315681F20849245600B8 /* Pods-Runner.debug.xcconfig */, + ED098600EDD4C45849C1CA92 /* Pods-Runner.release.xcconfig */, + 5BD2C9EEA1CFBEC2C3745D8F /* Pods-Runner.profile.xcconfig */, + F962DA6A47D4A923B2BF1844 /* Pods-RunnerTests.debug.xcconfig */, + 4ECA459CDC624519673B0579 /* Pods-RunnerTests.release.xcconfig */, + F432CC14780751D0ECFDA11E /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - 2B7F6D65CBE030418F0F8AFE /* Pods_Runner.framework */, - E721C61EEA1D01D1541205E2 /* Pods_RunnerTests.framework */, + DBF93DFB67EA7D2AD5967AE4 /* Pods_Runner.framework */, + 14444A669D4E611BC45B0FB6 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 8BBDD854D9E775DA9D2E29E7 /* [CP] Check Pods Manifest.lock */, + B4A4E318F1203470DDF09086 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 8D3EC8A5A25E8C0969226ECA /* [CP] Check Pods Manifest.lock */, + 7D680C9A459DF63FFB6BB961 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 33B24C690BD4B02DCC978698 /* [CP] Embed Pods Frameworks */, + 924BD049CB0C75A05F45C790 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -341,23 +341,6 @@ shellPath = /bin/sh; shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; }; - 33B24C690BD4B02DCC978698 /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; 33CC111E2044C6BF0003C045 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -378,7 +361,7 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 8BBDD854D9E775DA9D2E29E7 /* [CP] Check Pods Manifest.lock */ = { + 7D680C9A459DF63FFB6BB961 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -393,14 +376,31 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 8D3EC8A5A25E8C0969226ECA /* [CP] Check Pods Manifest.lock */ = { + 924BD049CB0C75A05F45C790 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; + B4A4E318F1203470DDF09086 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -415,7 +415,7 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 2BE96204F8153212C1B2FFD5 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = F962DA6A47D4A923B2BF1844 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 095235CA8E3718CE04BECCFD /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 4ECA459CDC624519673B0579 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 1965E0AFE652202B66FE3359 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = F432CC14780751D0ECFDA11E /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/boring_to_beautiful/final/pubspec.yaml b/boring_to_beautiful/final/pubspec.yaml index 6452298e93..0bc88d24c3 100644 --- a/boring_to_beautiful/final/pubspec.yaml +++ b/boring_to_beautiful/final/pubspec.yaml @@ -15,12 +15,12 @@ dependencies: animations: ^2.0.11 collection: ^1.19.0 cupertino_icons: ^1.0.8 - desktop_window: ^0.4.1 + desktop_window: ^0.4.2 dynamic_color: ^1.7.0 english_words: ^4.0.0 flutter_bloc: ^8.1.6 freezed_annotation: ^2.4.4 - go_router: ^14.3.0 + go_router: ^14.5.0 material_color_utilities: any universal_platform: ^1.1.0 url_launcher: ^6.3.1 diff --git a/boring_to_beautiful/final/web/index.html b/boring_to_beautiful/final/web/index.html index 0a8bd1ab80..e0a0abbbbf 100644 --- a/boring_to_beautiful/final/web/index.html +++ b/boring_to_beautiful/final/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/boring_to_beautiful/step_01/ios/Runner.xcodeproj/project.pbxproj b/boring_to_beautiful/step_01/ios/Runner.xcodeproj/project.pbxproj index d33a503139..8c24a73146 100644 --- a/boring_to_beautiful/step_01/ios/Runner.xcodeproj/project.pbxproj +++ b/boring_to_beautiful/step_01/ios/Runner.xcodeproj/project.pbxproj @@ -10,12 +10,12 @@ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; - 49381EA0685B1F13BE864379 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CB41BC21C7A12C73E18A4BD4 /* Pods_RunnerTests.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - C0064E05A4506D109FC14284 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FF179308D1EFBD41B1CD1303 /* Pods_Runner.framework */; }; + 9B56D0E6D2220ABAA3DCF805 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 66AE42AB618EEF74EA35FAFF /* Pods_Runner.framework */; }; + B589DC7DC7B2D3D3438369C2 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E5357285461CA23D84727993 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -44,14 +44,13 @@ /* Begin PBXFileReference section */ 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 1EC93CE997E0EDD54CB41295 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 2CFC8D32DC8431A771DB05E5 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 458F284D4389ADAFFD7FBAA5 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 46ED109558BB0B52911CEDF2 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - 507F761A690329C8C75A65E2 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 57AE46D9D874FE5FFBB3E047 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 54DBFF5C8D89E736A0167B68 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 5A4EA9B6A5B733A5877FACBC /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 66AE42AB618EEF74EA35FAFF /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; @@ -62,17 +61,18 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - AA54CE87B515BC3531FEEF48 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - CB41BC21C7A12C73E18A4BD4 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - FF179308D1EFBD41B1CD1303 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 9CDB7B42A6F8620995CB6CF2 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + CC18E624AAFABC6DD311F438 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + E5357285461CA23D84727993 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + F5AF1F094CAA852F7BFA8616 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 515422840D633F6AC1588AC7 /* Frameworks */ = { + 1ECFA6AA5DAB14ADED5C4715 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 49381EA0685B1F13BE864379 /* Pods_RunnerTests.framework in Frameworks */, + B589DC7DC7B2D3D3438369C2 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -80,7 +80,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - C0064E05A4506D109FC14284 /* Pods_Runner.framework in Frameworks */, + 9B56D0E6D2220ABAA3DCF805 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -95,15 +95,6 @@ path = RunnerTests; sourceTree = ""; }; - 760CB6645FC65AE3E9230AD2 /* Frameworks */ = { - isa = PBXGroup; - children = ( - FF179308D1EFBD41B1CD1303 /* Pods_Runner.framework */, - CB41BC21C7A12C73E18A4BD4 /* Pods_RunnerTests.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( @@ -122,8 +113,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - BD60B01F7CC3F37BDE902B8C /* Pods */, - 760CB6645FC65AE3E9230AD2 /* Frameworks */, + D3F2C84AD816806F625749C5 /* Pods */, + CB82902E04104E07EF849C18 /* Frameworks */, ); sourceTree = ""; }; @@ -151,15 +142,24 @@ path = Runner; sourceTree = ""; }; - BD60B01F7CC3F37BDE902B8C /* Pods */ = { + CB82902E04104E07EF849C18 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 66AE42AB618EEF74EA35FAFF /* Pods_Runner.framework */, + E5357285461CA23D84727993 /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; + D3F2C84AD816806F625749C5 /* Pods */ = { isa = PBXGroup; children = ( - 507F761A690329C8C75A65E2 /* Pods-Runner.debug.xcconfig */, - 458F284D4389ADAFFD7FBAA5 /* Pods-Runner.release.xcconfig */, - 46ED109558BB0B52911CEDF2 /* Pods-Runner.profile.xcconfig */, - AA54CE87B515BC3531FEEF48 /* Pods-RunnerTests.debug.xcconfig */, - 57AE46D9D874FE5FFBB3E047 /* Pods-RunnerTests.release.xcconfig */, - 1EC93CE997E0EDD54CB41295 /* Pods-RunnerTests.profile.xcconfig */, + 54DBFF5C8D89E736A0167B68 /* Pods-Runner.debug.xcconfig */, + 9CDB7B42A6F8620995CB6CF2 /* Pods-Runner.release.xcconfig */, + CC18E624AAFABC6DD311F438 /* Pods-Runner.profile.xcconfig */, + 5A4EA9B6A5B733A5877FACBC /* Pods-RunnerTests.debug.xcconfig */, + 2CFC8D32DC8431A771DB05E5 /* Pods-RunnerTests.release.xcconfig */, + F5AF1F094CAA852F7BFA8616 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - D56C93D4DD0C64DF97BCE97D /* [CP] Check Pods Manifest.lock */, + 34D2B9D1D9CE963363BA0A5B /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 515422840D633F6AC1588AC7 /* Frameworks */, + 1ECFA6AA5DAB14ADED5C4715 /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 41BD58AF92D87F35673F336C /* [CP] Check Pods Manifest.lock */, + 713F52C5655971916519E71C /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 4BF732A76041B0DBA38F7214 /* [CP] Embed Pods Frameworks */, + 4B094A3D6BA73A5B5C65723A /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -270,45 +270,45 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + 34D2B9D1D9CE963363BA0A5B /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( - "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "Thin Binary"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - 41BD58AF92D87F35673F336C /* [CP] Check Pods Manifest.lock */ = { + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); + name = "Thin Binary"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 4BF732A76041B0DBA38F7214 /* [CP] Embed Pods Frameworks */ = { + 4B094A3D6BA73A5B5C65723A /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -325,42 +325,42 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { + 713F52C5655971916519E71C /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "Run Script"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - D56C93D4DD0C64DF97BCE97D /* [CP] Check Pods Manifest.lock */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( ); + name = "Run Script"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; /* End PBXShellScriptBuildPhase section */ @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = AA54CE87B515BC3531FEEF48 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 5A4EA9B6A5B733A5877FACBC /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 57AE46D9D874FE5FFBB3E047 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 2CFC8D32DC8431A771DB05E5 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 1EC93CE997E0EDD54CB41295 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = F5AF1F094CAA852F7BFA8616 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/boring_to_beautiful/step_01/linux/CMakeLists.txt b/boring_to_beautiful/step_01/linux/CMakeLists.txt index 74a8344fa9..0565f6a409 100644 --- a/boring_to_beautiful/step_01/linux/CMakeLists.txt +++ b/boring_to_beautiful/step_01/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/boring_to_beautiful/step_01/linux/runner/CMakeLists.txt b/boring_to_beautiful/step_01/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/boring_to_beautiful/step_01/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/boring_to_beautiful/step_01/linux/main.cc b/boring_to_beautiful/step_01/linux/runner/main.cc similarity index 100% rename from boring_to_beautiful/step_01/linux/main.cc rename to boring_to_beautiful/step_01/linux/runner/main.cc diff --git a/boring_to_beautiful/step_01/linux/my_application.cc b/boring_to_beautiful/step_01/linux/runner/my_application.cc similarity index 93% rename from boring_to_beautiful/step_01/linux/my_application.cc rename to boring_to_beautiful/step_01/linux/runner/my_application.cc index 59e1394236..f93ba9f71c 100644 --- a/boring_to_beautiful/step_01/linux/my_application.cc +++ b/boring_to_beautiful/step_01/linux/runner/my_application.cc @@ -117,6 +117,12 @@ static void my_application_class_init(MyApplicationClass* klass) { static void my_application_init(MyApplication* self) {} MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + return MY_APPLICATION(g_object_new(my_application_get_type(), "application-id", APPLICATION_ID, "flags", G_APPLICATION_NON_UNIQUE, diff --git a/boring_to_beautiful/step_01/linux/my_application.h b/boring_to_beautiful/step_01/linux/runner/my_application.h similarity index 100% rename from boring_to_beautiful/step_01/linux/my_application.h rename to boring_to_beautiful/step_01/linux/runner/my_application.h diff --git a/boring_to_beautiful/step_01/macos/Runner.xcodeproj/project.pbxproj b/boring_to_beautiful/step_01/macos/Runner.xcodeproj/project.pbxproj index 11e7ec7971..934ea98536 100644 --- a/boring_to_beautiful/step_01/macos/Runner.xcodeproj/project.pbxproj +++ b/boring_to_beautiful/step_01/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ - 122A14BB17CAE5827A96C600 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E721C61EEA1D01D1541205E2 /* Pods_RunnerTests.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - C0A311100478C3723AF3A1A3 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2B7F6D65CBE030418F0F8AFE /* Pods_Runner.framework */; }; + 7D7A4A5CAEB316CD69FCEFCD /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DBF93DFB67EA7D2AD5967AE4 /* Pods_Runner.framework */; }; + A3110385685B3E3544E9425E /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 14444A669D4E611BC45B0FB6 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,10 +62,7 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 095235CA8E3718CE04BECCFD /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - 1965E0AFE652202B66FE3359 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - 2B7F6D65CBE030418F0F8AFE /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 2BE96204F8153212C1B2FFD5 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 14444A669D4E611BC45B0FB6 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -82,12 +79,15 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; + 4ECA459CDC624519673B0579 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 5BD2C9EEA1CFBEC2C3745D8F /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; + 8A22315681F20849245600B8 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - B1C9C34FAF086E24D95B4FE5 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - B2992FC7568D7321F2EE4E8A /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - DA0493143D84740D445AC807 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - E721C61EEA1D01D1541205E2 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + DBF93DFB67EA7D2AD5967AE4 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + ED098600EDD4C45849C1CA92 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + F432CC14780751D0ECFDA11E /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + F962DA6A47D4A923B2BF1844 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 122A14BB17CAE5827A96C600 /* Pods_RunnerTests.framework in Frameworks */, + A3110385685B3E3544E9425E /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,27 +103,13 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - C0A311100478C3723AF3A1A3 /* Pods_Runner.framework in Frameworks */, + 7D7A4A5CAEB316CD69FCEFCD /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 1B3BB2FE7EC0BD319E6A18A5 /* Pods */ = { - isa = PBXGroup; - children = ( - B1C9C34FAF086E24D95B4FE5 /* Pods-Runner.debug.xcconfig */, - B2992FC7568D7321F2EE4E8A /* Pods-Runner.release.xcconfig */, - DA0493143D84740D445AC807 /* Pods-Runner.profile.xcconfig */, - 2BE96204F8153212C1B2FFD5 /* Pods-RunnerTests.debug.xcconfig */, - 095235CA8E3718CE04BECCFD /* Pods-RunnerTests.release.xcconfig */, - 1965E0AFE652202B66FE3359 /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; 331C80D6294CF71000263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -151,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 1B3BB2FE7EC0BD319E6A18A5 /* Pods */, + 97F435B99F0F5B9104CCDE86 /* Pods */, ); sourceTree = ""; }; @@ -199,11 +185,25 @@ path = Runner; sourceTree = ""; }; + 97F435B99F0F5B9104CCDE86 /* Pods */ = { + isa = PBXGroup; + children = ( + 8A22315681F20849245600B8 /* Pods-Runner.debug.xcconfig */, + ED098600EDD4C45849C1CA92 /* Pods-Runner.release.xcconfig */, + 5BD2C9EEA1CFBEC2C3745D8F /* Pods-Runner.profile.xcconfig */, + F962DA6A47D4A923B2BF1844 /* Pods-RunnerTests.debug.xcconfig */, + 4ECA459CDC624519673B0579 /* Pods-RunnerTests.release.xcconfig */, + F432CC14780751D0ECFDA11E /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - 2B7F6D65CBE030418F0F8AFE /* Pods_Runner.framework */, - E721C61EEA1D01D1541205E2 /* Pods_RunnerTests.framework */, + DBF93DFB67EA7D2AD5967AE4 /* Pods_Runner.framework */, + 14444A669D4E611BC45B0FB6 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 8BBDD854D9E775DA9D2E29E7 /* [CP] Check Pods Manifest.lock */, + B4A4E318F1203470DDF09086 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 8D3EC8A5A25E8C0969226ECA /* [CP] Check Pods Manifest.lock */, + 7D680C9A459DF63FFB6BB961 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 33B24C690BD4B02DCC978698 /* [CP] Embed Pods Frameworks */, + 924BD049CB0C75A05F45C790 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -341,23 +341,6 @@ shellPath = /bin/sh; shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; }; - 33B24C690BD4B02DCC978698 /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; 33CC111E2044C6BF0003C045 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -378,7 +361,7 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 8BBDD854D9E775DA9D2E29E7 /* [CP] Check Pods Manifest.lock */ = { + 7D680C9A459DF63FFB6BB961 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -393,14 +376,31 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 8D3EC8A5A25E8C0969226ECA /* [CP] Check Pods Manifest.lock */ = { + 924BD049CB0C75A05F45C790 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; + B4A4E318F1203470DDF09086 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -415,7 +415,7 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 2BE96204F8153212C1B2FFD5 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = F962DA6A47D4A923B2BF1844 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 095235CA8E3718CE04BECCFD /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 4ECA459CDC624519673B0579 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 1965E0AFE652202B66FE3359 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = F432CC14780751D0ECFDA11E /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/boring_to_beautiful/step_01/pubspec.yaml b/boring_to_beautiful/step_01/pubspec.yaml index 16e4075129..e6b25dc809 100644 --- a/boring_to_beautiful/step_01/pubspec.yaml +++ b/boring_to_beautiful/step_01/pubspec.yaml @@ -15,12 +15,12 @@ dependencies: animations: ^2.0.11 collection: ^1.19.0 cupertino_icons: ^1.0.8 - desktop_window: ^0.4.1 + desktop_window: ^0.4.2 dynamic_color: ^1.7.0 english_words: ^4.0.0 flutter_bloc: ^8.1.6 freezed_annotation: ^2.4.4 - go_router: ^14.3.0 + go_router: ^14.5.0 material_color_utilities: any universal_platform: ^1.1.0 url_launcher: ^6.3.1 diff --git a/boring_to_beautiful/step_01/web/index.html b/boring_to_beautiful/step_01/web/index.html index 0a8bd1ab80..e0a0abbbbf 100644 --- a/boring_to_beautiful/step_01/web/index.html +++ b/boring_to_beautiful/step_01/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/boring_to_beautiful/step_02/ios/Runner.xcodeproj/project.pbxproj b/boring_to_beautiful/step_02/ios/Runner.xcodeproj/project.pbxproj index d33a503139..8c24a73146 100644 --- a/boring_to_beautiful/step_02/ios/Runner.xcodeproj/project.pbxproj +++ b/boring_to_beautiful/step_02/ios/Runner.xcodeproj/project.pbxproj @@ -10,12 +10,12 @@ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; - 49381EA0685B1F13BE864379 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CB41BC21C7A12C73E18A4BD4 /* Pods_RunnerTests.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - C0064E05A4506D109FC14284 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FF179308D1EFBD41B1CD1303 /* Pods_Runner.framework */; }; + 9B56D0E6D2220ABAA3DCF805 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 66AE42AB618EEF74EA35FAFF /* Pods_Runner.framework */; }; + B589DC7DC7B2D3D3438369C2 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E5357285461CA23D84727993 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -44,14 +44,13 @@ /* Begin PBXFileReference section */ 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 1EC93CE997E0EDD54CB41295 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 2CFC8D32DC8431A771DB05E5 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 458F284D4389ADAFFD7FBAA5 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 46ED109558BB0B52911CEDF2 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - 507F761A690329C8C75A65E2 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 57AE46D9D874FE5FFBB3E047 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 54DBFF5C8D89E736A0167B68 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 5A4EA9B6A5B733A5877FACBC /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 66AE42AB618EEF74EA35FAFF /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; @@ -62,17 +61,18 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - AA54CE87B515BC3531FEEF48 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - CB41BC21C7A12C73E18A4BD4 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - FF179308D1EFBD41B1CD1303 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 9CDB7B42A6F8620995CB6CF2 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + CC18E624AAFABC6DD311F438 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + E5357285461CA23D84727993 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + F5AF1F094CAA852F7BFA8616 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 515422840D633F6AC1588AC7 /* Frameworks */ = { + 1ECFA6AA5DAB14ADED5C4715 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 49381EA0685B1F13BE864379 /* Pods_RunnerTests.framework in Frameworks */, + B589DC7DC7B2D3D3438369C2 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -80,7 +80,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - C0064E05A4506D109FC14284 /* Pods_Runner.framework in Frameworks */, + 9B56D0E6D2220ABAA3DCF805 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -95,15 +95,6 @@ path = RunnerTests; sourceTree = ""; }; - 760CB6645FC65AE3E9230AD2 /* Frameworks */ = { - isa = PBXGroup; - children = ( - FF179308D1EFBD41B1CD1303 /* Pods_Runner.framework */, - CB41BC21C7A12C73E18A4BD4 /* Pods_RunnerTests.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( @@ -122,8 +113,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - BD60B01F7CC3F37BDE902B8C /* Pods */, - 760CB6645FC65AE3E9230AD2 /* Frameworks */, + D3F2C84AD816806F625749C5 /* Pods */, + CB82902E04104E07EF849C18 /* Frameworks */, ); sourceTree = ""; }; @@ -151,15 +142,24 @@ path = Runner; sourceTree = ""; }; - BD60B01F7CC3F37BDE902B8C /* Pods */ = { + CB82902E04104E07EF849C18 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 66AE42AB618EEF74EA35FAFF /* Pods_Runner.framework */, + E5357285461CA23D84727993 /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; + D3F2C84AD816806F625749C5 /* Pods */ = { isa = PBXGroup; children = ( - 507F761A690329C8C75A65E2 /* Pods-Runner.debug.xcconfig */, - 458F284D4389ADAFFD7FBAA5 /* Pods-Runner.release.xcconfig */, - 46ED109558BB0B52911CEDF2 /* Pods-Runner.profile.xcconfig */, - AA54CE87B515BC3531FEEF48 /* Pods-RunnerTests.debug.xcconfig */, - 57AE46D9D874FE5FFBB3E047 /* Pods-RunnerTests.release.xcconfig */, - 1EC93CE997E0EDD54CB41295 /* Pods-RunnerTests.profile.xcconfig */, + 54DBFF5C8D89E736A0167B68 /* Pods-Runner.debug.xcconfig */, + 9CDB7B42A6F8620995CB6CF2 /* Pods-Runner.release.xcconfig */, + CC18E624AAFABC6DD311F438 /* Pods-Runner.profile.xcconfig */, + 5A4EA9B6A5B733A5877FACBC /* Pods-RunnerTests.debug.xcconfig */, + 2CFC8D32DC8431A771DB05E5 /* Pods-RunnerTests.release.xcconfig */, + F5AF1F094CAA852F7BFA8616 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - D56C93D4DD0C64DF97BCE97D /* [CP] Check Pods Manifest.lock */, + 34D2B9D1D9CE963363BA0A5B /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 515422840D633F6AC1588AC7 /* Frameworks */, + 1ECFA6AA5DAB14ADED5C4715 /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 41BD58AF92D87F35673F336C /* [CP] Check Pods Manifest.lock */, + 713F52C5655971916519E71C /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 4BF732A76041B0DBA38F7214 /* [CP] Embed Pods Frameworks */, + 4B094A3D6BA73A5B5C65723A /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -270,45 +270,45 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + 34D2B9D1D9CE963363BA0A5B /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( - "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "Thin Binary"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - 41BD58AF92D87F35673F336C /* [CP] Check Pods Manifest.lock */ = { + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); + name = "Thin Binary"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 4BF732A76041B0DBA38F7214 /* [CP] Embed Pods Frameworks */ = { + 4B094A3D6BA73A5B5C65723A /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -325,42 +325,42 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { + 713F52C5655971916519E71C /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "Run Script"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - D56C93D4DD0C64DF97BCE97D /* [CP] Check Pods Manifest.lock */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( ); + name = "Run Script"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; /* End PBXShellScriptBuildPhase section */ @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = AA54CE87B515BC3531FEEF48 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 5A4EA9B6A5B733A5877FACBC /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 57AE46D9D874FE5FFBB3E047 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 2CFC8D32DC8431A771DB05E5 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 1EC93CE997E0EDD54CB41295 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = F5AF1F094CAA852F7BFA8616 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/boring_to_beautiful/step_02/linux/CMakeLists.txt b/boring_to_beautiful/step_02/linux/CMakeLists.txt index 74a8344fa9..0565f6a409 100644 --- a/boring_to_beautiful/step_02/linux/CMakeLists.txt +++ b/boring_to_beautiful/step_02/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/boring_to_beautiful/step_02/linux/runner/CMakeLists.txt b/boring_to_beautiful/step_02/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/boring_to_beautiful/step_02/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/boring_to_beautiful/step_02/linux/main.cc b/boring_to_beautiful/step_02/linux/runner/main.cc similarity index 100% rename from boring_to_beautiful/step_02/linux/main.cc rename to boring_to_beautiful/step_02/linux/runner/main.cc diff --git a/boring_to_beautiful/step_02/linux/my_application.cc b/boring_to_beautiful/step_02/linux/runner/my_application.cc similarity index 93% rename from boring_to_beautiful/step_02/linux/my_application.cc rename to boring_to_beautiful/step_02/linux/runner/my_application.cc index 59e1394236..f93ba9f71c 100644 --- a/boring_to_beautiful/step_02/linux/my_application.cc +++ b/boring_to_beautiful/step_02/linux/runner/my_application.cc @@ -117,6 +117,12 @@ static void my_application_class_init(MyApplicationClass* klass) { static void my_application_init(MyApplication* self) {} MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + return MY_APPLICATION(g_object_new(my_application_get_type(), "application-id", APPLICATION_ID, "flags", G_APPLICATION_NON_UNIQUE, diff --git a/boring_to_beautiful/step_02/linux/my_application.h b/boring_to_beautiful/step_02/linux/runner/my_application.h similarity index 100% rename from boring_to_beautiful/step_02/linux/my_application.h rename to boring_to_beautiful/step_02/linux/runner/my_application.h diff --git a/boring_to_beautiful/step_02/macos/Runner.xcodeproj/project.pbxproj b/boring_to_beautiful/step_02/macos/Runner.xcodeproj/project.pbxproj index 11e7ec7971..934ea98536 100644 --- a/boring_to_beautiful/step_02/macos/Runner.xcodeproj/project.pbxproj +++ b/boring_to_beautiful/step_02/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ - 122A14BB17CAE5827A96C600 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E721C61EEA1D01D1541205E2 /* Pods_RunnerTests.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - C0A311100478C3723AF3A1A3 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2B7F6D65CBE030418F0F8AFE /* Pods_Runner.framework */; }; + 7D7A4A5CAEB316CD69FCEFCD /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DBF93DFB67EA7D2AD5967AE4 /* Pods_Runner.framework */; }; + A3110385685B3E3544E9425E /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 14444A669D4E611BC45B0FB6 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,10 +62,7 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 095235CA8E3718CE04BECCFD /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - 1965E0AFE652202B66FE3359 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - 2B7F6D65CBE030418F0F8AFE /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 2BE96204F8153212C1B2FFD5 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 14444A669D4E611BC45B0FB6 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -82,12 +79,15 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; + 4ECA459CDC624519673B0579 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 5BD2C9EEA1CFBEC2C3745D8F /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; + 8A22315681F20849245600B8 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - B1C9C34FAF086E24D95B4FE5 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - B2992FC7568D7321F2EE4E8A /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - DA0493143D84740D445AC807 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - E721C61EEA1D01D1541205E2 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + DBF93DFB67EA7D2AD5967AE4 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + ED098600EDD4C45849C1CA92 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + F432CC14780751D0ECFDA11E /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + F962DA6A47D4A923B2BF1844 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 122A14BB17CAE5827A96C600 /* Pods_RunnerTests.framework in Frameworks */, + A3110385685B3E3544E9425E /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,27 +103,13 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - C0A311100478C3723AF3A1A3 /* Pods_Runner.framework in Frameworks */, + 7D7A4A5CAEB316CD69FCEFCD /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 1B3BB2FE7EC0BD319E6A18A5 /* Pods */ = { - isa = PBXGroup; - children = ( - B1C9C34FAF086E24D95B4FE5 /* Pods-Runner.debug.xcconfig */, - B2992FC7568D7321F2EE4E8A /* Pods-Runner.release.xcconfig */, - DA0493143D84740D445AC807 /* Pods-Runner.profile.xcconfig */, - 2BE96204F8153212C1B2FFD5 /* Pods-RunnerTests.debug.xcconfig */, - 095235CA8E3718CE04BECCFD /* Pods-RunnerTests.release.xcconfig */, - 1965E0AFE652202B66FE3359 /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; 331C80D6294CF71000263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -151,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 1B3BB2FE7EC0BD319E6A18A5 /* Pods */, + 97F435B99F0F5B9104CCDE86 /* Pods */, ); sourceTree = ""; }; @@ -199,11 +185,25 @@ path = Runner; sourceTree = ""; }; + 97F435B99F0F5B9104CCDE86 /* Pods */ = { + isa = PBXGroup; + children = ( + 8A22315681F20849245600B8 /* Pods-Runner.debug.xcconfig */, + ED098600EDD4C45849C1CA92 /* Pods-Runner.release.xcconfig */, + 5BD2C9EEA1CFBEC2C3745D8F /* Pods-Runner.profile.xcconfig */, + F962DA6A47D4A923B2BF1844 /* Pods-RunnerTests.debug.xcconfig */, + 4ECA459CDC624519673B0579 /* Pods-RunnerTests.release.xcconfig */, + F432CC14780751D0ECFDA11E /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - 2B7F6D65CBE030418F0F8AFE /* Pods_Runner.framework */, - E721C61EEA1D01D1541205E2 /* Pods_RunnerTests.framework */, + DBF93DFB67EA7D2AD5967AE4 /* Pods_Runner.framework */, + 14444A669D4E611BC45B0FB6 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 8BBDD854D9E775DA9D2E29E7 /* [CP] Check Pods Manifest.lock */, + B4A4E318F1203470DDF09086 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 8D3EC8A5A25E8C0969226ECA /* [CP] Check Pods Manifest.lock */, + 7D680C9A459DF63FFB6BB961 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 33B24C690BD4B02DCC978698 /* [CP] Embed Pods Frameworks */, + 924BD049CB0C75A05F45C790 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -341,23 +341,6 @@ shellPath = /bin/sh; shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; }; - 33B24C690BD4B02DCC978698 /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; 33CC111E2044C6BF0003C045 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -378,7 +361,7 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 8BBDD854D9E775DA9D2E29E7 /* [CP] Check Pods Manifest.lock */ = { + 7D680C9A459DF63FFB6BB961 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -393,14 +376,31 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 8D3EC8A5A25E8C0969226ECA /* [CP] Check Pods Manifest.lock */ = { + 924BD049CB0C75A05F45C790 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; + B4A4E318F1203470DDF09086 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -415,7 +415,7 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 2BE96204F8153212C1B2FFD5 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = F962DA6A47D4A923B2BF1844 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 095235CA8E3718CE04BECCFD /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 4ECA459CDC624519673B0579 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 1965E0AFE652202B66FE3359 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = F432CC14780751D0ECFDA11E /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/boring_to_beautiful/step_02/pubspec.yaml b/boring_to_beautiful/step_02/pubspec.yaml index 16e4075129..e6b25dc809 100644 --- a/boring_to_beautiful/step_02/pubspec.yaml +++ b/boring_to_beautiful/step_02/pubspec.yaml @@ -15,12 +15,12 @@ dependencies: animations: ^2.0.11 collection: ^1.19.0 cupertino_icons: ^1.0.8 - desktop_window: ^0.4.1 + desktop_window: ^0.4.2 dynamic_color: ^1.7.0 english_words: ^4.0.0 flutter_bloc: ^8.1.6 freezed_annotation: ^2.4.4 - go_router: ^14.3.0 + go_router: ^14.5.0 material_color_utilities: any universal_platform: ^1.1.0 url_launcher: ^6.3.1 diff --git a/boring_to_beautiful/step_02/web/index.html b/boring_to_beautiful/step_02/web/index.html index 0a8bd1ab80..e0a0abbbbf 100644 --- a/boring_to_beautiful/step_02/web/index.html +++ b/boring_to_beautiful/step_02/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/boring_to_beautiful/step_03/ios/Runner.xcodeproj/project.pbxproj b/boring_to_beautiful/step_03/ios/Runner.xcodeproj/project.pbxproj index d33a503139..8c24a73146 100644 --- a/boring_to_beautiful/step_03/ios/Runner.xcodeproj/project.pbxproj +++ b/boring_to_beautiful/step_03/ios/Runner.xcodeproj/project.pbxproj @@ -10,12 +10,12 @@ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; - 49381EA0685B1F13BE864379 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CB41BC21C7A12C73E18A4BD4 /* Pods_RunnerTests.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - C0064E05A4506D109FC14284 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FF179308D1EFBD41B1CD1303 /* Pods_Runner.framework */; }; + 9B56D0E6D2220ABAA3DCF805 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 66AE42AB618EEF74EA35FAFF /* Pods_Runner.framework */; }; + B589DC7DC7B2D3D3438369C2 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E5357285461CA23D84727993 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -44,14 +44,13 @@ /* Begin PBXFileReference section */ 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 1EC93CE997E0EDD54CB41295 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 2CFC8D32DC8431A771DB05E5 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 458F284D4389ADAFFD7FBAA5 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 46ED109558BB0B52911CEDF2 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - 507F761A690329C8C75A65E2 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 57AE46D9D874FE5FFBB3E047 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 54DBFF5C8D89E736A0167B68 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 5A4EA9B6A5B733A5877FACBC /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 66AE42AB618EEF74EA35FAFF /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; @@ -62,17 +61,18 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - AA54CE87B515BC3531FEEF48 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - CB41BC21C7A12C73E18A4BD4 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - FF179308D1EFBD41B1CD1303 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 9CDB7B42A6F8620995CB6CF2 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + CC18E624AAFABC6DD311F438 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + E5357285461CA23D84727993 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + F5AF1F094CAA852F7BFA8616 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 515422840D633F6AC1588AC7 /* Frameworks */ = { + 1ECFA6AA5DAB14ADED5C4715 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 49381EA0685B1F13BE864379 /* Pods_RunnerTests.framework in Frameworks */, + B589DC7DC7B2D3D3438369C2 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -80,7 +80,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - C0064E05A4506D109FC14284 /* Pods_Runner.framework in Frameworks */, + 9B56D0E6D2220ABAA3DCF805 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -95,15 +95,6 @@ path = RunnerTests; sourceTree = ""; }; - 760CB6645FC65AE3E9230AD2 /* Frameworks */ = { - isa = PBXGroup; - children = ( - FF179308D1EFBD41B1CD1303 /* Pods_Runner.framework */, - CB41BC21C7A12C73E18A4BD4 /* Pods_RunnerTests.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( @@ -122,8 +113,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - BD60B01F7CC3F37BDE902B8C /* Pods */, - 760CB6645FC65AE3E9230AD2 /* Frameworks */, + D3F2C84AD816806F625749C5 /* Pods */, + CB82902E04104E07EF849C18 /* Frameworks */, ); sourceTree = ""; }; @@ -151,15 +142,24 @@ path = Runner; sourceTree = ""; }; - BD60B01F7CC3F37BDE902B8C /* Pods */ = { + CB82902E04104E07EF849C18 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 66AE42AB618EEF74EA35FAFF /* Pods_Runner.framework */, + E5357285461CA23D84727993 /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; + D3F2C84AD816806F625749C5 /* Pods */ = { isa = PBXGroup; children = ( - 507F761A690329C8C75A65E2 /* Pods-Runner.debug.xcconfig */, - 458F284D4389ADAFFD7FBAA5 /* Pods-Runner.release.xcconfig */, - 46ED109558BB0B52911CEDF2 /* Pods-Runner.profile.xcconfig */, - AA54CE87B515BC3531FEEF48 /* Pods-RunnerTests.debug.xcconfig */, - 57AE46D9D874FE5FFBB3E047 /* Pods-RunnerTests.release.xcconfig */, - 1EC93CE997E0EDD54CB41295 /* Pods-RunnerTests.profile.xcconfig */, + 54DBFF5C8D89E736A0167B68 /* Pods-Runner.debug.xcconfig */, + 9CDB7B42A6F8620995CB6CF2 /* Pods-Runner.release.xcconfig */, + CC18E624AAFABC6DD311F438 /* Pods-Runner.profile.xcconfig */, + 5A4EA9B6A5B733A5877FACBC /* Pods-RunnerTests.debug.xcconfig */, + 2CFC8D32DC8431A771DB05E5 /* Pods-RunnerTests.release.xcconfig */, + F5AF1F094CAA852F7BFA8616 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - D56C93D4DD0C64DF97BCE97D /* [CP] Check Pods Manifest.lock */, + 34D2B9D1D9CE963363BA0A5B /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 515422840D633F6AC1588AC7 /* Frameworks */, + 1ECFA6AA5DAB14ADED5C4715 /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 41BD58AF92D87F35673F336C /* [CP] Check Pods Manifest.lock */, + 713F52C5655971916519E71C /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 4BF732A76041B0DBA38F7214 /* [CP] Embed Pods Frameworks */, + 4B094A3D6BA73A5B5C65723A /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -270,45 +270,45 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + 34D2B9D1D9CE963363BA0A5B /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( - "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "Thin Binary"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - 41BD58AF92D87F35673F336C /* [CP] Check Pods Manifest.lock */ = { + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); + name = "Thin Binary"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 4BF732A76041B0DBA38F7214 /* [CP] Embed Pods Frameworks */ = { + 4B094A3D6BA73A5B5C65723A /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -325,42 +325,42 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { + 713F52C5655971916519E71C /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "Run Script"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - D56C93D4DD0C64DF97BCE97D /* [CP] Check Pods Manifest.lock */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( ); + name = "Run Script"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; /* End PBXShellScriptBuildPhase section */ @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = AA54CE87B515BC3531FEEF48 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 5A4EA9B6A5B733A5877FACBC /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 57AE46D9D874FE5FFBB3E047 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 2CFC8D32DC8431A771DB05E5 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 1EC93CE997E0EDD54CB41295 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = F5AF1F094CAA852F7BFA8616 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/boring_to_beautiful/step_03/linux/CMakeLists.txt b/boring_to_beautiful/step_03/linux/CMakeLists.txt index 74a8344fa9..0565f6a409 100644 --- a/boring_to_beautiful/step_03/linux/CMakeLists.txt +++ b/boring_to_beautiful/step_03/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/boring_to_beautiful/step_03/linux/runner/CMakeLists.txt b/boring_to_beautiful/step_03/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/boring_to_beautiful/step_03/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/boring_to_beautiful/step_03/linux/main.cc b/boring_to_beautiful/step_03/linux/runner/main.cc similarity index 100% rename from boring_to_beautiful/step_03/linux/main.cc rename to boring_to_beautiful/step_03/linux/runner/main.cc diff --git a/boring_to_beautiful/step_03/linux/my_application.cc b/boring_to_beautiful/step_03/linux/runner/my_application.cc similarity index 93% rename from boring_to_beautiful/step_03/linux/my_application.cc rename to boring_to_beautiful/step_03/linux/runner/my_application.cc index 59e1394236..f93ba9f71c 100644 --- a/boring_to_beautiful/step_03/linux/my_application.cc +++ b/boring_to_beautiful/step_03/linux/runner/my_application.cc @@ -117,6 +117,12 @@ static void my_application_class_init(MyApplicationClass* klass) { static void my_application_init(MyApplication* self) {} MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + return MY_APPLICATION(g_object_new(my_application_get_type(), "application-id", APPLICATION_ID, "flags", G_APPLICATION_NON_UNIQUE, diff --git a/boring_to_beautiful/step_03/linux/my_application.h b/boring_to_beautiful/step_03/linux/runner/my_application.h similarity index 100% rename from boring_to_beautiful/step_03/linux/my_application.h rename to boring_to_beautiful/step_03/linux/runner/my_application.h diff --git a/boring_to_beautiful/step_03/macos/Runner.xcodeproj/project.pbxproj b/boring_to_beautiful/step_03/macos/Runner.xcodeproj/project.pbxproj index 11e7ec7971..934ea98536 100644 --- a/boring_to_beautiful/step_03/macos/Runner.xcodeproj/project.pbxproj +++ b/boring_to_beautiful/step_03/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ - 122A14BB17CAE5827A96C600 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E721C61EEA1D01D1541205E2 /* Pods_RunnerTests.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - C0A311100478C3723AF3A1A3 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2B7F6D65CBE030418F0F8AFE /* Pods_Runner.framework */; }; + 7D7A4A5CAEB316CD69FCEFCD /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DBF93DFB67EA7D2AD5967AE4 /* Pods_Runner.framework */; }; + A3110385685B3E3544E9425E /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 14444A669D4E611BC45B0FB6 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,10 +62,7 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 095235CA8E3718CE04BECCFD /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - 1965E0AFE652202B66FE3359 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - 2B7F6D65CBE030418F0F8AFE /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 2BE96204F8153212C1B2FFD5 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 14444A669D4E611BC45B0FB6 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -82,12 +79,15 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; + 4ECA459CDC624519673B0579 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 5BD2C9EEA1CFBEC2C3745D8F /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; + 8A22315681F20849245600B8 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - B1C9C34FAF086E24D95B4FE5 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - B2992FC7568D7321F2EE4E8A /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - DA0493143D84740D445AC807 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - E721C61EEA1D01D1541205E2 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + DBF93DFB67EA7D2AD5967AE4 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + ED098600EDD4C45849C1CA92 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + F432CC14780751D0ECFDA11E /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + F962DA6A47D4A923B2BF1844 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 122A14BB17CAE5827A96C600 /* Pods_RunnerTests.framework in Frameworks */, + A3110385685B3E3544E9425E /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,27 +103,13 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - C0A311100478C3723AF3A1A3 /* Pods_Runner.framework in Frameworks */, + 7D7A4A5CAEB316CD69FCEFCD /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 1B3BB2FE7EC0BD319E6A18A5 /* Pods */ = { - isa = PBXGroup; - children = ( - B1C9C34FAF086E24D95B4FE5 /* Pods-Runner.debug.xcconfig */, - B2992FC7568D7321F2EE4E8A /* Pods-Runner.release.xcconfig */, - DA0493143D84740D445AC807 /* Pods-Runner.profile.xcconfig */, - 2BE96204F8153212C1B2FFD5 /* Pods-RunnerTests.debug.xcconfig */, - 095235CA8E3718CE04BECCFD /* Pods-RunnerTests.release.xcconfig */, - 1965E0AFE652202B66FE3359 /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; 331C80D6294CF71000263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -151,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 1B3BB2FE7EC0BD319E6A18A5 /* Pods */, + 97F435B99F0F5B9104CCDE86 /* Pods */, ); sourceTree = ""; }; @@ -199,11 +185,25 @@ path = Runner; sourceTree = ""; }; + 97F435B99F0F5B9104CCDE86 /* Pods */ = { + isa = PBXGroup; + children = ( + 8A22315681F20849245600B8 /* Pods-Runner.debug.xcconfig */, + ED098600EDD4C45849C1CA92 /* Pods-Runner.release.xcconfig */, + 5BD2C9EEA1CFBEC2C3745D8F /* Pods-Runner.profile.xcconfig */, + F962DA6A47D4A923B2BF1844 /* Pods-RunnerTests.debug.xcconfig */, + 4ECA459CDC624519673B0579 /* Pods-RunnerTests.release.xcconfig */, + F432CC14780751D0ECFDA11E /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - 2B7F6D65CBE030418F0F8AFE /* Pods_Runner.framework */, - E721C61EEA1D01D1541205E2 /* Pods_RunnerTests.framework */, + DBF93DFB67EA7D2AD5967AE4 /* Pods_Runner.framework */, + 14444A669D4E611BC45B0FB6 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 8BBDD854D9E775DA9D2E29E7 /* [CP] Check Pods Manifest.lock */, + B4A4E318F1203470DDF09086 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 8D3EC8A5A25E8C0969226ECA /* [CP] Check Pods Manifest.lock */, + 7D680C9A459DF63FFB6BB961 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 33B24C690BD4B02DCC978698 /* [CP] Embed Pods Frameworks */, + 924BD049CB0C75A05F45C790 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -341,23 +341,6 @@ shellPath = /bin/sh; shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; }; - 33B24C690BD4B02DCC978698 /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; 33CC111E2044C6BF0003C045 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -378,7 +361,7 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 8BBDD854D9E775DA9D2E29E7 /* [CP] Check Pods Manifest.lock */ = { + 7D680C9A459DF63FFB6BB961 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -393,14 +376,31 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 8D3EC8A5A25E8C0969226ECA /* [CP] Check Pods Manifest.lock */ = { + 924BD049CB0C75A05F45C790 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; + B4A4E318F1203470DDF09086 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -415,7 +415,7 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 2BE96204F8153212C1B2FFD5 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = F962DA6A47D4A923B2BF1844 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 095235CA8E3718CE04BECCFD /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 4ECA459CDC624519673B0579 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 1965E0AFE652202B66FE3359 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = F432CC14780751D0ECFDA11E /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/boring_to_beautiful/step_03/pubspec.yaml b/boring_to_beautiful/step_03/pubspec.yaml index 6452298e93..0bc88d24c3 100644 --- a/boring_to_beautiful/step_03/pubspec.yaml +++ b/boring_to_beautiful/step_03/pubspec.yaml @@ -15,12 +15,12 @@ dependencies: animations: ^2.0.11 collection: ^1.19.0 cupertino_icons: ^1.0.8 - desktop_window: ^0.4.1 + desktop_window: ^0.4.2 dynamic_color: ^1.7.0 english_words: ^4.0.0 flutter_bloc: ^8.1.6 freezed_annotation: ^2.4.4 - go_router: ^14.3.0 + go_router: ^14.5.0 material_color_utilities: any universal_platform: ^1.1.0 url_launcher: ^6.3.1 diff --git a/boring_to_beautiful/step_03/web/index.html b/boring_to_beautiful/step_03/web/index.html index 0a8bd1ab80..e0a0abbbbf 100644 --- a/boring_to_beautiful/step_03/web/index.html +++ b/boring_to_beautiful/step_03/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/boring_to_beautiful/step_04/ios/Runner.xcodeproj/project.pbxproj b/boring_to_beautiful/step_04/ios/Runner.xcodeproj/project.pbxproj index d33a503139..8c24a73146 100644 --- a/boring_to_beautiful/step_04/ios/Runner.xcodeproj/project.pbxproj +++ b/boring_to_beautiful/step_04/ios/Runner.xcodeproj/project.pbxproj @@ -10,12 +10,12 @@ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; - 49381EA0685B1F13BE864379 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CB41BC21C7A12C73E18A4BD4 /* Pods_RunnerTests.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - C0064E05A4506D109FC14284 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FF179308D1EFBD41B1CD1303 /* Pods_Runner.framework */; }; + 9B56D0E6D2220ABAA3DCF805 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 66AE42AB618EEF74EA35FAFF /* Pods_Runner.framework */; }; + B589DC7DC7B2D3D3438369C2 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E5357285461CA23D84727993 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -44,14 +44,13 @@ /* Begin PBXFileReference section */ 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 1EC93CE997E0EDD54CB41295 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 2CFC8D32DC8431A771DB05E5 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 458F284D4389ADAFFD7FBAA5 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 46ED109558BB0B52911CEDF2 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - 507F761A690329C8C75A65E2 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 57AE46D9D874FE5FFBB3E047 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 54DBFF5C8D89E736A0167B68 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 5A4EA9B6A5B733A5877FACBC /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 66AE42AB618EEF74EA35FAFF /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; @@ -62,17 +61,18 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - AA54CE87B515BC3531FEEF48 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - CB41BC21C7A12C73E18A4BD4 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - FF179308D1EFBD41B1CD1303 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 9CDB7B42A6F8620995CB6CF2 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + CC18E624AAFABC6DD311F438 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + E5357285461CA23D84727993 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + F5AF1F094CAA852F7BFA8616 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 515422840D633F6AC1588AC7 /* Frameworks */ = { + 1ECFA6AA5DAB14ADED5C4715 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 49381EA0685B1F13BE864379 /* Pods_RunnerTests.framework in Frameworks */, + B589DC7DC7B2D3D3438369C2 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -80,7 +80,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - C0064E05A4506D109FC14284 /* Pods_Runner.framework in Frameworks */, + 9B56D0E6D2220ABAA3DCF805 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -95,15 +95,6 @@ path = RunnerTests; sourceTree = ""; }; - 760CB6645FC65AE3E9230AD2 /* Frameworks */ = { - isa = PBXGroup; - children = ( - FF179308D1EFBD41B1CD1303 /* Pods_Runner.framework */, - CB41BC21C7A12C73E18A4BD4 /* Pods_RunnerTests.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( @@ -122,8 +113,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - BD60B01F7CC3F37BDE902B8C /* Pods */, - 760CB6645FC65AE3E9230AD2 /* Frameworks */, + D3F2C84AD816806F625749C5 /* Pods */, + CB82902E04104E07EF849C18 /* Frameworks */, ); sourceTree = ""; }; @@ -151,15 +142,24 @@ path = Runner; sourceTree = ""; }; - BD60B01F7CC3F37BDE902B8C /* Pods */ = { + CB82902E04104E07EF849C18 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 66AE42AB618EEF74EA35FAFF /* Pods_Runner.framework */, + E5357285461CA23D84727993 /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; + D3F2C84AD816806F625749C5 /* Pods */ = { isa = PBXGroup; children = ( - 507F761A690329C8C75A65E2 /* Pods-Runner.debug.xcconfig */, - 458F284D4389ADAFFD7FBAA5 /* Pods-Runner.release.xcconfig */, - 46ED109558BB0B52911CEDF2 /* Pods-Runner.profile.xcconfig */, - AA54CE87B515BC3531FEEF48 /* Pods-RunnerTests.debug.xcconfig */, - 57AE46D9D874FE5FFBB3E047 /* Pods-RunnerTests.release.xcconfig */, - 1EC93CE997E0EDD54CB41295 /* Pods-RunnerTests.profile.xcconfig */, + 54DBFF5C8D89E736A0167B68 /* Pods-Runner.debug.xcconfig */, + 9CDB7B42A6F8620995CB6CF2 /* Pods-Runner.release.xcconfig */, + CC18E624AAFABC6DD311F438 /* Pods-Runner.profile.xcconfig */, + 5A4EA9B6A5B733A5877FACBC /* Pods-RunnerTests.debug.xcconfig */, + 2CFC8D32DC8431A771DB05E5 /* Pods-RunnerTests.release.xcconfig */, + F5AF1F094CAA852F7BFA8616 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - D56C93D4DD0C64DF97BCE97D /* [CP] Check Pods Manifest.lock */, + 34D2B9D1D9CE963363BA0A5B /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 515422840D633F6AC1588AC7 /* Frameworks */, + 1ECFA6AA5DAB14ADED5C4715 /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 41BD58AF92D87F35673F336C /* [CP] Check Pods Manifest.lock */, + 713F52C5655971916519E71C /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 4BF732A76041B0DBA38F7214 /* [CP] Embed Pods Frameworks */, + 4B094A3D6BA73A5B5C65723A /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -270,45 +270,45 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + 34D2B9D1D9CE963363BA0A5B /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( - "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "Thin Binary"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - 41BD58AF92D87F35673F336C /* [CP] Check Pods Manifest.lock */ = { + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); + name = "Thin Binary"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 4BF732A76041B0DBA38F7214 /* [CP] Embed Pods Frameworks */ = { + 4B094A3D6BA73A5B5C65723A /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -325,42 +325,42 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { + 713F52C5655971916519E71C /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "Run Script"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - D56C93D4DD0C64DF97BCE97D /* [CP] Check Pods Manifest.lock */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( ); + name = "Run Script"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; /* End PBXShellScriptBuildPhase section */ @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = AA54CE87B515BC3531FEEF48 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 5A4EA9B6A5B733A5877FACBC /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 57AE46D9D874FE5FFBB3E047 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 2CFC8D32DC8431A771DB05E5 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 1EC93CE997E0EDD54CB41295 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = F5AF1F094CAA852F7BFA8616 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/boring_to_beautiful/step_04/linux/CMakeLists.txt b/boring_to_beautiful/step_04/linux/CMakeLists.txt index 74a8344fa9..0565f6a409 100644 --- a/boring_to_beautiful/step_04/linux/CMakeLists.txt +++ b/boring_to_beautiful/step_04/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/boring_to_beautiful/step_04/linux/my_application.cc b/boring_to_beautiful/step_04/linux/my_application.cc deleted file mode 100644 index 59e1394236..0000000000 --- a/boring_to_beautiful/step_04/linux/my_application.cc +++ /dev/null @@ -1,124 +0,0 @@ -#include "my_application.h" - -#include -#ifdef GDK_WINDOWING_X11 -#include -#endif - -#include "flutter/generated_plugin_registrant.h" - -struct _MyApplication { - GtkApplication parent_instance; - char** dart_entrypoint_arguments; -}; - -G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) - -// Implements GApplication::activate. -static void my_application_activate(GApplication* application) { - MyApplication* self = MY_APPLICATION(application); - GtkWindow* window = - GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); - - // Use a header bar when running in GNOME as this is the common style used - // by applications and is the setup most users will be using (e.g. Ubuntu - // desktop). - // If running on X and not using GNOME then just use a traditional title bar - // in case the window manager does more exotic layout, e.g. tiling. - // If running on Wayland assume the header bar will work (may need changing - // if future cases occur). - gboolean use_header_bar = TRUE; -#ifdef GDK_WINDOWING_X11 - GdkScreen* screen = gtk_window_get_screen(window); - if (GDK_IS_X11_SCREEN(screen)) { - const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); - if (g_strcmp0(wm_name, "GNOME Shell") != 0) { - use_header_bar = FALSE; - } - } -#endif - if (use_header_bar) { - GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); - gtk_widget_show(GTK_WIDGET(header_bar)); - gtk_header_bar_set_title(header_bar, "myartist"); - gtk_header_bar_set_show_close_button(header_bar, TRUE); - gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); - } else { - gtk_window_set_title(window, "myartist"); - } - - gtk_window_set_default_size(window, 1280, 720); - gtk_widget_show(GTK_WIDGET(window)); - - g_autoptr(FlDartProject) project = fl_dart_project_new(); - fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); - - FlView* view = fl_view_new(project); - gtk_widget_show(GTK_WIDGET(view)); - gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); - - fl_register_plugins(FL_PLUGIN_REGISTRY(view)); - - gtk_widget_grab_focus(GTK_WIDGET(view)); -} - -// Implements GApplication::local_command_line. -static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { - MyApplication* self = MY_APPLICATION(application); - // Strip out the first argument as it is the binary name. - self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); - - g_autoptr(GError) error = nullptr; - if (!g_application_register(application, nullptr, &error)) { - g_warning("Failed to register: %s", error->message); - *exit_status = 1; - return TRUE; - } - - g_application_activate(application); - *exit_status = 0; - - return TRUE; -} - -// Implements GApplication::startup. -static void my_application_startup(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application startup. - - G_APPLICATION_CLASS(my_application_parent_class)->startup(application); -} - -// Implements GApplication::shutdown. -static void my_application_shutdown(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application shutdown. - - G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); -} - -// Implements GObject::dispose. -static void my_application_dispose(GObject* object) { - MyApplication* self = MY_APPLICATION(object); - g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); - G_OBJECT_CLASS(my_application_parent_class)->dispose(object); -} - -static void my_application_class_init(MyApplicationClass* klass) { - G_APPLICATION_CLASS(klass)->activate = my_application_activate; - G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; - G_APPLICATION_CLASS(klass)->startup = my_application_startup; - G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; - G_OBJECT_CLASS(klass)->dispose = my_application_dispose; -} - -static void my_application_init(MyApplication* self) {} - -MyApplication* my_application_new() { - return MY_APPLICATION(g_object_new(my_application_get_type(), - "application-id", APPLICATION_ID, - "flags", G_APPLICATION_NON_UNIQUE, - nullptr)); -} diff --git a/boring_to_beautiful/step_04/linux/runner/CMakeLists.txt b/boring_to_beautiful/step_04/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/boring_to_beautiful/step_04/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/boring_to_beautiful/step_04/linux/main.cc b/boring_to_beautiful/step_04/linux/runner/main.cc similarity index 100% rename from boring_to_beautiful/step_04/linux/main.cc rename to boring_to_beautiful/step_04/linux/runner/main.cc diff --git a/boring_to_beautiful/step_04/linux/runner/my_application.cc b/boring_to_beautiful/step_04/linux/runner/my_application.cc new file mode 100644 index 0000000000..f93ba9f71c --- /dev/null +++ b/boring_to_beautiful/step_04/linux/runner/my_application.cc @@ -0,0 +1,130 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "myartist"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "myartist"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/boring_to_beautiful/step_04/linux/my_application.h b/boring_to_beautiful/step_04/linux/runner/my_application.h similarity index 100% rename from boring_to_beautiful/step_04/linux/my_application.h rename to boring_to_beautiful/step_04/linux/runner/my_application.h diff --git a/boring_to_beautiful/step_04/macos/Runner.xcodeproj/project.pbxproj b/boring_to_beautiful/step_04/macos/Runner.xcodeproj/project.pbxproj index 11e7ec7971..934ea98536 100644 --- a/boring_to_beautiful/step_04/macos/Runner.xcodeproj/project.pbxproj +++ b/boring_to_beautiful/step_04/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ - 122A14BB17CAE5827A96C600 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E721C61EEA1D01D1541205E2 /* Pods_RunnerTests.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - C0A311100478C3723AF3A1A3 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2B7F6D65CBE030418F0F8AFE /* Pods_Runner.framework */; }; + 7D7A4A5CAEB316CD69FCEFCD /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DBF93DFB67EA7D2AD5967AE4 /* Pods_Runner.framework */; }; + A3110385685B3E3544E9425E /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 14444A669D4E611BC45B0FB6 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,10 +62,7 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 095235CA8E3718CE04BECCFD /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - 1965E0AFE652202B66FE3359 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - 2B7F6D65CBE030418F0F8AFE /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 2BE96204F8153212C1B2FFD5 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 14444A669D4E611BC45B0FB6 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -82,12 +79,15 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; + 4ECA459CDC624519673B0579 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 5BD2C9EEA1CFBEC2C3745D8F /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; + 8A22315681F20849245600B8 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - B1C9C34FAF086E24D95B4FE5 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - B2992FC7568D7321F2EE4E8A /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - DA0493143D84740D445AC807 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - E721C61EEA1D01D1541205E2 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + DBF93DFB67EA7D2AD5967AE4 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + ED098600EDD4C45849C1CA92 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + F432CC14780751D0ECFDA11E /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + F962DA6A47D4A923B2BF1844 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 122A14BB17CAE5827A96C600 /* Pods_RunnerTests.framework in Frameworks */, + A3110385685B3E3544E9425E /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,27 +103,13 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - C0A311100478C3723AF3A1A3 /* Pods_Runner.framework in Frameworks */, + 7D7A4A5CAEB316CD69FCEFCD /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 1B3BB2FE7EC0BD319E6A18A5 /* Pods */ = { - isa = PBXGroup; - children = ( - B1C9C34FAF086E24D95B4FE5 /* Pods-Runner.debug.xcconfig */, - B2992FC7568D7321F2EE4E8A /* Pods-Runner.release.xcconfig */, - DA0493143D84740D445AC807 /* Pods-Runner.profile.xcconfig */, - 2BE96204F8153212C1B2FFD5 /* Pods-RunnerTests.debug.xcconfig */, - 095235CA8E3718CE04BECCFD /* Pods-RunnerTests.release.xcconfig */, - 1965E0AFE652202B66FE3359 /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; 331C80D6294CF71000263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -151,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 1B3BB2FE7EC0BD319E6A18A5 /* Pods */, + 97F435B99F0F5B9104CCDE86 /* Pods */, ); sourceTree = ""; }; @@ -199,11 +185,25 @@ path = Runner; sourceTree = ""; }; + 97F435B99F0F5B9104CCDE86 /* Pods */ = { + isa = PBXGroup; + children = ( + 8A22315681F20849245600B8 /* Pods-Runner.debug.xcconfig */, + ED098600EDD4C45849C1CA92 /* Pods-Runner.release.xcconfig */, + 5BD2C9EEA1CFBEC2C3745D8F /* Pods-Runner.profile.xcconfig */, + F962DA6A47D4A923B2BF1844 /* Pods-RunnerTests.debug.xcconfig */, + 4ECA459CDC624519673B0579 /* Pods-RunnerTests.release.xcconfig */, + F432CC14780751D0ECFDA11E /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - 2B7F6D65CBE030418F0F8AFE /* Pods_Runner.framework */, - E721C61EEA1D01D1541205E2 /* Pods_RunnerTests.framework */, + DBF93DFB67EA7D2AD5967AE4 /* Pods_Runner.framework */, + 14444A669D4E611BC45B0FB6 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 8BBDD854D9E775DA9D2E29E7 /* [CP] Check Pods Manifest.lock */, + B4A4E318F1203470DDF09086 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 8D3EC8A5A25E8C0969226ECA /* [CP] Check Pods Manifest.lock */, + 7D680C9A459DF63FFB6BB961 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 33B24C690BD4B02DCC978698 /* [CP] Embed Pods Frameworks */, + 924BD049CB0C75A05F45C790 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -341,23 +341,6 @@ shellPath = /bin/sh; shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; }; - 33B24C690BD4B02DCC978698 /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; 33CC111E2044C6BF0003C045 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -378,7 +361,7 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 8BBDD854D9E775DA9D2E29E7 /* [CP] Check Pods Manifest.lock */ = { + 7D680C9A459DF63FFB6BB961 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -393,14 +376,31 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 8D3EC8A5A25E8C0969226ECA /* [CP] Check Pods Manifest.lock */ = { + 924BD049CB0C75A05F45C790 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; + B4A4E318F1203470DDF09086 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -415,7 +415,7 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 2BE96204F8153212C1B2FFD5 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = F962DA6A47D4A923B2BF1844 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 095235CA8E3718CE04BECCFD /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 4ECA459CDC624519673B0579 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 1965E0AFE652202B66FE3359 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = F432CC14780751D0ECFDA11E /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/boring_to_beautiful/step_04/pubspec.yaml b/boring_to_beautiful/step_04/pubspec.yaml index 6452298e93..0bc88d24c3 100644 --- a/boring_to_beautiful/step_04/pubspec.yaml +++ b/boring_to_beautiful/step_04/pubspec.yaml @@ -15,12 +15,12 @@ dependencies: animations: ^2.0.11 collection: ^1.19.0 cupertino_icons: ^1.0.8 - desktop_window: ^0.4.1 + desktop_window: ^0.4.2 dynamic_color: ^1.7.0 english_words: ^4.0.0 flutter_bloc: ^8.1.6 freezed_annotation: ^2.4.4 - go_router: ^14.3.0 + go_router: ^14.5.0 material_color_utilities: any universal_platform: ^1.1.0 url_launcher: ^6.3.1 diff --git a/boring_to_beautiful/step_04/web/index.html b/boring_to_beautiful/step_04/web/index.html index 0a8bd1ab80..e0a0abbbbf 100644 --- a/boring_to_beautiful/step_04/web/index.html +++ b/boring_to_beautiful/step_04/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/boring_to_beautiful/step_05/ios/Runner.xcodeproj/project.pbxproj b/boring_to_beautiful/step_05/ios/Runner.xcodeproj/project.pbxproj index d33a503139..8c24a73146 100644 --- a/boring_to_beautiful/step_05/ios/Runner.xcodeproj/project.pbxproj +++ b/boring_to_beautiful/step_05/ios/Runner.xcodeproj/project.pbxproj @@ -10,12 +10,12 @@ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; - 49381EA0685B1F13BE864379 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CB41BC21C7A12C73E18A4BD4 /* Pods_RunnerTests.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - C0064E05A4506D109FC14284 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FF179308D1EFBD41B1CD1303 /* Pods_Runner.framework */; }; + 9B56D0E6D2220ABAA3DCF805 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 66AE42AB618EEF74EA35FAFF /* Pods_Runner.framework */; }; + B589DC7DC7B2D3D3438369C2 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E5357285461CA23D84727993 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -44,14 +44,13 @@ /* Begin PBXFileReference section */ 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 1EC93CE997E0EDD54CB41295 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 2CFC8D32DC8431A771DB05E5 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 458F284D4389ADAFFD7FBAA5 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 46ED109558BB0B52911CEDF2 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - 507F761A690329C8C75A65E2 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 57AE46D9D874FE5FFBB3E047 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 54DBFF5C8D89E736A0167B68 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 5A4EA9B6A5B733A5877FACBC /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 66AE42AB618EEF74EA35FAFF /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; @@ -62,17 +61,18 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - AA54CE87B515BC3531FEEF48 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - CB41BC21C7A12C73E18A4BD4 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - FF179308D1EFBD41B1CD1303 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 9CDB7B42A6F8620995CB6CF2 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + CC18E624AAFABC6DD311F438 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + E5357285461CA23D84727993 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + F5AF1F094CAA852F7BFA8616 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 515422840D633F6AC1588AC7 /* Frameworks */ = { + 1ECFA6AA5DAB14ADED5C4715 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 49381EA0685B1F13BE864379 /* Pods_RunnerTests.framework in Frameworks */, + B589DC7DC7B2D3D3438369C2 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -80,7 +80,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - C0064E05A4506D109FC14284 /* Pods_Runner.framework in Frameworks */, + 9B56D0E6D2220ABAA3DCF805 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -95,15 +95,6 @@ path = RunnerTests; sourceTree = ""; }; - 760CB6645FC65AE3E9230AD2 /* Frameworks */ = { - isa = PBXGroup; - children = ( - FF179308D1EFBD41B1CD1303 /* Pods_Runner.framework */, - CB41BC21C7A12C73E18A4BD4 /* Pods_RunnerTests.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( @@ -122,8 +113,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - BD60B01F7CC3F37BDE902B8C /* Pods */, - 760CB6645FC65AE3E9230AD2 /* Frameworks */, + D3F2C84AD816806F625749C5 /* Pods */, + CB82902E04104E07EF849C18 /* Frameworks */, ); sourceTree = ""; }; @@ -151,15 +142,24 @@ path = Runner; sourceTree = ""; }; - BD60B01F7CC3F37BDE902B8C /* Pods */ = { + CB82902E04104E07EF849C18 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 66AE42AB618EEF74EA35FAFF /* Pods_Runner.framework */, + E5357285461CA23D84727993 /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; + D3F2C84AD816806F625749C5 /* Pods */ = { isa = PBXGroup; children = ( - 507F761A690329C8C75A65E2 /* Pods-Runner.debug.xcconfig */, - 458F284D4389ADAFFD7FBAA5 /* Pods-Runner.release.xcconfig */, - 46ED109558BB0B52911CEDF2 /* Pods-Runner.profile.xcconfig */, - AA54CE87B515BC3531FEEF48 /* Pods-RunnerTests.debug.xcconfig */, - 57AE46D9D874FE5FFBB3E047 /* Pods-RunnerTests.release.xcconfig */, - 1EC93CE997E0EDD54CB41295 /* Pods-RunnerTests.profile.xcconfig */, + 54DBFF5C8D89E736A0167B68 /* Pods-Runner.debug.xcconfig */, + 9CDB7B42A6F8620995CB6CF2 /* Pods-Runner.release.xcconfig */, + CC18E624AAFABC6DD311F438 /* Pods-Runner.profile.xcconfig */, + 5A4EA9B6A5B733A5877FACBC /* Pods-RunnerTests.debug.xcconfig */, + 2CFC8D32DC8431A771DB05E5 /* Pods-RunnerTests.release.xcconfig */, + F5AF1F094CAA852F7BFA8616 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - D56C93D4DD0C64DF97BCE97D /* [CP] Check Pods Manifest.lock */, + 34D2B9D1D9CE963363BA0A5B /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 515422840D633F6AC1588AC7 /* Frameworks */, + 1ECFA6AA5DAB14ADED5C4715 /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 41BD58AF92D87F35673F336C /* [CP] Check Pods Manifest.lock */, + 713F52C5655971916519E71C /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 4BF732A76041B0DBA38F7214 /* [CP] Embed Pods Frameworks */, + 4B094A3D6BA73A5B5C65723A /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -270,45 +270,45 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + 34D2B9D1D9CE963363BA0A5B /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( - "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "Thin Binary"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - 41BD58AF92D87F35673F336C /* [CP] Check Pods Manifest.lock */ = { + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); + name = "Thin Binary"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 4BF732A76041B0DBA38F7214 /* [CP] Embed Pods Frameworks */ = { + 4B094A3D6BA73A5B5C65723A /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -325,42 +325,42 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { + 713F52C5655971916519E71C /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "Run Script"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - D56C93D4DD0C64DF97BCE97D /* [CP] Check Pods Manifest.lock */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( ); + name = "Run Script"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; /* End PBXShellScriptBuildPhase section */ @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = AA54CE87B515BC3531FEEF48 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 5A4EA9B6A5B733A5877FACBC /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 57AE46D9D874FE5FFBB3E047 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 2CFC8D32DC8431A771DB05E5 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 1EC93CE997E0EDD54CB41295 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = F5AF1F094CAA852F7BFA8616 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/boring_to_beautiful/step_05/linux/CMakeLists.txt b/boring_to_beautiful/step_05/linux/CMakeLists.txt index 74a8344fa9..0565f6a409 100644 --- a/boring_to_beautiful/step_05/linux/CMakeLists.txt +++ b/boring_to_beautiful/step_05/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/boring_to_beautiful/step_05/linux/my_application.cc b/boring_to_beautiful/step_05/linux/my_application.cc deleted file mode 100644 index 59e1394236..0000000000 --- a/boring_to_beautiful/step_05/linux/my_application.cc +++ /dev/null @@ -1,124 +0,0 @@ -#include "my_application.h" - -#include -#ifdef GDK_WINDOWING_X11 -#include -#endif - -#include "flutter/generated_plugin_registrant.h" - -struct _MyApplication { - GtkApplication parent_instance; - char** dart_entrypoint_arguments; -}; - -G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) - -// Implements GApplication::activate. -static void my_application_activate(GApplication* application) { - MyApplication* self = MY_APPLICATION(application); - GtkWindow* window = - GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); - - // Use a header bar when running in GNOME as this is the common style used - // by applications and is the setup most users will be using (e.g. Ubuntu - // desktop). - // If running on X and not using GNOME then just use a traditional title bar - // in case the window manager does more exotic layout, e.g. tiling. - // If running on Wayland assume the header bar will work (may need changing - // if future cases occur). - gboolean use_header_bar = TRUE; -#ifdef GDK_WINDOWING_X11 - GdkScreen* screen = gtk_window_get_screen(window); - if (GDK_IS_X11_SCREEN(screen)) { - const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); - if (g_strcmp0(wm_name, "GNOME Shell") != 0) { - use_header_bar = FALSE; - } - } -#endif - if (use_header_bar) { - GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); - gtk_widget_show(GTK_WIDGET(header_bar)); - gtk_header_bar_set_title(header_bar, "myartist"); - gtk_header_bar_set_show_close_button(header_bar, TRUE); - gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); - } else { - gtk_window_set_title(window, "myartist"); - } - - gtk_window_set_default_size(window, 1280, 720); - gtk_widget_show(GTK_WIDGET(window)); - - g_autoptr(FlDartProject) project = fl_dart_project_new(); - fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); - - FlView* view = fl_view_new(project); - gtk_widget_show(GTK_WIDGET(view)); - gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); - - fl_register_plugins(FL_PLUGIN_REGISTRY(view)); - - gtk_widget_grab_focus(GTK_WIDGET(view)); -} - -// Implements GApplication::local_command_line. -static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { - MyApplication* self = MY_APPLICATION(application); - // Strip out the first argument as it is the binary name. - self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); - - g_autoptr(GError) error = nullptr; - if (!g_application_register(application, nullptr, &error)) { - g_warning("Failed to register: %s", error->message); - *exit_status = 1; - return TRUE; - } - - g_application_activate(application); - *exit_status = 0; - - return TRUE; -} - -// Implements GApplication::startup. -static void my_application_startup(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application startup. - - G_APPLICATION_CLASS(my_application_parent_class)->startup(application); -} - -// Implements GApplication::shutdown. -static void my_application_shutdown(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application shutdown. - - G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); -} - -// Implements GObject::dispose. -static void my_application_dispose(GObject* object) { - MyApplication* self = MY_APPLICATION(object); - g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); - G_OBJECT_CLASS(my_application_parent_class)->dispose(object); -} - -static void my_application_class_init(MyApplicationClass* klass) { - G_APPLICATION_CLASS(klass)->activate = my_application_activate; - G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; - G_APPLICATION_CLASS(klass)->startup = my_application_startup; - G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; - G_OBJECT_CLASS(klass)->dispose = my_application_dispose; -} - -static void my_application_init(MyApplication* self) {} - -MyApplication* my_application_new() { - return MY_APPLICATION(g_object_new(my_application_get_type(), - "application-id", APPLICATION_ID, - "flags", G_APPLICATION_NON_UNIQUE, - nullptr)); -} diff --git a/boring_to_beautiful/step_05/linux/runner/CMakeLists.txt b/boring_to_beautiful/step_05/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/boring_to_beautiful/step_05/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/boring_to_beautiful/step_05/linux/main.cc b/boring_to_beautiful/step_05/linux/runner/main.cc similarity index 100% rename from boring_to_beautiful/step_05/linux/main.cc rename to boring_to_beautiful/step_05/linux/runner/main.cc diff --git a/boring_to_beautiful/step_05/linux/runner/my_application.cc b/boring_to_beautiful/step_05/linux/runner/my_application.cc new file mode 100644 index 0000000000..f93ba9f71c --- /dev/null +++ b/boring_to_beautiful/step_05/linux/runner/my_application.cc @@ -0,0 +1,130 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "myartist"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "myartist"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/boring_to_beautiful/step_05/linux/my_application.h b/boring_to_beautiful/step_05/linux/runner/my_application.h similarity index 100% rename from boring_to_beautiful/step_05/linux/my_application.h rename to boring_to_beautiful/step_05/linux/runner/my_application.h diff --git a/boring_to_beautiful/step_05/macos/Runner.xcodeproj/project.pbxproj b/boring_to_beautiful/step_05/macos/Runner.xcodeproj/project.pbxproj index 11e7ec7971..934ea98536 100644 --- a/boring_to_beautiful/step_05/macos/Runner.xcodeproj/project.pbxproj +++ b/boring_to_beautiful/step_05/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ - 122A14BB17CAE5827A96C600 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E721C61EEA1D01D1541205E2 /* Pods_RunnerTests.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - C0A311100478C3723AF3A1A3 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2B7F6D65CBE030418F0F8AFE /* Pods_Runner.framework */; }; + 7D7A4A5CAEB316CD69FCEFCD /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DBF93DFB67EA7D2AD5967AE4 /* Pods_Runner.framework */; }; + A3110385685B3E3544E9425E /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 14444A669D4E611BC45B0FB6 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,10 +62,7 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 095235CA8E3718CE04BECCFD /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - 1965E0AFE652202B66FE3359 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - 2B7F6D65CBE030418F0F8AFE /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 2BE96204F8153212C1B2FFD5 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 14444A669D4E611BC45B0FB6 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -82,12 +79,15 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; + 4ECA459CDC624519673B0579 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 5BD2C9EEA1CFBEC2C3745D8F /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; + 8A22315681F20849245600B8 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - B1C9C34FAF086E24D95B4FE5 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - B2992FC7568D7321F2EE4E8A /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - DA0493143D84740D445AC807 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - E721C61EEA1D01D1541205E2 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + DBF93DFB67EA7D2AD5967AE4 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + ED098600EDD4C45849C1CA92 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + F432CC14780751D0ECFDA11E /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + F962DA6A47D4A923B2BF1844 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 122A14BB17CAE5827A96C600 /* Pods_RunnerTests.framework in Frameworks */, + A3110385685B3E3544E9425E /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,27 +103,13 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - C0A311100478C3723AF3A1A3 /* Pods_Runner.framework in Frameworks */, + 7D7A4A5CAEB316CD69FCEFCD /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 1B3BB2FE7EC0BD319E6A18A5 /* Pods */ = { - isa = PBXGroup; - children = ( - B1C9C34FAF086E24D95B4FE5 /* Pods-Runner.debug.xcconfig */, - B2992FC7568D7321F2EE4E8A /* Pods-Runner.release.xcconfig */, - DA0493143D84740D445AC807 /* Pods-Runner.profile.xcconfig */, - 2BE96204F8153212C1B2FFD5 /* Pods-RunnerTests.debug.xcconfig */, - 095235CA8E3718CE04BECCFD /* Pods-RunnerTests.release.xcconfig */, - 1965E0AFE652202B66FE3359 /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; 331C80D6294CF71000263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -151,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 1B3BB2FE7EC0BD319E6A18A5 /* Pods */, + 97F435B99F0F5B9104CCDE86 /* Pods */, ); sourceTree = ""; }; @@ -199,11 +185,25 @@ path = Runner; sourceTree = ""; }; + 97F435B99F0F5B9104CCDE86 /* Pods */ = { + isa = PBXGroup; + children = ( + 8A22315681F20849245600B8 /* Pods-Runner.debug.xcconfig */, + ED098600EDD4C45849C1CA92 /* Pods-Runner.release.xcconfig */, + 5BD2C9EEA1CFBEC2C3745D8F /* Pods-Runner.profile.xcconfig */, + F962DA6A47D4A923B2BF1844 /* Pods-RunnerTests.debug.xcconfig */, + 4ECA459CDC624519673B0579 /* Pods-RunnerTests.release.xcconfig */, + F432CC14780751D0ECFDA11E /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - 2B7F6D65CBE030418F0F8AFE /* Pods_Runner.framework */, - E721C61EEA1D01D1541205E2 /* Pods_RunnerTests.framework */, + DBF93DFB67EA7D2AD5967AE4 /* Pods_Runner.framework */, + 14444A669D4E611BC45B0FB6 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 8BBDD854D9E775DA9D2E29E7 /* [CP] Check Pods Manifest.lock */, + B4A4E318F1203470DDF09086 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 8D3EC8A5A25E8C0969226ECA /* [CP] Check Pods Manifest.lock */, + 7D680C9A459DF63FFB6BB961 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 33B24C690BD4B02DCC978698 /* [CP] Embed Pods Frameworks */, + 924BD049CB0C75A05F45C790 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -341,23 +341,6 @@ shellPath = /bin/sh; shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; }; - 33B24C690BD4B02DCC978698 /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; 33CC111E2044C6BF0003C045 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -378,7 +361,7 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 8BBDD854D9E775DA9D2E29E7 /* [CP] Check Pods Manifest.lock */ = { + 7D680C9A459DF63FFB6BB961 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -393,14 +376,31 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 8D3EC8A5A25E8C0969226ECA /* [CP] Check Pods Manifest.lock */ = { + 924BD049CB0C75A05F45C790 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; + B4A4E318F1203470DDF09086 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -415,7 +415,7 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 2BE96204F8153212C1B2FFD5 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = F962DA6A47D4A923B2BF1844 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 095235CA8E3718CE04BECCFD /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 4ECA459CDC624519673B0579 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 1965E0AFE652202B66FE3359 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = F432CC14780751D0ECFDA11E /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/boring_to_beautiful/step_05/pubspec.yaml b/boring_to_beautiful/step_05/pubspec.yaml index 6452298e93..0bc88d24c3 100644 --- a/boring_to_beautiful/step_05/pubspec.yaml +++ b/boring_to_beautiful/step_05/pubspec.yaml @@ -15,12 +15,12 @@ dependencies: animations: ^2.0.11 collection: ^1.19.0 cupertino_icons: ^1.0.8 - desktop_window: ^0.4.1 + desktop_window: ^0.4.2 dynamic_color: ^1.7.0 english_words: ^4.0.0 flutter_bloc: ^8.1.6 freezed_annotation: ^2.4.4 - go_router: ^14.3.0 + go_router: ^14.5.0 material_color_utilities: any universal_platform: ^1.1.0 url_launcher: ^6.3.1 diff --git a/boring_to_beautiful/step_05/web/index.html b/boring_to_beautiful/step_05/web/index.html index 0a8bd1ab80..e0a0abbbbf 100644 --- a/boring_to_beautiful/step_05/web/index.html +++ b/boring_to_beautiful/step_05/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/boring_to_beautiful/step_06/ios/Runner.xcodeproj/project.pbxproj b/boring_to_beautiful/step_06/ios/Runner.xcodeproj/project.pbxproj index d33a503139..8c24a73146 100644 --- a/boring_to_beautiful/step_06/ios/Runner.xcodeproj/project.pbxproj +++ b/boring_to_beautiful/step_06/ios/Runner.xcodeproj/project.pbxproj @@ -10,12 +10,12 @@ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; - 49381EA0685B1F13BE864379 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CB41BC21C7A12C73E18A4BD4 /* Pods_RunnerTests.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - C0064E05A4506D109FC14284 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FF179308D1EFBD41B1CD1303 /* Pods_Runner.framework */; }; + 9B56D0E6D2220ABAA3DCF805 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 66AE42AB618EEF74EA35FAFF /* Pods_Runner.framework */; }; + B589DC7DC7B2D3D3438369C2 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E5357285461CA23D84727993 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -44,14 +44,13 @@ /* Begin PBXFileReference section */ 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 1EC93CE997E0EDD54CB41295 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 2CFC8D32DC8431A771DB05E5 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 458F284D4389ADAFFD7FBAA5 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 46ED109558BB0B52911CEDF2 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - 507F761A690329C8C75A65E2 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 57AE46D9D874FE5FFBB3E047 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 54DBFF5C8D89E736A0167B68 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 5A4EA9B6A5B733A5877FACBC /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 66AE42AB618EEF74EA35FAFF /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; @@ -62,17 +61,18 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - AA54CE87B515BC3531FEEF48 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - CB41BC21C7A12C73E18A4BD4 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - FF179308D1EFBD41B1CD1303 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 9CDB7B42A6F8620995CB6CF2 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + CC18E624AAFABC6DD311F438 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + E5357285461CA23D84727993 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + F5AF1F094CAA852F7BFA8616 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 515422840D633F6AC1588AC7 /* Frameworks */ = { + 1ECFA6AA5DAB14ADED5C4715 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 49381EA0685B1F13BE864379 /* Pods_RunnerTests.framework in Frameworks */, + B589DC7DC7B2D3D3438369C2 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -80,7 +80,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - C0064E05A4506D109FC14284 /* Pods_Runner.framework in Frameworks */, + 9B56D0E6D2220ABAA3DCF805 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -95,15 +95,6 @@ path = RunnerTests; sourceTree = ""; }; - 760CB6645FC65AE3E9230AD2 /* Frameworks */ = { - isa = PBXGroup; - children = ( - FF179308D1EFBD41B1CD1303 /* Pods_Runner.framework */, - CB41BC21C7A12C73E18A4BD4 /* Pods_RunnerTests.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( @@ -122,8 +113,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - BD60B01F7CC3F37BDE902B8C /* Pods */, - 760CB6645FC65AE3E9230AD2 /* Frameworks */, + D3F2C84AD816806F625749C5 /* Pods */, + CB82902E04104E07EF849C18 /* Frameworks */, ); sourceTree = ""; }; @@ -151,15 +142,24 @@ path = Runner; sourceTree = ""; }; - BD60B01F7CC3F37BDE902B8C /* Pods */ = { + CB82902E04104E07EF849C18 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 66AE42AB618EEF74EA35FAFF /* Pods_Runner.framework */, + E5357285461CA23D84727993 /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; + D3F2C84AD816806F625749C5 /* Pods */ = { isa = PBXGroup; children = ( - 507F761A690329C8C75A65E2 /* Pods-Runner.debug.xcconfig */, - 458F284D4389ADAFFD7FBAA5 /* Pods-Runner.release.xcconfig */, - 46ED109558BB0B52911CEDF2 /* Pods-Runner.profile.xcconfig */, - AA54CE87B515BC3531FEEF48 /* Pods-RunnerTests.debug.xcconfig */, - 57AE46D9D874FE5FFBB3E047 /* Pods-RunnerTests.release.xcconfig */, - 1EC93CE997E0EDD54CB41295 /* Pods-RunnerTests.profile.xcconfig */, + 54DBFF5C8D89E736A0167B68 /* Pods-Runner.debug.xcconfig */, + 9CDB7B42A6F8620995CB6CF2 /* Pods-Runner.release.xcconfig */, + CC18E624AAFABC6DD311F438 /* Pods-Runner.profile.xcconfig */, + 5A4EA9B6A5B733A5877FACBC /* Pods-RunnerTests.debug.xcconfig */, + 2CFC8D32DC8431A771DB05E5 /* Pods-RunnerTests.release.xcconfig */, + F5AF1F094CAA852F7BFA8616 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - D56C93D4DD0C64DF97BCE97D /* [CP] Check Pods Manifest.lock */, + 34D2B9D1D9CE963363BA0A5B /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 515422840D633F6AC1588AC7 /* Frameworks */, + 1ECFA6AA5DAB14ADED5C4715 /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 41BD58AF92D87F35673F336C /* [CP] Check Pods Manifest.lock */, + 713F52C5655971916519E71C /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 4BF732A76041B0DBA38F7214 /* [CP] Embed Pods Frameworks */, + 4B094A3D6BA73A5B5C65723A /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -270,45 +270,45 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + 34D2B9D1D9CE963363BA0A5B /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( - "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "Thin Binary"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - 41BD58AF92D87F35673F336C /* [CP] Check Pods Manifest.lock */ = { + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); + name = "Thin Binary"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 4BF732A76041B0DBA38F7214 /* [CP] Embed Pods Frameworks */ = { + 4B094A3D6BA73A5B5C65723A /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -325,42 +325,42 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { + 713F52C5655971916519E71C /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "Run Script"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - D56C93D4DD0C64DF97BCE97D /* [CP] Check Pods Manifest.lock */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( ); + name = "Run Script"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; /* End PBXShellScriptBuildPhase section */ @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = AA54CE87B515BC3531FEEF48 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 5A4EA9B6A5B733A5877FACBC /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 57AE46D9D874FE5FFBB3E047 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 2CFC8D32DC8431A771DB05E5 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 1EC93CE997E0EDD54CB41295 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = F5AF1F094CAA852F7BFA8616 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/boring_to_beautiful/step_06/linux/CMakeLists.txt b/boring_to_beautiful/step_06/linux/CMakeLists.txt index 74a8344fa9..0565f6a409 100644 --- a/boring_to_beautiful/step_06/linux/CMakeLists.txt +++ b/boring_to_beautiful/step_06/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/boring_to_beautiful/step_06/linux/my_application.cc b/boring_to_beautiful/step_06/linux/my_application.cc deleted file mode 100644 index 59e1394236..0000000000 --- a/boring_to_beautiful/step_06/linux/my_application.cc +++ /dev/null @@ -1,124 +0,0 @@ -#include "my_application.h" - -#include -#ifdef GDK_WINDOWING_X11 -#include -#endif - -#include "flutter/generated_plugin_registrant.h" - -struct _MyApplication { - GtkApplication parent_instance; - char** dart_entrypoint_arguments; -}; - -G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) - -// Implements GApplication::activate. -static void my_application_activate(GApplication* application) { - MyApplication* self = MY_APPLICATION(application); - GtkWindow* window = - GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); - - // Use a header bar when running in GNOME as this is the common style used - // by applications and is the setup most users will be using (e.g. Ubuntu - // desktop). - // If running on X and not using GNOME then just use a traditional title bar - // in case the window manager does more exotic layout, e.g. tiling. - // If running on Wayland assume the header bar will work (may need changing - // if future cases occur). - gboolean use_header_bar = TRUE; -#ifdef GDK_WINDOWING_X11 - GdkScreen* screen = gtk_window_get_screen(window); - if (GDK_IS_X11_SCREEN(screen)) { - const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); - if (g_strcmp0(wm_name, "GNOME Shell") != 0) { - use_header_bar = FALSE; - } - } -#endif - if (use_header_bar) { - GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); - gtk_widget_show(GTK_WIDGET(header_bar)); - gtk_header_bar_set_title(header_bar, "myartist"); - gtk_header_bar_set_show_close_button(header_bar, TRUE); - gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); - } else { - gtk_window_set_title(window, "myartist"); - } - - gtk_window_set_default_size(window, 1280, 720); - gtk_widget_show(GTK_WIDGET(window)); - - g_autoptr(FlDartProject) project = fl_dart_project_new(); - fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); - - FlView* view = fl_view_new(project); - gtk_widget_show(GTK_WIDGET(view)); - gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); - - fl_register_plugins(FL_PLUGIN_REGISTRY(view)); - - gtk_widget_grab_focus(GTK_WIDGET(view)); -} - -// Implements GApplication::local_command_line. -static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { - MyApplication* self = MY_APPLICATION(application); - // Strip out the first argument as it is the binary name. - self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); - - g_autoptr(GError) error = nullptr; - if (!g_application_register(application, nullptr, &error)) { - g_warning("Failed to register: %s", error->message); - *exit_status = 1; - return TRUE; - } - - g_application_activate(application); - *exit_status = 0; - - return TRUE; -} - -// Implements GApplication::startup. -static void my_application_startup(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application startup. - - G_APPLICATION_CLASS(my_application_parent_class)->startup(application); -} - -// Implements GApplication::shutdown. -static void my_application_shutdown(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application shutdown. - - G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); -} - -// Implements GObject::dispose. -static void my_application_dispose(GObject* object) { - MyApplication* self = MY_APPLICATION(object); - g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); - G_OBJECT_CLASS(my_application_parent_class)->dispose(object); -} - -static void my_application_class_init(MyApplicationClass* klass) { - G_APPLICATION_CLASS(klass)->activate = my_application_activate; - G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; - G_APPLICATION_CLASS(klass)->startup = my_application_startup; - G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; - G_OBJECT_CLASS(klass)->dispose = my_application_dispose; -} - -static void my_application_init(MyApplication* self) {} - -MyApplication* my_application_new() { - return MY_APPLICATION(g_object_new(my_application_get_type(), - "application-id", APPLICATION_ID, - "flags", G_APPLICATION_NON_UNIQUE, - nullptr)); -} diff --git a/boring_to_beautiful/step_06/linux/runner/CMakeLists.txt b/boring_to_beautiful/step_06/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/boring_to_beautiful/step_06/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/boring_to_beautiful/step_06/linux/main.cc b/boring_to_beautiful/step_06/linux/runner/main.cc similarity index 100% rename from boring_to_beautiful/step_06/linux/main.cc rename to boring_to_beautiful/step_06/linux/runner/main.cc diff --git a/boring_to_beautiful/step_06/linux/runner/my_application.cc b/boring_to_beautiful/step_06/linux/runner/my_application.cc new file mode 100644 index 0000000000..f93ba9f71c --- /dev/null +++ b/boring_to_beautiful/step_06/linux/runner/my_application.cc @@ -0,0 +1,130 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "myartist"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "myartist"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/boring_to_beautiful/step_06/linux/my_application.h b/boring_to_beautiful/step_06/linux/runner/my_application.h similarity index 100% rename from boring_to_beautiful/step_06/linux/my_application.h rename to boring_to_beautiful/step_06/linux/runner/my_application.h diff --git a/boring_to_beautiful/step_06/macos/Runner.xcodeproj/project.pbxproj b/boring_to_beautiful/step_06/macos/Runner.xcodeproj/project.pbxproj index 11e7ec7971..934ea98536 100644 --- a/boring_to_beautiful/step_06/macos/Runner.xcodeproj/project.pbxproj +++ b/boring_to_beautiful/step_06/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ - 122A14BB17CAE5827A96C600 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E721C61EEA1D01D1541205E2 /* Pods_RunnerTests.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - C0A311100478C3723AF3A1A3 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2B7F6D65CBE030418F0F8AFE /* Pods_Runner.framework */; }; + 7D7A4A5CAEB316CD69FCEFCD /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DBF93DFB67EA7D2AD5967AE4 /* Pods_Runner.framework */; }; + A3110385685B3E3544E9425E /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 14444A669D4E611BC45B0FB6 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,10 +62,7 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 095235CA8E3718CE04BECCFD /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - 1965E0AFE652202B66FE3359 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - 2B7F6D65CBE030418F0F8AFE /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 2BE96204F8153212C1B2FFD5 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 14444A669D4E611BC45B0FB6 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -82,12 +79,15 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; + 4ECA459CDC624519673B0579 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 5BD2C9EEA1CFBEC2C3745D8F /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; + 8A22315681F20849245600B8 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - B1C9C34FAF086E24D95B4FE5 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - B2992FC7568D7321F2EE4E8A /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - DA0493143D84740D445AC807 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - E721C61EEA1D01D1541205E2 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + DBF93DFB67EA7D2AD5967AE4 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + ED098600EDD4C45849C1CA92 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + F432CC14780751D0ECFDA11E /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + F962DA6A47D4A923B2BF1844 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 122A14BB17CAE5827A96C600 /* Pods_RunnerTests.framework in Frameworks */, + A3110385685B3E3544E9425E /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,27 +103,13 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - C0A311100478C3723AF3A1A3 /* Pods_Runner.framework in Frameworks */, + 7D7A4A5CAEB316CD69FCEFCD /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 1B3BB2FE7EC0BD319E6A18A5 /* Pods */ = { - isa = PBXGroup; - children = ( - B1C9C34FAF086E24D95B4FE5 /* Pods-Runner.debug.xcconfig */, - B2992FC7568D7321F2EE4E8A /* Pods-Runner.release.xcconfig */, - DA0493143D84740D445AC807 /* Pods-Runner.profile.xcconfig */, - 2BE96204F8153212C1B2FFD5 /* Pods-RunnerTests.debug.xcconfig */, - 095235CA8E3718CE04BECCFD /* Pods-RunnerTests.release.xcconfig */, - 1965E0AFE652202B66FE3359 /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; 331C80D6294CF71000263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -151,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 1B3BB2FE7EC0BD319E6A18A5 /* Pods */, + 97F435B99F0F5B9104CCDE86 /* Pods */, ); sourceTree = ""; }; @@ -199,11 +185,25 @@ path = Runner; sourceTree = ""; }; + 97F435B99F0F5B9104CCDE86 /* Pods */ = { + isa = PBXGroup; + children = ( + 8A22315681F20849245600B8 /* Pods-Runner.debug.xcconfig */, + ED098600EDD4C45849C1CA92 /* Pods-Runner.release.xcconfig */, + 5BD2C9EEA1CFBEC2C3745D8F /* Pods-Runner.profile.xcconfig */, + F962DA6A47D4A923B2BF1844 /* Pods-RunnerTests.debug.xcconfig */, + 4ECA459CDC624519673B0579 /* Pods-RunnerTests.release.xcconfig */, + F432CC14780751D0ECFDA11E /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - 2B7F6D65CBE030418F0F8AFE /* Pods_Runner.framework */, - E721C61EEA1D01D1541205E2 /* Pods_RunnerTests.framework */, + DBF93DFB67EA7D2AD5967AE4 /* Pods_Runner.framework */, + 14444A669D4E611BC45B0FB6 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 8BBDD854D9E775DA9D2E29E7 /* [CP] Check Pods Manifest.lock */, + B4A4E318F1203470DDF09086 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 8D3EC8A5A25E8C0969226ECA /* [CP] Check Pods Manifest.lock */, + 7D680C9A459DF63FFB6BB961 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 33B24C690BD4B02DCC978698 /* [CP] Embed Pods Frameworks */, + 924BD049CB0C75A05F45C790 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -341,23 +341,6 @@ shellPath = /bin/sh; shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; }; - 33B24C690BD4B02DCC978698 /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; 33CC111E2044C6BF0003C045 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -378,7 +361,7 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 8BBDD854D9E775DA9D2E29E7 /* [CP] Check Pods Manifest.lock */ = { + 7D680C9A459DF63FFB6BB961 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -393,14 +376,31 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 8D3EC8A5A25E8C0969226ECA /* [CP] Check Pods Manifest.lock */ = { + 924BD049CB0C75A05F45C790 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; + B4A4E318F1203470DDF09086 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -415,7 +415,7 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 2BE96204F8153212C1B2FFD5 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = F962DA6A47D4A923B2BF1844 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 095235CA8E3718CE04BECCFD /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 4ECA459CDC624519673B0579 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 1965E0AFE652202B66FE3359 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = F432CC14780751D0ECFDA11E /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/boring_to_beautiful/step_06/pubspec.yaml b/boring_to_beautiful/step_06/pubspec.yaml index 6452298e93..0bc88d24c3 100644 --- a/boring_to_beautiful/step_06/pubspec.yaml +++ b/boring_to_beautiful/step_06/pubspec.yaml @@ -15,12 +15,12 @@ dependencies: animations: ^2.0.11 collection: ^1.19.0 cupertino_icons: ^1.0.8 - desktop_window: ^0.4.1 + desktop_window: ^0.4.2 dynamic_color: ^1.7.0 english_words: ^4.0.0 flutter_bloc: ^8.1.6 freezed_annotation: ^2.4.4 - go_router: ^14.3.0 + go_router: ^14.5.0 material_color_utilities: any universal_platform: ^1.1.0 url_launcher: ^6.3.1 diff --git a/boring_to_beautiful/step_06/web/index.html b/boring_to_beautiful/step_06/web/index.html index 0a8bd1ab80..e0a0abbbbf 100644 --- a/boring_to_beautiful/step_06/web/index.html +++ b/boring_to_beautiful/step_06/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/boring_to_beautiful/step_07/ios/Runner.xcodeproj/project.pbxproj b/boring_to_beautiful/step_07/ios/Runner.xcodeproj/project.pbxproj index d33a503139..8c24a73146 100644 --- a/boring_to_beautiful/step_07/ios/Runner.xcodeproj/project.pbxproj +++ b/boring_to_beautiful/step_07/ios/Runner.xcodeproj/project.pbxproj @@ -10,12 +10,12 @@ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; - 49381EA0685B1F13BE864379 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CB41BC21C7A12C73E18A4BD4 /* Pods_RunnerTests.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - C0064E05A4506D109FC14284 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FF179308D1EFBD41B1CD1303 /* Pods_Runner.framework */; }; + 9B56D0E6D2220ABAA3DCF805 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 66AE42AB618EEF74EA35FAFF /* Pods_Runner.framework */; }; + B589DC7DC7B2D3D3438369C2 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E5357285461CA23D84727993 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -44,14 +44,13 @@ /* Begin PBXFileReference section */ 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 1EC93CE997E0EDD54CB41295 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 2CFC8D32DC8431A771DB05E5 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 458F284D4389ADAFFD7FBAA5 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 46ED109558BB0B52911CEDF2 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - 507F761A690329C8C75A65E2 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 57AE46D9D874FE5FFBB3E047 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 54DBFF5C8D89E736A0167B68 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 5A4EA9B6A5B733A5877FACBC /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 66AE42AB618EEF74EA35FAFF /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; @@ -62,17 +61,18 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - AA54CE87B515BC3531FEEF48 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - CB41BC21C7A12C73E18A4BD4 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - FF179308D1EFBD41B1CD1303 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 9CDB7B42A6F8620995CB6CF2 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + CC18E624AAFABC6DD311F438 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + E5357285461CA23D84727993 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + F5AF1F094CAA852F7BFA8616 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 515422840D633F6AC1588AC7 /* Frameworks */ = { + 1ECFA6AA5DAB14ADED5C4715 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 49381EA0685B1F13BE864379 /* Pods_RunnerTests.framework in Frameworks */, + B589DC7DC7B2D3D3438369C2 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -80,7 +80,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - C0064E05A4506D109FC14284 /* Pods_Runner.framework in Frameworks */, + 9B56D0E6D2220ABAA3DCF805 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -95,15 +95,6 @@ path = RunnerTests; sourceTree = ""; }; - 760CB6645FC65AE3E9230AD2 /* Frameworks */ = { - isa = PBXGroup; - children = ( - FF179308D1EFBD41B1CD1303 /* Pods_Runner.framework */, - CB41BC21C7A12C73E18A4BD4 /* Pods_RunnerTests.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( @@ -122,8 +113,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - BD60B01F7CC3F37BDE902B8C /* Pods */, - 760CB6645FC65AE3E9230AD2 /* Frameworks */, + D3F2C84AD816806F625749C5 /* Pods */, + CB82902E04104E07EF849C18 /* Frameworks */, ); sourceTree = ""; }; @@ -151,15 +142,24 @@ path = Runner; sourceTree = ""; }; - BD60B01F7CC3F37BDE902B8C /* Pods */ = { + CB82902E04104E07EF849C18 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 66AE42AB618EEF74EA35FAFF /* Pods_Runner.framework */, + E5357285461CA23D84727993 /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; + D3F2C84AD816806F625749C5 /* Pods */ = { isa = PBXGroup; children = ( - 507F761A690329C8C75A65E2 /* Pods-Runner.debug.xcconfig */, - 458F284D4389ADAFFD7FBAA5 /* Pods-Runner.release.xcconfig */, - 46ED109558BB0B52911CEDF2 /* Pods-Runner.profile.xcconfig */, - AA54CE87B515BC3531FEEF48 /* Pods-RunnerTests.debug.xcconfig */, - 57AE46D9D874FE5FFBB3E047 /* Pods-RunnerTests.release.xcconfig */, - 1EC93CE997E0EDD54CB41295 /* Pods-RunnerTests.profile.xcconfig */, + 54DBFF5C8D89E736A0167B68 /* Pods-Runner.debug.xcconfig */, + 9CDB7B42A6F8620995CB6CF2 /* Pods-Runner.release.xcconfig */, + CC18E624AAFABC6DD311F438 /* Pods-Runner.profile.xcconfig */, + 5A4EA9B6A5B733A5877FACBC /* Pods-RunnerTests.debug.xcconfig */, + 2CFC8D32DC8431A771DB05E5 /* Pods-RunnerTests.release.xcconfig */, + F5AF1F094CAA852F7BFA8616 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - D56C93D4DD0C64DF97BCE97D /* [CP] Check Pods Manifest.lock */, + 34D2B9D1D9CE963363BA0A5B /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 515422840D633F6AC1588AC7 /* Frameworks */, + 1ECFA6AA5DAB14ADED5C4715 /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 41BD58AF92D87F35673F336C /* [CP] Check Pods Manifest.lock */, + 713F52C5655971916519E71C /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 4BF732A76041B0DBA38F7214 /* [CP] Embed Pods Frameworks */, + 4B094A3D6BA73A5B5C65723A /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -270,45 +270,45 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + 34D2B9D1D9CE963363BA0A5B /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( - "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "Thin Binary"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - 41BD58AF92D87F35673F336C /* [CP] Check Pods Manifest.lock */ = { + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); + name = "Thin Binary"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 4BF732A76041B0DBA38F7214 /* [CP] Embed Pods Frameworks */ = { + 4B094A3D6BA73A5B5C65723A /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -325,42 +325,42 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { + 713F52C5655971916519E71C /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "Run Script"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - D56C93D4DD0C64DF97BCE97D /* [CP] Check Pods Manifest.lock */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( ); + name = "Run Script"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; /* End PBXShellScriptBuildPhase section */ @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = AA54CE87B515BC3531FEEF48 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 5A4EA9B6A5B733A5877FACBC /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 57AE46D9D874FE5FFBB3E047 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 2CFC8D32DC8431A771DB05E5 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 1EC93CE997E0EDD54CB41295 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = F5AF1F094CAA852F7BFA8616 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/boring_to_beautiful/step_07/linux/CMakeLists.txt b/boring_to_beautiful/step_07/linux/CMakeLists.txt index 74a8344fa9..0565f6a409 100644 --- a/boring_to_beautiful/step_07/linux/CMakeLists.txt +++ b/boring_to_beautiful/step_07/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/boring_to_beautiful/step_07/linux/my_application.cc b/boring_to_beautiful/step_07/linux/my_application.cc deleted file mode 100644 index 59e1394236..0000000000 --- a/boring_to_beautiful/step_07/linux/my_application.cc +++ /dev/null @@ -1,124 +0,0 @@ -#include "my_application.h" - -#include -#ifdef GDK_WINDOWING_X11 -#include -#endif - -#include "flutter/generated_plugin_registrant.h" - -struct _MyApplication { - GtkApplication parent_instance; - char** dart_entrypoint_arguments; -}; - -G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) - -// Implements GApplication::activate. -static void my_application_activate(GApplication* application) { - MyApplication* self = MY_APPLICATION(application); - GtkWindow* window = - GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); - - // Use a header bar when running in GNOME as this is the common style used - // by applications and is the setup most users will be using (e.g. Ubuntu - // desktop). - // If running on X and not using GNOME then just use a traditional title bar - // in case the window manager does more exotic layout, e.g. tiling. - // If running on Wayland assume the header bar will work (may need changing - // if future cases occur). - gboolean use_header_bar = TRUE; -#ifdef GDK_WINDOWING_X11 - GdkScreen* screen = gtk_window_get_screen(window); - if (GDK_IS_X11_SCREEN(screen)) { - const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); - if (g_strcmp0(wm_name, "GNOME Shell") != 0) { - use_header_bar = FALSE; - } - } -#endif - if (use_header_bar) { - GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); - gtk_widget_show(GTK_WIDGET(header_bar)); - gtk_header_bar_set_title(header_bar, "myartist"); - gtk_header_bar_set_show_close_button(header_bar, TRUE); - gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); - } else { - gtk_window_set_title(window, "myartist"); - } - - gtk_window_set_default_size(window, 1280, 720); - gtk_widget_show(GTK_WIDGET(window)); - - g_autoptr(FlDartProject) project = fl_dart_project_new(); - fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); - - FlView* view = fl_view_new(project); - gtk_widget_show(GTK_WIDGET(view)); - gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); - - fl_register_plugins(FL_PLUGIN_REGISTRY(view)); - - gtk_widget_grab_focus(GTK_WIDGET(view)); -} - -// Implements GApplication::local_command_line. -static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { - MyApplication* self = MY_APPLICATION(application); - // Strip out the first argument as it is the binary name. - self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); - - g_autoptr(GError) error = nullptr; - if (!g_application_register(application, nullptr, &error)) { - g_warning("Failed to register: %s", error->message); - *exit_status = 1; - return TRUE; - } - - g_application_activate(application); - *exit_status = 0; - - return TRUE; -} - -// Implements GApplication::startup. -static void my_application_startup(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application startup. - - G_APPLICATION_CLASS(my_application_parent_class)->startup(application); -} - -// Implements GApplication::shutdown. -static void my_application_shutdown(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application shutdown. - - G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); -} - -// Implements GObject::dispose. -static void my_application_dispose(GObject* object) { - MyApplication* self = MY_APPLICATION(object); - g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); - G_OBJECT_CLASS(my_application_parent_class)->dispose(object); -} - -static void my_application_class_init(MyApplicationClass* klass) { - G_APPLICATION_CLASS(klass)->activate = my_application_activate; - G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; - G_APPLICATION_CLASS(klass)->startup = my_application_startup; - G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; - G_OBJECT_CLASS(klass)->dispose = my_application_dispose; -} - -static void my_application_init(MyApplication* self) {} - -MyApplication* my_application_new() { - return MY_APPLICATION(g_object_new(my_application_get_type(), - "application-id", APPLICATION_ID, - "flags", G_APPLICATION_NON_UNIQUE, - nullptr)); -} diff --git a/boring_to_beautiful/step_07/linux/runner/CMakeLists.txt b/boring_to_beautiful/step_07/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/boring_to_beautiful/step_07/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/boring_to_beautiful/step_07/linux/main.cc b/boring_to_beautiful/step_07/linux/runner/main.cc similarity index 100% rename from boring_to_beautiful/step_07/linux/main.cc rename to boring_to_beautiful/step_07/linux/runner/main.cc diff --git a/boring_to_beautiful/step_07/linux/runner/my_application.cc b/boring_to_beautiful/step_07/linux/runner/my_application.cc new file mode 100644 index 0000000000..f93ba9f71c --- /dev/null +++ b/boring_to_beautiful/step_07/linux/runner/my_application.cc @@ -0,0 +1,130 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "myartist"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "myartist"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/boring_to_beautiful/step_07/linux/my_application.h b/boring_to_beautiful/step_07/linux/runner/my_application.h similarity index 100% rename from boring_to_beautiful/step_07/linux/my_application.h rename to boring_to_beautiful/step_07/linux/runner/my_application.h diff --git a/boring_to_beautiful/step_07/macos/Runner.xcodeproj/project.pbxproj b/boring_to_beautiful/step_07/macos/Runner.xcodeproj/project.pbxproj index 11e7ec7971..934ea98536 100644 --- a/boring_to_beautiful/step_07/macos/Runner.xcodeproj/project.pbxproj +++ b/boring_to_beautiful/step_07/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ - 122A14BB17CAE5827A96C600 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E721C61EEA1D01D1541205E2 /* Pods_RunnerTests.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - C0A311100478C3723AF3A1A3 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2B7F6D65CBE030418F0F8AFE /* Pods_Runner.framework */; }; + 7D7A4A5CAEB316CD69FCEFCD /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DBF93DFB67EA7D2AD5967AE4 /* Pods_Runner.framework */; }; + A3110385685B3E3544E9425E /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 14444A669D4E611BC45B0FB6 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,10 +62,7 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 095235CA8E3718CE04BECCFD /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - 1965E0AFE652202B66FE3359 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - 2B7F6D65CBE030418F0F8AFE /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 2BE96204F8153212C1B2FFD5 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 14444A669D4E611BC45B0FB6 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -82,12 +79,15 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; + 4ECA459CDC624519673B0579 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 5BD2C9EEA1CFBEC2C3745D8F /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; + 8A22315681F20849245600B8 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - B1C9C34FAF086E24D95B4FE5 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - B2992FC7568D7321F2EE4E8A /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - DA0493143D84740D445AC807 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - E721C61EEA1D01D1541205E2 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + DBF93DFB67EA7D2AD5967AE4 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + ED098600EDD4C45849C1CA92 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + F432CC14780751D0ECFDA11E /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + F962DA6A47D4A923B2BF1844 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 122A14BB17CAE5827A96C600 /* Pods_RunnerTests.framework in Frameworks */, + A3110385685B3E3544E9425E /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,27 +103,13 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - C0A311100478C3723AF3A1A3 /* Pods_Runner.framework in Frameworks */, + 7D7A4A5CAEB316CD69FCEFCD /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 1B3BB2FE7EC0BD319E6A18A5 /* Pods */ = { - isa = PBXGroup; - children = ( - B1C9C34FAF086E24D95B4FE5 /* Pods-Runner.debug.xcconfig */, - B2992FC7568D7321F2EE4E8A /* Pods-Runner.release.xcconfig */, - DA0493143D84740D445AC807 /* Pods-Runner.profile.xcconfig */, - 2BE96204F8153212C1B2FFD5 /* Pods-RunnerTests.debug.xcconfig */, - 095235CA8E3718CE04BECCFD /* Pods-RunnerTests.release.xcconfig */, - 1965E0AFE652202B66FE3359 /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; 331C80D6294CF71000263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -151,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 1B3BB2FE7EC0BD319E6A18A5 /* Pods */, + 97F435B99F0F5B9104CCDE86 /* Pods */, ); sourceTree = ""; }; @@ -199,11 +185,25 @@ path = Runner; sourceTree = ""; }; + 97F435B99F0F5B9104CCDE86 /* Pods */ = { + isa = PBXGroup; + children = ( + 8A22315681F20849245600B8 /* Pods-Runner.debug.xcconfig */, + ED098600EDD4C45849C1CA92 /* Pods-Runner.release.xcconfig */, + 5BD2C9EEA1CFBEC2C3745D8F /* Pods-Runner.profile.xcconfig */, + F962DA6A47D4A923B2BF1844 /* Pods-RunnerTests.debug.xcconfig */, + 4ECA459CDC624519673B0579 /* Pods-RunnerTests.release.xcconfig */, + F432CC14780751D0ECFDA11E /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - 2B7F6D65CBE030418F0F8AFE /* Pods_Runner.framework */, - E721C61EEA1D01D1541205E2 /* Pods_RunnerTests.framework */, + DBF93DFB67EA7D2AD5967AE4 /* Pods_Runner.framework */, + 14444A669D4E611BC45B0FB6 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 8BBDD854D9E775DA9D2E29E7 /* [CP] Check Pods Manifest.lock */, + B4A4E318F1203470DDF09086 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 8D3EC8A5A25E8C0969226ECA /* [CP] Check Pods Manifest.lock */, + 7D680C9A459DF63FFB6BB961 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 33B24C690BD4B02DCC978698 /* [CP] Embed Pods Frameworks */, + 924BD049CB0C75A05F45C790 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -341,23 +341,6 @@ shellPath = /bin/sh; shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; }; - 33B24C690BD4B02DCC978698 /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; 33CC111E2044C6BF0003C045 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -378,7 +361,7 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 8BBDD854D9E775DA9D2E29E7 /* [CP] Check Pods Manifest.lock */ = { + 7D680C9A459DF63FFB6BB961 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -393,14 +376,31 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 8D3EC8A5A25E8C0969226ECA /* [CP] Check Pods Manifest.lock */ = { + 924BD049CB0C75A05F45C790 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; + B4A4E318F1203470DDF09086 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -415,7 +415,7 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 2BE96204F8153212C1B2FFD5 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = F962DA6A47D4A923B2BF1844 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 095235CA8E3718CE04BECCFD /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 4ECA459CDC624519673B0579 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 1965E0AFE652202B66FE3359 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = F432CC14780751D0ECFDA11E /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/boring_to_beautiful/step_07/pubspec.yaml b/boring_to_beautiful/step_07/pubspec.yaml index 6452298e93..0bc88d24c3 100644 --- a/boring_to_beautiful/step_07/pubspec.yaml +++ b/boring_to_beautiful/step_07/pubspec.yaml @@ -15,12 +15,12 @@ dependencies: animations: ^2.0.11 collection: ^1.19.0 cupertino_icons: ^1.0.8 - desktop_window: ^0.4.1 + desktop_window: ^0.4.2 dynamic_color: ^1.7.0 english_words: ^4.0.0 flutter_bloc: ^8.1.6 freezed_annotation: ^2.4.4 - go_router: ^14.3.0 + go_router: ^14.5.0 material_color_utilities: any universal_platform: ^1.1.0 url_launcher: ^6.3.1 diff --git a/boring_to_beautiful/step_07/web/index.html b/boring_to_beautiful/step_07/web/index.html index 0a8bd1ab80..e0a0abbbbf 100644 --- a/boring_to_beautiful/step_07/web/index.html +++ b/boring_to_beautiful/step_07/web/index.html @@ -21,7 +21,7 @@ - + From c73b25ef5145f8e8a4f64cddcb7fbb4c8b607af8 Mon Sep 17 00:00:00 2001 From: Brett Morgan Date: Wed, 13 Nov 2024 06:25:12 +1100 Subject: [PATCH 039/108] Update `brick_breaker` --- .../ios/Runner.xcodeproj/project.pbxproj | 132 +++++++++--------- brick_breaker/step_03/linux/CMakeLists.txt | 23 +-- .../step_03/linux/runner/CMakeLists.txt | 26 ++++ .../step_03/linux/{ => runner}/main.cc | 0 .../linux/{ => runner}/my_application.cc | 6 + .../linux/{ => runner}/my_application.h | 0 .../macos/Runner.xcodeproj/project.pbxproj | 112 +++++++-------- brick_breaker/step_03/web/index.html | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 132 +++++++++--------- brick_breaker/step_04/linux/CMakeLists.txt | 23 +-- .../step_04/linux/runner/CMakeLists.txt | 26 ++++ .../step_04/linux/{ => runner}/main.cc | 0 .../linux/{ => runner}/my_application.cc | 6 + .../linux/{ => runner}/my_application.h | 0 .../macos/Runner.xcodeproj/project.pbxproj | 112 +++++++-------- brick_breaker/step_04/web/index.html | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 132 +++++++++--------- brick_breaker/step_05/linux/CMakeLists.txt | 23 +-- .../step_05/linux/runner/CMakeLists.txt | 26 ++++ .../step_05/linux/{ => runner}/main.cc | 0 .../linux/{ => runner}/my_application.cc | 6 + .../linux/{ => runner}/my_application.h | 0 .../macos/Runner.xcodeproj/project.pbxproj | 112 +++++++-------- brick_breaker/step_05/web/index.html | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 132 +++++++++--------- brick_breaker/step_06/linux/CMakeLists.txt | 23 +-- .../step_06/linux/runner/CMakeLists.txt | 26 ++++ .../step_06/linux/{ => runner}/main.cc | 0 .../linux/{ => runner}/my_application.cc | 6 + .../linux/{ => runner}/my_application.h | 0 .../macos/Runner.xcodeproj/project.pbxproj | 112 +++++++-------- brick_breaker/step_06/web/index.html | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 132 +++++++++--------- brick_breaker/step_07/linux/CMakeLists.txt | 23 +-- brick_breaker/step_07/linux/my_application.cc | 124 ---------------- .../step_07/linux/runner/CMakeLists.txt | 26 ++++ .../step_07/linux/{ => runner}/main.cc | 0 .../step_07/linux/runner/my_application.cc | 130 +++++++++++++++++ .../linux/{ => runner}/my_application.h | 0 .../macos/Runner.xcodeproj/project.pbxproj | 112 +++++++-------- brick_breaker/step_07/web/index.html | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 132 +++++++++--------- brick_breaker/step_08/linux/CMakeLists.txt | 23 +-- brick_breaker/step_08/linux/my_application.cc | 124 ---------------- .../step_08/linux/runner/CMakeLists.txt | 26 ++++ .../step_08/linux/{ => runner}/main.cc | 0 .../step_08/linux/runner/my_application.cc | 130 +++++++++++++++++ .../linux/{ => runner}/my_application.h | 0 .../macos/Runner.xcodeproj/project.pbxproj | 112 +++++++-------- brick_breaker/step_08/web/index.html | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 132 +++++++++--------- brick_breaker/step_09/linux/CMakeLists.txt | 23 +-- brick_breaker/step_09/linux/my_application.cc | 124 ---------------- .../step_09/linux/runner/CMakeLists.txt | 26 ++++ .../step_09/linux/{ => runner}/main.cc | 0 .../step_09/linux/runner/my_application.cc | 130 +++++++++++++++++ .../linux/{ => runner}/my_application.h | 0 .../macos/Runner.xcodeproj/project.pbxproj | 112 +++++++-------- brick_breaker/step_09/web/index.html | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 132 +++++++++--------- brick_breaker/step_10/linux/CMakeLists.txt | 23 +-- brick_breaker/step_10/linux/my_application.cc | 124 ---------------- .../step_10/linux/runner/CMakeLists.txt | 26 ++++ .../step_10/linux/{ => runner}/main.cc | 0 .../step_10/linux/runner/my_application.cc | 130 +++++++++++++++++ .../linux/{ => runner}/my_application.h | 0 .../macos/Runner.xcodeproj/project.pbxproj | 112 +++++++-------- brick_breaker/step_10/web/index.html | 2 +- 68 files changed, 1760 insertions(+), 1640 deletions(-) create mode 100644 brick_breaker/step_03/linux/runner/CMakeLists.txt rename brick_breaker/step_03/linux/{ => runner}/main.cc (100%) rename brick_breaker/step_03/linux/{ => runner}/my_application.cc (93%) rename brick_breaker/step_03/linux/{ => runner}/my_application.h (100%) create mode 100644 brick_breaker/step_04/linux/runner/CMakeLists.txt rename brick_breaker/step_04/linux/{ => runner}/main.cc (100%) rename brick_breaker/step_04/linux/{ => runner}/my_application.cc (93%) rename brick_breaker/step_04/linux/{ => runner}/my_application.h (100%) create mode 100644 brick_breaker/step_05/linux/runner/CMakeLists.txt rename brick_breaker/step_05/linux/{ => runner}/main.cc (100%) rename brick_breaker/step_05/linux/{ => runner}/my_application.cc (93%) rename brick_breaker/step_05/linux/{ => runner}/my_application.h (100%) create mode 100644 brick_breaker/step_06/linux/runner/CMakeLists.txt rename brick_breaker/step_06/linux/{ => runner}/main.cc (100%) rename brick_breaker/step_06/linux/{ => runner}/my_application.cc (93%) rename brick_breaker/step_06/linux/{ => runner}/my_application.h (100%) delete mode 100644 brick_breaker/step_07/linux/my_application.cc create mode 100644 brick_breaker/step_07/linux/runner/CMakeLists.txt rename brick_breaker/step_07/linux/{ => runner}/main.cc (100%) create mode 100644 brick_breaker/step_07/linux/runner/my_application.cc rename brick_breaker/step_07/linux/{ => runner}/my_application.h (100%) delete mode 100644 brick_breaker/step_08/linux/my_application.cc create mode 100644 brick_breaker/step_08/linux/runner/CMakeLists.txt rename brick_breaker/step_08/linux/{ => runner}/main.cc (100%) create mode 100644 brick_breaker/step_08/linux/runner/my_application.cc rename brick_breaker/step_08/linux/{ => runner}/my_application.h (100%) delete mode 100644 brick_breaker/step_09/linux/my_application.cc create mode 100644 brick_breaker/step_09/linux/runner/CMakeLists.txt rename brick_breaker/step_09/linux/{ => runner}/main.cc (100%) create mode 100644 brick_breaker/step_09/linux/runner/my_application.cc rename brick_breaker/step_09/linux/{ => runner}/my_application.h (100%) delete mode 100644 brick_breaker/step_10/linux/my_application.cc create mode 100644 brick_breaker/step_10/linux/runner/CMakeLists.txt rename brick_breaker/step_10/linux/{ => runner}/main.cc (100%) create mode 100644 brick_breaker/step_10/linux/runner/my_application.cc rename brick_breaker/step_10/linux/{ => runner}/my_application.h (100%) diff --git a/brick_breaker/step_03/ios/Runner.xcodeproj/project.pbxproj b/brick_breaker/step_03/ios/Runner.xcodeproj/project.pbxproj index 6d1a96d63a..add9e55410 100644 --- a/brick_breaker/step_03/ios/Runner.xcodeproj/project.pbxproj +++ b/brick_breaker/step_03/ios/Runner.xcodeproj/project.pbxproj @@ -8,14 +8,14 @@ /* Begin PBXBuildFile section */ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; + 29AD4F65B90DCD21875C2A4C /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C931705C418493DC02E52C6A /* Pods_Runner.framework */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; - 435C672EDB3C79EF8289B1E5 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9C8A6BA03FC59B0344DC9E5F /* Pods_RunnerTests.framework */; }; - 4894AF48D2F94D6F1DABB2D3 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 57D6C7E904CFDCF3B7D477C6 /* Pods_Runner.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; + BB5BED3E580B45F0CD80E554 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B5F63ADA01AF049FFFC5CB39 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -47,14 +47,13 @@ 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 43E393EFCAC4AAC9B6E9AB99 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 4E857F5A50355F5D8711BD08 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 57D6C7E904CFDCF3B7D477C6 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 71648F3D10B18A805A5C5B83 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 58E4120D718D183216E2F816 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 71F43AEF029360DE99B40B6F /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 91AE6679660B5BFDE37CA10C /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 7D4452472D5AF425A635039C /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 87D6F4AFB2A01D1CBC283DBE /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -62,31 +61,41 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 9C8A6BA03FC59B0344DC9E5F /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - AC955D3DBF778EEBAF66455F /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - F6D81E7FFA76393DDD83EDE7 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + B5F63ADA01AF049FFFC5CB39 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + C931705C418493DC02E52C6A /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D510FFBF1E5D8C842D1A1042 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + D5D7E82A3FEE48552A1B1A9A /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 0B544D9D6451D8B7513063BD /* Frameworks */ = { + 97C146EB1CF9000F007C117D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 435C672EDB3C79EF8289B1E5 /* Pods_RunnerTests.framework in Frameworks */, + 29AD4F65B90DCD21875C2A4C /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 97C146EB1CF9000F007C117D /* Frameworks */ = { + CF0381FD905E27D8E4FA4E94 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 4894AF48D2F94D6F1DABB2D3 /* Pods_Runner.framework in Frameworks */, + BB5BED3E580B45F0CD80E554 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 2078C8554440C2F9205D6B5A /* Frameworks */ = { + isa = PBXGroup; + children = ( + C931705C418493DC02E52C6A /* Pods_Runner.framework */, + B5F63ADA01AF049FFFC5CB39 /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; 331C8082294A63A400263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -95,15 +104,15 @@ path = RunnerTests; sourceTree = ""; }; - 9135670FD92EB74D54D0AB79 /* Pods */ = { + 56387D4532B1071467568739 /* Pods */ = { isa = PBXGroup; children = ( - 43E393EFCAC4AAC9B6E9AB99 /* Pods-Runner.debug.xcconfig */, - 4E857F5A50355F5D8711BD08 /* Pods-Runner.release.xcconfig */, - F6D81E7FFA76393DDD83EDE7 /* Pods-Runner.profile.xcconfig */, - 71648F3D10B18A805A5C5B83 /* Pods-RunnerTests.debug.xcconfig */, - AC955D3DBF778EEBAF66455F /* Pods-RunnerTests.release.xcconfig */, - 91AE6679660B5BFDE37CA10C /* Pods-RunnerTests.profile.xcconfig */, + 87D6F4AFB2A01D1CBC283DBE /* Pods-Runner.debug.xcconfig */, + 71F43AEF029360DE99B40B6F /* Pods-Runner.release.xcconfig */, + D510FFBF1E5D8C842D1A1042 /* Pods-Runner.profile.xcconfig */, + 7D4452472D5AF425A635039C /* Pods-RunnerTests.debug.xcconfig */, + 58E4120D718D183216E2F816 /* Pods-RunnerTests.release.xcconfig */, + D5D7E82A3FEE48552A1B1A9A /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -127,8 +136,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - 9135670FD92EB74D54D0AB79 /* Pods */, - F20E1DAAA380CE8C17F7F24D /* Frameworks */, + 56387D4532B1071467568739 /* Pods */, + 2078C8554440C2F9205D6B5A /* Frameworks */, ); sourceTree = ""; }; @@ -156,15 +165,6 @@ path = Runner; sourceTree = ""; }; - F20E1DAAA380CE8C17F7F24D /* Frameworks */ = { - isa = PBXGroup; - children = ( - 57D6C7E904CFDCF3B7D477C6 /* Pods_Runner.framework */, - 9C8A6BA03FC59B0344DC9E5F /* Pods_RunnerTests.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - B0951A5E64A8BCDFA6315953 /* [CP] Check Pods Manifest.lock */, + 6B43BA0ED7A59E5F9E7824A9 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 0B544D9D6451D8B7513063BD /* Frameworks */, + CF0381FD905E27D8E4FA4E94 /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - C6BE0A2E972E4BF469954FE7 /* [CP] Check Pods Manifest.lock */, + AD7073F8B2A8B9D7C73C1E2B /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - EA8C715000E3367B65E72722 /* [CP] Embed Pods Frameworks */, + 16BE037FF21DCFBC30C993A0 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -270,38 +270,40 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + 16BE037FF21DCFBC30C993A0 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputPaths = ( - "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "Thin Binary"; - outputPaths = ( + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); - name = "Run Script"; + name = "Thin Binary"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - B0951A5E64A8BCDFA6315953 /* [CP] Check Pods Manifest.lock */ = { + 6B43BA0ED7A59E5F9E7824A9 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -323,43 +325,41 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - C6BE0A2E972E4BF469954FE7 /* [CP] Check Pods Manifest.lock */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( ); + name = "Run Script"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - EA8C715000E3367B65E72722 /* [CP] Embed Pods Frameworks */ = { + AD7073F8B2A8B9D7C73C1E2B /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 71648F3D10B18A805A5C5B83 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 7D4452472D5AF425A635039C /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = AC955D3DBF778EEBAF66455F /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 58E4120D718D183216E2F816 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 91AE6679660B5BFDE37CA10C /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = D5D7E82A3FEE48552A1B1A9A /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/brick_breaker/step_03/linux/CMakeLists.txt b/brick_breaker/step_03/linux/CMakeLists.txt index 97c400e174..9f288a67f3 100644 --- a/brick_breaker/step_03/linux/CMakeLists.txt +++ b/brick_breaker/step_03/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/brick_breaker/step_03/linux/runner/CMakeLists.txt b/brick_breaker/step_03/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/brick_breaker/step_03/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/brick_breaker/step_03/linux/main.cc b/brick_breaker/step_03/linux/runner/main.cc similarity index 100% rename from brick_breaker/step_03/linux/main.cc rename to brick_breaker/step_03/linux/runner/main.cc diff --git a/brick_breaker/step_03/linux/my_application.cc b/brick_breaker/step_03/linux/runner/my_application.cc similarity index 93% rename from brick_breaker/step_03/linux/my_application.cc rename to brick_breaker/step_03/linux/runner/my_application.cc index 5f348fea29..f80944a7ba 100644 --- a/brick_breaker/step_03/linux/my_application.cc +++ b/brick_breaker/step_03/linux/runner/my_application.cc @@ -117,6 +117,12 @@ static void my_application_class_init(MyApplicationClass* klass) { static void my_application_init(MyApplication* self) {} MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + return MY_APPLICATION(g_object_new(my_application_get_type(), "application-id", APPLICATION_ID, "flags", G_APPLICATION_NON_UNIQUE, diff --git a/brick_breaker/step_03/linux/my_application.h b/brick_breaker/step_03/linux/runner/my_application.h similarity index 100% rename from brick_breaker/step_03/linux/my_application.h rename to brick_breaker/step_03/linux/runner/my_application.h diff --git a/brick_breaker/step_03/macos/Runner.xcodeproj/project.pbxproj b/brick_breaker/step_03/macos/Runner.xcodeproj/project.pbxproj index 139f2ab564..8a694eeb67 100644 --- a/brick_breaker/step_03/macos/Runner.xcodeproj/project.pbxproj +++ b/brick_breaker/step_03/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ - 26DEE62C40082E048AB2DAC9 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F92CB96B5E92665177C18209 /* Pods_Runner.framework */; }; - 302724C6CB220CF55A24A7F6 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6405B62D2CA2577368E77111 /* Pods_RunnerTests.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; + 5658E56B62B605B138A9F111 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B7BD0B1970D1897B74F07A89 /* Pods_Runner.framework */; }; + 9F81B80161B2124A9F488A1C /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DA8EE3E1AF83156D1A12CA68 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,11 +62,11 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 114979CB87B99A65FC62EC11 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; }; + 338EE091C1F9F5450098813D /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 33CC10ED2044A3C60003C045 /* brick_breaker.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = brick_breaker.app; sourceTree = BUILT_PRODUCTS_DIR; }; 33CC10F02044A3C60003C045 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 33CC10F22044A3C60003C045 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = Runner/Assets.xcassets; sourceTree = ""; }; @@ -79,15 +79,15 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 35582EBA48CF0CAD302E6F20 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 44116D975D14ACE930B555BE /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 6405B62D2CA2577368E77111 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 81C82BB4E8EABFAC2304248A /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 8267E521E815EC0C64F08901 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - E93D02470CD1D3EA960793F9 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - F92CB96B5E92665177C18209 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - FF398A0A44AD651D2C2EF977 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 9FD3C4B0DFBFF16743BD5FAF /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + B286950BC95C7F770C832B6E /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + B65E8CAEC95BEF8588C418A4 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + B7BD0B1970D1897B74F07A89 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + BCBDA775B0BEE126A464E62B /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + DA8EE3E1AF83156D1A12CA68 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 302724C6CB220CF55A24A7F6 /* Pods_RunnerTests.framework in Frameworks */, + 9F81B80161B2124A9F488A1C /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,27 +103,13 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 26DEE62C40082E048AB2DAC9 /* Pods_Runner.framework in Frameworks */, + 5658E56B62B605B138A9F111 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 1AD2B861098DC69EDF5A5504 /* Pods */ = { - isa = PBXGroup; - children = ( - 35582EBA48CF0CAD302E6F20 /* Pods-Runner.debug.xcconfig */, - 44116D975D14ACE930B555BE /* Pods-Runner.release.xcconfig */, - 114979CB87B99A65FC62EC11 /* Pods-Runner.profile.xcconfig */, - 81C82BB4E8EABFAC2304248A /* Pods-RunnerTests.debug.xcconfig */, - FF398A0A44AD651D2C2EF977 /* Pods-RunnerTests.release.xcconfig */, - E93D02470CD1D3EA960793F9 /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; 331C80D6294CF71000263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -151,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 1AD2B861098DC69EDF5A5504 /* Pods */, + C14890065505BEA860C9C768 /* Pods */, ); sourceTree = ""; }; @@ -199,11 +185,25 @@ path = Runner; sourceTree = ""; }; + C14890065505BEA860C9C768 /* Pods */ = { + isa = PBXGroup; + children = ( + 8267E521E815EC0C64F08901 /* Pods-Runner.debug.xcconfig */, + 338EE091C1F9F5450098813D /* Pods-Runner.release.xcconfig */, + B286950BC95C7F770C832B6E /* Pods-Runner.profile.xcconfig */, + B65E8CAEC95BEF8588C418A4 /* Pods-RunnerTests.debug.xcconfig */, + 9FD3C4B0DFBFF16743BD5FAF /* Pods-RunnerTests.release.xcconfig */, + BCBDA775B0BEE126A464E62B /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - F92CB96B5E92665177C18209 /* Pods_Runner.framework */, - 6405B62D2CA2577368E77111 /* Pods_RunnerTests.framework */, + B7BD0B1970D1897B74F07A89 /* Pods_Runner.framework */, + DA8EE3E1AF83156D1A12CA68 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - C4789C072FD8F107A45D1C43 /* [CP] Check Pods Manifest.lock */, + D9060D80D88FD22DB1DE6C3A /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 95500D3C1EE7FB7DACCE08DC /* [CP] Check Pods Manifest.lock */, + E437887DD480199527592E81 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - B311D48FC89BEDF4EB2DCDDE /* [CP] Embed Pods Frameworks */, + 23E4B333ADF5FCEE5E2EE136 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,6 +323,23 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ + 23E4B333ADF5FCEE5E2EE136 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -361,7 +378,7 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 95500D3C1EE7FB7DACCE08DC /* [CP] Check Pods Manifest.lock */ = { + D9060D80D88FD22DB1DE6C3A /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -376,31 +393,14 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - B311D48FC89BEDF4EB2DCDDE /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; - C4789C072FD8F107A45D1C43 /* [CP] Check Pods Manifest.lock */ = { + E437887DD480199527592E81 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -415,7 +415,7 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 81C82BB4E8EABFAC2304248A /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = B65E8CAEC95BEF8588C418A4 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = FF398A0A44AD651D2C2EF977 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 9FD3C4B0DFBFF16743BD5FAF /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = E93D02470CD1D3EA960793F9 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = BCBDA775B0BEE126A464E62B /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/brick_breaker/step_03/web/index.html b/brick_breaker/step_03/web/index.html index 0ffbea0397..da690bb6c1 100644 --- a/brick_breaker/step_03/web/index.html +++ b/brick_breaker/step_03/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/brick_breaker/step_04/ios/Runner.xcodeproj/project.pbxproj b/brick_breaker/step_04/ios/Runner.xcodeproj/project.pbxproj index 6d1a96d63a..add9e55410 100644 --- a/brick_breaker/step_04/ios/Runner.xcodeproj/project.pbxproj +++ b/brick_breaker/step_04/ios/Runner.xcodeproj/project.pbxproj @@ -8,14 +8,14 @@ /* Begin PBXBuildFile section */ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; + 29AD4F65B90DCD21875C2A4C /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C931705C418493DC02E52C6A /* Pods_Runner.framework */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; - 435C672EDB3C79EF8289B1E5 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9C8A6BA03FC59B0344DC9E5F /* Pods_RunnerTests.framework */; }; - 4894AF48D2F94D6F1DABB2D3 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 57D6C7E904CFDCF3B7D477C6 /* Pods_Runner.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; + BB5BED3E580B45F0CD80E554 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B5F63ADA01AF049FFFC5CB39 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -47,14 +47,13 @@ 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 43E393EFCAC4AAC9B6E9AB99 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 4E857F5A50355F5D8711BD08 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 57D6C7E904CFDCF3B7D477C6 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 71648F3D10B18A805A5C5B83 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 58E4120D718D183216E2F816 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 71F43AEF029360DE99B40B6F /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 91AE6679660B5BFDE37CA10C /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 7D4452472D5AF425A635039C /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 87D6F4AFB2A01D1CBC283DBE /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -62,31 +61,41 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 9C8A6BA03FC59B0344DC9E5F /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - AC955D3DBF778EEBAF66455F /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - F6D81E7FFA76393DDD83EDE7 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + B5F63ADA01AF049FFFC5CB39 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + C931705C418493DC02E52C6A /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D510FFBF1E5D8C842D1A1042 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + D5D7E82A3FEE48552A1B1A9A /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 0B544D9D6451D8B7513063BD /* Frameworks */ = { + 97C146EB1CF9000F007C117D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 435C672EDB3C79EF8289B1E5 /* Pods_RunnerTests.framework in Frameworks */, + 29AD4F65B90DCD21875C2A4C /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 97C146EB1CF9000F007C117D /* Frameworks */ = { + CF0381FD905E27D8E4FA4E94 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 4894AF48D2F94D6F1DABB2D3 /* Pods_Runner.framework in Frameworks */, + BB5BED3E580B45F0CD80E554 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 2078C8554440C2F9205D6B5A /* Frameworks */ = { + isa = PBXGroup; + children = ( + C931705C418493DC02E52C6A /* Pods_Runner.framework */, + B5F63ADA01AF049FFFC5CB39 /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; 331C8082294A63A400263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -95,15 +104,15 @@ path = RunnerTests; sourceTree = ""; }; - 9135670FD92EB74D54D0AB79 /* Pods */ = { + 56387D4532B1071467568739 /* Pods */ = { isa = PBXGroup; children = ( - 43E393EFCAC4AAC9B6E9AB99 /* Pods-Runner.debug.xcconfig */, - 4E857F5A50355F5D8711BD08 /* Pods-Runner.release.xcconfig */, - F6D81E7FFA76393DDD83EDE7 /* Pods-Runner.profile.xcconfig */, - 71648F3D10B18A805A5C5B83 /* Pods-RunnerTests.debug.xcconfig */, - AC955D3DBF778EEBAF66455F /* Pods-RunnerTests.release.xcconfig */, - 91AE6679660B5BFDE37CA10C /* Pods-RunnerTests.profile.xcconfig */, + 87D6F4AFB2A01D1CBC283DBE /* Pods-Runner.debug.xcconfig */, + 71F43AEF029360DE99B40B6F /* Pods-Runner.release.xcconfig */, + D510FFBF1E5D8C842D1A1042 /* Pods-Runner.profile.xcconfig */, + 7D4452472D5AF425A635039C /* Pods-RunnerTests.debug.xcconfig */, + 58E4120D718D183216E2F816 /* Pods-RunnerTests.release.xcconfig */, + D5D7E82A3FEE48552A1B1A9A /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -127,8 +136,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - 9135670FD92EB74D54D0AB79 /* Pods */, - F20E1DAAA380CE8C17F7F24D /* Frameworks */, + 56387D4532B1071467568739 /* Pods */, + 2078C8554440C2F9205D6B5A /* Frameworks */, ); sourceTree = ""; }; @@ -156,15 +165,6 @@ path = Runner; sourceTree = ""; }; - F20E1DAAA380CE8C17F7F24D /* Frameworks */ = { - isa = PBXGroup; - children = ( - 57D6C7E904CFDCF3B7D477C6 /* Pods_Runner.framework */, - 9C8A6BA03FC59B0344DC9E5F /* Pods_RunnerTests.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - B0951A5E64A8BCDFA6315953 /* [CP] Check Pods Manifest.lock */, + 6B43BA0ED7A59E5F9E7824A9 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 0B544D9D6451D8B7513063BD /* Frameworks */, + CF0381FD905E27D8E4FA4E94 /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - C6BE0A2E972E4BF469954FE7 /* [CP] Check Pods Manifest.lock */, + AD7073F8B2A8B9D7C73C1E2B /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - EA8C715000E3367B65E72722 /* [CP] Embed Pods Frameworks */, + 16BE037FF21DCFBC30C993A0 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -270,38 +270,40 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + 16BE037FF21DCFBC30C993A0 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputPaths = ( - "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "Thin Binary"; - outputPaths = ( + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); - name = "Run Script"; + name = "Thin Binary"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - B0951A5E64A8BCDFA6315953 /* [CP] Check Pods Manifest.lock */ = { + 6B43BA0ED7A59E5F9E7824A9 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -323,43 +325,41 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - C6BE0A2E972E4BF469954FE7 /* [CP] Check Pods Manifest.lock */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( ); + name = "Run Script"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - EA8C715000E3367B65E72722 /* [CP] Embed Pods Frameworks */ = { + AD7073F8B2A8B9D7C73C1E2B /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 71648F3D10B18A805A5C5B83 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 7D4452472D5AF425A635039C /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = AC955D3DBF778EEBAF66455F /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 58E4120D718D183216E2F816 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 91AE6679660B5BFDE37CA10C /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = D5D7E82A3FEE48552A1B1A9A /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/brick_breaker/step_04/linux/CMakeLists.txt b/brick_breaker/step_04/linux/CMakeLists.txt index 97c400e174..9f288a67f3 100644 --- a/brick_breaker/step_04/linux/CMakeLists.txt +++ b/brick_breaker/step_04/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/brick_breaker/step_04/linux/runner/CMakeLists.txt b/brick_breaker/step_04/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/brick_breaker/step_04/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/brick_breaker/step_04/linux/main.cc b/brick_breaker/step_04/linux/runner/main.cc similarity index 100% rename from brick_breaker/step_04/linux/main.cc rename to brick_breaker/step_04/linux/runner/main.cc diff --git a/brick_breaker/step_04/linux/my_application.cc b/brick_breaker/step_04/linux/runner/my_application.cc similarity index 93% rename from brick_breaker/step_04/linux/my_application.cc rename to brick_breaker/step_04/linux/runner/my_application.cc index 5f348fea29..f80944a7ba 100644 --- a/brick_breaker/step_04/linux/my_application.cc +++ b/brick_breaker/step_04/linux/runner/my_application.cc @@ -117,6 +117,12 @@ static void my_application_class_init(MyApplicationClass* klass) { static void my_application_init(MyApplication* self) {} MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + return MY_APPLICATION(g_object_new(my_application_get_type(), "application-id", APPLICATION_ID, "flags", G_APPLICATION_NON_UNIQUE, diff --git a/brick_breaker/step_04/linux/my_application.h b/brick_breaker/step_04/linux/runner/my_application.h similarity index 100% rename from brick_breaker/step_04/linux/my_application.h rename to brick_breaker/step_04/linux/runner/my_application.h diff --git a/brick_breaker/step_04/macos/Runner.xcodeproj/project.pbxproj b/brick_breaker/step_04/macos/Runner.xcodeproj/project.pbxproj index 139f2ab564..8a694eeb67 100644 --- a/brick_breaker/step_04/macos/Runner.xcodeproj/project.pbxproj +++ b/brick_breaker/step_04/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ - 26DEE62C40082E048AB2DAC9 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F92CB96B5E92665177C18209 /* Pods_Runner.framework */; }; - 302724C6CB220CF55A24A7F6 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6405B62D2CA2577368E77111 /* Pods_RunnerTests.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; + 5658E56B62B605B138A9F111 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B7BD0B1970D1897B74F07A89 /* Pods_Runner.framework */; }; + 9F81B80161B2124A9F488A1C /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DA8EE3E1AF83156D1A12CA68 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,11 +62,11 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 114979CB87B99A65FC62EC11 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; }; + 338EE091C1F9F5450098813D /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 33CC10ED2044A3C60003C045 /* brick_breaker.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = brick_breaker.app; sourceTree = BUILT_PRODUCTS_DIR; }; 33CC10F02044A3C60003C045 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 33CC10F22044A3C60003C045 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = Runner/Assets.xcassets; sourceTree = ""; }; @@ -79,15 +79,15 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 35582EBA48CF0CAD302E6F20 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 44116D975D14ACE930B555BE /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 6405B62D2CA2577368E77111 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 81C82BB4E8EABFAC2304248A /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 8267E521E815EC0C64F08901 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - E93D02470CD1D3EA960793F9 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - F92CB96B5E92665177C18209 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - FF398A0A44AD651D2C2EF977 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 9FD3C4B0DFBFF16743BD5FAF /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + B286950BC95C7F770C832B6E /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + B65E8CAEC95BEF8588C418A4 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + B7BD0B1970D1897B74F07A89 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + BCBDA775B0BEE126A464E62B /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + DA8EE3E1AF83156D1A12CA68 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 302724C6CB220CF55A24A7F6 /* Pods_RunnerTests.framework in Frameworks */, + 9F81B80161B2124A9F488A1C /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,27 +103,13 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 26DEE62C40082E048AB2DAC9 /* Pods_Runner.framework in Frameworks */, + 5658E56B62B605B138A9F111 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 1AD2B861098DC69EDF5A5504 /* Pods */ = { - isa = PBXGroup; - children = ( - 35582EBA48CF0CAD302E6F20 /* Pods-Runner.debug.xcconfig */, - 44116D975D14ACE930B555BE /* Pods-Runner.release.xcconfig */, - 114979CB87B99A65FC62EC11 /* Pods-Runner.profile.xcconfig */, - 81C82BB4E8EABFAC2304248A /* Pods-RunnerTests.debug.xcconfig */, - FF398A0A44AD651D2C2EF977 /* Pods-RunnerTests.release.xcconfig */, - E93D02470CD1D3EA960793F9 /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; 331C80D6294CF71000263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -151,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 1AD2B861098DC69EDF5A5504 /* Pods */, + C14890065505BEA860C9C768 /* Pods */, ); sourceTree = ""; }; @@ -199,11 +185,25 @@ path = Runner; sourceTree = ""; }; + C14890065505BEA860C9C768 /* Pods */ = { + isa = PBXGroup; + children = ( + 8267E521E815EC0C64F08901 /* Pods-Runner.debug.xcconfig */, + 338EE091C1F9F5450098813D /* Pods-Runner.release.xcconfig */, + B286950BC95C7F770C832B6E /* Pods-Runner.profile.xcconfig */, + B65E8CAEC95BEF8588C418A4 /* Pods-RunnerTests.debug.xcconfig */, + 9FD3C4B0DFBFF16743BD5FAF /* Pods-RunnerTests.release.xcconfig */, + BCBDA775B0BEE126A464E62B /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - F92CB96B5E92665177C18209 /* Pods_Runner.framework */, - 6405B62D2CA2577368E77111 /* Pods_RunnerTests.framework */, + B7BD0B1970D1897B74F07A89 /* Pods_Runner.framework */, + DA8EE3E1AF83156D1A12CA68 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - C4789C072FD8F107A45D1C43 /* [CP] Check Pods Manifest.lock */, + D9060D80D88FD22DB1DE6C3A /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 95500D3C1EE7FB7DACCE08DC /* [CP] Check Pods Manifest.lock */, + E437887DD480199527592E81 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - B311D48FC89BEDF4EB2DCDDE /* [CP] Embed Pods Frameworks */, + 23E4B333ADF5FCEE5E2EE136 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,6 +323,23 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ + 23E4B333ADF5FCEE5E2EE136 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -361,7 +378,7 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 95500D3C1EE7FB7DACCE08DC /* [CP] Check Pods Manifest.lock */ = { + D9060D80D88FD22DB1DE6C3A /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -376,31 +393,14 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - B311D48FC89BEDF4EB2DCDDE /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; - C4789C072FD8F107A45D1C43 /* [CP] Check Pods Manifest.lock */ = { + E437887DD480199527592E81 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -415,7 +415,7 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 81C82BB4E8EABFAC2304248A /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = B65E8CAEC95BEF8588C418A4 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = FF398A0A44AD651D2C2EF977 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 9FD3C4B0DFBFF16743BD5FAF /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = E93D02470CD1D3EA960793F9 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = BCBDA775B0BEE126A464E62B /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/brick_breaker/step_04/web/index.html b/brick_breaker/step_04/web/index.html index 0ffbea0397..da690bb6c1 100644 --- a/brick_breaker/step_04/web/index.html +++ b/brick_breaker/step_04/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/brick_breaker/step_05/ios/Runner.xcodeproj/project.pbxproj b/brick_breaker/step_05/ios/Runner.xcodeproj/project.pbxproj index 6d1a96d63a..add9e55410 100644 --- a/brick_breaker/step_05/ios/Runner.xcodeproj/project.pbxproj +++ b/brick_breaker/step_05/ios/Runner.xcodeproj/project.pbxproj @@ -8,14 +8,14 @@ /* Begin PBXBuildFile section */ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; + 29AD4F65B90DCD21875C2A4C /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C931705C418493DC02E52C6A /* Pods_Runner.framework */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; - 435C672EDB3C79EF8289B1E5 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9C8A6BA03FC59B0344DC9E5F /* Pods_RunnerTests.framework */; }; - 4894AF48D2F94D6F1DABB2D3 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 57D6C7E904CFDCF3B7D477C6 /* Pods_Runner.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; + BB5BED3E580B45F0CD80E554 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B5F63ADA01AF049FFFC5CB39 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -47,14 +47,13 @@ 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 43E393EFCAC4AAC9B6E9AB99 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 4E857F5A50355F5D8711BD08 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 57D6C7E904CFDCF3B7D477C6 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 71648F3D10B18A805A5C5B83 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 58E4120D718D183216E2F816 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 71F43AEF029360DE99B40B6F /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 91AE6679660B5BFDE37CA10C /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 7D4452472D5AF425A635039C /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 87D6F4AFB2A01D1CBC283DBE /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -62,31 +61,41 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 9C8A6BA03FC59B0344DC9E5F /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - AC955D3DBF778EEBAF66455F /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - F6D81E7FFA76393DDD83EDE7 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + B5F63ADA01AF049FFFC5CB39 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + C931705C418493DC02E52C6A /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D510FFBF1E5D8C842D1A1042 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + D5D7E82A3FEE48552A1B1A9A /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 0B544D9D6451D8B7513063BD /* Frameworks */ = { + 97C146EB1CF9000F007C117D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 435C672EDB3C79EF8289B1E5 /* Pods_RunnerTests.framework in Frameworks */, + 29AD4F65B90DCD21875C2A4C /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 97C146EB1CF9000F007C117D /* Frameworks */ = { + CF0381FD905E27D8E4FA4E94 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 4894AF48D2F94D6F1DABB2D3 /* Pods_Runner.framework in Frameworks */, + BB5BED3E580B45F0CD80E554 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 2078C8554440C2F9205D6B5A /* Frameworks */ = { + isa = PBXGroup; + children = ( + C931705C418493DC02E52C6A /* Pods_Runner.framework */, + B5F63ADA01AF049FFFC5CB39 /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; 331C8082294A63A400263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -95,15 +104,15 @@ path = RunnerTests; sourceTree = ""; }; - 9135670FD92EB74D54D0AB79 /* Pods */ = { + 56387D4532B1071467568739 /* Pods */ = { isa = PBXGroup; children = ( - 43E393EFCAC4AAC9B6E9AB99 /* Pods-Runner.debug.xcconfig */, - 4E857F5A50355F5D8711BD08 /* Pods-Runner.release.xcconfig */, - F6D81E7FFA76393DDD83EDE7 /* Pods-Runner.profile.xcconfig */, - 71648F3D10B18A805A5C5B83 /* Pods-RunnerTests.debug.xcconfig */, - AC955D3DBF778EEBAF66455F /* Pods-RunnerTests.release.xcconfig */, - 91AE6679660B5BFDE37CA10C /* Pods-RunnerTests.profile.xcconfig */, + 87D6F4AFB2A01D1CBC283DBE /* Pods-Runner.debug.xcconfig */, + 71F43AEF029360DE99B40B6F /* Pods-Runner.release.xcconfig */, + D510FFBF1E5D8C842D1A1042 /* Pods-Runner.profile.xcconfig */, + 7D4452472D5AF425A635039C /* Pods-RunnerTests.debug.xcconfig */, + 58E4120D718D183216E2F816 /* Pods-RunnerTests.release.xcconfig */, + D5D7E82A3FEE48552A1B1A9A /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -127,8 +136,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - 9135670FD92EB74D54D0AB79 /* Pods */, - F20E1DAAA380CE8C17F7F24D /* Frameworks */, + 56387D4532B1071467568739 /* Pods */, + 2078C8554440C2F9205D6B5A /* Frameworks */, ); sourceTree = ""; }; @@ -156,15 +165,6 @@ path = Runner; sourceTree = ""; }; - F20E1DAAA380CE8C17F7F24D /* Frameworks */ = { - isa = PBXGroup; - children = ( - 57D6C7E904CFDCF3B7D477C6 /* Pods_Runner.framework */, - 9C8A6BA03FC59B0344DC9E5F /* Pods_RunnerTests.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - B0951A5E64A8BCDFA6315953 /* [CP] Check Pods Manifest.lock */, + 6B43BA0ED7A59E5F9E7824A9 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 0B544D9D6451D8B7513063BD /* Frameworks */, + CF0381FD905E27D8E4FA4E94 /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - C6BE0A2E972E4BF469954FE7 /* [CP] Check Pods Manifest.lock */, + AD7073F8B2A8B9D7C73C1E2B /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - EA8C715000E3367B65E72722 /* [CP] Embed Pods Frameworks */, + 16BE037FF21DCFBC30C993A0 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -270,38 +270,40 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + 16BE037FF21DCFBC30C993A0 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputPaths = ( - "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "Thin Binary"; - outputPaths = ( + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); - name = "Run Script"; + name = "Thin Binary"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - B0951A5E64A8BCDFA6315953 /* [CP] Check Pods Manifest.lock */ = { + 6B43BA0ED7A59E5F9E7824A9 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -323,43 +325,41 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - C6BE0A2E972E4BF469954FE7 /* [CP] Check Pods Manifest.lock */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( ); + name = "Run Script"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - EA8C715000E3367B65E72722 /* [CP] Embed Pods Frameworks */ = { + AD7073F8B2A8B9D7C73C1E2B /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 71648F3D10B18A805A5C5B83 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 7D4452472D5AF425A635039C /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = AC955D3DBF778EEBAF66455F /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 58E4120D718D183216E2F816 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 91AE6679660B5BFDE37CA10C /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = D5D7E82A3FEE48552A1B1A9A /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/brick_breaker/step_05/linux/CMakeLists.txt b/brick_breaker/step_05/linux/CMakeLists.txt index 97c400e174..9f288a67f3 100644 --- a/brick_breaker/step_05/linux/CMakeLists.txt +++ b/brick_breaker/step_05/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/brick_breaker/step_05/linux/runner/CMakeLists.txt b/brick_breaker/step_05/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/brick_breaker/step_05/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/brick_breaker/step_05/linux/main.cc b/brick_breaker/step_05/linux/runner/main.cc similarity index 100% rename from brick_breaker/step_05/linux/main.cc rename to brick_breaker/step_05/linux/runner/main.cc diff --git a/brick_breaker/step_05/linux/my_application.cc b/brick_breaker/step_05/linux/runner/my_application.cc similarity index 93% rename from brick_breaker/step_05/linux/my_application.cc rename to brick_breaker/step_05/linux/runner/my_application.cc index 5f348fea29..f80944a7ba 100644 --- a/brick_breaker/step_05/linux/my_application.cc +++ b/brick_breaker/step_05/linux/runner/my_application.cc @@ -117,6 +117,12 @@ static void my_application_class_init(MyApplicationClass* klass) { static void my_application_init(MyApplication* self) {} MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + return MY_APPLICATION(g_object_new(my_application_get_type(), "application-id", APPLICATION_ID, "flags", G_APPLICATION_NON_UNIQUE, diff --git a/brick_breaker/step_05/linux/my_application.h b/brick_breaker/step_05/linux/runner/my_application.h similarity index 100% rename from brick_breaker/step_05/linux/my_application.h rename to brick_breaker/step_05/linux/runner/my_application.h diff --git a/brick_breaker/step_05/macos/Runner.xcodeproj/project.pbxproj b/brick_breaker/step_05/macos/Runner.xcodeproj/project.pbxproj index 139f2ab564..8a694eeb67 100644 --- a/brick_breaker/step_05/macos/Runner.xcodeproj/project.pbxproj +++ b/brick_breaker/step_05/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ - 26DEE62C40082E048AB2DAC9 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F92CB96B5E92665177C18209 /* Pods_Runner.framework */; }; - 302724C6CB220CF55A24A7F6 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6405B62D2CA2577368E77111 /* Pods_RunnerTests.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; + 5658E56B62B605B138A9F111 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B7BD0B1970D1897B74F07A89 /* Pods_Runner.framework */; }; + 9F81B80161B2124A9F488A1C /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DA8EE3E1AF83156D1A12CA68 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,11 +62,11 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 114979CB87B99A65FC62EC11 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; }; + 338EE091C1F9F5450098813D /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 33CC10ED2044A3C60003C045 /* brick_breaker.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = brick_breaker.app; sourceTree = BUILT_PRODUCTS_DIR; }; 33CC10F02044A3C60003C045 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 33CC10F22044A3C60003C045 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = Runner/Assets.xcassets; sourceTree = ""; }; @@ -79,15 +79,15 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 35582EBA48CF0CAD302E6F20 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 44116D975D14ACE930B555BE /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 6405B62D2CA2577368E77111 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 81C82BB4E8EABFAC2304248A /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 8267E521E815EC0C64F08901 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - E93D02470CD1D3EA960793F9 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - F92CB96B5E92665177C18209 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - FF398A0A44AD651D2C2EF977 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 9FD3C4B0DFBFF16743BD5FAF /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + B286950BC95C7F770C832B6E /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + B65E8CAEC95BEF8588C418A4 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + B7BD0B1970D1897B74F07A89 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + BCBDA775B0BEE126A464E62B /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + DA8EE3E1AF83156D1A12CA68 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 302724C6CB220CF55A24A7F6 /* Pods_RunnerTests.framework in Frameworks */, + 9F81B80161B2124A9F488A1C /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,27 +103,13 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 26DEE62C40082E048AB2DAC9 /* Pods_Runner.framework in Frameworks */, + 5658E56B62B605B138A9F111 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 1AD2B861098DC69EDF5A5504 /* Pods */ = { - isa = PBXGroup; - children = ( - 35582EBA48CF0CAD302E6F20 /* Pods-Runner.debug.xcconfig */, - 44116D975D14ACE930B555BE /* Pods-Runner.release.xcconfig */, - 114979CB87B99A65FC62EC11 /* Pods-Runner.profile.xcconfig */, - 81C82BB4E8EABFAC2304248A /* Pods-RunnerTests.debug.xcconfig */, - FF398A0A44AD651D2C2EF977 /* Pods-RunnerTests.release.xcconfig */, - E93D02470CD1D3EA960793F9 /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; 331C80D6294CF71000263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -151,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 1AD2B861098DC69EDF5A5504 /* Pods */, + C14890065505BEA860C9C768 /* Pods */, ); sourceTree = ""; }; @@ -199,11 +185,25 @@ path = Runner; sourceTree = ""; }; + C14890065505BEA860C9C768 /* Pods */ = { + isa = PBXGroup; + children = ( + 8267E521E815EC0C64F08901 /* Pods-Runner.debug.xcconfig */, + 338EE091C1F9F5450098813D /* Pods-Runner.release.xcconfig */, + B286950BC95C7F770C832B6E /* Pods-Runner.profile.xcconfig */, + B65E8CAEC95BEF8588C418A4 /* Pods-RunnerTests.debug.xcconfig */, + 9FD3C4B0DFBFF16743BD5FAF /* Pods-RunnerTests.release.xcconfig */, + BCBDA775B0BEE126A464E62B /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - F92CB96B5E92665177C18209 /* Pods_Runner.framework */, - 6405B62D2CA2577368E77111 /* Pods_RunnerTests.framework */, + B7BD0B1970D1897B74F07A89 /* Pods_Runner.framework */, + DA8EE3E1AF83156D1A12CA68 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - C4789C072FD8F107A45D1C43 /* [CP] Check Pods Manifest.lock */, + D9060D80D88FD22DB1DE6C3A /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 95500D3C1EE7FB7DACCE08DC /* [CP] Check Pods Manifest.lock */, + E437887DD480199527592E81 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - B311D48FC89BEDF4EB2DCDDE /* [CP] Embed Pods Frameworks */, + 23E4B333ADF5FCEE5E2EE136 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,6 +323,23 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ + 23E4B333ADF5FCEE5E2EE136 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -361,7 +378,7 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 95500D3C1EE7FB7DACCE08DC /* [CP] Check Pods Manifest.lock */ = { + D9060D80D88FD22DB1DE6C3A /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -376,31 +393,14 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - B311D48FC89BEDF4EB2DCDDE /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; - C4789C072FD8F107A45D1C43 /* [CP] Check Pods Manifest.lock */ = { + E437887DD480199527592E81 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -415,7 +415,7 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 81C82BB4E8EABFAC2304248A /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = B65E8CAEC95BEF8588C418A4 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = FF398A0A44AD651D2C2EF977 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 9FD3C4B0DFBFF16743BD5FAF /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = E93D02470CD1D3EA960793F9 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = BCBDA775B0BEE126A464E62B /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/brick_breaker/step_05/web/index.html b/brick_breaker/step_05/web/index.html index 0ffbea0397..da690bb6c1 100644 --- a/brick_breaker/step_05/web/index.html +++ b/brick_breaker/step_05/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/brick_breaker/step_06/ios/Runner.xcodeproj/project.pbxproj b/brick_breaker/step_06/ios/Runner.xcodeproj/project.pbxproj index 6d1a96d63a..add9e55410 100644 --- a/brick_breaker/step_06/ios/Runner.xcodeproj/project.pbxproj +++ b/brick_breaker/step_06/ios/Runner.xcodeproj/project.pbxproj @@ -8,14 +8,14 @@ /* Begin PBXBuildFile section */ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; + 29AD4F65B90DCD21875C2A4C /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C931705C418493DC02E52C6A /* Pods_Runner.framework */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; - 435C672EDB3C79EF8289B1E5 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9C8A6BA03FC59B0344DC9E5F /* Pods_RunnerTests.framework */; }; - 4894AF48D2F94D6F1DABB2D3 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 57D6C7E904CFDCF3B7D477C6 /* Pods_Runner.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; + BB5BED3E580B45F0CD80E554 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B5F63ADA01AF049FFFC5CB39 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -47,14 +47,13 @@ 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 43E393EFCAC4AAC9B6E9AB99 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 4E857F5A50355F5D8711BD08 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 57D6C7E904CFDCF3B7D477C6 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 71648F3D10B18A805A5C5B83 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 58E4120D718D183216E2F816 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 71F43AEF029360DE99B40B6F /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 91AE6679660B5BFDE37CA10C /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 7D4452472D5AF425A635039C /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 87D6F4AFB2A01D1CBC283DBE /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -62,31 +61,41 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 9C8A6BA03FC59B0344DC9E5F /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - AC955D3DBF778EEBAF66455F /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - F6D81E7FFA76393DDD83EDE7 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + B5F63ADA01AF049FFFC5CB39 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + C931705C418493DC02E52C6A /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D510FFBF1E5D8C842D1A1042 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + D5D7E82A3FEE48552A1B1A9A /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 0B544D9D6451D8B7513063BD /* Frameworks */ = { + 97C146EB1CF9000F007C117D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 435C672EDB3C79EF8289B1E5 /* Pods_RunnerTests.framework in Frameworks */, + 29AD4F65B90DCD21875C2A4C /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 97C146EB1CF9000F007C117D /* Frameworks */ = { + CF0381FD905E27D8E4FA4E94 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 4894AF48D2F94D6F1DABB2D3 /* Pods_Runner.framework in Frameworks */, + BB5BED3E580B45F0CD80E554 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 2078C8554440C2F9205D6B5A /* Frameworks */ = { + isa = PBXGroup; + children = ( + C931705C418493DC02E52C6A /* Pods_Runner.framework */, + B5F63ADA01AF049FFFC5CB39 /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; 331C8082294A63A400263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -95,15 +104,15 @@ path = RunnerTests; sourceTree = ""; }; - 9135670FD92EB74D54D0AB79 /* Pods */ = { + 56387D4532B1071467568739 /* Pods */ = { isa = PBXGroup; children = ( - 43E393EFCAC4AAC9B6E9AB99 /* Pods-Runner.debug.xcconfig */, - 4E857F5A50355F5D8711BD08 /* Pods-Runner.release.xcconfig */, - F6D81E7FFA76393DDD83EDE7 /* Pods-Runner.profile.xcconfig */, - 71648F3D10B18A805A5C5B83 /* Pods-RunnerTests.debug.xcconfig */, - AC955D3DBF778EEBAF66455F /* Pods-RunnerTests.release.xcconfig */, - 91AE6679660B5BFDE37CA10C /* Pods-RunnerTests.profile.xcconfig */, + 87D6F4AFB2A01D1CBC283DBE /* Pods-Runner.debug.xcconfig */, + 71F43AEF029360DE99B40B6F /* Pods-Runner.release.xcconfig */, + D510FFBF1E5D8C842D1A1042 /* Pods-Runner.profile.xcconfig */, + 7D4452472D5AF425A635039C /* Pods-RunnerTests.debug.xcconfig */, + 58E4120D718D183216E2F816 /* Pods-RunnerTests.release.xcconfig */, + D5D7E82A3FEE48552A1B1A9A /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -127,8 +136,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - 9135670FD92EB74D54D0AB79 /* Pods */, - F20E1DAAA380CE8C17F7F24D /* Frameworks */, + 56387D4532B1071467568739 /* Pods */, + 2078C8554440C2F9205D6B5A /* Frameworks */, ); sourceTree = ""; }; @@ -156,15 +165,6 @@ path = Runner; sourceTree = ""; }; - F20E1DAAA380CE8C17F7F24D /* Frameworks */ = { - isa = PBXGroup; - children = ( - 57D6C7E904CFDCF3B7D477C6 /* Pods_Runner.framework */, - 9C8A6BA03FC59B0344DC9E5F /* Pods_RunnerTests.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - B0951A5E64A8BCDFA6315953 /* [CP] Check Pods Manifest.lock */, + 6B43BA0ED7A59E5F9E7824A9 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 0B544D9D6451D8B7513063BD /* Frameworks */, + CF0381FD905E27D8E4FA4E94 /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - C6BE0A2E972E4BF469954FE7 /* [CP] Check Pods Manifest.lock */, + AD7073F8B2A8B9D7C73C1E2B /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - EA8C715000E3367B65E72722 /* [CP] Embed Pods Frameworks */, + 16BE037FF21DCFBC30C993A0 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -270,38 +270,40 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + 16BE037FF21DCFBC30C993A0 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputPaths = ( - "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "Thin Binary"; - outputPaths = ( + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); - name = "Run Script"; + name = "Thin Binary"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - B0951A5E64A8BCDFA6315953 /* [CP] Check Pods Manifest.lock */ = { + 6B43BA0ED7A59E5F9E7824A9 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -323,43 +325,41 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - C6BE0A2E972E4BF469954FE7 /* [CP] Check Pods Manifest.lock */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( ); + name = "Run Script"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - EA8C715000E3367B65E72722 /* [CP] Embed Pods Frameworks */ = { + AD7073F8B2A8B9D7C73C1E2B /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 71648F3D10B18A805A5C5B83 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 7D4452472D5AF425A635039C /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = AC955D3DBF778EEBAF66455F /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 58E4120D718D183216E2F816 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 91AE6679660B5BFDE37CA10C /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = D5D7E82A3FEE48552A1B1A9A /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/brick_breaker/step_06/linux/CMakeLists.txt b/brick_breaker/step_06/linux/CMakeLists.txt index 97c400e174..9f288a67f3 100644 --- a/brick_breaker/step_06/linux/CMakeLists.txt +++ b/brick_breaker/step_06/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/brick_breaker/step_06/linux/runner/CMakeLists.txt b/brick_breaker/step_06/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/brick_breaker/step_06/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/brick_breaker/step_06/linux/main.cc b/brick_breaker/step_06/linux/runner/main.cc similarity index 100% rename from brick_breaker/step_06/linux/main.cc rename to brick_breaker/step_06/linux/runner/main.cc diff --git a/brick_breaker/step_06/linux/my_application.cc b/brick_breaker/step_06/linux/runner/my_application.cc similarity index 93% rename from brick_breaker/step_06/linux/my_application.cc rename to brick_breaker/step_06/linux/runner/my_application.cc index 5f348fea29..f80944a7ba 100644 --- a/brick_breaker/step_06/linux/my_application.cc +++ b/brick_breaker/step_06/linux/runner/my_application.cc @@ -117,6 +117,12 @@ static void my_application_class_init(MyApplicationClass* klass) { static void my_application_init(MyApplication* self) {} MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + return MY_APPLICATION(g_object_new(my_application_get_type(), "application-id", APPLICATION_ID, "flags", G_APPLICATION_NON_UNIQUE, diff --git a/brick_breaker/step_06/linux/my_application.h b/brick_breaker/step_06/linux/runner/my_application.h similarity index 100% rename from brick_breaker/step_06/linux/my_application.h rename to brick_breaker/step_06/linux/runner/my_application.h diff --git a/brick_breaker/step_06/macos/Runner.xcodeproj/project.pbxproj b/brick_breaker/step_06/macos/Runner.xcodeproj/project.pbxproj index 139f2ab564..8a694eeb67 100644 --- a/brick_breaker/step_06/macos/Runner.xcodeproj/project.pbxproj +++ b/brick_breaker/step_06/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ - 26DEE62C40082E048AB2DAC9 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F92CB96B5E92665177C18209 /* Pods_Runner.framework */; }; - 302724C6CB220CF55A24A7F6 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6405B62D2CA2577368E77111 /* Pods_RunnerTests.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; + 5658E56B62B605B138A9F111 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B7BD0B1970D1897B74F07A89 /* Pods_Runner.framework */; }; + 9F81B80161B2124A9F488A1C /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DA8EE3E1AF83156D1A12CA68 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,11 +62,11 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 114979CB87B99A65FC62EC11 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; }; + 338EE091C1F9F5450098813D /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 33CC10ED2044A3C60003C045 /* brick_breaker.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = brick_breaker.app; sourceTree = BUILT_PRODUCTS_DIR; }; 33CC10F02044A3C60003C045 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 33CC10F22044A3C60003C045 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = Runner/Assets.xcassets; sourceTree = ""; }; @@ -79,15 +79,15 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 35582EBA48CF0CAD302E6F20 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 44116D975D14ACE930B555BE /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 6405B62D2CA2577368E77111 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 81C82BB4E8EABFAC2304248A /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 8267E521E815EC0C64F08901 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - E93D02470CD1D3EA960793F9 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - F92CB96B5E92665177C18209 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - FF398A0A44AD651D2C2EF977 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 9FD3C4B0DFBFF16743BD5FAF /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + B286950BC95C7F770C832B6E /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + B65E8CAEC95BEF8588C418A4 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + B7BD0B1970D1897B74F07A89 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + BCBDA775B0BEE126A464E62B /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + DA8EE3E1AF83156D1A12CA68 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 302724C6CB220CF55A24A7F6 /* Pods_RunnerTests.framework in Frameworks */, + 9F81B80161B2124A9F488A1C /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,27 +103,13 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 26DEE62C40082E048AB2DAC9 /* Pods_Runner.framework in Frameworks */, + 5658E56B62B605B138A9F111 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 1AD2B861098DC69EDF5A5504 /* Pods */ = { - isa = PBXGroup; - children = ( - 35582EBA48CF0CAD302E6F20 /* Pods-Runner.debug.xcconfig */, - 44116D975D14ACE930B555BE /* Pods-Runner.release.xcconfig */, - 114979CB87B99A65FC62EC11 /* Pods-Runner.profile.xcconfig */, - 81C82BB4E8EABFAC2304248A /* Pods-RunnerTests.debug.xcconfig */, - FF398A0A44AD651D2C2EF977 /* Pods-RunnerTests.release.xcconfig */, - E93D02470CD1D3EA960793F9 /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; 331C80D6294CF71000263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -151,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 1AD2B861098DC69EDF5A5504 /* Pods */, + C14890065505BEA860C9C768 /* Pods */, ); sourceTree = ""; }; @@ -199,11 +185,25 @@ path = Runner; sourceTree = ""; }; + C14890065505BEA860C9C768 /* Pods */ = { + isa = PBXGroup; + children = ( + 8267E521E815EC0C64F08901 /* Pods-Runner.debug.xcconfig */, + 338EE091C1F9F5450098813D /* Pods-Runner.release.xcconfig */, + B286950BC95C7F770C832B6E /* Pods-Runner.profile.xcconfig */, + B65E8CAEC95BEF8588C418A4 /* Pods-RunnerTests.debug.xcconfig */, + 9FD3C4B0DFBFF16743BD5FAF /* Pods-RunnerTests.release.xcconfig */, + BCBDA775B0BEE126A464E62B /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - F92CB96B5E92665177C18209 /* Pods_Runner.framework */, - 6405B62D2CA2577368E77111 /* Pods_RunnerTests.framework */, + B7BD0B1970D1897B74F07A89 /* Pods_Runner.framework */, + DA8EE3E1AF83156D1A12CA68 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - C4789C072FD8F107A45D1C43 /* [CP] Check Pods Manifest.lock */, + D9060D80D88FD22DB1DE6C3A /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 95500D3C1EE7FB7DACCE08DC /* [CP] Check Pods Manifest.lock */, + E437887DD480199527592E81 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - B311D48FC89BEDF4EB2DCDDE /* [CP] Embed Pods Frameworks */, + 23E4B333ADF5FCEE5E2EE136 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,6 +323,23 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ + 23E4B333ADF5FCEE5E2EE136 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -361,7 +378,7 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 95500D3C1EE7FB7DACCE08DC /* [CP] Check Pods Manifest.lock */ = { + D9060D80D88FD22DB1DE6C3A /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -376,31 +393,14 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - B311D48FC89BEDF4EB2DCDDE /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; - C4789C072FD8F107A45D1C43 /* [CP] Check Pods Manifest.lock */ = { + E437887DD480199527592E81 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -415,7 +415,7 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 81C82BB4E8EABFAC2304248A /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = B65E8CAEC95BEF8588C418A4 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = FF398A0A44AD651D2C2EF977 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 9FD3C4B0DFBFF16743BD5FAF /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = E93D02470CD1D3EA960793F9 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = BCBDA775B0BEE126A464E62B /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/brick_breaker/step_06/web/index.html b/brick_breaker/step_06/web/index.html index 0ffbea0397..da690bb6c1 100644 --- a/brick_breaker/step_06/web/index.html +++ b/brick_breaker/step_06/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/brick_breaker/step_07/ios/Runner.xcodeproj/project.pbxproj b/brick_breaker/step_07/ios/Runner.xcodeproj/project.pbxproj index 6d1a96d63a..add9e55410 100644 --- a/brick_breaker/step_07/ios/Runner.xcodeproj/project.pbxproj +++ b/brick_breaker/step_07/ios/Runner.xcodeproj/project.pbxproj @@ -8,14 +8,14 @@ /* Begin PBXBuildFile section */ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; + 29AD4F65B90DCD21875C2A4C /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C931705C418493DC02E52C6A /* Pods_Runner.framework */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; - 435C672EDB3C79EF8289B1E5 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9C8A6BA03FC59B0344DC9E5F /* Pods_RunnerTests.framework */; }; - 4894AF48D2F94D6F1DABB2D3 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 57D6C7E904CFDCF3B7D477C6 /* Pods_Runner.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; + BB5BED3E580B45F0CD80E554 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B5F63ADA01AF049FFFC5CB39 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -47,14 +47,13 @@ 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 43E393EFCAC4AAC9B6E9AB99 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 4E857F5A50355F5D8711BD08 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 57D6C7E904CFDCF3B7D477C6 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 71648F3D10B18A805A5C5B83 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 58E4120D718D183216E2F816 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 71F43AEF029360DE99B40B6F /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 91AE6679660B5BFDE37CA10C /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 7D4452472D5AF425A635039C /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 87D6F4AFB2A01D1CBC283DBE /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -62,31 +61,41 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 9C8A6BA03FC59B0344DC9E5F /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - AC955D3DBF778EEBAF66455F /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - F6D81E7FFA76393DDD83EDE7 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + B5F63ADA01AF049FFFC5CB39 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + C931705C418493DC02E52C6A /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D510FFBF1E5D8C842D1A1042 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + D5D7E82A3FEE48552A1B1A9A /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 0B544D9D6451D8B7513063BD /* Frameworks */ = { + 97C146EB1CF9000F007C117D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 435C672EDB3C79EF8289B1E5 /* Pods_RunnerTests.framework in Frameworks */, + 29AD4F65B90DCD21875C2A4C /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 97C146EB1CF9000F007C117D /* Frameworks */ = { + CF0381FD905E27D8E4FA4E94 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 4894AF48D2F94D6F1DABB2D3 /* Pods_Runner.framework in Frameworks */, + BB5BED3E580B45F0CD80E554 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 2078C8554440C2F9205D6B5A /* Frameworks */ = { + isa = PBXGroup; + children = ( + C931705C418493DC02E52C6A /* Pods_Runner.framework */, + B5F63ADA01AF049FFFC5CB39 /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; 331C8082294A63A400263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -95,15 +104,15 @@ path = RunnerTests; sourceTree = ""; }; - 9135670FD92EB74D54D0AB79 /* Pods */ = { + 56387D4532B1071467568739 /* Pods */ = { isa = PBXGroup; children = ( - 43E393EFCAC4AAC9B6E9AB99 /* Pods-Runner.debug.xcconfig */, - 4E857F5A50355F5D8711BD08 /* Pods-Runner.release.xcconfig */, - F6D81E7FFA76393DDD83EDE7 /* Pods-Runner.profile.xcconfig */, - 71648F3D10B18A805A5C5B83 /* Pods-RunnerTests.debug.xcconfig */, - AC955D3DBF778EEBAF66455F /* Pods-RunnerTests.release.xcconfig */, - 91AE6679660B5BFDE37CA10C /* Pods-RunnerTests.profile.xcconfig */, + 87D6F4AFB2A01D1CBC283DBE /* Pods-Runner.debug.xcconfig */, + 71F43AEF029360DE99B40B6F /* Pods-Runner.release.xcconfig */, + D510FFBF1E5D8C842D1A1042 /* Pods-Runner.profile.xcconfig */, + 7D4452472D5AF425A635039C /* Pods-RunnerTests.debug.xcconfig */, + 58E4120D718D183216E2F816 /* Pods-RunnerTests.release.xcconfig */, + D5D7E82A3FEE48552A1B1A9A /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -127,8 +136,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - 9135670FD92EB74D54D0AB79 /* Pods */, - F20E1DAAA380CE8C17F7F24D /* Frameworks */, + 56387D4532B1071467568739 /* Pods */, + 2078C8554440C2F9205D6B5A /* Frameworks */, ); sourceTree = ""; }; @@ -156,15 +165,6 @@ path = Runner; sourceTree = ""; }; - F20E1DAAA380CE8C17F7F24D /* Frameworks */ = { - isa = PBXGroup; - children = ( - 57D6C7E904CFDCF3B7D477C6 /* Pods_Runner.framework */, - 9C8A6BA03FC59B0344DC9E5F /* Pods_RunnerTests.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - B0951A5E64A8BCDFA6315953 /* [CP] Check Pods Manifest.lock */, + 6B43BA0ED7A59E5F9E7824A9 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 0B544D9D6451D8B7513063BD /* Frameworks */, + CF0381FD905E27D8E4FA4E94 /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - C6BE0A2E972E4BF469954FE7 /* [CP] Check Pods Manifest.lock */, + AD7073F8B2A8B9D7C73C1E2B /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - EA8C715000E3367B65E72722 /* [CP] Embed Pods Frameworks */, + 16BE037FF21DCFBC30C993A0 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -270,38 +270,40 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + 16BE037FF21DCFBC30C993A0 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputPaths = ( - "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "Thin Binary"; - outputPaths = ( + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); - name = "Run Script"; + name = "Thin Binary"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - B0951A5E64A8BCDFA6315953 /* [CP] Check Pods Manifest.lock */ = { + 6B43BA0ED7A59E5F9E7824A9 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -323,43 +325,41 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - C6BE0A2E972E4BF469954FE7 /* [CP] Check Pods Manifest.lock */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( ); + name = "Run Script"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - EA8C715000E3367B65E72722 /* [CP] Embed Pods Frameworks */ = { + AD7073F8B2A8B9D7C73C1E2B /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 71648F3D10B18A805A5C5B83 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 7D4452472D5AF425A635039C /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = AC955D3DBF778EEBAF66455F /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 58E4120D718D183216E2F816 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 91AE6679660B5BFDE37CA10C /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = D5D7E82A3FEE48552A1B1A9A /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/brick_breaker/step_07/linux/CMakeLists.txt b/brick_breaker/step_07/linux/CMakeLists.txt index 97c400e174..9f288a67f3 100644 --- a/brick_breaker/step_07/linux/CMakeLists.txt +++ b/brick_breaker/step_07/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/brick_breaker/step_07/linux/my_application.cc b/brick_breaker/step_07/linux/my_application.cc deleted file mode 100644 index 5f348fea29..0000000000 --- a/brick_breaker/step_07/linux/my_application.cc +++ /dev/null @@ -1,124 +0,0 @@ -#include "my_application.h" - -#include -#ifdef GDK_WINDOWING_X11 -#include -#endif - -#include "flutter/generated_plugin_registrant.h" - -struct _MyApplication { - GtkApplication parent_instance; - char** dart_entrypoint_arguments; -}; - -G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) - -// Implements GApplication::activate. -static void my_application_activate(GApplication* application) { - MyApplication* self = MY_APPLICATION(application); - GtkWindow* window = - GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); - - // Use a header bar when running in GNOME as this is the common style used - // by applications and is the setup most users will be using (e.g. Ubuntu - // desktop). - // If running on X and not using GNOME then just use a traditional title bar - // in case the window manager does more exotic layout, e.g. tiling. - // If running on Wayland assume the header bar will work (may need changing - // if future cases occur). - gboolean use_header_bar = TRUE; -#ifdef GDK_WINDOWING_X11 - GdkScreen* screen = gtk_window_get_screen(window); - if (GDK_IS_X11_SCREEN(screen)) { - const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); - if (g_strcmp0(wm_name, "GNOME Shell") != 0) { - use_header_bar = FALSE; - } - } -#endif - if (use_header_bar) { - GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); - gtk_widget_show(GTK_WIDGET(header_bar)); - gtk_header_bar_set_title(header_bar, "brick_breaker"); - gtk_header_bar_set_show_close_button(header_bar, TRUE); - gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); - } else { - gtk_window_set_title(window, "brick_breaker"); - } - - gtk_window_set_default_size(window, 1280, 720); - gtk_widget_show(GTK_WIDGET(window)); - - g_autoptr(FlDartProject) project = fl_dart_project_new(); - fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); - - FlView* view = fl_view_new(project); - gtk_widget_show(GTK_WIDGET(view)); - gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); - - fl_register_plugins(FL_PLUGIN_REGISTRY(view)); - - gtk_widget_grab_focus(GTK_WIDGET(view)); -} - -// Implements GApplication::local_command_line. -static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { - MyApplication* self = MY_APPLICATION(application); - // Strip out the first argument as it is the binary name. - self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); - - g_autoptr(GError) error = nullptr; - if (!g_application_register(application, nullptr, &error)) { - g_warning("Failed to register: %s", error->message); - *exit_status = 1; - return TRUE; - } - - g_application_activate(application); - *exit_status = 0; - - return TRUE; -} - -// Implements GApplication::startup. -static void my_application_startup(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application startup. - - G_APPLICATION_CLASS(my_application_parent_class)->startup(application); -} - -// Implements GApplication::shutdown. -static void my_application_shutdown(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application shutdown. - - G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); -} - -// Implements GObject::dispose. -static void my_application_dispose(GObject* object) { - MyApplication* self = MY_APPLICATION(object); - g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); - G_OBJECT_CLASS(my_application_parent_class)->dispose(object); -} - -static void my_application_class_init(MyApplicationClass* klass) { - G_APPLICATION_CLASS(klass)->activate = my_application_activate; - G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; - G_APPLICATION_CLASS(klass)->startup = my_application_startup; - G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; - G_OBJECT_CLASS(klass)->dispose = my_application_dispose; -} - -static void my_application_init(MyApplication* self) {} - -MyApplication* my_application_new() { - return MY_APPLICATION(g_object_new(my_application_get_type(), - "application-id", APPLICATION_ID, - "flags", G_APPLICATION_NON_UNIQUE, - nullptr)); -} diff --git a/brick_breaker/step_07/linux/runner/CMakeLists.txt b/brick_breaker/step_07/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/brick_breaker/step_07/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/brick_breaker/step_07/linux/main.cc b/brick_breaker/step_07/linux/runner/main.cc similarity index 100% rename from brick_breaker/step_07/linux/main.cc rename to brick_breaker/step_07/linux/runner/main.cc diff --git a/brick_breaker/step_07/linux/runner/my_application.cc b/brick_breaker/step_07/linux/runner/my_application.cc new file mode 100644 index 0000000000..f80944a7ba --- /dev/null +++ b/brick_breaker/step_07/linux/runner/my_application.cc @@ -0,0 +1,130 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "brick_breaker"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "brick_breaker"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/brick_breaker/step_07/linux/my_application.h b/brick_breaker/step_07/linux/runner/my_application.h similarity index 100% rename from brick_breaker/step_07/linux/my_application.h rename to brick_breaker/step_07/linux/runner/my_application.h diff --git a/brick_breaker/step_07/macos/Runner.xcodeproj/project.pbxproj b/brick_breaker/step_07/macos/Runner.xcodeproj/project.pbxproj index 139f2ab564..8a694eeb67 100644 --- a/brick_breaker/step_07/macos/Runner.xcodeproj/project.pbxproj +++ b/brick_breaker/step_07/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ - 26DEE62C40082E048AB2DAC9 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F92CB96B5E92665177C18209 /* Pods_Runner.framework */; }; - 302724C6CB220CF55A24A7F6 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6405B62D2CA2577368E77111 /* Pods_RunnerTests.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; + 5658E56B62B605B138A9F111 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B7BD0B1970D1897B74F07A89 /* Pods_Runner.framework */; }; + 9F81B80161B2124A9F488A1C /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DA8EE3E1AF83156D1A12CA68 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,11 +62,11 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 114979CB87B99A65FC62EC11 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; }; + 338EE091C1F9F5450098813D /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 33CC10ED2044A3C60003C045 /* brick_breaker.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = brick_breaker.app; sourceTree = BUILT_PRODUCTS_DIR; }; 33CC10F02044A3C60003C045 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 33CC10F22044A3C60003C045 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = Runner/Assets.xcassets; sourceTree = ""; }; @@ -79,15 +79,15 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 35582EBA48CF0CAD302E6F20 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 44116D975D14ACE930B555BE /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 6405B62D2CA2577368E77111 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 81C82BB4E8EABFAC2304248A /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 8267E521E815EC0C64F08901 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - E93D02470CD1D3EA960793F9 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - F92CB96B5E92665177C18209 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - FF398A0A44AD651D2C2EF977 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 9FD3C4B0DFBFF16743BD5FAF /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + B286950BC95C7F770C832B6E /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + B65E8CAEC95BEF8588C418A4 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + B7BD0B1970D1897B74F07A89 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + BCBDA775B0BEE126A464E62B /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + DA8EE3E1AF83156D1A12CA68 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 302724C6CB220CF55A24A7F6 /* Pods_RunnerTests.framework in Frameworks */, + 9F81B80161B2124A9F488A1C /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,27 +103,13 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 26DEE62C40082E048AB2DAC9 /* Pods_Runner.framework in Frameworks */, + 5658E56B62B605B138A9F111 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 1AD2B861098DC69EDF5A5504 /* Pods */ = { - isa = PBXGroup; - children = ( - 35582EBA48CF0CAD302E6F20 /* Pods-Runner.debug.xcconfig */, - 44116D975D14ACE930B555BE /* Pods-Runner.release.xcconfig */, - 114979CB87B99A65FC62EC11 /* Pods-Runner.profile.xcconfig */, - 81C82BB4E8EABFAC2304248A /* Pods-RunnerTests.debug.xcconfig */, - FF398A0A44AD651D2C2EF977 /* Pods-RunnerTests.release.xcconfig */, - E93D02470CD1D3EA960793F9 /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; 331C80D6294CF71000263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -151,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 1AD2B861098DC69EDF5A5504 /* Pods */, + C14890065505BEA860C9C768 /* Pods */, ); sourceTree = ""; }; @@ -199,11 +185,25 @@ path = Runner; sourceTree = ""; }; + C14890065505BEA860C9C768 /* Pods */ = { + isa = PBXGroup; + children = ( + 8267E521E815EC0C64F08901 /* Pods-Runner.debug.xcconfig */, + 338EE091C1F9F5450098813D /* Pods-Runner.release.xcconfig */, + B286950BC95C7F770C832B6E /* Pods-Runner.profile.xcconfig */, + B65E8CAEC95BEF8588C418A4 /* Pods-RunnerTests.debug.xcconfig */, + 9FD3C4B0DFBFF16743BD5FAF /* Pods-RunnerTests.release.xcconfig */, + BCBDA775B0BEE126A464E62B /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - F92CB96B5E92665177C18209 /* Pods_Runner.framework */, - 6405B62D2CA2577368E77111 /* Pods_RunnerTests.framework */, + B7BD0B1970D1897B74F07A89 /* Pods_Runner.framework */, + DA8EE3E1AF83156D1A12CA68 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - C4789C072FD8F107A45D1C43 /* [CP] Check Pods Manifest.lock */, + D9060D80D88FD22DB1DE6C3A /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 95500D3C1EE7FB7DACCE08DC /* [CP] Check Pods Manifest.lock */, + E437887DD480199527592E81 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - B311D48FC89BEDF4EB2DCDDE /* [CP] Embed Pods Frameworks */, + 23E4B333ADF5FCEE5E2EE136 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,6 +323,23 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ + 23E4B333ADF5FCEE5E2EE136 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -361,7 +378,7 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 95500D3C1EE7FB7DACCE08DC /* [CP] Check Pods Manifest.lock */ = { + D9060D80D88FD22DB1DE6C3A /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -376,31 +393,14 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - B311D48FC89BEDF4EB2DCDDE /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; - C4789C072FD8F107A45D1C43 /* [CP] Check Pods Manifest.lock */ = { + E437887DD480199527592E81 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -415,7 +415,7 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 81C82BB4E8EABFAC2304248A /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = B65E8CAEC95BEF8588C418A4 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = FF398A0A44AD651D2C2EF977 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 9FD3C4B0DFBFF16743BD5FAF /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = E93D02470CD1D3EA960793F9 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = BCBDA775B0BEE126A464E62B /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/brick_breaker/step_07/web/index.html b/brick_breaker/step_07/web/index.html index 0ffbea0397..da690bb6c1 100644 --- a/brick_breaker/step_07/web/index.html +++ b/brick_breaker/step_07/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/brick_breaker/step_08/ios/Runner.xcodeproj/project.pbxproj b/brick_breaker/step_08/ios/Runner.xcodeproj/project.pbxproj index 6d1a96d63a..add9e55410 100644 --- a/brick_breaker/step_08/ios/Runner.xcodeproj/project.pbxproj +++ b/brick_breaker/step_08/ios/Runner.xcodeproj/project.pbxproj @@ -8,14 +8,14 @@ /* Begin PBXBuildFile section */ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; + 29AD4F65B90DCD21875C2A4C /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C931705C418493DC02E52C6A /* Pods_Runner.framework */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; - 435C672EDB3C79EF8289B1E5 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9C8A6BA03FC59B0344DC9E5F /* Pods_RunnerTests.framework */; }; - 4894AF48D2F94D6F1DABB2D3 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 57D6C7E904CFDCF3B7D477C6 /* Pods_Runner.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; + BB5BED3E580B45F0CD80E554 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B5F63ADA01AF049FFFC5CB39 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -47,14 +47,13 @@ 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 43E393EFCAC4AAC9B6E9AB99 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 4E857F5A50355F5D8711BD08 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 57D6C7E904CFDCF3B7D477C6 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 71648F3D10B18A805A5C5B83 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 58E4120D718D183216E2F816 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 71F43AEF029360DE99B40B6F /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 91AE6679660B5BFDE37CA10C /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 7D4452472D5AF425A635039C /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 87D6F4AFB2A01D1CBC283DBE /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -62,31 +61,41 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 9C8A6BA03FC59B0344DC9E5F /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - AC955D3DBF778EEBAF66455F /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - F6D81E7FFA76393DDD83EDE7 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + B5F63ADA01AF049FFFC5CB39 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + C931705C418493DC02E52C6A /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D510FFBF1E5D8C842D1A1042 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + D5D7E82A3FEE48552A1B1A9A /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 0B544D9D6451D8B7513063BD /* Frameworks */ = { + 97C146EB1CF9000F007C117D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 435C672EDB3C79EF8289B1E5 /* Pods_RunnerTests.framework in Frameworks */, + 29AD4F65B90DCD21875C2A4C /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 97C146EB1CF9000F007C117D /* Frameworks */ = { + CF0381FD905E27D8E4FA4E94 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 4894AF48D2F94D6F1DABB2D3 /* Pods_Runner.framework in Frameworks */, + BB5BED3E580B45F0CD80E554 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 2078C8554440C2F9205D6B5A /* Frameworks */ = { + isa = PBXGroup; + children = ( + C931705C418493DC02E52C6A /* Pods_Runner.framework */, + B5F63ADA01AF049FFFC5CB39 /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; 331C8082294A63A400263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -95,15 +104,15 @@ path = RunnerTests; sourceTree = ""; }; - 9135670FD92EB74D54D0AB79 /* Pods */ = { + 56387D4532B1071467568739 /* Pods */ = { isa = PBXGroup; children = ( - 43E393EFCAC4AAC9B6E9AB99 /* Pods-Runner.debug.xcconfig */, - 4E857F5A50355F5D8711BD08 /* Pods-Runner.release.xcconfig */, - F6D81E7FFA76393DDD83EDE7 /* Pods-Runner.profile.xcconfig */, - 71648F3D10B18A805A5C5B83 /* Pods-RunnerTests.debug.xcconfig */, - AC955D3DBF778EEBAF66455F /* Pods-RunnerTests.release.xcconfig */, - 91AE6679660B5BFDE37CA10C /* Pods-RunnerTests.profile.xcconfig */, + 87D6F4AFB2A01D1CBC283DBE /* Pods-Runner.debug.xcconfig */, + 71F43AEF029360DE99B40B6F /* Pods-Runner.release.xcconfig */, + D510FFBF1E5D8C842D1A1042 /* Pods-Runner.profile.xcconfig */, + 7D4452472D5AF425A635039C /* Pods-RunnerTests.debug.xcconfig */, + 58E4120D718D183216E2F816 /* Pods-RunnerTests.release.xcconfig */, + D5D7E82A3FEE48552A1B1A9A /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -127,8 +136,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - 9135670FD92EB74D54D0AB79 /* Pods */, - F20E1DAAA380CE8C17F7F24D /* Frameworks */, + 56387D4532B1071467568739 /* Pods */, + 2078C8554440C2F9205D6B5A /* Frameworks */, ); sourceTree = ""; }; @@ -156,15 +165,6 @@ path = Runner; sourceTree = ""; }; - F20E1DAAA380CE8C17F7F24D /* Frameworks */ = { - isa = PBXGroup; - children = ( - 57D6C7E904CFDCF3B7D477C6 /* Pods_Runner.framework */, - 9C8A6BA03FC59B0344DC9E5F /* Pods_RunnerTests.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - B0951A5E64A8BCDFA6315953 /* [CP] Check Pods Manifest.lock */, + 6B43BA0ED7A59E5F9E7824A9 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 0B544D9D6451D8B7513063BD /* Frameworks */, + CF0381FD905E27D8E4FA4E94 /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - C6BE0A2E972E4BF469954FE7 /* [CP] Check Pods Manifest.lock */, + AD7073F8B2A8B9D7C73C1E2B /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - EA8C715000E3367B65E72722 /* [CP] Embed Pods Frameworks */, + 16BE037FF21DCFBC30C993A0 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -270,38 +270,40 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + 16BE037FF21DCFBC30C993A0 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputPaths = ( - "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "Thin Binary"; - outputPaths = ( + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); - name = "Run Script"; + name = "Thin Binary"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - B0951A5E64A8BCDFA6315953 /* [CP] Check Pods Manifest.lock */ = { + 6B43BA0ED7A59E5F9E7824A9 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -323,43 +325,41 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - C6BE0A2E972E4BF469954FE7 /* [CP] Check Pods Manifest.lock */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( ); + name = "Run Script"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - EA8C715000E3367B65E72722 /* [CP] Embed Pods Frameworks */ = { + AD7073F8B2A8B9D7C73C1E2B /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 71648F3D10B18A805A5C5B83 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 7D4452472D5AF425A635039C /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = AC955D3DBF778EEBAF66455F /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 58E4120D718D183216E2F816 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 91AE6679660B5BFDE37CA10C /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = D5D7E82A3FEE48552A1B1A9A /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/brick_breaker/step_08/linux/CMakeLists.txt b/brick_breaker/step_08/linux/CMakeLists.txt index 97c400e174..9f288a67f3 100644 --- a/brick_breaker/step_08/linux/CMakeLists.txt +++ b/brick_breaker/step_08/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/brick_breaker/step_08/linux/my_application.cc b/brick_breaker/step_08/linux/my_application.cc deleted file mode 100644 index 5f348fea29..0000000000 --- a/brick_breaker/step_08/linux/my_application.cc +++ /dev/null @@ -1,124 +0,0 @@ -#include "my_application.h" - -#include -#ifdef GDK_WINDOWING_X11 -#include -#endif - -#include "flutter/generated_plugin_registrant.h" - -struct _MyApplication { - GtkApplication parent_instance; - char** dart_entrypoint_arguments; -}; - -G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) - -// Implements GApplication::activate. -static void my_application_activate(GApplication* application) { - MyApplication* self = MY_APPLICATION(application); - GtkWindow* window = - GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); - - // Use a header bar when running in GNOME as this is the common style used - // by applications and is the setup most users will be using (e.g. Ubuntu - // desktop). - // If running on X and not using GNOME then just use a traditional title bar - // in case the window manager does more exotic layout, e.g. tiling. - // If running on Wayland assume the header bar will work (may need changing - // if future cases occur). - gboolean use_header_bar = TRUE; -#ifdef GDK_WINDOWING_X11 - GdkScreen* screen = gtk_window_get_screen(window); - if (GDK_IS_X11_SCREEN(screen)) { - const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); - if (g_strcmp0(wm_name, "GNOME Shell") != 0) { - use_header_bar = FALSE; - } - } -#endif - if (use_header_bar) { - GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); - gtk_widget_show(GTK_WIDGET(header_bar)); - gtk_header_bar_set_title(header_bar, "brick_breaker"); - gtk_header_bar_set_show_close_button(header_bar, TRUE); - gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); - } else { - gtk_window_set_title(window, "brick_breaker"); - } - - gtk_window_set_default_size(window, 1280, 720); - gtk_widget_show(GTK_WIDGET(window)); - - g_autoptr(FlDartProject) project = fl_dart_project_new(); - fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); - - FlView* view = fl_view_new(project); - gtk_widget_show(GTK_WIDGET(view)); - gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); - - fl_register_plugins(FL_PLUGIN_REGISTRY(view)); - - gtk_widget_grab_focus(GTK_WIDGET(view)); -} - -// Implements GApplication::local_command_line. -static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { - MyApplication* self = MY_APPLICATION(application); - // Strip out the first argument as it is the binary name. - self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); - - g_autoptr(GError) error = nullptr; - if (!g_application_register(application, nullptr, &error)) { - g_warning("Failed to register: %s", error->message); - *exit_status = 1; - return TRUE; - } - - g_application_activate(application); - *exit_status = 0; - - return TRUE; -} - -// Implements GApplication::startup. -static void my_application_startup(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application startup. - - G_APPLICATION_CLASS(my_application_parent_class)->startup(application); -} - -// Implements GApplication::shutdown. -static void my_application_shutdown(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application shutdown. - - G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); -} - -// Implements GObject::dispose. -static void my_application_dispose(GObject* object) { - MyApplication* self = MY_APPLICATION(object); - g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); - G_OBJECT_CLASS(my_application_parent_class)->dispose(object); -} - -static void my_application_class_init(MyApplicationClass* klass) { - G_APPLICATION_CLASS(klass)->activate = my_application_activate; - G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; - G_APPLICATION_CLASS(klass)->startup = my_application_startup; - G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; - G_OBJECT_CLASS(klass)->dispose = my_application_dispose; -} - -static void my_application_init(MyApplication* self) {} - -MyApplication* my_application_new() { - return MY_APPLICATION(g_object_new(my_application_get_type(), - "application-id", APPLICATION_ID, - "flags", G_APPLICATION_NON_UNIQUE, - nullptr)); -} diff --git a/brick_breaker/step_08/linux/runner/CMakeLists.txt b/brick_breaker/step_08/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/brick_breaker/step_08/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/brick_breaker/step_08/linux/main.cc b/brick_breaker/step_08/linux/runner/main.cc similarity index 100% rename from brick_breaker/step_08/linux/main.cc rename to brick_breaker/step_08/linux/runner/main.cc diff --git a/brick_breaker/step_08/linux/runner/my_application.cc b/brick_breaker/step_08/linux/runner/my_application.cc new file mode 100644 index 0000000000..f80944a7ba --- /dev/null +++ b/brick_breaker/step_08/linux/runner/my_application.cc @@ -0,0 +1,130 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "brick_breaker"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "brick_breaker"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/brick_breaker/step_08/linux/my_application.h b/brick_breaker/step_08/linux/runner/my_application.h similarity index 100% rename from brick_breaker/step_08/linux/my_application.h rename to brick_breaker/step_08/linux/runner/my_application.h diff --git a/brick_breaker/step_08/macos/Runner.xcodeproj/project.pbxproj b/brick_breaker/step_08/macos/Runner.xcodeproj/project.pbxproj index 139f2ab564..8a694eeb67 100644 --- a/brick_breaker/step_08/macos/Runner.xcodeproj/project.pbxproj +++ b/brick_breaker/step_08/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ - 26DEE62C40082E048AB2DAC9 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F92CB96B5E92665177C18209 /* Pods_Runner.framework */; }; - 302724C6CB220CF55A24A7F6 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6405B62D2CA2577368E77111 /* Pods_RunnerTests.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; + 5658E56B62B605B138A9F111 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B7BD0B1970D1897B74F07A89 /* Pods_Runner.framework */; }; + 9F81B80161B2124A9F488A1C /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DA8EE3E1AF83156D1A12CA68 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,11 +62,11 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 114979CB87B99A65FC62EC11 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; }; + 338EE091C1F9F5450098813D /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 33CC10ED2044A3C60003C045 /* brick_breaker.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = brick_breaker.app; sourceTree = BUILT_PRODUCTS_DIR; }; 33CC10F02044A3C60003C045 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 33CC10F22044A3C60003C045 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = Runner/Assets.xcassets; sourceTree = ""; }; @@ -79,15 +79,15 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 35582EBA48CF0CAD302E6F20 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 44116D975D14ACE930B555BE /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 6405B62D2CA2577368E77111 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 81C82BB4E8EABFAC2304248A /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 8267E521E815EC0C64F08901 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - E93D02470CD1D3EA960793F9 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - F92CB96B5E92665177C18209 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - FF398A0A44AD651D2C2EF977 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 9FD3C4B0DFBFF16743BD5FAF /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + B286950BC95C7F770C832B6E /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + B65E8CAEC95BEF8588C418A4 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + B7BD0B1970D1897B74F07A89 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + BCBDA775B0BEE126A464E62B /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + DA8EE3E1AF83156D1A12CA68 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 302724C6CB220CF55A24A7F6 /* Pods_RunnerTests.framework in Frameworks */, + 9F81B80161B2124A9F488A1C /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,27 +103,13 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 26DEE62C40082E048AB2DAC9 /* Pods_Runner.framework in Frameworks */, + 5658E56B62B605B138A9F111 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 1AD2B861098DC69EDF5A5504 /* Pods */ = { - isa = PBXGroup; - children = ( - 35582EBA48CF0CAD302E6F20 /* Pods-Runner.debug.xcconfig */, - 44116D975D14ACE930B555BE /* Pods-Runner.release.xcconfig */, - 114979CB87B99A65FC62EC11 /* Pods-Runner.profile.xcconfig */, - 81C82BB4E8EABFAC2304248A /* Pods-RunnerTests.debug.xcconfig */, - FF398A0A44AD651D2C2EF977 /* Pods-RunnerTests.release.xcconfig */, - E93D02470CD1D3EA960793F9 /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; 331C80D6294CF71000263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -151,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 1AD2B861098DC69EDF5A5504 /* Pods */, + C14890065505BEA860C9C768 /* Pods */, ); sourceTree = ""; }; @@ -199,11 +185,25 @@ path = Runner; sourceTree = ""; }; + C14890065505BEA860C9C768 /* Pods */ = { + isa = PBXGroup; + children = ( + 8267E521E815EC0C64F08901 /* Pods-Runner.debug.xcconfig */, + 338EE091C1F9F5450098813D /* Pods-Runner.release.xcconfig */, + B286950BC95C7F770C832B6E /* Pods-Runner.profile.xcconfig */, + B65E8CAEC95BEF8588C418A4 /* Pods-RunnerTests.debug.xcconfig */, + 9FD3C4B0DFBFF16743BD5FAF /* Pods-RunnerTests.release.xcconfig */, + BCBDA775B0BEE126A464E62B /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - F92CB96B5E92665177C18209 /* Pods_Runner.framework */, - 6405B62D2CA2577368E77111 /* Pods_RunnerTests.framework */, + B7BD0B1970D1897B74F07A89 /* Pods_Runner.framework */, + DA8EE3E1AF83156D1A12CA68 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - C4789C072FD8F107A45D1C43 /* [CP] Check Pods Manifest.lock */, + D9060D80D88FD22DB1DE6C3A /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 95500D3C1EE7FB7DACCE08DC /* [CP] Check Pods Manifest.lock */, + E437887DD480199527592E81 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - B311D48FC89BEDF4EB2DCDDE /* [CP] Embed Pods Frameworks */, + 23E4B333ADF5FCEE5E2EE136 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,6 +323,23 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ + 23E4B333ADF5FCEE5E2EE136 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -361,7 +378,7 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 95500D3C1EE7FB7DACCE08DC /* [CP] Check Pods Manifest.lock */ = { + D9060D80D88FD22DB1DE6C3A /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -376,31 +393,14 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - B311D48FC89BEDF4EB2DCDDE /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; - C4789C072FD8F107A45D1C43 /* [CP] Check Pods Manifest.lock */ = { + E437887DD480199527592E81 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -415,7 +415,7 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 81C82BB4E8EABFAC2304248A /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = B65E8CAEC95BEF8588C418A4 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = FF398A0A44AD651D2C2EF977 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 9FD3C4B0DFBFF16743BD5FAF /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = E93D02470CD1D3EA960793F9 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = BCBDA775B0BEE126A464E62B /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/brick_breaker/step_08/web/index.html b/brick_breaker/step_08/web/index.html index 0ffbea0397..da690bb6c1 100644 --- a/brick_breaker/step_08/web/index.html +++ b/brick_breaker/step_08/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/brick_breaker/step_09/ios/Runner.xcodeproj/project.pbxproj b/brick_breaker/step_09/ios/Runner.xcodeproj/project.pbxproj index 6d1a96d63a..add9e55410 100644 --- a/brick_breaker/step_09/ios/Runner.xcodeproj/project.pbxproj +++ b/brick_breaker/step_09/ios/Runner.xcodeproj/project.pbxproj @@ -8,14 +8,14 @@ /* Begin PBXBuildFile section */ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; + 29AD4F65B90DCD21875C2A4C /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C931705C418493DC02E52C6A /* Pods_Runner.framework */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; - 435C672EDB3C79EF8289B1E5 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9C8A6BA03FC59B0344DC9E5F /* Pods_RunnerTests.framework */; }; - 4894AF48D2F94D6F1DABB2D3 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 57D6C7E904CFDCF3B7D477C6 /* Pods_Runner.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; + BB5BED3E580B45F0CD80E554 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B5F63ADA01AF049FFFC5CB39 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -47,14 +47,13 @@ 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 43E393EFCAC4AAC9B6E9AB99 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 4E857F5A50355F5D8711BD08 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 57D6C7E904CFDCF3B7D477C6 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 71648F3D10B18A805A5C5B83 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 58E4120D718D183216E2F816 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 71F43AEF029360DE99B40B6F /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 91AE6679660B5BFDE37CA10C /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 7D4452472D5AF425A635039C /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 87D6F4AFB2A01D1CBC283DBE /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -62,31 +61,41 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 9C8A6BA03FC59B0344DC9E5F /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - AC955D3DBF778EEBAF66455F /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - F6D81E7FFA76393DDD83EDE7 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + B5F63ADA01AF049FFFC5CB39 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + C931705C418493DC02E52C6A /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D510FFBF1E5D8C842D1A1042 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + D5D7E82A3FEE48552A1B1A9A /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 0B544D9D6451D8B7513063BD /* Frameworks */ = { + 97C146EB1CF9000F007C117D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 435C672EDB3C79EF8289B1E5 /* Pods_RunnerTests.framework in Frameworks */, + 29AD4F65B90DCD21875C2A4C /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 97C146EB1CF9000F007C117D /* Frameworks */ = { + CF0381FD905E27D8E4FA4E94 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 4894AF48D2F94D6F1DABB2D3 /* Pods_Runner.framework in Frameworks */, + BB5BED3E580B45F0CD80E554 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 2078C8554440C2F9205D6B5A /* Frameworks */ = { + isa = PBXGroup; + children = ( + C931705C418493DC02E52C6A /* Pods_Runner.framework */, + B5F63ADA01AF049FFFC5CB39 /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; 331C8082294A63A400263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -95,15 +104,15 @@ path = RunnerTests; sourceTree = ""; }; - 9135670FD92EB74D54D0AB79 /* Pods */ = { + 56387D4532B1071467568739 /* Pods */ = { isa = PBXGroup; children = ( - 43E393EFCAC4AAC9B6E9AB99 /* Pods-Runner.debug.xcconfig */, - 4E857F5A50355F5D8711BD08 /* Pods-Runner.release.xcconfig */, - F6D81E7FFA76393DDD83EDE7 /* Pods-Runner.profile.xcconfig */, - 71648F3D10B18A805A5C5B83 /* Pods-RunnerTests.debug.xcconfig */, - AC955D3DBF778EEBAF66455F /* Pods-RunnerTests.release.xcconfig */, - 91AE6679660B5BFDE37CA10C /* Pods-RunnerTests.profile.xcconfig */, + 87D6F4AFB2A01D1CBC283DBE /* Pods-Runner.debug.xcconfig */, + 71F43AEF029360DE99B40B6F /* Pods-Runner.release.xcconfig */, + D510FFBF1E5D8C842D1A1042 /* Pods-Runner.profile.xcconfig */, + 7D4452472D5AF425A635039C /* Pods-RunnerTests.debug.xcconfig */, + 58E4120D718D183216E2F816 /* Pods-RunnerTests.release.xcconfig */, + D5D7E82A3FEE48552A1B1A9A /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -127,8 +136,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - 9135670FD92EB74D54D0AB79 /* Pods */, - F20E1DAAA380CE8C17F7F24D /* Frameworks */, + 56387D4532B1071467568739 /* Pods */, + 2078C8554440C2F9205D6B5A /* Frameworks */, ); sourceTree = ""; }; @@ -156,15 +165,6 @@ path = Runner; sourceTree = ""; }; - F20E1DAAA380CE8C17F7F24D /* Frameworks */ = { - isa = PBXGroup; - children = ( - 57D6C7E904CFDCF3B7D477C6 /* Pods_Runner.framework */, - 9C8A6BA03FC59B0344DC9E5F /* Pods_RunnerTests.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - B0951A5E64A8BCDFA6315953 /* [CP] Check Pods Manifest.lock */, + 6B43BA0ED7A59E5F9E7824A9 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 0B544D9D6451D8B7513063BD /* Frameworks */, + CF0381FD905E27D8E4FA4E94 /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - C6BE0A2E972E4BF469954FE7 /* [CP] Check Pods Manifest.lock */, + AD7073F8B2A8B9D7C73C1E2B /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - EA8C715000E3367B65E72722 /* [CP] Embed Pods Frameworks */, + 16BE037FF21DCFBC30C993A0 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -270,38 +270,40 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + 16BE037FF21DCFBC30C993A0 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputPaths = ( - "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "Thin Binary"; - outputPaths = ( + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); - name = "Run Script"; + name = "Thin Binary"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - B0951A5E64A8BCDFA6315953 /* [CP] Check Pods Manifest.lock */ = { + 6B43BA0ED7A59E5F9E7824A9 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -323,43 +325,41 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - C6BE0A2E972E4BF469954FE7 /* [CP] Check Pods Manifest.lock */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( ); + name = "Run Script"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - EA8C715000E3367B65E72722 /* [CP] Embed Pods Frameworks */ = { + AD7073F8B2A8B9D7C73C1E2B /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 71648F3D10B18A805A5C5B83 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 7D4452472D5AF425A635039C /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = AC955D3DBF778EEBAF66455F /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 58E4120D718D183216E2F816 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 91AE6679660B5BFDE37CA10C /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = D5D7E82A3FEE48552A1B1A9A /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/brick_breaker/step_09/linux/CMakeLists.txt b/brick_breaker/step_09/linux/CMakeLists.txt index 97c400e174..9f288a67f3 100644 --- a/brick_breaker/step_09/linux/CMakeLists.txt +++ b/brick_breaker/step_09/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/brick_breaker/step_09/linux/my_application.cc b/brick_breaker/step_09/linux/my_application.cc deleted file mode 100644 index 5f348fea29..0000000000 --- a/brick_breaker/step_09/linux/my_application.cc +++ /dev/null @@ -1,124 +0,0 @@ -#include "my_application.h" - -#include -#ifdef GDK_WINDOWING_X11 -#include -#endif - -#include "flutter/generated_plugin_registrant.h" - -struct _MyApplication { - GtkApplication parent_instance; - char** dart_entrypoint_arguments; -}; - -G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) - -// Implements GApplication::activate. -static void my_application_activate(GApplication* application) { - MyApplication* self = MY_APPLICATION(application); - GtkWindow* window = - GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); - - // Use a header bar when running in GNOME as this is the common style used - // by applications and is the setup most users will be using (e.g. Ubuntu - // desktop). - // If running on X and not using GNOME then just use a traditional title bar - // in case the window manager does more exotic layout, e.g. tiling. - // If running on Wayland assume the header bar will work (may need changing - // if future cases occur). - gboolean use_header_bar = TRUE; -#ifdef GDK_WINDOWING_X11 - GdkScreen* screen = gtk_window_get_screen(window); - if (GDK_IS_X11_SCREEN(screen)) { - const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); - if (g_strcmp0(wm_name, "GNOME Shell") != 0) { - use_header_bar = FALSE; - } - } -#endif - if (use_header_bar) { - GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); - gtk_widget_show(GTK_WIDGET(header_bar)); - gtk_header_bar_set_title(header_bar, "brick_breaker"); - gtk_header_bar_set_show_close_button(header_bar, TRUE); - gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); - } else { - gtk_window_set_title(window, "brick_breaker"); - } - - gtk_window_set_default_size(window, 1280, 720); - gtk_widget_show(GTK_WIDGET(window)); - - g_autoptr(FlDartProject) project = fl_dart_project_new(); - fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); - - FlView* view = fl_view_new(project); - gtk_widget_show(GTK_WIDGET(view)); - gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); - - fl_register_plugins(FL_PLUGIN_REGISTRY(view)); - - gtk_widget_grab_focus(GTK_WIDGET(view)); -} - -// Implements GApplication::local_command_line. -static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { - MyApplication* self = MY_APPLICATION(application); - // Strip out the first argument as it is the binary name. - self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); - - g_autoptr(GError) error = nullptr; - if (!g_application_register(application, nullptr, &error)) { - g_warning("Failed to register: %s", error->message); - *exit_status = 1; - return TRUE; - } - - g_application_activate(application); - *exit_status = 0; - - return TRUE; -} - -// Implements GApplication::startup. -static void my_application_startup(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application startup. - - G_APPLICATION_CLASS(my_application_parent_class)->startup(application); -} - -// Implements GApplication::shutdown. -static void my_application_shutdown(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application shutdown. - - G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); -} - -// Implements GObject::dispose. -static void my_application_dispose(GObject* object) { - MyApplication* self = MY_APPLICATION(object); - g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); - G_OBJECT_CLASS(my_application_parent_class)->dispose(object); -} - -static void my_application_class_init(MyApplicationClass* klass) { - G_APPLICATION_CLASS(klass)->activate = my_application_activate; - G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; - G_APPLICATION_CLASS(klass)->startup = my_application_startup; - G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; - G_OBJECT_CLASS(klass)->dispose = my_application_dispose; -} - -static void my_application_init(MyApplication* self) {} - -MyApplication* my_application_new() { - return MY_APPLICATION(g_object_new(my_application_get_type(), - "application-id", APPLICATION_ID, - "flags", G_APPLICATION_NON_UNIQUE, - nullptr)); -} diff --git a/brick_breaker/step_09/linux/runner/CMakeLists.txt b/brick_breaker/step_09/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/brick_breaker/step_09/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/brick_breaker/step_09/linux/main.cc b/brick_breaker/step_09/linux/runner/main.cc similarity index 100% rename from brick_breaker/step_09/linux/main.cc rename to brick_breaker/step_09/linux/runner/main.cc diff --git a/brick_breaker/step_09/linux/runner/my_application.cc b/brick_breaker/step_09/linux/runner/my_application.cc new file mode 100644 index 0000000000..f80944a7ba --- /dev/null +++ b/brick_breaker/step_09/linux/runner/my_application.cc @@ -0,0 +1,130 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "brick_breaker"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "brick_breaker"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/brick_breaker/step_09/linux/my_application.h b/brick_breaker/step_09/linux/runner/my_application.h similarity index 100% rename from brick_breaker/step_09/linux/my_application.h rename to brick_breaker/step_09/linux/runner/my_application.h diff --git a/brick_breaker/step_09/macos/Runner.xcodeproj/project.pbxproj b/brick_breaker/step_09/macos/Runner.xcodeproj/project.pbxproj index 139f2ab564..8a694eeb67 100644 --- a/brick_breaker/step_09/macos/Runner.xcodeproj/project.pbxproj +++ b/brick_breaker/step_09/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ - 26DEE62C40082E048AB2DAC9 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F92CB96B5E92665177C18209 /* Pods_Runner.framework */; }; - 302724C6CB220CF55A24A7F6 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6405B62D2CA2577368E77111 /* Pods_RunnerTests.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; + 5658E56B62B605B138A9F111 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B7BD0B1970D1897B74F07A89 /* Pods_Runner.framework */; }; + 9F81B80161B2124A9F488A1C /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DA8EE3E1AF83156D1A12CA68 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,11 +62,11 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 114979CB87B99A65FC62EC11 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; }; + 338EE091C1F9F5450098813D /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 33CC10ED2044A3C60003C045 /* brick_breaker.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = brick_breaker.app; sourceTree = BUILT_PRODUCTS_DIR; }; 33CC10F02044A3C60003C045 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 33CC10F22044A3C60003C045 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = Runner/Assets.xcassets; sourceTree = ""; }; @@ -79,15 +79,15 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 35582EBA48CF0CAD302E6F20 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 44116D975D14ACE930B555BE /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 6405B62D2CA2577368E77111 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 81C82BB4E8EABFAC2304248A /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 8267E521E815EC0C64F08901 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - E93D02470CD1D3EA960793F9 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - F92CB96B5E92665177C18209 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - FF398A0A44AD651D2C2EF977 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 9FD3C4B0DFBFF16743BD5FAF /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + B286950BC95C7F770C832B6E /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + B65E8CAEC95BEF8588C418A4 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + B7BD0B1970D1897B74F07A89 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + BCBDA775B0BEE126A464E62B /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + DA8EE3E1AF83156D1A12CA68 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 302724C6CB220CF55A24A7F6 /* Pods_RunnerTests.framework in Frameworks */, + 9F81B80161B2124A9F488A1C /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,27 +103,13 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 26DEE62C40082E048AB2DAC9 /* Pods_Runner.framework in Frameworks */, + 5658E56B62B605B138A9F111 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 1AD2B861098DC69EDF5A5504 /* Pods */ = { - isa = PBXGroup; - children = ( - 35582EBA48CF0CAD302E6F20 /* Pods-Runner.debug.xcconfig */, - 44116D975D14ACE930B555BE /* Pods-Runner.release.xcconfig */, - 114979CB87B99A65FC62EC11 /* Pods-Runner.profile.xcconfig */, - 81C82BB4E8EABFAC2304248A /* Pods-RunnerTests.debug.xcconfig */, - FF398A0A44AD651D2C2EF977 /* Pods-RunnerTests.release.xcconfig */, - E93D02470CD1D3EA960793F9 /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; 331C80D6294CF71000263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -151,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 1AD2B861098DC69EDF5A5504 /* Pods */, + C14890065505BEA860C9C768 /* Pods */, ); sourceTree = ""; }; @@ -199,11 +185,25 @@ path = Runner; sourceTree = ""; }; + C14890065505BEA860C9C768 /* Pods */ = { + isa = PBXGroup; + children = ( + 8267E521E815EC0C64F08901 /* Pods-Runner.debug.xcconfig */, + 338EE091C1F9F5450098813D /* Pods-Runner.release.xcconfig */, + B286950BC95C7F770C832B6E /* Pods-Runner.profile.xcconfig */, + B65E8CAEC95BEF8588C418A4 /* Pods-RunnerTests.debug.xcconfig */, + 9FD3C4B0DFBFF16743BD5FAF /* Pods-RunnerTests.release.xcconfig */, + BCBDA775B0BEE126A464E62B /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - F92CB96B5E92665177C18209 /* Pods_Runner.framework */, - 6405B62D2CA2577368E77111 /* Pods_RunnerTests.framework */, + B7BD0B1970D1897B74F07A89 /* Pods_Runner.framework */, + DA8EE3E1AF83156D1A12CA68 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - C4789C072FD8F107A45D1C43 /* [CP] Check Pods Manifest.lock */, + D9060D80D88FD22DB1DE6C3A /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 95500D3C1EE7FB7DACCE08DC /* [CP] Check Pods Manifest.lock */, + E437887DD480199527592E81 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - B311D48FC89BEDF4EB2DCDDE /* [CP] Embed Pods Frameworks */, + 23E4B333ADF5FCEE5E2EE136 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,6 +323,23 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ + 23E4B333ADF5FCEE5E2EE136 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -361,7 +378,7 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 95500D3C1EE7FB7DACCE08DC /* [CP] Check Pods Manifest.lock */ = { + D9060D80D88FD22DB1DE6C3A /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -376,31 +393,14 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - B311D48FC89BEDF4EB2DCDDE /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; - C4789C072FD8F107A45D1C43 /* [CP] Check Pods Manifest.lock */ = { + E437887DD480199527592E81 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -415,7 +415,7 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 81C82BB4E8EABFAC2304248A /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = B65E8CAEC95BEF8588C418A4 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = FF398A0A44AD651D2C2EF977 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 9FD3C4B0DFBFF16743BD5FAF /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = E93D02470CD1D3EA960793F9 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = BCBDA775B0BEE126A464E62B /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/brick_breaker/step_09/web/index.html b/brick_breaker/step_09/web/index.html index 0ffbea0397..da690bb6c1 100644 --- a/brick_breaker/step_09/web/index.html +++ b/brick_breaker/step_09/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/brick_breaker/step_10/ios/Runner.xcodeproj/project.pbxproj b/brick_breaker/step_10/ios/Runner.xcodeproj/project.pbxproj index 6d1a96d63a..add9e55410 100644 --- a/brick_breaker/step_10/ios/Runner.xcodeproj/project.pbxproj +++ b/brick_breaker/step_10/ios/Runner.xcodeproj/project.pbxproj @@ -8,14 +8,14 @@ /* Begin PBXBuildFile section */ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; + 29AD4F65B90DCD21875C2A4C /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C931705C418493DC02E52C6A /* Pods_Runner.framework */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; - 435C672EDB3C79EF8289B1E5 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9C8A6BA03FC59B0344DC9E5F /* Pods_RunnerTests.framework */; }; - 4894AF48D2F94D6F1DABB2D3 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 57D6C7E904CFDCF3B7D477C6 /* Pods_Runner.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; + BB5BED3E580B45F0CD80E554 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B5F63ADA01AF049FFFC5CB39 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -47,14 +47,13 @@ 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 43E393EFCAC4AAC9B6E9AB99 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 4E857F5A50355F5D8711BD08 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 57D6C7E904CFDCF3B7D477C6 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 71648F3D10B18A805A5C5B83 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 58E4120D718D183216E2F816 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 71F43AEF029360DE99B40B6F /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 91AE6679660B5BFDE37CA10C /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 7D4452472D5AF425A635039C /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 87D6F4AFB2A01D1CBC283DBE /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -62,31 +61,41 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 9C8A6BA03FC59B0344DC9E5F /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - AC955D3DBF778EEBAF66455F /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - F6D81E7FFA76393DDD83EDE7 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + B5F63ADA01AF049FFFC5CB39 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + C931705C418493DC02E52C6A /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D510FFBF1E5D8C842D1A1042 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + D5D7E82A3FEE48552A1B1A9A /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 0B544D9D6451D8B7513063BD /* Frameworks */ = { + 97C146EB1CF9000F007C117D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 435C672EDB3C79EF8289B1E5 /* Pods_RunnerTests.framework in Frameworks */, + 29AD4F65B90DCD21875C2A4C /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 97C146EB1CF9000F007C117D /* Frameworks */ = { + CF0381FD905E27D8E4FA4E94 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 4894AF48D2F94D6F1DABB2D3 /* Pods_Runner.framework in Frameworks */, + BB5BED3E580B45F0CD80E554 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 2078C8554440C2F9205D6B5A /* Frameworks */ = { + isa = PBXGroup; + children = ( + C931705C418493DC02E52C6A /* Pods_Runner.framework */, + B5F63ADA01AF049FFFC5CB39 /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; 331C8082294A63A400263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -95,15 +104,15 @@ path = RunnerTests; sourceTree = ""; }; - 9135670FD92EB74D54D0AB79 /* Pods */ = { + 56387D4532B1071467568739 /* Pods */ = { isa = PBXGroup; children = ( - 43E393EFCAC4AAC9B6E9AB99 /* Pods-Runner.debug.xcconfig */, - 4E857F5A50355F5D8711BD08 /* Pods-Runner.release.xcconfig */, - F6D81E7FFA76393DDD83EDE7 /* Pods-Runner.profile.xcconfig */, - 71648F3D10B18A805A5C5B83 /* Pods-RunnerTests.debug.xcconfig */, - AC955D3DBF778EEBAF66455F /* Pods-RunnerTests.release.xcconfig */, - 91AE6679660B5BFDE37CA10C /* Pods-RunnerTests.profile.xcconfig */, + 87D6F4AFB2A01D1CBC283DBE /* Pods-Runner.debug.xcconfig */, + 71F43AEF029360DE99B40B6F /* Pods-Runner.release.xcconfig */, + D510FFBF1E5D8C842D1A1042 /* Pods-Runner.profile.xcconfig */, + 7D4452472D5AF425A635039C /* Pods-RunnerTests.debug.xcconfig */, + 58E4120D718D183216E2F816 /* Pods-RunnerTests.release.xcconfig */, + D5D7E82A3FEE48552A1B1A9A /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -127,8 +136,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - 9135670FD92EB74D54D0AB79 /* Pods */, - F20E1DAAA380CE8C17F7F24D /* Frameworks */, + 56387D4532B1071467568739 /* Pods */, + 2078C8554440C2F9205D6B5A /* Frameworks */, ); sourceTree = ""; }; @@ -156,15 +165,6 @@ path = Runner; sourceTree = ""; }; - F20E1DAAA380CE8C17F7F24D /* Frameworks */ = { - isa = PBXGroup; - children = ( - 57D6C7E904CFDCF3B7D477C6 /* Pods_Runner.framework */, - 9C8A6BA03FC59B0344DC9E5F /* Pods_RunnerTests.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - B0951A5E64A8BCDFA6315953 /* [CP] Check Pods Manifest.lock */, + 6B43BA0ED7A59E5F9E7824A9 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 0B544D9D6451D8B7513063BD /* Frameworks */, + CF0381FD905E27D8E4FA4E94 /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - C6BE0A2E972E4BF469954FE7 /* [CP] Check Pods Manifest.lock */, + AD7073F8B2A8B9D7C73C1E2B /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - EA8C715000E3367B65E72722 /* [CP] Embed Pods Frameworks */, + 16BE037FF21DCFBC30C993A0 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -270,38 +270,40 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + 16BE037FF21DCFBC30C993A0 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputPaths = ( - "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "Thin Binary"; - outputPaths = ( + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); - name = "Run Script"; + name = "Thin Binary"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - B0951A5E64A8BCDFA6315953 /* [CP] Check Pods Manifest.lock */ = { + 6B43BA0ED7A59E5F9E7824A9 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -323,43 +325,41 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - C6BE0A2E972E4BF469954FE7 /* [CP] Check Pods Manifest.lock */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( ); + name = "Run Script"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - EA8C715000E3367B65E72722 /* [CP] Embed Pods Frameworks */ = { + AD7073F8B2A8B9D7C73C1E2B /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 71648F3D10B18A805A5C5B83 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 7D4452472D5AF425A635039C /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = AC955D3DBF778EEBAF66455F /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 58E4120D718D183216E2F816 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 91AE6679660B5BFDE37CA10C /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = D5D7E82A3FEE48552A1B1A9A /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/brick_breaker/step_10/linux/CMakeLists.txt b/brick_breaker/step_10/linux/CMakeLists.txt index 97c400e174..9f288a67f3 100644 --- a/brick_breaker/step_10/linux/CMakeLists.txt +++ b/brick_breaker/step_10/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/brick_breaker/step_10/linux/my_application.cc b/brick_breaker/step_10/linux/my_application.cc deleted file mode 100644 index 5f348fea29..0000000000 --- a/brick_breaker/step_10/linux/my_application.cc +++ /dev/null @@ -1,124 +0,0 @@ -#include "my_application.h" - -#include -#ifdef GDK_WINDOWING_X11 -#include -#endif - -#include "flutter/generated_plugin_registrant.h" - -struct _MyApplication { - GtkApplication parent_instance; - char** dart_entrypoint_arguments; -}; - -G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) - -// Implements GApplication::activate. -static void my_application_activate(GApplication* application) { - MyApplication* self = MY_APPLICATION(application); - GtkWindow* window = - GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); - - // Use a header bar when running in GNOME as this is the common style used - // by applications and is the setup most users will be using (e.g. Ubuntu - // desktop). - // If running on X and not using GNOME then just use a traditional title bar - // in case the window manager does more exotic layout, e.g. tiling. - // If running on Wayland assume the header bar will work (may need changing - // if future cases occur). - gboolean use_header_bar = TRUE; -#ifdef GDK_WINDOWING_X11 - GdkScreen* screen = gtk_window_get_screen(window); - if (GDK_IS_X11_SCREEN(screen)) { - const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); - if (g_strcmp0(wm_name, "GNOME Shell") != 0) { - use_header_bar = FALSE; - } - } -#endif - if (use_header_bar) { - GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); - gtk_widget_show(GTK_WIDGET(header_bar)); - gtk_header_bar_set_title(header_bar, "brick_breaker"); - gtk_header_bar_set_show_close_button(header_bar, TRUE); - gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); - } else { - gtk_window_set_title(window, "brick_breaker"); - } - - gtk_window_set_default_size(window, 1280, 720); - gtk_widget_show(GTK_WIDGET(window)); - - g_autoptr(FlDartProject) project = fl_dart_project_new(); - fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); - - FlView* view = fl_view_new(project); - gtk_widget_show(GTK_WIDGET(view)); - gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); - - fl_register_plugins(FL_PLUGIN_REGISTRY(view)); - - gtk_widget_grab_focus(GTK_WIDGET(view)); -} - -// Implements GApplication::local_command_line. -static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { - MyApplication* self = MY_APPLICATION(application); - // Strip out the first argument as it is the binary name. - self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); - - g_autoptr(GError) error = nullptr; - if (!g_application_register(application, nullptr, &error)) { - g_warning("Failed to register: %s", error->message); - *exit_status = 1; - return TRUE; - } - - g_application_activate(application); - *exit_status = 0; - - return TRUE; -} - -// Implements GApplication::startup. -static void my_application_startup(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application startup. - - G_APPLICATION_CLASS(my_application_parent_class)->startup(application); -} - -// Implements GApplication::shutdown. -static void my_application_shutdown(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application shutdown. - - G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); -} - -// Implements GObject::dispose. -static void my_application_dispose(GObject* object) { - MyApplication* self = MY_APPLICATION(object); - g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); - G_OBJECT_CLASS(my_application_parent_class)->dispose(object); -} - -static void my_application_class_init(MyApplicationClass* klass) { - G_APPLICATION_CLASS(klass)->activate = my_application_activate; - G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; - G_APPLICATION_CLASS(klass)->startup = my_application_startup; - G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; - G_OBJECT_CLASS(klass)->dispose = my_application_dispose; -} - -static void my_application_init(MyApplication* self) {} - -MyApplication* my_application_new() { - return MY_APPLICATION(g_object_new(my_application_get_type(), - "application-id", APPLICATION_ID, - "flags", G_APPLICATION_NON_UNIQUE, - nullptr)); -} diff --git a/brick_breaker/step_10/linux/runner/CMakeLists.txt b/brick_breaker/step_10/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/brick_breaker/step_10/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/brick_breaker/step_10/linux/main.cc b/brick_breaker/step_10/linux/runner/main.cc similarity index 100% rename from brick_breaker/step_10/linux/main.cc rename to brick_breaker/step_10/linux/runner/main.cc diff --git a/brick_breaker/step_10/linux/runner/my_application.cc b/brick_breaker/step_10/linux/runner/my_application.cc new file mode 100644 index 0000000000..f80944a7ba --- /dev/null +++ b/brick_breaker/step_10/linux/runner/my_application.cc @@ -0,0 +1,130 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "brick_breaker"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "brick_breaker"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/brick_breaker/step_10/linux/my_application.h b/brick_breaker/step_10/linux/runner/my_application.h similarity index 100% rename from brick_breaker/step_10/linux/my_application.h rename to brick_breaker/step_10/linux/runner/my_application.h diff --git a/brick_breaker/step_10/macos/Runner.xcodeproj/project.pbxproj b/brick_breaker/step_10/macos/Runner.xcodeproj/project.pbxproj index 139f2ab564..8a694eeb67 100644 --- a/brick_breaker/step_10/macos/Runner.xcodeproj/project.pbxproj +++ b/brick_breaker/step_10/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ - 26DEE62C40082E048AB2DAC9 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F92CB96B5E92665177C18209 /* Pods_Runner.framework */; }; - 302724C6CB220CF55A24A7F6 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6405B62D2CA2577368E77111 /* Pods_RunnerTests.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; + 5658E56B62B605B138A9F111 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B7BD0B1970D1897B74F07A89 /* Pods_Runner.framework */; }; + 9F81B80161B2124A9F488A1C /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DA8EE3E1AF83156D1A12CA68 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,11 +62,11 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 114979CB87B99A65FC62EC11 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; }; + 338EE091C1F9F5450098813D /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 33CC10ED2044A3C60003C045 /* brick_breaker.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = brick_breaker.app; sourceTree = BUILT_PRODUCTS_DIR; }; 33CC10F02044A3C60003C045 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 33CC10F22044A3C60003C045 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = Runner/Assets.xcassets; sourceTree = ""; }; @@ -79,15 +79,15 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 35582EBA48CF0CAD302E6F20 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 44116D975D14ACE930B555BE /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 6405B62D2CA2577368E77111 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 81C82BB4E8EABFAC2304248A /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 8267E521E815EC0C64F08901 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - E93D02470CD1D3EA960793F9 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - F92CB96B5E92665177C18209 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - FF398A0A44AD651D2C2EF977 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 9FD3C4B0DFBFF16743BD5FAF /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + B286950BC95C7F770C832B6E /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + B65E8CAEC95BEF8588C418A4 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + B7BD0B1970D1897B74F07A89 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + BCBDA775B0BEE126A464E62B /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + DA8EE3E1AF83156D1A12CA68 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 302724C6CB220CF55A24A7F6 /* Pods_RunnerTests.framework in Frameworks */, + 9F81B80161B2124A9F488A1C /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,27 +103,13 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 26DEE62C40082E048AB2DAC9 /* Pods_Runner.framework in Frameworks */, + 5658E56B62B605B138A9F111 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 1AD2B861098DC69EDF5A5504 /* Pods */ = { - isa = PBXGroup; - children = ( - 35582EBA48CF0CAD302E6F20 /* Pods-Runner.debug.xcconfig */, - 44116D975D14ACE930B555BE /* Pods-Runner.release.xcconfig */, - 114979CB87B99A65FC62EC11 /* Pods-Runner.profile.xcconfig */, - 81C82BB4E8EABFAC2304248A /* Pods-RunnerTests.debug.xcconfig */, - FF398A0A44AD651D2C2EF977 /* Pods-RunnerTests.release.xcconfig */, - E93D02470CD1D3EA960793F9 /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; 331C80D6294CF71000263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -151,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 1AD2B861098DC69EDF5A5504 /* Pods */, + C14890065505BEA860C9C768 /* Pods */, ); sourceTree = ""; }; @@ -199,11 +185,25 @@ path = Runner; sourceTree = ""; }; + C14890065505BEA860C9C768 /* Pods */ = { + isa = PBXGroup; + children = ( + 8267E521E815EC0C64F08901 /* Pods-Runner.debug.xcconfig */, + 338EE091C1F9F5450098813D /* Pods-Runner.release.xcconfig */, + B286950BC95C7F770C832B6E /* Pods-Runner.profile.xcconfig */, + B65E8CAEC95BEF8588C418A4 /* Pods-RunnerTests.debug.xcconfig */, + 9FD3C4B0DFBFF16743BD5FAF /* Pods-RunnerTests.release.xcconfig */, + BCBDA775B0BEE126A464E62B /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - F92CB96B5E92665177C18209 /* Pods_Runner.framework */, - 6405B62D2CA2577368E77111 /* Pods_RunnerTests.framework */, + B7BD0B1970D1897B74F07A89 /* Pods_Runner.framework */, + DA8EE3E1AF83156D1A12CA68 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - C4789C072FD8F107A45D1C43 /* [CP] Check Pods Manifest.lock */, + D9060D80D88FD22DB1DE6C3A /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 95500D3C1EE7FB7DACCE08DC /* [CP] Check Pods Manifest.lock */, + E437887DD480199527592E81 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - B311D48FC89BEDF4EB2DCDDE /* [CP] Embed Pods Frameworks */, + 23E4B333ADF5FCEE5E2EE136 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,6 +323,23 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ + 23E4B333ADF5FCEE5E2EE136 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -361,7 +378,7 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 95500D3C1EE7FB7DACCE08DC /* [CP] Check Pods Manifest.lock */ = { + D9060D80D88FD22DB1DE6C3A /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -376,31 +393,14 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - B311D48FC89BEDF4EB2DCDDE /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; - C4789C072FD8F107A45D1C43 /* [CP] Check Pods Manifest.lock */ = { + E437887DD480199527592E81 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -415,7 +415,7 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 81C82BB4E8EABFAC2304248A /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = B65E8CAEC95BEF8588C418A4 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = FF398A0A44AD651D2C2EF977 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 9FD3C4B0DFBFF16743BD5FAF /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = E93D02470CD1D3EA960793F9 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = BCBDA775B0BEE126A464E62B /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/brick_breaker/step_10/web/index.html b/brick_breaker/step_10/web/index.html index 0ffbea0397..da690bb6c1 100644 --- a/brick_breaker/step_10/web/index.html +++ b/brick_breaker/step_10/web/index.html @@ -21,7 +21,7 @@ - + From 2d8fc45908b7d900b068999e4f7b28c14966f6d1 Mon Sep 17 00:00:00 2001 From: Brett Morgan Date: Wed, 13 Nov 2024 06:32:24 +1100 Subject: [PATCH 040/108] Update `dart-patterns-and-records` --- .../step_03/linux/CMakeLists.txt | 23 +--- .../step_03/linux/runner/CMakeLists.txt | 26 ++++ .../step_03/linux/{ => runner}/main.cc | 0 .../linux/{ => runner}/my_application.cc | 6 + .../linux/{ => runner}/my_application.h | 0 .../step_03/web/index.html | 2 +- .../step_04/linux/CMakeLists.txt | 23 +--- .../step_04/linux/runner/CMakeLists.txt | 26 ++++ .../step_04/linux/{ => runner}/main.cc | 0 .../linux/{ => runner}/my_application.cc | 6 + .../linux/{ => runner}/my_application.h | 0 .../step_04/web/index.html | 2 +- .../step_05/linux/CMakeLists.txt | 23 +--- .../step_05/linux/runner/CMakeLists.txt | 26 ++++ .../step_05/linux/{ => runner}/main.cc | 0 .../linux/{ => runner}/my_application.cc | 6 + .../linux/{ => runner}/my_application.h | 0 .../step_05/web/index.html | 2 +- .../step_06_a/linux/CMakeLists.txt | 23 +--- .../step_06_a/linux/runner/CMakeLists.txt | 26 ++++ .../step_06_a/linux/{ => runner}/main.cc | 0 .../linux/{ => runner}/my_application.cc | 6 + .../linux/{ => runner}/my_application.h | 0 .../step_06_a/web/index.html | 2 +- .../step_06_b/linux/CMakeLists.txt | 23 +--- .../step_06_b/linux/my_application.cc | 124 ----------------- .../step_06_b/linux/runner/CMakeLists.txt | 26 ++++ .../step_06_b/linux/{ => runner}/main.cc | 0 .../step_06_b/linux/runner/my_application.cc | 130 ++++++++++++++++++ .../linux/{ => runner}/my_application.h | 0 .../step_06_b/web/index.html | 2 +- .../step_07_a/linux/CMakeLists.txt | 23 +--- .../step_07_a/linux/my_application.cc | 124 ----------------- .../step_07_a/linux/runner/CMakeLists.txt | 26 ++++ .../step_07_a/linux/{ => runner}/main.cc | 0 .../step_07_a/linux/runner/my_application.cc | 130 ++++++++++++++++++ .../linux/{ => runner}/my_application.h | 0 .../step_07_a/web/index.html | 2 +- .../step_07_b/linux/CMakeLists.txt | 23 +--- .../step_07_b/linux/my_application.cc | 124 ----------------- .../step_07_b/linux/runner/CMakeLists.txt | 26 ++++ .../step_07_b/linux/{ => runner}/main.cc | 0 .../step_07_b/linux/runner/my_application.cc | 130 ++++++++++++++++++ .../linux/{ => runner}/my_application.h | 0 .../step_07_b/web/index.html | 2 +- .../step_08/linux/CMakeLists.txt | 23 +--- .../step_08/linux/my_application.cc | 124 ----------------- .../step_08/linux/runner/CMakeLists.txt | 26 ++++ .../step_08/linux/{ => runner}/main.cc | 0 .../step_08/linux/runner/my_application.cc | 130 ++++++++++++++++++ .../linux/{ => runner}/my_application.h | 0 .../step_08/web/index.html | 2 +- .../step_09/linux/CMakeLists.txt | 23 +--- .../step_09/linux/my_application.cc | 124 ----------------- .../step_09/linux/runner/CMakeLists.txt | 26 ++++ .../step_09/linux/{ => runner}/main.cc | 0 .../step_09/linux/runner/my_application.cc | 130 ++++++++++++++++++ .../linux/{ => runner}/my_application.h | 0 .../step_09/web/index.html | 2 +- .../step_10/linux/CMakeLists.txt | 23 +--- .../step_10/linux/my_application.cc | 124 ----------------- .../step_10/linux/runner/CMakeLists.txt | 26 ++++ .../step_10/linux/{ => runner}/main.cc | 0 .../step_10/linux/runner/my_application.cc | 130 ++++++++++++++++++ .../linux/{ => runner}/my_application.h | 0 .../step_10/web/index.html | 2 +- .../step_11_a/linux/CMakeLists.txt | 23 +--- .../step_11_a/linux/my_application.cc | 124 ----------------- .../step_11_a/linux/runner/CMakeLists.txt | 26 ++++ .../step_11_a/linux/{ => runner}/main.cc | 0 .../step_11_a/linux/runner/my_application.cc | 130 ++++++++++++++++++ .../linux/{ => runner}/my_application.h | 0 .../step_11_a/web/index.html | 2 +- .../step_11_b/linux/CMakeLists.txt | 23 +--- .../step_11_b/linux/my_application.cc | 124 ----------------- .../step_11_b/linux/runner/CMakeLists.txt | 26 ++++ .../step_11_b/linux/{ => runner}/main.cc | 0 .../step_11_b/linux/runner/my_application.cc | 130 ++++++++++++++++++ .../linux/{ => runner}/my_application.h | 0 .../step_11_b/web/index.html | 2 +- .../step_12/linux/CMakeLists.txt | 23 +--- .../step_12/linux/my_application.cc | 124 ----------------- .../step_12/linux/runner/CMakeLists.txt | 26 ++++ .../step_12/linux/{ => runner}/main.cc | 0 .../step_12/linux/runner/my_application.cc | 130 ++++++++++++++++++ .../linux/{ => runner}/my_application.h | 0 .../step_12/web/index.html | 2 +- 87 files changed, 1584 insertions(+), 1389 deletions(-) create mode 100644 dart-patterns-and-records/step_03/linux/runner/CMakeLists.txt rename dart-patterns-and-records/step_03/linux/{ => runner}/main.cc (100%) rename dart-patterns-and-records/step_03/linux/{ => runner}/my_application.cc (93%) rename dart-patterns-and-records/step_03/linux/{ => runner}/my_application.h (100%) create mode 100644 dart-patterns-and-records/step_04/linux/runner/CMakeLists.txt rename dart-patterns-and-records/step_04/linux/{ => runner}/main.cc (100%) rename dart-patterns-and-records/step_04/linux/{ => runner}/my_application.cc (93%) rename dart-patterns-and-records/step_04/linux/{ => runner}/my_application.h (100%) create mode 100644 dart-patterns-and-records/step_05/linux/runner/CMakeLists.txt rename dart-patterns-and-records/step_05/linux/{ => runner}/main.cc (100%) rename dart-patterns-and-records/step_05/linux/{ => runner}/my_application.cc (93%) rename dart-patterns-and-records/step_05/linux/{ => runner}/my_application.h (100%) create mode 100644 dart-patterns-and-records/step_06_a/linux/runner/CMakeLists.txt rename dart-patterns-and-records/step_06_a/linux/{ => runner}/main.cc (100%) rename dart-patterns-and-records/step_06_a/linux/{ => runner}/my_application.cc (93%) rename dart-patterns-and-records/step_06_a/linux/{ => runner}/my_application.h (100%) delete mode 100644 dart-patterns-and-records/step_06_b/linux/my_application.cc create mode 100644 dart-patterns-and-records/step_06_b/linux/runner/CMakeLists.txt rename dart-patterns-and-records/step_06_b/linux/{ => runner}/main.cc (100%) create mode 100644 dart-patterns-and-records/step_06_b/linux/runner/my_application.cc rename dart-patterns-and-records/step_06_b/linux/{ => runner}/my_application.h (100%) delete mode 100644 dart-patterns-and-records/step_07_a/linux/my_application.cc create mode 100644 dart-patterns-and-records/step_07_a/linux/runner/CMakeLists.txt rename dart-patterns-and-records/step_07_a/linux/{ => runner}/main.cc (100%) create mode 100644 dart-patterns-and-records/step_07_a/linux/runner/my_application.cc rename dart-patterns-and-records/step_07_a/linux/{ => runner}/my_application.h (100%) delete mode 100644 dart-patterns-and-records/step_07_b/linux/my_application.cc create mode 100644 dart-patterns-and-records/step_07_b/linux/runner/CMakeLists.txt rename dart-patterns-and-records/step_07_b/linux/{ => runner}/main.cc (100%) create mode 100644 dart-patterns-and-records/step_07_b/linux/runner/my_application.cc rename dart-patterns-and-records/step_07_b/linux/{ => runner}/my_application.h (100%) delete mode 100644 dart-patterns-and-records/step_08/linux/my_application.cc create mode 100644 dart-patterns-and-records/step_08/linux/runner/CMakeLists.txt rename dart-patterns-and-records/step_08/linux/{ => runner}/main.cc (100%) create mode 100644 dart-patterns-and-records/step_08/linux/runner/my_application.cc rename dart-patterns-and-records/step_08/linux/{ => runner}/my_application.h (100%) delete mode 100644 dart-patterns-and-records/step_09/linux/my_application.cc create mode 100644 dart-patterns-and-records/step_09/linux/runner/CMakeLists.txt rename dart-patterns-and-records/step_09/linux/{ => runner}/main.cc (100%) create mode 100644 dart-patterns-and-records/step_09/linux/runner/my_application.cc rename dart-patterns-and-records/step_09/linux/{ => runner}/my_application.h (100%) delete mode 100644 dart-patterns-and-records/step_10/linux/my_application.cc create mode 100644 dart-patterns-and-records/step_10/linux/runner/CMakeLists.txt rename dart-patterns-and-records/step_10/linux/{ => runner}/main.cc (100%) create mode 100644 dart-patterns-and-records/step_10/linux/runner/my_application.cc rename dart-patterns-and-records/step_10/linux/{ => runner}/my_application.h (100%) delete mode 100644 dart-patterns-and-records/step_11_a/linux/my_application.cc create mode 100644 dart-patterns-and-records/step_11_a/linux/runner/CMakeLists.txt rename dart-patterns-and-records/step_11_a/linux/{ => runner}/main.cc (100%) create mode 100644 dart-patterns-and-records/step_11_a/linux/runner/my_application.cc rename dart-patterns-and-records/step_11_a/linux/{ => runner}/my_application.h (100%) delete mode 100644 dart-patterns-and-records/step_11_b/linux/my_application.cc create mode 100644 dart-patterns-and-records/step_11_b/linux/runner/CMakeLists.txt rename dart-patterns-and-records/step_11_b/linux/{ => runner}/main.cc (100%) create mode 100644 dart-patterns-and-records/step_11_b/linux/runner/my_application.cc rename dart-patterns-and-records/step_11_b/linux/{ => runner}/my_application.h (100%) delete mode 100644 dart-patterns-and-records/step_12/linux/my_application.cc create mode 100644 dart-patterns-and-records/step_12/linux/runner/CMakeLists.txt rename dart-patterns-and-records/step_12/linux/{ => runner}/main.cc (100%) create mode 100644 dart-patterns-and-records/step_12/linux/runner/my_application.cc rename dart-patterns-and-records/step_12/linux/{ => runner}/my_application.h (100%) diff --git a/dart-patterns-and-records/step_03/linux/CMakeLists.txt b/dart-patterns-and-records/step_03/linux/CMakeLists.txt index dc88dd5e7d..6f653779a7 100644 --- a/dart-patterns-and-records/step_03/linux/CMakeLists.txt +++ b/dart-patterns-and-records/step_03/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/dart-patterns-and-records/step_03/linux/runner/CMakeLists.txt b/dart-patterns-and-records/step_03/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/dart-patterns-and-records/step_03/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/dart-patterns-and-records/step_03/linux/main.cc b/dart-patterns-and-records/step_03/linux/runner/main.cc similarity index 100% rename from dart-patterns-and-records/step_03/linux/main.cc rename to dart-patterns-and-records/step_03/linux/runner/main.cc diff --git a/dart-patterns-and-records/step_03/linux/my_application.cc b/dart-patterns-and-records/step_03/linux/runner/my_application.cc similarity index 93% rename from dart-patterns-and-records/step_03/linux/my_application.cc rename to dart-patterns-and-records/step_03/linux/runner/my_application.cc index 2e328e01f8..7065b83916 100644 --- a/dart-patterns-and-records/step_03/linux/my_application.cc +++ b/dart-patterns-and-records/step_03/linux/runner/my_application.cc @@ -117,6 +117,12 @@ static void my_application_class_init(MyApplicationClass* klass) { static void my_application_init(MyApplication* self) {} MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + return MY_APPLICATION(g_object_new(my_application_get_type(), "application-id", APPLICATION_ID, "flags", G_APPLICATION_NON_UNIQUE, diff --git a/dart-patterns-and-records/step_03/linux/my_application.h b/dart-patterns-and-records/step_03/linux/runner/my_application.h similarity index 100% rename from dart-patterns-and-records/step_03/linux/my_application.h rename to dart-patterns-and-records/step_03/linux/runner/my_application.h diff --git a/dart-patterns-and-records/step_03/web/index.html b/dart-patterns-and-records/step_03/web/index.html index e14846e8ce..adcc31bddb 100644 --- a/dart-patterns-and-records/step_03/web/index.html +++ b/dart-patterns-and-records/step_03/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/dart-patterns-and-records/step_04/linux/CMakeLists.txt b/dart-patterns-and-records/step_04/linux/CMakeLists.txt index dc88dd5e7d..6f653779a7 100644 --- a/dart-patterns-and-records/step_04/linux/CMakeLists.txt +++ b/dart-patterns-and-records/step_04/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/dart-patterns-and-records/step_04/linux/runner/CMakeLists.txt b/dart-patterns-and-records/step_04/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/dart-patterns-and-records/step_04/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/dart-patterns-and-records/step_04/linux/main.cc b/dart-patterns-and-records/step_04/linux/runner/main.cc similarity index 100% rename from dart-patterns-and-records/step_04/linux/main.cc rename to dart-patterns-and-records/step_04/linux/runner/main.cc diff --git a/dart-patterns-and-records/step_04/linux/my_application.cc b/dart-patterns-and-records/step_04/linux/runner/my_application.cc similarity index 93% rename from dart-patterns-and-records/step_04/linux/my_application.cc rename to dart-patterns-and-records/step_04/linux/runner/my_application.cc index 2e328e01f8..7065b83916 100644 --- a/dart-patterns-and-records/step_04/linux/my_application.cc +++ b/dart-patterns-and-records/step_04/linux/runner/my_application.cc @@ -117,6 +117,12 @@ static void my_application_class_init(MyApplicationClass* klass) { static void my_application_init(MyApplication* self) {} MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + return MY_APPLICATION(g_object_new(my_application_get_type(), "application-id", APPLICATION_ID, "flags", G_APPLICATION_NON_UNIQUE, diff --git a/dart-patterns-and-records/step_04/linux/my_application.h b/dart-patterns-and-records/step_04/linux/runner/my_application.h similarity index 100% rename from dart-patterns-and-records/step_04/linux/my_application.h rename to dart-patterns-and-records/step_04/linux/runner/my_application.h diff --git a/dart-patterns-and-records/step_04/web/index.html b/dart-patterns-and-records/step_04/web/index.html index e14846e8ce..adcc31bddb 100644 --- a/dart-patterns-and-records/step_04/web/index.html +++ b/dart-patterns-and-records/step_04/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/dart-patterns-and-records/step_05/linux/CMakeLists.txt b/dart-patterns-and-records/step_05/linux/CMakeLists.txt index dc88dd5e7d..6f653779a7 100644 --- a/dart-patterns-and-records/step_05/linux/CMakeLists.txt +++ b/dart-patterns-and-records/step_05/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/dart-patterns-and-records/step_05/linux/runner/CMakeLists.txt b/dart-patterns-and-records/step_05/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/dart-patterns-and-records/step_05/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/dart-patterns-and-records/step_05/linux/main.cc b/dart-patterns-and-records/step_05/linux/runner/main.cc similarity index 100% rename from dart-patterns-and-records/step_05/linux/main.cc rename to dart-patterns-and-records/step_05/linux/runner/main.cc diff --git a/dart-patterns-and-records/step_05/linux/my_application.cc b/dart-patterns-and-records/step_05/linux/runner/my_application.cc similarity index 93% rename from dart-patterns-and-records/step_05/linux/my_application.cc rename to dart-patterns-and-records/step_05/linux/runner/my_application.cc index 2e328e01f8..7065b83916 100644 --- a/dart-patterns-and-records/step_05/linux/my_application.cc +++ b/dart-patterns-and-records/step_05/linux/runner/my_application.cc @@ -117,6 +117,12 @@ static void my_application_class_init(MyApplicationClass* klass) { static void my_application_init(MyApplication* self) {} MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + return MY_APPLICATION(g_object_new(my_application_get_type(), "application-id", APPLICATION_ID, "flags", G_APPLICATION_NON_UNIQUE, diff --git a/dart-patterns-and-records/step_05/linux/my_application.h b/dart-patterns-and-records/step_05/linux/runner/my_application.h similarity index 100% rename from dart-patterns-and-records/step_05/linux/my_application.h rename to dart-patterns-and-records/step_05/linux/runner/my_application.h diff --git a/dart-patterns-and-records/step_05/web/index.html b/dart-patterns-and-records/step_05/web/index.html index e14846e8ce..adcc31bddb 100644 --- a/dart-patterns-and-records/step_05/web/index.html +++ b/dart-patterns-and-records/step_05/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/dart-patterns-and-records/step_06_a/linux/CMakeLists.txt b/dart-patterns-and-records/step_06_a/linux/CMakeLists.txt index dc88dd5e7d..6f653779a7 100644 --- a/dart-patterns-and-records/step_06_a/linux/CMakeLists.txt +++ b/dart-patterns-and-records/step_06_a/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/dart-patterns-and-records/step_06_a/linux/runner/CMakeLists.txt b/dart-patterns-and-records/step_06_a/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/dart-patterns-and-records/step_06_a/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/dart-patterns-and-records/step_06_a/linux/main.cc b/dart-patterns-and-records/step_06_a/linux/runner/main.cc similarity index 100% rename from dart-patterns-and-records/step_06_a/linux/main.cc rename to dart-patterns-and-records/step_06_a/linux/runner/main.cc diff --git a/dart-patterns-and-records/step_06_a/linux/my_application.cc b/dart-patterns-and-records/step_06_a/linux/runner/my_application.cc similarity index 93% rename from dart-patterns-and-records/step_06_a/linux/my_application.cc rename to dart-patterns-and-records/step_06_a/linux/runner/my_application.cc index 2e328e01f8..7065b83916 100644 --- a/dart-patterns-and-records/step_06_a/linux/my_application.cc +++ b/dart-patterns-and-records/step_06_a/linux/runner/my_application.cc @@ -117,6 +117,12 @@ static void my_application_class_init(MyApplicationClass* klass) { static void my_application_init(MyApplication* self) {} MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + return MY_APPLICATION(g_object_new(my_application_get_type(), "application-id", APPLICATION_ID, "flags", G_APPLICATION_NON_UNIQUE, diff --git a/dart-patterns-and-records/step_06_a/linux/my_application.h b/dart-patterns-and-records/step_06_a/linux/runner/my_application.h similarity index 100% rename from dart-patterns-and-records/step_06_a/linux/my_application.h rename to dart-patterns-and-records/step_06_a/linux/runner/my_application.h diff --git a/dart-patterns-and-records/step_06_a/web/index.html b/dart-patterns-and-records/step_06_a/web/index.html index e14846e8ce..adcc31bddb 100644 --- a/dart-patterns-and-records/step_06_a/web/index.html +++ b/dart-patterns-and-records/step_06_a/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/dart-patterns-and-records/step_06_b/linux/CMakeLists.txt b/dart-patterns-and-records/step_06_b/linux/CMakeLists.txt index dc88dd5e7d..6f653779a7 100644 --- a/dart-patterns-and-records/step_06_b/linux/CMakeLists.txt +++ b/dart-patterns-and-records/step_06_b/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/dart-patterns-and-records/step_06_b/linux/my_application.cc b/dart-patterns-and-records/step_06_b/linux/my_application.cc deleted file mode 100644 index 2e328e01f8..0000000000 --- a/dart-patterns-and-records/step_06_b/linux/my_application.cc +++ /dev/null @@ -1,124 +0,0 @@ -#include "my_application.h" - -#include -#ifdef GDK_WINDOWING_X11 -#include -#endif - -#include "flutter/generated_plugin_registrant.h" - -struct _MyApplication { - GtkApplication parent_instance; - char** dart_entrypoint_arguments; -}; - -G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) - -// Implements GApplication::activate. -static void my_application_activate(GApplication* application) { - MyApplication* self = MY_APPLICATION(application); - GtkWindow* window = - GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); - - // Use a header bar when running in GNOME as this is the common style used - // by applications and is the setup most users will be using (e.g. Ubuntu - // desktop). - // If running on X and not using GNOME then just use a traditional title bar - // in case the window manager does more exotic layout, e.g. tiling. - // If running on Wayland assume the header bar will work (may need changing - // if future cases occur). - gboolean use_header_bar = TRUE; -#ifdef GDK_WINDOWING_X11 - GdkScreen* screen = gtk_window_get_screen(window); - if (GDK_IS_X11_SCREEN(screen)) { - const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); - if (g_strcmp0(wm_name, "GNOME Shell") != 0) { - use_header_bar = FALSE; - } - } -#endif - if (use_header_bar) { - GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); - gtk_widget_show(GTK_WIDGET(header_bar)); - gtk_header_bar_set_title(header_bar, "patterns_codelab"); - gtk_header_bar_set_show_close_button(header_bar, TRUE); - gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); - } else { - gtk_window_set_title(window, "patterns_codelab"); - } - - gtk_window_set_default_size(window, 1280, 720); - gtk_widget_show(GTK_WIDGET(window)); - - g_autoptr(FlDartProject) project = fl_dart_project_new(); - fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); - - FlView* view = fl_view_new(project); - gtk_widget_show(GTK_WIDGET(view)); - gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); - - fl_register_plugins(FL_PLUGIN_REGISTRY(view)); - - gtk_widget_grab_focus(GTK_WIDGET(view)); -} - -// Implements GApplication::local_command_line. -static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { - MyApplication* self = MY_APPLICATION(application); - // Strip out the first argument as it is the binary name. - self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); - - g_autoptr(GError) error = nullptr; - if (!g_application_register(application, nullptr, &error)) { - g_warning("Failed to register: %s", error->message); - *exit_status = 1; - return TRUE; - } - - g_application_activate(application); - *exit_status = 0; - - return TRUE; -} - -// Implements GApplication::startup. -static void my_application_startup(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application startup. - - G_APPLICATION_CLASS(my_application_parent_class)->startup(application); -} - -// Implements GApplication::shutdown. -static void my_application_shutdown(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application shutdown. - - G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); -} - -// Implements GObject::dispose. -static void my_application_dispose(GObject* object) { - MyApplication* self = MY_APPLICATION(object); - g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); - G_OBJECT_CLASS(my_application_parent_class)->dispose(object); -} - -static void my_application_class_init(MyApplicationClass* klass) { - G_APPLICATION_CLASS(klass)->activate = my_application_activate; - G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; - G_APPLICATION_CLASS(klass)->startup = my_application_startup; - G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; - G_OBJECT_CLASS(klass)->dispose = my_application_dispose; -} - -static void my_application_init(MyApplication* self) {} - -MyApplication* my_application_new() { - return MY_APPLICATION(g_object_new(my_application_get_type(), - "application-id", APPLICATION_ID, - "flags", G_APPLICATION_NON_UNIQUE, - nullptr)); -} diff --git a/dart-patterns-and-records/step_06_b/linux/runner/CMakeLists.txt b/dart-patterns-and-records/step_06_b/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/dart-patterns-and-records/step_06_b/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/dart-patterns-and-records/step_06_b/linux/main.cc b/dart-patterns-and-records/step_06_b/linux/runner/main.cc similarity index 100% rename from dart-patterns-and-records/step_06_b/linux/main.cc rename to dart-patterns-and-records/step_06_b/linux/runner/main.cc diff --git a/dart-patterns-and-records/step_06_b/linux/runner/my_application.cc b/dart-patterns-and-records/step_06_b/linux/runner/my_application.cc new file mode 100644 index 0000000000..7065b83916 --- /dev/null +++ b/dart-patterns-and-records/step_06_b/linux/runner/my_application.cc @@ -0,0 +1,130 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "patterns_codelab"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "patterns_codelab"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/dart-patterns-and-records/step_06_b/linux/my_application.h b/dart-patterns-and-records/step_06_b/linux/runner/my_application.h similarity index 100% rename from dart-patterns-and-records/step_06_b/linux/my_application.h rename to dart-patterns-and-records/step_06_b/linux/runner/my_application.h diff --git a/dart-patterns-and-records/step_06_b/web/index.html b/dart-patterns-and-records/step_06_b/web/index.html index e14846e8ce..adcc31bddb 100644 --- a/dart-patterns-and-records/step_06_b/web/index.html +++ b/dart-patterns-and-records/step_06_b/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/dart-patterns-and-records/step_07_a/linux/CMakeLists.txt b/dart-patterns-and-records/step_07_a/linux/CMakeLists.txt index dc88dd5e7d..6f653779a7 100644 --- a/dart-patterns-and-records/step_07_a/linux/CMakeLists.txt +++ b/dart-patterns-and-records/step_07_a/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/dart-patterns-and-records/step_07_a/linux/my_application.cc b/dart-patterns-and-records/step_07_a/linux/my_application.cc deleted file mode 100644 index 2e328e01f8..0000000000 --- a/dart-patterns-and-records/step_07_a/linux/my_application.cc +++ /dev/null @@ -1,124 +0,0 @@ -#include "my_application.h" - -#include -#ifdef GDK_WINDOWING_X11 -#include -#endif - -#include "flutter/generated_plugin_registrant.h" - -struct _MyApplication { - GtkApplication parent_instance; - char** dart_entrypoint_arguments; -}; - -G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) - -// Implements GApplication::activate. -static void my_application_activate(GApplication* application) { - MyApplication* self = MY_APPLICATION(application); - GtkWindow* window = - GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); - - // Use a header bar when running in GNOME as this is the common style used - // by applications and is the setup most users will be using (e.g. Ubuntu - // desktop). - // If running on X and not using GNOME then just use a traditional title bar - // in case the window manager does more exotic layout, e.g. tiling. - // If running on Wayland assume the header bar will work (may need changing - // if future cases occur). - gboolean use_header_bar = TRUE; -#ifdef GDK_WINDOWING_X11 - GdkScreen* screen = gtk_window_get_screen(window); - if (GDK_IS_X11_SCREEN(screen)) { - const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); - if (g_strcmp0(wm_name, "GNOME Shell") != 0) { - use_header_bar = FALSE; - } - } -#endif - if (use_header_bar) { - GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); - gtk_widget_show(GTK_WIDGET(header_bar)); - gtk_header_bar_set_title(header_bar, "patterns_codelab"); - gtk_header_bar_set_show_close_button(header_bar, TRUE); - gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); - } else { - gtk_window_set_title(window, "patterns_codelab"); - } - - gtk_window_set_default_size(window, 1280, 720); - gtk_widget_show(GTK_WIDGET(window)); - - g_autoptr(FlDartProject) project = fl_dart_project_new(); - fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); - - FlView* view = fl_view_new(project); - gtk_widget_show(GTK_WIDGET(view)); - gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); - - fl_register_plugins(FL_PLUGIN_REGISTRY(view)); - - gtk_widget_grab_focus(GTK_WIDGET(view)); -} - -// Implements GApplication::local_command_line. -static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { - MyApplication* self = MY_APPLICATION(application); - // Strip out the first argument as it is the binary name. - self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); - - g_autoptr(GError) error = nullptr; - if (!g_application_register(application, nullptr, &error)) { - g_warning("Failed to register: %s", error->message); - *exit_status = 1; - return TRUE; - } - - g_application_activate(application); - *exit_status = 0; - - return TRUE; -} - -// Implements GApplication::startup. -static void my_application_startup(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application startup. - - G_APPLICATION_CLASS(my_application_parent_class)->startup(application); -} - -// Implements GApplication::shutdown. -static void my_application_shutdown(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application shutdown. - - G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); -} - -// Implements GObject::dispose. -static void my_application_dispose(GObject* object) { - MyApplication* self = MY_APPLICATION(object); - g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); - G_OBJECT_CLASS(my_application_parent_class)->dispose(object); -} - -static void my_application_class_init(MyApplicationClass* klass) { - G_APPLICATION_CLASS(klass)->activate = my_application_activate; - G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; - G_APPLICATION_CLASS(klass)->startup = my_application_startup; - G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; - G_OBJECT_CLASS(klass)->dispose = my_application_dispose; -} - -static void my_application_init(MyApplication* self) {} - -MyApplication* my_application_new() { - return MY_APPLICATION(g_object_new(my_application_get_type(), - "application-id", APPLICATION_ID, - "flags", G_APPLICATION_NON_UNIQUE, - nullptr)); -} diff --git a/dart-patterns-and-records/step_07_a/linux/runner/CMakeLists.txt b/dart-patterns-and-records/step_07_a/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/dart-patterns-and-records/step_07_a/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/dart-patterns-and-records/step_07_a/linux/main.cc b/dart-patterns-and-records/step_07_a/linux/runner/main.cc similarity index 100% rename from dart-patterns-and-records/step_07_a/linux/main.cc rename to dart-patterns-and-records/step_07_a/linux/runner/main.cc diff --git a/dart-patterns-and-records/step_07_a/linux/runner/my_application.cc b/dart-patterns-and-records/step_07_a/linux/runner/my_application.cc new file mode 100644 index 0000000000..7065b83916 --- /dev/null +++ b/dart-patterns-and-records/step_07_a/linux/runner/my_application.cc @@ -0,0 +1,130 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "patterns_codelab"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "patterns_codelab"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/dart-patterns-and-records/step_07_a/linux/my_application.h b/dart-patterns-and-records/step_07_a/linux/runner/my_application.h similarity index 100% rename from dart-patterns-and-records/step_07_a/linux/my_application.h rename to dart-patterns-and-records/step_07_a/linux/runner/my_application.h diff --git a/dart-patterns-and-records/step_07_a/web/index.html b/dart-patterns-and-records/step_07_a/web/index.html index e14846e8ce..adcc31bddb 100644 --- a/dart-patterns-and-records/step_07_a/web/index.html +++ b/dart-patterns-and-records/step_07_a/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/dart-patterns-and-records/step_07_b/linux/CMakeLists.txt b/dart-patterns-and-records/step_07_b/linux/CMakeLists.txt index dc88dd5e7d..6f653779a7 100644 --- a/dart-patterns-and-records/step_07_b/linux/CMakeLists.txt +++ b/dart-patterns-and-records/step_07_b/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/dart-patterns-and-records/step_07_b/linux/my_application.cc b/dart-patterns-and-records/step_07_b/linux/my_application.cc deleted file mode 100644 index 2e328e01f8..0000000000 --- a/dart-patterns-and-records/step_07_b/linux/my_application.cc +++ /dev/null @@ -1,124 +0,0 @@ -#include "my_application.h" - -#include -#ifdef GDK_WINDOWING_X11 -#include -#endif - -#include "flutter/generated_plugin_registrant.h" - -struct _MyApplication { - GtkApplication parent_instance; - char** dart_entrypoint_arguments; -}; - -G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) - -// Implements GApplication::activate. -static void my_application_activate(GApplication* application) { - MyApplication* self = MY_APPLICATION(application); - GtkWindow* window = - GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); - - // Use a header bar when running in GNOME as this is the common style used - // by applications and is the setup most users will be using (e.g. Ubuntu - // desktop). - // If running on X and not using GNOME then just use a traditional title bar - // in case the window manager does more exotic layout, e.g. tiling. - // If running on Wayland assume the header bar will work (may need changing - // if future cases occur). - gboolean use_header_bar = TRUE; -#ifdef GDK_WINDOWING_X11 - GdkScreen* screen = gtk_window_get_screen(window); - if (GDK_IS_X11_SCREEN(screen)) { - const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); - if (g_strcmp0(wm_name, "GNOME Shell") != 0) { - use_header_bar = FALSE; - } - } -#endif - if (use_header_bar) { - GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); - gtk_widget_show(GTK_WIDGET(header_bar)); - gtk_header_bar_set_title(header_bar, "patterns_codelab"); - gtk_header_bar_set_show_close_button(header_bar, TRUE); - gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); - } else { - gtk_window_set_title(window, "patterns_codelab"); - } - - gtk_window_set_default_size(window, 1280, 720); - gtk_widget_show(GTK_WIDGET(window)); - - g_autoptr(FlDartProject) project = fl_dart_project_new(); - fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); - - FlView* view = fl_view_new(project); - gtk_widget_show(GTK_WIDGET(view)); - gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); - - fl_register_plugins(FL_PLUGIN_REGISTRY(view)); - - gtk_widget_grab_focus(GTK_WIDGET(view)); -} - -// Implements GApplication::local_command_line. -static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { - MyApplication* self = MY_APPLICATION(application); - // Strip out the first argument as it is the binary name. - self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); - - g_autoptr(GError) error = nullptr; - if (!g_application_register(application, nullptr, &error)) { - g_warning("Failed to register: %s", error->message); - *exit_status = 1; - return TRUE; - } - - g_application_activate(application); - *exit_status = 0; - - return TRUE; -} - -// Implements GApplication::startup. -static void my_application_startup(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application startup. - - G_APPLICATION_CLASS(my_application_parent_class)->startup(application); -} - -// Implements GApplication::shutdown. -static void my_application_shutdown(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application shutdown. - - G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); -} - -// Implements GObject::dispose. -static void my_application_dispose(GObject* object) { - MyApplication* self = MY_APPLICATION(object); - g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); - G_OBJECT_CLASS(my_application_parent_class)->dispose(object); -} - -static void my_application_class_init(MyApplicationClass* klass) { - G_APPLICATION_CLASS(klass)->activate = my_application_activate; - G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; - G_APPLICATION_CLASS(klass)->startup = my_application_startup; - G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; - G_OBJECT_CLASS(klass)->dispose = my_application_dispose; -} - -static void my_application_init(MyApplication* self) {} - -MyApplication* my_application_new() { - return MY_APPLICATION(g_object_new(my_application_get_type(), - "application-id", APPLICATION_ID, - "flags", G_APPLICATION_NON_UNIQUE, - nullptr)); -} diff --git a/dart-patterns-and-records/step_07_b/linux/runner/CMakeLists.txt b/dart-patterns-and-records/step_07_b/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/dart-patterns-and-records/step_07_b/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/dart-patterns-and-records/step_07_b/linux/main.cc b/dart-patterns-and-records/step_07_b/linux/runner/main.cc similarity index 100% rename from dart-patterns-and-records/step_07_b/linux/main.cc rename to dart-patterns-and-records/step_07_b/linux/runner/main.cc diff --git a/dart-patterns-and-records/step_07_b/linux/runner/my_application.cc b/dart-patterns-and-records/step_07_b/linux/runner/my_application.cc new file mode 100644 index 0000000000..7065b83916 --- /dev/null +++ b/dart-patterns-and-records/step_07_b/linux/runner/my_application.cc @@ -0,0 +1,130 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "patterns_codelab"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "patterns_codelab"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/dart-patterns-and-records/step_07_b/linux/my_application.h b/dart-patterns-and-records/step_07_b/linux/runner/my_application.h similarity index 100% rename from dart-patterns-and-records/step_07_b/linux/my_application.h rename to dart-patterns-and-records/step_07_b/linux/runner/my_application.h diff --git a/dart-patterns-and-records/step_07_b/web/index.html b/dart-patterns-and-records/step_07_b/web/index.html index e14846e8ce..adcc31bddb 100644 --- a/dart-patterns-and-records/step_07_b/web/index.html +++ b/dart-patterns-and-records/step_07_b/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/dart-patterns-and-records/step_08/linux/CMakeLists.txt b/dart-patterns-and-records/step_08/linux/CMakeLists.txt index dc88dd5e7d..6f653779a7 100644 --- a/dart-patterns-and-records/step_08/linux/CMakeLists.txt +++ b/dart-patterns-and-records/step_08/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/dart-patterns-and-records/step_08/linux/my_application.cc b/dart-patterns-and-records/step_08/linux/my_application.cc deleted file mode 100644 index 2e328e01f8..0000000000 --- a/dart-patterns-and-records/step_08/linux/my_application.cc +++ /dev/null @@ -1,124 +0,0 @@ -#include "my_application.h" - -#include -#ifdef GDK_WINDOWING_X11 -#include -#endif - -#include "flutter/generated_plugin_registrant.h" - -struct _MyApplication { - GtkApplication parent_instance; - char** dart_entrypoint_arguments; -}; - -G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) - -// Implements GApplication::activate. -static void my_application_activate(GApplication* application) { - MyApplication* self = MY_APPLICATION(application); - GtkWindow* window = - GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); - - // Use a header bar when running in GNOME as this is the common style used - // by applications and is the setup most users will be using (e.g. Ubuntu - // desktop). - // If running on X and not using GNOME then just use a traditional title bar - // in case the window manager does more exotic layout, e.g. tiling. - // If running on Wayland assume the header bar will work (may need changing - // if future cases occur). - gboolean use_header_bar = TRUE; -#ifdef GDK_WINDOWING_X11 - GdkScreen* screen = gtk_window_get_screen(window); - if (GDK_IS_X11_SCREEN(screen)) { - const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); - if (g_strcmp0(wm_name, "GNOME Shell") != 0) { - use_header_bar = FALSE; - } - } -#endif - if (use_header_bar) { - GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); - gtk_widget_show(GTK_WIDGET(header_bar)); - gtk_header_bar_set_title(header_bar, "patterns_codelab"); - gtk_header_bar_set_show_close_button(header_bar, TRUE); - gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); - } else { - gtk_window_set_title(window, "patterns_codelab"); - } - - gtk_window_set_default_size(window, 1280, 720); - gtk_widget_show(GTK_WIDGET(window)); - - g_autoptr(FlDartProject) project = fl_dart_project_new(); - fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); - - FlView* view = fl_view_new(project); - gtk_widget_show(GTK_WIDGET(view)); - gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); - - fl_register_plugins(FL_PLUGIN_REGISTRY(view)); - - gtk_widget_grab_focus(GTK_WIDGET(view)); -} - -// Implements GApplication::local_command_line. -static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { - MyApplication* self = MY_APPLICATION(application); - // Strip out the first argument as it is the binary name. - self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); - - g_autoptr(GError) error = nullptr; - if (!g_application_register(application, nullptr, &error)) { - g_warning("Failed to register: %s", error->message); - *exit_status = 1; - return TRUE; - } - - g_application_activate(application); - *exit_status = 0; - - return TRUE; -} - -// Implements GApplication::startup. -static void my_application_startup(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application startup. - - G_APPLICATION_CLASS(my_application_parent_class)->startup(application); -} - -// Implements GApplication::shutdown. -static void my_application_shutdown(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application shutdown. - - G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); -} - -// Implements GObject::dispose. -static void my_application_dispose(GObject* object) { - MyApplication* self = MY_APPLICATION(object); - g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); - G_OBJECT_CLASS(my_application_parent_class)->dispose(object); -} - -static void my_application_class_init(MyApplicationClass* klass) { - G_APPLICATION_CLASS(klass)->activate = my_application_activate; - G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; - G_APPLICATION_CLASS(klass)->startup = my_application_startup; - G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; - G_OBJECT_CLASS(klass)->dispose = my_application_dispose; -} - -static void my_application_init(MyApplication* self) {} - -MyApplication* my_application_new() { - return MY_APPLICATION(g_object_new(my_application_get_type(), - "application-id", APPLICATION_ID, - "flags", G_APPLICATION_NON_UNIQUE, - nullptr)); -} diff --git a/dart-patterns-and-records/step_08/linux/runner/CMakeLists.txt b/dart-patterns-and-records/step_08/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/dart-patterns-and-records/step_08/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/dart-patterns-and-records/step_08/linux/main.cc b/dart-patterns-and-records/step_08/linux/runner/main.cc similarity index 100% rename from dart-patterns-and-records/step_08/linux/main.cc rename to dart-patterns-and-records/step_08/linux/runner/main.cc diff --git a/dart-patterns-and-records/step_08/linux/runner/my_application.cc b/dart-patterns-and-records/step_08/linux/runner/my_application.cc new file mode 100644 index 0000000000..7065b83916 --- /dev/null +++ b/dart-patterns-and-records/step_08/linux/runner/my_application.cc @@ -0,0 +1,130 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "patterns_codelab"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "patterns_codelab"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/dart-patterns-and-records/step_08/linux/my_application.h b/dart-patterns-and-records/step_08/linux/runner/my_application.h similarity index 100% rename from dart-patterns-and-records/step_08/linux/my_application.h rename to dart-patterns-and-records/step_08/linux/runner/my_application.h diff --git a/dart-patterns-and-records/step_08/web/index.html b/dart-patterns-and-records/step_08/web/index.html index e14846e8ce..adcc31bddb 100644 --- a/dart-patterns-and-records/step_08/web/index.html +++ b/dart-patterns-and-records/step_08/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/dart-patterns-and-records/step_09/linux/CMakeLists.txt b/dart-patterns-and-records/step_09/linux/CMakeLists.txt index dc88dd5e7d..6f653779a7 100644 --- a/dart-patterns-and-records/step_09/linux/CMakeLists.txt +++ b/dart-patterns-and-records/step_09/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/dart-patterns-and-records/step_09/linux/my_application.cc b/dart-patterns-and-records/step_09/linux/my_application.cc deleted file mode 100644 index 2e328e01f8..0000000000 --- a/dart-patterns-and-records/step_09/linux/my_application.cc +++ /dev/null @@ -1,124 +0,0 @@ -#include "my_application.h" - -#include -#ifdef GDK_WINDOWING_X11 -#include -#endif - -#include "flutter/generated_plugin_registrant.h" - -struct _MyApplication { - GtkApplication parent_instance; - char** dart_entrypoint_arguments; -}; - -G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) - -// Implements GApplication::activate. -static void my_application_activate(GApplication* application) { - MyApplication* self = MY_APPLICATION(application); - GtkWindow* window = - GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); - - // Use a header bar when running in GNOME as this is the common style used - // by applications and is the setup most users will be using (e.g. Ubuntu - // desktop). - // If running on X and not using GNOME then just use a traditional title bar - // in case the window manager does more exotic layout, e.g. tiling. - // If running on Wayland assume the header bar will work (may need changing - // if future cases occur). - gboolean use_header_bar = TRUE; -#ifdef GDK_WINDOWING_X11 - GdkScreen* screen = gtk_window_get_screen(window); - if (GDK_IS_X11_SCREEN(screen)) { - const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); - if (g_strcmp0(wm_name, "GNOME Shell") != 0) { - use_header_bar = FALSE; - } - } -#endif - if (use_header_bar) { - GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); - gtk_widget_show(GTK_WIDGET(header_bar)); - gtk_header_bar_set_title(header_bar, "patterns_codelab"); - gtk_header_bar_set_show_close_button(header_bar, TRUE); - gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); - } else { - gtk_window_set_title(window, "patterns_codelab"); - } - - gtk_window_set_default_size(window, 1280, 720); - gtk_widget_show(GTK_WIDGET(window)); - - g_autoptr(FlDartProject) project = fl_dart_project_new(); - fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); - - FlView* view = fl_view_new(project); - gtk_widget_show(GTK_WIDGET(view)); - gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); - - fl_register_plugins(FL_PLUGIN_REGISTRY(view)); - - gtk_widget_grab_focus(GTK_WIDGET(view)); -} - -// Implements GApplication::local_command_line. -static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { - MyApplication* self = MY_APPLICATION(application); - // Strip out the first argument as it is the binary name. - self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); - - g_autoptr(GError) error = nullptr; - if (!g_application_register(application, nullptr, &error)) { - g_warning("Failed to register: %s", error->message); - *exit_status = 1; - return TRUE; - } - - g_application_activate(application); - *exit_status = 0; - - return TRUE; -} - -// Implements GApplication::startup. -static void my_application_startup(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application startup. - - G_APPLICATION_CLASS(my_application_parent_class)->startup(application); -} - -// Implements GApplication::shutdown. -static void my_application_shutdown(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application shutdown. - - G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); -} - -// Implements GObject::dispose. -static void my_application_dispose(GObject* object) { - MyApplication* self = MY_APPLICATION(object); - g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); - G_OBJECT_CLASS(my_application_parent_class)->dispose(object); -} - -static void my_application_class_init(MyApplicationClass* klass) { - G_APPLICATION_CLASS(klass)->activate = my_application_activate; - G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; - G_APPLICATION_CLASS(klass)->startup = my_application_startup; - G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; - G_OBJECT_CLASS(klass)->dispose = my_application_dispose; -} - -static void my_application_init(MyApplication* self) {} - -MyApplication* my_application_new() { - return MY_APPLICATION(g_object_new(my_application_get_type(), - "application-id", APPLICATION_ID, - "flags", G_APPLICATION_NON_UNIQUE, - nullptr)); -} diff --git a/dart-patterns-and-records/step_09/linux/runner/CMakeLists.txt b/dart-patterns-and-records/step_09/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/dart-patterns-and-records/step_09/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/dart-patterns-and-records/step_09/linux/main.cc b/dart-patterns-and-records/step_09/linux/runner/main.cc similarity index 100% rename from dart-patterns-and-records/step_09/linux/main.cc rename to dart-patterns-and-records/step_09/linux/runner/main.cc diff --git a/dart-patterns-and-records/step_09/linux/runner/my_application.cc b/dart-patterns-and-records/step_09/linux/runner/my_application.cc new file mode 100644 index 0000000000..7065b83916 --- /dev/null +++ b/dart-patterns-and-records/step_09/linux/runner/my_application.cc @@ -0,0 +1,130 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "patterns_codelab"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "patterns_codelab"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/dart-patterns-and-records/step_09/linux/my_application.h b/dart-patterns-and-records/step_09/linux/runner/my_application.h similarity index 100% rename from dart-patterns-and-records/step_09/linux/my_application.h rename to dart-patterns-and-records/step_09/linux/runner/my_application.h diff --git a/dart-patterns-and-records/step_09/web/index.html b/dart-patterns-and-records/step_09/web/index.html index e14846e8ce..adcc31bddb 100644 --- a/dart-patterns-and-records/step_09/web/index.html +++ b/dart-patterns-and-records/step_09/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/dart-patterns-and-records/step_10/linux/CMakeLists.txt b/dart-patterns-and-records/step_10/linux/CMakeLists.txt index dc88dd5e7d..6f653779a7 100644 --- a/dart-patterns-and-records/step_10/linux/CMakeLists.txt +++ b/dart-patterns-and-records/step_10/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/dart-patterns-and-records/step_10/linux/my_application.cc b/dart-patterns-and-records/step_10/linux/my_application.cc deleted file mode 100644 index 2e328e01f8..0000000000 --- a/dart-patterns-and-records/step_10/linux/my_application.cc +++ /dev/null @@ -1,124 +0,0 @@ -#include "my_application.h" - -#include -#ifdef GDK_WINDOWING_X11 -#include -#endif - -#include "flutter/generated_plugin_registrant.h" - -struct _MyApplication { - GtkApplication parent_instance; - char** dart_entrypoint_arguments; -}; - -G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) - -// Implements GApplication::activate. -static void my_application_activate(GApplication* application) { - MyApplication* self = MY_APPLICATION(application); - GtkWindow* window = - GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); - - // Use a header bar when running in GNOME as this is the common style used - // by applications and is the setup most users will be using (e.g. Ubuntu - // desktop). - // If running on X and not using GNOME then just use a traditional title bar - // in case the window manager does more exotic layout, e.g. tiling. - // If running on Wayland assume the header bar will work (may need changing - // if future cases occur). - gboolean use_header_bar = TRUE; -#ifdef GDK_WINDOWING_X11 - GdkScreen* screen = gtk_window_get_screen(window); - if (GDK_IS_X11_SCREEN(screen)) { - const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); - if (g_strcmp0(wm_name, "GNOME Shell") != 0) { - use_header_bar = FALSE; - } - } -#endif - if (use_header_bar) { - GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); - gtk_widget_show(GTK_WIDGET(header_bar)); - gtk_header_bar_set_title(header_bar, "patterns_codelab"); - gtk_header_bar_set_show_close_button(header_bar, TRUE); - gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); - } else { - gtk_window_set_title(window, "patterns_codelab"); - } - - gtk_window_set_default_size(window, 1280, 720); - gtk_widget_show(GTK_WIDGET(window)); - - g_autoptr(FlDartProject) project = fl_dart_project_new(); - fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); - - FlView* view = fl_view_new(project); - gtk_widget_show(GTK_WIDGET(view)); - gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); - - fl_register_plugins(FL_PLUGIN_REGISTRY(view)); - - gtk_widget_grab_focus(GTK_WIDGET(view)); -} - -// Implements GApplication::local_command_line. -static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { - MyApplication* self = MY_APPLICATION(application); - // Strip out the first argument as it is the binary name. - self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); - - g_autoptr(GError) error = nullptr; - if (!g_application_register(application, nullptr, &error)) { - g_warning("Failed to register: %s", error->message); - *exit_status = 1; - return TRUE; - } - - g_application_activate(application); - *exit_status = 0; - - return TRUE; -} - -// Implements GApplication::startup. -static void my_application_startup(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application startup. - - G_APPLICATION_CLASS(my_application_parent_class)->startup(application); -} - -// Implements GApplication::shutdown. -static void my_application_shutdown(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application shutdown. - - G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); -} - -// Implements GObject::dispose. -static void my_application_dispose(GObject* object) { - MyApplication* self = MY_APPLICATION(object); - g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); - G_OBJECT_CLASS(my_application_parent_class)->dispose(object); -} - -static void my_application_class_init(MyApplicationClass* klass) { - G_APPLICATION_CLASS(klass)->activate = my_application_activate; - G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; - G_APPLICATION_CLASS(klass)->startup = my_application_startup; - G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; - G_OBJECT_CLASS(klass)->dispose = my_application_dispose; -} - -static void my_application_init(MyApplication* self) {} - -MyApplication* my_application_new() { - return MY_APPLICATION(g_object_new(my_application_get_type(), - "application-id", APPLICATION_ID, - "flags", G_APPLICATION_NON_UNIQUE, - nullptr)); -} diff --git a/dart-patterns-and-records/step_10/linux/runner/CMakeLists.txt b/dart-patterns-and-records/step_10/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/dart-patterns-and-records/step_10/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/dart-patterns-and-records/step_10/linux/main.cc b/dart-patterns-and-records/step_10/linux/runner/main.cc similarity index 100% rename from dart-patterns-and-records/step_10/linux/main.cc rename to dart-patterns-and-records/step_10/linux/runner/main.cc diff --git a/dart-patterns-and-records/step_10/linux/runner/my_application.cc b/dart-patterns-and-records/step_10/linux/runner/my_application.cc new file mode 100644 index 0000000000..7065b83916 --- /dev/null +++ b/dart-patterns-and-records/step_10/linux/runner/my_application.cc @@ -0,0 +1,130 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "patterns_codelab"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "patterns_codelab"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/dart-patterns-and-records/step_10/linux/my_application.h b/dart-patterns-and-records/step_10/linux/runner/my_application.h similarity index 100% rename from dart-patterns-and-records/step_10/linux/my_application.h rename to dart-patterns-and-records/step_10/linux/runner/my_application.h diff --git a/dart-patterns-and-records/step_10/web/index.html b/dart-patterns-and-records/step_10/web/index.html index e14846e8ce..adcc31bddb 100644 --- a/dart-patterns-and-records/step_10/web/index.html +++ b/dart-patterns-and-records/step_10/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/dart-patterns-and-records/step_11_a/linux/CMakeLists.txt b/dart-patterns-and-records/step_11_a/linux/CMakeLists.txt index dc88dd5e7d..6f653779a7 100644 --- a/dart-patterns-and-records/step_11_a/linux/CMakeLists.txt +++ b/dart-patterns-and-records/step_11_a/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/dart-patterns-and-records/step_11_a/linux/my_application.cc b/dart-patterns-and-records/step_11_a/linux/my_application.cc deleted file mode 100644 index 2e328e01f8..0000000000 --- a/dart-patterns-and-records/step_11_a/linux/my_application.cc +++ /dev/null @@ -1,124 +0,0 @@ -#include "my_application.h" - -#include -#ifdef GDK_WINDOWING_X11 -#include -#endif - -#include "flutter/generated_plugin_registrant.h" - -struct _MyApplication { - GtkApplication parent_instance; - char** dart_entrypoint_arguments; -}; - -G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) - -// Implements GApplication::activate. -static void my_application_activate(GApplication* application) { - MyApplication* self = MY_APPLICATION(application); - GtkWindow* window = - GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); - - // Use a header bar when running in GNOME as this is the common style used - // by applications and is the setup most users will be using (e.g. Ubuntu - // desktop). - // If running on X and not using GNOME then just use a traditional title bar - // in case the window manager does more exotic layout, e.g. tiling. - // If running on Wayland assume the header bar will work (may need changing - // if future cases occur). - gboolean use_header_bar = TRUE; -#ifdef GDK_WINDOWING_X11 - GdkScreen* screen = gtk_window_get_screen(window); - if (GDK_IS_X11_SCREEN(screen)) { - const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); - if (g_strcmp0(wm_name, "GNOME Shell") != 0) { - use_header_bar = FALSE; - } - } -#endif - if (use_header_bar) { - GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); - gtk_widget_show(GTK_WIDGET(header_bar)); - gtk_header_bar_set_title(header_bar, "patterns_codelab"); - gtk_header_bar_set_show_close_button(header_bar, TRUE); - gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); - } else { - gtk_window_set_title(window, "patterns_codelab"); - } - - gtk_window_set_default_size(window, 1280, 720); - gtk_widget_show(GTK_WIDGET(window)); - - g_autoptr(FlDartProject) project = fl_dart_project_new(); - fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); - - FlView* view = fl_view_new(project); - gtk_widget_show(GTK_WIDGET(view)); - gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); - - fl_register_plugins(FL_PLUGIN_REGISTRY(view)); - - gtk_widget_grab_focus(GTK_WIDGET(view)); -} - -// Implements GApplication::local_command_line. -static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { - MyApplication* self = MY_APPLICATION(application); - // Strip out the first argument as it is the binary name. - self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); - - g_autoptr(GError) error = nullptr; - if (!g_application_register(application, nullptr, &error)) { - g_warning("Failed to register: %s", error->message); - *exit_status = 1; - return TRUE; - } - - g_application_activate(application); - *exit_status = 0; - - return TRUE; -} - -// Implements GApplication::startup. -static void my_application_startup(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application startup. - - G_APPLICATION_CLASS(my_application_parent_class)->startup(application); -} - -// Implements GApplication::shutdown. -static void my_application_shutdown(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application shutdown. - - G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); -} - -// Implements GObject::dispose. -static void my_application_dispose(GObject* object) { - MyApplication* self = MY_APPLICATION(object); - g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); - G_OBJECT_CLASS(my_application_parent_class)->dispose(object); -} - -static void my_application_class_init(MyApplicationClass* klass) { - G_APPLICATION_CLASS(klass)->activate = my_application_activate; - G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; - G_APPLICATION_CLASS(klass)->startup = my_application_startup; - G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; - G_OBJECT_CLASS(klass)->dispose = my_application_dispose; -} - -static void my_application_init(MyApplication* self) {} - -MyApplication* my_application_new() { - return MY_APPLICATION(g_object_new(my_application_get_type(), - "application-id", APPLICATION_ID, - "flags", G_APPLICATION_NON_UNIQUE, - nullptr)); -} diff --git a/dart-patterns-and-records/step_11_a/linux/runner/CMakeLists.txt b/dart-patterns-and-records/step_11_a/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/dart-patterns-and-records/step_11_a/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/dart-patterns-and-records/step_11_a/linux/main.cc b/dart-patterns-and-records/step_11_a/linux/runner/main.cc similarity index 100% rename from dart-patterns-and-records/step_11_a/linux/main.cc rename to dart-patterns-and-records/step_11_a/linux/runner/main.cc diff --git a/dart-patterns-and-records/step_11_a/linux/runner/my_application.cc b/dart-patterns-and-records/step_11_a/linux/runner/my_application.cc new file mode 100644 index 0000000000..7065b83916 --- /dev/null +++ b/dart-patterns-and-records/step_11_a/linux/runner/my_application.cc @@ -0,0 +1,130 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "patterns_codelab"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "patterns_codelab"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/dart-patterns-and-records/step_11_a/linux/my_application.h b/dart-patterns-and-records/step_11_a/linux/runner/my_application.h similarity index 100% rename from dart-patterns-and-records/step_11_a/linux/my_application.h rename to dart-patterns-and-records/step_11_a/linux/runner/my_application.h diff --git a/dart-patterns-and-records/step_11_a/web/index.html b/dart-patterns-and-records/step_11_a/web/index.html index e14846e8ce..adcc31bddb 100644 --- a/dart-patterns-and-records/step_11_a/web/index.html +++ b/dart-patterns-and-records/step_11_a/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/dart-patterns-and-records/step_11_b/linux/CMakeLists.txt b/dart-patterns-and-records/step_11_b/linux/CMakeLists.txt index dc88dd5e7d..6f653779a7 100644 --- a/dart-patterns-and-records/step_11_b/linux/CMakeLists.txt +++ b/dart-patterns-and-records/step_11_b/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/dart-patterns-and-records/step_11_b/linux/my_application.cc b/dart-patterns-and-records/step_11_b/linux/my_application.cc deleted file mode 100644 index 2e328e01f8..0000000000 --- a/dart-patterns-and-records/step_11_b/linux/my_application.cc +++ /dev/null @@ -1,124 +0,0 @@ -#include "my_application.h" - -#include -#ifdef GDK_WINDOWING_X11 -#include -#endif - -#include "flutter/generated_plugin_registrant.h" - -struct _MyApplication { - GtkApplication parent_instance; - char** dart_entrypoint_arguments; -}; - -G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) - -// Implements GApplication::activate. -static void my_application_activate(GApplication* application) { - MyApplication* self = MY_APPLICATION(application); - GtkWindow* window = - GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); - - // Use a header bar when running in GNOME as this is the common style used - // by applications and is the setup most users will be using (e.g. Ubuntu - // desktop). - // If running on X and not using GNOME then just use a traditional title bar - // in case the window manager does more exotic layout, e.g. tiling. - // If running on Wayland assume the header bar will work (may need changing - // if future cases occur). - gboolean use_header_bar = TRUE; -#ifdef GDK_WINDOWING_X11 - GdkScreen* screen = gtk_window_get_screen(window); - if (GDK_IS_X11_SCREEN(screen)) { - const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); - if (g_strcmp0(wm_name, "GNOME Shell") != 0) { - use_header_bar = FALSE; - } - } -#endif - if (use_header_bar) { - GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); - gtk_widget_show(GTK_WIDGET(header_bar)); - gtk_header_bar_set_title(header_bar, "patterns_codelab"); - gtk_header_bar_set_show_close_button(header_bar, TRUE); - gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); - } else { - gtk_window_set_title(window, "patterns_codelab"); - } - - gtk_window_set_default_size(window, 1280, 720); - gtk_widget_show(GTK_WIDGET(window)); - - g_autoptr(FlDartProject) project = fl_dart_project_new(); - fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); - - FlView* view = fl_view_new(project); - gtk_widget_show(GTK_WIDGET(view)); - gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); - - fl_register_plugins(FL_PLUGIN_REGISTRY(view)); - - gtk_widget_grab_focus(GTK_WIDGET(view)); -} - -// Implements GApplication::local_command_line. -static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { - MyApplication* self = MY_APPLICATION(application); - // Strip out the first argument as it is the binary name. - self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); - - g_autoptr(GError) error = nullptr; - if (!g_application_register(application, nullptr, &error)) { - g_warning("Failed to register: %s", error->message); - *exit_status = 1; - return TRUE; - } - - g_application_activate(application); - *exit_status = 0; - - return TRUE; -} - -// Implements GApplication::startup. -static void my_application_startup(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application startup. - - G_APPLICATION_CLASS(my_application_parent_class)->startup(application); -} - -// Implements GApplication::shutdown. -static void my_application_shutdown(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application shutdown. - - G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); -} - -// Implements GObject::dispose. -static void my_application_dispose(GObject* object) { - MyApplication* self = MY_APPLICATION(object); - g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); - G_OBJECT_CLASS(my_application_parent_class)->dispose(object); -} - -static void my_application_class_init(MyApplicationClass* klass) { - G_APPLICATION_CLASS(klass)->activate = my_application_activate; - G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; - G_APPLICATION_CLASS(klass)->startup = my_application_startup; - G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; - G_OBJECT_CLASS(klass)->dispose = my_application_dispose; -} - -static void my_application_init(MyApplication* self) {} - -MyApplication* my_application_new() { - return MY_APPLICATION(g_object_new(my_application_get_type(), - "application-id", APPLICATION_ID, - "flags", G_APPLICATION_NON_UNIQUE, - nullptr)); -} diff --git a/dart-patterns-and-records/step_11_b/linux/runner/CMakeLists.txt b/dart-patterns-and-records/step_11_b/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/dart-patterns-and-records/step_11_b/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/dart-patterns-and-records/step_11_b/linux/main.cc b/dart-patterns-and-records/step_11_b/linux/runner/main.cc similarity index 100% rename from dart-patterns-and-records/step_11_b/linux/main.cc rename to dart-patterns-and-records/step_11_b/linux/runner/main.cc diff --git a/dart-patterns-and-records/step_11_b/linux/runner/my_application.cc b/dart-patterns-and-records/step_11_b/linux/runner/my_application.cc new file mode 100644 index 0000000000..7065b83916 --- /dev/null +++ b/dart-patterns-and-records/step_11_b/linux/runner/my_application.cc @@ -0,0 +1,130 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "patterns_codelab"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "patterns_codelab"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/dart-patterns-and-records/step_11_b/linux/my_application.h b/dart-patterns-and-records/step_11_b/linux/runner/my_application.h similarity index 100% rename from dart-patterns-and-records/step_11_b/linux/my_application.h rename to dart-patterns-and-records/step_11_b/linux/runner/my_application.h diff --git a/dart-patterns-and-records/step_11_b/web/index.html b/dart-patterns-and-records/step_11_b/web/index.html index e14846e8ce..adcc31bddb 100644 --- a/dart-patterns-and-records/step_11_b/web/index.html +++ b/dart-patterns-and-records/step_11_b/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/dart-patterns-and-records/step_12/linux/CMakeLists.txt b/dart-patterns-and-records/step_12/linux/CMakeLists.txt index dc88dd5e7d..6f653779a7 100644 --- a/dart-patterns-and-records/step_12/linux/CMakeLists.txt +++ b/dart-patterns-and-records/step_12/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/dart-patterns-and-records/step_12/linux/my_application.cc b/dart-patterns-and-records/step_12/linux/my_application.cc deleted file mode 100644 index 2e328e01f8..0000000000 --- a/dart-patterns-and-records/step_12/linux/my_application.cc +++ /dev/null @@ -1,124 +0,0 @@ -#include "my_application.h" - -#include -#ifdef GDK_WINDOWING_X11 -#include -#endif - -#include "flutter/generated_plugin_registrant.h" - -struct _MyApplication { - GtkApplication parent_instance; - char** dart_entrypoint_arguments; -}; - -G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) - -// Implements GApplication::activate. -static void my_application_activate(GApplication* application) { - MyApplication* self = MY_APPLICATION(application); - GtkWindow* window = - GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); - - // Use a header bar when running in GNOME as this is the common style used - // by applications and is the setup most users will be using (e.g. Ubuntu - // desktop). - // If running on X and not using GNOME then just use a traditional title bar - // in case the window manager does more exotic layout, e.g. tiling. - // If running on Wayland assume the header bar will work (may need changing - // if future cases occur). - gboolean use_header_bar = TRUE; -#ifdef GDK_WINDOWING_X11 - GdkScreen* screen = gtk_window_get_screen(window); - if (GDK_IS_X11_SCREEN(screen)) { - const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); - if (g_strcmp0(wm_name, "GNOME Shell") != 0) { - use_header_bar = FALSE; - } - } -#endif - if (use_header_bar) { - GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); - gtk_widget_show(GTK_WIDGET(header_bar)); - gtk_header_bar_set_title(header_bar, "patterns_codelab"); - gtk_header_bar_set_show_close_button(header_bar, TRUE); - gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); - } else { - gtk_window_set_title(window, "patterns_codelab"); - } - - gtk_window_set_default_size(window, 1280, 720); - gtk_widget_show(GTK_WIDGET(window)); - - g_autoptr(FlDartProject) project = fl_dart_project_new(); - fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); - - FlView* view = fl_view_new(project); - gtk_widget_show(GTK_WIDGET(view)); - gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); - - fl_register_plugins(FL_PLUGIN_REGISTRY(view)); - - gtk_widget_grab_focus(GTK_WIDGET(view)); -} - -// Implements GApplication::local_command_line. -static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { - MyApplication* self = MY_APPLICATION(application); - // Strip out the first argument as it is the binary name. - self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); - - g_autoptr(GError) error = nullptr; - if (!g_application_register(application, nullptr, &error)) { - g_warning("Failed to register: %s", error->message); - *exit_status = 1; - return TRUE; - } - - g_application_activate(application); - *exit_status = 0; - - return TRUE; -} - -// Implements GApplication::startup. -static void my_application_startup(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application startup. - - G_APPLICATION_CLASS(my_application_parent_class)->startup(application); -} - -// Implements GApplication::shutdown. -static void my_application_shutdown(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application shutdown. - - G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); -} - -// Implements GObject::dispose. -static void my_application_dispose(GObject* object) { - MyApplication* self = MY_APPLICATION(object); - g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); - G_OBJECT_CLASS(my_application_parent_class)->dispose(object); -} - -static void my_application_class_init(MyApplicationClass* klass) { - G_APPLICATION_CLASS(klass)->activate = my_application_activate; - G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; - G_APPLICATION_CLASS(klass)->startup = my_application_startup; - G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; - G_OBJECT_CLASS(klass)->dispose = my_application_dispose; -} - -static void my_application_init(MyApplication* self) {} - -MyApplication* my_application_new() { - return MY_APPLICATION(g_object_new(my_application_get_type(), - "application-id", APPLICATION_ID, - "flags", G_APPLICATION_NON_UNIQUE, - nullptr)); -} diff --git a/dart-patterns-and-records/step_12/linux/runner/CMakeLists.txt b/dart-patterns-and-records/step_12/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/dart-patterns-and-records/step_12/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/dart-patterns-and-records/step_12/linux/main.cc b/dart-patterns-and-records/step_12/linux/runner/main.cc similarity index 100% rename from dart-patterns-and-records/step_12/linux/main.cc rename to dart-patterns-and-records/step_12/linux/runner/main.cc diff --git a/dart-patterns-and-records/step_12/linux/runner/my_application.cc b/dart-patterns-and-records/step_12/linux/runner/my_application.cc new file mode 100644 index 0000000000..7065b83916 --- /dev/null +++ b/dart-patterns-and-records/step_12/linux/runner/my_application.cc @@ -0,0 +1,130 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "patterns_codelab"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "patterns_codelab"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/dart-patterns-and-records/step_12/linux/my_application.h b/dart-patterns-and-records/step_12/linux/runner/my_application.h similarity index 100% rename from dart-patterns-and-records/step_12/linux/my_application.h rename to dart-patterns-and-records/step_12/linux/runner/my_application.h diff --git a/dart-patterns-and-records/step_12/web/index.html b/dart-patterns-and-records/step_12/web/index.html index e14846e8ce..adcc31bddb 100644 --- a/dart-patterns-and-records/step_12/web/index.html +++ b/dart-patterns-and-records/step_12/web/index.html @@ -21,7 +21,7 @@ - + From f64e3aa8b5e1a67c7db688585d6e1e53530b1910 Mon Sep 17 00:00:00 2001 From: Brett Morgan Date: Wed, 13 Nov 2024 07:59:54 +1100 Subject: [PATCH 041/108] Update `ffigen_codelab` --- .../ios/Runner.xcodeproj/project.pbxproj | 108 +++++++++--------- .../step_03/example/linux/CMakeLists.txt | 23 +--- .../example/linux/runner/CMakeLists.txt | 26 +++++ .../example/linux/{ => runner}/main.cc | 0 .../linux/{ => runner}/my_application.cc | 6 + .../linux/{ => runner}/my_application.h | 0 .../macos/Runner.xcodeproj/project.pbxproj | 108 +++++++++--------- .../step_03/macos/ffigen_app.podspec | 7 ++ ffigen_codelab/step_03/pubspec.yaml | 2 +- ffigen_codelab/step_03/src/CMakeLists.txt | 5 + .../ios/Runner.xcodeproj/project.pbxproj | 108 +++++++++--------- .../step_05/example/linux/CMakeLists.txt | 23 +--- .../example/linux/runner/CMakeLists.txt | 26 +++++ .../example/linux/{ => runner}/main.cc | 0 .../linux/{ => runner}/my_application.cc | 6 + .../linux/{ => runner}/my_application.h | 0 .../macos/Runner.xcodeproj/project.pbxproj | 108 +++++++++--------- .../step_05/macos/ffigen_app.podspec | 7 ++ ffigen_codelab/step_05/pubspec.yaml | 2 +- ffigen_codelab/step_05/src/CMakeLists.txt | 5 + .../ios/Runner.xcodeproj/project.pbxproj | 108 +++++++++--------- .../step_06/example/linux/CMakeLists.txt | 23 +--- .../example/linux/runner/CMakeLists.txt | 26 +++++ .../example/linux/{ => runner}/main.cc | 0 .../linux/{ => runner}/my_application.cc | 6 + .../linux/{ => runner}/my_application.h | 0 .../macos/Runner.xcodeproj/project.pbxproj | 108 +++++++++--------- .../step_06/macos/ffigen_app.podspec | 7 ++ ffigen_codelab/step_06/pubspec.yaml | 2 +- ffigen_codelab/step_06/src/CMakeLists.txt | 5 + .../ios/Runner.xcodeproj/project.pbxproj | 108 +++++++++--------- .../step_07/example/linux/CMakeLists.txt | 23 +--- .../example/linux/runner/CMakeLists.txt | 26 +++++ .../example/linux/{ => runner}/main.cc | 0 .../linux/{ => runner}/my_application.cc | 6 + .../linux/{ => runner}/my_application.h | 0 .../macos/Runner.xcodeproj/project.pbxproj | 108 +++++++++--------- ffigen_codelab/step_07/example/pubspec.yaml | 2 +- .../step_07/macos/ffigen_app.podspec | 7 ++ ffigen_codelab/step_07/pubspec.yaml | 2 +- ffigen_codelab/step_07/src/CMakeLists.txt | 5 + 41 files changed, 625 insertions(+), 517 deletions(-) create mode 100644 ffigen_codelab/step_03/example/linux/runner/CMakeLists.txt rename ffigen_codelab/step_03/example/linux/{ => runner}/main.cc (100%) rename ffigen_codelab/step_03/example/linux/{ => runner}/my_application.cc (93%) rename ffigen_codelab/step_03/example/linux/{ => runner}/my_application.h (100%) create mode 100644 ffigen_codelab/step_05/example/linux/runner/CMakeLists.txt rename ffigen_codelab/step_05/example/linux/{ => runner}/main.cc (100%) rename ffigen_codelab/step_05/example/linux/{ => runner}/my_application.cc (93%) rename ffigen_codelab/step_05/example/linux/{ => runner}/my_application.h (100%) create mode 100644 ffigen_codelab/step_06/example/linux/runner/CMakeLists.txt rename ffigen_codelab/step_06/example/linux/{ => runner}/main.cc (100%) rename ffigen_codelab/step_06/example/linux/{ => runner}/my_application.cc (93%) rename ffigen_codelab/step_06/example/linux/{ => runner}/my_application.h (100%) create mode 100644 ffigen_codelab/step_07/example/linux/runner/CMakeLists.txt rename ffigen_codelab/step_07/example/linux/{ => runner}/main.cc (100%) rename ffigen_codelab/step_07/example/linux/{ => runner}/my_application.cc (93%) rename ffigen_codelab/step_07/example/linux/{ => runner}/my_application.h (100%) diff --git a/ffigen_codelab/step_03/example/ios/Runner.xcodeproj/project.pbxproj b/ffigen_codelab/step_03/example/ios/Runner.xcodeproj/project.pbxproj index d4a7f84f6f..c92da01762 100644 --- a/ffigen_codelab/step_03/example/ios/Runner.xcodeproj/project.pbxproj +++ b/ffigen_codelab/step_03/example/ios/Runner.xcodeproj/project.pbxproj @@ -9,13 +9,13 @@ /* Begin PBXBuildFile section */ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; + 35C2CDB992BA71FF454706DA /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 246CD2A9C634D9DCB84C492B /* Pods_Runner.framework */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - A06930C0B91EF70DA9CE4397 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 08806D17B22EF3C21A38F092 /* Pods_Runner.framework */; }; - D822B98219FD34ACB5EB5698 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B03D772360D1034B2572877B /* Pods_RunnerTests.framework */; }; + E29460EE2F58B491AE1B7420 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7B9B3B203B051AA61D71708D /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,20 +42,20 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 08806D17B22EF3C21A38F092 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; + 246CD2A9C634D9DCB84C492B /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 252C44AFA3F33C974291B8BE /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 26082E8AF6245A022710FD35 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 4311D8E3C3A17D0AEC213B8D /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 6CBCFC22D800681C25E71760 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; - 776B7AEAFA1C47BA10114ED8 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 7BAAB17D435C542729E431FD /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - 86E3CE0E2E977F39CDC4B358 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 7B9B3B203B051AA61D71708D /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 7CDD9C80886B67FDD2457CED /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 83FDFB5C26D8493094669E02 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -63,24 +63,24 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - B03D772360D1034B2572877B /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - D44D616AE522B55E38A366B2 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + A8FCCC20319F4779C587CA5D /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + AA3048732925F51D849F53E6 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 97C146EB1CF9000F007C117D /* Frameworks */ = { + 4B97B91A1F54FFB579CD55FC /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - A06930C0B91EF70DA9CE4397 /* Pods_Runner.framework in Frameworks */, + E29460EE2F58B491AE1B7420 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - DE0A2B7074F6DCE8A0B0EA9A /* Frameworks */ = { + 97C146EB1CF9000F007C117D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - D822B98219FD34ACB5EB5698 /* Pods_RunnerTests.framework in Frameworks */, + 35C2CDB992BA71FF454706DA /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -95,15 +95,15 @@ path = RunnerTests; sourceTree = ""; }; - 4856352D3A596BC21C6FA148 /* Pods */ = { + 8F8C07E618915BEA66718CB1 /* Pods */ = { isa = PBXGroup; children = ( - 4311D8E3C3A17D0AEC213B8D /* Pods-Runner.debug.xcconfig */, - 6CBCFC22D800681C25E71760 /* Pods-Runner.release.xcconfig */, - 7BAAB17D435C542729E431FD /* Pods-Runner.profile.xcconfig */, - 86E3CE0E2E977F39CDC4B358 /* Pods-RunnerTests.debug.xcconfig */, - D44D616AE522B55E38A366B2 /* Pods-RunnerTests.release.xcconfig */, - 776B7AEAFA1C47BA10114ED8 /* Pods-RunnerTests.profile.xcconfig */, + 26082E8AF6245A022710FD35 /* Pods-Runner.debug.xcconfig */, + 83FDFB5C26D8493094669E02 /* Pods-Runner.release.xcconfig */, + 7CDD9C80886B67FDD2457CED /* Pods-Runner.profile.xcconfig */, + A8FCCC20319F4779C587CA5D /* Pods-RunnerTests.debug.xcconfig */, + AA3048732925F51D849F53E6 /* Pods-RunnerTests.release.xcconfig */, + 252C44AFA3F33C974291B8BE /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -127,8 +127,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - 4856352D3A596BC21C6FA148 /* Pods */, - A98232C95B2001FA5C3391CE /* Frameworks */, + 8F8C07E618915BEA66718CB1 /* Pods */, + AAE566CDF0EA1C0DFD383D83 /* Frameworks */, ); sourceTree = ""; }; @@ -156,11 +156,11 @@ path = Runner; sourceTree = ""; }; - A98232C95B2001FA5C3391CE /* Frameworks */ = { + AAE566CDF0EA1C0DFD383D83 /* Frameworks */ = { isa = PBXGroup; children = ( - 08806D17B22EF3C21A38F092 /* Pods_Runner.framework */, - B03D772360D1034B2572877B /* Pods_RunnerTests.framework */, + 246CD2A9C634D9DCB84C492B /* Pods_Runner.framework */, + 7B9B3B203B051AA61D71708D /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 2452CEDE6CA3AEBBDEF8AAD3 /* [CP] Check Pods Manifest.lock */, + 3A1AE33A8C0CA1C146B254EA /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - DE0A2B7074F6DCE8A0B0EA9A /* Frameworks */, + 4B97B91A1F54FFB579CD55FC /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 2D8C42768D2C771C76365DA6 /* [CP] Check Pods Manifest.lock */, + CE5503F89FD8B6227DC56BBE /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - C6CDBA5DFB75AE6FE8042136 /* [CP] Embed Pods Frameworks */, + ECE47E0D65094DD667AA5D03 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -270,7 +270,7 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 2452CEDE6CA3AEBBDEF8AAD3 /* [CP] Check Pods Manifest.lock */ = { + 3A1AE33A8C0CA1C146B254EA /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -292,60 +292,60 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 2D8C42768D2C771C76365DA6 /* [CP] Check Pods Manifest.lock */ = { + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); + name = "Thin Binary"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputPaths = ( - "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); - name = "Thin Binary"; + name = "Run Script"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { + CE5503F89FD8B6227DC56BBE /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "Run Script"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - C6CDBA5DFB75AE6FE8042136 /* [CP] Embed Pods Frameworks */ = { + ECE47E0D65094DD667AA5D03 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 86E3CE0E2E977F39CDC4B358 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = A8FCCC20319F4779C587CA5D /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = D44D616AE522B55E38A366B2 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = AA3048732925F51D849F53E6 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 776B7AEAFA1C47BA10114ED8 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 252C44AFA3F33C974291B8BE /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/ffigen_codelab/step_03/example/linux/CMakeLists.txt b/ffigen_codelab/step_03/example/linux/CMakeLists.txt index e6a7756343..0225fd0ac0 100644 --- a/ffigen_codelab/step_03/example/linux/CMakeLists.txt +++ b/ffigen_codelab/step_03/example/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/ffigen_codelab/step_03/example/linux/runner/CMakeLists.txt b/ffigen_codelab/step_03/example/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/ffigen_codelab/step_03/example/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/ffigen_codelab/step_03/example/linux/main.cc b/ffigen_codelab/step_03/example/linux/runner/main.cc similarity index 100% rename from ffigen_codelab/step_03/example/linux/main.cc rename to ffigen_codelab/step_03/example/linux/runner/main.cc diff --git a/ffigen_codelab/step_03/example/linux/my_application.cc b/ffigen_codelab/step_03/example/linux/runner/my_application.cc similarity index 93% rename from ffigen_codelab/step_03/example/linux/my_application.cc rename to ffigen_codelab/step_03/example/linux/runner/my_application.cc index dda095336c..6233c3a531 100644 --- a/ffigen_codelab/step_03/example/linux/my_application.cc +++ b/ffigen_codelab/step_03/example/linux/runner/my_application.cc @@ -117,6 +117,12 @@ static void my_application_class_init(MyApplicationClass* klass) { static void my_application_init(MyApplication* self) {} MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + return MY_APPLICATION(g_object_new(my_application_get_type(), "application-id", APPLICATION_ID, "flags", G_APPLICATION_NON_UNIQUE, diff --git a/ffigen_codelab/step_03/example/linux/my_application.h b/ffigen_codelab/step_03/example/linux/runner/my_application.h similarity index 100% rename from ffigen_codelab/step_03/example/linux/my_application.h rename to ffigen_codelab/step_03/example/linux/runner/my_application.h diff --git a/ffigen_codelab/step_03/example/macos/Runner.xcodeproj/project.pbxproj b/ffigen_codelab/step_03/example/macos/Runner.xcodeproj/project.pbxproj index c46af4bc41..5d066c56cd 100644 --- a/ffigen_codelab/step_03/example/macos/Runner.xcodeproj/project.pbxproj +++ b/ffigen_codelab/step_03/example/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ - 22A321ADA93F6BE57C8DB371 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6308EF3D68EB994287CCB311 /* Pods_RunnerTests.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 6D34367F00C866FA2CD0434B /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 19B85926E300672C928F485E /* Pods_Runner.framework */; }; + 34C11F32AC13E549EAC19C9A /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9111221EFB74204A99FADA45 /* Pods_Runner.framework */; }; + F87322B26DD8D853E9CB39B2 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3F631A83DC0FBC6522DF7C62 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,7 +62,6 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 19B85926E300672C928F485E /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -79,15 +78,16 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 575427019D162B19FF420B51 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 6308EF3D68EB994287CCB311 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 3F631A83DC0FBC6522DF7C62 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 71BD6EA5154E76B5396EE90D /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 74406D118E64F0271B406A7F /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 7CA36ECAA2AEF85F59D3357E /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 86D133FFF185D5443960DFD4 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - 8EAA887323D967C5E5107C4C /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - 8F41DA1F04C4782597E80A53 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 830A7422CDCD433EA41C308D /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 9111221EFB74204A99FADA45 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - A55B4566B2B9F1D3890CE08A /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + AC73A378F377F50F98A1B559 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + BD2810150294EE7B0861D857 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + C913AD53FEBD6CCC01058575 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 22A321ADA93F6BE57C8DB371 /* Pods_RunnerTests.framework in Frameworks */, + F87322B26DD8D853E9CB39B2 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,27 +103,13 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 6D34367F00C866FA2CD0434B /* Pods_Runner.framework in Frameworks */, + 34C11F32AC13E549EAC19C9A /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 16D64D86743EC00FC59F2CDD /* Pods */ = { - isa = PBXGroup; - children = ( - A55B4566B2B9F1D3890CE08A /* Pods-Runner.debug.xcconfig */, - 575427019D162B19FF420B51 /* Pods-Runner.release.xcconfig */, - 8EAA887323D967C5E5107C4C /* Pods-Runner.profile.xcconfig */, - 7CA36ECAA2AEF85F59D3357E /* Pods-RunnerTests.debug.xcconfig */, - 86D133FFF185D5443960DFD4 /* Pods-RunnerTests.release.xcconfig */, - 8F41DA1F04C4782597E80A53 /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; 331C80D6294CF71000263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -151,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 16D64D86743EC00FC59F2CDD /* Pods */, + EDC5819FB59C73891ABAD209 /* Pods */, ); sourceTree = ""; }; @@ -202,12 +188,26 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - 19B85926E300672C928F485E /* Pods_Runner.framework */, - 6308EF3D68EB994287CCB311 /* Pods_RunnerTests.framework */, + 9111221EFB74204A99FADA45 /* Pods_Runner.framework */, + 3F631A83DC0FBC6522DF7C62 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; }; + EDC5819FB59C73891ABAD209 /* Pods */ = { + isa = PBXGroup; + children = ( + C913AD53FEBD6CCC01058575 /* Pods-Runner.debug.xcconfig */, + 74406D118E64F0271B406A7F /* Pods-Runner.release.xcconfig */, + AC73A378F377F50F98A1B559 /* Pods-Runner.profile.xcconfig */, + 71BD6EA5154E76B5396EE90D /* Pods-RunnerTests.debug.xcconfig */, + BD2810150294EE7B0861D857 /* Pods-RunnerTests.release.xcconfig */, + 830A7422CDCD433EA41C308D /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 3FCD6F6A40D1F341883C2B52 /* [CP] Check Pods Manifest.lock */, + 84A3A37EB6F5F6C593457D11 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 573CACD78CD2526BB9087C8C /* [CP] Check Pods Manifest.lock */, + D02496A41717E29108D3EE35 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - A0D71596DFBA1F193DFBD8AD /* [CP] Embed Pods Frameworks */, + 1654127F8324C89D6EBD6228 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,6 +323,23 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ + 1654127F8324C89D6EBD6228 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -361,7 +378,7 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 3FCD6F6A40D1F341883C2B52 /* [CP] Check Pods Manifest.lock */ = { + 84A3A37EB6F5F6C593457D11 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -383,7 +400,7 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 573CACD78CD2526BB9087C8C /* [CP] Check Pods Manifest.lock */ = { + D02496A41717E29108D3EE35 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -405,23 +422,6 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - A0D71596DFBA1F193DFBD8AD /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 7CA36ECAA2AEF85F59D3357E /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 71BD6EA5154E76B5396EE90D /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 86D133FFF185D5443960DFD4 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = BD2810150294EE7B0861D857 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 8F41DA1F04C4782597E80A53 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 830A7422CDCD433EA41C308D /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/ffigen_codelab/step_03/macos/ffigen_app.podspec b/ffigen_codelab/step_03/macos/ffigen_app.podspec index b03ff8d4d8..507dd0a9d3 100644 --- a/ffigen_codelab/step_03/macos/ffigen_app.podspec +++ b/ffigen_codelab/step_03/macos/ffigen_app.podspec @@ -19,6 +19,13 @@ A new Flutter FFI plugin project. # `../src/*` so that the C sources can be shared among all target platforms. s.source = { :path => '.' } s.source_files = 'Classes/**/*' + + # If your plugin requires a privacy manifest, for example if it collects user + # data, update the PrivacyInfo.xcprivacy file to describe your plugin's + # privacy impact, and then uncomment this line. For more information, + # see https://developer.apple.com/documentation/bundleresources/privacy_manifest_files + # s.resource_bundles = {'ffigen_app_privacy' => ['Resources/PrivacyInfo.xcprivacy']} + s.dependency 'FlutterMacOS' s.platform = :osx, '10.11' diff --git a/ffigen_codelab/step_03/pubspec.yaml b/ffigen_codelab/step_03/pubspec.yaml index ba96d8eb68..eedf7c6a69 100644 --- a/ffigen_codelab/step_03/pubspec.yaml +++ b/ffigen_codelab/step_03/pubspec.yaml @@ -14,7 +14,7 @@ dependencies: dev_dependencies: ffi: ^2.1.3 - ffigen: ^14.0.1 + ffigen: ^15.0.0 flutter_test: sdk: flutter flutter_lints: ^5.0.0 diff --git a/ffigen_codelab/step_03/src/CMakeLists.txt b/ffigen_codelab/step_03/src/CMakeLists.txt index d2390e362c..0060b246ab 100644 --- a/ffigen_codelab/step_03/src/CMakeLists.txt +++ b/ffigen_codelab/step_03/src/CMakeLists.txt @@ -15,3 +15,8 @@ set_target_properties(ffigen_app PROPERTIES ) target_compile_definitions(ffigen_app PUBLIC DART_SHARED_LIB) + +if (ANDROID) + # Support Android 15 16k page size + target_link_options(ffigen_app PRIVATE "-Wl,-z,max-page-size=16384") +endif() diff --git a/ffigen_codelab/step_05/example/ios/Runner.xcodeproj/project.pbxproj b/ffigen_codelab/step_05/example/ios/Runner.xcodeproj/project.pbxproj index d4a7f84f6f..c92da01762 100644 --- a/ffigen_codelab/step_05/example/ios/Runner.xcodeproj/project.pbxproj +++ b/ffigen_codelab/step_05/example/ios/Runner.xcodeproj/project.pbxproj @@ -9,13 +9,13 @@ /* Begin PBXBuildFile section */ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; + 35C2CDB992BA71FF454706DA /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 246CD2A9C634D9DCB84C492B /* Pods_Runner.framework */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - A06930C0B91EF70DA9CE4397 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 08806D17B22EF3C21A38F092 /* Pods_Runner.framework */; }; - D822B98219FD34ACB5EB5698 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B03D772360D1034B2572877B /* Pods_RunnerTests.framework */; }; + E29460EE2F58B491AE1B7420 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7B9B3B203B051AA61D71708D /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,20 +42,20 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 08806D17B22EF3C21A38F092 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; + 246CD2A9C634D9DCB84C492B /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 252C44AFA3F33C974291B8BE /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 26082E8AF6245A022710FD35 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 4311D8E3C3A17D0AEC213B8D /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 6CBCFC22D800681C25E71760 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; - 776B7AEAFA1C47BA10114ED8 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 7BAAB17D435C542729E431FD /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - 86E3CE0E2E977F39CDC4B358 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 7B9B3B203B051AA61D71708D /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 7CDD9C80886B67FDD2457CED /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 83FDFB5C26D8493094669E02 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -63,24 +63,24 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - B03D772360D1034B2572877B /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - D44D616AE522B55E38A366B2 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + A8FCCC20319F4779C587CA5D /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + AA3048732925F51D849F53E6 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 97C146EB1CF9000F007C117D /* Frameworks */ = { + 4B97B91A1F54FFB579CD55FC /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - A06930C0B91EF70DA9CE4397 /* Pods_Runner.framework in Frameworks */, + E29460EE2F58B491AE1B7420 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - DE0A2B7074F6DCE8A0B0EA9A /* Frameworks */ = { + 97C146EB1CF9000F007C117D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - D822B98219FD34ACB5EB5698 /* Pods_RunnerTests.framework in Frameworks */, + 35C2CDB992BA71FF454706DA /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -95,15 +95,15 @@ path = RunnerTests; sourceTree = ""; }; - 4856352D3A596BC21C6FA148 /* Pods */ = { + 8F8C07E618915BEA66718CB1 /* Pods */ = { isa = PBXGroup; children = ( - 4311D8E3C3A17D0AEC213B8D /* Pods-Runner.debug.xcconfig */, - 6CBCFC22D800681C25E71760 /* Pods-Runner.release.xcconfig */, - 7BAAB17D435C542729E431FD /* Pods-Runner.profile.xcconfig */, - 86E3CE0E2E977F39CDC4B358 /* Pods-RunnerTests.debug.xcconfig */, - D44D616AE522B55E38A366B2 /* Pods-RunnerTests.release.xcconfig */, - 776B7AEAFA1C47BA10114ED8 /* Pods-RunnerTests.profile.xcconfig */, + 26082E8AF6245A022710FD35 /* Pods-Runner.debug.xcconfig */, + 83FDFB5C26D8493094669E02 /* Pods-Runner.release.xcconfig */, + 7CDD9C80886B67FDD2457CED /* Pods-Runner.profile.xcconfig */, + A8FCCC20319F4779C587CA5D /* Pods-RunnerTests.debug.xcconfig */, + AA3048732925F51D849F53E6 /* Pods-RunnerTests.release.xcconfig */, + 252C44AFA3F33C974291B8BE /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -127,8 +127,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - 4856352D3A596BC21C6FA148 /* Pods */, - A98232C95B2001FA5C3391CE /* Frameworks */, + 8F8C07E618915BEA66718CB1 /* Pods */, + AAE566CDF0EA1C0DFD383D83 /* Frameworks */, ); sourceTree = ""; }; @@ -156,11 +156,11 @@ path = Runner; sourceTree = ""; }; - A98232C95B2001FA5C3391CE /* Frameworks */ = { + AAE566CDF0EA1C0DFD383D83 /* Frameworks */ = { isa = PBXGroup; children = ( - 08806D17B22EF3C21A38F092 /* Pods_Runner.framework */, - B03D772360D1034B2572877B /* Pods_RunnerTests.framework */, + 246CD2A9C634D9DCB84C492B /* Pods_Runner.framework */, + 7B9B3B203B051AA61D71708D /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 2452CEDE6CA3AEBBDEF8AAD3 /* [CP] Check Pods Manifest.lock */, + 3A1AE33A8C0CA1C146B254EA /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - DE0A2B7074F6DCE8A0B0EA9A /* Frameworks */, + 4B97B91A1F54FFB579CD55FC /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 2D8C42768D2C771C76365DA6 /* [CP] Check Pods Manifest.lock */, + CE5503F89FD8B6227DC56BBE /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - C6CDBA5DFB75AE6FE8042136 /* [CP] Embed Pods Frameworks */, + ECE47E0D65094DD667AA5D03 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -270,7 +270,7 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 2452CEDE6CA3AEBBDEF8AAD3 /* [CP] Check Pods Manifest.lock */ = { + 3A1AE33A8C0CA1C146B254EA /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -292,60 +292,60 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 2D8C42768D2C771C76365DA6 /* [CP] Check Pods Manifest.lock */ = { + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); + name = "Thin Binary"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputPaths = ( - "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); - name = "Thin Binary"; + name = "Run Script"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { + CE5503F89FD8B6227DC56BBE /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "Run Script"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - C6CDBA5DFB75AE6FE8042136 /* [CP] Embed Pods Frameworks */ = { + ECE47E0D65094DD667AA5D03 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 86E3CE0E2E977F39CDC4B358 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = A8FCCC20319F4779C587CA5D /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = D44D616AE522B55E38A366B2 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = AA3048732925F51D849F53E6 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 776B7AEAFA1C47BA10114ED8 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 252C44AFA3F33C974291B8BE /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/ffigen_codelab/step_05/example/linux/CMakeLists.txt b/ffigen_codelab/step_05/example/linux/CMakeLists.txt index e6a7756343..0225fd0ac0 100644 --- a/ffigen_codelab/step_05/example/linux/CMakeLists.txt +++ b/ffigen_codelab/step_05/example/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/ffigen_codelab/step_05/example/linux/runner/CMakeLists.txt b/ffigen_codelab/step_05/example/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/ffigen_codelab/step_05/example/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/ffigen_codelab/step_05/example/linux/main.cc b/ffigen_codelab/step_05/example/linux/runner/main.cc similarity index 100% rename from ffigen_codelab/step_05/example/linux/main.cc rename to ffigen_codelab/step_05/example/linux/runner/main.cc diff --git a/ffigen_codelab/step_05/example/linux/my_application.cc b/ffigen_codelab/step_05/example/linux/runner/my_application.cc similarity index 93% rename from ffigen_codelab/step_05/example/linux/my_application.cc rename to ffigen_codelab/step_05/example/linux/runner/my_application.cc index dda095336c..6233c3a531 100644 --- a/ffigen_codelab/step_05/example/linux/my_application.cc +++ b/ffigen_codelab/step_05/example/linux/runner/my_application.cc @@ -117,6 +117,12 @@ static void my_application_class_init(MyApplicationClass* klass) { static void my_application_init(MyApplication* self) {} MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + return MY_APPLICATION(g_object_new(my_application_get_type(), "application-id", APPLICATION_ID, "flags", G_APPLICATION_NON_UNIQUE, diff --git a/ffigen_codelab/step_05/example/linux/my_application.h b/ffigen_codelab/step_05/example/linux/runner/my_application.h similarity index 100% rename from ffigen_codelab/step_05/example/linux/my_application.h rename to ffigen_codelab/step_05/example/linux/runner/my_application.h diff --git a/ffigen_codelab/step_05/example/macos/Runner.xcodeproj/project.pbxproj b/ffigen_codelab/step_05/example/macos/Runner.xcodeproj/project.pbxproj index c46af4bc41..5d066c56cd 100644 --- a/ffigen_codelab/step_05/example/macos/Runner.xcodeproj/project.pbxproj +++ b/ffigen_codelab/step_05/example/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ - 22A321ADA93F6BE57C8DB371 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6308EF3D68EB994287CCB311 /* Pods_RunnerTests.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 6D34367F00C866FA2CD0434B /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 19B85926E300672C928F485E /* Pods_Runner.framework */; }; + 34C11F32AC13E549EAC19C9A /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9111221EFB74204A99FADA45 /* Pods_Runner.framework */; }; + F87322B26DD8D853E9CB39B2 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3F631A83DC0FBC6522DF7C62 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,7 +62,6 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 19B85926E300672C928F485E /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -79,15 +78,16 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 575427019D162B19FF420B51 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 6308EF3D68EB994287CCB311 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 3F631A83DC0FBC6522DF7C62 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 71BD6EA5154E76B5396EE90D /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 74406D118E64F0271B406A7F /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 7CA36ECAA2AEF85F59D3357E /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 86D133FFF185D5443960DFD4 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - 8EAA887323D967C5E5107C4C /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - 8F41DA1F04C4782597E80A53 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 830A7422CDCD433EA41C308D /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 9111221EFB74204A99FADA45 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - A55B4566B2B9F1D3890CE08A /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + AC73A378F377F50F98A1B559 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + BD2810150294EE7B0861D857 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + C913AD53FEBD6CCC01058575 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 22A321ADA93F6BE57C8DB371 /* Pods_RunnerTests.framework in Frameworks */, + F87322B26DD8D853E9CB39B2 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,27 +103,13 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 6D34367F00C866FA2CD0434B /* Pods_Runner.framework in Frameworks */, + 34C11F32AC13E549EAC19C9A /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 16D64D86743EC00FC59F2CDD /* Pods */ = { - isa = PBXGroup; - children = ( - A55B4566B2B9F1D3890CE08A /* Pods-Runner.debug.xcconfig */, - 575427019D162B19FF420B51 /* Pods-Runner.release.xcconfig */, - 8EAA887323D967C5E5107C4C /* Pods-Runner.profile.xcconfig */, - 7CA36ECAA2AEF85F59D3357E /* Pods-RunnerTests.debug.xcconfig */, - 86D133FFF185D5443960DFD4 /* Pods-RunnerTests.release.xcconfig */, - 8F41DA1F04C4782597E80A53 /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; 331C80D6294CF71000263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -151,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 16D64D86743EC00FC59F2CDD /* Pods */, + EDC5819FB59C73891ABAD209 /* Pods */, ); sourceTree = ""; }; @@ -202,12 +188,26 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - 19B85926E300672C928F485E /* Pods_Runner.framework */, - 6308EF3D68EB994287CCB311 /* Pods_RunnerTests.framework */, + 9111221EFB74204A99FADA45 /* Pods_Runner.framework */, + 3F631A83DC0FBC6522DF7C62 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; }; + EDC5819FB59C73891ABAD209 /* Pods */ = { + isa = PBXGroup; + children = ( + C913AD53FEBD6CCC01058575 /* Pods-Runner.debug.xcconfig */, + 74406D118E64F0271B406A7F /* Pods-Runner.release.xcconfig */, + AC73A378F377F50F98A1B559 /* Pods-Runner.profile.xcconfig */, + 71BD6EA5154E76B5396EE90D /* Pods-RunnerTests.debug.xcconfig */, + BD2810150294EE7B0861D857 /* Pods-RunnerTests.release.xcconfig */, + 830A7422CDCD433EA41C308D /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 3FCD6F6A40D1F341883C2B52 /* [CP] Check Pods Manifest.lock */, + 84A3A37EB6F5F6C593457D11 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 573CACD78CD2526BB9087C8C /* [CP] Check Pods Manifest.lock */, + D02496A41717E29108D3EE35 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - A0D71596DFBA1F193DFBD8AD /* [CP] Embed Pods Frameworks */, + 1654127F8324C89D6EBD6228 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,6 +323,23 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ + 1654127F8324C89D6EBD6228 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -361,7 +378,7 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 3FCD6F6A40D1F341883C2B52 /* [CP] Check Pods Manifest.lock */ = { + 84A3A37EB6F5F6C593457D11 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -383,7 +400,7 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 573CACD78CD2526BB9087C8C /* [CP] Check Pods Manifest.lock */ = { + D02496A41717E29108D3EE35 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -405,23 +422,6 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - A0D71596DFBA1F193DFBD8AD /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 7CA36ECAA2AEF85F59D3357E /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 71BD6EA5154E76B5396EE90D /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 86D133FFF185D5443960DFD4 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = BD2810150294EE7B0861D857 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 8F41DA1F04C4782597E80A53 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 830A7422CDCD433EA41C308D /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/ffigen_codelab/step_05/macos/ffigen_app.podspec b/ffigen_codelab/step_05/macos/ffigen_app.podspec index b03ff8d4d8..507dd0a9d3 100644 --- a/ffigen_codelab/step_05/macos/ffigen_app.podspec +++ b/ffigen_codelab/step_05/macos/ffigen_app.podspec @@ -19,6 +19,13 @@ A new Flutter FFI plugin project. # `../src/*` so that the C sources can be shared among all target platforms. s.source = { :path => '.' } s.source_files = 'Classes/**/*' + + # If your plugin requires a privacy manifest, for example if it collects user + # data, update the PrivacyInfo.xcprivacy file to describe your plugin's + # privacy impact, and then uncomment this line. For more information, + # see https://developer.apple.com/documentation/bundleresources/privacy_manifest_files + # s.resource_bundles = {'ffigen_app_privacy' => ['Resources/PrivacyInfo.xcprivacy']} + s.dependency 'FlutterMacOS' s.platform = :osx, '10.11' diff --git a/ffigen_codelab/step_05/pubspec.yaml b/ffigen_codelab/step_05/pubspec.yaml index 267c1b71f3..1fe4c6cb0d 100644 --- a/ffigen_codelab/step_05/pubspec.yaml +++ b/ffigen_codelab/step_05/pubspec.yaml @@ -14,7 +14,7 @@ dependencies: plugin_platform_interface: ^2.0.2 dev_dependencies: - ffigen: ^14.0.1 + ffigen: ^15.0.0 flutter_test: sdk: flutter flutter_lints: ^5.0.0 diff --git a/ffigen_codelab/step_05/src/CMakeLists.txt b/ffigen_codelab/step_05/src/CMakeLists.txt index db7f672be6..176008e445 100644 --- a/ffigen_codelab/step_05/src/CMakeLists.txt +++ b/ffigen_codelab/step_05/src/CMakeLists.txt @@ -22,3 +22,8 @@ set_target_properties(ffigen_app PROPERTIES endif (WIN32) target_compile_definitions(ffigen_app PUBLIC DART_SHARED_LIB) + +if (ANDROID) + # Support Android 15 16k page size + target_link_options(ffigen_app PRIVATE "-Wl,-z,max-page-size=16384") +endif() diff --git a/ffigen_codelab/step_06/example/ios/Runner.xcodeproj/project.pbxproj b/ffigen_codelab/step_06/example/ios/Runner.xcodeproj/project.pbxproj index d4a7f84f6f..c92da01762 100644 --- a/ffigen_codelab/step_06/example/ios/Runner.xcodeproj/project.pbxproj +++ b/ffigen_codelab/step_06/example/ios/Runner.xcodeproj/project.pbxproj @@ -9,13 +9,13 @@ /* Begin PBXBuildFile section */ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; + 35C2CDB992BA71FF454706DA /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 246CD2A9C634D9DCB84C492B /* Pods_Runner.framework */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - A06930C0B91EF70DA9CE4397 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 08806D17B22EF3C21A38F092 /* Pods_Runner.framework */; }; - D822B98219FD34ACB5EB5698 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B03D772360D1034B2572877B /* Pods_RunnerTests.framework */; }; + E29460EE2F58B491AE1B7420 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7B9B3B203B051AA61D71708D /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,20 +42,20 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 08806D17B22EF3C21A38F092 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; + 246CD2A9C634D9DCB84C492B /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 252C44AFA3F33C974291B8BE /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 26082E8AF6245A022710FD35 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 4311D8E3C3A17D0AEC213B8D /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 6CBCFC22D800681C25E71760 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; - 776B7AEAFA1C47BA10114ED8 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 7BAAB17D435C542729E431FD /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - 86E3CE0E2E977F39CDC4B358 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 7B9B3B203B051AA61D71708D /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 7CDD9C80886B67FDD2457CED /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 83FDFB5C26D8493094669E02 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -63,24 +63,24 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - B03D772360D1034B2572877B /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - D44D616AE522B55E38A366B2 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + A8FCCC20319F4779C587CA5D /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + AA3048732925F51D849F53E6 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 97C146EB1CF9000F007C117D /* Frameworks */ = { + 4B97B91A1F54FFB579CD55FC /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - A06930C0B91EF70DA9CE4397 /* Pods_Runner.framework in Frameworks */, + E29460EE2F58B491AE1B7420 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - DE0A2B7074F6DCE8A0B0EA9A /* Frameworks */ = { + 97C146EB1CF9000F007C117D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - D822B98219FD34ACB5EB5698 /* Pods_RunnerTests.framework in Frameworks */, + 35C2CDB992BA71FF454706DA /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -95,15 +95,15 @@ path = RunnerTests; sourceTree = ""; }; - 4856352D3A596BC21C6FA148 /* Pods */ = { + 8F8C07E618915BEA66718CB1 /* Pods */ = { isa = PBXGroup; children = ( - 4311D8E3C3A17D0AEC213B8D /* Pods-Runner.debug.xcconfig */, - 6CBCFC22D800681C25E71760 /* Pods-Runner.release.xcconfig */, - 7BAAB17D435C542729E431FD /* Pods-Runner.profile.xcconfig */, - 86E3CE0E2E977F39CDC4B358 /* Pods-RunnerTests.debug.xcconfig */, - D44D616AE522B55E38A366B2 /* Pods-RunnerTests.release.xcconfig */, - 776B7AEAFA1C47BA10114ED8 /* Pods-RunnerTests.profile.xcconfig */, + 26082E8AF6245A022710FD35 /* Pods-Runner.debug.xcconfig */, + 83FDFB5C26D8493094669E02 /* Pods-Runner.release.xcconfig */, + 7CDD9C80886B67FDD2457CED /* Pods-Runner.profile.xcconfig */, + A8FCCC20319F4779C587CA5D /* Pods-RunnerTests.debug.xcconfig */, + AA3048732925F51D849F53E6 /* Pods-RunnerTests.release.xcconfig */, + 252C44AFA3F33C974291B8BE /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -127,8 +127,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - 4856352D3A596BC21C6FA148 /* Pods */, - A98232C95B2001FA5C3391CE /* Frameworks */, + 8F8C07E618915BEA66718CB1 /* Pods */, + AAE566CDF0EA1C0DFD383D83 /* Frameworks */, ); sourceTree = ""; }; @@ -156,11 +156,11 @@ path = Runner; sourceTree = ""; }; - A98232C95B2001FA5C3391CE /* Frameworks */ = { + AAE566CDF0EA1C0DFD383D83 /* Frameworks */ = { isa = PBXGroup; children = ( - 08806D17B22EF3C21A38F092 /* Pods_Runner.framework */, - B03D772360D1034B2572877B /* Pods_RunnerTests.framework */, + 246CD2A9C634D9DCB84C492B /* Pods_Runner.framework */, + 7B9B3B203B051AA61D71708D /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 2452CEDE6CA3AEBBDEF8AAD3 /* [CP] Check Pods Manifest.lock */, + 3A1AE33A8C0CA1C146B254EA /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - DE0A2B7074F6DCE8A0B0EA9A /* Frameworks */, + 4B97B91A1F54FFB579CD55FC /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 2D8C42768D2C771C76365DA6 /* [CP] Check Pods Manifest.lock */, + CE5503F89FD8B6227DC56BBE /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - C6CDBA5DFB75AE6FE8042136 /* [CP] Embed Pods Frameworks */, + ECE47E0D65094DD667AA5D03 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -270,7 +270,7 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 2452CEDE6CA3AEBBDEF8AAD3 /* [CP] Check Pods Manifest.lock */ = { + 3A1AE33A8C0CA1C146B254EA /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -292,60 +292,60 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 2D8C42768D2C771C76365DA6 /* [CP] Check Pods Manifest.lock */ = { + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); + name = "Thin Binary"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputPaths = ( - "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); - name = "Thin Binary"; + name = "Run Script"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { + CE5503F89FD8B6227DC56BBE /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "Run Script"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - C6CDBA5DFB75AE6FE8042136 /* [CP] Embed Pods Frameworks */ = { + ECE47E0D65094DD667AA5D03 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 86E3CE0E2E977F39CDC4B358 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = A8FCCC20319F4779C587CA5D /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = D44D616AE522B55E38A366B2 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = AA3048732925F51D849F53E6 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 776B7AEAFA1C47BA10114ED8 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 252C44AFA3F33C974291B8BE /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/ffigen_codelab/step_06/example/linux/CMakeLists.txt b/ffigen_codelab/step_06/example/linux/CMakeLists.txt index e6a7756343..0225fd0ac0 100644 --- a/ffigen_codelab/step_06/example/linux/CMakeLists.txt +++ b/ffigen_codelab/step_06/example/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/ffigen_codelab/step_06/example/linux/runner/CMakeLists.txt b/ffigen_codelab/step_06/example/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/ffigen_codelab/step_06/example/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/ffigen_codelab/step_06/example/linux/main.cc b/ffigen_codelab/step_06/example/linux/runner/main.cc similarity index 100% rename from ffigen_codelab/step_06/example/linux/main.cc rename to ffigen_codelab/step_06/example/linux/runner/main.cc diff --git a/ffigen_codelab/step_06/example/linux/my_application.cc b/ffigen_codelab/step_06/example/linux/runner/my_application.cc similarity index 93% rename from ffigen_codelab/step_06/example/linux/my_application.cc rename to ffigen_codelab/step_06/example/linux/runner/my_application.cc index dda095336c..6233c3a531 100644 --- a/ffigen_codelab/step_06/example/linux/my_application.cc +++ b/ffigen_codelab/step_06/example/linux/runner/my_application.cc @@ -117,6 +117,12 @@ static void my_application_class_init(MyApplicationClass* klass) { static void my_application_init(MyApplication* self) {} MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + return MY_APPLICATION(g_object_new(my_application_get_type(), "application-id", APPLICATION_ID, "flags", G_APPLICATION_NON_UNIQUE, diff --git a/ffigen_codelab/step_06/example/linux/my_application.h b/ffigen_codelab/step_06/example/linux/runner/my_application.h similarity index 100% rename from ffigen_codelab/step_06/example/linux/my_application.h rename to ffigen_codelab/step_06/example/linux/runner/my_application.h diff --git a/ffigen_codelab/step_06/example/macos/Runner.xcodeproj/project.pbxproj b/ffigen_codelab/step_06/example/macos/Runner.xcodeproj/project.pbxproj index c46af4bc41..5d066c56cd 100644 --- a/ffigen_codelab/step_06/example/macos/Runner.xcodeproj/project.pbxproj +++ b/ffigen_codelab/step_06/example/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ - 22A321ADA93F6BE57C8DB371 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6308EF3D68EB994287CCB311 /* Pods_RunnerTests.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 6D34367F00C866FA2CD0434B /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 19B85926E300672C928F485E /* Pods_Runner.framework */; }; + 34C11F32AC13E549EAC19C9A /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9111221EFB74204A99FADA45 /* Pods_Runner.framework */; }; + F87322B26DD8D853E9CB39B2 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3F631A83DC0FBC6522DF7C62 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,7 +62,6 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 19B85926E300672C928F485E /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -79,15 +78,16 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 575427019D162B19FF420B51 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 6308EF3D68EB994287CCB311 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 3F631A83DC0FBC6522DF7C62 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 71BD6EA5154E76B5396EE90D /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 74406D118E64F0271B406A7F /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 7CA36ECAA2AEF85F59D3357E /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 86D133FFF185D5443960DFD4 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - 8EAA887323D967C5E5107C4C /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - 8F41DA1F04C4782597E80A53 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 830A7422CDCD433EA41C308D /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 9111221EFB74204A99FADA45 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - A55B4566B2B9F1D3890CE08A /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + AC73A378F377F50F98A1B559 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + BD2810150294EE7B0861D857 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + C913AD53FEBD6CCC01058575 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 22A321ADA93F6BE57C8DB371 /* Pods_RunnerTests.framework in Frameworks */, + F87322B26DD8D853E9CB39B2 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,27 +103,13 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 6D34367F00C866FA2CD0434B /* Pods_Runner.framework in Frameworks */, + 34C11F32AC13E549EAC19C9A /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 16D64D86743EC00FC59F2CDD /* Pods */ = { - isa = PBXGroup; - children = ( - A55B4566B2B9F1D3890CE08A /* Pods-Runner.debug.xcconfig */, - 575427019D162B19FF420B51 /* Pods-Runner.release.xcconfig */, - 8EAA887323D967C5E5107C4C /* Pods-Runner.profile.xcconfig */, - 7CA36ECAA2AEF85F59D3357E /* Pods-RunnerTests.debug.xcconfig */, - 86D133FFF185D5443960DFD4 /* Pods-RunnerTests.release.xcconfig */, - 8F41DA1F04C4782597E80A53 /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; 331C80D6294CF71000263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -151,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 16D64D86743EC00FC59F2CDD /* Pods */, + EDC5819FB59C73891ABAD209 /* Pods */, ); sourceTree = ""; }; @@ -202,12 +188,26 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - 19B85926E300672C928F485E /* Pods_Runner.framework */, - 6308EF3D68EB994287CCB311 /* Pods_RunnerTests.framework */, + 9111221EFB74204A99FADA45 /* Pods_Runner.framework */, + 3F631A83DC0FBC6522DF7C62 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; }; + EDC5819FB59C73891ABAD209 /* Pods */ = { + isa = PBXGroup; + children = ( + C913AD53FEBD6CCC01058575 /* Pods-Runner.debug.xcconfig */, + 74406D118E64F0271B406A7F /* Pods-Runner.release.xcconfig */, + AC73A378F377F50F98A1B559 /* Pods-Runner.profile.xcconfig */, + 71BD6EA5154E76B5396EE90D /* Pods-RunnerTests.debug.xcconfig */, + BD2810150294EE7B0861D857 /* Pods-RunnerTests.release.xcconfig */, + 830A7422CDCD433EA41C308D /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 3FCD6F6A40D1F341883C2B52 /* [CP] Check Pods Manifest.lock */, + 84A3A37EB6F5F6C593457D11 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 573CACD78CD2526BB9087C8C /* [CP] Check Pods Manifest.lock */, + D02496A41717E29108D3EE35 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - A0D71596DFBA1F193DFBD8AD /* [CP] Embed Pods Frameworks */, + 1654127F8324C89D6EBD6228 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,6 +323,23 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ + 1654127F8324C89D6EBD6228 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -361,7 +378,7 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 3FCD6F6A40D1F341883C2B52 /* [CP] Check Pods Manifest.lock */ = { + 84A3A37EB6F5F6C593457D11 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -383,7 +400,7 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 573CACD78CD2526BB9087C8C /* [CP] Check Pods Manifest.lock */ = { + D02496A41717E29108D3EE35 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -405,23 +422,6 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - A0D71596DFBA1F193DFBD8AD /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 7CA36ECAA2AEF85F59D3357E /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 71BD6EA5154E76B5396EE90D /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 86D133FFF185D5443960DFD4 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = BD2810150294EE7B0861D857 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 8F41DA1F04C4782597E80A53 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 830A7422CDCD433EA41C308D /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/ffigen_codelab/step_06/macos/ffigen_app.podspec b/ffigen_codelab/step_06/macos/ffigen_app.podspec index b03ff8d4d8..507dd0a9d3 100644 --- a/ffigen_codelab/step_06/macos/ffigen_app.podspec +++ b/ffigen_codelab/step_06/macos/ffigen_app.podspec @@ -19,6 +19,13 @@ A new Flutter FFI plugin project. # `../src/*` so that the C sources can be shared among all target platforms. s.source = { :path => '.' } s.source_files = 'Classes/**/*' + + # If your plugin requires a privacy manifest, for example if it collects user + # data, update the PrivacyInfo.xcprivacy file to describe your plugin's + # privacy impact, and then uncomment this line. For more information, + # see https://developer.apple.com/documentation/bundleresources/privacy_manifest_files + # s.resource_bundles = {'ffigen_app_privacy' => ['Resources/PrivacyInfo.xcprivacy']} + s.dependency 'FlutterMacOS' s.platform = :osx, '10.11' diff --git a/ffigen_codelab/step_06/pubspec.yaml b/ffigen_codelab/step_06/pubspec.yaml index 267c1b71f3..1fe4c6cb0d 100644 --- a/ffigen_codelab/step_06/pubspec.yaml +++ b/ffigen_codelab/step_06/pubspec.yaml @@ -14,7 +14,7 @@ dependencies: plugin_platform_interface: ^2.0.2 dev_dependencies: - ffigen: ^14.0.1 + ffigen: ^15.0.0 flutter_test: sdk: flutter flutter_lints: ^5.0.0 diff --git a/ffigen_codelab/step_06/src/CMakeLists.txt b/ffigen_codelab/step_06/src/CMakeLists.txt index db7f672be6..176008e445 100644 --- a/ffigen_codelab/step_06/src/CMakeLists.txt +++ b/ffigen_codelab/step_06/src/CMakeLists.txt @@ -22,3 +22,8 @@ set_target_properties(ffigen_app PROPERTIES endif (WIN32) target_compile_definitions(ffigen_app PUBLIC DART_SHARED_LIB) + +if (ANDROID) + # Support Android 15 16k page size + target_link_options(ffigen_app PRIVATE "-Wl,-z,max-page-size=16384") +endif() diff --git a/ffigen_codelab/step_07/example/ios/Runner.xcodeproj/project.pbxproj b/ffigen_codelab/step_07/example/ios/Runner.xcodeproj/project.pbxproj index d4a7f84f6f..c92da01762 100644 --- a/ffigen_codelab/step_07/example/ios/Runner.xcodeproj/project.pbxproj +++ b/ffigen_codelab/step_07/example/ios/Runner.xcodeproj/project.pbxproj @@ -9,13 +9,13 @@ /* Begin PBXBuildFile section */ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; + 35C2CDB992BA71FF454706DA /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 246CD2A9C634D9DCB84C492B /* Pods_Runner.framework */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - A06930C0B91EF70DA9CE4397 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 08806D17B22EF3C21A38F092 /* Pods_Runner.framework */; }; - D822B98219FD34ACB5EB5698 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B03D772360D1034B2572877B /* Pods_RunnerTests.framework */; }; + E29460EE2F58B491AE1B7420 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7B9B3B203B051AA61D71708D /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,20 +42,20 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 08806D17B22EF3C21A38F092 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; + 246CD2A9C634D9DCB84C492B /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 252C44AFA3F33C974291B8BE /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 26082E8AF6245A022710FD35 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 4311D8E3C3A17D0AEC213B8D /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 6CBCFC22D800681C25E71760 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; - 776B7AEAFA1C47BA10114ED8 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 7BAAB17D435C542729E431FD /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - 86E3CE0E2E977F39CDC4B358 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 7B9B3B203B051AA61D71708D /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 7CDD9C80886B67FDD2457CED /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 83FDFB5C26D8493094669E02 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -63,24 +63,24 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - B03D772360D1034B2572877B /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - D44D616AE522B55E38A366B2 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + A8FCCC20319F4779C587CA5D /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + AA3048732925F51D849F53E6 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 97C146EB1CF9000F007C117D /* Frameworks */ = { + 4B97B91A1F54FFB579CD55FC /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - A06930C0B91EF70DA9CE4397 /* Pods_Runner.framework in Frameworks */, + E29460EE2F58B491AE1B7420 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - DE0A2B7074F6DCE8A0B0EA9A /* Frameworks */ = { + 97C146EB1CF9000F007C117D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - D822B98219FD34ACB5EB5698 /* Pods_RunnerTests.framework in Frameworks */, + 35C2CDB992BA71FF454706DA /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -95,15 +95,15 @@ path = RunnerTests; sourceTree = ""; }; - 4856352D3A596BC21C6FA148 /* Pods */ = { + 8F8C07E618915BEA66718CB1 /* Pods */ = { isa = PBXGroup; children = ( - 4311D8E3C3A17D0AEC213B8D /* Pods-Runner.debug.xcconfig */, - 6CBCFC22D800681C25E71760 /* Pods-Runner.release.xcconfig */, - 7BAAB17D435C542729E431FD /* Pods-Runner.profile.xcconfig */, - 86E3CE0E2E977F39CDC4B358 /* Pods-RunnerTests.debug.xcconfig */, - D44D616AE522B55E38A366B2 /* Pods-RunnerTests.release.xcconfig */, - 776B7AEAFA1C47BA10114ED8 /* Pods-RunnerTests.profile.xcconfig */, + 26082E8AF6245A022710FD35 /* Pods-Runner.debug.xcconfig */, + 83FDFB5C26D8493094669E02 /* Pods-Runner.release.xcconfig */, + 7CDD9C80886B67FDD2457CED /* Pods-Runner.profile.xcconfig */, + A8FCCC20319F4779C587CA5D /* Pods-RunnerTests.debug.xcconfig */, + AA3048732925F51D849F53E6 /* Pods-RunnerTests.release.xcconfig */, + 252C44AFA3F33C974291B8BE /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -127,8 +127,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - 4856352D3A596BC21C6FA148 /* Pods */, - A98232C95B2001FA5C3391CE /* Frameworks */, + 8F8C07E618915BEA66718CB1 /* Pods */, + AAE566CDF0EA1C0DFD383D83 /* Frameworks */, ); sourceTree = ""; }; @@ -156,11 +156,11 @@ path = Runner; sourceTree = ""; }; - A98232C95B2001FA5C3391CE /* Frameworks */ = { + AAE566CDF0EA1C0DFD383D83 /* Frameworks */ = { isa = PBXGroup; children = ( - 08806D17B22EF3C21A38F092 /* Pods_Runner.framework */, - B03D772360D1034B2572877B /* Pods_RunnerTests.framework */, + 246CD2A9C634D9DCB84C492B /* Pods_Runner.framework */, + 7B9B3B203B051AA61D71708D /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 2452CEDE6CA3AEBBDEF8AAD3 /* [CP] Check Pods Manifest.lock */, + 3A1AE33A8C0CA1C146B254EA /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - DE0A2B7074F6DCE8A0B0EA9A /* Frameworks */, + 4B97B91A1F54FFB579CD55FC /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 2D8C42768D2C771C76365DA6 /* [CP] Check Pods Manifest.lock */, + CE5503F89FD8B6227DC56BBE /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - C6CDBA5DFB75AE6FE8042136 /* [CP] Embed Pods Frameworks */, + ECE47E0D65094DD667AA5D03 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -270,7 +270,7 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 2452CEDE6CA3AEBBDEF8AAD3 /* [CP] Check Pods Manifest.lock */ = { + 3A1AE33A8C0CA1C146B254EA /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -292,60 +292,60 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 2D8C42768D2C771C76365DA6 /* [CP] Check Pods Manifest.lock */ = { + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); + name = "Thin Binary"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputPaths = ( - "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); - name = "Thin Binary"; + name = "Run Script"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { + CE5503F89FD8B6227DC56BBE /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "Run Script"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - C6CDBA5DFB75AE6FE8042136 /* [CP] Embed Pods Frameworks */ = { + ECE47E0D65094DD667AA5D03 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 86E3CE0E2E977F39CDC4B358 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = A8FCCC20319F4779C587CA5D /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = D44D616AE522B55E38A366B2 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = AA3048732925F51D849F53E6 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 776B7AEAFA1C47BA10114ED8 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 252C44AFA3F33C974291B8BE /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/ffigen_codelab/step_07/example/linux/CMakeLists.txt b/ffigen_codelab/step_07/example/linux/CMakeLists.txt index e6a7756343..0225fd0ac0 100644 --- a/ffigen_codelab/step_07/example/linux/CMakeLists.txt +++ b/ffigen_codelab/step_07/example/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/ffigen_codelab/step_07/example/linux/runner/CMakeLists.txt b/ffigen_codelab/step_07/example/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/ffigen_codelab/step_07/example/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/ffigen_codelab/step_07/example/linux/main.cc b/ffigen_codelab/step_07/example/linux/runner/main.cc similarity index 100% rename from ffigen_codelab/step_07/example/linux/main.cc rename to ffigen_codelab/step_07/example/linux/runner/main.cc diff --git a/ffigen_codelab/step_07/example/linux/my_application.cc b/ffigen_codelab/step_07/example/linux/runner/my_application.cc similarity index 93% rename from ffigen_codelab/step_07/example/linux/my_application.cc rename to ffigen_codelab/step_07/example/linux/runner/my_application.cc index dda095336c..6233c3a531 100644 --- a/ffigen_codelab/step_07/example/linux/my_application.cc +++ b/ffigen_codelab/step_07/example/linux/runner/my_application.cc @@ -117,6 +117,12 @@ static void my_application_class_init(MyApplicationClass* klass) { static void my_application_init(MyApplication* self) {} MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + return MY_APPLICATION(g_object_new(my_application_get_type(), "application-id", APPLICATION_ID, "flags", G_APPLICATION_NON_UNIQUE, diff --git a/ffigen_codelab/step_07/example/linux/my_application.h b/ffigen_codelab/step_07/example/linux/runner/my_application.h similarity index 100% rename from ffigen_codelab/step_07/example/linux/my_application.h rename to ffigen_codelab/step_07/example/linux/runner/my_application.h diff --git a/ffigen_codelab/step_07/example/macos/Runner.xcodeproj/project.pbxproj b/ffigen_codelab/step_07/example/macos/Runner.xcodeproj/project.pbxproj index c46af4bc41..5d066c56cd 100644 --- a/ffigen_codelab/step_07/example/macos/Runner.xcodeproj/project.pbxproj +++ b/ffigen_codelab/step_07/example/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ - 22A321ADA93F6BE57C8DB371 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6308EF3D68EB994287CCB311 /* Pods_RunnerTests.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 6D34367F00C866FA2CD0434B /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 19B85926E300672C928F485E /* Pods_Runner.framework */; }; + 34C11F32AC13E549EAC19C9A /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9111221EFB74204A99FADA45 /* Pods_Runner.framework */; }; + F87322B26DD8D853E9CB39B2 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3F631A83DC0FBC6522DF7C62 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,7 +62,6 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 19B85926E300672C928F485E /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -79,15 +78,16 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 575427019D162B19FF420B51 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 6308EF3D68EB994287CCB311 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 3F631A83DC0FBC6522DF7C62 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 71BD6EA5154E76B5396EE90D /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 74406D118E64F0271B406A7F /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 7CA36ECAA2AEF85F59D3357E /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 86D133FFF185D5443960DFD4 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - 8EAA887323D967C5E5107C4C /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - 8F41DA1F04C4782597E80A53 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 830A7422CDCD433EA41C308D /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 9111221EFB74204A99FADA45 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - A55B4566B2B9F1D3890CE08A /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + AC73A378F377F50F98A1B559 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + BD2810150294EE7B0861D857 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + C913AD53FEBD6CCC01058575 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 22A321ADA93F6BE57C8DB371 /* Pods_RunnerTests.framework in Frameworks */, + F87322B26DD8D853E9CB39B2 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,27 +103,13 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 6D34367F00C866FA2CD0434B /* Pods_Runner.framework in Frameworks */, + 34C11F32AC13E549EAC19C9A /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 16D64D86743EC00FC59F2CDD /* Pods */ = { - isa = PBXGroup; - children = ( - A55B4566B2B9F1D3890CE08A /* Pods-Runner.debug.xcconfig */, - 575427019D162B19FF420B51 /* Pods-Runner.release.xcconfig */, - 8EAA887323D967C5E5107C4C /* Pods-Runner.profile.xcconfig */, - 7CA36ECAA2AEF85F59D3357E /* Pods-RunnerTests.debug.xcconfig */, - 86D133FFF185D5443960DFD4 /* Pods-RunnerTests.release.xcconfig */, - 8F41DA1F04C4782597E80A53 /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; 331C80D6294CF71000263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -151,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 16D64D86743EC00FC59F2CDD /* Pods */, + EDC5819FB59C73891ABAD209 /* Pods */, ); sourceTree = ""; }; @@ -202,12 +188,26 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - 19B85926E300672C928F485E /* Pods_Runner.framework */, - 6308EF3D68EB994287CCB311 /* Pods_RunnerTests.framework */, + 9111221EFB74204A99FADA45 /* Pods_Runner.framework */, + 3F631A83DC0FBC6522DF7C62 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; }; + EDC5819FB59C73891ABAD209 /* Pods */ = { + isa = PBXGroup; + children = ( + C913AD53FEBD6CCC01058575 /* Pods-Runner.debug.xcconfig */, + 74406D118E64F0271B406A7F /* Pods-Runner.release.xcconfig */, + AC73A378F377F50F98A1B559 /* Pods-Runner.profile.xcconfig */, + 71BD6EA5154E76B5396EE90D /* Pods-RunnerTests.debug.xcconfig */, + BD2810150294EE7B0861D857 /* Pods-RunnerTests.release.xcconfig */, + 830A7422CDCD433EA41C308D /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 3FCD6F6A40D1F341883C2B52 /* [CP] Check Pods Manifest.lock */, + 84A3A37EB6F5F6C593457D11 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 573CACD78CD2526BB9087C8C /* [CP] Check Pods Manifest.lock */, + D02496A41717E29108D3EE35 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - A0D71596DFBA1F193DFBD8AD /* [CP] Embed Pods Frameworks */, + 1654127F8324C89D6EBD6228 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,6 +323,23 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ + 1654127F8324C89D6EBD6228 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -361,7 +378,7 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 3FCD6F6A40D1F341883C2B52 /* [CP] Check Pods Manifest.lock */ = { + 84A3A37EB6F5F6C593457D11 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -383,7 +400,7 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 573CACD78CD2526BB9087C8C /* [CP] Check Pods Manifest.lock */ = { + D02496A41717E29108D3EE35 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -405,23 +422,6 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - A0D71596DFBA1F193DFBD8AD /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 7CA36ECAA2AEF85F59D3357E /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 71BD6EA5154E76B5396EE90D /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 86D133FFF185D5443960DFD4 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = BD2810150294EE7B0861D857 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 8F41DA1F04C4782597E80A53 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 830A7422CDCD433EA41C308D /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/ffigen_codelab/step_07/example/pubspec.yaml b/ffigen_codelab/step_07/example/pubspec.yaml index 36eedf32d0..4ec65a8e6b 100644 --- a/ffigen_codelab/step_07/example/pubspec.yaml +++ b/ffigen_codelab/step_07/example/pubspec.yaml @@ -42,7 +42,7 @@ dependencies: # The following adds the Cupertino Icons font to your application. # Use with the CupertinoIcons class for iOS style icons. cupertino_icons: ^1.0.8 - flutter_riverpod: ^2.5.3 + flutter_riverpod: ^2.6.1 freezed_annotation: ^2.4.4 google_fonts: ^6.2.1 diff --git a/ffigen_codelab/step_07/macos/ffigen_app.podspec b/ffigen_codelab/step_07/macos/ffigen_app.podspec index b03ff8d4d8..507dd0a9d3 100644 --- a/ffigen_codelab/step_07/macos/ffigen_app.podspec +++ b/ffigen_codelab/step_07/macos/ffigen_app.podspec @@ -19,6 +19,13 @@ A new Flutter FFI plugin project. # `../src/*` so that the C sources can be shared among all target platforms. s.source = { :path => '.' } s.source_files = 'Classes/**/*' + + # If your plugin requires a privacy manifest, for example if it collects user + # data, update the PrivacyInfo.xcprivacy file to describe your plugin's + # privacy impact, and then uncomment this line. For more information, + # see https://developer.apple.com/documentation/bundleresources/privacy_manifest_files + # s.resource_bundles = {'ffigen_app_privacy' => ['Resources/PrivacyInfo.xcprivacy']} + s.dependency 'FlutterMacOS' s.platform = :osx, '10.11' diff --git a/ffigen_codelab/step_07/pubspec.yaml b/ffigen_codelab/step_07/pubspec.yaml index 70c23336f1..9f17f9b402 100644 --- a/ffigen_codelab/step_07/pubspec.yaml +++ b/ffigen_codelab/step_07/pubspec.yaml @@ -15,7 +15,7 @@ dependencies: plugin_platform_interface: ^2.0.2 dev_dependencies: - ffigen: ^14.0.1 + ffigen: ^15.0.0 flutter_test: sdk: flutter flutter_lints: ^5.0.0 diff --git a/ffigen_codelab/step_07/src/CMakeLists.txt b/ffigen_codelab/step_07/src/CMakeLists.txt index db7f672be6..176008e445 100644 --- a/ffigen_codelab/step_07/src/CMakeLists.txt +++ b/ffigen_codelab/step_07/src/CMakeLists.txt @@ -22,3 +22,8 @@ set_target_properties(ffigen_app PROPERTIES endif (WIN32) target_compile_definitions(ffigen_app PUBLIC DART_SHARED_LIB) + +if (ANDROID) + # Support Android 15 16k page size + target_link_options(ffigen_app PRIVATE "-Wl,-z,max-page-size=16384") +endif() From b549277ed4b379989e77eced23e3b2eac39a41d2 Mon Sep 17 00:00:00 2001 From: Brett Morgan Date: Wed, 13 Nov 2024 09:24:16 +1100 Subject: [PATCH 042/108] Update `firebase-emulator-suite` --- firebase-emulator-suite/complete/pubspec.yaml | 9 ++++----- firebase-emulator-suite/complete/web/index.html | 2 +- firebase-emulator-suite/start/pubspec.yaml | 3 +-- firebase-emulator-suite/start/web/index.html | 2 +- 4 files changed, 7 insertions(+), 9 deletions(-) diff --git a/firebase-emulator-suite/complete/pubspec.yaml b/firebase-emulator-suite/complete/pubspec.yaml index 48d578a778..7e9f688dae 100644 --- a/firebase-emulator-suite/complete/pubspec.yaml +++ b/firebase-emulator-suite/complete/pubspec.yaml @@ -31,14 +31,13 @@ dependencies: flutter: sdk: flutter - # The following adds the Cupertino Icons font to your application. # Use with the CupertinoIcons class for iOS style icons. cupertino_icons: ^1.0.8 - go_router: ^14.3.0 - firebase_core: ^3.6.0 - firebase_auth: ^5.3.1 - cloud_firestore: ^5.4.4 + go_router: ^14.5.0 + firebase_core: ^3.7.0 + firebase_auth: ^5.3.2 + cloud_firestore: ^5.4.5 dev_dependencies: flutter_test: diff --git a/firebase-emulator-suite/complete/web/index.html b/firebase-emulator-suite/complete/web/index.html index 628701a38a..4a9befb647 100644 --- a/firebase-emulator-suite/complete/web/index.html +++ b/firebase-emulator-suite/complete/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/firebase-emulator-suite/start/pubspec.yaml b/firebase-emulator-suite/start/pubspec.yaml index d63d2daa10..1662cc672a 100644 --- a/firebase-emulator-suite/start/pubspec.yaml +++ b/firebase-emulator-suite/start/pubspec.yaml @@ -31,11 +31,10 @@ dependencies: flutter: sdk: flutter - # The following adds the Cupertino Icons font to your application. # Use with the CupertinoIcons class for iOS style icons. cupertino_icons: ^1.0.8 - go_router: ^14.3.0 + go_router: ^14.5.0 dev_dependencies: flutter_test: diff --git a/firebase-emulator-suite/start/web/index.html b/firebase-emulator-suite/start/web/index.html index 628701a38a..4a9befb647 100644 --- a/firebase-emulator-suite/start/web/index.html +++ b/firebase-emulator-suite/start/web/index.html @@ -21,7 +21,7 @@ - + From d07e8f638472b6523521c136fa229daa7d6e6b8e Mon Sep 17 00:00:00 2001 From: Brett Morgan Date: Wed, 13 Nov 2024 10:48:45 +1100 Subject: [PATCH 043/108] Update `firebase-get-to-know-flutter` --- .../codelab_rebuild.yaml | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 126 +++++++++--------- .../macos/Runner.xcodeproj/project.pbxproj | 104 +++++++-------- .../step_02/pubspec.yaml | 3 +- .../step_02/web/index.html | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 126 +++++++++--------- .../macos/Runner.xcodeproj/project.pbxproj | 104 +++++++-------- .../step_04/pubspec.yaml | 9 +- .../step_04/web/index.html | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 126 +++++++++--------- .../macos/Runner.xcodeproj/project.pbxproj | 104 +++++++-------- .../step_05/pubspec.yaml | 9 +- .../step_05/web/index.html | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 126 +++++++++--------- .../macos/Runner.xcodeproj/project.pbxproj | 104 +++++++-------- .../step_06/pubspec.yaml | 9 +- .../step_06/web/index.html | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 126 +++++++++--------- .../macos/Runner.xcodeproj/project.pbxproj | 104 +++++++-------- .../step_07/pubspec.yaml | 9 +- .../step_07/web/index.html | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 126 +++++++++--------- .../macos/Runner.xcodeproj/project.pbxproj | 104 +++++++-------- .../step_09/pubspec.yaml | 9 +- .../step_09/web/index.html | 2 +- 25 files changed, 718 insertions(+), 724 deletions(-) diff --git a/firebase-get-to-know-flutter/codelab_rebuild.yaml b/firebase-get-to-know-flutter/codelab_rebuild.yaml index 39f8e214a2..251b26158e 100644 --- a/firebase-get-to-know-flutter/codelab_rebuild.yaml +++ b/firebase-get-to-know-flutter/codelab_rebuild.yaml @@ -32,7 +32,7 @@ steps: # The following line prevents the package from being accidentally published to # pub.dev using `flutter pub publish`. This is preferred for private packages. publish_to: 'none' # Remove this line if you wish to publish to pub.dev - @@ -59,6 +60,8 @@ flutter: + @@ -58,6 +59,8 @@ flutter: # included with your application, so that you can use the icons in # the material Icons class. uses-material-design: true diff --git a/firebase-get-to-know-flutter/step_02/ios/Runner.xcodeproj/project.pbxproj b/firebase-get-to-know-flutter/step_02/ios/Runner.xcodeproj/project.pbxproj index f55a47cb43..b36a0695b4 100644 --- a/firebase-get-to-know-flutter/step_02/ios/Runner.xcodeproj/project.pbxproj +++ b/firebase-get-to-know-flutter/step_02/ios/Runner.xcodeproj/project.pbxproj @@ -11,11 +11,11 @@ 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; - 94424699B3A14C2982732B02 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6B9BB003A54B638618107ADC /* Pods_Runner.framework */; }; + 7A9C31C280F37822AC10EFC6 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A775D781AAFB6ECC974BD650 /* Pods_RunnerTests.framework */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - EB6293D774039F2596010319 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4DE10BC9E8056DBF9301BFB3 /* Pods_RunnerTests.framework */; }; + 9BC295015BFD0F95DA7CDEC1 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D072F4A6C2FEFE989564BCB0 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -47,15 +47,14 @@ 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 44A86022FD4B88620A074AD6 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - 458E75D9DD87189355FF674B /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 4DE10BC9E8056DBF9301BFB3 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 6B9BB003A54B638618107ADC /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 5358ABFFB547340BADE91E57 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 55C5C4278824A4EDF6B82BEC /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 5CD039B3AB9EC2E131E6C8F5 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 6DED744C3D22EF43057EEE48 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 775B7D9A711AD243E7CC900F /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 91F97278880AEE3F91F1B85F /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - 95BD23190F06780AFA8F708F /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -63,24 +62,25 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - C106B318B7E4C757686D82A4 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - C4C4C0A87AC28ABBD674D966 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 9A20A943144662A86F585ABF /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + A775D781AAFB6ECC974BD650 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D072F4A6C2FEFE989564BCB0 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 97C146EB1CF9000F007C117D /* Frameworks */ = { + 7DD45768AC8C7D43ABCA9DE3 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 94424699B3A14C2982732B02 /* Pods_Runner.framework in Frameworks */, + 7A9C31C280F37822AC10EFC6 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - C59F8CC1D73F354D282AD010 /* Frameworks */ = { + 97C146EB1CF9000F007C117D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - EB6293D774039F2596010319 /* Pods_RunnerTests.framework in Frameworks */, + 9BC295015BFD0F95DA7CDEC1 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -95,29 +95,15 @@ path = RunnerTests; sourceTree = ""; }; - 61F983CEA43E1634EC9BD97C /* Frameworks */ = { + 561E40DE921F40D44603A357 /* Frameworks */ = { isa = PBXGroup; children = ( - 6B9BB003A54B638618107ADC /* Pods_Runner.framework */, - 4DE10BC9E8056DBF9301BFB3 /* Pods_RunnerTests.framework */, + D072F4A6C2FEFE989564BCB0 /* Pods_Runner.framework */, + A775D781AAFB6ECC974BD650 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; }; - 7D07664DF19CED6C7E7482CF /* Pods */ = { - isa = PBXGroup; - children = ( - C4C4C0A87AC28ABBD674D966 /* Pods-Runner.debug.xcconfig */, - 458E75D9DD87189355FF674B /* Pods-Runner.release.xcconfig */, - 44A86022FD4B88620A074AD6 /* Pods-Runner.profile.xcconfig */, - 95BD23190F06780AFA8F708F /* Pods-RunnerTests.debug.xcconfig */, - 91F97278880AEE3F91F1B85F /* Pods-RunnerTests.release.xcconfig */, - C106B318B7E4C757686D82A4 /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( @@ -136,8 +122,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - 7D07664DF19CED6C7E7482CF /* Pods */, - 61F983CEA43E1634EC9BD97C /* Frameworks */, + B7525EDD33924E7F2C905A28 /* Pods */, + 561E40DE921F40D44603A357 /* Frameworks */, ); sourceTree = ""; }; @@ -165,6 +151,20 @@ path = Runner; sourceTree = ""; }; + B7525EDD33924E7F2C905A28 /* Pods */ = { + isa = PBXGroup; + children = ( + 6DED744C3D22EF43057EEE48 /* Pods-Runner.debug.xcconfig */, + 9A20A943144662A86F585ABF /* Pods-Runner.release.xcconfig */, + 5358ABFFB547340BADE91E57 /* Pods-Runner.profile.xcconfig */, + 775B7D9A711AD243E7CC900F /* Pods-RunnerTests.debug.xcconfig */, + 5CD039B3AB9EC2E131E6C8F5 /* Pods-RunnerTests.release.xcconfig */, + 55C5C4278824A4EDF6B82BEC /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 280BA5287C63B597F9749D8E /* [CP] Check Pods Manifest.lock */, + 24615447E6AA9E5E76B95A56 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - C59F8CC1D73F354D282AD010 /* Frameworks */, + 7DD45768AC8C7D43ABCA9DE3 /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 13C8762D11FCF7A1D54D3CC7 /* [CP] Check Pods Manifest.lock */, + FE3AC9F7FF7CA03E86CBC134 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 4D7CADDC4DF6943F118206BD /* [CP] Embed Pods Frameworks */, + 04B52FCD7D9AF7EB0D333921 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -270,29 +270,24 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 13C8762D11FCF7A1D54D3CC7 /* [CP] Check Pods Manifest.lock */ = { + 04B52FCD7D9AF7EB0D333921 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - 280BA5287C63B597F9749D8E /* [CP] Check Pods Manifest.lock */ = { + 24615447E6AA9E5E76B95A56 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -330,37 +325,42 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 4D7CADDC4DF6943F118206BD /* [CP] Embed Pods Frameworks */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + inputPaths = ( ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + name = "Run Script"; + outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { + FE3AC9F7FF7CA03E86CBC134 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "Run Script"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -488,7 +488,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 95BD23190F06780AFA8F708F /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 775B7D9A711AD243E7CC900F /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -507,7 +507,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 91F97278880AEE3F91F1B85F /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 5CD039B3AB9EC2E131E6C8F5 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -524,7 +524,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C106B318B7E4C757686D82A4 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 55C5C4278824A4EDF6B82BEC /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/firebase-get-to-know-flutter/step_02/macos/Runner.xcodeproj/project.pbxproj b/firebase-get-to-know-flutter/step_02/macos/Runner.xcodeproj/project.pbxproj index 61d0d1b080..d85fcc90de 100644 --- a/firebase-get-to-know-flutter/step_02/macos/Runner.xcodeproj/project.pbxproj +++ b/firebase-get-to-know-flutter/step_02/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ - 128B8F8A6B5C6CF14D6E0342 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4D5B5999B70200B3809C6D01 /* Pods_RunnerTests.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 4A2FD2A9AD946C2E174286CE /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 90F1F021E64641C89665DD10 /* Pods_Runner.framework */; }; + 6773A496AD7A5686E2DD29BD /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5AD57AEB256EF9C78131F228 /* Pods_RunnerTests.framework */; }; + 8D4861BD95308793990CB833 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8F12630335546B1C0688E5A2 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,7 +62,7 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 1C25B3513592ABFAAB2831E2 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 0ED29D5295E06CA4849433BA /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -79,15 +79,15 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 4D5B5999B70200B3809C6D01 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 563FAA1D5896D8E471921C79 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 4DA808B3C32EB1D9F3FC18B3 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 5AD57AEB256EF9C78131F228 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 90F1F021E64641C89665DD10 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 95D0AE963ADC3E494A4D37F0 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 8F12630335546B1C0688E5A2 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 921768E3C0134A61232C251B /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - A2FFC262C51DDC226C58343C /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - BEA42C2E42664EC2D5EA8594 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - F22AA56F8A11105EB865C7C0 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + A109CB21F52E718A03B81B57 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + B2CEB86711238F049F19BEB9 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + E072F90EF015017AAEF964C6 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 128B8F8A6B5C6CF14D6E0342 /* Pods_RunnerTests.framework in Frameworks */, + 6773A496AD7A5686E2DD29BD /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,13 +103,27 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 4A2FD2A9AD946C2E174286CE /* Pods_Runner.framework in Frameworks */, + 8D4861BD95308793990CB833 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 06338C9EC6CCDC584FFFB260 /* Pods */ = { + isa = PBXGroup; + children = ( + 921768E3C0134A61232C251B /* Pods-Runner.debug.xcconfig */, + A109CB21F52E718A03B81B57 /* Pods-Runner.release.xcconfig */, + E072F90EF015017AAEF964C6 /* Pods-Runner.profile.xcconfig */, + 4DA808B3C32EB1D9F3FC18B3 /* Pods-RunnerTests.debug.xcconfig */, + 0ED29D5295E06CA4849433BA /* Pods-RunnerTests.release.xcconfig */, + B2CEB86711238F049F19BEB9 /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; 331C80D6294CF71000263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -137,7 +151,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - E51BE6CEB1BDEEEF7114DDF8 /* Pods */, + 06338C9EC6CCDC584FFFB260 /* Pods */, ); sourceTree = ""; }; @@ -188,26 +202,12 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - 90F1F021E64641C89665DD10 /* Pods_Runner.framework */, - 4D5B5999B70200B3809C6D01 /* Pods_RunnerTests.framework */, + 8F12630335546B1C0688E5A2 /* Pods_Runner.framework */, + 5AD57AEB256EF9C78131F228 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; }; - E51BE6CEB1BDEEEF7114DDF8 /* Pods */ = { - isa = PBXGroup; - children = ( - 563FAA1D5896D8E471921C79 /* Pods-Runner.debug.xcconfig */, - A2FFC262C51DDC226C58343C /* Pods-Runner.release.xcconfig */, - 1C25B3513592ABFAAB2831E2 /* Pods-Runner.profile.xcconfig */, - BEA42C2E42664EC2D5EA8594 /* Pods-RunnerTests.debug.xcconfig */, - F22AA56F8A11105EB865C7C0 /* Pods-RunnerTests.release.xcconfig */, - 95D0AE963ADC3E494A4D37F0 /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 6C13E7904DC3004B41332335 /* [CP] Check Pods Manifest.lock */, + 028AD4DD9A19B93A662AECAF /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 0F9D9D66708D755567BE1F99 /* [CP] Check Pods Manifest.lock */, + F1E17869CBA61BDB552EF98E /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - D82041256BE3E1863C6F9760 /* [CP] Embed Pods Frameworks */, + 3B746273FB6BFBEE317579ED /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,7 +323,7 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 0F9D9D66708D755567BE1F99 /* [CP] Check Pods Manifest.lock */ = { + 028AD4DD9A19B93A662AECAF /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -338,7 +338,7 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -383,43 +383,43 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 6C13E7904DC3004B41332335 /* [CP] Check Pods Manifest.lock */ = { + 3B746273FB6BFBEE317579ED /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - D82041256BE3E1863C6F9760 /* [CP] Embed Pods Frameworks */ = { + F1E17869CBA61BDB552EF98E /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = BEA42C2E42664EC2D5EA8594 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 4DA808B3C32EB1D9F3FC18B3 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -489,7 +489,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = F22AA56F8A11105EB865C7C0 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 0ED29D5295E06CA4849433BA /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -505,7 +505,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 95D0AE963ADC3E494A4D37F0 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = B2CEB86711238F049F19BEB9 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/firebase-get-to-know-flutter/step_02/pubspec.yaml b/firebase-get-to-know-flutter/step_02/pubspec.yaml index 9fbdc07dbe..7f8e743b24 100644 --- a/firebase-get-to-know-flutter/step_02/pubspec.yaml +++ b/firebase-get-to-know-flutter/step_02/pubspec.yaml @@ -32,12 +32,11 @@ dependencies: flutter: sdk: flutter - # The following adds the Cupertino Icons font to your application. # Use with the CupertinoIcons class for iOS style icons. cupertino_icons: ^1.0.8 google_fonts: ^6.2.1 - go_router: ^14.3.0 + go_router: ^14.5.0 dev_dependencies: flutter_test: diff --git a/firebase-get-to-know-flutter/step_02/web/index.html b/firebase-get-to-know-flutter/step_02/web/index.html index 92f64576d8..ec3bcd0112 100644 --- a/firebase-get-to-know-flutter/step_02/web/index.html +++ b/firebase-get-to-know-flutter/step_02/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/firebase-get-to-know-flutter/step_04/ios/Runner.xcodeproj/project.pbxproj b/firebase-get-to-know-flutter/step_04/ios/Runner.xcodeproj/project.pbxproj index f55a47cb43..b36a0695b4 100644 --- a/firebase-get-to-know-flutter/step_04/ios/Runner.xcodeproj/project.pbxproj +++ b/firebase-get-to-know-flutter/step_04/ios/Runner.xcodeproj/project.pbxproj @@ -11,11 +11,11 @@ 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; - 94424699B3A14C2982732B02 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6B9BB003A54B638618107ADC /* Pods_Runner.framework */; }; + 7A9C31C280F37822AC10EFC6 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A775D781AAFB6ECC974BD650 /* Pods_RunnerTests.framework */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - EB6293D774039F2596010319 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4DE10BC9E8056DBF9301BFB3 /* Pods_RunnerTests.framework */; }; + 9BC295015BFD0F95DA7CDEC1 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D072F4A6C2FEFE989564BCB0 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -47,15 +47,14 @@ 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 44A86022FD4B88620A074AD6 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - 458E75D9DD87189355FF674B /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 4DE10BC9E8056DBF9301BFB3 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 6B9BB003A54B638618107ADC /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 5358ABFFB547340BADE91E57 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 55C5C4278824A4EDF6B82BEC /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 5CD039B3AB9EC2E131E6C8F5 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 6DED744C3D22EF43057EEE48 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 775B7D9A711AD243E7CC900F /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 91F97278880AEE3F91F1B85F /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - 95BD23190F06780AFA8F708F /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -63,24 +62,25 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - C106B318B7E4C757686D82A4 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - C4C4C0A87AC28ABBD674D966 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 9A20A943144662A86F585ABF /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + A775D781AAFB6ECC974BD650 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D072F4A6C2FEFE989564BCB0 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 97C146EB1CF9000F007C117D /* Frameworks */ = { + 7DD45768AC8C7D43ABCA9DE3 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 94424699B3A14C2982732B02 /* Pods_Runner.framework in Frameworks */, + 7A9C31C280F37822AC10EFC6 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - C59F8CC1D73F354D282AD010 /* Frameworks */ = { + 97C146EB1CF9000F007C117D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - EB6293D774039F2596010319 /* Pods_RunnerTests.framework in Frameworks */, + 9BC295015BFD0F95DA7CDEC1 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -95,29 +95,15 @@ path = RunnerTests; sourceTree = ""; }; - 61F983CEA43E1634EC9BD97C /* Frameworks */ = { + 561E40DE921F40D44603A357 /* Frameworks */ = { isa = PBXGroup; children = ( - 6B9BB003A54B638618107ADC /* Pods_Runner.framework */, - 4DE10BC9E8056DBF9301BFB3 /* Pods_RunnerTests.framework */, + D072F4A6C2FEFE989564BCB0 /* Pods_Runner.framework */, + A775D781AAFB6ECC974BD650 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; }; - 7D07664DF19CED6C7E7482CF /* Pods */ = { - isa = PBXGroup; - children = ( - C4C4C0A87AC28ABBD674D966 /* Pods-Runner.debug.xcconfig */, - 458E75D9DD87189355FF674B /* Pods-Runner.release.xcconfig */, - 44A86022FD4B88620A074AD6 /* Pods-Runner.profile.xcconfig */, - 95BD23190F06780AFA8F708F /* Pods-RunnerTests.debug.xcconfig */, - 91F97278880AEE3F91F1B85F /* Pods-RunnerTests.release.xcconfig */, - C106B318B7E4C757686D82A4 /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( @@ -136,8 +122,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - 7D07664DF19CED6C7E7482CF /* Pods */, - 61F983CEA43E1634EC9BD97C /* Frameworks */, + B7525EDD33924E7F2C905A28 /* Pods */, + 561E40DE921F40D44603A357 /* Frameworks */, ); sourceTree = ""; }; @@ -165,6 +151,20 @@ path = Runner; sourceTree = ""; }; + B7525EDD33924E7F2C905A28 /* Pods */ = { + isa = PBXGroup; + children = ( + 6DED744C3D22EF43057EEE48 /* Pods-Runner.debug.xcconfig */, + 9A20A943144662A86F585ABF /* Pods-Runner.release.xcconfig */, + 5358ABFFB547340BADE91E57 /* Pods-Runner.profile.xcconfig */, + 775B7D9A711AD243E7CC900F /* Pods-RunnerTests.debug.xcconfig */, + 5CD039B3AB9EC2E131E6C8F5 /* Pods-RunnerTests.release.xcconfig */, + 55C5C4278824A4EDF6B82BEC /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 280BA5287C63B597F9749D8E /* [CP] Check Pods Manifest.lock */, + 24615447E6AA9E5E76B95A56 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - C59F8CC1D73F354D282AD010 /* Frameworks */, + 7DD45768AC8C7D43ABCA9DE3 /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 13C8762D11FCF7A1D54D3CC7 /* [CP] Check Pods Manifest.lock */, + FE3AC9F7FF7CA03E86CBC134 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 4D7CADDC4DF6943F118206BD /* [CP] Embed Pods Frameworks */, + 04B52FCD7D9AF7EB0D333921 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -270,29 +270,24 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 13C8762D11FCF7A1D54D3CC7 /* [CP] Check Pods Manifest.lock */ = { + 04B52FCD7D9AF7EB0D333921 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - 280BA5287C63B597F9749D8E /* [CP] Check Pods Manifest.lock */ = { + 24615447E6AA9E5E76B95A56 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -330,37 +325,42 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 4D7CADDC4DF6943F118206BD /* [CP] Embed Pods Frameworks */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + inputPaths = ( ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + name = "Run Script"; + outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { + FE3AC9F7FF7CA03E86CBC134 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "Run Script"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -488,7 +488,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 95BD23190F06780AFA8F708F /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 775B7D9A711AD243E7CC900F /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -507,7 +507,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 91F97278880AEE3F91F1B85F /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 5CD039B3AB9EC2E131E6C8F5 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -524,7 +524,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C106B318B7E4C757686D82A4 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 55C5C4278824A4EDF6B82BEC /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/firebase-get-to-know-flutter/step_04/macos/Runner.xcodeproj/project.pbxproj b/firebase-get-to-know-flutter/step_04/macos/Runner.xcodeproj/project.pbxproj index 61d0d1b080..d85fcc90de 100644 --- a/firebase-get-to-know-flutter/step_04/macos/Runner.xcodeproj/project.pbxproj +++ b/firebase-get-to-know-flutter/step_04/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ - 128B8F8A6B5C6CF14D6E0342 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4D5B5999B70200B3809C6D01 /* Pods_RunnerTests.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 4A2FD2A9AD946C2E174286CE /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 90F1F021E64641C89665DD10 /* Pods_Runner.framework */; }; + 6773A496AD7A5686E2DD29BD /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5AD57AEB256EF9C78131F228 /* Pods_RunnerTests.framework */; }; + 8D4861BD95308793990CB833 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8F12630335546B1C0688E5A2 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,7 +62,7 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 1C25B3513592ABFAAB2831E2 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 0ED29D5295E06CA4849433BA /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -79,15 +79,15 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 4D5B5999B70200B3809C6D01 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 563FAA1D5896D8E471921C79 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 4DA808B3C32EB1D9F3FC18B3 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 5AD57AEB256EF9C78131F228 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 90F1F021E64641C89665DD10 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 95D0AE963ADC3E494A4D37F0 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 8F12630335546B1C0688E5A2 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 921768E3C0134A61232C251B /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - A2FFC262C51DDC226C58343C /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - BEA42C2E42664EC2D5EA8594 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - F22AA56F8A11105EB865C7C0 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + A109CB21F52E718A03B81B57 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + B2CEB86711238F049F19BEB9 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + E072F90EF015017AAEF964C6 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 128B8F8A6B5C6CF14D6E0342 /* Pods_RunnerTests.framework in Frameworks */, + 6773A496AD7A5686E2DD29BD /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,13 +103,27 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 4A2FD2A9AD946C2E174286CE /* Pods_Runner.framework in Frameworks */, + 8D4861BD95308793990CB833 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 06338C9EC6CCDC584FFFB260 /* Pods */ = { + isa = PBXGroup; + children = ( + 921768E3C0134A61232C251B /* Pods-Runner.debug.xcconfig */, + A109CB21F52E718A03B81B57 /* Pods-Runner.release.xcconfig */, + E072F90EF015017AAEF964C6 /* Pods-Runner.profile.xcconfig */, + 4DA808B3C32EB1D9F3FC18B3 /* Pods-RunnerTests.debug.xcconfig */, + 0ED29D5295E06CA4849433BA /* Pods-RunnerTests.release.xcconfig */, + B2CEB86711238F049F19BEB9 /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; 331C80D6294CF71000263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -137,7 +151,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - E51BE6CEB1BDEEEF7114DDF8 /* Pods */, + 06338C9EC6CCDC584FFFB260 /* Pods */, ); sourceTree = ""; }; @@ -188,26 +202,12 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - 90F1F021E64641C89665DD10 /* Pods_Runner.framework */, - 4D5B5999B70200B3809C6D01 /* Pods_RunnerTests.framework */, + 8F12630335546B1C0688E5A2 /* Pods_Runner.framework */, + 5AD57AEB256EF9C78131F228 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; }; - E51BE6CEB1BDEEEF7114DDF8 /* Pods */ = { - isa = PBXGroup; - children = ( - 563FAA1D5896D8E471921C79 /* Pods-Runner.debug.xcconfig */, - A2FFC262C51DDC226C58343C /* Pods-Runner.release.xcconfig */, - 1C25B3513592ABFAAB2831E2 /* Pods-Runner.profile.xcconfig */, - BEA42C2E42664EC2D5EA8594 /* Pods-RunnerTests.debug.xcconfig */, - F22AA56F8A11105EB865C7C0 /* Pods-RunnerTests.release.xcconfig */, - 95D0AE963ADC3E494A4D37F0 /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 6C13E7904DC3004B41332335 /* [CP] Check Pods Manifest.lock */, + 028AD4DD9A19B93A662AECAF /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 0F9D9D66708D755567BE1F99 /* [CP] Check Pods Manifest.lock */, + F1E17869CBA61BDB552EF98E /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - D82041256BE3E1863C6F9760 /* [CP] Embed Pods Frameworks */, + 3B746273FB6BFBEE317579ED /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,7 +323,7 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 0F9D9D66708D755567BE1F99 /* [CP] Check Pods Manifest.lock */ = { + 028AD4DD9A19B93A662AECAF /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -338,7 +338,7 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -383,43 +383,43 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 6C13E7904DC3004B41332335 /* [CP] Check Pods Manifest.lock */ = { + 3B746273FB6BFBEE317579ED /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - D82041256BE3E1863C6F9760 /* [CP] Embed Pods Frameworks */ = { + F1E17869CBA61BDB552EF98E /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = BEA42C2E42664EC2D5EA8594 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 4DA808B3C32EB1D9F3FC18B3 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -489,7 +489,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = F22AA56F8A11105EB865C7C0 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 0ED29D5295E06CA4849433BA /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -505,7 +505,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 95D0AE963ADC3E494A4D37F0 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = B2CEB86711238F049F19BEB9 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/firebase-get-to-know-flutter/step_04/pubspec.yaml b/firebase-get-to-know-flutter/step_04/pubspec.yaml index 5a192dd65c..5efd9cd4f0 100644 --- a/firebase-get-to-know-flutter/step_04/pubspec.yaml +++ b/firebase-get-to-know-flutter/step_04/pubspec.yaml @@ -32,15 +32,14 @@ dependencies: flutter: sdk: flutter - # The following adds the Cupertino Icons font to your application. # Use with the CupertinoIcons class for iOS style icons. cupertino_icons: ^1.0.8 google_fonts: ^6.2.1 - go_router: ^14.3.0 - cloud_firestore: ^5.4.4 - firebase_auth: ^5.3.1 - firebase_core: ^3.6.0 + go_router: ^14.5.0 + cloud_firestore: ^5.4.5 + firebase_auth: ^5.3.2 + firebase_core: ^3.7.0 provider: ^6.1.2 firebase_ui_auth: ^1.16.0 diff --git a/firebase-get-to-know-flutter/step_04/web/index.html b/firebase-get-to-know-flutter/step_04/web/index.html index 92f64576d8..ec3bcd0112 100644 --- a/firebase-get-to-know-flutter/step_04/web/index.html +++ b/firebase-get-to-know-flutter/step_04/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/firebase-get-to-know-flutter/step_05/ios/Runner.xcodeproj/project.pbxproj b/firebase-get-to-know-flutter/step_05/ios/Runner.xcodeproj/project.pbxproj index f55a47cb43..b36a0695b4 100644 --- a/firebase-get-to-know-flutter/step_05/ios/Runner.xcodeproj/project.pbxproj +++ b/firebase-get-to-know-flutter/step_05/ios/Runner.xcodeproj/project.pbxproj @@ -11,11 +11,11 @@ 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; - 94424699B3A14C2982732B02 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6B9BB003A54B638618107ADC /* Pods_Runner.framework */; }; + 7A9C31C280F37822AC10EFC6 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A775D781AAFB6ECC974BD650 /* Pods_RunnerTests.framework */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - EB6293D774039F2596010319 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4DE10BC9E8056DBF9301BFB3 /* Pods_RunnerTests.framework */; }; + 9BC295015BFD0F95DA7CDEC1 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D072F4A6C2FEFE989564BCB0 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -47,15 +47,14 @@ 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 44A86022FD4B88620A074AD6 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - 458E75D9DD87189355FF674B /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 4DE10BC9E8056DBF9301BFB3 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 6B9BB003A54B638618107ADC /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 5358ABFFB547340BADE91E57 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 55C5C4278824A4EDF6B82BEC /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 5CD039B3AB9EC2E131E6C8F5 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 6DED744C3D22EF43057EEE48 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 775B7D9A711AD243E7CC900F /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 91F97278880AEE3F91F1B85F /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - 95BD23190F06780AFA8F708F /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -63,24 +62,25 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - C106B318B7E4C757686D82A4 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - C4C4C0A87AC28ABBD674D966 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 9A20A943144662A86F585ABF /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + A775D781AAFB6ECC974BD650 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D072F4A6C2FEFE989564BCB0 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 97C146EB1CF9000F007C117D /* Frameworks */ = { + 7DD45768AC8C7D43ABCA9DE3 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 94424699B3A14C2982732B02 /* Pods_Runner.framework in Frameworks */, + 7A9C31C280F37822AC10EFC6 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - C59F8CC1D73F354D282AD010 /* Frameworks */ = { + 97C146EB1CF9000F007C117D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - EB6293D774039F2596010319 /* Pods_RunnerTests.framework in Frameworks */, + 9BC295015BFD0F95DA7CDEC1 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -95,29 +95,15 @@ path = RunnerTests; sourceTree = ""; }; - 61F983CEA43E1634EC9BD97C /* Frameworks */ = { + 561E40DE921F40D44603A357 /* Frameworks */ = { isa = PBXGroup; children = ( - 6B9BB003A54B638618107ADC /* Pods_Runner.framework */, - 4DE10BC9E8056DBF9301BFB3 /* Pods_RunnerTests.framework */, + D072F4A6C2FEFE989564BCB0 /* Pods_Runner.framework */, + A775D781AAFB6ECC974BD650 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; }; - 7D07664DF19CED6C7E7482CF /* Pods */ = { - isa = PBXGroup; - children = ( - C4C4C0A87AC28ABBD674D966 /* Pods-Runner.debug.xcconfig */, - 458E75D9DD87189355FF674B /* Pods-Runner.release.xcconfig */, - 44A86022FD4B88620A074AD6 /* Pods-Runner.profile.xcconfig */, - 95BD23190F06780AFA8F708F /* Pods-RunnerTests.debug.xcconfig */, - 91F97278880AEE3F91F1B85F /* Pods-RunnerTests.release.xcconfig */, - C106B318B7E4C757686D82A4 /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( @@ -136,8 +122,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - 7D07664DF19CED6C7E7482CF /* Pods */, - 61F983CEA43E1634EC9BD97C /* Frameworks */, + B7525EDD33924E7F2C905A28 /* Pods */, + 561E40DE921F40D44603A357 /* Frameworks */, ); sourceTree = ""; }; @@ -165,6 +151,20 @@ path = Runner; sourceTree = ""; }; + B7525EDD33924E7F2C905A28 /* Pods */ = { + isa = PBXGroup; + children = ( + 6DED744C3D22EF43057EEE48 /* Pods-Runner.debug.xcconfig */, + 9A20A943144662A86F585ABF /* Pods-Runner.release.xcconfig */, + 5358ABFFB547340BADE91E57 /* Pods-Runner.profile.xcconfig */, + 775B7D9A711AD243E7CC900F /* Pods-RunnerTests.debug.xcconfig */, + 5CD039B3AB9EC2E131E6C8F5 /* Pods-RunnerTests.release.xcconfig */, + 55C5C4278824A4EDF6B82BEC /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 280BA5287C63B597F9749D8E /* [CP] Check Pods Manifest.lock */, + 24615447E6AA9E5E76B95A56 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - C59F8CC1D73F354D282AD010 /* Frameworks */, + 7DD45768AC8C7D43ABCA9DE3 /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 13C8762D11FCF7A1D54D3CC7 /* [CP] Check Pods Manifest.lock */, + FE3AC9F7FF7CA03E86CBC134 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 4D7CADDC4DF6943F118206BD /* [CP] Embed Pods Frameworks */, + 04B52FCD7D9AF7EB0D333921 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -270,29 +270,24 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 13C8762D11FCF7A1D54D3CC7 /* [CP] Check Pods Manifest.lock */ = { + 04B52FCD7D9AF7EB0D333921 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - 280BA5287C63B597F9749D8E /* [CP] Check Pods Manifest.lock */ = { + 24615447E6AA9E5E76B95A56 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -330,37 +325,42 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 4D7CADDC4DF6943F118206BD /* [CP] Embed Pods Frameworks */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + inputPaths = ( ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + name = "Run Script"; + outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { + FE3AC9F7FF7CA03E86CBC134 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "Run Script"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -488,7 +488,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 95BD23190F06780AFA8F708F /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 775B7D9A711AD243E7CC900F /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -507,7 +507,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 91F97278880AEE3F91F1B85F /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 5CD039B3AB9EC2E131E6C8F5 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -524,7 +524,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C106B318B7E4C757686D82A4 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 55C5C4278824A4EDF6B82BEC /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/firebase-get-to-know-flutter/step_05/macos/Runner.xcodeproj/project.pbxproj b/firebase-get-to-know-flutter/step_05/macos/Runner.xcodeproj/project.pbxproj index 61d0d1b080..d85fcc90de 100644 --- a/firebase-get-to-know-flutter/step_05/macos/Runner.xcodeproj/project.pbxproj +++ b/firebase-get-to-know-flutter/step_05/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ - 128B8F8A6B5C6CF14D6E0342 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4D5B5999B70200B3809C6D01 /* Pods_RunnerTests.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 4A2FD2A9AD946C2E174286CE /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 90F1F021E64641C89665DD10 /* Pods_Runner.framework */; }; + 6773A496AD7A5686E2DD29BD /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5AD57AEB256EF9C78131F228 /* Pods_RunnerTests.framework */; }; + 8D4861BD95308793990CB833 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8F12630335546B1C0688E5A2 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,7 +62,7 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 1C25B3513592ABFAAB2831E2 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 0ED29D5295E06CA4849433BA /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -79,15 +79,15 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 4D5B5999B70200B3809C6D01 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 563FAA1D5896D8E471921C79 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 4DA808B3C32EB1D9F3FC18B3 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 5AD57AEB256EF9C78131F228 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 90F1F021E64641C89665DD10 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 95D0AE963ADC3E494A4D37F0 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 8F12630335546B1C0688E5A2 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 921768E3C0134A61232C251B /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - A2FFC262C51DDC226C58343C /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - BEA42C2E42664EC2D5EA8594 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - F22AA56F8A11105EB865C7C0 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + A109CB21F52E718A03B81B57 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + B2CEB86711238F049F19BEB9 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + E072F90EF015017AAEF964C6 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 128B8F8A6B5C6CF14D6E0342 /* Pods_RunnerTests.framework in Frameworks */, + 6773A496AD7A5686E2DD29BD /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,13 +103,27 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 4A2FD2A9AD946C2E174286CE /* Pods_Runner.framework in Frameworks */, + 8D4861BD95308793990CB833 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 06338C9EC6CCDC584FFFB260 /* Pods */ = { + isa = PBXGroup; + children = ( + 921768E3C0134A61232C251B /* Pods-Runner.debug.xcconfig */, + A109CB21F52E718A03B81B57 /* Pods-Runner.release.xcconfig */, + E072F90EF015017AAEF964C6 /* Pods-Runner.profile.xcconfig */, + 4DA808B3C32EB1D9F3FC18B3 /* Pods-RunnerTests.debug.xcconfig */, + 0ED29D5295E06CA4849433BA /* Pods-RunnerTests.release.xcconfig */, + B2CEB86711238F049F19BEB9 /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; 331C80D6294CF71000263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -137,7 +151,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - E51BE6CEB1BDEEEF7114DDF8 /* Pods */, + 06338C9EC6CCDC584FFFB260 /* Pods */, ); sourceTree = ""; }; @@ -188,26 +202,12 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - 90F1F021E64641C89665DD10 /* Pods_Runner.framework */, - 4D5B5999B70200B3809C6D01 /* Pods_RunnerTests.framework */, + 8F12630335546B1C0688E5A2 /* Pods_Runner.framework */, + 5AD57AEB256EF9C78131F228 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; }; - E51BE6CEB1BDEEEF7114DDF8 /* Pods */ = { - isa = PBXGroup; - children = ( - 563FAA1D5896D8E471921C79 /* Pods-Runner.debug.xcconfig */, - A2FFC262C51DDC226C58343C /* Pods-Runner.release.xcconfig */, - 1C25B3513592ABFAAB2831E2 /* Pods-Runner.profile.xcconfig */, - BEA42C2E42664EC2D5EA8594 /* Pods-RunnerTests.debug.xcconfig */, - F22AA56F8A11105EB865C7C0 /* Pods-RunnerTests.release.xcconfig */, - 95D0AE963ADC3E494A4D37F0 /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 6C13E7904DC3004B41332335 /* [CP] Check Pods Manifest.lock */, + 028AD4DD9A19B93A662AECAF /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 0F9D9D66708D755567BE1F99 /* [CP] Check Pods Manifest.lock */, + F1E17869CBA61BDB552EF98E /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - D82041256BE3E1863C6F9760 /* [CP] Embed Pods Frameworks */, + 3B746273FB6BFBEE317579ED /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,7 +323,7 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 0F9D9D66708D755567BE1F99 /* [CP] Check Pods Manifest.lock */ = { + 028AD4DD9A19B93A662AECAF /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -338,7 +338,7 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -383,43 +383,43 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 6C13E7904DC3004B41332335 /* [CP] Check Pods Manifest.lock */ = { + 3B746273FB6BFBEE317579ED /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - D82041256BE3E1863C6F9760 /* [CP] Embed Pods Frameworks */ = { + F1E17869CBA61BDB552EF98E /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = BEA42C2E42664EC2D5EA8594 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 4DA808B3C32EB1D9F3FC18B3 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -489,7 +489,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = F22AA56F8A11105EB865C7C0 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 0ED29D5295E06CA4849433BA /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -505,7 +505,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 95D0AE963ADC3E494A4D37F0 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = B2CEB86711238F049F19BEB9 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/firebase-get-to-know-flutter/step_05/pubspec.yaml b/firebase-get-to-know-flutter/step_05/pubspec.yaml index 5a192dd65c..5efd9cd4f0 100644 --- a/firebase-get-to-know-flutter/step_05/pubspec.yaml +++ b/firebase-get-to-know-flutter/step_05/pubspec.yaml @@ -32,15 +32,14 @@ dependencies: flutter: sdk: flutter - # The following adds the Cupertino Icons font to your application. # Use with the CupertinoIcons class for iOS style icons. cupertino_icons: ^1.0.8 google_fonts: ^6.2.1 - go_router: ^14.3.0 - cloud_firestore: ^5.4.4 - firebase_auth: ^5.3.1 - firebase_core: ^3.6.0 + go_router: ^14.5.0 + cloud_firestore: ^5.4.5 + firebase_auth: ^5.3.2 + firebase_core: ^3.7.0 provider: ^6.1.2 firebase_ui_auth: ^1.16.0 diff --git a/firebase-get-to-know-flutter/step_05/web/index.html b/firebase-get-to-know-flutter/step_05/web/index.html index 92f64576d8..ec3bcd0112 100644 --- a/firebase-get-to-know-flutter/step_05/web/index.html +++ b/firebase-get-to-know-flutter/step_05/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/firebase-get-to-know-flutter/step_06/ios/Runner.xcodeproj/project.pbxproj b/firebase-get-to-know-flutter/step_06/ios/Runner.xcodeproj/project.pbxproj index f55a47cb43..b36a0695b4 100644 --- a/firebase-get-to-know-flutter/step_06/ios/Runner.xcodeproj/project.pbxproj +++ b/firebase-get-to-know-flutter/step_06/ios/Runner.xcodeproj/project.pbxproj @@ -11,11 +11,11 @@ 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; - 94424699B3A14C2982732B02 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6B9BB003A54B638618107ADC /* Pods_Runner.framework */; }; + 7A9C31C280F37822AC10EFC6 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A775D781AAFB6ECC974BD650 /* Pods_RunnerTests.framework */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - EB6293D774039F2596010319 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4DE10BC9E8056DBF9301BFB3 /* Pods_RunnerTests.framework */; }; + 9BC295015BFD0F95DA7CDEC1 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D072F4A6C2FEFE989564BCB0 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -47,15 +47,14 @@ 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 44A86022FD4B88620A074AD6 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - 458E75D9DD87189355FF674B /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 4DE10BC9E8056DBF9301BFB3 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 6B9BB003A54B638618107ADC /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 5358ABFFB547340BADE91E57 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 55C5C4278824A4EDF6B82BEC /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 5CD039B3AB9EC2E131E6C8F5 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 6DED744C3D22EF43057EEE48 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 775B7D9A711AD243E7CC900F /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 91F97278880AEE3F91F1B85F /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - 95BD23190F06780AFA8F708F /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -63,24 +62,25 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - C106B318B7E4C757686D82A4 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - C4C4C0A87AC28ABBD674D966 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 9A20A943144662A86F585ABF /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + A775D781AAFB6ECC974BD650 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D072F4A6C2FEFE989564BCB0 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 97C146EB1CF9000F007C117D /* Frameworks */ = { + 7DD45768AC8C7D43ABCA9DE3 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 94424699B3A14C2982732B02 /* Pods_Runner.framework in Frameworks */, + 7A9C31C280F37822AC10EFC6 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - C59F8CC1D73F354D282AD010 /* Frameworks */ = { + 97C146EB1CF9000F007C117D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - EB6293D774039F2596010319 /* Pods_RunnerTests.framework in Frameworks */, + 9BC295015BFD0F95DA7CDEC1 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -95,29 +95,15 @@ path = RunnerTests; sourceTree = ""; }; - 61F983CEA43E1634EC9BD97C /* Frameworks */ = { + 561E40DE921F40D44603A357 /* Frameworks */ = { isa = PBXGroup; children = ( - 6B9BB003A54B638618107ADC /* Pods_Runner.framework */, - 4DE10BC9E8056DBF9301BFB3 /* Pods_RunnerTests.framework */, + D072F4A6C2FEFE989564BCB0 /* Pods_Runner.framework */, + A775D781AAFB6ECC974BD650 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; }; - 7D07664DF19CED6C7E7482CF /* Pods */ = { - isa = PBXGroup; - children = ( - C4C4C0A87AC28ABBD674D966 /* Pods-Runner.debug.xcconfig */, - 458E75D9DD87189355FF674B /* Pods-Runner.release.xcconfig */, - 44A86022FD4B88620A074AD6 /* Pods-Runner.profile.xcconfig */, - 95BD23190F06780AFA8F708F /* Pods-RunnerTests.debug.xcconfig */, - 91F97278880AEE3F91F1B85F /* Pods-RunnerTests.release.xcconfig */, - C106B318B7E4C757686D82A4 /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( @@ -136,8 +122,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - 7D07664DF19CED6C7E7482CF /* Pods */, - 61F983CEA43E1634EC9BD97C /* Frameworks */, + B7525EDD33924E7F2C905A28 /* Pods */, + 561E40DE921F40D44603A357 /* Frameworks */, ); sourceTree = ""; }; @@ -165,6 +151,20 @@ path = Runner; sourceTree = ""; }; + B7525EDD33924E7F2C905A28 /* Pods */ = { + isa = PBXGroup; + children = ( + 6DED744C3D22EF43057EEE48 /* Pods-Runner.debug.xcconfig */, + 9A20A943144662A86F585ABF /* Pods-Runner.release.xcconfig */, + 5358ABFFB547340BADE91E57 /* Pods-Runner.profile.xcconfig */, + 775B7D9A711AD243E7CC900F /* Pods-RunnerTests.debug.xcconfig */, + 5CD039B3AB9EC2E131E6C8F5 /* Pods-RunnerTests.release.xcconfig */, + 55C5C4278824A4EDF6B82BEC /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 280BA5287C63B597F9749D8E /* [CP] Check Pods Manifest.lock */, + 24615447E6AA9E5E76B95A56 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - C59F8CC1D73F354D282AD010 /* Frameworks */, + 7DD45768AC8C7D43ABCA9DE3 /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 13C8762D11FCF7A1D54D3CC7 /* [CP] Check Pods Manifest.lock */, + FE3AC9F7FF7CA03E86CBC134 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 4D7CADDC4DF6943F118206BD /* [CP] Embed Pods Frameworks */, + 04B52FCD7D9AF7EB0D333921 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -270,29 +270,24 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 13C8762D11FCF7A1D54D3CC7 /* [CP] Check Pods Manifest.lock */ = { + 04B52FCD7D9AF7EB0D333921 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - 280BA5287C63B597F9749D8E /* [CP] Check Pods Manifest.lock */ = { + 24615447E6AA9E5E76B95A56 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -330,37 +325,42 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 4D7CADDC4DF6943F118206BD /* [CP] Embed Pods Frameworks */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + inputPaths = ( ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + name = "Run Script"; + outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { + FE3AC9F7FF7CA03E86CBC134 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "Run Script"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -488,7 +488,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 95BD23190F06780AFA8F708F /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 775B7D9A711AD243E7CC900F /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -507,7 +507,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 91F97278880AEE3F91F1B85F /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 5CD039B3AB9EC2E131E6C8F5 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -524,7 +524,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C106B318B7E4C757686D82A4 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 55C5C4278824A4EDF6B82BEC /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/firebase-get-to-know-flutter/step_06/macos/Runner.xcodeproj/project.pbxproj b/firebase-get-to-know-flutter/step_06/macos/Runner.xcodeproj/project.pbxproj index 61d0d1b080..d85fcc90de 100644 --- a/firebase-get-to-know-flutter/step_06/macos/Runner.xcodeproj/project.pbxproj +++ b/firebase-get-to-know-flutter/step_06/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ - 128B8F8A6B5C6CF14D6E0342 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4D5B5999B70200B3809C6D01 /* Pods_RunnerTests.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 4A2FD2A9AD946C2E174286CE /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 90F1F021E64641C89665DD10 /* Pods_Runner.framework */; }; + 6773A496AD7A5686E2DD29BD /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5AD57AEB256EF9C78131F228 /* Pods_RunnerTests.framework */; }; + 8D4861BD95308793990CB833 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8F12630335546B1C0688E5A2 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,7 +62,7 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 1C25B3513592ABFAAB2831E2 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 0ED29D5295E06CA4849433BA /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -79,15 +79,15 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 4D5B5999B70200B3809C6D01 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 563FAA1D5896D8E471921C79 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 4DA808B3C32EB1D9F3FC18B3 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 5AD57AEB256EF9C78131F228 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 90F1F021E64641C89665DD10 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 95D0AE963ADC3E494A4D37F0 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 8F12630335546B1C0688E5A2 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 921768E3C0134A61232C251B /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - A2FFC262C51DDC226C58343C /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - BEA42C2E42664EC2D5EA8594 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - F22AA56F8A11105EB865C7C0 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + A109CB21F52E718A03B81B57 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + B2CEB86711238F049F19BEB9 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + E072F90EF015017AAEF964C6 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 128B8F8A6B5C6CF14D6E0342 /* Pods_RunnerTests.framework in Frameworks */, + 6773A496AD7A5686E2DD29BD /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,13 +103,27 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 4A2FD2A9AD946C2E174286CE /* Pods_Runner.framework in Frameworks */, + 8D4861BD95308793990CB833 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 06338C9EC6CCDC584FFFB260 /* Pods */ = { + isa = PBXGroup; + children = ( + 921768E3C0134A61232C251B /* Pods-Runner.debug.xcconfig */, + A109CB21F52E718A03B81B57 /* Pods-Runner.release.xcconfig */, + E072F90EF015017AAEF964C6 /* Pods-Runner.profile.xcconfig */, + 4DA808B3C32EB1D9F3FC18B3 /* Pods-RunnerTests.debug.xcconfig */, + 0ED29D5295E06CA4849433BA /* Pods-RunnerTests.release.xcconfig */, + B2CEB86711238F049F19BEB9 /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; 331C80D6294CF71000263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -137,7 +151,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - E51BE6CEB1BDEEEF7114DDF8 /* Pods */, + 06338C9EC6CCDC584FFFB260 /* Pods */, ); sourceTree = ""; }; @@ -188,26 +202,12 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - 90F1F021E64641C89665DD10 /* Pods_Runner.framework */, - 4D5B5999B70200B3809C6D01 /* Pods_RunnerTests.framework */, + 8F12630335546B1C0688E5A2 /* Pods_Runner.framework */, + 5AD57AEB256EF9C78131F228 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; }; - E51BE6CEB1BDEEEF7114DDF8 /* Pods */ = { - isa = PBXGroup; - children = ( - 563FAA1D5896D8E471921C79 /* Pods-Runner.debug.xcconfig */, - A2FFC262C51DDC226C58343C /* Pods-Runner.release.xcconfig */, - 1C25B3513592ABFAAB2831E2 /* Pods-Runner.profile.xcconfig */, - BEA42C2E42664EC2D5EA8594 /* Pods-RunnerTests.debug.xcconfig */, - F22AA56F8A11105EB865C7C0 /* Pods-RunnerTests.release.xcconfig */, - 95D0AE963ADC3E494A4D37F0 /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 6C13E7904DC3004B41332335 /* [CP] Check Pods Manifest.lock */, + 028AD4DD9A19B93A662AECAF /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 0F9D9D66708D755567BE1F99 /* [CP] Check Pods Manifest.lock */, + F1E17869CBA61BDB552EF98E /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - D82041256BE3E1863C6F9760 /* [CP] Embed Pods Frameworks */, + 3B746273FB6BFBEE317579ED /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,7 +323,7 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 0F9D9D66708D755567BE1F99 /* [CP] Check Pods Manifest.lock */ = { + 028AD4DD9A19B93A662AECAF /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -338,7 +338,7 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -383,43 +383,43 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 6C13E7904DC3004B41332335 /* [CP] Check Pods Manifest.lock */ = { + 3B746273FB6BFBEE317579ED /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - D82041256BE3E1863C6F9760 /* [CP] Embed Pods Frameworks */ = { + F1E17869CBA61BDB552EF98E /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = BEA42C2E42664EC2D5EA8594 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 4DA808B3C32EB1D9F3FC18B3 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -489,7 +489,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = F22AA56F8A11105EB865C7C0 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 0ED29D5295E06CA4849433BA /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -505,7 +505,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 95D0AE963ADC3E494A4D37F0 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = B2CEB86711238F049F19BEB9 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/firebase-get-to-know-flutter/step_06/pubspec.yaml b/firebase-get-to-know-flutter/step_06/pubspec.yaml index 5a192dd65c..5efd9cd4f0 100644 --- a/firebase-get-to-know-flutter/step_06/pubspec.yaml +++ b/firebase-get-to-know-flutter/step_06/pubspec.yaml @@ -32,15 +32,14 @@ dependencies: flutter: sdk: flutter - # The following adds the Cupertino Icons font to your application. # Use with the CupertinoIcons class for iOS style icons. cupertino_icons: ^1.0.8 google_fonts: ^6.2.1 - go_router: ^14.3.0 - cloud_firestore: ^5.4.4 - firebase_auth: ^5.3.1 - firebase_core: ^3.6.0 + go_router: ^14.5.0 + cloud_firestore: ^5.4.5 + firebase_auth: ^5.3.2 + firebase_core: ^3.7.0 provider: ^6.1.2 firebase_ui_auth: ^1.16.0 diff --git a/firebase-get-to-know-flutter/step_06/web/index.html b/firebase-get-to-know-flutter/step_06/web/index.html index 92f64576d8..ec3bcd0112 100644 --- a/firebase-get-to-know-flutter/step_06/web/index.html +++ b/firebase-get-to-know-flutter/step_06/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/firebase-get-to-know-flutter/step_07/ios/Runner.xcodeproj/project.pbxproj b/firebase-get-to-know-flutter/step_07/ios/Runner.xcodeproj/project.pbxproj index f55a47cb43..b36a0695b4 100644 --- a/firebase-get-to-know-flutter/step_07/ios/Runner.xcodeproj/project.pbxproj +++ b/firebase-get-to-know-flutter/step_07/ios/Runner.xcodeproj/project.pbxproj @@ -11,11 +11,11 @@ 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; - 94424699B3A14C2982732B02 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6B9BB003A54B638618107ADC /* Pods_Runner.framework */; }; + 7A9C31C280F37822AC10EFC6 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A775D781AAFB6ECC974BD650 /* Pods_RunnerTests.framework */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - EB6293D774039F2596010319 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4DE10BC9E8056DBF9301BFB3 /* Pods_RunnerTests.framework */; }; + 9BC295015BFD0F95DA7CDEC1 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D072F4A6C2FEFE989564BCB0 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -47,15 +47,14 @@ 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 44A86022FD4B88620A074AD6 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - 458E75D9DD87189355FF674B /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 4DE10BC9E8056DBF9301BFB3 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 6B9BB003A54B638618107ADC /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 5358ABFFB547340BADE91E57 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 55C5C4278824A4EDF6B82BEC /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 5CD039B3AB9EC2E131E6C8F5 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 6DED744C3D22EF43057EEE48 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 775B7D9A711AD243E7CC900F /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 91F97278880AEE3F91F1B85F /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - 95BD23190F06780AFA8F708F /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -63,24 +62,25 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - C106B318B7E4C757686D82A4 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - C4C4C0A87AC28ABBD674D966 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 9A20A943144662A86F585ABF /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + A775D781AAFB6ECC974BD650 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D072F4A6C2FEFE989564BCB0 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 97C146EB1CF9000F007C117D /* Frameworks */ = { + 7DD45768AC8C7D43ABCA9DE3 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 94424699B3A14C2982732B02 /* Pods_Runner.framework in Frameworks */, + 7A9C31C280F37822AC10EFC6 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - C59F8CC1D73F354D282AD010 /* Frameworks */ = { + 97C146EB1CF9000F007C117D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - EB6293D774039F2596010319 /* Pods_RunnerTests.framework in Frameworks */, + 9BC295015BFD0F95DA7CDEC1 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -95,29 +95,15 @@ path = RunnerTests; sourceTree = ""; }; - 61F983CEA43E1634EC9BD97C /* Frameworks */ = { + 561E40DE921F40D44603A357 /* Frameworks */ = { isa = PBXGroup; children = ( - 6B9BB003A54B638618107ADC /* Pods_Runner.framework */, - 4DE10BC9E8056DBF9301BFB3 /* Pods_RunnerTests.framework */, + D072F4A6C2FEFE989564BCB0 /* Pods_Runner.framework */, + A775D781AAFB6ECC974BD650 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; }; - 7D07664DF19CED6C7E7482CF /* Pods */ = { - isa = PBXGroup; - children = ( - C4C4C0A87AC28ABBD674D966 /* Pods-Runner.debug.xcconfig */, - 458E75D9DD87189355FF674B /* Pods-Runner.release.xcconfig */, - 44A86022FD4B88620A074AD6 /* Pods-Runner.profile.xcconfig */, - 95BD23190F06780AFA8F708F /* Pods-RunnerTests.debug.xcconfig */, - 91F97278880AEE3F91F1B85F /* Pods-RunnerTests.release.xcconfig */, - C106B318B7E4C757686D82A4 /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( @@ -136,8 +122,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - 7D07664DF19CED6C7E7482CF /* Pods */, - 61F983CEA43E1634EC9BD97C /* Frameworks */, + B7525EDD33924E7F2C905A28 /* Pods */, + 561E40DE921F40D44603A357 /* Frameworks */, ); sourceTree = ""; }; @@ -165,6 +151,20 @@ path = Runner; sourceTree = ""; }; + B7525EDD33924E7F2C905A28 /* Pods */ = { + isa = PBXGroup; + children = ( + 6DED744C3D22EF43057EEE48 /* Pods-Runner.debug.xcconfig */, + 9A20A943144662A86F585ABF /* Pods-Runner.release.xcconfig */, + 5358ABFFB547340BADE91E57 /* Pods-Runner.profile.xcconfig */, + 775B7D9A711AD243E7CC900F /* Pods-RunnerTests.debug.xcconfig */, + 5CD039B3AB9EC2E131E6C8F5 /* Pods-RunnerTests.release.xcconfig */, + 55C5C4278824A4EDF6B82BEC /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 280BA5287C63B597F9749D8E /* [CP] Check Pods Manifest.lock */, + 24615447E6AA9E5E76B95A56 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - C59F8CC1D73F354D282AD010 /* Frameworks */, + 7DD45768AC8C7D43ABCA9DE3 /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 13C8762D11FCF7A1D54D3CC7 /* [CP] Check Pods Manifest.lock */, + FE3AC9F7FF7CA03E86CBC134 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 4D7CADDC4DF6943F118206BD /* [CP] Embed Pods Frameworks */, + 04B52FCD7D9AF7EB0D333921 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -270,29 +270,24 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 13C8762D11FCF7A1D54D3CC7 /* [CP] Check Pods Manifest.lock */ = { + 04B52FCD7D9AF7EB0D333921 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - 280BA5287C63B597F9749D8E /* [CP] Check Pods Manifest.lock */ = { + 24615447E6AA9E5E76B95A56 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -330,37 +325,42 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 4D7CADDC4DF6943F118206BD /* [CP] Embed Pods Frameworks */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + inputPaths = ( ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + name = "Run Script"; + outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { + FE3AC9F7FF7CA03E86CBC134 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "Run Script"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -488,7 +488,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 95BD23190F06780AFA8F708F /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 775B7D9A711AD243E7CC900F /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -507,7 +507,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 91F97278880AEE3F91F1B85F /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 5CD039B3AB9EC2E131E6C8F5 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -524,7 +524,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C106B318B7E4C757686D82A4 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 55C5C4278824A4EDF6B82BEC /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/firebase-get-to-know-flutter/step_07/macos/Runner.xcodeproj/project.pbxproj b/firebase-get-to-know-flutter/step_07/macos/Runner.xcodeproj/project.pbxproj index 61d0d1b080..d85fcc90de 100644 --- a/firebase-get-to-know-flutter/step_07/macos/Runner.xcodeproj/project.pbxproj +++ b/firebase-get-to-know-flutter/step_07/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ - 128B8F8A6B5C6CF14D6E0342 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4D5B5999B70200B3809C6D01 /* Pods_RunnerTests.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 4A2FD2A9AD946C2E174286CE /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 90F1F021E64641C89665DD10 /* Pods_Runner.framework */; }; + 6773A496AD7A5686E2DD29BD /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5AD57AEB256EF9C78131F228 /* Pods_RunnerTests.framework */; }; + 8D4861BD95308793990CB833 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8F12630335546B1C0688E5A2 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,7 +62,7 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 1C25B3513592ABFAAB2831E2 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 0ED29D5295E06CA4849433BA /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -79,15 +79,15 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 4D5B5999B70200B3809C6D01 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 563FAA1D5896D8E471921C79 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 4DA808B3C32EB1D9F3FC18B3 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 5AD57AEB256EF9C78131F228 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 90F1F021E64641C89665DD10 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 95D0AE963ADC3E494A4D37F0 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 8F12630335546B1C0688E5A2 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 921768E3C0134A61232C251B /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - A2FFC262C51DDC226C58343C /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - BEA42C2E42664EC2D5EA8594 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - F22AA56F8A11105EB865C7C0 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + A109CB21F52E718A03B81B57 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + B2CEB86711238F049F19BEB9 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + E072F90EF015017AAEF964C6 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 128B8F8A6B5C6CF14D6E0342 /* Pods_RunnerTests.framework in Frameworks */, + 6773A496AD7A5686E2DD29BD /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,13 +103,27 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 4A2FD2A9AD946C2E174286CE /* Pods_Runner.framework in Frameworks */, + 8D4861BD95308793990CB833 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 06338C9EC6CCDC584FFFB260 /* Pods */ = { + isa = PBXGroup; + children = ( + 921768E3C0134A61232C251B /* Pods-Runner.debug.xcconfig */, + A109CB21F52E718A03B81B57 /* Pods-Runner.release.xcconfig */, + E072F90EF015017AAEF964C6 /* Pods-Runner.profile.xcconfig */, + 4DA808B3C32EB1D9F3FC18B3 /* Pods-RunnerTests.debug.xcconfig */, + 0ED29D5295E06CA4849433BA /* Pods-RunnerTests.release.xcconfig */, + B2CEB86711238F049F19BEB9 /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; 331C80D6294CF71000263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -137,7 +151,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - E51BE6CEB1BDEEEF7114DDF8 /* Pods */, + 06338C9EC6CCDC584FFFB260 /* Pods */, ); sourceTree = ""; }; @@ -188,26 +202,12 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - 90F1F021E64641C89665DD10 /* Pods_Runner.framework */, - 4D5B5999B70200B3809C6D01 /* Pods_RunnerTests.framework */, + 8F12630335546B1C0688E5A2 /* Pods_Runner.framework */, + 5AD57AEB256EF9C78131F228 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; }; - E51BE6CEB1BDEEEF7114DDF8 /* Pods */ = { - isa = PBXGroup; - children = ( - 563FAA1D5896D8E471921C79 /* Pods-Runner.debug.xcconfig */, - A2FFC262C51DDC226C58343C /* Pods-Runner.release.xcconfig */, - 1C25B3513592ABFAAB2831E2 /* Pods-Runner.profile.xcconfig */, - BEA42C2E42664EC2D5EA8594 /* Pods-RunnerTests.debug.xcconfig */, - F22AA56F8A11105EB865C7C0 /* Pods-RunnerTests.release.xcconfig */, - 95D0AE963ADC3E494A4D37F0 /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 6C13E7904DC3004B41332335 /* [CP] Check Pods Manifest.lock */, + 028AD4DD9A19B93A662AECAF /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 0F9D9D66708D755567BE1F99 /* [CP] Check Pods Manifest.lock */, + F1E17869CBA61BDB552EF98E /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - D82041256BE3E1863C6F9760 /* [CP] Embed Pods Frameworks */, + 3B746273FB6BFBEE317579ED /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,7 +323,7 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 0F9D9D66708D755567BE1F99 /* [CP] Check Pods Manifest.lock */ = { + 028AD4DD9A19B93A662AECAF /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -338,7 +338,7 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -383,43 +383,43 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 6C13E7904DC3004B41332335 /* [CP] Check Pods Manifest.lock */ = { + 3B746273FB6BFBEE317579ED /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - D82041256BE3E1863C6F9760 /* [CP] Embed Pods Frameworks */ = { + F1E17869CBA61BDB552EF98E /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = BEA42C2E42664EC2D5EA8594 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 4DA808B3C32EB1D9F3FC18B3 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -489,7 +489,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = F22AA56F8A11105EB865C7C0 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 0ED29D5295E06CA4849433BA /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -505,7 +505,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 95D0AE963ADC3E494A4D37F0 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = B2CEB86711238F049F19BEB9 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/firebase-get-to-know-flutter/step_07/pubspec.yaml b/firebase-get-to-know-flutter/step_07/pubspec.yaml index 5a192dd65c..5efd9cd4f0 100644 --- a/firebase-get-to-know-flutter/step_07/pubspec.yaml +++ b/firebase-get-to-know-flutter/step_07/pubspec.yaml @@ -32,15 +32,14 @@ dependencies: flutter: sdk: flutter - # The following adds the Cupertino Icons font to your application. # Use with the CupertinoIcons class for iOS style icons. cupertino_icons: ^1.0.8 google_fonts: ^6.2.1 - go_router: ^14.3.0 - cloud_firestore: ^5.4.4 - firebase_auth: ^5.3.1 - firebase_core: ^3.6.0 + go_router: ^14.5.0 + cloud_firestore: ^5.4.5 + firebase_auth: ^5.3.2 + firebase_core: ^3.7.0 provider: ^6.1.2 firebase_ui_auth: ^1.16.0 diff --git a/firebase-get-to-know-flutter/step_07/web/index.html b/firebase-get-to-know-flutter/step_07/web/index.html index 92f64576d8..ec3bcd0112 100644 --- a/firebase-get-to-know-flutter/step_07/web/index.html +++ b/firebase-get-to-know-flutter/step_07/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/firebase-get-to-know-flutter/step_09/ios/Runner.xcodeproj/project.pbxproj b/firebase-get-to-know-flutter/step_09/ios/Runner.xcodeproj/project.pbxproj index f55a47cb43..b36a0695b4 100644 --- a/firebase-get-to-know-flutter/step_09/ios/Runner.xcodeproj/project.pbxproj +++ b/firebase-get-to-know-flutter/step_09/ios/Runner.xcodeproj/project.pbxproj @@ -11,11 +11,11 @@ 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; - 94424699B3A14C2982732B02 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6B9BB003A54B638618107ADC /* Pods_Runner.framework */; }; + 7A9C31C280F37822AC10EFC6 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A775D781AAFB6ECC974BD650 /* Pods_RunnerTests.framework */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - EB6293D774039F2596010319 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4DE10BC9E8056DBF9301BFB3 /* Pods_RunnerTests.framework */; }; + 9BC295015BFD0F95DA7CDEC1 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D072F4A6C2FEFE989564BCB0 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -47,15 +47,14 @@ 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 44A86022FD4B88620A074AD6 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - 458E75D9DD87189355FF674B /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 4DE10BC9E8056DBF9301BFB3 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 6B9BB003A54B638618107ADC /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 5358ABFFB547340BADE91E57 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 55C5C4278824A4EDF6B82BEC /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 5CD039B3AB9EC2E131E6C8F5 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 6DED744C3D22EF43057EEE48 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 775B7D9A711AD243E7CC900F /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 91F97278880AEE3F91F1B85F /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - 95BD23190F06780AFA8F708F /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -63,24 +62,25 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - C106B318B7E4C757686D82A4 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - C4C4C0A87AC28ABBD674D966 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 9A20A943144662A86F585ABF /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + A775D781AAFB6ECC974BD650 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D072F4A6C2FEFE989564BCB0 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 97C146EB1CF9000F007C117D /* Frameworks */ = { + 7DD45768AC8C7D43ABCA9DE3 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 94424699B3A14C2982732B02 /* Pods_Runner.framework in Frameworks */, + 7A9C31C280F37822AC10EFC6 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - C59F8CC1D73F354D282AD010 /* Frameworks */ = { + 97C146EB1CF9000F007C117D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - EB6293D774039F2596010319 /* Pods_RunnerTests.framework in Frameworks */, + 9BC295015BFD0F95DA7CDEC1 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -95,29 +95,15 @@ path = RunnerTests; sourceTree = ""; }; - 61F983CEA43E1634EC9BD97C /* Frameworks */ = { + 561E40DE921F40D44603A357 /* Frameworks */ = { isa = PBXGroup; children = ( - 6B9BB003A54B638618107ADC /* Pods_Runner.framework */, - 4DE10BC9E8056DBF9301BFB3 /* Pods_RunnerTests.framework */, + D072F4A6C2FEFE989564BCB0 /* Pods_Runner.framework */, + A775D781AAFB6ECC974BD650 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; }; - 7D07664DF19CED6C7E7482CF /* Pods */ = { - isa = PBXGroup; - children = ( - C4C4C0A87AC28ABBD674D966 /* Pods-Runner.debug.xcconfig */, - 458E75D9DD87189355FF674B /* Pods-Runner.release.xcconfig */, - 44A86022FD4B88620A074AD6 /* Pods-Runner.profile.xcconfig */, - 95BD23190F06780AFA8F708F /* Pods-RunnerTests.debug.xcconfig */, - 91F97278880AEE3F91F1B85F /* Pods-RunnerTests.release.xcconfig */, - C106B318B7E4C757686D82A4 /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( @@ -136,8 +122,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - 7D07664DF19CED6C7E7482CF /* Pods */, - 61F983CEA43E1634EC9BD97C /* Frameworks */, + B7525EDD33924E7F2C905A28 /* Pods */, + 561E40DE921F40D44603A357 /* Frameworks */, ); sourceTree = ""; }; @@ -165,6 +151,20 @@ path = Runner; sourceTree = ""; }; + B7525EDD33924E7F2C905A28 /* Pods */ = { + isa = PBXGroup; + children = ( + 6DED744C3D22EF43057EEE48 /* Pods-Runner.debug.xcconfig */, + 9A20A943144662A86F585ABF /* Pods-Runner.release.xcconfig */, + 5358ABFFB547340BADE91E57 /* Pods-Runner.profile.xcconfig */, + 775B7D9A711AD243E7CC900F /* Pods-RunnerTests.debug.xcconfig */, + 5CD039B3AB9EC2E131E6C8F5 /* Pods-RunnerTests.release.xcconfig */, + 55C5C4278824A4EDF6B82BEC /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 280BA5287C63B597F9749D8E /* [CP] Check Pods Manifest.lock */, + 24615447E6AA9E5E76B95A56 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - C59F8CC1D73F354D282AD010 /* Frameworks */, + 7DD45768AC8C7D43ABCA9DE3 /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 13C8762D11FCF7A1D54D3CC7 /* [CP] Check Pods Manifest.lock */, + FE3AC9F7FF7CA03E86CBC134 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 4D7CADDC4DF6943F118206BD /* [CP] Embed Pods Frameworks */, + 04B52FCD7D9AF7EB0D333921 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -270,29 +270,24 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 13C8762D11FCF7A1D54D3CC7 /* [CP] Check Pods Manifest.lock */ = { + 04B52FCD7D9AF7EB0D333921 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - 280BA5287C63B597F9749D8E /* [CP] Check Pods Manifest.lock */ = { + 24615447E6AA9E5E76B95A56 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -330,37 +325,42 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 4D7CADDC4DF6943F118206BD /* [CP] Embed Pods Frameworks */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + inputPaths = ( ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + name = "Run Script"; + outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { + FE3AC9F7FF7CA03E86CBC134 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "Run Script"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -488,7 +488,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 95BD23190F06780AFA8F708F /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 775B7D9A711AD243E7CC900F /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -507,7 +507,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 91F97278880AEE3F91F1B85F /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 5CD039B3AB9EC2E131E6C8F5 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -524,7 +524,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C106B318B7E4C757686D82A4 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 55C5C4278824A4EDF6B82BEC /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/firebase-get-to-know-flutter/step_09/macos/Runner.xcodeproj/project.pbxproj b/firebase-get-to-know-flutter/step_09/macos/Runner.xcodeproj/project.pbxproj index 61d0d1b080..d85fcc90de 100644 --- a/firebase-get-to-know-flutter/step_09/macos/Runner.xcodeproj/project.pbxproj +++ b/firebase-get-to-know-flutter/step_09/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ - 128B8F8A6B5C6CF14D6E0342 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4D5B5999B70200B3809C6D01 /* Pods_RunnerTests.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 4A2FD2A9AD946C2E174286CE /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 90F1F021E64641C89665DD10 /* Pods_Runner.framework */; }; + 6773A496AD7A5686E2DD29BD /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5AD57AEB256EF9C78131F228 /* Pods_RunnerTests.framework */; }; + 8D4861BD95308793990CB833 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8F12630335546B1C0688E5A2 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,7 +62,7 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 1C25B3513592ABFAAB2831E2 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 0ED29D5295E06CA4849433BA /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -79,15 +79,15 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 4D5B5999B70200B3809C6D01 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 563FAA1D5896D8E471921C79 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 4DA808B3C32EB1D9F3FC18B3 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 5AD57AEB256EF9C78131F228 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 90F1F021E64641C89665DD10 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 95D0AE963ADC3E494A4D37F0 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 8F12630335546B1C0688E5A2 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 921768E3C0134A61232C251B /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - A2FFC262C51DDC226C58343C /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - BEA42C2E42664EC2D5EA8594 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - F22AA56F8A11105EB865C7C0 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + A109CB21F52E718A03B81B57 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + B2CEB86711238F049F19BEB9 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + E072F90EF015017AAEF964C6 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 128B8F8A6B5C6CF14D6E0342 /* Pods_RunnerTests.framework in Frameworks */, + 6773A496AD7A5686E2DD29BD /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,13 +103,27 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 4A2FD2A9AD946C2E174286CE /* Pods_Runner.framework in Frameworks */, + 8D4861BD95308793990CB833 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 06338C9EC6CCDC584FFFB260 /* Pods */ = { + isa = PBXGroup; + children = ( + 921768E3C0134A61232C251B /* Pods-Runner.debug.xcconfig */, + A109CB21F52E718A03B81B57 /* Pods-Runner.release.xcconfig */, + E072F90EF015017AAEF964C6 /* Pods-Runner.profile.xcconfig */, + 4DA808B3C32EB1D9F3FC18B3 /* Pods-RunnerTests.debug.xcconfig */, + 0ED29D5295E06CA4849433BA /* Pods-RunnerTests.release.xcconfig */, + B2CEB86711238F049F19BEB9 /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; 331C80D6294CF71000263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -137,7 +151,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - E51BE6CEB1BDEEEF7114DDF8 /* Pods */, + 06338C9EC6CCDC584FFFB260 /* Pods */, ); sourceTree = ""; }; @@ -188,26 +202,12 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - 90F1F021E64641C89665DD10 /* Pods_Runner.framework */, - 4D5B5999B70200B3809C6D01 /* Pods_RunnerTests.framework */, + 8F12630335546B1C0688E5A2 /* Pods_Runner.framework */, + 5AD57AEB256EF9C78131F228 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; }; - E51BE6CEB1BDEEEF7114DDF8 /* Pods */ = { - isa = PBXGroup; - children = ( - 563FAA1D5896D8E471921C79 /* Pods-Runner.debug.xcconfig */, - A2FFC262C51DDC226C58343C /* Pods-Runner.release.xcconfig */, - 1C25B3513592ABFAAB2831E2 /* Pods-Runner.profile.xcconfig */, - BEA42C2E42664EC2D5EA8594 /* Pods-RunnerTests.debug.xcconfig */, - F22AA56F8A11105EB865C7C0 /* Pods-RunnerTests.release.xcconfig */, - 95D0AE963ADC3E494A4D37F0 /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 6C13E7904DC3004B41332335 /* [CP] Check Pods Manifest.lock */, + 028AD4DD9A19B93A662AECAF /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 0F9D9D66708D755567BE1F99 /* [CP] Check Pods Manifest.lock */, + F1E17869CBA61BDB552EF98E /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - D82041256BE3E1863C6F9760 /* [CP] Embed Pods Frameworks */, + 3B746273FB6BFBEE317579ED /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,7 +323,7 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 0F9D9D66708D755567BE1F99 /* [CP] Check Pods Manifest.lock */ = { + 028AD4DD9A19B93A662AECAF /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -338,7 +338,7 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -383,43 +383,43 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 6C13E7904DC3004B41332335 /* [CP] Check Pods Manifest.lock */ = { + 3B746273FB6BFBEE317579ED /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - D82041256BE3E1863C6F9760 /* [CP] Embed Pods Frameworks */ = { + F1E17869CBA61BDB552EF98E /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = BEA42C2E42664EC2D5EA8594 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 4DA808B3C32EB1D9F3FC18B3 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -489,7 +489,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = F22AA56F8A11105EB865C7C0 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 0ED29D5295E06CA4849433BA /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -505,7 +505,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 95D0AE963ADC3E494A4D37F0 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = B2CEB86711238F049F19BEB9 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/firebase-get-to-know-flutter/step_09/pubspec.yaml b/firebase-get-to-know-flutter/step_09/pubspec.yaml index 5a192dd65c..5efd9cd4f0 100644 --- a/firebase-get-to-know-flutter/step_09/pubspec.yaml +++ b/firebase-get-to-know-flutter/step_09/pubspec.yaml @@ -32,15 +32,14 @@ dependencies: flutter: sdk: flutter - # The following adds the Cupertino Icons font to your application. # Use with the CupertinoIcons class for iOS style icons. cupertino_icons: ^1.0.8 google_fonts: ^6.2.1 - go_router: ^14.3.0 - cloud_firestore: ^5.4.4 - firebase_auth: ^5.3.1 - firebase_core: ^3.6.0 + go_router: ^14.5.0 + cloud_firestore: ^5.4.5 + firebase_auth: ^5.3.2 + firebase_core: ^3.7.0 provider: ^6.1.2 firebase_ui_auth: ^1.16.0 diff --git a/firebase-get-to-know-flutter/step_09/web/index.html b/firebase-get-to-know-flutter/step_09/web/index.html index 92f64576d8..ec3bcd0112 100644 --- a/firebase-get-to-know-flutter/step_09/web/index.html +++ b/firebase-get-to-know-flutter/step_09/web/index.html @@ -21,7 +21,7 @@ - + From 5907f39da6b0a8840fec4ccd09953821c27b8bf4 Mon Sep 17 00:00:00 2001 From: Brett Morgan Date: Wed, 13 Nov 2024 10:50:23 +1100 Subject: [PATCH 044/108] Update `forge2d_game` --- forge2d_game/step_02/linux/CMakeLists.txt | 23 +--- .../step_02/linux/runner/CMakeLists.txt | 26 ++++ .../step_02/linux/{ => runner}/main.cc | 0 .../linux/{ => runner}/my_application.cc | 6 + .../linux/{ => runner}/my_application.h | 0 forge2d_game/step_02/pubspec.yaml | 2 +- forge2d_game/step_02/web/index.html | 2 +- forge2d_game/step_03/linux/CMakeLists.txt | 23 +--- .../step_03/linux/runner/CMakeLists.txt | 26 ++++ .../step_03/linux/{ => runner}/main.cc | 0 .../linux/{ => runner}/my_application.cc | 6 + .../linux/{ => runner}/my_application.h | 0 forge2d_game/step_03/pubspec.yaml | 2 +- forge2d_game/step_03/web/index.html | 2 +- forge2d_game/step_04/linux/CMakeLists.txt | 23 +--- .../step_04/linux/runner/CMakeLists.txt | 26 ++++ .../step_04/linux/{ => runner}/main.cc | 0 .../linux/{ => runner}/my_application.cc | 6 + .../linux/{ => runner}/my_application.h | 0 forge2d_game/step_04/pubspec.yaml | 2 +- forge2d_game/step_04/web/index.html | 2 +- forge2d_game/step_05/linux/CMakeLists.txt | 23 +--- .../step_05/linux/runner/CMakeLists.txt | 26 ++++ .../step_05/linux/{ => runner}/main.cc | 0 .../linux/{ => runner}/my_application.cc | 6 + .../linux/{ => runner}/my_application.h | 0 forge2d_game/step_05/pubspec.yaml | 2 +- forge2d_game/step_05/web/index.html | 2 +- forge2d_game/step_06/linux/CMakeLists.txt | 23 +--- forge2d_game/step_06/linux/my_application.cc | 124 ----------------- .../step_06/linux/runner/CMakeLists.txt | 26 ++++ .../step_06/linux/{ => runner}/main.cc | 0 .../step_06/linux/runner/my_application.cc | 130 ++++++++++++++++++ .../linux/{ => runner}/my_application.h | 0 forge2d_game/step_06/pubspec.yaml | 2 +- forge2d_game/step_06/web/index.html | 2 +- forge2d_game/step_07/linux/CMakeLists.txt | 23 +--- forge2d_game/step_07/linux/my_application.cc | 124 ----------------- .../step_07/linux/runner/CMakeLists.txt | 26 ++++ .../step_07/linux/{ => runner}/main.cc | 0 .../step_07/linux/runner/my_application.cc | 130 ++++++++++++++++++ .../linux/{ => runner}/my_application.h | 0 forge2d_game/step_07/pubspec.yaml | 2 +- forge2d_game/step_07/web/index.html | 2 +- 44 files changed, 470 insertions(+), 380 deletions(-) create mode 100644 forge2d_game/step_02/linux/runner/CMakeLists.txt rename forge2d_game/step_02/linux/{ => runner}/main.cc (100%) rename forge2d_game/step_02/linux/{ => runner}/my_application.cc (93%) rename forge2d_game/step_02/linux/{ => runner}/my_application.h (100%) create mode 100644 forge2d_game/step_03/linux/runner/CMakeLists.txt rename forge2d_game/step_03/linux/{ => runner}/main.cc (100%) rename forge2d_game/step_03/linux/{ => runner}/my_application.cc (93%) rename forge2d_game/step_03/linux/{ => runner}/my_application.h (100%) create mode 100644 forge2d_game/step_04/linux/runner/CMakeLists.txt rename forge2d_game/step_04/linux/{ => runner}/main.cc (100%) rename forge2d_game/step_04/linux/{ => runner}/my_application.cc (93%) rename forge2d_game/step_04/linux/{ => runner}/my_application.h (100%) create mode 100644 forge2d_game/step_05/linux/runner/CMakeLists.txt rename forge2d_game/step_05/linux/{ => runner}/main.cc (100%) rename forge2d_game/step_05/linux/{ => runner}/my_application.cc (93%) rename forge2d_game/step_05/linux/{ => runner}/my_application.h (100%) delete mode 100644 forge2d_game/step_06/linux/my_application.cc create mode 100644 forge2d_game/step_06/linux/runner/CMakeLists.txt rename forge2d_game/step_06/linux/{ => runner}/main.cc (100%) create mode 100644 forge2d_game/step_06/linux/runner/my_application.cc rename forge2d_game/step_06/linux/{ => runner}/my_application.h (100%) delete mode 100644 forge2d_game/step_07/linux/my_application.cc create mode 100644 forge2d_game/step_07/linux/runner/CMakeLists.txt rename forge2d_game/step_07/linux/{ => runner}/main.cc (100%) create mode 100644 forge2d_game/step_07/linux/runner/my_application.cc rename forge2d_game/step_07/linux/{ => runner}/my_application.h (100%) diff --git a/forge2d_game/step_02/linux/CMakeLists.txt b/forge2d_game/step_02/linux/CMakeLists.txt index 4451095030..784bc59065 100644 --- a/forge2d_game/step_02/linux/CMakeLists.txt +++ b/forge2d_game/step_02/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/forge2d_game/step_02/linux/runner/CMakeLists.txt b/forge2d_game/step_02/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/forge2d_game/step_02/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/forge2d_game/step_02/linux/main.cc b/forge2d_game/step_02/linux/runner/main.cc similarity index 100% rename from forge2d_game/step_02/linux/main.cc rename to forge2d_game/step_02/linux/runner/main.cc diff --git a/forge2d_game/step_02/linux/my_application.cc b/forge2d_game/step_02/linux/runner/my_application.cc similarity index 93% rename from forge2d_game/step_02/linux/my_application.cc rename to forge2d_game/step_02/linux/runner/my_application.cc index 68a614170c..9a172938c7 100644 --- a/forge2d_game/step_02/linux/my_application.cc +++ b/forge2d_game/step_02/linux/runner/my_application.cc @@ -117,6 +117,12 @@ static void my_application_class_init(MyApplicationClass* klass) { static void my_application_init(MyApplication* self) {} MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + return MY_APPLICATION(g_object_new(my_application_get_type(), "application-id", APPLICATION_ID, "flags", G_APPLICATION_NON_UNIQUE, diff --git a/forge2d_game/step_02/linux/my_application.h b/forge2d_game/step_02/linux/runner/my_application.h similarity index 100% rename from forge2d_game/step_02/linux/my_application.h rename to forge2d_game/step_02/linux/runner/my_application.h diff --git a/forge2d_game/step_02/pubspec.yaml b/forge2d_game/step_02/pubspec.yaml index 0d24a3a6dd..77d1373b4c 100644 --- a/forge2d_game/step_02/pubspec.yaml +++ b/forge2d_game/step_02/pubspec.yaml @@ -18,7 +18,7 @@ dependencies: dev_dependencies: flutter_test: sdk: flutter - flutter_lints: ^4.0.0 + flutter_lints: ^5.0.0 flutter: uses-material-design: true diff --git a/forge2d_game/step_02/web/index.html b/forge2d_game/step_02/web/index.html index 405c6e494e..500ab53278 100644 --- a/forge2d_game/step_02/web/index.html +++ b/forge2d_game/step_02/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/forge2d_game/step_03/linux/CMakeLists.txt b/forge2d_game/step_03/linux/CMakeLists.txt index 4451095030..784bc59065 100644 --- a/forge2d_game/step_03/linux/CMakeLists.txt +++ b/forge2d_game/step_03/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/forge2d_game/step_03/linux/runner/CMakeLists.txt b/forge2d_game/step_03/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/forge2d_game/step_03/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/forge2d_game/step_03/linux/main.cc b/forge2d_game/step_03/linux/runner/main.cc similarity index 100% rename from forge2d_game/step_03/linux/main.cc rename to forge2d_game/step_03/linux/runner/main.cc diff --git a/forge2d_game/step_03/linux/my_application.cc b/forge2d_game/step_03/linux/runner/my_application.cc similarity index 93% rename from forge2d_game/step_03/linux/my_application.cc rename to forge2d_game/step_03/linux/runner/my_application.cc index 68a614170c..9a172938c7 100644 --- a/forge2d_game/step_03/linux/my_application.cc +++ b/forge2d_game/step_03/linux/runner/my_application.cc @@ -117,6 +117,12 @@ static void my_application_class_init(MyApplicationClass* klass) { static void my_application_init(MyApplication* self) {} MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + return MY_APPLICATION(g_object_new(my_application_get_type(), "application-id", APPLICATION_ID, "flags", G_APPLICATION_NON_UNIQUE, diff --git a/forge2d_game/step_03/linux/my_application.h b/forge2d_game/step_03/linux/runner/my_application.h similarity index 100% rename from forge2d_game/step_03/linux/my_application.h rename to forge2d_game/step_03/linux/runner/my_application.h diff --git a/forge2d_game/step_03/pubspec.yaml b/forge2d_game/step_03/pubspec.yaml index 63290065bd..016d97b0b2 100644 --- a/forge2d_game/step_03/pubspec.yaml +++ b/forge2d_game/step_03/pubspec.yaml @@ -18,7 +18,7 @@ dependencies: dev_dependencies: flutter_test: sdk: flutter - flutter_lints: ^4.0.0 + flutter_lints: ^5.0.0 flutter: uses-material-design: true diff --git a/forge2d_game/step_03/web/index.html b/forge2d_game/step_03/web/index.html index 405c6e494e..500ab53278 100644 --- a/forge2d_game/step_03/web/index.html +++ b/forge2d_game/step_03/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/forge2d_game/step_04/linux/CMakeLists.txt b/forge2d_game/step_04/linux/CMakeLists.txt index 4451095030..784bc59065 100644 --- a/forge2d_game/step_04/linux/CMakeLists.txt +++ b/forge2d_game/step_04/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/forge2d_game/step_04/linux/runner/CMakeLists.txt b/forge2d_game/step_04/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/forge2d_game/step_04/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/forge2d_game/step_04/linux/main.cc b/forge2d_game/step_04/linux/runner/main.cc similarity index 100% rename from forge2d_game/step_04/linux/main.cc rename to forge2d_game/step_04/linux/runner/main.cc diff --git a/forge2d_game/step_04/linux/my_application.cc b/forge2d_game/step_04/linux/runner/my_application.cc similarity index 93% rename from forge2d_game/step_04/linux/my_application.cc rename to forge2d_game/step_04/linux/runner/my_application.cc index 68a614170c..9a172938c7 100644 --- a/forge2d_game/step_04/linux/my_application.cc +++ b/forge2d_game/step_04/linux/runner/my_application.cc @@ -117,6 +117,12 @@ static void my_application_class_init(MyApplicationClass* klass) { static void my_application_init(MyApplication* self) {} MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + return MY_APPLICATION(g_object_new(my_application_get_type(), "application-id", APPLICATION_ID, "flags", G_APPLICATION_NON_UNIQUE, diff --git a/forge2d_game/step_04/linux/my_application.h b/forge2d_game/step_04/linux/runner/my_application.h similarity index 100% rename from forge2d_game/step_04/linux/my_application.h rename to forge2d_game/step_04/linux/runner/my_application.h diff --git a/forge2d_game/step_04/pubspec.yaml b/forge2d_game/step_04/pubspec.yaml index 63290065bd..016d97b0b2 100644 --- a/forge2d_game/step_04/pubspec.yaml +++ b/forge2d_game/step_04/pubspec.yaml @@ -18,7 +18,7 @@ dependencies: dev_dependencies: flutter_test: sdk: flutter - flutter_lints: ^4.0.0 + flutter_lints: ^5.0.0 flutter: uses-material-design: true diff --git a/forge2d_game/step_04/web/index.html b/forge2d_game/step_04/web/index.html index 405c6e494e..500ab53278 100644 --- a/forge2d_game/step_04/web/index.html +++ b/forge2d_game/step_04/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/forge2d_game/step_05/linux/CMakeLists.txt b/forge2d_game/step_05/linux/CMakeLists.txt index 4451095030..784bc59065 100644 --- a/forge2d_game/step_05/linux/CMakeLists.txt +++ b/forge2d_game/step_05/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/forge2d_game/step_05/linux/runner/CMakeLists.txt b/forge2d_game/step_05/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/forge2d_game/step_05/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/forge2d_game/step_05/linux/main.cc b/forge2d_game/step_05/linux/runner/main.cc similarity index 100% rename from forge2d_game/step_05/linux/main.cc rename to forge2d_game/step_05/linux/runner/main.cc diff --git a/forge2d_game/step_05/linux/my_application.cc b/forge2d_game/step_05/linux/runner/my_application.cc similarity index 93% rename from forge2d_game/step_05/linux/my_application.cc rename to forge2d_game/step_05/linux/runner/my_application.cc index 68a614170c..9a172938c7 100644 --- a/forge2d_game/step_05/linux/my_application.cc +++ b/forge2d_game/step_05/linux/runner/my_application.cc @@ -117,6 +117,12 @@ static void my_application_class_init(MyApplicationClass* klass) { static void my_application_init(MyApplication* self) {} MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + return MY_APPLICATION(g_object_new(my_application_get_type(), "application-id", APPLICATION_ID, "flags", G_APPLICATION_NON_UNIQUE, diff --git a/forge2d_game/step_05/linux/my_application.h b/forge2d_game/step_05/linux/runner/my_application.h similarity index 100% rename from forge2d_game/step_05/linux/my_application.h rename to forge2d_game/step_05/linux/runner/my_application.h diff --git a/forge2d_game/step_05/pubspec.yaml b/forge2d_game/step_05/pubspec.yaml index d3c28402fc..79bd155671 100644 --- a/forge2d_game/step_05/pubspec.yaml +++ b/forge2d_game/step_05/pubspec.yaml @@ -19,7 +19,7 @@ dependencies: dev_dependencies: flutter_test: sdk: flutter - flutter_lints: ^4.0.0 + flutter_lints: ^5.0.0 flutter: uses-material-design: true diff --git a/forge2d_game/step_05/web/index.html b/forge2d_game/step_05/web/index.html index 405c6e494e..500ab53278 100644 --- a/forge2d_game/step_05/web/index.html +++ b/forge2d_game/step_05/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/forge2d_game/step_06/linux/CMakeLists.txt b/forge2d_game/step_06/linux/CMakeLists.txt index 4451095030..784bc59065 100644 --- a/forge2d_game/step_06/linux/CMakeLists.txt +++ b/forge2d_game/step_06/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/forge2d_game/step_06/linux/my_application.cc b/forge2d_game/step_06/linux/my_application.cc deleted file mode 100644 index 68a614170c..0000000000 --- a/forge2d_game/step_06/linux/my_application.cc +++ /dev/null @@ -1,124 +0,0 @@ -#include "my_application.h" - -#include -#ifdef GDK_WINDOWING_X11 -#include -#endif - -#include "flutter/generated_plugin_registrant.h" - -struct _MyApplication { - GtkApplication parent_instance; - char** dart_entrypoint_arguments; -}; - -G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) - -// Implements GApplication::activate. -static void my_application_activate(GApplication* application) { - MyApplication* self = MY_APPLICATION(application); - GtkWindow* window = - GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); - - // Use a header bar when running in GNOME as this is the common style used - // by applications and is the setup most users will be using (e.g. Ubuntu - // desktop). - // If running on X and not using GNOME then just use a traditional title bar - // in case the window manager does more exotic layout, e.g. tiling. - // If running on Wayland assume the header bar will work (may need changing - // if future cases occur). - gboolean use_header_bar = TRUE; -#ifdef GDK_WINDOWING_X11 - GdkScreen* screen = gtk_window_get_screen(window); - if (GDK_IS_X11_SCREEN(screen)) { - const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); - if (g_strcmp0(wm_name, "GNOME Shell") != 0) { - use_header_bar = FALSE; - } - } -#endif - if (use_header_bar) { - GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); - gtk_widget_show(GTK_WIDGET(header_bar)); - gtk_header_bar_set_title(header_bar, "forge2d_game"); - gtk_header_bar_set_show_close_button(header_bar, TRUE); - gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); - } else { - gtk_window_set_title(window, "forge2d_game"); - } - - gtk_window_set_default_size(window, 1280, 720); - gtk_widget_show(GTK_WIDGET(window)); - - g_autoptr(FlDartProject) project = fl_dart_project_new(); - fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); - - FlView* view = fl_view_new(project); - gtk_widget_show(GTK_WIDGET(view)); - gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); - - fl_register_plugins(FL_PLUGIN_REGISTRY(view)); - - gtk_widget_grab_focus(GTK_WIDGET(view)); -} - -// Implements GApplication::local_command_line. -static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { - MyApplication* self = MY_APPLICATION(application); - // Strip out the first argument as it is the binary name. - self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); - - g_autoptr(GError) error = nullptr; - if (!g_application_register(application, nullptr, &error)) { - g_warning("Failed to register: %s", error->message); - *exit_status = 1; - return TRUE; - } - - g_application_activate(application); - *exit_status = 0; - - return TRUE; -} - -// Implements GApplication::startup. -static void my_application_startup(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application startup. - - G_APPLICATION_CLASS(my_application_parent_class)->startup(application); -} - -// Implements GApplication::shutdown. -static void my_application_shutdown(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application shutdown. - - G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); -} - -// Implements GObject::dispose. -static void my_application_dispose(GObject* object) { - MyApplication* self = MY_APPLICATION(object); - g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); - G_OBJECT_CLASS(my_application_parent_class)->dispose(object); -} - -static void my_application_class_init(MyApplicationClass* klass) { - G_APPLICATION_CLASS(klass)->activate = my_application_activate; - G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; - G_APPLICATION_CLASS(klass)->startup = my_application_startup; - G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; - G_OBJECT_CLASS(klass)->dispose = my_application_dispose; -} - -static void my_application_init(MyApplication* self) {} - -MyApplication* my_application_new() { - return MY_APPLICATION(g_object_new(my_application_get_type(), - "application-id", APPLICATION_ID, - "flags", G_APPLICATION_NON_UNIQUE, - nullptr)); -} diff --git a/forge2d_game/step_06/linux/runner/CMakeLists.txt b/forge2d_game/step_06/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/forge2d_game/step_06/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/forge2d_game/step_06/linux/main.cc b/forge2d_game/step_06/linux/runner/main.cc similarity index 100% rename from forge2d_game/step_06/linux/main.cc rename to forge2d_game/step_06/linux/runner/main.cc diff --git a/forge2d_game/step_06/linux/runner/my_application.cc b/forge2d_game/step_06/linux/runner/my_application.cc new file mode 100644 index 0000000000..9a172938c7 --- /dev/null +++ b/forge2d_game/step_06/linux/runner/my_application.cc @@ -0,0 +1,130 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "forge2d_game"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "forge2d_game"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/forge2d_game/step_06/linux/my_application.h b/forge2d_game/step_06/linux/runner/my_application.h similarity index 100% rename from forge2d_game/step_06/linux/my_application.h rename to forge2d_game/step_06/linux/runner/my_application.h diff --git a/forge2d_game/step_06/pubspec.yaml b/forge2d_game/step_06/pubspec.yaml index d3c28402fc..79bd155671 100644 --- a/forge2d_game/step_06/pubspec.yaml +++ b/forge2d_game/step_06/pubspec.yaml @@ -19,7 +19,7 @@ dependencies: dev_dependencies: flutter_test: sdk: flutter - flutter_lints: ^4.0.0 + flutter_lints: ^5.0.0 flutter: uses-material-design: true diff --git a/forge2d_game/step_06/web/index.html b/forge2d_game/step_06/web/index.html index 405c6e494e..500ab53278 100644 --- a/forge2d_game/step_06/web/index.html +++ b/forge2d_game/step_06/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/forge2d_game/step_07/linux/CMakeLists.txt b/forge2d_game/step_07/linux/CMakeLists.txt index 4451095030..784bc59065 100644 --- a/forge2d_game/step_07/linux/CMakeLists.txt +++ b/forge2d_game/step_07/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/forge2d_game/step_07/linux/my_application.cc b/forge2d_game/step_07/linux/my_application.cc deleted file mode 100644 index 68a614170c..0000000000 --- a/forge2d_game/step_07/linux/my_application.cc +++ /dev/null @@ -1,124 +0,0 @@ -#include "my_application.h" - -#include -#ifdef GDK_WINDOWING_X11 -#include -#endif - -#include "flutter/generated_plugin_registrant.h" - -struct _MyApplication { - GtkApplication parent_instance; - char** dart_entrypoint_arguments; -}; - -G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) - -// Implements GApplication::activate. -static void my_application_activate(GApplication* application) { - MyApplication* self = MY_APPLICATION(application); - GtkWindow* window = - GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); - - // Use a header bar when running in GNOME as this is the common style used - // by applications and is the setup most users will be using (e.g. Ubuntu - // desktop). - // If running on X and not using GNOME then just use a traditional title bar - // in case the window manager does more exotic layout, e.g. tiling. - // If running on Wayland assume the header bar will work (may need changing - // if future cases occur). - gboolean use_header_bar = TRUE; -#ifdef GDK_WINDOWING_X11 - GdkScreen* screen = gtk_window_get_screen(window); - if (GDK_IS_X11_SCREEN(screen)) { - const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); - if (g_strcmp0(wm_name, "GNOME Shell") != 0) { - use_header_bar = FALSE; - } - } -#endif - if (use_header_bar) { - GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); - gtk_widget_show(GTK_WIDGET(header_bar)); - gtk_header_bar_set_title(header_bar, "forge2d_game"); - gtk_header_bar_set_show_close_button(header_bar, TRUE); - gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); - } else { - gtk_window_set_title(window, "forge2d_game"); - } - - gtk_window_set_default_size(window, 1280, 720); - gtk_widget_show(GTK_WIDGET(window)); - - g_autoptr(FlDartProject) project = fl_dart_project_new(); - fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); - - FlView* view = fl_view_new(project); - gtk_widget_show(GTK_WIDGET(view)); - gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); - - fl_register_plugins(FL_PLUGIN_REGISTRY(view)); - - gtk_widget_grab_focus(GTK_WIDGET(view)); -} - -// Implements GApplication::local_command_line. -static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { - MyApplication* self = MY_APPLICATION(application); - // Strip out the first argument as it is the binary name. - self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); - - g_autoptr(GError) error = nullptr; - if (!g_application_register(application, nullptr, &error)) { - g_warning("Failed to register: %s", error->message); - *exit_status = 1; - return TRUE; - } - - g_application_activate(application); - *exit_status = 0; - - return TRUE; -} - -// Implements GApplication::startup. -static void my_application_startup(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application startup. - - G_APPLICATION_CLASS(my_application_parent_class)->startup(application); -} - -// Implements GApplication::shutdown. -static void my_application_shutdown(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application shutdown. - - G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); -} - -// Implements GObject::dispose. -static void my_application_dispose(GObject* object) { - MyApplication* self = MY_APPLICATION(object); - g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); - G_OBJECT_CLASS(my_application_parent_class)->dispose(object); -} - -static void my_application_class_init(MyApplicationClass* klass) { - G_APPLICATION_CLASS(klass)->activate = my_application_activate; - G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; - G_APPLICATION_CLASS(klass)->startup = my_application_startup; - G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; - G_OBJECT_CLASS(klass)->dispose = my_application_dispose; -} - -static void my_application_init(MyApplication* self) {} - -MyApplication* my_application_new() { - return MY_APPLICATION(g_object_new(my_application_get_type(), - "application-id", APPLICATION_ID, - "flags", G_APPLICATION_NON_UNIQUE, - nullptr)); -} diff --git a/forge2d_game/step_07/linux/runner/CMakeLists.txt b/forge2d_game/step_07/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/forge2d_game/step_07/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/forge2d_game/step_07/linux/main.cc b/forge2d_game/step_07/linux/runner/main.cc similarity index 100% rename from forge2d_game/step_07/linux/main.cc rename to forge2d_game/step_07/linux/runner/main.cc diff --git a/forge2d_game/step_07/linux/runner/my_application.cc b/forge2d_game/step_07/linux/runner/my_application.cc new file mode 100644 index 0000000000..9a172938c7 --- /dev/null +++ b/forge2d_game/step_07/linux/runner/my_application.cc @@ -0,0 +1,130 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "forge2d_game"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "forge2d_game"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/forge2d_game/step_07/linux/my_application.h b/forge2d_game/step_07/linux/runner/my_application.h similarity index 100% rename from forge2d_game/step_07/linux/my_application.h rename to forge2d_game/step_07/linux/runner/my_application.h diff --git a/forge2d_game/step_07/pubspec.yaml b/forge2d_game/step_07/pubspec.yaml index d3c28402fc..79bd155671 100644 --- a/forge2d_game/step_07/pubspec.yaml +++ b/forge2d_game/step_07/pubspec.yaml @@ -19,7 +19,7 @@ dependencies: dev_dependencies: flutter_test: sdk: flutter - flutter_lints: ^4.0.0 + flutter_lints: ^5.0.0 flutter: uses-material-design: true diff --git a/forge2d_game/step_07/web/index.html b/forge2d_game/step_07/web/index.html index 405c6e494e..500ab53278 100644 --- a/forge2d_game/step_07/web/index.html +++ b/forge2d_game/step_07/web/index.html @@ -21,7 +21,7 @@ - + From 8e1490edad4baf4f4cb4f3c9647fca7765369a6b Mon Sep 17 00:00:00 2001 From: Brett Morgan Date: Wed, 13 Nov 2024 11:04:47 +1100 Subject: [PATCH 045/108] Update `firebase-auth-flutterfire-ui` --- .../codelab_rebuild.yaml | 4 +- .../ios/Runner.xcodeproj/project.pbxproj | 142 +++++++++--------- .../complete/pubspec.yaml | 6 +- .../complete/web/index.html | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 138 ++++++++--------- .../start/pubspec.yaml | 6 +- .../start/web/index.html | 2 +- 7 files changed, 150 insertions(+), 150 deletions(-) diff --git a/firebase-auth-flutterfire-ui/codelab_rebuild.yaml b/firebase-auth-flutterfire-ui/codelab_rebuild.yaml index ba1f3a94c6..1998dd9d6a 100644 --- a/firebase-auth-flutterfire-ui/codelab_rebuild.yaml +++ b/firebase-auth-flutterfire-ui/codelab_rebuild.yaml @@ -204,7 +204,7 @@ steps: + + - + @@ -31,8 +33,33 @@ @@ -4896,7 +4896,7 @@ steps: +++ a/firebase-auth-flutterfire-ui/complete/web/index.html @@ -25,13 +25,13 @@ - + - + diff --git a/firebase-auth-flutterfire-ui/complete/ios/Runner.xcodeproj/project.pbxproj b/firebase-auth-flutterfire-ui/complete/ios/Runner.xcodeproj/project.pbxproj index 5d6c6a37ba..8083692142 100644 --- a/firebase-auth-flutterfire-ui/complete/ios/Runner.xcodeproj/project.pbxproj +++ b/firebase-auth-flutterfire-ui/complete/ios/Runner.xcodeproj/project.pbxproj @@ -10,12 +10,12 @@ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; - 62D22B8A112D9990C8157059 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F79465058B5E2BB1BAC34508 /* Pods_Runner.framework */; }; + 69EF89ADA82A72DA3881CDF6 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0476C85E88C31A6F565A07AF /* Pods_Runner.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - DBA385BF752C3B541EE8C5ED /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 94D7AC61F6F575395C270D20 /* Pods_RunnerTests.framework */; }; + C676BCFCC403C7BF44F00C79 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8F999D25D86BB866E9E3C49B /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,18 +42,20 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 052186F11F6A70D2D329AF86 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 0476C85E88C31A6F565A07AF /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 0ADD10ED00FC0CB63E99198E /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 110502C638D57F5328838636 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; + 55123A7016018E07052DB56D /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; - 79252337E18AC465C8D37B5E /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 803E49C6EC6F2F1E0667F4FA /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 94D7AC61F6F575395C270D20 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 855A4DC09F765371C79CEF19 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 8F999D25D86BB866E9E3C49B /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -61,26 +63,24 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - B2EA444633C17CACFFB14A86 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - BBB1589572AEE9E995E50B70 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - F79465058B5E2BB1BAC34508 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - FC061349555ED87BD5AAB958 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 9D5B5C63DA2812283B469410 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + EC1A70118CD3900BB5C1775B /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 53BB0C25D942B3D9A258E42A /* Frameworks */ = { + 97C146EB1CF9000F007C117D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - DBA385BF752C3B541EE8C5ED /* Pods_RunnerTests.framework in Frameworks */, + 69EF89ADA82A72DA3881CDF6 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 97C146EB1CF9000F007C117D /* Frameworks */ = { + DE0DCF4CF20C18D658FB7980 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 62D22B8A112D9990C8157059 /* Pods_Runner.framework in Frameworks */, + C676BCFCC403C7BF44F00C79 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -95,20 +95,6 @@ path = RunnerTests; sourceTree = ""; }; - 796E4BDC9383A1796D6E8286 /* Pods */ = { - isa = PBXGroup; - children = ( - FC061349555ED87BD5AAB958 /* Pods-Runner.debug.xcconfig */, - 803E49C6EC6F2F1E0667F4FA /* Pods-Runner.release.xcconfig */, - BBB1589572AEE9E995E50B70 /* Pods-Runner.profile.xcconfig */, - B2EA444633C17CACFFB14A86 /* Pods-RunnerTests.debug.xcconfig */, - 052186F11F6A70D2D329AF86 /* Pods-RunnerTests.release.xcconfig */, - 79252337E18AC465C8D37B5E /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( @@ -127,8 +113,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - 796E4BDC9383A1796D6E8286 /* Pods */, - C22AEA5CCEBDA18AFE0FF861 /* Frameworks */, + D254548154833717963296E9 /* Pods */, + 9D1F3FB87AD01F86FE5AAB8C /* Frameworks */, ); sourceTree = ""; }; @@ -156,15 +142,29 @@ path = Runner; sourceTree = ""; }; - C22AEA5CCEBDA18AFE0FF861 /* Frameworks */ = { + 9D1F3FB87AD01F86FE5AAB8C /* Frameworks */ = { isa = PBXGroup; children = ( - F79465058B5E2BB1BAC34508 /* Pods_Runner.framework */, - 94D7AC61F6F575395C270D20 /* Pods_RunnerTests.framework */, + 0476C85E88C31A6F565A07AF /* Pods_Runner.framework */, + 8F999D25D86BB866E9E3C49B /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; }; + D254548154833717963296E9 /* Pods */ = { + isa = PBXGroup; + children = ( + 855A4DC09F765371C79CEF19 /* Pods-Runner.debug.xcconfig */, + 110502C638D57F5328838636 /* Pods-Runner.release.xcconfig */, + 0ADD10ED00FC0CB63E99198E /* Pods-Runner.profile.xcconfig */, + EC1A70118CD3900BB5C1775B /* Pods-RunnerTests.debug.xcconfig */, + 9D5B5C63DA2812283B469410 /* Pods-RunnerTests.release.xcconfig */, + 55123A7016018E07052DB56D /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - FDC549F740CA5756E6978B2F /* [CP] Check Pods Manifest.lock */, + DFED4E6724E4877050886AC3 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 53BB0C25D942B3D9A258E42A /* Frameworks */, + DE0DCF4CF20C18D658FB7980 /* Frameworks */, ); buildRules = ( ); @@ -191,15 +191,15 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - A3E297969A045C20DEF4D6E7 /* [CP] Check Pods Manifest.lock */, + 8ED98B07ABD148701D578D93 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - AC6BF0E031C5DF0B347E4269 /* [CP] Embed Pods Frameworks */, - 16F0635085D859708DF9619C /* [CP] Copy Pods Resources */, + 4E1AF0179CC7D0A0E903F3EC /* [CP] Embed Pods Frameworks */, + D43E0DD30FFAE4BDC616FE6A /* [CP] Copy Pods Resources */, ); buildRules = ( ); @@ -271,23 +271,6 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 16F0635085D859708DF9619C /* [CP] Copy Pods Resources */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Copy Pods Resources"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n"; - showEnvVarsInLog = 0; - }; 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -304,22 +287,24 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { + 4E1AF0179CC7D0A0E903F3EC /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputPaths = ( + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "Run Script"; - outputPaths = ( + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; }; - A3E297969A045C20DEF4D6E7 /* [CP] Check Pods Manifest.lock */ = { + 8ED98B07ABD148701D578D93 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -341,24 +326,39 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - AC6BF0E031C5DF0B347E4269 /* [CP] Embed Pods Frameworks */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Run Script"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + }; + D43E0DD30FFAE4BDC616FE6A /* [CP] Copy Pods Resources */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + name = "[CP] Copy Pods Resources"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n"; showEnvVarsInLog = 0; }; - FDC549F740CA5756E6978B2F /* [CP] Check Pods Manifest.lock */ = { + DFED4E6724E4877050886AC3 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -505,7 +505,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = B2EA444633C17CACFFB14A86 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = EC1A70118CD3900BB5C1775B /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -523,7 +523,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 052186F11F6A70D2D329AF86 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 9D5B5C63DA2812283B469410 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -539,7 +539,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 79252337E18AC465C8D37B5E /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 55123A7016018E07052DB56D /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/firebase-auth-flutterfire-ui/complete/pubspec.yaml b/firebase-auth-flutterfire-ui/complete/pubspec.yaml index f06af60549..33900b1ca6 100644 --- a/firebase-auth-flutterfire-ui/complete/pubspec.yaml +++ b/firebase-auth-flutterfire-ui/complete/pubspec.yaml @@ -9,11 +9,11 @@ environment: dependencies: flutter: sdk: flutter - firebase_auth: ^5.3.1 - firebase_core: ^3.6.0 + firebase_auth: ^5.3.2 + firebase_core: ^3.7.0 firebase_ui_auth: ^1.16.0 firebase_ui_oauth_google: ^1.4.0 - google_sign_in: ^6.2.1 + google_sign_in: ^6.2.2 dev_dependencies: flutter_test: diff --git a/firebase-auth-flutterfire-ui/complete/web/index.html b/firebase-auth-flutterfire-ui/complete/web/index.html index 7731102fa6..87bbd75710 100644 --- a/firebase-auth-flutterfire-ui/complete/web/index.html +++ b/firebase-auth-flutterfire-ui/complete/web/index.html @@ -23,7 +23,7 @@ - + diff --git a/firebase-auth-flutterfire-ui/start/ios/Runner.xcodeproj/project.pbxproj b/firebase-auth-flutterfire-ui/start/ios/Runner.xcodeproj/project.pbxproj index 5291aea26a..3be689b67e 100644 --- a/firebase-auth-flutterfire-ui/start/ios/Runner.xcodeproj/project.pbxproj +++ b/firebase-auth-flutterfire-ui/start/ios/Runner.xcodeproj/project.pbxproj @@ -10,9 +10,9 @@ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; - 404DFB4241C91BE1CB9267BE /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 91B0D158B703976BE6935E27 /* Pods_Runner.framework */; }; + 443F764ED798C9DFD2B130C5 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 34D15CA8EF158803DA869A44 /* Pods_RunnerTests.framework */; }; + 4666D8422B0F2BD2E82E03BB /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D19101DE22A025570B39A7AD /* Pods_Runner.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; - 88DB9572DA82E2B639AB8711 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6AE99D215675A905D0F2A204 /* Pods_RunnerTests.framework */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; @@ -44,16 +44,17 @@ /* Begin PBXFileReference section */ 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; + 1BCC7D9445536296BC7E431F /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 34D15CA8EF158803DA869A44 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 41B1F82750F41CF1BC53C715 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 6AE99D215675A905D0F2A204 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 486DB6C37D192B38932006EA /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 54ABD578C85E930B284F041F /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; - 77E8ACB4FA744D8C324DC6F7 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 91B0D158B703976BE6935E27 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 8F0B3CD65B7069614D2B7524 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -61,18 +62,17 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - B75CA59D2070C23A598ABD65 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - C3CA379EE11C774419B0D602 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - E258D501E58476878EF7141D /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - F2D5F858D9F8B30E8AF4E0C8 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + C32AB61298A3D8DD335DE923 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + D19101DE22A025570B39A7AD /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + DF0319A8570734F490E3B177 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 12F8AD281278A4FF2E32AB5D /* Frameworks */ = { + 5EE5A4D49DB4CB9BD448C39B /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 88DB9572DA82E2B639AB8711 /* Pods_RunnerTests.framework in Frameworks */, + 443F764ED798C9DFD2B130C5 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -80,7 +80,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 404DFB4241C91BE1CB9267BE /* Pods_Runner.framework in Frameworks */, + 4666D8422B0F2BD2E82E03BB /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -95,29 +95,20 @@ path = RunnerTests; sourceTree = ""; }; - 723B6523BE4F897C7B697E66 /* Pods */ = { + 8861306E9DDF7BE1DF640380 /* Pods */ = { isa = PBXGroup; children = ( - C3CA379EE11C774419B0D602 /* Pods-Runner.debug.xcconfig */, - F2D5F858D9F8B30E8AF4E0C8 /* Pods-Runner.release.xcconfig */, - B75CA59D2070C23A598ABD65 /* Pods-Runner.profile.xcconfig */, - 41B1F82750F41CF1BC53C715 /* Pods-RunnerTests.debug.xcconfig */, - E258D501E58476878EF7141D /* Pods-RunnerTests.release.xcconfig */, - 77E8ACB4FA744D8C324DC6F7 /* Pods-RunnerTests.profile.xcconfig */, + 54ABD578C85E930B284F041F /* Pods-Runner.debug.xcconfig */, + DF0319A8570734F490E3B177 /* Pods-Runner.release.xcconfig */, + 1BCC7D9445536296BC7E431F /* Pods-Runner.profile.xcconfig */, + 8F0B3CD65B7069614D2B7524 /* Pods-RunnerTests.debug.xcconfig */, + 486DB6C37D192B38932006EA /* Pods-RunnerTests.release.xcconfig */, + C32AB61298A3D8DD335DE923 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; sourceTree = ""; }; - 95C2CDB900EC6B0BE1BDFB84 /* Frameworks */ = { - isa = PBXGroup; - children = ( - 91B0D158B703976BE6935E27 /* Pods_Runner.framework */, - 6AE99D215675A905D0F2A204 /* Pods_RunnerTests.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( @@ -136,8 +127,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - 723B6523BE4F897C7B697E66 /* Pods */, - 95C2CDB900EC6B0BE1BDFB84 /* Frameworks */, + 8861306E9DDF7BE1DF640380 /* Pods */, + A962A53FDD62F302A9B63326 /* Frameworks */, ); sourceTree = ""; }; @@ -165,6 +156,15 @@ path = Runner; sourceTree = ""; }; + A962A53FDD62F302A9B63326 /* Frameworks */ = { + isa = PBXGroup; + children = ( + D19101DE22A025570B39A7AD /* Pods_Runner.framework */, + 34D15CA8EF158803DA869A44 /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 539D7EB0A321656716812953 /* [CP] Check Pods Manifest.lock */, + 3793842EAEA0843610A7ACE1 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 12F8AD281278A4FF2E32AB5D /* Frameworks */, + 5EE5A4D49DB4CB9BD448C39B /* Frameworks */, ); buildRules = ( ); @@ -191,15 +191,15 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 42667759B05C7986D01B3386 /* [CP] Check Pods Manifest.lock */, + C0DE0A68C884B72011038EA1 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - F572C1D86990758D8A105EF3 /* [CP] Embed Pods Frameworks */, - FCBEBF6D505C904BBBF02431 /* [CP] Copy Pods Resources */, + 36013CABA6004AC7677B624D /* [CP] Embed Pods Frameworks */, + A7E66519D960BCAD7A7E0E96 /* [CP] Copy Pods Resources */, ); buildRules = ( ); @@ -271,23 +271,24 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + 36013CABA6004AC7677B624D /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputPaths = ( - "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "Thin Binary"; - outputPaths = ( + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; }; - 42667759B05C7986D01B3386 /* [CP] Check Pods Manifest.lock */ = { + 3793842EAEA0843610A7ACE1 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -302,34 +303,28 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 539D7EB0A321656716812953 /* [CP] Check Pods Manifest.lock */ = { + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); + name = "Thin Binary"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; @@ -346,38 +341,43 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - F572C1D86990758D8A105EF3 /* [CP] Embed Pods Frameworks */ = { + A7E66519D960BCAD7A7E0E96 /* [CP] Copy Pods Resources */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + name = "[CP] Copy Pods Resources"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n"; showEnvVarsInLog = 0; }; - FCBEBF6D505C904BBBF02431 /* [CP] Copy Pods Resources */ = { + C0DE0A68C884B72011038EA1 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Copy Pods Resources"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -505,7 +505,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 41B1F82750F41CF1BC53C715 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 8F0B3CD65B7069614D2B7524 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -523,7 +523,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = E258D501E58476878EF7141D /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 486DB6C37D192B38932006EA /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -539,7 +539,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 77E8ACB4FA744D8C324DC6F7 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = C32AB61298A3D8DD335DE923 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/firebase-auth-flutterfire-ui/start/pubspec.yaml b/firebase-auth-flutterfire-ui/start/pubspec.yaml index 39808e764b..5b575a71bc 100644 --- a/firebase-auth-flutterfire-ui/start/pubspec.yaml +++ b/firebase-auth-flutterfire-ui/start/pubspec.yaml @@ -9,11 +9,11 @@ environment: dependencies: flutter: sdk: flutter - firebase_auth: ^5.3.1 - firebase_core: ^3.6.0 + firebase_auth: ^5.3.2 + firebase_core: ^3.7.0 firebase_ui_auth: ^1.16.0 firebase_ui_oauth_google: ^1.4.0 - google_sign_in: ^6.2.1 + google_sign_in: ^6.2.2 dev_dependencies: flutter_test: diff --git a/firebase-auth-flutterfire-ui/start/web/index.html b/firebase-auth-flutterfire-ui/start/web/index.html index d9f46749a0..ad0866ad8d 100644 --- a/firebase-auth-flutterfire-ui/start/web/index.html +++ b/firebase-auth-flutterfire-ui/start/web/index.html @@ -23,7 +23,7 @@ - + From 21723d3492d910d16b81bb9624531ede0379af4a Mon Sep 17 00:00:00 2001 From: Brett Morgan Date: Wed, 13 Nov 2024 11:17:00 +1100 Subject: [PATCH 046/108] Update `generate_crossword` --- generate_crossword/step_02/pubspec.yaml | 6 +++--- generate_crossword/step_03/pubspec.yaml | 6 +++--- generate_crossword/step_04/pubspec.yaml | 6 +++--- generate_crossword/step_05_a/pubspec.yaml | 6 +++--- generate_crossword/step_05_b/pubspec.yaml | 6 +++--- generate_crossword/step_05_c/pubspec.yaml | 6 +++--- generate_crossword/step_06/pubspec.yaml | 6 +++--- generate_crossword/step_07/pubspec.yaml | 6 +++--- generate_crossword/step_08/pubspec.yaml | 6 +++--- generate_crossword/step_09/pubspec.yaml | 6 +++--- 10 files changed, 30 insertions(+), 30 deletions(-) diff --git a/generate_crossword/step_02/pubspec.yaml b/generate_crossword/step_02/pubspec.yaml index 8bb5dfe238..197d2c7ada 100644 --- a/generate_crossword/step_02/pubspec.yaml +++ b/generate_crossword/step_02/pubspec.yaml @@ -24,9 +24,9 @@ dev_dependencies: flutter_lints: ^5.0.0 build_runner: ^2.4.13 built_value_generator: ^8.9.2 - custom_lint: ^0.6.10 - riverpod_generator: ^2.6.1 - riverpod_lint: ^2.6.1 + custom_lint: ^0.7.0 + riverpod_generator: ^2.6.2 + riverpod_lint: ^2.6.2 flutter: uses-material-design: true diff --git a/generate_crossword/step_03/pubspec.yaml b/generate_crossword/step_03/pubspec.yaml index d2de9bff3c..cb8178f942 100644 --- a/generate_crossword/step_03/pubspec.yaml +++ b/generate_crossword/step_03/pubspec.yaml @@ -24,9 +24,9 @@ dev_dependencies: flutter_lints: ^5.0.0 build_runner: ^2.4.13 built_value_generator: ^8.9.2 - custom_lint: ^0.6.10 - riverpod_generator: ^2.6.1 - riverpod_lint: ^2.6.1 + custom_lint: ^0.7.0 + riverpod_generator: ^2.6.2 + riverpod_lint: ^2.6.2 flutter: uses-material-design: true diff --git a/generate_crossword/step_04/pubspec.yaml b/generate_crossword/step_04/pubspec.yaml index d2de9bff3c..cb8178f942 100644 --- a/generate_crossword/step_04/pubspec.yaml +++ b/generate_crossword/step_04/pubspec.yaml @@ -24,9 +24,9 @@ dev_dependencies: flutter_lints: ^5.0.0 build_runner: ^2.4.13 built_value_generator: ^8.9.2 - custom_lint: ^0.6.10 - riverpod_generator: ^2.6.1 - riverpod_lint: ^2.6.1 + custom_lint: ^0.7.0 + riverpod_generator: ^2.6.2 + riverpod_lint: ^2.6.2 flutter: uses-material-design: true diff --git a/generate_crossword/step_05_a/pubspec.yaml b/generate_crossword/step_05_a/pubspec.yaml index d2de9bff3c..cb8178f942 100644 --- a/generate_crossword/step_05_a/pubspec.yaml +++ b/generate_crossword/step_05_a/pubspec.yaml @@ -24,9 +24,9 @@ dev_dependencies: flutter_lints: ^5.0.0 build_runner: ^2.4.13 built_value_generator: ^8.9.2 - custom_lint: ^0.6.10 - riverpod_generator: ^2.6.1 - riverpod_lint: ^2.6.1 + custom_lint: ^0.7.0 + riverpod_generator: ^2.6.2 + riverpod_lint: ^2.6.2 flutter: uses-material-design: true diff --git a/generate_crossword/step_05_b/pubspec.yaml b/generate_crossword/step_05_b/pubspec.yaml index d2de9bff3c..cb8178f942 100644 --- a/generate_crossword/step_05_b/pubspec.yaml +++ b/generate_crossword/step_05_b/pubspec.yaml @@ -24,9 +24,9 @@ dev_dependencies: flutter_lints: ^5.0.0 build_runner: ^2.4.13 built_value_generator: ^8.9.2 - custom_lint: ^0.6.10 - riverpod_generator: ^2.6.1 - riverpod_lint: ^2.6.1 + custom_lint: ^0.7.0 + riverpod_generator: ^2.6.2 + riverpod_lint: ^2.6.2 flutter: uses-material-design: true diff --git a/generate_crossword/step_05_c/pubspec.yaml b/generate_crossword/step_05_c/pubspec.yaml index d2de9bff3c..cb8178f942 100644 --- a/generate_crossword/step_05_c/pubspec.yaml +++ b/generate_crossword/step_05_c/pubspec.yaml @@ -24,9 +24,9 @@ dev_dependencies: flutter_lints: ^5.0.0 build_runner: ^2.4.13 built_value_generator: ^8.9.2 - custom_lint: ^0.6.10 - riverpod_generator: ^2.6.1 - riverpod_lint: ^2.6.1 + custom_lint: ^0.7.0 + riverpod_generator: ^2.6.2 + riverpod_lint: ^2.6.2 flutter: uses-material-design: true diff --git a/generate_crossword/step_06/pubspec.yaml b/generate_crossword/step_06/pubspec.yaml index d2de9bff3c..cb8178f942 100644 --- a/generate_crossword/step_06/pubspec.yaml +++ b/generate_crossword/step_06/pubspec.yaml @@ -24,9 +24,9 @@ dev_dependencies: flutter_lints: ^5.0.0 build_runner: ^2.4.13 built_value_generator: ^8.9.2 - custom_lint: ^0.6.10 - riverpod_generator: ^2.6.1 - riverpod_lint: ^2.6.1 + custom_lint: ^0.7.0 + riverpod_generator: ^2.6.2 + riverpod_lint: ^2.6.2 flutter: uses-material-design: true diff --git a/generate_crossword/step_07/pubspec.yaml b/generate_crossword/step_07/pubspec.yaml index d2de9bff3c..cb8178f942 100644 --- a/generate_crossword/step_07/pubspec.yaml +++ b/generate_crossword/step_07/pubspec.yaml @@ -24,9 +24,9 @@ dev_dependencies: flutter_lints: ^5.0.0 build_runner: ^2.4.13 built_value_generator: ^8.9.2 - custom_lint: ^0.6.10 - riverpod_generator: ^2.6.1 - riverpod_lint: ^2.6.1 + custom_lint: ^0.7.0 + riverpod_generator: ^2.6.2 + riverpod_lint: ^2.6.2 flutter: uses-material-design: true diff --git a/generate_crossword/step_08/pubspec.yaml b/generate_crossword/step_08/pubspec.yaml index d2de9bff3c..cb8178f942 100644 --- a/generate_crossword/step_08/pubspec.yaml +++ b/generate_crossword/step_08/pubspec.yaml @@ -24,9 +24,9 @@ dev_dependencies: flutter_lints: ^5.0.0 build_runner: ^2.4.13 built_value_generator: ^8.9.2 - custom_lint: ^0.6.10 - riverpod_generator: ^2.6.1 - riverpod_lint: ^2.6.1 + custom_lint: ^0.7.0 + riverpod_generator: ^2.6.2 + riverpod_lint: ^2.6.2 flutter: uses-material-design: true diff --git a/generate_crossword/step_09/pubspec.yaml b/generate_crossword/step_09/pubspec.yaml index d2de9bff3c..cb8178f942 100644 --- a/generate_crossword/step_09/pubspec.yaml +++ b/generate_crossword/step_09/pubspec.yaml @@ -24,9 +24,9 @@ dev_dependencies: flutter_lints: ^5.0.0 build_runner: ^2.4.13 built_value_generator: ^8.9.2 - custom_lint: ^0.6.10 - riverpod_generator: ^2.6.1 - riverpod_lint: ^2.6.1 + custom_lint: ^0.7.0 + riverpod_generator: ^2.6.2 + riverpod_lint: ^2.6.2 flutter: uses-material-design: true From da1c25ead4079606a81637e56b9dab8fb762436b Mon Sep 17 00:00:00 2001 From: Brett Morgan Date: Wed, 13 Nov 2024 11:20:24 +1100 Subject: [PATCH 047/108] Update `github_client` --- github-client/step_03/linux/CMakeLists.txt | 23 +--- .../step_03/linux/runner/CMakeLists.txt | 26 ++++ .../step_03/linux/{ => runner}/main.cc | 0 .../linux/{ => runner}/my_application.cc | 6 + .../linux/{ => runner}/my_application.h | 0 github-client/step_03/pubspec.yaml | 1 - github-client/step_04/linux/CMakeLists.txt | 23 +--- .../step_04/linux/runner/CMakeLists.txt | 26 ++++ .../step_04/linux/{ => runner}/main.cc | 0 .../linux/{ => runner}/my_application.cc | 6 + .../linux/{ => runner}/my_application.h | 0 .../macos/Runner.xcodeproj/project.pbxproj | 114 +++++++-------- github-client/step_04/pubspec.yaml | 1 - github-client/step_05/linux/CMakeLists.txt | 23 +--- .../step_05/linux/runner/CMakeLists.txt | 26 ++++ .../step_05/linux/{ => runner}/main.cc | 0 .../linux/{ => runner}/my_application.cc | 6 + .../linux/{ => runner}/my_application.h | 0 .../macos/Runner.xcodeproj/project.pbxproj | 114 +++++++-------- github-client/step_05/pubspec.yaml | 1 - github-client/step_06/linux/CMakeLists.txt | 23 +--- .../step_06/linux/runner/CMakeLists.txt | 26 ++++ .../step_06/linux/{ => runner}/main.cc | 0 .../linux/{ => runner}/my_application.cc | 6 + .../linux/{ => runner}/my_application.h | 0 .../macos/Runner.xcodeproj/project.pbxproj | 114 +++++++-------- github-client/step_06/pubspec.yaml | 1 - github-client/step_07/linux/CMakeLists.txt | 23 +--- github-client/step_07/linux/my_application.cc | 124 ----------------- .../step_07/linux/runner/CMakeLists.txt | 26 ++++ .../step_07/linux/{ => runner}/main.cc | 0 .../step_07/linux/runner/my_application.cc | 130 ++++++++++++++++++ .../linux/{ => runner}/my_application.h | 0 .../macos/Runner.xcodeproj/project.pbxproj | 114 +++++++-------- github-client/step_07/pubspec.yaml | 1 - .../macos/Resources/PrivacyInfo.xcprivacy | 12 ++ .../macos/window_to_front.podspec | 7 + 37 files changed, 546 insertions(+), 457 deletions(-) create mode 100644 github-client/step_03/linux/runner/CMakeLists.txt rename github-client/step_03/linux/{ => runner}/main.cc (100%) rename github-client/step_03/linux/{ => runner}/my_application.cc (93%) rename github-client/step_03/linux/{ => runner}/my_application.h (100%) create mode 100644 github-client/step_04/linux/runner/CMakeLists.txt rename github-client/step_04/linux/{ => runner}/main.cc (100%) rename github-client/step_04/linux/{ => runner}/my_application.cc (93%) rename github-client/step_04/linux/{ => runner}/my_application.h (100%) create mode 100644 github-client/step_05/linux/runner/CMakeLists.txt rename github-client/step_05/linux/{ => runner}/main.cc (100%) rename github-client/step_05/linux/{ => runner}/my_application.cc (93%) rename github-client/step_05/linux/{ => runner}/my_application.h (100%) create mode 100644 github-client/step_06/linux/runner/CMakeLists.txt rename github-client/step_06/linux/{ => runner}/main.cc (100%) rename github-client/step_06/linux/{ => runner}/my_application.cc (93%) rename github-client/step_06/linux/{ => runner}/my_application.h (100%) delete mode 100644 github-client/step_07/linux/my_application.cc create mode 100644 github-client/step_07/linux/runner/CMakeLists.txt rename github-client/step_07/linux/{ => runner}/main.cc (100%) create mode 100644 github-client/step_07/linux/runner/my_application.cc rename github-client/step_07/linux/{ => runner}/my_application.h (100%) create mode 100644 github-client/window_to_front/macos/Resources/PrivacyInfo.xcprivacy diff --git a/github-client/step_03/linux/CMakeLists.txt b/github-client/step_03/linux/CMakeLists.txt index 0f055d8f18..255a60323d 100644 --- a/github-client/step_03/linux/CMakeLists.txt +++ b/github-client/step_03/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/github-client/step_03/linux/runner/CMakeLists.txt b/github-client/step_03/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/github-client/step_03/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/github-client/step_03/linux/main.cc b/github-client/step_03/linux/runner/main.cc similarity index 100% rename from github-client/step_03/linux/main.cc rename to github-client/step_03/linux/runner/main.cc diff --git a/github-client/step_03/linux/my_application.cc b/github-client/step_03/linux/runner/my_application.cc similarity index 93% rename from github-client/step_03/linux/my_application.cc rename to github-client/step_03/linux/runner/my_application.cc index ddb1fa01ca..07d3dc6a33 100644 --- a/github-client/step_03/linux/my_application.cc +++ b/github-client/step_03/linux/runner/my_application.cc @@ -117,6 +117,12 @@ static void my_application_class_init(MyApplicationClass* klass) { static void my_application_init(MyApplication* self) {} MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + return MY_APPLICATION(g_object_new(my_application_get_type(), "application-id", APPLICATION_ID, "flags", G_APPLICATION_NON_UNIQUE, diff --git a/github-client/step_03/linux/my_application.h b/github-client/step_03/linux/runner/my_application.h similarity index 100% rename from github-client/step_03/linux/my_application.h rename to github-client/step_03/linux/runner/my_application.h diff --git a/github-client/step_03/pubspec.yaml b/github-client/step_03/pubspec.yaml index 4058aacc8f..b4d57826a5 100644 --- a/github-client/step_03/pubspec.yaml +++ b/github-client/step_03/pubspec.yaml @@ -31,7 +31,6 @@ dependencies: flutter: sdk: flutter - # The following adds the Cupertino Icons font to your application. # Use with the CupertinoIcons class for iOS style icons. cupertino_icons: ^1.0.8 diff --git a/github-client/step_04/linux/CMakeLists.txt b/github-client/step_04/linux/CMakeLists.txt index 0f055d8f18..255a60323d 100644 --- a/github-client/step_04/linux/CMakeLists.txt +++ b/github-client/step_04/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/github-client/step_04/linux/runner/CMakeLists.txt b/github-client/step_04/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/github-client/step_04/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/github-client/step_04/linux/main.cc b/github-client/step_04/linux/runner/main.cc similarity index 100% rename from github-client/step_04/linux/main.cc rename to github-client/step_04/linux/runner/main.cc diff --git a/github-client/step_04/linux/my_application.cc b/github-client/step_04/linux/runner/my_application.cc similarity index 93% rename from github-client/step_04/linux/my_application.cc rename to github-client/step_04/linux/runner/my_application.cc index ddb1fa01ca..07d3dc6a33 100644 --- a/github-client/step_04/linux/my_application.cc +++ b/github-client/step_04/linux/runner/my_application.cc @@ -117,6 +117,12 @@ static void my_application_class_init(MyApplicationClass* klass) { static void my_application_init(MyApplication* self) {} MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + return MY_APPLICATION(g_object_new(my_application_get_type(), "application-id", APPLICATION_ID, "flags", G_APPLICATION_NON_UNIQUE, diff --git a/github-client/step_04/linux/my_application.h b/github-client/step_04/linux/runner/my_application.h similarity index 100% rename from github-client/step_04/linux/my_application.h rename to github-client/step_04/linux/runner/my_application.h diff --git a/github-client/step_04/macos/Runner.xcodeproj/project.pbxproj b/github-client/step_04/macos/Runner.xcodeproj/project.pbxproj index d5ff68ba5d..9c547ced8c 100644 --- a/github-client/step_04/macos/Runner.xcodeproj/project.pbxproj +++ b/github-client/step_04/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ - 0946E2799DE0A59CB7358911 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 08CEF5CD328AFD86D5CEBAFE /* Pods_RunnerTests.framework */; }; + 302773E1AEE43F058B27E47E /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B74A8B2F285D5B191087173B /* Pods_Runner.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - CDD74361318F0EC8CD4FE27A /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2FEEE168DC0B35E320DA0BEC /* Pods_Runner.framework */; }; + ECAF2AB7EA1C06DA530A51CE /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FE8C391B092623A44BF6FE36 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,10 +62,8 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 08CEF5CD328AFD86D5CEBAFE /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 1C8A255B6AD66CD525D09CFE /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - 2CBB88C47DC5B271C996602F /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - 2FEEE168DC0B35E320DA0BEC /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 2087AEE23C5C318CFCFDC00B /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 219F633DE5BEABF086F4C06A /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -82,12 +80,14 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 40C998280C91B1859A8FC1AD /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 368FAF2B4663B14E56BE757B /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 8C1C90B1873B2D3753EC80D6 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - 9EEC144CCD91A3CED313F52F /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - CE8E57BFB22132959266F9FB /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + A84A6122508992F73FD579BF /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + B74A8B2F285D5B191087173B /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + C7555FBA428DB388D97A495B /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + EA699ECC9DACD6A7CFAE2B74 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + FE8C391B092623A44BF6FE36 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 0946E2799DE0A59CB7358911 /* Pods_RunnerTests.framework in Frameworks */, + ECAF2AB7EA1C06DA530A51CE /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,7 +103,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - CDD74361318F0EC8CD4FE27A /* Pods_Runner.framework in Frameworks */, + 302773E1AEE43F058B27E47E /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -137,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - BF572836E3F26F7228BC0732 /* Pods */, + 613D46063BF07D19DF03D025 /* Pods */, ); sourceTree = ""; }; @@ -185,15 +185,15 @@ path = Runner; sourceTree = ""; }; - BF572836E3F26F7228BC0732 /* Pods */ = { + 613D46063BF07D19DF03D025 /* Pods */ = { isa = PBXGroup; children = ( - 40C998280C91B1859A8FC1AD /* Pods-Runner.debug.xcconfig */, - 8C1C90B1873B2D3753EC80D6 /* Pods-Runner.release.xcconfig */, - 1C8A255B6AD66CD525D09CFE /* Pods-Runner.profile.xcconfig */, - 9EEC144CCD91A3CED313F52F /* Pods-RunnerTests.debug.xcconfig */, - CE8E57BFB22132959266F9FB /* Pods-RunnerTests.release.xcconfig */, - 2CBB88C47DC5B271C996602F /* Pods-RunnerTests.profile.xcconfig */, + 368FAF2B4663B14E56BE757B /* Pods-Runner.debug.xcconfig */, + 219F633DE5BEABF086F4C06A /* Pods-Runner.release.xcconfig */, + EA699ECC9DACD6A7CFAE2B74 /* Pods-Runner.profile.xcconfig */, + 2087AEE23C5C318CFCFDC00B /* Pods-RunnerTests.debug.xcconfig */, + A84A6122508992F73FD579BF /* Pods-RunnerTests.release.xcconfig */, + C7555FBA428DB388D97A495B /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -202,8 +202,8 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - 2FEEE168DC0B35E320DA0BEC /* Pods_Runner.framework */, - 08CEF5CD328AFD86D5CEBAFE /* Pods_RunnerTests.framework */, + B74A8B2F285D5B191087173B /* Pods_Runner.framework */, + FE8C391B092623A44BF6FE36 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 9CD1CF7C425C9F14158A0F65 /* [CP] Check Pods Manifest.lock */, + 1BBB1539B6F2B069E29309AD /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 569E096BB5DFDB3FFC2AC78F /* [CP] Check Pods Manifest.lock */, + F4AE982DDE29CB666CD5E9FF /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - B9F959D3AF0503D111F56672 /* [CP] Embed Pods Frameworks */, + BC6732D8A6B4C5F75ED1D31F /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,6 +323,28 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ + 1BBB1539B6F2B069E29309AD /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -361,29 +383,24 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 569E096BB5DFDB3FFC2AC78F /* [CP] Check Pods Manifest.lock */ = { + BC6732D8A6B4C5F75ED1D31F /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - 9CD1CF7C425C9F14158A0F65 /* [CP] Check Pods Manifest.lock */ = { + F4AE982DDE29CB666CD5E9FF /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -398,30 +415,13 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - B9F959D3AF0503D111F56672 /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 9EEC144CCD91A3CED313F52F /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 2087AEE23C5C318CFCFDC00B /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = CE8E57BFB22132959266F9FB /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = A84A6122508992F73FD579BF /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 2CBB88C47DC5B271C996602F /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = C7555FBA428DB388D97A495B /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/github-client/step_04/pubspec.yaml b/github-client/step_04/pubspec.yaml index 414b6a558f..5a4f3b3c2b 100644 --- a/github-client/step_04/pubspec.yaml +++ b/github-client/step_04/pubspec.yaml @@ -31,7 +31,6 @@ dependencies: flutter: sdk: flutter - # The following adds the Cupertino Icons font to your application. # Use with the CupertinoIcons class for iOS style icons. cupertino_icons: ^1.0.8 diff --git a/github-client/step_05/linux/CMakeLists.txt b/github-client/step_05/linux/CMakeLists.txt index 0f055d8f18..255a60323d 100644 --- a/github-client/step_05/linux/CMakeLists.txt +++ b/github-client/step_05/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/github-client/step_05/linux/runner/CMakeLists.txt b/github-client/step_05/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/github-client/step_05/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/github-client/step_05/linux/main.cc b/github-client/step_05/linux/runner/main.cc similarity index 100% rename from github-client/step_05/linux/main.cc rename to github-client/step_05/linux/runner/main.cc diff --git a/github-client/step_05/linux/my_application.cc b/github-client/step_05/linux/runner/my_application.cc similarity index 93% rename from github-client/step_05/linux/my_application.cc rename to github-client/step_05/linux/runner/my_application.cc index ddb1fa01ca..07d3dc6a33 100644 --- a/github-client/step_05/linux/my_application.cc +++ b/github-client/step_05/linux/runner/my_application.cc @@ -117,6 +117,12 @@ static void my_application_class_init(MyApplicationClass* klass) { static void my_application_init(MyApplication* self) {} MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + return MY_APPLICATION(g_object_new(my_application_get_type(), "application-id", APPLICATION_ID, "flags", G_APPLICATION_NON_UNIQUE, diff --git a/github-client/step_05/linux/my_application.h b/github-client/step_05/linux/runner/my_application.h similarity index 100% rename from github-client/step_05/linux/my_application.h rename to github-client/step_05/linux/runner/my_application.h diff --git a/github-client/step_05/macos/Runner.xcodeproj/project.pbxproj b/github-client/step_05/macos/Runner.xcodeproj/project.pbxproj index d5ff68ba5d..9c547ced8c 100644 --- a/github-client/step_05/macos/Runner.xcodeproj/project.pbxproj +++ b/github-client/step_05/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ - 0946E2799DE0A59CB7358911 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 08CEF5CD328AFD86D5CEBAFE /* Pods_RunnerTests.framework */; }; + 302773E1AEE43F058B27E47E /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B74A8B2F285D5B191087173B /* Pods_Runner.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - CDD74361318F0EC8CD4FE27A /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2FEEE168DC0B35E320DA0BEC /* Pods_Runner.framework */; }; + ECAF2AB7EA1C06DA530A51CE /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FE8C391B092623A44BF6FE36 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,10 +62,8 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 08CEF5CD328AFD86D5CEBAFE /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 1C8A255B6AD66CD525D09CFE /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - 2CBB88C47DC5B271C996602F /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - 2FEEE168DC0B35E320DA0BEC /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 2087AEE23C5C318CFCFDC00B /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 219F633DE5BEABF086F4C06A /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -82,12 +80,14 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 40C998280C91B1859A8FC1AD /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 368FAF2B4663B14E56BE757B /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 8C1C90B1873B2D3753EC80D6 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - 9EEC144CCD91A3CED313F52F /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - CE8E57BFB22132959266F9FB /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + A84A6122508992F73FD579BF /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + B74A8B2F285D5B191087173B /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + C7555FBA428DB388D97A495B /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + EA699ECC9DACD6A7CFAE2B74 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + FE8C391B092623A44BF6FE36 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 0946E2799DE0A59CB7358911 /* Pods_RunnerTests.framework in Frameworks */, + ECAF2AB7EA1C06DA530A51CE /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,7 +103,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - CDD74361318F0EC8CD4FE27A /* Pods_Runner.framework in Frameworks */, + 302773E1AEE43F058B27E47E /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -137,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - BF572836E3F26F7228BC0732 /* Pods */, + 613D46063BF07D19DF03D025 /* Pods */, ); sourceTree = ""; }; @@ -185,15 +185,15 @@ path = Runner; sourceTree = ""; }; - BF572836E3F26F7228BC0732 /* Pods */ = { + 613D46063BF07D19DF03D025 /* Pods */ = { isa = PBXGroup; children = ( - 40C998280C91B1859A8FC1AD /* Pods-Runner.debug.xcconfig */, - 8C1C90B1873B2D3753EC80D6 /* Pods-Runner.release.xcconfig */, - 1C8A255B6AD66CD525D09CFE /* Pods-Runner.profile.xcconfig */, - 9EEC144CCD91A3CED313F52F /* Pods-RunnerTests.debug.xcconfig */, - CE8E57BFB22132959266F9FB /* Pods-RunnerTests.release.xcconfig */, - 2CBB88C47DC5B271C996602F /* Pods-RunnerTests.profile.xcconfig */, + 368FAF2B4663B14E56BE757B /* Pods-Runner.debug.xcconfig */, + 219F633DE5BEABF086F4C06A /* Pods-Runner.release.xcconfig */, + EA699ECC9DACD6A7CFAE2B74 /* Pods-Runner.profile.xcconfig */, + 2087AEE23C5C318CFCFDC00B /* Pods-RunnerTests.debug.xcconfig */, + A84A6122508992F73FD579BF /* Pods-RunnerTests.release.xcconfig */, + C7555FBA428DB388D97A495B /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -202,8 +202,8 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - 2FEEE168DC0B35E320DA0BEC /* Pods_Runner.framework */, - 08CEF5CD328AFD86D5CEBAFE /* Pods_RunnerTests.framework */, + B74A8B2F285D5B191087173B /* Pods_Runner.framework */, + FE8C391B092623A44BF6FE36 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 9CD1CF7C425C9F14158A0F65 /* [CP] Check Pods Manifest.lock */, + 1BBB1539B6F2B069E29309AD /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 569E096BB5DFDB3FFC2AC78F /* [CP] Check Pods Manifest.lock */, + F4AE982DDE29CB666CD5E9FF /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - B9F959D3AF0503D111F56672 /* [CP] Embed Pods Frameworks */, + BC6732D8A6B4C5F75ED1D31F /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,6 +323,28 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ + 1BBB1539B6F2B069E29309AD /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -361,29 +383,24 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 569E096BB5DFDB3FFC2AC78F /* [CP] Check Pods Manifest.lock */ = { + BC6732D8A6B4C5F75ED1D31F /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - 9CD1CF7C425C9F14158A0F65 /* [CP] Check Pods Manifest.lock */ = { + F4AE982DDE29CB666CD5E9FF /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -398,30 +415,13 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - B9F959D3AF0503D111F56672 /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 9EEC144CCD91A3CED313F52F /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 2087AEE23C5C318CFCFDC00B /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = CE8E57BFB22132959266F9FB /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = A84A6122508992F73FD579BF /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 2CBB88C47DC5B271C996602F /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = C7555FBA428DB388D97A495B /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/github-client/step_05/pubspec.yaml b/github-client/step_05/pubspec.yaml index 9915695eca..71e3e689ce 100644 --- a/github-client/step_05/pubspec.yaml +++ b/github-client/step_05/pubspec.yaml @@ -31,7 +31,6 @@ dependencies: flutter: sdk: flutter - # The following adds the Cupertino Icons font to your application. # Use with the CupertinoIcons class for iOS style icons. cupertino_icons: ^1.0.8 diff --git a/github-client/step_06/linux/CMakeLists.txt b/github-client/step_06/linux/CMakeLists.txt index 0f055d8f18..255a60323d 100644 --- a/github-client/step_06/linux/CMakeLists.txt +++ b/github-client/step_06/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/github-client/step_06/linux/runner/CMakeLists.txt b/github-client/step_06/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/github-client/step_06/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/github-client/step_06/linux/main.cc b/github-client/step_06/linux/runner/main.cc similarity index 100% rename from github-client/step_06/linux/main.cc rename to github-client/step_06/linux/runner/main.cc diff --git a/github-client/step_06/linux/my_application.cc b/github-client/step_06/linux/runner/my_application.cc similarity index 93% rename from github-client/step_06/linux/my_application.cc rename to github-client/step_06/linux/runner/my_application.cc index ddb1fa01ca..07d3dc6a33 100644 --- a/github-client/step_06/linux/my_application.cc +++ b/github-client/step_06/linux/runner/my_application.cc @@ -117,6 +117,12 @@ static void my_application_class_init(MyApplicationClass* klass) { static void my_application_init(MyApplication* self) {} MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + return MY_APPLICATION(g_object_new(my_application_get_type(), "application-id", APPLICATION_ID, "flags", G_APPLICATION_NON_UNIQUE, diff --git a/github-client/step_06/linux/my_application.h b/github-client/step_06/linux/runner/my_application.h similarity index 100% rename from github-client/step_06/linux/my_application.h rename to github-client/step_06/linux/runner/my_application.h diff --git a/github-client/step_06/macos/Runner.xcodeproj/project.pbxproj b/github-client/step_06/macos/Runner.xcodeproj/project.pbxproj index d5ff68ba5d..9c547ced8c 100644 --- a/github-client/step_06/macos/Runner.xcodeproj/project.pbxproj +++ b/github-client/step_06/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ - 0946E2799DE0A59CB7358911 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 08CEF5CD328AFD86D5CEBAFE /* Pods_RunnerTests.framework */; }; + 302773E1AEE43F058B27E47E /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B74A8B2F285D5B191087173B /* Pods_Runner.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - CDD74361318F0EC8CD4FE27A /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2FEEE168DC0B35E320DA0BEC /* Pods_Runner.framework */; }; + ECAF2AB7EA1C06DA530A51CE /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FE8C391B092623A44BF6FE36 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,10 +62,8 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 08CEF5CD328AFD86D5CEBAFE /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 1C8A255B6AD66CD525D09CFE /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - 2CBB88C47DC5B271C996602F /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - 2FEEE168DC0B35E320DA0BEC /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 2087AEE23C5C318CFCFDC00B /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 219F633DE5BEABF086F4C06A /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -82,12 +80,14 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 40C998280C91B1859A8FC1AD /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 368FAF2B4663B14E56BE757B /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 8C1C90B1873B2D3753EC80D6 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - 9EEC144CCD91A3CED313F52F /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - CE8E57BFB22132959266F9FB /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + A84A6122508992F73FD579BF /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + B74A8B2F285D5B191087173B /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + C7555FBA428DB388D97A495B /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + EA699ECC9DACD6A7CFAE2B74 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + FE8C391B092623A44BF6FE36 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 0946E2799DE0A59CB7358911 /* Pods_RunnerTests.framework in Frameworks */, + ECAF2AB7EA1C06DA530A51CE /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,7 +103,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - CDD74361318F0EC8CD4FE27A /* Pods_Runner.framework in Frameworks */, + 302773E1AEE43F058B27E47E /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -137,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - BF572836E3F26F7228BC0732 /* Pods */, + 613D46063BF07D19DF03D025 /* Pods */, ); sourceTree = ""; }; @@ -185,15 +185,15 @@ path = Runner; sourceTree = ""; }; - BF572836E3F26F7228BC0732 /* Pods */ = { + 613D46063BF07D19DF03D025 /* Pods */ = { isa = PBXGroup; children = ( - 40C998280C91B1859A8FC1AD /* Pods-Runner.debug.xcconfig */, - 8C1C90B1873B2D3753EC80D6 /* Pods-Runner.release.xcconfig */, - 1C8A255B6AD66CD525D09CFE /* Pods-Runner.profile.xcconfig */, - 9EEC144CCD91A3CED313F52F /* Pods-RunnerTests.debug.xcconfig */, - CE8E57BFB22132959266F9FB /* Pods-RunnerTests.release.xcconfig */, - 2CBB88C47DC5B271C996602F /* Pods-RunnerTests.profile.xcconfig */, + 368FAF2B4663B14E56BE757B /* Pods-Runner.debug.xcconfig */, + 219F633DE5BEABF086F4C06A /* Pods-Runner.release.xcconfig */, + EA699ECC9DACD6A7CFAE2B74 /* Pods-Runner.profile.xcconfig */, + 2087AEE23C5C318CFCFDC00B /* Pods-RunnerTests.debug.xcconfig */, + A84A6122508992F73FD579BF /* Pods-RunnerTests.release.xcconfig */, + C7555FBA428DB388D97A495B /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -202,8 +202,8 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - 2FEEE168DC0B35E320DA0BEC /* Pods_Runner.framework */, - 08CEF5CD328AFD86D5CEBAFE /* Pods_RunnerTests.framework */, + B74A8B2F285D5B191087173B /* Pods_Runner.framework */, + FE8C391B092623A44BF6FE36 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 9CD1CF7C425C9F14158A0F65 /* [CP] Check Pods Manifest.lock */, + 1BBB1539B6F2B069E29309AD /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 569E096BB5DFDB3FFC2AC78F /* [CP] Check Pods Manifest.lock */, + F4AE982DDE29CB666CD5E9FF /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - B9F959D3AF0503D111F56672 /* [CP] Embed Pods Frameworks */, + BC6732D8A6B4C5F75ED1D31F /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,6 +323,28 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ + 1BBB1539B6F2B069E29309AD /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -361,29 +383,24 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 569E096BB5DFDB3FFC2AC78F /* [CP] Check Pods Manifest.lock */ = { + BC6732D8A6B4C5F75ED1D31F /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - 9CD1CF7C425C9F14158A0F65 /* [CP] Check Pods Manifest.lock */ = { + F4AE982DDE29CB666CD5E9FF /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -398,30 +415,13 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - B9F959D3AF0503D111F56672 /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 9EEC144CCD91A3CED313F52F /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 2087AEE23C5C318CFCFDC00B /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = CE8E57BFB22132959266F9FB /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = A84A6122508992F73FD579BF /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 2CBB88C47DC5B271C996602F /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = C7555FBA428DB388D97A495B /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/github-client/step_06/pubspec.yaml b/github-client/step_06/pubspec.yaml index 95fa5b95a8..55e6a59332 100644 --- a/github-client/step_06/pubspec.yaml +++ b/github-client/step_06/pubspec.yaml @@ -31,7 +31,6 @@ dependencies: flutter: sdk: flutter - # The following adds the Cupertino Icons font to your application. # Use with the CupertinoIcons class for iOS style icons. cupertino_icons: ^1.0.8 diff --git a/github-client/step_07/linux/CMakeLists.txt b/github-client/step_07/linux/CMakeLists.txt index 0f055d8f18..255a60323d 100644 --- a/github-client/step_07/linux/CMakeLists.txt +++ b/github-client/step_07/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/github-client/step_07/linux/my_application.cc b/github-client/step_07/linux/my_application.cc deleted file mode 100644 index ddb1fa01ca..0000000000 --- a/github-client/step_07/linux/my_application.cc +++ /dev/null @@ -1,124 +0,0 @@ -#include "my_application.h" - -#include -#ifdef GDK_WINDOWING_X11 -#include -#endif - -#include "flutter/generated_plugin_registrant.h" - -struct _MyApplication { - GtkApplication parent_instance; - char** dart_entrypoint_arguments; -}; - -G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) - -// Implements GApplication::activate. -static void my_application_activate(GApplication* application) { - MyApplication* self = MY_APPLICATION(application); - GtkWindow* window = - GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); - - // Use a header bar when running in GNOME as this is the common style used - // by applications and is the setup most users will be using (e.g. Ubuntu - // desktop). - // If running on X and not using GNOME then just use a traditional title bar - // in case the window manager does more exotic layout, e.g. tiling. - // If running on Wayland assume the header bar will work (may need changing - // if future cases occur). - gboolean use_header_bar = TRUE; -#ifdef GDK_WINDOWING_X11 - GdkScreen* screen = gtk_window_get_screen(window); - if (GDK_IS_X11_SCREEN(screen)) { - const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); - if (g_strcmp0(wm_name, "GNOME Shell") != 0) { - use_header_bar = FALSE; - } - } -#endif - if (use_header_bar) { - GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); - gtk_widget_show(GTK_WIDGET(header_bar)); - gtk_header_bar_set_title(header_bar, "github_client"); - gtk_header_bar_set_show_close_button(header_bar, TRUE); - gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); - } else { - gtk_window_set_title(window, "github_client"); - } - - gtk_window_set_default_size(window, 1280, 720); - gtk_widget_show(GTK_WIDGET(window)); - - g_autoptr(FlDartProject) project = fl_dart_project_new(); - fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); - - FlView* view = fl_view_new(project); - gtk_widget_show(GTK_WIDGET(view)); - gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); - - fl_register_plugins(FL_PLUGIN_REGISTRY(view)); - - gtk_widget_grab_focus(GTK_WIDGET(view)); -} - -// Implements GApplication::local_command_line. -static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { - MyApplication* self = MY_APPLICATION(application); - // Strip out the first argument as it is the binary name. - self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); - - g_autoptr(GError) error = nullptr; - if (!g_application_register(application, nullptr, &error)) { - g_warning("Failed to register: %s", error->message); - *exit_status = 1; - return TRUE; - } - - g_application_activate(application); - *exit_status = 0; - - return TRUE; -} - -// Implements GApplication::startup. -static void my_application_startup(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application startup. - - G_APPLICATION_CLASS(my_application_parent_class)->startup(application); -} - -// Implements GApplication::shutdown. -static void my_application_shutdown(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application shutdown. - - G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); -} - -// Implements GObject::dispose. -static void my_application_dispose(GObject* object) { - MyApplication* self = MY_APPLICATION(object); - g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); - G_OBJECT_CLASS(my_application_parent_class)->dispose(object); -} - -static void my_application_class_init(MyApplicationClass* klass) { - G_APPLICATION_CLASS(klass)->activate = my_application_activate; - G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; - G_APPLICATION_CLASS(klass)->startup = my_application_startup; - G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; - G_OBJECT_CLASS(klass)->dispose = my_application_dispose; -} - -static void my_application_init(MyApplication* self) {} - -MyApplication* my_application_new() { - return MY_APPLICATION(g_object_new(my_application_get_type(), - "application-id", APPLICATION_ID, - "flags", G_APPLICATION_NON_UNIQUE, - nullptr)); -} diff --git a/github-client/step_07/linux/runner/CMakeLists.txt b/github-client/step_07/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/github-client/step_07/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/github-client/step_07/linux/main.cc b/github-client/step_07/linux/runner/main.cc similarity index 100% rename from github-client/step_07/linux/main.cc rename to github-client/step_07/linux/runner/main.cc diff --git a/github-client/step_07/linux/runner/my_application.cc b/github-client/step_07/linux/runner/my_application.cc new file mode 100644 index 0000000000..07d3dc6a33 --- /dev/null +++ b/github-client/step_07/linux/runner/my_application.cc @@ -0,0 +1,130 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "github_client"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "github_client"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/github-client/step_07/linux/my_application.h b/github-client/step_07/linux/runner/my_application.h similarity index 100% rename from github-client/step_07/linux/my_application.h rename to github-client/step_07/linux/runner/my_application.h diff --git a/github-client/step_07/macos/Runner.xcodeproj/project.pbxproj b/github-client/step_07/macos/Runner.xcodeproj/project.pbxproj index d5ff68ba5d..9c547ced8c 100644 --- a/github-client/step_07/macos/Runner.xcodeproj/project.pbxproj +++ b/github-client/step_07/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ - 0946E2799DE0A59CB7358911 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 08CEF5CD328AFD86D5CEBAFE /* Pods_RunnerTests.framework */; }; + 302773E1AEE43F058B27E47E /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B74A8B2F285D5B191087173B /* Pods_Runner.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - CDD74361318F0EC8CD4FE27A /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2FEEE168DC0B35E320DA0BEC /* Pods_Runner.framework */; }; + ECAF2AB7EA1C06DA530A51CE /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FE8C391B092623A44BF6FE36 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,10 +62,8 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 08CEF5CD328AFD86D5CEBAFE /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 1C8A255B6AD66CD525D09CFE /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - 2CBB88C47DC5B271C996602F /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - 2FEEE168DC0B35E320DA0BEC /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 2087AEE23C5C318CFCFDC00B /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 219F633DE5BEABF086F4C06A /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -82,12 +80,14 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 40C998280C91B1859A8FC1AD /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 368FAF2B4663B14E56BE757B /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 8C1C90B1873B2D3753EC80D6 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - 9EEC144CCD91A3CED313F52F /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - CE8E57BFB22132959266F9FB /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + A84A6122508992F73FD579BF /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + B74A8B2F285D5B191087173B /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + C7555FBA428DB388D97A495B /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + EA699ECC9DACD6A7CFAE2B74 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + FE8C391B092623A44BF6FE36 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 0946E2799DE0A59CB7358911 /* Pods_RunnerTests.framework in Frameworks */, + ECAF2AB7EA1C06DA530A51CE /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,7 +103,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - CDD74361318F0EC8CD4FE27A /* Pods_Runner.framework in Frameworks */, + 302773E1AEE43F058B27E47E /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -137,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - BF572836E3F26F7228BC0732 /* Pods */, + 613D46063BF07D19DF03D025 /* Pods */, ); sourceTree = ""; }; @@ -185,15 +185,15 @@ path = Runner; sourceTree = ""; }; - BF572836E3F26F7228BC0732 /* Pods */ = { + 613D46063BF07D19DF03D025 /* Pods */ = { isa = PBXGroup; children = ( - 40C998280C91B1859A8FC1AD /* Pods-Runner.debug.xcconfig */, - 8C1C90B1873B2D3753EC80D6 /* Pods-Runner.release.xcconfig */, - 1C8A255B6AD66CD525D09CFE /* Pods-Runner.profile.xcconfig */, - 9EEC144CCD91A3CED313F52F /* Pods-RunnerTests.debug.xcconfig */, - CE8E57BFB22132959266F9FB /* Pods-RunnerTests.release.xcconfig */, - 2CBB88C47DC5B271C996602F /* Pods-RunnerTests.profile.xcconfig */, + 368FAF2B4663B14E56BE757B /* Pods-Runner.debug.xcconfig */, + 219F633DE5BEABF086F4C06A /* Pods-Runner.release.xcconfig */, + EA699ECC9DACD6A7CFAE2B74 /* Pods-Runner.profile.xcconfig */, + 2087AEE23C5C318CFCFDC00B /* Pods-RunnerTests.debug.xcconfig */, + A84A6122508992F73FD579BF /* Pods-RunnerTests.release.xcconfig */, + C7555FBA428DB388D97A495B /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -202,8 +202,8 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - 2FEEE168DC0B35E320DA0BEC /* Pods_Runner.framework */, - 08CEF5CD328AFD86D5CEBAFE /* Pods_RunnerTests.framework */, + B74A8B2F285D5B191087173B /* Pods_Runner.framework */, + FE8C391B092623A44BF6FE36 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 9CD1CF7C425C9F14158A0F65 /* [CP] Check Pods Manifest.lock */, + 1BBB1539B6F2B069E29309AD /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 569E096BB5DFDB3FFC2AC78F /* [CP] Check Pods Manifest.lock */, + F4AE982DDE29CB666CD5E9FF /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - B9F959D3AF0503D111F56672 /* [CP] Embed Pods Frameworks */, + BC6732D8A6B4C5F75ED1D31F /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,6 +323,28 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ + 1BBB1539B6F2B069E29309AD /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -361,29 +383,24 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 569E096BB5DFDB3FFC2AC78F /* [CP] Check Pods Manifest.lock */ = { + BC6732D8A6B4C5F75ED1D31F /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - 9CD1CF7C425C9F14158A0F65 /* [CP] Check Pods Manifest.lock */ = { + F4AE982DDE29CB666CD5E9FF /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -398,30 +415,13 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - B9F959D3AF0503D111F56672 /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 9EEC144CCD91A3CED313F52F /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 2087AEE23C5C318CFCFDC00B /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = CE8E57BFB22132959266F9FB /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = A84A6122508992F73FD579BF /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 2CBB88C47DC5B271C996602F /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = C7555FBA428DB388D97A495B /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/github-client/step_07/pubspec.yaml b/github-client/step_07/pubspec.yaml index 329bf61a3a..ab0cef8d62 100644 --- a/github-client/step_07/pubspec.yaml +++ b/github-client/step_07/pubspec.yaml @@ -31,7 +31,6 @@ dependencies: flutter: sdk: flutter - # The following adds the Cupertino Icons font to your application. # Use with the CupertinoIcons class for iOS style icons. cupertino_icons: ^1.0.8 diff --git a/github-client/window_to_front/macos/Resources/PrivacyInfo.xcprivacy b/github-client/window_to_front/macos/Resources/PrivacyInfo.xcprivacy new file mode 100644 index 0000000000..918d80be43 --- /dev/null +++ b/github-client/window_to_front/macos/Resources/PrivacyInfo.xcprivacy @@ -0,0 +1,12 @@ + + + + + NSPrivacyTrackingDomains + + NSPrivacyCollectedDataTypes + + NSPrivacyTracking + + + diff --git a/github-client/window_to_front/macos/window_to_front.podspec b/github-client/window_to_front/macos/window_to_front.podspec index 04bd17d8f2..028c88583c 100644 --- a/github-client/window_to_front/macos/window_to_front.podspec +++ b/github-client/window_to_front/macos/window_to_front.podspec @@ -15,6 +15,13 @@ A new Flutter plugin project. s.source = { :path => '.' } s.source_files = 'Classes/**/*' + + # If your plugin requires a privacy manifest, for example if it collects user + # data, update the PrivacyInfo.xcprivacy file to describe your plugin's + # privacy impact, and then uncomment this line. For more information, + # see https://developer.apple.com/documentation/bundleresources/privacy_manifest_files + # s.resource_bundles = {'window_to_front_privacy' => ['Resources/PrivacyInfo.xcprivacy']} + s.dependency 'FlutterMacOS' s.platform = :osx, '10.11' From 7ad49f66533bf00c2cdeb9b00433f769dfd6fdbb Mon Sep 17 00:00:00 2001 From: Brett Morgan Date: Wed, 13 Nov 2024 11:58:18 +1100 Subject: [PATCH 048/108] Update `google-maps-in-flutter` --- google-maps-in-flutter/codelab_rebuild.yaml | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 120 +++++++++--------- google-maps-in-flutter/step_3/pubspec.yaml | 1 - google-maps-in-flutter/step_3/web/index.html | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 120 +++++++++--------- google-maps-in-flutter/step_4/pubspec.yaml | 1 - google-maps-in-flutter/step_4/web/index.html | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 120 +++++++++--------- google-maps-in-flutter/step_5/pubspec.yaml | 1 - google-maps-in-flutter/step_5/web/index.html | 2 +- 10 files changed, 184 insertions(+), 187 deletions(-) diff --git a/google-maps-in-flutter/codelab_rebuild.yaml b/google-maps-in-flutter/codelab_rebuild.yaml index 13cdd5b2e8..6d46ce26b6 100644 --- a/google-maps-in-flutter/codelab_rebuild.yaml +++ b/google-maps-in-flutter/codelab_rebuild.yaml @@ -1431,7 +1431,7 @@ steps: patch-u: | --- b/google-maps-in-flutter/step_5/pubspec.yaml +++ a/google-maps-in-flutter/step_5/pubspec.yaml - @@ -93,3 +93,5 @@ flutter: + @@ -92,3 +92,5 @@ flutter: # # For details regarding fonts from package dependencies, # see https://flutter.dev/to/font-from-package diff --git a/google-maps-in-flutter/step_3/ios/Runner.xcodeproj/project.pbxproj b/google-maps-in-flutter/step_3/ios/Runner.xcodeproj/project.pbxproj index 398f0b9f0b..1b0ceacd8f 100644 --- a/google-maps-in-flutter/step_3/ios/Runner.xcodeproj/project.pbxproj +++ b/google-maps-in-flutter/step_3/ios/Runner.xcodeproj/project.pbxproj @@ -8,14 +8,14 @@ /* Begin PBXBuildFile section */ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; + 2BEEB64B58A4CC47C5BA3D5C /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D21CC7852FBCE765A8E29EB9 /* Pods_Runner.framework */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; + 95C52519924F04652DEE717D /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9DEB695FFCE25C7FE2E8B21D /* Pods_RunnerTests.framework */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - 9E0F70688A3091F9486161D2 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 09C37DCE872715D686A62AC6 /* Pods_Runner.framework */; }; - F075F74C4399201114FDCDB7 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F72E91D76B8E433805F17B29 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,19 +42,19 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 095C742AB07F93444EADB2A8 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - 09C37DCE872715D686A62AC6 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 01BA76AC0F05E4D2F132F2FB /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; + 18175D11E7FC399A72E51A25 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 62B85A57E9B56F064DD39D86 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - 6C3254DBAB169ED6F65DFCDC /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 402560276B7A48DAA9D1293B /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 4311878BD38D7CBC5CC089F9 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 837ACBF826A70ED2E7A6DF05 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 922BE8DA384F5C2168247CEB /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -62,46 +62,46 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - A63DD4555619517F97A4227E /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - E18236640870F7B697A57742 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - F72E91D76B8E433805F17B29 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 9DEB695FFCE25C7FE2E8B21D /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + A57FAD46CB92C0B82A04AD97 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + D21CC7852FBCE765A8E29EB9 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 97C146EB1CF9000F007C117D /* Frameworks */ = { + 168928E2C49EF880A92771E3 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 9E0F70688A3091F9486161D2 /* Pods_Runner.framework in Frameworks */, + 95C52519924F04652DEE717D /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - B2AEB873C105440C4D370A71 /* Frameworks */ = { + 97C146EB1CF9000F007C117D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - F075F74C4399201114FDCDB7 /* Pods_RunnerTests.framework in Frameworks */, + 2BEEB64B58A4CC47C5BA3D5C /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 1236266A674D135122F42F80 /* Frameworks */ = { + 331C8082294A63A400263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( - 09C37DCE872715D686A62AC6 /* Pods_Runner.framework */, - F72E91D76B8E433805F17B29 /* Pods_RunnerTests.framework */, + 331C807B294A618700263BE5 /* RunnerTests.swift */, ); - name = Frameworks; + path = RunnerTests; sourceTree = ""; }; - 331C8082294A63A400263BE5 /* RunnerTests */ = { + 3BC05D7D41AFDF8AF00CE37D /* Frameworks */ = { isa = PBXGroup; children = ( - 331C807B294A618700263BE5 /* RunnerTests.swift */, + D21CC7852FBCE765A8E29EB9 /* Pods_Runner.framework */, + 9DEB695FFCE25C7FE2E8B21D /* Pods_RunnerTests.framework */, ); - path = RunnerTests; + name = Frameworks; sourceTree = ""; }; 9740EEB11CF90186004384FC /* Flutter */ = { @@ -122,8 +122,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - C4865760D467DF3F9015E4EC /* Pods */, - 1236266A674D135122F42F80 /* Frameworks */, + D259A5B5078AC22609F1BC1A /* Pods */, + 3BC05D7D41AFDF8AF00CE37D /* Frameworks */, ); sourceTree = ""; }; @@ -151,15 +151,15 @@ path = Runner; sourceTree = ""; }; - C4865760D467DF3F9015E4EC /* Pods */ = { + D259A5B5078AC22609F1BC1A /* Pods */ = { isa = PBXGroup; children = ( - A63DD4555619517F97A4227E /* Pods-Runner.debug.xcconfig */, - E18236640870F7B697A57742 /* Pods-Runner.release.xcconfig */, - 095C742AB07F93444EADB2A8 /* Pods-Runner.profile.xcconfig */, - 6C3254DBAB169ED6F65DFCDC /* Pods-RunnerTests.debug.xcconfig */, - 837ACBF826A70ED2E7A6DF05 /* Pods-RunnerTests.release.xcconfig */, - 62B85A57E9B56F064DD39D86 /* Pods-RunnerTests.profile.xcconfig */, + A57FAD46CB92C0B82A04AD97 /* Pods-Runner.debug.xcconfig */, + 01BA76AC0F05E4D2F132F2FB /* Pods-Runner.release.xcconfig */, + 18175D11E7FC399A72E51A25 /* Pods-Runner.profile.xcconfig */, + 402560276B7A48DAA9D1293B /* Pods-RunnerTests.debug.xcconfig */, + 922BE8DA384F5C2168247CEB /* Pods-RunnerTests.release.xcconfig */, + 4311878BD38D7CBC5CC089F9 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 05939E9CC810245F0D53E5FC /* [CP] Check Pods Manifest.lock */, + 23C0E03B6C7A00FD9BDABC8D /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - B2AEB873C105440C4D370A71 /* Frameworks */, + 168928E2C49EF880A92771E3 /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 61DA26113B165296670A3CAF /* [CP] Check Pods Manifest.lock */, + F94B251853526A3F2BCE8A79 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - E196DA6FAC5C9ECB6AE21F8C /* [CP] Copy Pods Resources */, + E457A3C0D24B0E7B348F48F8 /* [CP] Copy Pods Resources */, ); buildRules = ( ); @@ -270,7 +270,7 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 05939E9CC810245F0D53E5FC /* [CP] Check Pods Manifest.lock */ = { + 23C0E03B6C7A00FD9BDABC8D /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -308,58 +308,58 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 61DA26113B165296670A3CAF /* [CP] Check Pods Manifest.lock */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( ); + name = "Run Script"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { + E457A3C0D24B0E7B348F48F8 /* [CP] Copy Pods Resources */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputPaths = ( + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-input-files.xcfilelist", ); - name = "Run Script"; - outputPaths = ( + name = "[CP] Copy Pods Resources"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n"; + showEnvVarsInLog = 0; }; - E196DA6FAC5C9ECB6AE21F8C /* [CP] Copy Pods Resources */ = { + F94B251853526A3F2BCE8A79 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Copy Pods Resources"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 6C3254DBAB169ED6F65DFCDC /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 402560276B7A48DAA9D1293B /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 837ACBF826A70ED2E7A6DF05 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 922BE8DA384F5C2168247CEB /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 62B85A57E9B56F064DD39D86 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 4311878BD38D7CBC5CC089F9 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/google-maps-in-flutter/step_3/pubspec.yaml b/google-maps-in-flutter/step_3/pubspec.yaml index 9c3bb2cf92..2121fc2335 100644 --- a/google-maps-in-flutter/step_3/pubspec.yaml +++ b/google-maps-in-flutter/step_3/pubspec.yaml @@ -31,7 +31,6 @@ dependencies: flutter: sdk: flutter - # The following adds the Cupertino Icons font to your application. # Use with the CupertinoIcons class for iOS style icons. cupertino_icons: ^1.0.8 diff --git a/google-maps-in-flutter/step_3/web/index.html b/google-maps-in-flutter/step_3/web/index.html index 6601449cd6..85eb145d1b 100644 --- a/google-maps-in-flutter/step_3/web/index.html +++ b/google-maps-in-flutter/step_3/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/google-maps-in-flutter/step_4/ios/Runner.xcodeproj/project.pbxproj b/google-maps-in-flutter/step_4/ios/Runner.xcodeproj/project.pbxproj index 398f0b9f0b..1b0ceacd8f 100644 --- a/google-maps-in-flutter/step_4/ios/Runner.xcodeproj/project.pbxproj +++ b/google-maps-in-flutter/step_4/ios/Runner.xcodeproj/project.pbxproj @@ -8,14 +8,14 @@ /* Begin PBXBuildFile section */ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; + 2BEEB64B58A4CC47C5BA3D5C /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D21CC7852FBCE765A8E29EB9 /* Pods_Runner.framework */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; + 95C52519924F04652DEE717D /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9DEB695FFCE25C7FE2E8B21D /* Pods_RunnerTests.framework */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - 9E0F70688A3091F9486161D2 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 09C37DCE872715D686A62AC6 /* Pods_Runner.framework */; }; - F075F74C4399201114FDCDB7 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F72E91D76B8E433805F17B29 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,19 +42,19 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 095C742AB07F93444EADB2A8 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - 09C37DCE872715D686A62AC6 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 01BA76AC0F05E4D2F132F2FB /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; + 18175D11E7FC399A72E51A25 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 62B85A57E9B56F064DD39D86 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - 6C3254DBAB169ED6F65DFCDC /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 402560276B7A48DAA9D1293B /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 4311878BD38D7CBC5CC089F9 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 837ACBF826A70ED2E7A6DF05 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 922BE8DA384F5C2168247CEB /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -62,46 +62,46 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - A63DD4555619517F97A4227E /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - E18236640870F7B697A57742 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - F72E91D76B8E433805F17B29 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 9DEB695FFCE25C7FE2E8B21D /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + A57FAD46CB92C0B82A04AD97 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + D21CC7852FBCE765A8E29EB9 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 97C146EB1CF9000F007C117D /* Frameworks */ = { + 168928E2C49EF880A92771E3 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 9E0F70688A3091F9486161D2 /* Pods_Runner.framework in Frameworks */, + 95C52519924F04652DEE717D /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - B2AEB873C105440C4D370A71 /* Frameworks */ = { + 97C146EB1CF9000F007C117D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - F075F74C4399201114FDCDB7 /* Pods_RunnerTests.framework in Frameworks */, + 2BEEB64B58A4CC47C5BA3D5C /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 1236266A674D135122F42F80 /* Frameworks */ = { + 331C8082294A63A400263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( - 09C37DCE872715D686A62AC6 /* Pods_Runner.framework */, - F72E91D76B8E433805F17B29 /* Pods_RunnerTests.framework */, + 331C807B294A618700263BE5 /* RunnerTests.swift */, ); - name = Frameworks; + path = RunnerTests; sourceTree = ""; }; - 331C8082294A63A400263BE5 /* RunnerTests */ = { + 3BC05D7D41AFDF8AF00CE37D /* Frameworks */ = { isa = PBXGroup; children = ( - 331C807B294A618700263BE5 /* RunnerTests.swift */, + D21CC7852FBCE765A8E29EB9 /* Pods_Runner.framework */, + 9DEB695FFCE25C7FE2E8B21D /* Pods_RunnerTests.framework */, ); - path = RunnerTests; + name = Frameworks; sourceTree = ""; }; 9740EEB11CF90186004384FC /* Flutter */ = { @@ -122,8 +122,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - C4865760D467DF3F9015E4EC /* Pods */, - 1236266A674D135122F42F80 /* Frameworks */, + D259A5B5078AC22609F1BC1A /* Pods */, + 3BC05D7D41AFDF8AF00CE37D /* Frameworks */, ); sourceTree = ""; }; @@ -151,15 +151,15 @@ path = Runner; sourceTree = ""; }; - C4865760D467DF3F9015E4EC /* Pods */ = { + D259A5B5078AC22609F1BC1A /* Pods */ = { isa = PBXGroup; children = ( - A63DD4555619517F97A4227E /* Pods-Runner.debug.xcconfig */, - E18236640870F7B697A57742 /* Pods-Runner.release.xcconfig */, - 095C742AB07F93444EADB2A8 /* Pods-Runner.profile.xcconfig */, - 6C3254DBAB169ED6F65DFCDC /* Pods-RunnerTests.debug.xcconfig */, - 837ACBF826A70ED2E7A6DF05 /* Pods-RunnerTests.release.xcconfig */, - 62B85A57E9B56F064DD39D86 /* Pods-RunnerTests.profile.xcconfig */, + A57FAD46CB92C0B82A04AD97 /* Pods-Runner.debug.xcconfig */, + 01BA76AC0F05E4D2F132F2FB /* Pods-Runner.release.xcconfig */, + 18175D11E7FC399A72E51A25 /* Pods-Runner.profile.xcconfig */, + 402560276B7A48DAA9D1293B /* Pods-RunnerTests.debug.xcconfig */, + 922BE8DA384F5C2168247CEB /* Pods-RunnerTests.release.xcconfig */, + 4311878BD38D7CBC5CC089F9 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 05939E9CC810245F0D53E5FC /* [CP] Check Pods Manifest.lock */, + 23C0E03B6C7A00FD9BDABC8D /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - B2AEB873C105440C4D370A71 /* Frameworks */, + 168928E2C49EF880A92771E3 /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 61DA26113B165296670A3CAF /* [CP] Check Pods Manifest.lock */, + F94B251853526A3F2BCE8A79 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - E196DA6FAC5C9ECB6AE21F8C /* [CP] Copy Pods Resources */, + E457A3C0D24B0E7B348F48F8 /* [CP] Copy Pods Resources */, ); buildRules = ( ); @@ -270,7 +270,7 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 05939E9CC810245F0D53E5FC /* [CP] Check Pods Manifest.lock */ = { + 23C0E03B6C7A00FD9BDABC8D /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -308,58 +308,58 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 61DA26113B165296670A3CAF /* [CP] Check Pods Manifest.lock */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( ); + name = "Run Script"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { + E457A3C0D24B0E7B348F48F8 /* [CP] Copy Pods Resources */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputPaths = ( + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-input-files.xcfilelist", ); - name = "Run Script"; - outputPaths = ( + name = "[CP] Copy Pods Resources"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n"; + showEnvVarsInLog = 0; }; - E196DA6FAC5C9ECB6AE21F8C /* [CP] Copy Pods Resources */ = { + F94B251853526A3F2BCE8A79 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Copy Pods Resources"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 6C3254DBAB169ED6F65DFCDC /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 402560276B7A48DAA9D1293B /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 837ACBF826A70ED2E7A6DF05 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 922BE8DA384F5C2168247CEB /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 62B85A57E9B56F064DD39D86 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 4311878BD38D7CBC5CC089F9 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/google-maps-in-flutter/step_4/pubspec.yaml b/google-maps-in-flutter/step_4/pubspec.yaml index 9c3bb2cf92..2121fc2335 100644 --- a/google-maps-in-flutter/step_4/pubspec.yaml +++ b/google-maps-in-flutter/step_4/pubspec.yaml @@ -31,7 +31,6 @@ dependencies: flutter: sdk: flutter - # The following adds the Cupertino Icons font to your application. # Use with the CupertinoIcons class for iOS style icons. cupertino_icons: ^1.0.8 diff --git a/google-maps-in-flutter/step_4/web/index.html b/google-maps-in-flutter/step_4/web/index.html index 6d2b07f59e..fbd5eea8f6 100644 --- a/google-maps-in-flutter/step_4/web/index.html +++ b/google-maps-in-flutter/step_4/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/google-maps-in-flutter/step_5/ios/Runner.xcodeproj/project.pbxproj b/google-maps-in-flutter/step_5/ios/Runner.xcodeproj/project.pbxproj index 398f0b9f0b..1b0ceacd8f 100644 --- a/google-maps-in-flutter/step_5/ios/Runner.xcodeproj/project.pbxproj +++ b/google-maps-in-flutter/step_5/ios/Runner.xcodeproj/project.pbxproj @@ -8,14 +8,14 @@ /* Begin PBXBuildFile section */ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; + 2BEEB64B58A4CC47C5BA3D5C /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D21CC7852FBCE765A8E29EB9 /* Pods_Runner.framework */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; + 95C52519924F04652DEE717D /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9DEB695FFCE25C7FE2E8B21D /* Pods_RunnerTests.framework */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - 9E0F70688A3091F9486161D2 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 09C37DCE872715D686A62AC6 /* Pods_Runner.framework */; }; - F075F74C4399201114FDCDB7 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F72E91D76B8E433805F17B29 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,19 +42,19 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 095C742AB07F93444EADB2A8 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - 09C37DCE872715D686A62AC6 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 01BA76AC0F05E4D2F132F2FB /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; + 18175D11E7FC399A72E51A25 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 62B85A57E9B56F064DD39D86 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - 6C3254DBAB169ED6F65DFCDC /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 402560276B7A48DAA9D1293B /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 4311878BD38D7CBC5CC089F9 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 837ACBF826A70ED2E7A6DF05 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 922BE8DA384F5C2168247CEB /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -62,46 +62,46 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - A63DD4555619517F97A4227E /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - E18236640870F7B697A57742 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - F72E91D76B8E433805F17B29 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 9DEB695FFCE25C7FE2E8B21D /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + A57FAD46CB92C0B82A04AD97 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + D21CC7852FBCE765A8E29EB9 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 97C146EB1CF9000F007C117D /* Frameworks */ = { + 168928E2C49EF880A92771E3 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 9E0F70688A3091F9486161D2 /* Pods_Runner.framework in Frameworks */, + 95C52519924F04652DEE717D /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - B2AEB873C105440C4D370A71 /* Frameworks */ = { + 97C146EB1CF9000F007C117D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - F075F74C4399201114FDCDB7 /* Pods_RunnerTests.framework in Frameworks */, + 2BEEB64B58A4CC47C5BA3D5C /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 1236266A674D135122F42F80 /* Frameworks */ = { + 331C8082294A63A400263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( - 09C37DCE872715D686A62AC6 /* Pods_Runner.framework */, - F72E91D76B8E433805F17B29 /* Pods_RunnerTests.framework */, + 331C807B294A618700263BE5 /* RunnerTests.swift */, ); - name = Frameworks; + path = RunnerTests; sourceTree = ""; }; - 331C8082294A63A400263BE5 /* RunnerTests */ = { + 3BC05D7D41AFDF8AF00CE37D /* Frameworks */ = { isa = PBXGroup; children = ( - 331C807B294A618700263BE5 /* RunnerTests.swift */, + D21CC7852FBCE765A8E29EB9 /* Pods_Runner.framework */, + 9DEB695FFCE25C7FE2E8B21D /* Pods_RunnerTests.framework */, ); - path = RunnerTests; + name = Frameworks; sourceTree = ""; }; 9740EEB11CF90186004384FC /* Flutter */ = { @@ -122,8 +122,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - C4865760D467DF3F9015E4EC /* Pods */, - 1236266A674D135122F42F80 /* Frameworks */, + D259A5B5078AC22609F1BC1A /* Pods */, + 3BC05D7D41AFDF8AF00CE37D /* Frameworks */, ); sourceTree = ""; }; @@ -151,15 +151,15 @@ path = Runner; sourceTree = ""; }; - C4865760D467DF3F9015E4EC /* Pods */ = { + D259A5B5078AC22609F1BC1A /* Pods */ = { isa = PBXGroup; children = ( - A63DD4555619517F97A4227E /* Pods-Runner.debug.xcconfig */, - E18236640870F7B697A57742 /* Pods-Runner.release.xcconfig */, - 095C742AB07F93444EADB2A8 /* Pods-Runner.profile.xcconfig */, - 6C3254DBAB169ED6F65DFCDC /* Pods-RunnerTests.debug.xcconfig */, - 837ACBF826A70ED2E7A6DF05 /* Pods-RunnerTests.release.xcconfig */, - 62B85A57E9B56F064DD39D86 /* Pods-RunnerTests.profile.xcconfig */, + A57FAD46CB92C0B82A04AD97 /* Pods-Runner.debug.xcconfig */, + 01BA76AC0F05E4D2F132F2FB /* Pods-Runner.release.xcconfig */, + 18175D11E7FC399A72E51A25 /* Pods-Runner.profile.xcconfig */, + 402560276B7A48DAA9D1293B /* Pods-RunnerTests.debug.xcconfig */, + 922BE8DA384F5C2168247CEB /* Pods-RunnerTests.release.xcconfig */, + 4311878BD38D7CBC5CC089F9 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 05939E9CC810245F0D53E5FC /* [CP] Check Pods Manifest.lock */, + 23C0E03B6C7A00FD9BDABC8D /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - B2AEB873C105440C4D370A71 /* Frameworks */, + 168928E2C49EF880A92771E3 /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 61DA26113B165296670A3CAF /* [CP] Check Pods Manifest.lock */, + F94B251853526A3F2BCE8A79 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - E196DA6FAC5C9ECB6AE21F8C /* [CP] Copy Pods Resources */, + E457A3C0D24B0E7B348F48F8 /* [CP] Copy Pods Resources */, ); buildRules = ( ); @@ -270,7 +270,7 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 05939E9CC810245F0D53E5FC /* [CP] Check Pods Manifest.lock */ = { + 23C0E03B6C7A00FD9BDABC8D /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -308,58 +308,58 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 61DA26113B165296670A3CAF /* [CP] Check Pods Manifest.lock */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( ); + name = "Run Script"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { + E457A3C0D24B0E7B348F48F8 /* [CP] Copy Pods Resources */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputPaths = ( + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-input-files.xcfilelist", ); - name = "Run Script"; - outputPaths = ( + name = "[CP] Copy Pods Resources"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n"; + showEnvVarsInLog = 0; }; - E196DA6FAC5C9ECB6AE21F8C /* [CP] Copy Pods Resources */ = { + F94B251853526A3F2BCE8A79 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Copy Pods Resources"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 6C3254DBAB169ED6F65DFCDC /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 402560276B7A48DAA9D1293B /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 837ACBF826A70ED2E7A6DF05 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 922BE8DA384F5C2168247CEB /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 62B85A57E9B56F064DD39D86 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 4311878BD38D7CBC5CC089F9 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/google-maps-in-flutter/step_5/pubspec.yaml b/google-maps-in-flutter/step_5/pubspec.yaml index a1922ba619..16caa3ae2c 100644 --- a/google-maps-in-flutter/step_5/pubspec.yaml +++ b/google-maps-in-flutter/step_5/pubspec.yaml @@ -31,7 +31,6 @@ dependencies: flutter: sdk: flutter - # The following adds the Cupertino Icons font to your application. # Use with the CupertinoIcons class for iOS style icons. cupertino_icons: ^1.0.8 diff --git a/google-maps-in-flutter/step_5/web/index.html b/google-maps-in-flutter/step_5/web/index.html index 6d2b07f59e..fbd5eea8f6 100644 --- a/google-maps-in-flutter/step_5/web/index.html +++ b/google-maps-in-flutter/step_5/web/index.html @@ -21,7 +21,7 @@ - + From c561936c91bcdf45dac71d0a33b8536f46afa80e Mon Sep 17 00:00:00 2001 From: Brett Morgan Date: Wed, 13 Nov 2024 12:01:43 +1100 Subject: [PATCH 049/108] Update `namer` --- namer/step_03/linux/CMakeLists.txt | 23 +--- namer/step_03/linux/runner/CMakeLists.txt | 26 ++++ namer/step_03/linux/{ => runner}/main.cc | 0 .../linux/{ => runner}/my_application.cc | 6 + .../linux/{ => runner}/my_application.h | 0 namer/step_03/web/index.html | 2 +- namer/step_04_a_widget/linux/CMakeLists.txt | 23 +--- .../linux/runner/CMakeLists.txt | 26 ++++ .../linux/{ => runner}/main.cc | 0 .../linux/{ => runner}/my_application.cc | 6 + .../linux/{ => runner}/my_application.h | 0 namer/step_04_a_widget/web/index.html | 2 +- namer/step_04_b_behavior/linux/CMakeLists.txt | 23 +--- .../linux/runner/CMakeLists.txt | 26 ++++ .../linux/{ => runner}/main.cc | 0 .../linux/{ => runner}/my_application.cc | 6 + .../linux/{ => runner}/my_application.h | 0 namer/step_04_b_behavior/web/index.html | 2 +- namer/step_05_a_pair/linux/CMakeLists.txt | 23 +--- .../linux/runner/CMakeLists.txt | 26 ++++ .../step_05_a_pair/linux/{ => runner}/main.cc | 0 .../linux/{ => runner}/my_application.cc | 6 + .../linux/{ => runner}/my_application.h | 0 namer/step_05_a_pair/web/index.html | 2 +- namer/step_05_b_extract/linux/CMakeLists.txt | 23 +--- .../step_05_b_extract/linux/my_application.cc | 124 ----------------- .../linux/runner/CMakeLists.txt | 26 ++++ .../linux/{ => runner}/main.cc | 0 .../linux/runner/my_application.cc | 130 ++++++++++++++++++ .../linux/{ => runner}/my_application.h | 0 namer/step_05_b_extract/web/index.html | 2 +- .../linux/CMakeLists.txt | 23 +--- .../linux/my_application.cc | 124 ----------------- .../linux/runner/CMakeLists.txt | 26 ++++ .../linux/{ => runner}/main.cc | 0 .../linux/runner/my_application.cc | 130 ++++++++++++++++++ .../linux/{ => runner}/my_application.h | 0 namer/step_05_c_card_padding/web/index.html | 2 +- namer/step_05_d_theme/linux/CMakeLists.txt | 23 +--- namer/step_05_d_theme/linux/my_application.cc | 124 ----------------- .../linux/runner/CMakeLists.txt | 26 ++++ .../linux/{ => runner}/main.cc | 0 .../linux/runner/my_application.cc | 130 ++++++++++++++++++ .../linux/{ => runner}/my_application.h | 0 namer/step_05_d_theme/web/index.html | 2 +- .../step_05_e_text_style/linux/CMakeLists.txt | 23 +--- .../linux/my_application.cc | 124 ----------------- .../linux/runner/CMakeLists.txt | 26 ++++ .../linux/{ => runner}/main.cc | 0 .../linux/runner/my_application.cc | 130 ++++++++++++++++++ .../linux/{ => runner}/my_application.h | 0 namer/step_05_e_text_style/web/index.html | 2 +- .../linux/CMakeLists.txt | 23 +--- .../linux/my_application.cc | 124 ----------------- .../linux/runner/CMakeLists.txt | 26 ++++ .../linux/{ => runner}/main.cc | 0 .../linux/runner/my_application.cc | 130 ++++++++++++++++++ .../linux/{ => runner}/my_application.h | 0 namer/step_05_f_accessibility/web/index.html | 2 +- .../linux/CMakeLists.txt | 23 +--- .../linux/my_application.cc | 124 ----------------- .../linux/runner/CMakeLists.txt | 26 ++++ .../linux/{ => runner}/main.cc | 0 .../linux/runner/my_application.cc | 130 ++++++++++++++++++ .../linux/{ => runner}/my_application.h | 0 .../step_05_g_center_vertical/web/index.html | 2 +- .../linux/CMakeLists.txt | 23 +--- .../linux/my_application.cc | 124 ----------------- .../linux/runner/CMakeLists.txt | 26 ++++ .../linux/{ => runner}/main.cc | 0 .../linux/runner/my_application.cc | 130 ++++++++++++++++++ .../linux/{ => runner}/my_application.h | 0 .../web/index.html | 2 +- .../linux/CMakeLists.txt | 23 +--- .../linux/my_application.cc | 124 ----------------- .../linux/runner/CMakeLists.txt | 26 ++++ .../linux/{ => runner}/main.cc | 0 .../linux/runner/my_application.cc | 130 ++++++++++++++++++ .../linux/{ => runner}/my_application.h | 0 .../step_05_i_optional_changes/web/index.html | 2 +- .../linux/CMakeLists.txt | 23 +--- .../linux/my_application.cc | 124 ----------------- .../linux/runner/CMakeLists.txt | 26 ++++ .../linux/{ => runner}/main.cc | 0 .../linux/runner/my_application.cc | 130 ++++++++++++++++++ .../linux/{ => runner}/my_application.h | 0 namer/step_06_a_business_logic/web/index.html | 2 +- namer/step_06_b_add_row/linux/CMakeLists.txt | 23 +--- .../step_06_b_add_row/linux/my_application.cc | 124 ----------------- .../linux/runner/CMakeLists.txt | 26 ++++ .../linux/{ => runner}/main.cc | 0 .../linux/runner/my_application.cc | 130 ++++++++++++++++++ .../linux/{ => runner}/my_application.h | 0 namer/step_06_b_add_row/web/index.html | 2 +- .../linux/CMakeLists.txt | 23 +--- .../linux/my_application.cc | 124 ----------------- .../linux/runner/CMakeLists.txt | 26 ++++ .../linux/{ => runner}/main.cc | 0 .../linux/runner/my_application.cc | 130 ++++++++++++++++++ .../linux/{ => runner}/my_application.h | 0 .../step_06_c_add_like_button/web/index.html | 2 +- .../linux/CMakeLists.txt | 23 +--- .../linux/my_application.cc | 124 ----------------- .../linux/runner/CMakeLists.txt | 26 ++++ .../linux/{ => runner}/main.cc | 0 .../linux/runner/my_application.cc | 130 ++++++++++++++++++ .../linux/{ => runner}/my_application.h | 0 .../web/index.html | 2 +- .../linux/CMakeLists.txt | 23 +--- .../linux/my_application.cc | 124 ----------------- .../linux/runner/CMakeLists.txt | 26 ++++ .../linux/{ => runner}/main.cc | 0 .../linux/runner/my_application.cc | 130 ++++++++++++++++++ .../linux/{ => runner}/my_application.h | 0 .../web/index.html | 2 +- .../linux/CMakeLists.txt | 23 +--- .../linux/my_application.cc | 124 ----------------- .../linux/runner/CMakeLists.txt | 26 ++++ .../linux/{ => runner}/main.cc | 0 .../linux/runner/my_application.cc | 130 ++++++++++++++++++ .../linux/{ => runner}/my_application.h | 0 .../web/index.html | 2 +- .../linux/CMakeLists.txt | 23 +--- .../linux/my_application.cc | 124 ----------------- .../linux/runner/CMakeLists.txt | 26 ++++ .../linux/{ => runner}/main.cc | 0 .../linux/runner/my_application.cc | 130 ++++++++++++++++++ .../linux/{ => runner}/my_application.h | 0 .../web/index.html | 2 +- .../linux/CMakeLists.txt | 23 +--- .../linux/my_application.cc | 124 ----------------- .../linux/runner/CMakeLists.txt | 26 ++++ .../linux/{ => runner}/main.cc | 0 .../linux/runner/my_application.cc | 130 ++++++++++++++++++ .../linux/{ => runner}/my_application.h | 0 .../web/index.html | 2 +- namer/step_08/linux/CMakeLists.txt | 23 +--- namer/step_08/linux/my_application.cc | 124 ----------------- namer/step_08/linux/runner/CMakeLists.txt | 26 ++++ namer/step_08/linux/{ => runner}/main.cc | 0 namer/step_08/linux/runner/my_application.cc | 130 ++++++++++++++++++ .../linux/{ => runner}/my_application.h | 0 namer/step_08/web/index.html | 2 +- 143 files changed, 2864 insertions(+), 2549 deletions(-) create mode 100644 namer/step_03/linux/runner/CMakeLists.txt rename namer/step_03/linux/{ => runner}/main.cc (100%) rename namer/step_03/linux/{ => runner}/my_application.cc (93%) rename namer/step_03/linux/{ => runner}/my_application.h (100%) create mode 100644 namer/step_04_a_widget/linux/runner/CMakeLists.txt rename namer/step_04_a_widget/linux/{ => runner}/main.cc (100%) rename namer/step_04_a_widget/linux/{ => runner}/my_application.cc (93%) rename namer/step_04_a_widget/linux/{ => runner}/my_application.h (100%) create mode 100644 namer/step_04_b_behavior/linux/runner/CMakeLists.txt rename namer/step_04_b_behavior/linux/{ => runner}/main.cc (100%) rename namer/step_04_b_behavior/linux/{ => runner}/my_application.cc (93%) rename namer/step_04_b_behavior/linux/{ => runner}/my_application.h (100%) create mode 100644 namer/step_05_a_pair/linux/runner/CMakeLists.txt rename namer/step_05_a_pair/linux/{ => runner}/main.cc (100%) rename namer/step_05_a_pair/linux/{ => runner}/my_application.cc (93%) rename namer/step_05_a_pair/linux/{ => runner}/my_application.h (100%) delete mode 100644 namer/step_05_b_extract/linux/my_application.cc create mode 100644 namer/step_05_b_extract/linux/runner/CMakeLists.txt rename namer/step_05_b_extract/linux/{ => runner}/main.cc (100%) create mode 100644 namer/step_05_b_extract/linux/runner/my_application.cc rename namer/step_05_b_extract/linux/{ => runner}/my_application.h (100%) delete mode 100644 namer/step_05_c_card_padding/linux/my_application.cc create mode 100644 namer/step_05_c_card_padding/linux/runner/CMakeLists.txt rename namer/step_05_c_card_padding/linux/{ => runner}/main.cc (100%) create mode 100644 namer/step_05_c_card_padding/linux/runner/my_application.cc rename namer/step_05_c_card_padding/linux/{ => runner}/my_application.h (100%) delete mode 100644 namer/step_05_d_theme/linux/my_application.cc create mode 100644 namer/step_05_d_theme/linux/runner/CMakeLists.txt rename namer/step_05_d_theme/linux/{ => runner}/main.cc (100%) create mode 100644 namer/step_05_d_theme/linux/runner/my_application.cc rename namer/step_05_d_theme/linux/{ => runner}/my_application.h (100%) delete mode 100644 namer/step_05_e_text_style/linux/my_application.cc create mode 100644 namer/step_05_e_text_style/linux/runner/CMakeLists.txt rename namer/step_05_e_text_style/linux/{ => runner}/main.cc (100%) create mode 100644 namer/step_05_e_text_style/linux/runner/my_application.cc rename namer/step_05_e_text_style/linux/{ => runner}/my_application.h (100%) delete mode 100644 namer/step_05_f_accessibility/linux/my_application.cc create mode 100644 namer/step_05_f_accessibility/linux/runner/CMakeLists.txt rename namer/step_05_f_accessibility/linux/{ => runner}/main.cc (100%) create mode 100644 namer/step_05_f_accessibility/linux/runner/my_application.cc rename namer/step_05_f_accessibility/linux/{ => runner}/my_application.h (100%) delete mode 100644 namer/step_05_g_center_vertical/linux/my_application.cc create mode 100644 namer/step_05_g_center_vertical/linux/runner/CMakeLists.txt rename namer/step_05_g_center_vertical/linux/{ => runner}/main.cc (100%) create mode 100644 namer/step_05_g_center_vertical/linux/runner/my_application.cc rename namer/step_05_g_center_vertical/linux/{ => runner}/my_application.h (100%) delete mode 100644 namer/step_05_h_center_horizontal/linux/my_application.cc create mode 100644 namer/step_05_h_center_horizontal/linux/runner/CMakeLists.txt rename namer/step_05_h_center_horizontal/linux/{ => runner}/main.cc (100%) create mode 100644 namer/step_05_h_center_horizontal/linux/runner/my_application.cc rename namer/step_05_h_center_horizontal/linux/{ => runner}/my_application.h (100%) delete mode 100644 namer/step_05_i_optional_changes/linux/my_application.cc create mode 100644 namer/step_05_i_optional_changes/linux/runner/CMakeLists.txt rename namer/step_05_i_optional_changes/linux/{ => runner}/main.cc (100%) create mode 100644 namer/step_05_i_optional_changes/linux/runner/my_application.cc rename namer/step_05_i_optional_changes/linux/{ => runner}/my_application.h (100%) delete mode 100644 namer/step_06_a_business_logic/linux/my_application.cc create mode 100644 namer/step_06_a_business_logic/linux/runner/CMakeLists.txt rename namer/step_06_a_business_logic/linux/{ => runner}/main.cc (100%) create mode 100644 namer/step_06_a_business_logic/linux/runner/my_application.cc rename namer/step_06_a_business_logic/linux/{ => runner}/my_application.h (100%) delete mode 100644 namer/step_06_b_add_row/linux/my_application.cc create mode 100644 namer/step_06_b_add_row/linux/runner/CMakeLists.txt rename namer/step_06_b_add_row/linux/{ => runner}/main.cc (100%) create mode 100644 namer/step_06_b_add_row/linux/runner/my_application.cc rename namer/step_06_b_add_row/linux/{ => runner}/my_application.h (100%) delete mode 100644 namer/step_06_c_add_like_button/linux/my_application.cc create mode 100644 namer/step_06_c_add_like_button/linux/runner/CMakeLists.txt rename namer/step_06_c_add_like_button/linux/{ => runner}/main.cc (100%) create mode 100644 namer/step_06_c_add_like_button/linux/runner/my_application.cc rename namer/step_06_c_add_like_button/linux/{ => runner}/my_application.h (100%) delete mode 100644 namer/step_07_a_split_my_home_page/linux/my_application.cc create mode 100644 namer/step_07_a_split_my_home_page/linux/runner/CMakeLists.txt rename namer/step_07_a_split_my_home_page/linux/{ => runner}/main.cc (100%) create mode 100644 namer/step_07_a_split_my_home_page/linux/runner/my_application.cc rename namer/step_07_a_split_my_home_page/linux/{ => runner}/my_application.h (100%) delete mode 100644 namer/step_07_b_convert_to_stateful/linux/my_application.cc create mode 100644 namer/step_07_b_convert_to_stateful/linux/runner/CMakeLists.txt rename namer/step_07_b_convert_to_stateful/linux/{ => runner}/main.cc (100%) create mode 100644 namer/step_07_b_convert_to_stateful/linux/runner/my_application.cc rename namer/step_07_b_convert_to_stateful/linux/{ => runner}/my_application.h (100%) delete mode 100644 namer/step_07_c_add_selectedindex/linux/my_application.cc create mode 100644 namer/step_07_c_add_selectedindex/linux/runner/CMakeLists.txt rename namer/step_07_c_add_selectedindex/linux/{ => runner}/main.cc (100%) create mode 100644 namer/step_07_c_add_selectedindex/linux/runner/my_application.cc rename namer/step_07_c_add_selectedindex/linux/{ => runner}/my_application.h (100%) delete mode 100644 namer/step_07_d_use_selectedindex/linux/my_application.cc create mode 100644 namer/step_07_d_use_selectedindex/linux/runner/CMakeLists.txt rename namer/step_07_d_use_selectedindex/linux/{ => runner}/main.cc (100%) create mode 100644 namer/step_07_d_use_selectedindex/linux/runner/my_application.cc rename namer/step_07_d_use_selectedindex/linux/{ => runner}/my_application.h (100%) delete mode 100644 namer/step_07_e_add_layout_builder/linux/my_application.cc create mode 100644 namer/step_07_e_add_layout_builder/linux/runner/CMakeLists.txt rename namer/step_07_e_add_layout_builder/linux/{ => runner}/main.cc (100%) create mode 100644 namer/step_07_e_add_layout_builder/linux/runner/my_application.cc rename namer/step_07_e_add_layout_builder/linux/{ => runner}/my_application.h (100%) delete mode 100644 namer/step_08/linux/my_application.cc create mode 100644 namer/step_08/linux/runner/CMakeLists.txt rename namer/step_08/linux/{ => runner}/main.cc (100%) create mode 100644 namer/step_08/linux/runner/my_application.cc rename namer/step_08/linux/{ => runner}/my_application.h (100%) diff --git a/namer/step_03/linux/CMakeLists.txt b/namer/step_03/linux/CMakeLists.txt index de3a7fe3b4..8aac122fd1 100644 --- a/namer/step_03/linux/CMakeLists.txt +++ b/namer/step_03/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/namer/step_03/linux/runner/CMakeLists.txt b/namer/step_03/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/namer/step_03/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/namer/step_03/linux/main.cc b/namer/step_03/linux/runner/main.cc similarity index 100% rename from namer/step_03/linux/main.cc rename to namer/step_03/linux/runner/main.cc diff --git a/namer/step_03/linux/my_application.cc b/namer/step_03/linux/runner/my_application.cc similarity index 93% rename from namer/step_03/linux/my_application.cc rename to namer/step_03/linux/runner/my_application.cc index f2fa0d03ee..406b304680 100644 --- a/namer/step_03/linux/my_application.cc +++ b/namer/step_03/linux/runner/my_application.cc @@ -117,6 +117,12 @@ static void my_application_class_init(MyApplicationClass* klass) { static void my_application_init(MyApplication* self) {} MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + return MY_APPLICATION(g_object_new(my_application_get_type(), "application-id", APPLICATION_ID, "flags", G_APPLICATION_NON_UNIQUE, diff --git a/namer/step_03/linux/my_application.h b/namer/step_03/linux/runner/my_application.h similarity index 100% rename from namer/step_03/linux/my_application.h rename to namer/step_03/linux/runner/my_application.h diff --git a/namer/step_03/web/index.html b/namer/step_03/web/index.html index 0789041b16..35f076e08f 100644 --- a/namer/step_03/web/index.html +++ b/namer/step_03/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/namer/step_04_a_widget/linux/CMakeLists.txt b/namer/step_04_a_widget/linux/CMakeLists.txt index de3a7fe3b4..8aac122fd1 100644 --- a/namer/step_04_a_widget/linux/CMakeLists.txt +++ b/namer/step_04_a_widget/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/namer/step_04_a_widget/linux/runner/CMakeLists.txt b/namer/step_04_a_widget/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/namer/step_04_a_widget/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/namer/step_04_a_widget/linux/main.cc b/namer/step_04_a_widget/linux/runner/main.cc similarity index 100% rename from namer/step_04_a_widget/linux/main.cc rename to namer/step_04_a_widget/linux/runner/main.cc diff --git a/namer/step_04_a_widget/linux/my_application.cc b/namer/step_04_a_widget/linux/runner/my_application.cc similarity index 93% rename from namer/step_04_a_widget/linux/my_application.cc rename to namer/step_04_a_widget/linux/runner/my_application.cc index f2fa0d03ee..406b304680 100644 --- a/namer/step_04_a_widget/linux/my_application.cc +++ b/namer/step_04_a_widget/linux/runner/my_application.cc @@ -117,6 +117,12 @@ static void my_application_class_init(MyApplicationClass* klass) { static void my_application_init(MyApplication* self) {} MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + return MY_APPLICATION(g_object_new(my_application_get_type(), "application-id", APPLICATION_ID, "flags", G_APPLICATION_NON_UNIQUE, diff --git a/namer/step_04_a_widget/linux/my_application.h b/namer/step_04_a_widget/linux/runner/my_application.h similarity index 100% rename from namer/step_04_a_widget/linux/my_application.h rename to namer/step_04_a_widget/linux/runner/my_application.h diff --git a/namer/step_04_a_widget/web/index.html b/namer/step_04_a_widget/web/index.html index 0789041b16..35f076e08f 100644 --- a/namer/step_04_a_widget/web/index.html +++ b/namer/step_04_a_widget/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/namer/step_04_b_behavior/linux/CMakeLists.txt b/namer/step_04_b_behavior/linux/CMakeLists.txt index de3a7fe3b4..8aac122fd1 100644 --- a/namer/step_04_b_behavior/linux/CMakeLists.txt +++ b/namer/step_04_b_behavior/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/namer/step_04_b_behavior/linux/runner/CMakeLists.txt b/namer/step_04_b_behavior/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/namer/step_04_b_behavior/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/namer/step_04_b_behavior/linux/main.cc b/namer/step_04_b_behavior/linux/runner/main.cc similarity index 100% rename from namer/step_04_b_behavior/linux/main.cc rename to namer/step_04_b_behavior/linux/runner/main.cc diff --git a/namer/step_04_b_behavior/linux/my_application.cc b/namer/step_04_b_behavior/linux/runner/my_application.cc similarity index 93% rename from namer/step_04_b_behavior/linux/my_application.cc rename to namer/step_04_b_behavior/linux/runner/my_application.cc index f2fa0d03ee..406b304680 100644 --- a/namer/step_04_b_behavior/linux/my_application.cc +++ b/namer/step_04_b_behavior/linux/runner/my_application.cc @@ -117,6 +117,12 @@ static void my_application_class_init(MyApplicationClass* klass) { static void my_application_init(MyApplication* self) {} MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + return MY_APPLICATION(g_object_new(my_application_get_type(), "application-id", APPLICATION_ID, "flags", G_APPLICATION_NON_UNIQUE, diff --git a/namer/step_04_b_behavior/linux/my_application.h b/namer/step_04_b_behavior/linux/runner/my_application.h similarity index 100% rename from namer/step_04_b_behavior/linux/my_application.h rename to namer/step_04_b_behavior/linux/runner/my_application.h diff --git a/namer/step_04_b_behavior/web/index.html b/namer/step_04_b_behavior/web/index.html index 0789041b16..35f076e08f 100644 --- a/namer/step_04_b_behavior/web/index.html +++ b/namer/step_04_b_behavior/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/namer/step_05_a_pair/linux/CMakeLists.txt b/namer/step_05_a_pair/linux/CMakeLists.txt index de3a7fe3b4..8aac122fd1 100644 --- a/namer/step_05_a_pair/linux/CMakeLists.txt +++ b/namer/step_05_a_pair/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/namer/step_05_a_pair/linux/runner/CMakeLists.txt b/namer/step_05_a_pair/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/namer/step_05_a_pair/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/namer/step_05_a_pair/linux/main.cc b/namer/step_05_a_pair/linux/runner/main.cc similarity index 100% rename from namer/step_05_a_pair/linux/main.cc rename to namer/step_05_a_pair/linux/runner/main.cc diff --git a/namer/step_05_a_pair/linux/my_application.cc b/namer/step_05_a_pair/linux/runner/my_application.cc similarity index 93% rename from namer/step_05_a_pair/linux/my_application.cc rename to namer/step_05_a_pair/linux/runner/my_application.cc index f2fa0d03ee..406b304680 100644 --- a/namer/step_05_a_pair/linux/my_application.cc +++ b/namer/step_05_a_pair/linux/runner/my_application.cc @@ -117,6 +117,12 @@ static void my_application_class_init(MyApplicationClass* klass) { static void my_application_init(MyApplication* self) {} MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + return MY_APPLICATION(g_object_new(my_application_get_type(), "application-id", APPLICATION_ID, "flags", G_APPLICATION_NON_UNIQUE, diff --git a/namer/step_05_a_pair/linux/my_application.h b/namer/step_05_a_pair/linux/runner/my_application.h similarity index 100% rename from namer/step_05_a_pair/linux/my_application.h rename to namer/step_05_a_pair/linux/runner/my_application.h diff --git a/namer/step_05_a_pair/web/index.html b/namer/step_05_a_pair/web/index.html index 0789041b16..35f076e08f 100644 --- a/namer/step_05_a_pair/web/index.html +++ b/namer/step_05_a_pair/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/namer/step_05_b_extract/linux/CMakeLists.txt b/namer/step_05_b_extract/linux/CMakeLists.txt index de3a7fe3b4..8aac122fd1 100644 --- a/namer/step_05_b_extract/linux/CMakeLists.txt +++ b/namer/step_05_b_extract/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/namer/step_05_b_extract/linux/my_application.cc b/namer/step_05_b_extract/linux/my_application.cc deleted file mode 100644 index f2fa0d03ee..0000000000 --- a/namer/step_05_b_extract/linux/my_application.cc +++ /dev/null @@ -1,124 +0,0 @@ -#include "my_application.h" - -#include -#ifdef GDK_WINDOWING_X11 -#include -#endif - -#include "flutter/generated_plugin_registrant.h" - -struct _MyApplication { - GtkApplication parent_instance; - char** dart_entrypoint_arguments; -}; - -G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) - -// Implements GApplication::activate. -static void my_application_activate(GApplication* application) { - MyApplication* self = MY_APPLICATION(application); - GtkWindow* window = - GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); - - // Use a header bar when running in GNOME as this is the common style used - // by applications and is the setup most users will be using (e.g. Ubuntu - // desktop). - // If running on X and not using GNOME then just use a traditional title bar - // in case the window manager does more exotic layout, e.g. tiling. - // If running on Wayland assume the header bar will work (may need changing - // if future cases occur). - gboolean use_header_bar = TRUE; -#ifdef GDK_WINDOWING_X11 - GdkScreen* screen = gtk_window_get_screen(window); - if (GDK_IS_X11_SCREEN(screen)) { - const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); - if (g_strcmp0(wm_name, "GNOME Shell") != 0) { - use_header_bar = FALSE; - } - } -#endif - if (use_header_bar) { - GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); - gtk_widget_show(GTK_WIDGET(header_bar)); - gtk_header_bar_set_title(header_bar, "namer_app"); - gtk_header_bar_set_show_close_button(header_bar, TRUE); - gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); - } else { - gtk_window_set_title(window, "namer_app"); - } - - gtk_window_set_default_size(window, 1280, 720); - gtk_widget_show(GTK_WIDGET(window)); - - g_autoptr(FlDartProject) project = fl_dart_project_new(); - fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); - - FlView* view = fl_view_new(project); - gtk_widget_show(GTK_WIDGET(view)); - gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); - - fl_register_plugins(FL_PLUGIN_REGISTRY(view)); - - gtk_widget_grab_focus(GTK_WIDGET(view)); -} - -// Implements GApplication::local_command_line. -static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { - MyApplication* self = MY_APPLICATION(application); - // Strip out the first argument as it is the binary name. - self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); - - g_autoptr(GError) error = nullptr; - if (!g_application_register(application, nullptr, &error)) { - g_warning("Failed to register: %s", error->message); - *exit_status = 1; - return TRUE; - } - - g_application_activate(application); - *exit_status = 0; - - return TRUE; -} - -// Implements GApplication::startup. -static void my_application_startup(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application startup. - - G_APPLICATION_CLASS(my_application_parent_class)->startup(application); -} - -// Implements GApplication::shutdown. -static void my_application_shutdown(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application shutdown. - - G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); -} - -// Implements GObject::dispose. -static void my_application_dispose(GObject* object) { - MyApplication* self = MY_APPLICATION(object); - g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); - G_OBJECT_CLASS(my_application_parent_class)->dispose(object); -} - -static void my_application_class_init(MyApplicationClass* klass) { - G_APPLICATION_CLASS(klass)->activate = my_application_activate; - G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; - G_APPLICATION_CLASS(klass)->startup = my_application_startup; - G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; - G_OBJECT_CLASS(klass)->dispose = my_application_dispose; -} - -static void my_application_init(MyApplication* self) {} - -MyApplication* my_application_new() { - return MY_APPLICATION(g_object_new(my_application_get_type(), - "application-id", APPLICATION_ID, - "flags", G_APPLICATION_NON_UNIQUE, - nullptr)); -} diff --git a/namer/step_05_b_extract/linux/runner/CMakeLists.txt b/namer/step_05_b_extract/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/namer/step_05_b_extract/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/namer/step_05_b_extract/linux/main.cc b/namer/step_05_b_extract/linux/runner/main.cc similarity index 100% rename from namer/step_05_b_extract/linux/main.cc rename to namer/step_05_b_extract/linux/runner/main.cc diff --git a/namer/step_05_b_extract/linux/runner/my_application.cc b/namer/step_05_b_extract/linux/runner/my_application.cc new file mode 100644 index 0000000000..406b304680 --- /dev/null +++ b/namer/step_05_b_extract/linux/runner/my_application.cc @@ -0,0 +1,130 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "namer_app"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "namer_app"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/namer/step_05_b_extract/linux/my_application.h b/namer/step_05_b_extract/linux/runner/my_application.h similarity index 100% rename from namer/step_05_b_extract/linux/my_application.h rename to namer/step_05_b_extract/linux/runner/my_application.h diff --git a/namer/step_05_b_extract/web/index.html b/namer/step_05_b_extract/web/index.html index 0789041b16..35f076e08f 100644 --- a/namer/step_05_b_extract/web/index.html +++ b/namer/step_05_b_extract/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/namer/step_05_c_card_padding/linux/CMakeLists.txt b/namer/step_05_c_card_padding/linux/CMakeLists.txt index de3a7fe3b4..8aac122fd1 100644 --- a/namer/step_05_c_card_padding/linux/CMakeLists.txt +++ b/namer/step_05_c_card_padding/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/namer/step_05_c_card_padding/linux/my_application.cc b/namer/step_05_c_card_padding/linux/my_application.cc deleted file mode 100644 index f2fa0d03ee..0000000000 --- a/namer/step_05_c_card_padding/linux/my_application.cc +++ /dev/null @@ -1,124 +0,0 @@ -#include "my_application.h" - -#include -#ifdef GDK_WINDOWING_X11 -#include -#endif - -#include "flutter/generated_plugin_registrant.h" - -struct _MyApplication { - GtkApplication parent_instance; - char** dart_entrypoint_arguments; -}; - -G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) - -// Implements GApplication::activate. -static void my_application_activate(GApplication* application) { - MyApplication* self = MY_APPLICATION(application); - GtkWindow* window = - GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); - - // Use a header bar when running in GNOME as this is the common style used - // by applications and is the setup most users will be using (e.g. Ubuntu - // desktop). - // If running on X and not using GNOME then just use a traditional title bar - // in case the window manager does more exotic layout, e.g. tiling. - // If running on Wayland assume the header bar will work (may need changing - // if future cases occur). - gboolean use_header_bar = TRUE; -#ifdef GDK_WINDOWING_X11 - GdkScreen* screen = gtk_window_get_screen(window); - if (GDK_IS_X11_SCREEN(screen)) { - const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); - if (g_strcmp0(wm_name, "GNOME Shell") != 0) { - use_header_bar = FALSE; - } - } -#endif - if (use_header_bar) { - GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); - gtk_widget_show(GTK_WIDGET(header_bar)); - gtk_header_bar_set_title(header_bar, "namer_app"); - gtk_header_bar_set_show_close_button(header_bar, TRUE); - gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); - } else { - gtk_window_set_title(window, "namer_app"); - } - - gtk_window_set_default_size(window, 1280, 720); - gtk_widget_show(GTK_WIDGET(window)); - - g_autoptr(FlDartProject) project = fl_dart_project_new(); - fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); - - FlView* view = fl_view_new(project); - gtk_widget_show(GTK_WIDGET(view)); - gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); - - fl_register_plugins(FL_PLUGIN_REGISTRY(view)); - - gtk_widget_grab_focus(GTK_WIDGET(view)); -} - -// Implements GApplication::local_command_line. -static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { - MyApplication* self = MY_APPLICATION(application); - // Strip out the first argument as it is the binary name. - self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); - - g_autoptr(GError) error = nullptr; - if (!g_application_register(application, nullptr, &error)) { - g_warning("Failed to register: %s", error->message); - *exit_status = 1; - return TRUE; - } - - g_application_activate(application); - *exit_status = 0; - - return TRUE; -} - -// Implements GApplication::startup. -static void my_application_startup(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application startup. - - G_APPLICATION_CLASS(my_application_parent_class)->startup(application); -} - -// Implements GApplication::shutdown. -static void my_application_shutdown(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application shutdown. - - G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); -} - -// Implements GObject::dispose. -static void my_application_dispose(GObject* object) { - MyApplication* self = MY_APPLICATION(object); - g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); - G_OBJECT_CLASS(my_application_parent_class)->dispose(object); -} - -static void my_application_class_init(MyApplicationClass* klass) { - G_APPLICATION_CLASS(klass)->activate = my_application_activate; - G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; - G_APPLICATION_CLASS(klass)->startup = my_application_startup; - G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; - G_OBJECT_CLASS(klass)->dispose = my_application_dispose; -} - -static void my_application_init(MyApplication* self) {} - -MyApplication* my_application_new() { - return MY_APPLICATION(g_object_new(my_application_get_type(), - "application-id", APPLICATION_ID, - "flags", G_APPLICATION_NON_UNIQUE, - nullptr)); -} diff --git a/namer/step_05_c_card_padding/linux/runner/CMakeLists.txt b/namer/step_05_c_card_padding/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/namer/step_05_c_card_padding/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/namer/step_05_c_card_padding/linux/main.cc b/namer/step_05_c_card_padding/linux/runner/main.cc similarity index 100% rename from namer/step_05_c_card_padding/linux/main.cc rename to namer/step_05_c_card_padding/linux/runner/main.cc diff --git a/namer/step_05_c_card_padding/linux/runner/my_application.cc b/namer/step_05_c_card_padding/linux/runner/my_application.cc new file mode 100644 index 0000000000..406b304680 --- /dev/null +++ b/namer/step_05_c_card_padding/linux/runner/my_application.cc @@ -0,0 +1,130 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "namer_app"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "namer_app"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/namer/step_05_c_card_padding/linux/my_application.h b/namer/step_05_c_card_padding/linux/runner/my_application.h similarity index 100% rename from namer/step_05_c_card_padding/linux/my_application.h rename to namer/step_05_c_card_padding/linux/runner/my_application.h diff --git a/namer/step_05_c_card_padding/web/index.html b/namer/step_05_c_card_padding/web/index.html index 0789041b16..35f076e08f 100644 --- a/namer/step_05_c_card_padding/web/index.html +++ b/namer/step_05_c_card_padding/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/namer/step_05_d_theme/linux/CMakeLists.txt b/namer/step_05_d_theme/linux/CMakeLists.txt index de3a7fe3b4..8aac122fd1 100644 --- a/namer/step_05_d_theme/linux/CMakeLists.txt +++ b/namer/step_05_d_theme/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/namer/step_05_d_theme/linux/my_application.cc b/namer/step_05_d_theme/linux/my_application.cc deleted file mode 100644 index f2fa0d03ee..0000000000 --- a/namer/step_05_d_theme/linux/my_application.cc +++ /dev/null @@ -1,124 +0,0 @@ -#include "my_application.h" - -#include -#ifdef GDK_WINDOWING_X11 -#include -#endif - -#include "flutter/generated_plugin_registrant.h" - -struct _MyApplication { - GtkApplication parent_instance; - char** dart_entrypoint_arguments; -}; - -G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) - -// Implements GApplication::activate. -static void my_application_activate(GApplication* application) { - MyApplication* self = MY_APPLICATION(application); - GtkWindow* window = - GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); - - // Use a header bar when running in GNOME as this is the common style used - // by applications and is the setup most users will be using (e.g. Ubuntu - // desktop). - // If running on X and not using GNOME then just use a traditional title bar - // in case the window manager does more exotic layout, e.g. tiling. - // If running on Wayland assume the header bar will work (may need changing - // if future cases occur). - gboolean use_header_bar = TRUE; -#ifdef GDK_WINDOWING_X11 - GdkScreen* screen = gtk_window_get_screen(window); - if (GDK_IS_X11_SCREEN(screen)) { - const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); - if (g_strcmp0(wm_name, "GNOME Shell") != 0) { - use_header_bar = FALSE; - } - } -#endif - if (use_header_bar) { - GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); - gtk_widget_show(GTK_WIDGET(header_bar)); - gtk_header_bar_set_title(header_bar, "namer_app"); - gtk_header_bar_set_show_close_button(header_bar, TRUE); - gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); - } else { - gtk_window_set_title(window, "namer_app"); - } - - gtk_window_set_default_size(window, 1280, 720); - gtk_widget_show(GTK_WIDGET(window)); - - g_autoptr(FlDartProject) project = fl_dart_project_new(); - fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); - - FlView* view = fl_view_new(project); - gtk_widget_show(GTK_WIDGET(view)); - gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); - - fl_register_plugins(FL_PLUGIN_REGISTRY(view)); - - gtk_widget_grab_focus(GTK_WIDGET(view)); -} - -// Implements GApplication::local_command_line. -static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { - MyApplication* self = MY_APPLICATION(application); - // Strip out the first argument as it is the binary name. - self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); - - g_autoptr(GError) error = nullptr; - if (!g_application_register(application, nullptr, &error)) { - g_warning("Failed to register: %s", error->message); - *exit_status = 1; - return TRUE; - } - - g_application_activate(application); - *exit_status = 0; - - return TRUE; -} - -// Implements GApplication::startup. -static void my_application_startup(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application startup. - - G_APPLICATION_CLASS(my_application_parent_class)->startup(application); -} - -// Implements GApplication::shutdown. -static void my_application_shutdown(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application shutdown. - - G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); -} - -// Implements GObject::dispose. -static void my_application_dispose(GObject* object) { - MyApplication* self = MY_APPLICATION(object); - g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); - G_OBJECT_CLASS(my_application_parent_class)->dispose(object); -} - -static void my_application_class_init(MyApplicationClass* klass) { - G_APPLICATION_CLASS(klass)->activate = my_application_activate; - G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; - G_APPLICATION_CLASS(klass)->startup = my_application_startup; - G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; - G_OBJECT_CLASS(klass)->dispose = my_application_dispose; -} - -static void my_application_init(MyApplication* self) {} - -MyApplication* my_application_new() { - return MY_APPLICATION(g_object_new(my_application_get_type(), - "application-id", APPLICATION_ID, - "flags", G_APPLICATION_NON_UNIQUE, - nullptr)); -} diff --git a/namer/step_05_d_theme/linux/runner/CMakeLists.txt b/namer/step_05_d_theme/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/namer/step_05_d_theme/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/namer/step_05_d_theme/linux/main.cc b/namer/step_05_d_theme/linux/runner/main.cc similarity index 100% rename from namer/step_05_d_theme/linux/main.cc rename to namer/step_05_d_theme/linux/runner/main.cc diff --git a/namer/step_05_d_theme/linux/runner/my_application.cc b/namer/step_05_d_theme/linux/runner/my_application.cc new file mode 100644 index 0000000000..406b304680 --- /dev/null +++ b/namer/step_05_d_theme/linux/runner/my_application.cc @@ -0,0 +1,130 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "namer_app"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "namer_app"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/namer/step_05_d_theme/linux/my_application.h b/namer/step_05_d_theme/linux/runner/my_application.h similarity index 100% rename from namer/step_05_d_theme/linux/my_application.h rename to namer/step_05_d_theme/linux/runner/my_application.h diff --git a/namer/step_05_d_theme/web/index.html b/namer/step_05_d_theme/web/index.html index 0789041b16..35f076e08f 100644 --- a/namer/step_05_d_theme/web/index.html +++ b/namer/step_05_d_theme/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/namer/step_05_e_text_style/linux/CMakeLists.txt b/namer/step_05_e_text_style/linux/CMakeLists.txt index de3a7fe3b4..8aac122fd1 100644 --- a/namer/step_05_e_text_style/linux/CMakeLists.txt +++ b/namer/step_05_e_text_style/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/namer/step_05_e_text_style/linux/my_application.cc b/namer/step_05_e_text_style/linux/my_application.cc deleted file mode 100644 index f2fa0d03ee..0000000000 --- a/namer/step_05_e_text_style/linux/my_application.cc +++ /dev/null @@ -1,124 +0,0 @@ -#include "my_application.h" - -#include -#ifdef GDK_WINDOWING_X11 -#include -#endif - -#include "flutter/generated_plugin_registrant.h" - -struct _MyApplication { - GtkApplication parent_instance; - char** dart_entrypoint_arguments; -}; - -G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) - -// Implements GApplication::activate. -static void my_application_activate(GApplication* application) { - MyApplication* self = MY_APPLICATION(application); - GtkWindow* window = - GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); - - // Use a header bar when running in GNOME as this is the common style used - // by applications and is the setup most users will be using (e.g. Ubuntu - // desktop). - // If running on X and not using GNOME then just use a traditional title bar - // in case the window manager does more exotic layout, e.g. tiling. - // If running on Wayland assume the header bar will work (may need changing - // if future cases occur). - gboolean use_header_bar = TRUE; -#ifdef GDK_WINDOWING_X11 - GdkScreen* screen = gtk_window_get_screen(window); - if (GDK_IS_X11_SCREEN(screen)) { - const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); - if (g_strcmp0(wm_name, "GNOME Shell") != 0) { - use_header_bar = FALSE; - } - } -#endif - if (use_header_bar) { - GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); - gtk_widget_show(GTK_WIDGET(header_bar)); - gtk_header_bar_set_title(header_bar, "namer_app"); - gtk_header_bar_set_show_close_button(header_bar, TRUE); - gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); - } else { - gtk_window_set_title(window, "namer_app"); - } - - gtk_window_set_default_size(window, 1280, 720); - gtk_widget_show(GTK_WIDGET(window)); - - g_autoptr(FlDartProject) project = fl_dart_project_new(); - fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); - - FlView* view = fl_view_new(project); - gtk_widget_show(GTK_WIDGET(view)); - gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); - - fl_register_plugins(FL_PLUGIN_REGISTRY(view)); - - gtk_widget_grab_focus(GTK_WIDGET(view)); -} - -// Implements GApplication::local_command_line. -static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { - MyApplication* self = MY_APPLICATION(application); - // Strip out the first argument as it is the binary name. - self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); - - g_autoptr(GError) error = nullptr; - if (!g_application_register(application, nullptr, &error)) { - g_warning("Failed to register: %s", error->message); - *exit_status = 1; - return TRUE; - } - - g_application_activate(application); - *exit_status = 0; - - return TRUE; -} - -// Implements GApplication::startup. -static void my_application_startup(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application startup. - - G_APPLICATION_CLASS(my_application_parent_class)->startup(application); -} - -// Implements GApplication::shutdown. -static void my_application_shutdown(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application shutdown. - - G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); -} - -// Implements GObject::dispose. -static void my_application_dispose(GObject* object) { - MyApplication* self = MY_APPLICATION(object); - g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); - G_OBJECT_CLASS(my_application_parent_class)->dispose(object); -} - -static void my_application_class_init(MyApplicationClass* klass) { - G_APPLICATION_CLASS(klass)->activate = my_application_activate; - G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; - G_APPLICATION_CLASS(klass)->startup = my_application_startup; - G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; - G_OBJECT_CLASS(klass)->dispose = my_application_dispose; -} - -static void my_application_init(MyApplication* self) {} - -MyApplication* my_application_new() { - return MY_APPLICATION(g_object_new(my_application_get_type(), - "application-id", APPLICATION_ID, - "flags", G_APPLICATION_NON_UNIQUE, - nullptr)); -} diff --git a/namer/step_05_e_text_style/linux/runner/CMakeLists.txt b/namer/step_05_e_text_style/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/namer/step_05_e_text_style/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/namer/step_05_e_text_style/linux/main.cc b/namer/step_05_e_text_style/linux/runner/main.cc similarity index 100% rename from namer/step_05_e_text_style/linux/main.cc rename to namer/step_05_e_text_style/linux/runner/main.cc diff --git a/namer/step_05_e_text_style/linux/runner/my_application.cc b/namer/step_05_e_text_style/linux/runner/my_application.cc new file mode 100644 index 0000000000..406b304680 --- /dev/null +++ b/namer/step_05_e_text_style/linux/runner/my_application.cc @@ -0,0 +1,130 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "namer_app"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "namer_app"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/namer/step_05_e_text_style/linux/my_application.h b/namer/step_05_e_text_style/linux/runner/my_application.h similarity index 100% rename from namer/step_05_e_text_style/linux/my_application.h rename to namer/step_05_e_text_style/linux/runner/my_application.h diff --git a/namer/step_05_e_text_style/web/index.html b/namer/step_05_e_text_style/web/index.html index 0789041b16..35f076e08f 100644 --- a/namer/step_05_e_text_style/web/index.html +++ b/namer/step_05_e_text_style/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/namer/step_05_f_accessibility/linux/CMakeLists.txt b/namer/step_05_f_accessibility/linux/CMakeLists.txt index de3a7fe3b4..8aac122fd1 100644 --- a/namer/step_05_f_accessibility/linux/CMakeLists.txt +++ b/namer/step_05_f_accessibility/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/namer/step_05_f_accessibility/linux/my_application.cc b/namer/step_05_f_accessibility/linux/my_application.cc deleted file mode 100644 index f2fa0d03ee..0000000000 --- a/namer/step_05_f_accessibility/linux/my_application.cc +++ /dev/null @@ -1,124 +0,0 @@ -#include "my_application.h" - -#include -#ifdef GDK_WINDOWING_X11 -#include -#endif - -#include "flutter/generated_plugin_registrant.h" - -struct _MyApplication { - GtkApplication parent_instance; - char** dart_entrypoint_arguments; -}; - -G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) - -// Implements GApplication::activate. -static void my_application_activate(GApplication* application) { - MyApplication* self = MY_APPLICATION(application); - GtkWindow* window = - GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); - - // Use a header bar when running in GNOME as this is the common style used - // by applications and is the setup most users will be using (e.g. Ubuntu - // desktop). - // If running on X and not using GNOME then just use a traditional title bar - // in case the window manager does more exotic layout, e.g. tiling. - // If running on Wayland assume the header bar will work (may need changing - // if future cases occur). - gboolean use_header_bar = TRUE; -#ifdef GDK_WINDOWING_X11 - GdkScreen* screen = gtk_window_get_screen(window); - if (GDK_IS_X11_SCREEN(screen)) { - const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); - if (g_strcmp0(wm_name, "GNOME Shell") != 0) { - use_header_bar = FALSE; - } - } -#endif - if (use_header_bar) { - GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); - gtk_widget_show(GTK_WIDGET(header_bar)); - gtk_header_bar_set_title(header_bar, "namer_app"); - gtk_header_bar_set_show_close_button(header_bar, TRUE); - gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); - } else { - gtk_window_set_title(window, "namer_app"); - } - - gtk_window_set_default_size(window, 1280, 720); - gtk_widget_show(GTK_WIDGET(window)); - - g_autoptr(FlDartProject) project = fl_dart_project_new(); - fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); - - FlView* view = fl_view_new(project); - gtk_widget_show(GTK_WIDGET(view)); - gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); - - fl_register_plugins(FL_PLUGIN_REGISTRY(view)); - - gtk_widget_grab_focus(GTK_WIDGET(view)); -} - -// Implements GApplication::local_command_line. -static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { - MyApplication* self = MY_APPLICATION(application); - // Strip out the first argument as it is the binary name. - self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); - - g_autoptr(GError) error = nullptr; - if (!g_application_register(application, nullptr, &error)) { - g_warning("Failed to register: %s", error->message); - *exit_status = 1; - return TRUE; - } - - g_application_activate(application); - *exit_status = 0; - - return TRUE; -} - -// Implements GApplication::startup. -static void my_application_startup(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application startup. - - G_APPLICATION_CLASS(my_application_parent_class)->startup(application); -} - -// Implements GApplication::shutdown. -static void my_application_shutdown(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application shutdown. - - G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); -} - -// Implements GObject::dispose. -static void my_application_dispose(GObject* object) { - MyApplication* self = MY_APPLICATION(object); - g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); - G_OBJECT_CLASS(my_application_parent_class)->dispose(object); -} - -static void my_application_class_init(MyApplicationClass* klass) { - G_APPLICATION_CLASS(klass)->activate = my_application_activate; - G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; - G_APPLICATION_CLASS(klass)->startup = my_application_startup; - G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; - G_OBJECT_CLASS(klass)->dispose = my_application_dispose; -} - -static void my_application_init(MyApplication* self) {} - -MyApplication* my_application_new() { - return MY_APPLICATION(g_object_new(my_application_get_type(), - "application-id", APPLICATION_ID, - "flags", G_APPLICATION_NON_UNIQUE, - nullptr)); -} diff --git a/namer/step_05_f_accessibility/linux/runner/CMakeLists.txt b/namer/step_05_f_accessibility/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/namer/step_05_f_accessibility/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/namer/step_05_f_accessibility/linux/main.cc b/namer/step_05_f_accessibility/linux/runner/main.cc similarity index 100% rename from namer/step_05_f_accessibility/linux/main.cc rename to namer/step_05_f_accessibility/linux/runner/main.cc diff --git a/namer/step_05_f_accessibility/linux/runner/my_application.cc b/namer/step_05_f_accessibility/linux/runner/my_application.cc new file mode 100644 index 0000000000..406b304680 --- /dev/null +++ b/namer/step_05_f_accessibility/linux/runner/my_application.cc @@ -0,0 +1,130 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "namer_app"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "namer_app"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/namer/step_05_f_accessibility/linux/my_application.h b/namer/step_05_f_accessibility/linux/runner/my_application.h similarity index 100% rename from namer/step_05_f_accessibility/linux/my_application.h rename to namer/step_05_f_accessibility/linux/runner/my_application.h diff --git a/namer/step_05_f_accessibility/web/index.html b/namer/step_05_f_accessibility/web/index.html index 0789041b16..35f076e08f 100644 --- a/namer/step_05_f_accessibility/web/index.html +++ b/namer/step_05_f_accessibility/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/namer/step_05_g_center_vertical/linux/CMakeLists.txt b/namer/step_05_g_center_vertical/linux/CMakeLists.txt index de3a7fe3b4..8aac122fd1 100644 --- a/namer/step_05_g_center_vertical/linux/CMakeLists.txt +++ b/namer/step_05_g_center_vertical/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/namer/step_05_g_center_vertical/linux/my_application.cc b/namer/step_05_g_center_vertical/linux/my_application.cc deleted file mode 100644 index f2fa0d03ee..0000000000 --- a/namer/step_05_g_center_vertical/linux/my_application.cc +++ /dev/null @@ -1,124 +0,0 @@ -#include "my_application.h" - -#include -#ifdef GDK_WINDOWING_X11 -#include -#endif - -#include "flutter/generated_plugin_registrant.h" - -struct _MyApplication { - GtkApplication parent_instance; - char** dart_entrypoint_arguments; -}; - -G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) - -// Implements GApplication::activate. -static void my_application_activate(GApplication* application) { - MyApplication* self = MY_APPLICATION(application); - GtkWindow* window = - GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); - - // Use a header bar when running in GNOME as this is the common style used - // by applications and is the setup most users will be using (e.g. Ubuntu - // desktop). - // If running on X and not using GNOME then just use a traditional title bar - // in case the window manager does more exotic layout, e.g. tiling. - // If running on Wayland assume the header bar will work (may need changing - // if future cases occur). - gboolean use_header_bar = TRUE; -#ifdef GDK_WINDOWING_X11 - GdkScreen* screen = gtk_window_get_screen(window); - if (GDK_IS_X11_SCREEN(screen)) { - const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); - if (g_strcmp0(wm_name, "GNOME Shell") != 0) { - use_header_bar = FALSE; - } - } -#endif - if (use_header_bar) { - GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); - gtk_widget_show(GTK_WIDGET(header_bar)); - gtk_header_bar_set_title(header_bar, "namer_app"); - gtk_header_bar_set_show_close_button(header_bar, TRUE); - gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); - } else { - gtk_window_set_title(window, "namer_app"); - } - - gtk_window_set_default_size(window, 1280, 720); - gtk_widget_show(GTK_WIDGET(window)); - - g_autoptr(FlDartProject) project = fl_dart_project_new(); - fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); - - FlView* view = fl_view_new(project); - gtk_widget_show(GTK_WIDGET(view)); - gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); - - fl_register_plugins(FL_PLUGIN_REGISTRY(view)); - - gtk_widget_grab_focus(GTK_WIDGET(view)); -} - -// Implements GApplication::local_command_line. -static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { - MyApplication* self = MY_APPLICATION(application); - // Strip out the first argument as it is the binary name. - self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); - - g_autoptr(GError) error = nullptr; - if (!g_application_register(application, nullptr, &error)) { - g_warning("Failed to register: %s", error->message); - *exit_status = 1; - return TRUE; - } - - g_application_activate(application); - *exit_status = 0; - - return TRUE; -} - -// Implements GApplication::startup. -static void my_application_startup(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application startup. - - G_APPLICATION_CLASS(my_application_parent_class)->startup(application); -} - -// Implements GApplication::shutdown. -static void my_application_shutdown(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application shutdown. - - G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); -} - -// Implements GObject::dispose. -static void my_application_dispose(GObject* object) { - MyApplication* self = MY_APPLICATION(object); - g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); - G_OBJECT_CLASS(my_application_parent_class)->dispose(object); -} - -static void my_application_class_init(MyApplicationClass* klass) { - G_APPLICATION_CLASS(klass)->activate = my_application_activate; - G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; - G_APPLICATION_CLASS(klass)->startup = my_application_startup; - G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; - G_OBJECT_CLASS(klass)->dispose = my_application_dispose; -} - -static void my_application_init(MyApplication* self) {} - -MyApplication* my_application_new() { - return MY_APPLICATION(g_object_new(my_application_get_type(), - "application-id", APPLICATION_ID, - "flags", G_APPLICATION_NON_UNIQUE, - nullptr)); -} diff --git a/namer/step_05_g_center_vertical/linux/runner/CMakeLists.txt b/namer/step_05_g_center_vertical/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/namer/step_05_g_center_vertical/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/namer/step_05_g_center_vertical/linux/main.cc b/namer/step_05_g_center_vertical/linux/runner/main.cc similarity index 100% rename from namer/step_05_g_center_vertical/linux/main.cc rename to namer/step_05_g_center_vertical/linux/runner/main.cc diff --git a/namer/step_05_g_center_vertical/linux/runner/my_application.cc b/namer/step_05_g_center_vertical/linux/runner/my_application.cc new file mode 100644 index 0000000000..406b304680 --- /dev/null +++ b/namer/step_05_g_center_vertical/linux/runner/my_application.cc @@ -0,0 +1,130 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "namer_app"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "namer_app"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/namer/step_05_g_center_vertical/linux/my_application.h b/namer/step_05_g_center_vertical/linux/runner/my_application.h similarity index 100% rename from namer/step_05_g_center_vertical/linux/my_application.h rename to namer/step_05_g_center_vertical/linux/runner/my_application.h diff --git a/namer/step_05_g_center_vertical/web/index.html b/namer/step_05_g_center_vertical/web/index.html index 0789041b16..35f076e08f 100644 --- a/namer/step_05_g_center_vertical/web/index.html +++ b/namer/step_05_g_center_vertical/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/namer/step_05_h_center_horizontal/linux/CMakeLists.txt b/namer/step_05_h_center_horizontal/linux/CMakeLists.txt index de3a7fe3b4..8aac122fd1 100644 --- a/namer/step_05_h_center_horizontal/linux/CMakeLists.txt +++ b/namer/step_05_h_center_horizontal/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/namer/step_05_h_center_horizontal/linux/my_application.cc b/namer/step_05_h_center_horizontal/linux/my_application.cc deleted file mode 100644 index f2fa0d03ee..0000000000 --- a/namer/step_05_h_center_horizontal/linux/my_application.cc +++ /dev/null @@ -1,124 +0,0 @@ -#include "my_application.h" - -#include -#ifdef GDK_WINDOWING_X11 -#include -#endif - -#include "flutter/generated_plugin_registrant.h" - -struct _MyApplication { - GtkApplication parent_instance; - char** dart_entrypoint_arguments; -}; - -G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) - -// Implements GApplication::activate. -static void my_application_activate(GApplication* application) { - MyApplication* self = MY_APPLICATION(application); - GtkWindow* window = - GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); - - // Use a header bar when running in GNOME as this is the common style used - // by applications and is the setup most users will be using (e.g. Ubuntu - // desktop). - // If running on X and not using GNOME then just use a traditional title bar - // in case the window manager does more exotic layout, e.g. tiling. - // If running on Wayland assume the header bar will work (may need changing - // if future cases occur). - gboolean use_header_bar = TRUE; -#ifdef GDK_WINDOWING_X11 - GdkScreen* screen = gtk_window_get_screen(window); - if (GDK_IS_X11_SCREEN(screen)) { - const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); - if (g_strcmp0(wm_name, "GNOME Shell") != 0) { - use_header_bar = FALSE; - } - } -#endif - if (use_header_bar) { - GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); - gtk_widget_show(GTK_WIDGET(header_bar)); - gtk_header_bar_set_title(header_bar, "namer_app"); - gtk_header_bar_set_show_close_button(header_bar, TRUE); - gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); - } else { - gtk_window_set_title(window, "namer_app"); - } - - gtk_window_set_default_size(window, 1280, 720); - gtk_widget_show(GTK_WIDGET(window)); - - g_autoptr(FlDartProject) project = fl_dart_project_new(); - fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); - - FlView* view = fl_view_new(project); - gtk_widget_show(GTK_WIDGET(view)); - gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); - - fl_register_plugins(FL_PLUGIN_REGISTRY(view)); - - gtk_widget_grab_focus(GTK_WIDGET(view)); -} - -// Implements GApplication::local_command_line. -static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { - MyApplication* self = MY_APPLICATION(application); - // Strip out the first argument as it is the binary name. - self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); - - g_autoptr(GError) error = nullptr; - if (!g_application_register(application, nullptr, &error)) { - g_warning("Failed to register: %s", error->message); - *exit_status = 1; - return TRUE; - } - - g_application_activate(application); - *exit_status = 0; - - return TRUE; -} - -// Implements GApplication::startup. -static void my_application_startup(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application startup. - - G_APPLICATION_CLASS(my_application_parent_class)->startup(application); -} - -// Implements GApplication::shutdown. -static void my_application_shutdown(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application shutdown. - - G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); -} - -// Implements GObject::dispose. -static void my_application_dispose(GObject* object) { - MyApplication* self = MY_APPLICATION(object); - g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); - G_OBJECT_CLASS(my_application_parent_class)->dispose(object); -} - -static void my_application_class_init(MyApplicationClass* klass) { - G_APPLICATION_CLASS(klass)->activate = my_application_activate; - G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; - G_APPLICATION_CLASS(klass)->startup = my_application_startup; - G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; - G_OBJECT_CLASS(klass)->dispose = my_application_dispose; -} - -static void my_application_init(MyApplication* self) {} - -MyApplication* my_application_new() { - return MY_APPLICATION(g_object_new(my_application_get_type(), - "application-id", APPLICATION_ID, - "flags", G_APPLICATION_NON_UNIQUE, - nullptr)); -} diff --git a/namer/step_05_h_center_horizontal/linux/runner/CMakeLists.txt b/namer/step_05_h_center_horizontal/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/namer/step_05_h_center_horizontal/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/namer/step_05_h_center_horizontal/linux/main.cc b/namer/step_05_h_center_horizontal/linux/runner/main.cc similarity index 100% rename from namer/step_05_h_center_horizontal/linux/main.cc rename to namer/step_05_h_center_horizontal/linux/runner/main.cc diff --git a/namer/step_05_h_center_horizontal/linux/runner/my_application.cc b/namer/step_05_h_center_horizontal/linux/runner/my_application.cc new file mode 100644 index 0000000000..406b304680 --- /dev/null +++ b/namer/step_05_h_center_horizontal/linux/runner/my_application.cc @@ -0,0 +1,130 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "namer_app"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "namer_app"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/namer/step_05_h_center_horizontal/linux/my_application.h b/namer/step_05_h_center_horizontal/linux/runner/my_application.h similarity index 100% rename from namer/step_05_h_center_horizontal/linux/my_application.h rename to namer/step_05_h_center_horizontal/linux/runner/my_application.h diff --git a/namer/step_05_h_center_horizontal/web/index.html b/namer/step_05_h_center_horizontal/web/index.html index 0789041b16..35f076e08f 100644 --- a/namer/step_05_h_center_horizontal/web/index.html +++ b/namer/step_05_h_center_horizontal/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/namer/step_05_i_optional_changes/linux/CMakeLists.txt b/namer/step_05_i_optional_changes/linux/CMakeLists.txt index de3a7fe3b4..8aac122fd1 100644 --- a/namer/step_05_i_optional_changes/linux/CMakeLists.txt +++ b/namer/step_05_i_optional_changes/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/namer/step_05_i_optional_changes/linux/my_application.cc b/namer/step_05_i_optional_changes/linux/my_application.cc deleted file mode 100644 index f2fa0d03ee..0000000000 --- a/namer/step_05_i_optional_changes/linux/my_application.cc +++ /dev/null @@ -1,124 +0,0 @@ -#include "my_application.h" - -#include -#ifdef GDK_WINDOWING_X11 -#include -#endif - -#include "flutter/generated_plugin_registrant.h" - -struct _MyApplication { - GtkApplication parent_instance; - char** dart_entrypoint_arguments; -}; - -G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) - -// Implements GApplication::activate. -static void my_application_activate(GApplication* application) { - MyApplication* self = MY_APPLICATION(application); - GtkWindow* window = - GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); - - // Use a header bar when running in GNOME as this is the common style used - // by applications and is the setup most users will be using (e.g. Ubuntu - // desktop). - // If running on X and not using GNOME then just use a traditional title bar - // in case the window manager does more exotic layout, e.g. tiling. - // If running on Wayland assume the header bar will work (may need changing - // if future cases occur). - gboolean use_header_bar = TRUE; -#ifdef GDK_WINDOWING_X11 - GdkScreen* screen = gtk_window_get_screen(window); - if (GDK_IS_X11_SCREEN(screen)) { - const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); - if (g_strcmp0(wm_name, "GNOME Shell") != 0) { - use_header_bar = FALSE; - } - } -#endif - if (use_header_bar) { - GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); - gtk_widget_show(GTK_WIDGET(header_bar)); - gtk_header_bar_set_title(header_bar, "namer_app"); - gtk_header_bar_set_show_close_button(header_bar, TRUE); - gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); - } else { - gtk_window_set_title(window, "namer_app"); - } - - gtk_window_set_default_size(window, 1280, 720); - gtk_widget_show(GTK_WIDGET(window)); - - g_autoptr(FlDartProject) project = fl_dart_project_new(); - fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); - - FlView* view = fl_view_new(project); - gtk_widget_show(GTK_WIDGET(view)); - gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); - - fl_register_plugins(FL_PLUGIN_REGISTRY(view)); - - gtk_widget_grab_focus(GTK_WIDGET(view)); -} - -// Implements GApplication::local_command_line. -static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { - MyApplication* self = MY_APPLICATION(application); - // Strip out the first argument as it is the binary name. - self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); - - g_autoptr(GError) error = nullptr; - if (!g_application_register(application, nullptr, &error)) { - g_warning("Failed to register: %s", error->message); - *exit_status = 1; - return TRUE; - } - - g_application_activate(application); - *exit_status = 0; - - return TRUE; -} - -// Implements GApplication::startup. -static void my_application_startup(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application startup. - - G_APPLICATION_CLASS(my_application_parent_class)->startup(application); -} - -// Implements GApplication::shutdown. -static void my_application_shutdown(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application shutdown. - - G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); -} - -// Implements GObject::dispose. -static void my_application_dispose(GObject* object) { - MyApplication* self = MY_APPLICATION(object); - g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); - G_OBJECT_CLASS(my_application_parent_class)->dispose(object); -} - -static void my_application_class_init(MyApplicationClass* klass) { - G_APPLICATION_CLASS(klass)->activate = my_application_activate; - G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; - G_APPLICATION_CLASS(klass)->startup = my_application_startup; - G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; - G_OBJECT_CLASS(klass)->dispose = my_application_dispose; -} - -static void my_application_init(MyApplication* self) {} - -MyApplication* my_application_new() { - return MY_APPLICATION(g_object_new(my_application_get_type(), - "application-id", APPLICATION_ID, - "flags", G_APPLICATION_NON_UNIQUE, - nullptr)); -} diff --git a/namer/step_05_i_optional_changes/linux/runner/CMakeLists.txt b/namer/step_05_i_optional_changes/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/namer/step_05_i_optional_changes/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/namer/step_05_i_optional_changes/linux/main.cc b/namer/step_05_i_optional_changes/linux/runner/main.cc similarity index 100% rename from namer/step_05_i_optional_changes/linux/main.cc rename to namer/step_05_i_optional_changes/linux/runner/main.cc diff --git a/namer/step_05_i_optional_changes/linux/runner/my_application.cc b/namer/step_05_i_optional_changes/linux/runner/my_application.cc new file mode 100644 index 0000000000..406b304680 --- /dev/null +++ b/namer/step_05_i_optional_changes/linux/runner/my_application.cc @@ -0,0 +1,130 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "namer_app"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "namer_app"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/namer/step_05_i_optional_changes/linux/my_application.h b/namer/step_05_i_optional_changes/linux/runner/my_application.h similarity index 100% rename from namer/step_05_i_optional_changes/linux/my_application.h rename to namer/step_05_i_optional_changes/linux/runner/my_application.h diff --git a/namer/step_05_i_optional_changes/web/index.html b/namer/step_05_i_optional_changes/web/index.html index 0789041b16..35f076e08f 100644 --- a/namer/step_05_i_optional_changes/web/index.html +++ b/namer/step_05_i_optional_changes/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/namer/step_06_a_business_logic/linux/CMakeLists.txt b/namer/step_06_a_business_logic/linux/CMakeLists.txt index de3a7fe3b4..8aac122fd1 100644 --- a/namer/step_06_a_business_logic/linux/CMakeLists.txt +++ b/namer/step_06_a_business_logic/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/namer/step_06_a_business_logic/linux/my_application.cc b/namer/step_06_a_business_logic/linux/my_application.cc deleted file mode 100644 index f2fa0d03ee..0000000000 --- a/namer/step_06_a_business_logic/linux/my_application.cc +++ /dev/null @@ -1,124 +0,0 @@ -#include "my_application.h" - -#include -#ifdef GDK_WINDOWING_X11 -#include -#endif - -#include "flutter/generated_plugin_registrant.h" - -struct _MyApplication { - GtkApplication parent_instance; - char** dart_entrypoint_arguments; -}; - -G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) - -// Implements GApplication::activate. -static void my_application_activate(GApplication* application) { - MyApplication* self = MY_APPLICATION(application); - GtkWindow* window = - GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); - - // Use a header bar when running in GNOME as this is the common style used - // by applications and is the setup most users will be using (e.g. Ubuntu - // desktop). - // If running on X and not using GNOME then just use a traditional title bar - // in case the window manager does more exotic layout, e.g. tiling. - // If running on Wayland assume the header bar will work (may need changing - // if future cases occur). - gboolean use_header_bar = TRUE; -#ifdef GDK_WINDOWING_X11 - GdkScreen* screen = gtk_window_get_screen(window); - if (GDK_IS_X11_SCREEN(screen)) { - const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); - if (g_strcmp0(wm_name, "GNOME Shell") != 0) { - use_header_bar = FALSE; - } - } -#endif - if (use_header_bar) { - GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); - gtk_widget_show(GTK_WIDGET(header_bar)); - gtk_header_bar_set_title(header_bar, "namer_app"); - gtk_header_bar_set_show_close_button(header_bar, TRUE); - gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); - } else { - gtk_window_set_title(window, "namer_app"); - } - - gtk_window_set_default_size(window, 1280, 720); - gtk_widget_show(GTK_WIDGET(window)); - - g_autoptr(FlDartProject) project = fl_dart_project_new(); - fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); - - FlView* view = fl_view_new(project); - gtk_widget_show(GTK_WIDGET(view)); - gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); - - fl_register_plugins(FL_PLUGIN_REGISTRY(view)); - - gtk_widget_grab_focus(GTK_WIDGET(view)); -} - -// Implements GApplication::local_command_line. -static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { - MyApplication* self = MY_APPLICATION(application); - // Strip out the first argument as it is the binary name. - self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); - - g_autoptr(GError) error = nullptr; - if (!g_application_register(application, nullptr, &error)) { - g_warning("Failed to register: %s", error->message); - *exit_status = 1; - return TRUE; - } - - g_application_activate(application); - *exit_status = 0; - - return TRUE; -} - -// Implements GApplication::startup. -static void my_application_startup(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application startup. - - G_APPLICATION_CLASS(my_application_parent_class)->startup(application); -} - -// Implements GApplication::shutdown. -static void my_application_shutdown(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application shutdown. - - G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); -} - -// Implements GObject::dispose. -static void my_application_dispose(GObject* object) { - MyApplication* self = MY_APPLICATION(object); - g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); - G_OBJECT_CLASS(my_application_parent_class)->dispose(object); -} - -static void my_application_class_init(MyApplicationClass* klass) { - G_APPLICATION_CLASS(klass)->activate = my_application_activate; - G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; - G_APPLICATION_CLASS(klass)->startup = my_application_startup; - G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; - G_OBJECT_CLASS(klass)->dispose = my_application_dispose; -} - -static void my_application_init(MyApplication* self) {} - -MyApplication* my_application_new() { - return MY_APPLICATION(g_object_new(my_application_get_type(), - "application-id", APPLICATION_ID, - "flags", G_APPLICATION_NON_UNIQUE, - nullptr)); -} diff --git a/namer/step_06_a_business_logic/linux/runner/CMakeLists.txt b/namer/step_06_a_business_logic/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/namer/step_06_a_business_logic/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/namer/step_06_a_business_logic/linux/main.cc b/namer/step_06_a_business_logic/linux/runner/main.cc similarity index 100% rename from namer/step_06_a_business_logic/linux/main.cc rename to namer/step_06_a_business_logic/linux/runner/main.cc diff --git a/namer/step_06_a_business_logic/linux/runner/my_application.cc b/namer/step_06_a_business_logic/linux/runner/my_application.cc new file mode 100644 index 0000000000..406b304680 --- /dev/null +++ b/namer/step_06_a_business_logic/linux/runner/my_application.cc @@ -0,0 +1,130 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "namer_app"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "namer_app"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/namer/step_06_a_business_logic/linux/my_application.h b/namer/step_06_a_business_logic/linux/runner/my_application.h similarity index 100% rename from namer/step_06_a_business_logic/linux/my_application.h rename to namer/step_06_a_business_logic/linux/runner/my_application.h diff --git a/namer/step_06_a_business_logic/web/index.html b/namer/step_06_a_business_logic/web/index.html index 0789041b16..35f076e08f 100644 --- a/namer/step_06_a_business_logic/web/index.html +++ b/namer/step_06_a_business_logic/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/namer/step_06_b_add_row/linux/CMakeLists.txt b/namer/step_06_b_add_row/linux/CMakeLists.txt index de3a7fe3b4..8aac122fd1 100644 --- a/namer/step_06_b_add_row/linux/CMakeLists.txt +++ b/namer/step_06_b_add_row/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/namer/step_06_b_add_row/linux/my_application.cc b/namer/step_06_b_add_row/linux/my_application.cc deleted file mode 100644 index f2fa0d03ee..0000000000 --- a/namer/step_06_b_add_row/linux/my_application.cc +++ /dev/null @@ -1,124 +0,0 @@ -#include "my_application.h" - -#include -#ifdef GDK_WINDOWING_X11 -#include -#endif - -#include "flutter/generated_plugin_registrant.h" - -struct _MyApplication { - GtkApplication parent_instance; - char** dart_entrypoint_arguments; -}; - -G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) - -// Implements GApplication::activate. -static void my_application_activate(GApplication* application) { - MyApplication* self = MY_APPLICATION(application); - GtkWindow* window = - GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); - - // Use a header bar when running in GNOME as this is the common style used - // by applications and is the setup most users will be using (e.g. Ubuntu - // desktop). - // If running on X and not using GNOME then just use a traditional title bar - // in case the window manager does more exotic layout, e.g. tiling. - // If running on Wayland assume the header bar will work (may need changing - // if future cases occur). - gboolean use_header_bar = TRUE; -#ifdef GDK_WINDOWING_X11 - GdkScreen* screen = gtk_window_get_screen(window); - if (GDK_IS_X11_SCREEN(screen)) { - const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); - if (g_strcmp0(wm_name, "GNOME Shell") != 0) { - use_header_bar = FALSE; - } - } -#endif - if (use_header_bar) { - GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); - gtk_widget_show(GTK_WIDGET(header_bar)); - gtk_header_bar_set_title(header_bar, "namer_app"); - gtk_header_bar_set_show_close_button(header_bar, TRUE); - gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); - } else { - gtk_window_set_title(window, "namer_app"); - } - - gtk_window_set_default_size(window, 1280, 720); - gtk_widget_show(GTK_WIDGET(window)); - - g_autoptr(FlDartProject) project = fl_dart_project_new(); - fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); - - FlView* view = fl_view_new(project); - gtk_widget_show(GTK_WIDGET(view)); - gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); - - fl_register_plugins(FL_PLUGIN_REGISTRY(view)); - - gtk_widget_grab_focus(GTK_WIDGET(view)); -} - -// Implements GApplication::local_command_line. -static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { - MyApplication* self = MY_APPLICATION(application); - // Strip out the first argument as it is the binary name. - self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); - - g_autoptr(GError) error = nullptr; - if (!g_application_register(application, nullptr, &error)) { - g_warning("Failed to register: %s", error->message); - *exit_status = 1; - return TRUE; - } - - g_application_activate(application); - *exit_status = 0; - - return TRUE; -} - -// Implements GApplication::startup. -static void my_application_startup(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application startup. - - G_APPLICATION_CLASS(my_application_parent_class)->startup(application); -} - -// Implements GApplication::shutdown. -static void my_application_shutdown(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application shutdown. - - G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); -} - -// Implements GObject::dispose. -static void my_application_dispose(GObject* object) { - MyApplication* self = MY_APPLICATION(object); - g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); - G_OBJECT_CLASS(my_application_parent_class)->dispose(object); -} - -static void my_application_class_init(MyApplicationClass* klass) { - G_APPLICATION_CLASS(klass)->activate = my_application_activate; - G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; - G_APPLICATION_CLASS(klass)->startup = my_application_startup; - G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; - G_OBJECT_CLASS(klass)->dispose = my_application_dispose; -} - -static void my_application_init(MyApplication* self) {} - -MyApplication* my_application_new() { - return MY_APPLICATION(g_object_new(my_application_get_type(), - "application-id", APPLICATION_ID, - "flags", G_APPLICATION_NON_UNIQUE, - nullptr)); -} diff --git a/namer/step_06_b_add_row/linux/runner/CMakeLists.txt b/namer/step_06_b_add_row/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/namer/step_06_b_add_row/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/namer/step_06_b_add_row/linux/main.cc b/namer/step_06_b_add_row/linux/runner/main.cc similarity index 100% rename from namer/step_06_b_add_row/linux/main.cc rename to namer/step_06_b_add_row/linux/runner/main.cc diff --git a/namer/step_06_b_add_row/linux/runner/my_application.cc b/namer/step_06_b_add_row/linux/runner/my_application.cc new file mode 100644 index 0000000000..406b304680 --- /dev/null +++ b/namer/step_06_b_add_row/linux/runner/my_application.cc @@ -0,0 +1,130 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "namer_app"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "namer_app"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/namer/step_06_b_add_row/linux/my_application.h b/namer/step_06_b_add_row/linux/runner/my_application.h similarity index 100% rename from namer/step_06_b_add_row/linux/my_application.h rename to namer/step_06_b_add_row/linux/runner/my_application.h diff --git a/namer/step_06_b_add_row/web/index.html b/namer/step_06_b_add_row/web/index.html index 0789041b16..35f076e08f 100644 --- a/namer/step_06_b_add_row/web/index.html +++ b/namer/step_06_b_add_row/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/namer/step_06_c_add_like_button/linux/CMakeLists.txt b/namer/step_06_c_add_like_button/linux/CMakeLists.txt index de3a7fe3b4..8aac122fd1 100644 --- a/namer/step_06_c_add_like_button/linux/CMakeLists.txt +++ b/namer/step_06_c_add_like_button/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/namer/step_06_c_add_like_button/linux/my_application.cc b/namer/step_06_c_add_like_button/linux/my_application.cc deleted file mode 100644 index f2fa0d03ee..0000000000 --- a/namer/step_06_c_add_like_button/linux/my_application.cc +++ /dev/null @@ -1,124 +0,0 @@ -#include "my_application.h" - -#include -#ifdef GDK_WINDOWING_X11 -#include -#endif - -#include "flutter/generated_plugin_registrant.h" - -struct _MyApplication { - GtkApplication parent_instance; - char** dart_entrypoint_arguments; -}; - -G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) - -// Implements GApplication::activate. -static void my_application_activate(GApplication* application) { - MyApplication* self = MY_APPLICATION(application); - GtkWindow* window = - GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); - - // Use a header bar when running in GNOME as this is the common style used - // by applications and is the setup most users will be using (e.g. Ubuntu - // desktop). - // If running on X and not using GNOME then just use a traditional title bar - // in case the window manager does more exotic layout, e.g. tiling. - // If running on Wayland assume the header bar will work (may need changing - // if future cases occur). - gboolean use_header_bar = TRUE; -#ifdef GDK_WINDOWING_X11 - GdkScreen* screen = gtk_window_get_screen(window); - if (GDK_IS_X11_SCREEN(screen)) { - const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); - if (g_strcmp0(wm_name, "GNOME Shell") != 0) { - use_header_bar = FALSE; - } - } -#endif - if (use_header_bar) { - GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); - gtk_widget_show(GTK_WIDGET(header_bar)); - gtk_header_bar_set_title(header_bar, "namer_app"); - gtk_header_bar_set_show_close_button(header_bar, TRUE); - gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); - } else { - gtk_window_set_title(window, "namer_app"); - } - - gtk_window_set_default_size(window, 1280, 720); - gtk_widget_show(GTK_WIDGET(window)); - - g_autoptr(FlDartProject) project = fl_dart_project_new(); - fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); - - FlView* view = fl_view_new(project); - gtk_widget_show(GTK_WIDGET(view)); - gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); - - fl_register_plugins(FL_PLUGIN_REGISTRY(view)); - - gtk_widget_grab_focus(GTK_WIDGET(view)); -} - -// Implements GApplication::local_command_line. -static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { - MyApplication* self = MY_APPLICATION(application); - // Strip out the first argument as it is the binary name. - self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); - - g_autoptr(GError) error = nullptr; - if (!g_application_register(application, nullptr, &error)) { - g_warning("Failed to register: %s", error->message); - *exit_status = 1; - return TRUE; - } - - g_application_activate(application); - *exit_status = 0; - - return TRUE; -} - -// Implements GApplication::startup. -static void my_application_startup(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application startup. - - G_APPLICATION_CLASS(my_application_parent_class)->startup(application); -} - -// Implements GApplication::shutdown. -static void my_application_shutdown(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application shutdown. - - G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); -} - -// Implements GObject::dispose. -static void my_application_dispose(GObject* object) { - MyApplication* self = MY_APPLICATION(object); - g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); - G_OBJECT_CLASS(my_application_parent_class)->dispose(object); -} - -static void my_application_class_init(MyApplicationClass* klass) { - G_APPLICATION_CLASS(klass)->activate = my_application_activate; - G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; - G_APPLICATION_CLASS(klass)->startup = my_application_startup; - G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; - G_OBJECT_CLASS(klass)->dispose = my_application_dispose; -} - -static void my_application_init(MyApplication* self) {} - -MyApplication* my_application_new() { - return MY_APPLICATION(g_object_new(my_application_get_type(), - "application-id", APPLICATION_ID, - "flags", G_APPLICATION_NON_UNIQUE, - nullptr)); -} diff --git a/namer/step_06_c_add_like_button/linux/runner/CMakeLists.txt b/namer/step_06_c_add_like_button/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/namer/step_06_c_add_like_button/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/namer/step_06_c_add_like_button/linux/main.cc b/namer/step_06_c_add_like_button/linux/runner/main.cc similarity index 100% rename from namer/step_06_c_add_like_button/linux/main.cc rename to namer/step_06_c_add_like_button/linux/runner/main.cc diff --git a/namer/step_06_c_add_like_button/linux/runner/my_application.cc b/namer/step_06_c_add_like_button/linux/runner/my_application.cc new file mode 100644 index 0000000000..406b304680 --- /dev/null +++ b/namer/step_06_c_add_like_button/linux/runner/my_application.cc @@ -0,0 +1,130 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "namer_app"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "namer_app"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/namer/step_06_c_add_like_button/linux/my_application.h b/namer/step_06_c_add_like_button/linux/runner/my_application.h similarity index 100% rename from namer/step_06_c_add_like_button/linux/my_application.h rename to namer/step_06_c_add_like_button/linux/runner/my_application.h diff --git a/namer/step_06_c_add_like_button/web/index.html b/namer/step_06_c_add_like_button/web/index.html index 0789041b16..35f076e08f 100644 --- a/namer/step_06_c_add_like_button/web/index.html +++ b/namer/step_06_c_add_like_button/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/namer/step_07_a_split_my_home_page/linux/CMakeLists.txt b/namer/step_07_a_split_my_home_page/linux/CMakeLists.txt index de3a7fe3b4..8aac122fd1 100644 --- a/namer/step_07_a_split_my_home_page/linux/CMakeLists.txt +++ b/namer/step_07_a_split_my_home_page/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/namer/step_07_a_split_my_home_page/linux/my_application.cc b/namer/step_07_a_split_my_home_page/linux/my_application.cc deleted file mode 100644 index f2fa0d03ee..0000000000 --- a/namer/step_07_a_split_my_home_page/linux/my_application.cc +++ /dev/null @@ -1,124 +0,0 @@ -#include "my_application.h" - -#include -#ifdef GDK_WINDOWING_X11 -#include -#endif - -#include "flutter/generated_plugin_registrant.h" - -struct _MyApplication { - GtkApplication parent_instance; - char** dart_entrypoint_arguments; -}; - -G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) - -// Implements GApplication::activate. -static void my_application_activate(GApplication* application) { - MyApplication* self = MY_APPLICATION(application); - GtkWindow* window = - GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); - - // Use a header bar when running in GNOME as this is the common style used - // by applications and is the setup most users will be using (e.g. Ubuntu - // desktop). - // If running on X and not using GNOME then just use a traditional title bar - // in case the window manager does more exotic layout, e.g. tiling. - // If running on Wayland assume the header bar will work (may need changing - // if future cases occur). - gboolean use_header_bar = TRUE; -#ifdef GDK_WINDOWING_X11 - GdkScreen* screen = gtk_window_get_screen(window); - if (GDK_IS_X11_SCREEN(screen)) { - const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); - if (g_strcmp0(wm_name, "GNOME Shell") != 0) { - use_header_bar = FALSE; - } - } -#endif - if (use_header_bar) { - GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); - gtk_widget_show(GTK_WIDGET(header_bar)); - gtk_header_bar_set_title(header_bar, "namer_app"); - gtk_header_bar_set_show_close_button(header_bar, TRUE); - gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); - } else { - gtk_window_set_title(window, "namer_app"); - } - - gtk_window_set_default_size(window, 1280, 720); - gtk_widget_show(GTK_WIDGET(window)); - - g_autoptr(FlDartProject) project = fl_dart_project_new(); - fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); - - FlView* view = fl_view_new(project); - gtk_widget_show(GTK_WIDGET(view)); - gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); - - fl_register_plugins(FL_PLUGIN_REGISTRY(view)); - - gtk_widget_grab_focus(GTK_WIDGET(view)); -} - -// Implements GApplication::local_command_line. -static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { - MyApplication* self = MY_APPLICATION(application); - // Strip out the first argument as it is the binary name. - self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); - - g_autoptr(GError) error = nullptr; - if (!g_application_register(application, nullptr, &error)) { - g_warning("Failed to register: %s", error->message); - *exit_status = 1; - return TRUE; - } - - g_application_activate(application); - *exit_status = 0; - - return TRUE; -} - -// Implements GApplication::startup. -static void my_application_startup(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application startup. - - G_APPLICATION_CLASS(my_application_parent_class)->startup(application); -} - -// Implements GApplication::shutdown. -static void my_application_shutdown(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application shutdown. - - G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); -} - -// Implements GObject::dispose. -static void my_application_dispose(GObject* object) { - MyApplication* self = MY_APPLICATION(object); - g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); - G_OBJECT_CLASS(my_application_parent_class)->dispose(object); -} - -static void my_application_class_init(MyApplicationClass* klass) { - G_APPLICATION_CLASS(klass)->activate = my_application_activate; - G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; - G_APPLICATION_CLASS(klass)->startup = my_application_startup; - G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; - G_OBJECT_CLASS(klass)->dispose = my_application_dispose; -} - -static void my_application_init(MyApplication* self) {} - -MyApplication* my_application_new() { - return MY_APPLICATION(g_object_new(my_application_get_type(), - "application-id", APPLICATION_ID, - "flags", G_APPLICATION_NON_UNIQUE, - nullptr)); -} diff --git a/namer/step_07_a_split_my_home_page/linux/runner/CMakeLists.txt b/namer/step_07_a_split_my_home_page/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/namer/step_07_a_split_my_home_page/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/namer/step_07_a_split_my_home_page/linux/main.cc b/namer/step_07_a_split_my_home_page/linux/runner/main.cc similarity index 100% rename from namer/step_07_a_split_my_home_page/linux/main.cc rename to namer/step_07_a_split_my_home_page/linux/runner/main.cc diff --git a/namer/step_07_a_split_my_home_page/linux/runner/my_application.cc b/namer/step_07_a_split_my_home_page/linux/runner/my_application.cc new file mode 100644 index 0000000000..406b304680 --- /dev/null +++ b/namer/step_07_a_split_my_home_page/linux/runner/my_application.cc @@ -0,0 +1,130 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "namer_app"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "namer_app"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/namer/step_07_a_split_my_home_page/linux/my_application.h b/namer/step_07_a_split_my_home_page/linux/runner/my_application.h similarity index 100% rename from namer/step_07_a_split_my_home_page/linux/my_application.h rename to namer/step_07_a_split_my_home_page/linux/runner/my_application.h diff --git a/namer/step_07_a_split_my_home_page/web/index.html b/namer/step_07_a_split_my_home_page/web/index.html index 0789041b16..35f076e08f 100644 --- a/namer/step_07_a_split_my_home_page/web/index.html +++ b/namer/step_07_a_split_my_home_page/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/namer/step_07_b_convert_to_stateful/linux/CMakeLists.txt b/namer/step_07_b_convert_to_stateful/linux/CMakeLists.txt index de3a7fe3b4..8aac122fd1 100644 --- a/namer/step_07_b_convert_to_stateful/linux/CMakeLists.txt +++ b/namer/step_07_b_convert_to_stateful/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/namer/step_07_b_convert_to_stateful/linux/my_application.cc b/namer/step_07_b_convert_to_stateful/linux/my_application.cc deleted file mode 100644 index f2fa0d03ee..0000000000 --- a/namer/step_07_b_convert_to_stateful/linux/my_application.cc +++ /dev/null @@ -1,124 +0,0 @@ -#include "my_application.h" - -#include -#ifdef GDK_WINDOWING_X11 -#include -#endif - -#include "flutter/generated_plugin_registrant.h" - -struct _MyApplication { - GtkApplication parent_instance; - char** dart_entrypoint_arguments; -}; - -G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) - -// Implements GApplication::activate. -static void my_application_activate(GApplication* application) { - MyApplication* self = MY_APPLICATION(application); - GtkWindow* window = - GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); - - // Use a header bar when running in GNOME as this is the common style used - // by applications and is the setup most users will be using (e.g. Ubuntu - // desktop). - // If running on X and not using GNOME then just use a traditional title bar - // in case the window manager does more exotic layout, e.g. tiling. - // If running on Wayland assume the header bar will work (may need changing - // if future cases occur). - gboolean use_header_bar = TRUE; -#ifdef GDK_WINDOWING_X11 - GdkScreen* screen = gtk_window_get_screen(window); - if (GDK_IS_X11_SCREEN(screen)) { - const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); - if (g_strcmp0(wm_name, "GNOME Shell") != 0) { - use_header_bar = FALSE; - } - } -#endif - if (use_header_bar) { - GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); - gtk_widget_show(GTK_WIDGET(header_bar)); - gtk_header_bar_set_title(header_bar, "namer_app"); - gtk_header_bar_set_show_close_button(header_bar, TRUE); - gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); - } else { - gtk_window_set_title(window, "namer_app"); - } - - gtk_window_set_default_size(window, 1280, 720); - gtk_widget_show(GTK_WIDGET(window)); - - g_autoptr(FlDartProject) project = fl_dart_project_new(); - fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); - - FlView* view = fl_view_new(project); - gtk_widget_show(GTK_WIDGET(view)); - gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); - - fl_register_plugins(FL_PLUGIN_REGISTRY(view)); - - gtk_widget_grab_focus(GTK_WIDGET(view)); -} - -// Implements GApplication::local_command_line. -static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { - MyApplication* self = MY_APPLICATION(application); - // Strip out the first argument as it is the binary name. - self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); - - g_autoptr(GError) error = nullptr; - if (!g_application_register(application, nullptr, &error)) { - g_warning("Failed to register: %s", error->message); - *exit_status = 1; - return TRUE; - } - - g_application_activate(application); - *exit_status = 0; - - return TRUE; -} - -// Implements GApplication::startup. -static void my_application_startup(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application startup. - - G_APPLICATION_CLASS(my_application_parent_class)->startup(application); -} - -// Implements GApplication::shutdown. -static void my_application_shutdown(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application shutdown. - - G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); -} - -// Implements GObject::dispose. -static void my_application_dispose(GObject* object) { - MyApplication* self = MY_APPLICATION(object); - g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); - G_OBJECT_CLASS(my_application_parent_class)->dispose(object); -} - -static void my_application_class_init(MyApplicationClass* klass) { - G_APPLICATION_CLASS(klass)->activate = my_application_activate; - G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; - G_APPLICATION_CLASS(klass)->startup = my_application_startup; - G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; - G_OBJECT_CLASS(klass)->dispose = my_application_dispose; -} - -static void my_application_init(MyApplication* self) {} - -MyApplication* my_application_new() { - return MY_APPLICATION(g_object_new(my_application_get_type(), - "application-id", APPLICATION_ID, - "flags", G_APPLICATION_NON_UNIQUE, - nullptr)); -} diff --git a/namer/step_07_b_convert_to_stateful/linux/runner/CMakeLists.txt b/namer/step_07_b_convert_to_stateful/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/namer/step_07_b_convert_to_stateful/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/namer/step_07_b_convert_to_stateful/linux/main.cc b/namer/step_07_b_convert_to_stateful/linux/runner/main.cc similarity index 100% rename from namer/step_07_b_convert_to_stateful/linux/main.cc rename to namer/step_07_b_convert_to_stateful/linux/runner/main.cc diff --git a/namer/step_07_b_convert_to_stateful/linux/runner/my_application.cc b/namer/step_07_b_convert_to_stateful/linux/runner/my_application.cc new file mode 100644 index 0000000000..406b304680 --- /dev/null +++ b/namer/step_07_b_convert_to_stateful/linux/runner/my_application.cc @@ -0,0 +1,130 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "namer_app"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "namer_app"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/namer/step_07_b_convert_to_stateful/linux/my_application.h b/namer/step_07_b_convert_to_stateful/linux/runner/my_application.h similarity index 100% rename from namer/step_07_b_convert_to_stateful/linux/my_application.h rename to namer/step_07_b_convert_to_stateful/linux/runner/my_application.h diff --git a/namer/step_07_b_convert_to_stateful/web/index.html b/namer/step_07_b_convert_to_stateful/web/index.html index 0789041b16..35f076e08f 100644 --- a/namer/step_07_b_convert_to_stateful/web/index.html +++ b/namer/step_07_b_convert_to_stateful/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/namer/step_07_c_add_selectedindex/linux/CMakeLists.txt b/namer/step_07_c_add_selectedindex/linux/CMakeLists.txt index de3a7fe3b4..8aac122fd1 100644 --- a/namer/step_07_c_add_selectedindex/linux/CMakeLists.txt +++ b/namer/step_07_c_add_selectedindex/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/namer/step_07_c_add_selectedindex/linux/my_application.cc b/namer/step_07_c_add_selectedindex/linux/my_application.cc deleted file mode 100644 index f2fa0d03ee..0000000000 --- a/namer/step_07_c_add_selectedindex/linux/my_application.cc +++ /dev/null @@ -1,124 +0,0 @@ -#include "my_application.h" - -#include -#ifdef GDK_WINDOWING_X11 -#include -#endif - -#include "flutter/generated_plugin_registrant.h" - -struct _MyApplication { - GtkApplication parent_instance; - char** dart_entrypoint_arguments; -}; - -G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) - -// Implements GApplication::activate. -static void my_application_activate(GApplication* application) { - MyApplication* self = MY_APPLICATION(application); - GtkWindow* window = - GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); - - // Use a header bar when running in GNOME as this is the common style used - // by applications and is the setup most users will be using (e.g. Ubuntu - // desktop). - // If running on X and not using GNOME then just use a traditional title bar - // in case the window manager does more exotic layout, e.g. tiling. - // If running on Wayland assume the header bar will work (may need changing - // if future cases occur). - gboolean use_header_bar = TRUE; -#ifdef GDK_WINDOWING_X11 - GdkScreen* screen = gtk_window_get_screen(window); - if (GDK_IS_X11_SCREEN(screen)) { - const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); - if (g_strcmp0(wm_name, "GNOME Shell") != 0) { - use_header_bar = FALSE; - } - } -#endif - if (use_header_bar) { - GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); - gtk_widget_show(GTK_WIDGET(header_bar)); - gtk_header_bar_set_title(header_bar, "namer_app"); - gtk_header_bar_set_show_close_button(header_bar, TRUE); - gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); - } else { - gtk_window_set_title(window, "namer_app"); - } - - gtk_window_set_default_size(window, 1280, 720); - gtk_widget_show(GTK_WIDGET(window)); - - g_autoptr(FlDartProject) project = fl_dart_project_new(); - fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); - - FlView* view = fl_view_new(project); - gtk_widget_show(GTK_WIDGET(view)); - gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); - - fl_register_plugins(FL_PLUGIN_REGISTRY(view)); - - gtk_widget_grab_focus(GTK_WIDGET(view)); -} - -// Implements GApplication::local_command_line. -static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { - MyApplication* self = MY_APPLICATION(application); - // Strip out the first argument as it is the binary name. - self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); - - g_autoptr(GError) error = nullptr; - if (!g_application_register(application, nullptr, &error)) { - g_warning("Failed to register: %s", error->message); - *exit_status = 1; - return TRUE; - } - - g_application_activate(application); - *exit_status = 0; - - return TRUE; -} - -// Implements GApplication::startup. -static void my_application_startup(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application startup. - - G_APPLICATION_CLASS(my_application_parent_class)->startup(application); -} - -// Implements GApplication::shutdown. -static void my_application_shutdown(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application shutdown. - - G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); -} - -// Implements GObject::dispose. -static void my_application_dispose(GObject* object) { - MyApplication* self = MY_APPLICATION(object); - g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); - G_OBJECT_CLASS(my_application_parent_class)->dispose(object); -} - -static void my_application_class_init(MyApplicationClass* klass) { - G_APPLICATION_CLASS(klass)->activate = my_application_activate; - G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; - G_APPLICATION_CLASS(klass)->startup = my_application_startup; - G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; - G_OBJECT_CLASS(klass)->dispose = my_application_dispose; -} - -static void my_application_init(MyApplication* self) {} - -MyApplication* my_application_new() { - return MY_APPLICATION(g_object_new(my_application_get_type(), - "application-id", APPLICATION_ID, - "flags", G_APPLICATION_NON_UNIQUE, - nullptr)); -} diff --git a/namer/step_07_c_add_selectedindex/linux/runner/CMakeLists.txt b/namer/step_07_c_add_selectedindex/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/namer/step_07_c_add_selectedindex/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/namer/step_07_c_add_selectedindex/linux/main.cc b/namer/step_07_c_add_selectedindex/linux/runner/main.cc similarity index 100% rename from namer/step_07_c_add_selectedindex/linux/main.cc rename to namer/step_07_c_add_selectedindex/linux/runner/main.cc diff --git a/namer/step_07_c_add_selectedindex/linux/runner/my_application.cc b/namer/step_07_c_add_selectedindex/linux/runner/my_application.cc new file mode 100644 index 0000000000..406b304680 --- /dev/null +++ b/namer/step_07_c_add_selectedindex/linux/runner/my_application.cc @@ -0,0 +1,130 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "namer_app"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "namer_app"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/namer/step_07_c_add_selectedindex/linux/my_application.h b/namer/step_07_c_add_selectedindex/linux/runner/my_application.h similarity index 100% rename from namer/step_07_c_add_selectedindex/linux/my_application.h rename to namer/step_07_c_add_selectedindex/linux/runner/my_application.h diff --git a/namer/step_07_c_add_selectedindex/web/index.html b/namer/step_07_c_add_selectedindex/web/index.html index 0789041b16..35f076e08f 100644 --- a/namer/step_07_c_add_selectedindex/web/index.html +++ b/namer/step_07_c_add_selectedindex/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/namer/step_07_d_use_selectedindex/linux/CMakeLists.txt b/namer/step_07_d_use_selectedindex/linux/CMakeLists.txt index de3a7fe3b4..8aac122fd1 100644 --- a/namer/step_07_d_use_selectedindex/linux/CMakeLists.txt +++ b/namer/step_07_d_use_selectedindex/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/namer/step_07_d_use_selectedindex/linux/my_application.cc b/namer/step_07_d_use_selectedindex/linux/my_application.cc deleted file mode 100644 index f2fa0d03ee..0000000000 --- a/namer/step_07_d_use_selectedindex/linux/my_application.cc +++ /dev/null @@ -1,124 +0,0 @@ -#include "my_application.h" - -#include -#ifdef GDK_WINDOWING_X11 -#include -#endif - -#include "flutter/generated_plugin_registrant.h" - -struct _MyApplication { - GtkApplication parent_instance; - char** dart_entrypoint_arguments; -}; - -G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) - -// Implements GApplication::activate. -static void my_application_activate(GApplication* application) { - MyApplication* self = MY_APPLICATION(application); - GtkWindow* window = - GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); - - // Use a header bar when running in GNOME as this is the common style used - // by applications and is the setup most users will be using (e.g. Ubuntu - // desktop). - // If running on X and not using GNOME then just use a traditional title bar - // in case the window manager does more exotic layout, e.g. tiling. - // If running on Wayland assume the header bar will work (may need changing - // if future cases occur). - gboolean use_header_bar = TRUE; -#ifdef GDK_WINDOWING_X11 - GdkScreen* screen = gtk_window_get_screen(window); - if (GDK_IS_X11_SCREEN(screen)) { - const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); - if (g_strcmp0(wm_name, "GNOME Shell") != 0) { - use_header_bar = FALSE; - } - } -#endif - if (use_header_bar) { - GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); - gtk_widget_show(GTK_WIDGET(header_bar)); - gtk_header_bar_set_title(header_bar, "namer_app"); - gtk_header_bar_set_show_close_button(header_bar, TRUE); - gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); - } else { - gtk_window_set_title(window, "namer_app"); - } - - gtk_window_set_default_size(window, 1280, 720); - gtk_widget_show(GTK_WIDGET(window)); - - g_autoptr(FlDartProject) project = fl_dart_project_new(); - fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); - - FlView* view = fl_view_new(project); - gtk_widget_show(GTK_WIDGET(view)); - gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); - - fl_register_plugins(FL_PLUGIN_REGISTRY(view)); - - gtk_widget_grab_focus(GTK_WIDGET(view)); -} - -// Implements GApplication::local_command_line. -static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { - MyApplication* self = MY_APPLICATION(application); - // Strip out the first argument as it is the binary name. - self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); - - g_autoptr(GError) error = nullptr; - if (!g_application_register(application, nullptr, &error)) { - g_warning("Failed to register: %s", error->message); - *exit_status = 1; - return TRUE; - } - - g_application_activate(application); - *exit_status = 0; - - return TRUE; -} - -// Implements GApplication::startup. -static void my_application_startup(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application startup. - - G_APPLICATION_CLASS(my_application_parent_class)->startup(application); -} - -// Implements GApplication::shutdown. -static void my_application_shutdown(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application shutdown. - - G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); -} - -// Implements GObject::dispose. -static void my_application_dispose(GObject* object) { - MyApplication* self = MY_APPLICATION(object); - g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); - G_OBJECT_CLASS(my_application_parent_class)->dispose(object); -} - -static void my_application_class_init(MyApplicationClass* klass) { - G_APPLICATION_CLASS(klass)->activate = my_application_activate; - G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; - G_APPLICATION_CLASS(klass)->startup = my_application_startup; - G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; - G_OBJECT_CLASS(klass)->dispose = my_application_dispose; -} - -static void my_application_init(MyApplication* self) {} - -MyApplication* my_application_new() { - return MY_APPLICATION(g_object_new(my_application_get_type(), - "application-id", APPLICATION_ID, - "flags", G_APPLICATION_NON_UNIQUE, - nullptr)); -} diff --git a/namer/step_07_d_use_selectedindex/linux/runner/CMakeLists.txt b/namer/step_07_d_use_selectedindex/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/namer/step_07_d_use_selectedindex/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/namer/step_07_d_use_selectedindex/linux/main.cc b/namer/step_07_d_use_selectedindex/linux/runner/main.cc similarity index 100% rename from namer/step_07_d_use_selectedindex/linux/main.cc rename to namer/step_07_d_use_selectedindex/linux/runner/main.cc diff --git a/namer/step_07_d_use_selectedindex/linux/runner/my_application.cc b/namer/step_07_d_use_selectedindex/linux/runner/my_application.cc new file mode 100644 index 0000000000..406b304680 --- /dev/null +++ b/namer/step_07_d_use_selectedindex/linux/runner/my_application.cc @@ -0,0 +1,130 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "namer_app"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "namer_app"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/namer/step_07_d_use_selectedindex/linux/my_application.h b/namer/step_07_d_use_selectedindex/linux/runner/my_application.h similarity index 100% rename from namer/step_07_d_use_selectedindex/linux/my_application.h rename to namer/step_07_d_use_selectedindex/linux/runner/my_application.h diff --git a/namer/step_07_d_use_selectedindex/web/index.html b/namer/step_07_d_use_selectedindex/web/index.html index 0789041b16..35f076e08f 100644 --- a/namer/step_07_d_use_selectedindex/web/index.html +++ b/namer/step_07_d_use_selectedindex/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/namer/step_07_e_add_layout_builder/linux/CMakeLists.txt b/namer/step_07_e_add_layout_builder/linux/CMakeLists.txt index de3a7fe3b4..8aac122fd1 100644 --- a/namer/step_07_e_add_layout_builder/linux/CMakeLists.txt +++ b/namer/step_07_e_add_layout_builder/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/namer/step_07_e_add_layout_builder/linux/my_application.cc b/namer/step_07_e_add_layout_builder/linux/my_application.cc deleted file mode 100644 index f2fa0d03ee..0000000000 --- a/namer/step_07_e_add_layout_builder/linux/my_application.cc +++ /dev/null @@ -1,124 +0,0 @@ -#include "my_application.h" - -#include -#ifdef GDK_WINDOWING_X11 -#include -#endif - -#include "flutter/generated_plugin_registrant.h" - -struct _MyApplication { - GtkApplication parent_instance; - char** dart_entrypoint_arguments; -}; - -G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) - -// Implements GApplication::activate. -static void my_application_activate(GApplication* application) { - MyApplication* self = MY_APPLICATION(application); - GtkWindow* window = - GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); - - // Use a header bar when running in GNOME as this is the common style used - // by applications and is the setup most users will be using (e.g. Ubuntu - // desktop). - // If running on X and not using GNOME then just use a traditional title bar - // in case the window manager does more exotic layout, e.g. tiling. - // If running on Wayland assume the header bar will work (may need changing - // if future cases occur). - gboolean use_header_bar = TRUE; -#ifdef GDK_WINDOWING_X11 - GdkScreen* screen = gtk_window_get_screen(window); - if (GDK_IS_X11_SCREEN(screen)) { - const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); - if (g_strcmp0(wm_name, "GNOME Shell") != 0) { - use_header_bar = FALSE; - } - } -#endif - if (use_header_bar) { - GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); - gtk_widget_show(GTK_WIDGET(header_bar)); - gtk_header_bar_set_title(header_bar, "namer_app"); - gtk_header_bar_set_show_close_button(header_bar, TRUE); - gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); - } else { - gtk_window_set_title(window, "namer_app"); - } - - gtk_window_set_default_size(window, 1280, 720); - gtk_widget_show(GTK_WIDGET(window)); - - g_autoptr(FlDartProject) project = fl_dart_project_new(); - fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); - - FlView* view = fl_view_new(project); - gtk_widget_show(GTK_WIDGET(view)); - gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); - - fl_register_plugins(FL_PLUGIN_REGISTRY(view)); - - gtk_widget_grab_focus(GTK_WIDGET(view)); -} - -// Implements GApplication::local_command_line. -static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { - MyApplication* self = MY_APPLICATION(application); - // Strip out the first argument as it is the binary name. - self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); - - g_autoptr(GError) error = nullptr; - if (!g_application_register(application, nullptr, &error)) { - g_warning("Failed to register: %s", error->message); - *exit_status = 1; - return TRUE; - } - - g_application_activate(application); - *exit_status = 0; - - return TRUE; -} - -// Implements GApplication::startup. -static void my_application_startup(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application startup. - - G_APPLICATION_CLASS(my_application_parent_class)->startup(application); -} - -// Implements GApplication::shutdown. -static void my_application_shutdown(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application shutdown. - - G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); -} - -// Implements GObject::dispose. -static void my_application_dispose(GObject* object) { - MyApplication* self = MY_APPLICATION(object); - g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); - G_OBJECT_CLASS(my_application_parent_class)->dispose(object); -} - -static void my_application_class_init(MyApplicationClass* klass) { - G_APPLICATION_CLASS(klass)->activate = my_application_activate; - G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; - G_APPLICATION_CLASS(klass)->startup = my_application_startup; - G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; - G_OBJECT_CLASS(klass)->dispose = my_application_dispose; -} - -static void my_application_init(MyApplication* self) {} - -MyApplication* my_application_new() { - return MY_APPLICATION(g_object_new(my_application_get_type(), - "application-id", APPLICATION_ID, - "flags", G_APPLICATION_NON_UNIQUE, - nullptr)); -} diff --git a/namer/step_07_e_add_layout_builder/linux/runner/CMakeLists.txt b/namer/step_07_e_add_layout_builder/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/namer/step_07_e_add_layout_builder/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/namer/step_07_e_add_layout_builder/linux/main.cc b/namer/step_07_e_add_layout_builder/linux/runner/main.cc similarity index 100% rename from namer/step_07_e_add_layout_builder/linux/main.cc rename to namer/step_07_e_add_layout_builder/linux/runner/main.cc diff --git a/namer/step_07_e_add_layout_builder/linux/runner/my_application.cc b/namer/step_07_e_add_layout_builder/linux/runner/my_application.cc new file mode 100644 index 0000000000..406b304680 --- /dev/null +++ b/namer/step_07_e_add_layout_builder/linux/runner/my_application.cc @@ -0,0 +1,130 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "namer_app"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "namer_app"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/namer/step_07_e_add_layout_builder/linux/my_application.h b/namer/step_07_e_add_layout_builder/linux/runner/my_application.h similarity index 100% rename from namer/step_07_e_add_layout_builder/linux/my_application.h rename to namer/step_07_e_add_layout_builder/linux/runner/my_application.h diff --git a/namer/step_07_e_add_layout_builder/web/index.html b/namer/step_07_e_add_layout_builder/web/index.html index 0789041b16..35f076e08f 100644 --- a/namer/step_07_e_add_layout_builder/web/index.html +++ b/namer/step_07_e_add_layout_builder/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/namer/step_08/linux/CMakeLists.txt b/namer/step_08/linux/CMakeLists.txt index de3a7fe3b4..8aac122fd1 100644 --- a/namer/step_08/linux/CMakeLists.txt +++ b/namer/step_08/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/namer/step_08/linux/my_application.cc b/namer/step_08/linux/my_application.cc deleted file mode 100644 index f2fa0d03ee..0000000000 --- a/namer/step_08/linux/my_application.cc +++ /dev/null @@ -1,124 +0,0 @@ -#include "my_application.h" - -#include -#ifdef GDK_WINDOWING_X11 -#include -#endif - -#include "flutter/generated_plugin_registrant.h" - -struct _MyApplication { - GtkApplication parent_instance; - char** dart_entrypoint_arguments; -}; - -G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) - -// Implements GApplication::activate. -static void my_application_activate(GApplication* application) { - MyApplication* self = MY_APPLICATION(application); - GtkWindow* window = - GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); - - // Use a header bar when running in GNOME as this is the common style used - // by applications and is the setup most users will be using (e.g. Ubuntu - // desktop). - // If running on X and not using GNOME then just use a traditional title bar - // in case the window manager does more exotic layout, e.g. tiling. - // If running on Wayland assume the header bar will work (may need changing - // if future cases occur). - gboolean use_header_bar = TRUE; -#ifdef GDK_WINDOWING_X11 - GdkScreen* screen = gtk_window_get_screen(window); - if (GDK_IS_X11_SCREEN(screen)) { - const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); - if (g_strcmp0(wm_name, "GNOME Shell") != 0) { - use_header_bar = FALSE; - } - } -#endif - if (use_header_bar) { - GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); - gtk_widget_show(GTK_WIDGET(header_bar)); - gtk_header_bar_set_title(header_bar, "namer_app"); - gtk_header_bar_set_show_close_button(header_bar, TRUE); - gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); - } else { - gtk_window_set_title(window, "namer_app"); - } - - gtk_window_set_default_size(window, 1280, 720); - gtk_widget_show(GTK_WIDGET(window)); - - g_autoptr(FlDartProject) project = fl_dart_project_new(); - fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); - - FlView* view = fl_view_new(project); - gtk_widget_show(GTK_WIDGET(view)); - gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); - - fl_register_plugins(FL_PLUGIN_REGISTRY(view)); - - gtk_widget_grab_focus(GTK_WIDGET(view)); -} - -// Implements GApplication::local_command_line. -static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { - MyApplication* self = MY_APPLICATION(application); - // Strip out the first argument as it is the binary name. - self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); - - g_autoptr(GError) error = nullptr; - if (!g_application_register(application, nullptr, &error)) { - g_warning("Failed to register: %s", error->message); - *exit_status = 1; - return TRUE; - } - - g_application_activate(application); - *exit_status = 0; - - return TRUE; -} - -// Implements GApplication::startup. -static void my_application_startup(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application startup. - - G_APPLICATION_CLASS(my_application_parent_class)->startup(application); -} - -// Implements GApplication::shutdown. -static void my_application_shutdown(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application shutdown. - - G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); -} - -// Implements GObject::dispose. -static void my_application_dispose(GObject* object) { - MyApplication* self = MY_APPLICATION(object); - g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); - G_OBJECT_CLASS(my_application_parent_class)->dispose(object); -} - -static void my_application_class_init(MyApplicationClass* klass) { - G_APPLICATION_CLASS(klass)->activate = my_application_activate; - G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; - G_APPLICATION_CLASS(klass)->startup = my_application_startup; - G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; - G_OBJECT_CLASS(klass)->dispose = my_application_dispose; -} - -static void my_application_init(MyApplication* self) {} - -MyApplication* my_application_new() { - return MY_APPLICATION(g_object_new(my_application_get_type(), - "application-id", APPLICATION_ID, - "flags", G_APPLICATION_NON_UNIQUE, - nullptr)); -} diff --git a/namer/step_08/linux/runner/CMakeLists.txt b/namer/step_08/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/namer/step_08/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/namer/step_08/linux/main.cc b/namer/step_08/linux/runner/main.cc similarity index 100% rename from namer/step_08/linux/main.cc rename to namer/step_08/linux/runner/main.cc diff --git a/namer/step_08/linux/runner/my_application.cc b/namer/step_08/linux/runner/my_application.cc new file mode 100644 index 0000000000..406b304680 --- /dev/null +++ b/namer/step_08/linux/runner/my_application.cc @@ -0,0 +1,130 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "namer_app"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "namer_app"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/namer/step_08/linux/my_application.h b/namer/step_08/linux/runner/my_application.h similarity index 100% rename from namer/step_08/linux/my_application.h rename to namer/step_08/linux/runner/my_application.h diff --git a/namer/step_08/web/index.html b/namer/step_08/web/index.html index 0789041b16..35f076e08f 100644 --- a/namer/step_08/web/index.html +++ b/namer/step_08/web/index.html @@ -21,7 +21,7 @@ - + From 862d682a9904b380a4defab4828a808b46dbcd0f Mon Sep 17 00:00:00 2001 From: Brett Morgan Date: Wed, 13 Nov 2024 12:09:59 +1100 Subject: [PATCH 050/108] Update `next-gen-ui` --- .../ios/Runner.xcodeproj/project.pbxproj | 116 ++++++++-------- next-gen-ui/step_01/linux/CMakeLists.txt | 23 +--- .../step_01/linux/runner/CMakeLists.txt | 26 ++++ .../step_01/linux/{ => runner}/main.cc | 0 .../linux/{ => runner}/my_application.cc | 6 + .../linux/{ => runner}/my_application.h | 0 .../macos/Runner.xcodeproj/project.pbxproj | 110 +++++++-------- next-gen-ui/step_01/web/index.html | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 116 ++++++++-------- next-gen-ui/step_02_a/linux/CMakeLists.txt | 23 +--- .../step_02_a/linux/runner/CMakeLists.txt | 26 ++++ .../step_02_a/linux/{ => runner}/main.cc | 0 .../linux/{ => runner}/my_application.cc | 6 + .../linux/{ => runner}/my_application.h | 0 .../macos/Runner.xcodeproj/project.pbxproj | 110 +++++++-------- next-gen-ui/step_02_a/web/index.html | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 116 ++++++++-------- next-gen-ui/step_02_b/linux/CMakeLists.txt | 23 +--- .../step_02_b/linux/runner/CMakeLists.txt | 26 ++++ .../step_02_b/linux/{ => runner}/main.cc | 0 .../linux/{ => runner}/my_application.cc | 6 + .../linux/{ => runner}/my_application.h | 0 .../macos/Runner.xcodeproj/project.pbxproj | 110 +++++++-------- next-gen-ui/step_02_b/web/index.html | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 116 ++++++++-------- next-gen-ui/step_02_c/linux/CMakeLists.txt | 23 +--- .../step_02_c/linux/runner/CMakeLists.txt | 26 ++++ .../step_02_c/linux/{ => runner}/main.cc | 0 .../linux/{ => runner}/my_application.cc | 6 + .../linux/{ => runner}/my_application.h | 0 .../macos/Runner.xcodeproj/project.pbxproj | 110 +++++++-------- next-gen-ui/step_02_c/web/index.html | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 116 ++++++++-------- next-gen-ui/step_03_a/linux/CMakeLists.txt | 23 +--- next-gen-ui/step_03_a/linux/my_application.cc | 124 ----------------- .../step_03_a/linux/runner/CMakeLists.txt | 26 ++++ .../step_03_a/linux/{ => runner}/main.cc | 0 .../step_03_a/linux/runner/my_application.cc | 130 ++++++++++++++++++ .../linux/{ => runner}/my_application.h | 0 .../macos/Runner.xcodeproj/project.pbxproj | 110 +++++++-------- next-gen-ui/step_03_a/web/index.html | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 116 ++++++++-------- next-gen-ui/step_03_b/linux/CMakeLists.txt | 23 +--- next-gen-ui/step_03_b/linux/my_application.cc | 124 ----------------- .../step_03_b/linux/runner/CMakeLists.txt | 26 ++++ .../step_03_b/linux/{ => runner}/main.cc | 0 .../step_03_b/linux/runner/my_application.cc | 130 ++++++++++++++++++ .../linux/{ => runner}/my_application.h | 0 .../macos/Runner.xcodeproj/project.pbxproj | 110 +++++++-------- next-gen-ui/step_03_b/web/index.html | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 116 ++++++++-------- next-gen-ui/step_03_c/linux/CMakeLists.txt | 23 +--- next-gen-ui/step_03_c/linux/my_application.cc | 124 ----------------- .../step_03_c/linux/runner/CMakeLists.txt | 26 ++++ .../step_03_c/linux/{ => runner}/main.cc | 0 .../step_03_c/linux/runner/my_application.cc | 130 ++++++++++++++++++ .../linux/{ => runner}/my_application.h | 0 .../macos/Runner.xcodeproj/project.pbxproj | 110 +++++++-------- next-gen-ui/step_03_c/web/index.html | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 116 ++++++++-------- next-gen-ui/step_04_a/linux/CMakeLists.txt | 23 +--- next-gen-ui/step_04_a/linux/my_application.cc | 124 ----------------- .../step_04_a/linux/runner/CMakeLists.txt | 26 ++++ .../step_04_a/linux/{ => runner}/main.cc | 0 .../step_04_a/linux/runner/my_application.cc | 130 ++++++++++++++++++ .../linux/{ => runner}/my_application.h | 0 .../macos/Runner.xcodeproj/project.pbxproj | 110 +++++++-------- next-gen-ui/step_04_a/web/index.html | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 116 ++++++++-------- next-gen-ui/step_04_b/linux/CMakeLists.txt | 23 +--- next-gen-ui/step_04_b/linux/my_application.cc | 124 ----------------- .../step_04_b/linux/runner/CMakeLists.txt | 26 ++++ .../step_04_b/linux/{ => runner}/main.cc | 0 .../step_04_b/linux/runner/my_application.cc | 130 ++++++++++++++++++ .../linux/{ => runner}/my_application.h | 0 .../macos/Runner.xcodeproj/project.pbxproj | 110 +++++++-------- next-gen-ui/step_04_b/web/index.html | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 116 ++++++++-------- next-gen-ui/step_04_c/linux/CMakeLists.txt | 23 +--- next-gen-ui/step_04_c/linux/my_application.cc | 124 ----------------- .../step_04_c/linux/runner/CMakeLists.txt | 26 ++++ .../step_04_c/linux/{ => runner}/main.cc | 0 .../step_04_c/linux/runner/my_application.cc | 130 ++++++++++++++++++ .../linux/{ => runner}/my_application.h | 0 .../macos/Runner.xcodeproj/project.pbxproj | 110 +++++++-------- next-gen-ui/step_04_c/web/index.html | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 116 ++++++++-------- next-gen-ui/step_04_d/linux/CMakeLists.txt | 23 +--- next-gen-ui/step_04_d/linux/my_application.cc | 124 ----------------- .../step_04_d/linux/runner/CMakeLists.txt | 26 ++++ .../step_04_d/linux/{ => runner}/main.cc | 0 .../step_04_d/linux/runner/my_application.cc | 130 ++++++++++++++++++ .../linux/{ => runner}/my_application.h | 0 .../macos/Runner.xcodeproj/project.pbxproj | 110 +++++++-------- next-gen-ui/step_04_d/web/index.html | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 116 ++++++++-------- next-gen-ui/step_04_e/linux/CMakeLists.txt | 23 +--- next-gen-ui/step_04_e/linux/my_application.cc | 124 ----------------- .../step_04_e/linux/runner/CMakeLists.txt | 26 ++++ .../step_04_e/linux/{ => runner}/main.cc | 0 .../step_04_e/linux/runner/my_application.cc | 130 ++++++++++++++++++ .../linux/{ => runner}/my_application.h | 0 .../macos/Runner.xcodeproj/project.pbxproj | 110 +++++++-------- next-gen-ui/step_04_e/web/index.html | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 116 ++++++++-------- next-gen-ui/step_05_a/linux/CMakeLists.txt | 23 +--- next-gen-ui/step_05_a/linux/my_application.cc | 124 ----------------- .../step_05_a/linux/runner/CMakeLists.txt | 26 ++++ .../step_05_a/linux/{ => runner}/main.cc | 0 .../step_05_a/linux/runner/my_application.cc | 130 ++++++++++++++++++ .../linux/{ => runner}/my_application.h | 0 .../macos/Runner.xcodeproj/project.pbxproj | 110 +++++++-------- next-gen-ui/step_05_a/web/index.html | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 116 ++++++++-------- next-gen-ui/step_05_b/linux/CMakeLists.txt | 23 +--- next-gen-ui/step_05_b/linux/my_application.cc | 124 ----------------- .../step_05_b/linux/runner/CMakeLists.txt | 26 ++++ .../step_05_b/linux/{ => runner}/main.cc | 0 .../step_05_b/linux/runner/my_application.cc | 130 ++++++++++++++++++ .../linux/{ => runner}/my_application.h | 0 .../macos/Runner.xcodeproj/project.pbxproj | 110 +++++++-------- next-gen-ui/step_05_b/web/index.html | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 116 ++++++++-------- next-gen-ui/step_06/linux/CMakeLists.txt | 23 +--- next-gen-ui/step_06/linux/my_application.cc | 124 ----------------- .../step_06/linux/runner/CMakeLists.txt | 26 ++++ .../step_06/linux/{ => runner}/main.cc | 0 .../step_06/linux/runner/my_application.cc | 130 ++++++++++++++++++ .../linux/{ => runner}/my_application.h | 0 .../macos/Runner.xcodeproj/project.pbxproj | 110 +++++++-------- next-gen-ui/step_06/web/index.html | 2 +- 131 files changed, 3599 insertions(+), 3374 deletions(-) create mode 100644 next-gen-ui/step_01/linux/runner/CMakeLists.txt rename next-gen-ui/step_01/linux/{ => runner}/main.cc (100%) rename next-gen-ui/step_01/linux/{ => runner}/my_application.cc (93%) rename next-gen-ui/step_01/linux/{ => runner}/my_application.h (100%) create mode 100644 next-gen-ui/step_02_a/linux/runner/CMakeLists.txt rename next-gen-ui/step_02_a/linux/{ => runner}/main.cc (100%) rename next-gen-ui/step_02_a/linux/{ => runner}/my_application.cc (93%) rename next-gen-ui/step_02_a/linux/{ => runner}/my_application.h (100%) create mode 100644 next-gen-ui/step_02_b/linux/runner/CMakeLists.txt rename next-gen-ui/step_02_b/linux/{ => runner}/main.cc (100%) rename next-gen-ui/step_02_b/linux/{ => runner}/my_application.cc (93%) rename next-gen-ui/step_02_b/linux/{ => runner}/my_application.h (100%) create mode 100644 next-gen-ui/step_02_c/linux/runner/CMakeLists.txt rename next-gen-ui/step_02_c/linux/{ => runner}/main.cc (100%) rename next-gen-ui/step_02_c/linux/{ => runner}/my_application.cc (93%) rename next-gen-ui/step_02_c/linux/{ => runner}/my_application.h (100%) delete mode 100644 next-gen-ui/step_03_a/linux/my_application.cc create mode 100644 next-gen-ui/step_03_a/linux/runner/CMakeLists.txt rename next-gen-ui/step_03_a/linux/{ => runner}/main.cc (100%) create mode 100644 next-gen-ui/step_03_a/linux/runner/my_application.cc rename next-gen-ui/step_03_a/linux/{ => runner}/my_application.h (100%) delete mode 100644 next-gen-ui/step_03_b/linux/my_application.cc create mode 100644 next-gen-ui/step_03_b/linux/runner/CMakeLists.txt rename next-gen-ui/step_03_b/linux/{ => runner}/main.cc (100%) create mode 100644 next-gen-ui/step_03_b/linux/runner/my_application.cc rename next-gen-ui/step_03_b/linux/{ => runner}/my_application.h (100%) delete mode 100644 next-gen-ui/step_03_c/linux/my_application.cc create mode 100644 next-gen-ui/step_03_c/linux/runner/CMakeLists.txt rename next-gen-ui/step_03_c/linux/{ => runner}/main.cc (100%) create mode 100644 next-gen-ui/step_03_c/linux/runner/my_application.cc rename next-gen-ui/step_03_c/linux/{ => runner}/my_application.h (100%) delete mode 100644 next-gen-ui/step_04_a/linux/my_application.cc create mode 100644 next-gen-ui/step_04_a/linux/runner/CMakeLists.txt rename next-gen-ui/step_04_a/linux/{ => runner}/main.cc (100%) create mode 100644 next-gen-ui/step_04_a/linux/runner/my_application.cc rename next-gen-ui/step_04_a/linux/{ => runner}/my_application.h (100%) delete mode 100644 next-gen-ui/step_04_b/linux/my_application.cc create mode 100644 next-gen-ui/step_04_b/linux/runner/CMakeLists.txt rename next-gen-ui/step_04_b/linux/{ => runner}/main.cc (100%) create mode 100644 next-gen-ui/step_04_b/linux/runner/my_application.cc rename next-gen-ui/step_04_b/linux/{ => runner}/my_application.h (100%) delete mode 100644 next-gen-ui/step_04_c/linux/my_application.cc create mode 100644 next-gen-ui/step_04_c/linux/runner/CMakeLists.txt rename next-gen-ui/step_04_c/linux/{ => runner}/main.cc (100%) create mode 100644 next-gen-ui/step_04_c/linux/runner/my_application.cc rename next-gen-ui/step_04_c/linux/{ => runner}/my_application.h (100%) delete mode 100644 next-gen-ui/step_04_d/linux/my_application.cc create mode 100644 next-gen-ui/step_04_d/linux/runner/CMakeLists.txt rename next-gen-ui/step_04_d/linux/{ => runner}/main.cc (100%) create mode 100644 next-gen-ui/step_04_d/linux/runner/my_application.cc rename next-gen-ui/step_04_d/linux/{ => runner}/my_application.h (100%) delete mode 100644 next-gen-ui/step_04_e/linux/my_application.cc create mode 100644 next-gen-ui/step_04_e/linux/runner/CMakeLists.txt rename next-gen-ui/step_04_e/linux/{ => runner}/main.cc (100%) create mode 100644 next-gen-ui/step_04_e/linux/runner/my_application.cc rename next-gen-ui/step_04_e/linux/{ => runner}/my_application.h (100%) delete mode 100644 next-gen-ui/step_05_a/linux/my_application.cc create mode 100644 next-gen-ui/step_05_a/linux/runner/CMakeLists.txt rename next-gen-ui/step_05_a/linux/{ => runner}/main.cc (100%) create mode 100644 next-gen-ui/step_05_a/linux/runner/my_application.cc rename next-gen-ui/step_05_a/linux/{ => runner}/my_application.h (100%) delete mode 100644 next-gen-ui/step_05_b/linux/my_application.cc create mode 100644 next-gen-ui/step_05_b/linux/runner/CMakeLists.txt rename next-gen-ui/step_05_b/linux/{ => runner}/main.cc (100%) create mode 100644 next-gen-ui/step_05_b/linux/runner/my_application.cc rename next-gen-ui/step_05_b/linux/{ => runner}/my_application.h (100%) delete mode 100644 next-gen-ui/step_06/linux/my_application.cc create mode 100644 next-gen-ui/step_06/linux/runner/CMakeLists.txt rename next-gen-ui/step_06/linux/{ => runner}/main.cc (100%) create mode 100644 next-gen-ui/step_06/linux/runner/my_application.cc rename next-gen-ui/step_06/linux/{ => runner}/my_application.h (100%) diff --git a/next-gen-ui/step_01/ios/Runner.xcodeproj/project.pbxproj b/next-gen-ui/step_01/ios/Runner.xcodeproj/project.pbxproj index 43b8398d4f..8f047bdf00 100644 --- a/next-gen-ui/step_01/ios/Runner.xcodeproj/project.pbxproj +++ b/next-gen-ui/step_01/ios/Runner.xcodeproj/project.pbxproj @@ -11,11 +11,11 @@ 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; - 95B86EC706B280ECBF05B340 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F29266F85C81E223DE38826F /* Pods_RunnerTests.framework */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - E9B1620F2EF5AF6175681809 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DE20D8731F5AC68BA1712A5A /* Pods_Runner.framework */; }; + B62141185A2A64CE6AE671F2 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B1CF946366B840164A5B6A19 /* Pods_Runner.framework */; }; + B81AE38132A98A311F8F51B8 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 249FB81AECD9AE84FFA40AD0 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,51 +42,60 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 0FBB97D3B77C3F8ABBBA69D1 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 1065108C466C107C635700F4 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; + 249FB81AECD9AE84FFA40AD0 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 531021BCFBF6DEA7A588EEFB /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 5C244634881A8C4BD75C5C03 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 5220EC7DF66B6FF52474A86B /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 64F96334240D4715F67078C9 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 6641BE7C3FD295E85E2B1262 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 8094A5C0BD3F742D973F4EBB /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; + 9790F6561207E583E84D4FF9 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - D324E46E5A8253E05C3A901E /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - DC699C7AADC6A46B95166F6E /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - DE20D8731F5AC68BA1712A5A /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - F29266F85C81E223DE38826F /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - FFE5027C7AD199E12A7AF98E /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + B1CF946366B840164A5B6A19 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 344BA4708047A433A26140BD /* Frameworks */ = { + 97C146EB1CF9000F007C117D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 95B86EC706B280ECBF05B340 /* Pods_RunnerTests.framework in Frameworks */, + B62141185A2A64CE6AE671F2 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 97C146EB1CF9000F007C117D /* Frameworks */ = { + C266D94F39398FF0845062EB /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - E9B1620F2EF5AF6175681809 /* Pods_Runner.framework in Frameworks */, + B81AE38132A98A311F8F51B8 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 29779CA63CE39E764210D572 /* Frameworks */ = { + isa = PBXGroup; + children = ( + B1CF946366B840164A5B6A19 /* Pods_Runner.framework */, + 249FB81AECD9AE84FFA40AD0 /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; 331C8082294A63A400263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -95,15 +104,15 @@ path = RunnerTests; sourceTree = ""; }; - 6655F551DEE09BD8E2ABAAD2 /* Pods */ = { + 67CB01004931F5EAE1484002 /* Pods */ = { isa = PBXGroup; children = ( - 8094A5C0BD3F742D973F4EBB /* Pods-Runner.debug.xcconfig */, - 5C244634881A8C4BD75C5C03 /* Pods-Runner.release.xcconfig */, - DC699C7AADC6A46B95166F6E /* Pods-Runner.profile.xcconfig */, - 531021BCFBF6DEA7A588EEFB /* Pods-RunnerTests.debug.xcconfig */, - FFE5027C7AD199E12A7AF98E /* Pods-RunnerTests.release.xcconfig */, - D324E46E5A8253E05C3A901E /* Pods-RunnerTests.profile.xcconfig */, + 64F96334240D4715F67078C9 /* Pods-Runner.debug.xcconfig */, + 1065108C466C107C635700F4 /* Pods-Runner.release.xcconfig */, + 9790F6561207E583E84D4FF9 /* Pods-Runner.profile.xcconfig */, + 0FBB97D3B77C3F8ABBBA69D1 /* Pods-RunnerTests.debug.xcconfig */, + 5220EC7DF66B6FF52474A86B /* Pods-RunnerTests.release.xcconfig */, + 6641BE7C3FD295E85E2B1262 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -127,8 +136,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - 6655F551DEE09BD8E2ABAAD2 /* Pods */, - AB471AC81B5F3E3EAC08510D /* Frameworks */, + 67CB01004931F5EAE1484002 /* Pods */, + 29779CA63CE39E764210D572 /* Frameworks */, ); sourceTree = ""; }; @@ -156,15 +165,6 @@ path = Runner; sourceTree = ""; }; - AB471AC81B5F3E3EAC08510D /* Frameworks */ = { - isa = PBXGroup; - children = ( - DE20D8731F5AC68BA1712A5A /* Pods_Runner.framework */, - F29266F85C81E223DE38826F /* Pods_RunnerTests.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - C143E5EEC573FBD89B16A658 /* [CP] Check Pods Manifest.lock */, + 1A41435D909B4A5BA59DA804 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 344BA4708047A433A26140BD /* Frameworks */, + C266D94F39398FF0845062EB /* Frameworks */, ); buildRules = ( ); @@ -191,7 +191,7 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 3AAEDA8BA83E71CC34259A37 /* [CP] Check Pods Manifest.lock */, + 15FA0791F2F6E4DEC3602581 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, @@ -269,7 +269,7 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 3AAEDA8BA83E71CC34259A37 /* [CP] Check Pods Manifest.lock */ = { + 15FA0791F2F6E4DEC3602581 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -291,58 +291,58 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + 1A41435D909B4A5BA59DA804 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( - "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "Thin Binary"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); - name = "Run Script"; + name = "Thin Binary"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - C143E5EEC573FBD89B16A658 /* [CP] Check Pods Manifest.lock */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( ); + name = "Run Script"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; /* End PBXShellScriptBuildPhase section */ @@ -469,7 +469,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 531021BCFBF6DEA7A588EEFB /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 0FBB97D3B77C3F8ABBBA69D1 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -487,7 +487,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = FFE5027C7AD199E12A7AF98E /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 5220EC7DF66B6FF52474A86B /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -503,7 +503,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = D324E46E5A8253E05C3A901E /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 6641BE7C3FD295E85E2B1262 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/next-gen-ui/step_01/linux/CMakeLists.txt b/next-gen-ui/step_01/linux/CMakeLists.txt index ccbe56dd39..e49da8fe41 100644 --- a/next-gen-ui/step_01/linux/CMakeLists.txt +++ b/next-gen-ui/step_01/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/next-gen-ui/step_01/linux/runner/CMakeLists.txt b/next-gen-ui/step_01/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/next-gen-ui/step_01/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/next-gen-ui/step_01/linux/main.cc b/next-gen-ui/step_01/linux/runner/main.cc similarity index 100% rename from next-gen-ui/step_01/linux/main.cc rename to next-gen-ui/step_01/linux/runner/main.cc diff --git a/next-gen-ui/step_01/linux/my_application.cc b/next-gen-ui/step_01/linux/runner/my_application.cc similarity index 93% rename from next-gen-ui/step_01/linux/my_application.cc rename to next-gen-ui/step_01/linux/runner/my_application.cc index d5581db5c1..6fa9821b9c 100644 --- a/next-gen-ui/step_01/linux/my_application.cc +++ b/next-gen-ui/step_01/linux/runner/my_application.cc @@ -117,6 +117,12 @@ static void my_application_class_init(MyApplicationClass* klass) { static void my_application_init(MyApplication* self) {} MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + return MY_APPLICATION(g_object_new(my_application_get_type(), "application-id", APPLICATION_ID, "flags", G_APPLICATION_NON_UNIQUE, diff --git a/next-gen-ui/step_01/linux/my_application.h b/next-gen-ui/step_01/linux/runner/my_application.h similarity index 100% rename from next-gen-ui/step_01/linux/my_application.h rename to next-gen-ui/step_01/linux/runner/my_application.h diff --git a/next-gen-ui/step_01/macos/Runner.xcodeproj/project.pbxproj b/next-gen-ui/step_01/macos/Runner.xcodeproj/project.pbxproj index a260461a61..5ca8a3231e 100644 --- a/next-gen-ui/step_01/macos/Runner.xcodeproj/project.pbxproj +++ b/next-gen-ui/step_01/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ + 2E6B87224BF317E31F74B0D6 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FF5748F504BD5E56042DEADB /* Pods_RunnerTests.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 44BBBA76B13EEB94F9DCE170 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2984A5AD2129F6C671F00164 /* Pods_Runner.framework */; }; - 4E0858D90CA55751E7BE4898 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 39010BEDE01EF3B7F309CBE7 /* Pods_RunnerTests.framework */; }; + 56635C0EC97E7F426A37B2E0 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 70907F10D88B462804477CEC /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,13 +62,12 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 2984A5AD2129F6C671F00164 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 2CF773F4C2430EAC834646B3 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 1084579C46BDDCE9E7DF16AC /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 2D475486DFFA8C60E5710DB0 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; }; - 337BA55CC083EAE0C41E02E7 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 33CC10ED2044A3C60003C045 /* next_gen_ui.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = next_gen_ui.app; sourceTree = BUILT_PRODUCTS_DIR; }; 33CC10F02044A3C60003C045 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 33CC10F22044A3C60003C045 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = Runner/Assets.xcassets; sourceTree = ""; }; @@ -78,16 +77,17 @@ 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Debug.xcconfig"; sourceTree = ""; }; 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Release.xcconfig"; sourceTree = ""; }; 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = "Flutter-Generated.xcconfig"; path = "ephemeral/Flutter-Generated.xcconfig"; sourceTree = ""; }; - 33D3C1661150E5CF9FD9C336 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 39010BEDE01EF3B7F309CBE7 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 6B406084562E7BBF7435D2FF /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 70907F10D88B462804477CEC /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 7FDC8102767980E531E73AC5 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 812DEB8E378C986DF221D831 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 86295B0784C4F550CBE8BD69 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 949451BBF3DF607E13DBB265 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - A4F4B5072EE42AC6A44D036B /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + E57940CC1AE193EDBC7E60BC /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + FF5748F504BD5E56042DEADB /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 4E0858D90CA55751E7BE4898 /* Pods_RunnerTests.framework in Frameworks */, + 2E6B87224BF317E31F74B0D6 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,22 +103,22 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 44BBBA76B13EEB94F9DCE170 /* Pods_Runner.framework in Frameworks */, + 56635C0EC97E7F426A37B2E0 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 1C1096D0206D3CBABCC06686 /* Pods */ = { + 0EB950B6EBBA8562ED05E9C6 /* Pods */ = { isa = PBXGroup; children = ( - 2CF773F4C2430EAC834646B3 /* Pods-Runner.debug.xcconfig */, - 7FDC8102767980E531E73AC5 /* Pods-Runner.release.xcconfig */, - 6B406084562E7BBF7435D2FF /* Pods-Runner.profile.xcconfig */, - A4F4B5072EE42AC6A44D036B /* Pods-RunnerTests.debug.xcconfig */, - 33D3C1661150E5CF9FD9C336 /* Pods-RunnerTests.release.xcconfig */, - 337BA55CC083EAE0C41E02E7 /* Pods-RunnerTests.profile.xcconfig */, + 1084579C46BDDCE9E7DF16AC /* Pods-Runner.debug.xcconfig */, + 2D475486DFFA8C60E5710DB0 /* Pods-Runner.release.xcconfig */, + E57940CC1AE193EDBC7E60BC /* Pods-Runner.profile.xcconfig */, + 86295B0784C4F550CBE8BD69 /* Pods-RunnerTests.debug.xcconfig */, + 949451BBF3DF607E13DBB265 /* Pods-RunnerTests.release.xcconfig */, + 812DEB8E378C986DF221D831 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -151,7 +151,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 1C1096D0206D3CBABCC06686 /* Pods */, + 0EB950B6EBBA8562ED05E9C6 /* Pods */, ); sourceTree = ""; }; @@ -202,8 +202,8 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - 2984A5AD2129F6C671F00164 /* Pods_Runner.framework */, - 39010BEDE01EF3B7F309CBE7 /* Pods_RunnerTests.framework */, + 70907F10D88B462804477CEC /* Pods_Runner.framework */, + FF5748F504BD5E56042DEADB /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - FE0C7B1BBD5CA48F75CD6536 /* [CP] Check Pods Manifest.lock */, + 24CA264AC7C1AA37F685BC19 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - BF702552288C4603E192F687 /* [CP] Check Pods Manifest.lock */, + 9936C57FFCBF37419AE7561E /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 978AFB595B79A33D319A948F /* [CP] Embed Pods Frameworks */, + 038DC0986A46E5F2839BD12E /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,84 +323,84 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 3399D490228B24CF009A79C7 /* ShellScript */ = { + 038DC0986A46E5F2839BD12E /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - ); + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; }; - 33CC111E2044C6BF0003C045 /* ShellScript */ = { + 24CA264AC7C1AA37F685BC19 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - Flutter/ephemeral/FlutterInputs.xcfilelist, ); inputPaths = ( - Flutter/ephemeral/tripwire, + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - Flutter/ephemeral/FlutterOutputs.xcfilelist, ); outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - 978AFB595B79A33D319A948F /* [CP] Embed Pods Frameworks */ = { + 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + ); outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; + shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; }; - BF702552288C4603E192F687 /* [CP] Check Pods Manifest.lock */ = { + 33CC111E2044C6BF0003C045 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + Flutter/ephemeral/FlutterInputs.xcfilelist, ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", + Flutter/ephemeral/tripwire, ); - name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( + Flutter/ephemeral/FlutterOutputs.xcfilelist, ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - FE0C7B1BBD5CA48F75CD6536 /* [CP] Check Pods Manifest.lock */ = { + 9936C57FFCBF37419AE7561E /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -415,7 +415,7 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = A4F4B5072EE42AC6A44D036B /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 86295B0784C4F550CBE8BD69 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 33D3C1661150E5CF9FD9C336 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 949451BBF3DF607E13DBB265 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 337BA55CC083EAE0C41E02E7 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 812DEB8E378C986DF221D831 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/next-gen-ui/step_01/web/index.html b/next-gen-ui/step_01/web/index.html index ed2ea921e4..d0a2517e72 100644 --- a/next-gen-ui/step_01/web/index.html +++ b/next-gen-ui/step_01/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/next-gen-ui/step_02_a/ios/Runner.xcodeproj/project.pbxproj b/next-gen-ui/step_02_a/ios/Runner.xcodeproj/project.pbxproj index 43b8398d4f..8f047bdf00 100644 --- a/next-gen-ui/step_02_a/ios/Runner.xcodeproj/project.pbxproj +++ b/next-gen-ui/step_02_a/ios/Runner.xcodeproj/project.pbxproj @@ -11,11 +11,11 @@ 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; - 95B86EC706B280ECBF05B340 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F29266F85C81E223DE38826F /* Pods_RunnerTests.framework */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - E9B1620F2EF5AF6175681809 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DE20D8731F5AC68BA1712A5A /* Pods_Runner.framework */; }; + B62141185A2A64CE6AE671F2 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B1CF946366B840164A5B6A19 /* Pods_Runner.framework */; }; + B81AE38132A98A311F8F51B8 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 249FB81AECD9AE84FFA40AD0 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,51 +42,60 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 0FBB97D3B77C3F8ABBBA69D1 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 1065108C466C107C635700F4 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; + 249FB81AECD9AE84FFA40AD0 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 531021BCFBF6DEA7A588EEFB /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 5C244634881A8C4BD75C5C03 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 5220EC7DF66B6FF52474A86B /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 64F96334240D4715F67078C9 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 6641BE7C3FD295E85E2B1262 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 8094A5C0BD3F742D973F4EBB /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; + 9790F6561207E583E84D4FF9 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - D324E46E5A8253E05C3A901E /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - DC699C7AADC6A46B95166F6E /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - DE20D8731F5AC68BA1712A5A /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - F29266F85C81E223DE38826F /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - FFE5027C7AD199E12A7AF98E /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + B1CF946366B840164A5B6A19 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 344BA4708047A433A26140BD /* Frameworks */ = { + 97C146EB1CF9000F007C117D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 95B86EC706B280ECBF05B340 /* Pods_RunnerTests.framework in Frameworks */, + B62141185A2A64CE6AE671F2 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 97C146EB1CF9000F007C117D /* Frameworks */ = { + C266D94F39398FF0845062EB /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - E9B1620F2EF5AF6175681809 /* Pods_Runner.framework in Frameworks */, + B81AE38132A98A311F8F51B8 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 29779CA63CE39E764210D572 /* Frameworks */ = { + isa = PBXGroup; + children = ( + B1CF946366B840164A5B6A19 /* Pods_Runner.framework */, + 249FB81AECD9AE84FFA40AD0 /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; 331C8082294A63A400263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -95,15 +104,15 @@ path = RunnerTests; sourceTree = ""; }; - 6655F551DEE09BD8E2ABAAD2 /* Pods */ = { + 67CB01004931F5EAE1484002 /* Pods */ = { isa = PBXGroup; children = ( - 8094A5C0BD3F742D973F4EBB /* Pods-Runner.debug.xcconfig */, - 5C244634881A8C4BD75C5C03 /* Pods-Runner.release.xcconfig */, - DC699C7AADC6A46B95166F6E /* Pods-Runner.profile.xcconfig */, - 531021BCFBF6DEA7A588EEFB /* Pods-RunnerTests.debug.xcconfig */, - FFE5027C7AD199E12A7AF98E /* Pods-RunnerTests.release.xcconfig */, - D324E46E5A8253E05C3A901E /* Pods-RunnerTests.profile.xcconfig */, + 64F96334240D4715F67078C9 /* Pods-Runner.debug.xcconfig */, + 1065108C466C107C635700F4 /* Pods-Runner.release.xcconfig */, + 9790F6561207E583E84D4FF9 /* Pods-Runner.profile.xcconfig */, + 0FBB97D3B77C3F8ABBBA69D1 /* Pods-RunnerTests.debug.xcconfig */, + 5220EC7DF66B6FF52474A86B /* Pods-RunnerTests.release.xcconfig */, + 6641BE7C3FD295E85E2B1262 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -127,8 +136,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - 6655F551DEE09BD8E2ABAAD2 /* Pods */, - AB471AC81B5F3E3EAC08510D /* Frameworks */, + 67CB01004931F5EAE1484002 /* Pods */, + 29779CA63CE39E764210D572 /* Frameworks */, ); sourceTree = ""; }; @@ -156,15 +165,6 @@ path = Runner; sourceTree = ""; }; - AB471AC81B5F3E3EAC08510D /* Frameworks */ = { - isa = PBXGroup; - children = ( - DE20D8731F5AC68BA1712A5A /* Pods_Runner.framework */, - F29266F85C81E223DE38826F /* Pods_RunnerTests.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - C143E5EEC573FBD89B16A658 /* [CP] Check Pods Manifest.lock */, + 1A41435D909B4A5BA59DA804 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 344BA4708047A433A26140BD /* Frameworks */, + C266D94F39398FF0845062EB /* Frameworks */, ); buildRules = ( ); @@ -191,7 +191,7 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 3AAEDA8BA83E71CC34259A37 /* [CP] Check Pods Manifest.lock */, + 15FA0791F2F6E4DEC3602581 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, @@ -269,7 +269,7 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 3AAEDA8BA83E71CC34259A37 /* [CP] Check Pods Manifest.lock */ = { + 15FA0791F2F6E4DEC3602581 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -291,58 +291,58 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + 1A41435D909B4A5BA59DA804 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( - "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "Thin Binary"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); - name = "Run Script"; + name = "Thin Binary"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - C143E5EEC573FBD89B16A658 /* [CP] Check Pods Manifest.lock */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( ); + name = "Run Script"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; /* End PBXShellScriptBuildPhase section */ @@ -469,7 +469,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 531021BCFBF6DEA7A588EEFB /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 0FBB97D3B77C3F8ABBBA69D1 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -487,7 +487,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = FFE5027C7AD199E12A7AF98E /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 5220EC7DF66B6FF52474A86B /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -503,7 +503,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = D324E46E5A8253E05C3A901E /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 6641BE7C3FD295E85E2B1262 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/next-gen-ui/step_02_a/linux/CMakeLists.txt b/next-gen-ui/step_02_a/linux/CMakeLists.txt index ccbe56dd39..e49da8fe41 100644 --- a/next-gen-ui/step_02_a/linux/CMakeLists.txt +++ b/next-gen-ui/step_02_a/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/next-gen-ui/step_02_a/linux/runner/CMakeLists.txt b/next-gen-ui/step_02_a/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/next-gen-ui/step_02_a/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/next-gen-ui/step_02_a/linux/main.cc b/next-gen-ui/step_02_a/linux/runner/main.cc similarity index 100% rename from next-gen-ui/step_02_a/linux/main.cc rename to next-gen-ui/step_02_a/linux/runner/main.cc diff --git a/next-gen-ui/step_02_a/linux/my_application.cc b/next-gen-ui/step_02_a/linux/runner/my_application.cc similarity index 93% rename from next-gen-ui/step_02_a/linux/my_application.cc rename to next-gen-ui/step_02_a/linux/runner/my_application.cc index d5581db5c1..6fa9821b9c 100644 --- a/next-gen-ui/step_02_a/linux/my_application.cc +++ b/next-gen-ui/step_02_a/linux/runner/my_application.cc @@ -117,6 +117,12 @@ static void my_application_class_init(MyApplicationClass* klass) { static void my_application_init(MyApplication* self) {} MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + return MY_APPLICATION(g_object_new(my_application_get_type(), "application-id", APPLICATION_ID, "flags", G_APPLICATION_NON_UNIQUE, diff --git a/next-gen-ui/step_02_a/linux/my_application.h b/next-gen-ui/step_02_a/linux/runner/my_application.h similarity index 100% rename from next-gen-ui/step_02_a/linux/my_application.h rename to next-gen-ui/step_02_a/linux/runner/my_application.h diff --git a/next-gen-ui/step_02_a/macos/Runner.xcodeproj/project.pbxproj b/next-gen-ui/step_02_a/macos/Runner.xcodeproj/project.pbxproj index a260461a61..5ca8a3231e 100644 --- a/next-gen-ui/step_02_a/macos/Runner.xcodeproj/project.pbxproj +++ b/next-gen-ui/step_02_a/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ + 2E6B87224BF317E31F74B0D6 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FF5748F504BD5E56042DEADB /* Pods_RunnerTests.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 44BBBA76B13EEB94F9DCE170 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2984A5AD2129F6C671F00164 /* Pods_Runner.framework */; }; - 4E0858D90CA55751E7BE4898 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 39010BEDE01EF3B7F309CBE7 /* Pods_RunnerTests.framework */; }; + 56635C0EC97E7F426A37B2E0 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 70907F10D88B462804477CEC /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,13 +62,12 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 2984A5AD2129F6C671F00164 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 2CF773F4C2430EAC834646B3 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 1084579C46BDDCE9E7DF16AC /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 2D475486DFFA8C60E5710DB0 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; }; - 337BA55CC083EAE0C41E02E7 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 33CC10ED2044A3C60003C045 /* next_gen_ui.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = next_gen_ui.app; sourceTree = BUILT_PRODUCTS_DIR; }; 33CC10F02044A3C60003C045 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 33CC10F22044A3C60003C045 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = Runner/Assets.xcassets; sourceTree = ""; }; @@ -78,16 +77,17 @@ 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Debug.xcconfig"; sourceTree = ""; }; 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Release.xcconfig"; sourceTree = ""; }; 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = "Flutter-Generated.xcconfig"; path = "ephemeral/Flutter-Generated.xcconfig"; sourceTree = ""; }; - 33D3C1661150E5CF9FD9C336 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 39010BEDE01EF3B7F309CBE7 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 6B406084562E7BBF7435D2FF /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 70907F10D88B462804477CEC /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 7FDC8102767980E531E73AC5 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 812DEB8E378C986DF221D831 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 86295B0784C4F550CBE8BD69 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 949451BBF3DF607E13DBB265 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - A4F4B5072EE42AC6A44D036B /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + E57940CC1AE193EDBC7E60BC /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + FF5748F504BD5E56042DEADB /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 4E0858D90CA55751E7BE4898 /* Pods_RunnerTests.framework in Frameworks */, + 2E6B87224BF317E31F74B0D6 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,22 +103,22 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 44BBBA76B13EEB94F9DCE170 /* Pods_Runner.framework in Frameworks */, + 56635C0EC97E7F426A37B2E0 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 1C1096D0206D3CBABCC06686 /* Pods */ = { + 0EB950B6EBBA8562ED05E9C6 /* Pods */ = { isa = PBXGroup; children = ( - 2CF773F4C2430EAC834646B3 /* Pods-Runner.debug.xcconfig */, - 7FDC8102767980E531E73AC5 /* Pods-Runner.release.xcconfig */, - 6B406084562E7BBF7435D2FF /* Pods-Runner.profile.xcconfig */, - A4F4B5072EE42AC6A44D036B /* Pods-RunnerTests.debug.xcconfig */, - 33D3C1661150E5CF9FD9C336 /* Pods-RunnerTests.release.xcconfig */, - 337BA55CC083EAE0C41E02E7 /* Pods-RunnerTests.profile.xcconfig */, + 1084579C46BDDCE9E7DF16AC /* Pods-Runner.debug.xcconfig */, + 2D475486DFFA8C60E5710DB0 /* Pods-Runner.release.xcconfig */, + E57940CC1AE193EDBC7E60BC /* Pods-Runner.profile.xcconfig */, + 86295B0784C4F550CBE8BD69 /* Pods-RunnerTests.debug.xcconfig */, + 949451BBF3DF607E13DBB265 /* Pods-RunnerTests.release.xcconfig */, + 812DEB8E378C986DF221D831 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -151,7 +151,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 1C1096D0206D3CBABCC06686 /* Pods */, + 0EB950B6EBBA8562ED05E9C6 /* Pods */, ); sourceTree = ""; }; @@ -202,8 +202,8 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - 2984A5AD2129F6C671F00164 /* Pods_Runner.framework */, - 39010BEDE01EF3B7F309CBE7 /* Pods_RunnerTests.framework */, + 70907F10D88B462804477CEC /* Pods_Runner.framework */, + FF5748F504BD5E56042DEADB /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - FE0C7B1BBD5CA48F75CD6536 /* [CP] Check Pods Manifest.lock */, + 24CA264AC7C1AA37F685BC19 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - BF702552288C4603E192F687 /* [CP] Check Pods Manifest.lock */, + 9936C57FFCBF37419AE7561E /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 978AFB595B79A33D319A948F /* [CP] Embed Pods Frameworks */, + 038DC0986A46E5F2839BD12E /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,84 +323,84 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 3399D490228B24CF009A79C7 /* ShellScript */ = { + 038DC0986A46E5F2839BD12E /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - ); + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; }; - 33CC111E2044C6BF0003C045 /* ShellScript */ = { + 24CA264AC7C1AA37F685BC19 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - Flutter/ephemeral/FlutterInputs.xcfilelist, ); inputPaths = ( - Flutter/ephemeral/tripwire, + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - Flutter/ephemeral/FlutterOutputs.xcfilelist, ); outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - 978AFB595B79A33D319A948F /* [CP] Embed Pods Frameworks */ = { + 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + ); outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; + shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; }; - BF702552288C4603E192F687 /* [CP] Check Pods Manifest.lock */ = { + 33CC111E2044C6BF0003C045 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + Flutter/ephemeral/FlutterInputs.xcfilelist, ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", + Flutter/ephemeral/tripwire, ); - name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( + Flutter/ephemeral/FlutterOutputs.xcfilelist, ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - FE0C7B1BBD5CA48F75CD6536 /* [CP] Check Pods Manifest.lock */ = { + 9936C57FFCBF37419AE7561E /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -415,7 +415,7 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = A4F4B5072EE42AC6A44D036B /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 86295B0784C4F550CBE8BD69 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 33D3C1661150E5CF9FD9C336 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 949451BBF3DF607E13DBB265 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 337BA55CC083EAE0C41E02E7 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 812DEB8E378C986DF221D831 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/next-gen-ui/step_02_a/web/index.html b/next-gen-ui/step_02_a/web/index.html index ed2ea921e4..d0a2517e72 100644 --- a/next-gen-ui/step_02_a/web/index.html +++ b/next-gen-ui/step_02_a/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/next-gen-ui/step_02_b/ios/Runner.xcodeproj/project.pbxproj b/next-gen-ui/step_02_b/ios/Runner.xcodeproj/project.pbxproj index 43b8398d4f..8f047bdf00 100644 --- a/next-gen-ui/step_02_b/ios/Runner.xcodeproj/project.pbxproj +++ b/next-gen-ui/step_02_b/ios/Runner.xcodeproj/project.pbxproj @@ -11,11 +11,11 @@ 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; - 95B86EC706B280ECBF05B340 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F29266F85C81E223DE38826F /* Pods_RunnerTests.framework */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - E9B1620F2EF5AF6175681809 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DE20D8731F5AC68BA1712A5A /* Pods_Runner.framework */; }; + B62141185A2A64CE6AE671F2 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B1CF946366B840164A5B6A19 /* Pods_Runner.framework */; }; + B81AE38132A98A311F8F51B8 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 249FB81AECD9AE84FFA40AD0 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,51 +42,60 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 0FBB97D3B77C3F8ABBBA69D1 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 1065108C466C107C635700F4 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; + 249FB81AECD9AE84FFA40AD0 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 531021BCFBF6DEA7A588EEFB /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 5C244634881A8C4BD75C5C03 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 5220EC7DF66B6FF52474A86B /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 64F96334240D4715F67078C9 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 6641BE7C3FD295E85E2B1262 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 8094A5C0BD3F742D973F4EBB /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; + 9790F6561207E583E84D4FF9 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - D324E46E5A8253E05C3A901E /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - DC699C7AADC6A46B95166F6E /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - DE20D8731F5AC68BA1712A5A /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - F29266F85C81E223DE38826F /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - FFE5027C7AD199E12A7AF98E /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + B1CF946366B840164A5B6A19 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 344BA4708047A433A26140BD /* Frameworks */ = { + 97C146EB1CF9000F007C117D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 95B86EC706B280ECBF05B340 /* Pods_RunnerTests.framework in Frameworks */, + B62141185A2A64CE6AE671F2 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 97C146EB1CF9000F007C117D /* Frameworks */ = { + C266D94F39398FF0845062EB /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - E9B1620F2EF5AF6175681809 /* Pods_Runner.framework in Frameworks */, + B81AE38132A98A311F8F51B8 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 29779CA63CE39E764210D572 /* Frameworks */ = { + isa = PBXGroup; + children = ( + B1CF946366B840164A5B6A19 /* Pods_Runner.framework */, + 249FB81AECD9AE84FFA40AD0 /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; 331C8082294A63A400263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -95,15 +104,15 @@ path = RunnerTests; sourceTree = ""; }; - 6655F551DEE09BD8E2ABAAD2 /* Pods */ = { + 67CB01004931F5EAE1484002 /* Pods */ = { isa = PBXGroup; children = ( - 8094A5C0BD3F742D973F4EBB /* Pods-Runner.debug.xcconfig */, - 5C244634881A8C4BD75C5C03 /* Pods-Runner.release.xcconfig */, - DC699C7AADC6A46B95166F6E /* Pods-Runner.profile.xcconfig */, - 531021BCFBF6DEA7A588EEFB /* Pods-RunnerTests.debug.xcconfig */, - FFE5027C7AD199E12A7AF98E /* Pods-RunnerTests.release.xcconfig */, - D324E46E5A8253E05C3A901E /* Pods-RunnerTests.profile.xcconfig */, + 64F96334240D4715F67078C9 /* Pods-Runner.debug.xcconfig */, + 1065108C466C107C635700F4 /* Pods-Runner.release.xcconfig */, + 9790F6561207E583E84D4FF9 /* Pods-Runner.profile.xcconfig */, + 0FBB97D3B77C3F8ABBBA69D1 /* Pods-RunnerTests.debug.xcconfig */, + 5220EC7DF66B6FF52474A86B /* Pods-RunnerTests.release.xcconfig */, + 6641BE7C3FD295E85E2B1262 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -127,8 +136,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - 6655F551DEE09BD8E2ABAAD2 /* Pods */, - AB471AC81B5F3E3EAC08510D /* Frameworks */, + 67CB01004931F5EAE1484002 /* Pods */, + 29779CA63CE39E764210D572 /* Frameworks */, ); sourceTree = ""; }; @@ -156,15 +165,6 @@ path = Runner; sourceTree = ""; }; - AB471AC81B5F3E3EAC08510D /* Frameworks */ = { - isa = PBXGroup; - children = ( - DE20D8731F5AC68BA1712A5A /* Pods_Runner.framework */, - F29266F85C81E223DE38826F /* Pods_RunnerTests.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - C143E5EEC573FBD89B16A658 /* [CP] Check Pods Manifest.lock */, + 1A41435D909B4A5BA59DA804 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 344BA4708047A433A26140BD /* Frameworks */, + C266D94F39398FF0845062EB /* Frameworks */, ); buildRules = ( ); @@ -191,7 +191,7 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 3AAEDA8BA83E71CC34259A37 /* [CP] Check Pods Manifest.lock */, + 15FA0791F2F6E4DEC3602581 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, @@ -269,7 +269,7 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 3AAEDA8BA83E71CC34259A37 /* [CP] Check Pods Manifest.lock */ = { + 15FA0791F2F6E4DEC3602581 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -291,58 +291,58 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + 1A41435D909B4A5BA59DA804 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( - "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "Thin Binary"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); - name = "Run Script"; + name = "Thin Binary"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - C143E5EEC573FBD89B16A658 /* [CP] Check Pods Manifest.lock */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( ); + name = "Run Script"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; /* End PBXShellScriptBuildPhase section */ @@ -469,7 +469,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 531021BCFBF6DEA7A588EEFB /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 0FBB97D3B77C3F8ABBBA69D1 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -487,7 +487,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = FFE5027C7AD199E12A7AF98E /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 5220EC7DF66B6FF52474A86B /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -503,7 +503,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = D324E46E5A8253E05C3A901E /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 6641BE7C3FD295E85E2B1262 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/next-gen-ui/step_02_b/linux/CMakeLists.txt b/next-gen-ui/step_02_b/linux/CMakeLists.txt index ccbe56dd39..e49da8fe41 100644 --- a/next-gen-ui/step_02_b/linux/CMakeLists.txt +++ b/next-gen-ui/step_02_b/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/next-gen-ui/step_02_b/linux/runner/CMakeLists.txt b/next-gen-ui/step_02_b/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/next-gen-ui/step_02_b/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/next-gen-ui/step_02_b/linux/main.cc b/next-gen-ui/step_02_b/linux/runner/main.cc similarity index 100% rename from next-gen-ui/step_02_b/linux/main.cc rename to next-gen-ui/step_02_b/linux/runner/main.cc diff --git a/next-gen-ui/step_02_b/linux/my_application.cc b/next-gen-ui/step_02_b/linux/runner/my_application.cc similarity index 93% rename from next-gen-ui/step_02_b/linux/my_application.cc rename to next-gen-ui/step_02_b/linux/runner/my_application.cc index d5581db5c1..6fa9821b9c 100644 --- a/next-gen-ui/step_02_b/linux/my_application.cc +++ b/next-gen-ui/step_02_b/linux/runner/my_application.cc @@ -117,6 +117,12 @@ static void my_application_class_init(MyApplicationClass* klass) { static void my_application_init(MyApplication* self) {} MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + return MY_APPLICATION(g_object_new(my_application_get_type(), "application-id", APPLICATION_ID, "flags", G_APPLICATION_NON_UNIQUE, diff --git a/next-gen-ui/step_02_b/linux/my_application.h b/next-gen-ui/step_02_b/linux/runner/my_application.h similarity index 100% rename from next-gen-ui/step_02_b/linux/my_application.h rename to next-gen-ui/step_02_b/linux/runner/my_application.h diff --git a/next-gen-ui/step_02_b/macos/Runner.xcodeproj/project.pbxproj b/next-gen-ui/step_02_b/macos/Runner.xcodeproj/project.pbxproj index a260461a61..5ca8a3231e 100644 --- a/next-gen-ui/step_02_b/macos/Runner.xcodeproj/project.pbxproj +++ b/next-gen-ui/step_02_b/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ + 2E6B87224BF317E31F74B0D6 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FF5748F504BD5E56042DEADB /* Pods_RunnerTests.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 44BBBA76B13EEB94F9DCE170 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2984A5AD2129F6C671F00164 /* Pods_Runner.framework */; }; - 4E0858D90CA55751E7BE4898 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 39010BEDE01EF3B7F309CBE7 /* Pods_RunnerTests.framework */; }; + 56635C0EC97E7F426A37B2E0 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 70907F10D88B462804477CEC /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,13 +62,12 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 2984A5AD2129F6C671F00164 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 2CF773F4C2430EAC834646B3 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 1084579C46BDDCE9E7DF16AC /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 2D475486DFFA8C60E5710DB0 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; }; - 337BA55CC083EAE0C41E02E7 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 33CC10ED2044A3C60003C045 /* next_gen_ui.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = next_gen_ui.app; sourceTree = BUILT_PRODUCTS_DIR; }; 33CC10F02044A3C60003C045 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 33CC10F22044A3C60003C045 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = Runner/Assets.xcassets; sourceTree = ""; }; @@ -78,16 +77,17 @@ 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Debug.xcconfig"; sourceTree = ""; }; 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Release.xcconfig"; sourceTree = ""; }; 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = "Flutter-Generated.xcconfig"; path = "ephemeral/Flutter-Generated.xcconfig"; sourceTree = ""; }; - 33D3C1661150E5CF9FD9C336 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 39010BEDE01EF3B7F309CBE7 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 6B406084562E7BBF7435D2FF /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 70907F10D88B462804477CEC /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 7FDC8102767980E531E73AC5 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 812DEB8E378C986DF221D831 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 86295B0784C4F550CBE8BD69 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 949451BBF3DF607E13DBB265 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - A4F4B5072EE42AC6A44D036B /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + E57940CC1AE193EDBC7E60BC /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + FF5748F504BD5E56042DEADB /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 4E0858D90CA55751E7BE4898 /* Pods_RunnerTests.framework in Frameworks */, + 2E6B87224BF317E31F74B0D6 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,22 +103,22 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 44BBBA76B13EEB94F9DCE170 /* Pods_Runner.framework in Frameworks */, + 56635C0EC97E7F426A37B2E0 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 1C1096D0206D3CBABCC06686 /* Pods */ = { + 0EB950B6EBBA8562ED05E9C6 /* Pods */ = { isa = PBXGroup; children = ( - 2CF773F4C2430EAC834646B3 /* Pods-Runner.debug.xcconfig */, - 7FDC8102767980E531E73AC5 /* Pods-Runner.release.xcconfig */, - 6B406084562E7BBF7435D2FF /* Pods-Runner.profile.xcconfig */, - A4F4B5072EE42AC6A44D036B /* Pods-RunnerTests.debug.xcconfig */, - 33D3C1661150E5CF9FD9C336 /* Pods-RunnerTests.release.xcconfig */, - 337BA55CC083EAE0C41E02E7 /* Pods-RunnerTests.profile.xcconfig */, + 1084579C46BDDCE9E7DF16AC /* Pods-Runner.debug.xcconfig */, + 2D475486DFFA8C60E5710DB0 /* Pods-Runner.release.xcconfig */, + E57940CC1AE193EDBC7E60BC /* Pods-Runner.profile.xcconfig */, + 86295B0784C4F550CBE8BD69 /* Pods-RunnerTests.debug.xcconfig */, + 949451BBF3DF607E13DBB265 /* Pods-RunnerTests.release.xcconfig */, + 812DEB8E378C986DF221D831 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -151,7 +151,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 1C1096D0206D3CBABCC06686 /* Pods */, + 0EB950B6EBBA8562ED05E9C6 /* Pods */, ); sourceTree = ""; }; @@ -202,8 +202,8 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - 2984A5AD2129F6C671F00164 /* Pods_Runner.framework */, - 39010BEDE01EF3B7F309CBE7 /* Pods_RunnerTests.framework */, + 70907F10D88B462804477CEC /* Pods_Runner.framework */, + FF5748F504BD5E56042DEADB /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - FE0C7B1BBD5CA48F75CD6536 /* [CP] Check Pods Manifest.lock */, + 24CA264AC7C1AA37F685BC19 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - BF702552288C4603E192F687 /* [CP] Check Pods Manifest.lock */, + 9936C57FFCBF37419AE7561E /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 978AFB595B79A33D319A948F /* [CP] Embed Pods Frameworks */, + 038DC0986A46E5F2839BD12E /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,84 +323,84 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 3399D490228B24CF009A79C7 /* ShellScript */ = { + 038DC0986A46E5F2839BD12E /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - ); + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; }; - 33CC111E2044C6BF0003C045 /* ShellScript */ = { + 24CA264AC7C1AA37F685BC19 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - Flutter/ephemeral/FlutterInputs.xcfilelist, ); inputPaths = ( - Flutter/ephemeral/tripwire, + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - Flutter/ephemeral/FlutterOutputs.xcfilelist, ); outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - 978AFB595B79A33D319A948F /* [CP] Embed Pods Frameworks */ = { + 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + ); outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; + shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; }; - BF702552288C4603E192F687 /* [CP] Check Pods Manifest.lock */ = { + 33CC111E2044C6BF0003C045 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + Flutter/ephemeral/FlutterInputs.xcfilelist, ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", + Flutter/ephemeral/tripwire, ); - name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( + Flutter/ephemeral/FlutterOutputs.xcfilelist, ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - FE0C7B1BBD5CA48F75CD6536 /* [CP] Check Pods Manifest.lock */ = { + 9936C57FFCBF37419AE7561E /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -415,7 +415,7 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = A4F4B5072EE42AC6A44D036B /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 86295B0784C4F550CBE8BD69 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 33D3C1661150E5CF9FD9C336 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 949451BBF3DF607E13DBB265 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 337BA55CC083EAE0C41E02E7 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 812DEB8E378C986DF221D831 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/next-gen-ui/step_02_b/web/index.html b/next-gen-ui/step_02_b/web/index.html index ed2ea921e4..d0a2517e72 100644 --- a/next-gen-ui/step_02_b/web/index.html +++ b/next-gen-ui/step_02_b/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/next-gen-ui/step_02_c/ios/Runner.xcodeproj/project.pbxproj b/next-gen-ui/step_02_c/ios/Runner.xcodeproj/project.pbxproj index 43b8398d4f..8f047bdf00 100644 --- a/next-gen-ui/step_02_c/ios/Runner.xcodeproj/project.pbxproj +++ b/next-gen-ui/step_02_c/ios/Runner.xcodeproj/project.pbxproj @@ -11,11 +11,11 @@ 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; - 95B86EC706B280ECBF05B340 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F29266F85C81E223DE38826F /* Pods_RunnerTests.framework */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - E9B1620F2EF5AF6175681809 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DE20D8731F5AC68BA1712A5A /* Pods_Runner.framework */; }; + B62141185A2A64CE6AE671F2 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B1CF946366B840164A5B6A19 /* Pods_Runner.framework */; }; + B81AE38132A98A311F8F51B8 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 249FB81AECD9AE84FFA40AD0 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,51 +42,60 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 0FBB97D3B77C3F8ABBBA69D1 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 1065108C466C107C635700F4 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; + 249FB81AECD9AE84FFA40AD0 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 531021BCFBF6DEA7A588EEFB /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 5C244634881A8C4BD75C5C03 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 5220EC7DF66B6FF52474A86B /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 64F96334240D4715F67078C9 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 6641BE7C3FD295E85E2B1262 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 8094A5C0BD3F742D973F4EBB /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; + 9790F6561207E583E84D4FF9 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - D324E46E5A8253E05C3A901E /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - DC699C7AADC6A46B95166F6E /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - DE20D8731F5AC68BA1712A5A /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - F29266F85C81E223DE38826F /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - FFE5027C7AD199E12A7AF98E /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + B1CF946366B840164A5B6A19 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 344BA4708047A433A26140BD /* Frameworks */ = { + 97C146EB1CF9000F007C117D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 95B86EC706B280ECBF05B340 /* Pods_RunnerTests.framework in Frameworks */, + B62141185A2A64CE6AE671F2 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 97C146EB1CF9000F007C117D /* Frameworks */ = { + C266D94F39398FF0845062EB /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - E9B1620F2EF5AF6175681809 /* Pods_Runner.framework in Frameworks */, + B81AE38132A98A311F8F51B8 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 29779CA63CE39E764210D572 /* Frameworks */ = { + isa = PBXGroup; + children = ( + B1CF946366B840164A5B6A19 /* Pods_Runner.framework */, + 249FB81AECD9AE84FFA40AD0 /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; 331C8082294A63A400263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -95,15 +104,15 @@ path = RunnerTests; sourceTree = ""; }; - 6655F551DEE09BD8E2ABAAD2 /* Pods */ = { + 67CB01004931F5EAE1484002 /* Pods */ = { isa = PBXGroup; children = ( - 8094A5C0BD3F742D973F4EBB /* Pods-Runner.debug.xcconfig */, - 5C244634881A8C4BD75C5C03 /* Pods-Runner.release.xcconfig */, - DC699C7AADC6A46B95166F6E /* Pods-Runner.profile.xcconfig */, - 531021BCFBF6DEA7A588EEFB /* Pods-RunnerTests.debug.xcconfig */, - FFE5027C7AD199E12A7AF98E /* Pods-RunnerTests.release.xcconfig */, - D324E46E5A8253E05C3A901E /* Pods-RunnerTests.profile.xcconfig */, + 64F96334240D4715F67078C9 /* Pods-Runner.debug.xcconfig */, + 1065108C466C107C635700F4 /* Pods-Runner.release.xcconfig */, + 9790F6561207E583E84D4FF9 /* Pods-Runner.profile.xcconfig */, + 0FBB97D3B77C3F8ABBBA69D1 /* Pods-RunnerTests.debug.xcconfig */, + 5220EC7DF66B6FF52474A86B /* Pods-RunnerTests.release.xcconfig */, + 6641BE7C3FD295E85E2B1262 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -127,8 +136,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - 6655F551DEE09BD8E2ABAAD2 /* Pods */, - AB471AC81B5F3E3EAC08510D /* Frameworks */, + 67CB01004931F5EAE1484002 /* Pods */, + 29779CA63CE39E764210D572 /* Frameworks */, ); sourceTree = ""; }; @@ -156,15 +165,6 @@ path = Runner; sourceTree = ""; }; - AB471AC81B5F3E3EAC08510D /* Frameworks */ = { - isa = PBXGroup; - children = ( - DE20D8731F5AC68BA1712A5A /* Pods_Runner.framework */, - F29266F85C81E223DE38826F /* Pods_RunnerTests.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - C143E5EEC573FBD89B16A658 /* [CP] Check Pods Manifest.lock */, + 1A41435D909B4A5BA59DA804 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 344BA4708047A433A26140BD /* Frameworks */, + C266D94F39398FF0845062EB /* Frameworks */, ); buildRules = ( ); @@ -191,7 +191,7 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 3AAEDA8BA83E71CC34259A37 /* [CP] Check Pods Manifest.lock */, + 15FA0791F2F6E4DEC3602581 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, @@ -269,7 +269,7 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 3AAEDA8BA83E71CC34259A37 /* [CP] Check Pods Manifest.lock */ = { + 15FA0791F2F6E4DEC3602581 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -291,58 +291,58 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + 1A41435D909B4A5BA59DA804 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( - "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "Thin Binary"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); - name = "Run Script"; + name = "Thin Binary"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - C143E5EEC573FBD89B16A658 /* [CP] Check Pods Manifest.lock */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( ); + name = "Run Script"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; /* End PBXShellScriptBuildPhase section */ @@ -469,7 +469,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 531021BCFBF6DEA7A588EEFB /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 0FBB97D3B77C3F8ABBBA69D1 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -487,7 +487,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = FFE5027C7AD199E12A7AF98E /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 5220EC7DF66B6FF52474A86B /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -503,7 +503,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = D324E46E5A8253E05C3A901E /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 6641BE7C3FD295E85E2B1262 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/next-gen-ui/step_02_c/linux/CMakeLists.txt b/next-gen-ui/step_02_c/linux/CMakeLists.txt index ccbe56dd39..e49da8fe41 100644 --- a/next-gen-ui/step_02_c/linux/CMakeLists.txt +++ b/next-gen-ui/step_02_c/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/next-gen-ui/step_02_c/linux/runner/CMakeLists.txt b/next-gen-ui/step_02_c/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/next-gen-ui/step_02_c/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/next-gen-ui/step_02_c/linux/main.cc b/next-gen-ui/step_02_c/linux/runner/main.cc similarity index 100% rename from next-gen-ui/step_02_c/linux/main.cc rename to next-gen-ui/step_02_c/linux/runner/main.cc diff --git a/next-gen-ui/step_02_c/linux/my_application.cc b/next-gen-ui/step_02_c/linux/runner/my_application.cc similarity index 93% rename from next-gen-ui/step_02_c/linux/my_application.cc rename to next-gen-ui/step_02_c/linux/runner/my_application.cc index d5581db5c1..6fa9821b9c 100644 --- a/next-gen-ui/step_02_c/linux/my_application.cc +++ b/next-gen-ui/step_02_c/linux/runner/my_application.cc @@ -117,6 +117,12 @@ static void my_application_class_init(MyApplicationClass* klass) { static void my_application_init(MyApplication* self) {} MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + return MY_APPLICATION(g_object_new(my_application_get_type(), "application-id", APPLICATION_ID, "flags", G_APPLICATION_NON_UNIQUE, diff --git a/next-gen-ui/step_02_c/linux/my_application.h b/next-gen-ui/step_02_c/linux/runner/my_application.h similarity index 100% rename from next-gen-ui/step_02_c/linux/my_application.h rename to next-gen-ui/step_02_c/linux/runner/my_application.h diff --git a/next-gen-ui/step_02_c/macos/Runner.xcodeproj/project.pbxproj b/next-gen-ui/step_02_c/macos/Runner.xcodeproj/project.pbxproj index a260461a61..5ca8a3231e 100644 --- a/next-gen-ui/step_02_c/macos/Runner.xcodeproj/project.pbxproj +++ b/next-gen-ui/step_02_c/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ + 2E6B87224BF317E31F74B0D6 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FF5748F504BD5E56042DEADB /* Pods_RunnerTests.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 44BBBA76B13EEB94F9DCE170 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2984A5AD2129F6C671F00164 /* Pods_Runner.framework */; }; - 4E0858D90CA55751E7BE4898 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 39010BEDE01EF3B7F309CBE7 /* Pods_RunnerTests.framework */; }; + 56635C0EC97E7F426A37B2E0 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 70907F10D88B462804477CEC /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,13 +62,12 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 2984A5AD2129F6C671F00164 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 2CF773F4C2430EAC834646B3 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 1084579C46BDDCE9E7DF16AC /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 2D475486DFFA8C60E5710DB0 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; }; - 337BA55CC083EAE0C41E02E7 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 33CC10ED2044A3C60003C045 /* next_gen_ui.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = next_gen_ui.app; sourceTree = BUILT_PRODUCTS_DIR; }; 33CC10F02044A3C60003C045 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 33CC10F22044A3C60003C045 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = Runner/Assets.xcassets; sourceTree = ""; }; @@ -78,16 +77,17 @@ 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Debug.xcconfig"; sourceTree = ""; }; 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Release.xcconfig"; sourceTree = ""; }; 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = "Flutter-Generated.xcconfig"; path = "ephemeral/Flutter-Generated.xcconfig"; sourceTree = ""; }; - 33D3C1661150E5CF9FD9C336 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 39010BEDE01EF3B7F309CBE7 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 6B406084562E7BBF7435D2FF /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 70907F10D88B462804477CEC /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 7FDC8102767980E531E73AC5 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 812DEB8E378C986DF221D831 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 86295B0784C4F550CBE8BD69 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 949451BBF3DF607E13DBB265 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - A4F4B5072EE42AC6A44D036B /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + E57940CC1AE193EDBC7E60BC /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + FF5748F504BD5E56042DEADB /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 4E0858D90CA55751E7BE4898 /* Pods_RunnerTests.framework in Frameworks */, + 2E6B87224BF317E31F74B0D6 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,22 +103,22 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 44BBBA76B13EEB94F9DCE170 /* Pods_Runner.framework in Frameworks */, + 56635C0EC97E7F426A37B2E0 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 1C1096D0206D3CBABCC06686 /* Pods */ = { + 0EB950B6EBBA8562ED05E9C6 /* Pods */ = { isa = PBXGroup; children = ( - 2CF773F4C2430EAC834646B3 /* Pods-Runner.debug.xcconfig */, - 7FDC8102767980E531E73AC5 /* Pods-Runner.release.xcconfig */, - 6B406084562E7BBF7435D2FF /* Pods-Runner.profile.xcconfig */, - A4F4B5072EE42AC6A44D036B /* Pods-RunnerTests.debug.xcconfig */, - 33D3C1661150E5CF9FD9C336 /* Pods-RunnerTests.release.xcconfig */, - 337BA55CC083EAE0C41E02E7 /* Pods-RunnerTests.profile.xcconfig */, + 1084579C46BDDCE9E7DF16AC /* Pods-Runner.debug.xcconfig */, + 2D475486DFFA8C60E5710DB0 /* Pods-Runner.release.xcconfig */, + E57940CC1AE193EDBC7E60BC /* Pods-Runner.profile.xcconfig */, + 86295B0784C4F550CBE8BD69 /* Pods-RunnerTests.debug.xcconfig */, + 949451BBF3DF607E13DBB265 /* Pods-RunnerTests.release.xcconfig */, + 812DEB8E378C986DF221D831 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -151,7 +151,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 1C1096D0206D3CBABCC06686 /* Pods */, + 0EB950B6EBBA8562ED05E9C6 /* Pods */, ); sourceTree = ""; }; @@ -202,8 +202,8 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - 2984A5AD2129F6C671F00164 /* Pods_Runner.framework */, - 39010BEDE01EF3B7F309CBE7 /* Pods_RunnerTests.framework */, + 70907F10D88B462804477CEC /* Pods_Runner.framework */, + FF5748F504BD5E56042DEADB /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - FE0C7B1BBD5CA48F75CD6536 /* [CP] Check Pods Manifest.lock */, + 24CA264AC7C1AA37F685BC19 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - BF702552288C4603E192F687 /* [CP] Check Pods Manifest.lock */, + 9936C57FFCBF37419AE7561E /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 978AFB595B79A33D319A948F /* [CP] Embed Pods Frameworks */, + 038DC0986A46E5F2839BD12E /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,84 +323,84 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 3399D490228B24CF009A79C7 /* ShellScript */ = { + 038DC0986A46E5F2839BD12E /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - ); + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; }; - 33CC111E2044C6BF0003C045 /* ShellScript */ = { + 24CA264AC7C1AA37F685BC19 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - Flutter/ephemeral/FlutterInputs.xcfilelist, ); inputPaths = ( - Flutter/ephemeral/tripwire, + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - Flutter/ephemeral/FlutterOutputs.xcfilelist, ); outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - 978AFB595B79A33D319A948F /* [CP] Embed Pods Frameworks */ = { + 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + ); outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; + shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; }; - BF702552288C4603E192F687 /* [CP] Check Pods Manifest.lock */ = { + 33CC111E2044C6BF0003C045 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + Flutter/ephemeral/FlutterInputs.xcfilelist, ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", + Flutter/ephemeral/tripwire, ); - name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( + Flutter/ephemeral/FlutterOutputs.xcfilelist, ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - FE0C7B1BBD5CA48F75CD6536 /* [CP] Check Pods Manifest.lock */ = { + 9936C57FFCBF37419AE7561E /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -415,7 +415,7 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = A4F4B5072EE42AC6A44D036B /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 86295B0784C4F550CBE8BD69 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 33D3C1661150E5CF9FD9C336 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 949451BBF3DF607E13DBB265 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 337BA55CC083EAE0C41E02E7 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 812DEB8E378C986DF221D831 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/next-gen-ui/step_02_c/web/index.html b/next-gen-ui/step_02_c/web/index.html index ed2ea921e4..d0a2517e72 100644 --- a/next-gen-ui/step_02_c/web/index.html +++ b/next-gen-ui/step_02_c/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/next-gen-ui/step_03_a/ios/Runner.xcodeproj/project.pbxproj b/next-gen-ui/step_03_a/ios/Runner.xcodeproj/project.pbxproj index 43b8398d4f..8f047bdf00 100644 --- a/next-gen-ui/step_03_a/ios/Runner.xcodeproj/project.pbxproj +++ b/next-gen-ui/step_03_a/ios/Runner.xcodeproj/project.pbxproj @@ -11,11 +11,11 @@ 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; - 95B86EC706B280ECBF05B340 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F29266F85C81E223DE38826F /* Pods_RunnerTests.framework */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - E9B1620F2EF5AF6175681809 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DE20D8731F5AC68BA1712A5A /* Pods_Runner.framework */; }; + B62141185A2A64CE6AE671F2 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B1CF946366B840164A5B6A19 /* Pods_Runner.framework */; }; + B81AE38132A98A311F8F51B8 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 249FB81AECD9AE84FFA40AD0 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,51 +42,60 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 0FBB97D3B77C3F8ABBBA69D1 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 1065108C466C107C635700F4 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; + 249FB81AECD9AE84FFA40AD0 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 531021BCFBF6DEA7A588EEFB /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 5C244634881A8C4BD75C5C03 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 5220EC7DF66B6FF52474A86B /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 64F96334240D4715F67078C9 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 6641BE7C3FD295E85E2B1262 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 8094A5C0BD3F742D973F4EBB /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; + 9790F6561207E583E84D4FF9 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - D324E46E5A8253E05C3A901E /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - DC699C7AADC6A46B95166F6E /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - DE20D8731F5AC68BA1712A5A /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - F29266F85C81E223DE38826F /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - FFE5027C7AD199E12A7AF98E /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + B1CF946366B840164A5B6A19 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 344BA4708047A433A26140BD /* Frameworks */ = { + 97C146EB1CF9000F007C117D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 95B86EC706B280ECBF05B340 /* Pods_RunnerTests.framework in Frameworks */, + B62141185A2A64CE6AE671F2 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 97C146EB1CF9000F007C117D /* Frameworks */ = { + C266D94F39398FF0845062EB /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - E9B1620F2EF5AF6175681809 /* Pods_Runner.framework in Frameworks */, + B81AE38132A98A311F8F51B8 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 29779CA63CE39E764210D572 /* Frameworks */ = { + isa = PBXGroup; + children = ( + B1CF946366B840164A5B6A19 /* Pods_Runner.framework */, + 249FB81AECD9AE84FFA40AD0 /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; 331C8082294A63A400263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -95,15 +104,15 @@ path = RunnerTests; sourceTree = ""; }; - 6655F551DEE09BD8E2ABAAD2 /* Pods */ = { + 67CB01004931F5EAE1484002 /* Pods */ = { isa = PBXGroup; children = ( - 8094A5C0BD3F742D973F4EBB /* Pods-Runner.debug.xcconfig */, - 5C244634881A8C4BD75C5C03 /* Pods-Runner.release.xcconfig */, - DC699C7AADC6A46B95166F6E /* Pods-Runner.profile.xcconfig */, - 531021BCFBF6DEA7A588EEFB /* Pods-RunnerTests.debug.xcconfig */, - FFE5027C7AD199E12A7AF98E /* Pods-RunnerTests.release.xcconfig */, - D324E46E5A8253E05C3A901E /* Pods-RunnerTests.profile.xcconfig */, + 64F96334240D4715F67078C9 /* Pods-Runner.debug.xcconfig */, + 1065108C466C107C635700F4 /* Pods-Runner.release.xcconfig */, + 9790F6561207E583E84D4FF9 /* Pods-Runner.profile.xcconfig */, + 0FBB97D3B77C3F8ABBBA69D1 /* Pods-RunnerTests.debug.xcconfig */, + 5220EC7DF66B6FF52474A86B /* Pods-RunnerTests.release.xcconfig */, + 6641BE7C3FD295E85E2B1262 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -127,8 +136,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - 6655F551DEE09BD8E2ABAAD2 /* Pods */, - AB471AC81B5F3E3EAC08510D /* Frameworks */, + 67CB01004931F5EAE1484002 /* Pods */, + 29779CA63CE39E764210D572 /* Frameworks */, ); sourceTree = ""; }; @@ -156,15 +165,6 @@ path = Runner; sourceTree = ""; }; - AB471AC81B5F3E3EAC08510D /* Frameworks */ = { - isa = PBXGroup; - children = ( - DE20D8731F5AC68BA1712A5A /* Pods_Runner.framework */, - F29266F85C81E223DE38826F /* Pods_RunnerTests.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - C143E5EEC573FBD89B16A658 /* [CP] Check Pods Manifest.lock */, + 1A41435D909B4A5BA59DA804 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 344BA4708047A433A26140BD /* Frameworks */, + C266D94F39398FF0845062EB /* Frameworks */, ); buildRules = ( ); @@ -191,7 +191,7 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 3AAEDA8BA83E71CC34259A37 /* [CP] Check Pods Manifest.lock */, + 15FA0791F2F6E4DEC3602581 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, @@ -269,7 +269,7 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 3AAEDA8BA83E71CC34259A37 /* [CP] Check Pods Manifest.lock */ = { + 15FA0791F2F6E4DEC3602581 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -291,58 +291,58 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + 1A41435D909B4A5BA59DA804 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( - "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "Thin Binary"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); - name = "Run Script"; + name = "Thin Binary"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - C143E5EEC573FBD89B16A658 /* [CP] Check Pods Manifest.lock */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( ); + name = "Run Script"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; /* End PBXShellScriptBuildPhase section */ @@ -469,7 +469,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 531021BCFBF6DEA7A588EEFB /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 0FBB97D3B77C3F8ABBBA69D1 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -487,7 +487,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = FFE5027C7AD199E12A7AF98E /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 5220EC7DF66B6FF52474A86B /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -503,7 +503,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = D324E46E5A8253E05C3A901E /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 6641BE7C3FD295E85E2B1262 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/next-gen-ui/step_03_a/linux/CMakeLists.txt b/next-gen-ui/step_03_a/linux/CMakeLists.txt index ccbe56dd39..e49da8fe41 100644 --- a/next-gen-ui/step_03_a/linux/CMakeLists.txt +++ b/next-gen-ui/step_03_a/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/next-gen-ui/step_03_a/linux/my_application.cc b/next-gen-ui/step_03_a/linux/my_application.cc deleted file mode 100644 index d5581db5c1..0000000000 --- a/next-gen-ui/step_03_a/linux/my_application.cc +++ /dev/null @@ -1,124 +0,0 @@ -#include "my_application.h" - -#include -#ifdef GDK_WINDOWING_X11 -#include -#endif - -#include "flutter/generated_plugin_registrant.h" - -struct _MyApplication { - GtkApplication parent_instance; - char** dart_entrypoint_arguments; -}; - -G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) - -// Implements GApplication::activate. -static void my_application_activate(GApplication* application) { - MyApplication* self = MY_APPLICATION(application); - GtkWindow* window = - GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); - - // Use a header bar when running in GNOME as this is the common style used - // by applications and is the setup most users will be using (e.g. Ubuntu - // desktop). - // If running on X and not using GNOME then just use a traditional title bar - // in case the window manager does more exotic layout, e.g. tiling. - // If running on Wayland assume the header bar will work (may need changing - // if future cases occur). - gboolean use_header_bar = TRUE; -#ifdef GDK_WINDOWING_X11 - GdkScreen* screen = gtk_window_get_screen(window); - if (GDK_IS_X11_SCREEN(screen)) { - const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); - if (g_strcmp0(wm_name, "GNOME Shell") != 0) { - use_header_bar = FALSE; - } - } -#endif - if (use_header_bar) { - GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); - gtk_widget_show(GTK_WIDGET(header_bar)); - gtk_header_bar_set_title(header_bar, "next_gen_ui"); - gtk_header_bar_set_show_close_button(header_bar, TRUE); - gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); - } else { - gtk_window_set_title(window, "next_gen_ui"); - } - - gtk_window_set_default_size(window, 1280, 720); - gtk_widget_show(GTK_WIDGET(window)); - - g_autoptr(FlDartProject) project = fl_dart_project_new(); - fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); - - FlView* view = fl_view_new(project); - gtk_widget_show(GTK_WIDGET(view)); - gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); - - fl_register_plugins(FL_PLUGIN_REGISTRY(view)); - - gtk_widget_grab_focus(GTK_WIDGET(view)); -} - -// Implements GApplication::local_command_line. -static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { - MyApplication* self = MY_APPLICATION(application); - // Strip out the first argument as it is the binary name. - self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); - - g_autoptr(GError) error = nullptr; - if (!g_application_register(application, nullptr, &error)) { - g_warning("Failed to register: %s", error->message); - *exit_status = 1; - return TRUE; - } - - g_application_activate(application); - *exit_status = 0; - - return TRUE; -} - -// Implements GApplication::startup. -static void my_application_startup(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application startup. - - G_APPLICATION_CLASS(my_application_parent_class)->startup(application); -} - -// Implements GApplication::shutdown. -static void my_application_shutdown(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application shutdown. - - G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); -} - -// Implements GObject::dispose. -static void my_application_dispose(GObject* object) { - MyApplication* self = MY_APPLICATION(object); - g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); - G_OBJECT_CLASS(my_application_parent_class)->dispose(object); -} - -static void my_application_class_init(MyApplicationClass* klass) { - G_APPLICATION_CLASS(klass)->activate = my_application_activate; - G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; - G_APPLICATION_CLASS(klass)->startup = my_application_startup; - G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; - G_OBJECT_CLASS(klass)->dispose = my_application_dispose; -} - -static void my_application_init(MyApplication* self) {} - -MyApplication* my_application_new() { - return MY_APPLICATION(g_object_new(my_application_get_type(), - "application-id", APPLICATION_ID, - "flags", G_APPLICATION_NON_UNIQUE, - nullptr)); -} diff --git a/next-gen-ui/step_03_a/linux/runner/CMakeLists.txt b/next-gen-ui/step_03_a/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/next-gen-ui/step_03_a/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/next-gen-ui/step_03_a/linux/main.cc b/next-gen-ui/step_03_a/linux/runner/main.cc similarity index 100% rename from next-gen-ui/step_03_a/linux/main.cc rename to next-gen-ui/step_03_a/linux/runner/main.cc diff --git a/next-gen-ui/step_03_a/linux/runner/my_application.cc b/next-gen-ui/step_03_a/linux/runner/my_application.cc new file mode 100644 index 0000000000..6fa9821b9c --- /dev/null +++ b/next-gen-ui/step_03_a/linux/runner/my_application.cc @@ -0,0 +1,130 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "next_gen_ui"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "next_gen_ui"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/next-gen-ui/step_03_a/linux/my_application.h b/next-gen-ui/step_03_a/linux/runner/my_application.h similarity index 100% rename from next-gen-ui/step_03_a/linux/my_application.h rename to next-gen-ui/step_03_a/linux/runner/my_application.h diff --git a/next-gen-ui/step_03_a/macos/Runner.xcodeproj/project.pbxproj b/next-gen-ui/step_03_a/macos/Runner.xcodeproj/project.pbxproj index a260461a61..5ca8a3231e 100644 --- a/next-gen-ui/step_03_a/macos/Runner.xcodeproj/project.pbxproj +++ b/next-gen-ui/step_03_a/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ + 2E6B87224BF317E31F74B0D6 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FF5748F504BD5E56042DEADB /* Pods_RunnerTests.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 44BBBA76B13EEB94F9DCE170 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2984A5AD2129F6C671F00164 /* Pods_Runner.framework */; }; - 4E0858D90CA55751E7BE4898 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 39010BEDE01EF3B7F309CBE7 /* Pods_RunnerTests.framework */; }; + 56635C0EC97E7F426A37B2E0 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 70907F10D88B462804477CEC /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,13 +62,12 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 2984A5AD2129F6C671F00164 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 2CF773F4C2430EAC834646B3 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 1084579C46BDDCE9E7DF16AC /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 2D475486DFFA8C60E5710DB0 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; }; - 337BA55CC083EAE0C41E02E7 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 33CC10ED2044A3C60003C045 /* next_gen_ui.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = next_gen_ui.app; sourceTree = BUILT_PRODUCTS_DIR; }; 33CC10F02044A3C60003C045 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 33CC10F22044A3C60003C045 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = Runner/Assets.xcassets; sourceTree = ""; }; @@ -78,16 +77,17 @@ 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Debug.xcconfig"; sourceTree = ""; }; 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Release.xcconfig"; sourceTree = ""; }; 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = "Flutter-Generated.xcconfig"; path = "ephemeral/Flutter-Generated.xcconfig"; sourceTree = ""; }; - 33D3C1661150E5CF9FD9C336 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 39010BEDE01EF3B7F309CBE7 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 6B406084562E7BBF7435D2FF /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 70907F10D88B462804477CEC /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 7FDC8102767980E531E73AC5 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 812DEB8E378C986DF221D831 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 86295B0784C4F550CBE8BD69 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 949451BBF3DF607E13DBB265 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - A4F4B5072EE42AC6A44D036B /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + E57940CC1AE193EDBC7E60BC /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + FF5748F504BD5E56042DEADB /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 4E0858D90CA55751E7BE4898 /* Pods_RunnerTests.framework in Frameworks */, + 2E6B87224BF317E31F74B0D6 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,22 +103,22 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 44BBBA76B13EEB94F9DCE170 /* Pods_Runner.framework in Frameworks */, + 56635C0EC97E7F426A37B2E0 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 1C1096D0206D3CBABCC06686 /* Pods */ = { + 0EB950B6EBBA8562ED05E9C6 /* Pods */ = { isa = PBXGroup; children = ( - 2CF773F4C2430EAC834646B3 /* Pods-Runner.debug.xcconfig */, - 7FDC8102767980E531E73AC5 /* Pods-Runner.release.xcconfig */, - 6B406084562E7BBF7435D2FF /* Pods-Runner.profile.xcconfig */, - A4F4B5072EE42AC6A44D036B /* Pods-RunnerTests.debug.xcconfig */, - 33D3C1661150E5CF9FD9C336 /* Pods-RunnerTests.release.xcconfig */, - 337BA55CC083EAE0C41E02E7 /* Pods-RunnerTests.profile.xcconfig */, + 1084579C46BDDCE9E7DF16AC /* Pods-Runner.debug.xcconfig */, + 2D475486DFFA8C60E5710DB0 /* Pods-Runner.release.xcconfig */, + E57940CC1AE193EDBC7E60BC /* Pods-Runner.profile.xcconfig */, + 86295B0784C4F550CBE8BD69 /* Pods-RunnerTests.debug.xcconfig */, + 949451BBF3DF607E13DBB265 /* Pods-RunnerTests.release.xcconfig */, + 812DEB8E378C986DF221D831 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -151,7 +151,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 1C1096D0206D3CBABCC06686 /* Pods */, + 0EB950B6EBBA8562ED05E9C6 /* Pods */, ); sourceTree = ""; }; @@ -202,8 +202,8 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - 2984A5AD2129F6C671F00164 /* Pods_Runner.framework */, - 39010BEDE01EF3B7F309CBE7 /* Pods_RunnerTests.framework */, + 70907F10D88B462804477CEC /* Pods_Runner.framework */, + FF5748F504BD5E56042DEADB /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - FE0C7B1BBD5CA48F75CD6536 /* [CP] Check Pods Manifest.lock */, + 24CA264AC7C1AA37F685BC19 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - BF702552288C4603E192F687 /* [CP] Check Pods Manifest.lock */, + 9936C57FFCBF37419AE7561E /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 978AFB595B79A33D319A948F /* [CP] Embed Pods Frameworks */, + 038DC0986A46E5F2839BD12E /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,84 +323,84 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 3399D490228B24CF009A79C7 /* ShellScript */ = { + 038DC0986A46E5F2839BD12E /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - ); + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; }; - 33CC111E2044C6BF0003C045 /* ShellScript */ = { + 24CA264AC7C1AA37F685BC19 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - Flutter/ephemeral/FlutterInputs.xcfilelist, ); inputPaths = ( - Flutter/ephemeral/tripwire, + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - Flutter/ephemeral/FlutterOutputs.xcfilelist, ); outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - 978AFB595B79A33D319A948F /* [CP] Embed Pods Frameworks */ = { + 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + ); outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; + shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; }; - BF702552288C4603E192F687 /* [CP] Check Pods Manifest.lock */ = { + 33CC111E2044C6BF0003C045 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + Flutter/ephemeral/FlutterInputs.xcfilelist, ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", + Flutter/ephemeral/tripwire, ); - name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( + Flutter/ephemeral/FlutterOutputs.xcfilelist, ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - FE0C7B1BBD5CA48F75CD6536 /* [CP] Check Pods Manifest.lock */ = { + 9936C57FFCBF37419AE7561E /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -415,7 +415,7 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = A4F4B5072EE42AC6A44D036B /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 86295B0784C4F550CBE8BD69 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 33D3C1661150E5CF9FD9C336 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 949451BBF3DF607E13DBB265 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 337BA55CC083EAE0C41E02E7 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 812DEB8E378C986DF221D831 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/next-gen-ui/step_03_a/web/index.html b/next-gen-ui/step_03_a/web/index.html index ed2ea921e4..d0a2517e72 100644 --- a/next-gen-ui/step_03_a/web/index.html +++ b/next-gen-ui/step_03_a/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/next-gen-ui/step_03_b/ios/Runner.xcodeproj/project.pbxproj b/next-gen-ui/step_03_b/ios/Runner.xcodeproj/project.pbxproj index 43b8398d4f..8f047bdf00 100644 --- a/next-gen-ui/step_03_b/ios/Runner.xcodeproj/project.pbxproj +++ b/next-gen-ui/step_03_b/ios/Runner.xcodeproj/project.pbxproj @@ -11,11 +11,11 @@ 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; - 95B86EC706B280ECBF05B340 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F29266F85C81E223DE38826F /* Pods_RunnerTests.framework */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - E9B1620F2EF5AF6175681809 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DE20D8731F5AC68BA1712A5A /* Pods_Runner.framework */; }; + B62141185A2A64CE6AE671F2 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B1CF946366B840164A5B6A19 /* Pods_Runner.framework */; }; + B81AE38132A98A311F8F51B8 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 249FB81AECD9AE84FFA40AD0 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,51 +42,60 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 0FBB97D3B77C3F8ABBBA69D1 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 1065108C466C107C635700F4 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; + 249FB81AECD9AE84FFA40AD0 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 531021BCFBF6DEA7A588EEFB /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 5C244634881A8C4BD75C5C03 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 5220EC7DF66B6FF52474A86B /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 64F96334240D4715F67078C9 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 6641BE7C3FD295E85E2B1262 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 8094A5C0BD3F742D973F4EBB /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; + 9790F6561207E583E84D4FF9 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - D324E46E5A8253E05C3A901E /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - DC699C7AADC6A46B95166F6E /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - DE20D8731F5AC68BA1712A5A /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - F29266F85C81E223DE38826F /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - FFE5027C7AD199E12A7AF98E /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + B1CF946366B840164A5B6A19 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 344BA4708047A433A26140BD /* Frameworks */ = { + 97C146EB1CF9000F007C117D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 95B86EC706B280ECBF05B340 /* Pods_RunnerTests.framework in Frameworks */, + B62141185A2A64CE6AE671F2 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 97C146EB1CF9000F007C117D /* Frameworks */ = { + C266D94F39398FF0845062EB /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - E9B1620F2EF5AF6175681809 /* Pods_Runner.framework in Frameworks */, + B81AE38132A98A311F8F51B8 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 29779CA63CE39E764210D572 /* Frameworks */ = { + isa = PBXGroup; + children = ( + B1CF946366B840164A5B6A19 /* Pods_Runner.framework */, + 249FB81AECD9AE84FFA40AD0 /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; 331C8082294A63A400263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -95,15 +104,15 @@ path = RunnerTests; sourceTree = ""; }; - 6655F551DEE09BD8E2ABAAD2 /* Pods */ = { + 67CB01004931F5EAE1484002 /* Pods */ = { isa = PBXGroup; children = ( - 8094A5C0BD3F742D973F4EBB /* Pods-Runner.debug.xcconfig */, - 5C244634881A8C4BD75C5C03 /* Pods-Runner.release.xcconfig */, - DC699C7AADC6A46B95166F6E /* Pods-Runner.profile.xcconfig */, - 531021BCFBF6DEA7A588EEFB /* Pods-RunnerTests.debug.xcconfig */, - FFE5027C7AD199E12A7AF98E /* Pods-RunnerTests.release.xcconfig */, - D324E46E5A8253E05C3A901E /* Pods-RunnerTests.profile.xcconfig */, + 64F96334240D4715F67078C9 /* Pods-Runner.debug.xcconfig */, + 1065108C466C107C635700F4 /* Pods-Runner.release.xcconfig */, + 9790F6561207E583E84D4FF9 /* Pods-Runner.profile.xcconfig */, + 0FBB97D3B77C3F8ABBBA69D1 /* Pods-RunnerTests.debug.xcconfig */, + 5220EC7DF66B6FF52474A86B /* Pods-RunnerTests.release.xcconfig */, + 6641BE7C3FD295E85E2B1262 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -127,8 +136,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - 6655F551DEE09BD8E2ABAAD2 /* Pods */, - AB471AC81B5F3E3EAC08510D /* Frameworks */, + 67CB01004931F5EAE1484002 /* Pods */, + 29779CA63CE39E764210D572 /* Frameworks */, ); sourceTree = ""; }; @@ -156,15 +165,6 @@ path = Runner; sourceTree = ""; }; - AB471AC81B5F3E3EAC08510D /* Frameworks */ = { - isa = PBXGroup; - children = ( - DE20D8731F5AC68BA1712A5A /* Pods_Runner.framework */, - F29266F85C81E223DE38826F /* Pods_RunnerTests.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - C143E5EEC573FBD89B16A658 /* [CP] Check Pods Manifest.lock */, + 1A41435D909B4A5BA59DA804 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 344BA4708047A433A26140BD /* Frameworks */, + C266D94F39398FF0845062EB /* Frameworks */, ); buildRules = ( ); @@ -191,7 +191,7 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 3AAEDA8BA83E71CC34259A37 /* [CP] Check Pods Manifest.lock */, + 15FA0791F2F6E4DEC3602581 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, @@ -269,7 +269,7 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 3AAEDA8BA83E71CC34259A37 /* [CP] Check Pods Manifest.lock */ = { + 15FA0791F2F6E4DEC3602581 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -291,58 +291,58 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + 1A41435D909B4A5BA59DA804 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( - "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "Thin Binary"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); - name = "Run Script"; + name = "Thin Binary"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - C143E5EEC573FBD89B16A658 /* [CP] Check Pods Manifest.lock */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( ); + name = "Run Script"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; /* End PBXShellScriptBuildPhase section */ @@ -469,7 +469,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 531021BCFBF6DEA7A588EEFB /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 0FBB97D3B77C3F8ABBBA69D1 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -487,7 +487,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = FFE5027C7AD199E12A7AF98E /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 5220EC7DF66B6FF52474A86B /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -503,7 +503,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = D324E46E5A8253E05C3A901E /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 6641BE7C3FD295E85E2B1262 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/next-gen-ui/step_03_b/linux/CMakeLists.txt b/next-gen-ui/step_03_b/linux/CMakeLists.txt index ccbe56dd39..e49da8fe41 100644 --- a/next-gen-ui/step_03_b/linux/CMakeLists.txt +++ b/next-gen-ui/step_03_b/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/next-gen-ui/step_03_b/linux/my_application.cc b/next-gen-ui/step_03_b/linux/my_application.cc deleted file mode 100644 index d5581db5c1..0000000000 --- a/next-gen-ui/step_03_b/linux/my_application.cc +++ /dev/null @@ -1,124 +0,0 @@ -#include "my_application.h" - -#include -#ifdef GDK_WINDOWING_X11 -#include -#endif - -#include "flutter/generated_plugin_registrant.h" - -struct _MyApplication { - GtkApplication parent_instance; - char** dart_entrypoint_arguments; -}; - -G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) - -// Implements GApplication::activate. -static void my_application_activate(GApplication* application) { - MyApplication* self = MY_APPLICATION(application); - GtkWindow* window = - GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); - - // Use a header bar when running in GNOME as this is the common style used - // by applications and is the setup most users will be using (e.g. Ubuntu - // desktop). - // If running on X and not using GNOME then just use a traditional title bar - // in case the window manager does more exotic layout, e.g. tiling. - // If running on Wayland assume the header bar will work (may need changing - // if future cases occur). - gboolean use_header_bar = TRUE; -#ifdef GDK_WINDOWING_X11 - GdkScreen* screen = gtk_window_get_screen(window); - if (GDK_IS_X11_SCREEN(screen)) { - const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); - if (g_strcmp0(wm_name, "GNOME Shell") != 0) { - use_header_bar = FALSE; - } - } -#endif - if (use_header_bar) { - GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); - gtk_widget_show(GTK_WIDGET(header_bar)); - gtk_header_bar_set_title(header_bar, "next_gen_ui"); - gtk_header_bar_set_show_close_button(header_bar, TRUE); - gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); - } else { - gtk_window_set_title(window, "next_gen_ui"); - } - - gtk_window_set_default_size(window, 1280, 720); - gtk_widget_show(GTK_WIDGET(window)); - - g_autoptr(FlDartProject) project = fl_dart_project_new(); - fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); - - FlView* view = fl_view_new(project); - gtk_widget_show(GTK_WIDGET(view)); - gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); - - fl_register_plugins(FL_PLUGIN_REGISTRY(view)); - - gtk_widget_grab_focus(GTK_WIDGET(view)); -} - -// Implements GApplication::local_command_line. -static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { - MyApplication* self = MY_APPLICATION(application); - // Strip out the first argument as it is the binary name. - self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); - - g_autoptr(GError) error = nullptr; - if (!g_application_register(application, nullptr, &error)) { - g_warning("Failed to register: %s", error->message); - *exit_status = 1; - return TRUE; - } - - g_application_activate(application); - *exit_status = 0; - - return TRUE; -} - -// Implements GApplication::startup. -static void my_application_startup(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application startup. - - G_APPLICATION_CLASS(my_application_parent_class)->startup(application); -} - -// Implements GApplication::shutdown. -static void my_application_shutdown(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application shutdown. - - G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); -} - -// Implements GObject::dispose. -static void my_application_dispose(GObject* object) { - MyApplication* self = MY_APPLICATION(object); - g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); - G_OBJECT_CLASS(my_application_parent_class)->dispose(object); -} - -static void my_application_class_init(MyApplicationClass* klass) { - G_APPLICATION_CLASS(klass)->activate = my_application_activate; - G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; - G_APPLICATION_CLASS(klass)->startup = my_application_startup; - G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; - G_OBJECT_CLASS(klass)->dispose = my_application_dispose; -} - -static void my_application_init(MyApplication* self) {} - -MyApplication* my_application_new() { - return MY_APPLICATION(g_object_new(my_application_get_type(), - "application-id", APPLICATION_ID, - "flags", G_APPLICATION_NON_UNIQUE, - nullptr)); -} diff --git a/next-gen-ui/step_03_b/linux/runner/CMakeLists.txt b/next-gen-ui/step_03_b/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/next-gen-ui/step_03_b/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/next-gen-ui/step_03_b/linux/main.cc b/next-gen-ui/step_03_b/linux/runner/main.cc similarity index 100% rename from next-gen-ui/step_03_b/linux/main.cc rename to next-gen-ui/step_03_b/linux/runner/main.cc diff --git a/next-gen-ui/step_03_b/linux/runner/my_application.cc b/next-gen-ui/step_03_b/linux/runner/my_application.cc new file mode 100644 index 0000000000..6fa9821b9c --- /dev/null +++ b/next-gen-ui/step_03_b/linux/runner/my_application.cc @@ -0,0 +1,130 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "next_gen_ui"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "next_gen_ui"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/next-gen-ui/step_03_b/linux/my_application.h b/next-gen-ui/step_03_b/linux/runner/my_application.h similarity index 100% rename from next-gen-ui/step_03_b/linux/my_application.h rename to next-gen-ui/step_03_b/linux/runner/my_application.h diff --git a/next-gen-ui/step_03_b/macos/Runner.xcodeproj/project.pbxproj b/next-gen-ui/step_03_b/macos/Runner.xcodeproj/project.pbxproj index a260461a61..5ca8a3231e 100644 --- a/next-gen-ui/step_03_b/macos/Runner.xcodeproj/project.pbxproj +++ b/next-gen-ui/step_03_b/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ + 2E6B87224BF317E31F74B0D6 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FF5748F504BD5E56042DEADB /* Pods_RunnerTests.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 44BBBA76B13EEB94F9DCE170 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2984A5AD2129F6C671F00164 /* Pods_Runner.framework */; }; - 4E0858D90CA55751E7BE4898 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 39010BEDE01EF3B7F309CBE7 /* Pods_RunnerTests.framework */; }; + 56635C0EC97E7F426A37B2E0 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 70907F10D88B462804477CEC /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,13 +62,12 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 2984A5AD2129F6C671F00164 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 2CF773F4C2430EAC834646B3 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 1084579C46BDDCE9E7DF16AC /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 2D475486DFFA8C60E5710DB0 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; }; - 337BA55CC083EAE0C41E02E7 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 33CC10ED2044A3C60003C045 /* next_gen_ui.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = next_gen_ui.app; sourceTree = BUILT_PRODUCTS_DIR; }; 33CC10F02044A3C60003C045 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 33CC10F22044A3C60003C045 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = Runner/Assets.xcassets; sourceTree = ""; }; @@ -78,16 +77,17 @@ 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Debug.xcconfig"; sourceTree = ""; }; 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Release.xcconfig"; sourceTree = ""; }; 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = "Flutter-Generated.xcconfig"; path = "ephemeral/Flutter-Generated.xcconfig"; sourceTree = ""; }; - 33D3C1661150E5CF9FD9C336 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 39010BEDE01EF3B7F309CBE7 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 6B406084562E7BBF7435D2FF /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 70907F10D88B462804477CEC /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 7FDC8102767980E531E73AC5 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 812DEB8E378C986DF221D831 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 86295B0784C4F550CBE8BD69 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 949451BBF3DF607E13DBB265 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - A4F4B5072EE42AC6A44D036B /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + E57940CC1AE193EDBC7E60BC /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + FF5748F504BD5E56042DEADB /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 4E0858D90CA55751E7BE4898 /* Pods_RunnerTests.framework in Frameworks */, + 2E6B87224BF317E31F74B0D6 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,22 +103,22 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 44BBBA76B13EEB94F9DCE170 /* Pods_Runner.framework in Frameworks */, + 56635C0EC97E7F426A37B2E0 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 1C1096D0206D3CBABCC06686 /* Pods */ = { + 0EB950B6EBBA8562ED05E9C6 /* Pods */ = { isa = PBXGroup; children = ( - 2CF773F4C2430EAC834646B3 /* Pods-Runner.debug.xcconfig */, - 7FDC8102767980E531E73AC5 /* Pods-Runner.release.xcconfig */, - 6B406084562E7BBF7435D2FF /* Pods-Runner.profile.xcconfig */, - A4F4B5072EE42AC6A44D036B /* Pods-RunnerTests.debug.xcconfig */, - 33D3C1661150E5CF9FD9C336 /* Pods-RunnerTests.release.xcconfig */, - 337BA55CC083EAE0C41E02E7 /* Pods-RunnerTests.profile.xcconfig */, + 1084579C46BDDCE9E7DF16AC /* Pods-Runner.debug.xcconfig */, + 2D475486DFFA8C60E5710DB0 /* Pods-Runner.release.xcconfig */, + E57940CC1AE193EDBC7E60BC /* Pods-Runner.profile.xcconfig */, + 86295B0784C4F550CBE8BD69 /* Pods-RunnerTests.debug.xcconfig */, + 949451BBF3DF607E13DBB265 /* Pods-RunnerTests.release.xcconfig */, + 812DEB8E378C986DF221D831 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -151,7 +151,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 1C1096D0206D3CBABCC06686 /* Pods */, + 0EB950B6EBBA8562ED05E9C6 /* Pods */, ); sourceTree = ""; }; @@ -202,8 +202,8 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - 2984A5AD2129F6C671F00164 /* Pods_Runner.framework */, - 39010BEDE01EF3B7F309CBE7 /* Pods_RunnerTests.framework */, + 70907F10D88B462804477CEC /* Pods_Runner.framework */, + FF5748F504BD5E56042DEADB /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - FE0C7B1BBD5CA48F75CD6536 /* [CP] Check Pods Manifest.lock */, + 24CA264AC7C1AA37F685BC19 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - BF702552288C4603E192F687 /* [CP] Check Pods Manifest.lock */, + 9936C57FFCBF37419AE7561E /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 978AFB595B79A33D319A948F /* [CP] Embed Pods Frameworks */, + 038DC0986A46E5F2839BD12E /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,84 +323,84 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 3399D490228B24CF009A79C7 /* ShellScript */ = { + 038DC0986A46E5F2839BD12E /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - ); + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; }; - 33CC111E2044C6BF0003C045 /* ShellScript */ = { + 24CA264AC7C1AA37F685BC19 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - Flutter/ephemeral/FlutterInputs.xcfilelist, ); inputPaths = ( - Flutter/ephemeral/tripwire, + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - Flutter/ephemeral/FlutterOutputs.xcfilelist, ); outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - 978AFB595B79A33D319A948F /* [CP] Embed Pods Frameworks */ = { + 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + ); outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; + shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; }; - BF702552288C4603E192F687 /* [CP] Check Pods Manifest.lock */ = { + 33CC111E2044C6BF0003C045 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + Flutter/ephemeral/FlutterInputs.xcfilelist, ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", + Flutter/ephemeral/tripwire, ); - name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( + Flutter/ephemeral/FlutterOutputs.xcfilelist, ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - FE0C7B1BBD5CA48F75CD6536 /* [CP] Check Pods Manifest.lock */ = { + 9936C57FFCBF37419AE7561E /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -415,7 +415,7 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = A4F4B5072EE42AC6A44D036B /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 86295B0784C4F550CBE8BD69 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 33D3C1661150E5CF9FD9C336 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 949451BBF3DF607E13DBB265 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 337BA55CC083EAE0C41E02E7 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 812DEB8E378C986DF221D831 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/next-gen-ui/step_03_b/web/index.html b/next-gen-ui/step_03_b/web/index.html index ed2ea921e4..d0a2517e72 100644 --- a/next-gen-ui/step_03_b/web/index.html +++ b/next-gen-ui/step_03_b/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/next-gen-ui/step_03_c/ios/Runner.xcodeproj/project.pbxproj b/next-gen-ui/step_03_c/ios/Runner.xcodeproj/project.pbxproj index 43b8398d4f..8f047bdf00 100644 --- a/next-gen-ui/step_03_c/ios/Runner.xcodeproj/project.pbxproj +++ b/next-gen-ui/step_03_c/ios/Runner.xcodeproj/project.pbxproj @@ -11,11 +11,11 @@ 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; - 95B86EC706B280ECBF05B340 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F29266F85C81E223DE38826F /* Pods_RunnerTests.framework */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - E9B1620F2EF5AF6175681809 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DE20D8731F5AC68BA1712A5A /* Pods_Runner.framework */; }; + B62141185A2A64CE6AE671F2 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B1CF946366B840164A5B6A19 /* Pods_Runner.framework */; }; + B81AE38132A98A311F8F51B8 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 249FB81AECD9AE84FFA40AD0 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,51 +42,60 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 0FBB97D3B77C3F8ABBBA69D1 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 1065108C466C107C635700F4 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; + 249FB81AECD9AE84FFA40AD0 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 531021BCFBF6DEA7A588EEFB /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 5C244634881A8C4BD75C5C03 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 5220EC7DF66B6FF52474A86B /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 64F96334240D4715F67078C9 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 6641BE7C3FD295E85E2B1262 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 8094A5C0BD3F742D973F4EBB /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; + 9790F6561207E583E84D4FF9 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - D324E46E5A8253E05C3A901E /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - DC699C7AADC6A46B95166F6E /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - DE20D8731F5AC68BA1712A5A /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - F29266F85C81E223DE38826F /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - FFE5027C7AD199E12A7AF98E /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + B1CF946366B840164A5B6A19 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 344BA4708047A433A26140BD /* Frameworks */ = { + 97C146EB1CF9000F007C117D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 95B86EC706B280ECBF05B340 /* Pods_RunnerTests.framework in Frameworks */, + B62141185A2A64CE6AE671F2 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 97C146EB1CF9000F007C117D /* Frameworks */ = { + C266D94F39398FF0845062EB /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - E9B1620F2EF5AF6175681809 /* Pods_Runner.framework in Frameworks */, + B81AE38132A98A311F8F51B8 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 29779CA63CE39E764210D572 /* Frameworks */ = { + isa = PBXGroup; + children = ( + B1CF946366B840164A5B6A19 /* Pods_Runner.framework */, + 249FB81AECD9AE84FFA40AD0 /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; 331C8082294A63A400263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -95,15 +104,15 @@ path = RunnerTests; sourceTree = ""; }; - 6655F551DEE09BD8E2ABAAD2 /* Pods */ = { + 67CB01004931F5EAE1484002 /* Pods */ = { isa = PBXGroup; children = ( - 8094A5C0BD3F742D973F4EBB /* Pods-Runner.debug.xcconfig */, - 5C244634881A8C4BD75C5C03 /* Pods-Runner.release.xcconfig */, - DC699C7AADC6A46B95166F6E /* Pods-Runner.profile.xcconfig */, - 531021BCFBF6DEA7A588EEFB /* Pods-RunnerTests.debug.xcconfig */, - FFE5027C7AD199E12A7AF98E /* Pods-RunnerTests.release.xcconfig */, - D324E46E5A8253E05C3A901E /* Pods-RunnerTests.profile.xcconfig */, + 64F96334240D4715F67078C9 /* Pods-Runner.debug.xcconfig */, + 1065108C466C107C635700F4 /* Pods-Runner.release.xcconfig */, + 9790F6561207E583E84D4FF9 /* Pods-Runner.profile.xcconfig */, + 0FBB97D3B77C3F8ABBBA69D1 /* Pods-RunnerTests.debug.xcconfig */, + 5220EC7DF66B6FF52474A86B /* Pods-RunnerTests.release.xcconfig */, + 6641BE7C3FD295E85E2B1262 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -127,8 +136,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - 6655F551DEE09BD8E2ABAAD2 /* Pods */, - AB471AC81B5F3E3EAC08510D /* Frameworks */, + 67CB01004931F5EAE1484002 /* Pods */, + 29779CA63CE39E764210D572 /* Frameworks */, ); sourceTree = ""; }; @@ -156,15 +165,6 @@ path = Runner; sourceTree = ""; }; - AB471AC81B5F3E3EAC08510D /* Frameworks */ = { - isa = PBXGroup; - children = ( - DE20D8731F5AC68BA1712A5A /* Pods_Runner.framework */, - F29266F85C81E223DE38826F /* Pods_RunnerTests.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - C143E5EEC573FBD89B16A658 /* [CP] Check Pods Manifest.lock */, + 1A41435D909B4A5BA59DA804 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 344BA4708047A433A26140BD /* Frameworks */, + C266D94F39398FF0845062EB /* Frameworks */, ); buildRules = ( ); @@ -191,7 +191,7 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 3AAEDA8BA83E71CC34259A37 /* [CP] Check Pods Manifest.lock */, + 15FA0791F2F6E4DEC3602581 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, @@ -269,7 +269,7 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 3AAEDA8BA83E71CC34259A37 /* [CP] Check Pods Manifest.lock */ = { + 15FA0791F2F6E4DEC3602581 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -291,58 +291,58 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + 1A41435D909B4A5BA59DA804 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( - "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "Thin Binary"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); - name = "Run Script"; + name = "Thin Binary"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - C143E5EEC573FBD89B16A658 /* [CP] Check Pods Manifest.lock */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( ); + name = "Run Script"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; /* End PBXShellScriptBuildPhase section */ @@ -469,7 +469,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 531021BCFBF6DEA7A588EEFB /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 0FBB97D3B77C3F8ABBBA69D1 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -487,7 +487,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = FFE5027C7AD199E12A7AF98E /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 5220EC7DF66B6FF52474A86B /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -503,7 +503,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = D324E46E5A8253E05C3A901E /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 6641BE7C3FD295E85E2B1262 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/next-gen-ui/step_03_c/linux/CMakeLists.txt b/next-gen-ui/step_03_c/linux/CMakeLists.txt index ccbe56dd39..e49da8fe41 100644 --- a/next-gen-ui/step_03_c/linux/CMakeLists.txt +++ b/next-gen-ui/step_03_c/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/next-gen-ui/step_03_c/linux/my_application.cc b/next-gen-ui/step_03_c/linux/my_application.cc deleted file mode 100644 index d5581db5c1..0000000000 --- a/next-gen-ui/step_03_c/linux/my_application.cc +++ /dev/null @@ -1,124 +0,0 @@ -#include "my_application.h" - -#include -#ifdef GDK_WINDOWING_X11 -#include -#endif - -#include "flutter/generated_plugin_registrant.h" - -struct _MyApplication { - GtkApplication parent_instance; - char** dart_entrypoint_arguments; -}; - -G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) - -// Implements GApplication::activate. -static void my_application_activate(GApplication* application) { - MyApplication* self = MY_APPLICATION(application); - GtkWindow* window = - GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); - - // Use a header bar when running in GNOME as this is the common style used - // by applications and is the setup most users will be using (e.g. Ubuntu - // desktop). - // If running on X and not using GNOME then just use a traditional title bar - // in case the window manager does more exotic layout, e.g. tiling. - // If running on Wayland assume the header bar will work (may need changing - // if future cases occur). - gboolean use_header_bar = TRUE; -#ifdef GDK_WINDOWING_X11 - GdkScreen* screen = gtk_window_get_screen(window); - if (GDK_IS_X11_SCREEN(screen)) { - const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); - if (g_strcmp0(wm_name, "GNOME Shell") != 0) { - use_header_bar = FALSE; - } - } -#endif - if (use_header_bar) { - GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); - gtk_widget_show(GTK_WIDGET(header_bar)); - gtk_header_bar_set_title(header_bar, "next_gen_ui"); - gtk_header_bar_set_show_close_button(header_bar, TRUE); - gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); - } else { - gtk_window_set_title(window, "next_gen_ui"); - } - - gtk_window_set_default_size(window, 1280, 720); - gtk_widget_show(GTK_WIDGET(window)); - - g_autoptr(FlDartProject) project = fl_dart_project_new(); - fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); - - FlView* view = fl_view_new(project); - gtk_widget_show(GTK_WIDGET(view)); - gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); - - fl_register_plugins(FL_PLUGIN_REGISTRY(view)); - - gtk_widget_grab_focus(GTK_WIDGET(view)); -} - -// Implements GApplication::local_command_line. -static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { - MyApplication* self = MY_APPLICATION(application); - // Strip out the first argument as it is the binary name. - self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); - - g_autoptr(GError) error = nullptr; - if (!g_application_register(application, nullptr, &error)) { - g_warning("Failed to register: %s", error->message); - *exit_status = 1; - return TRUE; - } - - g_application_activate(application); - *exit_status = 0; - - return TRUE; -} - -// Implements GApplication::startup. -static void my_application_startup(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application startup. - - G_APPLICATION_CLASS(my_application_parent_class)->startup(application); -} - -// Implements GApplication::shutdown. -static void my_application_shutdown(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application shutdown. - - G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); -} - -// Implements GObject::dispose. -static void my_application_dispose(GObject* object) { - MyApplication* self = MY_APPLICATION(object); - g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); - G_OBJECT_CLASS(my_application_parent_class)->dispose(object); -} - -static void my_application_class_init(MyApplicationClass* klass) { - G_APPLICATION_CLASS(klass)->activate = my_application_activate; - G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; - G_APPLICATION_CLASS(klass)->startup = my_application_startup; - G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; - G_OBJECT_CLASS(klass)->dispose = my_application_dispose; -} - -static void my_application_init(MyApplication* self) {} - -MyApplication* my_application_new() { - return MY_APPLICATION(g_object_new(my_application_get_type(), - "application-id", APPLICATION_ID, - "flags", G_APPLICATION_NON_UNIQUE, - nullptr)); -} diff --git a/next-gen-ui/step_03_c/linux/runner/CMakeLists.txt b/next-gen-ui/step_03_c/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/next-gen-ui/step_03_c/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/next-gen-ui/step_03_c/linux/main.cc b/next-gen-ui/step_03_c/linux/runner/main.cc similarity index 100% rename from next-gen-ui/step_03_c/linux/main.cc rename to next-gen-ui/step_03_c/linux/runner/main.cc diff --git a/next-gen-ui/step_03_c/linux/runner/my_application.cc b/next-gen-ui/step_03_c/linux/runner/my_application.cc new file mode 100644 index 0000000000..6fa9821b9c --- /dev/null +++ b/next-gen-ui/step_03_c/linux/runner/my_application.cc @@ -0,0 +1,130 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "next_gen_ui"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "next_gen_ui"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/next-gen-ui/step_03_c/linux/my_application.h b/next-gen-ui/step_03_c/linux/runner/my_application.h similarity index 100% rename from next-gen-ui/step_03_c/linux/my_application.h rename to next-gen-ui/step_03_c/linux/runner/my_application.h diff --git a/next-gen-ui/step_03_c/macos/Runner.xcodeproj/project.pbxproj b/next-gen-ui/step_03_c/macos/Runner.xcodeproj/project.pbxproj index a260461a61..5ca8a3231e 100644 --- a/next-gen-ui/step_03_c/macos/Runner.xcodeproj/project.pbxproj +++ b/next-gen-ui/step_03_c/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ + 2E6B87224BF317E31F74B0D6 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FF5748F504BD5E56042DEADB /* Pods_RunnerTests.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 44BBBA76B13EEB94F9DCE170 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2984A5AD2129F6C671F00164 /* Pods_Runner.framework */; }; - 4E0858D90CA55751E7BE4898 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 39010BEDE01EF3B7F309CBE7 /* Pods_RunnerTests.framework */; }; + 56635C0EC97E7F426A37B2E0 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 70907F10D88B462804477CEC /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,13 +62,12 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 2984A5AD2129F6C671F00164 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 2CF773F4C2430EAC834646B3 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 1084579C46BDDCE9E7DF16AC /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 2D475486DFFA8C60E5710DB0 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; }; - 337BA55CC083EAE0C41E02E7 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 33CC10ED2044A3C60003C045 /* next_gen_ui.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = next_gen_ui.app; sourceTree = BUILT_PRODUCTS_DIR; }; 33CC10F02044A3C60003C045 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 33CC10F22044A3C60003C045 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = Runner/Assets.xcassets; sourceTree = ""; }; @@ -78,16 +77,17 @@ 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Debug.xcconfig"; sourceTree = ""; }; 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Release.xcconfig"; sourceTree = ""; }; 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = "Flutter-Generated.xcconfig"; path = "ephemeral/Flutter-Generated.xcconfig"; sourceTree = ""; }; - 33D3C1661150E5CF9FD9C336 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 39010BEDE01EF3B7F309CBE7 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 6B406084562E7BBF7435D2FF /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 70907F10D88B462804477CEC /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 7FDC8102767980E531E73AC5 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 812DEB8E378C986DF221D831 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 86295B0784C4F550CBE8BD69 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 949451BBF3DF607E13DBB265 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - A4F4B5072EE42AC6A44D036B /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + E57940CC1AE193EDBC7E60BC /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + FF5748F504BD5E56042DEADB /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 4E0858D90CA55751E7BE4898 /* Pods_RunnerTests.framework in Frameworks */, + 2E6B87224BF317E31F74B0D6 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,22 +103,22 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 44BBBA76B13EEB94F9DCE170 /* Pods_Runner.framework in Frameworks */, + 56635C0EC97E7F426A37B2E0 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 1C1096D0206D3CBABCC06686 /* Pods */ = { + 0EB950B6EBBA8562ED05E9C6 /* Pods */ = { isa = PBXGroup; children = ( - 2CF773F4C2430EAC834646B3 /* Pods-Runner.debug.xcconfig */, - 7FDC8102767980E531E73AC5 /* Pods-Runner.release.xcconfig */, - 6B406084562E7BBF7435D2FF /* Pods-Runner.profile.xcconfig */, - A4F4B5072EE42AC6A44D036B /* Pods-RunnerTests.debug.xcconfig */, - 33D3C1661150E5CF9FD9C336 /* Pods-RunnerTests.release.xcconfig */, - 337BA55CC083EAE0C41E02E7 /* Pods-RunnerTests.profile.xcconfig */, + 1084579C46BDDCE9E7DF16AC /* Pods-Runner.debug.xcconfig */, + 2D475486DFFA8C60E5710DB0 /* Pods-Runner.release.xcconfig */, + E57940CC1AE193EDBC7E60BC /* Pods-Runner.profile.xcconfig */, + 86295B0784C4F550CBE8BD69 /* Pods-RunnerTests.debug.xcconfig */, + 949451BBF3DF607E13DBB265 /* Pods-RunnerTests.release.xcconfig */, + 812DEB8E378C986DF221D831 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -151,7 +151,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 1C1096D0206D3CBABCC06686 /* Pods */, + 0EB950B6EBBA8562ED05E9C6 /* Pods */, ); sourceTree = ""; }; @@ -202,8 +202,8 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - 2984A5AD2129F6C671F00164 /* Pods_Runner.framework */, - 39010BEDE01EF3B7F309CBE7 /* Pods_RunnerTests.framework */, + 70907F10D88B462804477CEC /* Pods_Runner.framework */, + FF5748F504BD5E56042DEADB /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - FE0C7B1BBD5CA48F75CD6536 /* [CP] Check Pods Manifest.lock */, + 24CA264AC7C1AA37F685BC19 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - BF702552288C4603E192F687 /* [CP] Check Pods Manifest.lock */, + 9936C57FFCBF37419AE7561E /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 978AFB595B79A33D319A948F /* [CP] Embed Pods Frameworks */, + 038DC0986A46E5F2839BD12E /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,84 +323,84 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 3399D490228B24CF009A79C7 /* ShellScript */ = { + 038DC0986A46E5F2839BD12E /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - ); + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; }; - 33CC111E2044C6BF0003C045 /* ShellScript */ = { + 24CA264AC7C1AA37F685BC19 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - Flutter/ephemeral/FlutterInputs.xcfilelist, ); inputPaths = ( - Flutter/ephemeral/tripwire, + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - Flutter/ephemeral/FlutterOutputs.xcfilelist, ); outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - 978AFB595B79A33D319A948F /* [CP] Embed Pods Frameworks */ = { + 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + ); outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; + shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; }; - BF702552288C4603E192F687 /* [CP] Check Pods Manifest.lock */ = { + 33CC111E2044C6BF0003C045 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + Flutter/ephemeral/FlutterInputs.xcfilelist, ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", + Flutter/ephemeral/tripwire, ); - name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( + Flutter/ephemeral/FlutterOutputs.xcfilelist, ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - FE0C7B1BBD5CA48F75CD6536 /* [CP] Check Pods Manifest.lock */ = { + 9936C57FFCBF37419AE7561E /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -415,7 +415,7 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = A4F4B5072EE42AC6A44D036B /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 86295B0784C4F550CBE8BD69 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 33D3C1661150E5CF9FD9C336 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 949451BBF3DF607E13DBB265 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 337BA55CC083EAE0C41E02E7 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 812DEB8E378C986DF221D831 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/next-gen-ui/step_03_c/web/index.html b/next-gen-ui/step_03_c/web/index.html index ed2ea921e4..d0a2517e72 100644 --- a/next-gen-ui/step_03_c/web/index.html +++ b/next-gen-ui/step_03_c/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/next-gen-ui/step_04_a/ios/Runner.xcodeproj/project.pbxproj b/next-gen-ui/step_04_a/ios/Runner.xcodeproj/project.pbxproj index 43b8398d4f..8f047bdf00 100644 --- a/next-gen-ui/step_04_a/ios/Runner.xcodeproj/project.pbxproj +++ b/next-gen-ui/step_04_a/ios/Runner.xcodeproj/project.pbxproj @@ -11,11 +11,11 @@ 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; - 95B86EC706B280ECBF05B340 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F29266F85C81E223DE38826F /* Pods_RunnerTests.framework */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - E9B1620F2EF5AF6175681809 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DE20D8731F5AC68BA1712A5A /* Pods_Runner.framework */; }; + B62141185A2A64CE6AE671F2 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B1CF946366B840164A5B6A19 /* Pods_Runner.framework */; }; + B81AE38132A98A311F8F51B8 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 249FB81AECD9AE84FFA40AD0 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,51 +42,60 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 0FBB97D3B77C3F8ABBBA69D1 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 1065108C466C107C635700F4 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; + 249FB81AECD9AE84FFA40AD0 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 531021BCFBF6DEA7A588EEFB /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 5C244634881A8C4BD75C5C03 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 5220EC7DF66B6FF52474A86B /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 64F96334240D4715F67078C9 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 6641BE7C3FD295E85E2B1262 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 8094A5C0BD3F742D973F4EBB /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; + 9790F6561207E583E84D4FF9 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - D324E46E5A8253E05C3A901E /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - DC699C7AADC6A46B95166F6E /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - DE20D8731F5AC68BA1712A5A /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - F29266F85C81E223DE38826F /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - FFE5027C7AD199E12A7AF98E /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + B1CF946366B840164A5B6A19 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 344BA4708047A433A26140BD /* Frameworks */ = { + 97C146EB1CF9000F007C117D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 95B86EC706B280ECBF05B340 /* Pods_RunnerTests.framework in Frameworks */, + B62141185A2A64CE6AE671F2 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 97C146EB1CF9000F007C117D /* Frameworks */ = { + C266D94F39398FF0845062EB /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - E9B1620F2EF5AF6175681809 /* Pods_Runner.framework in Frameworks */, + B81AE38132A98A311F8F51B8 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 29779CA63CE39E764210D572 /* Frameworks */ = { + isa = PBXGroup; + children = ( + B1CF946366B840164A5B6A19 /* Pods_Runner.framework */, + 249FB81AECD9AE84FFA40AD0 /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; 331C8082294A63A400263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -95,15 +104,15 @@ path = RunnerTests; sourceTree = ""; }; - 6655F551DEE09BD8E2ABAAD2 /* Pods */ = { + 67CB01004931F5EAE1484002 /* Pods */ = { isa = PBXGroup; children = ( - 8094A5C0BD3F742D973F4EBB /* Pods-Runner.debug.xcconfig */, - 5C244634881A8C4BD75C5C03 /* Pods-Runner.release.xcconfig */, - DC699C7AADC6A46B95166F6E /* Pods-Runner.profile.xcconfig */, - 531021BCFBF6DEA7A588EEFB /* Pods-RunnerTests.debug.xcconfig */, - FFE5027C7AD199E12A7AF98E /* Pods-RunnerTests.release.xcconfig */, - D324E46E5A8253E05C3A901E /* Pods-RunnerTests.profile.xcconfig */, + 64F96334240D4715F67078C9 /* Pods-Runner.debug.xcconfig */, + 1065108C466C107C635700F4 /* Pods-Runner.release.xcconfig */, + 9790F6561207E583E84D4FF9 /* Pods-Runner.profile.xcconfig */, + 0FBB97D3B77C3F8ABBBA69D1 /* Pods-RunnerTests.debug.xcconfig */, + 5220EC7DF66B6FF52474A86B /* Pods-RunnerTests.release.xcconfig */, + 6641BE7C3FD295E85E2B1262 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -127,8 +136,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - 6655F551DEE09BD8E2ABAAD2 /* Pods */, - AB471AC81B5F3E3EAC08510D /* Frameworks */, + 67CB01004931F5EAE1484002 /* Pods */, + 29779CA63CE39E764210D572 /* Frameworks */, ); sourceTree = ""; }; @@ -156,15 +165,6 @@ path = Runner; sourceTree = ""; }; - AB471AC81B5F3E3EAC08510D /* Frameworks */ = { - isa = PBXGroup; - children = ( - DE20D8731F5AC68BA1712A5A /* Pods_Runner.framework */, - F29266F85C81E223DE38826F /* Pods_RunnerTests.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - C143E5EEC573FBD89B16A658 /* [CP] Check Pods Manifest.lock */, + 1A41435D909B4A5BA59DA804 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 344BA4708047A433A26140BD /* Frameworks */, + C266D94F39398FF0845062EB /* Frameworks */, ); buildRules = ( ); @@ -191,7 +191,7 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 3AAEDA8BA83E71CC34259A37 /* [CP] Check Pods Manifest.lock */, + 15FA0791F2F6E4DEC3602581 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, @@ -269,7 +269,7 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 3AAEDA8BA83E71CC34259A37 /* [CP] Check Pods Manifest.lock */ = { + 15FA0791F2F6E4DEC3602581 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -291,58 +291,58 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + 1A41435D909B4A5BA59DA804 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( - "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "Thin Binary"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); - name = "Run Script"; + name = "Thin Binary"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - C143E5EEC573FBD89B16A658 /* [CP] Check Pods Manifest.lock */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( ); + name = "Run Script"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; /* End PBXShellScriptBuildPhase section */ @@ -469,7 +469,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 531021BCFBF6DEA7A588EEFB /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 0FBB97D3B77C3F8ABBBA69D1 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -487,7 +487,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = FFE5027C7AD199E12A7AF98E /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 5220EC7DF66B6FF52474A86B /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -503,7 +503,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = D324E46E5A8253E05C3A901E /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 6641BE7C3FD295E85E2B1262 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/next-gen-ui/step_04_a/linux/CMakeLists.txt b/next-gen-ui/step_04_a/linux/CMakeLists.txt index ccbe56dd39..e49da8fe41 100644 --- a/next-gen-ui/step_04_a/linux/CMakeLists.txt +++ b/next-gen-ui/step_04_a/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/next-gen-ui/step_04_a/linux/my_application.cc b/next-gen-ui/step_04_a/linux/my_application.cc deleted file mode 100644 index d5581db5c1..0000000000 --- a/next-gen-ui/step_04_a/linux/my_application.cc +++ /dev/null @@ -1,124 +0,0 @@ -#include "my_application.h" - -#include -#ifdef GDK_WINDOWING_X11 -#include -#endif - -#include "flutter/generated_plugin_registrant.h" - -struct _MyApplication { - GtkApplication parent_instance; - char** dart_entrypoint_arguments; -}; - -G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) - -// Implements GApplication::activate. -static void my_application_activate(GApplication* application) { - MyApplication* self = MY_APPLICATION(application); - GtkWindow* window = - GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); - - // Use a header bar when running in GNOME as this is the common style used - // by applications and is the setup most users will be using (e.g. Ubuntu - // desktop). - // If running on X and not using GNOME then just use a traditional title bar - // in case the window manager does more exotic layout, e.g. tiling. - // If running on Wayland assume the header bar will work (may need changing - // if future cases occur). - gboolean use_header_bar = TRUE; -#ifdef GDK_WINDOWING_X11 - GdkScreen* screen = gtk_window_get_screen(window); - if (GDK_IS_X11_SCREEN(screen)) { - const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); - if (g_strcmp0(wm_name, "GNOME Shell") != 0) { - use_header_bar = FALSE; - } - } -#endif - if (use_header_bar) { - GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); - gtk_widget_show(GTK_WIDGET(header_bar)); - gtk_header_bar_set_title(header_bar, "next_gen_ui"); - gtk_header_bar_set_show_close_button(header_bar, TRUE); - gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); - } else { - gtk_window_set_title(window, "next_gen_ui"); - } - - gtk_window_set_default_size(window, 1280, 720); - gtk_widget_show(GTK_WIDGET(window)); - - g_autoptr(FlDartProject) project = fl_dart_project_new(); - fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); - - FlView* view = fl_view_new(project); - gtk_widget_show(GTK_WIDGET(view)); - gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); - - fl_register_plugins(FL_PLUGIN_REGISTRY(view)); - - gtk_widget_grab_focus(GTK_WIDGET(view)); -} - -// Implements GApplication::local_command_line. -static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { - MyApplication* self = MY_APPLICATION(application); - // Strip out the first argument as it is the binary name. - self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); - - g_autoptr(GError) error = nullptr; - if (!g_application_register(application, nullptr, &error)) { - g_warning("Failed to register: %s", error->message); - *exit_status = 1; - return TRUE; - } - - g_application_activate(application); - *exit_status = 0; - - return TRUE; -} - -// Implements GApplication::startup. -static void my_application_startup(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application startup. - - G_APPLICATION_CLASS(my_application_parent_class)->startup(application); -} - -// Implements GApplication::shutdown. -static void my_application_shutdown(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application shutdown. - - G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); -} - -// Implements GObject::dispose. -static void my_application_dispose(GObject* object) { - MyApplication* self = MY_APPLICATION(object); - g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); - G_OBJECT_CLASS(my_application_parent_class)->dispose(object); -} - -static void my_application_class_init(MyApplicationClass* klass) { - G_APPLICATION_CLASS(klass)->activate = my_application_activate; - G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; - G_APPLICATION_CLASS(klass)->startup = my_application_startup; - G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; - G_OBJECT_CLASS(klass)->dispose = my_application_dispose; -} - -static void my_application_init(MyApplication* self) {} - -MyApplication* my_application_new() { - return MY_APPLICATION(g_object_new(my_application_get_type(), - "application-id", APPLICATION_ID, - "flags", G_APPLICATION_NON_UNIQUE, - nullptr)); -} diff --git a/next-gen-ui/step_04_a/linux/runner/CMakeLists.txt b/next-gen-ui/step_04_a/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/next-gen-ui/step_04_a/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/next-gen-ui/step_04_a/linux/main.cc b/next-gen-ui/step_04_a/linux/runner/main.cc similarity index 100% rename from next-gen-ui/step_04_a/linux/main.cc rename to next-gen-ui/step_04_a/linux/runner/main.cc diff --git a/next-gen-ui/step_04_a/linux/runner/my_application.cc b/next-gen-ui/step_04_a/linux/runner/my_application.cc new file mode 100644 index 0000000000..6fa9821b9c --- /dev/null +++ b/next-gen-ui/step_04_a/linux/runner/my_application.cc @@ -0,0 +1,130 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "next_gen_ui"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "next_gen_ui"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/next-gen-ui/step_04_a/linux/my_application.h b/next-gen-ui/step_04_a/linux/runner/my_application.h similarity index 100% rename from next-gen-ui/step_04_a/linux/my_application.h rename to next-gen-ui/step_04_a/linux/runner/my_application.h diff --git a/next-gen-ui/step_04_a/macos/Runner.xcodeproj/project.pbxproj b/next-gen-ui/step_04_a/macos/Runner.xcodeproj/project.pbxproj index a260461a61..5ca8a3231e 100644 --- a/next-gen-ui/step_04_a/macos/Runner.xcodeproj/project.pbxproj +++ b/next-gen-ui/step_04_a/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ + 2E6B87224BF317E31F74B0D6 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FF5748F504BD5E56042DEADB /* Pods_RunnerTests.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 44BBBA76B13EEB94F9DCE170 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2984A5AD2129F6C671F00164 /* Pods_Runner.framework */; }; - 4E0858D90CA55751E7BE4898 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 39010BEDE01EF3B7F309CBE7 /* Pods_RunnerTests.framework */; }; + 56635C0EC97E7F426A37B2E0 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 70907F10D88B462804477CEC /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,13 +62,12 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 2984A5AD2129F6C671F00164 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 2CF773F4C2430EAC834646B3 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 1084579C46BDDCE9E7DF16AC /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 2D475486DFFA8C60E5710DB0 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; }; - 337BA55CC083EAE0C41E02E7 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 33CC10ED2044A3C60003C045 /* next_gen_ui.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = next_gen_ui.app; sourceTree = BUILT_PRODUCTS_DIR; }; 33CC10F02044A3C60003C045 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 33CC10F22044A3C60003C045 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = Runner/Assets.xcassets; sourceTree = ""; }; @@ -78,16 +77,17 @@ 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Debug.xcconfig"; sourceTree = ""; }; 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Release.xcconfig"; sourceTree = ""; }; 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = "Flutter-Generated.xcconfig"; path = "ephemeral/Flutter-Generated.xcconfig"; sourceTree = ""; }; - 33D3C1661150E5CF9FD9C336 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 39010BEDE01EF3B7F309CBE7 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 6B406084562E7BBF7435D2FF /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 70907F10D88B462804477CEC /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 7FDC8102767980E531E73AC5 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 812DEB8E378C986DF221D831 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 86295B0784C4F550CBE8BD69 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 949451BBF3DF607E13DBB265 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - A4F4B5072EE42AC6A44D036B /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + E57940CC1AE193EDBC7E60BC /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + FF5748F504BD5E56042DEADB /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 4E0858D90CA55751E7BE4898 /* Pods_RunnerTests.framework in Frameworks */, + 2E6B87224BF317E31F74B0D6 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,22 +103,22 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 44BBBA76B13EEB94F9DCE170 /* Pods_Runner.framework in Frameworks */, + 56635C0EC97E7F426A37B2E0 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 1C1096D0206D3CBABCC06686 /* Pods */ = { + 0EB950B6EBBA8562ED05E9C6 /* Pods */ = { isa = PBXGroup; children = ( - 2CF773F4C2430EAC834646B3 /* Pods-Runner.debug.xcconfig */, - 7FDC8102767980E531E73AC5 /* Pods-Runner.release.xcconfig */, - 6B406084562E7BBF7435D2FF /* Pods-Runner.profile.xcconfig */, - A4F4B5072EE42AC6A44D036B /* Pods-RunnerTests.debug.xcconfig */, - 33D3C1661150E5CF9FD9C336 /* Pods-RunnerTests.release.xcconfig */, - 337BA55CC083EAE0C41E02E7 /* Pods-RunnerTests.profile.xcconfig */, + 1084579C46BDDCE9E7DF16AC /* Pods-Runner.debug.xcconfig */, + 2D475486DFFA8C60E5710DB0 /* Pods-Runner.release.xcconfig */, + E57940CC1AE193EDBC7E60BC /* Pods-Runner.profile.xcconfig */, + 86295B0784C4F550CBE8BD69 /* Pods-RunnerTests.debug.xcconfig */, + 949451BBF3DF607E13DBB265 /* Pods-RunnerTests.release.xcconfig */, + 812DEB8E378C986DF221D831 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -151,7 +151,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 1C1096D0206D3CBABCC06686 /* Pods */, + 0EB950B6EBBA8562ED05E9C6 /* Pods */, ); sourceTree = ""; }; @@ -202,8 +202,8 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - 2984A5AD2129F6C671F00164 /* Pods_Runner.framework */, - 39010BEDE01EF3B7F309CBE7 /* Pods_RunnerTests.framework */, + 70907F10D88B462804477CEC /* Pods_Runner.framework */, + FF5748F504BD5E56042DEADB /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - FE0C7B1BBD5CA48F75CD6536 /* [CP] Check Pods Manifest.lock */, + 24CA264AC7C1AA37F685BC19 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - BF702552288C4603E192F687 /* [CP] Check Pods Manifest.lock */, + 9936C57FFCBF37419AE7561E /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 978AFB595B79A33D319A948F /* [CP] Embed Pods Frameworks */, + 038DC0986A46E5F2839BD12E /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,84 +323,84 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 3399D490228B24CF009A79C7 /* ShellScript */ = { + 038DC0986A46E5F2839BD12E /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - ); + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; }; - 33CC111E2044C6BF0003C045 /* ShellScript */ = { + 24CA264AC7C1AA37F685BC19 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - Flutter/ephemeral/FlutterInputs.xcfilelist, ); inputPaths = ( - Flutter/ephemeral/tripwire, + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - Flutter/ephemeral/FlutterOutputs.xcfilelist, ); outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - 978AFB595B79A33D319A948F /* [CP] Embed Pods Frameworks */ = { + 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + ); outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; + shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; }; - BF702552288C4603E192F687 /* [CP] Check Pods Manifest.lock */ = { + 33CC111E2044C6BF0003C045 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + Flutter/ephemeral/FlutterInputs.xcfilelist, ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", + Flutter/ephemeral/tripwire, ); - name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( + Flutter/ephemeral/FlutterOutputs.xcfilelist, ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - FE0C7B1BBD5CA48F75CD6536 /* [CP] Check Pods Manifest.lock */ = { + 9936C57FFCBF37419AE7561E /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -415,7 +415,7 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = A4F4B5072EE42AC6A44D036B /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 86295B0784C4F550CBE8BD69 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 33D3C1661150E5CF9FD9C336 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 949451BBF3DF607E13DBB265 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 337BA55CC083EAE0C41E02E7 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 812DEB8E378C986DF221D831 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/next-gen-ui/step_04_a/web/index.html b/next-gen-ui/step_04_a/web/index.html index ed2ea921e4..d0a2517e72 100644 --- a/next-gen-ui/step_04_a/web/index.html +++ b/next-gen-ui/step_04_a/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/next-gen-ui/step_04_b/ios/Runner.xcodeproj/project.pbxproj b/next-gen-ui/step_04_b/ios/Runner.xcodeproj/project.pbxproj index 43b8398d4f..8f047bdf00 100644 --- a/next-gen-ui/step_04_b/ios/Runner.xcodeproj/project.pbxproj +++ b/next-gen-ui/step_04_b/ios/Runner.xcodeproj/project.pbxproj @@ -11,11 +11,11 @@ 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; - 95B86EC706B280ECBF05B340 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F29266F85C81E223DE38826F /* Pods_RunnerTests.framework */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - E9B1620F2EF5AF6175681809 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DE20D8731F5AC68BA1712A5A /* Pods_Runner.framework */; }; + B62141185A2A64CE6AE671F2 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B1CF946366B840164A5B6A19 /* Pods_Runner.framework */; }; + B81AE38132A98A311F8F51B8 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 249FB81AECD9AE84FFA40AD0 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,51 +42,60 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 0FBB97D3B77C3F8ABBBA69D1 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 1065108C466C107C635700F4 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; + 249FB81AECD9AE84FFA40AD0 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 531021BCFBF6DEA7A588EEFB /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 5C244634881A8C4BD75C5C03 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 5220EC7DF66B6FF52474A86B /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 64F96334240D4715F67078C9 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 6641BE7C3FD295E85E2B1262 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 8094A5C0BD3F742D973F4EBB /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; + 9790F6561207E583E84D4FF9 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - D324E46E5A8253E05C3A901E /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - DC699C7AADC6A46B95166F6E /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - DE20D8731F5AC68BA1712A5A /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - F29266F85C81E223DE38826F /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - FFE5027C7AD199E12A7AF98E /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + B1CF946366B840164A5B6A19 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 344BA4708047A433A26140BD /* Frameworks */ = { + 97C146EB1CF9000F007C117D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 95B86EC706B280ECBF05B340 /* Pods_RunnerTests.framework in Frameworks */, + B62141185A2A64CE6AE671F2 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 97C146EB1CF9000F007C117D /* Frameworks */ = { + C266D94F39398FF0845062EB /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - E9B1620F2EF5AF6175681809 /* Pods_Runner.framework in Frameworks */, + B81AE38132A98A311F8F51B8 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 29779CA63CE39E764210D572 /* Frameworks */ = { + isa = PBXGroup; + children = ( + B1CF946366B840164A5B6A19 /* Pods_Runner.framework */, + 249FB81AECD9AE84FFA40AD0 /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; 331C8082294A63A400263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -95,15 +104,15 @@ path = RunnerTests; sourceTree = ""; }; - 6655F551DEE09BD8E2ABAAD2 /* Pods */ = { + 67CB01004931F5EAE1484002 /* Pods */ = { isa = PBXGroup; children = ( - 8094A5C0BD3F742D973F4EBB /* Pods-Runner.debug.xcconfig */, - 5C244634881A8C4BD75C5C03 /* Pods-Runner.release.xcconfig */, - DC699C7AADC6A46B95166F6E /* Pods-Runner.profile.xcconfig */, - 531021BCFBF6DEA7A588EEFB /* Pods-RunnerTests.debug.xcconfig */, - FFE5027C7AD199E12A7AF98E /* Pods-RunnerTests.release.xcconfig */, - D324E46E5A8253E05C3A901E /* Pods-RunnerTests.profile.xcconfig */, + 64F96334240D4715F67078C9 /* Pods-Runner.debug.xcconfig */, + 1065108C466C107C635700F4 /* Pods-Runner.release.xcconfig */, + 9790F6561207E583E84D4FF9 /* Pods-Runner.profile.xcconfig */, + 0FBB97D3B77C3F8ABBBA69D1 /* Pods-RunnerTests.debug.xcconfig */, + 5220EC7DF66B6FF52474A86B /* Pods-RunnerTests.release.xcconfig */, + 6641BE7C3FD295E85E2B1262 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -127,8 +136,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - 6655F551DEE09BD8E2ABAAD2 /* Pods */, - AB471AC81B5F3E3EAC08510D /* Frameworks */, + 67CB01004931F5EAE1484002 /* Pods */, + 29779CA63CE39E764210D572 /* Frameworks */, ); sourceTree = ""; }; @@ -156,15 +165,6 @@ path = Runner; sourceTree = ""; }; - AB471AC81B5F3E3EAC08510D /* Frameworks */ = { - isa = PBXGroup; - children = ( - DE20D8731F5AC68BA1712A5A /* Pods_Runner.framework */, - F29266F85C81E223DE38826F /* Pods_RunnerTests.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - C143E5EEC573FBD89B16A658 /* [CP] Check Pods Manifest.lock */, + 1A41435D909B4A5BA59DA804 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 344BA4708047A433A26140BD /* Frameworks */, + C266D94F39398FF0845062EB /* Frameworks */, ); buildRules = ( ); @@ -191,7 +191,7 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 3AAEDA8BA83E71CC34259A37 /* [CP] Check Pods Manifest.lock */, + 15FA0791F2F6E4DEC3602581 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, @@ -269,7 +269,7 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 3AAEDA8BA83E71CC34259A37 /* [CP] Check Pods Manifest.lock */ = { + 15FA0791F2F6E4DEC3602581 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -291,58 +291,58 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + 1A41435D909B4A5BA59DA804 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( - "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "Thin Binary"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); - name = "Run Script"; + name = "Thin Binary"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - C143E5EEC573FBD89B16A658 /* [CP] Check Pods Manifest.lock */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( ); + name = "Run Script"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; /* End PBXShellScriptBuildPhase section */ @@ -469,7 +469,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 531021BCFBF6DEA7A588EEFB /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 0FBB97D3B77C3F8ABBBA69D1 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -487,7 +487,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = FFE5027C7AD199E12A7AF98E /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 5220EC7DF66B6FF52474A86B /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -503,7 +503,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = D324E46E5A8253E05C3A901E /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 6641BE7C3FD295E85E2B1262 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/next-gen-ui/step_04_b/linux/CMakeLists.txt b/next-gen-ui/step_04_b/linux/CMakeLists.txt index ccbe56dd39..e49da8fe41 100644 --- a/next-gen-ui/step_04_b/linux/CMakeLists.txt +++ b/next-gen-ui/step_04_b/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/next-gen-ui/step_04_b/linux/my_application.cc b/next-gen-ui/step_04_b/linux/my_application.cc deleted file mode 100644 index d5581db5c1..0000000000 --- a/next-gen-ui/step_04_b/linux/my_application.cc +++ /dev/null @@ -1,124 +0,0 @@ -#include "my_application.h" - -#include -#ifdef GDK_WINDOWING_X11 -#include -#endif - -#include "flutter/generated_plugin_registrant.h" - -struct _MyApplication { - GtkApplication parent_instance; - char** dart_entrypoint_arguments; -}; - -G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) - -// Implements GApplication::activate. -static void my_application_activate(GApplication* application) { - MyApplication* self = MY_APPLICATION(application); - GtkWindow* window = - GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); - - // Use a header bar when running in GNOME as this is the common style used - // by applications and is the setup most users will be using (e.g. Ubuntu - // desktop). - // If running on X and not using GNOME then just use a traditional title bar - // in case the window manager does more exotic layout, e.g. tiling. - // If running on Wayland assume the header bar will work (may need changing - // if future cases occur). - gboolean use_header_bar = TRUE; -#ifdef GDK_WINDOWING_X11 - GdkScreen* screen = gtk_window_get_screen(window); - if (GDK_IS_X11_SCREEN(screen)) { - const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); - if (g_strcmp0(wm_name, "GNOME Shell") != 0) { - use_header_bar = FALSE; - } - } -#endif - if (use_header_bar) { - GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); - gtk_widget_show(GTK_WIDGET(header_bar)); - gtk_header_bar_set_title(header_bar, "next_gen_ui"); - gtk_header_bar_set_show_close_button(header_bar, TRUE); - gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); - } else { - gtk_window_set_title(window, "next_gen_ui"); - } - - gtk_window_set_default_size(window, 1280, 720); - gtk_widget_show(GTK_WIDGET(window)); - - g_autoptr(FlDartProject) project = fl_dart_project_new(); - fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); - - FlView* view = fl_view_new(project); - gtk_widget_show(GTK_WIDGET(view)); - gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); - - fl_register_plugins(FL_PLUGIN_REGISTRY(view)); - - gtk_widget_grab_focus(GTK_WIDGET(view)); -} - -// Implements GApplication::local_command_line. -static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { - MyApplication* self = MY_APPLICATION(application); - // Strip out the first argument as it is the binary name. - self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); - - g_autoptr(GError) error = nullptr; - if (!g_application_register(application, nullptr, &error)) { - g_warning("Failed to register: %s", error->message); - *exit_status = 1; - return TRUE; - } - - g_application_activate(application); - *exit_status = 0; - - return TRUE; -} - -// Implements GApplication::startup. -static void my_application_startup(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application startup. - - G_APPLICATION_CLASS(my_application_parent_class)->startup(application); -} - -// Implements GApplication::shutdown. -static void my_application_shutdown(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application shutdown. - - G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); -} - -// Implements GObject::dispose. -static void my_application_dispose(GObject* object) { - MyApplication* self = MY_APPLICATION(object); - g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); - G_OBJECT_CLASS(my_application_parent_class)->dispose(object); -} - -static void my_application_class_init(MyApplicationClass* klass) { - G_APPLICATION_CLASS(klass)->activate = my_application_activate; - G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; - G_APPLICATION_CLASS(klass)->startup = my_application_startup; - G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; - G_OBJECT_CLASS(klass)->dispose = my_application_dispose; -} - -static void my_application_init(MyApplication* self) {} - -MyApplication* my_application_new() { - return MY_APPLICATION(g_object_new(my_application_get_type(), - "application-id", APPLICATION_ID, - "flags", G_APPLICATION_NON_UNIQUE, - nullptr)); -} diff --git a/next-gen-ui/step_04_b/linux/runner/CMakeLists.txt b/next-gen-ui/step_04_b/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/next-gen-ui/step_04_b/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/next-gen-ui/step_04_b/linux/main.cc b/next-gen-ui/step_04_b/linux/runner/main.cc similarity index 100% rename from next-gen-ui/step_04_b/linux/main.cc rename to next-gen-ui/step_04_b/linux/runner/main.cc diff --git a/next-gen-ui/step_04_b/linux/runner/my_application.cc b/next-gen-ui/step_04_b/linux/runner/my_application.cc new file mode 100644 index 0000000000..6fa9821b9c --- /dev/null +++ b/next-gen-ui/step_04_b/linux/runner/my_application.cc @@ -0,0 +1,130 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "next_gen_ui"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "next_gen_ui"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/next-gen-ui/step_04_b/linux/my_application.h b/next-gen-ui/step_04_b/linux/runner/my_application.h similarity index 100% rename from next-gen-ui/step_04_b/linux/my_application.h rename to next-gen-ui/step_04_b/linux/runner/my_application.h diff --git a/next-gen-ui/step_04_b/macos/Runner.xcodeproj/project.pbxproj b/next-gen-ui/step_04_b/macos/Runner.xcodeproj/project.pbxproj index a260461a61..5ca8a3231e 100644 --- a/next-gen-ui/step_04_b/macos/Runner.xcodeproj/project.pbxproj +++ b/next-gen-ui/step_04_b/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ + 2E6B87224BF317E31F74B0D6 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FF5748F504BD5E56042DEADB /* Pods_RunnerTests.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 44BBBA76B13EEB94F9DCE170 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2984A5AD2129F6C671F00164 /* Pods_Runner.framework */; }; - 4E0858D90CA55751E7BE4898 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 39010BEDE01EF3B7F309CBE7 /* Pods_RunnerTests.framework */; }; + 56635C0EC97E7F426A37B2E0 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 70907F10D88B462804477CEC /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,13 +62,12 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 2984A5AD2129F6C671F00164 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 2CF773F4C2430EAC834646B3 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 1084579C46BDDCE9E7DF16AC /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 2D475486DFFA8C60E5710DB0 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; }; - 337BA55CC083EAE0C41E02E7 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 33CC10ED2044A3C60003C045 /* next_gen_ui.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = next_gen_ui.app; sourceTree = BUILT_PRODUCTS_DIR; }; 33CC10F02044A3C60003C045 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 33CC10F22044A3C60003C045 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = Runner/Assets.xcassets; sourceTree = ""; }; @@ -78,16 +77,17 @@ 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Debug.xcconfig"; sourceTree = ""; }; 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Release.xcconfig"; sourceTree = ""; }; 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = "Flutter-Generated.xcconfig"; path = "ephemeral/Flutter-Generated.xcconfig"; sourceTree = ""; }; - 33D3C1661150E5CF9FD9C336 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 39010BEDE01EF3B7F309CBE7 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 6B406084562E7BBF7435D2FF /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 70907F10D88B462804477CEC /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 7FDC8102767980E531E73AC5 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 812DEB8E378C986DF221D831 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 86295B0784C4F550CBE8BD69 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 949451BBF3DF607E13DBB265 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - A4F4B5072EE42AC6A44D036B /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + E57940CC1AE193EDBC7E60BC /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + FF5748F504BD5E56042DEADB /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 4E0858D90CA55751E7BE4898 /* Pods_RunnerTests.framework in Frameworks */, + 2E6B87224BF317E31F74B0D6 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,22 +103,22 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 44BBBA76B13EEB94F9DCE170 /* Pods_Runner.framework in Frameworks */, + 56635C0EC97E7F426A37B2E0 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 1C1096D0206D3CBABCC06686 /* Pods */ = { + 0EB950B6EBBA8562ED05E9C6 /* Pods */ = { isa = PBXGroup; children = ( - 2CF773F4C2430EAC834646B3 /* Pods-Runner.debug.xcconfig */, - 7FDC8102767980E531E73AC5 /* Pods-Runner.release.xcconfig */, - 6B406084562E7BBF7435D2FF /* Pods-Runner.profile.xcconfig */, - A4F4B5072EE42AC6A44D036B /* Pods-RunnerTests.debug.xcconfig */, - 33D3C1661150E5CF9FD9C336 /* Pods-RunnerTests.release.xcconfig */, - 337BA55CC083EAE0C41E02E7 /* Pods-RunnerTests.profile.xcconfig */, + 1084579C46BDDCE9E7DF16AC /* Pods-Runner.debug.xcconfig */, + 2D475486DFFA8C60E5710DB0 /* Pods-Runner.release.xcconfig */, + E57940CC1AE193EDBC7E60BC /* Pods-Runner.profile.xcconfig */, + 86295B0784C4F550CBE8BD69 /* Pods-RunnerTests.debug.xcconfig */, + 949451BBF3DF607E13DBB265 /* Pods-RunnerTests.release.xcconfig */, + 812DEB8E378C986DF221D831 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -151,7 +151,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 1C1096D0206D3CBABCC06686 /* Pods */, + 0EB950B6EBBA8562ED05E9C6 /* Pods */, ); sourceTree = ""; }; @@ -202,8 +202,8 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - 2984A5AD2129F6C671F00164 /* Pods_Runner.framework */, - 39010BEDE01EF3B7F309CBE7 /* Pods_RunnerTests.framework */, + 70907F10D88B462804477CEC /* Pods_Runner.framework */, + FF5748F504BD5E56042DEADB /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - FE0C7B1BBD5CA48F75CD6536 /* [CP] Check Pods Manifest.lock */, + 24CA264AC7C1AA37F685BC19 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - BF702552288C4603E192F687 /* [CP] Check Pods Manifest.lock */, + 9936C57FFCBF37419AE7561E /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 978AFB595B79A33D319A948F /* [CP] Embed Pods Frameworks */, + 038DC0986A46E5F2839BD12E /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,84 +323,84 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 3399D490228B24CF009A79C7 /* ShellScript */ = { + 038DC0986A46E5F2839BD12E /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - ); + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; }; - 33CC111E2044C6BF0003C045 /* ShellScript */ = { + 24CA264AC7C1AA37F685BC19 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - Flutter/ephemeral/FlutterInputs.xcfilelist, ); inputPaths = ( - Flutter/ephemeral/tripwire, + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - Flutter/ephemeral/FlutterOutputs.xcfilelist, ); outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - 978AFB595B79A33D319A948F /* [CP] Embed Pods Frameworks */ = { + 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + ); outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; + shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; }; - BF702552288C4603E192F687 /* [CP] Check Pods Manifest.lock */ = { + 33CC111E2044C6BF0003C045 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + Flutter/ephemeral/FlutterInputs.xcfilelist, ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", + Flutter/ephemeral/tripwire, ); - name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( + Flutter/ephemeral/FlutterOutputs.xcfilelist, ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - FE0C7B1BBD5CA48F75CD6536 /* [CP] Check Pods Manifest.lock */ = { + 9936C57FFCBF37419AE7561E /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -415,7 +415,7 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = A4F4B5072EE42AC6A44D036B /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 86295B0784C4F550CBE8BD69 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 33D3C1661150E5CF9FD9C336 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 949451BBF3DF607E13DBB265 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 337BA55CC083EAE0C41E02E7 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 812DEB8E378C986DF221D831 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/next-gen-ui/step_04_b/web/index.html b/next-gen-ui/step_04_b/web/index.html index ed2ea921e4..d0a2517e72 100644 --- a/next-gen-ui/step_04_b/web/index.html +++ b/next-gen-ui/step_04_b/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/next-gen-ui/step_04_c/ios/Runner.xcodeproj/project.pbxproj b/next-gen-ui/step_04_c/ios/Runner.xcodeproj/project.pbxproj index 43b8398d4f..8f047bdf00 100644 --- a/next-gen-ui/step_04_c/ios/Runner.xcodeproj/project.pbxproj +++ b/next-gen-ui/step_04_c/ios/Runner.xcodeproj/project.pbxproj @@ -11,11 +11,11 @@ 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; - 95B86EC706B280ECBF05B340 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F29266F85C81E223DE38826F /* Pods_RunnerTests.framework */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - E9B1620F2EF5AF6175681809 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DE20D8731F5AC68BA1712A5A /* Pods_Runner.framework */; }; + B62141185A2A64CE6AE671F2 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B1CF946366B840164A5B6A19 /* Pods_Runner.framework */; }; + B81AE38132A98A311F8F51B8 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 249FB81AECD9AE84FFA40AD0 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,51 +42,60 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 0FBB97D3B77C3F8ABBBA69D1 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 1065108C466C107C635700F4 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; + 249FB81AECD9AE84FFA40AD0 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 531021BCFBF6DEA7A588EEFB /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 5C244634881A8C4BD75C5C03 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 5220EC7DF66B6FF52474A86B /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 64F96334240D4715F67078C9 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 6641BE7C3FD295E85E2B1262 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 8094A5C0BD3F742D973F4EBB /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; + 9790F6561207E583E84D4FF9 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - D324E46E5A8253E05C3A901E /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - DC699C7AADC6A46B95166F6E /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - DE20D8731F5AC68BA1712A5A /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - F29266F85C81E223DE38826F /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - FFE5027C7AD199E12A7AF98E /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + B1CF946366B840164A5B6A19 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 344BA4708047A433A26140BD /* Frameworks */ = { + 97C146EB1CF9000F007C117D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 95B86EC706B280ECBF05B340 /* Pods_RunnerTests.framework in Frameworks */, + B62141185A2A64CE6AE671F2 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 97C146EB1CF9000F007C117D /* Frameworks */ = { + C266D94F39398FF0845062EB /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - E9B1620F2EF5AF6175681809 /* Pods_Runner.framework in Frameworks */, + B81AE38132A98A311F8F51B8 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 29779CA63CE39E764210D572 /* Frameworks */ = { + isa = PBXGroup; + children = ( + B1CF946366B840164A5B6A19 /* Pods_Runner.framework */, + 249FB81AECD9AE84FFA40AD0 /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; 331C8082294A63A400263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -95,15 +104,15 @@ path = RunnerTests; sourceTree = ""; }; - 6655F551DEE09BD8E2ABAAD2 /* Pods */ = { + 67CB01004931F5EAE1484002 /* Pods */ = { isa = PBXGroup; children = ( - 8094A5C0BD3F742D973F4EBB /* Pods-Runner.debug.xcconfig */, - 5C244634881A8C4BD75C5C03 /* Pods-Runner.release.xcconfig */, - DC699C7AADC6A46B95166F6E /* Pods-Runner.profile.xcconfig */, - 531021BCFBF6DEA7A588EEFB /* Pods-RunnerTests.debug.xcconfig */, - FFE5027C7AD199E12A7AF98E /* Pods-RunnerTests.release.xcconfig */, - D324E46E5A8253E05C3A901E /* Pods-RunnerTests.profile.xcconfig */, + 64F96334240D4715F67078C9 /* Pods-Runner.debug.xcconfig */, + 1065108C466C107C635700F4 /* Pods-Runner.release.xcconfig */, + 9790F6561207E583E84D4FF9 /* Pods-Runner.profile.xcconfig */, + 0FBB97D3B77C3F8ABBBA69D1 /* Pods-RunnerTests.debug.xcconfig */, + 5220EC7DF66B6FF52474A86B /* Pods-RunnerTests.release.xcconfig */, + 6641BE7C3FD295E85E2B1262 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -127,8 +136,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - 6655F551DEE09BD8E2ABAAD2 /* Pods */, - AB471AC81B5F3E3EAC08510D /* Frameworks */, + 67CB01004931F5EAE1484002 /* Pods */, + 29779CA63CE39E764210D572 /* Frameworks */, ); sourceTree = ""; }; @@ -156,15 +165,6 @@ path = Runner; sourceTree = ""; }; - AB471AC81B5F3E3EAC08510D /* Frameworks */ = { - isa = PBXGroup; - children = ( - DE20D8731F5AC68BA1712A5A /* Pods_Runner.framework */, - F29266F85C81E223DE38826F /* Pods_RunnerTests.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - C143E5EEC573FBD89B16A658 /* [CP] Check Pods Manifest.lock */, + 1A41435D909B4A5BA59DA804 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 344BA4708047A433A26140BD /* Frameworks */, + C266D94F39398FF0845062EB /* Frameworks */, ); buildRules = ( ); @@ -191,7 +191,7 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 3AAEDA8BA83E71CC34259A37 /* [CP] Check Pods Manifest.lock */, + 15FA0791F2F6E4DEC3602581 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, @@ -269,7 +269,7 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 3AAEDA8BA83E71CC34259A37 /* [CP] Check Pods Manifest.lock */ = { + 15FA0791F2F6E4DEC3602581 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -291,58 +291,58 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + 1A41435D909B4A5BA59DA804 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( - "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "Thin Binary"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); - name = "Run Script"; + name = "Thin Binary"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - C143E5EEC573FBD89B16A658 /* [CP] Check Pods Manifest.lock */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( ); + name = "Run Script"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; /* End PBXShellScriptBuildPhase section */ @@ -469,7 +469,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 531021BCFBF6DEA7A588EEFB /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 0FBB97D3B77C3F8ABBBA69D1 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -487,7 +487,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = FFE5027C7AD199E12A7AF98E /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 5220EC7DF66B6FF52474A86B /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -503,7 +503,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = D324E46E5A8253E05C3A901E /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 6641BE7C3FD295E85E2B1262 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/next-gen-ui/step_04_c/linux/CMakeLists.txt b/next-gen-ui/step_04_c/linux/CMakeLists.txt index ccbe56dd39..e49da8fe41 100644 --- a/next-gen-ui/step_04_c/linux/CMakeLists.txt +++ b/next-gen-ui/step_04_c/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/next-gen-ui/step_04_c/linux/my_application.cc b/next-gen-ui/step_04_c/linux/my_application.cc deleted file mode 100644 index d5581db5c1..0000000000 --- a/next-gen-ui/step_04_c/linux/my_application.cc +++ /dev/null @@ -1,124 +0,0 @@ -#include "my_application.h" - -#include -#ifdef GDK_WINDOWING_X11 -#include -#endif - -#include "flutter/generated_plugin_registrant.h" - -struct _MyApplication { - GtkApplication parent_instance; - char** dart_entrypoint_arguments; -}; - -G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) - -// Implements GApplication::activate. -static void my_application_activate(GApplication* application) { - MyApplication* self = MY_APPLICATION(application); - GtkWindow* window = - GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); - - // Use a header bar when running in GNOME as this is the common style used - // by applications and is the setup most users will be using (e.g. Ubuntu - // desktop). - // If running on X and not using GNOME then just use a traditional title bar - // in case the window manager does more exotic layout, e.g. tiling. - // If running on Wayland assume the header bar will work (may need changing - // if future cases occur). - gboolean use_header_bar = TRUE; -#ifdef GDK_WINDOWING_X11 - GdkScreen* screen = gtk_window_get_screen(window); - if (GDK_IS_X11_SCREEN(screen)) { - const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); - if (g_strcmp0(wm_name, "GNOME Shell") != 0) { - use_header_bar = FALSE; - } - } -#endif - if (use_header_bar) { - GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); - gtk_widget_show(GTK_WIDGET(header_bar)); - gtk_header_bar_set_title(header_bar, "next_gen_ui"); - gtk_header_bar_set_show_close_button(header_bar, TRUE); - gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); - } else { - gtk_window_set_title(window, "next_gen_ui"); - } - - gtk_window_set_default_size(window, 1280, 720); - gtk_widget_show(GTK_WIDGET(window)); - - g_autoptr(FlDartProject) project = fl_dart_project_new(); - fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); - - FlView* view = fl_view_new(project); - gtk_widget_show(GTK_WIDGET(view)); - gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); - - fl_register_plugins(FL_PLUGIN_REGISTRY(view)); - - gtk_widget_grab_focus(GTK_WIDGET(view)); -} - -// Implements GApplication::local_command_line. -static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { - MyApplication* self = MY_APPLICATION(application); - // Strip out the first argument as it is the binary name. - self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); - - g_autoptr(GError) error = nullptr; - if (!g_application_register(application, nullptr, &error)) { - g_warning("Failed to register: %s", error->message); - *exit_status = 1; - return TRUE; - } - - g_application_activate(application); - *exit_status = 0; - - return TRUE; -} - -// Implements GApplication::startup. -static void my_application_startup(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application startup. - - G_APPLICATION_CLASS(my_application_parent_class)->startup(application); -} - -// Implements GApplication::shutdown. -static void my_application_shutdown(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application shutdown. - - G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); -} - -// Implements GObject::dispose. -static void my_application_dispose(GObject* object) { - MyApplication* self = MY_APPLICATION(object); - g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); - G_OBJECT_CLASS(my_application_parent_class)->dispose(object); -} - -static void my_application_class_init(MyApplicationClass* klass) { - G_APPLICATION_CLASS(klass)->activate = my_application_activate; - G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; - G_APPLICATION_CLASS(klass)->startup = my_application_startup; - G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; - G_OBJECT_CLASS(klass)->dispose = my_application_dispose; -} - -static void my_application_init(MyApplication* self) {} - -MyApplication* my_application_new() { - return MY_APPLICATION(g_object_new(my_application_get_type(), - "application-id", APPLICATION_ID, - "flags", G_APPLICATION_NON_UNIQUE, - nullptr)); -} diff --git a/next-gen-ui/step_04_c/linux/runner/CMakeLists.txt b/next-gen-ui/step_04_c/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/next-gen-ui/step_04_c/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/next-gen-ui/step_04_c/linux/main.cc b/next-gen-ui/step_04_c/linux/runner/main.cc similarity index 100% rename from next-gen-ui/step_04_c/linux/main.cc rename to next-gen-ui/step_04_c/linux/runner/main.cc diff --git a/next-gen-ui/step_04_c/linux/runner/my_application.cc b/next-gen-ui/step_04_c/linux/runner/my_application.cc new file mode 100644 index 0000000000..6fa9821b9c --- /dev/null +++ b/next-gen-ui/step_04_c/linux/runner/my_application.cc @@ -0,0 +1,130 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "next_gen_ui"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "next_gen_ui"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/next-gen-ui/step_04_c/linux/my_application.h b/next-gen-ui/step_04_c/linux/runner/my_application.h similarity index 100% rename from next-gen-ui/step_04_c/linux/my_application.h rename to next-gen-ui/step_04_c/linux/runner/my_application.h diff --git a/next-gen-ui/step_04_c/macos/Runner.xcodeproj/project.pbxproj b/next-gen-ui/step_04_c/macos/Runner.xcodeproj/project.pbxproj index a260461a61..5ca8a3231e 100644 --- a/next-gen-ui/step_04_c/macos/Runner.xcodeproj/project.pbxproj +++ b/next-gen-ui/step_04_c/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ + 2E6B87224BF317E31F74B0D6 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FF5748F504BD5E56042DEADB /* Pods_RunnerTests.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 44BBBA76B13EEB94F9DCE170 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2984A5AD2129F6C671F00164 /* Pods_Runner.framework */; }; - 4E0858D90CA55751E7BE4898 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 39010BEDE01EF3B7F309CBE7 /* Pods_RunnerTests.framework */; }; + 56635C0EC97E7F426A37B2E0 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 70907F10D88B462804477CEC /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,13 +62,12 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 2984A5AD2129F6C671F00164 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 2CF773F4C2430EAC834646B3 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 1084579C46BDDCE9E7DF16AC /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 2D475486DFFA8C60E5710DB0 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; }; - 337BA55CC083EAE0C41E02E7 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 33CC10ED2044A3C60003C045 /* next_gen_ui.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = next_gen_ui.app; sourceTree = BUILT_PRODUCTS_DIR; }; 33CC10F02044A3C60003C045 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 33CC10F22044A3C60003C045 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = Runner/Assets.xcassets; sourceTree = ""; }; @@ -78,16 +77,17 @@ 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Debug.xcconfig"; sourceTree = ""; }; 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Release.xcconfig"; sourceTree = ""; }; 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = "Flutter-Generated.xcconfig"; path = "ephemeral/Flutter-Generated.xcconfig"; sourceTree = ""; }; - 33D3C1661150E5CF9FD9C336 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 39010BEDE01EF3B7F309CBE7 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 6B406084562E7BBF7435D2FF /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 70907F10D88B462804477CEC /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 7FDC8102767980E531E73AC5 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 812DEB8E378C986DF221D831 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 86295B0784C4F550CBE8BD69 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 949451BBF3DF607E13DBB265 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - A4F4B5072EE42AC6A44D036B /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + E57940CC1AE193EDBC7E60BC /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + FF5748F504BD5E56042DEADB /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 4E0858D90CA55751E7BE4898 /* Pods_RunnerTests.framework in Frameworks */, + 2E6B87224BF317E31F74B0D6 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,22 +103,22 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 44BBBA76B13EEB94F9DCE170 /* Pods_Runner.framework in Frameworks */, + 56635C0EC97E7F426A37B2E0 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 1C1096D0206D3CBABCC06686 /* Pods */ = { + 0EB950B6EBBA8562ED05E9C6 /* Pods */ = { isa = PBXGroup; children = ( - 2CF773F4C2430EAC834646B3 /* Pods-Runner.debug.xcconfig */, - 7FDC8102767980E531E73AC5 /* Pods-Runner.release.xcconfig */, - 6B406084562E7BBF7435D2FF /* Pods-Runner.profile.xcconfig */, - A4F4B5072EE42AC6A44D036B /* Pods-RunnerTests.debug.xcconfig */, - 33D3C1661150E5CF9FD9C336 /* Pods-RunnerTests.release.xcconfig */, - 337BA55CC083EAE0C41E02E7 /* Pods-RunnerTests.profile.xcconfig */, + 1084579C46BDDCE9E7DF16AC /* Pods-Runner.debug.xcconfig */, + 2D475486DFFA8C60E5710DB0 /* Pods-Runner.release.xcconfig */, + E57940CC1AE193EDBC7E60BC /* Pods-Runner.profile.xcconfig */, + 86295B0784C4F550CBE8BD69 /* Pods-RunnerTests.debug.xcconfig */, + 949451BBF3DF607E13DBB265 /* Pods-RunnerTests.release.xcconfig */, + 812DEB8E378C986DF221D831 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -151,7 +151,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 1C1096D0206D3CBABCC06686 /* Pods */, + 0EB950B6EBBA8562ED05E9C6 /* Pods */, ); sourceTree = ""; }; @@ -202,8 +202,8 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - 2984A5AD2129F6C671F00164 /* Pods_Runner.framework */, - 39010BEDE01EF3B7F309CBE7 /* Pods_RunnerTests.framework */, + 70907F10D88B462804477CEC /* Pods_Runner.framework */, + FF5748F504BD5E56042DEADB /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - FE0C7B1BBD5CA48F75CD6536 /* [CP] Check Pods Manifest.lock */, + 24CA264AC7C1AA37F685BC19 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - BF702552288C4603E192F687 /* [CP] Check Pods Manifest.lock */, + 9936C57FFCBF37419AE7561E /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 978AFB595B79A33D319A948F /* [CP] Embed Pods Frameworks */, + 038DC0986A46E5F2839BD12E /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,84 +323,84 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 3399D490228B24CF009A79C7 /* ShellScript */ = { + 038DC0986A46E5F2839BD12E /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - ); + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; }; - 33CC111E2044C6BF0003C045 /* ShellScript */ = { + 24CA264AC7C1AA37F685BC19 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - Flutter/ephemeral/FlutterInputs.xcfilelist, ); inputPaths = ( - Flutter/ephemeral/tripwire, + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - Flutter/ephemeral/FlutterOutputs.xcfilelist, ); outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - 978AFB595B79A33D319A948F /* [CP] Embed Pods Frameworks */ = { + 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + ); outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; + shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; }; - BF702552288C4603E192F687 /* [CP] Check Pods Manifest.lock */ = { + 33CC111E2044C6BF0003C045 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + Flutter/ephemeral/FlutterInputs.xcfilelist, ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", + Flutter/ephemeral/tripwire, ); - name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( + Flutter/ephemeral/FlutterOutputs.xcfilelist, ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - FE0C7B1BBD5CA48F75CD6536 /* [CP] Check Pods Manifest.lock */ = { + 9936C57FFCBF37419AE7561E /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -415,7 +415,7 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = A4F4B5072EE42AC6A44D036B /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 86295B0784C4F550CBE8BD69 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 33D3C1661150E5CF9FD9C336 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 949451BBF3DF607E13DBB265 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 337BA55CC083EAE0C41E02E7 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 812DEB8E378C986DF221D831 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/next-gen-ui/step_04_c/web/index.html b/next-gen-ui/step_04_c/web/index.html index ed2ea921e4..d0a2517e72 100644 --- a/next-gen-ui/step_04_c/web/index.html +++ b/next-gen-ui/step_04_c/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/next-gen-ui/step_04_d/ios/Runner.xcodeproj/project.pbxproj b/next-gen-ui/step_04_d/ios/Runner.xcodeproj/project.pbxproj index 43b8398d4f..8f047bdf00 100644 --- a/next-gen-ui/step_04_d/ios/Runner.xcodeproj/project.pbxproj +++ b/next-gen-ui/step_04_d/ios/Runner.xcodeproj/project.pbxproj @@ -11,11 +11,11 @@ 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; - 95B86EC706B280ECBF05B340 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F29266F85C81E223DE38826F /* Pods_RunnerTests.framework */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - E9B1620F2EF5AF6175681809 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DE20D8731F5AC68BA1712A5A /* Pods_Runner.framework */; }; + B62141185A2A64CE6AE671F2 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B1CF946366B840164A5B6A19 /* Pods_Runner.framework */; }; + B81AE38132A98A311F8F51B8 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 249FB81AECD9AE84FFA40AD0 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,51 +42,60 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 0FBB97D3B77C3F8ABBBA69D1 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 1065108C466C107C635700F4 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; + 249FB81AECD9AE84FFA40AD0 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 531021BCFBF6DEA7A588EEFB /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 5C244634881A8C4BD75C5C03 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 5220EC7DF66B6FF52474A86B /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 64F96334240D4715F67078C9 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 6641BE7C3FD295E85E2B1262 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 8094A5C0BD3F742D973F4EBB /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; + 9790F6561207E583E84D4FF9 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - D324E46E5A8253E05C3A901E /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - DC699C7AADC6A46B95166F6E /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - DE20D8731F5AC68BA1712A5A /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - F29266F85C81E223DE38826F /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - FFE5027C7AD199E12A7AF98E /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + B1CF946366B840164A5B6A19 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 344BA4708047A433A26140BD /* Frameworks */ = { + 97C146EB1CF9000F007C117D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 95B86EC706B280ECBF05B340 /* Pods_RunnerTests.framework in Frameworks */, + B62141185A2A64CE6AE671F2 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 97C146EB1CF9000F007C117D /* Frameworks */ = { + C266D94F39398FF0845062EB /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - E9B1620F2EF5AF6175681809 /* Pods_Runner.framework in Frameworks */, + B81AE38132A98A311F8F51B8 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 29779CA63CE39E764210D572 /* Frameworks */ = { + isa = PBXGroup; + children = ( + B1CF946366B840164A5B6A19 /* Pods_Runner.framework */, + 249FB81AECD9AE84FFA40AD0 /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; 331C8082294A63A400263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -95,15 +104,15 @@ path = RunnerTests; sourceTree = ""; }; - 6655F551DEE09BD8E2ABAAD2 /* Pods */ = { + 67CB01004931F5EAE1484002 /* Pods */ = { isa = PBXGroup; children = ( - 8094A5C0BD3F742D973F4EBB /* Pods-Runner.debug.xcconfig */, - 5C244634881A8C4BD75C5C03 /* Pods-Runner.release.xcconfig */, - DC699C7AADC6A46B95166F6E /* Pods-Runner.profile.xcconfig */, - 531021BCFBF6DEA7A588EEFB /* Pods-RunnerTests.debug.xcconfig */, - FFE5027C7AD199E12A7AF98E /* Pods-RunnerTests.release.xcconfig */, - D324E46E5A8253E05C3A901E /* Pods-RunnerTests.profile.xcconfig */, + 64F96334240D4715F67078C9 /* Pods-Runner.debug.xcconfig */, + 1065108C466C107C635700F4 /* Pods-Runner.release.xcconfig */, + 9790F6561207E583E84D4FF9 /* Pods-Runner.profile.xcconfig */, + 0FBB97D3B77C3F8ABBBA69D1 /* Pods-RunnerTests.debug.xcconfig */, + 5220EC7DF66B6FF52474A86B /* Pods-RunnerTests.release.xcconfig */, + 6641BE7C3FD295E85E2B1262 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -127,8 +136,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - 6655F551DEE09BD8E2ABAAD2 /* Pods */, - AB471AC81B5F3E3EAC08510D /* Frameworks */, + 67CB01004931F5EAE1484002 /* Pods */, + 29779CA63CE39E764210D572 /* Frameworks */, ); sourceTree = ""; }; @@ -156,15 +165,6 @@ path = Runner; sourceTree = ""; }; - AB471AC81B5F3E3EAC08510D /* Frameworks */ = { - isa = PBXGroup; - children = ( - DE20D8731F5AC68BA1712A5A /* Pods_Runner.framework */, - F29266F85C81E223DE38826F /* Pods_RunnerTests.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - C143E5EEC573FBD89B16A658 /* [CP] Check Pods Manifest.lock */, + 1A41435D909B4A5BA59DA804 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 344BA4708047A433A26140BD /* Frameworks */, + C266D94F39398FF0845062EB /* Frameworks */, ); buildRules = ( ); @@ -191,7 +191,7 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 3AAEDA8BA83E71CC34259A37 /* [CP] Check Pods Manifest.lock */, + 15FA0791F2F6E4DEC3602581 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, @@ -269,7 +269,7 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 3AAEDA8BA83E71CC34259A37 /* [CP] Check Pods Manifest.lock */ = { + 15FA0791F2F6E4DEC3602581 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -291,58 +291,58 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + 1A41435D909B4A5BA59DA804 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( - "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "Thin Binary"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); - name = "Run Script"; + name = "Thin Binary"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - C143E5EEC573FBD89B16A658 /* [CP] Check Pods Manifest.lock */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( ); + name = "Run Script"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; /* End PBXShellScriptBuildPhase section */ @@ -469,7 +469,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 531021BCFBF6DEA7A588EEFB /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 0FBB97D3B77C3F8ABBBA69D1 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -487,7 +487,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = FFE5027C7AD199E12A7AF98E /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 5220EC7DF66B6FF52474A86B /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -503,7 +503,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = D324E46E5A8253E05C3A901E /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 6641BE7C3FD295E85E2B1262 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/next-gen-ui/step_04_d/linux/CMakeLists.txt b/next-gen-ui/step_04_d/linux/CMakeLists.txt index ccbe56dd39..e49da8fe41 100644 --- a/next-gen-ui/step_04_d/linux/CMakeLists.txt +++ b/next-gen-ui/step_04_d/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/next-gen-ui/step_04_d/linux/my_application.cc b/next-gen-ui/step_04_d/linux/my_application.cc deleted file mode 100644 index d5581db5c1..0000000000 --- a/next-gen-ui/step_04_d/linux/my_application.cc +++ /dev/null @@ -1,124 +0,0 @@ -#include "my_application.h" - -#include -#ifdef GDK_WINDOWING_X11 -#include -#endif - -#include "flutter/generated_plugin_registrant.h" - -struct _MyApplication { - GtkApplication parent_instance; - char** dart_entrypoint_arguments; -}; - -G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) - -// Implements GApplication::activate. -static void my_application_activate(GApplication* application) { - MyApplication* self = MY_APPLICATION(application); - GtkWindow* window = - GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); - - // Use a header bar when running in GNOME as this is the common style used - // by applications and is the setup most users will be using (e.g. Ubuntu - // desktop). - // If running on X and not using GNOME then just use a traditional title bar - // in case the window manager does more exotic layout, e.g. tiling. - // If running on Wayland assume the header bar will work (may need changing - // if future cases occur). - gboolean use_header_bar = TRUE; -#ifdef GDK_WINDOWING_X11 - GdkScreen* screen = gtk_window_get_screen(window); - if (GDK_IS_X11_SCREEN(screen)) { - const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); - if (g_strcmp0(wm_name, "GNOME Shell") != 0) { - use_header_bar = FALSE; - } - } -#endif - if (use_header_bar) { - GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); - gtk_widget_show(GTK_WIDGET(header_bar)); - gtk_header_bar_set_title(header_bar, "next_gen_ui"); - gtk_header_bar_set_show_close_button(header_bar, TRUE); - gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); - } else { - gtk_window_set_title(window, "next_gen_ui"); - } - - gtk_window_set_default_size(window, 1280, 720); - gtk_widget_show(GTK_WIDGET(window)); - - g_autoptr(FlDartProject) project = fl_dart_project_new(); - fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); - - FlView* view = fl_view_new(project); - gtk_widget_show(GTK_WIDGET(view)); - gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); - - fl_register_plugins(FL_PLUGIN_REGISTRY(view)); - - gtk_widget_grab_focus(GTK_WIDGET(view)); -} - -// Implements GApplication::local_command_line. -static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { - MyApplication* self = MY_APPLICATION(application); - // Strip out the first argument as it is the binary name. - self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); - - g_autoptr(GError) error = nullptr; - if (!g_application_register(application, nullptr, &error)) { - g_warning("Failed to register: %s", error->message); - *exit_status = 1; - return TRUE; - } - - g_application_activate(application); - *exit_status = 0; - - return TRUE; -} - -// Implements GApplication::startup. -static void my_application_startup(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application startup. - - G_APPLICATION_CLASS(my_application_parent_class)->startup(application); -} - -// Implements GApplication::shutdown. -static void my_application_shutdown(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application shutdown. - - G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); -} - -// Implements GObject::dispose. -static void my_application_dispose(GObject* object) { - MyApplication* self = MY_APPLICATION(object); - g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); - G_OBJECT_CLASS(my_application_parent_class)->dispose(object); -} - -static void my_application_class_init(MyApplicationClass* klass) { - G_APPLICATION_CLASS(klass)->activate = my_application_activate; - G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; - G_APPLICATION_CLASS(klass)->startup = my_application_startup; - G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; - G_OBJECT_CLASS(klass)->dispose = my_application_dispose; -} - -static void my_application_init(MyApplication* self) {} - -MyApplication* my_application_new() { - return MY_APPLICATION(g_object_new(my_application_get_type(), - "application-id", APPLICATION_ID, - "flags", G_APPLICATION_NON_UNIQUE, - nullptr)); -} diff --git a/next-gen-ui/step_04_d/linux/runner/CMakeLists.txt b/next-gen-ui/step_04_d/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/next-gen-ui/step_04_d/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/next-gen-ui/step_04_d/linux/main.cc b/next-gen-ui/step_04_d/linux/runner/main.cc similarity index 100% rename from next-gen-ui/step_04_d/linux/main.cc rename to next-gen-ui/step_04_d/linux/runner/main.cc diff --git a/next-gen-ui/step_04_d/linux/runner/my_application.cc b/next-gen-ui/step_04_d/linux/runner/my_application.cc new file mode 100644 index 0000000000..6fa9821b9c --- /dev/null +++ b/next-gen-ui/step_04_d/linux/runner/my_application.cc @@ -0,0 +1,130 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "next_gen_ui"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "next_gen_ui"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/next-gen-ui/step_04_d/linux/my_application.h b/next-gen-ui/step_04_d/linux/runner/my_application.h similarity index 100% rename from next-gen-ui/step_04_d/linux/my_application.h rename to next-gen-ui/step_04_d/linux/runner/my_application.h diff --git a/next-gen-ui/step_04_d/macos/Runner.xcodeproj/project.pbxproj b/next-gen-ui/step_04_d/macos/Runner.xcodeproj/project.pbxproj index a260461a61..5ca8a3231e 100644 --- a/next-gen-ui/step_04_d/macos/Runner.xcodeproj/project.pbxproj +++ b/next-gen-ui/step_04_d/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ + 2E6B87224BF317E31F74B0D6 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FF5748F504BD5E56042DEADB /* Pods_RunnerTests.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 44BBBA76B13EEB94F9DCE170 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2984A5AD2129F6C671F00164 /* Pods_Runner.framework */; }; - 4E0858D90CA55751E7BE4898 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 39010BEDE01EF3B7F309CBE7 /* Pods_RunnerTests.framework */; }; + 56635C0EC97E7F426A37B2E0 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 70907F10D88B462804477CEC /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,13 +62,12 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 2984A5AD2129F6C671F00164 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 2CF773F4C2430EAC834646B3 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 1084579C46BDDCE9E7DF16AC /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 2D475486DFFA8C60E5710DB0 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; }; - 337BA55CC083EAE0C41E02E7 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 33CC10ED2044A3C60003C045 /* next_gen_ui.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = next_gen_ui.app; sourceTree = BUILT_PRODUCTS_DIR; }; 33CC10F02044A3C60003C045 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 33CC10F22044A3C60003C045 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = Runner/Assets.xcassets; sourceTree = ""; }; @@ -78,16 +77,17 @@ 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Debug.xcconfig"; sourceTree = ""; }; 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Release.xcconfig"; sourceTree = ""; }; 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = "Flutter-Generated.xcconfig"; path = "ephemeral/Flutter-Generated.xcconfig"; sourceTree = ""; }; - 33D3C1661150E5CF9FD9C336 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 39010BEDE01EF3B7F309CBE7 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 6B406084562E7BBF7435D2FF /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 70907F10D88B462804477CEC /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 7FDC8102767980E531E73AC5 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 812DEB8E378C986DF221D831 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 86295B0784C4F550CBE8BD69 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 949451BBF3DF607E13DBB265 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - A4F4B5072EE42AC6A44D036B /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + E57940CC1AE193EDBC7E60BC /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + FF5748F504BD5E56042DEADB /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 4E0858D90CA55751E7BE4898 /* Pods_RunnerTests.framework in Frameworks */, + 2E6B87224BF317E31F74B0D6 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,22 +103,22 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 44BBBA76B13EEB94F9DCE170 /* Pods_Runner.framework in Frameworks */, + 56635C0EC97E7F426A37B2E0 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 1C1096D0206D3CBABCC06686 /* Pods */ = { + 0EB950B6EBBA8562ED05E9C6 /* Pods */ = { isa = PBXGroup; children = ( - 2CF773F4C2430EAC834646B3 /* Pods-Runner.debug.xcconfig */, - 7FDC8102767980E531E73AC5 /* Pods-Runner.release.xcconfig */, - 6B406084562E7BBF7435D2FF /* Pods-Runner.profile.xcconfig */, - A4F4B5072EE42AC6A44D036B /* Pods-RunnerTests.debug.xcconfig */, - 33D3C1661150E5CF9FD9C336 /* Pods-RunnerTests.release.xcconfig */, - 337BA55CC083EAE0C41E02E7 /* Pods-RunnerTests.profile.xcconfig */, + 1084579C46BDDCE9E7DF16AC /* Pods-Runner.debug.xcconfig */, + 2D475486DFFA8C60E5710DB0 /* Pods-Runner.release.xcconfig */, + E57940CC1AE193EDBC7E60BC /* Pods-Runner.profile.xcconfig */, + 86295B0784C4F550CBE8BD69 /* Pods-RunnerTests.debug.xcconfig */, + 949451BBF3DF607E13DBB265 /* Pods-RunnerTests.release.xcconfig */, + 812DEB8E378C986DF221D831 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -151,7 +151,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 1C1096D0206D3CBABCC06686 /* Pods */, + 0EB950B6EBBA8562ED05E9C6 /* Pods */, ); sourceTree = ""; }; @@ -202,8 +202,8 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - 2984A5AD2129F6C671F00164 /* Pods_Runner.framework */, - 39010BEDE01EF3B7F309CBE7 /* Pods_RunnerTests.framework */, + 70907F10D88B462804477CEC /* Pods_Runner.framework */, + FF5748F504BD5E56042DEADB /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - FE0C7B1BBD5CA48F75CD6536 /* [CP] Check Pods Manifest.lock */, + 24CA264AC7C1AA37F685BC19 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - BF702552288C4603E192F687 /* [CP] Check Pods Manifest.lock */, + 9936C57FFCBF37419AE7561E /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 978AFB595B79A33D319A948F /* [CP] Embed Pods Frameworks */, + 038DC0986A46E5F2839BD12E /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,84 +323,84 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 3399D490228B24CF009A79C7 /* ShellScript */ = { + 038DC0986A46E5F2839BD12E /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - ); + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; }; - 33CC111E2044C6BF0003C045 /* ShellScript */ = { + 24CA264AC7C1AA37F685BC19 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - Flutter/ephemeral/FlutterInputs.xcfilelist, ); inputPaths = ( - Flutter/ephemeral/tripwire, + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - Flutter/ephemeral/FlutterOutputs.xcfilelist, ); outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - 978AFB595B79A33D319A948F /* [CP] Embed Pods Frameworks */ = { + 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + ); outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; + shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; }; - BF702552288C4603E192F687 /* [CP] Check Pods Manifest.lock */ = { + 33CC111E2044C6BF0003C045 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + Flutter/ephemeral/FlutterInputs.xcfilelist, ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", + Flutter/ephemeral/tripwire, ); - name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( + Flutter/ephemeral/FlutterOutputs.xcfilelist, ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - FE0C7B1BBD5CA48F75CD6536 /* [CP] Check Pods Manifest.lock */ = { + 9936C57FFCBF37419AE7561E /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -415,7 +415,7 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = A4F4B5072EE42AC6A44D036B /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 86295B0784C4F550CBE8BD69 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 33D3C1661150E5CF9FD9C336 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 949451BBF3DF607E13DBB265 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 337BA55CC083EAE0C41E02E7 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 812DEB8E378C986DF221D831 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/next-gen-ui/step_04_d/web/index.html b/next-gen-ui/step_04_d/web/index.html index ed2ea921e4..d0a2517e72 100644 --- a/next-gen-ui/step_04_d/web/index.html +++ b/next-gen-ui/step_04_d/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/next-gen-ui/step_04_e/ios/Runner.xcodeproj/project.pbxproj b/next-gen-ui/step_04_e/ios/Runner.xcodeproj/project.pbxproj index 43b8398d4f..8f047bdf00 100644 --- a/next-gen-ui/step_04_e/ios/Runner.xcodeproj/project.pbxproj +++ b/next-gen-ui/step_04_e/ios/Runner.xcodeproj/project.pbxproj @@ -11,11 +11,11 @@ 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; - 95B86EC706B280ECBF05B340 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F29266F85C81E223DE38826F /* Pods_RunnerTests.framework */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - E9B1620F2EF5AF6175681809 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DE20D8731F5AC68BA1712A5A /* Pods_Runner.framework */; }; + B62141185A2A64CE6AE671F2 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B1CF946366B840164A5B6A19 /* Pods_Runner.framework */; }; + B81AE38132A98A311F8F51B8 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 249FB81AECD9AE84FFA40AD0 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,51 +42,60 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 0FBB97D3B77C3F8ABBBA69D1 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 1065108C466C107C635700F4 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; + 249FB81AECD9AE84FFA40AD0 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 531021BCFBF6DEA7A588EEFB /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 5C244634881A8C4BD75C5C03 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 5220EC7DF66B6FF52474A86B /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 64F96334240D4715F67078C9 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 6641BE7C3FD295E85E2B1262 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 8094A5C0BD3F742D973F4EBB /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; + 9790F6561207E583E84D4FF9 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - D324E46E5A8253E05C3A901E /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - DC699C7AADC6A46B95166F6E /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - DE20D8731F5AC68BA1712A5A /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - F29266F85C81E223DE38826F /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - FFE5027C7AD199E12A7AF98E /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + B1CF946366B840164A5B6A19 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 344BA4708047A433A26140BD /* Frameworks */ = { + 97C146EB1CF9000F007C117D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 95B86EC706B280ECBF05B340 /* Pods_RunnerTests.framework in Frameworks */, + B62141185A2A64CE6AE671F2 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 97C146EB1CF9000F007C117D /* Frameworks */ = { + C266D94F39398FF0845062EB /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - E9B1620F2EF5AF6175681809 /* Pods_Runner.framework in Frameworks */, + B81AE38132A98A311F8F51B8 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 29779CA63CE39E764210D572 /* Frameworks */ = { + isa = PBXGroup; + children = ( + B1CF946366B840164A5B6A19 /* Pods_Runner.framework */, + 249FB81AECD9AE84FFA40AD0 /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; 331C8082294A63A400263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -95,15 +104,15 @@ path = RunnerTests; sourceTree = ""; }; - 6655F551DEE09BD8E2ABAAD2 /* Pods */ = { + 67CB01004931F5EAE1484002 /* Pods */ = { isa = PBXGroup; children = ( - 8094A5C0BD3F742D973F4EBB /* Pods-Runner.debug.xcconfig */, - 5C244634881A8C4BD75C5C03 /* Pods-Runner.release.xcconfig */, - DC699C7AADC6A46B95166F6E /* Pods-Runner.profile.xcconfig */, - 531021BCFBF6DEA7A588EEFB /* Pods-RunnerTests.debug.xcconfig */, - FFE5027C7AD199E12A7AF98E /* Pods-RunnerTests.release.xcconfig */, - D324E46E5A8253E05C3A901E /* Pods-RunnerTests.profile.xcconfig */, + 64F96334240D4715F67078C9 /* Pods-Runner.debug.xcconfig */, + 1065108C466C107C635700F4 /* Pods-Runner.release.xcconfig */, + 9790F6561207E583E84D4FF9 /* Pods-Runner.profile.xcconfig */, + 0FBB97D3B77C3F8ABBBA69D1 /* Pods-RunnerTests.debug.xcconfig */, + 5220EC7DF66B6FF52474A86B /* Pods-RunnerTests.release.xcconfig */, + 6641BE7C3FD295E85E2B1262 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -127,8 +136,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - 6655F551DEE09BD8E2ABAAD2 /* Pods */, - AB471AC81B5F3E3EAC08510D /* Frameworks */, + 67CB01004931F5EAE1484002 /* Pods */, + 29779CA63CE39E764210D572 /* Frameworks */, ); sourceTree = ""; }; @@ -156,15 +165,6 @@ path = Runner; sourceTree = ""; }; - AB471AC81B5F3E3EAC08510D /* Frameworks */ = { - isa = PBXGroup; - children = ( - DE20D8731F5AC68BA1712A5A /* Pods_Runner.framework */, - F29266F85C81E223DE38826F /* Pods_RunnerTests.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - C143E5EEC573FBD89B16A658 /* [CP] Check Pods Manifest.lock */, + 1A41435D909B4A5BA59DA804 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 344BA4708047A433A26140BD /* Frameworks */, + C266D94F39398FF0845062EB /* Frameworks */, ); buildRules = ( ); @@ -191,7 +191,7 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 3AAEDA8BA83E71CC34259A37 /* [CP] Check Pods Manifest.lock */, + 15FA0791F2F6E4DEC3602581 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, @@ -269,7 +269,7 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 3AAEDA8BA83E71CC34259A37 /* [CP] Check Pods Manifest.lock */ = { + 15FA0791F2F6E4DEC3602581 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -291,58 +291,58 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + 1A41435D909B4A5BA59DA804 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( - "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "Thin Binary"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); - name = "Run Script"; + name = "Thin Binary"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - C143E5EEC573FBD89B16A658 /* [CP] Check Pods Manifest.lock */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( ); + name = "Run Script"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; /* End PBXShellScriptBuildPhase section */ @@ -469,7 +469,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 531021BCFBF6DEA7A588EEFB /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 0FBB97D3B77C3F8ABBBA69D1 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -487,7 +487,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = FFE5027C7AD199E12A7AF98E /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 5220EC7DF66B6FF52474A86B /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -503,7 +503,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = D324E46E5A8253E05C3A901E /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 6641BE7C3FD295E85E2B1262 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/next-gen-ui/step_04_e/linux/CMakeLists.txt b/next-gen-ui/step_04_e/linux/CMakeLists.txt index ccbe56dd39..e49da8fe41 100644 --- a/next-gen-ui/step_04_e/linux/CMakeLists.txt +++ b/next-gen-ui/step_04_e/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/next-gen-ui/step_04_e/linux/my_application.cc b/next-gen-ui/step_04_e/linux/my_application.cc deleted file mode 100644 index d5581db5c1..0000000000 --- a/next-gen-ui/step_04_e/linux/my_application.cc +++ /dev/null @@ -1,124 +0,0 @@ -#include "my_application.h" - -#include -#ifdef GDK_WINDOWING_X11 -#include -#endif - -#include "flutter/generated_plugin_registrant.h" - -struct _MyApplication { - GtkApplication parent_instance; - char** dart_entrypoint_arguments; -}; - -G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) - -// Implements GApplication::activate. -static void my_application_activate(GApplication* application) { - MyApplication* self = MY_APPLICATION(application); - GtkWindow* window = - GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); - - // Use a header bar when running in GNOME as this is the common style used - // by applications and is the setup most users will be using (e.g. Ubuntu - // desktop). - // If running on X and not using GNOME then just use a traditional title bar - // in case the window manager does more exotic layout, e.g. tiling. - // If running on Wayland assume the header bar will work (may need changing - // if future cases occur). - gboolean use_header_bar = TRUE; -#ifdef GDK_WINDOWING_X11 - GdkScreen* screen = gtk_window_get_screen(window); - if (GDK_IS_X11_SCREEN(screen)) { - const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); - if (g_strcmp0(wm_name, "GNOME Shell") != 0) { - use_header_bar = FALSE; - } - } -#endif - if (use_header_bar) { - GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); - gtk_widget_show(GTK_WIDGET(header_bar)); - gtk_header_bar_set_title(header_bar, "next_gen_ui"); - gtk_header_bar_set_show_close_button(header_bar, TRUE); - gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); - } else { - gtk_window_set_title(window, "next_gen_ui"); - } - - gtk_window_set_default_size(window, 1280, 720); - gtk_widget_show(GTK_WIDGET(window)); - - g_autoptr(FlDartProject) project = fl_dart_project_new(); - fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); - - FlView* view = fl_view_new(project); - gtk_widget_show(GTK_WIDGET(view)); - gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); - - fl_register_plugins(FL_PLUGIN_REGISTRY(view)); - - gtk_widget_grab_focus(GTK_WIDGET(view)); -} - -// Implements GApplication::local_command_line. -static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { - MyApplication* self = MY_APPLICATION(application); - // Strip out the first argument as it is the binary name. - self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); - - g_autoptr(GError) error = nullptr; - if (!g_application_register(application, nullptr, &error)) { - g_warning("Failed to register: %s", error->message); - *exit_status = 1; - return TRUE; - } - - g_application_activate(application); - *exit_status = 0; - - return TRUE; -} - -// Implements GApplication::startup. -static void my_application_startup(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application startup. - - G_APPLICATION_CLASS(my_application_parent_class)->startup(application); -} - -// Implements GApplication::shutdown. -static void my_application_shutdown(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application shutdown. - - G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); -} - -// Implements GObject::dispose. -static void my_application_dispose(GObject* object) { - MyApplication* self = MY_APPLICATION(object); - g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); - G_OBJECT_CLASS(my_application_parent_class)->dispose(object); -} - -static void my_application_class_init(MyApplicationClass* klass) { - G_APPLICATION_CLASS(klass)->activate = my_application_activate; - G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; - G_APPLICATION_CLASS(klass)->startup = my_application_startup; - G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; - G_OBJECT_CLASS(klass)->dispose = my_application_dispose; -} - -static void my_application_init(MyApplication* self) {} - -MyApplication* my_application_new() { - return MY_APPLICATION(g_object_new(my_application_get_type(), - "application-id", APPLICATION_ID, - "flags", G_APPLICATION_NON_UNIQUE, - nullptr)); -} diff --git a/next-gen-ui/step_04_e/linux/runner/CMakeLists.txt b/next-gen-ui/step_04_e/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/next-gen-ui/step_04_e/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/next-gen-ui/step_04_e/linux/main.cc b/next-gen-ui/step_04_e/linux/runner/main.cc similarity index 100% rename from next-gen-ui/step_04_e/linux/main.cc rename to next-gen-ui/step_04_e/linux/runner/main.cc diff --git a/next-gen-ui/step_04_e/linux/runner/my_application.cc b/next-gen-ui/step_04_e/linux/runner/my_application.cc new file mode 100644 index 0000000000..6fa9821b9c --- /dev/null +++ b/next-gen-ui/step_04_e/linux/runner/my_application.cc @@ -0,0 +1,130 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "next_gen_ui"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "next_gen_ui"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/next-gen-ui/step_04_e/linux/my_application.h b/next-gen-ui/step_04_e/linux/runner/my_application.h similarity index 100% rename from next-gen-ui/step_04_e/linux/my_application.h rename to next-gen-ui/step_04_e/linux/runner/my_application.h diff --git a/next-gen-ui/step_04_e/macos/Runner.xcodeproj/project.pbxproj b/next-gen-ui/step_04_e/macos/Runner.xcodeproj/project.pbxproj index a260461a61..5ca8a3231e 100644 --- a/next-gen-ui/step_04_e/macos/Runner.xcodeproj/project.pbxproj +++ b/next-gen-ui/step_04_e/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ + 2E6B87224BF317E31F74B0D6 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FF5748F504BD5E56042DEADB /* Pods_RunnerTests.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 44BBBA76B13EEB94F9DCE170 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2984A5AD2129F6C671F00164 /* Pods_Runner.framework */; }; - 4E0858D90CA55751E7BE4898 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 39010BEDE01EF3B7F309CBE7 /* Pods_RunnerTests.framework */; }; + 56635C0EC97E7F426A37B2E0 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 70907F10D88B462804477CEC /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,13 +62,12 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 2984A5AD2129F6C671F00164 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 2CF773F4C2430EAC834646B3 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 1084579C46BDDCE9E7DF16AC /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 2D475486DFFA8C60E5710DB0 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; }; - 337BA55CC083EAE0C41E02E7 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 33CC10ED2044A3C60003C045 /* next_gen_ui.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = next_gen_ui.app; sourceTree = BUILT_PRODUCTS_DIR; }; 33CC10F02044A3C60003C045 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 33CC10F22044A3C60003C045 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = Runner/Assets.xcassets; sourceTree = ""; }; @@ -78,16 +77,17 @@ 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Debug.xcconfig"; sourceTree = ""; }; 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Release.xcconfig"; sourceTree = ""; }; 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = "Flutter-Generated.xcconfig"; path = "ephemeral/Flutter-Generated.xcconfig"; sourceTree = ""; }; - 33D3C1661150E5CF9FD9C336 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 39010BEDE01EF3B7F309CBE7 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 6B406084562E7BBF7435D2FF /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 70907F10D88B462804477CEC /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 7FDC8102767980E531E73AC5 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 812DEB8E378C986DF221D831 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 86295B0784C4F550CBE8BD69 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 949451BBF3DF607E13DBB265 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - A4F4B5072EE42AC6A44D036B /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + E57940CC1AE193EDBC7E60BC /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + FF5748F504BD5E56042DEADB /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 4E0858D90CA55751E7BE4898 /* Pods_RunnerTests.framework in Frameworks */, + 2E6B87224BF317E31F74B0D6 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,22 +103,22 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 44BBBA76B13EEB94F9DCE170 /* Pods_Runner.framework in Frameworks */, + 56635C0EC97E7F426A37B2E0 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 1C1096D0206D3CBABCC06686 /* Pods */ = { + 0EB950B6EBBA8562ED05E9C6 /* Pods */ = { isa = PBXGroup; children = ( - 2CF773F4C2430EAC834646B3 /* Pods-Runner.debug.xcconfig */, - 7FDC8102767980E531E73AC5 /* Pods-Runner.release.xcconfig */, - 6B406084562E7BBF7435D2FF /* Pods-Runner.profile.xcconfig */, - A4F4B5072EE42AC6A44D036B /* Pods-RunnerTests.debug.xcconfig */, - 33D3C1661150E5CF9FD9C336 /* Pods-RunnerTests.release.xcconfig */, - 337BA55CC083EAE0C41E02E7 /* Pods-RunnerTests.profile.xcconfig */, + 1084579C46BDDCE9E7DF16AC /* Pods-Runner.debug.xcconfig */, + 2D475486DFFA8C60E5710DB0 /* Pods-Runner.release.xcconfig */, + E57940CC1AE193EDBC7E60BC /* Pods-Runner.profile.xcconfig */, + 86295B0784C4F550CBE8BD69 /* Pods-RunnerTests.debug.xcconfig */, + 949451BBF3DF607E13DBB265 /* Pods-RunnerTests.release.xcconfig */, + 812DEB8E378C986DF221D831 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -151,7 +151,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 1C1096D0206D3CBABCC06686 /* Pods */, + 0EB950B6EBBA8562ED05E9C6 /* Pods */, ); sourceTree = ""; }; @@ -202,8 +202,8 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - 2984A5AD2129F6C671F00164 /* Pods_Runner.framework */, - 39010BEDE01EF3B7F309CBE7 /* Pods_RunnerTests.framework */, + 70907F10D88B462804477CEC /* Pods_Runner.framework */, + FF5748F504BD5E56042DEADB /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - FE0C7B1BBD5CA48F75CD6536 /* [CP] Check Pods Manifest.lock */, + 24CA264AC7C1AA37F685BC19 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - BF702552288C4603E192F687 /* [CP] Check Pods Manifest.lock */, + 9936C57FFCBF37419AE7561E /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 978AFB595B79A33D319A948F /* [CP] Embed Pods Frameworks */, + 038DC0986A46E5F2839BD12E /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,84 +323,84 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 3399D490228B24CF009A79C7 /* ShellScript */ = { + 038DC0986A46E5F2839BD12E /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - ); + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; }; - 33CC111E2044C6BF0003C045 /* ShellScript */ = { + 24CA264AC7C1AA37F685BC19 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - Flutter/ephemeral/FlutterInputs.xcfilelist, ); inputPaths = ( - Flutter/ephemeral/tripwire, + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - Flutter/ephemeral/FlutterOutputs.xcfilelist, ); outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - 978AFB595B79A33D319A948F /* [CP] Embed Pods Frameworks */ = { + 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + ); outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; + shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; }; - BF702552288C4603E192F687 /* [CP] Check Pods Manifest.lock */ = { + 33CC111E2044C6BF0003C045 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + Flutter/ephemeral/FlutterInputs.xcfilelist, ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", + Flutter/ephemeral/tripwire, ); - name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( + Flutter/ephemeral/FlutterOutputs.xcfilelist, ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - FE0C7B1BBD5CA48F75CD6536 /* [CP] Check Pods Manifest.lock */ = { + 9936C57FFCBF37419AE7561E /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -415,7 +415,7 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = A4F4B5072EE42AC6A44D036B /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 86295B0784C4F550CBE8BD69 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 33D3C1661150E5CF9FD9C336 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 949451BBF3DF607E13DBB265 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 337BA55CC083EAE0C41E02E7 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 812DEB8E378C986DF221D831 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/next-gen-ui/step_04_e/web/index.html b/next-gen-ui/step_04_e/web/index.html index ed2ea921e4..d0a2517e72 100644 --- a/next-gen-ui/step_04_e/web/index.html +++ b/next-gen-ui/step_04_e/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/next-gen-ui/step_05_a/ios/Runner.xcodeproj/project.pbxproj b/next-gen-ui/step_05_a/ios/Runner.xcodeproj/project.pbxproj index 43b8398d4f..8f047bdf00 100644 --- a/next-gen-ui/step_05_a/ios/Runner.xcodeproj/project.pbxproj +++ b/next-gen-ui/step_05_a/ios/Runner.xcodeproj/project.pbxproj @@ -11,11 +11,11 @@ 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; - 95B86EC706B280ECBF05B340 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F29266F85C81E223DE38826F /* Pods_RunnerTests.framework */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - E9B1620F2EF5AF6175681809 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DE20D8731F5AC68BA1712A5A /* Pods_Runner.framework */; }; + B62141185A2A64CE6AE671F2 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B1CF946366B840164A5B6A19 /* Pods_Runner.framework */; }; + B81AE38132A98A311F8F51B8 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 249FB81AECD9AE84FFA40AD0 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,51 +42,60 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 0FBB97D3B77C3F8ABBBA69D1 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 1065108C466C107C635700F4 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; + 249FB81AECD9AE84FFA40AD0 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 531021BCFBF6DEA7A588EEFB /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 5C244634881A8C4BD75C5C03 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 5220EC7DF66B6FF52474A86B /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 64F96334240D4715F67078C9 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 6641BE7C3FD295E85E2B1262 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 8094A5C0BD3F742D973F4EBB /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; + 9790F6561207E583E84D4FF9 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - D324E46E5A8253E05C3A901E /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - DC699C7AADC6A46B95166F6E /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - DE20D8731F5AC68BA1712A5A /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - F29266F85C81E223DE38826F /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - FFE5027C7AD199E12A7AF98E /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + B1CF946366B840164A5B6A19 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 344BA4708047A433A26140BD /* Frameworks */ = { + 97C146EB1CF9000F007C117D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 95B86EC706B280ECBF05B340 /* Pods_RunnerTests.framework in Frameworks */, + B62141185A2A64CE6AE671F2 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 97C146EB1CF9000F007C117D /* Frameworks */ = { + C266D94F39398FF0845062EB /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - E9B1620F2EF5AF6175681809 /* Pods_Runner.framework in Frameworks */, + B81AE38132A98A311F8F51B8 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 29779CA63CE39E764210D572 /* Frameworks */ = { + isa = PBXGroup; + children = ( + B1CF946366B840164A5B6A19 /* Pods_Runner.framework */, + 249FB81AECD9AE84FFA40AD0 /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; 331C8082294A63A400263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -95,15 +104,15 @@ path = RunnerTests; sourceTree = ""; }; - 6655F551DEE09BD8E2ABAAD2 /* Pods */ = { + 67CB01004931F5EAE1484002 /* Pods */ = { isa = PBXGroup; children = ( - 8094A5C0BD3F742D973F4EBB /* Pods-Runner.debug.xcconfig */, - 5C244634881A8C4BD75C5C03 /* Pods-Runner.release.xcconfig */, - DC699C7AADC6A46B95166F6E /* Pods-Runner.profile.xcconfig */, - 531021BCFBF6DEA7A588EEFB /* Pods-RunnerTests.debug.xcconfig */, - FFE5027C7AD199E12A7AF98E /* Pods-RunnerTests.release.xcconfig */, - D324E46E5A8253E05C3A901E /* Pods-RunnerTests.profile.xcconfig */, + 64F96334240D4715F67078C9 /* Pods-Runner.debug.xcconfig */, + 1065108C466C107C635700F4 /* Pods-Runner.release.xcconfig */, + 9790F6561207E583E84D4FF9 /* Pods-Runner.profile.xcconfig */, + 0FBB97D3B77C3F8ABBBA69D1 /* Pods-RunnerTests.debug.xcconfig */, + 5220EC7DF66B6FF52474A86B /* Pods-RunnerTests.release.xcconfig */, + 6641BE7C3FD295E85E2B1262 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -127,8 +136,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - 6655F551DEE09BD8E2ABAAD2 /* Pods */, - AB471AC81B5F3E3EAC08510D /* Frameworks */, + 67CB01004931F5EAE1484002 /* Pods */, + 29779CA63CE39E764210D572 /* Frameworks */, ); sourceTree = ""; }; @@ -156,15 +165,6 @@ path = Runner; sourceTree = ""; }; - AB471AC81B5F3E3EAC08510D /* Frameworks */ = { - isa = PBXGroup; - children = ( - DE20D8731F5AC68BA1712A5A /* Pods_Runner.framework */, - F29266F85C81E223DE38826F /* Pods_RunnerTests.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - C143E5EEC573FBD89B16A658 /* [CP] Check Pods Manifest.lock */, + 1A41435D909B4A5BA59DA804 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 344BA4708047A433A26140BD /* Frameworks */, + C266D94F39398FF0845062EB /* Frameworks */, ); buildRules = ( ); @@ -191,7 +191,7 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 3AAEDA8BA83E71CC34259A37 /* [CP] Check Pods Manifest.lock */, + 15FA0791F2F6E4DEC3602581 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, @@ -269,7 +269,7 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 3AAEDA8BA83E71CC34259A37 /* [CP] Check Pods Manifest.lock */ = { + 15FA0791F2F6E4DEC3602581 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -291,58 +291,58 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + 1A41435D909B4A5BA59DA804 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( - "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "Thin Binary"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); - name = "Run Script"; + name = "Thin Binary"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - C143E5EEC573FBD89B16A658 /* [CP] Check Pods Manifest.lock */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( ); + name = "Run Script"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; /* End PBXShellScriptBuildPhase section */ @@ -469,7 +469,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 531021BCFBF6DEA7A588EEFB /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 0FBB97D3B77C3F8ABBBA69D1 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -487,7 +487,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = FFE5027C7AD199E12A7AF98E /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 5220EC7DF66B6FF52474A86B /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -503,7 +503,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = D324E46E5A8253E05C3A901E /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 6641BE7C3FD295E85E2B1262 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/next-gen-ui/step_05_a/linux/CMakeLists.txt b/next-gen-ui/step_05_a/linux/CMakeLists.txt index ccbe56dd39..e49da8fe41 100644 --- a/next-gen-ui/step_05_a/linux/CMakeLists.txt +++ b/next-gen-ui/step_05_a/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/next-gen-ui/step_05_a/linux/my_application.cc b/next-gen-ui/step_05_a/linux/my_application.cc deleted file mode 100644 index d5581db5c1..0000000000 --- a/next-gen-ui/step_05_a/linux/my_application.cc +++ /dev/null @@ -1,124 +0,0 @@ -#include "my_application.h" - -#include -#ifdef GDK_WINDOWING_X11 -#include -#endif - -#include "flutter/generated_plugin_registrant.h" - -struct _MyApplication { - GtkApplication parent_instance; - char** dart_entrypoint_arguments; -}; - -G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) - -// Implements GApplication::activate. -static void my_application_activate(GApplication* application) { - MyApplication* self = MY_APPLICATION(application); - GtkWindow* window = - GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); - - // Use a header bar when running in GNOME as this is the common style used - // by applications and is the setup most users will be using (e.g. Ubuntu - // desktop). - // If running on X and not using GNOME then just use a traditional title bar - // in case the window manager does more exotic layout, e.g. tiling. - // If running on Wayland assume the header bar will work (may need changing - // if future cases occur). - gboolean use_header_bar = TRUE; -#ifdef GDK_WINDOWING_X11 - GdkScreen* screen = gtk_window_get_screen(window); - if (GDK_IS_X11_SCREEN(screen)) { - const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); - if (g_strcmp0(wm_name, "GNOME Shell") != 0) { - use_header_bar = FALSE; - } - } -#endif - if (use_header_bar) { - GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); - gtk_widget_show(GTK_WIDGET(header_bar)); - gtk_header_bar_set_title(header_bar, "next_gen_ui"); - gtk_header_bar_set_show_close_button(header_bar, TRUE); - gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); - } else { - gtk_window_set_title(window, "next_gen_ui"); - } - - gtk_window_set_default_size(window, 1280, 720); - gtk_widget_show(GTK_WIDGET(window)); - - g_autoptr(FlDartProject) project = fl_dart_project_new(); - fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); - - FlView* view = fl_view_new(project); - gtk_widget_show(GTK_WIDGET(view)); - gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); - - fl_register_plugins(FL_PLUGIN_REGISTRY(view)); - - gtk_widget_grab_focus(GTK_WIDGET(view)); -} - -// Implements GApplication::local_command_line. -static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { - MyApplication* self = MY_APPLICATION(application); - // Strip out the first argument as it is the binary name. - self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); - - g_autoptr(GError) error = nullptr; - if (!g_application_register(application, nullptr, &error)) { - g_warning("Failed to register: %s", error->message); - *exit_status = 1; - return TRUE; - } - - g_application_activate(application); - *exit_status = 0; - - return TRUE; -} - -// Implements GApplication::startup. -static void my_application_startup(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application startup. - - G_APPLICATION_CLASS(my_application_parent_class)->startup(application); -} - -// Implements GApplication::shutdown. -static void my_application_shutdown(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application shutdown. - - G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); -} - -// Implements GObject::dispose. -static void my_application_dispose(GObject* object) { - MyApplication* self = MY_APPLICATION(object); - g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); - G_OBJECT_CLASS(my_application_parent_class)->dispose(object); -} - -static void my_application_class_init(MyApplicationClass* klass) { - G_APPLICATION_CLASS(klass)->activate = my_application_activate; - G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; - G_APPLICATION_CLASS(klass)->startup = my_application_startup; - G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; - G_OBJECT_CLASS(klass)->dispose = my_application_dispose; -} - -static void my_application_init(MyApplication* self) {} - -MyApplication* my_application_new() { - return MY_APPLICATION(g_object_new(my_application_get_type(), - "application-id", APPLICATION_ID, - "flags", G_APPLICATION_NON_UNIQUE, - nullptr)); -} diff --git a/next-gen-ui/step_05_a/linux/runner/CMakeLists.txt b/next-gen-ui/step_05_a/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/next-gen-ui/step_05_a/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/next-gen-ui/step_05_a/linux/main.cc b/next-gen-ui/step_05_a/linux/runner/main.cc similarity index 100% rename from next-gen-ui/step_05_a/linux/main.cc rename to next-gen-ui/step_05_a/linux/runner/main.cc diff --git a/next-gen-ui/step_05_a/linux/runner/my_application.cc b/next-gen-ui/step_05_a/linux/runner/my_application.cc new file mode 100644 index 0000000000..6fa9821b9c --- /dev/null +++ b/next-gen-ui/step_05_a/linux/runner/my_application.cc @@ -0,0 +1,130 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "next_gen_ui"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "next_gen_ui"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/next-gen-ui/step_05_a/linux/my_application.h b/next-gen-ui/step_05_a/linux/runner/my_application.h similarity index 100% rename from next-gen-ui/step_05_a/linux/my_application.h rename to next-gen-ui/step_05_a/linux/runner/my_application.h diff --git a/next-gen-ui/step_05_a/macos/Runner.xcodeproj/project.pbxproj b/next-gen-ui/step_05_a/macos/Runner.xcodeproj/project.pbxproj index a260461a61..5ca8a3231e 100644 --- a/next-gen-ui/step_05_a/macos/Runner.xcodeproj/project.pbxproj +++ b/next-gen-ui/step_05_a/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ + 2E6B87224BF317E31F74B0D6 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FF5748F504BD5E56042DEADB /* Pods_RunnerTests.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 44BBBA76B13EEB94F9DCE170 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2984A5AD2129F6C671F00164 /* Pods_Runner.framework */; }; - 4E0858D90CA55751E7BE4898 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 39010BEDE01EF3B7F309CBE7 /* Pods_RunnerTests.framework */; }; + 56635C0EC97E7F426A37B2E0 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 70907F10D88B462804477CEC /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,13 +62,12 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 2984A5AD2129F6C671F00164 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 2CF773F4C2430EAC834646B3 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 1084579C46BDDCE9E7DF16AC /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 2D475486DFFA8C60E5710DB0 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; }; - 337BA55CC083EAE0C41E02E7 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 33CC10ED2044A3C60003C045 /* next_gen_ui.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = next_gen_ui.app; sourceTree = BUILT_PRODUCTS_DIR; }; 33CC10F02044A3C60003C045 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 33CC10F22044A3C60003C045 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = Runner/Assets.xcassets; sourceTree = ""; }; @@ -78,16 +77,17 @@ 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Debug.xcconfig"; sourceTree = ""; }; 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Release.xcconfig"; sourceTree = ""; }; 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = "Flutter-Generated.xcconfig"; path = "ephemeral/Flutter-Generated.xcconfig"; sourceTree = ""; }; - 33D3C1661150E5CF9FD9C336 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 39010BEDE01EF3B7F309CBE7 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 6B406084562E7BBF7435D2FF /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 70907F10D88B462804477CEC /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 7FDC8102767980E531E73AC5 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 812DEB8E378C986DF221D831 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 86295B0784C4F550CBE8BD69 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 949451BBF3DF607E13DBB265 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - A4F4B5072EE42AC6A44D036B /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + E57940CC1AE193EDBC7E60BC /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + FF5748F504BD5E56042DEADB /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 4E0858D90CA55751E7BE4898 /* Pods_RunnerTests.framework in Frameworks */, + 2E6B87224BF317E31F74B0D6 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,22 +103,22 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 44BBBA76B13EEB94F9DCE170 /* Pods_Runner.framework in Frameworks */, + 56635C0EC97E7F426A37B2E0 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 1C1096D0206D3CBABCC06686 /* Pods */ = { + 0EB950B6EBBA8562ED05E9C6 /* Pods */ = { isa = PBXGroup; children = ( - 2CF773F4C2430EAC834646B3 /* Pods-Runner.debug.xcconfig */, - 7FDC8102767980E531E73AC5 /* Pods-Runner.release.xcconfig */, - 6B406084562E7BBF7435D2FF /* Pods-Runner.profile.xcconfig */, - A4F4B5072EE42AC6A44D036B /* Pods-RunnerTests.debug.xcconfig */, - 33D3C1661150E5CF9FD9C336 /* Pods-RunnerTests.release.xcconfig */, - 337BA55CC083EAE0C41E02E7 /* Pods-RunnerTests.profile.xcconfig */, + 1084579C46BDDCE9E7DF16AC /* Pods-Runner.debug.xcconfig */, + 2D475486DFFA8C60E5710DB0 /* Pods-Runner.release.xcconfig */, + E57940CC1AE193EDBC7E60BC /* Pods-Runner.profile.xcconfig */, + 86295B0784C4F550CBE8BD69 /* Pods-RunnerTests.debug.xcconfig */, + 949451BBF3DF607E13DBB265 /* Pods-RunnerTests.release.xcconfig */, + 812DEB8E378C986DF221D831 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -151,7 +151,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 1C1096D0206D3CBABCC06686 /* Pods */, + 0EB950B6EBBA8562ED05E9C6 /* Pods */, ); sourceTree = ""; }; @@ -202,8 +202,8 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - 2984A5AD2129F6C671F00164 /* Pods_Runner.framework */, - 39010BEDE01EF3B7F309CBE7 /* Pods_RunnerTests.framework */, + 70907F10D88B462804477CEC /* Pods_Runner.framework */, + FF5748F504BD5E56042DEADB /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - FE0C7B1BBD5CA48F75CD6536 /* [CP] Check Pods Manifest.lock */, + 24CA264AC7C1AA37F685BC19 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - BF702552288C4603E192F687 /* [CP] Check Pods Manifest.lock */, + 9936C57FFCBF37419AE7561E /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 978AFB595B79A33D319A948F /* [CP] Embed Pods Frameworks */, + 038DC0986A46E5F2839BD12E /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,84 +323,84 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 3399D490228B24CF009A79C7 /* ShellScript */ = { + 038DC0986A46E5F2839BD12E /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - ); + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; }; - 33CC111E2044C6BF0003C045 /* ShellScript */ = { + 24CA264AC7C1AA37F685BC19 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - Flutter/ephemeral/FlutterInputs.xcfilelist, ); inputPaths = ( - Flutter/ephemeral/tripwire, + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - Flutter/ephemeral/FlutterOutputs.xcfilelist, ); outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - 978AFB595B79A33D319A948F /* [CP] Embed Pods Frameworks */ = { + 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + ); outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; + shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; }; - BF702552288C4603E192F687 /* [CP] Check Pods Manifest.lock */ = { + 33CC111E2044C6BF0003C045 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + Flutter/ephemeral/FlutterInputs.xcfilelist, ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", + Flutter/ephemeral/tripwire, ); - name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( + Flutter/ephemeral/FlutterOutputs.xcfilelist, ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - FE0C7B1BBD5CA48F75CD6536 /* [CP] Check Pods Manifest.lock */ = { + 9936C57FFCBF37419AE7561E /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -415,7 +415,7 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = A4F4B5072EE42AC6A44D036B /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 86295B0784C4F550CBE8BD69 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 33D3C1661150E5CF9FD9C336 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 949451BBF3DF607E13DBB265 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 337BA55CC083EAE0C41E02E7 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 812DEB8E378C986DF221D831 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/next-gen-ui/step_05_a/web/index.html b/next-gen-ui/step_05_a/web/index.html index ed2ea921e4..d0a2517e72 100644 --- a/next-gen-ui/step_05_a/web/index.html +++ b/next-gen-ui/step_05_a/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/next-gen-ui/step_05_b/ios/Runner.xcodeproj/project.pbxproj b/next-gen-ui/step_05_b/ios/Runner.xcodeproj/project.pbxproj index 43b8398d4f..8f047bdf00 100644 --- a/next-gen-ui/step_05_b/ios/Runner.xcodeproj/project.pbxproj +++ b/next-gen-ui/step_05_b/ios/Runner.xcodeproj/project.pbxproj @@ -11,11 +11,11 @@ 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; - 95B86EC706B280ECBF05B340 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F29266F85C81E223DE38826F /* Pods_RunnerTests.framework */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - E9B1620F2EF5AF6175681809 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DE20D8731F5AC68BA1712A5A /* Pods_Runner.framework */; }; + B62141185A2A64CE6AE671F2 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B1CF946366B840164A5B6A19 /* Pods_Runner.framework */; }; + B81AE38132A98A311F8F51B8 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 249FB81AECD9AE84FFA40AD0 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,51 +42,60 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 0FBB97D3B77C3F8ABBBA69D1 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 1065108C466C107C635700F4 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; + 249FB81AECD9AE84FFA40AD0 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 531021BCFBF6DEA7A588EEFB /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 5C244634881A8C4BD75C5C03 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 5220EC7DF66B6FF52474A86B /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 64F96334240D4715F67078C9 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 6641BE7C3FD295E85E2B1262 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 8094A5C0BD3F742D973F4EBB /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; + 9790F6561207E583E84D4FF9 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - D324E46E5A8253E05C3A901E /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - DC699C7AADC6A46B95166F6E /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - DE20D8731F5AC68BA1712A5A /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - F29266F85C81E223DE38826F /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - FFE5027C7AD199E12A7AF98E /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + B1CF946366B840164A5B6A19 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 344BA4708047A433A26140BD /* Frameworks */ = { + 97C146EB1CF9000F007C117D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 95B86EC706B280ECBF05B340 /* Pods_RunnerTests.framework in Frameworks */, + B62141185A2A64CE6AE671F2 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 97C146EB1CF9000F007C117D /* Frameworks */ = { + C266D94F39398FF0845062EB /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - E9B1620F2EF5AF6175681809 /* Pods_Runner.framework in Frameworks */, + B81AE38132A98A311F8F51B8 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 29779CA63CE39E764210D572 /* Frameworks */ = { + isa = PBXGroup; + children = ( + B1CF946366B840164A5B6A19 /* Pods_Runner.framework */, + 249FB81AECD9AE84FFA40AD0 /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; 331C8082294A63A400263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -95,15 +104,15 @@ path = RunnerTests; sourceTree = ""; }; - 6655F551DEE09BD8E2ABAAD2 /* Pods */ = { + 67CB01004931F5EAE1484002 /* Pods */ = { isa = PBXGroup; children = ( - 8094A5C0BD3F742D973F4EBB /* Pods-Runner.debug.xcconfig */, - 5C244634881A8C4BD75C5C03 /* Pods-Runner.release.xcconfig */, - DC699C7AADC6A46B95166F6E /* Pods-Runner.profile.xcconfig */, - 531021BCFBF6DEA7A588EEFB /* Pods-RunnerTests.debug.xcconfig */, - FFE5027C7AD199E12A7AF98E /* Pods-RunnerTests.release.xcconfig */, - D324E46E5A8253E05C3A901E /* Pods-RunnerTests.profile.xcconfig */, + 64F96334240D4715F67078C9 /* Pods-Runner.debug.xcconfig */, + 1065108C466C107C635700F4 /* Pods-Runner.release.xcconfig */, + 9790F6561207E583E84D4FF9 /* Pods-Runner.profile.xcconfig */, + 0FBB97D3B77C3F8ABBBA69D1 /* Pods-RunnerTests.debug.xcconfig */, + 5220EC7DF66B6FF52474A86B /* Pods-RunnerTests.release.xcconfig */, + 6641BE7C3FD295E85E2B1262 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -127,8 +136,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - 6655F551DEE09BD8E2ABAAD2 /* Pods */, - AB471AC81B5F3E3EAC08510D /* Frameworks */, + 67CB01004931F5EAE1484002 /* Pods */, + 29779CA63CE39E764210D572 /* Frameworks */, ); sourceTree = ""; }; @@ -156,15 +165,6 @@ path = Runner; sourceTree = ""; }; - AB471AC81B5F3E3EAC08510D /* Frameworks */ = { - isa = PBXGroup; - children = ( - DE20D8731F5AC68BA1712A5A /* Pods_Runner.framework */, - F29266F85C81E223DE38826F /* Pods_RunnerTests.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - C143E5EEC573FBD89B16A658 /* [CP] Check Pods Manifest.lock */, + 1A41435D909B4A5BA59DA804 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 344BA4708047A433A26140BD /* Frameworks */, + C266D94F39398FF0845062EB /* Frameworks */, ); buildRules = ( ); @@ -191,7 +191,7 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 3AAEDA8BA83E71CC34259A37 /* [CP] Check Pods Manifest.lock */, + 15FA0791F2F6E4DEC3602581 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, @@ -269,7 +269,7 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 3AAEDA8BA83E71CC34259A37 /* [CP] Check Pods Manifest.lock */ = { + 15FA0791F2F6E4DEC3602581 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -291,58 +291,58 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + 1A41435D909B4A5BA59DA804 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( - "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "Thin Binary"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); - name = "Run Script"; + name = "Thin Binary"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - C143E5EEC573FBD89B16A658 /* [CP] Check Pods Manifest.lock */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( ); + name = "Run Script"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; /* End PBXShellScriptBuildPhase section */ @@ -469,7 +469,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 531021BCFBF6DEA7A588EEFB /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 0FBB97D3B77C3F8ABBBA69D1 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -487,7 +487,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = FFE5027C7AD199E12A7AF98E /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 5220EC7DF66B6FF52474A86B /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -503,7 +503,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = D324E46E5A8253E05C3A901E /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 6641BE7C3FD295E85E2B1262 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/next-gen-ui/step_05_b/linux/CMakeLists.txt b/next-gen-ui/step_05_b/linux/CMakeLists.txt index ccbe56dd39..e49da8fe41 100644 --- a/next-gen-ui/step_05_b/linux/CMakeLists.txt +++ b/next-gen-ui/step_05_b/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/next-gen-ui/step_05_b/linux/my_application.cc b/next-gen-ui/step_05_b/linux/my_application.cc deleted file mode 100644 index d5581db5c1..0000000000 --- a/next-gen-ui/step_05_b/linux/my_application.cc +++ /dev/null @@ -1,124 +0,0 @@ -#include "my_application.h" - -#include -#ifdef GDK_WINDOWING_X11 -#include -#endif - -#include "flutter/generated_plugin_registrant.h" - -struct _MyApplication { - GtkApplication parent_instance; - char** dart_entrypoint_arguments; -}; - -G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) - -// Implements GApplication::activate. -static void my_application_activate(GApplication* application) { - MyApplication* self = MY_APPLICATION(application); - GtkWindow* window = - GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); - - // Use a header bar when running in GNOME as this is the common style used - // by applications and is the setup most users will be using (e.g. Ubuntu - // desktop). - // If running on X and not using GNOME then just use a traditional title bar - // in case the window manager does more exotic layout, e.g. tiling. - // If running on Wayland assume the header bar will work (may need changing - // if future cases occur). - gboolean use_header_bar = TRUE; -#ifdef GDK_WINDOWING_X11 - GdkScreen* screen = gtk_window_get_screen(window); - if (GDK_IS_X11_SCREEN(screen)) { - const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); - if (g_strcmp0(wm_name, "GNOME Shell") != 0) { - use_header_bar = FALSE; - } - } -#endif - if (use_header_bar) { - GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); - gtk_widget_show(GTK_WIDGET(header_bar)); - gtk_header_bar_set_title(header_bar, "next_gen_ui"); - gtk_header_bar_set_show_close_button(header_bar, TRUE); - gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); - } else { - gtk_window_set_title(window, "next_gen_ui"); - } - - gtk_window_set_default_size(window, 1280, 720); - gtk_widget_show(GTK_WIDGET(window)); - - g_autoptr(FlDartProject) project = fl_dart_project_new(); - fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); - - FlView* view = fl_view_new(project); - gtk_widget_show(GTK_WIDGET(view)); - gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); - - fl_register_plugins(FL_PLUGIN_REGISTRY(view)); - - gtk_widget_grab_focus(GTK_WIDGET(view)); -} - -// Implements GApplication::local_command_line. -static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { - MyApplication* self = MY_APPLICATION(application); - // Strip out the first argument as it is the binary name. - self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); - - g_autoptr(GError) error = nullptr; - if (!g_application_register(application, nullptr, &error)) { - g_warning("Failed to register: %s", error->message); - *exit_status = 1; - return TRUE; - } - - g_application_activate(application); - *exit_status = 0; - - return TRUE; -} - -// Implements GApplication::startup. -static void my_application_startup(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application startup. - - G_APPLICATION_CLASS(my_application_parent_class)->startup(application); -} - -// Implements GApplication::shutdown. -static void my_application_shutdown(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application shutdown. - - G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); -} - -// Implements GObject::dispose. -static void my_application_dispose(GObject* object) { - MyApplication* self = MY_APPLICATION(object); - g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); - G_OBJECT_CLASS(my_application_parent_class)->dispose(object); -} - -static void my_application_class_init(MyApplicationClass* klass) { - G_APPLICATION_CLASS(klass)->activate = my_application_activate; - G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; - G_APPLICATION_CLASS(klass)->startup = my_application_startup; - G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; - G_OBJECT_CLASS(klass)->dispose = my_application_dispose; -} - -static void my_application_init(MyApplication* self) {} - -MyApplication* my_application_new() { - return MY_APPLICATION(g_object_new(my_application_get_type(), - "application-id", APPLICATION_ID, - "flags", G_APPLICATION_NON_UNIQUE, - nullptr)); -} diff --git a/next-gen-ui/step_05_b/linux/runner/CMakeLists.txt b/next-gen-ui/step_05_b/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/next-gen-ui/step_05_b/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/next-gen-ui/step_05_b/linux/main.cc b/next-gen-ui/step_05_b/linux/runner/main.cc similarity index 100% rename from next-gen-ui/step_05_b/linux/main.cc rename to next-gen-ui/step_05_b/linux/runner/main.cc diff --git a/next-gen-ui/step_05_b/linux/runner/my_application.cc b/next-gen-ui/step_05_b/linux/runner/my_application.cc new file mode 100644 index 0000000000..6fa9821b9c --- /dev/null +++ b/next-gen-ui/step_05_b/linux/runner/my_application.cc @@ -0,0 +1,130 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "next_gen_ui"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "next_gen_ui"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/next-gen-ui/step_05_b/linux/my_application.h b/next-gen-ui/step_05_b/linux/runner/my_application.h similarity index 100% rename from next-gen-ui/step_05_b/linux/my_application.h rename to next-gen-ui/step_05_b/linux/runner/my_application.h diff --git a/next-gen-ui/step_05_b/macos/Runner.xcodeproj/project.pbxproj b/next-gen-ui/step_05_b/macos/Runner.xcodeproj/project.pbxproj index a260461a61..5ca8a3231e 100644 --- a/next-gen-ui/step_05_b/macos/Runner.xcodeproj/project.pbxproj +++ b/next-gen-ui/step_05_b/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ + 2E6B87224BF317E31F74B0D6 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FF5748F504BD5E56042DEADB /* Pods_RunnerTests.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 44BBBA76B13EEB94F9DCE170 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2984A5AD2129F6C671F00164 /* Pods_Runner.framework */; }; - 4E0858D90CA55751E7BE4898 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 39010BEDE01EF3B7F309CBE7 /* Pods_RunnerTests.framework */; }; + 56635C0EC97E7F426A37B2E0 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 70907F10D88B462804477CEC /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,13 +62,12 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 2984A5AD2129F6C671F00164 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 2CF773F4C2430EAC834646B3 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 1084579C46BDDCE9E7DF16AC /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 2D475486DFFA8C60E5710DB0 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; }; - 337BA55CC083EAE0C41E02E7 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 33CC10ED2044A3C60003C045 /* next_gen_ui.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = next_gen_ui.app; sourceTree = BUILT_PRODUCTS_DIR; }; 33CC10F02044A3C60003C045 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 33CC10F22044A3C60003C045 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = Runner/Assets.xcassets; sourceTree = ""; }; @@ -78,16 +77,17 @@ 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Debug.xcconfig"; sourceTree = ""; }; 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Release.xcconfig"; sourceTree = ""; }; 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = "Flutter-Generated.xcconfig"; path = "ephemeral/Flutter-Generated.xcconfig"; sourceTree = ""; }; - 33D3C1661150E5CF9FD9C336 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 39010BEDE01EF3B7F309CBE7 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 6B406084562E7BBF7435D2FF /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 70907F10D88B462804477CEC /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 7FDC8102767980E531E73AC5 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 812DEB8E378C986DF221D831 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 86295B0784C4F550CBE8BD69 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 949451BBF3DF607E13DBB265 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - A4F4B5072EE42AC6A44D036B /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + E57940CC1AE193EDBC7E60BC /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + FF5748F504BD5E56042DEADB /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 4E0858D90CA55751E7BE4898 /* Pods_RunnerTests.framework in Frameworks */, + 2E6B87224BF317E31F74B0D6 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,22 +103,22 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 44BBBA76B13EEB94F9DCE170 /* Pods_Runner.framework in Frameworks */, + 56635C0EC97E7F426A37B2E0 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 1C1096D0206D3CBABCC06686 /* Pods */ = { + 0EB950B6EBBA8562ED05E9C6 /* Pods */ = { isa = PBXGroup; children = ( - 2CF773F4C2430EAC834646B3 /* Pods-Runner.debug.xcconfig */, - 7FDC8102767980E531E73AC5 /* Pods-Runner.release.xcconfig */, - 6B406084562E7BBF7435D2FF /* Pods-Runner.profile.xcconfig */, - A4F4B5072EE42AC6A44D036B /* Pods-RunnerTests.debug.xcconfig */, - 33D3C1661150E5CF9FD9C336 /* Pods-RunnerTests.release.xcconfig */, - 337BA55CC083EAE0C41E02E7 /* Pods-RunnerTests.profile.xcconfig */, + 1084579C46BDDCE9E7DF16AC /* Pods-Runner.debug.xcconfig */, + 2D475486DFFA8C60E5710DB0 /* Pods-Runner.release.xcconfig */, + E57940CC1AE193EDBC7E60BC /* Pods-Runner.profile.xcconfig */, + 86295B0784C4F550CBE8BD69 /* Pods-RunnerTests.debug.xcconfig */, + 949451BBF3DF607E13DBB265 /* Pods-RunnerTests.release.xcconfig */, + 812DEB8E378C986DF221D831 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -151,7 +151,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 1C1096D0206D3CBABCC06686 /* Pods */, + 0EB950B6EBBA8562ED05E9C6 /* Pods */, ); sourceTree = ""; }; @@ -202,8 +202,8 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - 2984A5AD2129F6C671F00164 /* Pods_Runner.framework */, - 39010BEDE01EF3B7F309CBE7 /* Pods_RunnerTests.framework */, + 70907F10D88B462804477CEC /* Pods_Runner.framework */, + FF5748F504BD5E56042DEADB /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - FE0C7B1BBD5CA48F75CD6536 /* [CP] Check Pods Manifest.lock */, + 24CA264AC7C1AA37F685BC19 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - BF702552288C4603E192F687 /* [CP] Check Pods Manifest.lock */, + 9936C57FFCBF37419AE7561E /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 978AFB595B79A33D319A948F /* [CP] Embed Pods Frameworks */, + 038DC0986A46E5F2839BD12E /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,84 +323,84 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 3399D490228B24CF009A79C7 /* ShellScript */ = { + 038DC0986A46E5F2839BD12E /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - ); + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; }; - 33CC111E2044C6BF0003C045 /* ShellScript */ = { + 24CA264AC7C1AA37F685BC19 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - Flutter/ephemeral/FlutterInputs.xcfilelist, ); inputPaths = ( - Flutter/ephemeral/tripwire, + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - Flutter/ephemeral/FlutterOutputs.xcfilelist, ); outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - 978AFB595B79A33D319A948F /* [CP] Embed Pods Frameworks */ = { + 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + ); outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; + shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; }; - BF702552288C4603E192F687 /* [CP] Check Pods Manifest.lock */ = { + 33CC111E2044C6BF0003C045 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + Flutter/ephemeral/FlutterInputs.xcfilelist, ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", + Flutter/ephemeral/tripwire, ); - name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( + Flutter/ephemeral/FlutterOutputs.xcfilelist, ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - FE0C7B1BBD5CA48F75CD6536 /* [CP] Check Pods Manifest.lock */ = { + 9936C57FFCBF37419AE7561E /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -415,7 +415,7 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = A4F4B5072EE42AC6A44D036B /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 86295B0784C4F550CBE8BD69 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 33D3C1661150E5CF9FD9C336 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 949451BBF3DF607E13DBB265 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 337BA55CC083EAE0C41E02E7 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 812DEB8E378C986DF221D831 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/next-gen-ui/step_05_b/web/index.html b/next-gen-ui/step_05_b/web/index.html index ed2ea921e4..d0a2517e72 100644 --- a/next-gen-ui/step_05_b/web/index.html +++ b/next-gen-ui/step_05_b/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/next-gen-ui/step_06/ios/Runner.xcodeproj/project.pbxproj b/next-gen-ui/step_06/ios/Runner.xcodeproj/project.pbxproj index 43b8398d4f..8f047bdf00 100644 --- a/next-gen-ui/step_06/ios/Runner.xcodeproj/project.pbxproj +++ b/next-gen-ui/step_06/ios/Runner.xcodeproj/project.pbxproj @@ -11,11 +11,11 @@ 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; - 95B86EC706B280ECBF05B340 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F29266F85C81E223DE38826F /* Pods_RunnerTests.framework */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - E9B1620F2EF5AF6175681809 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DE20D8731F5AC68BA1712A5A /* Pods_Runner.framework */; }; + B62141185A2A64CE6AE671F2 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B1CF946366B840164A5B6A19 /* Pods_Runner.framework */; }; + B81AE38132A98A311F8F51B8 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 249FB81AECD9AE84FFA40AD0 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,51 +42,60 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 0FBB97D3B77C3F8ABBBA69D1 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 1065108C466C107C635700F4 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; + 249FB81AECD9AE84FFA40AD0 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 531021BCFBF6DEA7A588EEFB /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 5C244634881A8C4BD75C5C03 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 5220EC7DF66B6FF52474A86B /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 64F96334240D4715F67078C9 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 6641BE7C3FD295E85E2B1262 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 8094A5C0BD3F742D973F4EBB /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; + 9790F6561207E583E84D4FF9 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - D324E46E5A8253E05C3A901E /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - DC699C7AADC6A46B95166F6E /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - DE20D8731F5AC68BA1712A5A /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - F29266F85C81E223DE38826F /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - FFE5027C7AD199E12A7AF98E /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + B1CF946366B840164A5B6A19 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 344BA4708047A433A26140BD /* Frameworks */ = { + 97C146EB1CF9000F007C117D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 95B86EC706B280ECBF05B340 /* Pods_RunnerTests.framework in Frameworks */, + B62141185A2A64CE6AE671F2 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 97C146EB1CF9000F007C117D /* Frameworks */ = { + C266D94F39398FF0845062EB /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - E9B1620F2EF5AF6175681809 /* Pods_Runner.framework in Frameworks */, + B81AE38132A98A311F8F51B8 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 29779CA63CE39E764210D572 /* Frameworks */ = { + isa = PBXGroup; + children = ( + B1CF946366B840164A5B6A19 /* Pods_Runner.framework */, + 249FB81AECD9AE84FFA40AD0 /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; 331C8082294A63A400263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -95,15 +104,15 @@ path = RunnerTests; sourceTree = ""; }; - 6655F551DEE09BD8E2ABAAD2 /* Pods */ = { + 67CB01004931F5EAE1484002 /* Pods */ = { isa = PBXGroup; children = ( - 8094A5C0BD3F742D973F4EBB /* Pods-Runner.debug.xcconfig */, - 5C244634881A8C4BD75C5C03 /* Pods-Runner.release.xcconfig */, - DC699C7AADC6A46B95166F6E /* Pods-Runner.profile.xcconfig */, - 531021BCFBF6DEA7A588EEFB /* Pods-RunnerTests.debug.xcconfig */, - FFE5027C7AD199E12A7AF98E /* Pods-RunnerTests.release.xcconfig */, - D324E46E5A8253E05C3A901E /* Pods-RunnerTests.profile.xcconfig */, + 64F96334240D4715F67078C9 /* Pods-Runner.debug.xcconfig */, + 1065108C466C107C635700F4 /* Pods-Runner.release.xcconfig */, + 9790F6561207E583E84D4FF9 /* Pods-Runner.profile.xcconfig */, + 0FBB97D3B77C3F8ABBBA69D1 /* Pods-RunnerTests.debug.xcconfig */, + 5220EC7DF66B6FF52474A86B /* Pods-RunnerTests.release.xcconfig */, + 6641BE7C3FD295E85E2B1262 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -127,8 +136,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - 6655F551DEE09BD8E2ABAAD2 /* Pods */, - AB471AC81B5F3E3EAC08510D /* Frameworks */, + 67CB01004931F5EAE1484002 /* Pods */, + 29779CA63CE39E764210D572 /* Frameworks */, ); sourceTree = ""; }; @@ -156,15 +165,6 @@ path = Runner; sourceTree = ""; }; - AB471AC81B5F3E3EAC08510D /* Frameworks */ = { - isa = PBXGroup; - children = ( - DE20D8731F5AC68BA1712A5A /* Pods_Runner.framework */, - F29266F85C81E223DE38826F /* Pods_RunnerTests.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - C143E5EEC573FBD89B16A658 /* [CP] Check Pods Manifest.lock */, + 1A41435D909B4A5BA59DA804 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 344BA4708047A433A26140BD /* Frameworks */, + C266D94F39398FF0845062EB /* Frameworks */, ); buildRules = ( ); @@ -191,7 +191,7 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 3AAEDA8BA83E71CC34259A37 /* [CP] Check Pods Manifest.lock */, + 15FA0791F2F6E4DEC3602581 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, @@ -269,7 +269,7 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 3AAEDA8BA83E71CC34259A37 /* [CP] Check Pods Manifest.lock */ = { + 15FA0791F2F6E4DEC3602581 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -291,58 +291,58 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + 1A41435D909B4A5BA59DA804 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( - "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "Thin Binary"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); - name = "Run Script"; + name = "Thin Binary"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - C143E5EEC573FBD89B16A658 /* [CP] Check Pods Manifest.lock */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( ); + name = "Run Script"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; /* End PBXShellScriptBuildPhase section */ @@ -469,7 +469,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 531021BCFBF6DEA7A588EEFB /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 0FBB97D3B77C3F8ABBBA69D1 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -487,7 +487,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = FFE5027C7AD199E12A7AF98E /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 5220EC7DF66B6FF52474A86B /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -503,7 +503,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = D324E46E5A8253E05C3A901E /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 6641BE7C3FD295E85E2B1262 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/next-gen-ui/step_06/linux/CMakeLists.txt b/next-gen-ui/step_06/linux/CMakeLists.txt index ccbe56dd39..e49da8fe41 100644 --- a/next-gen-ui/step_06/linux/CMakeLists.txt +++ b/next-gen-ui/step_06/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/next-gen-ui/step_06/linux/my_application.cc b/next-gen-ui/step_06/linux/my_application.cc deleted file mode 100644 index d5581db5c1..0000000000 --- a/next-gen-ui/step_06/linux/my_application.cc +++ /dev/null @@ -1,124 +0,0 @@ -#include "my_application.h" - -#include -#ifdef GDK_WINDOWING_X11 -#include -#endif - -#include "flutter/generated_plugin_registrant.h" - -struct _MyApplication { - GtkApplication parent_instance; - char** dart_entrypoint_arguments; -}; - -G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) - -// Implements GApplication::activate. -static void my_application_activate(GApplication* application) { - MyApplication* self = MY_APPLICATION(application); - GtkWindow* window = - GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); - - // Use a header bar when running in GNOME as this is the common style used - // by applications and is the setup most users will be using (e.g. Ubuntu - // desktop). - // If running on X and not using GNOME then just use a traditional title bar - // in case the window manager does more exotic layout, e.g. tiling. - // If running on Wayland assume the header bar will work (may need changing - // if future cases occur). - gboolean use_header_bar = TRUE; -#ifdef GDK_WINDOWING_X11 - GdkScreen* screen = gtk_window_get_screen(window); - if (GDK_IS_X11_SCREEN(screen)) { - const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); - if (g_strcmp0(wm_name, "GNOME Shell") != 0) { - use_header_bar = FALSE; - } - } -#endif - if (use_header_bar) { - GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); - gtk_widget_show(GTK_WIDGET(header_bar)); - gtk_header_bar_set_title(header_bar, "next_gen_ui"); - gtk_header_bar_set_show_close_button(header_bar, TRUE); - gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); - } else { - gtk_window_set_title(window, "next_gen_ui"); - } - - gtk_window_set_default_size(window, 1280, 720); - gtk_widget_show(GTK_WIDGET(window)); - - g_autoptr(FlDartProject) project = fl_dart_project_new(); - fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); - - FlView* view = fl_view_new(project); - gtk_widget_show(GTK_WIDGET(view)); - gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); - - fl_register_plugins(FL_PLUGIN_REGISTRY(view)); - - gtk_widget_grab_focus(GTK_WIDGET(view)); -} - -// Implements GApplication::local_command_line. -static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { - MyApplication* self = MY_APPLICATION(application); - // Strip out the first argument as it is the binary name. - self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); - - g_autoptr(GError) error = nullptr; - if (!g_application_register(application, nullptr, &error)) { - g_warning("Failed to register: %s", error->message); - *exit_status = 1; - return TRUE; - } - - g_application_activate(application); - *exit_status = 0; - - return TRUE; -} - -// Implements GApplication::startup. -static void my_application_startup(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application startup. - - G_APPLICATION_CLASS(my_application_parent_class)->startup(application); -} - -// Implements GApplication::shutdown. -static void my_application_shutdown(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application shutdown. - - G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); -} - -// Implements GObject::dispose. -static void my_application_dispose(GObject* object) { - MyApplication* self = MY_APPLICATION(object); - g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); - G_OBJECT_CLASS(my_application_parent_class)->dispose(object); -} - -static void my_application_class_init(MyApplicationClass* klass) { - G_APPLICATION_CLASS(klass)->activate = my_application_activate; - G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; - G_APPLICATION_CLASS(klass)->startup = my_application_startup; - G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; - G_OBJECT_CLASS(klass)->dispose = my_application_dispose; -} - -static void my_application_init(MyApplication* self) {} - -MyApplication* my_application_new() { - return MY_APPLICATION(g_object_new(my_application_get_type(), - "application-id", APPLICATION_ID, - "flags", G_APPLICATION_NON_UNIQUE, - nullptr)); -} diff --git a/next-gen-ui/step_06/linux/runner/CMakeLists.txt b/next-gen-ui/step_06/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/next-gen-ui/step_06/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/next-gen-ui/step_06/linux/main.cc b/next-gen-ui/step_06/linux/runner/main.cc similarity index 100% rename from next-gen-ui/step_06/linux/main.cc rename to next-gen-ui/step_06/linux/runner/main.cc diff --git a/next-gen-ui/step_06/linux/runner/my_application.cc b/next-gen-ui/step_06/linux/runner/my_application.cc new file mode 100644 index 0000000000..6fa9821b9c --- /dev/null +++ b/next-gen-ui/step_06/linux/runner/my_application.cc @@ -0,0 +1,130 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "next_gen_ui"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "next_gen_ui"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/next-gen-ui/step_06/linux/my_application.h b/next-gen-ui/step_06/linux/runner/my_application.h similarity index 100% rename from next-gen-ui/step_06/linux/my_application.h rename to next-gen-ui/step_06/linux/runner/my_application.h diff --git a/next-gen-ui/step_06/macos/Runner.xcodeproj/project.pbxproj b/next-gen-ui/step_06/macos/Runner.xcodeproj/project.pbxproj index a260461a61..5ca8a3231e 100644 --- a/next-gen-ui/step_06/macos/Runner.xcodeproj/project.pbxproj +++ b/next-gen-ui/step_06/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ + 2E6B87224BF317E31F74B0D6 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FF5748F504BD5E56042DEADB /* Pods_RunnerTests.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 44BBBA76B13EEB94F9DCE170 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2984A5AD2129F6C671F00164 /* Pods_Runner.framework */; }; - 4E0858D90CA55751E7BE4898 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 39010BEDE01EF3B7F309CBE7 /* Pods_RunnerTests.framework */; }; + 56635C0EC97E7F426A37B2E0 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 70907F10D88B462804477CEC /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,13 +62,12 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 2984A5AD2129F6C671F00164 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 2CF773F4C2430EAC834646B3 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 1084579C46BDDCE9E7DF16AC /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 2D475486DFFA8C60E5710DB0 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; }; - 337BA55CC083EAE0C41E02E7 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 33CC10ED2044A3C60003C045 /* next_gen_ui.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = next_gen_ui.app; sourceTree = BUILT_PRODUCTS_DIR; }; 33CC10F02044A3C60003C045 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 33CC10F22044A3C60003C045 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = Runner/Assets.xcassets; sourceTree = ""; }; @@ -78,16 +77,17 @@ 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Debug.xcconfig"; sourceTree = ""; }; 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Release.xcconfig"; sourceTree = ""; }; 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = "Flutter-Generated.xcconfig"; path = "ephemeral/Flutter-Generated.xcconfig"; sourceTree = ""; }; - 33D3C1661150E5CF9FD9C336 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 39010BEDE01EF3B7F309CBE7 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 6B406084562E7BBF7435D2FF /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 70907F10D88B462804477CEC /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 7FDC8102767980E531E73AC5 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 812DEB8E378C986DF221D831 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 86295B0784C4F550CBE8BD69 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 949451BBF3DF607E13DBB265 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - A4F4B5072EE42AC6A44D036B /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + E57940CC1AE193EDBC7E60BC /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + FF5748F504BD5E56042DEADB /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 4E0858D90CA55751E7BE4898 /* Pods_RunnerTests.framework in Frameworks */, + 2E6B87224BF317E31F74B0D6 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,22 +103,22 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 44BBBA76B13EEB94F9DCE170 /* Pods_Runner.framework in Frameworks */, + 56635C0EC97E7F426A37B2E0 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 1C1096D0206D3CBABCC06686 /* Pods */ = { + 0EB950B6EBBA8562ED05E9C6 /* Pods */ = { isa = PBXGroup; children = ( - 2CF773F4C2430EAC834646B3 /* Pods-Runner.debug.xcconfig */, - 7FDC8102767980E531E73AC5 /* Pods-Runner.release.xcconfig */, - 6B406084562E7BBF7435D2FF /* Pods-Runner.profile.xcconfig */, - A4F4B5072EE42AC6A44D036B /* Pods-RunnerTests.debug.xcconfig */, - 33D3C1661150E5CF9FD9C336 /* Pods-RunnerTests.release.xcconfig */, - 337BA55CC083EAE0C41E02E7 /* Pods-RunnerTests.profile.xcconfig */, + 1084579C46BDDCE9E7DF16AC /* Pods-Runner.debug.xcconfig */, + 2D475486DFFA8C60E5710DB0 /* Pods-Runner.release.xcconfig */, + E57940CC1AE193EDBC7E60BC /* Pods-Runner.profile.xcconfig */, + 86295B0784C4F550CBE8BD69 /* Pods-RunnerTests.debug.xcconfig */, + 949451BBF3DF607E13DBB265 /* Pods-RunnerTests.release.xcconfig */, + 812DEB8E378C986DF221D831 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -151,7 +151,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 1C1096D0206D3CBABCC06686 /* Pods */, + 0EB950B6EBBA8562ED05E9C6 /* Pods */, ); sourceTree = ""; }; @@ -202,8 +202,8 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - 2984A5AD2129F6C671F00164 /* Pods_Runner.framework */, - 39010BEDE01EF3B7F309CBE7 /* Pods_RunnerTests.framework */, + 70907F10D88B462804477CEC /* Pods_Runner.framework */, + FF5748F504BD5E56042DEADB /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - FE0C7B1BBD5CA48F75CD6536 /* [CP] Check Pods Manifest.lock */, + 24CA264AC7C1AA37F685BC19 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - BF702552288C4603E192F687 /* [CP] Check Pods Manifest.lock */, + 9936C57FFCBF37419AE7561E /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 978AFB595B79A33D319A948F /* [CP] Embed Pods Frameworks */, + 038DC0986A46E5F2839BD12E /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,84 +323,84 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 3399D490228B24CF009A79C7 /* ShellScript */ = { + 038DC0986A46E5F2839BD12E /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - ); + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; }; - 33CC111E2044C6BF0003C045 /* ShellScript */ = { + 24CA264AC7C1AA37F685BC19 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - Flutter/ephemeral/FlutterInputs.xcfilelist, ); inputPaths = ( - Flutter/ephemeral/tripwire, + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - Flutter/ephemeral/FlutterOutputs.xcfilelist, ); outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - 978AFB595B79A33D319A948F /* [CP] Embed Pods Frameworks */ = { + 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + ); outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; + shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; }; - BF702552288C4603E192F687 /* [CP] Check Pods Manifest.lock */ = { + 33CC111E2044C6BF0003C045 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + Flutter/ephemeral/FlutterInputs.xcfilelist, ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", + Flutter/ephemeral/tripwire, ); - name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( + Flutter/ephemeral/FlutterOutputs.xcfilelist, ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - FE0C7B1BBD5CA48F75CD6536 /* [CP] Check Pods Manifest.lock */ = { + 9936C57FFCBF37419AE7561E /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -415,7 +415,7 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = A4F4B5072EE42AC6A44D036B /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 86295B0784C4F550CBE8BD69 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 33D3C1661150E5CF9FD9C336 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 949451BBF3DF607E13DBB265 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 337BA55CC083EAE0C41E02E7 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 812DEB8E378C986DF221D831 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/next-gen-ui/step_06/web/index.html b/next-gen-ui/step_06/web/index.html index ed2ea921e4..d0a2517e72 100644 --- a/next-gen-ui/step_06/web/index.html +++ b/next-gen-ui/step_06/web/index.html @@ -21,7 +21,7 @@ - + From aebc2066f6ba0155b199dd04667048d6741ab3fb Mon Sep 17 00:00:00 2001 From: Brett Morgan Date: Wed, 13 Nov 2024 12:14:25 +1100 Subject: [PATCH 051/108] Update `testing_codelab` --- testing_codelab/step_03/linux/CMakeLists.txt | 23 +--- .../step_03/linux/runner/CMakeLists.txt | 26 ++++ .../step_03/linux/{ => runner}/main.cc | 0 .../linux/{ => runner}/my_application.cc | 6 + .../linux/{ => runner}/my_application.h | 0 testing_codelab/step_03/pubspec.yaml | 4 +- testing_codelab/step_03/web/index.html | 2 +- testing_codelab/step_04/linux/CMakeLists.txt | 23 +--- .../step_04/linux/runner/CMakeLists.txt | 26 ++++ .../step_04/linux/{ => runner}/main.cc | 0 .../linux/{ => runner}/my_application.cc | 6 + .../linux/{ => runner}/my_application.h | 0 testing_codelab/step_04/pubspec.yaml | 4 +- testing_codelab/step_04/web/index.html | 2 +- testing_codelab/step_05/linux/CMakeLists.txt | 23 +--- .../step_05/linux/runner/CMakeLists.txt | 26 ++++ .../step_05/linux/{ => runner}/main.cc | 0 .../linux/{ => runner}/my_application.cc | 6 + .../linux/{ => runner}/my_application.h | 0 testing_codelab/step_05/pubspec.yaml | 4 +- testing_codelab/step_05/web/index.html | 2 +- testing_codelab/step_06/linux/CMakeLists.txt | 23 +--- .../step_06/linux/runner/CMakeLists.txt | 26 ++++ .../step_06/linux/{ => runner}/main.cc | 0 .../linux/{ => runner}/my_application.cc | 6 + .../linux/{ => runner}/my_application.h | 0 testing_codelab/step_06/pubspec.yaml | 4 +- testing_codelab/step_06/web/index.html | 2 +- testing_codelab/step_07/linux/CMakeLists.txt | 23 +--- .../step_07/linux/my_application.cc | 124 ----------------- .../step_07/linux/runner/CMakeLists.txt | 26 ++++ .../step_07/linux/{ => runner}/main.cc | 0 .../step_07/linux/runner/my_application.cc | 130 ++++++++++++++++++ .../linux/{ => runner}/my_application.h | 0 .../macos/Runner.xcodeproj/project.pbxproj | 100 +++++++------- testing_codelab/step_07/pubspec.yaml | 4 +- testing_codelab/step_07/web/index.html | 2 +- testing_codelab/step_08/linux/CMakeLists.txt | 23 +--- .../step_08/linux/my_application.cc | 124 ----------------- .../step_08/linux/runner/CMakeLists.txt | 26 ++++ .../step_08/linux/{ => runner}/main.cc | 0 .../step_08/linux/runner/my_application.cc | 130 ++++++++++++++++++ .../linux/{ => runner}/my_application.h | 0 .../macos/Runner.xcodeproj/project.pbxproj | 100 +++++++------- testing_codelab/step_08/pubspec.yaml | 4 +- testing_codelab/step_08/web/index.html | 2 +- 46 files changed, 576 insertions(+), 486 deletions(-) create mode 100644 testing_codelab/step_03/linux/runner/CMakeLists.txt rename testing_codelab/step_03/linux/{ => runner}/main.cc (100%) rename testing_codelab/step_03/linux/{ => runner}/my_application.cc (93%) rename testing_codelab/step_03/linux/{ => runner}/my_application.h (100%) create mode 100644 testing_codelab/step_04/linux/runner/CMakeLists.txt rename testing_codelab/step_04/linux/{ => runner}/main.cc (100%) rename testing_codelab/step_04/linux/{ => runner}/my_application.cc (93%) rename testing_codelab/step_04/linux/{ => runner}/my_application.h (100%) create mode 100644 testing_codelab/step_05/linux/runner/CMakeLists.txt rename testing_codelab/step_05/linux/{ => runner}/main.cc (100%) rename testing_codelab/step_05/linux/{ => runner}/my_application.cc (93%) rename testing_codelab/step_05/linux/{ => runner}/my_application.h (100%) create mode 100644 testing_codelab/step_06/linux/runner/CMakeLists.txt rename testing_codelab/step_06/linux/{ => runner}/main.cc (100%) rename testing_codelab/step_06/linux/{ => runner}/my_application.cc (93%) rename testing_codelab/step_06/linux/{ => runner}/my_application.h (100%) delete mode 100644 testing_codelab/step_07/linux/my_application.cc create mode 100644 testing_codelab/step_07/linux/runner/CMakeLists.txt rename testing_codelab/step_07/linux/{ => runner}/main.cc (100%) create mode 100644 testing_codelab/step_07/linux/runner/my_application.cc rename testing_codelab/step_07/linux/{ => runner}/my_application.h (100%) delete mode 100644 testing_codelab/step_08/linux/my_application.cc create mode 100644 testing_codelab/step_08/linux/runner/CMakeLists.txt rename testing_codelab/step_08/linux/{ => runner}/main.cc (100%) create mode 100644 testing_codelab/step_08/linux/runner/my_application.cc rename testing_codelab/step_08/linux/{ => runner}/my_application.h (100%) diff --git a/testing_codelab/step_03/linux/CMakeLists.txt b/testing_codelab/step_03/linux/CMakeLists.txt index 01c5d4af2f..bec0e2b913 100644 --- a/testing_codelab/step_03/linux/CMakeLists.txt +++ b/testing_codelab/step_03/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/testing_codelab/step_03/linux/runner/CMakeLists.txt b/testing_codelab/step_03/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/testing_codelab/step_03/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/testing_codelab/step_03/linux/main.cc b/testing_codelab/step_03/linux/runner/main.cc similarity index 100% rename from testing_codelab/step_03/linux/main.cc rename to testing_codelab/step_03/linux/runner/main.cc diff --git a/testing_codelab/step_03/linux/my_application.cc b/testing_codelab/step_03/linux/runner/my_application.cc similarity index 93% rename from testing_codelab/step_03/linux/my_application.cc rename to testing_codelab/step_03/linux/runner/my_application.cc index 937cd1bcdf..6fd54c3a4a 100644 --- a/testing_codelab/step_03/linux/my_application.cc +++ b/testing_codelab/step_03/linux/runner/my_application.cc @@ -117,6 +117,12 @@ static void my_application_class_init(MyApplicationClass* klass) { static void my_application_init(MyApplication* self) {} MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + return MY_APPLICATION(g_object_new(my_application_get_type(), "application-id", APPLICATION_ID, "flags", G_APPLICATION_NON_UNIQUE, diff --git a/testing_codelab/step_03/linux/my_application.h b/testing_codelab/step_03/linux/runner/my_application.h similarity index 100% rename from testing_codelab/step_03/linux/my_application.h rename to testing_codelab/step_03/linux/runner/my_application.h diff --git a/testing_codelab/step_03/pubspec.yaml b/testing_codelab/step_03/pubspec.yaml index 6456008068..9681735f0a 100644 --- a/testing_codelab/step_03/pubspec.yaml +++ b/testing_codelab/step_03/pubspec.yaml @@ -13,13 +13,13 @@ environment: dependencies: flutter: sdk: flutter - go_router: ^14.3.0 + go_router: ^14.6.0 provider: ^6.1.2 dev_dependencies: flutter_test: sdk: flutter - flutter_lints: ^4.0.0 + flutter_lints: ^5.0.0 test: ^1.25.8 flutter_driver: sdk: flutter diff --git a/testing_codelab/step_03/web/index.html b/testing_codelab/step_03/web/index.html index 74d7b95e72..13d4098147 100644 --- a/testing_codelab/step_03/web/index.html +++ b/testing_codelab/step_03/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/testing_codelab/step_04/linux/CMakeLists.txt b/testing_codelab/step_04/linux/CMakeLists.txt index 01c5d4af2f..bec0e2b913 100644 --- a/testing_codelab/step_04/linux/CMakeLists.txt +++ b/testing_codelab/step_04/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/testing_codelab/step_04/linux/runner/CMakeLists.txt b/testing_codelab/step_04/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/testing_codelab/step_04/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/testing_codelab/step_04/linux/main.cc b/testing_codelab/step_04/linux/runner/main.cc similarity index 100% rename from testing_codelab/step_04/linux/main.cc rename to testing_codelab/step_04/linux/runner/main.cc diff --git a/testing_codelab/step_04/linux/my_application.cc b/testing_codelab/step_04/linux/runner/my_application.cc similarity index 93% rename from testing_codelab/step_04/linux/my_application.cc rename to testing_codelab/step_04/linux/runner/my_application.cc index 937cd1bcdf..6fd54c3a4a 100644 --- a/testing_codelab/step_04/linux/my_application.cc +++ b/testing_codelab/step_04/linux/runner/my_application.cc @@ -117,6 +117,12 @@ static void my_application_class_init(MyApplicationClass* klass) { static void my_application_init(MyApplication* self) {} MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + return MY_APPLICATION(g_object_new(my_application_get_type(), "application-id", APPLICATION_ID, "flags", G_APPLICATION_NON_UNIQUE, diff --git a/testing_codelab/step_04/linux/my_application.h b/testing_codelab/step_04/linux/runner/my_application.h similarity index 100% rename from testing_codelab/step_04/linux/my_application.h rename to testing_codelab/step_04/linux/runner/my_application.h diff --git a/testing_codelab/step_04/pubspec.yaml b/testing_codelab/step_04/pubspec.yaml index 6456008068..9681735f0a 100644 --- a/testing_codelab/step_04/pubspec.yaml +++ b/testing_codelab/step_04/pubspec.yaml @@ -13,13 +13,13 @@ environment: dependencies: flutter: sdk: flutter - go_router: ^14.3.0 + go_router: ^14.6.0 provider: ^6.1.2 dev_dependencies: flutter_test: sdk: flutter - flutter_lints: ^4.0.0 + flutter_lints: ^5.0.0 test: ^1.25.8 flutter_driver: sdk: flutter diff --git a/testing_codelab/step_04/web/index.html b/testing_codelab/step_04/web/index.html index 74d7b95e72..13d4098147 100644 --- a/testing_codelab/step_04/web/index.html +++ b/testing_codelab/step_04/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/testing_codelab/step_05/linux/CMakeLists.txt b/testing_codelab/step_05/linux/CMakeLists.txt index 01c5d4af2f..bec0e2b913 100644 --- a/testing_codelab/step_05/linux/CMakeLists.txt +++ b/testing_codelab/step_05/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/testing_codelab/step_05/linux/runner/CMakeLists.txt b/testing_codelab/step_05/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/testing_codelab/step_05/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/testing_codelab/step_05/linux/main.cc b/testing_codelab/step_05/linux/runner/main.cc similarity index 100% rename from testing_codelab/step_05/linux/main.cc rename to testing_codelab/step_05/linux/runner/main.cc diff --git a/testing_codelab/step_05/linux/my_application.cc b/testing_codelab/step_05/linux/runner/my_application.cc similarity index 93% rename from testing_codelab/step_05/linux/my_application.cc rename to testing_codelab/step_05/linux/runner/my_application.cc index 937cd1bcdf..6fd54c3a4a 100644 --- a/testing_codelab/step_05/linux/my_application.cc +++ b/testing_codelab/step_05/linux/runner/my_application.cc @@ -117,6 +117,12 @@ static void my_application_class_init(MyApplicationClass* klass) { static void my_application_init(MyApplication* self) {} MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + return MY_APPLICATION(g_object_new(my_application_get_type(), "application-id", APPLICATION_ID, "flags", G_APPLICATION_NON_UNIQUE, diff --git a/testing_codelab/step_05/linux/my_application.h b/testing_codelab/step_05/linux/runner/my_application.h similarity index 100% rename from testing_codelab/step_05/linux/my_application.h rename to testing_codelab/step_05/linux/runner/my_application.h diff --git a/testing_codelab/step_05/pubspec.yaml b/testing_codelab/step_05/pubspec.yaml index 6456008068..9681735f0a 100644 --- a/testing_codelab/step_05/pubspec.yaml +++ b/testing_codelab/step_05/pubspec.yaml @@ -13,13 +13,13 @@ environment: dependencies: flutter: sdk: flutter - go_router: ^14.3.0 + go_router: ^14.6.0 provider: ^6.1.2 dev_dependencies: flutter_test: sdk: flutter - flutter_lints: ^4.0.0 + flutter_lints: ^5.0.0 test: ^1.25.8 flutter_driver: sdk: flutter diff --git a/testing_codelab/step_05/web/index.html b/testing_codelab/step_05/web/index.html index 74d7b95e72..13d4098147 100644 --- a/testing_codelab/step_05/web/index.html +++ b/testing_codelab/step_05/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/testing_codelab/step_06/linux/CMakeLists.txt b/testing_codelab/step_06/linux/CMakeLists.txt index 01c5d4af2f..bec0e2b913 100644 --- a/testing_codelab/step_06/linux/CMakeLists.txt +++ b/testing_codelab/step_06/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/testing_codelab/step_06/linux/runner/CMakeLists.txt b/testing_codelab/step_06/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/testing_codelab/step_06/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/testing_codelab/step_06/linux/main.cc b/testing_codelab/step_06/linux/runner/main.cc similarity index 100% rename from testing_codelab/step_06/linux/main.cc rename to testing_codelab/step_06/linux/runner/main.cc diff --git a/testing_codelab/step_06/linux/my_application.cc b/testing_codelab/step_06/linux/runner/my_application.cc similarity index 93% rename from testing_codelab/step_06/linux/my_application.cc rename to testing_codelab/step_06/linux/runner/my_application.cc index 937cd1bcdf..6fd54c3a4a 100644 --- a/testing_codelab/step_06/linux/my_application.cc +++ b/testing_codelab/step_06/linux/runner/my_application.cc @@ -117,6 +117,12 @@ static void my_application_class_init(MyApplicationClass* klass) { static void my_application_init(MyApplication* self) {} MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + return MY_APPLICATION(g_object_new(my_application_get_type(), "application-id", APPLICATION_ID, "flags", G_APPLICATION_NON_UNIQUE, diff --git a/testing_codelab/step_06/linux/my_application.h b/testing_codelab/step_06/linux/runner/my_application.h similarity index 100% rename from testing_codelab/step_06/linux/my_application.h rename to testing_codelab/step_06/linux/runner/my_application.h diff --git a/testing_codelab/step_06/pubspec.yaml b/testing_codelab/step_06/pubspec.yaml index 6456008068..9681735f0a 100644 --- a/testing_codelab/step_06/pubspec.yaml +++ b/testing_codelab/step_06/pubspec.yaml @@ -13,13 +13,13 @@ environment: dependencies: flutter: sdk: flutter - go_router: ^14.3.0 + go_router: ^14.6.0 provider: ^6.1.2 dev_dependencies: flutter_test: sdk: flutter - flutter_lints: ^4.0.0 + flutter_lints: ^5.0.0 test: ^1.25.8 flutter_driver: sdk: flutter diff --git a/testing_codelab/step_06/web/index.html b/testing_codelab/step_06/web/index.html index 74d7b95e72..13d4098147 100644 --- a/testing_codelab/step_06/web/index.html +++ b/testing_codelab/step_06/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/testing_codelab/step_07/linux/CMakeLists.txt b/testing_codelab/step_07/linux/CMakeLists.txt index 01c5d4af2f..bec0e2b913 100644 --- a/testing_codelab/step_07/linux/CMakeLists.txt +++ b/testing_codelab/step_07/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/testing_codelab/step_07/linux/my_application.cc b/testing_codelab/step_07/linux/my_application.cc deleted file mode 100644 index 937cd1bcdf..0000000000 --- a/testing_codelab/step_07/linux/my_application.cc +++ /dev/null @@ -1,124 +0,0 @@ -#include "my_application.h" - -#include -#ifdef GDK_WINDOWING_X11 -#include -#endif - -#include "flutter/generated_plugin_registrant.h" - -struct _MyApplication { - GtkApplication parent_instance; - char** dart_entrypoint_arguments; -}; - -G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) - -// Implements GApplication::activate. -static void my_application_activate(GApplication* application) { - MyApplication* self = MY_APPLICATION(application); - GtkWindow* window = - GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); - - // Use a header bar when running in GNOME as this is the common style used - // by applications and is the setup most users will be using (e.g. Ubuntu - // desktop). - // If running on X and not using GNOME then just use a traditional title bar - // in case the window manager does more exotic layout, e.g. tiling. - // If running on Wayland assume the header bar will work (may need changing - // if future cases occur). - gboolean use_header_bar = TRUE; -#ifdef GDK_WINDOWING_X11 - GdkScreen* screen = gtk_window_get_screen(window); - if (GDK_IS_X11_SCREEN(screen)) { - const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); - if (g_strcmp0(wm_name, "GNOME Shell") != 0) { - use_header_bar = FALSE; - } - } -#endif - if (use_header_bar) { - GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); - gtk_widget_show(GTK_WIDGET(header_bar)); - gtk_header_bar_set_title(header_bar, "testing_app"); - gtk_header_bar_set_show_close_button(header_bar, TRUE); - gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); - } else { - gtk_window_set_title(window, "testing_app"); - } - - gtk_window_set_default_size(window, 1280, 720); - gtk_widget_show(GTK_WIDGET(window)); - - g_autoptr(FlDartProject) project = fl_dart_project_new(); - fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); - - FlView* view = fl_view_new(project); - gtk_widget_show(GTK_WIDGET(view)); - gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); - - fl_register_plugins(FL_PLUGIN_REGISTRY(view)); - - gtk_widget_grab_focus(GTK_WIDGET(view)); -} - -// Implements GApplication::local_command_line. -static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { - MyApplication* self = MY_APPLICATION(application); - // Strip out the first argument as it is the binary name. - self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); - - g_autoptr(GError) error = nullptr; - if (!g_application_register(application, nullptr, &error)) { - g_warning("Failed to register: %s", error->message); - *exit_status = 1; - return TRUE; - } - - g_application_activate(application); - *exit_status = 0; - - return TRUE; -} - -// Implements GApplication::startup. -static void my_application_startup(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application startup. - - G_APPLICATION_CLASS(my_application_parent_class)->startup(application); -} - -// Implements GApplication::shutdown. -static void my_application_shutdown(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application shutdown. - - G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); -} - -// Implements GObject::dispose. -static void my_application_dispose(GObject* object) { - MyApplication* self = MY_APPLICATION(object); - g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); - G_OBJECT_CLASS(my_application_parent_class)->dispose(object); -} - -static void my_application_class_init(MyApplicationClass* klass) { - G_APPLICATION_CLASS(klass)->activate = my_application_activate; - G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; - G_APPLICATION_CLASS(klass)->startup = my_application_startup; - G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; - G_OBJECT_CLASS(klass)->dispose = my_application_dispose; -} - -static void my_application_init(MyApplication* self) {} - -MyApplication* my_application_new() { - return MY_APPLICATION(g_object_new(my_application_get_type(), - "application-id", APPLICATION_ID, - "flags", G_APPLICATION_NON_UNIQUE, - nullptr)); -} diff --git a/testing_codelab/step_07/linux/runner/CMakeLists.txt b/testing_codelab/step_07/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/testing_codelab/step_07/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/testing_codelab/step_07/linux/main.cc b/testing_codelab/step_07/linux/runner/main.cc similarity index 100% rename from testing_codelab/step_07/linux/main.cc rename to testing_codelab/step_07/linux/runner/main.cc diff --git a/testing_codelab/step_07/linux/runner/my_application.cc b/testing_codelab/step_07/linux/runner/my_application.cc new file mode 100644 index 0000000000..6fd54c3a4a --- /dev/null +++ b/testing_codelab/step_07/linux/runner/my_application.cc @@ -0,0 +1,130 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "testing_app"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "testing_app"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/testing_codelab/step_07/linux/my_application.h b/testing_codelab/step_07/linux/runner/my_application.h similarity index 100% rename from testing_codelab/step_07/linux/my_application.h rename to testing_codelab/step_07/linux/runner/my_application.h diff --git a/testing_codelab/step_07/macos/Runner.xcodeproj/project.pbxproj b/testing_codelab/step_07/macos/Runner.xcodeproj/project.pbxproj index 372e0d44b7..cd83f23f77 100644 --- a/testing_codelab/step_07/macos/Runner.xcodeproj/project.pbxproj +++ b/testing_codelab/step_07/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ - 1488C5A9C2F84598CAC9C902 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8A4079373BB0FCF184332962 /* Pods_RunnerTests.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - B85EF54B34F9C9BD6EE2D734 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A6C2731234E5752075934F11 /* Pods_Runner.framework */; }; + B65C92C381CA9018A58BBA19 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 70DFB5FA3411B71198D038C7 /* Pods_RunnerTests.framework */; }; + E791E39CFF2DC617398FBC25 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 41141BDB78C9B7879AD87928 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,6 +62,8 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 19D22309C9361CA5BF391004 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 2557D195CA6689B1E010EF94 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -78,16 +80,14 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 5C8E2EEE9F104DDD71D49AB1 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 6B2794AA2CE1D2A34FD0217B /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 41141BDB78C9B7879AD87928 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 5BAD1EABF5C1472CA22B2C8A /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 70DFB5FA3411B71198D038C7 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 856D0EF4F21EC855038BE3FF /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - 87A8E5CE02ED23494E2D1E09 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 8A4079373BB0FCF184332962 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 960F1F1AC3283913D9EAF31A /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - A6C2731234E5752075934F11 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - E1D3A53F9F47467D85C61C37 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + C0BBA2573FD0ACA3FC5987C0 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + EEDB2B6A45DF18985C1FD78A /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + F2CBADA2F3474A835A24D1A1 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 1488C5A9C2F84598CAC9C902 /* Pods_RunnerTests.framework in Frameworks */, + B65C92C381CA9018A58BBA19 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,13 +103,27 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - B85EF54B34F9C9BD6EE2D734 /* Pods_Runner.framework in Frameworks */, + E791E39CFF2DC617398FBC25 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 1F4ACE59BF9531126BFD8920 /* Pods */ = { + isa = PBXGroup; + children = ( + F2CBADA2F3474A835A24D1A1 /* Pods-Runner.debug.xcconfig */, + EEDB2B6A45DF18985C1FD78A /* Pods-Runner.release.xcconfig */, + C0BBA2573FD0ACA3FC5987C0 /* Pods-Runner.profile.xcconfig */, + 19D22309C9361CA5BF391004 /* Pods-RunnerTests.debug.xcconfig */, + 5BAD1EABF5C1472CA22B2C8A /* Pods-RunnerTests.release.xcconfig */, + 2557D195CA6689B1E010EF94 /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; 331C80D6294CF71000263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -137,7 +151,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - C25B22F4A01832267B4E686C /* Pods */, + 1F4ACE59BF9531126BFD8920 /* Pods */, ); sourceTree = ""; }; @@ -185,25 +199,11 @@ path = Runner; sourceTree = ""; }; - C25B22F4A01832267B4E686C /* Pods */ = { - isa = PBXGroup; - children = ( - 5C8E2EEE9F104DDD71D49AB1 /* Pods-Runner.debug.xcconfig */, - 6B2794AA2CE1D2A34FD0217B /* Pods-Runner.release.xcconfig */, - 960F1F1AC3283913D9EAF31A /* Pods-Runner.profile.xcconfig */, - 87A8E5CE02ED23494E2D1E09 /* Pods-RunnerTests.debug.xcconfig */, - 856D0EF4F21EC855038BE3FF /* Pods-RunnerTests.release.xcconfig */, - E1D3A53F9F47467D85C61C37 /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - A6C2731234E5752075934F11 /* Pods_Runner.framework */, - 8A4079373BB0FCF184332962 /* Pods_RunnerTests.framework */, + 41141BDB78C9B7879AD87928 /* Pods_Runner.framework */, + 70DFB5FA3411B71198D038C7 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - DACFB3DA3FA46D6685ED3785 /* [CP] Check Pods Manifest.lock */, + A7FD17A8E725E7D4153EDBE0 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,7 +234,7 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - A3AD0D91F5F60D2CD3B847FA /* [CP] Check Pods Manifest.lock */, + 14FA6C21241474C6BC862A81 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, @@ -322,67 +322,67 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 3399D490228B24CF009A79C7 /* ShellScript */ = { + 14FA6C21241474C6BC862A81 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( ); outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - 33CC111E2044C6BF0003C045 /* ShellScript */ = { + 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - Flutter/ephemeral/FlutterInputs.xcfilelist, ); inputPaths = ( - Flutter/ephemeral/tripwire, ); outputFileListPaths = ( - Flutter/ephemeral/FlutterOutputs.xcfilelist, ); outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; + shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; }; - A3AD0D91F5F60D2CD3B847FA /* [CP] Check Pods Manifest.lock */ = { + 33CC111E2044C6BF0003C045 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + Flutter/ephemeral/FlutterInputs.xcfilelist, ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", + Flutter/ephemeral/tripwire, ); - name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( + Flutter/ephemeral/FlutterOutputs.xcfilelist, ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - DACFB3DA3FA46D6685ED3785 /* [CP] Check Pods Manifest.lock */ = { + A7FD17A8E725E7D4153EDBE0 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -455,7 +455,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 87A8E5CE02ED23494E2D1E09 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 19D22309C9361CA5BF391004 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -470,7 +470,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 856D0EF4F21EC855038BE3FF /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 5BAD1EABF5C1472CA22B2C8A /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -485,7 +485,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = E1D3A53F9F47467D85C61C37 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 2557D195CA6689B1E010EF94 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/testing_codelab/step_07/pubspec.yaml b/testing_codelab/step_07/pubspec.yaml index 6456008068..9681735f0a 100644 --- a/testing_codelab/step_07/pubspec.yaml +++ b/testing_codelab/step_07/pubspec.yaml @@ -13,13 +13,13 @@ environment: dependencies: flutter: sdk: flutter - go_router: ^14.3.0 + go_router: ^14.6.0 provider: ^6.1.2 dev_dependencies: flutter_test: sdk: flutter - flutter_lints: ^4.0.0 + flutter_lints: ^5.0.0 test: ^1.25.8 flutter_driver: sdk: flutter diff --git a/testing_codelab/step_07/web/index.html b/testing_codelab/step_07/web/index.html index 74d7b95e72..13d4098147 100644 --- a/testing_codelab/step_07/web/index.html +++ b/testing_codelab/step_07/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/testing_codelab/step_08/linux/CMakeLists.txt b/testing_codelab/step_08/linux/CMakeLists.txt index 01c5d4af2f..bec0e2b913 100644 --- a/testing_codelab/step_08/linux/CMakeLists.txt +++ b/testing_codelab/step_08/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/testing_codelab/step_08/linux/my_application.cc b/testing_codelab/step_08/linux/my_application.cc deleted file mode 100644 index 937cd1bcdf..0000000000 --- a/testing_codelab/step_08/linux/my_application.cc +++ /dev/null @@ -1,124 +0,0 @@ -#include "my_application.h" - -#include -#ifdef GDK_WINDOWING_X11 -#include -#endif - -#include "flutter/generated_plugin_registrant.h" - -struct _MyApplication { - GtkApplication parent_instance; - char** dart_entrypoint_arguments; -}; - -G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) - -// Implements GApplication::activate. -static void my_application_activate(GApplication* application) { - MyApplication* self = MY_APPLICATION(application); - GtkWindow* window = - GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); - - // Use a header bar when running in GNOME as this is the common style used - // by applications and is the setup most users will be using (e.g. Ubuntu - // desktop). - // If running on X and not using GNOME then just use a traditional title bar - // in case the window manager does more exotic layout, e.g. tiling. - // If running on Wayland assume the header bar will work (may need changing - // if future cases occur). - gboolean use_header_bar = TRUE; -#ifdef GDK_WINDOWING_X11 - GdkScreen* screen = gtk_window_get_screen(window); - if (GDK_IS_X11_SCREEN(screen)) { - const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); - if (g_strcmp0(wm_name, "GNOME Shell") != 0) { - use_header_bar = FALSE; - } - } -#endif - if (use_header_bar) { - GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); - gtk_widget_show(GTK_WIDGET(header_bar)); - gtk_header_bar_set_title(header_bar, "testing_app"); - gtk_header_bar_set_show_close_button(header_bar, TRUE); - gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); - } else { - gtk_window_set_title(window, "testing_app"); - } - - gtk_window_set_default_size(window, 1280, 720); - gtk_widget_show(GTK_WIDGET(window)); - - g_autoptr(FlDartProject) project = fl_dart_project_new(); - fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); - - FlView* view = fl_view_new(project); - gtk_widget_show(GTK_WIDGET(view)); - gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); - - fl_register_plugins(FL_PLUGIN_REGISTRY(view)); - - gtk_widget_grab_focus(GTK_WIDGET(view)); -} - -// Implements GApplication::local_command_line. -static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { - MyApplication* self = MY_APPLICATION(application); - // Strip out the first argument as it is the binary name. - self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); - - g_autoptr(GError) error = nullptr; - if (!g_application_register(application, nullptr, &error)) { - g_warning("Failed to register: %s", error->message); - *exit_status = 1; - return TRUE; - } - - g_application_activate(application); - *exit_status = 0; - - return TRUE; -} - -// Implements GApplication::startup. -static void my_application_startup(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application startup. - - G_APPLICATION_CLASS(my_application_parent_class)->startup(application); -} - -// Implements GApplication::shutdown. -static void my_application_shutdown(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application shutdown. - - G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); -} - -// Implements GObject::dispose. -static void my_application_dispose(GObject* object) { - MyApplication* self = MY_APPLICATION(object); - g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); - G_OBJECT_CLASS(my_application_parent_class)->dispose(object); -} - -static void my_application_class_init(MyApplicationClass* klass) { - G_APPLICATION_CLASS(klass)->activate = my_application_activate; - G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; - G_APPLICATION_CLASS(klass)->startup = my_application_startup; - G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; - G_OBJECT_CLASS(klass)->dispose = my_application_dispose; -} - -static void my_application_init(MyApplication* self) {} - -MyApplication* my_application_new() { - return MY_APPLICATION(g_object_new(my_application_get_type(), - "application-id", APPLICATION_ID, - "flags", G_APPLICATION_NON_UNIQUE, - nullptr)); -} diff --git a/testing_codelab/step_08/linux/runner/CMakeLists.txt b/testing_codelab/step_08/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/testing_codelab/step_08/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/testing_codelab/step_08/linux/main.cc b/testing_codelab/step_08/linux/runner/main.cc similarity index 100% rename from testing_codelab/step_08/linux/main.cc rename to testing_codelab/step_08/linux/runner/main.cc diff --git a/testing_codelab/step_08/linux/runner/my_application.cc b/testing_codelab/step_08/linux/runner/my_application.cc new file mode 100644 index 0000000000..6fd54c3a4a --- /dev/null +++ b/testing_codelab/step_08/linux/runner/my_application.cc @@ -0,0 +1,130 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "testing_app"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "testing_app"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/testing_codelab/step_08/linux/my_application.h b/testing_codelab/step_08/linux/runner/my_application.h similarity index 100% rename from testing_codelab/step_08/linux/my_application.h rename to testing_codelab/step_08/linux/runner/my_application.h diff --git a/testing_codelab/step_08/macos/Runner.xcodeproj/project.pbxproj b/testing_codelab/step_08/macos/Runner.xcodeproj/project.pbxproj index 372e0d44b7..cd83f23f77 100644 --- a/testing_codelab/step_08/macos/Runner.xcodeproj/project.pbxproj +++ b/testing_codelab/step_08/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ - 1488C5A9C2F84598CAC9C902 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8A4079373BB0FCF184332962 /* Pods_RunnerTests.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - B85EF54B34F9C9BD6EE2D734 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A6C2731234E5752075934F11 /* Pods_Runner.framework */; }; + B65C92C381CA9018A58BBA19 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 70DFB5FA3411B71198D038C7 /* Pods_RunnerTests.framework */; }; + E791E39CFF2DC617398FBC25 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 41141BDB78C9B7879AD87928 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,6 +62,8 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 19D22309C9361CA5BF391004 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 2557D195CA6689B1E010EF94 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -78,16 +80,14 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 5C8E2EEE9F104DDD71D49AB1 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 6B2794AA2CE1D2A34FD0217B /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 41141BDB78C9B7879AD87928 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 5BAD1EABF5C1472CA22B2C8A /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 70DFB5FA3411B71198D038C7 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 856D0EF4F21EC855038BE3FF /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - 87A8E5CE02ED23494E2D1E09 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 8A4079373BB0FCF184332962 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 960F1F1AC3283913D9EAF31A /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - A6C2731234E5752075934F11 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - E1D3A53F9F47467D85C61C37 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + C0BBA2573FD0ACA3FC5987C0 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + EEDB2B6A45DF18985C1FD78A /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + F2CBADA2F3474A835A24D1A1 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 1488C5A9C2F84598CAC9C902 /* Pods_RunnerTests.framework in Frameworks */, + B65C92C381CA9018A58BBA19 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,13 +103,27 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - B85EF54B34F9C9BD6EE2D734 /* Pods_Runner.framework in Frameworks */, + E791E39CFF2DC617398FBC25 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 1F4ACE59BF9531126BFD8920 /* Pods */ = { + isa = PBXGroup; + children = ( + F2CBADA2F3474A835A24D1A1 /* Pods-Runner.debug.xcconfig */, + EEDB2B6A45DF18985C1FD78A /* Pods-Runner.release.xcconfig */, + C0BBA2573FD0ACA3FC5987C0 /* Pods-Runner.profile.xcconfig */, + 19D22309C9361CA5BF391004 /* Pods-RunnerTests.debug.xcconfig */, + 5BAD1EABF5C1472CA22B2C8A /* Pods-RunnerTests.release.xcconfig */, + 2557D195CA6689B1E010EF94 /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; 331C80D6294CF71000263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -137,7 +151,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - C25B22F4A01832267B4E686C /* Pods */, + 1F4ACE59BF9531126BFD8920 /* Pods */, ); sourceTree = ""; }; @@ -185,25 +199,11 @@ path = Runner; sourceTree = ""; }; - C25B22F4A01832267B4E686C /* Pods */ = { - isa = PBXGroup; - children = ( - 5C8E2EEE9F104DDD71D49AB1 /* Pods-Runner.debug.xcconfig */, - 6B2794AA2CE1D2A34FD0217B /* Pods-Runner.release.xcconfig */, - 960F1F1AC3283913D9EAF31A /* Pods-Runner.profile.xcconfig */, - 87A8E5CE02ED23494E2D1E09 /* Pods-RunnerTests.debug.xcconfig */, - 856D0EF4F21EC855038BE3FF /* Pods-RunnerTests.release.xcconfig */, - E1D3A53F9F47467D85C61C37 /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - A6C2731234E5752075934F11 /* Pods_Runner.framework */, - 8A4079373BB0FCF184332962 /* Pods_RunnerTests.framework */, + 41141BDB78C9B7879AD87928 /* Pods_Runner.framework */, + 70DFB5FA3411B71198D038C7 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - DACFB3DA3FA46D6685ED3785 /* [CP] Check Pods Manifest.lock */, + A7FD17A8E725E7D4153EDBE0 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,7 +234,7 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - A3AD0D91F5F60D2CD3B847FA /* [CP] Check Pods Manifest.lock */, + 14FA6C21241474C6BC862A81 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, @@ -322,67 +322,67 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 3399D490228B24CF009A79C7 /* ShellScript */ = { + 14FA6C21241474C6BC862A81 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( ); outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - 33CC111E2044C6BF0003C045 /* ShellScript */ = { + 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - Flutter/ephemeral/FlutterInputs.xcfilelist, ); inputPaths = ( - Flutter/ephemeral/tripwire, ); outputFileListPaths = ( - Flutter/ephemeral/FlutterOutputs.xcfilelist, ); outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; + shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; }; - A3AD0D91F5F60D2CD3B847FA /* [CP] Check Pods Manifest.lock */ = { + 33CC111E2044C6BF0003C045 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + Flutter/ephemeral/FlutterInputs.xcfilelist, ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", + Flutter/ephemeral/tripwire, ); - name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( + Flutter/ephemeral/FlutterOutputs.xcfilelist, ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - DACFB3DA3FA46D6685ED3785 /* [CP] Check Pods Manifest.lock */ = { + A7FD17A8E725E7D4153EDBE0 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -455,7 +455,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 87A8E5CE02ED23494E2D1E09 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 19D22309C9361CA5BF391004 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -470,7 +470,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 856D0EF4F21EC855038BE3FF /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 5BAD1EABF5C1472CA22B2C8A /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -485,7 +485,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = E1D3A53F9F47467D85C61C37 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 2557D195CA6689B1E010EF94 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/testing_codelab/step_08/pubspec.yaml b/testing_codelab/step_08/pubspec.yaml index 6456008068..9681735f0a 100644 --- a/testing_codelab/step_08/pubspec.yaml +++ b/testing_codelab/step_08/pubspec.yaml @@ -13,13 +13,13 @@ environment: dependencies: flutter: sdk: flutter - go_router: ^14.3.0 + go_router: ^14.6.0 provider: ^6.1.2 dev_dependencies: flutter_test: sdk: flutter - flutter_lints: ^4.0.0 + flutter_lints: ^5.0.0 test: ^1.25.8 flutter_driver: sdk: flutter diff --git a/testing_codelab/step_08/web/index.html b/testing_codelab/step_08/web/index.html index 74d7b95e72..13d4098147 100644 --- a/testing_codelab/step_08/web/index.html +++ b/testing_codelab/step_08/web/index.html @@ -21,7 +21,7 @@ - + From 9b7f559280ea1b2f8814e12c73a622ed4e6c184c Mon Sep 17 00:00:00 2001 From: Brett Morgan Date: Wed, 13 Nov 2024 12:19:49 +1100 Subject: [PATCH 052/108] Update `webview_flutter` --- webview_flutter/codelab_rebuild.yaml | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 126 +++++++++--------- webview_flutter/step_03/pubspec.yaml | 1 - .../ios/Runner.xcodeproj/project.pbxproj | 126 +++++++++--------- webview_flutter/step_04/pubspec.yaml | 1 - .../ios/Runner.xcodeproj/project.pbxproj | 126 +++++++++--------- webview_flutter/step_05/pubspec.yaml | 1 - .../ios/Runner.xcodeproj/project.pbxproj | 126 +++++++++--------- webview_flutter/step_06/pubspec.yaml | 1 - .../ios/Runner.xcodeproj/project.pbxproj | 126 +++++++++--------- webview_flutter/step_07/pubspec.yaml | 1 - .../ios/Runner.xcodeproj/project.pbxproj | 126 +++++++++--------- webview_flutter/step_08/pubspec.yaml | 1 - .../ios/Runner.xcodeproj/project.pbxproj | 126 +++++++++--------- webview_flutter/step_09/pubspec.yaml | 1 - .../ios/Runner.xcodeproj/project.pbxproj | 126 +++++++++--------- webview_flutter/step_10/pubspec.yaml | 1 - .../ios/Runner.xcodeproj/project.pbxproj | 126 +++++++++--------- webview_flutter/step_11/pubspec.yaml | 1 - .../ios/Runner.xcodeproj/project.pbxproj | 126 +++++++++--------- webview_flutter/step_12/pubspec.yaml | 3 +- 21 files changed, 632 insertions(+), 642 deletions(-) diff --git a/webview_flutter/codelab_rebuild.yaml b/webview_flutter/codelab_rebuild.yaml index 330bae3ab4..a03315bda5 100644 --- a/webview_flutter/codelab_rebuild.yaml +++ b/webview_flutter/codelab_rebuild.yaml @@ -871,7 +871,7 @@ steps: patch-u: | --- b/webview_flutter/step_12/pubspec.yaml +++ a/webview_flutter/step_12/pubspec.yaml - @@ -59,6 +60,9 @@ flutter: + @@ -58,6 +59,9 @@ flutter: # included with your application, so that you can use the icons in # the material Icons class. uses-material-design: true diff --git a/webview_flutter/step_03/ios/Runner.xcodeproj/project.pbxproj b/webview_flutter/step_03/ios/Runner.xcodeproj/project.pbxproj index 8f6e3ffc09..1fdcd8b9c4 100644 --- a/webview_flutter/step_03/ios/Runner.xcodeproj/project.pbxproj +++ b/webview_flutter/step_03/ios/Runner.xcodeproj/project.pbxproj @@ -10,12 +10,12 @@ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; + 592CCEDE047ADE7BC089AB41 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 350ED558E29135D9B6DA12A0 /* Pods_RunnerTests.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - AAC2E12D306CAB59FFBBCD45 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0D4620345C5D87B0E7060169 /* Pods_Runner.framework */; }; - F5B795DBC53CA272FBEFA879 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D99586C11302D0BD51376E49 /* Pods_RunnerTests.framework */; }; + F6A231591C01867C1A1268AD /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EB0168EEDEA46D37DCEF97FD /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,14 +42,15 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 08FD4DDEEB83912CF46C4224 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 0D4620345C5D87B0E7060169 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; + 200C0FB6EC3E67446721343D /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 350ED558E29135D9B6DA12A0 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 531C22CC0DE7F035D9A34AA8 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 3E22E37926EFF42C5471F6F9 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 46517A87257E58848B507D86 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; @@ -60,19 +61,18 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 98E54C4176D400311D9B31BA /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - A916079A171A129DC4E2A044 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - B55481032FB34D452CFFA8F4 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - D99586C11302D0BD51376E49 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - E5FD24814B513998232432D1 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + CFA80CA756DDB3C5B27EB87C /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + DCF5FFDDA11243897B692074 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + E43B580CA757421F14EDB9D7 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + EB0168EEDEA46D37DCEF97FD /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 2FEC5FC3719CD823CD6B55B8 /* Frameworks */ = { + 02874EA149F2669FBBBEFA6B /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - F5B795DBC53CA272FBEFA879 /* Pods_RunnerTests.framework in Frameworks */, + 592CCEDE047ADE7BC089AB41 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -80,7 +80,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - AAC2E12D306CAB59FFBBCD45 /* Pods_Runner.framework in Frameworks */, + F6A231591C01867C1A1268AD /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -95,15 +95,6 @@ path = RunnerTests; sourceTree = ""; }; - 970CAEF4A0EA5D94B91BBBA3 /* Frameworks */ = { - isa = PBXGroup; - children = ( - 0D4620345C5D87B0E7060169 /* Pods_Runner.framework */, - D99586C11302D0BD51376E49 /* Pods_RunnerTests.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( @@ -122,8 +113,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - E587FBDAF5D3BEFD5D2C0C4F /* Pods */, - 970CAEF4A0EA5D94B91BBBA3 /* Frameworks */, + E9103E523A78BA47FE7905A7 /* Pods */, + 9E8FC7C3B77A794057B5F5A5 /* Frameworks */, ); sourceTree = ""; }; @@ -151,15 +142,24 @@ path = Runner; sourceTree = ""; }; - E587FBDAF5D3BEFD5D2C0C4F /* Pods */ = { + 9E8FC7C3B77A794057B5F5A5 /* Frameworks */ = { + isa = PBXGroup; + children = ( + EB0168EEDEA46D37DCEF97FD /* Pods_Runner.framework */, + 350ED558E29135D9B6DA12A0 /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; + E9103E523A78BA47FE7905A7 /* Pods */ = { isa = PBXGroup; children = ( - A916079A171A129DC4E2A044 /* Pods-Runner.debug.xcconfig */, - B55481032FB34D452CFFA8F4 /* Pods-Runner.release.xcconfig */, - 531C22CC0DE7F035D9A34AA8 /* Pods-Runner.profile.xcconfig */, - 08FD4DDEEB83912CF46C4224 /* Pods-RunnerTests.debug.xcconfig */, - 98E54C4176D400311D9B31BA /* Pods-RunnerTests.release.xcconfig */, - E5FD24814B513998232432D1 /* Pods-RunnerTests.profile.xcconfig */, + 3E22E37926EFF42C5471F6F9 /* Pods-Runner.debug.xcconfig */, + 46517A87257E58848B507D86 /* Pods-Runner.release.xcconfig */, + E43B580CA757421F14EDB9D7 /* Pods-Runner.profile.xcconfig */, + 200C0FB6EC3E67446721343D /* Pods-RunnerTests.debug.xcconfig */, + CFA80CA756DDB3C5B27EB87C /* Pods-RunnerTests.release.xcconfig */, + DCF5FFDDA11243897B692074 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 608B22E300D6DE6B6AAD535A /* [CP] Check Pods Manifest.lock */, + 7CAAD9ACDE3FCDD0AF1C7888 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 2FEC5FC3719CD823CD6B55B8 /* Frameworks */, + 02874EA149F2669FBBBEFA6B /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 662E2EF6148D023D7E7DB791 /* [CP] Check Pods Manifest.lock */, + 9999291836084819C4E0C140 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 284DD42A03DD50B0335DA1F5 /* [CP] Embed Pods Frameworks */, + FBFF1AF5B95EAA422EAE27A3 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -270,23 +270,6 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 284DD42A03DD50B0335DA1F5 /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -303,7 +286,7 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 608B22E300D6DE6B6AAD535A /* [CP] Check Pods Manifest.lock */ = { + 7CAAD9ACDE3FCDD0AF1C7888 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -325,7 +308,22 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 662E2EF6148D023D7E7DB791 /* [CP] Check Pods Manifest.lock */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Run Script"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + }; + 9999291836084819C4E0C140 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -347,20 +345,22 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { + FBFF1AF5B95EAA422EAE27A3 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputPaths = ( + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "Run Script"; - outputPaths = ( + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 08FD4DDEEB83912CF46C4224 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 200C0FB6EC3E67446721343D /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 98E54C4176D400311D9B31BA /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = CFA80CA756DDB3C5B27EB87C /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = E5FD24814B513998232432D1 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = DCF5FFDDA11243897B692074 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/webview_flutter/step_03/pubspec.yaml b/webview_flutter/step_03/pubspec.yaml index 310f8ce028..3fdc9dcaad 100644 --- a/webview_flutter/step_03/pubspec.yaml +++ b/webview_flutter/step_03/pubspec.yaml @@ -31,7 +31,6 @@ dependencies: flutter: sdk: flutter - # The following adds the Cupertino Icons font to your application. # Use with the CupertinoIcons class for iOS style icons. cupertino_icons: ^1.0.8 diff --git a/webview_flutter/step_04/ios/Runner.xcodeproj/project.pbxproj b/webview_flutter/step_04/ios/Runner.xcodeproj/project.pbxproj index 8f6e3ffc09..1fdcd8b9c4 100644 --- a/webview_flutter/step_04/ios/Runner.xcodeproj/project.pbxproj +++ b/webview_flutter/step_04/ios/Runner.xcodeproj/project.pbxproj @@ -10,12 +10,12 @@ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; + 592CCEDE047ADE7BC089AB41 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 350ED558E29135D9B6DA12A0 /* Pods_RunnerTests.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - AAC2E12D306CAB59FFBBCD45 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0D4620345C5D87B0E7060169 /* Pods_Runner.framework */; }; - F5B795DBC53CA272FBEFA879 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D99586C11302D0BD51376E49 /* Pods_RunnerTests.framework */; }; + F6A231591C01867C1A1268AD /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EB0168EEDEA46D37DCEF97FD /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,14 +42,15 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 08FD4DDEEB83912CF46C4224 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 0D4620345C5D87B0E7060169 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; + 200C0FB6EC3E67446721343D /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 350ED558E29135D9B6DA12A0 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 531C22CC0DE7F035D9A34AA8 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 3E22E37926EFF42C5471F6F9 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 46517A87257E58848B507D86 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; @@ -60,19 +61,18 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 98E54C4176D400311D9B31BA /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - A916079A171A129DC4E2A044 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - B55481032FB34D452CFFA8F4 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - D99586C11302D0BD51376E49 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - E5FD24814B513998232432D1 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + CFA80CA756DDB3C5B27EB87C /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + DCF5FFDDA11243897B692074 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + E43B580CA757421F14EDB9D7 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + EB0168EEDEA46D37DCEF97FD /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 2FEC5FC3719CD823CD6B55B8 /* Frameworks */ = { + 02874EA149F2669FBBBEFA6B /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - F5B795DBC53CA272FBEFA879 /* Pods_RunnerTests.framework in Frameworks */, + 592CCEDE047ADE7BC089AB41 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -80,7 +80,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - AAC2E12D306CAB59FFBBCD45 /* Pods_Runner.framework in Frameworks */, + F6A231591C01867C1A1268AD /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -95,15 +95,6 @@ path = RunnerTests; sourceTree = ""; }; - 970CAEF4A0EA5D94B91BBBA3 /* Frameworks */ = { - isa = PBXGroup; - children = ( - 0D4620345C5D87B0E7060169 /* Pods_Runner.framework */, - D99586C11302D0BD51376E49 /* Pods_RunnerTests.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( @@ -122,8 +113,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - E587FBDAF5D3BEFD5D2C0C4F /* Pods */, - 970CAEF4A0EA5D94B91BBBA3 /* Frameworks */, + E9103E523A78BA47FE7905A7 /* Pods */, + 9E8FC7C3B77A794057B5F5A5 /* Frameworks */, ); sourceTree = ""; }; @@ -151,15 +142,24 @@ path = Runner; sourceTree = ""; }; - E587FBDAF5D3BEFD5D2C0C4F /* Pods */ = { + 9E8FC7C3B77A794057B5F5A5 /* Frameworks */ = { + isa = PBXGroup; + children = ( + EB0168EEDEA46D37DCEF97FD /* Pods_Runner.framework */, + 350ED558E29135D9B6DA12A0 /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; + E9103E523A78BA47FE7905A7 /* Pods */ = { isa = PBXGroup; children = ( - A916079A171A129DC4E2A044 /* Pods-Runner.debug.xcconfig */, - B55481032FB34D452CFFA8F4 /* Pods-Runner.release.xcconfig */, - 531C22CC0DE7F035D9A34AA8 /* Pods-Runner.profile.xcconfig */, - 08FD4DDEEB83912CF46C4224 /* Pods-RunnerTests.debug.xcconfig */, - 98E54C4176D400311D9B31BA /* Pods-RunnerTests.release.xcconfig */, - E5FD24814B513998232432D1 /* Pods-RunnerTests.profile.xcconfig */, + 3E22E37926EFF42C5471F6F9 /* Pods-Runner.debug.xcconfig */, + 46517A87257E58848B507D86 /* Pods-Runner.release.xcconfig */, + E43B580CA757421F14EDB9D7 /* Pods-Runner.profile.xcconfig */, + 200C0FB6EC3E67446721343D /* Pods-RunnerTests.debug.xcconfig */, + CFA80CA756DDB3C5B27EB87C /* Pods-RunnerTests.release.xcconfig */, + DCF5FFDDA11243897B692074 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 608B22E300D6DE6B6AAD535A /* [CP] Check Pods Manifest.lock */, + 7CAAD9ACDE3FCDD0AF1C7888 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 2FEC5FC3719CD823CD6B55B8 /* Frameworks */, + 02874EA149F2669FBBBEFA6B /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 662E2EF6148D023D7E7DB791 /* [CP] Check Pods Manifest.lock */, + 9999291836084819C4E0C140 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 284DD42A03DD50B0335DA1F5 /* [CP] Embed Pods Frameworks */, + FBFF1AF5B95EAA422EAE27A3 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -270,23 +270,6 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 284DD42A03DD50B0335DA1F5 /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -303,7 +286,7 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 608B22E300D6DE6B6AAD535A /* [CP] Check Pods Manifest.lock */ = { + 7CAAD9ACDE3FCDD0AF1C7888 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -325,7 +308,22 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 662E2EF6148D023D7E7DB791 /* [CP] Check Pods Manifest.lock */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Run Script"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + }; + 9999291836084819C4E0C140 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -347,20 +345,22 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { + FBFF1AF5B95EAA422EAE27A3 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputPaths = ( + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "Run Script"; - outputPaths = ( + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 08FD4DDEEB83912CF46C4224 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 200C0FB6EC3E67446721343D /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 98E54C4176D400311D9B31BA /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = CFA80CA756DDB3C5B27EB87C /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = E5FD24814B513998232432D1 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = DCF5FFDDA11243897B692074 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/webview_flutter/step_04/pubspec.yaml b/webview_flutter/step_04/pubspec.yaml index 310f8ce028..3fdc9dcaad 100644 --- a/webview_flutter/step_04/pubspec.yaml +++ b/webview_flutter/step_04/pubspec.yaml @@ -31,7 +31,6 @@ dependencies: flutter: sdk: flutter - # The following adds the Cupertino Icons font to your application. # Use with the CupertinoIcons class for iOS style icons. cupertino_icons: ^1.0.8 diff --git a/webview_flutter/step_05/ios/Runner.xcodeproj/project.pbxproj b/webview_flutter/step_05/ios/Runner.xcodeproj/project.pbxproj index 8f6e3ffc09..1fdcd8b9c4 100644 --- a/webview_flutter/step_05/ios/Runner.xcodeproj/project.pbxproj +++ b/webview_flutter/step_05/ios/Runner.xcodeproj/project.pbxproj @@ -10,12 +10,12 @@ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; + 592CCEDE047ADE7BC089AB41 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 350ED558E29135D9B6DA12A0 /* Pods_RunnerTests.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - AAC2E12D306CAB59FFBBCD45 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0D4620345C5D87B0E7060169 /* Pods_Runner.framework */; }; - F5B795DBC53CA272FBEFA879 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D99586C11302D0BD51376E49 /* Pods_RunnerTests.framework */; }; + F6A231591C01867C1A1268AD /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EB0168EEDEA46D37DCEF97FD /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,14 +42,15 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 08FD4DDEEB83912CF46C4224 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 0D4620345C5D87B0E7060169 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; + 200C0FB6EC3E67446721343D /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 350ED558E29135D9B6DA12A0 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 531C22CC0DE7F035D9A34AA8 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 3E22E37926EFF42C5471F6F9 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 46517A87257E58848B507D86 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; @@ -60,19 +61,18 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 98E54C4176D400311D9B31BA /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - A916079A171A129DC4E2A044 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - B55481032FB34D452CFFA8F4 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - D99586C11302D0BD51376E49 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - E5FD24814B513998232432D1 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + CFA80CA756DDB3C5B27EB87C /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + DCF5FFDDA11243897B692074 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + E43B580CA757421F14EDB9D7 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + EB0168EEDEA46D37DCEF97FD /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 2FEC5FC3719CD823CD6B55B8 /* Frameworks */ = { + 02874EA149F2669FBBBEFA6B /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - F5B795DBC53CA272FBEFA879 /* Pods_RunnerTests.framework in Frameworks */, + 592CCEDE047ADE7BC089AB41 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -80,7 +80,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - AAC2E12D306CAB59FFBBCD45 /* Pods_Runner.framework in Frameworks */, + F6A231591C01867C1A1268AD /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -95,15 +95,6 @@ path = RunnerTests; sourceTree = ""; }; - 970CAEF4A0EA5D94B91BBBA3 /* Frameworks */ = { - isa = PBXGroup; - children = ( - 0D4620345C5D87B0E7060169 /* Pods_Runner.framework */, - D99586C11302D0BD51376E49 /* Pods_RunnerTests.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( @@ -122,8 +113,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - E587FBDAF5D3BEFD5D2C0C4F /* Pods */, - 970CAEF4A0EA5D94B91BBBA3 /* Frameworks */, + E9103E523A78BA47FE7905A7 /* Pods */, + 9E8FC7C3B77A794057B5F5A5 /* Frameworks */, ); sourceTree = ""; }; @@ -151,15 +142,24 @@ path = Runner; sourceTree = ""; }; - E587FBDAF5D3BEFD5D2C0C4F /* Pods */ = { + 9E8FC7C3B77A794057B5F5A5 /* Frameworks */ = { + isa = PBXGroup; + children = ( + EB0168EEDEA46D37DCEF97FD /* Pods_Runner.framework */, + 350ED558E29135D9B6DA12A0 /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; + E9103E523A78BA47FE7905A7 /* Pods */ = { isa = PBXGroup; children = ( - A916079A171A129DC4E2A044 /* Pods-Runner.debug.xcconfig */, - B55481032FB34D452CFFA8F4 /* Pods-Runner.release.xcconfig */, - 531C22CC0DE7F035D9A34AA8 /* Pods-Runner.profile.xcconfig */, - 08FD4DDEEB83912CF46C4224 /* Pods-RunnerTests.debug.xcconfig */, - 98E54C4176D400311D9B31BA /* Pods-RunnerTests.release.xcconfig */, - E5FD24814B513998232432D1 /* Pods-RunnerTests.profile.xcconfig */, + 3E22E37926EFF42C5471F6F9 /* Pods-Runner.debug.xcconfig */, + 46517A87257E58848B507D86 /* Pods-Runner.release.xcconfig */, + E43B580CA757421F14EDB9D7 /* Pods-Runner.profile.xcconfig */, + 200C0FB6EC3E67446721343D /* Pods-RunnerTests.debug.xcconfig */, + CFA80CA756DDB3C5B27EB87C /* Pods-RunnerTests.release.xcconfig */, + DCF5FFDDA11243897B692074 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 608B22E300D6DE6B6AAD535A /* [CP] Check Pods Manifest.lock */, + 7CAAD9ACDE3FCDD0AF1C7888 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 2FEC5FC3719CD823CD6B55B8 /* Frameworks */, + 02874EA149F2669FBBBEFA6B /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 662E2EF6148D023D7E7DB791 /* [CP] Check Pods Manifest.lock */, + 9999291836084819C4E0C140 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 284DD42A03DD50B0335DA1F5 /* [CP] Embed Pods Frameworks */, + FBFF1AF5B95EAA422EAE27A3 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -270,23 +270,6 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 284DD42A03DD50B0335DA1F5 /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -303,7 +286,7 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 608B22E300D6DE6B6AAD535A /* [CP] Check Pods Manifest.lock */ = { + 7CAAD9ACDE3FCDD0AF1C7888 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -325,7 +308,22 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 662E2EF6148D023D7E7DB791 /* [CP] Check Pods Manifest.lock */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Run Script"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + }; + 9999291836084819C4E0C140 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -347,20 +345,22 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { + FBFF1AF5B95EAA422EAE27A3 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputPaths = ( + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "Run Script"; - outputPaths = ( + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 08FD4DDEEB83912CF46C4224 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 200C0FB6EC3E67446721343D /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 98E54C4176D400311D9B31BA /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = CFA80CA756DDB3C5B27EB87C /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = E5FD24814B513998232432D1 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = DCF5FFDDA11243897B692074 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/webview_flutter/step_05/pubspec.yaml b/webview_flutter/step_05/pubspec.yaml index 310f8ce028..3fdc9dcaad 100644 --- a/webview_flutter/step_05/pubspec.yaml +++ b/webview_flutter/step_05/pubspec.yaml @@ -31,7 +31,6 @@ dependencies: flutter: sdk: flutter - # The following adds the Cupertino Icons font to your application. # Use with the CupertinoIcons class for iOS style icons. cupertino_icons: ^1.0.8 diff --git a/webview_flutter/step_06/ios/Runner.xcodeproj/project.pbxproj b/webview_flutter/step_06/ios/Runner.xcodeproj/project.pbxproj index 8f6e3ffc09..1fdcd8b9c4 100644 --- a/webview_flutter/step_06/ios/Runner.xcodeproj/project.pbxproj +++ b/webview_flutter/step_06/ios/Runner.xcodeproj/project.pbxproj @@ -10,12 +10,12 @@ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; + 592CCEDE047ADE7BC089AB41 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 350ED558E29135D9B6DA12A0 /* Pods_RunnerTests.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - AAC2E12D306CAB59FFBBCD45 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0D4620345C5D87B0E7060169 /* Pods_Runner.framework */; }; - F5B795DBC53CA272FBEFA879 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D99586C11302D0BD51376E49 /* Pods_RunnerTests.framework */; }; + F6A231591C01867C1A1268AD /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EB0168EEDEA46D37DCEF97FD /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,14 +42,15 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 08FD4DDEEB83912CF46C4224 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 0D4620345C5D87B0E7060169 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; + 200C0FB6EC3E67446721343D /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 350ED558E29135D9B6DA12A0 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 531C22CC0DE7F035D9A34AA8 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 3E22E37926EFF42C5471F6F9 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 46517A87257E58848B507D86 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; @@ -60,19 +61,18 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 98E54C4176D400311D9B31BA /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - A916079A171A129DC4E2A044 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - B55481032FB34D452CFFA8F4 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - D99586C11302D0BD51376E49 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - E5FD24814B513998232432D1 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + CFA80CA756DDB3C5B27EB87C /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + DCF5FFDDA11243897B692074 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + E43B580CA757421F14EDB9D7 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + EB0168EEDEA46D37DCEF97FD /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 2FEC5FC3719CD823CD6B55B8 /* Frameworks */ = { + 02874EA149F2669FBBBEFA6B /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - F5B795DBC53CA272FBEFA879 /* Pods_RunnerTests.framework in Frameworks */, + 592CCEDE047ADE7BC089AB41 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -80,7 +80,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - AAC2E12D306CAB59FFBBCD45 /* Pods_Runner.framework in Frameworks */, + F6A231591C01867C1A1268AD /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -95,15 +95,6 @@ path = RunnerTests; sourceTree = ""; }; - 970CAEF4A0EA5D94B91BBBA3 /* Frameworks */ = { - isa = PBXGroup; - children = ( - 0D4620345C5D87B0E7060169 /* Pods_Runner.framework */, - D99586C11302D0BD51376E49 /* Pods_RunnerTests.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( @@ -122,8 +113,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - E587FBDAF5D3BEFD5D2C0C4F /* Pods */, - 970CAEF4A0EA5D94B91BBBA3 /* Frameworks */, + E9103E523A78BA47FE7905A7 /* Pods */, + 9E8FC7C3B77A794057B5F5A5 /* Frameworks */, ); sourceTree = ""; }; @@ -151,15 +142,24 @@ path = Runner; sourceTree = ""; }; - E587FBDAF5D3BEFD5D2C0C4F /* Pods */ = { + 9E8FC7C3B77A794057B5F5A5 /* Frameworks */ = { + isa = PBXGroup; + children = ( + EB0168EEDEA46D37DCEF97FD /* Pods_Runner.framework */, + 350ED558E29135D9B6DA12A0 /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; + E9103E523A78BA47FE7905A7 /* Pods */ = { isa = PBXGroup; children = ( - A916079A171A129DC4E2A044 /* Pods-Runner.debug.xcconfig */, - B55481032FB34D452CFFA8F4 /* Pods-Runner.release.xcconfig */, - 531C22CC0DE7F035D9A34AA8 /* Pods-Runner.profile.xcconfig */, - 08FD4DDEEB83912CF46C4224 /* Pods-RunnerTests.debug.xcconfig */, - 98E54C4176D400311D9B31BA /* Pods-RunnerTests.release.xcconfig */, - E5FD24814B513998232432D1 /* Pods-RunnerTests.profile.xcconfig */, + 3E22E37926EFF42C5471F6F9 /* Pods-Runner.debug.xcconfig */, + 46517A87257E58848B507D86 /* Pods-Runner.release.xcconfig */, + E43B580CA757421F14EDB9D7 /* Pods-Runner.profile.xcconfig */, + 200C0FB6EC3E67446721343D /* Pods-RunnerTests.debug.xcconfig */, + CFA80CA756DDB3C5B27EB87C /* Pods-RunnerTests.release.xcconfig */, + DCF5FFDDA11243897B692074 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 608B22E300D6DE6B6AAD535A /* [CP] Check Pods Manifest.lock */, + 7CAAD9ACDE3FCDD0AF1C7888 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 2FEC5FC3719CD823CD6B55B8 /* Frameworks */, + 02874EA149F2669FBBBEFA6B /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 662E2EF6148D023D7E7DB791 /* [CP] Check Pods Manifest.lock */, + 9999291836084819C4E0C140 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 284DD42A03DD50B0335DA1F5 /* [CP] Embed Pods Frameworks */, + FBFF1AF5B95EAA422EAE27A3 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -270,23 +270,6 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 284DD42A03DD50B0335DA1F5 /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -303,7 +286,7 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 608B22E300D6DE6B6AAD535A /* [CP] Check Pods Manifest.lock */ = { + 7CAAD9ACDE3FCDD0AF1C7888 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -325,7 +308,22 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 662E2EF6148D023D7E7DB791 /* [CP] Check Pods Manifest.lock */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Run Script"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + }; + 9999291836084819C4E0C140 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -347,20 +345,22 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { + FBFF1AF5B95EAA422EAE27A3 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputPaths = ( + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "Run Script"; - outputPaths = ( + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 08FD4DDEEB83912CF46C4224 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 200C0FB6EC3E67446721343D /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 98E54C4176D400311D9B31BA /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = CFA80CA756DDB3C5B27EB87C /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = E5FD24814B513998232432D1 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = DCF5FFDDA11243897B692074 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/webview_flutter/step_06/pubspec.yaml b/webview_flutter/step_06/pubspec.yaml index 310f8ce028..3fdc9dcaad 100644 --- a/webview_flutter/step_06/pubspec.yaml +++ b/webview_flutter/step_06/pubspec.yaml @@ -31,7 +31,6 @@ dependencies: flutter: sdk: flutter - # The following adds the Cupertino Icons font to your application. # Use with the CupertinoIcons class for iOS style icons. cupertino_icons: ^1.0.8 diff --git a/webview_flutter/step_07/ios/Runner.xcodeproj/project.pbxproj b/webview_flutter/step_07/ios/Runner.xcodeproj/project.pbxproj index 8f6e3ffc09..1fdcd8b9c4 100644 --- a/webview_flutter/step_07/ios/Runner.xcodeproj/project.pbxproj +++ b/webview_flutter/step_07/ios/Runner.xcodeproj/project.pbxproj @@ -10,12 +10,12 @@ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; + 592CCEDE047ADE7BC089AB41 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 350ED558E29135D9B6DA12A0 /* Pods_RunnerTests.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - AAC2E12D306CAB59FFBBCD45 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0D4620345C5D87B0E7060169 /* Pods_Runner.framework */; }; - F5B795DBC53CA272FBEFA879 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D99586C11302D0BD51376E49 /* Pods_RunnerTests.framework */; }; + F6A231591C01867C1A1268AD /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EB0168EEDEA46D37DCEF97FD /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,14 +42,15 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 08FD4DDEEB83912CF46C4224 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 0D4620345C5D87B0E7060169 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; + 200C0FB6EC3E67446721343D /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 350ED558E29135D9B6DA12A0 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 531C22CC0DE7F035D9A34AA8 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 3E22E37926EFF42C5471F6F9 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 46517A87257E58848B507D86 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; @@ -60,19 +61,18 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 98E54C4176D400311D9B31BA /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - A916079A171A129DC4E2A044 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - B55481032FB34D452CFFA8F4 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - D99586C11302D0BD51376E49 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - E5FD24814B513998232432D1 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + CFA80CA756DDB3C5B27EB87C /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + DCF5FFDDA11243897B692074 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + E43B580CA757421F14EDB9D7 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + EB0168EEDEA46D37DCEF97FD /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 2FEC5FC3719CD823CD6B55B8 /* Frameworks */ = { + 02874EA149F2669FBBBEFA6B /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - F5B795DBC53CA272FBEFA879 /* Pods_RunnerTests.framework in Frameworks */, + 592CCEDE047ADE7BC089AB41 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -80,7 +80,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - AAC2E12D306CAB59FFBBCD45 /* Pods_Runner.framework in Frameworks */, + F6A231591C01867C1A1268AD /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -95,15 +95,6 @@ path = RunnerTests; sourceTree = ""; }; - 970CAEF4A0EA5D94B91BBBA3 /* Frameworks */ = { - isa = PBXGroup; - children = ( - 0D4620345C5D87B0E7060169 /* Pods_Runner.framework */, - D99586C11302D0BD51376E49 /* Pods_RunnerTests.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( @@ -122,8 +113,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - E587FBDAF5D3BEFD5D2C0C4F /* Pods */, - 970CAEF4A0EA5D94B91BBBA3 /* Frameworks */, + E9103E523A78BA47FE7905A7 /* Pods */, + 9E8FC7C3B77A794057B5F5A5 /* Frameworks */, ); sourceTree = ""; }; @@ -151,15 +142,24 @@ path = Runner; sourceTree = ""; }; - E587FBDAF5D3BEFD5D2C0C4F /* Pods */ = { + 9E8FC7C3B77A794057B5F5A5 /* Frameworks */ = { + isa = PBXGroup; + children = ( + EB0168EEDEA46D37DCEF97FD /* Pods_Runner.framework */, + 350ED558E29135D9B6DA12A0 /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; + E9103E523A78BA47FE7905A7 /* Pods */ = { isa = PBXGroup; children = ( - A916079A171A129DC4E2A044 /* Pods-Runner.debug.xcconfig */, - B55481032FB34D452CFFA8F4 /* Pods-Runner.release.xcconfig */, - 531C22CC0DE7F035D9A34AA8 /* Pods-Runner.profile.xcconfig */, - 08FD4DDEEB83912CF46C4224 /* Pods-RunnerTests.debug.xcconfig */, - 98E54C4176D400311D9B31BA /* Pods-RunnerTests.release.xcconfig */, - E5FD24814B513998232432D1 /* Pods-RunnerTests.profile.xcconfig */, + 3E22E37926EFF42C5471F6F9 /* Pods-Runner.debug.xcconfig */, + 46517A87257E58848B507D86 /* Pods-Runner.release.xcconfig */, + E43B580CA757421F14EDB9D7 /* Pods-Runner.profile.xcconfig */, + 200C0FB6EC3E67446721343D /* Pods-RunnerTests.debug.xcconfig */, + CFA80CA756DDB3C5B27EB87C /* Pods-RunnerTests.release.xcconfig */, + DCF5FFDDA11243897B692074 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 608B22E300D6DE6B6AAD535A /* [CP] Check Pods Manifest.lock */, + 7CAAD9ACDE3FCDD0AF1C7888 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 2FEC5FC3719CD823CD6B55B8 /* Frameworks */, + 02874EA149F2669FBBBEFA6B /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 662E2EF6148D023D7E7DB791 /* [CP] Check Pods Manifest.lock */, + 9999291836084819C4E0C140 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 284DD42A03DD50B0335DA1F5 /* [CP] Embed Pods Frameworks */, + FBFF1AF5B95EAA422EAE27A3 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -270,23 +270,6 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 284DD42A03DD50B0335DA1F5 /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -303,7 +286,7 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 608B22E300D6DE6B6AAD535A /* [CP] Check Pods Manifest.lock */ = { + 7CAAD9ACDE3FCDD0AF1C7888 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -325,7 +308,22 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 662E2EF6148D023D7E7DB791 /* [CP] Check Pods Manifest.lock */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Run Script"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + }; + 9999291836084819C4E0C140 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -347,20 +345,22 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { + FBFF1AF5B95EAA422EAE27A3 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputPaths = ( + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "Run Script"; - outputPaths = ( + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 08FD4DDEEB83912CF46C4224 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 200C0FB6EC3E67446721343D /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 98E54C4176D400311D9B31BA /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = CFA80CA756DDB3C5B27EB87C /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = E5FD24814B513998232432D1 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = DCF5FFDDA11243897B692074 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/webview_flutter/step_07/pubspec.yaml b/webview_flutter/step_07/pubspec.yaml index 310f8ce028..3fdc9dcaad 100644 --- a/webview_flutter/step_07/pubspec.yaml +++ b/webview_flutter/step_07/pubspec.yaml @@ -31,7 +31,6 @@ dependencies: flutter: sdk: flutter - # The following adds the Cupertino Icons font to your application. # Use with the CupertinoIcons class for iOS style icons. cupertino_icons: ^1.0.8 diff --git a/webview_flutter/step_08/ios/Runner.xcodeproj/project.pbxproj b/webview_flutter/step_08/ios/Runner.xcodeproj/project.pbxproj index 8f6e3ffc09..1fdcd8b9c4 100644 --- a/webview_flutter/step_08/ios/Runner.xcodeproj/project.pbxproj +++ b/webview_flutter/step_08/ios/Runner.xcodeproj/project.pbxproj @@ -10,12 +10,12 @@ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; + 592CCEDE047ADE7BC089AB41 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 350ED558E29135D9B6DA12A0 /* Pods_RunnerTests.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - AAC2E12D306CAB59FFBBCD45 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0D4620345C5D87B0E7060169 /* Pods_Runner.framework */; }; - F5B795DBC53CA272FBEFA879 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D99586C11302D0BD51376E49 /* Pods_RunnerTests.framework */; }; + F6A231591C01867C1A1268AD /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EB0168EEDEA46D37DCEF97FD /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,14 +42,15 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 08FD4DDEEB83912CF46C4224 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 0D4620345C5D87B0E7060169 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; + 200C0FB6EC3E67446721343D /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 350ED558E29135D9B6DA12A0 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 531C22CC0DE7F035D9A34AA8 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 3E22E37926EFF42C5471F6F9 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 46517A87257E58848B507D86 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; @@ -60,19 +61,18 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 98E54C4176D400311D9B31BA /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - A916079A171A129DC4E2A044 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - B55481032FB34D452CFFA8F4 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - D99586C11302D0BD51376E49 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - E5FD24814B513998232432D1 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + CFA80CA756DDB3C5B27EB87C /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + DCF5FFDDA11243897B692074 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + E43B580CA757421F14EDB9D7 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + EB0168EEDEA46D37DCEF97FD /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 2FEC5FC3719CD823CD6B55B8 /* Frameworks */ = { + 02874EA149F2669FBBBEFA6B /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - F5B795DBC53CA272FBEFA879 /* Pods_RunnerTests.framework in Frameworks */, + 592CCEDE047ADE7BC089AB41 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -80,7 +80,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - AAC2E12D306CAB59FFBBCD45 /* Pods_Runner.framework in Frameworks */, + F6A231591C01867C1A1268AD /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -95,15 +95,6 @@ path = RunnerTests; sourceTree = ""; }; - 970CAEF4A0EA5D94B91BBBA3 /* Frameworks */ = { - isa = PBXGroup; - children = ( - 0D4620345C5D87B0E7060169 /* Pods_Runner.framework */, - D99586C11302D0BD51376E49 /* Pods_RunnerTests.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( @@ -122,8 +113,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - E587FBDAF5D3BEFD5D2C0C4F /* Pods */, - 970CAEF4A0EA5D94B91BBBA3 /* Frameworks */, + E9103E523A78BA47FE7905A7 /* Pods */, + 9E8FC7C3B77A794057B5F5A5 /* Frameworks */, ); sourceTree = ""; }; @@ -151,15 +142,24 @@ path = Runner; sourceTree = ""; }; - E587FBDAF5D3BEFD5D2C0C4F /* Pods */ = { + 9E8FC7C3B77A794057B5F5A5 /* Frameworks */ = { + isa = PBXGroup; + children = ( + EB0168EEDEA46D37DCEF97FD /* Pods_Runner.framework */, + 350ED558E29135D9B6DA12A0 /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; + E9103E523A78BA47FE7905A7 /* Pods */ = { isa = PBXGroup; children = ( - A916079A171A129DC4E2A044 /* Pods-Runner.debug.xcconfig */, - B55481032FB34D452CFFA8F4 /* Pods-Runner.release.xcconfig */, - 531C22CC0DE7F035D9A34AA8 /* Pods-Runner.profile.xcconfig */, - 08FD4DDEEB83912CF46C4224 /* Pods-RunnerTests.debug.xcconfig */, - 98E54C4176D400311D9B31BA /* Pods-RunnerTests.release.xcconfig */, - E5FD24814B513998232432D1 /* Pods-RunnerTests.profile.xcconfig */, + 3E22E37926EFF42C5471F6F9 /* Pods-Runner.debug.xcconfig */, + 46517A87257E58848B507D86 /* Pods-Runner.release.xcconfig */, + E43B580CA757421F14EDB9D7 /* Pods-Runner.profile.xcconfig */, + 200C0FB6EC3E67446721343D /* Pods-RunnerTests.debug.xcconfig */, + CFA80CA756DDB3C5B27EB87C /* Pods-RunnerTests.release.xcconfig */, + DCF5FFDDA11243897B692074 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 608B22E300D6DE6B6AAD535A /* [CP] Check Pods Manifest.lock */, + 7CAAD9ACDE3FCDD0AF1C7888 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 2FEC5FC3719CD823CD6B55B8 /* Frameworks */, + 02874EA149F2669FBBBEFA6B /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 662E2EF6148D023D7E7DB791 /* [CP] Check Pods Manifest.lock */, + 9999291836084819C4E0C140 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 284DD42A03DD50B0335DA1F5 /* [CP] Embed Pods Frameworks */, + FBFF1AF5B95EAA422EAE27A3 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -270,23 +270,6 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 284DD42A03DD50B0335DA1F5 /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -303,7 +286,7 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 608B22E300D6DE6B6AAD535A /* [CP] Check Pods Manifest.lock */ = { + 7CAAD9ACDE3FCDD0AF1C7888 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -325,7 +308,22 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 662E2EF6148D023D7E7DB791 /* [CP] Check Pods Manifest.lock */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Run Script"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + }; + 9999291836084819C4E0C140 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -347,20 +345,22 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { + FBFF1AF5B95EAA422EAE27A3 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputPaths = ( + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "Run Script"; - outputPaths = ( + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 08FD4DDEEB83912CF46C4224 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 200C0FB6EC3E67446721343D /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 98E54C4176D400311D9B31BA /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = CFA80CA756DDB3C5B27EB87C /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = E5FD24814B513998232432D1 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = DCF5FFDDA11243897B692074 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/webview_flutter/step_08/pubspec.yaml b/webview_flutter/step_08/pubspec.yaml index 310f8ce028..3fdc9dcaad 100644 --- a/webview_flutter/step_08/pubspec.yaml +++ b/webview_flutter/step_08/pubspec.yaml @@ -31,7 +31,6 @@ dependencies: flutter: sdk: flutter - # The following adds the Cupertino Icons font to your application. # Use with the CupertinoIcons class for iOS style icons. cupertino_icons: ^1.0.8 diff --git a/webview_flutter/step_09/ios/Runner.xcodeproj/project.pbxproj b/webview_flutter/step_09/ios/Runner.xcodeproj/project.pbxproj index 8f6e3ffc09..1fdcd8b9c4 100644 --- a/webview_flutter/step_09/ios/Runner.xcodeproj/project.pbxproj +++ b/webview_flutter/step_09/ios/Runner.xcodeproj/project.pbxproj @@ -10,12 +10,12 @@ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; + 592CCEDE047ADE7BC089AB41 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 350ED558E29135D9B6DA12A0 /* Pods_RunnerTests.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - AAC2E12D306CAB59FFBBCD45 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0D4620345C5D87B0E7060169 /* Pods_Runner.framework */; }; - F5B795DBC53CA272FBEFA879 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D99586C11302D0BD51376E49 /* Pods_RunnerTests.framework */; }; + F6A231591C01867C1A1268AD /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EB0168EEDEA46D37DCEF97FD /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,14 +42,15 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 08FD4DDEEB83912CF46C4224 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 0D4620345C5D87B0E7060169 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; + 200C0FB6EC3E67446721343D /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 350ED558E29135D9B6DA12A0 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 531C22CC0DE7F035D9A34AA8 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 3E22E37926EFF42C5471F6F9 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 46517A87257E58848B507D86 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; @@ -60,19 +61,18 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 98E54C4176D400311D9B31BA /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - A916079A171A129DC4E2A044 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - B55481032FB34D452CFFA8F4 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - D99586C11302D0BD51376E49 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - E5FD24814B513998232432D1 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + CFA80CA756DDB3C5B27EB87C /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + DCF5FFDDA11243897B692074 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + E43B580CA757421F14EDB9D7 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + EB0168EEDEA46D37DCEF97FD /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 2FEC5FC3719CD823CD6B55B8 /* Frameworks */ = { + 02874EA149F2669FBBBEFA6B /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - F5B795DBC53CA272FBEFA879 /* Pods_RunnerTests.framework in Frameworks */, + 592CCEDE047ADE7BC089AB41 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -80,7 +80,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - AAC2E12D306CAB59FFBBCD45 /* Pods_Runner.framework in Frameworks */, + F6A231591C01867C1A1268AD /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -95,15 +95,6 @@ path = RunnerTests; sourceTree = ""; }; - 970CAEF4A0EA5D94B91BBBA3 /* Frameworks */ = { - isa = PBXGroup; - children = ( - 0D4620345C5D87B0E7060169 /* Pods_Runner.framework */, - D99586C11302D0BD51376E49 /* Pods_RunnerTests.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( @@ -122,8 +113,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - E587FBDAF5D3BEFD5D2C0C4F /* Pods */, - 970CAEF4A0EA5D94B91BBBA3 /* Frameworks */, + E9103E523A78BA47FE7905A7 /* Pods */, + 9E8FC7C3B77A794057B5F5A5 /* Frameworks */, ); sourceTree = ""; }; @@ -151,15 +142,24 @@ path = Runner; sourceTree = ""; }; - E587FBDAF5D3BEFD5D2C0C4F /* Pods */ = { + 9E8FC7C3B77A794057B5F5A5 /* Frameworks */ = { + isa = PBXGroup; + children = ( + EB0168EEDEA46D37DCEF97FD /* Pods_Runner.framework */, + 350ED558E29135D9B6DA12A0 /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; + E9103E523A78BA47FE7905A7 /* Pods */ = { isa = PBXGroup; children = ( - A916079A171A129DC4E2A044 /* Pods-Runner.debug.xcconfig */, - B55481032FB34D452CFFA8F4 /* Pods-Runner.release.xcconfig */, - 531C22CC0DE7F035D9A34AA8 /* Pods-Runner.profile.xcconfig */, - 08FD4DDEEB83912CF46C4224 /* Pods-RunnerTests.debug.xcconfig */, - 98E54C4176D400311D9B31BA /* Pods-RunnerTests.release.xcconfig */, - E5FD24814B513998232432D1 /* Pods-RunnerTests.profile.xcconfig */, + 3E22E37926EFF42C5471F6F9 /* Pods-Runner.debug.xcconfig */, + 46517A87257E58848B507D86 /* Pods-Runner.release.xcconfig */, + E43B580CA757421F14EDB9D7 /* Pods-Runner.profile.xcconfig */, + 200C0FB6EC3E67446721343D /* Pods-RunnerTests.debug.xcconfig */, + CFA80CA756DDB3C5B27EB87C /* Pods-RunnerTests.release.xcconfig */, + DCF5FFDDA11243897B692074 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 608B22E300D6DE6B6AAD535A /* [CP] Check Pods Manifest.lock */, + 7CAAD9ACDE3FCDD0AF1C7888 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 2FEC5FC3719CD823CD6B55B8 /* Frameworks */, + 02874EA149F2669FBBBEFA6B /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 662E2EF6148D023D7E7DB791 /* [CP] Check Pods Manifest.lock */, + 9999291836084819C4E0C140 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 284DD42A03DD50B0335DA1F5 /* [CP] Embed Pods Frameworks */, + FBFF1AF5B95EAA422EAE27A3 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -270,23 +270,6 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 284DD42A03DD50B0335DA1F5 /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -303,7 +286,7 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 608B22E300D6DE6B6AAD535A /* [CP] Check Pods Manifest.lock */ = { + 7CAAD9ACDE3FCDD0AF1C7888 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -325,7 +308,22 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 662E2EF6148D023D7E7DB791 /* [CP] Check Pods Manifest.lock */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Run Script"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + }; + 9999291836084819C4E0C140 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -347,20 +345,22 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { + FBFF1AF5B95EAA422EAE27A3 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputPaths = ( + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "Run Script"; - outputPaths = ( + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 08FD4DDEEB83912CF46C4224 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 200C0FB6EC3E67446721343D /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 98E54C4176D400311D9B31BA /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = CFA80CA756DDB3C5B27EB87C /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = E5FD24814B513998232432D1 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = DCF5FFDDA11243897B692074 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/webview_flutter/step_09/pubspec.yaml b/webview_flutter/step_09/pubspec.yaml index 310f8ce028..3fdc9dcaad 100644 --- a/webview_flutter/step_09/pubspec.yaml +++ b/webview_flutter/step_09/pubspec.yaml @@ -31,7 +31,6 @@ dependencies: flutter: sdk: flutter - # The following adds the Cupertino Icons font to your application. # Use with the CupertinoIcons class for iOS style icons. cupertino_icons: ^1.0.8 diff --git a/webview_flutter/step_10/ios/Runner.xcodeproj/project.pbxproj b/webview_flutter/step_10/ios/Runner.xcodeproj/project.pbxproj index 8f6e3ffc09..1fdcd8b9c4 100644 --- a/webview_flutter/step_10/ios/Runner.xcodeproj/project.pbxproj +++ b/webview_flutter/step_10/ios/Runner.xcodeproj/project.pbxproj @@ -10,12 +10,12 @@ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; + 592CCEDE047ADE7BC089AB41 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 350ED558E29135D9B6DA12A0 /* Pods_RunnerTests.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - AAC2E12D306CAB59FFBBCD45 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0D4620345C5D87B0E7060169 /* Pods_Runner.framework */; }; - F5B795DBC53CA272FBEFA879 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D99586C11302D0BD51376E49 /* Pods_RunnerTests.framework */; }; + F6A231591C01867C1A1268AD /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EB0168EEDEA46D37DCEF97FD /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,14 +42,15 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 08FD4DDEEB83912CF46C4224 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 0D4620345C5D87B0E7060169 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; + 200C0FB6EC3E67446721343D /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 350ED558E29135D9B6DA12A0 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 531C22CC0DE7F035D9A34AA8 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 3E22E37926EFF42C5471F6F9 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 46517A87257E58848B507D86 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; @@ -60,19 +61,18 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 98E54C4176D400311D9B31BA /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - A916079A171A129DC4E2A044 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - B55481032FB34D452CFFA8F4 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - D99586C11302D0BD51376E49 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - E5FD24814B513998232432D1 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + CFA80CA756DDB3C5B27EB87C /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + DCF5FFDDA11243897B692074 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + E43B580CA757421F14EDB9D7 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + EB0168EEDEA46D37DCEF97FD /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 2FEC5FC3719CD823CD6B55B8 /* Frameworks */ = { + 02874EA149F2669FBBBEFA6B /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - F5B795DBC53CA272FBEFA879 /* Pods_RunnerTests.framework in Frameworks */, + 592CCEDE047ADE7BC089AB41 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -80,7 +80,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - AAC2E12D306CAB59FFBBCD45 /* Pods_Runner.framework in Frameworks */, + F6A231591C01867C1A1268AD /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -95,15 +95,6 @@ path = RunnerTests; sourceTree = ""; }; - 970CAEF4A0EA5D94B91BBBA3 /* Frameworks */ = { - isa = PBXGroup; - children = ( - 0D4620345C5D87B0E7060169 /* Pods_Runner.framework */, - D99586C11302D0BD51376E49 /* Pods_RunnerTests.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( @@ -122,8 +113,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - E587FBDAF5D3BEFD5D2C0C4F /* Pods */, - 970CAEF4A0EA5D94B91BBBA3 /* Frameworks */, + E9103E523A78BA47FE7905A7 /* Pods */, + 9E8FC7C3B77A794057B5F5A5 /* Frameworks */, ); sourceTree = ""; }; @@ -151,15 +142,24 @@ path = Runner; sourceTree = ""; }; - E587FBDAF5D3BEFD5D2C0C4F /* Pods */ = { + 9E8FC7C3B77A794057B5F5A5 /* Frameworks */ = { + isa = PBXGroup; + children = ( + EB0168EEDEA46D37DCEF97FD /* Pods_Runner.framework */, + 350ED558E29135D9B6DA12A0 /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; + E9103E523A78BA47FE7905A7 /* Pods */ = { isa = PBXGroup; children = ( - A916079A171A129DC4E2A044 /* Pods-Runner.debug.xcconfig */, - B55481032FB34D452CFFA8F4 /* Pods-Runner.release.xcconfig */, - 531C22CC0DE7F035D9A34AA8 /* Pods-Runner.profile.xcconfig */, - 08FD4DDEEB83912CF46C4224 /* Pods-RunnerTests.debug.xcconfig */, - 98E54C4176D400311D9B31BA /* Pods-RunnerTests.release.xcconfig */, - E5FD24814B513998232432D1 /* Pods-RunnerTests.profile.xcconfig */, + 3E22E37926EFF42C5471F6F9 /* Pods-Runner.debug.xcconfig */, + 46517A87257E58848B507D86 /* Pods-Runner.release.xcconfig */, + E43B580CA757421F14EDB9D7 /* Pods-Runner.profile.xcconfig */, + 200C0FB6EC3E67446721343D /* Pods-RunnerTests.debug.xcconfig */, + CFA80CA756DDB3C5B27EB87C /* Pods-RunnerTests.release.xcconfig */, + DCF5FFDDA11243897B692074 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 608B22E300D6DE6B6AAD535A /* [CP] Check Pods Manifest.lock */, + 7CAAD9ACDE3FCDD0AF1C7888 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 2FEC5FC3719CD823CD6B55B8 /* Frameworks */, + 02874EA149F2669FBBBEFA6B /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 662E2EF6148D023D7E7DB791 /* [CP] Check Pods Manifest.lock */, + 9999291836084819C4E0C140 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 284DD42A03DD50B0335DA1F5 /* [CP] Embed Pods Frameworks */, + FBFF1AF5B95EAA422EAE27A3 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -270,23 +270,6 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 284DD42A03DD50B0335DA1F5 /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -303,7 +286,7 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 608B22E300D6DE6B6AAD535A /* [CP] Check Pods Manifest.lock */ = { + 7CAAD9ACDE3FCDD0AF1C7888 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -325,7 +308,22 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 662E2EF6148D023D7E7DB791 /* [CP] Check Pods Manifest.lock */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Run Script"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + }; + 9999291836084819C4E0C140 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -347,20 +345,22 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { + FBFF1AF5B95EAA422EAE27A3 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputPaths = ( + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "Run Script"; - outputPaths = ( + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 08FD4DDEEB83912CF46C4224 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 200C0FB6EC3E67446721343D /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 98E54C4176D400311D9B31BA /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = CFA80CA756DDB3C5B27EB87C /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = E5FD24814B513998232432D1 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = DCF5FFDDA11243897B692074 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/webview_flutter/step_10/pubspec.yaml b/webview_flutter/step_10/pubspec.yaml index 310f8ce028..3fdc9dcaad 100644 --- a/webview_flutter/step_10/pubspec.yaml +++ b/webview_flutter/step_10/pubspec.yaml @@ -31,7 +31,6 @@ dependencies: flutter: sdk: flutter - # The following adds the Cupertino Icons font to your application. # Use with the CupertinoIcons class for iOS style icons. cupertino_icons: ^1.0.8 diff --git a/webview_flutter/step_11/ios/Runner.xcodeproj/project.pbxproj b/webview_flutter/step_11/ios/Runner.xcodeproj/project.pbxproj index 8f6e3ffc09..1fdcd8b9c4 100644 --- a/webview_flutter/step_11/ios/Runner.xcodeproj/project.pbxproj +++ b/webview_flutter/step_11/ios/Runner.xcodeproj/project.pbxproj @@ -10,12 +10,12 @@ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; + 592CCEDE047ADE7BC089AB41 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 350ED558E29135D9B6DA12A0 /* Pods_RunnerTests.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - AAC2E12D306CAB59FFBBCD45 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0D4620345C5D87B0E7060169 /* Pods_Runner.framework */; }; - F5B795DBC53CA272FBEFA879 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D99586C11302D0BD51376E49 /* Pods_RunnerTests.framework */; }; + F6A231591C01867C1A1268AD /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EB0168EEDEA46D37DCEF97FD /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,14 +42,15 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 08FD4DDEEB83912CF46C4224 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 0D4620345C5D87B0E7060169 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; + 200C0FB6EC3E67446721343D /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 350ED558E29135D9B6DA12A0 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 531C22CC0DE7F035D9A34AA8 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 3E22E37926EFF42C5471F6F9 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 46517A87257E58848B507D86 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; @@ -60,19 +61,18 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 98E54C4176D400311D9B31BA /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - A916079A171A129DC4E2A044 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - B55481032FB34D452CFFA8F4 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - D99586C11302D0BD51376E49 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - E5FD24814B513998232432D1 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + CFA80CA756DDB3C5B27EB87C /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + DCF5FFDDA11243897B692074 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + E43B580CA757421F14EDB9D7 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + EB0168EEDEA46D37DCEF97FD /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 2FEC5FC3719CD823CD6B55B8 /* Frameworks */ = { + 02874EA149F2669FBBBEFA6B /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - F5B795DBC53CA272FBEFA879 /* Pods_RunnerTests.framework in Frameworks */, + 592CCEDE047ADE7BC089AB41 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -80,7 +80,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - AAC2E12D306CAB59FFBBCD45 /* Pods_Runner.framework in Frameworks */, + F6A231591C01867C1A1268AD /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -95,15 +95,6 @@ path = RunnerTests; sourceTree = ""; }; - 970CAEF4A0EA5D94B91BBBA3 /* Frameworks */ = { - isa = PBXGroup; - children = ( - 0D4620345C5D87B0E7060169 /* Pods_Runner.framework */, - D99586C11302D0BD51376E49 /* Pods_RunnerTests.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( @@ -122,8 +113,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - E587FBDAF5D3BEFD5D2C0C4F /* Pods */, - 970CAEF4A0EA5D94B91BBBA3 /* Frameworks */, + E9103E523A78BA47FE7905A7 /* Pods */, + 9E8FC7C3B77A794057B5F5A5 /* Frameworks */, ); sourceTree = ""; }; @@ -151,15 +142,24 @@ path = Runner; sourceTree = ""; }; - E587FBDAF5D3BEFD5D2C0C4F /* Pods */ = { + 9E8FC7C3B77A794057B5F5A5 /* Frameworks */ = { + isa = PBXGroup; + children = ( + EB0168EEDEA46D37DCEF97FD /* Pods_Runner.framework */, + 350ED558E29135D9B6DA12A0 /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; + E9103E523A78BA47FE7905A7 /* Pods */ = { isa = PBXGroup; children = ( - A916079A171A129DC4E2A044 /* Pods-Runner.debug.xcconfig */, - B55481032FB34D452CFFA8F4 /* Pods-Runner.release.xcconfig */, - 531C22CC0DE7F035D9A34AA8 /* Pods-Runner.profile.xcconfig */, - 08FD4DDEEB83912CF46C4224 /* Pods-RunnerTests.debug.xcconfig */, - 98E54C4176D400311D9B31BA /* Pods-RunnerTests.release.xcconfig */, - E5FD24814B513998232432D1 /* Pods-RunnerTests.profile.xcconfig */, + 3E22E37926EFF42C5471F6F9 /* Pods-Runner.debug.xcconfig */, + 46517A87257E58848B507D86 /* Pods-Runner.release.xcconfig */, + E43B580CA757421F14EDB9D7 /* Pods-Runner.profile.xcconfig */, + 200C0FB6EC3E67446721343D /* Pods-RunnerTests.debug.xcconfig */, + CFA80CA756DDB3C5B27EB87C /* Pods-RunnerTests.release.xcconfig */, + DCF5FFDDA11243897B692074 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 608B22E300D6DE6B6AAD535A /* [CP] Check Pods Manifest.lock */, + 7CAAD9ACDE3FCDD0AF1C7888 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 2FEC5FC3719CD823CD6B55B8 /* Frameworks */, + 02874EA149F2669FBBBEFA6B /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 662E2EF6148D023D7E7DB791 /* [CP] Check Pods Manifest.lock */, + 9999291836084819C4E0C140 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 284DD42A03DD50B0335DA1F5 /* [CP] Embed Pods Frameworks */, + FBFF1AF5B95EAA422EAE27A3 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -270,23 +270,6 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 284DD42A03DD50B0335DA1F5 /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -303,7 +286,7 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 608B22E300D6DE6B6AAD535A /* [CP] Check Pods Manifest.lock */ = { + 7CAAD9ACDE3FCDD0AF1C7888 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -325,7 +308,22 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 662E2EF6148D023D7E7DB791 /* [CP] Check Pods Manifest.lock */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Run Script"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + }; + 9999291836084819C4E0C140 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -347,20 +345,22 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { + FBFF1AF5B95EAA422EAE27A3 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputPaths = ( + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "Run Script"; - outputPaths = ( + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 08FD4DDEEB83912CF46C4224 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 200C0FB6EC3E67446721343D /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 98E54C4176D400311D9B31BA /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = CFA80CA756DDB3C5B27EB87C /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = E5FD24814B513998232432D1 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = DCF5FFDDA11243897B692074 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/webview_flutter/step_11/pubspec.yaml b/webview_flutter/step_11/pubspec.yaml index 310f8ce028..3fdc9dcaad 100644 --- a/webview_flutter/step_11/pubspec.yaml +++ b/webview_flutter/step_11/pubspec.yaml @@ -31,7 +31,6 @@ dependencies: flutter: sdk: flutter - # The following adds the Cupertino Icons font to your application. # Use with the CupertinoIcons class for iOS style icons. cupertino_icons: ^1.0.8 diff --git a/webview_flutter/step_12/ios/Runner.xcodeproj/project.pbxproj b/webview_flutter/step_12/ios/Runner.xcodeproj/project.pbxproj index 8f6e3ffc09..1fdcd8b9c4 100644 --- a/webview_flutter/step_12/ios/Runner.xcodeproj/project.pbxproj +++ b/webview_flutter/step_12/ios/Runner.xcodeproj/project.pbxproj @@ -10,12 +10,12 @@ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; + 592CCEDE047ADE7BC089AB41 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 350ED558E29135D9B6DA12A0 /* Pods_RunnerTests.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - AAC2E12D306CAB59FFBBCD45 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0D4620345C5D87B0E7060169 /* Pods_Runner.framework */; }; - F5B795DBC53CA272FBEFA879 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D99586C11302D0BD51376E49 /* Pods_RunnerTests.framework */; }; + F6A231591C01867C1A1268AD /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EB0168EEDEA46D37DCEF97FD /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,14 +42,15 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 08FD4DDEEB83912CF46C4224 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 0D4620345C5D87B0E7060169 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; + 200C0FB6EC3E67446721343D /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 350ED558E29135D9B6DA12A0 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 531C22CC0DE7F035D9A34AA8 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 3E22E37926EFF42C5471F6F9 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 46517A87257E58848B507D86 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; @@ -60,19 +61,18 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 98E54C4176D400311D9B31BA /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - A916079A171A129DC4E2A044 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - B55481032FB34D452CFFA8F4 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - D99586C11302D0BD51376E49 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - E5FD24814B513998232432D1 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + CFA80CA756DDB3C5B27EB87C /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + DCF5FFDDA11243897B692074 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + E43B580CA757421F14EDB9D7 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + EB0168EEDEA46D37DCEF97FD /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 2FEC5FC3719CD823CD6B55B8 /* Frameworks */ = { + 02874EA149F2669FBBBEFA6B /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - F5B795DBC53CA272FBEFA879 /* Pods_RunnerTests.framework in Frameworks */, + 592CCEDE047ADE7BC089AB41 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -80,7 +80,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - AAC2E12D306CAB59FFBBCD45 /* Pods_Runner.framework in Frameworks */, + F6A231591C01867C1A1268AD /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -95,15 +95,6 @@ path = RunnerTests; sourceTree = ""; }; - 970CAEF4A0EA5D94B91BBBA3 /* Frameworks */ = { - isa = PBXGroup; - children = ( - 0D4620345C5D87B0E7060169 /* Pods_Runner.framework */, - D99586C11302D0BD51376E49 /* Pods_RunnerTests.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( @@ -122,8 +113,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - E587FBDAF5D3BEFD5D2C0C4F /* Pods */, - 970CAEF4A0EA5D94B91BBBA3 /* Frameworks */, + E9103E523A78BA47FE7905A7 /* Pods */, + 9E8FC7C3B77A794057B5F5A5 /* Frameworks */, ); sourceTree = ""; }; @@ -151,15 +142,24 @@ path = Runner; sourceTree = ""; }; - E587FBDAF5D3BEFD5D2C0C4F /* Pods */ = { + 9E8FC7C3B77A794057B5F5A5 /* Frameworks */ = { + isa = PBXGroup; + children = ( + EB0168EEDEA46D37DCEF97FD /* Pods_Runner.framework */, + 350ED558E29135D9B6DA12A0 /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; + E9103E523A78BA47FE7905A7 /* Pods */ = { isa = PBXGroup; children = ( - A916079A171A129DC4E2A044 /* Pods-Runner.debug.xcconfig */, - B55481032FB34D452CFFA8F4 /* Pods-Runner.release.xcconfig */, - 531C22CC0DE7F035D9A34AA8 /* Pods-Runner.profile.xcconfig */, - 08FD4DDEEB83912CF46C4224 /* Pods-RunnerTests.debug.xcconfig */, - 98E54C4176D400311D9B31BA /* Pods-RunnerTests.release.xcconfig */, - E5FD24814B513998232432D1 /* Pods-RunnerTests.profile.xcconfig */, + 3E22E37926EFF42C5471F6F9 /* Pods-Runner.debug.xcconfig */, + 46517A87257E58848B507D86 /* Pods-Runner.release.xcconfig */, + E43B580CA757421F14EDB9D7 /* Pods-Runner.profile.xcconfig */, + 200C0FB6EC3E67446721343D /* Pods-RunnerTests.debug.xcconfig */, + CFA80CA756DDB3C5B27EB87C /* Pods-RunnerTests.release.xcconfig */, + DCF5FFDDA11243897B692074 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 608B22E300D6DE6B6AAD535A /* [CP] Check Pods Manifest.lock */, + 7CAAD9ACDE3FCDD0AF1C7888 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 2FEC5FC3719CD823CD6B55B8 /* Frameworks */, + 02874EA149F2669FBBBEFA6B /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 662E2EF6148D023D7E7DB791 /* [CP] Check Pods Manifest.lock */, + 9999291836084819C4E0C140 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 284DD42A03DD50B0335DA1F5 /* [CP] Embed Pods Frameworks */, + FBFF1AF5B95EAA422EAE27A3 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -270,23 +270,6 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 284DD42A03DD50B0335DA1F5 /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -303,7 +286,7 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 608B22E300D6DE6B6AAD535A /* [CP] Check Pods Manifest.lock */ = { + 7CAAD9ACDE3FCDD0AF1C7888 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -325,7 +308,22 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 662E2EF6148D023D7E7DB791 /* [CP] Check Pods Manifest.lock */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Run Script"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + }; + 9999291836084819C4E0C140 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -347,20 +345,22 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { + FBFF1AF5B95EAA422EAE27A3 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputPaths = ( + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "Run Script"; - outputPaths = ( + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 08FD4DDEEB83912CF46C4224 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 200C0FB6EC3E67446721343D /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 98E54C4176D400311D9B31BA /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = CFA80CA756DDB3C5B27EB87C /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = E5FD24814B513998232432D1 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = DCF5FFDDA11243897B692074 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/webview_flutter/step_12/pubspec.yaml b/webview_flutter/step_12/pubspec.yaml index 36047015d6..c6d65a6ce1 100644 --- a/webview_flutter/step_12/pubspec.yaml +++ b/webview_flutter/step_12/pubspec.yaml @@ -31,12 +31,11 @@ dependencies: flutter: sdk: flutter - # The following adds the Cupertino Icons font to your application. # Use with the CupertinoIcons class for iOS style icons. cupertino_icons: ^1.0.8 webview_flutter: ^4.10.0 - path_provider: ^2.1.4 + path_provider: ^2.1.5 dev_dependencies: flutter_test: From 47e6cfc568f6aef17a45f12376532c8c508c46b0 Mon Sep 17 00:00:00 2001 From: Brett Morgan Date: Wed, 13 Nov 2024 14:43:17 +1100 Subject: [PATCH 053/108] Version bump and format --- adaptive_app/step_03/lib/main.dart | 12 +- adaptive_app/step_03/pubspec.yaml | 2 +- adaptive_app/step_04/lib/main.dart | 38 +- adaptive_app/step_04/lib/src/app_state.dart | 25 +- .../step_04/lib/src/playlist_details.dart | 50 +- adaptive_app/step_04/lib/src/playlists.dart | 14 +- adaptive_app/step_04/pubspec.yaml | 2 +- adaptive_app/step_05/lib/main.dart | 38 +- .../step_05/lib/src/adaptive_playlists.dart | 20 +- adaptive_app/step_05/lib/src/app_state.dart | 25 +- .../step_05/lib/src/playlist_details.dart | 46 +- adaptive_app/step_05/lib/src/playlists.dart | 8 +- adaptive_app/step_05/pubspec.yaml | 2 +- adaptive_app/step_06/lib/main.dart | 38 +- .../step_06/lib/src/adaptive_image.dart | 7 +- .../step_06/lib/src/adaptive_playlists.dart | 20 +- .../step_06/lib/src/adaptive_text.dart | 2 +- adaptive_app/step_06/lib/src/app_state.dart | 25 +- .../step_06/lib/src/playlist_details.dart | 49 +- adaptive_app/step_06/lib/src/playlists.dart | 8 +- adaptive_app/step_06/pubspec.yaml | 2 +- .../step_06/yt_cors_proxy/pubspec.yaml | 2 +- adaptive_app/step_07/lib/main.dart | 37 +- .../step_07/lib/src/adaptive_image.dart | 7 +- .../step_07/lib/src/adaptive_login.dart | 43 +- .../step_07/lib/src/adaptive_playlists.dart | 20 +- .../step_07/lib/src/adaptive_text.dart | 2 +- adaptive_app/step_07/lib/src/app_state.dart | 8 +- .../step_07/lib/src/playlist_details.dart | 49 +- adaptive_app/step_07/lib/src/playlists.dart | 8 +- adaptive_app/step_07/pubspec.yaml | 2 +- .../step_07/yt_cors_proxy/pubspec.yaml | 2 +- .../step_03/lib/main.dart | 6 +- .../step_03/pubspec.yaml | 2 +- .../step_04/lib/main.dart | 13 +- .../step_04/lib/models/data.dart | 58 +- .../step_04/lib/models/models.dart | 9 +- .../step_04/lib/widgets/email_list_view.dart | 28 +- .../step_04/lib/widgets/email_widget.dart | 287 +- .../step_04/lib/widgets/search_bar.dart | 9 +- .../step_04/lib/widgets/star_button.dart | 11 +- .../step_04/pubspec.yaml | 2 +- .../step_05/lib/main.dart | 19 +- .../step_05/lib/models/data.dart | 58 +- .../step_05/lib/models/models.dart | 9 +- .../step_05/lib/widgets/email_list_view.dart | 28 +- .../step_05/lib/widgets/email_widget.dart | 287 +- .../step_05/lib/widgets/search_bar.dart | 9 +- .../step_05/lib/widgets/star_button.dart | 11 +- .../step_05/pubspec.yaml | 2 +- .../step_06/lib/main.dart | 47 +- .../step_06/lib/models/data.dart | 58 +- .../step_06/lib/models/models.dart | 9 +- .../disappearing_bottom_navigation_bar.dart | 10 +- .../widgets/disappearing_navigation_rail.dart | 22 +- .../step_06/lib/widgets/email_list_view.dart | 28 +- .../step_06/lib/widgets/email_widget.dart | 287 +- .../step_06/lib/widgets/search_bar.dart | 9 +- .../step_06/lib/widgets/star_button.dart | 11 +- .../step_06/pubspec.yaml | 2 +- .../step_07/lib/animations.dart | 112 +- .../step_07/lib/main.dart | 18 +- .../step_07/lib/models/data.dart | 58 +- .../step_07/lib/models/models.dart | 9 +- .../transitions/bottom_bar_transition.dart | 11 +- .../lib/transitions/nav_rail_transition.dart | 11 +- .../animated_floating_action_button.dart | 10 +- .../disappearing_bottom_navigation_bar.dart | 10 +- .../widgets/disappearing_navigation_rail.dart | 18 +- .../step_07/lib/widgets/email_list_view.dart | 28 +- .../step_07/lib/widgets/email_widget.dart | 287 +- .../step_07/lib/widgets/search_bar.dart | 9 +- .../step_07/lib/widgets/star_button.dart | 11 +- .../step_07/pubspec.yaml | 2 +- .../step_08/lib/animations.dart | 112 +- .../step_08/lib/main.dart | 18 +- .../step_08/lib/models/data.dart | 58 +- .../step_08/lib/models/models.dart | 9 +- .../transitions/bottom_bar_transition.dart | 11 +- .../transitions/list_detail_transition.dart | 34 +- .../lib/transitions/nav_rail_transition.dart | 11 +- .../animated_floating_action_button.dart | 10 +- .../disappearing_bottom_navigation_bar.dart | 10 +- .../widgets/disappearing_navigation_rail.dart | 18 +- .../step_08/lib/widgets/email_list_view.dart | 28 +- .../step_08/lib/widgets/email_widget.dart | 287 +- .../step_08/lib/widgets/search_bar.dart | 9 +- .../step_08/lib/widgets/star_button.dart | 11 +- .../step_08/pubspec.yaml | 2 +- animations/codelab_rebuild.yaml | 2 +- animations/step_01/lib/home_screen.dart | 10 +- animations/step_01/lib/model.dart | 14 +- animations/step_01/lib/question_screen.dart | 23 +- animations/step_01/pubspec.yaml | 2 +- animations/step_02/lib/home_screen.dart | 10 +- animations/step_02/lib/model.dart | 14 +- animations/step_02/lib/question_screen.dart | 23 +- animations/step_02/lib/scoreboard.dart | 10 +- animations/step_02/pubspec.yaml | 2 +- animations/step_03/lib/home_screen.dart | 10 +- animations/step_03/lib/model.dart | 14 +- animations/step_03/lib/question_screen.dart | 35 +- animations/step_03/lib/scoreboard.dart | 10 +- animations/step_03/pubspec.yaml | 2 +- animations/step_04/lib/flip_effect.dart | 24 +- animations/step_04/lib/home_screen.dart | 10 +- animations/step_04/lib/model.dart | 14 +- animations/step_04/lib/question_screen.dart | 35 +- animations/step_04/lib/scoreboard.dart | 10 +- animations/step_04/pubspec.yaml | 2 +- animations/step_05/lib/flip_effect.dart | 24 +- animations/step_05/lib/home_screen.dart | 18 +- animations/step_05/lib/model.dart | 14 +- animations/step_05/lib/question_screen.dart | 31 +- animations/step_05/lib/scoreboard.dart | 10 +- animations/step_05/pubspec.yaml | 2 +- audio_soloud/step_02/lib/main.dart | 4 +- audio_soloud/step_02/pubspec.yaml | 2 +- audio_soloud/step_03/lib/main.dart | 4 +- audio_soloud/step_03/pubspec.yaml | 2 +- audio_soloud/step_04a/lib/main.dart | 4 +- audio_soloud/step_04a/pubspec.yaml | 2 +- audio_soloud/step_04b/lib/main.dart | 4 +- audio_soloud/step_04b/pubspec.yaml | 2 +- .../step_05/lib/audio/audio_controller.dart | 6 +- audio_soloud/step_05/lib/main.dart | 4 +- audio_soloud/step_05/pubspec.yaml | 2 +- .../step_06/lib/audio/audio_controller.dart | 6 +- audio_soloud/step_06/lib/main.dart | 4 +- audio_soloud/step_06/pubspec.yaml | 2 +- boring_to_beautiful/codelab_rebuild.yaml | 2 +- .../src/features/artists/view/artist_bio.dart | 4 +- .../features/artists/view/artist_card.dart | 116 +- .../features/artists/view/artist_events.dart | 67 +- .../artists/view/artist_ranked_songs.dart | 72 +- .../features/artists/view/artist_updates.dart | 2 +- .../features/artists/view/artists_screen.dart | 54 +- .../src/features/home/view/home_artists.dart | 30 +- .../src/features/home/view/home_recent.dart | 49 +- .../src/features/home/view/home_screen.dart | 93 +- .../playlists/view/playlist_home_screen.dart | 6 +- .../playlists/view/playlist_screen.dart | 194 +- .../playlists/view/playlist_songs.dart | 76 +- .../final/lib/src/shared/app.dart | 65 +- .../final/lib/src/shared/classes/image.dart | 9 +- .../lib/src/shared/classes/playlist.dart | 7 +- .../lib/src/shared/classes/ranked_song.dart | 10 +- .../final/lib/src/shared/extensions.dart | 97 +- .../shared/playback/bloc/playback_bloc.dart | 37 +- .../playback/bloc/playback_bloc.freezed.dart | 429 +- .../lib/src/shared/providers/artists.dart | 301 +- .../lib/src/shared/providers/playlists.dart | 69 +- .../final/lib/src/shared/providers/songs.dart | 21 +- .../final/lib/src/shared/providers/theme.dart | 56 +- .../final/lib/src/shared/router.dart | 116 +- .../src/shared/views/adaptive_image_card.dart | 18 +- .../src/shared/views/adaptive_navigation.dart | 15 +- .../lib/src/shared/views/article_content.dart | 15 +- .../lib/src/shared/views/bottom_bar.dart | 419 +- .../src/shared/views/brightness_toggle.dart | 7 +- .../lib/src/shared/views/center_row.dart | 15 +- .../final/lib/src/shared/views/clickable.dart | 5 +- .../final/lib/src/shared/views/events.dart | 44 +- .../lib/src/shared/views/hover_toggle.dart | 14 +- .../views/hoverable_song_play_button.dart | 7 +- .../lib/src/shared/views/image_card.dart | 92 +- .../lib/src/shared/views/image_tile.dart | 55 +- .../lib/src/shared/views/outlined_card.dart | 30 +- .../src/shared/views/play_pause_listener.dart | 15 +- .../lib/src/shared/views/root_layout.dart | 72 +- .../final/lib/src/shared/views/sidebar.dart | 17 +- boring_to_beautiful/final/pubspec.yaml | 2 +- .../src/features/artists/view/artist_bio.dart | 4 +- .../features/artists/view/artist_card.dart | 116 +- .../features/artists/view/artist_events.dart | 67 +- .../artists/view/artist_ranked_songs.dart | 72 +- .../features/artists/view/artist_updates.dart | 2 +- .../features/artists/view/artists_screen.dart | 54 +- .../src/features/home/view/home_artists.dart | 30 +- .../src/features/home/view/home_recent.dart | 49 +- .../src/features/home/view/home_screen.dart | 43 +- .../playlists/view/playlist_home_screen.dart | 6 +- .../playlists/view/playlist_screen.dart | 194 +- .../playlists/view/playlist_songs.dart | 72 +- .../step_01/lib/src/shared/app.dart | 68 +- .../step_01/lib/src/shared/classes/image.dart | 9 +- .../lib/src/shared/classes/playlist.dart | 7 +- .../lib/src/shared/classes/ranked_song.dart | 10 +- .../step_01/lib/src/shared/extensions.dart | 97 +- .../shared/playback/bloc/playback_bloc.dart | 37 +- .../playback/bloc/playback_bloc.freezed.dart | 429 +- .../lib/src/shared/providers/artists.dart | 301 +- .../lib/src/shared/providers/playlists.dart | 69 +- .../lib/src/shared/providers/songs.dart | 21 +- .../lib/src/shared/providers/theme.dart | 56 +- .../step_01/lib/src/shared/router.dart | 110 +- .../src/shared/views/adaptive_image_card.dart | 18 +- .../src/shared/views/adaptive_navigation.dart | 15 +- .../lib/src/shared/views/article_content.dart | 15 +- .../lib/src/shared/views/bottom_bar.dart | 419 +- .../src/shared/views/brightness_toggle.dart | 7 +- .../lib/src/shared/views/center_row.dart | 15 +- .../lib/src/shared/views/clickable.dart | 5 +- .../step_01/lib/src/shared/views/events.dart | 44 +- .../lib/src/shared/views/hover_toggle.dart | 14 +- .../views/hoverable_song_play_button.dart | 7 +- .../lib/src/shared/views/image_card.dart | 92 +- .../lib/src/shared/views/image_tile.dart | 55 +- .../lib/src/shared/views/outlined_card.dart | 13 +- .../src/shared/views/play_pause_listener.dart | 15 +- .../lib/src/shared/views/root_layout.dart | 72 +- .../step_01/lib/src/shared/views/sidebar.dart | 17 +- boring_to_beautiful/step_01/pubspec.yaml | 2 +- .../src/features/artists/view/artist_bio.dart | 4 +- .../features/artists/view/artist_card.dart | 116 +- .../features/artists/view/artist_events.dart | 67 +- .../artists/view/artist_ranked_songs.dart | 72 +- .../features/artists/view/artist_updates.dart | 2 +- .../features/artists/view/artists_screen.dart | 54 +- .../src/features/home/view/home_artists.dart | 30 +- .../src/features/home/view/home_recent.dart | 49 +- .../src/features/home/view/home_screen.dart | 43 +- .../playlists/view/playlist_home_screen.dart | 6 +- .../playlists/view/playlist_screen.dart | 194 +- .../playlists/view/playlist_songs.dart | 72 +- .../step_02/lib/src/shared/app.dart | 68 +- .../step_02/lib/src/shared/classes/image.dart | 9 +- .../lib/src/shared/classes/playlist.dart | 7 +- .../lib/src/shared/classes/ranked_song.dart | 10 +- .../step_02/lib/src/shared/extensions.dart | 97 +- .../shared/playback/bloc/playback_bloc.dart | 37 +- .../playback/bloc/playback_bloc.freezed.dart | 429 +- .../lib/src/shared/providers/artists.dart | 301 +- .../lib/src/shared/providers/playlists.dart | 69 +- .../lib/src/shared/providers/songs.dart | 21 +- .../lib/src/shared/providers/theme.dart | 56 +- .../step_02/lib/src/shared/router.dart | 116 +- .../src/shared/views/adaptive_image_card.dart | 18 +- .../src/shared/views/adaptive_navigation.dart | 15 +- .../lib/src/shared/views/article_content.dart | 15 +- .../lib/src/shared/views/bottom_bar.dart | 419 +- .../src/shared/views/brightness_toggle.dart | 7 +- .../lib/src/shared/views/center_row.dart | 15 +- .../lib/src/shared/views/clickable.dart | 5 +- .../step_02/lib/src/shared/views/events.dart | 44 +- .../lib/src/shared/views/hover_toggle.dart | 14 +- .../views/hoverable_song_play_button.dart | 7 +- .../lib/src/shared/views/image_card.dart | 92 +- .../lib/src/shared/views/image_tile.dart | 55 +- .../lib/src/shared/views/outlined_card.dart | 13 +- .../src/shared/views/play_pause_listener.dart | 15 +- .../lib/src/shared/views/root_layout.dart | 72 +- .../step_02/lib/src/shared/views/sidebar.dart | 17 +- boring_to_beautiful/step_02/pubspec.yaml | 2 +- .../src/features/artists/view/artist_bio.dart | 4 +- .../features/artists/view/artist_card.dart | 116 +- .../features/artists/view/artist_events.dart | 67 +- .../artists/view/artist_ranked_songs.dart | 72 +- .../features/artists/view/artist_updates.dart | 2 +- .../features/artists/view/artists_screen.dart | 54 +- .../src/features/home/view/home_artists.dart | 30 +- .../src/features/home/view/home_recent.dart | 49 +- .../src/features/home/view/home_screen.dart | 43 +- .../playlists/view/playlist_home_screen.dart | 6 +- .../playlists/view/playlist_screen.dart | 194 +- .../playlists/view/playlist_songs.dart | 72 +- .../step_03/lib/src/shared/app.dart | 68 +- .../step_03/lib/src/shared/classes/image.dart | 9 +- .../lib/src/shared/classes/playlist.dart | 7 +- .../lib/src/shared/classes/ranked_song.dart | 10 +- .../step_03/lib/src/shared/extensions.dart | 97 +- .../shared/playback/bloc/playback_bloc.dart | 37 +- .../playback/bloc/playback_bloc.freezed.dart | 429 +- .../lib/src/shared/providers/artists.dart | 301 +- .../lib/src/shared/providers/playlists.dart | 69 +- .../lib/src/shared/providers/songs.dart | 21 +- .../lib/src/shared/providers/theme.dart | 56 +- .../step_03/lib/src/shared/router.dart | 116 +- .../src/shared/views/adaptive_image_card.dart | 18 +- .../src/shared/views/adaptive_navigation.dart | 15 +- .../lib/src/shared/views/article_content.dart | 15 +- .../lib/src/shared/views/bottom_bar.dart | 419 +- .../src/shared/views/brightness_toggle.dart | 7 +- .../lib/src/shared/views/center_row.dart | 15 +- .../lib/src/shared/views/clickable.dart | 5 +- .../step_03/lib/src/shared/views/events.dart | 44 +- .../lib/src/shared/views/hover_toggle.dart | 14 +- .../views/hoverable_song_play_button.dart | 7 +- .../lib/src/shared/views/image_card.dart | 92 +- .../lib/src/shared/views/image_tile.dart | 55 +- .../lib/src/shared/views/outlined_card.dart | 13 +- .../src/shared/views/play_pause_listener.dart | 15 +- .../lib/src/shared/views/root_layout.dart | 72 +- .../step_03/lib/src/shared/views/sidebar.dart | 17 +- boring_to_beautiful/step_03/pubspec.yaml | 2 +- .../src/features/artists/view/artist_bio.dart | 4 +- .../features/artists/view/artist_card.dart | 116 +- .../features/artists/view/artist_events.dart | 67 +- .../artists/view/artist_ranked_songs.dart | 72 +- .../features/artists/view/artist_updates.dart | 2 +- .../features/artists/view/artists_screen.dart | 54 +- .../src/features/home/view/home_artists.dart | 30 +- .../src/features/home/view/home_recent.dart | 49 +- .../src/features/home/view/home_screen.dart | 43 +- .../playlists/view/playlist_home_screen.dart | 6 +- .../playlists/view/playlist_screen.dart | 194 +- .../playlists/view/playlist_songs.dart | 72 +- .../step_04/lib/src/shared/app.dart | 65 +- .../step_04/lib/src/shared/classes/image.dart | 9 +- .../lib/src/shared/classes/playlist.dart | 7 +- .../lib/src/shared/classes/ranked_song.dart | 10 +- .../step_04/lib/src/shared/extensions.dart | 97 +- .../shared/playback/bloc/playback_bloc.dart | 37 +- .../playback/bloc/playback_bloc.freezed.dart | 429 +- .../lib/src/shared/providers/artists.dart | 301 +- .../lib/src/shared/providers/playlists.dart | 69 +- .../lib/src/shared/providers/songs.dart | 21 +- .../lib/src/shared/providers/theme.dart | 56 +- .../step_04/lib/src/shared/router.dart | 116 +- .../src/shared/views/adaptive_image_card.dart | 18 +- .../src/shared/views/adaptive_navigation.dart | 15 +- .../lib/src/shared/views/article_content.dart | 15 +- .../lib/src/shared/views/bottom_bar.dart | 419 +- .../src/shared/views/brightness_toggle.dart | 7 +- .../lib/src/shared/views/center_row.dart | 15 +- .../lib/src/shared/views/clickable.dart | 5 +- .../step_04/lib/src/shared/views/events.dart | 44 +- .../lib/src/shared/views/hover_toggle.dart | 14 +- .../views/hoverable_song_play_button.dart | 7 +- .../lib/src/shared/views/image_card.dart | 92 +- .../lib/src/shared/views/image_tile.dart | 55 +- .../lib/src/shared/views/outlined_card.dart | 13 +- .../src/shared/views/play_pause_listener.dart | 15 +- .../lib/src/shared/views/root_layout.dart | 72 +- .../step_04/lib/src/shared/views/sidebar.dart | 17 +- boring_to_beautiful/step_04/pubspec.yaml | 2 +- .../src/features/artists/view/artist_bio.dart | 4 +- .../features/artists/view/artist_card.dart | 116 +- .../features/artists/view/artist_events.dart | 67 +- .../artists/view/artist_ranked_songs.dart | 72 +- .../features/artists/view/artist_updates.dart | 2 +- .../features/artists/view/artists_screen.dart | 54 +- .../src/features/home/view/home_artists.dart | 30 +- .../src/features/home/view/home_recent.dart | 49 +- .../src/features/home/view/home_screen.dart | 91 +- .../playlists/view/playlist_home_screen.dart | 6 +- .../playlists/view/playlist_screen.dart | 194 +- .../playlists/view/playlist_songs.dart | 72 +- .../step_05/lib/src/shared/app.dart | 65 +- .../step_05/lib/src/shared/classes/image.dart | 9 +- .../lib/src/shared/classes/playlist.dart | 7 +- .../lib/src/shared/classes/ranked_song.dart | 10 +- .../step_05/lib/src/shared/extensions.dart | 97 +- .../shared/playback/bloc/playback_bloc.dart | 37 +- .../playback/bloc/playback_bloc.freezed.dart | 429 +- .../lib/src/shared/providers/artists.dart | 301 +- .../lib/src/shared/providers/playlists.dart | 69 +- .../lib/src/shared/providers/songs.dart | 21 +- .../lib/src/shared/providers/theme.dart | 56 +- .../step_05/lib/src/shared/router.dart | 116 +- .../src/shared/views/adaptive_image_card.dart | 18 +- .../src/shared/views/adaptive_navigation.dart | 15 +- .../lib/src/shared/views/article_content.dart | 15 +- .../lib/src/shared/views/bottom_bar.dart | 419 +- .../src/shared/views/brightness_toggle.dart | 7 +- .../lib/src/shared/views/center_row.dart | 15 +- .../lib/src/shared/views/clickable.dart | 5 +- .../step_05/lib/src/shared/views/events.dart | 44 +- .../lib/src/shared/views/hover_toggle.dart | 14 +- .../views/hoverable_song_play_button.dart | 7 +- .../lib/src/shared/views/image_card.dart | 92 +- .../lib/src/shared/views/image_tile.dart | 55 +- .../lib/src/shared/views/outlined_card.dart | 13 +- .../src/shared/views/play_pause_listener.dart | 15 +- .../lib/src/shared/views/root_layout.dart | 72 +- .../step_05/lib/src/shared/views/sidebar.dart | 17 +- boring_to_beautiful/step_05/pubspec.yaml | 2 +- .../src/features/artists/view/artist_bio.dart | 4 +- .../features/artists/view/artist_card.dart | 116 +- .../features/artists/view/artist_events.dart | 67 +- .../artists/view/artist_ranked_songs.dart | 72 +- .../features/artists/view/artist_updates.dart | 2 +- .../features/artists/view/artists_screen.dart | 54 +- .../src/features/home/view/home_artists.dart | 30 +- .../src/features/home/view/home_recent.dart | 49 +- .../src/features/home/view/home_screen.dart | 93 +- .../playlists/view/playlist_home_screen.dart | 6 +- .../playlists/view/playlist_screen.dart | 194 +- .../playlists/view/playlist_songs.dart | 72 +- .../step_06/lib/src/shared/app.dart | 65 +- .../step_06/lib/src/shared/classes/image.dart | 9 +- .../lib/src/shared/classes/playlist.dart | 7 +- .../lib/src/shared/classes/ranked_song.dart | 10 +- .../step_06/lib/src/shared/extensions.dart | 97 +- .../shared/playback/bloc/playback_bloc.dart | 37 +- .../playback/bloc/playback_bloc.freezed.dart | 429 +- .../lib/src/shared/providers/artists.dart | 301 +- .../lib/src/shared/providers/playlists.dart | 69 +- .../lib/src/shared/providers/songs.dart | 21 +- .../lib/src/shared/providers/theme.dart | 56 +- .../step_06/lib/src/shared/router.dart | 116 +- .../src/shared/views/adaptive_image_card.dart | 18 +- .../src/shared/views/adaptive_navigation.dart | 15 +- .../lib/src/shared/views/article_content.dart | 15 +- .../lib/src/shared/views/bottom_bar.dart | 419 +- .../src/shared/views/brightness_toggle.dart | 7 +- .../lib/src/shared/views/center_row.dart | 15 +- .../lib/src/shared/views/clickable.dart | 5 +- .../step_06/lib/src/shared/views/events.dart | 44 +- .../lib/src/shared/views/hover_toggle.dart | 14 +- .../views/hoverable_song_play_button.dart | 7 +- .../lib/src/shared/views/image_card.dart | 92 +- .../lib/src/shared/views/image_tile.dart | 55 +- .../lib/src/shared/views/outlined_card.dart | 13 +- .../src/shared/views/play_pause_listener.dart | 15 +- .../lib/src/shared/views/root_layout.dart | 72 +- .../step_06/lib/src/shared/views/sidebar.dart | 17 +- boring_to_beautiful/step_06/pubspec.yaml | 2 +- .../src/features/artists/view/artist_bio.dart | 4 +- .../features/artists/view/artist_card.dart | 116 +- .../features/artists/view/artist_events.dart | 67 +- .../artists/view/artist_ranked_songs.dart | 72 +- .../features/artists/view/artist_updates.dart | 2 +- .../features/artists/view/artists_screen.dart | 54 +- .../src/features/home/view/home_artists.dart | 30 +- .../src/features/home/view/home_recent.dart | 49 +- .../src/features/home/view/home_screen.dart | 93 +- .../playlists/view/playlist_home_screen.dart | 6 +- .../playlists/view/playlist_screen.dart | 194 +- .../playlists/view/playlist_songs.dart | 72 +- .../step_07/lib/src/shared/app.dart | 65 +- .../step_07/lib/src/shared/classes/image.dart | 9 +- .../lib/src/shared/classes/playlist.dart | 7 +- .../lib/src/shared/classes/ranked_song.dart | 10 +- .../step_07/lib/src/shared/extensions.dart | 97 +- .../shared/playback/bloc/playback_bloc.dart | 37 +- .../playback/bloc/playback_bloc.freezed.dart | 429 +- .../lib/src/shared/providers/artists.dart | 301 +- .../lib/src/shared/providers/playlists.dart | 69 +- .../lib/src/shared/providers/songs.dart | 21 +- .../lib/src/shared/providers/theme.dart | 56 +- .../step_07/lib/src/shared/router.dart | 116 +- .../src/shared/views/adaptive_image_card.dart | 18 +- .../src/shared/views/adaptive_navigation.dart | 15 +- .../lib/src/shared/views/article_content.dart | 15 +- .../lib/src/shared/views/bottom_bar.dart | 419 +- .../src/shared/views/brightness_toggle.dart | 7 +- .../lib/src/shared/views/center_row.dart | 15 +- .../lib/src/shared/views/clickable.dart | 5 +- .../step_07/lib/src/shared/views/events.dart | 44 +- .../lib/src/shared/views/hover_toggle.dart | 14 +- .../views/hoverable_song_play_button.dart | 7 +- .../lib/src/shared/views/image_card.dart | 92 +- .../lib/src/shared/views/image_tile.dart | 55 +- .../lib/src/shared/views/outlined_card.dart | 13 +- .../src/shared/views/play_pause_listener.dart | 15 +- .../lib/src/shared/views/root_layout.dart | 72 +- .../step_07/lib/src/shared/views/sidebar.dart | 17 +- boring_to_beautiful/step_07/pubspec.yaml | 2 +- brick_breaker/codelab_rebuild.yaml | 2 +- brick_breaker/step_03/pubspec.yaml | 2 +- .../step_04/lib/src/brick_breaker.dart | 12 +- .../step_04/lib/src/components/play_area.dart | 5 +- brick_breaker/step_04/pubspec.yaml | 2 +- .../step_05/lib/src/brick_breaker.dart | 26 +- .../step_05/lib/src/components/ball.dart | 12 +- .../step_05/lib/src/components/play_area.dart | 5 +- brick_breaker/step_05/pubspec.yaml | 2 +- .../step_06/lib/src/brick_breaker.dart | 26 +- .../step_06/lib/src/components/ball.dart | 18 +- .../step_06/lib/src/components/play_area.dart | 8 +- brick_breaker/step_06/pubspec.yaml | 2 +- .../step_07/lib/src/brick_breaker.dart | 37 +- .../step_07/lib/src/components/ball.dart | 25 +- .../step_07/lib/src/components/bat.dart | 30 +- .../step_07/lib/src/components/play_area.dart | 8 +- brick_breaker/step_07/pubspec.yaml | 2 +- .../step_08/lib/src/brick_breaker.dart | 37 +- .../step_08/lib/src/components/ball.dart | 25 +- .../step_08/lib/src/components/bat.dart | 30 +- .../step_08/lib/src/components/brick.dart | 21 +- .../step_08/lib/src/components/play_area.dart | 8 +- brick_breaker/step_08/pubspec.yaml | 2 +- .../step_09/lib/src/brick_breaker.dart | 39 +- .../step_09/lib/src/components/ball.dart | 28 +- .../step_09/lib/src/components/bat.dart | 30 +- .../step_09/lib/src/components/brick.dart | 21 +- .../step_09/lib/src/components/play_area.dart | 8 +- .../step_09/lib/src/widgets/game_app.dart | 14 +- brick_breaker/step_09/pubspec.yaml | 2 +- .../step_10/lib/src/brick_breaker.dart | 39 +- .../step_10/lib/src/components/ball.dart | 28 +- .../step_10/lib/src/components/bat.dart | 30 +- .../step_10/lib/src/components/brick.dart | 21 +- .../step_10/lib/src/components/play_area.dart | 8 +- .../step_10/lib/src/widgets/game_app.dart | 17 +- .../lib/src/widgets/overlay_screen.dart | 11 +- .../step_10/lib/src/widgets/score_card.dart | 5 +- brick_breaker/step_10/pubspec.yaml | 2 +- .../codelab_rebuild.yaml | 2 +- .../step_03/lib/main.dart | 6 +- .../step_03/pubspec.yaml | 2 +- .../step_04/lib/main.dart | 21 +- .../step_04/pubspec.yaml | 2 +- .../step_05/lib/main.dart | 19 +- .../step_05/pubspec.yaml | 2 +- .../step_06_a/lib/main.dart | 23 +- .../step_06_a/pubspec.yaml | 2 +- .../step_06_b/lib/main.dart | 23 +- .../step_06_b/pubspec.yaml | 2 +- .../step_07_a/lib/data.dart | 5 +- .../step_07_a/lib/main.dart | 23 +- .../step_07_a/pubspec.yaml | 2 +- .../step_07_b/lib/data.dart | 10 +- .../step_07_b/lib/main.dart | 23 +- .../step_07_b/pubspec.yaml | 2 +- .../step_08/lib/data.dart | 10 +- .../step_08/lib/main.dart | 23 +- .../step_08/pubspec.yaml | 2 +- .../step_09/lib/data.dart | 10 +- .../step_09/lib/main.dart | 23 +- .../step_09/pubspec.yaml | 2 +- .../step_10/lib/data.dart | 10 +- .../step_10/lib/main.dart | 25 +- .../step_10/pubspec.yaml | 2 +- .../step_11_a/lib/data.dart | 10 +- .../step_11_a/lib/main.dart | 25 +- .../step_11_a/pubspec.yaml | 2 +- .../step_11_b/lib/data.dart | 10 +- .../step_11_b/lib/main.dart | 25 +- .../step_11_b/pubspec.yaml | 2 +- .../step_12/lib/data.dart | 10 +- .../step_12/lib/main.dart | 31 +- .../step_12/pubspec.yaml | 2 +- deeplink_cookbook/lib/main.dart | 11 +- deeplink_cookbook/pubspec.yaml | 2 +- ffigen_codelab/step_03/example/lib/main.dart | 4 +- ffigen_codelab/step_03/example/pubspec.yaml | 2 +- ffigen_codelab/step_03/lib/ffigen_app.dart | 54 +- .../lib/ffigen_app_bindings_generated.dart | 32 +- ffigen_codelab/step_03/pubspec.yaml | 2 +- ffigen_codelab/step_05/example/lib/main.dart | 10 +- ffigen_codelab/step_05/example/pubspec.yaml | 2 +- .../lib/duktape_bindings_generated.dart | 6259 ++++++++--------- ffigen_codelab/step_05/lib/ffigen_app.dart | 28 +- .../lib/ffigen_app_bindings_generated.dart | 32 +- ffigen_codelab/step_05/pubspec.yaml | 2 +- ffigen_codelab/step_06/example/lib/main.dart | 10 +- ffigen_codelab/step_06/example/pubspec.yaml | 2 +- .../lib/duktape_bindings_generated.dart | 6259 ++++++++--------- ffigen_codelab/step_06/lib/ffigen_app.dart | 28 +- .../lib/ffigen_app_bindings_generated.dart | 32 +- ffigen_codelab/step_06/pubspec.yaml | 2 +- .../example/lib/duktape_message.freezed.dart | 137 +- ffigen_codelab/step_07/example/lib/main.dart | 112 +- ffigen_codelab/step_07/example/pubspec.yaml | 2 +- .../lib/duktape_bindings_generated.dart | 6259 ++++++++--------- ffigen_codelab/step_07/lib/ffigen_app.dart | 53 +- .../lib/ffigen_app_bindings_generated.dart | 32 +- ffigen_codelab/step_07/pubspec.yaml | 2 +- .../complete/lib/auth_gate.dart | 7 +- .../complete/lib/firebase_options.dart | 3 +- .../complete/lib/home.dart | 44 +- .../complete/lib/main.dart | 4 +- .../complete/pubspec.yaml | 2 +- .../start/lib/firebase_options.dart | 3 +- .../start/lib/home.dart | 9 +- .../start/pubspec.yaml | 2 +- .../complete/lib/app_state.dart | 50 +- .../complete/lib/entry.dart | 6 +- .../complete/lib/firebase_options.dart | 3 +- .../complete/lib/journal_entry_form.dart | 5 +- .../complete/lib/journal_entry_widget.dart | 8 +- .../complete/lib/logged_in_view.dart | 4 +- .../complete/lib/logged_out_view.dart | 4 +- .../complete/lib/main.dart | 10 +- firebase-emulator-suite/complete/pubspec.yaml | 2 +- .../start/lib/app_state.dart | 20 +- firebase-emulator-suite/start/lib/entry.dart | 6 +- .../start/lib/journal_entry_form.dart | 5 +- .../start/lib/journal_entry_widget.dart | 8 +- .../start/lib/logged_in_view.dart | 11 +- .../start/lib/logged_out_view.dart | 4 +- firebase-emulator-suite/start/lib/main.dart | 6 +- firebase-emulator-suite/start/pubspec.yaml | 2 +- .../step_02/lib/home_page.dart | 4 +- .../step_02/lib/main.dart | 10 +- .../step_02/lib/src/authentication.dart | 26 +- .../step_02/lib/src/widgets.dart | 50 +- .../step_02/pubspec.yaml | 2 +- .../step_04/lib/firebase_options.dart | 3 +- .../step_04/lib/home_page.dart | 4 +- .../step_04/lib/main.dart | 10 +- .../step_04/lib/src/authentication.dart | 26 +- .../step_04/lib/src/widgets.dart | 50 +- .../step_04/pubspec.yaml | 2 +- .../step_05/lib/app_state.dart | 7 +- .../step_05/lib/firebase_options.dart | 3 +- .../step_05/lib/home_page.dart | 16 +- .../step_05/lib/main.dart | 32 +- .../step_05/lib/src/authentication.dart | 33 +- .../step_05/lib/src/widgets.dart | 50 +- .../step_05/pubspec.yaml | 2 +- .../step_06/lib/app_state.dart | 17 +- .../step_06/lib/firebase_options.dart | 3 +- .../step_06/lib/guest_book.dart | 10 +- .../step_06/lib/home_page.dart | 42 +- .../step_06/lib/main.dart | 32 +- .../step_06/lib/src/authentication.dart | 33 +- .../step_06/lib/src/widgets.dart | 50 +- .../step_06/pubspec.yaml | 2 +- .../step_07/lib/app_state.dart | 39 +- .../step_07/lib/firebase_options.dart | 3 +- .../step_07/lib/home_page.dart | 44 +- .../step_07/lib/main.dart | 32 +- .../step_07/lib/src/authentication.dart | 33 +- .../step_07/lib/src/widgets.dart | 50 +- .../step_07/pubspec.yaml | 2 +- .../step_09/lib/app_state.dart | 67 +- .../step_09/lib/firebase_options.dart | 3 +- .../step_09/lib/home_page.dart | 75 +- .../step_09/lib/main.dart | 72 +- .../step_09/lib/src/authentication.dart | 47 +- .../step_09/lib/src/widgets.dart | 50 +- .../step_09/pubspec.yaml | 2 +- forge2d_game/step_02/lib/main.dart | 6 +- forge2d_game/step_02/pubspec.yaml | 2 +- .../step_03/lib/components/background.dart | 15 +- forge2d_game/step_03/lib/components/game.dart | 8 +- forge2d_game/step_03/lib/main.dart | 6 +- forge2d_game/step_03/pubspec.yaml | 2 +- .../step_04/lib/components/background.dart | 15 +- forge2d_game/step_04/lib/components/game.dart | 16 +- .../step_04/lib/components/ground.dart | 41 +- forge2d_game/step_04/lib/main.dart | 6 +- forge2d_game/step_04/pubspec.yaml | 2 +- .../bin/generate_brick_file_names.dart | 11 +- .../step_05/lib/components/background.dart | 15 +- .../step_05/lib/components/brick.dart | 359 +- forge2d_game/step_05/lib/components/game.dart | 31 +- .../step_05/lib/components/ground.dart | 41 +- forge2d_game/step_05/lib/main.dart | 6 +- forge2d_game/step_05/pubspec.yaml | 2 +- .../bin/generate_brick_file_names.dart | 11 +- .../step_06/lib/components/background.dart | 15 +- .../step_06/lib/components/brick.dart | 359 +- forge2d_game/step_06/lib/components/game.dart | 41 +- .../step_06/lib/components/ground.dart | 41 +- .../step_06/lib/components/player.dart | 50 +- forge2d_game/step_06/lib/main.dart | 6 +- forge2d_game/step_06/pubspec.yaml | 2 +- .../bin/generate_brick_file_names.dart | 11 +- .../step_07/lib/components/background.dart | 15 +- .../step_07/lib/components/brick.dart | 359 +- .../step_07/lib/components/enemy.dart | 44 +- forge2d_game/step_07/lib/components/game.dart | 48 +- .../step_07/lib/components/ground.dart | 41 +- .../step_07/lib/components/player.dart | 50 +- forge2d_game/step_07/lib/main.dart | 6 +- forge2d_game/step_07/pubspec.yaml | 2 +- generate_crossword/step_02/lib/main.dart | 5 +- generate_crossword/step_02/pubspec.yaml | 2 +- generate_crossword/step_03/lib/providers.dart | 14 +- .../lib/widgets/crossword_generator_app.dart | 23 +- generate_crossword/step_03/pubspec.yaml | 2 +- generate_crossword/step_04/lib/model.dart | 67 +- generate_crossword/step_04/lib/model.g.dart | 385 +- generate_crossword/step_04/lib/providers.dart | 34 +- .../lib/widgets/crossword_generator_app.dart | 26 +- .../step_04/lib/widgets/crossword_widget.dart | 6 +- generate_crossword/step_04/pubspec.yaml | 2 +- generate_crossword/step_05_a/lib/model.dart | 67 +- generate_crossword/step_05_a/lib/model.g.dart | 385 +- .../step_05_a/lib/providers.dart | 34 +- .../lib/widgets/crossword_generator_app.dart | 26 +- .../lib/widgets/crossword_widget.dart | 6 +- generate_crossword/step_05_a/pubspec.yaml | 2 +- .../step_05_a/test/model_test.dart | 315 +- generate_crossword/step_05_b/lib/model.dart | 67 +- generate_crossword/step_05_b/lib/model.g.dart | 385 +- .../step_05_b/lib/providers.dart | 39 +- .../lib/widgets/crossword_generator_app.dart | 26 +- .../lib/widgets/crossword_widget.dart | 6 +- generate_crossword/step_05_b/pubspec.yaml | 2 +- .../step_05_b/test/model_test.dart | 315 +- .../step_05_c/lib/isolates.dart | 13 +- generate_crossword/step_05_c/lib/model.dart | 67 +- generate_crossword/step_05_c/lib/model.g.dart | 385 +- .../step_05_c/lib/providers.dart | 34 +- .../lib/widgets/crossword_generator_app.dart | 26 +- .../lib/widgets/crossword_widget.dart | 6 +- generate_crossword/step_05_c/pubspec.yaml | 2 +- .../step_05_c/test/model_test.dart | 315 +- generate_crossword/step_06/lib/isolates.dart | 15 +- generate_crossword/step_06/lib/model.dart | 166 +- generate_crossword/step_06/lib/model.g.dart | 547 +- generate_crossword/step_06/lib/providers.dart | 34 +- .../lib/widgets/crossword_generator_app.dart | 26 +- .../step_06/lib/widgets/crossword_widget.dart | 6 +- generate_crossword/step_06/pubspec.yaml | 2 +- .../step_06/test/model_test.dart | 419 +- generate_crossword/step_07/lib/isolates.dart | 15 +- generate_crossword/step_07/lib/model.dart | 204 +- generate_crossword/step_07/lib/model.g.dart | 715 +- generate_crossword/step_07/lib/providers.dart | 47 +- .../step_07/lib/providers.g.dart | 40 +- .../lib/widgets/crossword_generator_app.dart | 38 +- .../lib/widgets/crossword_info_widget.dart | 99 +- .../step_07/lib/widgets/crossword_widget.dart | 6 +- generate_crossword/step_07/pubspec.yaml | 2 +- .../step_07/test/model_test.dart | 419 +- generate_crossword/step_08/lib/isolates.dart | 46 +- generate_crossword/step_08/lib/model.dart | 204 +- generate_crossword/step_08/lib/model.g.dart | 715 +- generate_crossword/step_08/lib/providers.dart | 49 +- .../step_08/lib/providers.g.dart | 56 +- .../lib/widgets/crossword_generator_app.dart | 53 +- .../lib/widgets/crossword_info_widget.dart | 103 +- .../step_08/lib/widgets/crossword_widget.dart | 25 +- generate_crossword/step_08/pubspec.yaml | 2 +- .../step_08/test/model_test.dart | 419 +- generate_crossword/step_09/lib/isolates.dart | 46 +- generate_crossword/step_09/lib/model.dart | 305 +- generate_crossword/step_09/lib/model.g.dart | 886 ++- generate_crossword/step_09/lib/providers.dart | 62 +- .../step_09/lib/providers.g.dart | 14 +- .../widgets/crossword_generator_widget.dart | 25 +- .../lib/widgets/crossword_puzzle_app.dart | 63 +- .../lib/widgets/crossword_puzzle_widget.dart | 100 +- .../lib/widgets/puzzle_completed_widget.dart | 5 +- generate_crossword/step_09/pubspec.yaml | 2 +- .../step_09/test/model_test.dart | 710 +- github-client/step_03/lib/main.dart | 4 +- github-client/step_03/pubspec.yaml | 2 +- github-client/step_04/lib/main.dart | 11 +- .../step_04/lib/src/github_login.dart | 33 +- github-client/step_04/pubspec.yaml | 2 +- github-client/step_05/lib/main.dart | 5 +- .../step_05/lib/src/github_login.dart | 33 +- github-client/step_05/pubspec.yaml | 2 +- github-client/step_06/lib/main.dart | 5 +- .../step_06/lib/src/github_login.dart | 33 +- github-client/step_06/pubspec.yaml | 2 +- github-client/step_07/lib/main.dart | 5 +- .../step_07/lib/src/github_login.dart | 33 +- .../step_07/lib/src/github_summary.dart | 53 +- github-client/step_07/pubspec.yaml | 2 +- github-client/window_to_front/pubspec.yaml | 2 +- google-maps-in-flutter/step_3/lib/main.dart | 4 +- google-maps-in-flutter/step_3/pubspec.yaml | 2 +- google-maps-in-flutter/step_4/lib/main.dart | 15 +- google-maps-in-flutter/step_4/pubspec.yaml | 2 +- google-maps-in-flutter/step_5/lib/main.dart | 10 +- .../step_5/lib/src/locations.dart | 18 +- .../step_5/lib/src/locations.g.dart | 82 +- google-maps-in-flutter/step_5/pubspec.yaml | 2 +- haiku_generator/finished/lib/app.dart | 107 +- .../repositories/poem_repository_impl.dart | 13 +- .../repositories/product_repository_impl.dart | 2 +- .../finished/lib/domain/models/product.dart | 6 +- haiku_generator/finished/lib/main.dart | 4 +- .../lib/widgets/shimmer_gradient.dart | 12 +- .../finished/lib/widgets/shimmer_loading.dart | 23 +- .../lib/widgets/shimmer_loading_anim.dart | 12 +- haiku_generator/finished/pubspec.yaml | 2 +- haiku_generator/step0/lib/app.dart | 107 +- .../step0/lib/domain/models/product.dart | 6 +- haiku_generator/step0/lib/main.dart | 4 +- .../step0/lib/widgets/shimmer_gradient.dart | 12 +- .../step0/lib/widgets/shimmer_loading.dart | 23 +- .../lib/widgets/shimmer_loading_anim.dart | 12 +- haiku_generator/step0/pubspec.yaml | 2 +- haiku_generator/step1/lib/app.dart | 107 +- .../step1/lib/domain/models/product.dart | 6 +- haiku_generator/step1/lib/main.dart | 4 +- .../step1/lib/widgets/shimmer_gradient.dart | 12 +- .../step1/lib/widgets/shimmer_loading.dart | 23 +- .../lib/widgets/shimmer_loading_anim.dart | 12 +- haiku_generator/step1/pubspec.yaml | 2 +- haiku_generator/step2/lib/app.dart | 105 +- .../repositories/product_repository_impl.dart | 2 +- .../step2/lib/domain/models/product.dart | 6 +- haiku_generator/step2/lib/main.dart | 4 +- .../step2/lib/widgets/shimmer_gradient.dart | 12 +- .../step2/lib/widgets/shimmer_loading.dart | 23 +- .../lib/widgets/shimmer_loading_anim.dart | 12 +- haiku_generator/step2/pubspec.yaml | 2 +- haiku_generator/step3/lib/app.dart | 105 +- .../repositories/poem_repository_impl.dart | 13 +- .../repositories/product_repository_impl.dart | 2 +- .../step3/lib/domain/models/product.dart | 6 +- haiku_generator/step3/lib/main.dart | 4 +- .../step3/lib/widgets/shimmer_gradient.dart | 12 +- .../step3/lib/widgets/shimmer_loading.dart | 23 +- .../lib/widgets/shimmer_loading_anim.dart | 12 +- haiku_generator/step3/pubspec.yaml | 2 +- .../step_03/lib/article_screen.dart | 75 +- .../step_03/lib/home_screen.dart | 63 +- homescreen_codelab/step_03/lib/main.dart | 11 +- homescreen_codelab/step_03/lib/news_data.dart | 2 +- homescreen_codelab/step_03/pubspec.yaml | 2 +- .../step_04/lib/article_screen.dart | 77 +- .../step_04/lib/home_screen.dart | 67 +- homescreen_codelab/step_04/lib/main.dart | 11 +- homescreen_codelab/step_04/lib/news_data.dart | 2 +- homescreen_codelab/step_04/pubspec.yaml | 2 +- .../step_05/lib/article_screen.dart | 77 +- .../step_05/lib/home_screen.dart | 67 +- homescreen_codelab/step_05/lib/main.dart | 11 +- homescreen_codelab/step_05/lib/news_data.dart | 2 +- homescreen_codelab/step_05/pubspec.yaml | 2 +- .../step_06/lib/article_screen.dart | 83 +- .../step_06/lib/home_screen.dart | 67 +- homescreen_codelab/step_06/lib/main.dart | 11 +- homescreen_codelab/step_06/lib/news_data.dart | 2 +- homescreen_codelab/step_06/pubspec.yaml | 2 +- .../app/lib/logic/dash_purchases.dart | 32 +- .../complete/app/lib/logic/dash_upgrades.dart | 4 +- in_app_purchases/complete/app/lib/main.dart | 37 +- .../app/lib/model/firebase_state.dart | 6 +- .../complete/app/lib/model/past_purchase.dart | 39 +- .../app/lib/model/purchasable_product.dart | 6 +- .../complete/app/lib/model/store_state.dart | 6 +- .../complete/app/lib/pages/home_page.dart | 69 +- .../complete/app/lib/pages/login_page.dart | 17 +- .../complete/app/lib/pages/purchase_page.dart | 72 +- .../complete/app/lib/repo/iap_repo.dart | 26 +- in_app_purchases/complete/app/pubspec.yaml | 2 +- .../complete/app/test/widget_test.dart | 13 +- .../complete/dart-backend/bin/server.dart | 54 +- .../lib/app_store_purchase_handler.dart | 107 +- .../lib/google_play_purchase_handler.dart | 8 +- .../dart-backend/lib/iap_repository.dart | 81 +- .../complete/dart-backend/lib/products.dart | 5 +- .../complete/dart-backend/pubspec.yaml | 2 +- .../step_00/app/lib/logic/dash_upgrades.dart | 4 +- in_app_purchases/step_00/app/lib/main.dart | 30 +- .../step_00/app/lib/model/firebase_state.dart | 6 +- .../step_00/app/lib/model/past_purchase.dart | 39 +- .../app/lib/model/purchasable_product.dart | 8 +- .../step_00/app/lib/model/store_state.dart | 6 +- .../step_00/app/lib/pages/home_page.dart | 69 +- .../step_00/app/lib/pages/login_page.dart | 17 +- .../step_00/app/lib/pages/purchase_page.dart | 72 +- .../step_00/app/lib/repo/iap_repo.dart | 26 +- in_app_purchases/step_00/app/pubspec.yaml | 2 +- .../dart-backend/lib/iap_repository.dart | 81 +- .../step_00/dart-backend/lib/products.dart | 5 +- .../step_00/dart-backend/pubspec.yaml | 2 +- .../step_07/app/lib/logic/dash_upgrades.dart | 4 +- in_app_purchases/step_07/app/lib/main.dart | 30 +- .../step_07/app/lib/model/firebase_state.dart | 6 +- .../step_07/app/lib/model/past_purchase.dart | 39 +- .../app/lib/model/purchasable_product.dart | 8 +- .../step_07/app/lib/model/store_state.dart | 6 +- .../step_07/app/lib/pages/home_page.dart | 69 +- .../step_07/app/lib/pages/login_page.dart | 17 +- .../step_07/app/lib/pages/purchase_page.dart | 72 +- .../step_07/app/lib/repo/iap_repo.dart | 26 +- in_app_purchases/step_07/app/pubspec.yaml | 2 +- .../step_07/app/test/widget_test.dart | 13 +- .../dart-backend/lib/iap_repository.dart | 81 +- .../step_07/dart-backend/lib/products.dart | 5 +- .../step_07/dart-backend/pubspec.yaml | 2 +- .../step_08/app/lib/logic/dash_purchases.dart | 7 +- .../step_08/app/lib/logic/dash_upgrades.dart | 4 +- in_app_purchases/step_08/app/lib/main.dart | 30 +- .../step_08/app/lib/model/firebase_state.dart | 6 +- .../step_08/app/lib/model/past_purchase.dart | 39 +- .../app/lib/model/purchasable_product.dart | 6 +- .../step_08/app/lib/model/store_state.dart | 6 +- .../step_08/app/lib/pages/home_page.dart | 69 +- .../step_08/app/lib/pages/login_page.dart | 17 +- .../step_08/app/lib/pages/purchase_page.dart | 72 +- .../step_08/app/lib/repo/iap_repo.dart | 26 +- in_app_purchases/step_08/app/pubspec.yaml | 2 +- .../step_08/app/test/widget_test.dart | 13 +- .../dart-backend/lib/iap_repository.dart | 81 +- .../step_08/dart-backend/lib/products.dart | 5 +- .../step_08/dart-backend/pubspec.yaml | 2 +- .../step_09/app/lib/logic/dash_purchases.dart | 7 +- .../step_09/app/lib/logic/dash_upgrades.dart | 4 +- in_app_purchases/step_09/app/lib/main.dart | 35 +- .../step_09/app/lib/model/firebase_state.dart | 6 +- .../step_09/app/lib/model/past_purchase.dart | 39 +- .../app/lib/model/purchasable_product.dart | 6 +- .../step_09/app/lib/model/store_state.dart | 6 +- .../step_09/app/lib/pages/home_page.dart | 69 +- .../step_09/app/lib/pages/login_page.dart | 17 +- .../step_09/app/lib/pages/purchase_page.dart | 72 +- .../step_09/app/lib/repo/iap_repo.dart | 26 +- in_app_purchases/step_09/app/pubspec.yaml | 2 +- .../step_09/app/test/widget_test.dart | 13 +- .../step_09/dart-backend/bin/server.dart | 56 +- .../lib/app_store_purchase_handler.dart | 60 +- .../lib/google_play_purchase_handler.dart | 5 +- .../dart-backend/lib/iap_repository.dart | 81 +- .../step_09/dart-backend/lib/products.dart | 5 +- .../step_09/dart-backend/pubspec.yaml | 2 +- .../step_10/app/lib/logic/dash_purchases.dart | 32 +- .../step_10/app/lib/logic/dash_upgrades.dart | 4 +- in_app_purchases/step_10/app/lib/main.dart | 37 +- .../step_10/app/lib/model/firebase_state.dart | 6 +- .../step_10/app/lib/model/past_purchase.dart | 39 +- .../app/lib/model/purchasable_product.dart | 6 +- .../step_10/app/lib/model/store_state.dart | 6 +- .../step_10/app/lib/pages/home_page.dart | 69 +- .../step_10/app/lib/pages/login_page.dart | 17 +- .../step_10/app/lib/pages/purchase_page.dart | 72 +- .../step_10/app/lib/repo/iap_repo.dart | 26 +- in_app_purchases/step_10/app/pubspec.yaml | 2 +- .../step_10/app/test/widget_test.dart | 13 +- .../step_10/dart-backend/bin/server.dart | 54 +- .../lib/app_store_purchase_handler.dart | 107 +- .../lib/google_play_purchase_handler.dart | 8 +- .../dart-backend/lib/iap_repository.dart | 81 +- .../step_10/dart-backend/lib/products.dart | 5 +- .../step_10/dart-backend/pubspec.yaml | 2 +- namer/codelab_rebuild.yaml | 2 +- namer/step_03/lib/main.dart | 5 +- namer/step_03/pubspec.yaml | 2 +- namer/step_04_a_widget/pubspec.yaml | 2 +- namer/step_04_b_behavior/pubspec.yaml | 2 +- .../step_04_b_behavior/test/widget_test.dart | 22 +- namer/step_05_a_pair/pubspec.yaml | 2 +- namer/step_05_a_pair/test/widget_test.dart | 22 +- namer/step_05_b_extract/lib/main.dart | 5 +- namer/step_05_b_extract/pubspec.yaml | 2 +- namer/step_05_b_extract/test/widget_test.dart | 14 +- namer/step_05_c_card_padding/lib/main.dart | 5 +- namer/step_05_c_card_padding/pubspec.yaml | 2 +- .../test/widget_test.dart | 14 +- namer/step_05_d_theme/lib/main.dart | 5 +- namer/step_05_d_theme/pubspec.yaml | 2 +- namer/step_05_d_theme/test/widget_test.dart | 14 +- namer/step_05_e_text_style/lib/main.dart | 5 +- namer/step_05_e_text_style/pubspec.yaml | 2 +- .../test/widget_test.dart | 14 +- namer/step_05_f_accessibility/lib/main.dart | 5 +- namer/step_05_f_accessibility/pubspec.yaml | 2 +- .../test/widget_test.dart | 14 +- namer/step_05_g_center_vertical/lib/main.dart | 5 +- namer/step_05_g_center_vertical/pubspec.yaml | 2 +- .../test/widget_test.dart | 14 +- .../step_05_h_center_horizontal/lib/main.dart | 5 +- .../step_05_h_center_horizontal/pubspec.yaml | 2 +- .../test/widget_test.dart | 14 +- .../step_05_i_optional_changes/lib/main.dart | 5 +- namer/step_05_i_optional_changes/pubspec.yaml | 2 +- .../test/widget_test.dart | 14 +- namer/step_06_a_business_logic/lib/main.dart | 5 +- namer/step_06_a_business_logic/pubspec.yaml | 2 +- .../test/widget_test.dart | 14 +- namer/step_06_b_add_row/lib/main.dart | 5 +- namer/step_06_b_add_row/pubspec.yaml | 2 +- namer/step_06_b_add_row/test/widget_test.dart | 14 +- namer/step_06_c_add_like_button/lib/main.dart | 5 +- namer/step_06_c_add_like_button/pubspec.yaml | 2 +- .../test/widget_test.dart | 14 +- .../lib/main.dart | 5 +- .../step_07_a_split_my_home_page/pubspec.yaml | 2 +- .../test/widget_test.dart | 14 +- .../lib/main.dart | 5 +- .../pubspec.yaml | 2 +- .../test/widget_test.dart | 14 +- .../step_07_c_add_selectedindex/lib/main.dart | 5 +- .../step_07_c_add_selectedindex/pubspec.yaml | 2 +- .../test/widget_test.dart | 14 +- .../step_07_d_use_selectedindex/lib/main.dart | 5 +- .../step_07_d_use_selectedindex/pubspec.yaml | 2 +- .../test/widget_test.dart | 14 +- .../lib/main.dart | 73 +- .../step_07_e_add_layout_builder/pubspec.yaml | 2 +- .../test/widget_test.dart | 14 +- namer/step_08/lib/main.dart | 83 +- namer/step_08/pubspec.yaml | 2 +- namer/step_08/test/widget_test.dart | 56 +- next-gen-ui/step_01/lib/assets.dart | 6 +- .../step_01/lib/common/reactive_widget.dart | 9 +- .../step_01/lib/common/shader_effect.dart | 81 +- next-gen-ui/step_01/lib/common/ui_scaler.dart | 6 +- .../lib/orb_shader/orb_shader_config.dart | 16 +- .../lib/orb_shader/orb_shader_painter.dart | 6 +- .../lib/orb_shader/orb_shader_widget.dart | 134 +- next-gen-ui/step_01/lib/styles.dart | 13 +- next-gen-ui/step_01/pubspec.yaml | 2 +- next-gen-ui/step_02_a/lib/assets.dart | 6 +- .../step_02_a/lib/common/reactive_widget.dart | 9 +- .../step_02_a/lib/common/shader_effect.dart | 81 +- .../step_02_a/lib/common/ui_scaler.dart | 6 +- .../lib/orb_shader/orb_shader_config.dart | 16 +- .../lib/orb_shader/orb_shader_painter.dart | 6 +- .../lib/orb_shader/orb_shader_widget.dart | 134 +- next-gen-ui/step_02_a/lib/styles.dart | 13 +- next-gen-ui/step_02_a/pubspec.yaml | 2 +- next-gen-ui/step_02_b/lib/assets.dart | 6 +- .../step_02_b/lib/common/reactive_widget.dart | 9 +- .../step_02_b/lib/common/shader_effect.dart | 81 +- .../step_02_b/lib/common/ui_scaler.dart | 6 +- .../lib/orb_shader/orb_shader_config.dart | 16 +- .../lib/orb_shader/orb_shader_painter.dart | 6 +- .../lib/orb_shader/orb_shader_widget.dart | 134 +- next-gen-ui/step_02_b/lib/styles.dart | 13 +- next-gen-ui/step_02_b/pubspec.yaml | 2 +- next-gen-ui/step_02_c/lib/assets.dart | 6 +- .../step_02_c/lib/common/reactive_widget.dart | 9 +- .../step_02_c/lib/common/shader_effect.dart | 81 +- .../step_02_c/lib/common/ui_scaler.dart | 6 +- .../lib/orb_shader/orb_shader_config.dart | 16 +- .../lib/orb_shader/orb_shader_painter.dart | 6 +- .../lib/orb_shader/orb_shader_widget.dart | 134 +- next-gen-ui/step_02_c/lib/styles.dart | 13 +- next-gen-ui/step_02_c/pubspec.yaml | 2 +- next-gen-ui/step_03_a/lib/assets.dart | 6 +- .../step_03_a/lib/common/reactive_widget.dart | 9 +- .../step_03_a/lib/common/shader_effect.dart | 81 +- .../step_03_a/lib/common/ui_scaler.dart | 6 +- .../lib/orb_shader/orb_shader_config.dart | 16 +- .../lib/orb_shader/orb_shader_painter.dart | 6 +- .../lib/orb_shader/orb_shader_widget.dart | 134 +- next-gen-ui/step_03_a/lib/styles.dart | 13 +- .../lib/title_screen/title_screen.dart | 4 +- .../lib/title_screen/title_screen_ui.dart | 9 +- next-gen-ui/step_03_a/pubspec.yaml | 2 +- next-gen-ui/step_03_b/lib/assets.dart | 6 +- .../step_03_b/lib/common/reactive_widget.dart | 9 +- .../step_03_b/lib/common/shader_effect.dart | 81 +- .../step_03_b/lib/common/ui_scaler.dart | 6 +- .../lib/orb_shader/orb_shader_config.dart | 16 +- .../lib/orb_shader/orb_shader_painter.dart | 6 +- .../lib/orb_shader/orb_shader_widget.dart | 134 +- next-gen-ui/step_03_b/lib/styles.dart | 13 +- .../lib/title_screen/title_screen_ui.dart | 13 +- next-gen-ui/step_03_b/pubspec.yaml | 2 +- next-gen-ui/step_03_c/lib/assets.dart | 6 +- .../step_03_c/lib/common/reactive_widget.dart | 9 +- .../step_03_c/lib/common/shader_effect.dart | 81 +- .../step_03_c/lib/common/ui_scaler.dart | 6 +- .../lib/orb_shader/orb_shader_config.dart | 16 +- .../lib/orb_shader/orb_shader_painter.dart | 6 +- .../lib/orb_shader/orb_shader_widget.dart | 134 +- next-gen-ui/step_03_c/lib/styles.dart | 13 +- .../lib/title_screen/title_screen_ui.dart | 26 +- next-gen-ui/step_03_c/pubspec.yaml | 2 +- next-gen-ui/step_04_a/lib/assets.dart | 6 +- .../step_04_a/lib/common/reactive_widget.dart | 9 +- .../step_04_a/lib/common/shader_effect.dart | 81 +- .../step_04_a/lib/common/ui_scaler.dart | 6 +- .../lib/orb_shader/orb_shader_config.dart | 16 +- .../lib/orb_shader/orb_shader_painter.dart | 6 +- .../lib/orb_shader/orb_shader_widget.dart | 134 +- next-gen-ui/step_04_a/lib/styles.dart | 13 +- .../lib/title_screen/title_screen_ui.dart | 33 +- next-gen-ui/step_04_a/pubspec.yaml | 2 +- next-gen-ui/step_04_b/lib/assets.dart | 6 +- .../step_04_b/lib/common/reactive_widget.dart | 9 +- .../step_04_b/lib/common/shader_effect.dart | 81 +- .../step_04_b/lib/common/ui_scaler.dart | 6 +- .../lib/orb_shader/orb_shader_config.dart | 16 +- .../lib/orb_shader/orb_shader_painter.dart | 6 +- .../lib/orb_shader/orb_shader_widget.dart | 134 +- next-gen-ui/step_04_b/lib/styles.dart | 13 +- .../lib/title_screen/title_screen_ui.dart | 63 +- next-gen-ui/step_04_b/pubspec.yaml | 2 +- next-gen-ui/step_04_c/lib/assets.dart | 6 +- .../step_04_c/lib/common/reactive_widget.dart | 9 +- .../step_04_c/lib/common/shader_effect.dart | 81 +- .../step_04_c/lib/common/ui_scaler.dart | 6 +- .../lib/orb_shader/orb_shader_config.dart | 16 +- .../lib/orb_shader/orb_shader_painter.dart | 6 +- .../lib/orb_shader/orb_shader_widget.dart | 134 +- next-gen-ui/step_04_c/lib/styles.dart | 13 +- .../lib/title_screen/title_screen_ui.dart | 105 +- next-gen-ui/step_04_c/pubspec.yaml | 2 +- next-gen-ui/step_04_d/lib/assets.dart | 6 +- .../step_04_d/lib/common/reactive_widget.dart | 9 +- .../step_04_d/lib/common/shader_effect.dart | 81 +- .../step_04_d/lib/common/ui_scaler.dart | 6 +- .../lib/orb_shader/orb_shader_config.dart | 16 +- .../lib/orb_shader/orb_shader_painter.dart | 6 +- .../lib/orb_shader/orb_shader_widget.dart | 134 +- next-gen-ui/step_04_d/lib/styles.dart | 13 +- .../lib/title_screen/title_screen_ui.dart | 112 +- next-gen-ui/step_04_d/pubspec.yaml | 2 +- next-gen-ui/step_04_e/lib/assets.dart | 6 +- .../step_04_e/lib/common/reactive_widget.dart | 9 +- .../step_04_e/lib/common/shader_effect.dart | 81 +- .../step_04_e/lib/common/ui_scaler.dart | 6 +- .../lib/orb_shader/orb_shader_config.dart | 16 +- .../lib/orb_shader/orb_shader_painter.dart | 6 +- .../lib/orb_shader/orb_shader_widget.dart | 134 +- next-gen-ui/step_04_e/lib/styles.dart | 13 +- .../lib/title_screen/title_screen.dart | 2 +- .../lib/title_screen/title_screen_ui.dart | 112 +- next-gen-ui/step_04_e/pubspec.yaml | 2 +- next-gen-ui/step_05_a/lib/assets.dart | 6 +- .../step_05_a/lib/common/reactive_widget.dart | 9 +- .../step_05_a/lib/common/shader_effect.dart | 81 +- .../step_05_a/lib/common/ui_scaler.dart | 6 +- .../lib/orb_shader/orb_shader_config.dart | 16 +- .../lib/orb_shader/orb_shader_painter.dart | 6 +- .../lib/orb_shader/orb_shader_widget.dart | 134 +- next-gen-ui/step_05_a/lib/styles.dart | 13 +- .../lib/title_screen/title_screen.dart | 2 +- .../lib/title_screen/title_screen_ui.dart | 143 +- next-gen-ui/step_05_a/pubspec.yaml | 2 +- next-gen-ui/step_05_b/lib/assets.dart | 6 +- .../step_05_b/lib/common/reactive_widget.dart | 9 +- .../step_05_b/lib/common/shader_effect.dart | 81 +- .../step_05_b/lib/common/ui_scaler.dart | 6 +- .../lib/orb_shader/orb_shader_config.dart | 16 +- .../lib/orb_shader/orb_shader_painter.dart | 6 +- .../lib/orb_shader/orb_shader_widget.dart | 134 +- next-gen-ui/step_05_b/lib/styles.dart | 13 +- .../lib/title_screen/title_screen.dart | 17 +- .../lib/title_screen/title_screen_ui.dart | 143 +- next-gen-ui/step_05_b/pubspec.yaml | 2 +- next-gen-ui/step_06/lib/assets.dart | 6 +- .../step_06/lib/common/reactive_widget.dart | 9 +- .../step_06/lib/common/shader_effect.dart | 81 +- next-gen-ui/step_06/lib/common/ui_scaler.dart | 6 +- .../lib/orb_shader/orb_shader_config.dart | 16 +- .../lib/orb_shader/orb_shader_painter.dart | 6 +- .../lib/orb_shader/orb_shader_widget.dart | 134 +- next-gen-ui/step_06/lib/styles.dart | 13 +- .../lib/title_screen/particle_overlay.dart | 28 +- .../lib/title_screen/title_screen.dart | 17 +- .../lib/title_screen/title_screen_ui.dart | 143 +- next-gen-ui/step_06/pubspec.yaml | 2 +- testing_codelab/step_03/lib/main.dart | 6 +- testing_codelab/step_03/pubspec.yaml | 2 +- testing_codelab/step_04/lib/main.dart | 4 +- .../step_04/lib/screens/favorites.dart | 21 +- testing_codelab/step_04/lib/screens/home.dart | 20 +- testing_codelab/step_04/pubspec.yaml | 2 +- testing_codelab/step_05/lib/main.dart | 4 +- .../step_05/lib/screens/favorites.dart | 21 +- testing_codelab/step_05/lib/screens/home.dart | 20 +- testing_codelab/step_05/pubspec.yaml | 2 +- testing_codelab/step_06/lib/main.dart | 4 +- .../step_06/lib/screens/favorites.dart | 21 +- testing_codelab/step_06/lib/screens/home.dart | 20 +- testing_codelab/step_06/pubspec.yaml | 2 +- .../step_06/test/favorites_test.dart | 20 +- testing_codelab/step_06/test/home_test.dart | 14 +- .../step_07/integration_test/app_test.dart | 6 +- testing_codelab/step_07/lib/main.dart | 4 +- .../step_07/lib/screens/favorites.dart | 21 +- testing_codelab/step_07/lib/screens/home.dart | 20 +- testing_codelab/step_07/pubspec.yaml | 2 +- .../step_07/test/favorites_test.dart | 20 +- testing_codelab/step_07/test/home_test.dart | 14 +- .../step_08/integration_test/app_test.dart | 6 +- testing_codelab/step_08/lib/main.dart | 4 +- .../step_08/lib/screens/favorites.dart | 21 +- testing_codelab/step_08/lib/screens/home.dart | 20 +- testing_codelab/step_08/pubspec.yaml | 2 +- .../step_08/test/favorites_test.dart | 20 +- testing_codelab/step_08/test/home_test.dart | 14 +- .../step_08/test_driver/perf_driver.dart | 3 +- .../bin/claat_export_images.dart | 50 +- .../lib/claat_export_images.dart | 8 +- .../lib/client_secret.dart | 15 +- .../lib/client_secret.g.dart | 48 +- tooling/claat_export_images/pubspec.yaml | 2 +- .../codelab_rebuild/bin/codelab_rebuild.dart | 5 +- .../codelab_rebuild/lib/src/blueprint.dart | 45 +- .../codelab_rebuild/lib/src/blueprint.g.dart | 316 +- .../lib/src/rebuild_blueprint.dart | 163 +- tooling/codelab_rebuild/pubspec.yaml | 2 +- .../test/load_config_test.dart | 20 +- webview_flutter/step_03/lib/main.dart | 4 +- webview_flutter/step_03/pubspec.yaml | 2 +- webview_flutter/step_04/lib/main.dart | 19 +- webview_flutter/step_04/pubspec.yaml | 2 +- webview_flutter/step_05/lib/main.dart | 9 +- .../step_05/lib/src/web_view_stack.dart | 51 +- webview_flutter/step_05/pubspec.yaml | 2 +- webview_flutter/step_06/lib/main.dart | 15 +- .../step_06/lib/src/web_view_stack.dart | 8 +- webview_flutter/step_06/pubspec.yaml | 2 +- webview_flutter/step_07/lib/main.dart | 15 +- .../step_07/lib/src/web_view_stack.dart | 14 +- webview_flutter/step_07/pubspec.yaml | 2 +- webview_flutter/step_08/lib/main.dart | 11 +- webview_flutter/step_08/lib/src/menu.dart | 17 +- .../step_08/lib/src/web_view_stack.dart | 14 +- webview_flutter/step_08/pubspec.yaml | 2 +- webview_flutter/step_09/lib/main.dart | 11 +- webview_flutter/step_09/lib/src/menu.dart | 37 +- .../step_09/lib/src/web_view_stack.dart | 14 +- webview_flutter/step_09/pubspec.yaml | 2 +- webview_flutter/step_10/lib/main.dart | 11 +- webview_flutter/step_10/lib/src/menu.dart | 46 +- .../step_10/lib/src/web_view_stack.dart | 19 +- webview_flutter/step_10/pubspec.yaml | 2 +- webview_flutter/step_11/lib/main.dart | 11 +- webview_flutter/step_11/lib/src/menu.dart | 120 +- .../step_11/lib/src/web_view_stack.dart | 19 +- webview_flutter/step_11/pubspec.yaml | 2 +- webview_flutter/step_12/lib/main.dart | 11 +- webview_flutter/step_12/lib/src/menu.dart | 156 +- .../step_12/lib/src/web_view_stack.dart | 19 +- webview_flutter/step_12/pubspec.yaml | 2 +- 1204 files changed, 35450 insertions(+), 35561 deletions(-) diff --git a/adaptive_app/step_03/lib/main.dart b/adaptive_app/step_03/lib/main.dart index 0b1e5bf900..5ab483c932 100644 --- a/adaptive_app/step_03/lib/main.dart +++ b/adaptive_app/step_03/lib/main.dart @@ -51,7 +51,8 @@ class ResizeablePage extends StatelessWidget { _fillTableRow( context: context, property: 'Window Size', - value: '${mediaQuery.size.width.toStringAsFixed(1)} x ' + value: + '${mediaQuery.size.width.toStringAsFixed(1)} x ' '${mediaQuery.size.height.toStringAsFixed(1)}', ), _fillTableRow( @@ -78,10 +79,11 @@ class ResizeablePage extends StatelessWidget { ); } - TableRow _fillTableRow( - {required BuildContext context, - required String property, - required String value}) { + TableRow _fillTableRow({ + required BuildContext context, + required String property, + required String value, + }) { return TableRow( children: [ TableCell( diff --git a/adaptive_app/step_03/pubspec.yaml b/adaptive_app/step_03/pubspec.yaml index 59a7434821..62083e3ffe 100644 --- a/adaptive_app/step_03/pubspec.yaml +++ b/adaptive_app/step_03/pubspec.yaml @@ -19,7 +19,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev version: 1.0.0+1 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 # Dependencies specify other packages that your package needs in order to work. # To automatically upgrade your package dependencies to the latest versions diff --git a/adaptive_app/step_04/lib/main.dart b/adaptive_app/step_04/lib/main.dart index c82c956401..1ae557748d 100644 --- a/adaptive_app/step_04/lib/main.dart +++ b/adaptive_app/step_04/lib/main.dart @@ -32,10 +32,7 @@ final _router = GoRouter( builder: (context, state) { final title = state.uri.queryParameters['title']!; final id = state.pathParameters['id']!; - return PlaylistDetails( - playlistId: id, - playlistName: title, - ); + return PlaylistDetails(playlistId: id, playlistName: title); }, ), ], @@ -49,13 +46,16 @@ void main() { exit(1); } - runApp(ChangeNotifierProvider( - create: (context) => FlutterDevPlaylists( - flutterDevAccountId: flutterDevAccountId, - youTubeApiKey: youTubeApiKey, + runApp( + ChangeNotifierProvider( + create: + (context) => FlutterDevPlaylists( + flutterDevAccountId: flutterDevAccountId, + youTubeApiKey: youTubeApiKey, + ), + child: const PlaylistsApp(), ), - child: const PlaylistsApp(), - )); + ); } class PlaylistsApp extends StatelessWidget { @@ -65,14 +65,16 @@ class PlaylistsApp extends StatelessWidget { Widget build(BuildContext context) { return MaterialApp.router( title: 'FlutterDev Playlists', - theme: FlexColorScheme.light( - scheme: FlexScheme.red, - useMaterial3: true, - ).toTheme, - darkTheme: FlexColorScheme.dark( - scheme: FlexScheme.red, - useMaterial3: true, - ).toTheme, + theme: + FlexColorScheme.light( + scheme: FlexScheme.red, + useMaterial3: true, + ).toTheme, + darkTheme: + FlexColorScheme.dark( + scheme: FlexScheme.red, + useMaterial3: true, + ).toTheme, themeMode: ThemeMode.dark, // Or ThemeMode.System if you'd prefer debugShowCheckedModeBanner: false, routerConfig: _router, diff --git a/adaptive_app/step_04/lib/src/app_state.dart b/adaptive_app/step_04/lib/src/app_state.dart index c09296fcb6..5a23a7a826 100644 --- a/adaptive_app/step_04/lib/src/app_state.dart +++ b/adaptive_app/step_04/lib/src/app_state.dart @@ -13,12 +13,7 @@ class FlutterDevPlaylists extends ChangeNotifier { required String flutterDevAccountId, required String youTubeApiKey, }) : _flutterDevAccountId = flutterDevAccountId { - _api = YouTubeApi( - _ApiKeyClient( - client: http.Client(), - key: youTubeApiKey, - ), - ); + _api = YouTubeApi(_ApiKeyClient(client: http.Client(), key: youTubeApiKey)); _loadPlaylists(); } @@ -34,9 +29,11 @@ class FlutterDevPlaylists extends ChangeNotifier { pageToken: nextPageToken, ); _playlists.addAll(response.items!); - _playlists.sort((a, b) => a.snippet!.title! - .toLowerCase() - .compareTo(b.snippet!.title!.toLowerCase())); + _playlists.sort( + (a, b) => a.snippet!.title!.toLowerCase().compareTo( + b.snippet!.title!.toLowerCase(), + ), + ); notifyListeners(); nextPageToken = response.nextPageToken; } while (nextPageToken != null); @@ -84,10 +81,12 @@ class _ApiKeyClient extends http.BaseClient { @override Future send(http.BaseRequest request) { - final url = request.url.replace(queryParameters: >{ - ...request.url.queryParametersAll, - 'key': [key] - }); + final url = request.url.replace( + queryParameters: >{ + ...request.url.queryParametersAll, + 'key': [key], + }, + ); return client.send(http.Request(request.method, url)); } diff --git a/adaptive_app/step_04/lib/src/playlist_details.dart b/adaptive_app/step_04/lib/src/playlist_details.dart index 1405725698..8ba8a70e85 100644 --- a/adaptive_app/step_04/lib/src/playlist_details.dart +++ b/adaptive_app/step_04/lib/src/playlist_details.dart @@ -10,17 +10,18 @@ import 'package:url_launcher/link.dart'; import 'app_state.dart'; class PlaylistDetails extends StatelessWidget { - const PlaylistDetails( - {required this.playlistId, required this.playlistName, super.key}); + const PlaylistDetails({ + required this.playlistId, + required this.playlistName, + super.key, + }); final String playlistId; final String playlistName; @override Widget build(BuildContext context) { return Scaffold( - appBar: AppBar( - title: Text(playlistName), - ), + appBar: AppBar(title: Text(playlistName)), body: Consumer( builder: (context, playlists, _) { final playlistItems = playlists.playlistItems(playlistId: playlistId); @@ -70,10 +71,7 @@ class _PlaylistDetailsListView extends StatelessWidget { child: DecoratedBox( decoration: BoxDecoration( gradient: LinearGradient( - colors: [ - Colors.transparent, - Theme.of(context).colorScheme.surface, - ], + colors: [Colors.transparent, Theme.of(context).colorScheme.surface], begin: Alignment.topCenter, end: Alignment.bottomCenter, stops: const [0.5, 0.95], @@ -84,7 +82,9 @@ class _PlaylistDetailsListView extends StatelessWidget { } Widget _buildTitleAndSubtitle( - BuildContext context, PlaylistItem playlistItem) { + BuildContext context, + PlaylistItem playlistItem, + ) { return Positioned( left: 20, right: 0, @@ -96,16 +96,16 @@ class _PlaylistDetailsListView extends StatelessWidget { Text( playlistItem.snippet!.title!, style: Theme.of(context).textTheme.bodyLarge!.copyWith( - fontSize: 18, - // fontWeight: FontWeight.bold, - ), + fontSize: 18, + // fontWeight: FontWeight.bold, + ), ), if (playlistItem.snippet!.videoOwnerChannelTitle != null) Text( playlistItem.snippet!.videoOwnerChannelTitle!, - style: Theme.of(context).textTheme.bodyMedium!.copyWith( - fontSize: 12, - ), + style: Theme.of( + context, + ).textTheme.bodyMedium!.copyWith(fontSize: 12), ), ], ), @@ -121,20 +121,20 @@ class _PlaylistDetailsListView extends StatelessWidget { height: 42, decoration: const BoxDecoration( color: Colors.white, - borderRadius: BorderRadius.all( - Radius.circular(21), - ), + borderRadius: BorderRadius.all(Radius.circular(21)), ), ), Link( uri: Uri.parse( - 'https://www.youtube.com/watch?v=${playlistItem.snippet!.resourceId!.videoId}'), - builder: (context, followLink) => IconButton( - onPressed: followLink, - color: Colors.red, - icon: const Icon(Icons.play_circle_fill), - iconSize: 45, + 'https://www.youtube.com/watch?v=${playlistItem.snippet!.resourceId!.videoId}', ), + builder: + (context, followLink) => IconButton( + onPressed: followLink, + color: Colors.red, + icon: const Icon(Icons.play_circle_fill), + iconSize: 45, + ), ), ], ); diff --git a/adaptive_app/step_04/lib/src/playlists.dart b/adaptive_app/step_04/lib/src/playlists.dart index e044c60852..ab08250be1 100644 --- a/adaptive_app/step_04/lib/src/playlists.dart +++ b/adaptive_app/step_04/lib/src/playlists.dart @@ -15,16 +15,12 @@ class Playlists extends StatelessWidget { @override Widget build(BuildContext context) { return Scaffold( - appBar: AppBar( - title: const Text('FlutterDev Playlists'), - ), + appBar: AppBar(title: const Text('FlutterDev Playlists')), body: Consumer( builder: (context, flutterDev, child) { final playlists = flutterDev.playlists; if (playlists.isEmpty) { - return const Center( - child: CircularProgressIndicator(), - ); + return const Center(child: CircularProgressIndicator()); } return _PlaylistsListView(items: playlists); @@ -52,15 +48,13 @@ class _PlaylistsListView extends StatelessWidget { playlist.snippet!.thumbnails!.default_!.url!, ), title: Text(playlist.snippet!.title!), - subtitle: Text( - playlist.snippet!.description!, - ), + subtitle: Text(playlist.snippet!.description!), onTap: () { context.go( Uri( path: '/playlist/${playlist.id}', queryParameters: { - 'title': playlist.snippet!.title! + 'title': playlist.snippet!.title!, }, ).toString(), ); diff --git a/adaptive_app/step_04/pubspec.yaml b/adaptive_app/step_04/pubspec.yaml index dc4b0b15c2..a14257d214 100644 --- a/adaptive_app/step_04/pubspec.yaml +++ b/adaptive_app/step_04/pubspec.yaml @@ -19,7 +19,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev version: 1.0.0+1 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 # Dependencies specify other packages that your package needs in order to work. # To automatically upgrade your package dependencies to the latest versions diff --git a/adaptive_app/step_05/lib/main.dart b/adaptive_app/step_05/lib/main.dart index 6f6940e7a1..f5a05b4dd1 100644 --- a/adaptive_app/step_05/lib/main.dart +++ b/adaptive_app/step_05/lib/main.dart @@ -34,10 +34,7 @@ final _router = GoRouter( final id = state.pathParameters['id']!; return Scaffold( appBar: AppBar(title: Text(title)), - body: PlaylistDetails( - playlistId: id, - playlistName: title, - ), + body: PlaylistDetails(playlistId: id, playlistName: title), ); }, ), @@ -52,13 +49,16 @@ void main() { exit(1); } - runApp(ChangeNotifierProvider( - create: (context) => FlutterDevPlaylists( - flutterDevAccountId: flutterDevAccountId, - youTubeApiKey: youTubeApiKey, + runApp( + ChangeNotifierProvider( + create: + (context) => FlutterDevPlaylists( + flutterDevAccountId: flutterDevAccountId, + youTubeApiKey: youTubeApiKey, + ), + child: const PlaylistsApp(), ), - child: const PlaylistsApp(), - )); + ); } class PlaylistsApp extends StatelessWidget { @@ -68,14 +68,16 @@ class PlaylistsApp extends StatelessWidget { Widget build(BuildContext context) { return MaterialApp.router( title: 'FlutterDev Playlists', - theme: FlexColorScheme.light( - scheme: FlexScheme.red, - useMaterial3: true, - ).toTheme, - darkTheme: FlexColorScheme.dark( - scheme: FlexScheme.red, - useMaterial3: true, - ).toTheme, + theme: + FlexColorScheme.light( + scheme: FlexScheme.red, + useMaterial3: true, + ).toTheme, + darkTheme: + FlexColorScheme.dark( + scheme: FlexScheme.red, + useMaterial3: true, + ).toTheme, themeMode: ThemeMode.dark, // Or ThemeMode.System if you'd prefer debugShowCheckedModeBanner: false, routerConfig: _router, diff --git a/adaptive_app/step_05/lib/src/adaptive_playlists.dart b/adaptive_app/step_05/lib/src/adaptive_playlists.dart index f19c347d0e..98acbbec56 100644 --- a/adaptive_app/step_05/lib/src/adaptive_playlists.dart +++ b/adaptive_app/step_05/lib/src/adaptive_playlists.dart @@ -41,7 +41,7 @@ class NarrowDisplayPlaylists extends StatelessWidget { Uri( path: '/playlist/${playlist.id}', queryParameters: { - 'title': playlist.snippet!.title! + 'title': playlist.snippet!.title!, }, ).toString(), ); @@ -72,14 +72,18 @@ class _WideDisplayPlaylistsState extends State { body: SplitView( viewMode: SplitViewMode.Horizontal, children: [ - Playlists(playlistSelected: (playlist) { - setState(() { - selectedPlaylist = playlist; - }); - }), + Playlists( + playlistSelected: (playlist) { + setState(() { + selectedPlaylist = playlist; + }); + }, + ), switch ((selectedPlaylist?.id, selectedPlaylist?.snippet?.title)) { - (String id, String title) => - PlaylistDetails(playlistId: id, playlistName: title), + (String id, String title) => PlaylistDetails( + playlistId: id, + playlistName: title, + ), _ => const Center(child: Text('Select a playlist')), }, ], diff --git a/adaptive_app/step_05/lib/src/app_state.dart b/adaptive_app/step_05/lib/src/app_state.dart index c09296fcb6..5a23a7a826 100644 --- a/adaptive_app/step_05/lib/src/app_state.dart +++ b/adaptive_app/step_05/lib/src/app_state.dart @@ -13,12 +13,7 @@ class FlutterDevPlaylists extends ChangeNotifier { required String flutterDevAccountId, required String youTubeApiKey, }) : _flutterDevAccountId = flutterDevAccountId { - _api = YouTubeApi( - _ApiKeyClient( - client: http.Client(), - key: youTubeApiKey, - ), - ); + _api = YouTubeApi(_ApiKeyClient(client: http.Client(), key: youTubeApiKey)); _loadPlaylists(); } @@ -34,9 +29,11 @@ class FlutterDevPlaylists extends ChangeNotifier { pageToken: nextPageToken, ); _playlists.addAll(response.items!); - _playlists.sort((a, b) => a.snippet!.title! - .toLowerCase() - .compareTo(b.snippet!.title!.toLowerCase())); + _playlists.sort( + (a, b) => a.snippet!.title!.toLowerCase().compareTo( + b.snippet!.title!.toLowerCase(), + ), + ); notifyListeners(); nextPageToken = response.nextPageToken; } while (nextPageToken != null); @@ -84,10 +81,12 @@ class _ApiKeyClient extends http.BaseClient { @override Future send(http.BaseRequest request) { - final url = request.url.replace(queryParameters: >{ - ...request.url.queryParametersAll, - 'key': [key] - }); + final url = request.url.replace( + queryParameters: >{ + ...request.url.queryParametersAll, + 'key': [key], + }, + ); return client.send(http.Request(request.method, url)); } diff --git a/adaptive_app/step_05/lib/src/playlist_details.dart b/adaptive_app/step_05/lib/src/playlist_details.dart index b2c0f74a14..c9f399efdf 100644 --- a/adaptive_app/step_05/lib/src/playlist_details.dart +++ b/adaptive_app/step_05/lib/src/playlist_details.dart @@ -10,8 +10,11 @@ import 'package:url_launcher/link.dart'; import 'app_state.dart'; class PlaylistDetails extends StatelessWidget { - const PlaylistDetails( - {required this.playlistId, required this.playlistName, super.key}); + const PlaylistDetails({ + required this.playlistId, + required this.playlistName, + super.key, + }); final String playlistId; final String playlistName; @@ -86,10 +89,7 @@ class _PlaylistDetailsListViewState extends State<_PlaylistDetailsListView> { child: DecoratedBox( decoration: BoxDecoration( gradient: LinearGradient( - colors: [ - Colors.transparent, - Theme.of(context).colorScheme.surface, - ], + colors: [Colors.transparent, Theme.of(context).colorScheme.surface], begin: Alignment.topCenter, end: Alignment.bottomCenter, stops: const [0.5, 0.95], @@ -100,7 +100,9 @@ class _PlaylistDetailsListViewState extends State<_PlaylistDetailsListView> { } Widget _buildTitleAndSubtitle( - BuildContext context, PlaylistItem playlistItem) { + BuildContext context, + PlaylistItem playlistItem, + ) { return Positioned( left: 20, right: 0, @@ -112,16 +114,16 @@ class _PlaylistDetailsListViewState extends State<_PlaylistDetailsListView> { Text( playlistItem.snippet!.title!, style: Theme.of(context).textTheme.bodyLarge!.copyWith( - fontSize: 18, - // fontWeight: FontWeight.bold, - ), + fontSize: 18, + // fontWeight: FontWeight.bold, + ), ), if (playlistItem.snippet!.videoOwnerChannelTitle != null) Text( playlistItem.snippet!.videoOwnerChannelTitle!, - style: Theme.of(context).textTheme.bodyMedium!.copyWith( - fontSize: 12, - ), + style: Theme.of( + context, + ).textTheme.bodyMedium!.copyWith(fontSize: 12), ), ], ), @@ -137,20 +139,20 @@ class _PlaylistDetailsListViewState extends State<_PlaylistDetailsListView> { height: 42, decoration: const BoxDecoration( color: Colors.white, - borderRadius: BorderRadius.all( - Radius.circular(21), - ), + borderRadius: BorderRadius.all(Radius.circular(21)), ), ), Link( uri: Uri.parse( - 'https://www.youtube.com/watch?v=${playlistItem.snippet!.resourceId!.videoId}'), - builder: (context, followLink) => IconButton( - onPressed: followLink, - color: Colors.red, - icon: const Icon(Icons.play_circle_fill), - iconSize: 45, + 'https://www.youtube.com/watch?v=${playlistItem.snippet!.resourceId!.videoId}', ), + builder: + (context, followLink) => IconButton( + onPressed: followLink, + color: Colors.red, + icon: const Icon(Icons.play_circle_fill), + iconSize: 45, + ), ), ], ); diff --git a/adaptive_app/step_05/lib/src/playlists.dart b/adaptive_app/step_05/lib/src/playlists.dart index 7a6fe2ae51..36a9633e6f 100644 --- a/adaptive_app/step_05/lib/src/playlists.dart +++ b/adaptive_app/step_05/lib/src/playlists.dart @@ -19,9 +19,7 @@ class Playlists extends StatelessWidget { builder: (context, flutterDev, child) { final playlists = flutterDev.playlists; if (playlists.isEmpty) { - return const Center( - child: CircularProgressIndicator(), - ); + return const Center(child: CircularProgressIndicator()); } return _PlaylistsListView( @@ -77,9 +75,7 @@ class _PlaylistsListViewState extends State<_PlaylistsListView> { playlist.snippet!.thumbnails!.default_!.url!, ), title: Text(playlist.snippet!.title!), - subtitle: Text( - playlist.snippet!.description!, - ), + subtitle: Text(playlist.snippet!.description!), onTap: () { widget.playlistSelected(playlist); }, diff --git a/adaptive_app/step_05/pubspec.yaml b/adaptive_app/step_05/pubspec.yaml index 285c3d112f..70036dee8c 100644 --- a/adaptive_app/step_05/pubspec.yaml +++ b/adaptive_app/step_05/pubspec.yaml @@ -19,7 +19,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev version: 1.0.0+1 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 # Dependencies specify other packages that your package needs in order to work. # To automatically upgrade your package dependencies to the latest versions diff --git a/adaptive_app/step_06/lib/main.dart b/adaptive_app/step_06/lib/main.dart index 6f6940e7a1..f5a05b4dd1 100644 --- a/adaptive_app/step_06/lib/main.dart +++ b/adaptive_app/step_06/lib/main.dart @@ -34,10 +34,7 @@ final _router = GoRouter( final id = state.pathParameters['id']!; return Scaffold( appBar: AppBar(title: Text(title)), - body: PlaylistDetails( - playlistId: id, - playlistName: title, - ), + body: PlaylistDetails(playlistId: id, playlistName: title), ); }, ), @@ -52,13 +49,16 @@ void main() { exit(1); } - runApp(ChangeNotifierProvider( - create: (context) => FlutterDevPlaylists( - flutterDevAccountId: flutterDevAccountId, - youTubeApiKey: youTubeApiKey, + runApp( + ChangeNotifierProvider( + create: + (context) => FlutterDevPlaylists( + flutterDevAccountId: flutterDevAccountId, + youTubeApiKey: youTubeApiKey, + ), + child: const PlaylistsApp(), ), - child: const PlaylistsApp(), - )); + ); } class PlaylistsApp extends StatelessWidget { @@ -68,14 +68,16 @@ class PlaylistsApp extends StatelessWidget { Widget build(BuildContext context) { return MaterialApp.router( title: 'FlutterDev Playlists', - theme: FlexColorScheme.light( - scheme: FlexScheme.red, - useMaterial3: true, - ).toTheme, - darkTheme: FlexColorScheme.dark( - scheme: FlexScheme.red, - useMaterial3: true, - ).toTheme, + theme: + FlexColorScheme.light( + scheme: FlexScheme.red, + useMaterial3: true, + ).toTheme, + darkTheme: + FlexColorScheme.dark( + scheme: FlexScheme.red, + useMaterial3: true, + ).toTheme, themeMode: ThemeMode.dark, // Or ThemeMode.System if you'd prefer debugShowCheckedModeBanner: false, routerConfig: _router, diff --git a/adaptive_app/step_06/lib/src/adaptive_image.dart b/adaptive_app/step_06/lib/src/adaptive_image.dart index db9e8e2b68..4f6f96a22c 100644 --- a/adaptive_app/step_06/lib/src/adaptive_image.dart +++ b/adaptive_app/step_06/lib/src/adaptive_image.dart @@ -8,9 +8,10 @@ import 'package:flutter/material.dart'; class AdaptiveImage extends StatelessWidget { AdaptiveImage.network(String url, {super.key}) { if (kIsWeb) { - _url = Uri.parse(url) - .replace(host: 'localhost', port: 8080, scheme: 'http') - .toString(); + _url = + Uri.parse( + url, + ).replace(host: 'localhost', port: 8080, scheme: 'http').toString(); } else { _url = url; } diff --git a/adaptive_app/step_06/lib/src/adaptive_playlists.dart b/adaptive_app/step_06/lib/src/adaptive_playlists.dart index f19c347d0e..98acbbec56 100644 --- a/adaptive_app/step_06/lib/src/adaptive_playlists.dart +++ b/adaptive_app/step_06/lib/src/adaptive_playlists.dart @@ -41,7 +41,7 @@ class NarrowDisplayPlaylists extends StatelessWidget { Uri( path: '/playlist/${playlist.id}', queryParameters: { - 'title': playlist.snippet!.title! + 'title': playlist.snippet!.title!, }, ).toString(), ); @@ -72,14 +72,18 @@ class _WideDisplayPlaylistsState extends State { body: SplitView( viewMode: SplitViewMode.Horizontal, children: [ - Playlists(playlistSelected: (playlist) { - setState(() { - selectedPlaylist = playlist; - }); - }), + Playlists( + playlistSelected: (playlist) { + setState(() { + selectedPlaylist = playlist; + }); + }, + ), switch ((selectedPlaylist?.id, selectedPlaylist?.snippet?.title)) { - (String id, String title) => - PlaylistDetails(playlistId: id, playlistName: title), + (String id, String title) => PlaylistDetails( + playlistId: id, + playlistName: title, + ), _ => const Center(child: Text('Select a playlist')), }, ], diff --git a/adaptive_app/step_06/lib/src/adaptive_text.dart b/adaptive_app/step_06/lib/src/adaptive_text.dart index 4d03d37526..407e9dce65 100644 --- a/adaptive_app/step_06/lib/src/adaptive_text.dart +++ b/adaptive_app/step_06/lib/src/adaptive_text.dart @@ -13,7 +13,7 @@ class AdaptiveText extends StatelessWidget { Widget build(BuildContext context) { return switch (Theme.of(context).platform) { TargetPlatform.android || TargetPlatform.iOS => Text(data, style: style), - _ => SelectableText(data, style: style) + _ => SelectableText(data, style: style), }; } } diff --git a/adaptive_app/step_06/lib/src/app_state.dart b/adaptive_app/step_06/lib/src/app_state.dart index c09296fcb6..5a23a7a826 100644 --- a/adaptive_app/step_06/lib/src/app_state.dart +++ b/adaptive_app/step_06/lib/src/app_state.dart @@ -13,12 +13,7 @@ class FlutterDevPlaylists extends ChangeNotifier { required String flutterDevAccountId, required String youTubeApiKey, }) : _flutterDevAccountId = flutterDevAccountId { - _api = YouTubeApi( - _ApiKeyClient( - client: http.Client(), - key: youTubeApiKey, - ), - ); + _api = YouTubeApi(_ApiKeyClient(client: http.Client(), key: youTubeApiKey)); _loadPlaylists(); } @@ -34,9 +29,11 @@ class FlutterDevPlaylists extends ChangeNotifier { pageToken: nextPageToken, ); _playlists.addAll(response.items!); - _playlists.sort((a, b) => a.snippet!.title! - .toLowerCase() - .compareTo(b.snippet!.title!.toLowerCase())); + _playlists.sort( + (a, b) => a.snippet!.title!.toLowerCase().compareTo( + b.snippet!.title!.toLowerCase(), + ), + ); notifyListeners(); nextPageToken = response.nextPageToken; } while (nextPageToken != null); @@ -84,10 +81,12 @@ class _ApiKeyClient extends http.BaseClient { @override Future send(http.BaseRequest request) { - final url = request.url.replace(queryParameters: >{ - ...request.url.queryParametersAll, - 'key': [key] - }); + final url = request.url.replace( + queryParameters: >{ + ...request.url.queryParametersAll, + 'key': [key], + }, + ); return client.send(http.Request(request.method, url)); } diff --git a/adaptive_app/step_06/lib/src/playlist_details.dart b/adaptive_app/step_06/lib/src/playlist_details.dart index 724778c235..f558a55791 100644 --- a/adaptive_app/step_06/lib/src/playlist_details.dart +++ b/adaptive_app/step_06/lib/src/playlist_details.dart @@ -12,8 +12,11 @@ import 'adaptive_text.dart'; import 'app_state.dart'; class PlaylistDetails extends StatelessWidget { - const PlaylistDetails( - {required this.playlistId, required this.playlistName, super.key}); + const PlaylistDetails({ + required this.playlistId, + required this.playlistName, + super.key, + }); final String playlistId; final String playlistName; @@ -72,7 +75,8 @@ class _PlaylistDetailsListViewState extends State<_PlaylistDetailsListView> { children: [ if (playlistItem.snippet!.thumbnails!.high != null) AdaptiveImage.network( - playlistItem.snippet!.thumbnails!.high!.url!), + playlistItem.snippet!.thumbnails!.high!.url!, + ), _buildGradient(context), _buildTitleAndSubtitle(context, playlistItem), _buildPlayButton(context, playlistItem), @@ -89,10 +93,7 @@ class _PlaylistDetailsListViewState extends State<_PlaylistDetailsListView> { child: DecoratedBox( decoration: BoxDecoration( gradient: LinearGradient( - colors: [ - Colors.transparent, - Theme.of(context).colorScheme.surface, - ], + colors: [Colors.transparent, Theme.of(context).colorScheme.surface], begin: Alignment.topCenter, end: Alignment.bottomCenter, stops: const [0.5, 0.95], @@ -103,7 +104,9 @@ class _PlaylistDetailsListViewState extends State<_PlaylistDetailsListView> { } Widget _buildTitleAndSubtitle( - BuildContext context, PlaylistItem playlistItem) { + BuildContext context, + PlaylistItem playlistItem, + ) { return Positioned( left: 20, right: 0, @@ -115,16 +118,16 @@ class _PlaylistDetailsListViewState extends State<_PlaylistDetailsListView> { AdaptiveText( playlistItem.snippet!.title!, style: Theme.of(context).textTheme.bodyLarge!.copyWith( - fontSize: 18, - // fontWeight: FontWeight.bold, - ), + fontSize: 18, + // fontWeight: FontWeight.bold, + ), ), if (playlistItem.snippet!.videoOwnerChannelTitle != null) AdaptiveText( playlistItem.snippet!.videoOwnerChannelTitle!, - style: Theme.of(context).textTheme.bodyMedium!.copyWith( - fontSize: 12, - ), + style: Theme.of( + context, + ).textTheme.bodyMedium!.copyWith(fontSize: 12), ), ], ), @@ -140,20 +143,20 @@ class _PlaylistDetailsListViewState extends State<_PlaylistDetailsListView> { height: 42, decoration: const BoxDecoration( color: Colors.white, - borderRadius: BorderRadius.all( - Radius.circular(21), - ), + borderRadius: BorderRadius.all(Radius.circular(21)), ), ), Link( uri: Uri.parse( - 'https://www.youtube.com/watch?v=${playlistItem.snippet!.resourceId!.videoId}'), - builder: (context, followLink) => IconButton( - onPressed: followLink, - color: Colors.red, - icon: const Icon(Icons.play_circle_fill), - iconSize: 45, + 'https://www.youtube.com/watch?v=${playlistItem.snippet!.resourceId!.videoId}', ), + builder: + (context, followLink) => IconButton( + onPressed: followLink, + color: Colors.red, + icon: const Icon(Icons.play_circle_fill), + iconSize: 45, + ), ), ], ); diff --git a/adaptive_app/step_06/lib/src/playlists.dart b/adaptive_app/step_06/lib/src/playlists.dart index f1a259378a..50fd2c729e 100644 --- a/adaptive_app/step_06/lib/src/playlists.dart +++ b/adaptive_app/step_06/lib/src/playlists.dart @@ -20,9 +20,7 @@ class Playlists extends StatelessWidget { builder: (context, flutterDev, child) { final playlists = flutterDev.playlists; if (playlists.isEmpty) { - return const Center( - child: CircularProgressIndicator(), - ); + return const Center(child: CircularProgressIndicator()); } return _PlaylistsListView( @@ -78,9 +76,7 @@ class _PlaylistsListViewState extends State<_PlaylistsListView> { playlist.snippet!.thumbnails!.default_!.url!, ), title: Text(playlist.snippet!.title!), - subtitle: Text( - playlist.snippet!.description!, - ), + subtitle: Text(playlist.snippet!.description!), onTap: () { widget.playlistSelected(playlist); }, diff --git a/adaptive_app/step_06/pubspec.yaml b/adaptive_app/step_06/pubspec.yaml index 285c3d112f..70036dee8c 100644 --- a/adaptive_app/step_06/pubspec.yaml +++ b/adaptive_app/step_06/pubspec.yaml @@ -19,7 +19,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev version: 1.0.0+1 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 # Dependencies specify other packages that your package needs in order to work. # To automatically upgrade your package dependencies to the latest versions diff --git a/adaptive_app/step_06/yt_cors_proxy/pubspec.yaml b/adaptive_app/step_06/yt_cors_proxy/pubspec.yaml index 1806246610..4e63106b20 100644 --- a/adaptive_app/step_06/yt_cors_proxy/pubspec.yaml +++ b/adaptive_app/step_06/yt_cors_proxy/pubspec.yaml @@ -3,7 +3,7 @@ description: A YouTube CORS Proxy Server. version: 1.0.0 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 dependencies: shelf: ^1.4.0 diff --git a/adaptive_app/step_07/lib/main.dart b/adaptive_app/step_07/lib/main.dart index a7279624bf..f9dafb0be3 100644 --- a/adaptive_app/step_07/lib/main.dart +++ b/adaptive_app/step_07/lib/main.dart @@ -14,9 +14,7 @@ import 'src/app_state.dart'; import 'src/playlist_details.dart'; // From https://developers.google.com/youtube/v3/guides/auth/installed-apps#identify-access-scopes -final scopes = [ - 'https://www.googleapis.com/auth/youtube.readonly', -]; +final scopes = ['https://www.googleapis.com/auth/youtube.readonly']; // TODO: Replace with your Client ID and Client Secret for Desktop configuration final clientId = ClientId( @@ -56,10 +54,7 @@ final _router = GoRouter( final id = state.pathParameters['id']!; return Scaffold( appBar: AppBar(title: Text(title)), - body: PlaylistDetails( - playlistId: id, - playlistName: title, - ), + body: PlaylistDetails(playlistId: id, playlistName: title), ); }, ), @@ -69,10 +64,12 @@ final _router = GoRouter( ); void main() { - runApp(ChangeNotifierProvider( - create: (context) => AuthedUserPlaylists(), - child: const PlaylistsApp(), - )); + runApp( + ChangeNotifierProvider( + create: (context) => AuthedUserPlaylists(), + child: const PlaylistsApp(), + ), + ); } class PlaylistsApp extends StatelessWidget { @@ -82,14 +79,16 @@ class PlaylistsApp extends StatelessWidget { Widget build(BuildContext context) { return MaterialApp.router( title: 'Your Playlists', - theme: FlexColorScheme.light( - scheme: FlexScheme.red, - useMaterial3: true, - ).toTheme, - darkTheme: FlexColorScheme.dark( - scheme: FlexScheme.red, - useMaterial3: true, - ).toTheme, + theme: + FlexColorScheme.light( + scheme: FlexScheme.red, + useMaterial3: true, + ).toTheme, + darkTheme: + FlexColorScheme.dark( + scheme: FlexScheme.red, + useMaterial3: true, + ).toTheme, themeMode: ThemeMode.dark, // Or ThemeMode.System if you'd prefer debugShowCheckedModeBanner: false, routerConfig: _router, diff --git a/adaptive_app/step_07/lib/src/adaptive_image.dart b/adaptive_app/step_07/lib/src/adaptive_image.dart index db9e8e2b68..4f6f96a22c 100644 --- a/adaptive_app/step_07/lib/src/adaptive_image.dart +++ b/adaptive_app/step_07/lib/src/adaptive_image.dart @@ -8,9 +8,10 @@ import 'package:flutter/material.dart'; class AdaptiveImage extends StatelessWidget { AdaptiveImage.network(String url, {super.key}) { if (kIsWeb) { - _url = Uri.parse(url) - .replace(host: 'localhost', port: 8080, scheme: 'http') - .toString(); + _url = + Uri.parse( + url, + ).replace(host: 'localhost', port: 8080, scheme: 'http').toString(); } else { _url = url; } diff --git a/adaptive_app/step_07/lib/src/adaptive_login.dart b/adaptive_app/step_07/lib/src/adaptive_login.dart index 634496682c..bcce2c64da 100644 --- a/adaptive_app/step_07/lib/src/adaptive_login.dart +++ b/adaptive_app/step_07/lib/src/adaptive_login.dart @@ -15,9 +15,8 @@ import 'package:url_launcher/link.dart'; import 'app_state.dart'; -typedef _AdaptiveLoginButtonWidget = Widget Function({ - required VoidCallback? onPressed, -}); +typedef _AdaptiveLoginButtonWidget = + Widget Function({required VoidCallback? onPressed}); class AdaptiveLogin extends StatelessWidget { const AdaptiveLogin({ @@ -34,10 +33,7 @@ class AdaptiveLogin extends StatelessWidget { @override Widget build(BuildContext context) { if (kIsWeb || Platform.isAndroid || Platform.isIOS) { - return _GoogleSignInLogin( - button: _loginButton, - scopes: scopes, - ); + return _GoogleSignInLogin(button: _loginButton, scopes: scopes); } else { return _GoogleApisAuthLogin( button: _loginButton, @@ -47,17 +43,12 @@ class AdaptiveLogin extends StatelessWidget { } } - Widget _loginButton({required VoidCallback? onPressed}) => ElevatedButton( - onPressed: onPressed, - child: loginButtonChild, - ); + Widget _loginButton({required VoidCallback? onPressed}) => + ElevatedButton(onPressed: onPressed, child: loginButtonChild); } class _GoogleSignInLogin extends StatefulWidget { - const _GoogleSignInLogin({ - required this.button, - required this.scopes, - }); + const _GoogleSignInLogin({required this.button, required this.scopes}); final _AdaptiveLoginButtonWidget button; final List scopes; @@ -70,9 +61,7 @@ class _GoogleSignInLoginState extends State<_GoogleSignInLogin> { @override initState() { super.initState(); - _googleSignIn = GoogleSignIn( - scopes: widget.scopes, - ); + _googleSignIn = GoogleSignIn(scopes: widget.scopes); _googleSignIn.onCurrentUserChanged.listen((account) { if (account != null) { _googleSignIn.authenticatedClient().then((authClient) { @@ -92,9 +81,11 @@ class _GoogleSignInLoginState extends State<_GoogleSignInLogin> { Widget build(BuildContext context) { return Scaffold( body: Center( - child: widget.button(onPressed: () { - _googleSignIn.signIn(); - }), + child: widget.button( + onPressed: () { + _googleSignIn.signIn(); + }, + ), ), ); } @@ -142,17 +133,13 @@ class _GoogleApisAuthLoginState extends State<_GoogleApisAuthLogin> { body: Center( child: Link( uri: authUrl, - builder: (context, followLink) => - widget.button(onPressed: followLink), + builder: + (context, followLink) => widget.button(onPressed: followLink), ), ), ); } - return const Scaffold( - body: Center( - child: CircularProgressIndicator(), - ), - ); + return const Scaffold(body: Center(child: CircularProgressIndicator())); } } diff --git a/adaptive_app/step_07/lib/src/adaptive_playlists.dart b/adaptive_app/step_07/lib/src/adaptive_playlists.dart index c5cf08901b..39b38720e2 100644 --- a/adaptive_app/step_07/lib/src/adaptive_playlists.dart +++ b/adaptive_app/step_07/lib/src/adaptive_playlists.dart @@ -41,7 +41,7 @@ class NarrowDisplayPlaylists extends StatelessWidget { Uri( path: '/playlist/${playlist.id}', queryParameters: { - 'title': playlist.snippet!.title! + 'title': playlist.snippet!.title!, }, ).toString(), ); @@ -72,14 +72,18 @@ class _WideDisplayPlaylistsState extends State { body: SplitView( viewMode: SplitViewMode.Horizontal, children: [ - Playlists(playlistSelected: (playlist) { - setState(() { - selectedPlaylist = playlist; - }); - }), + Playlists( + playlistSelected: (playlist) { + setState(() { + selectedPlaylist = playlist; + }); + }, + ), switch ((selectedPlaylist?.id, selectedPlaylist?.snippet?.title)) { - (String id, String title) => - PlaylistDetails(playlistId: id, playlistName: title), + (String id, String title) => PlaylistDetails( + playlistId: id, + playlistName: title, + ), _ => const Center(child: Text('Select a playlist')), }, ], diff --git a/adaptive_app/step_07/lib/src/adaptive_text.dart b/adaptive_app/step_07/lib/src/adaptive_text.dart index 4d03d37526..407e9dce65 100644 --- a/adaptive_app/step_07/lib/src/adaptive_text.dart +++ b/adaptive_app/step_07/lib/src/adaptive_text.dart @@ -13,7 +13,7 @@ class AdaptiveText extends StatelessWidget { Widget build(BuildContext context) { return switch (Theme.of(context).platform) { TargetPlatform.android || TargetPlatform.iOS => Text(data, style: style), - _ => SelectableText(data, style: style) + _ => SelectableText(data, style: style), }; } } diff --git a/adaptive_app/step_07/lib/src/app_state.dart b/adaptive_app/step_07/lib/src/app_state.dart index cf2ccabbe4..8c9fc9bff5 100644 --- a/adaptive_app/step_07/lib/src/app_state.dart +++ b/adaptive_app/step_07/lib/src/app_state.dart @@ -28,9 +28,11 @@ class AuthedUserPlaylists extends ChangeNotifier { pageToken: nextPageToken, ); _playlists.addAll(response.items!); - _playlists.sort((a, b) => a.snippet!.title! - .toLowerCase() - .compareTo(b.snippet!.title!.toLowerCase())); + _playlists.sort( + (a, b) => a.snippet!.title!.toLowerCase().compareTo( + b.snippet!.title!.toLowerCase(), + ), + ); notifyListeners(); nextPageToken = response.nextPageToken; } while (nextPageToken != null); diff --git a/adaptive_app/step_07/lib/src/playlist_details.dart b/adaptive_app/step_07/lib/src/playlist_details.dart index 966bff06cf..393ed9f7e5 100644 --- a/adaptive_app/step_07/lib/src/playlist_details.dart +++ b/adaptive_app/step_07/lib/src/playlist_details.dart @@ -12,8 +12,11 @@ import 'adaptive_text.dart'; import 'app_state.dart'; class PlaylistDetails extends StatelessWidget { - const PlaylistDetails( - {required this.playlistId, required this.playlistName, super.key}); + const PlaylistDetails({ + required this.playlistId, + required this.playlistName, + super.key, + }); final String playlistId; final String playlistName; @@ -72,7 +75,8 @@ class _PlaylistDetailsListViewState extends State<_PlaylistDetailsListView> { children: [ if (playlistItem.snippet!.thumbnails!.high != null) AdaptiveImage.network( - playlistItem.snippet!.thumbnails!.high!.url!), + playlistItem.snippet!.thumbnails!.high!.url!, + ), _buildGradient(context), _buildTitleAndSubtitle(context, playlistItem), _buildPlayButton(context, playlistItem), @@ -89,10 +93,7 @@ class _PlaylistDetailsListViewState extends State<_PlaylistDetailsListView> { child: DecoratedBox( decoration: BoxDecoration( gradient: LinearGradient( - colors: [ - Colors.transparent, - Theme.of(context).colorScheme.surface, - ], + colors: [Colors.transparent, Theme.of(context).colorScheme.surface], begin: Alignment.topCenter, end: Alignment.bottomCenter, stops: const [0.5, 0.95], @@ -103,7 +104,9 @@ class _PlaylistDetailsListViewState extends State<_PlaylistDetailsListView> { } Widget _buildTitleAndSubtitle( - BuildContext context, PlaylistItem playlistItem) { + BuildContext context, + PlaylistItem playlistItem, + ) { return Positioned( left: 20, right: 0, @@ -115,16 +118,16 @@ class _PlaylistDetailsListViewState extends State<_PlaylistDetailsListView> { AdaptiveText( playlistItem.snippet!.title!, style: Theme.of(context).textTheme.bodyLarge!.copyWith( - fontSize: 18, - // fontWeight: FontWeight.bold, - ), + fontSize: 18, + // fontWeight: FontWeight.bold, + ), ), if (playlistItem.snippet!.videoOwnerChannelTitle != null) AdaptiveText( playlistItem.snippet!.videoOwnerChannelTitle!, - style: Theme.of(context).textTheme.bodyMedium!.copyWith( - fontSize: 12, - ), + style: Theme.of( + context, + ).textTheme.bodyMedium!.copyWith(fontSize: 12), ), ], ), @@ -140,20 +143,20 @@ class _PlaylistDetailsListViewState extends State<_PlaylistDetailsListView> { height: 42, decoration: const BoxDecoration( color: Colors.white, - borderRadius: BorderRadius.all( - Radius.circular(21), - ), + borderRadius: BorderRadius.all(Radius.circular(21)), ), ), Link( uri: Uri.parse( - 'https://www.youtube.com/watch?v=${playlistItem.snippet!.resourceId!.videoId}'), - builder: (context, followLink) => IconButton( - onPressed: followLink, - color: Colors.red, - icon: const Icon(Icons.play_circle_fill), - iconSize: 45, + 'https://www.youtube.com/watch?v=${playlistItem.snippet!.resourceId!.videoId}', ), + builder: + (context, followLink) => IconButton( + onPressed: followLink, + color: Colors.red, + icon: const Icon(Icons.play_circle_fill), + iconSize: 45, + ), ), ], ); diff --git a/adaptive_app/step_07/lib/src/playlists.dart b/adaptive_app/step_07/lib/src/playlists.dart index 3b6b7d8673..92aa6b73a4 100644 --- a/adaptive_app/step_07/lib/src/playlists.dart +++ b/adaptive_app/step_07/lib/src/playlists.dart @@ -20,9 +20,7 @@ class Playlists extends StatelessWidget { builder: (context, flutterDev, child) { final playlists = flutterDev.playlists; if (playlists.isEmpty) { - return const Center( - child: CircularProgressIndicator(), - ); + return const Center(child: CircularProgressIndicator()); } return _PlaylistsListView( @@ -78,9 +76,7 @@ class _PlaylistsListViewState extends State<_PlaylistsListView> { playlist.snippet!.thumbnails!.default_!.url!, ), title: Text(playlist.snippet!.title!), - subtitle: Text( - playlist.snippet!.description!, - ), + subtitle: Text(playlist.snippet!.description!), onTap: () { widget.playlistSelected(playlist); }, diff --git a/adaptive_app/step_07/pubspec.yaml b/adaptive_app/step_07/pubspec.yaml index 465ef7215b..4709faabb7 100644 --- a/adaptive_app/step_07/pubspec.yaml +++ b/adaptive_app/step_07/pubspec.yaml @@ -19,7 +19,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev version: 1.0.0+1 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 # Dependencies specify other packages that your package needs in order to work. # To automatically upgrade your package dependencies to the latest versions diff --git a/adaptive_app/step_07/yt_cors_proxy/pubspec.yaml b/adaptive_app/step_07/yt_cors_proxy/pubspec.yaml index 1806246610..4e63106b20 100644 --- a/adaptive_app/step_07/yt_cors_proxy/pubspec.yaml +++ b/adaptive_app/step_07/yt_cors_proxy/pubspec.yaml @@ -3,7 +3,7 @@ description: A YouTube CORS Proxy Server. version: 1.0.0 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 dependencies: shelf: ^1.4.0 diff --git a/animated-responsive-layout/step_03/lib/main.dart b/animated-responsive-layout/step_03/lib/main.dart index a7256585ad..640824f765 100644 --- a/animated-responsive-layout/step_03/lib/main.dart +++ b/animated-responsive-layout/step_03/lib/main.dart @@ -10,11 +10,7 @@ class MainApp extends StatelessWidget { @override Widget build(BuildContext context) { return const MaterialApp( - home: Scaffold( - body: Center( - child: Text('Hello World!'), - ), - ), + home: Scaffold(body: Center(child: Text('Hello World!'))), ); } } diff --git a/animated-responsive-layout/step_03/pubspec.yaml b/animated-responsive-layout/step_03/pubspec.yaml index 47ac9bb3e1..e8f6f66e41 100644 --- a/animated-responsive-layout/step_03/pubspec.yaml +++ b/animated-responsive-layout/step_03/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: 'none' version: 0.1.0 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 dependencies: flutter: diff --git a/animated-responsive-layout/step_04/lib/main.dart b/animated-responsive-layout/step_04/lib/main.dart index abc95934fe..cacce71cde 100644 --- a/animated-responsive-layout/step_04/lib/main.dart +++ b/animated-responsive-layout/step_04/lib/main.dart @@ -25,10 +25,7 @@ class MainApp extends StatelessWidget { } class Feed extends StatefulWidget { - const Feed({ - super.key, - required this.currentUser, - }); + const Feed({super.key, required this.currentUser}); final User currentUser; @@ -39,16 +36,16 @@ class Feed extends StatefulWidget { class _FeedState extends State { late final _colorScheme = Theme.of(context).colorScheme; late final _backgroundColor = Color.alphaBlend( - _colorScheme.primary.withAlpha(36), _colorScheme.surface); + _colorScheme.primary.withAlpha(36), + _colorScheme.surface, + ); @override Widget build(BuildContext context) { return Scaffold( body: Container( color: _backgroundColor, - child: EmailListView( - currentUser: widget.currentUser, - ), + child: EmailListView(currentUser: widget.currentUser), ), floatingActionButton: FloatingActionButton( backgroundColor: _colorScheme.tertiaryContainer, diff --git a/animated-responsive-layout/step_04/lib/models/data.dart b/animated-responsive-layout/step_04/lib/models/data.dart index 141ce9d588..097304290b 100644 --- a/animated-responsive-layout/step_04/lib/models/data.dart +++ b/animated-responsive-layout/step_04/lib/models/data.dart @@ -5,25 +5,30 @@ import 'models.dart'; final User user_0 = User( - name: const Name(first: 'Me', last: ''), - avatarUrl: 'assets/avatar_1.png', - lastActive: DateTime.now()); + name: const Name(first: 'Me', last: ''), + avatarUrl: 'assets/avatar_1.png', + lastActive: DateTime.now(), +); final User user_1 = User( - name: const Name(first: '老', last: '强'), - avatarUrl: 'assets/avatar_2.png', - lastActive: DateTime.now().subtract(const Duration(minutes: 10))); + name: const Name(first: '老', last: '强'), + avatarUrl: 'assets/avatar_2.png', + lastActive: DateTime.now().subtract(const Duration(minutes: 10)), +); final User user_2 = User( - name: const Name(first: 'So', last: 'Duri'), - avatarUrl: 'assets/avatar_3.png', - lastActive: DateTime.now().subtract(const Duration(minutes: 20))); + name: const Name(first: 'So', last: 'Duri'), + avatarUrl: 'assets/avatar_3.png', + lastActive: DateTime.now().subtract(const Duration(minutes: 20)), +); final User user_3 = User( - name: const Name(first: 'Lily', last: 'MacDonald'), - avatarUrl: 'assets/avatar_4.png', - lastActive: DateTime.now().subtract(const Duration(hours: 2))); + name: const Name(first: 'Lily', last: 'MacDonald'), + avatarUrl: 'assets/avatar_4.png', + lastActive: DateTime.now().subtract(const Duration(hours: 2)), +); final User user_4 = User( - name: const Name(first: 'Ziad', last: 'Aouad'), - avatarUrl: 'assets/avatar_5.png', - lastActive: DateTime.now().subtract(const Duration(hours: 6))); + name: const Name(first: 'Ziad', last: 'Aouad'), + avatarUrl: 'assets/avatar_5.png', + lastActive: DateTime.now().subtract(const Duration(hours: 6)), +); final List emails = [ Email( @@ -40,12 +45,13 @@ final List emails = [ 'I think it’s time for us to finally try that new noodle shop downtown that doesn’t use menus. Anyone else have other suggestions for dinner club this week? I’m so intrigued by this idea of a noodle restaurant where no one gets to order for themselves - could be fun, or terrible, or both :)\n\nSo', ), Email( - sender: user_3, - recipients: [], - subject: 'This food show is made for you', - content: - 'Ping– you’d love this new food show I started watching. It’s produced by a Thai drummer who started getting recognized for the amazing vegan food she always brought to shows.', - attachments: [const Attachment(url: 'assets/thumbnail_1.png')]), + sender: user_3, + recipients: [], + subject: 'This food show is made for you', + content: + 'Ping– you’d love this new food show I started watching. It’s produced by a Thai drummer who started getting recognized for the amazing vegan food she always brought to shows.', + attachments: [const Attachment(url: 'assets/thumbnail_1.png')], + ), Email( sender: user_4, recipients: [], @@ -58,20 +64,14 @@ final List emails = [ final List replies = [ Email( sender: user_2, - recipients: [ - user_3, - user_2, - ], + recipients: [user_3, user_2], subject: 'Dinner Club', content: 'I think it’s time for us to finally try that new noodle shop downtown that doesn’t use menus. Anyone else have other suggestions for dinner club this week? I’m so intrigued by this idea of a noodle restaurant where no one gets to order for themselves - could be fun, or terrible, or both :)\n\nSo', ), Email( sender: user_0, - recipients: [ - user_3, - user_2, - ], + recipients: [user_3, user_2], subject: 'Dinner Club', content: 'Yes! I forgot about that place! I’m definitely up for taking a risk this week and handing control over to this mysterious noodle chef. I wonder what happens if you have allergies though? Lucky none of us have any otherwise I’d be a bit concerned.\n\nThis is going to be great. See you all at the usual time?', diff --git a/animated-responsive-layout/step_04/lib/models/models.dart b/animated-responsive-layout/step_04/lib/models/models.dart index c6fe69e010..6b1f3d95d6 100644 --- a/animated-responsive-layout/step_04/lib/models/models.dart +++ b/animated-responsive-layout/step_04/lib/models/models.dart @@ -3,9 +3,7 @@ // found in the LICENSE file. class Attachment { - const Attachment({ - required this.url, - }); + const Attachment({required this.url}); final String url; } @@ -29,10 +27,7 @@ class Email { } class Name { - const Name({ - required this.first, - required this.last, - }); + const Name({required this.first, required this.last}); final String first; final String last; diff --git a/animated-responsive-layout/step_04/lib/widgets/email_list_view.dart b/animated-responsive-layout/step_04/lib/widgets/email_list_view.dart index 881cd434c1..38a751af1c 100644 --- a/animated-responsive-layout/step_04/lib/widgets/email_list_view.dart +++ b/animated-responsive-layout/step_04/lib/widgets/email_list_view.dart @@ -30,23 +30,21 @@ class EmailListView extends StatelessWidget { const SizedBox(height: 8), search_bar.SearchBar(currentUser: currentUser), const SizedBox(height: 8), - ...List.generate( - data.emails.length, - (index) { - return Padding( - padding: const EdgeInsets.only(bottom: 8.0), - child: EmailWidget( - email: data.emails[index], - onSelected: onSelected != null - ? () { + ...List.generate(data.emails.length, (index) { + return Padding( + padding: const EdgeInsets.only(bottom: 8.0), + child: EmailWidget( + email: data.emails[index], + onSelected: + onSelected != null + ? () { onSelected!(index); } - : null, - isSelected: selectedIndex == index, - ), - ); - }, - ), + : null, + isSelected: selectedIndex == index, + ), + ); + }), ], ), ); diff --git a/animated-responsive-layout/step_04/lib/widgets/email_widget.dart b/animated-responsive-layout/step_04/lib/widgets/email_widget.dart index cb317686d6..8e37f4d8bc 100644 --- a/animated-responsive-layout/step_04/lib/widgets/email_widget.dart +++ b/animated-responsive-layout/step_04/lib/widgets/email_widget.dart @@ -6,11 +6,7 @@ import 'package:flutter/material.dart'; import '../models/models.dart'; import 'star_button.dart'; -enum EmailType { - preview, - threaded, - primaryThreaded, -} +enum EmailType { preview, threaded, primaryThreaded } class EmailWidget extends StatefulWidget { const EmailWidget({ @@ -42,10 +38,10 @@ class _EmailWidgetState extends State { ); Color get _surfaceColor => switch (widget) { - EmailWidget(isPreview: false) => _colorScheme.surface, - EmailWidget(isSelected: true) => _colorScheme.primaryContainer, - _ => unselectedColor, - }; + EmailWidget(isPreview: false) => _colorScheme.surface, + EmailWidget(isSelected: true) => _colorScheme.primaryContainer, + _ => unselectedColor, + }; @override Widget build(BuildContext context) { @@ -60,10 +56,7 @@ class _EmailWidgetState extends State { mainAxisSize: MainAxisSize.min, children: [ if (widget.showHeadline) ...[ - EmailHeadline( - email: widget.email, - isSelected: widget.isSelected, - ), + EmailHeadline(email: widget.email, isSelected: widget.isSelected), ], EmailContent( email: widget.email, @@ -117,12 +110,12 @@ class _EmailContentState extends State { } TextStyle? get contentTextStyle => switch (widget) { - EmailContent(isThreaded: true) => _textTheme.bodyLarge, - EmailContent(isSelected: true) => _textTheme.bodyMedium - ?.copyWith(color: _colorScheme.onPrimaryContainer), - _ => - _textTheme.bodyMedium?.copyWith(color: _colorScheme.onSurfaceVariant), - }; + EmailContent(isThreaded: true) => _textTheme.bodyLarge, + EmailContent(isSelected: true) => _textTheme.bodyMedium?.copyWith( + color: _colorScheme.onPrimaryContainer, + ), + _ => _textTheme.bodyMedium?.copyWith(color: _colorScheme.onSurfaceVariant), + }; @override Widget build(BuildContext context) { @@ -131,49 +124,59 @@ class _EmailContentState extends State { child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - LayoutBuilder(builder: (context, constraints) { - return Row( - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - if (constraints.maxWidth - 200 > 0) ...[ - CircleAvatar( - backgroundImage: AssetImage(widget.email.sender.avatarUrl), - ), - const Padding(padding: EdgeInsets.symmetric(horizontal: 6.0)), - ], - Expanded( - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text( - widget.email.sender.name.fullName, - overflow: TextOverflow.fade, - maxLines: 1, - style: widget.isSelected - ? _textTheme.labelMedium?.copyWith( - color: _colorScheme.onSecondaryContainer) - : _textTheme.labelMedium - ?.copyWith(color: _colorScheme.onSurface), - ), - Text( - lastActiveLabel, - overflow: TextOverflow.fade, - maxLines: 1, - style: widget.isSelected - ? _textTheme.labelMedium?.copyWith( - color: _colorScheme.onSecondaryContainer) - : _textTheme.labelMedium?.copyWith( - color: _colorScheme.onSurfaceVariant), + LayoutBuilder( + builder: (context, constraints) { + return Row( + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + if (constraints.maxWidth - 200 > 0) ...[ + CircleAvatar( + backgroundImage: AssetImage( + widget.email.sender.avatarUrl, ), - ], + ), + const Padding( + padding: EdgeInsets.symmetric(horizontal: 6.0), + ), + ], + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + widget.email.sender.name.fullName, + overflow: TextOverflow.fade, + maxLines: 1, + style: + widget.isSelected + ? _textTheme.labelMedium?.copyWith( + color: _colorScheme.onSecondaryContainer, + ) + : _textTheme.labelMedium?.copyWith( + color: _colorScheme.onSurface, + ), + ), + Text( + lastActiveLabel, + overflow: TextOverflow.fade, + maxLines: 1, + style: + widget.isSelected + ? _textTheme.labelMedium?.copyWith( + color: _colorScheme.onSecondaryContainer, + ) + : _textTheme.labelMedium?.copyWith( + color: _colorScheme.onSurfaceVariant, + ), + ), + ], + ), ), - ), - if (constraints.maxWidth - 200 > 0) ...[ - const StarButton(), - ] - ], - ); - }), + if (constraints.maxWidth - 200 > 0) ...[const StarButton()], + ], + ); + }, + ), const SizedBox(width: 8), Column( crossAxisAlignment: CrossAxisAlignment.start, @@ -181,8 +184,9 @@ class _EmailContentState extends State { if (widget.isPreview) ...[ Text( widget.email.subject, - style: const TextStyle(fontSize: 18) - .copyWith(color: _colorScheme.onSurface), + style: const TextStyle( + fontSize: 18, + ).copyWith(color: _colorScheme.onSurface), ), ], if (widget.isThreaded) ...[ @@ -190,7 +194,7 @@ class _EmailContentState extends State { Text( "To ${widget.email.recipients.map((recipient) => recipient.name.first).join(", ")}", style: _textTheme.bodyMedium, - ) + ), ], contentSpacer, Text( @@ -204,19 +208,17 @@ class _EmailContentState extends State { const SizedBox(width: 12), widget.email.attachments.isNotEmpty ? Container( - height: 96, - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(8.0), - image: DecorationImage( - fit: BoxFit.cover, - image: AssetImage(widget.email.attachments.first.url), - ), + height: 96, + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(8.0), + image: DecorationImage( + fit: BoxFit.cover, + image: AssetImage(widget.email.attachments.first.url), ), - ) + ), + ) : const SizedBox.shrink(), - if (!widget.isPreview) ...[ - const EmailReplyOptions(), - ], + if (!widget.isPreview) ...[const EmailReplyOptions()], ], ), ); @@ -243,71 +245,76 @@ class _EmailHeadlineState extends State { @override Widget build(BuildContext context) { - return LayoutBuilder(builder: (context, constraints) { - return Container( - height: 84, - color: Color.alphaBlend( - _colorScheme.primary.withAlpha(12), - _colorScheme.surface, - ), - child: Padding( - padding: const EdgeInsets.fromLTRB(24, 12, 12, 12), - child: Row( - mainAxisSize: MainAxisSize.max, - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - Expanded( - child: Column( - mainAxisSize: MainAxisSize.min, - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text( - widget.email.subject, - maxLines: 1, - overflow: TextOverflow.fade, - style: const TextStyle( - fontSize: 18, fontWeight: FontWeight.w400), - ), - Text( - '${widget.email.replies.toString()} Messages', - maxLines: 1, - overflow: TextOverflow.fade, - style: _textTheme.labelMedium - ?.copyWith(fontWeight: FontWeight.w500), - ), - ], - ), - ), - // Display a "condensed" version if the widget in the row are - // expected to overflow. - if (constraints.maxWidth - 200 > 0) ...[ - SizedBox( - height: 40, - width: 40, - child: FloatingActionButton( - onPressed: () {}, - elevation: 0, - backgroundColor: _colorScheme.surface, - child: const Icon(Icons.delete_outline), + return LayoutBuilder( + builder: (context, constraints) { + return Container( + height: 84, + color: Color.alphaBlend( + _colorScheme.primary.withAlpha(12), + _colorScheme.surface, + ), + child: Padding( + padding: const EdgeInsets.fromLTRB(24, 12, 12, 12), + child: Row( + mainAxisSize: MainAxisSize.max, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Expanded( + child: Column( + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + widget.email.subject, + maxLines: 1, + overflow: TextOverflow.fade, + style: const TextStyle( + fontSize: 18, + fontWeight: FontWeight.w400, + ), + ), + Text( + '${widget.email.replies.toString()} Messages', + maxLines: 1, + overflow: TextOverflow.fade, + style: _textTheme.labelMedium?.copyWith( + fontWeight: FontWeight.w500, + ), + ), + ], ), ), - const Padding(padding: EdgeInsets.only(right: 8.0)), - SizedBox( - height: 40, - width: 40, - child: FloatingActionButton( - onPressed: () {}, - elevation: 0, - backgroundColor: _colorScheme.surface, - child: const Icon(Icons.more_vert), + // Display a "condensed" version if the widget in the row are + // expected to overflow. + if (constraints.maxWidth - 200 > 0) ...[ + SizedBox( + height: 40, + width: 40, + child: FloatingActionButton( + onPressed: () {}, + elevation: 0, + backgroundColor: _colorScheme.surface, + child: const Icon(Icons.delete_outline), + ), ), - ), - ] - ], + const Padding(padding: EdgeInsets.only(right: 8.0)), + SizedBox( + height: 40, + width: 40, + child: FloatingActionButton( + onPressed: () {}, + elevation: 0, + backgroundColor: _colorScheme.surface, + child: const Icon(Icons.more_vert), + ), + ), + ], + ], + ), ), - ), - ); - }); + ); + }, + ); } } @@ -333,8 +340,9 @@ class _EmailReplyOptionsState extends State { Expanded( child: TextButton( style: ButtonStyle( - backgroundColor: - WidgetStateProperty.all(_colorScheme.onInverseSurface), + backgroundColor: WidgetStateProperty.all( + _colorScheme.onInverseSurface, + ), ), onPressed: () {}, child: Text( @@ -347,8 +355,9 @@ class _EmailReplyOptionsState extends State { Expanded( child: TextButton( style: ButtonStyle( - backgroundColor: - WidgetStateProperty.all(_colorScheme.onInverseSurface), + backgroundColor: WidgetStateProperty.all( + _colorScheme.onInverseSurface, + ), ), onPressed: () {}, child: Text( diff --git a/animated-responsive-layout/step_04/lib/widgets/search_bar.dart b/animated-responsive-layout/step_04/lib/widgets/search_bar.dart index 28a15c3ef0..92d91750c6 100644 --- a/animated-responsive-layout/step_04/lib/widgets/search_bar.dart +++ b/animated-responsive-layout/step_04/lib/widgets/search_bar.dart @@ -7,10 +7,7 @@ import 'package:flutter/material.dart'; import '../models/models.dart'; class SearchBar extends StatelessWidget { - const SearchBar({ - super.key, - required this.currentUser, - }); + const SearchBar({super.key, required this.currentUser}); final User currentUser; @@ -40,9 +37,7 @@ class SearchBar extends StatelessWidget { ), ), ), - CircleAvatar( - backgroundImage: AssetImage(currentUser.avatarUrl), - ), + CircleAvatar(backgroundImage: AssetImage(currentUser.avatarUrl)), ], ), ), diff --git a/animated-responsive-layout/step_04/lib/widgets/star_button.dart b/animated-responsive-layout/step_04/lib/widgets/star_button.dart index 95c1c79ee2..441c83570f 100644 --- a/animated-responsive-layout/step_04/lib/widgets/star_button.dart +++ b/animated-responsive-layout/step_04/lib/widgets/star_button.dart @@ -18,11 +18,7 @@ class _StarButtonState extends State { Icon get icon { final IconData iconData = state ? Icons.star : Icons.star_outline; - return Icon( - iconData, - color: Colors.grey, - size: 20, - ); + return Icon(iconData, color: Colors.grey, size: 20); } void _toggle() { @@ -44,10 +40,7 @@ class _StarButtonState extends State { shape: const CircleBorder(), backgroundColor: _colorScheme.surface, onPressed: () => _toggle(), - child: Padding( - padding: const EdgeInsets.all(10.0), - child: icon, - ), + child: Padding(padding: const EdgeInsets.all(10.0), child: icon), ), ); } diff --git a/animated-responsive-layout/step_04/pubspec.yaml b/animated-responsive-layout/step_04/pubspec.yaml index f69a77e63c..51fe30860f 100644 --- a/animated-responsive-layout/step_04/pubspec.yaml +++ b/animated-responsive-layout/step_04/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: 'none' version: 0.1.0 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 dependencies: flutter: diff --git a/animated-responsive-layout/step_05/lib/main.dart b/animated-responsive-layout/step_05/lib/main.dart index 606e115a6f..6e6291fde4 100644 --- a/animated-responsive-layout/step_05/lib/main.dart +++ b/animated-responsive-layout/step_05/lib/main.dart @@ -26,10 +26,7 @@ class MainApp extends StatelessWidget { } class Feed extends StatefulWidget { - const Feed({ - super.key, - required this.currentUser, - }); + const Feed({super.key, required this.currentUser}); final User currentUser; @@ -40,7 +37,9 @@ class Feed extends StatefulWidget { class _FeedState extends State { late final _colorScheme = Theme.of(context).colorScheme; late final _backgroundColor = Color.alphaBlend( - _colorScheme.primary.withAlpha(36), _colorScheme.surface); + _colorScheme.primary.withAlpha(36), + _colorScheme.surface, + ); int selectedIndex = 0; @@ -68,12 +67,10 @@ class _FeedState extends State { bottomNavigationBar: NavigationBar( elevation: 0, backgroundColor: Colors.white, - destinations: destinations.map((d) { - return NavigationDestination( - icon: Icon(d.icon), - label: d.label, - ); - }).toList(), + destinations: + destinations.map((d) { + return NavigationDestination(icon: Icon(d.icon), label: d.label); + }).toList(), selectedIndex: selectedIndex, onDestinationSelected: (index) { setState(() { diff --git a/animated-responsive-layout/step_05/lib/models/data.dart b/animated-responsive-layout/step_05/lib/models/data.dart index 141ce9d588..097304290b 100644 --- a/animated-responsive-layout/step_05/lib/models/data.dart +++ b/animated-responsive-layout/step_05/lib/models/data.dart @@ -5,25 +5,30 @@ import 'models.dart'; final User user_0 = User( - name: const Name(first: 'Me', last: ''), - avatarUrl: 'assets/avatar_1.png', - lastActive: DateTime.now()); + name: const Name(first: 'Me', last: ''), + avatarUrl: 'assets/avatar_1.png', + lastActive: DateTime.now(), +); final User user_1 = User( - name: const Name(first: '老', last: '强'), - avatarUrl: 'assets/avatar_2.png', - lastActive: DateTime.now().subtract(const Duration(minutes: 10))); + name: const Name(first: '老', last: '强'), + avatarUrl: 'assets/avatar_2.png', + lastActive: DateTime.now().subtract(const Duration(minutes: 10)), +); final User user_2 = User( - name: const Name(first: 'So', last: 'Duri'), - avatarUrl: 'assets/avatar_3.png', - lastActive: DateTime.now().subtract(const Duration(minutes: 20))); + name: const Name(first: 'So', last: 'Duri'), + avatarUrl: 'assets/avatar_3.png', + lastActive: DateTime.now().subtract(const Duration(minutes: 20)), +); final User user_3 = User( - name: const Name(first: 'Lily', last: 'MacDonald'), - avatarUrl: 'assets/avatar_4.png', - lastActive: DateTime.now().subtract(const Duration(hours: 2))); + name: const Name(first: 'Lily', last: 'MacDonald'), + avatarUrl: 'assets/avatar_4.png', + lastActive: DateTime.now().subtract(const Duration(hours: 2)), +); final User user_4 = User( - name: const Name(first: 'Ziad', last: 'Aouad'), - avatarUrl: 'assets/avatar_5.png', - lastActive: DateTime.now().subtract(const Duration(hours: 6))); + name: const Name(first: 'Ziad', last: 'Aouad'), + avatarUrl: 'assets/avatar_5.png', + lastActive: DateTime.now().subtract(const Duration(hours: 6)), +); final List emails = [ Email( @@ -40,12 +45,13 @@ final List emails = [ 'I think it’s time for us to finally try that new noodle shop downtown that doesn’t use menus. Anyone else have other suggestions for dinner club this week? I’m so intrigued by this idea of a noodle restaurant where no one gets to order for themselves - could be fun, or terrible, or both :)\n\nSo', ), Email( - sender: user_3, - recipients: [], - subject: 'This food show is made for you', - content: - 'Ping– you’d love this new food show I started watching. It’s produced by a Thai drummer who started getting recognized for the amazing vegan food she always brought to shows.', - attachments: [const Attachment(url: 'assets/thumbnail_1.png')]), + sender: user_3, + recipients: [], + subject: 'This food show is made for you', + content: + 'Ping– you’d love this new food show I started watching. It’s produced by a Thai drummer who started getting recognized for the amazing vegan food she always brought to shows.', + attachments: [const Attachment(url: 'assets/thumbnail_1.png')], + ), Email( sender: user_4, recipients: [], @@ -58,20 +64,14 @@ final List emails = [ final List replies = [ Email( sender: user_2, - recipients: [ - user_3, - user_2, - ], + recipients: [user_3, user_2], subject: 'Dinner Club', content: 'I think it’s time for us to finally try that new noodle shop downtown that doesn’t use menus. Anyone else have other suggestions for dinner club this week? I’m so intrigued by this idea of a noodle restaurant where no one gets to order for themselves - could be fun, or terrible, or both :)\n\nSo', ), Email( sender: user_0, - recipients: [ - user_3, - user_2, - ], + recipients: [user_3, user_2], subject: 'Dinner Club', content: 'Yes! I forgot about that place! I’m definitely up for taking a risk this week and handing control over to this mysterious noodle chef. I wonder what happens if you have allergies though? Lucky none of us have any otherwise I’d be a bit concerned.\n\nThis is going to be great. See you all at the usual time?', diff --git a/animated-responsive-layout/step_05/lib/models/models.dart b/animated-responsive-layout/step_05/lib/models/models.dart index c6fe69e010..6b1f3d95d6 100644 --- a/animated-responsive-layout/step_05/lib/models/models.dart +++ b/animated-responsive-layout/step_05/lib/models/models.dart @@ -3,9 +3,7 @@ // found in the LICENSE file. class Attachment { - const Attachment({ - required this.url, - }); + const Attachment({required this.url}); final String url; } @@ -29,10 +27,7 @@ class Email { } class Name { - const Name({ - required this.first, - required this.last, - }); + const Name({required this.first, required this.last}); final String first; final String last; diff --git a/animated-responsive-layout/step_05/lib/widgets/email_list_view.dart b/animated-responsive-layout/step_05/lib/widgets/email_list_view.dart index 881cd434c1..38a751af1c 100644 --- a/animated-responsive-layout/step_05/lib/widgets/email_list_view.dart +++ b/animated-responsive-layout/step_05/lib/widgets/email_list_view.dart @@ -30,23 +30,21 @@ class EmailListView extends StatelessWidget { const SizedBox(height: 8), search_bar.SearchBar(currentUser: currentUser), const SizedBox(height: 8), - ...List.generate( - data.emails.length, - (index) { - return Padding( - padding: const EdgeInsets.only(bottom: 8.0), - child: EmailWidget( - email: data.emails[index], - onSelected: onSelected != null - ? () { + ...List.generate(data.emails.length, (index) { + return Padding( + padding: const EdgeInsets.only(bottom: 8.0), + child: EmailWidget( + email: data.emails[index], + onSelected: + onSelected != null + ? () { onSelected!(index); } - : null, - isSelected: selectedIndex == index, - ), - ); - }, - ), + : null, + isSelected: selectedIndex == index, + ), + ); + }), ], ), ); diff --git a/animated-responsive-layout/step_05/lib/widgets/email_widget.dart b/animated-responsive-layout/step_05/lib/widgets/email_widget.dart index cb317686d6..8e37f4d8bc 100644 --- a/animated-responsive-layout/step_05/lib/widgets/email_widget.dart +++ b/animated-responsive-layout/step_05/lib/widgets/email_widget.dart @@ -6,11 +6,7 @@ import 'package:flutter/material.dart'; import '../models/models.dart'; import 'star_button.dart'; -enum EmailType { - preview, - threaded, - primaryThreaded, -} +enum EmailType { preview, threaded, primaryThreaded } class EmailWidget extends StatefulWidget { const EmailWidget({ @@ -42,10 +38,10 @@ class _EmailWidgetState extends State { ); Color get _surfaceColor => switch (widget) { - EmailWidget(isPreview: false) => _colorScheme.surface, - EmailWidget(isSelected: true) => _colorScheme.primaryContainer, - _ => unselectedColor, - }; + EmailWidget(isPreview: false) => _colorScheme.surface, + EmailWidget(isSelected: true) => _colorScheme.primaryContainer, + _ => unselectedColor, + }; @override Widget build(BuildContext context) { @@ -60,10 +56,7 @@ class _EmailWidgetState extends State { mainAxisSize: MainAxisSize.min, children: [ if (widget.showHeadline) ...[ - EmailHeadline( - email: widget.email, - isSelected: widget.isSelected, - ), + EmailHeadline(email: widget.email, isSelected: widget.isSelected), ], EmailContent( email: widget.email, @@ -117,12 +110,12 @@ class _EmailContentState extends State { } TextStyle? get contentTextStyle => switch (widget) { - EmailContent(isThreaded: true) => _textTheme.bodyLarge, - EmailContent(isSelected: true) => _textTheme.bodyMedium - ?.copyWith(color: _colorScheme.onPrimaryContainer), - _ => - _textTheme.bodyMedium?.copyWith(color: _colorScheme.onSurfaceVariant), - }; + EmailContent(isThreaded: true) => _textTheme.bodyLarge, + EmailContent(isSelected: true) => _textTheme.bodyMedium?.copyWith( + color: _colorScheme.onPrimaryContainer, + ), + _ => _textTheme.bodyMedium?.copyWith(color: _colorScheme.onSurfaceVariant), + }; @override Widget build(BuildContext context) { @@ -131,49 +124,59 @@ class _EmailContentState extends State { child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - LayoutBuilder(builder: (context, constraints) { - return Row( - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - if (constraints.maxWidth - 200 > 0) ...[ - CircleAvatar( - backgroundImage: AssetImage(widget.email.sender.avatarUrl), - ), - const Padding(padding: EdgeInsets.symmetric(horizontal: 6.0)), - ], - Expanded( - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text( - widget.email.sender.name.fullName, - overflow: TextOverflow.fade, - maxLines: 1, - style: widget.isSelected - ? _textTheme.labelMedium?.copyWith( - color: _colorScheme.onSecondaryContainer) - : _textTheme.labelMedium - ?.copyWith(color: _colorScheme.onSurface), - ), - Text( - lastActiveLabel, - overflow: TextOverflow.fade, - maxLines: 1, - style: widget.isSelected - ? _textTheme.labelMedium?.copyWith( - color: _colorScheme.onSecondaryContainer) - : _textTheme.labelMedium?.copyWith( - color: _colorScheme.onSurfaceVariant), + LayoutBuilder( + builder: (context, constraints) { + return Row( + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + if (constraints.maxWidth - 200 > 0) ...[ + CircleAvatar( + backgroundImage: AssetImage( + widget.email.sender.avatarUrl, ), - ], + ), + const Padding( + padding: EdgeInsets.symmetric(horizontal: 6.0), + ), + ], + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + widget.email.sender.name.fullName, + overflow: TextOverflow.fade, + maxLines: 1, + style: + widget.isSelected + ? _textTheme.labelMedium?.copyWith( + color: _colorScheme.onSecondaryContainer, + ) + : _textTheme.labelMedium?.copyWith( + color: _colorScheme.onSurface, + ), + ), + Text( + lastActiveLabel, + overflow: TextOverflow.fade, + maxLines: 1, + style: + widget.isSelected + ? _textTheme.labelMedium?.copyWith( + color: _colorScheme.onSecondaryContainer, + ) + : _textTheme.labelMedium?.copyWith( + color: _colorScheme.onSurfaceVariant, + ), + ), + ], + ), ), - ), - if (constraints.maxWidth - 200 > 0) ...[ - const StarButton(), - ] - ], - ); - }), + if (constraints.maxWidth - 200 > 0) ...[const StarButton()], + ], + ); + }, + ), const SizedBox(width: 8), Column( crossAxisAlignment: CrossAxisAlignment.start, @@ -181,8 +184,9 @@ class _EmailContentState extends State { if (widget.isPreview) ...[ Text( widget.email.subject, - style: const TextStyle(fontSize: 18) - .copyWith(color: _colorScheme.onSurface), + style: const TextStyle( + fontSize: 18, + ).copyWith(color: _colorScheme.onSurface), ), ], if (widget.isThreaded) ...[ @@ -190,7 +194,7 @@ class _EmailContentState extends State { Text( "To ${widget.email.recipients.map((recipient) => recipient.name.first).join(", ")}", style: _textTheme.bodyMedium, - ) + ), ], contentSpacer, Text( @@ -204,19 +208,17 @@ class _EmailContentState extends State { const SizedBox(width: 12), widget.email.attachments.isNotEmpty ? Container( - height: 96, - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(8.0), - image: DecorationImage( - fit: BoxFit.cover, - image: AssetImage(widget.email.attachments.first.url), - ), + height: 96, + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(8.0), + image: DecorationImage( + fit: BoxFit.cover, + image: AssetImage(widget.email.attachments.first.url), ), - ) + ), + ) : const SizedBox.shrink(), - if (!widget.isPreview) ...[ - const EmailReplyOptions(), - ], + if (!widget.isPreview) ...[const EmailReplyOptions()], ], ), ); @@ -243,71 +245,76 @@ class _EmailHeadlineState extends State { @override Widget build(BuildContext context) { - return LayoutBuilder(builder: (context, constraints) { - return Container( - height: 84, - color: Color.alphaBlend( - _colorScheme.primary.withAlpha(12), - _colorScheme.surface, - ), - child: Padding( - padding: const EdgeInsets.fromLTRB(24, 12, 12, 12), - child: Row( - mainAxisSize: MainAxisSize.max, - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - Expanded( - child: Column( - mainAxisSize: MainAxisSize.min, - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text( - widget.email.subject, - maxLines: 1, - overflow: TextOverflow.fade, - style: const TextStyle( - fontSize: 18, fontWeight: FontWeight.w400), - ), - Text( - '${widget.email.replies.toString()} Messages', - maxLines: 1, - overflow: TextOverflow.fade, - style: _textTheme.labelMedium - ?.copyWith(fontWeight: FontWeight.w500), - ), - ], - ), - ), - // Display a "condensed" version if the widget in the row are - // expected to overflow. - if (constraints.maxWidth - 200 > 0) ...[ - SizedBox( - height: 40, - width: 40, - child: FloatingActionButton( - onPressed: () {}, - elevation: 0, - backgroundColor: _colorScheme.surface, - child: const Icon(Icons.delete_outline), + return LayoutBuilder( + builder: (context, constraints) { + return Container( + height: 84, + color: Color.alphaBlend( + _colorScheme.primary.withAlpha(12), + _colorScheme.surface, + ), + child: Padding( + padding: const EdgeInsets.fromLTRB(24, 12, 12, 12), + child: Row( + mainAxisSize: MainAxisSize.max, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Expanded( + child: Column( + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + widget.email.subject, + maxLines: 1, + overflow: TextOverflow.fade, + style: const TextStyle( + fontSize: 18, + fontWeight: FontWeight.w400, + ), + ), + Text( + '${widget.email.replies.toString()} Messages', + maxLines: 1, + overflow: TextOverflow.fade, + style: _textTheme.labelMedium?.copyWith( + fontWeight: FontWeight.w500, + ), + ), + ], ), ), - const Padding(padding: EdgeInsets.only(right: 8.0)), - SizedBox( - height: 40, - width: 40, - child: FloatingActionButton( - onPressed: () {}, - elevation: 0, - backgroundColor: _colorScheme.surface, - child: const Icon(Icons.more_vert), + // Display a "condensed" version if the widget in the row are + // expected to overflow. + if (constraints.maxWidth - 200 > 0) ...[ + SizedBox( + height: 40, + width: 40, + child: FloatingActionButton( + onPressed: () {}, + elevation: 0, + backgroundColor: _colorScheme.surface, + child: const Icon(Icons.delete_outline), + ), ), - ), - ] - ], + const Padding(padding: EdgeInsets.only(right: 8.0)), + SizedBox( + height: 40, + width: 40, + child: FloatingActionButton( + onPressed: () {}, + elevation: 0, + backgroundColor: _colorScheme.surface, + child: const Icon(Icons.more_vert), + ), + ), + ], + ], + ), ), - ), - ); - }); + ); + }, + ); } } @@ -333,8 +340,9 @@ class _EmailReplyOptionsState extends State { Expanded( child: TextButton( style: ButtonStyle( - backgroundColor: - WidgetStateProperty.all(_colorScheme.onInverseSurface), + backgroundColor: WidgetStateProperty.all( + _colorScheme.onInverseSurface, + ), ), onPressed: () {}, child: Text( @@ -347,8 +355,9 @@ class _EmailReplyOptionsState extends State { Expanded( child: TextButton( style: ButtonStyle( - backgroundColor: - WidgetStateProperty.all(_colorScheme.onInverseSurface), + backgroundColor: WidgetStateProperty.all( + _colorScheme.onInverseSurface, + ), ), onPressed: () {}, child: Text( diff --git a/animated-responsive-layout/step_05/lib/widgets/search_bar.dart b/animated-responsive-layout/step_05/lib/widgets/search_bar.dart index 28a15c3ef0..92d91750c6 100644 --- a/animated-responsive-layout/step_05/lib/widgets/search_bar.dart +++ b/animated-responsive-layout/step_05/lib/widgets/search_bar.dart @@ -7,10 +7,7 @@ import 'package:flutter/material.dart'; import '../models/models.dart'; class SearchBar extends StatelessWidget { - const SearchBar({ - super.key, - required this.currentUser, - }); + const SearchBar({super.key, required this.currentUser}); final User currentUser; @@ -40,9 +37,7 @@ class SearchBar extends StatelessWidget { ), ), ), - CircleAvatar( - backgroundImage: AssetImage(currentUser.avatarUrl), - ), + CircleAvatar(backgroundImage: AssetImage(currentUser.avatarUrl)), ], ), ), diff --git a/animated-responsive-layout/step_05/lib/widgets/star_button.dart b/animated-responsive-layout/step_05/lib/widgets/star_button.dart index 95c1c79ee2..441c83570f 100644 --- a/animated-responsive-layout/step_05/lib/widgets/star_button.dart +++ b/animated-responsive-layout/step_05/lib/widgets/star_button.dart @@ -18,11 +18,7 @@ class _StarButtonState extends State { Icon get icon { final IconData iconData = state ? Icons.star : Icons.star_outline; - return Icon( - iconData, - color: Colors.grey, - size: 20, - ); + return Icon(iconData, color: Colors.grey, size: 20); } void _toggle() { @@ -44,10 +40,7 @@ class _StarButtonState extends State { shape: const CircleBorder(), backgroundColor: _colorScheme.surface, onPressed: () => _toggle(), - child: Padding( - padding: const EdgeInsets.all(10.0), - child: icon, - ), + child: Padding(padding: const EdgeInsets.all(10.0), child: icon), ), ); } diff --git a/animated-responsive-layout/step_05/pubspec.yaml b/animated-responsive-layout/step_05/pubspec.yaml index f69a77e63c..51fe30860f 100644 --- a/animated-responsive-layout/step_05/pubspec.yaml +++ b/animated-responsive-layout/step_05/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: 'none' version: 0.1.0 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 dependencies: flutter: diff --git a/animated-responsive-layout/step_06/lib/main.dart b/animated-responsive-layout/step_06/lib/main.dart index fbd3aebd33..a0500be384 100644 --- a/animated-responsive-layout/step_06/lib/main.dart +++ b/animated-responsive-layout/step_06/lib/main.dart @@ -27,10 +27,7 @@ class MainApp extends StatelessWidget { } class Feed extends StatefulWidget { - const Feed({ - super.key, - required this.currentUser, - }); + const Feed({super.key, required this.currentUser}); final User currentUser; @@ -41,7 +38,9 @@ class Feed extends StatefulWidget { class _FeedState extends State { late final _colorScheme = Theme.of(context).colorScheme; late final _backgroundColor = Color.alphaBlend( - _colorScheme.primary.withAlpha(36), _colorScheme.surface); + _colorScheme.primary.withAlpha(36), + _colorScheme.surface, + ); int selectedIndex = 0; bool wideScreen = false; @@ -85,24 +84,26 @@ class _FeedState extends State { ), ], ), - floatingActionButton: wideScreen - ? null - : FloatingActionButton( - backgroundColor: _colorScheme.tertiaryContainer, - foregroundColor: _colorScheme.onTertiaryContainer, - onPressed: () {}, - child: const Icon(Icons.add), - ), - bottomNavigationBar: wideScreen - ? null - : DisappearingBottomNavigationBar( - selectedIndex: selectedIndex, - onDestinationSelected: (index) { - setState(() { - selectedIndex = index; - }); - }, - ), + floatingActionButton: + wideScreen + ? null + : FloatingActionButton( + backgroundColor: _colorScheme.tertiaryContainer, + foregroundColor: _colorScheme.onTertiaryContainer, + onPressed: () {}, + child: const Icon(Icons.add), + ), + bottomNavigationBar: + wideScreen + ? null + : DisappearingBottomNavigationBar( + selectedIndex: selectedIndex, + onDestinationSelected: (index) { + setState(() { + selectedIndex = index; + }); + }, + ), ); } } diff --git a/animated-responsive-layout/step_06/lib/models/data.dart b/animated-responsive-layout/step_06/lib/models/data.dart index 141ce9d588..097304290b 100644 --- a/animated-responsive-layout/step_06/lib/models/data.dart +++ b/animated-responsive-layout/step_06/lib/models/data.dart @@ -5,25 +5,30 @@ import 'models.dart'; final User user_0 = User( - name: const Name(first: 'Me', last: ''), - avatarUrl: 'assets/avatar_1.png', - lastActive: DateTime.now()); + name: const Name(first: 'Me', last: ''), + avatarUrl: 'assets/avatar_1.png', + lastActive: DateTime.now(), +); final User user_1 = User( - name: const Name(first: '老', last: '强'), - avatarUrl: 'assets/avatar_2.png', - lastActive: DateTime.now().subtract(const Duration(minutes: 10))); + name: const Name(first: '老', last: '强'), + avatarUrl: 'assets/avatar_2.png', + lastActive: DateTime.now().subtract(const Duration(minutes: 10)), +); final User user_2 = User( - name: const Name(first: 'So', last: 'Duri'), - avatarUrl: 'assets/avatar_3.png', - lastActive: DateTime.now().subtract(const Duration(minutes: 20))); + name: const Name(first: 'So', last: 'Duri'), + avatarUrl: 'assets/avatar_3.png', + lastActive: DateTime.now().subtract(const Duration(minutes: 20)), +); final User user_3 = User( - name: const Name(first: 'Lily', last: 'MacDonald'), - avatarUrl: 'assets/avatar_4.png', - lastActive: DateTime.now().subtract(const Duration(hours: 2))); + name: const Name(first: 'Lily', last: 'MacDonald'), + avatarUrl: 'assets/avatar_4.png', + lastActive: DateTime.now().subtract(const Duration(hours: 2)), +); final User user_4 = User( - name: const Name(first: 'Ziad', last: 'Aouad'), - avatarUrl: 'assets/avatar_5.png', - lastActive: DateTime.now().subtract(const Duration(hours: 6))); + name: const Name(first: 'Ziad', last: 'Aouad'), + avatarUrl: 'assets/avatar_5.png', + lastActive: DateTime.now().subtract(const Duration(hours: 6)), +); final List emails = [ Email( @@ -40,12 +45,13 @@ final List emails = [ 'I think it’s time for us to finally try that new noodle shop downtown that doesn’t use menus. Anyone else have other suggestions for dinner club this week? I’m so intrigued by this idea of a noodle restaurant where no one gets to order for themselves - could be fun, or terrible, or both :)\n\nSo', ), Email( - sender: user_3, - recipients: [], - subject: 'This food show is made for you', - content: - 'Ping– you’d love this new food show I started watching. It’s produced by a Thai drummer who started getting recognized for the amazing vegan food she always brought to shows.', - attachments: [const Attachment(url: 'assets/thumbnail_1.png')]), + sender: user_3, + recipients: [], + subject: 'This food show is made for you', + content: + 'Ping– you’d love this new food show I started watching. It’s produced by a Thai drummer who started getting recognized for the amazing vegan food she always brought to shows.', + attachments: [const Attachment(url: 'assets/thumbnail_1.png')], + ), Email( sender: user_4, recipients: [], @@ -58,20 +64,14 @@ final List emails = [ final List replies = [ Email( sender: user_2, - recipients: [ - user_3, - user_2, - ], + recipients: [user_3, user_2], subject: 'Dinner Club', content: 'I think it’s time for us to finally try that new noodle shop downtown that doesn’t use menus. Anyone else have other suggestions for dinner club this week? I’m so intrigued by this idea of a noodle restaurant where no one gets to order for themselves - could be fun, or terrible, or both :)\n\nSo', ), Email( sender: user_0, - recipients: [ - user_3, - user_2, - ], + recipients: [user_3, user_2], subject: 'Dinner Club', content: 'Yes! I forgot about that place! I’m definitely up for taking a risk this week and handing control over to this mysterious noodle chef. I wonder what happens if you have allergies though? Lucky none of us have any otherwise I’d be a bit concerned.\n\nThis is going to be great. See you all at the usual time?', diff --git a/animated-responsive-layout/step_06/lib/models/models.dart b/animated-responsive-layout/step_06/lib/models/models.dart index c6fe69e010..6b1f3d95d6 100644 --- a/animated-responsive-layout/step_06/lib/models/models.dart +++ b/animated-responsive-layout/step_06/lib/models/models.dart @@ -3,9 +3,7 @@ // found in the LICENSE file. class Attachment { - const Attachment({ - required this.url, - }); + const Attachment({required this.url}); final String url; } @@ -29,10 +27,7 @@ class Email { } class Name { - const Name({ - required this.first, - required this.last, - }); + const Name({required this.first, required this.last}); final String first; final String last; diff --git a/animated-responsive-layout/step_06/lib/widgets/disappearing_bottom_navigation_bar.dart b/animated-responsive-layout/step_06/lib/widgets/disappearing_bottom_navigation_bar.dart index 67fd048672..c200b82c5b 100644 --- a/animated-responsive-layout/step_06/lib/widgets/disappearing_bottom_navigation_bar.dart +++ b/animated-responsive-layout/step_06/lib/widgets/disappearing_bottom_navigation_bar.dart @@ -21,12 +21,10 @@ class DisappearingBottomNavigationBar extends StatelessWidget { return NavigationBar( elevation: 0, backgroundColor: Colors.white, - destinations: destinations.map((d) { - return NavigationDestination( - icon: Icon(d.icon), - label: d.label, - ); - }).toList(), + destinations: + destinations.map((d) { + return NavigationDestination(icon: Icon(d.icon), label: d.label); + }).toList(), selectedIndex: selectedIndex, onDestinationSelected: onDestinationSelected, ); diff --git a/animated-responsive-layout/step_06/lib/widgets/disappearing_navigation_rail.dart b/animated-responsive-layout/step_06/lib/widgets/disappearing_navigation_rail.dart index c45ce6a884..ff8696eb2f 100644 --- a/animated-responsive-layout/step_06/lib/widgets/disappearing_navigation_rail.dart +++ b/animated-responsive-layout/step_06/lib/widgets/disappearing_navigation_rail.dart @@ -27,16 +27,11 @@ class DisappearingNavigationRail extends StatelessWidget { onDestinationSelected: onDestinationSelected, leading: Column( children: [ - IconButton( - onPressed: () {}, - icon: const Icon(Icons.menu), - ), + IconButton(onPressed: () {}, icon: const Icon(Icons.menu)), const SizedBox(height: 8), FloatingActionButton( shape: const RoundedRectangleBorder( - borderRadius: BorderRadius.all( - Radius.circular(15), - ), + borderRadius: BorderRadius.all(Radius.circular(15)), ), backgroundColor: colorScheme.tertiaryContainer, foregroundColor: colorScheme.onTertiaryContainer, @@ -46,12 +41,13 @@ class DisappearingNavigationRail extends StatelessWidget { ], ), groupAlignment: -0.85, - destinations: destinations.map((d) { - return NavigationRailDestination( - icon: Icon(d.icon), - label: Text(d.label), - ); - }).toList(), + destinations: + destinations.map((d) { + return NavigationRailDestination( + icon: Icon(d.icon), + label: Text(d.label), + ); + }).toList(), ); } } diff --git a/animated-responsive-layout/step_06/lib/widgets/email_list_view.dart b/animated-responsive-layout/step_06/lib/widgets/email_list_view.dart index 881cd434c1..38a751af1c 100644 --- a/animated-responsive-layout/step_06/lib/widgets/email_list_view.dart +++ b/animated-responsive-layout/step_06/lib/widgets/email_list_view.dart @@ -30,23 +30,21 @@ class EmailListView extends StatelessWidget { const SizedBox(height: 8), search_bar.SearchBar(currentUser: currentUser), const SizedBox(height: 8), - ...List.generate( - data.emails.length, - (index) { - return Padding( - padding: const EdgeInsets.only(bottom: 8.0), - child: EmailWidget( - email: data.emails[index], - onSelected: onSelected != null - ? () { + ...List.generate(data.emails.length, (index) { + return Padding( + padding: const EdgeInsets.only(bottom: 8.0), + child: EmailWidget( + email: data.emails[index], + onSelected: + onSelected != null + ? () { onSelected!(index); } - : null, - isSelected: selectedIndex == index, - ), - ); - }, - ), + : null, + isSelected: selectedIndex == index, + ), + ); + }), ], ), ); diff --git a/animated-responsive-layout/step_06/lib/widgets/email_widget.dart b/animated-responsive-layout/step_06/lib/widgets/email_widget.dart index cb317686d6..8e37f4d8bc 100644 --- a/animated-responsive-layout/step_06/lib/widgets/email_widget.dart +++ b/animated-responsive-layout/step_06/lib/widgets/email_widget.dart @@ -6,11 +6,7 @@ import 'package:flutter/material.dart'; import '../models/models.dart'; import 'star_button.dart'; -enum EmailType { - preview, - threaded, - primaryThreaded, -} +enum EmailType { preview, threaded, primaryThreaded } class EmailWidget extends StatefulWidget { const EmailWidget({ @@ -42,10 +38,10 @@ class _EmailWidgetState extends State { ); Color get _surfaceColor => switch (widget) { - EmailWidget(isPreview: false) => _colorScheme.surface, - EmailWidget(isSelected: true) => _colorScheme.primaryContainer, - _ => unselectedColor, - }; + EmailWidget(isPreview: false) => _colorScheme.surface, + EmailWidget(isSelected: true) => _colorScheme.primaryContainer, + _ => unselectedColor, + }; @override Widget build(BuildContext context) { @@ -60,10 +56,7 @@ class _EmailWidgetState extends State { mainAxisSize: MainAxisSize.min, children: [ if (widget.showHeadline) ...[ - EmailHeadline( - email: widget.email, - isSelected: widget.isSelected, - ), + EmailHeadline(email: widget.email, isSelected: widget.isSelected), ], EmailContent( email: widget.email, @@ -117,12 +110,12 @@ class _EmailContentState extends State { } TextStyle? get contentTextStyle => switch (widget) { - EmailContent(isThreaded: true) => _textTheme.bodyLarge, - EmailContent(isSelected: true) => _textTheme.bodyMedium - ?.copyWith(color: _colorScheme.onPrimaryContainer), - _ => - _textTheme.bodyMedium?.copyWith(color: _colorScheme.onSurfaceVariant), - }; + EmailContent(isThreaded: true) => _textTheme.bodyLarge, + EmailContent(isSelected: true) => _textTheme.bodyMedium?.copyWith( + color: _colorScheme.onPrimaryContainer, + ), + _ => _textTheme.bodyMedium?.copyWith(color: _colorScheme.onSurfaceVariant), + }; @override Widget build(BuildContext context) { @@ -131,49 +124,59 @@ class _EmailContentState extends State { child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - LayoutBuilder(builder: (context, constraints) { - return Row( - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - if (constraints.maxWidth - 200 > 0) ...[ - CircleAvatar( - backgroundImage: AssetImage(widget.email.sender.avatarUrl), - ), - const Padding(padding: EdgeInsets.symmetric(horizontal: 6.0)), - ], - Expanded( - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text( - widget.email.sender.name.fullName, - overflow: TextOverflow.fade, - maxLines: 1, - style: widget.isSelected - ? _textTheme.labelMedium?.copyWith( - color: _colorScheme.onSecondaryContainer) - : _textTheme.labelMedium - ?.copyWith(color: _colorScheme.onSurface), - ), - Text( - lastActiveLabel, - overflow: TextOverflow.fade, - maxLines: 1, - style: widget.isSelected - ? _textTheme.labelMedium?.copyWith( - color: _colorScheme.onSecondaryContainer) - : _textTheme.labelMedium?.copyWith( - color: _colorScheme.onSurfaceVariant), + LayoutBuilder( + builder: (context, constraints) { + return Row( + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + if (constraints.maxWidth - 200 > 0) ...[ + CircleAvatar( + backgroundImage: AssetImage( + widget.email.sender.avatarUrl, ), - ], + ), + const Padding( + padding: EdgeInsets.symmetric(horizontal: 6.0), + ), + ], + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + widget.email.sender.name.fullName, + overflow: TextOverflow.fade, + maxLines: 1, + style: + widget.isSelected + ? _textTheme.labelMedium?.copyWith( + color: _colorScheme.onSecondaryContainer, + ) + : _textTheme.labelMedium?.copyWith( + color: _colorScheme.onSurface, + ), + ), + Text( + lastActiveLabel, + overflow: TextOverflow.fade, + maxLines: 1, + style: + widget.isSelected + ? _textTheme.labelMedium?.copyWith( + color: _colorScheme.onSecondaryContainer, + ) + : _textTheme.labelMedium?.copyWith( + color: _colorScheme.onSurfaceVariant, + ), + ), + ], + ), ), - ), - if (constraints.maxWidth - 200 > 0) ...[ - const StarButton(), - ] - ], - ); - }), + if (constraints.maxWidth - 200 > 0) ...[const StarButton()], + ], + ); + }, + ), const SizedBox(width: 8), Column( crossAxisAlignment: CrossAxisAlignment.start, @@ -181,8 +184,9 @@ class _EmailContentState extends State { if (widget.isPreview) ...[ Text( widget.email.subject, - style: const TextStyle(fontSize: 18) - .copyWith(color: _colorScheme.onSurface), + style: const TextStyle( + fontSize: 18, + ).copyWith(color: _colorScheme.onSurface), ), ], if (widget.isThreaded) ...[ @@ -190,7 +194,7 @@ class _EmailContentState extends State { Text( "To ${widget.email.recipients.map((recipient) => recipient.name.first).join(", ")}", style: _textTheme.bodyMedium, - ) + ), ], contentSpacer, Text( @@ -204,19 +208,17 @@ class _EmailContentState extends State { const SizedBox(width: 12), widget.email.attachments.isNotEmpty ? Container( - height: 96, - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(8.0), - image: DecorationImage( - fit: BoxFit.cover, - image: AssetImage(widget.email.attachments.first.url), - ), + height: 96, + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(8.0), + image: DecorationImage( + fit: BoxFit.cover, + image: AssetImage(widget.email.attachments.first.url), ), - ) + ), + ) : const SizedBox.shrink(), - if (!widget.isPreview) ...[ - const EmailReplyOptions(), - ], + if (!widget.isPreview) ...[const EmailReplyOptions()], ], ), ); @@ -243,71 +245,76 @@ class _EmailHeadlineState extends State { @override Widget build(BuildContext context) { - return LayoutBuilder(builder: (context, constraints) { - return Container( - height: 84, - color: Color.alphaBlend( - _colorScheme.primary.withAlpha(12), - _colorScheme.surface, - ), - child: Padding( - padding: const EdgeInsets.fromLTRB(24, 12, 12, 12), - child: Row( - mainAxisSize: MainAxisSize.max, - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - Expanded( - child: Column( - mainAxisSize: MainAxisSize.min, - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text( - widget.email.subject, - maxLines: 1, - overflow: TextOverflow.fade, - style: const TextStyle( - fontSize: 18, fontWeight: FontWeight.w400), - ), - Text( - '${widget.email.replies.toString()} Messages', - maxLines: 1, - overflow: TextOverflow.fade, - style: _textTheme.labelMedium - ?.copyWith(fontWeight: FontWeight.w500), - ), - ], - ), - ), - // Display a "condensed" version if the widget in the row are - // expected to overflow. - if (constraints.maxWidth - 200 > 0) ...[ - SizedBox( - height: 40, - width: 40, - child: FloatingActionButton( - onPressed: () {}, - elevation: 0, - backgroundColor: _colorScheme.surface, - child: const Icon(Icons.delete_outline), + return LayoutBuilder( + builder: (context, constraints) { + return Container( + height: 84, + color: Color.alphaBlend( + _colorScheme.primary.withAlpha(12), + _colorScheme.surface, + ), + child: Padding( + padding: const EdgeInsets.fromLTRB(24, 12, 12, 12), + child: Row( + mainAxisSize: MainAxisSize.max, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Expanded( + child: Column( + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + widget.email.subject, + maxLines: 1, + overflow: TextOverflow.fade, + style: const TextStyle( + fontSize: 18, + fontWeight: FontWeight.w400, + ), + ), + Text( + '${widget.email.replies.toString()} Messages', + maxLines: 1, + overflow: TextOverflow.fade, + style: _textTheme.labelMedium?.copyWith( + fontWeight: FontWeight.w500, + ), + ), + ], ), ), - const Padding(padding: EdgeInsets.only(right: 8.0)), - SizedBox( - height: 40, - width: 40, - child: FloatingActionButton( - onPressed: () {}, - elevation: 0, - backgroundColor: _colorScheme.surface, - child: const Icon(Icons.more_vert), + // Display a "condensed" version if the widget in the row are + // expected to overflow. + if (constraints.maxWidth - 200 > 0) ...[ + SizedBox( + height: 40, + width: 40, + child: FloatingActionButton( + onPressed: () {}, + elevation: 0, + backgroundColor: _colorScheme.surface, + child: const Icon(Icons.delete_outline), + ), ), - ), - ] - ], + const Padding(padding: EdgeInsets.only(right: 8.0)), + SizedBox( + height: 40, + width: 40, + child: FloatingActionButton( + onPressed: () {}, + elevation: 0, + backgroundColor: _colorScheme.surface, + child: const Icon(Icons.more_vert), + ), + ), + ], + ], + ), ), - ), - ); - }); + ); + }, + ); } } @@ -333,8 +340,9 @@ class _EmailReplyOptionsState extends State { Expanded( child: TextButton( style: ButtonStyle( - backgroundColor: - WidgetStateProperty.all(_colorScheme.onInverseSurface), + backgroundColor: WidgetStateProperty.all( + _colorScheme.onInverseSurface, + ), ), onPressed: () {}, child: Text( @@ -347,8 +355,9 @@ class _EmailReplyOptionsState extends State { Expanded( child: TextButton( style: ButtonStyle( - backgroundColor: - WidgetStateProperty.all(_colorScheme.onInverseSurface), + backgroundColor: WidgetStateProperty.all( + _colorScheme.onInverseSurface, + ), ), onPressed: () {}, child: Text( diff --git a/animated-responsive-layout/step_06/lib/widgets/search_bar.dart b/animated-responsive-layout/step_06/lib/widgets/search_bar.dart index 28a15c3ef0..92d91750c6 100644 --- a/animated-responsive-layout/step_06/lib/widgets/search_bar.dart +++ b/animated-responsive-layout/step_06/lib/widgets/search_bar.dart @@ -7,10 +7,7 @@ import 'package:flutter/material.dart'; import '../models/models.dart'; class SearchBar extends StatelessWidget { - const SearchBar({ - super.key, - required this.currentUser, - }); + const SearchBar({super.key, required this.currentUser}); final User currentUser; @@ -40,9 +37,7 @@ class SearchBar extends StatelessWidget { ), ), ), - CircleAvatar( - backgroundImage: AssetImage(currentUser.avatarUrl), - ), + CircleAvatar(backgroundImage: AssetImage(currentUser.avatarUrl)), ], ), ), diff --git a/animated-responsive-layout/step_06/lib/widgets/star_button.dart b/animated-responsive-layout/step_06/lib/widgets/star_button.dart index 95c1c79ee2..441c83570f 100644 --- a/animated-responsive-layout/step_06/lib/widgets/star_button.dart +++ b/animated-responsive-layout/step_06/lib/widgets/star_button.dart @@ -18,11 +18,7 @@ class _StarButtonState extends State { Icon get icon { final IconData iconData = state ? Icons.star : Icons.star_outline; - return Icon( - iconData, - color: Colors.grey, - size: 20, - ); + return Icon(iconData, color: Colors.grey, size: 20); } void _toggle() { @@ -44,10 +40,7 @@ class _StarButtonState extends State { shape: const CircleBorder(), backgroundColor: _colorScheme.surface, onPressed: () => _toggle(), - child: Padding( - padding: const EdgeInsets.all(10.0), - child: icon, - ), + child: Padding(padding: const EdgeInsets.all(10.0), child: icon), ), ); } diff --git a/animated-responsive-layout/step_06/pubspec.yaml b/animated-responsive-layout/step_06/pubspec.yaml index f69a77e63c..51fe30860f 100644 --- a/animated-responsive-layout/step_06/pubspec.yaml +++ b/animated-responsive-layout/step_06/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: 'none' version: 0.1.0 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 dependencies: flutter: diff --git a/animated-responsive-layout/step_07/lib/animations.dart b/animated-responsive-layout/step_07/lib/animations.dart index aa48363aaf..41650c1c3c 100644 --- a/animated-responsive-layout/step_07/lib/animations.dart +++ b/animated-responsive-layout/step_07/lib/animations.dart @@ -6,85 +6,83 @@ import 'package:flutter/animation.dart'; class BarAnimation extends ReverseAnimation { BarAnimation({required AnimationController parent}) - : super( - CurvedAnimation( - parent: parent, - curve: const Interval(0, 1 / 5), - reverseCurve: const Interval(1 / 5, 4 / 5), - ), - ); + : super( + CurvedAnimation( + parent: parent, + curve: const Interval(0, 1 / 5), + reverseCurve: const Interval(1 / 5, 4 / 5), + ), + ); } class OffsetAnimation extends CurvedAnimation { OffsetAnimation({required super.parent}) - : super( - curve: const Interval( - 2 / 5, - 3 / 5, - curve: Curves.easeInOutCubicEmphasized, - ), - reverseCurve: Interval( - 4 / 5, - 1, - curve: Curves.easeInOutCubicEmphasized.flipped, - ), - ); + : super( + curve: const Interval( + 2 / 5, + 3 / 5, + curve: Curves.easeInOutCubicEmphasized, + ), + reverseCurve: Interval( + 4 / 5, + 1, + curve: Curves.easeInOutCubicEmphasized.flipped, + ), + ); } class RailAnimation extends CurvedAnimation { RailAnimation({required super.parent}) - : super( - curve: const Interval(0 / 5, 4 / 5), - reverseCurve: const Interval(3 / 5, 1), - ); + : super( + curve: const Interval(0 / 5, 4 / 5), + reverseCurve: const Interval(3 / 5, 1), + ); } class RailFabAnimation extends CurvedAnimation { RailFabAnimation({required super.parent}) - : super( - curve: const Interval(3 / 5, 1), - ); + : super(curve: const Interval(3 / 5, 1)); } class ScaleAnimation extends CurvedAnimation { ScaleAnimation({required super.parent}) - : super( - curve: const Interval( - 3 / 5, - 4 / 5, - curve: Curves.easeInOutCubicEmphasized, - ), - reverseCurve: Interval( - 3 / 5, - 1, - curve: Curves.easeInOutCubicEmphasized.flipped, - ), - ); + : super( + curve: const Interval( + 3 / 5, + 4 / 5, + curve: Curves.easeInOutCubicEmphasized, + ), + reverseCurve: Interval( + 3 / 5, + 1, + curve: Curves.easeInOutCubicEmphasized.flipped, + ), + ); } class ShapeAnimation extends CurvedAnimation { ShapeAnimation({required super.parent}) - : super( - curve: const Interval( - 2 / 5, - 3 / 5, - curve: Curves.easeInOutCubicEmphasized, - ), - ); + : super( + curve: const Interval( + 2 / 5, + 3 / 5, + curve: Curves.easeInOutCubicEmphasized, + ), + ); } class SizeAnimation extends CurvedAnimation { SizeAnimation({required super.parent}) - : super( - curve: const Interval( - 0 / 5, - 3 / 5, - curve: Curves.easeInOutCubicEmphasized, - ), - reverseCurve: Interval( - 2 / 5, - 1, - curve: Curves.easeInOutCubicEmphasized.flipped, - ), - ); + : super( + curve: const Interval( + 0 / 5, + 3 / 5, + curve: Curves.easeInOutCubicEmphasized, + ), + reverseCurve: Interval( + 2 / 5, + 1, + curve: Curves.easeInOutCubicEmphasized.flipped, + ), + ); } diff --git a/animated-responsive-layout/step_07/lib/main.dart b/animated-responsive-layout/step_07/lib/main.dart index 843eeb04fc..06adfa168a 100644 --- a/animated-responsive-layout/step_07/lib/main.dart +++ b/animated-responsive-layout/step_07/lib/main.dart @@ -29,10 +29,7 @@ class MainApp extends StatelessWidget { } class Feed extends StatefulWidget { - const Feed({ - super.key, - required this.currentUser, - }); + const Feed({super.key, required this.currentUser}); final User currentUser; @@ -43,12 +40,15 @@ class Feed extends StatefulWidget { class _FeedState extends State with SingleTickerProviderStateMixin { late final _colorScheme = Theme.of(context).colorScheme; late final _backgroundColor = Color.alphaBlend( - _colorScheme.primary.withAlpha(36), _colorScheme.surface); + _colorScheme.primary.withAlpha(36), + _colorScheme.surface, + ); late final _controller = AnimationController( - duration: const Duration(milliseconds: 1000), - reverseDuration: const Duration(milliseconds: 1250), - value: 0, - vsync: this); + duration: const Duration(milliseconds: 1000), + reverseDuration: const Duration(milliseconds: 1250), + value: 0, + vsync: this, + ); late final _railAnimation = RailAnimation(parent: _controller); late final _railFabAnimation = RailFabAnimation(parent: _controller); late final _barAnimation = BarAnimation(parent: _controller); diff --git a/animated-responsive-layout/step_07/lib/models/data.dart b/animated-responsive-layout/step_07/lib/models/data.dart index 141ce9d588..097304290b 100644 --- a/animated-responsive-layout/step_07/lib/models/data.dart +++ b/animated-responsive-layout/step_07/lib/models/data.dart @@ -5,25 +5,30 @@ import 'models.dart'; final User user_0 = User( - name: const Name(first: 'Me', last: ''), - avatarUrl: 'assets/avatar_1.png', - lastActive: DateTime.now()); + name: const Name(first: 'Me', last: ''), + avatarUrl: 'assets/avatar_1.png', + lastActive: DateTime.now(), +); final User user_1 = User( - name: const Name(first: '老', last: '强'), - avatarUrl: 'assets/avatar_2.png', - lastActive: DateTime.now().subtract(const Duration(minutes: 10))); + name: const Name(first: '老', last: '强'), + avatarUrl: 'assets/avatar_2.png', + lastActive: DateTime.now().subtract(const Duration(minutes: 10)), +); final User user_2 = User( - name: const Name(first: 'So', last: 'Duri'), - avatarUrl: 'assets/avatar_3.png', - lastActive: DateTime.now().subtract(const Duration(minutes: 20))); + name: const Name(first: 'So', last: 'Duri'), + avatarUrl: 'assets/avatar_3.png', + lastActive: DateTime.now().subtract(const Duration(minutes: 20)), +); final User user_3 = User( - name: const Name(first: 'Lily', last: 'MacDonald'), - avatarUrl: 'assets/avatar_4.png', - lastActive: DateTime.now().subtract(const Duration(hours: 2))); + name: const Name(first: 'Lily', last: 'MacDonald'), + avatarUrl: 'assets/avatar_4.png', + lastActive: DateTime.now().subtract(const Duration(hours: 2)), +); final User user_4 = User( - name: const Name(first: 'Ziad', last: 'Aouad'), - avatarUrl: 'assets/avatar_5.png', - lastActive: DateTime.now().subtract(const Duration(hours: 6))); + name: const Name(first: 'Ziad', last: 'Aouad'), + avatarUrl: 'assets/avatar_5.png', + lastActive: DateTime.now().subtract(const Duration(hours: 6)), +); final List emails = [ Email( @@ -40,12 +45,13 @@ final List emails = [ 'I think it’s time for us to finally try that new noodle shop downtown that doesn’t use menus. Anyone else have other suggestions for dinner club this week? I’m so intrigued by this idea of a noodle restaurant where no one gets to order for themselves - could be fun, or terrible, or both :)\n\nSo', ), Email( - sender: user_3, - recipients: [], - subject: 'This food show is made for you', - content: - 'Ping– you’d love this new food show I started watching. It’s produced by a Thai drummer who started getting recognized for the amazing vegan food she always brought to shows.', - attachments: [const Attachment(url: 'assets/thumbnail_1.png')]), + sender: user_3, + recipients: [], + subject: 'This food show is made for you', + content: + 'Ping– you’d love this new food show I started watching. It’s produced by a Thai drummer who started getting recognized for the amazing vegan food she always brought to shows.', + attachments: [const Attachment(url: 'assets/thumbnail_1.png')], + ), Email( sender: user_4, recipients: [], @@ -58,20 +64,14 @@ final List emails = [ final List replies = [ Email( sender: user_2, - recipients: [ - user_3, - user_2, - ], + recipients: [user_3, user_2], subject: 'Dinner Club', content: 'I think it’s time for us to finally try that new noodle shop downtown that doesn’t use menus. Anyone else have other suggestions for dinner club this week? I’m so intrigued by this idea of a noodle restaurant where no one gets to order for themselves - could be fun, or terrible, or both :)\n\nSo', ), Email( sender: user_0, - recipients: [ - user_3, - user_2, - ], + recipients: [user_3, user_2], subject: 'Dinner Club', content: 'Yes! I forgot about that place! I’m definitely up for taking a risk this week and handing control over to this mysterious noodle chef. I wonder what happens if you have allergies though? Lucky none of us have any otherwise I’d be a bit concerned.\n\nThis is going to be great. See you all at the usual time?', diff --git a/animated-responsive-layout/step_07/lib/models/models.dart b/animated-responsive-layout/step_07/lib/models/models.dart index c6fe69e010..6b1f3d95d6 100644 --- a/animated-responsive-layout/step_07/lib/models/models.dart +++ b/animated-responsive-layout/step_07/lib/models/models.dart @@ -3,9 +3,7 @@ // found in the LICENSE file. class Attachment { - const Attachment({ - required this.url, - }); + const Attachment({required this.url}); final String url; } @@ -29,10 +27,7 @@ class Email { } class Name { - const Name({ - required this.first, - required this.last, - }); + const Name({required this.first, required this.last}); final String first; final String last; diff --git a/animated-responsive-layout/step_07/lib/transitions/bottom_bar_transition.dart b/animated-responsive-layout/step_07/lib/transitions/bottom_bar_transition.dart index 1fe9654d87..61dc6821a0 100644 --- a/animated-responsive-layout/step_07/lib/transitions/bottom_bar_transition.dart +++ b/animated-responsive-layout/step_07/lib/transitions/bottom_bar_transition.dart @@ -6,11 +6,12 @@ import 'package:flutter/material.dart'; import '../animations.dart'; class BottomBarTransition extends StatefulWidget { - const BottomBarTransition( - {super.key, - required this.animation, - required this.backgroundColor, - required this.child}); + const BottomBarTransition({ + super.key, + required this.animation, + required this.backgroundColor, + required this.child, + }); final Animation animation; final Color backgroundColor; diff --git a/animated-responsive-layout/step_07/lib/transitions/nav_rail_transition.dart b/animated-responsive-layout/step_07/lib/transitions/nav_rail_transition.dart index 36d06eb4b7..f1d83bb3cd 100644 --- a/animated-responsive-layout/step_07/lib/transitions/nav_rail_transition.dart +++ b/animated-responsive-layout/step_07/lib/transitions/nav_rail_transition.dart @@ -6,11 +6,12 @@ import 'package:flutter/material.dart'; import '../animations.dart'; class NavRailTransition extends StatefulWidget { - const NavRailTransition( - {super.key, - required this.animation, - required this.backgroundColor, - required this.child}); + const NavRailTransition({ + super.key, + required this.animation, + required this.backgroundColor, + required this.child, + }); final Animation animation; final Widget child; diff --git a/animated-responsive-layout/step_07/lib/widgets/animated_floating_action_button.dart b/animated-responsive-layout/step_07/lib/widgets/animated_floating_action_button.dart index e0fa168644..6d50e95dd0 100644 --- a/animated-responsive-layout/step_07/lib/widgets/animated_floating_action_button.dart +++ b/animated-responsive-layout/step_07/lib/widgets/animated_floating_action_button.dart @@ -29,10 +29,12 @@ class AnimatedFloatingActionButton extends StatefulWidget { class _AnimatedFloatingActionButton extends State { late final ColorScheme _colorScheme = Theme.of(context).colorScheme; - late final Animation _scaleAnimation = - ScaleAnimation(parent: widget.animation); - late final Animation _shapeAnimation = - ShapeAnimation(parent: widget.animation); + late final Animation _scaleAnimation = ScaleAnimation( + parent: widget.animation, + ); + late final Animation _shapeAnimation = ShapeAnimation( + parent: widget.animation, + ); @override Widget build(BuildContext context) { diff --git a/animated-responsive-layout/step_07/lib/widgets/disappearing_bottom_navigation_bar.dart b/animated-responsive-layout/step_07/lib/widgets/disappearing_bottom_navigation_bar.dart index 059e4afb63..7108dbfaea 100644 --- a/animated-responsive-layout/step_07/lib/widgets/disappearing_bottom_navigation_bar.dart +++ b/animated-responsive-layout/step_07/lib/widgets/disappearing_bottom_navigation_bar.dart @@ -28,12 +28,10 @@ class DisappearingBottomNavigationBar extends StatelessWidget { child: NavigationBar( elevation: 0, backgroundColor: Colors.white, - destinations: destinations.map((d) { - return NavigationDestination( - icon: Icon(d.icon), - label: d.label, - ); - }).toList(), + destinations: + destinations.map((d) { + return NavigationDestination(icon: Icon(d.icon), label: d.label); + }).toList(), selectedIndex: selectedIndex, onDestinationSelected: onDestinationSelected, ), diff --git a/animated-responsive-layout/step_07/lib/widgets/disappearing_navigation_rail.dart b/animated-responsive-layout/step_07/lib/widgets/disappearing_navigation_rail.dart index 9f1446ca98..2a586bbaff 100644 --- a/animated-responsive-layout/step_07/lib/widgets/disappearing_navigation_rail.dart +++ b/animated-responsive-layout/step_07/lib/widgets/disappearing_navigation_rail.dart @@ -36,10 +36,7 @@ class DisappearingNavigationRail extends StatelessWidget { onDestinationSelected: onDestinationSelected, leading: Column( children: [ - IconButton( - onPressed: () {}, - icon: const Icon(Icons.menu), - ), + IconButton(onPressed: () {}, icon: const Icon(Icons.menu)), const SizedBox(height: 8), AnimatedFloatingActionButton( animation: railFabAnimation, @@ -50,12 +47,13 @@ class DisappearingNavigationRail extends StatelessWidget { ], ), groupAlignment: -0.85, - destinations: destinations.map((d) { - return NavigationRailDestination( - icon: Icon(d.icon), - label: Text(d.label), - ); - }).toList(), + destinations: + destinations.map((d) { + return NavigationRailDestination( + icon: Icon(d.icon), + label: Text(d.label), + ); + }).toList(), ), ); } diff --git a/animated-responsive-layout/step_07/lib/widgets/email_list_view.dart b/animated-responsive-layout/step_07/lib/widgets/email_list_view.dart index 881cd434c1..38a751af1c 100644 --- a/animated-responsive-layout/step_07/lib/widgets/email_list_view.dart +++ b/animated-responsive-layout/step_07/lib/widgets/email_list_view.dart @@ -30,23 +30,21 @@ class EmailListView extends StatelessWidget { const SizedBox(height: 8), search_bar.SearchBar(currentUser: currentUser), const SizedBox(height: 8), - ...List.generate( - data.emails.length, - (index) { - return Padding( - padding: const EdgeInsets.only(bottom: 8.0), - child: EmailWidget( - email: data.emails[index], - onSelected: onSelected != null - ? () { + ...List.generate(data.emails.length, (index) { + return Padding( + padding: const EdgeInsets.only(bottom: 8.0), + child: EmailWidget( + email: data.emails[index], + onSelected: + onSelected != null + ? () { onSelected!(index); } - : null, - isSelected: selectedIndex == index, - ), - ); - }, - ), + : null, + isSelected: selectedIndex == index, + ), + ); + }), ], ), ); diff --git a/animated-responsive-layout/step_07/lib/widgets/email_widget.dart b/animated-responsive-layout/step_07/lib/widgets/email_widget.dart index cb317686d6..8e37f4d8bc 100644 --- a/animated-responsive-layout/step_07/lib/widgets/email_widget.dart +++ b/animated-responsive-layout/step_07/lib/widgets/email_widget.dart @@ -6,11 +6,7 @@ import 'package:flutter/material.dart'; import '../models/models.dart'; import 'star_button.dart'; -enum EmailType { - preview, - threaded, - primaryThreaded, -} +enum EmailType { preview, threaded, primaryThreaded } class EmailWidget extends StatefulWidget { const EmailWidget({ @@ -42,10 +38,10 @@ class _EmailWidgetState extends State { ); Color get _surfaceColor => switch (widget) { - EmailWidget(isPreview: false) => _colorScheme.surface, - EmailWidget(isSelected: true) => _colorScheme.primaryContainer, - _ => unselectedColor, - }; + EmailWidget(isPreview: false) => _colorScheme.surface, + EmailWidget(isSelected: true) => _colorScheme.primaryContainer, + _ => unselectedColor, + }; @override Widget build(BuildContext context) { @@ -60,10 +56,7 @@ class _EmailWidgetState extends State { mainAxisSize: MainAxisSize.min, children: [ if (widget.showHeadline) ...[ - EmailHeadline( - email: widget.email, - isSelected: widget.isSelected, - ), + EmailHeadline(email: widget.email, isSelected: widget.isSelected), ], EmailContent( email: widget.email, @@ -117,12 +110,12 @@ class _EmailContentState extends State { } TextStyle? get contentTextStyle => switch (widget) { - EmailContent(isThreaded: true) => _textTheme.bodyLarge, - EmailContent(isSelected: true) => _textTheme.bodyMedium - ?.copyWith(color: _colorScheme.onPrimaryContainer), - _ => - _textTheme.bodyMedium?.copyWith(color: _colorScheme.onSurfaceVariant), - }; + EmailContent(isThreaded: true) => _textTheme.bodyLarge, + EmailContent(isSelected: true) => _textTheme.bodyMedium?.copyWith( + color: _colorScheme.onPrimaryContainer, + ), + _ => _textTheme.bodyMedium?.copyWith(color: _colorScheme.onSurfaceVariant), + }; @override Widget build(BuildContext context) { @@ -131,49 +124,59 @@ class _EmailContentState extends State { child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - LayoutBuilder(builder: (context, constraints) { - return Row( - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - if (constraints.maxWidth - 200 > 0) ...[ - CircleAvatar( - backgroundImage: AssetImage(widget.email.sender.avatarUrl), - ), - const Padding(padding: EdgeInsets.symmetric(horizontal: 6.0)), - ], - Expanded( - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text( - widget.email.sender.name.fullName, - overflow: TextOverflow.fade, - maxLines: 1, - style: widget.isSelected - ? _textTheme.labelMedium?.copyWith( - color: _colorScheme.onSecondaryContainer) - : _textTheme.labelMedium - ?.copyWith(color: _colorScheme.onSurface), - ), - Text( - lastActiveLabel, - overflow: TextOverflow.fade, - maxLines: 1, - style: widget.isSelected - ? _textTheme.labelMedium?.copyWith( - color: _colorScheme.onSecondaryContainer) - : _textTheme.labelMedium?.copyWith( - color: _colorScheme.onSurfaceVariant), + LayoutBuilder( + builder: (context, constraints) { + return Row( + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + if (constraints.maxWidth - 200 > 0) ...[ + CircleAvatar( + backgroundImage: AssetImage( + widget.email.sender.avatarUrl, ), - ], + ), + const Padding( + padding: EdgeInsets.symmetric(horizontal: 6.0), + ), + ], + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + widget.email.sender.name.fullName, + overflow: TextOverflow.fade, + maxLines: 1, + style: + widget.isSelected + ? _textTheme.labelMedium?.copyWith( + color: _colorScheme.onSecondaryContainer, + ) + : _textTheme.labelMedium?.copyWith( + color: _colorScheme.onSurface, + ), + ), + Text( + lastActiveLabel, + overflow: TextOverflow.fade, + maxLines: 1, + style: + widget.isSelected + ? _textTheme.labelMedium?.copyWith( + color: _colorScheme.onSecondaryContainer, + ) + : _textTheme.labelMedium?.copyWith( + color: _colorScheme.onSurfaceVariant, + ), + ), + ], + ), ), - ), - if (constraints.maxWidth - 200 > 0) ...[ - const StarButton(), - ] - ], - ); - }), + if (constraints.maxWidth - 200 > 0) ...[const StarButton()], + ], + ); + }, + ), const SizedBox(width: 8), Column( crossAxisAlignment: CrossAxisAlignment.start, @@ -181,8 +184,9 @@ class _EmailContentState extends State { if (widget.isPreview) ...[ Text( widget.email.subject, - style: const TextStyle(fontSize: 18) - .copyWith(color: _colorScheme.onSurface), + style: const TextStyle( + fontSize: 18, + ).copyWith(color: _colorScheme.onSurface), ), ], if (widget.isThreaded) ...[ @@ -190,7 +194,7 @@ class _EmailContentState extends State { Text( "To ${widget.email.recipients.map((recipient) => recipient.name.first).join(", ")}", style: _textTheme.bodyMedium, - ) + ), ], contentSpacer, Text( @@ -204,19 +208,17 @@ class _EmailContentState extends State { const SizedBox(width: 12), widget.email.attachments.isNotEmpty ? Container( - height: 96, - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(8.0), - image: DecorationImage( - fit: BoxFit.cover, - image: AssetImage(widget.email.attachments.first.url), - ), + height: 96, + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(8.0), + image: DecorationImage( + fit: BoxFit.cover, + image: AssetImage(widget.email.attachments.first.url), ), - ) + ), + ) : const SizedBox.shrink(), - if (!widget.isPreview) ...[ - const EmailReplyOptions(), - ], + if (!widget.isPreview) ...[const EmailReplyOptions()], ], ), ); @@ -243,71 +245,76 @@ class _EmailHeadlineState extends State { @override Widget build(BuildContext context) { - return LayoutBuilder(builder: (context, constraints) { - return Container( - height: 84, - color: Color.alphaBlend( - _colorScheme.primary.withAlpha(12), - _colorScheme.surface, - ), - child: Padding( - padding: const EdgeInsets.fromLTRB(24, 12, 12, 12), - child: Row( - mainAxisSize: MainAxisSize.max, - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - Expanded( - child: Column( - mainAxisSize: MainAxisSize.min, - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text( - widget.email.subject, - maxLines: 1, - overflow: TextOverflow.fade, - style: const TextStyle( - fontSize: 18, fontWeight: FontWeight.w400), - ), - Text( - '${widget.email.replies.toString()} Messages', - maxLines: 1, - overflow: TextOverflow.fade, - style: _textTheme.labelMedium - ?.copyWith(fontWeight: FontWeight.w500), - ), - ], - ), - ), - // Display a "condensed" version if the widget in the row are - // expected to overflow. - if (constraints.maxWidth - 200 > 0) ...[ - SizedBox( - height: 40, - width: 40, - child: FloatingActionButton( - onPressed: () {}, - elevation: 0, - backgroundColor: _colorScheme.surface, - child: const Icon(Icons.delete_outline), + return LayoutBuilder( + builder: (context, constraints) { + return Container( + height: 84, + color: Color.alphaBlend( + _colorScheme.primary.withAlpha(12), + _colorScheme.surface, + ), + child: Padding( + padding: const EdgeInsets.fromLTRB(24, 12, 12, 12), + child: Row( + mainAxisSize: MainAxisSize.max, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Expanded( + child: Column( + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + widget.email.subject, + maxLines: 1, + overflow: TextOverflow.fade, + style: const TextStyle( + fontSize: 18, + fontWeight: FontWeight.w400, + ), + ), + Text( + '${widget.email.replies.toString()} Messages', + maxLines: 1, + overflow: TextOverflow.fade, + style: _textTheme.labelMedium?.copyWith( + fontWeight: FontWeight.w500, + ), + ), + ], ), ), - const Padding(padding: EdgeInsets.only(right: 8.0)), - SizedBox( - height: 40, - width: 40, - child: FloatingActionButton( - onPressed: () {}, - elevation: 0, - backgroundColor: _colorScheme.surface, - child: const Icon(Icons.more_vert), + // Display a "condensed" version if the widget in the row are + // expected to overflow. + if (constraints.maxWidth - 200 > 0) ...[ + SizedBox( + height: 40, + width: 40, + child: FloatingActionButton( + onPressed: () {}, + elevation: 0, + backgroundColor: _colorScheme.surface, + child: const Icon(Icons.delete_outline), + ), ), - ), - ] - ], + const Padding(padding: EdgeInsets.only(right: 8.0)), + SizedBox( + height: 40, + width: 40, + child: FloatingActionButton( + onPressed: () {}, + elevation: 0, + backgroundColor: _colorScheme.surface, + child: const Icon(Icons.more_vert), + ), + ), + ], + ], + ), ), - ), - ); - }); + ); + }, + ); } } @@ -333,8 +340,9 @@ class _EmailReplyOptionsState extends State { Expanded( child: TextButton( style: ButtonStyle( - backgroundColor: - WidgetStateProperty.all(_colorScheme.onInverseSurface), + backgroundColor: WidgetStateProperty.all( + _colorScheme.onInverseSurface, + ), ), onPressed: () {}, child: Text( @@ -347,8 +355,9 @@ class _EmailReplyOptionsState extends State { Expanded( child: TextButton( style: ButtonStyle( - backgroundColor: - WidgetStateProperty.all(_colorScheme.onInverseSurface), + backgroundColor: WidgetStateProperty.all( + _colorScheme.onInverseSurface, + ), ), onPressed: () {}, child: Text( diff --git a/animated-responsive-layout/step_07/lib/widgets/search_bar.dart b/animated-responsive-layout/step_07/lib/widgets/search_bar.dart index 28a15c3ef0..92d91750c6 100644 --- a/animated-responsive-layout/step_07/lib/widgets/search_bar.dart +++ b/animated-responsive-layout/step_07/lib/widgets/search_bar.dart @@ -7,10 +7,7 @@ import 'package:flutter/material.dart'; import '../models/models.dart'; class SearchBar extends StatelessWidget { - const SearchBar({ - super.key, - required this.currentUser, - }); + const SearchBar({super.key, required this.currentUser}); final User currentUser; @@ -40,9 +37,7 @@ class SearchBar extends StatelessWidget { ), ), ), - CircleAvatar( - backgroundImage: AssetImage(currentUser.avatarUrl), - ), + CircleAvatar(backgroundImage: AssetImage(currentUser.avatarUrl)), ], ), ), diff --git a/animated-responsive-layout/step_07/lib/widgets/star_button.dart b/animated-responsive-layout/step_07/lib/widgets/star_button.dart index 95c1c79ee2..441c83570f 100644 --- a/animated-responsive-layout/step_07/lib/widgets/star_button.dart +++ b/animated-responsive-layout/step_07/lib/widgets/star_button.dart @@ -18,11 +18,7 @@ class _StarButtonState extends State { Icon get icon { final IconData iconData = state ? Icons.star : Icons.star_outline; - return Icon( - iconData, - color: Colors.grey, - size: 20, - ); + return Icon(iconData, color: Colors.grey, size: 20); } void _toggle() { @@ -44,10 +40,7 @@ class _StarButtonState extends State { shape: const CircleBorder(), backgroundColor: _colorScheme.surface, onPressed: () => _toggle(), - child: Padding( - padding: const EdgeInsets.all(10.0), - child: icon, - ), + child: Padding(padding: const EdgeInsets.all(10.0), child: icon), ), ); } diff --git a/animated-responsive-layout/step_07/pubspec.yaml b/animated-responsive-layout/step_07/pubspec.yaml index f69a77e63c..51fe30860f 100644 --- a/animated-responsive-layout/step_07/pubspec.yaml +++ b/animated-responsive-layout/step_07/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: 'none' version: 0.1.0 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 dependencies: flutter: diff --git a/animated-responsive-layout/step_08/lib/animations.dart b/animated-responsive-layout/step_08/lib/animations.dart index aa48363aaf..41650c1c3c 100644 --- a/animated-responsive-layout/step_08/lib/animations.dart +++ b/animated-responsive-layout/step_08/lib/animations.dart @@ -6,85 +6,83 @@ import 'package:flutter/animation.dart'; class BarAnimation extends ReverseAnimation { BarAnimation({required AnimationController parent}) - : super( - CurvedAnimation( - parent: parent, - curve: const Interval(0, 1 / 5), - reverseCurve: const Interval(1 / 5, 4 / 5), - ), - ); + : super( + CurvedAnimation( + parent: parent, + curve: const Interval(0, 1 / 5), + reverseCurve: const Interval(1 / 5, 4 / 5), + ), + ); } class OffsetAnimation extends CurvedAnimation { OffsetAnimation({required super.parent}) - : super( - curve: const Interval( - 2 / 5, - 3 / 5, - curve: Curves.easeInOutCubicEmphasized, - ), - reverseCurve: Interval( - 4 / 5, - 1, - curve: Curves.easeInOutCubicEmphasized.flipped, - ), - ); + : super( + curve: const Interval( + 2 / 5, + 3 / 5, + curve: Curves.easeInOutCubicEmphasized, + ), + reverseCurve: Interval( + 4 / 5, + 1, + curve: Curves.easeInOutCubicEmphasized.flipped, + ), + ); } class RailAnimation extends CurvedAnimation { RailAnimation({required super.parent}) - : super( - curve: const Interval(0 / 5, 4 / 5), - reverseCurve: const Interval(3 / 5, 1), - ); + : super( + curve: const Interval(0 / 5, 4 / 5), + reverseCurve: const Interval(3 / 5, 1), + ); } class RailFabAnimation extends CurvedAnimation { RailFabAnimation({required super.parent}) - : super( - curve: const Interval(3 / 5, 1), - ); + : super(curve: const Interval(3 / 5, 1)); } class ScaleAnimation extends CurvedAnimation { ScaleAnimation({required super.parent}) - : super( - curve: const Interval( - 3 / 5, - 4 / 5, - curve: Curves.easeInOutCubicEmphasized, - ), - reverseCurve: Interval( - 3 / 5, - 1, - curve: Curves.easeInOutCubicEmphasized.flipped, - ), - ); + : super( + curve: const Interval( + 3 / 5, + 4 / 5, + curve: Curves.easeInOutCubicEmphasized, + ), + reverseCurve: Interval( + 3 / 5, + 1, + curve: Curves.easeInOutCubicEmphasized.flipped, + ), + ); } class ShapeAnimation extends CurvedAnimation { ShapeAnimation({required super.parent}) - : super( - curve: const Interval( - 2 / 5, - 3 / 5, - curve: Curves.easeInOutCubicEmphasized, - ), - ); + : super( + curve: const Interval( + 2 / 5, + 3 / 5, + curve: Curves.easeInOutCubicEmphasized, + ), + ); } class SizeAnimation extends CurvedAnimation { SizeAnimation({required super.parent}) - : super( - curve: const Interval( - 0 / 5, - 3 / 5, - curve: Curves.easeInOutCubicEmphasized, - ), - reverseCurve: Interval( - 2 / 5, - 1, - curve: Curves.easeInOutCubicEmphasized.flipped, - ), - ); + : super( + curve: const Interval( + 0 / 5, + 3 / 5, + curve: Curves.easeInOutCubicEmphasized, + ), + reverseCurve: Interval( + 2 / 5, + 1, + curve: Curves.easeInOutCubicEmphasized.flipped, + ), + ); } diff --git a/animated-responsive-layout/step_08/lib/main.dart b/animated-responsive-layout/step_08/lib/main.dart index 5209447cd8..e58bccd2ad 100644 --- a/animated-responsive-layout/step_08/lib/main.dart +++ b/animated-responsive-layout/step_08/lib/main.dart @@ -31,10 +31,7 @@ class MainApp extends StatelessWidget { } class Feed extends StatefulWidget { - const Feed({ - super.key, - required this.currentUser, - }); + const Feed({super.key, required this.currentUser}); final User currentUser; @@ -45,12 +42,15 @@ class Feed extends StatefulWidget { class _FeedState extends State with SingleTickerProviderStateMixin { late final _colorScheme = Theme.of(context).colorScheme; late final _backgroundColor = Color.alphaBlend( - _colorScheme.primary.withAlpha(36), _colorScheme.surface); + _colorScheme.primary.withAlpha(36), + _colorScheme.surface, + ); late final _controller = AnimationController( - duration: const Duration(milliseconds: 1000), - reverseDuration: const Duration(milliseconds: 1250), - value: 0, - vsync: this); + duration: const Duration(milliseconds: 1000), + reverseDuration: const Duration(milliseconds: 1250), + value: 0, + vsync: this, + ); late final _railAnimation = RailAnimation(parent: _controller); late final _railFabAnimation = RailFabAnimation(parent: _controller); late final _barAnimation = BarAnimation(parent: _controller); diff --git a/animated-responsive-layout/step_08/lib/models/data.dart b/animated-responsive-layout/step_08/lib/models/data.dart index 141ce9d588..097304290b 100644 --- a/animated-responsive-layout/step_08/lib/models/data.dart +++ b/animated-responsive-layout/step_08/lib/models/data.dart @@ -5,25 +5,30 @@ import 'models.dart'; final User user_0 = User( - name: const Name(first: 'Me', last: ''), - avatarUrl: 'assets/avatar_1.png', - lastActive: DateTime.now()); + name: const Name(first: 'Me', last: ''), + avatarUrl: 'assets/avatar_1.png', + lastActive: DateTime.now(), +); final User user_1 = User( - name: const Name(first: '老', last: '强'), - avatarUrl: 'assets/avatar_2.png', - lastActive: DateTime.now().subtract(const Duration(minutes: 10))); + name: const Name(first: '老', last: '强'), + avatarUrl: 'assets/avatar_2.png', + lastActive: DateTime.now().subtract(const Duration(minutes: 10)), +); final User user_2 = User( - name: const Name(first: 'So', last: 'Duri'), - avatarUrl: 'assets/avatar_3.png', - lastActive: DateTime.now().subtract(const Duration(minutes: 20))); + name: const Name(first: 'So', last: 'Duri'), + avatarUrl: 'assets/avatar_3.png', + lastActive: DateTime.now().subtract(const Duration(minutes: 20)), +); final User user_3 = User( - name: const Name(first: 'Lily', last: 'MacDonald'), - avatarUrl: 'assets/avatar_4.png', - lastActive: DateTime.now().subtract(const Duration(hours: 2))); + name: const Name(first: 'Lily', last: 'MacDonald'), + avatarUrl: 'assets/avatar_4.png', + lastActive: DateTime.now().subtract(const Duration(hours: 2)), +); final User user_4 = User( - name: const Name(first: 'Ziad', last: 'Aouad'), - avatarUrl: 'assets/avatar_5.png', - lastActive: DateTime.now().subtract(const Duration(hours: 6))); + name: const Name(first: 'Ziad', last: 'Aouad'), + avatarUrl: 'assets/avatar_5.png', + lastActive: DateTime.now().subtract(const Duration(hours: 6)), +); final List emails = [ Email( @@ -40,12 +45,13 @@ final List emails = [ 'I think it’s time for us to finally try that new noodle shop downtown that doesn’t use menus. Anyone else have other suggestions for dinner club this week? I’m so intrigued by this idea of a noodle restaurant where no one gets to order for themselves - could be fun, or terrible, or both :)\n\nSo', ), Email( - sender: user_3, - recipients: [], - subject: 'This food show is made for you', - content: - 'Ping– you’d love this new food show I started watching. It’s produced by a Thai drummer who started getting recognized for the amazing vegan food she always brought to shows.', - attachments: [const Attachment(url: 'assets/thumbnail_1.png')]), + sender: user_3, + recipients: [], + subject: 'This food show is made for you', + content: + 'Ping– you’d love this new food show I started watching. It’s produced by a Thai drummer who started getting recognized for the amazing vegan food she always brought to shows.', + attachments: [const Attachment(url: 'assets/thumbnail_1.png')], + ), Email( sender: user_4, recipients: [], @@ -58,20 +64,14 @@ final List emails = [ final List replies = [ Email( sender: user_2, - recipients: [ - user_3, - user_2, - ], + recipients: [user_3, user_2], subject: 'Dinner Club', content: 'I think it’s time for us to finally try that new noodle shop downtown that doesn’t use menus. Anyone else have other suggestions for dinner club this week? I’m so intrigued by this idea of a noodle restaurant where no one gets to order for themselves - could be fun, or terrible, or both :)\n\nSo', ), Email( sender: user_0, - recipients: [ - user_3, - user_2, - ], + recipients: [user_3, user_2], subject: 'Dinner Club', content: 'Yes! I forgot about that place! I’m definitely up for taking a risk this week and handing control over to this mysterious noodle chef. I wonder what happens if you have allergies though? Lucky none of us have any otherwise I’d be a bit concerned.\n\nThis is going to be great. See you all at the usual time?', diff --git a/animated-responsive-layout/step_08/lib/models/models.dart b/animated-responsive-layout/step_08/lib/models/models.dart index c6fe69e010..6b1f3d95d6 100644 --- a/animated-responsive-layout/step_08/lib/models/models.dart +++ b/animated-responsive-layout/step_08/lib/models/models.dart @@ -3,9 +3,7 @@ // found in the LICENSE file. class Attachment { - const Attachment({ - required this.url, - }); + const Attachment({required this.url}); final String url; } @@ -29,10 +27,7 @@ class Email { } class Name { - const Name({ - required this.first, - required this.last, - }); + const Name({required this.first, required this.last}); final String first; final String last; diff --git a/animated-responsive-layout/step_08/lib/transitions/bottom_bar_transition.dart b/animated-responsive-layout/step_08/lib/transitions/bottom_bar_transition.dart index 1fe9654d87..61dc6821a0 100644 --- a/animated-responsive-layout/step_08/lib/transitions/bottom_bar_transition.dart +++ b/animated-responsive-layout/step_08/lib/transitions/bottom_bar_transition.dart @@ -6,11 +6,12 @@ import 'package:flutter/material.dart'; import '../animations.dart'; class BottomBarTransition extends StatefulWidget { - const BottomBarTransition( - {super.key, - required this.animation, - required this.backgroundColor, - required this.child}); + const BottomBarTransition({ + super.key, + required this.animation, + required this.backgroundColor, + required this.child, + }); final Animation animation; final Color backgroundColor; diff --git a/animated-responsive-layout/step_08/lib/transitions/list_detail_transition.dart b/animated-responsive-layout/step_08/lib/transitions/list_detail_transition.dart index e2f3748b89..92707c2f0c 100644 --- a/animated-responsive-layout/step_08/lib/transitions/list_detail_transition.dart +++ b/animated-responsive-layout/step_08/lib/transitions/list_detail_transition.dart @@ -25,8 +25,9 @@ class ListDetailTransition extends StatefulWidget { class _ListDetailTransitionState extends State { Animation widthAnimation = const AlwaysStoppedAnimation(0); - late final Animation sizeAnimation = - SizeAnimation(parent: widget.animation); + late final Animation sizeAnimation = SizeAnimation( + parent: widget.animation, + ); late final Animation offsetAnimation = Tween( begin: const Offset(1, 0), end: Offset.zero, @@ -56,8 +57,10 @@ class _ListDetailTransitionState extends State { } if (currentFlexFactor == 0) { - widthAnimation = - Tween(begin: 0, end: nextFlexFactor).animate(sizeAnimation); + widthAnimation = Tween( + begin: 0, + end: nextFlexFactor, + ).animate(sizeAnimation); } else { final TweenSequence sequence = TweenSequence([ if (sizeAnimation.value > 0) ...[ @@ -85,19 +88,16 @@ class _ListDetailTransitionState extends State { return widthAnimation.value.toInt() == 0 ? widget.one : Row( - children: [ - Flexible( - flex: 1000, - child: widget.one, + children: [ + Flexible(flex: 1000, child: widget.one), + Flexible( + flex: widthAnimation.value.toInt(), + child: FractionalTranslation( + translation: offsetAnimation.value, + child: widget.two, ), - Flexible( - flex: widthAnimation.value.toInt(), - child: FractionalTranslation( - translation: offsetAnimation.value, - child: widget.two, - ), - ), - ], - ); + ), + ], + ); } } diff --git a/animated-responsive-layout/step_08/lib/transitions/nav_rail_transition.dart b/animated-responsive-layout/step_08/lib/transitions/nav_rail_transition.dart index 36d06eb4b7..f1d83bb3cd 100644 --- a/animated-responsive-layout/step_08/lib/transitions/nav_rail_transition.dart +++ b/animated-responsive-layout/step_08/lib/transitions/nav_rail_transition.dart @@ -6,11 +6,12 @@ import 'package:flutter/material.dart'; import '../animations.dart'; class NavRailTransition extends StatefulWidget { - const NavRailTransition( - {super.key, - required this.animation, - required this.backgroundColor, - required this.child}); + const NavRailTransition({ + super.key, + required this.animation, + required this.backgroundColor, + required this.child, + }); final Animation animation; final Widget child; diff --git a/animated-responsive-layout/step_08/lib/widgets/animated_floating_action_button.dart b/animated-responsive-layout/step_08/lib/widgets/animated_floating_action_button.dart index e0fa168644..6d50e95dd0 100644 --- a/animated-responsive-layout/step_08/lib/widgets/animated_floating_action_button.dart +++ b/animated-responsive-layout/step_08/lib/widgets/animated_floating_action_button.dart @@ -29,10 +29,12 @@ class AnimatedFloatingActionButton extends StatefulWidget { class _AnimatedFloatingActionButton extends State { late final ColorScheme _colorScheme = Theme.of(context).colorScheme; - late final Animation _scaleAnimation = - ScaleAnimation(parent: widget.animation); - late final Animation _shapeAnimation = - ShapeAnimation(parent: widget.animation); + late final Animation _scaleAnimation = ScaleAnimation( + parent: widget.animation, + ); + late final Animation _shapeAnimation = ShapeAnimation( + parent: widget.animation, + ); @override Widget build(BuildContext context) { diff --git a/animated-responsive-layout/step_08/lib/widgets/disappearing_bottom_navigation_bar.dart b/animated-responsive-layout/step_08/lib/widgets/disappearing_bottom_navigation_bar.dart index 059e4afb63..7108dbfaea 100644 --- a/animated-responsive-layout/step_08/lib/widgets/disappearing_bottom_navigation_bar.dart +++ b/animated-responsive-layout/step_08/lib/widgets/disappearing_bottom_navigation_bar.dart @@ -28,12 +28,10 @@ class DisappearingBottomNavigationBar extends StatelessWidget { child: NavigationBar( elevation: 0, backgroundColor: Colors.white, - destinations: destinations.map((d) { - return NavigationDestination( - icon: Icon(d.icon), - label: d.label, - ); - }).toList(), + destinations: + destinations.map((d) { + return NavigationDestination(icon: Icon(d.icon), label: d.label); + }).toList(), selectedIndex: selectedIndex, onDestinationSelected: onDestinationSelected, ), diff --git a/animated-responsive-layout/step_08/lib/widgets/disappearing_navigation_rail.dart b/animated-responsive-layout/step_08/lib/widgets/disappearing_navigation_rail.dart index 9f1446ca98..2a586bbaff 100644 --- a/animated-responsive-layout/step_08/lib/widgets/disappearing_navigation_rail.dart +++ b/animated-responsive-layout/step_08/lib/widgets/disappearing_navigation_rail.dart @@ -36,10 +36,7 @@ class DisappearingNavigationRail extends StatelessWidget { onDestinationSelected: onDestinationSelected, leading: Column( children: [ - IconButton( - onPressed: () {}, - icon: const Icon(Icons.menu), - ), + IconButton(onPressed: () {}, icon: const Icon(Icons.menu)), const SizedBox(height: 8), AnimatedFloatingActionButton( animation: railFabAnimation, @@ -50,12 +47,13 @@ class DisappearingNavigationRail extends StatelessWidget { ], ), groupAlignment: -0.85, - destinations: destinations.map((d) { - return NavigationRailDestination( - icon: Icon(d.icon), - label: Text(d.label), - ); - }).toList(), + destinations: + destinations.map((d) { + return NavigationRailDestination( + icon: Icon(d.icon), + label: Text(d.label), + ); + }).toList(), ), ); } diff --git a/animated-responsive-layout/step_08/lib/widgets/email_list_view.dart b/animated-responsive-layout/step_08/lib/widgets/email_list_view.dart index 881cd434c1..38a751af1c 100644 --- a/animated-responsive-layout/step_08/lib/widgets/email_list_view.dart +++ b/animated-responsive-layout/step_08/lib/widgets/email_list_view.dart @@ -30,23 +30,21 @@ class EmailListView extends StatelessWidget { const SizedBox(height: 8), search_bar.SearchBar(currentUser: currentUser), const SizedBox(height: 8), - ...List.generate( - data.emails.length, - (index) { - return Padding( - padding: const EdgeInsets.only(bottom: 8.0), - child: EmailWidget( - email: data.emails[index], - onSelected: onSelected != null - ? () { + ...List.generate(data.emails.length, (index) { + return Padding( + padding: const EdgeInsets.only(bottom: 8.0), + child: EmailWidget( + email: data.emails[index], + onSelected: + onSelected != null + ? () { onSelected!(index); } - : null, - isSelected: selectedIndex == index, - ), - ); - }, - ), + : null, + isSelected: selectedIndex == index, + ), + ); + }), ], ), ); diff --git a/animated-responsive-layout/step_08/lib/widgets/email_widget.dart b/animated-responsive-layout/step_08/lib/widgets/email_widget.dart index cb317686d6..8e37f4d8bc 100644 --- a/animated-responsive-layout/step_08/lib/widgets/email_widget.dart +++ b/animated-responsive-layout/step_08/lib/widgets/email_widget.dart @@ -6,11 +6,7 @@ import 'package:flutter/material.dart'; import '../models/models.dart'; import 'star_button.dart'; -enum EmailType { - preview, - threaded, - primaryThreaded, -} +enum EmailType { preview, threaded, primaryThreaded } class EmailWidget extends StatefulWidget { const EmailWidget({ @@ -42,10 +38,10 @@ class _EmailWidgetState extends State { ); Color get _surfaceColor => switch (widget) { - EmailWidget(isPreview: false) => _colorScheme.surface, - EmailWidget(isSelected: true) => _colorScheme.primaryContainer, - _ => unselectedColor, - }; + EmailWidget(isPreview: false) => _colorScheme.surface, + EmailWidget(isSelected: true) => _colorScheme.primaryContainer, + _ => unselectedColor, + }; @override Widget build(BuildContext context) { @@ -60,10 +56,7 @@ class _EmailWidgetState extends State { mainAxisSize: MainAxisSize.min, children: [ if (widget.showHeadline) ...[ - EmailHeadline( - email: widget.email, - isSelected: widget.isSelected, - ), + EmailHeadline(email: widget.email, isSelected: widget.isSelected), ], EmailContent( email: widget.email, @@ -117,12 +110,12 @@ class _EmailContentState extends State { } TextStyle? get contentTextStyle => switch (widget) { - EmailContent(isThreaded: true) => _textTheme.bodyLarge, - EmailContent(isSelected: true) => _textTheme.bodyMedium - ?.copyWith(color: _colorScheme.onPrimaryContainer), - _ => - _textTheme.bodyMedium?.copyWith(color: _colorScheme.onSurfaceVariant), - }; + EmailContent(isThreaded: true) => _textTheme.bodyLarge, + EmailContent(isSelected: true) => _textTheme.bodyMedium?.copyWith( + color: _colorScheme.onPrimaryContainer, + ), + _ => _textTheme.bodyMedium?.copyWith(color: _colorScheme.onSurfaceVariant), + }; @override Widget build(BuildContext context) { @@ -131,49 +124,59 @@ class _EmailContentState extends State { child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - LayoutBuilder(builder: (context, constraints) { - return Row( - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - if (constraints.maxWidth - 200 > 0) ...[ - CircleAvatar( - backgroundImage: AssetImage(widget.email.sender.avatarUrl), - ), - const Padding(padding: EdgeInsets.symmetric(horizontal: 6.0)), - ], - Expanded( - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text( - widget.email.sender.name.fullName, - overflow: TextOverflow.fade, - maxLines: 1, - style: widget.isSelected - ? _textTheme.labelMedium?.copyWith( - color: _colorScheme.onSecondaryContainer) - : _textTheme.labelMedium - ?.copyWith(color: _colorScheme.onSurface), - ), - Text( - lastActiveLabel, - overflow: TextOverflow.fade, - maxLines: 1, - style: widget.isSelected - ? _textTheme.labelMedium?.copyWith( - color: _colorScheme.onSecondaryContainer) - : _textTheme.labelMedium?.copyWith( - color: _colorScheme.onSurfaceVariant), + LayoutBuilder( + builder: (context, constraints) { + return Row( + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + if (constraints.maxWidth - 200 > 0) ...[ + CircleAvatar( + backgroundImage: AssetImage( + widget.email.sender.avatarUrl, ), - ], + ), + const Padding( + padding: EdgeInsets.symmetric(horizontal: 6.0), + ), + ], + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + widget.email.sender.name.fullName, + overflow: TextOverflow.fade, + maxLines: 1, + style: + widget.isSelected + ? _textTheme.labelMedium?.copyWith( + color: _colorScheme.onSecondaryContainer, + ) + : _textTheme.labelMedium?.copyWith( + color: _colorScheme.onSurface, + ), + ), + Text( + lastActiveLabel, + overflow: TextOverflow.fade, + maxLines: 1, + style: + widget.isSelected + ? _textTheme.labelMedium?.copyWith( + color: _colorScheme.onSecondaryContainer, + ) + : _textTheme.labelMedium?.copyWith( + color: _colorScheme.onSurfaceVariant, + ), + ), + ], + ), ), - ), - if (constraints.maxWidth - 200 > 0) ...[ - const StarButton(), - ] - ], - ); - }), + if (constraints.maxWidth - 200 > 0) ...[const StarButton()], + ], + ); + }, + ), const SizedBox(width: 8), Column( crossAxisAlignment: CrossAxisAlignment.start, @@ -181,8 +184,9 @@ class _EmailContentState extends State { if (widget.isPreview) ...[ Text( widget.email.subject, - style: const TextStyle(fontSize: 18) - .copyWith(color: _colorScheme.onSurface), + style: const TextStyle( + fontSize: 18, + ).copyWith(color: _colorScheme.onSurface), ), ], if (widget.isThreaded) ...[ @@ -190,7 +194,7 @@ class _EmailContentState extends State { Text( "To ${widget.email.recipients.map((recipient) => recipient.name.first).join(", ")}", style: _textTheme.bodyMedium, - ) + ), ], contentSpacer, Text( @@ -204,19 +208,17 @@ class _EmailContentState extends State { const SizedBox(width: 12), widget.email.attachments.isNotEmpty ? Container( - height: 96, - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(8.0), - image: DecorationImage( - fit: BoxFit.cover, - image: AssetImage(widget.email.attachments.first.url), - ), + height: 96, + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(8.0), + image: DecorationImage( + fit: BoxFit.cover, + image: AssetImage(widget.email.attachments.first.url), ), - ) + ), + ) : const SizedBox.shrink(), - if (!widget.isPreview) ...[ - const EmailReplyOptions(), - ], + if (!widget.isPreview) ...[const EmailReplyOptions()], ], ), ); @@ -243,71 +245,76 @@ class _EmailHeadlineState extends State { @override Widget build(BuildContext context) { - return LayoutBuilder(builder: (context, constraints) { - return Container( - height: 84, - color: Color.alphaBlend( - _colorScheme.primary.withAlpha(12), - _colorScheme.surface, - ), - child: Padding( - padding: const EdgeInsets.fromLTRB(24, 12, 12, 12), - child: Row( - mainAxisSize: MainAxisSize.max, - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - Expanded( - child: Column( - mainAxisSize: MainAxisSize.min, - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text( - widget.email.subject, - maxLines: 1, - overflow: TextOverflow.fade, - style: const TextStyle( - fontSize: 18, fontWeight: FontWeight.w400), - ), - Text( - '${widget.email.replies.toString()} Messages', - maxLines: 1, - overflow: TextOverflow.fade, - style: _textTheme.labelMedium - ?.copyWith(fontWeight: FontWeight.w500), - ), - ], - ), - ), - // Display a "condensed" version if the widget in the row are - // expected to overflow. - if (constraints.maxWidth - 200 > 0) ...[ - SizedBox( - height: 40, - width: 40, - child: FloatingActionButton( - onPressed: () {}, - elevation: 0, - backgroundColor: _colorScheme.surface, - child: const Icon(Icons.delete_outline), + return LayoutBuilder( + builder: (context, constraints) { + return Container( + height: 84, + color: Color.alphaBlend( + _colorScheme.primary.withAlpha(12), + _colorScheme.surface, + ), + child: Padding( + padding: const EdgeInsets.fromLTRB(24, 12, 12, 12), + child: Row( + mainAxisSize: MainAxisSize.max, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Expanded( + child: Column( + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + widget.email.subject, + maxLines: 1, + overflow: TextOverflow.fade, + style: const TextStyle( + fontSize: 18, + fontWeight: FontWeight.w400, + ), + ), + Text( + '${widget.email.replies.toString()} Messages', + maxLines: 1, + overflow: TextOverflow.fade, + style: _textTheme.labelMedium?.copyWith( + fontWeight: FontWeight.w500, + ), + ), + ], ), ), - const Padding(padding: EdgeInsets.only(right: 8.0)), - SizedBox( - height: 40, - width: 40, - child: FloatingActionButton( - onPressed: () {}, - elevation: 0, - backgroundColor: _colorScheme.surface, - child: const Icon(Icons.more_vert), + // Display a "condensed" version if the widget in the row are + // expected to overflow. + if (constraints.maxWidth - 200 > 0) ...[ + SizedBox( + height: 40, + width: 40, + child: FloatingActionButton( + onPressed: () {}, + elevation: 0, + backgroundColor: _colorScheme.surface, + child: const Icon(Icons.delete_outline), + ), ), - ), - ] - ], + const Padding(padding: EdgeInsets.only(right: 8.0)), + SizedBox( + height: 40, + width: 40, + child: FloatingActionButton( + onPressed: () {}, + elevation: 0, + backgroundColor: _colorScheme.surface, + child: const Icon(Icons.more_vert), + ), + ), + ], + ], + ), ), - ), - ); - }); + ); + }, + ); } } @@ -333,8 +340,9 @@ class _EmailReplyOptionsState extends State { Expanded( child: TextButton( style: ButtonStyle( - backgroundColor: - WidgetStateProperty.all(_colorScheme.onInverseSurface), + backgroundColor: WidgetStateProperty.all( + _colorScheme.onInverseSurface, + ), ), onPressed: () {}, child: Text( @@ -347,8 +355,9 @@ class _EmailReplyOptionsState extends State { Expanded( child: TextButton( style: ButtonStyle( - backgroundColor: - WidgetStateProperty.all(_colorScheme.onInverseSurface), + backgroundColor: WidgetStateProperty.all( + _colorScheme.onInverseSurface, + ), ), onPressed: () {}, child: Text( diff --git a/animated-responsive-layout/step_08/lib/widgets/search_bar.dart b/animated-responsive-layout/step_08/lib/widgets/search_bar.dart index 28a15c3ef0..92d91750c6 100644 --- a/animated-responsive-layout/step_08/lib/widgets/search_bar.dart +++ b/animated-responsive-layout/step_08/lib/widgets/search_bar.dart @@ -7,10 +7,7 @@ import 'package:flutter/material.dart'; import '../models/models.dart'; class SearchBar extends StatelessWidget { - const SearchBar({ - super.key, - required this.currentUser, - }); + const SearchBar({super.key, required this.currentUser}); final User currentUser; @@ -40,9 +37,7 @@ class SearchBar extends StatelessWidget { ), ), ), - CircleAvatar( - backgroundImage: AssetImage(currentUser.avatarUrl), - ), + CircleAvatar(backgroundImage: AssetImage(currentUser.avatarUrl)), ], ), ), diff --git a/animated-responsive-layout/step_08/lib/widgets/star_button.dart b/animated-responsive-layout/step_08/lib/widgets/star_button.dart index 95c1c79ee2..441c83570f 100644 --- a/animated-responsive-layout/step_08/lib/widgets/star_button.dart +++ b/animated-responsive-layout/step_08/lib/widgets/star_button.dart @@ -18,11 +18,7 @@ class _StarButtonState extends State { Icon get icon { final IconData iconData = state ? Icons.star : Icons.star_outline; - return Icon( - iconData, - color: Colors.grey, - size: 20, - ); + return Icon(iconData, color: Colors.grey, size: 20); } void _toggle() { @@ -44,10 +40,7 @@ class _StarButtonState extends State { shape: const CircleBorder(), backgroundColor: _colorScheme.surface, onPressed: () => _toggle(), - child: Padding( - padding: const EdgeInsets.all(10.0), - child: icon, - ), + child: Padding(padding: const EdgeInsets.all(10.0), child: icon), ), ); } diff --git a/animated-responsive-layout/step_08/pubspec.yaml b/animated-responsive-layout/step_08/pubspec.yaml index f69a77e63c..51fe30860f 100644 --- a/animated-responsive-layout/step_08/pubspec.yaml +++ b/animated-responsive-layout/step_08/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: 'none' version: 0.1.0 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 dependencies: flutter: diff --git a/animations/codelab_rebuild.yaml b/animations/codelab_rebuild.yaml index 2affda2eaa..19838302b1 100644 --- a/animations/codelab_rebuild.yaml +++ b/animations/codelab_rebuild.yaml @@ -20,7 +20,7 @@ steps: version: 1.0.0 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 dependencies: animations: ^2.0.0 diff --git a/animations/step_01/lib/home_screen.dart b/animations/step_01/lib/home_screen.dart index 2d2408d466..e5a6433c47 100644 --- a/animations/step_01/lib/home_screen.dart +++ b/animations/step_01/lib/home_screen.dart @@ -11,15 +11,13 @@ class HomeScreen extends StatelessWidget { child: Column( mainAxisSize: MainAxisSize.min, children: [ - Text( - '✏️', - style: Theme.of(context).textTheme.displayLarge, - ), + Text('✏️', style: Theme.of(context).textTheme.displayLarge), Text( 'Flutter Quiz', style: Theme.of(context).textTheme.displayLarge!.copyWith( - fontWeight: FontWeight.w700, - color: Theme.of(context).colorScheme.onPrimaryFixedVariant), + fontWeight: FontWeight.w700, + color: Theme.of(context).colorScheme.onPrimaryFixedVariant, + ), ), ElevatedButton( onPressed: () { diff --git a/animations/step_01/lib/model.dart b/animations/step_01/lib/model.dart index 0662327f52..56666d11dc 100644 --- a/animations/step_01/lib/model.dart +++ b/animations/step_01/lib/model.dart @@ -30,12 +30,7 @@ List _createQuestions() { return [ Question( 'What class used to create custom explicit animations in Flutter?', - [ - 'AnimationController', - 'AnimatedWidget', - 'AnimatedBuilder', - 'Tween', - ], + ['AnimationController', 'AnimatedWidget', 'AnimatedBuilder', 'Tween'], 0, ), Question( @@ -50,12 +45,7 @@ List _createQuestions() { ), Question( 'What class is used to define the start and end values for an animation?', - [ - 'Tween', - 'Curve', - 'AnimationController', - 'AnimatedWidget', - ], + ['Tween', 'Curve', 'AnimationController', 'AnimatedWidget'], 0, ), ]; diff --git a/animations/step_01/lib/question_screen.dart b/animations/step_01/lib/question_screen.dart index e5e90c5b42..d42be66a57 100644 --- a/animations/step_01/lib/question_screen.dart +++ b/animations/step_01/lib/question_screen.dart @@ -9,8 +9,9 @@ class QuestionScreen extends StatefulWidget { } class _QuestionScreenState extends State { - late final QuizViewModel viewModel = - QuizViewModel(onGameOver: _handleGameOver); + late final QuizViewModel viewModel = QuizViewModel( + onGameOver: _handleGameOver, + ); @override Widget build(BuildContext context) { @@ -24,11 +25,11 @@ class _QuestionScreenState extends State { onPressed: viewModel.hasNextQuestion && viewModel.didAnswerQuestion ? () { - viewModel.getNextQuestion(); - } + viewModel.getNextQuestion(); + } : null, child: const Text('Next'), - ) + ), ], ), body: Center( @@ -41,9 +42,10 @@ class _QuestionScreenState extends State { viewModel.checkAnswer(index); }, answers: viewModel.currentQuestion?.possibleAnswers ?? [], - correctAnswer: viewModel.didAnswerQuestion - ? viewModel.currentQuestion?.correctAnswer - : null, + correctAnswer: + viewModel.didAnswerQuestion + ? viewModel.currentQuestion?.correctAnswer + : null, ), StatusBar(viewModel: viewModel), ], @@ -79,10 +81,7 @@ class _QuestionScreenState extends State { class QuestionCard extends StatelessWidget { final String? question; - const QuestionCard({ - required this.question, - super.key, - }); + const QuestionCard({required this.question, super.key}); @override Widget build(BuildContext context) { diff --git a/animations/step_01/pubspec.yaml b/animations/step_01/pubspec.yaml index f3328a6945..d8e843d9c9 100644 --- a/animations/step_01/pubspec.yaml +++ b/animations/step_01/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: "none" version: 1.0.0 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 dependencies: animations: ^2.0.0 diff --git a/animations/step_02/lib/home_screen.dart b/animations/step_02/lib/home_screen.dart index 2d2408d466..e5a6433c47 100644 --- a/animations/step_02/lib/home_screen.dart +++ b/animations/step_02/lib/home_screen.dart @@ -11,15 +11,13 @@ class HomeScreen extends StatelessWidget { child: Column( mainAxisSize: MainAxisSize.min, children: [ - Text( - '✏️', - style: Theme.of(context).textTheme.displayLarge, - ), + Text('✏️', style: Theme.of(context).textTheme.displayLarge), Text( 'Flutter Quiz', style: Theme.of(context).textTheme.displayLarge!.copyWith( - fontWeight: FontWeight.w700, - color: Theme.of(context).colorScheme.onPrimaryFixedVariant), + fontWeight: FontWeight.w700, + color: Theme.of(context).colorScheme.onPrimaryFixedVariant, + ), ), ElevatedButton( onPressed: () { diff --git a/animations/step_02/lib/model.dart b/animations/step_02/lib/model.dart index 0662327f52..56666d11dc 100644 --- a/animations/step_02/lib/model.dart +++ b/animations/step_02/lib/model.dart @@ -30,12 +30,7 @@ List _createQuestions() { return [ Question( 'What class used to create custom explicit animations in Flutter?', - [ - 'AnimationController', - 'AnimatedWidget', - 'AnimatedBuilder', - 'Tween', - ], + ['AnimationController', 'AnimatedWidget', 'AnimatedBuilder', 'Tween'], 0, ), Question( @@ -50,12 +45,7 @@ List _createQuestions() { ), Question( 'What class is used to define the start and end values for an animation?', - [ - 'Tween', - 'Curve', - 'AnimationController', - 'AnimatedWidget', - ], + ['Tween', 'Curve', 'AnimationController', 'AnimatedWidget'], 0, ), ]; diff --git a/animations/step_02/lib/question_screen.dart b/animations/step_02/lib/question_screen.dart index 84541c918d..cbb77b5673 100644 --- a/animations/step_02/lib/question_screen.dart +++ b/animations/step_02/lib/question_screen.dart @@ -10,8 +10,9 @@ class QuestionScreen extends StatefulWidget { } class _QuestionScreenState extends State { - late final QuizViewModel viewModel = - QuizViewModel(onGameOver: _handleGameOver); + late final QuizViewModel viewModel = QuizViewModel( + onGameOver: _handleGameOver, + ); @override Widget build(BuildContext context) { @@ -25,11 +26,11 @@ class _QuestionScreenState extends State { onPressed: viewModel.hasNextQuestion && viewModel.didAnswerQuestion ? () { - viewModel.getNextQuestion(); - } + viewModel.getNextQuestion(); + } : null, child: const Text('Next'), - ) + ), ], ), body: Center( @@ -42,9 +43,10 @@ class _QuestionScreenState extends State { viewModel.checkAnswer(index); }, answers: viewModel.currentQuestion?.possibleAnswers ?? [], - correctAnswer: viewModel.didAnswerQuestion - ? viewModel.currentQuestion?.correctAnswer - : null, + correctAnswer: + viewModel.didAnswerQuestion + ? viewModel.currentQuestion?.correctAnswer + : null, ), StatusBar(viewModel: viewModel), ], @@ -80,10 +82,7 @@ class _QuestionScreenState extends State { class QuestionCard extends StatelessWidget { final String? question; - const QuestionCard({ - required this.question, - super.key, - }); + const QuestionCard({required this.question, super.key}); @override Widget build(BuildContext context) { diff --git a/animations/step_02/lib/scoreboard.dart b/animations/step_02/lib/scoreboard.dart index dd71080ba3..765711fe87 100644 --- a/animations/step_02/lib/scoreboard.dart +++ b/animations/step_02/lib/scoreboard.dart @@ -18,9 +18,7 @@ class Scoreboard extends StatelessWidget { mainAxisAlignment: MainAxisAlignment.center, children: [ for (var i = 0; i < totalQuestions; i++) - AnimatedStar( - isActive: score > i, - ) + AnimatedStar(isActive: score > i), ], ), ); @@ -50,11 +48,7 @@ class AnimatedStar extends StatelessWidget { end: isActive ? _activatedColor : _deactivatedColor, ), builder: (context, value, child) { - return Icon( - Icons.star, - size: 50, - color: value, - ); + return Icon(Icons.star, size: 50, color: value); }, ), ); diff --git a/animations/step_02/pubspec.yaml b/animations/step_02/pubspec.yaml index f3328a6945..d8e843d9c9 100644 --- a/animations/step_02/pubspec.yaml +++ b/animations/step_02/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: "none" version: 1.0.0 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 dependencies: animations: ^2.0.0 diff --git a/animations/step_03/lib/home_screen.dart b/animations/step_03/lib/home_screen.dart index 2d2408d466..e5a6433c47 100644 --- a/animations/step_03/lib/home_screen.dart +++ b/animations/step_03/lib/home_screen.dart @@ -11,15 +11,13 @@ class HomeScreen extends StatelessWidget { child: Column( mainAxisSize: MainAxisSize.min, children: [ - Text( - '✏️', - style: Theme.of(context).textTheme.displayLarge, - ), + Text('✏️', style: Theme.of(context).textTheme.displayLarge), Text( 'Flutter Quiz', style: Theme.of(context).textTheme.displayLarge!.copyWith( - fontWeight: FontWeight.w700, - color: Theme.of(context).colorScheme.onPrimaryFixedVariant), + fontWeight: FontWeight.w700, + color: Theme.of(context).colorScheme.onPrimaryFixedVariant, + ), ), ElevatedButton( onPressed: () { diff --git a/animations/step_03/lib/model.dart b/animations/step_03/lib/model.dart index 0662327f52..56666d11dc 100644 --- a/animations/step_03/lib/model.dart +++ b/animations/step_03/lib/model.dart @@ -30,12 +30,7 @@ List _createQuestions() { return [ Question( 'What class used to create custom explicit animations in Flutter?', - [ - 'AnimationController', - 'AnimatedWidget', - 'AnimatedBuilder', - 'Tween', - ], + ['AnimationController', 'AnimatedWidget', 'AnimatedBuilder', 'Tween'], 0, ), Question( @@ -50,12 +45,7 @@ List _createQuestions() { ), Question( 'What class is used to define the start and end values for an animation?', - [ - 'Tween', - 'Curve', - 'AnimationController', - 'AnimatedWidget', - ], + ['Tween', 'Curve', 'AnimationController', 'AnimatedWidget'], 0, ), ]; diff --git a/animations/step_03/lib/question_screen.dart b/animations/step_03/lib/question_screen.dart index a3f8e11e0f..4bda3d9b41 100644 --- a/animations/step_03/lib/question_screen.dart +++ b/animations/step_03/lib/question_screen.dart @@ -10,8 +10,9 @@ class QuestionScreen extends StatefulWidget { } class _QuestionScreenState extends State { - late final QuizViewModel viewModel = - QuizViewModel(onGameOver: _handleGameOver); + late final QuizViewModel viewModel = QuizViewModel( + onGameOver: _handleGameOver, + ); @override Widget build(BuildContext context) { @@ -25,11 +26,11 @@ class _QuestionScreenState extends State { onPressed: viewModel.hasNextQuestion && viewModel.didAnswerQuestion ? () { - viewModel.getNextQuestion(); - } + viewModel.getNextQuestion(); + } : null, child: const Text('Next'), - ) + ), ], ), body: Center( @@ -42,9 +43,10 @@ class _QuestionScreenState extends State { viewModel.checkAnswer(index); }, answers: viewModel.currentQuestion?.possibleAnswers ?? [], - correctAnswer: viewModel.didAnswerQuestion - ? viewModel.currentQuestion?.correctAnswer - : null, + correctAnswer: + viewModel.didAnswerQuestion + ? viewModel.currentQuestion?.correctAnswer + : null, ), StatusBar(viewModel: viewModel), ], @@ -80,10 +82,7 @@ class _QuestionScreenState extends State { class QuestionCard extends StatelessWidget { final String? question; - const QuestionCard({ - required this.question, - super.key, - }); + const QuestionCard({required this.question, super.key}); @override Widget build(BuildContext context) { @@ -98,11 +97,13 @@ class QuestionCard extends StatelessWidget { ); }, transitionBuilder: (Widget child, Animation animation) { - final curveAnimation = - CurveTween(curve: Curves.easeInCubic).animate(animation); - final offsetAnimation = - Tween(begin: Offset(-0.1, 0.0), end: Offset.zero) - .animate(curveAnimation); + final curveAnimation = CurveTween( + curve: Curves.easeInCubic, + ).animate(animation); + final offsetAnimation = Tween( + begin: Offset(-0.1, 0.0), + end: Offset.zero, + ).animate(curveAnimation); final fadeInAnimation = curveAnimation; return FadeTransition( opacity: fadeInAnimation, diff --git a/animations/step_03/lib/scoreboard.dart b/animations/step_03/lib/scoreboard.dart index dd71080ba3..765711fe87 100644 --- a/animations/step_03/lib/scoreboard.dart +++ b/animations/step_03/lib/scoreboard.dart @@ -18,9 +18,7 @@ class Scoreboard extends StatelessWidget { mainAxisAlignment: MainAxisAlignment.center, children: [ for (var i = 0; i < totalQuestions; i++) - AnimatedStar( - isActive: score > i, - ) + AnimatedStar(isActive: score > i), ], ), ); @@ -50,11 +48,7 @@ class AnimatedStar extends StatelessWidget { end: isActive ? _activatedColor : _deactivatedColor, ), builder: (context, value, child) { - return Icon( - Icons.star, - size: 50, - color: value, - ); + return Icon(Icons.star, size: 50, color: value); }, ), ); diff --git a/animations/step_03/pubspec.yaml b/animations/step_03/pubspec.yaml index f3328a6945..d8e843d9c9 100644 --- a/animations/step_03/pubspec.yaml +++ b/animations/step_03/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: "none" version: 1.0.0 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 dependencies: animations: ^2.0.0 diff --git a/animations/step_04/lib/flip_effect.dart b/animations/step_04/lib/flip_effect.dart index cafd21bece..953c479ae9 100644 --- a/animations/step_04/lib/flip_effect.dart +++ b/animations/step_04/lib/flip_effect.dart @@ -28,7 +28,9 @@ class _CardFlipEffectState extends State super.initState(); _animationController = AnimationController( - vsync: this, duration: widget.duration * (widget.delayAmount + 1)); + vsync: this, + duration: widget.duration * (widget.delayAmount + 1), + ); _animationController.addListener(() { if (_animationController.value == 1) { @@ -42,10 +44,7 @@ class _CardFlipEffectState extends State tween: ConstantTween(0.0), weight: widget.delayAmount, ), - TweenSequenceItem( - tween: Tween(begin: 0.0, end: 1.0), - weight: 1.0, - ), + TweenSequenceItem(tween: Tween(begin: 0.0, end: 1.0), weight: 1.0), ]).animate(_animationController); } @@ -70,13 +69,14 @@ class _CardFlipEffectState extends State builder: (context, child) { return Transform( alignment: Alignment.center, - transform: Matrix4.identity() - ..rotateX(_animationWithDelay.value * math.pi), - child: _animationController.isAnimating - ? _animationWithDelay.value < 0.5 - ? _previousChild - : Transform.flip(flipY: true, child: widget.child) - : widget.child, + transform: + Matrix4.identity()..rotateX(_animationWithDelay.value * math.pi), + child: + _animationController.isAnimating + ? _animationWithDelay.value < 0.5 + ? _previousChild + : Transform.flip(flipY: true, child: widget.child) + : widget.child, ); }, child: widget.child, diff --git a/animations/step_04/lib/home_screen.dart b/animations/step_04/lib/home_screen.dart index 2d2408d466..e5a6433c47 100644 --- a/animations/step_04/lib/home_screen.dart +++ b/animations/step_04/lib/home_screen.dart @@ -11,15 +11,13 @@ class HomeScreen extends StatelessWidget { child: Column( mainAxisSize: MainAxisSize.min, children: [ - Text( - '✏️', - style: Theme.of(context).textTheme.displayLarge, - ), + Text('✏️', style: Theme.of(context).textTheme.displayLarge), Text( 'Flutter Quiz', style: Theme.of(context).textTheme.displayLarge!.copyWith( - fontWeight: FontWeight.w700, - color: Theme.of(context).colorScheme.onPrimaryFixedVariant), + fontWeight: FontWeight.w700, + color: Theme.of(context).colorScheme.onPrimaryFixedVariant, + ), ), ElevatedButton( onPressed: () { diff --git a/animations/step_04/lib/model.dart b/animations/step_04/lib/model.dart index 0662327f52..56666d11dc 100644 --- a/animations/step_04/lib/model.dart +++ b/animations/step_04/lib/model.dart @@ -30,12 +30,7 @@ List _createQuestions() { return [ Question( 'What class used to create custom explicit animations in Flutter?', - [ - 'AnimationController', - 'AnimatedWidget', - 'AnimatedBuilder', - 'Tween', - ], + ['AnimationController', 'AnimatedWidget', 'AnimatedBuilder', 'Tween'], 0, ), Question( @@ -50,12 +45,7 @@ List _createQuestions() { ), Question( 'What class is used to define the start and end values for an animation?', - [ - 'Tween', - 'Curve', - 'AnimationController', - 'AnimatedWidget', - ], + ['Tween', 'Curve', 'AnimationController', 'AnimatedWidget'], 0, ), ]; diff --git a/animations/step_04/lib/question_screen.dart b/animations/step_04/lib/question_screen.dart index 36a4aeb4bf..9cce323aa7 100644 --- a/animations/step_04/lib/question_screen.dart +++ b/animations/step_04/lib/question_screen.dart @@ -11,8 +11,9 @@ class QuestionScreen extends StatefulWidget { } class _QuestionScreenState extends State { - late final QuizViewModel viewModel = - QuizViewModel(onGameOver: _handleGameOver); + late final QuizViewModel viewModel = QuizViewModel( + onGameOver: _handleGameOver, + ); @override Widget build(BuildContext context) { @@ -26,11 +27,11 @@ class _QuestionScreenState extends State { onPressed: viewModel.hasNextQuestion && viewModel.didAnswerQuestion ? () { - viewModel.getNextQuestion(); - } + viewModel.getNextQuestion(); + } : null, child: const Text('Next'), - ) + ), ], ), body: Center( @@ -43,9 +44,10 @@ class _QuestionScreenState extends State { viewModel.checkAnswer(index); }, answers: viewModel.currentQuestion?.possibleAnswers ?? [], - correctAnswer: viewModel.didAnswerQuestion - ? viewModel.currentQuestion?.correctAnswer - : null, + correctAnswer: + viewModel.didAnswerQuestion + ? viewModel.currentQuestion?.correctAnswer + : null, ), StatusBar(viewModel: viewModel), ], @@ -81,10 +83,7 @@ class _QuestionScreenState extends State { class QuestionCard extends StatelessWidget { final String? question; - const QuestionCard({ - required this.question, - super.key, - }); + const QuestionCard({required this.question, super.key}); @override Widget build(BuildContext context) { @@ -99,11 +98,13 @@ class QuestionCard extends StatelessWidget { ); }, transitionBuilder: (Widget child, Animation animation) { - final curveAnimation = - CurveTween(curve: Curves.easeInCubic).animate(animation); - final offsetAnimation = - Tween(begin: Offset(-0.1, 0.0), end: Offset.zero) - .animate(curveAnimation); + final curveAnimation = CurveTween( + curve: Curves.easeInCubic, + ).animate(animation); + final offsetAnimation = Tween( + begin: Offset(-0.1, 0.0), + end: Offset.zero, + ).animate(curveAnimation); final fadeInAnimation = curveAnimation; return FadeTransition( opacity: fadeInAnimation, diff --git a/animations/step_04/lib/scoreboard.dart b/animations/step_04/lib/scoreboard.dart index dd71080ba3..765711fe87 100644 --- a/animations/step_04/lib/scoreboard.dart +++ b/animations/step_04/lib/scoreboard.dart @@ -18,9 +18,7 @@ class Scoreboard extends StatelessWidget { mainAxisAlignment: MainAxisAlignment.center, children: [ for (var i = 0; i < totalQuestions; i++) - AnimatedStar( - isActive: score > i, - ) + AnimatedStar(isActive: score > i), ], ), ); @@ -50,11 +48,7 @@ class AnimatedStar extends StatelessWidget { end: isActive ? _activatedColor : _deactivatedColor, ), builder: (context, value, child) { - return Icon( - Icons.star, - size: 50, - color: value, - ); + return Icon(Icons.star, size: 50, color: value); }, ), ); diff --git a/animations/step_04/pubspec.yaml b/animations/step_04/pubspec.yaml index f3328a6945..d8e843d9c9 100644 --- a/animations/step_04/pubspec.yaml +++ b/animations/step_04/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: "none" version: 1.0.0 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 dependencies: animations: ^2.0.0 diff --git a/animations/step_05/lib/flip_effect.dart b/animations/step_05/lib/flip_effect.dart index cafd21bece..953c479ae9 100644 --- a/animations/step_05/lib/flip_effect.dart +++ b/animations/step_05/lib/flip_effect.dart @@ -28,7 +28,9 @@ class _CardFlipEffectState extends State super.initState(); _animationController = AnimationController( - vsync: this, duration: widget.duration * (widget.delayAmount + 1)); + vsync: this, + duration: widget.duration * (widget.delayAmount + 1), + ); _animationController.addListener(() { if (_animationController.value == 1) { @@ -42,10 +44,7 @@ class _CardFlipEffectState extends State tween: ConstantTween(0.0), weight: widget.delayAmount, ), - TweenSequenceItem( - tween: Tween(begin: 0.0, end: 1.0), - weight: 1.0, - ), + TweenSequenceItem(tween: Tween(begin: 0.0, end: 1.0), weight: 1.0), ]).animate(_animationController); } @@ -70,13 +69,14 @@ class _CardFlipEffectState extends State builder: (context, child) { return Transform( alignment: Alignment.center, - transform: Matrix4.identity() - ..rotateX(_animationWithDelay.value * math.pi), - child: _animationController.isAnimating - ? _animationWithDelay.value < 0.5 - ? _previousChild - : Transform.flip(flipY: true, child: widget.child) - : widget.child, + transform: + Matrix4.identity()..rotateX(_animationWithDelay.value * math.pi), + child: + _animationController.isAnimating + ? _animationWithDelay.value < 0.5 + ? _previousChild + : Transform.flip(flipY: true, child: widget.child) + : widget.child, ); }, child: widget.child, diff --git a/animations/step_05/lib/home_screen.dart b/animations/step_05/lib/home_screen.dart index 534110a0c8..e01ea3d1c8 100644 --- a/animations/step_05/lib/home_screen.dart +++ b/animations/step_05/lib/home_screen.dart @@ -11,24 +11,24 @@ class HomeScreen extends StatelessWidget { child: Column( mainAxisSize: MainAxisSize.min, children: [ - Text( - '✏️', - style: Theme.of(context).textTheme.displayLarge, - ), + Text('✏️', style: Theme.of(context).textTheme.displayLarge), Text( 'Flutter Quiz', style: Theme.of(context).textTheme.displayLarge!.copyWith( - fontWeight: FontWeight.w700, - color: Theme.of(context).colorScheme.onPrimaryFixedVariant), + fontWeight: FontWeight.w700, + color: Theme.of(context).colorScheme.onPrimaryFixedVariant, + ), ), ElevatedButton( onPressed: () { // Show the question screen to start the game Navigator.push( context, - MaterialPageRoute(builder: (context) { - return const QuestionScreen(); - }), + MaterialPageRoute( + builder: (context) { + return const QuestionScreen(); + }, + ), ); }, child: const Text('New Game'), diff --git a/animations/step_05/lib/model.dart b/animations/step_05/lib/model.dart index 0662327f52..56666d11dc 100644 --- a/animations/step_05/lib/model.dart +++ b/animations/step_05/lib/model.dart @@ -30,12 +30,7 @@ List _createQuestions() { return [ Question( 'What class used to create custom explicit animations in Flutter?', - [ - 'AnimationController', - 'AnimatedWidget', - 'AnimatedBuilder', - 'Tween', - ], + ['AnimationController', 'AnimatedWidget', 'AnimatedBuilder', 'Tween'], 0, ), Question( @@ -50,12 +45,7 @@ List _createQuestions() { ), Question( 'What class is used to define the start and end values for an animation?', - [ - 'Tween', - 'Curve', - 'AnimationController', - 'AnimatedWidget', - ], + ['Tween', 'Curve', 'AnimationController', 'AnimatedWidget'], 0, ), ]; diff --git a/animations/step_05/lib/question_screen.dart b/animations/step_05/lib/question_screen.dart index 42ee3bfc81..6166e900c9 100644 --- a/animations/step_05/lib/question_screen.dart +++ b/animations/step_05/lib/question_screen.dart @@ -12,8 +12,9 @@ class QuestionScreen extends StatefulWidget { } class _QuestionScreenState extends State { - late final QuizViewModel viewModel = - QuizViewModel(onGameOver: _handleGameOver); + late final QuizViewModel viewModel = QuizViewModel( + onGameOver: _handleGameOver, + ); VoidCallback? _showGameOverScreen; @override @@ -28,11 +29,11 @@ class _QuestionScreenState extends State { onPressed: viewModel.hasNextQuestion && viewModel.didAnswerQuestion ? () { - viewModel.getNextQuestion(); - } + viewModel.getNextQuestion(); + } : null, child: const Text('Next'), - ) + ), ], ), body: Center( @@ -49,13 +50,12 @@ class _QuestionScreenState extends State { viewModel.checkAnswer(index); }, answers: viewModel.currentQuestion?.possibleAnswers ?? [], - correctAnswer: viewModel.didAnswerQuestion - ? viewModel.currentQuestion?.correctAnswer - : null, + correctAnswer: + viewModel.didAnswerQuestion + ? viewModel.currentQuestion?.correctAnswer + : null, ), - StatusBar( - viewModel: viewModel, - ) + StatusBar(viewModel: viewModel), ], ), ), @@ -82,9 +82,7 @@ class GameOverScreen extends StatelessWidget { @override Widget build(BuildContext context) { return Scaffold( - appBar: AppBar( - automaticallyImplyLeading: false, - ), + appBar: AppBar(automaticallyImplyLeading: false), body: Center( child: Column( mainAxisAlignment: MainAxisAlignment.center, @@ -93,10 +91,7 @@ class GameOverScreen extends StatelessWidget { score: viewModel.score, totalQuestions: viewModel.totalQuestions, ), - Text( - 'You Win!', - style: Theme.of(context).textTheme.displayLarge, - ), + Text('You Win!', style: Theme.of(context).textTheme.displayLarge), Text( 'Score: ${viewModel.score} / ${viewModel.totalQuestions}', style: Theme.of(context).textTheme.displaySmall, diff --git a/animations/step_05/lib/scoreboard.dart b/animations/step_05/lib/scoreboard.dart index dd71080ba3..765711fe87 100644 --- a/animations/step_05/lib/scoreboard.dart +++ b/animations/step_05/lib/scoreboard.dart @@ -18,9 +18,7 @@ class Scoreboard extends StatelessWidget { mainAxisAlignment: MainAxisAlignment.center, children: [ for (var i = 0; i < totalQuestions; i++) - AnimatedStar( - isActive: score > i, - ) + AnimatedStar(isActive: score > i), ], ), ); @@ -50,11 +48,7 @@ class AnimatedStar extends StatelessWidget { end: isActive ? _activatedColor : _deactivatedColor, ), builder: (context, value, child) { - return Icon( - Icons.star, - size: 50, - color: value, - ); + return Icon(Icons.star, size: 50, color: value); }, ), ); diff --git a/animations/step_05/pubspec.yaml b/animations/step_05/pubspec.yaml index f3328a6945..d8e843d9c9 100644 --- a/animations/step_05/pubspec.yaml +++ b/animations/step_05/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: "none" version: 1.0.0 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 dependencies: animations: ^2.0.0 diff --git a/audio_soloud/step_02/lib/main.dart b/audio_soloud/step_02/lib/main.dart index 3b1ff49a07..7ba03e35f5 100644 --- a/audio_soloud/step_02/lib/main.dart +++ b/audio_soloud/step_02/lib/main.dart @@ -29,9 +29,7 @@ void main() async { final audioController = AudioController(); await audioController.initialize(); - runApp( - MyApp(audioController: audioController), - ); + runApp(MyApp(audioController: audioController)); } class MyApp extends StatelessWidget { diff --git a/audio_soloud/step_02/pubspec.yaml b/audio_soloud/step_02/pubspec.yaml index 85eb5f07d2..ae4a32a71c 100644 --- a/audio_soloud/step_02/pubspec.yaml +++ b/audio_soloud/step_02/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: 'none' version: 0.1.0 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 dependencies: flutter: diff --git a/audio_soloud/step_03/lib/main.dart b/audio_soloud/step_03/lib/main.dart index 3b1ff49a07..7ba03e35f5 100644 --- a/audio_soloud/step_03/lib/main.dart +++ b/audio_soloud/step_03/lib/main.dart @@ -29,9 +29,7 @@ void main() async { final audioController = AudioController(); await audioController.initialize(); - runApp( - MyApp(audioController: audioController), - ); + runApp(MyApp(audioController: audioController)); } class MyApp extends StatelessWidget { diff --git a/audio_soloud/step_03/pubspec.yaml b/audio_soloud/step_03/pubspec.yaml index 85eb5f07d2..ae4a32a71c 100644 --- a/audio_soloud/step_03/pubspec.yaml +++ b/audio_soloud/step_03/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: 'none' version: 0.1.0 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 dependencies: flutter: diff --git a/audio_soloud/step_04a/lib/main.dart b/audio_soloud/step_04a/lib/main.dart index 3b1ff49a07..7ba03e35f5 100644 --- a/audio_soloud/step_04a/lib/main.dart +++ b/audio_soloud/step_04a/lib/main.dart @@ -29,9 +29,7 @@ void main() async { final audioController = AudioController(); await audioController.initialize(); - runApp( - MyApp(audioController: audioController), - ); + runApp(MyApp(audioController: audioController)); } class MyApp extends StatelessWidget { diff --git a/audio_soloud/step_04a/pubspec.yaml b/audio_soloud/step_04a/pubspec.yaml index 85eb5f07d2..ae4a32a71c 100644 --- a/audio_soloud/step_04a/pubspec.yaml +++ b/audio_soloud/step_04a/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: 'none' version: 0.1.0 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 dependencies: flutter: diff --git a/audio_soloud/step_04b/lib/main.dart b/audio_soloud/step_04b/lib/main.dart index 3b1ff49a07..7ba03e35f5 100644 --- a/audio_soloud/step_04b/lib/main.dart +++ b/audio_soloud/step_04b/lib/main.dart @@ -29,9 +29,7 @@ void main() async { final audioController = AudioController(); await audioController.initialize(); - runApp( - MyApp(audioController: audioController), - ); + runApp(MyApp(audioController: audioController)); } class MyApp extends StatelessWidget { diff --git a/audio_soloud/step_04b/pubspec.yaml b/audio_soloud/step_04b/pubspec.yaml index 85eb5f07d2..ae4a32a71c 100644 --- a/audio_soloud/step_04b/pubspec.yaml +++ b/audio_soloud/step_04b/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: 'none' version: 0.1.0 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 dependencies: flutter: diff --git a/audio_soloud/step_05/lib/audio/audio_controller.dart b/audio_soloud/step_05/lib/audio/audio_controller.dart index a9da421edf..4f77785385 100644 --- a/audio_soloud/step_05/lib/audio/audio_controller.dart +++ b/audio_soloud/step_05/lib/audio/audio_controller.dart @@ -36,8 +36,10 @@ class AudioController { } } _log.info('Loading music'); - final musicSource = await _soloud! - .loadAsset('assets/music/looped-song.ogg', mode: LoadMode.disk); + final musicSource = await _soloud!.loadAsset( + 'assets/music/looped-song.ogg', + mode: LoadMode.disk, + ); musicSource.allInstancesFinished.first.then((_) { _soloud!.disposeSource(musicSource); _log.info('Music source disposed'); diff --git a/audio_soloud/step_05/lib/main.dart b/audio_soloud/step_05/lib/main.dart index 3b1ff49a07..7ba03e35f5 100644 --- a/audio_soloud/step_05/lib/main.dart +++ b/audio_soloud/step_05/lib/main.dart @@ -29,9 +29,7 @@ void main() async { final audioController = AudioController(); await audioController.initialize(); - runApp( - MyApp(audioController: audioController), - ); + runApp(MyApp(audioController: audioController)); } class MyApp extends StatelessWidget { diff --git a/audio_soloud/step_05/pubspec.yaml b/audio_soloud/step_05/pubspec.yaml index 85eb5f07d2..ae4a32a71c 100644 --- a/audio_soloud/step_05/pubspec.yaml +++ b/audio_soloud/step_05/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: 'none' version: 0.1.0 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 dependencies: flutter: diff --git a/audio_soloud/step_06/lib/audio/audio_controller.dart b/audio_soloud/step_06/lib/audio/audio_controller.dart index f7a58a88cd..4012102ddb 100644 --- a/audio_soloud/step_06/lib/audio/audio_controller.dart +++ b/audio_soloud/step_06/lib/audio/audio_controller.dart @@ -36,8 +36,10 @@ class AudioController { } } _log.info('Loading music'); - final musicSource = await _soloud! - .loadAsset('assets/music/looped-song.ogg', mode: LoadMode.disk); + final musicSource = await _soloud!.loadAsset( + 'assets/music/looped-song.ogg', + mode: LoadMode.disk, + ); musicSource.allInstancesFinished.first.then((_) { _soloud!.disposeSource(musicSource); _log.info('Music source disposed'); diff --git a/audio_soloud/step_06/lib/main.dart b/audio_soloud/step_06/lib/main.dart index 3b1ff49a07..7ba03e35f5 100644 --- a/audio_soloud/step_06/lib/main.dart +++ b/audio_soloud/step_06/lib/main.dart @@ -29,9 +29,7 @@ void main() async { final audioController = AudioController(); await audioController.initialize(); - runApp( - MyApp(audioController: audioController), - ); + runApp(MyApp(audioController: audioController)); } class MyApp extends StatelessWidget { diff --git a/audio_soloud/step_06/pubspec.yaml b/audio_soloud/step_06/pubspec.yaml index 85eb5f07d2..ae4a32a71c 100644 --- a/audio_soloud/step_06/pubspec.yaml +++ b/audio_soloud/step_06/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: 'none' version: 0.1.0 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 dependencies: flutter: diff --git a/boring_to_beautiful/codelab_rebuild.yaml b/boring_to_beautiful/codelab_rebuild.yaml index b0d4612fca..ade7317048 100644 --- a/boring_to_beautiful/codelab_rebuild.yaml +++ b/boring_to_beautiful/codelab_rebuild.yaml @@ -42,7 +42,7 @@ steps: version: 1.0.0 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 dependencies: flutter: diff --git a/boring_to_beautiful/final/lib/src/features/artists/view/artist_bio.dart b/boring_to_beautiful/final/lib/src/features/artists/view/artist_bio.dart index 227b8e91f9..8b614421db 100644 --- a/boring_to_beautiful/final/lib/src/features/artists/view/artist_bio.dart +++ b/boring_to_beautiful/final/lib/src/features/artists/view/artist_bio.dart @@ -18,9 +18,7 @@ class ArtistBio extends StatelessWidget { artist.bio, style: context.bodyLarge!.copyWith( fontSize: 16, - color: context.colors.onSurface.withAlpha( - 222, - ), + color: context.colors.onSurface.withAlpha(222), ), ); } diff --git a/boring_to_beautiful/final/lib/src/features/artists/view/artist_card.dart b/boring_to_beautiful/final/lib/src/features/artists/view/artist_card.dart index a63967f51d..1a56376a87 100644 --- a/boring_to_beautiful/final/lib/src/features/artists/view/artist_card.dart +++ b/boring_to_beautiful/final/lib/src/features/artists/view/artist_card.dart @@ -11,10 +11,7 @@ import '../../../shared/views/outlined_card.dart'; import '../../../shared/views/views.dart'; class ArtistCard extends StatelessWidget { - const ArtistCard({ - super.key, - required this.artist, - }); + const ArtistCard({super.key, required this.artist}); final Artist artist; @@ -24,65 +21,66 @@ class ArtistCard extends StatelessWidget { return OutlinedCard( child: LayoutBuilder( - builder: (context, dimens) => Row( - children: [ - SizedBox( - width: dimens.maxWidth * 0.4, - child: Image.asset( - artist.image.image, - fit: BoxFit.cover, - ), - ), - Expanded( - child: Padding( - padding: const EdgeInsets.only(left: 16), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Padding( - padding: const EdgeInsets.fromLTRB(0, 0, 15, 0), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text( - artist.name, - style: context.titleMedium, - overflow: TextOverflow.ellipsis, - maxLines: 1, - ), - const SizedBox(height: 10), - Text( - artist.bio, - overflow: TextOverflow.ellipsis, - style: context.labelSmall, - maxLines: 3, - ), - ]), - ), - if (dimens.maxHeight > 100) - Row( - children: [ - HoverableSongPlayButton( - size: const Size(50, 50), - song: nowPlaying, - child: Icon(Icons.play_circle, - color: context.colors.tertiary), + builder: + (context, dimens) => Row( + children: [ + SizedBox( + width: dimens.maxWidth * 0.4, + child: Image.asset(artist.image.image, fit: BoxFit.cover), + ), + Expanded( + child: Padding( + padding: const EdgeInsets.only(left: 16), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Padding( + padding: const EdgeInsets.fromLTRB(0, 0, 15, 0), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + artist.name, + style: context.titleMedium, + overflow: TextOverflow.ellipsis, + maxLines: 1, + ), + const SizedBox(height: 10), + Text( + artist.bio, + overflow: TextOverflow.ellipsis, + style: context.labelSmall, + maxLines: 3, + ), + ], ), - Text( - nowPlaying.title, - maxLines: 1, - overflow: TextOverflow.clip, - style: context.labelMedium, + ), + if (dimens.maxHeight > 100) + Row( + children: [ + HoverableSongPlayButton( + size: const Size(50, 50), + song: nowPlaying, + child: Icon( + Icons.play_circle, + color: context.colors.tertiary, + ), + ), + Text( + nowPlaying.title, + maxLines: 1, + overflow: TextOverflow.clip, + style: context.labelMedium, + ), + ], ), - ], - ), - ], + ], + ), + ), ), - ), + ], ), - ], - ), ), ); } diff --git a/boring_to_beautiful/final/lib/src/features/artists/view/artist_events.dart b/boring_to_beautiful/final/lib/src/features/artists/view/artist_events.dart index 8b064759c6..58b61b37df 100644 --- a/boring_to_beautiful/final/lib/src/features/artists/view/artist_events.dart +++ b/boring_to_beautiful/final/lib/src/features/artists/view/artist_events.dart @@ -70,53 +70,32 @@ class ArtistEvents extends StatelessWidget { ); }, columns: const [ - DataColumn( - label: Text( - 'Date', - ), - numeric: true, - ), - DataColumn( - label: Text( - 'Event', - ), - ), - DataColumn( - label: Text( - 'Location', - ), - ), - DataColumn( - label: Text( - 'More info', - ), - ), + DataColumn(label: Text('Date'), numeric: true), + DataColumn(label: Text('Event')), + DataColumn(label: Text('Location')), + DataColumn(label: Text('More info')), ], - rowBuilder: (item, index) => DataRow.byIndex(index: index, cells: [ - DataCell( - Text(item.date), - ), - DataCell( - Row(children: [ - Expanded(child: Text(item.title)), - ]), - ), - DataCell( - Text(item.location), - ), - DataCell( - Clickable( - child: Text( - item.link, - style: TextStyle( - color: linkColor.value(theme), - decoration: TextDecoration.underline, + rowBuilder: + (item, index) => DataRow.byIndex( + index: index, + cells: [ + DataCell(Text(item.date)), + DataCell(Row(children: [Expanded(child: Text(item.title))])), + DataCell(Text(item.location)), + DataCell( + Clickable( + child: Text( + item.link, + style: TextStyle( + color: linkColor.value(theme), + decoration: TextDecoration.underline, + ), + ), + onTap: () => launchUrl(Uri.parse('https://docs.flutter.dev')), + ), ), - ), - onTap: () => launchUrl(Uri.parse('https://docs.flutter.dev')), + ], ), - ), - ]), ); } } diff --git a/boring_to_beautiful/final/lib/src/features/artists/view/artist_ranked_songs.dart b/boring_to_beautiful/final/lib/src/features/artists/view/artist_ranked_songs.dart index e484ecb3d7..3d1f4e2cf1 100644 --- a/boring_to_beautiful/final/lib/src/features/artists/view/artist_ranked_songs.dart +++ b/boring_to_beautiful/final/lib/src/features/artists/view/artist_ranked_songs.dart @@ -27,52 +27,42 @@ class ArtistRankedSongs extends StatelessWidget { title: Text(song.title), subtitle: Text(song.length.toHumanizedString()), trailing: Text(song.ranking.toString()), - onTap: () => BlocProvider.of(context).add( - PlaybackEvent.changeSong(song), - ), + onTap: + () => BlocProvider.of( + context, + ).add(PlaybackEvent.changeSong(song)), ); }, columns: const [ - DataColumn( - label: Text( - 'Ranking', - ), - numeric: true, - ), - DataColumn( - label: Text( - 'Title', - ), - ), - DataColumn( - label: Text( - 'Length', - ), - ), + DataColumn(label: Text('Ranking'), numeric: true), + DataColumn(label: Text('Title')), + DataColumn(label: Text('Length')), ], - rowBuilder: (song, index) => DataRow.byIndex(index: index, cells: [ - DataCell( - HoverableSongPlayButton( - song: song, - child: Center( - child: Text(song.ranking.toString()), - ), + rowBuilder: + (song, index) => DataRow.byIndex( + index: index, + cells: [ + DataCell( + HoverableSongPlayButton( + song: song, + child: Center(child: Text(song.ranking.toString())), + ), + ), + DataCell( + Row( + children: [ + Padding( + padding: const EdgeInsets.all(2), + child: ClippedImage(song.image.image), + ), + const SizedBox(width: 5.0), + Expanded(child: Text(song.title)), + ], + ), + ), + DataCell(Text(song.length.toHumanizedString())), + ], ), - ), - DataCell( - Row(children: [ - Padding( - padding: const EdgeInsets.all(2), - child: ClippedImage(song.image.image), - ), - const SizedBox(width: 5.0), - Expanded(child: Text(song.title)), - ]), - ), - DataCell( - Text(song.length.toHumanizedString()), - ), - ]), ); } } diff --git a/boring_to_beautiful/final/lib/src/features/artists/view/artist_updates.dart b/boring_to_beautiful/final/lib/src/features/artists/view/artist_updates.dart index e5b8bb5fe9..a0fabf7330 100644 --- a/boring_to_beautiful/final/lib/src/features/artists/view/artist_updates.dart +++ b/boring_to_beautiful/final/lib/src/features/artists/view/artist_updates.dart @@ -30,7 +30,7 @@ class ArtistUpdates extends StatelessWidget { child: Text(update), ), ), - ) + ), ], ); } diff --git a/boring_to_beautiful/final/lib/src/features/artists/view/artists_screen.dart b/boring_to_beautiful/final/lib/src/features/artists/view/artists_screen.dart index 8afe759807..225d74847b 100644 --- a/boring_to_beautiful/final/lib/src/features/artists/view/artists_screen.dart +++ b/boring_to_beautiful/final/lib/src/features/artists/view/artists_screen.dart @@ -17,33 +17,33 @@ class ArtistsScreen extends StatelessWidget { Widget build(BuildContext context) { final artistsProvider = ArtistsProvider(); final artists = artistsProvider.artists; - return LayoutBuilder(builder: (context, constraints) { - return Scaffold( - primary: false, - appBar: AppBar( - title: const Text('ARTISTS'), - toolbarHeight: kToolbarHeight * 2, - ), - body: GridView.builder( - padding: const EdgeInsets.all(15), - gridDelegate: SliverGridDelegateWithFixedCrossAxisCount( - crossAxisCount: max(1, (constraints.maxWidth ~/ 400).toInt()), - childAspectRatio: 2.5, - mainAxisSpacing: 10, - crossAxisSpacing: 10, + return LayoutBuilder( + builder: (context, constraints) { + return Scaffold( + primary: false, + appBar: AppBar( + title: const Text('ARTISTS'), + toolbarHeight: kToolbarHeight * 2, ), - itemCount: artists.length, - itemBuilder: (context, index) { - final artist = artists[index]; - return GestureDetector( - child: ArtistCard( - artist: artist, - ), - onTap: () => GoRouter.of(context).go('/artists/${artist.id}'), - ); - }, - ), - ); - }); + body: GridView.builder( + padding: const EdgeInsets.all(15), + gridDelegate: SliverGridDelegateWithFixedCrossAxisCount( + crossAxisCount: max(1, (constraints.maxWidth ~/ 400).toInt()), + childAspectRatio: 2.5, + mainAxisSpacing: 10, + crossAxisSpacing: 10, + ), + itemCount: artists.length, + itemBuilder: (context, index) { + final artist = artists[index]; + return GestureDetector( + child: ArtistCard(artist: artist), + onTap: () => GoRouter.of(context).go('/artists/${artist.id}'), + ); + }, + ), + ); + }, + ); } } diff --git a/boring_to_beautiful/final/lib/src/features/home/view/home_artists.dart b/boring_to_beautiful/final/lib/src/features/home/view/home_artists.dart index beb2c0ece4..b5a3a33ecd 100644 --- a/boring_to_beautiful/final/lib/src/features/home/view/home_artists.dart +++ b/boring_to_beautiful/final/lib/src/features/home/view/home_artists.dart @@ -22,27 +22,25 @@ class HomeArtists extends StatelessWidget { Widget build(BuildContext context) { return Padding( padding: const EdgeInsets.all(15), - child: constraints.isMobile - ? Column( - children: [ - for (final artist in artists) buildTile(context, artist), - ], - ) - : Row(children: [ - for (final artist in artists) - Flexible( - flex: 1, - child: buildTile(context, artist), - ), - ]), + child: + constraints.isMobile + ? Column( + children: [ + for (final artist in artists) buildTile(context, artist), + ], + ) + : Row( + children: [ + for (final artist in artists) + Flexible(flex: 1, child: buildTile(context, artist)), + ], + ), ); } Widget buildTile(BuildContext context, Artist artist) { return ListTile( - leading: CircleAvatar( - backgroundImage: AssetImage(artist.image.image), - ), + leading: CircleAvatar(backgroundImage: AssetImage(artist.image.image)), title: Text( artist.updates.first, maxLines: 2, diff --git a/boring_to_beautiful/final/lib/src/features/home/view/home_recent.dart b/boring_to_beautiful/final/lib/src/features/home/view/home_recent.dart index c77500a663..8ba86d117d 100644 --- a/boring_to_beautiful/final/lib/src/features/home/view/home_recent.dart +++ b/boring_to_beautiful/final/lib/src/features/home/view/home_recent.dart @@ -12,8 +12,11 @@ import '../../../shared/views/image_clipper.dart'; import '../../../shared/views/outlined_card.dart'; class HomeRecent extends StatelessWidget { - const HomeRecent( - {super.key, required this.playlists, this.axis = Axis.horizontal}); + const HomeRecent({ + super.key, + required this.playlists, + this.axis = Axis.horizontal, + }); final List playlists; final Axis axis; @@ -43,8 +46,10 @@ class HomeRecent extends StatelessWidget { Row( children: [ Expanded( - child: Image.asset(playlist.cover.image, - fit: BoxFit.cover), + child: Image.asset( + playlist.cover.image, + fit: BoxFit.cover, + ), ), ], ), @@ -79,10 +84,7 @@ class HomeRecent extends StatelessWidget { crossAxisAlignment: CrossAxisAlignment.center, mainAxisSize: MainAxisSize.max, children: [ - ClippedImage( - playlist.cover.image, - height: 200, - ), + ClippedImage(playlist.cover.image, height: 200), Expanded( child: Center( child: Padding( @@ -104,23 +106,24 @@ class HomeRecent extends StatelessWidget { return Column( children: [ Padding( - padding: const EdgeInsets.fromLTRB(10, 5, 10, 5), - child: Text( - playlist.title, - style: context.titleSmall!.copyWith( - fontWeight: FontWeight.bold, - ), - overflow: TextOverflow.ellipsis, - maxLines: 1, - textAlign: TextAlign.center, - )), + padding: const EdgeInsets.fromLTRB(10, 5, 10, 5), + child: Text( + playlist.title, + style: context.titleSmall!.copyWith(fontWeight: FontWeight.bold), + overflow: TextOverflow.ellipsis, + maxLines: 1, + textAlign: TextAlign.center, + ), + ), Padding( padding: const EdgeInsets.symmetric(vertical: 5, horizontal: 10), - child: Text(playlist.description, - overflow: TextOverflow.ellipsis, - style: context.labelSmall, - maxLines: 2, - textAlign: TextAlign.center), + child: Text( + playlist.description, + overflow: TextOverflow.ellipsis, + style: context.labelSmall, + maxLines: 2, + textAlign: TextAlign.center, + ), ), ], ); diff --git a/boring_to_beautiful/final/lib/src/features/home/view/home_screen.dart b/boring_to_beautiful/final/lib/src/features/home/view/home_screen.dart index a763bbd45a..c142c1e4c2 100644 --- a/boring_to_beautiful/final/lib/src/features/home/view/home_screen.dart +++ b/boring_to_beautiful/final/lib/src/features/home/view/home_screen.dart @@ -49,33 +49,31 @@ class _HomeScreenState extends State { ), ), body: LayoutBuilder( - builder: (context, constraints) => TabBarView( - children: [ - SingleChildScrollView( - child: Column( - children: [ - const HomeHighlight(), - HomeArtists( - artists: artists, - constraints: constraints, + builder: + (context, constraints) => TabBarView( + children: [ + SingleChildScrollView( + child: Column( + children: [ + const HomeHighlight(), + HomeArtists( + artists: artists, + constraints: constraints, + ), + ], ), - ], - ), - ), - HomeRecent( - playlists: playlists, - axis: Axis.vertical, - ), - PlaylistSongs( - playlist: topSongs, - constraints: constraints, - ), - PlaylistSongs( - playlist: newReleases, - constraints: constraints, + ), + HomeRecent(playlists: playlists, axis: Axis.vertical), + PlaylistSongs( + playlist: topSongs, + constraints: constraints, + ), + PlaylistSongs( + playlist: newReleases, + constraints: constraints, + ), + ], ), - ], - ), ), ), ); @@ -109,10 +107,11 @@ class _HomeScreenState extends State { children: [ const HomeHighlight(), LayoutBuilder( - builder: (context, constraints) => HomeArtists( - artists: artists, - constraints: constraints, - ), + builder: + (context, constraints) => HomeArtists( + artists: artists, + constraints: constraints, + ), ), ], ), @@ -132,9 +131,7 @@ class _HomeScreenState extends State { style: context.headlineSmall, ), ), - HomeRecent( - playlists: playlists, - ), + HomeRecent(playlists: playlists), ], ), ), @@ -152,19 +149,21 @@ class _HomeScreenState extends State { crossAxisAlignment: CrossAxisAlignment.start, children: [ Padding( - padding: - const EdgeInsets.only(left: 8, bottom: 8), + padding: const EdgeInsets.only( + left: 8, + bottom: 8, + ), child: Text( 'Top Songs Today', style: context.titleLarge, ), ), LayoutBuilder( - builder: (context, constraints) => - PlaylistSongs( - playlist: topSongs, - constraints: constraints, - ), + builder: + (context, constraints) => PlaylistSongs( + playlist: topSongs, + constraints: constraints, + ), ), ], ), @@ -177,19 +176,21 @@ class _HomeScreenState extends State { crossAxisAlignment: CrossAxisAlignment.start, children: [ Padding( - padding: - const EdgeInsets.only(left: 8, bottom: 8), + padding: const EdgeInsets.only( + left: 8, + bottom: 8, + ), child: Text( 'New Releases', style: context.titleLarge, ), ), LayoutBuilder( - builder: (context, constraints) => - PlaylistSongs( - playlist: newReleases, - constraints: constraints, - ), + builder: + (context, constraints) => PlaylistSongs( + playlist: newReleases, + constraints: constraints, + ), ), ], ), diff --git a/boring_to_beautiful/final/lib/src/features/playlists/view/playlist_home_screen.dart b/boring_to_beautiful/final/lib/src/features/playlists/view/playlist_home_screen.dart index a80d767930..978608ccad 100644 --- a/boring_to_beautiful/final/lib/src/features/playlists/view/playlist_home_screen.dart +++ b/boring_to_beautiful/final/lib/src/features/playlists/view/playlist_home_screen.dart @@ -44,8 +44,10 @@ class PlaylistHomeScreen extends StatelessWidget { title: playlist.title, subtitle: playlist.description, ), - onTap: () => - GoRouter.of(context).go('/playlists/${playlist.id}'), + onTap: + () => GoRouter.of( + context, + ).go('/playlists/${playlist.id}'), ); }, ), diff --git a/boring_to_beautiful/final/lib/src/features/playlists/view/playlist_screen.dart b/boring_to_beautiful/final/lib/src/features/playlists/view/playlist_screen.dart index 5dc2f0744f..c41f500a92 100644 --- a/boring_to_beautiful/final/lib/src/features/playlists/view/playlist_screen.dart +++ b/boring_to_beautiful/final/lib/src/features/playlists/view/playlist_screen.dart @@ -20,114 +20,116 @@ class PlaylistScreen extends StatelessWidget { @override Widget build(BuildContext context) { - return LayoutBuilder(builder: (context, constraints) { - final colors = Theme.of(context).colorScheme; - final double headerHeight = constraints.isMobile - ? max(constraints.biggest.height * 0.5, 450) - : max(constraints.biggest.height * 0.25, 250); - if (constraints.isMobile) { - return Scaffold( - appBar: AppBar( - leading: BackButton( - onPressed: () => GoRouter.of(context).go('/playlists'), - ), - title: Text(playlist.title), - actions: [ - IconButton( - icon: const Icon(Icons.play_circle_fill), - onPressed: () {}, - ), - IconButton( - onPressed: () {}, - icon: const Icon(Icons.shuffle), - ), - ], - ), - body: ArticleContent( - child: PlaylistSongs( - playlist: playlist, - constraints: constraints, - ), - ), - ); - } - return Scaffold( - body: CustomScrollView( - slivers: [ - SliverAppBar( + return LayoutBuilder( + builder: (context, constraints) { + final colors = Theme.of(context).colorScheme; + final double headerHeight = + constraints.isMobile + ? max(constraints.biggest.height * 0.5, 450) + : max(constraints.biggest.height * 0.25, 250); + if (constraints.isMobile) { + return Scaffold( + appBar: AppBar( leading: BackButton( onPressed: () => GoRouter.of(context).go('/playlists'), ), - expandedHeight: headerHeight, - pinned: false, - flexibleSpace: FlexibleSpaceBar( - background: AdaptiveImageCard( - axis: constraints.isMobile ? Axis.vertical : Axis.horizontal, - constraints: - constraints.copyWith(maxHeight: headerHeight).normalize(), - image: playlist.cover.image, - child: Column( - mainAxisAlignment: MainAxisAlignment.end, - crossAxisAlignment: CrossAxisAlignment.start, - mainAxisSize: MainAxisSize.min, - children: [ - Text( - 'PLAYLIST', - style: context.titleSmall! - .copyWith(color: colors.onSurface), - ), - Text( - playlist.title, - style: context.displaySmall! - .copyWith(color: colors.onSurface), - ), - Text( - playlist.description, - style: context.bodyLarge!.copyWith( - color: colors.onSurface.withAlpha(204), + title: Text(playlist.title), + actions: [ + IconButton( + icon: const Icon(Icons.play_circle_fill), + onPressed: () {}, + ), + IconButton(onPressed: () {}, icon: const Icon(Icons.shuffle)), + ], + ), + body: ArticleContent( + child: PlaylistSongs( + playlist: playlist, + constraints: constraints, + ), + ), + ); + } + return Scaffold( + body: CustomScrollView( + slivers: [ + SliverAppBar( + leading: BackButton( + onPressed: () => GoRouter.of(context).go('/playlists'), + ), + expandedHeight: headerHeight, + pinned: false, + flexibleSpace: FlexibleSpaceBar( + background: AdaptiveImageCard( + axis: + constraints.isMobile ? Axis.vertical : Axis.horizontal, + constraints: + constraints + .copyWith(maxHeight: headerHeight) + .normalize(), + image: playlist.cover.image, + child: Column( + mainAxisAlignment: MainAxisAlignment.end, + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisSize: MainAxisSize.min, + children: [ + Text( + 'PLAYLIST', + style: context.titleSmall!.copyWith( + color: colors.onSurface, + ), ), - ), - const SizedBox(height: 8), - Row( - children: [ - IconButton( - icon: Icon( - Icons.play_circle_fill, - color: colors.tertiary, - ), - onPressed: () {}, + Text( + playlist.title, + style: context.displaySmall!.copyWith( + color: colors.onSurface, ), - TextButton.icon( - onPressed: () {}, - icon: Icon( - Icons.shuffle, - color: colors.tertiary, - ), - label: Text( - 'Shuffle', - style: context.bodySmall!.copyWith( + ), + Text( + playlist.description, + style: context.bodyLarge!.copyWith( + color: colors.onSurface.withAlpha(204), + ), + ), + const SizedBox(height: 8), + Row( + children: [ + IconButton( + icon: Icon( + Icons.play_circle_fill, color: colors.tertiary, ), + onPressed: () {}, ), - ), - ], - ), - ], + TextButton.icon( + onPressed: () {}, + icon: Icon(Icons.shuffle, color: colors.tertiary), + label: Text( + 'Shuffle', + style: context.bodySmall!.copyWith( + color: colors.tertiary, + ), + ), + ), + ], + ), + ], + ), ), ), ), - ), - SliverToBoxAdapter( - child: ArticleContent( - child: PlaylistSongs( - playlist: playlist, - constraints: constraints, + SliverToBoxAdapter( + child: ArticleContent( + child: PlaylistSongs( + playlist: playlist, + constraints: constraints, + ), ), ), - ), - ], - ), - ); - }); + ], + ), + ); + }, + ); } } diff --git a/boring_to_beautiful/final/lib/src/features/playlists/view/playlist_songs.dart b/boring_to_beautiful/final/lib/src/features/playlists/view/playlist_songs.dart index c0d0edcbb0..4ff442d00a 100644 --- a/boring_to_beautiful/final/lib/src/features/playlists/view/playlist_songs.dart +++ b/boring_to_beautiful/final/lib/src/features/playlists/view/playlist_songs.dart @@ -12,8 +12,11 @@ import '../../../shared/views/image_clipper.dart'; import '../../../shared/views/views.dart'; class PlaylistSongs extends StatelessWidget { - const PlaylistSongs( - {super.key, required this.playlist, required this.constraints}); + const PlaylistSongs({ + super.key, + required this.playlist, + required this.constraints, + }); final Playlist playlist; final BoxConstraints constraints; @@ -25,14 +28,9 @@ class PlaylistSongs extends StatelessWidget { breakpoint: 450, columns: const [ DataColumn( - label: Padding( - padding: EdgeInsets.only(left: 20), - child: Text('#'), - ), - ), - DataColumn( - label: Text('Title'), + label: Padding(padding: EdgeInsets.only(left: 20), child: Text('#')), ), + DataColumn(label: Text('Title')), DataColumn( label: Padding( padding: EdgeInsets.only(right: 10), @@ -40,41 +38,43 @@ class PlaylistSongs extends StatelessWidget { ), ), ], - rowBuilder: (context, index) => DataRow.byIndex( - index: index, - cells: [ - DataCell( - HoverableSongPlayButton( - hoverMode: HoverMode.overlay, - song: playlist.songs[index], - child: Center( - child: Text( - (index + 1).toString(), - textAlign: TextAlign.center, + rowBuilder: + (context, index) => DataRow.byIndex( + index: index, + cells: [ + DataCell( + HoverableSongPlayButton( + hoverMode: HoverMode.overlay, + song: playlist.songs[index], + child: Center( + child: Text( + (index + 1).toString(), + textAlign: TextAlign.center, + ), + ), ), ), - ), - ), - DataCell( - Row(children: [ - Padding( - padding: const EdgeInsets.all(2), - child: ClippedImage(playlist.songs[index].image.image), + DataCell( + Row( + children: [ + Padding( + padding: const EdgeInsets.all(2), + child: ClippedImage(playlist.songs[index].image.image), + ), + const SizedBox(width: 10), + Expanded(child: Text(playlist.songs[index].title)), + ], + ), ), - const SizedBox(width: 10), - Expanded(child: Text(playlist.songs[index].title)), - ]), + DataCell(Text(playlist.songs[index].length.toHumanizedString())), + ], ), - DataCell( - Text(playlist.songs[index].length.toHumanizedString()), - ), - ], - ), itemBuilder: (song, index) { return ListTile( - onTap: () => BlocProvider.of(context).add( - PlaybackEvent.changeSong(song), - ), + onTap: + () => BlocProvider.of( + context, + ).add(PlaybackEvent.changeSong(song)), leading: ClippedImage(song.image.image), title: Text(song.title), subtitle: Text(song.length.toHumanizedString()), diff --git a/boring_to_beautiful/final/lib/src/shared/app.dart b/boring_to_beautiful/final/lib/src/shared/app.dart index 3910d8f276..ed27418bd4 100644 --- a/boring_to_beautiful/final/lib/src/shared/app.dart +++ b/boring_to_beautiful/final/lib/src/shared/app.dart @@ -19,45 +19,46 @@ class MyApp extends StatefulWidget { } class _MyAppState extends State { - final settings = ValueNotifier(ThemeSettings( - sourceColor: Colors.pink, - themeMode: ThemeMode.system, - )); + final settings = ValueNotifier( + ThemeSettings(sourceColor: Colors.pink, themeMode: ThemeMode.system), + ); @override Widget build(BuildContext context) { return BlocProvider( create: (context) => PlaybackBloc(), child: DynamicColorBuilder( - builder: (lightDynamic, darkDynamic) => ThemeProvider( - lightDynamic: lightDynamic, - darkDynamic: darkDynamic, - settings: settings, - child: NotificationListener( - onNotification: (notification) { - settings.value = notification.settings; - return true; - }, - child: ValueListenableBuilder( - valueListenable: settings, - builder: (context, value, _) { - final theme = ThemeProvider.of(context); - return MaterialApp.router( - debugShowCheckedModeBanner: false, - title: 'Flutter Demo', - theme: theme.light(settings.value.sourceColor), - darkTheme: theme.dark(settings.value.sourceColor), - themeMode: theme.themeMode(), - routeInformationParser: appRouter.routeInformationParser, - routeInformationProvider: - appRouter.routeInformationProvider, - routerDelegate: appRouter.routerDelegate, - builder: (context, child) { - return PlayPauseListener(child: child!); - }, - ); + builder: + (lightDynamic, darkDynamic) => ThemeProvider( + lightDynamic: lightDynamic, + darkDynamic: darkDynamic, + settings: settings, + child: NotificationListener( + onNotification: (notification) { + settings.value = notification.settings; + return true; }, + child: ValueListenableBuilder( + valueListenable: settings, + builder: (context, value, _) { + final theme = ThemeProvider.of(context); + return MaterialApp.router( + debugShowCheckedModeBanner: false, + title: 'Flutter Demo', + theme: theme.light(settings.value.sourceColor), + darkTheme: theme.dark(settings.value.sourceColor), + themeMode: theme.themeMode(), + routeInformationParser: appRouter.routeInformationParser, + routeInformationProvider: + appRouter.routeInformationProvider, + routerDelegate: appRouter.routerDelegate, + builder: (context, child) { + return PlayPauseListener(child: child!); + }, + ); + }, + ), ), - )), + ), ), ); } diff --git a/boring_to_beautiful/final/lib/src/shared/classes/image.dart b/boring_to_beautiful/final/lib/src/shared/classes/image.dart index a1ef427c1d..00a6472b4a 100644 --- a/boring_to_beautiful/final/lib/src/shared/classes/image.dart +++ b/boring_to_beautiful/final/lib/src/shared/classes/image.dart @@ -3,10 +3,11 @@ // found in the LICENSE file. class MyArtistImage { - const MyArtistImage( - {required this.image, - required this.sourceName, - required this.sourceLink}); + const MyArtistImage({ + required this.image, + required this.sourceName, + required this.sourceLink, + }); final String image; final String sourceName; diff --git a/boring_to_beautiful/final/lib/src/shared/classes/playlist.dart b/boring_to_beautiful/final/lib/src/shared/classes/playlist.dart index 59899dc619..5f0225059d 100644 --- a/boring_to_beautiful/final/lib/src/shared/classes/playlist.dart +++ b/boring_to_beautiful/final/lib/src/shared/classes/playlist.dart @@ -17,8 +17,9 @@ class Playlist { this.description = '', required this.songs, this.cover = const MyArtistImage( - image: 'assets/images/record.jpeg', - sourceName: 'Adobe Stock Images', - sourceLink: ''), + image: 'assets/images/record.jpeg', + sourceName: 'Adobe Stock Images', + sourceLink: '', + ), }); } diff --git a/boring_to_beautiful/final/lib/src/shared/classes/ranked_song.dart b/boring_to_beautiful/final/lib/src/shared/classes/ranked_song.dart index 5908268c8c..2362bfae64 100644 --- a/boring_to_beautiful/final/lib/src/shared/classes/ranked_song.dart +++ b/boring_to_beautiful/final/lib/src/shared/classes/ranked_song.dart @@ -7,7 +7,11 @@ import './classes.dart'; class RankedSong extends Song { final int ranking; - const RankedSong(this.ranking, String title, Artist artist, Duration length, - MyArtistImage image) - : super(title, artist, length, image); + const RankedSong( + this.ranking, + String title, + Artist artist, + Duration length, + MyArtistImage image, + ) : super(title, artist, length, image); } diff --git a/boring_to_beautiful/final/lib/src/shared/extensions.dart b/boring_to_beautiful/final/lib/src/shared/extensions.dart index 8b7e41b988..fe65add57c 100644 --- a/boring_to_beautiful/final/lib/src/shared/extensions.dart +++ b/boring_to_beautiful/final/lib/src/shared/extensions.dart @@ -9,51 +9,36 @@ extension TypographyUtils on BuildContext { ThemeData get theme => Theme.of(this); TextTheme get textTheme => GoogleFonts.montserratTextTheme(theme.textTheme); ColorScheme get colors => theme.colorScheme; - TextStyle? get displayLarge => textTheme.displayLarge?.copyWith( - color: colors.onSurface, - ); - TextStyle? get displayMedium => textTheme.displayMedium?.copyWith( - color: colors.onSurface, - ); - TextStyle? get displaySmall => textTheme.displaySmall?.copyWith( - color: colors.onSurface, - ); - TextStyle? get headlineLarge => textTheme.headlineLarge?.copyWith( - color: colors.onSurface, - ); - TextStyle? get headlineMedium => textTheme.headlineMedium?.copyWith( - color: colors.onSurface, - ); - TextStyle? get headlineSmall => textTheme.headlineSmall?.copyWith( - color: colors.onSurface, - ); - TextStyle? get titleLarge => textTheme.titleLarge?.copyWith( - color: colors.onSurface, - ); - TextStyle? get titleMedium => textTheme.titleMedium?.copyWith( - color: colors.onSurface, - ); - TextStyle? get titleSmall => textTheme.titleSmall?.copyWith( - color: colors.onSurface, - ); - TextStyle? get labelLarge => textTheme.labelLarge?.copyWith( - color: colors.onSurface, - ); - TextStyle? get labelMedium => textTheme.labelMedium?.copyWith( - color: colors.onSurface, - ); - TextStyle? get labelSmall => textTheme.labelSmall?.copyWith( - color: colors.onSurface, - ); - TextStyle? get bodyLarge => textTheme.bodyLarge?.copyWith( - color: colors.onSurface, - ); - TextStyle? get bodyMedium => textTheme.bodyMedium?.copyWith( - color: colors.onSurface, - ); - TextStyle? get bodySmall => textTheme.bodySmall?.copyWith( - color: colors.onSurface, - ); + TextStyle? get displayLarge => + textTheme.displayLarge?.copyWith(color: colors.onSurface); + TextStyle? get displayMedium => + textTheme.displayMedium?.copyWith(color: colors.onSurface); + TextStyle? get displaySmall => + textTheme.displaySmall?.copyWith(color: colors.onSurface); + TextStyle? get headlineLarge => + textTheme.headlineLarge?.copyWith(color: colors.onSurface); + TextStyle? get headlineMedium => + textTheme.headlineMedium?.copyWith(color: colors.onSurface); + TextStyle? get headlineSmall => + textTheme.headlineSmall?.copyWith(color: colors.onSurface); + TextStyle? get titleLarge => + textTheme.titleLarge?.copyWith(color: colors.onSurface); + TextStyle? get titleMedium => + textTheme.titleMedium?.copyWith(color: colors.onSurface); + TextStyle? get titleSmall => + textTheme.titleSmall?.copyWith(color: colors.onSurface); + TextStyle? get labelLarge => + textTheme.labelLarge?.copyWith(color: colors.onSurface); + TextStyle? get labelMedium => + textTheme.labelMedium?.copyWith(color: colors.onSurface); + TextStyle? get labelSmall => + textTheme.labelSmall?.copyWith(color: colors.onSurface); + TextStyle? get bodyLarge => + textTheme.bodyLarge?.copyWith(color: colors.onSurface); + TextStyle? get bodyMedium => + textTheme.bodyMedium?.copyWith(color: colors.onSurface); + TextStyle? get bodySmall => + textTheme.bodySmall?.copyWith(color: colors.onSurface); } extension BreakpointUtils on BoxConstraints { @@ -65,17 +50,17 @@ extension BreakpointUtils on BoxConstraints { extension DurationString on String { /// Assumes a string (roughly) of the format '\d{1,2}:\d{2}' Duration toDuration() => switch (split(':')) { - [var minutes, var seconds] => Duration( - minutes: int.parse(minutes.trim()), - seconds: int.parse(seconds.trim()), - ), - [var hours, var minutes, var seconds] => Duration( - hours: int.parse(hours.trim()), - minutes: int.parse(minutes.trim()), - seconds: int.parse(seconds.trim()), - ), - _ => throw Exception('Invalid duration string: $this'), - }; + [var minutes, var seconds] => Duration( + minutes: int.parse(minutes.trim()), + seconds: int.parse(seconds.trim()), + ), + [var hours, var minutes, var seconds] => Duration( + hours: int.parse(hours.trim()), + minutes: int.parse(minutes.trim()), + seconds: int.parse(seconds.trim()), + ), + _ => throw Exception('Invalid duration string: $this'), + }; } extension HumanizedDuration on Duration { diff --git a/boring_to_beautiful/final/lib/src/shared/playback/bloc/playback_bloc.dart b/boring_to_beautiful/final/lib/src/shared/playback/bloc/playback_bloc.dart index 73c2f4c436..c6c871937b 100644 --- a/boring_to_beautiful/final/lib/src/shared/playback/bloc/playback_bloc.dart +++ b/boring_to_beautiful/final/lib/src/shared/playback/bloc/playback_bloc.dart @@ -41,9 +41,8 @@ class PlaybackBloc extends Bloc { } } - void _handlePlaybackProgress(Duration progress) => add( - PlaybackEvent.songProgress(progress), - ); + void _handlePlaybackProgress(Duration progress) => + add(PlaybackEvent.songProgress(progress)); void _togglePlayPause(TogglePlayPause event, Emitter emit) { state.isPlaying ? _pausePlayback() : _resumePlayback(); @@ -52,8 +51,10 @@ class PlaybackBloc extends Bloc { void _pausePlayback() => _currentlyPlayingSubscription!.cancel(); - void _resumePlayback() => _currentlyPlayingSubscription = - _startPlayingStream().listen(_handlePlaybackProgress); + void _resumePlayback() => + _currentlyPlayingSubscription = _startPlayingStream().listen( + _handlePlaybackProgress, + ); void _changeSong(ChangeSong event, Emitter emit) { emit( @@ -69,19 +70,15 @@ class PlaybackBloc extends Bloc { } void _songProgress(SongProgress event, Emitter emit) => emit( - state.copyWith( - songWithProgress: state.songWithProgress!.copyWith( - progress: state.songWithProgress!.progress + event.duration, - ), - ), - ); + state.copyWith( + songWithProgress: state.songWithProgress!.copyWith( + progress: state.songWithProgress!.progress + event.duration, + ), + ), + ); void _setVolume(SetVolume event, Emitter emit) => emit( - state.copyWith( - volume: event.value, - isMuted: false, - previousVolume: null, - ), - ); + state.copyWith(volume: event.value, isMuted: false, previousVolume: null), + ); void _toggleMute(ToggleMute event, Emitter emit) { if (state.isMuted) { @@ -94,11 +91,7 @@ class PlaybackBloc extends Bloc { ); } else { emit( - state.copyWith( - isMuted: true, - volume: 0, - previousVolume: state.volume, - ), + state.copyWith(isMuted: true, volume: 0, previousVolume: state.volume), ); } } diff --git a/boring_to_beautiful/final/lib/src/shared/playback/bloc/playback_bloc.freezed.dart b/boring_to_beautiful/final/lib/src/shared/playback/bloc/playback_bloc.freezed.dart index 8a422cd449..54e870ab6f 100644 --- a/boring_to_beautiful/final/lib/src/shared/playback/bloc/playback_bloc.freezed.dart +++ b/boring_to_beautiful/final/lib/src/shared/playback/bloc/playback_bloc.freezed.dart @@ -12,7 +12,8 @@ part of 'playback_bloc.dart'; T _$identity(T value) => value; final _privateConstructorUsedError = UnsupportedError( - 'It seems like you constructed your class using `MyClass._()`. This constructor is only meant to be used by freezed and you are not supposed to need it nor use it.\nPlease check the documentation here for more information: https://github.com/rrousselGit/freezed#adding-getters-and-methods-to-our-models'); + 'It seems like you constructed your class using `MyClass._()`. This constructor is only meant to be used by freezed and you are not supposed to need it nor use it.\nPlease check the documentation here for more information: https://github.com/rrousselGit/freezed#adding-getters-and-methods-to-our-models', +); /// @nodoc mixin _$PlaybackEvent { @@ -24,8 +25,7 @@ mixin _$PlaybackEvent { required TResult Function() toggleMute, required TResult Function(double percent) moveToInSong, required TResult Function(Duration duration) songProgress, - }) => - throw _privateConstructorUsedError; + }) => throw _privateConstructorUsedError; @optionalTypeArgs TResult? whenOrNull({ TResult? Function()? togglePlayPause, @@ -34,8 +34,7 @@ mixin _$PlaybackEvent { TResult? Function()? toggleMute, TResult? Function(double percent)? moveToInSong, TResult? Function(Duration duration)? songProgress, - }) => - throw _privateConstructorUsedError; + }) => throw _privateConstructorUsedError; @optionalTypeArgs TResult maybeWhen({ TResult Function()? togglePlayPause, @@ -45,8 +44,7 @@ mixin _$PlaybackEvent { TResult Function(double percent)? moveToInSong, TResult Function(Duration duration)? songProgress, required TResult orElse(), - }) => - throw _privateConstructorUsedError; + }) => throw _privateConstructorUsedError; @optionalTypeArgs TResult map({ required TResult Function(TogglePlayPause value) togglePlayPause, @@ -55,8 +53,7 @@ mixin _$PlaybackEvent { required TResult Function(ToggleMute value) toggleMute, required TResult Function(MoveToInSong value) moveToInSong, required TResult Function(SongProgress value) songProgress, - }) => - throw _privateConstructorUsedError; + }) => throw _privateConstructorUsedError; @optionalTypeArgs TResult? mapOrNull({ TResult? Function(TogglePlayPause value)? togglePlayPause, @@ -65,8 +62,7 @@ mixin _$PlaybackEvent { TResult? Function(ToggleMute value)? toggleMute, TResult? Function(MoveToInSong value)? moveToInSong, TResult? Function(SongProgress value)? songProgress, - }) => - throw _privateConstructorUsedError; + }) => throw _privateConstructorUsedError; @optionalTypeArgs TResult maybeMap({ TResult Function(TogglePlayPause value)? togglePlayPause, @@ -76,15 +72,15 @@ mixin _$PlaybackEvent { TResult Function(MoveToInSong value)? moveToInSong, TResult Function(SongProgress value)? songProgress, required TResult orElse(), - }) => - throw _privateConstructorUsedError; + }) => throw _privateConstructorUsedError; } /// @nodoc abstract class $PlaybackEventCopyWith<$Res> { factory $PlaybackEventCopyWith( - PlaybackEvent value, $Res Function(PlaybackEvent) then) = - _$PlaybackEventCopyWithImpl<$Res, PlaybackEvent>; + PlaybackEvent value, + $Res Function(PlaybackEvent) then, + ) = _$PlaybackEventCopyWithImpl<$Res, PlaybackEvent>; } /// @nodoc @@ -103,9 +99,10 @@ class _$PlaybackEventCopyWithImpl<$Res, $Val extends PlaybackEvent> /// @nodoc abstract class _$$TogglePlayPauseImplCopyWith<$Res> { - factory _$$TogglePlayPauseImplCopyWith(_$TogglePlayPauseImpl value, - $Res Function(_$TogglePlayPauseImpl) then) = - __$$TogglePlayPauseImplCopyWithImpl<$Res>; + factory _$$TogglePlayPauseImplCopyWith( + _$TogglePlayPauseImpl value, + $Res Function(_$TogglePlayPauseImpl) then, + ) = __$$TogglePlayPauseImplCopyWithImpl<$Res>; } /// @nodoc @@ -113,8 +110,9 @@ class __$$TogglePlayPauseImplCopyWithImpl<$Res> extends _$PlaybackEventCopyWithImpl<$Res, _$TogglePlayPauseImpl> implements _$$TogglePlayPauseImplCopyWith<$Res> { __$$TogglePlayPauseImplCopyWithImpl( - _$TogglePlayPauseImpl _value, $Res Function(_$TogglePlayPauseImpl) _then) - : super(_value, _then); + _$TogglePlayPauseImpl _value, + $Res Function(_$TogglePlayPauseImpl) _then, + ) : super(_value, _then); /// Create a copy of PlaybackEvent /// with the given fields replaced by the non-null parameter values. @@ -233,8 +231,9 @@ abstract class TogglePlayPause implements PlaybackEvent { /// @nodoc abstract class _$$ChangeSongImplCopyWith<$Res> { factory _$$ChangeSongImplCopyWith( - _$ChangeSongImpl value, $Res Function(_$ChangeSongImpl) then) = - __$$ChangeSongImplCopyWithImpl<$Res>; + _$ChangeSongImpl value, + $Res Function(_$ChangeSongImpl) then, + ) = __$$ChangeSongImplCopyWithImpl<$Res>; @useResult $Res call({Song song}); } @@ -244,22 +243,23 @@ class __$$ChangeSongImplCopyWithImpl<$Res> extends _$PlaybackEventCopyWithImpl<$Res, _$ChangeSongImpl> implements _$$ChangeSongImplCopyWith<$Res> { __$$ChangeSongImplCopyWithImpl( - _$ChangeSongImpl _value, $Res Function(_$ChangeSongImpl) _then) - : super(_value, _then); + _$ChangeSongImpl _value, + $Res Function(_$ChangeSongImpl) _then, + ) : super(_value, _then); /// Create a copy of PlaybackEvent /// with the given fields replaced by the non-null parameter values. @pragma('vm:prefer-inline') @override - $Res call({ - Object? song = null, - }) { - return _then(_$ChangeSongImpl( - null == song - ? _value.song - : song // ignore: cast_nullable_to_non_nullable - as Song, - )); + $Res call({Object? song = null}) { + return _then( + _$ChangeSongImpl( + null == song + ? _value.song + : song // ignore: cast_nullable_to_non_nullable + as Song, + ), + ); } } @@ -397,8 +397,9 @@ abstract class ChangeSong implements PlaybackEvent { /// @nodoc abstract class _$$SetVolumeImplCopyWith<$Res> { factory _$$SetVolumeImplCopyWith( - _$SetVolumeImpl value, $Res Function(_$SetVolumeImpl) then) = - __$$SetVolumeImplCopyWithImpl<$Res>; + _$SetVolumeImpl value, + $Res Function(_$SetVolumeImpl) then, + ) = __$$SetVolumeImplCopyWithImpl<$Res>; @useResult $Res call({double value}); } @@ -408,22 +409,23 @@ class __$$SetVolumeImplCopyWithImpl<$Res> extends _$PlaybackEventCopyWithImpl<$Res, _$SetVolumeImpl> implements _$$SetVolumeImplCopyWith<$Res> { __$$SetVolumeImplCopyWithImpl( - _$SetVolumeImpl _value, $Res Function(_$SetVolumeImpl) _then) - : super(_value, _then); + _$SetVolumeImpl _value, + $Res Function(_$SetVolumeImpl) _then, + ) : super(_value, _then); /// Create a copy of PlaybackEvent /// with the given fields replaced by the non-null parameter values. @pragma('vm:prefer-inline') @override - $Res call({ - Object? value = null, - }) { - return _then(_$SetVolumeImpl( - null == value - ? _value.value - : value // ignore: cast_nullable_to_non_nullable - as double, - )); + $Res call({Object? value = null}) { + return _then( + _$SetVolumeImpl( + null == value + ? _value.value + : value // ignore: cast_nullable_to_non_nullable + as double, + ), + ); } } @@ -561,8 +563,9 @@ abstract class SetVolume implements PlaybackEvent { /// @nodoc abstract class _$$ToggleMuteImplCopyWith<$Res> { factory _$$ToggleMuteImplCopyWith( - _$ToggleMuteImpl value, $Res Function(_$ToggleMuteImpl) then) = - __$$ToggleMuteImplCopyWithImpl<$Res>; + _$ToggleMuteImpl value, + $Res Function(_$ToggleMuteImpl) then, + ) = __$$ToggleMuteImplCopyWithImpl<$Res>; } /// @nodoc @@ -570,8 +573,9 @@ class __$$ToggleMuteImplCopyWithImpl<$Res> extends _$PlaybackEventCopyWithImpl<$Res, _$ToggleMuteImpl> implements _$$ToggleMuteImplCopyWith<$Res> { __$$ToggleMuteImplCopyWithImpl( - _$ToggleMuteImpl _value, $Res Function(_$ToggleMuteImpl) _then) - : super(_value, _then); + _$ToggleMuteImpl _value, + $Res Function(_$ToggleMuteImpl) _then, + ) : super(_value, _then); /// Create a copy of PlaybackEvent /// with the given fields replaced by the non-null parameter values. @@ -690,8 +694,9 @@ abstract class ToggleMute implements PlaybackEvent { /// @nodoc abstract class _$$MoveToInSongImplCopyWith<$Res> { factory _$$MoveToInSongImplCopyWith( - _$MoveToInSongImpl value, $Res Function(_$MoveToInSongImpl) then) = - __$$MoveToInSongImplCopyWithImpl<$Res>; + _$MoveToInSongImpl value, + $Res Function(_$MoveToInSongImpl) then, + ) = __$$MoveToInSongImplCopyWithImpl<$Res>; @useResult $Res call({double percent}); } @@ -701,22 +706,23 @@ class __$$MoveToInSongImplCopyWithImpl<$Res> extends _$PlaybackEventCopyWithImpl<$Res, _$MoveToInSongImpl> implements _$$MoveToInSongImplCopyWith<$Res> { __$$MoveToInSongImplCopyWithImpl( - _$MoveToInSongImpl _value, $Res Function(_$MoveToInSongImpl) _then) - : super(_value, _then); + _$MoveToInSongImpl _value, + $Res Function(_$MoveToInSongImpl) _then, + ) : super(_value, _then); /// Create a copy of PlaybackEvent /// with the given fields replaced by the non-null parameter values. @pragma('vm:prefer-inline') @override - $Res call({ - Object? percent = null, - }) { - return _then(_$MoveToInSongImpl( - null == percent - ? _value.percent - : percent // ignore: cast_nullable_to_non_nullable - as double, - )); + $Res call({Object? percent = null}) { + return _then( + _$MoveToInSongImpl( + null == percent + ? _value.percent + : percent // ignore: cast_nullable_to_non_nullable + as double, + ), + ); } } @@ -854,8 +860,9 @@ abstract class MoveToInSong implements PlaybackEvent { /// @nodoc abstract class _$$SongProgressImplCopyWith<$Res> { factory _$$SongProgressImplCopyWith( - _$SongProgressImpl value, $Res Function(_$SongProgressImpl) then) = - __$$SongProgressImplCopyWithImpl<$Res>; + _$SongProgressImpl value, + $Res Function(_$SongProgressImpl) then, + ) = __$$SongProgressImplCopyWithImpl<$Res>; @useResult $Res call({Duration duration}); } @@ -865,22 +872,23 @@ class __$$SongProgressImplCopyWithImpl<$Res> extends _$PlaybackEventCopyWithImpl<$Res, _$SongProgressImpl> implements _$$SongProgressImplCopyWith<$Res> { __$$SongProgressImplCopyWithImpl( - _$SongProgressImpl _value, $Res Function(_$SongProgressImpl) _then) - : super(_value, _then); + _$SongProgressImpl _value, + $Res Function(_$SongProgressImpl) _then, + ) : super(_value, _then); /// Create a copy of PlaybackEvent /// with the given fields replaced by the non-null parameter values. @pragma('vm:prefer-inline') @override - $Res call({ - Object? duration = null, - }) { - return _then(_$SongProgressImpl( - null == duration - ? _value.duration - : duration // ignore: cast_nullable_to_non_nullable - as Duration, - )); + $Res call({Object? duration = null}) { + return _then( + _$SongProgressImpl( + null == duration + ? _value.duration + : duration // ignore: cast_nullable_to_non_nullable + as Duration, + ), + ); } } @@ -1037,15 +1045,17 @@ mixin _$PlaybackState { /// @nodoc abstract class $PlaybackStateCopyWith<$Res> { factory $PlaybackStateCopyWith( - PlaybackState value, $Res Function(PlaybackState) then) = - _$PlaybackStateCopyWithImpl<$Res, PlaybackState>; + PlaybackState value, + $Res Function(PlaybackState) then, + ) = _$PlaybackStateCopyWithImpl<$Res, PlaybackState>; @useResult - $Res call( - {double volume, - double? previousVolume, - bool isMuted, - bool isPlaying, - SongWithProgress? songWithProgress}); + $Res call({ + double volume, + double? previousVolume, + bool isMuted, + bool isPlaying, + SongWithProgress? songWithProgress, + }); $SongWithProgressCopyWith<$Res>? get songWithProgress; } @@ -1071,28 +1081,36 @@ class _$PlaybackStateCopyWithImpl<$Res, $Val extends PlaybackState> Object? isPlaying = null, Object? songWithProgress = freezed, }) { - return _then(_value.copyWith( - volume: null == volume - ? _value.volume - : volume // ignore: cast_nullable_to_non_nullable - as double, - previousVolume: freezed == previousVolume - ? _value.previousVolume - : previousVolume // ignore: cast_nullable_to_non_nullable - as double?, - isMuted: null == isMuted - ? _value.isMuted - : isMuted // ignore: cast_nullable_to_non_nullable - as bool, - isPlaying: null == isPlaying - ? _value.isPlaying - : isPlaying // ignore: cast_nullable_to_non_nullable - as bool, - songWithProgress: freezed == songWithProgress - ? _value.songWithProgress - : songWithProgress // ignore: cast_nullable_to_non_nullable - as SongWithProgress?, - ) as $Val); + return _then( + _value.copyWith( + volume: + null == volume + ? _value.volume + : volume // ignore: cast_nullable_to_non_nullable + as double, + previousVolume: + freezed == previousVolume + ? _value.previousVolume + : previousVolume // ignore: cast_nullable_to_non_nullable + as double?, + isMuted: + null == isMuted + ? _value.isMuted + : isMuted // ignore: cast_nullable_to_non_nullable + as bool, + isPlaying: + null == isPlaying + ? _value.isPlaying + : isPlaying // ignore: cast_nullable_to_non_nullable + as bool, + songWithProgress: + freezed == songWithProgress + ? _value.songWithProgress + : songWithProgress // ignore: cast_nullable_to_non_nullable + as SongWithProgress?, + ) + as $Val, + ); } /// Create a copy of PlaybackState @@ -1114,16 +1132,18 @@ class _$PlaybackStateCopyWithImpl<$Res, $Val extends PlaybackState> abstract class _$$PlaybackStateImplCopyWith<$Res> implements $PlaybackStateCopyWith<$Res> { factory _$$PlaybackStateImplCopyWith( - _$PlaybackStateImpl value, $Res Function(_$PlaybackStateImpl) then) = - __$$PlaybackStateImplCopyWithImpl<$Res>; + _$PlaybackStateImpl value, + $Res Function(_$PlaybackStateImpl) then, + ) = __$$PlaybackStateImplCopyWithImpl<$Res>; @override @useResult - $Res call( - {double volume, - double? previousVolume, - bool isMuted, - bool isPlaying, - SongWithProgress? songWithProgress}); + $Res call({ + double volume, + double? previousVolume, + bool isMuted, + bool isPlaying, + SongWithProgress? songWithProgress, + }); @override $SongWithProgressCopyWith<$Res>? get songWithProgress; @@ -1134,8 +1154,9 @@ class __$$PlaybackStateImplCopyWithImpl<$Res> extends _$PlaybackStateCopyWithImpl<$Res, _$PlaybackStateImpl> implements _$$PlaybackStateImplCopyWith<$Res> { __$$PlaybackStateImplCopyWithImpl( - _$PlaybackStateImpl _value, $Res Function(_$PlaybackStateImpl) _then) - : super(_value, _then); + _$PlaybackStateImpl _value, + $Res Function(_$PlaybackStateImpl) _then, + ) : super(_value, _then); /// Create a copy of PlaybackState /// with the given fields replaced by the non-null parameter values. @@ -1148,40 +1169,48 @@ class __$$PlaybackStateImplCopyWithImpl<$Res> Object? isPlaying = null, Object? songWithProgress = freezed, }) { - return _then(_$PlaybackStateImpl( - volume: null == volume - ? _value.volume - : volume // ignore: cast_nullable_to_non_nullable - as double, - previousVolume: freezed == previousVolume - ? _value.previousVolume - : previousVolume // ignore: cast_nullable_to_non_nullable - as double?, - isMuted: null == isMuted - ? _value.isMuted - : isMuted // ignore: cast_nullable_to_non_nullable - as bool, - isPlaying: null == isPlaying - ? _value.isPlaying - : isPlaying // ignore: cast_nullable_to_non_nullable - as bool, - songWithProgress: freezed == songWithProgress - ? _value.songWithProgress - : songWithProgress // ignore: cast_nullable_to_non_nullable - as SongWithProgress?, - )); + return _then( + _$PlaybackStateImpl( + volume: + null == volume + ? _value.volume + : volume // ignore: cast_nullable_to_non_nullable + as double, + previousVolume: + freezed == previousVolume + ? _value.previousVolume + : previousVolume // ignore: cast_nullable_to_non_nullable + as double?, + isMuted: + null == isMuted + ? _value.isMuted + : isMuted // ignore: cast_nullable_to_non_nullable + as bool, + isPlaying: + null == isPlaying + ? _value.isPlaying + : isPlaying // ignore: cast_nullable_to_non_nullable + as bool, + songWithProgress: + freezed == songWithProgress + ? _value.songWithProgress + : songWithProgress // ignore: cast_nullable_to_non_nullable + as SongWithProgress?, + ), + ); } } /// @nodoc class _$PlaybackStateImpl implements _PlaybackState { - const _$PlaybackStateImpl( - {this.volume = 0.5, - this.previousVolume, - this.isMuted = false, - this.isPlaying = false, - this.songWithProgress}); + const _$PlaybackStateImpl({ + this.volume = 0.5, + this.previousVolume, + this.isMuted = false, + this.isPlaying = false, + this.songWithProgress, + }); /// Legal values are between 0 and 1. @override @@ -1221,8 +1250,14 @@ class _$PlaybackStateImpl implements _PlaybackState { } @override - int get hashCode => Object.hash(runtimeType, volume, previousVolume, isMuted, - isPlaying, songWithProgress); + int get hashCode => Object.hash( + runtimeType, + volume, + previousVolume, + isMuted, + isPlaying, + songWithProgress, + ); /// Create a copy of PlaybackState /// with the given fields replaced by the non-null parameter values. @@ -1234,12 +1269,13 @@ class _$PlaybackStateImpl implements _PlaybackState { } abstract class _PlaybackState implements PlaybackState { - const factory _PlaybackState( - {final double volume, - final double? previousVolume, - final bool isMuted, - final bool isPlaying, - final SongWithProgress? songWithProgress}) = _$PlaybackStateImpl; + const factory _PlaybackState({ + final double volume, + final double? previousVolume, + final bool isMuted, + final bool isPlaying, + final SongWithProgress? songWithProgress, + }) = _$PlaybackStateImpl; /// Legal values are between 0 and 1. @override @@ -1278,8 +1314,9 @@ mixin _$SongWithProgress { /// @nodoc abstract class $SongWithProgressCopyWith<$Res> { factory $SongWithProgressCopyWith( - SongWithProgress value, $Res Function(SongWithProgress) then) = - _$SongWithProgressCopyWithImpl<$Res, SongWithProgress>; + SongWithProgress value, + $Res Function(SongWithProgress) then, + ) = _$SongWithProgressCopyWithImpl<$Res, SongWithProgress>; @useResult $Res call({Duration progress, Song song}); } @@ -1298,29 +1335,32 @@ class _$SongWithProgressCopyWithImpl<$Res, $Val extends SongWithProgress> /// with the given fields replaced by the non-null parameter values. @pragma('vm:prefer-inline') @override - $Res call({ - Object? progress = null, - Object? song = null, - }) { - return _then(_value.copyWith( - progress: null == progress - ? _value.progress - : progress // ignore: cast_nullable_to_non_nullable - as Duration, - song: null == song - ? _value.song - : song // ignore: cast_nullable_to_non_nullable - as Song, - ) as $Val); + $Res call({Object? progress = null, Object? song = null}) { + return _then( + _value.copyWith( + progress: + null == progress + ? _value.progress + : progress // ignore: cast_nullable_to_non_nullable + as Duration, + song: + null == song + ? _value.song + : song // ignore: cast_nullable_to_non_nullable + as Song, + ) + as $Val, + ); } } /// @nodoc abstract class _$$SongWithProgressImplCopyWith<$Res> implements $SongWithProgressCopyWith<$Res> { - factory _$$SongWithProgressImplCopyWith(_$SongWithProgressImpl value, - $Res Function(_$SongWithProgressImpl) then) = - __$$SongWithProgressImplCopyWithImpl<$Res>; + factory _$$SongWithProgressImplCopyWith( + _$SongWithProgressImpl value, + $Res Function(_$SongWithProgressImpl) then, + ) = __$$SongWithProgressImplCopyWithImpl<$Res>; @override @useResult $Res call({Duration progress, Song song}); @@ -1330,28 +1370,30 @@ abstract class _$$SongWithProgressImplCopyWith<$Res> class __$$SongWithProgressImplCopyWithImpl<$Res> extends _$SongWithProgressCopyWithImpl<$Res, _$SongWithProgressImpl> implements _$$SongWithProgressImplCopyWith<$Res> { - __$$SongWithProgressImplCopyWithImpl(_$SongWithProgressImpl _value, - $Res Function(_$SongWithProgressImpl) _then) - : super(_value, _then); + __$$SongWithProgressImplCopyWithImpl( + _$SongWithProgressImpl _value, + $Res Function(_$SongWithProgressImpl) _then, + ) : super(_value, _then); /// Create a copy of SongWithProgress /// with the given fields replaced by the non-null parameter values. @pragma('vm:prefer-inline') @override - $Res call({ - Object? progress = null, - Object? song = null, - }) { - return _then(_$SongWithProgressImpl( - progress: null == progress - ? _value.progress - : progress // ignore: cast_nullable_to_non_nullable - as Duration, - song: null == song - ? _value.song - : song // ignore: cast_nullable_to_non_nullable - as Song, - )); + $Res call({Object? progress = null, Object? song = null}) { + return _then( + _$SongWithProgressImpl( + progress: + null == progress + ? _value.progress + : progress // ignore: cast_nullable_to_non_nullable + as Duration, + song: + null == song + ? _value.song + : song // ignore: cast_nullable_to_non_nullable + as Song, + ), + ); } } @@ -1390,13 +1432,16 @@ class _$SongWithProgressImpl implements _SongWithProgress { @pragma('vm:prefer-inline') _$$SongWithProgressImplCopyWith<_$SongWithProgressImpl> get copyWith => __$$SongWithProgressImplCopyWithImpl<_$SongWithProgressImpl>( - this, _$identity); + this, + _$identity, + ); } abstract class _SongWithProgress implements SongWithProgress { - const factory _SongWithProgress( - {required final Duration progress, - required final Song song}) = _$SongWithProgressImpl; + const factory _SongWithProgress({ + required final Duration progress, + required final Song song, + }) = _$SongWithProgressImpl; @override Duration get progress; diff --git a/boring_to_beautiful/final/lib/src/shared/providers/artists.dart b/boring_to_beautiful/final/lib/src/shared/providers/artists.dart index d116ad9cdd..f9e4a8063e 100644 --- a/boring_to_beautiful/final/lib/src/shared/providers/artists.dart +++ b/boring_to_beautiful/final/lib/src/shared/providers/artists.dart @@ -11,162 +11,175 @@ class ArtistsProvider { static ArtistsProvider get shared => ArtistsProvider(); List get artists => const [ - Artist( - id: 'jmo', - name: 'Jessie Morrison', + Artist( + id: 'jmo', + name: 'Jessie Morrison', + image: MyArtistImage( + image: 'assets/images/artists/woman.jpeg', + sourceLink: 'https://unsplash.com/photos/w8wpFqiMpW8', + sourceName: 'Daniel Monteiro', + ), + bio: + 'Jessie "JMo" Morrison is an American singer, actress, and dancer. The following year she won over America\'s hearts first appearing in the 2004 movie Unexpected Engagement. Soon after she released her debut album, Hopeful Romantics.', + updates: [ + 'So happy that everyone is loving the new music! It\'s been my pride and joy to work on and I\'m thrilled that you finally get to hear it!', + 'Happy Valentine\'s Day y\'all!!! I love each and every one of you 💋😘', + '#HappyGalentinesDay!!! Chocolates. Ice Cream. Your favorite rom-com. Let\'s goo!!! 💕✨', + ], + events: [ + Event( + date: '1/20/22', + title: 'Jessie Morrison: No More Heartbreak Tour', + location: 'Mountain View, California', + link: 'Tickets', + ), + Event( + date: '1/22/22', + title: 'Jessie Morrison: No More Heartbreak Tour', + location: 'Austin, Texas', + link: 'Tickets', + ), + Event( + date: '1/23/22', + title: 'Jessie Morrison: No More Heartbreak Tour', + location: 'Houston, Texas', + link: 'Tickets', + ), + Event( + date: '2/8/22', + title: 'Jessie Morrison: No More Heartbreak Tour', + location: 'Los Angeles, California', + link: 'Tickets', + ), + ], + news: [ + News( + title: + 'Jessie Morrison a 26-stop cross country tour for the first time in 6 years.', + author: 'By Jacqueline Stewart', + blurb: + 'Our favorite triple-threat Jessie Morrison is back, this time with a 26 stop tour across the country. She\'ll kick things off in Mountain View on January 20th, 2022 in Mountain View California with more stops being announced over the next few weeks...', image: MyArtistImage( - image: 'assets/images/artists/woman.jpeg', - sourceLink: 'https://unsplash.com/photos/w8wpFqiMpW8', - sourceName: 'Daniel Monteiro', + image: 'assets/images/news/concert.jpeg', + sourceLink: 'https://unsplash.com/photos/hzgs56Ze49s', + sourceName: 'Anthony DELANOIX', ), - bio: - 'Jessie "JMo" Morrison is an American singer, actress, and dancer. The following year she won over America\'s hearts first appearing in the 2004 movie Unexpected Engagement. Soon after she released her debut album, Hopeful Romantics.', - updates: [ - 'So happy that everyone is loving the new music! It\'s been my pride and joy to work on and I\'m thrilled that you finally get to hear it!', - 'Happy Valentine\'s Day y\'all!!! I love each and every one of you 💋😘', - '#HappyGalentinesDay!!! Chocolates. Ice Cream. Your favorite rom-com. Let\'s goo!!! 💕✨', - ], - events: [ - Event( - date: '1/20/22', - title: 'Jessie Morrison: No More Heartbreak Tour', - location: 'Mountain View, California', - link: 'Tickets'), - Event( - date: '1/22/22', - title: 'Jessie Morrison: No More Heartbreak Tour', - location: 'Austin, Texas', - link: 'Tickets'), - Event( - date: '1/23/22', - title: 'Jessie Morrison: No More Heartbreak Tour', - location: 'Houston, Texas', - link: 'Tickets'), - Event( - date: '2/8/22', - title: 'Jessie Morrison: No More Heartbreak Tour', - location: 'Los Angeles, California', - link: 'Tickets'), - ], - news: [ - News( - title: - 'Jessie Morrison a 26-stop cross country tour for the first time in 6 years.', - author: 'By Jacqueline Stewart', - blurb: - 'Our favorite triple-threat Jessie Morrison is back, this time with a 26 stop tour across the country. She\'ll kick things off in Mountain View on January 20th, 2022 in Mountain View California with more stops being announced over the next few weeks...', - image: MyArtistImage( - image: 'assets/images/news/concert.jpeg', - sourceLink: 'https://unsplash.com/photos/hzgs56Ze49s', - sourceName: 'Anthony DELANOIX', - ), - ) - ], ), - Artist( - id: 'lb', - name: 'Lucas Bryant', + ], + ), + Artist( + id: 'lb', + name: 'Lucas Bryant', + image: MyArtistImage( + image: 'assets/images/albums/artist1-album2.jpg', + sourceLink: 'https://unsplash.com/photos/6etHcucBiRg', + sourceName: 'Keagan Henman', + ), + bio: + 'Lucas Bryant is an American country music singer and songwriter. He moved to Nashville at the age of 18 to pursue his country music career. With 34 awards to his name, he currently holds the record for most awards in country music.', + updates: [ + 'Who\'s ready to party this weekend?! See you tomorrow, Nashville! #LBlive', + 'Can\'t wait to get back on stage after so long. What songs do you want to hear?', + 'We\'re going all in this weekend! How are you doing, Vegas?!', + ], + events: [ + Event( + date: '5/16/22', + title: 'Back To My Hometown Tour', + location: 'Indianapolis, IN', + link: 'Tickets', + ), + Event( + date: '5/18/22', + title: 'Back To My Hometown Tour', + location: 'San Antonio, TX', + link: 'Tickets', + ), + Event( + date: '5/20/22', + title: 'Back To My Hometown Tour', + location: 'Phoenix, AZ', + link: 'Tickets', + ), + Event( + date: '5/23/22', + title: 'Back To My Hometown Tour', + location: 'San Diego, CA', + link: 'Tickets', + ), + ], + news: [ + News( + title: + 'Country Music Favorites Lucas Bryant, Mariam Lubbock, Michelle Delaney and Jackson Murray Join Forces For The Biggest Performance in Country History.', + author: 'Lonnie Hall', + blurb: + 'Calling all country music fans! Fasten your seat belts because the 2022 Best of Country Awards is expecting a huge performance from some of our favorite artists. Country music legends Mariam Lubbock and Jackson Murray will be joined by Lucas Bryant and Michelle Delaney for a performance we\'ll never forget.', image: MyArtistImage( image: 'assets/images/albums/artist1-album2.jpg', sourceLink: 'https://unsplash.com/photos/6etHcucBiRg', sourceName: 'Keagan Henman', ), - bio: - 'Lucas Bryant is an American country music singer and songwriter. He moved to Nashville at the age of 18 to pursue his country music career. With 34 awards to his name, he currently holds the record for most awards in country music.', - updates: [ - 'Who\'s ready to party this weekend?! See you tomorrow, Nashville! #LBlive', - 'Can\'t wait to get back on stage after so long. What songs do you want to hear?', - 'We\'re going all in this weekend! How are you doing, Vegas?!', - ], - events: [ - Event( - date: '5/16/22', - title: 'Back To My Hometown Tour', - location: 'Indianapolis, IN', - link: 'Tickets'), - Event( - date: '5/18/22', - title: 'Back To My Hometown Tour', - location: 'San Antonio, TX', - link: 'Tickets'), - Event( - date: '5/20/22', - title: 'Back To My Hometown Tour', - location: 'Phoenix, AZ', - link: 'Tickets'), - Event( - date: '5/23/22', - title: 'Back To My Hometown Tour', - location: 'San Diego, CA', - link: 'Tickets'), - ], - news: [ - News( - title: - 'Country Music Favorites Lucas Bryant, Mariam Lubbock, Michelle Delaney and Jackson Murray Join Forces For The Biggest Performance in Country History.', - author: 'Lonnie Hall', - blurb: - 'Calling all country music fans! Fasten your seat belts because the 2022 Best of Country Awards is expecting a huge performance from some of our favorite artists. Country music legends Mariam Lubbock and Jackson Murray will be joined by Lucas Bryant and Michelle Delaney for a performance we\'ll never forget.', - image: MyArtistImage( - image: 'assets/images/albums/artist1-album2.jpg', - sourceLink: 'https://unsplash.com/photos/6etHcucBiRg', - sourceName: 'Keagan Henman', - ), - ), - ], ), - Artist( - id: 'jonjames', - name: 'Jon James', + ], + ), + Artist( + id: 'jonjames', + name: 'Jon James', + image: MyArtistImage( + image: 'assets/images/artists/joe.jpg', + sourceLink: 'https://unsplash.com/photos/k7UKO-tT5QU', + sourceName: 'Natalie Runnerstrom', + ), + bio: + 'Jon James is an American singer and songwriter. He\'s best known for his number one single "Never Going Back" which stayed atop the charts for 10 weeks.', + updates: [ + '3. MORE. DAYS. Who\'s ready for #FallingForYou?! Tune in tomorrow to see the full track list!', + '4 days until I get to share some of the favorite songs I\'ve ever written with you.', + '#FallingForYou dropping in 5 days! Send me your favorite music video concepts 🎥 😎', + ], + events: [ + Event( + date: '10/22/21', + title: 'Falling For You Tour', + location: 'Dallas, Texas', + link: 'Ticketmaster', + ), + Event( + date: '10/23/21', + title: 'Falling For You Tour', + location: 'Houston, Texas', + link: 'Ticketmaster', + ), + Event( + date: '10/26/21', + title: 'Falling For You Tour', + location: 'Phoenix, Arizona', + link: 'Ticketmaster', + ), + Event( + date: '10/27/21', + title: 'Falling For You Tour', + location: 'Los Angeles, California', + link: 'Ticketmaster', + ), + ], + news: [ + News( + title: + 'Jon James is excited for the release of his sixth album "Falling For You"', + author: 'Top Media Today', + blurb: + 'Jon James will be dropping his new album "Falling For You" on Friday to much fan excitement. The 6-time Grammy winning artist has spent the last year writing and recording for this album that\'s been dubbed "his best work yet."', image: MyArtistImage( - image: 'assets/images/artists/joe.jpg', - sourceLink: 'https://unsplash.com/photos/k7UKO-tT5QU', - sourceName: 'Natalie Runnerstrom', + image: 'assets/images/news/recording_studio.jpg', + sourceLink: 'https://unsplash.com/photos/CbOGmLA46JI', + sourceName: 'Yohann LIBOT', ), - bio: - 'Jon James is an American singer and songwriter. He\'s best known for his number one single "Never Going Back" which stayed atop the charts for 10 weeks.', - updates: [ - '3. MORE. DAYS. Who\'s ready for #FallingForYou?! Tune in tomorrow to see the full track list!', - '4 days until I get to share some of the favorite songs I\'ve ever written with you.', - '#FallingForYou dropping in 5 days! Send me your favorite music video concepts 🎥 😎', - ], - events: [ - Event( - date: '10/22/21', - title: 'Falling For You Tour', - location: 'Dallas, Texas', - link: 'Ticketmaster'), - Event( - date: '10/23/21', - title: 'Falling For You Tour', - location: 'Houston, Texas', - link: 'Ticketmaster'), - Event( - date: '10/26/21', - title: 'Falling For You Tour', - location: 'Phoenix, Arizona', - link: 'Ticketmaster'), - Event( - date: '10/27/21', - title: 'Falling For You Tour', - location: 'Los Angeles, California', - link: 'Ticketmaster'), - ], - news: [ - News( - title: - 'Jon James is excited for the release of his sixth album "Falling For You"', - author: 'Top Media Today', - blurb: - 'Jon James will be dropping his new album "Falling For You" on Friday to much fan excitement. The 6-time Grammy winning artist has spent the last year writing and recording for this album that\'s been dubbed "his best work yet."', - image: MyArtistImage( - image: 'assets/images/news/recording_studio.jpg', - sourceLink: 'https://unsplash.com/photos/CbOGmLA46JI', - sourceName: 'Yohann LIBOT'), - ) - ], ), - ]; + ], + ), + ]; Artist? getArtist(String id) { return artists.firstWhereOrNull((artist) => artist.id == id); diff --git a/boring_to_beautiful/final/lib/src/shared/providers/playlists.dart b/boring_to_beautiful/final/lib/src/shared/providers/playlists.dart index e8bab994dd..f27f71b3ec 100644 --- a/boring_to_beautiful/final/lib/src/shared/providers/playlists.dart +++ b/boring_to_beautiful/final/lib/src/shared/providers/playlists.dart @@ -18,41 +18,50 @@ class PlaylistsProvider { static List images() { return [ const MyArtistImage( - image: 'assets/images/playlists/favorite.jpg', - sourceLink: 'https://unsplash.com/photos/60GsdOMRFGc', - sourceName: 'Karsten Winegeart'), + image: 'assets/images/playlists/favorite.jpg', + sourceLink: 'https://unsplash.com/photos/60GsdOMRFGc', + sourceName: 'Karsten Winegeart', + ), const MyArtistImage( - image: 'assets/images/playlists/austin.jpg', - sourceLink: 'https://unsplash.com/photos/AlBgcDfDG_s', - sourceName: 'Carlos Alfonso'), + image: 'assets/images/playlists/austin.jpg', + sourceLink: 'https://unsplash.com/photos/AlBgcDfDG_s', + sourceName: 'Carlos Alfonso', + ), const MyArtistImage( - image: 'assets/images/playlists/reading.jpg', - sourceLink: 'https://unsplash.com/photos/wkgv7I2VTzM', - sourceName: 'Alexandra Fuller'), + image: 'assets/images/playlists/reading.jpg', + sourceLink: 'https://unsplash.com/photos/wkgv7I2VTzM', + sourceName: 'Alexandra Fuller', + ), const MyArtistImage( - image: 'assets/images/playlists/workout.jpg', - sourceLink: 'https://unsplash.com/photos/CnEEF5eJemQ', - sourceName: 'Karsten Winegeart'), + image: 'assets/images/playlists/workout.jpg', + sourceLink: 'https://unsplash.com/photos/CnEEF5eJemQ', + sourceName: 'Karsten Winegeart', + ), const MyArtistImage( - image: 'assets/images/playlists/calm.jpg', - sourceLink: 'https://unsplash.com/photos/NTyBbu66_SI', - sourceName: 'Jared Rice'), + image: 'assets/images/playlists/calm.jpg', + sourceLink: 'https://unsplash.com/photos/NTyBbu66_SI', + sourceName: 'Jared Rice', + ), const MyArtistImage( - image: 'assets/images/playlists/coffee.jpg', - sourceLink: 'https://unsplash.com/photos/XOhI_kW_TaM', - sourceName: 'Nathan Dumlao'), + image: 'assets/images/playlists/coffee.jpg', + sourceLink: 'https://unsplash.com/photos/XOhI_kW_TaM', + sourceName: 'Nathan Dumlao', + ), const MyArtistImage( - image: 'assets/images/playlists/piano.jpg', - sourceLink: 'https://unsplash.com/photos/BhfE1IgcsA8', - sourceName: 'Jordan Whitfield'), + image: 'assets/images/playlists/piano.jpg', + sourceLink: 'https://unsplash.com/photos/BhfE1IgcsA8', + sourceName: 'Jordan Whitfield', + ), const MyArtistImage( - image: 'assets/images/playlists/studying.jpg', - sourceLink: 'https://unsplash.com/photos/-moT-Deiw1M', - sourceName: 'Humble Lamb'), + image: 'assets/images/playlists/studying.jpg', + sourceLink: 'https://unsplash.com/photos/-moT-Deiw1M', + sourceName: 'Humble Lamb', + ), const MyArtistImage( - image: 'assets/images/playlists/jazz.jpg', - sourceLink: 'https://unsplash.com/photos/BY_KyTwTKq4', - sourceName: 'dimitri.photography'), + image: 'assets/images/playlists/jazz.jpg', + sourceLink: 'https://unsplash.com/photos/BY_KyTwTKq4', + sourceName: 'dimitri.photography', + ), ]; } @@ -85,8 +94,10 @@ class PlaylistsProvider { ); } - static final List _randomPlaylists = - List.generate(10, (index) => randomLengthPlaylist()); + static final List _randomPlaylists = List.generate( + 10, + (index) => randomLengthPlaylist(), + ); } String randomId() { diff --git a/boring_to_beautiful/final/lib/src/shared/providers/songs.dart b/boring_to_beautiful/final/lib/src/shared/providers/songs.dart index ed018a83ff..f1205f2dcb 100644 --- a/boring_to_beautiful/final/lib/src/shared/providers/songs.dart +++ b/boring_to_beautiful/final/lib/src/shared/providers/songs.dart @@ -52,9 +52,10 @@ final _songs = [ ArtistsProvider.shared.getArtist('jonjames')!, '3:35'.toDuration(), const MyArtistImage( - image: 'assets/images/albums/artist4-album2.jpg', - sourceLink: 'https://unsplash.com/photos/RQgKM1h2agA', - sourceName: 'Alexandru Acea'), + image: 'assets/images/albums/artist4-album2.jpg', + sourceLink: 'https://unsplash.com/photos/RQgKM1h2agA', + sourceName: 'Alexandru Acea', + ), ), RankedSong( 2, @@ -62,9 +63,10 @@ final _songs = [ ArtistsProvider.shared.getArtist('jonjames')!, '3:52'.toDuration(), const MyArtistImage( - image: 'assets/images/albums/artist4-album1.jpg', - sourceLink: 'https://unsplash.com/photos/ZWDg7v2FPWE', - sourceName: 'Jr Korpa'), + image: 'assets/images/albums/artist4-album1.jpg', + sourceLink: 'https://unsplash.com/photos/ZWDg7v2FPWE', + sourceName: 'Jr Korpa', + ), ), RankedSong( 3, @@ -72,9 +74,10 @@ final _songs = [ ArtistsProvider.shared.getArtist('jonjames')!, '3:39'.toDuration(), const MyArtistImage( - image: 'assets/images/albums/artist4-album3.jpg', - sourceLink: 'https://unsplash.com/photos/rX12B5uX7QM', - sourceName: 'Stormseeker'), + image: 'assets/images/albums/artist4-album3.jpg', + sourceLink: 'https://unsplash.com/photos/rX12B5uX7QM', + sourceName: 'Stormseeker', + ), ), RankedSong( 1, diff --git a/boring_to_beautiful/final/lib/src/shared/providers/theme.dart b/boring_to_beautiful/final/lib/src/shared/providers/theme.dart index 2446038ddd..66227afc83 100644 --- a/boring_to_beautiful/final/lib/src/shared/providers/theme.dart +++ b/boring_to_beautiful/final/lib/src/shared/providers/theme.dart @@ -28,12 +28,13 @@ class ThemeSettingChange extends Notification { } class ThemeProvider extends InheritedWidget { - const ThemeProvider( - {super.key, - required this.settings, - required this.lightDynamic, - required this.darkDynamic, - required super.child}); + const ThemeProvider({ + super.key, + required this.settings, + required this.lightDynamic, + required this.darkDynamic, + required super.child, + }); final ValueNotifier settings; final ColorScheme? lightDynamic; @@ -59,8 +60,9 @@ class ThemeProvider extends InheritedWidget { Color blend(Color targetColor) { return Color( - // ignore: deprecated_member_use - Blend.harmonize(targetColor.value, settings.value.sourceColor.value)); + // ignore: deprecated_member_use + Blend.harmonize(targetColor.value, settings.value.sourceColor.value), + ); } Color source(Color? target) { @@ -72,18 +74,18 @@ class ThemeProvider extends InheritedWidget { } ColorScheme colors(Brightness brightness, Color? targetColor) { - final dynamicPrimary = brightness == Brightness.light - ? lightDynamic?.primary - : darkDynamic?.primary; + final dynamicPrimary = + brightness == Brightness.light + ? lightDynamic?.primary + : darkDynamic?.primary; return ColorScheme.fromSeed( seedColor: dynamicPrimary ?? source(targetColor), brightness: brightness, ); } - ShapeBorder get shapeMedium => RoundedRectangleBorder( - borderRadius: BorderRadius.circular(8), - ); + ShapeBorder get shapeMedium => + RoundedRectangleBorder(borderRadius: BorderRadius.circular(8)); CardTheme cardTheme() { return CardTheme( @@ -113,21 +115,13 @@ class ThemeProvider extends InheritedWidget { labelColor: colors.secondary, unselectedLabelColor: colors.onSurfaceVariant, indicator: BoxDecoration( - border: Border( - bottom: BorderSide( - color: colors.secondary, - width: 2, - ), - ), + border: Border(bottom: BorderSide(color: colors.secondary, width: 2)), ), ); } BottomAppBarTheme bottomAppBarTheme(ColorScheme colors) { - return BottomAppBarTheme( - color: colors.surface, - elevation: 0, - ); + return BottomAppBarTheme(color: colors.surface, elevation: 0); } BottomNavigationBarThemeData bottomNavigationBarTheme(ColorScheme colors) { @@ -146,9 +140,7 @@ class ThemeProvider extends InheritedWidget { } DrawerThemeData drawerTheme(ColorScheme colors) { - return DrawerThemeData( - backgroundColor: colors.surface, - ); + return DrawerThemeData(backgroundColor: colors.surface); } ThemeData light([Color? targetColor]) { @@ -207,10 +199,7 @@ class ThemeProvider extends InheritedWidget { } class ThemeSettings { - ThemeSettings({ - required this.sourceColor, - required this.themeMode, - }); + ThemeSettings({required this.sourceColor, required this.themeMode}); final Color sourceColor; final ThemeMode themeMode; @@ -221,10 +210,7 @@ Color randomColor() { } // Custom Colors -const linkColor = CustomColor( - name: 'Link Color', - color: Color(0xFF00B0FF), -); +const linkColor = CustomColor(name: 'Link Color', color: Color(0xFF00B0FF)); class CustomColor { const CustomColor({ diff --git a/boring_to_beautiful/final/lib/src/shared/router.dart b/boring_to_beautiful/final/lib/src/shared/router.dart index 3efb7362fa..db82627246 100644 --- a/boring_to_beautiful/final/lib/src/shared/router.dart +++ b/boring_to_beautiful/final/lib/src/shared/router.dart @@ -20,11 +20,7 @@ final artistsProvider = ArtistsProvider(); final playlistsProvider = PlaylistsProvider(); const List destinations = [ - NavigationDestination( - label: 'Home', - icon: Icon(Icons.home), - route: '/', - ), + NavigationDestination(label: 'Home', icon: Icon(Icons.home), route: '/'), NavigationDestination( label: 'Playlists', icon: Icon(Icons.playlist_add_check), @@ -56,41 +52,46 @@ final appRouter = GoRouter( // HomeScreen GoRoute( path: '/', - pageBuilder: (context, state) => const MaterialPage( - key: _pageKey, - child: RootLayout( - key: _scaffoldKey, - currentIndex: 0, - child: HomeScreen(), - ), - ), + pageBuilder: + (context, state) => const MaterialPage( + key: _pageKey, + child: RootLayout( + key: _scaffoldKey, + currentIndex: 0, + child: HomeScreen(), + ), + ), ), // PlaylistHomeScreen GoRoute( path: '/playlists', - pageBuilder: (context, state) => const MaterialPage( - key: _pageKey, - child: RootLayout( - key: _scaffoldKey, - currentIndex: 1, - child: PlaylistHomeScreen(), - ), - ), - routes: [ - GoRoute( - path: ':pid', - pageBuilder: (context, state) => MaterialPage( - key: state.pageKey, + pageBuilder: + (context, state) => const MaterialPage( + key: _pageKey, child: RootLayout( key: _scaffoldKey, currentIndex: 1, - child: PlaylistScreen( - playlist: playlistsProvider - .getPlaylist(state.pathParameters['pid']!)!, - ), + child: PlaylistHomeScreen(), ), ), + routes: [ + GoRoute( + path: ':pid', + pageBuilder: + (context, state) => MaterialPage( + key: state.pageKey, + child: RootLayout( + key: _scaffoldKey, + currentIndex: 1, + child: PlaylistScreen( + playlist: + playlistsProvider.getPlaylist( + state.pathParameters['pid']!, + )!, + ), + ), + ), ), ], ), @@ -98,28 +99,32 @@ final appRouter = GoRouter( // ArtistHomeScreen GoRoute( path: '/artists', - pageBuilder: (context, state) => const MaterialPage( - key: _pageKey, - child: RootLayout( - key: _scaffoldKey, - currentIndex: 2, - child: ArtistsScreen(), - ), - ), - routes: [ - GoRoute( - path: ':aid', - pageBuilder: (context, state) => MaterialPage( - key: state.pageKey, + pageBuilder: + (context, state) => const MaterialPage( + key: _pageKey, child: RootLayout( key: _scaffoldKey, currentIndex: 2, - child: ArtistScreen( - artist: - artistsProvider.getArtist(state.pathParameters['aid']!)!, - ), + child: ArtistsScreen(), ), ), + routes: [ + GoRoute( + path: ':aid', + pageBuilder: + (context, state) => MaterialPage( + key: state.pageKey, + child: RootLayout( + key: _scaffoldKey, + currentIndex: 2, + child: ArtistScreen( + artist: + artistsProvider.getArtist( + state.pathParameters['aid']!, + )!, + ), + ), + ), // builder: (context, state) => ArtistScreen( // id: state.params['aid']!, // ), @@ -129,14 +134,15 @@ final appRouter = GoRouter( for (final route in destinations.skip(3)) GoRoute( path: route.route, - pageBuilder: (context, state) => MaterialPage( - key: _pageKey, - child: RootLayout( - key: _scaffoldKey, - currentIndex: destinations.indexOf(route), - child: const SizedBox(), - ), - ), + pageBuilder: + (context, state) => MaterialPage( + key: _pageKey, + child: RootLayout( + key: _scaffoldKey, + currentIndex: destinations.indexOf(route), + child: const SizedBox(), + ), + ), ), ], ); diff --git a/boring_to_beautiful/final/lib/src/shared/views/adaptive_image_card.dart b/boring_to_beautiful/final/lib/src/shared/views/adaptive_image_card.dart index 07cab2b0d7..99f5be0837 100644 --- a/boring_to_beautiful/final/lib/src/shared/views/adaptive_image_card.dart +++ b/boring_to_beautiful/final/lib/src/shared/views/adaptive_image_card.dart @@ -36,20 +36,13 @@ class AdaptiveImageCard extends StatelessWidget { ), ), Expanded( - child: Padding( - padding: const EdgeInsets.all(20), - child: child, - ), + child: Padding(padding: const EdgeInsets.all(20), child: child), ), ], ); } return Padding( - padding: const EdgeInsets.only( - left: 20, - bottom: 20, - top: 20, - ), + padding: const EdgeInsets.only(left: 20, bottom: 20, top: 20), child: Row( mainAxisAlignment: MainAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.end, @@ -65,11 +58,8 @@ class AdaptiveImageCard extends StatelessWidget { ), ), Expanded( - child: Padding( - padding: const EdgeInsets.all(20), - child: child, - ), - ) + child: Padding(padding: const EdgeInsets.all(20), child: child), + ), ], ), ); diff --git a/boring_to_beautiful/final/lib/src/shared/views/adaptive_navigation.dart b/boring_to_beautiful/final/lib/src/shared/views/adaptive_navigation.dart index 067ea7d17f..709068ea07 100644 --- a/boring_to_beautiful/final/lib/src/shared/views/adaptive_navigation.dart +++ b/boring_to_beautiful/final/lib/src/shared/views/adaptive_navigation.dart @@ -30,12 +30,15 @@ class AdaptiveNavigation extends StatelessWidget { NavigationRail( extended: dimens.maxWidth >= 800, minExtendedWidth: 180, - destinations: destinations - .map((e) => NavigationRailDestination( - icon: e.icon, - label: Text(e.label), - )) - .toList(), + destinations: + destinations + .map( + (e) => NavigationRailDestination( + icon: e.icon, + label: Text(e.label), + ), + ) + .toList(), selectedIndex: selectedIndex, onDestinationSelected: onDestinationSelected, ), diff --git a/boring_to_beautiful/final/lib/src/shared/views/article_content.dart b/boring_to_beautiful/final/lib/src/shared/views/article_content.dart index af243f015b..c5a0b5e62a 100644 --- a/boring_to_beautiful/final/lib/src/shared/views/article_content.dart +++ b/boring_to_beautiful/final/lib/src/shared/views/article_content.dart @@ -5,11 +5,7 @@ import 'package:flutter/material.dart'; class ArticleContent extends StatelessWidget { - const ArticleContent({ - super.key, - required this.child, - this.maxWidth = 960, - }); + const ArticleContent({super.key, required this.child, this.maxWidth = 960}); final double maxWidth; final Widget child; @@ -19,13 +15,8 @@ class ArticleContent extends StatelessWidget { return Container( alignment: Alignment.topCenter, child: ConstrainedBox( - constraints: BoxConstraints( - maxWidth: maxWidth, - ), - child: Padding( - padding: const EdgeInsets.all(15), - child: child, - ), + constraints: BoxConstraints(maxWidth: maxWidth), + child: Padding(padding: const EdgeInsets.all(15), child: child), ), ); } diff --git a/boring_to_beautiful/final/lib/src/shared/views/bottom_bar.dart b/boring_to_beautiful/final/lib/src/shared/views/bottom_bar.dart index 06e085a9b6..bf15ad9bb0 100644 --- a/boring_to_beautiful/final/lib/src/shared/views/bottom_bar.dart +++ b/boring_to_beautiful/final/lib/src/shared/views/bottom_bar.dart @@ -26,16 +26,18 @@ class BottomBar extends StatelessWidget implements PreferredSizeWidget { final bloc = BlocProvider.of(context); return BlocBuilder( bloc: bloc, - builder: (context, state) => _BottomBar( - artist: state.songWithProgress?.song.artist, - isMuted: state.isMuted, - isPlaying: state.isPlaying, - preferredSize: preferredSize, - progress: state.songWithProgress?.progress, - song: state.songWithProgress?.song, - togglePlayPause: () => bloc.add(const PlaybackEvent.togglePlayPause()), - volume: state.volume, - ), + builder: + (context, state) => _BottomBar( + artist: state.songWithProgress?.song.artist, + isMuted: state.isMuted, + isPlaying: state.isPlaying, + preferredSize: preferredSize, + progress: state.songWithProgress?.progress, + song: state.songWithProgress?.song, + togglePlayPause: + () => bloc.add(const PlaybackEvent.togglePlayPause()), + volume: state.volume, + ), ); } } @@ -63,10 +65,12 @@ class _BottomBar extends StatelessWidget { @override Widget build(BuildContext context) => LayoutBuilder( - builder: (context, constraints) => constraints.isTablet - ? _buildDesktopBar(context, constraints) - : _buildMobileBar(context, constraints), - ); + builder: + (context, constraints) => + constraints.isTablet + ? _buildDesktopBar(context, constraints) + : _buildMobileBar(context, constraints), + ); Widget _buildDesktopBar(BuildContext context, BoxConstraints constraints) { return ColoredBox( @@ -79,10 +83,7 @@ class _BottomBar extends StatelessWidget { Row( children: [ _AlbumArt(song: song), - _SongDetails( - artist: artist, - song: song, - ), + _SongDetails(artist: artist, song: song), ], ), Flexible( @@ -95,12 +96,7 @@ class _BottomBar extends StatelessWidget { isPlaying: isPlaying, togglePlayPause: togglePlayPause, ), - Center( - child: _ProgressBar( - progress: progress, - song: song, - ), - ), + Center(child: _ProgressBar(progress: progress, song: song)), ], ), ), @@ -114,17 +110,18 @@ class _BottomBar extends StatelessWidget { final overlay = Overlay.of(context); OverlayEntry? entry; entry = OverlayEntry( - builder: (context) => Stack( - children: [ - Positioned( - child: _FullScreenPlayer( - onClose: () { - entry?.remove(); - }, - ), + builder: + (context) => Stack( + children: [ + Positioned( + child: _FullScreenPlayer( + onClose: () { + entry?.remove(); + }, + ), + ), + ], ), - ], - ), ); overlay.insert(entry); }, @@ -136,10 +133,10 @@ class _BottomBar extends StatelessWidget { } double get songProgress => switch ((progress, song)) { - (Duration progress, Song song) => - progress.inMilliseconds / song.length.inMilliseconds, - _ => 0, - }; + (Duration progress, Song song) => + progress.inMilliseconds / song.length.inMilliseconds, + _ => 0, + }; Widget _buildMobileBar(BuildContext context, BoxConstraints constraints) { return ColoredBox( @@ -152,17 +149,18 @@ class _BottomBar extends StatelessWidget { final overlay = Overlay.of(context); OverlayEntry? entry; entry = OverlayEntry( - builder: (context) => Stack( - children: [ - Positioned( - child: _MobilePlayer( - onClose: () { - entry?.remove(); - }, - ), + builder: + (context) => Stack( + children: [ + Positioned( + child: _MobilePlayer( + onClose: () { + entry?.remove(); + }, + ), + ), + ], ), - ], - ), ); overlay.insert(entry); }, @@ -191,10 +189,7 @@ class _BottomBar extends StatelessWidget { mainAxisAlignment: MainAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start, children: [ - Text( - song?.title ?? '', - style: context.labelMedium, - ), + Text(song?.title ?? '', style: context.labelMedium), Text( song?.artist.name ?? '', style: context.labelSmall, @@ -220,10 +215,7 @@ class _BottomBar extends StatelessWidget { } class _ProgressBar extends StatelessWidget { - const _ProgressBar({ - required this.progress, - required this.song, - }); + const _ProgressBar({required this.progress, required this.song}); /// Current playback depth into user is into [song]. final Duration? progress; @@ -231,10 +223,10 @@ class _ProgressBar extends StatelessWidget { final Song? song; double get songProgress => switch ((progress, song)) { - (Duration progress, Song song) => - progress.inMilliseconds / song.length.inMilliseconds, - _ => 0, - }; + (Duration progress, Song song) => + progress.inMilliseconds / song.length.inMilliseconds, + _ => 0, + }; @override Widget build(BuildContext context) { @@ -252,29 +244,32 @@ class _ProgressBar extends StatelessWidget { children: [ const SizedBox(width: 10), SizedBox( - child: progress != null - ? Text(progress!.toHumanizedString(), - style: Theme.of(context).textTheme.bodySmall) - : const Text('-'), + child: + progress != null + ? Text( + progress!.toHumanizedString(), + style: Theme.of(context).textTheme.bodySmall, + ) + : const Text('-'), ), Expanded( child: Slider( value: songProgress.clamp(0, 1), divisions: 1000, onChanged: (percent) { - BlocProvider.of(context).add( - PlaybackEvent.moveToInSong(percent), - ); + BlocProvider.of( + context, + ).add(PlaybackEvent.moveToInSong(percent)); }, onChangeEnd: (percent) { - BlocProvider.of(context).add( - PlaybackEvent.moveToInSong(percent), - ); + BlocProvider.of( + context, + ).add(PlaybackEvent.moveToInSong(percent)); // Because dragging pauses auto playback, resume playing // once the user finishes dragging. - BlocProvider.of(context).add( - const PlaybackEvent.togglePlayPause(), - ); + BlocProvider.of( + context, + ).add(const PlaybackEvent.togglePlayPause()); }, activeColor: Theme.of(context).colorScheme.onTertiaryContainer, @@ -282,12 +277,15 @@ class _ProgressBar extends StatelessWidget { ), ), SizedBox( - child: song != null - ? Text(song!.length.toHumanizedString(), - style: Theme.of(context).textTheme.bodySmall) - : const Text('-'), + child: + song != null + ? Text( + song!.length.toHumanizedString(), + style: Theme.of(context).textTheme.bodySmall, + ) + : const Text('-'), ), - const SizedBox(width: 10) + const SizedBox(width: 10), ], ), ); @@ -297,10 +295,7 @@ class _ProgressBar extends StatelessWidget { } class _VolumeBar extends StatelessWidget { - const _VolumeBar({ - required this.volume, - required this.isMuted, - }); + const _VolumeBar({required this.volume, required this.isMuted}); /// The percentage, between 0 and 1, at which to render the volume slider. final double volume; @@ -313,17 +308,16 @@ class _VolumeBar extends StatelessWidget { @override Widget build(BuildContext context) { return ConstrainedBox( - constraints: const BoxConstraints( - maxWidth: 200, - ), + constraints: const BoxConstraints(maxWidth: 200), child: Padding( padding: const EdgeInsets.all(8), child: Row( children: [ GestureDetector( - onTap: () => BlocProvider.of(context).add( - const PlaybackEvent.toggleMute(), - ), + onTap: + () => BlocProvider.of( + context, + ).add(const PlaybackEvent.toggleMute()), child: Icon(!isMuted ? Icons.volume_mute : Icons.volume_off), ), Expanded( @@ -332,8 +326,10 @@ class _VolumeBar extends StatelessWidget { min: 0, max: 1, divisions: 100, - onChanged: (newValue) => BlocProvider.of(context) - .add(PlaybackEvent.setVolume(newValue)), + onChanged: + (newValue) => BlocProvider.of( + context, + ).add(PlaybackEvent.setVolume(newValue)), activeColor: Theme.of(context).colorScheme.onTertiaryContainer, inactiveColor: Theme.of(context).colorScheme.onSurface, ), @@ -356,49 +352,50 @@ class _PlaybackControls extends StatelessWidget { @override Widget build(BuildContext context) { - return LayoutBuilder(builder: (context, constraints) { - double iconSize = 24; - double playIconSize = 32; - double innerPadding = 16; - double playPadding = 20; - if (constraints.maxWidth < 500) { - iconSize = 21; - playIconSize = 28; - innerPadding = 14; - playPadding = 17; - } - return Row( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Padding( + return LayoutBuilder( + builder: (context, constraints) { + double iconSize = 24; + double playIconSize = 32; + double innerPadding = 16; + double playPadding = 20; + if (constraints.maxWidth < 500) { + iconSize = 21; + playIconSize = 28; + innerPadding = 14; + playPadding = 17; + } + return Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Padding( padding: EdgeInsets.fromLTRB(0, 0, innerPadding, 0), - child: Icon(Icons.shuffle, size: iconSize)), - Icon(Icons.skip_previous, size: iconSize), - Padding( - padding: EdgeInsets.fromLTRB(playPadding, 0, innerPadding, 0), - child: GestureDetector( - onTap: togglePlayPause, - child: Icon( - isPlaying ? Icons.pause_circle : Icons.play_circle, - size: playIconSize, + child: Icon(Icons.shuffle, size: iconSize), + ), + Icon(Icons.skip_previous, size: iconSize), + Padding( + padding: EdgeInsets.fromLTRB(playPadding, 0, innerPadding, 0), + child: GestureDetector( + onTap: togglePlayPause, + child: Icon( + isPlaying ? Icons.pause_circle : Icons.play_circle, + size: playIconSize, + ), ), ), - ), - Icon(Icons.skip_next, size: iconSize), - Padding( - padding: EdgeInsets.fromLTRB(innerPadding, 0, 0, 0), - child: Icon(Icons.repeat, size: iconSize), - ), - ], - ); - }); + Icon(Icons.skip_next, size: iconSize), + Padding( + padding: EdgeInsets.fromLTRB(innerPadding, 0, 0, 0), + child: Icon(Icons.repeat, size: iconSize), + ), + ], + ); + }, + ); } } class _AlbumArt extends StatelessWidget { - const _AlbumArt({ - required this.song, - }); + const _AlbumArt({required this.song}); final Song? song; @@ -409,21 +406,17 @@ class _AlbumArt extends StatelessWidget { child: SizedBox( width: 70, height: 70, - child: song != null - ? Image.asset(song!.image.image) - : Container( - color: Colors.pink[100], - ), + child: + song != null + ? Image.asset(song!.image.image) + : Container(color: Colors.pink[100]), ), ); } } class _SongDetails extends StatelessWidget { - const _SongDetails({ - required this.artist, - required this.song, - }); + const _SongDetails({required this.artist, required this.song}); final Artist? artist; final Song? song; @@ -455,9 +448,7 @@ class _SongDetails extends StatelessWidget { } class _FullScreenPlayer extends StatefulWidget { - const _FullScreenPlayer({ - required this.onClose, - }); + const _FullScreenPlayer({required this.onClose}); final VoidCallback onClose; @@ -489,29 +480,33 @@ class _FullScreenPlayerState extends State<_FullScreenPlayer> { final bloc = BlocProvider.of(context); return BlocBuilder( bloc: bloc, - builder: (context, state) => Theme( - data: ThemeProvider.of(context).dark(), - child: Scaffold( - body: LayoutBuilder( - builder: (context, dimens) { - return MouseRegion( - onHover: (_) { - setState(() { - _showControls = true; - }); - hideControls(); + builder: + (context, state) => Theme( + data: ThemeProvider.of(context).dark(), + child: Scaffold( + body: LayoutBuilder( + builder: (context, dimens) { + return MouseRegion( + onHover: (_) { + setState(() { + _showControls = true; + }); + hideControls(); + }, + child: buildPlayer(context, state, dimens), + ); }, - child: buildPlayer(context, state, dimens), - ); - }, + ), + ), ), - ), - ), ); } Widget buildPlayer( - BuildContext context, PlaybackState state, BoxConstraints dimens) { + BuildContext context, + PlaybackState state, + BoxConstraints dimens, + ) { final bloc = BlocProvider.of(context); final current = state.songWithProgress; final song = current?.song; @@ -519,26 +514,25 @@ class _FullScreenPlayerState extends State<_FullScreenPlayer> { fit: StackFit.expand, children: [ Positioned.fill( - child: current == null - ? const Center(child: Text('No song selected')) - : Container( - color: context.colors.shadow, - child: Opacity( - opacity: 0.3, - child: Image.asset( - song!.image.image, - fit: BoxFit.cover, + child: + current == null + ? const Center(child: Text('No song selected')) + : Container( + color: context.colors.shadow, + child: Opacity( + opacity: 0.3, + child: Image.asset(song!.image.image, fit: BoxFit.cover), ), ), - ), ), Positioned( top: 20, right: 20, child: IconButton( - color: song != null - ? context.colors.onSurface - : context.colors.onSurface, + color: + song != null + ? context.colors.onSurface + : context.colors.onSurface, icon: const Icon(Icons.fullscreen_exit), onPressed: widget.onClose, ), @@ -569,8 +563,9 @@ class _FullScreenPlayerState extends State<_FullScreenPlayer> { Text( song.artist.name, style: context.labelSmall!.copyWith( - fontSize: 20, - color: context.colors.onSurface.withAlpha(204)), + fontSize: 20, + color: context.colors.onSurface.withAlpha(204), + ), overflow: TextOverflow.clip, ), ], @@ -582,10 +577,7 @@ class _FullScreenPlayerState extends State<_FullScreenPlayer> { right: 20, left: 20, bottom: dimens.biggest.height * 0.2, - child: _ProgressBar( - progress: current?.progress, - song: song, - ), + child: _ProgressBar(progress: current?.progress, song: song), ), Positioned( right: 20, @@ -598,8 +590,8 @@ class _FullScreenPlayerState extends State<_FullScreenPlayer> { scale: 1.5, child: _PlaybackControls( isPlaying: state.isPlaying, - togglePlayPause: () => - bloc.add(const PlaybackEvent.togglePlayPause()), + togglePlayPause: + () => bloc.add(const PlaybackEvent.togglePlayPause()), ), ), ), @@ -611,9 +603,7 @@ class _FullScreenPlayerState extends State<_FullScreenPlayer> { } class _MobilePlayer extends StatelessWidget { - const _MobilePlayer({ - required this.onClose, - }); + const _MobilePlayer({required this.onClose}); final VoidCallback onClose; @@ -622,46 +612,52 @@ class _MobilePlayer extends StatelessWidget { final bloc = BlocProvider.of(context); return BlocBuilder( bloc: bloc, - builder: (context, state) => Theme( - data: ThemeProvider.of(context).dark(), - child: Scaffold( - body: LayoutBuilder( - builder: (context, dimens) { - return buildPlayer(context, state, dimens); - }, + builder: + (context, state) => Theme( + data: ThemeProvider.of(context).dark(), + child: Scaffold( + body: LayoutBuilder( + builder: (context, dimens) { + return buildPlayer(context, state, dimens); + }, + ), + ), ), - ), - ), ); } Widget buildPlayer( - BuildContext context, PlaybackState state, BoxConstraints dimens) { + BuildContext context, + PlaybackState state, + BoxConstraints dimens, + ) { final bloc = BlocProvider.of(context); final current = state.songWithProgress; return Stack( children: [ Positioned.fill( - child: current == null - ? const Center(child: Text('No song selected')) - : Container( - color: context.colors.shadow, - child: Opacity( - opacity: 0.3, - child: Image.asset( - current.song.image.image, - fit: BoxFit.cover, + child: + current == null + ? const Center(child: Text('No song selected')) + : Container( + color: context.colors.shadow, + child: Opacity( + opacity: 0.3, + child: Image.asset( + current.song.image.image, + fit: BoxFit.cover, + ), ), ), - ), ), Positioned( top: 20, left: 20, child: IconButton( - color: current?.song != null - ? context.colors.onSurface - : context.colors.onSurface, + color: + current?.song != null + ? context.colors.onSurface + : context.colors.onSurface, icon: const RotatedBox( quarterTurns: 1, child: Icon(Icons.chevron_right), @@ -676,10 +672,7 @@ class _MobilePlayer extends StatelessWidget { left: 0, right: 0, height: dimens.biggest.height * 0.5, - child: Image.asset( - current.song.image.image, - fit: BoxFit.contain, - ), + child: Image.asset(current.song.image.image, fit: BoxFit.contain), ), Positioned( left: 0, @@ -705,8 +698,9 @@ class _MobilePlayer extends StatelessWidget { Text( current.song.artist.name, style: context.labelSmall!.copyWith( - fontSize: 12, - color: context.colors.onSurface.withAlpha(204)), + fontSize: 12, + color: context.colors.onSurface.withAlpha(204), + ), overflow: TextOverflow.clip, ), ], @@ -718,15 +712,12 @@ class _MobilePlayer extends StatelessWidget { scale: 1.5, child: _PlaybackControls( isPlaying: state.isPlaying, - togglePlayPause: () => - bloc.add(const PlaybackEvent.togglePlayPause()), + togglePlayPause: + () => bloc.add(const PlaybackEvent.togglePlayPause()), ), ), ), - _ProgressBar( - progress: current.progress, - song: current.song, - ), + _ProgressBar(progress: current.progress, song: current.song), ], ), ), diff --git a/boring_to_beautiful/final/lib/src/shared/views/brightness_toggle.dart b/boring_to_beautiful/final/lib/src/shared/views/brightness_toggle.dart index 46dde4810f..5b5332392b 100644 --- a/boring_to_beautiful/final/lib/src/shared/views/brightness_toggle.dart +++ b/boring_to_beautiful/final/lib/src/shared/views/brightness_toggle.dart @@ -13,9 +13,10 @@ class BrightnessToggle extends StatelessWidget { Widget build(BuildContext context) { final isDark = Theme.of(context).brightness == Brightness.dark; return IconButton( - icon: Theme.of(context).brightness == Brightness.light - ? const Icon(Icons.brightness_3) - : const Icon(Icons.brightness_7), + icon: + Theme.of(context).brightness == Brightness.light + ? const Icon(Icons.brightness_3) + : const Icon(Icons.brightness_7), onPressed: () { final themeProvider = ThemeProvider.of(context); final settings = themeProvider.settings.value; diff --git a/boring_to_beautiful/final/lib/src/shared/views/center_row.dart b/boring_to_beautiful/final/lib/src/shared/views/center_row.dart index 36d428e3b8..c1f3effcc2 100644 --- a/boring_to_beautiful/final/lib/src/shared/views/center_row.dart +++ b/boring_to_beautiful/final/lib/src/shared/views/center_row.dart @@ -5,23 +5,12 @@ import 'package:flutter/material.dart'; class CenterRow extends StatelessWidget { - const CenterRow({ - super.key, - required this.child, - }); + const CenterRow({super.key, required this.child}); final Widget child; @override Widget build(BuildContext context) { - return Row( - children: [ - Expanded( - child: Center( - child: child, - ), - ), - ], - ); + return Row(children: [Expanded(child: Center(child: child))]); } } diff --git a/boring_to_beautiful/final/lib/src/shared/views/clickable.dart b/boring_to_beautiful/final/lib/src/shared/views/clickable.dart index cd7ef46268..f192f0b135 100644 --- a/boring_to_beautiful/final/lib/src/shared/views/clickable.dart +++ b/boring_to_beautiful/final/lib/src/shared/views/clickable.dart @@ -14,10 +14,7 @@ class Clickable extends StatelessWidget { Widget build(BuildContext context) { return MouseRegion( cursor: SystemMouseCursors.click, - child: GestureDetector( - onTap: onTap, - child: child, - ), + child: GestureDetector(onTap: onTap, child: child), ); } } diff --git a/boring_to_beautiful/final/lib/src/shared/views/events.dart b/boring_to_beautiful/final/lib/src/shared/views/events.dart index ed38465460..ab9140e56d 100644 --- a/boring_to_beautiful/final/lib/src/shared/views/events.dart +++ b/boring_to_beautiful/final/lib/src/shared/views/events.dart @@ -24,43 +24,18 @@ class Events extends StatelessWidget { child: DataTable( horizontalMargin: 5.0, columns: const [ - DataColumn( - label: Text( - 'Date', - ), - numeric: true, - ), - DataColumn( - label: Text( - 'Event', - ), - ), - DataColumn( - label: Text( - 'Location', - ), - ), - DataColumn( - label: Text( - 'More info', - ), - ), + DataColumn(label: Text('Date'), numeric: true), + DataColumn(label: Text('Event')), + DataColumn(label: Text('Location')), + DataColumn(label: Text('More info')), ], rows: [ for (final event in artist.events) DataRow( cells: [ - DataCell( - Text(event.date), - ), - DataCell( - Row(children: [ - Expanded(child: Text(event.title)), - ]), - ), - DataCell( - Text(event.location), - ), + DataCell(Text(event.date)), + DataCell(Row(children: [Expanded(child: Text(event.title))])), + DataCell(Text(event.location)), DataCell( Clickable( child: Text( @@ -70,8 +45,9 @@ class Events extends StatelessWidget { decoration: TextDecoration.underline, ), ), - onTap: () => - launchUrl(Uri.parse('https://docs.flutter.dev')), + onTap: + () => + launchUrl(Uri.parse('https://docs.flutter.dev')), ), ), ], diff --git a/boring_to_beautiful/final/lib/src/shared/views/hover_toggle.dart b/boring_to_beautiful/final/lib/src/shared/views/hover_toggle.dart index ec98c2863c..649cfcab63 100644 --- a/boring_to_beautiful/final/lib/src/shared/views/hover_toggle.dart +++ b/boring_to_beautiful/final/lib/src/shared/views/hover_toggle.dart @@ -31,9 +31,10 @@ class _HoverToggleState extends State with MaterialStateMixin { cursor: isHovered ? SystemMouseCursors.click : MouseCursor.defer, onEnter: (_) => setMaterialState(WidgetState.hovered, true), onExit: (_) => setMaterialState(WidgetState.hovered, false), - child: widget.mode == HoverMode.replace - ? _buildReplaceableChildren() - : _buildChildrenStack(), + child: + widget.mode == HoverMode.replace + ? _buildReplaceableChildren() + : _buildChildrenStack(), ), ); } @@ -41,12 +42,7 @@ class _HoverToggleState extends State with MaterialStateMixin { Widget _buildChildrenStack() { Widget child = isHovered ? Opacity(opacity: 0.2, child: widget.child) : widget.child; - return Stack( - children: [ - child, - if (isHovered) widget.hoverChild, - ], - ); + return Stack(children: [child, if (isHovered) widget.hoverChild]); } Widget _buildReplaceableChildren() => diff --git a/boring_to_beautiful/final/lib/src/shared/views/hoverable_song_play_button.dart b/boring_to_beautiful/final/lib/src/shared/views/hoverable_song_play_button.dart index 512f3d1d3c..dd588e3dbe 100644 --- a/boring_to_beautiful/final/lib/src/shared/views/hoverable_song_play_button.dart +++ b/boring_to_beautiful/final/lib/src/shared/views/hoverable_song_play_button.dart @@ -29,9 +29,10 @@ class HoverableSongPlayButton extends StatelessWidget { hoverChild: Center( child: GestureDetector( child: const Icon(Icons.play_arrow), - onTap: () => BlocProvider.of(context).add( - PlaybackEvent.changeSong(song), - ), + onTap: + () => BlocProvider.of( + context, + ).add(PlaybackEvent.changeSong(song)), ), ), mode: hoverMode, diff --git a/boring_to_beautiful/final/lib/src/shared/views/image_card.dart b/boring_to_beautiful/final/lib/src/shared/views/image_card.dart index 0af9f75f33..6e7f6cd42d 100644 --- a/boring_to_beautiful/final/lib/src/shared/views/image_card.dart +++ b/boring_to_beautiful/final/lib/src/shared/views/image_card.dart @@ -7,13 +7,14 @@ import '../../shared/extensions.dart'; import 'outlined_card.dart'; class ImageCard extends StatelessWidget { - const ImageCard( - {super.key, - required this.title, - required this.details, - required this.image, - this.subtitle, - this.clickable = false}); + const ImageCard({ + super.key, + required this.title, + required this.details, + required this.image, + this.subtitle, + this.clickable = false, + }); final String title; final String? subtitle; @@ -28,54 +29,51 @@ class ImageCard extends StatelessWidget { clickable: clickable, child: Padding( padding: const EdgeInsets.all(8.0), - child: LayoutBuilder(builder: (context, constraints) { - return Row( - children: [ - if (constraints.maxWidth > 600) - SizedBox( - width: 170, - height: 170, - child: Image.asset( - image, - fit: BoxFit.cover, + child: LayoutBuilder( + builder: (context, constraints) { + return Row( + children: [ + if (constraints.maxWidth > 600) + SizedBox( + width: 170, + height: 170, + child: Image.asset(image, fit: BoxFit.cover), ), - ), - Expanded( - child: Padding( - padding: padding, - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Padding( - padding: const EdgeInsets.only(bottom: 5), - child: Text( - title, - style: context.titleLarge! - .copyWith(fontWeight: FontWeight.bold), - ), - ), - if (subtitle != null) + Expanded( + child: Padding( + padding: padding, + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ Padding( - padding: const EdgeInsets.only(bottom: 10), + padding: const EdgeInsets.only(bottom: 5), child: Text( - subtitle!, - style: context.labelMedium, + title, + style: context.titleLarge!.copyWith( + fontWeight: FontWeight.bold, + ), ), ), - Text( - details, - style: context.labelMedium?.copyWith( - fontSize: 16, - height: 1.25, + if (subtitle != null) + Padding( + padding: const EdgeInsets.only(bottom: 10), + child: Text(subtitle!, style: context.labelMedium), + ), + Text( + details, + style: context.labelMedium?.copyWith( + fontSize: 16, + height: 1.25, + ), ), - ), - ], + ], + ), ), ), - ), - ], - ); - }), + ], + ); + }, + ), ), ); } diff --git a/boring_to_beautiful/final/lib/src/shared/views/image_tile.dart b/boring_to_beautiful/final/lib/src/shared/views/image_tile.dart index 4f2bbebb96..dd99152af5 100644 --- a/boring_to_beautiful/final/lib/src/shared/views/image_tile.dart +++ b/boring_to_beautiful/final/lib/src/shared/views/image_tile.dart @@ -21,19 +21,17 @@ class ImageTile extends StatelessWidget { @override Widget build(BuildContext context) { return OutlinedCard( - child: Column(crossAxisAlignment: CrossAxisAlignment.start, children: [ - Row( - children: [ - Expanded( - child: Image.asset(image, fit: BoxFit.cover), - ), - ], - ), - Column( - mainAxisAlignment: MainAxisAlignment.center, - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - Padding( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + children: [Expanded(child: Image.asset(image, fit: BoxFit.cover))], + ), + Column( + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Padding( padding: const EdgeInsets.fromLTRB(10, 5, 10, 5), child: Text( title, @@ -43,20 +41,25 @@ class ImageTile extends StatelessWidget { ), overflow: TextOverflow.ellipsis, maxLines: 1, - )), - Padding( - padding: const EdgeInsets.symmetric(vertical: 5, horizontal: 10), - child: Text( - subtitle, - overflow: TextOverflow.ellipsis, - style: context.labelSmall, - maxLines: 2, - textAlign: TextAlign.center, + ), ), - ), - ], - ) - ]), + Padding( + padding: const EdgeInsets.symmetric( + vertical: 5, + horizontal: 10, + ), + child: Text( + subtitle, + overflow: TextOverflow.ellipsis, + style: context.labelSmall, + maxLines: 2, + textAlign: TextAlign.center, + ), + ), + ], + ), + ], + ), ); } } diff --git a/boring_to_beautiful/final/lib/src/shared/views/outlined_card.dart b/boring_to_beautiful/final/lib/src/shared/views/outlined_card.dart index 7eb25346dc..8521a2528d 100644 --- a/boring_to_beautiful/final/lib/src/shared/views/outlined_card.dart +++ b/boring_to_beautiful/final/lib/src/shared/views/outlined_card.dart @@ -5,11 +5,7 @@ import 'package:flutter/material.dart'; class OutlinedCard extends StatefulWidget { - const OutlinedCard({ - super.key, - required this.child, - this.clickable = true, - }); + const OutlinedCard({super.key, required this.child, this.clickable = true}); final Widget child; final bool clickable; @@ -38,9 +34,10 @@ class _OutlinedCardState extends State { _hovered = false; }); }, - cursor: widget.clickable - ? SystemMouseCursors.click - : SystemMouseCursors.basic, + cursor: + widget.clickable + ? SystemMouseCursors.click + : SystemMouseCursors.basic, child: AnimatedContainer( duration: kThemeAnimationDuration, curve: animationCurve, @@ -52,20 +49,21 @@ class _OutlinedCardState extends State { borderRadius: borderRadius, ), foregroundDecoration: BoxDecoration( - color: Theme.of(context).colorScheme.onSurface.withAlpha( - _hovered ? 30 : 0, - ), + color: Theme.of( + context, + ).colorScheme.onSurface.withAlpha(_hovered ? 30 : 0), borderRadius: borderRadius, ), child: TweenAnimationBuilder( duration: kThemeAnimationDuration, curve: animationCurve, tween: Tween(begin: BorderRadius.zero, end: borderRadius), - builder: (context, borderRadius, child) => ClipRRect( - clipBehavior: Clip.antiAlias, - borderRadius: borderRadius, - child: child, - ), + builder: + (context, borderRadius, child) => ClipRRect( + clipBehavior: Clip.antiAlias, + borderRadius: borderRadius, + child: child, + ), child: widget.child, ), ), diff --git a/boring_to_beautiful/final/lib/src/shared/views/play_pause_listener.dart b/boring_to_beautiful/final/lib/src/shared/views/play_pause_listener.dart index 52fad00863..6b4fc66709 100644 --- a/boring_to_beautiful/final/lib/src/shared/views/play_pause_listener.dart +++ b/boring_to_beautiful/final/lib/src/shared/views/play_pause_listener.dart @@ -16,10 +16,7 @@ import '../playback/bloc/bloc.dart'; /// shortcuts. By sitting below that machinery, this installs a global Spacebar /// listener which toggles Playback, as is customary in music-playing apps. class PlayPauseListener extends StatelessWidget { - const PlayPauseListener({ - super.key, - required this.child, - }); + const PlayPauseListener({super.key, required this.child}); final Widget child; @@ -28,9 +25,7 @@ class PlayPauseListener extends StatelessWidget { // Immediately catch any [_PlayPauseIntent] events released by the inner // [Shortcuts] widget. return Actions( - actions: >{ - _PlayPauseIntent: _PlayPauseAction(), - }, + actions: >{_PlayPauseIntent: _PlayPauseAction()}, child: Shortcuts( // Register a shortcut for Spacebar presses that release a // [_PlayPauseIntent] up the tree to the nearest [Actions] widget. @@ -38,9 +33,9 @@ class PlayPauseListener extends StatelessWidget { const SingleActivator(LogicalKeyboardKey.space): _PlayPauseIntent( // Create a closure which sends a [TogglePlayPause] event to the // [PlaybackBloc]. - () => BlocProvider.of(context).add( - const PlaybackEvent.togglePlayPause(), - ), + () => BlocProvider.of( + context, + ).add(const PlaybackEvent.togglePlayPause()), ), }, child: child, diff --git a/boring_to_beautiful/final/lib/src/shared/views/root_layout.dart b/boring_to_beautiful/final/lib/src/shared/views/root_layout.dart index 878b57d729..ff6270248c 100644 --- a/boring_to_beautiful/final/lib/src/shared/views/root_layout.dart +++ b/boring_to_beautiful/final/lib/src/shared/views/root_layout.dart @@ -29,36 +29,37 @@ class RootLayout extends StatelessWidget { final bloc = BlocProvider.of(context); return BlocBuilder( bloc: bloc, - builder: (context, state) => LayoutBuilder(builder: (context, dimens) { - void onSelected(int index) { - final destination = router.destinations[index]; - go.GoRouter.of(context).go(destination.route); - } + builder: + (context, state) => LayoutBuilder( + builder: (context, dimens) { + void onSelected(int index) { + final destination = router.destinations[index]; + go.GoRouter.of(context).go(destination.route); + } - final current = state.songWithProgress; - return AdaptiveNavigation( - key: _navigationRailKey, - destinations: router.destinations - .map((e) => NavigationDestination( - icon: e.icon, - label: e.label, - )) - .toList(), - selectedIndex: currentIndex, - onDestinationSelected: onSelected, - child: Column( - children: [ - Expanded( - child: _Switcher( - key: _switcherKey, - child: child, + final current = state.songWithProgress; + return AdaptiveNavigation( + key: _navigationRailKey, + destinations: + router.destinations + .map( + (e) => NavigationDestination( + icon: e.icon, + label: e.label, + ), + ) + .toList(), + selectedIndex: currentIndex, + onDestinationSelected: onSelected, + child: Column( + children: [ + Expanded(child: _Switcher(key: _switcherKey, child: child)), + if (current != null) const BottomBar(), + ], ), - ), - if (current != null) const BottomBar(), - ], + ); + }, ), - ); - }), ); } } @@ -66,21 +67,18 @@ class RootLayout extends StatelessWidget { class _Switcher extends StatelessWidget { final Widget child; - const _Switcher({ - required this.child, - super.key, - }); + const _Switcher({required this.child, super.key}); @override Widget build(BuildContext context) { return UniversalPlatform.isDesktop ? child : AnimatedSwitcher( - key: key, - duration: const Duration(milliseconds: 200), - switchInCurve: Curves.easeInOut, - switchOutCurve: Curves.easeInOut, - child: child, - ); + key: key, + duration: const Duration(milliseconds: 200), + switchInCurve: Curves.easeInOut, + switchOutCurve: Curves.easeInOut, + child: child, + ); } } diff --git a/boring_to_beautiful/final/lib/src/shared/views/sidebar.dart b/boring_to_beautiful/final/lib/src/shared/views/sidebar.dart index 78c19b4d22..8815223b22 100644 --- a/boring_to_beautiful/final/lib/src/shared/views/sidebar.dart +++ b/boring_to_beautiful/final/lib/src/shared/views/sidebar.dart @@ -26,10 +26,7 @@ class SideBar extends StatelessWidget { title: const Text('Home'), onTap: () => GoRouter.of(context).go('/'), ), - const ListTile( - leading: Icon(Icons.search), - title: Text('Search'), - ), + const ListTile(leading: Icon(Icons.search), title: Text('Search')), ListTile( leading: const Icon(Icons.person), title: const Text('Artists'), @@ -64,10 +61,7 @@ class PlaylistNav extends StatelessWidget { children: [ Padding( padding: const EdgeInsets.only(left: 16, top: 16), - child: Text( - 'Playlists', - style: context.titleMedium, - ), + child: Text('Playlists', style: context.titleMedium), ), Expanded( child: ListView( @@ -114,10 +108,9 @@ class _PlaylistNavItemState extends State<_PlaylistNavItem> { @override void initState() { super.initState(); - _focusNode = FocusNode(debugLabel: widget.title) - ..addListener(() { - setState(() => _isSelected = _focusNode.hasPrimaryFocus); - }); + _focusNode = FocusNode(debugLabel: widget.title)..addListener(() { + setState(() => _isSelected = _focusNode.hasPrimaryFocus); + }); } @override diff --git a/boring_to_beautiful/final/pubspec.yaml b/boring_to_beautiful/final/pubspec.yaml index 0bc88d24c3..ad540a91c3 100644 --- a/boring_to_beautiful/final/pubspec.yaml +++ b/boring_to_beautiful/final/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: "none" version: 1.0.0 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 dependencies: flutter: diff --git a/boring_to_beautiful/step_01/lib/src/features/artists/view/artist_bio.dart b/boring_to_beautiful/step_01/lib/src/features/artists/view/artist_bio.dart index 227b8e91f9..8b614421db 100644 --- a/boring_to_beautiful/step_01/lib/src/features/artists/view/artist_bio.dart +++ b/boring_to_beautiful/step_01/lib/src/features/artists/view/artist_bio.dart @@ -18,9 +18,7 @@ class ArtistBio extends StatelessWidget { artist.bio, style: context.bodyLarge!.copyWith( fontSize: 16, - color: context.colors.onSurface.withAlpha( - 222, - ), + color: context.colors.onSurface.withAlpha(222), ), ); } diff --git a/boring_to_beautiful/step_01/lib/src/features/artists/view/artist_card.dart b/boring_to_beautiful/step_01/lib/src/features/artists/view/artist_card.dart index a63967f51d..1a56376a87 100644 --- a/boring_to_beautiful/step_01/lib/src/features/artists/view/artist_card.dart +++ b/boring_to_beautiful/step_01/lib/src/features/artists/view/artist_card.dart @@ -11,10 +11,7 @@ import '../../../shared/views/outlined_card.dart'; import '../../../shared/views/views.dart'; class ArtistCard extends StatelessWidget { - const ArtistCard({ - super.key, - required this.artist, - }); + const ArtistCard({super.key, required this.artist}); final Artist artist; @@ -24,65 +21,66 @@ class ArtistCard extends StatelessWidget { return OutlinedCard( child: LayoutBuilder( - builder: (context, dimens) => Row( - children: [ - SizedBox( - width: dimens.maxWidth * 0.4, - child: Image.asset( - artist.image.image, - fit: BoxFit.cover, - ), - ), - Expanded( - child: Padding( - padding: const EdgeInsets.only(left: 16), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Padding( - padding: const EdgeInsets.fromLTRB(0, 0, 15, 0), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text( - artist.name, - style: context.titleMedium, - overflow: TextOverflow.ellipsis, - maxLines: 1, - ), - const SizedBox(height: 10), - Text( - artist.bio, - overflow: TextOverflow.ellipsis, - style: context.labelSmall, - maxLines: 3, - ), - ]), - ), - if (dimens.maxHeight > 100) - Row( - children: [ - HoverableSongPlayButton( - size: const Size(50, 50), - song: nowPlaying, - child: Icon(Icons.play_circle, - color: context.colors.tertiary), + builder: + (context, dimens) => Row( + children: [ + SizedBox( + width: dimens.maxWidth * 0.4, + child: Image.asset(artist.image.image, fit: BoxFit.cover), + ), + Expanded( + child: Padding( + padding: const EdgeInsets.only(left: 16), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Padding( + padding: const EdgeInsets.fromLTRB(0, 0, 15, 0), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + artist.name, + style: context.titleMedium, + overflow: TextOverflow.ellipsis, + maxLines: 1, + ), + const SizedBox(height: 10), + Text( + artist.bio, + overflow: TextOverflow.ellipsis, + style: context.labelSmall, + maxLines: 3, + ), + ], ), - Text( - nowPlaying.title, - maxLines: 1, - overflow: TextOverflow.clip, - style: context.labelMedium, + ), + if (dimens.maxHeight > 100) + Row( + children: [ + HoverableSongPlayButton( + size: const Size(50, 50), + song: nowPlaying, + child: Icon( + Icons.play_circle, + color: context.colors.tertiary, + ), + ), + Text( + nowPlaying.title, + maxLines: 1, + overflow: TextOverflow.clip, + style: context.labelMedium, + ), + ], ), - ], - ), - ], + ], + ), + ), ), - ), + ], ), - ], - ), ), ); } diff --git a/boring_to_beautiful/step_01/lib/src/features/artists/view/artist_events.dart b/boring_to_beautiful/step_01/lib/src/features/artists/view/artist_events.dart index 8b064759c6..58b61b37df 100644 --- a/boring_to_beautiful/step_01/lib/src/features/artists/view/artist_events.dart +++ b/boring_to_beautiful/step_01/lib/src/features/artists/view/artist_events.dart @@ -70,53 +70,32 @@ class ArtistEvents extends StatelessWidget { ); }, columns: const [ - DataColumn( - label: Text( - 'Date', - ), - numeric: true, - ), - DataColumn( - label: Text( - 'Event', - ), - ), - DataColumn( - label: Text( - 'Location', - ), - ), - DataColumn( - label: Text( - 'More info', - ), - ), + DataColumn(label: Text('Date'), numeric: true), + DataColumn(label: Text('Event')), + DataColumn(label: Text('Location')), + DataColumn(label: Text('More info')), ], - rowBuilder: (item, index) => DataRow.byIndex(index: index, cells: [ - DataCell( - Text(item.date), - ), - DataCell( - Row(children: [ - Expanded(child: Text(item.title)), - ]), - ), - DataCell( - Text(item.location), - ), - DataCell( - Clickable( - child: Text( - item.link, - style: TextStyle( - color: linkColor.value(theme), - decoration: TextDecoration.underline, + rowBuilder: + (item, index) => DataRow.byIndex( + index: index, + cells: [ + DataCell(Text(item.date)), + DataCell(Row(children: [Expanded(child: Text(item.title))])), + DataCell(Text(item.location)), + DataCell( + Clickable( + child: Text( + item.link, + style: TextStyle( + color: linkColor.value(theme), + decoration: TextDecoration.underline, + ), + ), + onTap: () => launchUrl(Uri.parse('https://docs.flutter.dev')), + ), ), - ), - onTap: () => launchUrl(Uri.parse('https://docs.flutter.dev')), + ], ), - ), - ]), ); } } diff --git a/boring_to_beautiful/step_01/lib/src/features/artists/view/artist_ranked_songs.dart b/boring_to_beautiful/step_01/lib/src/features/artists/view/artist_ranked_songs.dart index e484ecb3d7..3d1f4e2cf1 100644 --- a/boring_to_beautiful/step_01/lib/src/features/artists/view/artist_ranked_songs.dart +++ b/boring_to_beautiful/step_01/lib/src/features/artists/view/artist_ranked_songs.dart @@ -27,52 +27,42 @@ class ArtistRankedSongs extends StatelessWidget { title: Text(song.title), subtitle: Text(song.length.toHumanizedString()), trailing: Text(song.ranking.toString()), - onTap: () => BlocProvider.of(context).add( - PlaybackEvent.changeSong(song), - ), + onTap: + () => BlocProvider.of( + context, + ).add(PlaybackEvent.changeSong(song)), ); }, columns: const [ - DataColumn( - label: Text( - 'Ranking', - ), - numeric: true, - ), - DataColumn( - label: Text( - 'Title', - ), - ), - DataColumn( - label: Text( - 'Length', - ), - ), + DataColumn(label: Text('Ranking'), numeric: true), + DataColumn(label: Text('Title')), + DataColumn(label: Text('Length')), ], - rowBuilder: (song, index) => DataRow.byIndex(index: index, cells: [ - DataCell( - HoverableSongPlayButton( - song: song, - child: Center( - child: Text(song.ranking.toString()), - ), + rowBuilder: + (song, index) => DataRow.byIndex( + index: index, + cells: [ + DataCell( + HoverableSongPlayButton( + song: song, + child: Center(child: Text(song.ranking.toString())), + ), + ), + DataCell( + Row( + children: [ + Padding( + padding: const EdgeInsets.all(2), + child: ClippedImage(song.image.image), + ), + const SizedBox(width: 5.0), + Expanded(child: Text(song.title)), + ], + ), + ), + DataCell(Text(song.length.toHumanizedString())), + ], ), - ), - DataCell( - Row(children: [ - Padding( - padding: const EdgeInsets.all(2), - child: ClippedImage(song.image.image), - ), - const SizedBox(width: 5.0), - Expanded(child: Text(song.title)), - ]), - ), - DataCell( - Text(song.length.toHumanizedString()), - ), - ]), ); } } diff --git a/boring_to_beautiful/step_01/lib/src/features/artists/view/artist_updates.dart b/boring_to_beautiful/step_01/lib/src/features/artists/view/artist_updates.dart index e5b8bb5fe9..a0fabf7330 100644 --- a/boring_to_beautiful/step_01/lib/src/features/artists/view/artist_updates.dart +++ b/boring_to_beautiful/step_01/lib/src/features/artists/view/artist_updates.dart @@ -30,7 +30,7 @@ class ArtistUpdates extends StatelessWidget { child: Text(update), ), ), - ) + ), ], ); } diff --git a/boring_to_beautiful/step_01/lib/src/features/artists/view/artists_screen.dart b/boring_to_beautiful/step_01/lib/src/features/artists/view/artists_screen.dart index 8afe759807..225d74847b 100644 --- a/boring_to_beautiful/step_01/lib/src/features/artists/view/artists_screen.dart +++ b/boring_to_beautiful/step_01/lib/src/features/artists/view/artists_screen.dart @@ -17,33 +17,33 @@ class ArtistsScreen extends StatelessWidget { Widget build(BuildContext context) { final artistsProvider = ArtistsProvider(); final artists = artistsProvider.artists; - return LayoutBuilder(builder: (context, constraints) { - return Scaffold( - primary: false, - appBar: AppBar( - title: const Text('ARTISTS'), - toolbarHeight: kToolbarHeight * 2, - ), - body: GridView.builder( - padding: const EdgeInsets.all(15), - gridDelegate: SliverGridDelegateWithFixedCrossAxisCount( - crossAxisCount: max(1, (constraints.maxWidth ~/ 400).toInt()), - childAspectRatio: 2.5, - mainAxisSpacing: 10, - crossAxisSpacing: 10, + return LayoutBuilder( + builder: (context, constraints) { + return Scaffold( + primary: false, + appBar: AppBar( + title: const Text('ARTISTS'), + toolbarHeight: kToolbarHeight * 2, ), - itemCount: artists.length, - itemBuilder: (context, index) { - final artist = artists[index]; - return GestureDetector( - child: ArtistCard( - artist: artist, - ), - onTap: () => GoRouter.of(context).go('/artists/${artist.id}'), - ); - }, - ), - ); - }); + body: GridView.builder( + padding: const EdgeInsets.all(15), + gridDelegate: SliverGridDelegateWithFixedCrossAxisCount( + crossAxisCount: max(1, (constraints.maxWidth ~/ 400).toInt()), + childAspectRatio: 2.5, + mainAxisSpacing: 10, + crossAxisSpacing: 10, + ), + itemCount: artists.length, + itemBuilder: (context, index) { + final artist = artists[index]; + return GestureDetector( + child: ArtistCard(artist: artist), + onTap: () => GoRouter.of(context).go('/artists/${artist.id}'), + ); + }, + ), + ); + }, + ); } } diff --git a/boring_to_beautiful/step_01/lib/src/features/home/view/home_artists.dart b/boring_to_beautiful/step_01/lib/src/features/home/view/home_artists.dart index beb2c0ece4..b5a3a33ecd 100644 --- a/boring_to_beautiful/step_01/lib/src/features/home/view/home_artists.dart +++ b/boring_to_beautiful/step_01/lib/src/features/home/view/home_artists.dart @@ -22,27 +22,25 @@ class HomeArtists extends StatelessWidget { Widget build(BuildContext context) { return Padding( padding: const EdgeInsets.all(15), - child: constraints.isMobile - ? Column( - children: [ - for (final artist in artists) buildTile(context, artist), - ], - ) - : Row(children: [ - for (final artist in artists) - Flexible( - flex: 1, - child: buildTile(context, artist), - ), - ]), + child: + constraints.isMobile + ? Column( + children: [ + for (final artist in artists) buildTile(context, artist), + ], + ) + : Row( + children: [ + for (final artist in artists) + Flexible(flex: 1, child: buildTile(context, artist)), + ], + ), ); } Widget buildTile(BuildContext context, Artist artist) { return ListTile( - leading: CircleAvatar( - backgroundImage: AssetImage(artist.image.image), - ), + leading: CircleAvatar(backgroundImage: AssetImage(artist.image.image)), title: Text( artist.updates.first, maxLines: 2, diff --git a/boring_to_beautiful/step_01/lib/src/features/home/view/home_recent.dart b/boring_to_beautiful/step_01/lib/src/features/home/view/home_recent.dart index c77500a663..8ba86d117d 100644 --- a/boring_to_beautiful/step_01/lib/src/features/home/view/home_recent.dart +++ b/boring_to_beautiful/step_01/lib/src/features/home/view/home_recent.dart @@ -12,8 +12,11 @@ import '../../../shared/views/image_clipper.dart'; import '../../../shared/views/outlined_card.dart'; class HomeRecent extends StatelessWidget { - const HomeRecent( - {super.key, required this.playlists, this.axis = Axis.horizontal}); + const HomeRecent({ + super.key, + required this.playlists, + this.axis = Axis.horizontal, + }); final List playlists; final Axis axis; @@ -43,8 +46,10 @@ class HomeRecent extends StatelessWidget { Row( children: [ Expanded( - child: Image.asset(playlist.cover.image, - fit: BoxFit.cover), + child: Image.asset( + playlist.cover.image, + fit: BoxFit.cover, + ), ), ], ), @@ -79,10 +84,7 @@ class HomeRecent extends StatelessWidget { crossAxisAlignment: CrossAxisAlignment.center, mainAxisSize: MainAxisSize.max, children: [ - ClippedImage( - playlist.cover.image, - height: 200, - ), + ClippedImage(playlist.cover.image, height: 200), Expanded( child: Center( child: Padding( @@ -104,23 +106,24 @@ class HomeRecent extends StatelessWidget { return Column( children: [ Padding( - padding: const EdgeInsets.fromLTRB(10, 5, 10, 5), - child: Text( - playlist.title, - style: context.titleSmall!.copyWith( - fontWeight: FontWeight.bold, - ), - overflow: TextOverflow.ellipsis, - maxLines: 1, - textAlign: TextAlign.center, - )), + padding: const EdgeInsets.fromLTRB(10, 5, 10, 5), + child: Text( + playlist.title, + style: context.titleSmall!.copyWith(fontWeight: FontWeight.bold), + overflow: TextOverflow.ellipsis, + maxLines: 1, + textAlign: TextAlign.center, + ), + ), Padding( padding: const EdgeInsets.symmetric(vertical: 5, horizontal: 10), - child: Text(playlist.description, - overflow: TextOverflow.ellipsis, - style: context.labelSmall, - maxLines: 2, - textAlign: TextAlign.center), + child: Text( + playlist.description, + overflow: TextOverflow.ellipsis, + style: context.labelSmall, + maxLines: 2, + textAlign: TextAlign.center, + ), ), ], ); diff --git a/boring_to_beautiful/step_01/lib/src/features/home/view/home_screen.dart b/boring_to_beautiful/step_01/lib/src/features/home/view/home_screen.dart index 715ddf435c..bcff070874 100644 --- a/boring_to_beautiful/step_01/lib/src/features/home/view/home_screen.dart +++ b/boring_to_beautiful/step_01/lib/src/features/home/view/home_screen.dart @@ -61,10 +61,11 @@ class _HomeScreenState extends State { children: [ const HomeHighlight(), LayoutBuilder( - builder: (context, constraints) => HomeArtists( - artists: artists, - constraints: constraints, - ), + builder: + (context, constraints) => HomeArtists( + artists: artists, + constraints: constraints, + ), ), ], ), @@ -81,9 +82,7 @@ class _HomeScreenState extends State { style: context.headlineSmall, ), ), - HomeRecent( - playlists: playlists, - ), + HomeRecent(playlists: playlists), ], ), ), @@ -101,19 +100,20 @@ class _HomeScreenState extends State { crossAxisAlignment: CrossAxisAlignment.start, children: [ Padding( - padding: - const EdgeInsets.all(2), // Modify this line + padding: const EdgeInsets.all( + 2, + ), // Modify this line child: Text( 'Top Songs Today', style: context.titleLarge, ), ), LayoutBuilder( - builder: (context, constraints) => - PlaylistSongs( - playlist: topSongs, - constraints: constraints, - ), + builder: + (context, constraints) => PlaylistSongs( + playlist: topSongs, + constraints: constraints, + ), ), ], ), @@ -126,19 +126,20 @@ class _HomeScreenState extends State { crossAxisAlignment: CrossAxisAlignment.start, children: [ Padding( - padding: - const EdgeInsets.all(2), // Modify this line + padding: const EdgeInsets.all( + 2, + ), // Modify this line child: Text( 'New Releases', style: context.titleLarge, ), ), LayoutBuilder( - builder: (context, constraints) => - PlaylistSongs( - playlist: newReleases, - constraints: constraints, - ), + builder: + (context, constraints) => PlaylistSongs( + playlist: newReleases, + constraints: constraints, + ), ), ], ), diff --git a/boring_to_beautiful/step_01/lib/src/features/playlists/view/playlist_home_screen.dart b/boring_to_beautiful/step_01/lib/src/features/playlists/view/playlist_home_screen.dart index a80d767930..978608ccad 100644 --- a/boring_to_beautiful/step_01/lib/src/features/playlists/view/playlist_home_screen.dart +++ b/boring_to_beautiful/step_01/lib/src/features/playlists/view/playlist_home_screen.dart @@ -44,8 +44,10 @@ class PlaylistHomeScreen extends StatelessWidget { title: playlist.title, subtitle: playlist.description, ), - onTap: () => - GoRouter.of(context).go('/playlists/${playlist.id}'), + onTap: + () => GoRouter.of( + context, + ).go('/playlists/${playlist.id}'), ); }, ), diff --git a/boring_to_beautiful/step_01/lib/src/features/playlists/view/playlist_screen.dart b/boring_to_beautiful/step_01/lib/src/features/playlists/view/playlist_screen.dart index 5dc2f0744f..c41f500a92 100644 --- a/boring_to_beautiful/step_01/lib/src/features/playlists/view/playlist_screen.dart +++ b/boring_to_beautiful/step_01/lib/src/features/playlists/view/playlist_screen.dart @@ -20,114 +20,116 @@ class PlaylistScreen extends StatelessWidget { @override Widget build(BuildContext context) { - return LayoutBuilder(builder: (context, constraints) { - final colors = Theme.of(context).colorScheme; - final double headerHeight = constraints.isMobile - ? max(constraints.biggest.height * 0.5, 450) - : max(constraints.biggest.height * 0.25, 250); - if (constraints.isMobile) { - return Scaffold( - appBar: AppBar( - leading: BackButton( - onPressed: () => GoRouter.of(context).go('/playlists'), - ), - title: Text(playlist.title), - actions: [ - IconButton( - icon: const Icon(Icons.play_circle_fill), - onPressed: () {}, - ), - IconButton( - onPressed: () {}, - icon: const Icon(Icons.shuffle), - ), - ], - ), - body: ArticleContent( - child: PlaylistSongs( - playlist: playlist, - constraints: constraints, - ), - ), - ); - } - return Scaffold( - body: CustomScrollView( - slivers: [ - SliverAppBar( + return LayoutBuilder( + builder: (context, constraints) { + final colors = Theme.of(context).colorScheme; + final double headerHeight = + constraints.isMobile + ? max(constraints.biggest.height * 0.5, 450) + : max(constraints.biggest.height * 0.25, 250); + if (constraints.isMobile) { + return Scaffold( + appBar: AppBar( leading: BackButton( onPressed: () => GoRouter.of(context).go('/playlists'), ), - expandedHeight: headerHeight, - pinned: false, - flexibleSpace: FlexibleSpaceBar( - background: AdaptiveImageCard( - axis: constraints.isMobile ? Axis.vertical : Axis.horizontal, - constraints: - constraints.copyWith(maxHeight: headerHeight).normalize(), - image: playlist.cover.image, - child: Column( - mainAxisAlignment: MainAxisAlignment.end, - crossAxisAlignment: CrossAxisAlignment.start, - mainAxisSize: MainAxisSize.min, - children: [ - Text( - 'PLAYLIST', - style: context.titleSmall! - .copyWith(color: colors.onSurface), - ), - Text( - playlist.title, - style: context.displaySmall! - .copyWith(color: colors.onSurface), - ), - Text( - playlist.description, - style: context.bodyLarge!.copyWith( - color: colors.onSurface.withAlpha(204), + title: Text(playlist.title), + actions: [ + IconButton( + icon: const Icon(Icons.play_circle_fill), + onPressed: () {}, + ), + IconButton(onPressed: () {}, icon: const Icon(Icons.shuffle)), + ], + ), + body: ArticleContent( + child: PlaylistSongs( + playlist: playlist, + constraints: constraints, + ), + ), + ); + } + return Scaffold( + body: CustomScrollView( + slivers: [ + SliverAppBar( + leading: BackButton( + onPressed: () => GoRouter.of(context).go('/playlists'), + ), + expandedHeight: headerHeight, + pinned: false, + flexibleSpace: FlexibleSpaceBar( + background: AdaptiveImageCard( + axis: + constraints.isMobile ? Axis.vertical : Axis.horizontal, + constraints: + constraints + .copyWith(maxHeight: headerHeight) + .normalize(), + image: playlist.cover.image, + child: Column( + mainAxisAlignment: MainAxisAlignment.end, + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisSize: MainAxisSize.min, + children: [ + Text( + 'PLAYLIST', + style: context.titleSmall!.copyWith( + color: colors.onSurface, + ), ), - ), - const SizedBox(height: 8), - Row( - children: [ - IconButton( - icon: Icon( - Icons.play_circle_fill, - color: colors.tertiary, - ), - onPressed: () {}, + Text( + playlist.title, + style: context.displaySmall!.copyWith( + color: colors.onSurface, ), - TextButton.icon( - onPressed: () {}, - icon: Icon( - Icons.shuffle, - color: colors.tertiary, - ), - label: Text( - 'Shuffle', - style: context.bodySmall!.copyWith( + ), + Text( + playlist.description, + style: context.bodyLarge!.copyWith( + color: colors.onSurface.withAlpha(204), + ), + ), + const SizedBox(height: 8), + Row( + children: [ + IconButton( + icon: Icon( + Icons.play_circle_fill, color: colors.tertiary, ), + onPressed: () {}, ), - ), - ], - ), - ], + TextButton.icon( + onPressed: () {}, + icon: Icon(Icons.shuffle, color: colors.tertiary), + label: Text( + 'Shuffle', + style: context.bodySmall!.copyWith( + color: colors.tertiary, + ), + ), + ), + ], + ), + ], + ), ), ), ), - ), - SliverToBoxAdapter( - child: ArticleContent( - child: PlaylistSongs( - playlist: playlist, - constraints: constraints, + SliverToBoxAdapter( + child: ArticleContent( + child: PlaylistSongs( + playlist: playlist, + constraints: constraints, + ), ), ), - ), - ], - ), - ); - }); + ], + ), + ); + }, + ); } } diff --git a/boring_to_beautiful/step_01/lib/src/features/playlists/view/playlist_songs.dart b/boring_to_beautiful/step_01/lib/src/features/playlists/view/playlist_songs.dart index e944336540..1d5a2e9879 100644 --- a/boring_to_beautiful/step_01/lib/src/features/playlists/view/playlist_songs.dart +++ b/boring_to_beautiful/step_01/lib/src/features/playlists/view/playlist_songs.dart @@ -12,8 +12,11 @@ import '../../../shared/views/image_clipper.dart'; import '../../../shared/views/views.dart'; class PlaylistSongs extends StatelessWidget { - const PlaylistSongs( - {super.key, required this.playlist, required this.constraints}); + const PlaylistSongs({ + super.key, + required this.playlist, + required this.constraints, + }); final Playlist playlist; final BoxConstraints constraints; @@ -25,14 +28,9 @@ class PlaylistSongs extends StatelessWidget { breakpoint: 450, columns: const [ DataColumn( - label: Padding( - padding: EdgeInsets.only(left: 20), - child: Text('#'), - ), - ), - DataColumn( - label: Text('Title'), + label: Padding(padding: EdgeInsets.only(left: 20), child: Text('#')), ), + DataColumn(label: Text('Title')), DataColumn( label: Padding( padding: EdgeInsets.only(right: 10), @@ -40,38 +38,40 @@ class PlaylistSongs extends StatelessWidget { ), ), ], - rowBuilder: (context, index) => DataRow.byIndex( - index: index, - cells: [ - DataCell( - // Add HoverableSongPlayButton - Center( - child: Text( - (index + 1).toString(), - textAlign: TextAlign.center, + rowBuilder: + (context, index) => DataRow.byIndex( + index: index, + cells: [ + DataCell( + // Add HoverableSongPlayButton + Center( + child: Text( + (index + 1).toString(), + textAlign: TextAlign.center, + ), + ), ), - ), - ), - DataCell( - Row(children: [ - Padding( - padding: const EdgeInsets.all(2), - child: ClippedImage(playlist.songs[index].image.image), + DataCell( + Row( + children: [ + Padding( + padding: const EdgeInsets.all(2), + child: ClippedImage(playlist.songs[index].image.image), + ), + const SizedBox(width: 10), + Expanded(child: Text(playlist.songs[index].title)), + ], + ), ), - const SizedBox(width: 10), - Expanded(child: Text(playlist.songs[index].title)), - ]), - ), - DataCell( - Text(playlist.songs[index].length.toHumanizedString()), + DataCell(Text(playlist.songs[index].length.toHumanizedString())), + ], ), - ], - ), itemBuilder: (song, index) { return ListTile( - onTap: () => BlocProvider.of(context).add( - PlaybackEvent.changeSong(song), - ), + onTap: + () => BlocProvider.of( + context, + ).add(PlaybackEvent.changeSong(song)), leading: ClippedImage(song.image.image), title: Text(song.title), subtitle: Text(song.length.toHumanizedString()), diff --git a/boring_to_beautiful/step_01/lib/src/shared/app.dart b/boring_to_beautiful/step_01/lib/src/shared/app.dart index eced12177d..771a2be1ad 100644 --- a/boring_to_beautiful/step_01/lib/src/shared/app.dart +++ b/boring_to_beautiful/step_01/lib/src/shared/app.dart @@ -19,45 +19,49 @@ class MyApp extends StatefulWidget { } class _MyAppState extends State { - final settings = ValueNotifier(ThemeSettings( - sourceColor: Colors.pink, // Replace this color - themeMode: ThemeMode.system, - )); + final settings = ValueNotifier( + ThemeSettings( + sourceColor: Colors.pink, // Replace this color + themeMode: ThemeMode.system, + ), + ); @override Widget build(BuildContext context) { return BlocProvider( create: (context) => PlaybackBloc(), child: DynamicColorBuilder( - builder: (lightDynamic, darkDynamic) => ThemeProvider( - lightDynamic: lightDynamic, - darkDynamic: darkDynamic, - settings: settings, - child: NotificationListener( - onNotification: (notification) { - settings.value = notification.settings; - return true; - }, - child: ValueListenableBuilder( - valueListenable: settings, - builder: (context, value, _) { - // Create theme instance - return MaterialApp.router( - debugShowCheckedModeBanner: false, - title: 'Flutter Demo', - // Add theme - // Add dark theme - // Add theme mode - routeInformationParser: appRouter.routeInformationParser, - routeInformationProvider: - appRouter.routeInformationProvider, - routerDelegate: appRouter.routerDelegate, - builder: (context, child) { - return PlayPauseListener(child: child!); - }, - ); + builder: + (lightDynamic, darkDynamic) => ThemeProvider( + lightDynamic: lightDynamic, + darkDynamic: darkDynamic, + settings: settings, + child: NotificationListener( + onNotification: (notification) { + settings.value = notification.settings; + return true; }, + child: ValueListenableBuilder( + valueListenable: settings, + builder: (context, value, _) { + // Create theme instance + return MaterialApp.router( + debugShowCheckedModeBanner: false, + title: 'Flutter Demo', + // Add theme + // Add dark theme + // Add theme mode + routeInformationParser: appRouter.routeInformationParser, + routeInformationProvider: + appRouter.routeInformationProvider, + routerDelegate: appRouter.routerDelegate, + builder: (context, child) { + return PlayPauseListener(child: child!); + }, + ); + }, + ), ), - )), + ), ), ); } diff --git a/boring_to_beautiful/step_01/lib/src/shared/classes/image.dart b/boring_to_beautiful/step_01/lib/src/shared/classes/image.dart index a1ef427c1d..00a6472b4a 100644 --- a/boring_to_beautiful/step_01/lib/src/shared/classes/image.dart +++ b/boring_to_beautiful/step_01/lib/src/shared/classes/image.dart @@ -3,10 +3,11 @@ // found in the LICENSE file. class MyArtistImage { - const MyArtistImage( - {required this.image, - required this.sourceName, - required this.sourceLink}); + const MyArtistImage({ + required this.image, + required this.sourceName, + required this.sourceLink, + }); final String image; final String sourceName; diff --git a/boring_to_beautiful/step_01/lib/src/shared/classes/playlist.dart b/boring_to_beautiful/step_01/lib/src/shared/classes/playlist.dart index 59899dc619..5f0225059d 100644 --- a/boring_to_beautiful/step_01/lib/src/shared/classes/playlist.dart +++ b/boring_to_beautiful/step_01/lib/src/shared/classes/playlist.dart @@ -17,8 +17,9 @@ class Playlist { this.description = '', required this.songs, this.cover = const MyArtistImage( - image: 'assets/images/record.jpeg', - sourceName: 'Adobe Stock Images', - sourceLink: ''), + image: 'assets/images/record.jpeg', + sourceName: 'Adobe Stock Images', + sourceLink: '', + ), }); } diff --git a/boring_to_beautiful/step_01/lib/src/shared/classes/ranked_song.dart b/boring_to_beautiful/step_01/lib/src/shared/classes/ranked_song.dart index 5908268c8c..2362bfae64 100644 --- a/boring_to_beautiful/step_01/lib/src/shared/classes/ranked_song.dart +++ b/boring_to_beautiful/step_01/lib/src/shared/classes/ranked_song.dart @@ -7,7 +7,11 @@ import './classes.dart'; class RankedSong extends Song { final int ranking; - const RankedSong(this.ranking, String title, Artist artist, Duration length, - MyArtistImage image) - : super(title, artist, length, image); + const RankedSong( + this.ranking, + String title, + Artist artist, + Duration length, + MyArtistImage image, + ) : super(title, artist, length, image); } diff --git a/boring_to_beautiful/step_01/lib/src/shared/extensions.dart b/boring_to_beautiful/step_01/lib/src/shared/extensions.dart index 6d9ea1f480..6a03f8b8b1 100644 --- a/boring_to_beautiful/step_01/lib/src/shared/extensions.dart +++ b/boring_to_beautiful/step_01/lib/src/shared/extensions.dart @@ -9,51 +9,36 @@ extension TypographyUtils on BuildContext { ThemeData get theme => Theme.of(this); TextTheme get textTheme => theme.textTheme; // Modify this line ColorScheme get colors => theme.colorScheme; - TextStyle? get displayLarge => textTheme.displayLarge?.copyWith( - color: colors.onSurface, - ); - TextStyle? get displayMedium => textTheme.displayMedium?.copyWith( - color: colors.onSurface, - ); - TextStyle? get displaySmall => textTheme.displaySmall?.copyWith( - color: colors.onSurface, - ); - TextStyle? get headlineLarge => textTheme.headlineLarge?.copyWith( - color: colors.onSurface, - ); - TextStyle? get headlineMedium => textTheme.headlineMedium?.copyWith( - color: colors.onSurface, - ); - TextStyle? get headlineSmall => textTheme.headlineSmall?.copyWith( - color: colors.onSurface, - ); - TextStyle? get titleLarge => textTheme.titleLarge?.copyWith( - color: colors.onSurface, - ); - TextStyle? get titleMedium => textTheme.titleMedium?.copyWith( - color: colors.onSurface, - ); - TextStyle? get titleSmall => textTheme.titleSmall?.copyWith( - color: colors.onSurface, - ); - TextStyle? get labelLarge => textTheme.labelLarge?.copyWith( - color: colors.onSurface, - ); - TextStyle? get labelMedium => textTheme.labelMedium?.copyWith( - color: colors.onSurface, - ); - TextStyle? get labelSmall => textTheme.labelSmall?.copyWith( - color: colors.onSurface, - ); - TextStyle? get bodyLarge => textTheme.bodyLarge?.copyWith( - color: colors.onSurface, - ); - TextStyle? get bodyMedium => textTheme.bodyMedium?.copyWith( - color: colors.onSurface, - ); - TextStyle? get bodySmall => textTheme.bodySmall?.copyWith( - color: colors.onSurface, - ); + TextStyle? get displayLarge => + textTheme.displayLarge?.copyWith(color: colors.onSurface); + TextStyle? get displayMedium => + textTheme.displayMedium?.copyWith(color: colors.onSurface); + TextStyle? get displaySmall => + textTheme.displaySmall?.copyWith(color: colors.onSurface); + TextStyle? get headlineLarge => + textTheme.headlineLarge?.copyWith(color: colors.onSurface); + TextStyle? get headlineMedium => + textTheme.headlineMedium?.copyWith(color: colors.onSurface); + TextStyle? get headlineSmall => + textTheme.headlineSmall?.copyWith(color: colors.onSurface); + TextStyle? get titleLarge => + textTheme.titleLarge?.copyWith(color: colors.onSurface); + TextStyle? get titleMedium => + textTheme.titleMedium?.copyWith(color: colors.onSurface); + TextStyle? get titleSmall => + textTheme.titleSmall?.copyWith(color: colors.onSurface); + TextStyle? get labelLarge => + textTheme.labelLarge?.copyWith(color: colors.onSurface); + TextStyle? get labelMedium => + textTheme.labelMedium?.copyWith(color: colors.onSurface); + TextStyle? get labelSmall => + textTheme.labelSmall?.copyWith(color: colors.onSurface); + TextStyle? get bodyLarge => + textTheme.bodyLarge?.copyWith(color: colors.onSurface); + TextStyle? get bodyMedium => + textTheme.bodyMedium?.copyWith(color: colors.onSurface); + TextStyle? get bodySmall => + textTheme.bodySmall?.copyWith(color: colors.onSurface); } extension BreakpointUtils on BoxConstraints { @@ -65,17 +50,17 @@ extension BreakpointUtils on BoxConstraints { extension DurationString on String { /// Assumes a string (roughly) of the format '\d{1,2}:\d{2}' Duration toDuration() => switch (split(':')) { - [var minutes, var seconds] => Duration( - minutes: int.parse(minutes.trim()), - seconds: int.parse(seconds.trim()), - ), - [var hours, var minutes, var seconds] => Duration( - hours: int.parse(hours.trim()), - minutes: int.parse(minutes.trim()), - seconds: int.parse(seconds.trim()), - ), - _ => throw Exception('Invalid duration string: $this'), - }; + [var minutes, var seconds] => Duration( + minutes: int.parse(minutes.trim()), + seconds: int.parse(seconds.trim()), + ), + [var hours, var minutes, var seconds] => Duration( + hours: int.parse(hours.trim()), + minutes: int.parse(minutes.trim()), + seconds: int.parse(seconds.trim()), + ), + _ => throw Exception('Invalid duration string: $this'), + }; } extension HumanizedDuration on Duration { diff --git a/boring_to_beautiful/step_01/lib/src/shared/playback/bloc/playback_bloc.dart b/boring_to_beautiful/step_01/lib/src/shared/playback/bloc/playback_bloc.dart index 73c2f4c436..c6c871937b 100644 --- a/boring_to_beautiful/step_01/lib/src/shared/playback/bloc/playback_bloc.dart +++ b/boring_to_beautiful/step_01/lib/src/shared/playback/bloc/playback_bloc.dart @@ -41,9 +41,8 @@ class PlaybackBloc extends Bloc { } } - void _handlePlaybackProgress(Duration progress) => add( - PlaybackEvent.songProgress(progress), - ); + void _handlePlaybackProgress(Duration progress) => + add(PlaybackEvent.songProgress(progress)); void _togglePlayPause(TogglePlayPause event, Emitter emit) { state.isPlaying ? _pausePlayback() : _resumePlayback(); @@ -52,8 +51,10 @@ class PlaybackBloc extends Bloc { void _pausePlayback() => _currentlyPlayingSubscription!.cancel(); - void _resumePlayback() => _currentlyPlayingSubscription = - _startPlayingStream().listen(_handlePlaybackProgress); + void _resumePlayback() => + _currentlyPlayingSubscription = _startPlayingStream().listen( + _handlePlaybackProgress, + ); void _changeSong(ChangeSong event, Emitter emit) { emit( @@ -69,19 +70,15 @@ class PlaybackBloc extends Bloc { } void _songProgress(SongProgress event, Emitter emit) => emit( - state.copyWith( - songWithProgress: state.songWithProgress!.copyWith( - progress: state.songWithProgress!.progress + event.duration, - ), - ), - ); + state.copyWith( + songWithProgress: state.songWithProgress!.copyWith( + progress: state.songWithProgress!.progress + event.duration, + ), + ), + ); void _setVolume(SetVolume event, Emitter emit) => emit( - state.copyWith( - volume: event.value, - isMuted: false, - previousVolume: null, - ), - ); + state.copyWith(volume: event.value, isMuted: false, previousVolume: null), + ); void _toggleMute(ToggleMute event, Emitter emit) { if (state.isMuted) { @@ -94,11 +91,7 @@ class PlaybackBloc extends Bloc { ); } else { emit( - state.copyWith( - isMuted: true, - volume: 0, - previousVolume: state.volume, - ), + state.copyWith(isMuted: true, volume: 0, previousVolume: state.volume), ); } } diff --git a/boring_to_beautiful/step_01/lib/src/shared/playback/bloc/playback_bloc.freezed.dart b/boring_to_beautiful/step_01/lib/src/shared/playback/bloc/playback_bloc.freezed.dart index 8a422cd449..54e870ab6f 100644 --- a/boring_to_beautiful/step_01/lib/src/shared/playback/bloc/playback_bloc.freezed.dart +++ b/boring_to_beautiful/step_01/lib/src/shared/playback/bloc/playback_bloc.freezed.dart @@ -12,7 +12,8 @@ part of 'playback_bloc.dart'; T _$identity(T value) => value; final _privateConstructorUsedError = UnsupportedError( - 'It seems like you constructed your class using `MyClass._()`. This constructor is only meant to be used by freezed and you are not supposed to need it nor use it.\nPlease check the documentation here for more information: https://github.com/rrousselGit/freezed#adding-getters-and-methods-to-our-models'); + 'It seems like you constructed your class using `MyClass._()`. This constructor is only meant to be used by freezed and you are not supposed to need it nor use it.\nPlease check the documentation here for more information: https://github.com/rrousselGit/freezed#adding-getters-and-methods-to-our-models', +); /// @nodoc mixin _$PlaybackEvent { @@ -24,8 +25,7 @@ mixin _$PlaybackEvent { required TResult Function() toggleMute, required TResult Function(double percent) moveToInSong, required TResult Function(Duration duration) songProgress, - }) => - throw _privateConstructorUsedError; + }) => throw _privateConstructorUsedError; @optionalTypeArgs TResult? whenOrNull({ TResult? Function()? togglePlayPause, @@ -34,8 +34,7 @@ mixin _$PlaybackEvent { TResult? Function()? toggleMute, TResult? Function(double percent)? moveToInSong, TResult? Function(Duration duration)? songProgress, - }) => - throw _privateConstructorUsedError; + }) => throw _privateConstructorUsedError; @optionalTypeArgs TResult maybeWhen({ TResult Function()? togglePlayPause, @@ -45,8 +44,7 @@ mixin _$PlaybackEvent { TResult Function(double percent)? moveToInSong, TResult Function(Duration duration)? songProgress, required TResult orElse(), - }) => - throw _privateConstructorUsedError; + }) => throw _privateConstructorUsedError; @optionalTypeArgs TResult map({ required TResult Function(TogglePlayPause value) togglePlayPause, @@ -55,8 +53,7 @@ mixin _$PlaybackEvent { required TResult Function(ToggleMute value) toggleMute, required TResult Function(MoveToInSong value) moveToInSong, required TResult Function(SongProgress value) songProgress, - }) => - throw _privateConstructorUsedError; + }) => throw _privateConstructorUsedError; @optionalTypeArgs TResult? mapOrNull({ TResult? Function(TogglePlayPause value)? togglePlayPause, @@ -65,8 +62,7 @@ mixin _$PlaybackEvent { TResult? Function(ToggleMute value)? toggleMute, TResult? Function(MoveToInSong value)? moveToInSong, TResult? Function(SongProgress value)? songProgress, - }) => - throw _privateConstructorUsedError; + }) => throw _privateConstructorUsedError; @optionalTypeArgs TResult maybeMap({ TResult Function(TogglePlayPause value)? togglePlayPause, @@ -76,15 +72,15 @@ mixin _$PlaybackEvent { TResult Function(MoveToInSong value)? moveToInSong, TResult Function(SongProgress value)? songProgress, required TResult orElse(), - }) => - throw _privateConstructorUsedError; + }) => throw _privateConstructorUsedError; } /// @nodoc abstract class $PlaybackEventCopyWith<$Res> { factory $PlaybackEventCopyWith( - PlaybackEvent value, $Res Function(PlaybackEvent) then) = - _$PlaybackEventCopyWithImpl<$Res, PlaybackEvent>; + PlaybackEvent value, + $Res Function(PlaybackEvent) then, + ) = _$PlaybackEventCopyWithImpl<$Res, PlaybackEvent>; } /// @nodoc @@ -103,9 +99,10 @@ class _$PlaybackEventCopyWithImpl<$Res, $Val extends PlaybackEvent> /// @nodoc abstract class _$$TogglePlayPauseImplCopyWith<$Res> { - factory _$$TogglePlayPauseImplCopyWith(_$TogglePlayPauseImpl value, - $Res Function(_$TogglePlayPauseImpl) then) = - __$$TogglePlayPauseImplCopyWithImpl<$Res>; + factory _$$TogglePlayPauseImplCopyWith( + _$TogglePlayPauseImpl value, + $Res Function(_$TogglePlayPauseImpl) then, + ) = __$$TogglePlayPauseImplCopyWithImpl<$Res>; } /// @nodoc @@ -113,8 +110,9 @@ class __$$TogglePlayPauseImplCopyWithImpl<$Res> extends _$PlaybackEventCopyWithImpl<$Res, _$TogglePlayPauseImpl> implements _$$TogglePlayPauseImplCopyWith<$Res> { __$$TogglePlayPauseImplCopyWithImpl( - _$TogglePlayPauseImpl _value, $Res Function(_$TogglePlayPauseImpl) _then) - : super(_value, _then); + _$TogglePlayPauseImpl _value, + $Res Function(_$TogglePlayPauseImpl) _then, + ) : super(_value, _then); /// Create a copy of PlaybackEvent /// with the given fields replaced by the non-null parameter values. @@ -233,8 +231,9 @@ abstract class TogglePlayPause implements PlaybackEvent { /// @nodoc abstract class _$$ChangeSongImplCopyWith<$Res> { factory _$$ChangeSongImplCopyWith( - _$ChangeSongImpl value, $Res Function(_$ChangeSongImpl) then) = - __$$ChangeSongImplCopyWithImpl<$Res>; + _$ChangeSongImpl value, + $Res Function(_$ChangeSongImpl) then, + ) = __$$ChangeSongImplCopyWithImpl<$Res>; @useResult $Res call({Song song}); } @@ -244,22 +243,23 @@ class __$$ChangeSongImplCopyWithImpl<$Res> extends _$PlaybackEventCopyWithImpl<$Res, _$ChangeSongImpl> implements _$$ChangeSongImplCopyWith<$Res> { __$$ChangeSongImplCopyWithImpl( - _$ChangeSongImpl _value, $Res Function(_$ChangeSongImpl) _then) - : super(_value, _then); + _$ChangeSongImpl _value, + $Res Function(_$ChangeSongImpl) _then, + ) : super(_value, _then); /// Create a copy of PlaybackEvent /// with the given fields replaced by the non-null parameter values. @pragma('vm:prefer-inline') @override - $Res call({ - Object? song = null, - }) { - return _then(_$ChangeSongImpl( - null == song - ? _value.song - : song // ignore: cast_nullable_to_non_nullable - as Song, - )); + $Res call({Object? song = null}) { + return _then( + _$ChangeSongImpl( + null == song + ? _value.song + : song // ignore: cast_nullable_to_non_nullable + as Song, + ), + ); } } @@ -397,8 +397,9 @@ abstract class ChangeSong implements PlaybackEvent { /// @nodoc abstract class _$$SetVolumeImplCopyWith<$Res> { factory _$$SetVolumeImplCopyWith( - _$SetVolumeImpl value, $Res Function(_$SetVolumeImpl) then) = - __$$SetVolumeImplCopyWithImpl<$Res>; + _$SetVolumeImpl value, + $Res Function(_$SetVolumeImpl) then, + ) = __$$SetVolumeImplCopyWithImpl<$Res>; @useResult $Res call({double value}); } @@ -408,22 +409,23 @@ class __$$SetVolumeImplCopyWithImpl<$Res> extends _$PlaybackEventCopyWithImpl<$Res, _$SetVolumeImpl> implements _$$SetVolumeImplCopyWith<$Res> { __$$SetVolumeImplCopyWithImpl( - _$SetVolumeImpl _value, $Res Function(_$SetVolumeImpl) _then) - : super(_value, _then); + _$SetVolumeImpl _value, + $Res Function(_$SetVolumeImpl) _then, + ) : super(_value, _then); /// Create a copy of PlaybackEvent /// with the given fields replaced by the non-null parameter values. @pragma('vm:prefer-inline') @override - $Res call({ - Object? value = null, - }) { - return _then(_$SetVolumeImpl( - null == value - ? _value.value - : value // ignore: cast_nullable_to_non_nullable - as double, - )); + $Res call({Object? value = null}) { + return _then( + _$SetVolumeImpl( + null == value + ? _value.value + : value // ignore: cast_nullable_to_non_nullable + as double, + ), + ); } } @@ -561,8 +563,9 @@ abstract class SetVolume implements PlaybackEvent { /// @nodoc abstract class _$$ToggleMuteImplCopyWith<$Res> { factory _$$ToggleMuteImplCopyWith( - _$ToggleMuteImpl value, $Res Function(_$ToggleMuteImpl) then) = - __$$ToggleMuteImplCopyWithImpl<$Res>; + _$ToggleMuteImpl value, + $Res Function(_$ToggleMuteImpl) then, + ) = __$$ToggleMuteImplCopyWithImpl<$Res>; } /// @nodoc @@ -570,8 +573,9 @@ class __$$ToggleMuteImplCopyWithImpl<$Res> extends _$PlaybackEventCopyWithImpl<$Res, _$ToggleMuteImpl> implements _$$ToggleMuteImplCopyWith<$Res> { __$$ToggleMuteImplCopyWithImpl( - _$ToggleMuteImpl _value, $Res Function(_$ToggleMuteImpl) _then) - : super(_value, _then); + _$ToggleMuteImpl _value, + $Res Function(_$ToggleMuteImpl) _then, + ) : super(_value, _then); /// Create a copy of PlaybackEvent /// with the given fields replaced by the non-null parameter values. @@ -690,8 +694,9 @@ abstract class ToggleMute implements PlaybackEvent { /// @nodoc abstract class _$$MoveToInSongImplCopyWith<$Res> { factory _$$MoveToInSongImplCopyWith( - _$MoveToInSongImpl value, $Res Function(_$MoveToInSongImpl) then) = - __$$MoveToInSongImplCopyWithImpl<$Res>; + _$MoveToInSongImpl value, + $Res Function(_$MoveToInSongImpl) then, + ) = __$$MoveToInSongImplCopyWithImpl<$Res>; @useResult $Res call({double percent}); } @@ -701,22 +706,23 @@ class __$$MoveToInSongImplCopyWithImpl<$Res> extends _$PlaybackEventCopyWithImpl<$Res, _$MoveToInSongImpl> implements _$$MoveToInSongImplCopyWith<$Res> { __$$MoveToInSongImplCopyWithImpl( - _$MoveToInSongImpl _value, $Res Function(_$MoveToInSongImpl) _then) - : super(_value, _then); + _$MoveToInSongImpl _value, + $Res Function(_$MoveToInSongImpl) _then, + ) : super(_value, _then); /// Create a copy of PlaybackEvent /// with the given fields replaced by the non-null parameter values. @pragma('vm:prefer-inline') @override - $Res call({ - Object? percent = null, - }) { - return _then(_$MoveToInSongImpl( - null == percent - ? _value.percent - : percent // ignore: cast_nullable_to_non_nullable - as double, - )); + $Res call({Object? percent = null}) { + return _then( + _$MoveToInSongImpl( + null == percent + ? _value.percent + : percent // ignore: cast_nullable_to_non_nullable + as double, + ), + ); } } @@ -854,8 +860,9 @@ abstract class MoveToInSong implements PlaybackEvent { /// @nodoc abstract class _$$SongProgressImplCopyWith<$Res> { factory _$$SongProgressImplCopyWith( - _$SongProgressImpl value, $Res Function(_$SongProgressImpl) then) = - __$$SongProgressImplCopyWithImpl<$Res>; + _$SongProgressImpl value, + $Res Function(_$SongProgressImpl) then, + ) = __$$SongProgressImplCopyWithImpl<$Res>; @useResult $Res call({Duration duration}); } @@ -865,22 +872,23 @@ class __$$SongProgressImplCopyWithImpl<$Res> extends _$PlaybackEventCopyWithImpl<$Res, _$SongProgressImpl> implements _$$SongProgressImplCopyWith<$Res> { __$$SongProgressImplCopyWithImpl( - _$SongProgressImpl _value, $Res Function(_$SongProgressImpl) _then) - : super(_value, _then); + _$SongProgressImpl _value, + $Res Function(_$SongProgressImpl) _then, + ) : super(_value, _then); /// Create a copy of PlaybackEvent /// with the given fields replaced by the non-null parameter values. @pragma('vm:prefer-inline') @override - $Res call({ - Object? duration = null, - }) { - return _then(_$SongProgressImpl( - null == duration - ? _value.duration - : duration // ignore: cast_nullable_to_non_nullable - as Duration, - )); + $Res call({Object? duration = null}) { + return _then( + _$SongProgressImpl( + null == duration + ? _value.duration + : duration // ignore: cast_nullable_to_non_nullable + as Duration, + ), + ); } } @@ -1037,15 +1045,17 @@ mixin _$PlaybackState { /// @nodoc abstract class $PlaybackStateCopyWith<$Res> { factory $PlaybackStateCopyWith( - PlaybackState value, $Res Function(PlaybackState) then) = - _$PlaybackStateCopyWithImpl<$Res, PlaybackState>; + PlaybackState value, + $Res Function(PlaybackState) then, + ) = _$PlaybackStateCopyWithImpl<$Res, PlaybackState>; @useResult - $Res call( - {double volume, - double? previousVolume, - bool isMuted, - bool isPlaying, - SongWithProgress? songWithProgress}); + $Res call({ + double volume, + double? previousVolume, + bool isMuted, + bool isPlaying, + SongWithProgress? songWithProgress, + }); $SongWithProgressCopyWith<$Res>? get songWithProgress; } @@ -1071,28 +1081,36 @@ class _$PlaybackStateCopyWithImpl<$Res, $Val extends PlaybackState> Object? isPlaying = null, Object? songWithProgress = freezed, }) { - return _then(_value.copyWith( - volume: null == volume - ? _value.volume - : volume // ignore: cast_nullable_to_non_nullable - as double, - previousVolume: freezed == previousVolume - ? _value.previousVolume - : previousVolume // ignore: cast_nullable_to_non_nullable - as double?, - isMuted: null == isMuted - ? _value.isMuted - : isMuted // ignore: cast_nullable_to_non_nullable - as bool, - isPlaying: null == isPlaying - ? _value.isPlaying - : isPlaying // ignore: cast_nullable_to_non_nullable - as bool, - songWithProgress: freezed == songWithProgress - ? _value.songWithProgress - : songWithProgress // ignore: cast_nullable_to_non_nullable - as SongWithProgress?, - ) as $Val); + return _then( + _value.copyWith( + volume: + null == volume + ? _value.volume + : volume // ignore: cast_nullable_to_non_nullable + as double, + previousVolume: + freezed == previousVolume + ? _value.previousVolume + : previousVolume // ignore: cast_nullable_to_non_nullable + as double?, + isMuted: + null == isMuted + ? _value.isMuted + : isMuted // ignore: cast_nullable_to_non_nullable + as bool, + isPlaying: + null == isPlaying + ? _value.isPlaying + : isPlaying // ignore: cast_nullable_to_non_nullable + as bool, + songWithProgress: + freezed == songWithProgress + ? _value.songWithProgress + : songWithProgress // ignore: cast_nullable_to_non_nullable + as SongWithProgress?, + ) + as $Val, + ); } /// Create a copy of PlaybackState @@ -1114,16 +1132,18 @@ class _$PlaybackStateCopyWithImpl<$Res, $Val extends PlaybackState> abstract class _$$PlaybackStateImplCopyWith<$Res> implements $PlaybackStateCopyWith<$Res> { factory _$$PlaybackStateImplCopyWith( - _$PlaybackStateImpl value, $Res Function(_$PlaybackStateImpl) then) = - __$$PlaybackStateImplCopyWithImpl<$Res>; + _$PlaybackStateImpl value, + $Res Function(_$PlaybackStateImpl) then, + ) = __$$PlaybackStateImplCopyWithImpl<$Res>; @override @useResult - $Res call( - {double volume, - double? previousVolume, - bool isMuted, - bool isPlaying, - SongWithProgress? songWithProgress}); + $Res call({ + double volume, + double? previousVolume, + bool isMuted, + bool isPlaying, + SongWithProgress? songWithProgress, + }); @override $SongWithProgressCopyWith<$Res>? get songWithProgress; @@ -1134,8 +1154,9 @@ class __$$PlaybackStateImplCopyWithImpl<$Res> extends _$PlaybackStateCopyWithImpl<$Res, _$PlaybackStateImpl> implements _$$PlaybackStateImplCopyWith<$Res> { __$$PlaybackStateImplCopyWithImpl( - _$PlaybackStateImpl _value, $Res Function(_$PlaybackStateImpl) _then) - : super(_value, _then); + _$PlaybackStateImpl _value, + $Res Function(_$PlaybackStateImpl) _then, + ) : super(_value, _then); /// Create a copy of PlaybackState /// with the given fields replaced by the non-null parameter values. @@ -1148,40 +1169,48 @@ class __$$PlaybackStateImplCopyWithImpl<$Res> Object? isPlaying = null, Object? songWithProgress = freezed, }) { - return _then(_$PlaybackStateImpl( - volume: null == volume - ? _value.volume - : volume // ignore: cast_nullable_to_non_nullable - as double, - previousVolume: freezed == previousVolume - ? _value.previousVolume - : previousVolume // ignore: cast_nullable_to_non_nullable - as double?, - isMuted: null == isMuted - ? _value.isMuted - : isMuted // ignore: cast_nullable_to_non_nullable - as bool, - isPlaying: null == isPlaying - ? _value.isPlaying - : isPlaying // ignore: cast_nullable_to_non_nullable - as bool, - songWithProgress: freezed == songWithProgress - ? _value.songWithProgress - : songWithProgress // ignore: cast_nullable_to_non_nullable - as SongWithProgress?, - )); + return _then( + _$PlaybackStateImpl( + volume: + null == volume + ? _value.volume + : volume // ignore: cast_nullable_to_non_nullable + as double, + previousVolume: + freezed == previousVolume + ? _value.previousVolume + : previousVolume // ignore: cast_nullable_to_non_nullable + as double?, + isMuted: + null == isMuted + ? _value.isMuted + : isMuted // ignore: cast_nullable_to_non_nullable + as bool, + isPlaying: + null == isPlaying + ? _value.isPlaying + : isPlaying // ignore: cast_nullable_to_non_nullable + as bool, + songWithProgress: + freezed == songWithProgress + ? _value.songWithProgress + : songWithProgress // ignore: cast_nullable_to_non_nullable + as SongWithProgress?, + ), + ); } } /// @nodoc class _$PlaybackStateImpl implements _PlaybackState { - const _$PlaybackStateImpl( - {this.volume = 0.5, - this.previousVolume, - this.isMuted = false, - this.isPlaying = false, - this.songWithProgress}); + const _$PlaybackStateImpl({ + this.volume = 0.5, + this.previousVolume, + this.isMuted = false, + this.isPlaying = false, + this.songWithProgress, + }); /// Legal values are between 0 and 1. @override @@ -1221,8 +1250,14 @@ class _$PlaybackStateImpl implements _PlaybackState { } @override - int get hashCode => Object.hash(runtimeType, volume, previousVolume, isMuted, - isPlaying, songWithProgress); + int get hashCode => Object.hash( + runtimeType, + volume, + previousVolume, + isMuted, + isPlaying, + songWithProgress, + ); /// Create a copy of PlaybackState /// with the given fields replaced by the non-null parameter values. @@ -1234,12 +1269,13 @@ class _$PlaybackStateImpl implements _PlaybackState { } abstract class _PlaybackState implements PlaybackState { - const factory _PlaybackState( - {final double volume, - final double? previousVolume, - final bool isMuted, - final bool isPlaying, - final SongWithProgress? songWithProgress}) = _$PlaybackStateImpl; + const factory _PlaybackState({ + final double volume, + final double? previousVolume, + final bool isMuted, + final bool isPlaying, + final SongWithProgress? songWithProgress, + }) = _$PlaybackStateImpl; /// Legal values are between 0 and 1. @override @@ -1278,8 +1314,9 @@ mixin _$SongWithProgress { /// @nodoc abstract class $SongWithProgressCopyWith<$Res> { factory $SongWithProgressCopyWith( - SongWithProgress value, $Res Function(SongWithProgress) then) = - _$SongWithProgressCopyWithImpl<$Res, SongWithProgress>; + SongWithProgress value, + $Res Function(SongWithProgress) then, + ) = _$SongWithProgressCopyWithImpl<$Res, SongWithProgress>; @useResult $Res call({Duration progress, Song song}); } @@ -1298,29 +1335,32 @@ class _$SongWithProgressCopyWithImpl<$Res, $Val extends SongWithProgress> /// with the given fields replaced by the non-null parameter values. @pragma('vm:prefer-inline') @override - $Res call({ - Object? progress = null, - Object? song = null, - }) { - return _then(_value.copyWith( - progress: null == progress - ? _value.progress - : progress // ignore: cast_nullable_to_non_nullable - as Duration, - song: null == song - ? _value.song - : song // ignore: cast_nullable_to_non_nullable - as Song, - ) as $Val); + $Res call({Object? progress = null, Object? song = null}) { + return _then( + _value.copyWith( + progress: + null == progress + ? _value.progress + : progress // ignore: cast_nullable_to_non_nullable + as Duration, + song: + null == song + ? _value.song + : song // ignore: cast_nullable_to_non_nullable + as Song, + ) + as $Val, + ); } } /// @nodoc abstract class _$$SongWithProgressImplCopyWith<$Res> implements $SongWithProgressCopyWith<$Res> { - factory _$$SongWithProgressImplCopyWith(_$SongWithProgressImpl value, - $Res Function(_$SongWithProgressImpl) then) = - __$$SongWithProgressImplCopyWithImpl<$Res>; + factory _$$SongWithProgressImplCopyWith( + _$SongWithProgressImpl value, + $Res Function(_$SongWithProgressImpl) then, + ) = __$$SongWithProgressImplCopyWithImpl<$Res>; @override @useResult $Res call({Duration progress, Song song}); @@ -1330,28 +1370,30 @@ abstract class _$$SongWithProgressImplCopyWith<$Res> class __$$SongWithProgressImplCopyWithImpl<$Res> extends _$SongWithProgressCopyWithImpl<$Res, _$SongWithProgressImpl> implements _$$SongWithProgressImplCopyWith<$Res> { - __$$SongWithProgressImplCopyWithImpl(_$SongWithProgressImpl _value, - $Res Function(_$SongWithProgressImpl) _then) - : super(_value, _then); + __$$SongWithProgressImplCopyWithImpl( + _$SongWithProgressImpl _value, + $Res Function(_$SongWithProgressImpl) _then, + ) : super(_value, _then); /// Create a copy of SongWithProgress /// with the given fields replaced by the non-null parameter values. @pragma('vm:prefer-inline') @override - $Res call({ - Object? progress = null, - Object? song = null, - }) { - return _then(_$SongWithProgressImpl( - progress: null == progress - ? _value.progress - : progress // ignore: cast_nullable_to_non_nullable - as Duration, - song: null == song - ? _value.song - : song // ignore: cast_nullable_to_non_nullable - as Song, - )); + $Res call({Object? progress = null, Object? song = null}) { + return _then( + _$SongWithProgressImpl( + progress: + null == progress + ? _value.progress + : progress // ignore: cast_nullable_to_non_nullable + as Duration, + song: + null == song + ? _value.song + : song // ignore: cast_nullable_to_non_nullable + as Song, + ), + ); } } @@ -1390,13 +1432,16 @@ class _$SongWithProgressImpl implements _SongWithProgress { @pragma('vm:prefer-inline') _$$SongWithProgressImplCopyWith<_$SongWithProgressImpl> get copyWith => __$$SongWithProgressImplCopyWithImpl<_$SongWithProgressImpl>( - this, _$identity); + this, + _$identity, + ); } abstract class _SongWithProgress implements SongWithProgress { - const factory _SongWithProgress( - {required final Duration progress, - required final Song song}) = _$SongWithProgressImpl; + const factory _SongWithProgress({ + required final Duration progress, + required final Song song, + }) = _$SongWithProgressImpl; @override Duration get progress; diff --git a/boring_to_beautiful/step_01/lib/src/shared/providers/artists.dart b/boring_to_beautiful/step_01/lib/src/shared/providers/artists.dart index d116ad9cdd..f9e4a8063e 100644 --- a/boring_to_beautiful/step_01/lib/src/shared/providers/artists.dart +++ b/boring_to_beautiful/step_01/lib/src/shared/providers/artists.dart @@ -11,162 +11,175 @@ class ArtistsProvider { static ArtistsProvider get shared => ArtistsProvider(); List get artists => const [ - Artist( - id: 'jmo', - name: 'Jessie Morrison', + Artist( + id: 'jmo', + name: 'Jessie Morrison', + image: MyArtistImage( + image: 'assets/images/artists/woman.jpeg', + sourceLink: 'https://unsplash.com/photos/w8wpFqiMpW8', + sourceName: 'Daniel Monteiro', + ), + bio: + 'Jessie "JMo" Morrison is an American singer, actress, and dancer. The following year she won over America\'s hearts first appearing in the 2004 movie Unexpected Engagement. Soon after she released her debut album, Hopeful Romantics.', + updates: [ + 'So happy that everyone is loving the new music! It\'s been my pride and joy to work on and I\'m thrilled that you finally get to hear it!', + 'Happy Valentine\'s Day y\'all!!! I love each and every one of you 💋😘', + '#HappyGalentinesDay!!! Chocolates. Ice Cream. Your favorite rom-com. Let\'s goo!!! 💕✨', + ], + events: [ + Event( + date: '1/20/22', + title: 'Jessie Morrison: No More Heartbreak Tour', + location: 'Mountain View, California', + link: 'Tickets', + ), + Event( + date: '1/22/22', + title: 'Jessie Morrison: No More Heartbreak Tour', + location: 'Austin, Texas', + link: 'Tickets', + ), + Event( + date: '1/23/22', + title: 'Jessie Morrison: No More Heartbreak Tour', + location: 'Houston, Texas', + link: 'Tickets', + ), + Event( + date: '2/8/22', + title: 'Jessie Morrison: No More Heartbreak Tour', + location: 'Los Angeles, California', + link: 'Tickets', + ), + ], + news: [ + News( + title: + 'Jessie Morrison a 26-stop cross country tour for the first time in 6 years.', + author: 'By Jacqueline Stewart', + blurb: + 'Our favorite triple-threat Jessie Morrison is back, this time with a 26 stop tour across the country. She\'ll kick things off in Mountain View on January 20th, 2022 in Mountain View California with more stops being announced over the next few weeks...', image: MyArtistImage( - image: 'assets/images/artists/woman.jpeg', - sourceLink: 'https://unsplash.com/photos/w8wpFqiMpW8', - sourceName: 'Daniel Monteiro', + image: 'assets/images/news/concert.jpeg', + sourceLink: 'https://unsplash.com/photos/hzgs56Ze49s', + sourceName: 'Anthony DELANOIX', ), - bio: - 'Jessie "JMo" Morrison is an American singer, actress, and dancer. The following year she won over America\'s hearts first appearing in the 2004 movie Unexpected Engagement. Soon after she released her debut album, Hopeful Romantics.', - updates: [ - 'So happy that everyone is loving the new music! It\'s been my pride and joy to work on and I\'m thrilled that you finally get to hear it!', - 'Happy Valentine\'s Day y\'all!!! I love each and every one of you 💋😘', - '#HappyGalentinesDay!!! Chocolates. Ice Cream. Your favorite rom-com. Let\'s goo!!! 💕✨', - ], - events: [ - Event( - date: '1/20/22', - title: 'Jessie Morrison: No More Heartbreak Tour', - location: 'Mountain View, California', - link: 'Tickets'), - Event( - date: '1/22/22', - title: 'Jessie Morrison: No More Heartbreak Tour', - location: 'Austin, Texas', - link: 'Tickets'), - Event( - date: '1/23/22', - title: 'Jessie Morrison: No More Heartbreak Tour', - location: 'Houston, Texas', - link: 'Tickets'), - Event( - date: '2/8/22', - title: 'Jessie Morrison: No More Heartbreak Tour', - location: 'Los Angeles, California', - link: 'Tickets'), - ], - news: [ - News( - title: - 'Jessie Morrison a 26-stop cross country tour for the first time in 6 years.', - author: 'By Jacqueline Stewart', - blurb: - 'Our favorite triple-threat Jessie Morrison is back, this time with a 26 stop tour across the country. She\'ll kick things off in Mountain View on January 20th, 2022 in Mountain View California with more stops being announced over the next few weeks...', - image: MyArtistImage( - image: 'assets/images/news/concert.jpeg', - sourceLink: 'https://unsplash.com/photos/hzgs56Ze49s', - sourceName: 'Anthony DELANOIX', - ), - ) - ], ), - Artist( - id: 'lb', - name: 'Lucas Bryant', + ], + ), + Artist( + id: 'lb', + name: 'Lucas Bryant', + image: MyArtistImage( + image: 'assets/images/albums/artist1-album2.jpg', + sourceLink: 'https://unsplash.com/photos/6etHcucBiRg', + sourceName: 'Keagan Henman', + ), + bio: + 'Lucas Bryant is an American country music singer and songwriter. He moved to Nashville at the age of 18 to pursue his country music career. With 34 awards to his name, he currently holds the record for most awards in country music.', + updates: [ + 'Who\'s ready to party this weekend?! See you tomorrow, Nashville! #LBlive', + 'Can\'t wait to get back on stage after so long. What songs do you want to hear?', + 'We\'re going all in this weekend! How are you doing, Vegas?!', + ], + events: [ + Event( + date: '5/16/22', + title: 'Back To My Hometown Tour', + location: 'Indianapolis, IN', + link: 'Tickets', + ), + Event( + date: '5/18/22', + title: 'Back To My Hometown Tour', + location: 'San Antonio, TX', + link: 'Tickets', + ), + Event( + date: '5/20/22', + title: 'Back To My Hometown Tour', + location: 'Phoenix, AZ', + link: 'Tickets', + ), + Event( + date: '5/23/22', + title: 'Back To My Hometown Tour', + location: 'San Diego, CA', + link: 'Tickets', + ), + ], + news: [ + News( + title: + 'Country Music Favorites Lucas Bryant, Mariam Lubbock, Michelle Delaney and Jackson Murray Join Forces For The Biggest Performance in Country History.', + author: 'Lonnie Hall', + blurb: + 'Calling all country music fans! Fasten your seat belts because the 2022 Best of Country Awards is expecting a huge performance from some of our favorite artists. Country music legends Mariam Lubbock and Jackson Murray will be joined by Lucas Bryant and Michelle Delaney for a performance we\'ll never forget.', image: MyArtistImage( image: 'assets/images/albums/artist1-album2.jpg', sourceLink: 'https://unsplash.com/photos/6etHcucBiRg', sourceName: 'Keagan Henman', ), - bio: - 'Lucas Bryant is an American country music singer and songwriter. He moved to Nashville at the age of 18 to pursue his country music career. With 34 awards to his name, he currently holds the record for most awards in country music.', - updates: [ - 'Who\'s ready to party this weekend?! See you tomorrow, Nashville! #LBlive', - 'Can\'t wait to get back on stage after so long. What songs do you want to hear?', - 'We\'re going all in this weekend! How are you doing, Vegas?!', - ], - events: [ - Event( - date: '5/16/22', - title: 'Back To My Hometown Tour', - location: 'Indianapolis, IN', - link: 'Tickets'), - Event( - date: '5/18/22', - title: 'Back To My Hometown Tour', - location: 'San Antonio, TX', - link: 'Tickets'), - Event( - date: '5/20/22', - title: 'Back To My Hometown Tour', - location: 'Phoenix, AZ', - link: 'Tickets'), - Event( - date: '5/23/22', - title: 'Back To My Hometown Tour', - location: 'San Diego, CA', - link: 'Tickets'), - ], - news: [ - News( - title: - 'Country Music Favorites Lucas Bryant, Mariam Lubbock, Michelle Delaney and Jackson Murray Join Forces For The Biggest Performance in Country History.', - author: 'Lonnie Hall', - blurb: - 'Calling all country music fans! Fasten your seat belts because the 2022 Best of Country Awards is expecting a huge performance from some of our favorite artists. Country music legends Mariam Lubbock and Jackson Murray will be joined by Lucas Bryant and Michelle Delaney for a performance we\'ll never forget.', - image: MyArtistImage( - image: 'assets/images/albums/artist1-album2.jpg', - sourceLink: 'https://unsplash.com/photos/6etHcucBiRg', - sourceName: 'Keagan Henman', - ), - ), - ], ), - Artist( - id: 'jonjames', - name: 'Jon James', + ], + ), + Artist( + id: 'jonjames', + name: 'Jon James', + image: MyArtistImage( + image: 'assets/images/artists/joe.jpg', + sourceLink: 'https://unsplash.com/photos/k7UKO-tT5QU', + sourceName: 'Natalie Runnerstrom', + ), + bio: + 'Jon James is an American singer and songwriter. He\'s best known for his number one single "Never Going Back" which stayed atop the charts for 10 weeks.', + updates: [ + '3. MORE. DAYS. Who\'s ready for #FallingForYou?! Tune in tomorrow to see the full track list!', + '4 days until I get to share some of the favorite songs I\'ve ever written with you.', + '#FallingForYou dropping in 5 days! Send me your favorite music video concepts 🎥 😎', + ], + events: [ + Event( + date: '10/22/21', + title: 'Falling For You Tour', + location: 'Dallas, Texas', + link: 'Ticketmaster', + ), + Event( + date: '10/23/21', + title: 'Falling For You Tour', + location: 'Houston, Texas', + link: 'Ticketmaster', + ), + Event( + date: '10/26/21', + title: 'Falling For You Tour', + location: 'Phoenix, Arizona', + link: 'Ticketmaster', + ), + Event( + date: '10/27/21', + title: 'Falling For You Tour', + location: 'Los Angeles, California', + link: 'Ticketmaster', + ), + ], + news: [ + News( + title: + 'Jon James is excited for the release of his sixth album "Falling For You"', + author: 'Top Media Today', + blurb: + 'Jon James will be dropping his new album "Falling For You" on Friday to much fan excitement. The 6-time Grammy winning artist has spent the last year writing and recording for this album that\'s been dubbed "his best work yet."', image: MyArtistImage( - image: 'assets/images/artists/joe.jpg', - sourceLink: 'https://unsplash.com/photos/k7UKO-tT5QU', - sourceName: 'Natalie Runnerstrom', + image: 'assets/images/news/recording_studio.jpg', + sourceLink: 'https://unsplash.com/photos/CbOGmLA46JI', + sourceName: 'Yohann LIBOT', ), - bio: - 'Jon James is an American singer and songwriter. He\'s best known for his number one single "Never Going Back" which stayed atop the charts for 10 weeks.', - updates: [ - '3. MORE. DAYS. Who\'s ready for #FallingForYou?! Tune in tomorrow to see the full track list!', - '4 days until I get to share some of the favorite songs I\'ve ever written with you.', - '#FallingForYou dropping in 5 days! Send me your favorite music video concepts 🎥 😎', - ], - events: [ - Event( - date: '10/22/21', - title: 'Falling For You Tour', - location: 'Dallas, Texas', - link: 'Ticketmaster'), - Event( - date: '10/23/21', - title: 'Falling For You Tour', - location: 'Houston, Texas', - link: 'Ticketmaster'), - Event( - date: '10/26/21', - title: 'Falling For You Tour', - location: 'Phoenix, Arizona', - link: 'Ticketmaster'), - Event( - date: '10/27/21', - title: 'Falling For You Tour', - location: 'Los Angeles, California', - link: 'Ticketmaster'), - ], - news: [ - News( - title: - 'Jon James is excited for the release of his sixth album "Falling For You"', - author: 'Top Media Today', - blurb: - 'Jon James will be dropping his new album "Falling For You" on Friday to much fan excitement. The 6-time Grammy winning artist has spent the last year writing and recording for this album that\'s been dubbed "his best work yet."', - image: MyArtistImage( - image: 'assets/images/news/recording_studio.jpg', - sourceLink: 'https://unsplash.com/photos/CbOGmLA46JI', - sourceName: 'Yohann LIBOT'), - ) - ], ), - ]; + ], + ), + ]; Artist? getArtist(String id) { return artists.firstWhereOrNull((artist) => artist.id == id); diff --git a/boring_to_beautiful/step_01/lib/src/shared/providers/playlists.dart b/boring_to_beautiful/step_01/lib/src/shared/providers/playlists.dart index e8bab994dd..f27f71b3ec 100644 --- a/boring_to_beautiful/step_01/lib/src/shared/providers/playlists.dart +++ b/boring_to_beautiful/step_01/lib/src/shared/providers/playlists.dart @@ -18,41 +18,50 @@ class PlaylistsProvider { static List images() { return [ const MyArtistImage( - image: 'assets/images/playlists/favorite.jpg', - sourceLink: 'https://unsplash.com/photos/60GsdOMRFGc', - sourceName: 'Karsten Winegeart'), + image: 'assets/images/playlists/favorite.jpg', + sourceLink: 'https://unsplash.com/photos/60GsdOMRFGc', + sourceName: 'Karsten Winegeart', + ), const MyArtistImage( - image: 'assets/images/playlists/austin.jpg', - sourceLink: 'https://unsplash.com/photos/AlBgcDfDG_s', - sourceName: 'Carlos Alfonso'), + image: 'assets/images/playlists/austin.jpg', + sourceLink: 'https://unsplash.com/photos/AlBgcDfDG_s', + sourceName: 'Carlos Alfonso', + ), const MyArtistImage( - image: 'assets/images/playlists/reading.jpg', - sourceLink: 'https://unsplash.com/photos/wkgv7I2VTzM', - sourceName: 'Alexandra Fuller'), + image: 'assets/images/playlists/reading.jpg', + sourceLink: 'https://unsplash.com/photos/wkgv7I2VTzM', + sourceName: 'Alexandra Fuller', + ), const MyArtistImage( - image: 'assets/images/playlists/workout.jpg', - sourceLink: 'https://unsplash.com/photos/CnEEF5eJemQ', - sourceName: 'Karsten Winegeart'), + image: 'assets/images/playlists/workout.jpg', + sourceLink: 'https://unsplash.com/photos/CnEEF5eJemQ', + sourceName: 'Karsten Winegeart', + ), const MyArtistImage( - image: 'assets/images/playlists/calm.jpg', - sourceLink: 'https://unsplash.com/photos/NTyBbu66_SI', - sourceName: 'Jared Rice'), + image: 'assets/images/playlists/calm.jpg', + sourceLink: 'https://unsplash.com/photos/NTyBbu66_SI', + sourceName: 'Jared Rice', + ), const MyArtistImage( - image: 'assets/images/playlists/coffee.jpg', - sourceLink: 'https://unsplash.com/photos/XOhI_kW_TaM', - sourceName: 'Nathan Dumlao'), + image: 'assets/images/playlists/coffee.jpg', + sourceLink: 'https://unsplash.com/photos/XOhI_kW_TaM', + sourceName: 'Nathan Dumlao', + ), const MyArtistImage( - image: 'assets/images/playlists/piano.jpg', - sourceLink: 'https://unsplash.com/photos/BhfE1IgcsA8', - sourceName: 'Jordan Whitfield'), + image: 'assets/images/playlists/piano.jpg', + sourceLink: 'https://unsplash.com/photos/BhfE1IgcsA8', + sourceName: 'Jordan Whitfield', + ), const MyArtistImage( - image: 'assets/images/playlists/studying.jpg', - sourceLink: 'https://unsplash.com/photos/-moT-Deiw1M', - sourceName: 'Humble Lamb'), + image: 'assets/images/playlists/studying.jpg', + sourceLink: 'https://unsplash.com/photos/-moT-Deiw1M', + sourceName: 'Humble Lamb', + ), const MyArtistImage( - image: 'assets/images/playlists/jazz.jpg', - sourceLink: 'https://unsplash.com/photos/BY_KyTwTKq4', - sourceName: 'dimitri.photography'), + image: 'assets/images/playlists/jazz.jpg', + sourceLink: 'https://unsplash.com/photos/BY_KyTwTKq4', + sourceName: 'dimitri.photography', + ), ]; } @@ -85,8 +94,10 @@ class PlaylistsProvider { ); } - static final List _randomPlaylists = - List.generate(10, (index) => randomLengthPlaylist()); + static final List _randomPlaylists = List.generate( + 10, + (index) => randomLengthPlaylist(), + ); } String randomId() { diff --git a/boring_to_beautiful/step_01/lib/src/shared/providers/songs.dart b/boring_to_beautiful/step_01/lib/src/shared/providers/songs.dart index ed018a83ff..f1205f2dcb 100644 --- a/boring_to_beautiful/step_01/lib/src/shared/providers/songs.dart +++ b/boring_to_beautiful/step_01/lib/src/shared/providers/songs.dart @@ -52,9 +52,10 @@ final _songs = [ ArtistsProvider.shared.getArtist('jonjames')!, '3:35'.toDuration(), const MyArtistImage( - image: 'assets/images/albums/artist4-album2.jpg', - sourceLink: 'https://unsplash.com/photos/RQgKM1h2agA', - sourceName: 'Alexandru Acea'), + image: 'assets/images/albums/artist4-album2.jpg', + sourceLink: 'https://unsplash.com/photos/RQgKM1h2agA', + sourceName: 'Alexandru Acea', + ), ), RankedSong( 2, @@ -62,9 +63,10 @@ final _songs = [ ArtistsProvider.shared.getArtist('jonjames')!, '3:52'.toDuration(), const MyArtistImage( - image: 'assets/images/albums/artist4-album1.jpg', - sourceLink: 'https://unsplash.com/photos/ZWDg7v2FPWE', - sourceName: 'Jr Korpa'), + image: 'assets/images/albums/artist4-album1.jpg', + sourceLink: 'https://unsplash.com/photos/ZWDg7v2FPWE', + sourceName: 'Jr Korpa', + ), ), RankedSong( 3, @@ -72,9 +74,10 @@ final _songs = [ ArtistsProvider.shared.getArtist('jonjames')!, '3:39'.toDuration(), const MyArtistImage( - image: 'assets/images/albums/artist4-album3.jpg', - sourceLink: 'https://unsplash.com/photos/rX12B5uX7QM', - sourceName: 'Stormseeker'), + image: 'assets/images/albums/artist4-album3.jpg', + sourceLink: 'https://unsplash.com/photos/rX12B5uX7QM', + sourceName: 'Stormseeker', + ), ), RankedSong( 1, diff --git a/boring_to_beautiful/step_01/lib/src/shared/providers/theme.dart b/boring_to_beautiful/step_01/lib/src/shared/providers/theme.dart index a152dcdcba..a86e3daf64 100644 --- a/boring_to_beautiful/step_01/lib/src/shared/providers/theme.dart +++ b/boring_to_beautiful/step_01/lib/src/shared/providers/theme.dart @@ -28,12 +28,13 @@ class ThemeSettingChange extends Notification { } class ThemeProvider extends InheritedWidget { - const ThemeProvider( - {super.key, - required this.settings, - required this.lightDynamic, - required this.darkDynamic, - required super.child}); + const ThemeProvider({ + super.key, + required this.settings, + required this.lightDynamic, + required this.darkDynamic, + required super.child, + }); final ValueNotifier settings; final ColorScheme? lightDynamic; @@ -59,8 +60,9 @@ class ThemeProvider extends InheritedWidget { Color blend(Color targetColor) { return Color( - // ignore: deprecated_member_use - Blend.harmonize(targetColor.value, settings.value.sourceColor.value)); + // ignore: deprecated_member_use + Blend.harmonize(targetColor.value, settings.value.sourceColor.value), + ); } Color source(Color? target) { @@ -72,18 +74,18 @@ class ThemeProvider extends InheritedWidget { } ColorScheme colors(Brightness brightness, Color? targetColor) { - final dynamicPrimary = brightness == Brightness.light - ? lightDynamic?.primary - : darkDynamic?.primary; + final dynamicPrimary = + brightness == Brightness.light + ? lightDynamic?.primary + : darkDynamic?.primary; return ColorScheme.fromSeed( seedColor: dynamicPrimary ?? source(targetColor), brightness: brightness, ); } - ShapeBorder get shapeMedium => RoundedRectangleBorder( - borderRadius: BorderRadius.circular(8), - ); + ShapeBorder get shapeMedium => + RoundedRectangleBorder(borderRadius: BorderRadius.circular(8)); CardTheme cardTheme() { return CardTheme( @@ -113,21 +115,13 @@ class ThemeProvider extends InheritedWidget { labelColor: colors.secondary, unselectedLabelColor: colors.onSurfaceVariant, indicator: BoxDecoration( - border: Border( - bottom: BorderSide( - color: colors.secondary, - width: 2, - ), - ), + border: Border(bottom: BorderSide(color: colors.secondary, width: 2)), ), ); } BottomAppBarTheme bottomAppBarTheme(ColorScheme colors) { - return BottomAppBarTheme( - color: colors.surface, - elevation: 0, - ); + return BottomAppBarTheme(color: colors.surface, elevation: 0); } BottomNavigationBarThemeData bottomNavigationBarTheme(ColorScheme colors) { @@ -146,9 +140,7 @@ class ThemeProvider extends InheritedWidget { } DrawerThemeData drawerTheme(ColorScheme colors) { - return DrawerThemeData( - backgroundColor: colors.surface, - ); + return DrawerThemeData(backgroundColor: colors.surface); } ThemeData light([Color? targetColor]) { @@ -207,10 +199,7 @@ class ThemeProvider extends InheritedWidget { } class ThemeSettings { - ThemeSettings({ - required this.sourceColor, - required this.themeMode, - }); + ThemeSettings({required this.sourceColor, required this.themeMode}); final Color sourceColor; final ThemeMode themeMode; @@ -221,10 +210,7 @@ Color randomColor() { } // Custom Colors -const linkColor = CustomColor( - name: 'Link Color', - color: Color(0xFF00B0FF), -); +const linkColor = CustomColor(name: 'Link Color', color: Color(0xFF00B0FF)); class CustomColor { const CustomColor({ diff --git a/boring_to_beautiful/step_01/lib/src/shared/router.dart b/boring_to_beautiful/step_01/lib/src/shared/router.dart index 91d647ea86..0d20638569 100644 --- a/boring_to_beautiful/step_01/lib/src/shared/router.dart +++ b/boring_to_beautiful/step_01/lib/src/shared/router.dart @@ -56,41 +56,46 @@ final appRouter = GoRouter( // HomeScreen GoRoute( path: '/', - pageBuilder: (context, state) => const MaterialPage( - key: _pageKey, - child: RootLayout( - key: _scaffoldKey, - currentIndex: 0, - child: HomeScreen(), - ), - ), + pageBuilder: + (context, state) => const MaterialPage( + key: _pageKey, + child: RootLayout( + key: _scaffoldKey, + currentIndex: 0, + child: HomeScreen(), + ), + ), ), // PlaylistHomeScreen GoRoute( path: '/playlists', - pageBuilder: (context, state) => const MaterialPage( - key: _pageKey, - child: RootLayout( - key: _scaffoldKey, - currentIndex: 1, - child: PlaylistHomeScreen(), - ), - ), - routes: [ - GoRoute( - path: ':pid', - pageBuilder: (context, state) => MaterialPage( - key: state.pageKey, + pageBuilder: + (context, state) => const MaterialPage( + key: _pageKey, child: RootLayout( key: _scaffoldKey, currentIndex: 1, - child: PlaylistScreen( - playlist: playlistsProvider - .getPlaylist(state.pathParameters['pid']!)!, - ), + child: PlaylistHomeScreen(), ), ), + routes: [ + GoRoute( + path: ':pid', + pageBuilder: + (context, state) => MaterialPage( + key: state.pageKey, + child: RootLayout( + key: _scaffoldKey, + currentIndex: 1, + child: PlaylistScreen( + playlist: + playlistsProvider.getPlaylist( + state.pathParameters['pid']!, + )!, + ), + ), + ), ), ], ), @@ -98,28 +103,32 @@ final appRouter = GoRouter( // ArtistHomeScreen GoRoute( path: '/artists', - pageBuilder: (context, state) => const MaterialPage( - key: _pageKey, - child: RootLayout( - key: _scaffoldKey, - currentIndex: 2, - child: ArtistsScreen(), - ), - ), - routes: [ - GoRoute( - path: ':aid', - pageBuilder: (context, state) => MaterialPage( - key: state.pageKey, + pageBuilder: + (context, state) => const MaterialPage( + key: _pageKey, child: RootLayout( key: _scaffoldKey, currentIndex: 2, - child: ArtistScreen( - artist: - artistsProvider.getArtist(state.pathParameters['aid']!)!, - ), + child: ArtistsScreen(), ), ), + routes: [ + GoRoute( + path: ':aid', + pageBuilder: + (context, state) => MaterialPage( + key: state.pageKey, + child: RootLayout( + key: _scaffoldKey, + currentIndex: 2, + child: ArtistScreen( + artist: + artistsProvider.getArtist( + state.pathParameters['aid']!, + )!, + ), + ), + ), // builder: (context, state) => ArtistScreen( // id: state.params['aid']!, // ), @@ -129,14 +138,15 @@ final appRouter = GoRouter( for (final route in destinations.skip(3)) GoRoute( path: route.route, - pageBuilder: (context, state) => MaterialPage( - key: _pageKey, - child: RootLayout( - key: _scaffoldKey, - currentIndex: destinations.indexOf(route), - child: const SizedBox(), - ), - ), + pageBuilder: + (context, state) => MaterialPage( + key: _pageKey, + child: RootLayout( + key: _scaffoldKey, + currentIndex: destinations.indexOf(route), + child: const SizedBox(), + ), + ), ), ], ); diff --git a/boring_to_beautiful/step_01/lib/src/shared/views/adaptive_image_card.dart b/boring_to_beautiful/step_01/lib/src/shared/views/adaptive_image_card.dart index 07cab2b0d7..99f5be0837 100644 --- a/boring_to_beautiful/step_01/lib/src/shared/views/adaptive_image_card.dart +++ b/boring_to_beautiful/step_01/lib/src/shared/views/adaptive_image_card.dart @@ -36,20 +36,13 @@ class AdaptiveImageCard extends StatelessWidget { ), ), Expanded( - child: Padding( - padding: const EdgeInsets.all(20), - child: child, - ), + child: Padding(padding: const EdgeInsets.all(20), child: child), ), ], ); } return Padding( - padding: const EdgeInsets.only( - left: 20, - bottom: 20, - top: 20, - ), + padding: const EdgeInsets.only(left: 20, bottom: 20, top: 20), child: Row( mainAxisAlignment: MainAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.end, @@ -65,11 +58,8 @@ class AdaptiveImageCard extends StatelessWidget { ), ), Expanded( - child: Padding( - padding: const EdgeInsets.all(20), - child: child, - ), - ) + child: Padding(padding: const EdgeInsets.all(20), child: child), + ), ], ), ); diff --git a/boring_to_beautiful/step_01/lib/src/shared/views/adaptive_navigation.dart b/boring_to_beautiful/step_01/lib/src/shared/views/adaptive_navigation.dart index 92734c9005..aa78766292 100644 --- a/boring_to_beautiful/step_01/lib/src/shared/views/adaptive_navigation.dart +++ b/boring_to_beautiful/step_01/lib/src/shared/views/adaptive_navigation.dart @@ -30,12 +30,15 @@ class AdaptiveNavigation extends StatelessWidget { NavigationRail( extended: dimens.maxWidth >= 800, minExtendedWidth: 180, - destinations: destinations - .map((e) => NavigationRailDestination( - icon: e.icon, - label: Text(e.label), - )) - .toList(), + destinations: + destinations + .map( + (e) => NavigationRailDestination( + icon: e.icon, + label: Text(e.label), + ), + ) + .toList(), selectedIndex: selectedIndex, onDestinationSelected: onDestinationSelected, ), diff --git a/boring_to_beautiful/step_01/lib/src/shared/views/article_content.dart b/boring_to_beautiful/step_01/lib/src/shared/views/article_content.dart index af243f015b..c5a0b5e62a 100644 --- a/boring_to_beautiful/step_01/lib/src/shared/views/article_content.dart +++ b/boring_to_beautiful/step_01/lib/src/shared/views/article_content.dart @@ -5,11 +5,7 @@ import 'package:flutter/material.dart'; class ArticleContent extends StatelessWidget { - const ArticleContent({ - super.key, - required this.child, - this.maxWidth = 960, - }); + const ArticleContent({super.key, required this.child, this.maxWidth = 960}); final double maxWidth; final Widget child; @@ -19,13 +15,8 @@ class ArticleContent extends StatelessWidget { return Container( alignment: Alignment.topCenter, child: ConstrainedBox( - constraints: BoxConstraints( - maxWidth: maxWidth, - ), - child: Padding( - padding: const EdgeInsets.all(15), - child: child, - ), + constraints: BoxConstraints(maxWidth: maxWidth), + child: Padding(padding: const EdgeInsets.all(15), child: child), ), ); } diff --git a/boring_to_beautiful/step_01/lib/src/shared/views/bottom_bar.dart b/boring_to_beautiful/step_01/lib/src/shared/views/bottom_bar.dart index 06e085a9b6..bf15ad9bb0 100644 --- a/boring_to_beautiful/step_01/lib/src/shared/views/bottom_bar.dart +++ b/boring_to_beautiful/step_01/lib/src/shared/views/bottom_bar.dart @@ -26,16 +26,18 @@ class BottomBar extends StatelessWidget implements PreferredSizeWidget { final bloc = BlocProvider.of(context); return BlocBuilder( bloc: bloc, - builder: (context, state) => _BottomBar( - artist: state.songWithProgress?.song.artist, - isMuted: state.isMuted, - isPlaying: state.isPlaying, - preferredSize: preferredSize, - progress: state.songWithProgress?.progress, - song: state.songWithProgress?.song, - togglePlayPause: () => bloc.add(const PlaybackEvent.togglePlayPause()), - volume: state.volume, - ), + builder: + (context, state) => _BottomBar( + artist: state.songWithProgress?.song.artist, + isMuted: state.isMuted, + isPlaying: state.isPlaying, + preferredSize: preferredSize, + progress: state.songWithProgress?.progress, + song: state.songWithProgress?.song, + togglePlayPause: + () => bloc.add(const PlaybackEvent.togglePlayPause()), + volume: state.volume, + ), ); } } @@ -63,10 +65,12 @@ class _BottomBar extends StatelessWidget { @override Widget build(BuildContext context) => LayoutBuilder( - builder: (context, constraints) => constraints.isTablet - ? _buildDesktopBar(context, constraints) - : _buildMobileBar(context, constraints), - ); + builder: + (context, constraints) => + constraints.isTablet + ? _buildDesktopBar(context, constraints) + : _buildMobileBar(context, constraints), + ); Widget _buildDesktopBar(BuildContext context, BoxConstraints constraints) { return ColoredBox( @@ -79,10 +83,7 @@ class _BottomBar extends StatelessWidget { Row( children: [ _AlbumArt(song: song), - _SongDetails( - artist: artist, - song: song, - ), + _SongDetails(artist: artist, song: song), ], ), Flexible( @@ -95,12 +96,7 @@ class _BottomBar extends StatelessWidget { isPlaying: isPlaying, togglePlayPause: togglePlayPause, ), - Center( - child: _ProgressBar( - progress: progress, - song: song, - ), - ), + Center(child: _ProgressBar(progress: progress, song: song)), ], ), ), @@ -114,17 +110,18 @@ class _BottomBar extends StatelessWidget { final overlay = Overlay.of(context); OverlayEntry? entry; entry = OverlayEntry( - builder: (context) => Stack( - children: [ - Positioned( - child: _FullScreenPlayer( - onClose: () { - entry?.remove(); - }, - ), + builder: + (context) => Stack( + children: [ + Positioned( + child: _FullScreenPlayer( + onClose: () { + entry?.remove(); + }, + ), + ), + ], ), - ], - ), ); overlay.insert(entry); }, @@ -136,10 +133,10 @@ class _BottomBar extends StatelessWidget { } double get songProgress => switch ((progress, song)) { - (Duration progress, Song song) => - progress.inMilliseconds / song.length.inMilliseconds, - _ => 0, - }; + (Duration progress, Song song) => + progress.inMilliseconds / song.length.inMilliseconds, + _ => 0, + }; Widget _buildMobileBar(BuildContext context, BoxConstraints constraints) { return ColoredBox( @@ -152,17 +149,18 @@ class _BottomBar extends StatelessWidget { final overlay = Overlay.of(context); OverlayEntry? entry; entry = OverlayEntry( - builder: (context) => Stack( - children: [ - Positioned( - child: _MobilePlayer( - onClose: () { - entry?.remove(); - }, - ), + builder: + (context) => Stack( + children: [ + Positioned( + child: _MobilePlayer( + onClose: () { + entry?.remove(); + }, + ), + ), + ], ), - ], - ), ); overlay.insert(entry); }, @@ -191,10 +189,7 @@ class _BottomBar extends StatelessWidget { mainAxisAlignment: MainAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start, children: [ - Text( - song?.title ?? '', - style: context.labelMedium, - ), + Text(song?.title ?? '', style: context.labelMedium), Text( song?.artist.name ?? '', style: context.labelSmall, @@ -220,10 +215,7 @@ class _BottomBar extends StatelessWidget { } class _ProgressBar extends StatelessWidget { - const _ProgressBar({ - required this.progress, - required this.song, - }); + const _ProgressBar({required this.progress, required this.song}); /// Current playback depth into user is into [song]. final Duration? progress; @@ -231,10 +223,10 @@ class _ProgressBar extends StatelessWidget { final Song? song; double get songProgress => switch ((progress, song)) { - (Duration progress, Song song) => - progress.inMilliseconds / song.length.inMilliseconds, - _ => 0, - }; + (Duration progress, Song song) => + progress.inMilliseconds / song.length.inMilliseconds, + _ => 0, + }; @override Widget build(BuildContext context) { @@ -252,29 +244,32 @@ class _ProgressBar extends StatelessWidget { children: [ const SizedBox(width: 10), SizedBox( - child: progress != null - ? Text(progress!.toHumanizedString(), - style: Theme.of(context).textTheme.bodySmall) - : const Text('-'), + child: + progress != null + ? Text( + progress!.toHumanizedString(), + style: Theme.of(context).textTheme.bodySmall, + ) + : const Text('-'), ), Expanded( child: Slider( value: songProgress.clamp(0, 1), divisions: 1000, onChanged: (percent) { - BlocProvider.of(context).add( - PlaybackEvent.moveToInSong(percent), - ); + BlocProvider.of( + context, + ).add(PlaybackEvent.moveToInSong(percent)); }, onChangeEnd: (percent) { - BlocProvider.of(context).add( - PlaybackEvent.moveToInSong(percent), - ); + BlocProvider.of( + context, + ).add(PlaybackEvent.moveToInSong(percent)); // Because dragging pauses auto playback, resume playing // once the user finishes dragging. - BlocProvider.of(context).add( - const PlaybackEvent.togglePlayPause(), - ); + BlocProvider.of( + context, + ).add(const PlaybackEvent.togglePlayPause()); }, activeColor: Theme.of(context).colorScheme.onTertiaryContainer, @@ -282,12 +277,15 @@ class _ProgressBar extends StatelessWidget { ), ), SizedBox( - child: song != null - ? Text(song!.length.toHumanizedString(), - style: Theme.of(context).textTheme.bodySmall) - : const Text('-'), + child: + song != null + ? Text( + song!.length.toHumanizedString(), + style: Theme.of(context).textTheme.bodySmall, + ) + : const Text('-'), ), - const SizedBox(width: 10) + const SizedBox(width: 10), ], ), ); @@ -297,10 +295,7 @@ class _ProgressBar extends StatelessWidget { } class _VolumeBar extends StatelessWidget { - const _VolumeBar({ - required this.volume, - required this.isMuted, - }); + const _VolumeBar({required this.volume, required this.isMuted}); /// The percentage, between 0 and 1, at which to render the volume slider. final double volume; @@ -313,17 +308,16 @@ class _VolumeBar extends StatelessWidget { @override Widget build(BuildContext context) { return ConstrainedBox( - constraints: const BoxConstraints( - maxWidth: 200, - ), + constraints: const BoxConstraints(maxWidth: 200), child: Padding( padding: const EdgeInsets.all(8), child: Row( children: [ GestureDetector( - onTap: () => BlocProvider.of(context).add( - const PlaybackEvent.toggleMute(), - ), + onTap: + () => BlocProvider.of( + context, + ).add(const PlaybackEvent.toggleMute()), child: Icon(!isMuted ? Icons.volume_mute : Icons.volume_off), ), Expanded( @@ -332,8 +326,10 @@ class _VolumeBar extends StatelessWidget { min: 0, max: 1, divisions: 100, - onChanged: (newValue) => BlocProvider.of(context) - .add(PlaybackEvent.setVolume(newValue)), + onChanged: + (newValue) => BlocProvider.of( + context, + ).add(PlaybackEvent.setVolume(newValue)), activeColor: Theme.of(context).colorScheme.onTertiaryContainer, inactiveColor: Theme.of(context).colorScheme.onSurface, ), @@ -356,49 +352,50 @@ class _PlaybackControls extends StatelessWidget { @override Widget build(BuildContext context) { - return LayoutBuilder(builder: (context, constraints) { - double iconSize = 24; - double playIconSize = 32; - double innerPadding = 16; - double playPadding = 20; - if (constraints.maxWidth < 500) { - iconSize = 21; - playIconSize = 28; - innerPadding = 14; - playPadding = 17; - } - return Row( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Padding( + return LayoutBuilder( + builder: (context, constraints) { + double iconSize = 24; + double playIconSize = 32; + double innerPadding = 16; + double playPadding = 20; + if (constraints.maxWidth < 500) { + iconSize = 21; + playIconSize = 28; + innerPadding = 14; + playPadding = 17; + } + return Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Padding( padding: EdgeInsets.fromLTRB(0, 0, innerPadding, 0), - child: Icon(Icons.shuffle, size: iconSize)), - Icon(Icons.skip_previous, size: iconSize), - Padding( - padding: EdgeInsets.fromLTRB(playPadding, 0, innerPadding, 0), - child: GestureDetector( - onTap: togglePlayPause, - child: Icon( - isPlaying ? Icons.pause_circle : Icons.play_circle, - size: playIconSize, + child: Icon(Icons.shuffle, size: iconSize), + ), + Icon(Icons.skip_previous, size: iconSize), + Padding( + padding: EdgeInsets.fromLTRB(playPadding, 0, innerPadding, 0), + child: GestureDetector( + onTap: togglePlayPause, + child: Icon( + isPlaying ? Icons.pause_circle : Icons.play_circle, + size: playIconSize, + ), ), ), - ), - Icon(Icons.skip_next, size: iconSize), - Padding( - padding: EdgeInsets.fromLTRB(innerPadding, 0, 0, 0), - child: Icon(Icons.repeat, size: iconSize), - ), - ], - ); - }); + Icon(Icons.skip_next, size: iconSize), + Padding( + padding: EdgeInsets.fromLTRB(innerPadding, 0, 0, 0), + child: Icon(Icons.repeat, size: iconSize), + ), + ], + ); + }, + ); } } class _AlbumArt extends StatelessWidget { - const _AlbumArt({ - required this.song, - }); + const _AlbumArt({required this.song}); final Song? song; @@ -409,21 +406,17 @@ class _AlbumArt extends StatelessWidget { child: SizedBox( width: 70, height: 70, - child: song != null - ? Image.asset(song!.image.image) - : Container( - color: Colors.pink[100], - ), + child: + song != null + ? Image.asset(song!.image.image) + : Container(color: Colors.pink[100]), ), ); } } class _SongDetails extends StatelessWidget { - const _SongDetails({ - required this.artist, - required this.song, - }); + const _SongDetails({required this.artist, required this.song}); final Artist? artist; final Song? song; @@ -455,9 +448,7 @@ class _SongDetails extends StatelessWidget { } class _FullScreenPlayer extends StatefulWidget { - const _FullScreenPlayer({ - required this.onClose, - }); + const _FullScreenPlayer({required this.onClose}); final VoidCallback onClose; @@ -489,29 +480,33 @@ class _FullScreenPlayerState extends State<_FullScreenPlayer> { final bloc = BlocProvider.of(context); return BlocBuilder( bloc: bloc, - builder: (context, state) => Theme( - data: ThemeProvider.of(context).dark(), - child: Scaffold( - body: LayoutBuilder( - builder: (context, dimens) { - return MouseRegion( - onHover: (_) { - setState(() { - _showControls = true; - }); - hideControls(); + builder: + (context, state) => Theme( + data: ThemeProvider.of(context).dark(), + child: Scaffold( + body: LayoutBuilder( + builder: (context, dimens) { + return MouseRegion( + onHover: (_) { + setState(() { + _showControls = true; + }); + hideControls(); + }, + child: buildPlayer(context, state, dimens), + ); }, - child: buildPlayer(context, state, dimens), - ); - }, + ), + ), ), - ), - ), ); } Widget buildPlayer( - BuildContext context, PlaybackState state, BoxConstraints dimens) { + BuildContext context, + PlaybackState state, + BoxConstraints dimens, + ) { final bloc = BlocProvider.of(context); final current = state.songWithProgress; final song = current?.song; @@ -519,26 +514,25 @@ class _FullScreenPlayerState extends State<_FullScreenPlayer> { fit: StackFit.expand, children: [ Positioned.fill( - child: current == null - ? const Center(child: Text('No song selected')) - : Container( - color: context.colors.shadow, - child: Opacity( - opacity: 0.3, - child: Image.asset( - song!.image.image, - fit: BoxFit.cover, + child: + current == null + ? const Center(child: Text('No song selected')) + : Container( + color: context.colors.shadow, + child: Opacity( + opacity: 0.3, + child: Image.asset(song!.image.image, fit: BoxFit.cover), ), ), - ), ), Positioned( top: 20, right: 20, child: IconButton( - color: song != null - ? context.colors.onSurface - : context.colors.onSurface, + color: + song != null + ? context.colors.onSurface + : context.colors.onSurface, icon: const Icon(Icons.fullscreen_exit), onPressed: widget.onClose, ), @@ -569,8 +563,9 @@ class _FullScreenPlayerState extends State<_FullScreenPlayer> { Text( song.artist.name, style: context.labelSmall!.copyWith( - fontSize: 20, - color: context.colors.onSurface.withAlpha(204)), + fontSize: 20, + color: context.colors.onSurface.withAlpha(204), + ), overflow: TextOverflow.clip, ), ], @@ -582,10 +577,7 @@ class _FullScreenPlayerState extends State<_FullScreenPlayer> { right: 20, left: 20, bottom: dimens.biggest.height * 0.2, - child: _ProgressBar( - progress: current?.progress, - song: song, - ), + child: _ProgressBar(progress: current?.progress, song: song), ), Positioned( right: 20, @@ -598,8 +590,8 @@ class _FullScreenPlayerState extends State<_FullScreenPlayer> { scale: 1.5, child: _PlaybackControls( isPlaying: state.isPlaying, - togglePlayPause: () => - bloc.add(const PlaybackEvent.togglePlayPause()), + togglePlayPause: + () => bloc.add(const PlaybackEvent.togglePlayPause()), ), ), ), @@ -611,9 +603,7 @@ class _FullScreenPlayerState extends State<_FullScreenPlayer> { } class _MobilePlayer extends StatelessWidget { - const _MobilePlayer({ - required this.onClose, - }); + const _MobilePlayer({required this.onClose}); final VoidCallback onClose; @@ -622,46 +612,52 @@ class _MobilePlayer extends StatelessWidget { final bloc = BlocProvider.of(context); return BlocBuilder( bloc: bloc, - builder: (context, state) => Theme( - data: ThemeProvider.of(context).dark(), - child: Scaffold( - body: LayoutBuilder( - builder: (context, dimens) { - return buildPlayer(context, state, dimens); - }, + builder: + (context, state) => Theme( + data: ThemeProvider.of(context).dark(), + child: Scaffold( + body: LayoutBuilder( + builder: (context, dimens) { + return buildPlayer(context, state, dimens); + }, + ), + ), ), - ), - ), ); } Widget buildPlayer( - BuildContext context, PlaybackState state, BoxConstraints dimens) { + BuildContext context, + PlaybackState state, + BoxConstraints dimens, + ) { final bloc = BlocProvider.of(context); final current = state.songWithProgress; return Stack( children: [ Positioned.fill( - child: current == null - ? const Center(child: Text('No song selected')) - : Container( - color: context.colors.shadow, - child: Opacity( - opacity: 0.3, - child: Image.asset( - current.song.image.image, - fit: BoxFit.cover, + child: + current == null + ? const Center(child: Text('No song selected')) + : Container( + color: context.colors.shadow, + child: Opacity( + opacity: 0.3, + child: Image.asset( + current.song.image.image, + fit: BoxFit.cover, + ), ), ), - ), ), Positioned( top: 20, left: 20, child: IconButton( - color: current?.song != null - ? context.colors.onSurface - : context.colors.onSurface, + color: + current?.song != null + ? context.colors.onSurface + : context.colors.onSurface, icon: const RotatedBox( quarterTurns: 1, child: Icon(Icons.chevron_right), @@ -676,10 +672,7 @@ class _MobilePlayer extends StatelessWidget { left: 0, right: 0, height: dimens.biggest.height * 0.5, - child: Image.asset( - current.song.image.image, - fit: BoxFit.contain, - ), + child: Image.asset(current.song.image.image, fit: BoxFit.contain), ), Positioned( left: 0, @@ -705,8 +698,9 @@ class _MobilePlayer extends StatelessWidget { Text( current.song.artist.name, style: context.labelSmall!.copyWith( - fontSize: 12, - color: context.colors.onSurface.withAlpha(204)), + fontSize: 12, + color: context.colors.onSurface.withAlpha(204), + ), overflow: TextOverflow.clip, ), ], @@ -718,15 +712,12 @@ class _MobilePlayer extends StatelessWidget { scale: 1.5, child: _PlaybackControls( isPlaying: state.isPlaying, - togglePlayPause: () => - bloc.add(const PlaybackEvent.togglePlayPause()), + togglePlayPause: + () => bloc.add(const PlaybackEvent.togglePlayPause()), ), ), ), - _ProgressBar( - progress: current.progress, - song: current.song, - ), + _ProgressBar(progress: current.progress, song: current.song), ], ), ), diff --git a/boring_to_beautiful/step_01/lib/src/shared/views/brightness_toggle.dart b/boring_to_beautiful/step_01/lib/src/shared/views/brightness_toggle.dart index 46dde4810f..5b5332392b 100644 --- a/boring_to_beautiful/step_01/lib/src/shared/views/brightness_toggle.dart +++ b/boring_to_beautiful/step_01/lib/src/shared/views/brightness_toggle.dart @@ -13,9 +13,10 @@ class BrightnessToggle extends StatelessWidget { Widget build(BuildContext context) { final isDark = Theme.of(context).brightness == Brightness.dark; return IconButton( - icon: Theme.of(context).brightness == Brightness.light - ? const Icon(Icons.brightness_3) - : const Icon(Icons.brightness_7), + icon: + Theme.of(context).brightness == Brightness.light + ? const Icon(Icons.brightness_3) + : const Icon(Icons.brightness_7), onPressed: () { final themeProvider = ThemeProvider.of(context); final settings = themeProvider.settings.value; diff --git a/boring_to_beautiful/step_01/lib/src/shared/views/center_row.dart b/boring_to_beautiful/step_01/lib/src/shared/views/center_row.dart index 36d428e3b8..c1f3effcc2 100644 --- a/boring_to_beautiful/step_01/lib/src/shared/views/center_row.dart +++ b/boring_to_beautiful/step_01/lib/src/shared/views/center_row.dart @@ -5,23 +5,12 @@ import 'package:flutter/material.dart'; class CenterRow extends StatelessWidget { - const CenterRow({ - super.key, - required this.child, - }); + const CenterRow({super.key, required this.child}); final Widget child; @override Widget build(BuildContext context) { - return Row( - children: [ - Expanded( - child: Center( - child: child, - ), - ), - ], - ); + return Row(children: [Expanded(child: Center(child: child))]); } } diff --git a/boring_to_beautiful/step_01/lib/src/shared/views/clickable.dart b/boring_to_beautiful/step_01/lib/src/shared/views/clickable.dart index cd7ef46268..f192f0b135 100644 --- a/boring_to_beautiful/step_01/lib/src/shared/views/clickable.dart +++ b/boring_to_beautiful/step_01/lib/src/shared/views/clickable.dart @@ -14,10 +14,7 @@ class Clickable extends StatelessWidget { Widget build(BuildContext context) { return MouseRegion( cursor: SystemMouseCursors.click, - child: GestureDetector( - onTap: onTap, - child: child, - ), + child: GestureDetector(onTap: onTap, child: child), ); } } diff --git a/boring_to_beautiful/step_01/lib/src/shared/views/events.dart b/boring_to_beautiful/step_01/lib/src/shared/views/events.dart index ed38465460..ab9140e56d 100644 --- a/boring_to_beautiful/step_01/lib/src/shared/views/events.dart +++ b/boring_to_beautiful/step_01/lib/src/shared/views/events.dart @@ -24,43 +24,18 @@ class Events extends StatelessWidget { child: DataTable( horizontalMargin: 5.0, columns: const [ - DataColumn( - label: Text( - 'Date', - ), - numeric: true, - ), - DataColumn( - label: Text( - 'Event', - ), - ), - DataColumn( - label: Text( - 'Location', - ), - ), - DataColumn( - label: Text( - 'More info', - ), - ), + DataColumn(label: Text('Date'), numeric: true), + DataColumn(label: Text('Event')), + DataColumn(label: Text('Location')), + DataColumn(label: Text('More info')), ], rows: [ for (final event in artist.events) DataRow( cells: [ - DataCell( - Text(event.date), - ), - DataCell( - Row(children: [ - Expanded(child: Text(event.title)), - ]), - ), - DataCell( - Text(event.location), - ), + DataCell(Text(event.date)), + DataCell(Row(children: [Expanded(child: Text(event.title))])), + DataCell(Text(event.location)), DataCell( Clickable( child: Text( @@ -70,8 +45,9 @@ class Events extends StatelessWidget { decoration: TextDecoration.underline, ), ), - onTap: () => - launchUrl(Uri.parse('https://docs.flutter.dev')), + onTap: + () => + launchUrl(Uri.parse('https://docs.flutter.dev')), ), ), ], diff --git a/boring_to_beautiful/step_01/lib/src/shared/views/hover_toggle.dart b/boring_to_beautiful/step_01/lib/src/shared/views/hover_toggle.dart index ec98c2863c..649cfcab63 100644 --- a/boring_to_beautiful/step_01/lib/src/shared/views/hover_toggle.dart +++ b/boring_to_beautiful/step_01/lib/src/shared/views/hover_toggle.dart @@ -31,9 +31,10 @@ class _HoverToggleState extends State with MaterialStateMixin { cursor: isHovered ? SystemMouseCursors.click : MouseCursor.defer, onEnter: (_) => setMaterialState(WidgetState.hovered, true), onExit: (_) => setMaterialState(WidgetState.hovered, false), - child: widget.mode == HoverMode.replace - ? _buildReplaceableChildren() - : _buildChildrenStack(), + child: + widget.mode == HoverMode.replace + ? _buildReplaceableChildren() + : _buildChildrenStack(), ), ); } @@ -41,12 +42,7 @@ class _HoverToggleState extends State with MaterialStateMixin { Widget _buildChildrenStack() { Widget child = isHovered ? Opacity(opacity: 0.2, child: widget.child) : widget.child; - return Stack( - children: [ - child, - if (isHovered) widget.hoverChild, - ], - ); + return Stack(children: [child, if (isHovered) widget.hoverChild]); } Widget _buildReplaceableChildren() => diff --git a/boring_to_beautiful/step_01/lib/src/shared/views/hoverable_song_play_button.dart b/boring_to_beautiful/step_01/lib/src/shared/views/hoverable_song_play_button.dart index 512f3d1d3c..dd588e3dbe 100644 --- a/boring_to_beautiful/step_01/lib/src/shared/views/hoverable_song_play_button.dart +++ b/boring_to_beautiful/step_01/lib/src/shared/views/hoverable_song_play_button.dart @@ -29,9 +29,10 @@ class HoverableSongPlayButton extends StatelessWidget { hoverChild: Center( child: GestureDetector( child: const Icon(Icons.play_arrow), - onTap: () => BlocProvider.of(context).add( - PlaybackEvent.changeSong(song), - ), + onTap: + () => BlocProvider.of( + context, + ).add(PlaybackEvent.changeSong(song)), ), ), mode: hoverMode, diff --git a/boring_to_beautiful/step_01/lib/src/shared/views/image_card.dart b/boring_to_beautiful/step_01/lib/src/shared/views/image_card.dart index 0af9f75f33..6e7f6cd42d 100644 --- a/boring_to_beautiful/step_01/lib/src/shared/views/image_card.dart +++ b/boring_to_beautiful/step_01/lib/src/shared/views/image_card.dart @@ -7,13 +7,14 @@ import '../../shared/extensions.dart'; import 'outlined_card.dart'; class ImageCard extends StatelessWidget { - const ImageCard( - {super.key, - required this.title, - required this.details, - required this.image, - this.subtitle, - this.clickable = false}); + const ImageCard({ + super.key, + required this.title, + required this.details, + required this.image, + this.subtitle, + this.clickable = false, + }); final String title; final String? subtitle; @@ -28,54 +29,51 @@ class ImageCard extends StatelessWidget { clickable: clickable, child: Padding( padding: const EdgeInsets.all(8.0), - child: LayoutBuilder(builder: (context, constraints) { - return Row( - children: [ - if (constraints.maxWidth > 600) - SizedBox( - width: 170, - height: 170, - child: Image.asset( - image, - fit: BoxFit.cover, + child: LayoutBuilder( + builder: (context, constraints) { + return Row( + children: [ + if (constraints.maxWidth > 600) + SizedBox( + width: 170, + height: 170, + child: Image.asset(image, fit: BoxFit.cover), ), - ), - Expanded( - child: Padding( - padding: padding, - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Padding( - padding: const EdgeInsets.only(bottom: 5), - child: Text( - title, - style: context.titleLarge! - .copyWith(fontWeight: FontWeight.bold), - ), - ), - if (subtitle != null) + Expanded( + child: Padding( + padding: padding, + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ Padding( - padding: const EdgeInsets.only(bottom: 10), + padding: const EdgeInsets.only(bottom: 5), child: Text( - subtitle!, - style: context.labelMedium, + title, + style: context.titleLarge!.copyWith( + fontWeight: FontWeight.bold, + ), ), ), - Text( - details, - style: context.labelMedium?.copyWith( - fontSize: 16, - height: 1.25, + if (subtitle != null) + Padding( + padding: const EdgeInsets.only(bottom: 10), + child: Text(subtitle!, style: context.labelMedium), + ), + Text( + details, + style: context.labelMedium?.copyWith( + fontSize: 16, + height: 1.25, + ), ), - ), - ], + ], + ), ), ), - ), - ], - ); - }), + ], + ); + }, + ), ), ); } diff --git a/boring_to_beautiful/step_01/lib/src/shared/views/image_tile.dart b/boring_to_beautiful/step_01/lib/src/shared/views/image_tile.dart index 4f2bbebb96..dd99152af5 100644 --- a/boring_to_beautiful/step_01/lib/src/shared/views/image_tile.dart +++ b/boring_to_beautiful/step_01/lib/src/shared/views/image_tile.dart @@ -21,19 +21,17 @@ class ImageTile extends StatelessWidget { @override Widget build(BuildContext context) { return OutlinedCard( - child: Column(crossAxisAlignment: CrossAxisAlignment.start, children: [ - Row( - children: [ - Expanded( - child: Image.asset(image, fit: BoxFit.cover), - ), - ], - ), - Column( - mainAxisAlignment: MainAxisAlignment.center, - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - Padding( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + children: [Expanded(child: Image.asset(image, fit: BoxFit.cover))], + ), + Column( + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Padding( padding: const EdgeInsets.fromLTRB(10, 5, 10, 5), child: Text( title, @@ -43,20 +41,25 @@ class ImageTile extends StatelessWidget { ), overflow: TextOverflow.ellipsis, maxLines: 1, - )), - Padding( - padding: const EdgeInsets.symmetric(vertical: 5, horizontal: 10), - child: Text( - subtitle, - overflow: TextOverflow.ellipsis, - style: context.labelSmall, - maxLines: 2, - textAlign: TextAlign.center, + ), ), - ), - ], - ) - ]), + Padding( + padding: const EdgeInsets.symmetric( + vertical: 5, + horizontal: 10, + ), + child: Text( + subtitle, + overflow: TextOverflow.ellipsis, + style: context.labelSmall, + maxLines: 2, + textAlign: TextAlign.center, + ), + ), + ], + ), + ], + ), ); } } diff --git a/boring_to_beautiful/step_01/lib/src/shared/views/outlined_card.dart b/boring_to_beautiful/step_01/lib/src/shared/views/outlined_card.dart index 61af3a0d64..a208659904 100644 --- a/boring_to_beautiful/step_01/lib/src/shared/views/outlined_card.dart +++ b/boring_to_beautiful/step_01/lib/src/shared/views/outlined_card.dart @@ -5,11 +5,7 @@ import 'package:flutter/material.dart'; class OutlinedCard extends StatefulWidget { - const OutlinedCard({ - super.key, - required this.child, - this.clickable = true, - }); + const OutlinedCard({super.key, required this.child, this.clickable = true}); final Widget child; final bool clickable; @@ -22,9 +18,10 @@ class _OutlinedCardState extends State { @override Widget build(BuildContext context) { return MouseRegion( - cursor: widget.clickable - ? SystemMouseCursors.click - : SystemMouseCursors.basic, + cursor: + widget.clickable + ? SystemMouseCursors.click + : SystemMouseCursors.basic, child: Container( // Add box decoration here child: widget.child, diff --git a/boring_to_beautiful/step_01/lib/src/shared/views/play_pause_listener.dart b/boring_to_beautiful/step_01/lib/src/shared/views/play_pause_listener.dart index 52fad00863..6b4fc66709 100644 --- a/boring_to_beautiful/step_01/lib/src/shared/views/play_pause_listener.dart +++ b/boring_to_beautiful/step_01/lib/src/shared/views/play_pause_listener.dart @@ -16,10 +16,7 @@ import '../playback/bloc/bloc.dart'; /// shortcuts. By sitting below that machinery, this installs a global Spacebar /// listener which toggles Playback, as is customary in music-playing apps. class PlayPauseListener extends StatelessWidget { - const PlayPauseListener({ - super.key, - required this.child, - }); + const PlayPauseListener({super.key, required this.child}); final Widget child; @@ -28,9 +25,7 @@ class PlayPauseListener extends StatelessWidget { // Immediately catch any [_PlayPauseIntent] events released by the inner // [Shortcuts] widget. return Actions( - actions: >{ - _PlayPauseIntent: _PlayPauseAction(), - }, + actions: >{_PlayPauseIntent: _PlayPauseAction()}, child: Shortcuts( // Register a shortcut for Spacebar presses that release a // [_PlayPauseIntent] up the tree to the nearest [Actions] widget. @@ -38,9 +33,9 @@ class PlayPauseListener extends StatelessWidget { const SingleActivator(LogicalKeyboardKey.space): _PlayPauseIntent( // Create a closure which sends a [TogglePlayPause] event to the // [PlaybackBloc]. - () => BlocProvider.of(context).add( - const PlaybackEvent.togglePlayPause(), - ), + () => BlocProvider.of( + context, + ).add(const PlaybackEvent.togglePlayPause()), ), }, child: child, diff --git a/boring_to_beautiful/step_01/lib/src/shared/views/root_layout.dart b/boring_to_beautiful/step_01/lib/src/shared/views/root_layout.dart index 878b57d729..ff6270248c 100644 --- a/boring_to_beautiful/step_01/lib/src/shared/views/root_layout.dart +++ b/boring_to_beautiful/step_01/lib/src/shared/views/root_layout.dart @@ -29,36 +29,37 @@ class RootLayout extends StatelessWidget { final bloc = BlocProvider.of(context); return BlocBuilder( bloc: bloc, - builder: (context, state) => LayoutBuilder(builder: (context, dimens) { - void onSelected(int index) { - final destination = router.destinations[index]; - go.GoRouter.of(context).go(destination.route); - } + builder: + (context, state) => LayoutBuilder( + builder: (context, dimens) { + void onSelected(int index) { + final destination = router.destinations[index]; + go.GoRouter.of(context).go(destination.route); + } - final current = state.songWithProgress; - return AdaptiveNavigation( - key: _navigationRailKey, - destinations: router.destinations - .map((e) => NavigationDestination( - icon: e.icon, - label: e.label, - )) - .toList(), - selectedIndex: currentIndex, - onDestinationSelected: onSelected, - child: Column( - children: [ - Expanded( - child: _Switcher( - key: _switcherKey, - child: child, + final current = state.songWithProgress; + return AdaptiveNavigation( + key: _navigationRailKey, + destinations: + router.destinations + .map( + (e) => NavigationDestination( + icon: e.icon, + label: e.label, + ), + ) + .toList(), + selectedIndex: currentIndex, + onDestinationSelected: onSelected, + child: Column( + children: [ + Expanded(child: _Switcher(key: _switcherKey, child: child)), + if (current != null) const BottomBar(), + ], ), - ), - if (current != null) const BottomBar(), - ], + ); + }, ), - ); - }), ); } } @@ -66,21 +67,18 @@ class RootLayout extends StatelessWidget { class _Switcher extends StatelessWidget { final Widget child; - const _Switcher({ - required this.child, - super.key, - }); + const _Switcher({required this.child, super.key}); @override Widget build(BuildContext context) { return UniversalPlatform.isDesktop ? child : AnimatedSwitcher( - key: key, - duration: const Duration(milliseconds: 200), - switchInCurve: Curves.easeInOut, - switchOutCurve: Curves.easeInOut, - child: child, - ); + key: key, + duration: const Duration(milliseconds: 200), + switchInCurve: Curves.easeInOut, + switchOutCurve: Curves.easeInOut, + child: child, + ); } } diff --git a/boring_to_beautiful/step_01/lib/src/shared/views/sidebar.dart b/boring_to_beautiful/step_01/lib/src/shared/views/sidebar.dart index 78c19b4d22..8815223b22 100644 --- a/boring_to_beautiful/step_01/lib/src/shared/views/sidebar.dart +++ b/boring_to_beautiful/step_01/lib/src/shared/views/sidebar.dart @@ -26,10 +26,7 @@ class SideBar extends StatelessWidget { title: const Text('Home'), onTap: () => GoRouter.of(context).go('/'), ), - const ListTile( - leading: Icon(Icons.search), - title: Text('Search'), - ), + const ListTile(leading: Icon(Icons.search), title: Text('Search')), ListTile( leading: const Icon(Icons.person), title: const Text('Artists'), @@ -64,10 +61,7 @@ class PlaylistNav extends StatelessWidget { children: [ Padding( padding: const EdgeInsets.only(left: 16, top: 16), - child: Text( - 'Playlists', - style: context.titleMedium, - ), + child: Text('Playlists', style: context.titleMedium), ), Expanded( child: ListView( @@ -114,10 +108,9 @@ class _PlaylistNavItemState extends State<_PlaylistNavItem> { @override void initState() { super.initState(); - _focusNode = FocusNode(debugLabel: widget.title) - ..addListener(() { - setState(() => _isSelected = _focusNode.hasPrimaryFocus); - }); + _focusNode = FocusNode(debugLabel: widget.title)..addListener(() { + setState(() => _isSelected = _focusNode.hasPrimaryFocus); + }); } @override diff --git a/boring_to_beautiful/step_01/pubspec.yaml b/boring_to_beautiful/step_01/pubspec.yaml index e6b25dc809..4bb4b3b74a 100644 --- a/boring_to_beautiful/step_01/pubspec.yaml +++ b/boring_to_beautiful/step_01/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: "none" version: 1.0.0 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 dependencies: flutter: diff --git a/boring_to_beautiful/step_02/lib/src/features/artists/view/artist_bio.dart b/boring_to_beautiful/step_02/lib/src/features/artists/view/artist_bio.dart index 227b8e91f9..8b614421db 100644 --- a/boring_to_beautiful/step_02/lib/src/features/artists/view/artist_bio.dart +++ b/boring_to_beautiful/step_02/lib/src/features/artists/view/artist_bio.dart @@ -18,9 +18,7 @@ class ArtistBio extends StatelessWidget { artist.bio, style: context.bodyLarge!.copyWith( fontSize: 16, - color: context.colors.onSurface.withAlpha( - 222, - ), + color: context.colors.onSurface.withAlpha(222), ), ); } diff --git a/boring_to_beautiful/step_02/lib/src/features/artists/view/artist_card.dart b/boring_to_beautiful/step_02/lib/src/features/artists/view/artist_card.dart index a63967f51d..1a56376a87 100644 --- a/boring_to_beautiful/step_02/lib/src/features/artists/view/artist_card.dart +++ b/boring_to_beautiful/step_02/lib/src/features/artists/view/artist_card.dart @@ -11,10 +11,7 @@ import '../../../shared/views/outlined_card.dart'; import '../../../shared/views/views.dart'; class ArtistCard extends StatelessWidget { - const ArtistCard({ - super.key, - required this.artist, - }); + const ArtistCard({super.key, required this.artist}); final Artist artist; @@ -24,65 +21,66 @@ class ArtistCard extends StatelessWidget { return OutlinedCard( child: LayoutBuilder( - builder: (context, dimens) => Row( - children: [ - SizedBox( - width: dimens.maxWidth * 0.4, - child: Image.asset( - artist.image.image, - fit: BoxFit.cover, - ), - ), - Expanded( - child: Padding( - padding: const EdgeInsets.only(left: 16), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Padding( - padding: const EdgeInsets.fromLTRB(0, 0, 15, 0), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text( - artist.name, - style: context.titleMedium, - overflow: TextOverflow.ellipsis, - maxLines: 1, - ), - const SizedBox(height: 10), - Text( - artist.bio, - overflow: TextOverflow.ellipsis, - style: context.labelSmall, - maxLines: 3, - ), - ]), - ), - if (dimens.maxHeight > 100) - Row( - children: [ - HoverableSongPlayButton( - size: const Size(50, 50), - song: nowPlaying, - child: Icon(Icons.play_circle, - color: context.colors.tertiary), + builder: + (context, dimens) => Row( + children: [ + SizedBox( + width: dimens.maxWidth * 0.4, + child: Image.asset(artist.image.image, fit: BoxFit.cover), + ), + Expanded( + child: Padding( + padding: const EdgeInsets.only(left: 16), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Padding( + padding: const EdgeInsets.fromLTRB(0, 0, 15, 0), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + artist.name, + style: context.titleMedium, + overflow: TextOverflow.ellipsis, + maxLines: 1, + ), + const SizedBox(height: 10), + Text( + artist.bio, + overflow: TextOverflow.ellipsis, + style: context.labelSmall, + maxLines: 3, + ), + ], ), - Text( - nowPlaying.title, - maxLines: 1, - overflow: TextOverflow.clip, - style: context.labelMedium, + ), + if (dimens.maxHeight > 100) + Row( + children: [ + HoverableSongPlayButton( + size: const Size(50, 50), + song: nowPlaying, + child: Icon( + Icons.play_circle, + color: context.colors.tertiary, + ), + ), + Text( + nowPlaying.title, + maxLines: 1, + overflow: TextOverflow.clip, + style: context.labelMedium, + ), + ], ), - ], - ), - ], + ], + ), + ), ), - ), + ], ), - ], - ), ), ); } diff --git a/boring_to_beautiful/step_02/lib/src/features/artists/view/artist_events.dart b/boring_to_beautiful/step_02/lib/src/features/artists/view/artist_events.dart index 8b064759c6..58b61b37df 100644 --- a/boring_to_beautiful/step_02/lib/src/features/artists/view/artist_events.dart +++ b/boring_to_beautiful/step_02/lib/src/features/artists/view/artist_events.dart @@ -70,53 +70,32 @@ class ArtistEvents extends StatelessWidget { ); }, columns: const [ - DataColumn( - label: Text( - 'Date', - ), - numeric: true, - ), - DataColumn( - label: Text( - 'Event', - ), - ), - DataColumn( - label: Text( - 'Location', - ), - ), - DataColumn( - label: Text( - 'More info', - ), - ), + DataColumn(label: Text('Date'), numeric: true), + DataColumn(label: Text('Event')), + DataColumn(label: Text('Location')), + DataColumn(label: Text('More info')), ], - rowBuilder: (item, index) => DataRow.byIndex(index: index, cells: [ - DataCell( - Text(item.date), - ), - DataCell( - Row(children: [ - Expanded(child: Text(item.title)), - ]), - ), - DataCell( - Text(item.location), - ), - DataCell( - Clickable( - child: Text( - item.link, - style: TextStyle( - color: linkColor.value(theme), - decoration: TextDecoration.underline, + rowBuilder: + (item, index) => DataRow.byIndex( + index: index, + cells: [ + DataCell(Text(item.date)), + DataCell(Row(children: [Expanded(child: Text(item.title))])), + DataCell(Text(item.location)), + DataCell( + Clickable( + child: Text( + item.link, + style: TextStyle( + color: linkColor.value(theme), + decoration: TextDecoration.underline, + ), + ), + onTap: () => launchUrl(Uri.parse('https://docs.flutter.dev')), + ), ), - ), - onTap: () => launchUrl(Uri.parse('https://docs.flutter.dev')), + ], ), - ), - ]), ); } } diff --git a/boring_to_beautiful/step_02/lib/src/features/artists/view/artist_ranked_songs.dart b/boring_to_beautiful/step_02/lib/src/features/artists/view/artist_ranked_songs.dart index e484ecb3d7..3d1f4e2cf1 100644 --- a/boring_to_beautiful/step_02/lib/src/features/artists/view/artist_ranked_songs.dart +++ b/boring_to_beautiful/step_02/lib/src/features/artists/view/artist_ranked_songs.dart @@ -27,52 +27,42 @@ class ArtistRankedSongs extends StatelessWidget { title: Text(song.title), subtitle: Text(song.length.toHumanizedString()), trailing: Text(song.ranking.toString()), - onTap: () => BlocProvider.of(context).add( - PlaybackEvent.changeSong(song), - ), + onTap: + () => BlocProvider.of( + context, + ).add(PlaybackEvent.changeSong(song)), ); }, columns: const [ - DataColumn( - label: Text( - 'Ranking', - ), - numeric: true, - ), - DataColumn( - label: Text( - 'Title', - ), - ), - DataColumn( - label: Text( - 'Length', - ), - ), + DataColumn(label: Text('Ranking'), numeric: true), + DataColumn(label: Text('Title')), + DataColumn(label: Text('Length')), ], - rowBuilder: (song, index) => DataRow.byIndex(index: index, cells: [ - DataCell( - HoverableSongPlayButton( - song: song, - child: Center( - child: Text(song.ranking.toString()), - ), + rowBuilder: + (song, index) => DataRow.byIndex( + index: index, + cells: [ + DataCell( + HoverableSongPlayButton( + song: song, + child: Center(child: Text(song.ranking.toString())), + ), + ), + DataCell( + Row( + children: [ + Padding( + padding: const EdgeInsets.all(2), + child: ClippedImage(song.image.image), + ), + const SizedBox(width: 5.0), + Expanded(child: Text(song.title)), + ], + ), + ), + DataCell(Text(song.length.toHumanizedString())), + ], ), - ), - DataCell( - Row(children: [ - Padding( - padding: const EdgeInsets.all(2), - child: ClippedImage(song.image.image), - ), - const SizedBox(width: 5.0), - Expanded(child: Text(song.title)), - ]), - ), - DataCell( - Text(song.length.toHumanizedString()), - ), - ]), ); } } diff --git a/boring_to_beautiful/step_02/lib/src/features/artists/view/artist_updates.dart b/boring_to_beautiful/step_02/lib/src/features/artists/view/artist_updates.dart index e5b8bb5fe9..a0fabf7330 100644 --- a/boring_to_beautiful/step_02/lib/src/features/artists/view/artist_updates.dart +++ b/boring_to_beautiful/step_02/lib/src/features/artists/view/artist_updates.dart @@ -30,7 +30,7 @@ class ArtistUpdates extends StatelessWidget { child: Text(update), ), ), - ) + ), ], ); } diff --git a/boring_to_beautiful/step_02/lib/src/features/artists/view/artists_screen.dart b/boring_to_beautiful/step_02/lib/src/features/artists/view/artists_screen.dart index 8afe759807..225d74847b 100644 --- a/boring_to_beautiful/step_02/lib/src/features/artists/view/artists_screen.dart +++ b/boring_to_beautiful/step_02/lib/src/features/artists/view/artists_screen.dart @@ -17,33 +17,33 @@ class ArtistsScreen extends StatelessWidget { Widget build(BuildContext context) { final artistsProvider = ArtistsProvider(); final artists = artistsProvider.artists; - return LayoutBuilder(builder: (context, constraints) { - return Scaffold( - primary: false, - appBar: AppBar( - title: const Text('ARTISTS'), - toolbarHeight: kToolbarHeight * 2, - ), - body: GridView.builder( - padding: const EdgeInsets.all(15), - gridDelegate: SliverGridDelegateWithFixedCrossAxisCount( - crossAxisCount: max(1, (constraints.maxWidth ~/ 400).toInt()), - childAspectRatio: 2.5, - mainAxisSpacing: 10, - crossAxisSpacing: 10, + return LayoutBuilder( + builder: (context, constraints) { + return Scaffold( + primary: false, + appBar: AppBar( + title: const Text('ARTISTS'), + toolbarHeight: kToolbarHeight * 2, ), - itemCount: artists.length, - itemBuilder: (context, index) { - final artist = artists[index]; - return GestureDetector( - child: ArtistCard( - artist: artist, - ), - onTap: () => GoRouter.of(context).go('/artists/${artist.id}'), - ); - }, - ), - ); - }); + body: GridView.builder( + padding: const EdgeInsets.all(15), + gridDelegate: SliverGridDelegateWithFixedCrossAxisCount( + crossAxisCount: max(1, (constraints.maxWidth ~/ 400).toInt()), + childAspectRatio: 2.5, + mainAxisSpacing: 10, + crossAxisSpacing: 10, + ), + itemCount: artists.length, + itemBuilder: (context, index) { + final artist = artists[index]; + return GestureDetector( + child: ArtistCard(artist: artist), + onTap: () => GoRouter.of(context).go('/artists/${artist.id}'), + ); + }, + ), + ); + }, + ); } } diff --git a/boring_to_beautiful/step_02/lib/src/features/home/view/home_artists.dart b/boring_to_beautiful/step_02/lib/src/features/home/view/home_artists.dart index beb2c0ece4..b5a3a33ecd 100644 --- a/boring_to_beautiful/step_02/lib/src/features/home/view/home_artists.dart +++ b/boring_to_beautiful/step_02/lib/src/features/home/view/home_artists.dart @@ -22,27 +22,25 @@ class HomeArtists extends StatelessWidget { Widget build(BuildContext context) { return Padding( padding: const EdgeInsets.all(15), - child: constraints.isMobile - ? Column( - children: [ - for (final artist in artists) buildTile(context, artist), - ], - ) - : Row(children: [ - for (final artist in artists) - Flexible( - flex: 1, - child: buildTile(context, artist), - ), - ]), + child: + constraints.isMobile + ? Column( + children: [ + for (final artist in artists) buildTile(context, artist), + ], + ) + : Row( + children: [ + for (final artist in artists) + Flexible(flex: 1, child: buildTile(context, artist)), + ], + ), ); } Widget buildTile(BuildContext context, Artist artist) { return ListTile( - leading: CircleAvatar( - backgroundImage: AssetImage(artist.image.image), - ), + leading: CircleAvatar(backgroundImage: AssetImage(artist.image.image)), title: Text( artist.updates.first, maxLines: 2, diff --git a/boring_to_beautiful/step_02/lib/src/features/home/view/home_recent.dart b/boring_to_beautiful/step_02/lib/src/features/home/view/home_recent.dart index c77500a663..8ba86d117d 100644 --- a/boring_to_beautiful/step_02/lib/src/features/home/view/home_recent.dart +++ b/boring_to_beautiful/step_02/lib/src/features/home/view/home_recent.dart @@ -12,8 +12,11 @@ import '../../../shared/views/image_clipper.dart'; import '../../../shared/views/outlined_card.dart'; class HomeRecent extends StatelessWidget { - const HomeRecent( - {super.key, required this.playlists, this.axis = Axis.horizontal}); + const HomeRecent({ + super.key, + required this.playlists, + this.axis = Axis.horizontal, + }); final List playlists; final Axis axis; @@ -43,8 +46,10 @@ class HomeRecent extends StatelessWidget { Row( children: [ Expanded( - child: Image.asset(playlist.cover.image, - fit: BoxFit.cover), + child: Image.asset( + playlist.cover.image, + fit: BoxFit.cover, + ), ), ], ), @@ -79,10 +84,7 @@ class HomeRecent extends StatelessWidget { crossAxisAlignment: CrossAxisAlignment.center, mainAxisSize: MainAxisSize.max, children: [ - ClippedImage( - playlist.cover.image, - height: 200, - ), + ClippedImage(playlist.cover.image, height: 200), Expanded( child: Center( child: Padding( @@ -104,23 +106,24 @@ class HomeRecent extends StatelessWidget { return Column( children: [ Padding( - padding: const EdgeInsets.fromLTRB(10, 5, 10, 5), - child: Text( - playlist.title, - style: context.titleSmall!.copyWith( - fontWeight: FontWeight.bold, - ), - overflow: TextOverflow.ellipsis, - maxLines: 1, - textAlign: TextAlign.center, - )), + padding: const EdgeInsets.fromLTRB(10, 5, 10, 5), + child: Text( + playlist.title, + style: context.titleSmall!.copyWith(fontWeight: FontWeight.bold), + overflow: TextOverflow.ellipsis, + maxLines: 1, + textAlign: TextAlign.center, + ), + ), Padding( padding: const EdgeInsets.symmetric(vertical: 5, horizontal: 10), - child: Text(playlist.description, - overflow: TextOverflow.ellipsis, - style: context.labelSmall, - maxLines: 2, - textAlign: TextAlign.center), + child: Text( + playlist.description, + overflow: TextOverflow.ellipsis, + style: context.labelSmall, + maxLines: 2, + textAlign: TextAlign.center, + ), ), ], ); diff --git a/boring_to_beautiful/step_02/lib/src/features/home/view/home_screen.dart b/boring_to_beautiful/step_02/lib/src/features/home/view/home_screen.dart index 715ddf435c..bcff070874 100644 --- a/boring_to_beautiful/step_02/lib/src/features/home/view/home_screen.dart +++ b/boring_to_beautiful/step_02/lib/src/features/home/view/home_screen.dart @@ -61,10 +61,11 @@ class _HomeScreenState extends State { children: [ const HomeHighlight(), LayoutBuilder( - builder: (context, constraints) => HomeArtists( - artists: artists, - constraints: constraints, - ), + builder: + (context, constraints) => HomeArtists( + artists: artists, + constraints: constraints, + ), ), ], ), @@ -81,9 +82,7 @@ class _HomeScreenState extends State { style: context.headlineSmall, ), ), - HomeRecent( - playlists: playlists, - ), + HomeRecent(playlists: playlists), ], ), ), @@ -101,19 +100,20 @@ class _HomeScreenState extends State { crossAxisAlignment: CrossAxisAlignment.start, children: [ Padding( - padding: - const EdgeInsets.all(2), // Modify this line + padding: const EdgeInsets.all( + 2, + ), // Modify this line child: Text( 'Top Songs Today', style: context.titleLarge, ), ), LayoutBuilder( - builder: (context, constraints) => - PlaylistSongs( - playlist: topSongs, - constraints: constraints, - ), + builder: + (context, constraints) => PlaylistSongs( + playlist: topSongs, + constraints: constraints, + ), ), ], ), @@ -126,19 +126,20 @@ class _HomeScreenState extends State { crossAxisAlignment: CrossAxisAlignment.start, children: [ Padding( - padding: - const EdgeInsets.all(2), // Modify this line + padding: const EdgeInsets.all( + 2, + ), // Modify this line child: Text( 'New Releases', style: context.titleLarge, ), ), LayoutBuilder( - builder: (context, constraints) => - PlaylistSongs( - playlist: newReleases, - constraints: constraints, - ), + builder: + (context, constraints) => PlaylistSongs( + playlist: newReleases, + constraints: constraints, + ), ), ], ), diff --git a/boring_to_beautiful/step_02/lib/src/features/playlists/view/playlist_home_screen.dart b/boring_to_beautiful/step_02/lib/src/features/playlists/view/playlist_home_screen.dart index a80d767930..978608ccad 100644 --- a/boring_to_beautiful/step_02/lib/src/features/playlists/view/playlist_home_screen.dart +++ b/boring_to_beautiful/step_02/lib/src/features/playlists/view/playlist_home_screen.dart @@ -44,8 +44,10 @@ class PlaylistHomeScreen extends StatelessWidget { title: playlist.title, subtitle: playlist.description, ), - onTap: () => - GoRouter.of(context).go('/playlists/${playlist.id}'), + onTap: + () => GoRouter.of( + context, + ).go('/playlists/${playlist.id}'), ); }, ), diff --git a/boring_to_beautiful/step_02/lib/src/features/playlists/view/playlist_screen.dart b/boring_to_beautiful/step_02/lib/src/features/playlists/view/playlist_screen.dart index 5dc2f0744f..c41f500a92 100644 --- a/boring_to_beautiful/step_02/lib/src/features/playlists/view/playlist_screen.dart +++ b/boring_to_beautiful/step_02/lib/src/features/playlists/view/playlist_screen.dart @@ -20,114 +20,116 @@ class PlaylistScreen extends StatelessWidget { @override Widget build(BuildContext context) { - return LayoutBuilder(builder: (context, constraints) { - final colors = Theme.of(context).colorScheme; - final double headerHeight = constraints.isMobile - ? max(constraints.biggest.height * 0.5, 450) - : max(constraints.biggest.height * 0.25, 250); - if (constraints.isMobile) { - return Scaffold( - appBar: AppBar( - leading: BackButton( - onPressed: () => GoRouter.of(context).go('/playlists'), - ), - title: Text(playlist.title), - actions: [ - IconButton( - icon: const Icon(Icons.play_circle_fill), - onPressed: () {}, - ), - IconButton( - onPressed: () {}, - icon: const Icon(Icons.shuffle), - ), - ], - ), - body: ArticleContent( - child: PlaylistSongs( - playlist: playlist, - constraints: constraints, - ), - ), - ); - } - return Scaffold( - body: CustomScrollView( - slivers: [ - SliverAppBar( + return LayoutBuilder( + builder: (context, constraints) { + final colors = Theme.of(context).colorScheme; + final double headerHeight = + constraints.isMobile + ? max(constraints.biggest.height * 0.5, 450) + : max(constraints.biggest.height * 0.25, 250); + if (constraints.isMobile) { + return Scaffold( + appBar: AppBar( leading: BackButton( onPressed: () => GoRouter.of(context).go('/playlists'), ), - expandedHeight: headerHeight, - pinned: false, - flexibleSpace: FlexibleSpaceBar( - background: AdaptiveImageCard( - axis: constraints.isMobile ? Axis.vertical : Axis.horizontal, - constraints: - constraints.copyWith(maxHeight: headerHeight).normalize(), - image: playlist.cover.image, - child: Column( - mainAxisAlignment: MainAxisAlignment.end, - crossAxisAlignment: CrossAxisAlignment.start, - mainAxisSize: MainAxisSize.min, - children: [ - Text( - 'PLAYLIST', - style: context.titleSmall! - .copyWith(color: colors.onSurface), - ), - Text( - playlist.title, - style: context.displaySmall! - .copyWith(color: colors.onSurface), - ), - Text( - playlist.description, - style: context.bodyLarge!.copyWith( - color: colors.onSurface.withAlpha(204), + title: Text(playlist.title), + actions: [ + IconButton( + icon: const Icon(Icons.play_circle_fill), + onPressed: () {}, + ), + IconButton(onPressed: () {}, icon: const Icon(Icons.shuffle)), + ], + ), + body: ArticleContent( + child: PlaylistSongs( + playlist: playlist, + constraints: constraints, + ), + ), + ); + } + return Scaffold( + body: CustomScrollView( + slivers: [ + SliverAppBar( + leading: BackButton( + onPressed: () => GoRouter.of(context).go('/playlists'), + ), + expandedHeight: headerHeight, + pinned: false, + flexibleSpace: FlexibleSpaceBar( + background: AdaptiveImageCard( + axis: + constraints.isMobile ? Axis.vertical : Axis.horizontal, + constraints: + constraints + .copyWith(maxHeight: headerHeight) + .normalize(), + image: playlist.cover.image, + child: Column( + mainAxisAlignment: MainAxisAlignment.end, + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisSize: MainAxisSize.min, + children: [ + Text( + 'PLAYLIST', + style: context.titleSmall!.copyWith( + color: colors.onSurface, + ), ), - ), - const SizedBox(height: 8), - Row( - children: [ - IconButton( - icon: Icon( - Icons.play_circle_fill, - color: colors.tertiary, - ), - onPressed: () {}, + Text( + playlist.title, + style: context.displaySmall!.copyWith( + color: colors.onSurface, ), - TextButton.icon( - onPressed: () {}, - icon: Icon( - Icons.shuffle, - color: colors.tertiary, - ), - label: Text( - 'Shuffle', - style: context.bodySmall!.copyWith( + ), + Text( + playlist.description, + style: context.bodyLarge!.copyWith( + color: colors.onSurface.withAlpha(204), + ), + ), + const SizedBox(height: 8), + Row( + children: [ + IconButton( + icon: Icon( + Icons.play_circle_fill, color: colors.tertiary, ), + onPressed: () {}, ), - ), - ], - ), - ], + TextButton.icon( + onPressed: () {}, + icon: Icon(Icons.shuffle, color: colors.tertiary), + label: Text( + 'Shuffle', + style: context.bodySmall!.copyWith( + color: colors.tertiary, + ), + ), + ), + ], + ), + ], + ), ), ), ), - ), - SliverToBoxAdapter( - child: ArticleContent( - child: PlaylistSongs( - playlist: playlist, - constraints: constraints, + SliverToBoxAdapter( + child: ArticleContent( + child: PlaylistSongs( + playlist: playlist, + constraints: constraints, + ), ), ), - ), - ], - ), - ); - }); + ], + ), + ); + }, + ); } } diff --git a/boring_to_beautiful/step_02/lib/src/features/playlists/view/playlist_songs.dart b/boring_to_beautiful/step_02/lib/src/features/playlists/view/playlist_songs.dart index e944336540..1d5a2e9879 100644 --- a/boring_to_beautiful/step_02/lib/src/features/playlists/view/playlist_songs.dart +++ b/boring_to_beautiful/step_02/lib/src/features/playlists/view/playlist_songs.dart @@ -12,8 +12,11 @@ import '../../../shared/views/image_clipper.dart'; import '../../../shared/views/views.dart'; class PlaylistSongs extends StatelessWidget { - const PlaylistSongs( - {super.key, required this.playlist, required this.constraints}); + const PlaylistSongs({ + super.key, + required this.playlist, + required this.constraints, + }); final Playlist playlist; final BoxConstraints constraints; @@ -25,14 +28,9 @@ class PlaylistSongs extends StatelessWidget { breakpoint: 450, columns: const [ DataColumn( - label: Padding( - padding: EdgeInsets.only(left: 20), - child: Text('#'), - ), - ), - DataColumn( - label: Text('Title'), + label: Padding(padding: EdgeInsets.only(left: 20), child: Text('#')), ), + DataColumn(label: Text('Title')), DataColumn( label: Padding( padding: EdgeInsets.only(right: 10), @@ -40,38 +38,40 @@ class PlaylistSongs extends StatelessWidget { ), ), ], - rowBuilder: (context, index) => DataRow.byIndex( - index: index, - cells: [ - DataCell( - // Add HoverableSongPlayButton - Center( - child: Text( - (index + 1).toString(), - textAlign: TextAlign.center, + rowBuilder: + (context, index) => DataRow.byIndex( + index: index, + cells: [ + DataCell( + // Add HoverableSongPlayButton + Center( + child: Text( + (index + 1).toString(), + textAlign: TextAlign.center, + ), + ), ), - ), - ), - DataCell( - Row(children: [ - Padding( - padding: const EdgeInsets.all(2), - child: ClippedImage(playlist.songs[index].image.image), + DataCell( + Row( + children: [ + Padding( + padding: const EdgeInsets.all(2), + child: ClippedImage(playlist.songs[index].image.image), + ), + const SizedBox(width: 10), + Expanded(child: Text(playlist.songs[index].title)), + ], + ), ), - const SizedBox(width: 10), - Expanded(child: Text(playlist.songs[index].title)), - ]), - ), - DataCell( - Text(playlist.songs[index].length.toHumanizedString()), + DataCell(Text(playlist.songs[index].length.toHumanizedString())), + ], ), - ], - ), itemBuilder: (song, index) { return ListTile( - onTap: () => BlocProvider.of(context).add( - PlaybackEvent.changeSong(song), - ), + onTap: + () => BlocProvider.of( + context, + ).add(PlaybackEvent.changeSong(song)), leading: ClippedImage(song.image.image), title: Text(song.title), subtitle: Text(song.length.toHumanizedString()), diff --git a/boring_to_beautiful/step_02/lib/src/shared/app.dart b/boring_to_beautiful/step_02/lib/src/shared/app.dart index eced12177d..771a2be1ad 100644 --- a/boring_to_beautiful/step_02/lib/src/shared/app.dart +++ b/boring_to_beautiful/step_02/lib/src/shared/app.dart @@ -19,45 +19,49 @@ class MyApp extends StatefulWidget { } class _MyAppState extends State { - final settings = ValueNotifier(ThemeSettings( - sourceColor: Colors.pink, // Replace this color - themeMode: ThemeMode.system, - )); + final settings = ValueNotifier( + ThemeSettings( + sourceColor: Colors.pink, // Replace this color + themeMode: ThemeMode.system, + ), + ); @override Widget build(BuildContext context) { return BlocProvider( create: (context) => PlaybackBloc(), child: DynamicColorBuilder( - builder: (lightDynamic, darkDynamic) => ThemeProvider( - lightDynamic: lightDynamic, - darkDynamic: darkDynamic, - settings: settings, - child: NotificationListener( - onNotification: (notification) { - settings.value = notification.settings; - return true; - }, - child: ValueListenableBuilder( - valueListenable: settings, - builder: (context, value, _) { - // Create theme instance - return MaterialApp.router( - debugShowCheckedModeBanner: false, - title: 'Flutter Demo', - // Add theme - // Add dark theme - // Add theme mode - routeInformationParser: appRouter.routeInformationParser, - routeInformationProvider: - appRouter.routeInformationProvider, - routerDelegate: appRouter.routerDelegate, - builder: (context, child) { - return PlayPauseListener(child: child!); - }, - ); + builder: + (lightDynamic, darkDynamic) => ThemeProvider( + lightDynamic: lightDynamic, + darkDynamic: darkDynamic, + settings: settings, + child: NotificationListener( + onNotification: (notification) { + settings.value = notification.settings; + return true; }, + child: ValueListenableBuilder( + valueListenable: settings, + builder: (context, value, _) { + // Create theme instance + return MaterialApp.router( + debugShowCheckedModeBanner: false, + title: 'Flutter Demo', + // Add theme + // Add dark theme + // Add theme mode + routeInformationParser: appRouter.routeInformationParser, + routeInformationProvider: + appRouter.routeInformationProvider, + routerDelegate: appRouter.routerDelegate, + builder: (context, child) { + return PlayPauseListener(child: child!); + }, + ); + }, + ), ), - )), + ), ), ); } diff --git a/boring_to_beautiful/step_02/lib/src/shared/classes/image.dart b/boring_to_beautiful/step_02/lib/src/shared/classes/image.dart index a1ef427c1d..00a6472b4a 100644 --- a/boring_to_beautiful/step_02/lib/src/shared/classes/image.dart +++ b/boring_to_beautiful/step_02/lib/src/shared/classes/image.dart @@ -3,10 +3,11 @@ // found in the LICENSE file. class MyArtistImage { - const MyArtistImage( - {required this.image, - required this.sourceName, - required this.sourceLink}); + const MyArtistImage({ + required this.image, + required this.sourceName, + required this.sourceLink, + }); final String image; final String sourceName; diff --git a/boring_to_beautiful/step_02/lib/src/shared/classes/playlist.dart b/boring_to_beautiful/step_02/lib/src/shared/classes/playlist.dart index 59899dc619..5f0225059d 100644 --- a/boring_to_beautiful/step_02/lib/src/shared/classes/playlist.dart +++ b/boring_to_beautiful/step_02/lib/src/shared/classes/playlist.dart @@ -17,8 +17,9 @@ class Playlist { this.description = '', required this.songs, this.cover = const MyArtistImage( - image: 'assets/images/record.jpeg', - sourceName: 'Adobe Stock Images', - sourceLink: ''), + image: 'assets/images/record.jpeg', + sourceName: 'Adobe Stock Images', + sourceLink: '', + ), }); } diff --git a/boring_to_beautiful/step_02/lib/src/shared/classes/ranked_song.dart b/boring_to_beautiful/step_02/lib/src/shared/classes/ranked_song.dart index 5908268c8c..2362bfae64 100644 --- a/boring_to_beautiful/step_02/lib/src/shared/classes/ranked_song.dart +++ b/boring_to_beautiful/step_02/lib/src/shared/classes/ranked_song.dart @@ -7,7 +7,11 @@ import './classes.dart'; class RankedSong extends Song { final int ranking; - const RankedSong(this.ranking, String title, Artist artist, Duration length, - MyArtistImage image) - : super(title, artist, length, image); + const RankedSong( + this.ranking, + String title, + Artist artist, + Duration length, + MyArtistImage image, + ) : super(title, artist, length, image); } diff --git a/boring_to_beautiful/step_02/lib/src/shared/extensions.dart b/boring_to_beautiful/step_02/lib/src/shared/extensions.dart index 6d9ea1f480..6a03f8b8b1 100644 --- a/boring_to_beautiful/step_02/lib/src/shared/extensions.dart +++ b/boring_to_beautiful/step_02/lib/src/shared/extensions.dart @@ -9,51 +9,36 @@ extension TypographyUtils on BuildContext { ThemeData get theme => Theme.of(this); TextTheme get textTheme => theme.textTheme; // Modify this line ColorScheme get colors => theme.colorScheme; - TextStyle? get displayLarge => textTheme.displayLarge?.copyWith( - color: colors.onSurface, - ); - TextStyle? get displayMedium => textTheme.displayMedium?.copyWith( - color: colors.onSurface, - ); - TextStyle? get displaySmall => textTheme.displaySmall?.copyWith( - color: colors.onSurface, - ); - TextStyle? get headlineLarge => textTheme.headlineLarge?.copyWith( - color: colors.onSurface, - ); - TextStyle? get headlineMedium => textTheme.headlineMedium?.copyWith( - color: colors.onSurface, - ); - TextStyle? get headlineSmall => textTheme.headlineSmall?.copyWith( - color: colors.onSurface, - ); - TextStyle? get titleLarge => textTheme.titleLarge?.copyWith( - color: colors.onSurface, - ); - TextStyle? get titleMedium => textTheme.titleMedium?.copyWith( - color: colors.onSurface, - ); - TextStyle? get titleSmall => textTheme.titleSmall?.copyWith( - color: colors.onSurface, - ); - TextStyle? get labelLarge => textTheme.labelLarge?.copyWith( - color: colors.onSurface, - ); - TextStyle? get labelMedium => textTheme.labelMedium?.copyWith( - color: colors.onSurface, - ); - TextStyle? get labelSmall => textTheme.labelSmall?.copyWith( - color: colors.onSurface, - ); - TextStyle? get bodyLarge => textTheme.bodyLarge?.copyWith( - color: colors.onSurface, - ); - TextStyle? get bodyMedium => textTheme.bodyMedium?.copyWith( - color: colors.onSurface, - ); - TextStyle? get bodySmall => textTheme.bodySmall?.copyWith( - color: colors.onSurface, - ); + TextStyle? get displayLarge => + textTheme.displayLarge?.copyWith(color: colors.onSurface); + TextStyle? get displayMedium => + textTheme.displayMedium?.copyWith(color: colors.onSurface); + TextStyle? get displaySmall => + textTheme.displaySmall?.copyWith(color: colors.onSurface); + TextStyle? get headlineLarge => + textTheme.headlineLarge?.copyWith(color: colors.onSurface); + TextStyle? get headlineMedium => + textTheme.headlineMedium?.copyWith(color: colors.onSurface); + TextStyle? get headlineSmall => + textTheme.headlineSmall?.copyWith(color: colors.onSurface); + TextStyle? get titleLarge => + textTheme.titleLarge?.copyWith(color: colors.onSurface); + TextStyle? get titleMedium => + textTheme.titleMedium?.copyWith(color: colors.onSurface); + TextStyle? get titleSmall => + textTheme.titleSmall?.copyWith(color: colors.onSurface); + TextStyle? get labelLarge => + textTheme.labelLarge?.copyWith(color: colors.onSurface); + TextStyle? get labelMedium => + textTheme.labelMedium?.copyWith(color: colors.onSurface); + TextStyle? get labelSmall => + textTheme.labelSmall?.copyWith(color: colors.onSurface); + TextStyle? get bodyLarge => + textTheme.bodyLarge?.copyWith(color: colors.onSurface); + TextStyle? get bodyMedium => + textTheme.bodyMedium?.copyWith(color: colors.onSurface); + TextStyle? get bodySmall => + textTheme.bodySmall?.copyWith(color: colors.onSurface); } extension BreakpointUtils on BoxConstraints { @@ -65,17 +50,17 @@ extension BreakpointUtils on BoxConstraints { extension DurationString on String { /// Assumes a string (roughly) of the format '\d{1,2}:\d{2}' Duration toDuration() => switch (split(':')) { - [var minutes, var seconds] => Duration( - minutes: int.parse(minutes.trim()), - seconds: int.parse(seconds.trim()), - ), - [var hours, var minutes, var seconds] => Duration( - hours: int.parse(hours.trim()), - minutes: int.parse(minutes.trim()), - seconds: int.parse(seconds.trim()), - ), - _ => throw Exception('Invalid duration string: $this'), - }; + [var minutes, var seconds] => Duration( + minutes: int.parse(minutes.trim()), + seconds: int.parse(seconds.trim()), + ), + [var hours, var minutes, var seconds] => Duration( + hours: int.parse(hours.trim()), + minutes: int.parse(minutes.trim()), + seconds: int.parse(seconds.trim()), + ), + _ => throw Exception('Invalid duration string: $this'), + }; } extension HumanizedDuration on Duration { diff --git a/boring_to_beautiful/step_02/lib/src/shared/playback/bloc/playback_bloc.dart b/boring_to_beautiful/step_02/lib/src/shared/playback/bloc/playback_bloc.dart index 73c2f4c436..c6c871937b 100644 --- a/boring_to_beautiful/step_02/lib/src/shared/playback/bloc/playback_bloc.dart +++ b/boring_to_beautiful/step_02/lib/src/shared/playback/bloc/playback_bloc.dart @@ -41,9 +41,8 @@ class PlaybackBloc extends Bloc { } } - void _handlePlaybackProgress(Duration progress) => add( - PlaybackEvent.songProgress(progress), - ); + void _handlePlaybackProgress(Duration progress) => + add(PlaybackEvent.songProgress(progress)); void _togglePlayPause(TogglePlayPause event, Emitter emit) { state.isPlaying ? _pausePlayback() : _resumePlayback(); @@ -52,8 +51,10 @@ class PlaybackBloc extends Bloc { void _pausePlayback() => _currentlyPlayingSubscription!.cancel(); - void _resumePlayback() => _currentlyPlayingSubscription = - _startPlayingStream().listen(_handlePlaybackProgress); + void _resumePlayback() => + _currentlyPlayingSubscription = _startPlayingStream().listen( + _handlePlaybackProgress, + ); void _changeSong(ChangeSong event, Emitter emit) { emit( @@ -69,19 +70,15 @@ class PlaybackBloc extends Bloc { } void _songProgress(SongProgress event, Emitter emit) => emit( - state.copyWith( - songWithProgress: state.songWithProgress!.copyWith( - progress: state.songWithProgress!.progress + event.duration, - ), - ), - ); + state.copyWith( + songWithProgress: state.songWithProgress!.copyWith( + progress: state.songWithProgress!.progress + event.duration, + ), + ), + ); void _setVolume(SetVolume event, Emitter emit) => emit( - state.copyWith( - volume: event.value, - isMuted: false, - previousVolume: null, - ), - ); + state.copyWith(volume: event.value, isMuted: false, previousVolume: null), + ); void _toggleMute(ToggleMute event, Emitter emit) { if (state.isMuted) { @@ -94,11 +91,7 @@ class PlaybackBloc extends Bloc { ); } else { emit( - state.copyWith( - isMuted: true, - volume: 0, - previousVolume: state.volume, - ), + state.copyWith(isMuted: true, volume: 0, previousVolume: state.volume), ); } } diff --git a/boring_to_beautiful/step_02/lib/src/shared/playback/bloc/playback_bloc.freezed.dart b/boring_to_beautiful/step_02/lib/src/shared/playback/bloc/playback_bloc.freezed.dart index 8a422cd449..54e870ab6f 100644 --- a/boring_to_beautiful/step_02/lib/src/shared/playback/bloc/playback_bloc.freezed.dart +++ b/boring_to_beautiful/step_02/lib/src/shared/playback/bloc/playback_bloc.freezed.dart @@ -12,7 +12,8 @@ part of 'playback_bloc.dart'; T _$identity(T value) => value; final _privateConstructorUsedError = UnsupportedError( - 'It seems like you constructed your class using `MyClass._()`. This constructor is only meant to be used by freezed and you are not supposed to need it nor use it.\nPlease check the documentation here for more information: https://github.com/rrousselGit/freezed#adding-getters-and-methods-to-our-models'); + 'It seems like you constructed your class using `MyClass._()`. This constructor is only meant to be used by freezed and you are not supposed to need it nor use it.\nPlease check the documentation here for more information: https://github.com/rrousselGit/freezed#adding-getters-and-methods-to-our-models', +); /// @nodoc mixin _$PlaybackEvent { @@ -24,8 +25,7 @@ mixin _$PlaybackEvent { required TResult Function() toggleMute, required TResult Function(double percent) moveToInSong, required TResult Function(Duration duration) songProgress, - }) => - throw _privateConstructorUsedError; + }) => throw _privateConstructorUsedError; @optionalTypeArgs TResult? whenOrNull({ TResult? Function()? togglePlayPause, @@ -34,8 +34,7 @@ mixin _$PlaybackEvent { TResult? Function()? toggleMute, TResult? Function(double percent)? moveToInSong, TResult? Function(Duration duration)? songProgress, - }) => - throw _privateConstructorUsedError; + }) => throw _privateConstructorUsedError; @optionalTypeArgs TResult maybeWhen({ TResult Function()? togglePlayPause, @@ -45,8 +44,7 @@ mixin _$PlaybackEvent { TResult Function(double percent)? moveToInSong, TResult Function(Duration duration)? songProgress, required TResult orElse(), - }) => - throw _privateConstructorUsedError; + }) => throw _privateConstructorUsedError; @optionalTypeArgs TResult map({ required TResult Function(TogglePlayPause value) togglePlayPause, @@ -55,8 +53,7 @@ mixin _$PlaybackEvent { required TResult Function(ToggleMute value) toggleMute, required TResult Function(MoveToInSong value) moveToInSong, required TResult Function(SongProgress value) songProgress, - }) => - throw _privateConstructorUsedError; + }) => throw _privateConstructorUsedError; @optionalTypeArgs TResult? mapOrNull({ TResult? Function(TogglePlayPause value)? togglePlayPause, @@ -65,8 +62,7 @@ mixin _$PlaybackEvent { TResult? Function(ToggleMute value)? toggleMute, TResult? Function(MoveToInSong value)? moveToInSong, TResult? Function(SongProgress value)? songProgress, - }) => - throw _privateConstructorUsedError; + }) => throw _privateConstructorUsedError; @optionalTypeArgs TResult maybeMap({ TResult Function(TogglePlayPause value)? togglePlayPause, @@ -76,15 +72,15 @@ mixin _$PlaybackEvent { TResult Function(MoveToInSong value)? moveToInSong, TResult Function(SongProgress value)? songProgress, required TResult orElse(), - }) => - throw _privateConstructorUsedError; + }) => throw _privateConstructorUsedError; } /// @nodoc abstract class $PlaybackEventCopyWith<$Res> { factory $PlaybackEventCopyWith( - PlaybackEvent value, $Res Function(PlaybackEvent) then) = - _$PlaybackEventCopyWithImpl<$Res, PlaybackEvent>; + PlaybackEvent value, + $Res Function(PlaybackEvent) then, + ) = _$PlaybackEventCopyWithImpl<$Res, PlaybackEvent>; } /// @nodoc @@ -103,9 +99,10 @@ class _$PlaybackEventCopyWithImpl<$Res, $Val extends PlaybackEvent> /// @nodoc abstract class _$$TogglePlayPauseImplCopyWith<$Res> { - factory _$$TogglePlayPauseImplCopyWith(_$TogglePlayPauseImpl value, - $Res Function(_$TogglePlayPauseImpl) then) = - __$$TogglePlayPauseImplCopyWithImpl<$Res>; + factory _$$TogglePlayPauseImplCopyWith( + _$TogglePlayPauseImpl value, + $Res Function(_$TogglePlayPauseImpl) then, + ) = __$$TogglePlayPauseImplCopyWithImpl<$Res>; } /// @nodoc @@ -113,8 +110,9 @@ class __$$TogglePlayPauseImplCopyWithImpl<$Res> extends _$PlaybackEventCopyWithImpl<$Res, _$TogglePlayPauseImpl> implements _$$TogglePlayPauseImplCopyWith<$Res> { __$$TogglePlayPauseImplCopyWithImpl( - _$TogglePlayPauseImpl _value, $Res Function(_$TogglePlayPauseImpl) _then) - : super(_value, _then); + _$TogglePlayPauseImpl _value, + $Res Function(_$TogglePlayPauseImpl) _then, + ) : super(_value, _then); /// Create a copy of PlaybackEvent /// with the given fields replaced by the non-null parameter values. @@ -233,8 +231,9 @@ abstract class TogglePlayPause implements PlaybackEvent { /// @nodoc abstract class _$$ChangeSongImplCopyWith<$Res> { factory _$$ChangeSongImplCopyWith( - _$ChangeSongImpl value, $Res Function(_$ChangeSongImpl) then) = - __$$ChangeSongImplCopyWithImpl<$Res>; + _$ChangeSongImpl value, + $Res Function(_$ChangeSongImpl) then, + ) = __$$ChangeSongImplCopyWithImpl<$Res>; @useResult $Res call({Song song}); } @@ -244,22 +243,23 @@ class __$$ChangeSongImplCopyWithImpl<$Res> extends _$PlaybackEventCopyWithImpl<$Res, _$ChangeSongImpl> implements _$$ChangeSongImplCopyWith<$Res> { __$$ChangeSongImplCopyWithImpl( - _$ChangeSongImpl _value, $Res Function(_$ChangeSongImpl) _then) - : super(_value, _then); + _$ChangeSongImpl _value, + $Res Function(_$ChangeSongImpl) _then, + ) : super(_value, _then); /// Create a copy of PlaybackEvent /// with the given fields replaced by the non-null parameter values. @pragma('vm:prefer-inline') @override - $Res call({ - Object? song = null, - }) { - return _then(_$ChangeSongImpl( - null == song - ? _value.song - : song // ignore: cast_nullable_to_non_nullable - as Song, - )); + $Res call({Object? song = null}) { + return _then( + _$ChangeSongImpl( + null == song + ? _value.song + : song // ignore: cast_nullable_to_non_nullable + as Song, + ), + ); } } @@ -397,8 +397,9 @@ abstract class ChangeSong implements PlaybackEvent { /// @nodoc abstract class _$$SetVolumeImplCopyWith<$Res> { factory _$$SetVolumeImplCopyWith( - _$SetVolumeImpl value, $Res Function(_$SetVolumeImpl) then) = - __$$SetVolumeImplCopyWithImpl<$Res>; + _$SetVolumeImpl value, + $Res Function(_$SetVolumeImpl) then, + ) = __$$SetVolumeImplCopyWithImpl<$Res>; @useResult $Res call({double value}); } @@ -408,22 +409,23 @@ class __$$SetVolumeImplCopyWithImpl<$Res> extends _$PlaybackEventCopyWithImpl<$Res, _$SetVolumeImpl> implements _$$SetVolumeImplCopyWith<$Res> { __$$SetVolumeImplCopyWithImpl( - _$SetVolumeImpl _value, $Res Function(_$SetVolumeImpl) _then) - : super(_value, _then); + _$SetVolumeImpl _value, + $Res Function(_$SetVolumeImpl) _then, + ) : super(_value, _then); /// Create a copy of PlaybackEvent /// with the given fields replaced by the non-null parameter values. @pragma('vm:prefer-inline') @override - $Res call({ - Object? value = null, - }) { - return _then(_$SetVolumeImpl( - null == value - ? _value.value - : value // ignore: cast_nullable_to_non_nullable - as double, - )); + $Res call({Object? value = null}) { + return _then( + _$SetVolumeImpl( + null == value + ? _value.value + : value // ignore: cast_nullable_to_non_nullable + as double, + ), + ); } } @@ -561,8 +563,9 @@ abstract class SetVolume implements PlaybackEvent { /// @nodoc abstract class _$$ToggleMuteImplCopyWith<$Res> { factory _$$ToggleMuteImplCopyWith( - _$ToggleMuteImpl value, $Res Function(_$ToggleMuteImpl) then) = - __$$ToggleMuteImplCopyWithImpl<$Res>; + _$ToggleMuteImpl value, + $Res Function(_$ToggleMuteImpl) then, + ) = __$$ToggleMuteImplCopyWithImpl<$Res>; } /// @nodoc @@ -570,8 +573,9 @@ class __$$ToggleMuteImplCopyWithImpl<$Res> extends _$PlaybackEventCopyWithImpl<$Res, _$ToggleMuteImpl> implements _$$ToggleMuteImplCopyWith<$Res> { __$$ToggleMuteImplCopyWithImpl( - _$ToggleMuteImpl _value, $Res Function(_$ToggleMuteImpl) _then) - : super(_value, _then); + _$ToggleMuteImpl _value, + $Res Function(_$ToggleMuteImpl) _then, + ) : super(_value, _then); /// Create a copy of PlaybackEvent /// with the given fields replaced by the non-null parameter values. @@ -690,8 +694,9 @@ abstract class ToggleMute implements PlaybackEvent { /// @nodoc abstract class _$$MoveToInSongImplCopyWith<$Res> { factory _$$MoveToInSongImplCopyWith( - _$MoveToInSongImpl value, $Res Function(_$MoveToInSongImpl) then) = - __$$MoveToInSongImplCopyWithImpl<$Res>; + _$MoveToInSongImpl value, + $Res Function(_$MoveToInSongImpl) then, + ) = __$$MoveToInSongImplCopyWithImpl<$Res>; @useResult $Res call({double percent}); } @@ -701,22 +706,23 @@ class __$$MoveToInSongImplCopyWithImpl<$Res> extends _$PlaybackEventCopyWithImpl<$Res, _$MoveToInSongImpl> implements _$$MoveToInSongImplCopyWith<$Res> { __$$MoveToInSongImplCopyWithImpl( - _$MoveToInSongImpl _value, $Res Function(_$MoveToInSongImpl) _then) - : super(_value, _then); + _$MoveToInSongImpl _value, + $Res Function(_$MoveToInSongImpl) _then, + ) : super(_value, _then); /// Create a copy of PlaybackEvent /// with the given fields replaced by the non-null parameter values. @pragma('vm:prefer-inline') @override - $Res call({ - Object? percent = null, - }) { - return _then(_$MoveToInSongImpl( - null == percent - ? _value.percent - : percent // ignore: cast_nullable_to_non_nullable - as double, - )); + $Res call({Object? percent = null}) { + return _then( + _$MoveToInSongImpl( + null == percent + ? _value.percent + : percent // ignore: cast_nullable_to_non_nullable + as double, + ), + ); } } @@ -854,8 +860,9 @@ abstract class MoveToInSong implements PlaybackEvent { /// @nodoc abstract class _$$SongProgressImplCopyWith<$Res> { factory _$$SongProgressImplCopyWith( - _$SongProgressImpl value, $Res Function(_$SongProgressImpl) then) = - __$$SongProgressImplCopyWithImpl<$Res>; + _$SongProgressImpl value, + $Res Function(_$SongProgressImpl) then, + ) = __$$SongProgressImplCopyWithImpl<$Res>; @useResult $Res call({Duration duration}); } @@ -865,22 +872,23 @@ class __$$SongProgressImplCopyWithImpl<$Res> extends _$PlaybackEventCopyWithImpl<$Res, _$SongProgressImpl> implements _$$SongProgressImplCopyWith<$Res> { __$$SongProgressImplCopyWithImpl( - _$SongProgressImpl _value, $Res Function(_$SongProgressImpl) _then) - : super(_value, _then); + _$SongProgressImpl _value, + $Res Function(_$SongProgressImpl) _then, + ) : super(_value, _then); /// Create a copy of PlaybackEvent /// with the given fields replaced by the non-null parameter values. @pragma('vm:prefer-inline') @override - $Res call({ - Object? duration = null, - }) { - return _then(_$SongProgressImpl( - null == duration - ? _value.duration - : duration // ignore: cast_nullable_to_non_nullable - as Duration, - )); + $Res call({Object? duration = null}) { + return _then( + _$SongProgressImpl( + null == duration + ? _value.duration + : duration // ignore: cast_nullable_to_non_nullable + as Duration, + ), + ); } } @@ -1037,15 +1045,17 @@ mixin _$PlaybackState { /// @nodoc abstract class $PlaybackStateCopyWith<$Res> { factory $PlaybackStateCopyWith( - PlaybackState value, $Res Function(PlaybackState) then) = - _$PlaybackStateCopyWithImpl<$Res, PlaybackState>; + PlaybackState value, + $Res Function(PlaybackState) then, + ) = _$PlaybackStateCopyWithImpl<$Res, PlaybackState>; @useResult - $Res call( - {double volume, - double? previousVolume, - bool isMuted, - bool isPlaying, - SongWithProgress? songWithProgress}); + $Res call({ + double volume, + double? previousVolume, + bool isMuted, + bool isPlaying, + SongWithProgress? songWithProgress, + }); $SongWithProgressCopyWith<$Res>? get songWithProgress; } @@ -1071,28 +1081,36 @@ class _$PlaybackStateCopyWithImpl<$Res, $Val extends PlaybackState> Object? isPlaying = null, Object? songWithProgress = freezed, }) { - return _then(_value.copyWith( - volume: null == volume - ? _value.volume - : volume // ignore: cast_nullable_to_non_nullable - as double, - previousVolume: freezed == previousVolume - ? _value.previousVolume - : previousVolume // ignore: cast_nullable_to_non_nullable - as double?, - isMuted: null == isMuted - ? _value.isMuted - : isMuted // ignore: cast_nullable_to_non_nullable - as bool, - isPlaying: null == isPlaying - ? _value.isPlaying - : isPlaying // ignore: cast_nullable_to_non_nullable - as bool, - songWithProgress: freezed == songWithProgress - ? _value.songWithProgress - : songWithProgress // ignore: cast_nullable_to_non_nullable - as SongWithProgress?, - ) as $Val); + return _then( + _value.copyWith( + volume: + null == volume + ? _value.volume + : volume // ignore: cast_nullable_to_non_nullable + as double, + previousVolume: + freezed == previousVolume + ? _value.previousVolume + : previousVolume // ignore: cast_nullable_to_non_nullable + as double?, + isMuted: + null == isMuted + ? _value.isMuted + : isMuted // ignore: cast_nullable_to_non_nullable + as bool, + isPlaying: + null == isPlaying + ? _value.isPlaying + : isPlaying // ignore: cast_nullable_to_non_nullable + as bool, + songWithProgress: + freezed == songWithProgress + ? _value.songWithProgress + : songWithProgress // ignore: cast_nullable_to_non_nullable + as SongWithProgress?, + ) + as $Val, + ); } /// Create a copy of PlaybackState @@ -1114,16 +1132,18 @@ class _$PlaybackStateCopyWithImpl<$Res, $Val extends PlaybackState> abstract class _$$PlaybackStateImplCopyWith<$Res> implements $PlaybackStateCopyWith<$Res> { factory _$$PlaybackStateImplCopyWith( - _$PlaybackStateImpl value, $Res Function(_$PlaybackStateImpl) then) = - __$$PlaybackStateImplCopyWithImpl<$Res>; + _$PlaybackStateImpl value, + $Res Function(_$PlaybackStateImpl) then, + ) = __$$PlaybackStateImplCopyWithImpl<$Res>; @override @useResult - $Res call( - {double volume, - double? previousVolume, - bool isMuted, - bool isPlaying, - SongWithProgress? songWithProgress}); + $Res call({ + double volume, + double? previousVolume, + bool isMuted, + bool isPlaying, + SongWithProgress? songWithProgress, + }); @override $SongWithProgressCopyWith<$Res>? get songWithProgress; @@ -1134,8 +1154,9 @@ class __$$PlaybackStateImplCopyWithImpl<$Res> extends _$PlaybackStateCopyWithImpl<$Res, _$PlaybackStateImpl> implements _$$PlaybackStateImplCopyWith<$Res> { __$$PlaybackStateImplCopyWithImpl( - _$PlaybackStateImpl _value, $Res Function(_$PlaybackStateImpl) _then) - : super(_value, _then); + _$PlaybackStateImpl _value, + $Res Function(_$PlaybackStateImpl) _then, + ) : super(_value, _then); /// Create a copy of PlaybackState /// with the given fields replaced by the non-null parameter values. @@ -1148,40 +1169,48 @@ class __$$PlaybackStateImplCopyWithImpl<$Res> Object? isPlaying = null, Object? songWithProgress = freezed, }) { - return _then(_$PlaybackStateImpl( - volume: null == volume - ? _value.volume - : volume // ignore: cast_nullable_to_non_nullable - as double, - previousVolume: freezed == previousVolume - ? _value.previousVolume - : previousVolume // ignore: cast_nullable_to_non_nullable - as double?, - isMuted: null == isMuted - ? _value.isMuted - : isMuted // ignore: cast_nullable_to_non_nullable - as bool, - isPlaying: null == isPlaying - ? _value.isPlaying - : isPlaying // ignore: cast_nullable_to_non_nullable - as bool, - songWithProgress: freezed == songWithProgress - ? _value.songWithProgress - : songWithProgress // ignore: cast_nullable_to_non_nullable - as SongWithProgress?, - )); + return _then( + _$PlaybackStateImpl( + volume: + null == volume + ? _value.volume + : volume // ignore: cast_nullable_to_non_nullable + as double, + previousVolume: + freezed == previousVolume + ? _value.previousVolume + : previousVolume // ignore: cast_nullable_to_non_nullable + as double?, + isMuted: + null == isMuted + ? _value.isMuted + : isMuted // ignore: cast_nullable_to_non_nullable + as bool, + isPlaying: + null == isPlaying + ? _value.isPlaying + : isPlaying // ignore: cast_nullable_to_non_nullable + as bool, + songWithProgress: + freezed == songWithProgress + ? _value.songWithProgress + : songWithProgress // ignore: cast_nullable_to_non_nullable + as SongWithProgress?, + ), + ); } } /// @nodoc class _$PlaybackStateImpl implements _PlaybackState { - const _$PlaybackStateImpl( - {this.volume = 0.5, - this.previousVolume, - this.isMuted = false, - this.isPlaying = false, - this.songWithProgress}); + const _$PlaybackStateImpl({ + this.volume = 0.5, + this.previousVolume, + this.isMuted = false, + this.isPlaying = false, + this.songWithProgress, + }); /// Legal values are between 0 and 1. @override @@ -1221,8 +1250,14 @@ class _$PlaybackStateImpl implements _PlaybackState { } @override - int get hashCode => Object.hash(runtimeType, volume, previousVolume, isMuted, - isPlaying, songWithProgress); + int get hashCode => Object.hash( + runtimeType, + volume, + previousVolume, + isMuted, + isPlaying, + songWithProgress, + ); /// Create a copy of PlaybackState /// with the given fields replaced by the non-null parameter values. @@ -1234,12 +1269,13 @@ class _$PlaybackStateImpl implements _PlaybackState { } abstract class _PlaybackState implements PlaybackState { - const factory _PlaybackState( - {final double volume, - final double? previousVolume, - final bool isMuted, - final bool isPlaying, - final SongWithProgress? songWithProgress}) = _$PlaybackStateImpl; + const factory _PlaybackState({ + final double volume, + final double? previousVolume, + final bool isMuted, + final bool isPlaying, + final SongWithProgress? songWithProgress, + }) = _$PlaybackStateImpl; /// Legal values are between 0 and 1. @override @@ -1278,8 +1314,9 @@ mixin _$SongWithProgress { /// @nodoc abstract class $SongWithProgressCopyWith<$Res> { factory $SongWithProgressCopyWith( - SongWithProgress value, $Res Function(SongWithProgress) then) = - _$SongWithProgressCopyWithImpl<$Res, SongWithProgress>; + SongWithProgress value, + $Res Function(SongWithProgress) then, + ) = _$SongWithProgressCopyWithImpl<$Res, SongWithProgress>; @useResult $Res call({Duration progress, Song song}); } @@ -1298,29 +1335,32 @@ class _$SongWithProgressCopyWithImpl<$Res, $Val extends SongWithProgress> /// with the given fields replaced by the non-null parameter values. @pragma('vm:prefer-inline') @override - $Res call({ - Object? progress = null, - Object? song = null, - }) { - return _then(_value.copyWith( - progress: null == progress - ? _value.progress - : progress // ignore: cast_nullable_to_non_nullable - as Duration, - song: null == song - ? _value.song - : song // ignore: cast_nullable_to_non_nullable - as Song, - ) as $Val); + $Res call({Object? progress = null, Object? song = null}) { + return _then( + _value.copyWith( + progress: + null == progress + ? _value.progress + : progress // ignore: cast_nullable_to_non_nullable + as Duration, + song: + null == song + ? _value.song + : song // ignore: cast_nullable_to_non_nullable + as Song, + ) + as $Val, + ); } } /// @nodoc abstract class _$$SongWithProgressImplCopyWith<$Res> implements $SongWithProgressCopyWith<$Res> { - factory _$$SongWithProgressImplCopyWith(_$SongWithProgressImpl value, - $Res Function(_$SongWithProgressImpl) then) = - __$$SongWithProgressImplCopyWithImpl<$Res>; + factory _$$SongWithProgressImplCopyWith( + _$SongWithProgressImpl value, + $Res Function(_$SongWithProgressImpl) then, + ) = __$$SongWithProgressImplCopyWithImpl<$Res>; @override @useResult $Res call({Duration progress, Song song}); @@ -1330,28 +1370,30 @@ abstract class _$$SongWithProgressImplCopyWith<$Res> class __$$SongWithProgressImplCopyWithImpl<$Res> extends _$SongWithProgressCopyWithImpl<$Res, _$SongWithProgressImpl> implements _$$SongWithProgressImplCopyWith<$Res> { - __$$SongWithProgressImplCopyWithImpl(_$SongWithProgressImpl _value, - $Res Function(_$SongWithProgressImpl) _then) - : super(_value, _then); + __$$SongWithProgressImplCopyWithImpl( + _$SongWithProgressImpl _value, + $Res Function(_$SongWithProgressImpl) _then, + ) : super(_value, _then); /// Create a copy of SongWithProgress /// with the given fields replaced by the non-null parameter values. @pragma('vm:prefer-inline') @override - $Res call({ - Object? progress = null, - Object? song = null, - }) { - return _then(_$SongWithProgressImpl( - progress: null == progress - ? _value.progress - : progress // ignore: cast_nullable_to_non_nullable - as Duration, - song: null == song - ? _value.song - : song // ignore: cast_nullable_to_non_nullable - as Song, - )); + $Res call({Object? progress = null, Object? song = null}) { + return _then( + _$SongWithProgressImpl( + progress: + null == progress + ? _value.progress + : progress // ignore: cast_nullable_to_non_nullable + as Duration, + song: + null == song + ? _value.song + : song // ignore: cast_nullable_to_non_nullable + as Song, + ), + ); } } @@ -1390,13 +1432,16 @@ class _$SongWithProgressImpl implements _SongWithProgress { @pragma('vm:prefer-inline') _$$SongWithProgressImplCopyWith<_$SongWithProgressImpl> get copyWith => __$$SongWithProgressImplCopyWithImpl<_$SongWithProgressImpl>( - this, _$identity); + this, + _$identity, + ); } abstract class _SongWithProgress implements SongWithProgress { - const factory _SongWithProgress( - {required final Duration progress, - required final Song song}) = _$SongWithProgressImpl; + const factory _SongWithProgress({ + required final Duration progress, + required final Song song, + }) = _$SongWithProgressImpl; @override Duration get progress; diff --git a/boring_to_beautiful/step_02/lib/src/shared/providers/artists.dart b/boring_to_beautiful/step_02/lib/src/shared/providers/artists.dart index d116ad9cdd..f9e4a8063e 100644 --- a/boring_to_beautiful/step_02/lib/src/shared/providers/artists.dart +++ b/boring_to_beautiful/step_02/lib/src/shared/providers/artists.dart @@ -11,162 +11,175 @@ class ArtistsProvider { static ArtistsProvider get shared => ArtistsProvider(); List get artists => const [ - Artist( - id: 'jmo', - name: 'Jessie Morrison', + Artist( + id: 'jmo', + name: 'Jessie Morrison', + image: MyArtistImage( + image: 'assets/images/artists/woman.jpeg', + sourceLink: 'https://unsplash.com/photos/w8wpFqiMpW8', + sourceName: 'Daniel Monteiro', + ), + bio: + 'Jessie "JMo" Morrison is an American singer, actress, and dancer. The following year she won over America\'s hearts first appearing in the 2004 movie Unexpected Engagement. Soon after she released her debut album, Hopeful Romantics.', + updates: [ + 'So happy that everyone is loving the new music! It\'s been my pride and joy to work on and I\'m thrilled that you finally get to hear it!', + 'Happy Valentine\'s Day y\'all!!! I love each and every one of you 💋😘', + '#HappyGalentinesDay!!! Chocolates. Ice Cream. Your favorite rom-com. Let\'s goo!!! 💕✨', + ], + events: [ + Event( + date: '1/20/22', + title: 'Jessie Morrison: No More Heartbreak Tour', + location: 'Mountain View, California', + link: 'Tickets', + ), + Event( + date: '1/22/22', + title: 'Jessie Morrison: No More Heartbreak Tour', + location: 'Austin, Texas', + link: 'Tickets', + ), + Event( + date: '1/23/22', + title: 'Jessie Morrison: No More Heartbreak Tour', + location: 'Houston, Texas', + link: 'Tickets', + ), + Event( + date: '2/8/22', + title: 'Jessie Morrison: No More Heartbreak Tour', + location: 'Los Angeles, California', + link: 'Tickets', + ), + ], + news: [ + News( + title: + 'Jessie Morrison a 26-stop cross country tour for the first time in 6 years.', + author: 'By Jacqueline Stewart', + blurb: + 'Our favorite triple-threat Jessie Morrison is back, this time with a 26 stop tour across the country. She\'ll kick things off in Mountain View on January 20th, 2022 in Mountain View California with more stops being announced over the next few weeks...', image: MyArtistImage( - image: 'assets/images/artists/woman.jpeg', - sourceLink: 'https://unsplash.com/photos/w8wpFqiMpW8', - sourceName: 'Daniel Monteiro', + image: 'assets/images/news/concert.jpeg', + sourceLink: 'https://unsplash.com/photos/hzgs56Ze49s', + sourceName: 'Anthony DELANOIX', ), - bio: - 'Jessie "JMo" Morrison is an American singer, actress, and dancer. The following year she won over America\'s hearts first appearing in the 2004 movie Unexpected Engagement. Soon after she released her debut album, Hopeful Romantics.', - updates: [ - 'So happy that everyone is loving the new music! It\'s been my pride and joy to work on and I\'m thrilled that you finally get to hear it!', - 'Happy Valentine\'s Day y\'all!!! I love each and every one of you 💋😘', - '#HappyGalentinesDay!!! Chocolates. Ice Cream. Your favorite rom-com. Let\'s goo!!! 💕✨', - ], - events: [ - Event( - date: '1/20/22', - title: 'Jessie Morrison: No More Heartbreak Tour', - location: 'Mountain View, California', - link: 'Tickets'), - Event( - date: '1/22/22', - title: 'Jessie Morrison: No More Heartbreak Tour', - location: 'Austin, Texas', - link: 'Tickets'), - Event( - date: '1/23/22', - title: 'Jessie Morrison: No More Heartbreak Tour', - location: 'Houston, Texas', - link: 'Tickets'), - Event( - date: '2/8/22', - title: 'Jessie Morrison: No More Heartbreak Tour', - location: 'Los Angeles, California', - link: 'Tickets'), - ], - news: [ - News( - title: - 'Jessie Morrison a 26-stop cross country tour for the first time in 6 years.', - author: 'By Jacqueline Stewart', - blurb: - 'Our favorite triple-threat Jessie Morrison is back, this time with a 26 stop tour across the country. She\'ll kick things off in Mountain View on January 20th, 2022 in Mountain View California with more stops being announced over the next few weeks...', - image: MyArtistImage( - image: 'assets/images/news/concert.jpeg', - sourceLink: 'https://unsplash.com/photos/hzgs56Ze49s', - sourceName: 'Anthony DELANOIX', - ), - ) - ], ), - Artist( - id: 'lb', - name: 'Lucas Bryant', + ], + ), + Artist( + id: 'lb', + name: 'Lucas Bryant', + image: MyArtistImage( + image: 'assets/images/albums/artist1-album2.jpg', + sourceLink: 'https://unsplash.com/photos/6etHcucBiRg', + sourceName: 'Keagan Henman', + ), + bio: + 'Lucas Bryant is an American country music singer and songwriter. He moved to Nashville at the age of 18 to pursue his country music career. With 34 awards to his name, he currently holds the record for most awards in country music.', + updates: [ + 'Who\'s ready to party this weekend?! See you tomorrow, Nashville! #LBlive', + 'Can\'t wait to get back on stage after so long. What songs do you want to hear?', + 'We\'re going all in this weekend! How are you doing, Vegas?!', + ], + events: [ + Event( + date: '5/16/22', + title: 'Back To My Hometown Tour', + location: 'Indianapolis, IN', + link: 'Tickets', + ), + Event( + date: '5/18/22', + title: 'Back To My Hometown Tour', + location: 'San Antonio, TX', + link: 'Tickets', + ), + Event( + date: '5/20/22', + title: 'Back To My Hometown Tour', + location: 'Phoenix, AZ', + link: 'Tickets', + ), + Event( + date: '5/23/22', + title: 'Back To My Hometown Tour', + location: 'San Diego, CA', + link: 'Tickets', + ), + ], + news: [ + News( + title: + 'Country Music Favorites Lucas Bryant, Mariam Lubbock, Michelle Delaney and Jackson Murray Join Forces For The Biggest Performance in Country History.', + author: 'Lonnie Hall', + blurb: + 'Calling all country music fans! Fasten your seat belts because the 2022 Best of Country Awards is expecting a huge performance from some of our favorite artists. Country music legends Mariam Lubbock and Jackson Murray will be joined by Lucas Bryant and Michelle Delaney for a performance we\'ll never forget.', image: MyArtistImage( image: 'assets/images/albums/artist1-album2.jpg', sourceLink: 'https://unsplash.com/photos/6etHcucBiRg', sourceName: 'Keagan Henman', ), - bio: - 'Lucas Bryant is an American country music singer and songwriter. He moved to Nashville at the age of 18 to pursue his country music career. With 34 awards to his name, he currently holds the record for most awards in country music.', - updates: [ - 'Who\'s ready to party this weekend?! See you tomorrow, Nashville! #LBlive', - 'Can\'t wait to get back on stage after so long. What songs do you want to hear?', - 'We\'re going all in this weekend! How are you doing, Vegas?!', - ], - events: [ - Event( - date: '5/16/22', - title: 'Back To My Hometown Tour', - location: 'Indianapolis, IN', - link: 'Tickets'), - Event( - date: '5/18/22', - title: 'Back To My Hometown Tour', - location: 'San Antonio, TX', - link: 'Tickets'), - Event( - date: '5/20/22', - title: 'Back To My Hometown Tour', - location: 'Phoenix, AZ', - link: 'Tickets'), - Event( - date: '5/23/22', - title: 'Back To My Hometown Tour', - location: 'San Diego, CA', - link: 'Tickets'), - ], - news: [ - News( - title: - 'Country Music Favorites Lucas Bryant, Mariam Lubbock, Michelle Delaney and Jackson Murray Join Forces For The Biggest Performance in Country History.', - author: 'Lonnie Hall', - blurb: - 'Calling all country music fans! Fasten your seat belts because the 2022 Best of Country Awards is expecting a huge performance from some of our favorite artists. Country music legends Mariam Lubbock and Jackson Murray will be joined by Lucas Bryant and Michelle Delaney for a performance we\'ll never forget.', - image: MyArtistImage( - image: 'assets/images/albums/artist1-album2.jpg', - sourceLink: 'https://unsplash.com/photos/6etHcucBiRg', - sourceName: 'Keagan Henman', - ), - ), - ], ), - Artist( - id: 'jonjames', - name: 'Jon James', + ], + ), + Artist( + id: 'jonjames', + name: 'Jon James', + image: MyArtistImage( + image: 'assets/images/artists/joe.jpg', + sourceLink: 'https://unsplash.com/photos/k7UKO-tT5QU', + sourceName: 'Natalie Runnerstrom', + ), + bio: + 'Jon James is an American singer and songwriter. He\'s best known for his number one single "Never Going Back" which stayed atop the charts for 10 weeks.', + updates: [ + '3. MORE. DAYS. Who\'s ready for #FallingForYou?! Tune in tomorrow to see the full track list!', + '4 days until I get to share some of the favorite songs I\'ve ever written with you.', + '#FallingForYou dropping in 5 days! Send me your favorite music video concepts 🎥 😎', + ], + events: [ + Event( + date: '10/22/21', + title: 'Falling For You Tour', + location: 'Dallas, Texas', + link: 'Ticketmaster', + ), + Event( + date: '10/23/21', + title: 'Falling For You Tour', + location: 'Houston, Texas', + link: 'Ticketmaster', + ), + Event( + date: '10/26/21', + title: 'Falling For You Tour', + location: 'Phoenix, Arizona', + link: 'Ticketmaster', + ), + Event( + date: '10/27/21', + title: 'Falling For You Tour', + location: 'Los Angeles, California', + link: 'Ticketmaster', + ), + ], + news: [ + News( + title: + 'Jon James is excited for the release of his sixth album "Falling For You"', + author: 'Top Media Today', + blurb: + 'Jon James will be dropping his new album "Falling For You" on Friday to much fan excitement. The 6-time Grammy winning artist has spent the last year writing and recording for this album that\'s been dubbed "his best work yet."', image: MyArtistImage( - image: 'assets/images/artists/joe.jpg', - sourceLink: 'https://unsplash.com/photos/k7UKO-tT5QU', - sourceName: 'Natalie Runnerstrom', + image: 'assets/images/news/recording_studio.jpg', + sourceLink: 'https://unsplash.com/photos/CbOGmLA46JI', + sourceName: 'Yohann LIBOT', ), - bio: - 'Jon James is an American singer and songwriter. He\'s best known for his number one single "Never Going Back" which stayed atop the charts for 10 weeks.', - updates: [ - '3. MORE. DAYS. Who\'s ready for #FallingForYou?! Tune in tomorrow to see the full track list!', - '4 days until I get to share some of the favorite songs I\'ve ever written with you.', - '#FallingForYou dropping in 5 days! Send me your favorite music video concepts 🎥 😎', - ], - events: [ - Event( - date: '10/22/21', - title: 'Falling For You Tour', - location: 'Dallas, Texas', - link: 'Ticketmaster'), - Event( - date: '10/23/21', - title: 'Falling For You Tour', - location: 'Houston, Texas', - link: 'Ticketmaster'), - Event( - date: '10/26/21', - title: 'Falling For You Tour', - location: 'Phoenix, Arizona', - link: 'Ticketmaster'), - Event( - date: '10/27/21', - title: 'Falling For You Tour', - location: 'Los Angeles, California', - link: 'Ticketmaster'), - ], - news: [ - News( - title: - 'Jon James is excited for the release of his sixth album "Falling For You"', - author: 'Top Media Today', - blurb: - 'Jon James will be dropping his new album "Falling For You" on Friday to much fan excitement. The 6-time Grammy winning artist has spent the last year writing and recording for this album that\'s been dubbed "his best work yet."', - image: MyArtistImage( - image: 'assets/images/news/recording_studio.jpg', - sourceLink: 'https://unsplash.com/photos/CbOGmLA46JI', - sourceName: 'Yohann LIBOT'), - ) - ], ), - ]; + ], + ), + ]; Artist? getArtist(String id) { return artists.firstWhereOrNull((artist) => artist.id == id); diff --git a/boring_to_beautiful/step_02/lib/src/shared/providers/playlists.dart b/boring_to_beautiful/step_02/lib/src/shared/providers/playlists.dart index e8bab994dd..f27f71b3ec 100644 --- a/boring_to_beautiful/step_02/lib/src/shared/providers/playlists.dart +++ b/boring_to_beautiful/step_02/lib/src/shared/providers/playlists.dart @@ -18,41 +18,50 @@ class PlaylistsProvider { static List images() { return [ const MyArtistImage( - image: 'assets/images/playlists/favorite.jpg', - sourceLink: 'https://unsplash.com/photos/60GsdOMRFGc', - sourceName: 'Karsten Winegeart'), + image: 'assets/images/playlists/favorite.jpg', + sourceLink: 'https://unsplash.com/photos/60GsdOMRFGc', + sourceName: 'Karsten Winegeart', + ), const MyArtistImage( - image: 'assets/images/playlists/austin.jpg', - sourceLink: 'https://unsplash.com/photos/AlBgcDfDG_s', - sourceName: 'Carlos Alfonso'), + image: 'assets/images/playlists/austin.jpg', + sourceLink: 'https://unsplash.com/photos/AlBgcDfDG_s', + sourceName: 'Carlos Alfonso', + ), const MyArtistImage( - image: 'assets/images/playlists/reading.jpg', - sourceLink: 'https://unsplash.com/photos/wkgv7I2VTzM', - sourceName: 'Alexandra Fuller'), + image: 'assets/images/playlists/reading.jpg', + sourceLink: 'https://unsplash.com/photos/wkgv7I2VTzM', + sourceName: 'Alexandra Fuller', + ), const MyArtistImage( - image: 'assets/images/playlists/workout.jpg', - sourceLink: 'https://unsplash.com/photos/CnEEF5eJemQ', - sourceName: 'Karsten Winegeart'), + image: 'assets/images/playlists/workout.jpg', + sourceLink: 'https://unsplash.com/photos/CnEEF5eJemQ', + sourceName: 'Karsten Winegeart', + ), const MyArtistImage( - image: 'assets/images/playlists/calm.jpg', - sourceLink: 'https://unsplash.com/photos/NTyBbu66_SI', - sourceName: 'Jared Rice'), + image: 'assets/images/playlists/calm.jpg', + sourceLink: 'https://unsplash.com/photos/NTyBbu66_SI', + sourceName: 'Jared Rice', + ), const MyArtistImage( - image: 'assets/images/playlists/coffee.jpg', - sourceLink: 'https://unsplash.com/photos/XOhI_kW_TaM', - sourceName: 'Nathan Dumlao'), + image: 'assets/images/playlists/coffee.jpg', + sourceLink: 'https://unsplash.com/photos/XOhI_kW_TaM', + sourceName: 'Nathan Dumlao', + ), const MyArtistImage( - image: 'assets/images/playlists/piano.jpg', - sourceLink: 'https://unsplash.com/photos/BhfE1IgcsA8', - sourceName: 'Jordan Whitfield'), + image: 'assets/images/playlists/piano.jpg', + sourceLink: 'https://unsplash.com/photos/BhfE1IgcsA8', + sourceName: 'Jordan Whitfield', + ), const MyArtistImage( - image: 'assets/images/playlists/studying.jpg', - sourceLink: 'https://unsplash.com/photos/-moT-Deiw1M', - sourceName: 'Humble Lamb'), + image: 'assets/images/playlists/studying.jpg', + sourceLink: 'https://unsplash.com/photos/-moT-Deiw1M', + sourceName: 'Humble Lamb', + ), const MyArtistImage( - image: 'assets/images/playlists/jazz.jpg', - sourceLink: 'https://unsplash.com/photos/BY_KyTwTKq4', - sourceName: 'dimitri.photography'), + image: 'assets/images/playlists/jazz.jpg', + sourceLink: 'https://unsplash.com/photos/BY_KyTwTKq4', + sourceName: 'dimitri.photography', + ), ]; } @@ -85,8 +94,10 @@ class PlaylistsProvider { ); } - static final List _randomPlaylists = - List.generate(10, (index) => randomLengthPlaylist()); + static final List _randomPlaylists = List.generate( + 10, + (index) => randomLengthPlaylist(), + ); } String randomId() { diff --git a/boring_to_beautiful/step_02/lib/src/shared/providers/songs.dart b/boring_to_beautiful/step_02/lib/src/shared/providers/songs.dart index ed018a83ff..f1205f2dcb 100644 --- a/boring_to_beautiful/step_02/lib/src/shared/providers/songs.dart +++ b/boring_to_beautiful/step_02/lib/src/shared/providers/songs.dart @@ -52,9 +52,10 @@ final _songs = [ ArtistsProvider.shared.getArtist('jonjames')!, '3:35'.toDuration(), const MyArtistImage( - image: 'assets/images/albums/artist4-album2.jpg', - sourceLink: 'https://unsplash.com/photos/RQgKM1h2agA', - sourceName: 'Alexandru Acea'), + image: 'assets/images/albums/artist4-album2.jpg', + sourceLink: 'https://unsplash.com/photos/RQgKM1h2agA', + sourceName: 'Alexandru Acea', + ), ), RankedSong( 2, @@ -62,9 +63,10 @@ final _songs = [ ArtistsProvider.shared.getArtist('jonjames')!, '3:52'.toDuration(), const MyArtistImage( - image: 'assets/images/albums/artist4-album1.jpg', - sourceLink: 'https://unsplash.com/photos/ZWDg7v2FPWE', - sourceName: 'Jr Korpa'), + image: 'assets/images/albums/artist4-album1.jpg', + sourceLink: 'https://unsplash.com/photos/ZWDg7v2FPWE', + sourceName: 'Jr Korpa', + ), ), RankedSong( 3, @@ -72,9 +74,10 @@ final _songs = [ ArtistsProvider.shared.getArtist('jonjames')!, '3:39'.toDuration(), const MyArtistImage( - image: 'assets/images/albums/artist4-album3.jpg', - sourceLink: 'https://unsplash.com/photos/rX12B5uX7QM', - sourceName: 'Stormseeker'), + image: 'assets/images/albums/artist4-album3.jpg', + sourceLink: 'https://unsplash.com/photos/rX12B5uX7QM', + sourceName: 'Stormseeker', + ), ), RankedSong( 1, diff --git a/boring_to_beautiful/step_02/lib/src/shared/providers/theme.dart b/boring_to_beautiful/step_02/lib/src/shared/providers/theme.dart index a152dcdcba..a86e3daf64 100644 --- a/boring_to_beautiful/step_02/lib/src/shared/providers/theme.dart +++ b/boring_to_beautiful/step_02/lib/src/shared/providers/theme.dart @@ -28,12 +28,13 @@ class ThemeSettingChange extends Notification { } class ThemeProvider extends InheritedWidget { - const ThemeProvider( - {super.key, - required this.settings, - required this.lightDynamic, - required this.darkDynamic, - required super.child}); + const ThemeProvider({ + super.key, + required this.settings, + required this.lightDynamic, + required this.darkDynamic, + required super.child, + }); final ValueNotifier settings; final ColorScheme? lightDynamic; @@ -59,8 +60,9 @@ class ThemeProvider extends InheritedWidget { Color blend(Color targetColor) { return Color( - // ignore: deprecated_member_use - Blend.harmonize(targetColor.value, settings.value.sourceColor.value)); + // ignore: deprecated_member_use + Blend.harmonize(targetColor.value, settings.value.sourceColor.value), + ); } Color source(Color? target) { @@ -72,18 +74,18 @@ class ThemeProvider extends InheritedWidget { } ColorScheme colors(Brightness brightness, Color? targetColor) { - final dynamicPrimary = brightness == Brightness.light - ? lightDynamic?.primary - : darkDynamic?.primary; + final dynamicPrimary = + brightness == Brightness.light + ? lightDynamic?.primary + : darkDynamic?.primary; return ColorScheme.fromSeed( seedColor: dynamicPrimary ?? source(targetColor), brightness: brightness, ); } - ShapeBorder get shapeMedium => RoundedRectangleBorder( - borderRadius: BorderRadius.circular(8), - ); + ShapeBorder get shapeMedium => + RoundedRectangleBorder(borderRadius: BorderRadius.circular(8)); CardTheme cardTheme() { return CardTheme( @@ -113,21 +115,13 @@ class ThemeProvider extends InheritedWidget { labelColor: colors.secondary, unselectedLabelColor: colors.onSurfaceVariant, indicator: BoxDecoration( - border: Border( - bottom: BorderSide( - color: colors.secondary, - width: 2, - ), - ), + border: Border(bottom: BorderSide(color: colors.secondary, width: 2)), ), ); } BottomAppBarTheme bottomAppBarTheme(ColorScheme colors) { - return BottomAppBarTheme( - color: colors.surface, - elevation: 0, - ); + return BottomAppBarTheme(color: colors.surface, elevation: 0); } BottomNavigationBarThemeData bottomNavigationBarTheme(ColorScheme colors) { @@ -146,9 +140,7 @@ class ThemeProvider extends InheritedWidget { } DrawerThemeData drawerTheme(ColorScheme colors) { - return DrawerThemeData( - backgroundColor: colors.surface, - ); + return DrawerThemeData(backgroundColor: colors.surface); } ThemeData light([Color? targetColor]) { @@ -207,10 +199,7 @@ class ThemeProvider extends InheritedWidget { } class ThemeSettings { - ThemeSettings({ - required this.sourceColor, - required this.themeMode, - }); + ThemeSettings({required this.sourceColor, required this.themeMode}); final Color sourceColor; final ThemeMode themeMode; @@ -221,10 +210,7 @@ Color randomColor() { } // Custom Colors -const linkColor = CustomColor( - name: 'Link Color', - color: Color(0xFF00B0FF), -); +const linkColor = CustomColor(name: 'Link Color', color: Color(0xFF00B0FF)); class CustomColor { const CustomColor({ diff --git a/boring_to_beautiful/step_02/lib/src/shared/router.dart b/boring_to_beautiful/step_02/lib/src/shared/router.dart index 3efb7362fa..db82627246 100644 --- a/boring_to_beautiful/step_02/lib/src/shared/router.dart +++ b/boring_to_beautiful/step_02/lib/src/shared/router.dart @@ -20,11 +20,7 @@ final artistsProvider = ArtistsProvider(); final playlistsProvider = PlaylistsProvider(); const List destinations = [ - NavigationDestination( - label: 'Home', - icon: Icon(Icons.home), - route: '/', - ), + NavigationDestination(label: 'Home', icon: Icon(Icons.home), route: '/'), NavigationDestination( label: 'Playlists', icon: Icon(Icons.playlist_add_check), @@ -56,41 +52,46 @@ final appRouter = GoRouter( // HomeScreen GoRoute( path: '/', - pageBuilder: (context, state) => const MaterialPage( - key: _pageKey, - child: RootLayout( - key: _scaffoldKey, - currentIndex: 0, - child: HomeScreen(), - ), - ), + pageBuilder: + (context, state) => const MaterialPage( + key: _pageKey, + child: RootLayout( + key: _scaffoldKey, + currentIndex: 0, + child: HomeScreen(), + ), + ), ), // PlaylistHomeScreen GoRoute( path: '/playlists', - pageBuilder: (context, state) => const MaterialPage( - key: _pageKey, - child: RootLayout( - key: _scaffoldKey, - currentIndex: 1, - child: PlaylistHomeScreen(), - ), - ), - routes: [ - GoRoute( - path: ':pid', - pageBuilder: (context, state) => MaterialPage( - key: state.pageKey, + pageBuilder: + (context, state) => const MaterialPage( + key: _pageKey, child: RootLayout( key: _scaffoldKey, currentIndex: 1, - child: PlaylistScreen( - playlist: playlistsProvider - .getPlaylist(state.pathParameters['pid']!)!, - ), + child: PlaylistHomeScreen(), ), ), + routes: [ + GoRoute( + path: ':pid', + pageBuilder: + (context, state) => MaterialPage( + key: state.pageKey, + child: RootLayout( + key: _scaffoldKey, + currentIndex: 1, + child: PlaylistScreen( + playlist: + playlistsProvider.getPlaylist( + state.pathParameters['pid']!, + )!, + ), + ), + ), ), ], ), @@ -98,28 +99,32 @@ final appRouter = GoRouter( // ArtistHomeScreen GoRoute( path: '/artists', - pageBuilder: (context, state) => const MaterialPage( - key: _pageKey, - child: RootLayout( - key: _scaffoldKey, - currentIndex: 2, - child: ArtistsScreen(), - ), - ), - routes: [ - GoRoute( - path: ':aid', - pageBuilder: (context, state) => MaterialPage( - key: state.pageKey, + pageBuilder: + (context, state) => const MaterialPage( + key: _pageKey, child: RootLayout( key: _scaffoldKey, currentIndex: 2, - child: ArtistScreen( - artist: - artistsProvider.getArtist(state.pathParameters['aid']!)!, - ), + child: ArtistsScreen(), ), ), + routes: [ + GoRoute( + path: ':aid', + pageBuilder: + (context, state) => MaterialPage( + key: state.pageKey, + child: RootLayout( + key: _scaffoldKey, + currentIndex: 2, + child: ArtistScreen( + artist: + artistsProvider.getArtist( + state.pathParameters['aid']!, + )!, + ), + ), + ), // builder: (context, state) => ArtistScreen( // id: state.params['aid']!, // ), @@ -129,14 +134,15 @@ final appRouter = GoRouter( for (final route in destinations.skip(3)) GoRoute( path: route.route, - pageBuilder: (context, state) => MaterialPage( - key: _pageKey, - child: RootLayout( - key: _scaffoldKey, - currentIndex: destinations.indexOf(route), - child: const SizedBox(), - ), - ), + pageBuilder: + (context, state) => MaterialPage( + key: _pageKey, + child: RootLayout( + key: _scaffoldKey, + currentIndex: destinations.indexOf(route), + child: const SizedBox(), + ), + ), ), ], ); diff --git a/boring_to_beautiful/step_02/lib/src/shared/views/adaptive_image_card.dart b/boring_to_beautiful/step_02/lib/src/shared/views/adaptive_image_card.dart index 07cab2b0d7..99f5be0837 100644 --- a/boring_to_beautiful/step_02/lib/src/shared/views/adaptive_image_card.dart +++ b/boring_to_beautiful/step_02/lib/src/shared/views/adaptive_image_card.dart @@ -36,20 +36,13 @@ class AdaptiveImageCard extends StatelessWidget { ), ), Expanded( - child: Padding( - padding: const EdgeInsets.all(20), - child: child, - ), + child: Padding(padding: const EdgeInsets.all(20), child: child), ), ], ); } return Padding( - padding: const EdgeInsets.only( - left: 20, - bottom: 20, - top: 20, - ), + padding: const EdgeInsets.only(left: 20, bottom: 20, top: 20), child: Row( mainAxisAlignment: MainAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.end, @@ -65,11 +58,8 @@ class AdaptiveImageCard extends StatelessWidget { ), ), Expanded( - child: Padding( - padding: const EdgeInsets.all(20), - child: child, - ), - ) + child: Padding(padding: const EdgeInsets.all(20), child: child), + ), ], ), ); diff --git a/boring_to_beautiful/step_02/lib/src/shared/views/adaptive_navigation.dart b/boring_to_beautiful/step_02/lib/src/shared/views/adaptive_navigation.dart index 92734c9005..aa78766292 100644 --- a/boring_to_beautiful/step_02/lib/src/shared/views/adaptive_navigation.dart +++ b/boring_to_beautiful/step_02/lib/src/shared/views/adaptive_navigation.dart @@ -30,12 +30,15 @@ class AdaptiveNavigation extends StatelessWidget { NavigationRail( extended: dimens.maxWidth >= 800, minExtendedWidth: 180, - destinations: destinations - .map((e) => NavigationRailDestination( - icon: e.icon, - label: Text(e.label), - )) - .toList(), + destinations: + destinations + .map( + (e) => NavigationRailDestination( + icon: e.icon, + label: Text(e.label), + ), + ) + .toList(), selectedIndex: selectedIndex, onDestinationSelected: onDestinationSelected, ), diff --git a/boring_to_beautiful/step_02/lib/src/shared/views/article_content.dart b/boring_to_beautiful/step_02/lib/src/shared/views/article_content.dart index af243f015b..c5a0b5e62a 100644 --- a/boring_to_beautiful/step_02/lib/src/shared/views/article_content.dart +++ b/boring_to_beautiful/step_02/lib/src/shared/views/article_content.dart @@ -5,11 +5,7 @@ import 'package:flutter/material.dart'; class ArticleContent extends StatelessWidget { - const ArticleContent({ - super.key, - required this.child, - this.maxWidth = 960, - }); + const ArticleContent({super.key, required this.child, this.maxWidth = 960}); final double maxWidth; final Widget child; @@ -19,13 +15,8 @@ class ArticleContent extends StatelessWidget { return Container( alignment: Alignment.topCenter, child: ConstrainedBox( - constraints: BoxConstraints( - maxWidth: maxWidth, - ), - child: Padding( - padding: const EdgeInsets.all(15), - child: child, - ), + constraints: BoxConstraints(maxWidth: maxWidth), + child: Padding(padding: const EdgeInsets.all(15), child: child), ), ); } diff --git a/boring_to_beautiful/step_02/lib/src/shared/views/bottom_bar.dart b/boring_to_beautiful/step_02/lib/src/shared/views/bottom_bar.dart index 06e085a9b6..bf15ad9bb0 100644 --- a/boring_to_beautiful/step_02/lib/src/shared/views/bottom_bar.dart +++ b/boring_to_beautiful/step_02/lib/src/shared/views/bottom_bar.dart @@ -26,16 +26,18 @@ class BottomBar extends StatelessWidget implements PreferredSizeWidget { final bloc = BlocProvider.of(context); return BlocBuilder( bloc: bloc, - builder: (context, state) => _BottomBar( - artist: state.songWithProgress?.song.artist, - isMuted: state.isMuted, - isPlaying: state.isPlaying, - preferredSize: preferredSize, - progress: state.songWithProgress?.progress, - song: state.songWithProgress?.song, - togglePlayPause: () => bloc.add(const PlaybackEvent.togglePlayPause()), - volume: state.volume, - ), + builder: + (context, state) => _BottomBar( + artist: state.songWithProgress?.song.artist, + isMuted: state.isMuted, + isPlaying: state.isPlaying, + preferredSize: preferredSize, + progress: state.songWithProgress?.progress, + song: state.songWithProgress?.song, + togglePlayPause: + () => bloc.add(const PlaybackEvent.togglePlayPause()), + volume: state.volume, + ), ); } } @@ -63,10 +65,12 @@ class _BottomBar extends StatelessWidget { @override Widget build(BuildContext context) => LayoutBuilder( - builder: (context, constraints) => constraints.isTablet - ? _buildDesktopBar(context, constraints) - : _buildMobileBar(context, constraints), - ); + builder: + (context, constraints) => + constraints.isTablet + ? _buildDesktopBar(context, constraints) + : _buildMobileBar(context, constraints), + ); Widget _buildDesktopBar(BuildContext context, BoxConstraints constraints) { return ColoredBox( @@ -79,10 +83,7 @@ class _BottomBar extends StatelessWidget { Row( children: [ _AlbumArt(song: song), - _SongDetails( - artist: artist, - song: song, - ), + _SongDetails(artist: artist, song: song), ], ), Flexible( @@ -95,12 +96,7 @@ class _BottomBar extends StatelessWidget { isPlaying: isPlaying, togglePlayPause: togglePlayPause, ), - Center( - child: _ProgressBar( - progress: progress, - song: song, - ), - ), + Center(child: _ProgressBar(progress: progress, song: song)), ], ), ), @@ -114,17 +110,18 @@ class _BottomBar extends StatelessWidget { final overlay = Overlay.of(context); OverlayEntry? entry; entry = OverlayEntry( - builder: (context) => Stack( - children: [ - Positioned( - child: _FullScreenPlayer( - onClose: () { - entry?.remove(); - }, - ), + builder: + (context) => Stack( + children: [ + Positioned( + child: _FullScreenPlayer( + onClose: () { + entry?.remove(); + }, + ), + ), + ], ), - ], - ), ); overlay.insert(entry); }, @@ -136,10 +133,10 @@ class _BottomBar extends StatelessWidget { } double get songProgress => switch ((progress, song)) { - (Duration progress, Song song) => - progress.inMilliseconds / song.length.inMilliseconds, - _ => 0, - }; + (Duration progress, Song song) => + progress.inMilliseconds / song.length.inMilliseconds, + _ => 0, + }; Widget _buildMobileBar(BuildContext context, BoxConstraints constraints) { return ColoredBox( @@ -152,17 +149,18 @@ class _BottomBar extends StatelessWidget { final overlay = Overlay.of(context); OverlayEntry? entry; entry = OverlayEntry( - builder: (context) => Stack( - children: [ - Positioned( - child: _MobilePlayer( - onClose: () { - entry?.remove(); - }, - ), + builder: + (context) => Stack( + children: [ + Positioned( + child: _MobilePlayer( + onClose: () { + entry?.remove(); + }, + ), + ), + ], ), - ], - ), ); overlay.insert(entry); }, @@ -191,10 +189,7 @@ class _BottomBar extends StatelessWidget { mainAxisAlignment: MainAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start, children: [ - Text( - song?.title ?? '', - style: context.labelMedium, - ), + Text(song?.title ?? '', style: context.labelMedium), Text( song?.artist.name ?? '', style: context.labelSmall, @@ -220,10 +215,7 @@ class _BottomBar extends StatelessWidget { } class _ProgressBar extends StatelessWidget { - const _ProgressBar({ - required this.progress, - required this.song, - }); + const _ProgressBar({required this.progress, required this.song}); /// Current playback depth into user is into [song]. final Duration? progress; @@ -231,10 +223,10 @@ class _ProgressBar extends StatelessWidget { final Song? song; double get songProgress => switch ((progress, song)) { - (Duration progress, Song song) => - progress.inMilliseconds / song.length.inMilliseconds, - _ => 0, - }; + (Duration progress, Song song) => + progress.inMilliseconds / song.length.inMilliseconds, + _ => 0, + }; @override Widget build(BuildContext context) { @@ -252,29 +244,32 @@ class _ProgressBar extends StatelessWidget { children: [ const SizedBox(width: 10), SizedBox( - child: progress != null - ? Text(progress!.toHumanizedString(), - style: Theme.of(context).textTheme.bodySmall) - : const Text('-'), + child: + progress != null + ? Text( + progress!.toHumanizedString(), + style: Theme.of(context).textTheme.bodySmall, + ) + : const Text('-'), ), Expanded( child: Slider( value: songProgress.clamp(0, 1), divisions: 1000, onChanged: (percent) { - BlocProvider.of(context).add( - PlaybackEvent.moveToInSong(percent), - ); + BlocProvider.of( + context, + ).add(PlaybackEvent.moveToInSong(percent)); }, onChangeEnd: (percent) { - BlocProvider.of(context).add( - PlaybackEvent.moveToInSong(percent), - ); + BlocProvider.of( + context, + ).add(PlaybackEvent.moveToInSong(percent)); // Because dragging pauses auto playback, resume playing // once the user finishes dragging. - BlocProvider.of(context).add( - const PlaybackEvent.togglePlayPause(), - ); + BlocProvider.of( + context, + ).add(const PlaybackEvent.togglePlayPause()); }, activeColor: Theme.of(context).colorScheme.onTertiaryContainer, @@ -282,12 +277,15 @@ class _ProgressBar extends StatelessWidget { ), ), SizedBox( - child: song != null - ? Text(song!.length.toHumanizedString(), - style: Theme.of(context).textTheme.bodySmall) - : const Text('-'), + child: + song != null + ? Text( + song!.length.toHumanizedString(), + style: Theme.of(context).textTheme.bodySmall, + ) + : const Text('-'), ), - const SizedBox(width: 10) + const SizedBox(width: 10), ], ), ); @@ -297,10 +295,7 @@ class _ProgressBar extends StatelessWidget { } class _VolumeBar extends StatelessWidget { - const _VolumeBar({ - required this.volume, - required this.isMuted, - }); + const _VolumeBar({required this.volume, required this.isMuted}); /// The percentage, between 0 and 1, at which to render the volume slider. final double volume; @@ -313,17 +308,16 @@ class _VolumeBar extends StatelessWidget { @override Widget build(BuildContext context) { return ConstrainedBox( - constraints: const BoxConstraints( - maxWidth: 200, - ), + constraints: const BoxConstraints(maxWidth: 200), child: Padding( padding: const EdgeInsets.all(8), child: Row( children: [ GestureDetector( - onTap: () => BlocProvider.of(context).add( - const PlaybackEvent.toggleMute(), - ), + onTap: + () => BlocProvider.of( + context, + ).add(const PlaybackEvent.toggleMute()), child: Icon(!isMuted ? Icons.volume_mute : Icons.volume_off), ), Expanded( @@ -332,8 +326,10 @@ class _VolumeBar extends StatelessWidget { min: 0, max: 1, divisions: 100, - onChanged: (newValue) => BlocProvider.of(context) - .add(PlaybackEvent.setVolume(newValue)), + onChanged: + (newValue) => BlocProvider.of( + context, + ).add(PlaybackEvent.setVolume(newValue)), activeColor: Theme.of(context).colorScheme.onTertiaryContainer, inactiveColor: Theme.of(context).colorScheme.onSurface, ), @@ -356,49 +352,50 @@ class _PlaybackControls extends StatelessWidget { @override Widget build(BuildContext context) { - return LayoutBuilder(builder: (context, constraints) { - double iconSize = 24; - double playIconSize = 32; - double innerPadding = 16; - double playPadding = 20; - if (constraints.maxWidth < 500) { - iconSize = 21; - playIconSize = 28; - innerPadding = 14; - playPadding = 17; - } - return Row( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Padding( + return LayoutBuilder( + builder: (context, constraints) { + double iconSize = 24; + double playIconSize = 32; + double innerPadding = 16; + double playPadding = 20; + if (constraints.maxWidth < 500) { + iconSize = 21; + playIconSize = 28; + innerPadding = 14; + playPadding = 17; + } + return Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Padding( padding: EdgeInsets.fromLTRB(0, 0, innerPadding, 0), - child: Icon(Icons.shuffle, size: iconSize)), - Icon(Icons.skip_previous, size: iconSize), - Padding( - padding: EdgeInsets.fromLTRB(playPadding, 0, innerPadding, 0), - child: GestureDetector( - onTap: togglePlayPause, - child: Icon( - isPlaying ? Icons.pause_circle : Icons.play_circle, - size: playIconSize, + child: Icon(Icons.shuffle, size: iconSize), + ), + Icon(Icons.skip_previous, size: iconSize), + Padding( + padding: EdgeInsets.fromLTRB(playPadding, 0, innerPadding, 0), + child: GestureDetector( + onTap: togglePlayPause, + child: Icon( + isPlaying ? Icons.pause_circle : Icons.play_circle, + size: playIconSize, + ), ), ), - ), - Icon(Icons.skip_next, size: iconSize), - Padding( - padding: EdgeInsets.fromLTRB(innerPadding, 0, 0, 0), - child: Icon(Icons.repeat, size: iconSize), - ), - ], - ); - }); + Icon(Icons.skip_next, size: iconSize), + Padding( + padding: EdgeInsets.fromLTRB(innerPadding, 0, 0, 0), + child: Icon(Icons.repeat, size: iconSize), + ), + ], + ); + }, + ); } } class _AlbumArt extends StatelessWidget { - const _AlbumArt({ - required this.song, - }); + const _AlbumArt({required this.song}); final Song? song; @@ -409,21 +406,17 @@ class _AlbumArt extends StatelessWidget { child: SizedBox( width: 70, height: 70, - child: song != null - ? Image.asset(song!.image.image) - : Container( - color: Colors.pink[100], - ), + child: + song != null + ? Image.asset(song!.image.image) + : Container(color: Colors.pink[100]), ), ); } } class _SongDetails extends StatelessWidget { - const _SongDetails({ - required this.artist, - required this.song, - }); + const _SongDetails({required this.artist, required this.song}); final Artist? artist; final Song? song; @@ -455,9 +448,7 @@ class _SongDetails extends StatelessWidget { } class _FullScreenPlayer extends StatefulWidget { - const _FullScreenPlayer({ - required this.onClose, - }); + const _FullScreenPlayer({required this.onClose}); final VoidCallback onClose; @@ -489,29 +480,33 @@ class _FullScreenPlayerState extends State<_FullScreenPlayer> { final bloc = BlocProvider.of(context); return BlocBuilder( bloc: bloc, - builder: (context, state) => Theme( - data: ThemeProvider.of(context).dark(), - child: Scaffold( - body: LayoutBuilder( - builder: (context, dimens) { - return MouseRegion( - onHover: (_) { - setState(() { - _showControls = true; - }); - hideControls(); + builder: + (context, state) => Theme( + data: ThemeProvider.of(context).dark(), + child: Scaffold( + body: LayoutBuilder( + builder: (context, dimens) { + return MouseRegion( + onHover: (_) { + setState(() { + _showControls = true; + }); + hideControls(); + }, + child: buildPlayer(context, state, dimens), + ); }, - child: buildPlayer(context, state, dimens), - ); - }, + ), + ), ), - ), - ), ); } Widget buildPlayer( - BuildContext context, PlaybackState state, BoxConstraints dimens) { + BuildContext context, + PlaybackState state, + BoxConstraints dimens, + ) { final bloc = BlocProvider.of(context); final current = state.songWithProgress; final song = current?.song; @@ -519,26 +514,25 @@ class _FullScreenPlayerState extends State<_FullScreenPlayer> { fit: StackFit.expand, children: [ Positioned.fill( - child: current == null - ? const Center(child: Text('No song selected')) - : Container( - color: context.colors.shadow, - child: Opacity( - opacity: 0.3, - child: Image.asset( - song!.image.image, - fit: BoxFit.cover, + child: + current == null + ? const Center(child: Text('No song selected')) + : Container( + color: context.colors.shadow, + child: Opacity( + opacity: 0.3, + child: Image.asset(song!.image.image, fit: BoxFit.cover), ), ), - ), ), Positioned( top: 20, right: 20, child: IconButton( - color: song != null - ? context.colors.onSurface - : context.colors.onSurface, + color: + song != null + ? context.colors.onSurface + : context.colors.onSurface, icon: const Icon(Icons.fullscreen_exit), onPressed: widget.onClose, ), @@ -569,8 +563,9 @@ class _FullScreenPlayerState extends State<_FullScreenPlayer> { Text( song.artist.name, style: context.labelSmall!.copyWith( - fontSize: 20, - color: context.colors.onSurface.withAlpha(204)), + fontSize: 20, + color: context.colors.onSurface.withAlpha(204), + ), overflow: TextOverflow.clip, ), ], @@ -582,10 +577,7 @@ class _FullScreenPlayerState extends State<_FullScreenPlayer> { right: 20, left: 20, bottom: dimens.biggest.height * 0.2, - child: _ProgressBar( - progress: current?.progress, - song: song, - ), + child: _ProgressBar(progress: current?.progress, song: song), ), Positioned( right: 20, @@ -598,8 +590,8 @@ class _FullScreenPlayerState extends State<_FullScreenPlayer> { scale: 1.5, child: _PlaybackControls( isPlaying: state.isPlaying, - togglePlayPause: () => - bloc.add(const PlaybackEvent.togglePlayPause()), + togglePlayPause: + () => bloc.add(const PlaybackEvent.togglePlayPause()), ), ), ), @@ -611,9 +603,7 @@ class _FullScreenPlayerState extends State<_FullScreenPlayer> { } class _MobilePlayer extends StatelessWidget { - const _MobilePlayer({ - required this.onClose, - }); + const _MobilePlayer({required this.onClose}); final VoidCallback onClose; @@ -622,46 +612,52 @@ class _MobilePlayer extends StatelessWidget { final bloc = BlocProvider.of(context); return BlocBuilder( bloc: bloc, - builder: (context, state) => Theme( - data: ThemeProvider.of(context).dark(), - child: Scaffold( - body: LayoutBuilder( - builder: (context, dimens) { - return buildPlayer(context, state, dimens); - }, + builder: + (context, state) => Theme( + data: ThemeProvider.of(context).dark(), + child: Scaffold( + body: LayoutBuilder( + builder: (context, dimens) { + return buildPlayer(context, state, dimens); + }, + ), + ), ), - ), - ), ); } Widget buildPlayer( - BuildContext context, PlaybackState state, BoxConstraints dimens) { + BuildContext context, + PlaybackState state, + BoxConstraints dimens, + ) { final bloc = BlocProvider.of(context); final current = state.songWithProgress; return Stack( children: [ Positioned.fill( - child: current == null - ? const Center(child: Text('No song selected')) - : Container( - color: context.colors.shadow, - child: Opacity( - opacity: 0.3, - child: Image.asset( - current.song.image.image, - fit: BoxFit.cover, + child: + current == null + ? const Center(child: Text('No song selected')) + : Container( + color: context.colors.shadow, + child: Opacity( + opacity: 0.3, + child: Image.asset( + current.song.image.image, + fit: BoxFit.cover, + ), ), ), - ), ), Positioned( top: 20, left: 20, child: IconButton( - color: current?.song != null - ? context.colors.onSurface - : context.colors.onSurface, + color: + current?.song != null + ? context.colors.onSurface + : context.colors.onSurface, icon: const RotatedBox( quarterTurns: 1, child: Icon(Icons.chevron_right), @@ -676,10 +672,7 @@ class _MobilePlayer extends StatelessWidget { left: 0, right: 0, height: dimens.biggest.height * 0.5, - child: Image.asset( - current.song.image.image, - fit: BoxFit.contain, - ), + child: Image.asset(current.song.image.image, fit: BoxFit.contain), ), Positioned( left: 0, @@ -705,8 +698,9 @@ class _MobilePlayer extends StatelessWidget { Text( current.song.artist.name, style: context.labelSmall!.copyWith( - fontSize: 12, - color: context.colors.onSurface.withAlpha(204)), + fontSize: 12, + color: context.colors.onSurface.withAlpha(204), + ), overflow: TextOverflow.clip, ), ], @@ -718,15 +712,12 @@ class _MobilePlayer extends StatelessWidget { scale: 1.5, child: _PlaybackControls( isPlaying: state.isPlaying, - togglePlayPause: () => - bloc.add(const PlaybackEvent.togglePlayPause()), + togglePlayPause: + () => bloc.add(const PlaybackEvent.togglePlayPause()), ), ), ), - _ProgressBar( - progress: current.progress, - song: current.song, - ), + _ProgressBar(progress: current.progress, song: current.song), ], ), ), diff --git a/boring_to_beautiful/step_02/lib/src/shared/views/brightness_toggle.dart b/boring_to_beautiful/step_02/lib/src/shared/views/brightness_toggle.dart index 46dde4810f..5b5332392b 100644 --- a/boring_to_beautiful/step_02/lib/src/shared/views/brightness_toggle.dart +++ b/boring_to_beautiful/step_02/lib/src/shared/views/brightness_toggle.dart @@ -13,9 +13,10 @@ class BrightnessToggle extends StatelessWidget { Widget build(BuildContext context) { final isDark = Theme.of(context).brightness == Brightness.dark; return IconButton( - icon: Theme.of(context).brightness == Brightness.light - ? const Icon(Icons.brightness_3) - : const Icon(Icons.brightness_7), + icon: + Theme.of(context).brightness == Brightness.light + ? const Icon(Icons.brightness_3) + : const Icon(Icons.brightness_7), onPressed: () { final themeProvider = ThemeProvider.of(context); final settings = themeProvider.settings.value; diff --git a/boring_to_beautiful/step_02/lib/src/shared/views/center_row.dart b/boring_to_beautiful/step_02/lib/src/shared/views/center_row.dart index 36d428e3b8..c1f3effcc2 100644 --- a/boring_to_beautiful/step_02/lib/src/shared/views/center_row.dart +++ b/boring_to_beautiful/step_02/lib/src/shared/views/center_row.dart @@ -5,23 +5,12 @@ import 'package:flutter/material.dart'; class CenterRow extends StatelessWidget { - const CenterRow({ - super.key, - required this.child, - }); + const CenterRow({super.key, required this.child}); final Widget child; @override Widget build(BuildContext context) { - return Row( - children: [ - Expanded( - child: Center( - child: child, - ), - ), - ], - ); + return Row(children: [Expanded(child: Center(child: child))]); } } diff --git a/boring_to_beautiful/step_02/lib/src/shared/views/clickable.dart b/boring_to_beautiful/step_02/lib/src/shared/views/clickable.dart index cd7ef46268..f192f0b135 100644 --- a/boring_to_beautiful/step_02/lib/src/shared/views/clickable.dart +++ b/boring_to_beautiful/step_02/lib/src/shared/views/clickable.dart @@ -14,10 +14,7 @@ class Clickable extends StatelessWidget { Widget build(BuildContext context) { return MouseRegion( cursor: SystemMouseCursors.click, - child: GestureDetector( - onTap: onTap, - child: child, - ), + child: GestureDetector(onTap: onTap, child: child), ); } } diff --git a/boring_to_beautiful/step_02/lib/src/shared/views/events.dart b/boring_to_beautiful/step_02/lib/src/shared/views/events.dart index ed38465460..ab9140e56d 100644 --- a/boring_to_beautiful/step_02/lib/src/shared/views/events.dart +++ b/boring_to_beautiful/step_02/lib/src/shared/views/events.dart @@ -24,43 +24,18 @@ class Events extends StatelessWidget { child: DataTable( horizontalMargin: 5.0, columns: const [ - DataColumn( - label: Text( - 'Date', - ), - numeric: true, - ), - DataColumn( - label: Text( - 'Event', - ), - ), - DataColumn( - label: Text( - 'Location', - ), - ), - DataColumn( - label: Text( - 'More info', - ), - ), + DataColumn(label: Text('Date'), numeric: true), + DataColumn(label: Text('Event')), + DataColumn(label: Text('Location')), + DataColumn(label: Text('More info')), ], rows: [ for (final event in artist.events) DataRow( cells: [ - DataCell( - Text(event.date), - ), - DataCell( - Row(children: [ - Expanded(child: Text(event.title)), - ]), - ), - DataCell( - Text(event.location), - ), + DataCell(Text(event.date)), + DataCell(Row(children: [Expanded(child: Text(event.title))])), + DataCell(Text(event.location)), DataCell( Clickable( child: Text( @@ -70,8 +45,9 @@ class Events extends StatelessWidget { decoration: TextDecoration.underline, ), ), - onTap: () => - launchUrl(Uri.parse('https://docs.flutter.dev')), + onTap: + () => + launchUrl(Uri.parse('https://docs.flutter.dev')), ), ), ], diff --git a/boring_to_beautiful/step_02/lib/src/shared/views/hover_toggle.dart b/boring_to_beautiful/step_02/lib/src/shared/views/hover_toggle.dart index ec98c2863c..649cfcab63 100644 --- a/boring_to_beautiful/step_02/lib/src/shared/views/hover_toggle.dart +++ b/boring_to_beautiful/step_02/lib/src/shared/views/hover_toggle.dart @@ -31,9 +31,10 @@ class _HoverToggleState extends State with MaterialStateMixin { cursor: isHovered ? SystemMouseCursors.click : MouseCursor.defer, onEnter: (_) => setMaterialState(WidgetState.hovered, true), onExit: (_) => setMaterialState(WidgetState.hovered, false), - child: widget.mode == HoverMode.replace - ? _buildReplaceableChildren() - : _buildChildrenStack(), + child: + widget.mode == HoverMode.replace + ? _buildReplaceableChildren() + : _buildChildrenStack(), ), ); } @@ -41,12 +42,7 @@ class _HoverToggleState extends State with MaterialStateMixin { Widget _buildChildrenStack() { Widget child = isHovered ? Opacity(opacity: 0.2, child: widget.child) : widget.child; - return Stack( - children: [ - child, - if (isHovered) widget.hoverChild, - ], - ); + return Stack(children: [child, if (isHovered) widget.hoverChild]); } Widget _buildReplaceableChildren() => diff --git a/boring_to_beautiful/step_02/lib/src/shared/views/hoverable_song_play_button.dart b/boring_to_beautiful/step_02/lib/src/shared/views/hoverable_song_play_button.dart index 512f3d1d3c..dd588e3dbe 100644 --- a/boring_to_beautiful/step_02/lib/src/shared/views/hoverable_song_play_button.dart +++ b/boring_to_beautiful/step_02/lib/src/shared/views/hoverable_song_play_button.dart @@ -29,9 +29,10 @@ class HoverableSongPlayButton extends StatelessWidget { hoverChild: Center( child: GestureDetector( child: const Icon(Icons.play_arrow), - onTap: () => BlocProvider.of(context).add( - PlaybackEvent.changeSong(song), - ), + onTap: + () => BlocProvider.of( + context, + ).add(PlaybackEvent.changeSong(song)), ), ), mode: hoverMode, diff --git a/boring_to_beautiful/step_02/lib/src/shared/views/image_card.dart b/boring_to_beautiful/step_02/lib/src/shared/views/image_card.dart index 0af9f75f33..6e7f6cd42d 100644 --- a/boring_to_beautiful/step_02/lib/src/shared/views/image_card.dart +++ b/boring_to_beautiful/step_02/lib/src/shared/views/image_card.dart @@ -7,13 +7,14 @@ import '../../shared/extensions.dart'; import 'outlined_card.dart'; class ImageCard extends StatelessWidget { - const ImageCard( - {super.key, - required this.title, - required this.details, - required this.image, - this.subtitle, - this.clickable = false}); + const ImageCard({ + super.key, + required this.title, + required this.details, + required this.image, + this.subtitle, + this.clickable = false, + }); final String title; final String? subtitle; @@ -28,54 +29,51 @@ class ImageCard extends StatelessWidget { clickable: clickable, child: Padding( padding: const EdgeInsets.all(8.0), - child: LayoutBuilder(builder: (context, constraints) { - return Row( - children: [ - if (constraints.maxWidth > 600) - SizedBox( - width: 170, - height: 170, - child: Image.asset( - image, - fit: BoxFit.cover, + child: LayoutBuilder( + builder: (context, constraints) { + return Row( + children: [ + if (constraints.maxWidth > 600) + SizedBox( + width: 170, + height: 170, + child: Image.asset(image, fit: BoxFit.cover), ), - ), - Expanded( - child: Padding( - padding: padding, - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Padding( - padding: const EdgeInsets.only(bottom: 5), - child: Text( - title, - style: context.titleLarge! - .copyWith(fontWeight: FontWeight.bold), - ), - ), - if (subtitle != null) + Expanded( + child: Padding( + padding: padding, + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ Padding( - padding: const EdgeInsets.only(bottom: 10), + padding: const EdgeInsets.only(bottom: 5), child: Text( - subtitle!, - style: context.labelMedium, + title, + style: context.titleLarge!.copyWith( + fontWeight: FontWeight.bold, + ), ), ), - Text( - details, - style: context.labelMedium?.copyWith( - fontSize: 16, - height: 1.25, + if (subtitle != null) + Padding( + padding: const EdgeInsets.only(bottom: 10), + child: Text(subtitle!, style: context.labelMedium), + ), + Text( + details, + style: context.labelMedium?.copyWith( + fontSize: 16, + height: 1.25, + ), ), - ), - ], + ], + ), ), ), - ), - ], - ); - }), + ], + ); + }, + ), ), ); } diff --git a/boring_to_beautiful/step_02/lib/src/shared/views/image_tile.dart b/boring_to_beautiful/step_02/lib/src/shared/views/image_tile.dart index 4f2bbebb96..dd99152af5 100644 --- a/boring_to_beautiful/step_02/lib/src/shared/views/image_tile.dart +++ b/boring_to_beautiful/step_02/lib/src/shared/views/image_tile.dart @@ -21,19 +21,17 @@ class ImageTile extends StatelessWidget { @override Widget build(BuildContext context) { return OutlinedCard( - child: Column(crossAxisAlignment: CrossAxisAlignment.start, children: [ - Row( - children: [ - Expanded( - child: Image.asset(image, fit: BoxFit.cover), - ), - ], - ), - Column( - mainAxisAlignment: MainAxisAlignment.center, - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - Padding( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + children: [Expanded(child: Image.asset(image, fit: BoxFit.cover))], + ), + Column( + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Padding( padding: const EdgeInsets.fromLTRB(10, 5, 10, 5), child: Text( title, @@ -43,20 +41,25 @@ class ImageTile extends StatelessWidget { ), overflow: TextOverflow.ellipsis, maxLines: 1, - )), - Padding( - padding: const EdgeInsets.symmetric(vertical: 5, horizontal: 10), - child: Text( - subtitle, - overflow: TextOverflow.ellipsis, - style: context.labelSmall, - maxLines: 2, - textAlign: TextAlign.center, + ), ), - ), - ], - ) - ]), + Padding( + padding: const EdgeInsets.symmetric( + vertical: 5, + horizontal: 10, + ), + child: Text( + subtitle, + overflow: TextOverflow.ellipsis, + style: context.labelSmall, + maxLines: 2, + textAlign: TextAlign.center, + ), + ), + ], + ), + ], + ), ); } } diff --git a/boring_to_beautiful/step_02/lib/src/shared/views/outlined_card.dart b/boring_to_beautiful/step_02/lib/src/shared/views/outlined_card.dart index 61af3a0d64..a208659904 100644 --- a/boring_to_beautiful/step_02/lib/src/shared/views/outlined_card.dart +++ b/boring_to_beautiful/step_02/lib/src/shared/views/outlined_card.dart @@ -5,11 +5,7 @@ import 'package:flutter/material.dart'; class OutlinedCard extends StatefulWidget { - const OutlinedCard({ - super.key, - required this.child, - this.clickable = true, - }); + const OutlinedCard({super.key, required this.child, this.clickable = true}); final Widget child; final bool clickable; @@ -22,9 +18,10 @@ class _OutlinedCardState extends State { @override Widget build(BuildContext context) { return MouseRegion( - cursor: widget.clickable - ? SystemMouseCursors.click - : SystemMouseCursors.basic, + cursor: + widget.clickable + ? SystemMouseCursors.click + : SystemMouseCursors.basic, child: Container( // Add box decoration here child: widget.child, diff --git a/boring_to_beautiful/step_02/lib/src/shared/views/play_pause_listener.dart b/boring_to_beautiful/step_02/lib/src/shared/views/play_pause_listener.dart index 52fad00863..6b4fc66709 100644 --- a/boring_to_beautiful/step_02/lib/src/shared/views/play_pause_listener.dart +++ b/boring_to_beautiful/step_02/lib/src/shared/views/play_pause_listener.dart @@ -16,10 +16,7 @@ import '../playback/bloc/bloc.dart'; /// shortcuts. By sitting below that machinery, this installs a global Spacebar /// listener which toggles Playback, as is customary in music-playing apps. class PlayPauseListener extends StatelessWidget { - const PlayPauseListener({ - super.key, - required this.child, - }); + const PlayPauseListener({super.key, required this.child}); final Widget child; @@ -28,9 +25,7 @@ class PlayPauseListener extends StatelessWidget { // Immediately catch any [_PlayPauseIntent] events released by the inner // [Shortcuts] widget. return Actions( - actions: >{ - _PlayPauseIntent: _PlayPauseAction(), - }, + actions: >{_PlayPauseIntent: _PlayPauseAction()}, child: Shortcuts( // Register a shortcut for Spacebar presses that release a // [_PlayPauseIntent] up the tree to the nearest [Actions] widget. @@ -38,9 +33,9 @@ class PlayPauseListener extends StatelessWidget { const SingleActivator(LogicalKeyboardKey.space): _PlayPauseIntent( // Create a closure which sends a [TogglePlayPause] event to the // [PlaybackBloc]. - () => BlocProvider.of(context).add( - const PlaybackEvent.togglePlayPause(), - ), + () => BlocProvider.of( + context, + ).add(const PlaybackEvent.togglePlayPause()), ), }, child: child, diff --git a/boring_to_beautiful/step_02/lib/src/shared/views/root_layout.dart b/boring_to_beautiful/step_02/lib/src/shared/views/root_layout.dart index 878b57d729..ff6270248c 100644 --- a/boring_to_beautiful/step_02/lib/src/shared/views/root_layout.dart +++ b/boring_to_beautiful/step_02/lib/src/shared/views/root_layout.dart @@ -29,36 +29,37 @@ class RootLayout extends StatelessWidget { final bloc = BlocProvider.of(context); return BlocBuilder( bloc: bloc, - builder: (context, state) => LayoutBuilder(builder: (context, dimens) { - void onSelected(int index) { - final destination = router.destinations[index]; - go.GoRouter.of(context).go(destination.route); - } + builder: + (context, state) => LayoutBuilder( + builder: (context, dimens) { + void onSelected(int index) { + final destination = router.destinations[index]; + go.GoRouter.of(context).go(destination.route); + } - final current = state.songWithProgress; - return AdaptiveNavigation( - key: _navigationRailKey, - destinations: router.destinations - .map((e) => NavigationDestination( - icon: e.icon, - label: e.label, - )) - .toList(), - selectedIndex: currentIndex, - onDestinationSelected: onSelected, - child: Column( - children: [ - Expanded( - child: _Switcher( - key: _switcherKey, - child: child, + final current = state.songWithProgress; + return AdaptiveNavigation( + key: _navigationRailKey, + destinations: + router.destinations + .map( + (e) => NavigationDestination( + icon: e.icon, + label: e.label, + ), + ) + .toList(), + selectedIndex: currentIndex, + onDestinationSelected: onSelected, + child: Column( + children: [ + Expanded(child: _Switcher(key: _switcherKey, child: child)), + if (current != null) const BottomBar(), + ], ), - ), - if (current != null) const BottomBar(), - ], + ); + }, ), - ); - }), ); } } @@ -66,21 +67,18 @@ class RootLayout extends StatelessWidget { class _Switcher extends StatelessWidget { final Widget child; - const _Switcher({ - required this.child, - super.key, - }); + const _Switcher({required this.child, super.key}); @override Widget build(BuildContext context) { return UniversalPlatform.isDesktop ? child : AnimatedSwitcher( - key: key, - duration: const Duration(milliseconds: 200), - switchInCurve: Curves.easeInOut, - switchOutCurve: Curves.easeInOut, - child: child, - ); + key: key, + duration: const Duration(milliseconds: 200), + switchInCurve: Curves.easeInOut, + switchOutCurve: Curves.easeInOut, + child: child, + ); } } diff --git a/boring_to_beautiful/step_02/lib/src/shared/views/sidebar.dart b/boring_to_beautiful/step_02/lib/src/shared/views/sidebar.dart index 78c19b4d22..8815223b22 100644 --- a/boring_to_beautiful/step_02/lib/src/shared/views/sidebar.dart +++ b/boring_to_beautiful/step_02/lib/src/shared/views/sidebar.dart @@ -26,10 +26,7 @@ class SideBar extends StatelessWidget { title: const Text('Home'), onTap: () => GoRouter.of(context).go('/'), ), - const ListTile( - leading: Icon(Icons.search), - title: Text('Search'), - ), + const ListTile(leading: Icon(Icons.search), title: Text('Search')), ListTile( leading: const Icon(Icons.person), title: const Text('Artists'), @@ -64,10 +61,7 @@ class PlaylistNav extends StatelessWidget { children: [ Padding( padding: const EdgeInsets.only(left: 16, top: 16), - child: Text( - 'Playlists', - style: context.titleMedium, - ), + child: Text('Playlists', style: context.titleMedium), ), Expanded( child: ListView( @@ -114,10 +108,9 @@ class _PlaylistNavItemState extends State<_PlaylistNavItem> { @override void initState() { super.initState(); - _focusNode = FocusNode(debugLabel: widget.title) - ..addListener(() { - setState(() => _isSelected = _focusNode.hasPrimaryFocus); - }); + _focusNode = FocusNode(debugLabel: widget.title)..addListener(() { + setState(() => _isSelected = _focusNode.hasPrimaryFocus); + }); } @override diff --git a/boring_to_beautiful/step_02/pubspec.yaml b/boring_to_beautiful/step_02/pubspec.yaml index e6b25dc809..4bb4b3b74a 100644 --- a/boring_to_beautiful/step_02/pubspec.yaml +++ b/boring_to_beautiful/step_02/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: "none" version: 1.0.0 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 dependencies: flutter: diff --git a/boring_to_beautiful/step_03/lib/src/features/artists/view/artist_bio.dart b/boring_to_beautiful/step_03/lib/src/features/artists/view/artist_bio.dart index 227b8e91f9..8b614421db 100644 --- a/boring_to_beautiful/step_03/lib/src/features/artists/view/artist_bio.dart +++ b/boring_to_beautiful/step_03/lib/src/features/artists/view/artist_bio.dart @@ -18,9 +18,7 @@ class ArtistBio extends StatelessWidget { artist.bio, style: context.bodyLarge!.copyWith( fontSize: 16, - color: context.colors.onSurface.withAlpha( - 222, - ), + color: context.colors.onSurface.withAlpha(222), ), ); } diff --git a/boring_to_beautiful/step_03/lib/src/features/artists/view/artist_card.dart b/boring_to_beautiful/step_03/lib/src/features/artists/view/artist_card.dart index a63967f51d..1a56376a87 100644 --- a/boring_to_beautiful/step_03/lib/src/features/artists/view/artist_card.dart +++ b/boring_to_beautiful/step_03/lib/src/features/artists/view/artist_card.dart @@ -11,10 +11,7 @@ import '../../../shared/views/outlined_card.dart'; import '../../../shared/views/views.dart'; class ArtistCard extends StatelessWidget { - const ArtistCard({ - super.key, - required this.artist, - }); + const ArtistCard({super.key, required this.artist}); final Artist artist; @@ -24,65 +21,66 @@ class ArtistCard extends StatelessWidget { return OutlinedCard( child: LayoutBuilder( - builder: (context, dimens) => Row( - children: [ - SizedBox( - width: dimens.maxWidth * 0.4, - child: Image.asset( - artist.image.image, - fit: BoxFit.cover, - ), - ), - Expanded( - child: Padding( - padding: const EdgeInsets.only(left: 16), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Padding( - padding: const EdgeInsets.fromLTRB(0, 0, 15, 0), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text( - artist.name, - style: context.titleMedium, - overflow: TextOverflow.ellipsis, - maxLines: 1, - ), - const SizedBox(height: 10), - Text( - artist.bio, - overflow: TextOverflow.ellipsis, - style: context.labelSmall, - maxLines: 3, - ), - ]), - ), - if (dimens.maxHeight > 100) - Row( - children: [ - HoverableSongPlayButton( - size: const Size(50, 50), - song: nowPlaying, - child: Icon(Icons.play_circle, - color: context.colors.tertiary), + builder: + (context, dimens) => Row( + children: [ + SizedBox( + width: dimens.maxWidth * 0.4, + child: Image.asset(artist.image.image, fit: BoxFit.cover), + ), + Expanded( + child: Padding( + padding: const EdgeInsets.only(left: 16), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Padding( + padding: const EdgeInsets.fromLTRB(0, 0, 15, 0), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + artist.name, + style: context.titleMedium, + overflow: TextOverflow.ellipsis, + maxLines: 1, + ), + const SizedBox(height: 10), + Text( + artist.bio, + overflow: TextOverflow.ellipsis, + style: context.labelSmall, + maxLines: 3, + ), + ], ), - Text( - nowPlaying.title, - maxLines: 1, - overflow: TextOverflow.clip, - style: context.labelMedium, + ), + if (dimens.maxHeight > 100) + Row( + children: [ + HoverableSongPlayButton( + size: const Size(50, 50), + song: nowPlaying, + child: Icon( + Icons.play_circle, + color: context.colors.tertiary, + ), + ), + Text( + nowPlaying.title, + maxLines: 1, + overflow: TextOverflow.clip, + style: context.labelMedium, + ), + ], ), - ], - ), - ], + ], + ), + ), ), - ), + ], ), - ], - ), ), ); } diff --git a/boring_to_beautiful/step_03/lib/src/features/artists/view/artist_events.dart b/boring_to_beautiful/step_03/lib/src/features/artists/view/artist_events.dart index 8b064759c6..58b61b37df 100644 --- a/boring_to_beautiful/step_03/lib/src/features/artists/view/artist_events.dart +++ b/boring_to_beautiful/step_03/lib/src/features/artists/view/artist_events.dart @@ -70,53 +70,32 @@ class ArtistEvents extends StatelessWidget { ); }, columns: const [ - DataColumn( - label: Text( - 'Date', - ), - numeric: true, - ), - DataColumn( - label: Text( - 'Event', - ), - ), - DataColumn( - label: Text( - 'Location', - ), - ), - DataColumn( - label: Text( - 'More info', - ), - ), + DataColumn(label: Text('Date'), numeric: true), + DataColumn(label: Text('Event')), + DataColumn(label: Text('Location')), + DataColumn(label: Text('More info')), ], - rowBuilder: (item, index) => DataRow.byIndex(index: index, cells: [ - DataCell( - Text(item.date), - ), - DataCell( - Row(children: [ - Expanded(child: Text(item.title)), - ]), - ), - DataCell( - Text(item.location), - ), - DataCell( - Clickable( - child: Text( - item.link, - style: TextStyle( - color: linkColor.value(theme), - decoration: TextDecoration.underline, + rowBuilder: + (item, index) => DataRow.byIndex( + index: index, + cells: [ + DataCell(Text(item.date)), + DataCell(Row(children: [Expanded(child: Text(item.title))])), + DataCell(Text(item.location)), + DataCell( + Clickable( + child: Text( + item.link, + style: TextStyle( + color: linkColor.value(theme), + decoration: TextDecoration.underline, + ), + ), + onTap: () => launchUrl(Uri.parse('https://docs.flutter.dev')), + ), ), - ), - onTap: () => launchUrl(Uri.parse('https://docs.flutter.dev')), + ], ), - ), - ]), ); } } diff --git a/boring_to_beautiful/step_03/lib/src/features/artists/view/artist_ranked_songs.dart b/boring_to_beautiful/step_03/lib/src/features/artists/view/artist_ranked_songs.dart index e484ecb3d7..3d1f4e2cf1 100644 --- a/boring_to_beautiful/step_03/lib/src/features/artists/view/artist_ranked_songs.dart +++ b/boring_to_beautiful/step_03/lib/src/features/artists/view/artist_ranked_songs.dart @@ -27,52 +27,42 @@ class ArtistRankedSongs extends StatelessWidget { title: Text(song.title), subtitle: Text(song.length.toHumanizedString()), trailing: Text(song.ranking.toString()), - onTap: () => BlocProvider.of(context).add( - PlaybackEvent.changeSong(song), - ), + onTap: + () => BlocProvider.of( + context, + ).add(PlaybackEvent.changeSong(song)), ); }, columns: const [ - DataColumn( - label: Text( - 'Ranking', - ), - numeric: true, - ), - DataColumn( - label: Text( - 'Title', - ), - ), - DataColumn( - label: Text( - 'Length', - ), - ), + DataColumn(label: Text('Ranking'), numeric: true), + DataColumn(label: Text('Title')), + DataColumn(label: Text('Length')), ], - rowBuilder: (song, index) => DataRow.byIndex(index: index, cells: [ - DataCell( - HoverableSongPlayButton( - song: song, - child: Center( - child: Text(song.ranking.toString()), - ), + rowBuilder: + (song, index) => DataRow.byIndex( + index: index, + cells: [ + DataCell( + HoverableSongPlayButton( + song: song, + child: Center(child: Text(song.ranking.toString())), + ), + ), + DataCell( + Row( + children: [ + Padding( + padding: const EdgeInsets.all(2), + child: ClippedImage(song.image.image), + ), + const SizedBox(width: 5.0), + Expanded(child: Text(song.title)), + ], + ), + ), + DataCell(Text(song.length.toHumanizedString())), + ], ), - ), - DataCell( - Row(children: [ - Padding( - padding: const EdgeInsets.all(2), - child: ClippedImage(song.image.image), - ), - const SizedBox(width: 5.0), - Expanded(child: Text(song.title)), - ]), - ), - DataCell( - Text(song.length.toHumanizedString()), - ), - ]), ); } } diff --git a/boring_to_beautiful/step_03/lib/src/features/artists/view/artist_updates.dart b/boring_to_beautiful/step_03/lib/src/features/artists/view/artist_updates.dart index e5b8bb5fe9..a0fabf7330 100644 --- a/boring_to_beautiful/step_03/lib/src/features/artists/view/artist_updates.dart +++ b/boring_to_beautiful/step_03/lib/src/features/artists/view/artist_updates.dart @@ -30,7 +30,7 @@ class ArtistUpdates extends StatelessWidget { child: Text(update), ), ), - ) + ), ], ); } diff --git a/boring_to_beautiful/step_03/lib/src/features/artists/view/artists_screen.dart b/boring_to_beautiful/step_03/lib/src/features/artists/view/artists_screen.dart index 8afe759807..225d74847b 100644 --- a/boring_to_beautiful/step_03/lib/src/features/artists/view/artists_screen.dart +++ b/boring_to_beautiful/step_03/lib/src/features/artists/view/artists_screen.dart @@ -17,33 +17,33 @@ class ArtistsScreen extends StatelessWidget { Widget build(BuildContext context) { final artistsProvider = ArtistsProvider(); final artists = artistsProvider.artists; - return LayoutBuilder(builder: (context, constraints) { - return Scaffold( - primary: false, - appBar: AppBar( - title: const Text('ARTISTS'), - toolbarHeight: kToolbarHeight * 2, - ), - body: GridView.builder( - padding: const EdgeInsets.all(15), - gridDelegate: SliverGridDelegateWithFixedCrossAxisCount( - crossAxisCount: max(1, (constraints.maxWidth ~/ 400).toInt()), - childAspectRatio: 2.5, - mainAxisSpacing: 10, - crossAxisSpacing: 10, + return LayoutBuilder( + builder: (context, constraints) { + return Scaffold( + primary: false, + appBar: AppBar( + title: const Text('ARTISTS'), + toolbarHeight: kToolbarHeight * 2, ), - itemCount: artists.length, - itemBuilder: (context, index) { - final artist = artists[index]; - return GestureDetector( - child: ArtistCard( - artist: artist, - ), - onTap: () => GoRouter.of(context).go('/artists/${artist.id}'), - ); - }, - ), - ); - }); + body: GridView.builder( + padding: const EdgeInsets.all(15), + gridDelegate: SliverGridDelegateWithFixedCrossAxisCount( + crossAxisCount: max(1, (constraints.maxWidth ~/ 400).toInt()), + childAspectRatio: 2.5, + mainAxisSpacing: 10, + crossAxisSpacing: 10, + ), + itemCount: artists.length, + itemBuilder: (context, index) { + final artist = artists[index]; + return GestureDetector( + child: ArtistCard(artist: artist), + onTap: () => GoRouter.of(context).go('/artists/${artist.id}'), + ); + }, + ), + ); + }, + ); } } diff --git a/boring_to_beautiful/step_03/lib/src/features/home/view/home_artists.dart b/boring_to_beautiful/step_03/lib/src/features/home/view/home_artists.dart index beb2c0ece4..b5a3a33ecd 100644 --- a/boring_to_beautiful/step_03/lib/src/features/home/view/home_artists.dart +++ b/boring_to_beautiful/step_03/lib/src/features/home/view/home_artists.dart @@ -22,27 +22,25 @@ class HomeArtists extends StatelessWidget { Widget build(BuildContext context) { return Padding( padding: const EdgeInsets.all(15), - child: constraints.isMobile - ? Column( - children: [ - for (final artist in artists) buildTile(context, artist), - ], - ) - : Row(children: [ - for (final artist in artists) - Flexible( - flex: 1, - child: buildTile(context, artist), - ), - ]), + child: + constraints.isMobile + ? Column( + children: [ + for (final artist in artists) buildTile(context, artist), + ], + ) + : Row( + children: [ + for (final artist in artists) + Flexible(flex: 1, child: buildTile(context, artist)), + ], + ), ); } Widget buildTile(BuildContext context, Artist artist) { return ListTile( - leading: CircleAvatar( - backgroundImage: AssetImage(artist.image.image), - ), + leading: CircleAvatar(backgroundImage: AssetImage(artist.image.image)), title: Text( artist.updates.first, maxLines: 2, diff --git a/boring_to_beautiful/step_03/lib/src/features/home/view/home_recent.dart b/boring_to_beautiful/step_03/lib/src/features/home/view/home_recent.dart index c77500a663..8ba86d117d 100644 --- a/boring_to_beautiful/step_03/lib/src/features/home/view/home_recent.dart +++ b/boring_to_beautiful/step_03/lib/src/features/home/view/home_recent.dart @@ -12,8 +12,11 @@ import '../../../shared/views/image_clipper.dart'; import '../../../shared/views/outlined_card.dart'; class HomeRecent extends StatelessWidget { - const HomeRecent( - {super.key, required this.playlists, this.axis = Axis.horizontal}); + const HomeRecent({ + super.key, + required this.playlists, + this.axis = Axis.horizontal, + }); final List playlists; final Axis axis; @@ -43,8 +46,10 @@ class HomeRecent extends StatelessWidget { Row( children: [ Expanded( - child: Image.asset(playlist.cover.image, - fit: BoxFit.cover), + child: Image.asset( + playlist.cover.image, + fit: BoxFit.cover, + ), ), ], ), @@ -79,10 +84,7 @@ class HomeRecent extends StatelessWidget { crossAxisAlignment: CrossAxisAlignment.center, mainAxisSize: MainAxisSize.max, children: [ - ClippedImage( - playlist.cover.image, - height: 200, - ), + ClippedImage(playlist.cover.image, height: 200), Expanded( child: Center( child: Padding( @@ -104,23 +106,24 @@ class HomeRecent extends StatelessWidget { return Column( children: [ Padding( - padding: const EdgeInsets.fromLTRB(10, 5, 10, 5), - child: Text( - playlist.title, - style: context.titleSmall!.copyWith( - fontWeight: FontWeight.bold, - ), - overflow: TextOverflow.ellipsis, - maxLines: 1, - textAlign: TextAlign.center, - )), + padding: const EdgeInsets.fromLTRB(10, 5, 10, 5), + child: Text( + playlist.title, + style: context.titleSmall!.copyWith(fontWeight: FontWeight.bold), + overflow: TextOverflow.ellipsis, + maxLines: 1, + textAlign: TextAlign.center, + ), + ), Padding( padding: const EdgeInsets.symmetric(vertical: 5, horizontal: 10), - child: Text(playlist.description, - overflow: TextOverflow.ellipsis, - style: context.labelSmall, - maxLines: 2, - textAlign: TextAlign.center), + child: Text( + playlist.description, + overflow: TextOverflow.ellipsis, + style: context.labelSmall, + maxLines: 2, + textAlign: TextAlign.center, + ), ), ], ); diff --git a/boring_to_beautiful/step_03/lib/src/features/home/view/home_screen.dart b/boring_to_beautiful/step_03/lib/src/features/home/view/home_screen.dart index 715ddf435c..bcff070874 100644 --- a/boring_to_beautiful/step_03/lib/src/features/home/view/home_screen.dart +++ b/boring_to_beautiful/step_03/lib/src/features/home/view/home_screen.dart @@ -61,10 +61,11 @@ class _HomeScreenState extends State { children: [ const HomeHighlight(), LayoutBuilder( - builder: (context, constraints) => HomeArtists( - artists: artists, - constraints: constraints, - ), + builder: + (context, constraints) => HomeArtists( + artists: artists, + constraints: constraints, + ), ), ], ), @@ -81,9 +82,7 @@ class _HomeScreenState extends State { style: context.headlineSmall, ), ), - HomeRecent( - playlists: playlists, - ), + HomeRecent(playlists: playlists), ], ), ), @@ -101,19 +100,20 @@ class _HomeScreenState extends State { crossAxisAlignment: CrossAxisAlignment.start, children: [ Padding( - padding: - const EdgeInsets.all(2), // Modify this line + padding: const EdgeInsets.all( + 2, + ), // Modify this line child: Text( 'Top Songs Today', style: context.titleLarge, ), ), LayoutBuilder( - builder: (context, constraints) => - PlaylistSongs( - playlist: topSongs, - constraints: constraints, - ), + builder: + (context, constraints) => PlaylistSongs( + playlist: topSongs, + constraints: constraints, + ), ), ], ), @@ -126,19 +126,20 @@ class _HomeScreenState extends State { crossAxisAlignment: CrossAxisAlignment.start, children: [ Padding( - padding: - const EdgeInsets.all(2), // Modify this line + padding: const EdgeInsets.all( + 2, + ), // Modify this line child: Text( 'New Releases', style: context.titleLarge, ), ), LayoutBuilder( - builder: (context, constraints) => - PlaylistSongs( - playlist: newReleases, - constraints: constraints, - ), + builder: + (context, constraints) => PlaylistSongs( + playlist: newReleases, + constraints: constraints, + ), ), ], ), diff --git a/boring_to_beautiful/step_03/lib/src/features/playlists/view/playlist_home_screen.dart b/boring_to_beautiful/step_03/lib/src/features/playlists/view/playlist_home_screen.dart index a80d767930..978608ccad 100644 --- a/boring_to_beautiful/step_03/lib/src/features/playlists/view/playlist_home_screen.dart +++ b/boring_to_beautiful/step_03/lib/src/features/playlists/view/playlist_home_screen.dart @@ -44,8 +44,10 @@ class PlaylistHomeScreen extends StatelessWidget { title: playlist.title, subtitle: playlist.description, ), - onTap: () => - GoRouter.of(context).go('/playlists/${playlist.id}'), + onTap: + () => GoRouter.of( + context, + ).go('/playlists/${playlist.id}'), ); }, ), diff --git a/boring_to_beautiful/step_03/lib/src/features/playlists/view/playlist_screen.dart b/boring_to_beautiful/step_03/lib/src/features/playlists/view/playlist_screen.dart index 5dc2f0744f..c41f500a92 100644 --- a/boring_to_beautiful/step_03/lib/src/features/playlists/view/playlist_screen.dart +++ b/boring_to_beautiful/step_03/lib/src/features/playlists/view/playlist_screen.dart @@ -20,114 +20,116 @@ class PlaylistScreen extends StatelessWidget { @override Widget build(BuildContext context) { - return LayoutBuilder(builder: (context, constraints) { - final colors = Theme.of(context).colorScheme; - final double headerHeight = constraints.isMobile - ? max(constraints.biggest.height * 0.5, 450) - : max(constraints.biggest.height * 0.25, 250); - if (constraints.isMobile) { - return Scaffold( - appBar: AppBar( - leading: BackButton( - onPressed: () => GoRouter.of(context).go('/playlists'), - ), - title: Text(playlist.title), - actions: [ - IconButton( - icon: const Icon(Icons.play_circle_fill), - onPressed: () {}, - ), - IconButton( - onPressed: () {}, - icon: const Icon(Icons.shuffle), - ), - ], - ), - body: ArticleContent( - child: PlaylistSongs( - playlist: playlist, - constraints: constraints, - ), - ), - ); - } - return Scaffold( - body: CustomScrollView( - slivers: [ - SliverAppBar( + return LayoutBuilder( + builder: (context, constraints) { + final colors = Theme.of(context).colorScheme; + final double headerHeight = + constraints.isMobile + ? max(constraints.biggest.height * 0.5, 450) + : max(constraints.biggest.height * 0.25, 250); + if (constraints.isMobile) { + return Scaffold( + appBar: AppBar( leading: BackButton( onPressed: () => GoRouter.of(context).go('/playlists'), ), - expandedHeight: headerHeight, - pinned: false, - flexibleSpace: FlexibleSpaceBar( - background: AdaptiveImageCard( - axis: constraints.isMobile ? Axis.vertical : Axis.horizontal, - constraints: - constraints.copyWith(maxHeight: headerHeight).normalize(), - image: playlist.cover.image, - child: Column( - mainAxisAlignment: MainAxisAlignment.end, - crossAxisAlignment: CrossAxisAlignment.start, - mainAxisSize: MainAxisSize.min, - children: [ - Text( - 'PLAYLIST', - style: context.titleSmall! - .copyWith(color: colors.onSurface), - ), - Text( - playlist.title, - style: context.displaySmall! - .copyWith(color: colors.onSurface), - ), - Text( - playlist.description, - style: context.bodyLarge!.copyWith( - color: colors.onSurface.withAlpha(204), + title: Text(playlist.title), + actions: [ + IconButton( + icon: const Icon(Icons.play_circle_fill), + onPressed: () {}, + ), + IconButton(onPressed: () {}, icon: const Icon(Icons.shuffle)), + ], + ), + body: ArticleContent( + child: PlaylistSongs( + playlist: playlist, + constraints: constraints, + ), + ), + ); + } + return Scaffold( + body: CustomScrollView( + slivers: [ + SliverAppBar( + leading: BackButton( + onPressed: () => GoRouter.of(context).go('/playlists'), + ), + expandedHeight: headerHeight, + pinned: false, + flexibleSpace: FlexibleSpaceBar( + background: AdaptiveImageCard( + axis: + constraints.isMobile ? Axis.vertical : Axis.horizontal, + constraints: + constraints + .copyWith(maxHeight: headerHeight) + .normalize(), + image: playlist.cover.image, + child: Column( + mainAxisAlignment: MainAxisAlignment.end, + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisSize: MainAxisSize.min, + children: [ + Text( + 'PLAYLIST', + style: context.titleSmall!.copyWith( + color: colors.onSurface, + ), ), - ), - const SizedBox(height: 8), - Row( - children: [ - IconButton( - icon: Icon( - Icons.play_circle_fill, - color: colors.tertiary, - ), - onPressed: () {}, + Text( + playlist.title, + style: context.displaySmall!.copyWith( + color: colors.onSurface, ), - TextButton.icon( - onPressed: () {}, - icon: Icon( - Icons.shuffle, - color: colors.tertiary, - ), - label: Text( - 'Shuffle', - style: context.bodySmall!.copyWith( + ), + Text( + playlist.description, + style: context.bodyLarge!.copyWith( + color: colors.onSurface.withAlpha(204), + ), + ), + const SizedBox(height: 8), + Row( + children: [ + IconButton( + icon: Icon( + Icons.play_circle_fill, color: colors.tertiary, ), + onPressed: () {}, ), - ), - ], - ), - ], + TextButton.icon( + onPressed: () {}, + icon: Icon(Icons.shuffle, color: colors.tertiary), + label: Text( + 'Shuffle', + style: context.bodySmall!.copyWith( + color: colors.tertiary, + ), + ), + ), + ], + ), + ], + ), ), ), ), - ), - SliverToBoxAdapter( - child: ArticleContent( - child: PlaylistSongs( - playlist: playlist, - constraints: constraints, + SliverToBoxAdapter( + child: ArticleContent( + child: PlaylistSongs( + playlist: playlist, + constraints: constraints, + ), ), ), - ), - ], - ), - ); - }); + ], + ), + ); + }, + ); } } diff --git a/boring_to_beautiful/step_03/lib/src/features/playlists/view/playlist_songs.dart b/boring_to_beautiful/step_03/lib/src/features/playlists/view/playlist_songs.dart index e944336540..1d5a2e9879 100644 --- a/boring_to_beautiful/step_03/lib/src/features/playlists/view/playlist_songs.dart +++ b/boring_to_beautiful/step_03/lib/src/features/playlists/view/playlist_songs.dart @@ -12,8 +12,11 @@ import '../../../shared/views/image_clipper.dart'; import '../../../shared/views/views.dart'; class PlaylistSongs extends StatelessWidget { - const PlaylistSongs( - {super.key, required this.playlist, required this.constraints}); + const PlaylistSongs({ + super.key, + required this.playlist, + required this.constraints, + }); final Playlist playlist; final BoxConstraints constraints; @@ -25,14 +28,9 @@ class PlaylistSongs extends StatelessWidget { breakpoint: 450, columns: const [ DataColumn( - label: Padding( - padding: EdgeInsets.only(left: 20), - child: Text('#'), - ), - ), - DataColumn( - label: Text('Title'), + label: Padding(padding: EdgeInsets.only(left: 20), child: Text('#')), ), + DataColumn(label: Text('Title')), DataColumn( label: Padding( padding: EdgeInsets.only(right: 10), @@ -40,38 +38,40 @@ class PlaylistSongs extends StatelessWidget { ), ), ], - rowBuilder: (context, index) => DataRow.byIndex( - index: index, - cells: [ - DataCell( - // Add HoverableSongPlayButton - Center( - child: Text( - (index + 1).toString(), - textAlign: TextAlign.center, + rowBuilder: + (context, index) => DataRow.byIndex( + index: index, + cells: [ + DataCell( + // Add HoverableSongPlayButton + Center( + child: Text( + (index + 1).toString(), + textAlign: TextAlign.center, + ), + ), ), - ), - ), - DataCell( - Row(children: [ - Padding( - padding: const EdgeInsets.all(2), - child: ClippedImage(playlist.songs[index].image.image), + DataCell( + Row( + children: [ + Padding( + padding: const EdgeInsets.all(2), + child: ClippedImage(playlist.songs[index].image.image), + ), + const SizedBox(width: 10), + Expanded(child: Text(playlist.songs[index].title)), + ], + ), ), - const SizedBox(width: 10), - Expanded(child: Text(playlist.songs[index].title)), - ]), - ), - DataCell( - Text(playlist.songs[index].length.toHumanizedString()), + DataCell(Text(playlist.songs[index].length.toHumanizedString())), + ], ), - ], - ), itemBuilder: (song, index) { return ListTile( - onTap: () => BlocProvider.of(context).add( - PlaybackEvent.changeSong(song), - ), + onTap: + () => BlocProvider.of( + context, + ).add(PlaybackEvent.changeSong(song)), leading: ClippedImage(song.image.image), title: Text(song.title), subtitle: Text(song.length.toHumanizedString()), diff --git a/boring_to_beautiful/step_03/lib/src/shared/app.dart b/boring_to_beautiful/step_03/lib/src/shared/app.dart index eced12177d..771a2be1ad 100644 --- a/boring_to_beautiful/step_03/lib/src/shared/app.dart +++ b/boring_to_beautiful/step_03/lib/src/shared/app.dart @@ -19,45 +19,49 @@ class MyApp extends StatefulWidget { } class _MyAppState extends State { - final settings = ValueNotifier(ThemeSettings( - sourceColor: Colors.pink, // Replace this color - themeMode: ThemeMode.system, - )); + final settings = ValueNotifier( + ThemeSettings( + sourceColor: Colors.pink, // Replace this color + themeMode: ThemeMode.system, + ), + ); @override Widget build(BuildContext context) { return BlocProvider( create: (context) => PlaybackBloc(), child: DynamicColorBuilder( - builder: (lightDynamic, darkDynamic) => ThemeProvider( - lightDynamic: lightDynamic, - darkDynamic: darkDynamic, - settings: settings, - child: NotificationListener( - onNotification: (notification) { - settings.value = notification.settings; - return true; - }, - child: ValueListenableBuilder( - valueListenable: settings, - builder: (context, value, _) { - // Create theme instance - return MaterialApp.router( - debugShowCheckedModeBanner: false, - title: 'Flutter Demo', - // Add theme - // Add dark theme - // Add theme mode - routeInformationParser: appRouter.routeInformationParser, - routeInformationProvider: - appRouter.routeInformationProvider, - routerDelegate: appRouter.routerDelegate, - builder: (context, child) { - return PlayPauseListener(child: child!); - }, - ); + builder: + (lightDynamic, darkDynamic) => ThemeProvider( + lightDynamic: lightDynamic, + darkDynamic: darkDynamic, + settings: settings, + child: NotificationListener( + onNotification: (notification) { + settings.value = notification.settings; + return true; }, + child: ValueListenableBuilder( + valueListenable: settings, + builder: (context, value, _) { + // Create theme instance + return MaterialApp.router( + debugShowCheckedModeBanner: false, + title: 'Flutter Demo', + // Add theme + // Add dark theme + // Add theme mode + routeInformationParser: appRouter.routeInformationParser, + routeInformationProvider: + appRouter.routeInformationProvider, + routerDelegate: appRouter.routerDelegate, + builder: (context, child) { + return PlayPauseListener(child: child!); + }, + ); + }, + ), ), - )), + ), ), ); } diff --git a/boring_to_beautiful/step_03/lib/src/shared/classes/image.dart b/boring_to_beautiful/step_03/lib/src/shared/classes/image.dart index a1ef427c1d..00a6472b4a 100644 --- a/boring_to_beautiful/step_03/lib/src/shared/classes/image.dart +++ b/boring_to_beautiful/step_03/lib/src/shared/classes/image.dart @@ -3,10 +3,11 @@ // found in the LICENSE file. class MyArtistImage { - const MyArtistImage( - {required this.image, - required this.sourceName, - required this.sourceLink}); + const MyArtistImage({ + required this.image, + required this.sourceName, + required this.sourceLink, + }); final String image; final String sourceName; diff --git a/boring_to_beautiful/step_03/lib/src/shared/classes/playlist.dart b/boring_to_beautiful/step_03/lib/src/shared/classes/playlist.dart index 59899dc619..5f0225059d 100644 --- a/boring_to_beautiful/step_03/lib/src/shared/classes/playlist.dart +++ b/boring_to_beautiful/step_03/lib/src/shared/classes/playlist.dart @@ -17,8 +17,9 @@ class Playlist { this.description = '', required this.songs, this.cover = const MyArtistImage( - image: 'assets/images/record.jpeg', - sourceName: 'Adobe Stock Images', - sourceLink: ''), + image: 'assets/images/record.jpeg', + sourceName: 'Adobe Stock Images', + sourceLink: '', + ), }); } diff --git a/boring_to_beautiful/step_03/lib/src/shared/classes/ranked_song.dart b/boring_to_beautiful/step_03/lib/src/shared/classes/ranked_song.dart index 5908268c8c..2362bfae64 100644 --- a/boring_to_beautiful/step_03/lib/src/shared/classes/ranked_song.dart +++ b/boring_to_beautiful/step_03/lib/src/shared/classes/ranked_song.dart @@ -7,7 +7,11 @@ import './classes.dart'; class RankedSong extends Song { final int ranking; - const RankedSong(this.ranking, String title, Artist artist, Duration length, - MyArtistImage image) - : super(title, artist, length, image); + const RankedSong( + this.ranking, + String title, + Artist artist, + Duration length, + MyArtistImage image, + ) : super(title, artist, length, image); } diff --git a/boring_to_beautiful/step_03/lib/src/shared/extensions.dart b/boring_to_beautiful/step_03/lib/src/shared/extensions.dart index 8b7e41b988..fe65add57c 100644 --- a/boring_to_beautiful/step_03/lib/src/shared/extensions.dart +++ b/boring_to_beautiful/step_03/lib/src/shared/extensions.dart @@ -9,51 +9,36 @@ extension TypographyUtils on BuildContext { ThemeData get theme => Theme.of(this); TextTheme get textTheme => GoogleFonts.montserratTextTheme(theme.textTheme); ColorScheme get colors => theme.colorScheme; - TextStyle? get displayLarge => textTheme.displayLarge?.copyWith( - color: colors.onSurface, - ); - TextStyle? get displayMedium => textTheme.displayMedium?.copyWith( - color: colors.onSurface, - ); - TextStyle? get displaySmall => textTheme.displaySmall?.copyWith( - color: colors.onSurface, - ); - TextStyle? get headlineLarge => textTheme.headlineLarge?.copyWith( - color: colors.onSurface, - ); - TextStyle? get headlineMedium => textTheme.headlineMedium?.copyWith( - color: colors.onSurface, - ); - TextStyle? get headlineSmall => textTheme.headlineSmall?.copyWith( - color: colors.onSurface, - ); - TextStyle? get titleLarge => textTheme.titleLarge?.copyWith( - color: colors.onSurface, - ); - TextStyle? get titleMedium => textTheme.titleMedium?.copyWith( - color: colors.onSurface, - ); - TextStyle? get titleSmall => textTheme.titleSmall?.copyWith( - color: colors.onSurface, - ); - TextStyle? get labelLarge => textTheme.labelLarge?.copyWith( - color: colors.onSurface, - ); - TextStyle? get labelMedium => textTheme.labelMedium?.copyWith( - color: colors.onSurface, - ); - TextStyle? get labelSmall => textTheme.labelSmall?.copyWith( - color: colors.onSurface, - ); - TextStyle? get bodyLarge => textTheme.bodyLarge?.copyWith( - color: colors.onSurface, - ); - TextStyle? get bodyMedium => textTheme.bodyMedium?.copyWith( - color: colors.onSurface, - ); - TextStyle? get bodySmall => textTheme.bodySmall?.copyWith( - color: colors.onSurface, - ); + TextStyle? get displayLarge => + textTheme.displayLarge?.copyWith(color: colors.onSurface); + TextStyle? get displayMedium => + textTheme.displayMedium?.copyWith(color: colors.onSurface); + TextStyle? get displaySmall => + textTheme.displaySmall?.copyWith(color: colors.onSurface); + TextStyle? get headlineLarge => + textTheme.headlineLarge?.copyWith(color: colors.onSurface); + TextStyle? get headlineMedium => + textTheme.headlineMedium?.copyWith(color: colors.onSurface); + TextStyle? get headlineSmall => + textTheme.headlineSmall?.copyWith(color: colors.onSurface); + TextStyle? get titleLarge => + textTheme.titleLarge?.copyWith(color: colors.onSurface); + TextStyle? get titleMedium => + textTheme.titleMedium?.copyWith(color: colors.onSurface); + TextStyle? get titleSmall => + textTheme.titleSmall?.copyWith(color: colors.onSurface); + TextStyle? get labelLarge => + textTheme.labelLarge?.copyWith(color: colors.onSurface); + TextStyle? get labelMedium => + textTheme.labelMedium?.copyWith(color: colors.onSurface); + TextStyle? get labelSmall => + textTheme.labelSmall?.copyWith(color: colors.onSurface); + TextStyle? get bodyLarge => + textTheme.bodyLarge?.copyWith(color: colors.onSurface); + TextStyle? get bodyMedium => + textTheme.bodyMedium?.copyWith(color: colors.onSurface); + TextStyle? get bodySmall => + textTheme.bodySmall?.copyWith(color: colors.onSurface); } extension BreakpointUtils on BoxConstraints { @@ -65,17 +50,17 @@ extension BreakpointUtils on BoxConstraints { extension DurationString on String { /// Assumes a string (roughly) of the format '\d{1,2}:\d{2}' Duration toDuration() => switch (split(':')) { - [var minutes, var seconds] => Duration( - minutes: int.parse(minutes.trim()), - seconds: int.parse(seconds.trim()), - ), - [var hours, var minutes, var seconds] => Duration( - hours: int.parse(hours.trim()), - minutes: int.parse(minutes.trim()), - seconds: int.parse(seconds.trim()), - ), - _ => throw Exception('Invalid duration string: $this'), - }; + [var minutes, var seconds] => Duration( + minutes: int.parse(minutes.trim()), + seconds: int.parse(seconds.trim()), + ), + [var hours, var minutes, var seconds] => Duration( + hours: int.parse(hours.trim()), + minutes: int.parse(minutes.trim()), + seconds: int.parse(seconds.trim()), + ), + _ => throw Exception('Invalid duration string: $this'), + }; } extension HumanizedDuration on Duration { diff --git a/boring_to_beautiful/step_03/lib/src/shared/playback/bloc/playback_bloc.dart b/boring_to_beautiful/step_03/lib/src/shared/playback/bloc/playback_bloc.dart index 73c2f4c436..c6c871937b 100644 --- a/boring_to_beautiful/step_03/lib/src/shared/playback/bloc/playback_bloc.dart +++ b/boring_to_beautiful/step_03/lib/src/shared/playback/bloc/playback_bloc.dart @@ -41,9 +41,8 @@ class PlaybackBloc extends Bloc { } } - void _handlePlaybackProgress(Duration progress) => add( - PlaybackEvent.songProgress(progress), - ); + void _handlePlaybackProgress(Duration progress) => + add(PlaybackEvent.songProgress(progress)); void _togglePlayPause(TogglePlayPause event, Emitter emit) { state.isPlaying ? _pausePlayback() : _resumePlayback(); @@ -52,8 +51,10 @@ class PlaybackBloc extends Bloc { void _pausePlayback() => _currentlyPlayingSubscription!.cancel(); - void _resumePlayback() => _currentlyPlayingSubscription = - _startPlayingStream().listen(_handlePlaybackProgress); + void _resumePlayback() => + _currentlyPlayingSubscription = _startPlayingStream().listen( + _handlePlaybackProgress, + ); void _changeSong(ChangeSong event, Emitter emit) { emit( @@ -69,19 +70,15 @@ class PlaybackBloc extends Bloc { } void _songProgress(SongProgress event, Emitter emit) => emit( - state.copyWith( - songWithProgress: state.songWithProgress!.copyWith( - progress: state.songWithProgress!.progress + event.duration, - ), - ), - ); + state.copyWith( + songWithProgress: state.songWithProgress!.copyWith( + progress: state.songWithProgress!.progress + event.duration, + ), + ), + ); void _setVolume(SetVolume event, Emitter emit) => emit( - state.copyWith( - volume: event.value, - isMuted: false, - previousVolume: null, - ), - ); + state.copyWith(volume: event.value, isMuted: false, previousVolume: null), + ); void _toggleMute(ToggleMute event, Emitter emit) { if (state.isMuted) { @@ -94,11 +91,7 @@ class PlaybackBloc extends Bloc { ); } else { emit( - state.copyWith( - isMuted: true, - volume: 0, - previousVolume: state.volume, - ), + state.copyWith(isMuted: true, volume: 0, previousVolume: state.volume), ); } } diff --git a/boring_to_beautiful/step_03/lib/src/shared/playback/bloc/playback_bloc.freezed.dart b/boring_to_beautiful/step_03/lib/src/shared/playback/bloc/playback_bloc.freezed.dart index 8a422cd449..54e870ab6f 100644 --- a/boring_to_beautiful/step_03/lib/src/shared/playback/bloc/playback_bloc.freezed.dart +++ b/boring_to_beautiful/step_03/lib/src/shared/playback/bloc/playback_bloc.freezed.dart @@ -12,7 +12,8 @@ part of 'playback_bloc.dart'; T _$identity(T value) => value; final _privateConstructorUsedError = UnsupportedError( - 'It seems like you constructed your class using `MyClass._()`. This constructor is only meant to be used by freezed and you are not supposed to need it nor use it.\nPlease check the documentation here for more information: https://github.com/rrousselGit/freezed#adding-getters-and-methods-to-our-models'); + 'It seems like you constructed your class using `MyClass._()`. This constructor is only meant to be used by freezed and you are not supposed to need it nor use it.\nPlease check the documentation here for more information: https://github.com/rrousselGit/freezed#adding-getters-and-methods-to-our-models', +); /// @nodoc mixin _$PlaybackEvent { @@ -24,8 +25,7 @@ mixin _$PlaybackEvent { required TResult Function() toggleMute, required TResult Function(double percent) moveToInSong, required TResult Function(Duration duration) songProgress, - }) => - throw _privateConstructorUsedError; + }) => throw _privateConstructorUsedError; @optionalTypeArgs TResult? whenOrNull({ TResult? Function()? togglePlayPause, @@ -34,8 +34,7 @@ mixin _$PlaybackEvent { TResult? Function()? toggleMute, TResult? Function(double percent)? moveToInSong, TResult? Function(Duration duration)? songProgress, - }) => - throw _privateConstructorUsedError; + }) => throw _privateConstructorUsedError; @optionalTypeArgs TResult maybeWhen({ TResult Function()? togglePlayPause, @@ -45,8 +44,7 @@ mixin _$PlaybackEvent { TResult Function(double percent)? moveToInSong, TResult Function(Duration duration)? songProgress, required TResult orElse(), - }) => - throw _privateConstructorUsedError; + }) => throw _privateConstructorUsedError; @optionalTypeArgs TResult map({ required TResult Function(TogglePlayPause value) togglePlayPause, @@ -55,8 +53,7 @@ mixin _$PlaybackEvent { required TResult Function(ToggleMute value) toggleMute, required TResult Function(MoveToInSong value) moveToInSong, required TResult Function(SongProgress value) songProgress, - }) => - throw _privateConstructorUsedError; + }) => throw _privateConstructorUsedError; @optionalTypeArgs TResult? mapOrNull({ TResult? Function(TogglePlayPause value)? togglePlayPause, @@ -65,8 +62,7 @@ mixin _$PlaybackEvent { TResult? Function(ToggleMute value)? toggleMute, TResult? Function(MoveToInSong value)? moveToInSong, TResult? Function(SongProgress value)? songProgress, - }) => - throw _privateConstructorUsedError; + }) => throw _privateConstructorUsedError; @optionalTypeArgs TResult maybeMap({ TResult Function(TogglePlayPause value)? togglePlayPause, @@ -76,15 +72,15 @@ mixin _$PlaybackEvent { TResult Function(MoveToInSong value)? moveToInSong, TResult Function(SongProgress value)? songProgress, required TResult orElse(), - }) => - throw _privateConstructorUsedError; + }) => throw _privateConstructorUsedError; } /// @nodoc abstract class $PlaybackEventCopyWith<$Res> { factory $PlaybackEventCopyWith( - PlaybackEvent value, $Res Function(PlaybackEvent) then) = - _$PlaybackEventCopyWithImpl<$Res, PlaybackEvent>; + PlaybackEvent value, + $Res Function(PlaybackEvent) then, + ) = _$PlaybackEventCopyWithImpl<$Res, PlaybackEvent>; } /// @nodoc @@ -103,9 +99,10 @@ class _$PlaybackEventCopyWithImpl<$Res, $Val extends PlaybackEvent> /// @nodoc abstract class _$$TogglePlayPauseImplCopyWith<$Res> { - factory _$$TogglePlayPauseImplCopyWith(_$TogglePlayPauseImpl value, - $Res Function(_$TogglePlayPauseImpl) then) = - __$$TogglePlayPauseImplCopyWithImpl<$Res>; + factory _$$TogglePlayPauseImplCopyWith( + _$TogglePlayPauseImpl value, + $Res Function(_$TogglePlayPauseImpl) then, + ) = __$$TogglePlayPauseImplCopyWithImpl<$Res>; } /// @nodoc @@ -113,8 +110,9 @@ class __$$TogglePlayPauseImplCopyWithImpl<$Res> extends _$PlaybackEventCopyWithImpl<$Res, _$TogglePlayPauseImpl> implements _$$TogglePlayPauseImplCopyWith<$Res> { __$$TogglePlayPauseImplCopyWithImpl( - _$TogglePlayPauseImpl _value, $Res Function(_$TogglePlayPauseImpl) _then) - : super(_value, _then); + _$TogglePlayPauseImpl _value, + $Res Function(_$TogglePlayPauseImpl) _then, + ) : super(_value, _then); /// Create a copy of PlaybackEvent /// with the given fields replaced by the non-null parameter values. @@ -233,8 +231,9 @@ abstract class TogglePlayPause implements PlaybackEvent { /// @nodoc abstract class _$$ChangeSongImplCopyWith<$Res> { factory _$$ChangeSongImplCopyWith( - _$ChangeSongImpl value, $Res Function(_$ChangeSongImpl) then) = - __$$ChangeSongImplCopyWithImpl<$Res>; + _$ChangeSongImpl value, + $Res Function(_$ChangeSongImpl) then, + ) = __$$ChangeSongImplCopyWithImpl<$Res>; @useResult $Res call({Song song}); } @@ -244,22 +243,23 @@ class __$$ChangeSongImplCopyWithImpl<$Res> extends _$PlaybackEventCopyWithImpl<$Res, _$ChangeSongImpl> implements _$$ChangeSongImplCopyWith<$Res> { __$$ChangeSongImplCopyWithImpl( - _$ChangeSongImpl _value, $Res Function(_$ChangeSongImpl) _then) - : super(_value, _then); + _$ChangeSongImpl _value, + $Res Function(_$ChangeSongImpl) _then, + ) : super(_value, _then); /// Create a copy of PlaybackEvent /// with the given fields replaced by the non-null parameter values. @pragma('vm:prefer-inline') @override - $Res call({ - Object? song = null, - }) { - return _then(_$ChangeSongImpl( - null == song - ? _value.song - : song // ignore: cast_nullable_to_non_nullable - as Song, - )); + $Res call({Object? song = null}) { + return _then( + _$ChangeSongImpl( + null == song + ? _value.song + : song // ignore: cast_nullable_to_non_nullable + as Song, + ), + ); } } @@ -397,8 +397,9 @@ abstract class ChangeSong implements PlaybackEvent { /// @nodoc abstract class _$$SetVolumeImplCopyWith<$Res> { factory _$$SetVolumeImplCopyWith( - _$SetVolumeImpl value, $Res Function(_$SetVolumeImpl) then) = - __$$SetVolumeImplCopyWithImpl<$Res>; + _$SetVolumeImpl value, + $Res Function(_$SetVolumeImpl) then, + ) = __$$SetVolumeImplCopyWithImpl<$Res>; @useResult $Res call({double value}); } @@ -408,22 +409,23 @@ class __$$SetVolumeImplCopyWithImpl<$Res> extends _$PlaybackEventCopyWithImpl<$Res, _$SetVolumeImpl> implements _$$SetVolumeImplCopyWith<$Res> { __$$SetVolumeImplCopyWithImpl( - _$SetVolumeImpl _value, $Res Function(_$SetVolumeImpl) _then) - : super(_value, _then); + _$SetVolumeImpl _value, + $Res Function(_$SetVolumeImpl) _then, + ) : super(_value, _then); /// Create a copy of PlaybackEvent /// with the given fields replaced by the non-null parameter values. @pragma('vm:prefer-inline') @override - $Res call({ - Object? value = null, - }) { - return _then(_$SetVolumeImpl( - null == value - ? _value.value - : value // ignore: cast_nullable_to_non_nullable - as double, - )); + $Res call({Object? value = null}) { + return _then( + _$SetVolumeImpl( + null == value + ? _value.value + : value // ignore: cast_nullable_to_non_nullable + as double, + ), + ); } } @@ -561,8 +563,9 @@ abstract class SetVolume implements PlaybackEvent { /// @nodoc abstract class _$$ToggleMuteImplCopyWith<$Res> { factory _$$ToggleMuteImplCopyWith( - _$ToggleMuteImpl value, $Res Function(_$ToggleMuteImpl) then) = - __$$ToggleMuteImplCopyWithImpl<$Res>; + _$ToggleMuteImpl value, + $Res Function(_$ToggleMuteImpl) then, + ) = __$$ToggleMuteImplCopyWithImpl<$Res>; } /// @nodoc @@ -570,8 +573,9 @@ class __$$ToggleMuteImplCopyWithImpl<$Res> extends _$PlaybackEventCopyWithImpl<$Res, _$ToggleMuteImpl> implements _$$ToggleMuteImplCopyWith<$Res> { __$$ToggleMuteImplCopyWithImpl( - _$ToggleMuteImpl _value, $Res Function(_$ToggleMuteImpl) _then) - : super(_value, _then); + _$ToggleMuteImpl _value, + $Res Function(_$ToggleMuteImpl) _then, + ) : super(_value, _then); /// Create a copy of PlaybackEvent /// with the given fields replaced by the non-null parameter values. @@ -690,8 +694,9 @@ abstract class ToggleMute implements PlaybackEvent { /// @nodoc abstract class _$$MoveToInSongImplCopyWith<$Res> { factory _$$MoveToInSongImplCopyWith( - _$MoveToInSongImpl value, $Res Function(_$MoveToInSongImpl) then) = - __$$MoveToInSongImplCopyWithImpl<$Res>; + _$MoveToInSongImpl value, + $Res Function(_$MoveToInSongImpl) then, + ) = __$$MoveToInSongImplCopyWithImpl<$Res>; @useResult $Res call({double percent}); } @@ -701,22 +706,23 @@ class __$$MoveToInSongImplCopyWithImpl<$Res> extends _$PlaybackEventCopyWithImpl<$Res, _$MoveToInSongImpl> implements _$$MoveToInSongImplCopyWith<$Res> { __$$MoveToInSongImplCopyWithImpl( - _$MoveToInSongImpl _value, $Res Function(_$MoveToInSongImpl) _then) - : super(_value, _then); + _$MoveToInSongImpl _value, + $Res Function(_$MoveToInSongImpl) _then, + ) : super(_value, _then); /// Create a copy of PlaybackEvent /// with the given fields replaced by the non-null parameter values. @pragma('vm:prefer-inline') @override - $Res call({ - Object? percent = null, - }) { - return _then(_$MoveToInSongImpl( - null == percent - ? _value.percent - : percent // ignore: cast_nullable_to_non_nullable - as double, - )); + $Res call({Object? percent = null}) { + return _then( + _$MoveToInSongImpl( + null == percent + ? _value.percent + : percent // ignore: cast_nullable_to_non_nullable + as double, + ), + ); } } @@ -854,8 +860,9 @@ abstract class MoveToInSong implements PlaybackEvent { /// @nodoc abstract class _$$SongProgressImplCopyWith<$Res> { factory _$$SongProgressImplCopyWith( - _$SongProgressImpl value, $Res Function(_$SongProgressImpl) then) = - __$$SongProgressImplCopyWithImpl<$Res>; + _$SongProgressImpl value, + $Res Function(_$SongProgressImpl) then, + ) = __$$SongProgressImplCopyWithImpl<$Res>; @useResult $Res call({Duration duration}); } @@ -865,22 +872,23 @@ class __$$SongProgressImplCopyWithImpl<$Res> extends _$PlaybackEventCopyWithImpl<$Res, _$SongProgressImpl> implements _$$SongProgressImplCopyWith<$Res> { __$$SongProgressImplCopyWithImpl( - _$SongProgressImpl _value, $Res Function(_$SongProgressImpl) _then) - : super(_value, _then); + _$SongProgressImpl _value, + $Res Function(_$SongProgressImpl) _then, + ) : super(_value, _then); /// Create a copy of PlaybackEvent /// with the given fields replaced by the non-null parameter values. @pragma('vm:prefer-inline') @override - $Res call({ - Object? duration = null, - }) { - return _then(_$SongProgressImpl( - null == duration - ? _value.duration - : duration // ignore: cast_nullable_to_non_nullable - as Duration, - )); + $Res call({Object? duration = null}) { + return _then( + _$SongProgressImpl( + null == duration + ? _value.duration + : duration // ignore: cast_nullable_to_non_nullable + as Duration, + ), + ); } } @@ -1037,15 +1045,17 @@ mixin _$PlaybackState { /// @nodoc abstract class $PlaybackStateCopyWith<$Res> { factory $PlaybackStateCopyWith( - PlaybackState value, $Res Function(PlaybackState) then) = - _$PlaybackStateCopyWithImpl<$Res, PlaybackState>; + PlaybackState value, + $Res Function(PlaybackState) then, + ) = _$PlaybackStateCopyWithImpl<$Res, PlaybackState>; @useResult - $Res call( - {double volume, - double? previousVolume, - bool isMuted, - bool isPlaying, - SongWithProgress? songWithProgress}); + $Res call({ + double volume, + double? previousVolume, + bool isMuted, + bool isPlaying, + SongWithProgress? songWithProgress, + }); $SongWithProgressCopyWith<$Res>? get songWithProgress; } @@ -1071,28 +1081,36 @@ class _$PlaybackStateCopyWithImpl<$Res, $Val extends PlaybackState> Object? isPlaying = null, Object? songWithProgress = freezed, }) { - return _then(_value.copyWith( - volume: null == volume - ? _value.volume - : volume // ignore: cast_nullable_to_non_nullable - as double, - previousVolume: freezed == previousVolume - ? _value.previousVolume - : previousVolume // ignore: cast_nullable_to_non_nullable - as double?, - isMuted: null == isMuted - ? _value.isMuted - : isMuted // ignore: cast_nullable_to_non_nullable - as bool, - isPlaying: null == isPlaying - ? _value.isPlaying - : isPlaying // ignore: cast_nullable_to_non_nullable - as bool, - songWithProgress: freezed == songWithProgress - ? _value.songWithProgress - : songWithProgress // ignore: cast_nullable_to_non_nullable - as SongWithProgress?, - ) as $Val); + return _then( + _value.copyWith( + volume: + null == volume + ? _value.volume + : volume // ignore: cast_nullable_to_non_nullable + as double, + previousVolume: + freezed == previousVolume + ? _value.previousVolume + : previousVolume // ignore: cast_nullable_to_non_nullable + as double?, + isMuted: + null == isMuted + ? _value.isMuted + : isMuted // ignore: cast_nullable_to_non_nullable + as bool, + isPlaying: + null == isPlaying + ? _value.isPlaying + : isPlaying // ignore: cast_nullable_to_non_nullable + as bool, + songWithProgress: + freezed == songWithProgress + ? _value.songWithProgress + : songWithProgress // ignore: cast_nullable_to_non_nullable + as SongWithProgress?, + ) + as $Val, + ); } /// Create a copy of PlaybackState @@ -1114,16 +1132,18 @@ class _$PlaybackStateCopyWithImpl<$Res, $Val extends PlaybackState> abstract class _$$PlaybackStateImplCopyWith<$Res> implements $PlaybackStateCopyWith<$Res> { factory _$$PlaybackStateImplCopyWith( - _$PlaybackStateImpl value, $Res Function(_$PlaybackStateImpl) then) = - __$$PlaybackStateImplCopyWithImpl<$Res>; + _$PlaybackStateImpl value, + $Res Function(_$PlaybackStateImpl) then, + ) = __$$PlaybackStateImplCopyWithImpl<$Res>; @override @useResult - $Res call( - {double volume, - double? previousVolume, - bool isMuted, - bool isPlaying, - SongWithProgress? songWithProgress}); + $Res call({ + double volume, + double? previousVolume, + bool isMuted, + bool isPlaying, + SongWithProgress? songWithProgress, + }); @override $SongWithProgressCopyWith<$Res>? get songWithProgress; @@ -1134,8 +1154,9 @@ class __$$PlaybackStateImplCopyWithImpl<$Res> extends _$PlaybackStateCopyWithImpl<$Res, _$PlaybackStateImpl> implements _$$PlaybackStateImplCopyWith<$Res> { __$$PlaybackStateImplCopyWithImpl( - _$PlaybackStateImpl _value, $Res Function(_$PlaybackStateImpl) _then) - : super(_value, _then); + _$PlaybackStateImpl _value, + $Res Function(_$PlaybackStateImpl) _then, + ) : super(_value, _then); /// Create a copy of PlaybackState /// with the given fields replaced by the non-null parameter values. @@ -1148,40 +1169,48 @@ class __$$PlaybackStateImplCopyWithImpl<$Res> Object? isPlaying = null, Object? songWithProgress = freezed, }) { - return _then(_$PlaybackStateImpl( - volume: null == volume - ? _value.volume - : volume // ignore: cast_nullable_to_non_nullable - as double, - previousVolume: freezed == previousVolume - ? _value.previousVolume - : previousVolume // ignore: cast_nullable_to_non_nullable - as double?, - isMuted: null == isMuted - ? _value.isMuted - : isMuted // ignore: cast_nullable_to_non_nullable - as bool, - isPlaying: null == isPlaying - ? _value.isPlaying - : isPlaying // ignore: cast_nullable_to_non_nullable - as bool, - songWithProgress: freezed == songWithProgress - ? _value.songWithProgress - : songWithProgress // ignore: cast_nullable_to_non_nullable - as SongWithProgress?, - )); + return _then( + _$PlaybackStateImpl( + volume: + null == volume + ? _value.volume + : volume // ignore: cast_nullable_to_non_nullable + as double, + previousVolume: + freezed == previousVolume + ? _value.previousVolume + : previousVolume // ignore: cast_nullable_to_non_nullable + as double?, + isMuted: + null == isMuted + ? _value.isMuted + : isMuted // ignore: cast_nullable_to_non_nullable + as bool, + isPlaying: + null == isPlaying + ? _value.isPlaying + : isPlaying // ignore: cast_nullable_to_non_nullable + as bool, + songWithProgress: + freezed == songWithProgress + ? _value.songWithProgress + : songWithProgress // ignore: cast_nullable_to_non_nullable + as SongWithProgress?, + ), + ); } } /// @nodoc class _$PlaybackStateImpl implements _PlaybackState { - const _$PlaybackStateImpl( - {this.volume = 0.5, - this.previousVolume, - this.isMuted = false, - this.isPlaying = false, - this.songWithProgress}); + const _$PlaybackStateImpl({ + this.volume = 0.5, + this.previousVolume, + this.isMuted = false, + this.isPlaying = false, + this.songWithProgress, + }); /// Legal values are between 0 and 1. @override @@ -1221,8 +1250,14 @@ class _$PlaybackStateImpl implements _PlaybackState { } @override - int get hashCode => Object.hash(runtimeType, volume, previousVolume, isMuted, - isPlaying, songWithProgress); + int get hashCode => Object.hash( + runtimeType, + volume, + previousVolume, + isMuted, + isPlaying, + songWithProgress, + ); /// Create a copy of PlaybackState /// with the given fields replaced by the non-null parameter values. @@ -1234,12 +1269,13 @@ class _$PlaybackStateImpl implements _PlaybackState { } abstract class _PlaybackState implements PlaybackState { - const factory _PlaybackState( - {final double volume, - final double? previousVolume, - final bool isMuted, - final bool isPlaying, - final SongWithProgress? songWithProgress}) = _$PlaybackStateImpl; + const factory _PlaybackState({ + final double volume, + final double? previousVolume, + final bool isMuted, + final bool isPlaying, + final SongWithProgress? songWithProgress, + }) = _$PlaybackStateImpl; /// Legal values are between 0 and 1. @override @@ -1278,8 +1314,9 @@ mixin _$SongWithProgress { /// @nodoc abstract class $SongWithProgressCopyWith<$Res> { factory $SongWithProgressCopyWith( - SongWithProgress value, $Res Function(SongWithProgress) then) = - _$SongWithProgressCopyWithImpl<$Res, SongWithProgress>; + SongWithProgress value, + $Res Function(SongWithProgress) then, + ) = _$SongWithProgressCopyWithImpl<$Res, SongWithProgress>; @useResult $Res call({Duration progress, Song song}); } @@ -1298,29 +1335,32 @@ class _$SongWithProgressCopyWithImpl<$Res, $Val extends SongWithProgress> /// with the given fields replaced by the non-null parameter values. @pragma('vm:prefer-inline') @override - $Res call({ - Object? progress = null, - Object? song = null, - }) { - return _then(_value.copyWith( - progress: null == progress - ? _value.progress - : progress // ignore: cast_nullable_to_non_nullable - as Duration, - song: null == song - ? _value.song - : song // ignore: cast_nullable_to_non_nullable - as Song, - ) as $Val); + $Res call({Object? progress = null, Object? song = null}) { + return _then( + _value.copyWith( + progress: + null == progress + ? _value.progress + : progress // ignore: cast_nullable_to_non_nullable + as Duration, + song: + null == song + ? _value.song + : song // ignore: cast_nullable_to_non_nullable + as Song, + ) + as $Val, + ); } } /// @nodoc abstract class _$$SongWithProgressImplCopyWith<$Res> implements $SongWithProgressCopyWith<$Res> { - factory _$$SongWithProgressImplCopyWith(_$SongWithProgressImpl value, - $Res Function(_$SongWithProgressImpl) then) = - __$$SongWithProgressImplCopyWithImpl<$Res>; + factory _$$SongWithProgressImplCopyWith( + _$SongWithProgressImpl value, + $Res Function(_$SongWithProgressImpl) then, + ) = __$$SongWithProgressImplCopyWithImpl<$Res>; @override @useResult $Res call({Duration progress, Song song}); @@ -1330,28 +1370,30 @@ abstract class _$$SongWithProgressImplCopyWith<$Res> class __$$SongWithProgressImplCopyWithImpl<$Res> extends _$SongWithProgressCopyWithImpl<$Res, _$SongWithProgressImpl> implements _$$SongWithProgressImplCopyWith<$Res> { - __$$SongWithProgressImplCopyWithImpl(_$SongWithProgressImpl _value, - $Res Function(_$SongWithProgressImpl) _then) - : super(_value, _then); + __$$SongWithProgressImplCopyWithImpl( + _$SongWithProgressImpl _value, + $Res Function(_$SongWithProgressImpl) _then, + ) : super(_value, _then); /// Create a copy of SongWithProgress /// with the given fields replaced by the non-null parameter values. @pragma('vm:prefer-inline') @override - $Res call({ - Object? progress = null, - Object? song = null, - }) { - return _then(_$SongWithProgressImpl( - progress: null == progress - ? _value.progress - : progress // ignore: cast_nullable_to_non_nullable - as Duration, - song: null == song - ? _value.song - : song // ignore: cast_nullable_to_non_nullable - as Song, - )); + $Res call({Object? progress = null, Object? song = null}) { + return _then( + _$SongWithProgressImpl( + progress: + null == progress + ? _value.progress + : progress // ignore: cast_nullable_to_non_nullable + as Duration, + song: + null == song + ? _value.song + : song // ignore: cast_nullable_to_non_nullable + as Song, + ), + ); } } @@ -1390,13 +1432,16 @@ class _$SongWithProgressImpl implements _SongWithProgress { @pragma('vm:prefer-inline') _$$SongWithProgressImplCopyWith<_$SongWithProgressImpl> get copyWith => __$$SongWithProgressImplCopyWithImpl<_$SongWithProgressImpl>( - this, _$identity); + this, + _$identity, + ); } abstract class _SongWithProgress implements SongWithProgress { - const factory _SongWithProgress( - {required final Duration progress, - required final Song song}) = _$SongWithProgressImpl; + const factory _SongWithProgress({ + required final Duration progress, + required final Song song, + }) = _$SongWithProgressImpl; @override Duration get progress; diff --git a/boring_to_beautiful/step_03/lib/src/shared/providers/artists.dart b/boring_to_beautiful/step_03/lib/src/shared/providers/artists.dart index d116ad9cdd..f9e4a8063e 100644 --- a/boring_to_beautiful/step_03/lib/src/shared/providers/artists.dart +++ b/boring_to_beautiful/step_03/lib/src/shared/providers/artists.dart @@ -11,162 +11,175 @@ class ArtistsProvider { static ArtistsProvider get shared => ArtistsProvider(); List get artists => const [ - Artist( - id: 'jmo', - name: 'Jessie Morrison', + Artist( + id: 'jmo', + name: 'Jessie Morrison', + image: MyArtistImage( + image: 'assets/images/artists/woman.jpeg', + sourceLink: 'https://unsplash.com/photos/w8wpFqiMpW8', + sourceName: 'Daniel Monteiro', + ), + bio: + 'Jessie "JMo" Morrison is an American singer, actress, and dancer. The following year she won over America\'s hearts first appearing in the 2004 movie Unexpected Engagement. Soon after she released her debut album, Hopeful Romantics.', + updates: [ + 'So happy that everyone is loving the new music! It\'s been my pride and joy to work on and I\'m thrilled that you finally get to hear it!', + 'Happy Valentine\'s Day y\'all!!! I love each and every one of you 💋😘', + '#HappyGalentinesDay!!! Chocolates. Ice Cream. Your favorite rom-com. Let\'s goo!!! 💕✨', + ], + events: [ + Event( + date: '1/20/22', + title: 'Jessie Morrison: No More Heartbreak Tour', + location: 'Mountain View, California', + link: 'Tickets', + ), + Event( + date: '1/22/22', + title: 'Jessie Morrison: No More Heartbreak Tour', + location: 'Austin, Texas', + link: 'Tickets', + ), + Event( + date: '1/23/22', + title: 'Jessie Morrison: No More Heartbreak Tour', + location: 'Houston, Texas', + link: 'Tickets', + ), + Event( + date: '2/8/22', + title: 'Jessie Morrison: No More Heartbreak Tour', + location: 'Los Angeles, California', + link: 'Tickets', + ), + ], + news: [ + News( + title: + 'Jessie Morrison a 26-stop cross country tour for the first time in 6 years.', + author: 'By Jacqueline Stewart', + blurb: + 'Our favorite triple-threat Jessie Morrison is back, this time with a 26 stop tour across the country. She\'ll kick things off in Mountain View on January 20th, 2022 in Mountain View California with more stops being announced over the next few weeks...', image: MyArtistImage( - image: 'assets/images/artists/woman.jpeg', - sourceLink: 'https://unsplash.com/photos/w8wpFqiMpW8', - sourceName: 'Daniel Monteiro', + image: 'assets/images/news/concert.jpeg', + sourceLink: 'https://unsplash.com/photos/hzgs56Ze49s', + sourceName: 'Anthony DELANOIX', ), - bio: - 'Jessie "JMo" Morrison is an American singer, actress, and dancer. The following year she won over America\'s hearts first appearing in the 2004 movie Unexpected Engagement. Soon after she released her debut album, Hopeful Romantics.', - updates: [ - 'So happy that everyone is loving the new music! It\'s been my pride and joy to work on and I\'m thrilled that you finally get to hear it!', - 'Happy Valentine\'s Day y\'all!!! I love each and every one of you 💋😘', - '#HappyGalentinesDay!!! Chocolates. Ice Cream. Your favorite rom-com. Let\'s goo!!! 💕✨', - ], - events: [ - Event( - date: '1/20/22', - title: 'Jessie Morrison: No More Heartbreak Tour', - location: 'Mountain View, California', - link: 'Tickets'), - Event( - date: '1/22/22', - title: 'Jessie Morrison: No More Heartbreak Tour', - location: 'Austin, Texas', - link: 'Tickets'), - Event( - date: '1/23/22', - title: 'Jessie Morrison: No More Heartbreak Tour', - location: 'Houston, Texas', - link: 'Tickets'), - Event( - date: '2/8/22', - title: 'Jessie Morrison: No More Heartbreak Tour', - location: 'Los Angeles, California', - link: 'Tickets'), - ], - news: [ - News( - title: - 'Jessie Morrison a 26-stop cross country tour for the first time in 6 years.', - author: 'By Jacqueline Stewart', - blurb: - 'Our favorite triple-threat Jessie Morrison is back, this time with a 26 stop tour across the country. She\'ll kick things off in Mountain View on January 20th, 2022 in Mountain View California with more stops being announced over the next few weeks...', - image: MyArtistImage( - image: 'assets/images/news/concert.jpeg', - sourceLink: 'https://unsplash.com/photos/hzgs56Ze49s', - sourceName: 'Anthony DELANOIX', - ), - ) - ], ), - Artist( - id: 'lb', - name: 'Lucas Bryant', + ], + ), + Artist( + id: 'lb', + name: 'Lucas Bryant', + image: MyArtistImage( + image: 'assets/images/albums/artist1-album2.jpg', + sourceLink: 'https://unsplash.com/photos/6etHcucBiRg', + sourceName: 'Keagan Henman', + ), + bio: + 'Lucas Bryant is an American country music singer and songwriter. He moved to Nashville at the age of 18 to pursue his country music career. With 34 awards to his name, he currently holds the record for most awards in country music.', + updates: [ + 'Who\'s ready to party this weekend?! See you tomorrow, Nashville! #LBlive', + 'Can\'t wait to get back on stage after so long. What songs do you want to hear?', + 'We\'re going all in this weekend! How are you doing, Vegas?!', + ], + events: [ + Event( + date: '5/16/22', + title: 'Back To My Hometown Tour', + location: 'Indianapolis, IN', + link: 'Tickets', + ), + Event( + date: '5/18/22', + title: 'Back To My Hometown Tour', + location: 'San Antonio, TX', + link: 'Tickets', + ), + Event( + date: '5/20/22', + title: 'Back To My Hometown Tour', + location: 'Phoenix, AZ', + link: 'Tickets', + ), + Event( + date: '5/23/22', + title: 'Back To My Hometown Tour', + location: 'San Diego, CA', + link: 'Tickets', + ), + ], + news: [ + News( + title: + 'Country Music Favorites Lucas Bryant, Mariam Lubbock, Michelle Delaney and Jackson Murray Join Forces For The Biggest Performance in Country History.', + author: 'Lonnie Hall', + blurb: + 'Calling all country music fans! Fasten your seat belts because the 2022 Best of Country Awards is expecting a huge performance from some of our favorite artists. Country music legends Mariam Lubbock and Jackson Murray will be joined by Lucas Bryant and Michelle Delaney for a performance we\'ll never forget.', image: MyArtistImage( image: 'assets/images/albums/artist1-album2.jpg', sourceLink: 'https://unsplash.com/photos/6etHcucBiRg', sourceName: 'Keagan Henman', ), - bio: - 'Lucas Bryant is an American country music singer and songwriter. He moved to Nashville at the age of 18 to pursue his country music career. With 34 awards to his name, he currently holds the record for most awards in country music.', - updates: [ - 'Who\'s ready to party this weekend?! See you tomorrow, Nashville! #LBlive', - 'Can\'t wait to get back on stage after so long. What songs do you want to hear?', - 'We\'re going all in this weekend! How are you doing, Vegas?!', - ], - events: [ - Event( - date: '5/16/22', - title: 'Back To My Hometown Tour', - location: 'Indianapolis, IN', - link: 'Tickets'), - Event( - date: '5/18/22', - title: 'Back To My Hometown Tour', - location: 'San Antonio, TX', - link: 'Tickets'), - Event( - date: '5/20/22', - title: 'Back To My Hometown Tour', - location: 'Phoenix, AZ', - link: 'Tickets'), - Event( - date: '5/23/22', - title: 'Back To My Hometown Tour', - location: 'San Diego, CA', - link: 'Tickets'), - ], - news: [ - News( - title: - 'Country Music Favorites Lucas Bryant, Mariam Lubbock, Michelle Delaney and Jackson Murray Join Forces For The Biggest Performance in Country History.', - author: 'Lonnie Hall', - blurb: - 'Calling all country music fans! Fasten your seat belts because the 2022 Best of Country Awards is expecting a huge performance from some of our favorite artists. Country music legends Mariam Lubbock and Jackson Murray will be joined by Lucas Bryant and Michelle Delaney for a performance we\'ll never forget.', - image: MyArtistImage( - image: 'assets/images/albums/artist1-album2.jpg', - sourceLink: 'https://unsplash.com/photos/6etHcucBiRg', - sourceName: 'Keagan Henman', - ), - ), - ], ), - Artist( - id: 'jonjames', - name: 'Jon James', + ], + ), + Artist( + id: 'jonjames', + name: 'Jon James', + image: MyArtistImage( + image: 'assets/images/artists/joe.jpg', + sourceLink: 'https://unsplash.com/photos/k7UKO-tT5QU', + sourceName: 'Natalie Runnerstrom', + ), + bio: + 'Jon James is an American singer and songwriter. He\'s best known for his number one single "Never Going Back" which stayed atop the charts for 10 weeks.', + updates: [ + '3. MORE. DAYS. Who\'s ready for #FallingForYou?! Tune in tomorrow to see the full track list!', + '4 days until I get to share some of the favorite songs I\'ve ever written with you.', + '#FallingForYou dropping in 5 days! Send me your favorite music video concepts 🎥 😎', + ], + events: [ + Event( + date: '10/22/21', + title: 'Falling For You Tour', + location: 'Dallas, Texas', + link: 'Ticketmaster', + ), + Event( + date: '10/23/21', + title: 'Falling For You Tour', + location: 'Houston, Texas', + link: 'Ticketmaster', + ), + Event( + date: '10/26/21', + title: 'Falling For You Tour', + location: 'Phoenix, Arizona', + link: 'Ticketmaster', + ), + Event( + date: '10/27/21', + title: 'Falling For You Tour', + location: 'Los Angeles, California', + link: 'Ticketmaster', + ), + ], + news: [ + News( + title: + 'Jon James is excited for the release of his sixth album "Falling For You"', + author: 'Top Media Today', + blurb: + 'Jon James will be dropping his new album "Falling For You" on Friday to much fan excitement. The 6-time Grammy winning artist has spent the last year writing and recording for this album that\'s been dubbed "his best work yet."', image: MyArtistImage( - image: 'assets/images/artists/joe.jpg', - sourceLink: 'https://unsplash.com/photos/k7UKO-tT5QU', - sourceName: 'Natalie Runnerstrom', + image: 'assets/images/news/recording_studio.jpg', + sourceLink: 'https://unsplash.com/photos/CbOGmLA46JI', + sourceName: 'Yohann LIBOT', ), - bio: - 'Jon James is an American singer and songwriter. He\'s best known for his number one single "Never Going Back" which stayed atop the charts for 10 weeks.', - updates: [ - '3. MORE. DAYS. Who\'s ready for #FallingForYou?! Tune in tomorrow to see the full track list!', - '4 days until I get to share some of the favorite songs I\'ve ever written with you.', - '#FallingForYou dropping in 5 days! Send me your favorite music video concepts 🎥 😎', - ], - events: [ - Event( - date: '10/22/21', - title: 'Falling For You Tour', - location: 'Dallas, Texas', - link: 'Ticketmaster'), - Event( - date: '10/23/21', - title: 'Falling For You Tour', - location: 'Houston, Texas', - link: 'Ticketmaster'), - Event( - date: '10/26/21', - title: 'Falling For You Tour', - location: 'Phoenix, Arizona', - link: 'Ticketmaster'), - Event( - date: '10/27/21', - title: 'Falling For You Tour', - location: 'Los Angeles, California', - link: 'Ticketmaster'), - ], - news: [ - News( - title: - 'Jon James is excited for the release of his sixth album "Falling For You"', - author: 'Top Media Today', - blurb: - 'Jon James will be dropping his new album "Falling For You" on Friday to much fan excitement. The 6-time Grammy winning artist has spent the last year writing and recording for this album that\'s been dubbed "his best work yet."', - image: MyArtistImage( - image: 'assets/images/news/recording_studio.jpg', - sourceLink: 'https://unsplash.com/photos/CbOGmLA46JI', - sourceName: 'Yohann LIBOT'), - ) - ], ), - ]; + ], + ), + ]; Artist? getArtist(String id) { return artists.firstWhereOrNull((artist) => artist.id == id); diff --git a/boring_to_beautiful/step_03/lib/src/shared/providers/playlists.dart b/boring_to_beautiful/step_03/lib/src/shared/providers/playlists.dart index e8bab994dd..f27f71b3ec 100644 --- a/boring_to_beautiful/step_03/lib/src/shared/providers/playlists.dart +++ b/boring_to_beautiful/step_03/lib/src/shared/providers/playlists.dart @@ -18,41 +18,50 @@ class PlaylistsProvider { static List images() { return [ const MyArtistImage( - image: 'assets/images/playlists/favorite.jpg', - sourceLink: 'https://unsplash.com/photos/60GsdOMRFGc', - sourceName: 'Karsten Winegeart'), + image: 'assets/images/playlists/favorite.jpg', + sourceLink: 'https://unsplash.com/photos/60GsdOMRFGc', + sourceName: 'Karsten Winegeart', + ), const MyArtistImage( - image: 'assets/images/playlists/austin.jpg', - sourceLink: 'https://unsplash.com/photos/AlBgcDfDG_s', - sourceName: 'Carlos Alfonso'), + image: 'assets/images/playlists/austin.jpg', + sourceLink: 'https://unsplash.com/photos/AlBgcDfDG_s', + sourceName: 'Carlos Alfonso', + ), const MyArtistImage( - image: 'assets/images/playlists/reading.jpg', - sourceLink: 'https://unsplash.com/photos/wkgv7I2VTzM', - sourceName: 'Alexandra Fuller'), + image: 'assets/images/playlists/reading.jpg', + sourceLink: 'https://unsplash.com/photos/wkgv7I2VTzM', + sourceName: 'Alexandra Fuller', + ), const MyArtistImage( - image: 'assets/images/playlists/workout.jpg', - sourceLink: 'https://unsplash.com/photos/CnEEF5eJemQ', - sourceName: 'Karsten Winegeart'), + image: 'assets/images/playlists/workout.jpg', + sourceLink: 'https://unsplash.com/photos/CnEEF5eJemQ', + sourceName: 'Karsten Winegeart', + ), const MyArtistImage( - image: 'assets/images/playlists/calm.jpg', - sourceLink: 'https://unsplash.com/photos/NTyBbu66_SI', - sourceName: 'Jared Rice'), + image: 'assets/images/playlists/calm.jpg', + sourceLink: 'https://unsplash.com/photos/NTyBbu66_SI', + sourceName: 'Jared Rice', + ), const MyArtistImage( - image: 'assets/images/playlists/coffee.jpg', - sourceLink: 'https://unsplash.com/photos/XOhI_kW_TaM', - sourceName: 'Nathan Dumlao'), + image: 'assets/images/playlists/coffee.jpg', + sourceLink: 'https://unsplash.com/photos/XOhI_kW_TaM', + sourceName: 'Nathan Dumlao', + ), const MyArtistImage( - image: 'assets/images/playlists/piano.jpg', - sourceLink: 'https://unsplash.com/photos/BhfE1IgcsA8', - sourceName: 'Jordan Whitfield'), + image: 'assets/images/playlists/piano.jpg', + sourceLink: 'https://unsplash.com/photos/BhfE1IgcsA8', + sourceName: 'Jordan Whitfield', + ), const MyArtistImage( - image: 'assets/images/playlists/studying.jpg', - sourceLink: 'https://unsplash.com/photos/-moT-Deiw1M', - sourceName: 'Humble Lamb'), + image: 'assets/images/playlists/studying.jpg', + sourceLink: 'https://unsplash.com/photos/-moT-Deiw1M', + sourceName: 'Humble Lamb', + ), const MyArtistImage( - image: 'assets/images/playlists/jazz.jpg', - sourceLink: 'https://unsplash.com/photos/BY_KyTwTKq4', - sourceName: 'dimitri.photography'), + image: 'assets/images/playlists/jazz.jpg', + sourceLink: 'https://unsplash.com/photos/BY_KyTwTKq4', + sourceName: 'dimitri.photography', + ), ]; } @@ -85,8 +94,10 @@ class PlaylistsProvider { ); } - static final List _randomPlaylists = - List.generate(10, (index) => randomLengthPlaylist()); + static final List _randomPlaylists = List.generate( + 10, + (index) => randomLengthPlaylist(), + ); } String randomId() { diff --git a/boring_to_beautiful/step_03/lib/src/shared/providers/songs.dart b/boring_to_beautiful/step_03/lib/src/shared/providers/songs.dart index ed018a83ff..f1205f2dcb 100644 --- a/boring_to_beautiful/step_03/lib/src/shared/providers/songs.dart +++ b/boring_to_beautiful/step_03/lib/src/shared/providers/songs.dart @@ -52,9 +52,10 @@ final _songs = [ ArtistsProvider.shared.getArtist('jonjames')!, '3:35'.toDuration(), const MyArtistImage( - image: 'assets/images/albums/artist4-album2.jpg', - sourceLink: 'https://unsplash.com/photos/RQgKM1h2agA', - sourceName: 'Alexandru Acea'), + image: 'assets/images/albums/artist4-album2.jpg', + sourceLink: 'https://unsplash.com/photos/RQgKM1h2agA', + sourceName: 'Alexandru Acea', + ), ), RankedSong( 2, @@ -62,9 +63,10 @@ final _songs = [ ArtistsProvider.shared.getArtist('jonjames')!, '3:52'.toDuration(), const MyArtistImage( - image: 'assets/images/albums/artist4-album1.jpg', - sourceLink: 'https://unsplash.com/photos/ZWDg7v2FPWE', - sourceName: 'Jr Korpa'), + image: 'assets/images/albums/artist4-album1.jpg', + sourceLink: 'https://unsplash.com/photos/ZWDg7v2FPWE', + sourceName: 'Jr Korpa', + ), ), RankedSong( 3, @@ -72,9 +74,10 @@ final _songs = [ ArtistsProvider.shared.getArtist('jonjames')!, '3:39'.toDuration(), const MyArtistImage( - image: 'assets/images/albums/artist4-album3.jpg', - sourceLink: 'https://unsplash.com/photos/rX12B5uX7QM', - sourceName: 'Stormseeker'), + image: 'assets/images/albums/artist4-album3.jpg', + sourceLink: 'https://unsplash.com/photos/rX12B5uX7QM', + sourceName: 'Stormseeker', + ), ), RankedSong( 1, diff --git a/boring_to_beautiful/step_03/lib/src/shared/providers/theme.dart b/boring_to_beautiful/step_03/lib/src/shared/providers/theme.dart index a152dcdcba..a86e3daf64 100644 --- a/boring_to_beautiful/step_03/lib/src/shared/providers/theme.dart +++ b/boring_to_beautiful/step_03/lib/src/shared/providers/theme.dart @@ -28,12 +28,13 @@ class ThemeSettingChange extends Notification { } class ThemeProvider extends InheritedWidget { - const ThemeProvider( - {super.key, - required this.settings, - required this.lightDynamic, - required this.darkDynamic, - required super.child}); + const ThemeProvider({ + super.key, + required this.settings, + required this.lightDynamic, + required this.darkDynamic, + required super.child, + }); final ValueNotifier settings; final ColorScheme? lightDynamic; @@ -59,8 +60,9 @@ class ThemeProvider extends InheritedWidget { Color blend(Color targetColor) { return Color( - // ignore: deprecated_member_use - Blend.harmonize(targetColor.value, settings.value.sourceColor.value)); + // ignore: deprecated_member_use + Blend.harmonize(targetColor.value, settings.value.sourceColor.value), + ); } Color source(Color? target) { @@ -72,18 +74,18 @@ class ThemeProvider extends InheritedWidget { } ColorScheme colors(Brightness brightness, Color? targetColor) { - final dynamicPrimary = brightness == Brightness.light - ? lightDynamic?.primary - : darkDynamic?.primary; + final dynamicPrimary = + brightness == Brightness.light + ? lightDynamic?.primary + : darkDynamic?.primary; return ColorScheme.fromSeed( seedColor: dynamicPrimary ?? source(targetColor), brightness: brightness, ); } - ShapeBorder get shapeMedium => RoundedRectangleBorder( - borderRadius: BorderRadius.circular(8), - ); + ShapeBorder get shapeMedium => + RoundedRectangleBorder(borderRadius: BorderRadius.circular(8)); CardTheme cardTheme() { return CardTheme( @@ -113,21 +115,13 @@ class ThemeProvider extends InheritedWidget { labelColor: colors.secondary, unselectedLabelColor: colors.onSurfaceVariant, indicator: BoxDecoration( - border: Border( - bottom: BorderSide( - color: colors.secondary, - width: 2, - ), - ), + border: Border(bottom: BorderSide(color: colors.secondary, width: 2)), ), ); } BottomAppBarTheme bottomAppBarTheme(ColorScheme colors) { - return BottomAppBarTheme( - color: colors.surface, - elevation: 0, - ); + return BottomAppBarTheme(color: colors.surface, elevation: 0); } BottomNavigationBarThemeData bottomNavigationBarTheme(ColorScheme colors) { @@ -146,9 +140,7 @@ class ThemeProvider extends InheritedWidget { } DrawerThemeData drawerTheme(ColorScheme colors) { - return DrawerThemeData( - backgroundColor: colors.surface, - ); + return DrawerThemeData(backgroundColor: colors.surface); } ThemeData light([Color? targetColor]) { @@ -207,10 +199,7 @@ class ThemeProvider extends InheritedWidget { } class ThemeSettings { - ThemeSettings({ - required this.sourceColor, - required this.themeMode, - }); + ThemeSettings({required this.sourceColor, required this.themeMode}); final Color sourceColor; final ThemeMode themeMode; @@ -221,10 +210,7 @@ Color randomColor() { } // Custom Colors -const linkColor = CustomColor( - name: 'Link Color', - color: Color(0xFF00B0FF), -); +const linkColor = CustomColor(name: 'Link Color', color: Color(0xFF00B0FF)); class CustomColor { const CustomColor({ diff --git a/boring_to_beautiful/step_03/lib/src/shared/router.dart b/boring_to_beautiful/step_03/lib/src/shared/router.dart index 3efb7362fa..db82627246 100644 --- a/boring_to_beautiful/step_03/lib/src/shared/router.dart +++ b/boring_to_beautiful/step_03/lib/src/shared/router.dart @@ -20,11 +20,7 @@ final artistsProvider = ArtistsProvider(); final playlistsProvider = PlaylistsProvider(); const List destinations = [ - NavigationDestination( - label: 'Home', - icon: Icon(Icons.home), - route: '/', - ), + NavigationDestination(label: 'Home', icon: Icon(Icons.home), route: '/'), NavigationDestination( label: 'Playlists', icon: Icon(Icons.playlist_add_check), @@ -56,41 +52,46 @@ final appRouter = GoRouter( // HomeScreen GoRoute( path: '/', - pageBuilder: (context, state) => const MaterialPage( - key: _pageKey, - child: RootLayout( - key: _scaffoldKey, - currentIndex: 0, - child: HomeScreen(), - ), - ), + pageBuilder: + (context, state) => const MaterialPage( + key: _pageKey, + child: RootLayout( + key: _scaffoldKey, + currentIndex: 0, + child: HomeScreen(), + ), + ), ), // PlaylistHomeScreen GoRoute( path: '/playlists', - pageBuilder: (context, state) => const MaterialPage( - key: _pageKey, - child: RootLayout( - key: _scaffoldKey, - currentIndex: 1, - child: PlaylistHomeScreen(), - ), - ), - routes: [ - GoRoute( - path: ':pid', - pageBuilder: (context, state) => MaterialPage( - key: state.pageKey, + pageBuilder: + (context, state) => const MaterialPage( + key: _pageKey, child: RootLayout( key: _scaffoldKey, currentIndex: 1, - child: PlaylistScreen( - playlist: playlistsProvider - .getPlaylist(state.pathParameters['pid']!)!, - ), + child: PlaylistHomeScreen(), ), ), + routes: [ + GoRoute( + path: ':pid', + pageBuilder: + (context, state) => MaterialPage( + key: state.pageKey, + child: RootLayout( + key: _scaffoldKey, + currentIndex: 1, + child: PlaylistScreen( + playlist: + playlistsProvider.getPlaylist( + state.pathParameters['pid']!, + )!, + ), + ), + ), ), ], ), @@ -98,28 +99,32 @@ final appRouter = GoRouter( // ArtistHomeScreen GoRoute( path: '/artists', - pageBuilder: (context, state) => const MaterialPage( - key: _pageKey, - child: RootLayout( - key: _scaffoldKey, - currentIndex: 2, - child: ArtistsScreen(), - ), - ), - routes: [ - GoRoute( - path: ':aid', - pageBuilder: (context, state) => MaterialPage( - key: state.pageKey, + pageBuilder: + (context, state) => const MaterialPage( + key: _pageKey, child: RootLayout( key: _scaffoldKey, currentIndex: 2, - child: ArtistScreen( - artist: - artistsProvider.getArtist(state.pathParameters['aid']!)!, - ), + child: ArtistsScreen(), ), ), + routes: [ + GoRoute( + path: ':aid', + pageBuilder: + (context, state) => MaterialPage( + key: state.pageKey, + child: RootLayout( + key: _scaffoldKey, + currentIndex: 2, + child: ArtistScreen( + artist: + artistsProvider.getArtist( + state.pathParameters['aid']!, + )!, + ), + ), + ), // builder: (context, state) => ArtistScreen( // id: state.params['aid']!, // ), @@ -129,14 +134,15 @@ final appRouter = GoRouter( for (final route in destinations.skip(3)) GoRoute( path: route.route, - pageBuilder: (context, state) => MaterialPage( - key: _pageKey, - child: RootLayout( - key: _scaffoldKey, - currentIndex: destinations.indexOf(route), - child: const SizedBox(), - ), - ), + pageBuilder: + (context, state) => MaterialPage( + key: _pageKey, + child: RootLayout( + key: _scaffoldKey, + currentIndex: destinations.indexOf(route), + child: const SizedBox(), + ), + ), ), ], ); diff --git a/boring_to_beautiful/step_03/lib/src/shared/views/adaptive_image_card.dart b/boring_to_beautiful/step_03/lib/src/shared/views/adaptive_image_card.dart index 07cab2b0d7..99f5be0837 100644 --- a/boring_to_beautiful/step_03/lib/src/shared/views/adaptive_image_card.dart +++ b/boring_to_beautiful/step_03/lib/src/shared/views/adaptive_image_card.dart @@ -36,20 +36,13 @@ class AdaptiveImageCard extends StatelessWidget { ), ), Expanded( - child: Padding( - padding: const EdgeInsets.all(20), - child: child, - ), + child: Padding(padding: const EdgeInsets.all(20), child: child), ), ], ); } return Padding( - padding: const EdgeInsets.only( - left: 20, - bottom: 20, - top: 20, - ), + padding: const EdgeInsets.only(left: 20, bottom: 20, top: 20), child: Row( mainAxisAlignment: MainAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.end, @@ -65,11 +58,8 @@ class AdaptiveImageCard extends StatelessWidget { ), ), Expanded( - child: Padding( - padding: const EdgeInsets.all(20), - child: child, - ), - ) + child: Padding(padding: const EdgeInsets.all(20), child: child), + ), ], ), ); diff --git a/boring_to_beautiful/step_03/lib/src/shared/views/adaptive_navigation.dart b/boring_to_beautiful/step_03/lib/src/shared/views/adaptive_navigation.dart index 92734c9005..aa78766292 100644 --- a/boring_to_beautiful/step_03/lib/src/shared/views/adaptive_navigation.dart +++ b/boring_to_beautiful/step_03/lib/src/shared/views/adaptive_navigation.dart @@ -30,12 +30,15 @@ class AdaptiveNavigation extends StatelessWidget { NavigationRail( extended: dimens.maxWidth >= 800, minExtendedWidth: 180, - destinations: destinations - .map((e) => NavigationRailDestination( - icon: e.icon, - label: Text(e.label), - )) - .toList(), + destinations: + destinations + .map( + (e) => NavigationRailDestination( + icon: e.icon, + label: Text(e.label), + ), + ) + .toList(), selectedIndex: selectedIndex, onDestinationSelected: onDestinationSelected, ), diff --git a/boring_to_beautiful/step_03/lib/src/shared/views/article_content.dart b/boring_to_beautiful/step_03/lib/src/shared/views/article_content.dart index af243f015b..c5a0b5e62a 100644 --- a/boring_to_beautiful/step_03/lib/src/shared/views/article_content.dart +++ b/boring_to_beautiful/step_03/lib/src/shared/views/article_content.dart @@ -5,11 +5,7 @@ import 'package:flutter/material.dart'; class ArticleContent extends StatelessWidget { - const ArticleContent({ - super.key, - required this.child, - this.maxWidth = 960, - }); + const ArticleContent({super.key, required this.child, this.maxWidth = 960}); final double maxWidth; final Widget child; @@ -19,13 +15,8 @@ class ArticleContent extends StatelessWidget { return Container( alignment: Alignment.topCenter, child: ConstrainedBox( - constraints: BoxConstraints( - maxWidth: maxWidth, - ), - child: Padding( - padding: const EdgeInsets.all(15), - child: child, - ), + constraints: BoxConstraints(maxWidth: maxWidth), + child: Padding(padding: const EdgeInsets.all(15), child: child), ), ); } diff --git a/boring_to_beautiful/step_03/lib/src/shared/views/bottom_bar.dart b/boring_to_beautiful/step_03/lib/src/shared/views/bottom_bar.dart index 06e085a9b6..bf15ad9bb0 100644 --- a/boring_to_beautiful/step_03/lib/src/shared/views/bottom_bar.dart +++ b/boring_to_beautiful/step_03/lib/src/shared/views/bottom_bar.dart @@ -26,16 +26,18 @@ class BottomBar extends StatelessWidget implements PreferredSizeWidget { final bloc = BlocProvider.of(context); return BlocBuilder( bloc: bloc, - builder: (context, state) => _BottomBar( - artist: state.songWithProgress?.song.artist, - isMuted: state.isMuted, - isPlaying: state.isPlaying, - preferredSize: preferredSize, - progress: state.songWithProgress?.progress, - song: state.songWithProgress?.song, - togglePlayPause: () => bloc.add(const PlaybackEvent.togglePlayPause()), - volume: state.volume, - ), + builder: + (context, state) => _BottomBar( + artist: state.songWithProgress?.song.artist, + isMuted: state.isMuted, + isPlaying: state.isPlaying, + preferredSize: preferredSize, + progress: state.songWithProgress?.progress, + song: state.songWithProgress?.song, + togglePlayPause: + () => bloc.add(const PlaybackEvent.togglePlayPause()), + volume: state.volume, + ), ); } } @@ -63,10 +65,12 @@ class _BottomBar extends StatelessWidget { @override Widget build(BuildContext context) => LayoutBuilder( - builder: (context, constraints) => constraints.isTablet - ? _buildDesktopBar(context, constraints) - : _buildMobileBar(context, constraints), - ); + builder: + (context, constraints) => + constraints.isTablet + ? _buildDesktopBar(context, constraints) + : _buildMobileBar(context, constraints), + ); Widget _buildDesktopBar(BuildContext context, BoxConstraints constraints) { return ColoredBox( @@ -79,10 +83,7 @@ class _BottomBar extends StatelessWidget { Row( children: [ _AlbumArt(song: song), - _SongDetails( - artist: artist, - song: song, - ), + _SongDetails(artist: artist, song: song), ], ), Flexible( @@ -95,12 +96,7 @@ class _BottomBar extends StatelessWidget { isPlaying: isPlaying, togglePlayPause: togglePlayPause, ), - Center( - child: _ProgressBar( - progress: progress, - song: song, - ), - ), + Center(child: _ProgressBar(progress: progress, song: song)), ], ), ), @@ -114,17 +110,18 @@ class _BottomBar extends StatelessWidget { final overlay = Overlay.of(context); OverlayEntry? entry; entry = OverlayEntry( - builder: (context) => Stack( - children: [ - Positioned( - child: _FullScreenPlayer( - onClose: () { - entry?.remove(); - }, - ), + builder: + (context) => Stack( + children: [ + Positioned( + child: _FullScreenPlayer( + onClose: () { + entry?.remove(); + }, + ), + ), + ], ), - ], - ), ); overlay.insert(entry); }, @@ -136,10 +133,10 @@ class _BottomBar extends StatelessWidget { } double get songProgress => switch ((progress, song)) { - (Duration progress, Song song) => - progress.inMilliseconds / song.length.inMilliseconds, - _ => 0, - }; + (Duration progress, Song song) => + progress.inMilliseconds / song.length.inMilliseconds, + _ => 0, + }; Widget _buildMobileBar(BuildContext context, BoxConstraints constraints) { return ColoredBox( @@ -152,17 +149,18 @@ class _BottomBar extends StatelessWidget { final overlay = Overlay.of(context); OverlayEntry? entry; entry = OverlayEntry( - builder: (context) => Stack( - children: [ - Positioned( - child: _MobilePlayer( - onClose: () { - entry?.remove(); - }, - ), + builder: + (context) => Stack( + children: [ + Positioned( + child: _MobilePlayer( + onClose: () { + entry?.remove(); + }, + ), + ), + ], ), - ], - ), ); overlay.insert(entry); }, @@ -191,10 +189,7 @@ class _BottomBar extends StatelessWidget { mainAxisAlignment: MainAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start, children: [ - Text( - song?.title ?? '', - style: context.labelMedium, - ), + Text(song?.title ?? '', style: context.labelMedium), Text( song?.artist.name ?? '', style: context.labelSmall, @@ -220,10 +215,7 @@ class _BottomBar extends StatelessWidget { } class _ProgressBar extends StatelessWidget { - const _ProgressBar({ - required this.progress, - required this.song, - }); + const _ProgressBar({required this.progress, required this.song}); /// Current playback depth into user is into [song]. final Duration? progress; @@ -231,10 +223,10 @@ class _ProgressBar extends StatelessWidget { final Song? song; double get songProgress => switch ((progress, song)) { - (Duration progress, Song song) => - progress.inMilliseconds / song.length.inMilliseconds, - _ => 0, - }; + (Duration progress, Song song) => + progress.inMilliseconds / song.length.inMilliseconds, + _ => 0, + }; @override Widget build(BuildContext context) { @@ -252,29 +244,32 @@ class _ProgressBar extends StatelessWidget { children: [ const SizedBox(width: 10), SizedBox( - child: progress != null - ? Text(progress!.toHumanizedString(), - style: Theme.of(context).textTheme.bodySmall) - : const Text('-'), + child: + progress != null + ? Text( + progress!.toHumanizedString(), + style: Theme.of(context).textTheme.bodySmall, + ) + : const Text('-'), ), Expanded( child: Slider( value: songProgress.clamp(0, 1), divisions: 1000, onChanged: (percent) { - BlocProvider.of(context).add( - PlaybackEvent.moveToInSong(percent), - ); + BlocProvider.of( + context, + ).add(PlaybackEvent.moveToInSong(percent)); }, onChangeEnd: (percent) { - BlocProvider.of(context).add( - PlaybackEvent.moveToInSong(percent), - ); + BlocProvider.of( + context, + ).add(PlaybackEvent.moveToInSong(percent)); // Because dragging pauses auto playback, resume playing // once the user finishes dragging. - BlocProvider.of(context).add( - const PlaybackEvent.togglePlayPause(), - ); + BlocProvider.of( + context, + ).add(const PlaybackEvent.togglePlayPause()); }, activeColor: Theme.of(context).colorScheme.onTertiaryContainer, @@ -282,12 +277,15 @@ class _ProgressBar extends StatelessWidget { ), ), SizedBox( - child: song != null - ? Text(song!.length.toHumanizedString(), - style: Theme.of(context).textTheme.bodySmall) - : const Text('-'), + child: + song != null + ? Text( + song!.length.toHumanizedString(), + style: Theme.of(context).textTheme.bodySmall, + ) + : const Text('-'), ), - const SizedBox(width: 10) + const SizedBox(width: 10), ], ), ); @@ -297,10 +295,7 @@ class _ProgressBar extends StatelessWidget { } class _VolumeBar extends StatelessWidget { - const _VolumeBar({ - required this.volume, - required this.isMuted, - }); + const _VolumeBar({required this.volume, required this.isMuted}); /// The percentage, between 0 and 1, at which to render the volume slider. final double volume; @@ -313,17 +308,16 @@ class _VolumeBar extends StatelessWidget { @override Widget build(BuildContext context) { return ConstrainedBox( - constraints: const BoxConstraints( - maxWidth: 200, - ), + constraints: const BoxConstraints(maxWidth: 200), child: Padding( padding: const EdgeInsets.all(8), child: Row( children: [ GestureDetector( - onTap: () => BlocProvider.of(context).add( - const PlaybackEvent.toggleMute(), - ), + onTap: + () => BlocProvider.of( + context, + ).add(const PlaybackEvent.toggleMute()), child: Icon(!isMuted ? Icons.volume_mute : Icons.volume_off), ), Expanded( @@ -332,8 +326,10 @@ class _VolumeBar extends StatelessWidget { min: 0, max: 1, divisions: 100, - onChanged: (newValue) => BlocProvider.of(context) - .add(PlaybackEvent.setVolume(newValue)), + onChanged: + (newValue) => BlocProvider.of( + context, + ).add(PlaybackEvent.setVolume(newValue)), activeColor: Theme.of(context).colorScheme.onTertiaryContainer, inactiveColor: Theme.of(context).colorScheme.onSurface, ), @@ -356,49 +352,50 @@ class _PlaybackControls extends StatelessWidget { @override Widget build(BuildContext context) { - return LayoutBuilder(builder: (context, constraints) { - double iconSize = 24; - double playIconSize = 32; - double innerPadding = 16; - double playPadding = 20; - if (constraints.maxWidth < 500) { - iconSize = 21; - playIconSize = 28; - innerPadding = 14; - playPadding = 17; - } - return Row( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Padding( + return LayoutBuilder( + builder: (context, constraints) { + double iconSize = 24; + double playIconSize = 32; + double innerPadding = 16; + double playPadding = 20; + if (constraints.maxWidth < 500) { + iconSize = 21; + playIconSize = 28; + innerPadding = 14; + playPadding = 17; + } + return Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Padding( padding: EdgeInsets.fromLTRB(0, 0, innerPadding, 0), - child: Icon(Icons.shuffle, size: iconSize)), - Icon(Icons.skip_previous, size: iconSize), - Padding( - padding: EdgeInsets.fromLTRB(playPadding, 0, innerPadding, 0), - child: GestureDetector( - onTap: togglePlayPause, - child: Icon( - isPlaying ? Icons.pause_circle : Icons.play_circle, - size: playIconSize, + child: Icon(Icons.shuffle, size: iconSize), + ), + Icon(Icons.skip_previous, size: iconSize), + Padding( + padding: EdgeInsets.fromLTRB(playPadding, 0, innerPadding, 0), + child: GestureDetector( + onTap: togglePlayPause, + child: Icon( + isPlaying ? Icons.pause_circle : Icons.play_circle, + size: playIconSize, + ), ), ), - ), - Icon(Icons.skip_next, size: iconSize), - Padding( - padding: EdgeInsets.fromLTRB(innerPadding, 0, 0, 0), - child: Icon(Icons.repeat, size: iconSize), - ), - ], - ); - }); + Icon(Icons.skip_next, size: iconSize), + Padding( + padding: EdgeInsets.fromLTRB(innerPadding, 0, 0, 0), + child: Icon(Icons.repeat, size: iconSize), + ), + ], + ); + }, + ); } } class _AlbumArt extends StatelessWidget { - const _AlbumArt({ - required this.song, - }); + const _AlbumArt({required this.song}); final Song? song; @@ -409,21 +406,17 @@ class _AlbumArt extends StatelessWidget { child: SizedBox( width: 70, height: 70, - child: song != null - ? Image.asset(song!.image.image) - : Container( - color: Colors.pink[100], - ), + child: + song != null + ? Image.asset(song!.image.image) + : Container(color: Colors.pink[100]), ), ); } } class _SongDetails extends StatelessWidget { - const _SongDetails({ - required this.artist, - required this.song, - }); + const _SongDetails({required this.artist, required this.song}); final Artist? artist; final Song? song; @@ -455,9 +448,7 @@ class _SongDetails extends StatelessWidget { } class _FullScreenPlayer extends StatefulWidget { - const _FullScreenPlayer({ - required this.onClose, - }); + const _FullScreenPlayer({required this.onClose}); final VoidCallback onClose; @@ -489,29 +480,33 @@ class _FullScreenPlayerState extends State<_FullScreenPlayer> { final bloc = BlocProvider.of(context); return BlocBuilder( bloc: bloc, - builder: (context, state) => Theme( - data: ThemeProvider.of(context).dark(), - child: Scaffold( - body: LayoutBuilder( - builder: (context, dimens) { - return MouseRegion( - onHover: (_) { - setState(() { - _showControls = true; - }); - hideControls(); + builder: + (context, state) => Theme( + data: ThemeProvider.of(context).dark(), + child: Scaffold( + body: LayoutBuilder( + builder: (context, dimens) { + return MouseRegion( + onHover: (_) { + setState(() { + _showControls = true; + }); + hideControls(); + }, + child: buildPlayer(context, state, dimens), + ); }, - child: buildPlayer(context, state, dimens), - ); - }, + ), + ), ), - ), - ), ); } Widget buildPlayer( - BuildContext context, PlaybackState state, BoxConstraints dimens) { + BuildContext context, + PlaybackState state, + BoxConstraints dimens, + ) { final bloc = BlocProvider.of(context); final current = state.songWithProgress; final song = current?.song; @@ -519,26 +514,25 @@ class _FullScreenPlayerState extends State<_FullScreenPlayer> { fit: StackFit.expand, children: [ Positioned.fill( - child: current == null - ? const Center(child: Text('No song selected')) - : Container( - color: context.colors.shadow, - child: Opacity( - opacity: 0.3, - child: Image.asset( - song!.image.image, - fit: BoxFit.cover, + child: + current == null + ? const Center(child: Text('No song selected')) + : Container( + color: context.colors.shadow, + child: Opacity( + opacity: 0.3, + child: Image.asset(song!.image.image, fit: BoxFit.cover), ), ), - ), ), Positioned( top: 20, right: 20, child: IconButton( - color: song != null - ? context.colors.onSurface - : context.colors.onSurface, + color: + song != null + ? context.colors.onSurface + : context.colors.onSurface, icon: const Icon(Icons.fullscreen_exit), onPressed: widget.onClose, ), @@ -569,8 +563,9 @@ class _FullScreenPlayerState extends State<_FullScreenPlayer> { Text( song.artist.name, style: context.labelSmall!.copyWith( - fontSize: 20, - color: context.colors.onSurface.withAlpha(204)), + fontSize: 20, + color: context.colors.onSurface.withAlpha(204), + ), overflow: TextOverflow.clip, ), ], @@ -582,10 +577,7 @@ class _FullScreenPlayerState extends State<_FullScreenPlayer> { right: 20, left: 20, bottom: dimens.biggest.height * 0.2, - child: _ProgressBar( - progress: current?.progress, - song: song, - ), + child: _ProgressBar(progress: current?.progress, song: song), ), Positioned( right: 20, @@ -598,8 +590,8 @@ class _FullScreenPlayerState extends State<_FullScreenPlayer> { scale: 1.5, child: _PlaybackControls( isPlaying: state.isPlaying, - togglePlayPause: () => - bloc.add(const PlaybackEvent.togglePlayPause()), + togglePlayPause: + () => bloc.add(const PlaybackEvent.togglePlayPause()), ), ), ), @@ -611,9 +603,7 @@ class _FullScreenPlayerState extends State<_FullScreenPlayer> { } class _MobilePlayer extends StatelessWidget { - const _MobilePlayer({ - required this.onClose, - }); + const _MobilePlayer({required this.onClose}); final VoidCallback onClose; @@ -622,46 +612,52 @@ class _MobilePlayer extends StatelessWidget { final bloc = BlocProvider.of(context); return BlocBuilder( bloc: bloc, - builder: (context, state) => Theme( - data: ThemeProvider.of(context).dark(), - child: Scaffold( - body: LayoutBuilder( - builder: (context, dimens) { - return buildPlayer(context, state, dimens); - }, + builder: + (context, state) => Theme( + data: ThemeProvider.of(context).dark(), + child: Scaffold( + body: LayoutBuilder( + builder: (context, dimens) { + return buildPlayer(context, state, dimens); + }, + ), + ), ), - ), - ), ); } Widget buildPlayer( - BuildContext context, PlaybackState state, BoxConstraints dimens) { + BuildContext context, + PlaybackState state, + BoxConstraints dimens, + ) { final bloc = BlocProvider.of(context); final current = state.songWithProgress; return Stack( children: [ Positioned.fill( - child: current == null - ? const Center(child: Text('No song selected')) - : Container( - color: context.colors.shadow, - child: Opacity( - opacity: 0.3, - child: Image.asset( - current.song.image.image, - fit: BoxFit.cover, + child: + current == null + ? const Center(child: Text('No song selected')) + : Container( + color: context.colors.shadow, + child: Opacity( + opacity: 0.3, + child: Image.asset( + current.song.image.image, + fit: BoxFit.cover, + ), ), ), - ), ), Positioned( top: 20, left: 20, child: IconButton( - color: current?.song != null - ? context.colors.onSurface - : context.colors.onSurface, + color: + current?.song != null + ? context.colors.onSurface + : context.colors.onSurface, icon: const RotatedBox( quarterTurns: 1, child: Icon(Icons.chevron_right), @@ -676,10 +672,7 @@ class _MobilePlayer extends StatelessWidget { left: 0, right: 0, height: dimens.biggest.height * 0.5, - child: Image.asset( - current.song.image.image, - fit: BoxFit.contain, - ), + child: Image.asset(current.song.image.image, fit: BoxFit.contain), ), Positioned( left: 0, @@ -705,8 +698,9 @@ class _MobilePlayer extends StatelessWidget { Text( current.song.artist.name, style: context.labelSmall!.copyWith( - fontSize: 12, - color: context.colors.onSurface.withAlpha(204)), + fontSize: 12, + color: context.colors.onSurface.withAlpha(204), + ), overflow: TextOverflow.clip, ), ], @@ -718,15 +712,12 @@ class _MobilePlayer extends StatelessWidget { scale: 1.5, child: _PlaybackControls( isPlaying: state.isPlaying, - togglePlayPause: () => - bloc.add(const PlaybackEvent.togglePlayPause()), + togglePlayPause: + () => bloc.add(const PlaybackEvent.togglePlayPause()), ), ), ), - _ProgressBar( - progress: current.progress, - song: current.song, - ), + _ProgressBar(progress: current.progress, song: current.song), ], ), ), diff --git a/boring_to_beautiful/step_03/lib/src/shared/views/brightness_toggle.dart b/boring_to_beautiful/step_03/lib/src/shared/views/brightness_toggle.dart index 46dde4810f..5b5332392b 100644 --- a/boring_to_beautiful/step_03/lib/src/shared/views/brightness_toggle.dart +++ b/boring_to_beautiful/step_03/lib/src/shared/views/brightness_toggle.dart @@ -13,9 +13,10 @@ class BrightnessToggle extends StatelessWidget { Widget build(BuildContext context) { final isDark = Theme.of(context).brightness == Brightness.dark; return IconButton( - icon: Theme.of(context).brightness == Brightness.light - ? const Icon(Icons.brightness_3) - : const Icon(Icons.brightness_7), + icon: + Theme.of(context).brightness == Brightness.light + ? const Icon(Icons.brightness_3) + : const Icon(Icons.brightness_7), onPressed: () { final themeProvider = ThemeProvider.of(context); final settings = themeProvider.settings.value; diff --git a/boring_to_beautiful/step_03/lib/src/shared/views/center_row.dart b/boring_to_beautiful/step_03/lib/src/shared/views/center_row.dart index 36d428e3b8..c1f3effcc2 100644 --- a/boring_to_beautiful/step_03/lib/src/shared/views/center_row.dart +++ b/boring_to_beautiful/step_03/lib/src/shared/views/center_row.dart @@ -5,23 +5,12 @@ import 'package:flutter/material.dart'; class CenterRow extends StatelessWidget { - const CenterRow({ - super.key, - required this.child, - }); + const CenterRow({super.key, required this.child}); final Widget child; @override Widget build(BuildContext context) { - return Row( - children: [ - Expanded( - child: Center( - child: child, - ), - ), - ], - ); + return Row(children: [Expanded(child: Center(child: child))]); } } diff --git a/boring_to_beautiful/step_03/lib/src/shared/views/clickable.dart b/boring_to_beautiful/step_03/lib/src/shared/views/clickable.dart index cd7ef46268..f192f0b135 100644 --- a/boring_to_beautiful/step_03/lib/src/shared/views/clickable.dart +++ b/boring_to_beautiful/step_03/lib/src/shared/views/clickable.dart @@ -14,10 +14,7 @@ class Clickable extends StatelessWidget { Widget build(BuildContext context) { return MouseRegion( cursor: SystemMouseCursors.click, - child: GestureDetector( - onTap: onTap, - child: child, - ), + child: GestureDetector(onTap: onTap, child: child), ); } } diff --git a/boring_to_beautiful/step_03/lib/src/shared/views/events.dart b/boring_to_beautiful/step_03/lib/src/shared/views/events.dart index ed38465460..ab9140e56d 100644 --- a/boring_to_beautiful/step_03/lib/src/shared/views/events.dart +++ b/boring_to_beautiful/step_03/lib/src/shared/views/events.dart @@ -24,43 +24,18 @@ class Events extends StatelessWidget { child: DataTable( horizontalMargin: 5.0, columns: const [ - DataColumn( - label: Text( - 'Date', - ), - numeric: true, - ), - DataColumn( - label: Text( - 'Event', - ), - ), - DataColumn( - label: Text( - 'Location', - ), - ), - DataColumn( - label: Text( - 'More info', - ), - ), + DataColumn(label: Text('Date'), numeric: true), + DataColumn(label: Text('Event')), + DataColumn(label: Text('Location')), + DataColumn(label: Text('More info')), ], rows: [ for (final event in artist.events) DataRow( cells: [ - DataCell( - Text(event.date), - ), - DataCell( - Row(children: [ - Expanded(child: Text(event.title)), - ]), - ), - DataCell( - Text(event.location), - ), + DataCell(Text(event.date)), + DataCell(Row(children: [Expanded(child: Text(event.title))])), + DataCell(Text(event.location)), DataCell( Clickable( child: Text( @@ -70,8 +45,9 @@ class Events extends StatelessWidget { decoration: TextDecoration.underline, ), ), - onTap: () => - launchUrl(Uri.parse('https://docs.flutter.dev')), + onTap: + () => + launchUrl(Uri.parse('https://docs.flutter.dev')), ), ), ], diff --git a/boring_to_beautiful/step_03/lib/src/shared/views/hover_toggle.dart b/boring_to_beautiful/step_03/lib/src/shared/views/hover_toggle.dart index ec98c2863c..649cfcab63 100644 --- a/boring_to_beautiful/step_03/lib/src/shared/views/hover_toggle.dart +++ b/boring_to_beautiful/step_03/lib/src/shared/views/hover_toggle.dart @@ -31,9 +31,10 @@ class _HoverToggleState extends State with MaterialStateMixin { cursor: isHovered ? SystemMouseCursors.click : MouseCursor.defer, onEnter: (_) => setMaterialState(WidgetState.hovered, true), onExit: (_) => setMaterialState(WidgetState.hovered, false), - child: widget.mode == HoverMode.replace - ? _buildReplaceableChildren() - : _buildChildrenStack(), + child: + widget.mode == HoverMode.replace + ? _buildReplaceableChildren() + : _buildChildrenStack(), ), ); } @@ -41,12 +42,7 @@ class _HoverToggleState extends State with MaterialStateMixin { Widget _buildChildrenStack() { Widget child = isHovered ? Opacity(opacity: 0.2, child: widget.child) : widget.child; - return Stack( - children: [ - child, - if (isHovered) widget.hoverChild, - ], - ); + return Stack(children: [child, if (isHovered) widget.hoverChild]); } Widget _buildReplaceableChildren() => diff --git a/boring_to_beautiful/step_03/lib/src/shared/views/hoverable_song_play_button.dart b/boring_to_beautiful/step_03/lib/src/shared/views/hoverable_song_play_button.dart index 512f3d1d3c..dd588e3dbe 100644 --- a/boring_to_beautiful/step_03/lib/src/shared/views/hoverable_song_play_button.dart +++ b/boring_to_beautiful/step_03/lib/src/shared/views/hoverable_song_play_button.dart @@ -29,9 +29,10 @@ class HoverableSongPlayButton extends StatelessWidget { hoverChild: Center( child: GestureDetector( child: const Icon(Icons.play_arrow), - onTap: () => BlocProvider.of(context).add( - PlaybackEvent.changeSong(song), - ), + onTap: + () => BlocProvider.of( + context, + ).add(PlaybackEvent.changeSong(song)), ), ), mode: hoverMode, diff --git a/boring_to_beautiful/step_03/lib/src/shared/views/image_card.dart b/boring_to_beautiful/step_03/lib/src/shared/views/image_card.dart index 0af9f75f33..6e7f6cd42d 100644 --- a/boring_to_beautiful/step_03/lib/src/shared/views/image_card.dart +++ b/boring_to_beautiful/step_03/lib/src/shared/views/image_card.dart @@ -7,13 +7,14 @@ import '../../shared/extensions.dart'; import 'outlined_card.dart'; class ImageCard extends StatelessWidget { - const ImageCard( - {super.key, - required this.title, - required this.details, - required this.image, - this.subtitle, - this.clickable = false}); + const ImageCard({ + super.key, + required this.title, + required this.details, + required this.image, + this.subtitle, + this.clickable = false, + }); final String title; final String? subtitle; @@ -28,54 +29,51 @@ class ImageCard extends StatelessWidget { clickable: clickable, child: Padding( padding: const EdgeInsets.all(8.0), - child: LayoutBuilder(builder: (context, constraints) { - return Row( - children: [ - if (constraints.maxWidth > 600) - SizedBox( - width: 170, - height: 170, - child: Image.asset( - image, - fit: BoxFit.cover, + child: LayoutBuilder( + builder: (context, constraints) { + return Row( + children: [ + if (constraints.maxWidth > 600) + SizedBox( + width: 170, + height: 170, + child: Image.asset(image, fit: BoxFit.cover), ), - ), - Expanded( - child: Padding( - padding: padding, - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Padding( - padding: const EdgeInsets.only(bottom: 5), - child: Text( - title, - style: context.titleLarge! - .copyWith(fontWeight: FontWeight.bold), - ), - ), - if (subtitle != null) + Expanded( + child: Padding( + padding: padding, + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ Padding( - padding: const EdgeInsets.only(bottom: 10), + padding: const EdgeInsets.only(bottom: 5), child: Text( - subtitle!, - style: context.labelMedium, + title, + style: context.titleLarge!.copyWith( + fontWeight: FontWeight.bold, + ), ), ), - Text( - details, - style: context.labelMedium?.copyWith( - fontSize: 16, - height: 1.25, + if (subtitle != null) + Padding( + padding: const EdgeInsets.only(bottom: 10), + child: Text(subtitle!, style: context.labelMedium), + ), + Text( + details, + style: context.labelMedium?.copyWith( + fontSize: 16, + height: 1.25, + ), ), - ), - ], + ], + ), ), ), - ), - ], - ); - }), + ], + ); + }, + ), ), ); } diff --git a/boring_to_beautiful/step_03/lib/src/shared/views/image_tile.dart b/boring_to_beautiful/step_03/lib/src/shared/views/image_tile.dart index 4f2bbebb96..dd99152af5 100644 --- a/boring_to_beautiful/step_03/lib/src/shared/views/image_tile.dart +++ b/boring_to_beautiful/step_03/lib/src/shared/views/image_tile.dart @@ -21,19 +21,17 @@ class ImageTile extends StatelessWidget { @override Widget build(BuildContext context) { return OutlinedCard( - child: Column(crossAxisAlignment: CrossAxisAlignment.start, children: [ - Row( - children: [ - Expanded( - child: Image.asset(image, fit: BoxFit.cover), - ), - ], - ), - Column( - mainAxisAlignment: MainAxisAlignment.center, - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - Padding( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + children: [Expanded(child: Image.asset(image, fit: BoxFit.cover))], + ), + Column( + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Padding( padding: const EdgeInsets.fromLTRB(10, 5, 10, 5), child: Text( title, @@ -43,20 +41,25 @@ class ImageTile extends StatelessWidget { ), overflow: TextOverflow.ellipsis, maxLines: 1, - )), - Padding( - padding: const EdgeInsets.symmetric(vertical: 5, horizontal: 10), - child: Text( - subtitle, - overflow: TextOverflow.ellipsis, - style: context.labelSmall, - maxLines: 2, - textAlign: TextAlign.center, + ), ), - ), - ], - ) - ]), + Padding( + padding: const EdgeInsets.symmetric( + vertical: 5, + horizontal: 10, + ), + child: Text( + subtitle, + overflow: TextOverflow.ellipsis, + style: context.labelSmall, + maxLines: 2, + textAlign: TextAlign.center, + ), + ), + ], + ), + ], + ), ); } } diff --git a/boring_to_beautiful/step_03/lib/src/shared/views/outlined_card.dart b/boring_to_beautiful/step_03/lib/src/shared/views/outlined_card.dart index 61af3a0d64..a208659904 100644 --- a/boring_to_beautiful/step_03/lib/src/shared/views/outlined_card.dart +++ b/boring_to_beautiful/step_03/lib/src/shared/views/outlined_card.dart @@ -5,11 +5,7 @@ import 'package:flutter/material.dart'; class OutlinedCard extends StatefulWidget { - const OutlinedCard({ - super.key, - required this.child, - this.clickable = true, - }); + const OutlinedCard({super.key, required this.child, this.clickable = true}); final Widget child; final bool clickable; @@ -22,9 +18,10 @@ class _OutlinedCardState extends State { @override Widget build(BuildContext context) { return MouseRegion( - cursor: widget.clickable - ? SystemMouseCursors.click - : SystemMouseCursors.basic, + cursor: + widget.clickable + ? SystemMouseCursors.click + : SystemMouseCursors.basic, child: Container( // Add box decoration here child: widget.child, diff --git a/boring_to_beautiful/step_03/lib/src/shared/views/play_pause_listener.dart b/boring_to_beautiful/step_03/lib/src/shared/views/play_pause_listener.dart index 52fad00863..6b4fc66709 100644 --- a/boring_to_beautiful/step_03/lib/src/shared/views/play_pause_listener.dart +++ b/boring_to_beautiful/step_03/lib/src/shared/views/play_pause_listener.dart @@ -16,10 +16,7 @@ import '../playback/bloc/bloc.dart'; /// shortcuts. By sitting below that machinery, this installs a global Spacebar /// listener which toggles Playback, as is customary in music-playing apps. class PlayPauseListener extends StatelessWidget { - const PlayPauseListener({ - super.key, - required this.child, - }); + const PlayPauseListener({super.key, required this.child}); final Widget child; @@ -28,9 +25,7 @@ class PlayPauseListener extends StatelessWidget { // Immediately catch any [_PlayPauseIntent] events released by the inner // [Shortcuts] widget. return Actions( - actions: >{ - _PlayPauseIntent: _PlayPauseAction(), - }, + actions: >{_PlayPauseIntent: _PlayPauseAction()}, child: Shortcuts( // Register a shortcut for Spacebar presses that release a // [_PlayPauseIntent] up the tree to the nearest [Actions] widget. @@ -38,9 +33,9 @@ class PlayPauseListener extends StatelessWidget { const SingleActivator(LogicalKeyboardKey.space): _PlayPauseIntent( // Create a closure which sends a [TogglePlayPause] event to the // [PlaybackBloc]. - () => BlocProvider.of(context).add( - const PlaybackEvent.togglePlayPause(), - ), + () => BlocProvider.of( + context, + ).add(const PlaybackEvent.togglePlayPause()), ), }, child: child, diff --git a/boring_to_beautiful/step_03/lib/src/shared/views/root_layout.dart b/boring_to_beautiful/step_03/lib/src/shared/views/root_layout.dart index 878b57d729..ff6270248c 100644 --- a/boring_to_beautiful/step_03/lib/src/shared/views/root_layout.dart +++ b/boring_to_beautiful/step_03/lib/src/shared/views/root_layout.dart @@ -29,36 +29,37 @@ class RootLayout extends StatelessWidget { final bloc = BlocProvider.of(context); return BlocBuilder( bloc: bloc, - builder: (context, state) => LayoutBuilder(builder: (context, dimens) { - void onSelected(int index) { - final destination = router.destinations[index]; - go.GoRouter.of(context).go(destination.route); - } + builder: + (context, state) => LayoutBuilder( + builder: (context, dimens) { + void onSelected(int index) { + final destination = router.destinations[index]; + go.GoRouter.of(context).go(destination.route); + } - final current = state.songWithProgress; - return AdaptiveNavigation( - key: _navigationRailKey, - destinations: router.destinations - .map((e) => NavigationDestination( - icon: e.icon, - label: e.label, - )) - .toList(), - selectedIndex: currentIndex, - onDestinationSelected: onSelected, - child: Column( - children: [ - Expanded( - child: _Switcher( - key: _switcherKey, - child: child, + final current = state.songWithProgress; + return AdaptiveNavigation( + key: _navigationRailKey, + destinations: + router.destinations + .map( + (e) => NavigationDestination( + icon: e.icon, + label: e.label, + ), + ) + .toList(), + selectedIndex: currentIndex, + onDestinationSelected: onSelected, + child: Column( + children: [ + Expanded(child: _Switcher(key: _switcherKey, child: child)), + if (current != null) const BottomBar(), + ], ), - ), - if (current != null) const BottomBar(), - ], + ); + }, ), - ); - }), ); } } @@ -66,21 +67,18 @@ class RootLayout extends StatelessWidget { class _Switcher extends StatelessWidget { final Widget child; - const _Switcher({ - required this.child, - super.key, - }); + const _Switcher({required this.child, super.key}); @override Widget build(BuildContext context) { return UniversalPlatform.isDesktop ? child : AnimatedSwitcher( - key: key, - duration: const Duration(milliseconds: 200), - switchInCurve: Curves.easeInOut, - switchOutCurve: Curves.easeInOut, - child: child, - ); + key: key, + duration: const Duration(milliseconds: 200), + switchInCurve: Curves.easeInOut, + switchOutCurve: Curves.easeInOut, + child: child, + ); } } diff --git a/boring_to_beautiful/step_03/lib/src/shared/views/sidebar.dart b/boring_to_beautiful/step_03/lib/src/shared/views/sidebar.dart index 78c19b4d22..8815223b22 100644 --- a/boring_to_beautiful/step_03/lib/src/shared/views/sidebar.dart +++ b/boring_to_beautiful/step_03/lib/src/shared/views/sidebar.dart @@ -26,10 +26,7 @@ class SideBar extends StatelessWidget { title: const Text('Home'), onTap: () => GoRouter.of(context).go('/'), ), - const ListTile( - leading: Icon(Icons.search), - title: Text('Search'), - ), + const ListTile(leading: Icon(Icons.search), title: Text('Search')), ListTile( leading: const Icon(Icons.person), title: const Text('Artists'), @@ -64,10 +61,7 @@ class PlaylistNav extends StatelessWidget { children: [ Padding( padding: const EdgeInsets.only(left: 16, top: 16), - child: Text( - 'Playlists', - style: context.titleMedium, - ), + child: Text('Playlists', style: context.titleMedium), ), Expanded( child: ListView( @@ -114,10 +108,9 @@ class _PlaylistNavItemState extends State<_PlaylistNavItem> { @override void initState() { super.initState(); - _focusNode = FocusNode(debugLabel: widget.title) - ..addListener(() { - setState(() => _isSelected = _focusNode.hasPrimaryFocus); - }); + _focusNode = FocusNode(debugLabel: widget.title)..addListener(() { + setState(() => _isSelected = _focusNode.hasPrimaryFocus); + }); } @override diff --git a/boring_to_beautiful/step_03/pubspec.yaml b/boring_to_beautiful/step_03/pubspec.yaml index 0bc88d24c3..ad540a91c3 100644 --- a/boring_to_beautiful/step_03/pubspec.yaml +++ b/boring_to_beautiful/step_03/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: "none" version: 1.0.0 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 dependencies: flutter: diff --git a/boring_to_beautiful/step_04/lib/src/features/artists/view/artist_bio.dart b/boring_to_beautiful/step_04/lib/src/features/artists/view/artist_bio.dart index 227b8e91f9..8b614421db 100644 --- a/boring_to_beautiful/step_04/lib/src/features/artists/view/artist_bio.dart +++ b/boring_to_beautiful/step_04/lib/src/features/artists/view/artist_bio.dart @@ -18,9 +18,7 @@ class ArtistBio extends StatelessWidget { artist.bio, style: context.bodyLarge!.copyWith( fontSize: 16, - color: context.colors.onSurface.withAlpha( - 222, - ), + color: context.colors.onSurface.withAlpha(222), ), ); } diff --git a/boring_to_beautiful/step_04/lib/src/features/artists/view/artist_card.dart b/boring_to_beautiful/step_04/lib/src/features/artists/view/artist_card.dart index a63967f51d..1a56376a87 100644 --- a/boring_to_beautiful/step_04/lib/src/features/artists/view/artist_card.dart +++ b/boring_to_beautiful/step_04/lib/src/features/artists/view/artist_card.dart @@ -11,10 +11,7 @@ import '../../../shared/views/outlined_card.dart'; import '../../../shared/views/views.dart'; class ArtistCard extends StatelessWidget { - const ArtistCard({ - super.key, - required this.artist, - }); + const ArtistCard({super.key, required this.artist}); final Artist artist; @@ -24,65 +21,66 @@ class ArtistCard extends StatelessWidget { return OutlinedCard( child: LayoutBuilder( - builder: (context, dimens) => Row( - children: [ - SizedBox( - width: dimens.maxWidth * 0.4, - child: Image.asset( - artist.image.image, - fit: BoxFit.cover, - ), - ), - Expanded( - child: Padding( - padding: const EdgeInsets.only(left: 16), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Padding( - padding: const EdgeInsets.fromLTRB(0, 0, 15, 0), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text( - artist.name, - style: context.titleMedium, - overflow: TextOverflow.ellipsis, - maxLines: 1, - ), - const SizedBox(height: 10), - Text( - artist.bio, - overflow: TextOverflow.ellipsis, - style: context.labelSmall, - maxLines: 3, - ), - ]), - ), - if (dimens.maxHeight > 100) - Row( - children: [ - HoverableSongPlayButton( - size: const Size(50, 50), - song: nowPlaying, - child: Icon(Icons.play_circle, - color: context.colors.tertiary), + builder: + (context, dimens) => Row( + children: [ + SizedBox( + width: dimens.maxWidth * 0.4, + child: Image.asset(artist.image.image, fit: BoxFit.cover), + ), + Expanded( + child: Padding( + padding: const EdgeInsets.only(left: 16), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Padding( + padding: const EdgeInsets.fromLTRB(0, 0, 15, 0), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + artist.name, + style: context.titleMedium, + overflow: TextOverflow.ellipsis, + maxLines: 1, + ), + const SizedBox(height: 10), + Text( + artist.bio, + overflow: TextOverflow.ellipsis, + style: context.labelSmall, + maxLines: 3, + ), + ], ), - Text( - nowPlaying.title, - maxLines: 1, - overflow: TextOverflow.clip, - style: context.labelMedium, + ), + if (dimens.maxHeight > 100) + Row( + children: [ + HoverableSongPlayButton( + size: const Size(50, 50), + song: nowPlaying, + child: Icon( + Icons.play_circle, + color: context.colors.tertiary, + ), + ), + Text( + nowPlaying.title, + maxLines: 1, + overflow: TextOverflow.clip, + style: context.labelMedium, + ), + ], ), - ], - ), - ], + ], + ), + ), ), - ), + ], ), - ], - ), ), ); } diff --git a/boring_to_beautiful/step_04/lib/src/features/artists/view/artist_events.dart b/boring_to_beautiful/step_04/lib/src/features/artists/view/artist_events.dart index 8b064759c6..58b61b37df 100644 --- a/boring_to_beautiful/step_04/lib/src/features/artists/view/artist_events.dart +++ b/boring_to_beautiful/step_04/lib/src/features/artists/view/artist_events.dart @@ -70,53 +70,32 @@ class ArtistEvents extends StatelessWidget { ); }, columns: const [ - DataColumn( - label: Text( - 'Date', - ), - numeric: true, - ), - DataColumn( - label: Text( - 'Event', - ), - ), - DataColumn( - label: Text( - 'Location', - ), - ), - DataColumn( - label: Text( - 'More info', - ), - ), + DataColumn(label: Text('Date'), numeric: true), + DataColumn(label: Text('Event')), + DataColumn(label: Text('Location')), + DataColumn(label: Text('More info')), ], - rowBuilder: (item, index) => DataRow.byIndex(index: index, cells: [ - DataCell( - Text(item.date), - ), - DataCell( - Row(children: [ - Expanded(child: Text(item.title)), - ]), - ), - DataCell( - Text(item.location), - ), - DataCell( - Clickable( - child: Text( - item.link, - style: TextStyle( - color: linkColor.value(theme), - decoration: TextDecoration.underline, + rowBuilder: + (item, index) => DataRow.byIndex( + index: index, + cells: [ + DataCell(Text(item.date)), + DataCell(Row(children: [Expanded(child: Text(item.title))])), + DataCell(Text(item.location)), + DataCell( + Clickable( + child: Text( + item.link, + style: TextStyle( + color: linkColor.value(theme), + decoration: TextDecoration.underline, + ), + ), + onTap: () => launchUrl(Uri.parse('https://docs.flutter.dev')), + ), ), - ), - onTap: () => launchUrl(Uri.parse('https://docs.flutter.dev')), + ], ), - ), - ]), ); } } diff --git a/boring_to_beautiful/step_04/lib/src/features/artists/view/artist_ranked_songs.dart b/boring_to_beautiful/step_04/lib/src/features/artists/view/artist_ranked_songs.dart index e484ecb3d7..3d1f4e2cf1 100644 --- a/boring_to_beautiful/step_04/lib/src/features/artists/view/artist_ranked_songs.dart +++ b/boring_to_beautiful/step_04/lib/src/features/artists/view/artist_ranked_songs.dart @@ -27,52 +27,42 @@ class ArtistRankedSongs extends StatelessWidget { title: Text(song.title), subtitle: Text(song.length.toHumanizedString()), trailing: Text(song.ranking.toString()), - onTap: () => BlocProvider.of(context).add( - PlaybackEvent.changeSong(song), - ), + onTap: + () => BlocProvider.of( + context, + ).add(PlaybackEvent.changeSong(song)), ); }, columns: const [ - DataColumn( - label: Text( - 'Ranking', - ), - numeric: true, - ), - DataColumn( - label: Text( - 'Title', - ), - ), - DataColumn( - label: Text( - 'Length', - ), - ), + DataColumn(label: Text('Ranking'), numeric: true), + DataColumn(label: Text('Title')), + DataColumn(label: Text('Length')), ], - rowBuilder: (song, index) => DataRow.byIndex(index: index, cells: [ - DataCell( - HoverableSongPlayButton( - song: song, - child: Center( - child: Text(song.ranking.toString()), - ), + rowBuilder: + (song, index) => DataRow.byIndex( + index: index, + cells: [ + DataCell( + HoverableSongPlayButton( + song: song, + child: Center(child: Text(song.ranking.toString())), + ), + ), + DataCell( + Row( + children: [ + Padding( + padding: const EdgeInsets.all(2), + child: ClippedImage(song.image.image), + ), + const SizedBox(width: 5.0), + Expanded(child: Text(song.title)), + ], + ), + ), + DataCell(Text(song.length.toHumanizedString())), + ], ), - ), - DataCell( - Row(children: [ - Padding( - padding: const EdgeInsets.all(2), - child: ClippedImage(song.image.image), - ), - const SizedBox(width: 5.0), - Expanded(child: Text(song.title)), - ]), - ), - DataCell( - Text(song.length.toHumanizedString()), - ), - ]), ); } } diff --git a/boring_to_beautiful/step_04/lib/src/features/artists/view/artist_updates.dart b/boring_to_beautiful/step_04/lib/src/features/artists/view/artist_updates.dart index e5b8bb5fe9..a0fabf7330 100644 --- a/boring_to_beautiful/step_04/lib/src/features/artists/view/artist_updates.dart +++ b/boring_to_beautiful/step_04/lib/src/features/artists/view/artist_updates.dart @@ -30,7 +30,7 @@ class ArtistUpdates extends StatelessWidget { child: Text(update), ), ), - ) + ), ], ); } diff --git a/boring_to_beautiful/step_04/lib/src/features/artists/view/artists_screen.dart b/boring_to_beautiful/step_04/lib/src/features/artists/view/artists_screen.dart index 8afe759807..225d74847b 100644 --- a/boring_to_beautiful/step_04/lib/src/features/artists/view/artists_screen.dart +++ b/boring_to_beautiful/step_04/lib/src/features/artists/view/artists_screen.dart @@ -17,33 +17,33 @@ class ArtistsScreen extends StatelessWidget { Widget build(BuildContext context) { final artistsProvider = ArtistsProvider(); final artists = artistsProvider.artists; - return LayoutBuilder(builder: (context, constraints) { - return Scaffold( - primary: false, - appBar: AppBar( - title: const Text('ARTISTS'), - toolbarHeight: kToolbarHeight * 2, - ), - body: GridView.builder( - padding: const EdgeInsets.all(15), - gridDelegate: SliverGridDelegateWithFixedCrossAxisCount( - crossAxisCount: max(1, (constraints.maxWidth ~/ 400).toInt()), - childAspectRatio: 2.5, - mainAxisSpacing: 10, - crossAxisSpacing: 10, + return LayoutBuilder( + builder: (context, constraints) { + return Scaffold( + primary: false, + appBar: AppBar( + title: const Text('ARTISTS'), + toolbarHeight: kToolbarHeight * 2, ), - itemCount: artists.length, - itemBuilder: (context, index) { - final artist = artists[index]; - return GestureDetector( - child: ArtistCard( - artist: artist, - ), - onTap: () => GoRouter.of(context).go('/artists/${artist.id}'), - ); - }, - ), - ); - }); + body: GridView.builder( + padding: const EdgeInsets.all(15), + gridDelegate: SliverGridDelegateWithFixedCrossAxisCount( + crossAxisCount: max(1, (constraints.maxWidth ~/ 400).toInt()), + childAspectRatio: 2.5, + mainAxisSpacing: 10, + crossAxisSpacing: 10, + ), + itemCount: artists.length, + itemBuilder: (context, index) { + final artist = artists[index]; + return GestureDetector( + child: ArtistCard(artist: artist), + onTap: () => GoRouter.of(context).go('/artists/${artist.id}'), + ); + }, + ), + ); + }, + ); } } diff --git a/boring_to_beautiful/step_04/lib/src/features/home/view/home_artists.dart b/boring_to_beautiful/step_04/lib/src/features/home/view/home_artists.dart index beb2c0ece4..b5a3a33ecd 100644 --- a/boring_to_beautiful/step_04/lib/src/features/home/view/home_artists.dart +++ b/boring_to_beautiful/step_04/lib/src/features/home/view/home_artists.dart @@ -22,27 +22,25 @@ class HomeArtists extends StatelessWidget { Widget build(BuildContext context) { return Padding( padding: const EdgeInsets.all(15), - child: constraints.isMobile - ? Column( - children: [ - for (final artist in artists) buildTile(context, artist), - ], - ) - : Row(children: [ - for (final artist in artists) - Flexible( - flex: 1, - child: buildTile(context, artist), - ), - ]), + child: + constraints.isMobile + ? Column( + children: [ + for (final artist in artists) buildTile(context, artist), + ], + ) + : Row( + children: [ + for (final artist in artists) + Flexible(flex: 1, child: buildTile(context, artist)), + ], + ), ); } Widget buildTile(BuildContext context, Artist artist) { return ListTile( - leading: CircleAvatar( - backgroundImage: AssetImage(artist.image.image), - ), + leading: CircleAvatar(backgroundImage: AssetImage(artist.image.image)), title: Text( artist.updates.first, maxLines: 2, diff --git a/boring_to_beautiful/step_04/lib/src/features/home/view/home_recent.dart b/boring_to_beautiful/step_04/lib/src/features/home/view/home_recent.dart index c77500a663..8ba86d117d 100644 --- a/boring_to_beautiful/step_04/lib/src/features/home/view/home_recent.dart +++ b/boring_to_beautiful/step_04/lib/src/features/home/view/home_recent.dart @@ -12,8 +12,11 @@ import '../../../shared/views/image_clipper.dart'; import '../../../shared/views/outlined_card.dart'; class HomeRecent extends StatelessWidget { - const HomeRecent( - {super.key, required this.playlists, this.axis = Axis.horizontal}); + const HomeRecent({ + super.key, + required this.playlists, + this.axis = Axis.horizontal, + }); final List playlists; final Axis axis; @@ -43,8 +46,10 @@ class HomeRecent extends StatelessWidget { Row( children: [ Expanded( - child: Image.asset(playlist.cover.image, - fit: BoxFit.cover), + child: Image.asset( + playlist.cover.image, + fit: BoxFit.cover, + ), ), ], ), @@ -79,10 +84,7 @@ class HomeRecent extends StatelessWidget { crossAxisAlignment: CrossAxisAlignment.center, mainAxisSize: MainAxisSize.max, children: [ - ClippedImage( - playlist.cover.image, - height: 200, - ), + ClippedImage(playlist.cover.image, height: 200), Expanded( child: Center( child: Padding( @@ -104,23 +106,24 @@ class HomeRecent extends StatelessWidget { return Column( children: [ Padding( - padding: const EdgeInsets.fromLTRB(10, 5, 10, 5), - child: Text( - playlist.title, - style: context.titleSmall!.copyWith( - fontWeight: FontWeight.bold, - ), - overflow: TextOverflow.ellipsis, - maxLines: 1, - textAlign: TextAlign.center, - )), + padding: const EdgeInsets.fromLTRB(10, 5, 10, 5), + child: Text( + playlist.title, + style: context.titleSmall!.copyWith(fontWeight: FontWeight.bold), + overflow: TextOverflow.ellipsis, + maxLines: 1, + textAlign: TextAlign.center, + ), + ), Padding( padding: const EdgeInsets.symmetric(vertical: 5, horizontal: 10), - child: Text(playlist.description, - overflow: TextOverflow.ellipsis, - style: context.labelSmall, - maxLines: 2, - textAlign: TextAlign.center), + child: Text( + playlist.description, + overflow: TextOverflow.ellipsis, + style: context.labelSmall, + maxLines: 2, + textAlign: TextAlign.center, + ), ), ], ); diff --git a/boring_to_beautiful/step_04/lib/src/features/home/view/home_screen.dart b/boring_to_beautiful/step_04/lib/src/features/home/view/home_screen.dart index 715ddf435c..bcff070874 100644 --- a/boring_to_beautiful/step_04/lib/src/features/home/view/home_screen.dart +++ b/boring_to_beautiful/step_04/lib/src/features/home/view/home_screen.dart @@ -61,10 +61,11 @@ class _HomeScreenState extends State { children: [ const HomeHighlight(), LayoutBuilder( - builder: (context, constraints) => HomeArtists( - artists: artists, - constraints: constraints, - ), + builder: + (context, constraints) => HomeArtists( + artists: artists, + constraints: constraints, + ), ), ], ), @@ -81,9 +82,7 @@ class _HomeScreenState extends State { style: context.headlineSmall, ), ), - HomeRecent( - playlists: playlists, - ), + HomeRecent(playlists: playlists), ], ), ), @@ -101,19 +100,20 @@ class _HomeScreenState extends State { crossAxisAlignment: CrossAxisAlignment.start, children: [ Padding( - padding: - const EdgeInsets.all(2), // Modify this line + padding: const EdgeInsets.all( + 2, + ), // Modify this line child: Text( 'Top Songs Today', style: context.titleLarge, ), ), LayoutBuilder( - builder: (context, constraints) => - PlaylistSongs( - playlist: topSongs, - constraints: constraints, - ), + builder: + (context, constraints) => PlaylistSongs( + playlist: topSongs, + constraints: constraints, + ), ), ], ), @@ -126,19 +126,20 @@ class _HomeScreenState extends State { crossAxisAlignment: CrossAxisAlignment.start, children: [ Padding( - padding: - const EdgeInsets.all(2), // Modify this line + padding: const EdgeInsets.all( + 2, + ), // Modify this line child: Text( 'New Releases', style: context.titleLarge, ), ), LayoutBuilder( - builder: (context, constraints) => - PlaylistSongs( - playlist: newReleases, - constraints: constraints, - ), + builder: + (context, constraints) => PlaylistSongs( + playlist: newReleases, + constraints: constraints, + ), ), ], ), diff --git a/boring_to_beautiful/step_04/lib/src/features/playlists/view/playlist_home_screen.dart b/boring_to_beautiful/step_04/lib/src/features/playlists/view/playlist_home_screen.dart index a80d767930..978608ccad 100644 --- a/boring_to_beautiful/step_04/lib/src/features/playlists/view/playlist_home_screen.dart +++ b/boring_to_beautiful/step_04/lib/src/features/playlists/view/playlist_home_screen.dart @@ -44,8 +44,10 @@ class PlaylistHomeScreen extends StatelessWidget { title: playlist.title, subtitle: playlist.description, ), - onTap: () => - GoRouter.of(context).go('/playlists/${playlist.id}'), + onTap: + () => GoRouter.of( + context, + ).go('/playlists/${playlist.id}'), ); }, ), diff --git a/boring_to_beautiful/step_04/lib/src/features/playlists/view/playlist_screen.dart b/boring_to_beautiful/step_04/lib/src/features/playlists/view/playlist_screen.dart index 5dc2f0744f..c41f500a92 100644 --- a/boring_to_beautiful/step_04/lib/src/features/playlists/view/playlist_screen.dart +++ b/boring_to_beautiful/step_04/lib/src/features/playlists/view/playlist_screen.dart @@ -20,114 +20,116 @@ class PlaylistScreen extends StatelessWidget { @override Widget build(BuildContext context) { - return LayoutBuilder(builder: (context, constraints) { - final colors = Theme.of(context).colorScheme; - final double headerHeight = constraints.isMobile - ? max(constraints.biggest.height * 0.5, 450) - : max(constraints.biggest.height * 0.25, 250); - if (constraints.isMobile) { - return Scaffold( - appBar: AppBar( - leading: BackButton( - onPressed: () => GoRouter.of(context).go('/playlists'), - ), - title: Text(playlist.title), - actions: [ - IconButton( - icon: const Icon(Icons.play_circle_fill), - onPressed: () {}, - ), - IconButton( - onPressed: () {}, - icon: const Icon(Icons.shuffle), - ), - ], - ), - body: ArticleContent( - child: PlaylistSongs( - playlist: playlist, - constraints: constraints, - ), - ), - ); - } - return Scaffold( - body: CustomScrollView( - slivers: [ - SliverAppBar( + return LayoutBuilder( + builder: (context, constraints) { + final colors = Theme.of(context).colorScheme; + final double headerHeight = + constraints.isMobile + ? max(constraints.biggest.height * 0.5, 450) + : max(constraints.biggest.height * 0.25, 250); + if (constraints.isMobile) { + return Scaffold( + appBar: AppBar( leading: BackButton( onPressed: () => GoRouter.of(context).go('/playlists'), ), - expandedHeight: headerHeight, - pinned: false, - flexibleSpace: FlexibleSpaceBar( - background: AdaptiveImageCard( - axis: constraints.isMobile ? Axis.vertical : Axis.horizontal, - constraints: - constraints.copyWith(maxHeight: headerHeight).normalize(), - image: playlist.cover.image, - child: Column( - mainAxisAlignment: MainAxisAlignment.end, - crossAxisAlignment: CrossAxisAlignment.start, - mainAxisSize: MainAxisSize.min, - children: [ - Text( - 'PLAYLIST', - style: context.titleSmall! - .copyWith(color: colors.onSurface), - ), - Text( - playlist.title, - style: context.displaySmall! - .copyWith(color: colors.onSurface), - ), - Text( - playlist.description, - style: context.bodyLarge!.copyWith( - color: colors.onSurface.withAlpha(204), + title: Text(playlist.title), + actions: [ + IconButton( + icon: const Icon(Icons.play_circle_fill), + onPressed: () {}, + ), + IconButton(onPressed: () {}, icon: const Icon(Icons.shuffle)), + ], + ), + body: ArticleContent( + child: PlaylistSongs( + playlist: playlist, + constraints: constraints, + ), + ), + ); + } + return Scaffold( + body: CustomScrollView( + slivers: [ + SliverAppBar( + leading: BackButton( + onPressed: () => GoRouter.of(context).go('/playlists'), + ), + expandedHeight: headerHeight, + pinned: false, + flexibleSpace: FlexibleSpaceBar( + background: AdaptiveImageCard( + axis: + constraints.isMobile ? Axis.vertical : Axis.horizontal, + constraints: + constraints + .copyWith(maxHeight: headerHeight) + .normalize(), + image: playlist.cover.image, + child: Column( + mainAxisAlignment: MainAxisAlignment.end, + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisSize: MainAxisSize.min, + children: [ + Text( + 'PLAYLIST', + style: context.titleSmall!.copyWith( + color: colors.onSurface, + ), ), - ), - const SizedBox(height: 8), - Row( - children: [ - IconButton( - icon: Icon( - Icons.play_circle_fill, - color: colors.tertiary, - ), - onPressed: () {}, + Text( + playlist.title, + style: context.displaySmall!.copyWith( + color: colors.onSurface, ), - TextButton.icon( - onPressed: () {}, - icon: Icon( - Icons.shuffle, - color: colors.tertiary, - ), - label: Text( - 'Shuffle', - style: context.bodySmall!.copyWith( + ), + Text( + playlist.description, + style: context.bodyLarge!.copyWith( + color: colors.onSurface.withAlpha(204), + ), + ), + const SizedBox(height: 8), + Row( + children: [ + IconButton( + icon: Icon( + Icons.play_circle_fill, color: colors.tertiary, ), + onPressed: () {}, ), - ), - ], - ), - ], + TextButton.icon( + onPressed: () {}, + icon: Icon(Icons.shuffle, color: colors.tertiary), + label: Text( + 'Shuffle', + style: context.bodySmall!.copyWith( + color: colors.tertiary, + ), + ), + ), + ], + ), + ], + ), ), ), ), - ), - SliverToBoxAdapter( - child: ArticleContent( - child: PlaylistSongs( - playlist: playlist, - constraints: constraints, + SliverToBoxAdapter( + child: ArticleContent( + child: PlaylistSongs( + playlist: playlist, + constraints: constraints, + ), ), ), - ), - ], - ), - ); - }); + ], + ), + ); + }, + ); } } diff --git a/boring_to_beautiful/step_04/lib/src/features/playlists/view/playlist_songs.dart b/boring_to_beautiful/step_04/lib/src/features/playlists/view/playlist_songs.dart index e944336540..1d5a2e9879 100644 --- a/boring_to_beautiful/step_04/lib/src/features/playlists/view/playlist_songs.dart +++ b/boring_to_beautiful/step_04/lib/src/features/playlists/view/playlist_songs.dart @@ -12,8 +12,11 @@ import '../../../shared/views/image_clipper.dart'; import '../../../shared/views/views.dart'; class PlaylistSongs extends StatelessWidget { - const PlaylistSongs( - {super.key, required this.playlist, required this.constraints}); + const PlaylistSongs({ + super.key, + required this.playlist, + required this.constraints, + }); final Playlist playlist; final BoxConstraints constraints; @@ -25,14 +28,9 @@ class PlaylistSongs extends StatelessWidget { breakpoint: 450, columns: const [ DataColumn( - label: Padding( - padding: EdgeInsets.only(left: 20), - child: Text('#'), - ), - ), - DataColumn( - label: Text('Title'), + label: Padding(padding: EdgeInsets.only(left: 20), child: Text('#')), ), + DataColumn(label: Text('Title')), DataColumn( label: Padding( padding: EdgeInsets.only(right: 10), @@ -40,38 +38,40 @@ class PlaylistSongs extends StatelessWidget { ), ), ], - rowBuilder: (context, index) => DataRow.byIndex( - index: index, - cells: [ - DataCell( - // Add HoverableSongPlayButton - Center( - child: Text( - (index + 1).toString(), - textAlign: TextAlign.center, + rowBuilder: + (context, index) => DataRow.byIndex( + index: index, + cells: [ + DataCell( + // Add HoverableSongPlayButton + Center( + child: Text( + (index + 1).toString(), + textAlign: TextAlign.center, + ), + ), ), - ), - ), - DataCell( - Row(children: [ - Padding( - padding: const EdgeInsets.all(2), - child: ClippedImage(playlist.songs[index].image.image), + DataCell( + Row( + children: [ + Padding( + padding: const EdgeInsets.all(2), + child: ClippedImage(playlist.songs[index].image.image), + ), + const SizedBox(width: 10), + Expanded(child: Text(playlist.songs[index].title)), + ], + ), ), - const SizedBox(width: 10), - Expanded(child: Text(playlist.songs[index].title)), - ]), - ), - DataCell( - Text(playlist.songs[index].length.toHumanizedString()), + DataCell(Text(playlist.songs[index].length.toHumanizedString())), + ], ), - ], - ), itemBuilder: (song, index) { return ListTile( - onTap: () => BlocProvider.of(context).add( - PlaybackEvent.changeSong(song), - ), + onTap: + () => BlocProvider.of( + context, + ).add(PlaybackEvent.changeSong(song)), leading: ClippedImage(song.image.image), title: Text(song.title), subtitle: Text(song.length.toHumanizedString()), diff --git a/boring_to_beautiful/step_04/lib/src/shared/app.dart b/boring_to_beautiful/step_04/lib/src/shared/app.dart index 3910d8f276..ed27418bd4 100644 --- a/boring_to_beautiful/step_04/lib/src/shared/app.dart +++ b/boring_to_beautiful/step_04/lib/src/shared/app.dart @@ -19,45 +19,46 @@ class MyApp extends StatefulWidget { } class _MyAppState extends State { - final settings = ValueNotifier(ThemeSettings( - sourceColor: Colors.pink, - themeMode: ThemeMode.system, - )); + final settings = ValueNotifier( + ThemeSettings(sourceColor: Colors.pink, themeMode: ThemeMode.system), + ); @override Widget build(BuildContext context) { return BlocProvider( create: (context) => PlaybackBloc(), child: DynamicColorBuilder( - builder: (lightDynamic, darkDynamic) => ThemeProvider( - lightDynamic: lightDynamic, - darkDynamic: darkDynamic, - settings: settings, - child: NotificationListener( - onNotification: (notification) { - settings.value = notification.settings; - return true; - }, - child: ValueListenableBuilder( - valueListenable: settings, - builder: (context, value, _) { - final theme = ThemeProvider.of(context); - return MaterialApp.router( - debugShowCheckedModeBanner: false, - title: 'Flutter Demo', - theme: theme.light(settings.value.sourceColor), - darkTheme: theme.dark(settings.value.sourceColor), - themeMode: theme.themeMode(), - routeInformationParser: appRouter.routeInformationParser, - routeInformationProvider: - appRouter.routeInformationProvider, - routerDelegate: appRouter.routerDelegate, - builder: (context, child) { - return PlayPauseListener(child: child!); - }, - ); + builder: + (lightDynamic, darkDynamic) => ThemeProvider( + lightDynamic: lightDynamic, + darkDynamic: darkDynamic, + settings: settings, + child: NotificationListener( + onNotification: (notification) { + settings.value = notification.settings; + return true; }, + child: ValueListenableBuilder( + valueListenable: settings, + builder: (context, value, _) { + final theme = ThemeProvider.of(context); + return MaterialApp.router( + debugShowCheckedModeBanner: false, + title: 'Flutter Demo', + theme: theme.light(settings.value.sourceColor), + darkTheme: theme.dark(settings.value.sourceColor), + themeMode: theme.themeMode(), + routeInformationParser: appRouter.routeInformationParser, + routeInformationProvider: + appRouter.routeInformationProvider, + routerDelegate: appRouter.routerDelegate, + builder: (context, child) { + return PlayPauseListener(child: child!); + }, + ); + }, + ), ), - )), + ), ), ); } diff --git a/boring_to_beautiful/step_04/lib/src/shared/classes/image.dart b/boring_to_beautiful/step_04/lib/src/shared/classes/image.dart index a1ef427c1d..00a6472b4a 100644 --- a/boring_to_beautiful/step_04/lib/src/shared/classes/image.dart +++ b/boring_to_beautiful/step_04/lib/src/shared/classes/image.dart @@ -3,10 +3,11 @@ // found in the LICENSE file. class MyArtistImage { - const MyArtistImage( - {required this.image, - required this.sourceName, - required this.sourceLink}); + const MyArtistImage({ + required this.image, + required this.sourceName, + required this.sourceLink, + }); final String image; final String sourceName; diff --git a/boring_to_beautiful/step_04/lib/src/shared/classes/playlist.dart b/boring_to_beautiful/step_04/lib/src/shared/classes/playlist.dart index 59899dc619..5f0225059d 100644 --- a/boring_to_beautiful/step_04/lib/src/shared/classes/playlist.dart +++ b/boring_to_beautiful/step_04/lib/src/shared/classes/playlist.dart @@ -17,8 +17,9 @@ class Playlist { this.description = '', required this.songs, this.cover = const MyArtistImage( - image: 'assets/images/record.jpeg', - sourceName: 'Adobe Stock Images', - sourceLink: ''), + image: 'assets/images/record.jpeg', + sourceName: 'Adobe Stock Images', + sourceLink: '', + ), }); } diff --git a/boring_to_beautiful/step_04/lib/src/shared/classes/ranked_song.dart b/boring_to_beautiful/step_04/lib/src/shared/classes/ranked_song.dart index 5908268c8c..2362bfae64 100644 --- a/boring_to_beautiful/step_04/lib/src/shared/classes/ranked_song.dart +++ b/boring_to_beautiful/step_04/lib/src/shared/classes/ranked_song.dart @@ -7,7 +7,11 @@ import './classes.dart'; class RankedSong extends Song { final int ranking; - const RankedSong(this.ranking, String title, Artist artist, Duration length, - MyArtistImage image) - : super(title, artist, length, image); + const RankedSong( + this.ranking, + String title, + Artist artist, + Duration length, + MyArtistImage image, + ) : super(title, artist, length, image); } diff --git a/boring_to_beautiful/step_04/lib/src/shared/extensions.dart b/boring_to_beautiful/step_04/lib/src/shared/extensions.dart index 8b7e41b988..fe65add57c 100644 --- a/boring_to_beautiful/step_04/lib/src/shared/extensions.dart +++ b/boring_to_beautiful/step_04/lib/src/shared/extensions.dart @@ -9,51 +9,36 @@ extension TypographyUtils on BuildContext { ThemeData get theme => Theme.of(this); TextTheme get textTheme => GoogleFonts.montserratTextTheme(theme.textTheme); ColorScheme get colors => theme.colorScheme; - TextStyle? get displayLarge => textTheme.displayLarge?.copyWith( - color: colors.onSurface, - ); - TextStyle? get displayMedium => textTheme.displayMedium?.copyWith( - color: colors.onSurface, - ); - TextStyle? get displaySmall => textTheme.displaySmall?.copyWith( - color: colors.onSurface, - ); - TextStyle? get headlineLarge => textTheme.headlineLarge?.copyWith( - color: colors.onSurface, - ); - TextStyle? get headlineMedium => textTheme.headlineMedium?.copyWith( - color: colors.onSurface, - ); - TextStyle? get headlineSmall => textTheme.headlineSmall?.copyWith( - color: colors.onSurface, - ); - TextStyle? get titleLarge => textTheme.titleLarge?.copyWith( - color: colors.onSurface, - ); - TextStyle? get titleMedium => textTheme.titleMedium?.copyWith( - color: colors.onSurface, - ); - TextStyle? get titleSmall => textTheme.titleSmall?.copyWith( - color: colors.onSurface, - ); - TextStyle? get labelLarge => textTheme.labelLarge?.copyWith( - color: colors.onSurface, - ); - TextStyle? get labelMedium => textTheme.labelMedium?.copyWith( - color: colors.onSurface, - ); - TextStyle? get labelSmall => textTheme.labelSmall?.copyWith( - color: colors.onSurface, - ); - TextStyle? get bodyLarge => textTheme.bodyLarge?.copyWith( - color: colors.onSurface, - ); - TextStyle? get bodyMedium => textTheme.bodyMedium?.copyWith( - color: colors.onSurface, - ); - TextStyle? get bodySmall => textTheme.bodySmall?.copyWith( - color: colors.onSurface, - ); + TextStyle? get displayLarge => + textTheme.displayLarge?.copyWith(color: colors.onSurface); + TextStyle? get displayMedium => + textTheme.displayMedium?.copyWith(color: colors.onSurface); + TextStyle? get displaySmall => + textTheme.displaySmall?.copyWith(color: colors.onSurface); + TextStyle? get headlineLarge => + textTheme.headlineLarge?.copyWith(color: colors.onSurface); + TextStyle? get headlineMedium => + textTheme.headlineMedium?.copyWith(color: colors.onSurface); + TextStyle? get headlineSmall => + textTheme.headlineSmall?.copyWith(color: colors.onSurface); + TextStyle? get titleLarge => + textTheme.titleLarge?.copyWith(color: colors.onSurface); + TextStyle? get titleMedium => + textTheme.titleMedium?.copyWith(color: colors.onSurface); + TextStyle? get titleSmall => + textTheme.titleSmall?.copyWith(color: colors.onSurface); + TextStyle? get labelLarge => + textTheme.labelLarge?.copyWith(color: colors.onSurface); + TextStyle? get labelMedium => + textTheme.labelMedium?.copyWith(color: colors.onSurface); + TextStyle? get labelSmall => + textTheme.labelSmall?.copyWith(color: colors.onSurface); + TextStyle? get bodyLarge => + textTheme.bodyLarge?.copyWith(color: colors.onSurface); + TextStyle? get bodyMedium => + textTheme.bodyMedium?.copyWith(color: colors.onSurface); + TextStyle? get bodySmall => + textTheme.bodySmall?.copyWith(color: colors.onSurface); } extension BreakpointUtils on BoxConstraints { @@ -65,17 +50,17 @@ extension BreakpointUtils on BoxConstraints { extension DurationString on String { /// Assumes a string (roughly) of the format '\d{1,2}:\d{2}' Duration toDuration() => switch (split(':')) { - [var minutes, var seconds] => Duration( - minutes: int.parse(minutes.trim()), - seconds: int.parse(seconds.trim()), - ), - [var hours, var minutes, var seconds] => Duration( - hours: int.parse(hours.trim()), - minutes: int.parse(minutes.trim()), - seconds: int.parse(seconds.trim()), - ), - _ => throw Exception('Invalid duration string: $this'), - }; + [var minutes, var seconds] => Duration( + minutes: int.parse(minutes.trim()), + seconds: int.parse(seconds.trim()), + ), + [var hours, var minutes, var seconds] => Duration( + hours: int.parse(hours.trim()), + minutes: int.parse(minutes.trim()), + seconds: int.parse(seconds.trim()), + ), + _ => throw Exception('Invalid duration string: $this'), + }; } extension HumanizedDuration on Duration { diff --git a/boring_to_beautiful/step_04/lib/src/shared/playback/bloc/playback_bloc.dart b/boring_to_beautiful/step_04/lib/src/shared/playback/bloc/playback_bloc.dart index 73c2f4c436..c6c871937b 100644 --- a/boring_to_beautiful/step_04/lib/src/shared/playback/bloc/playback_bloc.dart +++ b/boring_to_beautiful/step_04/lib/src/shared/playback/bloc/playback_bloc.dart @@ -41,9 +41,8 @@ class PlaybackBloc extends Bloc { } } - void _handlePlaybackProgress(Duration progress) => add( - PlaybackEvent.songProgress(progress), - ); + void _handlePlaybackProgress(Duration progress) => + add(PlaybackEvent.songProgress(progress)); void _togglePlayPause(TogglePlayPause event, Emitter emit) { state.isPlaying ? _pausePlayback() : _resumePlayback(); @@ -52,8 +51,10 @@ class PlaybackBloc extends Bloc { void _pausePlayback() => _currentlyPlayingSubscription!.cancel(); - void _resumePlayback() => _currentlyPlayingSubscription = - _startPlayingStream().listen(_handlePlaybackProgress); + void _resumePlayback() => + _currentlyPlayingSubscription = _startPlayingStream().listen( + _handlePlaybackProgress, + ); void _changeSong(ChangeSong event, Emitter emit) { emit( @@ -69,19 +70,15 @@ class PlaybackBloc extends Bloc { } void _songProgress(SongProgress event, Emitter emit) => emit( - state.copyWith( - songWithProgress: state.songWithProgress!.copyWith( - progress: state.songWithProgress!.progress + event.duration, - ), - ), - ); + state.copyWith( + songWithProgress: state.songWithProgress!.copyWith( + progress: state.songWithProgress!.progress + event.duration, + ), + ), + ); void _setVolume(SetVolume event, Emitter emit) => emit( - state.copyWith( - volume: event.value, - isMuted: false, - previousVolume: null, - ), - ); + state.copyWith(volume: event.value, isMuted: false, previousVolume: null), + ); void _toggleMute(ToggleMute event, Emitter emit) { if (state.isMuted) { @@ -94,11 +91,7 @@ class PlaybackBloc extends Bloc { ); } else { emit( - state.copyWith( - isMuted: true, - volume: 0, - previousVolume: state.volume, - ), + state.copyWith(isMuted: true, volume: 0, previousVolume: state.volume), ); } } diff --git a/boring_to_beautiful/step_04/lib/src/shared/playback/bloc/playback_bloc.freezed.dart b/boring_to_beautiful/step_04/lib/src/shared/playback/bloc/playback_bloc.freezed.dart index 8a422cd449..54e870ab6f 100644 --- a/boring_to_beautiful/step_04/lib/src/shared/playback/bloc/playback_bloc.freezed.dart +++ b/boring_to_beautiful/step_04/lib/src/shared/playback/bloc/playback_bloc.freezed.dart @@ -12,7 +12,8 @@ part of 'playback_bloc.dart'; T _$identity(T value) => value; final _privateConstructorUsedError = UnsupportedError( - 'It seems like you constructed your class using `MyClass._()`. This constructor is only meant to be used by freezed and you are not supposed to need it nor use it.\nPlease check the documentation here for more information: https://github.com/rrousselGit/freezed#adding-getters-and-methods-to-our-models'); + 'It seems like you constructed your class using `MyClass._()`. This constructor is only meant to be used by freezed and you are not supposed to need it nor use it.\nPlease check the documentation here for more information: https://github.com/rrousselGit/freezed#adding-getters-and-methods-to-our-models', +); /// @nodoc mixin _$PlaybackEvent { @@ -24,8 +25,7 @@ mixin _$PlaybackEvent { required TResult Function() toggleMute, required TResult Function(double percent) moveToInSong, required TResult Function(Duration duration) songProgress, - }) => - throw _privateConstructorUsedError; + }) => throw _privateConstructorUsedError; @optionalTypeArgs TResult? whenOrNull({ TResult? Function()? togglePlayPause, @@ -34,8 +34,7 @@ mixin _$PlaybackEvent { TResult? Function()? toggleMute, TResult? Function(double percent)? moveToInSong, TResult? Function(Duration duration)? songProgress, - }) => - throw _privateConstructorUsedError; + }) => throw _privateConstructorUsedError; @optionalTypeArgs TResult maybeWhen({ TResult Function()? togglePlayPause, @@ -45,8 +44,7 @@ mixin _$PlaybackEvent { TResult Function(double percent)? moveToInSong, TResult Function(Duration duration)? songProgress, required TResult orElse(), - }) => - throw _privateConstructorUsedError; + }) => throw _privateConstructorUsedError; @optionalTypeArgs TResult map({ required TResult Function(TogglePlayPause value) togglePlayPause, @@ -55,8 +53,7 @@ mixin _$PlaybackEvent { required TResult Function(ToggleMute value) toggleMute, required TResult Function(MoveToInSong value) moveToInSong, required TResult Function(SongProgress value) songProgress, - }) => - throw _privateConstructorUsedError; + }) => throw _privateConstructorUsedError; @optionalTypeArgs TResult? mapOrNull({ TResult? Function(TogglePlayPause value)? togglePlayPause, @@ -65,8 +62,7 @@ mixin _$PlaybackEvent { TResult? Function(ToggleMute value)? toggleMute, TResult? Function(MoveToInSong value)? moveToInSong, TResult? Function(SongProgress value)? songProgress, - }) => - throw _privateConstructorUsedError; + }) => throw _privateConstructorUsedError; @optionalTypeArgs TResult maybeMap({ TResult Function(TogglePlayPause value)? togglePlayPause, @@ -76,15 +72,15 @@ mixin _$PlaybackEvent { TResult Function(MoveToInSong value)? moveToInSong, TResult Function(SongProgress value)? songProgress, required TResult orElse(), - }) => - throw _privateConstructorUsedError; + }) => throw _privateConstructorUsedError; } /// @nodoc abstract class $PlaybackEventCopyWith<$Res> { factory $PlaybackEventCopyWith( - PlaybackEvent value, $Res Function(PlaybackEvent) then) = - _$PlaybackEventCopyWithImpl<$Res, PlaybackEvent>; + PlaybackEvent value, + $Res Function(PlaybackEvent) then, + ) = _$PlaybackEventCopyWithImpl<$Res, PlaybackEvent>; } /// @nodoc @@ -103,9 +99,10 @@ class _$PlaybackEventCopyWithImpl<$Res, $Val extends PlaybackEvent> /// @nodoc abstract class _$$TogglePlayPauseImplCopyWith<$Res> { - factory _$$TogglePlayPauseImplCopyWith(_$TogglePlayPauseImpl value, - $Res Function(_$TogglePlayPauseImpl) then) = - __$$TogglePlayPauseImplCopyWithImpl<$Res>; + factory _$$TogglePlayPauseImplCopyWith( + _$TogglePlayPauseImpl value, + $Res Function(_$TogglePlayPauseImpl) then, + ) = __$$TogglePlayPauseImplCopyWithImpl<$Res>; } /// @nodoc @@ -113,8 +110,9 @@ class __$$TogglePlayPauseImplCopyWithImpl<$Res> extends _$PlaybackEventCopyWithImpl<$Res, _$TogglePlayPauseImpl> implements _$$TogglePlayPauseImplCopyWith<$Res> { __$$TogglePlayPauseImplCopyWithImpl( - _$TogglePlayPauseImpl _value, $Res Function(_$TogglePlayPauseImpl) _then) - : super(_value, _then); + _$TogglePlayPauseImpl _value, + $Res Function(_$TogglePlayPauseImpl) _then, + ) : super(_value, _then); /// Create a copy of PlaybackEvent /// with the given fields replaced by the non-null parameter values. @@ -233,8 +231,9 @@ abstract class TogglePlayPause implements PlaybackEvent { /// @nodoc abstract class _$$ChangeSongImplCopyWith<$Res> { factory _$$ChangeSongImplCopyWith( - _$ChangeSongImpl value, $Res Function(_$ChangeSongImpl) then) = - __$$ChangeSongImplCopyWithImpl<$Res>; + _$ChangeSongImpl value, + $Res Function(_$ChangeSongImpl) then, + ) = __$$ChangeSongImplCopyWithImpl<$Res>; @useResult $Res call({Song song}); } @@ -244,22 +243,23 @@ class __$$ChangeSongImplCopyWithImpl<$Res> extends _$PlaybackEventCopyWithImpl<$Res, _$ChangeSongImpl> implements _$$ChangeSongImplCopyWith<$Res> { __$$ChangeSongImplCopyWithImpl( - _$ChangeSongImpl _value, $Res Function(_$ChangeSongImpl) _then) - : super(_value, _then); + _$ChangeSongImpl _value, + $Res Function(_$ChangeSongImpl) _then, + ) : super(_value, _then); /// Create a copy of PlaybackEvent /// with the given fields replaced by the non-null parameter values. @pragma('vm:prefer-inline') @override - $Res call({ - Object? song = null, - }) { - return _then(_$ChangeSongImpl( - null == song - ? _value.song - : song // ignore: cast_nullable_to_non_nullable - as Song, - )); + $Res call({Object? song = null}) { + return _then( + _$ChangeSongImpl( + null == song + ? _value.song + : song // ignore: cast_nullable_to_non_nullable + as Song, + ), + ); } } @@ -397,8 +397,9 @@ abstract class ChangeSong implements PlaybackEvent { /// @nodoc abstract class _$$SetVolumeImplCopyWith<$Res> { factory _$$SetVolumeImplCopyWith( - _$SetVolumeImpl value, $Res Function(_$SetVolumeImpl) then) = - __$$SetVolumeImplCopyWithImpl<$Res>; + _$SetVolumeImpl value, + $Res Function(_$SetVolumeImpl) then, + ) = __$$SetVolumeImplCopyWithImpl<$Res>; @useResult $Res call({double value}); } @@ -408,22 +409,23 @@ class __$$SetVolumeImplCopyWithImpl<$Res> extends _$PlaybackEventCopyWithImpl<$Res, _$SetVolumeImpl> implements _$$SetVolumeImplCopyWith<$Res> { __$$SetVolumeImplCopyWithImpl( - _$SetVolumeImpl _value, $Res Function(_$SetVolumeImpl) _then) - : super(_value, _then); + _$SetVolumeImpl _value, + $Res Function(_$SetVolumeImpl) _then, + ) : super(_value, _then); /// Create a copy of PlaybackEvent /// with the given fields replaced by the non-null parameter values. @pragma('vm:prefer-inline') @override - $Res call({ - Object? value = null, - }) { - return _then(_$SetVolumeImpl( - null == value - ? _value.value - : value // ignore: cast_nullable_to_non_nullable - as double, - )); + $Res call({Object? value = null}) { + return _then( + _$SetVolumeImpl( + null == value + ? _value.value + : value // ignore: cast_nullable_to_non_nullable + as double, + ), + ); } } @@ -561,8 +563,9 @@ abstract class SetVolume implements PlaybackEvent { /// @nodoc abstract class _$$ToggleMuteImplCopyWith<$Res> { factory _$$ToggleMuteImplCopyWith( - _$ToggleMuteImpl value, $Res Function(_$ToggleMuteImpl) then) = - __$$ToggleMuteImplCopyWithImpl<$Res>; + _$ToggleMuteImpl value, + $Res Function(_$ToggleMuteImpl) then, + ) = __$$ToggleMuteImplCopyWithImpl<$Res>; } /// @nodoc @@ -570,8 +573,9 @@ class __$$ToggleMuteImplCopyWithImpl<$Res> extends _$PlaybackEventCopyWithImpl<$Res, _$ToggleMuteImpl> implements _$$ToggleMuteImplCopyWith<$Res> { __$$ToggleMuteImplCopyWithImpl( - _$ToggleMuteImpl _value, $Res Function(_$ToggleMuteImpl) _then) - : super(_value, _then); + _$ToggleMuteImpl _value, + $Res Function(_$ToggleMuteImpl) _then, + ) : super(_value, _then); /// Create a copy of PlaybackEvent /// with the given fields replaced by the non-null parameter values. @@ -690,8 +694,9 @@ abstract class ToggleMute implements PlaybackEvent { /// @nodoc abstract class _$$MoveToInSongImplCopyWith<$Res> { factory _$$MoveToInSongImplCopyWith( - _$MoveToInSongImpl value, $Res Function(_$MoveToInSongImpl) then) = - __$$MoveToInSongImplCopyWithImpl<$Res>; + _$MoveToInSongImpl value, + $Res Function(_$MoveToInSongImpl) then, + ) = __$$MoveToInSongImplCopyWithImpl<$Res>; @useResult $Res call({double percent}); } @@ -701,22 +706,23 @@ class __$$MoveToInSongImplCopyWithImpl<$Res> extends _$PlaybackEventCopyWithImpl<$Res, _$MoveToInSongImpl> implements _$$MoveToInSongImplCopyWith<$Res> { __$$MoveToInSongImplCopyWithImpl( - _$MoveToInSongImpl _value, $Res Function(_$MoveToInSongImpl) _then) - : super(_value, _then); + _$MoveToInSongImpl _value, + $Res Function(_$MoveToInSongImpl) _then, + ) : super(_value, _then); /// Create a copy of PlaybackEvent /// with the given fields replaced by the non-null parameter values. @pragma('vm:prefer-inline') @override - $Res call({ - Object? percent = null, - }) { - return _then(_$MoveToInSongImpl( - null == percent - ? _value.percent - : percent // ignore: cast_nullable_to_non_nullable - as double, - )); + $Res call({Object? percent = null}) { + return _then( + _$MoveToInSongImpl( + null == percent + ? _value.percent + : percent // ignore: cast_nullable_to_non_nullable + as double, + ), + ); } } @@ -854,8 +860,9 @@ abstract class MoveToInSong implements PlaybackEvent { /// @nodoc abstract class _$$SongProgressImplCopyWith<$Res> { factory _$$SongProgressImplCopyWith( - _$SongProgressImpl value, $Res Function(_$SongProgressImpl) then) = - __$$SongProgressImplCopyWithImpl<$Res>; + _$SongProgressImpl value, + $Res Function(_$SongProgressImpl) then, + ) = __$$SongProgressImplCopyWithImpl<$Res>; @useResult $Res call({Duration duration}); } @@ -865,22 +872,23 @@ class __$$SongProgressImplCopyWithImpl<$Res> extends _$PlaybackEventCopyWithImpl<$Res, _$SongProgressImpl> implements _$$SongProgressImplCopyWith<$Res> { __$$SongProgressImplCopyWithImpl( - _$SongProgressImpl _value, $Res Function(_$SongProgressImpl) _then) - : super(_value, _then); + _$SongProgressImpl _value, + $Res Function(_$SongProgressImpl) _then, + ) : super(_value, _then); /// Create a copy of PlaybackEvent /// with the given fields replaced by the non-null parameter values. @pragma('vm:prefer-inline') @override - $Res call({ - Object? duration = null, - }) { - return _then(_$SongProgressImpl( - null == duration - ? _value.duration - : duration // ignore: cast_nullable_to_non_nullable - as Duration, - )); + $Res call({Object? duration = null}) { + return _then( + _$SongProgressImpl( + null == duration + ? _value.duration + : duration // ignore: cast_nullable_to_non_nullable + as Duration, + ), + ); } } @@ -1037,15 +1045,17 @@ mixin _$PlaybackState { /// @nodoc abstract class $PlaybackStateCopyWith<$Res> { factory $PlaybackStateCopyWith( - PlaybackState value, $Res Function(PlaybackState) then) = - _$PlaybackStateCopyWithImpl<$Res, PlaybackState>; + PlaybackState value, + $Res Function(PlaybackState) then, + ) = _$PlaybackStateCopyWithImpl<$Res, PlaybackState>; @useResult - $Res call( - {double volume, - double? previousVolume, - bool isMuted, - bool isPlaying, - SongWithProgress? songWithProgress}); + $Res call({ + double volume, + double? previousVolume, + bool isMuted, + bool isPlaying, + SongWithProgress? songWithProgress, + }); $SongWithProgressCopyWith<$Res>? get songWithProgress; } @@ -1071,28 +1081,36 @@ class _$PlaybackStateCopyWithImpl<$Res, $Val extends PlaybackState> Object? isPlaying = null, Object? songWithProgress = freezed, }) { - return _then(_value.copyWith( - volume: null == volume - ? _value.volume - : volume // ignore: cast_nullable_to_non_nullable - as double, - previousVolume: freezed == previousVolume - ? _value.previousVolume - : previousVolume // ignore: cast_nullable_to_non_nullable - as double?, - isMuted: null == isMuted - ? _value.isMuted - : isMuted // ignore: cast_nullable_to_non_nullable - as bool, - isPlaying: null == isPlaying - ? _value.isPlaying - : isPlaying // ignore: cast_nullable_to_non_nullable - as bool, - songWithProgress: freezed == songWithProgress - ? _value.songWithProgress - : songWithProgress // ignore: cast_nullable_to_non_nullable - as SongWithProgress?, - ) as $Val); + return _then( + _value.copyWith( + volume: + null == volume + ? _value.volume + : volume // ignore: cast_nullable_to_non_nullable + as double, + previousVolume: + freezed == previousVolume + ? _value.previousVolume + : previousVolume // ignore: cast_nullable_to_non_nullable + as double?, + isMuted: + null == isMuted + ? _value.isMuted + : isMuted // ignore: cast_nullable_to_non_nullable + as bool, + isPlaying: + null == isPlaying + ? _value.isPlaying + : isPlaying // ignore: cast_nullable_to_non_nullable + as bool, + songWithProgress: + freezed == songWithProgress + ? _value.songWithProgress + : songWithProgress // ignore: cast_nullable_to_non_nullable + as SongWithProgress?, + ) + as $Val, + ); } /// Create a copy of PlaybackState @@ -1114,16 +1132,18 @@ class _$PlaybackStateCopyWithImpl<$Res, $Val extends PlaybackState> abstract class _$$PlaybackStateImplCopyWith<$Res> implements $PlaybackStateCopyWith<$Res> { factory _$$PlaybackStateImplCopyWith( - _$PlaybackStateImpl value, $Res Function(_$PlaybackStateImpl) then) = - __$$PlaybackStateImplCopyWithImpl<$Res>; + _$PlaybackStateImpl value, + $Res Function(_$PlaybackStateImpl) then, + ) = __$$PlaybackStateImplCopyWithImpl<$Res>; @override @useResult - $Res call( - {double volume, - double? previousVolume, - bool isMuted, - bool isPlaying, - SongWithProgress? songWithProgress}); + $Res call({ + double volume, + double? previousVolume, + bool isMuted, + bool isPlaying, + SongWithProgress? songWithProgress, + }); @override $SongWithProgressCopyWith<$Res>? get songWithProgress; @@ -1134,8 +1154,9 @@ class __$$PlaybackStateImplCopyWithImpl<$Res> extends _$PlaybackStateCopyWithImpl<$Res, _$PlaybackStateImpl> implements _$$PlaybackStateImplCopyWith<$Res> { __$$PlaybackStateImplCopyWithImpl( - _$PlaybackStateImpl _value, $Res Function(_$PlaybackStateImpl) _then) - : super(_value, _then); + _$PlaybackStateImpl _value, + $Res Function(_$PlaybackStateImpl) _then, + ) : super(_value, _then); /// Create a copy of PlaybackState /// with the given fields replaced by the non-null parameter values. @@ -1148,40 +1169,48 @@ class __$$PlaybackStateImplCopyWithImpl<$Res> Object? isPlaying = null, Object? songWithProgress = freezed, }) { - return _then(_$PlaybackStateImpl( - volume: null == volume - ? _value.volume - : volume // ignore: cast_nullable_to_non_nullable - as double, - previousVolume: freezed == previousVolume - ? _value.previousVolume - : previousVolume // ignore: cast_nullable_to_non_nullable - as double?, - isMuted: null == isMuted - ? _value.isMuted - : isMuted // ignore: cast_nullable_to_non_nullable - as bool, - isPlaying: null == isPlaying - ? _value.isPlaying - : isPlaying // ignore: cast_nullable_to_non_nullable - as bool, - songWithProgress: freezed == songWithProgress - ? _value.songWithProgress - : songWithProgress // ignore: cast_nullable_to_non_nullable - as SongWithProgress?, - )); + return _then( + _$PlaybackStateImpl( + volume: + null == volume + ? _value.volume + : volume // ignore: cast_nullable_to_non_nullable + as double, + previousVolume: + freezed == previousVolume + ? _value.previousVolume + : previousVolume // ignore: cast_nullable_to_non_nullable + as double?, + isMuted: + null == isMuted + ? _value.isMuted + : isMuted // ignore: cast_nullable_to_non_nullable + as bool, + isPlaying: + null == isPlaying + ? _value.isPlaying + : isPlaying // ignore: cast_nullable_to_non_nullable + as bool, + songWithProgress: + freezed == songWithProgress + ? _value.songWithProgress + : songWithProgress // ignore: cast_nullable_to_non_nullable + as SongWithProgress?, + ), + ); } } /// @nodoc class _$PlaybackStateImpl implements _PlaybackState { - const _$PlaybackStateImpl( - {this.volume = 0.5, - this.previousVolume, - this.isMuted = false, - this.isPlaying = false, - this.songWithProgress}); + const _$PlaybackStateImpl({ + this.volume = 0.5, + this.previousVolume, + this.isMuted = false, + this.isPlaying = false, + this.songWithProgress, + }); /// Legal values are between 0 and 1. @override @@ -1221,8 +1250,14 @@ class _$PlaybackStateImpl implements _PlaybackState { } @override - int get hashCode => Object.hash(runtimeType, volume, previousVolume, isMuted, - isPlaying, songWithProgress); + int get hashCode => Object.hash( + runtimeType, + volume, + previousVolume, + isMuted, + isPlaying, + songWithProgress, + ); /// Create a copy of PlaybackState /// with the given fields replaced by the non-null parameter values. @@ -1234,12 +1269,13 @@ class _$PlaybackStateImpl implements _PlaybackState { } abstract class _PlaybackState implements PlaybackState { - const factory _PlaybackState( - {final double volume, - final double? previousVolume, - final bool isMuted, - final bool isPlaying, - final SongWithProgress? songWithProgress}) = _$PlaybackStateImpl; + const factory _PlaybackState({ + final double volume, + final double? previousVolume, + final bool isMuted, + final bool isPlaying, + final SongWithProgress? songWithProgress, + }) = _$PlaybackStateImpl; /// Legal values are between 0 and 1. @override @@ -1278,8 +1314,9 @@ mixin _$SongWithProgress { /// @nodoc abstract class $SongWithProgressCopyWith<$Res> { factory $SongWithProgressCopyWith( - SongWithProgress value, $Res Function(SongWithProgress) then) = - _$SongWithProgressCopyWithImpl<$Res, SongWithProgress>; + SongWithProgress value, + $Res Function(SongWithProgress) then, + ) = _$SongWithProgressCopyWithImpl<$Res, SongWithProgress>; @useResult $Res call({Duration progress, Song song}); } @@ -1298,29 +1335,32 @@ class _$SongWithProgressCopyWithImpl<$Res, $Val extends SongWithProgress> /// with the given fields replaced by the non-null parameter values. @pragma('vm:prefer-inline') @override - $Res call({ - Object? progress = null, - Object? song = null, - }) { - return _then(_value.copyWith( - progress: null == progress - ? _value.progress - : progress // ignore: cast_nullable_to_non_nullable - as Duration, - song: null == song - ? _value.song - : song // ignore: cast_nullable_to_non_nullable - as Song, - ) as $Val); + $Res call({Object? progress = null, Object? song = null}) { + return _then( + _value.copyWith( + progress: + null == progress + ? _value.progress + : progress // ignore: cast_nullable_to_non_nullable + as Duration, + song: + null == song + ? _value.song + : song // ignore: cast_nullable_to_non_nullable + as Song, + ) + as $Val, + ); } } /// @nodoc abstract class _$$SongWithProgressImplCopyWith<$Res> implements $SongWithProgressCopyWith<$Res> { - factory _$$SongWithProgressImplCopyWith(_$SongWithProgressImpl value, - $Res Function(_$SongWithProgressImpl) then) = - __$$SongWithProgressImplCopyWithImpl<$Res>; + factory _$$SongWithProgressImplCopyWith( + _$SongWithProgressImpl value, + $Res Function(_$SongWithProgressImpl) then, + ) = __$$SongWithProgressImplCopyWithImpl<$Res>; @override @useResult $Res call({Duration progress, Song song}); @@ -1330,28 +1370,30 @@ abstract class _$$SongWithProgressImplCopyWith<$Res> class __$$SongWithProgressImplCopyWithImpl<$Res> extends _$SongWithProgressCopyWithImpl<$Res, _$SongWithProgressImpl> implements _$$SongWithProgressImplCopyWith<$Res> { - __$$SongWithProgressImplCopyWithImpl(_$SongWithProgressImpl _value, - $Res Function(_$SongWithProgressImpl) _then) - : super(_value, _then); + __$$SongWithProgressImplCopyWithImpl( + _$SongWithProgressImpl _value, + $Res Function(_$SongWithProgressImpl) _then, + ) : super(_value, _then); /// Create a copy of SongWithProgress /// with the given fields replaced by the non-null parameter values. @pragma('vm:prefer-inline') @override - $Res call({ - Object? progress = null, - Object? song = null, - }) { - return _then(_$SongWithProgressImpl( - progress: null == progress - ? _value.progress - : progress // ignore: cast_nullable_to_non_nullable - as Duration, - song: null == song - ? _value.song - : song // ignore: cast_nullable_to_non_nullable - as Song, - )); + $Res call({Object? progress = null, Object? song = null}) { + return _then( + _$SongWithProgressImpl( + progress: + null == progress + ? _value.progress + : progress // ignore: cast_nullable_to_non_nullable + as Duration, + song: + null == song + ? _value.song + : song // ignore: cast_nullable_to_non_nullable + as Song, + ), + ); } } @@ -1390,13 +1432,16 @@ class _$SongWithProgressImpl implements _SongWithProgress { @pragma('vm:prefer-inline') _$$SongWithProgressImplCopyWith<_$SongWithProgressImpl> get copyWith => __$$SongWithProgressImplCopyWithImpl<_$SongWithProgressImpl>( - this, _$identity); + this, + _$identity, + ); } abstract class _SongWithProgress implements SongWithProgress { - const factory _SongWithProgress( - {required final Duration progress, - required final Song song}) = _$SongWithProgressImpl; + const factory _SongWithProgress({ + required final Duration progress, + required final Song song, + }) = _$SongWithProgressImpl; @override Duration get progress; diff --git a/boring_to_beautiful/step_04/lib/src/shared/providers/artists.dart b/boring_to_beautiful/step_04/lib/src/shared/providers/artists.dart index d116ad9cdd..f9e4a8063e 100644 --- a/boring_to_beautiful/step_04/lib/src/shared/providers/artists.dart +++ b/boring_to_beautiful/step_04/lib/src/shared/providers/artists.dart @@ -11,162 +11,175 @@ class ArtistsProvider { static ArtistsProvider get shared => ArtistsProvider(); List get artists => const [ - Artist( - id: 'jmo', - name: 'Jessie Morrison', + Artist( + id: 'jmo', + name: 'Jessie Morrison', + image: MyArtistImage( + image: 'assets/images/artists/woman.jpeg', + sourceLink: 'https://unsplash.com/photos/w8wpFqiMpW8', + sourceName: 'Daniel Monteiro', + ), + bio: + 'Jessie "JMo" Morrison is an American singer, actress, and dancer. The following year she won over America\'s hearts first appearing in the 2004 movie Unexpected Engagement. Soon after she released her debut album, Hopeful Romantics.', + updates: [ + 'So happy that everyone is loving the new music! It\'s been my pride and joy to work on and I\'m thrilled that you finally get to hear it!', + 'Happy Valentine\'s Day y\'all!!! I love each and every one of you 💋😘', + '#HappyGalentinesDay!!! Chocolates. Ice Cream. Your favorite rom-com. Let\'s goo!!! 💕✨', + ], + events: [ + Event( + date: '1/20/22', + title: 'Jessie Morrison: No More Heartbreak Tour', + location: 'Mountain View, California', + link: 'Tickets', + ), + Event( + date: '1/22/22', + title: 'Jessie Morrison: No More Heartbreak Tour', + location: 'Austin, Texas', + link: 'Tickets', + ), + Event( + date: '1/23/22', + title: 'Jessie Morrison: No More Heartbreak Tour', + location: 'Houston, Texas', + link: 'Tickets', + ), + Event( + date: '2/8/22', + title: 'Jessie Morrison: No More Heartbreak Tour', + location: 'Los Angeles, California', + link: 'Tickets', + ), + ], + news: [ + News( + title: + 'Jessie Morrison a 26-stop cross country tour for the first time in 6 years.', + author: 'By Jacqueline Stewart', + blurb: + 'Our favorite triple-threat Jessie Morrison is back, this time with a 26 stop tour across the country. She\'ll kick things off in Mountain View on January 20th, 2022 in Mountain View California with more stops being announced over the next few weeks...', image: MyArtistImage( - image: 'assets/images/artists/woman.jpeg', - sourceLink: 'https://unsplash.com/photos/w8wpFqiMpW8', - sourceName: 'Daniel Monteiro', + image: 'assets/images/news/concert.jpeg', + sourceLink: 'https://unsplash.com/photos/hzgs56Ze49s', + sourceName: 'Anthony DELANOIX', ), - bio: - 'Jessie "JMo" Morrison is an American singer, actress, and dancer. The following year she won over America\'s hearts first appearing in the 2004 movie Unexpected Engagement. Soon after she released her debut album, Hopeful Romantics.', - updates: [ - 'So happy that everyone is loving the new music! It\'s been my pride and joy to work on and I\'m thrilled that you finally get to hear it!', - 'Happy Valentine\'s Day y\'all!!! I love each and every one of you 💋😘', - '#HappyGalentinesDay!!! Chocolates. Ice Cream. Your favorite rom-com. Let\'s goo!!! 💕✨', - ], - events: [ - Event( - date: '1/20/22', - title: 'Jessie Morrison: No More Heartbreak Tour', - location: 'Mountain View, California', - link: 'Tickets'), - Event( - date: '1/22/22', - title: 'Jessie Morrison: No More Heartbreak Tour', - location: 'Austin, Texas', - link: 'Tickets'), - Event( - date: '1/23/22', - title: 'Jessie Morrison: No More Heartbreak Tour', - location: 'Houston, Texas', - link: 'Tickets'), - Event( - date: '2/8/22', - title: 'Jessie Morrison: No More Heartbreak Tour', - location: 'Los Angeles, California', - link: 'Tickets'), - ], - news: [ - News( - title: - 'Jessie Morrison a 26-stop cross country tour for the first time in 6 years.', - author: 'By Jacqueline Stewart', - blurb: - 'Our favorite triple-threat Jessie Morrison is back, this time with a 26 stop tour across the country. She\'ll kick things off in Mountain View on January 20th, 2022 in Mountain View California with more stops being announced over the next few weeks...', - image: MyArtistImage( - image: 'assets/images/news/concert.jpeg', - sourceLink: 'https://unsplash.com/photos/hzgs56Ze49s', - sourceName: 'Anthony DELANOIX', - ), - ) - ], ), - Artist( - id: 'lb', - name: 'Lucas Bryant', + ], + ), + Artist( + id: 'lb', + name: 'Lucas Bryant', + image: MyArtistImage( + image: 'assets/images/albums/artist1-album2.jpg', + sourceLink: 'https://unsplash.com/photos/6etHcucBiRg', + sourceName: 'Keagan Henman', + ), + bio: + 'Lucas Bryant is an American country music singer and songwriter. He moved to Nashville at the age of 18 to pursue his country music career. With 34 awards to his name, he currently holds the record for most awards in country music.', + updates: [ + 'Who\'s ready to party this weekend?! See you tomorrow, Nashville! #LBlive', + 'Can\'t wait to get back on stage after so long. What songs do you want to hear?', + 'We\'re going all in this weekend! How are you doing, Vegas?!', + ], + events: [ + Event( + date: '5/16/22', + title: 'Back To My Hometown Tour', + location: 'Indianapolis, IN', + link: 'Tickets', + ), + Event( + date: '5/18/22', + title: 'Back To My Hometown Tour', + location: 'San Antonio, TX', + link: 'Tickets', + ), + Event( + date: '5/20/22', + title: 'Back To My Hometown Tour', + location: 'Phoenix, AZ', + link: 'Tickets', + ), + Event( + date: '5/23/22', + title: 'Back To My Hometown Tour', + location: 'San Diego, CA', + link: 'Tickets', + ), + ], + news: [ + News( + title: + 'Country Music Favorites Lucas Bryant, Mariam Lubbock, Michelle Delaney and Jackson Murray Join Forces For The Biggest Performance in Country History.', + author: 'Lonnie Hall', + blurb: + 'Calling all country music fans! Fasten your seat belts because the 2022 Best of Country Awards is expecting a huge performance from some of our favorite artists. Country music legends Mariam Lubbock and Jackson Murray will be joined by Lucas Bryant and Michelle Delaney for a performance we\'ll never forget.', image: MyArtistImage( image: 'assets/images/albums/artist1-album2.jpg', sourceLink: 'https://unsplash.com/photos/6etHcucBiRg', sourceName: 'Keagan Henman', ), - bio: - 'Lucas Bryant is an American country music singer and songwriter. He moved to Nashville at the age of 18 to pursue his country music career. With 34 awards to his name, he currently holds the record for most awards in country music.', - updates: [ - 'Who\'s ready to party this weekend?! See you tomorrow, Nashville! #LBlive', - 'Can\'t wait to get back on stage after so long. What songs do you want to hear?', - 'We\'re going all in this weekend! How are you doing, Vegas?!', - ], - events: [ - Event( - date: '5/16/22', - title: 'Back To My Hometown Tour', - location: 'Indianapolis, IN', - link: 'Tickets'), - Event( - date: '5/18/22', - title: 'Back To My Hometown Tour', - location: 'San Antonio, TX', - link: 'Tickets'), - Event( - date: '5/20/22', - title: 'Back To My Hometown Tour', - location: 'Phoenix, AZ', - link: 'Tickets'), - Event( - date: '5/23/22', - title: 'Back To My Hometown Tour', - location: 'San Diego, CA', - link: 'Tickets'), - ], - news: [ - News( - title: - 'Country Music Favorites Lucas Bryant, Mariam Lubbock, Michelle Delaney and Jackson Murray Join Forces For The Biggest Performance in Country History.', - author: 'Lonnie Hall', - blurb: - 'Calling all country music fans! Fasten your seat belts because the 2022 Best of Country Awards is expecting a huge performance from some of our favorite artists. Country music legends Mariam Lubbock and Jackson Murray will be joined by Lucas Bryant and Michelle Delaney for a performance we\'ll never forget.', - image: MyArtistImage( - image: 'assets/images/albums/artist1-album2.jpg', - sourceLink: 'https://unsplash.com/photos/6etHcucBiRg', - sourceName: 'Keagan Henman', - ), - ), - ], ), - Artist( - id: 'jonjames', - name: 'Jon James', + ], + ), + Artist( + id: 'jonjames', + name: 'Jon James', + image: MyArtistImage( + image: 'assets/images/artists/joe.jpg', + sourceLink: 'https://unsplash.com/photos/k7UKO-tT5QU', + sourceName: 'Natalie Runnerstrom', + ), + bio: + 'Jon James is an American singer and songwriter. He\'s best known for his number one single "Never Going Back" which stayed atop the charts for 10 weeks.', + updates: [ + '3. MORE. DAYS. Who\'s ready for #FallingForYou?! Tune in tomorrow to see the full track list!', + '4 days until I get to share some of the favorite songs I\'ve ever written with you.', + '#FallingForYou dropping in 5 days! Send me your favorite music video concepts 🎥 😎', + ], + events: [ + Event( + date: '10/22/21', + title: 'Falling For You Tour', + location: 'Dallas, Texas', + link: 'Ticketmaster', + ), + Event( + date: '10/23/21', + title: 'Falling For You Tour', + location: 'Houston, Texas', + link: 'Ticketmaster', + ), + Event( + date: '10/26/21', + title: 'Falling For You Tour', + location: 'Phoenix, Arizona', + link: 'Ticketmaster', + ), + Event( + date: '10/27/21', + title: 'Falling For You Tour', + location: 'Los Angeles, California', + link: 'Ticketmaster', + ), + ], + news: [ + News( + title: + 'Jon James is excited for the release of his sixth album "Falling For You"', + author: 'Top Media Today', + blurb: + 'Jon James will be dropping his new album "Falling For You" on Friday to much fan excitement. The 6-time Grammy winning artist has spent the last year writing and recording for this album that\'s been dubbed "his best work yet."', image: MyArtistImage( - image: 'assets/images/artists/joe.jpg', - sourceLink: 'https://unsplash.com/photos/k7UKO-tT5QU', - sourceName: 'Natalie Runnerstrom', + image: 'assets/images/news/recording_studio.jpg', + sourceLink: 'https://unsplash.com/photos/CbOGmLA46JI', + sourceName: 'Yohann LIBOT', ), - bio: - 'Jon James is an American singer and songwriter. He\'s best known for his number one single "Never Going Back" which stayed atop the charts for 10 weeks.', - updates: [ - '3. MORE. DAYS. Who\'s ready for #FallingForYou?! Tune in tomorrow to see the full track list!', - '4 days until I get to share some of the favorite songs I\'ve ever written with you.', - '#FallingForYou dropping in 5 days! Send me your favorite music video concepts 🎥 😎', - ], - events: [ - Event( - date: '10/22/21', - title: 'Falling For You Tour', - location: 'Dallas, Texas', - link: 'Ticketmaster'), - Event( - date: '10/23/21', - title: 'Falling For You Tour', - location: 'Houston, Texas', - link: 'Ticketmaster'), - Event( - date: '10/26/21', - title: 'Falling For You Tour', - location: 'Phoenix, Arizona', - link: 'Ticketmaster'), - Event( - date: '10/27/21', - title: 'Falling For You Tour', - location: 'Los Angeles, California', - link: 'Ticketmaster'), - ], - news: [ - News( - title: - 'Jon James is excited for the release of his sixth album "Falling For You"', - author: 'Top Media Today', - blurb: - 'Jon James will be dropping his new album "Falling For You" on Friday to much fan excitement. The 6-time Grammy winning artist has spent the last year writing and recording for this album that\'s been dubbed "his best work yet."', - image: MyArtistImage( - image: 'assets/images/news/recording_studio.jpg', - sourceLink: 'https://unsplash.com/photos/CbOGmLA46JI', - sourceName: 'Yohann LIBOT'), - ) - ], ), - ]; + ], + ), + ]; Artist? getArtist(String id) { return artists.firstWhereOrNull((artist) => artist.id == id); diff --git a/boring_to_beautiful/step_04/lib/src/shared/providers/playlists.dart b/boring_to_beautiful/step_04/lib/src/shared/providers/playlists.dart index e8bab994dd..f27f71b3ec 100644 --- a/boring_to_beautiful/step_04/lib/src/shared/providers/playlists.dart +++ b/boring_to_beautiful/step_04/lib/src/shared/providers/playlists.dart @@ -18,41 +18,50 @@ class PlaylistsProvider { static List images() { return [ const MyArtistImage( - image: 'assets/images/playlists/favorite.jpg', - sourceLink: 'https://unsplash.com/photos/60GsdOMRFGc', - sourceName: 'Karsten Winegeart'), + image: 'assets/images/playlists/favorite.jpg', + sourceLink: 'https://unsplash.com/photos/60GsdOMRFGc', + sourceName: 'Karsten Winegeart', + ), const MyArtistImage( - image: 'assets/images/playlists/austin.jpg', - sourceLink: 'https://unsplash.com/photos/AlBgcDfDG_s', - sourceName: 'Carlos Alfonso'), + image: 'assets/images/playlists/austin.jpg', + sourceLink: 'https://unsplash.com/photos/AlBgcDfDG_s', + sourceName: 'Carlos Alfonso', + ), const MyArtistImage( - image: 'assets/images/playlists/reading.jpg', - sourceLink: 'https://unsplash.com/photos/wkgv7I2VTzM', - sourceName: 'Alexandra Fuller'), + image: 'assets/images/playlists/reading.jpg', + sourceLink: 'https://unsplash.com/photos/wkgv7I2VTzM', + sourceName: 'Alexandra Fuller', + ), const MyArtistImage( - image: 'assets/images/playlists/workout.jpg', - sourceLink: 'https://unsplash.com/photos/CnEEF5eJemQ', - sourceName: 'Karsten Winegeart'), + image: 'assets/images/playlists/workout.jpg', + sourceLink: 'https://unsplash.com/photos/CnEEF5eJemQ', + sourceName: 'Karsten Winegeart', + ), const MyArtistImage( - image: 'assets/images/playlists/calm.jpg', - sourceLink: 'https://unsplash.com/photos/NTyBbu66_SI', - sourceName: 'Jared Rice'), + image: 'assets/images/playlists/calm.jpg', + sourceLink: 'https://unsplash.com/photos/NTyBbu66_SI', + sourceName: 'Jared Rice', + ), const MyArtistImage( - image: 'assets/images/playlists/coffee.jpg', - sourceLink: 'https://unsplash.com/photos/XOhI_kW_TaM', - sourceName: 'Nathan Dumlao'), + image: 'assets/images/playlists/coffee.jpg', + sourceLink: 'https://unsplash.com/photos/XOhI_kW_TaM', + sourceName: 'Nathan Dumlao', + ), const MyArtistImage( - image: 'assets/images/playlists/piano.jpg', - sourceLink: 'https://unsplash.com/photos/BhfE1IgcsA8', - sourceName: 'Jordan Whitfield'), + image: 'assets/images/playlists/piano.jpg', + sourceLink: 'https://unsplash.com/photos/BhfE1IgcsA8', + sourceName: 'Jordan Whitfield', + ), const MyArtistImage( - image: 'assets/images/playlists/studying.jpg', - sourceLink: 'https://unsplash.com/photos/-moT-Deiw1M', - sourceName: 'Humble Lamb'), + image: 'assets/images/playlists/studying.jpg', + sourceLink: 'https://unsplash.com/photos/-moT-Deiw1M', + sourceName: 'Humble Lamb', + ), const MyArtistImage( - image: 'assets/images/playlists/jazz.jpg', - sourceLink: 'https://unsplash.com/photos/BY_KyTwTKq4', - sourceName: 'dimitri.photography'), + image: 'assets/images/playlists/jazz.jpg', + sourceLink: 'https://unsplash.com/photos/BY_KyTwTKq4', + sourceName: 'dimitri.photography', + ), ]; } @@ -85,8 +94,10 @@ class PlaylistsProvider { ); } - static final List _randomPlaylists = - List.generate(10, (index) => randomLengthPlaylist()); + static final List _randomPlaylists = List.generate( + 10, + (index) => randomLengthPlaylist(), + ); } String randomId() { diff --git a/boring_to_beautiful/step_04/lib/src/shared/providers/songs.dart b/boring_to_beautiful/step_04/lib/src/shared/providers/songs.dart index ed018a83ff..f1205f2dcb 100644 --- a/boring_to_beautiful/step_04/lib/src/shared/providers/songs.dart +++ b/boring_to_beautiful/step_04/lib/src/shared/providers/songs.dart @@ -52,9 +52,10 @@ final _songs = [ ArtistsProvider.shared.getArtist('jonjames')!, '3:35'.toDuration(), const MyArtistImage( - image: 'assets/images/albums/artist4-album2.jpg', - sourceLink: 'https://unsplash.com/photos/RQgKM1h2agA', - sourceName: 'Alexandru Acea'), + image: 'assets/images/albums/artist4-album2.jpg', + sourceLink: 'https://unsplash.com/photos/RQgKM1h2agA', + sourceName: 'Alexandru Acea', + ), ), RankedSong( 2, @@ -62,9 +63,10 @@ final _songs = [ ArtistsProvider.shared.getArtist('jonjames')!, '3:52'.toDuration(), const MyArtistImage( - image: 'assets/images/albums/artist4-album1.jpg', - sourceLink: 'https://unsplash.com/photos/ZWDg7v2FPWE', - sourceName: 'Jr Korpa'), + image: 'assets/images/albums/artist4-album1.jpg', + sourceLink: 'https://unsplash.com/photos/ZWDg7v2FPWE', + sourceName: 'Jr Korpa', + ), ), RankedSong( 3, @@ -72,9 +74,10 @@ final _songs = [ ArtistsProvider.shared.getArtist('jonjames')!, '3:39'.toDuration(), const MyArtistImage( - image: 'assets/images/albums/artist4-album3.jpg', - sourceLink: 'https://unsplash.com/photos/rX12B5uX7QM', - sourceName: 'Stormseeker'), + image: 'assets/images/albums/artist4-album3.jpg', + sourceLink: 'https://unsplash.com/photos/rX12B5uX7QM', + sourceName: 'Stormseeker', + ), ), RankedSong( 1, diff --git a/boring_to_beautiful/step_04/lib/src/shared/providers/theme.dart b/boring_to_beautiful/step_04/lib/src/shared/providers/theme.dart index a152dcdcba..a86e3daf64 100644 --- a/boring_to_beautiful/step_04/lib/src/shared/providers/theme.dart +++ b/boring_to_beautiful/step_04/lib/src/shared/providers/theme.dart @@ -28,12 +28,13 @@ class ThemeSettingChange extends Notification { } class ThemeProvider extends InheritedWidget { - const ThemeProvider( - {super.key, - required this.settings, - required this.lightDynamic, - required this.darkDynamic, - required super.child}); + const ThemeProvider({ + super.key, + required this.settings, + required this.lightDynamic, + required this.darkDynamic, + required super.child, + }); final ValueNotifier settings; final ColorScheme? lightDynamic; @@ -59,8 +60,9 @@ class ThemeProvider extends InheritedWidget { Color blend(Color targetColor) { return Color( - // ignore: deprecated_member_use - Blend.harmonize(targetColor.value, settings.value.sourceColor.value)); + // ignore: deprecated_member_use + Blend.harmonize(targetColor.value, settings.value.sourceColor.value), + ); } Color source(Color? target) { @@ -72,18 +74,18 @@ class ThemeProvider extends InheritedWidget { } ColorScheme colors(Brightness brightness, Color? targetColor) { - final dynamicPrimary = brightness == Brightness.light - ? lightDynamic?.primary - : darkDynamic?.primary; + final dynamicPrimary = + brightness == Brightness.light + ? lightDynamic?.primary + : darkDynamic?.primary; return ColorScheme.fromSeed( seedColor: dynamicPrimary ?? source(targetColor), brightness: brightness, ); } - ShapeBorder get shapeMedium => RoundedRectangleBorder( - borderRadius: BorderRadius.circular(8), - ); + ShapeBorder get shapeMedium => + RoundedRectangleBorder(borderRadius: BorderRadius.circular(8)); CardTheme cardTheme() { return CardTheme( @@ -113,21 +115,13 @@ class ThemeProvider extends InheritedWidget { labelColor: colors.secondary, unselectedLabelColor: colors.onSurfaceVariant, indicator: BoxDecoration( - border: Border( - bottom: BorderSide( - color: colors.secondary, - width: 2, - ), - ), + border: Border(bottom: BorderSide(color: colors.secondary, width: 2)), ), ); } BottomAppBarTheme bottomAppBarTheme(ColorScheme colors) { - return BottomAppBarTheme( - color: colors.surface, - elevation: 0, - ); + return BottomAppBarTheme(color: colors.surface, elevation: 0); } BottomNavigationBarThemeData bottomNavigationBarTheme(ColorScheme colors) { @@ -146,9 +140,7 @@ class ThemeProvider extends InheritedWidget { } DrawerThemeData drawerTheme(ColorScheme colors) { - return DrawerThemeData( - backgroundColor: colors.surface, - ); + return DrawerThemeData(backgroundColor: colors.surface); } ThemeData light([Color? targetColor]) { @@ -207,10 +199,7 @@ class ThemeProvider extends InheritedWidget { } class ThemeSettings { - ThemeSettings({ - required this.sourceColor, - required this.themeMode, - }); + ThemeSettings({required this.sourceColor, required this.themeMode}); final Color sourceColor; final ThemeMode themeMode; @@ -221,10 +210,7 @@ Color randomColor() { } // Custom Colors -const linkColor = CustomColor( - name: 'Link Color', - color: Color(0xFF00B0FF), -); +const linkColor = CustomColor(name: 'Link Color', color: Color(0xFF00B0FF)); class CustomColor { const CustomColor({ diff --git a/boring_to_beautiful/step_04/lib/src/shared/router.dart b/boring_to_beautiful/step_04/lib/src/shared/router.dart index 3efb7362fa..db82627246 100644 --- a/boring_to_beautiful/step_04/lib/src/shared/router.dart +++ b/boring_to_beautiful/step_04/lib/src/shared/router.dart @@ -20,11 +20,7 @@ final artistsProvider = ArtistsProvider(); final playlistsProvider = PlaylistsProvider(); const List destinations = [ - NavigationDestination( - label: 'Home', - icon: Icon(Icons.home), - route: '/', - ), + NavigationDestination(label: 'Home', icon: Icon(Icons.home), route: '/'), NavigationDestination( label: 'Playlists', icon: Icon(Icons.playlist_add_check), @@ -56,41 +52,46 @@ final appRouter = GoRouter( // HomeScreen GoRoute( path: '/', - pageBuilder: (context, state) => const MaterialPage( - key: _pageKey, - child: RootLayout( - key: _scaffoldKey, - currentIndex: 0, - child: HomeScreen(), - ), - ), + pageBuilder: + (context, state) => const MaterialPage( + key: _pageKey, + child: RootLayout( + key: _scaffoldKey, + currentIndex: 0, + child: HomeScreen(), + ), + ), ), // PlaylistHomeScreen GoRoute( path: '/playlists', - pageBuilder: (context, state) => const MaterialPage( - key: _pageKey, - child: RootLayout( - key: _scaffoldKey, - currentIndex: 1, - child: PlaylistHomeScreen(), - ), - ), - routes: [ - GoRoute( - path: ':pid', - pageBuilder: (context, state) => MaterialPage( - key: state.pageKey, + pageBuilder: + (context, state) => const MaterialPage( + key: _pageKey, child: RootLayout( key: _scaffoldKey, currentIndex: 1, - child: PlaylistScreen( - playlist: playlistsProvider - .getPlaylist(state.pathParameters['pid']!)!, - ), + child: PlaylistHomeScreen(), ), ), + routes: [ + GoRoute( + path: ':pid', + pageBuilder: + (context, state) => MaterialPage( + key: state.pageKey, + child: RootLayout( + key: _scaffoldKey, + currentIndex: 1, + child: PlaylistScreen( + playlist: + playlistsProvider.getPlaylist( + state.pathParameters['pid']!, + )!, + ), + ), + ), ), ], ), @@ -98,28 +99,32 @@ final appRouter = GoRouter( // ArtistHomeScreen GoRoute( path: '/artists', - pageBuilder: (context, state) => const MaterialPage( - key: _pageKey, - child: RootLayout( - key: _scaffoldKey, - currentIndex: 2, - child: ArtistsScreen(), - ), - ), - routes: [ - GoRoute( - path: ':aid', - pageBuilder: (context, state) => MaterialPage( - key: state.pageKey, + pageBuilder: + (context, state) => const MaterialPage( + key: _pageKey, child: RootLayout( key: _scaffoldKey, currentIndex: 2, - child: ArtistScreen( - artist: - artistsProvider.getArtist(state.pathParameters['aid']!)!, - ), + child: ArtistsScreen(), ), ), + routes: [ + GoRoute( + path: ':aid', + pageBuilder: + (context, state) => MaterialPage( + key: state.pageKey, + child: RootLayout( + key: _scaffoldKey, + currentIndex: 2, + child: ArtistScreen( + artist: + artistsProvider.getArtist( + state.pathParameters['aid']!, + )!, + ), + ), + ), // builder: (context, state) => ArtistScreen( // id: state.params['aid']!, // ), @@ -129,14 +134,15 @@ final appRouter = GoRouter( for (final route in destinations.skip(3)) GoRoute( path: route.route, - pageBuilder: (context, state) => MaterialPage( - key: _pageKey, - child: RootLayout( - key: _scaffoldKey, - currentIndex: destinations.indexOf(route), - child: const SizedBox(), - ), - ), + pageBuilder: + (context, state) => MaterialPage( + key: _pageKey, + child: RootLayout( + key: _scaffoldKey, + currentIndex: destinations.indexOf(route), + child: const SizedBox(), + ), + ), ), ], ); diff --git a/boring_to_beautiful/step_04/lib/src/shared/views/adaptive_image_card.dart b/boring_to_beautiful/step_04/lib/src/shared/views/adaptive_image_card.dart index 07cab2b0d7..99f5be0837 100644 --- a/boring_to_beautiful/step_04/lib/src/shared/views/adaptive_image_card.dart +++ b/boring_to_beautiful/step_04/lib/src/shared/views/adaptive_image_card.dart @@ -36,20 +36,13 @@ class AdaptiveImageCard extends StatelessWidget { ), ), Expanded( - child: Padding( - padding: const EdgeInsets.all(20), - child: child, - ), + child: Padding(padding: const EdgeInsets.all(20), child: child), ), ], ); } return Padding( - padding: const EdgeInsets.only( - left: 20, - bottom: 20, - top: 20, - ), + padding: const EdgeInsets.only(left: 20, bottom: 20, top: 20), child: Row( mainAxisAlignment: MainAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.end, @@ -65,11 +58,8 @@ class AdaptiveImageCard extends StatelessWidget { ), ), Expanded( - child: Padding( - padding: const EdgeInsets.all(20), - child: child, - ), - ) + child: Padding(padding: const EdgeInsets.all(20), child: child), + ), ], ), ); diff --git a/boring_to_beautiful/step_04/lib/src/shared/views/adaptive_navigation.dart b/boring_to_beautiful/step_04/lib/src/shared/views/adaptive_navigation.dart index 92734c9005..aa78766292 100644 --- a/boring_to_beautiful/step_04/lib/src/shared/views/adaptive_navigation.dart +++ b/boring_to_beautiful/step_04/lib/src/shared/views/adaptive_navigation.dart @@ -30,12 +30,15 @@ class AdaptiveNavigation extends StatelessWidget { NavigationRail( extended: dimens.maxWidth >= 800, minExtendedWidth: 180, - destinations: destinations - .map((e) => NavigationRailDestination( - icon: e.icon, - label: Text(e.label), - )) - .toList(), + destinations: + destinations + .map( + (e) => NavigationRailDestination( + icon: e.icon, + label: Text(e.label), + ), + ) + .toList(), selectedIndex: selectedIndex, onDestinationSelected: onDestinationSelected, ), diff --git a/boring_to_beautiful/step_04/lib/src/shared/views/article_content.dart b/boring_to_beautiful/step_04/lib/src/shared/views/article_content.dart index af243f015b..c5a0b5e62a 100644 --- a/boring_to_beautiful/step_04/lib/src/shared/views/article_content.dart +++ b/boring_to_beautiful/step_04/lib/src/shared/views/article_content.dart @@ -5,11 +5,7 @@ import 'package:flutter/material.dart'; class ArticleContent extends StatelessWidget { - const ArticleContent({ - super.key, - required this.child, - this.maxWidth = 960, - }); + const ArticleContent({super.key, required this.child, this.maxWidth = 960}); final double maxWidth; final Widget child; @@ -19,13 +15,8 @@ class ArticleContent extends StatelessWidget { return Container( alignment: Alignment.topCenter, child: ConstrainedBox( - constraints: BoxConstraints( - maxWidth: maxWidth, - ), - child: Padding( - padding: const EdgeInsets.all(15), - child: child, - ), + constraints: BoxConstraints(maxWidth: maxWidth), + child: Padding(padding: const EdgeInsets.all(15), child: child), ), ); } diff --git a/boring_to_beautiful/step_04/lib/src/shared/views/bottom_bar.dart b/boring_to_beautiful/step_04/lib/src/shared/views/bottom_bar.dart index 06e085a9b6..bf15ad9bb0 100644 --- a/boring_to_beautiful/step_04/lib/src/shared/views/bottom_bar.dart +++ b/boring_to_beautiful/step_04/lib/src/shared/views/bottom_bar.dart @@ -26,16 +26,18 @@ class BottomBar extends StatelessWidget implements PreferredSizeWidget { final bloc = BlocProvider.of(context); return BlocBuilder( bloc: bloc, - builder: (context, state) => _BottomBar( - artist: state.songWithProgress?.song.artist, - isMuted: state.isMuted, - isPlaying: state.isPlaying, - preferredSize: preferredSize, - progress: state.songWithProgress?.progress, - song: state.songWithProgress?.song, - togglePlayPause: () => bloc.add(const PlaybackEvent.togglePlayPause()), - volume: state.volume, - ), + builder: + (context, state) => _BottomBar( + artist: state.songWithProgress?.song.artist, + isMuted: state.isMuted, + isPlaying: state.isPlaying, + preferredSize: preferredSize, + progress: state.songWithProgress?.progress, + song: state.songWithProgress?.song, + togglePlayPause: + () => bloc.add(const PlaybackEvent.togglePlayPause()), + volume: state.volume, + ), ); } } @@ -63,10 +65,12 @@ class _BottomBar extends StatelessWidget { @override Widget build(BuildContext context) => LayoutBuilder( - builder: (context, constraints) => constraints.isTablet - ? _buildDesktopBar(context, constraints) - : _buildMobileBar(context, constraints), - ); + builder: + (context, constraints) => + constraints.isTablet + ? _buildDesktopBar(context, constraints) + : _buildMobileBar(context, constraints), + ); Widget _buildDesktopBar(BuildContext context, BoxConstraints constraints) { return ColoredBox( @@ -79,10 +83,7 @@ class _BottomBar extends StatelessWidget { Row( children: [ _AlbumArt(song: song), - _SongDetails( - artist: artist, - song: song, - ), + _SongDetails(artist: artist, song: song), ], ), Flexible( @@ -95,12 +96,7 @@ class _BottomBar extends StatelessWidget { isPlaying: isPlaying, togglePlayPause: togglePlayPause, ), - Center( - child: _ProgressBar( - progress: progress, - song: song, - ), - ), + Center(child: _ProgressBar(progress: progress, song: song)), ], ), ), @@ -114,17 +110,18 @@ class _BottomBar extends StatelessWidget { final overlay = Overlay.of(context); OverlayEntry? entry; entry = OverlayEntry( - builder: (context) => Stack( - children: [ - Positioned( - child: _FullScreenPlayer( - onClose: () { - entry?.remove(); - }, - ), + builder: + (context) => Stack( + children: [ + Positioned( + child: _FullScreenPlayer( + onClose: () { + entry?.remove(); + }, + ), + ), + ], ), - ], - ), ); overlay.insert(entry); }, @@ -136,10 +133,10 @@ class _BottomBar extends StatelessWidget { } double get songProgress => switch ((progress, song)) { - (Duration progress, Song song) => - progress.inMilliseconds / song.length.inMilliseconds, - _ => 0, - }; + (Duration progress, Song song) => + progress.inMilliseconds / song.length.inMilliseconds, + _ => 0, + }; Widget _buildMobileBar(BuildContext context, BoxConstraints constraints) { return ColoredBox( @@ -152,17 +149,18 @@ class _BottomBar extends StatelessWidget { final overlay = Overlay.of(context); OverlayEntry? entry; entry = OverlayEntry( - builder: (context) => Stack( - children: [ - Positioned( - child: _MobilePlayer( - onClose: () { - entry?.remove(); - }, - ), + builder: + (context) => Stack( + children: [ + Positioned( + child: _MobilePlayer( + onClose: () { + entry?.remove(); + }, + ), + ), + ], ), - ], - ), ); overlay.insert(entry); }, @@ -191,10 +189,7 @@ class _BottomBar extends StatelessWidget { mainAxisAlignment: MainAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start, children: [ - Text( - song?.title ?? '', - style: context.labelMedium, - ), + Text(song?.title ?? '', style: context.labelMedium), Text( song?.artist.name ?? '', style: context.labelSmall, @@ -220,10 +215,7 @@ class _BottomBar extends StatelessWidget { } class _ProgressBar extends StatelessWidget { - const _ProgressBar({ - required this.progress, - required this.song, - }); + const _ProgressBar({required this.progress, required this.song}); /// Current playback depth into user is into [song]. final Duration? progress; @@ -231,10 +223,10 @@ class _ProgressBar extends StatelessWidget { final Song? song; double get songProgress => switch ((progress, song)) { - (Duration progress, Song song) => - progress.inMilliseconds / song.length.inMilliseconds, - _ => 0, - }; + (Duration progress, Song song) => + progress.inMilliseconds / song.length.inMilliseconds, + _ => 0, + }; @override Widget build(BuildContext context) { @@ -252,29 +244,32 @@ class _ProgressBar extends StatelessWidget { children: [ const SizedBox(width: 10), SizedBox( - child: progress != null - ? Text(progress!.toHumanizedString(), - style: Theme.of(context).textTheme.bodySmall) - : const Text('-'), + child: + progress != null + ? Text( + progress!.toHumanizedString(), + style: Theme.of(context).textTheme.bodySmall, + ) + : const Text('-'), ), Expanded( child: Slider( value: songProgress.clamp(0, 1), divisions: 1000, onChanged: (percent) { - BlocProvider.of(context).add( - PlaybackEvent.moveToInSong(percent), - ); + BlocProvider.of( + context, + ).add(PlaybackEvent.moveToInSong(percent)); }, onChangeEnd: (percent) { - BlocProvider.of(context).add( - PlaybackEvent.moveToInSong(percent), - ); + BlocProvider.of( + context, + ).add(PlaybackEvent.moveToInSong(percent)); // Because dragging pauses auto playback, resume playing // once the user finishes dragging. - BlocProvider.of(context).add( - const PlaybackEvent.togglePlayPause(), - ); + BlocProvider.of( + context, + ).add(const PlaybackEvent.togglePlayPause()); }, activeColor: Theme.of(context).colorScheme.onTertiaryContainer, @@ -282,12 +277,15 @@ class _ProgressBar extends StatelessWidget { ), ), SizedBox( - child: song != null - ? Text(song!.length.toHumanizedString(), - style: Theme.of(context).textTheme.bodySmall) - : const Text('-'), + child: + song != null + ? Text( + song!.length.toHumanizedString(), + style: Theme.of(context).textTheme.bodySmall, + ) + : const Text('-'), ), - const SizedBox(width: 10) + const SizedBox(width: 10), ], ), ); @@ -297,10 +295,7 @@ class _ProgressBar extends StatelessWidget { } class _VolumeBar extends StatelessWidget { - const _VolumeBar({ - required this.volume, - required this.isMuted, - }); + const _VolumeBar({required this.volume, required this.isMuted}); /// The percentage, between 0 and 1, at which to render the volume slider. final double volume; @@ -313,17 +308,16 @@ class _VolumeBar extends StatelessWidget { @override Widget build(BuildContext context) { return ConstrainedBox( - constraints: const BoxConstraints( - maxWidth: 200, - ), + constraints: const BoxConstraints(maxWidth: 200), child: Padding( padding: const EdgeInsets.all(8), child: Row( children: [ GestureDetector( - onTap: () => BlocProvider.of(context).add( - const PlaybackEvent.toggleMute(), - ), + onTap: + () => BlocProvider.of( + context, + ).add(const PlaybackEvent.toggleMute()), child: Icon(!isMuted ? Icons.volume_mute : Icons.volume_off), ), Expanded( @@ -332,8 +326,10 @@ class _VolumeBar extends StatelessWidget { min: 0, max: 1, divisions: 100, - onChanged: (newValue) => BlocProvider.of(context) - .add(PlaybackEvent.setVolume(newValue)), + onChanged: + (newValue) => BlocProvider.of( + context, + ).add(PlaybackEvent.setVolume(newValue)), activeColor: Theme.of(context).colorScheme.onTertiaryContainer, inactiveColor: Theme.of(context).colorScheme.onSurface, ), @@ -356,49 +352,50 @@ class _PlaybackControls extends StatelessWidget { @override Widget build(BuildContext context) { - return LayoutBuilder(builder: (context, constraints) { - double iconSize = 24; - double playIconSize = 32; - double innerPadding = 16; - double playPadding = 20; - if (constraints.maxWidth < 500) { - iconSize = 21; - playIconSize = 28; - innerPadding = 14; - playPadding = 17; - } - return Row( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Padding( + return LayoutBuilder( + builder: (context, constraints) { + double iconSize = 24; + double playIconSize = 32; + double innerPadding = 16; + double playPadding = 20; + if (constraints.maxWidth < 500) { + iconSize = 21; + playIconSize = 28; + innerPadding = 14; + playPadding = 17; + } + return Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Padding( padding: EdgeInsets.fromLTRB(0, 0, innerPadding, 0), - child: Icon(Icons.shuffle, size: iconSize)), - Icon(Icons.skip_previous, size: iconSize), - Padding( - padding: EdgeInsets.fromLTRB(playPadding, 0, innerPadding, 0), - child: GestureDetector( - onTap: togglePlayPause, - child: Icon( - isPlaying ? Icons.pause_circle : Icons.play_circle, - size: playIconSize, + child: Icon(Icons.shuffle, size: iconSize), + ), + Icon(Icons.skip_previous, size: iconSize), + Padding( + padding: EdgeInsets.fromLTRB(playPadding, 0, innerPadding, 0), + child: GestureDetector( + onTap: togglePlayPause, + child: Icon( + isPlaying ? Icons.pause_circle : Icons.play_circle, + size: playIconSize, + ), ), ), - ), - Icon(Icons.skip_next, size: iconSize), - Padding( - padding: EdgeInsets.fromLTRB(innerPadding, 0, 0, 0), - child: Icon(Icons.repeat, size: iconSize), - ), - ], - ); - }); + Icon(Icons.skip_next, size: iconSize), + Padding( + padding: EdgeInsets.fromLTRB(innerPadding, 0, 0, 0), + child: Icon(Icons.repeat, size: iconSize), + ), + ], + ); + }, + ); } } class _AlbumArt extends StatelessWidget { - const _AlbumArt({ - required this.song, - }); + const _AlbumArt({required this.song}); final Song? song; @@ -409,21 +406,17 @@ class _AlbumArt extends StatelessWidget { child: SizedBox( width: 70, height: 70, - child: song != null - ? Image.asset(song!.image.image) - : Container( - color: Colors.pink[100], - ), + child: + song != null + ? Image.asset(song!.image.image) + : Container(color: Colors.pink[100]), ), ); } } class _SongDetails extends StatelessWidget { - const _SongDetails({ - required this.artist, - required this.song, - }); + const _SongDetails({required this.artist, required this.song}); final Artist? artist; final Song? song; @@ -455,9 +448,7 @@ class _SongDetails extends StatelessWidget { } class _FullScreenPlayer extends StatefulWidget { - const _FullScreenPlayer({ - required this.onClose, - }); + const _FullScreenPlayer({required this.onClose}); final VoidCallback onClose; @@ -489,29 +480,33 @@ class _FullScreenPlayerState extends State<_FullScreenPlayer> { final bloc = BlocProvider.of(context); return BlocBuilder( bloc: bloc, - builder: (context, state) => Theme( - data: ThemeProvider.of(context).dark(), - child: Scaffold( - body: LayoutBuilder( - builder: (context, dimens) { - return MouseRegion( - onHover: (_) { - setState(() { - _showControls = true; - }); - hideControls(); + builder: + (context, state) => Theme( + data: ThemeProvider.of(context).dark(), + child: Scaffold( + body: LayoutBuilder( + builder: (context, dimens) { + return MouseRegion( + onHover: (_) { + setState(() { + _showControls = true; + }); + hideControls(); + }, + child: buildPlayer(context, state, dimens), + ); }, - child: buildPlayer(context, state, dimens), - ); - }, + ), + ), ), - ), - ), ); } Widget buildPlayer( - BuildContext context, PlaybackState state, BoxConstraints dimens) { + BuildContext context, + PlaybackState state, + BoxConstraints dimens, + ) { final bloc = BlocProvider.of(context); final current = state.songWithProgress; final song = current?.song; @@ -519,26 +514,25 @@ class _FullScreenPlayerState extends State<_FullScreenPlayer> { fit: StackFit.expand, children: [ Positioned.fill( - child: current == null - ? const Center(child: Text('No song selected')) - : Container( - color: context.colors.shadow, - child: Opacity( - opacity: 0.3, - child: Image.asset( - song!.image.image, - fit: BoxFit.cover, + child: + current == null + ? const Center(child: Text('No song selected')) + : Container( + color: context.colors.shadow, + child: Opacity( + opacity: 0.3, + child: Image.asset(song!.image.image, fit: BoxFit.cover), ), ), - ), ), Positioned( top: 20, right: 20, child: IconButton( - color: song != null - ? context.colors.onSurface - : context.colors.onSurface, + color: + song != null + ? context.colors.onSurface + : context.colors.onSurface, icon: const Icon(Icons.fullscreen_exit), onPressed: widget.onClose, ), @@ -569,8 +563,9 @@ class _FullScreenPlayerState extends State<_FullScreenPlayer> { Text( song.artist.name, style: context.labelSmall!.copyWith( - fontSize: 20, - color: context.colors.onSurface.withAlpha(204)), + fontSize: 20, + color: context.colors.onSurface.withAlpha(204), + ), overflow: TextOverflow.clip, ), ], @@ -582,10 +577,7 @@ class _FullScreenPlayerState extends State<_FullScreenPlayer> { right: 20, left: 20, bottom: dimens.biggest.height * 0.2, - child: _ProgressBar( - progress: current?.progress, - song: song, - ), + child: _ProgressBar(progress: current?.progress, song: song), ), Positioned( right: 20, @@ -598,8 +590,8 @@ class _FullScreenPlayerState extends State<_FullScreenPlayer> { scale: 1.5, child: _PlaybackControls( isPlaying: state.isPlaying, - togglePlayPause: () => - bloc.add(const PlaybackEvent.togglePlayPause()), + togglePlayPause: + () => bloc.add(const PlaybackEvent.togglePlayPause()), ), ), ), @@ -611,9 +603,7 @@ class _FullScreenPlayerState extends State<_FullScreenPlayer> { } class _MobilePlayer extends StatelessWidget { - const _MobilePlayer({ - required this.onClose, - }); + const _MobilePlayer({required this.onClose}); final VoidCallback onClose; @@ -622,46 +612,52 @@ class _MobilePlayer extends StatelessWidget { final bloc = BlocProvider.of(context); return BlocBuilder( bloc: bloc, - builder: (context, state) => Theme( - data: ThemeProvider.of(context).dark(), - child: Scaffold( - body: LayoutBuilder( - builder: (context, dimens) { - return buildPlayer(context, state, dimens); - }, + builder: + (context, state) => Theme( + data: ThemeProvider.of(context).dark(), + child: Scaffold( + body: LayoutBuilder( + builder: (context, dimens) { + return buildPlayer(context, state, dimens); + }, + ), + ), ), - ), - ), ); } Widget buildPlayer( - BuildContext context, PlaybackState state, BoxConstraints dimens) { + BuildContext context, + PlaybackState state, + BoxConstraints dimens, + ) { final bloc = BlocProvider.of(context); final current = state.songWithProgress; return Stack( children: [ Positioned.fill( - child: current == null - ? const Center(child: Text('No song selected')) - : Container( - color: context.colors.shadow, - child: Opacity( - opacity: 0.3, - child: Image.asset( - current.song.image.image, - fit: BoxFit.cover, + child: + current == null + ? const Center(child: Text('No song selected')) + : Container( + color: context.colors.shadow, + child: Opacity( + opacity: 0.3, + child: Image.asset( + current.song.image.image, + fit: BoxFit.cover, + ), ), ), - ), ), Positioned( top: 20, left: 20, child: IconButton( - color: current?.song != null - ? context.colors.onSurface - : context.colors.onSurface, + color: + current?.song != null + ? context.colors.onSurface + : context.colors.onSurface, icon: const RotatedBox( quarterTurns: 1, child: Icon(Icons.chevron_right), @@ -676,10 +672,7 @@ class _MobilePlayer extends StatelessWidget { left: 0, right: 0, height: dimens.biggest.height * 0.5, - child: Image.asset( - current.song.image.image, - fit: BoxFit.contain, - ), + child: Image.asset(current.song.image.image, fit: BoxFit.contain), ), Positioned( left: 0, @@ -705,8 +698,9 @@ class _MobilePlayer extends StatelessWidget { Text( current.song.artist.name, style: context.labelSmall!.copyWith( - fontSize: 12, - color: context.colors.onSurface.withAlpha(204)), + fontSize: 12, + color: context.colors.onSurface.withAlpha(204), + ), overflow: TextOverflow.clip, ), ], @@ -718,15 +712,12 @@ class _MobilePlayer extends StatelessWidget { scale: 1.5, child: _PlaybackControls( isPlaying: state.isPlaying, - togglePlayPause: () => - bloc.add(const PlaybackEvent.togglePlayPause()), + togglePlayPause: + () => bloc.add(const PlaybackEvent.togglePlayPause()), ), ), ), - _ProgressBar( - progress: current.progress, - song: current.song, - ), + _ProgressBar(progress: current.progress, song: current.song), ], ), ), diff --git a/boring_to_beautiful/step_04/lib/src/shared/views/brightness_toggle.dart b/boring_to_beautiful/step_04/lib/src/shared/views/brightness_toggle.dart index 46dde4810f..5b5332392b 100644 --- a/boring_to_beautiful/step_04/lib/src/shared/views/brightness_toggle.dart +++ b/boring_to_beautiful/step_04/lib/src/shared/views/brightness_toggle.dart @@ -13,9 +13,10 @@ class BrightnessToggle extends StatelessWidget { Widget build(BuildContext context) { final isDark = Theme.of(context).brightness == Brightness.dark; return IconButton( - icon: Theme.of(context).brightness == Brightness.light - ? const Icon(Icons.brightness_3) - : const Icon(Icons.brightness_7), + icon: + Theme.of(context).brightness == Brightness.light + ? const Icon(Icons.brightness_3) + : const Icon(Icons.brightness_7), onPressed: () { final themeProvider = ThemeProvider.of(context); final settings = themeProvider.settings.value; diff --git a/boring_to_beautiful/step_04/lib/src/shared/views/center_row.dart b/boring_to_beautiful/step_04/lib/src/shared/views/center_row.dart index 36d428e3b8..c1f3effcc2 100644 --- a/boring_to_beautiful/step_04/lib/src/shared/views/center_row.dart +++ b/boring_to_beautiful/step_04/lib/src/shared/views/center_row.dart @@ -5,23 +5,12 @@ import 'package:flutter/material.dart'; class CenterRow extends StatelessWidget { - const CenterRow({ - super.key, - required this.child, - }); + const CenterRow({super.key, required this.child}); final Widget child; @override Widget build(BuildContext context) { - return Row( - children: [ - Expanded( - child: Center( - child: child, - ), - ), - ], - ); + return Row(children: [Expanded(child: Center(child: child))]); } } diff --git a/boring_to_beautiful/step_04/lib/src/shared/views/clickable.dart b/boring_to_beautiful/step_04/lib/src/shared/views/clickable.dart index cd7ef46268..f192f0b135 100644 --- a/boring_to_beautiful/step_04/lib/src/shared/views/clickable.dart +++ b/boring_to_beautiful/step_04/lib/src/shared/views/clickable.dart @@ -14,10 +14,7 @@ class Clickable extends StatelessWidget { Widget build(BuildContext context) { return MouseRegion( cursor: SystemMouseCursors.click, - child: GestureDetector( - onTap: onTap, - child: child, - ), + child: GestureDetector(onTap: onTap, child: child), ); } } diff --git a/boring_to_beautiful/step_04/lib/src/shared/views/events.dart b/boring_to_beautiful/step_04/lib/src/shared/views/events.dart index ed38465460..ab9140e56d 100644 --- a/boring_to_beautiful/step_04/lib/src/shared/views/events.dart +++ b/boring_to_beautiful/step_04/lib/src/shared/views/events.dart @@ -24,43 +24,18 @@ class Events extends StatelessWidget { child: DataTable( horizontalMargin: 5.0, columns: const [ - DataColumn( - label: Text( - 'Date', - ), - numeric: true, - ), - DataColumn( - label: Text( - 'Event', - ), - ), - DataColumn( - label: Text( - 'Location', - ), - ), - DataColumn( - label: Text( - 'More info', - ), - ), + DataColumn(label: Text('Date'), numeric: true), + DataColumn(label: Text('Event')), + DataColumn(label: Text('Location')), + DataColumn(label: Text('More info')), ], rows: [ for (final event in artist.events) DataRow( cells: [ - DataCell( - Text(event.date), - ), - DataCell( - Row(children: [ - Expanded(child: Text(event.title)), - ]), - ), - DataCell( - Text(event.location), - ), + DataCell(Text(event.date)), + DataCell(Row(children: [Expanded(child: Text(event.title))])), + DataCell(Text(event.location)), DataCell( Clickable( child: Text( @@ -70,8 +45,9 @@ class Events extends StatelessWidget { decoration: TextDecoration.underline, ), ), - onTap: () => - launchUrl(Uri.parse('https://docs.flutter.dev')), + onTap: + () => + launchUrl(Uri.parse('https://docs.flutter.dev')), ), ), ], diff --git a/boring_to_beautiful/step_04/lib/src/shared/views/hover_toggle.dart b/boring_to_beautiful/step_04/lib/src/shared/views/hover_toggle.dart index ec98c2863c..649cfcab63 100644 --- a/boring_to_beautiful/step_04/lib/src/shared/views/hover_toggle.dart +++ b/boring_to_beautiful/step_04/lib/src/shared/views/hover_toggle.dart @@ -31,9 +31,10 @@ class _HoverToggleState extends State with MaterialStateMixin { cursor: isHovered ? SystemMouseCursors.click : MouseCursor.defer, onEnter: (_) => setMaterialState(WidgetState.hovered, true), onExit: (_) => setMaterialState(WidgetState.hovered, false), - child: widget.mode == HoverMode.replace - ? _buildReplaceableChildren() - : _buildChildrenStack(), + child: + widget.mode == HoverMode.replace + ? _buildReplaceableChildren() + : _buildChildrenStack(), ), ); } @@ -41,12 +42,7 @@ class _HoverToggleState extends State with MaterialStateMixin { Widget _buildChildrenStack() { Widget child = isHovered ? Opacity(opacity: 0.2, child: widget.child) : widget.child; - return Stack( - children: [ - child, - if (isHovered) widget.hoverChild, - ], - ); + return Stack(children: [child, if (isHovered) widget.hoverChild]); } Widget _buildReplaceableChildren() => diff --git a/boring_to_beautiful/step_04/lib/src/shared/views/hoverable_song_play_button.dart b/boring_to_beautiful/step_04/lib/src/shared/views/hoverable_song_play_button.dart index 512f3d1d3c..dd588e3dbe 100644 --- a/boring_to_beautiful/step_04/lib/src/shared/views/hoverable_song_play_button.dart +++ b/boring_to_beautiful/step_04/lib/src/shared/views/hoverable_song_play_button.dart @@ -29,9 +29,10 @@ class HoverableSongPlayButton extends StatelessWidget { hoverChild: Center( child: GestureDetector( child: const Icon(Icons.play_arrow), - onTap: () => BlocProvider.of(context).add( - PlaybackEvent.changeSong(song), - ), + onTap: + () => BlocProvider.of( + context, + ).add(PlaybackEvent.changeSong(song)), ), ), mode: hoverMode, diff --git a/boring_to_beautiful/step_04/lib/src/shared/views/image_card.dart b/boring_to_beautiful/step_04/lib/src/shared/views/image_card.dart index 0af9f75f33..6e7f6cd42d 100644 --- a/boring_to_beautiful/step_04/lib/src/shared/views/image_card.dart +++ b/boring_to_beautiful/step_04/lib/src/shared/views/image_card.dart @@ -7,13 +7,14 @@ import '../../shared/extensions.dart'; import 'outlined_card.dart'; class ImageCard extends StatelessWidget { - const ImageCard( - {super.key, - required this.title, - required this.details, - required this.image, - this.subtitle, - this.clickable = false}); + const ImageCard({ + super.key, + required this.title, + required this.details, + required this.image, + this.subtitle, + this.clickable = false, + }); final String title; final String? subtitle; @@ -28,54 +29,51 @@ class ImageCard extends StatelessWidget { clickable: clickable, child: Padding( padding: const EdgeInsets.all(8.0), - child: LayoutBuilder(builder: (context, constraints) { - return Row( - children: [ - if (constraints.maxWidth > 600) - SizedBox( - width: 170, - height: 170, - child: Image.asset( - image, - fit: BoxFit.cover, + child: LayoutBuilder( + builder: (context, constraints) { + return Row( + children: [ + if (constraints.maxWidth > 600) + SizedBox( + width: 170, + height: 170, + child: Image.asset(image, fit: BoxFit.cover), ), - ), - Expanded( - child: Padding( - padding: padding, - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Padding( - padding: const EdgeInsets.only(bottom: 5), - child: Text( - title, - style: context.titleLarge! - .copyWith(fontWeight: FontWeight.bold), - ), - ), - if (subtitle != null) + Expanded( + child: Padding( + padding: padding, + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ Padding( - padding: const EdgeInsets.only(bottom: 10), + padding: const EdgeInsets.only(bottom: 5), child: Text( - subtitle!, - style: context.labelMedium, + title, + style: context.titleLarge!.copyWith( + fontWeight: FontWeight.bold, + ), ), ), - Text( - details, - style: context.labelMedium?.copyWith( - fontSize: 16, - height: 1.25, + if (subtitle != null) + Padding( + padding: const EdgeInsets.only(bottom: 10), + child: Text(subtitle!, style: context.labelMedium), + ), + Text( + details, + style: context.labelMedium?.copyWith( + fontSize: 16, + height: 1.25, + ), ), - ), - ], + ], + ), ), ), - ), - ], - ); - }), + ], + ); + }, + ), ), ); } diff --git a/boring_to_beautiful/step_04/lib/src/shared/views/image_tile.dart b/boring_to_beautiful/step_04/lib/src/shared/views/image_tile.dart index 4f2bbebb96..dd99152af5 100644 --- a/boring_to_beautiful/step_04/lib/src/shared/views/image_tile.dart +++ b/boring_to_beautiful/step_04/lib/src/shared/views/image_tile.dart @@ -21,19 +21,17 @@ class ImageTile extends StatelessWidget { @override Widget build(BuildContext context) { return OutlinedCard( - child: Column(crossAxisAlignment: CrossAxisAlignment.start, children: [ - Row( - children: [ - Expanded( - child: Image.asset(image, fit: BoxFit.cover), - ), - ], - ), - Column( - mainAxisAlignment: MainAxisAlignment.center, - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - Padding( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + children: [Expanded(child: Image.asset(image, fit: BoxFit.cover))], + ), + Column( + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Padding( padding: const EdgeInsets.fromLTRB(10, 5, 10, 5), child: Text( title, @@ -43,20 +41,25 @@ class ImageTile extends StatelessWidget { ), overflow: TextOverflow.ellipsis, maxLines: 1, - )), - Padding( - padding: const EdgeInsets.symmetric(vertical: 5, horizontal: 10), - child: Text( - subtitle, - overflow: TextOverflow.ellipsis, - style: context.labelSmall, - maxLines: 2, - textAlign: TextAlign.center, + ), ), - ), - ], - ) - ]), + Padding( + padding: const EdgeInsets.symmetric( + vertical: 5, + horizontal: 10, + ), + child: Text( + subtitle, + overflow: TextOverflow.ellipsis, + style: context.labelSmall, + maxLines: 2, + textAlign: TextAlign.center, + ), + ), + ], + ), + ], + ), ); } } diff --git a/boring_to_beautiful/step_04/lib/src/shared/views/outlined_card.dart b/boring_to_beautiful/step_04/lib/src/shared/views/outlined_card.dart index 0d886e2c54..ff49275dc9 100644 --- a/boring_to_beautiful/step_04/lib/src/shared/views/outlined_card.dart +++ b/boring_to_beautiful/step_04/lib/src/shared/views/outlined_card.dart @@ -5,11 +5,7 @@ import 'package:flutter/material.dart'; class OutlinedCard extends StatefulWidget { - const OutlinedCard({ - super.key, - required this.child, - this.clickable = true, - }); + const OutlinedCard({super.key, required this.child, this.clickable = true}); final Widget child; final bool clickable; @@ -22,9 +18,10 @@ class _OutlinedCardState extends State { @override Widget build(BuildContext context) { return MouseRegion( - cursor: widget.clickable - ? SystemMouseCursors.click - : SystemMouseCursors.basic, + cursor: + widget.clickable + ? SystemMouseCursors.click + : SystemMouseCursors.basic, child: Container( decoration: BoxDecoration( border: Border.all( diff --git a/boring_to_beautiful/step_04/lib/src/shared/views/play_pause_listener.dart b/boring_to_beautiful/step_04/lib/src/shared/views/play_pause_listener.dart index 52fad00863..6b4fc66709 100644 --- a/boring_to_beautiful/step_04/lib/src/shared/views/play_pause_listener.dart +++ b/boring_to_beautiful/step_04/lib/src/shared/views/play_pause_listener.dart @@ -16,10 +16,7 @@ import '../playback/bloc/bloc.dart'; /// shortcuts. By sitting below that machinery, this installs a global Spacebar /// listener which toggles Playback, as is customary in music-playing apps. class PlayPauseListener extends StatelessWidget { - const PlayPauseListener({ - super.key, - required this.child, - }); + const PlayPauseListener({super.key, required this.child}); final Widget child; @@ -28,9 +25,7 @@ class PlayPauseListener extends StatelessWidget { // Immediately catch any [_PlayPauseIntent] events released by the inner // [Shortcuts] widget. return Actions( - actions: >{ - _PlayPauseIntent: _PlayPauseAction(), - }, + actions: >{_PlayPauseIntent: _PlayPauseAction()}, child: Shortcuts( // Register a shortcut for Spacebar presses that release a // [_PlayPauseIntent] up the tree to the nearest [Actions] widget. @@ -38,9 +33,9 @@ class PlayPauseListener extends StatelessWidget { const SingleActivator(LogicalKeyboardKey.space): _PlayPauseIntent( // Create a closure which sends a [TogglePlayPause] event to the // [PlaybackBloc]. - () => BlocProvider.of(context).add( - const PlaybackEvent.togglePlayPause(), - ), + () => BlocProvider.of( + context, + ).add(const PlaybackEvent.togglePlayPause()), ), }, child: child, diff --git a/boring_to_beautiful/step_04/lib/src/shared/views/root_layout.dart b/boring_to_beautiful/step_04/lib/src/shared/views/root_layout.dart index 878b57d729..ff6270248c 100644 --- a/boring_to_beautiful/step_04/lib/src/shared/views/root_layout.dart +++ b/boring_to_beautiful/step_04/lib/src/shared/views/root_layout.dart @@ -29,36 +29,37 @@ class RootLayout extends StatelessWidget { final bloc = BlocProvider.of(context); return BlocBuilder( bloc: bloc, - builder: (context, state) => LayoutBuilder(builder: (context, dimens) { - void onSelected(int index) { - final destination = router.destinations[index]; - go.GoRouter.of(context).go(destination.route); - } + builder: + (context, state) => LayoutBuilder( + builder: (context, dimens) { + void onSelected(int index) { + final destination = router.destinations[index]; + go.GoRouter.of(context).go(destination.route); + } - final current = state.songWithProgress; - return AdaptiveNavigation( - key: _navigationRailKey, - destinations: router.destinations - .map((e) => NavigationDestination( - icon: e.icon, - label: e.label, - )) - .toList(), - selectedIndex: currentIndex, - onDestinationSelected: onSelected, - child: Column( - children: [ - Expanded( - child: _Switcher( - key: _switcherKey, - child: child, + final current = state.songWithProgress; + return AdaptiveNavigation( + key: _navigationRailKey, + destinations: + router.destinations + .map( + (e) => NavigationDestination( + icon: e.icon, + label: e.label, + ), + ) + .toList(), + selectedIndex: currentIndex, + onDestinationSelected: onSelected, + child: Column( + children: [ + Expanded(child: _Switcher(key: _switcherKey, child: child)), + if (current != null) const BottomBar(), + ], ), - ), - if (current != null) const BottomBar(), - ], + ); + }, ), - ); - }), ); } } @@ -66,21 +67,18 @@ class RootLayout extends StatelessWidget { class _Switcher extends StatelessWidget { final Widget child; - const _Switcher({ - required this.child, - super.key, - }); + const _Switcher({required this.child, super.key}); @override Widget build(BuildContext context) { return UniversalPlatform.isDesktop ? child : AnimatedSwitcher( - key: key, - duration: const Duration(milliseconds: 200), - switchInCurve: Curves.easeInOut, - switchOutCurve: Curves.easeInOut, - child: child, - ); + key: key, + duration: const Duration(milliseconds: 200), + switchInCurve: Curves.easeInOut, + switchOutCurve: Curves.easeInOut, + child: child, + ); } } diff --git a/boring_to_beautiful/step_04/lib/src/shared/views/sidebar.dart b/boring_to_beautiful/step_04/lib/src/shared/views/sidebar.dart index 78c19b4d22..8815223b22 100644 --- a/boring_to_beautiful/step_04/lib/src/shared/views/sidebar.dart +++ b/boring_to_beautiful/step_04/lib/src/shared/views/sidebar.dart @@ -26,10 +26,7 @@ class SideBar extends StatelessWidget { title: const Text('Home'), onTap: () => GoRouter.of(context).go('/'), ), - const ListTile( - leading: Icon(Icons.search), - title: Text('Search'), - ), + const ListTile(leading: Icon(Icons.search), title: Text('Search')), ListTile( leading: const Icon(Icons.person), title: const Text('Artists'), @@ -64,10 +61,7 @@ class PlaylistNav extends StatelessWidget { children: [ Padding( padding: const EdgeInsets.only(left: 16, top: 16), - child: Text( - 'Playlists', - style: context.titleMedium, - ), + child: Text('Playlists', style: context.titleMedium), ), Expanded( child: ListView( @@ -114,10 +108,9 @@ class _PlaylistNavItemState extends State<_PlaylistNavItem> { @override void initState() { super.initState(); - _focusNode = FocusNode(debugLabel: widget.title) - ..addListener(() { - setState(() => _isSelected = _focusNode.hasPrimaryFocus); - }); + _focusNode = FocusNode(debugLabel: widget.title)..addListener(() { + setState(() => _isSelected = _focusNode.hasPrimaryFocus); + }); } @override diff --git a/boring_to_beautiful/step_04/pubspec.yaml b/boring_to_beautiful/step_04/pubspec.yaml index 0bc88d24c3..ad540a91c3 100644 --- a/boring_to_beautiful/step_04/pubspec.yaml +++ b/boring_to_beautiful/step_04/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: "none" version: 1.0.0 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 dependencies: flutter: diff --git a/boring_to_beautiful/step_05/lib/src/features/artists/view/artist_bio.dart b/boring_to_beautiful/step_05/lib/src/features/artists/view/artist_bio.dart index 227b8e91f9..8b614421db 100644 --- a/boring_to_beautiful/step_05/lib/src/features/artists/view/artist_bio.dart +++ b/boring_to_beautiful/step_05/lib/src/features/artists/view/artist_bio.dart @@ -18,9 +18,7 @@ class ArtistBio extends StatelessWidget { artist.bio, style: context.bodyLarge!.copyWith( fontSize: 16, - color: context.colors.onSurface.withAlpha( - 222, - ), + color: context.colors.onSurface.withAlpha(222), ), ); } diff --git a/boring_to_beautiful/step_05/lib/src/features/artists/view/artist_card.dart b/boring_to_beautiful/step_05/lib/src/features/artists/view/artist_card.dart index a63967f51d..1a56376a87 100644 --- a/boring_to_beautiful/step_05/lib/src/features/artists/view/artist_card.dart +++ b/boring_to_beautiful/step_05/lib/src/features/artists/view/artist_card.dart @@ -11,10 +11,7 @@ import '../../../shared/views/outlined_card.dart'; import '../../../shared/views/views.dart'; class ArtistCard extends StatelessWidget { - const ArtistCard({ - super.key, - required this.artist, - }); + const ArtistCard({super.key, required this.artist}); final Artist artist; @@ -24,65 +21,66 @@ class ArtistCard extends StatelessWidget { return OutlinedCard( child: LayoutBuilder( - builder: (context, dimens) => Row( - children: [ - SizedBox( - width: dimens.maxWidth * 0.4, - child: Image.asset( - artist.image.image, - fit: BoxFit.cover, - ), - ), - Expanded( - child: Padding( - padding: const EdgeInsets.only(left: 16), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Padding( - padding: const EdgeInsets.fromLTRB(0, 0, 15, 0), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text( - artist.name, - style: context.titleMedium, - overflow: TextOverflow.ellipsis, - maxLines: 1, - ), - const SizedBox(height: 10), - Text( - artist.bio, - overflow: TextOverflow.ellipsis, - style: context.labelSmall, - maxLines: 3, - ), - ]), - ), - if (dimens.maxHeight > 100) - Row( - children: [ - HoverableSongPlayButton( - size: const Size(50, 50), - song: nowPlaying, - child: Icon(Icons.play_circle, - color: context.colors.tertiary), + builder: + (context, dimens) => Row( + children: [ + SizedBox( + width: dimens.maxWidth * 0.4, + child: Image.asset(artist.image.image, fit: BoxFit.cover), + ), + Expanded( + child: Padding( + padding: const EdgeInsets.only(left: 16), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Padding( + padding: const EdgeInsets.fromLTRB(0, 0, 15, 0), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + artist.name, + style: context.titleMedium, + overflow: TextOverflow.ellipsis, + maxLines: 1, + ), + const SizedBox(height: 10), + Text( + artist.bio, + overflow: TextOverflow.ellipsis, + style: context.labelSmall, + maxLines: 3, + ), + ], ), - Text( - nowPlaying.title, - maxLines: 1, - overflow: TextOverflow.clip, - style: context.labelMedium, + ), + if (dimens.maxHeight > 100) + Row( + children: [ + HoverableSongPlayButton( + size: const Size(50, 50), + song: nowPlaying, + child: Icon( + Icons.play_circle, + color: context.colors.tertiary, + ), + ), + Text( + nowPlaying.title, + maxLines: 1, + overflow: TextOverflow.clip, + style: context.labelMedium, + ), + ], ), - ], - ), - ], + ], + ), + ), ), - ), + ], ), - ], - ), ), ); } diff --git a/boring_to_beautiful/step_05/lib/src/features/artists/view/artist_events.dart b/boring_to_beautiful/step_05/lib/src/features/artists/view/artist_events.dart index 8b064759c6..58b61b37df 100644 --- a/boring_to_beautiful/step_05/lib/src/features/artists/view/artist_events.dart +++ b/boring_to_beautiful/step_05/lib/src/features/artists/view/artist_events.dart @@ -70,53 +70,32 @@ class ArtistEvents extends StatelessWidget { ); }, columns: const [ - DataColumn( - label: Text( - 'Date', - ), - numeric: true, - ), - DataColumn( - label: Text( - 'Event', - ), - ), - DataColumn( - label: Text( - 'Location', - ), - ), - DataColumn( - label: Text( - 'More info', - ), - ), + DataColumn(label: Text('Date'), numeric: true), + DataColumn(label: Text('Event')), + DataColumn(label: Text('Location')), + DataColumn(label: Text('More info')), ], - rowBuilder: (item, index) => DataRow.byIndex(index: index, cells: [ - DataCell( - Text(item.date), - ), - DataCell( - Row(children: [ - Expanded(child: Text(item.title)), - ]), - ), - DataCell( - Text(item.location), - ), - DataCell( - Clickable( - child: Text( - item.link, - style: TextStyle( - color: linkColor.value(theme), - decoration: TextDecoration.underline, + rowBuilder: + (item, index) => DataRow.byIndex( + index: index, + cells: [ + DataCell(Text(item.date)), + DataCell(Row(children: [Expanded(child: Text(item.title))])), + DataCell(Text(item.location)), + DataCell( + Clickable( + child: Text( + item.link, + style: TextStyle( + color: linkColor.value(theme), + decoration: TextDecoration.underline, + ), + ), + onTap: () => launchUrl(Uri.parse('https://docs.flutter.dev')), + ), ), - ), - onTap: () => launchUrl(Uri.parse('https://docs.flutter.dev')), + ], ), - ), - ]), ); } } diff --git a/boring_to_beautiful/step_05/lib/src/features/artists/view/artist_ranked_songs.dart b/boring_to_beautiful/step_05/lib/src/features/artists/view/artist_ranked_songs.dart index e484ecb3d7..3d1f4e2cf1 100644 --- a/boring_to_beautiful/step_05/lib/src/features/artists/view/artist_ranked_songs.dart +++ b/boring_to_beautiful/step_05/lib/src/features/artists/view/artist_ranked_songs.dart @@ -27,52 +27,42 @@ class ArtistRankedSongs extends StatelessWidget { title: Text(song.title), subtitle: Text(song.length.toHumanizedString()), trailing: Text(song.ranking.toString()), - onTap: () => BlocProvider.of(context).add( - PlaybackEvent.changeSong(song), - ), + onTap: + () => BlocProvider.of( + context, + ).add(PlaybackEvent.changeSong(song)), ); }, columns: const [ - DataColumn( - label: Text( - 'Ranking', - ), - numeric: true, - ), - DataColumn( - label: Text( - 'Title', - ), - ), - DataColumn( - label: Text( - 'Length', - ), - ), + DataColumn(label: Text('Ranking'), numeric: true), + DataColumn(label: Text('Title')), + DataColumn(label: Text('Length')), ], - rowBuilder: (song, index) => DataRow.byIndex(index: index, cells: [ - DataCell( - HoverableSongPlayButton( - song: song, - child: Center( - child: Text(song.ranking.toString()), - ), + rowBuilder: + (song, index) => DataRow.byIndex( + index: index, + cells: [ + DataCell( + HoverableSongPlayButton( + song: song, + child: Center(child: Text(song.ranking.toString())), + ), + ), + DataCell( + Row( + children: [ + Padding( + padding: const EdgeInsets.all(2), + child: ClippedImage(song.image.image), + ), + const SizedBox(width: 5.0), + Expanded(child: Text(song.title)), + ], + ), + ), + DataCell(Text(song.length.toHumanizedString())), + ], ), - ), - DataCell( - Row(children: [ - Padding( - padding: const EdgeInsets.all(2), - child: ClippedImage(song.image.image), - ), - const SizedBox(width: 5.0), - Expanded(child: Text(song.title)), - ]), - ), - DataCell( - Text(song.length.toHumanizedString()), - ), - ]), ); } } diff --git a/boring_to_beautiful/step_05/lib/src/features/artists/view/artist_updates.dart b/boring_to_beautiful/step_05/lib/src/features/artists/view/artist_updates.dart index e5b8bb5fe9..a0fabf7330 100644 --- a/boring_to_beautiful/step_05/lib/src/features/artists/view/artist_updates.dart +++ b/boring_to_beautiful/step_05/lib/src/features/artists/view/artist_updates.dart @@ -30,7 +30,7 @@ class ArtistUpdates extends StatelessWidget { child: Text(update), ), ), - ) + ), ], ); } diff --git a/boring_to_beautiful/step_05/lib/src/features/artists/view/artists_screen.dart b/boring_to_beautiful/step_05/lib/src/features/artists/view/artists_screen.dart index 8afe759807..225d74847b 100644 --- a/boring_to_beautiful/step_05/lib/src/features/artists/view/artists_screen.dart +++ b/boring_to_beautiful/step_05/lib/src/features/artists/view/artists_screen.dart @@ -17,33 +17,33 @@ class ArtistsScreen extends StatelessWidget { Widget build(BuildContext context) { final artistsProvider = ArtistsProvider(); final artists = artistsProvider.artists; - return LayoutBuilder(builder: (context, constraints) { - return Scaffold( - primary: false, - appBar: AppBar( - title: const Text('ARTISTS'), - toolbarHeight: kToolbarHeight * 2, - ), - body: GridView.builder( - padding: const EdgeInsets.all(15), - gridDelegate: SliverGridDelegateWithFixedCrossAxisCount( - crossAxisCount: max(1, (constraints.maxWidth ~/ 400).toInt()), - childAspectRatio: 2.5, - mainAxisSpacing: 10, - crossAxisSpacing: 10, + return LayoutBuilder( + builder: (context, constraints) { + return Scaffold( + primary: false, + appBar: AppBar( + title: const Text('ARTISTS'), + toolbarHeight: kToolbarHeight * 2, ), - itemCount: artists.length, - itemBuilder: (context, index) { - final artist = artists[index]; - return GestureDetector( - child: ArtistCard( - artist: artist, - ), - onTap: () => GoRouter.of(context).go('/artists/${artist.id}'), - ); - }, - ), - ); - }); + body: GridView.builder( + padding: const EdgeInsets.all(15), + gridDelegate: SliverGridDelegateWithFixedCrossAxisCount( + crossAxisCount: max(1, (constraints.maxWidth ~/ 400).toInt()), + childAspectRatio: 2.5, + mainAxisSpacing: 10, + crossAxisSpacing: 10, + ), + itemCount: artists.length, + itemBuilder: (context, index) { + final artist = artists[index]; + return GestureDetector( + child: ArtistCard(artist: artist), + onTap: () => GoRouter.of(context).go('/artists/${artist.id}'), + ); + }, + ), + ); + }, + ); } } diff --git a/boring_to_beautiful/step_05/lib/src/features/home/view/home_artists.dart b/boring_to_beautiful/step_05/lib/src/features/home/view/home_artists.dart index beb2c0ece4..b5a3a33ecd 100644 --- a/boring_to_beautiful/step_05/lib/src/features/home/view/home_artists.dart +++ b/boring_to_beautiful/step_05/lib/src/features/home/view/home_artists.dart @@ -22,27 +22,25 @@ class HomeArtists extends StatelessWidget { Widget build(BuildContext context) { return Padding( padding: const EdgeInsets.all(15), - child: constraints.isMobile - ? Column( - children: [ - for (final artist in artists) buildTile(context, artist), - ], - ) - : Row(children: [ - for (final artist in artists) - Flexible( - flex: 1, - child: buildTile(context, artist), - ), - ]), + child: + constraints.isMobile + ? Column( + children: [ + for (final artist in artists) buildTile(context, artist), + ], + ) + : Row( + children: [ + for (final artist in artists) + Flexible(flex: 1, child: buildTile(context, artist)), + ], + ), ); } Widget buildTile(BuildContext context, Artist artist) { return ListTile( - leading: CircleAvatar( - backgroundImage: AssetImage(artist.image.image), - ), + leading: CircleAvatar(backgroundImage: AssetImage(artist.image.image)), title: Text( artist.updates.first, maxLines: 2, diff --git a/boring_to_beautiful/step_05/lib/src/features/home/view/home_recent.dart b/boring_to_beautiful/step_05/lib/src/features/home/view/home_recent.dart index c77500a663..8ba86d117d 100644 --- a/boring_to_beautiful/step_05/lib/src/features/home/view/home_recent.dart +++ b/boring_to_beautiful/step_05/lib/src/features/home/view/home_recent.dart @@ -12,8 +12,11 @@ import '../../../shared/views/image_clipper.dart'; import '../../../shared/views/outlined_card.dart'; class HomeRecent extends StatelessWidget { - const HomeRecent( - {super.key, required this.playlists, this.axis = Axis.horizontal}); + const HomeRecent({ + super.key, + required this.playlists, + this.axis = Axis.horizontal, + }); final List playlists; final Axis axis; @@ -43,8 +46,10 @@ class HomeRecent extends StatelessWidget { Row( children: [ Expanded( - child: Image.asset(playlist.cover.image, - fit: BoxFit.cover), + child: Image.asset( + playlist.cover.image, + fit: BoxFit.cover, + ), ), ], ), @@ -79,10 +84,7 @@ class HomeRecent extends StatelessWidget { crossAxisAlignment: CrossAxisAlignment.center, mainAxisSize: MainAxisSize.max, children: [ - ClippedImage( - playlist.cover.image, - height: 200, - ), + ClippedImage(playlist.cover.image, height: 200), Expanded( child: Center( child: Padding( @@ -104,23 +106,24 @@ class HomeRecent extends StatelessWidget { return Column( children: [ Padding( - padding: const EdgeInsets.fromLTRB(10, 5, 10, 5), - child: Text( - playlist.title, - style: context.titleSmall!.copyWith( - fontWeight: FontWeight.bold, - ), - overflow: TextOverflow.ellipsis, - maxLines: 1, - textAlign: TextAlign.center, - )), + padding: const EdgeInsets.fromLTRB(10, 5, 10, 5), + child: Text( + playlist.title, + style: context.titleSmall!.copyWith(fontWeight: FontWeight.bold), + overflow: TextOverflow.ellipsis, + maxLines: 1, + textAlign: TextAlign.center, + ), + ), Padding( padding: const EdgeInsets.symmetric(vertical: 5, horizontal: 10), - child: Text(playlist.description, - overflow: TextOverflow.ellipsis, - style: context.labelSmall, - maxLines: 2, - textAlign: TextAlign.center), + child: Text( + playlist.description, + overflow: TextOverflow.ellipsis, + style: context.labelSmall, + maxLines: 2, + textAlign: TextAlign.center, + ), ), ], ); diff --git a/boring_to_beautiful/step_05/lib/src/features/home/view/home_screen.dart b/boring_to_beautiful/step_05/lib/src/features/home/view/home_screen.dart index a0214a2c37..34ecdb1163 100644 --- a/boring_to_beautiful/step_05/lib/src/features/home/view/home_screen.dart +++ b/boring_to_beautiful/step_05/lib/src/features/home/view/home_screen.dart @@ -49,33 +49,31 @@ class _HomeScreenState extends State { ), ), body: LayoutBuilder( - builder: (context, constraints) => TabBarView( - children: [ - SingleChildScrollView( - child: Column( - children: [ - const HomeHighlight(), - HomeArtists( - artists: artists, - constraints: constraints, + builder: + (context, constraints) => TabBarView( + children: [ + SingleChildScrollView( + child: Column( + children: [ + const HomeHighlight(), + HomeArtists( + artists: artists, + constraints: constraints, + ), + ], ), - ], - ), - ), - HomeRecent( - playlists: playlists, - axis: Axis.vertical, - ), - PlaylistSongs( - playlist: topSongs, - constraints: constraints, - ), - PlaylistSongs( - playlist: newReleases, - constraints: constraints, + ), + HomeRecent(playlists: playlists, axis: Axis.vertical), + PlaylistSongs( + playlist: topSongs, + constraints: constraints, + ), + PlaylistSongs( + playlist: newReleases, + constraints: constraints, + ), + ], ), - ], - ), ), ), ); @@ -109,10 +107,11 @@ class _HomeScreenState extends State { children: [ const HomeHighlight(), LayoutBuilder( - builder: (context, constraints) => HomeArtists( - artists: artists, - constraints: constraints, - ), + builder: + (context, constraints) => HomeArtists( + artists: artists, + constraints: constraints, + ), ), ], ), @@ -129,9 +128,7 @@ class _HomeScreenState extends State { style: context.headlineSmall, ), ), - HomeRecent( - playlists: playlists, - ), + HomeRecent(playlists: playlists), ], ), ), @@ -149,19 +146,20 @@ class _HomeScreenState extends State { crossAxisAlignment: CrossAxisAlignment.start, children: [ Padding( - padding: - const EdgeInsets.all(2), // Modify this line + padding: const EdgeInsets.all( + 2, + ), // Modify this line child: Text( 'Top Songs Today', style: context.titleLarge, ), ), LayoutBuilder( - builder: (context, constraints) => - PlaylistSongs( - playlist: topSongs, - constraints: constraints, - ), + builder: + (context, constraints) => PlaylistSongs( + playlist: topSongs, + constraints: constraints, + ), ), ], ), @@ -174,19 +172,20 @@ class _HomeScreenState extends State { crossAxisAlignment: CrossAxisAlignment.start, children: [ Padding( - padding: - const EdgeInsets.all(2), // Modify this line + padding: const EdgeInsets.all( + 2, + ), // Modify this line child: Text( 'New Releases', style: context.titleLarge, ), ), LayoutBuilder( - builder: (context, constraints) => - PlaylistSongs( - playlist: newReleases, - constraints: constraints, - ), + builder: + (context, constraints) => PlaylistSongs( + playlist: newReleases, + constraints: constraints, + ), ), ], ), diff --git a/boring_to_beautiful/step_05/lib/src/features/playlists/view/playlist_home_screen.dart b/boring_to_beautiful/step_05/lib/src/features/playlists/view/playlist_home_screen.dart index a80d767930..978608ccad 100644 --- a/boring_to_beautiful/step_05/lib/src/features/playlists/view/playlist_home_screen.dart +++ b/boring_to_beautiful/step_05/lib/src/features/playlists/view/playlist_home_screen.dart @@ -44,8 +44,10 @@ class PlaylistHomeScreen extends StatelessWidget { title: playlist.title, subtitle: playlist.description, ), - onTap: () => - GoRouter.of(context).go('/playlists/${playlist.id}'), + onTap: + () => GoRouter.of( + context, + ).go('/playlists/${playlist.id}'), ); }, ), diff --git a/boring_to_beautiful/step_05/lib/src/features/playlists/view/playlist_screen.dart b/boring_to_beautiful/step_05/lib/src/features/playlists/view/playlist_screen.dart index 5dc2f0744f..c41f500a92 100644 --- a/boring_to_beautiful/step_05/lib/src/features/playlists/view/playlist_screen.dart +++ b/boring_to_beautiful/step_05/lib/src/features/playlists/view/playlist_screen.dart @@ -20,114 +20,116 @@ class PlaylistScreen extends StatelessWidget { @override Widget build(BuildContext context) { - return LayoutBuilder(builder: (context, constraints) { - final colors = Theme.of(context).colorScheme; - final double headerHeight = constraints.isMobile - ? max(constraints.biggest.height * 0.5, 450) - : max(constraints.biggest.height * 0.25, 250); - if (constraints.isMobile) { - return Scaffold( - appBar: AppBar( - leading: BackButton( - onPressed: () => GoRouter.of(context).go('/playlists'), - ), - title: Text(playlist.title), - actions: [ - IconButton( - icon: const Icon(Icons.play_circle_fill), - onPressed: () {}, - ), - IconButton( - onPressed: () {}, - icon: const Icon(Icons.shuffle), - ), - ], - ), - body: ArticleContent( - child: PlaylistSongs( - playlist: playlist, - constraints: constraints, - ), - ), - ); - } - return Scaffold( - body: CustomScrollView( - slivers: [ - SliverAppBar( + return LayoutBuilder( + builder: (context, constraints) { + final colors = Theme.of(context).colorScheme; + final double headerHeight = + constraints.isMobile + ? max(constraints.biggest.height * 0.5, 450) + : max(constraints.biggest.height * 0.25, 250); + if (constraints.isMobile) { + return Scaffold( + appBar: AppBar( leading: BackButton( onPressed: () => GoRouter.of(context).go('/playlists'), ), - expandedHeight: headerHeight, - pinned: false, - flexibleSpace: FlexibleSpaceBar( - background: AdaptiveImageCard( - axis: constraints.isMobile ? Axis.vertical : Axis.horizontal, - constraints: - constraints.copyWith(maxHeight: headerHeight).normalize(), - image: playlist.cover.image, - child: Column( - mainAxisAlignment: MainAxisAlignment.end, - crossAxisAlignment: CrossAxisAlignment.start, - mainAxisSize: MainAxisSize.min, - children: [ - Text( - 'PLAYLIST', - style: context.titleSmall! - .copyWith(color: colors.onSurface), - ), - Text( - playlist.title, - style: context.displaySmall! - .copyWith(color: colors.onSurface), - ), - Text( - playlist.description, - style: context.bodyLarge!.copyWith( - color: colors.onSurface.withAlpha(204), + title: Text(playlist.title), + actions: [ + IconButton( + icon: const Icon(Icons.play_circle_fill), + onPressed: () {}, + ), + IconButton(onPressed: () {}, icon: const Icon(Icons.shuffle)), + ], + ), + body: ArticleContent( + child: PlaylistSongs( + playlist: playlist, + constraints: constraints, + ), + ), + ); + } + return Scaffold( + body: CustomScrollView( + slivers: [ + SliverAppBar( + leading: BackButton( + onPressed: () => GoRouter.of(context).go('/playlists'), + ), + expandedHeight: headerHeight, + pinned: false, + flexibleSpace: FlexibleSpaceBar( + background: AdaptiveImageCard( + axis: + constraints.isMobile ? Axis.vertical : Axis.horizontal, + constraints: + constraints + .copyWith(maxHeight: headerHeight) + .normalize(), + image: playlist.cover.image, + child: Column( + mainAxisAlignment: MainAxisAlignment.end, + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisSize: MainAxisSize.min, + children: [ + Text( + 'PLAYLIST', + style: context.titleSmall!.copyWith( + color: colors.onSurface, + ), ), - ), - const SizedBox(height: 8), - Row( - children: [ - IconButton( - icon: Icon( - Icons.play_circle_fill, - color: colors.tertiary, - ), - onPressed: () {}, + Text( + playlist.title, + style: context.displaySmall!.copyWith( + color: colors.onSurface, ), - TextButton.icon( - onPressed: () {}, - icon: Icon( - Icons.shuffle, - color: colors.tertiary, - ), - label: Text( - 'Shuffle', - style: context.bodySmall!.copyWith( + ), + Text( + playlist.description, + style: context.bodyLarge!.copyWith( + color: colors.onSurface.withAlpha(204), + ), + ), + const SizedBox(height: 8), + Row( + children: [ + IconButton( + icon: Icon( + Icons.play_circle_fill, color: colors.tertiary, ), + onPressed: () {}, ), - ), - ], - ), - ], + TextButton.icon( + onPressed: () {}, + icon: Icon(Icons.shuffle, color: colors.tertiary), + label: Text( + 'Shuffle', + style: context.bodySmall!.copyWith( + color: colors.tertiary, + ), + ), + ), + ], + ), + ], + ), ), ), ), - ), - SliverToBoxAdapter( - child: ArticleContent( - child: PlaylistSongs( - playlist: playlist, - constraints: constraints, + SliverToBoxAdapter( + child: ArticleContent( + child: PlaylistSongs( + playlist: playlist, + constraints: constraints, + ), ), ), - ), - ], - ), - ); - }); + ], + ), + ); + }, + ); } } diff --git a/boring_to_beautiful/step_05/lib/src/features/playlists/view/playlist_songs.dart b/boring_to_beautiful/step_05/lib/src/features/playlists/view/playlist_songs.dart index e944336540..1d5a2e9879 100644 --- a/boring_to_beautiful/step_05/lib/src/features/playlists/view/playlist_songs.dart +++ b/boring_to_beautiful/step_05/lib/src/features/playlists/view/playlist_songs.dart @@ -12,8 +12,11 @@ import '../../../shared/views/image_clipper.dart'; import '../../../shared/views/views.dart'; class PlaylistSongs extends StatelessWidget { - const PlaylistSongs( - {super.key, required this.playlist, required this.constraints}); + const PlaylistSongs({ + super.key, + required this.playlist, + required this.constraints, + }); final Playlist playlist; final BoxConstraints constraints; @@ -25,14 +28,9 @@ class PlaylistSongs extends StatelessWidget { breakpoint: 450, columns: const [ DataColumn( - label: Padding( - padding: EdgeInsets.only(left: 20), - child: Text('#'), - ), - ), - DataColumn( - label: Text('Title'), + label: Padding(padding: EdgeInsets.only(left: 20), child: Text('#')), ), + DataColumn(label: Text('Title')), DataColumn( label: Padding( padding: EdgeInsets.only(right: 10), @@ -40,38 +38,40 @@ class PlaylistSongs extends StatelessWidget { ), ), ], - rowBuilder: (context, index) => DataRow.byIndex( - index: index, - cells: [ - DataCell( - // Add HoverableSongPlayButton - Center( - child: Text( - (index + 1).toString(), - textAlign: TextAlign.center, + rowBuilder: + (context, index) => DataRow.byIndex( + index: index, + cells: [ + DataCell( + // Add HoverableSongPlayButton + Center( + child: Text( + (index + 1).toString(), + textAlign: TextAlign.center, + ), + ), ), - ), - ), - DataCell( - Row(children: [ - Padding( - padding: const EdgeInsets.all(2), - child: ClippedImage(playlist.songs[index].image.image), + DataCell( + Row( + children: [ + Padding( + padding: const EdgeInsets.all(2), + child: ClippedImage(playlist.songs[index].image.image), + ), + const SizedBox(width: 10), + Expanded(child: Text(playlist.songs[index].title)), + ], + ), ), - const SizedBox(width: 10), - Expanded(child: Text(playlist.songs[index].title)), - ]), - ), - DataCell( - Text(playlist.songs[index].length.toHumanizedString()), + DataCell(Text(playlist.songs[index].length.toHumanizedString())), + ], ), - ], - ), itemBuilder: (song, index) { return ListTile( - onTap: () => BlocProvider.of(context).add( - PlaybackEvent.changeSong(song), - ), + onTap: + () => BlocProvider.of( + context, + ).add(PlaybackEvent.changeSong(song)), leading: ClippedImage(song.image.image), title: Text(song.title), subtitle: Text(song.length.toHumanizedString()), diff --git a/boring_to_beautiful/step_05/lib/src/shared/app.dart b/boring_to_beautiful/step_05/lib/src/shared/app.dart index 3910d8f276..ed27418bd4 100644 --- a/boring_to_beautiful/step_05/lib/src/shared/app.dart +++ b/boring_to_beautiful/step_05/lib/src/shared/app.dart @@ -19,45 +19,46 @@ class MyApp extends StatefulWidget { } class _MyAppState extends State { - final settings = ValueNotifier(ThemeSettings( - sourceColor: Colors.pink, - themeMode: ThemeMode.system, - )); + final settings = ValueNotifier( + ThemeSettings(sourceColor: Colors.pink, themeMode: ThemeMode.system), + ); @override Widget build(BuildContext context) { return BlocProvider( create: (context) => PlaybackBloc(), child: DynamicColorBuilder( - builder: (lightDynamic, darkDynamic) => ThemeProvider( - lightDynamic: lightDynamic, - darkDynamic: darkDynamic, - settings: settings, - child: NotificationListener( - onNotification: (notification) { - settings.value = notification.settings; - return true; - }, - child: ValueListenableBuilder( - valueListenable: settings, - builder: (context, value, _) { - final theme = ThemeProvider.of(context); - return MaterialApp.router( - debugShowCheckedModeBanner: false, - title: 'Flutter Demo', - theme: theme.light(settings.value.sourceColor), - darkTheme: theme.dark(settings.value.sourceColor), - themeMode: theme.themeMode(), - routeInformationParser: appRouter.routeInformationParser, - routeInformationProvider: - appRouter.routeInformationProvider, - routerDelegate: appRouter.routerDelegate, - builder: (context, child) { - return PlayPauseListener(child: child!); - }, - ); + builder: + (lightDynamic, darkDynamic) => ThemeProvider( + lightDynamic: lightDynamic, + darkDynamic: darkDynamic, + settings: settings, + child: NotificationListener( + onNotification: (notification) { + settings.value = notification.settings; + return true; }, + child: ValueListenableBuilder( + valueListenable: settings, + builder: (context, value, _) { + final theme = ThemeProvider.of(context); + return MaterialApp.router( + debugShowCheckedModeBanner: false, + title: 'Flutter Demo', + theme: theme.light(settings.value.sourceColor), + darkTheme: theme.dark(settings.value.sourceColor), + themeMode: theme.themeMode(), + routeInformationParser: appRouter.routeInformationParser, + routeInformationProvider: + appRouter.routeInformationProvider, + routerDelegate: appRouter.routerDelegate, + builder: (context, child) { + return PlayPauseListener(child: child!); + }, + ); + }, + ), ), - )), + ), ), ); } diff --git a/boring_to_beautiful/step_05/lib/src/shared/classes/image.dart b/boring_to_beautiful/step_05/lib/src/shared/classes/image.dart index a1ef427c1d..00a6472b4a 100644 --- a/boring_to_beautiful/step_05/lib/src/shared/classes/image.dart +++ b/boring_to_beautiful/step_05/lib/src/shared/classes/image.dart @@ -3,10 +3,11 @@ // found in the LICENSE file. class MyArtistImage { - const MyArtistImage( - {required this.image, - required this.sourceName, - required this.sourceLink}); + const MyArtistImage({ + required this.image, + required this.sourceName, + required this.sourceLink, + }); final String image; final String sourceName; diff --git a/boring_to_beautiful/step_05/lib/src/shared/classes/playlist.dart b/boring_to_beautiful/step_05/lib/src/shared/classes/playlist.dart index 59899dc619..5f0225059d 100644 --- a/boring_to_beautiful/step_05/lib/src/shared/classes/playlist.dart +++ b/boring_to_beautiful/step_05/lib/src/shared/classes/playlist.dart @@ -17,8 +17,9 @@ class Playlist { this.description = '', required this.songs, this.cover = const MyArtistImage( - image: 'assets/images/record.jpeg', - sourceName: 'Adobe Stock Images', - sourceLink: ''), + image: 'assets/images/record.jpeg', + sourceName: 'Adobe Stock Images', + sourceLink: '', + ), }); } diff --git a/boring_to_beautiful/step_05/lib/src/shared/classes/ranked_song.dart b/boring_to_beautiful/step_05/lib/src/shared/classes/ranked_song.dart index 5908268c8c..2362bfae64 100644 --- a/boring_to_beautiful/step_05/lib/src/shared/classes/ranked_song.dart +++ b/boring_to_beautiful/step_05/lib/src/shared/classes/ranked_song.dart @@ -7,7 +7,11 @@ import './classes.dart'; class RankedSong extends Song { final int ranking; - const RankedSong(this.ranking, String title, Artist artist, Duration length, - MyArtistImage image) - : super(title, artist, length, image); + const RankedSong( + this.ranking, + String title, + Artist artist, + Duration length, + MyArtistImage image, + ) : super(title, artist, length, image); } diff --git a/boring_to_beautiful/step_05/lib/src/shared/extensions.dart b/boring_to_beautiful/step_05/lib/src/shared/extensions.dart index 8b7e41b988..fe65add57c 100644 --- a/boring_to_beautiful/step_05/lib/src/shared/extensions.dart +++ b/boring_to_beautiful/step_05/lib/src/shared/extensions.dart @@ -9,51 +9,36 @@ extension TypographyUtils on BuildContext { ThemeData get theme => Theme.of(this); TextTheme get textTheme => GoogleFonts.montserratTextTheme(theme.textTheme); ColorScheme get colors => theme.colorScheme; - TextStyle? get displayLarge => textTheme.displayLarge?.copyWith( - color: colors.onSurface, - ); - TextStyle? get displayMedium => textTheme.displayMedium?.copyWith( - color: colors.onSurface, - ); - TextStyle? get displaySmall => textTheme.displaySmall?.copyWith( - color: colors.onSurface, - ); - TextStyle? get headlineLarge => textTheme.headlineLarge?.copyWith( - color: colors.onSurface, - ); - TextStyle? get headlineMedium => textTheme.headlineMedium?.copyWith( - color: colors.onSurface, - ); - TextStyle? get headlineSmall => textTheme.headlineSmall?.copyWith( - color: colors.onSurface, - ); - TextStyle? get titleLarge => textTheme.titleLarge?.copyWith( - color: colors.onSurface, - ); - TextStyle? get titleMedium => textTheme.titleMedium?.copyWith( - color: colors.onSurface, - ); - TextStyle? get titleSmall => textTheme.titleSmall?.copyWith( - color: colors.onSurface, - ); - TextStyle? get labelLarge => textTheme.labelLarge?.copyWith( - color: colors.onSurface, - ); - TextStyle? get labelMedium => textTheme.labelMedium?.copyWith( - color: colors.onSurface, - ); - TextStyle? get labelSmall => textTheme.labelSmall?.copyWith( - color: colors.onSurface, - ); - TextStyle? get bodyLarge => textTheme.bodyLarge?.copyWith( - color: colors.onSurface, - ); - TextStyle? get bodyMedium => textTheme.bodyMedium?.copyWith( - color: colors.onSurface, - ); - TextStyle? get bodySmall => textTheme.bodySmall?.copyWith( - color: colors.onSurface, - ); + TextStyle? get displayLarge => + textTheme.displayLarge?.copyWith(color: colors.onSurface); + TextStyle? get displayMedium => + textTheme.displayMedium?.copyWith(color: colors.onSurface); + TextStyle? get displaySmall => + textTheme.displaySmall?.copyWith(color: colors.onSurface); + TextStyle? get headlineLarge => + textTheme.headlineLarge?.copyWith(color: colors.onSurface); + TextStyle? get headlineMedium => + textTheme.headlineMedium?.copyWith(color: colors.onSurface); + TextStyle? get headlineSmall => + textTheme.headlineSmall?.copyWith(color: colors.onSurface); + TextStyle? get titleLarge => + textTheme.titleLarge?.copyWith(color: colors.onSurface); + TextStyle? get titleMedium => + textTheme.titleMedium?.copyWith(color: colors.onSurface); + TextStyle? get titleSmall => + textTheme.titleSmall?.copyWith(color: colors.onSurface); + TextStyle? get labelLarge => + textTheme.labelLarge?.copyWith(color: colors.onSurface); + TextStyle? get labelMedium => + textTheme.labelMedium?.copyWith(color: colors.onSurface); + TextStyle? get labelSmall => + textTheme.labelSmall?.copyWith(color: colors.onSurface); + TextStyle? get bodyLarge => + textTheme.bodyLarge?.copyWith(color: colors.onSurface); + TextStyle? get bodyMedium => + textTheme.bodyMedium?.copyWith(color: colors.onSurface); + TextStyle? get bodySmall => + textTheme.bodySmall?.copyWith(color: colors.onSurface); } extension BreakpointUtils on BoxConstraints { @@ -65,17 +50,17 @@ extension BreakpointUtils on BoxConstraints { extension DurationString on String { /// Assumes a string (roughly) of the format '\d{1,2}:\d{2}' Duration toDuration() => switch (split(':')) { - [var minutes, var seconds] => Duration( - minutes: int.parse(minutes.trim()), - seconds: int.parse(seconds.trim()), - ), - [var hours, var minutes, var seconds] => Duration( - hours: int.parse(hours.trim()), - minutes: int.parse(minutes.trim()), - seconds: int.parse(seconds.trim()), - ), - _ => throw Exception('Invalid duration string: $this'), - }; + [var minutes, var seconds] => Duration( + minutes: int.parse(minutes.trim()), + seconds: int.parse(seconds.trim()), + ), + [var hours, var minutes, var seconds] => Duration( + hours: int.parse(hours.trim()), + minutes: int.parse(minutes.trim()), + seconds: int.parse(seconds.trim()), + ), + _ => throw Exception('Invalid duration string: $this'), + }; } extension HumanizedDuration on Duration { diff --git a/boring_to_beautiful/step_05/lib/src/shared/playback/bloc/playback_bloc.dart b/boring_to_beautiful/step_05/lib/src/shared/playback/bloc/playback_bloc.dart index 73c2f4c436..c6c871937b 100644 --- a/boring_to_beautiful/step_05/lib/src/shared/playback/bloc/playback_bloc.dart +++ b/boring_to_beautiful/step_05/lib/src/shared/playback/bloc/playback_bloc.dart @@ -41,9 +41,8 @@ class PlaybackBloc extends Bloc { } } - void _handlePlaybackProgress(Duration progress) => add( - PlaybackEvent.songProgress(progress), - ); + void _handlePlaybackProgress(Duration progress) => + add(PlaybackEvent.songProgress(progress)); void _togglePlayPause(TogglePlayPause event, Emitter emit) { state.isPlaying ? _pausePlayback() : _resumePlayback(); @@ -52,8 +51,10 @@ class PlaybackBloc extends Bloc { void _pausePlayback() => _currentlyPlayingSubscription!.cancel(); - void _resumePlayback() => _currentlyPlayingSubscription = - _startPlayingStream().listen(_handlePlaybackProgress); + void _resumePlayback() => + _currentlyPlayingSubscription = _startPlayingStream().listen( + _handlePlaybackProgress, + ); void _changeSong(ChangeSong event, Emitter emit) { emit( @@ -69,19 +70,15 @@ class PlaybackBloc extends Bloc { } void _songProgress(SongProgress event, Emitter emit) => emit( - state.copyWith( - songWithProgress: state.songWithProgress!.copyWith( - progress: state.songWithProgress!.progress + event.duration, - ), - ), - ); + state.copyWith( + songWithProgress: state.songWithProgress!.copyWith( + progress: state.songWithProgress!.progress + event.duration, + ), + ), + ); void _setVolume(SetVolume event, Emitter emit) => emit( - state.copyWith( - volume: event.value, - isMuted: false, - previousVolume: null, - ), - ); + state.copyWith(volume: event.value, isMuted: false, previousVolume: null), + ); void _toggleMute(ToggleMute event, Emitter emit) { if (state.isMuted) { @@ -94,11 +91,7 @@ class PlaybackBloc extends Bloc { ); } else { emit( - state.copyWith( - isMuted: true, - volume: 0, - previousVolume: state.volume, - ), + state.copyWith(isMuted: true, volume: 0, previousVolume: state.volume), ); } } diff --git a/boring_to_beautiful/step_05/lib/src/shared/playback/bloc/playback_bloc.freezed.dart b/boring_to_beautiful/step_05/lib/src/shared/playback/bloc/playback_bloc.freezed.dart index 8a422cd449..54e870ab6f 100644 --- a/boring_to_beautiful/step_05/lib/src/shared/playback/bloc/playback_bloc.freezed.dart +++ b/boring_to_beautiful/step_05/lib/src/shared/playback/bloc/playback_bloc.freezed.dart @@ -12,7 +12,8 @@ part of 'playback_bloc.dart'; T _$identity(T value) => value; final _privateConstructorUsedError = UnsupportedError( - 'It seems like you constructed your class using `MyClass._()`. This constructor is only meant to be used by freezed and you are not supposed to need it nor use it.\nPlease check the documentation here for more information: https://github.com/rrousselGit/freezed#adding-getters-and-methods-to-our-models'); + 'It seems like you constructed your class using `MyClass._()`. This constructor is only meant to be used by freezed and you are not supposed to need it nor use it.\nPlease check the documentation here for more information: https://github.com/rrousselGit/freezed#adding-getters-and-methods-to-our-models', +); /// @nodoc mixin _$PlaybackEvent { @@ -24,8 +25,7 @@ mixin _$PlaybackEvent { required TResult Function() toggleMute, required TResult Function(double percent) moveToInSong, required TResult Function(Duration duration) songProgress, - }) => - throw _privateConstructorUsedError; + }) => throw _privateConstructorUsedError; @optionalTypeArgs TResult? whenOrNull({ TResult? Function()? togglePlayPause, @@ -34,8 +34,7 @@ mixin _$PlaybackEvent { TResult? Function()? toggleMute, TResult? Function(double percent)? moveToInSong, TResult? Function(Duration duration)? songProgress, - }) => - throw _privateConstructorUsedError; + }) => throw _privateConstructorUsedError; @optionalTypeArgs TResult maybeWhen({ TResult Function()? togglePlayPause, @@ -45,8 +44,7 @@ mixin _$PlaybackEvent { TResult Function(double percent)? moveToInSong, TResult Function(Duration duration)? songProgress, required TResult orElse(), - }) => - throw _privateConstructorUsedError; + }) => throw _privateConstructorUsedError; @optionalTypeArgs TResult map({ required TResult Function(TogglePlayPause value) togglePlayPause, @@ -55,8 +53,7 @@ mixin _$PlaybackEvent { required TResult Function(ToggleMute value) toggleMute, required TResult Function(MoveToInSong value) moveToInSong, required TResult Function(SongProgress value) songProgress, - }) => - throw _privateConstructorUsedError; + }) => throw _privateConstructorUsedError; @optionalTypeArgs TResult? mapOrNull({ TResult? Function(TogglePlayPause value)? togglePlayPause, @@ -65,8 +62,7 @@ mixin _$PlaybackEvent { TResult? Function(ToggleMute value)? toggleMute, TResult? Function(MoveToInSong value)? moveToInSong, TResult? Function(SongProgress value)? songProgress, - }) => - throw _privateConstructorUsedError; + }) => throw _privateConstructorUsedError; @optionalTypeArgs TResult maybeMap({ TResult Function(TogglePlayPause value)? togglePlayPause, @@ -76,15 +72,15 @@ mixin _$PlaybackEvent { TResult Function(MoveToInSong value)? moveToInSong, TResult Function(SongProgress value)? songProgress, required TResult orElse(), - }) => - throw _privateConstructorUsedError; + }) => throw _privateConstructorUsedError; } /// @nodoc abstract class $PlaybackEventCopyWith<$Res> { factory $PlaybackEventCopyWith( - PlaybackEvent value, $Res Function(PlaybackEvent) then) = - _$PlaybackEventCopyWithImpl<$Res, PlaybackEvent>; + PlaybackEvent value, + $Res Function(PlaybackEvent) then, + ) = _$PlaybackEventCopyWithImpl<$Res, PlaybackEvent>; } /// @nodoc @@ -103,9 +99,10 @@ class _$PlaybackEventCopyWithImpl<$Res, $Val extends PlaybackEvent> /// @nodoc abstract class _$$TogglePlayPauseImplCopyWith<$Res> { - factory _$$TogglePlayPauseImplCopyWith(_$TogglePlayPauseImpl value, - $Res Function(_$TogglePlayPauseImpl) then) = - __$$TogglePlayPauseImplCopyWithImpl<$Res>; + factory _$$TogglePlayPauseImplCopyWith( + _$TogglePlayPauseImpl value, + $Res Function(_$TogglePlayPauseImpl) then, + ) = __$$TogglePlayPauseImplCopyWithImpl<$Res>; } /// @nodoc @@ -113,8 +110,9 @@ class __$$TogglePlayPauseImplCopyWithImpl<$Res> extends _$PlaybackEventCopyWithImpl<$Res, _$TogglePlayPauseImpl> implements _$$TogglePlayPauseImplCopyWith<$Res> { __$$TogglePlayPauseImplCopyWithImpl( - _$TogglePlayPauseImpl _value, $Res Function(_$TogglePlayPauseImpl) _then) - : super(_value, _then); + _$TogglePlayPauseImpl _value, + $Res Function(_$TogglePlayPauseImpl) _then, + ) : super(_value, _then); /// Create a copy of PlaybackEvent /// with the given fields replaced by the non-null parameter values. @@ -233,8 +231,9 @@ abstract class TogglePlayPause implements PlaybackEvent { /// @nodoc abstract class _$$ChangeSongImplCopyWith<$Res> { factory _$$ChangeSongImplCopyWith( - _$ChangeSongImpl value, $Res Function(_$ChangeSongImpl) then) = - __$$ChangeSongImplCopyWithImpl<$Res>; + _$ChangeSongImpl value, + $Res Function(_$ChangeSongImpl) then, + ) = __$$ChangeSongImplCopyWithImpl<$Res>; @useResult $Res call({Song song}); } @@ -244,22 +243,23 @@ class __$$ChangeSongImplCopyWithImpl<$Res> extends _$PlaybackEventCopyWithImpl<$Res, _$ChangeSongImpl> implements _$$ChangeSongImplCopyWith<$Res> { __$$ChangeSongImplCopyWithImpl( - _$ChangeSongImpl _value, $Res Function(_$ChangeSongImpl) _then) - : super(_value, _then); + _$ChangeSongImpl _value, + $Res Function(_$ChangeSongImpl) _then, + ) : super(_value, _then); /// Create a copy of PlaybackEvent /// with the given fields replaced by the non-null parameter values. @pragma('vm:prefer-inline') @override - $Res call({ - Object? song = null, - }) { - return _then(_$ChangeSongImpl( - null == song - ? _value.song - : song // ignore: cast_nullable_to_non_nullable - as Song, - )); + $Res call({Object? song = null}) { + return _then( + _$ChangeSongImpl( + null == song + ? _value.song + : song // ignore: cast_nullable_to_non_nullable + as Song, + ), + ); } } @@ -397,8 +397,9 @@ abstract class ChangeSong implements PlaybackEvent { /// @nodoc abstract class _$$SetVolumeImplCopyWith<$Res> { factory _$$SetVolumeImplCopyWith( - _$SetVolumeImpl value, $Res Function(_$SetVolumeImpl) then) = - __$$SetVolumeImplCopyWithImpl<$Res>; + _$SetVolumeImpl value, + $Res Function(_$SetVolumeImpl) then, + ) = __$$SetVolumeImplCopyWithImpl<$Res>; @useResult $Res call({double value}); } @@ -408,22 +409,23 @@ class __$$SetVolumeImplCopyWithImpl<$Res> extends _$PlaybackEventCopyWithImpl<$Res, _$SetVolumeImpl> implements _$$SetVolumeImplCopyWith<$Res> { __$$SetVolumeImplCopyWithImpl( - _$SetVolumeImpl _value, $Res Function(_$SetVolumeImpl) _then) - : super(_value, _then); + _$SetVolumeImpl _value, + $Res Function(_$SetVolumeImpl) _then, + ) : super(_value, _then); /// Create a copy of PlaybackEvent /// with the given fields replaced by the non-null parameter values. @pragma('vm:prefer-inline') @override - $Res call({ - Object? value = null, - }) { - return _then(_$SetVolumeImpl( - null == value - ? _value.value - : value // ignore: cast_nullable_to_non_nullable - as double, - )); + $Res call({Object? value = null}) { + return _then( + _$SetVolumeImpl( + null == value + ? _value.value + : value // ignore: cast_nullable_to_non_nullable + as double, + ), + ); } } @@ -561,8 +563,9 @@ abstract class SetVolume implements PlaybackEvent { /// @nodoc abstract class _$$ToggleMuteImplCopyWith<$Res> { factory _$$ToggleMuteImplCopyWith( - _$ToggleMuteImpl value, $Res Function(_$ToggleMuteImpl) then) = - __$$ToggleMuteImplCopyWithImpl<$Res>; + _$ToggleMuteImpl value, + $Res Function(_$ToggleMuteImpl) then, + ) = __$$ToggleMuteImplCopyWithImpl<$Res>; } /// @nodoc @@ -570,8 +573,9 @@ class __$$ToggleMuteImplCopyWithImpl<$Res> extends _$PlaybackEventCopyWithImpl<$Res, _$ToggleMuteImpl> implements _$$ToggleMuteImplCopyWith<$Res> { __$$ToggleMuteImplCopyWithImpl( - _$ToggleMuteImpl _value, $Res Function(_$ToggleMuteImpl) _then) - : super(_value, _then); + _$ToggleMuteImpl _value, + $Res Function(_$ToggleMuteImpl) _then, + ) : super(_value, _then); /// Create a copy of PlaybackEvent /// with the given fields replaced by the non-null parameter values. @@ -690,8 +694,9 @@ abstract class ToggleMute implements PlaybackEvent { /// @nodoc abstract class _$$MoveToInSongImplCopyWith<$Res> { factory _$$MoveToInSongImplCopyWith( - _$MoveToInSongImpl value, $Res Function(_$MoveToInSongImpl) then) = - __$$MoveToInSongImplCopyWithImpl<$Res>; + _$MoveToInSongImpl value, + $Res Function(_$MoveToInSongImpl) then, + ) = __$$MoveToInSongImplCopyWithImpl<$Res>; @useResult $Res call({double percent}); } @@ -701,22 +706,23 @@ class __$$MoveToInSongImplCopyWithImpl<$Res> extends _$PlaybackEventCopyWithImpl<$Res, _$MoveToInSongImpl> implements _$$MoveToInSongImplCopyWith<$Res> { __$$MoveToInSongImplCopyWithImpl( - _$MoveToInSongImpl _value, $Res Function(_$MoveToInSongImpl) _then) - : super(_value, _then); + _$MoveToInSongImpl _value, + $Res Function(_$MoveToInSongImpl) _then, + ) : super(_value, _then); /// Create a copy of PlaybackEvent /// with the given fields replaced by the non-null parameter values. @pragma('vm:prefer-inline') @override - $Res call({ - Object? percent = null, - }) { - return _then(_$MoveToInSongImpl( - null == percent - ? _value.percent - : percent // ignore: cast_nullable_to_non_nullable - as double, - )); + $Res call({Object? percent = null}) { + return _then( + _$MoveToInSongImpl( + null == percent + ? _value.percent + : percent // ignore: cast_nullable_to_non_nullable + as double, + ), + ); } } @@ -854,8 +860,9 @@ abstract class MoveToInSong implements PlaybackEvent { /// @nodoc abstract class _$$SongProgressImplCopyWith<$Res> { factory _$$SongProgressImplCopyWith( - _$SongProgressImpl value, $Res Function(_$SongProgressImpl) then) = - __$$SongProgressImplCopyWithImpl<$Res>; + _$SongProgressImpl value, + $Res Function(_$SongProgressImpl) then, + ) = __$$SongProgressImplCopyWithImpl<$Res>; @useResult $Res call({Duration duration}); } @@ -865,22 +872,23 @@ class __$$SongProgressImplCopyWithImpl<$Res> extends _$PlaybackEventCopyWithImpl<$Res, _$SongProgressImpl> implements _$$SongProgressImplCopyWith<$Res> { __$$SongProgressImplCopyWithImpl( - _$SongProgressImpl _value, $Res Function(_$SongProgressImpl) _then) - : super(_value, _then); + _$SongProgressImpl _value, + $Res Function(_$SongProgressImpl) _then, + ) : super(_value, _then); /// Create a copy of PlaybackEvent /// with the given fields replaced by the non-null parameter values. @pragma('vm:prefer-inline') @override - $Res call({ - Object? duration = null, - }) { - return _then(_$SongProgressImpl( - null == duration - ? _value.duration - : duration // ignore: cast_nullable_to_non_nullable - as Duration, - )); + $Res call({Object? duration = null}) { + return _then( + _$SongProgressImpl( + null == duration + ? _value.duration + : duration // ignore: cast_nullable_to_non_nullable + as Duration, + ), + ); } } @@ -1037,15 +1045,17 @@ mixin _$PlaybackState { /// @nodoc abstract class $PlaybackStateCopyWith<$Res> { factory $PlaybackStateCopyWith( - PlaybackState value, $Res Function(PlaybackState) then) = - _$PlaybackStateCopyWithImpl<$Res, PlaybackState>; + PlaybackState value, + $Res Function(PlaybackState) then, + ) = _$PlaybackStateCopyWithImpl<$Res, PlaybackState>; @useResult - $Res call( - {double volume, - double? previousVolume, - bool isMuted, - bool isPlaying, - SongWithProgress? songWithProgress}); + $Res call({ + double volume, + double? previousVolume, + bool isMuted, + bool isPlaying, + SongWithProgress? songWithProgress, + }); $SongWithProgressCopyWith<$Res>? get songWithProgress; } @@ -1071,28 +1081,36 @@ class _$PlaybackStateCopyWithImpl<$Res, $Val extends PlaybackState> Object? isPlaying = null, Object? songWithProgress = freezed, }) { - return _then(_value.copyWith( - volume: null == volume - ? _value.volume - : volume // ignore: cast_nullable_to_non_nullable - as double, - previousVolume: freezed == previousVolume - ? _value.previousVolume - : previousVolume // ignore: cast_nullable_to_non_nullable - as double?, - isMuted: null == isMuted - ? _value.isMuted - : isMuted // ignore: cast_nullable_to_non_nullable - as bool, - isPlaying: null == isPlaying - ? _value.isPlaying - : isPlaying // ignore: cast_nullable_to_non_nullable - as bool, - songWithProgress: freezed == songWithProgress - ? _value.songWithProgress - : songWithProgress // ignore: cast_nullable_to_non_nullable - as SongWithProgress?, - ) as $Val); + return _then( + _value.copyWith( + volume: + null == volume + ? _value.volume + : volume // ignore: cast_nullable_to_non_nullable + as double, + previousVolume: + freezed == previousVolume + ? _value.previousVolume + : previousVolume // ignore: cast_nullable_to_non_nullable + as double?, + isMuted: + null == isMuted + ? _value.isMuted + : isMuted // ignore: cast_nullable_to_non_nullable + as bool, + isPlaying: + null == isPlaying + ? _value.isPlaying + : isPlaying // ignore: cast_nullable_to_non_nullable + as bool, + songWithProgress: + freezed == songWithProgress + ? _value.songWithProgress + : songWithProgress // ignore: cast_nullable_to_non_nullable + as SongWithProgress?, + ) + as $Val, + ); } /// Create a copy of PlaybackState @@ -1114,16 +1132,18 @@ class _$PlaybackStateCopyWithImpl<$Res, $Val extends PlaybackState> abstract class _$$PlaybackStateImplCopyWith<$Res> implements $PlaybackStateCopyWith<$Res> { factory _$$PlaybackStateImplCopyWith( - _$PlaybackStateImpl value, $Res Function(_$PlaybackStateImpl) then) = - __$$PlaybackStateImplCopyWithImpl<$Res>; + _$PlaybackStateImpl value, + $Res Function(_$PlaybackStateImpl) then, + ) = __$$PlaybackStateImplCopyWithImpl<$Res>; @override @useResult - $Res call( - {double volume, - double? previousVolume, - bool isMuted, - bool isPlaying, - SongWithProgress? songWithProgress}); + $Res call({ + double volume, + double? previousVolume, + bool isMuted, + bool isPlaying, + SongWithProgress? songWithProgress, + }); @override $SongWithProgressCopyWith<$Res>? get songWithProgress; @@ -1134,8 +1154,9 @@ class __$$PlaybackStateImplCopyWithImpl<$Res> extends _$PlaybackStateCopyWithImpl<$Res, _$PlaybackStateImpl> implements _$$PlaybackStateImplCopyWith<$Res> { __$$PlaybackStateImplCopyWithImpl( - _$PlaybackStateImpl _value, $Res Function(_$PlaybackStateImpl) _then) - : super(_value, _then); + _$PlaybackStateImpl _value, + $Res Function(_$PlaybackStateImpl) _then, + ) : super(_value, _then); /// Create a copy of PlaybackState /// with the given fields replaced by the non-null parameter values. @@ -1148,40 +1169,48 @@ class __$$PlaybackStateImplCopyWithImpl<$Res> Object? isPlaying = null, Object? songWithProgress = freezed, }) { - return _then(_$PlaybackStateImpl( - volume: null == volume - ? _value.volume - : volume // ignore: cast_nullable_to_non_nullable - as double, - previousVolume: freezed == previousVolume - ? _value.previousVolume - : previousVolume // ignore: cast_nullable_to_non_nullable - as double?, - isMuted: null == isMuted - ? _value.isMuted - : isMuted // ignore: cast_nullable_to_non_nullable - as bool, - isPlaying: null == isPlaying - ? _value.isPlaying - : isPlaying // ignore: cast_nullable_to_non_nullable - as bool, - songWithProgress: freezed == songWithProgress - ? _value.songWithProgress - : songWithProgress // ignore: cast_nullable_to_non_nullable - as SongWithProgress?, - )); + return _then( + _$PlaybackStateImpl( + volume: + null == volume + ? _value.volume + : volume // ignore: cast_nullable_to_non_nullable + as double, + previousVolume: + freezed == previousVolume + ? _value.previousVolume + : previousVolume // ignore: cast_nullable_to_non_nullable + as double?, + isMuted: + null == isMuted + ? _value.isMuted + : isMuted // ignore: cast_nullable_to_non_nullable + as bool, + isPlaying: + null == isPlaying + ? _value.isPlaying + : isPlaying // ignore: cast_nullable_to_non_nullable + as bool, + songWithProgress: + freezed == songWithProgress + ? _value.songWithProgress + : songWithProgress // ignore: cast_nullable_to_non_nullable + as SongWithProgress?, + ), + ); } } /// @nodoc class _$PlaybackStateImpl implements _PlaybackState { - const _$PlaybackStateImpl( - {this.volume = 0.5, - this.previousVolume, - this.isMuted = false, - this.isPlaying = false, - this.songWithProgress}); + const _$PlaybackStateImpl({ + this.volume = 0.5, + this.previousVolume, + this.isMuted = false, + this.isPlaying = false, + this.songWithProgress, + }); /// Legal values are between 0 and 1. @override @@ -1221,8 +1250,14 @@ class _$PlaybackStateImpl implements _PlaybackState { } @override - int get hashCode => Object.hash(runtimeType, volume, previousVolume, isMuted, - isPlaying, songWithProgress); + int get hashCode => Object.hash( + runtimeType, + volume, + previousVolume, + isMuted, + isPlaying, + songWithProgress, + ); /// Create a copy of PlaybackState /// with the given fields replaced by the non-null parameter values. @@ -1234,12 +1269,13 @@ class _$PlaybackStateImpl implements _PlaybackState { } abstract class _PlaybackState implements PlaybackState { - const factory _PlaybackState( - {final double volume, - final double? previousVolume, - final bool isMuted, - final bool isPlaying, - final SongWithProgress? songWithProgress}) = _$PlaybackStateImpl; + const factory _PlaybackState({ + final double volume, + final double? previousVolume, + final bool isMuted, + final bool isPlaying, + final SongWithProgress? songWithProgress, + }) = _$PlaybackStateImpl; /// Legal values are between 0 and 1. @override @@ -1278,8 +1314,9 @@ mixin _$SongWithProgress { /// @nodoc abstract class $SongWithProgressCopyWith<$Res> { factory $SongWithProgressCopyWith( - SongWithProgress value, $Res Function(SongWithProgress) then) = - _$SongWithProgressCopyWithImpl<$Res, SongWithProgress>; + SongWithProgress value, + $Res Function(SongWithProgress) then, + ) = _$SongWithProgressCopyWithImpl<$Res, SongWithProgress>; @useResult $Res call({Duration progress, Song song}); } @@ -1298,29 +1335,32 @@ class _$SongWithProgressCopyWithImpl<$Res, $Val extends SongWithProgress> /// with the given fields replaced by the non-null parameter values. @pragma('vm:prefer-inline') @override - $Res call({ - Object? progress = null, - Object? song = null, - }) { - return _then(_value.copyWith( - progress: null == progress - ? _value.progress - : progress // ignore: cast_nullable_to_non_nullable - as Duration, - song: null == song - ? _value.song - : song // ignore: cast_nullable_to_non_nullable - as Song, - ) as $Val); + $Res call({Object? progress = null, Object? song = null}) { + return _then( + _value.copyWith( + progress: + null == progress + ? _value.progress + : progress // ignore: cast_nullable_to_non_nullable + as Duration, + song: + null == song + ? _value.song + : song // ignore: cast_nullable_to_non_nullable + as Song, + ) + as $Val, + ); } } /// @nodoc abstract class _$$SongWithProgressImplCopyWith<$Res> implements $SongWithProgressCopyWith<$Res> { - factory _$$SongWithProgressImplCopyWith(_$SongWithProgressImpl value, - $Res Function(_$SongWithProgressImpl) then) = - __$$SongWithProgressImplCopyWithImpl<$Res>; + factory _$$SongWithProgressImplCopyWith( + _$SongWithProgressImpl value, + $Res Function(_$SongWithProgressImpl) then, + ) = __$$SongWithProgressImplCopyWithImpl<$Res>; @override @useResult $Res call({Duration progress, Song song}); @@ -1330,28 +1370,30 @@ abstract class _$$SongWithProgressImplCopyWith<$Res> class __$$SongWithProgressImplCopyWithImpl<$Res> extends _$SongWithProgressCopyWithImpl<$Res, _$SongWithProgressImpl> implements _$$SongWithProgressImplCopyWith<$Res> { - __$$SongWithProgressImplCopyWithImpl(_$SongWithProgressImpl _value, - $Res Function(_$SongWithProgressImpl) _then) - : super(_value, _then); + __$$SongWithProgressImplCopyWithImpl( + _$SongWithProgressImpl _value, + $Res Function(_$SongWithProgressImpl) _then, + ) : super(_value, _then); /// Create a copy of SongWithProgress /// with the given fields replaced by the non-null parameter values. @pragma('vm:prefer-inline') @override - $Res call({ - Object? progress = null, - Object? song = null, - }) { - return _then(_$SongWithProgressImpl( - progress: null == progress - ? _value.progress - : progress // ignore: cast_nullable_to_non_nullable - as Duration, - song: null == song - ? _value.song - : song // ignore: cast_nullable_to_non_nullable - as Song, - )); + $Res call({Object? progress = null, Object? song = null}) { + return _then( + _$SongWithProgressImpl( + progress: + null == progress + ? _value.progress + : progress // ignore: cast_nullable_to_non_nullable + as Duration, + song: + null == song + ? _value.song + : song // ignore: cast_nullable_to_non_nullable + as Song, + ), + ); } } @@ -1390,13 +1432,16 @@ class _$SongWithProgressImpl implements _SongWithProgress { @pragma('vm:prefer-inline') _$$SongWithProgressImplCopyWith<_$SongWithProgressImpl> get copyWith => __$$SongWithProgressImplCopyWithImpl<_$SongWithProgressImpl>( - this, _$identity); + this, + _$identity, + ); } abstract class _SongWithProgress implements SongWithProgress { - const factory _SongWithProgress( - {required final Duration progress, - required final Song song}) = _$SongWithProgressImpl; + const factory _SongWithProgress({ + required final Duration progress, + required final Song song, + }) = _$SongWithProgressImpl; @override Duration get progress; diff --git a/boring_to_beautiful/step_05/lib/src/shared/providers/artists.dart b/boring_to_beautiful/step_05/lib/src/shared/providers/artists.dart index d116ad9cdd..f9e4a8063e 100644 --- a/boring_to_beautiful/step_05/lib/src/shared/providers/artists.dart +++ b/boring_to_beautiful/step_05/lib/src/shared/providers/artists.dart @@ -11,162 +11,175 @@ class ArtistsProvider { static ArtistsProvider get shared => ArtistsProvider(); List get artists => const [ - Artist( - id: 'jmo', - name: 'Jessie Morrison', + Artist( + id: 'jmo', + name: 'Jessie Morrison', + image: MyArtistImage( + image: 'assets/images/artists/woman.jpeg', + sourceLink: 'https://unsplash.com/photos/w8wpFqiMpW8', + sourceName: 'Daniel Monteiro', + ), + bio: + 'Jessie "JMo" Morrison is an American singer, actress, and dancer. The following year she won over America\'s hearts first appearing in the 2004 movie Unexpected Engagement. Soon after she released her debut album, Hopeful Romantics.', + updates: [ + 'So happy that everyone is loving the new music! It\'s been my pride and joy to work on and I\'m thrilled that you finally get to hear it!', + 'Happy Valentine\'s Day y\'all!!! I love each and every one of you 💋😘', + '#HappyGalentinesDay!!! Chocolates. Ice Cream. Your favorite rom-com. Let\'s goo!!! 💕✨', + ], + events: [ + Event( + date: '1/20/22', + title: 'Jessie Morrison: No More Heartbreak Tour', + location: 'Mountain View, California', + link: 'Tickets', + ), + Event( + date: '1/22/22', + title: 'Jessie Morrison: No More Heartbreak Tour', + location: 'Austin, Texas', + link: 'Tickets', + ), + Event( + date: '1/23/22', + title: 'Jessie Morrison: No More Heartbreak Tour', + location: 'Houston, Texas', + link: 'Tickets', + ), + Event( + date: '2/8/22', + title: 'Jessie Morrison: No More Heartbreak Tour', + location: 'Los Angeles, California', + link: 'Tickets', + ), + ], + news: [ + News( + title: + 'Jessie Morrison a 26-stop cross country tour for the first time in 6 years.', + author: 'By Jacqueline Stewart', + blurb: + 'Our favorite triple-threat Jessie Morrison is back, this time with a 26 stop tour across the country. She\'ll kick things off in Mountain View on January 20th, 2022 in Mountain View California with more stops being announced over the next few weeks...', image: MyArtistImage( - image: 'assets/images/artists/woman.jpeg', - sourceLink: 'https://unsplash.com/photos/w8wpFqiMpW8', - sourceName: 'Daniel Monteiro', + image: 'assets/images/news/concert.jpeg', + sourceLink: 'https://unsplash.com/photos/hzgs56Ze49s', + sourceName: 'Anthony DELANOIX', ), - bio: - 'Jessie "JMo" Morrison is an American singer, actress, and dancer. The following year she won over America\'s hearts first appearing in the 2004 movie Unexpected Engagement. Soon after she released her debut album, Hopeful Romantics.', - updates: [ - 'So happy that everyone is loving the new music! It\'s been my pride and joy to work on and I\'m thrilled that you finally get to hear it!', - 'Happy Valentine\'s Day y\'all!!! I love each and every one of you 💋😘', - '#HappyGalentinesDay!!! Chocolates. Ice Cream. Your favorite rom-com. Let\'s goo!!! 💕✨', - ], - events: [ - Event( - date: '1/20/22', - title: 'Jessie Morrison: No More Heartbreak Tour', - location: 'Mountain View, California', - link: 'Tickets'), - Event( - date: '1/22/22', - title: 'Jessie Morrison: No More Heartbreak Tour', - location: 'Austin, Texas', - link: 'Tickets'), - Event( - date: '1/23/22', - title: 'Jessie Morrison: No More Heartbreak Tour', - location: 'Houston, Texas', - link: 'Tickets'), - Event( - date: '2/8/22', - title: 'Jessie Morrison: No More Heartbreak Tour', - location: 'Los Angeles, California', - link: 'Tickets'), - ], - news: [ - News( - title: - 'Jessie Morrison a 26-stop cross country tour for the first time in 6 years.', - author: 'By Jacqueline Stewart', - blurb: - 'Our favorite triple-threat Jessie Morrison is back, this time with a 26 stop tour across the country. She\'ll kick things off in Mountain View on January 20th, 2022 in Mountain View California with more stops being announced over the next few weeks...', - image: MyArtistImage( - image: 'assets/images/news/concert.jpeg', - sourceLink: 'https://unsplash.com/photos/hzgs56Ze49s', - sourceName: 'Anthony DELANOIX', - ), - ) - ], ), - Artist( - id: 'lb', - name: 'Lucas Bryant', + ], + ), + Artist( + id: 'lb', + name: 'Lucas Bryant', + image: MyArtistImage( + image: 'assets/images/albums/artist1-album2.jpg', + sourceLink: 'https://unsplash.com/photos/6etHcucBiRg', + sourceName: 'Keagan Henman', + ), + bio: + 'Lucas Bryant is an American country music singer and songwriter. He moved to Nashville at the age of 18 to pursue his country music career. With 34 awards to his name, he currently holds the record for most awards in country music.', + updates: [ + 'Who\'s ready to party this weekend?! See you tomorrow, Nashville! #LBlive', + 'Can\'t wait to get back on stage after so long. What songs do you want to hear?', + 'We\'re going all in this weekend! How are you doing, Vegas?!', + ], + events: [ + Event( + date: '5/16/22', + title: 'Back To My Hometown Tour', + location: 'Indianapolis, IN', + link: 'Tickets', + ), + Event( + date: '5/18/22', + title: 'Back To My Hometown Tour', + location: 'San Antonio, TX', + link: 'Tickets', + ), + Event( + date: '5/20/22', + title: 'Back To My Hometown Tour', + location: 'Phoenix, AZ', + link: 'Tickets', + ), + Event( + date: '5/23/22', + title: 'Back To My Hometown Tour', + location: 'San Diego, CA', + link: 'Tickets', + ), + ], + news: [ + News( + title: + 'Country Music Favorites Lucas Bryant, Mariam Lubbock, Michelle Delaney and Jackson Murray Join Forces For The Biggest Performance in Country History.', + author: 'Lonnie Hall', + blurb: + 'Calling all country music fans! Fasten your seat belts because the 2022 Best of Country Awards is expecting a huge performance from some of our favorite artists. Country music legends Mariam Lubbock and Jackson Murray will be joined by Lucas Bryant and Michelle Delaney for a performance we\'ll never forget.', image: MyArtistImage( image: 'assets/images/albums/artist1-album2.jpg', sourceLink: 'https://unsplash.com/photos/6etHcucBiRg', sourceName: 'Keagan Henman', ), - bio: - 'Lucas Bryant is an American country music singer and songwriter. He moved to Nashville at the age of 18 to pursue his country music career. With 34 awards to his name, he currently holds the record for most awards in country music.', - updates: [ - 'Who\'s ready to party this weekend?! See you tomorrow, Nashville! #LBlive', - 'Can\'t wait to get back on stage after so long. What songs do you want to hear?', - 'We\'re going all in this weekend! How are you doing, Vegas?!', - ], - events: [ - Event( - date: '5/16/22', - title: 'Back To My Hometown Tour', - location: 'Indianapolis, IN', - link: 'Tickets'), - Event( - date: '5/18/22', - title: 'Back To My Hometown Tour', - location: 'San Antonio, TX', - link: 'Tickets'), - Event( - date: '5/20/22', - title: 'Back To My Hometown Tour', - location: 'Phoenix, AZ', - link: 'Tickets'), - Event( - date: '5/23/22', - title: 'Back To My Hometown Tour', - location: 'San Diego, CA', - link: 'Tickets'), - ], - news: [ - News( - title: - 'Country Music Favorites Lucas Bryant, Mariam Lubbock, Michelle Delaney and Jackson Murray Join Forces For The Biggest Performance in Country History.', - author: 'Lonnie Hall', - blurb: - 'Calling all country music fans! Fasten your seat belts because the 2022 Best of Country Awards is expecting a huge performance from some of our favorite artists. Country music legends Mariam Lubbock and Jackson Murray will be joined by Lucas Bryant and Michelle Delaney for a performance we\'ll never forget.', - image: MyArtistImage( - image: 'assets/images/albums/artist1-album2.jpg', - sourceLink: 'https://unsplash.com/photos/6etHcucBiRg', - sourceName: 'Keagan Henman', - ), - ), - ], ), - Artist( - id: 'jonjames', - name: 'Jon James', + ], + ), + Artist( + id: 'jonjames', + name: 'Jon James', + image: MyArtistImage( + image: 'assets/images/artists/joe.jpg', + sourceLink: 'https://unsplash.com/photos/k7UKO-tT5QU', + sourceName: 'Natalie Runnerstrom', + ), + bio: + 'Jon James is an American singer and songwriter. He\'s best known for his number one single "Never Going Back" which stayed atop the charts for 10 weeks.', + updates: [ + '3. MORE. DAYS. Who\'s ready for #FallingForYou?! Tune in tomorrow to see the full track list!', + '4 days until I get to share some of the favorite songs I\'ve ever written with you.', + '#FallingForYou dropping in 5 days! Send me your favorite music video concepts 🎥 😎', + ], + events: [ + Event( + date: '10/22/21', + title: 'Falling For You Tour', + location: 'Dallas, Texas', + link: 'Ticketmaster', + ), + Event( + date: '10/23/21', + title: 'Falling For You Tour', + location: 'Houston, Texas', + link: 'Ticketmaster', + ), + Event( + date: '10/26/21', + title: 'Falling For You Tour', + location: 'Phoenix, Arizona', + link: 'Ticketmaster', + ), + Event( + date: '10/27/21', + title: 'Falling For You Tour', + location: 'Los Angeles, California', + link: 'Ticketmaster', + ), + ], + news: [ + News( + title: + 'Jon James is excited for the release of his sixth album "Falling For You"', + author: 'Top Media Today', + blurb: + 'Jon James will be dropping his new album "Falling For You" on Friday to much fan excitement. The 6-time Grammy winning artist has spent the last year writing and recording for this album that\'s been dubbed "his best work yet."', image: MyArtistImage( - image: 'assets/images/artists/joe.jpg', - sourceLink: 'https://unsplash.com/photos/k7UKO-tT5QU', - sourceName: 'Natalie Runnerstrom', + image: 'assets/images/news/recording_studio.jpg', + sourceLink: 'https://unsplash.com/photos/CbOGmLA46JI', + sourceName: 'Yohann LIBOT', ), - bio: - 'Jon James is an American singer and songwriter. He\'s best known for his number one single "Never Going Back" which stayed atop the charts for 10 weeks.', - updates: [ - '3. MORE. DAYS. Who\'s ready for #FallingForYou?! Tune in tomorrow to see the full track list!', - '4 days until I get to share some of the favorite songs I\'ve ever written with you.', - '#FallingForYou dropping in 5 days! Send me your favorite music video concepts 🎥 😎', - ], - events: [ - Event( - date: '10/22/21', - title: 'Falling For You Tour', - location: 'Dallas, Texas', - link: 'Ticketmaster'), - Event( - date: '10/23/21', - title: 'Falling For You Tour', - location: 'Houston, Texas', - link: 'Ticketmaster'), - Event( - date: '10/26/21', - title: 'Falling For You Tour', - location: 'Phoenix, Arizona', - link: 'Ticketmaster'), - Event( - date: '10/27/21', - title: 'Falling For You Tour', - location: 'Los Angeles, California', - link: 'Ticketmaster'), - ], - news: [ - News( - title: - 'Jon James is excited for the release of his sixth album "Falling For You"', - author: 'Top Media Today', - blurb: - 'Jon James will be dropping his new album "Falling For You" on Friday to much fan excitement. The 6-time Grammy winning artist has spent the last year writing and recording for this album that\'s been dubbed "his best work yet."', - image: MyArtistImage( - image: 'assets/images/news/recording_studio.jpg', - sourceLink: 'https://unsplash.com/photos/CbOGmLA46JI', - sourceName: 'Yohann LIBOT'), - ) - ], ), - ]; + ], + ), + ]; Artist? getArtist(String id) { return artists.firstWhereOrNull((artist) => artist.id == id); diff --git a/boring_to_beautiful/step_05/lib/src/shared/providers/playlists.dart b/boring_to_beautiful/step_05/lib/src/shared/providers/playlists.dart index e8bab994dd..f27f71b3ec 100644 --- a/boring_to_beautiful/step_05/lib/src/shared/providers/playlists.dart +++ b/boring_to_beautiful/step_05/lib/src/shared/providers/playlists.dart @@ -18,41 +18,50 @@ class PlaylistsProvider { static List images() { return [ const MyArtistImage( - image: 'assets/images/playlists/favorite.jpg', - sourceLink: 'https://unsplash.com/photos/60GsdOMRFGc', - sourceName: 'Karsten Winegeart'), + image: 'assets/images/playlists/favorite.jpg', + sourceLink: 'https://unsplash.com/photos/60GsdOMRFGc', + sourceName: 'Karsten Winegeart', + ), const MyArtistImage( - image: 'assets/images/playlists/austin.jpg', - sourceLink: 'https://unsplash.com/photos/AlBgcDfDG_s', - sourceName: 'Carlos Alfonso'), + image: 'assets/images/playlists/austin.jpg', + sourceLink: 'https://unsplash.com/photos/AlBgcDfDG_s', + sourceName: 'Carlos Alfonso', + ), const MyArtistImage( - image: 'assets/images/playlists/reading.jpg', - sourceLink: 'https://unsplash.com/photos/wkgv7I2VTzM', - sourceName: 'Alexandra Fuller'), + image: 'assets/images/playlists/reading.jpg', + sourceLink: 'https://unsplash.com/photos/wkgv7I2VTzM', + sourceName: 'Alexandra Fuller', + ), const MyArtistImage( - image: 'assets/images/playlists/workout.jpg', - sourceLink: 'https://unsplash.com/photos/CnEEF5eJemQ', - sourceName: 'Karsten Winegeart'), + image: 'assets/images/playlists/workout.jpg', + sourceLink: 'https://unsplash.com/photos/CnEEF5eJemQ', + sourceName: 'Karsten Winegeart', + ), const MyArtistImage( - image: 'assets/images/playlists/calm.jpg', - sourceLink: 'https://unsplash.com/photos/NTyBbu66_SI', - sourceName: 'Jared Rice'), + image: 'assets/images/playlists/calm.jpg', + sourceLink: 'https://unsplash.com/photos/NTyBbu66_SI', + sourceName: 'Jared Rice', + ), const MyArtistImage( - image: 'assets/images/playlists/coffee.jpg', - sourceLink: 'https://unsplash.com/photos/XOhI_kW_TaM', - sourceName: 'Nathan Dumlao'), + image: 'assets/images/playlists/coffee.jpg', + sourceLink: 'https://unsplash.com/photos/XOhI_kW_TaM', + sourceName: 'Nathan Dumlao', + ), const MyArtistImage( - image: 'assets/images/playlists/piano.jpg', - sourceLink: 'https://unsplash.com/photos/BhfE1IgcsA8', - sourceName: 'Jordan Whitfield'), + image: 'assets/images/playlists/piano.jpg', + sourceLink: 'https://unsplash.com/photos/BhfE1IgcsA8', + sourceName: 'Jordan Whitfield', + ), const MyArtistImage( - image: 'assets/images/playlists/studying.jpg', - sourceLink: 'https://unsplash.com/photos/-moT-Deiw1M', - sourceName: 'Humble Lamb'), + image: 'assets/images/playlists/studying.jpg', + sourceLink: 'https://unsplash.com/photos/-moT-Deiw1M', + sourceName: 'Humble Lamb', + ), const MyArtistImage( - image: 'assets/images/playlists/jazz.jpg', - sourceLink: 'https://unsplash.com/photos/BY_KyTwTKq4', - sourceName: 'dimitri.photography'), + image: 'assets/images/playlists/jazz.jpg', + sourceLink: 'https://unsplash.com/photos/BY_KyTwTKq4', + sourceName: 'dimitri.photography', + ), ]; } @@ -85,8 +94,10 @@ class PlaylistsProvider { ); } - static final List _randomPlaylists = - List.generate(10, (index) => randomLengthPlaylist()); + static final List _randomPlaylists = List.generate( + 10, + (index) => randomLengthPlaylist(), + ); } String randomId() { diff --git a/boring_to_beautiful/step_05/lib/src/shared/providers/songs.dart b/boring_to_beautiful/step_05/lib/src/shared/providers/songs.dart index ed018a83ff..f1205f2dcb 100644 --- a/boring_to_beautiful/step_05/lib/src/shared/providers/songs.dart +++ b/boring_to_beautiful/step_05/lib/src/shared/providers/songs.dart @@ -52,9 +52,10 @@ final _songs = [ ArtistsProvider.shared.getArtist('jonjames')!, '3:35'.toDuration(), const MyArtistImage( - image: 'assets/images/albums/artist4-album2.jpg', - sourceLink: 'https://unsplash.com/photos/RQgKM1h2agA', - sourceName: 'Alexandru Acea'), + image: 'assets/images/albums/artist4-album2.jpg', + sourceLink: 'https://unsplash.com/photos/RQgKM1h2agA', + sourceName: 'Alexandru Acea', + ), ), RankedSong( 2, @@ -62,9 +63,10 @@ final _songs = [ ArtistsProvider.shared.getArtist('jonjames')!, '3:52'.toDuration(), const MyArtistImage( - image: 'assets/images/albums/artist4-album1.jpg', - sourceLink: 'https://unsplash.com/photos/ZWDg7v2FPWE', - sourceName: 'Jr Korpa'), + image: 'assets/images/albums/artist4-album1.jpg', + sourceLink: 'https://unsplash.com/photos/ZWDg7v2FPWE', + sourceName: 'Jr Korpa', + ), ), RankedSong( 3, @@ -72,9 +74,10 @@ final _songs = [ ArtistsProvider.shared.getArtist('jonjames')!, '3:39'.toDuration(), const MyArtistImage( - image: 'assets/images/albums/artist4-album3.jpg', - sourceLink: 'https://unsplash.com/photos/rX12B5uX7QM', - sourceName: 'Stormseeker'), + image: 'assets/images/albums/artist4-album3.jpg', + sourceLink: 'https://unsplash.com/photos/rX12B5uX7QM', + sourceName: 'Stormseeker', + ), ), RankedSong( 1, diff --git a/boring_to_beautiful/step_05/lib/src/shared/providers/theme.dart b/boring_to_beautiful/step_05/lib/src/shared/providers/theme.dart index a152dcdcba..a86e3daf64 100644 --- a/boring_to_beautiful/step_05/lib/src/shared/providers/theme.dart +++ b/boring_to_beautiful/step_05/lib/src/shared/providers/theme.dart @@ -28,12 +28,13 @@ class ThemeSettingChange extends Notification { } class ThemeProvider extends InheritedWidget { - const ThemeProvider( - {super.key, - required this.settings, - required this.lightDynamic, - required this.darkDynamic, - required super.child}); + const ThemeProvider({ + super.key, + required this.settings, + required this.lightDynamic, + required this.darkDynamic, + required super.child, + }); final ValueNotifier settings; final ColorScheme? lightDynamic; @@ -59,8 +60,9 @@ class ThemeProvider extends InheritedWidget { Color blend(Color targetColor) { return Color( - // ignore: deprecated_member_use - Blend.harmonize(targetColor.value, settings.value.sourceColor.value)); + // ignore: deprecated_member_use + Blend.harmonize(targetColor.value, settings.value.sourceColor.value), + ); } Color source(Color? target) { @@ -72,18 +74,18 @@ class ThemeProvider extends InheritedWidget { } ColorScheme colors(Brightness brightness, Color? targetColor) { - final dynamicPrimary = brightness == Brightness.light - ? lightDynamic?.primary - : darkDynamic?.primary; + final dynamicPrimary = + brightness == Brightness.light + ? lightDynamic?.primary + : darkDynamic?.primary; return ColorScheme.fromSeed( seedColor: dynamicPrimary ?? source(targetColor), brightness: brightness, ); } - ShapeBorder get shapeMedium => RoundedRectangleBorder( - borderRadius: BorderRadius.circular(8), - ); + ShapeBorder get shapeMedium => + RoundedRectangleBorder(borderRadius: BorderRadius.circular(8)); CardTheme cardTheme() { return CardTheme( @@ -113,21 +115,13 @@ class ThemeProvider extends InheritedWidget { labelColor: colors.secondary, unselectedLabelColor: colors.onSurfaceVariant, indicator: BoxDecoration( - border: Border( - bottom: BorderSide( - color: colors.secondary, - width: 2, - ), - ), + border: Border(bottom: BorderSide(color: colors.secondary, width: 2)), ), ); } BottomAppBarTheme bottomAppBarTheme(ColorScheme colors) { - return BottomAppBarTheme( - color: colors.surface, - elevation: 0, - ); + return BottomAppBarTheme(color: colors.surface, elevation: 0); } BottomNavigationBarThemeData bottomNavigationBarTheme(ColorScheme colors) { @@ -146,9 +140,7 @@ class ThemeProvider extends InheritedWidget { } DrawerThemeData drawerTheme(ColorScheme colors) { - return DrawerThemeData( - backgroundColor: colors.surface, - ); + return DrawerThemeData(backgroundColor: colors.surface); } ThemeData light([Color? targetColor]) { @@ -207,10 +199,7 @@ class ThemeProvider extends InheritedWidget { } class ThemeSettings { - ThemeSettings({ - required this.sourceColor, - required this.themeMode, - }); + ThemeSettings({required this.sourceColor, required this.themeMode}); final Color sourceColor; final ThemeMode themeMode; @@ -221,10 +210,7 @@ Color randomColor() { } // Custom Colors -const linkColor = CustomColor( - name: 'Link Color', - color: Color(0xFF00B0FF), -); +const linkColor = CustomColor(name: 'Link Color', color: Color(0xFF00B0FF)); class CustomColor { const CustomColor({ diff --git a/boring_to_beautiful/step_05/lib/src/shared/router.dart b/boring_to_beautiful/step_05/lib/src/shared/router.dart index 3efb7362fa..db82627246 100644 --- a/boring_to_beautiful/step_05/lib/src/shared/router.dart +++ b/boring_to_beautiful/step_05/lib/src/shared/router.dart @@ -20,11 +20,7 @@ final artistsProvider = ArtistsProvider(); final playlistsProvider = PlaylistsProvider(); const List destinations = [ - NavigationDestination( - label: 'Home', - icon: Icon(Icons.home), - route: '/', - ), + NavigationDestination(label: 'Home', icon: Icon(Icons.home), route: '/'), NavigationDestination( label: 'Playlists', icon: Icon(Icons.playlist_add_check), @@ -56,41 +52,46 @@ final appRouter = GoRouter( // HomeScreen GoRoute( path: '/', - pageBuilder: (context, state) => const MaterialPage( - key: _pageKey, - child: RootLayout( - key: _scaffoldKey, - currentIndex: 0, - child: HomeScreen(), - ), - ), + pageBuilder: + (context, state) => const MaterialPage( + key: _pageKey, + child: RootLayout( + key: _scaffoldKey, + currentIndex: 0, + child: HomeScreen(), + ), + ), ), // PlaylistHomeScreen GoRoute( path: '/playlists', - pageBuilder: (context, state) => const MaterialPage( - key: _pageKey, - child: RootLayout( - key: _scaffoldKey, - currentIndex: 1, - child: PlaylistHomeScreen(), - ), - ), - routes: [ - GoRoute( - path: ':pid', - pageBuilder: (context, state) => MaterialPage( - key: state.pageKey, + pageBuilder: + (context, state) => const MaterialPage( + key: _pageKey, child: RootLayout( key: _scaffoldKey, currentIndex: 1, - child: PlaylistScreen( - playlist: playlistsProvider - .getPlaylist(state.pathParameters['pid']!)!, - ), + child: PlaylistHomeScreen(), ), ), + routes: [ + GoRoute( + path: ':pid', + pageBuilder: + (context, state) => MaterialPage( + key: state.pageKey, + child: RootLayout( + key: _scaffoldKey, + currentIndex: 1, + child: PlaylistScreen( + playlist: + playlistsProvider.getPlaylist( + state.pathParameters['pid']!, + )!, + ), + ), + ), ), ], ), @@ -98,28 +99,32 @@ final appRouter = GoRouter( // ArtistHomeScreen GoRoute( path: '/artists', - pageBuilder: (context, state) => const MaterialPage( - key: _pageKey, - child: RootLayout( - key: _scaffoldKey, - currentIndex: 2, - child: ArtistsScreen(), - ), - ), - routes: [ - GoRoute( - path: ':aid', - pageBuilder: (context, state) => MaterialPage( - key: state.pageKey, + pageBuilder: + (context, state) => const MaterialPage( + key: _pageKey, child: RootLayout( key: _scaffoldKey, currentIndex: 2, - child: ArtistScreen( - artist: - artistsProvider.getArtist(state.pathParameters['aid']!)!, - ), + child: ArtistsScreen(), ), ), + routes: [ + GoRoute( + path: ':aid', + pageBuilder: + (context, state) => MaterialPage( + key: state.pageKey, + child: RootLayout( + key: _scaffoldKey, + currentIndex: 2, + child: ArtistScreen( + artist: + artistsProvider.getArtist( + state.pathParameters['aid']!, + )!, + ), + ), + ), // builder: (context, state) => ArtistScreen( // id: state.params['aid']!, // ), @@ -129,14 +134,15 @@ final appRouter = GoRouter( for (final route in destinations.skip(3)) GoRoute( path: route.route, - pageBuilder: (context, state) => MaterialPage( - key: _pageKey, - child: RootLayout( - key: _scaffoldKey, - currentIndex: destinations.indexOf(route), - child: const SizedBox(), - ), - ), + pageBuilder: + (context, state) => MaterialPage( + key: _pageKey, + child: RootLayout( + key: _scaffoldKey, + currentIndex: destinations.indexOf(route), + child: const SizedBox(), + ), + ), ), ], ); diff --git a/boring_to_beautiful/step_05/lib/src/shared/views/adaptive_image_card.dart b/boring_to_beautiful/step_05/lib/src/shared/views/adaptive_image_card.dart index 07cab2b0d7..99f5be0837 100644 --- a/boring_to_beautiful/step_05/lib/src/shared/views/adaptive_image_card.dart +++ b/boring_to_beautiful/step_05/lib/src/shared/views/adaptive_image_card.dart @@ -36,20 +36,13 @@ class AdaptiveImageCard extends StatelessWidget { ), ), Expanded( - child: Padding( - padding: const EdgeInsets.all(20), - child: child, - ), + child: Padding(padding: const EdgeInsets.all(20), child: child), ), ], ); } return Padding( - padding: const EdgeInsets.only( - left: 20, - bottom: 20, - top: 20, - ), + padding: const EdgeInsets.only(left: 20, bottom: 20, top: 20), child: Row( mainAxisAlignment: MainAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.end, @@ -65,11 +58,8 @@ class AdaptiveImageCard extends StatelessWidget { ), ), Expanded( - child: Padding( - padding: const EdgeInsets.all(20), - child: child, - ), - ) + child: Padding(padding: const EdgeInsets.all(20), child: child), + ), ], ), ); diff --git a/boring_to_beautiful/step_05/lib/src/shared/views/adaptive_navigation.dart b/boring_to_beautiful/step_05/lib/src/shared/views/adaptive_navigation.dart index 067ea7d17f..709068ea07 100644 --- a/boring_to_beautiful/step_05/lib/src/shared/views/adaptive_navigation.dart +++ b/boring_to_beautiful/step_05/lib/src/shared/views/adaptive_navigation.dart @@ -30,12 +30,15 @@ class AdaptiveNavigation extends StatelessWidget { NavigationRail( extended: dimens.maxWidth >= 800, minExtendedWidth: 180, - destinations: destinations - .map((e) => NavigationRailDestination( - icon: e.icon, - label: Text(e.label), - )) - .toList(), + destinations: + destinations + .map( + (e) => NavigationRailDestination( + icon: e.icon, + label: Text(e.label), + ), + ) + .toList(), selectedIndex: selectedIndex, onDestinationSelected: onDestinationSelected, ), diff --git a/boring_to_beautiful/step_05/lib/src/shared/views/article_content.dart b/boring_to_beautiful/step_05/lib/src/shared/views/article_content.dart index af243f015b..c5a0b5e62a 100644 --- a/boring_to_beautiful/step_05/lib/src/shared/views/article_content.dart +++ b/boring_to_beautiful/step_05/lib/src/shared/views/article_content.dart @@ -5,11 +5,7 @@ import 'package:flutter/material.dart'; class ArticleContent extends StatelessWidget { - const ArticleContent({ - super.key, - required this.child, - this.maxWidth = 960, - }); + const ArticleContent({super.key, required this.child, this.maxWidth = 960}); final double maxWidth; final Widget child; @@ -19,13 +15,8 @@ class ArticleContent extends StatelessWidget { return Container( alignment: Alignment.topCenter, child: ConstrainedBox( - constraints: BoxConstraints( - maxWidth: maxWidth, - ), - child: Padding( - padding: const EdgeInsets.all(15), - child: child, - ), + constraints: BoxConstraints(maxWidth: maxWidth), + child: Padding(padding: const EdgeInsets.all(15), child: child), ), ); } diff --git a/boring_to_beautiful/step_05/lib/src/shared/views/bottom_bar.dart b/boring_to_beautiful/step_05/lib/src/shared/views/bottom_bar.dart index 06e085a9b6..bf15ad9bb0 100644 --- a/boring_to_beautiful/step_05/lib/src/shared/views/bottom_bar.dart +++ b/boring_to_beautiful/step_05/lib/src/shared/views/bottom_bar.dart @@ -26,16 +26,18 @@ class BottomBar extends StatelessWidget implements PreferredSizeWidget { final bloc = BlocProvider.of(context); return BlocBuilder( bloc: bloc, - builder: (context, state) => _BottomBar( - artist: state.songWithProgress?.song.artist, - isMuted: state.isMuted, - isPlaying: state.isPlaying, - preferredSize: preferredSize, - progress: state.songWithProgress?.progress, - song: state.songWithProgress?.song, - togglePlayPause: () => bloc.add(const PlaybackEvent.togglePlayPause()), - volume: state.volume, - ), + builder: + (context, state) => _BottomBar( + artist: state.songWithProgress?.song.artist, + isMuted: state.isMuted, + isPlaying: state.isPlaying, + preferredSize: preferredSize, + progress: state.songWithProgress?.progress, + song: state.songWithProgress?.song, + togglePlayPause: + () => bloc.add(const PlaybackEvent.togglePlayPause()), + volume: state.volume, + ), ); } } @@ -63,10 +65,12 @@ class _BottomBar extends StatelessWidget { @override Widget build(BuildContext context) => LayoutBuilder( - builder: (context, constraints) => constraints.isTablet - ? _buildDesktopBar(context, constraints) - : _buildMobileBar(context, constraints), - ); + builder: + (context, constraints) => + constraints.isTablet + ? _buildDesktopBar(context, constraints) + : _buildMobileBar(context, constraints), + ); Widget _buildDesktopBar(BuildContext context, BoxConstraints constraints) { return ColoredBox( @@ -79,10 +83,7 @@ class _BottomBar extends StatelessWidget { Row( children: [ _AlbumArt(song: song), - _SongDetails( - artist: artist, - song: song, - ), + _SongDetails(artist: artist, song: song), ], ), Flexible( @@ -95,12 +96,7 @@ class _BottomBar extends StatelessWidget { isPlaying: isPlaying, togglePlayPause: togglePlayPause, ), - Center( - child: _ProgressBar( - progress: progress, - song: song, - ), - ), + Center(child: _ProgressBar(progress: progress, song: song)), ], ), ), @@ -114,17 +110,18 @@ class _BottomBar extends StatelessWidget { final overlay = Overlay.of(context); OverlayEntry? entry; entry = OverlayEntry( - builder: (context) => Stack( - children: [ - Positioned( - child: _FullScreenPlayer( - onClose: () { - entry?.remove(); - }, - ), + builder: + (context) => Stack( + children: [ + Positioned( + child: _FullScreenPlayer( + onClose: () { + entry?.remove(); + }, + ), + ), + ], ), - ], - ), ); overlay.insert(entry); }, @@ -136,10 +133,10 @@ class _BottomBar extends StatelessWidget { } double get songProgress => switch ((progress, song)) { - (Duration progress, Song song) => - progress.inMilliseconds / song.length.inMilliseconds, - _ => 0, - }; + (Duration progress, Song song) => + progress.inMilliseconds / song.length.inMilliseconds, + _ => 0, + }; Widget _buildMobileBar(BuildContext context, BoxConstraints constraints) { return ColoredBox( @@ -152,17 +149,18 @@ class _BottomBar extends StatelessWidget { final overlay = Overlay.of(context); OverlayEntry? entry; entry = OverlayEntry( - builder: (context) => Stack( - children: [ - Positioned( - child: _MobilePlayer( - onClose: () { - entry?.remove(); - }, - ), + builder: + (context) => Stack( + children: [ + Positioned( + child: _MobilePlayer( + onClose: () { + entry?.remove(); + }, + ), + ), + ], ), - ], - ), ); overlay.insert(entry); }, @@ -191,10 +189,7 @@ class _BottomBar extends StatelessWidget { mainAxisAlignment: MainAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start, children: [ - Text( - song?.title ?? '', - style: context.labelMedium, - ), + Text(song?.title ?? '', style: context.labelMedium), Text( song?.artist.name ?? '', style: context.labelSmall, @@ -220,10 +215,7 @@ class _BottomBar extends StatelessWidget { } class _ProgressBar extends StatelessWidget { - const _ProgressBar({ - required this.progress, - required this.song, - }); + const _ProgressBar({required this.progress, required this.song}); /// Current playback depth into user is into [song]. final Duration? progress; @@ -231,10 +223,10 @@ class _ProgressBar extends StatelessWidget { final Song? song; double get songProgress => switch ((progress, song)) { - (Duration progress, Song song) => - progress.inMilliseconds / song.length.inMilliseconds, - _ => 0, - }; + (Duration progress, Song song) => + progress.inMilliseconds / song.length.inMilliseconds, + _ => 0, + }; @override Widget build(BuildContext context) { @@ -252,29 +244,32 @@ class _ProgressBar extends StatelessWidget { children: [ const SizedBox(width: 10), SizedBox( - child: progress != null - ? Text(progress!.toHumanizedString(), - style: Theme.of(context).textTheme.bodySmall) - : const Text('-'), + child: + progress != null + ? Text( + progress!.toHumanizedString(), + style: Theme.of(context).textTheme.bodySmall, + ) + : const Text('-'), ), Expanded( child: Slider( value: songProgress.clamp(0, 1), divisions: 1000, onChanged: (percent) { - BlocProvider.of(context).add( - PlaybackEvent.moveToInSong(percent), - ); + BlocProvider.of( + context, + ).add(PlaybackEvent.moveToInSong(percent)); }, onChangeEnd: (percent) { - BlocProvider.of(context).add( - PlaybackEvent.moveToInSong(percent), - ); + BlocProvider.of( + context, + ).add(PlaybackEvent.moveToInSong(percent)); // Because dragging pauses auto playback, resume playing // once the user finishes dragging. - BlocProvider.of(context).add( - const PlaybackEvent.togglePlayPause(), - ); + BlocProvider.of( + context, + ).add(const PlaybackEvent.togglePlayPause()); }, activeColor: Theme.of(context).colorScheme.onTertiaryContainer, @@ -282,12 +277,15 @@ class _ProgressBar extends StatelessWidget { ), ), SizedBox( - child: song != null - ? Text(song!.length.toHumanizedString(), - style: Theme.of(context).textTheme.bodySmall) - : const Text('-'), + child: + song != null + ? Text( + song!.length.toHumanizedString(), + style: Theme.of(context).textTheme.bodySmall, + ) + : const Text('-'), ), - const SizedBox(width: 10) + const SizedBox(width: 10), ], ), ); @@ -297,10 +295,7 @@ class _ProgressBar extends StatelessWidget { } class _VolumeBar extends StatelessWidget { - const _VolumeBar({ - required this.volume, - required this.isMuted, - }); + const _VolumeBar({required this.volume, required this.isMuted}); /// The percentage, between 0 and 1, at which to render the volume slider. final double volume; @@ -313,17 +308,16 @@ class _VolumeBar extends StatelessWidget { @override Widget build(BuildContext context) { return ConstrainedBox( - constraints: const BoxConstraints( - maxWidth: 200, - ), + constraints: const BoxConstraints(maxWidth: 200), child: Padding( padding: const EdgeInsets.all(8), child: Row( children: [ GestureDetector( - onTap: () => BlocProvider.of(context).add( - const PlaybackEvent.toggleMute(), - ), + onTap: + () => BlocProvider.of( + context, + ).add(const PlaybackEvent.toggleMute()), child: Icon(!isMuted ? Icons.volume_mute : Icons.volume_off), ), Expanded( @@ -332,8 +326,10 @@ class _VolumeBar extends StatelessWidget { min: 0, max: 1, divisions: 100, - onChanged: (newValue) => BlocProvider.of(context) - .add(PlaybackEvent.setVolume(newValue)), + onChanged: + (newValue) => BlocProvider.of( + context, + ).add(PlaybackEvent.setVolume(newValue)), activeColor: Theme.of(context).colorScheme.onTertiaryContainer, inactiveColor: Theme.of(context).colorScheme.onSurface, ), @@ -356,49 +352,50 @@ class _PlaybackControls extends StatelessWidget { @override Widget build(BuildContext context) { - return LayoutBuilder(builder: (context, constraints) { - double iconSize = 24; - double playIconSize = 32; - double innerPadding = 16; - double playPadding = 20; - if (constraints.maxWidth < 500) { - iconSize = 21; - playIconSize = 28; - innerPadding = 14; - playPadding = 17; - } - return Row( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Padding( + return LayoutBuilder( + builder: (context, constraints) { + double iconSize = 24; + double playIconSize = 32; + double innerPadding = 16; + double playPadding = 20; + if (constraints.maxWidth < 500) { + iconSize = 21; + playIconSize = 28; + innerPadding = 14; + playPadding = 17; + } + return Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Padding( padding: EdgeInsets.fromLTRB(0, 0, innerPadding, 0), - child: Icon(Icons.shuffle, size: iconSize)), - Icon(Icons.skip_previous, size: iconSize), - Padding( - padding: EdgeInsets.fromLTRB(playPadding, 0, innerPadding, 0), - child: GestureDetector( - onTap: togglePlayPause, - child: Icon( - isPlaying ? Icons.pause_circle : Icons.play_circle, - size: playIconSize, + child: Icon(Icons.shuffle, size: iconSize), + ), + Icon(Icons.skip_previous, size: iconSize), + Padding( + padding: EdgeInsets.fromLTRB(playPadding, 0, innerPadding, 0), + child: GestureDetector( + onTap: togglePlayPause, + child: Icon( + isPlaying ? Icons.pause_circle : Icons.play_circle, + size: playIconSize, + ), ), ), - ), - Icon(Icons.skip_next, size: iconSize), - Padding( - padding: EdgeInsets.fromLTRB(innerPadding, 0, 0, 0), - child: Icon(Icons.repeat, size: iconSize), - ), - ], - ); - }); + Icon(Icons.skip_next, size: iconSize), + Padding( + padding: EdgeInsets.fromLTRB(innerPadding, 0, 0, 0), + child: Icon(Icons.repeat, size: iconSize), + ), + ], + ); + }, + ); } } class _AlbumArt extends StatelessWidget { - const _AlbumArt({ - required this.song, - }); + const _AlbumArt({required this.song}); final Song? song; @@ -409,21 +406,17 @@ class _AlbumArt extends StatelessWidget { child: SizedBox( width: 70, height: 70, - child: song != null - ? Image.asset(song!.image.image) - : Container( - color: Colors.pink[100], - ), + child: + song != null + ? Image.asset(song!.image.image) + : Container(color: Colors.pink[100]), ), ); } } class _SongDetails extends StatelessWidget { - const _SongDetails({ - required this.artist, - required this.song, - }); + const _SongDetails({required this.artist, required this.song}); final Artist? artist; final Song? song; @@ -455,9 +448,7 @@ class _SongDetails extends StatelessWidget { } class _FullScreenPlayer extends StatefulWidget { - const _FullScreenPlayer({ - required this.onClose, - }); + const _FullScreenPlayer({required this.onClose}); final VoidCallback onClose; @@ -489,29 +480,33 @@ class _FullScreenPlayerState extends State<_FullScreenPlayer> { final bloc = BlocProvider.of(context); return BlocBuilder( bloc: bloc, - builder: (context, state) => Theme( - data: ThemeProvider.of(context).dark(), - child: Scaffold( - body: LayoutBuilder( - builder: (context, dimens) { - return MouseRegion( - onHover: (_) { - setState(() { - _showControls = true; - }); - hideControls(); + builder: + (context, state) => Theme( + data: ThemeProvider.of(context).dark(), + child: Scaffold( + body: LayoutBuilder( + builder: (context, dimens) { + return MouseRegion( + onHover: (_) { + setState(() { + _showControls = true; + }); + hideControls(); + }, + child: buildPlayer(context, state, dimens), + ); }, - child: buildPlayer(context, state, dimens), - ); - }, + ), + ), ), - ), - ), ); } Widget buildPlayer( - BuildContext context, PlaybackState state, BoxConstraints dimens) { + BuildContext context, + PlaybackState state, + BoxConstraints dimens, + ) { final bloc = BlocProvider.of(context); final current = state.songWithProgress; final song = current?.song; @@ -519,26 +514,25 @@ class _FullScreenPlayerState extends State<_FullScreenPlayer> { fit: StackFit.expand, children: [ Positioned.fill( - child: current == null - ? const Center(child: Text('No song selected')) - : Container( - color: context.colors.shadow, - child: Opacity( - opacity: 0.3, - child: Image.asset( - song!.image.image, - fit: BoxFit.cover, + child: + current == null + ? const Center(child: Text('No song selected')) + : Container( + color: context.colors.shadow, + child: Opacity( + opacity: 0.3, + child: Image.asset(song!.image.image, fit: BoxFit.cover), ), ), - ), ), Positioned( top: 20, right: 20, child: IconButton( - color: song != null - ? context.colors.onSurface - : context.colors.onSurface, + color: + song != null + ? context.colors.onSurface + : context.colors.onSurface, icon: const Icon(Icons.fullscreen_exit), onPressed: widget.onClose, ), @@ -569,8 +563,9 @@ class _FullScreenPlayerState extends State<_FullScreenPlayer> { Text( song.artist.name, style: context.labelSmall!.copyWith( - fontSize: 20, - color: context.colors.onSurface.withAlpha(204)), + fontSize: 20, + color: context.colors.onSurface.withAlpha(204), + ), overflow: TextOverflow.clip, ), ], @@ -582,10 +577,7 @@ class _FullScreenPlayerState extends State<_FullScreenPlayer> { right: 20, left: 20, bottom: dimens.biggest.height * 0.2, - child: _ProgressBar( - progress: current?.progress, - song: song, - ), + child: _ProgressBar(progress: current?.progress, song: song), ), Positioned( right: 20, @@ -598,8 +590,8 @@ class _FullScreenPlayerState extends State<_FullScreenPlayer> { scale: 1.5, child: _PlaybackControls( isPlaying: state.isPlaying, - togglePlayPause: () => - bloc.add(const PlaybackEvent.togglePlayPause()), + togglePlayPause: + () => bloc.add(const PlaybackEvent.togglePlayPause()), ), ), ), @@ -611,9 +603,7 @@ class _FullScreenPlayerState extends State<_FullScreenPlayer> { } class _MobilePlayer extends StatelessWidget { - const _MobilePlayer({ - required this.onClose, - }); + const _MobilePlayer({required this.onClose}); final VoidCallback onClose; @@ -622,46 +612,52 @@ class _MobilePlayer extends StatelessWidget { final bloc = BlocProvider.of(context); return BlocBuilder( bloc: bloc, - builder: (context, state) => Theme( - data: ThemeProvider.of(context).dark(), - child: Scaffold( - body: LayoutBuilder( - builder: (context, dimens) { - return buildPlayer(context, state, dimens); - }, + builder: + (context, state) => Theme( + data: ThemeProvider.of(context).dark(), + child: Scaffold( + body: LayoutBuilder( + builder: (context, dimens) { + return buildPlayer(context, state, dimens); + }, + ), + ), ), - ), - ), ); } Widget buildPlayer( - BuildContext context, PlaybackState state, BoxConstraints dimens) { + BuildContext context, + PlaybackState state, + BoxConstraints dimens, + ) { final bloc = BlocProvider.of(context); final current = state.songWithProgress; return Stack( children: [ Positioned.fill( - child: current == null - ? const Center(child: Text('No song selected')) - : Container( - color: context.colors.shadow, - child: Opacity( - opacity: 0.3, - child: Image.asset( - current.song.image.image, - fit: BoxFit.cover, + child: + current == null + ? const Center(child: Text('No song selected')) + : Container( + color: context.colors.shadow, + child: Opacity( + opacity: 0.3, + child: Image.asset( + current.song.image.image, + fit: BoxFit.cover, + ), ), ), - ), ), Positioned( top: 20, left: 20, child: IconButton( - color: current?.song != null - ? context.colors.onSurface - : context.colors.onSurface, + color: + current?.song != null + ? context.colors.onSurface + : context.colors.onSurface, icon: const RotatedBox( quarterTurns: 1, child: Icon(Icons.chevron_right), @@ -676,10 +672,7 @@ class _MobilePlayer extends StatelessWidget { left: 0, right: 0, height: dimens.biggest.height * 0.5, - child: Image.asset( - current.song.image.image, - fit: BoxFit.contain, - ), + child: Image.asset(current.song.image.image, fit: BoxFit.contain), ), Positioned( left: 0, @@ -705,8 +698,9 @@ class _MobilePlayer extends StatelessWidget { Text( current.song.artist.name, style: context.labelSmall!.copyWith( - fontSize: 12, - color: context.colors.onSurface.withAlpha(204)), + fontSize: 12, + color: context.colors.onSurface.withAlpha(204), + ), overflow: TextOverflow.clip, ), ], @@ -718,15 +712,12 @@ class _MobilePlayer extends StatelessWidget { scale: 1.5, child: _PlaybackControls( isPlaying: state.isPlaying, - togglePlayPause: () => - bloc.add(const PlaybackEvent.togglePlayPause()), + togglePlayPause: + () => bloc.add(const PlaybackEvent.togglePlayPause()), ), ), ), - _ProgressBar( - progress: current.progress, - song: current.song, - ), + _ProgressBar(progress: current.progress, song: current.song), ], ), ), diff --git a/boring_to_beautiful/step_05/lib/src/shared/views/brightness_toggle.dart b/boring_to_beautiful/step_05/lib/src/shared/views/brightness_toggle.dart index 46dde4810f..5b5332392b 100644 --- a/boring_to_beautiful/step_05/lib/src/shared/views/brightness_toggle.dart +++ b/boring_to_beautiful/step_05/lib/src/shared/views/brightness_toggle.dart @@ -13,9 +13,10 @@ class BrightnessToggle extends StatelessWidget { Widget build(BuildContext context) { final isDark = Theme.of(context).brightness == Brightness.dark; return IconButton( - icon: Theme.of(context).brightness == Brightness.light - ? const Icon(Icons.brightness_3) - : const Icon(Icons.brightness_7), + icon: + Theme.of(context).brightness == Brightness.light + ? const Icon(Icons.brightness_3) + : const Icon(Icons.brightness_7), onPressed: () { final themeProvider = ThemeProvider.of(context); final settings = themeProvider.settings.value; diff --git a/boring_to_beautiful/step_05/lib/src/shared/views/center_row.dart b/boring_to_beautiful/step_05/lib/src/shared/views/center_row.dart index 36d428e3b8..c1f3effcc2 100644 --- a/boring_to_beautiful/step_05/lib/src/shared/views/center_row.dart +++ b/boring_to_beautiful/step_05/lib/src/shared/views/center_row.dart @@ -5,23 +5,12 @@ import 'package:flutter/material.dart'; class CenterRow extends StatelessWidget { - const CenterRow({ - super.key, - required this.child, - }); + const CenterRow({super.key, required this.child}); final Widget child; @override Widget build(BuildContext context) { - return Row( - children: [ - Expanded( - child: Center( - child: child, - ), - ), - ], - ); + return Row(children: [Expanded(child: Center(child: child))]); } } diff --git a/boring_to_beautiful/step_05/lib/src/shared/views/clickable.dart b/boring_to_beautiful/step_05/lib/src/shared/views/clickable.dart index cd7ef46268..f192f0b135 100644 --- a/boring_to_beautiful/step_05/lib/src/shared/views/clickable.dart +++ b/boring_to_beautiful/step_05/lib/src/shared/views/clickable.dart @@ -14,10 +14,7 @@ class Clickable extends StatelessWidget { Widget build(BuildContext context) { return MouseRegion( cursor: SystemMouseCursors.click, - child: GestureDetector( - onTap: onTap, - child: child, - ), + child: GestureDetector(onTap: onTap, child: child), ); } } diff --git a/boring_to_beautiful/step_05/lib/src/shared/views/events.dart b/boring_to_beautiful/step_05/lib/src/shared/views/events.dart index ed38465460..ab9140e56d 100644 --- a/boring_to_beautiful/step_05/lib/src/shared/views/events.dart +++ b/boring_to_beautiful/step_05/lib/src/shared/views/events.dart @@ -24,43 +24,18 @@ class Events extends StatelessWidget { child: DataTable( horizontalMargin: 5.0, columns: const [ - DataColumn( - label: Text( - 'Date', - ), - numeric: true, - ), - DataColumn( - label: Text( - 'Event', - ), - ), - DataColumn( - label: Text( - 'Location', - ), - ), - DataColumn( - label: Text( - 'More info', - ), - ), + DataColumn(label: Text('Date'), numeric: true), + DataColumn(label: Text('Event')), + DataColumn(label: Text('Location')), + DataColumn(label: Text('More info')), ], rows: [ for (final event in artist.events) DataRow( cells: [ - DataCell( - Text(event.date), - ), - DataCell( - Row(children: [ - Expanded(child: Text(event.title)), - ]), - ), - DataCell( - Text(event.location), - ), + DataCell(Text(event.date)), + DataCell(Row(children: [Expanded(child: Text(event.title))])), + DataCell(Text(event.location)), DataCell( Clickable( child: Text( @@ -70,8 +45,9 @@ class Events extends StatelessWidget { decoration: TextDecoration.underline, ), ), - onTap: () => - launchUrl(Uri.parse('https://docs.flutter.dev')), + onTap: + () => + launchUrl(Uri.parse('https://docs.flutter.dev')), ), ), ], diff --git a/boring_to_beautiful/step_05/lib/src/shared/views/hover_toggle.dart b/boring_to_beautiful/step_05/lib/src/shared/views/hover_toggle.dart index ec98c2863c..649cfcab63 100644 --- a/boring_to_beautiful/step_05/lib/src/shared/views/hover_toggle.dart +++ b/boring_to_beautiful/step_05/lib/src/shared/views/hover_toggle.dart @@ -31,9 +31,10 @@ class _HoverToggleState extends State with MaterialStateMixin { cursor: isHovered ? SystemMouseCursors.click : MouseCursor.defer, onEnter: (_) => setMaterialState(WidgetState.hovered, true), onExit: (_) => setMaterialState(WidgetState.hovered, false), - child: widget.mode == HoverMode.replace - ? _buildReplaceableChildren() - : _buildChildrenStack(), + child: + widget.mode == HoverMode.replace + ? _buildReplaceableChildren() + : _buildChildrenStack(), ), ); } @@ -41,12 +42,7 @@ class _HoverToggleState extends State with MaterialStateMixin { Widget _buildChildrenStack() { Widget child = isHovered ? Opacity(opacity: 0.2, child: widget.child) : widget.child; - return Stack( - children: [ - child, - if (isHovered) widget.hoverChild, - ], - ); + return Stack(children: [child, if (isHovered) widget.hoverChild]); } Widget _buildReplaceableChildren() => diff --git a/boring_to_beautiful/step_05/lib/src/shared/views/hoverable_song_play_button.dart b/boring_to_beautiful/step_05/lib/src/shared/views/hoverable_song_play_button.dart index 512f3d1d3c..dd588e3dbe 100644 --- a/boring_to_beautiful/step_05/lib/src/shared/views/hoverable_song_play_button.dart +++ b/boring_to_beautiful/step_05/lib/src/shared/views/hoverable_song_play_button.dart @@ -29,9 +29,10 @@ class HoverableSongPlayButton extends StatelessWidget { hoverChild: Center( child: GestureDetector( child: const Icon(Icons.play_arrow), - onTap: () => BlocProvider.of(context).add( - PlaybackEvent.changeSong(song), - ), + onTap: + () => BlocProvider.of( + context, + ).add(PlaybackEvent.changeSong(song)), ), ), mode: hoverMode, diff --git a/boring_to_beautiful/step_05/lib/src/shared/views/image_card.dart b/boring_to_beautiful/step_05/lib/src/shared/views/image_card.dart index 0af9f75f33..6e7f6cd42d 100644 --- a/boring_to_beautiful/step_05/lib/src/shared/views/image_card.dart +++ b/boring_to_beautiful/step_05/lib/src/shared/views/image_card.dart @@ -7,13 +7,14 @@ import '../../shared/extensions.dart'; import 'outlined_card.dart'; class ImageCard extends StatelessWidget { - const ImageCard( - {super.key, - required this.title, - required this.details, - required this.image, - this.subtitle, - this.clickable = false}); + const ImageCard({ + super.key, + required this.title, + required this.details, + required this.image, + this.subtitle, + this.clickable = false, + }); final String title; final String? subtitle; @@ -28,54 +29,51 @@ class ImageCard extends StatelessWidget { clickable: clickable, child: Padding( padding: const EdgeInsets.all(8.0), - child: LayoutBuilder(builder: (context, constraints) { - return Row( - children: [ - if (constraints.maxWidth > 600) - SizedBox( - width: 170, - height: 170, - child: Image.asset( - image, - fit: BoxFit.cover, + child: LayoutBuilder( + builder: (context, constraints) { + return Row( + children: [ + if (constraints.maxWidth > 600) + SizedBox( + width: 170, + height: 170, + child: Image.asset(image, fit: BoxFit.cover), ), - ), - Expanded( - child: Padding( - padding: padding, - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Padding( - padding: const EdgeInsets.only(bottom: 5), - child: Text( - title, - style: context.titleLarge! - .copyWith(fontWeight: FontWeight.bold), - ), - ), - if (subtitle != null) + Expanded( + child: Padding( + padding: padding, + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ Padding( - padding: const EdgeInsets.only(bottom: 10), + padding: const EdgeInsets.only(bottom: 5), child: Text( - subtitle!, - style: context.labelMedium, + title, + style: context.titleLarge!.copyWith( + fontWeight: FontWeight.bold, + ), ), ), - Text( - details, - style: context.labelMedium?.copyWith( - fontSize: 16, - height: 1.25, + if (subtitle != null) + Padding( + padding: const EdgeInsets.only(bottom: 10), + child: Text(subtitle!, style: context.labelMedium), + ), + Text( + details, + style: context.labelMedium?.copyWith( + fontSize: 16, + height: 1.25, + ), ), - ), - ], + ], + ), ), ), - ), - ], - ); - }), + ], + ); + }, + ), ), ); } diff --git a/boring_to_beautiful/step_05/lib/src/shared/views/image_tile.dart b/boring_to_beautiful/step_05/lib/src/shared/views/image_tile.dart index 4f2bbebb96..dd99152af5 100644 --- a/boring_to_beautiful/step_05/lib/src/shared/views/image_tile.dart +++ b/boring_to_beautiful/step_05/lib/src/shared/views/image_tile.dart @@ -21,19 +21,17 @@ class ImageTile extends StatelessWidget { @override Widget build(BuildContext context) { return OutlinedCard( - child: Column(crossAxisAlignment: CrossAxisAlignment.start, children: [ - Row( - children: [ - Expanded( - child: Image.asset(image, fit: BoxFit.cover), - ), - ], - ), - Column( - mainAxisAlignment: MainAxisAlignment.center, - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - Padding( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + children: [Expanded(child: Image.asset(image, fit: BoxFit.cover))], + ), + Column( + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Padding( padding: const EdgeInsets.fromLTRB(10, 5, 10, 5), child: Text( title, @@ -43,20 +41,25 @@ class ImageTile extends StatelessWidget { ), overflow: TextOverflow.ellipsis, maxLines: 1, - )), - Padding( - padding: const EdgeInsets.symmetric(vertical: 5, horizontal: 10), - child: Text( - subtitle, - overflow: TextOverflow.ellipsis, - style: context.labelSmall, - maxLines: 2, - textAlign: TextAlign.center, + ), ), - ), - ], - ) - ]), + Padding( + padding: const EdgeInsets.symmetric( + vertical: 5, + horizontal: 10, + ), + child: Text( + subtitle, + overflow: TextOverflow.ellipsis, + style: context.labelSmall, + maxLines: 2, + textAlign: TextAlign.center, + ), + ), + ], + ), + ], + ), ); } } diff --git a/boring_to_beautiful/step_05/lib/src/shared/views/outlined_card.dart b/boring_to_beautiful/step_05/lib/src/shared/views/outlined_card.dart index 0d886e2c54..ff49275dc9 100644 --- a/boring_to_beautiful/step_05/lib/src/shared/views/outlined_card.dart +++ b/boring_to_beautiful/step_05/lib/src/shared/views/outlined_card.dart @@ -5,11 +5,7 @@ import 'package:flutter/material.dart'; class OutlinedCard extends StatefulWidget { - const OutlinedCard({ - super.key, - required this.child, - this.clickable = true, - }); + const OutlinedCard({super.key, required this.child, this.clickable = true}); final Widget child; final bool clickable; @@ -22,9 +18,10 @@ class _OutlinedCardState extends State { @override Widget build(BuildContext context) { return MouseRegion( - cursor: widget.clickable - ? SystemMouseCursors.click - : SystemMouseCursors.basic, + cursor: + widget.clickable + ? SystemMouseCursors.click + : SystemMouseCursors.basic, child: Container( decoration: BoxDecoration( border: Border.all( diff --git a/boring_to_beautiful/step_05/lib/src/shared/views/play_pause_listener.dart b/boring_to_beautiful/step_05/lib/src/shared/views/play_pause_listener.dart index 52fad00863..6b4fc66709 100644 --- a/boring_to_beautiful/step_05/lib/src/shared/views/play_pause_listener.dart +++ b/boring_to_beautiful/step_05/lib/src/shared/views/play_pause_listener.dart @@ -16,10 +16,7 @@ import '../playback/bloc/bloc.dart'; /// shortcuts. By sitting below that machinery, this installs a global Spacebar /// listener which toggles Playback, as is customary in music-playing apps. class PlayPauseListener extends StatelessWidget { - const PlayPauseListener({ - super.key, - required this.child, - }); + const PlayPauseListener({super.key, required this.child}); final Widget child; @@ -28,9 +25,7 @@ class PlayPauseListener extends StatelessWidget { // Immediately catch any [_PlayPauseIntent] events released by the inner // [Shortcuts] widget. return Actions( - actions: >{ - _PlayPauseIntent: _PlayPauseAction(), - }, + actions: >{_PlayPauseIntent: _PlayPauseAction()}, child: Shortcuts( // Register a shortcut for Spacebar presses that release a // [_PlayPauseIntent] up the tree to the nearest [Actions] widget. @@ -38,9 +33,9 @@ class PlayPauseListener extends StatelessWidget { const SingleActivator(LogicalKeyboardKey.space): _PlayPauseIntent( // Create a closure which sends a [TogglePlayPause] event to the // [PlaybackBloc]. - () => BlocProvider.of(context).add( - const PlaybackEvent.togglePlayPause(), - ), + () => BlocProvider.of( + context, + ).add(const PlaybackEvent.togglePlayPause()), ), }, child: child, diff --git a/boring_to_beautiful/step_05/lib/src/shared/views/root_layout.dart b/boring_to_beautiful/step_05/lib/src/shared/views/root_layout.dart index 878b57d729..ff6270248c 100644 --- a/boring_to_beautiful/step_05/lib/src/shared/views/root_layout.dart +++ b/boring_to_beautiful/step_05/lib/src/shared/views/root_layout.dart @@ -29,36 +29,37 @@ class RootLayout extends StatelessWidget { final bloc = BlocProvider.of(context); return BlocBuilder( bloc: bloc, - builder: (context, state) => LayoutBuilder(builder: (context, dimens) { - void onSelected(int index) { - final destination = router.destinations[index]; - go.GoRouter.of(context).go(destination.route); - } + builder: + (context, state) => LayoutBuilder( + builder: (context, dimens) { + void onSelected(int index) { + final destination = router.destinations[index]; + go.GoRouter.of(context).go(destination.route); + } - final current = state.songWithProgress; - return AdaptiveNavigation( - key: _navigationRailKey, - destinations: router.destinations - .map((e) => NavigationDestination( - icon: e.icon, - label: e.label, - )) - .toList(), - selectedIndex: currentIndex, - onDestinationSelected: onSelected, - child: Column( - children: [ - Expanded( - child: _Switcher( - key: _switcherKey, - child: child, + final current = state.songWithProgress; + return AdaptiveNavigation( + key: _navigationRailKey, + destinations: + router.destinations + .map( + (e) => NavigationDestination( + icon: e.icon, + label: e.label, + ), + ) + .toList(), + selectedIndex: currentIndex, + onDestinationSelected: onSelected, + child: Column( + children: [ + Expanded(child: _Switcher(key: _switcherKey, child: child)), + if (current != null) const BottomBar(), + ], ), - ), - if (current != null) const BottomBar(), - ], + ); + }, ), - ); - }), ); } } @@ -66,21 +67,18 @@ class RootLayout extends StatelessWidget { class _Switcher extends StatelessWidget { final Widget child; - const _Switcher({ - required this.child, - super.key, - }); + const _Switcher({required this.child, super.key}); @override Widget build(BuildContext context) { return UniversalPlatform.isDesktop ? child : AnimatedSwitcher( - key: key, - duration: const Duration(milliseconds: 200), - switchInCurve: Curves.easeInOut, - switchOutCurve: Curves.easeInOut, - child: child, - ); + key: key, + duration: const Duration(milliseconds: 200), + switchInCurve: Curves.easeInOut, + switchOutCurve: Curves.easeInOut, + child: child, + ); } } diff --git a/boring_to_beautiful/step_05/lib/src/shared/views/sidebar.dart b/boring_to_beautiful/step_05/lib/src/shared/views/sidebar.dart index 78c19b4d22..8815223b22 100644 --- a/boring_to_beautiful/step_05/lib/src/shared/views/sidebar.dart +++ b/boring_to_beautiful/step_05/lib/src/shared/views/sidebar.dart @@ -26,10 +26,7 @@ class SideBar extends StatelessWidget { title: const Text('Home'), onTap: () => GoRouter.of(context).go('/'), ), - const ListTile( - leading: Icon(Icons.search), - title: Text('Search'), - ), + const ListTile(leading: Icon(Icons.search), title: Text('Search')), ListTile( leading: const Icon(Icons.person), title: const Text('Artists'), @@ -64,10 +61,7 @@ class PlaylistNav extends StatelessWidget { children: [ Padding( padding: const EdgeInsets.only(left: 16, top: 16), - child: Text( - 'Playlists', - style: context.titleMedium, - ), + child: Text('Playlists', style: context.titleMedium), ), Expanded( child: ListView( @@ -114,10 +108,9 @@ class _PlaylistNavItemState extends State<_PlaylistNavItem> { @override void initState() { super.initState(); - _focusNode = FocusNode(debugLabel: widget.title) - ..addListener(() { - setState(() => _isSelected = _focusNode.hasPrimaryFocus); - }); + _focusNode = FocusNode(debugLabel: widget.title)..addListener(() { + setState(() => _isSelected = _focusNode.hasPrimaryFocus); + }); } @override diff --git a/boring_to_beautiful/step_05/pubspec.yaml b/boring_to_beautiful/step_05/pubspec.yaml index 0bc88d24c3..ad540a91c3 100644 --- a/boring_to_beautiful/step_05/pubspec.yaml +++ b/boring_to_beautiful/step_05/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: "none" version: 1.0.0 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 dependencies: flutter: diff --git a/boring_to_beautiful/step_06/lib/src/features/artists/view/artist_bio.dart b/boring_to_beautiful/step_06/lib/src/features/artists/view/artist_bio.dart index 227b8e91f9..8b614421db 100644 --- a/boring_to_beautiful/step_06/lib/src/features/artists/view/artist_bio.dart +++ b/boring_to_beautiful/step_06/lib/src/features/artists/view/artist_bio.dart @@ -18,9 +18,7 @@ class ArtistBio extends StatelessWidget { artist.bio, style: context.bodyLarge!.copyWith( fontSize: 16, - color: context.colors.onSurface.withAlpha( - 222, - ), + color: context.colors.onSurface.withAlpha(222), ), ); } diff --git a/boring_to_beautiful/step_06/lib/src/features/artists/view/artist_card.dart b/boring_to_beautiful/step_06/lib/src/features/artists/view/artist_card.dart index a63967f51d..1a56376a87 100644 --- a/boring_to_beautiful/step_06/lib/src/features/artists/view/artist_card.dart +++ b/boring_to_beautiful/step_06/lib/src/features/artists/view/artist_card.dart @@ -11,10 +11,7 @@ import '../../../shared/views/outlined_card.dart'; import '../../../shared/views/views.dart'; class ArtistCard extends StatelessWidget { - const ArtistCard({ - super.key, - required this.artist, - }); + const ArtistCard({super.key, required this.artist}); final Artist artist; @@ -24,65 +21,66 @@ class ArtistCard extends StatelessWidget { return OutlinedCard( child: LayoutBuilder( - builder: (context, dimens) => Row( - children: [ - SizedBox( - width: dimens.maxWidth * 0.4, - child: Image.asset( - artist.image.image, - fit: BoxFit.cover, - ), - ), - Expanded( - child: Padding( - padding: const EdgeInsets.only(left: 16), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Padding( - padding: const EdgeInsets.fromLTRB(0, 0, 15, 0), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text( - artist.name, - style: context.titleMedium, - overflow: TextOverflow.ellipsis, - maxLines: 1, - ), - const SizedBox(height: 10), - Text( - artist.bio, - overflow: TextOverflow.ellipsis, - style: context.labelSmall, - maxLines: 3, - ), - ]), - ), - if (dimens.maxHeight > 100) - Row( - children: [ - HoverableSongPlayButton( - size: const Size(50, 50), - song: nowPlaying, - child: Icon(Icons.play_circle, - color: context.colors.tertiary), + builder: + (context, dimens) => Row( + children: [ + SizedBox( + width: dimens.maxWidth * 0.4, + child: Image.asset(artist.image.image, fit: BoxFit.cover), + ), + Expanded( + child: Padding( + padding: const EdgeInsets.only(left: 16), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Padding( + padding: const EdgeInsets.fromLTRB(0, 0, 15, 0), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + artist.name, + style: context.titleMedium, + overflow: TextOverflow.ellipsis, + maxLines: 1, + ), + const SizedBox(height: 10), + Text( + artist.bio, + overflow: TextOverflow.ellipsis, + style: context.labelSmall, + maxLines: 3, + ), + ], ), - Text( - nowPlaying.title, - maxLines: 1, - overflow: TextOverflow.clip, - style: context.labelMedium, + ), + if (dimens.maxHeight > 100) + Row( + children: [ + HoverableSongPlayButton( + size: const Size(50, 50), + song: nowPlaying, + child: Icon( + Icons.play_circle, + color: context.colors.tertiary, + ), + ), + Text( + nowPlaying.title, + maxLines: 1, + overflow: TextOverflow.clip, + style: context.labelMedium, + ), + ], ), - ], - ), - ], + ], + ), + ), ), - ), + ], ), - ], - ), ), ); } diff --git a/boring_to_beautiful/step_06/lib/src/features/artists/view/artist_events.dart b/boring_to_beautiful/step_06/lib/src/features/artists/view/artist_events.dart index 8b064759c6..58b61b37df 100644 --- a/boring_to_beautiful/step_06/lib/src/features/artists/view/artist_events.dart +++ b/boring_to_beautiful/step_06/lib/src/features/artists/view/artist_events.dart @@ -70,53 +70,32 @@ class ArtistEvents extends StatelessWidget { ); }, columns: const [ - DataColumn( - label: Text( - 'Date', - ), - numeric: true, - ), - DataColumn( - label: Text( - 'Event', - ), - ), - DataColumn( - label: Text( - 'Location', - ), - ), - DataColumn( - label: Text( - 'More info', - ), - ), + DataColumn(label: Text('Date'), numeric: true), + DataColumn(label: Text('Event')), + DataColumn(label: Text('Location')), + DataColumn(label: Text('More info')), ], - rowBuilder: (item, index) => DataRow.byIndex(index: index, cells: [ - DataCell( - Text(item.date), - ), - DataCell( - Row(children: [ - Expanded(child: Text(item.title)), - ]), - ), - DataCell( - Text(item.location), - ), - DataCell( - Clickable( - child: Text( - item.link, - style: TextStyle( - color: linkColor.value(theme), - decoration: TextDecoration.underline, + rowBuilder: + (item, index) => DataRow.byIndex( + index: index, + cells: [ + DataCell(Text(item.date)), + DataCell(Row(children: [Expanded(child: Text(item.title))])), + DataCell(Text(item.location)), + DataCell( + Clickable( + child: Text( + item.link, + style: TextStyle( + color: linkColor.value(theme), + decoration: TextDecoration.underline, + ), + ), + onTap: () => launchUrl(Uri.parse('https://docs.flutter.dev')), + ), ), - ), - onTap: () => launchUrl(Uri.parse('https://docs.flutter.dev')), + ], ), - ), - ]), ); } } diff --git a/boring_to_beautiful/step_06/lib/src/features/artists/view/artist_ranked_songs.dart b/boring_to_beautiful/step_06/lib/src/features/artists/view/artist_ranked_songs.dart index e484ecb3d7..3d1f4e2cf1 100644 --- a/boring_to_beautiful/step_06/lib/src/features/artists/view/artist_ranked_songs.dart +++ b/boring_to_beautiful/step_06/lib/src/features/artists/view/artist_ranked_songs.dart @@ -27,52 +27,42 @@ class ArtistRankedSongs extends StatelessWidget { title: Text(song.title), subtitle: Text(song.length.toHumanizedString()), trailing: Text(song.ranking.toString()), - onTap: () => BlocProvider.of(context).add( - PlaybackEvent.changeSong(song), - ), + onTap: + () => BlocProvider.of( + context, + ).add(PlaybackEvent.changeSong(song)), ); }, columns: const [ - DataColumn( - label: Text( - 'Ranking', - ), - numeric: true, - ), - DataColumn( - label: Text( - 'Title', - ), - ), - DataColumn( - label: Text( - 'Length', - ), - ), + DataColumn(label: Text('Ranking'), numeric: true), + DataColumn(label: Text('Title')), + DataColumn(label: Text('Length')), ], - rowBuilder: (song, index) => DataRow.byIndex(index: index, cells: [ - DataCell( - HoverableSongPlayButton( - song: song, - child: Center( - child: Text(song.ranking.toString()), - ), + rowBuilder: + (song, index) => DataRow.byIndex( + index: index, + cells: [ + DataCell( + HoverableSongPlayButton( + song: song, + child: Center(child: Text(song.ranking.toString())), + ), + ), + DataCell( + Row( + children: [ + Padding( + padding: const EdgeInsets.all(2), + child: ClippedImage(song.image.image), + ), + const SizedBox(width: 5.0), + Expanded(child: Text(song.title)), + ], + ), + ), + DataCell(Text(song.length.toHumanizedString())), + ], ), - ), - DataCell( - Row(children: [ - Padding( - padding: const EdgeInsets.all(2), - child: ClippedImage(song.image.image), - ), - const SizedBox(width: 5.0), - Expanded(child: Text(song.title)), - ]), - ), - DataCell( - Text(song.length.toHumanizedString()), - ), - ]), ); } } diff --git a/boring_to_beautiful/step_06/lib/src/features/artists/view/artist_updates.dart b/boring_to_beautiful/step_06/lib/src/features/artists/view/artist_updates.dart index e5b8bb5fe9..a0fabf7330 100644 --- a/boring_to_beautiful/step_06/lib/src/features/artists/view/artist_updates.dart +++ b/boring_to_beautiful/step_06/lib/src/features/artists/view/artist_updates.dart @@ -30,7 +30,7 @@ class ArtistUpdates extends StatelessWidget { child: Text(update), ), ), - ) + ), ], ); } diff --git a/boring_to_beautiful/step_06/lib/src/features/artists/view/artists_screen.dart b/boring_to_beautiful/step_06/lib/src/features/artists/view/artists_screen.dart index 8afe759807..225d74847b 100644 --- a/boring_to_beautiful/step_06/lib/src/features/artists/view/artists_screen.dart +++ b/boring_to_beautiful/step_06/lib/src/features/artists/view/artists_screen.dart @@ -17,33 +17,33 @@ class ArtistsScreen extends StatelessWidget { Widget build(BuildContext context) { final artistsProvider = ArtistsProvider(); final artists = artistsProvider.artists; - return LayoutBuilder(builder: (context, constraints) { - return Scaffold( - primary: false, - appBar: AppBar( - title: const Text('ARTISTS'), - toolbarHeight: kToolbarHeight * 2, - ), - body: GridView.builder( - padding: const EdgeInsets.all(15), - gridDelegate: SliverGridDelegateWithFixedCrossAxisCount( - crossAxisCount: max(1, (constraints.maxWidth ~/ 400).toInt()), - childAspectRatio: 2.5, - mainAxisSpacing: 10, - crossAxisSpacing: 10, + return LayoutBuilder( + builder: (context, constraints) { + return Scaffold( + primary: false, + appBar: AppBar( + title: const Text('ARTISTS'), + toolbarHeight: kToolbarHeight * 2, ), - itemCount: artists.length, - itemBuilder: (context, index) { - final artist = artists[index]; - return GestureDetector( - child: ArtistCard( - artist: artist, - ), - onTap: () => GoRouter.of(context).go('/artists/${artist.id}'), - ); - }, - ), - ); - }); + body: GridView.builder( + padding: const EdgeInsets.all(15), + gridDelegate: SliverGridDelegateWithFixedCrossAxisCount( + crossAxisCount: max(1, (constraints.maxWidth ~/ 400).toInt()), + childAspectRatio: 2.5, + mainAxisSpacing: 10, + crossAxisSpacing: 10, + ), + itemCount: artists.length, + itemBuilder: (context, index) { + final artist = artists[index]; + return GestureDetector( + child: ArtistCard(artist: artist), + onTap: () => GoRouter.of(context).go('/artists/${artist.id}'), + ); + }, + ), + ); + }, + ); } } diff --git a/boring_to_beautiful/step_06/lib/src/features/home/view/home_artists.dart b/boring_to_beautiful/step_06/lib/src/features/home/view/home_artists.dart index beb2c0ece4..b5a3a33ecd 100644 --- a/boring_to_beautiful/step_06/lib/src/features/home/view/home_artists.dart +++ b/boring_to_beautiful/step_06/lib/src/features/home/view/home_artists.dart @@ -22,27 +22,25 @@ class HomeArtists extends StatelessWidget { Widget build(BuildContext context) { return Padding( padding: const EdgeInsets.all(15), - child: constraints.isMobile - ? Column( - children: [ - for (final artist in artists) buildTile(context, artist), - ], - ) - : Row(children: [ - for (final artist in artists) - Flexible( - flex: 1, - child: buildTile(context, artist), - ), - ]), + child: + constraints.isMobile + ? Column( + children: [ + for (final artist in artists) buildTile(context, artist), + ], + ) + : Row( + children: [ + for (final artist in artists) + Flexible(flex: 1, child: buildTile(context, artist)), + ], + ), ); } Widget buildTile(BuildContext context, Artist artist) { return ListTile( - leading: CircleAvatar( - backgroundImage: AssetImage(artist.image.image), - ), + leading: CircleAvatar(backgroundImage: AssetImage(artist.image.image)), title: Text( artist.updates.first, maxLines: 2, diff --git a/boring_to_beautiful/step_06/lib/src/features/home/view/home_recent.dart b/boring_to_beautiful/step_06/lib/src/features/home/view/home_recent.dart index c77500a663..8ba86d117d 100644 --- a/boring_to_beautiful/step_06/lib/src/features/home/view/home_recent.dart +++ b/boring_to_beautiful/step_06/lib/src/features/home/view/home_recent.dart @@ -12,8 +12,11 @@ import '../../../shared/views/image_clipper.dart'; import '../../../shared/views/outlined_card.dart'; class HomeRecent extends StatelessWidget { - const HomeRecent( - {super.key, required this.playlists, this.axis = Axis.horizontal}); + const HomeRecent({ + super.key, + required this.playlists, + this.axis = Axis.horizontal, + }); final List playlists; final Axis axis; @@ -43,8 +46,10 @@ class HomeRecent extends StatelessWidget { Row( children: [ Expanded( - child: Image.asset(playlist.cover.image, - fit: BoxFit.cover), + child: Image.asset( + playlist.cover.image, + fit: BoxFit.cover, + ), ), ], ), @@ -79,10 +84,7 @@ class HomeRecent extends StatelessWidget { crossAxisAlignment: CrossAxisAlignment.center, mainAxisSize: MainAxisSize.max, children: [ - ClippedImage( - playlist.cover.image, - height: 200, - ), + ClippedImage(playlist.cover.image, height: 200), Expanded( child: Center( child: Padding( @@ -104,23 +106,24 @@ class HomeRecent extends StatelessWidget { return Column( children: [ Padding( - padding: const EdgeInsets.fromLTRB(10, 5, 10, 5), - child: Text( - playlist.title, - style: context.titleSmall!.copyWith( - fontWeight: FontWeight.bold, - ), - overflow: TextOverflow.ellipsis, - maxLines: 1, - textAlign: TextAlign.center, - )), + padding: const EdgeInsets.fromLTRB(10, 5, 10, 5), + child: Text( + playlist.title, + style: context.titleSmall!.copyWith(fontWeight: FontWeight.bold), + overflow: TextOverflow.ellipsis, + maxLines: 1, + textAlign: TextAlign.center, + ), + ), Padding( padding: const EdgeInsets.symmetric(vertical: 5, horizontal: 10), - child: Text(playlist.description, - overflow: TextOverflow.ellipsis, - style: context.labelSmall, - maxLines: 2, - textAlign: TextAlign.center), + child: Text( + playlist.description, + overflow: TextOverflow.ellipsis, + style: context.labelSmall, + maxLines: 2, + textAlign: TextAlign.center, + ), ), ], ); diff --git a/boring_to_beautiful/step_06/lib/src/features/home/view/home_screen.dart b/boring_to_beautiful/step_06/lib/src/features/home/view/home_screen.dart index a763bbd45a..c142c1e4c2 100644 --- a/boring_to_beautiful/step_06/lib/src/features/home/view/home_screen.dart +++ b/boring_to_beautiful/step_06/lib/src/features/home/view/home_screen.dart @@ -49,33 +49,31 @@ class _HomeScreenState extends State { ), ), body: LayoutBuilder( - builder: (context, constraints) => TabBarView( - children: [ - SingleChildScrollView( - child: Column( - children: [ - const HomeHighlight(), - HomeArtists( - artists: artists, - constraints: constraints, + builder: + (context, constraints) => TabBarView( + children: [ + SingleChildScrollView( + child: Column( + children: [ + const HomeHighlight(), + HomeArtists( + artists: artists, + constraints: constraints, + ), + ], ), - ], - ), - ), - HomeRecent( - playlists: playlists, - axis: Axis.vertical, - ), - PlaylistSongs( - playlist: topSongs, - constraints: constraints, - ), - PlaylistSongs( - playlist: newReleases, - constraints: constraints, + ), + HomeRecent(playlists: playlists, axis: Axis.vertical), + PlaylistSongs( + playlist: topSongs, + constraints: constraints, + ), + PlaylistSongs( + playlist: newReleases, + constraints: constraints, + ), + ], ), - ], - ), ), ), ); @@ -109,10 +107,11 @@ class _HomeScreenState extends State { children: [ const HomeHighlight(), LayoutBuilder( - builder: (context, constraints) => HomeArtists( - artists: artists, - constraints: constraints, - ), + builder: + (context, constraints) => HomeArtists( + artists: artists, + constraints: constraints, + ), ), ], ), @@ -132,9 +131,7 @@ class _HomeScreenState extends State { style: context.headlineSmall, ), ), - HomeRecent( - playlists: playlists, - ), + HomeRecent(playlists: playlists), ], ), ), @@ -152,19 +149,21 @@ class _HomeScreenState extends State { crossAxisAlignment: CrossAxisAlignment.start, children: [ Padding( - padding: - const EdgeInsets.only(left: 8, bottom: 8), + padding: const EdgeInsets.only( + left: 8, + bottom: 8, + ), child: Text( 'Top Songs Today', style: context.titleLarge, ), ), LayoutBuilder( - builder: (context, constraints) => - PlaylistSongs( - playlist: topSongs, - constraints: constraints, - ), + builder: + (context, constraints) => PlaylistSongs( + playlist: topSongs, + constraints: constraints, + ), ), ], ), @@ -177,19 +176,21 @@ class _HomeScreenState extends State { crossAxisAlignment: CrossAxisAlignment.start, children: [ Padding( - padding: - const EdgeInsets.only(left: 8, bottom: 8), + padding: const EdgeInsets.only( + left: 8, + bottom: 8, + ), child: Text( 'New Releases', style: context.titleLarge, ), ), LayoutBuilder( - builder: (context, constraints) => - PlaylistSongs( - playlist: newReleases, - constraints: constraints, - ), + builder: + (context, constraints) => PlaylistSongs( + playlist: newReleases, + constraints: constraints, + ), ), ], ), diff --git a/boring_to_beautiful/step_06/lib/src/features/playlists/view/playlist_home_screen.dart b/boring_to_beautiful/step_06/lib/src/features/playlists/view/playlist_home_screen.dart index a80d767930..978608ccad 100644 --- a/boring_to_beautiful/step_06/lib/src/features/playlists/view/playlist_home_screen.dart +++ b/boring_to_beautiful/step_06/lib/src/features/playlists/view/playlist_home_screen.dart @@ -44,8 +44,10 @@ class PlaylistHomeScreen extends StatelessWidget { title: playlist.title, subtitle: playlist.description, ), - onTap: () => - GoRouter.of(context).go('/playlists/${playlist.id}'), + onTap: + () => GoRouter.of( + context, + ).go('/playlists/${playlist.id}'), ); }, ), diff --git a/boring_to_beautiful/step_06/lib/src/features/playlists/view/playlist_screen.dart b/boring_to_beautiful/step_06/lib/src/features/playlists/view/playlist_screen.dart index 5dc2f0744f..c41f500a92 100644 --- a/boring_to_beautiful/step_06/lib/src/features/playlists/view/playlist_screen.dart +++ b/boring_to_beautiful/step_06/lib/src/features/playlists/view/playlist_screen.dart @@ -20,114 +20,116 @@ class PlaylistScreen extends StatelessWidget { @override Widget build(BuildContext context) { - return LayoutBuilder(builder: (context, constraints) { - final colors = Theme.of(context).colorScheme; - final double headerHeight = constraints.isMobile - ? max(constraints.biggest.height * 0.5, 450) - : max(constraints.biggest.height * 0.25, 250); - if (constraints.isMobile) { - return Scaffold( - appBar: AppBar( - leading: BackButton( - onPressed: () => GoRouter.of(context).go('/playlists'), - ), - title: Text(playlist.title), - actions: [ - IconButton( - icon: const Icon(Icons.play_circle_fill), - onPressed: () {}, - ), - IconButton( - onPressed: () {}, - icon: const Icon(Icons.shuffle), - ), - ], - ), - body: ArticleContent( - child: PlaylistSongs( - playlist: playlist, - constraints: constraints, - ), - ), - ); - } - return Scaffold( - body: CustomScrollView( - slivers: [ - SliverAppBar( + return LayoutBuilder( + builder: (context, constraints) { + final colors = Theme.of(context).colorScheme; + final double headerHeight = + constraints.isMobile + ? max(constraints.biggest.height * 0.5, 450) + : max(constraints.biggest.height * 0.25, 250); + if (constraints.isMobile) { + return Scaffold( + appBar: AppBar( leading: BackButton( onPressed: () => GoRouter.of(context).go('/playlists'), ), - expandedHeight: headerHeight, - pinned: false, - flexibleSpace: FlexibleSpaceBar( - background: AdaptiveImageCard( - axis: constraints.isMobile ? Axis.vertical : Axis.horizontal, - constraints: - constraints.copyWith(maxHeight: headerHeight).normalize(), - image: playlist.cover.image, - child: Column( - mainAxisAlignment: MainAxisAlignment.end, - crossAxisAlignment: CrossAxisAlignment.start, - mainAxisSize: MainAxisSize.min, - children: [ - Text( - 'PLAYLIST', - style: context.titleSmall! - .copyWith(color: colors.onSurface), - ), - Text( - playlist.title, - style: context.displaySmall! - .copyWith(color: colors.onSurface), - ), - Text( - playlist.description, - style: context.bodyLarge!.copyWith( - color: colors.onSurface.withAlpha(204), + title: Text(playlist.title), + actions: [ + IconButton( + icon: const Icon(Icons.play_circle_fill), + onPressed: () {}, + ), + IconButton(onPressed: () {}, icon: const Icon(Icons.shuffle)), + ], + ), + body: ArticleContent( + child: PlaylistSongs( + playlist: playlist, + constraints: constraints, + ), + ), + ); + } + return Scaffold( + body: CustomScrollView( + slivers: [ + SliverAppBar( + leading: BackButton( + onPressed: () => GoRouter.of(context).go('/playlists'), + ), + expandedHeight: headerHeight, + pinned: false, + flexibleSpace: FlexibleSpaceBar( + background: AdaptiveImageCard( + axis: + constraints.isMobile ? Axis.vertical : Axis.horizontal, + constraints: + constraints + .copyWith(maxHeight: headerHeight) + .normalize(), + image: playlist.cover.image, + child: Column( + mainAxisAlignment: MainAxisAlignment.end, + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisSize: MainAxisSize.min, + children: [ + Text( + 'PLAYLIST', + style: context.titleSmall!.copyWith( + color: colors.onSurface, + ), ), - ), - const SizedBox(height: 8), - Row( - children: [ - IconButton( - icon: Icon( - Icons.play_circle_fill, - color: colors.tertiary, - ), - onPressed: () {}, + Text( + playlist.title, + style: context.displaySmall!.copyWith( + color: colors.onSurface, ), - TextButton.icon( - onPressed: () {}, - icon: Icon( - Icons.shuffle, - color: colors.tertiary, - ), - label: Text( - 'Shuffle', - style: context.bodySmall!.copyWith( + ), + Text( + playlist.description, + style: context.bodyLarge!.copyWith( + color: colors.onSurface.withAlpha(204), + ), + ), + const SizedBox(height: 8), + Row( + children: [ + IconButton( + icon: Icon( + Icons.play_circle_fill, color: colors.tertiary, ), + onPressed: () {}, ), - ), - ], - ), - ], + TextButton.icon( + onPressed: () {}, + icon: Icon(Icons.shuffle, color: colors.tertiary), + label: Text( + 'Shuffle', + style: context.bodySmall!.copyWith( + color: colors.tertiary, + ), + ), + ), + ], + ), + ], + ), ), ), ), - ), - SliverToBoxAdapter( - child: ArticleContent( - child: PlaylistSongs( - playlist: playlist, - constraints: constraints, + SliverToBoxAdapter( + child: ArticleContent( + child: PlaylistSongs( + playlist: playlist, + constraints: constraints, + ), ), ), - ), - ], - ), - ); - }); + ], + ), + ); + }, + ); } } diff --git a/boring_to_beautiful/step_06/lib/src/features/playlists/view/playlist_songs.dart b/boring_to_beautiful/step_06/lib/src/features/playlists/view/playlist_songs.dart index e944336540..1d5a2e9879 100644 --- a/boring_to_beautiful/step_06/lib/src/features/playlists/view/playlist_songs.dart +++ b/boring_to_beautiful/step_06/lib/src/features/playlists/view/playlist_songs.dart @@ -12,8 +12,11 @@ import '../../../shared/views/image_clipper.dart'; import '../../../shared/views/views.dart'; class PlaylistSongs extends StatelessWidget { - const PlaylistSongs( - {super.key, required this.playlist, required this.constraints}); + const PlaylistSongs({ + super.key, + required this.playlist, + required this.constraints, + }); final Playlist playlist; final BoxConstraints constraints; @@ -25,14 +28,9 @@ class PlaylistSongs extends StatelessWidget { breakpoint: 450, columns: const [ DataColumn( - label: Padding( - padding: EdgeInsets.only(left: 20), - child: Text('#'), - ), - ), - DataColumn( - label: Text('Title'), + label: Padding(padding: EdgeInsets.only(left: 20), child: Text('#')), ), + DataColumn(label: Text('Title')), DataColumn( label: Padding( padding: EdgeInsets.only(right: 10), @@ -40,38 +38,40 @@ class PlaylistSongs extends StatelessWidget { ), ), ], - rowBuilder: (context, index) => DataRow.byIndex( - index: index, - cells: [ - DataCell( - // Add HoverableSongPlayButton - Center( - child: Text( - (index + 1).toString(), - textAlign: TextAlign.center, + rowBuilder: + (context, index) => DataRow.byIndex( + index: index, + cells: [ + DataCell( + // Add HoverableSongPlayButton + Center( + child: Text( + (index + 1).toString(), + textAlign: TextAlign.center, + ), + ), ), - ), - ), - DataCell( - Row(children: [ - Padding( - padding: const EdgeInsets.all(2), - child: ClippedImage(playlist.songs[index].image.image), + DataCell( + Row( + children: [ + Padding( + padding: const EdgeInsets.all(2), + child: ClippedImage(playlist.songs[index].image.image), + ), + const SizedBox(width: 10), + Expanded(child: Text(playlist.songs[index].title)), + ], + ), ), - const SizedBox(width: 10), - Expanded(child: Text(playlist.songs[index].title)), - ]), - ), - DataCell( - Text(playlist.songs[index].length.toHumanizedString()), + DataCell(Text(playlist.songs[index].length.toHumanizedString())), + ], ), - ], - ), itemBuilder: (song, index) { return ListTile( - onTap: () => BlocProvider.of(context).add( - PlaybackEvent.changeSong(song), - ), + onTap: + () => BlocProvider.of( + context, + ).add(PlaybackEvent.changeSong(song)), leading: ClippedImage(song.image.image), title: Text(song.title), subtitle: Text(song.length.toHumanizedString()), diff --git a/boring_to_beautiful/step_06/lib/src/shared/app.dart b/boring_to_beautiful/step_06/lib/src/shared/app.dart index 3910d8f276..ed27418bd4 100644 --- a/boring_to_beautiful/step_06/lib/src/shared/app.dart +++ b/boring_to_beautiful/step_06/lib/src/shared/app.dart @@ -19,45 +19,46 @@ class MyApp extends StatefulWidget { } class _MyAppState extends State { - final settings = ValueNotifier(ThemeSettings( - sourceColor: Colors.pink, - themeMode: ThemeMode.system, - )); + final settings = ValueNotifier( + ThemeSettings(sourceColor: Colors.pink, themeMode: ThemeMode.system), + ); @override Widget build(BuildContext context) { return BlocProvider( create: (context) => PlaybackBloc(), child: DynamicColorBuilder( - builder: (lightDynamic, darkDynamic) => ThemeProvider( - lightDynamic: lightDynamic, - darkDynamic: darkDynamic, - settings: settings, - child: NotificationListener( - onNotification: (notification) { - settings.value = notification.settings; - return true; - }, - child: ValueListenableBuilder( - valueListenable: settings, - builder: (context, value, _) { - final theme = ThemeProvider.of(context); - return MaterialApp.router( - debugShowCheckedModeBanner: false, - title: 'Flutter Demo', - theme: theme.light(settings.value.sourceColor), - darkTheme: theme.dark(settings.value.sourceColor), - themeMode: theme.themeMode(), - routeInformationParser: appRouter.routeInformationParser, - routeInformationProvider: - appRouter.routeInformationProvider, - routerDelegate: appRouter.routerDelegate, - builder: (context, child) { - return PlayPauseListener(child: child!); - }, - ); + builder: + (lightDynamic, darkDynamic) => ThemeProvider( + lightDynamic: lightDynamic, + darkDynamic: darkDynamic, + settings: settings, + child: NotificationListener( + onNotification: (notification) { + settings.value = notification.settings; + return true; }, + child: ValueListenableBuilder( + valueListenable: settings, + builder: (context, value, _) { + final theme = ThemeProvider.of(context); + return MaterialApp.router( + debugShowCheckedModeBanner: false, + title: 'Flutter Demo', + theme: theme.light(settings.value.sourceColor), + darkTheme: theme.dark(settings.value.sourceColor), + themeMode: theme.themeMode(), + routeInformationParser: appRouter.routeInformationParser, + routeInformationProvider: + appRouter.routeInformationProvider, + routerDelegate: appRouter.routerDelegate, + builder: (context, child) { + return PlayPauseListener(child: child!); + }, + ); + }, + ), ), - )), + ), ), ); } diff --git a/boring_to_beautiful/step_06/lib/src/shared/classes/image.dart b/boring_to_beautiful/step_06/lib/src/shared/classes/image.dart index a1ef427c1d..00a6472b4a 100644 --- a/boring_to_beautiful/step_06/lib/src/shared/classes/image.dart +++ b/boring_to_beautiful/step_06/lib/src/shared/classes/image.dart @@ -3,10 +3,11 @@ // found in the LICENSE file. class MyArtistImage { - const MyArtistImage( - {required this.image, - required this.sourceName, - required this.sourceLink}); + const MyArtistImage({ + required this.image, + required this.sourceName, + required this.sourceLink, + }); final String image; final String sourceName; diff --git a/boring_to_beautiful/step_06/lib/src/shared/classes/playlist.dart b/boring_to_beautiful/step_06/lib/src/shared/classes/playlist.dart index 59899dc619..5f0225059d 100644 --- a/boring_to_beautiful/step_06/lib/src/shared/classes/playlist.dart +++ b/boring_to_beautiful/step_06/lib/src/shared/classes/playlist.dart @@ -17,8 +17,9 @@ class Playlist { this.description = '', required this.songs, this.cover = const MyArtistImage( - image: 'assets/images/record.jpeg', - sourceName: 'Adobe Stock Images', - sourceLink: ''), + image: 'assets/images/record.jpeg', + sourceName: 'Adobe Stock Images', + sourceLink: '', + ), }); } diff --git a/boring_to_beautiful/step_06/lib/src/shared/classes/ranked_song.dart b/boring_to_beautiful/step_06/lib/src/shared/classes/ranked_song.dart index 5908268c8c..2362bfae64 100644 --- a/boring_to_beautiful/step_06/lib/src/shared/classes/ranked_song.dart +++ b/boring_to_beautiful/step_06/lib/src/shared/classes/ranked_song.dart @@ -7,7 +7,11 @@ import './classes.dart'; class RankedSong extends Song { final int ranking; - const RankedSong(this.ranking, String title, Artist artist, Duration length, - MyArtistImage image) - : super(title, artist, length, image); + const RankedSong( + this.ranking, + String title, + Artist artist, + Duration length, + MyArtistImage image, + ) : super(title, artist, length, image); } diff --git a/boring_to_beautiful/step_06/lib/src/shared/extensions.dart b/boring_to_beautiful/step_06/lib/src/shared/extensions.dart index 8b7e41b988..fe65add57c 100644 --- a/boring_to_beautiful/step_06/lib/src/shared/extensions.dart +++ b/boring_to_beautiful/step_06/lib/src/shared/extensions.dart @@ -9,51 +9,36 @@ extension TypographyUtils on BuildContext { ThemeData get theme => Theme.of(this); TextTheme get textTheme => GoogleFonts.montserratTextTheme(theme.textTheme); ColorScheme get colors => theme.colorScheme; - TextStyle? get displayLarge => textTheme.displayLarge?.copyWith( - color: colors.onSurface, - ); - TextStyle? get displayMedium => textTheme.displayMedium?.copyWith( - color: colors.onSurface, - ); - TextStyle? get displaySmall => textTheme.displaySmall?.copyWith( - color: colors.onSurface, - ); - TextStyle? get headlineLarge => textTheme.headlineLarge?.copyWith( - color: colors.onSurface, - ); - TextStyle? get headlineMedium => textTheme.headlineMedium?.copyWith( - color: colors.onSurface, - ); - TextStyle? get headlineSmall => textTheme.headlineSmall?.copyWith( - color: colors.onSurface, - ); - TextStyle? get titleLarge => textTheme.titleLarge?.copyWith( - color: colors.onSurface, - ); - TextStyle? get titleMedium => textTheme.titleMedium?.copyWith( - color: colors.onSurface, - ); - TextStyle? get titleSmall => textTheme.titleSmall?.copyWith( - color: colors.onSurface, - ); - TextStyle? get labelLarge => textTheme.labelLarge?.copyWith( - color: colors.onSurface, - ); - TextStyle? get labelMedium => textTheme.labelMedium?.copyWith( - color: colors.onSurface, - ); - TextStyle? get labelSmall => textTheme.labelSmall?.copyWith( - color: colors.onSurface, - ); - TextStyle? get bodyLarge => textTheme.bodyLarge?.copyWith( - color: colors.onSurface, - ); - TextStyle? get bodyMedium => textTheme.bodyMedium?.copyWith( - color: colors.onSurface, - ); - TextStyle? get bodySmall => textTheme.bodySmall?.copyWith( - color: colors.onSurface, - ); + TextStyle? get displayLarge => + textTheme.displayLarge?.copyWith(color: colors.onSurface); + TextStyle? get displayMedium => + textTheme.displayMedium?.copyWith(color: colors.onSurface); + TextStyle? get displaySmall => + textTheme.displaySmall?.copyWith(color: colors.onSurface); + TextStyle? get headlineLarge => + textTheme.headlineLarge?.copyWith(color: colors.onSurface); + TextStyle? get headlineMedium => + textTheme.headlineMedium?.copyWith(color: colors.onSurface); + TextStyle? get headlineSmall => + textTheme.headlineSmall?.copyWith(color: colors.onSurface); + TextStyle? get titleLarge => + textTheme.titleLarge?.copyWith(color: colors.onSurface); + TextStyle? get titleMedium => + textTheme.titleMedium?.copyWith(color: colors.onSurface); + TextStyle? get titleSmall => + textTheme.titleSmall?.copyWith(color: colors.onSurface); + TextStyle? get labelLarge => + textTheme.labelLarge?.copyWith(color: colors.onSurface); + TextStyle? get labelMedium => + textTheme.labelMedium?.copyWith(color: colors.onSurface); + TextStyle? get labelSmall => + textTheme.labelSmall?.copyWith(color: colors.onSurface); + TextStyle? get bodyLarge => + textTheme.bodyLarge?.copyWith(color: colors.onSurface); + TextStyle? get bodyMedium => + textTheme.bodyMedium?.copyWith(color: colors.onSurface); + TextStyle? get bodySmall => + textTheme.bodySmall?.copyWith(color: colors.onSurface); } extension BreakpointUtils on BoxConstraints { @@ -65,17 +50,17 @@ extension BreakpointUtils on BoxConstraints { extension DurationString on String { /// Assumes a string (roughly) of the format '\d{1,2}:\d{2}' Duration toDuration() => switch (split(':')) { - [var minutes, var seconds] => Duration( - minutes: int.parse(minutes.trim()), - seconds: int.parse(seconds.trim()), - ), - [var hours, var minutes, var seconds] => Duration( - hours: int.parse(hours.trim()), - minutes: int.parse(minutes.trim()), - seconds: int.parse(seconds.trim()), - ), - _ => throw Exception('Invalid duration string: $this'), - }; + [var minutes, var seconds] => Duration( + minutes: int.parse(minutes.trim()), + seconds: int.parse(seconds.trim()), + ), + [var hours, var minutes, var seconds] => Duration( + hours: int.parse(hours.trim()), + minutes: int.parse(minutes.trim()), + seconds: int.parse(seconds.trim()), + ), + _ => throw Exception('Invalid duration string: $this'), + }; } extension HumanizedDuration on Duration { diff --git a/boring_to_beautiful/step_06/lib/src/shared/playback/bloc/playback_bloc.dart b/boring_to_beautiful/step_06/lib/src/shared/playback/bloc/playback_bloc.dart index 73c2f4c436..c6c871937b 100644 --- a/boring_to_beautiful/step_06/lib/src/shared/playback/bloc/playback_bloc.dart +++ b/boring_to_beautiful/step_06/lib/src/shared/playback/bloc/playback_bloc.dart @@ -41,9 +41,8 @@ class PlaybackBloc extends Bloc { } } - void _handlePlaybackProgress(Duration progress) => add( - PlaybackEvent.songProgress(progress), - ); + void _handlePlaybackProgress(Duration progress) => + add(PlaybackEvent.songProgress(progress)); void _togglePlayPause(TogglePlayPause event, Emitter emit) { state.isPlaying ? _pausePlayback() : _resumePlayback(); @@ -52,8 +51,10 @@ class PlaybackBloc extends Bloc { void _pausePlayback() => _currentlyPlayingSubscription!.cancel(); - void _resumePlayback() => _currentlyPlayingSubscription = - _startPlayingStream().listen(_handlePlaybackProgress); + void _resumePlayback() => + _currentlyPlayingSubscription = _startPlayingStream().listen( + _handlePlaybackProgress, + ); void _changeSong(ChangeSong event, Emitter emit) { emit( @@ -69,19 +70,15 @@ class PlaybackBloc extends Bloc { } void _songProgress(SongProgress event, Emitter emit) => emit( - state.copyWith( - songWithProgress: state.songWithProgress!.copyWith( - progress: state.songWithProgress!.progress + event.duration, - ), - ), - ); + state.copyWith( + songWithProgress: state.songWithProgress!.copyWith( + progress: state.songWithProgress!.progress + event.duration, + ), + ), + ); void _setVolume(SetVolume event, Emitter emit) => emit( - state.copyWith( - volume: event.value, - isMuted: false, - previousVolume: null, - ), - ); + state.copyWith(volume: event.value, isMuted: false, previousVolume: null), + ); void _toggleMute(ToggleMute event, Emitter emit) { if (state.isMuted) { @@ -94,11 +91,7 @@ class PlaybackBloc extends Bloc { ); } else { emit( - state.copyWith( - isMuted: true, - volume: 0, - previousVolume: state.volume, - ), + state.copyWith(isMuted: true, volume: 0, previousVolume: state.volume), ); } } diff --git a/boring_to_beautiful/step_06/lib/src/shared/playback/bloc/playback_bloc.freezed.dart b/boring_to_beautiful/step_06/lib/src/shared/playback/bloc/playback_bloc.freezed.dart index 8a422cd449..54e870ab6f 100644 --- a/boring_to_beautiful/step_06/lib/src/shared/playback/bloc/playback_bloc.freezed.dart +++ b/boring_to_beautiful/step_06/lib/src/shared/playback/bloc/playback_bloc.freezed.dart @@ -12,7 +12,8 @@ part of 'playback_bloc.dart'; T _$identity(T value) => value; final _privateConstructorUsedError = UnsupportedError( - 'It seems like you constructed your class using `MyClass._()`. This constructor is only meant to be used by freezed and you are not supposed to need it nor use it.\nPlease check the documentation here for more information: https://github.com/rrousselGit/freezed#adding-getters-and-methods-to-our-models'); + 'It seems like you constructed your class using `MyClass._()`. This constructor is only meant to be used by freezed and you are not supposed to need it nor use it.\nPlease check the documentation here for more information: https://github.com/rrousselGit/freezed#adding-getters-and-methods-to-our-models', +); /// @nodoc mixin _$PlaybackEvent { @@ -24,8 +25,7 @@ mixin _$PlaybackEvent { required TResult Function() toggleMute, required TResult Function(double percent) moveToInSong, required TResult Function(Duration duration) songProgress, - }) => - throw _privateConstructorUsedError; + }) => throw _privateConstructorUsedError; @optionalTypeArgs TResult? whenOrNull({ TResult? Function()? togglePlayPause, @@ -34,8 +34,7 @@ mixin _$PlaybackEvent { TResult? Function()? toggleMute, TResult? Function(double percent)? moveToInSong, TResult? Function(Duration duration)? songProgress, - }) => - throw _privateConstructorUsedError; + }) => throw _privateConstructorUsedError; @optionalTypeArgs TResult maybeWhen({ TResult Function()? togglePlayPause, @@ -45,8 +44,7 @@ mixin _$PlaybackEvent { TResult Function(double percent)? moveToInSong, TResult Function(Duration duration)? songProgress, required TResult orElse(), - }) => - throw _privateConstructorUsedError; + }) => throw _privateConstructorUsedError; @optionalTypeArgs TResult map({ required TResult Function(TogglePlayPause value) togglePlayPause, @@ -55,8 +53,7 @@ mixin _$PlaybackEvent { required TResult Function(ToggleMute value) toggleMute, required TResult Function(MoveToInSong value) moveToInSong, required TResult Function(SongProgress value) songProgress, - }) => - throw _privateConstructorUsedError; + }) => throw _privateConstructorUsedError; @optionalTypeArgs TResult? mapOrNull({ TResult? Function(TogglePlayPause value)? togglePlayPause, @@ -65,8 +62,7 @@ mixin _$PlaybackEvent { TResult? Function(ToggleMute value)? toggleMute, TResult? Function(MoveToInSong value)? moveToInSong, TResult? Function(SongProgress value)? songProgress, - }) => - throw _privateConstructorUsedError; + }) => throw _privateConstructorUsedError; @optionalTypeArgs TResult maybeMap({ TResult Function(TogglePlayPause value)? togglePlayPause, @@ -76,15 +72,15 @@ mixin _$PlaybackEvent { TResult Function(MoveToInSong value)? moveToInSong, TResult Function(SongProgress value)? songProgress, required TResult orElse(), - }) => - throw _privateConstructorUsedError; + }) => throw _privateConstructorUsedError; } /// @nodoc abstract class $PlaybackEventCopyWith<$Res> { factory $PlaybackEventCopyWith( - PlaybackEvent value, $Res Function(PlaybackEvent) then) = - _$PlaybackEventCopyWithImpl<$Res, PlaybackEvent>; + PlaybackEvent value, + $Res Function(PlaybackEvent) then, + ) = _$PlaybackEventCopyWithImpl<$Res, PlaybackEvent>; } /// @nodoc @@ -103,9 +99,10 @@ class _$PlaybackEventCopyWithImpl<$Res, $Val extends PlaybackEvent> /// @nodoc abstract class _$$TogglePlayPauseImplCopyWith<$Res> { - factory _$$TogglePlayPauseImplCopyWith(_$TogglePlayPauseImpl value, - $Res Function(_$TogglePlayPauseImpl) then) = - __$$TogglePlayPauseImplCopyWithImpl<$Res>; + factory _$$TogglePlayPauseImplCopyWith( + _$TogglePlayPauseImpl value, + $Res Function(_$TogglePlayPauseImpl) then, + ) = __$$TogglePlayPauseImplCopyWithImpl<$Res>; } /// @nodoc @@ -113,8 +110,9 @@ class __$$TogglePlayPauseImplCopyWithImpl<$Res> extends _$PlaybackEventCopyWithImpl<$Res, _$TogglePlayPauseImpl> implements _$$TogglePlayPauseImplCopyWith<$Res> { __$$TogglePlayPauseImplCopyWithImpl( - _$TogglePlayPauseImpl _value, $Res Function(_$TogglePlayPauseImpl) _then) - : super(_value, _then); + _$TogglePlayPauseImpl _value, + $Res Function(_$TogglePlayPauseImpl) _then, + ) : super(_value, _then); /// Create a copy of PlaybackEvent /// with the given fields replaced by the non-null parameter values. @@ -233,8 +231,9 @@ abstract class TogglePlayPause implements PlaybackEvent { /// @nodoc abstract class _$$ChangeSongImplCopyWith<$Res> { factory _$$ChangeSongImplCopyWith( - _$ChangeSongImpl value, $Res Function(_$ChangeSongImpl) then) = - __$$ChangeSongImplCopyWithImpl<$Res>; + _$ChangeSongImpl value, + $Res Function(_$ChangeSongImpl) then, + ) = __$$ChangeSongImplCopyWithImpl<$Res>; @useResult $Res call({Song song}); } @@ -244,22 +243,23 @@ class __$$ChangeSongImplCopyWithImpl<$Res> extends _$PlaybackEventCopyWithImpl<$Res, _$ChangeSongImpl> implements _$$ChangeSongImplCopyWith<$Res> { __$$ChangeSongImplCopyWithImpl( - _$ChangeSongImpl _value, $Res Function(_$ChangeSongImpl) _then) - : super(_value, _then); + _$ChangeSongImpl _value, + $Res Function(_$ChangeSongImpl) _then, + ) : super(_value, _then); /// Create a copy of PlaybackEvent /// with the given fields replaced by the non-null parameter values. @pragma('vm:prefer-inline') @override - $Res call({ - Object? song = null, - }) { - return _then(_$ChangeSongImpl( - null == song - ? _value.song - : song // ignore: cast_nullable_to_non_nullable - as Song, - )); + $Res call({Object? song = null}) { + return _then( + _$ChangeSongImpl( + null == song + ? _value.song + : song // ignore: cast_nullable_to_non_nullable + as Song, + ), + ); } } @@ -397,8 +397,9 @@ abstract class ChangeSong implements PlaybackEvent { /// @nodoc abstract class _$$SetVolumeImplCopyWith<$Res> { factory _$$SetVolumeImplCopyWith( - _$SetVolumeImpl value, $Res Function(_$SetVolumeImpl) then) = - __$$SetVolumeImplCopyWithImpl<$Res>; + _$SetVolumeImpl value, + $Res Function(_$SetVolumeImpl) then, + ) = __$$SetVolumeImplCopyWithImpl<$Res>; @useResult $Res call({double value}); } @@ -408,22 +409,23 @@ class __$$SetVolumeImplCopyWithImpl<$Res> extends _$PlaybackEventCopyWithImpl<$Res, _$SetVolumeImpl> implements _$$SetVolumeImplCopyWith<$Res> { __$$SetVolumeImplCopyWithImpl( - _$SetVolumeImpl _value, $Res Function(_$SetVolumeImpl) _then) - : super(_value, _then); + _$SetVolumeImpl _value, + $Res Function(_$SetVolumeImpl) _then, + ) : super(_value, _then); /// Create a copy of PlaybackEvent /// with the given fields replaced by the non-null parameter values. @pragma('vm:prefer-inline') @override - $Res call({ - Object? value = null, - }) { - return _then(_$SetVolumeImpl( - null == value - ? _value.value - : value // ignore: cast_nullable_to_non_nullable - as double, - )); + $Res call({Object? value = null}) { + return _then( + _$SetVolumeImpl( + null == value + ? _value.value + : value // ignore: cast_nullable_to_non_nullable + as double, + ), + ); } } @@ -561,8 +563,9 @@ abstract class SetVolume implements PlaybackEvent { /// @nodoc abstract class _$$ToggleMuteImplCopyWith<$Res> { factory _$$ToggleMuteImplCopyWith( - _$ToggleMuteImpl value, $Res Function(_$ToggleMuteImpl) then) = - __$$ToggleMuteImplCopyWithImpl<$Res>; + _$ToggleMuteImpl value, + $Res Function(_$ToggleMuteImpl) then, + ) = __$$ToggleMuteImplCopyWithImpl<$Res>; } /// @nodoc @@ -570,8 +573,9 @@ class __$$ToggleMuteImplCopyWithImpl<$Res> extends _$PlaybackEventCopyWithImpl<$Res, _$ToggleMuteImpl> implements _$$ToggleMuteImplCopyWith<$Res> { __$$ToggleMuteImplCopyWithImpl( - _$ToggleMuteImpl _value, $Res Function(_$ToggleMuteImpl) _then) - : super(_value, _then); + _$ToggleMuteImpl _value, + $Res Function(_$ToggleMuteImpl) _then, + ) : super(_value, _then); /// Create a copy of PlaybackEvent /// with the given fields replaced by the non-null parameter values. @@ -690,8 +694,9 @@ abstract class ToggleMute implements PlaybackEvent { /// @nodoc abstract class _$$MoveToInSongImplCopyWith<$Res> { factory _$$MoveToInSongImplCopyWith( - _$MoveToInSongImpl value, $Res Function(_$MoveToInSongImpl) then) = - __$$MoveToInSongImplCopyWithImpl<$Res>; + _$MoveToInSongImpl value, + $Res Function(_$MoveToInSongImpl) then, + ) = __$$MoveToInSongImplCopyWithImpl<$Res>; @useResult $Res call({double percent}); } @@ -701,22 +706,23 @@ class __$$MoveToInSongImplCopyWithImpl<$Res> extends _$PlaybackEventCopyWithImpl<$Res, _$MoveToInSongImpl> implements _$$MoveToInSongImplCopyWith<$Res> { __$$MoveToInSongImplCopyWithImpl( - _$MoveToInSongImpl _value, $Res Function(_$MoveToInSongImpl) _then) - : super(_value, _then); + _$MoveToInSongImpl _value, + $Res Function(_$MoveToInSongImpl) _then, + ) : super(_value, _then); /// Create a copy of PlaybackEvent /// with the given fields replaced by the non-null parameter values. @pragma('vm:prefer-inline') @override - $Res call({ - Object? percent = null, - }) { - return _then(_$MoveToInSongImpl( - null == percent - ? _value.percent - : percent // ignore: cast_nullable_to_non_nullable - as double, - )); + $Res call({Object? percent = null}) { + return _then( + _$MoveToInSongImpl( + null == percent + ? _value.percent + : percent // ignore: cast_nullable_to_non_nullable + as double, + ), + ); } } @@ -854,8 +860,9 @@ abstract class MoveToInSong implements PlaybackEvent { /// @nodoc abstract class _$$SongProgressImplCopyWith<$Res> { factory _$$SongProgressImplCopyWith( - _$SongProgressImpl value, $Res Function(_$SongProgressImpl) then) = - __$$SongProgressImplCopyWithImpl<$Res>; + _$SongProgressImpl value, + $Res Function(_$SongProgressImpl) then, + ) = __$$SongProgressImplCopyWithImpl<$Res>; @useResult $Res call({Duration duration}); } @@ -865,22 +872,23 @@ class __$$SongProgressImplCopyWithImpl<$Res> extends _$PlaybackEventCopyWithImpl<$Res, _$SongProgressImpl> implements _$$SongProgressImplCopyWith<$Res> { __$$SongProgressImplCopyWithImpl( - _$SongProgressImpl _value, $Res Function(_$SongProgressImpl) _then) - : super(_value, _then); + _$SongProgressImpl _value, + $Res Function(_$SongProgressImpl) _then, + ) : super(_value, _then); /// Create a copy of PlaybackEvent /// with the given fields replaced by the non-null parameter values. @pragma('vm:prefer-inline') @override - $Res call({ - Object? duration = null, - }) { - return _then(_$SongProgressImpl( - null == duration - ? _value.duration - : duration // ignore: cast_nullable_to_non_nullable - as Duration, - )); + $Res call({Object? duration = null}) { + return _then( + _$SongProgressImpl( + null == duration + ? _value.duration + : duration // ignore: cast_nullable_to_non_nullable + as Duration, + ), + ); } } @@ -1037,15 +1045,17 @@ mixin _$PlaybackState { /// @nodoc abstract class $PlaybackStateCopyWith<$Res> { factory $PlaybackStateCopyWith( - PlaybackState value, $Res Function(PlaybackState) then) = - _$PlaybackStateCopyWithImpl<$Res, PlaybackState>; + PlaybackState value, + $Res Function(PlaybackState) then, + ) = _$PlaybackStateCopyWithImpl<$Res, PlaybackState>; @useResult - $Res call( - {double volume, - double? previousVolume, - bool isMuted, - bool isPlaying, - SongWithProgress? songWithProgress}); + $Res call({ + double volume, + double? previousVolume, + bool isMuted, + bool isPlaying, + SongWithProgress? songWithProgress, + }); $SongWithProgressCopyWith<$Res>? get songWithProgress; } @@ -1071,28 +1081,36 @@ class _$PlaybackStateCopyWithImpl<$Res, $Val extends PlaybackState> Object? isPlaying = null, Object? songWithProgress = freezed, }) { - return _then(_value.copyWith( - volume: null == volume - ? _value.volume - : volume // ignore: cast_nullable_to_non_nullable - as double, - previousVolume: freezed == previousVolume - ? _value.previousVolume - : previousVolume // ignore: cast_nullable_to_non_nullable - as double?, - isMuted: null == isMuted - ? _value.isMuted - : isMuted // ignore: cast_nullable_to_non_nullable - as bool, - isPlaying: null == isPlaying - ? _value.isPlaying - : isPlaying // ignore: cast_nullable_to_non_nullable - as bool, - songWithProgress: freezed == songWithProgress - ? _value.songWithProgress - : songWithProgress // ignore: cast_nullable_to_non_nullable - as SongWithProgress?, - ) as $Val); + return _then( + _value.copyWith( + volume: + null == volume + ? _value.volume + : volume // ignore: cast_nullable_to_non_nullable + as double, + previousVolume: + freezed == previousVolume + ? _value.previousVolume + : previousVolume // ignore: cast_nullable_to_non_nullable + as double?, + isMuted: + null == isMuted + ? _value.isMuted + : isMuted // ignore: cast_nullable_to_non_nullable + as bool, + isPlaying: + null == isPlaying + ? _value.isPlaying + : isPlaying // ignore: cast_nullable_to_non_nullable + as bool, + songWithProgress: + freezed == songWithProgress + ? _value.songWithProgress + : songWithProgress // ignore: cast_nullable_to_non_nullable + as SongWithProgress?, + ) + as $Val, + ); } /// Create a copy of PlaybackState @@ -1114,16 +1132,18 @@ class _$PlaybackStateCopyWithImpl<$Res, $Val extends PlaybackState> abstract class _$$PlaybackStateImplCopyWith<$Res> implements $PlaybackStateCopyWith<$Res> { factory _$$PlaybackStateImplCopyWith( - _$PlaybackStateImpl value, $Res Function(_$PlaybackStateImpl) then) = - __$$PlaybackStateImplCopyWithImpl<$Res>; + _$PlaybackStateImpl value, + $Res Function(_$PlaybackStateImpl) then, + ) = __$$PlaybackStateImplCopyWithImpl<$Res>; @override @useResult - $Res call( - {double volume, - double? previousVolume, - bool isMuted, - bool isPlaying, - SongWithProgress? songWithProgress}); + $Res call({ + double volume, + double? previousVolume, + bool isMuted, + bool isPlaying, + SongWithProgress? songWithProgress, + }); @override $SongWithProgressCopyWith<$Res>? get songWithProgress; @@ -1134,8 +1154,9 @@ class __$$PlaybackStateImplCopyWithImpl<$Res> extends _$PlaybackStateCopyWithImpl<$Res, _$PlaybackStateImpl> implements _$$PlaybackStateImplCopyWith<$Res> { __$$PlaybackStateImplCopyWithImpl( - _$PlaybackStateImpl _value, $Res Function(_$PlaybackStateImpl) _then) - : super(_value, _then); + _$PlaybackStateImpl _value, + $Res Function(_$PlaybackStateImpl) _then, + ) : super(_value, _then); /// Create a copy of PlaybackState /// with the given fields replaced by the non-null parameter values. @@ -1148,40 +1169,48 @@ class __$$PlaybackStateImplCopyWithImpl<$Res> Object? isPlaying = null, Object? songWithProgress = freezed, }) { - return _then(_$PlaybackStateImpl( - volume: null == volume - ? _value.volume - : volume // ignore: cast_nullable_to_non_nullable - as double, - previousVolume: freezed == previousVolume - ? _value.previousVolume - : previousVolume // ignore: cast_nullable_to_non_nullable - as double?, - isMuted: null == isMuted - ? _value.isMuted - : isMuted // ignore: cast_nullable_to_non_nullable - as bool, - isPlaying: null == isPlaying - ? _value.isPlaying - : isPlaying // ignore: cast_nullable_to_non_nullable - as bool, - songWithProgress: freezed == songWithProgress - ? _value.songWithProgress - : songWithProgress // ignore: cast_nullable_to_non_nullable - as SongWithProgress?, - )); + return _then( + _$PlaybackStateImpl( + volume: + null == volume + ? _value.volume + : volume // ignore: cast_nullable_to_non_nullable + as double, + previousVolume: + freezed == previousVolume + ? _value.previousVolume + : previousVolume // ignore: cast_nullable_to_non_nullable + as double?, + isMuted: + null == isMuted + ? _value.isMuted + : isMuted // ignore: cast_nullable_to_non_nullable + as bool, + isPlaying: + null == isPlaying + ? _value.isPlaying + : isPlaying // ignore: cast_nullable_to_non_nullable + as bool, + songWithProgress: + freezed == songWithProgress + ? _value.songWithProgress + : songWithProgress // ignore: cast_nullable_to_non_nullable + as SongWithProgress?, + ), + ); } } /// @nodoc class _$PlaybackStateImpl implements _PlaybackState { - const _$PlaybackStateImpl( - {this.volume = 0.5, - this.previousVolume, - this.isMuted = false, - this.isPlaying = false, - this.songWithProgress}); + const _$PlaybackStateImpl({ + this.volume = 0.5, + this.previousVolume, + this.isMuted = false, + this.isPlaying = false, + this.songWithProgress, + }); /// Legal values are between 0 and 1. @override @@ -1221,8 +1250,14 @@ class _$PlaybackStateImpl implements _PlaybackState { } @override - int get hashCode => Object.hash(runtimeType, volume, previousVolume, isMuted, - isPlaying, songWithProgress); + int get hashCode => Object.hash( + runtimeType, + volume, + previousVolume, + isMuted, + isPlaying, + songWithProgress, + ); /// Create a copy of PlaybackState /// with the given fields replaced by the non-null parameter values. @@ -1234,12 +1269,13 @@ class _$PlaybackStateImpl implements _PlaybackState { } abstract class _PlaybackState implements PlaybackState { - const factory _PlaybackState( - {final double volume, - final double? previousVolume, - final bool isMuted, - final bool isPlaying, - final SongWithProgress? songWithProgress}) = _$PlaybackStateImpl; + const factory _PlaybackState({ + final double volume, + final double? previousVolume, + final bool isMuted, + final bool isPlaying, + final SongWithProgress? songWithProgress, + }) = _$PlaybackStateImpl; /// Legal values are between 0 and 1. @override @@ -1278,8 +1314,9 @@ mixin _$SongWithProgress { /// @nodoc abstract class $SongWithProgressCopyWith<$Res> { factory $SongWithProgressCopyWith( - SongWithProgress value, $Res Function(SongWithProgress) then) = - _$SongWithProgressCopyWithImpl<$Res, SongWithProgress>; + SongWithProgress value, + $Res Function(SongWithProgress) then, + ) = _$SongWithProgressCopyWithImpl<$Res, SongWithProgress>; @useResult $Res call({Duration progress, Song song}); } @@ -1298,29 +1335,32 @@ class _$SongWithProgressCopyWithImpl<$Res, $Val extends SongWithProgress> /// with the given fields replaced by the non-null parameter values. @pragma('vm:prefer-inline') @override - $Res call({ - Object? progress = null, - Object? song = null, - }) { - return _then(_value.copyWith( - progress: null == progress - ? _value.progress - : progress // ignore: cast_nullable_to_non_nullable - as Duration, - song: null == song - ? _value.song - : song // ignore: cast_nullable_to_non_nullable - as Song, - ) as $Val); + $Res call({Object? progress = null, Object? song = null}) { + return _then( + _value.copyWith( + progress: + null == progress + ? _value.progress + : progress // ignore: cast_nullable_to_non_nullable + as Duration, + song: + null == song + ? _value.song + : song // ignore: cast_nullable_to_non_nullable + as Song, + ) + as $Val, + ); } } /// @nodoc abstract class _$$SongWithProgressImplCopyWith<$Res> implements $SongWithProgressCopyWith<$Res> { - factory _$$SongWithProgressImplCopyWith(_$SongWithProgressImpl value, - $Res Function(_$SongWithProgressImpl) then) = - __$$SongWithProgressImplCopyWithImpl<$Res>; + factory _$$SongWithProgressImplCopyWith( + _$SongWithProgressImpl value, + $Res Function(_$SongWithProgressImpl) then, + ) = __$$SongWithProgressImplCopyWithImpl<$Res>; @override @useResult $Res call({Duration progress, Song song}); @@ -1330,28 +1370,30 @@ abstract class _$$SongWithProgressImplCopyWith<$Res> class __$$SongWithProgressImplCopyWithImpl<$Res> extends _$SongWithProgressCopyWithImpl<$Res, _$SongWithProgressImpl> implements _$$SongWithProgressImplCopyWith<$Res> { - __$$SongWithProgressImplCopyWithImpl(_$SongWithProgressImpl _value, - $Res Function(_$SongWithProgressImpl) _then) - : super(_value, _then); + __$$SongWithProgressImplCopyWithImpl( + _$SongWithProgressImpl _value, + $Res Function(_$SongWithProgressImpl) _then, + ) : super(_value, _then); /// Create a copy of SongWithProgress /// with the given fields replaced by the non-null parameter values. @pragma('vm:prefer-inline') @override - $Res call({ - Object? progress = null, - Object? song = null, - }) { - return _then(_$SongWithProgressImpl( - progress: null == progress - ? _value.progress - : progress // ignore: cast_nullable_to_non_nullable - as Duration, - song: null == song - ? _value.song - : song // ignore: cast_nullable_to_non_nullable - as Song, - )); + $Res call({Object? progress = null, Object? song = null}) { + return _then( + _$SongWithProgressImpl( + progress: + null == progress + ? _value.progress + : progress // ignore: cast_nullable_to_non_nullable + as Duration, + song: + null == song + ? _value.song + : song // ignore: cast_nullable_to_non_nullable + as Song, + ), + ); } } @@ -1390,13 +1432,16 @@ class _$SongWithProgressImpl implements _SongWithProgress { @pragma('vm:prefer-inline') _$$SongWithProgressImplCopyWith<_$SongWithProgressImpl> get copyWith => __$$SongWithProgressImplCopyWithImpl<_$SongWithProgressImpl>( - this, _$identity); + this, + _$identity, + ); } abstract class _SongWithProgress implements SongWithProgress { - const factory _SongWithProgress( - {required final Duration progress, - required final Song song}) = _$SongWithProgressImpl; + const factory _SongWithProgress({ + required final Duration progress, + required final Song song, + }) = _$SongWithProgressImpl; @override Duration get progress; diff --git a/boring_to_beautiful/step_06/lib/src/shared/providers/artists.dart b/boring_to_beautiful/step_06/lib/src/shared/providers/artists.dart index d116ad9cdd..f9e4a8063e 100644 --- a/boring_to_beautiful/step_06/lib/src/shared/providers/artists.dart +++ b/boring_to_beautiful/step_06/lib/src/shared/providers/artists.dart @@ -11,162 +11,175 @@ class ArtistsProvider { static ArtistsProvider get shared => ArtistsProvider(); List get artists => const [ - Artist( - id: 'jmo', - name: 'Jessie Morrison', + Artist( + id: 'jmo', + name: 'Jessie Morrison', + image: MyArtistImage( + image: 'assets/images/artists/woman.jpeg', + sourceLink: 'https://unsplash.com/photos/w8wpFqiMpW8', + sourceName: 'Daniel Monteiro', + ), + bio: + 'Jessie "JMo" Morrison is an American singer, actress, and dancer. The following year she won over America\'s hearts first appearing in the 2004 movie Unexpected Engagement. Soon after she released her debut album, Hopeful Romantics.', + updates: [ + 'So happy that everyone is loving the new music! It\'s been my pride and joy to work on and I\'m thrilled that you finally get to hear it!', + 'Happy Valentine\'s Day y\'all!!! I love each and every one of you 💋😘', + '#HappyGalentinesDay!!! Chocolates. Ice Cream. Your favorite rom-com. Let\'s goo!!! 💕✨', + ], + events: [ + Event( + date: '1/20/22', + title: 'Jessie Morrison: No More Heartbreak Tour', + location: 'Mountain View, California', + link: 'Tickets', + ), + Event( + date: '1/22/22', + title: 'Jessie Morrison: No More Heartbreak Tour', + location: 'Austin, Texas', + link: 'Tickets', + ), + Event( + date: '1/23/22', + title: 'Jessie Morrison: No More Heartbreak Tour', + location: 'Houston, Texas', + link: 'Tickets', + ), + Event( + date: '2/8/22', + title: 'Jessie Morrison: No More Heartbreak Tour', + location: 'Los Angeles, California', + link: 'Tickets', + ), + ], + news: [ + News( + title: + 'Jessie Morrison a 26-stop cross country tour for the first time in 6 years.', + author: 'By Jacqueline Stewart', + blurb: + 'Our favorite triple-threat Jessie Morrison is back, this time with a 26 stop tour across the country. She\'ll kick things off in Mountain View on January 20th, 2022 in Mountain View California with more stops being announced over the next few weeks...', image: MyArtistImage( - image: 'assets/images/artists/woman.jpeg', - sourceLink: 'https://unsplash.com/photos/w8wpFqiMpW8', - sourceName: 'Daniel Monteiro', + image: 'assets/images/news/concert.jpeg', + sourceLink: 'https://unsplash.com/photos/hzgs56Ze49s', + sourceName: 'Anthony DELANOIX', ), - bio: - 'Jessie "JMo" Morrison is an American singer, actress, and dancer. The following year she won over America\'s hearts first appearing in the 2004 movie Unexpected Engagement. Soon after she released her debut album, Hopeful Romantics.', - updates: [ - 'So happy that everyone is loving the new music! It\'s been my pride and joy to work on and I\'m thrilled that you finally get to hear it!', - 'Happy Valentine\'s Day y\'all!!! I love each and every one of you 💋😘', - '#HappyGalentinesDay!!! Chocolates. Ice Cream. Your favorite rom-com. Let\'s goo!!! 💕✨', - ], - events: [ - Event( - date: '1/20/22', - title: 'Jessie Morrison: No More Heartbreak Tour', - location: 'Mountain View, California', - link: 'Tickets'), - Event( - date: '1/22/22', - title: 'Jessie Morrison: No More Heartbreak Tour', - location: 'Austin, Texas', - link: 'Tickets'), - Event( - date: '1/23/22', - title: 'Jessie Morrison: No More Heartbreak Tour', - location: 'Houston, Texas', - link: 'Tickets'), - Event( - date: '2/8/22', - title: 'Jessie Morrison: No More Heartbreak Tour', - location: 'Los Angeles, California', - link: 'Tickets'), - ], - news: [ - News( - title: - 'Jessie Morrison a 26-stop cross country tour for the first time in 6 years.', - author: 'By Jacqueline Stewart', - blurb: - 'Our favorite triple-threat Jessie Morrison is back, this time with a 26 stop tour across the country. She\'ll kick things off in Mountain View on January 20th, 2022 in Mountain View California with more stops being announced over the next few weeks...', - image: MyArtistImage( - image: 'assets/images/news/concert.jpeg', - sourceLink: 'https://unsplash.com/photos/hzgs56Ze49s', - sourceName: 'Anthony DELANOIX', - ), - ) - ], ), - Artist( - id: 'lb', - name: 'Lucas Bryant', + ], + ), + Artist( + id: 'lb', + name: 'Lucas Bryant', + image: MyArtistImage( + image: 'assets/images/albums/artist1-album2.jpg', + sourceLink: 'https://unsplash.com/photos/6etHcucBiRg', + sourceName: 'Keagan Henman', + ), + bio: + 'Lucas Bryant is an American country music singer and songwriter. He moved to Nashville at the age of 18 to pursue his country music career. With 34 awards to his name, he currently holds the record for most awards in country music.', + updates: [ + 'Who\'s ready to party this weekend?! See you tomorrow, Nashville! #LBlive', + 'Can\'t wait to get back on stage after so long. What songs do you want to hear?', + 'We\'re going all in this weekend! How are you doing, Vegas?!', + ], + events: [ + Event( + date: '5/16/22', + title: 'Back To My Hometown Tour', + location: 'Indianapolis, IN', + link: 'Tickets', + ), + Event( + date: '5/18/22', + title: 'Back To My Hometown Tour', + location: 'San Antonio, TX', + link: 'Tickets', + ), + Event( + date: '5/20/22', + title: 'Back To My Hometown Tour', + location: 'Phoenix, AZ', + link: 'Tickets', + ), + Event( + date: '5/23/22', + title: 'Back To My Hometown Tour', + location: 'San Diego, CA', + link: 'Tickets', + ), + ], + news: [ + News( + title: + 'Country Music Favorites Lucas Bryant, Mariam Lubbock, Michelle Delaney and Jackson Murray Join Forces For The Biggest Performance in Country History.', + author: 'Lonnie Hall', + blurb: + 'Calling all country music fans! Fasten your seat belts because the 2022 Best of Country Awards is expecting a huge performance from some of our favorite artists. Country music legends Mariam Lubbock and Jackson Murray will be joined by Lucas Bryant and Michelle Delaney for a performance we\'ll never forget.', image: MyArtistImage( image: 'assets/images/albums/artist1-album2.jpg', sourceLink: 'https://unsplash.com/photos/6etHcucBiRg', sourceName: 'Keagan Henman', ), - bio: - 'Lucas Bryant is an American country music singer and songwriter. He moved to Nashville at the age of 18 to pursue his country music career. With 34 awards to his name, he currently holds the record for most awards in country music.', - updates: [ - 'Who\'s ready to party this weekend?! See you tomorrow, Nashville! #LBlive', - 'Can\'t wait to get back on stage after so long. What songs do you want to hear?', - 'We\'re going all in this weekend! How are you doing, Vegas?!', - ], - events: [ - Event( - date: '5/16/22', - title: 'Back To My Hometown Tour', - location: 'Indianapolis, IN', - link: 'Tickets'), - Event( - date: '5/18/22', - title: 'Back To My Hometown Tour', - location: 'San Antonio, TX', - link: 'Tickets'), - Event( - date: '5/20/22', - title: 'Back To My Hometown Tour', - location: 'Phoenix, AZ', - link: 'Tickets'), - Event( - date: '5/23/22', - title: 'Back To My Hometown Tour', - location: 'San Diego, CA', - link: 'Tickets'), - ], - news: [ - News( - title: - 'Country Music Favorites Lucas Bryant, Mariam Lubbock, Michelle Delaney and Jackson Murray Join Forces For The Biggest Performance in Country History.', - author: 'Lonnie Hall', - blurb: - 'Calling all country music fans! Fasten your seat belts because the 2022 Best of Country Awards is expecting a huge performance from some of our favorite artists. Country music legends Mariam Lubbock and Jackson Murray will be joined by Lucas Bryant and Michelle Delaney for a performance we\'ll never forget.', - image: MyArtistImage( - image: 'assets/images/albums/artist1-album2.jpg', - sourceLink: 'https://unsplash.com/photos/6etHcucBiRg', - sourceName: 'Keagan Henman', - ), - ), - ], ), - Artist( - id: 'jonjames', - name: 'Jon James', + ], + ), + Artist( + id: 'jonjames', + name: 'Jon James', + image: MyArtistImage( + image: 'assets/images/artists/joe.jpg', + sourceLink: 'https://unsplash.com/photos/k7UKO-tT5QU', + sourceName: 'Natalie Runnerstrom', + ), + bio: + 'Jon James is an American singer and songwriter. He\'s best known for his number one single "Never Going Back" which stayed atop the charts for 10 weeks.', + updates: [ + '3. MORE. DAYS. Who\'s ready for #FallingForYou?! Tune in tomorrow to see the full track list!', + '4 days until I get to share some of the favorite songs I\'ve ever written with you.', + '#FallingForYou dropping in 5 days! Send me your favorite music video concepts 🎥 😎', + ], + events: [ + Event( + date: '10/22/21', + title: 'Falling For You Tour', + location: 'Dallas, Texas', + link: 'Ticketmaster', + ), + Event( + date: '10/23/21', + title: 'Falling For You Tour', + location: 'Houston, Texas', + link: 'Ticketmaster', + ), + Event( + date: '10/26/21', + title: 'Falling For You Tour', + location: 'Phoenix, Arizona', + link: 'Ticketmaster', + ), + Event( + date: '10/27/21', + title: 'Falling For You Tour', + location: 'Los Angeles, California', + link: 'Ticketmaster', + ), + ], + news: [ + News( + title: + 'Jon James is excited for the release of his sixth album "Falling For You"', + author: 'Top Media Today', + blurb: + 'Jon James will be dropping his new album "Falling For You" on Friday to much fan excitement. The 6-time Grammy winning artist has spent the last year writing and recording for this album that\'s been dubbed "his best work yet."', image: MyArtistImage( - image: 'assets/images/artists/joe.jpg', - sourceLink: 'https://unsplash.com/photos/k7UKO-tT5QU', - sourceName: 'Natalie Runnerstrom', + image: 'assets/images/news/recording_studio.jpg', + sourceLink: 'https://unsplash.com/photos/CbOGmLA46JI', + sourceName: 'Yohann LIBOT', ), - bio: - 'Jon James is an American singer and songwriter. He\'s best known for his number one single "Never Going Back" which stayed atop the charts for 10 weeks.', - updates: [ - '3. MORE. DAYS. Who\'s ready for #FallingForYou?! Tune in tomorrow to see the full track list!', - '4 days until I get to share some of the favorite songs I\'ve ever written with you.', - '#FallingForYou dropping in 5 days! Send me your favorite music video concepts 🎥 😎', - ], - events: [ - Event( - date: '10/22/21', - title: 'Falling For You Tour', - location: 'Dallas, Texas', - link: 'Ticketmaster'), - Event( - date: '10/23/21', - title: 'Falling For You Tour', - location: 'Houston, Texas', - link: 'Ticketmaster'), - Event( - date: '10/26/21', - title: 'Falling For You Tour', - location: 'Phoenix, Arizona', - link: 'Ticketmaster'), - Event( - date: '10/27/21', - title: 'Falling For You Tour', - location: 'Los Angeles, California', - link: 'Ticketmaster'), - ], - news: [ - News( - title: - 'Jon James is excited for the release of his sixth album "Falling For You"', - author: 'Top Media Today', - blurb: - 'Jon James will be dropping his new album "Falling For You" on Friday to much fan excitement. The 6-time Grammy winning artist has spent the last year writing and recording for this album that\'s been dubbed "his best work yet."', - image: MyArtistImage( - image: 'assets/images/news/recording_studio.jpg', - sourceLink: 'https://unsplash.com/photos/CbOGmLA46JI', - sourceName: 'Yohann LIBOT'), - ) - ], ), - ]; + ], + ), + ]; Artist? getArtist(String id) { return artists.firstWhereOrNull((artist) => artist.id == id); diff --git a/boring_to_beautiful/step_06/lib/src/shared/providers/playlists.dart b/boring_to_beautiful/step_06/lib/src/shared/providers/playlists.dart index e8bab994dd..f27f71b3ec 100644 --- a/boring_to_beautiful/step_06/lib/src/shared/providers/playlists.dart +++ b/boring_to_beautiful/step_06/lib/src/shared/providers/playlists.dart @@ -18,41 +18,50 @@ class PlaylistsProvider { static List images() { return [ const MyArtistImage( - image: 'assets/images/playlists/favorite.jpg', - sourceLink: 'https://unsplash.com/photos/60GsdOMRFGc', - sourceName: 'Karsten Winegeart'), + image: 'assets/images/playlists/favorite.jpg', + sourceLink: 'https://unsplash.com/photos/60GsdOMRFGc', + sourceName: 'Karsten Winegeart', + ), const MyArtistImage( - image: 'assets/images/playlists/austin.jpg', - sourceLink: 'https://unsplash.com/photos/AlBgcDfDG_s', - sourceName: 'Carlos Alfonso'), + image: 'assets/images/playlists/austin.jpg', + sourceLink: 'https://unsplash.com/photos/AlBgcDfDG_s', + sourceName: 'Carlos Alfonso', + ), const MyArtistImage( - image: 'assets/images/playlists/reading.jpg', - sourceLink: 'https://unsplash.com/photos/wkgv7I2VTzM', - sourceName: 'Alexandra Fuller'), + image: 'assets/images/playlists/reading.jpg', + sourceLink: 'https://unsplash.com/photos/wkgv7I2VTzM', + sourceName: 'Alexandra Fuller', + ), const MyArtistImage( - image: 'assets/images/playlists/workout.jpg', - sourceLink: 'https://unsplash.com/photos/CnEEF5eJemQ', - sourceName: 'Karsten Winegeart'), + image: 'assets/images/playlists/workout.jpg', + sourceLink: 'https://unsplash.com/photos/CnEEF5eJemQ', + sourceName: 'Karsten Winegeart', + ), const MyArtistImage( - image: 'assets/images/playlists/calm.jpg', - sourceLink: 'https://unsplash.com/photos/NTyBbu66_SI', - sourceName: 'Jared Rice'), + image: 'assets/images/playlists/calm.jpg', + sourceLink: 'https://unsplash.com/photos/NTyBbu66_SI', + sourceName: 'Jared Rice', + ), const MyArtistImage( - image: 'assets/images/playlists/coffee.jpg', - sourceLink: 'https://unsplash.com/photos/XOhI_kW_TaM', - sourceName: 'Nathan Dumlao'), + image: 'assets/images/playlists/coffee.jpg', + sourceLink: 'https://unsplash.com/photos/XOhI_kW_TaM', + sourceName: 'Nathan Dumlao', + ), const MyArtistImage( - image: 'assets/images/playlists/piano.jpg', - sourceLink: 'https://unsplash.com/photos/BhfE1IgcsA8', - sourceName: 'Jordan Whitfield'), + image: 'assets/images/playlists/piano.jpg', + sourceLink: 'https://unsplash.com/photos/BhfE1IgcsA8', + sourceName: 'Jordan Whitfield', + ), const MyArtistImage( - image: 'assets/images/playlists/studying.jpg', - sourceLink: 'https://unsplash.com/photos/-moT-Deiw1M', - sourceName: 'Humble Lamb'), + image: 'assets/images/playlists/studying.jpg', + sourceLink: 'https://unsplash.com/photos/-moT-Deiw1M', + sourceName: 'Humble Lamb', + ), const MyArtistImage( - image: 'assets/images/playlists/jazz.jpg', - sourceLink: 'https://unsplash.com/photos/BY_KyTwTKq4', - sourceName: 'dimitri.photography'), + image: 'assets/images/playlists/jazz.jpg', + sourceLink: 'https://unsplash.com/photos/BY_KyTwTKq4', + sourceName: 'dimitri.photography', + ), ]; } @@ -85,8 +94,10 @@ class PlaylistsProvider { ); } - static final List _randomPlaylists = - List.generate(10, (index) => randomLengthPlaylist()); + static final List _randomPlaylists = List.generate( + 10, + (index) => randomLengthPlaylist(), + ); } String randomId() { diff --git a/boring_to_beautiful/step_06/lib/src/shared/providers/songs.dart b/boring_to_beautiful/step_06/lib/src/shared/providers/songs.dart index ed018a83ff..f1205f2dcb 100644 --- a/boring_to_beautiful/step_06/lib/src/shared/providers/songs.dart +++ b/boring_to_beautiful/step_06/lib/src/shared/providers/songs.dart @@ -52,9 +52,10 @@ final _songs = [ ArtistsProvider.shared.getArtist('jonjames')!, '3:35'.toDuration(), const MyArtistImage( - image: 'assets/images/albums/artist4-album2.jpg', - sourceLink: 'https://unsplash.com/photos/RQgKM1h2agA', - sourceName: 'Alexandru Acea'), + image: 'assets/images/albums/artist4-album2.jpg', + sourceLink: 'https://unsplash.com/photos/RQgKM1h2agA', + sourceName: 'Alexandru Acea', + ), ), RankedSong( 2, @@ -62,9 +63,10 @@ final _songs = [ ArtistsProvider.shared.getArtist('jonjames')!, '3:52'.toDuration(), const MyArtistImage( - image: 'assets/images/albums/artist4-album1.jpg', - sourceLink: 'https://unsplash.com/photos/ZWDg7v2FPWE', - sourceName: 'Jr Korpa'), + image: 'assets/images/albums/artist4-album1.jpg', + sourceLink: 'https://unsplash.com/photos/ZWDg7v2FPWE', + sourceName: 'Jr Korpa', + ), ), RankedSong( 3, @@ -72,9 +74,10 @@ final _songs = [ ArtistsProvider.shared.getArtist('jonjames')!, '3:39'.toDuration(), const MyArtistImage( - image: 'assets/images/albums/artist4-album3.jpg', - sourceLink: 'https://unsplash.com/photos/rX12B5uX7QM', - sourceName: 'Stormseeker'), + image: 'assets/images/albums/artist4-album3.jpg', + sourceLink: 'https://unsplash.com/photos/rX12B5uX7QM', + sourceName: 'Stormseeker', + ), ), RankedSong( 1, diff --git a/boring_to_beautiful/step_06/lib/src/shared/providers/theme.dart b/boring_to_beautiful/step_06/lib/src/shared/providers/theme.dart index a152dcdcba..a86e3daf64 100644 --- a/boring_to_beautiful/step_06/lib/src/shared/providers/theme.dart +++ b/boring_to_beautiful/step_06/lib/src/shared/providers/theme.dart @@ -28,12 +28,13 @@ class ThemeSettingChange extends Notification { } class ThemeProvider extends InheritedWidget { - const ThemeProvider( - {super.key, - required this.settings, - required this.lightDynamic, - required this.darkDynamic, - required super.child}); + const ThemeProvider({ + super.key, + required this.settings, + required this.lightDynamic, + required this.darkDynamic, + required super.child, + }); final ValueNotifier settings; final ColorScheme? lightDynamic; @@ -59,8 +60,9 @@ class ThemeProvider extends InheritedWidget { Color blend(Color targetColor) { return Color( - // ignore: deprecated_member_use - Blend.harmonize(targetColor.value, settings.value.sourceColor.value)); + // ignore: deprecated_member_use + Blend.harmonize(targetColor.value, settings.value.sourceColor.value), + ); } Color source(Color? target) { @@ -72,18 +74,18 @@ class ThemeProvider extends InheritedWidget { } ColorScheme colors(Brightness brightness, Color? targetColor) { - final dynamicPrimary = brightness == Brightness.light - ? lightDynamic?.primary - : darkDynamic?.primary; + final dynamicPrimary = + brightness == Brightness.light + ? lightDynamic?.primary + : darkDynamic?.primary; return ColorScheme.fromSeed( seedColor: dynamicPrimary ?? source(targetColor), brightness: brightness, ); } - ShapeBorder get shapeMedium => RoundedRectangleBorder( - borderRadius: BorderRadius.circular(8), - ); + ShapeBorder get shapeMedium => + RoundedRectangleBorder(borderRadius: BorderRadius.circular(8)); CardTheme cardTheme() { return CardTheme( @@ -113,21 +115,13 @@ class ThemeProvider extends InheritedWidget { labelColor: colors.secondary, unselectedLabelColor: colors.onSurfaceVariant, indicator: BoxDecoration( - border: Border( - bottom: BorderSide( - color: colors.secondary, - width: 2, - ), - ), + border: Border(bottom: BorderSide(color: colors.secondary, width: 2)), ), ); } BottomAppBarTheme bottomAppBarTheme(ColorScheme colors) { - return BottomAppBarTheme( - color: colors.surface, - elevation: 0, - ); + return BottomAppBarTheme(color: colors.surface, elevation: 0); } BottomNavigationBarThemeData bottomNavigationBarTheme(ColorScheme colors) { @@ -146,9 +140,7 @@ class ThemeProvider extends InheritedWidget { } DrawerThemeData drawerTheme(ColorScheme colors) { - return DrawerThemeData( - backgroundColor: colors.surface, - ); + return DrawerThemeData(backgroundColor: colors.surface); } ThemeData light([Color? targetColor]) { @@ -207,10 +199,7 @@ class ThemeProvider extends InheritedWidget { } class ThemeSettings { - ThemeSettings({ - required this.sourceColor, - required this.themeMode, - }); + ThemeSettings({required this.sourceColor, required this.themeMode}); final Color sourceColor; final ThemeMode themeMode; @@ -221,10 +210,7 @@ Color randomColor() { } // Custom Colors -const linkColor = CustomColor( - name: 'Link Color', - color: Color(0xFF00B0FF), -); +const linkColor = CustomColor(name: 'Link Color', color: Color(0xFF00B0FF)); class CustomColor { const CustomColor({ diff --git a/boring_to_beautiful/step_06/lib/src/shared/router.dart b/boring_to_beautiful/step_06/lib/src/shared/router.dart index 3efb7362fa..db82627246 100644 --- a/boring_to_beautiful/step_06/lib/src/shared/router.dart +++ b/boring_to_beautiful/step_06/lib/src/shared/router.dart @@ -20,11 +20,7 @@ final artistsProvider = ArtistsProvider(); final playlistsProvider = PlaylistsProvider(); const List destinations = [ - NavigationDestination( - label: 'Home', - icon: Icon(Icons.home), - route: '/', - ), + NavigationDestination(label: 'Home', icon: Icon(Icons.home), route: '/'), NavigationDestination( label: 'Playlists', icon: Icon(Icons.playlist_add_check), @@ -56,41 +52,46 @@ final appRouter = GoRouter( // HomeScreen GoRoute( path: '/', - pageBuilder: (context, state) => const MaterialPage( - key: _pageKey, - child: RootLayout( - key: _scaffoldKey, - currentIndex: 0, - child: HomeScreen(), - ), - ), + pageBuilder: + (context, state) => const MaterialPage( + key: _pageKey, + child: RootLayout( + key: _scaffoldKey, + currentIndex: 0, + child: HomeScreen(), + ), + ), ), // PlaylistHomeScreen GoRoute( path: '/playlists', - pageBuilder: (context, state) => const MaterialPage( - key: _pageKey, - child: RootLayout( - key: _scaffoldKey, - currentIndex: 1, - child: PlaylistHomeScreen(), - ), - ), - routes: [ - GoRoute( - path: ':pid', - pageBuilder: (context, state) => MaterialPage( - key: state.pageKey, + pageBuilder: + (context, state) => const MaterialPage( + key: _pageKey, child: RootLayout( key: _scaffoldKey, currentIndex: 1, - child: PlaylistScreen( - playlist: playlistsProvider - .getPlaylist(state.pathParameters['pid']!)!, - ), + child: PlaylistHomeScreen(), ), ), + routes: [ + GoRoute( + path: ':pid', + pageBuilder: + (context, state) => MaterialPage( + key: state.pageKey, + child: RootLayout( + key: _scaffoldKey, + currentIndex: 1, + child: PlaylistScreen( + playlist: + playlistsProvider.getPlaylist( + state.pathParameters['pid']!, + )!, + ), + ), + ), ), ], ), @@ -98,28 +99,32 @@ final appRouter = GoRouter( // ArtistHomeScreen GoRoute( path: '/artists', - pageBuilder: (context, state) => const MaterialPage( - key: _pageKey, - child: RootLayout( - key: _scaffoldKey, - currentIndex: 2, - child: ArtistsScreen(), - ), - ), - routes: [ - GoRoute( - path: ':aid', - pageBuilder: (context, state) => MaterialPage( - key: state.pageKey, + pageBuilder: + (context, state) => const MaterialPage( + key: _pageKey, child: RootLayout( key: _scaffoldKey, currentIndex: 2, - child: ArtistScreen( - artist: - artistsProvider.getArtist(state.pathParameters['aid']!)!, - ), + child: ArtistsScreen(), ), ), + routes: [ + GoRoute( + path: ':aid', + pageBuilder: + (context, state) => MaterialPage( + key: state.pageKey, + child: RootLayout( + key: _scaffoldKey, + currentIndex: 2, + child: ArtistScreen( + artist: + artistsProvider.getArtist( + state.pathParameters['aid']!, + )!, + ), + ), + ), // builder: (context, state) => ArtistScreen( // id: state.params['aid']!, // ), @@ -129,14 +134,15 @@ final appRouter = GoRouter( for (final route in destinations.skip(3)) GoRoute( path: route.route, - pageBuilder: (context, state) => MaterialPage( - key: _pageKey, - child: RootLayout( - key: _scaffoldKey, - currentIndex: destinations.indexOf(route), - child: const SizedBox(), - ), - ), + pageBuilder: + (context, state) => MaterialPage( + key: _pageKey, + child: RootLayout( + key: _scaffoldKey, + currentIndex: destinations.indexOf(route), + child: const SizedBox(), + ), + ), ), ], ); diff --git a/boring_to_beautiful/step_06/lib/src/shared/views/adaptive_image_card.dart b/boring_to_beautiful/step_06/lib/src/shared/views/adaptive_image_card.dart index 07cab2b0d7..99f5be0837 100644 --- a/boring_to_beautiful/step_06/lib/src/shared/views/adaptive_image_card.dart +++ b/boring_to_beautiful/step_06/lib/src/shared/views/adaptive_image_card.dart @@ -36,20 +36,13 @@ class AdaptiveImageCard extends StatelessWidget { ), ), Expanded( - child: Padding( - padding: const EdgeInsets.all(20), - child: child, - ), + child: Padding(padding: const EdgeInsets.all(20), child: child), ), ], ); } return Padding( - padding: const EdgeInsets.only( - left: 20, - bottom: 20, - top: 20, - ), + padding: const EdgeInsets.only(left: 20, bottom: 20, top: 20), child: Row( mainAxisAlignment: MainAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.end, @@ -65,11 +58,8 @@ class AdaptiveImageCard extends StatelessWidget { ), ), Expanded( - child: Padding( - padding: const EdgeInsets.all(20), - child: child, - ), - ) + child: Padding(padding: const EdgeInsets.all(20), child: child), + ), ], ), ); diff --git a/boring_to_beautiful/step_06/lib/src/shared/views/adaptive_navigation.dart b/boring_to_beautiful/step_06/lib/src/shared/views/adaptive_navigation.dart index 067ea7d17f..709068ea07 100644 --- a/boring_to_beautiful/step_06/lib/src/shared/views/adaptive_navigation.dart +++ b/boring_to_beautiful/step_06/lib/src/shared/views/adaptive_navigation.dart @@ -30,12 +30,15 @@ class AdaptiveNavigation extends StatelessWidget { NavigationRail( extended: dimens.maxWidth >= 800, minExtendedWidth: 180, - destinations: destinations - .map((e) => NavigationRailDestination( - icon: e.icon, - label: Text(e.label), - )) - .toList(), + destinations: + destinations + .map( + (e) => NavigationRailDestination( + icon: e.icon, + label: Text(e.label), + ), + ) + .toList(), selectedIndex: selectedIndex, onDestinationSelected: onDestinationSelected, ), diff --git a/boring_to_beautiful/step_06/lib/src/shared/views/article_content.dart b/boring_to_beautiful/step_06/lib/src/shared/views/article_content.dart index af243f015b..c5a0b5e62a 100644 --- a/boring_to_beautiful/step_06/lib/src/shared/views/article_content.dart +++ b/boring_to_beautiful/step_06/lib/src/shared/views/article_content.dart @@ -5,11 +5,7 @@ import 'package:flutter/material.dart'; class ArticleContent extends StatelessWidget { - const ArticleContent({ - super.key, - required this.child, - this.maxWidth = 960, - }); + const ArticleContent({super.key, required this.child, this.maxWidth = 960}); final double maxWidth; final Widget child; @@ -19,13 +15,8 @@ class ArticleContent extends StatelessWidget { return Container( alignment: Alignment.topCenter, child: ConstrainedBox( - constraints: BoxConstraints( - maxWidth: maxWidth, - ), - child: Padding( - padding: const EdgeInsets.all(15), - child: child, - ), + constraints: BoxConstraints(maxWidth: maxWidth), + child: Padding(padding: const EdgeInsets.all(15), child: child), ), ); } diff --git a/boring_to_beautiful/step_06/lib/src/shared/views/bottom_bar.dart b/boring_to_beautiful/step_06/lib/src/shared/views/bottom_bar.dart index 06e085a9b6..bf15ad9bb0 100644 --- a/boring_to_beautiful/step_06/lib/src/shared/views/bottom_bar.dart +++ b/boring_to_beautiful/step_06/lib/src/shared/views/bottom_bar.dart @@ -26,16 +26,18 @@ class BottomBar extends StatelessWidget implements PreferredSizeWidget { final bloc = BlocProvider.of(context); return BlocBuilder( bloc: bloc, - builder: (context, state) => _BottomBar( - artist: state.songWithProgress?.song.artist, - isMuted: state.isMuted, - isPlaying: state.isPlaying, - preferredSize: preferredSize, - progress: state.songWithProgress?.progress, - song: state.songWithProgress?.song, - togglePlayPause: () => bloc.add(const PlaybackEvent.togglePlayPause()), - volume: state.volume, - ), + builder: + (context, state) => _BottomBar( + artist: state.songWithProgress?.song.artist, + isMuted: state.isMuted, + isPlaying: state.isPlaying, + preferredSize: preferredSize, + progress: state.songWithProgress?.progress, + song: state.songWithProgress?.song, + togglePlayPause: + () => bloc.add(const PlaybackEvent.togglePlayPause()), + volume: state.volume, + ), ); } } @@ -63,10 +65,12 @@ class _BottomBar extends StatelessWidget { @override Widget build(BuildContext context) => LayoutBuilder( - builder: (context, constraints) => constraints.isTablet - ? _buildDesktopBar(context, constraints) - : _buildMobileBar(context, constraints), - ); + builder: + (context, constraints) => + constraints.isTablet + ? _buildDesktopBar(context, constraints) + : _buildMobileBar(context, constraints), + ); Widget _buildDesktopBar(BuildContext context, BoxConstraints constraints) { return ColoredBox( @@ -79,10 +83,7 @@ class _BottomBar extends StatelessWidget { Row( children: [ _AlbumArt(song: song), - _SongDetails( - artist: artist, - song: song, - ), + _SongDetails(artist: artist, song: song), ], ), Flexible( @@ -95,12 +96,7 @@ class _BottomBar extends StatelessWidget { isPlaying: isPlaying, togglePlayPause: togglePlayPause, ), - Center( - child: _ProgressBar( - progress: progress, - song: song, - ), - ), + Center(child: _ProgressBar(progress: progress, song: song)), ], ), ), @@ -114,17 +110,18 @@ class _BottomBar extends StatelessWidget { final overlay = Overlay.of(context); OverlayEntry? entry; entry = OverlayEntry( - builder: (context) => Stack( - children: [ - Positioned( - child: _FullScreenPlayer( - onClose: () { - entry?.remove(); - }, - ), + builder: + (context) => Stack( + children: [ + Positioned( + child: _FullScreenPlayer( + onClose: () { + entry?.remove(); + }, + ), + ), + ], ), - ], - ), ); overlay.insert(entry); }, @@ -136,10 +133,10 @@ class _BottomBar extends StatelessWidget { } double get songProgress => switch ((progress, song)) { - (Duration progress, Song song) => - progress.inMilliseconds / song.length.inMilliseconds, - _ => 0, - }; + (Duration progress, Song song) => + progress.inMilliseconds / song.length.inMilliseconds, + _ => 0, + }; Widget _buildMobileBar(BuildContext context, BoxConstraints constraints) { return ColoredBox( @@ -152,17 +149,18 @@ class _BottomBar extends StatelessWidget { final overlay = Overlay.of(context); OverlayEntry? entry; entry = OverlayEntry( - builder: (context) => Stack( - children: [ - Positioned( - child: _MobilePlayer( - onClose: () { - entry?.remove(); - }, - ), + builder: + (context) => Stack( + children: [ + Positioned( + child: _MobilePlayer( + onClose: () { + entry?.remove(); + }, + ), + ), + ], ), - ], - ), ); overlay.insert(entry); }, @@ -191,10 +189,7 @@ class _BottomBar extends StatelessWidget { mainAxisAlignment: MainAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start, children: [ - Text( - song?.title ?? '', - style: context.labelMedium, - ), + Text(song?.title ?? '', style: context.labelMedium), Text( song?.artist.name ?? '', style: context.labelSmall, @@ -220,10 +215,7 @@ class _BottomBar extends StatelessWidget { } class _ProgressBar extends StatelessWidget { - const _ProgressBar({ - required this.progress, - required this.song, - }); + const _ProgressBar({required this.progress, required this.song}); /// Current playback depth into user is into [song]. final Duration? progress; @@ -231,10 +223,10 @@ class _ProgressBar extends StatelessWidget { final Song? song; double get songProgress => switch ((progress, song)) { - (Duration progress, Song song) => - progress.inMilliseconds / song.length.inMilliseconds, - _ => 0, - }; + (Duration progress, Song song) => + progress.inMilliseconds / song.length.inMilliseconds, + _ => 0, + }; @override Widget build(BuildContext context) { @@ -252,29 +244,32 @@ class _ProgressBar extends StatelessWidget { children: [ const SizedBox(width: 10), SizedBox( - child: progress != null - ? Text(progress!.toHumanizedString(), - style: Theme.of(context).textTheme.bodySmall) - : const Text('-'), + child: + progress != null + ? Text( + progress!.toHumanizedString(), + style: Theme.of(context).textTheme.bodySmall, + ) + : const Text('-'), ), Expanded( child: Slider( value: songProgress.clamp(0, 1), divisions: 1000, onChanged: (percent) { - BlocProvider.of(context).add( - PlaybackEvent.moveToInSong(percent), - ); + BlocProvider.of( + context, + ).add(PlaybackEvent.moveToInSong(percent)); }, onChangeEnd: (percent) { - BlocProvider.of(context).add( - PlaybackEvent.moveToInSong(percent), - ); + BlocProvider.of( + context, + ).add(PlaybackEvent.moveToInSong(percent)); // Because dragging pauses auto playback, resume playing // once the user finishes dragging. - BlocProvider.of(context).add( - const PlaybackEvent.togglePlayPause(), - ); + BlocProvider.of( + context, + ).add(const PlaybackEvent.togglePlayPause()); }, activeColor: Theme.of(context).colorScheme.onTertiaryContainer, @@ -282,12 +277,15 @@ class _ProgressBar extends StatelessWidget { ), ), SizedBox( - child: song != null - ? Text(song!.length.toHumanizedString(), - style: Theme.of(context).textTheme.bodySmall) - : const Text('-'), + child: + song != null + ? Text( + song!.length.toHumanizedString(), + style: Theme.of(context).textTheme.bodySmall, + ) + : const Text('-'), ), - const SizedBox(width: 10) + const SizedBox(width: 10), ], ), ); @@ -297,10 +295,7 @@ class _ProgressBar extends StatelessWidget { } class _VolumeBar extends StatelessWidget { - const _VolumeBar({ - required this.volume, - required this.isMuted, - }); + const _VolumeBar({required this.volume, required this.isMuted}); /// The percentage, between 0 and 1, at which to render the volume slider. final double volume; @@ -313,17 +308,16 @@ class _VolumeBar extends StatelessWidget { @override Widget build(BuildContext context) { return ConstrainedBox( - constraints: const BoxConstraints( - maxWidth: 200, - ), + constraints: const BoxConstraints(maxWidth: 200), child: Padding( padding: const EdgeInsets.all(8), child: Row( children: [ GestureDetector( - onTap: () => BlocProvider.of(context).add( - const PlaybackEvent.toggleMute(), - ), + onTap: + () => BlocProvider.of( + context, + ).add(const PlaybackEvent.toggleMute()), child: Icon(!isMuted ? Icons.volume_mute : Icons.volume_off), ), Expanded( @@ -332,8 +326,10 @@ class _VolumeBar extends StatelessWidget { min: 0, max: 1, divisions: 100, - onChanged: (newValue) => BlocProvider.of(context) - .add(PlaybackEvent.setVolume(newValue)), + onChanged: + (newValue) => BlocProvider.of( + context, + ).add(PlaybackEvent.setVolume(newValue)), activeColor: Theme.of(context).colorScheme.onTertiaryContainer, inactiveColor: Theme.of(context).colorScheme.onSurface, ), @@ -356,49 +352,50 @@ class _PlaybackControls extends StatelessWidget { @override Widget build(BuildContext context) { - return LayoutBuilder(builder: (context, constraints) { - double iconSize = 24; - double playIconSize = 32; - double innerPadding = 16; - double playPadding = 20; - if (constraints.maxWidth < 500) { - iconSize = 21; - playIconSize = 28; - innerPadding = 14; - playPadding = 17; - } - return Row( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Padding( + return LayoutBuilder( + builder: (context, constraints) { + double iconSize = 24; + double playIconSize = 32; + double innerPadding = 16; + double playPadding = 20; + if (constraints.maxWidth < 500) { + iconSize = 21; + playIconSize = 28; + innerPadding = 14; + playPadding = 17; + } + return Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Padding( padding: EdgeInsets.fromLTRB(0, 0, innerPadding, 0), - child: Icon(Icons.shuffle, size: iconSize)), - Icon(Icons.skip_previous, size: iconSize), - Padding( - padding: EdgeInsets.fromLTRB(playPadding, 0, innerPadding, 0), - child: GestureDetector( - onTap: togglePlayPause, - child: Icon( - isPlaying ? Icons.pause_circle : Icons.play_circle, - size: playIconSize, + child: Icon(Icons.shuffle, size: iconSize), + ), + Icon(Icons.skip_previous, size: iconSize), + Padding( + padding: EdgeInsets.fromLTRB(playPadding, 0, innerPadding, 0), + child: GestureDetector( + onTap: togglePlayPause, + child: Icon( + isPlaying ? Icons.pause_circle : Icons.play_circle, + size: playIconSize, + ), ), ), - ), - Icon(Icons.skip_next, size: iconSize), - Padding( - padding: EdgeInsets.fromLTRB(innerPadding, 0, 0, 0), - child: Icon(Icons.repeat, size: iconSize), - ), - ], - ); - }); + Icon(Icons.skip_next, size: iconSize), + Padding( + padding: EdgeInsets.fromLTRB(innerPadding, 0, 0, 0), + child: Icon(Icons.repeat, size: iconSize), + ), + ], + ); + }, + ); } } class _AlbumArt extends StatelessWidget { - const _AlbumArt({ - required this.song, - }); + const _AlbumArt({required this.song}); final Song? song; @@ -409,21 +406,17 @@ class _AlbumArt extends StatelessWidget { child: SizedBox( width: 70, height: 70, - child: song != null - ? Image.asset(song!.image.image) - : Container( - color: Colors.pink[100], - ), + child: + song != null + ? Image.asset(song!.image.image) + : Container(color: Colors.pink[100]), ), ); } } class _SongDetails extends StatelessWidget { - const _SongDetails({ - required this.artist, - required this.song, - }); + const _SongDetails({required this.artist, required this.song}); final Artist? artist; final Song? song; @@ -455,9 +448,7 @@ class _SongDetails extends StatelessWidget { } class _FullScreenPlayer extends StatefulWidget { - const _FullScreenPlayer({ - required this.onClose, - }); + const _FullScreenPlayer({required this.onClose}); final VoidCallback onClose; @@ -489,29 +480,33 @@ class _FullScreenPlayerState extends State<_FullScreenPlayer> { final bloc = BlocProvider.of(context); return BlocBuilder( bloc: bloc, - builder: (context, state) => Theme( - data: ThemeProvider.of(context).dark(), - child: Scaffold( - body: LayoutBuilder( - builder: (context, dimens) { - return MouseRegion( - onHover: (_) { - setState(() { - _showControls = true; - }); - hideControls(); + builder: + (context, state) => Theme( + data: ThemeProvider.of(context).dark(), + child: Scaffold( + body: LayoutBuilder( + builder: (context, dimens) { + return MouseRegion( + onHover: (_) { + setState(() { + _showControls = true; + }); + hideControls(); + }, + child: buildPlayer(context, state, dimens), + ); }, - child: buildPlayer(context, state, dimens), - ); - }, + ), + ), ), - ), - ), ); } Widget buildPlayer( - BuildContext context, PlaybackState state, BoxConstraints dimens) { + BuildContext context, + PlaybackState state, + BoxConstraints dimens, + ) { final bloc = BlocProvider.of(context); final current = state.songWithProgress; final song = current?.song; @@ -519,26 +514,25 @@ class _FullScreenPlayerState extends State<_FullScreenPlayer> { fit: StackFit.expand, children: [ Positioned.fill( - child: current == null - ? const Center(child: Text('No song selected')) - : Container( - color: context.colors.shadow, - child: Opacity( - opacity: 0.3, - child: Image.asset( - song!.image.image, - fit: BoxFit.cover, + child: + current == null + ? const Center(child: Text('No song selected')) + : Container( + color: context.colors.shadow, + child: Opacity( + opacity: 0.3, + child: Image.asset(song!.image.image, fit: BoxFit.cover), ), ), - ), ), Positioned( top: 20, right: 20, child: IconButton( - color: song != null - ? context.colors.onSurface - : context.colors.onSurface, + color: + song != null + ? context.colors.onSurface + : context.colors.onSurface, icon: const Icon(Icons.fullscreen_exit), onPressed: widget.onClose, ), @@ -569,8 +563,9 @@ class _FullScreenPlayerState extends State<_FullScreenPlayer> { Text( song.artist.name, style: context.labelSmall!.copyWith( - fontSize: 20, - color: context.colors.onSurface.withAlpha(204)), + fontSize: 20, + color: context.colors.onSurface.withAlpha(204), + ), overflow: TextOverflow.clip, ), ], @@ -582,10 +577,7 @@ class _FullScreenPlayerState extends State<_FullScreenPlayer> { right: 20, left: 20, bottom: dimens.biggest.height * 0.2, - child: _ProgressBar( - progress: current?.progress, - song: song, - ), + child: _ProgressBar(progress: current?.progress, song: song), ), Positioned( right: 20, @@ -598,8 +590,8 @@ class _FullScreenPlayerState extends State<_FullScreenPlayer> { scale: 1.5, child: _PlaybackControls( isPlaying: state.isPlaying, - togglePlayPause: () => - bloc.add(const PlaybackEvent.togglePlayPause()), + togglePlayPause: + () => bloc.add(const PlaybackEvent.togglePlayPause()), ), ), ), @@ -611,9 +603,7 @@ class _FullScreenPlayerState extends State<_FullScreenPlayer> { } class _MobilePlayer extends StatelessWidget { - const _MobilePlayer({ - required this.onClose, - }); + const _MobilePlayer({required this.onClose}); final VoidCallback onClose; @@ -622,46 +612,52 @@ class _MobilePlayer extends StatelessWidget { final bloc = BlocProvider.of(context); return BlocBuilder( bloc: bloc, - builder: (context, state) => Theme( - data: ThemeProvider.of(context).dark(), - child: Scaffold( - body: LayoutBuilder( - builder: (context, dimens) { - return buildPlayer(context, state, dimens); - }, + builder: + (context, state) => Theme( + data: ThemeProvider.of(context).dark(), + child: Scaffold( + body: LayoutBuilder( + builder: (context, dimens) { + return buildPlayer(context, state, dimens); + }, + ), + ), ), - ), - ), ); } Widget buildPlayer( - BuildContext context, PlaybackState state, BoxConstraints dimens) { + BuildContext context, + PlaybackState state, + BoxConstraints dimens, + ) { final bloc = BlocProvider.of(context); final current = state.songWithProgress; return Stack( children: [ Positioned.fill( - child: current == null - ? const Center(child: Text('No song selected')) - : Container( - color: context.colors.shadow, - child: Opacity( - opacity: 0.3, - child: Image.asset( - current.song.image.image, - fit: BoxFit.cover, + child: + current == null + ? const Center(child: Text('No song selected')) + : Container( + color: context.colors.shadow, + child: Opacity( + opacity: 0.3, + child: Image.asset( + current.song.image.image, + fit: BoxFit.cover, + ), ), ), - ), ), Positioned( top: 20, left: 20, child: IconButton( - color: current?.song != null - ? context.colors.onSurface - : context.colors.onSurface, + color: + current?.song != null + ? context.colors.onSurface + : context.colors.onSurface, icon: const RotatedBox( quarterTurns: 1, child: Icon(Icons.chevron_right), @@ -676,10 +672,7 @@ class _MobilePlayer extends StatelessWidget { left: 0, right: 0, height: dimens.biggest.height * 0.5, - child: Image.asset( - current.song.image.image, - fit: BoxFit.contain, - ), + child: Image.asset(current.song.image.image, fit: BoxFit.contain), ), Positioned( left: 0, @@ -705,8 +698,9 @@ class _MobilePlayer extends StatelessWidget { Text( current.song.artist.name, style: context.labelSmall!.copyWith( - fontSize: 12, - color: context.colors.onSurface.withAlpha(204)), + fontSize: 12, + color: context.colors.onSurface.withAlpha(204), + ), overflow: TextOverflow.clip, ), ], @@ -718,15 +712,12 @@ class _MobilePlayer extends StatelessWidget { scale: 1.5, child: _PlaybackControls( isPlaying: state.isPlaying, - togglePlayPause: () => - bloc.add(const PlaybackEvent.togglePlayPause()), + togglePlayPause: + () => bloc.add(const PlaybackEvent.togglePlayPause()), ), ), ), - _ProgressBar( - progress: current.progress, - song: current.song, - ), + _ProgressBar(progress: current.progress, song: current.song), ], ), ), diff --git a/boring_to_beautiful/step_06/lib/src/shared/views/brightness_toggle.dart b/boring_to_beautiful/step_06/lib/src/shared/views/brightness_toggle.dart index 46dde4810f..5b5332392b 100644 --- a/boring_to_beautiful/step_06/lib/src/shared/views/brightness_toggle.dart +++ b/boring_to_beautiful/step_06/lib/src/shared/views/brightness_toggle.dart @@ -13,9 +13,10 @@ class BrightnessToggle extends StatelessWidget { Widget build(BuildContext context) { final isDark = Theme.of(context).brightness == Brightness.dark; return IconButton( - icon: Theme.of(context).brightness == Brightness.light - ? const Icon(Icons.brightness_3) - : const Icon(Icons.brightness_7), + icon: + Theme.of(context).brightness == Brightness.light + ? const Icon(Icons.brightness_3) + : const Icon(Icons.brightness_7), onPressed: () { final themeProvider = ThemeProvider.of(context); final settings = themeProvider.settings.value; diff --git a/boring_to_beautiful/step_06/lib/src/shared/views/center_row.dart b/boring_to_beautiful/step_06/lib/src/shared/views/center_row.dart index 36d428e3b8..c1f3effcc2 100644 --- a/boring_to_beautiful/step_06/lib/src/shared/views/center_row.dart +++ b/boring_to_beautiful/step_06/lib/src/shared/views/center_row.dart @@ -5,23 +5,12 @@ import 'package:flutter/material.dart'; class CenterRow extends StatelessWidget { - const CenterRow({ - super.key, - required this.child, - }); + const CenterRow({super.key, required this.child}); final Widget child; @override Widget build(BuildContext context) { - return Row( - children: [ - Expanded( - child: Center( - child: child, - ), - ), - ], - ); + return Row(children: [Expanded(child: Center(child: child))]); } } diff --git a/boring_to_beautiful/step_06/lib/src/shared/views/clickable.dart b/boring_to_beautiful/step_06/lib/src/shared/views/clickable.dart index cd7ef46268..f192f0b135 100644 --- a/boring_to_beautiful/step_06/lib/src/shared/views/clickable.dart +++ b/boring_to_beautiful/step_06/lib/src/shared/views/clickable.dart @@ -14,10 +14,7 @@ class Clickable extends StatelessWidget { Widget build(BuildContext context) { return MouseRegion( cursor: SystemMouseCursors.click, - child: GestureDetector( - onTap: onTap, - child: child, - ), + child: GestureDetector(onTap: onTap, child: child), ); } } diff --git a/boring_to_beautiful/step_06/lib/src/shared/views/events.dart b/boring_to_beautiful/step_06/lib/src/shared/views/events.dart index ed38465460..ab9140e56d 100644 --- a/boring_to_beautiful/step_06/lib/src/shared/views/events.dart +++ b/boring_to_beautiful/step_06/lib/src/shared/views/events.dart @@ -24,43 +24,18 @@ class Events extends StatelessWidget { child: DataTable( horizontalMargin: 5.0, columns: const [ - DataColumn( - label: Text( - 'Date', - ), - numeric: true, - ), - DataColumn( - label: Text( - 'Event', - ), - ), - DataColumn( - label: Text( - 'Location', - ), - ), - DataColumn( - label: Text( - 'More info', - ), - ), + DataColumn(label: Text('Date'), numeric: true), + DataColumn(label: Text('Event')), + DataColumn(label: Text('Location')), + DataColumn(label: Text('More info')), ], rows: [ for (final event in artist.events) DataRow( cells: [ - DataCell( - Text(event.date), - ), - DataCell( - Row(children: [ - Expanded(child: Text(event.title)), - ]), - ), - DataCell( - Text(event.location), - ), + DataCell(Text(event.date)), + DataCell(Row(children: [Expanded(child: Text(event.title))])), + DataCell(Text(event.location)), DataCell( Clickable( child: Text( @@ -70,8 +45,9 @@ class Events extends StatelessWidget { decoration: TextDecoration.underline, ), ), - onTap: () => - launchUrl(Uri.parse('https://docs.flutter.dev')), + onTap: + () => + launchUrl(Uri.parse('https://docs.flutter.dev')), ), ), ], diff --git a/boring_to_beautiful/step_06/lib/src/shared/views/hover_toggle.dart b/boring_to_beautiful/step_06/lib/src/shared/views/hover_toggle.dart index ec98c2863c..649cfcab63 100644 --- a/boring_to_beautiful/step_06/lib/src/shared/views/hover_toggle.dart +++ b/boring_to_beautiful/step_06/lib/src/shared/views/hover_toggle.dart @@ -31,9 +31,10 @@ class _HoverToggleState extends State with MaterialStateMixin { cursor: isHovered ? SystemMouseCursors.click : MouseCursor.defer, onEnter: (_) => setMaterialState(WidgetState.hovered, true), onExit: (_) => setMaterialState(WidgetState.hovered, false), - child: widget.mode == HoverMode.replace - ? _buildReplaceableChildren() - : _buildChildrenStack(), + child: + widget.mode == HoverMode.replace + ? _buildReplaceableChildren() + : _buildChildrenStack(), ), ); } @@ -41,12 +42,7 @@ class _HoverToggleState extends State with MaterialStateMixin { Widget _buildChildrenStack() { Widget child = isHovered ? Opacity(opacity: 0.2, child: widget.child) : widget.child; - return Stack( - children: [ - child, - if (isHovered) widget.hoverChild, - ], - ); + return Stack(children: [child, if (isHovered) widget.hoverChild]); } Widget _buildReplaceableChildren() => diff --git a/boring_to_beautiful/step_06/lib/src/shared/views/hoverable_song_play_button.dart b/boring_to_beautiful/step_06/lib/src/shared/views/hoverable_song_play_button.dart index 512f3d1d3c..dd588e3dbe 100644 --- a/boring_to_beautiful/step_06/lib/src/shared/views/hoverable_song_play_button.dart +++ b/boring_to_beautiful/step_06/lib/src/shared/views/hoverable_song_play_button.dart @@ -29,9 +29,10 @@ class HoverableSongPlayButton extends StatelessWidget { hoverChild: Center( child: GestureDetector( child: const Icon(Icons.play_arrow), - onTap: () => BlocProvider.of(context).add( - PlaybackEvent.changeSong(song), - ), + onTap: + () => BlocProvider.of( + context, + ).add(PlaybackEvent.changeSong(song)), ), ), mode: hoverMode, diff --git a/boring_to_beautiful/step_06/lib/src/shared/views/image_card.dart b/boring_to_beautiful/step_06/lib/src/shared/views/image_card.dart index 0af9f75f33..6e7f6cd42d 100644 --- a/boring_to_beautiful/step_06/lib/src/shared/views/image_card.dart +++ b/boring_to_beautiful/step_06/lib/src/shared/views/image_card.dart @@ -7,13 +7,14 @@ import '../../shared/extensions.dart'; import 'outlined_card.dart'; class ImageCard extends StatelessWidget { - const ImageCard( - {super.key, - required this.title, - required this.details, - required this.image, - this.subtitle, - this.clickable = false}); + const ImageCard({ + super.key, + required this.title, + required this.details, + required this.image, + this.subtitle, + this.clickable = false, + }); final String title; final String? subtitle; @@ -28,54 +29,51 @@ class ImageCard extends StatelessWidget { clickable: clickable, child: Padding( padding: const EdgeInsets.all(8.0), - child: LayoutBuilder(builder: (context, constraints) { - return Row( - children: [ - if (constraints.maxWidth > 600) - SizedBox( - width: 170, - height: 170, - child: Image.asset( - image, - fit: BoxFit.cover, + child: LayoutBuilder( + builder: (context, constraints) { + return Row( + children: [ + if (constraints.maxWidth > 600) + SizedBox( + width: 170, + height: 170, + child: Image.asset(image, fit: BoxFit.cover), ), - ), - Expanded( - child: Padding( - padding: padding, - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Padding( - padding: const EdgeInsets.only(bottom: 5), - child: Text( - title, - style: context.titleLarge! - .copyWith(fontWeight: FontWeight.bold), - ), - ), - if (subtitle != null) + Expanded( + child: Padding( + padding: padding, + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ Padding( - padding: const EdgeInsets.only(bottom: 10), + padding: const EdgeInsets.only(bottom: 5), child: Text( - subtitle!, - style: context.labelMedium, + title, + style: context.titleLarge!.copyWith( + fontWeight: FontWeight.bold, + ), ), ), - Text( - details, - style: context.labelMedium?.copyWith( - fontSize: 16, - height: 1.25, + if (subtitle != null) + Padding( + padding: const EdgeInsets.only(bottom: 10), + child: Text(subtitle!, style: context.labelMedium), + ), + Text( + details, + style: context.labelMedium?.copyWith( + fontSize: 16, + height: 1.25, + ), ), - ), - ], + ], + ), ), ), - ), - ], - ); - }), + ], + ); + }, + ), ), ); } diff --git a/boring_to_beautiful/step_06/lib/src/shared/views/image_tile.dart b/boring_to_beautiful/step_06/lib/src/shared/views/image_tile.dart index 4f2bbebb96..dd99152af5 100644 --- a/boring_to_beautiful/step_06/lib/src/shared/views/image_tile.dart +++ b/boring_to_beautiful/step_06/lib/src/shared/views/image_tile.dart @@ -21,19 +21,17 @@ class ImageTile extends StatelessWidget { @override Widget build(BuildContext context) { return OutlinedCard( - child: Column(crossAxisAlignment: CrossAxisAlignment.start, children: [ - Row( - children: [ - Expanded( - child: Image.asset(image, fit: BoxFit.cover), - ), - ], - ), - Column( - mainAxisAlignment: MainAxisAlignment.center, - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - Padding( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + children: [Expanded(child: Image.asset(image, fit: BoxFit.cover))], + ), + Column( + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Padding( padding: const EdgeInsets.fromLTRB(10, 5, 10, 5), child: Text( title, @@ -43,20 +41,25 @@ class ImageTile extends StatelessWidget { ), overflow: TextOverflow.ellipsis, maxLines: 1, - )), - Padding( - padding: const EdgeInsets.symmetric(vertical: 5, horizontal: 10), - child: Text( - subtitle, - overflow: TextOverflow.ellipsis, - style: context.labelSmall, - maxLines: 2, - textAlign: TextAlign.center, + ), ), - ), - ], - ) - ]), + Padding( + padding: const EdgeInsets.symmetric( + vertical: 5, + horizontal: 10, + ), + child: Text( + subtitle, + overflow: TextOverflow.ellipsis, + style: context.labelSmall, + maxLines: 2, + textAlign: TextAlign.center, + ), + ), + ], + ), + ], + ), ); } } diff --git a/boring_to_beautiful/step_06/lib/src/shared/views/outlined_card.dart b/boring_to_beautiful/step_06/lib/src/shared/views/outlined_card.dart index 0d886e2c54..ff49275dc9 100644 --- a/boring_to_beautiful/step_06/lib/src/shared/views/outlined_card.dart +++ b/boring_to_beautiful/step_06/lib/src/shared/views/outlined_card.dart @@ -5,11 +5,7 @@ import 'package:flutter/material.dart'; class OutlinedCard extends StatefulWidget { - const OutlinedCard({ - super.key, - required this.child, - this.clickable = true, - }); + const OutlinedCard({super.key, required this.child, this.clickable = true}); final Widget child; final bool clickable; @@ -22,9 +18,10 @@ class _OutlinedCardState extends State { @override Widget build(BuildContext context) { return MouseRegion( - cursor: widget.clickable - ? SystemMouseCursors.click - : SystemMouseCursors.basic, + cursor: + widget.clickable + ? SystemMouseCursors.click + : SystemMouseCursors.basic, child: Container( decoration: BoxDecoration( border: Border.all( diff --git a/boring_to_beautiful/step_06/lib/src/shared/views/play_pause_listener.dart b/boring_to_beautiful/step_06/lib/src/shared/views/play_pause_listener.dart index 52fad00863..6b4fc66709 100644 --- a/boring_to_beautiful/step_06/lib/src/shared/views/play_pause_listener.dart +++ b/boring_to_beautiful/step_06/lib/src/shared/views/play_pause_listener.dart @@ -16,10 +16,7 @@ import '../playback/bloc/bloc.dart'; /// shortcuts. By sitting below that machinery, this installs a global Spacebar /// listener which toggles Playback, as is customary in music-playing apps. class PlayPauseListener extends StatelessWidget { - const PlayPauseListener({ - super.key, - required this.child, - }); + const PlayPauseListener({super.key, required this.child}); final Widget child; @@ -28,9 +25,7 @@ class PlayPauseListener extends StatelessWidget { // Immediately catch any [_PlayPauseIntent] events released by the inner // [Shortcuts] widget. return Actions( - actions: >{ - _PlayPauseIntent: _PlayPauseAction(), - }, + actions: >{_PlayPauseIntent: _PlayPauseAction()}, child: Shortcuts( // Register a shortcut for Spacebar presses that release a // [_PlayPauseIntent] up the tree to the nearest [Actions] widget. @@ -38,9 +33,9 @@ class PlayPauseListener extends StatelessWidget { const SingleActivator(LogicalKeyboardKey.space): _PlayPauseIntent( // Create a closure which sends a [TogglePlayPause] event to the // [PlaybackBloc]. - () => BlocProvider.of(context).add( - const PlaybackEvent.togglePlayPause(), - ), + () => BlocProvider.of( + context, + ).add(const PlaybackEvent.togglePlayPause()), ), }, child: child, diff --git a/boring_to_beautiful/step_06/lib/src/shared/views/root_layout.dart b/boring_to_beautiful/step_06/lib/src/shared/views/root_layout.dart index 878b57d729..ff6270248c 100644 --- a/boring_to_beautiful/step_06/lib/src/shared/views/root_layout.dart +++ b/boring_to_beautiful/step_06/lib/src/shared/views/root_layout.dart @@ -29,36 +29,37 @@ class RootLayout extends StatelessWidget { final bloc = BlocProvider.of(context); return BlocBuilder( bloc: bloc, - builder: (context, state) => LayoutBuilder(builder: (context, dimens) { - void onSelected(int index) { - final destination = router.destinations[index]; - go.GoRouter.of(context).go(destination.route); - } + builder: + (context, state) => LayoutBuilder( + builder: (context, dimens) { + void onSelected(int index) { + final destination = router.destinations[index]; + go.GoRouter.of(context).go(destination.route); + } - final current = state.songWithProgress; - return AdaptiveNavigation( - key: _navigationRailKey, - destinations: router.destinations - .map((e) => NavigationDestination( - icon: e.icon, - label: e.label, - )) - .toList(), - selectedIndex: currentIndex, - onDestinationSelected: onSelected, - child: Column( - children: [ - Expanded( - child: _Switcher( - key: _switcherKey, - child: child, + final current = state.songWithProgress; + return AdaptiveNavigation( + key: _navigationRailKey, + destinations: + router.destinations + .map( + (e) => NavigationDestination( + icon: e.icon, + label: e.label, + ), + ) + .toList(), + selectedIndex: currentIndex, + onDestinationSelected: onSelected, + child: Column( + children: [ + Expanded(child: _Switcher(key: _switcherKey, child: child)), + if (current != null) const BottomBar(), + ], ), - ), - if (current != null) const BottomBar(), - ], + ); + }, ), - ); - }), ); } } @@ -66,21 +67,18 @@ class RootLayout extends StatelessWidget { class _Switcher extends StatelessWidget { final Widget child; - const _Switcher({ - required this.child, - super.key, - }); + const _Switcher({required this.child, super.key}); @override Widget build(BuildContext context) { return UniversalPlatform.isDesktop ? child : AnimatedSwitcher( - key: key, - duration: const Duration(milliseconds: 200), - switchInCurve: Curves.easeInOut, - switchOutCurve: Curves.easeInOut, - child: child, - ); + key: key, + duration: const Duration(milliseconds: 200), + switchInCurve: Curves.easeInOut, + switchOutCurve: Curves.easeInOut, + child: child, + ); } } diff --git a/boring_to_beautiful/step_06/lib/src/shared/views/sidebar.dart b/boring_to_beautiful/step_06/lib/src/shared/views/sidebar.dart index 78c19b4d22..8815223b22 100644 --- a/boring_to_beautiful/step_06/lib/src/shared/views/sidebar.dart +++ b/boring_to_beautiful/step_06/lib/src/shared/views/sidebar.dart @@ -26,10 +26,7 @@ class SideBar extends StatelessWidget { title: const Text('Home'), onTap: () => GoRouter.of(context).go('/'), ), - const ListTile( - leading: Icon(Icons.search), - title: Text('Search'), - ), + const ListTile(leading: Icon(Icons.search), title: Text('Search')), ListTile( leading: const Icon(Icons.person), title: const Text('Artists'), @@ -64,10 +61,7 @@ class PlaylistNav extends StatelessWidget { children: [ Padding( padding: const EdgeInsets.only(left: 16, top: 16), - child: Text( - 'Playlists', - style: context.titleMedium, - ), + child: Text('Playlists', style: context.titleMedium), ), Expanded( child: ListView( @@ -114,10 +108,9 @@ class _PlaylistNavItemState extends State<_PlaylistNavItem> { @override void initState() { super.initState(); - _focusNode = FocusNode(debugLabel: widget.title) - ..addListener(() { - setState(() => _isSelected = _focusNode.hasPrimaryFocus); - }); + _focusNode = FocusNode(debugLabel: widget.title)..addListener(() { + setState(() => _isSelected = _focusNode.hasPrimaryFocus); + }); } @override diff --git a/boring_to_beautiful/step_06/pubspec.yaml b/boring_to_beautiful/step_06/pubspec.yaml index 0bc88d24c3..ad540a91c3 100644 --- a/boring_to_beautiful/step_06/pubspec.yaml +++ b/boring_to_beautiful/step_06/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: "none" version: 1.0.0 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 dependencies: flutter: diff --git a/boring_to_beautiful/step_07/lib/src/features/artists/view/artist_bio.dart b/boring_to_beautiful/step_07/lib/src/features/artists/view/artist_bio.dart index 227b8e91f9..8b614421db 100644 --- a/boring_to_beautiful/step_07/lib/src/features/artists/view/artist_bio.dart +++ b/boring_to_beautiful/step_07/lib/src/features/artists/view/artist_bio.dart @@ -18,9 +18,7 @@ class ArtistBio extends StatelessWidget { artist.bio, style: context.bodyLarge!.copyWith( fontSize: 16, - color: context.colors.onSurface.withAlpha( - 222, - ), + color: context.colors.onSurface.withAlpha(222), ), ); } diff --git a/boring_to_beautiful/step_07/lib/src/features/artists/view/artist_card.dart b/boring_to_beautiful/step_07/lib/src/features/artists/view/artist_card.dart index a63967f51d..1a56376a87 100644 --- a/boring_to_beautiful/step_07/lib/src/features/artists/view/artist_card.dart +++ b/boring_to_beautiful/step_07/lib/src/features/artists/view/artist_card.dart @@ -11,10 +11,7 @@ import '../../../shared/views/outlined_card.dart'; import '../../../shared/views/views.dart'; class ArtistCard extends StatelessWidget { - const ArtistCard({ - super.key, - required this.artist, - }); + const ArtistCard({super.key, required this.artist}); final Artist artist; @@ -24,65 +21,66 @@ class ArtistCard extends StatelessWidget { return OutlinedCard( child: LayoutBuilder( - builder: (context, dimens) => Row( - children: [ - SizedBox( - width: dimens.maxWidth * 0.4, - child: Image.asset( - artist.image.image, - fit: BoxFit.cover, - ), - ), - Expanded( - child: Padding( - padding: const EdgeInsets.only(left: 16), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Padding( - padding: const EdgeInsets.fromLTRB(0, 0, 15, 0), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text( - artist.name, - style: context.titleMedium, - overflow: TextOverflow.ellipsis, - maxLines: 1, - ), - const SizedBox(height: 10), - Text( - artist.bio, - overflow: TextOverflow.ellipsis, - style: context.labelSmall, - maxLines: 3, - ), - ]), - ), - if (dimens.maxHeight > 100) - Row( - children: [ - HoverableSongPlayButton( - size: const Size(50, 50), - song: nowPlaying, - child: Icon(Icons.play_circle, - color: context.colors.tertiary), + builder: + (context, dimens) => Row( + children: [ + SizedBox( + width: dimens.maxWidth * 0.4, + child: Image.asset(artist.image.image, fit: BoxFit.cover), + ), + Expanded( + child: Padding( + padding: const EdgeInsets.only(left: 16), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Padding( + padding: const EdgeInsets.fromLTRB(0, 0, 15, 0), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + artist.name, + style: context.titleMedium, + overflow: TextOverflow.ellipsis, + maxLines: 1, + ), + const SizedBox(height: 10), + Text( + artist.bio, + overflow: TextOverflow.ellipsis, + style: context.labelSmall, + maxLines: 3, + ), + ], ), - Text( - nowPlaying.title, - maxLines: 1, - overflow: TextOverflow.clip, - style: context.labelMedium, + ), + if (dimens.maxHeight > 100) + Row( + children: [ + HoverableSongPlayButton( + size: const Size(50, 50), + song: nowPlaying, + child: Icon( + Icons.play_circle, + color: context.colors.tertiary, + ), + ), + Text( + nowPlaying.title, + maxLines: 1, + overflow: TextOverflow.clip, + style: context.labelMedium, + ), + ], ), - ], - ), - ], + ], + ), + ), ), - ), + ], ), - ], - ), ), ); } diff --git a/boring_to_beautiful/step_07/lib/src/features/artists/view/artist_events.dart b/boring_to_beautiful/step_07/lib/src/features/artists/view/artist_events.dart index 8b064759c6..58b61b37df 100644 --- a/boring_to_beautiful/step_07/lib/src/features/artists/view/artist_events.dart +++ b/boring_to_beautiful/step_07/lib/src/features/artists/view/artist_events.dart @@ -70,53 +70,32 @@ class ArtistEvents extends StatelessWidget { ); }, columns: const [ - DataColumn( - label: Text( - 'Date', - ), - numeric: true, - ), - DataColumn( - label: Text( - 'Event', - ), - ), - DataColumn( - label: Text( - 'Location', - ), - ), - DataColumn( - label: Text( - 'More info', - ), - ), + DataColumn(label: Text('Date'), numeric: true), + DataColumn(label: Text('Event')), + DataColumn(label: Text('Location')), + DataColumn(label: Text('More info')), ], - rowBuilder: (item, index) => DataRow.byIndex(index: index, cells: [ - DataCell( - Text(item.date), - ), - DataCell( - Row(children: [ - Expanded(child: Text(item.title)), - ]), - ), - DataCell( - Text(item.location), - ), - DataCell( - Clickable( - child: Text( - item.link, - style: TextStyle( - color: linkColor.value(theme), - decoration: TextDecoration.underline, + rowBuilder: + (item, index) => DataRow.byIndex( + index: index, + cells: [ + DataCell(Text(item.date)), + DataCell(Row(children: [Expanded(child: Text(item.title))])), + DataCell(Text(item.location)), + DataCell( + Clickable( + child: Text( + item.link, + style: TextStyle( + color: linkColor.value(theme), + decoration: TextDecoration.underline, + ), + ), + onTap: () => launchUrl(Uri.parse('https://docs.flutter.dev')), + ), ), - ), - onTap: () => launchUrl(Uri.parse('https://docs.flutter.dev')), + ], ), - ), - ]), ); } } diff --git a/boring_to_beautiful/step_07/lib/src/features/artists/view/artist_ranked_songs.dart b/boring_to_beautiful/step_07/lib/src/features/artists/view/artist_ranked_songs.dart index e484ecb3d7..3d1f4e2cf1 100644 --- a/boring_to_beautiful/step_07/lib/src/features/artists/view/artist_ranked_songs.dart +++ b/boring_to_beautiful/step_07/lib/src/features/artists/view/artist_ranked_songs.dart @@ -27,52 +27,42 @@ class ArtistRankedSongs extends StatelessWidget { title: Text(song.title), subtitle: Text(song.length.toHumanizedString()), trailing: Text(song.ranking.toString()), - onTap: () => BlocProvider.of(context).add( - PlaybackEvent.changeSong(song), - ), + onTap: + () => BlocProvider.of( + context, + ).add(PlaybackEvent.changeSong(song)), ); }, columns: const [ - DataColumn( - label: Text( - 'Ranking', - ), - numeric: true, - ), - DataColumn( - label: Text( - 'Title', - ), - ), - DataColumn( - label: Text( - 'Length', - ), - ), + DataColumn(label: Text('Ranking'), numeric: true), + DataColumn(label: Text('Title')), + DataColumn(label: Text('Length')), ], - rowBuilder: (song, index) => DataRow.byIndex(index: index, cells: [ - DataCell( - HoverableSongPlayButton( - song: song, - child: Center( - child: Text(song.ranking.toString()), - ), + rowBuilder: + (song, index) => DataRow.byIndex( + index: index, + cells: [ + DataCell( + HoverableSongPlayButton( + song: song, + child: Center(child: Text(song.ranking.toString())), + ), + ), + DataCell( + Row( + children: [ + Padding( + padding: const EdgeInsets.all(2), + child: ClippedImage(song.image.image), + ), + const SizedBox(width: 5.0), + Expanded(child: Text(song.title)), + ], + ), + ), + DataCell(Text(song.length.toHumanizedString())), + ], ), - ), - DataCell( - Row(children: [ - Padding( - padding: const EdgeInsets.all(2), - child: ClippedImage(song.image.image), - ), - const SizedBox(width: 5.0), - Expanded(child: Text(song.title)), - ]), - ), - DataCell( - Text(song.length.toHumanizedString()), - ), - ]), ); } } diff --git a/boring_to_beautiful/step_07/lib/src/features/artists/view/artist_updates.dart b/boring_to_beautiful/step_07/lib/src/features/artists/view/artist_updates.dart index e5b8bb5fe9..a0fabf7330 100644 --- a/boring_to_beautiful/step_07/lib/src/features/artists/view/artist_updates.dart +++ b/boring_to_beautiful/step_07/lib/src/features/artists/view/artist_updates.dart @@ -30,7 +30,7 @@ class ArtistUpdates extends StatelessWidget { child: Text(update), ), ), - ) + ), ], ); } diff --git a/boring_to_beautiful/step_07/lib/src/features/artists/view/artists_screen.dart b/boring_to_beautiful/step_07/lib/src/features/artists/view/artists_screen.dart index 8afe759807..225d74847b 100644 --- a/boring_to_beautiful/step_07/lib/src/features/artists/view/artists_screen.dart +++ b/boring_to_beautiful/step_07/lib/src/features/artists/view/artists_screen.dart @@ -17,33 +17,33 @@ class ArtistsScreen extends StatelessWidget { Widget build(BuildContext context) { final artistsProvider = ArtistsProvider(); final artists = artistsProvider.artists; - return LayoutBuilder(builder: (context, constraints) { - return Scaffold( - primary: false, - appBar: AppBar( - title: const Text('ARTISTS'), - toolbarHeight: kToolbarHeight * 2, - ), - body: GridView.builder( - padding: const EdgeInsets.all(15), - gridDelegate: SliverGridDelegateWithFixedCrossAxisCount( - crossAxisCount: max(1, (constraints.maxWidth ~/ 400).toInt()), - childAspectRatio: 2.5, - mainAxisSpacing: 10, - crossAxisSpacing: 10, + return LayoutBuilder( + builder: (context, constraints) { + return Scaffold( + primary: false, + appBar: AppBar( + title: const Text('ARTISTS'), + toolbarHeight: kToolbarHeight * 2, ), - itemCount: artists.length, - itemBuilder: (context, index) { - final artist = artists[index]; - return GestureDetector( - child: ArtistCard( - artist: artist, - ), - onTap: () => GoRouter.of(context).go('/artists/${artist.id}'), - ); - }, - ), - ); - }); + body: GridView.builder( + padding: const EdgeInsets.all(15), + gridDelegate: SliverGridDelegateWithFixedCrossAxisCount( + crossAxisCount: max(1, (constraints.maxWidth ~/ 400).toInt()), + childAspectRatio: 2.5, + mainAxisSpacing: 10, + crossAxisSpacing: 10, + ), + itemCount: artists.length, + itemBuilder: (context, index) { + final artist = artists[index]; + return GestureDetector( + child: ArtistCard(artist: artist), + onTap: () => GoRouter.of(context).go('/artists/${artist.id}'), + ); + }, + ), + ); + }, + ); } } diff --git a/boring_to_beautiful/step_07/lib/src/features/home/view/home_artists.dart b/boring_to_beautiful/step_07/lib/src/features/home/view/home_artists.dart index beb2c0ece4..b5a3a33ecd 100644 --- a/boring_to_beautiful/step_07/lib/src/features/home/view/home_artists.dart +++ b/boring_to_beautiful/step_07/lib/src/features/home/view/home_artists.dart @@ -22,27 +22,25 @@ class HomeArtists extends StatelessWidget { Widget build(BuildContext context) { return Padding( padding: const EdgeInsets.all(15), - child: constraints.isMobile - ? Column( - children: [ - for (final artist in artists) buildTile(context, artist), - ], - ) - : Row(children: [ - for (final artist in artists) - Flexible( - flex: 1, - child: buildTile(context, artist), - ), - ]), + child: + constraints.isMobile + ? Column( + children: [ + for (final artist in artists) buildTile(context, artist), + ], + ) + : Row( + children: [ + for (final artist in artists) + Flexible(flex: 1, child: buildTile(context, artist)), + ], + ), ); } Widget buildTile(BuildContext context, Artist artist) { return ListTile( - leading: CircleAvatar( - backgroundImage: AssetImage(artist.image.image), - ), + leading: CircleAvatar(backgroundImage: AssetImage(artist.image.image)), title: Text( artist.updates.first, maxLines: 2, diff --git a/boring_to_beautiful/step_07/lib/src/features/home/view/home_recent.dart b/boring_to_beautiful/step_07/lib/src/features/home/view/home_recent.dart index c77500a663..8ba86d117d 100644 --- a/boring_to_beautiful/step_07/lib/src/features/home/view/home_recent.dart +++ b/boring_to_beautiful/step_07/lib/src/features/home/view/home_recent.dart @@ -12,8 +12,11 @@ import '../../../shared/views/image_clipper.dart'; import '../../../shared/views/outlined_card.dart'; class HomeRecent extends StatelessWidget { - const HomeRecent( - {super.key, required this.playlists, this.axis = Axis.horizontal}); + const HomeRecent({ + super.key, + required this.playlists, + this.axis = Axis.horizontal, + }); final List playlists; final Axis axis; @@ -43,8 +46,10 @@ class HomeRecent extends StatelessWidget { Row( children: [ Expanded( - child: Image.asset(playlist.cover.image, - fit: BoxFit.cover), + child: Image.asset( + playlist.cover.image, + fit: BoxFit.cover, + ), ), ], ), @@ -79,10 +84,7 @@ class HomeRecent extends StatelessWidget { crossAxisAlignment: CrossAxisAlignment.center, mainAxisSize: MainAxisSize.max, children: [ - ClippedImage( - playlist.cover.image, - height: 200, - ), + ClippedImage(playlist.cover.image, height: 200), Expanded( child: Center( child: Padding( @@ -104,23 +106,24 @@ class HomeRecent extends StatelessWidget { return Column( children: [ Padding( - padding: const EdgeInsets.fromLTRB(10, 5, 10, 5), - child: Text( - playlist.title, - style: context.titleSmall!.copyWith( - fontWeight: FontWeight.bold, - ), - overflow: TextOverflow.ellipsis, - maxLines: 1, - textAlign: TextAlign.center, - )), + padding: const EdgeInsets.fromLTRB(10, 5, 10, 5), + child: Text( + playlist.title, + style: context.titleSmall!.copyWith(fontWeight: FontWeight.bold), + overflow: TextOverflow.ellipsis, + maxLines: 1, + textAlign: TextAlign.center, + ), + ), Padding( padding: const EdgeInsets.symmetric(vertical: 5, horizontal: 10), - child: Text(playlist.description, - overflow: TextOverflow.ellipsis, - style: context.labelSmall, - maxLines: 2, - textAlign: TextAlign.center), + child: Text( + playlist.description, + overflow: TextOverflow.ellipsis, + style: context.labelSmall, + maxLines: 2, + textAlign: TextAlign.center, + ), ), ], ); diff --git a/boring_to_beautiful/step_07/lib/src/features/home/view/home_screen.dart b/boring_to_beautiful/step_07/lib/src/features/home/view/home_screen.dart index a763bbd45a..c142c1e4c2 100644 --- a/boring_to_beautiful/step_07/lib/src/features/home/view/home_screen.dart +++ b/boring_to_beautiful/step_07/lib/src/features/home/view/home_screen.dart @@ -49,33 +49,31 @@ class _HomeScreenState extends State { ), ), body: LayoutBuilder( - builder: (context, constraints) => TabBarView( - children: [ - SingleChildScrollView( - child: Column( - children: [ - const HomeHighlight(), - HomeArtists( - artists: artists, - constraints: constraints, + builder: + (context, constraints) => TabBarView( + children: [ + SingleChildScrollView( + child: Column( + children: [ + const HomeHighlight(), + HomeArtists( + artists: artists, + constraints: constraints, + ), + ], ), - ], - ), - ), - HomeRecent( - playlists: playlists, - axis: Axis.vertical, - ), - PlaylistSongs( - playlist: topSongs, - constraints: constraints, - ), - PlaylistSongs( - playlist: newReleases, - constraints: constraints, + ), + HomeRecent(playlists: playlists, axis: Axis.vertical), + PlaylistSongs( + playlist: topSongs, + constraints: constraints, + ), + PlaylistSongs( + playlist: newReleases, + constraints: constraints, + ), + ], ), - ], - ), ), ), ); @@ -109,10 +107,11 @@ class _HomeScreenState extends State { children: [ const HomeHighlight(), LayoutBuilder( - builder: (context, constraints) => HomeArtists( - artists: artists, - constraints: constraints, - ), + builder: + (context, constraints) => HomeArtists( + artists: artists, + constraints: constraints, + ), ), ], ), @@ -132,9 +131,7 @@ class _HomeScreenState extends State { style: context.headlineSmall, ), ), - HomeRecent( - playlists: playlists, - ), + HomeRecent(playlists: playlists), ], ), ), @@ -152,19 +149,21 @@ class _HomeScreenState extends State { crossAxisAlignment: CrossAxisAlignment.start, children: [ Padding( - padding: - const EdgeInsets.only(left: 8, bottom: 8), + padding: const EdgeInsets.only( + left: 8, + bottom: 8, + ), child: Text( 'Top Songs Today', style: context.titleLarge, ), ), LayoutBuilder( - builder: (context, constraints) => - PlaylistSongs( - playlist: topSongs, - constraints: constraints, - ), + builder: + (context, constraints) => PlaylistSongs( + playlist: topSongs, + constraints: constraints, + ), ), ], ), @@ -177,19 +176,21 @@ class _HomeScreenState extends State { crossAxisAlignment: CrossAxisAlignment.start, children: [ Padding( - padding: - const EdgeInsets.only(left: 8, bottom: 8), + padding: const EdgeInsets.only( + left: 8, + bottom: 8, + ), child: Text( 'New Releases', style: context.titleLarge, ), ), LayoutBuilder( - builder: (context, constraints) => - PlaylistSongs( - playlist: newReleases, - constraints: constraints, - ), + builder: + (context, constraints) => PlaylistSongs( + playlist: newReleases, + constraints: constraints, + ), ), ], ), diff --git a/boring_to_beautiful/step_07/lib/src/features/playlists/view/playlist_home_screen.dart b/boring_to_beautiful/step_07/lib/src/features/playlists/view/playlist_home_screen.dart index a80d767930..978608ccad 100644 --- a/boring_to_beautiful/step_07/lib/src/features/playlists/view/playlist_home_screen.dart +++ b/boring_to_beautiful/step_07/lib/src/features/playlists/view/playlist_home_screen.dart @@ -44,8 +44,10 @@ class PlaylistHomeScreen extends StatelessWidget { title: playlist.title, subtitle: playlist.description, ), - onTap: () => - GoRouter.of(context).go('/playlists/${playlist.id}'), + onTap: + () => GoRouter.of( + context, + ).go('/playlists/${playlist.id}'), ); }, ), diff --git a/boring_to_beautiful/step_07/lib/src/features/playlists/view/playlist_screen.dart b/boring_to_beautiful/step_07/lib/src/features/playlists/view/playlist_screen.dart index 5dc2f0744f..c41f500a92 100644 --- a/boring_to_beautiful/step_07/lib/src/features/playlists/view/playlist_screen.dart +++ b/boring_to_beautiful/step_07/lib/src/features/playlists/view/playlist_screen.dart @@ -20,114 +20,116 @@ class PlaylistScreen extends StatelessWidget { @override Widget build(BuildContext context) { - return LayoutBuilder(builder: (context, constraints) { - final colors = Theme.of(context).colorScheme; - final double headerHeight = constraints.isMobile - ? max(constraints.biggest.height * 0.5, 450) - : max(constraints.biggest.height * 0.25, 250); - if (constraints.isMobile) { - return Scaffold( - appBar: AppBar( - leading: BackButton( - onPressed: () => GoRouter.of(context).go('/playlists'), - ), - title: Text(playlist.title), - actions: [ - IconButton( - icon: const Icon(Icons.play_circle_fill), - onPressed: () {}, - ), - IconButton( - onPressed: () {}, - icon: const Icon(Icons.shuffle), - ), - ], - ), - body: ArticleContent( - child: PlaylistSongs( - playlist: playlist, - constraints: constraints, - ), - ), - ); - } - return Scaffold( - body: CustomScrollView( - slivers: [ - SliverAppBar( + return LayoutBuilder( + builder: (context, constraints) { + final colors = Theme.of(context).colorScheme; + final double headerHeight = + constraints.isMobile + ? max(constraints.biggest.height * 0.5, 450) + : max(constraints.biggest.height * 0.25, 250); + if (constraints.isMobile) { + return Scaffold( + appBar: AppBar( leading: BackButton( onPressed: () => GoRouter.of(context).go('/playlists'), ), - expandedHeight: headerHeight, - pinned: false, - flexibleSpace: FlexibleSpaceBar( - background: AdaptiveImageCard( - axis: constraints.isMobile ? Axis.vertical : Axis.horizontal, - constraints: - constraints.copyWith(maxHeight: headerHeight).normalize(), - image: playlist.cover.image, - child: Column( - mainAxisAlignment: MainAxisAlignment.end, - crossAxisAlignment: CrossAxisAlignment.start, - mainAxisSize: MainAxisSize.min, - children: [ - Text( - 'PLAYLIST', - style: context.titleSmall! - .copyWith(color: colors.onSurface), - ), - Text( - playlist.title, - style: context.displaySmall! - .copyWith(color: colors.onSurface), - ), - Text( - playlist.description, - style: context.bodyLarge!.copyWith( - color: colors.onSurface.withAlpha(204), + title: Text(playlist.title), + actions: [ + IconButton( + icon: const Icon(Icons.play_circle_fill), + onPressed: () {}, + ), + IconButton(onPressed: () {}, icon: const Icon(Icons.shuffle)), + ], + ), + body: ArticleContent( + child: PlaylistSongs( + playlist: playlist, + constraints: constraints, + ), + ), + ); + } + return Scaffold( + body: CustomScrollView( + slivers: [ + SliverAppBar( + leading: BackButton( + onPressed: () => GoRouter.of(context).go('/playlists'), + ), + expandedHeight: headerHeight, + pinned: false, + flexibleSpace: FlexibleSpaceBar( + background: AdaptiveImageCard( + axis: + constraints.isMobile ? Axis.vertical : Axis.horizontal, + constraints: + constraints + .copyWith(maxHeight: headerHeight) + .normalize(), + image: playlist.cover.image, + child: Column( + mainAxisAlignment: MainAxisAlignment.end, + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisSize: MainAxisSize.min, + children: [ + Text( + 'PLAYLIST', + style: context.titleSmall!.copyWith( + color: colors.onSurface, + ), ), - ), - const SizedBox(height: 8), - Row( - children: [ - IconButton( - icon: Icon( - Icons.play_circle_fill, - color: colors.tertiary, - ), - onPressed: () {}, + Text( + playlist.title, + style: context.displaySmall!.copyWith( + color: colors.onSurface, ), - TextButton.icon( - onPressed: () {}, - icon: Icon( - Icons.shuffle, - color: colors.tertiary, - ), - label: Text( - 'Shuffle', - style: context.bodySmall!.copyWith( + ), + Text( + playlist.description, + style: context.bodyLarge!.copyWith( + color: colors.onSurface.withAlpha(204), + ), + ), + const SizedBox(height: 8), + Row( + children: [ + IconButton( + icon: Icon( + Icons.play_circle_fill, color: colors.tertiary, ), + onPressed: () {}, ), - ), - ], - ), - ], + TextButton.icon( + onPressed: () {}, + icon: Icon(Icons.shuffle, color: colors.tertiary), + label: Text( + 'Shuffle', + style: context.bodySmall!.copyWith( + color: colors.tertiary, + ), + ), + ), + ], + ), + ], + ), ), ), ), - ), - SliverToBoxAdapter( - child: ArticleContent( - child: PlaylistSongs( - playlist: playlist, - constraints: constraints, + SliverToBoxAdapter( + child: ArticleContent( + child: PlaylistSongs( + playlist: playlist, + constraints: constraints, + ), ), ), - ), - ], - ), - ); - }); + ], + ), + ); + }, + ); } } diff --git a/boring_to_beautiful/step_07/lib/src/features/playlists/view/playlist_songs.dart b/boring_to_beautiful/step_07/lib/src/features/playlists/view/playlist_songs.dart index e944336540..1d5a2e9879 100644 --- a/boring_to_beautiful/step_07/lib/src/features/playlists/view/playlist_songs.dart +++ b/boring_to_beautiful/step_07/lib/src/features/playlists/view/playlist_songs.dart @@ -12,8 +12,11 @@ import '../../../shared/views/image_clipper.dart'; import '../../../shared/views/views.dart'; class PlaylistSongs extends StatelessWidget { - const PlaylistSongs( - {super.key, required this.playlist, required this.constraints}); + const PlaylistSongs({ + super.key, + required this.playlist, + required this.constraints, + }); final Playlist playlist; final BoxConstraints constraints; @@ -25,14 +28,9 @@ class PlaylistSongs extends StatelessWidget { breakpoint: 450, columns: const [ DataColumn( - label: Padding( - padding: EdgeInsets.only(left: 20), - child: Text('#'), - ), - ), - DataColumn( - label: Text('Title'), + label: Padding(padding: EdgeInsets.only(left: 20), child: Text('#')), ), + DataColumn(label: Text('Title')), DataColumn( label: Padding( padding: EdgeInsets.only(right: 10), @@ -40,38 +38,40 @@ class PlaylistSongs extends StatelessWidget { ), ), ], - rowBuilder: (context, index) => DataRow.byIndex( - index: index, - cells: [ - DataCell( - // Add HoverableSongPlayButton - Center( - child: Text( - (index + 1).toString(), - textAlign: TextAlign.center, + rowBuilder: + (context, index) => DataRow.byIndex( + index: index, + cells: [ + DataCell( + // Add HoverableSongPlayButton + Center( + child: Text( + (index + 1).toString(), + textAlign: TextAlign.center, + ), + ), ), - ), - ), - DataCell( - Row(children: [ - Padding( - padding: const EdgeInsets.all(2), - child: ClippedImage(playlist.songs[index].image.image), + DataCell( + Row( + children: [ + Padding( + padding: const EdgeInsets.all(2), + child: ClippedImage(playlist.songs[index].image.image), + ), + const SizedBox(width: 10), + Expanded(child: Text(playlist.songs[index].title)), + ], + ), ), - const SizedBox(width: 10), - Expanded(child: Text(playlist.songs[index].title)), - ]), - ), - DataCell( - Text(playlist.songs[index].length.toHumanizedString()), + DataCell(Text(playlist.songs[index].length.toHumanizedString())), + ], ), - ], - ), itemBuilder: (song, index) { return ListTile( - onTap: () => BlocProvider.of(context).add( - PlaybackEvent.changeSong(song), - ), + onTap: + () => BlocProvider.of( + context, + ).add(PlaybackEvent.changeSong(song)), leading: ClippedImage(song.image.image), title: Text(song.title), subtitle: Text(song.length.toHumanizedString()), diff --git a/boring_to_beautiful/step_07/lib/src/shared/app.dart b/boring_to_beautiful/step_07/lib/src/shared/app.dart index 3910d8f276..ed27418bd4 100644 --- a/boring_to_beautiful/step_07/lib/src/shared/app.dart +++ b/boring_to_beautiful/step_07/lib/src/shared/app.dart @@ -19,45 +19,46 @@ class MyApp extends StatefulWidget { } class _MyAppState extends State { - final settings = ValueNotifier(ThemeSettings( - sourceColor: Colors.pink, - themeMode: ThemeMode.system, - )); + final settings = ValueNotifier( + ThemeSettings(sourceColor: Colors.pink, themeMode: ThemeMode.system), + ); @override Widget build(BuildContext context) { return BlocProvider( create: (context) => PlaybackBloc(), child: DynamicColorBuilder( - builder: (lightDynamic, darkDynamic) => ThemeProvider( - lightDynamic: lightDynamic, - darkDynamic: darkDynamic, - settings: settings, - child: NotificationListener( - onNotification: (notification) { - settings.value = notification.settings; - return true; - }, - child: ValueListenableBuilder( - valueListenable: settings, - builder: (context, value, _) { - final theme = ThemeProvider.of(context); - return MaterialApp.router( - debugShowCheckedModeBanner: false, - title: 'Flutter Demo', - theme: theme.light(settings.value.sourceColor), - darkTheme: theme.dark(settings.value.sourceColor), - themeMode: theme.themeMode(), - routeInformationParser: appRouter.routeInformationParser, - routeInformationProvider: - appRouter.routeInformationProvider, - routerDelegate: appRouter.routerDelegate, - builder: (context, child) { - return PlayPauseListener(child: child!); - }, - ); + builder: + (lightDynamic, darkDynamic) => ThemeProvider( + lightDynamic: lightDynamic, + darkDynamic: darkDynamic, + settings: settings, + child: NotificationListener( + onNotification: (notification) { + settings.value = notification.settings; + return true; }, + child: ValueListenableBuilder( + valueListenable: settings, + builder: (context, value, _) { + final theme = ThemeProvider.of(context); + return MaterialApp.router( + debugShowCheckedModeBanner: false, + title: 'Flutter Demo', + theme: theme.light(settings.value.sourceColor), + darkTheme: theme.dark(settings.value.sourceColor), + themeMode: theme.themeMode(), + routeInformationParser: appRouter.routeInformationParser, + routeInformationProvider: + appRouter.routeInformationProvider, + routerDelegate: appRouter.routerDelegate, + builder: (context, child) { + return PlayPauseListener(child: child!); + }, + ); + }, + ), ), - )), + ), ), ); } diff --git a/boring_to_beautiful/step_07/lib/src/shared/classes/image.dart b/boring_to_beautiful/step_07/lib/src/shared/classes/image.dart index a1ef427c1d..00a6472b4a 100644 --- a/boring_to_beautiful/step_07/lib/src/shared/classes/image.dart +++ b/boring_to_beautiful/step_07/lib/src/shared/classes/image.dart @@ -3,10 +3,11 @@ // found in the LICENSE file. class MyArtistImage { - const MyArtistImage( - {required this.image, - required this.sourceName, - required this.sourceLink}); + const MyArtistImage({ + required this.image, + required this.sourceName, + required this.sourceLink, + }); final String image; final String sourceName; diff --git a/boring_to_beautiful/step_07/lib/src/shared/classes/playlist.dart b/boring_to_beautiful/step_07/lib/src/shared/classes/playlist.dart index 59899dc619..5f0225059d 100644 --- a/boring_to_beautiful/step_07/lib/src/shared/classes/playlist.dart +++ b/boring_to_beautiful/step_07/lib/src/shared/classes/playlist.dart @@ -17,8 +17,9 @@ class Playlist { this.description = '', required this.songs, this.cover = const MyArtistImage( - image: 'assets/images/record.jpeg', - sourceName: 'Adobe Stock Images', - sourceLink: ''), + image: 'assets/images/record.jpeg', + sourceName: 'Adobe Stock Images', + sourceLink: '', + ), }); } diff --git a/boring_to_beautiful/step_07/lib/src/shared/classes/ranked_song.dart b/boring_to_beautiful/step_07/lib/src/shared/classes/ranked_song.dart index 5908268c8c..2362bfae64 100644 --- a/boring_to_beautiful/step_07/lib/src/shared/classes/ranked_song.dart +++ b/boring_to_beautiful/step_07/lib/src/shared/classes/ranked_song.dart @@ -7,7 +7,11 @@ import './classes.dart'; class RankedSong extends Song { final int ranking; - const RankedSong(this.ranking, String title, Artist artist, Duration length, - MyArtistImage image) - : super(title, artist, length, image); + const RankedSong( + this.ranking, + String title, + Artist artist, + Duration length, + MyArtistImage image, + ) : super(title, artist, length, image); } diff --git a/boring_to_beautiful/step_07/lib/src/shared/extensions.dart b/boring_to_beautiful/step_07/lib/src/shared/extensions.dart index 8b7e41b988..fe65add57c 100644 --- a/boring_to_beautiful/step_07/lib/src/shared/extensions.dart +++ b/boring_to_beautiful/step_07/lib/src/shared/extensions.dart @@ -9,51 +9,36 @@ extension TypographyUtils on BuildContext { ThemeData get theme => Theme.of(this); TextTheme get textTheme => GoogleFonts.montserratTextTheme(theme.textTheme); ColorScheme get colors => theme.colorScheme; - TextStyle? get displayLarge => textTheme.displayLarge?.copyWith( - color: colors.onSurface, - ); - TextStyle? get displayMedium => textTheme.displayMedium?.copyWith( - color: colors.onSurface, - ); - TextStyle? get displaySmall => textTheme.displaySmall?.copyWith( - color: colors.onSurface, - ); - TextStyle? get headlineLarge => textTheme.headlineLarge?.copyWith( - color: colors.onSurface, - ); - TextStyle? get headlineMedium => textTheme.headlineMedium?.copyWith( - color: colors.onSurface, - ); - TextStyle? get headlineSmall => textTheme.headlineSmall?.copyWith( - color: colors.onSurface, - ); - TextStyle? get titleLarge => textTheme.titleLarge?.copyWith( - color: colors.onSurface, - ); - TextStyle? get titleMedium => textTheme.titleMedium?.copyWith( - color: colors.onSurface, - ); - TextStyle? get titleSmall => textTheme.titleSmall?.copyWith( - color: colors.onSurface, - ); - TextStyle? get labelLarge => textTheme.labelLarge?.copyWith( - color: colors.onSurface, - ); - TextStyle? get labelMedium => textTheme.labelMedium?.copyWith( - color: colors.onSurface, - ); - TextStyle? get labelSmall => textTheme.labelSmall?.copyWith( - color: colors.onSurface, - ); - TextStyle? get bodyLarge => textTheme.bodyLarge?.copyWith( - color: colors.onSurface, - ); - TextStyle? get bodyMedium => textTheme.bodyMedium?.copyWith( - color: colors.onSurface, - ); - TextStyle? get bodySmall => textTheme.bodySmall?.copyWith( - color: colors.onSurface, - ); + TextStyle? get displayLarge => + textTheme.displayLarge?.copyWith(color: colors.onSurface); + TextStyle? get displayMedium => + textTheme.displayMedium?.copyWith(color: colors.onSurface); + TextStyle? get displaySmall => + textTheme.displaySmall?.copyWith(color: colors.onSurface); + TextStyle? get headlineLarge => + textTheme.headlineLarge?.copyWith(color: colors.onSurface); + TextStyle? get headlineMedium => + textTheme.headlineMedium?.copyWith(color: colors.onSurface); + TextStyle? get headlineSmall => + textTheme.headlineSmall?.copyWith(color: colors.onSurface); + TextStyle? get titleLarge => + textTheme.titleLarge?.copyWith(color: colors.onSurface); + TextStyle? get titleMedium => + textTheme.titleMedium?.copyWith(color: colors.onSurface); + TextStyle? get titleSmall => + textTheme.titleSmall?.copyWith(color: colors.onSurface); + TextStyle? get labelLarge => + textTheme.labelLarge?.copyWith(color: colors.onSurface); + TextStyle? get labelMedium => + textTheme.labelMedium?.copyWith(color: colors.onSurface); + TextStyle? get labelSmall => + textTheme.labelSmall?.copyWith(color: colors.onSurface); + TextStyle? get bodyLarge => + textTheme.bodyLarge?.copyWith(color: colors.onSurface); + TextStyle? get bodyMedium => + textTheme.bodyMedium?.copyWith(color: colors.onSurface); + TextStyle? get bodySmall => + textTheme.bodySmall?.copyWith(color: colors.onSurface); } extension BreakpointUtils on BoxConstraints { @@ -65,17 +50,17 @@ extension BreakpointUtils on BoxConstraints { extension DurationString on String { /// Assumes a string (roughly) of the format '\d{1,2}:\d{2}' Duration toDuration() => switch (split(':')) { - [var minutes, var seconds] => Duration( - minutes: int.parse(minutes.trim()), - seconds: int.parse(seconds.trim()), - ), - [var hours, var minutes, var seconds] => Duration( - hours: int.parse(hours.trim()), - minutes: int.parse(minutes.trim()), - seconds: int.parse(seconds.trim()), - ), - _ => throw Exception('Invalid duration string: $this'), - }; + [var minutes, var seconds] => Duration( + minutes: int.parse(minutes.trim()), + seconds: int.parse(seconds.trim()), + ), + [var hours, var minutes, var seconds] => Duration( + hours: int.parse(hours.trim()), + minutes: int.parse(minutes.trim()), + seconds: int.parse(seconds.trim()), + ), + _ => throw Exception('Invalid duration string: $this'), + }; } extension HumanizedDuration on Duration { diff --git a/boring_to_beautiful/step_07/lib/src/shared/playback/bloc/playback_bloc.dart b/boring_to_beautiful/step_07/lib/src/shared/playback/bloc/playback_bloc.dart index 73c2f4c436..c6c871937b 100644 --- a/boring_to_beautiful/step_07/lib/src/shared/playback/bloc/playback_bloc.dart +++ b/boring_to_beautiful/step_07/lib/src/shared/playback/bloc/playback_bloc.dart @@ -41,9 +41,8 @@ class PlaybackBloc extends Bloc { } } - void _handlePlaybackProgress(Duration progress) => add( - PlaybackEvent.songProgress(progress), - ); + void _handlePlaybackProgress(Duration progress) => + add(PlaybackEvent.songProgress(progress)); void _togglePlayPause(TogglePlayPause event, Emitter emit) { state.isPlaying ? _pausePlayback() : _resumePlayback(); @@ -52,8 +51,10 @@ class PlaybackBloc extends Bloc { void _pausePlayback() => _currentlyPlayingSubscription!.cancel(); - void _resumePlayback() => _currentlyPlayingSubscription = - _startPlayingStream().listen(_handlePlaybackProgress); + void _resumePlayback() => + _currentlyPlayingSubscription = _startPlayingStream().listen( + _handlePlaybackProgress, + ); void _changeSong(ChangeSong event, Emitter emit) { emit( @@ -69,19 +70,15 @@ class PlaybackBloc extends Bloc { } void _songProgress(SongProgress event, Emitter emit) => emit( - state.copyWith( - songWithProgress: state.songWithProgress!.copyWith( - progress: state.songWithProgress!.progress + event.duration, - ), - ), - ); + state.copyWith( + songWithProgress: state.songWithProgress!.copyWith( + progress: state.songWithProgress!.progress + event.duration, + ), + ), + ); void _setVolume(SetVolume event, Emitter emit) => emit( - state.copyWith( - volume: event.value, - isMuted: false, - previousVolume: null, - ), - ); + state.copyWith(volume: event.value, isMuted: false, previousVolume: null), + ); void _toggleMute(ToggleMute event, Emitter emit) { if (state.isMuted) { @@ -94,11 +91,7 @@ class PlaybackBloc extends Bloc { ); } else { emit( - state.copyWith( - isMuted: true, - volume: 0, - previousVolume: state.volume, - ), + state.copyWith(isMuted: true, volume: 0, previousVolume: state.volume), ); } } diff --git a/boring_to_beautiful/step_07/lib/src/shared/playback/bloc/playback_bloc.freezed.dart b/boring_to_beautiful/step_07/lib/src/shared/playback/bloc/playback_bloc.freezed.dart index 8a422cd449..54e870ab6f 100644 --- a/boring_to_beautiful/step_07/lib/src/shared/playback/bloc/playback_bloc.freezed.dart +++ b/boring_to_beautiful/step_07/lib/src/shared/playback/bloc/playback_bloc.freezed.dart @@ -12,7 +12,8 @@ part of 'playback_bloc.dart'; T _$identity(T value) => value; final _privateConstructorUsedError = UnsupportedError( - 'It seems like you constructed your class using `MyClass._()`. This constructor is only meant to be used by freezed and you are not supposed to need it nor use it.\nPlease check the documentation here for more information: https://github.com/rrousselGit/freezed#adding-getters-and-methods-to-our-models'); + 'It seems like you constructed your class using `MyClass._()`. This constructor is only meant to be used by freezed and you are not supposed to need it nor use it.\nPlease check the documentation here for more information: https://github.com/rrousselGit/freezed#adding-getters-and-methods-to-our-models', +); /// @nodoc mixin _$PlaybackEvent { @@ -24,8 +25,7 @@ mixin _$PlaybackEvent { required TResult Function() toggleMute, required TResult Function(double percent) moveToInSong, required TResult Function(Duration duration) songProgress, - }) => - throw _privateConstructorUsedError; + }) => throw _privateConstructorUsedError; @optionalTypeArgs TResult? whenOrNull({ TResult? Function()? togglePlayPause, @@ -34,8 +34,7 @@ mixin _$PlaybackEvent { TResult? Function()? toggleMute, TResult? Function(double percent)? moveToInSong, TResult? Function(Duration duration)? songProgress, - }) => - throw _privateConstructorUsedError; + }) => throw _privateConstructorUsedError; @optionalTypeArgs TResult maybeWhen({ TResult Function()? togglePlayPause, @@ -45,8 +44,7 @@ mixin _$PlaybackEvent { TResult Function(double percent)? moveToInSong, TResult Function(Duration duration)? songProgress, required TResult orElse(), - }) => - throw _privateConstructorUsedError; + }) => throw _privateConstructorUsedError; @optionalTypeArgs TResult map({ required TResult Function(TogglePlayPause value) togglePlayPause, @@ -55,8 +53,7 @@ mixin _$PlaybackEvent { required TResult Function(ToggleMute value) toggleMute, required TResult Function(MoveToInSong value) moveToInSong, required TResult Function(SongProgress value) songProgress, - }) => - throw _privateConstructorUsedError; + }) => throw _privateConstructorUsedError; @optionalTypeArgs TResult? mapOrNull({ TResult? Function(TogglePlayPause value)? togglePlayPause, @@ -65,8 +62,7 @@ mixin _$PlaybackEvent { TResult? Function(ToggleMute value)? toggleMute, TResult? Function(MoveToInSong value)? moveToInSong, TResult? Function(SongProgress value)? songProgress, - }) => - throw _privateConstructorUsedError; + }) => throw _privateConstructorUsedError; @optionalTypeArgs TResult maybeMap({ TResult Function(TogglePlayPause value)? togglePlayPause, @@ -76,15 +72,15 @@ mixin _$PlaybackEvent { TResult Function(MoveToInSong value)? moveToInSong, TResult Function(SongProgress value)? songProgress, required TResult orElse(), - }) => - throw _privateConstructorUsedError; + }) => throw _privateConstructorUsedError; } /// @nodoc abstract class $PlaybackEventCopyWith<$Res> { factory $PlaybackEventCopyWith( - PlaybackEvent value, $Res Function(PlaybackEvent) then) = - _$PlaybackEventCopyWithImpl<$Res, PlaybackEvent>; + PlaybackEvent value, + $Res Function(PlaybackEvent) then, + ) = _$PlaybackEventCopyWithImpl<$Res, PlaybackEvent>; } /// @nodoc @@ -103,9 +99,10 @@ class _$PlaybackEventCopyWithImpl<$Res, $Val extends PlaybackEvent> /// @nodoc abstract class _$$TogglePlayPauseImplCopyWith<$Res> { - factory _$$TogglePlayPauseImplCopyWith(_$TogglePlayPauseImpl value, - $Res Function(_$TogglePlayPauseImpl) then) = - __$$TogglePlayPauseImplCopyWithImpl<$Res>; + factory _$$TogglePlayPauseImplCopyWith( + _$TogglePlayPauseImpl value, + $Res Function(_$TogglePlayPauseImpl) then, + ) = __$$TogglePlayPauseImplCopyWithImpl<$Res>; } /// @nodoc @@ -113,8 +110,9 @@ class __$$TogglePlayPauseImplCopyWithImpl<$Res> extends _$PlaybackEventCopyWithImpl<$Res, _$TogglePlayPauseImpl> implements _$$TogglePlayPauseImplCopyWith<$Res> { __$$TogglePlayPauseImplCopyWithImpl( - _$TogglePlayPauseImpl _value, $Res Function(_$TogglePlayPauseImpl) _then) - : super(_value, _then); + _$TogglePlayPauseImpl _value, + $Res Function(_$TogglePlayPauseImpl) _then, + ) : super(_value, _then); /// Create a copy of PlaybackEvent /// with the given fields replaced by the non-null parameter values. @@ -233,8 +231,9 @@ abstract class TogglePlayPause implements PlaybackEvent { /// @nodoc abstract class _$$ChangeSongImplCopyWith<$Res> { factory _$$ChangeSongImplCopyWith( - _$ChangeSongImpl value, $Res Function(_$ChangeSongImpl) then) = - __$$ChangeSongImplCopyWithImpl<$Res>; + _$ChangeSongImpl value, + $Res Function(_$ChangeSongImpl) then, + ) = __$$ChangeSongImplCopyWithImpl<$Res>; @useResult $Res call({Song song}); } @@ -244,22 +243,23 @@ class __$$ChangeSongImplCopyWithImpl<$Res> extends _$PlaybackEventCopyWithImpl<$Res, _$ChangeSongImpl> implements _$$ChangeSongImplCopyWith<$Res> { __$$ChangeSongImplCopyWithImpl( - _$ChangeSongImpl _value, $Res Function(_$ChangeSongImpl) _then) - : super(_value, _then); + _$ChangeSongImpl _value, + $Res Function(_$ChangeSongImpl) _then, + ) : super(_value, _then); /// Create a copy of PlaybackEvent /// with the given fields replaced by the non-null parameter values. @pragma('vm:prefer-inline') @override - $Res call({ - Object? song = null, - }) { - return _then(_$ChangeSongImpl( - null == song - ? _value.song - : song // ignore: cast_nullable_to_non_nullable - as Song, - )); + $Res call({Object? song = null}) { + return _then( + _$ChangeSongImpl( + null == song + ? _value.song + : song // ignore: cast_nullable_to_non_nullable + as Song, + ), + ); } } @@ -397,8 +397,9 @@ abstract class ChangeSong implements PlaybackEvent { /// @nodoc abstract class _$$SetVolumeImplCopyWith<$Res> { factory _$$SetVolumeImplCopyWith( - _$SetVolumeImpl value, $Res Function(_$SetVolumeImpl) then) = - __$$SetVolumeImplCopyWithImpl<$Res>; + _$SetVolumeImpl value, + $Res Function(_$SetVolumeImpl) then, + ) = __$$SetVolumeImplCopyWithImpl<$Res>; @useResult $Res call({double value}); } @@ -408,22 +409,23 @@ class __$$SetVolumeImplCopyWithImpl<$Res> extends _$PlaybackEventCopyWithImpl<$Res, _$SetVolumeImpl> implements _$$SetVolumeImplCopyWith<$Res> { __$$SetVolumeImplCopyWithImpl( - _$SetVolumeImpl _value, $Res Function(_$SetVolumeImpl) _then) - : super(_value, _then); + _$SetVolumeImpl _value, + $Res Function(_$SetVolumeImpl) _then, + ) : super(_value, _then); /// Create a copy of PlaybackEvent /// with the given fields replaced by the non-null parameter values. @pragma('vm:prefer-inline') @override - $Res call({ - Object? value = null, - }) { - return _then(_$SetVolumeImpl( - null == value - ? _value.value - : value // ignore: cast_nullable_to_non_nullable - as double, - )); + $Res call({Object? value = null}) { + return _then( + _$SetVolumeImpl( + null == value + ? _value.value + : value // ignore: cast_nullable_to_non_nullable + as double, + ), + ); } } @@ -561,8 +563,9 @@ abstract class SetVolume implements PlaybackEvent { /// @nodoc abstract class _$$ToggleMuteImplCopyWith<$Res> { factory _$$ToggleMuteImplCopyWith( - _$ToggleMuteImpl value, $Res Function(_$ToggleMuteImpl) then) = - __$$ToggleMuteImplCopyWithImpl<$Res>; + _$ToggleMuteImpl value, + $Res Function(_$ToggleMuteImpl) then, + ) = __$$ToggleMuteImplCopyWithImpl<$Res>; } /// @nodoc @@ -570,8 +573,9 @@ class __$$ToggleMuteImplCopyWithImpl<$Res> extends _$PlaybackEventCopyWithImpl<$Res, _$ToggleMuteImpl> implements _$$ToggleMuteImplCopyWith<$Res> { __$$ToggleMuteImplCopyWithImpl( - _$ToggleMuteImpl _value, $Res Function(_$ToggleMuteImpl) _then) - : super(_value, _then); + _$ToggleMuteImpl _value, + $Res Function(_$ToggleMuteImpl) _then, + ) : super(_value, _then); /// Create a copy of PlaybackEvent /// with the given fields replaced by the non-null parameter values. @@ -690,8 +694,9 @@ abstract class ToggleMute implements PlaybackEvent { /// @nodoc abstract class _$$MoveToInSongImplCopyWith<$Res> { factory _$$MoveToInSongImplCopyWith( - _$MoveToInSongImpl value, $Res Function(_$MoveToInSongImpl) then) = - __$$MoveToInSongImplCopyWithImpl<$Res>; + _$MoveToInSongImpl value, + $Res Function(_$MoveToInSongImpl) then, + ) = __$$MoveToInSongImplCopyWithImpl<$Res>; @useResult $Res call({double percent}); } @@ -701,22 +706,23 @@ class __$$MoveToInSongImplCopyWithImpl<$Res> extends _$PlaybackEventCopyWithImpl<$Res, _$MoveToInSongImpl> implements _$$MoveToInSongImplCopyWith<$Res> { __$$MoveToInSongImplCopyWithImpl( - _$MoveToInSongImpl _value, $Res Function(_$MoveToInSongImpl) _then) - : super(_value, _then); + _$MoveToInSongImpl _value, + $Res Function(_$MoveToInSongImpl) _then, + ) : super(_value, _then); /// Create a copy of PlaybackEvent /// with the given fields replaced by the non-null parameter values. @pragma('vm:prefer-inline') @override - $Res call({ - Object? percent = null, - }) { - return _then(_$MoveToInSongImpl( - null == percent - ? _value.percent - : percent // ignore: cast_nullable_to_non_nullable - as double, - )); + $Res call({Object? percent = null}) { + return _then( + _$MoveToInSongImpl( + null == percent + ? _value.percent + : percent // ignore: cast_nullable_to_non_nullable + as double, + ), + ); } } @@ -854,8 +860,9 @@ abstract class MoveToInSong implements PlaybackEvent { /// @nodoc abstract class _$$SongProgressImplCopyWith<$Res> { factory _$$SongProgressImplCopyWith( - _$SongProgressImpl value, $Res Function(_$SongProgressImpl) then) = - __$$SongProgressImplCopyWithImpl<$Res>; + _$SongProgressImpl value, + $Res Function(_$SongProgressImpl) then, + ) = __$$SongProgressImplCopyWithImpl<$Res>; @useResult $Res call({Duration duration}); } @@ -865,22 +872,23 @@ class __$$SongProgressImplCopyWithImpl<$Res> extends _$PlaybackEventCopyWithImpl<$Res, _$SongProgressImpl> implements _$$SongProgressImplCopyWith<$Res> { __$$SongProgressImplCopyWithImpl( - _$SongProgressImpl _value, $Res Function(_$SongProgressImpl) _then) - : super(_value, _then); + _$SongProgressImpl _value, + $Res Function(_$SongProgressImpl) _then, + ) : super(_value, _then); /// Create a copy of PlaybackEvent /// with the given fields replaced by the non-null parameter values. @pragma('vm:prefer-inline') @override - $Res call({ - Object? duration = null, - }) { - return _then(_$SongProgressImpl( - null == duration - ? _value.duration - : duration // ignore: cast_nullable_to_non_nullable - as Duration, - )); + $Res call({Object? duration = null}) { + return _then( + _$SongProgressImpl( + null == duration + ? _value.duration + : duration // ignore: cast_nullable_to_non_nullable + as Duration, + ), + ); } } @@ -1037,15 +1045,17 @@ mixin _$PlaybackState { /// @nodoc abstract class $PlaybackStateCopyWith<$Res> { factory $PlaybackStateCopyWith( - PlaybackState value, $Res Function(PlaybackState) then) = - _$PlaybackStateCopyWithImpl<$Res, PlaybackState>; + PlaybackState value, + $Res Function(PlaybackState) then, + ) = _$PlaybackStateCopyWithImpl<$Res, PlaybackState>; @useResult - $Res call( - {double volume, - double? previousVolume, - bool isMuted, - bool isPlaying, - SongWithProgress? songWithProgress}); + $Res call({ + double volume, + double? previousVolume, + bool isMuted, + bool isPlaying, + SongWithProgress? songWithProgress, + }); $SongWithProgressCopyWith<$Res>? get songWithProgress; } @@ -1071,28 +1081,36 @@ class _$PlaybackStateCopyWithImpl<$Res, $Val extends PlaybackState> Object? isPlaying = null, Object? songWithProgress = freezed, }) { - return _then(_value.copyWith( - volume: null == volume - ? _value.volume - : volume // ignore: cast_nullable_to_non_nullable - as double, - previousVolume: freezed == previousVolume - ? _value.previousVolume - : previousVolume // ignore: cast_nullable_to_non_nullable - as double?, - isMuted: null == isMuted - ? _value.isMuted - : isMuted // ignore: cast_nullable_to_non_nullable - as bool, - isPlaying: null == isPlaying - ? _value.isPlaying - : isPlaying // ignore: cast_nullable_to_non_nullable - as bool, - songWithProgress: freezed == songWithProgress - ? _value.songWithProgress - : songWithProgress // ignore: cast_nullable_to_non_nullable - as SongWithProgress?, - ) as $Val); + return _then( + _value.copyWith( + volume: + null == volume + ? _value.volume + : volume // ignore: cast_nullable_to_non_nullable + as double, + previousVolume: + freezed == previousVolume + ? _value.previousVolume + : previousVolume // ignore: cast_nullable_to_non_nullable + as double?, + isMuted: + null == isMuted + ? _value.isMuted + : isMuted // ignore: cast_nullable_to_non_nullable + as bool, + isPlaying: + null == isPlaying + ? _value.isPlaying + : isPlaying // ignore: cast_nullable_to_non_nullable + as bool, + songWithProgress: + freezed == songWithProgress + ? _value.songWithProgress + : songWithProgress // ignore: cast_nullable_to_non_nullable + as SongWithProgress?, + ) + as $Val, + ); } /// Create a copy of PlaybackState @@ -1114,16 +1132,18 @@ class _$PlaybackStateCopyWithImpl<$Res, $Val extends PlaybackState> abstract class _$$PlaybackStateImplCopyWith<$Res> implements $PlaybackStateCopyWith<$Res> { factory _$$PlaybackStateImplCopyWith( - _$PlaybackStateImpl value, $Res Function(_$PlaybackStateImpl) then) = - __$$PlaybackStateImplCopyWithImpl<$Res>; + _$PlaybackStateImpl value, + $Res Function(_$PlaybackStateImpl) then, + ) = __$$PlaybackStateImplCopyWithImpl<$Res>; @override @useResult - $Res call( - {double volume, - double? previousVolume, - bool isMuted, - bool isPlaying, - SongWithProgress? songWithProgress}); + $Res call({ + double volume, + double? previousVolume, + bool isMuted, + bool isPlaying, + SongWithProgress? songWithProgress, + }); @override $SongWithProgressCopyWith<$Res>? get songWithProgress; @@ -1134,8 +1154,9 @@ class __$$PlaybackStateImplCopyWithImpl<$Res> extends _$PlaybackStateCopyWithImpl<$Res, _$PlaybackStateImpl> implements _$$PlaybackStateImplCopyWith<$Res> { __$$PlaybackStateImplCopyWithImpl( - _$PlaybackStateImpl _value, $Res Function(_$PlaybackStateImpl) _then) - : super(_value, _then); + _$PlaybackStateImpl _value, + $Res Function(_$PlaybackStateImpl) _then, + ) : super(_value, _then); /// Create a copy of PlaybackState /// with the given fields replaced by the non-null parameter values. @@ -1148,40 +1169,48 @@ class __$$PlaybackStateImplCopyWithImpl<$Res> Object? isPlaying = null, Object? songWithProgress = freezed, }) { - return _then(_$PlaybackStateImpl( - volume: null == volume - ? _value.volume - : volume // ignore: cast_nullable_to_non_nullable - as double, - previousVolume: freezed == previousVolume - ? _value.previousVolume - : previousVolume // ignore: cast_nullable_to_non_nullable - as double?, - isMuted: null == isMuted - ? _value.isMuted - : isMuted // ignore: cast_nullable_to_non_nullable - as bool, - isPlaying: null == isPlaying - ? _value.isPlaying - : isPlaying // ignore: cast_nullable_to_non_nullable - as bool, - songWithProgress: freezed == songWithProgress - ? _value.songWithProgress - : songWithProgress // ignore: cast_nullable_to_non_nullable - as SongWithProgress?, - )); + return _then( + _$PlaybackStateImpl( + volume: + null == volume + ? _value.volume + : volume // ignore: cast_nullable_to_non_nullable + as double, + previousVolume: + freezed == previousVolume + ? _value.previousVolume + : previousVolume // ignore: cast_nullable_to_non_nullable + as double?, + isMuted: + null == isMuted + ? _value.isMuted + : isMuted // ignore: cast_nullable_to_non_nullable + as bool, + isPlaying: + null == isPlaying + ? _value.isPlaying + : isPlaying // ignore: cast_nullable_to_non_nullable + as bool, + songWithProgress: + freezed == songWithProgress + ? _value.songWithProgress + : songWithProgress // ignore: cast_nullable_to_non_nullable + as SongWithProgress?, + ), + ); } } /// @nodoc class _$PlaybackStateImpl implements _PlaybackState { - const _$PlaybackStateImpl( - {this.volume = 0.5, - this.previousVolume, - this.isMuted = false, - this.isPlaying = false, - this.songWithProgress}); + const _$PlaybackStateImpl({ + this.volume = 0.5, + this.previousVolume, + this.isMuted = false, + this.isPlaying = false, + this.songWithProgress, + }); /// Legal values are between 0 and 1. @override @@ -1221,8 +1250,14 @@ class _$PlaybackStateImpl implements _PlaybackState { } @override - int get hashCode => Object.hash(runtimeType, volume, previousVolume, isMuted, - isPlaying, songWithProgress); + int get hashCode => Object.hash( + runtimeType, + volume, + previousVolume, + isMuted, + isPlaying, + songWithProgress, + ); /// Create a copy of PlaybackState /// with the given fields replaced by the non-null parameter values. @@ -1234,12 +1269,13 @@ class _$PlaybackStateImpl implements _PlaybackState { } abstract class _PlaybackState implements PlaybackState { - const factory _PlaybackState( - {final double volume, - final double? previousVolume, - final bool isMuted, - final bool isPlaying, - final SongWithProgress? songWithProgress}) = _$PlaybackStateImpl; + const factory _PlaybackState({ + final double volume, + final double? previousVolume, + final bool isMuted, + final bool isPlaying, + final SongWithProgress? songWithProgress, + }) = _$PlaybackStateImpl; /// Legal values are between 0 and 1. @override @@ -1278,8 +1314,9 @@ mixin _$SongWithProgress { /// @nodoc abstract class $SongWithProgressCopyWith<$Res> { factory $SongWithProgressCopyWith( - SongWithProgress value, $Res Function(SongWithProgress) then) = - _$SongWithProgressCopyWithImpl<$Res, SongWithProgress>; + SongWithProgress value, + $Res Function(SongWithProgress) then, + ) = _$SongWithProgressCopyWithImpl<$Res, SongWithProgress>; @useResult $Res call({Duration progress, Song song}); } @@ -1298,29 +1335,32 @@ class _$SongWithProgressCopyWithImpl<$Res, $Val extends SongWithProgress> /// with the given fields replaced by the non-null parameter values. @pragma('vm:prefer-inline') @override - $Res call({ - Object? progress = null, - Object? song = null, - }) { - return _then(_value.copyWith( - progress: null == progress - ? _value.progress - : progress // ignore: cast_nullable_to_non_nullable - as Duration, - song: null == song - ? _value.song - : song // ignore: cast_nullable_to_non_nullable - as Song, - ) as $Val); + $Res call({Object? progress = null, Object? song = null}) { + return _then( + _value.copyWith( + progress: + null == progress + ? _value.progress + : progress // ignore: cast_nullable_to_non_nullable + as Duration, + song: + null == song + ? _value.song + : song // ignore: cast_nullable_to_non_nullable + as Song, + ) + as $Val, + ); } } /// @nodoc abstract class _$$SongWithProgressImplCopyWith<$Res> implements $SongWithProgressCopyWith<$Res> { - factory _$$SongWithProgressImplCopyWith(_$SongWithProgressImpl value, - $Res Function(_$SongWithProgressImpl) then) = - __$$SongWithProgressImplCopyWithImpl<$Res>; + factory _$$SongWithProgressImplCopyWith( + _$SongWithProgressImpl value, + $Res Function(_$SongWithProgressImpl) then, + ) = __$$SongWithProgressImplCopyWithImpl<$Res>; @override @useResult $Res call({Duration progress, Song song}); @@ -1330,28 +1370,30 @@ abstract class _$$SongWithProgressImplCopyWith<$Res> class __$$SongWithProgressImplCopyWithImpl<$Res> extends _$SongWithProgressCopyWithImpl<$Res, _$SongWithProgressImpl> implements _$$SongWithProgressImplCopyWith<$Res> { - __$$SongWithProgressImplCopyWithImpl(_$SongWithProgressImpl _value, - $Res Function(_$SongWithProgressImpl) _then) - : super(_value, _then); + __$$SongWithProgressImplCopyWithImpl( + _$SongWithProgressImpl _value, + $Res Function(_$SongWithProgressImpl) _then, + ) : super(_value, _then); /// Create a copy of SongWithProgress /// with the given fields replaced by the non-null parameter values. @pragma('vm:prefer-inline') @override - $Res call({ - Object? progress = null, - Object? song = null, - }) { - return _then(_$SongWithProgressImpl( - progress: null == progress - ? _value.progress - : progress // ignore: cast_nullable_to_non_nullable - as Duration, - song: null == song - ? _value.song - : song // ignore: cast_nullable_to_non_nullable - as Song, - )); + $Res call({Object? progress = null, Object? song = null}) { + return _then( + _$SongWithProgressImpl( + progress: + null == progress + ? _value.progress + : progress // ignore: cast_nullable_to_non_nullable + as Duration, + song: + null == song + ? _value.song + : song // ignore: cast_nullable_to_non_nullable + as Song, + ), + ); } } @@ -1390,13 +1432,16 @@ class _$SongWithProgressImpl implements _SongWithProgress { @pragma('vm:prefer-inline') _$$SongWithProgressImplCopyWith<_$SongWithProgressImpl> get copyWith => __$$SongWithProgressImplCopyWithImpl<_$SongWithProgressImpl>( - this, _$identity); + this, + _$identity, + ); } abstract class _SongWithProgress implements SongWithProgress { - const factory _SongWithProgress( - {required final Duration progress, - required final Song song}) = _$SongWithProgressImpl; + const factory _SongWithProgress({ + required final Duration progress, + required final Song song, + }) = _$SongWithProgressImpl; @override Duration get progress; diff --git a/boring_to_beautiful/step_07/lib/src/shared/providers/artists.dart b/boring_to_beautiful/step_07/lib/src/shared/providers/artists.dart index d116ad9cdd..f9e4a8063e 100644 --- a/boring_to_beautiful/step_07/lib/src/shared/providers/artists.dart +++ b/boring_to_beautiful/step_07/lib/src/shared/providers/artists.dart @@ -11,162 +11,175 @@ class ArtistsProvider { static ArtistsProvider get shared => ArtistsProvider(); List get artists => const [ - Artist( - id: 'jmo', - name: 'Jessie Morrison', + Artist( + id: 'jmo', + name: 'Jessie Morrison', + image: MyArtistImage( + image: 'assets/images/artists/woman.jpeg', + sourceLink: 'https://unsplash.com/photos/w8wpFqiMpW8', + sourceName: 'Daniel Monteiro', + ), + bio: + 'Jessie "JMo" Morrison is an American singer, actress, and dancer. The following year she won over America\'s hearts first appearing in the 2004 movie Unexpected Engagement. Soon after she released her debut album, Hopeful Romantics.', + updates: [ + 'So happy that everyone is loving the new music! It\'s been my pride and joy to work on and I\'m thrilled that you finally get to hear it!', + 'Happy Valentine\'s Day y\'all!!! I love each and every one of you 💋😘', + '#HappyGalentinesDay!!! Chocolates. Ice Cream. Your favorite rom-com. Let\'s goo!!! 💕✨', + ], + events: [ + Event( + date: '1/20/22', + title: 'Jessie Morrison: No More Heartbreak Tour', + location: 'Mountain View, California', + link: 'Tickets', + ), + Event( + date: '1/22/22', + title: 'Jessie Morrison: No More Heartbreak Tour', + location: 'Austin, Texas', + link: 'Tickets', + ), + Event( + date: '1/23/22', + title: 'Jessie Morrison: No More Heartbreak Tour', + location: 'Houston, Texas', + link: 'Tickets', + ), + Event( + date: '2/8/22', + title: 'Jessie Morrison: No More Heartbreak Tour', + location: 'Los Angeles, California', + link: 'Tickets', + ), + ], + news: [ + News( + title: + 'Jessie Morrison a 26-stop cross country tour for the first time in 6 years.', + author: 'By Jacqueline Stewart', + blurb: + 'Our favorite triple-threat Jessie Morrison is back, this time with a 26 stop tour across the country. She\'ll kick things off in Mountain View on January 20th, 2022 in Mountain View California with more stops being announced over the next few weeks...', image: MyArtistImage( - image: 'assets/images/artists/woman.jpeg', - sourceLink: 'https://unsplash.com/photos/w8wpFqiMpW8', - sourceName: 'Daniel Monteiro', + image: 'assets/images/news/concert.jpeg', + sourceLink: 'https://unsplash.com/photos/hzgs56Ze49s', + sourceName: 'Anthony DELANOIX', ), - bio: - 'Jessie "JMo" Morrison is an American singer, actress, and dancer. The following year she won over America\'s hearts first appearing in the 2004 movie Unexpected Engagement. Soon after she released her debut album, Hopeful Romantics.', - updates: [ - 'So happy that everyone is loving the new music! It\'s been my pride and joy to work on and I\'m thrilled that you finally get to hear it!', - 'Happy Valentine\'s Day y\'all!!! I love each and every one of you 💋😘', - '#HappyGalentinesDay!!! Chocolates. Ice Cream. Your favorite rom-com. Let\'s goo!!! 💕✨', - ], - events: [ - Event( - date: '1/20/22', - title: 'Jessie Morrison: No More Heartbreak Tour', - location: 'Mountain View, California', - link: 'Tickets'), - Event( - date: '1/22/22', - title: 'Jessie Morrison: No More Heartbreak Tour', - location: 'Austin, Texas', - link: 'Tickets'), - Event( - date: '1/23/22', - title: 'Jessie Morrison: No More Heartbreak Tour', - location: 'Houston, Texas', - link: 'Tickets'), - Event( - date: '2/8/22', - title: 'Jessie Morrison: No More Heartbreak Tour', - location: 'Los Angeles, California', - link: 'Tickets'), - ], - news: [ - News( - title: - 'Jessie Morrison a 26-stop cross country tour for the first time in 6 years.', - author: 'By Jacqueline Stewart', - blurb: - 'Our favorite triple-threat Jessie Morrison is back, this time with a 26 stop tour across the country. She\'ll kick things off in Mountain View on January 20th, 2022 in Mountain View California with more stops being announced over the next few weeks...', - image: MyArtistImage( - image: 'assets/images/news/concert.jpeg', - sourceLink: 'https://unsplash.com/photos/hzgs56Ze49s', - sourceName: 'Anthony DELANOIX', - ), - ) - ], ), - Artist( - id: 'lb', - name: 'Lucas Bryant', + ], + ), + Artist( + id: 'lb', + name: 'Lucas Bryant', + image: MyArtistImage( + image: 'assets/images/albums/artist1-album2.jpg', + sourceLink: 'https://unsplash.com/photos/6etHcucBiRg', + sourceName: 'Keagan Henman', + ), + bio: + 'Lucas Bryant is an American country music singer and songwriter. He moved to Nashville at the age of 18 to pursue his country music career. With 34 awards to his name, he currently holds the record for most awards in country music.', + updates: [ + 'Who\'s ready to party this weekend?! See you tomorrow, Nashville! #LBlive', + 'Can\'t wait to get back on stage after so long. What songs do you want to hear?', + 'We\'re going all in this weekend! How are you doing, Vegas?!', + ], + events: [ + Event( + date: '5/16/22', + title: 'Back To My Hometown Tour', + location: 'Indianapolis, IN', + link: 'Tickets', + ), + Event( + date: '5/18/22', + title: 'Back To My Hometown Tour', + location: 'San Antonio, TX', + link: 'Tickets', + ), + Event( + date: '5/20/22', + title: 'Back To My Hometown Tour', + location: 'Phoenix, AZ', + link: 'Tickets', + ), + Event( + date: '5/23/22', + title: 'Back To My Hometown Tour', + location: 'San Diego, CA', + link: 'Tickets', + ), + ], + news: [ + News( + title: + 'Country Music Favorites Lucas Bryant, Mariam Lubbock, Michelle Delaney and Jackson Murray Join Forces For The Biggest Performance in Country History.', + author: 'Lonnie Hall', + blurb: + 'Calling all country music fans! Fasten your seat belts because the 2022 Best of Country Awards is expecting a huge performance from some of our favorite artists. Country music legends Mariam Lubbock and Jackson Murray will be joined by Lucas Bryant and Michelle Delaney for a performance we\'ll never forget.', image: MyArtistImage( image: 'assets/images/albums/artist1-album2.jpg', sourceLink: 'https://unsplash.com/photos/6etHcucBiRg', sourceName: 'Keagan Henman', ), - bio: - 'Lucas Bryant is an American country music singer and songwriter. He moved to Nashville at the age of 18 to pursue his country music career. With 34 awards to his name, he currently holds the record for most awards in country music.', - updates: [ - 'Who\'s ready to party this weekend?! See you tomorrow, Nashville! #LBlive', - 'Can\'t wait to get back on stage after so long. What songs do you want to hear?', - 'We\'re going all in this weekend! How are you doing, Vegas?!', - ], - events: [ - Event( - date: '5/16/22', - title: 'Back To My Hometown Tour', - location: 'Indianapolis, IN', - link: 'Tickets'), - Event( - date: '5/18/22', - title: 'Back To My Hometown Tour', - location: 'San Antonio, TX', - link: 'Tickets'), - Event( - date: '5/20/22', - title: 'Back To My Hometown Tour', - location: 'Phoenix, AZ', - link: 'Tickets'), - Event( - date: '5/23/22', - title: 'Back To My Hometown Tour', - location: 'San Diego, CA', - link: 'Tickets'), - ], - news: [ - News( - title: - 'Country Music Favorites Lucas Bryant, Mariam Lubbock, Michelle Delaney and Jackson Murray Join Forces For The Biggest Performance in Country History.', - author: 'Lonnie Hall', - blurb: - 'Calling all country music fans! Fasten your seat belts because the 2022 Best of Country Awards is expecting a huge performance from some of our favorite artists. Country music legends Mariam Lubbock and Jackson Murray will be joined by Lucas Bryant and Michelle Delaney for a performance we\'ll never forget.', - image: MyArtistImage( - image: 'assets/images/albums/artist1-album2.jpg', - sourceLink: 'https://unsplash.com/photos/6etHcucBiRg', - sourceName: 'Keagan Henman', - ), - ), - ], ), - Artist( - id: 'jonjames', - name: 'Jon James', + ], + ), + Artist( + id: 'jonjames', + name: 'Jon James', + image: MyArtistImage( + image: 'assets/images/artists/joe.jpg', + sourceLink: 'https://unsplash.com/photos/k7UKO-tT5QU', + sourceName: 'Natalie Runnerstrom', + ), + bio: + 'Jon James is an American singer and songwriter. He\'s best known for his number one single "Never Going Back" which stayed atop the charts for 10 weeks.', + updates: [ + '3. MORE. DAYS. Who\'s ready for #FallingForYou?! Tune in tomorrow to see the full track list!', + '4 days until I get to share some of the favorite songs I\'ve ever written with you.', + '#FallingForYou dropping in 5 days! Send me your favorite music video concepts 🎥 😎', + ], + events: [ + Event( + date: '10/22/21', + title: 'Falling For You Tour', + location: 'Dallas, Texas', + link: 'Ticketmaster', + ), + Event( + date: '10/23/21', + title: 'Falling For You Tour', + location: 'Houston, Texas', + link: 'Ticketmaster', + ), + Event( + date: '10/26/21', + title: 'Falling For You Tour', + location: 'Phoenix, Arizona', + link: 'Ticketmaster', + ), + Event( + date: '10/27/21', + title: 'Falling For You Tour', + location: 'Los Angeles, California', + link: 'Ticketmaster', + ), + ], + news: [ + News( + title: + 'Jon James is excited for the release of his sixth album "Falling For You"', + author: 'Top Media Today', + blurb: + 'Jon James will be dropping his new album "Falling For You" on Friday to much fan excitement. The 6-time Grammy winning artist has spent the last year writing and recording for this album that\'s been dubbed "his best work yet."', image: MyArtistImage( - image: 'assets/images/artists/joe.jpg', - sourceLink: 'https://unsplash.com/photos/k7UKO-tT5QU', - sourceName: 'Natalie Runnerstrom', + image: 'assets/images/news/recording_studio.jpg', + sourceLink: 'https://unsplash.com/photos/CbOGmLA46JI', + sourceName: 'Yohann LIBOT', ), - bio: - 'Jon James is an American singer and songwriter. He\'s best known for his number one single "Never Going Back" which stayed atop the charts for 10 weeks.', - updates: [ - '3. MORE. DAYS. Who\'s ready for #FallingForYou?! Tune in tomorrow to see the full track list!', - '4 days until I get to share some of the favorite songs I\'ve ever written with you.', - '#FallingForYou dropping in 5 days! Send me your favorite music video concepts 🎥 😎', - ], - events: [ - Event( - date: '10/22/21', - title: 'Falling For You Tour', - location: 'Dallas, Texas', - link: 'Ticketmaster'), - Event( - date: '10/23/21', - title: 'Falling For You Tour', - location: 'Houston, Texas', - link: 'Ticketmaster'), - Event( - date: '10/26/21', - title: 'Falling For You Tour', - location: 'Phoenix, Arizona', - link: 'Ticketmaster'), - Event( - date: '10/27/21', - title: 'Falling For You Tour', - location: 'Los Angeles, California', - link: 'Ticketmaster'), - ], - news: [ - News( - title: - 'Jon James is excited for the release of his sixth album "Falling For You"', - author: 'Top Media Today', - blurb: - 'Jon James will be dropping his new album "Falling For You" on Friday to much fan excitement. The 6-time Grammy winning artist has spent the last year writing and recording for this album that\'s been dubbed "his best work yet."', - image: MyArtistImage( - image: 'assets/images/news/recording_studio.jpg', - sourceLink: 'https://unsplash.com/photos/CbOGmLA46JI', - sourceName: 'Yohann LIBOT'), - ) - ], ), - ]; + ], + ), + ]; Artist? getArtist(String id) { return artists.firstWhereOrNull((artist) => artist.id == id); diff --git a/boring_to_beautiful/step_07/lib/src/shared/providers/playlists.dart b/boring_to_beautiful/step_07/lib/src/shared/providers/playlists.dart index e8bab994dd..f27f71b3ec 100644 --- a/boring_to_beautiful/step_07/lib/src/shared/providers/playlists.dart +++ b/boring_to_beautiful/step_07/lib/src/shared/providers/playlists.dart @@ -18,41 +18,50 @@ class PlaylistsProvider { static List images() { return [ const MyArtistImage( - image: 'assets/images/playlists/favorite.jpg', - sourceLink: 'https://unsplash.com/photos/60GsdOMRFGc', - sourceName: 'Karsten Winegeart'), + image: 'assets/images/playlists/favorite.jpg', + sourceLink: 'https://unsplash.com/photos/60GsdOMRFGc', + sourceName: 'Karsten Winegeart', + ), const MyArtistImage( - image: 'assets/images/playlists/austin.jpg', - sourceLink: 'https://unsplash.com/photos/AlBgcDfDG_s', - sourceName: 'Carlos Alfonso'), + image: 'assets/images/playlists/austin.jpg', + sourceLink: 'https://unsplash.com/photos/AlBgcDfDG_s', + sourceName: 'Carlos Alfonso', + ), const MyArtistImage( - image: 'assets/images/playlists/reading.jpg', - sourceLink: 'https://unsplash.com/photos/wkgv7I2VTzM', - sourceName: 'Alexandra Fuller'), + image: 'assets/images/playlists/reading.jpg', + sourceLink: 'https://unsplash.com/photos/wkgv7I2VTzM', + sourceName: 'Alexandra Fuller', + ), const MyArtistImage( - image: 'assets/images/playlists/workout.jpg', - sourceLink: 'https://unsplash.com/photos/CnEEF5eJemQ', - sourceName: 'Karsten Winegeart'), + image: 'assets/images/playlists/workout.jpg', + sourceLink: 'https://unsplash.com/photos/CnEEF5eJemQ', + sourceName: 'Karsten Winegeart', + ), const MyArtistImage( - image: 'assets/images/playlists/calm.jpg', - sourceLink: 'https://unsplash.com/photos/NTyBbu66_SI', - sourceName: 'Jared Rice'), + image: 'assets/images/playlists/calm.jpg', + sourceLink: 'https://unsplash.com/photos/NTyBbu66_SI', + sourceName: 'Jared Rice', + ), const MyArtistImage( - image: 'assets/images/playlists/coffee.jpg', - sourceLink: 'https://unsplash.com/photos/XOhI_kW_TaM', - sourceName: 'Nathan Dumlao'), + image: 'assets/images/playlists/coffee.jpg', + sourceLink: 'https://unsplash.com/photos/XOhI_kW_TaM', + sourceName: 'Nathan Dumlao', + ), const MyArtistImage( - image: 'assets/images/playlists/piano.jpg', - sourceLink: 'https://unsplash.com/photos/BhfE1IgcsA8', - sourceName: 'Jordan Whitfield'), + image: 'assets/images/playlists/piano.jpg', + sourceLink: 'https://unsplash.com/photos/BhfE1IgcsA8', + sourceName: 'Jordan Whitfield', + ), const MyArtistImage( - image: 'assets/images/playlists/studying.jpg', - sourceLink: 'https://unsplash.com/photos/-moT-Deiw1M', - sourceName: 'Humble Lamb'), + image: 'assets/images/playlists/studying.jpg', + sourceLink: 'https://unsplash.com/photos/-moT-Deiw1M', + sourceName: 'Humble Lamb', + ), const MyArtistImage( - image: 'assets/images/playlists/jazz.jpg', - sourceLink: 'https://unsplash.com/photos/BY_KyTwTKq4', - sourceName: 'dimitri.photography'), + image: 'assets/images/playlists/jazz.jpg', + sourceLink: 'https://unsplash.com/photos/BY_KyTwTKq4', + sourceName: 'dimitri.photography', + ), ]; } @@ -85,8 +94,10 @@ class PlaylistsProvider { ); } - static final List _randomPlaylists = - List.generate(10, (index) => randomLengthPlaylist()); + static final List _randomPlaylists = List.generate( + 10, + (index) => randomLengthPlaylist(), + ); } String randomId() { diff --git a/boring_to_beautiful/step_07/lib/src/shared/providers/songs.dart b/boring_to_beautiful/step_07/lib/src/shared/providers/songs.dart index ed018a83ff..f1205f2dcb 100644 --- a/boring_to_beautiful/step_07/lib/src/shared/providers/songs.dart +++ b/boring_to_beautiful/step_07/lib/src/shared/providers/songs.dart @@ -52,9 +52,10 @@ final _songs = [ ArtistsProvider.shared.getArtist('jonjames')!, '3:35'.toDuration(), const MyArtistImage( - image: 'assets/images/albums/artist4-album2.jpg', - sourceLink: 'https://unsplash.com/photos/RQgKM1h2agA', - sourceName: 'Alexandru Acea'), + image: 'assets/images/albums/artist4-album2.jpg', + sourceLink: 'https://unsplash.com/photos/RQgKM1h2agA', + sourceName: 'Alexandru Acea', + ), ), RankedSong( 2, @@ -62,9 +63,10 @@ final _songs = [ ArtistsProvider.shared.getArtist('jonjames')!, '3:52'.toDuration(), const MyArtistImage( - image: 'assets/images/albums/artist4-album1.jpg', - sourceLink: 'https://unsplash.com/photos/ZWDg7v2FPWE', - sourceName: 'Jr Korpa'), + image: 'assets/images/albums/artist4-album1.jpg', + sourceLink: 'https://unsplash.com/photos/ZWDg7v2FPWE', + sourceName: 'Jr Korpa', + ), ), RankedSong( 3, @@ -72,9 +74,10 @@ final _songs = [ ArtistsProvider.shared.getArtist('jonjames')!, '3:39'.toDuration(), const MyArtistImage( - image: 'assets/images/albums/artist4-album3.jpg', - sourceLink: 'https://unsplash.com/photos/rX12B5uX7QM', - sourceName: 'Stormseeker'), + image: 'assets/images/albums/artist4-album3.jpg', + sourceLink: 'https://unsplash.com/photos/rX12B5uX7QM', + sourceName: 'Stormseeker', + ), ), RankedSong( 1, diff --git a/boring_to_beautiful/step_07/lib/src/shared/providers/theme.dart b/boring_to_beautiful/step_07/lib/src/shared/providers/theme.dart index 2446038ddd..66227afc83 100644 --- a/boring_to_beautiful/step_07/lib/src/shared/providers/theme.dart +++ b/boring_to_beautiful/step_07/lib/src/shared/providers/theme.dart @@ -28,12 +28,13 @@ class ThemeSettingChange extends Notification { } class ThemeProvider extends InheritedWidget { - const ThemeProvider( - {super.key, - required this.settings, - required this.lightDynamic, - required this.darkDynamic, - required super.child}); + const ThemeProvider({ + super.key, + required this.settings, + required this.lightDynamic, + required this.darkDynamic, + required super.child, + }); final ValueNotifier settings; final ColorScheme? lightDynamic; @@ -59,8 +60,9 @@ class ThemeProvider extends InheritedWidget { Color blend(Color targetColor) { return Color( - // ignore: deprecated_member_use - Blend.harmonize(targetColor.value, settings.value.sourceColor.value)); + // ignore: deprecated_member_use + Blend.harmonize(targetColor.value, settings.value.sourceColor.value), + ); } Color source(Color? target) { @@ -72,18 +74,18 @@ class ThemeProvider extends InheritedWidget { } ColorScheme colors(Brightness brightness, Color? targetColor) { - final dynamicPrimary = brightness == Brightness.light - ? lightDynamic?.primary - : darkDynamic?.primary; + final dynamicPrimary = + brightness == Brightness.light + ? lightDynamic?.primary + : darkDynamic?.primary; return ColorScheme.fromSeed( seedColor: dynamicPrimary ?? source(targetColor), brightness: brightness, ); } - ShapeBorder get shapeMedium => RoundedRectangleBorder( - borderRadius: BorderRadius.circular(8), - ); + ShapeBorder get shapeMedium => + RoundedRectangleBorder(borderRadius: BorderRadius.circular(8)); CardTheme cardTheme() { return CardTheme( @@ -113,21 +115,13 @@ class ThemeProvider extends InheritedWidget { labelColor: colors.secondary, unselectedLabelColor: colors.onSurfaceVariant, indicator: BoxDecoration( - border: Border( - bottom: BorderSide( - color: colors.secondary, - width: 2, - ), - ), + border: Border(bottom: BorderSide(color: colors.secondary, width: 2)), ), ); } BottomAppBarTheme bottomAppBarTheme(ColorScheme colors) { - return BottomAppBarTheme( - color: colors.surface, - elevation: 0, - ); + return BottomAppBarTheme(color: colors.surface, elevation: 0); } BottomNavigationBarThemeData bottomNavigationBarTheme(ColorScheme colors) { @@ -146,9 +140,7 @@ class ThemeProvider extends InheritedWidget { } DrawerThemeData drawerTheme(ColorScheme colors) { - return DrawerThemeData( - backgroundColor: colors.surface, - ); + return DrawerThemeData(backgroundColor: colors.surface); } ThemeData light([Color? targetColor]) { @@ -207,10 +199,7 @@ class ThemeProvider extends InheritedWidget { } class ThemeSettings { - ThemeSettings({ - required this.sourceColor, - required this.themeMode, - }); + ThemeSettings({required this.sourceColor, required this.themeMode}); final Color sourceColor; final ThemeMode themeMode; @@ -221,10 +210,7 @@ Color randomColor() { } // Custom Colors -const linkColor = CustomColor( - name: 'Link Color', - color: Color(0xFF00B0FF), -); +const linkColor = CustomColor(name: 'Link Color', color: Color(0xFF00B0FF)); class CustomColor { const CustomColor({ diff --git a/boring_to_beautiful/step_07/lib/src/shared/router.dart b/boring_to_beautiful/step_07/lib/src/shared/router.dart index 3efb7362fa..db82627246 100644 --- a/boring_to_beautiful/step_07/lib/src/shared/router.dart +++ b/boring_to_beautiful/step_07/lib/src/shared/router.dart @@ -20,11 +20,7 @@ final artistsProvider = ArtistsProvider(); final playlistsProvider = PlaylistsProvider(); const List destinations = [ - NavigationDestination( - label: 'Home', - icon: Icon(Icons.home), - route: '/', - ), + NavigationDestination(label: 'Home', icon: Icon(Icons.home), route: '/'), NavigationDestination( label: 'Playlists', icon: Icon(Icons.playlist_add_check), @@ -56,41 +52,46 @@ final appRouter = GoRouter( // HomeScreen GoRoute( path: '/', - pageBuilder: (context, state) => const MaterialPage( - key: _pageKey, - child: RootLayout( - key: _scaffoldKey, - currentIndex: 0, - child: HomeScreen(), - ), - ), + pageBuilder: + (context, state) => const MaterialPage( + key: _pageKey, + child: RootLayout( + key: _scaffoldKey, + currentIndex: 0, + child: HomeScreen(), + ), + ), ), // PlaylistHomeScreen GoRoute( path: '/playlists', - pageBuilder: (context, state) => const MaterialPage( - key: _pageKey, - child: RootLayout( - key: _scaffoldKey, - currentIndex: 1, - child: PlaylistHomeScreen(), - ), - ), - routes: [ - GoRoute( - path: ':pid', - pageBuilder: (context, state) => MaterialPage( - key: state.pageKey, + pageBuilder: + (context, state) => const MaterialPage( + key: _pageKey, child: RootLayout( key: _scaffoldKey, currentIndex: 1, - child: PlaylistScreen( - playlist: playlistsProvider - .getPlaylist(state.pathParameters['pid']!)!, - ), + child: PlaylistHomeScreen(), ), ), + routes: [ + GoRoute( + path: ':pid', + pageBuilder: + (context, state) => MaterialPage( + key: state.pageKey, + child: RootLayout( + key: _scaffoldKey, + currentIndex: 1, + child: PlaylistScreen( + playlist: + playlistsProvider.getPlaylist( + state.pathParameters['pid']!, + )!, + ), + ), + ), ), ], ), @@ -98,28 +99,32 @@ final appRouter = GoRouter( // ArtistHomeScreen GoRoute( path: '/artists', - pageBuilder: (context, state) => const MaterialPage( - key: _pageKey, - child: RootLayout( - key: _scaffoldKey, - currentIndex: 2, - child: ArtistsScreen(), - ), - ), - routes: [ - GoRoute( - path: ':aid', - pageBuilder: (context, state) => MaterialPage( - key: state.pageKey, + pageBuilder: + (context, state) => const MaterialPage( + key: _pageKey, child: RootLayout( key: _scaffoldKey, currentIndex: 2, - child: ArtistScreen( - artist: - artistsProvider.getArtist(state.pathParameters['aid']!)!, - ), + child: ArtistsScreen(), ), ), + routes: [ + GoRoute( + path: ':aid', + pageBuilder: + (context, state) => MaterialPage( + key: state.pageKey, + child: RootLayout( + key: _scaffoldKey, + currentIndex: 2, + child: ArtistScreen( + artist: + artistsProvider.getArtist( + state.pathParameters['aid']!, + )!, + ), + ), + ), // builder: (context, state) => ArtistScreen( // id: state.params['aid']!, // ), @@ -129,14 +134,15 @@ final appRouter = GoRouter( for (final route in destinations.skip(3)) GoRoute( path: route.route, - pageBuilder: (context, state) => MaterialPage( - key: _pageKey, - child: RootLayout( - key: _scaffoldKey, - currentIndex: destinations.indexOf(route), - child: const SizedBox(), - ), - ), + pageBuilder: + (context, state) => MaterialPage( + key: _pageKey, + child: RootLayout( + key: _scaffoldKey, + currentIndex: destinations.indexOf(route), + child: const SizedBox(), + ), + ), ), ], ); diff --git a/boring_to_beautiful/step_07/lib/src/shared/views/adaptive_image_card.dart b/boring_to_beautiful/step_07/lib/src/shared/views/adaptive_image_card.dart index 07cab2b0d7..99f5be0837 100644 --- a/boring_to_beautiful/step_07/lib/src/shared/views/adaptive_image_card.dart +++ b/boring_to_beautiful/step_07/lib/src/shared/views/adaptive_image_card.dart @@ -36,20 +36,13 @@ class AdaptiveImageCard extends StatelessWidget { ), ), Expanded( - child: Padding( - padding: const EdgeInsets.all(20), - child: child, - ), + child: Padding(padding: const EdgeInsets.all(20), child: child), ), ], ); } return Padding( - padding: const EdgeInsets.only( - left: 20, - bottom: 20, - top: 20, - ), + padding: const EdgeInsets.only(left: 20, bottom: 20, top: 20), child: Row( mainAxisAlignment: MainAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.end, @@ -65,11 +58,8 @@ class AdaptiveImageCard extends StatelessWidget { ), ), Expanded( - child: Padding( - padding: const EdgeInsets.all(20), - child: child, - ), - ) + child: Padding(padding: const EdgeInsets.all(20), child: child), + ), ], ), ); diff --git a/boring_to_beautiful/step_07/lib/src/shared/views/adaptive_navigation.dart b/boring_to_beautiful/step_07/lib/src/shared/views/adaptive_navigation.dart index 067ea7d17f..709068ea07 100644 --- a/boring_to_beautiful/step_07/lib/src/shared/views/adaptive_navigation.dart +++ b/boring_to_beautiful/step_07/lib/src/shared/views/adaptive_navigation.dart @@ -30,12 +30,15 @@ class AdaptiveNavigation extends StatelessWidget { NavigationRail( extended: dimens.maxWidth >= 800, minExtendedWidth: 180, - destinations: destinations - .map((e) => NavigationRailDestination( - icon: e.icon, - label: Text(e.label), - )) - .toList(), + destinations: + destinations + .map( + (e) => NavigationRailDestination( + icon: e.icon, + label: Text(e.label), + ), + ) + .toList(), selectedIndex: selectedIndex, onDestinationSelected: onDestinationSelected, ), diff --git a/boring_to_beautiful/step_07/lib/src/shared/views/article_content.dart b/boring_to_beautiful/step_07/lib/src/shared/views/article_content.dart index af243f015b..c5a0b5e62a 100644 --- a/boring_to_beautiful/step_07/lib/src/shared/views/article_content.dart +++ b/boring_to_beautiful/step_07/lib/src/shared/views/article_content.dart @@ -5,11 +5,7 @@ import 'package:flutter/material.dart'; class ArticleContent extends StatelessWidget { - const ArticleContent({ - super.key, - required this.child, - this.maxWidth = 960, - }); + const ArticleContent({super.key, required this.child, this.maxWidth = 960}); final double maxWidth; final Widget child; @@ -19,13 +15,8 @@ class ArticleContent extends StatelessWidget { return Container( alignment: Alignment.topCenter, child: ConstrainedBox( - constraints: BoxConstraints( - maxWidth: maxWidth, - ), - child: Padding( - padding: const EdgeInsets.all(15), - child: child, - ), + constraints: BoxConstraints(maxWidth: maxWidth), + child: Padding(padding: const EdgeInsets.all(15), child: child), ), ); } diff --git a/boring_to_beautiful/step_07/lib/src/shared/views/bottom_bar.dart b/boring_to_beautiful/step_07/lib/src/shared/views/bottom_bar.dart index 06e085a9b6..bf15ad9bb0 100644 --- a/boring_to_beautiful/step_07/lib/src/shared/views/bottom_bar.dart +++ b/boring_to_beautiful/step_07/lib/src/shared/views/bottom_bar.dart @@ -26,16 +26,18 @@ class BottomBar extends StatelessWidget implements PreferredSizeWidget { final bloc = BlocProvider.of(context); return BlocBuilder( bloc: bloc, - builder: (context, state) => _BottomBar( - artist: state.songWithProgress?.song.artist, - isMuted: state.isMuted, - isPlaying: state.isPlaying, - preferredSize: preferredSize, - progress: state.songWithProgress?.progress, - song: state.songWithProgress?.song, - togglePlayPause: () => bloc.add(const PlaybackEvent.togglePlayPause()), - volume: state.volume, - ), + builder: + (context, state) => _BottomBar( + artist: state.songWithProgress?.song.artist, + isMuted: state.isMuted, + isPlaying: state.isPlaying, + preferredSize: preferredSize, + progress: state.songWithProgress?.progress, + song: state.songWithProgress?.song, + togglePlayPause: + () => bloc.add(const PlaybackEvent.togglePlayPause()), + volume: state.volume, + ), ); } } @@ -63,10 +65,12 @@ class _BottomBar extends StatelessWidget { @override Widget build(BuildContext context) => LayoutBuilder( - builder: (context, constraints) => constraints.isTablet - ? _buildDesktopBar(context, constraints) - : _buildMobileBar(context, constraints), - ); + builder: + (context, constraints) => + constraints.isTablet + ? _buildDesktopBar(context, constraints) + : _buildMobileBar(context, constraints), + ); Widget _buildDesktopBar(BuildContext context, BoxConstraints constraints) { return ColoredBox( @@ -79,10 +83,7 @@ class _BottomBar extends StatelessWidget { Row( children: [ _AlbumArt(song: song), - _SongDetails( - artist: artist, - song: song, - ), + _SongDetails(artist: artist, song: song), ], ), Flexible( @@ -95,12 +96,7 @@ class _BottomBar extends StatelessWidget { isPlaying: isPlaying, togglePlayPause: togglePlayPause, ), - Center( - child: _ProgressBar( - progress: progress, - song: song, - ), - ), + Center(child: _ProgressBar(progress: progress, song: song)), ], ), ), @@ -114,17 +110,18 @@ class _BottomBar extends StatelessWidget { final overlay = Overlay.of(context); OverlayEntry? entry; entry = OverlayEntry( - builder: (context) => Stack( - children: [ - Positioned( - child: _FullScreenPlayer( - onClose: () { - entry?.remove(); - }, - ), + builder: + (context) => Stack( + children: [ + Positioned( + child: _FullScreenPlayer( + onClose: () { + entry?.remove(); + }, + ), + ), + ], ), - ], - ), ); overlay.insert(entry); }, @@ -136,10 +133,10 @@ class _BottomBar extends StatelessWidget { } double get songProgress => switch ((progress, song)) { - (Duration progress, Song song) => - progress.inMilliseconds / song.length.inMilliseconds, - _ => 0, - }; + (Duration progress, Song song) => + progress.inMilliseconds / song.length.inMilliseconds, + _ => 0, + }; Widget _buildMobileBar(BuildContext context, BoxConstraints constraints) { return ColoredBox( @@ -152,17 +149,18 @@ class _BottomBar extends StatelessWidget { final overlay = Overlay.of(context); OverlayEntry? entry; entry = OverlayEntry( - builder: (context) => Stack( - children: [ - Positioned( - child: _MobilePlayer( - onClose: () { - entry?.remove(); - }, - ), + builder: + (context) => Stack( + children: [ + Positioned( + child: _MobilePlayer( + onClose: () { + entry?.remove(); + }, + ), + ), + ], ), - ], - ), ); overlay.insert(entry); }, @@ -191,10 +189,7 @@ class _BottomBar extends StatelessWidget { mainAxisAlignment: MainAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start, children: [ - Text( - song?.title ?? '', - style: context.labelMedium, - ), + Text(song?.title ?? '', style: context.labelMedium), Text( song?.artist.name ?? '', style: context.labelSmall, @@ -220,10 +215,7 @@ class _BottomBar extends StatelessWidget { } class _ProgressBar extends StatelessWidget { - const _ProgressBar({ - required this.progress, - required this.song, - }); + const _ProgressBar({required this.progress, required this.song}); /// Current playback depth into user is into [song]. final Duration? progress; @@ -231,10 +223,10 @@ class _ProgressBar extends StatelessWidget { final Song? song; double get songProgress => switch ((progress, song)) { - (Duration progress, Song song) => - progress.inMilliseconds / song.length.inMilliseconds, - _ => 0, - }; + (Duration progress, Song song) => + progress.inMilliseconds / song.length.inMilliseconds, + _ => 0, + }; @override Widget build(BuildContext context) { @@ -252,29 +244,32 @@ class _ProgressBar extends StatelessWidget { children: [ const SizedBox(width: 10), SizedBox( - child: progress != null - ? Text(progress!.toHumanizedString(), - style: Theme.of(context).textTheme.bodySmall) - : const Text('-'), + child: + progress != null + ? Text( + progress!.toHumanizedString(), + style: Theme.of(context).textTheme.bodySmall, + ) + : const Text('-'), ), Expanded( child: Slider( value: songProgress.clamp(0, 1), divisions: 1000, onChanged: (percent) { - BlocProvider.of(context).add( - PlaybackEvent.moveToInSong(percent), - ); + BlocProvider.of( + context, + ).add(PlaybackEvent.moveToInSong(percent)); }, onChangeEnd: (percent) { - BlocProvider.of(context).add( - PlaybackEvent.moveToInSong(percent), - ); + BlocProvider.of( + context, + ).add(PlaybackEvent.moveToInSong(percent)); // Because dragging pauses auto playback, resume playing // once the user finishes dragging. - BlocProvider.of(context).add( - const PlaybackEvent.togglePlayPause(), - ); + BlocProvider.of( + context, + ).add(const PlaybackEvent.togglePlayPause()); }, activeColor: Theme.of(context).colorScheme.onTertiaryContainer, @@ -282,12 +277,15 @@ class _ProgressBar extends StatelessWidget { ), ), SizedBox( - child: song != null - ? Text(song!.length.toHumanizedString(), - style: Theme.of(context).textTheme.bodySmall) - : const Text('-'), + child: + song != null + ? Text( + song!.length.toHumanizedString(), + style: Theme.of(context).textTheme.bodySmall, + ) + : const Text('-'), ), - const SizedBox(width: 10) + const SizedBox(width: 10), ], ), ); @@ -297,10 +295,7 @@ class _ProgressBar extends StatelessWidget { } class _VolumeBar extends StatelessWidget { - const _VolumeBar({ - required this.volume, - required this.isMuted, - }); + const _VolumeBar({required this.volume, required this.isMuted}); /// The percentage, between 0 and 1, at which to render the volume slider. final double volume; @@ -313,17 +308,16 @@ class _VolumeBar extends StatelessWidget { @override Widget build(BuildContext context) { return ConstrainedBox( - constraints: const BoxConstraints( - maxWidth: 200, - ), + constraints: const BoxConstraints(maxWidth: 200), child: Padding( padding: const EdgeInsets.all(8), child: Row( children: [ GestureDetector( - onTap: () => BlocProvider.of(context).add( - const PlaybackEvent.toggleMute(), - ), + onTap: + () => BlocProvider.of( + context, + ).add(const PlaybackEvent.toggleMute()), child: Icon(!isMuted ? Icons.volume_mute : Icons.volume_off), ), Expanded( @@ -332,8 +326,10 @@ class _VolumeBar extends StatelessWidget { min: 0, max: 1, divisions: 100, - onChanged: (newValue) => BlocProvider.of(context) - .add(PlaybackEvent.setVolume(newValue)), + onChanged: + (newValue) => BlocProvider.of( + context, + ).add(PlaybackEvent.setVolume(newValue)), activeColor: Theme.of(context).colorScheme.onTertiaryContainer, inactiveColor: Theme.of(context).colorScheme.onSurface, ), @@ -356,49 +352,50 @@ class _PlaybackControls extends StatelessWidget { @override Widget build(BuildContext context) { - return LayoutBuilder(builder: (context, constraints) { - double iconSize = 24; - double playIconSize = 32; - double innerPadding = 16; - double playPadding = 20; - if (constraints.maxWidth < 500) { - iconSize = 21; - playIconSize = 28; - innerPadding = 14; - playPadding = 17; - } - return Row( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Padding( + return LayoutBuilder( + builder: (context, constraints) { + double iconSize = 24; + double playIconSize = 32; + double innerPadding = 16; + double playPadding = 20; + if (constraints.maxWidth < 500) { + iconSize = 21; + playIconSize = 28; + innerPadding = 14; + playPadding = 17; + } + return Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Padding( padding: EdgeInsets.fromLTRB(0, 0, innerPadding, 0), - child: Icon(Icons.shuffle, size: iconSize)), - Icon(Icons.skip_previous, size: iconSize), - Padding( - padding: EdgeInsets.fromLTRB(playPadding, 0, innerPadding, 0), - child: GestureDetector( - onTap: togglePlayPause, - child: Icon( - isPlaying ? Icons.pause_circle : Icons.play_circle, - size: playIconSize, + child: Icon(Icons.shuffle, size: iconSize), + ), + Icon(Icons.skip_previous, size: iconSize), + Padding( + padding: EdgeInsets.fromLTRB(playPadding, 0, innerPadding, 0), + child: GestureDetector( + onTap: togglePlayPause, + child: Icon( + isPlaying ? Icons.pause_circle : Icons.play_circle, + size: playIconSize, + ), ), ), - ), - Icon(Icons.skip_next, size: iconSize), - Padding( - padding: EdgeInsets.fromLTRB(innerPadding, 0, 0, 0), - child: Icon(Icons.repeat, size: iconSize), - ), - ], - ); - }); + Icon(Icons.skip_next, size: iconSize), + Padding( + padding: EdgeInsets.fromLTRB(innerPadding, 0, 0, 0), + child: Icon(Icons.repeat, size: iconSize), + ), + ], + ); + }, + ); } } class _AlbumArt extends StatelessWidget { - const _AlbumArt({ - required this.song, - }); + const _AlbumArt({required this.song}); final Song? song; @@ -409,21 +406,17 @@ class _AlbumArt extends StatelessWidget { child: SizedBox( width: 70, height: 70, - child: song != null - ? Image.asset(song!.image.image) - : Container( - color: Colors.pink[100], - ), + child: + song != null + ? Image.asset(song!.image.image) + : Container(color: Colors.pink[100]), ), ); } } class _SongDetails extends StatelessWidget { - const _SongDetails({ - required this.artist, - required this.song, - }); + const _SongDetails({required this.artist, required this.song}); final Artist? artist; final Song? song; @@ -455,9 +448,7 @@ class _SongDetails extends StatelessWidget { } class _FullScreenPlayer extends StatefulWidget { - const _FullScreenPlayer({ - required this.onClose, - }); + const _FullScreenPlayer({required this.onClose}); final VoidCallback onClose; @@ -489,29 +480,33 @@ class _FullScreenPlayerState extends State<_FullScreenPlayer> { final bloc = BlocProvider.of(context); return BlocBuilder( bloc: bloc, - builder: (context, state) => Theme( - data: ThemeProvider.of(context).dark(), - child: Scaffold( - body: LayoutBuilder( - builder: (context, dimens) { - return MouseRegion( - onHover: (_) { - setState(() { - _showControls = true; - }); - hideControls(); + builder: + (context, state) => Theme( + data: ThemeProvider.of(context).dark(), + child: Scaffold( + body: LayoutBuilder( + builder: (context, dimens) { + return MouseRegion( + onHover: (_) { + setState(() { + _showControls = true; + }); + hideControls(); + }, + child: buildPlayer(context, state, dimens), + ); }, - child: buildPlayer(context, state, dimens), - ); - }, + ), + ), ), - ), - ), ); } Widget buildPlayer( - BuildContext context, PlaybackState state, BoxConstraints dimens) { + BuildContext context, + PlaybackState state, + BoxConstraints dimens, + ) { final bloc = BlocProvider.of(context); final current = state.songWithProgress; final song = current?.song; @@ -519,26 +514,25 @@ class _FullScreenPlayerState extends State<_FullScreenPlayer> { fit: StackFit.expand, children: [ Positioned.fill( - child: current == null - ? const Center(child: Text('No song selected')) - : Container( - color: context.colors.shadow, - child: Opacity( - opacity: 0.3, - child: Image.asset( - song!.image.image, - fit: BoxFit.cover, + child: + current == null + ? const Center(child: Text('No song selected')) + : Container( + color: context.colors.shadow, + child: Opacity( + opacity: 0.3, + child: Image.asset(song!.image.image, fit: BoxFit.cover), ), ), - ), ), Positioned( top: 20, right: 20, child: IconButton( - color: song != null - ? context.colors.onSurface - : context.colors.onSurface, + color: + song != null + ? context.colors.onSurface + : context.colors.onSurface, icon: const Icon(Icons.fullscreen_exit), onPressed: widget.onClose, ), @@ -569,8 +563,9 @@ class _FullScreenPlayerState extends State<_FullScreenPlayer> { Text( song.artist.name, style: context.labelSmall!.copyWith( - fontSize: 20, - color: context.colors.onSurface.withAlpha(204)), + fontSize: 20, + color: context.colors.onSurface.withAlpha(204), + ), overflow: TextOverflow.clip, ), ], @@ -582,10 +577,7 @@ class _FullScreenPlayerState extends State<_FullScreenPlayer> { right: 20, left: 20, bottom: dimens.biggest.height * 0.2, - child: _ProgressBar( - progress: current?.progress, - song: song, - ), + child: _ProgressBar(progress: current?.progress, song: song), ), Positioned( right: 20, @@ -598,8 +590,8 @@ class _FullScreenPlayerState extends State<_FullScreenPlayer> { scale: 1.5, child: _PlaybackControls( isPlaying: state.isPlaying, - togglePlayPause: () => - bloc.add(const PlaybackEvent.togglePlayPause()), + togglePlayPause: + () => bloc.add(const PlaybackEvent.togglePlayPause()), ), ), ), @@ -611,9 +603,7 @@ class _FullScreenPlayerState extends State<_FullScreenPlayer> { } class _MobilePlayer extends StatelessWidget { - const _MobilePlayer({ - required this.onClose, - }); + const _MobilePlayer({required this.onClose}); final VoidCallback onClose; @@ -622,46 +612,52 @@ class _MobilePlayer extends StatelessWidget { final bloc = BlocProvider.of(context); return BlocBuilder( bloc: bloc, - builder: (context, state) => Theme( - data: ThemeProvider.of(context).dark(), - child: Scaffold( - body: LayoutBuilder( - builder: (context, dimens) { - return buildPlayer(context, state, dimens); - }, + builder: + (context, state) => Theme( + data: ThemeProvider.of(context).dark(), + child: Scaffold( + body: LayoutBuilder( + builder: (context, dimens) { + return buildPlayer(context, state, dimens); + }, + ), + ), ), - ), - ), ); } Widget buildPlayer( - BuildContext context, PlaybackState state, BoxConstraints dimens) { + BuildContext context, + PlaybackState state, + BoxConstraints dimens, + ) { final bloc = BlocProvider.of(context); final current = state.songWithProgress; return Stack( children: [ Positioned.fill( - child: current == null - ? const Center(child: Text('No song selected')) - : Container( - color: context.colors.shadow, - child: Opacity( - opacity: 0.3, - child: Image.asset( - current.song.image.image, - fit: BoxFit.cover, + child: + current == null + ? const Center(child: Text('No song selected')) + : Container( + color: context.colors.shadow, + child: Opacity( + opacity: 0.3, + child: Image.asset( + current.song.image.image, + fit: BoxFit.cover, + ), ), ), - ), ), Positioned( top: 20, left: 20, child: IconButton( - color: current?.song != null - ? context.colors.onSurface - : context.colors.onSurface, + color: + current?.song != null + ? context.colors.onSurface + : context.colors.onSurface, icon: const RotatedBox( quarterTurns: 1, child: Icon(Icons.chevron_right), @@ -676,10 +672,7 @@ class _MobilePlayer extends StatelessWidget { left: 0, right: 0, height: dimens.biggest.height * 0.5, - child: Image.asset( - current.song.image.image, - fit: BoxFit.contain, - ), + child: Image.asset(current.song.image.image, fit: BoxFit.contain), ), Positioned( left: 0, @@ -705,8 +698,9 @@ class _MobilePlayer extends StatelessWidget { Text( current.song.artist.name, style: context.labelSmall!.copyWith( - fontSize: 12, - color: context.colors.onSurface.withAlpha(204)), + fontSize: 12, + color: context.colors.onSurface.withAlpha(204), + ), overflow: TextOverflow.clip, ), ], @@ -718,15 +712,12 @@ class _MobilePlayer extends StatelessWidget { scale: 1.5, child: _PlaybackControls( isPlaying: state.isPlaying, - togglePlayPause: () => - bloc.add(const PlaybackEvent.togglePlayPause()), + togglePlayPause: + () => bloc.add(const PlaybackEvent.togglePlayPause()), ), ), ), - _ProgressBar( - progress: current.progress, - song: current.song, - ), + _ProgressBar(progress: current.progress, song: current.song), ], ), ), diff --git a/boring_to_beautiful/step_07/lib/src/shared/views/brightness_toggle.dart b/boring_to_beautiful/step_07/lib/src/shared/views/brightness_toggle.dart index 46dde4810f..5b5332392b 100644 --- a/boring_to_beautiful/step_07/lib/src/shared/views/brightness_toggle.dart +++ b/boring_to_beautiful/step_07/lib/src/shared/views/brightness_toggle.dart @@ -13,9 +13,10 @@ class BrightnessToggle extends StatelessWidget { Widget build(BuildContext context) { final isDark = Theme.of(context).brightness == Brightness.dark; return IconButton( - icon: Theme.of(context).brightness == Brightness.light - ? const Icon(Icons.brightness_3) - : const Icon(Icons.brightness_7), + icon: + Theme.of(context).brightness == Brightness.light + ? const Icon(Icons.brightness_3) + : const Icon(Icons.brightness_7), onPressed: () { final themeProvider = ThemeProvider.of(context); final settings = themeProvider.settings.value; diff --git a/boring_to_beautiful/step_07/lib/src/shared/views/center_row.dart b/boring_to_beautiful/step_07/lib/src/shared/views/center_row.dart index 36d428e3b8..c1f3effcc2 100644 --- a/boring_to_beautiful/step_07/lib/src/shared/views/center_row.dart +++ b/boring_to_beautiful/step_07/lib/src/shared/views/center_row.dart @@ -5,23 +5,12 @@ import 'package:flutter/material.dart'; class CenterRow extends StatelessWidget { - const CenterRow({ - super.key, - required this.child, - }); + const CenterRow({super.key, required this.child}); final Widget child; @override Widget build(BuildContext context) { - return Row( - children: [ - Expanded( - child: Center( - child: child, - ), - ), - ], - ); + return Row(children: [Expanded(child: Center(child: child))]); } } diff --git a/boring_to_beautiful/step_07/lib/src/shared/views/clickable.dart b/boring_to_beautiful/step_07/lib/src/shared/views/clickable.dart index cd7ef46268..f192f0b135 100644 --- a/boring_to_beautiful/step_07/lib/src/shared/views/clickable.dart +++ b/boring_to_beautiful/step_07/lib/src/shared/views/clickable.dart @@ -14,10 +14,7 @@ class Clickable extends StatelessWidget { Widget build(BuildContext context) { return MouseRegion( cursor: SystemMouseCursors.click, - child: GestureDetector( - onTap: onTap, - child: child, - ), + child: GestureDetector(onTap: onTap, child: child), ); } } diff --git a/boring_to_beautiful/step_07/lib/src/shared/views/events.dart b/boring_to_beautiful/step_07/lib/src/shared/views/events.dart index ed38465460..ab9140e56d 100644 --- a/boring_to_beautiful/step_07/lib/src/shared/views/events.dart +++ b/boring_to_beautiful/step_07/lib/src/shared/views/events.dart @@ -24,43 +24,18 @@ class Events extends StatelessWidget { child: DataTable( horizontalMargin: 5.0, columns: const [ - DataColumn( - label: Text( - 'Date', - ), - numeric: true, - ), - DataColumn( - label: Text( - 'Event', - ), - ), - DataColumn( - label: Text( - 'Location', - ), - ), - DataColumn( - label: Text( - 'More info', - ), - ), + DataColumn(label: Text('Date'), numeric: true), + DataColumn(label: Text('Event')), + DataColumn(label: Text('Location')), + DataColumn(label: Text('More info')), ], rows: [ for (final event in artist.events) DataRow( cells: [ - DataCell( - Text(event.date), - ), - DataCell( - Row(children: [ - Expanded(child: Text(event.title)), - ]), - ), - DataCell( - Text(event.location), - ), + DataCell(Text(event.date)), + DataCell(Row(children: [Expanded(child: Text(event.title))])), + DataCell(Text(event.location)), DataCell( Clickable( child: Text( @@ -70,8 +45,9 @@ class Events extends StatelessWidget { decoration: TextDecoration.underline, ), ), - onTap: () => - launchUrl(Uri.parse('https://docs.flutter.dev')), + onTap: + () => + launchUrl(Uri.parse('https://docs.flutter.dev')), ), ), ], diff --git a/boring_to_beautiful/step_07/lib/src/shared/views/hover_toggle.dart b/boring_to_beautiful/step_07/lib/src/shared/views/hover_toggle.dart index ec98c2863c..649cfcab63 100644 --- a/boring_to_beautiful/step_07/lib/src/shared/views/hover_toggle.dart +++ b/boring_to_beautiful/step_07/lib/src/shared/views/hover_toggle.dart @@ -31,9 +31,10 @@ class _HoverToggleState extends State with MaterialStateMixin { cursor: isHovered ? SystemMouseCursors.click : MouseCursor.defer, onEnter: (_) => setMaterialState(WidgetState.hovered, true), onExit: (_) => setMaterialState(WidgetState.hovered, false), - child: widget.mode == HoverMode.replace - ? _buildReplaceableChildren() - : _buildChildrenStack(), + child: + widget.mode == HoverMode.replace + ? _buildReplaceableChildren() + : _buildChildrenStack(), ), ); } @@ -41,12 +42,7 @@ class _HoverToggleState extends State with MaterialStateMixin { Widget _buildChildrenStack() { Widget child = isHovered ? Opacity(opacity: 0.2, child: widget.child) : widget.child; - return Stack( - children: [ - child, - if (isHovered) widget.hoverChild, - ], - ); + return Stack(children: [child, if (isHovered) widget.hoverChild]); } Widget _buildReplaceableChildren() => diff --git a/boring_to_beautiful/step_07/lib/src/shared/views/hoverable_song_play_button.dart b/boring_to_beautiful/step_07/lib/src/shared/views/hoverable_song_play_button.dart index 512f3d1d3c..dd588e3dbe 100644 --- a/boring_to_beautiful/step_07/lib/src/shared/views/hoverable_song_play_button.dart +++ b/boring_to_beautiful/step_07/lib/src/shared/views/hoverable_song_play_button.dart @@ -29,9 +29,10 @@ class HoverableSongPlayButton extends StatelessWidget { hoverChild: Center( child: GestureDetector( child: const Icon(Icons.play_arrow), - onTap: () => BlocProvider.of(context).add( - PlaybackEvent.changeSong(song), - ), + onTap: + () => BlocProvider.of( + context, + ).add(PlaybackEvent.changeSong(song)), ), ), mode: hoverMode, diff --git a/boring_to_beautiful/step_07/lib/src/shared/views/image_card.dart b/boring_to_beautiful/step_07/lib/src/shared/views/image_card.dart index 0af9f75f33..6e7f6cd42d 100644 --- a/boring_to_beautiful/step_07/lib/src/shared/views/image_card.dart +++ b/boring_to_beautiful/step_07/lib/src/shared/views/image_card.dart @@ -7,13 +7,14 @@ import '../../shared/extensions.dart'; import 'outlined_card.dart'; class ImageCard extends StatelessWidget { - const ImageCard( - {super.key, - required this.title, - required this.details, - required this.image, - this.subtitle, - this.clickable = false}); + const ImageCard({ + super.key, + required this.title, + required this.details, + required this.image, + this.subtitle, + this.clickable = false, + }); final String title; final String? subtitle; @@ -28,54 +29,51 @@ class ImageCard extends StatelessWidget { clickable: clickable, child: Padding( padding: const EdgeInsets.all(8.0), - child: LayoutBuilder(builder: (context, constraints) { - return Row( - children: [ - if (constraints.maxWidth > 600) - SizedBox( - width: 170, - height: 170, - child: Image.asset( - image, - fit: BoxFit.cover, + child: LayoutBuilder( + builder: (context, constraints) { + return Row( + children: [ + if (constraints.maxWidth > 600) + SizedBox( + width: 170, + height: 170, + child: Image.asset(image, fit: BoxFit.cover), ), - ), - Expanded( - child: Padding( - padding: padding, - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Padding( - padding: const EdgeInsets.only(bottom: 5), - child: Text( - title, - style: context.titleLarge! - .copyWith(fontWeight: FontWeight.bold), - ), - ), - if (subtitle != null) + Expanded( + child: Padding( + padding: padding, + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ Padding( - padding: const EdgeInsets.only(bottom: 10), + padding: const EdgeInsets.only(bottom: 5), child: Text( - subtitle!, - style: context.labelMedium, + title, + style: context.titleLarge!.copyWith( + fontWeight: FontWeight.bold, + ), ), ), - Text( - details, - style: context.labelMedium?.copyWith( - fontSize: 16, - height: 1.25, + if (subtitle != null) + Padding( + padding: const EdgeInsets.only(bottom: 10), + child: Text(subtitle!, style: context.labelMedium), + ), + Text( + details, + style: context.labelMedium?.copyWith( + fontSize: 16, + height: 1.25, + ), ), - ), - ], + ], + ), ), ), - ), - ], - ); - }), + ], + ); + }, + ), ), ); } diff --git a/boring_to_beautiful/step_07/lib/src/shared/views/image_tile.dart b/boring_to_beautiful/step_07/lib/src/shared/views/image_tile.dart index 4f2bbebb96..dd99152af5 100644 --- a/boring_to_beautiful/step_07/lib/src/shared/views/image_tile.dart +++ b/boring_to_beautiful/step_07/lib/src/shared/views/image_tile.dart @@ -21,19 +21,17 @@ class ImageTile extends StatelessWidget { @override Widget build(BuildContext context) { return OutlinedCard( - child: Column(crossAxisAlignment: CrossAxisAlignment.start, children: [ - Row( - children: [ - Expanded( - child: Image.asset(image, fit: BoxFit.cover), - ), - ], - ), - Column( - mainAxisAlignment: MainAxisAlignment.center, - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - Padding( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + children: [Expanded(child: Image.asset(image, fit: BoxFit.cover))], + ), + Column( + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Padding( padding: const EdgeInsets.fromLTRB(10, 5, 10, 5), child: Text( title, @@ -43,20 +41,25 @@ class ImageTile extends StatelessWidget { ), overflow: TextOverflow.ellipsis, maxLines: 1, - )), - Padding( - padding: const EdgeInsets.symmetric(vertical: 5, horizontal: 10), - child: Text( - subtitle, - overflow: TextOverflow.ellipsis, - style: context.labelSmall, - maxLines: 2, - textAlign: TextAlign.center, + ), ), - ), - ], - ) - ]), + Padding( + padding: const EdgeInsets.symmetric( + vertical: 5, + horizontal: 10, + ), + child: Text( + subtitle, + overflow: TextOverflow.ellipsis, + style: context.labelSmall, + maxLines: 2, + textAlign: TextAlign.center, + ), + ), + ], + ), + ], + ), ); } } diff --git a/boring_to_beautiful/step_07/lib/src/shared/views/outlined_card.dart b/boring_to_beautiful/step_07/lib/src/shared/views/outlined_card.dart index 0d886e2c54..ff49275dc9 100644 --- a/boring_to_beautiful/step_07/lib/src/shared/views/outlined_card.dart +++ b/boring_to_beautiful/step_07/lib/src/shared/views/outlined_card.dart @@ -5,11 +5,7 @@ import 'package:flutter/material.dart'; class OutlinedCard extends StatefulWidget { - const OutlinedCard({ - super.key, - required this.child, - this.clickable = true, - }); + const OutlinedCard({super.key, required this.child, this.clickable = true}); final Widget child; final bool clickable; @@ -22,9 +18,10 @@ class _OutlinedCardState extends State { @override Widget build(BuildContext context) { return MouseRegion( - cursor: widget.clickable - ? SystemMouseCursors.click - : SystemMouseCursors.basic, + cursor: + widget.clickable + ? SystemMouseCursors.click + : SystemMouseCursors.basic, child: Container( decoration: BoxDecoration( border: Border.all( diff --git a/boring_to_beautiful/step_07/lib/src/shared/views/play_pause_listener.dart b/boring_to_beautiful/step_07/lib/src/shared/views/play_pause_listener.dart index 52fad00863..6b4fc66709 100644 --- a/boring_to_beautiful/step_07/lib/src/shared/views/play_pause_listener.dart +++ b/boring_to_beautiful/step_07/lib/src/shared/views/play_pause_listener.dart @@ -16,10 +16,7 @@ import '../playback/bloc/bloc.dart'; /// shortcuts. By sitting below that machinery, this installs a global Spacebar /// listener which toggles Playback, as is customary in music-playing apps. class PlayPauseListener extends StatelessWidget { - const PlayPauseListener({ - super.key, - required this.child, - }); + const PlayPauseListener({super.key, required this.child}); final Widget child; @@ -28,9 +25,7 @@ class PlayPauseListener extends StatelessWidget { // Immediately catch any [_PlayPauseIntent] events released by the inner // [Shortcuts] widget. return Actions( - actions: >{ - _PlayPauseIntent: _PlayPauseAction(), - }, + actions: >{_PlayPauseIntent: _PlayPauseAction()}, child: Shortcuts( // Register a shortcut for Spacebar presses that release a // [_PlayPauseIntent] up the tree to the nearest [Actions] widget. @@ -38,9 +33,9 @@ class PlayPauseListener extends StatelessWidget { const SingleActivator(LogicalKeyboardKey.space): _PlayPauseIntent( // Create a closure which sends a [TogglePlayPause] event to the // [PlaybackBloc]. - () => BlocProvider.of(context).add( - const PlaybackEvent.togglePlayPause(), - ), + () => BlocProvider.of( + context, + ).add(const PlaybackEvent.togglePlayPause()), ), }, child: child, diff --git a/boring_to_beautiful/step_07/lib/src/shared/views/root_layout.dart b/boring_to_beautiful/step_07/lib/src/shared/views/root_layout.dart index 878b57d729..ff6270248c 100644 --- a/boring_to_beautiful/step_07/lib/src/shared/views/root_layout.dart +++ b/boring_to_beautiful/step_07/lib/src/shared/views/root_layout.dart @@ -29,36 +29,37 @@ class RootLayout extends StatelessWidget { final bloc = BlocProvider.of(context); return BlocBuilder( bloc: bloc, - builder: (context, state) => LayoutBuilder(builder: (context, dimens) { - void onSelected(int index) { - final destination = router.destinations[index]; - go.GoRouter.of(context).go(destination.route); - } + builder: + (context, state) => LayoutBuilder( + builder: (context, dimens) { + void onSelected(int index) { + final destination = router.destinations[index]; + go.GoRouter.of(context).go(destination.route); + } - final current = state.songWithProgress; - return AdaptiveNavigation( - key: _navigationRailKey, - destinations: router.destinations - .map((e) => NavigationDestination( - icon: e.icon, - label: e.label, - )) - .toList(), - selectedIndex: currentIndex, - onDestinationSelected: onSelected, - child: Column( - children: [ - Expanded( - child: _Switcher( - key: _switcherKey, - child: child, + final current = state.songWithProgress; + return AdaptiveNavigation( + key: _navigationRailKey, + destinations: + router.destinations + .map( + (e) => NavigationDestination( + icon: e.icon, + label: e.label, + ), + ) + .toList(), + selectedIndex: currentIndex, + onDestinationSelected: onSelected, + child: Column( + children: [ + Expanded(child: _Switcher(key: _switcherKey, child: child)), + if (current != null) const BottomBar(), + ], ), - ), - if (current != null) const BottomBar(), - ], + ); + }, ), - ); - }), ); } } @@ -66,21 +67,18 @@ class RootLayout extends StatelessWidget { class _Switcher extends StatelessWidget { final Widget child; - const _Switcher({ - required this.child, - super.key, - }); + const _Switcher({required this.child, super.key}); @override Widget build(BuildContext context) { return UniversalPlatform.isDesktop ? child : AnimatedSwitcher( - key: key, - duration: const Duration(milliseconds: 200), - switchInCurve: Curves.easeInOut, - switchOutCurve: Curves.easeInOut, - child: child, - ); + key: key, + duration: const Duration(milliseconds: 200), + switchInCurve: Curves.easeInOut, + switchOutCurve: Curves.easeInOut, + child: child, + ); } } diff --git a/boring_to_beautiful/step_07/lib/src/shared/views/sidebar.dart b/boring_to_beautiful/step_07/lib/src/shared/views/sidebar.dart index 78c19b4d22..8815223b22 100644 --- a/boring_to_beautiful/step_07/lib/src/shared/views/sidebar.dart +++ b/boring_to_beautiful/step_07/lib/src/shared/views/sidebar.dart @@ -26,10 +26,7 @@ class SideBar extends StatelessWidget { title: const Text('Home'), onTap: () => GoRouter.of(context).go('/'), ), - const ListTile( - leading: Icon(Icons.search), - title: Text('Search'), - ), + const ListTile(leading: Icon(Icons.search), title: Text('Search')), ListTile( leading: const Icon(Icons.person), title: const Text('Artists'), @@ -64,10 +61,7 @@ class PlaylistNav extends StatelessWidget { children: [ Padding( padding: const EdgeInsets.only(left: 16, top: 16), - child: Text( - 'Playlists', - style: context.titleMedium, - ), + child: Text('Playlists', style: context.titleMedium), ), Expanded( child: ListView( @@ -114,10 +108,9 @@ class _PlaylistNavItemState extends State<_PlaylistNavItem> { @override void initState() { super.initState(); - _focusNode = FocusNode(debugLabel: widget.title) - ..addListener(() { - setState(() => _isSelected = _focusNode.hasPrimaryFocus); - }); + _focusNode = FocusNode(debugLabel: widget.title)..addListener(() { + setState(() => _isSelected = _focusNode.hasPrimaryFocus); + }); } @override diff --git a/boring_to_beautiful/step_07/pubspec.yaml b/boring_to_beautiful/step_07/pubspec.yaml index 0bc88d24c3..ad540a91c3 100644 --- a/boring_to_beautiful/step_07/pubspec.yaml +++ b/boring_to_beautiful/step_07/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: "none" version: 1.0.0 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 dependencies: flutter: diff --git a/brick_breaker/codelab_rebuild.yaml b/brick_breaker/codelab_rebuild.yaml index ebe8bf548d..6915c69e65 100644 --- a/brick_breaker/codelab_rebuild.yaml +++ b/brick_breaker/codelab_rebuild.yaml @@ -22,7 +22,7 @@ steps: version: 0.1.0 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 dependencies: flame: ^1.18.0 diff --git a/brick_breaker/step_03/pubspec.yaml b/brick_breaker/step_03/pubspec.yaml index ce0c17eaf5..5887daad08 100644 --- a/brick_breaker/step_03/pubspec.yaml +++ b/brick_breaker/step_03/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: 'none' version: 0.1.0 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 dependencies: flame: ^1.18.0 diff --git a/brick_breaker/step_04/lib/src/brick_breaker.dart b/brick_breaker/step_04/lib/src/brick_breaker.dart index 0bf8c9a69c..7cba5da5f9 100644 --- a/brick_breaker/step_04/lib/src/brick_breaker.dart +++ b/brick_breaker/step_04/lib/src/brick_breaker.dart @@ -12,12 +12,12 @@ import 'config.dart'; class BrickBreaker extends FlameGame { BrickBreaker() - : super( - camera: CameraComponent.withFixedResolution( - width: gameWidth, - height: gameHeight, - ), - ); + : super( + camera: CameraComponent.withFixedResolution( + width: gameWidth, + height: gameHeight, + ), + ); double get width => size.x; double get height => size.y; diff --git a/brick_breaker/step_04/lib/src/components/play_area.dart b/brick_breaker/step_04/lib/src/components/play_area.dart index 588f734bb9..100886fb63 100644 --- a/brick_breaker/step_04/lib/src/components/play_area.dart +++ b/brick_breaker/step_04/lib/src/components/play_area.dart @@ -10,10 +10,7 @@ import 'package:flutter/material.dart'; import '../brick_breaker.dart'; class PlayArea extends RectangleComponent with HasGameReference { - PlayArea() - : super( - paint: Paint()..color = const Color(0xfff2e8cf), - ); + PlayArea() : super(paint: Paint()..color = const Color(0xfff2e8cf)); @override FutureOr onLoad() async { diff --git a/brick_breaker/step_04/pubspec.yaml b/brick_breaker/step_04/pubspec.yaml index ce0c17eaf5..5887daad08 100644 --- a/brick_breaker/step_04/pubspec.yaml +++ b/brick_breaker/step_04/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: 'none' version: 0.1.0 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 dependencies: flame: ^1.18.0 diff --git a/brick_breaker/step_05/lib/src/brick_breaker.dart b/brick_breaker/step_05/lib/src/brick_breaker.dart index 088af89366..262aeb8d00 100644 --- a/brick_breaker/step_05/lib/src/brick_breaker.dart +++ b/brick_breaker/step_05/lib/src/brick_breaker.dart @@ -13,12 +13,12 @@ import 'config.dart'; class BrickBreaker extends FlameGame { BrickBreaker() - : super( - camera: CameraComponent.withFixedResolution( - width: gameWidth, - height: gameHeight, - ), - ); + : super( + camera: CameraComponent.withFixedResolution( + width: gameWidth, + height: gameHeight, + ), + ); final rand = math.Random(); double get width => size.x; @@ -32,12 +32,18 @@ class BrickBreaker extends FlameGame { world.add(PlayArea()); - world.add(Ball( + world.add( + Ball( radius: ballRadius, position: size / 2, - velocity: Vector2((rand.nextDouble() - 0.5) * width, height * 0.2) - .normalized() - ..scale(height / 4))); + velocity: + Vector2( + (rand.nextDouble() - 0.5) * width, + height * 0.2, + ).normalized() + ..scale(height / 4), + ), + ); debugMode = true; } diff --git a/brick_breaker/step_05/lib/src/components/ball.dart b/brick_breaker/step_05/lib/src/components/ball.dart index e226d9482d..16048749d9 100644 --- a/brick_breaker/step_05/lib/src/components/ball.dart +++ b/brick_breaker/step_05/lib/src/components/ball.dart @@ -11,11 +11,13 @@ class Ball extends CircleComponent { required super.position, required double radius, }) : super( - radius: radius, - anchor: Anchor.center, - paint: Paint() - ..color = const Color(0xff1e6091) - ..style = PaintingStyle.fill); + radius: radius, + anchor: Anchor.center, + paint: + Paint() + ..color = const Color(0xff1e6091) + ..style = PaintingStyle.fill, + ); final Vector2 velocity; diff --git a/brick_breaker/step_05/lib/src/components/play_area.dart b/brick_breaker/step_05/lib/src/components/play_area.dart index 588f734bb9..100886fb63 100644 --- a/brick_breaker/step_05/lib/src/components/play_area.dart +++ b/brick_breaker/step_05/lib/src/components/play_area.dart @@ -10,10 +10,7 @@ import 'package:flutter/material.dart'; import '../brick_breaker.dart'; class PlayArea extends RectangleComponent with HasGameReference { - PlayArea() - : super( - paint: Paint()..color = const Color(0xfff2e8cf), - ); + PlayArea() : super(paint: Paint()..color = const Color(0xfff2e8cf)); @override FutureOr onLoad() async { diff --git a/brick_breaker/step_05/pubspec.yaml b/brick_breaker/step_05/pubspec.yaml index ce0c17eaf5..5887daad08 100644 --- a/brick_breaker/step_05/pubspec.yaml +++ b/brick_breaker/step_05/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: 'none' version: 0.1.0 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 dependencies: flame: ^1.18.0 diff --git a/brick_breaker/step_06/lib/src/brick_breaker.dart b/brick_breaker/step_06/lib/src/brick_breaker.dart index 0f3ceea39d..a2284c17a0 100644 --- a/brick_breaker/step_06/lib/src/brick_breaker.dart +++ b/brick_breaker/step_06/lib/src/brick_breaker.dart @@ -13,12 +13,12 @@ import 'config.dart'; class BrickBreaker extends FlameGame with HasCollisionDetection { BrickBreaker() - : super( - camera: CameraComponent.withFixedResolution( - width: gameWidth, - height: gameHeight, - ), - ); + : super( + camera: CameraComponent.withFixedResolution( + width: gameWidth, + height: gameHeight, + ), + ); final rand = math.Random(); double get width => size.x; @@ -32,12 +32,18 @@ class BrickBreaker extends FlameGame with HasCollisionDetection { world.add(PlayArea()); - world.add(Ball( + world.add( + Ball( radius: ballRadius, position: size / 2, - velocity: Vector2((rand.nextDouble() - 0.5) * width, height * 0.2) - .normalized() - ..scale(height / 4))); + velocity: + Vector2( + (rand.nextDouble() - 0.5) * width, + height * 0.2, + ).normalized() + ..scale(height / 4), + ), + ); debugMode = true; } diff --git a/brick_breaker/step_06/lib/src/components/ball.dart b/brick_breaker/step_06/lib/src/components/ball.dart index 95176a17be..22b4350eb4 100644 --- a/brick_breaker/step_06/lib/src/components/ball.dart +++ b/brick_breaker/step_06/lib/src/components/ball.dart @@ -16,12 +16,14 @@ class Ball extends CircleComponent required super.position, required double radius, }) : super( - radius: radius, - anchor: Anchor.center, - paint: Paint() - ..color = const Color(0xff1e6091) - ..style = PaintingStyle.fill, - children: [CircleHitbox()]); + radius: radius, + anchor: Anchor.center, + paint: + Paint() + ..color = const Color(0xff1e6091) + ..style = PaintingStyle.fill, + children: [CircleHitbox()], + ); final Vector2 velocity; @@ -33,7 +35,9 @@ class Ball extends CircleComponent @override void onCollisionStart( - Set intersectionPoints, PositionComponent other) { + Set intersectionPoints, + PositionComponent other, + ) { super.onCollisionStart(intersectionPoints, other); if (other is PlayArea) { if (intersectionPoints.first.y <= 0) { diff --git a/brick_breaker/step_06/lib/src/components/play_area.dart b/brick_breaker/step_06/lib/src/components/play_area.dart index 4ed959326a..0bb34f59be 100644 --- a/brick_breaker/step_06/lib/src/components/play_area.dart +++ b/brick_breaker/step_06/lib/src/components/play_area.dart @@ -12,10 +12,10 @@ import '../brick_breaker.dart'; class PlayArea extends RectangleComponent with HasGameReference { PlayArea() - : super( - paint: Paint()..color = const Color(0xfff2e8cf), - children: [RectangleHitbox()], - ); + : super( + paint: Paint()..color = const Color(0xfff2e8cf), + children: [RectangleHitbox()], + ); @override FutureOr onLoad() async { diff --git a/brick_breaker/step_06/pubspec.yaml b/brick_breaker/step_06/pubspec.yaml index ce0c17eaf5..5887daad08 100644 --- a/brick_breaker/step_06/pubspec.yaml +++ b/brick_breaker/step_06/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: 'none' version: 0.1.0 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 dependencies: flame: ^1.18.0 diff --git a/brick_breaker/step_07/lib/src/brick_breaker.dart b/brick_breaker/step_07/lib/src/brick_breaker.dart index f1fed8adf4..d5de2e292f 100644 --- a/brick_breaker/step_07/lib/src/brick_breaker.dart +++ b/brick_breaker/step_07/lib/src/brick_breaker.dart @@ -17,12 +17,12 @@ import 'config.dart'; class BrickBreaker extends FlameGame with HasCollisionDetection, KeyboardEvents { BrickBreaker() - : super( - camera: CameraComponent.withFixedResolution( - width: gameWidth, - height: gameHeight, - ), - ); + : super( + camera: CameraComponent.withFixedResolution( + width: gameWidth, + height: gameHeight, + ), + ); final rand = math.Random(); double get width => size.x; @@ -36,24 +36,35 @@ class BrickBreaker extends FlameGame world.add(PlayArea()); - world.add(Ball( + world.add( + Ball( radius: ballRadius, position: size / 2, - velocity: Vector2((rand.nextDouble() - 0.5) * width, height * 0.2) - .normalized() - ..scale(height / 4))); + velocity: + Vector2( + (rand.nextDouble() - 0.5) * width, + height * 0.2, + ).normalized() + ..scale(height / 4), + ), + ); - world.add(Bat( + world.add( + Bat( size: Vector2(batWidth, batHeight), cornerRadius: const Radius.circular(ballRadius / 2), - position: Vector2(width / 2, height * 0.95))); + position: Vector2(width / 2, height * 0.95), + ), + ); debugMode = true; } @override KeyEventResult onKeyEvent( - KeyEvent event, Set keysPressed) { + KeyEvent event, + Set keysPressed, + ) { super.onKeyEvent(event, keysPressed); switch (event.logicalKey) { case LogicalKeyboardKey.arrowLeft: diff --git a/brick_breaker/step_07/lib/src/components/ball.dart b/brick_breaker/step_07/lib/src/components/ball.dart index 000be1abe8..3947ceb14c 100644 --- a/brick_breaker/step_07/lib/src/components/ball.dart +++ b/brick_breaker/step_07/lib/src/components/ball.dart @@ -18,12 +18,14 @@ class Ball extends CircleComponent required super.position, required double radius, }) : super( - radius: radius, - anchor: Anchor.center, - paint: Paint() - ..color = const Color(0xff1e6091) - ..style = PaintingStyle.fill, - children: [CircleHitbox()]); + radius: radius, + anchor: Anchor.center, + paint: + Paint() + ..color = const Color(0xff1e6091) + ..style = PaintingStyle.fill, + children: [CircleHitbox()], + ); final Vector2 velocity; @@ -35,7 +37,9 @@ class Ball extends CircleComponent @override void onCollisionStart( - Set intersectionPoints, PositionComponent other) { + Set intersectionPoints, + PositionComponent other, + ) { super.onCollisionStart(intersectionPoints, other); if (other is PlayArea) { if (intersectionPoints.first.y <= 0) { @@ -45,13 +49,12 @@ class Ball extends CircleComponent } else if (intersectionPoints.first.x >= game.width) { velocity.x = -velocity.x; } else if (intersectionPoints.first.y >= game.height) { - add(RemoveEffect( - delay: 0.35, - )); + add(RemoveEffect(delay: 0.35)); } } else if (other is Bat) { velocity.y = -velocity.y; - velocity.x = velocity.x + + velocity.x = + velocity.x + (position.x - other.position.x) / other.size.x * game.width * 0.3; } else { debugPrint('collision with $other'); diff --git a/brick_breaker/step_07/lib/src/components/bat.dart b/brick_breaker/step_07/lib/src/components/bat.dart index e6ea8aeec8..cee72c6480 100644 --- a/brick_breaker/step_07/lib/src/components/bat.dart +++ b/brick_breaker/step_07/lib/src/components/bat.dart @@ -16,26 +16,22 @@ class Bat extends PositionComponent required this.cornerRadius, required super.position, required super.size, - }) : super( - anchor: Anchor.center, - children: [RectangleHitbox()], - ); + }) : super(anchor: Anchor.center, children: [RectangleHitbox()]); final Radius cornerRadius; - final _paint = Paint() - ..color = const Color(0xff1e6091) - ..style = PaintingStyle.fill; + final _paint = + Paint() + ..color = const Color(0xff1e6091) + ..style = PaintingStyle.fill; @override void render(Canvas canvas) { super.render(canvas); canvas.drawRRect( - RRect.fromRectAndRadius( - Offset.zero & size.toSize(), - cornerRadius, - ), - _paint); + RRect.fromRectAndRadius(Offset.zero & size.toSize(), cornerRadius), + _paint, + ); } @override @@ -45,9 +41,11 @@ class Bat extends PositionComponent } void moveBy(double dx) { - add(MoveToEffect( - Vector2((position.x + dx).clamp(0, game.width), position.y), - EffectController(duration: 0.1), - )); + add( + MoveToEffect( + Vector2((position.x + dx).clamp(0, game.width), position.y), + EffectController(duration: 0.1), + ), + ); } } diff --git a/brick_breaker/step_07/lib/src/components/play_area.dart b/brick_breaker/step_07/lib/src/components/play_area.dart index 4ed959326a..0bb34f59be 100644 --- a/brick_breaker/step_07/lib/src/components/play_area.dart +++ b/brick_breaker/step_07/lib/src/components/play_area.dart @@ -12,10 +12,10 @@ import '../brick_breaker.dart'; class PlayArea extends RectangleComponent with HasGameReference { PlayArea() - : super( - paint: Paint()..color = const Color(0xfff2e8cf), - children: [RectangleHitbox()], - ); + : super( + paint: Paint()..color = const Color(0xfff2e8cf), + children: [RectangleHitbox()], + ); @override FutureOr onLoad() async { diff --git a/brick_breaker/step_07/pubspec.yaml b/brick_breaker/step_07/pubspec.yaml index ce0c17eaf5..5887daad08 100644 --- a/brick_breaker/step_07/pubspec.yaml +++ b/brick_breaker/step_07/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: 'none' version: 0.1.0 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 dependencies: flame: ^1.18.0 diff --git a/brick_breaker/step_08/lib/src/brick_breaker.dart b/brick_breaker/step_08/lib/src/brick_breaker.dart index 014f3c83cb..9cf5beeb71 100644 --- a/brick_breaker/step_08/lib/src/brick_breaker.dart +++ b/brick_breaker/step_08/lib/src/brick_breaker.dart @@ -17,12 +17,12 @@ import 'config.dart'; class BrickBreaker extends FlameGame with HasCollisionDetection, KeyboardEvents { BrickBreaker() - : super( - camera: CameraComponent.withFixedResolution( - width: gameWidth, - height: gameHeight, - ), - ); + : super( + camera: CameraComponent.withFixedResolution( + width: gameWidth, + height: gameHeight, + ), + ); final rand = math.Random(); double get width => size.x; @@ -36,18 +36,27 @@ class BrickBreaker extends FlameGame world.add(PlayArea()); - world.add(Ball( + world.add( + Ball( difficultyModifier: difficultyModifier, radius: ballRadius, position: size / 2, - velocity: Vector2((rand.nextDouble() - 0.5) * width, height * 0.2) - .normalized() - ..scale(height / 4))); + velocity: + Vector2( + (rand.nextDouble() - 0.5) * width, + height * 0.2, + ).normalized() + ..scale(height / 4), + ), + ); - world.add(Bat( + world.add( + Bat( size: Vector2(batWidth, batHeight), cornerRadius: const Radius.circular(ballRadius / 2), - position: Vector2(width / 2, height * 0.95))); + position: Vector2(width / 2, height * 0.95), + ), + ); await world.addAll([ for (var i = 0; i < brickColors.length; i++) @@ -66,7 +75,9 @@ class BrickBreaker extends FlameGame @override KeyEventResult onKeyEvent( - KeyEvent event, Set keysPressed) { + KeyEvent event, + Set keysPressed, + ) { super.onKeyEvent(event, keysPressed); switch (event.logicalKey) { case LogicalKeyboardKey.arrowLeft: diff --git a/brick_breaker/step_08/lib/src/components/ball.dart b/brick_breaker/step_08/lib/src/components/ball.dart index 49b36b2d1d..e70d465839 100644 --- a/brick_breaker/step_08/lib/src/components/ball.dart +++ b/brick_breaker/step_08/lib/src/components/ball.dart @@ -20,12 +20,14 @@ class Ball extends CircleComponent required double radius, required this.difficultyModifier, }) : super( - radius: radius, - anchor: Anchor.center, - paint: Paint() - ..color = const Color(0xff1e6091) - ..style = PaintingStyle.fill, - children: [CircleHitbox()]); + radius: radius, + anchor: Anchor.center, + paint: + Paint() + ..color = const Color(0xff1e6091) + ..style = PaintingStyle.fill, + children: [CircleHitbox()], + ); final Vector2 velocity; final double difficultyModifier; @@ -38,7 +40,9 @@ class Ball extends CircleComponent @override void onCollisionStart( - Set intersectionPoints, PositionComponent other) { + Set intersectionPoints, + PositionComponent other, + ) { super.onCollisionStart(intersectionPoints, other); if (other is PlayArea) { if (intersectionPoints.first.y <= 0) { @@ -48,13 +52,12 @@ class Ball extends CircleComponent } else if (intersectionPoints.first.x >= game.width) { velocity.x = -velocity.x; } else if (intersectionPoints.first.y >= game.height) { - add(RemoveEffect( - delay: 0.35, - )); + add(RemoveEffect(delay: 0.35)); } } else if (other is Bat) { velocity.y = -velocity.y; - velocity.x = velocity.x + + velocity.x = + velocity.x + (position.x - other.position.x) / other.size.x * game.width * 0.3; } else if (other is Brick) { if (position.y < other.position.y - other.size.y / 2) { diff --git a/brick_breaker/step_08/lib/src/components/bat.dart b/brick_breaker/step_08/lib/src/components/bat.dart index e6ea8aeec8..cee72c6480 100644 --- a/brick_breaker/step_08/lib/src/components/bat.dart +++ b/brick_breaker/step_08/lib/src/components/bat.dart @@ -16,26 +16,22 @@ class Bat extends PositionComponent required this.cornerRadius, required super.position, required super.size, - }) : super( - anchor: Anchor.center, - children: [RectangleHitbox()], - ); + }) : super(anchor: Anchor.center, children: [RectangleHitbox()]); final Radius cornerRadius; - final _paint = Paint() - ..color = const Color(0xff1e6091) - ..style = PaintingStyle.fill; + final _paint = + Paint() + ..color = const Color(0xff1e6091) + ..style = PaintingStyle.fill; @override void render(Canvas canvas) { super.render(canvas); canvas.drawRRect( - RRect.fromRectAndRadius( - Offset.zero & size.toSize(), - cornerRadius, - ), - _paint); + RRect.fromRectAndRadius(Offset.zero & size.toSize(), cornerRadius), + _paint, + ); } @override @@ -45,9 +41,11 @@ class Bat extends PositionComponent } void moveBy(double dx) { - add(MoveToEffect( - Vector2((position.x + dx).clamp(0, game.width), position.y), - EffectController(duration: 0.1), - )); + add( + MoveToEffect( + Vector2((position.x + dx).clamp(0, game.width), position.y), + EffectController(duration: 0.1), + ), + ); } } diff --git a/brick_breaker/step_08/lib/src/components/brick.dart b/brick_breaker/step_08/lib/src/components/brick.dart index 6284c7d330..b624f23b37 100644 --- a/brick_breaker/step_08/lib/src/components/brick.dart +++ b/brick_breaker/step_08/lib/src/components/brick.dart @@ -14,18 +14,21 @@ import 'bat.dart'; class Brick extends RectangleComponent with CollisionCallbacks, HasGameReference { Brick({required super.position, required Color color}) - : super( - size: Vector2(brickWidth, brickHeight), - anchor: Anchor.center, - paint: Paint() - ..color = color - ..style = PaintingStyle.fill, - children: [RectangleHitbox()], - ); + : super( + size: Vector2(brickWidth, brickHeight), + anchor: Anchor.center, + paint: + Paint() + ..color = color + ..style = PaintingStyle.fill, + children: [RectangleHitbox()], + ); @override void onCollisionStart( - Set intersectionPoints, PositionComponent other) { + Set intersectionPoints, + PositionComponent other, + ) { super.onCollisionStart(intersectionPoints, other); removeFromParent(); diff --git a/brick_breaker/step_08/lib/src/components/play_area.dart b/brick_breaker/step_08/lib/src/components/play_area.dart index 4ed959326a..0bb34f59be 100644 --- a/brick_breaker/step_08/lib/src/components/play_area.dart +++ b/brick_breaker/step_08/lib/src/components/play_area.dart @@ -12,10 +12,10 @@ import '../brick_breaker.dart'; class PlayArea extends RectangleComponent with HasGameReference { PlayArea() - : super( - paint: Paint()..color = const Color(0xfff2e8cf), - children: [RectangleHitbox()], - ); + : super( + paint: Paint()..color = const Color(0xfff2e8cf), + children: [RectangleHitbox()], + ); @override FutureOr onLoad() async { diff --git a/brick_breaker/step_08/pubspec.yaml b/brick_breaker/step_08/pubspec.yaml index ce0c17eaf5..5887daad08 100644 --- a/brick_breaker/step_08/pubspec.yaml +++ b/brick_breaker/step_08/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: 'none' version: 0.1.0 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 dependencies: flame: ^1.18.0 diff --git a/brick_breaker/step_09/lib/src/brick_breaker.dart b/brick_breaker/step_09/lib/src/brick_breaker.dart index 6306538923..e7d1bbe67c 100644 --- a/brick_breaker/step_09/lib/src/brick_breaker.dart +++ b/brick_breaker/step_09/lib/src/brick_breaker.dart @@ -19,12 +19,12 @@ enum PlayState { welcome, playing, gameOver, won } class BrickBreaker extends FlameGame with HasCollisionDetection, KeyboardEvents, TapDetector { BrickBreaker() - : super( - camera: CameraComponent.withFixedResolution( - width: gameWidth, - height: gameHeight, - ), - ); + : super( + camera: CameraComponent.withFixedResolution( + width: gameWidth, + height: gameHeight, + ), + ); final rand = math.Random(); double get width => size.x; @@ -66,18 +66,27 @@ class BrickBreaker extends FlameGame playState = PlayState.playing; - world.add(Ball( + world.add( + Ball( difficultyModifier: difficultyModifier, radius: ballRadius, position: size / 2, - velocity: Vector2((rand.nextDouble() - 0.5) * width, height * 0.2) - .normalized() - ..scale(height / 4))); - - world.add(Bat( + velocity: + Vector2( + (rand.nextDouble() - 0.5) * width, + height * 0.2, + ).normalized() + ..scale(height / 4), + ), + ); + + world.add( + Bat( size: Vector2(batWidth, batHeight), cornerRadius: const Radius.circular(ballRadius / 2), - position: Vector2(width / 2, height * 0.95))); + position: Vector2(width / 2, height * 0.95), + ), + ); world.addAll([ for (var i = 0; i < brickColors.length; i++) @@ -100,7 +109,9 @@ class BrickBreaker extends FlameGame @override KeyEventResult onKeyEvent( - KeyEvent event, Set keysPressed) { + KeyEvent event, + Set keysPressed, + ) { super.onKeyEvent(event, keysPressed); switch (event.logicalKey) { case LogicalKeyboardKey.arrowLeft: diff --git a/brick_breaker/step_09/lib/src/components/ball.dart b/brick_breaker/step_09/lib/src/components/ball.dart index 8000ab0d88..b49fca22cd 100644 --- a/brick_breaker/step_09/lib/src/components/ball.dart +++ b/brick_breaker/step_09/lib/src/components/ball.dart @@ -20,12 +20,14 @@ class Ball extends CircleComponent required double radius, required this.difficultyModifier, }) : super( - radius: radius, - anchor: Anchor.center, - paint: Paint() - ..color = const Color(0xff1e6091) - ..style = PaintingStyle.fill, - children: [CircleHitbox()]); + radius: radius, + anchor: Anchor.center, + paint: + Paint() + ..color = const Color(0xff1e6091) + ..style = PaintingStyle.fill, + children: [CircleHitbox()], + ); final Vector2 velocity; final double difficultyModifier; @@ -38,7 +40,9 @@ class Ball extends CircleComponent @override void onCollisionStart( - Set intersectionPoints, PositionComponent other) { + Set intersectionPoints, + PositionComponent other, + ) { super.onCollisionStart(intersectionPoints, other); if (other is PlayArea) { if (intersectionPoints.first.y <= 0) { @@ -48,15 +52,19 @@ class Ball extends CircleComponent } else if (intersectionPoints.first.x >= game.width) { velocity.x = -velocity.x; } else if (intersectionPoints.first.y >= game.height) { - add(RemoveEffect( + add( + RemoveEffect( delay: 0.35, onComplete: () { game.playState = PlayState.gameOver; - })); + }, + ), + ); } } else if (other is Bat) { velocity.y = -velocity.y; - velocity.x = velocity.x + + velocity.x = + velocity.x + (position.x - other.position.x) / other.size.x * game.width * 0.3; } else if (other is Brick) { if (position.y < other.position.y - other.size.y / 2) { diff --git a/brick_breaker/step_09/lib/src/components/bat.dart b/brick_breaker/step_09/lib/src/components/bat.dart index e6ea8aeec8..cee72c6480 100644 --- a/brick_breaker/step_09/lib/src/components/bat.dart +++ b/brick_breaker/step_09/lib/src/components/bat.dart @@ -16,26 +16,22 @@ class Bat extends PositionComponent required this.cornerRadius, required super.position, required super.size, - }) : super( - anchor: Anchor.center, - children: [RectangleHitbox()], - ); + }) : super(anchor: Anchor.center, children: [RectangleHitbox()]); final Radius cornerRadius; - final _paint = Paint() - ..color = const Color(0xff1e6091) - ..style = PaintingStyle.fill; + final _paint = + Paint() + ..color = const Color(0xff1e6091) + ..style = PaintingStyle.fill; @override void render(Canvas canvas) { super.render(canvas); canvas.drawRRect( - RRect.fromRectAndRadius( - Offset.zero & size.toSize(), - cornerRadius, - ), - _paint); + RRect.fromRectAndRadius(Offset.zero & size.toSize(), cornerRadius), + _paint, + ); } @override @@ -45,9 +41,11 @@ class Bat extends PositionComponent } void moveBy(double dx) { - add(MoveToEffect( - Vector2((position.x + dx).clamp(0, game.width), position.y), - EffectController(duration: 0.1), - )); + add( + MoveToEffect( + Vector2((position.x + dx).clamp(0, game.width), position.y), + EffectController(duration: 0.1), + ), + ); } } diff --git a/brick_breaker/step_09/lib/src/components/brick.dart b/brick_breaker/step_09/lib/src/components/brick.dart index a7ed7dd12b..d98a17fff8 100644 --- a/brick_breaker/step_09/lib/src/components/brick.dart +++ b/brick_breaker/step_09/lib/src/components/brick.dart @@ -14,18 +14,21 @@ import 'bat.dart'; class Brick extends RectangleComponent with CollisionCallbacks, HasGameReference { Brick({required super.position, required Color color}) - : super( - size: Vector2(brickWidth, brickHeight), - anchor: Anchor.center, - paint: Paint() - ..color = color - ..style = PaintingStyle.fill, - children: [RectangleHitbox()], - ); + : super( + size: Vector2(brickWidth, brickHeight), + anchor: Anchor.center, + paint: + Paint() + ..color = color + ..style = PaintingStyle.fill, + children: [RectangleHitbox()], + ); @override void onCollisionStart( - Set intersectionPoints, PositionComponent other) { + Set intersectionPoints, + PositionComponent other, + ) { super.onCollisionStart(intersectionPoints, other); removeFromParent(); diff --git a/brick_breaker/step_09/lib/src/components/play_area.dart b/brick_breaker/step_09/lib/src/components/play_area.dart index 4ed959326a..0bb34f59be 100644 --- a/brick_breaker/step_09/lib/src/components/play_area.dart +++ b/brick_breaker/step_09/lib/src/components/play_area.dart @@ -12,10 +12,10 @@ import '../brick_breaker.dart'; class PlayArea extends RectangleComponent with HasGameReference { PlayArea() - : super( - paint: Paint()..color = const Color(0xfff2e8cf), - children: [RectangleHitbox()], - ); + : super( + paint: Paint()..color = const Color(0xfff2e8cf), + children: [RectangleHitbox()], + ); @override FutureOr onLoad() async { diff --git a/brick_breaker/step_09/lib/src/widgets/game_app.dart b/brick_breaker/step_09/lib/src/widgets/game_app.dart index 7703bff766..cf06900d7c 100644 --- a/brick_breaker/step_09/lib/src/widgets/game_app.dart +++ b/brick_breaker/step_09/lib/src/widgets/game_app.dart @@ -29,10 +29,7 @@ class GameApp extends StatelessWidget { gradient: LinearGradient( begin: Alignment.topCenter, end: Alignment.bottomCenter, - colors: [ - Color(0xffa9d6e5), - Color(0xfff2e8cf), - ], + colors: [Color(0xffa9d6e5), Color(0xfff2e8cf)], ), ), child: SafeArea( @@ -46,21 +43,24 @@ class GameApp extends StatelessWidget { child: GameWidget.controlled( gameFactory: BrickBreaker.new, overlayBuilderMap: { - PlayState.welcome.name: (context, game) => Center( + PlayState.welcome.name: + (context, game) => Center( child: Text( 'TAP TO PLAY', style: Theme.of(context).textTheme.headlineLarge, ), ), - PlayState.gameOver.name: (context, game) => Center( + PlayState.gameOver.name: + (context, game) => Center( child: Text( 'G A M E O V E R', style: Theme.of(context).textTheme.headlineLarge, ), ), - PlayState.won.name: (context, game) => Center( + PlayState.won.name: + (context, game) => Center( child: Text( 'Y O U W O N ! ! !', style: diff --git a/brick_breaker/step_09/pubspec.yaml b/brick_breaker/step_09/pubspec.yaml index ce0c17eaf5..5887daad08 100644 --- a/brick_breaker/step_09/pubspec.yaml +++ b/brick_breaker/step_09/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: 'none' version: 0.1.0 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 dependencies: flame: ^1.18.0 diff --git a/brick_breaker/step_10/lib/src/brick_breaker.dart b/brick_breaker/step_10/lib/src/brick_breaker.dart index d3a87ffe54..e551cd0467 100644 --- a/brick_breaker/step_10/lib/src/brick_breaker.dart +++ b/brick_breaker/step_10/lib/src/brick_breaker.dart @@ -19,12 +19,12 @@ enum PlayState { welcome, playing, gameOver, won } class BrickBreaker extends FlameGame with HasCollisionDetection, KeyboardEvents, TapDetector { BrickBreaker() - : super( - camera: CameraComponent.withFixedResolution( - width: gameWidth, - height: gameHeight, - ), - ); + : super( + camera: CameraComponent.withFixedResolution( + width: gameWidth, + height: gameHeight, + ), + ); final ValueNotifier score = ValueNotifier(0); final rand = math.Random(); @@ -68,18 +68,27 @@ class BrickBreaker extends FlameGame playState = PlayState.playing; score.value = 0; - world.add(Ball( + world.add( + Ball( difficultyModifier: difficultyModifier, radius: ballRadius, position: size / 2, - velocity: Vector2((rand.nextDouble() - 0.5) * width, height * 0.2) - .normalized() - ..scale(height / 4))); - - world.add(Bat( + velocity: + Vector2( + (rand.nextDouble() - 0.5) * width, + height * 0.2, + ).normalized() + ..scale(height / 4), + ), + ); + + world.add( + Bat( size: Vector2(batWidth, batHeight), cornerRadius: const Radius.circular(ballRadius / 2), - position: Vector2(width / 2, height * 0.95))); + position: Vector2(width / 2, height * 0.95), + ), + ); world.addAll([ for (var i = 0; i < brickColors.length; i++) @@ -102,7 +111,9 @@ class BrickBreaker extends FlameGame @override KeyEventResult onKeyEvent( - KeyEvent event, Set keysPressed) { + KeyEvent event, + Set keysPressed, + ) { super.onKeyEvent(event, keysPressed); switch (event.logicalKey) { case LogicalKeyboardKey.arrowLeft: diff --git a/brick_breaker/step_10/lib/src/components/ball.dart b/brick_breaker/step_10/lib/src/components/ball.dart index 8000ab0d88..b49fca22cd 100644 --- a/brick_breaker/step_10/lib/src/components/ball.dart +++ b/brick_breaker/step_10/lib/src/components/ball.dart @@ -20,12 +20,14 @@ class Ball extends CircleComponent required double radius, required this.difficultyModifier, }) : super( - radius: radius, - anchor: Anchor.center, - paint: Paint() - ..color = const Color(0xff1e6091) - ..style = PaintingStyle.fill, - children: [CircleHitbox()]); + radius: radius, + anchor: Anchor.center, + paint: + Paint() + ..color = const Color(0xff1e6091) + ..style = PaintingStyle.fill, + children: [CircleHitbox()], + ); final Vector2 velocity; final double difficultyModifier; @@ -38,7 +40,9 @@ class Ball extends CircleComponent @override void onCollisionStart( - Set intersectionPoints, PositionComponent other) { + Set intersectionPoints, + PositionComponent other, + ) { super.onCollisionStart(intersectionPoints, other); if (other is PlayArea) { if (intersectionPoints.first.y <= 0) { @@ -48,15 +52,19 @@ class Ball extends CircleComponent } else if (intersectionPoints.first.x >= game.width) { velocity.x = -velocity.x; } else if (intersectionPoints.first.y >= game.height) { - add(RemoveEffect( + add( + RemoveEffect( delay: 0.35, onComplete: () { game.playState = PlayState.gameOver; - })); + }, + ), + ); } } else if (other is Bat) { velocity.y = -velocity.y; - velocity.x = velocity.x + + velocity.x = + velocity.x + (position.x - other.position.x) / other.size.x * game.width * 0.3; } else if (other is Brick) { if (position.y < other.position.y - other.size.y / 2) { diff --git a/brick_breaker/step_10/lib/src/components/bat.dart b/brick_breaker/step_10/lib/src/components/bat.dart index e6ea8aeec8..cee72c6480 100644 --- a/brick_breaker/step_10/lib/src/components/bat.dart +++ b/brick_breaker/step_10/lib/src/components/bat.dart @@ -16,26 +16,22 @@ class Bat extends PositionComponent required this.cornerRadius, required super.position, required super.size, - }) : super( - anchor: Anchor.center, - children: [RectangleHitbox()], - ); + }) : super(anchor: Anchor.center, children: [RectangleHitbox()]); final Radius cornerRadius; - final _paint = Paint() - ..color = const Color(0xff1e6091) - ..style = PaintingStyle.fill; + final _paint = + Paint() + ..color = const Color(0xff1e6091) + ..style = PaintingStyle.fill; @override void render(Canvas canvas) { super.render(canvas); canvas.drawRRect( - RRect.fromRectAndRadius( - Offset.zero & size.toSize(), - cornerRadius, - ), - _paint); + RRect.fromRectAndRadius(Offset.zero & size.toSize(), cornerRadius), + _paint, + ); } @override @@ -45,9 +41,11 @@ class Bat extends PositionComponent } void moveBy(double dx) { - add(MoveToEffect( - Vector2((position.x + dx).clamp(0, game.width), position.y), - EffectController(duration: 0.1), - )); + add( + MoveToEffect( + Vector2((position.x + dx).clamp(0, game.width), position.y), + EffectController(duration: 0.1), + ), + ); } } diff --git a/brick_breaker/step_10/lib/src/components/brick.dart b/brick_breaker/step_10/lib/src/components/brick.dart index 9efe2bd614..0833f2cbdb 100644 --- a/brick_breaker/step_10/lib/src/components/brick.dart +++ b/brick_breaker/step_10/lib/src/components/brick.dart @@ -14,18 +14,21 @@ import 'bat.dart'; class Brick extends RectangleComponent with CollisionCallbacks, HasGameReference { Brick({required super.position, required Color color}) - : super( - size: Vector2(brickWidth, brickHeight), - anchor: Anchor.center, - paint: Paint() - ..color = color - ..style = PaintingStyle.fill, - children: [RectangleHitbox()], - ); + : super( + size: Vector2(brickWidth, brickHeight), + anchor: Anchor.center, + paint: + Paint() + ..color = color + ..style = PaintingStyle.fill, + children: [RectangleHitbox()], + ); @override void onCollisionStart( - Set intersectionPoints, PositionComponent other) { + Set intersectionPoints, + PositionComponent other, + ) { super.onCollisionStart(intersectionPoints, other); removeFromParent(); game.score.value++; diff --git a/brick_breaker/step_10/lib/src/components/play_area.dart b/brick_breaker/step_10/lib/src/components/play_area.dart index 4ed959326a..0bb34f59be 100644 --- a/brick_breaker/step_10/lib/src/components/play_area.dart +++ b/brick_breaker/step_10/lib/src/components/play_area.dart @@ -12,10 +12,10 @@ import '../brick_breaker.dart'; class PlayArea extends RectangleComponent with HasGameReference { PlayArea() - : super( - paint: Paint()..color = const Color(0xfff2e8cf), - children: [RectangleHitbox()], - ); + : super( + paint: Paint()..color = const Color(0xfff2e8cf), + children: [RectangleHitbox()], + ); @override FutureOr onLoad() async { diff --git a/brick_breaker/step_10/lib/src/widgets/game_app.dart b/brick_breaker/step_10/lib/src/widgets/game_app.dart index 0ecfb5087c..c1f097d5f8 100644 --- a/brick_breaker/step_10/lib/src/widgets/game_app.dart +++ b/brick_breaker/step_10/lib/src/widgets/game_app.dart @@ -44,10 +44,7 @@ class _GameAppState extends State { gradient: LinearGradient( begin: Alignment.topCenter, end: Alignment.bottomCenter, - colors: [ - Color(0xffa9d6e5), - Color(0xfff2e8cf), - ], + colors: [Color(0xffa9d6e5), Color(0xfff2e8cf)], ), ), child: SafeArea( @@ -65,18 +62,18 @@ class _GameAppState extends State { child: GameWidget( game: game, overlayBuilderMap: { - PlayState.welcome.name: (context, game) => - const OverlayScreen( + PlayState.welcome.name: + (context, game) => const OverlayScreen( title: 'TAP TO PLAY', subtitle: 'Use arrow keys or swipe', ), - PlayState.gameOver.name: (context, game) => - const OverlayScreen( + PlayState.gameOver.name: + (context, game) => const OverlayScreen( title: 'G A M E O V E R', subtitle: 'Tap to Play Again', ), - PlayState.won.name: (context, game) => - const OverlayScreen( + PlayState.won.name: + (context, game) => const OverlayScreen( title: 'Y O U W O N ! ! !', subtitle: 'Tap to Play Again', ), diff --git a/brick_breaker/step_10/lib/src/widgets/overlay_screen.dart b/brick_breaker/step_10/lib/src/widgets/overlay_screen.dart index c01bd98707..0c3debc738 100644 --- a/brick_breaker/step_10/lib/src/widgets/overlay_screen.dart +++ b/brick_breaker/step_10/lib/src/widgets/overlay_screen.dart @@ -6,11 +6,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_animate/flutter_animate.dart'; class OverlayScreen extends StatelessWidget { - const OverlayScreen({ - super.key, - required this.title, - required this.subtitle, - }); + const OverlayScreen({super.key, required this.title, required this.subtitle}); final String title; final String subtitle; @@ -27,10 +23,7 @@ class OverlayScreen extends StatelessWidget { style: Theme.of(context).textTheme.headlineLarge, ).animate().slideY(duration: 750.ms, begin: -3, end: 0), const SizedBox(height: 16), - Text( - subtitle, - style: Theme.of(context).textTheme.headlineSmall, - ) + Text(subtitle, style: Theme.of(context).textTheme.headlineSmall) .animate(onPlay: (controller) => controller.repeat()) .fadeIn(duration: 1.seconds) .then() diff --git a/brick_breaker/step_10/lib/src/widgets/score_card.dart b/brick_breaker/step_10/lib/src/widgets/score_card.dart index 97183998b3..cd84853ea6 100644 --- a/brick_breaker/step_10/lib/src/widgets/score_card.dart +++ b/brick_breaker/step_10/lib/src/widgets/score_card.dart @@ -5,10 +5,7 @@ import 'package:flutter/material.dart'; class ScoreCard extends StatelessWidget { - const ScoreCard({ - super.key, - required this.score, - }); + const ScoreCard({super.key, required this.score}); final ValueNotifier score; diff --git a/brick_breaker/step_10/pubspec.yaml b/brick_breaker/step_10/pubspec.yaml index ce0c17eaf5..5887daad08 100644 --- a/brick_breaker/step_10/pubspec.yaml +++ b/brick_breaker/step_10/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: 'none' version: 0.1.0 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 dependencies: flame: ^1.18.0 diff --git a/dart-patterns-and-records/codelab_rebuild.yaml b/dart-patterns-and-records/codelab_rebuild.yaml index 62dbfb45e9..c3cc497461 100644 --- a/dart-patterns-and-records/codelab_rebuild.yaml +++ b/dart-patterns-and-records/codelab_rebuild.yaml @@ -66,7 +66,7 @@ steps: version: 0.1.0 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 dependencies: flutter: diff --git a/dart-patterns-and-records/step_03/lib/main.dart b/dart-patterns-and-records/step_03/lib/main.dart index 728fc8e605..ed6086b220 100644 --- a/dart-patterns-and-records/step_03/lib/main.dart +++ b/dart-patterns-and-records/step_03/lib/main.dart @@ -14,11 +14,7 @@ class MainApp extends StatelessWidget { @override Widget build(BuildContext context) { return const MaterialApp( - home: Scaffold( - body: Center( - child: Text('Hello World!'), - ), - ), + home: Scaffold(body: Center(child: Text('Hello World!'))), ); } } diff --git a/dart-patterns-and-records/step_03/pubspec.yaml b/dart-patterns-and-records/step_03/pubspec.yaml index 15be3ae8b1..bbd4f3a909 100644 --- a/dart-patterns-and-records/step_03/pubspec.yaml +++ b/dart-patterns-and-records/step_03/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: 'none' version: 0.1.0 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 dependencies: flutter: diff --git a/dart-patterns-and-records/step_04/lib/main.dart b/dart-patterns-and-records/step_04/lib/main.dart index a42643619e..f85be90ff4 100644 --- a/dart-patterns-and-records/step_04/lib/main.dart +++ b/dart-patterns-and-records/step_04/lib/main.dart @@ -17,9 +17,7 @@ class DocumentApp extends StatelessWidget { Widget build(BuildContext context) { return MaterialApp( theme: ThemeData(useMaterial3: true), - home: DocumentScreen( - document: Document(), - ), + home: DocumentScreen(document: Document()), ); } } @@ -27,24 +25,13 @@ class DocumentApp extends StatelessWidget { class DocumentScreen extends StatelessWidget { final Document document; - const DocumentScreen({ - required this.document, - super.key, - }); + const DocumentScreen({required this.document, super.key}); @override Widget build(BuildContext context) { return Scaffold( - appBar: AppBar( - title: const Text('Title goes here'), - ), - body: const Column( - children: [ - Center( - child: Text('Body goes here'), - ), - ], - ), + appBar: AppBar(title: const Text('Title goes here')), + body: const Column(children: [Center(child: Text('Body goes here'))]), ); } } diff --git a/dart-patterns-and-records/step_04/pubspec.yaml b/dart-patterns-and-records/step_04/pubspec.yaml index 15be3ae8b1..bbd4f3a909 100644 --- a/dart-patterns-and-records/step_04/pubspec.yaml +++ b/dart-patterns-and-records/step_04/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: 'none' version: 0.1.0 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 dependencies: flutter: diff --git a/dart-patterns-and-records/step_05/lib/main.dart b/dart-patterns-and-records/step_05/lib/main.dart index 353cdf607d..7beaa797c6 100644 --- a/dart-patterns-and-records/step_05/lib/main.dart +++ b/dart-patterns-and-records/step_05/lib/main.dart @@ -17,9 +17,7 @@ class DocumentApp extends StatelessWidget { Widget build(BuildContext context) { return MaterialApp( theme: ThemeData(useMaterial3: true), - home: DocumentScreen( - document: Document(), - ), + home: DocumentScreen(document: Document()), ); } } @@ -27,26 +25,17 @@ class DocumentApp extends StatelessWidget { class DocumentScreen extends StatelessWidget { final Document document; - const DocumentScreen({ - required this.document, - super.key, - }); + const DocumentScreen({required this.document, super.key}); @override Widget build(BuildContext context) { final metadataRecord = document.metadata; return Scaffold( - appBar: AppBar( - title: Text(metadataRecord.$1), - ), + appBar: AppBar(title: Text(metadataRecord.$1)), body: Column( children: [ - Center( - child: Text( - 'Last modified ${metadataRecord.modified}', - ), - ), + Center(child: Text('Last modified ${metadataRecord.modified}')), ], ), ); diff --git a/dart-patterns-and-records/step_05/pubspec.yaml b/dart-patterns-and-records/step_05/pubspec.yaml index 15be3ae8b1..bbd4f3a909 100644 --- a/dart-patterns-and-records/step_05/pubspec.yaml +++ b/dart-patterns-and-records/step_05/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: 'none' version: 0.1.0 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 dependencies: flutter: diff --git a/dart-patterns-and-records/step_06_a/lib/main.dart b/dart-patterns-and-records/step_06_a/lib/main.dart index 957e3e4eb5..40fafe2aa3 100644 --- a/dart-patterns-and-records/step_06_a/lib/main.dart +++ b/dart-patterns-and-records/step_06_a/lib/main.dart @@ -17,9 +17,7 @@ class DocumentApp extends StatelessWidget { Widget build(BuildContext context) { return MaterialApp( theme: ThemeData(useMaterial3: true), - home: DocumentScreen( - document: Document(), - ), + home: DocumentScreen(document: Document()), ); } } @@ -27,28 +25,15 @@ class DocumentApp extends StatelessWidget { class DocumentScreen extends StatelessWidget { final Document document; - const DocumentScreen({ - required this.document, - super.key, - }); + const DocumentScreen({required this.document, super.key}); @override Widget build(BuildContext context) { final (title, modified: modified) = document.metadata; return Scaffold( - appBar: AppBar( - title: Text(title), - ), - body: Column( - children: [ - Center( - child: Text( - 'Last modified $modified', - ), - ), - ], - ), + appBar: AppBar(title: Text(title)), + body: Column(children: [Center(child: Text('Last modified $modified'))]), ); } } diff --git a/dart-patterns-and-records/step_06_a/pubspec.yaml b/dart-patterns-and-records/step_06_a/pubspec.yaml index 15be3ae8b1..bbd4f3a909 100644 --- a/dart-patterns-and-records/step_06_a/pubspec.yaml +++ b/dart-patterns-and-records/step_06_a/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: 'none' version: 0.1.0 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 dependencies: flutter: diff --git a/dart-patterns-and-records/step_06_b/lib/main.dart b/dart-patterns-and-records/step_06_b/lib/main.dart index f6e3653c29..68403a8bf5 100644 --- a/dart-patterns-and-records/step_06_b/lib/main.dart +++ b/dart-patterns-and-records/step_06_b/lib/main.dart @@ -17,9 +17,7 @@ class DocumentApp extends StatelessWidget { Widget build(BuildContext context) { return MaterialApp( theme: ThemeData(useMaterial3: true), - home: DocumentScreen( - document: Document(), - ), + home: DocumentScreen(document: Document()), ); } } @@ -27,28 +25,15 @@ class DocumentApp extends StatelessWidget { class DocumentScreen extends StatelessWidget { final Document document; - const DocumentScreen({ - required this.document, - super.key, - }); + const DocumentScreen({required this.document, super.key}); @override Widget build(BuildContext context) { final (title, :modified) = document.metadata; return Scaffold( - appBar: AppBar( - title: Text(title), - ), - body: Column( - children: [ - Center( - child: Text( - 'Last modified $modified', - ), - ), - ], - ), + appBar: AppBar(title: Text(title)), + body: Column(children: [Center(child: Text('Last modified $modified'))]), ); } } diff --git a/dart-patterns-and-records/step_06_b/pubspec.yaml b/dart-patterns-and-records/step_06_b/pubspec.yaml index 15be3ae8b1..bbd4f3a909 100644 --- a/dart-patterns-and-records/step_06_b/pubspec.yaml +++ b/dart-patterns-and-records/step_06_b/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: 'none' version: 0.1.0 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 dependencies: flutter: diff --git a/dart-patterns-and-records/step_07_a/lib/data.dart b/dart-patterns-and-records/step_07_a/lib/data.dart index 4ef388a4be..747a0d1de6 100644 --- a/dart-patterns-and-records/step_07_a/lib/data.dart +++ b/dart-patterns-and-records/step_07_a/lib/data.dart @@ -13,8 +13,9 @@ class Document { final metadataJson = _json['metadata']; if (metadataJson is Map) { final title = metadataJson['title'] as String; - final localModified = - DateTime.parse(metadataJson['modified'] as String); + final localModified = DateTime.parse( + metadataJson['modified'] as String, + ); return (title, modified: localModified); } } diff --git a/dart-patterns-and-records/step_07_a/lib/main.dart b/dart-patterns-and-records/step_07_a/lib/main.dart index f6e3653c29..68403a8bf5 100644 --- a/dart-patterns-and-records/step_07_a/lib/main.dart +++ b/dart-patterns-and-records/step_07_a/lib/main.dart @@ -17,9 +17,7 @@ class DocumentApp extends StatelessWidget { Widget build(BuildContext context) { return MaterialApp( theme: ThemeData(useMaterial3: true), - home: DocumentScreen( - document: Document(), - ), + home: DocumentScreen(document: Document()), ); } } @@ -27,28 +25,15 @@ class DocumentApp extends StatelessWidget { class DocumentScreen extends StatelessWidget { final Document document; - const DocumentScreen({ - required this.document, - super.key, - }); + const DocumentScreen({required this.document, super.key}); @override Widget build(BuildContext context) { final (title, :modified) = document.metadata; return Scaffold( - appBar: AppBar( - title: Text(title), - ), - body: Column( - children: [ - Center( - child: Text( - 'Last modified $modified', - ), - ), - ], - ), + appBar: AppBar(title: Text(title)), + body: Column(children: [Center(child: Text('Last modified $modified'))]), ); } } diff --git a/dart-patterns-and-records/step_07_a/pubspec.yaml b/dart-patterns-and-records/step_07_a/pubspec.yaml index 15be3ae8b1..bbd4f3a909 100644 --- a/dart-patterns-and-records/step_07_a/pubspec.yaml +++ b/dart-patterns-and-records/step_07_a/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: 'none' version: 0.1.0 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 dependencies: flutter: diff --git a/dart-patterns-and-records/step_07_b/lib/data.dart b/dart-patterns-and-records/step_07_b/lib/data.dart index 50a95384d8..094e2ce2c1 100644 --- a/dart-patterns-and-records/step_07_b/lib/data.dart +++ b/dart-patterns-and-records/step_07_b/lib/data.dart @@ -9,13 +9,9 @@ class Document { Document() : _json = jsonDecode(documentJson); (String, {DateTime modified}) get metadata { - if (_json - case { - 'metadata': { - 'title': String title, - 'modified': String localModified, - } - }) { + if (_json case { + 'metadata': {'title': String title, 'modified': String localModified}, + }) { return (title, modified: DateTime.parse(localModified)); } else { throw const FormatException('Unexpected JSON'); diff --git a/dart-patterns-and-records/step_07_b/lib/main.dart b/dart-patterns-and-records/step_07_b/lib/main.dart index f6e3653c29..68403a8bf5 100644 --- a/dart-patterns-and-records/step_07_b/lib/main.dart +++ b/dart-patterns-and-records/step_07_b/lib/main.dart @@ -17,9 +17,7 @@ class DocumentApp extends StatelessWidget { Widget build(BuildContext context) { return MaterialApp( theme: ThemeData(useMaterial3: true), - home: DocumentScreen( - document: Document(), - ), + home: DocumentScreen(document: Document()), ); } } @@ -27,28 +25,15 @@ class DocumentApp extends StatelessWidget { class DocumentScreen extends StatelessWidget { final Document document; - const DocumentScreen({ - required this.document, - super.key, - }); + const DocumentScreen({required this.document, super.key}); @override Widget build(BuildContext context) { final (title, :modified) = document.metadata; return Scaffold( - appBar: AppBar( - title: Text(title), - ), - body: Column( - children: [ - Center( - child: Text( - 'Last modified $modified', - ), - ), - ], - ), + appBar: AppBar(title: Text(title)), + body: Column(children: [Center(child: Text('Last modified $modified'))]), ); } } diff --git a/dart-patterns-and-records/step_07_b/pubspec.yaml b/dart-patterns-and-records/step_07_b/pubspec.yaml index 15be3ae8b1..bbd4f3a909 100644 --- a/dart-patterns-and-records/step_07_b/pubspec.yaml +++ b/dart-patterns-and-records/step_07_b/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: 'none' version: 0.1.0 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 dependencies: flutter: diff --git a/dart-patterns-and-records/step_08/lib/data.dart b/dart-patterns-and-records/step_08/lib/data.dart index e18825beed..f4ddd1af46 100644 --- a/dart-patterns-and-records/step_08/lib/data.dart +++ b/dart-patterns-and-records/step_08/lib/data.dart @@ -9,13 +9,9 @@ class Document { Document() : _json = jsonDecode(documentJson); (String, {DateTime modified}) get metadata { - if (_json - case { - 'metadata': { - 'title': String title, - 'modified': String localModified, - } - }) { + if (_json case { + 'metadata': {'title': String title, 'modified': String localModified}, + }) { return (title, modified: DateTime.parse(localModified)); } else { throw const FormatException('Unexpected JSON'); diff --git a/dart-patterns-and-records/step_08/lib/main.dart b/dart-patterns-and-records/step_08/lib/main.dart index f6e3653c29..68403a8bf5 100644 --- a/dart-patterns-and-records/step_08/lib/main.dart +++ b/dart-patterns-and-records/step_08/lib/main.dart @@ -17,9 +17,7 @@ class DocumentApp extends StatelessWidget { Widget build(BuildContext context) { return MaterialApp( theme: ThemeData(useMaterial3: true), - home: DocumentScreen( - document: Document(), - ), + home: DocumentScreen(document: Document()), ); } } @@ -27,28 +25,15 @@ class DocumentApp extends StatelessWidget { class DocumentScreen extends StatelessWidget { final Document document; - const DocumentScreen({ - required this.document, - super.key, - }); + const DocumentScreen({required this.document, super.key}); @override Widget build(BuildContext context) { final (title, :modified) = document.metadata; return Scaffold( - appBar: AppBar( - title: Text(title), - ), - body: Column( - children: [ - Center( - child: Text( - 'Last modified $modified', - ), - ), - ], - ), + appBar: AppBar(title: Text(title)), + body: Column(children: [Center(child: Text('Last modified $modified'))]), ); } } diff --git a/dart-patterns-and-records/step_08/pubspec.yaml b/dart-patterns-and-records/step_08/pubspec.yaml index 15be3ae8b1..bbd4f3a909 100644 --- a/dart-patterns-and-records/step_08/pubspec.yaml +++ b/dart-patterns-and-records/step_08/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: 'none' version: 0.1.0 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 dependencies: flutter: diff --git a/dart-patterns-and-records/step_09/lib/data.dart b/dart-patterns-and-records/step_09/lib/data.dart index e18825beed..f4ddd1af46 100644 --- a/dart-patterns-and-records/step_09/lib/data.dart +++ b/dart-patterns-and-records/step_09/lib/data.dart @@ -9,13 +9,9 @@ class Document { Document() : _json = jsonDecode(documentJson); (String, {DateTime modified}) get metadata { - if (_json - case { - 'metadata': { - 'title': String title, - 'modified': String localModified, - } - }) { + if (_json case { + 'metadata': {'title': String title, 'modified': String localModified}, + }) { return (title, modified: DateTime.parse(localModified)); } else { throw const FormatException('Unexpected JSON'); diff --git a/dart-patterns-and-records/step_09/lib/main.dart b/dart-patterns-and-records/step_09/lib/main.dart index c74bcc693a..12843213fd 100644 --- a/dart-patterns-and-records/step_09/lib/main.dart +++ b/dart-patterns-and-records/step_09/lib/main.dart @@ -17,9 +17,7 @@ class DocumentApp extends StatelessWidget { Widget build(BuildContext context) { return MaterialApp( theme: ThemeData(useMaterial3: true), - home: DocumentScreen( - document: Document(), - ), + home: DocumentScreen(document: Document()), ); } } @@ -27,10 +25,7 @@ class DocumentApp extends StatelessWidget { class DocumentScreen extends StatelessWidget { final Document document; - const DocumentScreen({ - required this.document, - super.key, - }); + const DocumentScreen({required this.document, super.key}); @override Widget build(BuildContext context) { @@ -38,9 +33,7 @@ class DocumentScreen extends StatelessWidget { final blocks = document.getBlocks(); return Scaffold( - appBar: AppBar( - title: Text(title), - ), + appBar: AppBar(title: Text(title)), body: Column( children: [ Text('Last modified: $modified'), @@ -61,10 +54,7 @@ class DocumentScreen extends StatelessWidget { class BlockWidget extends StatelessWidget { final Block block; - const BlockWidget({ - required this.block, - super.key, - }); + const BlockWidget({required this.block, super.key}); @override Widget build(BuildContext context) { @@ -80,10 +70,7 @@ class BlockWidget extends StatelessWidget { return Container( margin: const EdgeInsets.all(8), - child: Text( - block.text, - style: textStyle, - ), + child: Text(block.text, style: textStyle), ); } } diff --git a/dart-patterns-and-records/step_09/pubspec.yaml b/dart-patterns-and-records/step_09/pubspec.yaml index 15be3ae8b1..bbd4f3a909 100644 --- a/dart-patterns-and-records/step_09/pubspec.yaml +++ b/dart-patterns-and-records/step_09/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: 'none' version: 0.1.0 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 dependencies: flutter: diff --git a/dart-patterns-and-records/step_10/lib/data.dart b/dart-patterns-and-records/step_10/lib/data.dart index e18825beed..f4ddd1af46 100644 --- a/dart-patterns-and-records/step_10/lib/data.dart +++ b/dart-patterns-and-records/step_10/lib/data.dart @@ -9,13 +9,9 @@ class Document { Document() : _json = jsonDecode(documentJson); (String, {DateTime modified}) get metadata { - if (_json - case { - 'metadata': { - 'title': String title, - 'modified': String localModified, - } - }) { + if (_json case { + 'metadata': {'title': String title, 'modified': String localModified}, + }) { return (title, modified: DateTime.parse(localModified)); } else { throw const FormatException('Unexpected JSON'); diff --git a/dart-patterns-and-records/step_10/lib/main.dart b/dart-patterns-and-records/step_10/lib/main.dart index ac813e3c33..bd721ca96a 100644 --- a/dart-patterns-and-records/step_10/lib/main.dart +++ b/dart-patterns-and-records/step_10/lib/main.dart @@ -17,9 +17,7 @@ class DocumentApp extends StatelessWidget { Widget build(BuildContext context) { return MaterialApp( theme: ThemeData(useMaterial3: true), - home: DocumentScreen( - document: Document(), - ), + home: DocumentScreen(document: Document()), ); } } @@ -27,10 +25,7 @@ class DocumentApp extends StatelessWidget { class DocumentScreen extends StatelessWidget { final Document document; - const DocumentScreen({ - required this.document, - super.key, - }); + const DocumentScreen({required this.document, super.key}); @override Widget build(BuildContext context) { @@ -38,9 +33,7 @@ class DocumentScreen extends StatelessWidget { final blocks = document.getBlocks(); return Scaffold( - appBar: AppBar( - title: Text(title), - ), + appBar: AppBar(title: Text(title)), body: Column( children: [ Text('Last modified: $modified'), @@ -61,10 +54,7 @@ class DocumentScreen extends StatelessWidget { class BlockWidget extends StatelessWidget { final Block block; - const BlockWidget({ - required this.block, - super.key, - }); + const BlockWidget({required this.block, super.key}); @override Widget build(BuildContext context) { @@ -72,15 +62,12 @@ class BlockWidget extends StatelessWidget { textStyle = switch (block.type) { 'h1' => Theme.of(context).textTheme.displayMedium, 'p' || 'checkbox' => Theme.of(context).textTheme.bodyMedium, - _ => Theme.of(context).textTheme.bodySmall + _ => Theme.of(context).textTheme.bodySmall, }; return Container( margin: const EdgeInsets.all(8), - child: Text( - block.text, - style: textStyle, - ), + child: Text(block.text, style: textStyle), ); } } diff --git a/dart-patterns-and-records/step_10/pubspec.yaml b/dart-patterns-and-records/step_10/pubspec.yaml index 15be3ae8b1..bbd4f3a909 100644 --- a/dart-patterns-and-records/step_10/pubspec.yaml +++ b/dart-patterns-and-records/step_10/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: 'none' version: 0.1.0 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 dependencies: flutter: diff --git a/dart-patterns-and-records/step_11_a/lib/data.dart b/dart-patterns-and-records/step_11_a/lib/data.dart index e18825beed..f4ddd1af46 100644 --- a/dart-patterns-and-records/step_11_a/lib/data.dart +++ b/dart-patterns-and-records/step_11_a/lib/data.dart @@ -9,13 +9,9 @@ class Document { Document() : _json = jsonDecode(documentJson); (String, {DateTime modified}) get metadata { - if (_json - case { - 'metadata': { - 'title': String title, - 'modified': String localModified, - } - }) { + if (_json case { + 'metadata': {'title': String title, 'modified': String localModified}, + }) { return (title, modified: DateTime.parse(localModified)); } else { throw const FormatException('Unexpected JSON'); diff --git a/dart-patterns-and-records/step_11_a/lib/main.dart b/dart-patterns-and-records/step_11_a/lib/main.dart index 5ecf2a3f24..42e174a12f 100644 --- a/dart-patterns-and-records/step_11_a/lib/main.dart +++ b/dart-patterns-and-records/step_11_a/lib/main.dart @@ -30,9 +30,7 @@ class DocumentApp extends StatelessWidget { Widget build(BuildContext context) { return MaterialApp( theme: ThemeData(useMaterial3: true), - home: DocumentScreen( - document: Document(), - ), + home: DocumentScreen(document: Document()), ); } } @@ -40,10 +38,7 @@ class DocumentApp extends StatelessWidget { class DocumentScreen extends StatelessWidget { final Document document; - const DocumentScreen({ - required this.document, - super.key, - }); + const DocumentScreen({required this.document, super.key}); @override Widget build(BuildContext context) { @@ -51,9 +46,7 @@ class DocumentScreen extends StatelessWidget { final blocks = document.getBlocks(); return Scaffold( - appBar: AppBar( - title: Text(title), - ), + appBar: AppBar(title: Text(title)), body: Column( children: [ Text('Last modified: $modified'), @@ -74,10 +67,7 @@ class DocumentScreen extends StatelessWidget { class BlockWidget extends StatelessWidget { final Block block; - const BlockWidget({ - required this.block, - super.key, - }); + const BlockWidget({required this.block, super.key}); @override Widget build(BuildContext context) { @@ -85,15 +75,12 @@ class BlockWidget extends StatelessWidget { textStyle = switch (block.type) { 'h1' => Theme.of(context).textTheme.displayMedium, 'p' || 'checkbox' => Theme.of(context).textTheme.bodyMedium, - _ => Theme.of(context).textTheme.bodySmall + _ => Theme.of(context).textTheme.bodySmall, }; return Container( margin: const EdgeInsets.all(8), - child: Text( - block.text, - style: textStyle, - ), + child: Text(block.text, style: textStyle), ); } } diff --git a/dart-patterns-and-records/step_11_a/pubspec.yaml b/dart-patterns-and-records/step_11_a/pubspec.yaml index 15be3ae8b1..bbd4f3a909 100644 --- a/dart-patterns-and-records/step_11_a/pubspec.yaml +++ b/dart-patterns-and-records/step_11_a/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: 'none' version: 0.1.0 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 dependencies: flutter: diff --git a/dart-patterns-and-records/step_11_b/lib/data.dart b/dart-patterns-and-records/step_11_b/lib/data.dart index e18825beed..f4ddd1af46 100644 --- a/dart-patterns-and-records/step_11_b/lib/data.dart +++ b/dart-patterns-and-records/step_11_b/lib/data.dart @@ -9,13 +9,9 @@ class Document { Document() : _json = jsonDecode(documentJson); (String, {DateTime modified}) get metadata { - if (_json - case { - 'metadata': { - 'title': String title, - 'modified': String localModified, - } - }) { + if (_json case { + 'metadata': {'title': String title, 'modified': String localModified}, + }) { return (title, modified: DateTime.parse(localModified)); } else { throw const FormatException('Unexpected JSON'); diff --git a/dart-patterns-and-records/step_11_b/lib/main.dart b/dart-patterns-and-records/step_11_b/lib/main.dart index 74cd3e24fc..30a5d6b2bd 100644 --- a/dart-patterns-and-records/step_11_b/lib/main.dart +++ b/dart-patterns-and-records/step_11_b/lib/main.dart @@ -33,9 +33,7 @@ class DocumentApp extends StatelessWidget { Widget build(BuildContext context) { return MaterialApp( theme: ThemeData(useMaterial3: true), - home: DocumentScreen( - document: Document(), - ), + home: DocumentScreen(document: Document()), ); } } @@ -43,10 +41,7 @@ class DocumentApp extends StatelessWidget { class DocumentScreen extends StatelessWidget { final Document document; - const DocumentScreen({ - required this.document, - super.key, - }); + const DocumentScreen({required this.document, super.key}); @override Widget build(BuildContext context) { @@ -55,9 +50,7 @@ class DocumentScreen extends StatelessWidget { final blocks = document.getBlocks(); return Scaffold( - appBar: AppBar( - title: Text(title), - ), + appBar: AppBar(title: Text(title)), body: Column( children: [ Text('Last modified: $formattedModifiedDate'), @@ -78,10 +71,7 @@ class DocumentScreen extends StatelessWidget { class BlockWidget extends StatelessWidget { final Block block; - const BlockWidget({ - required this.block, - super.key, - }); + const BlockWidget({required this.block, super.key}); @override Widget build(BuildContext context) { @@ -89,15 +79,12 @@ class BlockWidget extends StatelessWidget { textStyle = switch (block.type) { 'h1' => Theme.of(context).textTheme.displayMedium, 'p' || 'checkbox' => Theme.of(context).textTheme.bodyMedium, - _ => Theme.of(context).textTheme.bodySmall + _ => Theme.of(context).textTheme.bodySmall, }; return Container( margin: const EdgeInsets.all(8), - child: Text( - block.text, - style: textStyle, - ), + child: Text(block.text, style: textStyle), ); } } diff --git a/dart-patterns-and-records/step_11_b/pubspec.yaml b/dart-patterns-and-records/step_11_b/pubspec.yaml index 15be3ae8b1..bbd4f3a909 100644 --- a/dart-patterns-and-records/step_11_b/pubspec.yaml +++ b/dart-patterns-and-records/step_11_b/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: 'none' version: 0.1.0 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 dependencies: flutter: diff --git a/dart-patterns-and-records/step_12/lib/data.dart b/dart-patterns-and-records/step_12/lib/data.dart index c31c5f3101..3e2aa39aa7 100644 --- a/dart-patterns-and-records/step_12/lib/data.dart +++ b/dart-patterns-and-records/step_12/lib/data.dart @@ -9,13 +9,9 @@ class Document { Document() : _json = jsonDecode(documentJson); (String, {DateTime modified}) get metadata { - if (_json - case { - 'metadata': { - 'title': String title, - 'modified': String localModified, - } - }) { + if (_json case { + 'metadata': {'title': String title, 'modified': String localModified}, + }) { return (title, modified: DateTime.parse(localModified)); } else { throw const FormatException('Unexpected JSON'); diff --git a/dart-patterns-and-records/step_12/lib/main.dart b/dart-patterns-and-records/step_12/lib/main.dart index 89742d6d61..7cf884b923 100644 --- a/dart-patterns-and-records/step_12/lib/main.dart +++ b/dart-patterns-and-records/step_12/lib/main.dart @@ -33,9 +33,7 @@ class DocumentApp extends StatelessWidget { Widget build(BuildContext context) { return MaterialApp( theme: ThemeData(useMaterial3: true), - home: DocumentScreen( - document: Document(), - ), + home: DocumentScreen(document: Document()), ); } } @@ -43,10 +41,7 @@ class DocumentApp extends StatelessWidget { class DocumentScreen extends StatelessWidget { final Document document; - const DocumentScreen({ - required this.document, - super.key, - }); + const DocumentScreen({required this.document, super.key}); @override Widget build(BuildContext context) { @@ -55,9 +50,7 @@ class DocumentScreen extends StatelessWidget { final blocks = document.getBlocks(); return Scaffold( - appBar: AppBar( - title: Text(title), - ), + appBar: AppBar(title: Text(title)), body: Column( children: [ Text('Last modified: $formattedModifiedDate'), @@ -78,10 +71,7 @@ class DocumentScreen extends StatelessWidget { class BlockWidget extends StatelessWidget { final Block block; - const BlockWidget({ - required this.block, - super.key, - }); + const BlockWidget({required this.block, super.key}); @override Widget build(BuildContext context) { @@ -89,16 +79,13 @@ class BlockWidget extends StatelessWidget { margin: const EdgeInsets.all(8), child: switch (block) { HeaderBlock(:final text) => Text( - text, - style: Theme.of(context).textTheme.displayMedium, - ), + text, + style: Theme.of(context).textTheme.displayMedium, + ), ParagraphBlock(:final text) => Text(text), CheckboxBlock(:final text, :final isChecked) => Row( - children: [ - Checkbox(value: isChecked, onChanged: (_) {}), - Text(text), - ], - ), + children: [Checkbox(value: isChecked, onChanged: (_) {}), Text(text)], + ), }, ); } diff --git a/dart-patterns-and-records/step_12/pubspec.yaml b/dart-patterns-and-records/step_12/pubspec.yaml index 15be3ae8b1..bbd4f3a909 100644 --- a/dart-patterns-and-records/step_12/pubspec.yaml +++ b/dart-patterns-and-records/step_12/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: 'none' version: 0.1.0 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 dependencies: flutter: diff --git a/deeplink_cookbook/lib/main.dart b/deeplink_cookbook/lib/main.dart index 28772bba4e..f1d8282d82 100644 --- a/deeplink_cookbook/lib/main.dart +++ b/deeplink_cookbook/lib/main.dart @@ -8,15 +8,14 @@ final router = GoRouter( routes: [ GoRoute( path: '/', - builder: (_, __) => Scaffold( - appBar: AppBar(title: const Text('Home Screen')), - ), + builder: + (_, __) => Scaffold(appBar: AppBar(title: const Text('Home Screen'))), routes: [ GoRoute( path: 'details', - builder: (_, __) => Scaffold( - appBar: AppBar(title: const Text('Details Screen')), - ), + builder: + (_, __) => + Scaffold(appBar: AppBar(title: const Text('Details Screen'))), ), ], ), diff --git a/deeplink_cookbook/pubspec.yaml b/deeplink_cookbook/pubspec.yaml index 5def8945d8..800700027b 100644 --- a/deeplink_cookbook/pubspec.yaml +++ b/deeplink_cookbook/pubspec.yaml @@ -19,7 +19,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev version: 1.0.0+1 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 # Dependencies specify other packages that your package needs in order to work. # To automatically upgrade your package dependencies to the latest versions diff --git a/ffigen_codelab/step_03/example/lib/main.dart b/ffigen_codelab/step_03/example/lib/main.dart index c58b31eb0b..f0306c07b0 100644 --- a/ffigen_codelab/step_03/example/lib/main.dart +++ b/ffigen_codelab/step_03/example/lib/main.dart @@ -31,9 +31,7 @@ class _MyAppState extends State { const spacerSmall = SizedBox(height: 10); return MaterialApp( home: Scaffold( - appBar: AppBar( - title: const Text('Native Packages'), - ), + appBar: AppBar(title: const Text('Native Packages')), body: SingleChildScrollView( child: Container( padding: const EdgeInsets.all(10), diff --git a/ffigen_codelab/step_03/example/pubspec.yaml b/ffigen_codelab/step_03/example/pubspec.yaml index 806a8504d7..bb9b2fc9ba 100644 --- a/ffigen_codelab/step_03/example/pubspec.yaml +++ b/ffigen_codelab/step_03/example/pubspec.yaml @@ -19,7 +19,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev version: 1.0.0+1 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 # Dependencies specify other packages that your package needs in order to work. # To automatically upgrade your package dependencies to the latest versions diff --git a/ffigen_codelab/step_03/lib/ffigen_app.dart b/ffigen_codelab/step_03/lib/ffigen_app.dart index 190d014278..ec8a3b6145 100644 --- a/ffigen_codelab/step_03/lib/ffigen_app.dart +++ b/ffigen_codelab/step_03/lib/ffigen_app.dart @@ -88,37 +88,39 @@ Future _helperIsolateSendPort = () async { // We receive two types of messages: // 1. A port to send messages on. // 2. Responses to requests we sent. - final ReceivePort receivePort = ReceivePort() - ..listen((dynamic data) { - if (data is SendPort) { - // The helper isolate sent us the port on which we can sent it requests. - completer.complete(data); - return; - } - if (data is _SumResponse) { - // The helper isolate sent us a response to a request we sent. - final Completer completer = _sumRequests[data.id]!; - _sumRequests.remove(data.id); - completer.complete(data.result); - return; - } - throw UnsupportedError('Unsupported message type: ${data.runtimeType}'); - }); - - // Start the helper isolate. - await Isolate.spawn((SendPort sendPort) async { - final ReceivePort helperReceivePort = ReceivePort() - ..listen((dynamic data) { - // On the helper isolate listen to requests and respond to them. - if (data is _SumRequest) { - final int result = _bindings.sum_long_running(data.a, data.b); - final _SumResponse response = _SumResponse(data.id, result); - sendPort.send(response); + final ReceivePort receivePort = + ReceivePort()..listen((dynamic data) { + if (data is SendPort) { + // The helper isolate sent us the port on which we can sent it requests. + completer.complete(data); + return; + } + if (data is _SumResponse) { + // The helper isolate sent us a response to a request we sent. + final Completer completer = _sumRequests[data.id]!; + _sumRequests.remove(data.id); + completer.complete(data.result); return; } throw UnsupportedError('Unsupported message type: ${data.runtimeType}'); }); + // Start the helper isolate. + await Isolate.spawn((SendPort sendPort) async { + final ReceivePort helperReceivePort = + ReceivePort()..listen((dynamic data) { + // On the helper isolate listen to requests and respond to them. + if (data is _SumRequest) { + final int result = _bindings.sum_long_running(data.a, data.b); + final _SumResponse response = _SumResponse(data.id, result); + sendPort.send(response); + return; + } + throw UnsupportedError( + 'Unsupported message type: ${data.runtimeType}', + ); + }); + // Send the port to the main isolate on which we can receive requests. sendPort.send(helperReceivePort.sendPort); }, receivePort.sendPort); diff --git a/ffigen_codelab/step_03/lib/ffigen_app_bindings_generated.dart b/ffigen_codelab/step_03/lib/ffigen_app_bindings_generated.dart index 513983bf0c..b91a32288b 100644 --- a/ffigen_codelab/step_03/lib/ffigen_app_bindings_generated.dart +++ b/ffigen_codelab/step_03/lib/ffigen_app_bindings_generated.dart @@ -15,31 +15,24 @@ import 'dart:ffi' as ffi; class FfigenAppBindings { /// Holds the symbol lookup function. final ffi.Pointer Function(String symbolName) - _lookup; + _lookup; /// The symbols are looked up in [dynamicLibrary]. FfigenAppBindings(ffi.DynamicLibrary dynamicLibrary) - : _lookup = dynamicLibrary.lookup; + : _lookup = dynamicLibrary.lookup; /// The symbols are looked up with [lookup]. FfigenAppBindings.fromLookup( - ffi.Pointer Function(String symbolName) - lookup) - : _lookup = lookup; + ffi.Pointer Function(String symbolName) lookup, + ) : _lookup = lookup; /// A very short-lived native function. /// /// For very short-lived functions, it is fine to call them on the main isolate. /// They will block the Dart execution while running the native function, so /// only do this for native functions which are guaranteed to be short-lived. - int sum( - int a, - int b, - ) { - return _sum( - a, - b, - ); + int sum(int a, int b) { + return _sum(a, b); } late final _sumPtr = @@ -51,19 +44,14 @@ class FfigenAppBindings { /// Do not call these kind of native functions in the main isolate. They will /// block Dart execution. This will cause dropped frames in Flutter applications. /// Instead, call these native functions on a separate isolate. - int sum_long_running( - int a, - int b, - ) { - return _sum_long_running( - a, - b, - ); + int sum_long_running(int a, int b) { + return _sum_long_running(a, b); } late final _sum_long_runningPtr = _lookup>( - 'sum_long_running'); + 'sum_long_running', + ); late final _sum_long_running = _sum_long_runningPtr.asFunction(); } diff --git a/ffigen_codelab/step_03/pubspec.yaml b/ffigen_codelab/step_03/pubspec.yaml index eedf7c6a69..67498f7e55 100644 --- a/ffigen_codelab/step_03/pubspec.yaml +++ b/ffigen_codelab/step_03/pubspec.yaml @@ -4,7 +4,7 @@ version: 0.0.1 homepage: environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 flutter: '>=3.3.0' dependencies: diff --git a/ffigen_codelab/step_05/example/lib/main.dart b/ffigen_codelab/step_05/example/lib/main.dart index fe9e7935d6..34ed956085 100644 --- a/ffigen_codelab/step_05/example/lib/main.dart +++ b/ffigen_codelab/step_05/example/lib/main.dart @@ -43,20 +43,14 @@ class _MyAppState extends State { const spacerSmall = SizedBox(height: 10); return MaterialApp( home: Scaffold( - appBar: AppBar( - title: const Text('Duktape Test'), - ), + appBar: AppBar(title: const Text('Duktape Test')), body: Center( child: Container( padding: const EdgeInsets.all(10), child: Column( mainAxisSize: MainAxisSize.min, children: [ - Text( - output, - style: textStyle, - textAlign: TextAlign.center, - ), + Text(output, style: textStyle, textAlign: TextAlign.center), spacerSmall, ElevatedButton( child: const Text('Run JavaScript'), diff --git a/ffigen_codelab/step_05/example/pubspec.yaml b/ffigen_codelab/step_05/example/pubspec.yaml index 806a8504d7..bb9b2fc9ba 100644 --- a/ffigen_codelab/step_05/example/pubspec.yaml +++ b/ffigen_codelab/step_05/example/pubspec.yaml @@ -19,7 +19,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev version: 1.0.0+1 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 # Dependencies specify other packages that your package needs in order to work. # To automatically upgrade your package dependencies to the latest versions diff --git a/ffigen_codelab/step_05/lib/duktape_bindings_generated.dart b/ffigen_codelab/step_05/lib/duktape_bindings_generated.dart index 429f3bc134..7579ae6633 100644 --- a/ffigen_codelab/step_05/lib/duktape_bindings_generated.dart +++ b/ffigen_codelab/step_05/lib/duktape_bindings_generated.dart @@ -15,17 +15,16 @@ import 'dart:ffi' as ffi; class DuktapeBindings { /// Holds the symbol lookup function. final ffi.Pointer Function(String symbolName) - _lookup; + _lookup; /// The symbols are looked up in [dynamicLibrary]. DuktapeBindings(ffi.DynamicLibrary dynamicLibrary) - : _lookup = dynamicLibrary.lookup; + : _lookup = dynamicLibrary.lookup; /// The symbols are looked up with [lookup]. DuktapeBindings.fromLookup( - ffi.Pointer Function(String symbolName) - lookup) - : _lookup = lookup; + ffi.Pointer Function(String symbolName) lookup, + ) : _lookup = lookup; /// Context management ffi.Pointer duk_create_heap( @@ -45,226 +44,241 @@ class DuktapeBindings { } late final _duk_create_heapPtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function( + ffi.NativeFunction< + ffi.Pointer Function( + duk_alloc_function, + duk_realloc_function, + duk_free_function, + ffi.Pointer, + duk_fatal_function, + ) + > + >('duk_create_heap'); + late final _duk_create_heap = + _duk_create_heapPtr + .asFunction< + ffi.Pointer Function( duk_alloc_function, duk_realloc_function, duk_free_function, ffi.Pointer, - duk_fatal_function)>>('duk_create_heap'); - late final _duk_create_heap = _duk_create_heapPtr.asFunction< - ffi.Pointer Function( - duk_alloc_function, - duk_realloc_function, - duk_free_function, - ffi.Pointer, - duk_fatal_function)>(); + duk_fatal_function, + ) + >(); - void duk_destroy_heap( - ffi.Pointer ctx, - ) { - return _duk_destroy_heap( - ctx, - ); + void duk_destroy_heap(ffi.Pointer ctx) { + return _duk_destroy_heap(ctx); } late final _duk_destroy_heapPtr = _lookup)>>( - 'duk_destroy_heap'); - late final _duk_destroy_heap = _duk_destroy_heapPtr - .asFunction)>(); + 'duk_destroy_heap', + ); + late final _duk_destroy_heap = + _duk_destroy_heapPtr + .asFunction)>(); void duk_suspend( ffi.Pointer ctx, ffi.Pointer state, ) { - return _duk_suspend( - ctx, - state, - ); + return _duk_suspend(ctx, state); } late final _duk_suspendPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function(ffi.Pointer, - ffi.Pointer)>>('duk_suspend'); - late final _duk_suspend = _duk_suspendPtr.asFunction< - void Function(ffi.Pointer, ffi.Pointer)>(); + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer) + > + >('duk_suspend'); + late final _duk_suspend = + _duk_suspendPtr + .asFunction< + void Function( + ffi.Pointer, + ffi.Pointer, + ) + >(); void duk_resume( ffi.Pointer ctx, ffi.Pointer state, ) { - return _duk_resume( - ctx, - state, - ); + return _duk_resume(ctx, state); } late final _duk_resumePtr = _lookup< - ffi.NativeFunction< - ffi.Void Function(ffi.Pointer, - ffi.Pointer)>>('duk_resume'); - late final _duk_resume = _duk_resumePtr.asFunction< - void Function(ffi.Pointer, ffi.Pointer)>(); + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer) + > + >('duk_resume'); + late final _duk_resume = + _duk_resumePtr + .asFunction< + void Function( + ffi.Pointer, + ffi.Pointer, + ) + >(); /// Memory management /// /// Raw functions have no side effects (cannot trigger GC). - ffi.Pointer duk_alloc_raw( - ffi.Pointer ctx, - int size, - ) { - return _duk_alloc_raw( - ctx, - size, - ); + ffi.Pointer duk_alloc_raw(ffi.Pointer ctx, int size) { + return _duk_alloc_raw(ctx, size); } late final _duk_alloc_rawPtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function( - ffi.Pointer, duk_size_t)>>('duk_alloc_raw'); - late final _duk_alloc_raw = _duk_alloc_rawPtr.asFunction< - ffi.Pointer Function(ffi.Pointer, int)>(); + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, duk_size_t) + > + >('duk_alloc_raw'); + late final _duk_alloc_raw = + _duk_alloc_rawPtr + .asFunction< + ffi.Pointer Function(ffi.Pointer, int) + >(); - void duk_free_raw( - ffi.Pointer ctx, - ffi.Pointer ptr, - ) { - return _duk_free_raw( - ctx, - ptr, - ); + void duk_free_raw(ffi.Pointer ctx, ffi.Pointer ptr) { + return _duk_free_raw(ctx, ptr); } late final _duk_free_rawPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function(ffi.Pointer, - ffi.Pointer)>>('duk_free_raw'); - late final _duk_free_raw = _duk_free_rawPtr.asFunction< - void Function(ffi.Pointer, ffi.Pointer)>(); + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer) + > + >('duk_free_raw'); + late final _duk_free_raw = + _duk_free_rawPtr + .asFunction< + void Function(ffi.Pointer, ffi.Pointer) + >(); ffi.Pointer duk_realloc_raw( ffi.Pointer ctx, ffi.Pointer ptr, int size, ) { - return _duk_realloc_raw( - ctx, - ptr, - size, - ); + return _duk_realloc_raw(ctx, ptr, size); } late final _duk_realloc_rawPtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function(ffi.Pointer, - ffi.Pointer, duk_size_t)>>('duk_realloc_raw'); - late final _duk_realloc_raw = _duk_realloc_rawPtr.asFunction< + ffi.NativeFunction< ffi.Pointer Function( - ffi.Pointer, ffi.Pointer, int)>(); + ffi.Pointer, + ffi.Pointer, + duk_size_t, + ) + > + >('duk_realloc_raw'); + late final _duk_realloc_raw = + _duk_realloc_rawPtr + .asFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + int, + ) + >(); - ffi.Pointer duk_alloc( - ffi.Pointer ctx, - int size, - ) { - return _duk_alloc( - ctx, - size, - ); + ffi.Pointer duk_alloc(ffi.Pointer ctx, int size) { + return _duk_alloc(ctx, size); } late final _duk_allocPtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function( - ffi.Pointer, duk_size_t)>>('duk_alloc'); - late final _duk_alloc = _duk_allocPtr.asFunction< - ffi.Pointer Function(ffi.Pointer, int)>(); + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, duk_size_t) + > + >('duk_alloc'); + late final _duk_alloc = + _duk_allocPtr + .asFunction< + ffi.Pointer Function(ffi.Pointer, int) + >(); - void duk_free( - ffi.Pointer ctx, - ffi.Pointer ptr, - ) { - return _duk_free( - ctx, - ptr, - ); + void duk_free(ffi.Pointer ctx, ffi.Pointer ptr) { + return _duk_free(ctx, ptr); } late final _duk_freePtr = _lookup< - ffi.NativeFunction< - ffi.Void Function( - ffi.Pointer, ffi.Pointer)>>('duk_free'); - late final _duk_free = _duk_freePtr.asFunction< - void Function(ffi.Pointer, ffi.Pointer)>(); + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer) + > + >('duk_free'); + late final _duk_free = + _duk_freePtr + .asFunction< + void Function(ffi.Pointer, ffi.Pointer) + >(); ffi.Pointer duk_realloc( ffi.Pointer ctx, ffi.Pointer ptr, int size, ) { - return _duk_realloc( - ctx, - ptr, - size, - ); + return _duk_realloc(ctx, ptr, size); } late final _duk_reallocPtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function(ffi.Pointer, - ffi.Pointer, duk_size_t)>>('duk_realloc'); - late final _duk_realloc = _duk_reallocPtr.asFunction< + ffi.NativeFunction< ffi.Pointer Function( - ffi.Pointer, ffi.Pointer, int)>(); + ffi.Pointer, + ffi.Pointer, + duk_size_t, + ) + > + >('duk_realloc'); + late final _duk_realloc = + _duk_reallocPtr + .asFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + int, + ) + >(); void duk_get_memory_functions( ffi.Pointer ctx, ffi.Pointer out_funcs, ) { - return _duk_get_memory_functions( - ctx, - out_funcs, - ); + return _duk_get_memory_functions(ctx, out_funcs); } late final _duk_get_memory_functionsPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function(ffi.Pointer, - ffi.Pointer)>>('duk_get_memory_functions'); + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer, + ffi.Pointer, + ) + > + >('duk_get_memory_functions'); late final _duk_get_memory_functions = - _duk_get_memory_functionsPtr.asFunction< - void Function( - ffi.Pointer, ffi.Pointer)>(); + _duk_get_memory_functionsPtr + .asFunction< + void Function( + ffi.Pointer, + ffi.Pointer, + ) + >(); - void duk_gc( - ffi.Pointer ctx, - int flags, - ) { - return _duk_gc( - ctx, - flags, - ); + void duk_gc(ffi.Pointer ctx, int flags) { + return _duk_gc(ctx, flags); } late final _duk_gcPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function(ffi.Pointer, duk_uint_t)>>('duk_gc'); + ffi.NativeFunction, duk_uint_t)> + >('duk_gc'); late final _duk_gc = _duk_gcPtr.asFunction, int)>(); - void duk_throw_raw( - ffi.Pointer ctx, - ) { - return _duk_throw_raw( - ctx, - ); + void duk_throw_raw(ffi.Pointer ctx) { + return _duk_throw_raw(ctx); } late final _duk_throw_rawPtr = _lookup)>>( - 'duk_throw_raw'); + 'duk_throw_raw', + ); late final _duk_throw_raw = _duk_throw_rawPtr.asFunction)>(); @@ -272,18 +286,19 @@ class DuktapeBindings { ffi.Pointer ctx, ffi.Pointer err_msg, ) { - return _duk_fatal_raw( - ctx, - err_msg, - ); + return _duk_fatal_raw(ctx, err_msg); } late final _duk_fatal_rawPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function(ffi.Pointer, - ffi.Pointer)>>('duk_fatal_raw'); - late final _duk_fatal_raw = _duk_fatal_rawPtr.asFunction< - void Function(ffi.Pointer, ffi.Pointer)>(); + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer) + > + >('duk_fatal_raw'); + late final _duk_fatal_raw = + _duk_fatal_rawPtr + .asFunction< + void Function(ffi.Pointer, ffi.Pointer) + >(); void duk_error_raw( ffi.Pointer ctx, @@ -292,26 +307,31 @@ class DuktapeBindings { int line, ffi.Pointer fmt, ) { - return _duk_error_raw( - ctx, - err_code, - filename, - line, - fmt, - ); + return _duk_error_raw(ctx, err_code, filename, line, fmt); } late final _duk_error_rawPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function( + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer, + duk_errcode_t, + ffi.Pointer, + duk_int_t, + ffi.Pointer, + ) + > + >('duk_error_raw'); + late final _duk_error_raw = + _duk_error_rawPtr + .asFunction< + void Function( ffi.Pointer, - duk_errcode_t, + int, ffi.Pointer, - duk_int_t, - ffi.Pointer)>>('duk_error_raw'); - late final _duk_error_raw = _duk_error_rawPtr.asFunction< - void Function(ffi.Pointer, int, ffi.Pointer, int, - ffi.Pointer)>(); + int, + ffi.Pointer, + ) + >(); void duk_error_va_raw( ffi.Pointer ctx, @@ -321,185 +341,147 @@ class DuktapeBindings { ffi.Pointer fmt, va_list ap, ) { - return _duk_error_va_raw( - ctx, - err_code, - filename, - line, - fmt, - ap, - ); + return _duk_error_va_raw(ctx, err_code, filename, line, fmt, ap); } late final _duk_error_va_rawPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function( + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer, + duk_errcode_t, + ffi.Pointer, + duk_int_t, + ffi.Pointer, + va_list, + ) + > + >('duk_error_va_raw'); + late final _duk_error_va_raw = + _duk_error_va_rawPtr + .asFunction< + void Function( ffi.Pointer, - duk_errcode_t, + int, ffi.Pointer, - duk_int_t, + int, ffi.Pointer, - va_list)>>('duk_error_va_raw'); - late final _duk_error_va_raw = _duk_error_va_rawPtr.asFunction< - void Function(ffi.Pointer, int, ffi.Pointer, int, - ffi.Pointer, va_list)>(); + va_list, + ) + >(); /// Other state related functions - int duk_is_strict_call( - ffi.Pointer ctx, - ) { - return _duk_is_strict_call( - ctx, - ); + int duk_is_strict_call(ffi.Pointer ctx) { + return _duk_is_strict_call(ctx); } late final _duk_is_strict_callPtr = _lookup< - ffi.NativeFunction)>>( - 'duk_is_strict_call'); - late final _duk_is_strict_call = _duk_is_strict_callPtr - .asFunction)>(); + ffi.NativeFunction)> + >('duk_is_strict_call'); + late final _duk_is_strict_call = + _duk_is_strict_callPtr + .asFunction)>(); - int duk_is_constructor_call( - ffi.Pointer ctx, - ) { - return _duk_is_constructor_call( - ctx, - ); + int duk_is_constructor_call(ffi.Pointer ctx) { + return _duk_is_constructor_call(ctx); } late final _duk_is_constructor_callPtr = _lookup< - ffi.NativeFunction)>>( - 'duk_is_constructor_call'); - late final _duk_is_constructor_call = _duk_is_constructor_callPtr - .asFunction)>(); + ffi.NativeFunction)> + >('duk_is_constructor_call'); + late final _duk_is_constructor_call = + _duk_is_constructor_callPtr + .asFunction)>(); /// Stack management - int duk_normalize_index( - ffi.Pointer ctx, - int idx, - ) { - return _duk_normalize_index( - ctx, - idx, - ); + int duk_normalize_index(ffi.Pointer ctx, int idx) { + return _duk_normalize_index(ctx, idx); } late final _duk_normalize_indexPtr = _lookup< - ffi.NativeFunction< - duk_idx_t Function( - ffi.Pointer, duk_idx_t)>>('duk_normalize_index'); - late final _duk_normalize_index = _duk_normalize_indexPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_normalize_index'); + late final _duk_normalize_index = + _duk_normalize_indexPtr + .asFunction, int)>(); - int duk_require_normalize_index( - ffi.Pointer ctx, - int idx, - ) { - return _duk_require_normalize_index( - ctx, - idx, - ); + int duk_require_normalize_index(ffi.Pointer ctx, int idx) { + return _duk_require_normalize_index(ctx, idx); } late final _duk_require_normalize_indexPtr = _lookup< - ffi.NativeFunction< - duk_idx_t Function(ffi.Pointer, - duk_idx_t)>>('duk_require_normalize_index'); - late final _duk_require_normalize_index = _duk_require_normalize_indexPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_require_normalize_index'); + late final _duk_require_normalize_index = + _duk_require_normalize_indexPtr + .asFunction, int)>(); - int duk_is_valid_index( - ffi.Pointer ctx, - int idx, - ) { - return _duk_is_valid_index( - ctx, - idx, - ); + int duk_is_valid_index(ffi.Pointer ctx, int idx) { + return _duk_is_valid_index(ctx, idx); } late final _duk_is_valid_indexPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function( - ffi.Pointer, duk_idx_t)>>('duk_is_valid_index'); - late final _duk_is_valid_index = _duk_is_valid_indexPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_is_valid_index'); + late final _duk_is_valid_index = + _duk_is_valid_indexPtr + .asFunction, int)>(); - void duk_require_valid_index( - ffi.Pointer ctx, - int idx, - ) { - return _duk_require_valid_index( - ctx, - idx, - ); + void duk_require_valid_index(ffi.Pointer ctx, int idx) { + return _duk_require_valid_index(ctx, idx); } late final _duk_require_valid_indexPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function( - ffi.Pointer, duk_idx_t)>>('duk_require_valid_index'); - late final _duk_require_valid_index = _duk_require_valid_indexPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_require_valid_index'); + late final _duk_require_valid_index = + _duk_require_valid_indexPtr + .asFunction, int)>(); - int duk_get_top( - ffi.Pointer ctx, - ) { - return _duk_get_top( - ctx, - ); + int duk_get_top(ffi.Pointer ctx) { + return _duk_get_top(ctx); } late final _duk_get_topPtr = _lookup)>>( - 'duk_get_top'); + 'duk_get_top', + ); late final _duk_get_top = _duk_get_topPtr.asFunction)>(); - void duk_set_top( - ffi.Pointer ctx, - int idx, - ) { - return _duk_set_top( - ctx, - idx, - ); + void duk_set_top(ffi.Pointer ctx, int idx) { + return _duk_set_top(ctx, idx); } late final _duk_set_topPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function( - ffi.Pointer, duk_idx_t)>>('duk_set_top'); - late final _duk_set_top = _duk_set_topPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_set_top'); + late final _duk_set_top = + _duk_set_topPtr + .asFunction, int)>(); - int duk_get_top_index( - ffi.Pointer ctx, - ) { - return _duk_get_top_index( - ctx, - ); + int duk_get_top_index(ffi.Pointer ctx) { + return _duk_get_top_index(ctx); } late final _duk_get_top_indexPtr = _lookup)>>( - 'duk_get_top_index'); - late final _duk_get_top_index = _duk_get_top_indexPtr - .asFunction)>(); + 'duk_get_top_index', + ); + late final _duk_get_top_index = + _duk_get_top_indexPtr + .asFunction)>(); - int duk_require_top_index( - ffi.Pointer ctx, - ) { - return _duk_require_top_index( - ctx, - ); + int duk_require_top_index(ffi.Pointer ctx) { + return _duk_require_top_index(ctx); } late final _duk_require_top_indexPtr = _lookup)>>( - 'duk_require_top_index'); - late final _duk_require_top_index = _duk_require_top_indexPtr - .asFunction)>(); + 'duk_require_top_index', + ); + late final _duk_require_top_index = + _duk_require_top_indexPtr + .asFunction)>(); /// Although extra/top could be an unsigned type here, using a signed type /// makes the API more robust to calling code calculation errors or corner @@ -507,224 +489,147 @@ class DuktapeBindings { /// Negative values are treated as zero, which is better than casting them /// to a large unsigned number. (This principle is used elsewhere in the /// API too.) - int duk_check_stack( - ffi.Pointer ctx, - int extra, - ) { - return _duk_check_stack( - ctx, - extra, - ); + int duk_check_stack(ffi.Pointer ctx, int extra) { + return _duk_check_stack(ctx, extra); } late final _duk_check_stackPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function( - ffi.Pointer, duk_idx_t)>>('duk_check_stack'); - late final _duk_check_stack = _duk_check_stackPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_check_stack'); + late final _duk_check_stack = + _duk_check_stackPtr + .asFunction, int)>(); - void duk_require_stack( - ffi.Pointer ctx, - int extra, - ) { - return _duk_require_stack( - ctx, - extra, - ); + void duk_require_stack(ffi.Pointer ctx, int extra) { + return _duk_require_stack(ctx, extra); } late final _duk_require_stackPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function( - ffi.Pointer, duk_idx_t)>>('duk_require_stack'); - late final _duk_require_stack = _duk_require_stackPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_require_stack'); + late final _duk_require_stack = + _duk_require_stackPtr + .asFunction, int)>(); - int duk_check_stack_top( - ffi.Pointer ctx, - int top, - ) { - return _duk_check_stack_top( - ctx, - top, - ); + int duk_check_stack_top(ffi.Pointer ctx, int top) { + return _duk_check_stack_top(ctx, top); } late final _duk_check_stack_topPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function( - ffi.Pointer, duk_idx_t)>>('duk_check_stack_top'); - late final _duk_check_stack_top = _duk_check_stack_topPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_check_stack_top'); + late final _duk_check_stack_top = + _duk_check_stack_topPtr + .asFunction, int)>(); - void duk_require_stack_top( - ffi.Pointer ctx, - int top, - ) { - return _duk_require_stack_top( - ctx, - top, - ); + void duk_require_stack_top(ffi.Pointer ctx, int top) { + return _duk_require_stack_top(ctx, top); } late final _duk_require_stack_topPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function( - ffi.Pointer, duk_idx_t)>>('duk_require_stack_top'); - late final _duk_require_stack_top = _duk_require_stack_topPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_require_stack_top'); + late final _duk_require_stack_top = + _duk_require_stack_topPtr + .asFunction, int)>(); /// Stack manipulation (other than push/pop) - void duk_swap( - ffi.Pointer ctx, - int idx1, - int idx2, - ) { - return _duk_swap( - ctx, - idx1, - idx2, - ); + void duk_swap(ffi.Pointer ctx, int idx1, int idx2) { + return _duk_swap(ctx, idx1, idx2); } late final _duk_swapPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function( - ffi.Pointer, duk_idx_t, duk_idx_t)>>('duk_swap'); - late final _duk_swap = _duk_swapPtr - .asFunction, int, int)>(); + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, duk_idx_t, duk_idx_t) + > + >('duk_swap'); + late final _duk_swap = + _duk_swapPtr + .asFunction, int, int)>(); - void duk_swap_top( - ffi.Pointer ctx, - int idx, - ) { - return _duk_swap_top( - ctx, - idx, - ); + void duk_swap_top(ffi.Pointer ctx, int idx) { + return _duk_swap_top(ctx, idx); } late final _duk_swap_topPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function( - ffi.Pointer, duk_idx_t)>>('duk_swap_top'); - late final _duk_swap_top = _duk_swap_topPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_swap_top'); + late final _duk_swap_top = + _duk_swap_topPtr + .asFunction, int)>(); - void duk_dup( - ffi.Pointer ctx, - int from_idx, - ) { - return _duk_dup( - ctx, - from_idx, - ); + void duk_dup(ffi.Pointer ctx, int from_idx) { + return _duk_dup(ctx, from_idx); } late final _duk_dupPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function(ffi.Pointer, duk_idx_t)>>('duk_dup'); + ffi.NativeFunction, duk_idx_t)> + >('duk_dup'); late final _duk_dup = _duk_dupPtr.asFunction, int)>(); - void duk_dup_top( - ffi.Pointer ctx, - ) { - return _duk_dup_top( - ctx, - ); + void duk_dup_top(ffi.Pointer ctx) { + return _duk_dup_top(ctx); } late final _duk_dup_topPtr = _lookup)>>( - 'duk_dup_top'); + 'duk_dup_top', + ); late final _duk_dup_top = _duk_dup_topPtr.asFunction)>(); - void duk_insert( - ffi.Pointer ctx, - int to_idx, - ) { - return _duk_insert( - ctx, - to_idx, - ); + void duk_insert(ffi.Pointer ctx, int to_idx) { + return _duk_insert(ctx, to_idx); } late final _duk_insertPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function( - ffi.Pointer, duk_idx_t)>>('duk_insert'); + ffi.NativeFunction, duk_idx_t)> + >('duk_insert'); late final _duk_insert = _duk_insertPtr.asFunction, int)>(); - void duk_pull( - ffi.Pointer ctx, - int from_idx, - ) { - return _duk_pull( - ctx, - from_idx, - ); + void duk_pull(ffi.Pointer ctx, int from_idx) { + return _duk_pull(ctx, from_idx); } late final _duk_pullPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function(ffi.Pointer, duk_idx_t)>>('duk_pull'); + ffi.NativeFunction, duk_idx_t)> + >('duk_pull'); late final _duk_pull = _duk_pullPtr.asFunction, int)>(); - void duk_replace( - ffi.Pointer ctx, - int to_idx, - ) { - return _duk_replace( - ctx, - to_idx, - ); + void duk_replace(ffi.Pointer ctx, int to_idx) { + return _duk_replace(ctx, to_idx); } late final _duk_replacePtr = _lookup< - ffi.NativeFunction< - ffi.Void Function( - ffi.Pointer, duk_idx_t)>>('duk_replace'); - late final _duk_replace = _duk_replacePtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_replace'); + late final _duk_replace = + _duk_replacePtr + .asFunction, int)>(); - void duk_copy( - ffi.Pointer ctx, - int from_idx, - int to_idx, - ) { - return _duk_copy( - ctx, - from_idx, - to_idx, - ); + void duk_copy(ffi.Pointer ctx, int from_idx, int to_idx) { + return _duk_copy(ctx, from_idx, to_idx); } late final _duk_copyPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function( - ffi.Pointer, duk_idx_t, duk_idx_t)>>('duk_copy'); - late final _duk_copy = _duk_copyPtr - .asFunction, int, int)>(); + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, duk_idx_t, duk_idx_t) + > + >('duk_copy'); + late final _duk_copy = + _duk_copyPtr + .asFunction, int, int)>(); - void duk_remove( - ffi.Pointer ctx, - int idx, - ) { - return _duk_remove( - ctx, - idx, - ); + void duk_remove(ffi.Pointer ctx, int idx) { + return _duk_remove(ctx, idx); } late final _duk_removePtr = _lookup< - ffi.NativeFunction< - ffi.Void Function( - ffi.Pointer, duk_idx_t)>>('duk_remove'); + ffi.NativeFunction, duk_idx_t)> + >('duk_remove'); late final _duk_remove = _duk_removePtr.asFunction, int)>(); @@ -734,21 +639,29 @@ class DuktapeBindings { int count, int is_copy, ) { - return _duk_xcopymove_raw( - to_ctx, - from_ctx, - count, - is_copy, - ); + return _duk_xcopymove_raw(to_ctx, from_ctx, count, is_copy); } late final _duk_xcopymove_rawPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function(ffi.Pointer, ffi.Pointer, - duk_idx_t, duk_bool_t)>>('duk_xcopymove_raw'); - late final _duk_xcopymove_raw = _duk_xcopymove_rawPtr.asFunction< - void Function( - ffi.Pointer, ffi.Pointer, int, int)>(); + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer, + ffi.Pointer, + duk_idx_t, + duk_bool_t, + ) + > + >('duk_xcopymove_raw'); + late final _duk_xcopymove_raw = + _duk_xcopymove_rawPtr + .asFunction< + void Function( + ffi.Pointer, + ffi.Pointer, + int, + int, + ) + >(); /// Push operations /// @@ -756,446 +669,417 @@ class DuktapeBindings { /// position of the pushed value for convenience. /// /// Note: duk_dup() is technically a push. - void duk_push_undefined( - ffi.Pointer ctx, - ) { - return _duk_push_undefined( - ctx, - ); + void duk_push_undefined(ffi.Pointer ctx) { + return _duk_push_undefined(ctx); } late final _duk_push_undefinedPtr = _lookup)>>( - 'duk_push_undefined'); - late final _duk_push_undefined = _duk_push_undefinedPtr - .asFunction)>(); + 'duk_push_undefined', + ); + late final _duk_push_undefined = + _duk_push_undefinedPtr + .asFunction)>(); - void duk_push_null( - ffi.Pointer ctx, - ) { - return _duk_push_null( - ctx, - ); + void duk_push_null(ffi.Pointer ctx) { + return _duk_push_null(ctx); } late final _duk_push_nullPtr = _lookup)>>( - 'duk_push_null'); + 'duk_push_null', + ); late final _duk_push_null = _duk_push_nullPtr.asFunction)>(); - void duk_push_boolean( - ffi.Pointer ctx, - int val, - ) { - return _duk_push_boolean( - ctx, - val, - ); + void duk_push_boolean(ffi.Pointer ctx, int val) { + return _duk_push_boolean(ctx, val); } late final _duk_push_booleanPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function( - ffi.Pointer, duk_bool_t)>>('duk_push_boolean'); - late final _duk_push_boolean = _duk_push_booleanPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_bool_t)> + >('duk_push_boolean'); + late final _duk_push_boolean = + _duk_push_booleanPtr + .asFunction, int)>(); - void duk_push_true( - ffi.Pointer ctx, - ) { - return _duk_push_true( - ctx, - ); + void duk_push_true(ffi.Pointer ctx) { + return _duk_push_true(ctx); } late final _duk_push_truePtr = _lookup)>>( - 'duk_push_true'); + 'duk_push_true', + ); late final _duk_push_true = _duk_push_truePtr.asFunction)>(); - void duk_push_false( - ffi.Pointer ctx, - ) { - return _duk_push_false( - ctx, - ); + void duk_push_false(ffi.Pointer ctx) { + return _duk_push_false(ctx); } late final _duk_push_falsePtr = _lookup)>>( - 'duk_push_false'); + 'duk_push_false', + ); late final _duk_push_false = _duk_push_falsePtr.asFunction)>(); - void duk_push_number( - ffi.Pointer ctx, - double val, - ) { - return _duk_push_number( - ctx, - val, - ); + void duk_push_number(ffi.Pointer ctx, double val) { + return _duk_push_number(ctx, val); } late final _duk_push_numberPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function( - ffi.Pointer, duk_double_t)>>('duk_push_number'); - late final _duk_push_number = _duk_push_numberPtr - .asFunction, double)>(); + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, duk_double_t) + > + >('duk_push_number'); + late final _duk_push_number = + _duk_push_numberPtr + .asFunction, double)>(); - void duk_push_nan( - ffi.Pointer ctx, - ) { - return _duk_push_nan( - ctx, - ); + void duk_push_nan(ffi.Pointer ctx) { + return _duk_push_nan(ctx); } late final _duk_push_nanPtr = _lookup)>>( - 'duk_push_nan'); + 'duk_push_nan', + ); late final _duk_push_nan = _duk_push_nanPtr.asFunction)>(); - void duk_push_int( - ffi.Pointer ctx, - int val, - ) { - return _duk_push_int( - ctx, - val, - ); + void duk_push_int(ffi.Pointer ctx, int val) { + return _duk_push_int(ctx, val); } late final _duk_push_intPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function( - ffi.Pointer, duk_int_t)>>('duk_push_int'); - late final _duk_push_int = _duk_push_intPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_int_t)> + >('duk_push_int'); + late final _duk_push_int = + _duk_push_intPtr + .asFunction, int)>(); - void duk_push_uint( - ffi.Pointer ctx, - int val, - ) { - return _duk_push_uint( - ctx, - val, - ); + void duk_push_uint(ffi.Pointer ctx, int val) { + return _duk_push_uint(ctx, val); } late final _duk_push_uintPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function( - ffi.Pointer, duk_uint_t)>>('duk_push_uint'); - late final _duk_push_uint = _duk_push_uintPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_uint_t)> + >('duk_push_uint'); + late final _duk_push_uint = + _duk_push_uintPtr + .asFunction, int)>(); ffi.Pointer duk_push_string( ffi.Pointer ctx, ffi.Pointer str, ) { - return _duk_push_string( - ctx, - str, - ); + return _duk_push_string(ctx, str); } late final _duk_push_stringPtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function(ffi.Pointer, - ffi.Pointer)>>('duk_push_string'); - late final _duk_push_string = _duk_push_stringPtr.asFunction< + ffi.NativeFunction< ffi.Pointer Function( - ffi.Pointer, ffi.Pointer)>(); + ffi.Pointer, + ffi.Pointer, + ) + > + >('duk_push_string'); + late final _duk_push_string = + _duk_push_stringPtr + .asFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ) + >(); ffi.Pointer duk_push_lstring( ffi.Pointer ctx, ffi.Pointer str, int len, ) { - return _duk_push_lstring( - ctx, - str, - len, - ); + return _duk_push_lstring(ctx, str, len); } late final _duk_push_lstringPtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function(ffi.Pointer, - ffi.Pointer, duk_size_t)>>('duk_push_lstring'); - late final _duk_push_lstring = _duk_push_lstringPtr.asFunction< + ffi.NativeFunction< ffi.Pointer Function( - ffi.Pointer, ffi.Pointer, int)>(); + ffi.Pointer, + ffi.Pointer, + duk_size_t, + ) + > + >('duk_push_lstring'); + late final _duk_push_lstring = + _duk_push_lstringPtr + .asFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + int, + ) + >(); - void duk_push_pointer( - ffi.Pointer ctx, - ffi.Pointer p, - ) { - return _duk_push_pointer( - ctx, - p, - ); + void duk_push_pointer(ffi.Pointer ctx, ffi.Pointer p) { + return _duk_push_pointer(ctx, p); } late final _duk_push_pointerPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function(ffi.Pointer, - ffi.Pointer)>>('duk_push_pointer'); - late final _duk_push_pointer = _duk_push_pointerPtr.asFunction< - void Function(ffi.Pointer, ffi.Pointer)>(); + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer) + > + >('duk_push_pointer'); + late final _duk_push_pointer = + _duk_push_pointerPtr + .asFunction< + void Function(ffi.Pointer, ffi.Pointer) + >(); ffi.Pointer duk_push_sprintf( ffi.Pointer ctx, ffi.Pointer fmt, ) { - return _duk_push_sprintf( - ctx, - fmt, - ); + return _duk_push_sprintf(ctx, fmt); } late final _duk_push_sprintfPtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function(ffi.Pointer, - ffi.Pointer)>>('duk_push_sprintf'); - late final _duk_push_sprintf = _duk_push_sprintfPtr.asFunction< + ffi.NativeFunction< ffi.Pointer Function( - ffi.Pointer, ffi.Pointer)>(); + ffi.Pointer, + ffi.Pointer, + ) + > + >('duk_push_sprintf'); + late final _duk_push_sprintf = + _duk_push_sprintfPtr + .asFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ) + >(); ffi.Pointer duk_push_vsprintf( ffi.Pointer ctx, ffi.Pointer fmt, va_list ap, ) { - return _duk_push_vsprintf( - ctx, - fmt, - ap, - ); + return _duk_push_vsprintf(ctx, fmt, ap); } late final _duk_push_vsprintfPtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function(ffi.Pointer, - ffi.Pointer, va_list)>>('duk_push_vsprintf'); - late final _duk_push_vsprintf = _duk_push_vsprintfPtr.asFunction< + ffi.NativeFunction< ffi.Pointer Function( - ffi.Pointer, ffi.Pointer, va_list)>(); + ffi.Pointer, + ffi.Pointer, + va_list, + ) + > + >('duk_push_vsprintf'); + late final _duk_push_vsprintf = + _duk_push_vsprintfPtr + .asFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + va_list, + ) + >(); ffi.Pointer duk_push_literal_raw( ffi.Pointer ctx, ffi.Pointer str, int len, ) { - return _duk_push_literal_raw( - ctx, - str, - len, - ); + return _duk_push_literal_raw(ctx, str, len); } late final _duk_push_literal_rawPtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function(ffi.Pointer, - ffi.Pointer, duk_size_t)>>('duk_push_literal_raw'); - late final _duk_push_literal_raw = _duk_push_literal_rawPtr.asFunction< + ffi.NativeFunction< ffi.Pointer Function( - ffi.Pointer, ffi.Pointer, int)>(); + ffi.Pointer, + ffi.Pointer, + duk_size_t, + ) + > + >('duk_push_literal_raw'); + late final _duk_push_literal_raw = + _duk_push_literal_rawPtr + .asFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + int, + ) + >(); - void duk_push_this( - ffi.Pointer ctx, - ) { - return _duk_push_this( - ctx, - ); + void duk_push_this(ffi.Pointer ctx) { + return _duk_push_this(ctx); } late final _duk_push_thisPtr = _lookup)>>( - 'duk_push_this'); + 'duk_push_this', + ); late final _duk_push_this = _duk_push_thisPtr.asFunction)>(); - void duk_push_new_target( - ffi.Pointer ctx, - ) { - return _duk_push_new_target( - ctx, - ); + void duk_push_new_target(ffi.Pointer ctx) { + return _duk_push_new_target(ctx); } late final _duk_push_new_targetPtr = _lookup)>>( - 'duk_push_new_target'); - late final _duk_push_new_target = _duk_push_new_targetPtr - .asFunction)>(); + 'duk_push_new_target', + ); + late final _duk_push_new_target = + _duk_push_new_targetPtr + .asFunction)>(); - void duk_push_current_function( - ffi.Pointer ctx, - ) { - return _duk_push_current_function( - ctx, - ); + void duk_push_current_function(ffi.Pointer ctx) { + return _duk_push_current_function(ctx); } late final _duk_push_current_functionPtr = _lookup)>>( - 'duk_push_current_function'); - late final _duk_push_current_function = _duk_push_current_functionPtr - .asFunction)>(); + 'duk_push_current_function', + ); + late final _duk_push_current_function = + _duk_push_current_functionPtr + .asFunction)>(); - void duk_push_current_thread( - ffi.Pointer ctx, - ) { - return _duk_push_current_thread( - ctx, - ); + void duk_push_current_thread(ffi.Pointer ctx) { + return _duk_push_current_thread(ctx); } late final _duk_push_current_threadPtr = _lookup)>>( - 'duk_push_current_thread'); - late final _duk_push_current_thread = _duk_push_current_threadPtr - .asFunction)>(); + 'duk_push_current_thread', + ); + late final _duk_push_current_thread = + _duk_push_current_threadPtr + .asFunction)>(); - void duk_push_global_object( - ffi.Pointer ctx, - ) { - return _duk_push_global_object( - ctx, - ); + void duk_push_global_object(ffi.Pointer ctx) { + return _duk_push_global_object(ctx); } late final _duk_push_global_objectPtr = _lookup)>>( - 'duk_push_global_object'); - late final _duk_push_global_object = _duk_push_global_objectPtr - .asFunction)>(); + 'duk_push_global_object', + ); + late final _duk_push_global_object = + _duk_push_global_objectPtr + .asFunction)>(); - void duk_push_heap_stash( - ffi.Pointer ctx, - ) { - return _duk_push_heap_stash( - ctx, - ); + void duk_push_heap_stash(ffi.Pointer ctx) { + return _duk_push_heap_stash(ctx); } late final _duk_push_heap_stashPtr = _lookup)>>( - 'duk_push_heap_stash'); - late final _duk_push_heap_stash = _duk_push_heap_stashPtr - .asFunction)>(); + 'duk_push_heap_stash', + ); + late final _duk_push_heap_stash = + _duk_push_heap_stashPtr + .asFunction)>(); - void duk_push_global_stash( - ffi.Pointer ctx, - ) { - return _duk_push_global_stash( - ctx, - ); + void duk_push_global_stash(ffi.Pointer ctx) { + return _duk_push_global_stash(ctx); } late final _duk_push_global_stashPtr = _lookup)>>( - 'duk_push_global_stash'); - late final _duk_push_global_stash = _duk_push_global_stashPtr - .asFunction)>(); + 'duk_push_global_stash', + ); + late final _duk_push_global_stash = + _duk_push_global_stashPtr + .asFunction)>(); void duk_push_thread_stash( ffi.Pointer ctx, ffi.Pointer target_ctx, ) { - return _duk_push_thread_stash( - ctx, - target_ctx, - ); + return _duk_push_thread_stash(ctx, target_ctx); } late final _duk_push_thread_stashPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function(ffi.Pointer, - ffi.Pointer)>>('duk_push_thread_stash'); - late final _duk_push_thread_stash = _duk_push_thread_stashPtr.asFunction< - void Function(ffi.Pointer, ffi.Pointer)>(); + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer) + > + >('duk_push_thread_stash'); + late final _duk_push_thread_stash = + _duk_push_thread_stashPtr + .asFunction< + void Function(ffi.Pointer, ffi.Pointer) + >(); - int duk_push_object( - ffi.Pointer ctx, - ) { - return _duk_push_object( - ctx, - ); + int duk_push_object(ffi.Pointer ctx) { + return _duk_push_object(ctx); } late final _duk_push_objectPtr = _lookup)>>( - 'duk_push_object'); + 'duk_push_object', + ); late final _duk_push_object = _duk_push_objectPtr.asFunction)>(); - int duk_push_bare_object( - ffi.Pointer ctx, - ) { - return _duk_push_bare_object( - ctx, - ); + int duk_push_bare_object(ffi.Pointer ctx) { + return _duk_push_bare_object(ctx); } late final _duk_push_bare_objectPtr = _lookup)>>( - 'duk_push_bare_object'); - late final _duk_push_bare_object = _duk_push_bare_objectPtr - .asFunction)>(); + 'duk_push_bare_object', + ); + late final _duk_push_bare_object = + _duk_push_bare_objectPtr + .asFunction)>(); - int duk_push_array( - ffi.Pointer ctx, - ) { - return _duk_push_array( - ctx, - ); + int duk_push_array(ffi.Pointer ctx) { + return _duk_push_array(ctx); } late final _duk_push_arrayPtr = _lookup)>>( - 'duk_push_array'); + 'duk_push_array', + ); late final _duk_push_array = _duk_push_arrayPtr.asFunction)>(); - int duk_push_bare_array( - ffi.Pointer ctx, - ) { - return _duk_push_bare_array( - ctx, - ); + int duk_push_bare_array(ffi.Pointer ctx) { + return _duk_push_bare_array(ctx); } late final _duk_push_bare_arrayPtr = _lookup)>>( - 'duk_push_bare_array'); - late final _duk_push_bare_array = _duk_push_bare_arrayPtr - .asFunction)>(); + 'duk_push_bare_array', + ); + late final _duk_push_bare_array = + _duk_push_bare_arrayPtr + .asFunction)>(); int duk_push_c_function( ffi.Pointer ctx, duk_c_function func, int nargs, ) { - return _duk_push_c_function( - ctx, - func, - nargs, - ); + return _duk_push_c_function(ctx, func, nargs); } late final _duk_push_c_functionPtr = _lookup< - ffi.NativeFunction< - duk_idx_t Function(ffi.Pointer, duk_c_function, - duk_idx_t)>>('duk_push_c_function'); - late final _duk_push_c_function = _duk_push_c_functionPtr.asFunction< - int Function(ffi.Pointer, duk_c_function, int)>(); + ffi.NativeFunction< + duk_idx_t Function(ffi.Pointer, duk_c_function, duk_idx_t) + > + >('duk_push_c_function'); + late final _duk_push_c_function = + _duk_push_c_functionPtr + .asFunction< + int Function(ffi.Pointer, duk_c_function, int) + >(); int duk_push_c_lightfunc( ffi.Pointer ctx, @@ -1204,55 +1088,53 @@ class DuktapeBindings { int length, int magic, ) { - return _duk_push_c_lightfunc( - ctx, - func, - nargs, - length, - magic, - ); + return _duk_push_c_lightfunc(ctx, func, nargs, length, magic); } late final _duk_push_c_lightfuncPtr = _lookup< - ffi.NativeFunction< - duk_idx_t Function(ffi.Pointer, duk_c_function, - duk_idx_t, duk_idx_t, duk_int_t)>>('duk_push_c_lightfunc'); - late final _duk_push_c_lightfunc = _duk_push_c_lightfuncPtr.asFunction< - int Function(ffi.Pointer, duk_c_function, int, int, int)>(); + ffi.NativeFunction< + duk_idx_t Function( + ffi.Pointer, + duk_c_function, + duk_idx_t, + duk_idx_t, + duk_int_t, + ) + > + >('duk_push_c_lightfunc'); + late final _duk_push_c_lightfunc = + _duk_push_c_lightfuncPtr + .asFunction< + int Function( + ffi.Pointer, + duk_c_function, + int, + int, + int, + ) + >(); - int duk_push_thread_raw( - ffi.Pointer ctx, - int flags, - ) { - return _duk_push_thread_raw( - ctx, - flags, - ); + int duk_push_thread_raw(ffi.Pointer ctx, int flags) { + return _duk_push_thread_raw(ctx, flags); } late final _duk_push_thread_rawPtr = _lookup< - ffi.NativeFunction< - duk_idx_t Function( - ffi.Pointer, duk_uint_t)>>('duk_push_thread_raw'); - late final _duk_push_thread_raw = _duk_push_thread_rawPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_uint_t)> + >('duk_push_thread_raw'); + late final _duk_push_thread_raw = + _duk_push_thread_rawPtr + .asFunction, int)>(); - int duk_push_proxy( - ffi.Pointer ctx, - int proxy_flags, - ) { - return _duk_push_proxy( - ctx, - proxy_flags, - ); + int duk_push_proxy(ffi.Pointer ctx, int proxy_flags) { + return _duk_push_proxy(ctx, proxy_flags); } late final _duk_push_proxyPtr = _lookup< - ffi.NativeFunction< - duk_idx_t Function( - ffi.Pointer, duk_uint_t)>>('duk_push_proxy'); - late final _duk_push_proxy = _duk_push_proxyPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_uint_t)> + >('duk_push_proxy'); + late final _duk_push_proxy = + _duk_push_proxyPtr + .asFunction, int)>(); int duk_push_error_object_raw( ffi.Pointer ctx, @@ -1261,27 +1143,31 @@ class DuktapeBindings { int line, ffi.Pointer fmt, ) { - return _duk_push_error_object_raw( - ctx, - err_code, - filename, - line, - fmt, - ); + return _duk_push_error_object_raw(ctx, err_code, filename, line, fmt); } late final _duk_push_error_object_rawPtr = _lookup< - ffi.NativeFunction< - duk_idx_t Function( + ffi.NativeFunction< + duk_idx_t Function( + ffi.Pointer, + duk_errcode_t, + ffi.Pointer, + duk_int_t, + ffi.Pointer, + ) + > + >('duk_push_error_object_raw'); + late final _duk_push_error_object_raw = + _duk_push_error_object_rawPtr + .asFunction< + int Function( ffi.Pointer, - duk_errcode_t, + int, ffi.Pointer, - duk_int_t, - ffi.Pointer)>>('duk_push_error_object_raw'); - late final _duk_push_error_object_raw = - _duk_push_error_object_rawPtr.asFunction< - int Function(ffi.Pointer, int, ffi.Pointer, - int, ffi.Pointer)>(); + int, + ffi.Pointer, + ) + >(); int duk_push_error_object_va_raw( ffi.Pointer ctx, @@ -1302,37 +1188,52 @@ class DuktapeBindings { } late final _duk_push_error_object_va_rawPtr = _lookup< - ffi.NativeFunction< - duk_idx_t Function( + ffi.NativeFunction< + duk_idx_t Function( + ffi.Pointer, + duk_errcode_t, + ffi.Pointer, + duk_int_t, + ffi.Pointer, + va_list, + ) + > + >('duk_push_error_object_va_raw'); + late final _duk_push_error_object_va_raw = + _duk_push_error_object_va_rawPtr + .asFunction< + int Function( ffi.Pointer, - duk_errcode_t, + int, ffi.Pointer, - duk_int_t, + int, ffi.Pointer, - va_list)>>('duk_push_error_object_va_raw'); - late final _duk_push_error_object_va_raw = - _duk_push_error_object_va_rawPtr.asFunction< - int Function(ffi.Pointer, int, ffi.Pointer, - int, ffi.Pointer, va_list)>(); + va_list, + ) + >(); ffi.Pointer duk_push_buffer_raw( ffi.Pointer ctx, int size, int flags, ) { - return _duk_push_buffer_raw( - ctx, - size, - flags, - ); + return _duk_push_buffer_raw(ctx, size, flags); } late final _duk_push_buffer_rawPtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function(ffi.Pointer, duk_size_t, - duk_small_uint_t)>>('duk_push_buffer_raw'); - late final _duk_push_buffer_raw = _duk_push_buffer_rawPtr.asFunction< - ffi.Pointer Function(ffi.Pointer, int, int)>(); + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + duk_size_t, + duk_small_uint_t, + ) + > + >('duk_push_buffer_raw'); + late final _duk_push_buffer_raw = + _duk_push_buffer_rawPtr + .asFunction< + ffi.Pointer Function(ffi.Pointer, int, int) + >(); void duk_push_buffer_object( ffi.Pointer ctx, @@ -1351,85 +1252,81 @@ class DuktapeBindings { } late final _duk_push_buffer_objectPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function(ffi.Pointer, duk_idx_t, duk_size_t, - duk_size_t, duk_uint_t)>>('duk_push_buffer_object'); - late final _duk_push_buffer_object = _duk_push_buffer_objectPtr.asFunction< - void Function(ffi.Pointer, int, int, int, int)>(); + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer, + duk_idx_t, + duk_size_t, + duk_size_t, + duk_uint_t, + ) + > + >('duk_push_buffer_object'); + late final _duk_push_buffer_object = + _duk_push_buffer_objectPtr + .asFunction< + void Function(ffi.Pointer, int, int, int, int) + >(); int duk_push_heapptr( ffi.Pointer ctx, ffi.Pointer ptr, ) { - return _duk_push_heapptr( - ctx, - ptr, - ); + return _duk_push_heapptr(ctx, ptr); } late final _duk_push_heapptrPtr = _lookup< - ffi.NativeFunction< - duk_idx_t Function(ffi.Pointer, - ffi.Pointer)>>('duk_push_heapptr'); - late final _duk_push_heapptr = _duk_push_heapptrPtr.asFunction< - int Function(ffi.Pointer, ffi.Pointer)>(); + ffi.NativeFunction< + duk_idx_t Function(ffi.Pointer, ffi.Pointer) + > + >('duk_push_heapptr'); + late final _duk_push_heapptr = + _duk_push_heapptrPtr + .asFunction< + int Function(ffi.Pointer, ffi.Pointer) + >(); /// Pop operations - void duk_pop( - ffi.Pointer ctx, - ) { - return _duk_pop( - ctx, - ); + void duk_pop(ffi.Pointer ctx) { + return _duk_pop(ctx); } late final _duk_popPtr = _lookup)>>( - 'duk_pop'); + 'duk_pop', + ); late final _duk_pop = _duk_popPtr.asFunction)>(); - void duk_pop_n( - ffi.Pointer ctx, - int count, - ) { - return _duk_pop_n( - ctx, - count, - ); + void duk_pop_n(ffi.Pointer ctx, int count) { + return _duk_pop_n(ctx, count); } late final _duk_pop_nPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function(ffi.Pointer, duk_idx_t)>>('duk_pop_n'); + ffi.NativeFunction, duk_idx_t)> + >('duk_pop_n'); late final _duk_pop_n = _duk_pop_nPtr.asFunction, int)>(); - void duk_pop_2( - ffi.Pointer ctx, - ) { - return _duk_pop_2( - ctx, - ); + void duk_pop_2(ffi.Pointer ctx) { + return _duk_pop_2(ctx); } late final _duk_pop_2Ptr = _lookup)>>( - 'duk_pop_2'); + 'duk_pop_2', + ); late final _duk_pop_2 = _duk_pop_2Ptr.asFunction)>(); - void duk_pop_3( - ffi.Pointer ctx, - ) { - return _duk_pop_3( - ctx, - ); + void duk_pop_3(ffi.Pointer ctx) { + return _duk_pop_3(ctx); } late final _duk_pop_3Ptr = _lookup)>>( - 'duk_pop_3'); + 'duk_pop_3', + ); late final _duk_pop_3 = _duk_pop_3Ptr.asFunction)>(); @@ -1437,686 +1334,513 @@ class DuktapeBindings { /// /// duk_is_none(), which would indicate whether index it outside of stack, /// is not needed; duk_is_valid_index() gives the same information. - int duk_get_type( - ffi.Pointer ctx, - int idx, - ) { - return _duk_get_type( - ctx, - idx, - ); + int duk_get_type(ffi.Pointer ctx, int idx) { + return _duk_get_type(ctx, idx); } late final _duk_get_typePtr = _lookup< - ffi.NativeFunction< - duk_int_t Function( - ffi.Pointer, duk_idx_t)>>('duk_get_type'); - late final _duk_get_type = _duk_get_typePtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_get_type'); + late final _duk_get_type = + _duk_get_typePtr + .asFunction, int)>(); - int duk_check_type( - ffi.Pointer ctx, - int idx, - int type, - ) { - return _duk_check_type( - ctx, - idx, - type, - ); + int duk_check_type(ffi.Pointer ctx, int idx, int type) { + return _duk_check_type(ctx, idx, type); } late final _duk_check_typePtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function(ffi.Pointer, duk_idx_t, - duk_int_t)>>('duk_check_type'); - late final _duk_check_type = _duk_check_typePtr - .asFunction, int, int)>(); + ffi.NativeFunction< + duk_bool_t Function(ffi.Pointer, duk_idx_t, duk_int_t) + > + >('duk_check_type'); + late final _duk_check_type = + _duk_check_typePtr + .asFunction, int, int)>(); - int duk_get_type_mask( - ffi.Pointer ctx, - int idx, - ) { - return _duk_get_type_mask( - ctx, - idx, - ); + int duk_get_type_mask(ffi.Pointer ctx, int idx) { + return _duk_get_type_mask(ctx, idx); } late final _duk_get_type_maskPtr = _lookup< - ffi.NativeFunction< - duk_uint_t Function( - ffi.Pointer, duk_idx_t)>>('duk_get_type_mask'); - late final _duk_get_type_mask = _duk_get_type_maskPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_get_type_mask'); + late final _duk_get_type_mask = + _duk_get_type_maskPtr + .asFunction, int)>(); - int duk_check_type_mask( - ffi.Pointer ctx, - int idx, - int mask, - ) { - return _duk_check_type_mask( - ctx, - idx, - mask, - ); + int duk_check_type_mask(ffi.Pointer ctx, int idx, int mask) { + return _duk_check_type_mask(ctx, idx, mask); } late final _duk_check_type_maskPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function(ffi.Pointer, duk_idx_t, - duk_uint_t)>>('duk_check_type_mask'); - late final _duk_check_type_mask = _duk_check_type_maskPtr - .asFunction, int, int)>(); + ffi.NativeFunction< + duk_bool_t Function(ffi.Pointer, duk_idx_t, duk_uint_t) + > + >('duk_check_type_mask'); + late final _duk_check_type_mask = + _duk_check_type_maskPtr + .asFunction, int, int)>(); - int duk_is_undefined( - ffi.Pointer ctx, - int idx, - ) { - return _duk_is_undefined( - ctx, - idx, - ); + int duk_is_undefined(ffi.Pointer ctx, int idx) { + return _duk_is_undefined(ctx, idx); } late final _duk_is_undefinedPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function( - ffi.Pointer, duk_idx_t)>>('duk_is_undefined'); - late final _duk_is_undefined = _duk_is_undefinedPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_is_undefined'); + late final _duk_is_undefined = + _duk_is_undefinedPtr + .asFunction, int)>(); - int duk_is_null( - ffi.Pointer ctx, - int idx, - ) { - return _duk_is_null( - ctx, - idx, - ); + int duk_is_null(ffi.Pointer ctx, int idx) { + return _duk_is_null(ctx, idx); } late final _duk_is_nullPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function( - ffi.Pointer, duk_idx_t)>>('duk_is_null'); + ffi.NativeFunction, duk_idx_t)> + >('duk_is_null'); late final _duk_is_null = _duk_is_nullPtr.asFunction, int)>(); - int duk_is_boolean( - ffi.Pointer ctx, - int idx, - ) { - return _duk_is_boolean( - ctx, - idx, - ); + int duk_is_boolean(ffi.Pointer ctx, int idx) { + return _duk_is_boolean(ctx, idx); } late final _duk_is_booleanPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function( - ffi.Pointer, duk_idx_t)>>('duk_is_boolean'); - late final _duk_is_boolean = _duk_is_booleanPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_is_boolean'); + late final _duk_is_boolean = + _duk_is_booleanPtr + .asFunction, int)>(); - int duk_is_number( - ffi.Pointer ctx, - int idx, - ) { - return _duk_is_number( - ctx, - idx, - ); + int duk_is_number(ffi.Pointer ctx, int idx) { + return _duk_is_number(ctx, idx); } late final _duk_is_numberPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function( - ffi.Pointer, duk_idx_t)>>('duk_is_number'); - late final _duk_is_number = _duk_is_numberPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_is_number'); + late final _duk_is_number = + _duk_is_numberPtr + .asFunction, int)>(); - int duk_is_nan( - ffi.Pointer ctx, - int idx, - ) { - return _duk_is_nan( - ctx, - idx, - ); + int duk_is_nan(ffi.Pointer ctx, int idx) { + return _duk_is_nan(ctx, idx); } late final _duk_is_nanPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function( - ffi.Pointer, duk_idx_t)>>('duk_is_nan'); + ffi.NativeFunction, duk_idx_t)> + >('duk_is_nan'); late final _duk_is_nan = _duk_is_nanPtr.asFunction, int)>(); - int duk_is_string( - ffi.Pointer ctx, - int idx, - ) { - return _duk_is_string( - ctx, - idx, - ); + int duk_is_string(ffi.Pointer ctx, int idx) { + return _duk_is_string(ctx, idx); } late final _duk_is_stringPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function( - ffi.Pointer, duk_idx_t)>>('duk_is_string'); - late final _duk_is_string = _duk_is_stringPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_is_string'); + late final _duk_is_string = + _duk_is_stringPtr + .asFunction, int)>(); - int duk_is_object( - ffi.Pointer ctx, - int idx, - ) { - return _duk_is_object( - ctx, - idx, - ); + int duk_is_object(ffi.Pointer ctx, int idx) { + return _duk_is_object(ctx, idx); } late final _duk_is_objectPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function( - ffi.Pointer, duk_idx_t)>>('duk_is_object'); - late final _duk_is_object = _duk_is_objectPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_is_object'); + late final _duk_is_object = + _duk_is_objectPtr + .asFunction, int)>(); - int duk_is_buffer( - ffi.Pointer ctx, - int idx, - ) { - return _duk_is_buffer( - ctx, - idx, - ); + int duk_is_buffer(ffi.Pointer ctx, int idx) { + return _duk_is_buffer(ctx, idx); } late final _duk_is_bufferPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function( - ffi.Pointer, duk_idx_t)>>('duk_is_buffer'); - late final _duk_is_buffer = _duk_is_bufferPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_is_buffer'); + late final _duk_is_buffer = + _duk_is_bufferPtr + .asFunction, int)>(); - int duk_is_buffer_data( - ffi.Pointer ctx, - int idx, - ) { - return _duk_is_buffer_data( - ctx, - idx, - ); + int duk_is_buffer_data(ffi.Pointer ctx, int idx) { + return _duk_is_buffer_data(ctx, idx); } late final _duk_is_buffer_dataPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function( - ffi.Pointer, duk_idx_t)>>('duk_is_buffer_data'); - late final _duk_is_buffer_data = _duk_is_buffer_dataPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_is_buffer_data'); + late final _duk_is_buffer_data = + _duk_is_buffer_dataPtr + .asFunction, int)>(); - int duk_is_pointer( - ffi.Pointer ctx, - int idx, - ) { - return _duk_is_pointer( - ctx, - idx, - ); - } - - late final _duk_is_pointerPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function( - ffi.Pointer, duk_idx_t)>>('duk_is_pointer'); - late final _duk_is_pointer = _duk_is_pointerPtr - .asFunction, int)>(); - - int duk_is_lightfunc( - ffi.Pointer ctx, - int idx, - ) { - return _duk_is_lightfunc( - ctx, - idx, - ); + int duk_is_pointer(ffi.Pointer ctx, int idx) { + return _duk_is_pointer(ctx, idx); + } + + late final _duk_is_pointerPtr = _lookup< + ffi.NativeFunction, duk_idx_t)> + >('duk_is_pointer'); + late final _duk_is_pointer = + _duk_is_pointerPtr + .asFunction, int)>(); + + int duk_is_lightfunc(ffi.Pointer ctx, int idx) { + return _duk_is_lightfunc(ctx, idx); } late final _duk_is_lightfuncPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function( - ffi.Pointer, duk_idx_t)>>('duk_is_lightfunc'); - late final _duk_is_lightfunc = _duk_is_lightfuncPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_is_lightfunc'); + late final _duk_is_lightfunc = + _duk_is_lightfuncPtr + .asFunction, int)>(); - int duk_is_symbol( - ffi.Pointer ctx, - int idx, - ) { - return _duk_is_symbol( - ctx, - idx, - ); + int duk_is_symbol(ffi.Pointer ctx, int idx) { + return _duk_is_symbol(ctx, idx); } late final _duk_is_symbolPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function( - ffi.Pointer, duk_idx_t)>>('duk_is_symbol'); - late final _duk_is_symbol = _duk_is_symbolPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_is_symbol'); + late final _duk_is_symbol = + _duk_is_symbolPtr + .asFunction, int)>(); - int duk_is_array( - ffi.Pointer ctx, - int idx, - ) { - return _duk_is_array( - ctx, - idx, - ); + int duk_is_array(ffi.Pointer ctx, int idx) { + return _duk_is_array(ctx, idx); } late final _duk_is_arrayPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function( - ffi.Pointer, duk_idx_t)>>('duk_is_array'); - late final _duk_is_array = _duk_is_arrayPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_is_array'); + late final _duk_is_array = + _duk_is_arrayPtr + .asFunction, int)>(); - int duk_is_function( - ffi.Pointer ctx, - int idx, - ) { - return _duk_is_function( - ctx, - idx, - ); + int duk_is_function(ffi.Pointer ctx, int idx) { + return _duk_is_function(ctx, idx); } late final _duk_is_functionPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function( - ffi.Pointer, duk_idx_t)>>('duk_is_function'); - late final _duk_is_function = _duk_is_functionPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_is_function'); + late final _duk_is_function = + _duk_is_functionPtr + .asFunction, int)>(); - int duk_is_c_function( - ffi.Pointer ctx, - int idx, - ) { - return _duk_is_c_function( - ctx, - idx, - ); + int duk_is_c_function(ffi.Pointer ctx, int idx) { + return _duk_is_c_function(ctx, idx); } late final _duk_is_c_functionPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function( - ffi.Pointer, duk_idx_t)>>('duk_is_c_function'); - late final _duk_is_c_function = _duk_is_c_functionPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_is_c_function'); + late final _duk_is_c_function = + _duk_is_c_functionPtr + .asFunction, int)>(); - int duk_is_ecmascript_function( - ffi.Pointer ctx, - int idx, - ) { - return _duk_is_ecmascript_function( - ctx, - idx, - ); + int duk_is_ecmascript_function(ffi.Pointer ctx, int idx) { + return _duk_is_ecmascript_function(ctx, idx); } late final _duk_is_ecmascript_functionPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function(ffi.Pointer, - duk_idx_t)>>('duk_is_ecmascript_function'); - late final _duk_is_ecmascript_function = _duk_is_ecmascript_functionPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_is_ecmascript_function'); + late final _duk_is_ecmascript_function = + _duk_is_ecmascript_functionPtr + .asFunction, int)>(); - int duk_is_bound_function( - ffi.Pointer ctx, - int idx, - ) { - return _duk_is_bound_function( - ctx, - idx, - ); + int duk_is_bound_function(ffi.Pointer ctx, int idx) { + return _duk_is_bound_function(ctx, idx); } late final _duk_is_bound_functionPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function( - ffi.Pointer, duk_idx_t)>>('duk_is_bound_function'); - late final _duk_is_bound_function = _duk_is_bound_functionPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_is_bound_function'); + late final _duk_is_bound_function = + _duk_is_bound_functionPtr + .asFunction, int)>(); - int duk_is_thread( - ffi.Pointer ctx, - int idx, - ) { - return _duk_is_thread( - ctx, - idx, - ); + int duk_is_thread(ffi.Pointer ctx, int idx) { + return _duk_is_thread(ctx, idx); } late final _duk_is_threadPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function( - ffi.Pointer, duk_idx_t)>>('duk_is_thread'); - late final _duk_is_thread = _duk_is_threadPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_is_thread'); + late final _duk_is_thread = + _duk_is_threadPtr + .asFunction, int)>(); - int duk_is_constructable( - ffi.Pointer ctx, - int idx, - ) { - return _duk_is_constructable( - ctx, - idx, - ); + int duk_is_constructable(ffi.Pointer ctx, int idx) { + return _duk_is_constructable(ctx, idx); } late final _duk_is_constructablePtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function( - ffi.Pointer, duk_idx_t)>>('duk_is_constructable'); - late final _duk_is_constructable = _duk_is_constructablePtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_is_constructable'); + late final _duk_is_constructable = + _duk_is_constructablePtr + .asFunction, int)>(); - int duk_is_dynamic_buffer( - ffi.Pointer ctx, - int idx, - ) { - return _duk_is_dynamic_buffer( - ctx, - idx, - ); + int duk_is_dynamic_buffer(ffi.Pointer ctx, int idx) { + return _duk_is_dynamic_buffer(ctx, idx); } late final _duk_is_dynamic_bufferPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function( - ffi.Pointer, duk_idx_t)>>('duk_is_dynamic_buffer'); - late final _duk_is_dynamic_buffer = _duk_is_dynamic_bufferPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_is_dynamic_buffer'); + late final _duk_is_dynamic_buffer = + _duk_is_dynamic_bufferPtr + .asFunction, int)>(); - int duk_is_fixed_buffer( - ffi.Pointer ctx, - int idx, - ) { - return _duk_is_fixed_buffer( - ctx, - idx, - ); + int duk_is_fixed_buffer(ffi.Pointer ctx, int idx) { + return _duk_is_fixed_buffer(ctx, idx); } late final _duk_is_fixed_bufferPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function( - ffi.Pointer, duk_idx_t)>>('duk_is_fixed_buffer'); - late final _duk_is_fixed_buffer = _duk_is_fixed_bufferPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_is_fixed_buffer'); + late final _duk_is_fixed_buffer = + _duk_is_fixed_bufferPtr + .asFunction, int)>(); - int duk_is_external_buffer( - ffi.Pointer ctx, - int idx, - ) { - return _duk_is_external_buffer( - ctx, - idx, - ); + int duk_is_external_buffer(ffi.Pointer ctx, int idx) { + return _duk_is_external_buffer(ctx, idx); } late final _duk_is_external_bufferPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function( - ffi.Pointer, duk_idx_t)>>('duk_is_external_buffer'); - late final _duk_is_external_buffer = _duk_is_external_bufferPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_is_external_buffer'); + late final _duk_is_external_buffer = + _duk_is_external_bufferPtr + .asFunction, int)>(); - int duk_get_error_code( - ffi.Pointer ctx, - int idx, - ) { - return _duk_get_error_code( - ctx, - idx, - ); + int duk_get_error_code(ffi.Pointer ctx, int idx) { + return _duk_get_error_code(ctx, idx); } late final _duk_get_error_codePtr = _lookup< - ffi.NativeFunction< - duk_errcode_t Function( - ffi.Pointer, duk_idx_t)>>('duk_get_error_code'); - late final _duk_get_error_code = _duk_get_error_codePtr - .asFunction, int)>(); + ffi.NativeFunction< + duk_errcode_t Function(ffi.Pointer, duk_idx_t) + > + >('duk_get_error_code'); + late final _duk_get_error_code = + _duk_get_error_codePtr + .asFunction, int)>(); /// Get operations: no coercion, returns default value for invalid /// indices and invalid value types. /// /// duk_get_undefined() and duk_get_null() would be pointless and /// are not included. - int duk_get_boolean( - ffi.Pointer ctx, - int idx, - ) { - return _duk_get_boolean( - ctx, - idx, - ); + int duk_get_boolean(ffi.Pointer ctx, int idx) { + return _duk_get_boolean(ctx, idx); } late final _duk_get_booleanPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function( - ffi.Pointer, duk_idx_t)>>('duk_get_boolean'); - late final _duk_get_boolean = _duk_get_booleanPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_get_boolean'); + late final _duk_get_boolean = + _duk_get_booleanPtr + .asFunction, int)>(); - double duk_get_number( - ffi.Pointer ctx, - int idx, - ) { - return _duk_get_number( - ctx, - idx, - ); + double duk_get_number(ffi.Pointer ctx, int idx) { + return _duk_get_number(ctx, idx); } late final _duk_get_numberPtr = _lookup< - ffi.NativeFunction< - duk_double_t Function( - ffi.Pointer, duk_idx_t)>>('duk_get_number'); - late final _duk_get_number = _duk_get_numberPtr - .asFunction, int)>(); + ffi.NativeFunction< + duk_double_t Function(ffi.Pointer, duk_idx_t) + > + >('duk_get_number'); + late final _duk_get_number = + _duk_get_numberPtr + .asFunction, int)>(); - int duk_get_int( - ffi.Pointer ctx, - int idx, - ) { - return _duk_get_int( - ctx, - idx, - ); + int duk_get_int(ffi.Pointer ctx, int idx) { + return _duk_get_int(ctx, idx); } late final _duk_get_intPtr = _lookup< - ffi.NativeFunction< - duk_int_t Function( - ffi.Pointer, duk_idx_t)>>('duk_get_int'); + ffi.NativeFunction, duk_idx_t)> + >('duk_get_int'); late final _duk_get_int = _duk_get_intPtr.asFunction, int)>(); - int duk_get_uint( - ffi.Pointer ctx, - int idx, - ) { - return _duk_get_uint( - ctx, - idx, - ); + int duk_get_uint(ffi.Pointer ctx, int idx) { + return _duk_get_uint(ctx, idx); } late final _duk_get_uintPtr = _lookup< - ffi.NativeFunction< - duk_uint_t Function( - ffi.Pointer, duk_idx_t)>>('duk_get_uint'); - late final _duk_get_uint = _duk_get_uintPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_get_uint'); + late final _duk_get_uint = + _duk_get_uintPtr + .asFunction, int)>(); - ffi.Pointer duk_get_string( - ffi.Pointer ctx, - int idx, - ) { - return _duk_get_string( - ctx, - idx, - ); + ffi.Pointer duk_get_string(ffi.Pointer ctx, int idx) { + return _duk_get_string(ctx, idx); } late final _duk_get_stringPtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function( - ffi.Pointer, duk_idx_t)>>('duk_get_string'); - late final _duk_get_string = _duk_get_stringPtr.asFunction< - ffi.Pointer Function(ffi.Pointer, int)>(); + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, duk_idx_t) + > + >('duk_get_string'); + late final _duk_get_string = + _duk_get_stringPtr + .asFunction< + ffi.Pointer Function(ffi.Pointer, int) + >(); ffi.Pointer duk_get_lstring( ffi.Pointer ctx, int idx, ffi.Pointer out_len, ) { - return _duk_get_lstring( - ctx, - idx, - out_len, - ); + return _duk_get_lstring(ctx, idx, out_len); } late final _duk_get_lstringPtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function(ffi.Pointer, duk_idx_t, - ffi.Pointer)>>('duk_get_lstring'); - late final _duk_get_lstring = _duk_get_lstringPtr.asFunction< + ffi.NativeFunction< ffi.Pointer Function( - ffi.Pointer, int, ffi.Pointer)>(); + ffi.Pointer, + duk_idx_t, + ffi.Pointer, + ) + > + >('duk_get_lstring'); + late final _duk_get_lstring = + _duk_get_lstringPtr + .asFunction< + ffi.Pointer Function( + ffi.Pointer, + int, + ffi.Pointer, + ) + >(); ffi.Pointer duk_get_buffer( ffi.Pointer ctx, int idx, ffi.Pointer out_size, ) { - return _duk_get_buffer( - ctx, - idx, - out_size, - ); + return _duk_get_buffer(ctx, idx, out_size); } late final _duk_get_bufferPtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function(ffi.Pointer, duk_idx_t, - ffi.Pointer)>>('duk_get_buffer'); - late final _duk_get_buffer = _duk_get_bufferPtr.asFunction< + ffi.NativeFunction< ffi.Pointer Function( - ffi.Pointer, int, ffi.Pointer)>(); + ffi.Pointer, + duk_idx_t, + ffi.Pointer, + ) + > + >('duk_get_buffer'); + late final _duk_get_buffer = + _duk_get_bufferPtr + .asFunction< + ffi.Pointer Function( + ffi.Pointer, + int, + ffi.Pointer, + ) + >(); ffi.Pointer duk_get_buffer_data( ffi.Pointer ctx, int idx, ffi.Pointer out_size, ) { - return _duk_get_buffer_data( - ctx, - idx, - out_size, - ); + return _duk_get_buffer_data(ctx, idx, out_size); } late final _duk_get_buffer_dataPtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function(ffi.Pointer, duk_idx_t, - ffi.Pointer)>>('duk_get_buffer_data'); - late final _duk_get_buffer_data = _duk_get_buffer_dataPtr.asFunction< + ffi.NativeFunction< ffi.Pointer Function( - ffi.Pointer, int, ffi.Pointer)>(); + ffi.Pointer, + duk_idx_t, + ffi.Pointer, + ) + > + >('duk_get_buffer_data'); + late final _duk_get_buffer_data = + _duk_get_buffer_dataPtr + .asFunction< + ffi.Pointer Function( + ffi.Pointer, + int, + ffi.Pointer, + ) + >(); - ffi.Pointer duk_get_pointer( - ffi.Pointer ctx, - int idx, - ) { - return _duk_get_pointer( - ctx, - idx, - ); + ffi.Pointer duk_get_pointer(ffi.Pointer ctx, int idx) { + return _duk_get_pointer(ctx, idx); } late final _duk_get_pointerPtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function( - ffi.Pointer, duk_idx_t)>>('duk_get_pointer'); - late final _duk_get_pointer = _duk_get_pointerPtr.asFunction< - ffi.Pointer Function(ffi.Pointer, int)>(); + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, duk_idx_t) + > + >('duk_get_pointer'); + late final _duk_get_pointer = + _duk_get_pointerPtr + .asFunction< + ffi.Pointer Function(ffi.Pointer, int) + >(); - duk_c_function duk_get_c_function( - ffi.Pointer ctx, - int idx, - ) { - return _duk_get_c_function( - ctx, - idx, - ); + duk_c_function duk_get_c_function(ffi.Pointer ctx, int idx) { + return _duk_get_c_function(ctx, idx); } late final _duk_get_c_functionPtr = _lookup< - ffi.NativeFunction< - duk_c_function Function( - ffi.Pointer, duk_idx_t)>>('duk_get_c_function'); - late final _duk_get_c_function = _duk_get_c_functionPtr - .asFunction, int)>(); + ffi.NativeFunction< + duk_c_function Function(ffi.Pointer, duk_idx_t) + > + >('duk_get_c_function'); + late final _duk_get_c_function = + _duk_get_c_functionPtr + .asFunction, int)>(); ffi.Pointer duk_get_context( ffi.Pointer ctx, int idx, ) { - return _duk_get_context( - ctx, - idx, - ); + return _duk_get_context(ctx, idx); } late final _duk_get_contextPtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function( - ffi.Pointer, duk_idx_t)>>('duk_get_context'); - late final _duk_get_context = _duk_get_contextPtr.asFunction< - ffi.Pointer Function(ffi.Pointer, int)>(); + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, duk_idx_t) + > + >('duk_get_context'); + late final _duk_get_context = + _duk_get_contextPtr + .asFunction< + ffi.Pointer Function(ffi.Pointer, int) + >(); - ffi.Pointer duk_get_heapptr( - ffi.Pointer ctx, - int idx, - ) { - return _duk_get_heapptr( - ctx, - idx, - ); + ffi.Pointer duk_get_heapptr(ffi.Pointer ctx, int idx) { + return _duk_get_heapptr(ctx, idx); } late final _duk_get_heapptrPtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function( - ffi.Pointer, duk_idx_t)>>('duk_get_heapptr'); - late final _duk_get_heapptr = _duk_get_heapptrPtr.asFunction< - ffi.Pointer Function(ffi.Pointer, int)>(); + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, duk_idx_t) + > + >('duk_get_heapptr'); + late final _duk_get_heapptr = + _duk_get_heapptrPtr + .asFunction< + ffi.Pointer Function(ffi.Pointer, int) + >(); /// Get-with-explicit default operations: like get operations but with an /// explicit default value. @@ -2125,96 +1849,95 @@ class DuktapeBindings { int idx, int def_value, ) { - return _duk_get_boolean_default( - ctx, - idx, - def_value, - ); + return _duk_get_boolean_default(ctx, idx, def_value); } late final _duk_get_boolean_defaultPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function(ffi.Pointer, duk_idx_t, - duk_bool_t)>>('duk_get_boolean_default'); - late final _duk_get_boolean_default = _duk_get_boolean_defaultPtr - .asFunction, int, int)>(); + ffi.NativeFunction< + duk_bool_t Function(ffi.Pointer, duk_idx_t, duk_bool_t) + > + >('duk_get_boolean_default'); + late final _duk_get_boolean_default = + _duk_get_boolean_defaultPtr + .asFunction, int, int)>(); double duk_get_number_default( ffi.Pointer ctx, int idx, double def_value, ) { - return _duk_get_number_default( - ctx, - idx, - def_value, - ); + return _duk_get_number_default(ctx, idx, def_value); } late final _duk_get_number_defaultPtr = _lookup< - ffi.NativeFunction< - duk_double_t Function(ffi.Pointer, duk_idx_t, - duk_double_t)>>('duk_get_number_default'); - late final _duk_get_number_default = _duk_get_number_defaultPtr - .asFunction, int, double)>(); + ffi.NativeFunction< + duk_double_t Function(ffi.Pointer, duk_idx_t, duk_double_t) + > + >('duk_get_number_default'); + late final _duk_get_number_default = + _duk_get_number_defaultPtr + .asFunction, int, double)>(); int duk_get_int_default( ffi.Pointer ctx, int idx, int def_value, ) { - return _duk_get_int_default( - ctx, - idx, - def_value, - ); + return _duk_get_int_default(ctx, idx, def_value); } late final _duk_get_int_defaultPtr = _lookup< - ffi.NativeFunction< - duk_int_t Function(ffi.Pointer, duk_idx_t, - duk_int_t)>>('duk_get_int_default'); - late final _duk_get_int_default = _duk_get_int_defaultPtr - .asFunction, int, int)>(); + ffi.NativeFunction< + duk_int_t Function(ffi.Pointer, duk_idx_t, duk_int_t) + > + >('duk_get_int_default'); + late final _duk_get_int_default = + _duk_get_int_defaultPtr + .asFunction, int, int)>(); int duk_get_uint_default( ffi.Pointer ctx, int idx, int def_value, ) { - return _duk_get_uint_default( - ctx, - idx, - def_value, - ); + return _duk_get_uint_default(ctx, idx, def_value); } late final _duk_get_uint_defaultPtr = _lookup< - ffi.NativeFunction< - duk_uint_t Function(ffi.Pointer, duk_idx_t, - duk_uint_t)>>('duk_get_uint_default'); - late final _duk_get_uint_default = _duk_get_uint_defaultPtr - .asFunction, int, int)>(); + ffi.NativeFunction< + duk_uint_t Function(ffi.Pointer, duk_idx_t, duk_uint_t) + > + >('duk_get_uint_default'); + late final _duk_get_uint_default = + _duk_get_uint_defaultPtr + .asFunction, int, int)>(); ffi.Pointer duk_get_string_default( ffi.Pointer ctx, int idx, ffi.Pointer def_value, ) { - return _duk_get_string_default( - ctx, - idx, - def_value, - ); + return _duk_get_string_default(ctx, idx, def_value); } late final _duk_get_string_defaultPtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function(ffi.Pointer, duk_idx_t, - ffi.Pointer)>>('duk_get_string_default'); - late final _duk_get_string_default = _duk_get_string_defaultPtr.asFunction< + ffi.NativeFunction< ffi.Pointer Function( - ffi.Pointer, int, ffi.Pointer)>(); + ffi.Pointer, + duk_idx_t, + ffi.Pointer, + ) + > + >('duk_get_string_default'); + late final _duk_get_string_default = + _duk_get_string_defaultPtr + .asFunction< + ffi.Pointer Function( + ffi.Pointer, + int, + ffi.Pointer, + ) + >(); ffi.Pointer duk_get_lstring_default( ffi.Pointer ctx, @@ -2223,26 +1946,31 @@ class DuktapeBindings { ffi.Pointer def_ptr, int def_len, ) { - return _duk_get_lstring_default( - ctx, - idx, - out_len, - def_ptr, - def_len, - ); + return _duk_get_lstring_default(ctx, idx, out_len, def_ptr, def_len); } late final _duk_get_lstring_defaultPtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function( + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + duk_idx_t, + ffi.Pointer, + ffi.Pointer, + duk_size_t, + ) + > + >('duk_get_lstring_default'); + late final _duk_get_lstring_default = + _duk_get_lstring_defaultPtr + .asFunction< + ffi.Pointer Function( ffi.Pointer, - duk_idx_t, + int, ffi.Pointer, ffi.Pointer, - duk_size_t)>>('duk_get_lstring_default'); - late final _duk_get_lstring_default = _duk_get_lstring_defaultPtr.asFunction< - ffi.Pointer Function(ffi.Pointer, int, - ffi.Pointer, ffi.Pointer, int)>(); + int, + ) + >(); ffi.Pointer duk_get_buffer_default( ffi.Pointer ctx, @@ -2251,26 +1979,31 @@ class DuktapeBindings { ffi.Pointer def_ptr, int def_len, ) { - return _duk_get_buffer_default( - ctx, - idx, - out_size, - def_ptr, - def_len, - ); + return _duk_get_buffer_default(ctx, idx, out_size, def_ptr, def_len); } late final _duk_get_buffer_defaultPtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function( + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + duk_idx_t, + ffi.Pointer, + ffi.Pointer, + duk_size_t, + ) + > + >('duk_get_buffer_default'); + late final _duk_get_buffer_default = + _duk_get_buffer_defaultPtr + .asFunction< + ffi.Pointer Function( ffi.Pointer, - duk_idx_t, + int, ffi.Pointer, ffi.Pointer, - duk_size_t)>>('duk_get_buffer_default'); - late final _duk_get_buffer_default = _duk_get_buffer_defaultPtr.asFunction< - ffi.Pointer Function(ffi.Pointer, int, - ffi.Pointer, ffi.Pointer, int)>(); + int, + ) + >(); ffi.Pointer duk_get_buffer_data_default( ffi.Pointer ctx, @@ -2279,207 +2012,225 @@ class DuktapeBindings { ffi.Pointer def_ptr, int def_len, ) { - return _duk_get_buffer_data_default( - ctx, - idx, - out_size, - def_ptr, - def_len, - ); + return _duk_get_buffer_data_default(ctx, idx, out_size, def_ptr, def_len); } late final _duk_get_buffer_data_defaultPtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function( + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + duk_idx_t, + ffi.Pointer, + ffi.Pointer, + duk_size_t, + ) + > + >('duk_get_buffer_data_default'); + late final _duk_get_buffer_data_default = + _duk_get_buffer_data_defaultPtr + .asFunction< + ffi.Pointer Function( ffi.Pointer, - duk_idx_t, + int, ffi.Pointer, ffi.Pointer, - duk_size_t)>>('duk_get_buffer_data_default'); - late final _duk_get_buffer_data_default = - _duk_get_buffer_data_defaultPtr.asFunction< - ffi.Pointer Function(ffi.Pointer, int, - ffi.Pointer, ffi.Pointer, int)>(); + int, + ) + >(); ffi.Pointer duk_get_pointer_default( ffi.Pointer ctx, int idx, ffi.Pointer def_value, ) { - return _duk_get_pointer_default( - ctx, - idx, - def_value, - ); + return _duk_get_pointer_default(ctx, idx, def_value); } late final _duk_get_pointer_defaultPtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function(ffi.Pointer, duk_idx_t, - ffi.Pointer)>>('duk_get_pointer_default'); - late final _duk_get_pointer_default = _duk_get_pointer_defaultPtr.asFunction< + ffi.NativeFunction< ffi.Pointer Function( - ffi.Pointer, int, ffi.Pointer)>(); + ffi.Pointer, + duk_idx_t, + ffi.Pointer, + ) + > + >('duk_get_pointer_default'); + late final _duk_get_pointer_default = + _duk_get_pointer_defaultPtr + .asFunction< + ffi.Pointer Function( + ffi.Pointer, + int, + ffi.Pointer, + ) + >(); duk_c_function duk_get_c_function_default( ffi.Pointer ctx, int idx, duk_c_function def_value, ) { - return _duk_get_c_function_default( - ctx, - idx, - def_value, - ); + return _duk_get_c_function_default(ctx, idx, def_value); } late final _duk_get_c_function_defaultPtr = _lookup< - ffi.NativeFunction< - duk_c_function Function(ffi.Pointer, duk_idx_t, - duk_c_function)>>('duk_get_c_function_default'); + ffi.NativeFunction< + duk_c_function Function( + ffi.Pointer, + duk_idx_t, + duk_c_function, + ) + > + >('duk_get_c_function_default'); late final _duk_get_c_function_default = - _duk_get_c_function_defaultPtr.asFunction< - duk_c_function Function( - ffi.Pointer, int, duk_c_function)>(); + _duk_get_c_function_defaultPtr + .asFunction< + duk_c_function Function( + ffi.Pointer, + int, + duk_c_function, + ) + >(); ffi.Pointer duk_get_context_default( ffi.Pointer ctx, int idx, ffi.Pointer def_value, ) { - return _duk_get_context_default( - ctx, - idx, - def_value, - ); + return _duk_get_context_default(ctx, idx, def_value); } late final _duk_get_context_defaultPtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function(ffi.Pointer, duk_idx_t, - ffi.Pointer)>>('duk_get_context_default'); - late final _duk_get_context_default = _duk_get_context_defaultPtr.asFunction< + ffi.NativeFunction< ffi.Pointer Function( - ffi.Pointer, int, ffi.Pointer)>(); + ffi.Pointer, + duk_idx_t, + ffi.Pointer, + ) + > + >('duk_get_context_default'); + late final _duk_get_context_default = + _duk_get_context_defaultPtr + .asFunction< + ffi.Pointer Function( + ffi.Pointer, + int, + ffi.Pointer, + ) + >(); ffi.Pointer duk_get_heapptr_default( ffi.Pointer ctx, int idx, ffi.Pointer def_value, ) { - return _duk_get_heapptr_default( - ctx, - idx, - def_value, - ); + return _duk_get_heapptr_default(ctx, idx, def_value); } late final _duk_get_heapptr_defaultPtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function(ffi.Pointer, duk_idx_t, - ffi.Pointer)>>('duk_get_heapptr_default'); - late final _duk_get_heapptr_default = _duk_get_heapptr_defaultPtr.asFunction< + ffi.NativeFunction< ffi.Pointer Function( - ffi.Pointer, int, ffi.Pointer)>(); + ffi.Pointer, + duk_idx_t, + ffi.Pointer, + ) + > + >('duk_get_heapptr_default'); + late final _duk_get_heapptr_default = + _duk_get_heapptr_defaultPtr + .asFunction< + ffi.Pointer Function( + ffi.Pointer, + int, + ffi.Pointer, + ) + >(); /// Opt operations: like require operations but with an explicit default value /// when value is undefined or index is invalid, null and non-matching types /// cause a TypeError. - int duk_opt_boolean( - ffi.Pointer ctx, - int idx, - int def_value, - ) { - return _duk_opt_boolean( - ctx, - idx, - def_value, - ); + int duk_opt_boolean(ffi.Pointer ctx, int idx, int def_value) { + return _duk_opt_boolean(ctx, idx, def_value); } late final _duk_opt_booleanPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function(ffi.Pointer, duk_idx_t, - duk_bool_t)>>('duk_opt_boolean'); - late final _duk_opt_boolean = _duk_opt_booleanPtr - .asFunction, int, int)>(); + ffi.NativeFunction< + duk_bool_t Function(ffi.Pointer, duk_idx_t, duk_bool_t) + > + >('duk_opt_boolean'); + late final _duk_opt_boolean = + _duk_opt_booleanPtr + .asFunction, int, int)>(); double duk_opt_number( ffi.Pointer ctx, int idx, double def_value, ) { - return _duk_opt_number( - ctx, - idx, - def_value, - ); + return _duk_opt_number(ctx, idx, def_value); } late final _duk_opt_numberPtr = _lookup< - ffi.NativeFunction< - duk_double_t Function(ffi.Pointer, duk_idx_t, - duk_double_t)>>('duk_opt_number'); - late final _duk_opt_number = _duk_opt_numberPtr - .asFunction, int, double)>(); + ffi.NativeFunction< + duk_double_t Function(ffi.Pointer, duk_idx_t, duk_double_t) + > + >('duk_opt_number'); + late final _duk_opt_number = + _duk_opt_numberPtr + .asFunction, int, double)>(); - int duk_opt_int( - ffi.Pointer ctx, - int idx, - int def_value, - ) { - return _duk_opt_int( - ctx, - idx, - def_value, - ); + int duk_opt_int(ffi.Pointer ctx, int idx, int def_value) { + return _duk_opt_int(ctx, idx, def_value); } late final _duk_opt_intPtr = _lookup< - ffi.NativeFunction< - duk_int_t Function( - ffi.Pointer, duk_idx_t, duk_int_t)>>('duk_opt_int'); - late final _duk_opt_int = _duk_opt_intPtr - .asFunction, int, int)>(); + ffi.NativeFunction< + duk_int_t Function(ffi.Pointer, duk_idx_t, duk_int_t) + > + >('duk_opt_int'); + late final _duk_opt_int = + _duk_opt_intPtr + .asFunction, int, int)>(); - int duk_opt_uint( - ffi.Pointer ctx, - int idx, - int def_value, - ) { - return _duk_opt_uint( - ctx, - idx, - def_value, - ); + int duk_opt_uint(ffi.Pointer ctx, int idx, int def_value) { + return _duk_opt_uint(ctx, idx, def_value); } late final _duk_opt_uintPtr = _lookup< - ffi.NativeFunction< - duk_uint_t Function(ffi.Pointer, duk_idx_t, - duk_uint_t)>>('duk_opt_uint'); - late final _duk_opt_uint = _duk_opt_uintPtr - .asFunction, int, int)>(); + ffi.NativeFunction< + duk_uint_t Function(ffi.Pointer, duk_idx_t, duk_uint_t) + > + >('duk_opt_uint'); + late final _duk_opt_uint = + _duk_opt_uintPtr + .asFunction, int, int)>(); ffi.Pointer duk_opt_string( ffi.Pointer ctx, int idx, ffi.Pointer def_ptr, ) { - return _duk_opt_string( - ctx, - idx, - def_ptr, - ); + return _duk_opt_string(ctx, idx, def_ptr); } late final _duk_opt_stringPtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function(ffi.Pointer, duk_idx_t, - ffi.Pointer)>>('duk_opt_string'); - late final _duk_opt_string = _duk_opt_stringPtr.asFunction< + ffi.NativeFunction< ffi.Pointer Function( - ffi.Pointer, int, ffi.Pointer)>(); + ffi.Pointer, + duk_idx_t, + ffi.Pointer, + ) + > + >('duk_opt_string'); + late final _duk_opt_string = + _duk_opt_stringPtr + .asFunction< + ffi.Pointer Function( + ffi.Pointer, + int, + ffi.Pointer, + ) + >(); ffi.Pointer duk_opt_lstring( ffi.Pointer ctx, @@ -2488,26 +2239,31 @@ class DuktapeBindings { ffi.Pointer def_ptr, int def_len, ) { - return _duk_opt_lstring( - ctx, - idx, - out_len, - def_ptr, - def_len, - ); + return _duk_opt_lstring(ctx, idx, out_len, def_ptr, def_len); } late final _duk_opt_lstringPtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function( + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + duk_idx_t, + ffi.Pointer, + ffi.Pointer, + duk_size_t, + ) + > + >('duk_opt_lstring'); + late final _duk_opt_lstring = + _duk_opt_lstringPtr + .asFunction< + ffi.Pointer Function( ffi.Pointer, - duk_idx_t, + int, ffi.Pointer, ffi.Pointer, - duk_size_t)>>('duk_opt_lstring'); - late final _duk_opt_lstring = _duk_opt_lstringPtr.asFunction< - ffi.Pointer Function(ffi.Pointer, int, - ffi.Pointer, ffi.Pointer, int)>(); + int, + ) + >(); ffi.Pointer duk_opt_buffer( ffi.Pointer ctx, @@ -2516,26 +2272,31 @@ class DuktapeBindings { ffi.Pointer def_ptr, int def_size, ) { - return _duk_opt_buffer( - ctx, - idx, - out_size, - def_ptr, - def_size, - ); + return _duk_opt_buffer(ctx, idx, out_size, def_ptr, def_size); } late final _duk_opt_bufferPtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function( + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + duk_idx_t, + ffi.Pointer, + ffi.Pointer, + duk_size_t, + ) + > + >('duk_opt_buffer'); + late final _duk_opt_buffer = + _duk_opt_bufferPtr + .asFunction< + ffi.Pointer Function( ffi.Pointer, - duk_idx_t, + int, ffi.Pointer, ffi.Pointer, - duk_size_t)>>('duk_opt_buffer'); - late final _duk_opt_buffer = _duk_opt_bufferPtr.asFunction< - ffi.Pointer Function(ffi.Pointer, int, - ffi.Pointer, ffi.Pointer, int)>(); + int, + ) + >(); ffi.Pointer duk_opt_buffer_data( ffi.Pointer ctx, @@ -2544,611 +2305,569 @@ class DuktapeBindings { ffi.Pointer def_ptr, int def_size, ) { - return _duk_opt_buffer_data( - ctx, - idx, - out_size, - def_ptr, - def_size, - ); + return _duk_opt_buffer_data(ctx, idx, out_size, def_ptr, def_size); } late final _duk_opt_buffer_dataPtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function( + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + duk_idx_t, + ffi.Pointer, + ffi.Pointer, + duk_size_t, + ) + > + >('duk_opt_buffer_data'); + late final _duk_opt_buffer_data = + _duk_opt_buffer_dataPtr + .asFunction< + ffi.Pointer Function( ffi.Pointer, - duk_idx_t, + int, ffi.Pointer, ffi.Pointer, - duk_size_t)>>('duk_opt_buffer_data'); - late final _duk_opt_buffer_data = _duk_opt_buffer_dataPtr.asFunction< - ffi.Pointer Function(ffi.Pointer, int, - ffi.Pointer, ffi.Pointer, int)>(); + int, + ) + >(); ffi.Pointer duk_opt_pointer( ffi.Pointer ctx, int idx, ffi.Pointer def_value, ) { - return _duk_opt_pointer( - ctx, - idx, - def_value, - ); + return _duk_opt_pointer(ctx, idx, def_value); } late final _duk_opt_pointerPtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function(ffi.Pointer, duk_idx_t, - ffi.Pointer)>>('duk_opt_pointer'); - late final _duk_opt_pointer = _duk_opt_pointerPtr.asFunction< + ffi.NativeFunction< ffi.Pointer Function( - ffi.Pointer, int, ffi.Pointer)>(); + ffi.Pointer, + duk_idx_t, + ffi.Pointer, + ) + > + >('duk_opt_pointer'); + late final _duk_opt_pointer = + _duk_opt_pointerPtr + .asFunction< + ffi.Pointer Function( + ffi.Pointer, + int, + ffi.Pointer, + ) + >(); duk_c_function duk_opt_c_function( ffi.Pointer ctx, int idx, duk_c_function def_value, ) { - return _duk_opt_c_function( - ctx, - idx, - def_value, - ); + return _duk_opt_c_function(ctx, idx, def_value); } late final _duk_opt_c_functionPtr = _lookup< - ffi.NativeFunction< - duk_c_function Function(ffi.Pointer, duk_idx_t, - duk_c_function)>>('duk_opt_c_function'); - late final _duk_opt_c_function = _duk_opt_c_functionPtr.asFunction< - duk_c_function Function(ffi.Pointer, int, duk_c_function)>(); + ffi.NativeFunction< + duk_c_function Function( + ffi.Pointer, + duk_idx_t, + duk_c_function, + ) + > + >('duk_opt_c_function'); + late final _duk_opt_c_function = + _duk_opt_c_functionPtr + .asFunction< + duk_c_function Function( + ffi.Pointer, + int, + duk_c_function, + ) + >(); ffi.Pointer duk_opt_context( ffi.Pointer ctx, int idx, ffi.Pointer def_value, ) { - return _duk_opt_context( - ctx, - idx, - def_value, - ); + return _duk_opt_context(ctx, idx, def_value); } late final _duk_opt_contextPtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function(ffi.Pointer, duk_idx_t, - ffi.Pointer)>>('duk_opt_context'); - late final _duk_opt_context = _duk_opt_contextPtr.asFunction< + ffi.NativeFunction< ffi.Pointer Function( - ffi.Pointer, int, ffi.Pointer)>(); + ffi.Pointer, + duk_idx_t, + ffi.Pointer, + ) + > + >('duk_opt_context'); + late final _duk_opt_context = + _duk_opt_contextPtr + .asFunction< + ffi.Pointer Function( + ffi.Pointer, + int, + ffi.Pointer, + ) + >(); ffi.Pointer duk_opt_heapptr( ffi.Pointer ctx, int idx, ffi.Pointer def_value, ) { - return _duk_opt_heapptr( - ctx, - idx, - def_value, - ); + return _duk_opt_heapptr(ctx, idx, def_value); } late final _duk_opt_heapptrPtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function(ffi.Pointer, duk_idx_t, - ffi.Pointer)>>('duk_opt_heapptr'); - late final _duk_opt_heapptr = _duk_opt_heapptrPtr.asFunction< + ffi.NativeFunction< ffi.Pointer Function( - ffi.Pointer, int, ffi.Pointer)>(); + ffi.Pointer, + duk_idx_t, + ffi.Pointer, + ) + > + >('duk_opt_heapptr'); + late final _duk_opt_heapptr = + _duk_opt_heapptrPtr + .asFunction< + ffi.Pointer Function( + ffi.Pointer, + int, + ffi.Pointer, + ) + >(); - void duk_require_undefined( - ffi.Pointer ctx, - int idx, - ) { - return _duk_require_undefined( - ctx, - idx, - ); + void duk_require_undefined(ffi.Pointer ctx, int idx) { + return _duk_require_undefined(ctx, idx); } late final _duk_require_undefinedPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function( - ffi.Pointer, duk_idx_t)>>('duk_require_undefined'); - late final _duk_require_undefined = _duk_require_undefinedPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_require_undefined'); + late final _duk_require_undefined = + _duk_require_undefinedPtr + .asFunction, int)>(); - void duk_require_null( - ffi.Pointer ctx, - int idx, - ) { - return _duk_require_null( - ctx, - idx, - ); + void duk_require_null(ffi.Pointer ctx, int idx) { + return _duk_require_null(ctx, idx); } late final _duk_require_nullPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function( - ffi.Pointer, duk_idx_t)>>('duk_require_null'); - late final _duk_require_null = _duk_require_nullPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_require_null'); + late final _duk_require_null = + _duk_require_nullPtr + .asFunction, int)>(); - int duk_require_boolean( - ffi.Pointer ctx, - int idx, - ) { - return _duk_require_boolean( - ctx, - idx, - ); + int duk_require_boolean(ffi.Pointer ctx, int idx) { + return _duk_require_boolean(ctx, idx); } late final _duk_require_booleanPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function( - ffi.Pointer, duk_idx_t)>>('duk_require_boolean'); - late final _duk_require_boolean = _duk_require_booleanPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_require_boolean'); + late final _duk_require_boolean = + _duk_require_booleanPtr + .asFunction, int)>(); - double duk_require_number( - ffi.Pointer ctx, - int idx, - ) { - return _duk_require_number( - ctx, - idx, - ); + double duk_require_number(ffi.Pointer ctx, int idx) { + return _duk_require_number(ctx, idx); } late final _duk_require_numberPtr = _lookup< - ffi.NativeFunction< - duk_double_t Function( - ffi.Pointer, duk_idx_t)>>('duk_require_number'); - late final _duk_require_number = _duk_require_numberPtr - .asFunction, int)>(); + ffi.NativeFunction< + duk_double_t Function(ffi.Pointer, duk_idx_t) + > + >('duk_require_number'); + late final _duk_require_number = + _duk_require_numberPtr + .asFunction, int)>(); - int duk_require_int( - ffi.Pointer ctx, - int idx, - ) { - return _duk_require_int( - ctx, - idx, - ); + int duk_require_int(ffi.Pointer ctx, int idx) { + return _duk_require_int(ctx, idx); } late final _duk_require_intPtr = _lookup< - ffi.NativeFunction< - duk_int_t Function( - ffi.Pointer, duk_idx_t)>>('duk_require_int'); - late final _duk_require_int = _duk_require_intPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_require_int'); + late final _duk_require_int = + _duk_require_intPtr + .asFunction, int)>(); - int duk_require_uint( - ffi.Pointer ctx, - int idx, - ) { - return _duk_require_uint( - ctx, - idx, - ); + int duk_require_uint(ffi.Pointer ctx, int idx) { + return _duk_require_uint(ctx, idx); } late final _duk_require_uintPtr = _lookup< - ffi.NativeFunction< - duk_uint_t Function( - ffi.Pointer, duk_idx_t)>>('duk_require_uint'); - late final _duk_require_uint = _duk_require_uintPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_require_uint'); + late final _duk_require_uint = + _duk_require_uintPtr + .asFunction, int)>(); ffi.Pointer duk_require_string( ffi.Pointer ctx, int idx, ) { - return _duk_require_string( - ctx, - idx, - ); + return _duk_require_string(ctx, idx); } late final _duk_require_stringPtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function( - ffi.Pointer, duk_idx_t)>>('duk_require_string'); - late final _duk_require_string = _duk_require_stringPtr.asFunction< - ffi.Pointer Function(ffi.Pointer, int)>(); + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, duk_idx_t) + > + >('duk_require_string'); + late final _duk_require_string = + _duk_require_stringPtr + .asFunction< + ffi.Pointer Function(ffi.Pointer, int) + >(); ffi.Pointer duk_require_lstring( ffi.Pointer ctx, int idx, ffi.Pointer out_len, ) { - return _duk_require_lstring( - ctx, - idx, - out_len, - ); + return _duk_require_lstring(ctx, idx, out_len); } late final _duk_require_lstringPtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function(ffi.Pointer, duk_idx_t, - ffi.Pointer)>>('duk_require_lstring'); - late final _duk_require_lstring = _duk_require_lstringPtr.asFunction< + ffi.NativeFunction< ffi.Pointer Function( - ffi.Pointer, int, ffi.Pointer)>(); + ffi.Pointer, + duk_idx_t, + ffi.Pointer, + ) + > + >('duk_require_lstring'); + late final _duk_require_lstring = + _duk_require_lstringPtr + .asFunction< + ffi.Pointer Function( + ffi.Pointer, + int, + ffi.Pointer, + ) + >(); - void duk_require_object( - ffi.Pointer ctx, - int idx, - ) { - return _duk_require_object( - ctx, - idx, - ); + void duk_require_object(ffi.Pointer ctx, int idx) { + return _duk_require_object(ctx, idx); } late final _duk_require_objectPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function( - ffi.Pointer, duk_idx_t)>>('duk_require_object'); - late final _duk_require_object = _duk_require_objectPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_require_object'); + late final _duk_require_object = + _duk_require_objectPtr + .asFunction, int)>(); ffi.Pointer duk_require_buffer( ffi.Pointer ctx, int idx, ffi.Pointer out_size, ) { - return _duk_require_buffer( - ctx, - idx, - out_size, - ); + return _duk_require_buffer(ctx, idx, out_size); } late final _duk_require_bufferPtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function(ffi.Pointer, duk_idx_t, - ffi.Pointer)>>('duk_require_buffer'); - late final _duk_require_buffer = _duk_require_bufferPtr.asFunction< + ffi.NativeFunction< ffi.Pointer Function( - ffi.Pointer, int, ffi.Pointer)>(); + ffi.Pointer, + duk_idx_t, + ffi.Pointer, + ) + > + >('duk_require_buffer'); + late final _duk_require_buffer = + _duk_require_bufferPtr + .asFunction< + ffi.Pointer Function( + ffi.Pointer, + int, + ffi.Pointer, + ) + >(); ffi.Pointer duk_require_buffer_data( ffi.Pointer ctx, int idx, ffi.Pointer out_size, ) { - return _duk_require_buffer_data( - ctx, - idx, - out_size, - ); + return _duk_require_buffer_data(ctx, idx, out_size); } late final _duk_require_buffer_dataPtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function(ffi.Pointer, duk_idx_t, - ffi.Pointer)>>('duk_require_buffer_data'); - late final _duk_require_buffer_data = _duk_require_buffer_dataPtr.asFunction< + ffi.NativeFunction< ffi.Pointer Function( - ffi.Pointer, int, ffi.Pointer)>(); + ffi.Pointer, + duk_idx_t, + ffi.Pointer, + ) + > + >('duk_require_buffer_data'); + late final _duk_require_buffer_data = + _duk_require_buffer_dataPtr + .asFunction< + ffi.Pointer Function( + ffi.Pointer, + int, + ffi.Pointer, + ) + >(); ffi.Pointer duk_require_pointer( ffi.Pointer ctx, int idx, - ) { - return _duk_require_pointer( - ctx, - idx, - ); + ) { + return _duk_require_pointer(ctx, idx); } late final _duk_require_pointerPtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function( - ffi.Pointer, duk_idx_t)>>('duk_require_pointer'); - late final _duk_require_pointer = _duk_require_pointerPtr.asFunction< - ffi.Pointer Function(ffi.Pointer, int)>(); + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, duk_idx_t) + > + >('duk_require_pointer'); + late final _duk_require_pointer = + _duk_require_pointerPtr + .asFunction< + ffi.Pointer Function(ffi.Pointer, int) + >(); - duk_c_function duk_require_c_function( - ffi.Pointer ctx, - int idx, - ) { - return _duk_require_c_function( - ctx, - idx, - ); + duk_c_function duk_require_c_function(ffi.Pointer ctx, int idx) { + return _duk_require_c_function(ctx, idx); } late final _duk_require_c_functionPtr = _lookup< - ffi.NativeFunction< - duk_c_function Function( - ffi.Pointer, duk_idx_t)>>('duk_require_c_function'); - late final _duk_require_c_function = _duk_require_c_functionPtr - .asFunction, int)>(); + ffi.NativeFunction< + duk_c_function Function(ffi.Pointer, duk_idx_t) + > + >('duk_require_c_function'); + late final _duk_require_c_function = + _duk_require_c_functionPtr + .asFunction, int)>(); ffi.Pointer duk_require_context( ffi.Pointer ctx, int idx, ) { - return _duk_require_context( - ctx, - idx, - ); + return _duk_require_context(ctx, idx); } late final _duk_require_contextPtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function( - ffi.Pointer, duk_idx_t)>>('duk_require_context'); - late final _duk_require_context = _duk_require_contextPtr.asFunction< - ffi.Pointer Function(ffi.Pointer, int)>(); + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, duk_idx_t) + > + >('duk_require_context'); + late final _duk_require_context = + _duk_require_contextPtr + .asFunction< + ffi.Pointer Function(ffi.Pointer, int) + >(); - void duk_require_function( - ffi.Pointer ctx, - int idx, - ) { - return _duk_require_function( - ctx, - idx, - ); + void duk_require_function(ffi.Pointer ctx, int idx) { + return _duk_require_function(ctx, idx); } late final _duk_require_functionPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function( - ffi.Pointer, duk_idx_t)>>('duk_require_function'); - late final _duk_require_function = _duk_require_functionPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_require_function'); + late final _duk_require_function = + _duk_require_functionPtr + .asFunction, int)>(); - void duk_require_constructor_call( - ffi.Pointer ctx, - ) { - return _duk_require_constructor_call( - ctx, - ); + void duk_require_constructor_call(ffi.Pointer ctx) { + return _duk_require_constructor_call(ctx); } late final _duk_require_constructor_callPtr = _lookup)>>( - 'duk_require_constructor_call'); - late final _duk_require_constructor_call = _duk_require_constructor_callPtr - .asFunction)>(); + 'duk_require_constructor_call', + ); + late final _duk_require_constructor_call = + _duk_require_constructor_callPtr + .asFunction)>(); - void duk_require_constructable( - ffi.Pointer ctx, - int idx, - ) { - return _duk_require_constructable( - ctx, - idx, - ); + void duk_require_constructable(ffi.Pointer ctx, int idx) { + return _duk_require_constructable(ctx, idx); } late final _duk_require_constructablePtr = _lookup< - ffi.NativeFunction< - ffi.Void Function(ffi.Pointer, - duk_idx_t)>>('duk_require_constructable'); - late final _duk_require_constructable = _duk_require_constructablePtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_require_constructable'); + late final _duk_require_constructable = + _duk_require_constructablePtr + .asFunction, int)>(); ffi.Pointer duk_require_heapptr( ffi.Pointer ctx, int idx, ) { - return _duk_require_heapptr( - ctx, - idx, - ); + return _duk_require_heapptr(ctx, idx); } late final _duk_require_heapptrPtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function( - ffi.Pointer, duk_idx_t)>>('duk_require_heapptr'); - late final _duk_require_heapptr = _duk_require_heapptrPtr.asFunction< - ffi.Pointer Function(ffi.Pointer, int)>(); + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, duk_idx_t) + > + >('duk_require_heapptr'); + late final _duk_require_heapptr = + _duk_require_heapptrPtr + .asFunction< + ffi.Pointer Function(ffi.Pointer, int) + >(); /// Coercion operations: in-place coercion, return coerced value where /// applicable. If index is invalid, throw error. Some coercions may /// throw an expected error (e.g. from a toString() or valueOf() call) /// or an internal error (e.g. from out of memory). - void duk_to_undefined( - ffi.Pointer ctx, - int idx, - ) { - return _duk_to_undefined( - ctx, - idx, - ); + void duk_to_undefined(ffi.Pointer ctx, int idx) { + return _duk_to_undefined(ctx, idx); } late final _duk_to_undefinedPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function( - ffi.Pointer, duk_idx_t)>>('duk_to_undefined'); - late final _duk_to_undefined = _duk_to_undefinedPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_to_undefined'); + late final _duk_to_undefined = + _duk_to_undefinedPtr + .asFunction, int)>(); - void duk_to_null( - ffi.Pointer ctx, - int idx, - ) { - return _duk_to_null( - ctx, - idx, - ); + void duk_to_null(ffi.Pointer ctx, int idx) { + return _duk_to_null(ctx, idx); } late final _duk_to_nullPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function( - ffi.Pointer, duk_idx_t)>>('duk_to_null'); - late final _duk_to_null = _duk_to_nullPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_to_null'); + late final _duk_to_null = + _duk_to_nullPtr + .asFunction, int)>(); - int duk_to_boolean( - ffi.Pointer ctx, - int idx, - ) { - return _duk_to_boolean( - ctx, - idx, - ); + int duk_to_boolean(ffi.Pointer ctx, int idx) { + return _duk_to_boolean(ctx, idx); } late final _duk_to_booleanPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function( - ffi.Pointer, duk_idx_t)>>('duk_to_boolean'); - late final _duk_to_boolean = _duk_to_booleanPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_to_boolean'); + late final _duk_to_boolean = + _duk_to_booleanPtr + .asFunction, int)>(); - double duk_to_number( - ffi.Pointer ctx, - int idx, - ) { - return _duk_to_number( - ctx, - idx, - ); + double duk_to_number(ffi.Pointer ctx, int idx) { + return _duk_to_number(ctx, idx); } late final _duk_to_numberPtr = _lookup< - ffi.NativeFunction< - duk_double_t Function( - ffi.Pointer, duk_idx_t)>>('duk_to_number'); - late final _duk_to_number = _duk_to_numberPtr - .asFunction, int)>(); + ffi.NativeFunction< + duk_double_t Function(ffi.Pointer, duk_idx_t) + > + >('duk_to_number'); + late final _duk_to_number = + _duk_to_numberPtr + .asFunction, int)>(); - int duk_to_int( - ffi.Pointer ctx, - int idx, - ) { - return _duk_to_int( - ctx, - idx, - ); + int duk_to_int(ffi.Pointer ctx, int idx) { + return _duk_to_int(ctx, idx); } late final _duk_to_intPtr = _lookup< - ffi.NativeFunction< - duk_int_t Function( - ffi.Pointer, duk_idx_t)>>('duk_to_int'); + ffi.NativeFunction, duk_idx_t)> + >('duk_to_int'); late final _duk_to_int = _duk_to_intPtr.asFunction, int)>(); - int duk_to_uint( - ffi.Pointer ctx, - int idx, - ) { - return _duk_to_uint( - ctx, - idx, - ); + int duk_to_uint(ffi.Pointer ctx, int idx) { + return _duk_to_uint(ctx, idx); } late final _duk_to_uintPtr = _lookup< - ffi.NativeFunction< - duk_uint_t Function( - ffi.Pointer, duk_idx_t)>>('duk_to_uint'); + ffi.NativeFunction, duk_idx_t)> + >('duk_to_uint'); late final _duk_to_uint = _duk_to_uintPtr.asFunction, int)>(); - int duk_to_int32( - ffi.Pointer ctx, - int idx, - ) { - return _duk_to_int32( - ctx, - idx, - ); + int duk_to_int32(ffi.Pointer ctx, int idx) { + return _duk_to_int32(ctx, idx); } late final _duk_to_int32Ptr = _lookup< - ffi.NativeFunction< - duk_int32_t Function( - ffi.Pointer, duk_idx_t)>>('duk_to_int32'); - late final _duk_to_int32 = _duk_to_int32Ptr - .asFunction, int)>(); + ffi.NativeFunction< + duk_int32_t Function(ffi.Pointer, duk_idx_t) + > + >('duk_to_int32'); + late final _duk_to_int32 = + _duk_to_int32Ptr + .asFunction, int)>(); - int duk_to_uint32( - ffi.Pointer ctx, - int idx, - ) { - return _duk_to_uint32( - ctx, - idx, - ); + int duk_to_uint32(ffi.Pointer ctx, int idx) { + return _duk_to_uint32(ctx, idx); } late final _duk_to_uint32Ptr = _lookup< - ffi.NativeFunction< - duk_uint32_t Function( - ffi.Pointer, duk_idx_t)>>('duk_to_uint32'); - late final _duk_to_uint32 = _duk_to_uint32Ptr - .asFunction, int)>(); + ffi.NativeFunction< + duk_uint32_t Function(ffi.Pointer, duk_idx_t) + > + >('duk_to_uint32'); + late final _duk_to_uint32 = + _duk_to_uint32Ptr + .asFunction, int)>(); - int duk_to_uint16( - ffi.Pointer ctx, - int idx, - ) { - return _duk_to_uint16( - ctx, - idx, - ); + int duk_to_uint16(ffi.Pointer ctx, int idx) { + return _duk_to_uint16(ctx, idx); } late final _duk_to_uint16Ptr = _lookup< - ffi.NativeFunction< - duk_uint16_t Function( - ffi.Pointer, duk_idx_t)>>('duk_to_uint16'); - late final _duk_to_uint16 = _duk_to_uint16Ptr - .asFunction, int)>(); + ffi.NativeFunction< + duk_uint16_t Function(ffi.Pointer, duk_idx_t) + > + >('duk_to_uint16'); + late final _duk_to_uint16 = + _duk_to_uint16Ptr + .asFunction, int)>(); - ffi.Pointer duk_to_string( - ffi.Pointer ctx, - int idx, - ) { - return _duk_to_string( - ctx, - idx, - ); + ffi.Pointer duk_to_string(ffi.Pointer ctx, int idx) { + return _duk_to_string(ctx, idx); } late final _duk_to_stringPtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function( - ffi.Pointer, duk_idx_t)>>('duk_to_string'); - late final _duk_to_string = _duk_to_stringPtr.asFunction< - ffi.Pointer Function(ffi.Pointer, int)>(); + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, duk_idx_t) + > + >('duk_to_string'); + late final _duk_to_string = + _duk_to_stringPtr + .asFunction< + ffi.Pointer Function(ffi.Pointer, int) + >(); ffi.Pointer duk_to_lstring( ffi.Pointer ctx, int idx, ffi.Pointer out_len, ) { - return _duk_to_lstring( - ctx, - idx, - out_len, - ); + return _duk_to_lstring(ctx, idx, out_len); } late final _duk_to_lstringPtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function(ffi.Pointer, duk_idx_t, - ffi.Pointer)>>('duk_to_lstring'); - late final _duk_to_lstring = _duk_to_lstringPtr.asFunction< + ffi.NativeFunction< ffi.Pointer Function( - ffi.Pointer, int, ffi.Pointer)>(); + ffi.Pointer, + duk_idx_t, + ffi.Pointer, + ) + > + >('duk_to_lstring'); + late final _duk_to_lstring = + _duk_to_lstringPtr + .asFunction< + ffi.Pointer Function( + ffi.Pointer, + int, + ffi.Pointer, + ) + >(); ffi.Pointer duk_to_buffer_raw( ffi.Pointer ctx, @@ -3156,74 +2875,68 @@ class DuktapeBindings { ffi.Pointer out_size, int flags, ) { - return _duk_to_buffer_raw( - ctx, - idx, - out_size, - flags, - ); + return _duk_to_buffer_raw(ctx, idx, out_size, flags); } late final _duk_to_buffer_rawPtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function(ffi.Pointer, duk_idx_t, - ffi.Pointer, duk_uint_t)>>('duk_to_buffer_raw'); - late final _duk_to_buffer_raw = _duk_to_buffer_rawPtr.asFunction< + ffi.NativeFunction< ffi.Pointer Function( - ffi.Pointer, int, ffi.Pointer, int)>(); + ffi.Pointer, + duk_idx_t, + ffi.Pointer, + duk_uint_t, + ) + > + >('duk_to_buffer_raw'); + late final _duk_to_buffer_raw = + _duk_to_buffer_rawPtr + .asFunction< + ffi.Pointer Function( + ffi.Pointer, + int, + ffi.Pointer, + int, + ) + >(); - ffi.Pointer duk_to_pointer( - ffi.Pointer ctx, - int idx, - ) { - return _duk_to_pointer( - ctx, - idx, - ); + ffi.Pointer duk_to_pointer(ffi.Pointer ctx, int idx) { + return _duk_to_pointer(ctx, idx); } late final _duk_to_pointerPtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function( - ffi.Pointer, duk_idx_t)>>('duk_to_pointer'); - late final _duk_to_pointer = _duk_to_pointerPtr.asFunction< - ffi.Pointer Function(ffi.Pointer, int)>(); + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, duk_idx_t) + > + >('duk_to_pointer'); + late final _duk_to_pointer = + _duk_to_pointerPtr + .asFunction< + ffi.Pointer Function(ffi.Pointer, int) + >(); - void duk_to_object( - ffi.Pointer ctx, - int idx, - ) { - return _duk_to_object( - ctx, - idx, - ); + void duk_to_object(ffi.Pointer ctx, int idx) { + return _duk_to_object(ctx, idx); } late final _duk_to_objectPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function( - ffi.Pointer, duk_idx_t)>>('duk_to_object'); - late final _duk_to_object = _duk_to_objectPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_to_object'); + late final _duk_to_object = + _duk_to_objectPtr + .asFunction, int)>(); - void duk_to_primitive( - ffi.Pointer ctx, - int idx, - int hint, - ) { - return _duk_to_primitive( - ctx, - idx, - hint, - ); + void duk_to_primitive(ffi.Pointer ctx, int idx, int hint) { + return _duk_to_primitive(ctx, idx, hint); } late final _duk_to_primitivePtr = _lookup< - ffi.NativeFunction< - ffi.Void Function(ffi.Pointer, duk_idx_t, - duk_int_t)>>('duk_to_primitive'); - late final _duk_to_primitive = _duk_to_primitivePtr - .asFunction, int, int)>(); + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, duk_idx_t, duk_int_t) + > + >('duk_to_primitive'); + late final _duk_to_primitive = + _duk_to_primitivePtr + .asFunction, int, int)>(); /// safe variants of a few coercion operations ffi.Pointer duk_safe_to_lstring( @@ -3231,249 +2944,222 @@ class DuktapeBindings { int idx, ffi.Pointer out_len, ) { - return _duk_safe_to_lstring( - ctx, - idx, - out_len, - ); + return _duk_safe_to_lstring(ctx, idx, out_len); } late final _duk_safe_to_lstringPtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function(ffi.Pointer, duk_idx_t, - ffi.Pointer)>>('duk_safe_to_lstring'); - late final _duk_safe_to_lstring = _duk_safe_to_lstringPtr.asFunction< + ffi.NativeFunction< ffi.Pointer Function( - ffi.Pointer, int, ffi.Pointer)>(); + ffi.Pointer, + duk_idx_t, + ffi.Pointer, + ) + > + >('duk_safe_to_lstring'); + late final _duk_safe_to_lstring = + _duk_safe_to_lstringPtr + .asFunction< + ffi.Pointer Function( + ffi.Pointer, + int, + ffi.Pointer, + ) + >(); ffi.Pointer duk_to_stacktrace( ffi.Pointer ctx, int idx, ) { - return _duk_to_stacktrace( - ctx, - idx, - ); + return _duk_to_stacktrace(ctx, idx); } late final _duk_to_stacktracePtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function( - ffi.Pointer, duk_idx_t)>>('duk_to_stacktrace'); - late final _duk_to_stacktrace = _duk_to_stacktracePtr.asFunction< - ffi.Pointer Function(ffi.Pointer, int)>(); + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, duk_idx_t) + > + >('duk_to_stacktrace'); + late final _duk_to_stacktrace = + _duk_to_stacktracePtr + .asFunction< + ffi.Pointer Function(ffi.Pointer, int) + >(); ffi.Pointer duk_safe_to_stacktrace( ffi.Pointer ctx, int idx, ) { - return _duk_safe_to_stacktrace( - ctx, - idx, - ); + return _duk_safe_to_stacktrace(ctx, idx); } late final _duk_safe_to_stacktracePtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function( - ffi.Pointer, duk_idx_t)>>('duk_safe_to_stacktrace'); - late final _duk_safe_to_stacktrace = _duk_safe_to_stacktracePtr.asFunction< - ffi.Pointer Function(ffi.Pointer, int)>(); + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, duk_idx_t) + > + >('duk_safe_to_stacktrace'); + late final _duk_safe_to_stacktrace = + _duk_safe_to_stacktracePtr + .asFunction< + ffi.Pointer Function(ffi.Pointer, int) + >(); /// Value length - int duk_get_length( - ffi.Pointer ctx, - int idx, - ) { - return _duk_get_length( - ctx, - idx, - ); + int duk_get_length(ffi.Pointer ctx, int idx) { + return _duk_get_length(ctx, idx); } late final _duk_get_lengthPtr = _lookup< - ffi.NativeFunction< - duk_size_t Function( - ffi.Pointer, duk_idx_t)>>('duk_get_length'); - late final _duk_get_length = _duk_get_lengthPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_get_length'); + late final _duk_get_length = + _duk_get_lengthPtr + .asFunction, int)>(); - void duk_set_length( - ffi.Pointer ctx, - int idx, - int len, - ) { - return _duk_set_length( - ctx, - idx, - len, - ); + void duk_set_length(ffi.Pointer ctx, int idx, int len) { + return _duk_set_length(ctx, idx, len); } late final _duk_set_lengthPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function(ffi.Pointer, duk_idx_t, - duk_size_t)>>('duk_set_length'); - late final _duk_set_length = _duk_set_lengthPtr - .asFunction, int, int)>(); + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, duk_idx_t, duk_size_t) + > + >('duk_set_length'); + late final _duk_set_length = + _duk_set_lengthPtr + .asFunction, int, int)>(); /// Misc conversion ffi.Pointer duk_base64_encode( ffi.Pointer ctx, int idx, ) { - return _duk_base64_encode( - ctx, - idx, - ); + return _duk_base64_encode(ctx, idx); } late final _duk_base64_encodePtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function( - ffi.Pointer, duk_idx_t)>>('duk_base64_encode'); - late final _duk_base64_encode = _duk_base64_encodePtr.asFunction< - ffi.Pointer Function(ffi.Pointer, int)>(); + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, duk_idx_t) + > + >('duk_base64_encode'); + late final _duk_base64_encode = + _duk_base64_encodePtr + .asFunction< + ffi.Pointer Function(ffi.Pointer, int) + >(); - void duk_base64_decode( - ffi.Pointer ctx, - int idx, - ) { - return _duk_base64_decode( - ctx, - idx, - ); + void duk_base64_decode(ffi.Pointer ctx, int idx) { + return _duk_base64_decode(ctx, idx); } late final _duk_base64_decodePtr = _lookup< - ffi.NativeFunction< - ffi.Void Function( - ffi.Pointer, duk_idx_t)>>('duk_base64_decode'); - late final _duk_base64_decode = _duk_base64_decodePtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_base64_decode'); + late final _duk_base64_decode = + _duk_base64_decodePtr + .asFunction, int)>(); - ffi.Pointer duk_hex_encode( - ffi.Pointer ctx, - int idx, - ) { - return _duk_hex_encode( - ctx, - idx, - ); + ffi.Pointer duk_hex_encode(ffi.Pointer ctx, int idx) { + return _duk_hex_encode(ctx, idx); } late final _duk_hex_encodePtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function( - ffi.Pointer, duk_idx_t)>>('duk_hex_encode'); - late final _duk_hex_encode = _duk_hex_encodePtr.asFunction< - ffi.Pointer Function(ffi.Pointer, int)>(); + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, duk_idx_t) + > + >('duk_hex_encode'); + late final _duk_hex_encode = + _duk_hex_encodePtr + .asFunction< + ffi.Pointer Function(ffi.Pointer, int) + >(); - void duk_hex_decode( - ffi.Pointer ctx, - int idx, - ) { - return _duk_hex_decode( - ctx, - idx, - ); + void duk_hex_decode(ffi.Pointer ctx, int idx) { + return _duk_hex_decode(ctx, idx); } late final _duk_hex_decodePtr = _lookup< - ffi.NativeFunction< - ffi.Void Function( - ffi.Pointer, duk_idx_t)>>('duk_hex_decode'); - late final _duk_hex_decode = _duk_hex_decodePtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_hex_decode'); + late final _duk_hex_decode = + _duk_hex_decodePtr + .asFunction, int)>(); - ffi.Pointer duk_json_encode( - ffi.Pointer ctx, - int idx, - ) { - return _duk_json_encode( - ctx, - idx, - ); + ffi.Pointer duk_json_encode(ffi.Pointer ctx, int idx) { + return _duk_json_encode(ctx, idx); } late final _duk_json_encodePtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function( - ffi.Pointer, duk_idx_t)>>('duk_json_encode'); - late final _duk_json_encode = _duk_json_encodePtr.asFunction< - ffi.Pointer Function(ffi.Pointer, int)>(); + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, duk_idx_t) + > + >('duk_json_encode'); + late final _duk_json_encode = + _duk_json_encodePtr + .asFunction< + ffi.Pointer Function(ffi.Pointer, int) + >(); - void duk_json_decode( - ffi.Pointer ctx, - int idx, - ) { - return _duk_json_decode( - ctx, - idx, - ); + void duk_json_decode(ffi.Pointer ctx, int idx) { + return _duk_json_decode(ctx, idx); } late final _duk_json_decodePtr = _lookup< - ffi.NativeFunction< - ffi.Void Function( - ffi.Pointer, duk_idx_t)>>('duk_json_decode'); - late final _duk_json_decode = _duk_json_decodePtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_json_decode'); + late final _duk_json_decode = + _duk_json_decodePtr + .asFunction, int)>(); void duk_cbor_encode( ffi.Pointer ctx, int idx, int encode_flags, ) { - return _duk_cbor_encode( - ctx, - idx, - encode_flags, - ); + return _duk_cbor_encode(ctx, idx, encode_flags); } late final _duk_cbor_encodePtr = _lookup< - ffi.NativeFunction< - ffi.Void Function(ffi.Pointer, duk_idx_t, - duk_uint_t)>>('duk_cbor_encode'); - late final _duk_cbor_encode = _duk_cbor_encodePtr - .asFunction, int, int)>(); + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, duk_idx_t, duk_uint_t) + > + >('duk_cbor_encode'); + late final _duk_cbor_encode = + _duk_cbor_encodePtr + .asFunction, int, int)>(); void duk_cbor_decode( ffi.Pointer ctx, int idx, int decode_flags, ) { - return _duk_cbor_decode( - ctx, - idx, - decode_flags, - ); + return _duk_cbor_decode(ctx, idx, decode_flags); } late final _duk_cbor_decodePtr = _lookup< - ffi.NativeFunction< - ffi.Void Function(ffi.Pointer, duk_idx_t, - duk_uint_t)>>('duk_cbor_decode'); - late final _duk_cbor_decode = _duk_cbor_decodePtr - .asFunction, int, int)>(); + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, duk_idx_t, duk_uint_t) + > + >('duk_cbor_decode'); + late final _duk_cbor_decode = + _duk_cbor_decodePtr + .asFunction, int, int)>(); ffi.Pointer duk_buffer_to_string( ffi.Pointer ctx, int idx, ) { - return _duk_buffer_to_string( - ctx, - idx, - ); + return _duk_buffer_to_string(ctx, idx); } late final _duk_buffer_to_stringPtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function( - ffi.Pointer, duk_idx_t)>>('duk_buffer_to_string'); - late final _duk_buffer_to_string = _duk_buffer_to_stringPtr.asFunction< - ffi.Pointer Function(ffi.Pointer, int)>(); + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, duk_idx_t) + > + >('duk_buffer_to_string'); + late final _duk_buffer_to_string = + _duk_buffer_to_stringPtr + .asFunction< + ffi.Pointer Function(ffi.Pointer, int) + >(); /// Buffer ffi.Pointer duk_resize_buffer( @@ -3481,39 +3167,50 @@ class DuktapeBindings { int idx, int new_size, ) { - return _duk_resize_buffer( - ctx, - idx, - new_size, - ); + return _duk_resize_buffer(ctx, idx, new_size); } late final _duk_resize_bufferPtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function(ffi.Pointer, duk_idx_t, - duk_size_t)>>('duk_resize_buffer'); - late final _duk_resize_buffer = _duk_resize_bufferPtr.asFunction< - ffi.Pointer Function(ffi.Pointer, int, int)>(); + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + duk_idx_t, + duk_size_t, + ) + > + >('duk_resize_buffer'); + late final _duk_resize_buffer = + _duk_resize_bufferPtr + .asFunction< + ffi.Pointer Function(ffi.Pointer, int, int) + >(); ffi.Pointer duk_steal_buffer( ffi.Pointer ctx, int idx, ffi.Pointer out_size, ) { - return _duk_steal_buffer( - ctx, - idx, - out_size, - ); + return _duk_steal_buffer(ctx, idx, out_size); } late final _duk_steal_bufferPtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function(ffi.Pointer, duk_idx_t, - ffi.Pointer)>>('duk_steal_buffer'); - late final _duk_steal_buffer = _duk_steal_bufferPtr.asFunction< + ffi.NativeFunction< ffi.Pointer Function( - ffi.Pointer, int, ffi.Pointer)>(); + ffi.Pointer, + duk_idx_t, + ffi.Pointer, + ) + > + >('duk_steal_buffer'); + late final _duk_steal_buffer = + _duk_steal_bufferPtr + .asFunction< + ffi.Pointer Function( + ffi.Pointer, + int, + ffi.Pointer, + ) + >(); void duk_config_buffer( ffi.Pointer ctx, @@ -3521,21 +3218,29 @@ class DuktapeBindings { ffi.Pointer ptr, int len, ) { - return _duk_config_buffer( - ctx, - idx, - ptr, - len, - ); + return _duk_config_buffer(ctx, idx, ptr, len); } late final _duk_config_bufferPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function(ffi.Pointer, duk_idx_t, - ffi.Pointer, duk_size_t)>>('duk_config_buffer'); - late final _duk_config_buffer = _duk_config_bufferPtr.asFunction< - void Function( - ffi.Pointer, int, ffi.Pointer, int)>(); + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer, + duk_idx_t, + ffi.Pointer, + duk_size_t, + ) + > + >('duk_config_buffer'); + late final _duk_config_buffer = + _duk_config_bufferPtr + .asFunction< + void Function( + ffi.Pointer, + int, + ffi.Pointer, + int, + ) + >(); /// Property access /// @@ -3544,41 +3249,39 @@ class DuktapeBindings { /// The _index variant takes an array index as a property name (e.g. 123 is /// equivalent to the key "123"). The _heapptr variant takes a raw, borrowed /// heap pointer. - int duk_get_prop( - ffi.Pointer ctx, - int obj_idx, - ) { - return _duk_get_prop( - ctx, - obj_idx, - ); + int duk_get_prop(ffi.Pointer ctx, int obj_idx) { + return _duk_get_prop(ctx, obj_idx); } late final _duk_get_propPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function( - ffi.Pointer, duk_idx_t)>>('duk_get_prop'); - late final _duk_get_prop = _duk_get_propPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_get_prop'); + late final _duk_get_prop = + _duk_get_propPtr + .asFunction, int)>(); int duk_get_prop_string( ffi.Pointer ctx, int obj_idx, ffi.Pointer key, ) { - return _duk_get_prop_string( - ctx, - obj_idx, - key, - ); + return _duk_get_prop_string(ctx, obj_idx, key); } late final _duk_get_prop_stringPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function(ffi.Pointer, duk_idx_t, - ffi.Pointer)>>('duk_get_prop_string'); - late final _duk_get_prop_string = _duk_get_prop_stringPtr.asFunction< - int Function(ffi.Pointer, int, ffi.Pointer)>(); + ffi.NativeFunction< + duk_bool_t Function( + ffi.Pointer, + duk_idx_t, + ffi.Pointer, + ) + > + >('duk_get_prop_string'); + late final _duk_get_prop_string = + _duk_get_prop_stringPtr + .asFunction< + int Function(ffi.Pointer, int, ffi.Pointer) + >(); int duk_get_prop_lstring( ffi.Pointer ctx, @@ -3586,21 +3289,29 @@ class DuktapeBindings { ffi.Pointer key, int key_len, ) { - return _duk_get_prop_lstring( - ctx, - obj_idx, - key, - key_len, - ); + return _duk_get_prop_lstring(ctx, obj_idx, key, key_len); } late final _duk_get_prop_lstringPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function(ffi.Pointer, duk_idx_t, - ffi.Pointer, duk_size_t)>>('duk_get_prop_lstring'); - late final _duk_get_prop_lstring = _duk_get_prop_lstringPtr.asFunction< - int Function( - ffi.Pointer, int, ffi.Pointer, int)>(); + ffi.NativeFunction< + duk_bool_t Function( + ffi.Pointer, + duk_idx_t, + ffi.Pointer, + duk_size_t, + ) + > + >('duk_get_prop_lstring'); + late final _duk_get_prop_lstring = + _duk_get_prop_lstringPtr + .asFunction< + int Function( + ffi.Pointer, + int, + ffi.Pointer, + int, + ) + >(); int duk_get_prop_literal_raw( ffi.Pointer ctx, @@ -3608,96 +3319,103 @@ class DuktapeBindings { ffi.Pointer key, int key_len, ) { - return _duk_get_prop_literal_raw( - ctx, - obj_idx, - key, - key_len, - ); + return _duk_get_prop_literal_raw(ctx, obj_idx, key, key_len); } late final _duk_get_prop_literal_rawPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function(ffi.Pointer, duk_idx_t, - ffi.Pointer, duk_size_t)>>('duk_get_prop_literal_raw'); + ffi.NativeFunction< + duk_bool_t Function( + ffi.Pointer, + duk_idx_t, + ffi.Pointer, + duk_size_t, + ) + > + >('duk_get_prop_literal_raw'); late final _duk_get_prop_literal_raw = - _duk_get_prop_literal_rawPtr.asFunction< - int Function( - ffi.Pointer, int, ffi.Pointer, int)>(); + _duk_get_prop_literal_rawPtr + .asFunction< + int Function( + ffi.Pointer, + int, + ffi.Pointer, + int, + ) + >(); int duk_get_prop_index( ffi.Pointer ctx, int obj_idx, int arr_idx, ) { - return _duk_get_prop_index( - ctx, - obj_idx, - arr_idx, - ); + return _duk_get_prop_index(ctx, obj_idx, arr_idx); } late final _duk_get_prop_indexPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function(ffi.Pointer, duk_idx_t, - duk_uarridx_t)>>('duk_get_prop_index'); - late final _duk_get_prop_index = _duk_get_prop_indexPtr - .asFunction, int, int)>(); + ffi.NativeFunction< + duk_bool_t Function(ffi.Pointer, duk_idx_t, duk_uarridx_t) + > + >('duk_get_prop_index'); + late final _duk_get_prop_index = + _duk_get_prop_indexPtr + .asFunction, int, int)>(); int duk_get_prop_heapptr( ffi.Pointer ctx, int obj_idx, ffi.Pointer ptr, ) { - return _duk_get_prop_heapptr( - ctx, - obj_idx, - ptr, - ); + return _duk_get_prop_heapptr(ctx, obj_idx, ptr); } late final _duk_get_prop_heapptrPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function(ffi.Pointer, duk_idx_t, - ffi.Pointer)>>('duk_get_prop_heapptr'); - late final _duk_get_prop_heapptr = _duk_get_prop_heapptrPtr.asFunction< - int Function(ffi.Pointer, int, ffi.Pointer)>(); - - int duk_put_prop( - ffi.Pointer ctx, - int obj_idx, - ) { - return _duk_put_prop( - ctx, - obj_idx, - ); + ffi.NativeFunction< + duk_bool_t Function( + ffi.Pointer, + duk_idx_t, + ffi.Pointer, + ) + > + >('duk_get_prop_heapptr'); + late final _duk_get_prop_heapptr = + _duk_get_prop_heapptrPtr + .asFunction< + int Function(ffi.Pointer, int, ffi.Pointer) + >(); + + int duk_put_prop(ffi.Pointer ctx, int obj_idx) { + return _duk_put_prop(ctx, obj_idx); } late final _duk_put_propPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function( - ffi.Pointer, duk_idx_t)>>('duk_put_prop'); - late final _duk_put_prop = _duk_put_propPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_put_prop'); + late final _duk_put_prop = + _duk_put_propPtr + .asFunction, int)>(); int duk_put_prop_string( ffi.Pointer ctx, int obj_idx, ffi.Pointer key, ) { - return _duk_put_prop_string( - ctx, - obj_idx, - key, - ); + return _duk_put_prop_string(ctx, obj_idx, key); } late final _duk_put_prop_stringPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function(ffi.Pointer, duk_idx_t, - ffi.Pointer)>>('duk_put_prop_string'); - late final _duk_put_prop_string = _duk_put_prop_stringPtr.asFunction< - int Function(ffi.Pointer, int, ffi.Pointer)>(); + ffi.NativeFunction< + duk_bool_t Function( + ffi.Pointer, + duk_idx_t, + ffi.Pointer, + ) + > + >('duk_put_prop_string'); + late final _duk_put_prop_string = + _duk_put_prop_stringPtr + .asFunction< + int Function(ffi.Pointer, int, ffi.Pointer) + >(); int duk_put_prop_lstring( ffi.Pointer ctx, @@ -3705,21 +3423,29 @@ class DuktapeBindings { ffi.Pointer key, int key_len, ) { - return _duk_put_prop_lstring( - ctx, - obj_idx, - key, - key_len, - ); + return _duk_put_prop_lstring(ctx, obj_idx, key, key_len); } late final _duk_put_prop_lstringPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function(ffi.Pointer, duk_idx_t, - ffi.Pointer, duk_size_t)>>('duk_put_prop_lstring'); - late final _duk_put_prop_lstring = _duk_put_prop_lstringPtr.asFunction< - int Function( - ffi.Pointer, int, ffi.Pointer, int)>(); + ffi.NativeFunction< + duk_bool_t Function( + ffi.Pointer, + duk_idx_t, + ffi.Pointer, + duk_size_t, + ) + > + >('duk_put_prop_lstring'); + late final _duk_put_prop_lstring = + _duk_put_prop_lstringPtr + .asFunction< + int Function( + ffi.Pointer, + int, + ffi.Pointer, + int, + ) + >(); int duk_put_prop_literal_raw( ffi.Pointer ctx, @@ -3727,96 +3453,103 @@ class DuktapeBindings { ffi.Pointer key, int key_len, ) { - return _duk_put_prop_literal_raw( - ctx, - obj_idx, - key, - key_len, - ); + return _duk_put_prop_literal_raw(ctx, obj_idx, key, key_len); } late final _duk_put_prop_literal_rawPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function(ffi.Pointer, duk_idx_t, - ffi.Pointer, duk_size_t)>>('duk_put_prop_literal_raw'); + ffi.NativeFunction< + duk_bool_t Function( + ffi.Pointer, + duk_idx_t, + ffi.Pointer, + duk_size_t, + ) + > + >('duk_put_prop_literal_raw'); late final _duk_put_prop_literal_raw = - _duk_put_prop_literal_rawPtr.asFunction< - int Function( - ffi.Pointer, int, ffi.Pointer, int)>(); + _duk_put_prop_literal_rawPtr + .asFunction< + int Function( + ffi.Pointer, + int, + ffi.Pointer, + int, + ) + >(); int duk_put_prop_index( ffi.Pointer ctx, int obj_idx, int arr_idx, ) { - return _duk_put_prop_index( - ctx, - obj_idx, - arr_idx, - ); + return _duk_put_prop_index(ctx, obj_idx, arr_idx); } late final _duk_put_prop_indexPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function(ffi.Pointer, duk_idx_t, - duk_uarridx_t)>>('duk_put_prop_index'); - late final _duk_put_prop_index = _duk_put_prop_indexPtr - .asFunction, int, int)>(); + ffi.NativeFunction< + duk_bool_t Function(ffi.Pointer, duk_idx_t, duk_uarridx_t) + > + >('duk_put_prop_index'); + late final _duk_put_prop_index = + _duk_put_prop_indexPtr + .asFunction, int, int)>(); int duk_put_prop_heapptr( ffi.Pointer ctx, int obj_idx, ffi.Pointer ptr, ) { - return _duk_put_prop_heapptr( - ctx, - obj_idx, - ptr, - ); + return _duk_put_prop_heapptr(ctx, obj_idx, ptr); } late final _duk_put_prop_heapptrPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function(ffi.Pointer, duk_idx_t, - ffi.Pointer)>>('duk_put_prop_heapptr'); - late final _duk_put_prop_heapptr = _duk_put_prop_heapptrPtr.asFunction< - int Function(ffi.Pointer, int, ffi.Pointer)>(); - - int duk_del_prop( - ffi.Pointer ctx, - int obj_idx, - ) { - return _duk_del_prop( - ctx, - obj_idx, - ); + ffi.NativeFunction< + duk_bool_t Function( + ffi.Pointer, + duk_idx_t, + ffi.Pointer, + ) + > + >('duk_put_prop_heapptr'); + late final _duk_put_prop_heapptr = + _duk_put_prop_heapptrPtr + .asFunction< + int Function(ffi.Pointer, int, ffi.Pointer) + >(); + + int duk_del_prop(ffi.Pointer ctx, int obj_idx) { + return _duk_del_prop(ctx, obj_idx); } late final _duk_del_propPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function( - ffi.Pointer, duk_idx_t)>>('duk_del_prop'); - late final _duk_del_prop = _duk_del_propPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_del_prop'); + late final _duk_del_prop = + _duk_del_propPtr + .asFunction, int)>(); int duk_del_prop_string( ffi.Pointer ctx, int obj_idx, ffi.Pointer key, ) { - return _duk_del_prop_string( - ctx, - obj_idx, - key, - ); + return _duk_del_prop_string(ctx, obj_idx, key); } late final _duk_del_prop_stringPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function(ffi.Pointer, duk_idx_t, - ffi.Pointer)>>('duk_del_prop_string'); - late final _duk_del_prop_string = _duk_del_prop_stringPtr.asFunction< - int Function(ffi.Pointer, int, ffi.Pointer)>(); + ffi.NativeFunction< + duk_bool_t Function( + ffi.Pointer, + duk_idx_t, + ffi.Pointer, + ) + > + >('duk_del_prop_string'); + late final _duk_del_prop_string = + _duk_del_prop_stringPtr + .asFunction< + int Function(ffi.Pointer, int, ffi.Pointer) + >(); int duk_del_prop_lstring( ffi.Pointer ctx, @@ -3824,21 +3557,29 @@ class DuktapeBindings { ffi.Pointer key, int key_len, ) { - return _duk_del_prop_lstring( - ctx, - obj_idx, - key, - key_len, - ); + return _duk_del_prop_lstring(ctx, obj_idx, key, key_len); } late final _duk_del_prop_lstringPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function(ffi.Pointer, duk_idx_t, - ffi.Pointer, duk_size_t)>>('duk_del_prop_lstring'); - late final _duk_del_prop_lstring = _duk_del_prop_lstringPtr.asFunction< - int Function( - ffi.Pointer, int, ffi.Pointer, int)>(); + ffi.NativeFunction< + duk_bool_t Function( + ffi.Pointer, + duk_idx_t, + ffi.Pointer, + duk_size_t, + ) + > + >('duk_del_prop_lstring'); + late final _duk_del_prop_lstring = + _duk_del_prop_lstringPtr + .asFunction< + int Function( + ffi.Pointer, + int, + ffi.Pointer, + int, + ) + >(); int duk_del_prop_literal_raw( ffi.Pointer ctx, @@ -3846,96 +3587,103 @@ class DuktapeBindings { ffi.Pointer key, int key_len, ) { - return _duk_del_prop_literal_raw( - ctx, - obj_idx, - key, - key_len, - ); + return _duk_del_prop_literal_raw(ctx, obj_idx, key, key_len); } late final _duk_del_prop_literal_rawPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function(ffi.Pointer, duk_idx_t, - ffi.Pointer, duk_size_t)>>('duk_del_prop_literal_raw'); + ffi.NativeFunction< + duk_bool_t Function( + ffi.Pointer, + duk_idx_t, + ffi.Pointer, + duk_size_t, + ) + > + >('duk_del_prop_literal_raw'); late final _duk_del_prop_literal_raw = - _duk_del_prop_literal_rawPtr.asFunction< - int Function( - ffi.Pointer, int, ffi.Pointer, int)>(); + _duk_del_prop_literal_rawPtr + .asFunction< + int Function( + ffi.Pointer, + int, + ffi.Pointer, + int, + ) + >(); int duk_del_prop_index( ffi.Pointer ctx, int obj_idx, int arr_idx, ) { - return _duk_del_prop_index( - ctx, - obj_idx, - arr_idx, - ); + return _duk_del_prop_index(ctx, obj_idx, arr_idx); } late final _duk_del_prop_indexPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function(ffi.Pointer, duk_idx_t, - duk_uarridx_t)>>('duk_del_prop_index'); - late final _duk_del_prop_index = _duk_del_prop_indexPtr - .asFunction, int, int)>(); + ffi.NativeFunction< + duk_bool_t Function(ffi.Pointer, duk_idx_t, duk_uarridx_t) + > + >('duk_del_prop_index'); + late final _duk_del_prop_index = + _duk_del_prop_indexPtr + .asFunction, int, int)>(); int duk_del_prop_heapptr( ffi.Pointer ctx, int obj_idx, ffi.Pointer ptr, ) { - return _duk_del_prop_heapptr( - ctx, - obj_idx, - ptr, - ); + return _duk_del_prop_heapptr(ctx, obj_idx, ptr); } late final _duk_del_prop_heapptrPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function(ffi.Pointer, duk_idx_t, - ffi.Pointer)>>('duk_del_prop_heapptr'); - late final _duk_del_prop_heapptr = _duk_del_prop_heapptrPtr.asFunction< - int Function(ffi.Pointer, int, ffi.Pointer)>(); - - int duk_has_prop( - ffi.Pointer ctx, - int obj_idx, - ) { - return _duk_has_prop( - ctx, - obj_idx, - ); + ffi.NativeFunction< + duk_bool_t Function( + ffi.Pointer, + duk_idx_t, + ffi.Pointer, + ) + > + >('duk_del_prop_heapptr'); + late final _duk_del_prop_heapptr = + _duk_del_prop_heapptrPtr + .asFunction< + int Function(ffi.Pointer, int, ffi.Pointer) + >(); + + int duk_has_prop(ffi.Pointer ctx, int obj_idx) { + return _duk_has_prop(ctx, obj_idx); } late final _duk_has_propPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function( - ffi.Pointer, duk_idx_t)>>('duk_has_prop'); - late final _duk_has_prop = _duk_has_propPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_has_prop'); + late final _duk_has_prop = + _duk_has_propPtr + .asFunction, int)>(); int duk_has_prop_string( ffi.Pointer ctx, int obj_idx, ffi.Pointer key, ) { - return _duk_has_prop_string( - ctx, - obj_idx, - key, - ); + return _duk_has_prop_string(ctx, obj_idx, key); } late final _duk_has_prop_stringPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function(ffi.Pointer, duk_idx_t, - ffi.Pointer)>>('duk_has_prop_string'); - late final _duk_has_prop_string = _duk_has_prop_stringPtr.asFunction< - int Function(ffi.Pointer, int, ffi.Pointer)>(); + ffi.NativeFunction< + duk_bool_t Function( + ffi.Pointer, + duk_idx_t, + ffi.Pointer, + ) + > + >('duk_has_prop_string'); + late final _duk_has_prop_string = + _duk_has_prop_stringPtr + .asFunction< + int Function(ffi.Pointer, int, ffi.Pointer) + >(); int duk_has_prop_lstring( ffi.Pointer ctx, @@ -3943,21 +3691,29 @@ class DuktapeBindings { ffi.Pointer key, int key_len, ) { - return _duk_has_prop_lstring( - ctx, - obj_idx, - key, - key_len, - ); + return _duk_has_prop_lstring(ctx, obj_idx, key, key_len); } late final _duk_has_prop_lstringPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function(ffi.Pointer, duk_idx_t, - ffi.Pointer, duk_size_t)>>('duk_has_prop_lstring'); - late final _duk_has_prop_lstring = _duk_has_prop_lstringPtr.asFunction< - int Function( - ffi.Pointer, int, ffi.Pointer, int)>(); + ffi.NativeFunction< + duk_bool_t Function( + ffi.Pointer, + duk_idx_t, + ffi.Pointer, + duk_size_t, + ) + > + >('duk_has_prop_lstring'); + late final _duk_has_prop_lstring = + _duk_has_prop_lstringPtr + .asFunction< + int Function( + ffi.Pointer, + int, + ffi.Pointer, + int, + ) + >(); int duk_has_prop_literal_raw( ffi.Pointer ctx, @@ -3965,415 +3721,378 @@ class DuktapeBindings { ffi.Pointer key, int key_len, ) { - return _duk_has_prop_literal_raw( - ctx, - obj_idx, - key, - key_len, - ); + return _duk_has_prop_literal_raw(ctx, obj_idx, key, key_len); } late final _duk_has_prop_literal_rawPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function(ffi.Pointer, duk_idx_t, - ffi.Pointer, duk_size_t)>>('duk_has_prop_literal_raw'); + ffi.NativeFunction< + duk_bool_t Function( + ffi.Pointer, + duk_idx_t, + ffi.Pointer, + duk_size_t, + ) + > + >('duk_has_prop_literal_raw'); late final _duk_has_prop_literal_raw = - _duk_has_prop_literal_rawPtr.asFunction< - int Function( - ffi.Pointer, int, ffi.Pointer, int)>(); + _duk_has_prop_literal_rawPtr + .asFunction< + int Function( + ffi.Pointer, + int, + ffi.Pointer, + int, + ) + >(); int duk_has_prop_index( ffi.Pointer ctx, int obj_idx, int arr_idx, ) { - return _duk_has_prop_index( - ctx, - obj_idx, - arr_idx, - ); + return _duk_has_prop_index(ctx, obj_idx, arr_idx); } late final _duk_has_prop_indexPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function(ffi.Pointer, duk_idx_t, - duk_uarridx_t)>>('duk_has_prop_index'); - late final _duk_has_prop_index = _duk_has_prop_indexPtr - .asFunction, int, int)>(); + ffi.NativeFunction< + duk_bool_t Function(ffi.Pointer, duk_idx_t, duk_uarridx_t) + > + >('duk_has_prop_index'); + late final _duk_has_prop_index = + _duk_has_prop_indexPtr + .asFunction, int, int)>(); int duk_has_prop_heapptr( ffi.Pointer ctx, int obj_idx, ffi.Pointer ptr, ) { - return _duk_has_prop_heapptr( - ctx, - obj_idx, - ptr, - ); + return _duk_has_prop_heapptr(ctx, obj_idx, ptr); } late final _duk_has_prop_heapptrPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function(ffi.Pointer, duk_idx_t, - ffi.Pointer)>>('duk_has_prop_heapptr'); - late final _duk_has_prop_heapptr = _duk_has_prop_heapptrPtr.asFunction< - int Function(ffi.Pointer, int, ffi.Pointer)>(); - - void duk_get_prop_desc( - ffi.Pointer ctx, - int obj_idx, - int flags, - ) { - return _duk_get_prop_desc( - ctx, - obj_idx, - flags, - ); + ffi.NativeFunction< + duk_bool_t Function( + ffi.Pointer, + duk_idx_t, + ffi.Pointer, + ) + > + >('duk_has_prop_heapptr'); + late final _duk_has_prop_heapptr = + _duk_has_prop_heapptrPtr + .asFunction< + int Function(ffi.Pointer, int, ffi.Pointer) + >(); + + void duk_get_prop_desc(ffi.Pointer ctx, int obj_idx, int flags) { + return _duk_get_prop_desc(ctx, obj_idx, flags); } late final _duk_get_prop_descPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function(ffi.Pointer, duk_idx_t, - duk_uint_t)>>('duk_get_prop_desc'); - late final _duk_get_prop_desc = _duk_get_prop_descPtr - .asFunction, int, int)>(); - - void duk_def_prop( - ffi.Pointer ctx, - int obj_idx, - int flags, - ) { - return _duk_def_prop( - ctx, - obj_idx, - flags, - ); + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, duk_idx_t, duk_uint_t) + > + >('duk_get_prop_desc'); + late final _duk_get_prop_desc = + _duk_get_prop_descPtr + .asFunction, int, int)>(); + + void duk_def_prop(ffi.Pointer ctx, int obj_idx, int flags) { + return _duk_def_prop(ctx, obj_idx, flags); } late final _duk_def_propPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function(ffi.Pointer, duk_idx_t, - duk_uint_t)>>('duk_def_prop'); - late final _duk_def_prop = _duk_def_propPtr - .asFunction, int, int)>(); + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, duk_idx_t, duk_uint_t) + > + >('duk_def_prop'); + late final _duk_def_prop = + _duk_def_propPtr + .asFunction, int, int)>(); int duk_get_global_string( ffi.Pointer ctx, ffi.Pointer key, ) { - return _duk_get_global_string( - ctx, - key, - ); + return _duk_get_global_string(ctx, key); } late final _duk_get_global_stringPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function(ffi.Pointer, - ffi.Pointer)>>('duk_get_global_string'); - late final _duk_get_global_string = _duk_get_global_stringPtr.asFunction< - int Function(ffi.Pointer, ffi.Pointer)>(); + ffi.NativeFunction< + duk_bool_t Function(ffi.Pointer, ffi.Pointer) + > + >('duk_get_global_string'); + late final _duk_get_global_string = + _duk_get_global_stringPtr + .asFunction< + int Function(ffi.Pointer, ffi.Pointer) + >(); int duk_get_global_lstring( ffi.Pointer ctx, ffi.Pointer key, int key_len, ) { - return _duk_get_global_lstring( - ctx, - key, - key_len, - ); + return _duk_get_global_lstring(ctx, key, key_len); } late final _duk_get_global_lstringPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function(ffi.Pointer, ffi.Pointer, - duk_size_t)>>('duk_get_global_lstring'); - late final _duk_get_global_lstring = _duk_get_global_lstringPtr.asFunction< - int Function(ffi.Pointer, ffi.Pointer, int)>(); + ffi.NativeFunction< + duk_bool_t Function( + ffi.Pointer, + ffi.Pointer, + duk_size_t, + ) + > + >('duk_get_global_lstring'); + late final _duk_get_global_lstring = + _duk_get_global_lstringPtr + .asFunction< + int Function(ffi.Pointer, ffi.Pointer, int) + >(); int duk_get_global_literal_raw( ffi.Pointer ctx, ffi.Pointer key, int key_len, ) { - return _duk_get_global_literal_raw( - ctx, - key, - key_len, - ); + return _duk_get_global_literal_raw(ctx, key, key_len); } late final _duk_get_global_literal_rawPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function(ffi.Pointer, ffi.Pointer, - duk_size_t)>>('duk_get_global_literal_raw'); + ffi.NativeFunction< + duk_bool_t Function( + ffi.Pointer, + ffi.Pointer, + duk_size_t, + ) + > + >('duk_get_global_literal_raw'); late final _duk_get_global_literal_raw = - _duk_get_global_literal_rawPtr.asFunction< - int Function(ffi.Pointer, ffi.Pointer, int)>(); + _duk_get_global_literal_rawPtr + .asFunction< + int Function(ffi.Pointer, ffi.Pointer, int) + >(); int duk_get_global_heapptr( ffi.Pointer ctx, ffi.Pointer ptr, ) { - return _duk_get_global_heapptr( - ctx, - ptr, - ); + return _duk_get_global_heapptr(ctx, ptr); } late final _duk_get_global_heapptrPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function(ffi.Pointer, - ffi.Pointer)>>('duk_get_global_heapptr'); - late final _duk_get_global_heapptr = _duk_get_global_heapptrPtr.asFunction< - int Function(ffi.Pointer, ffi.Pointer)>(); + ffi.NativeFunction< + duk_bool_t Function(ffi.Pointer, ffi.Pointer) + > + >('duk_get_global_heapptr'); + late final _duk_get_global_heapptr = + _duk_get_global_heapptrPtr + .asFunction< + int Function(ffi.Pointer, ffi.Pointer) + >(); int duk_put_global_string( ffi.Pointer ctx, ffi.Pointer key, ) { - return _duk_put_global_string( - ctx, - key, - ); + return _duk_put_global_string(ctx, key); } late final _duk_put_global_stringPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function(ffi.Pointer, - ffi.Pointer)>>('duk_put_global_string'); - late final _duk_put_global_string = _duk_put_global_stringPtr.asFunction< - int Function(ffi.Pointer, ffi.Pointer)>(); + ffi.NativeFunction< + duk_bool_t Function(ffi.Pointer, ffi.Pointer) + > + >('duk_put_global_string'); + late final _duk_put_global_string = + _duk_put_global_stringPtr + .asFunction< + int Function(ffi.Pointer, ffi.Pointer) + >(); int duk_put_global_lstring( ffi.Pointer ctx, ffi.Pointer key, int key_len, ) { - return _duk_put_global_lstring( - ctx, - key, - key_len, - ); + return _duk_put_global_lstring(ctx, key, key_len); } late final _duk_put_global_lstringPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function(ffi.Pointer, ffi.Pointer, - duk_size_t)>>('duk_put_global_lstring'); - late final _duk_put_global_lstring = _duk_put_global_lstringPtr.asFunction< - int Function(ffi.Pointer, ffi.Pointer, int)>(); + ffi.NativeFunction< + duk_bool_t Function( + ffi.Pointer, + ffi.Pointer, + duk_size_t, + ) + > + >('duk_put_global_lstring'); + late final _duk_put_global_lstring = + _duk_put_global_lstringPtr + .asFunction< + int Function(ffi.Pointer, ffi.Pointer, int) + >(); int duk_put_global_literal_raw( ffi.Pointer ctx, ffi.Pointer key, int key_len, ) { - return _duk_put_global_literal_raw( - ctx, - key, - key_len, - ); + return _duk_put_global_literal_raw(ctx, key, key_len); } late final _duk_put_global_literal_rawPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function(ffi.Pointer, ffi.Pointer, - duk_size_t)>>('duk_put_global_literal_raw'); + ffi.NativeFunction< + duk_bool_t Function( + ffi.Pointer, + ffi.Pointer, + duk_size_t, + ) + > + >('duk_put_global_literal_raw'); late final _duk_put_global_literal_raw = - _duk_put_global_literal_rawPtr.asFunction< - int Function(ffi.Pointer, ffi.Pointer, int)>(); + _duk_put_global_literal_rawPtr + .asFunction< + int Function(ffi.Pointer, ffi.Pointer, int) + >(); int duk_put_global_heapptr( ffi.Pointer ctx, ffi.Pointer ptr, ) { - return _duk_put_global_heapptr( - ctx, - ptr, - ); + return _duk_put_global_heapptr(ctx, ptr); } late final _duk_put_global_heapptrPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function(ffi.Pointer, - ffi.Pointer)>>('duk_put_global_heapptr'); - late final _duk_put_global_heapptr = _duk_put_global_heapptrPtr.asFunction< - int Function(ffi.Pointer, ffi.Pointer)>(); + ffi.NativeFunction< + duk_bool_t Function(ffi.Pointer, ffi.Pointer) + > + >('duk_put_global_heapptr'); + late final _duk_put_global_heapptr = + _duk_put_global_heapptrPtr + .asFunction< + int Function(ffi.Pointer, ffi.Pointer) + >(); /// Inspection - void duk_inspect_value( - ffi.Pointer ctx, - int idx, - ) { - return _duk_inspect_value( - ctx, - idx, - ); + void duk_inspect_value(ffi.Pointer ctx, int idx) { + return _duk_inspect_value(ctx, idx); } late final _duk_inspect_valuePtr = _lookup< - ffi.NativeFunction< - ffi.Void Function( - ffi.Pointer, duk_idx_t)>>('duk_inspect_value'); - late final _duk_inspect_value = _duk_inspect_valuePtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_inspect_value'); + late final _duk_inspect_value = + _duk_inspect_valuePtr + .asFunction, int)>(); - void duk_inspect_callstack_entry( - ffi.Pointer ctx, - int level, - ) { - return _duk_inspect_callstack_entry( - ctx, - level, - ); + void duk_inspect_callstack_entry(ffi.Pointer ctx, int level) { + return _duk_inspect_callstack_entry(ctx, level); } late final _duk_inspect_callstack_entryPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function(ffi.Pointer, - duk_int_t)>>('duk_inspect_callstack_entry'); - late final _duk_inspect_callstack_entry = _duk_inspect_callstack_entryPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_int_t)> + >('duk_inspect_callstack_entry'); + late final _duk_inspect_callstack_entry = + _duk_inspect_callstack_entryPtr + .asFunction, int)>(); /// Object prototype - void duk_get_prototype( - ffi.Pointer ctx, - int idx, - ) { - return _duk_get_prototype( - ctx, - idx, - ); + void duk_get_prototype(ffi.Pointer ctx, int idx) { + return _duk_get_prototype(ctx, idx); } late final _duk_get_prototypePtr = _lookup< - ffi.NativeFunction< - ffi.Void Function( - ffi.Pointer, duk_idx_t)>>('duk_get_prototype'); - late final _duk_get_prototype = _duk_get_prototypePtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_get_prototype'); + late final _duk_get_prototype = + _duk_get_prototypePtr + .asFunction, int)>(); - void duk_set_prototype( - ffi.Pointer ctx, - int idx, - ) { - return _duk_set_prototype( - ctx, - idx, - ); + void duk_set_prototype(ffi.Pointer ctx, int idx) { + return _duk_set_prototype(ctx, idx); } late final _duk_set_prototypePtr = _lookup< - ffi.NativeFunction< - ffi.Void Function( - ffi.Pointer, duk_idx_t)>>('duk_set_prototype'); - late final _duk_set_prototype = _duk_set_prototypePtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_set_prototype'); + late final _duk_set_prototype = + _duk_set_prototypePtr + .asFunction, int)>(); /// Object finalizer - void duk_get_finalizer( - ffi.Pointer ctx, - int idx, - ) { - return _duk_get_finalizer( - ctx, - idx, - ); + void duk_get_finalizer(ffi.Pointer ctx, int idx) { + return _duk_get_finalizer(ctx, idx); } late final _duk_get_finalizerPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function( - ffi.Pointer, duk_idx_t)>>('duk_get_finalizer'); - late final _duk_get_finalizer = _duk_get_finalizerPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_get_finalizer'); + late final _duk_get_finalizer = + _duk_get_finalizerPtr + .asFunction, int)>(); - void duk_set_finalizer( - ffi.Pointer ctx, - int idx, - ) { - return _duk_set_finalizer( - ctx, - idx, - ); + void duk_set_finalizer(ffi.Pointer ctx, int idx) { + return _duk_set_finalizer(ctx, idx); } late final _duk_set_finalizerPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function( - ffi.Pointer, duk_idx_t)>>('duk_set_finalizer'); - late final _duk_set_finalizer = _duk_set_finalizerPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_set_finalizer'); + late final _duk_set_finalizer = + _duk_set_finalizerPtr + .asFunction, int)>(); /// Global object - void duk_set_global_object( - ffi.Pointer ctx, - ) { - return _duk_set_global_object( - ctx, - ); + void duk_set_global_object(ffi.Pointer ctx) { + return _duk_set_global_object(ctx); } late final _duk_set_global_objectPtr = _lookup)>>( - 'duk_set_global_object'); - late final _duk_set_global_object = _duk_set_global_objectPtr - .asFunction)>(); + 'duk_set_global_object', + ); + late final _duk_set_global_object = + _duk_set_global_objectPtr + .asFunction)>(); /// Duktape/C function magic value - int duk_get_magic( - ffi.Pointer ctx, - int idx, - ) { - return _duk_get_magic( - ctx, - idx, - ); + int duk_get_magic(ffi.Pointer ctx, int idx) { + return _duk_get_magic(ctx, idx); } late final _duk_get_magicPtr = _lookup< - ffi.NativeFunction< - duk_int_t Function( - ffi.Pointer, duk_idx_t)>>('duk_get_magic'); - late final _duk_get_magic = _duk_get_magicPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_get_magic'); + late final _duk_get_magic = + _duk_get_magicPtr + .asFunction, int)>(); - void duk_set_magic( - ffi.Pointer ctx, - int idx, - int magic, - ) { - return _duk_set_magic( - ctx, - idx, - magic, - ); + void duk_set_magic(ffi.Pointer ctx, int idx, int magic) { + return _duk_set_magic(ctx, idx, magic); } late final _duk_set_magicPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function(ffi.Pointer, duk_idx_t, - duk_int_t)>>('duk_set_magic'); - late final _duk_set_magic = _duk_set_magicPtr - .asFunction, int, int)>(); + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, duk_idx_t, duk_int_t) + > + >('duk_set_magic'); + late final _duk_set_magic = + _duk_set_magicPtr + .asFunction, int, int)>(); - int duk_get_current_magic( - ffi.Pointer ctx, - ) { - return _duk_get_current_magic( - ctx, - ); + int duk_get_current_magic(ffi.Pointer ctx) { + return _duk_get_current_magic(ctx); } late final _duk_get_current_magicPtr = _lookup)>>( - 'duk_get_current_magic'); - late final _duk_get_current_magic = _duk_get_current_magicPtr - .asFunction)>(); + 'duk_get_current_magic', + ); + late final _duk_get_current_magic = + _duk_get_current_magicPtr + .asFunction)>(); /// Module helpers: put multiple function or constant properties void duk_put_function_list( @@ -4381,161 +4100,131 @@ class DuktapeBindings { int obj_idx, ffi.Pointer funcs, ) { - return _duk_put_function_list( - ctx, - obj_idx, - funcs, - ); + return _duk_put_function_list(ctx, obj_idx, funcs); } late final _duk_put_function_listPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function(ffi.Pointer, duk_idx_t, - ffi.Pointer)>>('duk_put_function_list'); - late final _duk_put_function_list = _duk_put_function_listPtr.asFunction< - void Function(ffi.Pointer, int, - ffi.Pointer)>(); + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer, + duk_idx_t, + ffi.Pointer, + ) + > + >('duk_put_function_list'); + late final _duk_put_function_list = + _duk_put_function_listPtr + .asFunction< + void Function( + ffi.Pointer, + int, + ffi.Pointer, + ) + >(); void duk_put_number_list( ffi.Pointer ctx, int obj_idx, ffi.Pointer numbers, ) { - return _duk_put_number_list( - ctx, - obj_idx, - numbers, - ); + return _duk_put_number_list(ctx, obj_idx, numbers); } late final _duk_put_number_listPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function(ffi.Pointer, duk_idx_t, - ffi.Pointer)>>('duk_put_number_list'); - late final _duk_put_number_list = _duk_put_number_listPtr.asFunction< - void Function( - ffi.Pointer, int, ffi.Pointer)>(); + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer, + duk_idx_t, + ffi.Pointer, + ) + > + >('duk_put_number_list'); + late final _duk_put_number_list = + _duk_put_number_listPtr + .asFunction< + void Function( + ffi.Pointer, + int, + ffi.Pointer, + ) + >(); /// Object operations - void duk_compact( - ffi.Pointer ctx, - int obj_idx, - ) { - return _duk_compact( - ctx, - obj_idx, - ); + void duk_compact(ffi.Pointer ctx, int obj_idx) { + return _duk_compact(ctx, obj_idx); } late final _duk_compactPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function( - ffi.Pointer, duk_idx_t)>>('duk_compact'); - late final _duk_compact = _duk_compactPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_compact'); + late final _duk_compact = + _duk_compactPtr + .asFunction, int)>(); - void duk_enum( - ffi.Pointer ctx, - int obj_idx, - int enum_flags, - ) { - return _duk_enum( - ctx, - obj_idx, - enum_flags, - ); + void duk_enum(ffi.Pointer ctx, int obj_idx, int enum_flags) { + return _duk_enum(ctx, obj_idx, enum_flags); } late final _duk_enumPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function( - ffi.Pointer, duk_idx_t, duk_uint_t)>>('duk_enum'); - late final _duk_enum = _duk_enumPtr - .asFunction, int, int)>(); + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, duk_idx_t, duk_uint_t) + > + >('duk_enum'); + late final _duk_enum = + _duk_enumPtr + .asFunction, int, int)>(); - int duk_next( - ffi.Pointer ctx, - int enum_idx, - int get_value, - ) { - return _duk_next( - ctx, - enum_idx, - get_value, - ); + int duk_next(ffi.Pointer ctx, int enum_idx, int get_value) { + return _duk_next(ctx, enum_idx, get_value); } late final _duk_nextPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function( - ffi.Pointer, duk_idx_t, duk_bool_t)>>('duk_next'); - late final _duk_next = _duk_nextPtr - .asFunction, int, int)>(); + ffi.NativeFunction< + duk_bool_t Function(ffi.Pointer, duk_idx_t, duk_bool_t) + > + >('duk_next'); + late final _duk_next = + _duk_nextPtr + .asFunction, int, int)>(); - void duk_seal( - ffi.Pointer ctx, - int obj_idx, - ) { - return _duk_seal( - ctx, - obj_idx, - ); + void duk_seal(ffi.Pointer ctx, int obj_idx) { + return _duk_seal(ctx, obj_idx); } late final _duk_sealPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function(ffi.Pointer, duk_idx_t)>>('duk_seal'); + ffi.NativeFunction, duk_idx_t)> + >('duk_seal'); late final _duk_seal = _duk_sealPtr.asFunction, int)>(); - void duk_freeze( - ffi.Pointer ctx, - int obj_idx, - ) { - return _duk_freeze( - ctx, - obj_idx, - ); + void duk_freeze(ffi.Pointer ctx, int obj_idx) { + return _duk_freeze(ctx, obj_idx); } late final _duk_freezePtr = _lookup< - ffi.NativeFunction< - ffi.Void Function( - ffi.Pointer, duk_idx_t)>>('duk_freeze'); + ffi.NativeFunction, duk_idx_t)> + >('duk_freeze'); late final _duk_freeze = _duk_freezePtr.asFunction, int)>(); /// String manipulation - void duk_concat( - ffi.Pointer ctx, - int count, - ) { - return _duk_concat( - ctx, - count, - ); + void duk_concat(ffi.Pointer ctx, int count) { + return _duk_concat(ctx, count); } late final _duk_concatPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function( - ffi.Pointer, duk_idx_t)>>('duk_concat'); + ffi.NativeFunction, duk_idx_t)> + >('duk_concat'); late final _duk_concat = _duk_concatPtr.asFunction, int)>(); - void duk_join( - ffi.Pointer ctx, - int count, - ) { - return _duk_join( - ctx, - count, - ); + void duk_join(ffi.Pointer ctx, int count) { + return _duk_join(ctx, count); } late final _duk_joinPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function(ffi.Pointer, duk_idx_t)>>('duk_join'); + ffi.NativeFunction, duk_idx_t)> + >('duk_join'); late final _duk_join = _duk_joinPtr.asFunction, int)>(); @@ -4545,24 +4234,29 @@ class DuktapeBindings { duk_decode_char_function callback, ffi.Pointer udata, ) { - return _duk_decode_string( - ctx, - idx, - callback, - udata, - ); + return _duk_decode_string(ctx, idx, callback, udata); } late final _duk_decode_stringPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function( + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer, + duk_idx_t, + duk_decode_char_function, + ffi.Pointer, + ) + > + >('duk_decode_string'); + late final _duk_decode_string = + _duk_decode_stringPtr + .asFunction< + void Function( ffi.Pointer, - duk_idx_t, + int, duk_decode_char_function, - ffi.Pointer)>>('duk_decode_string'); - late final _duk_decode_string = _duk_decode_stringPtr.asFunction< - void Function(ffi.Pointer, int, duk_decode_char_function, - ffi.Pointer)>(); + ffi.Pointer, + ) + >(); void duk_map_string( ffi.Pointer ctx, @@ -4570,21 +4264,29 @@ class DuktapeBindings { duk_map_char_function callback, ffi.Pointer udata, ) { - return _duk_map_string( - ctx, - idx, - callback, - udata, - ); + return _duk_map_string(ctx, idx, callback, udata); } late final _duk_map_stringPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function(ffi.Pointer, duk_idx_t, - duk_map_char_function, ffi.Pointer)>>('duk_map_string'); - late final _duk_map_string = _duk_map_stringPtr.asFunction< - void Function(ffi.Pointer, int, duk_map_char_function, - ffi.Pointer)>(); + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer, + duk_idx_t, + duk_map_char_function, + ffi.Pointer, + ) + > + >('duk_map_string'); + late final _duk_map_string = + _duk_map_stringPtr + .asFunction< + void Function( + ffi.Pointer, + int, + duk_map_char_function, + ffi.Pointer, + ) + >(); void duk_substring( ffi.Pointer ctx, @@ -4592,283 +4294,196 @@ class DuktapeBindings { int start_char_offset, int end_char_offset, ) { - return _duk_substring( - ctx, - idx, - start_char_offset, - end_char_offset, - ); + return _duk_substring(ctx, idx, start_char_offset, end_char_offset); } late final _duk_substringPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function(ffi.Pointer, duk_idx_t, duk_size_t, - duk_size_t)>>('duk_substring'); - late final _duk_substring = _duk_substringPtr - .asFunction, int, int, int)>(); - - void duk_trim( - ffi.Pointer ctx, - int idx, - ) { - return _duk_trim( - ctx, - idx, - ); + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer, + duk_idx_t, + duk_size_t, + duk_size_t, + ) + > + >('duk_substring'); + late final _duk_substring = + _duk_substringPtr + .asFunction, int, int, int)>(); + + void duk_trim(ffi.Pointer ctx, int idx) { + return _duk_trim(ctx, idx); } late final _duk_trimPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function(ffi.Pointer, duk_idx_t)>>('duk_trim'); + ffi.NativeFunction, duk_idx_t)> + >('duk_trim'); late final _duk_trim = _duk_trimPtr.asFunction, int)>(); - int duk_char_code_at( - ffi.Pointer ctx, - int idx, - int char_offset, - ) { - return _duk_char_code_at( - ctx, - idx, - char_offset, - ); + int duk_char_code_at(ffi.Pointer ctx, int idx, int char_offset) { + return _duk_char_code_at(ctx, idx, char_offset); } late final _duk_char_code_atPtr = _lookup< - ffi.NativeFunction< - duk_codepoint_t Function(ffi.Pointer, duk_idx_t, - duk_size_t)>>('duk_char_code_at'); - late final _duk_char_code_at = _duk_char_code_atPtr - .asFunction, int, int)>(); + ffi.NativeFunction< + duk_codepoint_t Function(ffi.Pointer, duk_idx_t, duk_size_t) + > + >('duk_char_code_at'); + late final _duk_char_code_at = + _duk_char_code_atPtr + .asFunction, int, int)>(); /// ECMAScript operators - int duk_equals( - ffi.Pointer ctx, - int idx1, - int idx2, - ) { - return _duk_equals( - ctx, - idx1, - idx2, - ); + int duk_equals(ffi.Pointer ctx, int idx1, int idx2) { + return _duk_equals(ctx, idx1, idx2); } late final _duk_equalsPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function( - ffi.Pointer, duk_idx_t, duk_idx_t)>>('duk_equals'); - late final _duk_equals = _duk_equalsPtr - .asFunction, int, int)>(); + ffi.NativeFunction< + duk_bool_t Function(ffi.Pointer, duk_idx_t, duk_idx_t) + > + >('duk_equals'); + late final _duk_equals = + _duk_equalsPtr + .asFunction, int, int)>(); - int duk_strict_equals( - ffi.Pointer ctx, - int idx1, - int idx2, - ) { - return _duk_strict_equals( - ctx, - idx1, - idx2, - ); + int duk_strict_equals(ffi.Pointer ctx, int idx1, int idx2) { + return _duk_strict_equals(ctx, idx1, idx2); } late final _duk_strict_equalsPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function(ffi.Pointer, duk_idx_t, - duk_idx_t)>>('duk_strict_equals'); - late final _duk_strict_equals = _duk_strict_equalsPtr - .asFunction, int, int)>(); + ffi.NativeFunction< + duk_bool_t Function(ffi.Pointer, duk_idx_t, duk_idx_t) + > + >('duk_strict_equals'); + late final _duk_strict_equals = + _duk_strict_equalsPtr + .asFunction, int, int)>(); - int duk_samevalue( - ffi.Pointer ctx, - int idx1, - int idx2, - ) { - return _duk_samevalue( - ctx, - idx1, - idx2, - ); + int duk_samevalue(ffi.Pointer ctx, int idx1, int idx2) { + return _duk_samevalue(ctx, idx1, idx2); } late final _duk_samevaluePtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function(ffi.Pointer, duk_idx_t, - duk_idx_t)>>('duk_samevalue'); - late final _duk_samevalue = _duk_samevaluePtr - .asFunction, int, int)>(); + ffi.NativeFunction< + duk_bool_t Function(ffi.Pointer, duk_idx_t, duk_idx_t) + > + >('duk_samevalue'); + late final _duk_samevalue = + _duk_samevaluePtr + .asFunction, int, int)>(); - int duk_instanceof( - ffi.Pointer ctx, - int idx1, - int idx2, - ) { - return _duk_instanceof( - ctx, - idx1, - idx2, - ); + int duk_instanceof(ffi.Pointer ctx, int idx1, int idx2) { + return _duk_instanceof(ctx, idx1, idx2); } late final _duk_instanceofPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function(ffi.Pointer, duk_idx_t, - duk_idx_t)>>('duk_instanceof'); - late final _duk_instanceof = _duk_instanceofPtr - .asFunction, int, int)>(); + ffi.NativeFunction< + duk_bool_t Function(ffi.Pointer, duk_idx_t, duk_idx_t) + > + >('duk_instanceof'); + late final _duk_instanceof = + _duk_instanceofPtr + .asFunction, int, int)>(); /// Random - double duk_random( - ffi.Pointer ctx, - ) { - return _duk_random( - ctx, - ); + double duk_random(ffi.Pointer ctx) { + return _duk_random(ctx); } late final _duk_randomPtr = _lookup< - ffi.NativeFunction)>>( - 'duk_random'); + ffi.NativeFunction)> + >('duk_random'); late final _duk_random = _duk_randomPtr.asFunction)>(); /// Function (method) calls - void duk_call( - ffi.Pointer ctx, - int nargs, - ) { - return _duk_call( - ctx, - nargs, - ); + void duk_call(ffi.Pointer ctx, int nargs) { + return _duk_call(ctx, nargs); } late final _duk_callPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function(ffi.Pointer, duk_idx_t)>>('duk_call'); + ffi.NativeFunction, duk_idx_t)> + >('duk_call'); late final _duk_call = _duk_callPtr.asFunction, int)>(); - void duk_call_method( - ffi.Pointer ctx, - int nargs, - ) { - return _duk_call_method( - ctx, - nargs, - ); + void duk_call_method(ffi.Pointer ctx, int nargs) { + return _duk_call_method(ctx, nargs); } late final _duk_call_methodPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function( - ffi.Pointer, duk_idx_t)>>('duk_call_method'); - late final _duk_call_method = _duk_call_methodPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_call_method'); + late final _duk_call_method = + _duk_call_methodPtr + .asFunction, int)>(); - void duk_call_prop( - ffi.Pointer ctx, - int obj_idx, - int nargs, - ) { - return _duk_call_prop( - ctx, - obj_idx, - nargs, - ); + void duk_call_prop(ffi.Pointer ctx, int obj_idx, int nargs) { + return _duk_call_prop(ctx, obj_idx, nargs); } late final _duk_call_propPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function(ffi.Pointer, duk_idx_t, - duk_idx_t)>>('duk_call_prop'); - late final _duk_call_prop = _duk_call_propPtr - .asFunction, int, int)>(); + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, duk_idx_t, duk_idx_t) + > + >('duk_call_prop'); + late final _duk_call_prop = + _duk_call_propPtr + .asFunction, int, int)>(); - int duk_pcall( - ffi.Pointer ctx, - int nargs, - ) { - return _duk_pcall( - ctx, - nargs, - ); + int duk_pcall(ffi.Pointer ctx, int nargs) { + return _duk_pcall(ctx, nargs); } late final _duk_pcallPtr = _lookup< - ffi.NativeFunction< - duk_int_t Function( - ffi.Pointer, duk_idx_t)>>('duk_pcall'); + ffi.NativeFunction, duk_idx_t)> + >('duk_pcall'); late final _duk_pcall = _duk_pcallPtr.asFunction, int)>(); - int duk_pcall_method( - ffi.Pointer ctx, - int nargs, - ) { - return _duk_pcall_method( - ctx, - nargs, - ); + int duk_pcall_method(ffi.Pointer ctx, int nargs) { + return _duk_pcall_method(ctx, nargs); } late final _duk_pcall_methodPtr = _lookup< - ffi.NativeFunction< - duk_int_t Function( - ffi.Pointer, duk_idx_t)>>('duk_pcall_method'); - late final _duk_pcall_method = _duk_pcall_methodPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_pcall_method'); + late final _duk_pcall_method = + _duk_pcall_methodPtr + .asFunction, int)>(); - int duk_pcall_prop( - ffi.Pointer ctx, - int obj_idx, - int nargs, - ) { - return _duk_pcall_prop( - ctx, - obj_idx, - nargs, - ); + int duk_pcall_prop(ffi.Pointer ctx, int obj_idx, int nargs) { + return _duk_pcall_prop(ctx, obj_idx, nargs); } late final _duk_pcall_propPtr = _lookup< - ffi.NativeFunction< - duk_int_t Function(ffi.Pointer, duk_idx_t, - duk_idx_t)>>('duk_pcall_prop'); - late final _duk_pcall_prop = _duk_pcall_propPtr - .asFunction, int, int)>(); + ffi.NativeFunction< + duk_int_t Function(ffi.Pointer, duk_idx_t, duk_idx_t) + > + >('duk_pcall_prop'); + late final _duk_pcall_prop = + _duk_pcall_propPtr + .asFunction, int, int)>(); - void duk_new( - ffi.Pointer ctx, - int nargs, - ) { - return _duk_new( - ctx, - nargs, - ); + void duk_new(ffi.Pointer ctx, int nargs) { + return _duk_new(ctx, nargs); } late final _duk_newPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function(ffi.Pointer, duk_idx_t)>>('duk_new'); + ffi.NativeFunction, duk_idx_t)> + >('duk_new'); late final _duk_new = _duk_newPtr.asFunction, int)>(); - int duk_pnew( - ffi.Pointer ctx, - int nargs, - ) { - return _duk_pnew( - ctx, - nargs, - ); + int duk_pnew(ffi.Pointer ctx, int nargs) { + return _duk_pnew(ctx, nargs); } late final _duk_pnewPtr = _lookup< - ffi.NativeFunction< - duk_int_t Function(ffi.Pointer, duk_idx_t)>>('duk_pnew'); + ffi.NativeFunction, duk_idx_t)> + >('duk_pnew'); late final _duk_pnew = _duk_pnewPtr.asFunction, int)>(); @@ -4879,22 +4494,31 @@ class DuktapeBindings { int nargs, int nrets, ) { - return _duk_safe_call( - ctx, - func, - udata, - nargs, - nrets, - ); + return _duk_safe_call(ctx, func, udata, nargs, nrets); } late final _duk_safe_callPtr = _lookup< - ffi.NativeFunction< - duk_int_t Function(ffi.Pointer, duk_safe_call_function, - ffi.Pointer, duk_idx_t, duk_idx_t)>>('duk_safe_call'); - late final _duk_safe_call = _duk_safe_callPtr.asFunction< - int Function(ffi.Pointer, duk_safe_call_function, - ffi.Pointer, int, int)>(); + ffi.NativeFunction< + duk_int_t Function( + ffi.Pointer, + duk_safe_call_function, + ffi.Pointer, + duk_idx_t, + duk_idx_t, + ) + > + >('duk_safe_call'); + late final _duk_safe_call = + _duk_safe_callPtr + .asFunction< + int Function( + ffi.Pointer, + duk_safe_call_function, + ffi.Pointer, + int, + int, + ) + >(); /// Compilation and evaluation int duk_eval_raw( @@ -4903,21 +4527,29 @@ class DuktapeBindings { int src_length, int flags, ) { - return _duk_eval_raw( - ctx, - src_buffer, - src_length, - flags, - ); + return _duk_eval_raw(ctx, src_buffer, src_length, flags); } late final _duk_eval_rawPtr = _lookup< - ffi.NativeFunction< - duk_int_t Function(ffi.Pointer, ffi.Pointer, - duk_size_t, duk_uint_t)>>('duk_eval_raw'); - late final _duk_eval_raw = _duk_eval_rawPtr.asFunction< - int Function( - ffi.Pointer, ffi.Pointer, int, int)>(); + ffi.NativeFunction< + duk_int_t Function( + ffi.Pointer, + ffi.Pointer, + duk_size_t, + duk_uint_t, + ) + > + >('duk_eval_raw'); + late final _duk_eval_raw = + _duk_eval_rawPtr + .asFunction< + int Function( + ffi.Pointer, + ffi.Pointer, + int, + int, + ) + >(); int duk_compile_raw( ffi.Pointer ctx, @@ -4925,65 +4557,67 @@ class DuktapeBindings { int src_length, int flags, ) { - return _duk_compile_raw( - ctx, - src_buffer, - src_length, - flags, - ); + return _duk_compile_raw(ctx, src_buffer, src_length, flags); } late final _duk_compile_rawPtr = _lookup< - ffi.NativeFunction< - duk_int_t Function(ffi.Pointer, ffi.Pointer, - duk_size_t, duk_uint_t)>>('duk_compile_raw'); - late final _duk_compile_raw = _duk_compile_rawPtr.asFunction< - int Function( - ffi.Pointer, ffi.Pointer, int, int)>(); + ffi.NativeFunction< + duk_int_t Function( + ffi.Pointer, + ffi.Pointer, + duk_size_t, + duk_uint_t, + ) + > + >('duk_compile_raw'); + late final _duk_compile_raw = + _duk_compile_rawPtr + .asFunction< + int Function( + ffi.Pointer, + ffi.Pointer, + int, + int, + ) + >(); /// Bytecode load/dump - void duk_dump_function( - ffi.Pointer ctx, - ) { - return _duk_dump_function( - ctx, - ); + void duk_dump_function(ffi.Pointer ctx) { + return _duk_dump_function(ctx); } late final _duk_dump_functionPtr = _lookup)>>( - 'duk_dump_function'); - late final _duk_dump_function = _duk_dump_functionPtr - .asFunction)>(); + 'duk_dump_function', + ); + late final _duk_dump_function = + _duk_dump_functionPtr + .asFunction)>(); - void duk_load_function( - ffi.Pointer ctx, - ) { - return _duk_load_function( - ctx, - ); + void duk_load_function(ffi.Pointer ctx) { + return _duk_load_function(ctx); } late final _duk_load_functionPtr = _lookup)>>( - 'duk_load_function'); - late final _duk_load_function = _duk_load_functionPtr - .asFunction)>(); + 'duk_load_function', + ); + late final _duk_load_function = + _duk_load_functionPtr + .asFunction)>(); /// Debugging - void duk_push_context_dump( - ffi.Pointer ctx, - ) { - return _duk_push_context_dump( - ctx, - ); + void duk_push_context_dump(ffi.Pointer ctx) { + return _duk_push_context_dump(ctx); } late final _duk_push_context_dumpPtr = _lookup)>>( - 'duk_push_context_dump'); - late final _duk_push_context_dump = _duk_push_context_dumpPtr - .asFunction)>(); + 'duk_push_context_dump', + ); + late final _duk_push_context_dump = + _duk_push_context_dumpPtr + .asFunction)>(); /// Debugger (debug protocol) void duk_debugger_attach( @@ -5011,8 +4645,24 @@ class DuktapeBindings { } late final _duk_debugger_attachPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function( + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer, + duk_debug_read_function, + duk_debug_write_function, + duk_debug_peek_function, + duk_debug_read_flush_function, + duk_debug_write_flush_function, + duk_debug_request_function, + duk_debug_detached_function, + ffi.Pointer, + ) + > + >('duk_debugger_attach'); + late final _duk_debugger_attach = + _duk_debugger_attachPtr + .asFunction< + void Function( ffi.Pointer, duk_debug_read_function, duk_debug_write_function, @@ -5021,90 +4671,65 @@ class DuktapeBindings { duk_debug_write_flush_function, duk_debug_request_function, duk_debug_detached_function, - ffi.Pointer)>>('duk_debugger_attach'); - late final _duk_debugger_attach = _duk_debugger_attachPtr.asFunction< - void Function( - ffi.Pointer, - duk_debug_read_function, - duk_debug_write_function, - duk_debug_peek_function, - duk_debug_read_flush_function, - duk_debug_write_flush_function, - duk_debug_request_function, - duk_debug_detached_function, - ffi.Pointer)>(); - - void duk_debugger_detach( - ffi.Pointer ctx, - ) { - return _duk_debugger_detach( - ctx, - ); + ffi.Pointer, + ) + >(); + + void duk_debugger_detach(ffi.Pointer ctx) { + return _duk_debugger_detach(ctx); } late final _duk_debugger_detachPtr = _lookup)>>( - 'duk_debugger_detach'); - late final _duk_debugger_detach = _duk_debugger_detachPtr - .asFunction)>(); + 'duk_debugger_detach', + ); + late final _duk_debugger_detach = + _duk_debugger_detachPtr + .asFunction)>(); - void duk_debugger_cooperate( - ffi.Pointer ctx, - ) { - return _duk_debugger_cooperate( - ctx, - ); + void duk_debugger_cooperate(ffi.Pointer ctx) { + return _duk_debugger_cooperate(ctx); } late final _duk_debugger_cooperatePtr = _lookup)>>( - 'duk_debugger_cooperate'); - late final _duk_debugger_cooperate = _duk_debugger_cooperatePtr - .asFunction)>(); + 'duk_debugger_cooperate', + ); + late final _duk_debugger_cooperate = + _duk_debugger_cooperatePtr + .asFunction)>(); - int duk_debugger_notify( - ffi.Pointer ctx, - int nvalues, - ) { - return _duk_debugger_notify( - ctx, - nvalues, - ); + int duk_debugger_notify(ffi.Pointer ctx, int nvalues) { + return _duk_debugger_notify(ctx, nvalues); } late final _duk_debugger_notifyPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function( - ffi.Pointer, duk_idx_t)>>('duk_debugger_notify'); - late final _duk_debugger_notify = _duk_debugger_notifyPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_debugger_notify'); + late final _duk_debugger_notify = + _duk_debugger_notifyPtr + .asFunction, int)>(); - void duk_debugger_pause( - ffi.Pointer ctx, - ) { - return _duk_debugger_pause( - ctx, - ); + void duk_debugger_pause(ffi.Pointer ctx) { + return _duk_debugger_pause(ctx); } late final _duk_debugger_pausePtr = _lookup)>>( - 'duk_debugger_pause'); - late final _duk_debugger_pause = _duk_debugger_pausePtr - .asFunction)>(); + 'duk_debugger_pause', + ); + late final _duk_debugger_pause = + _duk_debugger_pausePtr + .asFunction)>(); /// Time handling - double duk_get_now( - ffi.Pointer ctx, - ) { - return _duk_get_now( - ctx, - ); + double duk_get_now(ffi.Pointer ctx) { + return _duk_get_now(ctx); } late final _duk_get_nowPtr = _lookup< - ffi.NativeFunction)>>( - 'duk_get_now'); + ffi.NativeFunction)> + >('duk_get_now'); late final _duk_get_now = _duk_get_nowPtr.asFunction)>(); @@ -5113,38 +4738,51 @@ class DuktapeBindings { double timeval, ffi.Pointer comp, ) { - return _duk_time_to_components( - ctx, - timeval, - comp, - ); + return _duk_time_to_components(ctx, timeval, comp); } late final _duk_time_to_componentsPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function(ffi.Pointer, duk_double_t, - ffi.Pointer)>>('duk_time_to_components'); - late final _duk_time_to_components = _duk_time_to_componentsPtr.asFunction< - void Function(ffi.Pointer, double, - ffi.Pointer)>(); + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer, + duk_double_t, + ffi.Pointer, + ) + > + >('duk_time_to_components'); + late final _duk_time_to_components = + _duk_time_to_componentsPtr + .asFunction< + void Function( + ffi.Pointer, + double, + ffi.Pointer, + ) + >(); double duk_components_to_time( ffi.Pointer ctx, ffi.Pointer comp, ) { - return _duk_components_to_time( - ctx, - comp, - ); + return _duk_components_to_time(ctx, comp); } late final _duk_components_to_timePtr = _lookup< - ffi.NativeFunction< - duk_double_t Function(ffi.Pointer, - ffi.Pointer)>>('duk_components_to_time'); - late final _duk_components_to_time = _duk_components_to_timePtr.asFunction< - double Function( - ffi.Pointer, ffi.Pointer)>(); + ffi.NativeFunction< + duk_double_t Function( + ffi.Pointer, + ffi.Pointer, + ) + > + >('duk_components_to_time'); + late final _duk_components_to_time = + _duk_components_to_timePtr + .asFunction< + double Function( + ffi.Pointer, + ffi.Pointer, + ) + >(); } /// Public API specific typedefs @@ -5170,30 +4808,42 @@ final class duk_memory_functions extends ffi.Struct { external ffi.Pointer udata; } -typedef duk_alloc_function - = ffi.Pointer>; -typedef duk_alloc_functionFunction = ffi.Pointer Function( - ffi.Pointer udata, duk_size_t size); -typedef Dartduk_alloc_functionFunction = ffi.Pointer Function( - ffi.Pointer udata, Dartduk_size_t size); +typedef duk_alloc_function = + ffi.Pointer>; +typedef duk_alloc_functionFunction = + ffi.Pointer Function( + ffi.Pointer udata, + duk_size_t size, + ); +typedef Dartduk_alloc_functionFunction = + ffi.Pointer Function( + ffi.Pointer udata, + Dartduk_size_t size, + ); /// A few types are assumed to always exist. typedef duk_size_t = ffi.Size; typedef Dartduk_size_t = int; -typedef duk_realloc_function - = ffi.Pointer>; -typedef duk_realloc_functionFunction = ffi.Pointer Function( - ffi.Pointer udata, ffi.Pointer ptr, duk_size_t size); -typedef Dartduk_realloc_functionFunction = ffi.Pointer Function( - ffi.Pointer udata, - ffi.Pointer ptr, - Dartduk_size_t size); -typedef duk_free_function - = ffi.Pointer>; -typedef duk_free_functionFunction = ffi.Void Function( - ffi.Pointer udata, ffi.Pointer ptr); -typedef Dartduk_free_functionFunction = void Function( - ffi.Pointer udata, ffi.Pointer ptr); +typedef duk_realloc_function = + ffi.Pointer>; +typedef duk_realloc_functionFunction = + ffi.Pointer Function( + ffi.Pointer udata, + ffi.Pointer ptr, + duk_size_t size, + ); +typedef Dartduk_realloc_functionFunction = + ffi.Pointer Function( + ffi.Pointer udata, + ffi.Pointer ptr, + Dartduk_size_t size, + ); +typedef duk_free_function = + ffi.Pointer>; +typedef duk_free_functionFunction = + ffi.Void Function(ffi.Pointer udata, ffi.Pointer ptr); +typedef Dartduk_free_functionFunction = + void Function(ffi.Pointer udata, ffi.Pointer ptr); final class duk_function_list_entry extends ffi.Struct { external ffi.Pointer key; @@ -5204,12 +4854,12 @@ final class duk_function_list_entry extends ffi.Struct { external int nargs; } -typedef duk_c_function - = ffi.Pointer>; -typedef duk_c_functionFunction = duk_ret_t Function( - ffi.Pointer ctx); -typedef Dartduk_c_functionFunction = Dartduk_small_int_t Function( - ffi.Pointer ctx); +typedef duk_c_function = + ffi.Pointer>; +typedef duk_c_functionFunction = + duk_ret_t Function(ffi.Pointer ctx); +typedef Dartduk_c_functionFunction = + Dartduk_small_int_t Function(ffi.Pointer ctx); /// Duktape/C function return value, platform int is enough for now to /// represent 0, 1, or negative error code. Must be compatible with @@ -5277,12 +4927,12 @@ final class duk_time_components extends ffi.Struct { external double weekday; } -typedef duk_fatal_function - = ffi.Pointer>; -typedef duk_fatal_functionFunction = ffi.Void Function( - ffi.Pointer udata, ffi.Pointer msg); -typedef Dartduk_fatal_functionFunction = void Function( - ffi.Pointer udata, ffi.Pointer msg); +typedef duk_fatal_function = + ffi.Pointer>; +typedef duk_fatal_functionFunction = + ffi.Void Function(ffi.Pointer udata, ffi.Pointer msg); +typedef Dartduk_fatal_functionFunction = + void Function(ffi.Pointer udata, ffi.Pointer msg); typedef duk_uint_t = ffi.UnsignedInt; typedef Dartduk_uint_t = int; @@ -5306,12 +4956,12 @@ typedef Dartduk_uint16_t = int; /// Array index values, could be exact 32 bits. /// Currently no need for signed duk_arridx_t. typedef duk_uarridx_t = duk_uint_t; -typedef duk_decode_char_function - = ffi.Pointer>; -typedef duk_decode_char_functionFunction = ffi.Void Function( - ffi.Pointer udata, duk_codepoint_t codepoint); -typedef Dartduk_decode_char_functionFunction = void Function( - ffi.Pointer udata, Dartduk_int_t codepoint); +typedef duk_decode_char_function = + ffi.Pointer>; +typedef duk_decode_char_functionFunction = + ffi.Void Function(ffi.Pointer udata, duk_codepoint_t codepoint); +typedef Dartduk_decode_char_functionFunction = + void Function(ffi.Pointer udata, Dartduk_int_t codepoint); /// Codepoint type. Must be 32 bits or more because it is used also for /// internal codepoints. The type is signed because negative codepoints @@ -5320,72 +4970,99 @@ typedef Dartduk_decode_char_functionFunction = void Function( /// ensure duk_uint32_t casts back and forth nicely. Almost everything /// else uses the signed one. typedef duk_codepoint_t = duk_int_t; -typedef duk_map_char_function - = ffi.Pointer>; -typedef duk_map_char_functionFunction = duk_codepoint_t Function( - ffi.Pointer udata, duk_codepoint_t codepoint); -typedef Dartduk_map_char_functionFunction = Dartduk_int_t Function( - ffi.Pointer udata, Dartduk_int_t codepoint); -typedef duk_safe_call_function - = ffi.Pointer>; -typedef duk_safe_call_functionFunction = duk_ret_t Function( - ffi.Pointer ctx, ffi.Pointer udata); -typedef Dartduk_safe_call_functionFunction = Dartduk_small_int_t Function( - ffi.Pointer ctx, ffi.Pointer udata); -typedef duk_debug_read_function - = ffi.Pointer>; -typedef duk_debug_read_functionFunction = duk_size_t Function( - ffi.Pointer udata, - ffi.Pointer buffer, - duk_size_t length); -typedef Dartduk_debug_read_functionFunction = Dartduk_size_t Function( - ffi.Pointer udata, - ffi.Pointer buffer, - Dartduk_size_t length); -typedef duk_debug_write_function - = ffi.Pointer>; -typedef duk_debug_write_functionFunction = duk_size_t Function( - ffi.Pointer udata, - ffi.Pointer buffer, - duk_size_t length); -typedef Dartduk_debug_write_functionFunction = Dartduk_size_t Function( - ffi.Pointer udata, - ffi.Pointer buffer, - Dartduk_size_t length); -typedef duk_debug_peek_function - = ffi.Pointer>; -typedef duk_debug_peek_functionFunction = duk_size_t Function( - ffi.Pointer udata); -typedef Dartduk_debug_peek_functionFunction = Dartduk_size_t Function( - ffi.Pointer udata); -typedef duk_debug_read_flush_function - = ffi.Pointer>; -typedef duk_debug_read_flush_functionFunction = ffi.Void Function( - ffi.Pointer udata); -typedef Dartduk_debug_read_flush_functionFunction = void Function( - ffi.Pointer udata); -typedef duk_debug_write_flush_function - = ffi.Pointer>; -typedef duk_debug_write_flush_functionFunction = ffi.Void Function( - ffi.Pointer udata); -typedef Dartduk_debug_write_flush_functionFunction = void Function( - ffi.Pointer udata); -typedef duk_debug_request_function - = ffi.Pointer>; -typedef duk_debug_request_functionFunction = duk_idx_t Function( - ffi.Pointer ctx, - ffi.Pointer udata, - duk_idx_t nvalues); -typedef Dartduk_debug_request_functionFunction = Dartduk_int_t Function( - ffi.Pointer ctx, - ffi.Pointer udata, - Dartduk_int_t nvalues); -typedef duk_debug_detached_function - = ffi.Pointer>; -typedef duk_debug_detached_functionFunction = ffi.Void Function( - ffi.Pointer ctx, ffi.Pointer udata); -typedef Dartduk_debug_detached_functionFunction = void Function( - ffi.Pointer ctx, ffi.Pointer udata); +typedef duk_map_char_function = + ffi.Pointer>; +typedef duk_map_char_functionFunction = + duk_codepoint_t Function( + ffi.Pointer udata, + duk_codepoint_t codepoint, + ); +typedef Dartduk_map_char_functionFunction = + Dartduk_int_t Function( + ffi.Pointer udata, + Dartduk_int_t codepoint, + ); +typedef duk_safe_call_function = + ffi.Pointer>; +typedef duk_safe_call_functionFunction = + duk_ret_t Function( + ffi.Pointer ctx, + ffi.Pointer udata, + ); +typedef Dartduk_safe_call_functionFunction = + Dartduk_small_int_t Function( + ffi.Pointer ctx, + ffi.Pointer udata, + ); +typedef duk_debug_read_function = + ffi.Pointer>; +typedef duk_debug_read_functionFunction = + duk_size_t Function( + ffi.Pointer udata, + ffi.Pointer buffer, + duk_size_t length, + ); +typedef Dartduk_debug_read_functionFunction = + Dartduk_size_t Function( + ffi.Pointer udata, + ffi.Pointer buffer, + Dartduk_size_t length, + ); +typedef duk_debug_write_function = + ffi.Pointer>; +typedef duk_debug_write_functionFunction = + duk_size_t Function( + ffi.Pointer udata, + ffi.Pointer buffer, + duk_size_t length, + ); +typedef Dartduk_debug_write_functionFunction = + Dartduk_size_t Function( + ffi.Pointer udata, + ffi.Pointer buffer, + Dartduk_size_t length, + ); +typedef duk_debug_peek_function = + ffi.Pointer>; +typedef duk_debug_peek_functionFunction = + duk_size_t Function(ffi.Pointer udata); +typedef Dartduk_debug_peek_functionFunction = + Dartduk_size_t Function(ffi.Pointer udata); +typedef duk_debug_read_flush_function = + ffi.Pointer>; +typedef duk_debug_read_flush_functionFunction = + ffi.Void Function(ffi.Pointer udata); +typedef Dartduk_debug_read_flush_functionFunction = + void Function(ffi.Pointer udata); +typedef duk_debug_write_flush_function = + ffi.Pointer>; +typedef duk_debug_write_flush_functionFunction = + ffi.Void Function(ffi.Pointer udata); +typedef Dartduk_debug_write_flush_functionFunction = + void Function(ffi.Pointer udata); +typedef duk_debug_request_function = + ffi.Pointer>; +typedef duk_debug_request_functionFunction = + duk_idx_t Function( + ffi.Pointer ctx, + ffi.Pointer udata, + duk_idx_t nvalues, + ); +typedef Dartduk_debug_request_functionFunction = + Dartduk_int_t Function( + ffi.Pointer ctx, + ffi.Pointer udata, + Dartduk_int_t nvalues, + ); +typedef duk_debug_detached_function = + ffi.Pointer>; +typedef duk_debug_detached_functionFunction = + ffi.Void Function( + ffi.Pointer ctx, + ffi.Pointer udata, + ); +typedef Dartduk_debug_detached_functionFunction = + void Function(ffi.Pointer ctx, ffi.Pointer udata); const int DUK_VERSION = 20700; diff --git a/ffigen_codelab/step_05/lib/ffigen_app.dart b/ffigen_codelab/step_05/lib/ffigen_app.dart index 216f909a16..70bea9e3ef 100644 --- a/ffigen_codelab/step_05/lib/ffigen_app.dart +++ b/ffigen_codelab/step_05/lib/ffigen_app.dart @@ -29,8 +29,13 @@ final DuktapeBindings _bindings = DuktapeBindings(_dylib); class Duktape { Duktape() { - ctx = - _bindings.duk_create_heap(nullptr, nullptr, nullptr, nullptr, nullptr); + ctx = _bindings.duk_create_heap( + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + ); } void evalString(String jsCode) { @@ -40,15 +45,16 @@ class Duktape { var nativeUtf8 = jsCode.toNativeUtf8(); _bindings.duk_eval_raw( - ctx, - nativeUtf8.cast(), - 0, - 0 /*args*/ | - DUK_COMPILE_EVAL | - DUK_COMPILE_SAFE | - DUK_COMPILE_NOSOURCE | - DUK_COMPILE_STRLEN | - DUK_COMPILE_NOFILENAME); + ctx, + nativeUtf8.cast(), + 0, + 0 /*args*/ | + DUK_COMPILE_EVAL | + DUK_COMPILE_SAFE | + DUK_COMPILE_NOSOURCE | + DUK_COMPILE_STRLEN | + DUK_COMPILE_NOFILENAME, + ); ffi.malloc.free(nativeUtf8); } diff --git a/ffigen_codelab/step_05/lib/ffigen_app_bindings_generated.dart b/ffigen_codelab/step_05/lib/ffigen_app_bindings_generated.dart index 513983bf0c..b91a32288b 100644 --- a/ffigen_codelab/step_05/lib/ffigen_app_bindings_generated.dart +++ b/ffigen_codelab/step_05/lib/ffigen_app_bindings_generated.dart @@ -15,31 +15,24 @@ import 'dart:ffi' as ffi; class FfigenAppBindings { /// Holds the symbol lookup function. final ffi.Pointer Function(String symbolName) - _lookup; + _lookup; /// The symbols are looked up in [dynamicLibrary]. FfigenAppBindings(ffi.DynamicLibrary dynamicLibrary) - : _lookup = dynamicLibrary.lookup; + : _lookup = dynamicLibrary.lookup; /// The symbols are looked up with [lookup]. FfigenAppBindings.fromLookup( - ffi.Pointer Function(String symbolName) - lookup) - : _lookup = lookup; + ffi.Pointer Function(String symbolName) lookup, + ) : _lookup = lookup; /// A very short-lived native function. /// /// For very short-lived functions, it is fine to call them on the main isolate. /// They will block the Dart execution while running the native function, so /// only do this for native functions which are guaranteed to be short-lived. - int sum( - int a, - int b, - ) { - return _sum( - a, - b, - ); + int sum(int a, int b) { + return _sum(a, b); } late final _sumPtr = @@ -51,19 +44,14 @@ class FfigenAppBindings { /// Do not call these kind of native functions in the main isolate. They will /// block Dart execution. This will cause dropped frames in Flutter applications. /// Instead, call these native functions on a separate isolate. - int sum_long_running( - int a, - int b, - ) { - return _sum_long_running( - a, - b, - ); + int sum_long_running(int a, int b) { + return _sum_long_running(a, b); } late final _sum_long_runningPtr = _lookup>( - 'sum_long_running'); + 'sum_long_running', + ); late final _sum_long_running = _sum_long_runningPtr.asFunction(); } diff --git a/ffigen_codelab/step_05/pubspec.yaml b/ffigen_codelab/step_05/pubspec.yaml index 1fe4c6cb0d..e72ef0d828 100644 --- a/ffigen_codelab/step_05/pubspec.yaml +++ b/ffigen_codelab/step_05/pubspec.yaml @@ -4,7 +4,7 @@ version: 0.0.1 homepage: environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 flutter: '>=3.3.0' dependencies: diff --git a/ffigen_codelab/step_06/example/lib/main.dart b/ffigen_codelab/step_06/example/lib/main.dart index fe9e7935d6..34ed956085 100644 --- a/ffigen_codelab/step_06/example/lib/main.dart +++ b/ffigen_codelab/step_06/example/lib/main.dart @@ -43,20 +43,14 @@ class _MyAppState extends State { const spacerSmall = SizedBox(height: 10); return MaterialApp( home: Scaffold( - appBar: AppBar( - title: const Text('Duktape Test'), - ), + appBar: AppBar(title: const Text('Duktape Test')), body: Center( child: Container( padding: const EdgeInsets.all(10), child: Column( mainAxisSize: MainAxisSize.min, children: [ - Text( - output, - style: textStyle, - textAlign: TextAlign.center, - ), + Text(output, style: textStyle, textAlign: TextAlign.center), spacerSmall, ElevatedButton( child: const Text('Run JavaScript'), diff --git a/ffigen_codelab/step_06/example/pubspec.yaml b/ffigen_codelab/step_06/example/pubspec.yaml index 806a8504d7..bb9b2fc9ba 100644 --- a/ffigen_codelab/step_06/example/pubspec.yaml +++ b/ffigen_codelab/step_06/example/pubspec.yaml @@ -19,7 +19,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev version: 1.0.0+1 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 # Dependencies specify other packages that your package needs in order to work. # To automatically upgrade your package dependencies to the latest versions diff --git a/ffigen_codelab/step_06/lib/duktape_bindings_generated.dart b/ffigen_codelab/step_06/lib/duktape_bindings_generated.dart index 429f3bc134..7579ae6633 100644 --- a/ffigen_codelab/step_06/lib/duktape_bindings_generated.dart +++ b/ffigen_codelab/step_06/lib/duktape_bindings_generated.dart @@ -15,17 +15,16 @@ import 'dart:ffi' as ffi; class DuktapeBindings { /// Holds the symbol lookup function. final ffi.Pointer Function(String symbolName) - _lookup; + _lookup; /// The symbols are looked up in [dynamicLibrary]. DuktapeBindings(ffi.DynamicLibrary dynamicLibrary) - : _lookup = dynamicLibrary.lookup; + : _lookup = dynamicLibrary.lookup; /// The symbols are looked up with [lookup]. DuktapeBindings.fromLookup( - ffi.Pointer Function(String symbolName) - lookup) - : _lookup = lookup; + ffi.Pointer Function(String symbolName) lookup, + ) : _lookup = lookup; /// Context management ffi.Pointer duk_create_heap( @@ -45,226 +44,241 @@ class DuktapeBindings { } late final _duk_create_heapPtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function( + ffi.NativeFunction< + ffi.Pointer Function( + duk_alloc_function, + duk_realloc_function, + duk_free_function, + ffi.Pointer, + duk_fatal_function, + ) + > + >('duk_create_heap'); + late final _duk_create_heap = + _duk_create_heapPtr + .asFunction< + ffi.Pointer Function( duk_alloc_function, duk_realloc_function, duk_free_function, ffi.Pointer, - duk_fatal_function)>>('duk_create_heap'); - late final _duk_create_heap = _duk_create_heapPtr.asFunction< - ffi.Pointer Function( - duk_alloc_function, - duk_realloc_function, - duk_free_function, - ffi.Pointer, - duk_fatal_function)>(); + duk_fatal_function, + ) + >(); - void duk_destroy_heap( - ffi.Pointer ctx, - ) { - return _duk_destroy_heap( - ctx, - ); + void duk_destroy_heap(ffi.Pointer ctx) { + return _duk_destroy_heap(ctx); } late final _duk_destroy_heapPtr = _lookup)>>( - 'duk_destroy_heap'); - late final _duk_destroy_heap = _duk_destroy_heapPtr - .asFunction)>(); + 'duk_destroy_heap', + ); + late final _duk_destroy_heap = + _duk_destroy_heapPtr + .asFunction)>(); void duk_suspend( ffi.Pointer ctx, ffi.Pointer state, ) { - return _duk_suspend( - ctx, - state, - ); + return _duk_suspend(ctx, state); } late final _duk_suspendPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function(ffi.Pointer, - ffi.Pointer)>>('duk_suspend'); - late final _duk_suspend = _duk_suspendPtr.asFunction< - void Function(ffi.Pointer, ffi.Pointer)>(); + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer) + > + >('duk_suspend'); + late final _duk_suspend = + _duk_suspendPtr + .asFunction< + void Function( + ffi.Pointer, + ffi.Pointer, + ) + >(); void duk_resume( ffi.Pointer ctx, ffi.Pointer state, ) { - return _duk_resume( - ctx, - state, - ); + return _duk_resume(ctx, state); } late final _duk_resumePtr = _lookup< - ffi.NativeFunction< - ffi.Void Function(ffi.Pointer, - ffi.Pointer)>>('duk_resume'); - late final _duk_resume = _duk_resumePtr.asFunction< - void Function(ffi.Pointer, ffi.Pointer)>(); + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer) + > + >('duk_resume'); + late final _duk_resume = + _duk_resumePtr + .asFunction< + void Function( + ffi.Pointer, + ffi.Pointer, + ) + >(); /// Memory management /// /// Raw functions have no side effects (cannot trigger GC). - ffi.Pointer duk_alloc_raw( - ffi.Pointer ctx, - int size, - ) { - return _duk_alloc_raw( - ctx, - size, - ); + ffi.Pointer duk_alloc_raw(ffi.Pointer ctx, int size) { + return _duk_alloc_raw(ctx, size); } late final _duk_alloc_rawPtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function( - ffi.Pointer, duk_size_t)>>('duk_alloc_raw'); - late final _duk_alloc_raw = _duk_alloc_rawPtr.asFunction< - ffi.Pointer Function(ffi.Pointer, int)>(); + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, duk_size_t) + > + >('duk_alloc_raw'); + late final _duk_alloc_raw = + _duk_alloc_rawPtr + .asFunction< + ffi.Pointer Function(ffi.Pointer, int) + >(); - void duk_free_raw( - ffi.Pointer ctx, - ffi.Pointer ptr, - ) { - return _duk_free_raw( - ctx, - ptr, - ); + void duk_free_raw(ffi.Pointer ctx, ffi.Pointer ptr) { + return _duk_free_raw(ctx, ptr); } late final _duk_free_rawPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function(ffi.Pointer, - ffi.Pointer)>>('duk_free_raw'); - late final _duk_free_raw = _duk_free_rawPtr.asFunction< - void Function(ffi.Pointer, ffi.Pointer)>(); + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer) + > + >('duk_free_raw'); + late final _duk_free_raw = + _duk_free_rawPtr + .asFunction< + void Function(ffi.Pointer, ffi.Pointer) + >(); ffi.Pointer duk_realloc_raw( ffi.Pointer ctx, ffi.Pointer ptr, int size, ) { - return _duk_realloc_raw( - ctx, - ptr, - size, - ); + return _duk_realloc_raw(ctx, ptr, size); } late final _duk_realloc_rawPtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function(ffi.Pointer, - ffi.Pointer, duk_size_t)>>('duk_realloc_raw'); - late final _duk_realloc_raw = _duk_realloc_rawPtr.asFunction< + ffi.NativeFunction< ffi.Pointer Function( - ffi.Pointer, ffi.Pointer, int)>(); + ffi.Pointer, + ffi.Pointer, + duk_size_t, + ) + > + >('duk_realloc_raw'); + late final _duk_realloc_raw = + _duk_realloc_rawPtr + .asFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + int, + ) + >(); - ffi.Pointer duk_alloc( - ffi.Pointer ctx, - int size, - ) { - return _duk_alloc( - ctx, - size, - ); + ffi.Pointer duk_alloc(ffi.Pointer ctx, int size) { + return _duk_alloc(ctx, size); } late final _duk_allocPtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function( - ffi.Pointer, duk_size_t)>>('duk_alloc'); - late final _duk_alloc = _duk_allocPtr.asFunction< - ffi.Pointer Function(ffi.Pointer, int)>(); + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, duk_size_t) + > + >('duk_alloc'); + late final _duk_alloc = + _duk_allocPtr + .asFunction< + ffi.Pointer Function(ffi.Pointer, int) + >(); - void duk_free( - ffi.Pointer ctx, - ffi.Pointer ptr, - ) { - return _duk_free( - ctx, - ptr, - ); + void duk_free(ffi.Pointer ctx, ffi.Pointer ptr) { + return _duk_free(ctx, ptr); } late final _duk_freePtr = _lookup< - ffi.NativeFunction< - ffi.Void Function( - ffi.Pointer, ffi.Pointer)>>('duk_free'); - late final _duk_free = _duk_freePtr.asFunction< - void Function(ffi.Pointer, ffi.Pointer)>(); + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer) + > + >('duk_free'); + late final _duk_free = + _duk_freePtr + .asFunction< + void Function(ffi.Pointer, ffi.Pointer) + >(); ffi.Pointer duk_realloc( ffi.Pointer ctx, ffi.Pointer ptr, int size, ) { - return _duk_realloc( - ctx, - ptr, - size, - ); + return _duk_realloc(ctx, ptr, size); } late final _duk_reallocPtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function(ffi.Pointer, - ffi.Pointer, duk_size_t)>>('duk_realloc'); - late final _duk_realloc = _duk_reallocPtr.asFunction< + ffi.NativeFunction< ffi.Pointer Function( - ffi.Pointer, ffi.Pointer, int)>(); + ffi.Pointer, + ffi.Pointer, + duk_size_t, + ) + > + >('duk_realloc'); + late final _duk_realloc = + _duk_reallocPtr + .asFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + int, + ) + >(); void duk_get_memory_functions( ffi.Pointer ctx, ffi.Pointer out_funcs, ) { - return _duk_get_memory_functions( - ctx, - out_funcs, - ); + return _duk_get_memory_functions(ctx, out_funcs); } late final _duk_get_memory_functionsPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function(ffi.Pointer, - ffi.Pointer)>>('duk_get_memory_functions'); + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer, + ffi.Pointer, + ) + > + >('duk_get_memory_functions'); late final _duk_get_memory_functions = - _duk_get_memory_functionsPtr.asFunction< - void Function( - ffi.Pointer, ffi.Pointer)>(); + _duk_get_memory_functionsPtr + .asFunction< + void Function( + ffi.Pointer, + ffi.Pointer, + ) + >(); - void duk_gc( - ffi.Pointer ctx, - int flags, - ) { - return _duk_gc( - ctx, - flags, - ); + void duk_gc(ffi.Pointer ctx, int flags) { + return _duk_gc(ctx, flags); } late final _duk_gcPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function(ffi.Pointer, duk_uint_t)>>('duk_gc'); + ffi.NativeFunction, duk_uint_t)> + >('duk_gc'); late final _duk_gc = _duk_gcPtr.asFunction, int)>(); - void duk_throw_raw( - ffi.Pointer ctx, - ) { - return _duk_throw_raw( - ctx, - ); + void duk_throw_raw(ffi.Pointer ctx) { + return _duk_throw_raw(ctx); } late final _duk_throw_rawPtr = _lookup)>>( - 'duk_throw_raw'); + 'duk_throw_raw', + ); late final _duk_throw_raw = _duk_throw_rawPtr.asFunction)>(); @@ -272,18 +286,19 @@ class DuktapeBindings { ffi.Pointer ctx, ffi.Pointer err_msg, ) { - return _duk_fatal_raw( - ctx, - err_msg, - ); + return _duk_fatal_raw(ctx, err_msg); } late final _duk_fatal_rawPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function(ffi.Pointer, - ffi.Pointer)>>('duk_fatal_raw'); - late final _duk_fatal_raw = _duk_fatal_rawPtr.asFunction< - void Function(ffi.Pointer, ffi.Pointer)>(); + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer) + > + >('duk_fatal_raw'); + late final _duk_fatal_raw = + _duk_fatal_rawPtr + .asFunction< + void Function(ffi.Pointer, ffi.Pointer) + >(); void duk_error_raw( ffi.Pointer ctx, @@ -292,26 +307,31 @@ class DuktapeBindings { int line, ffi.Pointer fmt, ) { - return _duk_error_raw( - ctx, - err_code, - filename, - line, - fmt, - ); + return _duk_error_raw(ctx, err_code, filename, line, fmt); } late final _duk_error_rawPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function( + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer, + duk_errcode_t, + ffi.Pointer, + duk_int_t, + ffi.Pointer, + ) + > + >('duk_error_raw'); + late final _duk_error_raw = + _duk_error_rawPtr + .asFunction< + void Function( ffi.Pointer, - duk_errcode_t, + int, ffi.Pointer, - duk_int_t, - ffi.Pointer)>>('duk_error_raw'); - late final _duk_error_raw = _duk_error_rawPtr.asFunction< - void Function(ffi.Pointer, int, ffi.Pointer, int, - ffi.Pointer)>(); + int, + ffi.Pointer, + ) + >(); void duk_error_va_raw( ffi.Pointer ctx, @@ -321,185 +341,147 @@ class DuktapeBindings { ffi.Pointer fmt, va_list ap, ) { - return _duk_error_va_raw( - ctx, - err_code, - filename, - line, - fmt, - ap, - ); + return _duk_error_va_raw(ctx, err_code, filename, line, fmt, ap); } late final _duk_error_va_rawPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function( + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer, + duk_errcode_t, + ffi.Pointer, + duk_int_t, + ffi.Pointer, + va_list, + ) + > + >('duk_error_va_raw'); + late final _duk_error_va_raw = + _duk_error_va_rawPtr + .asFunction< + void Function( ffi.Pointer, - duk_errcode_t, + int, ffi.Pointer, - duk_int_t, + int, ffi.Pointer, - va_list)>>('duk_error_va_raw'); - late final _duk_error_va_raw = _duk_error_va_rawPtr.asFunction< - void Function(ffi.Pointer, int, ffi.Pointer, int, - ffi.Pointer, va_list)>(); + va_list, + ) + >(); /// Other state related functions - int duk_is_strict_call( - ffi.Pointer ctx, - ) { - return _duk_is_strict_call( - ctx, - ); + int duk_is_strict_call(ffi.Pointer ctx) { + return _duk_is_strict_call(ctx); } late final _duk_is_strict_callPtr = _lookup< - ffi.NativeFunction)>>( - 'duk_is_strict_call'); - late final _duk_is_strict_call = _duk_is_strict_callPtr - .asFunction)>(); + ffi.NativeFunction)> + >('duk_is_strict_call'); + late final _duk_is_strict_call = + _duk_is_strict_callPtr + .asFunction)>(); - int duk_is_constructor_call( - ffi.Pointer ctx, - ) { - return _duk_is_constructor_call( - ctx, - ); + int duk_is_constructor_call(ffi.Pointer ctx) { + return _duk_is_constructor_call(ctx); } late final _duk_is_constructor_callPtr = _lookup< - ffi.NativeFunction)>>( - 'duk_is_constructor_call'); - late final _duk_is_constructor_call = _duk_is_constructor_callPtr - .asFunction)>(); + ffi.NativeFunction)> + >('duk_is_constructor_call'); + late final _duk_is_constructor_call = + _duk_is_constructor_callPtr + .asFunction)>(); /// Stack management - int duk_normalize_index( - ffi.Pointer ctx, - int idx, - ) { - return _duk_normalize_index( - ctx, - idx, - ); + int duk_normalize_index(ffi.Pointer ctx, int idx) { + return _duk_normalize_index(ctx, idx); } late final _duk_normalize_indexPtr = _lookup< - ffi.NativeFunction< - duk_idx_t Function( - ffi.Pointer, duk_idx_t)>>('duk_normalize_index'); - late final _duk_normalize_index = _duk_normalize_indexPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_normalize_index'); + late final _duk_normalize_index = + _duk_normalize_indexPtr + .asFunction, int)>(); - int duk_require_normalize_index( - ffi.Pointer ctx, - int idx, - ) { - return _duk_require_normalize_index( - ctx, - idx, - ); + int duk_require_normalize_index(ffi.Pointer ctx, int idx) { + return _duk_require_normalize_index(ctx, idx); } late final _duk_require_normalize_indexPtr = _lookup< - ffi.NativeFunction< - duk_idx_t Function(ffi.Pointer, - duk_idx_t)>>('duk_require_normalize_index'); - late final _duk_require_normalize_index = _duk_require_normalize_indexPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_require_normalize_index'); + late final _duk_require_normalize_index = + _duk_require_normalize_indexPtr + .asFunction, int)>(); - int duk_is_valid_index( - ffi.Pointer ctx, - int idx, - ) { - return _duk_is_valid_index( - ctx, - idx, - ); + int duk_is_valid_index(ffi.Pointer ctx, int idx) { + return _duk_is_valid_index(ctx, idx); } late final _duk_is_valid_indexPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function( - ffi.Pointer, duk_idx_t)>>('duk_is_valid_index'); - late final _duk_is_valid_index = _duk_is_valid_indexPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_is_valid_index'); + late final _duk_is_valid_index = + _duk_is_valid_indexPtr + .asFunction, int)>(); - void duk_require_valid_index( - ffi.Pointer ctx, - int idx, - ) { - return _duk_require_valid_index( - ctx, - idx, - ); + void duk_require_valid_index(ffi.Pointer ctx, int idx) { + return _duk_require_valid_index(ctx, idx); } late final _duk_require_valid_indexPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function( - ffi.Pointer, duk_idx_t)>>('duk_require_valid_index'); - late final _duk_require_valid_index = _duk_require_valid_indexPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_require_valid_index'); + late final _duk_require_valid_index = + _duk_require_valid_indexPtr + .asFunction, int)>(); - int duk_get_top( - ffi.Pointer ctx, - ) { - return _duk_get_top( - ctx, - ); + int duk_get_top(ffi.Pointer ctx) { + return _duk_get_top(ctx); } late final _duk_get_topPtr = _lookup)>>( - 'duk_get_top'); + 'duk_get_top', + ); late final _duk_get_top = _duk_get_topPtr.asFunction)>(); - void duk_set_top( - ffi.Pointer ctx, - int idx, - ) { - return _duk_set_top( - ctx, - idx, - ); + void duk_set_top(ffi.Pointer ctx, int idx) { + return _duk_set_top(ctx, idx); } late final _duk_set_topPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function( - ffi.Pointer, duk_idx_t)>>('duk_set_top'); - late final _duk_set_top = _duk_set_topPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_set_top'); + late final _duk_set_top = + _duk_set_topPtr + .asFunction, int)>(); - int duk_get_top_index( - ffi.Pointer ctx, - ) { - return _duk_get_top_index( - ctx, - ); + int duk_get_top_index(ffi.Pointer ctx) { + return _duk_get_top_index(ctx); } late final _duk_get_top_indexPtr = _lookup)>>( - 'duk_get_top_index'); - late final _duk_get_top_index = _duk_get_top_indexPtr - .asFunction)>(); + 'duk_get_top_index', + ); + late final _duk_get_top_index = + _duk_get_top_indexPtr + .asFunction)>(); - int duk_require_top_index( - ffi.Pointer ctx, - ) { - return _duk_require_top_index( - ctx, - ); + int duk_require_top_index(ffi.Pointer ctx) { + return _duk_require_top_index(ctx); } late final _duk_require_top_indexPtr = _lookup)>>( - 'duk_require_top_index'); - late final _duk_require_top_index = _duk_require_top_indexPtr - .asFunction)>(); + 'duk_require_top_index', + ); + late final _duk_require_top_index = + _duk_require_top_indexPtr + .asFunction)>(); /// Although extra/top could be an unsigned type here, using a signed type /// makes the API more robust to calling code calculation errors or corner @@ -507,224 +489,147 @@ class DuktapeBindings { /// Negative values are treated as zero, which is better than casting them /// to a large unsigned number. (This principle is used elsewhere in the /// API too.) - int duk_check_stack( - ffi.Pointer ctx, - int extra, - ) { - return _duk_check_stack( - ctx, - extra, - ); + int duk_check_stack(ffi.Pointer ctx, int extra) { + return _duk_check_stack(ctx, extra); } late final _duk_check_stackPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function( - ffi.Pointer, duk_idx_t)>>('duk_check_stack'); - late final _duk_check_stack = _duk_check_stackPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_check_stack'); + late final _duk_check_stack = + _duk_check_stackPtr + .asFunction, int)>(); - void duk_require_stack( - ffi.Pointer ctx, - int extra, - ) { - return _duk_require_stack( - ctx, - extra, - ); + void duk_require_stack(ffi.Pointer ctx, int extra) { + return _duk_require_stack(ctx, extra); } late final _duk_require_stackPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function( - ffi.Pointer, duk_idx_t)>>('duk_require_stack'); - late final _duk_require_stack = _duk_require_stackPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_require_stack'); + late final _duk_require_stack = + _duk_require_stackPtr + .asFunction, int)>(); - int duk_check_stack_top( - ffi.Pointer ctx, - int top, - ) { - return _duk_check_stack_top( - ctx, - top, - ); + int duk_check_stack_top(ffi.Pointer ctx, int top) { + return _duk_check_stack_top(ctx, top); } late final _duk_check_stack_topPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function( - ffi.Pointer, duk_idx_t)>>('duk_check_stack_top'); - late final _duk_check_stack_top = _duk_check_stack_topPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_check_stack_top'); + late final _duk_check_stack_top = + _duk_check_stack_topPtr + .asFunction, int)>(); - void duk_require_stack_top( - ffi.Pointer ctx, - int top, - ) { - return _duk_require_stack_top( - ctx, - top, - ); + void duk_require_stack_top(ffi.Pointer ctx, int top) { + return _duk_require_stack_top(ctx, top); } late final _duk_require_stack_topPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function( - ffi.Pointer, duk_idx_t)>>('duk_require_stack_top'); - late final _duk_require_stack_top = _duk_require_stack_topPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_require_stack_top'); + late final _duk_require_stack_top = + _duk_require_stack_topPtr + .asFunction, int)>(); /// Stack manipulation (other than push/pop) - void duk_swap( - ffi.Pointer ctx, - int idx1, - int idx2, - ) { - return _duk_swap( - ctx, - idx1, - idx2, - ); + void duk_swap(ffi.Pointer ctx, int idx1, int idx2) { + return _duk_swap(ctx, idx1, idx2); } late final _duk_swapPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function( - ffi.Pointer, duk_idx_t, duk_idx_t)>>('duk_swap'); - late final _duk_swap = _duk_swapPtr - .asFunction, int, int)>(); + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, duk_idx_t, duk_idx_t) + > + >('duk_swap'); + late final _duk_swap = + _duk_swapPtr + .asFunction, int, int)>(); - void duk_swap_top( - ffi.Pointer ctx, - int idx, - ) { - return _duk_swap_top( - ctx, - idx, - ); + void duk_swap_top(ffi.Pointer ctx, int idx) { + return _duk_swap_top(ctx, idx); } late final _duk_swap_topPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function( - ffi.Pointer, duk_idx_t)>>('duk_swap_top'); - late final _duk_swap_top = _duk_swap_topPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_swap_top'); + late final _duk_swap_top = + _duk_swap_topPtr + .asFunction, int)>(); - void duk_dup( - ffi.Pointer ctx, - int from_idx, - ) { - return _duk_dup( - ctx, - from_idx, - ); + void duk_dup(ffi.Pointer ctx, int from_idx) { + return _duk_dup(ctx, from_idx); } late final _duk_dupPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function(ffi.Pointer, duk_idx_t)>>('duk_dup'); + ffi.NativeFunction, duk_idx_t)> + >('duk_dup'); late final _duk_dup = _duk_dupPtr.asFunction, int)>(); - void duk_dup_top( - ffi.Pointer ctx, - ) { - return _duk_dup_top( - ctx, - ); + void duk_dup_top(ffi.Pointer ctx) { + return _duk_dup_top(ctx); } late final _duk_dup_topPtr = _lookup)>>( - 'duk_dup_top'); + 'duk_dup_top', + ); late final _duk_dup_top = _duk_dup_topPtr.asFunction)>(); - void duk_insert( - ffi.Pointer ctx, - int to_idx, - ) { - return _duk_insert( - ctx, - to_idx, - ); + void duk_insert(ffi.Pointer ctx, int to_idx) { + return _duk_insert(ctx, to_idx); } late final _duk_insertPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function( - ffi.Pointer, duk_idx_t)>>('duk_insert'); + ffi.NativeFunction, duk_idx_t)> + >('duk_insert'); late final _duk_insert = _duk_insertPtr.asFunction, int)>(); - void duk_pull( - ffi.Pointer ctx, - int from_idx, - ) { - return _duk_pull( - ctx, - from_idx, - ); + void duk_pull(ffi.Pointer ctx, int from_idx) { + return _duk_pull(ctx, from_idx); } late final _duk_pullPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function(ffi.Pointer, duk_idx_t)>>('duk_pull'); + ffi.NativeFunction, duk_idx_t)> + >('duk_pull'); late final _duk_pull = _duk_pullPtr.asFunction, int)>(); - void duk_replace( - ffi.Pointer ctx, - int to_idx, - ) { - return _duk_replace( - ctx, - to_idx, - ); + void duk_replace(ffi.Pointer ctx, int to_idx) { + return _duk_replace(ctx, to_idx); } late final _duk_replacePtr = _lookup< - ffi.NativeFunction< - ffi.Void Function( - ffi.Pointer, duk_idx_t)>>('duk_replace'); - late final _duk_replace = _duk_replacePtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_replace'); + late final _duk_replace = + _duk_replacePtr + .asFunction, int)>(); - void duk_copy( - ffi.Pointer ctx, - int from_idx, - int to_idx, - ) { - return _duk_copy( - ctx, - from_idx, - to_idx, - ); + void duk_copy(ffi.Pointer ctx, int from_idx, int to_idx) { + return _duk_copy(ctx, from_idx, to_idx); } late final _duk_copyPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function( - ffi.Pointer, duk_idx_t, duk_idx_t)>>('duk_copy'); - late final _duk_copy = _duk_copyPtr - .asFunction, int, int)>(); + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, duk_idx_t, duk_idx_t) + > + >('duk_copy'); + late final _duk_copy = + _duk_copyPtr + .asFunction, int, int)>(); - void duk_remove( - ffi.Pointer ctx, - int idx, - ) { - return _duk_remove( - ctx, - idx, - ); + void duk_remove(ffi.Pointer ctx, int idx) { + return _duk_remove(ctx, idx); } late final _duk_removePtr = _lookup< - ffi.NativeFunction< - ffi.Void Function( - ffi.Pointer, duk_idx_t)>>('duk_remove'); + ffi.NativeFunction, duk_idx_t)> + >('duk_remove'); late final _duk_remove = _duk_removePtr.asFunction, int)>(); @@ -734,21 +639,29 @@ class DuktapeBindings { int count, int is_copy, ) { - return _duk_xcopymove_raw( - to_ctx, - from_ctx, - count, - is_copy, - ); + return _duk_xcopymove_raw(to_ctx, from_ctx, count, is_copy); } late final _duk_xcopymove_rawPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function(ffi.Pointer, ffi.Pointer, - duk_idx_t, duk_bool_t)>>('duk_xcopymove_raw'); - late final _duk_xcopymove_raw = _duk_xcopymove_rawPtr.asFunction< - void Function( - ffi.Pointer, ffi.Pointer, int, int)>(); + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer, + ffi.Pointer, + duk_idx_t, + duk_bool_t, + ) + > + >('duk_xcopymove_raw'); + late final _duk_xcopymove_raw = + _duk_xcopymove_rawPtr + .asFunction< + void Function( + ffi.Pointer, + ffi.Pointer, + int, + int, + ) + >(); /// Push operations /// @@ -756,446 +669,417 @@ class DuktapeBindings { /// position of the pushed value for convenience. /// /// Note: duk_dup() is technically a push. - void duk_push_undefined( - ffi.Pointer ctx, - ) { - return _duk_push_undefined( - ctx, - ); + void duk_push_undefined(ffi.Pointer ctx) { + return _duk_push_undefined(ctx); } late final _duk_push_undefinedPtr = _lookup)>>( - 'duk_push_undefined'); - late final _duk_push_undefined = _duk_push_undefinedPtr - .asFunction)>(); + 'duk_push_undefined', + ); + late final _duk_push_undefined = + _duk_push_undefinedPtr + .asFunction)>(); - void duk_push_null( - ffi.Pointer ctx, - ) { - return _duk_push_null( - ctx, - ); + void duk_push_null(ffi.Pointer ctx) { + return _duk_push_null(ctx); } late final _duk_push_nullPtr = _lookup)>>( - 'duk_push_null'); + 'duk_push_null', + ); late final _duk_push_null = _duk_push_nullPtr.asFunction)>(); - void duk_push_boolean( - ffi.Pointer ctx, - int val, - ) { - return _duk_push_boolean( - ctx, - val, - ); + void duk_push_boolean(ffi.Pointer ctx, int val) { + return _duk_push_boolean(ctx, val); } late final _duk_push_booleanPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function( - ffi.Pointer, duk_bool_t)>>('duk_push_boolean'); - late final _duk_push_boolean = _duk_push_booleanPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_bool_t)> + >('duk_push_boolean'); + late final _duk_push_boolean = + _duk_push_booleanPtr + .asFunction, int)>(); - void duk_push_true( - ffi.Pointer ctx, - ) { - return _duk_push_true( - ctx, - ); + void duk_push_true(ffi.Pointer ctx) { + return _duk_push_true(ctx); } late final _duk_push_truePtr = _lookup)>>( - 'duk_push_true'); + 'duk_push_true', + ); late final _duk_push_true = _duk_push_truePtr.asFunction)>(); - void duk_push_false( - ffi.Pointer ctx, - ) { - return _duk_push_false( - ctx, - ); + void duk_push_false(ffi.Pointer ctx) { + return _duk_push_false(ctx); } late final _duk_push_falsePtr = _lookup)>>( - 'duk_push_false'); + 'duk_push_false', + ); late final _duk_push_false = _duk_push_falsePtr.asFunction)>(); - void duk_push_number( - ffi.Pointer ctx, - double val, - ) { - return _duk_push_number( - ctx, - val, - ); + void duk_push_number(ffi.Pointer ctx, double val) { + return _duk_push_number(ctx, val); } late final _duk_push_numberPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function( - ffi.Pointer, duk_double_t)>>('duk_push_number'); - late final _duk_push_number = _duk_push_numberPtr - .asFunction, double)>(); + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, duk_double_t) + > + >('duk_push_number'); + late final _duk_push_number = + _duk_push_numberPtr + .asFunction, double)>(); - void duk_push_nan( - ffi.Pointer ctx, - ) { - return _duk_push_nan( - ctx, - ); + void duk_push_nan(ffi.Pointer ctx) { + return _duk_push_nan(ctx); } late final _duk_push_nanPtr = _lookup)>>( - 'duk_push_nan'); + 'duk_push_nan', + ); late final _duk_push_nan = _duk_push_nanPtr.asFunction)>(); - void duk_push_int( - ffi.Pointer ctx, - int val, - ) { - return _duk_push_int( - ctx, - val, - ); + void duk_push_int(ffi.Pointer ctx, int val) { + return _duk_push_int(ctx, val); } late final _duk_push_intPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function( - ffi.Pointer, duk_int_t)>>('duk_push_int'); - late final _duk_push_int = _duk_push_intPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_int_t)> + >('duk_push_int'); + late final _duk_push_int = + _duk_push_intPtr + .asFunction, int)>(); - void duk_push_uint( - ffi.Pointer ctx, - int val, - ) { - return _duk_push_uint( - ctx, - val, - ); + void duk_push_uint(ffi.Pointer ctx, int val) { + return _duk_push_uint(ctx, val); } late final _duk_push_uintPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function( - ffi.Pointer, duk_uint_t)>>('duk_push_uint'); - late final _duk_push_uint = _duk_push_uintPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_uint_t)> + >('duk_push_uint'); + late final _duk_push_uint = + _duk_push_uintPtr + .asFunction, int)>(); ffi.Pointer duk_push_string( ffi.Pointer ctx, ffi.Pointer str, ) { - return _duk_push_string( - ctx, - str, - ); + return _duk_push_string(ctx, str); } late final _duk_push_stringPtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function(ffi.Pointer, - ffi.Pointer)>>('duk_push_string'); - late final _duk_push_string = _duk_push_stringPtr.asFunction< + ffi.NativeFunction< ffi.Pointer Function( - ffi.Pointer, ffi.Pointer)>(); + ffi.Pointer, + ffi.Pointer, + ) + > + >('duk_push_string'); + late final _duk_push_string = + _duk_push_stringPtr + .asFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ) + >(); ffi.Pointer duk_push_lstring( ffi.Pointer ctx, ffi.Pointer str, int len, ) { - return _duk_push_lstring( - ctx, - str, - len, - ); + return _duk_push_lstring(ctx, str, len); } late final _duk_push_lstringPtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function(ffi.Pointer, - ffi.Pointer, duk_size_t)>>('duk_push_lstring'); - late final _duk_push_lstring = _duk_push_lstringPtr.asFunction< + ffi.NativeFunction< ffi.Pointer Function( - ffi.Pointer, ffi.Pointer, int)>(); + ffi.Pointer, + ffi.Pointer, + duk_size_t, + ) + > + >('duk_push_lstring'); + late final _duk_push_lstring = + _duk_push_lstringPtr + .asFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + int, + ) + >(); - void duk_push_pointer( - ffi.Pointer ctx, - ffi.Pointer p, - ) { - return _duk_push_pointer( - ctx, - p, - ); + void duk_push_pointer(ffi.Pointer ctx, ffi.Pointer p) { + return _duk_push_pointer(ctx, p); } late final _duk_push_pointerPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function(ffi.Pointer, - ffi.Pointer)>>('duk_push_pointer'); - late final _duk_push_pointer = _duk_push_pointerPtr.asFunction< - void Function(ffi.Pointer, ffi.Pointer)>(); + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer) + > + >('duk_push_pointer'); + late final _duk_push_pointer = + _duk_push_pointerPtr + .asFunction< + void Function(ffi.Pointer, ffi.Pointer) + >(); ffi.Pointer duk_push_sprintf( ffi.Pointer ctx, ffi.Pointer fmt, ) { - return _duk_push_sprintf( - ctx, - fmt, - ); + return _duk_push_sprintf(ctx, fmt); } late final _duk_push_sprintfPtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function(ffi.Pointer, - ffi.Pointer)>>('duk_push_sprintf'); - late final _duk_push_sprintf = _duk_push_sprintfPtr.asFunction< + ffi.NativeFunction< ffi.Pointer Function( - ffi.Pointer, ffi.Pointer)>(); + ffi.Pointer, + ffi.Pointer, + ) + > + >('duk_push_sprintf'); + late final _duk_push_sprintf = + _duk_push_sprintfPtr + .asFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ) + >(); ffi.Pointer duk_push_vsprintf( ffi.Pointer ctx, ffi.Pointer fmt, va_list ap, ) { - return _duk_push_vsprintf( - ctx, - fmt, - ap, - ); + return _duk_push_vsprintf(ctx, fmt, ap); } late final _duk_push_vsprintfPtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function(ffi.Pointer, - ffi.Pointer, va_list)>>('duk_push_vsprintf'); - late final _duk_push_vsprintf = _duk_push_vsprintfPtr.asFunction< + ffi.NativeFunction< ffi.Pointer Function( - ffi.Pointer, ffi.Pointer, va_list)>(); + ffi.Pointer, + ffi.Pointer, + va_list, + ) + > + >('duk_push_vsprintf'); + late final _duk_push_vsprintf = + _duk_push_vsprintfPtr + .asFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + va_list, + ) + >(); ffi.Pointer duk_push_literal_raw( ffi.Pointer ctx, ffi.Pointer str, int len, ) { - return _duk_push_literal_raw( - ctx, - str, - len, - ); + return _duk_push_literal_raw(ctx, str, len); } late final _duk_push_literal_rawPtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function(ffi.Pointer, - ffi.Pointer, duk_size_t)>>('duk_push_literal_raw'); - late final _duk_push_literal_raw = _duk_push_literal_rawPtr.asFunction< + ffi.NativeFunction< ffi.Pointer Function( - ffi.Pointer, ffi.Pointer, int)>(); + ffi.Pointer, + ffi.Pointer, + duk_size_t, + ) + > + >('duk_push_literal_raw'); + late final _duk_push_literal_raw = + _duk_push_literal_rawPtr + .asFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + int, + ) + >(); - void duk_push_this( - ffi.Pointer ctx, - ) { - return _duk_push_this( - ctx, - ); + void duk_push_this(ffi.Pointer ctx) { + return _duk_push_this(ctx); } late final _duk_push_thisPtr = _lookup)>>( - 'duk_push_this'); + 'duk_push_this', + ); late final _duk_push_this = _duk_push_thisPtr.asFunction)>(); - void duk_push_new_target( - ffi.Pointer ctx, - ) { - return _duk_push_new_target( - ctx, - ); + void duk_push_new_target(ffi.Pointer ctx) { + return _duk_push_new_target(ctx); } late final _duk_push_new_targetPtr = _lookup)>>( - 'duk_push_new_target'); - late final _duk_push_new_target = _duk_push_new_targetPtr - .asFunction)>(); + 'duk_push_new_target', + ); + late final _duk_push_new_target = + _duk_push_new_targetPtr + .asFunction)>(); - void duk_push_current_function( - ffi.Pointer ctx, - ) { - return _duk_push_current_function( - ctx, - ); + void duk_push_current_function(ffi.Pointer ctx) { + return _duk_push_current_function(ctx); } late final _duk_push_current_functionPtr = _lookup)>>( - 'duk_push_current_function'); - late final _duk_push_current_function = _duk_push_current_functionPtr - .asFunction)>(); + 'duk_push_current_function', + ); + late final _duk_push_current_function = + _duk_push_current_functionPtr + .asFunction)>(); - void duk_push_current_thread( - ffi.Pointer ctx, - ) { - return _duk_push_current_thread( - ctx, - ); + void duk_push_current_thread(ffi.Pointer ctx) { + return _duk_push_current_thread(ctx); } late final _duk_push_current_threadPtr = _lookup)>>( - 'duk_push_current_thread'); - late final _duk_push_current_thread = _duk_push_current_threadPtr - .asFunction)>(); + 'duk_push_current_thread', + ); + late final _duk_push_current_thread = + _duk_push_current_threadPtr + .asFunction)>(); - void duk_push_global_object( - ffi.Pointer ctx, - ) { - return _duk_push_global_object( - ctx, - ); + void duk_push_global_object(ffi.Pointer ctx) { + return _duk_push_global_object(ctx); } late final _duk_push_global_objectPtr = _lookup)>>( - 'duk_push_global_object'); - late final _duk_push_global_object = _duk_push_global_objectPtr - .asFunction)>(); + 'duk_push_global_object', + ); + late final _duk_push_global_object = + _duk_push_global_objectPtr + .asFunction)>(); - void duk_push_heap_stash( - ffi.Pointer ctx, - ) { - return _duk_push_heap_stash( - ctx, - ); + void duk_push_heap_stash(ffi.Pointer ctx) { + return _duk_push_heap_stash(ctx); } late final _duk_push_heap_stashPtr = _lookup)>>( - 'duk_push_heap_stash'); - late final _duk_push_heap_stash = _duk_push_heap_stashPtr - .asFunction)>(); + 'duk_push_heap_stash', + ); + late final _duk_push_heap_stash = + _duk_push_heap_stashPtr + .asFunction)>(); - void duk_push_global_stash( - ffi.Pointer ctx, - ) { - return _duk_push_global_stash( - ctx, - ); + void duk_push_global_stash(ffi.Pointer ctx) { + return _duk_push_global_stash(ctx); } late final _duk_push_global_stashPtr = _lookup)>>( - 'duk_push_global_stash'); - late final _duk_push_global_stash = _duk_push_global_stashPtr - .asFunction)>(); + 'duk_push_global_stash', + ); + late final _duk_push_global_stash = + _duk_push_global_stashPtr + .asFunction)>(); void duk_push_thread_stash( ffi.Pointer ctx, ffi.Pointer target_ctx, ) { - return _duk_push_thread_stash( - ctx, - target_ctx, - ); + return _duk_push_thread_stash(ctx, target_ctx); } late final _duk_push_thread_stashPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function(ffi.Pointer, - ffi.Pointer)>>('duk_push_thread_stash'); - late final _duk_push_thread_stash = _duk_push_thread_stashPtr.asFunction< - void Function(ffi.Pointer, ffi.Pointer)>(); + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer) + > + >('duk_push_thread_stash'); + late final _duk_push_thread_stash = + _duk_push_thread_stashPtr + .asFunction< + void Function(ffi.Pointer, ffi.Pointer) + >(); - int duk_push_object( - ffi.Pointer ctx, - ) { - return _duk_push_object( - ctx, - ); + int duk_push_object(ffi.Pointer ctx) { + return _duk_push_object(ctx); } late final _duk_push_objectPtr = _lookup)>>( - 'duk_push_object'); + 'duk_push_object', + ); late final _duk_push_object = _duk_push_objectPtr.asFunction)>(); - int duk_push_bare_object( - ffi.Pointer ctx, - ) { - return _duk_push_bare_object( - ctx, - ); + int duk_push_bare_object(ffi.Pointer ctx) { + return _duk_push_bare_object(ctx); } late final _duk_push_bare_objectPtr = _lookup)>>( - 'duk_push_bare_object'); - late final _duk_push_bare_object = _duk_push_bare_objectPtr - .asFunction)>(); + 'duk_push_bare_object', + ); + late final _duk_push_bare_object = + _duk_push_bare_objectPtr + .asFunction)>(); - int duk_push_array( - ffi.Pointer ctx, - ) { - return _duk_push_array( - ctx, - ); + int duk_push_array(ffi.Pointer ctx) { + return _duk_push_array(ctx); } late final _duk_push_arrayPtr = _lookup)>>( - 'duk_push_array'); + 'duk_push_array', + ); late final _duk_push_array = _duk_push_arrayPtr.asFunction)>(); - int duk_push_bare_array( - ffi.Pointer ctx, - ) { - return _duk_push_bare_array( - ctx, - ); + int duk_push_bare_array(ffi.Pointer ctx) { + return _duk_push_bare_array(ctx); } late final _duk_push_bare_arrayPtr = _lookup)>>( - 'duk_push_bare_array'); - late final _duk_push_bare_array = _duk_push_bare_arrayPtr - .asFunction)>(); + 'duk_push_bare_array', + ); + late final _duk_push_bare_array = + _duk_push_bare_arrayPtr + .asFunction)>(); int duk_push_c_function( ffi.Pointer ctx, duk_c_function func, int nargs, ) { - return _duk_push_c_function( - ctx, - func, - nargs, - ); + return _duk_push_c_function(ctx, func, nargs); } late final _duk_push_c_functionPtr = _lookup< - ffi.NativeFunction< - duk_idx_t Function(ffi.Pointer, duk_c_function, - duk_idx_t)>>('duk_push_c_function'); - late final _duk_push_c_function = _duk_push_c_functionPtr.asFunction< - int Function(ffi.Pointer, duk_c_function, int)>(); + ffi.NativeFunction< + duk_idx_t Function(ffi.Pointer, duk_c_function, duk_idx_t) + > + >('duk_push_c_function'); + late final _duk_push_c_function = + _duk_push_c_functionPtr + .asFunction< + int Function(ffi.Pointer, duk_c_function, int) + >(); int duk_push_c_lightfunc( ffi.Pointer ctx, @@ -1204,55 +1088,53 @@ class DuktapeBindings { int length, int magic, ) { - return _duk_push_c_lightfunc( - ctx, - func, - nargs, - length, - magic, - ); + return _duk_push_c_lightfunc(ctx, func, nargs, length, magic); } late final _duk_push_c_lightfuncPtr = _lookup< - ffi.NativeFunction< - duk_idx_t Function(ffi.Pointer, duk_c_function, - duk_idx_t, duk_idx_t, duk_int_t)>>('duk_push_c_lightfunc'); - late final _duk_push_c_lightfunc = _duk_push_c_lightfuncPtr.asFunction< - int Function(ffi.Pointer, duk_c_function, int, int, int)>(); + ffi.NativeFunction< + duk_idx_t Function( + ffi.Pointer, + duk_c_function, + duk_idx_t, + duk_idx_t, + duk_int_t, + ) + > + >('duk_push_c_lightfunc'); + late final _duk_push_c_lightfunc = + _duk_push_c_lightfuncPtr + .asFunction< + int Function( + ffi.Pointer, + duk_c_function, + int, + int, + int, + ) + >(); - int duk_push_thread_raw( - ffi.Pointer ctx, - int flags, - ) { - return _duk_push_thread_raw( - ctx, - flags, - ); + int duk_push_thread_raw(ffi.Pointer ctx, int flags) { + return _duk_push_thread_raw(ctx, flags); } late final _duk_push_thread_rawPtr = _lookup< - ffi.NativeFunction< - duk_idx_t Function( - ffi.Pointer, duk_uint_t)>>('duk_push_thread_raw'); - late final _duk_push_thread_raw = _duk_push_thread_rawPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_uint_t)> + >('duk_push_thread_raw'); + late final _duk_push_thread_raw = + _duk_push_thread_rawPtr + .asFunction, int)>(); - int duk_push_proxy( - ffi.Pointer ctx, - int proxy_flags, - ) { - return _duk_push_proxy( - ctx, - proxy_flags, - ); + int duk_push_proxy(ffi.Pointer ctx, int proxy_flags) { + return _duk_push_proxy(ctx, proxy_flags); } late final _duk_push_proxyPtr = _lookup< - ffi.NativeFunction< - duk_idx_t Function( - ffi.Pointer, duk_uint_t)>>('duk_push_proxy'); - late final _duk_push_proxy = _duk_push_proxyPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_uint_t)> + >('duk_push_proxy'); + late final _duk_push_proxy = + _duk_push_proxyPtr + .asFunction, int)>(); int duk_push_error_object_raw( ffi.Pointer ctx, @@ -1261,27 +1143,31 @@ class DuktapeBindings { int line, ffi.Pointer fmt, ) { - return _duk_push_error_object_raw( - ctx, - err_code, - filename, - line, - fmt, - ); + return _duk_push_error_object_raw(ctx, err_code, filename, line, fmt); } late final _duk_push_error_object_rawPtr = _lookup< - ffi.NativeFunction< - duk_idx_t Function( + ffi.NativeFunction< + duk_idx_t Function( + ffi.Pointer, + duk_errcode_t, + ffi.Pointer, + duk_int_t, + ffi.Pointer, + ) + > + >('duk_push_error_object_raw'); + late final _duk_push_error_object_raw = + _duk_push_error_object_rawPtr + .asFunction< + int Function( ffi.Pointer, - duk_errcode_t, + int, ffi.Pointer, - duk_int_t, - ffi.Pointer)>>('duk_push_error_object_raw'); - late final _duk_push_error_object_raw = - _duk_push_error_object_rawPtr.asFunction< - int Function(ffi.Pointer, int, ffi.Pointer, - int, ffi.Pointer)>(); + int, + ffi.Pointer, + ) + >(); int duk_push_error_object_va_raw( ffi.Pointer ctx, @@ -1302,37 +1188,52 @@ class DuktapeBindings { } late final _duk_push_error_object_va_rawPtr = _lookup< - ffi.NativeFunction< - duk_idx_t Function( + ffi.NativeFunction< + duk_idx_t Function( + ffi.Pointer, + duk_errcode_t, + ffi.Pointer, + duk_int_t, + ffi.Pointer, + va_list, + ) + > + >('duk_push_error_object_va_raw'); + late final _duk_push_error_object_va_raw = + _duk_push_error_object_va_rawPtr + .asFunction< + int Function( ffi.Pointer, - duk_errcode_t, + int, ffi.Pointer, - duk_int_t, + int, ffi.Pointer, - va_list)>>('duk_push_error_object_va_raw'); - late final _duk_push_error_object_va_raw = - _duk_push_error_object_va_rawPtr.asFunction< - int Function(ffi.Pointer, int, ffi.Pointer, - int, ffi.Pointer, va_list)>(); + va_list, + ) + >(); ffi.Pointer duk_push_buffer_raw( ffi.Pointer ctx, int size, int flags, ) { - return _duk_push_buffer_raw( - ctx, - size, - flags, - ); + return _duk_push_buffer_raw(ctx, size, flags); } late final _duk_push_buffer_rawPtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function(ffi.Pointer, duk_size_t, - duk_small_uint_t)>>('duk_push_buffer_raw'); - late final _duk_push_buffer_raw = _duk_push_buffer_rawPtr.asFunction< - ffi.Pointer Function(ffi.Pointer, int, int)>(); + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + duk_size_t, + duk_small_uint_t, + ) + > + >('duk_push_buffer_raw'); + late final _duk_push_buffer_raw = + _duk_push_buffer_rawPtr + .asFunction< + ffi.Pointer Function(ffi.Pointer, int, int) + >(); void duk_push_buffer_object( ffi.Pointer ctx, @@ -1351,85 +1252,81 @@ class DuktapeBindings { } late final _duk_push_buffer_objectPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function(ffi.Pointer, duk_idx_t, duk_size_t, - duk_size_t, duk_uint_t)>>('duk_push_buffer_object'); - late final _duk_push_buffer_object = _duk_push_buffer_objectPtr.asFunction< - void Function(ffi.Pointer, int, int, int, int)>(); + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer, + duk_idx_t, + duk_size_t, + duk_size_t, + duk_uint_t, + ) + > + >('duk_push_buffer_object'); + late final _duk_push_buffer_object = + _duk_push_buffer_objectPtr + .asFunction< + void Function(ffi.Pointer, int, int, int, int) + >(); int duk_push_heapptr( ffi.Pointer ctx, ffi.Pointer ptr, ) { - return _duk_push_heapptr( - ctx, - ptr, - ); + return _duk_push_heapptr(ctx, ptr); } late final _duk_push_heapptrPtr = _lookup< - ffi.NativeFunction< - duk_idx_t Function(ffi.Pointer, - ffi.Pointer)>>('duk_push_heapptr'); - late final _duk_push_heapptr = _duk_push_heapptrPtr.asFunction< - int Function(ffi.Pointer, ffi.Pointer)>(); + ffi.NativeFunction< + duk_idx_t Function(ffi.Pointer, ffi.Pointer) + > + >('duk_push_heapptr'); + late final _duk_push_heapptr = + _duk_push_heapptrPtr + .asFunction< + int Function(ffi.Pointer, ffi.Pointer) + >(); /// Pop operations - void duk_pop( - ffi.Pointer ctx, - ) { - return _duk_pop( - ctx, - ); + void duk_pop(ffi.Pointer ctx) { + return _duk_pop(ctx); } late final _duk_popPtr = _lookup)>>( - 'duk_pop'); + 'duk_pop', + ); late final _duk_pop = _duk_popPtr.asFunction)>(); - void duk_pop_n( - ffi.Pointer ctx, - int count, - ) { - return _duk_pop_n( - ctx, - count, - ); + void duk_pop_n(ffi.Pointer ctx, int count) { + return _duk_pop_n(ctx, count); } late final _duk_pop_nPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function(ffi.Pointer, duk_idx_t)>>('duk_pop_n'); + ffi.NativeFunction, duk_idx_t)> + >('duk_pop_n'); late final _duk_pop_n = _duk_pop_nPtr.asFunction, int)>(); - void duk_pop_2( - ffi.Pointer ctx, - ) { - return _duk_pop_2( - ctx, - ); + void duk_pop_2(ffi.Pointer ctx) { + return _duk_pop_2(ctx); } late final _duk_pop_2Ptr = _lookup)>>( - 'duk_pop_2'); + 'duk_pop_2', + ); late final _duk_pop_2 = _duk_pop_2Ptr.asFunction)>(); - void duk_pop_3( - ffi.Pointer ctx, - ) { - return _duk_pop_3( - ctx, - ); + void duk_pop_3(ffi.Pointer ctx) { + return _duk_pop_3(ctx); } late final _duk_pop_3Ptr = _lookup)>>( - 'duk_pop_3'); + 'duk_pop_3', + ); late final _duk_pop_3 = _duk_pop_3Ptr.asFunction)>(); @@ -1437,686 +1334,513 @@ class DuktapeBindings { /// /// duk_is_none(), which would indicate whether index it outside of stack, /// is not needed; duk_is_valid_index() gives the same information. - int duk_get_type( - ffi.Pointer ctx, - int idx, - ) { - return _duk_get_type( - ctx, - idx, - ); + int duk_get_type(ffi.Pointer ctx, int idx) { + return _duk_get_type(ctx, idx); } late final _duk_get_typePtr = _lookup< - ffi.NativeFunction< - duk_int_t Function( - ffi.Pointer, duk_idx_t)>>('duk_get_type'); - late final _duk_get_type = _duk_get_typePtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_get_type'); + late final _duk_get_type = + _duk_get_typePtr + .asFunction, int)>(); - int duk_check_type( - ffi.Pointer ctx, - int idx, - int type, - ) { - return _duk_check_type( - ctx, - idx, - type, - ); + int duk_check_type(ffi.Pointer ctx, int idx, int type) { + return _duk_check_type(ctx, idx, type); } late final _duk_check_typePtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function(ffi.Pointer, duk_idx_t, - duk_int_t)>>('duk_check_type'); - late final _duk_check_type = _duk_check_typePtr - .asFunction, int, int)>(); + ffi.NativeFunction< + duk_bool_t Function(ffi.Pointer, duk_idx_t, duk_int_t) + > + >('duk_check_type'); + late final _duk_check_type = + _duk_check_typePtr + .asFunction, int, int)>(); - int duk_get_type_mask( - ffi.Pointer ctx, - int idx, - ) { - return _duk_get_type_mask( - ctx, - idx, - ); + int duk_get_type_mask(ffi.Pointer ctx, int idx) { + return _duk_get_type_mask(ctx, idx); } late final _duk_get_type_maskPtr = _lookup< - ffi.NativeFunction< - duk_uint_t Function( - ffi.Pointer, duk_idx_t)>>('duk_get_type_mask'); - late final _duk_get_type_mask = _duk_get_type_maskPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_get_type_mask'); + late final _duk_get_type_mask = + _duk_get_type_maskPtr + .asFunction, int)>(); - int duk_check_type_mask( - ffi.Pointer ctx, - int idx, - int mask, - ) { - return _duk_check_type_mask( - ctx, - idx, - mask, - ); + int duk_check_type_mask(ffi.Pointer ctx, int idx, int mask) { + return _duk_check_type_mask(ctx, idx, mask); } late final _duk_check_type_maskPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function(ffi.Pointer, duk_idx_t, - duk_uint_t)>>('duk_check_type_mask'); - late final _duk_check_type_mask = _duk_check_type_maskPtr - .asFunction, int, int)>(); + ffi.NativeFunction< + duk_bool_t Function(ffi.Pointer, duk_idx_t, duk_uint_t) + > + >('duk_check_type_mask'); + late final _duk_check_type_mask = + _duk_check_type_maskPtr + .asFunction, int, int)>(); - int duk_is_undefined( - ffi.Pointer ctx, - int idx, - ) { - return _duk_is_undefined( - ctx, - idx, - ); + int duk_is_undefined(ffi.Pointer ctx, int idx) { + return _duk_is_undefined(ctx, idx); } late final _duk_is_undefinedPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function( - ffi.Pointer, duk_idx_t)>>('duk_is_undefined'); - late final _duk_is_undefined = _duk_is_undefinedPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_is_undefined'); + late final _duk_is_undefined = + _duk_is_undefinedPtr + .asFunction, int)>(); - int duk_is_null( - ffi.Pointer ctx, - int idx, - ) { - return _duk_is_null( - ctx, - idx, - ); + int duk_is_null(ffi.Pointer ctx, int idx) { + return _duk_is_null(ctx, idx); } late final _duk_is_nullPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function( - ffi.Pointer, duk_idx_t)>>('duk_is_null'); + ffi.NativeFunction, duk_idx_t)> + >('duk_is_null'); late final _duk_is_null = _duk_is_nullPtr.asFunction, int)>(); - int duk_is_boolean( - ffi.Pointer ctx, - int idx, - ) { - return _duk_is_boolean( - ctx, - idx, - ); + int duk_is_boolean(ffi.Pointer ctx, int idx) { + return _duk_is_boolean(ctx, idx); } late final _duk_is_booleanPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function( - ffi.Pointer, duk_idx_t)>>('duk_is_boolean'); - late final _duk_is_boolean = _duk_is_booleanPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_is_boolean'); + late final _duk_is_boolean = + _duk_is_booleanPtr + .asFunction, int)>(); - int duk_is_number( - ffi.Pointer ctx, - int idx, - ) { - return _duk_is_number( - ctx, - idx, - ); + int duk_is_number(ffi.Pointer ctx, int idx) { + return _duk_is_number(ctx, idx); } late final _duk_is_numberPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function( - ffi.Pointer, duk_idx_t)>>('duk_is_number'); - late final _duk_is_number = _duk_is_numberPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_is_number'); + late final _duk_is_number = + _duk_is_numberPtr + .asFunction, int)>(); - int duk_is_nan( - ffi.Pointer ctx, - int idx, - ) { - return _duk_is_nan( - ctx, - idx, - ); + int duk_is_nan(ffi.Pointer ctx, int idx) { + return _duk_is_nan(ctx, idx); } late final _duk_is_nanPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function( - ffi.Pointer, duk_idx_t)>>('duk_is_nan'); + ffi.NativeFunction, duk_idx_t)> + >('duk_is_nan'); late final _duk_is_nan = _duk_is_nanPtr.asFunction, int)>(); - int duk_is_string( - ffi.Pointer ctx, - int idx, - ) { - return _duk_is_string( - ctx, - idx, - ); + int duk_is_string(ffi.Pointer ctx, int idx) { + return _duk_is_string(ctx, idx); } late final _duk_is_stringPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function( - ffi.Pointer, duk_idx_t)>>('duk_is_string'); - late final _duk_is_string = _duk_is_stringPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_is_string'); + late final _duk_is_string = + _duk_is_stringPtr + .asFunction, int)>(); - int duk_is_object( - ffi.Pointer ctx, - int idx, - ) { - return _duk_is_object( - ctx, - idx, - ); + int duk_is_object(ffi.Pointer ctx, int idx) { + return _duk_is_object(ctx, idx); } late final _duk_is_objectPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function( - ffi.Pointer, duk_idx_t)>>('duk_is_object'); - late final _duk_is_object = _duk_is_objectPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_is_object'); + late final _duk_is_object = + _duk_is_objectPtr + .asFunction, int)>(); - int duk_is_buffer( - ffi.Pointer ctx, - int idx, - ) { - return _duk_is_buffer( - ctx, - idx, - ); + int duk_is_buffer(ffi.Pointer ctx, int idx) { + return _duk_is_buffer(ctx, idx); } late final _duk_is_bufferPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function( - ffi.Pointer, duk_idx_t)>>('duk_is_buffer'); - late final _duk_is_buffer = _duk_is_bufferPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_is_buffer'); + late final _duk_is_buffer = + _duk_is_bufferPtr + .asFunction, int)>(); - int duk_is_buffer_data( - ffi.Pointer ctx, - int idx, - ) { - return _duk_is_buffer_data( - ctx, - idx, - ); + int duk_is_buffer_data(ffi.Pointer ctx, int idx) { + return _duk_is_buffer_data(ctx, idx); } late final _duk_is_buffer_dataPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function( - ffi.Pointer, duk_idx_t)>>('duk_is_buffer_data'); - late final _duk_is_buffer_data = _duk_is_buffer_dataPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_is_buffer_data'); + late final _duk_is_buffer_data = + _duk_is_buffer_dataPtr + .asFunction, int)>(); - int duk_is_pointer( - ffi.Pointer ctx, - int idx, - ) { - return _duk_is_pointer( - ctx, - idx, - ); - } - - late final _duk_is_pointerPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function( - ffi.Pointer, duk_idx_t)>>('duk_is_pointer'); - late final _duk_is_pointer = _duk_is_pointerPtr - .asFunction, int)>(); - - int duk_is_lightfunc( - ffi.Pointer ctx, - int idx, - ) { - return _duk_is_lightfunc( - ctx, - idx, - ); + int duk_is_pointer(ffi.Pointer ctx, int idx) { + return _duk_is_pointer(ctx, idx); + } + + late final _duk_is_pointerPtr = _lookup< + ffi.NativeFunction, duk_idx_t)> + >('duk_is_pointer'); + late final _duk_is_pointer = + _duk_is_pointerPtr + .asFunction, int)>(); + + int duk_is_lightfunc(ffi.Pointer ctx, int idx) { + return _duk_is_lightfunc(ctx, idx); } late final _duk_is_lightfuncPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function( - ffi.Pointer, duk_idx_t)>>('duk_is_lightfunc'); - late final _duk_is_lightfunc = _duk_is_lightfuncPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_is_lightfunc'); + late final _duk_is_lightfunc = + _duk_is_lightfuncPtr + .asFunction, int)>(); - int duk_is_symbol( - ffi.Pointer ctx, - int idx, - ) { - return _duk_is_symbol( - ctx, - idx, - ); + int duk_is_symbol(ffi.Pointer ctx, int idx) { + return _duk_is_symbol(ctx, idx); } late final _duk_is_symbolPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function( - ffi.Pointer, duk_idx_t)>>('duk_is_symbol'); - late final _duk_is_symbol = _duk_is_symbolPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_is_symbol'); + late final _duk_is_symbol = + _duk_is_symbolPtr + .asFunction, int)>(); - int duk_is_array( - ffi.Pointer ctx, - int idx, - ) { - return _duk_is_array( - ctx, - idx, - ); + int duk_is_array(ffi.Pointer ctx, int idx) { + return _duk_is_array(ctx, idx); } late final _duk_is_arrayPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function( - ffi.Pointer, duk_idx_t)>>('duk_is_array'); - late final _duk_is_array = _duk_is_arrayPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_is_array'); + late final _duk_is_array = + _duk_is_arrayPtr + .asFunction, int)>(); - int duk_is_function( - ffi.Pointer ctx, - int idx, - ) { - return _duk_is_function( - ctx, - idx, - ); + int duk_is_function(ffi.Pointer ctx, int idx) { + return _duk_is_function(ctx, idx); } late final _duk_is_functionPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function( - ffi.Pointer, duk_idx_t)>>('duk_is_function'); - late final _duk_is_function = _duk_is_functionPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_is_function'); + late final _duk_is_function = + _duk_is_functionPtr + .asFunction, int)>(); - int duk_is_c_function( - ffi.Pointer ctx, - int idx, - ) { - return _duk_is_c_function( - ctx, - idx, - ); + int duk_is_c_function(ffi.Pointer ctx, int idx) { + return _duk_is_c_function(ctx, idx); } late final _duk_is_c_functionPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function( - ffi.Pointer, duk_idx_t)>>('duk_is_c_function'); - late final _duk_is_c_function = _duk_is_c_functionPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_is_c_function'); + late final _duk_is_c_function = + _duk_is_c_functionPtr + .asFunction, int)>(); - int duk_is_ecmascript_function( - ffi.Pointer ctx, - int idx, - ) { - return _duk_is_ecmascript_function( - ctx, - idx, - ); + int duk_is_ecmascript_function(ffi.Pointer ctx, int idx) { + return _duk_is_ecmascript_function(ctx, idx); } late final _duk_is_ecmascript_functionPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function(ffi.Pointer, - duk_idx_t)>>('duk_is_ecmascript_function'); - late final _duk_is_ecmascript_function = _duk_is_ecmascript_functionPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_is_ecmascript_function'); + late final _duk_is_ecmascript_function = + _duk_is_ecmascript_functionPtr + .asFunction, int)>(); - int duk_is_bound_function( - ffi.Pointer ctx, - int idx, - ) { - return _duk_is_bound_function( - ctx, - idx, - ); + int duk_is_bound_function(ffi.Pointer ctx, int idx) { + return _duk_is_bound_function(ctx, idx); } late final _duk_is_bound_functionPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function( - ffi.Pointer, duk_idx_t)>>('duk_is_bound_function'); - late final _duk_is_bound_function = _duk_is_bound_functionPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_is_bound_function'); + late final _duk_is_bound_function = + _duk_is_bound_functionPtr + .asFunction, int)>(); - int duk_is_thread( - ffi.Pointer ctx, - int idx, - ) { - return _duk_is_thread( - ctx, - idx, - ); + int duk_is_thread(ffi.Pointer ctx, int idx) { + return _duk_is_thread(ctx, idx); } late final _duk_is_threadPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function( - ffi.Pointer, duk_idx_t)>>('duk_is_thread'); - late final _duk_is_thread = _duk_is_threadPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_is_thread'); + late final _duk_is_thread = + _duk_is_threadPtr + .asFunction, int)>(); - int duk_is_constructable( - ffi.Pointer ctx, - int idx, - ) { - return _duk_is_constructable( - ctx, - idx, - ); + int duk_is_constructable(ffi.Pointer ctx, int idx) { + return _duk_is_constructable(ctx, idx); } late final _duk_is_constructablePtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function( - ffi.Pointer, duk_idx_t)>>('duk_is_constructable'); - late final _duk_is_constructable = _duk_is_constructablePtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_is_constructable'); + late final _duk_is_constructable = + _duk_is_constructablePtr + .asFunction, int)>(); - int duk_is_dynamic_buffer( - ffi.Pointer ctx, - int idx, - ) { - return _duk_is_dynamic_buffer( - ctx, - idx, - ); + int duk_is_dynamic_buffer(ffi.Pointer ctx, int idx) { + return _duk_is_dynamic_buffer(ctx, idx); } late final _duk_is_dynamic_bufferPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function( - ffi.Pointer, duk_idx_t)>>('duk_is_dynamic_buffer'); - late final _duk_is_dynamic_buffer = _duk_is_dynamic_bufferPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_is_dynamic_buffer'); + late final _duk_is_dynamic_buffer = + _duk_is_dynamic_bufferPtr + .asFunction, int)>(); - int duk_is_fixed_buffer( - ffi.Pointer ctx, - int idx, - ) { - return _duk_is_fixed_buffer( - ctx, - idx, - ); + int duk_is_fixed_buffer(ffi.Pointer ctx, int idx) { + return _duk_is_fixed_buffer(ctx, idx); } late final _duk_is_fixed_bufferPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function( - ffi.Pointer, duk_idx_t)>>('duk_is_fixed_buffer'); - late final _duk_is_fixed_buffer = _duk_is_fixed_bufferPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_is_fixed_buffer'); + late final _duk_is_fixed_buffer = + _duk_is_fixed_bufferPtr + .asFunction, int)>(); - int duk_is_external_buffer( - ffi.Pointer ctx, - int idx, - ) { - return _duk_is_external_buffer( - ctx, - idx, - ); + int duk_is_external_buffer(ffi.Pointer ctx, int idx) { + return _duk_is_external_buffer(ctx, idx); } late final _duk_is_external_bufferPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function( - ffi.Pointer, duk_idx_t)>>('duk_is_external_buffer'); - late final _duk_is_external_buffer = _duk_is_external_bufferPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_is_external_buffer'); + late final _duk_is_external_buffer = + _duk_is_external_bufferPtr + .asFunction, int)>(); - int duk_get_error_code( - ffi.Pointer ctx, - int idx, - ) { - return _duk_get_error_code( - ctx, - idx, - ); + int duk_get_error_code(ffi.Pointer ctx, int idx) { + return _duk_get_error_code(ctx, idx); } late final _duk_get_error_codePtr = _lookup< - ffi.NativeFunction< - duk_errcode_t Function( - ffi.Pointer, duk_idx_t)>>('duk_get_error_code'); - late final _duk_get_error_code = _duk_get_error_codePtr - .asFunction, int)>(); + ffi.NativeFunction< + duk_errcode_t Function(ffi.Pointer, duk_idx_t) + > + >('duk_get_error_code'); + late final _duk_get_error_code = + _duk_get_error_codePtr + .asFunction, int)>(); /// Get operations: no coercion, returns default value for invalid /// indices and invalid value types. /// /// duk_get_undefined() and duk_get_null() would be pointless and /// are not included. - int duk_get_boolean( - ffi.Pointer ctx, - int idx, - ) { - return _duk_get_boolean( - ctx, - idx, - ); + int duk_get_boolean(ffi.Pointer ctx, int idx) { + return _duk_get_boolean(ctx, idx); } late final _duk_get_booleanPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function( - ffi.Pointer, duk_idx_t)>>('duk_get_boolean'); - late final _duk_get_boolean = _duk_get_booleanPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_get_boolean'); + late final _duk_get_boolean = + _duk_get_booleanPtr + .asFunction, int)>(); - double duk_get_number( - ffi.Pointer ctx, - int idx, - ) { - return _duk_get_number( - ctx, - idx, - ); + double duk_get_number(ffi.Pointer ctx, int idx) { + return _duk_get_number(ctx, idx); } late final _duk_get_numberPtr = _lookup< - ffi.NativeFunction< - duk_double_t Function( - ffi.Pointer, duk_idx_t)>>('duk_get_number'); - late final _duk_get_number = _duk_get_numberPtr - .asFunction, int)>(); + ffi.NativeFunction< + duk_double_t Function(ffi.Pointer, duk_idx_t) + > + >('duk_get_number'); + late final _duk_get_number = + _duk_get_numberPtr + .asFunction, int)>(); - int duk_get_int( - ffi.Pointer ctx, - int idx, - ) { - return _duk_get_int( - ctx, - idx, - ); + int duk_get_int(ffi.Pointer ctx, int idx) { + return _duk_get_int(ctx, idx); } late final _duk_get_intPtr = _lookup< - ffi.NativeFunction< - duk_int_t Function( - ffi.Pointer, duk_idx_t)>>('duk_get_int'); + ffi.NativeFunction, duk_idx_t)> + >('duk_get_int'); late final _duk_get_int = _duk_get_intPtr.asFunction, int)>(); - int duk_get_uint( - ffi.Pointer ctx, - int idx, - ) { - return _duk_get_uint( - ctx, - idx, - ); + int duk_get_uint(ffi.Pointer ctx, int idx) { + return _duk_get_uint(ctx, idx); } late final _duk_get_uintPtr = _lookup< - ffi.NativeFunction< - duk_uint_t Function( - ffi.Pointer, duk_idx_t)>>('duk_get_uint'); - late final _duk_get_uint = _duk_get_uintPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_get_uint'); + late final _duk_get_uint = + _duk_get_uintPtr + .asFunction, int)>(); - ffi.Pointer duk_get_string( - ffi.Pointer ctx, - int idx, - ) { - return _duk_get_string( - ctx, - idx, - ); + ffi.Pointer duk_get_string(ffi.Pointer ctx, int idx) { + return _duk_get_string(ctx, idx); } late final _duk_get_stringPtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function( - ffi.Pointer, duk_idx_t)>>('duk_get_string'); - late final _duk_get_string = _duk_get_stringPtr.asFunction< - ffi.Pointer Function(ffi.Pointer, int)>(); + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, duk_idx_t) + > + >('duk_get_string'); + late final _duk_get_string = + _duk_get_stringPtr + .asFunction< + ffi.Pointer Function(ffi.Pointer, int) + >(); ffi.Pointer duk_get_lstring( ffi.Pointer ctx, int idx, ffi.Pointer out_len, ) { - return _duk_get_lstring( - ctx, - idx, - out_len, - ); + return _duk_get_lstring(ctx, idx, out_len); } late final _duk_get_lstringPtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function(ffi.Pointer, duk_idx_t, - ffi.Pointer)>>('duk_get_lstring'); - late final _duk_get_lstring = _duk_get_lstringPtr.asFunction< + ffi.NativeFunction< ffi.Pointer Function( - ffi.Pointer, int, ffi.Pointer)>(); + ffi.Pointer, + duk_idx_t, + ffi.Pointer, + ) + > + >('duk_get_lstring'); + late final _duk_get_lstring = + _duk_get_lstringPtr + .asFunction< + ffi.Pointer Function( + ffi.Pointer, + int, + ffi.Pointer, + ) + >(); ffi.Pointer duk_get_buffer( ffi.Pointer ctx, int idx, ffi.Pointer out_size, ) { - return _duk_get_buffer( - ctx, - idx, - out_size, - ); + return _duk_get_buffer(ctx, idx, out_size); } late final _duk_get_bufferPtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function(ffi.Pointer, duk_idx_t, - ffi.Pointer)>>('duk_get_buffer'); - late final _duk_get_buffer = _duk_get_bufferPtr.asFunction< + ffi.NativeFunction< ffi.Pointer Function( - ffi.Pointer, int, ffi.Pointer)>(); + ffi.Pointer, + duk_idx_t, + ffi.Pointer, + ) + > + >('duk_get_buffer'); + late final _duk_get_buffer = + _duk_get_bufferPtr + .asFunction< + ffi.Pointer Function( + ffi.Pointer, + int, + ffi.Pointer, + ) + >(); ffi.Pointer duk_get_buffer_data( ffi.Pointer ctx, int idx, ffi.Pointer out_size, ) { - return _duk_get_buffer_data( - ctx, - idx, - out_size, - ); + return _duk_get_buffer_data(ctx, idx, out_size); } late final _duk_get_buffer_dataPtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function(ffi.Pointer, duk_idx_t, - ffi.Pointer)>>('duk_get_buffer_data'); - late final _duk_get_buffer_data = _duk_get_buffer_dataPtr.asFunction< + ffi.NativeFunction< ffi.Pointer Function( - ffi.Pointer, int, ffi.Pointer)>(); + ffi.Pointer, + duk_idx_t, + ffi.Pointer, + ) + > + >('duk_get_buffer_data'); + late final _duk_get_buffer_data = + _duk_get_buffer_dataPtr + .asFunction< + ffi.Pointer Function( + ffi.Pointer, + int, + ffi.Pointer, + ) + >(); - ffi.Pointer duk_get_pointer( - ffi.Pointer ctx, - int idx, - ) { - return _duk_get_pointer( - ctx, - idx, - ); + ffi.Pointer duk_get_pointer(ffi.Pointer ctx, int idx) { + return _duk_get_pointer(ctx, idx); } late final _duk_get_pointerPtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function( - ffi.Pointer, duk_idx_t)>>('duk_get_pointer'); - late final _duk_get_pointer = _duk_get_pointerPtr.asFunction< - ffi.Pointer Function(ffi.Pointer, int)>(); + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, duk_idx_t) + > + >('duk_get_pointer'); + late final _duk_get_pointer = + _duk_get_pointerPtr + .asFunction< + ffi.Pointer Function(ffi.Pointer, int) + >(); - duk_c_function duk_get_c_function( - ffi.Pointer ctx, - int idx, - ) { - return _duk_get_c_function( - ctx, - idx, - ); + duk_c_function duk_get_c_function(ffi.Pointer ctx, int idx) { + return _duk_get_c_function(ctx, idx); } late final _duk_get_c_functionPtr = _lookup< - ffi.NativeFunction< - duk_c_function Function( - ffi.Pointer, duk_idx_t)>>('duk_get_c_function'); - late final _duk_get_c_function = _duk_get_c_functionPtr - .asFunction, int)>(); + ffi.NativeFunction< + duk_c_function Function(ffi.Pointer, duk_idx_t) + > + >('duk_get_c_function'); + late final _duk_get_c_function = + _duk_get_c_functionPtr + .asFunction, int)>(); ffi.Pointer duk_get_context( ffi.Pointer ctx, int idx, ) { - return _duk_get_context( - ctx, - idx, - ); + return _duk_get_context(ctx, idx); } late final _duk_get_contextPtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function( - ffi.Pointer, duk_idx_t)>>('duk_get_context'); - late final _duk_get_context = _duk_get_contextPtr.asFunction< - ffi.Pointer Function(ffi.Pointer, int)>(); + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, duk_idx_t) + > + >('duk_get_context'); + late final _duk_get_context = + _duk_get_contextPtr + .asFunction< + ffi.Pointer Function(ffi.Pointer, int) + >(); - ffi.Pointer duk_get_heapptr( - ffi.Pointer ctx, - int idx, - ) { - return _duk_get_heapptr( - ctx, - idx, - ); + ffi.Pointer duk_get_heapptr(ffi.Pointer ctx, int idx) { + return _duk_get_heapptr(ctx, idx); } late final _duk_get_heapptrPtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function( - ffi.Pointer, duk_idx_t)>>('duk_get_heapptr'); - late final _duk_get_heapptr = _duk_get_heapptrPtr.asFunction< - ffi.Pointer Function(ffi.Pointer, int)>(); + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, duk_idx_t) + > + >('duk_get_heapptr'); + late final _duk_get_heapptr = + _duk_get_heapptrPtr + .asFunction< + ffi.Pointer Function(ffi.Pointer, int) + >(); /// Get-with-explicit default operations: like get operations but with an /// explicit default value. @@ -2125,96 +1849,95 @@ class DuktapeBindings { int idx, int def_value, ) { - return _duk_get_boolean_default( - ctx, - idx, - def_value, - ); + return _duk_get_boolean_default(ctx, idx, def_value); } late final _duk_get_boolean_defaultPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function(ffi.Pointer, duk_idx_t, - duk_bool_t)>>('duk_get_boolean_default'); - late final _duk_get_boolean_default = _duk_get_boolean_defaultPtr - .asFunction, int, int)>(); + ffi.NativeFunction< + duk_bool_t Function(ffi.Pointer, duk_idx_t, duk_bool_t) + > + >('duk_get_boolean_default'); + late final _duk_get_boolean_default = + _duk_get_boolean_defaultPtr + .asFunction, int, int)>(); double duk_get_number_default( ffi.Pointer ctx, int idx, double def_value, ) { - return _duk_get_number_default( - ctx, - idx, - def_value, - ); + return _duk_get_number_default(ctx, idx, def_value); } late final _duk_get_number_defaultPtr = _lookup< - ffi.NativeFunction< - duk_double_t Function(ffi.Pointer, duk_idx_t, - duk_double_t)>>('duk_get_number_default'); - late final _duk_get_number_default = _duk_get_number_defaultPtr - .asFunction, int, double)>(); + ffi.NativeFunction< + duk_double_t Function(ffi.Pointer, duk_idx_t, duk_double_t) + > + >('duk_get_number_default'); + late final _duk_get_number_default = + _duk_get_number_defaultPtr + .asFunction, int, double)>(); int duk_get_int_default( ffi.Pointer ctx, int idx, int def_value, ) { - return _duk_get_int_default( - ctx, - idx, - def_value, - ); + return _duk_get_int_default(ctx, idx, def_value); } late final _duk_get_int_defaultPtr = _lookup< - ffi.NativeFunction< - duk_int_t Function(ffi.Pointer, duk_idx_t, - duk_int_t)>>('duk_get_int_default'); - late final _duk_get_int_default = _duk_get_int_defaultPtr - .asFunction, int, int)>(); + ffi.NativeFunction< + duk_int_t Function(ffi.Pointer, duk_idx_t, duk_int_t) + > + >('duk_get_int_default'); + late final _duk_get_int_default = + _duk_get_int_defaultPtr + .asFunction, int, int)>(); int duk_get_uint_default( ffi.Pointer ctx, int idx, int def_value, ) { - return _duk_get_uint_default( - ctx, - idx, - def_value, - ); + return _duk_get_uint_default(ctx, idx, def_value); } late final _duk_get_uint_defaultPtr = _lookup< - ffi.NativeFunction< - duk_uint_t Function(ffi.Pointer, duk_idx_t, - duk_uint_t)>>('duk_get_uint_default'); - late final _duk_get_uint_default = _duk_get_uint_defaultPtr - .asFunction, int, int)>(); + ffi.NativeFunction< + duk_uint_t Function(ffi.Pointer, duk_idx_t, duk_uint_t) + > + >('duk_get_uint_default'); + late final _duk_get_uint_default = + _duk_get_uint_defaultPtr + .asFunction, int, int)>(); ffi.Pointer duk_get_string_default( ffi.Pointer ctx, int idx, ffi.Pointer def_value, ) { - return _duk_get_string_default( - ctx, - idx, - def_value, - ); + return _duk_get_string_default(ctx, idx, def_value); } late final _duk_get_string_defaultPtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function(ffi.Pointer, duk_idx_t, - ffi.Pointer)>>('duk_get_string_default'); - late final _duk_get_string_default = _duk_get_string_defaultPtr.asFunction< + ffi.NativeFunction< ffi.Pointer Function( - ffi.Pointer, int, ffi.Pointer)>(); + ffi.Pointer, + duk_idx_t, + ffi.Pointer, + ) + > + >('duk_get_string_default'); + late final _duk_get_string_default = + _duk_get_string_defaultPtr + .asFunction< + ffi.Pointer Function( + ffi.Pointer, + int, + ffi.Pointer, + ) + >(); ffi.Pointer duk_get_lstring_default( ffi.Pointer ctx, @@ -2223,26 +1946,31 @@ class DuktapeBindings { ffi.Pointer def_ptr, int def_len, ) { - return _duk_get_lstring_default( - ctx, - idx, - out_len, - def_ptr, - def_len, - ); + return _duk_get_lstring_default(ctx, idx, out_len, def_ptr, def_len); } late final _duk_get_lstring_defaultPtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function( + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + duk_idx_t, + ffi.Pointer, + ffi.Pointer, + duk_size_t, + ) + > + >('duk_get_lstring_default'); + late final _duk_get_lstring_default = + _duk_get_lstring_defaultPtr + .asFunction< + ffi.Pointer Function( ffi.Pointer, - duk_idx_t, + int, ffi.Pointer, ffi.Pointer, - duk_size_t)>>('duk_get_lstring_default'); - late final _duk_get_lstring_default = _duk_get_lstring_defaultPtr.asFunction< - ffi.Pointer Function(ffi.Pointer, int, - ffi.Pointer, ffi.Pointer, int)>(); + int, + ) + >(); ffi.Pointer duk_get_buffer_default( ffi.Pointer ctx, @@ -2251,26 +1979,31 @@ class DuktapeBindings { ffi.Pointer def_ptr, int def_len, ) { - return _duk_get_buffer_default( - ctx, - idx, - out_size, - def_ptr, - def_len, - ); + return _duk_get_buffer_default(ctx, idx, out_size, def_ptr, def_len); } late final _duk_get_buffer_defaultPtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function( + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + duk_idx_t, + ffi.Pointer, + ffi.Pointer, + duk_size_t, + ) + > + >('duk_get_buffer_default'); + late final _duk_get_buffer_default = + _duk_get_buffer_defaultPtr + .asFunction< + ffi.Pointer Function( ffi.Pointer, - duk_idx_t, + int, ffi.Pointer, ffi.Pointer, - duk_size_t)>>('duk_get_buffer_default'); - late final _duk_get_buffer_default = _duk_get_buffer_defaultPtr.asFunction< - ffi.Pointer Function(ffi.Pointer, int, - ffi.Pointer, ffi.Pointer, int)>(); + int, + ) + >(); ffi.Pointer duk_get_buffer_data_default( ffi.Pointer ctx, @@ -2279,207 +2012,225 @@ class DuktapeBindings { ffi.Pointer def_ptr, int def_len, ) { - return _duk_get_buffer_data_default( - ctx, - idx, - out_size, - def_ptr, - def_len, - ); + return _duk_get_buffer_data_default(ctx, idx, out_size, def_ptr, def_len); } late final _duk_get_buffer_data_defaultPtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function( + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + duk_idx_t, + ffi.Pointer, + ffi.Pointer, + duk_size_t, + ) + > + >('duk_get_buffer_data_default'); + late final _duk_get_buffer_data_default = + _duk_get_buffer_data_defaultPtr + .asFunction< + ffi.Pointer Function( ffi.Pointer, - duk_idx_t, + int, ffi.Pointer, ffi.Pointer, - duk_size_t)>>('duk_get_buffer_data_default'); - late final _duk_get_buffer_data_default = - _duk_get_buffer_data_defaultPtr.asFunction< - ffi.Pointer Function(ffi.Pointer, int, - ffi.Pointer, ffi.Pointer, int)>(); + int, + ) + >(); ffi.Pointer duk_get_pointer_default( ffi.Pointer ctx, int idx, ffi.Pointer def_value, ) { - return _duk_get_pointer_default( - ctx, - idx, - def_value, - ); + return _duk_get_pointer_default(ctx, idx, def_value); } late final _duk_get_pointer_defaultPtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function(ffi.Pointer, duk_idx_t, - ffi.Pointer)>>('duk_get_pointer_default'); - late final _duk_get_pointer_default = _duk_get_pointer_defaultPtr.asFunction< + ffi.NativeFunction< ffi.Pointer Function( - ffi.Pointer, int, ffi.Pointer)>(); + ffi.Pointer, + duk_idx_t, + ffi.Pointer, + ) + > + >('duk_get_pointer_default'); + late final _duk_get_pointer_default = + _duk_get_pointer_defaultPtr + .asFunction< + ffi.Pointer Function( + ffi.Pointer, + int, + ffi.Pointer, + ) + >(); duk_c_function duk_get_c_function_default( ffi.Pointer ctx, int idx, duk_c_function def_value, ) { - return _duk_get_c_function_default( - ctx, - idx, - def_value, - ); + return _duk_get_c_function_default(ctx, idx, def_value); } late final _duk_get_c_function_defaultPtr = _lookup< - ffi.NativeFunction< - duk_c_function Function(ffi.Pointer, duk_idx_t, - duk_c_function)>>('duk_get_c_function_default'); + ffi.NativeFunction< + duk_c_function Function( + ffi.Pointer, + duk_idx_t, + duk_c_function, + ) + > + >('duk_get_c_function_default'); late final _duk_get_c_function_default = - _duk_get_c_function_defaultPtr.asFunction< - duk_c_function Function( - ffi.Pointer, int, duk_c_function)>(); + _duk_get_c_function_defaultPtr + .asFunction< + duk_c_function Function( + ffi.Pointer, + int, + duk_c_function, + ) + >(); ffi.Pointer duk_get_context_default( ffi.Pointer ctx, int idx, ffi.Pointer def_value, ) { - return _duk_get_context_default( - ctx, - idx, - def_value, - ); + return _duk_get_context_default(ctx, idx, def_value); } late final _duk_get_context_defaultPtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function(ffi.Pointer, duk_idx_t, - ffi.Pointer)>>('duk_get_context_default'); - late final _duk_get_context_default = _duk_get_context_defaultPtr.asFunction< + ffi.NativeFunction< ffi.Pointer Function( - ffi.Pointer, int, ffi.Pointer)>(); + ffi.Pointer, + duk_idx_t, + ffi.Pointer, + ) + > + >('duk_get_context_default'); + late final _duk_get_context_default = + _duk_get_context_defaultPtr + .asFunction< + ffi.Pointer Function( + ffi.Pointer, + int, + ffi.Pointer, + ) + >(); ffi.Pointer duk_get_heapptr_default( ffi.Pointer ctx, int idx, ffi.Pointer def_value, ) { - return _duk_get_heapptr_default( - ctx, - idx, - def_value, - ); + return _duk_get_heapptr_default(ctx, idx, def_value); } late final _duk_get_heapptr_defaultPtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function(ffi.Pointer, duk_idx_t, - ffi.Pointer)>>('duk_get_heapptr_default'); - late final _duk_get_heapptr_default = _duk_get_heapptr_defaultPtr.asFunction< + ffi.NativeFunction< ffi.Pointer Function( - ffi.Pointer, int, ffi.Pointer)>(); + ffi.Pointer, + duk_idx_t, + ffi.Pointer, + ) + > + >('duk_get_heapptr_default'); + late final _duk_get_heapptr_default = + _duk_get_heapptr_defaultPtr + .asFunction< + ffi.Pointer Function( + ffi.Pointer, + int, + ffi.Pointer, + ) + >(); /// Opt operations: like require operations but with an explicit default value /// when value is undefined or index is invalid, null and non-matching types /// cause a TypeError. - int duk_opt_boolean( - ffi.Pointer ctx, - int idx, - int def_value, - ) { - return _duk_opt_boolean( - ctx, - idx, - def_value, - ); + int duk_opt_boolean(ffi.Pointer ctx, int idx, int def_value) { + return _duk_opt_boolean(ctx, idx, def_value); } late final _duk_opt_booleanPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function(ffi.Pointer, duk_idx_t, - duk_bool_t)>>('duk_opt_boolean'); - late final _duk_opt_boolean = _duk_opt_booleanPtr - .asFunction, int, int)>(); + ffi.NativeFunction< + duk_bool_t Function(ffi.Pointer, duk_idx_t, duk_bool_t) + > + >('duk_opt_boolean'); + late final _duk_opt_boolean = + _duk_opt_booleanPtr + .asFunction, int, int)>(); double duk_opt_number( ffi.Pointer ctx, int idx, double def_value, ) { - return _duk_opt_number( - ctx, - idx, - def_value, - ); + return _duk_opt_number(ctx, idx, def_value); } late final _duk_opt_numberPtr = _lookup< - ffi.NativeFunction< - duk_double_t Function(ffi.Pointer, duk_idx_t, - duk_double_t)>>('duk_opt_number'); - late final _duk_opt_number = _duk_opt_numberPtr - .asFunction, int, double)>(); + ffi.NativeFunction< + duk_double_t Function(ffi.Pointer, duk_idx_t, duk_double_t) + > + >('duk_opt_number'); + late final _duk_opt_number = + _duk_opt_numberPtr + .asFunction, int, double)>(); - int duk_opt_int( - ffi.Pointer ctx, - int idx, - int def_value, - ) { - return _duk_opt_int( - ctx, - idx, - def_value, - ); + int duk_opt_int(ffi.Pointer ctx, int idx, int def_value) { + return _duk_opt_int(ctx, idx, def_value); } late final _duk_opt_intPtr = _lookup< - ffi.NativeFunction< - duk_int_t Function( - ffi.Pointer, duk_idx_t, duk_int_t)>>('duk_opt_int'); - late final _duk_opt_int = _duk_opt_intPtr - .asFunction, int, int)>(); + ffi.NativeFunction< + duk_int_t Function(ffi.Pointer, duk_idx_t, duk_int_t) + > + >('duk_opt_int'); + late final _duk_opt_int = + _duk_opt_intPtr + .asFunction, int, int)>(); - int duk_opt_uint( - ffi.Pointer ctx, - int idx, - int def_value, - ) { - return _duk_opt_uint( - ctx, - idx, - def_value, - ); + int duk_opt_uint(ffi.Pointer ctx, int idx, int def_value) { + return _duk_opt_uint(ctx, idx, def_value); } late final _duk_opt_uintPtr = _lookup< - ffi.NativeFunction< - duk_uint_t Function(ffi.Pointer, duk_idx_t, - duk_uint_t)>>('duk_opt_uint'); - late final _duk_opt_uint = _duk_opt_uintPtr - .asFunction, int, int)>(); + ffi.NativeFunction< + duk_uint_t Function(ffi.Pointer, duk_idx_t, duk_uint_t) + > + >('duk_opt_uint'); + late final _duk_opt_uint = + _duk_opt_uintPtr + .asFunction, int, int)>(); ffi.Pointer duk_opt_string( ffi.Pointer ctx, int idx, ffi.Pointer def_ptr, ) { - return _duk_opt_string( - ctx, - idx, - def_ptr, - ); + return _duk_opt_string(ctx, idx, def_ptr); } late final _duk_opt_stringPtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function(ffi.Pointer, duk_idx_t, - ffi.Pointer)>>('duk_opt_string'); - late final _duk_opt_string = _duk_opt_stringPtr.asFunction< + ffi.NativeFunction< ffi.Pointer Function( - ffi.Pointer, int, ffi.Pointer)>(); + ffi.Pointer, + duk_idx_t, + ffi.Pointer, + ) + > + >('duk_opt_string'); + late final _duk_opt_string = + _duk_opt_stringPtr + .asFunction< + ffi.Pointer Function( + ffi.Pointer, + int, + ffi.Pointer, + ) + >(); ffi.Pointer duk_opt_lstring( ffi.Pointer ctx, @@ -2488,26 +2239,31 @@ class DuktapeBindings { ffi.Pointer def_ptr, int def_len, ) { - return _duk_opt_lstring( - ctx, - idx, - out_len, - def_ptr, - def_len, - ); + return _duk_opt_lstring(ctx, idx, out_len, def_ptr, def_len); } late final _duk_opt_lstringPtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function( + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + duk_idx_t, + ffi.Pointer, + ffi.Pointer, + duk_size_t, + ) + > + >('duk_opt_lstring'); + late final _duk_opt_lstring = + _duk_opt_lstringPtr + .asFunction< + ffi.Pointer Function( ffi.Pointer, - duk_idx_t, + int, ffi.Pointer, ffi.Pointer, - duk_size_t)>>('duk_opt_lstring'); - late final _duk_opt_lstring = _duk_opt_lstringPtr.asFunction< - ffi.Pointer Function(ffi.Pointer, int, - ffi.Pointer, ffi.Pointer, int)>(); + int, + ) + >(); ffi.Pointer duk_opt_buffer( ffi.Pointer ctx, @@ -2516,26 +2272,31 @@ class DuktapeBindings { ffi.Pointer def_ptr, int def_size, ) { - return _duk_opt_buffer( - ctx, - idx, - out_size, - def_ptr, - def_size, - ); + return _duk_opt_buffer(ctx, idx, out_size, def_ptr, def_size); } late final _duk_opt_bufferPtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function( + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + duk_idx_t, + ffi.Pointer, + ffi.Pointer, + duk_size_t, + ) + > + >('duk_opt_buffer'); + late final _duk_opt_buffer = + _duk_opt_bufferPtr + .asFunction< + ffi.Pointer Function( ffi.Pointer, - duk_idx_t, + int, ffi.Pointer, ffi.Pointer, - duk_size_t)>>('duk_opt_buffer'); - late final _duk_opt_buffer = _duk_opt_bufferPtr.asFunction< - ffi.Pointer Function(ffi.Pointer, int, - ffi.Pointer, ffi.Pointer, int)>(); + int, + ) + >(); ffi.Pointer duk_opt_buffer_data( ffi.Pointer ctx, @@ -2544,611 +2305,569 @@ class DuktapeBindings { ffi.Pointer def_ptr, int def_size, ) { - return _duk_opt_buffer_data( - ctx, - idx, - out_size, - def_ptr, - def_size, - ); + return _duk_opt_buffer_data(ctx, idx, out_size, def_ptr, def_size); } late final _duk_opt_buffer_dataPtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function( + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + duk_idx_t, + ffi.Pointer, + ffi.Pointer, + duk_size_t, + ) + > + >('duk_opt_buffer_data'); + late final _duk_opt_buffer_data = + _duk_opt_buffer_dataPtr + .asFunction< + ffi.Pointer Function( ffi.Pointer, - duk_idx_t, + int, ffi.Pointer, ffi.Pointer, - duk_size_t)>>('duk_opt_buffer_data'); - late final _duk_opt_buffer_data = _duk_opt_buffer_dataPtr.asFunction< - ffi.Pointer Function(ffi.Pointer, int, - ffi.Pointer, ffi.Pointer, int)>(); + int, + ) + >(); ffi.Pointer duk_opt_pointer( ffi.Pointer ctx, int idx, ffi.Pointer def_value, ) { - return _duk_opt_pointer( - ctx, - idx, - def_value, - ); + return _duk_opt_pointer(ctx, idx, def_value); } late final _duk_opt_pointerPtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function(ffi.Pointer, duk_idx_t, - ffi.Pointer)>>('duk_opt_pointer'); - late final _duk_opt_pointer = _duk_opt_pointerPtr.asFunction< + ffi.NativeFunction< ffi.Pointer Function( - ffi.Pointer, int, ffi.Pointer)>(); + ffi.Pointer, + duk_idx_t, + ffi.Pointer, + ) + > + >('duk_opt_pointer'); + late final _duk_opt_pointer = + _duk_opt_pointerPtr + .asFunction< + ffi.Pointer Function( + ffi.Pointer, + int, + ffi.Pointer, + ) + >(); duk_c_function duk_opt_c_function( ffi.Pointer ctx, int idx, duk_c_function def_value, ) { - return _duk_opt_c_function( - ctx, - idx, - def_value, - ); + return _duk_opt_c_function(ctx, idx, def_value); } late final _duk_opt_c_functionPtr = _lookup< - ffi.NativeFunction< - duk_c_function Function(ffi.Pointer, duk_idx_t, - duk_c_function)>>('duk_opt_c_function'); - late final _duk_opt_c_function = _duk_opt_c_functionPtr.asFunction< - duk_c_function Function(ffi.Pointer, int, duk_c_function)>(); + ffi.NativeFunction< + duk_c_function Function( + ffi.Pointer, + duk_idx_t, + duk_c_function, + ) + > + >('duk_opt_c_function'); + late final _duk_opt_c_function = + _duk_opt_c_functionPtr + .asFunction< + duk_c_function Function( + ffi.Pointer, + int, + duk_c_function, + ) + >(); ffi.Pointer duk_opt_context( ffi.Pointer ctx, int idx, ffi.Pointer def_value, ) { - return _duk_opt_context( - ctx, - idx, - def_value, - ); + return _duk_opt_context(ctx, idx, def_value); } late final _duk_opt_contextPtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function(ffi.Pointer, duk_idx_t, - ffi.Pointer)>>('duk_opt_context'); - late final _duk_opt_context = _duk_opt_contextPtr.asFunction< + ffi.NativeFunction< ffi.Pointer Function( - ffi.Pointer, int, ffi.Pointer)>(); + ffi.Pointer, + duk_idx_t, + ffi.Pointer, + ) + > + >('duk_opt_context'); + late final _duk_opt_context = + _duk_opt_contextPtr + .asFunction< + ffi.Pointer Function( + ffi.Pointer, + int, + ffi.Pointer, + ) + >(); ffi.Pointer duk_opt_heapptr( ffi.Pointer ctx, int idx, ffi.Pointer def_value, ) { - return _duk_opt_heapptr( - ctx, - idx, - def_value, - ); + return _duk_opt_heapptr(ctx, idx, def_value); } late final _duk_opt_heapptrPtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function(ffi.Pointer, duk_idx_t, - ffi.Pointer)>>('duk_opt_heapptr'); - late final _duk_opt_heapptr = _duk_opt_heapptrPtr.asFunction< + ffi.NativeFunction< ffi.Pointer Function( - ffi.Pointer, int, ffi.Pointer)>(); + ffi.Pointer, + duk_idx_t, + ffi.Pointer, + ) + > + >('duk_opt_heapptr'); + late final _duk_opt_heapptr = + _duk_opt_heapptrPtr + .asFunction< + ffi.Pointer Function( + ffi.Pointer, + int, + ffi.Pointer, + ) + >(); - void duk_require_undefined( - ffi.Pointer ctx, - int idx, - ) { - return _duk_require_undefined( - ctx, - idx, - ); + void duk_require_undefined(ffi.Pointer ctx, int idx) { + return _duk_require_undefined(ctx, idx); } late final _duk_require_undefinedPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function( - ffi.Pointer, duk_idx_t)>>('duk_require_undefined'); - late final _duk_require_undefined = _duk_require_undefinedPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_require_undefined'); + late final _duk_require_undefined = + _duk_require_undefinedPtr + .asFunction, int)>(); - void duk_require_null( - ffi.Pointer ctx, - int idx, - ) { - return _duk_require_null( - ctx, - idx, - ); + void duk_require_null(ffi.Pointer ctx, int idx) { + return _duk_require_null(ctx, idx); } late final _duk_require_nullPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function( - ffi.Pointer, duk_idx_t)>>('duk_require_null'); - late final _duk_require_null = _duk_require_nullPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_require_null'); + late final _duk_require_null = + _duk_require_nullPtr + .asFunction, int)>(); - int duk_require_boolean( - ffi.Pointer ctx, - int idx, - ) { - return _duk_require_boolean( - ctx, - idx, - ); + int duk_require_boolean(ffi.Pointer ctx, int idx) { + return _duk_require_boolean(ctx, idx); } late final _duk_require_booleanPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function( - ffi.Pointer, duk_idx_t)>>('duk_require_boolean'); - late final _duk_require_boolean = _duk_require_booleanPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_require_boolean'); + late final _duk_require_boolean = + _duk_require_booleanPtr + .asFunction, int)>(); - double duk_require_number( - ffi.Pointer ctx, - int idx, - ) { - return _duk_require_number( - ctx, - idx, - ); + double duk_require_number(ffi.Pointer ctx, int idx) { + return _duk_require_number(ctx, idx); } late final _duk_require_numberPtr = _lookup< - ffi.NativeFunction< - duk_double_t Function( - ffi.Pointer, duk_idx_t)>>('duk_require_number'); - late final _duk_require_number = _duk_require_numberPtr - .asFunction, int)>(); + ffi.NativeFunction< + duk_double_t Function(ffi.Pointer, duk_idx_t) + > + >('duk_require_number'); + late final _duk_require_number = + _duk_require_numberPtr + .asFunction, int)>(); - int duk_require_int( - ffi.Pointer ctx, - int idx, - ) { - return _duk_require_int( - ctx, - idx, - ); + int duk_require_int(ffi.Pointer ctx, int idx) { + return _duk_require_int(ctx, idx); } late final _duk_require_intPtr = _lookup< - ffi.NativeFunction< - duk_int_t Function( - ffi.Pointer, duk_idx_t)>>('duk_require_int'); - late final _duk_require_int = _duk_require_intPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_require_int'); + late final _duk_require_int = + _duk_require_intPtr + .asFunction, int)>(); - int duk_require_uint( - ffi.Pointer ctx, - int idx, - ) { - return _duk_require_uint( - ctx, - idx, - ); + int duk_require_uint(ffi.Pointer ctx, int idx) { + return _duk_require_uint(ctx, idx); } late final _duk_require_uintPtr = _lookup< - ffi.NativeFunction< - duk_uint_t Function( - ffi.Pointer, duk_idx_t)>>('duk_require_uint'); - late final _duk_require_uint = _duk_require_uintPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_require_uint'); + late final _duk_require_uint = + _duk_require_uintPtr + .asFunction, int)>(); ffi.Pointer duk_require_string( ffi.Pointer ctx, int idx, ) { - return _duk_require_string( - ctx, - idx, - ); + return _duk_require_string(ctx, idx); } late final _duk_require_stringPtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function( - ffi.Pointer, duk_idx_t)>>('duk_require_string'); - late final _duk_require_string = _duk_require_stringPtr.asFunction< - ffi.Pointer Function(ffi.Pointer, int)>(); + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, duk_idx_t) + > + >('duk_require_string'); + late final _duk_require_string = + _duk_require_stringPtr + .asFunction< + ffi.Pointer Function(ffi.Pointer, int) + >(); ffi.Pointer duk_require_lstring( ffi.Pointer ctx, int idx, ffi.Pointer out_len, ) { - return _duk_require_lstring( - ctx, - idx, - out_len, - ); + return _duk_require_lstring(ctx, idx, out_len); } late final _duk_require_lstringPtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function(ffi.Pointer, duk_idx_t, - ffi.Pointer)>>('duk_require_lstring'); - late final _duk_require_lstring = _duk_require_lstringPtr.asFunction< + ffi.NativeFunction< ffi.Pointer Function( - ffi.Pointer, int, ffi.Pointer)>(); + ffi.Pointer, + duk_idx_t, + ffi.Pointer, + ) + > + >('duk_require_lstring'); + late final _duk_require_lstring = + _duk_require_lstringPtr + .asFunction< + ffi.Pointer Function( + ffi.Pointer, + int, + ffi.Pointer, + ) + >(); - void duk_require_object( - ffi.Pointer ctx, - int idx, - ) { - return _duk_require_object( - ctx, - idx, - ); + void duk_require_object(ffi.Pointer ctx, int idx) { + return _duk_require_object(ctx, idx); } late final _duk_require_objectPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function( - ffi.Pointer, duk_idx_t)>>('duk_require_object'); - late final _duk_require_object = _duk_require_objectPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_require_object'); + late final _duk_require_object = + _duk_require_objectPtr + .asFunction, int)>(); ffi.Pointer duk_require_buffer( ffi.Pointer ctx, int idx, ffi.Pointer out_size, ) { - return _duk_require_buffer( - ctx, - idx, - out_size, - ); + return _duk_require_buffer(ctx, idx, out_size); } late final _duk_require_bufferPtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function(ffi.Pointer, duk_idx_t, - ffi.Pointer)>>('duk_require_buffer'); - late final _duk_require_buffer = _duk_require_bufferPtr.asFunction< + ffi.NativeFunction< ffi.Pointer Function( - ffi.Pointer, int, ffi.Pointer)>(); + ffi.Pointer, + duk_idx_t, + ffi.Pointer, + ) + > + >('duk_require_buffer'); + late final _duk_require_buffer = + _duk_require_bufferPtr + .asFunction< + ffi.Pointer Function( + ffi.Pointer, + int, + ffi.Pointer, + ) + >(); ffi.Pointer duk_require_buffer_data( ffi.Pointer ctx, int idx, ffi.Pointer out_size, ) { - return _duk_require_buffer_data( - ctx, - idx, - out_size, - ); + return _duk_require_buffer_data(ctx, idx, out_size); } late final _duk_require_buffer_dataPtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function(ffi.Pointer, duk_idx_t, - ffi.Pointer)>>('duk_require_buffer_data'); - late final _duk_require_buffer_data = _duk_require_buffer_dataPtr.asFunction< + ffi.NativeFunction< ffi.Pointer Function( - ffi.Pointer, int, ffi.Pointer)>(); + ffi.Pointer, + duk_idx_t, + ffi.Pointer, + ) + > + >('duk_require_buffer_data'); + late final _duk_require_buffer_data = + _duk_require_buffer_dataPtr + .asFunction< + ffi.Pointer Function( + ffi.Pointer, + int, + ffi.Pointer, + ) + >(); ffi.Pointer duk_require_pointer( ffi.Pointer ctx, int idx, - ) { - return _duk_require_pointer( - ctx, - idx, - ); + ) { + return _duk_require_pointer(ctx, idx); } late final _duk_require_pointerPtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function( - ffi.Pointer, duk_idx_t)>>('duk_require_pointer'); - late final _duk_require_pointer = _duk_require_pointerPtr.asFunction< - ffi.Pointer Function(ffi.Pointer, int)>(); + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, duk_idx_t) + > + >('duk_require_pointer'); + late final _duk_require_pointer = + _duk_require_pointerPtr + .asFunction< + ffi.Pointer Function(ffi.Pointer, int) + >(); - duk_c_function duk_require_c_function( - ffi.Pointer ctx, - int idx, - ) { - return _duk_require_c_function( - ctx, - idx, - ); + duk_c_function duk_require_c_function(ffi.Pointer ctx, int idx) { + return _duk_require_c_function(ctx, idx); } late final _duk_require_c_functionPtr = _lookup< - ffi.NativeFunction< - duk_c_function Function( - ffi.Pointer, duk_idx_t)>>('duk_require_c_function'); - late final _duk_require_c_function = _duk_require_c_functionPtr - .asFunction, int)>(); + ffi.NativeFunction< + duk_c_function Function(ffi.Pointer, duk_idx_t) + > + >('duk_require_c_function'); + late final _duk_require_c_function = + _duk_require_c_functionPtr + .asFunction, int)>(); ffi.Pointer duk_require_context( ffi.Pointer ctx, int idx, ) { - return _duk_require_context( - ctx, - idx, - ); + return _duk_require_context(ctx, idx); } late final _duk_require_contextPtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function( - ffi.Pointer, duk_idx_t)>>('duk_require_context'); - late final _duk_require_context = _duk_require_contextPtr.asFunction< - ffi.Pointer Function(ffi.Pointer, int)>(); + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, duk_idx_t) + > + >('duk_require_context'); + late final _duk_require_context = + _duk_require_contextPtr + .asFunction< + ffi.Pointer Function(ffi.Pointer, int) + >(); - void duk_require_function( - ffi.Pointer ctx, - int idx, - ) { - return _duk_require_function( - ctx, - idx, - ); + void duk_require_function(ffi.Pointer ctx, int idx) { + return _duk_require_function(ctx, idx); } late final _duk_require_functionPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function( - ffi.Pointer, duk_idx_t)>>('duk_require_function'); - late final _duk_require_function = _duk_require_functionPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_require_function'); + late final _duk_require_function = + _duk_require_functionPtr + .asFunction, int)>(); - void duk_require_constructor_call( - ffi.Pointer ctx, - ) { - return _duk_require_constructor_call( - ctx, - ); + void duk_require_constructor_call(ffi.Pointer ctx) { + return _duk_require_constructor_call(ctx); } late final _duk_require_constructor_callPtr = _lookup)>>( - 'duk_require_constructor_call'); - late final _duk_require_constructor_call = _duk_require_constructor_callPtr - .asFunction)>(); + 'duk_require_constructor_call', + ); + late final _duk_require_constructor_call = + _duk_require_constructor_callPtr + .asFunction)>(); - void duk_require_constructable( - ffi.Pointer ctx, - int idx, - ) { - return _duk_require_constructable( - ctx, - idx, - ); + void duk_require_constructable(ffi.Pointer ctx, int idx) { + return _duk_require_constructable(ctx, idx); } late final _duk_require_constructablePtr = _lookup< - ffi.NativeFunction< - ffi.Void Function(ffi.Pointer, - duk_idx_t)>>('duk_require_constructable'); - late final _duk_require_constructable = _duk_require_constructablePtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_require_constructable'); + late final _duk_require_constructable = + _duk_require_constructablePtr + .asFunction, int)>(); ffi.Pointer duk_require_heapptr( ffi.Pointer ctx, int idx, ) { - return _duk_require_heapptr( - ctx, - idx, - ); + return _duk_require_heapptr(ctx, idx); } late final _duk_require_heapptrPtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function( - ffi.Pointer, duk_idx_t)>>('duk_require_heapptr'); - late final _duk_require_heapptr = _duk_require_heapptrPtr.asFunction< - ffi.Pointer Function(ffi.Pointer, int)>(); + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, duk_idx_t) + > + >('duk_require_heapptr'); + late final _duk_require_heapptr = + _duk_require_heapptrPtr + .asFunction< + ffi.Pointer Function(ffi.Pointer, int) + >(); /// Coercion operations: in-place coercion, return coerced value where /// applicable. If index is invalid, throw error. Some coercions may /// throw an expected error (e.g. from a toString() or valueOf() call) /// or an internal error (e.g. from out of memory). - void duk_to_undefined( - ffi.Pointer ctx, - int idx, - ) { - return _duk_to_undefined( - ctx, - idx, - ); + void duk_to_undefined(ffi.Pointer ctx, int idx) { + return _duk_to_undefined(ctx, idx); } late final _duk_to_undefinedPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function( - ffi.Pointer, duk_idx_t)>>('duk_to_undefined'); - late final _duk_to_undefined = _duk_to_undefinedPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_to_undefined'); + late final _duk_to_undefined = + _duk_to_undefinedPtr + .asFunction, int)>(); - void duk_to_null( - ffi.Pointer ctx, - int idx, - ) { - return _duk_to_null( - ctx, - idx, - ); + void duk_to_null(ffi.Pointer ctx, int idx) { + return _duk_to_null(ctx, idx); } late final _duk_to_nullPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function( - ffi.Pointer, duk_idx_t)>>('duk_to_null'); - late final _duk_to_null = _duk_to_nullPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_to_null'); + late final _duk_to_null = + _duk_to_nullPtr + .asFunction, int)>(); - int duk_to_boolean( - ffi.Pointer ctx, - int idx, - ) { - return _duk_to_boolean( - ctx, - idx, - ); + int duk_to_boolean(ffi.Pointer ctx, int idx) { + return _duk_to_boolean(ctx, idx); } late final _duk_to_booleanPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function( - ffi.Pointer, duk_idx_t)>>('duk_to_boolean'); - late final _duk_to_boolean = _duk_to_booleanPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_to_boolean'); + late final _duk_to_boolean = + _duk_to_booleanPtr + .asFunction, int)>(); - double duk_to_number( - ffi.Pointer ctx, - int idx, - ) { - return _duk_to_number( - ctx, - idx, - ); + double duk_to_number(ffi.Pointer ctx, int idx) { + return _duk_to_number(ctx, idx); } late final _duk_to_numberPtr = _lookup< - ffi.NativeFunction< - duk_double_t Function( - ffi.Pointer, duk_idx_t)>>('duk_to_number'); - late final _duk_to_number = _duk_to_numberPtr - .asFunction, int)>(); + ffi.NativeFunction< + duk_double_t Function(ffi.Pointer, duk_idx_t) + > + >('duk_to_number'); + late final _duk_to_number = + _duk_to_numberPtr + .asFunction, int)>(); - int duk_to_int( - ffi.Pointer ctx, - int idx, - ) { - return _duk_to_int( - ctx, - idx, - ); + int duk_to_int(ffi.Pointer ctx, int idx) { + return _duk_to_int(ctx, idx); } late final _duk_to_intPtr = _lookup< - ffi.NativeFunction< - duk_int_t Function( - ffi.Pointer, duk_idx_t)>>('duk_to_int'); + ffi.NativeFunction, duk_idx_t)> + >('duk_to_int'); late final _duk_to_int = _duk_to_intPtr.asFunction, int)>(); - int duk_to_uint( - ffi.Pointer ctx, - int idx, - ) { - return _duk_to_uint( - ctx, - idx, - ); + int duk_to_uint(ffi.Pointer ctx, int idx) { + return _duk_to_uint(ctx, idx); } late final _duk_to_uintPtr = _lookup< - ffi.NativeFunction< - duk_uint_t Function( - ffi.Pointer, duk_idx_t)>>('duk_to_uint'); + ffi.NativeFunction, duk_idx_t)> + >('duk_to_uint'); late final _duk_to_uint = _duk_to_uintPtr.asFunction, int)>(); - int duk_to_int32( - ffi.Pointer ctx, - int idx, - ) { - return _duk_to_int32( - ctx, - idx, - ); + int duk_to_int32(ffi.Pointer ctx, int idx) { + return _duk_to_int32(ctx, idx); } late final _duk_to_int32Ptr = _lookup< - ffi.NativeFunction< - duk_int32_t Function( - ffi.Pointer, duk_idx_t)>>('duk_to_int32'); - late final _duk_to_int32 = _duk_to_int32Ptr - .asFunction, int)>(); + ffi.NativeFunction< + duk_int32_t Function(ffi.Pointer, duk_idx_t) + > + >('duk_to_int32'); + late final _duk_to_int32 = + _duk_to_int32Ptr + .asFunction, int)>(); - int duk_to_uint32( - ffi.Pointer ctx, - int idx, - ) { - return _duk_to_uint32( - ctx, - idx, - ); + int duk_to_uint32(ffi.Pointer ctx, int idx) { + return _duk_to_uint32(ctx, idx); } late final _duk_to_uint32Ptr = _lookup< - ffi.NativeFunction< - duk_uint32_t Function( - ffi.Pointer, duk_idx_t)>>('duk_to_uint32'); - late final _duk_to_uint32 = _duk_to_uint32Ptr - .asFunction, int)>(); + ffi.NativeFunction< + duk_uint32_t Function(ffi.Pointer, duk_idx_t) + > + >('duk_to_uint32'); + late final _duk_to_uint32 = + _duk_to_uint32Ptr + .asFunction, int)>(); - int duk_to_uint16( - ffi.Pointer ctx, - int idx, - ) { - return _duk_to_uint16( - ctx, - idx, - ); + int duk_to_uint16(ffi.Pointer ctx, int idx) { + return _duk_to_uint16(ctx, idx); } late final _duk_to_uint16Ptr = _lookup< - ffi.NativeFunction< - duk_uint16_t Function( - ffi.Pointer, duk_idx_t)>>('duk_to_uint16'); - late final _duk_to_uint16 = _duk_to_uint16Ptr - .asFunction, int)>(); + ffi.NativeFunction< + duk_uint16_t Function(ffi.Pointer, duk_idx_t) + > + >('duk_to_uint16'); + late final _duk_to_uint16 = + _duk_to_uint16Ptr + .asFunction, int)>(); - ffi.Pointer duk_to_string( - ffi.Pointer ctx, - int idx, - ) { - return _duk_to_string( - ctx, - idx, - ); + ffi.Pointer duk_to_string(ffi.Pointer ctx, int idx) { + return _duk_to_string(ctx, idx); } late final _duk_to_stringPtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function( - ffi.Pointer, duk_idx_t)>>('duk_to_string'); - late final _duk_to_string = _duk_to_stringPtr.asFunction< - ffi.Pointer Function(ffi.Pointer, int)>(); + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, duk_idx_t) + > + >('duk_to_string'); + late final _duk_to_string = + _duk_to_stringPtr + .asFunction< + ffi.Pointer Function(ffi.Pointer, int) + >(); ffi.Pointer duk_to_lstring( ffi.Pointer ctx, int idx, ffi.Pointer out_len, ) { - return _duk_to_lstring( - ctx, - idx, - out_len, - ); + return _duk_to_lstring(ctx, idx, out_len); } late final _duk_to_lstringPtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function(ffi.Pointer, duk_idx_t, - ffi.Pointer)>>('duk_to_lstring'); - late final _duk_to_lstring = _duk_to_lstringPtr.asFunction< + ffi.NativeFunction< ffi.Pointer Function( - ffi.Pointer, int, ffi.Pointer)>(); + ffi.Pointer, + duk_idx_t, + ffi.Pointer, + ) + > + >('duk_to_lstring'); + late final _duk_to_lstring = + _duk_to_lstringPtr + .asFunction< + ffi.Pointer Function( + ffi.Pointer, + int, + ffi.Pointer, + ) + >(); ffi.Pointer duk_to_buffer_raw( ffi.Pointer ctx, @@ -3156,74 +2875,68 @@ class DuktapeBindings { ffi.Pointer out_size, int flags, ) { - return _duk_to_buffer_raw( - ctx, - idx, - out_size, - flags, - ); + return _duk_to_buffer_raw(ctx, idx, out_size, flags); } late final _duk_to_buffer_rawPtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function(ffi.Pointer, duk_idx_t, - ffi.Pointer, duk_uint_t)>>('duk_to_buffer_raw'); - late final _duk_to_buffer_raw = _duk_to_buffer_rawPtr.asFunction< + ffi.NativeFunction< ffi.Pointer Function( - ffi.Pointer, int, ffi.Pointer, int)>(); + ffi.Pointer, + duk_idx_t, + ffi.Pointer, + duk_uint_t, + ) + > + >('duk_to_buffer_raw'); + late final _duk_to_buffer_raw = + _duk_to_buffer_rawPtr + .asFunction< + ffi.Pointer Function( + ffi.Pointer, + int, + ffi.Pointer, + int, + ) + >(); - ffi.Pointer duk_to_pointer( - ffi.Pointer ctx, - int idx, - ) { - return _duk_to_pointer( - ctx, - idx, - ); + ffi.Pointer duk_to_pointer(ffi.Pointer ctx, int idx) { + return _duk_to_pointer(ctx, idx); } late final _duk_to_pointerPtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function( - ffi.Pointer, duk_idx_t)>>('duk_to_pointer'); - late final _duk_to_pointer = _duk_to_pointerPtr.asFunction< - ffi.Pointer Function(ffi.Pointer, int)>(); + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, duk_idx_t) + > + >('duk_to_pointer'); + late final _duk_to_pointer = + _duk_to_pointerPtr + .asFunction< + ffi.Pointer Function(ffi.Pointer, int) + >(); - void duk_to_object( - ffi.Pointer ctx, - int idx, - ) { - return _duk_to_object( - ctx, - idx, - ); + void duk_to_object(ffi.Pointer ctx, int idx) { + return _duk_to_object(ctx, idx); } late final _duk_to_objectPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function( - ffi.Pointer, duk_idx_t)>>('duk_to_object'); - late final _duk_to_object = _duk_to_objectPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_to_object'); + late final _duk_to_object = + _duk_to_objectPtr + .asFunction, int)>(); - void duk_to_primitive( - ffi.Pointer ctx, - int idx, - int hint, - ) { - return _duk_to_primitive( - ctx, - idx, - hint, - ); + void duk_to_primitive(ffi.Pointer ctx, int idx, int hint) { + return _duk_to_primitive(ctx, idx, hint); } late final _duk_to_primitivePtr = _lookup< - ffi.NativeFunction< - ffi.Void Function(ffi.Pointer, duk_idx_t, - duk_int_t)>>('duk_to_primitive'); - late final _duk_to_primitive = _duk_to_primitivePtr - .asFunction, int, int)>(); + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, duk_idx_t, duk_int_t) + > + >('duk_to_primitive'); + late final _duk_to_primitive = + _duk_to_primitivePtr + .asFunction, int, int)>(); /// safe variants of a few coercion operations ffi.Pointer duk_safe_to_lstring( @@ -3231,249 +2944,222 @@ class DuktapeBindings { int idx, ffi.Pointer out_len, ) { - return _duk_safe_to_lstring( - ctx, - idx, - out_len, - ); + return _duk_safe_to_lstring(ctx, idx, out_len); } late final _duk_safe_to_lstringPtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function(ffi.Pointer, duk_idx_t, - ffi.Pointer)>>('duk_safe_to_lstring'); - late final _duk_safe_to_lstring = _duk_safe_to_lstringPtr.asFunction< + ffi.NativeFunction< ffi.Pointer Function( - ffi.Pointer, int, ffi.Pointer)>(); + ffi.Pointer, + duk_idx_t, + ffi.Pointer, + ) + > + >('duk_safe_to_lstring'); + late final _duk_safe_to_lstring = + _duk_safe_to_lstringPtr + .asFunction< + ffi.Pointer Function( + ffi.Pointer, + int, + ffi.Pointer, + ) + >(); ffi.Pointer duk_to_stacktrace( ffi.Pointer ctx, int idx, ) { - return _duk_to_stacktrace( - ctx, - idx, - ); + return _duk_to_stacktrace(ctx, idx); } late final _duk_to_stacktracePtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function( - ffi.Pointer, duk_idx_t)>>('duk_to_stacktrace'); - late final _duk_to_stacktrace = _duk_to_stacktracePtr.asFunction< - ffi.Pointer Function(ffi.Pointer, int)>(); + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, duk_idx_t) + > + >('duk_to_stacktrace'); + late final _duk_to_stacktrace = + _duk_to_stacktracePtr + .asFunction< + ffi.Pointer Function(ffi.Pointer, int) + >(); ffi.Pointer duk_safe_to_stacktrace( ffi.Pointer ctx, int idx, ) { - return _duk_safe_to_stacktrace( - ctx, - idx, - ); + return _duk_safe_to_stacktrace(ctx, idx); } late final _duk_safe_to_stacktracePtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function( - ffi.Pointer, duk_idx_t)>>('duk_safe_to_stacktrace'); - late final _duk_safe_to_stacktrace = _duk_safe_to_stacktracePtr.asFunction< - ffi.Pointer Function(ffi.Pointer, int)>(); + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, duk_idx_t) + > + >('duk_safe_to_stacktrace'); + late final _duk_safe_to_stacktrace = + _duk_safe_to_stacktracePtr + .asFunction< + ffi.Pointer Function(ffi.Pointer, int) + >(); /// Value length - int duk_get_length( - ffi.Pointer ctx, - int idx, - ) { - return _duk_get_length( - ctx, - idx, - ); + int duk_get_length(ffi.Pointer ctx, int idx) { + return _duk_get_length(ctx, idx); } late final _duk_get_lengthPtr = _lookup< - ffi.NativeFunction< - duk_size_t Function( - ffi.Pointer, duk_idx_t)>>('duk_get_length'); - late final _duk_get_length = _duk_get_lengthPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_get_length'); + late final _duk_get_length = + _duk_get_lengthPtr + .asFunction, int)>(); - void duk_set_length( - ffi.Pointer ctx, - int idx, - int len, - ) { - return _duk_set_length( - ctx, - idx, - len, - ); + void duk_set_length(ffi.Pointer ctx, int idx, int len) { + return _duk_set_length(ctx, idx, len); } late final _duk_set_lengthPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function(ffi.Pointer, duk_idx_t, - duk_size_t)>>('duk_set_length'); - late final _duk_set_length = _duk_set_lengthPtr - .asFunction, int, int)>(); + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, duk_idx_t, duk_size_t) + > + >('duk_set_length'); + late final _duk_set_length = + _duk_set_lengthPtr + .asFunction, int, int)>(); /// Misc conversion ffi.Pointer duk_base64_encode( ffi.Pointer ctx, int idx, ) { - return _duk_base64_encode( - ctx, - idx, - ); + return _duk_base64_encode(ctx, idx); } late final _duk_base64_encodePtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function( - ffi.Pointer, duk_idx_t)>>('duk_base64_encode'); - late final _duk_base64_encode = _duk_base64_encodePtr.asFunction< - ffi.Pointer Function(ffi.Pointer, int)>(); + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, duk_idx_t) + > + >('duk_base64_encode'); + late final _duk_base64_encode = + _duk_base64_encodePtr + .asFunction< + ffi.Pointer Function(ffi.Pointer, int) + >(); - void duk_base64_decode( - ffi.Pointer ctx, - int idx, - ) { - return _duk_base64_decode( - ctx, - idx, - ); + void duk_base64_decode(ffi.Pointer ctx, int idx) { + return _duk_base64_decode(ctx, idx); } late final _duk_base64_decodePtr = _lookup< - ffi.NativeFunction< - ffi.Void Function( - ffi.Pointer, duk_idx_t)>>('duk_base64_decode'); - late final _duk_base64_decode = _duk_base64_decodePtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_base64_decode'); + late final _duk_base64_decode = + _duk_base64_decodePtr + .asFunction, int)>(); - ffi.Pointer duk_hex_encode( - ffi.Pointer ctx, - int idx, - ) { - return _duk_hex_encode( - ctx, - idx, - ); + ffi.Pointer duk_hex_encode(ffi.Pointer ctx, int idx) { + return _duk_hex_encode(ctx, idx); } late final _duk_hex_encodePtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function( - ffi.Pointer, duk_idx_t)>>('duk_hex_encode'); - late final _duk_hex_encode = _duk_hex_encodePtr.asFunction< - ffi.Pointer Function(ffi.Pointer, int)>(); + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, duk_idx_t) + > + >('duk_hex_encode'); + late final _duk_hex_encode = + _duk_hex_encodePtr + .asFunction< + ffi.Pointer Function(ffi.Pointer, int) + >(); - void duk_hex_decode( - ffi.Pointer ctx, - int idx, - ) { - return _duk_hex_decode( - ctx, - idx, - ); + void duk_hex_decode(ffi.Pointer ctx, int idx) { + return _duk_hex_decode(ctx, idx); } late final _duk_hex_decodePtr = _lookup< - ffi.NativeFunction< - ffi.Void Function( - ffi.Pointer, duk_idx_t)>>('duk_hex_decode'); - late final _duk_hex_decode = _duk_hex_decodePtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_hex_decode'); + late final _duk_hex_decode = + _duk_hex_decodePtr + .asFunction, int)>(); - ffi.Pointer duk_json_encode( - ffi.Pointer ctx, - int idx, - ) { - return _duk_json_encode( - ctx, - idx, - ); + ffi.Pointer duk_json_encode(ffi.Pointer ctx, int idx) { + return _duk_json_encode(ctx, idx); } late final _duk_json_encodePtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function( - ffi.Pointer, duk_idx_t)>>('duk_json_encode'); - late final _duk_json_encode = _duk_json_encodePtr.asFunction< - ffi.Pointer Function(ffi.Pointer, int)>(); + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, duk_idx_t) + > + >('duk_json_encode'); + late final _duk_json_encode = + _duk_json_encodePtr + .asFunction< + ffi.Pointer Function(ffi.Pointer, int) + >(); - void duk_json_decode( - ffi.Pointer ctx, - int idx, - ) { - return _duk_json_decode( - ctx, - idx, - ); + void duk_json_decode(ffi.Pointer ctx, int idx) { + return _duk_json_decode(ctx, idx); } late final _duk_json_decodePtr = _lookup< - ffi.NativeFunction< - ffi.Void Function( - ffi.Pointer, duk_idx_t)>>('duk_json_decode'); - late final _duk_json_decode = _duk_json_decodePtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_json_decode'); + late final _duk_json_decode = + _duk_json_decodePtr + .asFunction, int)>(); void duk_cbor_encode( ffi.Pointer ctx, int idx, int encode_flags, ) { - return _duk_cbor_encode( - ctx, - idx, - encode_flags, - ); + return _duk_cbor_encode(ctx, idx, encode_flags); } late final _duk_cbor_encodePtr = _lookup< - ffi.NativeFunction< - ffi.Void Function(ffi.Pointer, duk_idx_t, - duk_uint_t)>>('duk_cbor_encode'); - late final _duk_cbor_encode = _duk_cbor_encodePtr - .asFunction, int, int)>(); + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, duk_idx_t, duk_uint_t) + > + >('duk_cbor_encode'); + late final _duk_cbor_encode = + _duk_cbor_encodePtr + .asFunction, int, int)>(); void duk_cbor_decode( ffi.Pointer ctx, int idx, int decode_flags, ) { - return _duk_cbor_decode( - ctx, - idx, - decode_flags, - ); + return _duk_cbor_decode(ctx, idx, decode_flags); } late final _duk_cbor_decodePtr = _lookup< - ffi.NativeFunction< - ffi.Void Function(ffi.Pointer, duk_idx_t, - duk_uint_t)>>('duk_cbor_decode'); - late final _duk_cbor_decode = _duk_cbor_decodePtr - .asFunction, int, int)>(); + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, duk_idx_t, duk_uint_t) + > + >('duk_cbor_decode'); + late final _duk_cbor_decode = + _duk_cbor_decodePtr + .asFunction, int, int)>(); ffi.Pointer duk_buffer_to_string( ffi.Pointer ctx, int idx, ) { - return _duk_buffer_to_string( - ctx, - idx, - ); + return _duk_buffer_to_string(ctx, idx); } late final _duk_buffer_to_stringPtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function( - ffi.Pointer, duk_idx_t)>>('duk_buffer_to_string'); - late final _duk_buffer_to_string = _duk_buffer_to_stringPtr.asFunction< - ffi.Pointer Function(ffi.Pointer, int)>(); + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, duk_idx_t) + > + >('duk_buffer_to_string'); + late final _duk_buffer_to_string = + _duk_buffer_to_stringPtr + .asFunction< + ffi.Pointer Function(ffi.Pointer, int) + >(); /// Buffer ffi.Pointer duk_resize_buffer( @@ -3481,39 +3167,50 @@ class DuktapeBindings { int idx, int new_size, ) { - return _duk_resize_buffer( - ctx, - idx, - new_size, - ); + return _duk_resize_buffer(ctx, idx, new_size); } late final _duk_resize_bufferPtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function(ffi.Pointer, duk_idx_t, - duk_size_t)>>('duk_resize_buffer'); - late final _duk_resize_buffer = _duk_resize_bufferPtr.asFunction< - ffi.Pointer Function(ffi.Pointer, int, int)>(); + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + duk_idx_t, + duk_size_t, + ) + > + >('duk_resize_buffer'); + late final _duk_resize_buffer = + _duk_resize_bufferPtr + .asFunction< + ffi.Pointer Function(ffi.Pointer, int, int) + >(); ffi.Pointer duk_steal_buffer( ffi.Pointer ctx, int idx, ffi.Pointer out_size, ) { - return _duk_steal_buffer( - ctx, - idx, - out_size, - ); + return _duk_steal_buffer(ctx, idx, out_size); } late final _duk_steal_bufferPtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function(ffi.Pointer, duk_idx_t, - ffi.Pointer)>>('duk_steal_buffer'); - late final _duk_steal_buffer = _duk_steal_bufferPtr.asFunction< + ffi.NativeFunction< ffi.Pointer Function( - ffi.Pointer, int, ffi.Pointer)>(); + ffi.Pointer, + duk_idx_t, + ffi.Pointer, + ) + > + >('duk_steal_buffer'); + late final _duk_steal_buffer = + _duk_steal_bufferPtr + .asFunction< + ffi.Pointer Function( + ffi.Pointer, + int, + ffi.Pointer, + ) + >(); void duk_config_buffer( ffi.Pointer ctx, @@ -3521,21 +3218,29 @@ class DuktapeBindings { ffi.Pointer ptr, int len, ) { - return _duk_config_buffer( - ctx, - idx, - ptr, - len, - ); + return _duk_config_buffer(ctx, idx, ptr, len); } late final _duk_config_bufferPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function(ffi.Pointer, duk_idx_t, - ffi.Pointer, duk_size_t)>>('duk_config_buffer'); - late final _duk_config_buffer = _duk_config_bufferPtr.asFunction< - void Function( - ffi.Pointer, int, ffi.Pointer, int)>(); + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer, + duk_idx_t, + ffi.Pointer, + duk_size_t, + ) + > + >('duk_config_buffer'); + late final _duk_config_buffer = + _duk_config_bufferPtr + .asFunction< + void Function( + ffi.Pointer, + int, + ffi.Pointer, + int, + ) + >(); /// Property access /// @@ -3544,41 +3249,39 @@ class DuktapeBindings { /// The _index variant takes an array index as a property name (e.g. 123 is /// equivalent to the key "123"). The _heapptr variant takes a raw, borrowed /// heap pointer. - int duk_get_prop( - ffi.Pointer ctx, - int obj_idx, - ) { - return _duk_get_prop( - ctx, - obj_idx, - ); + int duk_get_prop(ffi.Pointer ctx, int obj_idx) { + return _duk_get_prop(ctx, obj_idx); } late final _duk_get_propPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function( - ffi.Pointer, duk_idx_t)>>('duk_get_prop'); - late final _duk_get_prop = _duk_get_propPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_get_prop'); + late final _duk_get_prop = + _duk_get_propPtr + .asFunction, int)>(); int duk_get_prop_string( ffi.Pointer ctx, int obj_idx, ffi.Pointer key, ) { - return _duk_get_prop_string( - ctx, - obj_idx, - key, - ); + return _duk_get_prop_string(ctx, obj_idx, key); } late final _duk_get_prop_stringPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function(ffi.Pointer, duk_idx_t, - ffi.Pointer)>>('duk_get_prop_string'); - late final _duk_get_prop_string = _duk_get_prop_stringPtr.asFunction< - int Function(ffi.Pointer, int, ffi.Pointer)>(); + ffi.NativeFunction< + duk_bool_t Function( + ffi.Pointer, + duk_idx_t, + ffi.Pointer, + ) + > + >('duk_get_prop_string'); + late final _duk_get_prop_string = + _duk_get_prop_stringPtr + .asFunction< + int Function(ffi.Pointer, int, ffi.Pointer) + >(); int duk_get_prop_lstring( ffi.Pointer ctx, @@ -3586,21 +3289,29 @@ class DuktapeBindings { ffi.Pointer key, int key_len, ) { - return _duk_get_prop_lstring( - ctx, - obj_idx, - key, - key_len, - ); + return _duk_get_prop_lstring(ctx, obj_idx, key, key_len); } late final _duk_get_prop_lstringPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function(ffi.Pointer, duk_idx_t, - ffi.Pointer, duk_size_t)>>('duk_get_prop_lstring'); - late final _duk_get_prop_lstring = _duk_get_prop_lstringPtr.asFunction< - int Function( - ffi.Pointer, int, ffi.Pointer, int)>(); + ffi.NativeFunction< + duk_bool_t Function( + ffi.Pointer, + duk_idx_t, + ffi.Pointer, + duk_size_t, + ) + > + >('duk_get_prop_lstring'); + late final _duk_get_prop_lstring = + _duk_get_prop_lstringPtr + .asFunction< + int Function( + ffi.Pointer, + int, + ffi.Pointer, + int, + ) + >(); int duk_get_prop_literal_raw( ffi.Pointer ctx, @@ -3608,96 +3319,103 @@ class DuktapeBindings { ffi.Pointer key, int key_len, ) { - return _duk_get_prop_literal_raw( - ctx, - obj_idx, - key, - key_len, - ); + return _duk_get_prop_literal_raw(ctx, obj_idx, key, key_len); } late final _duk_get_prop_literal_rawPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function(ffi.Pointer, duk_idx_t, - ffi.Pointer, duk_size_t)>>('duk_get_prop_literal_raw'); + ffi.NativeFunction< + duk_bool_t Function( + ffi.Pointer, + duk_idx_t, + ffi.Pointer, + duk_size_t, + ) + > + >('duk_get_prop_literal_raw'); late final _duk_get_prop_literal_raw = - _duk_get_prop_literal_rawPtr.asFunction< - int Function( - ffi.Pointer, int, ffi.Pointer, int)>(); + _duk_get_prop_literal_rawPtr + .asFunction< + int Function( + ffi.Pointer, + int, + ffi.Pointer, + int, + ) + >(); int duk_get_prop_index( ffi.Pointer ctx, int obj_idx, int arr_idx, ) { - return _duk_get_prop_index( - ctx, - obj_idx, - arr_idx, - ); + return _duk_get_prop_index(ctx, obj_idx, arr_idx); } late final _duk_get_prop_indexPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function(ffi.Pointer, duk_idx_t, - duk_uarridx_t)>>('duk_get_prop_index'); - late final _duk_get_prop_index = _duk_get_prop_indexPtr - .asFunction, int, int)>(); + ffi.NativeFunction< + duk_bool_t Function(ffi.Pointer, duk_idx_t, duk_uarridx_t) + > + >('duk_get_prop_index'); + late final _duk_get_prop_index = + _duk_get_prop_indexPtr + .asFunction, int, int)>(); int duk_get_prop_heapptr( ffi.Pointer ctx, int obj_idx, ffi.Pointer ptr, ) { - return _duk_get_prop_heapptr( - ctx, - obj_idx, - ptr, - ); + return _duk_get_prop_heapptr(ctx, obj_idx, ptr); } late final _duk_get_prop_heapptrPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function(ffi.Pointer, duk_idx_t, - ffi.Pointer)>>('duk_get_prop_heapptr'); - late final _duk_get_prop_heapptr = _duk_get_prop_heapptrPtr.asFunction< - int Function(ffi.Pointer, int, ffi.Pointer)>(); - - int duk_put_prop( - ffi.Pointer ctx, - int obj_idx, - ) { - return _duk_put_prop( - ctx, - obj_idx, - ); + ffi.NativeFunction< + duk_bool_t Function( + ffi.Pointer, + duk_idx_t, + ffi.Pointer, + ) + > + >('duk_get_prop_heapptr'); + late final _duk_get_prop_heapptr = + _duk_get_prop_heapptrPtr + .asFunction< + int Function(ffi.Pointer, int, ffi.Pointer) + >(); + + int duk_put_prop(ffi.Pointer ctx, int obj_idx) { + return _duk_put_prop(ctx, obj_idx); } late final _duk_put_propPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function( - ffi.Pointer, duk_idx_t)>>('duk_put_prop'); - late final _duk_put_prop = _duk_put_propPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_put_prop'); + late final _duk_put_prop = + _duk_put_propPtr + .asFunction, int)>(); int duk_put_prop_string( ffi.Pointer ctx, int obj_idx, ffi.Pointer key, ) { - return _duk_put_prop_string( - ctx, - obj_idx, - key, - ); + return _duk_put_prop_string(ctx, obj_idx, key); } late final _duk_put_prop_stringPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function(ffi.Pointer, duk_idx_t, - ffi.Pointer)>>('duk_put_prop_string'); - late final _duk_put_prop_string = _duk_put_prop_stringPtr.asFunction< - int Function(ffi.Pointer, int, ffi.Pointer)>(); + ffi.NativeFunction< + duk_bool_t Function( + ffi.Pointer, + duk_idx_t, + ffi.Pointer, + ) + > + >('duk_put_prop_string'); + late final _duk_put_prop_string = + _duk_put_prop_stringPtr + .asFunction< + int Function(ffi.Pointer, int, ffi.Pointer) + >(); int duk_put_prop_lstring( ffi.Pointer ctx, @@ -3705,21 +3423,29 @@ class DuktapeBindings { ffi.Pointer key, int key_len, ) { - return _duk_put_prop_lstring( - ctx, - obj_idx, - key, - key_len, - ); + return _duk_put_prop_lstring(ctx, obj_idx, key, key_len); } late final _duk_put_prop_lstringPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function(ffi.Pointer, duk_idx_t, - ffi.Pointer, duk_size_t)>>('duk_put_prop_lstring'); - late final _duk_put_prop_lstring = _duk_put_prop_lstringPtr.asFunction< - int Function( - ffi.Pointer, int, ffi.Pointer, int)>(); + ffi.NativeFunction< + duk_bool_t Function( + ffi.Pointer, + duk_idx_t, + ffi.Pointer, + duk_size_t, + ) + > + >('duk_put_prop_lstring'); + late final _duk_put_prop_lstring = + _duk_put_prop_lstringPtr + .asFunction< + int Function( + ffi.Pointer, + int, + ffi.Pointer, + int, + ) + >(); int duk_put_prop_literal_raw( ffi.Pointer ctx, @@ -3727,96 +3453,103 @@ class DuktapeBindings { ffi.Pointer key, int key_len, ) { - return _duk_put_prop_literal_raw( - ctx, - obj_idx, - key, - key_len, - ); + return _duk_put_prop_literal_raw(ctx, obj_idx, key, key_len); } late final _duk_put_prop_literal_rawPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function(ffi.Pointer, duk_idx_t, - ffi.Pointer, duk_size_t)>>('duk_put_prop_literal_raw'); + ffi.NativeFunction< + duk_bool_t Function( + ffi.Pointer, + duk_idx_t, + ffi.Pointer, + duk_size_t, + ) + > + >('duk_put_prop_literal_raw'); late final _duk_put_prop_literal_raw = - _duk_put_prop_literal_rawPtr.asFunction< - int Function( - ffi.Pointer, int, ffi.Pointer, int)>(); + _duk_put_prop_literal_rawPtr + .asFunction< + int Function( + ffi.Pointer, + int, + ffi.Pointer, + int, + ) + >(); int duk_put_prop_index( ffi.Pointer ctx, int obj_idx, int arr_idx, ) { - return _duk_put_prop_index( - ctx, - obj_idx, - arr_idx, - ); + return _duk_put_prop_index(ctx, obj_idx, arr_idx); } late final _duk_put_prop_indexPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function(ffi.Pointer, duk_idx_t, - duk_uarridx_t)>>('duk_put_prop_index'); - late final _duk_put_prop_index = _duk_put_prop_indexPtr - .asFunction, int, int)>(); + ffi.NativeFunction< + duk_bool_t Function(ffi.Pointer, duk_idx_t, duk_uarridx_t) + > + >('duk_put_prop_index'); + late final _duk_put_prop_index = + _duk_put_prop_indexPtr + .asFunction, int, int)>(); int duk_put_prop_heapptr( ffi.Pointer ctx, int obj_idx, ffi.Pointer ptr, ) { - return _duk_put_prop_heapptr( - ctx, - obj_idx, - ptr, - ); + return _duk_put_prop_heapptr(ctx, obj_idx, ptr); } late final _duk_put_prop_heapptrPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function(ffi.Pointer, duk_idx_t, - ffi.Pointer)>>('duk_put_prop_heapptr'); - late final _duk_put_prop_heapptr = _duk_put_prop_heapptrPtr.asFunction< - int Function(ffi.Pointer, int, ffi.Pointer)>(); - - int duk_del_prop( - ffi.Pointer ctx, - int obj_idx, - ) { - return _duk_del_prop( - ctx, - obj_idx, - ); + ffi.NativeFunction< + duk_bool_t Function( + ffi.Pointer, + duk_idx_t, + ffi.Pointer, + ) + > + >('duk_put_prop_heapptr'); + late final _duk_put_prop_heapptr = + _duk_put_prop_heapptrPtr + .asFunction< + int Function(ffi.Pointer, int, ffi.Pointer) + >(); + + int duk_del_prop(ffi.Pointer ctx, int obj_idx) { + return _duk_del_prop(ctx, obj_idx); } late final _duk_del_propPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function( - ffi.Pointer, duk_idx_t)>>('duk_del_prop'); - late final _duk_del_prop = _duk_del_propPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_del_prop'); + late final _duk_del_prop = + _duk_del_propPtr + .asFunction, int)>(); int duk_del_prop_string( ffi.Pointer ctx, int obj_idx, ffi.Pointer key, ) { - return _duk_del_prop_string( - ctx, - obj_idx, - key, - ); + return _duk_del_prop_string(ctx, obj_idx, key); } late final _duk_del_prop_stringPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function(ffi.Pointer, duk_idx_t, - ffi.Pointer)>>('duk_del_prop_string'); - late final _duk_del_prop_string = _duk_del_prop_stringPtr.asFunction< - int Function(ffi.Pointer, int, ffi.Pointer)>(); + ffi.NativeFunction< + duk_bool_t Function( + ffi.Pointer, + duk_idx_t, + ffi.Pointer, + ) + > + >('duk_del_prop_string'); + late final _duk_del_prop_string = + _duk_del_prop_stringPtr + .asFunction< + int Function(ffi.Pointer, int, ffi.Pointer) + >(); int duk_del_prop_lstring( ffi.Pointer ctx, @@ -3824,21 +3557,29 @@ class DuktapeBindings { ffi.Pointer key, int key_len, ) { - return _duk_del_prop_lstring( - ctx, - obj_idx, - key, - key_len, - ); + return _duk_del_prop_lstring(ctx, obj_idx, key, key_len); } late final _duk_del_prop_lstringPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function(ffi.Pointer, duk_idx_t, - ffi.Pointer, duk_size_t)>>('duk_del_prop_lstring'); - late final _duk_del_prop_lstring = _duk_del_prop_lstringPtr.asFunction< - int Function( - ffi.Pointer, int, ffi.Pointer, int)>(); + ffi.NativeFunction< + duk_bool_t Function( + ffi.Pointer, + duk_idx_t, + ffi.Pointer, + duk_size_t, + ) + > + >('duk_del_prop_lstring'); + late final _duk_del_prop_lstring = + _duk_del_prop_lstringPtr + .asFunction< + int Function( + ffi.Pointer, + int, + ffi.Pointer, + int, + ) + >(); int duk_del_prop_literal_raw( ffi.Pointer ctx, @@ -3846,96 +3587,103 @@ class DuktapeBindings { ffi.Pointer key, int key_len, ) { - return _duk_del_prop_literal_raw( - ctx, - obj_idx, - key, - key_len, - ); + return _duk_del_prop_literal_raw(ctx, obj_idx, key, key_len); } late final _duk_del_prop_literal_rawPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function(ffi.Pointer, duk_idx_t, - ffi.Pointer, duk_size_t)>>('duk_del_prop_literal_raw'); + ffi.NativeFunction< + duk_bool_t Function( + ffi.Pointer, + duk_idx_t, + ffi.Pointer, + duk_size_t, + ) + > + >('duk_del_prop_literal_raw'); late final _duk_del_prop_literal_raw = - _duk_del_prop_literal_rawPtr.asFunction< - int Function( - ffi.Pointer, int, ffi.Pointer, int)>(); + _duk_del_prop_literal_rawPtr + .asFunction< + int Function( + ffi.Pointer, + int, + ffi.Pointer, + int, + ) + >(); int duk_del_prop_index( ffi.Pointer ctx, int obj_idx, int arr_idx, ) { - return _duk_del_prop_index( - ctx, - obj_idx, - arr_idx, - ); + return _duk_del_prop_index(ctx, obj_idx, arr_idx); } late final _duk_del_prop_indexPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function(ffi.Pointer, duk_idx_t, - duk_uarridx_t)>>('duk_del_prop_index'); - late final _duk_del_prop_index = _duk_del_prop_indexPtr - .asFunction, int, int)>(); + ffi.NativeFunction< + duk_bool_t Function(ffi.Pointer, duk_idx_t, duk_uarridx_t) + > + >('duk_del_prop_index'); + late final _duk_del_prop_index = + _duk_del_prop_indexPtr + .asFunction, int, int)>(); int duk_del_prop_heapptr( ffi.Pointer ctx, int obj_idx, ffi.Pointer ptr, ) { - return _duk_del_prop_heapptr( - ctx, - obj_idx, - ptr, - ); + return _duk_del_prop_heapptr(ctx, obj_idx, ptr); } late final _duk_del_prop_heapptrPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function(ffi.Pointer, duk_idx_t, - ffi.Pointer)>>('duk_del_prop_heapptr'); - late final _duk_del_prop_heapptr = _duk_del_prop_heapptrPtr.asFunction< - int Function(ffi.Pointer, int, ffi.Pointer)>(); - - int duk_has_prop( - ffi.Pointer ctx, - int obj_idx, - ) { - return _duk_has_prop( - ctx, - obj_idx, - ); + ffi.NativeFunction< + duk_bool_t Function( + ffi.Pointer, + duk_idx_t, + ffi.Pointer, + ) + > + >('duk_del_prop_heapptr'); + late final _duk_del_prop_heapptr = + _duk_del_prop_heapptrPtr + .asFunction< + int Function(ffi.Pointer, int, ffi.Pointer) + >(); + + int duk_has_prop(ffi.Pointer ctx, int obj_idx) { + return _duk_has_prop(ctx, obj_idx); } late final _duk_has_propPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function( - ffi.Pointer, duk_idx_t)>>('duk_has_prop'); - late final _duk_has_prop = _duk_has_propPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_has_prop'); + late final _duk_has_prop = + _duk_has_propPtr + .asFunction, int)>(); int duk_has_prop_string( ffi.Pointer ctx, int obj_idx, ffi.Pointer key, ) { - return _duk_has_prop_string( - ctx, - obj_idx, - key, - ); + return _duk_has_prop_string(ctx, obj_idx, key); } late final _duk_has_prop_stringPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function(ffi.Pointer, duk_idx_t, - ffi.Pointer)>>('duk_has_prop_string'); - late final _duk_has_prop_string = _duk_has_prop_stringPtr.asFunction< - int Function(ffi.Pointer, int, ffi.Pointer)>(); + ffi.NativeFunction< + duk_bool_t Function( + ffi.Pointer, + duk_idx_t, + ffi.Pointer, + ) + > + >('duk_has_prop_string'); + late final _duk_has_prop_string = + _duk_has_prop_stringPtr + .asFunction< + int Function(ffi.Pointer, int, ffi.Pointer) + >(); int duk_has_prop_lstring( ffi.Pointer ctx, @@ -3943,21 +3691,29 @@ class DuktapeBindings { ffi.Pointer key, int key_len, ) { - return _duk_has_prop_lstring( - ctx, - obj_idx, - key, - key_len, - ); + return _duk_has_prop_lstring(ctx, obj_idx, key, key_len); } late final _duk_has_prop_lstringPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function(ffi.Pointer, duk_idx_t, - ffi.Pointer, duk_size_t)>>('duk_has_prop_lstring'); - late final _duk_has_prop_lstring = _duk_has_prop_lstringPtr.asFunction< - int Function( - ffi.Pointer, int, ffi.Pointer, int)>(); + ffi.NativeFunction< + duk_bool_t Function( + ffi.Pointer, + duk_idx_t, + ffi.Pointer, + duk_size_t, + ) + > + >('duk_has_prop_lstring'); + late final _duk_has_prop_lstring = + _duk_has_prop_lstringPtr + .asFunction< + int Function( + ffi.Pointer, + int, + ffi.Pointer, + int, + ) + >(); int duk_has_prop_literal_raw( ffi.Pointer ctx, @@ -3965,415 +3721,378 @@ class DuktapeBindings { ffi.Pointer key, int key_len, ) { - return _duk_has_prop_literal_raw( - ctx, - obj_idx, - key, - key_len, - ); + return _duk_has_prop_literal_raw(ctx, obj_idx, key, key_len); } late final _duk_has_prop_literal_rawPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function(ffi.Pointer, duk_idx_t, - ffi.Pointer, duk_size_t)>>('duk_has_prop_literal_raw'); + ffi.NativeFunction< + duk_bool_t Function( + ffi.Pointer, + duk_idx_t, + ffi.Pointer, + duk_size_t, + ) + > + >('duk_has_prop_literal_raw'); late final _duk_has_prop_literal_raw = - _duk_has_prop_literal_rawPtr.asFunction< - int Function( - ffi.Pointer, int, ffi.Pointer, int)>(); + _duk_has_prop_literal_rawPtr + .asFunction< + int Function( + ffi.Pointer, + int, + ffi.Pointer, + int, + ) + >(); int duk_has_prop_index( ffi.Pointer ctx, int obj_idx, int arr_idx, ) { - return _duk_has_prop_index( - ctx, - obj_idx, - arr_idx, - ); + return _duk_has_prop_index(ctx, obj_idx, arr_idx); } late final _duk_has_prop_indexPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function(ffi.Pointer, duk_idx_t, - duk_uarridx_t)>>('duk_has_prop_index'); - late final _duk_has_prop_index = _duk_has_prop_indexPtr - .asFunction, int, int)>(); + ffi.NativeFunction< + duk_bool_t Function(ffi.Pointer, duk_idx_t, duk_uarridx_t) + > + >('duk_has_prop_index'); + late final _duk_has_prop_index = + _duk_has_prop_indexPtr + .asFunction, int, int)>(); int duk_has_prop_heapptr( ffi.Pointer ctx, int obj_idx, ffi.Pointer ptr, ) { - return _duk_has_prop_heapptr( - ctx, - obj_idx, - ptr, - ); + return _duk_has_prop_heapptr(ctx, obj_idx, ptr); } late final _duk_has_prop_heapptrPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function(ffi.Pointer, duk_idx_t, - ffi.Pointer)>>('duk_has_prop_heapptr'); - late final _duk_has_prop_heapptr = _duk_has_prop_heapptrPtr.asFunction< - int Function(ffi.Pointer, int, ffi.Pointer)>(); - - void duk_get_prop_desc( - ffi.Pointer ctx, - int obj_idx, - int flags, - ) { - return _duk_get_prop_desc( - ctx, - obj_idx, - flags, - ); + ffi.NativeFunction< + duk_bool_t Function( + ffi.Pointer, + duk_idx_t, + ffi.Pointer, + ) + > + >('duk_has_prop_heapptr'); + late final _duk_has_prop_heapptr = + _duk_has_prop_heapptrPtr + .asFunction< + int Function(ffi.Pointer, int, ffi.Pointer) + >(); + + void duk_get_prop_desc(ffi.Pointer ctx, int obj_idx, int flags) { + return _duk_get_prop_desc(ctx, obj_idx, flags); } late final _duk_get_prop_descPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function(ffi.Pointer, duk_idx_t, - duk_uint_t)>>('duk_get_prop_desc'); - late final _duk_get_prop_desc = _duk_get_prop_descPtr - .asFunction, int, int)>(); - - void duk_def_prop( - ffi.Pointer ctx, - int obj_idx, - int flags, - ) { - return _duk_def_prop( - ctx, - obj_idx, - flags, - ); + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, duk_idx_t, duk_uint_t) + > + >('duk_get_prop_desc'); + late final _duk_get_prop_desc = + _duk_get_prop_descPtr + .asFunction, int, int)>(); + + void duk_def_prop(ffi.Pointer ctx, int obj_idx, int flags) { + return _duk_def_prop(ctx, obj_idx, flags); } late final _duk_def_propPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function(ffi.Pointer, duk_idx_t, - duk_uint_t)>>('duk_def_prop'); - late final _duk_def_prop = _duk_def_propPtr - .asFunction, int, int)>(); + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, duk_idx_t, duk_uint_t) + > + >('duk_def_prop'); + late final _duk_def_prop = + _duk_def_propPtr + .asFunction, int, int)>(); int duk_get_global_string( ffi.Pointer ctx, ffi.Pointer key, ) { - return _duk_get_global_string( - ctx, - key, - ); + return _duk_get_global_string(ctx, key); } late final _duk_get_global_stringPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function(ffi.Pointer, - ffi.Pointer)>>('duk_get_global_string'); - late final _duk_get_global_string = _duk_get_global_stringPtr.asFunction< - int Function(ffi.Pointer, ffi.Pointer)>(); + ffi.NativeFunction< + duk_bool_t Function(ffi.Pointer, ffi.Pointer) + > + >('duk_get_global_string'); + late final _duk_get_global_string = + _duk_get_global_stringPtr + .asFunction< + int Function(ffi.Pointer, ffi.Pointer) + >(); int duk_get_global_lstring( ffi.Pointer ctx, ffi.Pointer key, int key_len, ) { - return _duk_get_global_lstring( - ctx, - key, - key_len, - ); + return _duk_get_global_lstring(ctx, key, key_len); } late final _duk_get_global_lstringPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function(ffi.Pointer, ffi.Pointer, - duk_size_t)>>('duk_get_global_lstring'); - late final _duk_get_global_lstring = _duk_get_global_lstringPtr.asFunction< - int Function(ffi.Pointer, ffi.Pointer, int)>(); + ffi.NativeFunction< + duk_bool_t Function( + ffi.Pointer, + ffi.Pointer, + duk_size_t, + ) + > + >('duk_get_global_lstring'); + late final _duk_get_global_lstring = + _duk_get_global_lstringPtr + .asFunction< + int Function(ffi.Pointer, ffi.Pointer, int) + >(); int duk_get_global_literal_raw( ffi.Pointer ctx, ffi.Pointer key, int key_len, ) { - return _duk_get_global_literal_raw( - ctx, - key, - key_len, - ); + return _duk_get_global_literal_raw(ctx, key, key_len); } late final _duk_get_global_literal_rawPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function(ffi.Pointer, ffi.Pointer, - duk_size_t)>>('duk_get_global_literal_raw'); + ffi.NativeFunction< + duk_bool_t Function( + ffi.Pointer, + ffi.Pointer, + duk_size_t, + ) + > + >('duk_get_global_literal_raw'); late final _duk_get_global_literal_raw = - _duk_get_global_literal_rawPtr.asFunction< - int Function(ffi.Pointer, ffi.Pointer, int)>(); + _duk_get_global_literal_rawPtr + .asFunction< + int Function(ffi.Pointer, ffi.Pointer, int) + >(); int duk_get_global_heapptr( ffi.Pointer ctx, ffi.Pointer ptr, ) { - return _duk_get_global_heapptr( - ctx, - ptr, - ); + return _duk_get_global_heapptr(ctx, ptr); } late final _duk_get_global_heapptrPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function(ffi.Pointer, - ffi.Pointer)>>('duk_get_global_heapptr'); - late final _duk_get_global_heapptr = _duk_get_global_heapptrPtr.asFunction< - int Function(ffi.Pointer, ffi.Pointer)>(); + ffi.NativeFunction< + duk_bool_t Function(ffi.Pointer, ffi.Pointer) + > + >('duk_get_global_heapptr'); + late final _duk_get_global_heapptr = + _duk_get_global_heapptrPtr + .asFunction< + int Function(ffi.Pointer, ffi.Pointer) + >(); int duk_put_global_string( ffi.Pointer ctx, ffi.Pointer key, ) { - return _duk_put_global_string( - ctx, - key, - ); + return _duk_put_global_string(ctx, key); } late final _duk_put_global_stringPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function(ffi.Pointer, - ffi.Pointer)>>('duk_put_global_string'); - late final _duk_put_global_string = _duk_put_global_stringPtr.asFunction< - int Function(ffi.Pointer, ffi.Pointer)>(); + ffi.NativeFunction< + duk_bool_t Function(ffi.Pointer, ffi.Pointer) + > + >('duk_put_global_string'); + late final _duk_put_global_string = + _duk_put_global_stringPtr + .asFunction< + int Function(ffi.Pointer, ffi.Pointer) + >(); int duk_put_global_lstring( ffi.Pointer ctx, ffi.Pointer key, int key_len, ) { - return _duk_put_global_lstring( - ctx, - key, - key_len, - ); + return _duk_put_global_lstring(ctx, key, key_len); } late final _duk_put_global_lstringPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function(ffi.Pointer, ffi.Pointer, - duk_size_t)>>('duk_put_global_lstring'); - late final _duk_put_global_lstring = _duk_put_global_lstringPtr.asFunction< - int Function(ffi.Pointer, ffi.Pointer, int)>(); + ffi.NativeFunction< + duk_bool_t Function( + ffi.Pointer, + ffi.Pointer, + duk_size_t, + ) + > + >('duk_put_global_lstring'); + late final _duk_put_global_lstring = + _duk_put_global_lstringPtr + .asFunction< + int Function(ffi.Pointer, ffi.Pointer, int) + >(); int duk_put_global_literal_raw( ffi.Pointer ctx, ffi.Pointer key, int key_len, ) { - return _duk_put_global_literal_raw( - ctx, - key, - key_len, - ); + return _duk_put_global_literal_raw(ctx, key, key_len); } late final _duk_put_global_literal_rawPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function(ffi.Pointer, ffi.Pointer, - duk_size_t)>>('duk_put_global_literal_raw'); + ffi.NativeFunction< + duk_bool_t Function( + ffi.Pointer, + ffi.Pointer, + duk_size_t, + ) + > + >('duk_put_global_literal_raw'); late final _duk_put_global_literal_raw = - _duk_put_global_literal_rawPtr.asFunction< - int Function(ffi.Pointer, ffi.Pointer, int)>(); + _duk_put_global_literal_rawPtr + .asFunction< + int Function(ffi.Pointer, ffi.Pointer, int) + >(); int duk_put_global_heapptr( ffi.Pointer ctx, ffi.Pointer ptr, ) { - return _duk_put_global_heapptr( - ctx, - ptr, - ); + return _duk_put_global_heapptr(ctx, ptr); } late final _duk_put_global_heapptrPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function(ffi.Pointer, - ffi.Pointer)>>('duk_put_global_heapptr'); - late final _duk_put_global_heapptr = _duk_put_global_heapptrPtr.asFunction< - int Function(ffi.Pointer, ffi.Pointer)>(); + ffi.NativeFunction< + duk_bool_t Function(ffi.Pointer, ffi.Pointer) + > + >('duk_put_global_heapptr'); + late final _duk_put_global_heapptr = + _duk_put_global_heapptrPtr + .asFunction< + int Function(ffi.Pointer, ffi.Pointer) + >(); /// Inspection - void duk_inspect_value( - ffi.Pointer ctx, - int idx, - ) { - return _duk_inspect_value( - ctx, - idx, - ); + void duk_inspect_value(ffi.Pointer ctx, int idx) { + return _duk_inspect_value(ctx, idx); } late final _duk_inspect_valuePtr = _lookup< - ffi.NativeFunction< - ffi.Void Function( - ffi.Pointer, duk_idx_t)>>('duk_inspect_value'); - late final _duk_inspect_value = _duk_inspect_valuePtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_inspect_value'); + late final _duk_inspect_value = + _duk_inspect_valuePtr + .asFunction, int)>(); - void duk_inspect_callstack_entry( - ffi.Pointer ctx, - int level, - ) { - return _duk_inspect_callstack_entry( - ctx, - level, - ); + void duk_inspect_callstack_entry(ffi.Pointer ctx, int level) { + return _duk_inspect_callstack_entry(ctx, level); } late final _duk_inspect_callstack_entryPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function(ffi.Pointer, - duk_int_t)>>('duk_inspect_callstack_entry'); - late final _duk_inspect_callstack_entry = _duk_inspect_callstack_entryPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_int_t)> + >('duk_inspect_callstack_entry'); + late final _duk_inspect_callstack_entry = + _duk_inspect_callstack_entryPtr + .asFunction, int)>(); /// Object prototype - void duk_get_prototype( - ffi.Pointer ctx, - int idx, - ) { - return _duk_get_prototype( - ctx, - idx, - ); + void duk_get_prototype(ffi.Pointer ctx, int idx) { + return _duk_get_prototype(ctx, idx); } late final _duk_get_prototypePtr = _lookup< - ffi.NativeFunction< - ffi.Void Function( - ffi.Pointer, duk_idx_t)>>('duk_get_prototype'); - late final _duk_get_prototype = _duk_get_prototypePtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_get_prototype'); + late final _duk_get_prototype = + _duk_get_prototypePtr + .asFunction, int)>(); - void duk_set_prototype( - ffi.Pointer ctx, - int idx, - ) { - return _duk_set_prototype( - ctx, - idx, - ); + void duk_set_prototype(ffi.Pointer ctx, int idx) { + return _duk_set_prototype(ctx, idx); } late final _duk_set_prototypePtr = _lookup< - ffi.NativeFunction< - ffi.Void Function( - ffi.Pointer, duk_idx_t)>>('duk_set_prototype'); - late final _duk_set_prototype = _duk_set_prototypePtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_set_prototype'); + late final _duk_set_prototype = + _duk_set_prototypePtr + .asFunction, int)>(); /// Object finalizer - void duk_get_finalizer( - ffi.Pointer ctx, - int idx, - ) { - return _duk_get_finalizer( - ctx, - idx, - ); + void duk_get_finalizer(ffi.Pointer ctx, int idx) { + return _duk_get_finalizer(ctx, idx); } late final _duk_get_finalizerPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function( - ffi.Pointer, duk_idx_t)>>('duk_get_finalizer'); - late final _duk_get_finalizer = _duk_get_finalizerPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_get_finalizer'); + late final _duk_get_finalizer = + _duk_get_finalizerPtr + .asFunction, int)>(); - void duk_set_finalizer( - ffi.Pointer ctx, - int idx, - ) { - return _duk_set_finalizer( - ctx, - idx, - ); + void duk_set_finalizer(ffi.Pointer ctx, int idx) { + return _duk_set_finalizer(ctx, idx); } late final _duk_set_finalizerPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function( - ffi.Pointer, duk_idx_t)>>('duk_set_finalizer'); - late final _duk_set_finalizer = _duk_set_finalizerPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_set_finalizer'); + late final _duk_set_finalizer = + _duk_set_finalizerPtr + .asFunction, int)>(); /// Global object - void duk_set_global_object( - ffi.Pointer ctx, - ) { - return _duk_set_global_object( - ctx, - ); + void duk_set_global_object(ffi.Pointer ctx) { + return _duk_set_global_object(ctx); } late final _duk_set_global_objectPtr = _lookup)>>( - 'duk_set_global_object'); - late final _duk_set_global_object = _duk_set_global_objectPtr - .asFunction)>(); + 'duk_set_global_object', + ); + late final _duk_set_global_object = + _duk_set_global_objectPtr + .asFunction)>(); /// Duktape/C function magic value - int duk_get_magic( - ffi.Pointer ctx, - int idx, - ) { - return _duk_get_magic( - ctx, - idx, - ); + int duk_get_magic(ffi.Pointer ctx, int idx) { + return _duk_get_magic(ctx, idx); } late final _duk_get_magicPtr = _lookup< - ffi.NativeFunction< - duk_int_t Function( - ffi.Pointer, duk_idx_t)>>('duk_get_magic'); - late final _duk_get_magic = _duk_get_magicPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_get_magic'); + late final _duk_get_magic = + _duk_get_magicPtr + .asFunction, int)>(); - void duk_set_magic( - ffi.Pointer ctx, - int idx, - int magic, - ) { - return _duk_set_magic( - ctx, - idx, - magic, - ); + void duk_set_magic(ffi.Pointer ctx, int idx, int magic) { + return _duk_set_magic(ctx, idx, magic); } late final _duk_set_magicPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function(ffi.Pointer, duk_idx_t, - duk_int_t)>>('duk_set_magic'); - late final _duk_set_magic = _duk_set_magicPtr - .asFunction, int, int)>(); + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, duk_idx_t, duk_int_t) + > + >('duk_set_magic'); + late final _duk_set_magic = + _duk_set_magicPtr + .asFunction, int, int)>(); - int duk_get_current_magic( - ffi.Pointer ctx, - ) { - return _duk_get_current_magic( - ctx, - ); + int duk_get_current_magic(ffi.Pointer ctx) { + return _duk_get_current_magic(ctx); } late final _duk_get_current_magicPtr = _lookup)>>( - 'duk_get_current_magic'); - late final _duk_get_current_magic = _duk_get_current_magicPtr - .asFunction)>(); + 'duk_get_current_magic', + ); + late final _duk_get_current_magic = + _duk_get_current_magicPtr + .asFunction)>(); /// Module helpers: put multiple function or constant properties void duk_put_function_list( @@ -4381,161 +4100,131 @@ class DuktapeBindings { int obj_idx, ffi.Pointer funcs, ) { - return _duk_put_function_list( - ctx, - obj_idx, - funcs, - ); + return _duk_put_function_list(ctx, obj_idx, funcs); } late final _duk_put_function_listPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function(ffi.Pointer, duk_idx_t, - ffi.Pointer)>>('duk_put_function_list'); - late final _duk_put_function_list = _duk_put_function_listPtr.asFunction< - void Function(ffi.Pointer, int, - ffi.Pointer)>(); + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer, + duk_idx_t, + ffi.Pointer, + ) + > + >('duk_put_function_list'); + late final _duk_put_function_list = + _duk_put_function_listPtr + .asFunction< + void Function( + ffi.Pointer, + int, + ffi.Pointer, + ) + >(); void duk_put_number_list( ffi.Pointer ctx, int obj_idx, ffi.Pointer numbers, ) { - return _duk_put_number_list( - ctx, - obj_idx, - numbers, - ); + return _duk_put_number_list(ctx, obj_idx, numbers); } late final _duk_put_number_listPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function(ffi.Pointer, duk_idx_t, - ffi.Pointer)>>('duk_put_number_list'); - late final _duk_put_number_list = _duk_put_number_listPtr.asFunction< - void Function( - ffi.Pointer, int, ffi.Pointer)>(); + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer, + duk_idx_t, + ffi.Pointer, + ) + > + >('duk_put_number_list'); + late final _duk_put_number_list = + _duk_put_number_listPtr + .asFunction< + void Function( + ffi.Pointer, + int, + ffi.Pointer, + ) + >(); /// Object operations - void duk_compact( - ffi.Pointer ctx, - int obj_idx, - ) { - return _duk_compact( - ctx, - obj_idx, - ); + void duk_compact(ffi.Pointer ctx, int obj_idx) { + return _duk_compact(ctx, obj_idx); } late final _duk_compactPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function( - ffi.Pointer, duk_idx_t)>>('duk_compact'); - late final _duk_compact = _duk_compactPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_compact'); + late final _duk_compact = + _duk_compactPtr + .asFunction, int)>(); - void duk_enum( - ffi.Pointer ctx, - int obj_idx, - int enum_flags, - ) { - return _duk_enum( - ctx, - obj_idx, - enum_flags, - ); + void duk_enum(ffi.Pointer ctx, int obj_idx, int enum_flags) { + return _duk_enum(ctx, obj_idx, enum_flags); } late final _duk_enumPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function( - ffi.Pointer, duk_idx_t, duk_uint_t)>>('duk_enum'); - late final _duk_enum = _duk_enumPtr - .asFunction, int, int)>(); + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, duk_idx_t, duk_uint_t) + > + >('duk_enum'); + late final _duk_enum = + _duk_enumPtr + .asFunction, int, int)>(); - int duk_next( - ffi.Pointer ctx, - int enum_idx, - int get_value, - ) { - return _duk_next( - ctx, - enum_idx, - get_value, - ); + int duk_next(ffi.Pointer ctx, int enum_idx, int get_value) { + return _duk_next(ctx, enum_idx, get_value); } late final _duk_nextPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function( - ffi.Pointer, duk_idx_t, duk_bool_t)>>('duk_next'); - late final _duk_next = _duk_nextPtr - .asFunction, int, int)>(); + ffi.NativeFunction< + duk_bool_t Function(ffi.Pointer, duk_idx_t, duk_bool_t) + > + >('duk_next'); + late final _duk_next = + _duk_nextPtr + .asFunction, int, int)>(); - void duk_seal( - ffi.Pointer ctx, - int obj_idx, - ) { - return _duk_seal( - ctx, - obj_idx, - ); + void duk_seal(ffi.Pointer ctx, int obj_idx) { + return _duk_seal(ctx, obj_idx); } late final _duk_sealPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function(ffi.Pointer, duk_idx_t)>>('duk_seal'); + ffi.NativeFunction, duk_idx_t)> + >('duk_seal'); late final _duk_seal = _duk_sealPtr.asFunction, int)>(); - void duk_freeze( - ffi.Pointer ctx, - int obj_idx, - ) { - return _duk_freeze( - ctx, - obj_idx, - ); + void duk_freeze(ffi.Pointer ctx, int obj_idx) { + return _duk_freeze(ctx, obj_idx); } late final _duk_freezePtr = _lookup< - ffi.NativeFunction< - ffi.Void Function( - ffi.Pointer, duk_idx_t)>>('duk_freeze'); + ffi.NativeFunction, duk_idx_t)> + >('duk_freeze'); late final _duk_freeze = _duk_freezePtr.asFunction, int)>(); /// String manipulation - void duk_concat( - ffi.Pointer ctx, - int count, - ) { - return _duk_concat( - ctx, - count, - ); + void duk_concat(ffi.Pointer ctx, int count) { + return _duk_concat(ctx, count); } late final _duk_concatPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function( - ffi.Pointer, duk_idx_t)>>('duk_concat'); + ffi.NativeFunction, duk_idx_t)> + >('duk_concat'); late final _duk_concat = _duk_concatPtr.asFunction, int)>(); - void duk_join( - ffi.Pointer ctx, - int count, - ) { - return _duk_join( - ctx, - count, - ); + void duk_join(ffi.Pointer ctx, int count) { + return _duk_join(ctx, count); } late final _duk_joinPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function(ffi.Pointer, duk_idx_t)>>('duk_join'); + ffi.NativeFunction, duk_idx_t)> + >('duk_join'); late final _duk_join = _duk_joinPtr.asFunction, int)>(); @@ -4545,24 +4234,29 @@ class DuktapeBindings { duk_decode_char_function callback, ffi.Pointer udata, ) { - return _duk_decode_string( - ctx, - idx, - callback, - udata, - ); + return _duk_decode_string(ctx, idx, callback, udata); } late final _duk_decode_stringPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function( + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer, + duk_idx_t, + duk_decode_char_function, + ffi.Pointer, + ) + > + >('duk_decode_string'); + late final _duk_decode_string = + _duk_decode_stringPtr + .asFunction< + void Function( ffi.Pointer, - duk_idx_t, + int, duk_decode_char_function, - ffi.Pointer)>>('duk_decode_string'); - late final _duk_decode_string = _duk_decode_stringPtr.asFunction< - void Function(ffi.Pointer, int, duk_decode_char_function, - ffi.Pointer)>(); + ffi.Pointer, + ) + >(); void duk_map_string( ffi.Pointer ctx, @@ -4570,21 +4264,29 @@ class DuktapeBindings { duk_map_char_function callback, ffi.Pointer udata, ) { - return _duk_map_string( - ctx, - idx, - callback, - udata, - ); + return _duk_map_string(ctx, idx, callback, udata); } late final _duk_map_stringPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function(ffi.Pointer, duk_idx_t, - duk_map_char_function, ffi.Pointer)>>('duk_map_string'); - late final _duk_map_string = _duk_map_stringPtr.asFunction< - void Function(ffi.Pointer, int, duk_map_char_function, - ffi.Pointer)>(); + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer, + duk_idx_t, + duk_map_char_function, + ffi.Pointer, + ) + > + >('duk_map_string'); + late final _duk_map_string = + _duk_map_stringPtr + .asFunction< + void Function( + ffi.Pointer, + int, + duk_map_char_function, + ffi.Pointer, + ) + >(); void duk_substring( ffi.Pointer ctx, @@ -4592,283 +4294,196 @@ class DuktapeBindings { int start_char_offset, int end_char_offset, ) { - return _duk_substring( - ctx, - idx, - start_char_offset, - end_char_offset, - ); + return _duk_substring(ctx, idx, start_char_offset, end_char_offset); } late final _duk_substringPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function(ffi.Pointer, duk_idx_t, duk_size_t, - duk_size_t)>>('duk_substring'); - late final _duk_substring = _duk_substringPtr - .asFunction, int, int, int)>(); - - void duk_trim( - ffi.Pointer ctx, - int idx, - ) { - return _duk_trim( - ctx, - idx, - ); + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer, + duk_idx_t, + duk_size_t, + duk_size_t, + ) + > + >('duk_substring'); + late final _duk_substring = + _duk_substringPtr + .asFunction, int, int, int)>(); + + void duk_trim(ffi.Pointer ctx, int idx) { + return _duk_trim(ctx, idx); } late final _duk_trimPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function(ffi.Pointer, duk_idx_t)>>('duk_trim'); + ffi.NativeFunction, duk_idx_t)> + >('duk_trim'); late final _duk_trim = _duk_trimPtr.asFunction, int)>(); - int duk_char_code_at( - ffi.Pointer ctx, - int idx, - int char_offset, - ) { - return _duk_char_code_at( - ctx, - idx, - char_offset, - ); + int duk_char_code_at(ffi.Pointer ctx, int idx, int char_offset) { + return _duk_char_code_at(ctx, idx, char_offset); } late final _duk_char_code_atPtr = _lookup< - ffi.NativeFunction< - duk_codepoint_t Function(ffi.Pointer, duk_idx_t, - duk_size_t)>>('duk_char_code_at'); - late final _duk_char_code_at = _duk_char_code_atPtr - .asFunction, int, int)>(); + ffi.NativeFunction< + duk_codepoint_t Function(ffi.Pointer, duk_idx_t, duk_size_t) + > + >('duk_char_code_at'); + late final _duk_char_code_at = + _duk_char_code_atPtr + .asFunction, int, int)>(); /// ECMAScript operators - int duk_equals( - ffi.Pointer ctx, - int idx1, - int idx2, - ) { - return _duk_equals( - ctx, - idx1, - idx2, - ); + int duk_equals(ffi.Pointer ctx, int idx1, int idx2) { + return _duk_equals(ctx, idx1, idx2); } late final _duk_equalsPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function( - ffi.Pointer, duk_idx_t, duk_idx_t)>>('duk_equals'); - late final _duk_equals = _duk_equalsPtr - .asFunction, int, int)>(); + ffi.NativeFunction< + duk_bool_t Function(ffi.Pointer, duk_idx_t, duk_idx_t) + > + >('duk_equals'); + late final _duk_equals = + _duk_equalsPtr + .asFunction, int, int)>(); - int duk_strict_equals( - ffi.Pointer ctx, - int idx1, - int idx2, - ) { - return _duk_strict_equals( - ctx, - idx1, - idx2, - ); + int duk_strict_equals(ffi.Pointer ctx, int idx1, int idx2) { + return _duk_strict_equals(ctx, idx1, idx2); } late final _duk_strict_equalsPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function(ffi.Pointer, duk_idx_t, - duk_idx_t)>>('duk_strict_equals'); - late final _duk_strict_equals = _duk_strict_equalsPtr - .asFunction, int, int)>(); + ffi.NativeFunction< + duk_bool_t Function(ffi.Pointer, duk_idx_t, duk_idx_t) + > + >('duk_strict_equals'); + late final _duk_strict_equals = + _duk_strict_equalsPtr + .asFunction, int, int)>(); - int duk_samevalue( - ffi.Pointer ctx, - int idx1, - int idx2, - ) { - return _duk_samevalue( - ctx, - idx1, - idx2, - ); + int duk_samevalue(ffi.Pointer ctx, int idx1, int idx2) { + return _duk_samevalue(ctx, idx1, idx2); } late final _duk_samevaluePtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function(ffi.Pointer, duk_idx_t, - duk_idx_t)>>('duk_samevalue'); - late final _duk_samevalue = _duk_samevaluePtr - .asFunction, int, int)>(); + ffi.NativeFunction< + duk_bool_t Function(ffi.Pointer, duk_idx_t, duk_idx_t) + > + >('duk_samevalue'); + late final _duk_samevalue = + _duk_samevaluePtr + .asFunction, int, int)>(); - int duk_instanceof( - ffi.Pointer ctx, - int idx1, - int idx2, - ) { - return _duk_instanceof( - ctx, - idx1, - idx2, - ); + int duk_instanceof(ffi.Pointer ctx, int idx1, int idx2) { + return _duk_instanceof(ctx, idx1, idx2); } late final _duk_instanceofPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function(ffi.Pointer, duk_idx_t, - duk_idx_t)>>('duk_instanceof'); - late final _duk_instanceof = _duk_instanceofPtr - .asFunction, int, int)>(); + ffi.NativeFunction< + duk_bool_t Function(ffi.Pointer, duk_idx_t, duk_idx_t) + > + >('duk_instanceof'); + late final _duk_instanceof = + _duk_instanceofPtr + .asFunction, int, int)>(); /// Random - double duk_random( - ffi.Pointer ctx, - ) { - return _duk_random( - ctx, - ); + double duk_random(ffi.Pointer ctx) { + return _duk_random(ctx); } late final _duk_randomPtr = _lookup< - ffi.NativeFunction)>>( - 'duk_random'); + ffi.NativeFunction)> + >('duk_random'); late final _duk_random = _duk_randomPtr.asFunction)>(); /// Function (method) calls - void duk_call( - ffi.Pointer ctx, - int nargs, - ) { - return _duk_call( - ctx, - nargs, - ); + void duk_call(ffi.Pointer ctx, int nargs) { + return _duk_call(ctx, nargs); } late final _duk_callPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function(ffi.Pointer, duk_idx_t)>>('duk_call'); + ffi.NativeFunction, duk_idx_t)> + >('duk_call'); late final _duk_call = _duk_callPtr.asFunction, int)>(); - void duk_call_method( - ffi.Pointer ctx, - int nargs, - ) { - return _duk_call_method( - ctx, - nargs, - ); + void duk_call_method(ffi.Pointer ctx, int nargs) { + return _duk_call_method(ctx, nargs); } late final _duk_call_methodPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function( - ffi.Pointer, duk_idx_t)>>('duk_call_method'); - late final _duk_call_method = _duk_call_methodPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_call_method'); + late final _duk_call_method = + _duk_call_methodPtr + .asFunction, int)>(); - void duk_call_prop( - ffi.Pointer ctx, - int obj_idx, - int nargs, - ) { - return _duk_call_prop( - ctx, - obj_idx, - nargs, - ); + void duk_call_prop(ffi.Pointer ctx, int obj_idx, int nargs) { + return _duk_call_prop(ctx, obj_idx, nargs); } late final _duk_call_propPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function(ffi.Pointer, duk_idx_t, - duk_idx_t)>>('duk_call_prop'); - late final _duk_call_prop = _duk_call_propPtr - .asFunction, int, int)>(); + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, duk_idx_t, duk_idx_t) + > + >('duk_call_prop'); + late final _duk_call_prop = + _duk_call_propPtr + .asFunction, int, int)>(); - int duk_pcall( - ffi.Pointer ctx, - int nargs, - ) { - return _duk_pcall( - ctx, - nargs, - ); + int duk_pcall(ffi.Pointer ctx, int nargs) { + return _duk_pcall(ctx, nargs); } late final _duk_pcallPtr = _lookup< - ffi.NativeFunction< - duk_int_t Function( - ffi.Pointer, duk_idx_t)>>('duk_pcall'); + ffi.NativeFunction, duk_idx_t)> + >('duk_pcall'); late final _duk_pcall = _duk_pcallPtr.asFunction, int)>(); - int duk_pcall_method( - ffi.Pointer ctx, - int nargs, - ) { - return _duk_pcall_method( - ctx, - nargs, - ); + int duk_pcall_method(ffi.Pointer ctx, int nargs) { + return _duk_pcall_method(ctx, nargs); } late final _duk_pcall_methodPtr = _lookup< - ffi.NativeFunction< - duk_int_t Function( - ffi.Pointer, duk_idx_t)>>('duk_pcall_method'); - late final _duk_pcall_method = _duk_pcall_methodPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_pcall_method'); + late final _duk_pcall_method = + _duk_pcall_methodPtr + .asFunction, int)>(); - int duk_pcall_prop( - ffi.Pointer ctx, - int obj_idx, - int nargs, - ) { - return _duk_pcall_prop( - ctx, - obj_idx, - nargs, - ); + int duk_pcall_prop(ffi.Pointer ctx, int obj_idx, int nargs) { + return _duk_pcall_prop(ctx, obj_idx, nargs); } late final _duk_pcall_propPtr = _lookup< - ffi.NativeFunction< - duk_int_t Function(ffi.Pointer, duk_idx_t, - duk_idx_t)>>('duk_pcall_prop'); - late final _duk_pcall_prop = _duk_pcall_propPtr - .asFunction, int, int)>(); + ffi.NativeFunction< + duk_int_t Function(ffi.Pointer, duk_idx_t, duk_idx_t) + > + >('duk_pcall_prop'); + late final _duk_pcall_prop = + _duk_pcall_propPtr + .asFunction, int, int)>(); - void duk_new( - ffi.Pointer ctx, - int nargs, - ) { - return _duk_new( - ctx, - nargs, - ); + void duk_new(ffi.Pointer ctx, int nargs) { + return _duk_new(ctx, nargs); } late final _duk_newPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function(ffi.Pointer, duk_idx_t)>>('duk_new'); + ffi.NativeFunction, duk_idx_t)> + >('duk_new'); late final _duk_new = _duk_newPtr.asFunction, int)>(); - int duk_pnew( - ffi.Pointer ctx, - int nargs, - ) { - return _duk_pnew( - ctx, - nargs, - ); + int duk_pnew(ffi.Pointer ctx, int nargs) { + return _duk_pnew(ctx, nargs); } late final _duk_pnewPtr = _lookup< - ffi.NativeFunction< - duk_int_t Function(ffi.Pointer, duk_idx_t)>>('duk_pnew'); + ffi.NativeFunction, duk_idx_t)> + >('duk_pnew'); late final _duk_pnew = _duk_pnewPtr.asFunction, int)>(); @@ -4879,22 +4494,31 @@ class DuktapeBindings { int nargs, int nrets, ) { - return _duk_safe_call( - ctx, - func, - udata, - nargs, - nrets, - ); + return _duk_safe_call(ctx, func, udata, nargs, nrets); } late final _duk_safe_callPtr = _lookup< - ffi.NativeFunction< - duk_int_t Function(ffi.Pointer, duk_safe_call_function, - ffi.Pointer, duk_idx_t, duk_idx_t)>>('duk_safe_call'); - late final _duk_safe_call = _duk_safe_callPtr.asFunction< - int Function(ffi.Pointer, duk_safe_call_function, - ffi.Pointer, int, int)>(); + ffi.NativeFunction< + duk_int_t Function( + ffi.Pointer, + duk_safe_call_function, + ffi.Pointer, + duk_idx_t, + duk_idx_t, + ) + > + >('duk_safe_call'); + late final _duk_safe_call = + _duk_safe_callPtr + .asFunction< + int Function( + ffi.Pointer, + duk_safe_call_function, + ffi.Pointer, + int, + int, + ) + >(); /// Compilation and evaluation int duk_eval_raw( @@ -4903,21 +4527,29 @@ class DuktapeBindings { int src_length, int flags, ) { - return _duk_eval_raw( - ctx, - src_buffer, - src_length, - flags, - ); + return _duk_eval_raw(ctx, src_buffer, src_length, flags); } late final _duk_eval_rawPtr = _lookup< - ffi.NativeFunction< - duk_int_t Function(ffi.Pointer, ffi.Pointer, - duk_size_t, duk_uint_t)>>('duk_eval_raw'); - late final _duk_eval_raw = _duk_eval_rawPtr.asFunction< - int Function( - ffi.Pointer, ffi.Pointer, int, int)>(); + ffi.NativeFunction< + duk_int_t Function( + ffi.Pointer, + ffi.Pointer, + duk_size_t, + duk_uint_t, + ) + > + >('duk_eval_raw'); + late final _duk_eval_raw = + _duk_eval_rawPtr + .asFunction< + int Function( + ffi.Pointer, + ffi.Pointer, + int, + int, + ) + >(); int duk_compile_raw( ffi.Pointer ctx, @@ -4925,65 +4557,67 @@ class DuktapeBindings { int src_length, int flags, ) { - return _duk_compile_raw( - ctx, - src_buffer, - src_length, - flags, - ); + return _duk_compile_raw(ctx, src_buffer, src_length, flags); } late final _duk_compile_rawPtr = _lookup< - ffi.NativeFunction< - duk_int_t Function(ffi.Pointer, ffi.Pointer, - duk_size_t, duk_uint_t)>>('duk_compile_raw'); - late final _duk_compile_raw = _duk_compile_rawPtr.asFunction< - int Function( - ffi.Pointer, ffi.Pointer, int, int)>(); + ffi.NativeFunction< + duk_int_t Function( + ffi.Pointer, + ffi.Pointer, + duk_size_t, + duk_uint_t, + ) + > + >('duk_compile_raw'); + late final _duk_compile_raw = + _duk_compile_rawPtr + .asFunction< + int Function( + ffi.Pointer, + ffi.Pointer, + int, + int, + ) + >(); /// Bytecode load/dump - void duk_dump_function( - ffi.Pointer ctx, - ) { - return _duk_dump_function( - ctx, - ); + void duk_dump_function(ffi.Pointer ctx) { + return _duk_dump_function(ctx); } late final _duk_dump_functionPtr = _lookup)>>( - 'duk_dump_function'); - late final _duk_dump_function = _duk_dump_functionPtr - .asFunction)>(); + 'duk_dump_function', + ); + late final _duk_dump_function = + _duk_dump_functionPtr + .asFunction)>(); - void duk_load_function( - ffi.Pointer ctx, - ) { - return _duk_load_function( - ctx, - ); + void duk_load_function(ffi.Pointer ctx) { + return _duk_load_function(ctx); } late final _duk_load_functionPtr = _lookup)>>( - 'duk_load_function'); - late final _duk_load_function = _duk_load_functionPtr - .asFunction)>(); + 'duk_load_function', + ); + late final _duk_load_function = + _duk_load_functionPtr + .asFunction)>(); /// Debugging - void duk_push_context_dump( - ffi.Pointer ctx, - ) { - return _duk_push_context_dump( - ctx, - ); + void duk_push_context_dump(ffi.Pointer ctx) { + return _duk_push_context_dump(ctx); } late final _duk_push_context_dumpPtr = _lookup)>>( - 'duk_push_context_dump'); - late final _duk_push_context_dump = _duk_push_context_dumpPtr - .asFunction)>(); + 'duk_push_context_dump', + ); + late final _duk_push_context_dump = + _duk_push_context_dumpPtr + .asFunction)>(); /// Debugger (debug protocol) void duk_debugger_attach( @@ -5011,8 +4645,24 @@ class DuktapeBindings { } late final _duk_debugger_attachPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function( + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer, + duk_debug_read_function, + duk_debug_write_function, + duk_debug_peek_function, + duk_debug_read_flush_function, + duk_debug_write_flush_function, + duk_debug_request_function, + duk_debug_detached_function, + ffi.Pointer, + ) + > + >('duk_debugger_attach'); + late final _duk_debugger_attach = + _duk_debugger_attachPtr + .asFunction< + void Function( ffi.Pointer, duk_debug_read_function, duk_debug_write_function, @@ -5021,90 +4671,65 @@ class DuktapeBindings { duk_debug_write_flush_function, duk_debug_request_function, duk_debug_detached_function, - ffi.Pointer)>>('duk_debugger_attach'); - late final _duk_debugger_attach = _duk_debugger_attachPtr.asFunction< - void Function( - ffi.Pointer, - duk_debug_read_function, - duk_debug_write_function, - duk_debug_peek_function, - duk_debug_read_flush_function, - duk_debug_write_flush_function, - duk_debug_request_function, - duk_debug_detached_function, - ffi.Pointer)>(); - - void duk_debugger_detach( - ffi.Pointer ctx, - ) { - return _duk_debugger_detach( - ctx, - ); + ffi.Pointer, + ) + >(); + + void duk_debugger_detach(ffi.Pointer ctx) { + return _duk_debugger_detach(ctx); } late final _duk_debugger_detachPtr = _lookup)>>( - 'duk_debugger_detach'); - late final _duk_debugger_detach = _duk_debugger_detachPtr - .asFunction)>(); + 'duk_debugger_detach', + ); + late final _duk_debugger_detach = + _duk_debugger_detachPtr + .asFunction)>(); - void duk_debugger_cooperate( - ffi.Pointer ctx, - ) { - return _duk_debugger_cooperate( - ctx, - ); + void duk_debugger_cooperate(ffi.Pointer ctx) { + return _duk_debugger_cooperate(ctx); } late final _duk_debugger_cooperatePtr = _lookup)>>( - 'duk_debugger_cooperate'); - late final _duk_debugger_cooperate = _duk_debugger_cooperatePtr - .asFunction)>(); + 'duk_debugger_cooperate', + ); + late final _duk_debugger_cooperate = + _duk_debugger_cooperatePtr + .asFunction)>(); - int duk_debugger_notify( - ffi.Pointer ctx, - int nvalues, - ) { - return _duk_debugger_notify( - ctx, - nvalues, - ); + int duk_debugger_notify(ffi.Pointer ctx, int nvalues) { + return _duk_debugger_notify(ctx, nvalues); } late final _duk_debugger_notifyPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function( - ffi.Pointer, duk_idx_t)>>('duk_debugger_notify'); - late final _duk_debugger_notify = _duk_debugger_notifyPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_debugger_notify'); + late final _duk_debugger_notify = + _duk_debugger_notifyPtr + .asFunction, int)>(); - void duk_debugger_pause( - ffi.Pointer ctx, - ) { - return _duk_debugger_pause( - ctx, - ); + void duk_debugger_pause(ffi.Pointer ctx) { + return _duk_debugger_pause(ctx); } late final _duk_debugger_pausePtr = _lookup)>>( - 'duk_debugger_pause'); - late final _duk_debugger_pause = _duk_debugger_pausePtr - .asFunction)>(); + 'duk_debugger_pause', + ); + late final _duk_debugger_pause = + _duk_debugger_pausePtr + .asFunction)>(); /// Time handling - double duk_get_now( - ffi.Pointer ctx, - ) { - return _duk_get_now( - ctx, - ); + double duk_get_now(ffi.Pointer ctx) { + return _duk_get_now(ctx); } late final _duk_get_nowPtr = _lookup< - ffi.NativeFunction)>>( - 'duk_get_now'); + ffi.NativeFunction)> + >('duk_get_now'); late final _duk_get_now = _duk_get_nowPtr.asFunction)>(); @@ -5113,38 +4738,51 @@ class DuktapeBindings { double timeval, ffi.Pointer comp, ) { - return _duk_time_to_components( - ctx, - timeval, - comp, - ); + return _duk_time_to_components(ctx, timeval, comp); } late final _duk_time_to_componentsPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function(ffi.Pointer, duk_double_t, - ffi.Pointer)>>('duk_time_to_components'); - late final _duk_time_to_components = _duk_time_to_componentsPtr.asFunction< - void Function(ffi.Pointer, double, - ffi.Pointer)>(); + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer, + duk_double_t, + ffi.Pointer, + ) + > + >('duk_time_to_components'); + late final _duk_time_to_components = + _duk_time_to_componentsPtr + .asFunction< + void Function( + ffi.Pointer, + double, + ffi.Pointer, + ) + >(); double duk_components_to_time( ffi.Pointer ctx, ffi.Pointer comp, ) { - return _duk_components_to_time( - ctx, - comp, - ); + return _duk_components_to_time(ctx, comp); } late final _duk_components_to_timePtr = _lookup< - ffi.NativeFunction< - duk_double_t Function(ffi.Pointer, - ffi.Pointer)>>('duk_components_to_time'); - late final _duk_components_to_time = _duk_components_to_timePtr.asFunction< - double Function( - ffi.Pointer, ffi.Pointer)>(); + ffi.NativeFunction< + duk_double_t Function( + ffi.Pointer, + ffi.Pointer, + ) + > + >('duk_components_to_time'); + late final _duk_components_to_time = + _duk_components_to_timePtr + .asFunction< + double Function( + ffi.Pointer, + ffi.Pointer, + ) + >(); } /// Public API specific typedefs @@ -5170,30 +4808,42 @@ final class duk_memory_functions extends ffi.Struct { external ffi.Pointer udata; } -typedef duk_alloc_function - = ffi.Pointer>; -typedef duk_alloc_functionFunction = ffi.Pointer Function( - ffi.Pointer udata, duk_size_t size); -typedef Dartduk_alloc_functionFunction = ffi.Pointer Function( - ffi.Pointer udata, Dartduk_size_t size); +typedef duk_alloc_function = + ffi.Pointer>; +typedef duk_alloc_functionFunction = + ffi.Pointer Function( + ffi.Pointer udata, + duk_size_t size, + ); +typedef Dartduk_alloc_functionFunction = + ffi.Pointer Function( + ffi.Pointer udata, + Dartduk_size_t size, + ); /// A few types are assumed to always exist. typedef duk_size_t = ffi.Size; typedef Dartduk_size_t = int; -typedef duk_realloc_function - = ffi.Pointer>; -typedef duk_realloc_functionFunction = ffi.Pointer Function( - ffi.Pointer udata, ffi.Pointer ptr, duk_size_t size); -typedef Dartduk_realloc_functionFunction = ffi.Pointer Function( - ffi.Pointer udata, - ffi.Pointer ptr, - Dartduk_size_t size); -typedef duk_free_function - = ffi.Pointer>; -typedef duk_free_functionFunction = ffi.Void Function( - ffi.Pointer udata, ffi.Pointer ptr); -typedef Dartduk_free_functionFunction = void Function( - ffi.Pointer udata, ffi.Pointer ptr); +typedef duk_realloc_function = + ffi.Pointer>; +typedef duk_realloc_functionFunction = + ffi.Pointer Function( + ffi.Pointer udata, + ffi.Pointer ptr, + duk_size_t size, + ); +typedef Dartduk_realloc_functionFunction = + ffi.Pointer Function( + ffi.Pointer udata, + ffi.Pointer ptr, + Dartduk_size_t size, + ); +typedef duk_free_function = + ffi.Pointer>; +typedef duk_free_functionFunction = + ffi.Void Function(ffi.Pointer udata, ffi.Pointer ptr); +typedef Dartduk_free_functionFunction = + void Function(ffi.Pointer udata, ffi.Pointer ptr); final class duk_function_list_entry extends ffi.Struct { external ffi.Pointer key; @@ -5204,12 +4854,12 @@ final class duk_function_list_entry extends ffi.Struct { external int nargs; } -typedef duk_c_function - = ffi.Pointer>; -typedef duk_c_functionFunction = duk_ret_t Function( - ffi.Pointer ctx); -typedef Dartduk_c_functionFunction = Dartduk_small_int_t Function( - ffi.Pointer ctx); +typedef duk_c_function = + ffi.Pointer>; +typedef duk_c_functionFunction = + duk_ret_t Function(ffi.Pointer ctx); +typedef Dartduk_c_functionFunction = + Dartduk_small_int_t Function(ffi.Pointer ctx); /// Duktape/C function return value, platform int is enough for now to /// represent 0, 1, or negative error code. Must be compatible with @@ -5277,12 +4927,12 @@ final class duk_time_components extends ffi.Struct { external double weekday; } -typedef duk_fatal_function - = ffi.Pointer>; -typedef duk_fatal_functionFunction = ffi.Void Function( - ffi.Pointer udata, ffi.Pointer msg); -typedef Dartduk_fatal_functionFunction = void Function( - ffi.Pointer udata, ffi.Pointer msg); +typedef duk_fatal_function = + ffi.Pointer>; +typedef duk_fatal_functionFunction = + ffi.Void Function(ffi.Pointer udata, ffi.Pointer msg); +typedef Dartduk_fatal_functionFunction = + void Function(ffi.Pointer udata, ffi.Pointer msg); typedef duk_uint_t = ffi.UnsignedInt; typedef Dartduk_uint_t = int; @@ -5306,12 +4956,12 @@ typedef Dartduk_uint16_t = int; /// Array index values, could be exact 32 bits. /// Currently no need for signed duk_arridx_t. typedef duk_uarridx_t = duk_uint_t; -typedef duk_decode_char_function - = ffi.Pointer>; -typedef duk_decode_char_functionFunction = ffi.Void Function( - ffi.Pointer udata, duk_codepoint_t codepoint); -typedef Dartduk_decode_char_functionFunction = void Function( - ffi.Pointer udata, Dartduk_int_t codepoint); +typedef duk_decode_char_function = + ffi.Pointer>; +typedef duk_decode_char_functionFunction = + ffi.Void Function(ffi.Pointer udata, duk_codepoint_t codepoint); +typedef Dartduk_decode_char_functionFunction = + void Function(ffi.Pointer udata, Dartduk_int_t codepoint); /// Codepoint type. Must be 32 bits or more because it is used also for /// internal codepoints. The type is signed because negative codepoints @@ -5320,72 +4970,99 @@ typedef Dartduk_decode_char_functionFunction = void Function( /// ensure duk_uint32_t casts back and forth nicely. Almost everything /// else uses the signed one. typedef duk_codepoint_t = duk_int_t; -typedef duk_map_char_function - = ffi.Pointer>; -typedef duk_map_char_functionFunction = duk_codepoint_t Function( - ffi.Pointer udata, duk_codepoint_t codepoint); -typedef Dartduk_map_char_functionFunction = Dartduk_int_t Function( - ffi.Pointer udata, Dartduk_int_t codepoint); -typedef duk_safe_call_function - = ffi.Pointer>; -typedef duk_safe_call_functionFunction = duk_ret_t Function( - ffi.Pointer ctx, ffi.Pointer udata); -typedef Dartduk_safe_call_functionFunction = Dartduk_small_int_t Function( - ffi.Pointer ctx, ffi.Pointer udata); -typedef duk_debug_read_function - = ffi.Pointer>; -typedef duk_debug_read_functionFunction = duk_size_t Function( - ffi.Pointer udata, - ffi.Pointer buffer, - duk_size_t length); -typedef Dartduk_debug_read_functionFunction = Dartduk_size_t Function( - ffi.Pointer udata, - ffi.Pointer buffer, - Dartduk_size_t length); -typedef duk_debug_write_function - = ffi.Pointer>; -typedef duk_debug_write_functionFunction = duk_size_t Function( - ffi.Pointer udata, - ffi.Pointer buffer, - duk_size_t length); -typedef Dartduk_debug_write_functionFunction = Dartduk_size_t Function( - ffi.Pointer udata, - ffi.Pointer buffer, - Dartduk_size_t length); -typedef duk_debug_peek_function - = ffi.Pointer>; -typedef duk_debug_peek_functionFunction = duk_size_t Function( - ffi.Pointer udata); -typedef Dartduk_debug_peek_functionFunction = Dartduk_size_t Function( - ffi.Pointer udata); -typedef duk_debug_read_flush_function - = ffi.Pointer>; -typedef duk_debug_read_flush_functionFunction = ffi.Void Function( - ffi.Pointer udata); -typedef Dartduk_debug_read_flush_functionFunction = void Function( - ffi.Pointer udata); -typedef duk_debug_write_flush_function - = ffi.Pointer>; -typedef duk_debug_write_flush_functionFunction = ffi.Void Function( - ffi.Pointer udata); -typedef Dartduk_debug_write_flush_functionFunction = void Function( - ffi.Pointer udata); -typedef duk_debug_request_function - = ffi.Pointer>; -typedef duk_debug_request_functionFunction = duk_idx_t Function( - ffi.Pointer ctx, - ffi.Pointer udata, - duk_idx_t nvalues); -typedef Dartduk_debug_request_functionFunction = Dartduk_int_t Function( - ffi.Pointer ctx, - ffi.Pointer udata, - Dartduk_int_t nvalues); -typedef duk_debug_detached_function - = ffi.Pointer>; -typedef duk_debug_detached_functionFunction = ffi.Void Function( - ffi.Pointer ctx, ffi.Pointer udata); -typedef Dartduk_debug_detached_functionFunction = void Function( - ffi.Pointer ctx, ffi.Pointer udata); +typedef duk_map_char_function = + ffi.Pointer>; +typedef duk_map_char_functionFunction = + duk_codepoint_t Function( + ffi.Pointer udata, + duk_codepoint_t codepoint, + ); +typedef Dartduk_map_char_functionFunction = + Dartduk_int_t Function( + ffi.Pointer udata, + Dartduk_int_t codepoint, + ); +typedef duk_safe_call_function = + ffi.Pointer>; +typedef duk_safe_call_functionFunction = + duk_ret_t Function( + ffi.Pointer ctx, + ffi.Pointer udata, + ); +typedef Dartduk_safe_call_functionFunction = + Dartduk_small_int_t Function( + ffi.Pointer ctx, + ffi.Pointer udata, + ); +typedef duk_debug_read_function = + ffi.Pointer>; +typedef duk_debug_read_functionFunction = + duk_size_t Function( + ffi.Pointer udata, + ffi.Pointer buffer, + duk_size_t length, + ); +typedef Dartduk_debug_read_functionFunction = + Dartduk_size_t Function( + ffi.Pointer udata, + ffi.Pointer buffer, + Dartduk_size_t length, + ); +typedef duk_debug_write_function = + ffi.Pointer>; +typedef duk_debug_write_functionFunction = + duk_size_t Function( + ffi.Pointer udata, + ffi.Pointer buffer, + duk_size_t length, + ); +typedef Dartduk_debug_write_functionFunction = + Dartduk_size_t Function( + ffi.Pointer udata, + ffi.Pointer buffer, + Dartduk_size_t length, + ); +typedef duk_debug_peek_function = + ffi.Pointer>; +typedef duk_debug_peek_functionFunction = + duk_size_t Function(ffi.Pointer udata); +typedef Dartduk_debug_peek_functionFunction = + Dartduk_size_t Function(ffi.Pointer udata); +typedef duk_debug_read_flush_function = + ffi.Pointer>; +typedef duk_debug_read_flush_functionFunction = + ffi.Void Function(ffi.Pointer udata); +typedef Dartduk_debug_read_flush_functionFunction = + void Function(ffi.Pointer udata); +typedef duk_debug_write_flush_function = + ffi.Pointer>; +typedef duk_debug_write_flush_functionFunction = + ffi.Void Function(ffi.Pointer udata); +typedef Dartduk_debug_write_flush_functionFunction = + void Function(ffi.Pointer udata); +typedef duk_debug_request_function = + ffi.Pointer>; +typedef duk_debug_request_functionFunction = + duk_idx_t Function( + ffi.Pointer ctx, + ffi.Pointer udata, + duk_idx_t nvalues, + ); +typedef Dartduk_debug_request_functionFunction = + Dartduk_int_t Function( + ffi.Pointer ctx, + ffi.Pointer udata, + Dartduk_int_t nvalues, + ); +typedef duk_debug_detached_function = + ffi.Pointer>; +typedef duk_debug_detached_functionFunction = + ffi.Void Function( + ffi.Pointer ctx, + ffi.Pointer udata, + ); +typedef Dartduk_debug_detached_functionFunction = + void Function(ffi.Pointer ctx, ffi.Pointer udata); const int DUK_VERSION = 20700; diff --git a/ffigen_codelab/step_06/lib/ffigen_app.dart b/ffigen_codelab/step_06/lib/ffigen_app.dart index 216f909a16..70bea9e3ef 100644 --- a/ffigen_codelab/step_06/lib/ffigen_app.dart +++ b/ffigen_codelab/step_06/lib/ffigen_app.dart @@ -29,8 +29,13 @@ final DuktapeBindings _bindings = DuktapeBindings(_dylib); class Duktape { Duktape() { - ctx = - _bindings.duk_create_heap(nullptr, nullptr, nullptr, nullptr, nullptr); + ctx = _bindings.duk_create_heap( + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + ); } void evalString(String jsCode) { @@ -40,15 +45,16 @@ class Duktape { var nativeUtf8 = jsCode.toNativeUtf8(); _bindings.duk_eval_raw( - ctx, - nativeUtf8.cast(), - 0, - 0 /*args*/ | - DUK_COMPILE_EVAL | - DUK_COMPILE_SAFE | - DUK_COMPILE_NOSOURCE | - DUK_COMPILE_STRLEN | - DUK_COMPILE_NOFILENAME); + ctx, + nativeUtf8.cast(), + 0, + 0 /*args*/ | + DUK_COMPILE_EVAL | + DUK_COMPILE_SAFE | + DUK_COMPILE_NOSOURCE | + DUK_COMPILE_STRLEN | + DUK_COMPILE_NOFILENAME, + ); ffi.malloc.free(nativeUtf8); } diff --git a/ffigen_codelab/step_06/lib/ffigen_app_bindings_generated.dart b/ffigen_codelab/step_06/lib/ffigen_app_bindings_generated.dart index 513983bf0c..b91a32288b 100644 --- a/ffigen_codelab/step_06/lib/ffigen_app_bindings_generated.dart +++ b/ffigen_codelab/step_06/lib/ffigen_app_bindings_generated.dart @@ -15,31 +15,24 @@ import 'dart:ffi' as ffi; class FfigenAppBindings { /// Holds the symbol lookup function. final ffi.Pointer Function(String symbolName) - _lookup; + _lookup; /// The symbols are looked up in [dynamicLibrary]. FfigenAppBindings(ffi.DynamicLibrary dynamicLibrary) - : _lookup = dynamicLibrary.lookup; + : _lookup = dynamicLibrary.lookup; /// The symbols are looked up with [lookup]. FfigenAppBindings.fromLookup( - ffi.Pointer Function(String symbolName) - lookup) - : _lookup = lookup; + ffi.Pointer Function(String symbolName) lookup, + ) : _lookup = lookup; /// A very short-lived native function. /// /// For very short-lived functions, it is fine to call them on the main isolate. /// They will block the Dart execution while running the native function, so /// only do this for native functions which are guaranteed to be short-lived. - int sum( - int a, - int b, - ) { - return _sum( - a, - b, - ); + int sum(int a, int b) { + return _sum(a, b); } late final _sumPtr = @@ -51,19 +44,14 @@ class FfigenAppBindings { /// Do not call these kind of native functions in the main isolate. They will /// block Dart execution. This will cause dropped frames in Flutter applications. /// Instead, call these native functions on a separate isolate. - int sum_long_running( - int a, - int b, - ) { - return _sum_long_running( - a, - b, - ); + int sum_long_running(int a, int b) { + return _sum_long_running(a, b); } late final _sum_long_runningPtr = _lookup>( - 'sum_long_running'); + 'sum_long_running', + ); late final _sum_long_running = _sum_long_runningPtr.asFunction(); } diff --git a/ffigen_codelab/step_06/pubspec.yaml b/ffigen_codelab/step_06/pubspec.yaml index 1fe4c6cb0d..e72ef0d828 100644 --- a/ffigen_codelab/step_06/pubspec.yaml +++ b/ffigen_codelab/step_06/pubspec.yaml @@ -4,7 +4,7 @@ version: 0.0.1 homepage: environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 flutter: '>=3.3.0' dependencies: diff --git a/ffigen_codelab/step_07/example/lib/duktape_message.freezed.dart b/ffigen_codelab/step_07/example/lib/duktape_message.freezed.dart index 8e309d94ba..43dd321f08 100644 --- a/ffigen_codelab/step_07/example/lib/duktape_message.freezed.dart +++ b/ffigen_codelab/step_07/example/lib/duktape_message.freezed.dart @@ -12,7 +12,8 @@ part of 'duktape_message.dart'; T _$identity(T value) => value; final _privateConstructorUsedError = UnsupportedError( - 'It seems like you constructed your class using `MyClass._()`. This constructor is only meant to be used by freezed and you are not supposed to need it nor use it.\nPlease check the documentation here for more information: https://github.com/rrousselGit/freezed#adding-getters-and-methods-to-our-models'); + 'It seems like you constructed your class using `MyClass._()`. This constructor is only meant to be used by freezed and you are not supposed to need it nor use it.\nPlease check the documentation here for more information: https://github.com/rrousselGit/freezed#adding-getters-and-methods-to-our-models', +); /// @nodoc mixin _$DuktapeMessage { @@ -21,52 +22,47 @@ mixin _$DuktapeMessage { required TResult Function(String code) evaluate, required TResult Function(String result) response, required TResult Function(String log) error, - }) => - throw _privateConstructorUsedError; + }) => throw _privateConstructorUsedError; @optionalTypeArgs TResult? whenOrNull({ TResult? Function(String code)? evaluate, TResult? Function(String result)? response, TResult? Function(String log)? error, - }) => - throw _privateConstructorUsedError; + }) => throw _privateConstructorUsedError; @optionalTypeArgs TResult maybeWhen({ TResult Function(String code)? evaluate, TResult Function(String result)? response, TResult Function(String log)? error, required TResult orElse(), - }) => - throw _privateConstructorUsedError; + }) => throw _privateConstructorUsedError; @optionalTypeArgs TResult map({ required TResult Function(DuktapeMessageCode value) evaluate, required TResult Function(DuktapeMessageResponse value) response, required TResult Function(DuktapeMessageError value) error, - }) => - throw _privateConstructorUsedError; + }) => throw _privateConstructorUsedError; @optionalTypeArgs TResult? mapOrNull({ TResult? Function(DuktapeMessageCode value)? evaluate, TResult? Function(DuktapeMessageResponse value)? response, TResult? Function(DuktapeMessageError value)? error, - }) => - throw _privateConstructorUsedError; + }) => throw _privateConstructorUsedError; @optionalTypeArgs TResult maybeMap({ TResult Function(DuktapeMessageCode value)? evaluate, TResult Function(DuktapeMessageResponse value)? response, TResult Function(DuktapeMessageError value)? error, required TResult orElse(), - }) => - throw _privateConstructorUsedError; + }) => throw _privateConstructorUsedError; } /// @nodoc abstract class $DuktapeMessageCopyWith<$Res> { factory $DuktapeMessageCopyWith( - DuktapeMessage value, $Res Function(DuktapeMessage) then) = - _$DuktapeMessageCopyWithImpl<$Res, DuktapeMessage>; + DuktapeMessage value, + $Res Function(DuktapeMessage) then, + ) = _$DuktapeMessageCopyWithImpl<$Res, DuktapeMessage>; } /// @nodoc @@ -85,9 +81,10 @@ class _$DuktapeMessageCopyWithImpl<$Res, $Val extends DuktapeMessage> /// @nodoc abstract class _$$DuktapeMessageCodeImplCopyWith<$Res> { - factory _$$DuktapeMessageCodeImplCopyWith(_$DuktapeMessageCodeImpl value, - $Res Function(_$DuktapeMessageCodeImpl) then) = - __$$DuktapeMessageCodeImplCopyWithImpl<$Res>; + factory _$$DuktapeMessageCodeImplCopyWith( + _$DuktapeMessageCodeImpl value, + $Res Function(_$DuktapeMessageCodeImpl) then, + ) = __$$DuktapeMessageCodeImplCopyWithImpl<$Res>; @useResult $Res call({String code}); } @@ -96,23 +93,24 @@ abstract class _$$DuktapeMessageCodeImplCopyWith<$Res> { class __$$DuktapeMessageCodeImplCopyWithImpl<$Res> extends _$DuktapeMessageCopyWithImpl<$Res, _$DuktapeMessageCodeImpl> implements _$$DuktapeMessageCodeImplCopyWith<$Res> { - __$$DuktapeMessageCodeImplCopyWithImpl(_$DuktapeMessageCodeImpl _value, - $Res Function(_$DuktapeMessageCodeImpl) _then) - : super(_value, _then); + __$$DuktapeMessageCodeImplCopyWithImpl( + _$DuktapeMessageCodeImpl _value, + $Res Function(_$DuktapeMessageCodeImpl) _then, + ) : super(_value, _then); /// Create a copy of DuktapeMessage /// with the given fields replaced by the non-null parameter values. @pragma('vm:prefer-inline') @override - $Res call({ - Object? code = null, - }) { - return _then(_$DuktapeMessageCodeImpl( - null == code - ? _value.code - : code // ignore: cast_nullable_to_non_nullable - as String, - )); + $Res call({Object? code = null}) { + return _then( + _$DuktapeMessageCodeImpl( + null == code + ? _value.code + : code // ignore: cast_nullable_to_non_nullable + as String, + ), + ); } } @@ -147,7 +145,9 @@ class _$DuktapeMessageCodeImpl implements DuktapeMessageCode { @pragma('vm:prefer-inline') _$$DuktapeMessageCodeImplCopyWith<_$DuktapeMessageCodeImpl> get copyWith => __$$DuktapeMessageCodeImplCopyWithImpl<_$DuktapeMessageCodeImpl>( - this, _$identity); + this, + _$identity, + ); @override @optionalTypeArgs @@ -233,9 +233,9 @@ abstract class DuktapeMessageCode implements DuktapeMessage { /// @nodoc abstract class _$$DuktapeMessageResponseImplCopyWith<$Res> { factory _$$DuktapeMessageResponseImplCopyWith( - _$DuktapeMessageResponseImpl value, - $Res Function(_$DuktapeMessageResponseImpl) then) = - __$$DuktapeMessageResponseImplCopyWithImpl<$Res>; + _$DuktapeMessageResponseImpl value, + $Res Function(_$DuktapeMessageResponseImpl) then, + ) = __$$DuktapeMessageResponseImplCopyWithImpl<$Res>; @useResult $Res call({String result}); } @@ -245,23 +245,23 @@ class __$$DuktapeMessageResponseImplCopyWithImpl<$Res> extends _$DuktapeMessageCopyWithImpl<$Res, _$DuktapeMessageResponseImpl> implements _$$DuktapeMessageResponseImplCopyWith<$Res> { __$$DuktapeMessageResponseImplCopyWithImpl( - _$DuktapeMessageResponseImpl _value, - $Res Function(_$DuktapeMessageResponseImpl) _then) - : super(_value, _then); + _$DuktapeMessageResponseImpl _value, + $Res Function(_$DuktapeMessageResponseImpl) _then, + ) : super(_value, _then); /// Create a copy of DuktapeMessage /// with the given fields replaced by the non-null parameter values. @pragma('vm:prefer-inline') @override - $Res call({ - Object? result = null, - }) { - return _then(_$DuktapeMessageResponseImpl( - null == result - ? _value.result - : result // ignore: cast_nullable_to_non_nullable - as String, - )); + $Res call({Object? result = null}) { + return _then( + _$DuktapeMessageResponseImpl( + null == result + ? _value.result + : result // ignore: cast_nullable_to_non_nullable + as String, + ), + ); } } @@ -295,8 +295,11 @@ class _$DuktapeMessageResponseImpl implements DuktapeMessageResponse { @override @pragma('vm:prefer-inline') _$$DuktapeMessageResponseImplCopyWith<_$DuktapeMessageResponseImpl> - get copyWith => __$$DuktapeMessageResponseImplCopyWithImpl< - _$DuktapeMessageResponseImpl>(this, _$identity); + get copyWith => + __$$DuktapeMessageResponseImplCopyWithImpl<_$DuktapeMessageResponseImpl>( + this, + _$identity, + ); @override @optionalTypeArgs @@ -377,14 +380,15 @@ abstract class DuktapeMessageResponse implements DuktapeMessage { /// with the given fields replaced by the non-null parameter values. @JsonKey(includeFromJson: false, includeToJson: false) _$$DuktapeMessageResponseImplCopyWith<_$DuktapeMessageResponseImpl> - get copyWith => throw _privateConstructorUsedError; + get copyWith => throw _privateConstructorUsedError; } /// @nodoc abstract class _$$DuktapeMessageErrorImplCopyWith<$Res> { - factory _$$DuktapeMessageErrorImplCopyWith(_$DuktapeMessageErrorImpl value, - $Res Function(_$DuktapeMessageErrorImpl) then) = - __$$DuktapeMessageErrorImplCopyWithImpl<$Res>; + factory _$$DuktapeMessageErrorImplCopyWith( + _$DuktapeMessageErrorImpl value, + $Res Function(_$DuktapeMessageErrorImpl) then, + ) = __$$DuktapeMessageErrorImplCopyWithImpl<$Res>; @useResult $Res call({String log}); } @@ -393,23 +397,24 @@ abstract class _$$DuktapeMessageErrorImplCopyWith<$Res> { class __$$DuktapeMessageErrorImplCopyWithImpl<$Res> extends _$DuktapeMessageCopyWithImpl<$Res, _$DuktapeMessageErrorImpl> implements _$$DuktapeMessageErrorImplCopyWith<$Res> { - __$$DuktapeMessageErrorImplCopyWithImpl(_$DuktapeMessageErrorImpl _value, - $Res Function(_$DuktapeMessageErrorImpl) _then) - : super(_value, _then); + __$$DuktapeMessageErrorImplCopyWithImpl( + _$DuktapeMessageErrorImpl _value, + $Res Function(_$DuktapeMessageErrorImpl) _then, + ) : super(_value, _then); /// Create a copy of DuktapeMessage /// with the given fields replaced by the non-null parameter values. @pragma('vm:prefer-inline') @override - $Res call({ - Object? log = null, - }) { - return _then(_$DuktapeMessageErrorImpl( - null == log - ? _value.log - : log // ignore: cast_nullable_to_non_nullable - as String, - )); + $Res call({Object? log = null}) { + return _then( + _$DuktapeMessageErrorImpl( + null == log + ? _value.log + : log // ignore: cast_nullable_to_non_nullable + as String, + ), + ); } } @@ -444,7 +449,9 @@ class _$DuktapeMessageErrorImpl implements DuktapeMessageError { @pragma('vm:prefer-inline') _$$DuktapeMessageErrorImplCopyWith<_$DuktapeMessageErrorImpl> get copyWith => __$$DuktapeMessageErrorImplCopyWithImpl<_$DuktapeMessageErrorImpl>( - this, _$identity); + this, + _$identity, + ); @override @optionalTypeArgs diff --git a/ffigen_codelab/step_07/example/lib/main.dart b/ffigen_codelab/step_07/example/lib/main.dart index 4f403f3d00..61c431dff4 100644 --- a/ffigen_codelab/step_07/example/lib/main.dart +++ b/ffigen_codelab/step_07/example/lib/main.dart @@ -15,31 +15,22 @@ void main() { final duktapeMessagesProvider = StateNotifierProvider>((ref) { - return DuktapeMessageNotifier(messages: []); -}); + return DuktapeMessageNotifier(messages: []); + }); class DuktapeMessageNotifier extends StateNotifier> { DuktapeMessageNotifier({required List messages}) - : duktape = Duktape(), - super(messages); + : duktape = Duktape(), + super(messages); final Duktape duktape; void eval(String code) { - state = [ - DuktapeMessage.evaluate(code), - ...state, - ]; + state = [DuktapeMessage.evaluate(code), ...state]; try { final response = duktape.evalString(code); - state = [ - DuktapeMessage.response(response), - ...state, - ]; + state = [DuktapeMessage.response(response), ...state]; } catch (e) { - state = [ - DuktapeMessage.error('$e'), - ...state, - ]; + state = [DuktapeMessage.error('$e'), ...state]; } } } @@ -49,17 +40,12 @@ class DuktapeApp extends StatelessWidget { @override Widget build(BuildContext context) { - return const MaterialApp( - title: 'Duktape App', - home: DuktapeRepl(), - ); + return const MaterialApp(title: 'Duktape App', home: DuktapeRepl()); } } class DuktapeRepl extends ConsumerStatefulWidget { - const DuktapeRepl({ - super.key, - }); + const DuktapeRepl({super.key}); @override ConsumerState createState() => _DuktapeReplState(); @@ -100,38 +86,45 @@ class _DuktapeReplState extends ConsumerState { child: ListView.builder( padding: const EdgeInsets.all(8.0), reverse: true, - itemBuilder: (context, idx) => messages[idx].when( - evaluate: (str) => Padding( - padding: const EdgeInsets.symmetric(vertical: 2), - child: Text( - '> $str', - style: GoogleFonts.firaCode( - textStyle: Theme.of(context).textTheme.titleMedium, - ), - ), - ), - response: (str) => Padding( - padding: const EdgeInsets.symmetric(vertical: 2), - child: Text( - '= $str', - style: GoogleFonts.firaCode( - textStyle: Theme.of(context).textTheme.titleMedium, - color: Colors.blue[800], - ), + itemBuilder: + (context, idx) => messages[idx].when( + evaluate: + (str) => Padding( + padding: const EdgeInsets.symmetric(vertical: 2), + child: Text( + '> $str', + style: GoogleFonts.firaCode( + textStyle: + Theme.of(context).textTheme.titleMedium, + ), + ), + ), + response: + (str) => Padding( + padding: const EdgeInsets.symmetric(vertical: 2), + child: Text( + '= $str', + style: GoogleFonts.firaCode( + textStyle: + Theme.of(context).textTheme.titleMedium, + color: Colors.blue[800], + ), + ), + ), + error: + (str) => Padding( + padding: const EdgeInsets.symmetric(vertical: 2), + child: Text( + str, + style: GoogleFonts.firaCode( + textStyle: + Theme.of(context).textTheme.titleSmall, + color: Colors.red[800], + fontWeight: FontWeight.bold, + ), + ), + ), ), - ), - error: (str) => Padding( - padding: const EdgeInsets.symmetric(vertical: 2), - child: Text( - str, - style: GoogleFonts.firaCode( - textStyle: Theme.of(context).textTheme.titleSmall, - color: Colors.red[800], - fontWeight: FontWeight.bold, - ), - ), - ), - ), itemCount: messages.length, ), ), @@ -162,9 +155,7 @@ class _DuktapeReplState extends ConsumerState { Flexible( child: TextField( controller: _controller, - decoration: const InputDecoration( - border: InputBorder.none, - ), + decoration: const InputDecoration(border: InputBorder.none), onChanged: (text) { setState(() { _isComposing = text.isNotEmpty; @@ -178,9 +169,10 @@ class _DuktapeReplState extends ConsumerState { margin: const EdgeInsets.symmetric(horizontal: 4.0), child: IconButton( icon: const Icon(Icons.send), - onPressed: _isComposing - ? () => _handleSubmitted(_controller.text) - : null, + onPressed: + _isComposing + ? () => _handleSubmitted(_controller.text) + : null, ), ), ], diff --git a/ffigen_codelab/step_07/example/pubspec.yaml b/ffigen_codelab/step_07/example/pubspec.yaml index 4ec65a8e6b..5fdcdf31ce 100644 --- a/ffigen_codelab/step_07/example/pubspec.yaml +++ b/ffigen_codelab/step_07/example/pubspec.yaml @@ -19,7 +19,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev version: 1.0.0+1 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 # Dependencies specify other packages that your package needs in order to work. # To automatically upgrade your package dependencies to the latest versions diff --git a/ffigen_codelab/step_07/lib/duktape_bindings_generated.dart b/ffigen_codelab/step_07/lib/duktape_bindings_generated.dart index 429f3bc134..7579ae6633 100644 --- a/ffigen_codelab/step_07/lib/duktape_bindings_generated.dart +++ b/ffigen_codelab/step_07/lib/duktape_bindings_generated.dart @@ -15,17 +15,16 @@ import 'dart:ffi' as ffi; class DuktapeBindings { /// Holds the symbol lookup function. final ffi.Pointer Function(String symbolName) - _lookup; + _lookup; /// The symbols are looked up in [dynamicLibrary]. DuktapeBindings(ffi.DynamicLibrary dynamicLibrary) - : _lookup = dynamicLibrary.lookup; + : _lookup = dynamicLibrary.lookup; /// The symbols are looked up with [lookup]. DuktapeBindings.fromLookup( - ffi.Pointer Function(String symbolName) - lookup) - : _lookup = lookup; + ffi.Pointer Function(String symbolName) lookup, + ) : _lookup = lookup; /// Context management ffi.Pointer duk_create_heap( @@ -45,226 +44,241 @@ class DuktapeBindings { } late final _duk_create_heapPtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function( + ffi.NativeFunction< + ffi.Pointer Function( + duk_alloc_function, + duk_realloc_function, + duk_free_function, + ffi.Pointer, + duk_fatal_function, + ) + > + >('duk_create_heap'); + late final _duk_create_heap = + _duk_create_heapPtr + .asFunction< + ffi.Pointer Function( duk_alloc_function, duk_realloc_function, duk_free_function, ffi.Pointer, - duk_fatal_function)>>('duk_create_heap'); - late final _duk_create_heap = _duk_create_heapPtr.asFunction< - ffi.Pointer Function( - duk_alloc_function, - duk_realloc_function, - duk_free_function, - ffi.Pointer, - duk_fatal_function)>(); + duk_fatal_function, + ) + >(); - void duk_destroy_heap( - ffi.Pointer ctx, - ) { - return _duk_destroy_heap( - ctx, - ); + void duk_destroy_heap(ffi.Pointer ctx) { + return _duk_destroy_heap(ctx); } late final _duk_destroy_heapPtr = _lookup)>>( - 'duk_destroy_heap'); - late final _duk_destroy_heap = _duk_destroy_heapPtr - .asFunction)>(); + 'duk_destroy_heap', + ); + late final _duk_destroy_heap = + _duk_destroy_heapPtr + .asFunction)>(); void duk_suspend( ffi.Pointer ctx, ffi.Pointer state, ) { - return _duk_suspend( - ctx, - state, - ); + return _duk_suspend(ctx, state); } late final _duk_suspendPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function(ffi.Pointer, - ffi.Pointer)>>('duk_suspend'); - late final _duk_suspend = _duk_suspendPtr.asFunction< - void Function(ffi.Pointer, ffi.Pointer)>(); + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer) + > + >('duk_suspend'); + late final _duk_suspend = + _duk_suspendPtr + .asFunction< + void Function( + ffi.Pointer, + ffi.Pointer, + ) + >(); void duk_resume( ffi.Pointer ctx, ffi.Pointer state, ) { - return _duk_resume( - ctx, - state, - ); + return _duk_resume(ctx, state); } late final _duk_resumePtr = _lookup< - ffi.NativeFunction< - ffi.Void Function(ffi.Pointer, - ffi.Pointer)>>('duk_resume'); - late final _duk_resume = _duk_resumePtr.asFunction< - void Function(ffi.Pointer, ffi.Pointer)>(); + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer) + > + >('duk_resume'); + late final _duk_resume = + _duk_resumePtr + .asFunction< + void Function( + ffi.Pointer, + ffi.Pointer, + ) + >(); /// Memory management /// /// Raw functions have no side effects (cannot trigger GC). - ffi.Pointer duk_alloc_raw( - ffi.Pointer ctx, - int size, - ) { - return _duk_alloc_raw( - ctx, - size, - ); + ffi.Pointer duk_alloc_raw(ffi.Pointer ctx, int size) { + return _duk_alloc_raw(ctx, size); } late final _duk_alloc_rawPtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function( - ffi.Pointer, duk_size_t)>>('duk_alloc_raw'); - late final _duk_alloc_raw = _duk_alloc_rawPtr.asFunction< - ffi.Pointer Function(ffi.Pointer, int)>(); + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, duk_size_t) + > + >('duk_alloc_raw'); + late final _duk_alloc_raw = + _duk_alloc_rawPtr + .asFunction< + ffi.Pointer Function(ffi.Pointer, int) + >(); - void duk_free_raw( - ffi.Pointer ctx, - ffi.Pointer ptr, - ) { - return _duk_free_raw( - ctx, - ptr, - ); + void duk_free_raw(ffi.Pointer ctx, ffi.Pointer ptr) { + return _duk_free_raw(ctx, ptr); } late final _duk_free_rawPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function(ffi.Pointer, - ffi.Pointer)>>('duk_free_raw'); - late final _duk_free_raw = _duk_free_rawPtr.asFunction< - void Function(ffi.Pointer, ffi.Pointer)>(); + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer) + > + >('duk_free_raw'); + late final _duk_free_raw = + _duk_free_rawPtr + .asFunction< + void Function(ffi.Pointer, ffi.Pointer) + >(); ffi.Pointer duk_realloc_raw( ffi.Pointer ctx, ffi.Pointer ptr, int size, ) { - return _duk_realloc_raw( - ctx, - ptr, - size, - ); + return _duk_realloc_raw(ctx, ptr, size); } late final _duk_realloc_rawPtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function(ffi.Pointer, - ffi.Pointer, duk_size_t)>>('duk_realloc_raw'); - late final _duk_realloc_raw = _duk_realloc_rawPtr.asFunction< + ffi.NativeFunction< ffi.Pointer Function( - ffi.Pointer, ffi.Pointer, int)>(); + ffi.Pointer, + ffi.Pointer, + duk_size_t, + ) + > + >('duk_realloc_raw'); + late final _duk_realloc_raw = + _duk_realloc_rawPtr + .asFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + int, + ) + >(); - ffi.Pointer duk_alloc( - ffi.Pointer ctx, - int size, - ) { - return _duk_alloc( - ctx, - size, - ); + ffi.Pointer duk_alloc(ffi.Pointer ctx, int size) { + return _duk_alloc(ctx, size); } late final _duk_allocPtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function( - ffi.Pointer, duk_size_t)>>('duk_alloc'); - late final _duk_alloc = _duk_allocPtr.asFunction< - ffi.Pointer Function(ffi.Pointer, int)>(); + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, duk_size_t) + > + >('duk_alloc'); + late final _duk_alloc = + _duk_allocPtr + .asFunction< + ffi.Pointer Function(ffi.Pointer, int) + >(); - void duk_free( - ffi.Pointer ctx, - ffi.Pointer ptr, - ) { - return _duk_free( - ctx, - ptr, - ); + void duk_free(ffi.Pointer ctx, ffi.Pointer ptr) { + return _duk_free(ctx, ptr); } late final _duk_freePtr = _lookup< - ffi.NativeFunction< - ffi.Void Function( - ffi.Pointer, ffi.Pointer)>>('duk_free'); - late final _duk_free = _duk_freePtr.asFunction< - void Function(ffi.Pointer, ffi.Pointer)>(); + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer) + > + >('duk_free'); + late final _duk_free = + _duk_freePtr + .asFunction< + void Function(ffi.Pointer, ffi.Pointer) + >(); ffi.Pointer duk_realloc( ffi.Pointer ctx, ffi.Pointer ptr, int size, ) { - return _duk_realloc( - ctx, - ptr, - size, - ); + return _duk_realloc(ctx, ptr, size); } late final _duk_reallocPtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function(ffi.Pointer, - ffi.Pointer, duk_size_t)>>('duk_realloc'); - late final _duk_realloc = _duk_reallocPtr.asFunction< + ffi.NativeFunction< ffi.Pointer Function( - ffi.Pointer, ffi.Pointer, int)>(); + ffi.Pointer, + ffi.Pointer, + duk_size_t, + ) + > + >('duk_realloc'); + late final _duk_realloc = + _duk_reallocPtr + .asFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + int, + ) + >(); void duk_get_memory_functions( ffi.Pointer ctx, ffi.Pointer out_funcs, ) { - return _duk_get_memory_functions( - ctx, - out_funcs, - ); + return _duk_get_memory_functions(ctx, out_funcs); } late final _duk_get_memory_functionsPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function(ffi.Pointer, - ffi.Pointer)>>('duk_get_memory_functions'); + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer, + ffi.Pointer, + ) + > + >('duk_get_memory_functions'); late final _duk_get_memory_functions = - _duk_get_memory_functionsPtr.asFunction< - void Function( - ffi.Pointer, ffi.Pointer)>(); + _duk_get_memory_functionsPtr + .asFunction< + void Function( + ffi.Pointer, + ffi.Pointer, + ) + >(); - void duk_gc( - ffi.Pointer ctx, - int flags, - ) { - return _duk_gc( - ctx, - flags, - ); + void duk_gc(ffi.Pointer ctx, int flags) { + return _duk_gc(ctx, flags); } late final _duk_gcPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function(ffi.Pointer, duk_uint_t)>>('duk_gc'); + ffi.NativeFunction, duk_uint_t)> + >('duk_gc'); late final _duk_gc = _duk_gcPtr.asFunction, int)>(); - void duk_throw_raw( - ffi.Pointer ctx, - ) { - return _duk_throw_raw( - ctx, - ); + void duk_throw_raw(ffi.Pointer ctx) { + return _duk_throw_raw(ctx); } late final _duk_throw_rawPtr = _lookup)>>( - 'duk_throw_raw'); + 'duk_throw_raw', + ); late final _duk_throw_raw = _duk_throw_rawPtr.asFunction)>(); @@ -272,18 +286,19 @@ class DuktapeBindings { ffi.Pointer ctx, ffi.Pointer err_msg, ) { - return _duk_fatal_raw( - ctx, - err_msg, - ); + return _duk_fatal_raw(ctx, err_msg); } late final _duk_fatal_rawPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function(ffi.Pointer, - ffi.Pointer)>>('duk_fatal_raw'); - late final _duk_fatal_raw = _duk_fatal_rawPtr.asFunction< - void Function(ffi.Pointer, ffi.Pointer)>(); + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer) + > + >('duk_fatal_raw'); + late final _duk_fatal_raw = + _duk_fatal_rawPtr + .asFunction< + void Function(ffi.Pointer, ffi.Pointer) + >(); void duk_error_raw( ffi.Pointer ctx, @@ -292,26 +307,31 @@ class DuktapeBindings { int line, ffi.Pointer fmt, ) { - return _duk_error_raw( - ctx, - err_code, - filename, - line, - fmt, - ); + return _duk_error_raw(ctx, err_code, filename, line, fmt); } late final _duk_error_rawPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function( + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer, + duk_errcode_t, + ffi.Pointer, + duk_int_t, + ffi.Pointer, + ) + > + >('duk_error_raw'); + late final _duk_error_raw = + _duk_error_rawPtr + .asFunction< + void Function( ffi.Pointer, - duk_errcode_t, + int, ffi.Pointer, - duk_int_t, - ffi.Pointer)>>('duk_error_raw'); - late final _duk_error_raw = _duk_error_rawPtr.asFunction< - void Function(ffi.Pointer, int, ffi.Pointer, int, - ffi.Pointer)>(); + int, + ffi.Pointer, + ) + >(); void duk_error_va_raw( ffi.Pointer ctx, @@ -321,185 +341,147 @@ class DuktapeBindings { ffi.Pointer fmt, va_list ap, ) { - return _duk_error_va_raw( - ctx, - err_code, - filename, - line, - fmt, - ap, - ); + return _duk_error_va_raw(ctx, err_code, filename, line, fmt, ap); } late final _duk_error_va_rawPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function( + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer, + duk_errcode_t, + ffi.Pointer, + duk_int_t, + ffi.Pointer, + va_list, + ) + > + >('duk_error_va_raw'); + late final _duk_error_va_raw = + _duk_error_va_rawPtr + .asFunction< + void Function( ffi.Pointer, - duk_errcode_t, + int, ffi.Pointer, - duk_int_t, + int, ffi.Pointer, - va_list)>>('duk_error_va_raw'); - late final _duk_error_va_raw = _duk_error_va_rawPtr.asFunction< - void Function(ffi.Pointer, int, ffi.Pointer, int, - ffi.Pointer, va_list)>(); + va_list, + ) + >(); /// Other state related functions - int duk_is_strict_call( - ffi.Pointer ctx, - ) { - return _duk_is_strict_call( - ctx, - ); + int duk_is_strict_call(ffi.Pointer ctx) { + return _duk_is_strict_call(ctx); } late final _duk_is_strict_callPtr = _lookup< - ffi.NativeFunction)>>( - 'duk_is_strict_call'); - late final _duk_is_strict_call = _duk_is_strict_callPtr - .asFunction)>(); + ffi.NativeFunction)> + >('duk_is_strict_call'); + late final _duk_is_strict_call = + _duk_is_strict_callPtr + .asFunction)>(); - int duk_is_constructor_call( - ffi.Pointer ctx, - ) { - return _duk_is_constructor_call( - ctx, - ); + int duk_is_constructor_call(ffi.Pointer ctx) { + return _duk_is_constructor_call(ctx); } late final _duk_is_constructor_callPtr = _lookup< - ffi.NativeFunction)>>( - 'duk_is_constructor_call'); - late final _duk_is_constructor_call = _duk_is_constructor_callPtr - .asFunction)>(); + ffi.NativeFunction)> + >('duk_is_constructor_call'); + late final _duk_is_constructor_call = + _duk_is_constructor_callPtr + .asFunction)>(); /// Stack management - int duk_normalize_index( - ffi.Pointer ctx, - int idx, - ) { - return _duk_normalize_index( - ctx, - idx, - ); + int duk_normalize_index(ffi.Pointer ctx, int idx) { + return _duk_normalize_index(ctx, idx); } late final _duk_normalize_indexPtr = _lookup< - ffi.NativeFunction< - duk_idx_t Function( - ffi.Pointer, duk_idx_t)>>('duk_normalize_index'); - late final _duk_normalize_index = _duk_normalize_indexPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_normalize_index'); + late final _duk_normalize_index = + _duk_normalize_indexPtr + .asFunction, int)>(); - int duk_require_normalize_index( - ffi.Pointer ctx, - int idx, - ) { - return _duk_require_normalize_index( - ctx, - idx, - ); + int duk_require_normalize_index(ffi.Pointer ctx, int idx) { + return _duk_require_normalize_index(ctx, idx); } late final _duk_require_normalize_indexPtr = _lookup< - ffi.NativeFunction< - duk_idx_t Function(ffi.Pointer, - duk_idx_t)>>('duk_require_normalize_index'); - late final _duk_require_normalize_index = _duk_require_normalize_indexPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_require_normalize_index'); + late final _duk_require_normalize_index = + _duk_require_normalize_indexPtr + .asFunction, int)>(); - int duk_is_valid_index( - ffi.Pointer ctx, - int idx, - ) { - return _duk_is_valid_index( - ctx, - idx, - ); + int duk_is_valid_index(ffi.Pointer ctx, int idx) { + return _duk_is_valid_index(ctx, idx); } late final _duk_is_valid_indexPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function( - ffi.Pointer, duk_idx_t)>>('duk_is_valid_index'); - late final _duk_is_valid_index = _duk_is_valid_indexPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_is_valid_index'); + late final _duk_is_valid_index = + _duk_is_valid_indexPtr + .asFunction, int)>(); - void duk_require_valid_index( - ffi.Pointer ctx, - int idx, - ) { - return _duk_require_valid_index( - ctx, - idx, - ); + void duk_require_valid_index(ffi.Pointer ctx, int idx) { + return _duk_require_valid_index(ctx, idx); } late final _duk_require_valid_indexPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function( - ffi.Pointer, duk_idx_t)>>('duk_require_valid_index'); - late final _duk_require_valid_index = _duk_require_valid_indexPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_require_valid_index'); + late final _duk_require_valid_index = + _duk_require_valid_indexPtr + .asFunction, int)>(); - int duk_get_top( - ffi.Pointer ctx, - ) { - return _duk_get_top( - ctx, - ); + int duk_get_top(ffi.Pointer ctx) { + return _duk_get_top(ctx); } late final _duk_get_topPtr = _lookup)>>( - 'duk_get_top'); + 'duk_get_top', + ); late final _duk_get_top = _duk_get_topPtr.asFunction)>(); - void duk_set_top( - ffi.Pointer ctx, - int idx, - ) { - return _duk_set_top( - ctx, - idx, - ); + void duk_set_top(ffi.Pointer ctx, int idx) { + return _duk_set_top(ctx, idx); } late final _duk_set_topPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function( - ffi.Pointer, duk_idx_t)>>('duk_set_top'); - late final _duk_set_top = _duk_set_topPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_set_top'); + late final _duk_set_top = + _duk_set_topPtr + .asFunction, int)>(); - int duk_get_top_index( - ffi.Pointer ctx, - ) { - return _duk_get_top_index( - ctx, - ); + int duk_get_top_index(ffi.Pointer ctx) { + return _duk_get_top_index(ctx); } late final _duk_get_top_indexPtr = _lookup)>>( - 'duk_get_top_index'); - late final _duk_get_top_index = _duk_get_top_indexPtr - .asFunction)>(); + 'duk_get_top_index', + ); + late final _duk_get_top_index = + _duk_get_top_indexPtr + .asFunction)>(); - int duk_require_top_index( - ffi.Pointer ctx, - ) { - return _duk_require_top_index( - ctx, - ); + int duk_require_top_index(ffi.Pointer ctx) { + return _duk_require_top_index(ctx); } late final _duk_require_top_indexPtr = _lookup)>>( - 'duk_require_top_index'); - late final _duk_require_top_index = _duk_require_top_indexPtr - .asFunction)>(); + 'duk_require_top_index', + ); + late final _duk_require_top_index = + _duk_require_top_indexPtr + .asFunction)>(); /// Although extra/top could be an unsigned type here, using a signed type /// makes the API more robust to calling code calculation errors or corner @@ -507,224 +489,147 @@ class DuktapeBindings { /// Negative values are treated as zero, which is better than casting them /// to a large unsigned number. (This principle is used elsewhere in the /// API too.) - int duk_check_stack( - ffi.Pointer ctx, - int extra, - ) { - return _duk_check_stack( - ctx, - extra, - ); + int duk_check_stack(ffi.Pointer ctx, int extra) { + return _duk_check_stack(ctx, extra); } late final _duk_check_stackPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function( - ffi.Pointer, duk_idx_t)>>('duk_check_stack'); - late final _duk_check_stack = _duk_check_stackPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_check_stack'); + late final _duk_check_stack = + _duk_check_stackPtr + .asFunction, int)>(); - void duk_require_stack( - ffi.Pointer ctx, - int extra, - ) { - return _duk_require_stack( - ctx, - extra, - ); + void duk_require_stack(ffi.Pointer ctx, int extra) { + return _duk_require_stack(ctx, extra); } late final _duk_require_stackPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function( - ffi.Pointer, duk_idx_t)>>('duk_require_stack'); - late final _duk_require_stack = _duk_require_stackPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_require_stack'); + late final _duk_require_stack = + _duk_require_stackPtr + .asFunction, int)>(); - int duk_check_stack_top( - ffi.Pointer ctx, - int top, - ) { - return _duk_check_stack_top( - ctx, - top, - ); + int duk_check_stack_top(ffi.Pointer ctx, int top) { + return _duk_check_stack_top(ctx, top); } late final _duk_check_stack_topPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function( - ffi.Pointer, duk_idx_t)>>('duk_check_stack_top'); - late final _duk_check_stack_top = _duk_check_stack_topPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_check_stack_top'); + late final _duk_check_stack_top = + _duk_check_stack_topPtr + .asFunction, int)>(); - void duk_require_stack_top( - ffi.Pointer ctx, - int top, - ) { - return _duk_require_stack_top( - ctx, - top, - ); + void duk_require_stack_top(ffi.Pointer ctx, int top) { + return _duk_require_stack_top(ctx, top); } late final _duk_require_stack_topPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function( - ffi.Pointer, duk_idx_t)>>('duk_require_stack_top'); - late final _duk_require_stack_top = _duk_require_stack_topPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_require_stack_top'); + late final _duk_require_stack_top = + _duk_require_stack_topPtr + .asFunction, int)>(); /// Stack manipulation (other than push/pop) - void duk_swap( - ffi.Pointer ctx, - int idx1, - int idx2, - ) { - return _duk_swap( - ctx, - idx1, - idx2, - ); + void duk_swap(ffi.Pointer ctx, int idx1, int idx2) { + return _duk_swap(ctx, idx1, idx2); } late final _duk_swapPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function( - ffi.Pointer, duk_idx_t, duk_idx_t)>>('duk_swap'); - late final _duk_swap = _duk_swapPtr - .asFunction, int, int)>(); + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, duk_idx_t, duk_idx_t) + > + >('duk_swap'); + late final _duk_swap = + _duk_swapPtr + .asFunction, int, int)>(); - void duk_swap_top( - ffi.Pointer ctx, - int idx, - ) { - return _duk_swap_top( - ctx, - idx, - ); + void duk_swap_top(ffi.Pointer ctx, int idx) { + return _duk_swap_top(ctx, idx); } late final _duk_swap_topPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function( - ffi.Pointer, duk_idx_t)>>('duk_swap_top'); - late final _duk_swap_top = _duk_swap_topPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_swap_top'); + late final _duk_swap_top = + _duk_swap_topPtr + .asFunction, int)>(); - void duk_dup( - ffi.Pointer ctx, - int from_idx, - ) { - return _duk_dup( - ctx, - from_idx, - ); + void duk_dup(ffi.Pointer ctx, int from_idx) { + return _duk_dup(ctx, from_idx); } late final _duk_dupPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function(ffi.Pointer, duk_idx_t)>>('duk_dup'); + ffi.NativeFunction, duk_idx_t)> + >('duk_dup'); late final _duk_dup = _duk_dupPtr.asFunction, int)>(); - void duk_dup_top( - ffi.Pointer ctx, - ) { - return _duk_dup_top( - ctx, - ); + void duk_dup_top(ffi.Pointer ctx) { + return _duk_dup_top(ctx); } late final _duk_dup_topPtr = _lookup)>>( - 'duk_dup_top'); + 'duk_dup_top', + ); late final _duk_dup_top = _duk_dup_topPtr.asFunction)>(); - void duk_insert( - ffi.Pointer ctx, - int to_idx, - ) { - return _duk_insert( - ctx, - to_idx, - ); + void duk_insert(ffi.Pointer ctx, int to_idx) { + return _duk_insert(ctx, to_idx); } late final _duk_insertPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function( - ffi.Pointer, duk_idx_t)>>('duk_insert'); + ffi.NativeFunction, duk_idx_t)> + >('duk_insert'); late final _duk_insert = _duk_insertPtr.asFunction, int)>(); - void duk_pull( - ffi.Pointer ctx, - int from_idx, - ) { - return _duk_pull( - ctx, - from_idx, - ); + void duk_pull(ffi.Pointer ctx, int from_idx) { + return _duk_pull(ctx, from_idx); } late final _duk_pullPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function(ffi.Pointer, duk_idx_t)>>('duk_pull'); + ffi.NativeFunction, duk_idx_t)> + >('duk_pull'); late final _duk_pull = _duk_pullPtr.asFunction, int)>(); - void duk_replace( - ffi.Pointer ctx, - int to_idx, - ) { - return _duk_replace( - ctx, - to_idx, - ); + void duk_replace(ffi.Pointer ctx, int to_idx) { + return _duk_replace(ctx, to_idx); } late final _duk_replacePtr = _lookup< - ffi.NativeFunction< - ffi.Void Function( - ffi.Pointer, duk_idx_t)>>('duk_replace'); - late final _duk_replace = _duk_replacePtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_replace'); + late final _duk_replace = + _duk_replacePtr + .asFunction, int)>(); - void duk_copy( - ffi.Pointer ctx, - int from_idx, - int to_idx, - ) { - return _duk_copy( - ctx, - from_idx, - to_idx, - ); + void duk_copy(ffi.Pointer ctx, int from_idx, int to_idx) { + return _duk_copy(ctx, from_idx, to_idx); } late final _duk_copyPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function( - ffi.Pointer, duk_idx_t, duk_idx_t)>>('duk_copy'); - late final _duk_copy = _duk_copyPtr - .asFunction, int, int)>(); + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, duk_idx_t, duk_idx_t) + > + >('duk_copy'); + late final _duk_copy = + _duk_copyPtr + .asFunction, int, int)>(); - void duk_remove( - ffi.Pointer ctx, - int idx, - ) { - return _duk_remove( - ctx, - idx, - ); + void duk_remove(ffi.Pointer ctx, int idx) { + return _duk_remove(ctx, idx); } late final _duk_removePtr = _lookup< - ffi.NativeFunction< - ffi.Void Function( - ffi.Pointer, duk_idx_t)>>('duk_remove'); + ffi.NativeFunction, duk_idx_t)> + >('duk_remove'); late final _duk_remove = _duk_removePtr.asFunction, int)>(); @@ -734,21 +639,29 @@ class DuktapeBindings { int count, int is_copy, ) { - return _duk_xcopymove_raw( - to_ctx, - from_ctx, - count, - is_copy, - ); + return _duk_xcopymove_raw(to_ctx, from_ctx, count, is_copy); } late final _duk_xcopymove_rawPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function(ffi.Pointer, ffi.Pointer, - duk_idx_t, duk_bool_t)>>('duk_xcopymove_raw'); - late final _duk_xcopymove_raw = _duk_xcopymove_rawPtr.asFunction< - void Function( - ffi.Pointer, ffi.Pointer, int, int)>(); + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer, + ffi.Pointer, + duk_idx_t, + duk_bool_t, + ) + > + >('duk_xcopymove_raw'); + late final _duk_xcopymove_raw = + _duk_xcopymove_rawPtr + .asFunction< + void Function( + ffi.Pointer, + ffi.Pointer, + int, + int, + ) + >(); /// Push operations /// @@ -756,446 +669,417 @@ class DuktapeBindings { /// position of the pushed value for convenience. /// /// Note: duk_dup() is technically a push. - void duk_push_undefined( - ffi.Pointer ctx, - ) { - return _duk_push_undefined( - ctx, - ); + void duk_push_undefined(ffi.Pointer ctx) { + return _duk_push_undefined(ctx); } late final _duk_push_undefinedPtr = _lookup)>>( - 'duk_push_undefined'); - late final _duk_push_undefined = _duk_push_undefinedPtr - .asFunction)>(); + 'duk_push_undefined', + ); + late final _duk_push_undefined = + _duk_push_undefinedPtr + .asFunction)>(); - void duk_push_null( - ffi.Pointer ctx, - ) { - return _duk_push_null( - ctx, - ); + void duk_push_null(ffi.Pointer ctx) { + return _duk_push_null(ctx); } late final _duk_push_nullPtr = _lookup)>>( - 'duk_push_null'); + 'duk_push_null', + ); late final _duk_push_null = _duk_push_nullPtr.asFunction)>(); - void duk_push_boolean( - ffi.Pointer ctx, - int val, - ) { - return _duk_push_boolean( - ctx, - val, - ); + void duk_push_boolean(ffi.Pointer ctx, int val) { + return _duk_push_boolean(ctx, val); } late final _duk_push_booleanPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function( - ffi.Pointer, duk_bool_t)>>('duk_push_boolean'); - late final _duk_push_boolean = _duk_push_booleanPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_bool_t)> + >('duk_push_boolean'); + late final _duk_push_boolean = + _duk_push_booleanPtr + .asFunction, int)>(); - void duk_push_true( - ffi.Pointer ctx, - ) { - return _duk_push_true( - ctx, - ); + void duk_push_true(ffi.Pointer ctx) { + return _duk_push_true(ctx); } late final _duk_push_truePtr = _lookup)>>( - 'duk_push_true'); + 'duk_push_true', + ); late final _duk_push_true = _duk_push_truePtr.asFunction)>(); - void duk_push_false( - ffi.Pointer ctx, - ) { - return _duk_push_false( - ctx, - ); + void duk_push_false(ffi.Pointer ctx) { + return _duk_push_false(ctx); } late final _duk_push_falsePtr = _lookup)>>( - 'duk_push_false'); + 'duk_push_false', + ); late final _duk_push_false = _duk_push_falsePtr.asFunction)>(); - void duk_push_number( - ffi.Pointer ctx, - double val, - ) { - return _duk_push_number( - ctx, - val, - ); + void duk_push_number(ffi.Pointer ctx, double val) { + return _duk_push_number(ctx, val); } late final _duk_push_numberPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function( - ffi.Pointer, duk_double_t)>>('duk_push_number'); - late final _duk_push_number = _duk_push_numberPtr - .asFunction, double)>(); + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, duk_double_t) + > + >('duk_push_number'); + late final _duk_push_number = + _duk_push_numberPtr + .asFunction, double)>(); - void duk_push_nan( - ffi.Pointer ctx, - ) { - return _duk_push_nan( - ctx, - ); + void duk_push_nan(ffi.Pointer ctx) { + return _duk_push_nan(ctx); } late final _duk_push_nanPtr = _lookup)>>( - 'duk_push_nan'); + 'duk_push_nan', + ); late final _duk_push_nan = _duk_push_nanPtr.asFunction)>(); - void duk_push_int( - ffi.Pointer ctx, - int val, - ) { - return _duk_push_int( - ctx, - val, - ); + void duk_push_int(ffi.Pointer ctx, int val) { + return _duk_push_int(ctx, val); } late final _duk_push_intPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function( - ffi.Pointer, duk_int_t)>>('duk_push_int'); - late final _duk_push_int = _duk_push_intPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_int_t)> + >('duk_push_int'); + late final _duk_push_int = + _duk_push_intPtr + .asFunction, int)>(); - void duk_push_uint( - ffi.Pointer ctx, - int val, - ) { - return _duk_push_uint( - ctx, - val, - ); + void duk_push_uint(ffi.Pointer ctx, int val) { + return _duk_push_uint(ctx, val); } late final _duk_push_uintPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function( - ffi.Pointer, duk_uint_t)>>('duk_push_uint'); - late final _duk_push_uint = _duk_push_uintPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_uint_t)> + >('duk_push_uint'); + late final _duk_push_uint = + _duk_push_uintPtr + .asFunction, int)>(); ffi.Pointer duk_push_string( ffi.Pointer ctx, ffi.Pointer str, ) { - return _duk_push_string( - ctx, - str, - ); + return _duk_push_string(ctx, str); } late final _duk_push_stringPtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function(ffi.Pointer, - ffi.Pointer)>>('duk_push_string'); - late final _duk_push_string = _duk_push_stringPtr.asFunction< + ffi.NativeFunction< ffi.Pointer Function( - ffi.Pointer, ffi.Pointer)>(); + ffi.Pointer, + ffi.Pointer, + ) + > + >('duk_push_string'); + late final _duk_push_string = + _duk_push_stringPtr + .asFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ) + >(); ffi.Pointer duk_push_lstring( ffi.Pointer ctx, ffi.Pointer str, int len, ) { - return _duk_push_lstring( - ctx, - str, - len, - ); + return _duk_push_lstring(ctx, str, len); } late final _duk_push_lstringPtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function(ffi.Pointer, - ffi.Pointer, duk_size_t)>>('duk_push_lstring'); - late final _duk_push_lstring = _duk_push_lstringPtr.asFunction< + ffi.NativeFunction< ffi.Pointer Function( - ffi.Pointer, ffi.Pointer, int)>(); + ffi.Pointer, + ffi.Pointer, + duk_size_t, + ) + > + >('duk_push_lstring'); + late final _duk_push_lstring = + _duk_push_lstringPtr + .asFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + int, + ) + >(); - void duk_push_pointer( - ffi.Pointer ctx, - ffi.Pointer p, - ) { - return _duk_push_pointer( - ctx, - p, - ); + void duk_push_pointer(ffi.Pointer ctx, ffi.Pointer p) { + return _duk_push_pointer(ctx, p); } late final _duk_push_pointerPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function(ffi.Pointer, - ffi.Pointer)>>('duk_push_pointer'); - late final _duk_push_pointer = _duk_push_pointerPtr.asFunction< - void Function(ffi.Pointer, ffi.Pointer)>(); + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer) + > + >('duk_push_pointer'); + late final _duk_push_pointer = + _duk_push_pointerPtr + .asFunction< + void Function(ffi.Pointer, ffi.Pointer) + >(); ffi.Pointer duk_push_sprintf( ffi.Pointer ctx, ffi.Pointer fmt, ) { - return _duk_push_sprintf( - ctx, - fmt, - ); + return _duk_push_sprintf(ctx, fmt); } late final _duk_push_sprintfPtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function(ffi.Pointer, - ffi.Pointer)>>('duk_push_sprintf'); - late final _duk_push_sprintf = _duk_push_sprintfPtr.asFunction< + ffi.NativeFunction< ffi.Pointer Function( - ffi.Pointer, ffi.Pointer)>(); + ffi.Pointer, + ffi.Pointer, + ) + > + >('duk_push_sprintf'); + late final _duk_push_sprintf = + _duk_push_sprintfPtr + .asFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ) + >(); ffi.Pointer duk_push_vsprintf( ffi.Pointer ctx, ffi.Pointer fmt, va_list ap, ) { - return _duk_push_vsprintf( - ctx, - fmt, - ap, - ); + return _duk_push_vsprintf(ctx, fmt, ap); } late final _duk_push_vsprintfPtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function(ffi.Pointer, - ffi.Pointer, va_list)>>('duk_push_vsprintf'); - late final _duk_push_vsprintf = _duk_push_vsprintfPtr.asFunction< + ffi.NativeFunction< ffi.Pointer Function( - ffi.Pointer, ffi.Pointer, va_list)>(); + ffi.Pointer, + ffi.Pointer, + va_list, + ) + > + >('duk_push_vsprintf'); + late final _duk_push_vsprintf = + _duk_push_vsprintfPtr + .asFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + va_list, + ) + >(); ffi.Pointer duk_push_literal_raw( ffi.Pointer ctx, ffi.Pointer str, int len, ) { - return _duk_push_literal_raw( - ctx, - str, - len, - ); + return _duk_push_literal_raw(ctx, str, len); } late final _duk_push_literal_rawPtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function(ffi.Pointer, - ffi.Pointer, duk_size_t)>>('duk_push_literal_raw'); - late final _duk_push_literal_raw = _duk_push_literal_rawPtr.asFunction< + ffi.NativeFunction< ffi.Pointer Function( - ffi.Pointer, ffi.Pointer, int)>(); + ffi.Pointer, + ffi.Pointer, + duk_size_t, + ) + > + >('duk_push_literal_raw'); + late final _duk_push_literal_raw = + _duk_push_literal_rawPtr + .asFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + int, + ) + >(); - void duk_push_this( - ffi.Pointer ctx, - ) { - return _duk_push_this( - ctx, - ); + void duk_push_this(ffi.Pointer ctx) { + return _duk_push_this(ctx); } late final _duk_push_thisPtr = _lookup)>>( - 'duk_push_this'); + 'duk_push_this', + ); late final _duk_push_this = _duk_push_thisPtr.asFunction)>(); - void duk_push_new_target( - ffi.Pointer ctx, - ) { - return _duk_push_new_target( - ctx, - ); + void duk_push_new_target(ffi.Pointer ctx) { + return _duk_push_new_target(ctx); } late final _duk_push_new_targetPtr = _lookup)>>( - 'duk_push_new_target'); - late final _duk_push_new_target = _duk_push_new_targetPtr - .asFunction)>(); + 'duk_push_new_target', + ); + late final _duk_push_new_target = + _duk_push_new_targetPtr + .asFunction)>(); - void duk_push_current_function( - ffi.Pointer ctx, - ) { - return _duk_push_current_function( - ctx, - ); + void duk_push_current_function(ffi.Pointer ctx) { + return _duk_push_current_function(ctx); } late final _duk_push_current_functionPtr = _lookup)>>( - 'duk_push_current_function'); - late final _duk_push_current_function = _duk_push_current_functionPtr - .asFunction)>(); + 'duk_push_current_function', + ); + late final _duk_push_current_function = + _duk_push_current_functionPtr + .asFunction)>(); - void duk_push_current_thread( - ffi.Pointer ctx, - ) { - return _duk_push_current_thread( - ctx, - ); + void duk_push_current_thread(ffi.Pointer ctx) { + return _duk_push_current_thread(ctx); } late final _duk_push_current_threadPtr = _lookup)>>( - 'duk_push_current_thread'); - late final _duk_push_current_thread = _duk_push_current_threadPtr - .asFunction)>(); + 'duk_push_current_thread', + ); + late final _duk_push_current_thread = + _duk_push_current_threadPtr + .asFunction)>(); - void duk_push_global_object( - ffi.Pointer ctx, - ) { - return _duk_push_global_object( - ctx, - ); + void duk_push_global_object(ffi.Pointer ctx) { + return _duk_push_global_object(ctx); } late final _duk_push_global_objectPtr = _lookup)>>( - 'duk_push_global_object'); - late final _duk_push_global_object = _duk_push_global_objectPtr - .asFunction)>(); + 'duk_push_global_object', + ); + late final _duk_push_global_object = + _duk_push_global_objectPtr + .asFunction)>(); - void duk_push_heap_stash( - ffi.Pointer ctx, - ) { - return _duk_push_heap_stash( - ctx, - ); + void duk_push_heap_stash(ffi.Pointer ctx) { + return _duk_push_heap_stash(ctx); } late final _duk_push_heap_stashPtr = _lookup)>>( - 'duk_push_heap_stash'); - late final _duk_push_heap_stash = _duk_push_heap_stashPtr - .asFunction)>(); + 'duk_push_heap_stash', + ); + late final _duk_push_heap_stash = + _duk_push_heap_stashPtr + .asFunction)>(); - void duk_push_global_stash( - ffi.Pointer ctx, - ) { - return _duk_push_global_stash( - ctx, - ); + void duk_push_global_stash(ffi.Pointer ctx) { + return _duk_push_global_stash(ctx); } late final _duk_push_global_stashPtr = _lookup)>>( - 'duk_push_global_stash'); - late final _duk_push_global_stash = _duk_push_global_stashPtr - .asFunction)>(); + 'duk_push_global_stash', + ); + late final _duk_push_global_stash = + _duk_push_global_stashPtr + .asFunction)>(); void duk_push_thread_stash( ffi.Pointer ctx, ffi.Pointer target_ctx, ) { - return _duk_push_thread_stash( - ctx, - target_ctx, - ); + return _duk_push_thread_stash(ctx, target_ctx); } late final _duk_push_thread_stashPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function(ffi.Pointer, - ffi.Pointer)>>('duk_push_thread_stash'); - late final _duk_push_thread_stash = _duk_push_thread_stashPtr.asFunction< - void Function(ffi.Pointer, ffi.Pointer)>(); + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer) + > + >('duk_push_thread_stash'); + late final _duk_push_thread_stash = + _duk_push_thread_stashPtr + .asFunction< + void Function(ffi.Pointer, ffi.Pointer) + >(); - int duk_push_object( - ffi.Pointer ctx, - ) { - return _duk_push_object( - ctx, - ); + int duk_push_object(ffi.Pointer ctx) { + return _duk_push_object(ctx); } late final _duk_push_objectPtr = _lookup)>>( - 'duk_push_object'); + 'duk_push_object', + ); late final _duk_push_object = _duk_push_objectPtr.asFunction)>(); - int duk_push_bare_object( - ffi.Pointer ctx, - ) { - return _duk_push_bare_object( - ctx, - ); + int duk_push_bare_object(ffi.Pointer ctx) { + return _duk_push_bare_object(ctx); } late final _duk_push_bare_objectPtr = _lookup)>>( - 'duk_push_bare_object'); - late final _duk_push_bare_object = _duk_push_bare_objectPtr - .asFunction)>(); + 'duk_push_bare_object', + ); + late final _duk_push_bare_object = + _duk_push_bare_objectPtr + .asFunction)>(); - int duk_push_array( - ffi.Pointer ctx, - ) { - return _duk_push_array( - ctx, - ); + int duk_push_array(ffi.Pointer ctx) { + return _duk_push_array(ctx); } late final _duk_push_arrayPtr = _lookup)>>( - 'duk_push_array'); + 'duk_push_array', + ); late final _duk_push_array = _duk_push_arrayPtr.asFunction)>(); - int duk_push_bare_array( - ffi.Pointer ctx, - ) { - return _duk_push_bare_array( - ctx, - ); + int duk_push_bare_array(ffi.Pointer ctx) { + return _duk_push_bare_array(ctx); } late final _duk_push_bare_arrayPtr = _lookup)>>( - 'duk_push_bare_array'); - late final _duk_push_bare_array = _duk_push_bare_arrayPtr - .asFunction)>(); + 'duk_push_bare_array', + ); + late final _duk_push_bare_array = + _duk_push_bare_arrayPtr + .asFunction)>(); int duk_push_c_function( ffi.Pointer ctx, duk_c_function func, int nargs, ) { - return _duk_push_c_function( - ctx, - func, - nargs, - ); + return _duk_push_c_function(ctx, func, nargs); } late final _duk_push_c_functionPtr = _lookup< - ffi.NativeFunction< - duk_idx_t Function(ffi.Pointer, duk_c_function, - duk_idx_t)>>('duk_push_c_function'); - late final _duk_push_c_function = _duk_push_c_functionPtr.asFunction< - int Function(ffi.Pointer, duk_c_function, int)>(); + ffi.NativeFunction< + duk_idx_t Function(ffi.Pointer, duk_c_function, duk_idx_t) + > + >('duk_push_c_function'); + late final _duk_push_c_function = + _duk_push_c_functionPtr + .asFunction< + int Function(ffi.Pointer, duk_c_function, int) + >(); int duk_push_c_lightfunc( ffi.Pointer ctx, @@ -1204,55 +1088,53 @@ class DuktapeBindings { int length, int magic, ) { - return _duk_push_c_lightfunc( - ctx, - func, - nargs, - length, - magic, - ); + return _duk_push_c_lightfunc(ctx, func, nargs, length, magic); } late final _duk_push_c_lightfuncPtr = _lookup< - ffi.NativeFunction< - duk_idx_t Function(ffi.Pointer, duk_c_function, - duk_idx_t, duk_idx_t, duk_int_t)>>('duk_push_c_lightfunc'); - late final _duk_push_c_lightfunc = _duk_push_c_lightfuncPtr.asFunction< - int Function(ffi.Pointer, duk_c_function, int, int, int)>(); + ffi.NativeFunction< + duk_idx_t Function( + ffi.Pointer, + duk_c_function, + duk_idx_t, + duk_idx_t, + duk_int_t, + ) + > + >('duk_push_c_lightfunc'); + late final _duk_push_c_lightfunc = + _duk_push_c_lightfuncPtr + .asFunction< + int Function( + ffi.Pointer, + duk_c_function, + int, + int, + int, + ) + >(); - int duk_push_thread_raw( - ffi.Pointer ctx, - int flags, - ) { - return _duk_push_thread_raw( - ctx, - flags, - ); + int duk_push_thread_raw(ffi.Pointer ctx, int flags) { + return _duk_push_thread_raw(ctx, flags); } late final _duk_push_thread_rawPtr = _lookup< - ffi.NativeFunction< - duk_idx_t Function( - ffi.Pointer, duk_uint_t)>>('duk_push_thread_raw'); - late final _duk_push_thread_raw = _duk_push_thread_rawPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_uint_t)> + >('duk_push_thread_raw'); + late final _duk_push_thread_raw = + _duk_push_thread_rawPtr + .asFunction, int)>(); - int duk_push_proxy( - ffi.Pointer ctx, - int proxy_flags, - ) { - return _duk_push_proxy( - ctx, - proxy_flags, - ); + int duk_push_proxy(ffi.Pointer ctx, int proxy_flags) { + return _duk_push_proxy(ctx, proxy_flags); } late final _duk_push_proxyPtr = _lookup< - ffi.NativeFunction< - duk_idx_t Function( - ffi.Pointer, duk_uint_t)>>('duk_push_proxy'); - late final _duk_push_proxy = _duk_push_proxyPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_uint_t)> + >('duk_push_proxy'); + late final _duk_push_proxy = + _duk_push_proxyPtr + .asFunction, int)>(); int duk_push_error_object_raw( ffi.Pointer ctx, @@ -1261,27 +1143,31 @@ class DuktapeBindings { int line, ffi.Pointer fmt, ) { - return _duk_push_error_object_raw( - ctx, - err_code, - filename, - line, - fmt, - ); + return _duk_push_error_object_raw(ctx, err_code, filename, line, fmt); } late final _duk_push_error_object_rawPtr = _lookup< - ffi.NativeFunction< - duk_idx_t Function( + ffi.NativeFunction< + duk_idx_t Function( + ffi.Pointer, + duk_errcode_t, + ffi.Pointer, + duk_int_t, + ffi.Pointer, + ) + > + >('duk_push_error_object_raw'); + late final _duk_push_error_object_raw = + _duk_push_error_object_rawPtr + .asFunction< + int Function( ffi.Pointer, - duk_errcode_t, + int, ffi.Pointer, - duk_int_t, - ffi.Pointer)>>('duk_push_error_object_raw'); - late final _duk_push_error_object_raw = - _duk_push_error_object_rawPtr.asFunction< - int Function(ffi.Pointer, int, ffi.Pointer, - int, ffi.Pointer)>(); + int, + ffi.Pointer, + ) + >(); int duk_push_error_object_va_raw( ffi.Pointer ctx, @@ -1302,37 +1188,52 @@ class DuktapeBindings { } late final _duk_push_error_object_va_rawPtr = _lookup< - ffi.NativeFunction< - duk_idx_t Function( + ffi.NativeFunction< + duk_idx_t Function( + ffi.Pointer, + duk_errcode_t, + ffi.Pointer, + duk_int_t, + ffi.Pointer, + va_list, + ) + > + >('duk_push_error_object_va_raw'); + late final _duk_push_error_object_va_raw = + _duk_push_error_object_va_rawPtr + .asFunction< + int Function( ffi.Pointer, - duk_errcode_t, + int, ffi.Pointer, - duk_int_t, + int, ffi.Pointer, - va_list)>>('duk_push_error_object_va_raw'); - late final _duk_push_error_object_va_raw = - _duk_push_error_object_va_rawPtr.asFunction< - int Function(ffi.Pointer, int, ffi.Pointer, - int, ffi.Pointer, va_list)>(); + va_list, + ) + >(); ffi.Pointer duk_push_buffer_raw( ffi.Pointer ctx, int size, int flags, ) { - return _duk_push_buffer_raw( - ctx, - size, - flags, - ); + return _duk_push_buffer_raw(ctx, size, flags); } late final _duk_push_buffer_rawPtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function(ffi.Pointer, duk_size_t, - duk_small_uint_t)>>('duk_push_buffer_raw'); - late final _duk_push_buffer_raw = _duk_push_buffer_rawPtr.asFunction< - ffi.Pointer Function(ffi.Pointer, int, int)>(); + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + duk_size_t, + duk_small_uint_t, + ) + > + >('duk_push_buffer_raw'); + late final _duk_push_buffer_raw = + _duk_push_buffer_rawPtr + .asFunction< + ffi.Pointer Function(ffi.Pointer, int, int) + >(); void duk_push_buffer_object( ffi.Pointer ctx, @@ -1351,85 +1252,81 @@ class DuktapeBindings { } late final _duk_push_buffer_objectPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function(ffi.Pointer, duk_idx_t, duk_size_t, - duk_size_t, duk_uint_t)>>('duk_push_buffer_object'); - late final _duk_push_buffer_object = _duk_push_buffer_objectPtr.asFunction< - void Function(ffi.Pointer, int, int, int, int)>(); + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer, + duk_idx_t, + duk_size_t, + duk_size_t, + duk_uint_t, + ) + > + >('duk_push_buffer_object'); + late final _duk_push_buffer_object = + _duk_push_buffer_objectPtr + .asFunction< + void Function(ffi.Pointer, int, int, int, int) + >(); int duk_push_heapptr( ffi.Pointer ctx, ffi.Pointer ptr, ) { - return _duk_push_heapptr( - ctx, - ptr, - ); + return _duk_push_heapptr(ctx, ptr); } late final _duk_push_heapptrPtr = _lookup< - ffi.NativeFunction< - duk_idx_t Function(ffi.Pointer, - ffi.Pointer)>>('duk_push_heapptr'); - late final _duk_push_heapptr = _duk_push_heapptrPtr.asFunction< - int Function(ffi.Pointer, ffi.Pointer)>(); + ffi.NativeFunction< + duk_idx_t Function(ffi.Pointer, ffi.Pointer) + > + >('duk_push_heapptr'); + late final _duk_push_heapptr = + _duk_push_heapptrPtr + .asFunction< + int Function(ffi.Pointer, ffi.Pointer) + >(); /// Pop operations - void duk_pop( - ffi.Pointer ctx, - ) { - return _duk_pop( - ctx, - ); + void duk_pop(ffi.Pointer ctx) { + return _duk_pop(ctx); } late final _duk_popPtr = _lookup)>>( - 'duk_pop'); + 'duk_pop', + ); late final _duk_pop = _duk_popPtr.asFunction)>(); - void duk_pop_n( - ffi.Pointer ctx, - int count, - ) { - return _duk_pop_n( - ctx, - count, - ); + void duk_pop_n(ffi.Pointer ctx, int count) { + return _duk_pop_n(ctx, count); } late final _duk_pop_nPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function(ffi.Pointer, duk_idx_t)>>('duk_pop_n'); + ffi.NativeFunction, duk_idx_t)> + >('duk_pop_n'); late final _duk_pop_n = _duk_pop_nPtr.asFunction, int)>(); - void duk_pop_2( - ffi.Pointer ctx, - ) { - return _duk_pop_2( - ctx, - ); + void duk_pop_2(ffi.Pointer ctx) { + return _duk_pop_2(ctx); } late final _duk_pop_2Ptr = _lookup)>>( - 'duk_pop_2'); + 'duk_pop_2', + ); late final _duk_pop_2 = _duk_pop_2Ptr.asFunction)>(); - void duk_pop_3( - ffi.Pointer ctx, - ) { - return _duk_pop_3( - ctx, - ); + void duk_pop_3(ffi.Pointer ctx) { + return _duk_pop_3(ctx); } late final _duk_pop_3Ptr = _lookup)>>( - 'duk_pop_3'); + 'duk_pop_3', + ); late final _duk_pop_3 = _duk_pop_3Ptr.asFunction)>(); @@ -1437,686 +1334,513 @@ class DuktapeBindings { /// /// duk_is_none(), which would indicate whether index it outside of stack, /// is not needed; duk_is_valid_index() gives the same information. - int duk_get_type( - ffi.Pointer ctx, - int idx, - ) { - return _duk_get_type( - ctx, - idx, - ); + int duk_get_type(ffi.Pointer ctx, int idx) { + return _duk_get_type(ctx, idx); } late final _duk_get_typePtr = _lookup< - ffi.NativeFunction< - duk_int_t Function( - ffi.Pointer, duk_idx_t)>>('duk_get_type'); - late final _duk_get_type = _duk_get_typePtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_get_type'); + late final _duk_get_type = + _duk_get_typePtr + .asFunction, int)>(); - int duk_check_type( - ffi.Pointer ctx, - int idx, - int type, - ) { - return _duk_check_type( - ctx, - idx, - type, - ); + int duk_check_type(ffi.Pointer ctx, int idx, int type) { + return _duk_check_type(ctx, idx, type); } late final _duk_check_typePtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function(ffi.Pointer, duk_idx_t, - duk_int_t)>>('duk_check_type'); - late final _duk_check_type = _duk_check_typePtr - .asFunction, int, int)>(); + ffi.NativeFunction< + duk_bool_t Function(ffi.Pointer, duk_idx_t, duk_int_t) + > + >('duk_check_type'); + late final _duk_check_type = + _duk_check_typePtr + .asFunction, int, int)>(); - int duk_get_type_mask( - ffi.Pointer ctx, - int idx, - ) { - return _duk_get_type_mask( - ctx, - idx, - ); + int duk_get_type_mask(ffi.Pointer ctx, int idx) { + return _duk_get_type_mask(ctx, idx); } late final _duk_get_type_maskPtr = _lookup< - ffi.NativeFunction< - duk_uint_t Function( - ffi.Pointer, duk_idx_t)>>('duk_get_type_mask'); - late final _duk_get_type_mask = _duk_get_type_maskPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_get_type_mask'); + late final _duk_get_type_mask = + _duk_get_type_maskPtr + .asFunction, int)>(); - int duk_check_type_mask( - ffi.Pointer ctx, - int idx, - int mask, - ) { - return _duk_check_type_mask( - ctx, - idx, - mask, - ); + int duk_check_type_mask(ffi.Pointer ctx, int idx, int mask) { + return _duk_check_type_mask(ctx, idx, mask); } late final _duk_check_type_maskPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function(ffi.Pointer, duk_idx_t, - duk_uint_t)>>('duk_check_type_mask'); - late final _duk_check_type_mask = _duk_check_type_maskPtr - .asFunction, int, int)>(); + ffi.NativeFunction< + duk_bool_t Function(ffi.Pointer, duk_idx_t, duk_uint_t) + > + >('duk_check_type_mask'); + late final _duk_check_type_mask = + _duk_check_type_maskPtr + .asFunction, int, int)>(); - int duk_is_undefined( - ffi.Pointer ctx, - int idx, - ) { - return _duk_is_undefined( - ctx, - idx, - ); + int duk_is_undefined(ffi.Pointer ctx, int idx) { + return _duk_is_undefined(ctx, idx); } late final _duk_is_undefinedPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function( - ffi.Pointer, duk_idx_t)>>('duk_is_undefined'); - late final _duk_is_undefined = _duk_is_undefinedPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_is_undefined'); + late final _duk_is_undefined = + _duk_is_undefinedPtr + .asFunction, int)>(); - int duk_is_null( - ffi.Pointer ctx, - int idx, - ) { - return _duk_is_null( - ctx, - idx, - ); + int duk_is_null(ffi.Pointer ctx, int idx) { + return _duk_is_null(ctx, idx); } late final _duk_is_nullPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function( - ffi.Pointer, duk_idx_t)>>('duk_is_null'); + ffi.NativeFunction, duk_idx_t)> + >('duk_is_null'); late final _duk_is_null = _duk_is_nullPtr.asFunction, int)>(); - int duk_is_boolean( - ffi.Pointer ctx, - int idx, - ) { - return _duk_is_boolean( - ctx, - idx, - ); + int duk_is_boolean(ffi.Pointer ctx, int idx) { + return _duk_is_boolean(ctx, idx); } late final _duk_is_booleanPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function( - ffi.Pointer, duk_idx_t)>>('duk_is_boolean'); - late final _duk_is_boolean = _duk_is_booleanPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_is_boolean'); + late final _duk_is_boolean = + _duk_is_booleanPtr + .asFunction, int)>(); - int duk_is_number( - ffi.Pointer ctx, - int idx, - ) { - return _duk_is_number( - ctx, - idx, - ); + int duk_is_number(ffi.Pointer ctx, int idx) { + return _duk_is_number(ctx, idx); } late final _duk_is_numberPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function( - ffi.Pointer, duk_idx_t)>>('duk_is_number'); - late final _duk_is_number = _duk_is_numberPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_is_number'); + late final _duk_is_number = + _duk_is_numberPtr + .asFunction, int)>(); - int duk_is_nan( - ffi.Pointer ctx, - int idx, - ) { - return _duk_is_nan( - ctx, - idx, - ); + int duk_is_nan(ffi.Pointer ctx, int idx) { + return _duk_is_nan(ctx, idx); } late final _duk_is_nanPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function( - ffi.Pointer, duk_idx_t)>>('duk_is_nan'); + ffi.NativeFunction, duk_idx_t)> + >('duk_is_nan'); late final _duk_is_nan = _duk_is_nanPtr.asFunction, int)>(); - int duk_is_string( - ffi.Pointer ctx, - int idx, - ) { - return _duk_is_string( - ctx, - idx, - ); + int duk_is_string(ffi.Pointer ctx, int idx) { + return _duk_is_string(ctx, idx); } late final _duk_is_stringPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function( - ffi.Pointer, duk_idx_t)>>('duk_is_string'); - late final _duk_is_string = _duk_is_stringPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_is_string'); + late final _duk_is_string = + _duk_is_stringPtr + .asFunction, int)>(); - int duk_is_object( - ffi.Pointer ctx, - int idx, - ) { - return _duk_is_object( - ctx, - idx, - ); + int duk_is_object(ffi.Pointer ctx, int idx) { + return _duk_is_object(ctx, idx); } late final _duk_is_objectPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function( - ffi.Pointer, duk_idx_t)>>('duk_is_object'); - late final _duk_is_object = _duk_is_objectPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_is_object'); + late final _duk_is_object = + _duk_is_objectPtr + .asFunction, int)>(); - int duk_is_buffer( - ffi.Pointer ctx, - int idx, - ) { - return _duk_is_buffer( - ctx, - idx, - ); + int duk_is_buffer(ffi.Pointer ctx, int idx) { + return _duk_is_buffer(ctx, idx); } late final _duk_is_bufferPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function( - ffi.Pointer, duk_idx_t)>>('duk_is_buffer'); - late final _duk_is_buffer = _duk_is_bufferPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_is_buffer'); + late final _duk_is_buffer = + _duk_is_bufferPtr + .asFunction, int)>(); - int duk_is_buffer_data( - ffi.Pointer ctx, - int idx, - ) { - return _duk_is_buffer_data( - ctx, - idx, - ); + int duk_is_buffer_data(ffi.Pointer ctx, int idx) { + return _duk_is_buffer_data(ctx, idx); } late final _duk_is_buffer_dataPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function( - ffi.Pointer, duk_idx_t)>>('duk_is_buffer_data'); - late final _duk_is_buffer_data = _duk_is_buffer_dataPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_is_buffer_data'); + late final _duk_is_buffer_data = + _duk_is_buffer_dataPtr + .asFunction, int)>(); - int duk_is_pointer( - ffi.Pointer ctx, - int idx, - ) { - return _duk_is_pointer( - ctx, - idx, - ); - } - - late final _duk_is_pointerPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function( - ffi.Pointer, duk_idx_t)>>('duk_is_pointer'); - late final _duk_is_pointer = _duk_is_pointerPtr - .asFunction, int)>(); - - int duk_is_lightfunc( - ffi.Pointer ctx, - int idx, - ) { - return _duk_is_lightfunc( - ctx, - idx, - ); + int duk_is_pointer(ffi.Pointer ctx, int idx) { + return _duk_is_pointer(ctx, idx); + } + + late final _duk_is_pointerPtr = _lookup< + ffi.NativeFunction, duk_idx_t)> + >('duk_is_pointer'); + late final _duk_is_pointer = + _duk_is_pointerPtr + .asFunction, int)>(); + + int duk_is_lightfunc(ffi.Pointer ctx, int idx) { + return _duk_is_lightfunc(ctx, idx); } late final _duk_is_lightfuncPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function( - ffi.Pointer, duk_idx_t)>>('duk_is_lightfunc'); - late final _duk_is_lightfunc = _duk_is_lightfuncPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_is_lightfunc'); + late final _duk_is_lightfunc = + _duk_is_lightfuncPtr + .asFunction, int)>(); - int duk_is_symbol( - ffi.Pointer ctx, - int idx, - ) { - return _duk_is_symbol( - ctx, - idx, - ); + int duk_is_symbol(ffi.Pointer ctx, int idx) { + return _duk_is_symbol(ctx, idx); } late final _duk_is_symbolPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function( - ffi.Pointer, duk_idx_t)>>('duk_is_symbol'); - late final _duk_is_symbol = _duk_is_symbolPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_is_symbol'); + late final _duk_is_symbol = + _duk_is_symbolPtr + .asFunction, int)>(); - int duk_is_array( - ffi.Pointer ctx, - int idx, - ) { - return _duk_is_array( - ctx, - idx, - ); + int duk_is_array(ffi.Pointer ctx, int idx) { + return _duk_is_array(ctx, idx); } late final _duk_is_arrayPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function( - ffi.Pointer, duk_idx_t)>>('duk_is_array'); - late final _duk_is_array = _duk_is_arrayPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_is_array'); + late final _duk_is_array = + _duk_is_arrayPtr + .asFunction, int)>(); - int duk_is_function( - ffi.Pointer ctx, - int idx, - ) { - return _duk_is_function( - ctx, - idx, - ); + int duk_is_function(ffi.Pointer ctx, int idx) { + return _duk_is_function(ctx, idx); } late final _duk_is_functionPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function( - ffi.Pointer, duk_idx_t)>>('duk_is_function'); - late final _duk_is_function = _duk_is_functionPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_is_function'); + late final _duk_is_function = + _duk_is_functionPtr + .asFunction, int)>(); - int duk_is_c_function( - ffi.Pointer ctx, - int idx, - ) { - return _duk_is_c_function( - ctx, - idx, - ); + int duk_is_c_function(ffi.Pointer ctx, int idx) { + return _duk_is_c_function(ctx, idx); } late final _duk_is_c_functionPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function( - ffi.Pointer, duk_idx_t)>>('duk_is_c_function'); - late final _duk_is_c_function = _duk_is_c_functionPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_is_c_function'); + late final _duk_is_c_function = + _duk_is_c_functionPtr + .asFunction, int)>(); - int duk_is_ecmascript_function( - ffi.Pointer ctx, - int idx, - ) { - return _duk_is_ecmascript_function( - ctx, - idx, - ); + int duk_is_ecmascript_function(ffi.Pointer ctx, int idx) { + return _duk_is_ecmascript_function(ctx, idx); } late final _duk_is_ecmascript_functionPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function(ffi.Pointer, - duk_idx_t)>>('duk_is_ecmascript_function'); - late final _duk_is_ecmascript_function = _duk_is_ecmascript_functionPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_is_ecmascript_function'); + late final _duk_is_ecmascript_function = + _duk_is_ecmascript_functionPtr + .asFunction, int)>(); - int duk_is_bound_function( - ffi.Pointer ctx, - int idx, - ) { - return _duk_is_bound_function( - ctx, - idx, - ); + int duk_is_bound_function(ffi.Pointer ctx, int idx) { + return _duk_is_bound_function(ctx, idx); } late final _duk_is_bound_functionPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function( - ffi.Pointer, duk_idx_t)>>('duk_is_bound_function'); - late final _duk_is_bound_function = _duk_is_bound_functionPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_is_bound_function'); + late final _duk_is_bound_function = + _duk_is_bound_functionPtr + .asFunction, int)>(); - int duk_is_thread( - ffi.Pointer ctx, - int idx, - ) { - return _duk_is_thread( - ctx, - idx, - ); + int duk_is_thread(ffi.Pointer ctx, int idx) { + return _duk_is_thread(ctx, idx); } late final _duk_is_threadPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function( - ffi.Pointer, duk_idx_t)>>('duk_is_thread'); - late final _duk_is_thread = _duk_is_threadPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_is_thread'); + late final _duk_is_thread = + _duk_is_threadPtr + .asFunction, int)>(); - int duk_is_constructable( - ffi.Pointer ctx, - int idx, - ) { - return _duk_is_constructable( - ctx, - idx, - ); + int duk_is_constructable(ffi.Pointer ctx, int idx) { + return _duk_is_constructable(ctx, idx); } late final _duk_is_constructablePtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function( - ffi.Pointer, duk_idx_t)>>('duk_is_constructable'); - late final _duk_is_constructable = _duk_is_constructablePtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_is_constructable'); + late final _duk_is_constructable = + _duk_is_constructablePtr + .asFunction, int)>(); - int duk_is_dynamic_buffer( - ffi.Pointer ctx, - int idx, - ) { - return _duk_is_dynamic_buffer( - ctx, - idx, - ); + int duk_is_dynamic_buffer(ffi.Pointer ctx, int idx) { + return _duk_is_dynamic_buffer(ctx, idx); } late final _duk_is_dynamic_bufferPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function( - ffi.Pointer, duk_idx_t)>>('duk_is_dynamic_buffer'); - late final _duk_is_dynamic_buffer = _duk_is_dynamic_bufferPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_is_dynamic_buffer'); + late final _duk_is_dynamic_buffer = + _duk_is_dynamic_bufferPtr + .asFunction, int)>(); - int duk_is_fixed_buffer( - ffi.Pointer ctx, - int idx, - ) { - return _duk_is_fixed_buffer( - ctx, - idx, - ); + int duk_is_fixed_buffer(ffi.Pointer ctx, int idx) { + return _duk_is_fixed_buffer(ctx, idx); } late final _duk_is_fixed_bufferPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function( - ffi.Pointer, duk_idx_t)>>('duk_is_fixed_buffer'); - late final _duk_is_fixed_buffer = _duk_is_fixed_bufferPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_is_fixed_buffer'); + late final _duk_is_fixed_buffer = + _duk_is_fixed_bufferPtr + .asFunction, int)>(); - int duk_is_external_buffer( - ffi.Pointer ctx, - int idx, - ) { - return _duk_is_external_buffer( - ctx, - idx, - ); + int duk_is_external_buffer(ffi.Pointer ctx, int idx) { + return _duk_is_external_buffer(ctx, idx); } late final _duk_is_external_bufferPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function( - ffi.Pointer, duk_idx_t)>>('duk_is_external_buffer'); - late final _duk_is_external_buffer = _duk_is_external_bufferPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_is_external_buffer'); + late final _duk_is_external_buffer = + _duk_is_external_bufferPtr + .asFunction, int)>(); - int duk_get_error_code( - ffi.Pointer ctx, - int idx, - ) { - return _duk_get_error_code( - ctx, - idx, - ); + int duk_get_error_code(ffi.Pointer ctx, int idx) { + return _duk_get_error_code(ctx, idx); } late final _duk_get_error_codePtr = _lookup< - ffi.NativeFunction< - duk_errcode_t Function( - ffi.Pointer, duk_idx_t)>>('duk_get_error_code'); - late final _duk_get_error_code = _duk_get_error_codePtr - .asFunction, int)>(); + ffi.NativeFunction< + duk_errcode_t Function(ffi.Pointer, duk_idx_t) + > + >('duk_get_error_code'); + late final _duk_get_error_code = + _duk_get_error_codePtr + .asFunction, int)>(); /// Get operations: no coercion, returns default value for invalid /// indices and invalid value types. /// /// duk_get_undefined() and duk_get_null() would be pointless and /// are not included. - int duk_get_boolean( - ffi.Pointer ctx, - int idx, - ) { - return _duk_get_boolean( - ctx, - idx, - ); + int duk_get_boolean(ffi.Pointer ctx, int idx) { + return _duk_get_boolean(ctx, idx); } late final _duk_get_booleanPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function( - ffi.Pointer, duk_idx_t)>>('duk_get_boolean'); - late final _duk_get_boolean = _duk_get_booleanPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_get_boolean'); + late final _duk_get_boolean = + _duk_get_booleanPtr + .asFunction, int)>(); - double duk_get_number( - ffi.Pointer ctx, - int idx, - ) { - return _duk_get_number( - ctx, - idx, - ); + double duk_get_number(ffi.Pointer ctx, int idx) { + return _duk_get_number(ctx, idx); } late final _duk_get_numberPtr = _lookup< - ffi.NativeFunction< - duk_double_t Function( - ffi.Pointer, duk_idx_t)>>('duk_get_number'); - late final _duk_get_number = _duk_get_numberPtr - .asFunction, int)>(); + ffi.NativeFunction< + duk_double_t Function(ffi.Pointer, duk_idx_t) + > + >('duk_get_number'); + late final _duk_get_number = + _duk_get_numberPtr + .asFunction, int)>(); - int duk_get_int( - ffi.Pointer ctx, - int idx, - ) { - return _duk_get_int( - ctx, - idx, - ); + int duk_get_int(ffi.Pointer ctx, int idx) { + return _duk_get_int(ctx, idx); } late final _duk_get_intPtr = _lookup< - ffi.NativeFunction< - duk_int_t Function( - ffi.Pointer, duk_idx_t)>>('duk_get_int'); + ffi.NativeFunction, duk_idx_t)> + >('duk_get_int'); late final _duk_get_int = _duk_get_intPtr.asFunction, int)>(); - int duk_get_uint( - ffi.Pointer ctx, - int idx, - ) { - return _duk_get_uint( - ctx, - idx, - ); + int duk_get_uint(ffi.Pointer ctx, int idx) { + return _duk_get_uint(ctx, idx); } late final _duk_get_uintPtr = _lookup< - ffi.NativeFunction< - duk_uint_t Function( - ffi.Pointer, duk_idx_t)>>('duk_get_uint'); - late final _duk_get_uint = _duk_get_uintPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_get_uint'); + late final _duk_get_uint = + _duk_get_uintPtr + .asFunction, int)>(); - ffi.Pointer duk_get_string( - ffi.Pointer ctx, - int idx, - ) { - return _duk_get_string( - ctx, - idx, - ); + ffi.Pointer duk_get_string(ffi.Pointer ctx, int idx) { + return _duk_get_string(ctx, idx); } late final _duk_get_stringPtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function( - ffi.Pointer, duk_idx_t)>>('duk_get_string'); - late final _duk_get_string = _duk_get_stringPtr.asFunction< - ffi.Pointer Function(ffi.Pointer, int)>(); + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, duk_idx_t) + > + >('duk_get_string'); + late final _duk_get_string = + _duk_get_stringPtr + .asFunction< + ffi.Pointer Function(ffi.Pointer, int) + >(); ffi.Pointer duk_get_lstring( ffi.Pointer ctx, int idx, ffi.Pointer out_len, ) { - return _duk_get_lstring( - ctx, - idx, - out_len, - ); + return _duk_get_lstring(ctx, idx, out_len); } late final _duk_get_lstringPtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function(ffi.Pointer, duk_idx_t, - ffi.Pointer)>>('duk_get_lstring'); - late final _duk_get_lstring = _duk_get_lstringPtr.asFunction< + ffi.NativeFunction< ffi.Pointer Function( - ffi.Pointer, int, ffi.Pointer)>(); + ffi.Pointer, + duk_idx_t, + ffi.Pointer, + ) + > + >('duk_get_lstring'); + late final _duk_get_lstring = + _duk_get_lstringPtr + .asFunction< + ffi.Pointer Function( + ffi.Pointer, + int, + ffi.Pointer, + ) + >(); ffi.Pointer duk_get_buffer( ffi.Pointer ctx, int idx, ffi.Pointer out_size, ) { - return _duk_get_buffer( - ctx, - idx, - out_size, - ); + return _duk_get_buffer(ctx, idx, out_size); } late final _duk_get_bufferPtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function(ffi.Pointer, duk_idx_t, - ffi.Pointer)>>('duk_get_buffer'); - late final _duk_get_buffer = _duk_get_bufferPtr.asFunction< + ffi.NativeFunction< ffi.Pointer Function( - ffi.Pointer, int, ffi.Pointer)>(); + ffi.Pointer, + duk_idx_t, + ffi.Pointer, + ) + > + >('duk_get_buffer'); + late final _duk_get_buffer = + _duk_get_bufferPtr + .asFunction< + ffi.Pointer Function( + ffi.Pointer, + int, + ffi.Pointer, + ) + >(); ffi.Pointer duk_get_buffer_data( ffi.Pointer ctx, int idx, ffi.Pointer out_size, ) { - return _duk_get_buffer_data( - ctx, - idx, - out_size, - ); + return _duk_get_buffer_data(ctx, idx, out_size); } late final _duk_get_buffer_dataPtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function(ffi.Pointer, duk_idx_t, - ffi.Pointer)>>('duk_get_buffer_data'); - late final _duk_get_buffer_data = _duk_get_buffer_dataPtr.asFunction< + ffi.NativeFunction< ffi.Pointer Function( - ffi.Pointer, int, ffi.Pointer)>(); + ffi.Pointer, + duk_idx_t, + ffi.Pointer, + ) + > + >('duk_get_buffer_data'); + late final _duk_get_buffer_data = + _duk_get_buffer_dataPtr + .asFunction< + ffi.Pointer Function( + ffi.Pointer, + int, + ffi.Pointer, + ) + >(); - ffi.Pointer duk_get_pointer( - ffi.Pointer ctx, - int idx, - ) { - return _duk_get_pointer( - ctx, - idx, - ); + ffi.Pointer duk_get_pointer(ffi.Pointer ctx, int idx) { + return _duk_get_pointer(ctx, idx); } late final _duk_get_pointerPtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function( - ffi.Pointer, duk_idx_t)>>('duk_get_pointer'); - late final _duk_get_pointer = _duk_get_pointerPtr.asFunction< - ffi.Pointer Function(ffi.Pointer, int)>(); + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, duk_idx_t) + > + >('duk_get_pointer'); + late final _duk_get_pointer = + _duk_get_pointerPtr + .asFunction< + ffi.Pointer Function(ffi.Pointer, int) + >(); - duk_c_function duk_get_c_function( - ffi.Pointer ctx, - int idx, - ) { - return _duk_get_c_function( - ctx, - idx, - ); + duk_c_function duk_get_c_function(ffi.Pointer ctx, int idx) { + return _duk_get_c_function(ctx, idx); } late final _duk_get_c_functionPtr = _lookup< - ffi.NativeFunction< - duk_c_function Function( - ffi.Pointer, duk_idx_t)>>('duk_get_c_function'); - late final _duk_get_c_function = _duk_get_c_functionPtr - .asFunction, int)>(); + ffi.NativeFunction< + duk_c_function Function(ffi.Pointer, duk_idx_t) + > + >('duk_get_c_function'); + late final _duk_get_c_function = + _duk_get_c_functionPtr + .asFunction, int)>(); ffi.Pointer duk_get_context( ffi.Pointer ctx, int idx, ) { - return _duk_get_context( - ctx, - idx, - ); + return _duk_get_context(ctx, idx); } late final _duk_get_contextPtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function( - ffi.Pointer, duk_idx_t)>>('duk_get_context'); - late final _duk_get_context = _duk_get_contextPtr.asFunction< - ffi.Pointer Function(ffi.Pointer, int)>(); + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, duk_idx_t) + > + >('duk_get_context'); + late final _duk_get_context = + _duk_get_contextPtr + .asFunction< + ffi.Pointer Function(ffi.Pointer, int) + >(); - ffi.Pointer duk_get_heapptr( - ffi.Pointer ctx, - int idx, - ) { - return _duk_get_heapptr( - ctx, - idx, - ); + ffi.Pointer duk_get_heapptr(ffi.Pointer ctx, int idx) { + return _duk_get_heapptr(ctx, idx); } late final _duk_get_heapptrPtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function( - ffi.Pointer, duk_idx_t)>>('duk_get_heapptr'); - late final _duk_get_heapptr = _duk_get_heapptrPtr.asFunction< - ffi.Pointer Function(ffi.Pointer, int)>(); + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, duk_idx_t) + > + >('duk_get_heapptr'); + late final _duk_get_heapptr = + _duk_get_heapptrPtr + .asFunction< + ffi.Pointer Function(ffi.Pointer, int) + >(); /// Get-with-explicit default operations: like get operations but with an /// explicit default value. @@ -2125,96 +1849,95 @@ class DuktapeBindings { int idx, int def_value, ) { - return _duk_get_boolean_default( - ctx, - idx, - def_value, - ); + return _duk_get_boolean_default(ctx, idx, def_value); } late final _duk_get_boolean_defaultPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function(ffi.Pointer, duk_idx_t, - duk_bool_t)>>('duk_get_boolean_default'); - late final _duk_get_boolean_default = _duk_get_boolean_defaultPtr - .asFunction, int, int)>(); + ffi.NativeFunction< + duk_bool_t Function(ffi.Pointer, duk_idx_t, duk_bool_t) + > + >('duk_get_boolean_default'); + late final _duk_get_boolean_default = + _duk_get_boolean_defaultPtr + .asFunction, int, int)>(); double duk_get_number_default( ffi.Pointer ctx, int idx, double def_value, ) { - return _duk_get_number_default( - ctx, - idx, - def_value, - ); + return _duk_get_number_default(ctx, idx, def_value); } late final _duk_get_number_defaultPtr = _lookup< - ffi.NativeFunction< - duk_double_t Function(ffi.Pointer, duk_idx_t, - duk_double_t)>>('duk_get_number_default'); - late final _duk_get_number_default = _duk_get_number_defaultPtr - .asFunction, int, double)>(); + ffi.NativeFunction< + duk_double_t Function(ffi.Pointer, duk_idx_t, duk_double_t) + > + >('duk_get_number_default'); + late final _duk_get_number_default = + _duk_get_number_defaultPtr + .asFunction, int, double)>(); int duk_get_int_default( ffi.Pointer ctx, int idx, int def_value, ) { - return _duk_get_int_default( - ctx, - idx, - def_value, - ); + return _duk_get_int_default(ctx, idx, def_value); } late final _duk_get_int_defaultPtr = _lookup< - ffi.NativeFunction< - duk_int_t Function(ffi.Pointer, duk_idx_t, - duk_int_t)>>('duk_get_int_default'); - late final _duk_get_int_default = _duk_get_int_defaultPtr - .asFunction, int, int)>(); + ffi.NativeFunction< + duk_int_t Function(ffi.Pointer, duk_idx_t, duk_int_t) + > + >('duk_get_int_default'); + late final _duk_get_int_default = + _duk_get_int_defaultPtr + .asFunction, int, int)>(); int duk_get_uint_default( ffi.Pointer ctx, int idx, int def_value, ) { - return _duk_get_uint_default( - ctx, - idx, - def_value, - ); + return _duk_get_uint_default(ctx, idx, def_value); } late final _duk_get_uint_defaultPtr = _lookup< - ffi.NativeFunction< - duk_uint_t Function(ffi.Pointer, duk_idx_t, - duk_uint_t)>>('duk_get_uint_default'); - late final _duk_get_uint_default = _duk_get_uint_defaultPtr - .asFunction, int, int)>(); + ffi.NativeFunction< + duk_uint_t Function(ffi.Pointer, duk_idx_t, duk_uint_t) + > + >('duk_get_uint_default'); + late final _duk_get_uint_default = + _duk_get_uint_defaultPtr + .asFunction, int, int)>(); ffi.Pointer duk_get_string_default( ffi.Pointer ctx, int idx, ffi.Pointer def_value, ) { - return _duk_get_string_default( - ctx, - idx, - def_value, - ); + return _duk_get_string_default(ctx, idx, def_value); } late final _duk_get_string_defaultPtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function(ffi.Pointer, duk_idx_t, - ffi.Pointer)>>('duk_get_string_default'); - late final _duk_get_string_default = _duk_get_string_defaultPtr.asFunction< + ffi.NativeFunction< ffi.Pointer Function( - ffi.Pointer, int, ffi.Pointer)>(); + ffi.Pointer, + duk_idx_t, + ffi.Pointer, + ) + > + >('duk_get_string_default'); + late final _duk_get_string_default = + _duk_get_string_defaultPtr + .asFunction< + ffi.Pointer Function( + ffi.Pointer, + int, + ffi.Pointer, + ) + >(); ffi.Pointer duk_get_lstring_default( ffi.Pointer ctx, @@ -2223,26 +1946,31 @@ class DuktapeBindings { ffi.Pointer def_ptr, int def_len, ) { - return _duk_get_lstring_default( - ctx, - idx, - out_len, - def_ptr, - def_len, - ); + return _duk_get_lstring_default(ctx, idx, out_len, def_ptr, def_len); } late final _duk_get_lstring_defaultPtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function( + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + duk_idx_t, + ffi.Pointer, + ffi.Pointer, + duk_size_t, + ) + > + >('duk_get_lstring_default'); + late final _duk_get_lstring_default = + _duk_get_lstring_defaultPtr + .asFunction< + ffi.Pointer Function( ffi.Pointer, - duk_idx_t, + int, ffi.Pointer, ffi.Pointer, - duk_size_t)>>('duk_get_lstring_default'); - late final _duk_get_lstring_default = _duk_get_lstring_defaultPtr.asFunction< - ffi.Pointer Function(ffi.Pointer, int, - ffi.Pointer, ffi.Pointer, int)>(); + int, + ) + >(); ffi.Pointer duk_get_buffer_default( ffi.Pointer ctx, @@ -2251,26 +1979,31 @@ class DuktapeBindings { ffi.Pointer def_ptr, int def_len, ) { - return _duk_get_buffer_default( - ctx, - idx, - out_size, - def_ptr, - def_len, - ); + return _duk_get_buffer_default(ctx, idx, out_size, def_ptr, def_len); } late final _duk_get_buffer_defaultPtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function( + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + duk_idx_t, + ffi.Pointer, + ffi.Pointer, + duk_size_t, + ) + > + >('duk_get_buffer_default'); + late final _duk_get_buffer_default = + _duk_get_buffer_defaultPtr + .asFunction< + ffi.Pointer Function( ffi.Pointer, - duk_idx_t, + int, ffi.Pointer, ffi.Pointer, - duk_size_t)>>('duk_get_buffer_default'); - late final _duk_get_buffer_default = _duk_get_buffer_defaultPtr.asFunction< - ffi.Pointer Function(ffi.Pointer, int, - ffi.Pointer, ffi.Pointer, int)>(); + int, + ) + >(); ffi.Pointer duk_get_buffer_data_default( ffi.Pointer ctx, @@ -2279,207 +2012,225 @@ class DuktapeBindings { ffi.Pointer def_ptr, int def_len, ) { - return _duk_get_buffer_data_default( - ctx, - idx, - out_size, - def_ptr, - def_len, - ); + return _duk_get_buffer_data_default(ctx, idx, out_size, def_ptr, def_len); } late final _duk_get_buffer_data_defaultPtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function( + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + duk_idx_t, + ffi.Pointer, + ffi.Pointer, + duk_size_t, + ) + > + >('duk_get_buffer_data_default'); + late final _duk_get_buffer_data_default = + _duk_get_buffer_data_defaultPtr + .asFunction< + ffi.Pointer Function( ffi.Pointer, - duk_idx_t, + int, ffi.Pointer, ffi.Pointer, - duk_size_t)>>('duk_get_buffer_data_default'); - late final _duk_get_buffer_data_default = - _duk_get_buffer_data_defaultPtr.asFunction< - ffi.Pointer Function(ffi.Pointer, int, - ffi.Pointer, ffi.Pointer, int)>(); + int, + ) + >(); ffi.Pointer duk_get_pointer_default( ffi.Pointer ctx, int idx, ffi.Pointer def_value, ) { - return _duk_get_pointer_default( - ctx, - idx, - def_value, - ); + return _duk_get_pointer_default(ctx, idx, def_value); } late final _duk_get_pointer_defaultPtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function(ffi.Pointer, duk_idx_t, - ffi.Pointer)>>('duk_get_pointer_default'); - late final _duk_get_pointer_default = _duk_get_pointer_defaultPtr.asFunction< + ffi.NativeFunction< ffi.Pointer Function( - ffi.Pointer, int, ffi.Pointer)>(); + ffi.Pointer, + duk_idx_t, + ffi.Pointer, + ) + > + >('duk_get_pointer_default'); + late final _duk_get_pointer_default = + _duk_get_pointer_defaultPtr + .asFunction< + ffi.Pointer Function( + ffi.Pointer, + int, + ffi.Pointer, + ) + >(); duk_c_function duk_get_c_function_default( ffi.Pointer ctx, int idx, duk_c_function def_value, ) { - return _duk_get_c_function_default( - ctx, - idx, - def_value, - ); + return _duk_get_c_function_default(ctx, idx, def_value); } late final _duk_get_c_function_defaultPtr = _lookup< - ffi.NativeFunction< - duk_c_function Function(ffi.Pointer, duk_idx_t, - duk_c_function)>>('duk_get_c_function_default'); + ffi.NativeFunction< + duk_c_function Function( + ffi.Pointer, + duk_idx_t, + duk_c_function, + ) + > + >('duk_get_c_function_default'); late final _duk_get_c_function_default = - _duk_get_c_function_defaultPtr.asFunction< - duk_c_function Function( - ffi.Pointer, int, duk_c_function)>(); + _duk_get_c_function_defaultPtr + .asFunction< + duk_c_function Function( + ffi.Pointer, + int, + duk_c_function, + ) + >(); ffi.Pointer duk_get_context_default( ffi.Pointer ctx, int idx, ffi.Pointer def_value, ) { - return _duk_get_context_default( - ctx, - idx, - def_value, - ); + return _duk_get_context_default(ctx, idx, def_value); } late final _duk_get_context_defaultPtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function(ffi.Pointer, duk_idx_t, - ffi.Pointer)>>('duk_get_context_default'); - late final _duk_get_context_default = _duk_get_context_defaultPtr.asFunction< + ffi.NativeFunction< ffi.Pointer Function( - ffi.Pointer, int, ffi.Pointer)>(); + ffi.Pointer, + duk_idx_t, + ffi.Pointer, + ) + > + >('duk_get_context_default'); + late final _duk_get_context_default = + _duk_get_context_defaultPtr + .asFunction< + ffi.Pointer Function( + ffi.Pointer, + int, + ffi.Pointer, + ) + >(); ffi.Pointer duk_get_heapptr_default( ffi.Pointer ctx, int idx, ffi.Pointer def_value, ) { - return _duk_get_heapptr_default( - ctx, - idx, - def_value, - ); + return _duk_get_heapptr_default(ctx, idx, def_value); } late final _duk_get_heapptr_defaultPtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function(ffi.Pointer, duk_idx_t, - ffi.Pointer)>>('duk_get_heapptr_default'); - late final _duk_get_heapptr_default = _duk_get_heapptr_defaultPtr.asFunction< + ffi.NativeFunction< ffi.Pointer Function( - ffi.Pointer, int, ffi.Pointer)>(); + ffi.Pointer, + duk_idx_t, + ffi.Pointer, + ) + > + >('duk_get_heapptr_default'); + late final _duk_get_heapptr_default = + _duk_get_heapptr_defaultPtr + .asFunction< + ffi.Pointer Function( + ffi.Pointer, + int, + ffi.Pointer, + ) + >(); /// Opt operations: like require operations but with an explicit default value /// when value is undefined or index is invalid, null and non-matching types /// cause a TypeError. - int duk_opt_boolean( - ffi.Pointer ctx, - int idx, - int def_value, - ) { - return _duk_opt_boolean( - ctx, - idx, - def_value, - ); + int duk_opt_boolean(ffi.Pointer ctx, int idx, int def_value) { + return _duk_opt_boolean(ctx, idx, def_value); } late final _duk_opt_booleanPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function(ffi.Pointer, duk_idx_t, - duk_bool_t)>>('duk_opt_boolean'); - late final _duk_opt_boolean = _duk_opt_booleanPtr - .asFunction, int, int)>(); + ffi.NativeFunction< + duk_bool_t Function(ffi.Pointer, duk_idx_t, duk_bool_t) + > + >('duk_opt_boolean'); + late final _duk_opt_boolean = + _duk_opt_booleanPtr + .asFunction, int, int)>(); double duk_opt_number( ffi.Pointer ctx, int idx, double def_value, ) { - return _duk_opt_number( - ctx, - idx, - def_value, - ); + return _duk_opt_number(ctx, idx, def_value); } late final _duk_opt_numberPtr = _lookup< - ffi.NativeFunction< - duk_double_t Function(ffi.Pointer, duk_idx_t, - duk_double_t)>>('duk_opt_number'); - late final _duk_opt_number = _duk_opt_numberPtr - .asFunction, int, double)>(); + ffi.NativeFunction< + duk_double_t Function(ffi.Pointer, duk_idx_t, duk_double_t) + > + >('duk_opt_number'); + late final _duk_opt_number = + _duk_opt_numberPtr + .asFunction, int, double)>(); - int duk_opt_int( - ffi.Pointer ctx, - int idx, - int def_value, - ) { - return _duk_opt_int( - ctx, - idx, - def_value, - ); + int duk_opt_int(ffi.Pointer ctx, int idx, int def_value) { + return _duk_opt_int(ctx, idx, def_value); } late final _duk_opt_intPtr = _lookup< - ffi.NativeFunction< - duk_int_t Function( - ffi.Pointer, duk_idx_t, duk_int_t)>>('duk_opt_int'); - late final _duk_opt_int = _duk_opt_intPtr - .asFunction, int, int)>(); + ffi.NativeFunction< + duk_int_t Function(ffi.Pointer, duk_idx_t, duk_int_t) + > + >('duk_opt_int'); + late final _duk_opt_int = + _duk_opt_intPtr + .asFunction, int, int)>(); - int duk_opt_uint( - ffi.Pointer ctx, - int idx, - int def_value, - ) { - return _duk_opt_uint( - ctx, - idx, - def_value, - ); + int duk_opt_uint(ffi.Pointer ctx, int idx, int def_value) { + return _duk_opt_uint(ctx, idx, def_value); } late final _duk_opt_uintPtr = _lookup< - ffi.NativeFunction< - duk_uint_t Function(ffi.Pointer, duk_idx_t, - duk_uint_t)>>('duk_opt_uint'); - late final _duk_opt_uint = _duk_opt_uintPtr - .asFunction, int, int)>(); + ffi.NativeFunction< + duk_uint_t Function(ffi.Pointer, duk_idx_t, duk_uint_t) + > + >('duk_opt_uint'); + late final _duk_opt_uint = + _duk_opt_uintPtr + .asFunction, int, int)>(); ffi.Pointer duk_opt_string( ffi.Pointer ctx, int idx, ffi.Pointer def_ptr, ) { - return _duk_opt_string( - ctx, - idx, - def_ptr, - ); + return _duk_opt_string(ctx, idx, def_ptr); } late final _duk_opt_stringPtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function(ffi.Pointer, duk_idx_t, - ffi.Pointer)>>('duk_opt_string'); - late final _duk_opt_string = _duk_opt_stringPtr.asFunction< + ffi.NativeFunction< ffi.Pointer Function( - ffi.Pointer, int, ffi.Pointer)>(); + ffi.Pointer, + duk_idx_t, + ffi.Pointer, + ) + > + >('duk_opt_string'); + late final _duk_opt_string = + _duk_opt_stringPtr + .asFunction< + ffi.Pointer Function( + ffi.Pointer, + int, + ffi.Pointer, + ) + >(); ffi.Pointer duk_opt_lstring( ffi.Pointer ctx, @@ -2488,26 +2239,31 @@ class DuktapeBindings { ffi.Pointer def_ptr, int def_len, ) { - return _duk_opt_lstring( - ctx, - idx, - out_len, - def_ptr, - def_len, - ); + return _duk_opt_lstring(ctx, idx, out_len, def_ptr, def_len); } late final _duk_opt_lstringPtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function( + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + duk_idx_t, + ffi.Pointer, + ffi.Pointer, + duk_size_t, + ) + > + >('duk_opt_lstring'); + late final _duk_opt_lstring = + _duk_opt_lstringPtr + .asFunction< + ffi.Pointer Function( ffi.Pointer, - duk_idx_t, + int, ffi.Pointer, ffi.Pointer, - duk_size_t)>>('duk_opt_lstring'); - late final _duk_opt_lstring = _duk_opt_lstringPtr.asFunction< - ffi.Pointer Function(ffi.Pointer, int, - ffi.Pointer, ffi.Pointer, int)>(); + int, + ) + >(); ffi.Pointer duk_opt_buffer( ffi.Pointer ctx, @@ -2516,26 +2272,31 @@ class DuktapeBindings { ffi.Pointer def_ptr, int def_size, ) { - return _duk_opt_buffer( - ctx, - idx, - out_size, - def_ptr, - def_size, - ); + return _duk_opt_buffer(ctx, idx, out_size, def_ptr, def_size); } late final _duk_opt_bufferPtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function( + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + duk_idx_t, + ffi.Pointer, + ffi.Pointer, + duk_size_t, + ) + > + >('duk_opt_buffer'); + late final _duk_opt_buffer = + _duk_opt_bufferPtr + .asFunction< + ffi.Pointer Function( ffi.Pointer, - duk_idx_t, + int, ffi.Pointer, ffi.Pointer, - duk_size_t)>>('duk_opt_buffer'); - late final _duk_opt_buffer = _duk_opt_bufferPtr.asFunction< - ffi.Pointer Function(ffi.Pointer, int, - ffi.Pointer, ffi.Pointer, int)>(); + int, + ) + >(); ffi.Pointer duk_opt_buffer_data( ffi.Pointer ctx, @@ -2544,611 +2305,569 @@ class DuktapeBindings { ffi.Pointer def_ptr, int def_size, ) { - return _duk_opt_buffer_data( - ctx, - idx, - out_size, - def_ptr, - def_size, - ); + return _duk_opt_buffer_data(ctx, idx, out_size, def_ptr, def_size); } late final _duk_opt_buffer_dataPtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function( + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + duk_idx_t, + ffi.Pointer, + ffi.Pointer, + duk_size_t, + ) + > + >('duk_opt_buffer_data'); + late final _duk_opt_buffer_data = + _duk_opt_buffer_dataPtr + .asFunction< + ffi.Pointer Function( ffi.Pointer, - duk_idx_t, + int, ffi.Pointer, ffi.Pointer, - duk_size_t)>>('duk_opt_buffer_data'); - late final _duk_opt_buffer_data = _duk_opt_buffer_dataPtr.asFunction< - ffi.Pointer Function(ffi.Pointer, int, - ffi.Pointer, ffi.Pointer, int)>(); + int, + ) + >(); ffi.Pointer duk_opt_pointer( ffi.Pointer ctx, int idx, ffi.Pointer def_value, ) { - return _duk_opt_pointer( - ctx, - idx, - def_value, - ); + return _duk_opt_pointer(ctx, idx, def_value); } late final _duk_opt_pointerPtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function(ffi.Pointer, duk_idx_t, - ffi.Pointer)>>('duk_opt_pointer'); - late final _duk_opt_pointer = _duk_opt_pointerPtr.asFunction< + ffi.NativeFunction< ffi.Pointer Function( - ffi.Pointer, int, ffi.Pointer)>(); + ffi.Pointer, + duk_idx_t, + ffi.Pointer, + ) + > + >('duk_opt_pointer'); + late final _duk_opt_pointer = + _duk_opt_pointerPtr + .asFunction< + ffi.Pointer Function( + ffi.Pointer, + int, + ffi.Pointer, + ) + >(); duk_c_function duk_opt_c_function( ffi.Pointer ctx, int idx, duk_c_function def_value, ) { - return _duk_opt_c_function( - ctx, - idx, - def_value, - ); + return _duk_opt_c_function(ctx, idx, def_value); } late final _duk_opt_c_functionPtr = _lookup< - ffi.NativeFunction< - duk_c_function Function(ffi.Pointer, duk_idx_t, - duk_c_function)>>('duk_opt_c_function'); - late final _duk_opt_c_function = _duk_opt_c_functionPtr.asFunction< - duk_c_function Function(ffi.Pointer, int, duk_c_function)>(); + ffi.NativeFunction< + duk_c_function Function( + ffi.Pointer, + duk_idx_t, + duk_c_function, + ) + > + >('duk_opt_c_function'); + late final _duk_opt_c_function = + _duk_opt_c_functionPtr + .asFunction< + duk_c_function Function( + ffi.Pointer, + int, + duk_c_function, + ) + >(); ffi.Pointer duk_opt_context( ffi.Pointer ctx, int idx, ffi.Pointer def_value, ) { - return _duk_opt_context( - ctx, - idx, - def_value, - ); + return _duk_opt_context(ctx, idx, def_value); } late final _duk_opt_contextPtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function(ffi.Pointer, duk_idx_t, - ffi.Pointer)>>('duk_opt_context'); - late final _duk_opt_context = _duk_opt_contextPtr.asFunction< + ffi.NativeFunction< ffi.Pointer Function( - ffi.Pointer, int, ffi.Pointer)>(); + ffi.Pointer, + duk_idx_t, + ffi.Pointer, + ) + > + >('duk_opt_context'); + late final _duk_opt_context = + _duk_opt_contextPtr + .asFunction< + ffi.Pointer Function( + ffi.Pointer, + int, + ffi.Pointer, + ) + >(); ffi.Pointer duk_opt_heapptr( ffi.Pointer ctx, int idx, ffi.Pointer def_value, ) { - return _duk_opt_heapptr( - ctx, - idx, - def_value, - ); + return _duk_opt_heapptr(ctx, idx, def_value); } late final _duk_opt_heapptrPtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function(ffi.Pointer, duk_idx_t, - ffi.Pointer)>>('duk_opt_heapptr'); - late final _duk_opt_heapptr = _duk_opt_heapptrPtr.asFunction< + ffi.NativeFunction< ffi.Pointer Function( - ffi.Pointer, int, ffi.Pointer)>(); + ffi.Pointer, + duk_idx_t, + ffi.Pointer, + ) + > + >('duk_opt_heapptr'); + late final _duk_opt_heapptr = + _duk_opt_heapptrPtr + .asFunction< + ffi.Pointer Function( + ffi.Pointer, + int, + ffi.Pointer, + ) + >(); - void duk_require_undefined( - ffi.Pointer ctx, - int idx, - ) { - return _duk_require_undefined( - ctx, - idx, - ); + void duk_require_undefined(ffi.Pointer ctx, int idx) { + return _duk_require_undefined(ctx, idx); } late final _duk_require_undefinedPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function( - ffi.Pointer, duk_idx_t)>>('duk_require_undefined'); - late final _duk_require_undefined = _duk_require_undefinedPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_require_undefined'); + late final _duk_require_undefined = + _duk_require_undefinedPtr + .asFunction, int)>(); - void duk_require_null( - ffi.Pointer ctx, - int idx, - ) { - return _duk_require_null( - ctx, - idx, - ); + void duk_require_null(ffi.Pointer ctx, int idx) { + return _duk_require_null(ctx, idx); } late final _duk_require_nullPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function( - ffi.Pointer, duk_idx_t)>>('duk_require_null'); - late final _duk_require_null = _duk_require_nullPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_require_null'); + late final _duk_require_null = + _duk_require_nullPtr + .asFunction, int)>(); - int duk_require_boolean( - ffi.Pointer ctx, - int idx, - ) { - return _duk_require_boolean( - ctx, - idx, - ); + int duk_require_boolean(ffi.Pointer ctx, int idx) { + return _duk_require_boolean(ctx, idx); } late final _duk_require_booleanPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function( - ffi.Pointer, duk_idx_t)>>('duk_require_boolean'); - late final _duk_require_boolean = _duk_require_booleanPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_require_boolean'); + late final _duk_require_boolean = + _duk_require_booleanPtr + .asFunction, int)>(); - double duk_require_number( - ffi.Pointer ctx, - int idx, - ) { - return _duk_require_number( - ctx, - idx, - ); + double duk_require_number(ffi.Pointer ctx, int idx) { + return _duk_require_number(ctx, idx); } late final _duk_require_numberPtr = _lookup< - ffi.NativeFunction< - duk_double_t Function( - ffi.Pointer, duk_idx_t)>>('duk_require_number'); - late final _duk_require_number = _duk_require_numberPtr - .asFunction, int)>(); + ffi.NativeFunction< + duk_double_t Function(ffi.Pointer, duk_idx_t) + > + >('duk_require_number'); + late final _duk_require_number = + _duk_require_numberPtr + .asFunction, int)>(); - int duk_require_int( - ffi.Pointer ctx, - int idx, - ) { - return _duk_require_int( - ctx, - idx, - ); + int duk_require_int(ffi.Pointer ctx, int idx) { + return _duk_require_int(ctx, idx); } late final _duk_require_intPtr = _lookup< - ffi.NativeFunction< - duk_int_t Function( - ffi.Pointer, duk_idx_t)>>('duk_require_int'); - late final _duk_require_int = _duk_require_intPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_require_int'); + late final _duk_require_int = + _duk_require_intPtr + .asFunction, int)>(); - int duk_require_uint( - ffi.Pointer ctx, - int idx, - ) { - return _duk_require_uint( - ctx, - idx, - ); + int duk_require_uint(ffi.Pointer ctx, int idx) { + return _duk_require_uint(ctx, idx); } late final _duk_require_uintPtr = _lookup< - ffi.NativeFunction< - duk_uint_t Function( - ffi.Pointer, duk_idx_t)>>('duk_require_uint'); - late final _duk_require_uint = _duk_require_uintPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_require_uint'); + late final _duk_require_uint = + _duk_require_uintPtr + .asFunction, int)>(); ffi.Pointer duk_require_string( ffi.Pointer ctx, int idx, ) { - return _duk_require_string( - ctx, - idx, - ); + return _duk_require_string(ctx, idx); } late final _duk_require_stringPtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function( - ffi.Pointer, duk_idx_t)>>('duk_require_string'); - late final _duk_require_string = _duk_require_stringPtr.asFunction< - ffi.Pointer Function(ffi.Pointer, int)>(); + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, duk_idx_t) + > + >('duk_require_string'); + late final _duk_require_string = + _duk_require_stringPtr + .asFunction< + ffi.Pointer Function(ffi.Pointer, int) + >(); ffi.Pointer duk_require_lstring( ffi.Pointer ctx, int idx, ffi.Pointer out_len, ) { - return _duk_require_lstring( - ctx, - idx, - out_len, - ); + return _duk_require_lstring(ctx, idx, out_len); } late final _duk_require_lstringPtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function(ffi.Pointer, duk_idx_t, - ffi.Pointer)>>('duk_require_lstring'); - late final _duk_require_lstring = _duk_require_lstringPtr.asFunction< + ffi.NativeFunction< ffi.Pointer Function( - ffi.Pointer, int, ffi.Pointer)>(); + ffi.Pointer, + duk_idx_t, + ffi.Pointer, + ) + > + >('duk_require_lstring'); + late final _duk_require_lstring = + _duk_require_lstringPtr + .asFunction< + ffi.Pointer Function( + ffi.Pointer, + int, + ffi.Pointer, + ) + >(); - void duk_require_object( - ffi.Pointer ctx, - int idx, - ) { - return _duk_require_object( - ctx, - idx, - ); + void duk_require_object(ffi.Pointer ctx, int idx) { + return _duk_require_object(ctx, idx); } late final _duk_require_objectPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function( - ffi.Pointer, duk_idx_t)>>('duk_require_object'); - late final _duk_require_object = _duk_require_objectPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_require_object'); + late final _duk_require_object = + _duk_require_objectPtr + .asFunction, int)>(); ffi.Pointer duk_require_buffer( ffi.Pointer ctx, int idx, ffi.Pointer out_size, ) { - return _duk_require_buffer( - ctx, - idx, - out_size, - ); + return _duk_require_buffer(ctx, idx, out_size); } late final _duk_require_bufferPtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function(ffi.Pointer, duk_idx_t, - ffi.Pointer)>>('duk_require_buffer'); - late final _duk_require_buffer = _duk_require_bufferPtr.asFunction< + ffi.NativeFunction< ffi.Pointer Function( - ffi.Pointer, int, ffi.Pointer)>(); + ffi.Pointer, + duk_idx_t, + ffi.Pointer, + ) + > + >('duk_require_buffer'); + late final _duk_require_buffer = + _duk_require_bufferPtr + .asFunction< + ffi.Pointer Function( + ffi.Pointer, + int, + ffi.Pointer, + ) + >(); ffi.Pointer duk_require_buffer_data( ffi.Pointer ctx, int idx, ffi.Pointer out_size, ) { - return _duk_require_buffer_data( - ctx, - idx, - out_size, - ); + return _duk_require_buffer_data(ctx, idx, out_size); } late final _duk_require_buffer_dataPtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function(ffi.Pointer, duk_idx_t, - ffi.Pointer)>>('duk_require_buffer_data'); - late final _duk_require_buffer_data = _duk_require_buffer_dataPtr.asFunction< + ffi.NativeFunction< ffi.Pointer Function( - ffi.Pointer, int, ffi.Pointer)>(); + ffi.Pointer, + duk_idx_t, + ffi.Pointer, + ) + > + >('duk_require_buffer_data'); + late final _duk_require_buffer_data = + _duk_require_buffer_dataPtr + .asFunction< + ffi.Pointer Function( + ffi.Pointer, + int, + ffi.Pointer, + ) + >(); ffi.Pointer duk_require_pointer( ffi.Pointer ctx, int idx, - ) { - return _duk_require_pointer( - ctx, - idx, - ); + ) { + return _duk_require_pointer(ctx, idx); } late final _duk_require_pointerPtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function( - ffi.Pointer, duk_idx_t)>>('duk_require_pointer'); - late final _duk_require_pointer = _duk_require_pointerPtr.asFunction< - ffi.Pointer Function(ffi.Pointer, int)>(); + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, duk_idx_t) + > + >('duk_require_pointer'); + late final _duk_require_pointer = + _duk_require_pointerPtr + .asFunction< + ffi.Pointer Function(ffi.Pointer, int) + >(); - duk_c_function duk_require_c_function( - ffi.Pointer ctx, - int idx, - ) { - return _duk_require_c_function( - ctx, - idx, - ); + duk_c_function duk_require_c_function(ffi.Pointer ctx, int idx) { + return _duk_require_c_function(ctx, idx); } late final _duk_require_c_functionPtr = _lookup< - ffi.NativeFunction< - duk_c_function Function( - ffi.Pointer, duk_idx_t)>>('duk_require_c_function'); - late final _duk_require_c_function = _duk_require_c_functionPtr - .asFunction, int)>(); + ffi.NativeFunction< + duk_c_function Function(ffi.Pointer, duk_idx_t) + > + >('duk_require_c_function'); + late final _duk_require_c_function = + _duk_require_c_functionPtr + .asFunction, int)>(); ffi.Pointer duk_require_context( ffi.Pointer ctx, int idx, ) { - return _duk_require_context( - ctx, - idx, - ); + return _duk_require_context(ctx, idx); } late final _duk_require_contextPtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function( - ffi.Pointer, duk_idx_t)>>('duk_require_context'); - late final _duk_require_context = _duk_require_contextPtr.asFunction< - ffi.Pointer Function(ffi.Pointer, int)>(); + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, duk_idx_t) + > + >('duk_require_context'); + late final _duk_require_context = + _duk_require_contextPtr + .asFunction< + ffi.Pointer Function(ffi.Pointer, int) + >(); - void duk_require_function( - ffi.Pointer ctx, - int idx, - ) { - return _duk_require_function( - ctx, - idx, - ); + void duk_require_function(ffi.Pointer ctx, int idx) { + return _duk_require_function(ctx, idx); } late final _duk_require_functionPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function( - ffi.Pointer, duk_idx_t)>>('duk_require_function'); - late final _duk_require_function = _duk_require_functionPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_require_function'); + late final _duk_require_function = + _duk_require_functionPtr + .asFunction, int)>(); - void duk_require_constructor_call( - ffi.Pointer ctx, - ) { - return _duk_require_constructor_call( - ctx, - ); + void duk_require_constructor_call(ffi.Pointer ctx) { + return _duk_require_constructor_call(ctx); } late final _duk_require_constructor_callPtr = _lookup)>>( - 'duk_require_constructor_call'); - late final _duk_require_constructor_call = _duk_require_constructor_callPtr - .asFunction)>(); + 'duk_require_constructor_call', + ); + late final _duk_require_constructor_call = + _duk_require_constructor_callPtr + .asFunction)>(); - void duk_require_constructable( - ffi.Pointer ctx, - int idx, - ) { - return _duk_require_constructable( - ctx, - idx, - ); + void duk_require_constructable(ffi.Pointer ctx, int idx) { + return _duk_require_constructable(ctx, idx); } late final _duk_require_constructablePtr = _lookup< - ffi.NativeFunction< - ffi.Void Function(ffi.Pointer, - duk_idx_t)>>('duk_require_constructable'); - late final _duk_require_constructable = _duk_require_constructablePtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_require_constructable'); + late final _duk_require_constructable = + _duk_require_constructablePtr + .asFunction, int)>(); ffi.Pointer duk_require_heapptr( ffi.Pointer ctx, int idx, ) { - return _duk_require_heapptr( - ctx, - idx, - ); + return _duk_require_heapptr(ctx, idx); } late final _duk_require_heapptrPtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function( - ffi.Pointer, duk_idx_t)>>('duk_require_heapptr'); - late final _duk_require_heapptr = _duk_require_heapptrPtr.asFunction< - ffi.Pointer Function(ffi.Pointer, int)>(); + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, duk_idx_t) + > + >('duk_require_heapptr'); + late final _duk_require_heapptr = + _duk_require_heapptrPtr + .asFunction< + ffi.Pointer Function(ffi.Pointer, int) + >(); /// Coercion operations: in-place coercion, return coerced value where /// applicable. If index is invalid, throw error. Some coercions may /// throw an expected error (e.g. from a toString() or valueOf() call) /// or an internal error (e.g. from out of memory). - void duk_to_undefined( - ffi.Pointer ctx, - int idx, - ) { - return _duk_to_undefined( - ctx, - idx, - ); + void duk_to_undefined(ffi.Pointer ctx, int idx) { + return _duk_to_undefined(ctx, idx); } late final _duk_to_undefinedPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function( - ffi.Pointer, duk_idx_t)>>('duk_to_undefined'); - late final _duk_to_undefined = _duk_to_undefinedPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_to_undefined'); + late final _duk_to_undefined = + _duk_to_undefinedPtr + .asFunction, int)>(); - void duk_to_null( - ffi.Pointer ctx, - int idx, - ) { - return _duk_to_null( - ctx, - idx, - ); + void duk_to_null(ffi.Pointer ctx, int idx) { + return _duk_to_null(ctx, idx); } late final _duk_to_nullPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function( - ffi.Pointer, duk_idx_t)>>('duk_to_null'); - late final _duk_to_null = _duk_to_nullPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_to_null'); + late final _duk_to_null = + _duk_to_nullPtr + .asFunction, int)>(); - int duk_to_boolean( - ffi.Pointer ctx, - int idx, - ) { - return _duk_to_boolean( - ctx, - idx, - ); + int duk_to_boolean(ffi.Pointer ctx, int idx) { + return _duk_to_boolean(ctx, idx); } late final _duk_to_booleanPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function( - ffi.Pointer, duk_idx_t)>>('duk_to_boolean'); - late final _duk_to_boolean = _duk_to_booleanPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_to_boolean'); + late final _duk_to_boolean = + _duk_to_booleanPtr + .asFunction, int)>(); - double duk_to_number( - ffi.Pointer ctx, - int idx, - ) { - return _duk_to_number( - ctx, - idx, - ); + double duk_to_number(ffi.Pointer ctx, int idx) { + return _duk_to_number(ctx, idx); } late final _duk_to_numberPtr = _lookup< - ffi.NativeFunction< - duk_double_t Function( - ffi.Pointer, duk_idx_t)>>('duk_to_number'); - late final _duk_to_number = _duk_to_numberPtr - .asFunction, int)>(); + ffi.NativeFunction< + duk_double_t Function(ffi.Pointer, duk_idx_t) + > + >('duk_to_number'); + late final _duk_to_number = + _duk_to_numberPtr + .asFunction, int)>(); - int duk_to_int( - ffi.Pointer ctx, - int idx, - ) { - return _duk_to_int( - ctx, - idx, - ); + int duk_to_int(ffi.Pointer ctx, int idx) { + return _duk_to_int(ctx, idx); } late final _duk_to_intPtr = _lookup< - ffi.NativeFunction< - duk_int_t Function( - ffi.Pointer, duk_idx_t)>>('duk_to_int'); + ffi.NativeFunction, duk_idx_t)> + >('duk_to_int'); late final _duk_to_int = _duk_to_intPtr.asFunction, int)>(); - int duk_to_uint( - ffi.Pointer ctx, - int idx, - ) { - return _duk_to_uint( - ctx, - idx, - ); + int duk_to_uint(ffi.Pointer ctx, int idx) { + return _duk_to_uint(ctx, idx); } late final _duk_to_uintPtr = _lookup< - ffi.NativeFunction< - duk_uint_t Function( - ffi.Pointer, duk_idx_t)>>('duk_to_uint'); + ffi.NativeFunction, duk_idx_t)> + >('duk_to_uint'); late final _duk_to_uint = _duk_to_uintPtr.asFunction, int)>(); - int duk_to_int32( - ffi.Pointer ctx, - int idx, - ) { - return _duk_to_int32( - ctx, - idx, - ); + int duk_to_int32(ffi.Pointer ctx, int idx) { + return _duk_to_int32(ctx, idx); } late final _duk_to_int32Ptr = _lookup< - ffi.NativeFunction< - duk_int32_t Function( - ffi.Pointer, duk_idx_t)>>('duk_to_int32'); - late final _duk_to_int32 = _duk_to_int32Ptr - .asFunction, int)>(); + ffi.NativeFunction< + duk_int32_t Function(ffi.Pointer, duk_idx_t) + > + >('duk_to_int32'); + late final _duk_to_int32 = + _duk_to_int32Ptr + .asFunction, int)>(); - int duk_to_uint32( - ffi.Pointer ctx, - int idx, - ) { - return _duk_to_uint32( - ctx, - idx, - ); + int duk_to_uint32(ffi.Pointer ctx, int idx) { + return _duk_to_uint32(ctx, idx); } late final _duk_to_uint32Ptr = _lookup< - ffi.NativeFunction< - duk_uint32_t Function( - ffi.Pointer, duk_idx_t)>>('duk_to_uint32'); - late final _duk_to_uint32 = _duk_to_uint32Ptr - .asFunction, int)>(); + ffi.NativeFunction< + duk_uint32_t Function(ffi.Pointer, duk_idx_t) + > + >('duk_to_uint32'); + late final _duk_to_uint32 = + _duk_to_uint32Ptr + .asFunction, int)>(); - int duk_to_uint16( - ffi.Pointer ctx, - int idx, - ) { - return _duk_to_uint16( - ctx, - idx, - ); + int duk_to_uint16(ffi.Pointer ctx, int idx) { + return _duk_to_uint16(ctx, idx); } late final _duk_to_uint16Ptr = _lookup< - ffi.NativeFunction< - duk_uint16_t Function( - ffi.Pointer, duk_idx_t)>>('duk_to_uint16'); - late final _duk_to_uint16 = _duk_to_uint16Ptr - .asFunction, int)>(); + ffi.NativeFunction< + duk_uint16_t Function(ffi.Pointer, duk_idx_t) + > + >('duk_to_uint16'); + late final _duk_to_uint16 = + _duk_to_uint16Ptr + .asFunction, int)>(); - ffi.Pointer duk_to_string( - ffi.Pointer ctx, - int idx, - ) { - return _duk_to_string( - ctx, - idx, - ); + ffi.Pointer duk_to_string(ffi.Pointer ctx, int idx) { + return _duk_to_string(ctx, idx); } late final _duk_to_stringPtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function( - ffi.Pointer, duk_idx_t)>>('duk_to_string'); - late final _duk_to_string = _duk_to_stringPtr.asFunction< - ffi.Pointer Function(ffi.Pointer, int)>(); + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, duk_idx_t) + > + >('duk_to_string'); + late final _duk_to_string = + _duk_to_stringPtr + .asFunction< + ffi.Pointer Function(ffi.Pointer, int) + >(); ffi.Pointer duk_to_lstring( ffi.Pointer ctx, int idx, ffi.Pointer out_len, ) { - return _duk_to_lstring( - ctx, - idx, - out_len, - ); + return _duk_to_lstring(ctx, idx, out_len); } late final _duk_to_lstringPtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function(ffi.Pointer, duk_idx_t, - ffi.Pointer)>>('duk_to_lstring'); - late final _duk_to_lstring = _duk_to_lstringPtr.asFunction< + ffi.NativeFunction< ffi.Pointer Function( - ffi.Pointer, int, ffi.Pointer)>(); + ffi.Pointer, + duk_idx_t, + ffi.Pointer, + ) + > + >('duk_to_lstring'); + late final _duk_to_lstring = + _duk_to_lstringPtr + .asFunction< + ffi.Pointer Function( + ffi.Pointer, + int, + ffi.Pointer, + ) + >(); ffi.Pointer duk_to_buffer_raw( ffi.Pointer ctx, @@ -3156,74 +2875,68 @@ class DuktapeBindings { ffi.Pointer out_size, int flags, ) { - return _duk_to_buffer_raw( - ctx, - idx, - out_size, - flags, - ); + return _duk_to_buffer_raw(ctx, idx, out_size, flags); } late final _duk_to_buffer_rawPtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function(ffi.Pointer, duk_idx_t, - ffi.Pointer, duk_uint_t)>>('duk_to_buffer_raw'); - late final _duk_to_buffer_raw = _duk_to_buffer_rawPtr.asFunction< + ffi.NativeFunction< ffi.Pointer Function( - ffi.Pointer, int, ffi.Pointer, int)>(); + ffi.Pointer, + duk_idx_t, + ffi.Pointer, + duk_uint_t, + ) + > + >('duk_to_buffer_raw'); + late final _duk_to_buffer_raw = + _duk_to_buffer_rawPtr + .asFunction< + ffi.Pointer Function( + ffi.Pointer, + int, + ffi.Pointer, + int, + ) + >(); - ffi.Pointer duk_to_pointer( - ffi.Pointer ctx, - int idx, - ) { - return _duk_to_pointer( - ctx, - idx, - ); + ffi.Pointer duk_to_pointer(ffi.Pointer ctx, int idx) { + return _duk_to_pointer(ctx, idx); } late final _duk_to_pointerPtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function( - ffi.Pointer, duk_idx_t)>>('duk_to_pointer'); - late final _duk_to_pointer = _duk_to_pointerPtr.asFunction< - ffi.Pointer Function(ffi.Pointer, int)>(); + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, duk_idx_t) + > + >('duk_to_pointer'); + late final _duk_to_pointer = + _duk_to_pointerPtr + .asFunction< + ffi.Pointer Function(ffi.Pointer, int) + >(); - void duk_to_object( - ffi.Pointer ctx, - int idx, - ) { - return _duk_to_object( - ctx, - idx, - ); + void duk_to_object(ffi.Pointer ctx, int idx) { + return _duk_to_object(ctx, idx); } late final _duk_to_objectPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function( - ffi.Pointer, duk_idx_t)>>('duk_to_object'); - late final _duk_to_object = _duk_to_objectPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_to_object'); + late final _duk_to_object = + _duk_to_objectPtr + .asFunction, int)>(); - void duk_to_primitive( - ffi.Pointer ctx, - int idx, - int hint, - ) { - return _duk_to_primitive( - ctx, - idx, - hint, - ); + void duk_to_primitive(ffi.Pointer ctx, int idx, int hint) { + return _duk_to_primitive(ctx, idx, hint); } late final _duk_to_primitivePtr = _lookup< - ffi.NativeFunction< - ffi.Void Function(ffi.Pointer, duk_idx_t, - duk_int_t)>>('duk_to_primitive'); - late final _duk_to_primitive = _duk_to_primitivePtr - .asFunction, int, int)>(); + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, duk_idx_t, duk_int_t) + > + >('duk_to_primitive'); + late final _duk_to_primitive = + _duk_to_primitivePtr + .asFunction, int, int)>(); /// safe variants of a few coercion operations ffi.Pointer duk_safe_to_lstring( @@ -3231,249 +2944,222 @@ class DuktapeBindings { int idx, ffi.Pointer out_len, ) { - return _duk_safe_to_lstring( - ctx, - idx, - out_len, - ); + return _duk_safe_to_lstring(ctx, idx, out_len); } late final _duk_safe_to_lstringPtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function(ffi.Pointer, duk_idx_t, - ffi.Pointer)>>('duk_safe_to_lstring'); - late final _duk_safe_to_lstring = _duk_safe_to_lstringPtr.asFunction< + ffi.NativeFunction< ffi.Pointer Function( - ffi.Pointer, int, ffi.Pointer)>(); + ffi.Pointer, + duk_idx_t, + ffi.Pointer, + ) + > + >('duk_safe_to_lstring'); + late final _duk_safe_to_lstring = + _duk_safe_to_lstringPtr + .asFunction< + ffi.Pointer Function( + ffi.Pointer, + int, + ffi.Pointer, + ) + >(); ffi.Pointer duk_to_stacktrace( ffi.Pointer ctx, int idx, ) { - return _duk_to_stacktrace( - ctx, - idx, - ); + return _duk_to_stacktrace(ctx, idx); } late final _duk_to_stacktracePtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function( - ffi.Pointer, duk_idx_t)>>('duk_to_stacktrace'); - late final _duk_to_stacktrace = _duk_to_stacktracePtr.asFunction< - ffi.Pointer Function(ffi.Pointer, int)>(); + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, duk_idx_t) + > + >('duk_to_stacktrace'); + late final _duk_to_stacktrace = + _duk_to_stacktracePtr + .asFunction< + ffi.Pointer Function(ffi.Pointer, int) + >(); ffi.Pointer duk_safe_to_stacktrace( ffi.Pointer ctx, int idx, ) { - return _duk_safe_to_stacktrace( - ctx, - idx, - ); + return _duk_safe_to_stacktrace(ctx, idx); } late final _duk_safe_to_stacktracePtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function( - ffi.Pointer, duk_idx_t)>>('duk_safe_to_stacktrace'); - late final _duk_safe_to_stacktrace = _duk_safe_to_stacktracePtr.asFunction< - ffi.Pointer Function(ffi.Pointer, int)>(); + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, duk_idx_t) + > + >('duk_safe_to_stacktrace'); + late final _duk_safe_to_stacktrace = + _duk_safe_to_stacktracePtr + .asFunction< + ffi.Pointer Function(ffi.Pointer, int) + >(); /// Value length - int duk_get_length( - ffi.Pointer ctx, - int idx, - ) { - return _duk_get_length( - ctx, - idx, - ); + int duk_get_length(ffi.Pointer ctx, int idx) { + return _duk_get_length(ctx, idx); } late final _duk_get_lengthPtr = _lookup< - ffi.NativeFunction< - duk_size_t Function( - ffi.Pointer, duk_idx_t)>>('duk_get_length'); - late final _duk_get_length = _duk_get_lengthPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_get_length'); + late final _duk_get_length = + _duk_get_lengthPtr + .asFunction, int)>(); - void duk_set_length( - ffi.Pointer ctx, - int idx, - int len, - ) { - return _duk_set_length( - ctx, - idx, - len, - ); + void duk_set_length(ffi.Pointer ctx, int idx, int len) { + return _duk_set_length(ctx, idx, len); } late final _duk_set_lengthPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function(ffi.Pointer, duk_idx_t, - duk_size_t)>>('duk_set_length'); - late final _duk_set_length = _duk_set_lengthPtr - .asFunction, int, int)>(); + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, duk_idx_t, duk_size_t) + > + >('duk_set_length'); + late final _duk_set_length = + _duk_set_lengthPtr + .asFunction, int, int)>(); /// Misc conversion ffi.Pointer duk_base64_encode( ffi.Pointer ctx, int idx, ) { - return _duk_base64_encode( - ctx, - idx, - ); + return _duk_base64_encode(ctx, idx); } late final _duk_base64_encodePtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function( - ffi.Pointer, duk_idx_t)>>('duk_base64_encode'); - late final _duk_base64_encode = _duk_base64_encodePtr.asFunction< - ffi.Pointer Function(ffi.Pointer, int)>(); + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, duk_idx_t) + > + >('duk_base64_encode'); + late final _duk_base64_encode = + _duk_base64_encodePtr + .asFunction< + ffi.Pointer Function(ffi.Pointer, int) + >(); - void duk_base64_decode( - ffi.Pointer ctx, - int idx, - ) { - return _duk_base64_decode( - ctx, - idx, - ); + void duk_base64_decode(ffi.Pointer ctx, int idx) { + return _duk_base64_decode(ctx, idx); } late final _duk_base64_decodePtr = _lookup< - ffi.NativeFunction< - ffi.Void Function( - ffi.Pointer, duk_idx_t)>>('duk_base64_decode'); - late final _duk_base64_decode = _duk_base64_decodePtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_base64_decode'); + late final _duk_base64_decode = + _duk_base64_decodePtr + .asFunction, int)>(); - ffi.Pointer duk_hex_encode( - ffi.Pointer ctx, - int idx, - ) { - return _duk_hex_encode( - ctx, - idx, - ); + ffi.Pointer duk_hex_encode(ffi.Pointer ctx, int idx) { + return _duk_hex_encode(ctx, idx); } late final _duk_hex_encodePtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function( - ffi.Pointer, duk_idx_t)>>('duk_hex_encode'); - late final _duk_hex_encode = _duk_hex_encodePtr.asFunction< - ffi.Pointer Function(ffi.Pointer, int)>(); + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, duk_idx_t) + > + >('duk_hex_encode'); + late final _duk_hex_encode = + _duk_hex_encodePtr + .asFunction< + ffi.Pointer Function(ffi.Pointer, int) + >(); - void duk_hex_decode( - ffi.Pointer ctx, - int idx, - ) { - return _duk_hex_decode( - ctx, - idx, - ); + void duk_hex_decode(ffi.Pointer ctx, int idx) { + return _duk_hex_decode(ctx, idx); } late final _duk_hex_decodePtr = _lookup< - ffi.NativeFunction< - ffi.Void Function( - ffi.Pointer, duk_idx_t)>>('duk_hex_decode'); - late final _duk_hex_decode = _duk_hex_decodePtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_hex_decode'); + late final _duk_hex_decode = + _duk_hex_decodePtr + .asFunction, int)>(); - ffi.Pointer duk_json_encode( - ffi.Pointer ctx, - int idx, - ) { - return _duk_json_encode( - ctx, - idx, - ); + ffi.Pointer duk_json_encode(ffi.Pointer ctx, int idx) { + return _duk_json_encode(ctx, idx); } late final _duk_json_encodePtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function( - ffi.Pointer, duk_idx_t)>>('duk_json_encode'); - late final _duk_json_encode = _duk_json_encodePtr.asFunction< - ffi.Pointer Function(ffi.Pointer, int)>(); + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, duk_idx_t) + > + >('duk_json_encode'); + late final _duk_json_encode = + _duk_json_encodePtr + .asFunction< + ffi.Pointer Function(ffi.Pointer, int) + >(); - void duk_json_decode( - ffi.Pointer ctx, - int idx, - ) { - return _duk_json_decode( - ctx, - idx, - ); + void duk_json_decode(ffi.Pointer ctx, int idx) { + return _duk_json_decode(ctx, idx); } late final _duk_json_decodePtr = _lookup< - ffi.NativeFunction< - ffi.Void Function( - ffi.Pointer, duk_idx_t)>>('duk_json_decode'); - late final _duk_json_decode = _duk_json_decodePtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_json_decode'); + late final _duk_json_decode = + _duk_json_decodePtr + .asFunction, int)>(); void duk_cbor_encode( ffi.Pointer ctx, int idx, int encode_flags, ) { - return _duk_cbor_encode( - ctx, - idx, - encode_flags, - ); + return _duk_cbor_encode(ctx, idx, encode_flags); } late final _duk_cbor_encodePtr = _lookup< - ffi.NativeFunction< - ffi.Void Function(ffi.Pointer, duk_idx_t, - duk_uint_t)>>('duk_cbor_encode'); - late final _duk_cbor_encode = _duk_cbor_encodePtr - .asFunction, int, int)>(); + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, duk_idx_t, duk_uint_t) + > + >('duk_cbor_encode'); + late final _duk_cbor_encode = + _duk_cbor_encodePtr + .asFunction, int, int)>(); void duk_cbor_decode( ffi.Pointer ctx, int idx, int decode_flags, ) { - return _duk_cbor_decode( - ctx, - idx, - decode_flags, - ); + return _duk_cbor_decode(ctx, idx, decode_flags); } late final _duk_cbor_decodePtr = _lookup< - ffi.NativeFunction< - ffi.Void Function(ffi.Pointer, duk_idx_t, - duk_uint_t)>>('duk_cbor_decode'); - late final _duk_cbor_decode = _duk_cbor_decodePtr - .asFunction, int, int)>(); + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, duk_idx_t, duk_uint_t) + > + >('duk_cbor_decode'); + late final _duk_cbor_decode = + _duk_cbor_decodePtr + .asFunction, int, int)>(); ffi.Pointer duk_buffer_to_string( ffi.Pointer ctx, int idx, ) { - return _duk_buffer_to_string( - ctx, - idx, - ); + return _duk_buffer_to_string(ctx, idx); } late final _duk_buffer_to_stringPtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function( - ffi.Pointer, duk_idx_t)>>('duk_buffer_to_string'); - late final _duk_buffer_to_string = _duk_buffer_to_stringPtr.asFunction< - ffi.Pointer Function(ffi.Pointer, int)>(); + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, duk_idx_t) + > + >('duk_buffer_to_string'); + late final _duk_buffer_to_string = + _duk_buffer_to_stringPtr + .asFunction< + ffi.Pointer Function(ffi.Pointer, int) + >(); /// Buffer ffi.Pointer duk_resize_buffer( @@ -3481,39 +3167,50 @@ class DuktapeBindings { int idx, int new_size, ) { - return _duk_resize_buffer( - ctx, - idx, - new_size, - ); + return _duk_resize_buffer(ctx, idx, new_size); } late final _duk_resize_bufferPtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function(ffi.Pointer, duk_idx_t, - duk_size_t)>>('duk_resize_buffer'); - late final _duk_resize_buffer = _duk_resize_bufferPtr.asFunction< - ffi.Pointer Function(ffi.Pointer, int, int)>(); + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + duk_idx_t, + duk_size_t, + ) + > + >('duk_resize_buffer'); + late final _duk_resize_buffer = + _duk_resize_bufferPtr + .asFunction< + ffi.Pointer Function(ffi.Pointer, int, int) + >(); ffi.Pointer duk_steal_buffer( ffi.Pointer ctx, int idx, ffi.Pointer out_size, ) { - return _duk_steal_buffer( - ctx, - idx, - out_size, - ); + return _duk_steal_buffer(ctx, idx, out_size); } late final _duk_steal_bufferPtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function(ffi.Pointer, duk_idx_t, - ffi.Pointer)>>('duk_steal_buffer'); - late final _duk_steal_buffer = _duk_steal_bufferPtr.asFunction< + ffi.NativeFunction< ffi.Pointer Function( - ffi.Pointer, int, ffi.Pointer)>(); + ffi.Pointer, + duk_idx_t, + ffi.Pointer, + ) + > + >('duk_steal_buffer'); + late final _duk_steal_buffer = + _duk_steal_bufferPtr + .asFunction< + ffi.Pointer Function( + ffi.Pointer, + int, + ffi.Pointer, + ) + >(); void duk_config_buffer( ffi.Pointer ctx, @@ -3521,21 +3218,29 @@ class DuktapeBindings { ffi.Pointer ptr, int len, ) { - return _duk_config_buffer( - ctx, - idx, - ptr, - len, - ); + return _duk_config_buffer(ctx, idx, ptr, len); } late final _duk_config_bufferPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function(ffi.Pointer, duk_idx_t, - ffi.Pointer, duk_size_t)>>('duk_config_buffer'); - late final _duk_config_buffer = _duk_config_bufferPtr.asFunction< - void Function( - ffi.Pointer, int, ffi.Pointer, int)>(); + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer, + duk_idx_t, + ffi.Pointer, + duk_size_t, + ) + > + >('duk_config_buffer'); + late final _duk_config_buffer = + _duk_config_bufferPtr + .asFunction< + void Function( + ffi.Pointer, + int, + ffi.Pointer, + int, + ) + >(); /// Property access /// @@ -3544,41 +3249,39 @@ class DuktapeBindings { /// The _index variant takes an array index as a property name (e.g. 123 is /// equivalent to the key "123"). The _heapptr variant takes a raw, borrowed /// heap pointer. - int duk_get_prop( - ffi.Pointer ctx, - int obj_idx, - ) { - return _duk_get_prop( - ctx, - obj_idx, - ); + int duk_get_prop(ffi.Pointer ctx, int obj_idx) { + return _duk_get_prop(ctx, obj_idx); } late final _duk_get_propPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function( - ffi.Pointer, duk_idx_t)>>('duk_get_prop'); - late final _duk_get_prop = _duk_get_propPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_get_prop'); + late final _duk_get_prop = + _duk_get_propPtr + .asFunction, int)>(); int duk_get_prop_string( ffi.Pointer ctx, int obj_idx, ffi.Pointer key, ) { - return _duk_get_prop_string( - ctx, - obj_idx, - key, - ); + return _duk_get_prop_string(ctx, obj_idx, key); } late final _duk_get_prop_stringPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function(ffi.Pointer, duk_idx_t, - ffi.Pointer)>>('duk_get_prop_string'); - late final _duk_get_prop_string = _duk_get_prop_stringPtr.asFunction< - int Function(ffi.Pointer, int, ffi.Pointer)>(); + ffi.NativeFunction< + duk_bool_t Function( + ffi.Pointer, + duk_idx_t, + ffi.Pointer, + ) + > + >('duk_get_prop_string'); + late final _duk_get_prop_string = + _duk_get_prop_stringPtr + .asFunction< + int Function(ffi.Pointer, int, ffi.Pointer) + >(); int duk_get_prop_lstring( ffi.Pointer ctx, @@ -3586,21 +3289,29 @@ class DuktapeBindings { ffi.Pointer key, int key_len, ) { - return _duk_get_prop_lstring( - ctx, - obj_idx, - key, - key_len, - ); + return _duk_get_prop_lstring(ctx, obj_idx, key, key_len); } late final _duk_get_prop_lstringPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function(ffi.Pointer, duk_idx_t, - ffi.Pointer, duk_size_t)>>('duk_get_prop_lstring'); - late final _duk_get_prop_lstring = _duk_get_prop_lstringPtr.asFunction< - int Function( - ffi.Pointer, int, ffi.Pointer, int)>(); + ffi.NativeFunction< + duk_bool_t Function( + ffi.Pointer, + duk_idx_t, + ffi.Pointer, + duk_size_t, + ) + > + >('duk_get_prop_lstring'); + late final _duk_get_prop_lstring = + _duk_get_prop_lstringPtr + .asFunction< + int Function( + ffi.Pointer, + int, + ffi.Pointer, + int, + ) + >(); int duk_get_prop_literal_raw( ffi.Pointer ctx, @@ -3608,96 +3319,103 @@ class DuktapeBindings { ffi.Pointer key, int key_len, ) { - return _duk_get_prop_literal_raw( - ctx, - obj_idx, - key, - key_len, - ); + return _duk_get_prop_literal_raw(ctx, obj_idx, key, key_len); } late final _duk_get_prop_literal_rawPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function(ffi.Pointer, duk_idx_t, - ffi.Pointer, duk_size_t)>>('duk_get_prop_literal_raw'); + ffi.NativeFunction< + duk_bool_t Function( + ffi.Pointer, + duk_idx_t, + ffi.Pointer, + duk_size_t, + ) + > + >('duk_get_prop_literal_raw'); late final _duk_get_prop_literal_raw = - _duk_get_prop_literal_rawPtr.asFunction< - int Function( - ffi.Pointer, int, ffi.Pointer, int)>(); + _duk_get_prop_literal_rawPtr + .asFunction< + int Function( + ffi.Pointer, + int, + ffi.Pointer, + int, + ) + >(); int duk_get_prop_index( ffi.Pointer ctx, int obj_idx, int arr_idx, ) { - return _duk_get_prop_index( - ctx, - obj_idx, - arr_idx, - ); + return _duk_get_prop_index(ctx, obj_idx, arr_idx); } late final _duk_get_prop_indexPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function(ffi.Pointer, duk_idx_t, - duk_uarridx_t)>>('duk_get_prop_index'); - late final _duk_get_prop_index = _duk_get_prop_indexPtr - .asFunction, int, int)>(); + ffi.NativeFunction< + duk_bool_t Function(ffi.Pointer, duk_idx_t, duk_uarridx_t) + > + >('duk_get_prop_index'); + late final _duk_get_prop_index = + _duk_get_prop_indexPtr + .asFunction, int, int)>(); int duk_get_prop_heapptr( ffi.Pointer ctx, int obj_idx, ffi.Pointer ptr, ) { - return _duk_get_prop_heapptr( - ctx, - obj_idx, - ptr, - ); + return _duk_get_prop_heapptr(ctx, obj_idx, ptr); } late final _duk_get_prop_heapptrPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function(ffi.Pointer, duk_idx_t, - ffi.Pointer)>>('duk_get_prop_heapptr'); - late final _duk_get_prop_heapptr = _duk_get_prop_heapptrPtr.asFunction< - int Function(ffi.Pointer, int, ffi.Pointer)>(); - - int duk_put_prop( - ffi.Pointer ctx, - int obj_idx, - ) { - return _duk_put_prop( - ctx, - obj_idx, - ); + ffi.NativeFunction< + duk_bool_t Function( + ffi.Pointer, + duk_idx_t, + ffi.Pointer, + ) + > + >('duk_get_prop_heapptr'); + late final _duk_get_prop_heapptr = + _duk_get_prop_heapptrPtr + .asFunction< + int Function(ffi.Pointer, int, ffi.Pointer) + >(); + + int duk_put_prop(ffi.Pointer ctx, int obj_idx) { + return _duk_put_prop(ctx, obj_idx); } late final _duk_put_propPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function( - ffi.Pointer, duk_idx_t)>>('duk_put_prop'); - late final _duk_put_prop = _duk_put_propPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_put_prop'); + late final _duk_put_prop = + _duk_put_propPtr + .asFunction, int)>(); int duk_put_prop_string( ffi.Pointer ctx, int obj_idx, ffi.Pointer key, ) { - return _duk_put_prop_string( - ctx, - obj_idx, - key, - ); + return _duk_put_prop_string(ctx, obj_idx, key); } late final _duk_put_prop_stringPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function(ffi.Pointer, duk_idx_t, - ffi.Pointer)>>('duk_put_prop_string'); - late final _duk_put_prop_string = _duk_put_prop_stringPtr.asFunction< - int Function(ffi.Pointer, int, ffi.Pointer)>(); + ffi.NativeFunction< + duk_bool_t Function( + ffi.Pointer, + duk_idx_t, + ffi.Pointer, + ) + > + >('duk_put_prop_string'); + late final _duk_put_prop_string = + _duk_put_prop_stringPtr + .asFunction< + int Function(ffi.Pointer, int, ffi.Pointer) + >(); int duk_put_prop_lstring( ffi.Pointer ctx, @@ -3705,21 +3423,29 @@ class DuktapeBindings { ffi.Pointer key, int key_len, ) { - return _duk_put_prop_lstring( - ctx, - obj_idx, - key, - key_len, - ); + return _duk_put_prop_lstring(ctx, obj_idx, key, key_len); } late final _duk_put_prop_lstringPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function(ffi.Pointer, duk_idx_t, - ffi.Pointer, duk_size_t)>>('duk_put_prop_lstring'); - late final _duk_put_prop_lstring = _duk_put_prop_lstringPtr.asFunction< - int Function( - ffi.Pointer, int, ffi.Pointer, int)>(); + ffi.NativeFunction< + duk_bool_t Function( + ffi.Pointer, + duk_idx_t, + ffi.Pointer, + duk_size_t, + ) + > + >('duk_put_prop_lstring'); + late final _duk_put_prop_lstring = + _duk_put_prop_lstringPtr + .asFunction< + int Function( + ffi.Pointer, + int, + ffi.Pointer, + int, + ) + >(); int duk_put_prop_literal_raw( ffi.Pointer ctx, @@ -3727,96 +3453,103 @@ class DuktapeBindings { ffi.Pointer key, int key_len, ) { - return _duk_put_prop_literal_raw( - ctx, - obj_idx, - key, - key_len, - ); + return _duk_put_prop_literal_raw(ctx, obj_idx, key, key_len); } late final _duk_put_prop_literal_rawPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function(ffi.Pointer, duk_idx_t, - ffi.Pointer, duk_size_t)>>('duk_put_prop_literal_raw'); + ffi.NativeFunction< + duk_bool_t Function( + ffi.Pointer, + duk_idx_t, + ffi.Pointer, + duk_size_t, + ) + > + >('duk_put_prop_literal_raw'); late final _duk_put_prop_literal_raw = - _duk_put_prop_literal_rawPtr.asFunction< - int Function( - ffi.Pointer, int, ffi.Pointer, int)>(); + _duk_put_prop_literal_rawPtr + .asFunction< + int Function( + ffi.Pointer, + int, + ffi.Pointer, + int, + ) + >(); int duk_put_prop_index( ffi.Pointer ctx, int obj_idx, int arr_idx, ) { - return _duk_put_prop_index( - ctx, - obj_idx, - arr_idx, - ); + return _duk_put_prop_index(ctx, obj_idx, arr_idx); } late final _duk_put_prop_indexPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function(ffi.Pointer, duk_idx_t, - duk_uarridx_t)>>('duk_put_prop_index'); - late final _duk_put_prop_index = _duk_put_prop_indexPtr - .asFunction, int, int)>(); + ffi.NativeFunction< + duk_bool_t Function(ffi.Pointer, duk_idx_t, duk_uarridx_t) + > + >('duk_put_prop_index'); + late final _duk_put_prop_index = + _duk_put_prop_indexPtr + .asFunction, int, int)>(); int duk_put_prop_heapptr( ffi.Pointer ctx, int obj_idx, ffi.Pointer ptr, ) { - return _duk_put_prop_heapptr( - ctx, - obj_idx, - ptr, - ); + return _duk_put_prop_heapptr(ctx, obj_idx, ptr); } late final _duk_put_prop_heapptrPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function(ffi.Pointer, duk_idx_t, - ffi.Pointer)>>('duk_put_prop_heapptr'); - late final _duk_put_prop_heapptr = _duk_put_prop_heapptrPtr.asFunction< - int Function(ffi.Pointer, int, ffi.Pointer)>(); - - int duk_del_prop( - ffi.Pointer ctx, - int obj_idx, - ) { - return _duk_del_prop( - ctx, - obj_idx, - ); + ffi.NativeFunction< + duk_bool_t Function( + ffi.Pointer, + duk_idx_t, + ffi.Pointer, + ) + > + >('duk_put_prop_heapptr'); + late final _duk_put_prop_heapptr = + _duk_put_prop_heapptrPtr + .asFunction< + int Function(ffi.Pointer, int, ffi.Pointer) + >(); + + int duk_del_prop(ffi.Pointer ctx, int obj_idx) { + return _duk_del_prop(ctx, obj_idx); } late final _duk_del_propPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function( - ffi.Pointer, duk_idx_t)>>('duk_del_prop'); - late final _duk_del_prop = _duk_del_propPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_del_prop'); + late final _duk_del_prop = + _duk_del_propPtr + .asFunction, int)>(); int duk_del_prop_string( ffi.Pointer ctx, int obj_idx, ffi.Pointer key, ) { - return _duk_del_prop_string( - ctx, - obj_idx, - key, - ); + return _duk_del_prop_string(ctx, obj_idx, key); } late final _duk_del_prop_stringPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function(ffi.Pointer, duk_idx_t, - ffi.Pointer)>>('duk_del_prop_string'); - late final _duk_del_prop_string = _duk_del_prop_stringPtr.asFunction< - int Function(ffi.Pointer, int, ffi.Pointer)>(); + ffi.NativeFunction< + duk_bool_t Function( + ffi.Pointer, + duk_idx_t, + ffi.Pointer, + ) + > + >('duk_del_prop_string'); + late final _duk_del_prop_string = + _duk_del_prop_stringPtr + .asFunction< + int Function(ffi.Pointer, int, ffi.Pointer) + >(); int duk_del_prop_lstring( ffi.Pointer ctx, @@ -3824,21 +3557,29 @@ class DuktapeBindings { ffi.Pointer key, int key_len, ) { - return _duk_del_prop_lstring( - ctx, - obj_idx, - key, - key_len, - ); + return _duk_del_prop_lstring(ctx, obj_idx, key, key_len); } late final _duk_del_prop_lstringPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function(ffi.Pointer, duk_idx_t, - ffi.Pointer, duk_size_t)>>('duk_del_prop_lstring'); - late final _duk_del_prop_lstring = _duk_del_prop_lstringPtr.asFunction< - int Function( - ffi.Pointer, int, ffi.Pointer, int)>(); + ffi.NativeFunction< + duk_bool_t Function( + ffi.Pointer, + duk_idx_t, + ffi.Pointer, + duk_size_t, + ) + > + >('duk_del_prop_lstring'); + late final _duk_del_prop_lstring = + _duk_del_prop_lstringPtr + .asFunction< + int Function( + ffi.Pointer, + int, + ffi.Pointer, + int, + ) + >(); int duk_del_prop_literal_raw( ffi.Pointer ctx, @@ -3846,96 +3587,103 @@ class DuktapeBindings { ffi.Pointer key, int key_len, ) { - return _duk_del_prop_literal_raw( - ctx, - obj_idx, - key, - key_len, - ); + return _duk_del_prop_literal_raw(ctx, obj_idx, key, key_len); } late final _duk_del_prop_literal_rawPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function(ffi.Pointer, duk_idx_t, - ffi.Pointer, duk_size_t)>>('duk_del_prop_literal_raw'); + ffi.NativeFunction< + duk_bool_t Function( + ffi.Pointer, + duk_idx_t, + ffi.Pointer, + duk_size_t, + ) + > + >('duk_del_prop_literal_raw'); late final _duk_del_prop_literal_raw = - _duk_del_prop_literal_rawPtr.asFunction< - int Function( - ffi.Pointer, int, ffi.Pointer, int)>(); + _duk_del_prop_literal_rawPtr + .asFunction< + int Function( + ffi.Pointer, + int, + ffi.Pointer, + int, + ) + >(); int duk_del_prop_index( ffi.Pointer ctx, int obj_idx, int arr_idx, ) { - return _duk_del_prop_index( - ctx, - obj_idx, - arr_idx, - ); + return _duk_del_prop_index(ctx, obj_idx, arr_idx); } late final _duk_del_prop_indexPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function(ffi.Pointer, duk_idx_t, - duk_uarridx_t)>>('duk_del_prop_index'); - late final _duk_del_prop_index = _duk_del_prop_indexPtr - .asFunction, int, int)>(); + ffi.NativeFunction< + duk_bool_t Function(ffi.Pointer, duk_idx_t, duk_uarridx_t) + > + >('duk_del_prop_index'); + late final _duk_del_prop_index = + _duk_del_prop_indexPtr + .asFunction, int, int)>(); int duk_del_prop_heapptr( ffi.Pointer ctx, int obj_idx, ffi.Pointer ptr, ) { - return _duk_del_prop_heapptr( - ctx, - obj_idx, - ptr, - ); + return _duk_del_prop_heapptr(ctx, obj_idx, ptr); } late final _duk_del_prop_heapptrPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function(ffi.Pointer, duk_idx_t, - ffi.Pointer)>>('duk_del_prop_heapptr'); - late final _duk_del_prop_heapptr = _duk_del_prop_heapptrPtr.asFunction< - int Function(ffi.Pointer, int, ffi.Pointer)>(); - - int duk_has_prop( - ffi.Pointer ctx, - int obj_idx, - ) { - return _duk_has_prop( - ctx, - obj_idx, - ); + ffi.NativeFunction< + duk_bool_t Function( + ffi.Pointer, + duk_idx_t, + ffi.Pointer, + ) + > + >('duk_del_prop_heapptr'); + late final _duk_del_prop_heapptr = + _duk_del_prop_heapptrPtr + .asFunction< + int Function(ffi.Pointer, int, ffi.Pointer) + >(); + + int duk_has_prop(ffi.Pointer ctx, int obj_idx) { + return _duk_has_prop(ctx, obj_idx); } late final _duk_has_propPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function( - ffi.Pointer, duk_idx_t)>>('duk_has_prop'); - late final _duk_has_prop = _duk_has_propPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_has_prop'); + late final _duk_has_prop = + _duk_has_propPtr + .asFunction, int)>(); int duk_has_prop_string( ffi.Pointer ctx, int obj_idx, ffi.Pointer key, ) { - return _duk_has_prop_string( - ctx, - obj_idx, - key, - ); + return _duk_has_prop_string(ctx, obj_idx, key); } late final _duk_has_prop_stringPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function(ffi.Pointer, duk_idx_t, - ffi.Pointer)>>('duk_has_prop_string'); - late final _duk_has_prop_string = _duk_has_prop_stringPtr.asFunction< - int Function(ffi.Pointer, int, ffi.Pointer)>(); + ffi.NativeFunction< + duk_bool_t Function( + ffi.Pointer, + duk_idx_t, + ffi.Pointer, + ) + > + >('duk_has_prop_string'); + late final _duk_has_prop_string = + _duk_has_prop_stringPtr + .asFunction< + int Function(ffi.Pointer, int, ffi.Pointer) + >(); int duk_has_prop_lstring( ffi.Pointer ctx, @@ -3943,21 +3691,29 @@ class DuktapeBindings { ffi.Pointer key, int key_len, ) { - return _duk_has_prop_lstring( - ctx, - obj_idx, - key, - key_len, - ); + return _duk_has_prop_lstring(ctx, obj_idx, key, key_len); } late final _duk_has_prop_lstringPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function(ffi.Pointer, duk_idx_t, - ffi.Pointer, duk_size_t)>>('duk_has_prop_lstring'); - late final _duk_has_prop_lstring = _duk_has_prop_lstringPtr.asFunction< - int Function( - ffi.Pointer, int, ffi.Pointer, int)>(); + ffi.NativeFunction< + duk_bool_t Function( + ffi.Pointer, + duk_idx_t, + ffi.Pointer, + duk_size_t, + ) + > + >('duk_has_prop_lstring'); + late final _duk_has_prop_lstring = + _duk_has_prop_lstringPtr + .asFunction< + int Function( + ffi.Pointer, + int, + ffi.Pointer, + int, + ) + >(); int duk_has_prop_literal_raw( ffi.Pointer ctx, @@ -3965,415 +3721,378 @@ class DuktapeBindings { ffi.Pointer key, int key_len, ) { - return _duk_has_prop_literal_raw( - ctx, - obj_idx, - key, - key_len, - ); + return _duk_has_prop_literal_raw(ctx, obj_idx, key, key_len); } late final _duk_has_prop_literal_rawPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function(ffi.Pointer, duk_idx_t, - ffi.Pointer, duk_size_t)>>('duk_has_prop_literal_raw'); + ffi.NativeFunction< + duk_bool_t Function( + ffi.Pointer, + duk_idx_t, + ffi.Pointer, + duk_size_t, + ) + > + >('duk_has_prop_literal_raw'); late final _duk_has_prop_literal_raw = - _duk_has_prop_literal_rawPtr.asFunction< - int Function( - ffi.Pointer, int, ffi.Pointer, int)>(); + _duk_has_prop_literal_rawPtr + .asFunction< + int Function( + ffi.Pointer, + int, + ffi.Pointer, + int, + ) + >(); int duk_has_prop_index( ffi.Pointer ctx, int obj_idx, int arr_idx, ) { - return _duk_has_prop_index( - ctx, - obj_idx, - arr_idx, - ); + return _duk_has_prop_index(ctx, obj_idx, arr_idx); } late final _duk_has_prop_indexPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function(ffi.Pointer, duk_idx_t, - duk_uarridx_t)>>('duk_has_prop_index'); - late final _duk_has_prop_index = _duk_has_prop_indexPtr - .asFunction, int, int)>(); + ffi.NativeFunction< + duk_bool_t Function(ffi.Pointer, duk_idx_t, duk_uarridx_t) + > + >('duk_has_prop_index'); + late final _duk_has_prop_index = + _duk_has_prop_indexPtr + .asFunction, int, int)>(); int duk_has_prop_heapptr( ffi.Pointer ctx, int obj_idx, ffi.Pointer ptr, ) { - return _duk_has_prop_heapptr( - ctx, - obj_idx, - ptr, - ); + return _duk_has_prop_heapptr(ctx, obj_idx, ptr); } late final _duk_has_prop_heapptrPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function(ffi.Pointer, duk_idx_t, - ffi.Pointer)>>('duk_has_prop_heapptr'); - late final _duk_has_prop_heapptr = _duk_has_prop_heapptrPtr.asFunction< - int Function(ffi.Pointer, int, ffi.Pointer)>(); - - void duk_get_prop_desc( - ffi.Pointer ctx, - int obj_idx, - int flags, - ) { - return _duk_get_prop_desc( - ctx, - obj_idx, - flags, - ); + ffi.NativeFunction< + duk_bool_t Function( + ffi.Pointer, + duk_idx_t, + ffi.Pointer, + ) + > + >('duk_has_prop_heapptr'); + late final _duk_has_prop_heapptr = + _duk_has_prop_heapptrPtr + .asFunction< + int Function(ffi.Pointer, int, ffi.Pointer) + >(); + + void duk_get_prop_desc(ffi.Pointer ctx, int obj_idx, int flags) { + return _duk_get_prop_desc(ctx, obj_idx, flags); } late final _duk_get_prop_descPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function(ffi.Pointer, duk_idx_t, - duk_uint_t)>>('duk_get_prop_desc'); - late final _duk_get_prop_desc = _duk_get_prop_descPtr - .asFunction, int, int)>(); - - void duk_def_prop( - ffi.Pointer ctx, - int obj_idx, - int flags, - ) { - return _duk_def_prop( - ctx, - obj_idx, - flags, - ); + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, duk_idx_t, duk_uint_t) + > + >('duk_get_prop_desc'); + late final _duk_get_prop_desc = + _duk_get_prop_descPtr + .asFunction, int, int)>(); + + void duk_def_prop(ffi.Pointer ctx, int obj_idx, int flags) { + return _duk_def_prop(ctx, obj_idx, flags); } late final _duk_def_propPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function(ffi.Pointer, duk_idx_t, - duk_uint_t)>>('duk_def_prop'); - late final _duk_def_prop = _duk_def_propPtr - .asFunction, int, int)>(); + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, duk_idx_t, duk_uint_t) + > + >('duk_def_prop'); + late final _duk_def_prop = + _duk_def_propPtr + .asFunction, int, int)>(); int duk_get_global_string( ffi.Pointer ctx, ffi.Pointer key, ) { - return _duk_get_global_string( - ctx, - key, - ); + return _duk_get_global_string(ctx, key); } late final _duk_get_global_stringPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function(ffi.Pointer, - ffi.Pointer)>>('duk_get_global_string'); - late final _duk_get_global_string = _duk_get_global_stringPtr.asFunction< - int Function(ffi.Pointer, ffi.Pointer)>(); + ffi.NativeFunction< + duk_bool_t Function(ffi.Pointer, ffi.Pointer) + > + >('duk_get_global_string'); + late final _duk_get_global_string = + _duk_get_global_stringPtr + .asFunction< + int Function(ffi.Pointer, ffi.Pointer) + >(); int duk_get_global_lstring( ffi.Pointer ctx, ffi.Pointer key, int key_len, ) { - return _duk_get_global_lstring( - ctx, - key, - key_len, - ); + return _duk_get_global_lstring(ctx, key, key_len); } late final _duk_get_global_lstringPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function(ffi.Pointer, ffi.Pointer, - duk_size_t)>>('duk_get_global_lstring'); - late final _duk_get_global_lstring = _duk_get_global_lstringPtr.asFunction< - int Function(ffi.Pointer, ffi.Pointer, int)>(); + ffi.NativeFunction< + duk_bool_t Function( + ffi.Pointer, + ffi.Pointer, + duk_size_t, + ) + > + >('duk_get_global_lstring'); + late final _duk_get_global_lstring = + _duk_get_global_lstringPtr + .asFunction< + int Function(ffi.Pointer, ffi.Pointer, int) + >(); int duk_get_global_literal_raw( ffi.Pointer ctx, ffi.Pointer key, int key_len, ) { - return _duk_get_global_literal_raw( - ctx, - key, - key_len, - ); + return _duk_get_global_literal_raw(ctx, key, key_len); } late final _duk_get_global_literal_rawPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function(ffi.Pointer, ffi.Pointer, - duk_size_t)>>('duk_get_global_literal_raw'); + ffi.NativeFunction< + duk_bool_t Function( + ffi.Pointer, + ffi.Pointer, + duk_size_t, + ) + > + >('duk_get_global_literal_raw'); late final _duk_get_global_literal_raw = - _duk_get_global_literal_rawPtr.asFunction< - int Function(ffi.Pointer, ffi.Pointer, int)>(); + _duk_get_global_literal_rawPtr + .asFunction< + int Function(ffi.Pointer, ffi.Pointer, int) + >(); int duk_get_global_heapptr( ffi.Pointer ctx, ffi.Pointer ptr, ) { - return _duk_get_global_heapptr( - ctx, - ptr, - ); + return _duk_get_global_heapptr(ctx, ptr); } late final _duk_get_global_heapptrPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function(ffi.Pointer, - ffi.Pointer)>>('duk_get_global_heapptr'); - late final _duk_get_global_heapptr = _duk_get_global_heapptrPtr.asFunction< - int Function(ffi.Pointer, ffi.Pointer)>(); + ffi.NativeFunction< + duk_bool_t Function(ffi.Pointer, ffi.Pointer) + > + >('duk_get_global_heapptr'); + late final _duk_get_global_heapptr = + _duk_get_global_heapptrPtr + .asFunction< + int Function(ffi.Pointer, ffi.Pointer) + >(); int duk_put_global_string( ffi.Pointer ctx, ffi.Pointer key, ) { - return _duk_put_global_string( - ctx, - key, - ); + return _duk_put_global_string(ctx, key); } late final _duk_put_global_stringPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function(ffi.Pointer, - ffi.Pointer)>>('duk_put_global_string'); - late final _duk_put_global_string = _duk_put_global_stringPtr.asFunction< - int Function(ffi.Pointer, ffi.Pointer)>(); + ffi.NativeFunction< + duk_bool_t Function(ffi.Pointer, ffi.Pointer) + > + >('duk_put_global_string'); + late final _duk_put_global_string = + _duk_put_global_stringPtr + .asFunction< + int Function(ffi.Pointer, ffi.Pointer) + >(); int duk_put_global_lstring( ffi.Pointer ctx, ffi.Pointer key, int key_len, ) { - return _duk_put_global_lstring( - ctx, - key, - key_len, - ); + return _duk_put_global_lstring(ctx, key, key_len); } late final _duk_put_global_lstringPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function(ffi.Pointer, ffi.Pointer, - duk_size_t)>>('duk_put_global_lstring'); - late final _duk_put_global_lstring = _duk_put_global_lstringPtr.asFunction< - int Function(ffi.Pointer, ffi.Pointer, int)>(); + ffi.NativeFunction< + duk_bool_t Function( + ffi.Pointer, + ffi.Pointer, + duk_size_t, + ) + > + >('duk_put_global_lstring'); + late final _duk_put_global_lstring = + _duk_put_global_lstringPtr + .asFunction< + int Function(ffi.Pointer, ffi.Pointer, int) + >(); int duk_put_global_literal_raw( ffi.Pointer ctx, ffi.Pointer key, int key_len, ) { - return _duk_put_global_literal_raw( - ctx, - key, - key_len, - ); + return _duk_put_global_literal_raw(ctx, key, key_len); } late final _duk_put_global_literal_rawPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function(ffi.Pointer, ffi.Pointer, - duk_size_t)>>('duk_put_global_literal_raw'); + ffi.NativeFunction< + duk_bool_t Function( + ffi.Pointer, + ffi.Pointer, + duk_size_t, + ) + > + >('duk_put_global_literal_raw'); late final _duk_put_global_literal_raw = - _duk_put_global_literal_rawPtr.asFunction< - int Function(ffi.Pointer, ffi.Pointer, int)>(); + _duk_put_global_literal_rawPtr + .asFunction< + int Function(ffi.Pointer, ffi.Pointer, int) + >(); int duk_put_global_heapptr( ffi.Pointer ctx, ffi.Pointer ptr, ) { - return _duk_put_global_heapptr( - ctx, - ptr, - ); + return _duk_put_global_heapptr(ctx, ptr); } late final _duk_put_global_heapptrPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function(ffi.Pointer, - ffi.Pointer)>>('duk_put_global_heapptr'); - late final _duk_put_global_heapptr = _duk_put_global_heapptrPtr.asFunction< - int Function(ffi.Pointer, ffi.Pointer)>(); + ffi.NativeFunction< + duk_bool_t Function(ffi.Pointer, ffi.Pointer) + > + >('duk_put_global_heapptr'); + late final _duk_put_global_heapptr = + _duk_put_global_heapptrPtr + .asFunction< + int Function(ffi.Pointer, ffi.Pointer) + >(); /// Inspection - void duk_inspect_value( - ffi.Pointer ctx, - int idx, - ) { - return _duk_inspect_value( - ctx, - idx, - ); + void duk_inspect_value(ffi.Pointer ctx, int idx) { + return _duk_inspect_value(ctx, idx); } late final _duk_inspect_valuePtr = _lookup< - ffi.NativeFunction< - ffi.Void Function( - ffi.Pointer, duk_idx_t)>>('duk_inspect_value'); - late final _duk_inspect_value = _duk_inspect_valuePtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_inspect_value'); + late final _duk_inspect_value = + _duk_inspect_valuePtr + .asFunction, int)>(); - void duk_inspect_callstack_entry( - ffi.Pointer ctx, - int level, - ) { - return _duk_inspect_callstack_entry( - ctx, - level, - ); + void duk_inspect_callstack_entry(ffi.Pointer ctx, int level) { + return _duk_inspect_callstack_entry(ctx, level); } late final _duk_inspect_callstack_entryPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function(ffi.Pointer, - duk_int_t)>>('duk_inspect_callstack_entry'); - late final _duk_inspect_callstack_entry = _duk_inspect_callstack_entryPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_int_t)> + >('duk_inspect_callstack_entry'); + late final _duk_inspect_callstack_entry = + _duk_inspect_callstack_entryPtr + .asFunction, int)>(); /// Object prototype - void duk_get_prototype( - ffi.Pointer ctx, - int idx, - ) { - return _duk_get_prototype( - ctx, - idx, - ); + void duk_get_prototype(ffi.Pointer ctx, int idx) { + return _duk_get_prototype(ctx, idx); } late final _duk_get_prototypePtr = _lookup< - ffi.NativeFunction< - ffi.Void Function( - ffi.Pointer, duk_idx_t)>>('duk_get_prototype'); - late final _duk_get_prototype = _duk_get_prototypePtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_get_prototype'); + late final _duk_get_prototype = + _duk_get_prototypePtr + .asFunction, int)>(); - void duk_set_prototype( - ffi.Pointer ctx, - int idx, - ) { - return _duk_set_prototype( - ctx, - idx, - ); + void duk_set_prototype(ffi.Pointer ctx, int idx) { + return _duk_set_prototype(ctx, idx); } late final _duk_set_prototypePtr = _lookup< - ffi.NativeFunction< - ffi.Void Function( - ffi.Pointer, duk_idx_t)>>('duk_set_prototype'); - late final _duk_set_prototype = _duk_set_prototypePtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_set_prototype'); + late final _duk_set_prototype = + _duk_set_prototypePtr + .asFunction, int)>(); /// Object finalizer - void duk_get_finalizer( - ffi.Pointer ctx, - int idx, - ) { - return _duk_get_finalizer( - ctx, - idx, - ); + void duk_get_finalizer(ffi.Pointer ctx, int idx) { + return _duk_get_finalizer(ctx, idx); } late final _duk_get_finalizerPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function( - ffi.Pointer, duk_idx_t)>>('duk_get_finalizer'); - late final _duk_get_finalizer = _duk_get_finalizerPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_get_finalizer'); + late final _duk_get_finalizer = + _duk_get_finalizerPtr + .asFunction, int)>(); - void duk_set_finalizer( - ffi.Pointer ctx, - int idx, - ) { - return _duk_set_finalizer( - ctx, - idx, - ); + void duk_set_finalizer(ffi.Pointer ctx, int idx) { + return _duk_set_finalizer(ctx, idx); } late final _duk_set_finalizerPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function( - ffi.Pointer, duk_idx_t)>>('duk_set_finalizer'); - late final _duk_set_finalizer = _duk_set_finalizerPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_set_finalizer'); + late final _duk_set_finalizer = + _duk_set_finalizerPtr + .asFunction, int)>(); /// Global object - void duk_set_global_object( - ffi.Pointer ctx, - ) { - return _duk_set_global_object( - ctx, - ); + void duk_set_global_object(ffi.Pointer ctx) { + return _duk_set_global_object(ctx); } late final _duk_set_global_objectPtr = _lookup)>>( - 'duk_set_global_object'); - late final _duk_set_global_object = _duk_set_global_objectPtr - .asFunction)>(); + 'duk_set_global_object', + ); + late final _duk_set_global_object = + _duk_set_global_objectPtr + .asFunction)>(); /// Duktape/C function magic value - int duk_get_magic( - ffi.Pointer ctx, - int idx, - ) { - return _duk_get_magic( - ctx, - idx, - ); + int duk_get_magic(ffi.Pointer ctx, int idx) { + return _duk_get_magic(ctx, idx); } late final _duk_get_magicPtr = _lookup< - ffi.NativeFunction< - duk_int_t Function( - ffi.Pointer, duk_idx_t)>>('duk_get_magic'); - late final _duk_get_magic = _duk_get_magicPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_get_magic'); + late final _duk_get_magic = + _duk_get_magicPtr + .asFunction, int)>(); - void duk_set_magic( - ffi.Pointer ctx, - int idx, - int magic, - ) { - return _duk_set_magic( - ctx, - idx, - magic, - ); + void duk_set_magic(ffi.Pointer ctx, int idx, int magic) { + return _duk_set_magic(ctx, idx, magic); } late final _duk_set_magicPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function(ffi.Pointer, duk_idx_t, - duk_int_t)>>('duk_set_magic'); - late final _duk_set_magic = _duk_set_magicPtr - .asFunction, int, int)>(); + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, duk_idx_t, duk_int_t) + > + >('duk_set_magic'); + late final _duk_set_magic = + _duk_set_magicPtr + .asFunction, int, int)>(); - int duk_get_current_magic( - ffi.Pointer ctx, - ) { - return _duk_get_current_magic( - ctx, - ); + int duk_get_current_magic(ffi.Pointer ctx) { + return _duk_get_current_magic(ctx); } late final _duk_get_current_magicPtr = _lookup)>>( - 'duk_get_current_magic'); - late final _duk_get_current_magic = _duk_get_current_magicPtr - .asFunction)>(); + 'duk_get_current_magic', + ); + late final _duk_get_current_magic = + _duk_get_current_magicPtr + .asFunction)>(); /// Module helpers: put multiple function or constant properties void duk_put_function_list( @@ -4381,161 +4100,131 @@ class DuktapeBindings { int obj_idx, ffi.Pointer funcs, ) { - return _duk_put_function_list( - ctx, - obj_idx, - funcs, - ); + return _duk_put_function_list(ctx, obj_idx, funcs); } late final _duk_put_function_listPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function(ffi.Pointer, duk_idx_t, - ffi.Pointer)>>('duk_put_function_list'); - late final _duk_put_function_list = _duk_put_function_listPtr.asFunction< - void Function(ffi.Pointer, int, - ffi.Pointer)>(); + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer, + duk_idx_t, + ffi.Pointer, + ) + > + >('duk_put_function_list'); + late final _duk_put_function_list = + _duk_put_function_listPtr + .asFunction< + void Function( + ffi.Pointer, + int, + ffi.Pointer, + ) + >(); void duk_put_number_list( ffi.Pointer ctx, int obj_idx, ffi.Pointer numbers, ) { - return _duk_put_number_list( - ctx, - obj_idx, - numbers, - ); + return _duk_put_number_list(ctx, obj_idx, numbers); } late final _duk_put_number_listPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function(ffi.Pointer, duk_idx_t, - ffi.Pointer)>>('duk_put_number_list'); - late final _duk_put_number_list = _duk_put_number_listPtr.asFunction< - void Function( - ffi.Pointer, int, ffi.Pointer)>(); + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer, + duk_idx_t, + ffi.Pointer, + ) + > + >('duk_put_number_list'); + late final _duk_put_number_list = + _duk_put_number_listPtr + .asFunction< + void Function( + ffi.Pointer, + int, + ffi.Pointer, + ) + >(); /// Object operations - void duk_compact( - ffi.Pointer ctx, - int obj_idx, - ) { - return _duk_compact( - ctx, - obj_idx, - ); + void duk_compact(ffi.Pointer ctx, int obj_idx) { + return _duk_compact(ctx, obj_idx); } late final _duk_compactPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function( - ffi.Pointer, duk_idx_t)>>('duk_compact'); - late final _duk_compact = _duk_compactPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_compact'); + late final _duk_compact = + _duk_compactPtr + .asFunction, int)>(); - void duk_enum( - ffi.Pointer ctx, - int obj_idx, - int enum_flags, - ) { - return _duk_enum( - ctx, - obj_idx, - enum_flags, - ); + void duk_enum(ffi.Pointer ctx, int obj_idx, int enum_flags) { + return _duk_enum(ctx, obj_idx, enum_flags); } late final _duk_enumPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function( - ffi.Pointer, duk_idx_t, duk_uint_t)>>('duk_enum'); - late final _duk_enum = _duk_enumPtr - .asFunction, int, int)>(); + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, duk_idx_t, duk_uint_t) + > + >('duk_enum'); + late final _duk_enum = + _duk_enumPtr + .asFunction, int, int)>(); - int duk_next( - ffi.Pointer ctx, - int enum_idx, - int get_value, - ) { - return _duk_next( - ctx, - enum_idx, - get_value, - ); + int duk_next(ffi.Pointer ctx, int enum_idx, int get_value) { + return _duk_next(ctx, enum_idx, get_value); } late final _duk_nextPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function( - ffi.Pointer, duk_idx_t, duk_bool_t)>>('duk_next'); - late final _duk_next = _duk_nextPtr - .asFunction, int, int)>(); + ffi.NativeFunction< + duk_bool_t Function(ffi.Pointer, duk_idx_t, duk_bool_t) + > + >('duk_next'); + late final _duk_next = + _duk_nextPtr + .asFunction, int, int)>(); - void duk_seal( - ffi.Pointer ctx, - int obj_idx, - ) { - return _duk_seal( - ctx, - obj_idx, - ); + void duk_seal(ffi.Pointer ctx, int obj_idx) { + return _duk_seal(ctx, obj_idx); } late final _duk_sealPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function(ffi.Pointer, duk_idx_t)>>('duk_seal'); + ffi.NativeFunction, duk_idx_t)> + >('duk_seal'); late final _duk_seal = _duk_sealPtr.asFunction, int)>(); - void duk_freeze( - ffi.Pointer ctx, - int obj_idx, - ) { - return _duk_freeze( - ctx, - obj_idx, - ); + void duk_freeze(ffi.Pointer ctx, int obj_idx) { + return _duk_freeze(ctx, obj_idx); } late final _duk_freezePtr = _lookup< - ffi.NativeFunction< - ffi.Void Function( - ffi.Pointer, duk_idx_t)>>('duk_freeze'); + ffi.NativeFunction, duk_idx_t)> + >('duk_freeze'); late final _duk_freeze = _duk_freezePtr.asFunction, int)>(); /// String manipulation - void duk_concat( - ffi.Pointer ctx, - int count, - ) { - return _duk_concat( - ctx, - count, - ); + void duk_concat(ffi.Pointer ctx, int count) { + return _duk_concat(ctx, count); } late final _duk_concatPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function( - ffi.Pointer, duk_idx_t)>>('duk_concat'); + ffi.NativeFunction, duk_idx_t)> + >('duk_concat'); late final _duk_concat = _duk_concatPtr.asFunction, int)>(); - void duk_join( - ffi.Pointer ctx, - int count, - ) { - return _duk_join( - ctx, - count, - ); + void duk_join(ffi.Pointer ctx, int count) { + return _duk_join(ctx, count); } late final _duk_joinPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function(ffi.Pointer, duk_idx_t)>>('duk_join'); + ffi.NativeFunction, duk_idx_t)> + >('duk_join'); late final _duk_join = _duk_joinPtr.asFunction, int)>(); @@ -4545,24 +4234,29 @@ class DuktapeBindings { duk_decode_char_function callback, ffi.Pointer udata, ) { - return _duk_decode_string( - ctx, - idx, - callback, - udata, - ); + return _duk_decode_string(ctx, idx, callback, udata); } late final _duk_decode_stringPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function( + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer, + duk_idx_t, + duk_decode_char_function, + ffi.Pointer, + ) + > + >('duk_decode_string'); + late final _duk_decode_string = + _duk_decode_stringPtr + .asFunction< + void Function( ffi.Pointer, - duk_idx_t, + int, duk_decode_char_function, - ffi.Pointer)>>('duk_decode_string'); - late final _duk_decode_string = _duk_decode_stringPtr.asFunction< - void Function(ffi.Pointer, int, duk_decode_char_function, - ffi.Pointer)>(); + ffi.Pointer, + ) + >(); void duk_map_string( ffi.Pointer ctx, @@ -4570,21 +4264,29 @@ class DuktapeBindings { duk_map_char_function callback, ffi.Pointer udata, ) { - return _duk_map_string( - ctx, - idx, - callback, - udata, - ); + return _duk_map_string(ctx, idx, callback, udata); } late final _duk_map_stringPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function(ffi.Pointer, duk_idx_t, - duk_map_char_function, ffi.Pointer)>>('duk_map_string'); - late final _duk_map_string = _duk_map_stringPtr.asFunction< - void Function(ffi.Pointer, int, duk_map_char_function, - ffi.Pointer)>(); + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer, + duk_idx_t, + duk_map_char_function, + ffi.Pointer, + ) + > + >('duk_map_string'); + late final _duk_map_string = + _duk_map_stringPtr + .asFunction< + void Function( + ffi.Pointer, + int, + duk_map_char_function, + ffi.Pointer, + ) + >(); void duk_substring( ffi.Pointer ctx, @@ -4592,283 +4294,196 @@ class DuktapeBindings { int start_char_offset, int end_char_offset, ) { - return _duk_substring( - ctx, - idx, - start_char_offset, - end_char_offset, - ); + return _duk_substring(ctx, idx, start_char_offset, end_char_offset); } late final _duk_substringPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function(ffi.Pointer, duk_idx_t, duk_size_t, - duk_size_t)>>('duk_substring'); - late final _duk_substring = _duk_substringPtr - .asFunction, int, int, int)>(); - - void duk_trim( - ffi.Pointer ctx, - int idx, - ) { - return _duk_trim( - ctx, - idx, - ); + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer, + duk_idx_t, + duk_size_t, + duk_size_t, + ) + > + >('duk_substring'); + late final _duk_substring = + _duk_substringPtr + .asFunction, int, int, int)>(); + + void duk_trim(ffi.Pointer ctx, int idx) { + return _duk_trim(ctx, idx); } late final _duk_trimPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function(ffi.Pointer, duk_idx_t)>>('duk_trim'); + ffi.NativeFunction, duk_idx_t)> + >('duk_trim'); late final _duk_trim = _duk_trimPtr.asFunction, int)>(); - int duk_char_code_at( - ffi.Pointer ctx, - int idx, - int char_offset, - ) { - return _duk_char_code_at( - ctx, - idx, - char_offset, - ); + int duk_char_code_at(ffi.Pointer ctx, int idx, int char_offset) { + return _duk_char_code_at(ctx, idx, char_offset); } late final _duk_char_code_atPtr = _lookup< - ffi.NativeFunction< - duk_codepoint_t Function(ffi.Pointer, duk_idx_t, - duk_size_t)>>('duk_char_code_at'); - late final _duk_char_code_at = _duk_char_code_atPtr - .asFunction, int, int)>(); + ffi.NativeFunction< + duk_codepoint_t Function(ffi.Pointer, duk_idx_t, duk_size_t) + > + >('duk_char_code_at'); + late final _duk_char_code_at = + _duk_char_code_atPtr + .asFunction, int, int)>(); /// ECMAScript operators - int duk_equals( - ffi.Pointer ctx, - int idx1, - int idx2, - ) { - return _duk_equals( - ctx, - idx1, - idx2, - ); + int duk_equals(ffi.Pointer ctx, int idx1, int idx2) { + return _duk_equals(ctx, idx1, idx2); } late final _duk_equalsPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function( - ffi.Pointer, duk_idx_t, duk_idx_t)>>('duk_equals'); - late final _duk_equals = _duk_equalsPtr - .asFunction, int, int)>(); + ffi.NativeFunction< + duk_bool_t Function(ffi.Pointer, duk_idx_t, duk_idx_t) + > + >('duk_equals'); + late final _duk_equals = + _duk_equalsPtr + .asFunction, int, int)>(); - int duk_strict_equals( - ffi.Pointer ctx, - int idx1, - int idx2, - ) { - return _duk_strict_equals( - ctx, - idx1, - idx2, - ); + int duk_strict_equals(ffi.Pointer ctx, int idx1, int idx2) { + return _duk_strict_equals(ctx, idx1, idx2); } late final _duk_strict_equalsPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function(ffi.Pointer, duk_idx_t, - duk_idx_t)>>('duk_strict_equals'); - late final _duk_strict_equals = _duk_strict_equalsPtr - .asFunction, int, int)>(); + ffi.NativeFunction< + duk_bool_t Function(ffi.Pointer, duk_idx_t, duk_idx_t) + > + >('duk_strict_equals'); + late final _duk_strict_equals = + _duk_strict_equalsPtr + .asFunction, int, int)>(); - int duk_samevalue( - ffi.Pointer ctx, - int idx1, - int idx2, - ) { - return _duk_samevalue( - ctx, - idx1, - idx2, - ); + int duk_samevalue(ffi.Pointer ctx, int idx1, int idx2) { + return _duk_samevalue(ctx, idx1, idx2); } late final _duk_samevaluePtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function(ffi.Pointer, duk_idx_t, - duk_idx_t)>>('duk_samevalue'); - late final _duk_samevalue = _duk_samevaluePtr - .asFunction, int, int)>(); + ffi.NativeFunction< + duk_bool_t Function(ffi.Pointer, duk_idx_t, duk_idx_t) + > + >('duk_samevalue'); + late final _duk_samevalue = + _duk_samevaluePtr + .asFunction, int, int)>(); - int duk_instanceof( - ffi.Pointer ctx, - int idx1, - int idx2, - ) { - return _duk_instanceof( - ctx, - idx1, - idx2, - ); + int duk_instanceof(ffi.Pointer ctx, int idx1, int idx2) { + return _duk_instanceof(ctx, idx1, idx2); } late final _duk_instanceofPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function(ffi.Pointer, duk_idx_t, - duk_idx_t)>>('duk_instanceof'); - late final _duk_instanceof = _duk_instanceofPtr - .asFunction, int, int)>(); + ffi.NativeFunction< + duk_bool_t Function(ffi.Pointer, duk_idx_t, duk_idx_t) + > + >('duk_instanceof'); + late final _duk_instanceof = + _duk_instanceofPtr + .asFunction, int, int)>(); /// Random - double duk_random( - ffi.Pointer ctx, - ) { - return _duk_random( - ctx, - ); + double duk_random(ffi.Pointer ctx) { + return _duk_random(ctx); } late final _duk_randomPtr = _lookup< - ffi.NativeFunction)>>( - 'duk_random'); + ffi.NativeFunction)> + >('duk_random'); late final _duk_random = _duk_randomPtr.asFunction)>(); /// Function (method) calls - void duk_call( - ffi.Pointer ctx, - int nargs, - ) { - return _duk_call( - ctx, - nargs, - ); + void duk_call(ffi.Pointer ctx, int nargs) { + return _duk_call(ctx, nargs); } late final _duk_callPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function(ffi.Pointer, duk_idx_t)>>('duk_call'); + ffi.NativeFunction, duk_idx_t)> + >('duk_call'); late final _duk_call = _duk_callPtr.asFunction, int)>(); - void duk_call_method( - ffi.Pointer ctx, - int nargs, - ) { - return _duk_call_method( - ctx, - nargs, - ); + void duk_call_method(ffi.Pointer ctx, int nargs) { + return _duk_call_method(ctx, nargs); } late final _duk_call_methodPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function( - ffi.Pointer, duk_idx_t)>>('duk_call_method'); - late final _duk_call_method = _duk_call_methodPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_call_method'); + late final _duk_call_method = + _duk_call_methodPtr + .asFunction, int)>(); - void duk_call_prop( - ffi.Pointer ctx, - int obj_idx, - int nargs, - ) { - return _duk_call_prop( - ctx, - obj_idx, - nargs, - ); + void duk_call_prop(ffi.Pointer ctx, int obj_idx, int nargs) { + return _duk_call_prop(ctx, obj_idx, nargs); } late final _duk_call_propPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function(ffi.Pointer, duk_idx_t, - duk_idx_t)>>('duk_call_prop'); - late final _duk_call_prop = _duk_call_propPtr - .asFunction, int, int)>(); + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, duk_idx_t, duk_idx_t) + > + >('duk_call_prop'); + late final _duk_call_prop = + _duk_call_propPtr + .asFunction, int, int)>(); - int duk_pcall( - ffi.Pointer ctx, - int nargs, - ) { - return _duk_pcall( - ctx, - nargs, - ); + int duk_pcall(ffi.Pointer ctx, int nargs) { + return _duk_pcall(ctx, nargs); } late final _duk_pcallPtr = _lookup< - ffi.NativeFunction< - duk_int_t Function( - ffi.Pointer, duk_idx_t)>>('duk_pcall'); + ffi.NativeFunction, duk_idx_t)> + >('duk_pcall'); late final _duk_pcall = _duk_pcallPtr.asFunction, int)>(); - int duk_pcall_method( - ffi.Pointer ctx, - int nargs, - ) { - return _duk_pcall_method( - ctx, - nargs, - ); + int duk_pcall_method(ffi.Pointer ctx, int nargs) { + return _duk_pcall_method(ctx, nargs); } late final _duk_pcall_methodPtr = _lookup< - ffi.NativeFunction< - duk_int_t Function( - ffi.Pointer, duk_idx_t)>>('duk_pcall_method'); - late final _duk_pcall_method = _duk_pcall_methodPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_pcall_method'); + late final _duk_pcall_method = + _duk_pcall_methodPtr + .asFunction, int)>(); - int duk_pcall_prop( - ffi.Pointer ctx, - int obj_idx, - int nargs, - ) { - return _duk_pcall_prop( - ctx, - obj_idx, - nargs, - ); + int duk_pcall_prop(ffi.Pointer ctx, int obj_idx, int nargs) { + return _duk_pcall_prop(ctx, obj_idx, nargs); } late final _duk_pcall_propPtr = _lookup< - ffi.NativeFunction< - duk_int_t Function(ffi.Pointer, duk_idx_t, - duk_idx_t)>>('duk_pcall_prop'); - late final _duk_pcall_prop = _duk_pcall_propPtr - .asFunction, int, int)>(); + ffi.NativeFunction< + duk_int_t Function(ffi.Pointer, duk_idx_t, duk_idx_t) + > + >('duk_pcall_prop'); + late final _duk_pcall_prop = + _duk_pcall_propPtr + .asFunction, int, int)>(); - void duk_new( - ffi.Pointer ctx, - int nargs, - ) { - return _duk_new( - ctx, - nargs, - ); + void duk_new(ffi.Pointer ctx, int nargs) { + return _duk_new(ctx, nargs); } late final _duk_newPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function(ffi.Pointer, duk_idx_t)>>('duk_new'); + ffi.NativeFunction, duk_idx_t)> + >('duk_new'); late final _duk_new = _duk_newPtr.asFunction, int)>(); - int duk_pnew( - ffi.Pointer ctx, - int nargs, - ) { - return _duk_pnew( - ctx, - nargs, - ); + int duk_pnew(ffi.Pointer ctx, int nargs) { + return _duk_pnew(ctx, nargs); } late final _duk_pnewPtr = _lookup< - ffi.NativeFunction< - duk_int_t Function(ffi.Pointer, duk_idx_t)>>('duk_pnew'); + ffi.NativeFunction, duk_idx_t)> + >('duk_pnew'); late final _duk_pnew = _duk_pnewPtr.asFunction, int)>(); @@ -4879,22 +4494,31 @@ class DuktapeBindings { int nargs, int nrets, ) { - return _duk_safe_call( - ctx, - func, - udata, - nargs, - nrets, - ); + return _duk_safe_call(ctx, func, udata, nargs, nrets); } late final _duk_safe_callPtr = _lookup< - ffi.NativeFunction< - duk_int_t Function(ffi.Pointer, duk_safe_call_function, - ffi.Pointer, duk_idx_t, duk_idx_t)>>('duk_safe_call'); - late final _duk_safe_call = _duk_safe_callPtr.asFunction< - int Function(ffi.Pointer, duk_safe_call_function, - ffi.Pointer, int, int)>(); + ffi.NativeFunction< + duk_int_t Function( + ffi.Pointer, + duk_safe_call_function, + ffi.Pointer, + duk_idx_t, + duk_idx_t, + ) + > + >('duk_safe_call'); + late final _duk_safe_call = + _duk_safe_callPtr + .asFunction< + int Function( + ffi.Pointer, + duk_safe_call_function, + ffi.Pointer, + int, + int, + ) + >(); /// Compilation and evaluation int duk_eval_raw( @@ -4903,21 +4527,29 @@ class DuktapeBindings { int src_length, int flags, ) { - return _duk_eval_raw( - ctx, - src_buffer, - src_length, - flags, - ); + return _duk_eval_raw(ctx, src_buffer, src_length, flags); } late final _duk_eval_rawPtr = _lookup< - ffi.NativeFunction< - duk_int_t Function(ffi.Pointer, ffi.Pointer, - duk_size_t, duk_uint_t)>>('duk_eval_raw'); - late final _duk_eval_raw = _duk_eval_rawPtr.asFunction< - int Function( - ffi.Pointer, ffi.Pointer, int, int)>(); + ffi.NativeFunction< + duk_int_t Function( + ffi.Pointer, + ffi.Pointer, + duk_size_t, + duk_uint_t, + ) + > + >('duk_eval_raw'); + late final _duk_eval_raw = + _duk_eval_rawPtr + .asFunction< + int Function( + ffi.Pointer, + ffi.Pointer, + int, + int, + ) + >(); int duk_compile_raw( ffi.Pointer ctx, @@ -4925,65 +4557,67 @@ class DuktapeBindings { int src_length, int flags, ) { - return _duk_compile_raw( - ctx, - src_buffer, - src_length, - flags, - ); + return _duk_compile_raw(ctx, src_buffer, src_length, flags); } late final _duk_compile_rawPtr = _lookup< - ffi.NativeFunction< - duk_int_t Function(ffi.Pointer, ffi.Pointer, - duk_size_t, duk_uint_t)>>('duk_compile_raw'); - late final _duk_compile_raw = _duk_compile_rawPtr.asFunction< - int Function( - ffi.Pointer, ffi.Pointer, int, int)>(); + ffi.NativeFunction< + duk_int_t Function( + ffi.Pointer, + ffi.Pointer, + duk_size_t, + duk_uint_t, + ) + > + >('duk_compile_raw'); + late final _duk_compile_raw = + _duk_compile_rawPtr + .asFunction< + int Function( + ffi.Pointer, + ffi.Pointer, + int, + int, + ) + >(); /// Bytecode load/dump - void duk_dump_function( - ffi.Pointer ctx, - ) { - return _duk_dump_function( - ctx, - ); + void duk_dump_function(ffi.Pointer ctx) { + return _duk_dump_function(ctx); } late final _duk_dump_functionPtr = _lookup)>>( - 'duk_dump_function'); - late final _duk_dump_function = _duk_dump_functionPtr - .asFunction)>(); + 'duk_dump_function', + ); + late final _duk_dump_function = + _duk_dump_functionPtr + .asFunction)>(); - void duk_load_function( - ffi.Pointer ctx, - ) { - return _duk_load_function( - ctx, - ); + void duk_load_function(ffi.Pointer ctx) { + return _duk_load_function(ctx); } late final _duk_load_functionPtr = _lookup)>>( - 'duk_load_function'); - late final _duk_load_function = _duk_load_functionPtr - .asFunction)>(); + 'duk_load_function', + ); + late final _duk_load_function = + _duk_load_functionPtr + .asFunction)>(); /// Debugging - void duk_push_context_dump( - ffi.Pointer ctx, - ) { - return _duk_push_context_dump( - ctx, - ); + void duk_push_context_dump(ffi.Pointer ctx) { + return _duk_push_context_dump(ctx); } late final _duk_push_context_dumpPtr = _lookup)>>( - 'duk_push_context_dump'); - late final _duk_push_context_dump = _duk_push_context_dumpPtr - .asFunction)>(); + 'duk_push_context_dump', + ); + late final _duk_push_context_dump = + _duk_push_context_dumpPtr + .asFunction)>(); /// Debugger (debug protocol) void duk_debugger_attach( @@ -5011,8 +4645,24 @@ class DuktapeBindings { } late final _duk_debugger_attachPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function( + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer, + duk_debug_read_function, + duk_debug_write_function, + duk_debug_peek_function, + duk_debug_read_flush_function, + duk_debug_write_flush_function, + duk_debug_request_function, + duk_debug_detached_function, + ffi.Pointer, + ) + > + >('duk_debugger_attach'); + late final _duk_debugger_attach = + _duk_debugger_attachPtr + .asFunction< + void Function( ffi.Pointer, duk_debug_read_function, duk_debug_write_function, @@ -5021,90 +4671,65 @@ class DuktapeBindings { duk_debug_write_flush_function, duk_debug_request_function, duk_debug_detached_function, - ffi.Pointer)>>('duk_debugger_attach'); - late final _duk_debugger_attach = _duk_debugger_attachPtr.asFunction< - void Function( - ffi.Pointer, - duk_debug_read_function, - duk_debug_write_function, - duk_debug_peek_function, - duk_debug_read_flush_function, - duk_debug_write_flush_function, - duk_debug_request_function, - duk_debug_detached_function, - ffi.Pointer)>(); - - void duk_debugger_detach( - ffi.Pointer ctx, - ) { - return _duk_debugger_detach( - ctx, - ); + ffi.Pointer, + ) + >(); + + void duk_debugger_detach(ffi.Pointer ctx) { + return _duk_debugger_detach(ctx); } late final _duk_debugger_detachPtr = _lookup)>>( - 'duk_debugger_detach'); - late final _duk_debugger_detach = _duk_debugger_detachPtr - .asFunction)>(); + 'duk_debugger_detach', + ); + late final _duk_debugger_detach = + _duk_debugger_detachPtr + .asFunction)>(); - void duk_debugger_cooperate( - ffi.Pointer ctx, - ) { - return _duk_debugger_cooperate( - ctx, - ); + void duk_debugger_cooperate(ffi.Pointer ctx) { + return _duk_debugger_cooperate(ctx); } late final _duk_debugger_cooperatePtr = _lookup)>>( - 'duk_debugger_cooperate'); - late final _duk_debugger_cooperate = _duk_debugger_cooperatePtr - .asFunction)>(); + 'duk_debugger_cooperate', + ); + late final _duk_debugger_cooperate = + _duk_debugger_cooperatePtr + .asFunction)>(); - int duk_debugger_notify( - ffi.Pointer ctx, - int nvalues, - ) { - return _duk_debugger_notify( - ctx, - nvalues, - ); + int duk_debugger_notify(ffi.Pointer ctx, int nvalues) { + return _duk_debugger_notify(ctx, nvalues); } late final _duk_debugger_notifyPtr = _lookup< - ffi.NativeFunction< - duk_bool_t Function( - ffi.Pointer, duk_idx_t)>>('duk_debugger_notify'); - late final _duk_debugger_notify = _duk_debugger_notifyPtr - .asFunction, int)>(); + ffi.NativeFunction, duk_idx_t)> + >('duk_debugger_notify'); + late final _duk_debugger_notify = + _duk_debugger_notifyPtr + .asFunction, int)>(); - void duk_debugger_pause( - ffi.Pointer ctx, - ) { - return _duk_debugger_pause( - ctx, - ); + void duk_debugger_pause(ffi.Pointer ctx) { + return _duk_debugger_pause(ctx); } late final _duk_debugger_pausePtr = _lookup)>>( - 'duk_debugger_pause'); - late final _duk_debugger_pause = _duk_debugger_pausePtr - .asFunction)>(); + 'duk_debugger_pause', + ); + late final _duk_debugger_pause = + _duk_debugger_pausePtr + .asFunction)>(); /// Time handling - double duk_get_now( - ffi.Pointer ctx, - ) { - return _duk_get_now( - ctx, - ); + double duk_get_now(ffi.Pointer ctx) { + return _duk_get_now(ctx); } late final _duk_get_nowPtr = _lookup< - ffi.NativeFunction)>>( - 'duk_get_now'); + ffi.NativeFunction)> + >('duk_get_now'); late final _duk_get_now = _duk_get_nowPtr.asFunction)>(); @@ -5113,38 +4738,51 @@ class DuktapeBindings { double timeval, ffi.Pointer comp, ) { - return _duk_time_to_components( - ctx, - timeval, - comp, - ); + return _duk_time_to_components(ctx, timeval, comp); } late final _duk_time_to_componentsPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function(ffi.Pointer, duk_double_t, - ffi.Pointer)>>('duk_time_to_components'); - late final _duk_time_to_components = _duk_time_to_componentsPtr.asFunction< - void Function(ffi.Pointer, double, - ffi.Pointer)>(); + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer, + duk_double_t, + ffi.Pointer, + ) + > + >('duk_time_to_components'); + late final _duk_time_to_components = + _duk_time_to_componentsPtr + .asFunction< + void Function( + ffi.Pointer, + double, + ffi.Pointer, + ) + >(); double duk_components_to_time( ffi.Pointer ctx, ffi.Pointer comp, ) { - return _duk_components_to_time( - ctx, - comp, - ); + return _duk_components_to_time(ctx, comp); } late final _duk_components_to_timePtr = _lookup< - ffi.NativeFunction< - duk_double_t Function(ffi.Pointer, - ffi.Pointer)>>('duk_components_to_time'); - late final _duk_components_to_time = _duk_components_to_timePtr.asFunction< - double Function( - ffi.Pointer, ffi.Pointer)>(); + ffi.NativeFunction< + duk_double_t Function( + ffi.Pointer, + ffi.Pointer, + ) + > + >('duk_components_to_time'); + late final _duk_components_to_time = + _duk_components_to_timePtr + .asFunction< + double Function( + ffi.Pointer, + ffi.Pointer, + ) + >(); } /// Public API specific typedefs @@ -5170,30 +4808,42 @@ final class duk_memory_functions extends ffi.Struct { external ffi.Pointer udata; } -typedef duk_alloc_function - = ffi.Pointer>; -typedef duk_alloc_functionFunction = ffi.Pointer Function( - ffi.Pointer udata, duk_size_t size); -typedef Dartduk_alloc_functionFunction = ffi.Pointer Function( - ffi.Pointer udata, Dartduk_size_t size); +typedef duk_alloc_function = + ffi.Pointer>; +typedef duk_alloc_functionFunction = + ffi.Pointer Function( + ffi.Pointer udata, + duk_size_t size, + ); +typedef Dartduk_alloc_functionFunction = + ffi.Pointer Function( + ffi.Pointer udata, + Dartduk_size_t size, + ); /// A few types are assumed to always exist. typedef duk_size_t = ffi.Size; typedef Dartduk_size_t = int; -typedef duk_realloc_function - = ffi.Pointer>; -typedef duk_realloc_functionFunction = ffi.Pointer Function( - ffi.Pointer udata, ffi.Pointer ptr, duk_size_t size); -typedef Dartduk_realloc_functionFunction = ffi.Pointer Function( - ffi.Pointer udata, - ffi.Pointer ptr, - Dartduk_size_t size); -typedef duk_free_function - = ffi.Pointer>; -typedef duk_free_functionFunction = ffi.Void Function( - ffi.Pointer udata, ffi.Pointer ptr); -typedef Dartduk_free_functionFunction = void Function( - ffi.Pointer udata, ffi.Pointer ptr); +typedef duk_realloc_function = + ffi.Pointer>; +typedef duk_realloc_functionFunction = + ffi.Pointer Function( + ffi.Pointer udata, + ffi.Pointer ptr, + duk_size_t size, + ); +typedef Dartduk_realloc_functionFunction = + ffi.Pointer Function( + ffi.Pointer udata, + ffi.Pointer ptr, + Dartduk_size_t size, + ); +typedef duk_free_function = + ffi.Pointer>; +typedef duk_free_functionFunction = + ffi.Void Function(ffi.Pointer udata, ffi.Pointer ptr); +typedef Dartduk_free_functionFunction = + void Function(ffi.Pointer udata, ffi.Pointer ptr); final class duk_function_list_entry extends ffi.Struct { external ffi.Pointer key; @@ -5204,12 +4854,12 @@ final class duk_function_list_entry extends ffi.Struct { external int nargs; } -typedef duk_c_function - = ffi.Pointer>; -typedef duk_c_functionFunction = duk_ret_t Function( - ffi.Pointer ctx); -typedef Dartduk_c_functionFunction = Dartduk_small_int_t Function( - ffi.Pointer ctx); +typedef duk_c_function = + ffi.Pointer>; +typedef duk_c_functionFunction = + duk_ret_t Function(ffi.Pointer ctx); +typedef Dartduk_c_functionFunction = + Dartduk_small_int_t Function(ffi.Pointer ctx); /// Duktape/C function return value, platform int is enough for now to /// represent 0, 1, or negative error code. Must be compatible with @@ -5277,12 +4927,12 @@ final class duk_time_components extends ffi.Struct { external double weekday; } -typedef duk_fatal_function - = ffi.Pointer>; -typedef duk_fatal_functionFunction = ffi.Void Function( - ffi.Pointer udata, ffi.Pointer msg); -typedef Dartduk_fatal_functionFunction = void Function( - ffi.Pointer udata, ffi.Pointer msg); +typedef duk_fatal_function = + ffi.Pointer>; +typedef duk_fatal_functionFunction = + ffi.Void Function(ffi.Pointer udata, ffi.Pointer msg); +typedef Dartduk_fatal_functionFunction = + void Function(ffi.Pointer udata, ffi.Pointer msg); typedef duk_uint_t = ffi.UnsignedInt; typedef Dartduk_uint_t = int; @@ -5306,12 +4956,12 @@ typedef Dartduk_uint16_t = int; /// Array index values, could be exact 32 bits. /// Currently no need for signed duk_arridx_t. typedef duk_uarridx_t = duk_uint_t; -typedef duk_decode_char_function - = ffi.Pointer>; -typedef duk_decode_char_functionFunction = ffi.Void Function( - ffi.Pointer udata, duk_codepoint_t codepoint); -typedef Dartduk_decode_char_functionFunction = void Function( - ffi.Pointer udata, Dartduk_int_t codepoint); +typedef duk_decode_char_function = + ffi.Pointer>; +typedef duk_decode_char_functionFunction = + ffi.Void Function(ffi.Pointer udata, duk_codepoint_t codepoint); +typedef Dartduk_decode_char_functionFunction = + void Function(ffi.Pointer udata, Dartduk_int_t codepoint); /// Codepoint type. Must be 32 bits or more because it is used also for /// internal codepoints. The type is signed because negative codepoints @@ -5320,72 +4970,99 @@ typedef Dartduk_decode_char_functionFunction = void Function( /// ensure duk_uint32_t casts back and forth nicely. Almost everything /// else uses the signed one. typedef duk_codepoint_t = duk_int_t; -typedef duk_map_char_function - = ffi.Pointer>; -typedef duk_map_char_functionFunction = duk_codepoint_t Function( - ffi.Pointer udata, duk_codepoint_t codepoint); -typedef Dartduk_map_char_functionFunction = Dartduk_int_t Function( - ffi.Pointer udata, Dartduk_int_t codepoint); -typedef duk_safe_call_function - = ffi.Pointer>; -typedef duk_safe_call_functionFunction = duk_ret_t Function( - ffi.Pointer ctx, ffi.Pointer udata); -typedef Dartduk_safe_call_functionFunction = Dartduk_small_int_t Function( - ffi.Pointer ctx, ffi.Pointer udata); -typedef duk_debug_read_function - = ffi.Pointer>; -typedef duk_debug_read_functionFunction = duk_size_t Function( - ffi.Pointer udata, - ffi.Pointer buffer, - duk_size_t length); -typedef Dartduk_debug_read_functionFunction = Dartduk_size_t Function( - ffi.Pointer udata, - ffi.Pointer buffer, - Dartduk_size_t length); -typedef duk_debug_write_function - = ffi.Pointer>; -typedef duk_debug_write_functionFunction = duk_size_t Function( - ffi.Pointer udata, - ffi.Pointer buffer, - duk_size_t length); -typedef Dartduk_debug_write_functionFunction = Dartduk_size_t Function( - ffi.Pointer udata, - ffi.Pointer buffer, - Dartduk_size_t length); -typedef duk_debug_peek_function - = ffi.Pointer>; -typedef duk_debug_peek_functionFunction = duk_size_t Function( - ffi.Pointer udata); -typedef Dartduk_debug_peek_functionFunction = Dartduk_size_t Function( - ffi.Pointer udata); -typedef duk_debug_read_flush_function - = ffi.Pointer>; -typedef duk_debug_read_flush_functionFunction = ffi.Void Function( - ffi.Pointer udata); -typedef Dartduk_debug_read_flush_functionFunction = void Function( - ffi.Pointer udata); -typedef duk_debug_write_flush_function - = ffi.Pointer>; -typedef duk_debug_write_flush_functionFunction = ffi.Void Function( - ffi.Pointer udata); -typedef Dartduk_debug_write_flush_functionFunction = void Function( - ffi.Pointer udata); -typedef duk_debug_request_function - = ffi.Pointer>; -typedef duk_debug_request_functionFunction = duk_idx_t Function( - ffi.Pointer ctx, - ffi.Pointer udata, - duk_idx_t nvalues); -typedef Dartduk_debug_request_functionFunction = Dartduk_int_t Function( - ffi.Pointer ctx, - ffi.Pointer udata, - Dartduk_int_t nvalues); -typedef duk_debug_detached_function - = ffi.Pointer>; -typedef duk_debug_detached_functionFunction = ffi.Void Function( - ffi.Pointer ctx, ffi.Pointer udata); -typedef Dartduk_debug_detached_functionFunction = void Function( - ffi.Pointer ctx, ffi.Pointer udata); +typedef duk_map_char_function = + ffi.Pointer>; +typedef duk_map_char_functionFunction = + duk_codepoint_t Function( + ffi.Pointer udata, + duk_codepoint_t codepoint, + ); +typedef Dartduk_map_char_functionFunction = + Dartduk_int_t Function( + ffi.Pointer udata, + Dartduk_int_t codepoint, + ); +typedef duk_safe_call_function = + ffi.Pointer>; +typedef duk_safe_call_functionFunction = + duk_ret_t Function( + ffi.Pointer ctx, + ffi.Pointer udata, + ); +typedef Dartduk_safe_call_functionFunction = + Dartduk_small_int_t Function( + ffi.Pointer ctx, + ffi.Pointer udata, + ); +typedef duk_debug_read_function = + ffi.Pointer>; +typedef duk_debug_read_functionFunction = + duk_size_t Function( + ffi.Pointer udata, + ffi.Pointer buffer, + duk_size_t length, + ); +typedef Dartduk_debug_read_functionFunction = + Dartduk_size_t Function( + ffi.Pointer udata, + ffi.Pointer buffer, + Dartduk_size_t length, + ); +typedef duk_debug_write_function = + ffi.Pointer>; +typedef duk_debug_write_functionFunction = + duk_size_t Function( + ffi.Pointer udata, + ffi.Pointer buffer, + duk_size_t length, + ); +typedef Dartduk_debug_write_functionFunction = + Dartduk_size_t Function( + ffi.Pointer udata, + ffi.Pointer buffer, + Dartduk_size_t length, + ); +typedef duk_debug_peek_function = + ffi.Pointer>; +typedef duk_debug_peek_functionFunction = + duk_size_t Function(ffi.Pointer udata); +typedef Dartduk_debug_peek_functionFunction = + Dartduk_size_t Function(ffi.Pointer udata); +typedef duk_debug_read_flush_function = + ffi.Pointer>; +typedef duk_debug_read_flush_functionFunction = + ffi.Void Function(ffi.Pointer udata); +typedef Dartduk_debug_read_flush_functionFunction = + void Function(ffi.Pointer udata); +typedef duk_debug_write_flush_function = + ffi.Pointer>; +typedef duk_debug_write_flush_functionFunction = + ffi.Void Function(ffi.Pointer udata); +typedef Dartduk_debug_write_flush_functionFunction = + void Function(ffi.Pointer udata); +typedef duk_debug_request_function = + ffi.Pointer>; +typedef duk_debug_request_functionFunction = + duk_idx_t Function( + ffi.Pointer ctx, + ffi.Pointer udata, + duk_idx_t nvalues, + ); +typedef Dartduk_debug_request_functionFunction = + Dartduk_int_t Function( + ffi.Pointer ctx, + ffi.Pointer udata, + Dartduk_int_t nvalues, + ); +typedef duk_debug_detached_function = + ffi.Pointer>; +typedef duk_debug_detached_functionFunction = + ffi.Void Function( + ffi.Pointer ctx, + ffi.Pointer udata, + ); +typedef Dartduk_debug_detached_functionFunction = + void Function(ffi.Pointer ctx, ffi.Pointer udata); const int DUK_VERSION = 20700; diff --git a/ffigen_codelab/step_07/lib/ffigen_app.dart b/ffigen_codelab/step_07/lib/ffigen_app.dart index 22b98dc21a..6e25aaae5b 100644 --- a/ffigen_codelab/step_07/lib/ffigen_app.dart +++ b/ffigen_codelab/step_07/lib/ffigen_app.dart @@ -16,24 +16,32 @@ final DynamicLibrary _dylib = () { if (Platform.isMacOS || Platform.isIOS) { if (Platform.environment.containsKey('FLUTTER_TEST')) { return DynamicLibrary.open( - 'build/macos/Build/Products/Debug/$_libName/$_libName.framework/$_libName'); + 'build/macos/Build/Products/Debug/$_libName/$_libName.framework/$_libName', + ); } return DynamicLibrary.open('$_libName.framework/$_libName'); } if (Platform.isAndroid || Platform.isLinux) { if (Platform.environment.containsKey('FLUTTER_TEST')) { return DynamicLibrary.open( - 'build/linux/x64/debug/bundle/lib/lib$_libName.so'); + 'build/linux/x64/debug/bundle/lib/lib$_libName.so', + ); } return DynamicLibrary.open('lib$_libName.so'); } if (Platform.isWindows) { if (Platform.environment.containsKey('FLUTTER_TEST')) { return switch (Abi.current()) { - Abi.windowsArm64 => DynamicLibrary.open(p.canonicalize( - p.join(r'build\windows\arm64\runner\Debug', '$_libName.dll'))), - Abi.windowsX64 => DynamicLibrary.open(p.canonicalize( - p.join(r'build\windows\x64\runner\Debug', '$_libName.dll'))), + Abi.windowsArm64 => DynamicLibrary.open( + p.canonicalize( + p.join(r'build\windows\arm64\runner\Debug', '$_libName.dll'), + ), + ), + Abi.windowsX64 => DynamicLibrary.open( + p.canonicalize( + p.join(r'build\windows\x64\runner\Debug', '$_libName.dll'), + ), + ), _ => throw 'Unsupported platform', }; } @@ -47,8 +55,13 @@ final DuktapeBindings _bindings = DuktapeBindings(_dylib); class Duktape { Duktape() { - ctx = - _bindings.duk_create_heap(nullptr, nullptr, nullptr, nullptr, nullptr); + ctx = _bindings.duk_create_heap( + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + ); } String evalString(String jsCode) { @@ -58,15 +71,16 @@ class Duktape { var nativeUtf8 = jsCode.toNativeUtf8(); final evalResult = _bindings.duk_eval_raw( - ctx, - nativeUtf8.cast(), - 0, - 0 /*args*/ | - DUK_COMPILE_EVAL | - DUK_COMPILE_SAFE | - DUK_COMPILE_NOSOURCE | - DUK_COMPILE_STRLEN | - DUK_COMPILE_NOFILENAME); + ctx, + nativeUtf8.cast(), + 0, + 0 /*args*/ | + DUK_COMPILE_EVAL | + DUK_COMPILE_SAFE | + DUK_COMPILE_NOSOURCE | + DUK_COMPILE_STRLEN | + DUK_COMPILE_NOFILENAME, + ); ffi.malloc.free(nativeUtf8); if (evalResult != 0) { @@ -79,8 +93,9 @@ class Duktape { String _retrieveTopOfStackAsString() { Pointer outLengthPtr = ffi.calloc(); final errorStrPtr = _bindings.duk_safe_to_lstring(ctx, -1, outLengthPtr); - final returnVal = - errorStrPtr.cast().toDartString(length: outLengthPtr.value); + final returnVal = errorStrPtr.cast().toDartString( + length: outLengthPtr.value, + ); ffi.calloc.free(outLengthPtr); return returnVal; } diff --git a/ffigen_codelab/step_07/lib/ffigen_app_bindings_generated.dart b/ffigen_codelab/step_07/lib/ffigen_app_bindings_generated.dart index 513983bf0c..b91a32288b 100644 --- a/ffigen_codelab/step_07/lib/ffigen_app_bindings_generated.dart +++ b/ffigen_codelab/step_07/lib/ffigen_app_bindings_generated.dart @@ -15,31 +15,24 @@ import 'dart:ffi' as ffi; class FfigenAppBindings { /// Holds the symbol lookup function. final ffi.Pointer Function(String symbolName) - _lookup; + _lookup; /// The symbols are looked up in [dynamicLibrary]. FfigenAppBindings(ffi.DynamicLibrary dynamicLibrary) - : _lookup = dynamicLibrary.lookup; + : _lookup = dynamicLibrary.lookup; /// The symbols are looked up with [lookup]. FfigenAppBindings.fromLookup( - ffi.Pointer Function(String symbolName) - lookup) - : _lookup = lookup; + ffi.Pointer Function(String symbolName) lookup, + ) : _lookup = lookup; /// A very short-lived native function. /// /// For very short-lived functions, it is fine to call them on the main isolate. /// They will block the Dart execution while running the native function, so /// only do this for native functions which are guaranteed to be short-lived. - int sum( - int a, - int b, - ) { - return _sum( - a, - b, - ); + int sum(int a, int b) { + return _sum(a, b); } late final _sumPtr = @@ -51,19 +44,14 @@ class FfigenAppBindings { /// Do not call these kind of native functions in the main isolate. They will /// block Dart execution. This will cause dropped frames in Flutter applications. /// Instead, call these native functions on a separate isolate. - int sum_long_running( - int a, - int b, - ) { - return _sum_long_running( - a, - b, - ); + int sum_long_running(int a, int b) { + return _sum_long_running(a, b); } late final _sum_long_runningPtr = _lookup>( - 'sum_long_running'); + 'sum_long_running', + ); late final _sum_long_running = _sum_long_runningPtr.asFunction(); } diff --git a/ffigen_codelab/step_07/pubspec.yaml b/ffigen_codelab/step_07/pubspec.yaml index 9f17f9b402..7814f4b781 100644 --- a/ffigen_codelab/step_07/pubspec.yaml +++ b/ffigen_codelab/step_07/pubspec.yaml @@ -4,7 +4,7 @@ version: 0.0.1 homepage: environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 flutter: '>=3.3.0' dependencies: diff --git a/firebase-auth-flutterfire-ui/complete/lib/auth_gate.dart b/firebase-auth-flutterfire-ui/complete/lib/auth_gate.dart index faba70f572..595865fb8c 100644 --- a/firebase-auth-flutterfire-ui/complete/lib/auth_gate.dart +++ b/firebase-auth-flutterfire-ui/complete/lib/auth_gate.dart @@ -32,9 +32,10 @@ class AuthGate extends StatelessWidget { subtitleBuilder: (context, action) { return Padding( padding: const EdgeInsets.symmetric(vertical: 8.0), - child: action == AuthAction.signIn - ? const Text('Welcome to FlutterFire, please sign in!') - : const Text('Welcome to Flutterfire, please sign up!'), + child: + action == AuthAction.signIn + ? const Text('Welcome to FlutterFire, please sign in!') + : const Text('Welcome to Flutterfire, please sign up!'), ); }, footerBuilder: (context, action) { diff --git a/firebase-auth-flutterfire-ui/complete/lib/firebase_options.dart b/firebase-auth-flutterfire-ui/complete/lib/firebase_options.dart index 78984d73c8..add28296ca 100644 --- a/firebase-auth-flutterfire-ui/complete/lib/firebase_options.dart +++ b/firebase-auth-flutterfire-ui/complete/lib/firebase_options.dart @@ -29,7 +29,8 @@ class DefaultFirebaseOptions { return macos; default: throw UnsupportedError( - 'DefaultFirebaseOptions are not supported for this platform.'); + 'DefaultFirebaseOptions are not supported for this platform.', + ); } } diff --git a/firebase-auth-flutterfire-ui/complete/lib/home.dart b/firebase-auth-flutterfire-ui/complete/lib/home.dart index c41101b04e..fe97eb9158 100644 --- a/firebase-auth-flutterfire-ui/complete/lib/home.dart +++ b/firebase-auth-flutterfire-ui/complete/lib/home.dart @@ -15,30 +15,29 @@ class HomeScreen extends StatelessWidget { Navigator.push( context, MaterialPageRoute( - builder: (context) => ProfileScreen( - appBar: AppBar( - title: const Text('User Profile'), - ), - actions: [ - SignedOutAction((context) { - Navigator.of(context).pop(); - }) - ], - children: [ - const Divider(), - Padding( - padding: const EdgeInsets.all(2), - child: AspectRatio( - aspectRatio: 1, - child: Image.asset('flutterfire_300x.png'), - ), + builder: + (context) => ProfileScreen( + appBar: AppBar(title: const Text('User Profile')), + actions: [ + SignedOutAction((context) { + Navigator.of(context).pop(); + }), + ], + children: [ + const Divider(), + Padding( + padding: const EdgeInsets.all(2), + child: AspectRatio( + aspectRatio: 1, + child: Image.asset('flutterfire_300x.png'), + ), + ), + ], ), - ], - ), ), ); }, - ) + ), ], automaticallyImplyLeading: false, ), @@ -46,10 +45,7 @@ class HomeScreen extends StatelessWidget { child: Column( children: [ Image.asset('dash.png'), - Text( - 'Welcome!', - style: Theme.of(context).textTheme.displaySmall, - ), + Text('Welcome!', style: Theme.of(context).textTheme.displaySmall), const SignOutButton(), ], ), diff --git a/firebase-auth-flutterfire-ui/complete/lib/main.dart b/firebase-auth-flutterfire-ui/complete/lib/main.dart index 0c019a7906..a9a99d8ad4 100644 --- a/firebase-auth-flutterfire-ui/complete/lib/main.dart +++ b/firebase-auth-flutterfire-ui/complete/lib/main.dart @@ -9,9 +9,7 @@ const clientId = 'YOUR_CLIENT_ID'; void main() async { WidgetsFlutterBinding.ensureInitialized(); - await Firebase.initializeApp( - options: DefaultFirebaseOptions.currentPlatform, - ); + await Firebase.initializeApp(options: DefaultFirebaseOptions.currentPlatform); runApp(const MyApp()); } diff --git a/firebase-auth-flutterfire-ui/complete/pubspec.yaml b/firebase-auth-flutterfire-ui/complete/pubspec.yaml index 33900b1ca6..7244dceddd 100644 --- a/firebase-auth-flutterfire-ui/complete/pubspec.yaml +++ b/firebase-auth-flutterfire-ui/complete/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: 'none' version: 0.1.0 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 dependencies: flutter: diff --git a/firebase-auth-flutterfire-ui/start/lib/firebase_options.dart b/firebase-auth-flutterfire-ui/start/lib/firebase_options.dart index 78984d73c8..add28296ca 100644 --- a/firebase-auth-flutterfire-ui/start/lib/firebase_options.dart +++ b/firebase-auth-flutterfire-ui/start/lib/firebase_options.dart @@ -29,7 +29,8 @@ class DefaultFirebaseOptions { return macos; default: throw UnsupportedError( - 'DefaultFirebaseOptions are not supported for this platform.'); + 'DefaultFirebaseOptions are not supported for this platform.', + ); } } diff --git a/firebase-auth-flutterfire-ui/start/lib/home.dart b/firebase-auth-flutterfire-ui/start/lib/home.dart index a42b48244e..a8d492ff23 100644 --- a/firebase-auth-flutterfire-ui/start/lib/home.dart +++ b/firebase-auth-flutterfire-ui/start/lib/home.dart @@ -6,17 +6,12 @@ class HomeScreen extends StatelessWidget { @override Widget build(BuildContext context) { return Scaffold( - appBar: AppBar( - automaticallyImplyLeading: false, - ), + appBar: AppBar(automaticallyImplyLeading: false), body: Center( child: Column( children: [ Image.asset('dash.png'), - Text( - 'Welcome!', - style: Theme.of(context).textTheme.displaySmall, - ), + Text('Welcome!', style: Theme.of(context).textTheme.displaySmall), ], ), ), diff --git a/firebase-auth-flutterfire-ui/start/pubspec.yaml b/firebase-auth-flutterfire-ui/start/pubspec.yaml index 5b575a71bc..2eb02d8d7b 100644 --- a/firebase-auth-flutterfire-ui/start/pubspec.yaml +++ b/firebase-auth-flutterfire-ui/start/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: 'none' version: 0.1.0 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 dependencies: flutter: diff --git a/firebase-emulator-suite/complete/lib/app_state.dart b/firebase-emulator-suite/complete/lib/app_state.dart index 6ce7858482..913dc04cfe 100644 --- a/firebase-emulator-suite/complete/lib/app_state.dart +++ b/firebase-emulator-suite/complete/lib/app_state.dart @@ -7,15 +7,17 @@ import 'entry.dart'; class AppState { AppState() { - _entriesStreamController = StreamController.broadcast(onListen: () { - _entriesStreamController.add([ - Entry( - date: '10/09/2022', - text: lorem, - title: '[Example] My Journal Entry', - ) - ]); - }); + _entriesStreamController = StreamController.broadcast( + onListen: () { + _entriesStreamController.add([ + Entry( + date: '10/09/2022', + text: lorem, + title: '[Example] My Journal Entry', + ), + ]); + }, + ); } User? user; @@ -23,8 +25,10 @@ class AppState { late final StreamController> _entriesStreamController; Future logIn(String email, String password) async { - final credential = await FirebaseAuth.instance - .signInWithEmailAndPassword(email: email, password: password); + final credential = await FirebaseAuth.instance.signInWithEmailAndPassword( + email: email, + password: password, + ); if (credential.user != null) { user = credential.user!; _listenForEntries(); @@ -42,18 +46,18 @@ class AppState { } void _listenForEntries() { - FirebaseFirestore.instance - .collection('Entries') - .snapshots() - .listen((event) { - final entries = event.docs.map((doc) { - final data = doc.data(); - return Entry( - date: data['date'] as String, - text: data['text'] as String, - title: data['title'] as String, - ); - }).toList(); + FirebaseFirestore.instance.collection('Entries').snapshots().listen(( + event, + ) { + final entries = + event.docs.map((doc) { + final data = doc.data(); + return Entry( + date: data['date'] as String, + text: data['text'] as String, + title: data['title'] as String, + ); + }).toList(); _entriesStreamController.add(entries); }); diff --git a/firebase-emulator-suite/complete/lib/entry.dart b/firebase-emulator-suite/complete/lib/entry.dart index f293b0f0e7..102349f8ff 100644 --- a/firebase-emulator-suite/complete/lib/entry.dart +++ b/firebase-emulator-suite/complete/lib/entry.dart @@ -3,9 +3,5 @@ class Entry { final String text; final String title; - Entry({ - required this.date, - required this.text, - required this.title, - }); + Entry({required this.date, required this.text, required this.title}); } diff --git a/firebase-emulator-suite/complete/lib/firebase_options.dart b/firebase-emulator-suite/complete/lib/firebase_options.dart index 2f512ff291..6ff0e4997e 100644 --- a/firebase-emulator-suite/complete/lib/firebase_options.dart +++ b/firebase-emulator-suite/complete/lib/firebase_options.dart @@ -29,7 +29,8 @@ class DefaultFirebaseOptions { return macos; default: throw UnsupportedError( - 'DefaultFirebaseOptions are not supported for this platform.'); + 'DefaultFirebaseOptions are not supported for this platform.', + ); } } diff --git a/firebase-emulator-suite/complete/lib/journal_entry_form.dart b/firebase-emulator-suite/complete/lib/journal_entry_form.dart index 7a37dd69e1..751198e342 100644 --- a/firebase-emulator-suite/complete/lib/journal_entry_form.dart +++ b/firebase-emulator-suite/complete/lib/journal_entry_form.dart @@ -42,8 +42,9 @@ class _EntryFormState extends State { }, ), TextFormField( - decoration: - const InputDecoration(labelText: 'Date (DD/MM/YYYY):'), + decoration: const InputDecoration( + labelText: 'Date (DD/MM/YYYY):', + ), validator: (value) { if (value == null || value.isEmpty) { return 'Please enter some text'; diff --git a/firebase-emulator-suite/complete/lib/journal_entry_widget.dart b/firebase-emulator-suite/complete/lib/journal_entry_widget.dart index 4dcb2e3460..de7ffad460 100644 --- a/firebase-emulator-suite/complete/lib/journal_entry_widget.dart +++ b/firebase-emulator-suite/complete/lib/journal_entry_widget.dart @@ -35,10 +35,10 @@ class EntryView extends StatelessWidget { child: Text( entry.text, style: Theme.of(context).textTheme.bodyLarge!.copyWith( - height: 1.3, - wordSpacing: 1.2, - letterSpacing: 1.05, - ), + height: 1.3, + wordSpacing: 1.2, + letterSpacing: 1.05, + ), ), ), ], diff --git a/firebase-emulator-suite/complete/lib/logged_in_view.dart b/firebase-emulator-suite/complete/lib/logged_in_view.dart index 8e1d207dd7..1169916503 100644 --- a/firebase-emulator-suite/complete/lib/logged_in_view.dart +++ b/firebase-emulator-suite/complete/lib/logged_in_view.dart @@ -47,7 +47,7 @@ class LoggedInView extends StatelessWidget { EntryView( key: Key('${Random().nextDouble()}'), entry: entry, - ) + ), ], ); } else { @@ -56,7 +56,7 @@ class LoggedInView extends StatelessWidget { }, ), ), - ) + ), ], ), ); diff --git a/firebase-emulator-suite/complete/lib/logged_out_view.dart b/firebase-emulator-suite/complete/lib/logged_out_view.dart index 3221128d72..56588145e4 100644 --- a/firebase-emulator-suite/complete/lib/logged_out_view.dart +++ b/firebase-emulator-suite/complete/lib/logged_out_view.dart @@ -9,9 +9,7 @@ class LoggedOutView extends StatelessWidget { @override Widget build(BuildContext context) { return Scaffold( - appBar: AppBar( - title: const Text('Firebase Emulator Suite Codelab'), - ), + appBar: AppBar(title: const Text('Firebase Emulator Suite Codelab')), body: Center( child: Column( mainAxisAlignment: MainAxisAlignment.center, diff --git a/firebase-emulator-suite/complete/lib/main.dart b/firebase-emulator-suite/complete/lib/main.dart index c97838a628..ad2c92ea48 100644 --- a/firebase-emulator-suite/complete/lib/main.dart +++ b/firebase-emulator-suite/complete/lib/main.dart @@ -13,9 +13,7 @@ import 'logged_out_view.dart'; void main() async { WidgetsFlutterBinding.ensureInitialized(); - await Firebase.initializeApp( - options: DefaultFirebaseOptions.currentPlatform, - ); + await Firebase.initializeApp(options: DefaultFirebaseOptions.currentPlatform); if (kDebugMode) { try { @@ -64,7 +62,7 @@ class MyApp extends StatelessWidget { class AppScrollBehavior extends MaterialScrollBehavior { @override Set get dragDevices => { - PointerDeviceKind.touch, - PointerDeviceKind.mouse, - }; + PointerDeviceKind.touch, + PointerDeviceKind.mouse, + }; } diff --git a/firebase-emulator-suite/complete/pubspec.yaml b/firebase-emulator-suite/complete/pubspec.yaml index 7e9f688dae..c08fc2d737 100644 --- a/firebase-emulator-suite/complete/pubspec.yaml +++ b/firebase-emulator-suite/complete/pubspec.yaml @@ -19,7 +19,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev version: 1.0.0+1 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 # Dependencies specify other packages that your package needs in order to work. # To automatically upgrade your package dependencies to the latest versions diff --git a/firebase-emulator-suite/start/lib/app_state.dart b/firebase-emulator-suite/start/lib/app_state.dart index 8c3aee9b06..3ae95b39e8 100644 --- a/firebase-emulator-suite/start/lib/app_state.dart +++ b/firebase-emulator-suite/start/lib/app_state.dart @@ -4,15 +4,17 @@ import 'entry.dart'; class AppState { AppState() { - _entriesStreamController = StreamController.broadcast(onListen: () { - _entriesStreamController.add([ - Entry( - date: '10/09/2022', - text: lorem, - title: '[Example] My Journal Entry', - ) - ]); - }); + _entriesStreamController = StreamController.broadcast( + onListen: () { + _entriesStreamController.add([ + Entry( + date: '10/09/2022', + text: lorem, + title: '[Example] My Journal Entry', + ), + ]); + }, + ); } // This will change to the type User from the Firebase Authentication package diff --git a/firebase-emulator-suite/start/lib/entry.dart b/firebase-emulator-suite/start/lib/entry.dart index f293b0f0e7..102349f8ff 100644 --- a/firebase-emulator-suite/start/lib/entry.dart +++ b/firebase-emulator-suite/start/lib/entry.dart @@ -3,9 +3,5 @@ class Entry { final String text; final String title; - Entry({ - required this.date, - required this.text, - required this.title, - }); + Entry({required this.date, required this.text, required this.title}); } diff --git a/firebase-emulator-suite/start/lib/journal_entry_form.dart b/firebase-emulator-suite/start/lib/journal_entry_form.dart index 1c4761bee5..2d5c97ff0c 100644 --- a/firebase-emulator-suite/start/lib/journal_entry_form.dart +++ b/firebase-emulator-suite/start/lib/journal_entry_form.dart @@ -42,8 +42,9 @@ class _EntryFormState extends State { }, ), TextFormField( - decoration: - const InputDecoration(labelText: 'Date (DD/MM/YYYY):'), + decoration: const InputDecoration( + labelText: 'Date (DD/MM/YYYY):', + ), validator: (value) { if (value == null || value.isEmpty) { return 'Please enter some text'; diff --git a/firebase-emulator-suite/start/lib/journal_entry_widget.dart b/firebase-emulator-suite/start/lib/journal_entry_widget.dart index 4dcb2e3460..de7ffad460 100644 --- a/firebase-emulator-suite/start/lib/journal_entry_widget.dart +++ b/firebase-emulator-suite/start/lib/journal_entry_widget.dart @@ -35,10 +35,10 @@ class EntryView extends StatelessWidget { child: Text( entry.text, style: Theme.of(context).textTheme.bodyLarge!.copyWith( - height: 1.3, - wordSpacing: 1.2, - letterSpacing: 1.05, - ), + height: 1.3, + wordSpacing: 1.2, + letterSpacing: 1.05, + ), ), ), ], diff --git a/firebase-emulator-suite/start/lib/logged_in_view.dart b/firebase-emulator-suite/start/lib/logged_in_view.dart index 0aedad1798..c339abcc4e 100644 --- a/firebase-emulator-suite/start/lib/logged_in_view.dart +++ b/firebase-emulator-suite/start/lib/logged_in_view.dart @@ -22,9 +22,7 @@ class LoggedInView extends StatelessWidget { children: [ Center( child: Padding( - padding: const EdgeInsets.symmetric( - vertical: 16.0, - ), + padding: const EdgeInsets.symmetric(vertical: 16.0), child: Text( 'Welcome back, $name!', style: Theme.of(context).textTheme.headlineSmall!.copyWith(), @@ -49,16 +47,13 @@ class LoggedInView extends StatelessWidget { state.writeEntryToFirebase(e); }, ), - for (var entry in allEntries!) - EntryView( - entry: entry, - ) + for (var entry in allEntries!) EntryView(entry: entry), ], ); }, ), ), - ) + ), ], ), ); diff --git a/firebase-emulator-suite/start/lib/logged_out_view.dart b/firebase-emulator-suite/start/lib/logged_out_view.dart index 61004d98c5..04a6504d7d 100644 --- a/firebase-emulator-suite/start/lib/logged_out_view.dart +++ b/firebase-emulator-suite/start/lib/logged_out_view.dart @@ -9,9 +9,7 @@ class LoggedOutView extends StatelessWidget { @override Widget build(BuildContext context) { return Scaffold( - appBar: AppBar( - title: const Text('Firebase Emulator Suite Codelab'), - ), + appBar: AppBar(title: const Text('Firebase Emulator Suite Codelab')), body: Center( child: Column( mainAxisAlignment: MainAxisAlignment.center, diff --git a/firebase-emulator-suite/start/lib/main.dart b/firebase-emulator-suite/start/lib/main.dart index 6eda035e10..7a643039e7 100644 --- a/firebase-emulator-suite/start/lib/main.dart +++ b/firebase-emulator-suite/start/lib/main.dart @@ -45,7 +45,7 @@ class MyApp extends StatelessWidget { class AppScrollBehavior extends MaterialScrollBehavior { @override Set get dragDevices => { - PointerDeviceKind.touch, - PointerDeviceKind.mouse, - }; + PointerDeviceKind.touch, + PointerDeviceKind.mouse, + }; } diff --git a/firebase-emulator-suite/start/pubspec.yaml b/firebase-emulator-suite/start/pubspec.yaml index 1662cc672a..c792031e4f 100644 --- a/firebase-emulator-suite/start/pubspec.yaml +++ b/firebase-emulator-suite/start/pubspec.yaml @@ -19,7 +19,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev version: 1.0.0+1 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 # Dependencies specify other packages that your package needs in order to work. # To automatically upgrade your package dependencies to the latest versions diff --git a/firebase-get-to-know-flutter/step_02/lib/home_page.dart b/firebase-get-to-know-flutter/step_02/lib/home_page.dart index e7d8d12123..ecc3c6be3d 100644 --- a/firebase-get-to-know-flutter/step_02/lib/home_page.dart +++ b/firebase-get-to-know-flutter/step_02/lib/home_page.dart @@ -12,9 +12,7 @@ class HomePage extends StatelessWidget { @override Widget build(BuildContext context) { return Scaffold( - appBar: AppBar( - title: const Text('Firebase Meetup'), - ), + appBar: AppBar(title: const Text('Firebase Meetup')), body: ListView( children: [ Image.asset('assets/codelab.png'), diff --git a/firebase-get-to-know-flutter/step_02/lib/main.dart b/firebase-get-to-know-flutter/step_02/lib/main.dart index f01fa16027..a13bce580a 100644 --- a/firebase-get-to-know-flutter/step_02/lib/main.dart +++ b/firebase-get-to-know-flutter/step_02/lib/main.dart @@ -19,13 +19,11 @@ class App extends StatelessWidget { return MaterialApp( title: 'Firebase Meetup', theme: ThemeData( - buttonTheme: Theme.of(context).buttonTheme.copyWith( - highlightColor: Colors.deepPurple, - ), + buttonTheme: Theme.of( + context, + ).buttonTheme.copyWith(highlightColor: Colors.deepPurple), colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple), - textTheme: GoogleFonts.robotoTextTheme( - Theme.of(context).textTheme, - ), + textTheme: GoogleFonts.robotoTextTheme(Theme.of(context).textTheme), visualDensity: VisualDensity.adaptivePlatformDensity, useMaterial3: true, ), diff --git a/firebase-get-to-know-flutter/step_02/lib/src/authentication.dart b/firebase-get-to-know-flutter/step_02/lib/src/authentication.dart index 7a40546f94..a094b484b8 100644 --- a/firebase-get-to-know-flutter/step_02/lib/src/authentication.dart +++ b/firebase-get-to-know-flutter/step_02/lib/src/authentication.dart @@ -8,11 +8,7 @@ import 'package:go_router/go_router.dart'; import 'widgets.dart'; class AuthFunc extends StatelessWidget { - const AuthFunc({ - super.key, - required this.loggedIn, - required this.signOut, - }); + const AuthFunc({super.key, required this.loggedIn, required this.signOut}); final bool loggedIn; final void Function() signOut; @@ -24,22 +20,24 @@ class AuthFunc extends StatelessWidget { Padding( padding: const EdgeInsets.only(left: 24, bottom: 8), child: StyledButton( - onPressed: () { - !loggedIn ? context.push('/sign-in') : signOut(); - }, - child: !loggedIn ? const Text('RSVP') : const Text('Logout')), + onPressed: () { + !loggedIn ? context.push('/sign-in') : signOut(); + }, + child: !loggedIn ? const Text('RSVP') : const Text('Logout'), + ), ), Visibility( visible: loggedIn, child: Padding( padding: const EdgeInsets.only(left: 24, bottom: 8), child: StyledButton( - onPressed: () { - context.push('/profile'); - }, - child: const Text('Profile')), + onPressed: () { + context.push('/profile'); + }, + child: const Text('Profile'), + ), ), - ) + ), ], ); } diff --git a/firebase-get-to-know-flutter/step_02/lib/src/widgets.dart b/firebase-get-to-know-flutter/step_02/lib/src/widgets.dart index 29886a3802..3f89c9d797 100644 --- a/firebase-get-to-know-flutter/step_02/lib/src/widgets.dart +++ b/firebase-get-to-know-flutter/step_02/lib/src/widgets.dart @@ -10,12 +10,9 @@ class Header extends StatelessWidget { @override Widget build(BuildContext context) => Padding( - padding: const EdgeInsets.all(8.0), - child: Text( - heading, - style: const TextStyle(fontSize: 24), - ), - ); + padding: const EdgeInsets.all(8.0), + child: Text(heading, style: const TextStyle(fontSize: 24)), + ); } class Paragraph extends StatelessWidget { @@ -23,12 +20,9 @@ class Paragraph extends StatelessWidget { final String content; @override Widget build(BuildContext context) => Padding( - padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 4), - child: Text( - content, - style: const TextStyle(fontSize: 18), - ), - ); + padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 4), + child: Text(content, style: const TextStyle(fontSize: 18)), + ); } class IconAndDetail extends StatelessWidget { @@ -38,18 +32,15 @@ class IconAndDetail extends StatelessWidget { @override Widget build(BuildContext context) => Padding( - padding: const EdgeInsets.all(8.0), - child: Row( - children: [ - Icon(icon), - const SizedBox(width: 8), - Text( - detail, - style: const TextStyle(fontSize: 18), - ) - ], - ), - ); + padding: const EdgeInsets.all(8.0), + child: Row( + children: [ + Icon(icon), + const SizedBox(width: 8), + Text(detail, style: const TextStyle(fontSize: 18)), + ], + ), + ); } class StyledButton extends StatelessWidget { @@ -59,9 +50,10 @@ class StyledButton extends StatelessWidget { @override Widget build(BuildContext context) => OutlinedButton( - style: OutlinedButton.styleFrom( - side: const BorderSide(color: Colors.deepPurple)), - onPressed: onPressed, - child: child, - ); + style: OutlinedButton.styleFrom( + side: const BorderSide(color: Colors.deepPurple), + ), + onPressed: onPressed, + child: child, + ); } diff --git a/firebase-get-to-know-flutter/step_02/pubspec.yaml b/firebase-get-to-know-flutter/step_02/pubspec.yaml index 7f8e743b24..55bbd86ec5 100644 --- a/firebase-get-to-know-flutter/step_02/pubspec.yaml +++ b/firebase-get-to-know-flutter/step_02/pubspec.yaml @@ -20,7 +20,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev version: 1.0.0+1 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 # Dependencies specify other packages that your package needs in order to work. # To automatically upgrade your package dependencies to the latest versions diff --git a/firebase-get-to-know-flutter/step_04/lib/firebase_options.dart b/firebase-get-to-know-flutter/step_04/lib/firebase_options.dart index a070833f2c..d2ab5def55 100644 --- a/firebase-get-to-know-flutter/step_04/lib/firebase_options.dart +++ b/firebase-get-to-know-flutter/step_04/lib/firebase_options.dart @@ -29,7 +29,8 @@ class DefaultFirebaseOptions { return macos; default: throw UnsupportedError( - 'DefaultFirebaseOptions are not supported for this platform.'); + 'DefaultFirebaseOptions are not supported for this platform.', + ); } } diff --git a/firebase-get-to-know-flutter/step_04/lib/home_page.dart b/firebase-get-to-know-flutter/step_04/lib/home_page.dart index e7d8d12123..ecc3c6be3d 100644 --- a/firebase-get-to-know-flutter/step_04/lib/home_page.dart +++ b/firebase-get-to-know-flutter/step_04/lib/home_page.dart @@ -12,9 +12,7 @@ class HomePage extends StatelessWidget { @override Widget build(BuildContext context) { return Scaffold( - appBar: AppBar( - title: const Text('Firebase Meetup'), - ), + appBar: AppBar(title: const Text('Firebase Meetup')), body: ListView( children: [ Image.asset('assets/codelab.png'), diff --git a/firebase-get-to-know-flutter/step_04/lib/main.dart b/firebase-get-to-know-flutter/step_04/lib/main.dart index f01fa16027..a13bce580a 100644 --- a/firebase-get-to-know-flutter/step_04/lib/main.dart +++ b/firebase-get-to-know-flutter/step_04/lib/main.dart @@ -19,13 +19,11 @@ class App extends StatelessWidget { return MaterialApp( title: 'Firebase Meetup', theme: ThemeData( - buttonTheme: Theme.of(context).buttonTheme.copyWith( - highlightColor: Colors.deepPurple, - ), + buttonTheme: Theme.of( + context, + ).buttonTheme.copyWith(highlightColor: Colors.deepPurple), colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple), - textTheme: GoogleFonts.robotoTextTheme( - Theme.of(context).textTheme, - ), + textTheme: GoogleFonts.robotoTextTheme(Theme.of(context).textTheme), visualDensity: VisualDensity.adaptivePlatformDensity, useMaterial3: true, ), diff --git a/firebase-get-to-know-flutter/step_04/lib/src/authentication.dart b/firebase-get-to-know-flutter/step_04/lib/src/authentication.dart index 7a40546f94..a094b484b8 100644 --- a/firebase-get-to-know-flutter/step_04/lib/src/authentication.dart +++ b/firebase-get-to-know-flutter/step_04/lib/src/authentication.dart @@ -8,11 +8,7 @@ import 'package:go_router/go_router.dart'; import 'widgets.dart'; class AuthFunc extends StatelessWidget { - const AuthFunc({ - super.key, - required this.loggedIn, - required this.signOut, - }); + const AuthFunc({super.key, required this.loggedIn, required this.signOut}); final bool loggedIn; final void Function() signOut; @@ -24,22 +20,24 @@ class AuthFunc extends StatelessWidget { Padding( padding: const EdgeInsets.only(left: 24, bottom: 8), child: StyledButton( - onPressed: () { - !loggedIn ? context.push('/sign-in') : signOut(); - }, - child: !loggedIn ? const Text('RSVP') : const Text('Logout')), + onPressed: () { + !loggedIn ? context.push('/sign-in') : signOut(); + }, + child: !loggedIn ? const Text('RSVP') : const Text('Logout'), + ), ), Visibility( visible: loggedIn, child: Padding( padding: const EdgeInsets.only(left: 24, bottom: 8), child: StyledButton( - onPressed: () { - context.push('/profile'); - }, - child: const Text('Profile')), + onPressed: () { + context.push('/profile'); + }, + child: const Text('Profile'), + ), ), - ) + ), ], ); } diff --git a/firebase-get-to-know-flutter/step_04/lib/src/widgets.dart b/firebase-get-to-know-flutter/step_04/lib/src/widgets.dart index 29886a3802..3f89c9d797 100644 --- a/firebase-get-to-know-flutter/step_04/lib/src/widgets.dart +++ b/firebase-get-to-know-flutter/step_04/lib/src/widgets.dart @@ -10,12 +10,9 @@ class Header extends StatelessWidget { @override Widget build(BuildContext context) => Padding( - padding: const EdgeInsets.all(8.0), - child: Text( - heading, - style: const TextStyle(fontSize: 24), - ), - ); + padding: const EdgeInsets.all(8.0), + child: Text(heading, style: const TextStyle(fontSize: 24)), + ); } class Paragraph extends StatelessWidget { @@ -23,12 +20,9 @@ class Paragraph extends StatelessWidget { final String content; @override Widget build(BuildContext context) => Padding( - padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 4), - child: Text( - content, - style: const TextStyle(fontSize: 18), - ), - ); + padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 4), + child: Text(content, style: const TextStyle(fontSize: 18)), + ); } class IconAndDetail extends StatelessWidget { @@ -38,18 +32,15 @@ class IconAndDetail extends StatelessWidget { @override Widget build(BuildContext context) => Padding( - padding: const EdgeInsets.all(8.0), - child: Row( - children: [ - Icon(icon), - const SizedBox(width: 8), - Text( - detail, - style: const TextStyle(fontSize: 18), - ) - ], - ), - ); + padding: const EdgeInsets.all(8.0), + child: Row( + children: [ + Icon(icon), + const SizedBox(width: 8), + Text(detail, style: const TextStyle(fontSize: 18)), + ], + ), + ); } class StyledButton extends StatelessWidget { @@ -59,9 +50,10 @@ class StyledButton extends StatelessWidget { @override Widget build(BuildContext context) => OutlinedButton( - style: OutlinedButton.styleFrom( - side: const BorderSide(color: Colors.deepPurple)), - onPressed: onPressed, - child: child, - ); + style: OutlinedButton.styleFrom( + side: const BorderSide(color: Colors.deepPurple), + ), + onPressed: onPressed, + child: child, + ); } diff --git a/firebase-get-to-know-flutter/step_04/pubspec.yaml b/firebase-get-to-know-flutter/step_04/pubspec.yaml index 5efd9cd4f0..d7f35cbe41 100644 --- a/firebase-get-to-know-flutter/step_04/pubspec.yaml +++ b/firebase-get-to-know-flutter/step_04/pubspec.yaml @@ -20,7 +20,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev version: 1.0.0+1 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 # Dependencies specify other packages that your package needs in order to work. # To automatically upgrade your package dependencies to the latest versions diff --git a/firebase-get-to-know-flutter/step_05/lib/app_state.dart b/firebase-get-to-know-flutter/step_05/lib/app_state.dart index 0acaf3eee1..996eefb229 100644 --- a/firebase-get-to-know-flutter/step_05/lib/app_state.dart +++ b/firebase-get-to-know-flutter/step_05/lib/app_state.dart @@ -20,11 +20,10 @@ class ApplicationState extends ChangeNotifier { Future init() async { await Firebase.initializeApp( - options: DefaultFirebaseOptions.currentPlatform); + options: DefaultFirebaseOptions.currentPlatform, + ); - FirebaseUIAuth.configureProviders([ - EmailAuthProvider(), - ]); + FirebaseUIAuth.configureProviders([EmailAuthProvider()]); FirebaseAuth.instance.userChanges().listen((user) { if (user != null) { diff --git a/firebase-get-to-know-flutter/step_05/lib/firebase_options.dart b/firebase-get-to-know-flutter/step_05/lib/firebase_options.dart index a070833f2c..d2ab5def55 100644 --- a/firebase-get-to-know-flutter/step_05/lib/firebase_options.dart +++ b/firebase-get-to-know-flutter/step_05/lib/firebase_options.dart @@ -29,7 +29,8 @@ class DefaultFirebaseOptions { return macos; default: throw UnsupportedError( - 'DefaultFirebaseOptions are not supported for this platform.'); + 'DefaultFirebaseOptions are not supported for this platform.', + ); } } diff --git a/firebase-get-to-know-flutter/step_05/lib/home_page.dart b/firebase-get-to-know-flutter/step_05/lib/home_page.dart index 49da5c20ca..f483ae6f5a 100644 --- a/firebase-get-to-know-flutter/step_05/lib/home_page.dart +++ b/firebase-get-to-know-flutter/step_05/lib/home_page.dart @@ -17,9 +17,7 @@ class HomePage extends StatelessWidget { @override Widget build(BuildContext context) { return Scaffold( - appBar: AppBar( - title: const Text('Firebase Meetup'), - ), + appBar: AppBar(title: const Text('Firebase Meetup')), body: ListView( children: [ Image.asset('assets/codelab.png'), @@ -27,11 +25,13 @@ class HomePage extends StatelessWidget { const IconAndDetail(Icons.calendar_today, 'October 30'), const IconAndDetail(Icons.location_city, 'San Francisco'), Consumer( - builder: (context, appState, _) => AuthFunc( - loggedIn: appState.loggedIn, - signOut: () { - FirebaseAuth.instance.signOut(); - }), + builder: + (context, appState, _) => AuthFunc( + loggedIn: appState.loggedIn, + signOut: () { + FirebaseAuth.instance.signOut(); + }, + ), ), const Divider( height: 8, diff --git a/firebase-get-to-know-flutter/step_05/lib/main.dart b/firebase-get-to-know-flutter/step_05/lib/main.dart index 61ea3eaac3..ab9c6b4870 100644 --- a/firebase-get-to-know-flutter/step_05/lib/main.dart +++ b/firebase-get-to-know-flutter/step_05/lib/main.dart @@ -14,10 +14,12 @@ import 'home_page.dart'; void main() { WidgetsFlutterBinding.ensureInitialized(); - runApp(ChangeNotifierProvider( - create: (context) => ApplicationState(), - builder: ((context, child) => const App()), - )); + runApp( + ChangeNotifierProvider( + create: (context) => ApplicationState(), + builder: ((context, child) => const App()), + ), + ); } final _router = GoRouter( @@ -34,9 +36,7 @@ final _router = GoRouter( ForgotPasswordAction(((context, email) { final uri = Uri( path: '/sign-in/forgot-password', - queryParameters: { - 'email': email, - }, + queryParameters: {'email': email}, ); context.push(uri.toString()); })), @@ -44,7 +44,7 @@ final _router = GoRouter( final user = switch (state) { SignedIn state => state.user, UserCreated state => state.credential.user, - _ => null + _ => null, }; if (user == null) { return; @@ -55,8 +55,10 @@ final _router = GoRouter( if (!user.emailVerified) { user.sendEmailVerification(); const snackBar = SnackBar( - content: Text( - 'Please check your email to verify your email address')); + content: Text( + 'Please check your email to verify your email address', + ), + ); ScaffoldMessenger.of(context).showSnackBar(snackBar); } context.pushReplacement('/'); @@ -103,13 +105,11 @@ class App extends StatelessWidget { return MaterialApp.router( title: 'Firebase Meetup', theme: ThemeData( - buttonTheme: Theme.of(context).buttonTheme.copyWith( - highlightColor: Colors.deepPurple, - ), + buttonTheme: Theme.of( + context, + ).buttonTheme.copyWith(highlightColor: Colors.deepPurple), colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple), - textTheme: GoogleFonts.robotoTextTheme( - Theme.of(context).textTheme, - ), + textTheme: GoogleFonts.robotoTextTheme(Theme.of(context).textTheme), visualDensity: VisualDensity.adaptivePlatformDensity, useMaterial3: true, ), diff --git a/firebase-get-to-know-flutter/step_05/lib/src/authentication.dart b/firebase-get-to-know-flutter/step_05/lib/src/authentication.dart index 89ad31ba22..a094b484b8 100644 --- a/firebase-get-to-know-flutter/step_05/lib/src/authentication.dart +++ b/firebase-get-to-know-flutter/step_05/lib/src/authentication.dart @@ -8,11 +8,7 @@ import 'package:go_router/go_router.dart'; import 'widgets.dart'; class AuthFunc extends StatelessWidget { - const AuthFunc({ - super.key, - required this.loggedIn, - required this.signOut, - }); + const AuthFunc({super.key, required this.loggedIn, required this.signOut}); final bool loggedIn; final void Function() signOut; @@ -24,21 +20,24 @@ class AuthFunc extends StatelessWidget { Padding( padding: const EdgeInsets.only(left: 24, bottom: 8), child: StyledButton( + onPressed: () { + !loggedIn ? context.push('/sign-in') : signOut(); + }, + child: !loggedIn ? const Text('RSVP') : const Text('Logout'), + ), + ), + Visibility( + visible: loggedIn, + child: Padding( + padding: const EdgeInsets.only(left: 24, bottom: 8), + child: StyledButton( onPressed: () { - !loggedIn ? context.push('/sign-in') : signOut(); + context.push('/profile'); }, - child: !loggedIn ? const Text('RSVP') : const Text('Logout')), + child: const Text('Profile'), + ), + ), ), - Visibility( - visible: loggedIn, - child: Padding( - padding: const EdgeInsets.only(left: 24, bottom: 8), - child: StyledButton( - onPressed: () { - context.push('/profile'); - }, - child: const Text('Profile')), - )) ], ); } diff --git a/firebase-get-to-know-flutter/step_05/lib/src/widgets.dart b/firebase-get-to-know-flutter/step_05/lib/src/widgets.dart index 29886a3802..3f89c9d797 100644 --- a/firebase-get-to-know-flutter/step_05/lib/src/widgets.dart +++ b/firebase-get-to-know-flutter/step_05/lib/src/widgets.dart @@ -10,12 +10,9 @@ class Header extends StatelessWidget { @override Widget build(BuildContext context) => Padding( - padding: const EdgeInsets.all(8.0), - child: Text( - heading, - style: const TextStyle(fontSize: 24), - ), - ); + padding: const EdgeInsets.all(8.0), + child: Text(heading, style: const TextStyle(fontSize: 24)), + ); } class Paragraph extends StatelessWidget { @@ -23,12 +20,9 @@ class Paragraph extends StatelessWidget { final String content; @override Widget build(BuildContext context) => Padding( - padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 4), - child: Text( - content, - style: const TextStyle(fontSize: 18), - ), - ); + padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 4), + child: Text(content, style: const TextStyle(fontSize: 18)), + ); } class IconAndDetail extends StatelessWidget { @@ -38,18 +32,15 @@ class IconAndDetail extends StatelessWidget { @override Widget build(BuildContext context) => Padding( - padding: const EdgeInsets.all(8.0), - child: Row( - children: [ - Icon(icon), - const SizedBox(width: 8), - Text( - detail, - style: const TextStyle(fontSize: 18), - ) - ], - ), - ); + padding: const EdgeInsets.all(8.0), + child: Row( + children: [ + Icon(icon), + const SizedBox(width: 8), + Text(detail, style: const TextStyle(fontSize: 18)), + ], + ), + ); } class StyledButton extends StatelessWidget { @@ -59,9 +50,10 @@ class StyledButton extends StatelessWidget { @override Widget build(BuildContext context) => OutlinedButton( - style: OutlinedButton.styleFrom( - side: const BorderSide(color: Colors.deepPurple)), - onPressed: onPressed, - child: child, - ); + style: OutlinedButton.styleFrom( + side: const BorderSide(color: Colors.deepPurple), + ), + onPressed: onPressed, + child: child, + ); } diff --git a/firebase-get-to-know-flutter/step_05/pubspec.yaml b/firebase-get-to-know-flutter/step_05/pubspec.yaml index 5efd9cd4f0..d7f35cbe41 100644 --- a/firebase-get-to-know-flutter/step_05/pubspec.yaml +++ b/firebase-get-to-know-flutter/step_05/pubspec.yaml @@ -20,7 +20,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev version: 1.0.0+1 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 # Dependencies specify other packages that your package needs in order to work. # To automatically upgrade your package dependencies to the latest versions diff --git a/firebase-get-to-know-flutter/step_06/lib/app_state.dart b/firebase-get-to-know-flutter/step_06/lib/app_state.dart index 6ab66b6021..76bbc05acc 100644 --- a/firebase-get-to-know-flutter/step_06/lib/app_state.dart +++ b/firebase-get-to-know-flutter/step_06/lib/app_state.dart @@ -22,11 +22,10 @@ class ApplicationState extends ChangeNotifier { Future init() async { await Firebase.initializeApp( - options: DefaultFirebaseOptions.currentPlatform); + options: DefaultFirebaseOptions.currentPlatform, + ); - FirebaseUIAuth.configureProviders([ - EmailAuthProvider(), - ]); + FirebaseUIAuth.configureProviders([EmailAuthProvider()]); FirebaseAuth.instance.userChanges().listen((user) { if (user != null) { @@ -46,10 +45,10 @@ class ApplicationState extends ChangeNotifier { return FirebaseFirestore.instance .collection('guestbook') .add({ - 'text': message, - 'timestamp': DateTime.now().millisecondsSinceEpoch, - 'name': FirebaseAuth.instance.currentUser!.displayName, - 'userId': FirebaseAuth.instance.currentUser!.uid, - }); + 'text': message, + 'timestamp': DateTime.now().millisecondsSinceEpoch, + 'name': FirebaseAuth.instance.currentUser!.displayName, + 'userId': FirebaseAuth.instance.currentUser!.uid, + }); } } diff --git a/firebase-get-to-know-flutter/step_06/lib/firebase_options.dart b/firebase-get-to-know-flutter/step_06/lib/firebase_options.dart index a070833f2c..d2ab5def55 100644 --- a/firebase-get-to-know-flutter/step_06/lib/firebase_options.dart +++ b/firebase-get-to-know-flutter/step_06/lib/firebase_options.dart @@ -29,7 +29,8 @@ class DefaultFirebaseOptions { return macos; default: throw UnsupportedError( - 'DefaultFirebaseOptions are not supported for this platform.'); + 'DefaultFirebaseOptions are not supported for this platform.', + ); } } diff --git a/firebase-get-to-know-flutter/step_06/lib/guest_book.dart b/firebase-get-to-know-flutter/step_06/lib/guest_book.dart index 1a06c48abe..2eea500651 100644 --- a/firebase-get-to-know-flutter/step_06/lib/guest_book.dart +++ b/firebase-get-to-know-flutter/step_06/lib/guest_book.dart @@ -32,9 +32,7 @@ class _GuestBookState extends State { Expanded( child: TextFormField( controller: _controller, - decoration: const InputDecoration( - hintText: 'Leave a message', - ), + decoration: const InputDecoration(hintText: 'Leave a message'), validator: (value) { if (value == null || value.isEmpty) { return 'Enter your message to continue'; @@ -52,11 +50,7 @@ class _GuestBookState extends State { } }, child: const Row( - children: [ - Icon(Icons.send), - SizedBox(width: 4), - Text('SEND'), - ], + children: [Icon(Icons.send), SizedBox(width: 4), Text('SEND')], ), ), ], diff --git a/firebase-get-to-know-flutter/step_06/lib/home_page.dart b/firebase-get-to-know-flutter/step_06/lib/home_page.dart index 50844a7ed7..de63313c75 100644 --- a/firebase-get-to-know-flutter/step_06/lib/home_page.dart +++ b/firebase-get-to-know-flutter/step_06/lib/home_page.dart @@ -18,9 +18,7 @@ class HomePage extends StatelessWidget { @override Widget build(BuildContext context) { return Scaffold( - appBar: AppBar( - title: const Text('Firebase Meetup'), - ), + appBar: AppBar(title: const Text('Firebase Meetup')), body: ListView( children: [ Image.asset('assets/codelab.png'), @@ -28,11 +26,13 @@ class HomePage extends StatelessWidget { const IconAndDetail(Icons.calendar_today, 'October 30'), const IconAndDetail(Icons.location_city, 'San Francisco'), Consumer( - builder: (context, appState, _) => AuthFunc( - loggedIn: appState.loggedIn, - signOut: () { - FirebaseAuth.instance.signOut(); - }), + builder: + (context, appState, _) => AuthFunc( + loggedIn: appState.loggedIn, + signOut: () { + FirebaseAuth.instance.signOut(); + }, + ), ), const Divider( height: 8, @@ -46,18 +46,20 @@ class HomePage extends StatelessWidget { 'Join us for a day full of Firebase Workshops and Pizza!', ), Consumer( - builder: (context, appState, _) => Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - if (appState.loggedIn) ...[ - const Header('Discussion'), - GuestBook( - addMessage: (message) => - appState.addMessageToGuestBook(message), - ), - ], - ], - ), + builder: + (context, appState, _) => Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + if (appState.loggedIn) ...[ + const Header('Discussion'), + GuestBook( + addMessage: + (message) => + appState.addMessageToGuestBook(message), + ), + ], + ], + ), ), ], ), diff --git a/firebase-get-to-know-flutter/step_06/lib/main.dart b/firebase-get-to-know-flutter/step_06/lib/main.dart index 61ea3eaac3..ab9c6b4870 100644 --- a/firebase-get-to-know-flutter/step_06/lib/main.dart +++ b/firebase-get-to-know-flutter/step_06/lib/main.dart @@ -14,10 +14,12 @@ import 'home_page.dart'; void main() { WidgetsFlutterBinding.ensureInitialized(); - runApp(ChangeNotifierProvider( - create: (context) => ApplicationState(), - builder: ((context, child) => const App()), - )); + runApp( + ChangeNotifierProvider( + create: (context) => ApplicationState(), + builder: ((context, child) => const App()), + ), + ); } final _router = GoRouter( @@ -34,9 +36,7 @@ final _router = GoRouter( ForgotPasswordAction(((context, email) { final uri = Uri( path: '/sign-in/forgot-password', - queryParameters: { - 'email': email, - }, + queryParameters: {'email': email}, ); context.push(uri.toString()); })), @@ -44,7 +44,7 @@ final _router = GoRouter( final user = switch (state) { SignedIn state => state.user, UserCreated state => state.credential.user, - _ => null + _ => null, }; if (user == null) { return; @@ -55,8 +55,10 @@ final _router = GoRouter( if (!user.emailVerified) { user.sendEmailVerification(); const snackBar = SnackBar( - content: Text( - 'Please check your email to verify your email address')); + content: Text( + 'Please check your email to verify your email address', + ), + ); ScaffoldMessenger.of(context).showSnackBar(snackBar); } context.pushReplacement('/'); @@ -103,13 +105,11 @@ class App extends StatelessWidget { return MaterialApp.router( title: 'Firebase Meetup', theme: ThemeData( - buttonTheme: Theme.of(context).buttonTheme.copyWith( - highlightColor: Colors.deepPurple, - ), + buttonTheme: Theme.of( + context, + ).buttonTheme.copyWith(highlightColor: Colors.deepPurple), colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple), - textTheme: GoogleFonts.robotoTextTheme( - Theme.of(context).textTheme, - ), + textTheme: GoogleFonts.robotoTextTheme(Theme.of(context).textTheme), visualDensity: VisualDensity.adaptivePlatformDensity, useMaterial3: true, ), diff --git a/firebase-get-to-know-flutter/step_06/lib/src/authentication.dart b/firebase-get-to-know-flutter/step_06/lib/src/authentication.dart index 89ad31ba22..a094b484b8 100644 --- a/firebase-get-to-know-flutter/step_06/lib/src/authentication.dart +++ b/firebase-get-to-know-flutter/step_06/lib/src/authentication.dart @@ -8,11 +8,7 @@ import 'package:go_router/go_router.dart'; import 'widgets.dart'; class AuthFunc extends StatelessWidget { - const AuthFunc({ - super.key, - required this.loggedIn, - required this.signOut, - }); + const AuthFunc({super.key, required this.loggedIn, required this.signOut}); final bool loggedIn; final void Function() signOut; @@ -24,21 +20,24 @@ class AuthFunc extends StatelessWidget { Padding( padding: const EdgeInsets.only(left: 24, bottom: 8), child: StyledButton( + onPressed: () { + !loggedIn ? context.push('/sign-in') : signOut(); + }, + child: !loggedIn ? const Text('RSVP') : const Text('Logout'), + ), + ), + Visibility( + visible: loggedIn, + child: Padding( + padding: const EdgeInsets.only(left: 24, bottom: 8), + child: StyledButton( onPressed: () { - !loggedIn ? context.push('/sign-in') : signOut(); + context.push('/profile'); }, - child: !loggedIn ? const Text('RSVP') : const Text('Logout')), + child: const Text('Profile'), + ), + ), ), - Visibility( - visible: loggedIn, - child: Padding( - padding: const EdgeInsets.only(left: 24, bottom: 8), - child: StyledButton( - onPressed: () { - context.push('/profile'); - }, - child: const Text('Profile')), - )) ], ); } diff --git a/firebase-get-to-know-flutter/step_06/lib/src/widgets.dart b/firebase-get-to-know-flutter/step_06/lib/src/widgets.dart index 29886a3802..3f89c9d797 100644 --- a/firebase-get-to-know-flutter/step_06/lib/src/widgets.dart +++ b/firebase-get-to-know-flutter/step_06/lib/src/widgets.dart @@ -10,12 +10,9 @@ class Header extends StatelessWidget { @override Widget build(BuildContext context) => Padding( - padding: const EdgeInsets.all(8.0), - child: Text( - heading, - style: const TextStyle(fontSize: 24), - ), - ); + padding: const EdgeInsets.all(8.0), + child: Text(heading, style: const TextStyle(fontSize: 24)), + ); } class Paragraph extends StatelessWidget { @@ -23,12 +20,9 @@ class Paragraph extends StatelessWidget { final String content; @override Widget build(BuildContext context) => Padding( - padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 4), - child: Text( - content, - style: const TextStyle(fontSize: 18), - ), - ); + padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 4), + child: Text(content, style: const TextStyle(fontSize: 18)), + ); } class IconAndDetail extends StatelessWidget { @@ -38,18 +32,15 @@ class IconAndDetail extends StatelessWidget { @override Widget build(BuildContext context) => Padding( - padding: const EdgeInsets.all(8.0), - child: Row( - children: [ - Icon(icon), - const SizedBox(width: 8), - Text( - detail, - style: const TextStyle(fontSize: 18), - ) - ], - ), - ); + padding: const EdgeInsets.all(8.0), + child: Row( + children: [ + Icon(icon), + const SizedBox(width: 8), + Text(detail, style: const TextStyle(fontSize: 18)), + ], + ), + ); } class StyledButton extends StatelessWidget { @@ -59,9 +50,10 @@ class StyledButton extends StatelessWidget { @override Widget build(BuildContext context) => OutlinedButton( - style: OutlinedButton.styleFrom( - side: const BorderSide(color: Colors.deepPurple)), - onPressed: onPressed, - child: child, - ); + style: OutlinedButton.styleFrom( + side: const BorderSide(color: Colors.deepPurple), + ), + onPressed: onPressed, + child: child, + ); } diff --git a/firebase-get-to-know-flutter/step_06/pubspec.yaml b/firebase-get-to-know-flutter/step_06/pubspec.yaml index 5efd9cd4f0..d7f35cbe41 100644 --- a/firebase-get-to-know-flutter/step_06/pubspec.yaml +++ b/firebase-get-to-know-flutter/step_06/pubspec.yaml @@ -20,7 +20,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev version: 1.0.0+1 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 # Dependencies specify other packages that your package needs in order to work. # To automatically upgrade your package dependencies to the latest versions diff --git a/firebase-get-to-know-flutter/step_07/lib/app_state.dart b/firebase-get-to-know-flutter/step_07/lib/app_state.dart index f010be4c00..b554e953bf 100644 --- a/firebase-get-to-know-flutter/step_07/lib/app_state.dart +++ b/firebase-get-to-know-flutter/step_07/lib/app_state.dart @@ -28,11 +28,10 @@ class ApplicationState extends ChangeNotifier { Future init() async { await Firebase.initializeApp( - options: DefaultFirebaseOptions.currentPlatform); + options: DefaultFirebaseOptions.currentPlatform, + ); - FirebaseUIAuth.configureProviders([ - EmailAuthProvider(), - ]); + FirebaseUIAuth.configureProviders([EmailAuthProvider()]); FirebaseAuth.instance.userChanges().listen((user) { if (user != null) { @@ -42,17 +41,17 @@ class ApplicationState extends ChangeNotifier { .orderBy('timestamp', descending: true) .snapshots() .listen((snapshot) { - _guestBookMessages = []; - for (final document in snapshot.docs) { - _guestBookMessages.add( - GuestBookMessage( - name: document.data()['name'] as String, - message: document.data()['text'] as String, - ), - ); - } - notifyListeners(); - }); + _guestBookMessages = []; + for (final document in snapshot.docs) { + _guestBookMessages.add( + GuestBookMessage( + name: document.data()['name'] as String, + message: document.data()['text'] as String, + ), + ); + } + notifyListeners(); + }); } else { _loggedIn = false; _guestBookMessages = []; @@ -70,10 +69,10 @@ class ApplicationState extends ChangeNotifier { return FirebaseFirestore.instance .collection('guestbook') .add({ - 'text': message, - 'timestamp': DateTime.now().millisecondsSinceEpoch, - 'name': FirebaseAuth.instance.currentUser!.displayName, - 'userId': FirebaseAuth.instance.currentUser!.uid, - }); + 'text': message, + 'timestamp': DateTime.now().millisecondsSinceEpoch, + 'name': FirebaseAuth.instance.currentUser!.displayName, + 'userId': FirebaseAuth.instance.currentUser!.uid, + }); } } diff --git a/firebase-get-to-know-flutter/step_07/lib/firebase_options.dart b/firebase-get-to-know-flutter/step_07/lib/firebase_options.dart index a070833f2c..d2ab5def55 100644 --- a/firebase-get-to-know-flutter/step_07/lib/firebase_options.dart +++ b/firebase-get-to-know-flutter/step_07/lib/firebase_options.dart @@ -29,7 +29,8 @@ class DefaultFirebaseOptions { return macos; default: throw UnsupportedError( - 'DefaultFirebaseOptions are not supported for this platform.'); + 'DefaultFirebaseOptions are not supported for this platform.', + ); } } diff --git a/firebase-get-to-know-flutter/step_07/lib/home_page.dart b/firebase-get-to-know-flutter/step_07/lib/home_page.dart index 2f861a5a05..6e51de8a87 100644 --- a/firebase-get-to-know-flutter/step_07/lib/home_page.dart +++ b/firebase-get-to-know-flutter/step_07/lib/home_page.dart @@ -18,9 +18,7 @@ class HomePage extends StatelessWidget { @override Widget build(BuildContext context) { return Scaffold( - appBar: AppBar( - title: const Text('Firebase Meetup'), - ), + appBar: AppBar(title: const Text('Firebase Meetup')), body: ListView( children: [ Image.asset('assets/codelab.png'), @@ -28,11 +26,13 @@ class HomePage extends StatelessWidget { const IconAndDetail(Icons.calendar_today, 'October 30'), const IconAndDetail(Icons.location_city, 'San Francisco'), Consumer( - builder: (context, appState, _) => AuthFunc( - loggedIn: appState.loggedIn, - signOut: () { - FirebaseAuth.instance.signOut(); - }), + builder: + (context, appState, _) => AuthFunc( + loggedIn: appState.loggedIn, + signOut: () { + FirebaseAuth.instance.signOut(); + }, + ), ), const Divider( height: 8, @@ -46,19 +46,21 @@ class HomePage extends StatelessWidget { 'Join us for a day full of Firebase Workshops and Pizza!', ), Consumer( - builder: (context, appState, _) => Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - if (appState.loggedIn) ...[ - const Header('Discussion'), - GuestBook( - addMessage: (message) => - appState.addMessageToGuestBook(message), - messages: appState.guestBookMessages, - ), - ], - ], - ), + builder: + (context, appState, _) => Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + if (appState.loggedIn) ...[ + const Header('Discussion'), + GuestBook( + addMessage: + (message) => + appState.addMessageToGuestBook(message), + messages: appState.guestBookMessages, + ), + ], + ], + ), ), ], ), diff --git a/firebase-get-to-know-flutter/step_07/lib/main.dart b/firebase-get-to-know-flutter/step_07/lib/main.dart index 61ea3eaac3..ab9c6b4870 100644 --- a/firebase-get-to-know-flutter/step_07/lib/main.dart +++ b/firebase-get-to-know-flutter/step_07/lib/main.dart @@ -14,10 +14,12 @@ import 'home_page.dart'; void main() { WidgetsFlutterBinding.ensureInitialized(); - runApp(ChangeNotifierProvider( - create: (context) => ApplicationState(), - builder: ((context, child) => const App()), - )); + runApp( + ChangeNotifierProvider( + create: (context) => ApplicationState(), + builder: ((context, child) => const App()), + ), + ); } final _router = GoRouter( @@ -34,9 +36,7 @@ final _router = GoRouter( ForgotPasswordAction(((context, email) { final uri = Uri( path: '/sign-in/forgot-password', - queryParameters: { - 'email': email, - }, + queryParameters: {'email': email}, ); context.push(uri.toString()); })), @@ -44,7 +44,7 @@ final _router = GoRouter( final user = switch (state) { SignedIn state => state.user, UserCreated state => state.credential.user, - _ => null + _ => null, }; if (user == null) { return; @@ -55,8 +55,10 @@ final _router = GoRouter( if (!user.emailVerified) { user.sendEmailVerification(); const snackBar = SnackBar( - content: Text( - 'Please check your email to verify your email address')); + content: Text( + 'Please check your email to verify your email address', + ), + ); ScaffoldMessenger.of(context).showSnackBar(snackBar); } context.pushReplacement('/'); @@ -103,13 +105,11 @@ class App extends StatelessWidget { return MaterialApp.router( title: 'Firebase Meetup', theme: ThemeData( - buttonTheme: Theme.of(context).buttonTheme.copyWith( - highlightColor: Colors.deepPurple, - ), + buttonTheme: Theme.of( + context, + ).buttonTheme.copyWith(highlightColor: Colors.deepPurple), colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple), - textTheme: GoogleFonts.robotoTextTheme( - Theme.of(context).textTheme, - ), + textTheme: GoogleFonts.robotoTextTheme(Theme.of(context).textTheme), visualDensity: VisualDensity.adaptivePlatformDensity, useMaterial3: true, ), diff --git a/firebase-get-to-know-flutter/step_07/lib/src/authentication.dart b/firebase-get-to-know-flutter/step_07/lib/src/authentication.dart index 89ad31ba22..a094b484b8 100644 --- a/firebase-get-to-know-flutter/step_07/lib/src/authentication.dart +++ b/firebase-get-to-know-flutter/step_07/lib/src/authentication.dart @@ -8,11 +8,7 @@ import 'package:go_router/go_router.dart'; import 'widgets.dart'; class AuthFunc extends StatelessWidget { - const AuthFunc({ - super.key, - required this.loggedIn, - required this.signOut, - }); + const AuthFunc({super.key, required this.loggedIn, required this.signOut}); final bool loggedIn; final void Function() signOut; @@ -24,21 +20,24 @@ class AuthFunc extends StatelessWidget { Padding( padding: const EdgeInsets.only(left: 24, bottom: 8), child: StyledButton( + onPressed: () { + !loggedIn ? context.push('/sign-in') : signOut(); + }, + child: !loggedIn ? const Text('RSVP') : const Text('Logout'), + ), + ), + Visibility( + visible: loggedIn, + child: Padding( + padding: const EdgeInsets.only(left: 24, bottom: 8), + child: StyledButton( onPressed: () { - !loggedIn ? context.push('/sign-in') : signOut(); + context.push('/profile'); }, - child: !loggedIn ? const Text('RSVP') : const Text('Logout')), + child: const Text('Profile'), + ), + ), ), - Visibility( - visible: loggedIn, - child: Padding( - padding: const EdgeInsets.only(left: 24, bottom: 8), - child: StyledButton( - onPressed: () { - context.push('/profile'); - }, - child: const Text('Profile')), - )) ], ); } diff --git a/firebase-get-to-know-flutter/step_07/lib/src/widgets.dart b/firebase-get-to-know-flutter/step_07/lib/src/widgets.dart index 29886a3802..3f89c9d797 100644 --- a/firebase-get-to-know-flutter/step_07/lib/src/widgets.dart +++ b/firebase-get-to-know-flutter/step_07/lib/src/widgets.dart @@ -10,12 +10,9 @@ class Header extends StatelessWidget { @override Widget build(BuildContext context) => Padding( - padding: const EdgeInsets.all(8.0), - child: Text( - heading, - style: const TextStyle(fontSize: 24), - ), - ); + padding: const EdgeInsets.all(8.0), + child: Text(heading, style: const TextStyle(fontSize: 24)), + ); } class Paragraph extends StatelessWidget { @@ -23,12 +20,9 @@ class Paragraph extends StatelessWidget { final String content; @override Widget build(BuildContext context) => Padding( - padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 4), - child: Text( - content, - style: const TextStyle(fontSize: 18), - ), - ); + padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 4), + child: Text(content, style: const TextStyle(fontSize: 18)), + ); } class IconAndDetail extends StatelessWidget { @@ -38,18 +32,15 @@ class IconAndDetail extends StatelessWidget { @override Widget build(BuildContext context) => Padding( - padding: const EdgeInsets.all(8.0), - child: Row( - children: [ - Icon(icon), - const SizedBox(width: 8), - Text( - detail, - style: const TextStyle(fontSize: 18), - ) - ], - ), - ); + padding: const EdgeInsets.all(8.0), + child: Row( + children: [ + Icon(icon), + const SizedBox(width: 8), + Text(detail, style: const TextStyle(fontSize: 18)), + ], + ), + ); } class StyledButton extends StatelessWidget { @@ -59,9 +50,10 @@ class StyledButton extends StatelessWidget { @override Widget build(BuildContext context) => OutlinedButton( - style: OutlinedButton.styleFrom( - side: const BorderSide(color: Colors.deepPurple)), - onPressed: onPressed, - child: child, - ); + style: OutlinedButton.styleFrom( + side: const BorderSide(color: Colors.deepPurple), + ), + onPressed: onPressed, + child: child, + ); } diff --git a/firebase-get-to-know-flutter/step_07/pubspec.yaml b/firebase-get-to-know-flutter/step_07/pubspec.yaml index 5efd9cd4f0..d7f35cbe41 100644 --- a/firebase-get-to-know-flutter/step_07/pubspec.yaml +++ b/firebase-get-to-know-flutter/step_07/pubspec.yaml @@ -20,7 +20,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev version: 1.0.0+1 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 # Dependencies specify other packages that your package needs in order to work. # To automatically upgrade your package dependencies to the latest versions diff --git a/firebase-get-to-know-flutter/step_09/lib/app_state.dart b/firebase-get-to-know-flutter/step_09/lib/app_state.dart index c15d361a79..29c576a330 100644 --- a/firebase-get-to-know-flutter/step_09/lib/app_state.dart +++ b/firebase-get-to-know-flutter/step_09/lib/app_state.dart @@ -79,20 +79,19 @@ class ApplicationState extends ChangeNotifier { Future init() async { await Firebase.initializeApp( - options: DefaultFirebaseOptions.currentPlatform); + options: DefaultFirebaseOptions.currentPlatform, + ); - FirebaseUIAuth.configureProviders([ - EmailAuthProvider(), - ]); + FirebaseUIAuth.configureProviders([EmailAuthProvider()]); FirebaseFirestore.instance .collection('attendees') .where('attending', isEqualTo: true) .snapshots() .listen((snapshot) { - _attendees = snapshot.docs.length; - notifyListeners(); - }); + _attendees = snapshot.docs.length; + notifyListeners(); + }); FirebaseAuth.instance.userChanges().listen((user) { if (user != null) { @@ -103,33 +102,33 @@ class ApplicationState extends ChangeNotifier { .orderBy('timestamp', descending: true) .snapshots() .listen((snapshot) { - _guestBookMessages = []; - for (final document in snapshot.docs) { - _guestBookMessages.add( - GuestBookMessage( - name: document.data()['name'] as String, - message: document.data()['text'] as String, - ), - ); - } - notifyListeners(); - }); + _guestBookMessages = []; + for (final document in snapshot.docs) { + _guestBookMessages.add( + GuestBookMessage( + name: document.data()['name'] as String, + message: document.data()['text'] as String, + ), + ); + } + notifyListeners(); + }); _attendingSubscription = FirebaseFirestore.instance .collection('attendees') .doc(user.uid) .snapshots() .listen((snapshot) { - if (snapshot.data() != null) { - if (snapshot.data()!['attending'] as bool) { - _attending = Attending.yes; - } else { - _attending = Attending.no; - } - } else { - _attending = Attending.unknown; - } - notifyListeners(); - }); + if (snapshot.data() != null) { + if (snapshot.data()!['attending'] as bool) { + _attending = Attending.yes; + } else { + _attending = Attending.no; + } + } else { + _attending = Attending.unknown; + } + notifyListeners(); + }); } else { _loggedIn = false; _emailVerified = false; @@ -159,10 +158,10 @@ class ApplicationState extends ChangeNotifier { return FirebaseFirestore.instance .collection('guestbook') .add({ - 'text': message, - 'timestamp': DateTime.now().millisecondsSinceEpoch, - 'name': FirebaseAuth.instance.currentUser!.displayName, - 'userId': FirebaseAuth.instance.currentUser!.uid, - }); + 'text': message, + 'timestamp': DateTime.now().millisecondsSinceEpoch, + 'name': FirebaseAuth.instance.currentUser!.displayName, + 'userId': FirebaseAuth.instance.currentUser!.uid, + }); } } diff --git a/firebase-get-to-know-flutter/step_09/lib/firebase_options.dart b/firebase-get-to-know-flutter/step_09/lib/firebase_options.dart index a070833f2c..d2ab5def55 100644 --- a/firebase-get-to-know-flutter/step_09/lib/firebase_options.dart +++ b/firebase-get-to-know-flutter/step_09/lib/firebase_options.dart @@ -29,7 +29,8 @@ class DefaultFirebaseOptions { return macos; default: throw UnsupportedError( - 'DefaultFirebaseOptions are not supported for this platform.'); + 'DefaultFirebaseOptions are not supported for this platform.', + ); } } diff --git a/firebase-get-to-know-flutter/step_09/lib/home_page.dart b/firebase-get-to-know-flutter/step_09/lib/home_page.dart index d8669bf845..5e90d6ed86 100644 --- a/firebase-get-to-know-flutter/step_09/lib/home_page.dart +++ b/firebase-get-to-know-flutter/step_09/lib/home_page.dart @@ -19,26 +19,26 @@ class HomePage extends StatelessWidget { @override Widget build(BuildContext context) { return Scaffold( - appBar: AppBar( - title: const Text('Firebase Meetup'), - ), + appBar: AppBar(title: const Text('Firebase Meetup')), body: ListView( children: [ Image.asset('assets/codelab.png'), const SizedBox(height: 8), Consumer( - builder: (context, appState, _) => - IconAndDetail(Icons.calendar_today, appState.eventDate), + builder: + (context, appState, _) => + IconAndDetail(Icons.calendar_today, appState.eventDate), ), const IconAndDetail(Icons.location_city, 'San Francisco'), Consumer( - builder: (context, appState, _) => AuthFunc( - loggedIn: appState.loggedIn, - signOut: () { - FirebaseAuth.instance.signOut(); - }, - enableFreeSwag: appState.enableFreeSwag, - ), + builder: + (context, appState, _) => AuthFunc( + loggedIn: appState.loggedIn, + signOut: () { + FirebaseAuth.instance.signOut(); + }, + enableFreeSwag: appState.enableFreeSwag, + ), ), const Divider( height: 8, @@ -49,33 +49,34 @@ class HomePage extends StatelessWidget { ), const Header("What we'll be doing"), Consumer( - builder: (context, appState, _) => Paragraph( - appState.callToAction, - ), + builder: (context, appState, _) => Paragraph(appState.callToAction), ), Consumer( - builder: (context, appState, _) => Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - switch (appState.attendees) { - 1 => const Paragraph('1 person going'), - >= 2 => Paragraph('${appState.attendees} people going'), - _ => const Paragraph('No one going'), - }, - if (appState.loggedIn) ...[ - YesNoSelection( - state: appState.attending, - onSelection: (attending) => appState.attending = attending, - ), - const Header('Discussion'), - GuestBook( - addMessage: (message) => - appState.addMessageToGuestBook(message), - messages: appState.guestBookMessages, - ), - ], - ], - ), + builder: + (context, appState, _) => Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + switch (appState.attendees) { + 1 => const Paragraph('1 person going'), + >= 2 => Paragraph('${appState.attendees} people going'), + _ => const Paragraph('No one going'), + }, + if (appState.loggedIn) ...[ + YesNoSelection( + state: appState.attending, + onSelection: + (attending) => appState.attending = attending, + ), + const Header('Discussion'), + GuestBook( + addMessage: + (message) => + appState.addMessageToGuestBook(message), + messages: appState.guestBookMessages, + ), + ], + ], + ), ), ], ), diff --git a/firebase-get-to-know-flutter/step_09/lib/main.dart b/firebase-get-to-know-flutter/step_09/lib/main.dart index a863f781a3..87de22cd29 100644 --- a/firebase-get-to-know-flutter/step_09/lib/main.dart +++ b/firebase-get-to-know-flutter/step_09/lib/main.dart @@ -14,10 +14,12 @@ import 'home_page.dart'; void main() { WidgetsFlutterBinding.ensureInitialized(); - runApp(ChangeNotifierProvider( - create: (context) => ApplicationState(), - builder: ((context, child) => const App()), - )); + runApp( + ChangeNotifierProvider( + create: (context) => ApplicationState(), + builder: ((context, child) => const App()), + ), + ); } final _router = GoRouter( @@ -34,9 +36,7 @@ final _router = GoRouter( ForgotPasswordAction(((context, email) { final uri = Uri( path: '/sign-in/forgot-password', - queryParameters: { - 'email': email, - }, + queryParameters: {'email': email}, ); context.push(uri.toString()); })), @@ -44,7 +44,7 @@ final _router = GoRouter( final user = switch (state) { SignedIn state => state.user, UserCreated state => state.credential.user, - _ => null + _ => null, }; if (user == null) { return; @@ -55,8 +55,10 @@ final _router = GoRouter( if (!user.emailVerified) { user.sendEmailVerification(); const snackBar = SnackBar( - content: Text( - 'Please check your email to verify your email address')); + content: Text( + 'Please check your email to verify your email address', + ), + ); ScaffoldMessenger.of(context).showSnackBar(snackBar); } context.pushReplacement('/'); @@ -81,27 +83,27 @@ final _router = GoRouter( path: 'profile', builder: (context, state) { return Consumer( - builder: (context, appState, _) => ProfileScreen( - key: ValueKey(appState.emailVerified), - providers: const [], - actions: [ - SignedOutAction( - ((context) { - context.pushReplacement('/'); - }), + builder: + (context, appState, _) => ProfileScreen( + key: ValueKey(appState.emailVerified), + providers: const [], + actions: [ + SignedOutAction(((context) { + context.pushReplacement('/'); + })), + ], + children: [ + Visibility( + visible: !appState.emailVerified, + child: OutlinedButton( + child: const Text('Recheck Verification State'), + onPressed: () { + appState.refreshLoggedInUser(); + }, + ), + ), + ], ), - ], - children: [ - Visibility( - visible: !appState.emailVerified, - child: OutlinedButton( - child: const Text('Recheck Verification State'), - onPressed: () { - appState.refreshLoggedInUser(); - }, - )) - ], - ), ); }, ), @@ -118,13 +120,11 @@ class App extends StatelessWidget { return MaterialApp.router( title: 'Firebase Meetup', theme: ThemeData( - buttonTheme: Theme.of(context).buttonTheme.copyWith( - highlightColor: Colors.deepPurple, - ), + buttonTheme: Theme.of( + context, + ).buttonTheme.copyWith(highlightColor: Colors.deepPurple), colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple), - textTheme: GoogleFonts.robotoTextTheme( - Theme.of(context).textTheme, - ), + textTheme: GoogleFonts.robotoTextTheme(Theme.of(context).textTheme), visualDensity: VisualDensity.adaptivePlatformDensity, useMaterial3: true, ), diff --git a/firebase-get-to-know-flutter/step_09/lib/src/authentication.dart b/firebase-get-to-know-flutter/step_09/lib/src/authentication.dart index fd1b97a65a..651f765836 100644 --- a/firebase-get-to-know-flutter/step_09/lib/src/authentication.dart +++ b/firebase-get-to-know-flutter/step_09/lib/src/authentication.dart @@ -26,31 +26,36 @@ class AuthFunc extends StatelessWidget { Padding( padding: const EdgeInsets.only(left: 24, bottom: 8), child: StyledButton( + onPressed: () { + !loggedIn ? context.push('/sign-in') : signOut(); + }, + child: !loggedIn ? const Text('RSVP') : const Text('Logout'), + ), + ), + Visibility( + visible: loggedIn, + child: Padding( + padding: const EdgeInsets.only(left: 24, bottom: 8), + child: StyledButton( onPressed: () { - !loggedIn ? context.push('/sign-in') : signOut(); + context.push('/profile'); }, - child: !loggedIn ? const Text('RSVP') : const Text('Logout')), + child: const Text('Profile'), + ), + ), ), Visibility( - visible: loggedIn, - child: Padding( - padding: const EdgeInsets.only(left: 24, bottom: 8), - child: StyledButton( - onPressed: () { - context.push('/profile'); - }, - child: const Text('Profile')), - )), - Visibility( - visible: enableFreeSwag, - child: Padding( - padding: const EdgeInsets.only(left: 24, bottom: 8), - child: StyledButton( - onPressed: () { - throw Exception('free swag unimplemented'); - }, - child: const Text('Free swag!')), - )), + visible: enableFreeSwag, + child: Padding( + padding: const EdgeInsets.only(left: 24, bottom: 8), + child: StyledButton( + onPressed: () { + throw Exception('free swag unimplemented'); + }, + child: const Text('Free swag!'), + ), + ), + ), ], ); } diff --git a/firebase-get-to-know-flutter/step_09/lib/src/widgets.dart b/firebase-get-to-know-flutter/step_09/lib/src/widgets.dart index 29886a3802..3f89c9d797 100644 --- a/firebase-get-to-know-flutter/step_09/lib/src/widgets.dart +++ b/firebase-get-to-know-flutter/step_09/lib/src/widgets.dart @@ -10,12 +10,9 @@ class Header extends StatelessWidget { @override Widget build(BuildContext context) => Padding( - padding: const EdgeInsets.all(8.0), - child: Text( - heading, - style: const TextStyle(fontSize: 24), - ), - ); + padding: const EdgeInsets.all(8.0), + child: Text(heading, style: const TextStyle(fontSize: 24)), + ); } class Paragraph extends StatelessWidget { @@ -23,12 +20,9 @@ class Paragraph extends StatelessWidget { final String content; @override Widget build(BuildContext context) => Padding( - padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 4), - child: Text( - content, - style: const TextStyle(fontSize: 18), - ), - ); + padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 4), + child: Text(content, style: const TextStyle(fontSize: 18)), + ); } class IconAndDetail extends StatelessWidget { @@ -38,18 +32,15 @@ class IconAndDetail extends StatelessWidget { @override Widget build(BuildContext context) => Padding( - padding: const EdgeInsets.all(8.0), - child: Row( - children: [ - Icon(icon), - const SizedBox(width: 8), - Text( - detail, - style: const TextStyle(fontSize: 18), - ) - ], - ), - ); + padding: const EdgeInsets.all(8.0), + child: Row( + children: [ + Icon(icon), + const SizedBox(width: 8), + Text(detail, style: const TextStyle(fontSize: 18)), + ], + ), + ); } class StyledButton extends StatelessWidget { @@ -59,9 +50,10 @@ class StyledButton extends StatelessWidget { @override Widget build(BuildContext context) => OutlinedButton( - style: OutlinedButton.styleFrom( - side: const BorderSide(color: Colors.deepPurple)), - onPressed: onPressed, - child: child, - ); + style: OutlinedButton.styleFrom( + side: const BorderSide(color: Colors.deepPurple), + ), + onPressed: onPressed, + child: child, + ); } diff --git a/firebase-get-to-know-flutter/step_09/pubspec.yaml b/firebase-get-to-know-flutter/step_09/pubspec.yaml index 5efd9cd4f0..d7f35cbe41 100644 --- a/firebase-get-to-know-flutter/step_09/pubspec.yaml +++ b/firebase-get-to-know-flutter/step_09/pubspec.yaml @@ -20,7 +20,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev version: 1.0.0+1 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 # Dependencies specify other packages that your package needs in order to work. # To automatically upgrade your package dependencies to the latest versions diff --git a/forge2d_game/step_02/lib/main.dart b/forge2d_game/step_02/lib/main.dart index e1b05964ed..ce03c23777 100644 --- a/forge2d_game/step_02/lib/main.dart +++ b/forge2d_game/step_02/lib/main.dart @@ -6,9 +6,5 @@ import 'package:flame/game.dart'; import 'package:flutter/material.dart'; void main() { - runApp( - GameWidget.controlled( - gameFactory: FlameGame.new, - ), - ); + runApp(GameWidget.controlled(gameFactory: FlameGame.new)); } diff --git a/forge2d_game/step_02/pubspec.yaml b/forge2d_game/step_02/pubspec.yaml index 77d1373b4c..3f582a3815 100644 --- a/forge2d_game/step_02/pubspec.yaml +++ b/forge2d_game/step_02/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: 'none' version: 0.1.0 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 dependencies: flutter: diff --git a/forge2d_game/step_03/lib/components/background.dart b/forge2d_game/step_03/lib/components/background.dart index 2263d589c2..d61d4635c2 100644 --- a/forge2d_game/step_03/lib/components/background.dart +++ b/forge2d_game/step_03/lib/components/background.dart @@ -8,18 +8,17 @@ import 'game.dart'; class Background extends SpriteComponent with HasGameReference { Background({required super.sprite}) - : super( - anchor: Anchor.center, - position: Vector2(0, 0), - ); + : super(anchor: Anchor.center, position: Vector2(0, 0)); @override void onMount() { super.onMount(); - size = Vector2.all(max( - game.camera.visibleWorldRect.width, - game.camera.visibleWorldRect.height, - )); + size = Vector2.all( + max( + game.camera.visibleWorldRect.width, + game.camera.visibleWorldRect.height, + ), + ); } } diff --git a/forge2d_game/step_03/lib/components/game.dart b/forge2d_game/step_03/lib/components/game.dart index 1698a4a2fb..5747f72b64 100644 --- a/forge2d_game/step_03/lib/components/game.dart +++ b/forge2d_game/step_03/lib/components/game.dart @@ -12,10 +12,10 @@ import 'background.dart'; class MyPhysicsGame extends Forge2DGame { MyPhysicsGame() - : super( - gravity: Vector2(0, 10), - camera: CameraComponent.withFixedResolution(width: 800, height: 600), - ); + : super( + gravity: Vector2(0, 10), + camera: CameraComponent.withFixedResolution(width: 800, height: 600), + ); late final XmlSpriteSheet aliens; late final XmlSpriteSheet elements; diff --git a/forge2d_game/step_03/lib/main.dart b/forge2d_game/step_03/lib/main.dart index 8e82ff7fb6..37929857ee 100644 --- a/forge2d_game/step_03/lib/main.dart +++ b/forge2d_game/step_03/lib/main.dart @@ -8,9 +8,5 @@ import 'package:flutter/material.dart'; import 'components/game.dart'; void main() { - runApp( - GameWidget.controlled( - gameFactory: MyPhysicsGame.new, - ), - ); + runApp(GameWidget.controlled(gameFactory: MyPhysicsGame.new)); } diff --git a/forge2d_game/step_03/pubspec.yaml b/forge2d_game/step_03/pubspec.yaml index 016d97b0b2..c7c25a2f6a 100644 --- a/forge2d_game/step_03/pubspec.yaml +++ b/forge2d_game/step_03/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: 'none' version: 0.1.0 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 dependencies: flutter: diff --git a/forge2d_game/step_04/lib/components/background.dart b/forge2d_game/step_04/lib/components/background.dart index 2263d589c2..d61d4635c2 100644 --- a/forge2d_game/step_04/lib/components/background.dart +++ b/forge2d_game/step_04/lib/components/background.dart @@ -8,18 +8,17 @@ import 'game.dart'; class Background extends SpriteComponent with HasGameReference { Background({required super.sprite}) - : super( - anchor: Anchor.center, - position: Vector2(0, 0), - ); + : super(anchor: Anchor.center, position: Vector2(0, 0)); @override void onMount() { super.onMount(); - size = Vector2.all(max( - game.camera.visibleWorldRect.width, - game.camera.visibleWorldRect.height, - )); + size = Vector2.all( + max( + game.camera.visibleWorldRect.width, + game.camera.visibleWorldRect.height, + ), + ); } } diff --git a/forge2d_game/step_04/lib/components/game.dart b/forge2d_game/step_04/lib/components/game.dart index 2e66855871..0dc2806902 100644 --- a/forge2d_game/step_04/lib/components/game.dart +++ b/forge2d_game/step_04/lib/components/game.dart @@ -13,10 +13,10 @@ import 'ground.dart'; class MyPhysicsGame extends Forge2DGame { MyPhysicsGame() - : super( - gravity: Vector2(0, 10), - camera: CameraComponent.withFixedResolution(width: 800, height: 600), - ); + : super( + gravity: Vector2(0, 10), + camera: CameraComponent.withFixedResolution(width: 800, height: 600), + ); late final XmlSpriteSheet aliens; late final XmlSpriteSheet elements; @@ -52,9 +52,11 @@ class MyPhysicsGame extends Forge2DGame { Future addGround() { return world.addAll([ - for (var x = camera.visibleWorldRect.left; - x < camera.visibleWorldRect.right + groundSize; - x += groundSize) + for ( + var x = camera.visibleWorldRect.left; + x < camera.visibleWorldRect.right + groundSize; + x += groundSize + ) Ground( Vector2(x, (camera.visibleWorldRect.height - groundSize) / 2), tiles.getSprite('grass.png'), diff --git a/forge2d_game/step_04/lib/components/ground.dart b/forge2d_game/step_04/lib/components/ground.dart index c1346bf788..2a4fef62e4 100644 --- a/forge2d_game/step_04/lib/components/ground.dart +++ b/forge2d_game/step_04/lib/components/ground.dart @@ -9,24 +9,25 @@ const groundSize = 7.0; class Ground extends BodyComponent { Ground(Vector2 position, Sprite sprite) - : super( - renderBody: false, - bodyDef: BodyDef() - ..position = position - ..type = BodyType.static, - fixtureDefs: [ - FixtureDef( - PolygonShape()..setAsBoxXY(groundSize / 2, groundSize / 2), - friction: 0.3, - ) - ], - children: [ - SpriteComponent( - anchor: Anchor.center, - sprite: sprite, - size: Vector2.all(groundSize), - position: Vector2(0, 0), - ), - ], - ); + : super( + renderBody: false, + bodyDef: + BodyDef() + ..position = position + ..type = BodyType.static, + fixtureDefs: [ + FixtureDef( + PolygonShape()..setAsBoxXY(groundSize / 2, groundSize / 2), + friction: 0.3, + ), + ], + children: [ + SpriteComponent( + anchor: Anchor.center, + sprite: sprite, + size: Vector2.all(groundSize), + position: Vector2(0, 0), + ), + ], + ); } diff --git a/forge2d_game/step_04/lib/main.dart b/forge2d_game/step_04/lib/main.dart index 8e82ff7fb6..37929857ee 100644 --- a/forge2d_game/step_04/lib/main.dart +++ b/forge2d_game/step_04/lib/main.dart @@ -8,9 +8,5 @@ import 'package:flutter/material.dart'; import 'components/game.dart'; void main() { - runApp( - GameWidget.controlled( - gameFactory: MyPhysicsGame.new, - ), - ); + runApp(GameWidget.controlled(gameFactory: MyPhysicsGame.new)); } diff --git a/forge2d_game/step_04/pubspec.yaml b/forge2d_game/step_04/pubspec.yaml index 016d97b0b2..c7c25a2f6a 100644 --- a/forge2d_game/step_04/pubspec.yaml +++ b/forge2d_game/step_04/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: 'none' version: 0.1.0 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 dependencies: flutter: diff --git a/forge2d_game/step_05/bin/generate_brick_file_names.dart b/forge2d_game/step_05/bin/generate_brick_file_names.dart index e315ec899a..ba1ad0af27 100644 --- a/forge2d_game/step_05/bin/generate_brick_file_names.dart +++ b/forge2d_game/step_05/bin/generate_brick_file_names.dart @@ -30,11 +30,12 @@ class Rect extends Equatable { final int y; final int width; final int height; - const Rect( - {required this.x, - required this.y, - required this.width, - required this.height}); + const Rect({ + required this.x, + required this.y, + required this.width, + required this.height, + }); Size get size => Size(width, height); diff --git a/forge2d_game/step_05/lib/components/background.dart b/forge2d_game/step_05/lib/components/background.dart index 2263d589c2..d61d4635c2 100644 --- a/forge2d_game/step_05/lib/components/background.dart +++ b/forge2d_game/step_05/lib/components/background.dart @@ -8,18 +8,17 @@ import 'game.dart'; class Background extends SpriteComponent with HasGameReference { Background({required super.sprite}) - : super( - anchor: Anchor.center, - position: Vector2(0, 0), - ); + : super(anchor: Anchor.center, position: Vector2(0, 0)); @override void onMount() { super.onMount(); - size = Vector2.all(max( - game.camera.visibleWorldRect.width, - game.camera.visibleWorldRect.height, - )); + size = Vector2.all( + max( + game.camera.visibleWorldRect.width, + game.camera.visibleWorldRect.height, + ), + ); } } diff --git a/forge2d_game/step_05/lib/components/brick.dart b/forge2d_game/step_05/lib/components/brick.dart index 4f460405c4..123bcf2065 100644 --- a/forge2d_game/step_05/lib/components/brick.dart +++ b/forge2d_game/step_05/lib/components/brick.dart @@ -47,205 +47,205 @@ enum BrickDamage { none, some, lots } Map brickFileNames(BrickType type, BrickSize size) { return switch ((type, size)) { (BrickType.explosive, BrickSize.size140x70) => { - BrickDamage.none: 'elementExplosive009.png', - BrickDamage.some: 'elementExplosive012.png', - BrickDamage.lots: 'elementExplosive050.png', - }, + BrickDamage.none: 'elementExplosive009.png', + BrickDamage.some: 'elementExplosive012.png', + BrickDamage.lots: 'elementExplosive050.png', + }, (BrickType.glass, BrickSize.size140x70) => { - BrickDamage.none: 'elementGlass010.png', - BrickDamage.some: 'elementGlass013.png', - BrickDamage.lots: 'elementGlass048.png', - }, + BrickDamage.none: 'elementGlass010.png', + BrickDamage.some: 'elementGlass013.png', + BrickDamage.lots: 'elementGlass048.png', + }, (BrickType.metal, BrickSize.size140x70) => { - BrickDamage.none: 'elementMetal009.png', - BrickDamage.some: 'elementMetal012.png', - BrickDamage.lots: 'elementMetal050.png', - }, + BrickDamage.none: 'elementMetal009.png', + BrickDamage.some: 'elementMetal012.png', + BrickDamage.lots: 'elementMetal050.png', + }, (BrickType.stone, BrickSize.size140x70) => { - BrickDamage.none: 'elementStone009.png', - BrickDamage.some: 'elementStone012.png', - BrickDamage.lots: 'elementStone047.png', - }, + BrickDamage.none: 'elementStone009.png', + BrickDamage.some: 'elementStone012.png', + BrickDamage.lots: 'elementStone047.png', + }, (BrickType.wood, BrickSize.size140x70) => { - BrickDamage.none: 'elementWood011.png', - BrickDamage.some: 'elementWood014.png', - BrickDamage.lots: 'elementWood054.png', - }, + BrickDamage.none: 'elementWood011.png', + BrickDamage.some: 'elementWood014.png', + BrickDamage.lots: 'elementWood054.png', + }, (BrickType.explosive, BrickSize.size70x70) => { - BrickDamage.none: 'elementExplosive011.png', - BrickDamage.some: 'elementExplosive014.png', - BrickDamage.lots: 'elementExplosive049.png', - }, + BrickDamage.none: 'elementExplosive011.png', + BrickDamage.some: 'elementExplosive014.png', + BrickDamage.lots: 'elementExplosive049.png', + }, (BrickType.glass, BrickSize.size70x70) => { - BrickDamage.none: 'elementGlass011.png', - BrickDamage.some: 'elementGlass012.png', - BrickDamage.lots: 'elementGlass046.png', - }, + BrickDamage.none: 'elementGlass011.png', + BrickDamage.some: 'elementGlass012.png', + BrickDamage.lots: 'elementGlass046.png', + }, (BrickType.metal, BrickSize.size70x70) => { - BrickDamage.none: 'elementMetal011.png', - BrickDamage.some: 'elementMetal014.png', - BrickDamage.lots: 'elementMetal049.png', - }, + BrickDamage.none: 'elementMetal011.png', + BrickDamage.some: 'elementMetal014.png', + BrickDamage.lots: 'elementMetal049.png', + }, (BrickType.stone, BrickSize.size70x70) => { - BrickDamage.none: 'elementStone011.png', - BrickDamage.some: 'elementStone014.png', - BrickDamage.lots: 'elementStone046.png', - }, + BrickDamage.none: 'elementStone011.png', + BrickDamage.some: 'elementStone014.png', + BrickDamage.lots: 'elementStone046.png', + }, (BrickType.wood, BrickSize.size70x70) => { - BrickDamage.none: 'elementWood010.png', - BrickDamage.some: 'elementWood013.png', - BrickDamage.lots: 'elementWood045.png', - }, + BrickDamage.none: 'elementWood010.png', + BrickDamage.some: 'elementWood013.png', + BrickDamage.lots: 'elementWood045.png', + }, (BrickType.explosive, BrickSize.size220x70) => { - BrickDamage.none: 'elementExplosive013.png', - BrickDamage.some: 'elementExplosive016.png', - BrickDamage.lots: 'elementExplosive051.png', - }, + BrickDamage.none: 'elementExplosive013.png', + BrickDamage.some: 'elementExplosive016.png', + BrickDamage.lots: 'elementExplosive051.png', + }, (BrickType.glass, BrickSize.size220x70) => { - BrickDamage.none: 'elementGlass014.png', - BrickDamage.some: 'elementGlass017.png', - BrickDamage.lots: 'elementGlass049.png', - }, + BrickDamage.none: 'elementGlass014.png', + BrickDamage.some: 'elementGlass017.png', + BrickDamage.lots: 'elementGlass049.png', + }, (BrickType.metal, BrickSize.size220x70) => { - BrickDamage.none: 'elementMetal013.png', - BrickDamage.some: 'elementMetal016.png', - BrickDamage.lots: 'elementMetal051.png', - }, + BrickDamage.none: 'elementMetal013.png', + BrickDamage.some: 'elementMetal016.png', + BrickDamage.lots: 'elementMetal051.png', + }, (BrickType.stone, BrickSize.size220x70) => { - BrickDamage.none: 'elementStone013.png', - BrickDamage.some: 'elementStone016.png', - BrickDamage.lots: 'elementStone048.png', - }, + BrickDamage.none: 'elementStone013.png', + BrickDamage.some: 'elementStone016.png', + BrickDamage.lots: 'elementStone048.png', + }, (BrickType.wood, BrickSize.size220x70) => { - BrickDamage.none: 'elementWood012.png', - BrickDamage.some: 'elementWood015.png', - BrickDamage.lots: 'elementWood047.png', - }, + BrickDamage.none: 'elementWood012.png', + BrickDamage.some: 'elementWood015.png', + BrickDamage.lots: 'elementWood047.png', + }, (BrickType.explosive, BrickSize.size70x140) => { - BrickDamage.none: 'elementExplosive017.png', - BrickDamage.some: 'elementExplosive022.png', - BrickDamage.lots: 'elementExplosive052.png', - }, + BrickDamage.none: 'elementExplosive017.png', + BrickDamage.some: 'elementExplosive022.png', + BrickDamage.lots: 'elementExplosive052.png', + }, (BrickType.glass, BrickSize.size70x140) => { - BrickDamage.none: 'elementGlass018.png', - BrickDamage.some: 'elementGlass023.png', - BrickDamage.lots: 'elementGlass050.png', - }, + BrickDamage.none: 'elementGlass018.png', + BrickDamage.some: 'elementGlass023.png', + BrickDamage.lots: 'elementGlass050.png', + }, (BrickType.metal, BrickSize.size70x140) => { - BrickDamage.none: 'elementMetal017.png', - BrickDamage.some: 'elementMetal022.png', - BrickDamage.lots: 'elementMetal052.png', - }, + BrickDamage.none: 'elementMetal017.png', + BrickDamage.some: 'elementMetal022.png', + BrickDamage.lots: 'elementMetal052.png', + }, (BrickType.stone, BrickSize.size70x140) => { - BrickDamage.none: 'elementStone017.png', - BrickDamage.some: 'elementStone022.png', - BrickDamage.lots: 'elementStone049.png', - }, + BrickDamage.none: 'elementStone017.png', + BrickDamage.some: 'elementStone022.png', + BrickDamage.lots: 'elementStone049.png', + }, (BrickType.wood, BrickSize.size70x140) => { - BrickDamage.none: 'elementWood016.png', - BrickDamage.some: 'elementWood021.png', - BrickDamage.lots: 'elementWood048.png', - }, + BrickDamage.none: 'elementWood016.png', + BrickDamage.some: 'elementWood021.png', + BrickDamage.lots: 'elementWood048.png', + }, (BrickType.explosive, BrickSize.size140x140) => { - BrickDamage.none: 'elementExplosive018.png', - BrickDamage.some: 'elementExplosive023.png', - BrickDamage.lots: 'elementExplosive053.png', - }, + BrickDamage.none: 'elementExplosive018.png', + BrickDamage.some: 'elementExplosive023.png', + BrickDamage.lots: 'elementExplosive053.png', + }, (BrickType.glass, BrickSize.size140x140) => { - BrickDamage.none: 'elementGlass019.png', - BrickDamage.some: 'elementGlass024.png', - BrickDamage.lots: 'elementGlass051.png', - }, + BrickDamage.none: 'elementGlass019.png', + BrickDamage.some: 'elementGlass024.png', + BrickDamage.lots: 'elementGlass051.png', + }, (BrickType.metal, BrickSize.size140x140) => { - BrickDamage.none: 'elementMetal018.png', - BrickDamage.some: 'elementMetal023.png', - BrickDamage.lots: 'elementMetal053.png', - }, + BrickDamage.none: 'elementMetal018.png', + BrickDamage.some: 'elementMetal023.png', + BrickDamage.lots: 'elementMetal053.png', + }, (BrickType.stone, BrickSize.size140x140) => { - BrickDamage.none: 'elementStone018.png', - BrickDamage.some: 'elementStone023.png', - BrickDamage.lots: 'elementStone050.png', - }, + BrickDamage.none: 'elementStone018.png', + BrickDamage.some: 'elementStone023.png', + BrickDamage.lots: 'elementStone050.png', + }, (BrickType.wood, BrickSize.size140x140) => { - BrickDamage.none: 'elementWood017.png', - BrickDamage.some: 'elementWood022.png', - BrickDamage.lots: 'elementWood049.png', - }, + BrickDamage.none: 'elementWood017.png', + BrickDamage.some: 'elementWood022.png', + BrickDamage.lots: 'elementWood049.png', + }, (BrickType.explosive, BrickSize.size220x140) => { - BrickDamage.none: 'elementExplosive019.png', - BrickDamage.some: 'elementExplosive024.png', - BrickDamage.lots: 'elementExplosive054.png', - }, + BrickDamage.none: 'elementExplosive019.png', + BrickDamage.some: 'elementExplosive024.png', + BrickDamage.lots: 'elementExplosive054.png', + }, (BrickType.glass, BrickSize.size220x140) => { - BrickDamage.none: 'elementGlass020.png', - BrickDamage.some: 'elementGlass025.png', - BrickDamage.lots: 'elementGlass052.png', - }, + BrickDamage.none: 'elementGlass020.png', + BrickDamage.some: 'elementGlass025.png', + BrickDamage.lots: 'elementGlass052.png', + }, (BrickType.metal, BrickSize.size220x140) => { - BrickDamage.none: 'elementMetal019.png', - BrickDamage.some: 'elementMetal024.png', - BrickDamage.lots: 'elementMetal054.png', - }, + BrickDamage.none: 'elementMetal019.png', + BrickDamage.some: 'elementMetal024.png', + BrickDamage.lots: 'elementMetal054.png', + }, (BrickType.stone, BrickSize.size220x140) => { - BrickDamage.none: 'elementStone019.png', - BrickDamage.some: 'elementStone024.png', - BrickDamage.lots: 'elementStone051.png', - }, + BrickDamage.none: 'elementStone019.png', + BrickDamage.some: 'elementStone024.png', + BrickDamage.lots: 'elementStone051.png', + }, (BrickType.wood, BrickSize.size220x140) => { - BrickDamage.none: 'elementWood018.png', - BrickDamage.some: 'elementWood023.png', - BrickDamage.lots: 'elementWood050.png', - }, + BrickDamage.none: 'elementWood018.png', + BrickDamage.some: 'elementWood023.png', + BrickDamage.lots: 'elementWood050.png', + }, (BrickType.explosive, BrickSize.size70x220) => { - BrickDamage.none: 'elementExplosive020.png', - BrickDamage.some: 'elementExplosive025.png', - BrickDamage.lots: 'elementExplosive055.png', - }, + BrickDamage.none: 'elementExplosive020.png', + BrickDamage.some: 'elementExplosive025.png', + BrickDamage.lots: 'elementExplosive055.png', + }, (BrickType.glass, BrickSize.size70x220) => { - BrickDamage.none: 'elementGlass021.png', - BrickDamage.some: 'elementGlass026.png', - BrickDamage.lots: 'elementGlass053.png', - }, + BrickDamage.none: 'elementGlass021.png', + BrickDamage.some: 'elementGlass026.png', + BrickDamage.lots: 'elementGlass053.png', + }, (BrickType.metal, BrickSize.size70x220) => { - BrickDamage.none: 'elementMetal020.png', - BrickDamage.some: 'elementMetal025.png', - BrickDamage.lots: 'elementMetal055.png', - }, + BrickDamage.none: 'elementMetal020.png', + BrickDamage.some: 'elementMetal025.png', + BrickDamage.lots: 'elementMetal055.png', + }, (BrickType.stone, BrickSize.size70x220) => { - BrickDamage.none: 'elementStone020.png', - BrickDamage.some: 'elementStone025.png', - BrickDamage.lots: 'elementStone052.png', - }, + BrickDamage.none: 'elementStone020.png', + BrickDamage.some: 'elementStone025.png', + BrickDamage.lots: 'elementStone052.png', + }, (BrickType.wood, BrickSize.size70x220) => { - BrickDamage.none: 'elementWood019.png', - BrickDamage.some: 'elementWood024.png', - BrickDamage.lots: 'elementWood051.png', - }, + BrickDamage.none: 'elementWood019.png', + BrickDamage.some: 'elementWood024.png', + BrickDamage.lots: 'elementWood051.png', + }, (BrickType.explosive, BrickSize.size140x220) => { - BrickDamage.none: 'elementExplosive021.png', - BrickDamage.some: 'elementExplosive026.png', - BrickDamage.lots: 'elementExplosive056.png', - }, + BrickDamage.none: 'elementExplosive021.png', + BrickDamage.some: 'elementExplosive026.png', + BrickDamage.lots: 'elementExplosive056.png', + }, (BrickType.glass, BrickSize.size140x220) => { - BrickDamage.none: 'elementGlass022.png', - BrickDamage.some: 'elementGlass027.png', - BrickDamage.lots: 'elementGlass054.png', - }, + BrickDamage.none: 'elementGlass022.png', + BrickDamage.some: 'elementGlass027.png', + BrickDamage.lots: 'elementGlass054.png', + }, (BrickType.metal, BrickSize.size140x220) => { - BrickDamage.none: 'elementMetal021.png', - BrickDamage.some: 'elementMetal026.png', - BrickDamage.lots: 'elementMetal056.png', - }, + BrickDamage.none: 'elementMetal021.png', + BrickDamage.some: 'elementMetal026.png', + BrickDamage.lots: 'elementMetal056.png', + }, (BrickType.stone, BrickSize.size140x220) => { - BrickDamage.none: 'elementStone021.png', - BrickDamage.some: 'elementStone026.png', - BrickDamage.lots: 'elementStone053.png', - }, + BrickDamage.none: 'elementStone021.png', + BrickDamage.some: 'elementStone026.png', + BrickDamage.lots: 'elementStone053.png', + }, (BrickType.wood, BrickSize.size140x220) => { - BrickDamage.none: 'elementWood020.png', - BrickDamage.some: 'elementWood025.png', - BrickDamage.lots: 'elementWood052.png', - }, + BrickDamage.none: 'elementWood020.png', + BrickDamage.some: 'elementWood025.png', + BrickDamage.lots: 'elementWood052.png', + }, }; } @@ -256,25 +256,26 @@ class Brick extends BodyComponent { required BrickDamage damage, required Vector2 position, required Map sprites, - }) : _damage = damage, - _sprites = sprites, - super( - renderBody: false, - bodyDef: BodyDef() - ..position = position - ..type = BodyType.dynamic, - fixtureDefs: [ - FixtureDef( - PolygonShape() - ..setAsBoxXY( - size.size.width / 20 * brickScale, - size.size.height / 20 * brickScale, - ), - ) - ..restitution = 0.4 - ..density = type.density - ..friction = type.friction - ]); + }) : _damage = damage, + _sprites = sprites, + super( + renderBody: false, + bodyDef: + BodyDef() + ..position = position + ..type = BodyType.dynamic, + fixtureDefs: [ + FixtureDef( + PolygonShape()..setAsBoxXY( + size.size.width / 20 * brickScale, + size.size.height / 20 * brickScale, + ), + ) + ..restitution = 0.4 + ..density = type.density + ..friction = type.friction, + ], + ); late final SpriteComponent _spriteComponent; diff --git a/forge2d_game/step_05/lib/components/game.dart b/forge2d_game/step_05/lib/components/game.dart index 4642e7d2a1..36f2c247d5 100644 --- a/forge2d_game/step_05/lib/components/game.dart +++ b/forge2d_game/step_05/lib/components/game.dart @@ -15,10 +15,10 @@ import 'ground.dart'; class MyPhysicsGame extends Forge2DGame { MyPhysicsGame() - : super( - gravity: Vector2(0, 10), - camera: CameraComponent.withFixedResolution(width: 800, height: 600), - ); + : super( + gravity: Vector2(0, 10), + camera: CameraComponent.withFixedResolution(width: 800, height: 600), + ); late final XmlSpriteSheet aliens; late final XmlSpriteSheet elements; @@ -55,9 +55,11 @@ class MyPhysicsGame extends Forge2DGame { Future addGround() { return world.addAll([ - for (var x = camera.visibleWorldRect.left; - x < camera.visibleWorldRect.right + groundSize; - x += groundSize) + for ( + var x = camera.visibleWorldRect.left; + x < camera.visibleWorldRect.right + groundSize; + x += groundSize + ) Ground( Vector2(x, (camera.visibleWorldRect.height - groundSize) / 2), tiles.getSprite('grass.png'), @@ -77,15 +79,14 @@ class MyPhysicsGame extends Forge2DGame { size: size, damage: BrickDamage.some, position: Vector2( - camera.visibleWorldRect.right / 3 + - (_random.nextDouble() * 5 - 2.5), - 0), - sprites: brickFileNames(type, size).map( - (key, filename) => MapEntry( - key, - elements.getSprite(filename), - ), + camera.visibleWorldRect.right / 3 + + (_random.nextDouble() * 5 - 2.5), + 0, ), + sprites: brickFileNames( + type, + size, + ).map((key, filename) => MapEntry(key, elements.getSprite(filename))), ), ); await Future.delayed(const Duration(milliseconds: 500)); diff --git a/forge2d_game/step_05/lib/components/ground.dart b/forge2d_game/step_05/lib/components/ground.dart index c1346bf788..2a4fef62e4 100644 --- a/forge2d_game/step_05/lib/components/ground.dart +++ b/forge2d_game/step_05/lib/components/ground.dart @@ -9,24 +9,25 @@ const groundSize = 7.0; class Ground extends BodyComponent { Ground(Vector2 position, Sprite sprite) - : super( - renderBody: false, - bodyDef: BodyDef() - ..position = position - ..type = BodyType.static, - fixtureDefs: [ - FixtureDef( - PolygonShape()..setAsBoxXY(groundSize / 2, groundSize / 2), - friction: 0.3, - ) - ], - children: [ - SpriteComponent( - anchor: Anchor.center, - sprite: sprite, - size: Vector2.all(groundSize), - position: Vector2(0, 0), - ), - ], - ); + : super( + renderBody: false, + bodyDef: + BodyDef() + ..position = position + ..type = BodyType.static, + fixtureDefs: [ + FixtureDef( + PolygonShape()..setAsBoxXY(groundSize / 2, groundSize / 2), + friction: 0.3, + ), + ], + children: [ + SpriteComponent( + anchor: Anchor.center, + sprite: sprite, + size: Vector2.all(groundSize), + position: Vector2(0, 0), + ), + ], + ); } diff --git a/forge2d_game/step_05/lib/main.dart b/forge2d_game/step_05/lib/main.dart index 8e82ff7fb6..37929857ee 100644 --- a/forge2d_game/step_05/lib/main.dart +++ b/forge2d_game/step_05/lib/main.dart @@ -8,9 +8,5 @@ import 'package:flutter/material.dart'; import 'components/game.dart'; void main() { - runApp( - GameWidget.controlled( - gameFactory: MyPhysicsGame.new, - ), - ); + runApp(GameWidget.controlled(gameFactory: MyPhysicsGame.new)); } diff --git a/forge2d_game/step_05/pubspec.yaml b/forge2d_game/step_05/pubspec.yaml index 79bd155671..d3d20aeb53 100644 --- a/forge2d_game/step_05/pubspec.yaml +++ b/forge2d_game/step_05/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: 'none' version: 0.1.0 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 dependencies: flutter: diff --git a/forge2d_game/step_06/bin/generate_brick_file_names.dart b/forge2d_game/step_06/bin/generate_brick_file_names.dart index e315ec899a..ba1ad0af27 100644 --- a/forge2d_game/step_06/bin/generate_brick_file_names.dart +++ b/forge2d_game/step_06/bin/generate_brick_file_names.dart @@ -30,11 +30,12 @@ class Rect extends Equatable { final int y; final int width; final int height; - const Rect( - {required this.x, - required this.y, - required this.width, - required this.height}); + const Rect({ + required this.x, + required this.y, + required this.width, + required this.height, + }); Size get size => Size(width, height); diff --git a/forge2d_game/step_06/lib/components/background.dart b/forge2d_game/step_06/lib/components/background.dart index 2263d589c2..d61d4635c2 100644 --- a/forge2d_game/step_06/lib/components/background.dart +++ b/forge2d_game/step_06/lib/components/background.dart @@ -8,18 +8,17 @@ import 'game.dart'; class Background extends SpriteComponent with HasGameReference { Background({required super.sprite}) - : super( - anchor: Anchor.center, - position: Vector2(0, 0), - ); + : super(anchor: Anchor.center, position: Vector2(0, 0)); @override void onMount() { super.onMount(); - size = Vector2.all(max( - game.camera.visibleWorldRect.width, - game.camera.visibleWorldRect.height, - )); + size = Vector2.all( + max( + game.camera.visibleWorldRect.width, + game.camera.visibleWorldRect.height, + ), + ); } } diff --git a/forge2d_game/step_06/lib/components/brick.dart b/forge2d_game/step_06/lib/components/brick.dart index 4f460405c4..123bcf2065 100644 --- a/forge2d_game/step_06/lib/components/brick.dart +++ b/forge2d_game/step_06/lib/components/brick.dart @@ -47,205 +47,205 @@ enum BrickDamage { none, some, lots } Map brickFileNames(BrickType type, BrickSize size) { return switch ((type, size)) { (BrickType.explosive, BrickSize.size140x70) => { - BrickDamage.none: 'elementExplosive009.png', - BrickDamage.some: 'elementExplosive012.png', - BrickDamage.lots: 'elementExplosive050.png', - }, + BrickDamage.none: 'elementExplosive009.png', + BrickDamage.some: 'elementExplosive012.png', + BrickDamage.lots: 'elementExplosive050.png', + }, (BrickType.glass, BrickSize.size140x70) => { - BrickDamage.none: 'elementGlass010.png', - BrickDamage.some: 'elementGlass013.png', - BrickDamage.lots: 'elementGlass048.png', - }, + BrickDamage.none: 'elementGlass010.png', + BrickDamage.some: 'elementGlass013.png', + BrickDamage.lots: 'elementGlass048.png', + }, (BrickType.metal, BrickSize.size140x70) => { - BrickDamage.none: 'elementMetal009.png', - BrickDamage.some: 'elementMetal012.png', - BrickDamage.lots: 'elementMetal050.png', - }, + BrickDamage.none: 'elementMetal009.png', + BrickDamage.some: 'elementMetal012.png', + BrickDamage.lots: 'elementMetal050.png', + }, (BrickType.stone, BrickSize.size140x70) => { - BrickDamage.none: 'elementStone009.png', - BrickDamage.some: 'elementStone012.png', - BrickDamage.lots: 'elementStone047.png', - }, + BrickDamage.none: 'elementStone009.png', + BrickDamage.some: 'elementStone012.png', + BrickDamage.lots: 'elementStone047.png', + }, (BrickType.wood, BrickSize.size140x70) => { - BrickDamage.none: 'elementWood011.png', - BrickDamage.some: 'elementWood014.png', - BrickDamage.lots: 'elementWood054.png', - }, + BrickDamage.none: 'elementWood011.png', + BrickDamage.some: 'elementWood014.png', + BrickDamage.lots: 'elementWood054.png', + }, (BrickType.explosive, BrickSize.size70x70) => { - BrickDamage.none: 'elementExplosive011.png', - BrickDamage.some: 'elementExplosive014.png', - BrickDamage.lots: 'elementExplosive049.png', - }, + BrickDamage.none: 'elementExplosive011.png', + BrickDamage.some: 'elementExplosive014.png', + BrickDamage.lots: 'elementExplosive049.png', + }, (BrickType.glass, BrickSize.size70x70) => { - BrickDamage.none: 'elementGlass011.png', - BrickDamage.some: 'elementGlass012.png', - BrickDamage.lots: 'elementGlass046.png', - }, + BrickDamage.none: 'elementGlass011.png', + BrickDamage.some: 'elementGlass012.png', + BrickDamage.lots: 'elementGlass046.png', + }, (BrickType.metal, BrickSize.size70x70) => { - BrickDamage.none: 'elementMetal011.png', - BrickDamage.some: 'elementMetal014.png', - BrickDamage.lots: 'elementMetal049.png', - }, + BrickDamage.none: 'elementMetal011.png', + BrickDamage.some: 'elementMetal014.png', + BrickDamage.lots: 'elementMetal049.png', + }, (BrickType.stone, BrickSize.size70x70) => { - BrickDamage.none: 'elementStone011.png', - BrickDamage.some: 'elementStone014.png', - BrickDamage.lots: 'elementStone046.png', - }, + BrickDamage.none: 'elementStone011.png', + BrickDamage.some: 'elementStone014.png', + BrickDamage.lots: 'elementStone046.png', + }, (BrickType.wood, BrickSize.size70x70) => { - BrickDamage.none: 'elementWood010.png', - BrickDamage.some: 'elementWood013.png', - BrickDamage.lots: 'elementWood045.png', - }, + BrickDamage.none: 'elementWood010.png', + BrickDamage.some: 'elementWood013.png', + BrickDamage.lots: 'elementWood045.png', + }, (BrickType.explosive, BrickSize.size220x70) => { - BrickDamage.none: 'elementExplosive013.png', - BrickDamage.some: 'elementExplosive016.png', - BrickDamage.lots: 'elementExplosive051.png', - }, + BrickDamage.none: 'elementExplosive013.png', + BrickDamage.some: 'elementExplosive016.png', + BrickDamage.lots: 'elementExplosive051.png', + }, (BrickType.glass, BrickSize.size220x70) => { - BrickDamage.none: 'elementGlass014.png', - BrickDamage.some: 'elementGlass017.png', - BrickDamage.lots: 'elementGlass049.png', - }, + BrickDamage.none: 'elementGlass014.png', + BrickDamage.some: 'elementGlass017.png', + BrickDamage.lots: 'elementGlass049.png', + }, (BrickType.metal, BrickSize.size220x70) => { - BrickDamage.none: 'elementMetal013.png', - BrickDamage.some: 'elementMetal016.png', - BrickDamage.lots: 'elementMetal051.png', - }, + BrickDamage.none: 'elementMetal013.png', + BrickDamage.some: 'elementMetal016.png', + BrickDamage.lots: 'elementMetal051.png', + }, (BrickType.stone, BrickSize.size220x70) => { - BrickDamage.none: 'elementStone013.png', - BrickDamage.some: 'elementStone016.png', - BrickDamage.lots: 'elementStone048.png', - }, + BrickDamage.none: 'elementStone013.png', + BrickDamage.some: 'elementStone016.png', + BrickDamage.lots: 'elementStone048.png', + }, (BrickType.wood, BrickSize.size220x70) => { - BrickDamage.none: 'elementWood012.png', - BrickDamage.some: 'elementWood015.png', - BrickDamage.lots: 'elementWood047.png', - }, + BrickDamage.none: 'elementWood012.png', + BrickDamage.some: 'elementWood015.png', + BrickDamage.lots: 'elementWood047.png', + }, (BrickType.explosive, BrickSize.size70x140) => { - BrickDamage.none: 'elementExplosive017.png', - BrickDamage.some: 'elementExplosive022.png', - BrickDamage.lots: 'elementExplosive052.png', - }, + BrickDamage.none: 'elementExplosive017.png', + BrickDamage.some: 'elementExplosive022.png', + BrickDamage.lots: 'elementExplosive052.png', + }, (BrickType.glass, BrickSize.size70x140) => { - BrickDamage.none: 'elementGlass018.png', - BrickDamage.some: 'elementGlass023.png', - BrickDamage.lots: 'elementGlass050.png', - }, + BrickDamage.none: 'elementGlass018.png', + BrickDamage.some: 'elementGlass023.png', + BrickDamage.lots: 'elementGlass050.png', + }, (BrickType.metal, BrickSize.size70x140) => { - BrickDamage.none: 'elementMetal017.png', - BrickDamage.some: 'elementMetal022.png', - BrickDamage.lots: 'elementMetal052.png', - }, + BrickDamage.none: 'elementMetal017.png', + BrickDamage.some: 'elementMetal022.png', + BrickDamage.lots: 'elementMetal052.png', + }, (BrickType.stone, BrickSize.size70x140) => { - BrickDamage.none: 'elementStone017.png', - BrickDamage.some: 'elementStone022.png', - BrickDamage.lots: 'elementStone049.png', - }, + BrickDamage.none: 'elementStone017.png', + BrickDamage.some: 'elementStone022.png', + BrickDamage.lots: 'elementStone049.png', + }, (BrickType.wood, BrickSize.size70x140) => { - BrickDamage.none: 'elementWood016.png', - BrickDamage.some: 'elementWood021.png', - BrickDamage.lots: 'elementWood048.png', - }, + BrickDamage.none: 'elementWood016.png', + BrickDamage.some: 'elementWood021.png', + BrickDamage.lots: 'elementWood048.png', + }, (BrickType.explosive, BrickSize.size140x140) => { - BrickDamage.none: 'elementExplosive018.png', - BrickDamage.some: 'elementExplosive023.png', - BrickDamage.lots: 'elementExplosive053.png', - }, + BrickDamage.none: 'elementExplosive018.png', + BrickDamage.some: 'elementExplosive023.png', + BrickDamage.lots: 'elementExplosive053.png', + }, (BrickType.glass, BrickSize.size140x140) => { - BrickDamage.none: 'elementGlass019.png', - BrickDamage.some: 'elementGlass024.png', - BrickDamage.lots: 'elementGlass051.png', - }, + BrickDamage.none: 'elementGlass019.png', + BrickDamage.some: 'elementGlass024.png', + BrickDamage.lots: 'elementGlass051.png', + }, (BrickType.metal, BrickSize.size140x140) => { - BrickDamage.none: 'elementMetal018.png', - BrickDamage.some: 'elementMetal023.png', - BrickDamage.lots: 'elementMetal053.png', - }, + BrickDamage.none: 'elementMetal018.png', + BrickDamage.some: 'elementMetal023.png', + BrickDamage.lots: 'elementMetal053.png', + }, (BrickType.stone, BrickSize.size140x140) => { - BrickDamage.none: 'elementStone018.png', - BrickDamage.some: 'elementStone023.png', - BrickDamage.lots: 'elementStone050.png', - }, + BrickDamage.none: 'elementStone018.png', + BrickDamage.some: 'elementStone023.png', + BrickDamage.lots: 'elementStone050.png', + }, (BrickType.wood, BrickSize.size140x140) => { - BrickDamage.none: 'elementWood017.png', - BrickDamage.some: 'elementWood022.png', - BrickDamage.lots: 'elementWood049.png', - }, + BrickDamage.none: 'elementWood017.png', + BrickDamage.some: 'elementWood022.png', + BrickDamage.lots: 'elementWood049.png', + }, (BrickType.explosive, BrickSize.size220x140) => { - BrickDamage.none: 'elementExplosive019.png', - BrickDamage.some: 'elementExplosive024.png', - BrickDamage.lots: 'elementExplosive054.png', - }, + BrickDamage.none: 'elementExplosive019.png', + BrickDamage.some: 'elementExplosive024.png', + BrickDamage.lots: 'elementExplosive054.png', + }, (BrickType.glass, BrickSize.size220x140) => { - BrickDamage.none: 'elementGlass020.png', - BrickDamage.some: 'elementGlass025.png', - BrickDamage.lots: 'elementGlass052.png', - }, + BrickDamage.none: 'elementGlass020.png', + BrickDamage.some: 'elementGlass025.png', + BrickDamage.lots: 'elementGlass052.png', + }, (BrickType.metal, BrickSize.size220x140) => { - BrickDamage.none: 'elementMetal019.png', - BrickDamage.some: 'elementMetal024.png', - BrickDamage.lots: 'elementMetal054.png', - }, + BrickDamage.none: 'elementMetal019.png', + BrickDamage.some: 'elementMetal024.png', + BrickDamage.lots: 'elementMetal054.png', + }, (BrickType.stone, BrickSize.size220x140) => { - BrickDamage.none: 'elementStone019.png', - BrickDamage.some: 'elementStone024.png', - BrickDamage.lots: 'elementStone051.png', - }, + BrickDamage.none: 'elementStone019.png', + BrickDamage.some: 'elementStone024.png', + BrickDamage.lots: 'elementStone051.png', + }, (BrickType.wood, BrickSize.size220x140) => { - BrickDamage.none: 'elementWood018.png', - BrickDamage.some: 'elementWood023.png', - BrickDamage.lots: 'elementWood050.png', - }, + BrickDamage.none: 'elementWood018.png', + BrickDamage.some: 'elementWood023.png', + BrickDamage.lots: 'elementWood050.png', + }, (BrickType.explosive, BrickSize.size70x220) => { - BrickDamage.none: 'elementExplosive020.png', - BrickDamage.some: 'elementExplosive025.png', - BrickDamage.lots: 'elementExplosive055.png', - }, + BrickDamage.none: 'elementExplosive020.png', + BrickDamage.some: 'elementExplosive025.png', + BrickDamage.lots: 'elementExplosive055.png', + }, (BrickType.glass, BrickSize.size70x220) => { - BrickDamage.none: 'elementGlass021.png', - BrickDamage.some: 'elementGlass026.png', - BrickDamage.lots: 'elementGlass053.png', - }, + BrickDamage.none: 'elementGlass021.png', + BrickDamage.some: 'elementGlass026.png', + BrickDamage.lots: 'elementGlass053.png', + }, (BrickType.metal, BrickSize.size70x220) => { - BrickDamage.none: 'elementMetal020.png', - BrickDamage.some: 'elementMetal025.png', - BrickDamage.lots: 'elementMetal055.png', - }, + BrickDamage.none: 'elementMetal020.png', + BrickDamage.some: 'elementMetal025.png', + BrickDamage.lots: 'elementMetal055.png', + }, (BrickType.stone, BrickSize.size70x220) => { - BrickDamage.none: 'elementStone020.png', - BrickDamage.some: 'elementStone025.png', - BrickDamage.lots: 'elementStone052.png', - }, + BrickDamage.none: 'elementStone020.png', + BrickDamage.some: 'elementStone025.png', + BrickDamage.lots: 'elementStone052.png', + }, (BrickType.wood, BrickSize.size70x220) => { - BrickDamage.none: 'elementWood019.png', - BrickDamage.some: 'elementWood024.png', - BrickDamage.lots: 'elementWood051.png', - }, + BrickDamage.none: 'elementWood019.png', + BrickDamage.some: 'elementWood024.png', + BrickDamage.lots: 'elementWood051.png', + }, (BrickType.explosive, BrickSize.size140x220) => { - BrickDamage.none: 'elementExplosive021.png', - BrickDamage.some: 'elementExplosive026.png', - BrickDamage.lots: 'elementExplosive056.png', - }, + BrickDamage.none: 'elementExplosive021.png', + BrickDamage.some: 'elementExplosive026.png', + BrickDamage.lots: 'elementExplosive056.png', + }, (BrickType.glass, BrickSize.size140x220) => { - BrickDamage.none: 'elementGlass022.png', - BrickDamage.some: 'elementGlass027.png', - BrickDamage.lots: 'elementGlass054.png', - }, + BrickDamage.none: 'elementGlass022.png', + BrickDamage.some: 'elementGlass027.png', + BrickDamage.lots: 'elementGlass054.png', + }, (BrickType.metal, BrickSize.size140x220) => { - BrickDamage.none: 'elementMetal021.png', - BrickDamage.some: 'elementMetal026.png', - BrickDamage.lots: 'elementMetal056.png', - }, + BrickDamage.none: 'elementMetal021.png', + BrickDamage.some: 'elementMetal026.png', + BrickDamage.lots: 'elementMetal056.png', + }, (BrickType.stone, BrickSize.size140x220) => { - BrickDamage.none: 'elementStone021.png', - BrickDamage.some: 'elementStone026.png', - BrickDamage.lots: 'elementStone053.png', - }, + BrickDamage.none: 'elementStone021.png', + BrickDamage.some: 'elementStone026.png', + BrickDamage.lots: 'elementStone053.png', + }, (BrickType.wood, BrickSize.size140x220) => { - BrickDamage.none: 'elementWood020.png', - BrickDamage.some: 'elementWood025.png', - BrickDamage.lots: 'elementWood052.png', - }, + BrickDamage.none: 'elementWood020.png', + BrickDamage.some: 'elementWood025.png', + BrickDamage.lots: 'elementWood052.png', + }, }; } @@ -256,25 +256,26 @@ class Brick extends BodyComponent { required BrickDamage damage, required Vector2 position, required Map sprites, - }) : _damage = damage, - _sprites = sprites, - super( - renderBody: false, - bodyDef: BodyDef() - ..position = position - ..type = BodyType.dynamic, - fixtureDefs: [ - FixtureDef( - PolygonShape() - ..setAsBoxXY( - size.size.width / 20 * brickScale, - size.size.height / 20 * brickScale, - ), - ) - ..restitution = 0.4 - ..density = type.density - ..friction = type.friction - ]); + }) : _damage = damage, + _sprites = sprites, + super( + renderBody: false, + bodyDef: + BodyDef() + ..position = position + ..type = BodyType.dynamic, + fixtureDefs: [ + FixtureDef( + PolygonShape()..setAsBoxXY( + size.size.width / 20 * brickScale, + size.size.height / 20 * brickScale, + ), + ) + ..restitution = 0.4 + ..density = type.density + ..friction = type.friction, + ], + ); late final SpriteComponent _spriteComponent; diff --git a/forge2d_game/step_06/lib/components/game.dart b/forge2d_game/step_06/lib/components/game.dart index 20c1f31597..e6e29439e3 100644 --- a/forge2d_game/step_06/lib/components/game.dart +++ b/forge2d_game/step_06/lib/components/game.dart @@ -16,10 +16,10 @@ import 'player.dart'; class MyPhysicsGame extends Forge2DGame { MyPhysicsGame() - : super( - gravity: Vector2(0, 10), - camera: CameraComponent.withFixedResolution(width: 800, height: 600), - ); + : super( + gravity: Vector2(0, 10), + camera: CameraComponent.withFixedResolution(width: 800, height: 600), + ); late final XmlSpriteSheet aliens; late final XmlSpriteSheet elements; @@ -57,9 +57,11 @@ class MyPhysicsGame extends Forge2DGame { Future addGround() { return world.addAll([ - for (var x = camera.visibleWorldRect.left; - x < camera.visibleWorldRect.right + groundSize; - x += groundSize) + for ( + var x = camera.visibleWorldRect.left; + x < camera.visibleWorldRect.right + groundSize; + x += groundSize + ) Ground( Vector2(x, (camera.visibleWorldRect.height - groundSize) / 2), tiles.getSprite('grass.png'), @@ -79,15 +81,14 @@ class MyPhysicsGame extends Forge2DGame { size: size, damage: BrickDamage.some, position: Vector2( - camera.visibleWorldRect.right / 3 + - (_random.nextDouble() * 5 - 2.5), - 0), - sprites: brickFileNames(type, size).map( - (key, filename) => MapEntry( - key, - elements.getSprite(filename), - ), + camera.visibleWorldRect.right / 3 + + (_random.nextDouble() * 5 - 2.5), + 0, ), + sprites: brickFileNames( + type, + size, + ).map((key, filename) => MapEntry(key, elements.getSprite(filename))), ), ); await Future.delayed(const Duration(milliseconds: 500)); @@ -95,11 +96,11 @@ class MyPhysicsGame extends Forge2DGame { } Future addPlayer() async => world.add( - Player( - Vector2(camera.visibleWorldRect.left * 2 / 3, 0), - aliens.getSprite(PlayerColor.randomColor.fileName), - ), - ); + Player( + Vector2(camera.visibleWorldRect.left * 2 / 3, 0), + aliens.getSprite(PlayerColor.randomColor.fileName), + ), + ); @override void update(double dt) { diff --git a/forge2d_game/step_06/lib/components/ground.dart b/forge2d_game/step_06/lib/components/ground.dart index c1346bf788..2a4fef62e4 100644 --- a/forge2d_game/step_06/lib/components/ground.dart +++ b/forge2d_game/step_06/lib/components/ground.dart @@ -9,24 +9,25 @@ const groundSize = 7.0; class Ground extends BodyComponent { Ground(Vector2 position, Sprite sprite) - : super( - renderBody: false, - bodyDef: BodyDef() - ..position = position - ..type = BodyType.static, - fixtureDefs: [ - FixtureDef( - PolygonShape()..setAsBoxXY(groundSize / 2, groundSize / 2), - friction: 0.3, - ) - ], - children: [ - SpriteComponent( - anchor: Anchor.center, - sprite: sprite, - size: Vector2.all(groundSize), - position: Vector2(0, 0), - ), - ], - ); + : super( + renderBody: false, + bodyDef: + BodyDef() + ..position = position + ..type = BodyType.static, + fixtureDefs: [ + FixtureDef( + PolygonShape()..setAsBoxXY(groundSize / 2, groundSize / 2), + friction: 0.3, + ), + ], + children: [ + SpriteComponent( + anchor: Anchor.center, + sprite: sprite, + size: Vector2.all(groundSize), + position: Vector2(0, 0), + ), + ], + ); } diff --git a/forge2d_game/step_06/lib/components/player.dart b/forge2d_game/step_06/lib/components/player.dart index b53002b11e..c7b0ad3f56 100644 --- a/forge2d_game/step_06/lib/components/player.dart +++ b/forge2d_game/step_06/lib/components/player.dart @@ -27,21 +27,22 @@ enum PlayerColor { class Player extends BodyComponent with DragCallbacks { Player(Vector2 position, Sprite sprite) - : _sprite = sprite, - super( - renderBody: false, - bodyDef: BodyDef() - ..position = position - ..type = BodyType.static - ..angularDamping = 0.1 - ..linearDamping = 0.1, - fixtureDefs: [ - FixtureDef(CircleShape()..radius = playerSize / 2) - ..restitution = 0.4 - ..density = 0.75 - ..friction = 0.5 - ], - ); + : _sprite = sprite, + super( + renderBody: false, + bodyDef: + BodyDef() + ..position = position + ..type = BodyType.static + ..angularDamping = 0.1 + ..linearDamping = 0.1, + fixtureDefs: [ + FixtureDef(CircleShape()..radius = playerSize / 2) + ..restitution = 0.4 + ..density = 0.75 + ..friction = 0.5, + ], + ); final Sprite _sprite; @@ -59,7 +60,7 @@ class Player extends BodyComponent with DragCallbacks { sprite: _sprite, size: Vector2(playerSize, playerSize), position: Vector2(0, 0), - ) + ), ]); return super.onLoad(); } @@ -107,9 +108,7 @@ class Player extends BodyComponent with DragCallbacks { ?.removeFromParent(); body.setType(BodyType.dynamic); body.applyLinearImpulse(_dragDelta * -50); - add(RemoveEffect( - delay: 5.0, - )); + add(RemoveEffect(delay: 5.0)); } } } @@ -129,12 +128,13 @@ class _DragPainter extends CustomPainter { if (player.dragDelta != Vector2.zero()) { var center = size.center(Offset.zero); canvas.drawLine( - center, - center + (player.dragDelta * -1).toOffset(), - Paint() - ..color = Colors.orange.withAlpha(180) - ..strokeWidth = 0.4 - ..strokeCap = StrokeCap.round); + center, + center + (player.dragDelta * -1).toOffset(), + Paint() + ..color = Colors.orange.withAlpha(180) + ..strokeWidth = 0.4 + ..strokeCap = StrokeCap.round, + ); } } diff --git a/forge2d_game/step_06/lib/main.dart b/forge2d_game/step_06/lib/main.dart index 8e82ff7fb6..37929857ee 100644 --- a/forge2d_game/step_06/lib/main.dart +++ b/forge2d_game/step_06/lib/main.dart @@ -8,9 +8,5 @@ import 'package:flutter/material.dart'; import 'components/game.dart'; void main() { - runApp( - GameWidget.controlled( - gameFactory: MyPhysicsGame.new, - ), - ); + runApp(GameWidget.controlled(gameFactory: MyPhysicsGame.new)); } diff --git a/forge2d_game/step_06/pubspec.yaml b/forge2d_game/step_06/pubspec.yaml index 79bd155671..d3d20aeb53 100644 --- a/forge2d_game/step_06/pubspec.yaml +++ b/forge2d_game/step_06/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: 'none' version: 0.1.0 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 dependencies: flutter: diff --git a/forge2d_game/step_07/bin/generate_brick_file_names.dart b/forge2d_game/step_07/bin/generate_brick_file_names.dart index e315ec899a..ba1ad0af27 100644 --- a/forge2d_game/step_07/bin/generate_brick_file_names.dart +++ b/forge2d_game/step_07/bin/generate_brick_file_names.dart @@ -30,11 +30,12 @@ class Rect extends Equatable { final int y; final int width; final int height; - const Rect( - {required this.x, - required this.y, - required this.width, - required this.height}); + const Rect({ + required this.x, + required this.y, + required this.width, + required this.height, + }); Size get size => Size(width, height); diff --git a/forge2d_game/step_07/lib/components/background.dart b/forge2d_game/step_07/lib/components/background.dart index 2263d589c2..d61d4635c2 100644 --- a/forge2d_game/step_07/lib/components/background.dart +++ b/forge2d_game/step_07/lib/components/background.dart @@ -8,18 +8,17 @@ import 'game.dart'; class Background extends SpriteComponent with HasGameReference { Background({required super.sprite}) - : super( - anchor: Anchor.center, - position: Vector2(0, 0), - ); + : super(anchor: Anchor.center, position: Vector2(0, 0)); @override void onMount() { super.onMount(); - size = Vector2.all(max( - game.camera.visibleWorldRect.width, - game.camera.visibleWorldRect.height, - )); + size = Vector2.all( + max( + game.camera.visibleWorldRect.width, + game.camera.visibleWorldRect.height, + ), + ); } } diff --git a/forge2d_game/step_07/lib/components/brick.dart b/forge2d_game/step_07/lib/components/brick.dart index 34c1c1d3e9..296d94b186 100644 --- a/forge2d_game/step_07/lib/components/brick.dart +++ b/forge2d_game/step_07/lib/components/brick.dart @@ -49,205 +49,205 @@ enum BrickDamage { none, some, lots } Map brickFileNames(BrickType type, BrickSize size) { return switch ((type, size)) { (BrickType.explosive, BrickSize.size140x70) => { - BrickDamage.none: 'elementExplosive009.png', - BrickDamage.some: 'elementExplosive012.png', - BrickDamage.lots: 'elementExplosive050.png', - }, + BrickDamage.none: 'elementExplosive009.png', + BrickDamage.some: 'elementExplosive012.png', + BrickDamage.lots: 'elementExplosive050.png', + }, (BrickType.glass, BrickSize.size140x70) => { - BrickDamage.none: 'elementGlass010.png', - BrickDamage.some: 'elementGlass013.png', - BrickDamage.lots: 'elementGlass048.png', - }, + BrickDamage.none: 'elementGlass010.png', + BrickDamage.some: 'elementGlass013.png', + BrickDamage.lots: 'elementGlass048.png', + }, (BrickType.metal, BrickSize.size140x70) => { - BrickDamage.none: 'elementMetal009.png', - BrickDamage.some: 'elementMetal012.png', - BrickDamage.lots: 'elementMetal050.png', - }, + BrickDamage.none: 'elementMetal009.png', + BrickDamage.some: 'elementMetal012.png', + BrickDamage.lots: 'elementMetal050.png', + }, (BrickType.stone, BrickSize.size140x70) => { - BrickDamage.none: 'elementStone009.png', - BrickDamage.some: 'elementStone012.png', - BrickDamage.lots: 'elementStone047.png', - }, + BrickDamage.none: 'elementStone009.png', + BrickDamage.some: 'elementStone012.png', + BrickDamage.lots: 'elementStone047.png', + }, (BrickType.wood, BrickSize.size140x70) => { - BrickDamage.none: 'elementWood011.png', - BrickDamage.some: 'elementWood014.png', - BrickDamage.lots: 'elementWood054.png', - }, + BrickDamage.none: 'elementWood011.png', + BrickDamage.some: 'elementWood014.png', + BrickDamage.lots: 'elementWood054.png', + }, (BrickType.explosive, BrickSize.size70x70) => { - BrickDamage.none: 'elementExplosive011.png', - BrickDamage.some: 'elementExplosive014.png', - BrickDamage.lots: 'elementExplosive049.png', - }, + BrickDamage.none: 'elementExplosive011.png', + BrickDamage.some: 'elementExplosive014.png', + BrickDamage.lots: 'elementExplosive049.png', + }, (BrickType.glass, BrickSize.size70x70) => { - BrickDamage.none: 'elementGlass011.png', - BrickDamage.some: 'elementGlass012.png', - BrickDamage.lots: 'elementGlass046.png', - }, + BrickDamage.none: 'elementGlass011.png', + BrickDamage.some: 'elementGlass012.png', + BrickDamage.lots: 'elementGlass046.png', + }, (BrickType.metal, BrickSize.size70x70) => { - BrickDamage.none: 'elementMetal011.png', - BrickDamage.some: 'elementMetal014.png', - BrickDamage.lots: 'elementMetal049.png', - }, + BrickDamage.none: 'elementMetal011.png', + BrickDamage.some: 'elementMetal014.png', + BrickDamage.lots: 'elementMetal049.png', + }, (BrickType.stone, BrickSize.size70x70) => { - BrickDamage.none: 'elementStone011.png', - BrickDamage.some: 'elementStone014.png', - BrickDamage.lots: 'elementStone046.png', - }, + BrickDamage.none: 'elementStone011.png', + BrickDamage.some: 'elementStone014.png', + BrickDamage.lots: 'elementStone046.png', + }, (BrickType.wood, BrickSize.size70x70) => { - BrickDamage.none: 'elementWood010.png', - BrickDamage.some: 'elementWood013.png', - BrickDamage.lots: 'elementWood045.png', - }, + BrickDamage.none: 'elementWood010.png', + BrickDamage.some: 'elementWood013.png', + BrickDamage.lots: 'elementWood045.png', + }, (BrickType.explosive, BrickSize.size220x70) => { - BrickDamage.none: 'elementExplosive013.png', - BrickDamage.some: 'elementExplosive016.png', - BrickDamage.lots: 'elementExplosive051.png', - }, + BrickDamage.none: 'elementExplosive013.png', + BrickDamage.some: 'elementExplosive016.png', + BrickDamage.lots: 'elementExplosive051.png', + }, (BrickType.glass, BrickSize.size220x70) => { - BrickDamage.none: 'elementGlass014.png', - BrickDamage.some: 'elementGlass017.png', - BrickDamage.lots: 'elementGlass049.png', - }, + BrickDamage.none: 'elementGlass014.png', + BrickDamage.some: 'elementGlass017.png', + BrickDamage.lots: 'elementGlass049.png', + }, (BrickType.metal, BrickSize.size220x70) => { - BrickDamage.none: 'elementMetal013.png', - BrickDamage.some: 'elementMetal016.png', - BrickDamage.lots: 'elementMetal051.png', - }, + BrickDamage.none: 'elementMetal013.png', + BrickDamage.some: 'elementMetal016.png', + BrickDamage.lots: 'elementMetal051.png', + }, (BrickType.stone, BrickSize.size220x70) => { - BrickDamage.none: 'elementStone013.png', - BrickDamage.some: 'elementStone016.png', - BrickDamage.lots: 'elementStone048.png', - }, + BrickDamage.none: 'elementStone013.png', + BrickDamage.some: 'elementStone016.png', + BrickDamage.lots: 'elementStone048.png', + }, (BrickType.wood, BrickSize.size220x70) => { - BrickDamage.none: 'elementWood012.png', - BrickDamage.some: 'elementWood015.png', - BrickDamage.lots: 'elementWood047.png', - }, + BrickDamage.none: 'elementWood012.png', + BrickDamage.some: 'elementWood015.png', + BrickDamage.lots: 'elementWood047.png', + }, (BrickType.explosive, BrickSize.size70x140) => { - BrickDamage.none: 'elementExplosive017.png', - BrickDamage.some: 'elementExplosive022.png', - BrickDamage.lots: 'elementExplosive052.png', - }, + BrickDamage.none: 'elementExplosive017.png', + BrickDamage.some: 'elementExplosive022.png', + BrickDamage.lots: 'elementExplosive052.png', + }, (BrickType.glass, BrickSize.size70x140) => { - BrickDamage.none: 'elementGlass018.png', - BrickDamage.some: 'elementGlass023.png', - BrickDamage.lots: 'elementGlass050.png', - }, + BrickDamage.none: 'elementGlass018.png', + BrickDamage.some: 'elementGlass023.png', + BrickDamage.lots: 'elementGlass050.png', + }, (BrickType.metal, BrickSize.size70x140) => { - BrickDamage.none: 'elementMetal017.png', - BrickDamage.some: 'elementMetal022.png', - BrickDamage.lots: 'elementMetal052.png', - }, + BrickDamage.none: 'elementMetal017.png', + BrickDamage.some: 'elementMetal022.png', + BrickDamage.lots: 'elementMetal052.png', + }, (BrickType.stone, BrickSize.size70x140) => { - BrickDamage.none: 'elementStone017.png', - BrickDamage.some: 'elementStone022.png', - BrickDamage.lots: 'elementStone049.png', - }, + BrickDamage.none: 'elementStone017.png', + BrickDamage.some: 'elementStone022.png', + BrickDamage.lots: 'elementStone049.png', + }, (BrickType.wood, BrickSize.size70x140) => { - BrickDamage.none: 'elementWood016.png', - BrickDamage.some: 'elementWood021.png', - BrickDamage.lots: 'elementWood048.png', - }, + BrickDamage.none: 'elementWood016.png', + BrickDamage.some: 'elementWood021.png', + BrickDamage.lots: 'elementWood048.png', + }, (BrickType.explosive, BrickSize.size140x140) => { - BrickDamage.none: 'elementExplosive018.png', - BrickDamage.some: 'elementExplosive023.png', - BrickDamage.lots: 'elementExplosive053.png', - }, + BrickDamage.none: 'elementExplosive018.png', + BrickDamage.some: 'elementExplosive023.png', + BrickDamage.lots: 'elementExplosive053.png', + }, (BrickType.glass, BrickSize.size140x140) => { - BrickDamage.none: 'elementGlass019.png', - BrickDamage.some: 'elementGlass024.png', - BrickDamage.lots: 'elementGlass051.png', - }, + BrickDamage.none: 'elementGlass019.png', + BrickDamage.some: 'elementGlass024.png', + BrickDamage.lots: 'elementGlass051.png', + }, (BrickType.metal, BrickSize.size140x140) => { - BrickDamage.none: 'elementMetal018.png', - BrickDamage.some: 'elementMetal023.png', - BrickDamage.lots: 'elementMetal053.png', - }, + BrickDamage.none: 'elementMetal018.png', + BrickDamage.some: 'elementMetal023.png', + BrickDamage.lots: 'elementMetal053.png', + }, (BrickType.stone, BrickSize.size140x140) => { - BrickDamage.none: 'elementStone018.png', - BrickDamage.some: 'elementStone023.png', - BrickDamage.lots: 'elementStone050.png', - }, + BrickDamage.none: 'elementStone018.png', + BrickDamage.some: 'elementStone023.png', + BrickDamage.lots: 'elementStone050.png', + }, (BrickType.wood, BrickSize.size140x140) => { - BrickDamage.none: 'elementWood017.png', - BrickDamage.some: 'elementWood022.png', - BrickDamage.lots: 'elementWood049.png', - }, + BrickDamage.none: 'elementWood017.png', + BrickDamage.some: 'elementWood022.png', + BrickDamage.lots: 'elementWood049.png', + }, (BrickType.explosive, BrickSize.size220x140) => { - BrickDamage.none: 'elementExplosive019.png', - BrickDamage.some: 'elementExplosive024.png', - BrickDamage.lots: 'elementExplosive054.png', - }, + BrickDamage.none: 'elementExplosive019.png', + BrickDamage.some: 'elementExplosive024.png', + BrickDamage.lots: 'elementExplosive054.png', + }, (BrickType.glass, BrickSize.size220x140) => { - BrickDamage.none: 'elementGlass020.png', - BrickDamage.some: 'elementGlass025.png', - BrickDamage.lots: 'elementGlass052.png', - }, + BrickDamage.none: 'elementGlass020.png', + BrickDamage.some: 'elementGlass025.png', + BrickDamage.lots: 'elementGlass052.png', + }, (BrickType.metal, BrickSize.size220x140) => { - BrickDamage.none: 'elementMetal019.png', - BrickDamage.some: 'elementMetal024.png', - BrickDamage.lots: 'elementMetal054.png', - }, + BrickDamage.none: 'elementMetal019.png', + BrickDamage.some: 'elementMetal024.png', + BrickDamage.lots: 'elementMetal054.png', + }, (BrickType.stone, BrickSize.size220x140) => { - BrickDamage.none: 'elementStone019.png', - BrickDamage.some: 'elementStone024.png', - BrickDamage.lots: 'elementStone051.png', - }, + BrickDamage.none: 'elementStone019.png', + BrickDamage.some: 'elementStone024.png', + BrickDamage.lots: 'elementStone051.png', + }, (BrickType.wood, BrickSize.size220x140) => { - BrickDamage.none: 'elementWood018.png', - BrickDamage.some: 'elementWood023.png', - BrickDamage.lots: 'elementWood050.png', - }, + BrickDamage.none: 'elementWood018.png', + BrickDamage.some: 'elementWood023.png', + BrickDamage.lots: 'elementWood050.png', + }, (BrickType.explosive, BrickSize.size70x220) => { - BrickDamage.none: 'elementExplosive020.png', - BrickDamage.some: 'elementExplosive025.png', - BrickDamage.lots: 'elementExplosive055.png', - }, + BrickDamage.none: 'elementExplosive020.png', + BrickDamage.some: 'elementExplosive025.png', + BrickDamage.lots: 'elementExplosive055.png', + }, (BrickType.glass, BrickSize.size70x220) => { - BrickDamage.none: 'elementGlass021.png', - BrickDamage.some: 'elementGlass026.png', - BrickDamage.lots: 'elementGlass053.png', - }, + BrickDamage.none: 'elementGlass021.png', + BrickDamage.some: 'elementGlass026.png', + BrickDamage.lots: 'elementGlass053.png', + }, (BrickType.metal, BrickSize.size70x220) => { - BrickDamage.none: 'elementMetal020.png', - BrickDamage.some: 'elementMetal025.png', - BrickDamage.lots: 'elementMetal055.png', - }, + BrickDamage.none: 'elementMetal020.png', + BrickDamage.some: 'elementMetal025.png', + BrickDamage.lots: 'elementMetal055.png', + }, (BrickType.stone, BrickSize.size70x220) => { - BrickDamage.none: 'elementStone020.png', - BrickDamage.some: 'elementStone025.png', - BrickDamage.lots: 'elementStone052.png', - }, + BrickDamage.none: 'elementStone020.png', + BrickDamage.some: 'elementStone025.png', + BrickDamage.lots: 'elementStone052.png', + }, (BrickType.wood, BrickSize.size70x220) => { - BrickDamage.none: 'elementWood019.png', - BrickDamage.some: 'elementWood024.png', - BrickDamage.lots: 'elementWood051.png', - }, + BrickDamage.none: 'elementWood019.png', + BrickDamage.some: 'elementWood024.png', + BrickDamage.lots: 'elementWood051.png', + }, (BrickType.explosive, BrickSize.size140x220) => { - BrickDamage.none: 'elementExplosive021.png', - BrickDamage.some: 'elementExplosive026.png', - BrickDamage.lots: 'elementExplosive056.png', - }, + BrickDamage.none: 'elementExplosive021.png', + BrickDamage.some: 'elementExplosive026.png', + BrickDamage.lots: 'elementExplosive056.png', + }, (BrickType.glass, BrickSize.size140x220) => { - BrickDamage.none: 'elementGlass022.png', - BrickDamage.some: 'elementGlass027.png', - BrickDamage.lots: 'elementGlass054.png', - }, + BrickDamage.none: 'elementGlass022.png', + BrickDamage.some: 'elementGlass027.png', + BrickDamage.lots: 'elementGlass054.png', + }, (BrickType.metal, BrickSize.size140x220) => { - BrickDamage.none: 'elementMetal021.png', - BrickDamage.some: 'elementMetal026.png', - BrickDamage.lots: 'elementMetal056.png', - }, + BrickDamage.none: 'elementMetal021.png', + BrickDamage.some: 'elementMetal026.png', + BrickDamage.lots: 'elementMetal056.png', + }, (BrickType.stone, BrickSize.size140x220) => { - BrickDamage.none: 'elementStone021.png', - BrickDamage.some: 'elementStone026.png', - BrickDamage.lots: 'elementStone053.png', - }, + BrickDamage.none: 'elementStone021.png', + BrickDamage.some: 'elementStone026.png', + BrickDamage.lots: 'elementStone053.png', + }, (BrickType.wood, BrickSize.size140x220) => { - BrickDamage.none: 'elementWood020.png', - BrickDamage.some: 'elementWood025.png', - BrickDamage.lots: 'elementWood052.png', - }, + BrickDamage.none: 'elementWood020.png', + BrickDamage.some: 'elementWood025.png', + BrickDamage.lots: 'elementWood052.png', + }, }; } @@ -258,25 +258,26 @@ class Brick extends BodyComponentWithUserData { required BrickDamage damage, required Vector2 position, required Map sprites, - }) : _damage = damage, - _sprites = sprites, - super( - renderBody: false, - bodyDef: BodyDef() - ..position = position - ..type = BodyType.dynamic, - fixtureDefs: [ - FixtureDef( - PolygonShape() - ..setAsBoxXY( - size.size.width / 20 * brickScale, - size.size.height / 20 * brickScale, - ), - ) - ..restitution = 0.4 - ..density = type.density - ..friction = type.friction - ]); + }) : _damage = damage, + _sprites = sprites, + super( + renderBody: false, + bodyDef: + BodyDef() + ..position = position + ..type = BodyType.dynamic, + fixtureDefs: [ + FixtureDef( + PolygonShape()..setAsBoxXY( + size.size.width / 20 * brickScale, + size.size.height / 20 * brickScale, + ), + ) + ..restitution = 0.4 + ..density = type.density + ..friction = type.friction, + ], + ); late final SpriteComponent _spriteComponent; diff --git a/forge2d_game/step_07/lib/components/enemy.dart b/forge2d_game/step_07/lib/components/enemy.dart index 678597a793..b09cc9152e 100644 --- a/forge2d_game/step_07/lib/components/enemy.dart +++ b/forge2d_game/step_07/lib/components/enemy.dart @@ -36,32 +36,32 @@ enum EnemyColor { class Enemy extends BodyComponentWithUserData with ContactCallbacks { Enemy(Vector2 position, Sprite sprite) - : super( - renderBody: false, - bodyDef: BodyDef() - ..position = position - ..type = BodyType.dynamic, - fixtureDefs: [ - FixtureDef( - PolygonShape()..setAsBoxXY(enemySize / 2, enemySize / 2), - friction: 0.3, - ) - ], - children: [ - SpriteComponent( - anchor: Anchor.center, - sprite: sprite, - size: Vector2.all(enemySize), - position: Vector2(0, 0), - ), - ], - ); + : super( + renderBody: false, + bodyDef: + BodyDef() + ..position = position + ..type = BodyType.dynamic, + fixtureDefs: [ + FixtureDef( + PolygonShape()..setAsBoxXY(enemySize / 2, enemySize / 2), + friction: 0.3, + ), + ], + children: [ + SpriteComponent( + anchor: Anchor.center, + sprite: sprite, + size: Vector2.all(enemySize), + position: Vector2(0, 0), + ), + ], + ); @override void beginContact(Object other, Contact contact) { var interceptVelocity = - (contact.bodyA.linearVelocity - contact.bodyB.linearVelocity) - .length + (contact.bodyA.linearVelocity - contact.bodyB.linearVelocity).length .abs(); if (interceptVelocity > 35) { removeFromParent(); diff --git a/forge2d_game/step_07/lib/components/game.dart b/forge2d_game/step_07/lib/components/game.dart index 220a04e1a1..db965b1ef2 100644 --- a/forge2d_game/step_07/lib/components/game.dart +++ b/forge2d_game/step_07/lib/components/game.dart @@ -18,10 +18,10 @@ import 'player.dart'; class MyPhysicsGame extends Forge2DGame { MyPhysicsGame() - : super( - gravity: Vector2(0, 10), - camera: CameraComponent.withFixedResolution(width: 800, height: 600), - ); + : super( + gravity: Vector2(0, 10), + camera: CameraComponent.withFixedResolution(width: 800, height: 600), + ); late final XmlSpriteSheet aliens; late final XmlSpriteSheet elements; @@ -59,9 +59,11 @@ class MyPhysicsGame extends Forge2DGame { Future addGround() { return world.addAll([ - for (var x = camera.visibleWorldRect.left; - x < camera.visibleWorldRect.right + groundSize; - x += groundSize) + for ( + var x = camera.visibleWorldRect.left; + x < camera.visibleWorldRect.right + groundSize; + x += groundSize + ) Ground( Vector2(x, (camera.visibleWorldRect.height - groundSize) / 2), tiles.getSprite('grass.png'), @@ -81,15 +83,14 @@ class MyPhysicsGame extends Forge2DGame { size: size, damage: BrickDamage.some, position: Vector2( - camera.visibleWorldRect.right / 3 + - (_random.nextDouble() * 5 - 2.5), - 0), - sprites: brickFileNames(type, size).map( - (key, filename) => MapEntry( - key, - elements.getSprite(filename), - ), + camera.visibleWorldRect.right / 3 + + (_random.nextDouble() * 5 - 2.5), + 0, ), + sprites: brickFileNames( + type, + size, + ).map((key, filename) => MapEntry(key, elements.getSprite(filename))), ), ); await Future.delayed(const Duration(milliseconds: 500)); @@ -97,11 +98,11 @@ class MyPhysicsGame extends Forge2DGame { } Future addPlayer() async => world.add( - Player( - Vector2(camera.visibleWorldRect.left * 2 / 3, 0), - aliens.getSprite(PlayerColor.randomColor.fileName), - ), - ); + Player( + Vector2(camera.visibleWorldRect.left * 2 / 3, 0), + aliens.getSprite(PlayerColor.randomColor.fileName), + ), + ); @override void update(double dt) { @@ -141,9 +142,10 @@ class MyPhysicsGame extends Forge2DGame { await world.add( Enemy( Vector2( - camera.visibleWorldRect.right / 3 + - (_random.nextDouble() * 7 - 3.5), - (_random.nextDouble() * 3)), + camera.visibleWorldRect.right / 3 + + (_random.nextDouble() * 7 - 3.5), + (_random.nextDouble() * 3), + ), aliens.getSprite(EnemyColor.randomColor.fileName), ), ); diff --git a/forge2d_game/step_07/lib/components/ground.dart b/forge2d_game/step_07/lib/components/ground.dart index f7a87a2190..b568b189a8 100644 --- a/forge2d_game/step_07/lib/components/ground.dart +++ b/forge2d_game/step_07/lib/components/ground.dart @@ -11,24 +11,25 @@ const groundSize = 7.0; class Ground extends BodyComponentWithUserData { Ground(Vector2 position, Sprite sprite) - : super( - renderBody: false, - bodyDef: BodyDef() - ..position = position - ..type = BodyType.static, - fixtureDefs: [ - FixtureDef( - PolygonShape()..setAsBoxXY(groundSize / 2, groundSize / 2), - friction: 0.3, - ) - ], - children: [ - SpriteComponent( - anchor: Anchor.center, - sprite: sprite, - size: Vector2.all(groundSize), - position: Vector2(0, 0), - ), - ], - ); + : super( + renderBody: false, + bodyDef: + BodyDef() + ..position = position + ..type = BodyType.static, + fixtureDefs: [ + FixtureDef( + PolygonShape()..setAsBoxXY(groundSize / 2, groundSize / 2), + friction: 0.3, + ), + ], + children: [ + SpriteComponent( + anchor: Anchor.center, + sprite: sprite, + size: Vector2.all(groundSize), + position: Vector2(0, 0), + ), + ], + ); } diff --git a/forge2d_game/step_07/lib/components/player.dart b/forge2d_game/step_07/lib/components/player.dart index 4c9989b447..05a7024c1b 100644 --- a/forge2d_game/step_07/lib/components/player.dart +++ b/forge2d_game/step_07/lib/components/player.dart @@ -29,21 +29,22 @@ enum PlayerColor { class Player extends BodyComponentWithUserData with DragCallbacks { Player(Vector2 position, Sprite sprite) - : _sprite = sprite, - super( - renderBody: false, - bodyDef: BodyDef() - ..position = position - ..type = BodyType.static - ..angularDamping = 0.1 - ..linearDamping = 0.1, - fixtureDefs: [ - FixtureDef(CircleShape()..radius = playerSize / 2) - ..restitution = 0.4 - ..density = 0.75 - ..friction = 0.5 - ], - ); + : _sprite = sprite, + super( + renderBody: false, + bodyDef: + BodyDef() + ..position = position + ..type = BodyType.static + ..angularDamping = 0.1 + ..linearDamping = 0.1, + fixtureDefs: [ + FixtureDef(CircleShape()..radius = playerSize / 2) + ..restitution = 0.4 + ..density = 0.75 + ..friction = 0.5, + ], + ); final Sprite _sprite; @@ -61,7 +62,7 @@ class Player extends BodyComponentWithUserData with DragCallbacks { sprite: _sprite, size: Vector2(playerSize, playerSize), position: Vector2(0, 0), - ) + ), ]); return super.onLoad(); } @@ -109,9 +110,7 @@ class Player extends BodyComponentWithUserData with DragCallbacks { ?.removeFromParent(); body.setType(BodyType.dynamic); body.applyLinearImpulse(_dragDelta * -50); - add(RemoveEffect( - delay: 5.0, - )); + add(RemoveEffect(delay: 5.0)); } } } @@ -131,12 +130,13 @@ class _DragPainter extends CustomPainter { if (player.dragDelta != Vector2.zero()) { var center = size.center(Offset.zero); canvas.drawLine( - center, - center + (player.dragDelta * -1).toOffset(), - Paint() - ..color = Colors.orange.withAlpha(180) - ..strokeWidth = 0.4 - ..strokeCap = StrokeCap.round); + center, + center + (player.dragDelta * -1).toOffset(), + Paint() + ..color = Colors.orange.withAlpha(180) + ..strokeWidth = 0.4 + ..strokeCap = StrokeCap.round, + ); } } diff --git a/forge2d_game/step_07/lib/main.dart b/forge2d_game/step_07/lib/main.dart index 8e82ff7fb6..37929857ee 100644 --- a/forge2d_game/step_07/lib/main.dart +++ b/forge2d_game/step_07/lib/main.dart @@ -8,9 +8,5 @@ import 'package:flutter/material.dart'; import 'components/game.dart'; void main() { - runApp( - GameWidget.controlled( - gameFactory: MyPhysicsGame.new, - ), - ); + runApp(GameWidget.controlled(gameFactory: MyPhysicsGame.new)); } diff --git a/forge2d_game/step_07/pubspec.yaml b/forge2d_game/step_07/pubspec.yaml index 79bd155671..d3d20aeb53 100644 --- a/forge2d_game/step_07/pubspec.yaml +++ b/forge2d_game/step_07/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: 'none' version: 0.1.0 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 dependencies: flutter: diff --git a/generate_crossword/step_02/lib/main.dart b/generate_crossword/step_02/lib/main.dart index ba54423faf..b1823f5b99 100644 --- a/generate_crossword/step_02/lib/main.dart +++ b/generate_crossword/step_02/lib/main.dart @@ -18,10 +18,7 @@ void main() { ), home: Scaffold( body: Center( - child: Text( - 'Hello, World!', - style: TextStyle(fontSize: 24), - ), + child: Text('Hello, World!', style: TextStyle(fontSize: 24)), ), ), ), diff --git a/generate_crossword/step_02/pubspec.yaml b/generate_crossword/step_02/pubspec.yaml index 197d2c7ada..7661a00a30 100644 --- a/generate_crossword/step_02/pubspec.yaml +++ b/generate_crossword/step_02/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: 'none' version: 0.1.0 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 dependencies: flutter: diff --git a/generate_crossword/step_03/lib/providers.dart b/generate_crossword/step_03/lib/providers.dart index f03b3cb367..966475eb49 100644 --- a/generate_crossword/step_03/lib/providers.dart +++ b/generate_crossword/step_03/lib/providers.dart @@ -21,8 +21,14 @@ Future> wordList(Ref ref) async { final re = RegExp(r'^[a-z]+$'); final words = await rootBundle.loadString('assets/words.txt'); - return const LineSplitter().convert(words).toBuiltSet().rebuild((b) => b - ..map((word) => word.toLowerCase().trim()) - ..where((word) => word.length > 2) - ..where((word) => re.hasMatch(word))); + return const LineSplitter() + .convert(words) + .toBuiltSet() + .rebuild( + (b) => + b + ..map((word) => word.toLowerCase().trim()) + ..where((word) => word.length > 2) + ..where((word) => re.hasMatch(word)), + ); } diff --git a/generate_crossword/step_03/lib/widgets/crossword_generator_app.dart b/generate_crossword/step_03/lib/widgets/crossword_generator_app.dart index 15adf69cd9..031ef47f82 100644 --- a/generate_crossword/step_03/lib/widgets/crossword_generator_app.dart +++ b/generate_crossword/step_03/lib/widgets/crossword_generator_app.dart @@ -27,20 +27,15 @@ class CrosswordGeneratorApp extends StatelessWidget { builder: (context, ref, _) { final wordListAsync = ref.watch(wordListProvider); return wordListAsync.when( - data: (wordList) => ListView.builder( - itemCount: wordList.length, - itemBuilder: (context, index) { - return ListTile( - title: Text(wordList.elementAt(index)), - ); - }, - ), - error: (error, stackTrace) => Center( - child: Text('$error'), - ), - loading: () => Center( - child: CircularProgressIndicator(), - ), + data: + (wordList) => ListView.builder( + itemCount: wordList.length, + itemBuilder: (context, index) { + return ListTile(title: Text(wordList.elementAt(index))); + }, + ), + error: (error, stackTrace) => Center(child: Text('$error')), + loading: () => Center(child: CircularProgressIndicator()), ); }, ), diff --git a/generate_crossword/step_03/pubspec.yaml b/generate_crossword/step_03/pubspec.yaml index cb8178f942..23da5fd396 100644 --- a/generate_crossword/step_03/pubspec.yaml +++ b/generate_crossword/step_03/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: 'none' version: 0.1.0 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 dependencies: flutter: diff --git a/generate_crossword/step_04/lib/model.dart b/generate_crossword/step_04/lib/model.dart index d45bbbe70b..7cd0da4230 100644 --- a/generate_crossword/step_04/lib/model.dart +++ b/generate_crossword/step_04/lib/model.dart @@ -89,7 +89,10 @@ abstract class CrosswordWord static int locationComparator(CrosswordWord a, CrosswordWord b) { final compareRows = a.location.y.compareTo(b.location.y); final compareColumns = a.location.x.compareTo(b.location.x); - return switch (compareColumns) { 0 => compareRows, _ => compareColumns }; + return switch (compareColumns) { + 0 => compareRows, + _ => compareColumns, + }; } /// Constructor for [CrosswordWord]. @@ -98,10 +101,13 @@ abstract class CrosswordWord required Location location, required Direction direction, }) { - return CrosswordWord((b) => b - ..word = word - ..direction = direction - ..location.replace(location)); + return CrosswordWord( + (b) => + b + ..word = word + ..direction = direction + ..location.replace(location), + ); } /// Constructor for [CrosswordWord]. @@ -148,9 +154,9 @@ abstract class CrosswordCharacter /// Constructor for [CrosswordCharacter]. /// Use [CrosswordCharacter.character] instead. - factory CrosswordCharacter( - [void Function(CrosswordCharacterBuilder)? updates]) = - _$CrosswordCharacter; + factory CrosswordCharacter([ + void Function(CrosswordCharacterBuilder)? updates, + ]) = _$CrosswordCharacter; CrosswordCharacter._(); } @@ -179,14 +185,15 @@ abstract class Crossword implements Built { required Direction direction, }) { return rebuild( - (b) => b - ..words.add( - CrosswordWord.word( - word: word, - direction: direction, - location: location, - ), - ), + (b) => + b + ..words.add( + CrosswordWord.word( + word: word, + direction: direction, + location: location, + ), + ), ); } @@ -202,19 +209,21 @@ abstract class Crossword implements Built { b.characters.updateValue( word.location.rightOffset(idx), (b) => b.rebuild((bInner) => bInner.acrossWord.replace(word)), - ifAbsent: () => CrosswordCharacter.character( - acrossWord: word, - character: character, - ), + ifAbsent: + () => CrosswordCharacter.character( + acrossWord: word, + character: character, + ), ); case Direction.down: b.characters.updateValue( word.location.downOffset(idx), (b) => b.rebuild((bInner) => bInner.downWord.replace(word)), - ifAbsent: () => CrosswordCharacter.character( - downWord: word, - character: character, - ), + ifAbsent: + () => CrosswordCharacter.character( + downWord: word, + character: character, + ), ); } } @@ -228,7 +237,8 @@ abstract class Crossword implements Built { final grid = List.generate( height, (_) => List.generate( - width, (_) => '░', // https://www.compart.com/en/unicode/U+2591 + width, + (_) => '░', // https://www.compart.com/en/unicode/U+2591 ), ); @@ -283,10 +293,5 @@ abstract class Crossword implements Built { } /// Construct the serialization/deserialization code for the data model. -@SerializersFor([ - Location, - Crossword, - CrosswordWord, - CrosswordCharacter, -]) +@SerializersFor([Location, Crossword, CrosswordWord, CrosswordCharacter]) final Serializers serializers = _$serializers; diff --git a/generate_crossword/step_04/lib/model.g.dart b/generate_crossword/step_04/lib/model.g.dart index c2c427dcb4..a4ddf76c65 100644 --- a/generate_crossword/step_04/lib/model.g.dart +++ b/generate_crossword/step_04/lib/model.g.dart @@ -6,21 +6,24 @@ part of 'model.dart'; // BuiltValueGenerator // ************************************************************************** -Serializers _$serializers = (new Serializers().toBuilder() - ..add(Crossword.serializer) - ..add(CrosswordCharacter.serializer) - ..add(CrosswordWord.serializer) - ..add(Location.serializer) - ..addBuilderFactory( - const FullType(BuiltList, const [const FullType(CrosswordWord)]), - () => new ListBuilder()) - ..addBuilderFactory( - const FullType(BuiltMap, const [ - const FullType(Location), - const FullType(CrosswordCharacter) - ]), - () => new MapBuilder())) - .build(); +Serializers _$serializers = + (new Serializers().toBuilder() + ..add(Crossword.serializer) + ..add(CrosswordCharacter.serializer) + ..add(CrosswordWord.serializer) + ..add(Location.serializer) + ..addBuilderFactory( + const FullType(BuiltList, const [const FullType(CrosswordWord)]), + () => new ListBuilder(), + ) + ..addBuilderFactory( + const FullType(BuiltMap, const [ + const FullType(Location), + const FullType(CrosswordCharacter), + ]), + () => new MapBuilder(), + )) + .build(); Serializer _$locationSerializer = new _$LocationSerializer(); Serializer _$crosswordWordSerializer = new _$CrosswordWordSerializer(); @@ -35,8 +38,11 @@ class _$LocationSerializer implements StructuredSerializer { final String wireName = 'Location'; @override - Iterable serialize(Serializers serializers, Location object, - {FullType specifiedType = FullType.unspecified}) { + Iterable serialize( + Serializers serializers, + Location object, { + FullType specifiedType = FullType.unspecified, + }) { final result = [ 'x', serializers.serialize(object.x, specifiedType: const FullType(int)), @@ -48,8 +54,11 @@ class _$LocationSerializer implements StructuredSerializer { } @override - Location deserialize(Serializers serializers, Iterable serialized, - {FullType specifiedType = FullType.unspecified}) { + Location deserialize( + Serializers serializers, + Iterable serialized, { + FullType specifiedType = FullType.unspecified, + }) { final result = new LocationBuilder(); final iterator = serialized.iterator; @@ -59,12 +68,20 @@ class _$LocationSerializer implements StructuredSerializer { final Object? value = iterator.current; switch (key) { case 'x': - result.x = serializers.deserialize(value, - specifiedType: const FullType(int))! as int; + result.x = + serializers.deserialize( + value, + specifiedType: const FullType(int), + )! + as int; break; case 'y': - result.y = serializers.deserialize(value, - specifiedType: const FullType(int))! as int; + result.y = + serializers.deserialize( + value, + specifiedType: const FullType(int), + )! + as int; break; } } @@ -80,17 +97,24 @@ class _$CrosswordWordSerializer implements StructuredSerializer { final String wireName = 'CrosswordWord'; @override - Iterable serialize(Serializers serializers, CrosswordWord object, - {FullType specifiedType = FullType.unspecified}) { + Iterable serialize( + Serializers serializers, + CrosswordWord object, { + FullType specifiedType = FullType.unspecified, + }) { final result = [ 'word', serializers.serialize(object.word, specifiedType: const FullType(String)), 'location', - serializers.serialize(object.location, - specifiedType: const FullType(Location)), + serializers.serialize( + object.location, + specifiedType: const FullType(Location), + ), 'direction', - serializers.serialize(object.direction, - specifiedType: const FullType(Direction)), + serializers.serialize( + object.direction, + specifiedType: const FullType(Direction), + ), ]; return result; @@ -98,8 +122,10 @@ class _$CrosswordWordSerializer implements StructuredSerializer { @override CrosswordWord deserialize( - Serializers serializers, Iterable serialized, - {FullType specifiedType = FullType.unspecified}) { + Serializers serializers, + Iterable serialized, { + FullType specifiedType = FullType.unspecified, + }) { final result = new CrosswordWordBuilder(); final iterator = serialized.iterator; @@ -109,16 +135,29 @@ class _$CrosswordWordSerializer implements StructuredSerializer { final Object? value = iterator.current; switch (key) { case 'word': - result.word = serializers.deserialize(value, - specifiedType: const FullType(String))! as String; + result.word = + serializers.deserialize( + value, + specifiedType: const FullType(String), + )! + as String; break; case 'location': - result.location.replace(serializers.deserialize(value, - specifiedType: const FullType(Location))! as Location); + result.location.replace( + serializers.deserialize( + value, + specifiedType: const FullType(Location), + )! + as Location, + ); break; case 'direction': - result.direction = serializers.deserialize(value, - specifiedType: const FullType(Direction))! as Direction; + result.direction = + serializers.deserialize( + value, + specifiedType: const FullType(Direction), + )! + as Direction; break; } } @@ -136,35 +175,49 @@ class _$CrosswordCharacterSerializer @override Iterable serialize( - Serializers serializers, CrosswordCharacter object, - {FullType specifiedType = FullType.unspecified}) { + Serializers serializers, + CrosswordCharacter object, { + FullType specifiedType = FullType.unspecified, + }) { final result = [ 'character', - serializers.serialize(object.character, - specifiedType: const FullType(String)), + serializers.serialize( + object.character, + specifiedType: const FullType(String), + ), ]; Object? value; value = object.acrossWord; if (value != null) { result ..add('acrossWord') - ..add(serializers.serialize(value, - specifiedType: const FullType(CrosswordWord))); + ..add( + serializers.serialize( + value, + specifiedType: const FullType(CrosswordWord), + ), + ); } value = object.downWord; if (value != null) { result ..add('downWord') - ..add(serializers.serialize(value, - specifiedType: const FullType(CrosswordWord))); + ..add( + serializers.serialize( + value, + specifiedType: const FullType(CrosswordWord), + ), + ); } return result; } @override CrosswordCharacter deserialize( - Serializers serializers, Iterable serialized, - {FullType specifiedType = FullType.unspecified}) { + Serializers serializers, + Iterable serialized, { + FullType specifiedType = FullType.unspecified, + }) { final result = new CrosswordCharacterBuilder(); final iterator = serialized.iterator; @@ -174,16 +227,30 @@ class _$CrosswordCharacterSerializer final Object? value = iterator.current; switch (key) { case 'character': - result.character = serializers.deserialize(value, - specifiedType: const FullType(String))! as String; + result.character = + serializers.deserialize( + value, + specifiedType: const FullType(String), + )! + as String; break; case 'acrossWord': - result.acrossWord.replace(serializers.deserialize(value, - specifiedType: const FullType(CrosswordWord))! as CrosswordWord); + result.acrossWord.replace( + serializers.deserialize( + value, + specifiedType: const FullType(CrosswordWord), + )! + as CrosswordWord, + ); break; case 'downWord': - result.downWord.replace(serializers.deserialize(value, - specifiedType: const FullType(CrosswordWord))! as CrosswordWord); + result.downWord.replace( + serializers.deserialize( + value, + specifiedType: const FullType(CrosswordWord), + )! + as CrosswordWord, + ); break; } } @@ -199,31 +266,42 @@ class _$CrosswordSerializer implements StructuredSerializer { final String wireName = 'Crossword'; @override - Iterable serialize(Serializers serializers, Crossword object, - {FullType specifiedType = FullType.unspecified}) { + Iterable serialize( + Serializers serializers, + Crossword object, { + FullType specifiedType = FullType.unspecified, + }) { final result = [ 'width', serializers.serialize(object.width, specifiedType: const FullType(int)), 'height', serializers.serialize(object.height, specifiedType: const FullType(int)), 'words', - serializers.serialize(object.words, - specifiedType: - const FullType(BuiltList, const [const FullType(CrosswordWord)])), + serializers.serialize( + object.words, + specifiedType: const FullType(BuiltList, const [ + const FullType(CrosswordWord), + ]), + ), 'characters', - serializers.serialize(object.characters, - specifiedType: const FullType(BuiltMap, const [ - const FullType(Location), - const FullType(CrosswordCharacter) - ])), + serializers.serialize( + object.characters, + specifiedType: const FullType(BuiltMap, const [ + const FullType(Location), + const FullType(CrosswordCharacter), + ]), + ), ]; return result; } @override - Crossword deserialize(Serializers serializers, Iterable serialized, - {FullType specifiedType = FullType.unspecified}) { + Crossword deserialize( + Serializers serializers, + Iterable serialized, { + FullType specifiedType = FullType.unspecified, + }) { final result = new CrosswordBuilder(); final iterator = serialized.iterator; @@ -233,25 +311,42 @@ class _$CrosswordSerializer implements StructuredSerializer { final Object? value = iterator.current; switch (key) { case 'width': - result.width = serializers.deserialize(value, - specifiedType: const FullType(int))! as int; + result.width = + serializers.deserialize( + value, + specifiedType: const FullType(int), + )! + as int; break; case 'height': - result.height = serializers.deserialize(value, - specifiedType: const FullType(int))! as int; + result.height = + serializers.deserialize( + value, + specifiedType: const FullType(int), + )! + as int; break; case 'words': - result.words.replace(serializers.deserialize(value, - specifiedType: const FullType( - BuiltList, const [const FullType(CrosswordWord)]))! - as BuiltList); + result.words.replace( + serializers.deserialize( + value, + specifiedType: const FullType(BuiltList, const [ + const FullType(CrosswordWord), + ]), + )! + as BuiltList, + ); break; case 'characters': - result.characters.replace(serializers.deserialize(value, + result.characters.replace( + serializers.deserialize( + value, specifiedType: const FullType(BuiltMap, const [ const FullType(Location), - const FullType(CrosswordCharacter) - ]))!); + const FullType(CrosswordCharacter), + ]), + )!, + ); break; } } @@ -343,10 +438,12 @@ class LocationBuilder implements Builder { Location build() => _build(); _$Location _build() { - final _$result = _$v ?? + final _$result = + _$v ?? new _$Location._( - x: BuiltValueNullFieldError.checkNotNull(x, r'Location', 'x'), - y: BuiltValueNullFieldError.checkNotNull(y, r'Location', 'y')); + x: BuiltValueNullFieldError.checkNotNull(x, r'Location', 'x'), + y: BuiltValueNullFieldError.checkNotNull(y, r'Location', 'y'), + ); replace(_$result); return _$result; } @@ -363,14 +460,22 @@ class _$CrosswordWord extends CrosswordWord { factory _$CrosswordWord([void Function(CrosswordWordBuilder)? updates]) => (new CrosswordWordBuilder()..update(updates))._build(); - _$CrosswordWord._( - {required this.word, required this.location, required this.direction}) - : super._() { + _$CrosswordWord._({ + required this.word, + required this.location, + required this.direction, + }) : super._() { BuiltValueNullFieldError.checkNotNull(word, r'CrosswordWord', 'word'); BuiltValueNullFieldError.checkNotNull( - location, r'CrosswordWord', 'location'); + location, + r'CrosswordWord', + 'location', + ); BuiltValueNullFieldError.checkNotNull( - direction, r'CrosswordWord', 'direction'); + direction, + r'CrosswordWord', + 'direction', + ); } @override @@ -455,13 +560,21 @@ class CrosswordWordBuilder _$CrosswordWord _build() { _$CrosswordWord _$result; try { - _$result = _$v ?? + _$result = + _$v ?? new _$CrosswordWord._( - word: BuiltValueNullFieldError.checkNotNull( - word, r'CrosswordWord', 'word'), - location: location.build(), - direction: BuiltValueNullFieldError.checkNotNull( - direction, r'CrosswordWord', 'direction')); + word: BuiltValueNullFieldError.checkNotNull( + word, + r'CrosswordWord', + 'word', + ), + location: location.build(), + direction: BuiltValueNullFieldError.checkNotNull( + direction, + r'CrosswordWord', + 'direction', + ), + ); } catch (_) { late String _$failedField; try { @@ -469,7 +582,10 @@ class CrosswordWordBuilder location.build(); } catch (e) { throw new BuiltValueNestedFieldError( - r'CrosswordWord', _$failedField, e.toString()); + r'CrosswordWord', + _$failedField, + e.toString(), + ); } rethrow; } @@ -486,21 +602,26 @@ class _$CrosswordCharacter extends CrosswordCharacter { @override final CrosswordWord? downWord; - factory _$CrosswordCharacter( - [void Function(CrosswordCharacterBuilder)? updates]) => - (new CrosswordCharacterBuilder()..update(updates))._build(); + factory _$CrosswordCharacter([ + void Function(CrosswordCharacterBuilder)? updates, + ]) => (new CrosswordCharacterBuilder()..update(updates))._build(); - _$CrosswordCharacter._( - {required this.character, this.acrossWord, this.downWord}) - : super._() { + _$CrosswordCharacter._({ + required this.character, + this.acrossWord, + this.downWord, + }) : super._() { BuiltValueNullFieldError.checkNotNull( - character, r'CrosswordCharacter', 'character'); + character, + r'CrosswordCharacter', + 'character', + ); } @override CrosswordCharacter rebuild( - void Function(CrosswordCharacterBuilder) updates) => - (toBuilder()..update(updates)).build(); + void Function(CrosswordCharacterBuilder) updates, + ) => (toBuilder()..update(updates)).build(); @override CrosswordCharacterBuilder toBuilder() => @@ -584,12 +705,17 @@ class CrosswordCharacterBuilder _$CrosswordCharacter _build() { _$CrosswordCharacter _$result; try { - _$result = _$v ?? + _$result = + _$v ?? new _$CrosswordCharacter._( - character: BuiltValueNullFieldError.checkNotNull( - character, r'CrosswordCharacter', 'character'), - acrossWord: _acrossWord?.build(), - downWord: _downWord?.build()); + character: BuiltValueNullFieldError.checkNotNull( + character, + r'CrosswordCharacter', + 'character', + ), + acrossWord: _acrossWord?.build(), + downWord: _downWord?.build(), + ); } catch (_) { late String _$failedField; try { @@ -599,7 +725,10 @@ class CrosswordCharacterBuilder _downWord?.build(); } catch (e) { throw new BuiltValueNestedFieldError( - r'CrosswordCharacter', _$failedField, e.toString()); + r'CrosswordCharacter', + _$failedField, + e.toString(), + ); } rethrow; } @@ -621,17 +750,20 @@ class _$Crossword extends Crossword { factory _$Crossword([void Function(CrosswordBuilder)? updates]) => (new CrosswordBuilder()..update(updates))._build(); - _$Crossword._( - {required this.width, - required this.height, - required this.words, - required this.characters}) - : super._() { + _$Crossword._({ + required this.width, + required this.height, + required this.words, + required this.characters, + }) : super._() { BuiltValueNullFieldError.checkNotNull(width, r'Crossword', 'width'); BuiltValueNullFieldError.checkNotNull(height, r'Crossword', 'height'); BuiltValueNullFieldError.checkNotNull(words, r'Crossword', 'words'); BuiltValueNullFieldError.checkNotNull( - characters, r'Crossword', 'characters'); + characters, + r'Crossword', + 'characters', + ); } @override @@ -727,14 +859,22 @@ class CrosswordBuilder implements Builder { Crossword._fillCharacters(this); _$Crossword _$result; try { - _$result = _$v ?? + _$result = + _$v ?? new _$Crossword._( - width: BuiltValueNullFieldError.checkNotNull( - width, r'Crossword', 'width'), - height: BuiltValueNullFieldError.checkNotNull( - height, r'Crossword', 'height'), - words: words.build(), - characters: characters.build()); + width: BuiltValueNullFieldError.checkNotNull( + width, + r'Crossword', + 'width', + ), + height: BuiltValueNullFieldError.checkNotNull( + height, + r'Crossword', + 'height', + ), + words: words.build(), + characters: characters.build(), + ); } catch (_) { late String _$failedField; try { @@ -744,7 +884,10 @@ class CrosswordBuilder implements Builder { characters.build(); } catch (e) { throw new BuiltValueNestedFieldError( - r'Crossword', _$failedField, e.toString()); + r'Crossword', + _$failedField, + e.toString(), + ); } rethrow; } diff --git a/generate_crossword/step_04/lib/providers.dart b/generate_crossword/step_04/lib/providers.dart index 7b7a0d1f89..5e378932a8 100644 --- a/generate_crossword/step_04/lib/providers.dart +++ b/generate_crossword/step_04/lib/providers.dart @@ -26,10 +26,16 @@ Future> wordList(Ref ref) async { final re = RegExp(r'^[a-z]+$'); final words = await rootBundle.loadString('assets/words.txt'); - return const LineSplitter().convert(words).toBuiltSet().rebuild((b) => b - ..map((word) => word.toLowerCase().trim()) - ..where((word) => word.length > 2) - ..where((word) => re.hasMatch(word))); + return const LineSplitter() + .convert(words) + .toBuiltSet() + .rebuild( + (b) => + b + ..map((word) => word.toLowerCase().trim()) + ..where((word) => word.length > 2) + ..where((word) => re.hasMatch(word)), + ); } /// An enumeration for different sizes of [model.Crossword]s. @@ -40,10 +46,7 @@ enum CrosswordSize { xlarge(width: 160, height: 88), xxlarge(width: 500, height: 500); - const CrosswordSize({ - required this.width, - required this.height, - }); + const CrosswordSize({required this.width, required this.height}); final int width; final int height; @@ -71,8 +74,10 @@ Stream crossword(Ref ref) async* { final size = ref.watch(sizeProvider); final wordListAsync = ref.watch(wordListProvider); - var crossword = - model.Crossword.crossword(width: size.width, height: size.height); + var crossword = model.Crossword.crossword( + width: size.width, + height: size.height, + ); yield* wordListAsync.when( data: (wordList) async* { @@ -81,10 +86,15 @@ Stream crossword(Ref ref) async* { final direction = _random.nextBool() ? model.Direction.across : model.Direction.down; final location = model.Location.at( - _random.nextInt(size.width), _random.nextInt(size.height)); + _random.nextInt(size.width), + _random.nextInt(size.height), + ); crossword = crossword.addWord( - word: word, direction: direction, location: location); + word: word, + direction: direction, + location: location, + ); yield crossword; await Future.delayed(Duration(milliseconds: 100)); } diff --git a/generate_crossword/step_04/lib/widgets/crossword_generator_app.dart b/generate_crossword/step_04/lib/widgets/crossword_generator_app.dart index 0c4a659789..6775f9fd89 100644 --- a/generate_crossword/step_04/lib/widgets/crossword_generator_app.dart +++ b/generate_crossword/step_04/lib/widgets/crossword_generator_app.dart @@ -24,9 +24,7 @@ class CrosswordGeneratorApp extends StatelessWidget { ), title: Text('Crossword Generator'), ), - body: SafeArea( - child: CrosswordWidget(), - ), + body: SafeArea(child: CrosswordWidget()), ), ); } @@ -46,19 +44,21 @@ class _EagerInitialization extends ConsumerWidget { class _CrosswordGeneratorMenu extends ConsumerWidget { @override Widget build(BuildContext context, WidgetRef ref) => MenuAnchor( - menuChildren: [ - for (final entry in CrosswordSize.values) - MenuItemButton( - onPressed: () => ref.read(sizeProvider.notifier).setSize(entry), - leadingIcon: entry == ref.watch(sizeProvider) + menuChildren: [ + for (final entry in CrosswordSize.values) + MenuItemButton( + onPressed: () => ref.read(sizeProvider.notifier).setSize(entry), + leadingIcon: + entry == ref.watch(sizeProvider) ? Icon(Icons.radio_button_checked_outlined) : Icon(Icons.radio_button_unchecked_outlined), - child: Text(entry.label), - ), - ], - builder: (context, controller, child) => IconButton( + child: Text(entry.label), + ), + ], + builder: + (context, controller, child) => IconButton( onPressed: () => controller.open(), icon: Icon(Icons.settings), ), - ); + ); } diff --git a/generate_crossword/step_04/lib/widgets/crossword_widget.dart b/generate_crossword/step_04/lib/widgets/crossword_widget.dart index 17941440ee..1795fe68da 100644 --- a/generate_crossword/step_04/lib/widgets/crossword_widget.dart +++ b/generate_crossword/step_04/lib/widgets/crossword_widget.dart @@ -70,9 +70,11 @@ class CrosswordWidget extends ConsumerWidget { foregroundDecoration: TableSpanDecoration( border: TableSpanBorder( leading: BorderSide( - color: Theme.of(context).colorScheme.onPrimaryContainer), + color: Theme.of(context).colorScheme.onPrimaryContainer, + ), trailing: BorderSide( - color: Theme.of(context).colorScheme.onPrimaryContainer), + color: Theme.of(context).colorScheme.onPrimaryContainer, + ), ), ), ); diff --git a/generate_crossword/step_04/pubspec.yaml b/generate_crossword/step_04/pubspec.yaml index cb8178f942..23da5fd396 100644 --- a/generate_crossword/step_04/pubspec.yaml +++ b/generate_crossword/step_04/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: 'none' version: 0.1.0 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 dependencies: flutter: diff --git a/generate_crossword/step_05_a/lib/model.dart b/generate_crossword/step_05_a/lib/model.dart index a9a144b816..48ac50d45d 100644 --- a/generate_crossword/step_05_a/lib/model.dart +++ b/generate_crossword/step_05_a/lib/model.dart @@ -89,7 +89,10 @@ abstract class CrosswordWord static int locationComparator(CrosswordWord a, CrosswordWord b) { final compareRows = a.location.y.compareTo(b.location.y); final compareColumns = a.location.x.compareTo(b.location.x); - return switch (compareColumns) { 0 => compareRows, _ => compareColumns }; + return switch (compareColumns) { + 0 => compareRows, + _ => compareColumns, + }; } /// Constructor for [CrosswordWord]. @@ -98,10 +101,13 @@ abstract class CrosswordWord required Location location, required Direction direction, }) { - return CrosswordWord((b) => b - ..word = word - ..direction = direction - ..location.replace(location)); + return CrosswordWord( + (b) => + b + ..word = word + ..direction = direction + ..location.replace(location), + ); } /// Constructor for [CrosswordWord]. @@ -148,9 +154,9 @@ abstract class CrosswordCharacter /// Constructor for [CrosswordCharacter]. /// Use [CrosswordCharacter.character] instead. - factory CrosswordCharacter( - [void Function(CrosswordCharacterBuilder)? updates]) = - _$CrosswordCharacter; + factory CrosswordCharacter([ + void Function(CrosswordCharacterBuilder)? updates, + ]) = _$CrosswordCharacter; CrosswordCharacter._(); } @@ -281,14 +287,15 @@ abstract class Crossword implements Built { } final candidate = rebuild( - (b) => b - ..words.add( - CrosswordWord.word( - word: word, - direction: direction, - location: location, - ), - ), + (b) => + b + ..words.add( + CrosswordWord.word( + word: word, + direction: direction, + location: location, + ), + ), ); if (candidate.valid) { @@ -310,19 +317,21 @@ abstract class Crossword implements Built { b.characters.updateValue( word.location.rightOffset(idx), (b) => b.rebuild((bInner) => bInner.acrossWord.replace(word)), - ifAbsent: () => CrosswordCharacter.character( - acrossWord: word, - character: character, - ), + ifAbsent: + () => CrosswordCharacter.character( + acrossWord: word, + character: character, + ), ); case Direction.down: b.characters.updateValue( word.location.downOffset(idx), (b) => b.rebuild((bInner) => bInner.downWord.replace(word)), - ifAbsent: () => CrosswordCharacter.character( - downWord: word, - character: character, - ), + ifAbsent: + () => CrosswordCharacter.character( + downWord: word, + character: character, + ), ); } } @@ -336,7 +345,8 @@ abstract class Crossword implements Built { final grid = List.generate( height, (_) => List.generate( - width, (_) => '░', // https://www.compart.com/en/unicode/U+2591 + width, + (_) => '░', // https://www.compart.com/en/unicode/U+2591 ), ); @@ -391,10 +401,5 @@ abstract class Crossword implements Built { } /// Construct the serialization/deserialization code for the data model. -@SerializersFor([ - Location, - Crossword, - CrosswordWord, - CrosswordCharacter, -]) +@SerializersFor([Location, Crossword, CrosswordWord, CrosswordCharacter]) final Serializers serializers = _$serializers; diff --git a/generate_crossword/step_05_a/lib/model.g.dart b/generate_crossword/step_05_a/lib/model.g.dart index c2c427dcb4..a4ddf76c65 100644 --- a/generate_crossword/step_05_a/lib/model.g.dart +++ b/generate_crossword/step_05_a/lib/model.g.dart @@ -6,21 +6,24 @@ part of 'model.dart'; // BuiltValueGenerator // ************************************************************************** -Serializers _$serializers = (new Serializers().toBuilder() - ..add(Crossword.serializer) - ..add(CrosswordCharacter.serializer) - ..add(CrosswordWord.serializer) - ..add(Location.serializer) - ..addBuilderFactory( - const FullType(BuiltList, const [const FullType(CrosswordWord)]), - () => new ListBuilder()) - ..addBuilderFactory( - const FullType(BuiltMap, const [ - const FullType(Location), - const FullType(CrosswordCharacter) - ]), - () => new MapBuilder())) - .build(); +Serializers _$serializers = + (new Serializers().toBuilder() + ..add(Crossword.serializer) + ..add(CrosswordCharacter.serializer) + ..add(CrosswordWord.serializer) + ..add(Location.serializer) + ..addBuilderFactory( + const FullType(BuiltList, const [const FullType(CrosswordWord)]), + () => new ListBuilder(), + ) + ..addBuilderFactory( + const FullType(BuiltMap, const [ + const FullType(Location), + const FullType(CrosswordCharacter), + ]), + () => new MapBuilder(), + )) + .build(); Serializer _$locationSerializer = new _$LocationSerializer(); Serializer _$crosswordWordSerializer = new _$CrosswordWordSerializer(); @@ -35,8 +38,11 @@ class _$LocationSerializer implements StructuredSerializer { final String wireName = 'Location'; @override - Iterable serialize(Serializers serializers, Location object, - {FullType specifiedType = FullType.unspecified}) { + Iterable serialize( + Serializers serializers, + Location object, { + FullType specifiedType = FullType.unspecified, + }) { final result = [ 'x', serializers.serialize(object.x, specifiedType: const FullType(int)), @@ -48,8 +54,11 @@ class _$LocationSerializer implements StructuredSerializer { } @override - Location deserialize(Serializers serializers, Iterable serialized, - {FullType specifiedType = FullType.unspecified}) { + Location deserialize( + Serializers serializers, + Iterable serialized, { + FullType specifiedType = FullType.unspecified, + }) { final result = new LocationBuilder(); final iterator = serialized.iterator; @@ -59,12 +68,20 @@ class _$LocationSerializer implements StructuredSerializer { final Object? value = iterator.current; switch (key) { case 'x': - result.x = serializers.deserialize(value, - specifiedType: const FullType(int))! as int; + result.x = + serializers.deserialize( + value, + specifiedType: const FullType(int), + )! + as int; break; case 'y': - result.y = serializers.deserialize(value, - specifiedType: const FullType(int))! as int; + result.y = + serializers.deserialize( + value, + specifiedType: const FullType(int), + )! + as int; break; } } @@ -80,17 +97,24 @@ class _$CrosswordWordSerializer implements StructuredSerializer { final String wireName = 'CrosswordWord'; @override - Iterable serialize(Serializers serializers, CrosswordWord object, - {FullType specifiedType = FullType.unspecified}) { + Iterable serialize( + Serializers serializers, + CrosswordWord object, { + FullType specifiedType = FullType.unspecified, + }) { final result = [ 'word', serializers.serialize(object.word, specifiedType: const FullType(String)), 'location', - serializers.serialize(object.location, - specifiedType: const FullType(Location)), + serializers.serialize( + object.location, + specifiedType: const FullType(Location), + ), 'direction', - serializers.serialize(object.direction, - specifiedType: const FullType(Direction)), + serializers.serialize( + object.direction, + specifiedType: const FullType(Direction), + ), ]; return result; @@ -98,8 +122,10 @@ class _$CrosswordWordSerializer implements StructuredSerializer { @override CrosswordWord deserialize( - Serializers serializers, Iterable serialized, - {FullType specifiedType = FullType.unspecified}) { + Serializers serializers, + Iterable serialized, { + FullType specifiedType = FullType.unspecified, + }) { final result = new CrosswordWordBuilder(); final iterator = serialized.iterator; @@ -109,16 +135,29 @@ class _$CrosswordWordSerializer implements StructuredSerializer { final Object? value = iterator.current; switch (key) { case 'word': - result.word = serializers.deserialize(value, - specifiedType: const FullType(String))! as String; + result.word = + serializers.deserialize( + value, + specifiedType: const FullType(String), + )! + as String; break; case 'location': - result.location.replace(serializers.deserialize(value, - specifiedType: const FullType(Location))! as Location); + result.location.replace( + serializers.deserialize( + value, + specifiedType: const FullType(Location), + )! + as Location, + ); break; case 'direction': - result.direction = serializers.deserialize(value, - specifiedType: const FullType(Direction))! as Direction; + result.direction = + serializers.deserialize( + value, + specifiedType: const FullType(Direction), + )! + as Direction; break; } } @@ -136,35 +175,49 @@ class _$CrosswordCharacterSerializer @override Iterable serialize( - Serializers serializers, CrosswordCharacter object, - {FullType specifiedType = FullType.unspecified}) { + Serializers serializers, + CrosswordCharacter object, { + FullType specifiedType = FullType.unspecified, + }) { final result = [ 'character', - serializers.serialize(object.character, - specifiedType: const FullType(String)), + serializers.serialize( + object.character, + specifiedType: const FullType(String), + ), ]; Object? value; value = object.acrossWord; if (value != null) { result ..add('acrossWord') - ..add(serializers.serialize(value, - specifiedType: const FullType(CrosswordWord))); + ..add( + serializers.serialize( + value, + specifiedType: const FullType(CrosswordWord), + ), + ); } value = object.downWord; if (value != null) { result ..add('downWord') - ..add(serializers.serialize(value, - specifiedType: const FullType(CrosswordWord))); + ..add( + serializers.serialize( + value, + specifiedType: const FullType(CrosswordWord), + ), + ); } return result; } @override CrosswordCharacter deserialize( - Serializers serializers, Iterable serialized, - {FullType specifiedType = FullType.unspecified}) { + Serializers serializers, + Iterable serialized, { + FullType specifiedType = FullType.unspecified, + }) { final result = new CrosswordCharacterBuilder(); final iterator = serialized.iterator; @@ -174,16 +227,30 @@ class _$CrosswordCharacterSerializer final Object? value = iterator.current; switch (key) { case 'character': - result.character = serializers.deserialize(value, - specifiedType: const FullType(String))! as String; + result.character = + serializers.deserialize( + value, + specifiedType: const FullType(String), + )! + as String; break; case 'acrossWord': - result.acrossWord.replace(serializers.deserialize(value, - specifiedType: const FullType(CrosswordWord))! as CrosswordWord); + result.acrossWord.replace( + serializers.deserialize( + value, + specifiedType: const FullType(CrosswordWord), + )! + as CrosswordWord, + ); break; case 'downWord': - result.downWord.replace(serializers.deserialize(value, - specifiedType: const FullType(CrosswordWord))! as CrosswordWord); + result.downWord.replace( + serializers.deserialize( + value, + specifiedType: const FullType(CrosswordWord), + )! + as CrosswordWord, + ); break; } } @@ -199,31 +266,42 @@ class _$CrosswordSerializer implements StructuredSerializer { final String wireName = 'Crossword'; @override - Iterable serialize(Serializers serializers, Crossword object, - {FullType specifiedType = FullType.unspecified}) { + Iterable serialize( + Serializers serializers, + Crossword object, { + FullType specifiedType = FullType.unspecified, + }) { final result = [ 'width', serializers.serialize(object.width, specifiedType: const FullType(int)), 'height', serializers.serialize(object.height, specifiedType: const FullType(int)), 'words', - serializers.serialize(object.words, - specifiedType: - const FullType(BuiltList, const [const FullType(CrosswordWord)])), + serializers.serialize( + object.words, + specifiedType: const FullType(BuiltList, const [ + const FullType(CrosswordWord), + ]), + ), 'characters', - serializers.serialize(object.characters, - specifiedType: const FullType(BuiltMap, const [ - const FullType(Location), - const FullType(CrosswordCharacter) - ])), + serializers.serialize( + object.characters, + specifiedType: const FullType(BuiltMap, const [ + const FullType(Location), + const FullType(CrosswordCharacter), + ]), + ), ]; return result; } @override - Crossword deserialize(Serializers serializers, Iterable serialized, - {FullType specifiedType = FullType.unspecified}) { + Crossword deserialize( + Serializers serializers, + Iterable serialized, { + FullType specifiedType = FullType.unspecified, + }) { final result = new CrosswordBuilder(); final iterator = serialized.iterator; @@ -233,25 +311,42 @@ class _$CrosswordSerializer implements StructuredSerializer { final Object? value = iterator.current; switch (key) { case 'width': - result.width = serializers.deserialize(value, - specifiedType: const FullType(int))! as int; + result.width = + serializers.deserialize( + value, + specifiedType: const FullType(int), + )! + as int; break; case 'height': - result.height = serializers.deserialize(value, - specifiedType: const FullType(int))! as int; + result.height = + serializers.deserialize( + value, + specifiedType: const FullType(int), + )! + as int; break; case 'words': - result.words.replace(serializers.deserialize(value, - specifiedType: const FullType( - BuiltList, const [const FullType(CrosswordWord)]))! - as BuiltList); + result.words.replace( + serializers.deserialize( + value, + specifiedType: const FullType(BuiltList, const [ + const FullType(CrosswordWord), + ]), + )! + as BuiltList, + ); break; case 'characters': - result.characters.replace(serializers.deserialize(value, + result.characters.replace( + serializers.deserialize( + value, specifiedType: const FullType(BuiltMap, const [ const FullType(Location), - const FullType(CrosswordCharacter) - ]))!); + const FullType(CrosswordCharacter), + ]), + )!, + ); break; } } @@ -343,10 +438,12 @@ class LocationBuilder implements Builder { Location build() => _build(); _$Location _build() { - final _$result = _$v ?? + final _$result = + _$v ?? new _$Location._( - x: BuiltValueNullFieldError.checkNotNull(x, r'Location', 'x'), - y: BuiltValueNullFieldError.checkNotNull(y, r'Location', 'y')); + x: BuiltValueNullFieldError.checkNotNull(x, r'Location', 'x'), + y: BuiltValueNullFieldError.checkNotNull(y, r'Location', 'y'), + ); replace(_$result); return _$result; } @@ -363,14 +460,22 @@ class _$CrosswordWord extends CrosswordWord { factory _$CrosswordWord([void Function(CrosswordWordBuilder)? updates]) => (new CrosswordWordBuilder()..update(updates))._build(); - _$CrosswordWord._( - {required this.word, required this.location, required this.direction}) - : super._() { + _$CrosswordWord._({ + required this.word, + required this.location, + required this.direction, + }) : super._() { BuiltValueNullFieldError.checkNotNull(word, r'CrosswordWord', 'word'); BuiltValueNullFieldError.checkNotNull( - location, r'CrosswordWord', 'location'); + location, + r'CrosswordWord', + 'location', + ); BuiltValueNullFieldError.checkNotNull( - direction, r'CrosswordWord', 'direction'); + direction, + r'CrosswordWord', + 'direction', + ); } @override @@ -455,13 +560,21 @@ class CrosswordWordBuilder _$CrosswordWord _build() { _$CrosswordWord _$result; try { - _$result = _$v ?? + _$result = + _$v ?? new _$CrosswordWord._( - word: BuiltValueNullFieldError.checkNotNull( - word, r'CrosswordWord', 'word'), - location: location.build(), - direction: BuiltValueNullFieldError.checkNotNull( - direction, r'CrosswordWord', 'direction')); + word: BuiltValueNullFieldError.checkNotNull( + word, + r'CrosswordWord', + 'word', + ), + location: location.build(), + direction: BuiltValueNullFieldError.checkNotNull( + direction, + r'CrosswordWord', + 'direction', + ), + ); } catch (_) { late String _$failedField; try { @@ -469,7 +582,10 @@ class CrosswordWordBuilder location.build(); } catch (e) { throw new BuiltValueNestedFieldError( - r'CrosswordWord', _$failedField, e.toString()); + r'CrosswordWord', + _$failedField, + e.toString(), + ); } rethrow; } @@ -486,21 +602,26 @@ class _$CrosswordCharacter extends CrosswordCharacter { @override final CrosswordWord? downWord; - factory _$CrosswordCharacter( - [void Function(CrosswordCharacterBuilder)? updates]) => - (new CrosswordCharacterBuilder()..update(updates))._build(); + factory _$CrosswordCharacter([ + void Function(CrosswordCharacterBuilder)? updates, + ]) => (new CrosswordCharacterBuilder()..update(updates))._build(); - _$CrosswordCharacter._( - {required this.character, this.acrossWord, this.downWord}) - : super._() { + _$CrosswordCharacter._({ + required this.character, + this.acrossWord, + this.downWord, + }) : super._() { BuiltValueNullFieldError.checkNotNull( - character, r'CrosswordCharacter', 'character'); + character, + r'CrosswordCharacter', + 'character', + ); } @override CrosswordCharacter rebuild( - void Function(CrosswordCharacterBuilder) updates) => - (toBuilder()..update(updates)).build(); + void Function(CrosswordCharacterBuilder) updates, + ) => (toBuilder()..update(updates)).build(); @override CrosswordCharacterBuilder toBuilder() => @@ -584,12 +705,17 @@ class CrosswordCharacterBuilder _$CrosswordCharacter _build() { _$CrosswordCharacter _$result; try { - _$result = _$v ?? + _$result = + _$v ?? new _$CrosswordCharacter._( - character: BuiltValueNullFieldError.checkNotNull( - character, r'CrosswordCharacter', 'character'), - acrossWord: _acrossWord?.build(), - downWord: _downWord?.build()); + character: BuiltValueNullFieldError.checkNotNull( + character, + r'CrosswordCharacter', + 'character', + ), + acrossWord: _acrossWord?.build(), + downWord: _downWord?.build(), + ); } catch (_) { late String _$failedField; try { @@ -599,7 +725,10 @@ class CrosswordCharacterBuilder _downWord?.build(); } catch (e) { throw new BuiltValueNestedFieldError( - r'CrosswordCharacter', _$failedField, e.toString()); + r'CrosswordCharacter', + _$failedField, + e.toString(), + ); } rethrow; } @@ -621,17 +750,20 @@ class _$Crossword extends Crossword { factory _$Crossword([void Function(CrosswordBuilder)? updates]) => (new CrosswordBuilder()..update(updates))._build(); - _$Crossword._( - {required this.width, - required this.height, - required this.words, - required this.characters}) - : super._() { + _$Crossword._({ + required this.width, + required this.height, + required this.words, + required this.characters, + }) : super._() { BuiltValueNullFieldError.checkNotNull(width, r'Crossword', 'width'); BuiltValueNullFieldError.checkNotNull(height, r'Crossword', 'height'); BuiltValueNullFieldError.checkNotNull(words, r'Crossword', 'words'); BuiltValueNullFieldError.checkNotNull( - characters, r'Crossword', 'characters'); + characters, + r'Crossword', + 'characters', + ); } @override @@ -727,14 +859,22 @@ class CrosswordBuilder implements Builder { Crossword._fillCharacters(this); _$Crossword _$result; try { - _$result = _$v ?? + _$result = + _$v ?? new _$Crossword._( - width: BuiltValueNullFieldError.checkNotNull( - width, r'Crossword', 'width'), - height: BuiltValueNullFieldError.checkNotNull( - height, r'Crossword', 'height'), - words: words.build(), - characters: characters.build()); + width: BuiltValueNullFieldError.checkNotNull( + width, + r'Crossword', + 'width', + ), + height: BuiltValueNullFieldError.checkNotNull( + height, + r'Crossword', + 'height', + ), + words: words.build(), + characters: characters.build(), + ); } catch (_) { late String _$failedField; try { @@ -744,7 +884,10 @@ class CrosswordBuilder implements Builder { characters.build(); } catch (e) { throw new BuiltValueNestedFieldError( - r'Crossword', _$failedField, e.toString()); + r'Crossword', + _$failedField, + e.toString(), + ); } rethrow; } diff --git a/generate_crossword/step_05_a/lib/providers.dart b/generate_crossword/step_05_a/lib/providers.dart index 02b84e6ae9..102cc10871 100644 --- a/generate_crossword/step_05_a/lib/providers.dart +++ b/generate_crossword/step_05_a/lib/providers.dart @@ -26,10 +26,16 @@ Future> wordList(Ref ref) async { final re = RegExp(r'^[a-z]+$'); final words = await rootBundle.loadString('assets/words.txt'); - return const LineSplitter().convert(words).toBuiltSet().rebuild((b) => b - ..map((word) => word.toLowerCase().trim()) - ..where((word) => word.length > 2) - ..where((word) => re.hasMatch(word))); + return const LineSplitter() + .convert(words) + .toBuiltSet() + .rebuild( + (b) => + b + ..map((word) => word.toLowerCase().trim()) + ..where((word) => word.length > 2) + ..where((word) => re.hasMatch(word)), + ); } /// An enumeration for different sizes of [model.Crossword]s. @@ -40,10 +46,7 @@ enum CrosswordSize { xlarge(width: 160, height: 88), xxlarge(width: 500, height: 500); - const CrosswordSize({ - required this.width, - required this.height, - }); + const CrosswordSize({required this.width, required this.height}); final int width; final int height; @@ -71,8 +74,10 @@ Stream crossword(Ref ref) async* { final size = ref.watch(sizeProvider); final wordListAsync = ref.watch(wordListProvider); - var crossword = - model.Crossword.crossword(width: size.width, height: size.height); + var crossword = model.Crossword.crossword( + width: size.width, + height: size.height, + ); yield* wordListAsync.when( data: (wordList) async* { @@ -81,10 +86,15 @@ Stream crossword(Ref ref) async* { final direction = _random.nextBool() ? model.Direction.across : model.Direction.down; final location = model.Location.at( - _random.nextInt(size.width), _random.nextInt(size.height)); + _random.nextInt(size.width), + _random.nextInt(size.height), + ); var candidate = crossword.addWord( - word: word, direction: direction, location: location); + word: word, + direction: direction, + location: location, + ); await Future.delayed(Duration(milliseconds: 10)); if (candidate != null) { debugPrint('Added word: $word'); diff --git a/generate_crossword/step_05_a/lib/widgets/crossword_generator_app.dart b/generate_crossword/step_05_a/lib/widgets/crossword_generator_app.dart index 0c4a659789..6775f9fd89 100644 --- a/generate_crossword/step_05_a/lib/widgets/crossword_generator_app.dart +++ b/generate_crossword/step_05_a/lib/widgets/crossword_generator_app.dart @@ -24,9 +24,7 @@ class CrosswordGeneratorApp extends StatelessWidget { ), title: Text('Crossword Generator'), ), - body: SafeArea( - child: CrosswordWidget(), - ), + body: SafeArea(child: CrosswordWidget()), ), ); } @@ -46,19 +44,21 @@ class _EagerInitialization extends ConsumerWidget { class _CrosswordGeneratorMenu extends ConsumerWidget { @override Widget build(BuildContext context, WidgetRef ref) => MenuAnchor( - menuChildren: [ - for (final entry in CrosswordSize.values) - MenuItemButton( - onPressed: () => ref.read(sizeProvider.notifier).setSize(entry), - leadingIcon: entry == ref.watch(sizeProvider) + menuChildren: [ + for (final entry in CrosswordSize.values) + MenuItemButton( + onPressed: () => ref.read(sizeProvider.notifier).setSize(entry), + leadingIcon: + entry == ref.watch(sizeProvider) ? Icon(Icons.radio_button_checked_outlined) : Icon(Icons.radio_button_unchecked_outlined), - child: Text(entry.label), - ), - ], - builder: (context, controller, child) => IconButton( + child: Text(entry.label), + ), + ], + builder: + (context, controller, child) => IconButton( onPressed: () => controller.open(), icon: Icon(Icons.settings), ), - ); + ); } diff --git a/generate_crossword/step_05_a/lib/widgets/crossword_widget.dart b/generate_crossword/step_05_a/lib/widgets/crossword_widget.dart index 17941440ee..1795fe68da 100644 --- a/generate_crossword/step_05_a/lib/widgets/crossword_widget.dart +++ b/generate_crossword/step_05_a/lib/widgets/crossword_widget.dart @@ -70,9 +70,11 @@ class CrosswordWidget extends ConsumerWidget { foregroundDecoration: TableSpanDecoration( border: TableSpanBorder( leading: BorderSide( - color: Theme.of(context).colorScheme.onPrimaryContainer), + color: Theme.of(context).colorScheme.onPrimaryContainer, + ), trailing: BorderSide( - color: Theme.of(context).colorScheme.onPrimaryContainer), + color: Theme.of(context).colorScheme.onPrimaryContainer, + ), ), ), ); diff --git a/generate_crossword/step_05_a/pubspec.yaml b/generate_crossword/step_05_a/pubspec.yaml index cb8178f942..23da5fd396 100644 --- a/generate_crossword/step_05_a/pubspec.yaml +++ b/generate_crossword/step_05_a/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: 'none' version: 0.1.0 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 dependencies: flutter: diff --git a/generate_crossword/step_05_a/test/model_test.dart b/generate_crossword/step_05_a/test/model_test.dart index 2b2f850b2d..1c7adb3431 100644 --- a/generate_crossword/step_05_a/test/model_test.dart +++ b/generate_crossword/step_05_a/test/model_test.dart @@ -38,28 +38,27 @@ void main() { expect(crossword.words.isNotEmpty, true); expect(crossword.words.length, 2); expect( - crossword.words - .rebuild( - (b) => b.where((b) => b.direction == Direction.across), - ) - .length, - 1); + crossword.words + .rebuild((b) => b.where((b) => b.direction == Direction.across)) + .length, + 1, + ); expect( - crossword.words - .rebuild( - (b) => b.where((b) => b.direction == Direction.down), - ) - .length, - 1); + crossword.words + .rebuild((b) => b.where((b) => b.direction == Direction.down)) + .length, + 1, + ); expect(crossword.characters.isNotEmpty, isTrue); expect(crossword.characters.length, 7); expect( - crossword.characters[topLeft], - CrosswordCharacter.character( - acrossWord: thisWord, - downWord: thatWord, - character: 't', - )); + crossword.characters[topLeft], + CrosswordCharacter.character( + acrossWord: thisWord, + downWord: thatWord, + character: 't', + ), + ); expect(crossword.valid, isTrue); }); @@ -85,19 +84,17 @@ void main() { expect(crossword.words.isNotEmpty, true); expect( - crossword.words - .rebuild( - (b) => b.where((b) => b.direction == Direction.across), - ) - .length, - 2); + crossword.words + .rebuild((b) => b.where((b) => b.direction == Direction.across)) + .length, + 2, + ); expect( - crossword.words - .rebuild( - (b) => b.where((b) => b.direction == Direction.down), - ) - .isEmpty, - true); + crossword.words + .rebuild((b) => b.where((b) => b.direction == Direction.down)) + .isEmpty, + true, + ); expect(crossword.characters.isNotEmpty, isTrue); expect(crossword.characters.length, 8); expect(crossword.valid, isFalse); @@ -107,11 +104,12 @@ void main() { Crossword crossword = Crossword.crossword(width: 50, height: 50); expect(crossword.valid, true); - crossword = crossword.addWord( - direction: Direction.across, - location: Location.at(0, 0), - word: 'this', - )!; + crossword = + crossword.addWord( + direction: Direction.across, + location: Location.at(0, 0), + word: 'this', + )!; expect(crossword.valid, true); final crossword2 = crossword.addWord( @@ -173,17 +171,18 @@ void main() { final topLeft = Location.at(0, 0); - crossword = crossword - .addWord( - location: topLeft, - word: 'this', - direction: Direction.down, - )! - .addWord( - location: topLeft, - word: 'total', - direction: Direction.across, - )!; + crossword = + crossword + .addWord( + location: topLeft, + word: 'this', + direction: Direction.down, + )! + .addWord( + location: topLeft, + word: 'total', + direction: Direction.across, + )!; expect(crossword.valid, isTrue); @@ -234,77 +233,85 @@ void main() { }); test('Crossword is not valid with run-on across words', () { - Crossword crossword = - Crossword.crossword(width: 50, height: 50).rebuild((b) => b - ..words.addAll([ - CrosswordWord.word( - direction: Direction.across, - location: Location.at(0, 0), - word: 'word', - ), - CrosswordWord.word( - direction: Direction.across, - location: Location.at(4, 0), - word: 'another', - ), - ])); + Crossword crossword = Crossword.crossword(width: 50, height: 50).rebuild( + (b) => + b + ..words.addAll([ + CrosswordWord.word( + direction: Direction.across, + location: Location.at(0, 0), + word: 'word', + ), + CrosswordWord.word( + direction: Direction.across, + location: Location.at(4, 0), + word: 'another', + ), + ]), + ); expect(crossword.valid, false); }); test('Crossword is not valid with run-on down words', () { - Crossword crossword = - Crossword.crossword(width: 50, height: 50).rebuild((b) => b - ..words.addAll([ - CrosswordWord.word( - direction: Direction.down, - location: Location.at(0, 0), - word: 'word', - ), - CrosswordWord.word( - direction: Direction.down, - location: Location.at(0, 4), - word: 'another', - ), - ])); + Crossword crossword = Crossword.crossword(width: 50, height: 50).rebuild( + (b) => + b + ..words.addAll([ + CrosswordWord.word( + direction: Direction.down, + location: Location.at(0, 0), + word: 'word', + ), + CrosswordWord.word( + direction: Direction.down, + location: Location.at(0, 4), + word: 'another', + ), + ]), + ); expect(crossword.valid, false); }); test('Crossword is not valid with run-on across/down words', () { - Crossword crossword = - Crossword.crossword(width: 50, height: 50).rebuild((b) => b - ..words.addAll([ - CrosswordWord.word( - direction: Direction.across, - location: Location.at(0, 0), - word: 'word', - ), - CrosswordWord.word( - direction: Direction.down, - location: Location.at(4, 0), - word: 'another', - ), - ])); + Crossword crossword = Crossword.crossword(width: 50, height: 50).rebuild( + (b) => + b + ..words.addAll([ + CrosswordWord.word( + direction: Direction.across, + location: Location.at(0, 0), + word: 'word', + ), + CrosswordWord.word( + direction: Direction.down, + location: Location.at(4, 0), + word: 'another', + ), + ]), + ); expect(crossword.valid, false); }); test('Crossword is not valid with run-on down/across words', () { - Crossword? crossword = - Crossword.crossword(width: 50, height: 50).rebuild((b) => b - ..words.addAll([ - CrosswordWord.word( - direction: Direction.down, - location: Location.at(0, 0), - word: 'word', - ), - CrosswordWord.word( - direction: Direction.across, - location: Location.at(0, 4), - word: 'another', - ), - ])); + Crossword? crossword = Crossword.crossword(width: 50, height: 50).rebuild( + (b) => + b + ..words.addAll([ + CrosswordWord.word( + direction: Direction.down, + location: Location.at(0, 0), + word: 'word', + ), + CrosswordWord.word( + direction: Direction.across, + location: Location.at(0, 4), + word: 'another', + ), + ]), + ); expect(crossword.valid, false); }); @@ -312,36 +319,40 @@ void main() { test('Adding duplicate across words returns null', () { Crossword? crossword = Crossword.crossword(width: 50, height: 50); - crossword = crossword.addWord( - direction: Direction.across, - location: Location.at(0, 0), - word: 'duplicated', - )!; - - expect( + crossword = crossword.addWord( direction: Direction.across, - location: Location.at(4, 4), + location: Location.at(0, 0), word: 'duplicated', - ), - isNull); + )!; + + expect( + crossword.addWord( + direction: Direction.across, + location: Location.at(4, 4), + word: 'duplicated', + ), + isNull, + ); }); test('Crossword is not valid with duplicate across words', () { - Crossword? crossword = - Crossword.crossword(width: 50, height: 50).rebuild((b) => b - ..words.addAll([ - CrosswordWord.word( - direction: Direction.across, - location: Location.at(0, 0), - word: 'duplicated', - ), - CrosswordWord.word( - direction: Direction.across, - location: Location.at(4, 4), - word: 'duplicated', - ), - ])); + Crossword? crossword = Crossword.crossword(width: 50, height: 50).rebuild( + (b) => + b + ..words.addAll([ + CrosswordWord.word( + direction: Direction.across, + location: Location.at(0, 0), + word: 'duplicated', + ), + CrosswordWord.word( + direction: Direction.across, + location: Location.at(4, 4), + word: 'duplicated', + ), + ]), + ); expect(crossword.valid, false); }); @@ -349,36 +360,40 @@ void main() { test('Adding duplicate down words returns null', () { Crossword? crossword = Crossword.crossword(width: 50, height: 50); - crossword = crossword.addWord( - direction: Direction.down, - location: Location.at(0, 0), - word: 'duplicated', - )!; - - expect( + crossword = crossword.addWord( direction: Direction.down, - location: Location.at(4, 4), + location: Location.at(0, 0), word: 'duplicated', - ), - isNull); + )!; + + expect( + crossword.addWord( + direction: Direction.down, + location: Location.at(4, 4), + word: 'duplicated', + ), + isNull, + ); }); test('Crossword is not valid with duplicate down words', () { - Crossword? crossword = - Crossword.crossword(width: 50, height: 50).rebuild((b) => b - ..words.addAll([ - CrosswordWord.word( - direction: Direction.down, - location: Location.at(0, 0), - word: 'duplicated', - ), - CrosswordWord.word( - direction: Direction.down, - location: Location.at(4, 4), - word: 'duplicated', - ), - ])); + Crossword? crossword = Crossword.crossword(width: 50, height: 50).rebuild( + (b) => + b + ..words.addAll([ + CrosswordWord.word( + direction: Direction.down, + location: Location.at(0, 0), + word: 'duplicated', + ), + CrosswordWord.word( + direction: Direction.down, + location: Location.at(4, 4), + word: 'duplicated', + ), + ]), + ); expect(crossword.valid, false); }); diff --git a/generate_crossword/step_05_b/lib/model.dart b/generate_crossword/step_05_b/lib/model.dart index a9a144b816..48ac50d45d 100644 --- a/generate_crossword/step_05_b/lib/model.dart +++ b/generate_crossword/step_05_b/lib/model.dart @@ -89,7 +89,10 @@ abstract class CrosswordWord static int locationComparator(CrosswordWord a, CrosswordWord b) { final compareRows = a.location.y.compareTo(b.location.y); final compareColumns = a.location.x.compareTo(b.location.x); - return switch (compareColumns) { 0 => compareRows, _ => compareColumns }; + return switch (compareColumns) { + 0 => compareRows, + _ => compareColumns, + }; } /// Constructor for [CrosswordWord]. @@ -98,10 +101,13 @@ abstract class CrosswordWord required Location location, required Direction direction, }) { - return CrosswordWord((b) => b - ..word = word - ..direction = direction - ..location.replace(location)); + return CrosswordWord( + (b) => + b + ..word = word + ..direction = direction + ..location.replace(location), + ); } /// Constructor for [CrosswordWord]. @@ -148,9 +154,9 @@ abstract class CrosswordCharacter /// Constructor for [CrosswordCharacter]. /// Use [CrosswordCharacter.character] instead. - factory CrosswordCharacter( - [void Function(CrosswordCharacterBuilder)? updates]) = - _$CrosswordCharacter; + factory CrosswordCharacter([ + void Function(CrosswordCharacterBuilder)? updates, + ]) = _$CrosswordCharacter; CrosswordCharacter._(); } @@ -281,14 +287,15 @@ abstract class Crossword implements Built { } final candidate = rebuild( - (b) => b - ..words.add( - CrosswordWord.word( - word: word, - direction: direction, - location: location, - ), - ), + (b) => + b + ..words.add( + CrosswordWord.word( + word: word, + direction: direction, + location: location, + ), + ), ); if (candidate.valid) { @@ -310,19 +317,21 @@ abstract class Crossword implements Built { b.characters.updateValue( word.location.rightOffset(idx), (b) => b.rebuild((bInner) => bInner.acrossWord.replace(word)), - ifAbsent: () => CrosswordCharacter.character( - acrossWord: word, - character: character, - ), + ifAbsent: + () => CrosswordCharacter.character( + acrossWord: word, + character: character, + ), ); case Direction.down: b.characters.updateValue( word.location.downOffset(idx), (b) => b.rebuild((bInner) => bInner.downWord.replace(word)), - ifAbsent: () => CrosswordCharacter.character( - downWord: word, - character: character, - ), + ifAbsent: + () => CrosswordCharacter.character( + downWord: word, + character: character, + ), ); } } @@ -336,7 +345,8 @@ abstract class Crossword implements Built { final grid = List.generate( height, (_) => List.generate( - width, (_) => '░', // https://www.compart.com/en/unicode/U+2591 + width, + (_) => '░', // https://www.compart.com/en/unicode/U+2591 ), ); @@ -391,10 +401,5 @@ abstract class Crossword implements Built { } /// Construct the serialization/deserialization code for the data model. -@SerializersFor([ - Location, - Crossword, - CrosswordWord, - CrosswordCharacter, -]) +@SerializersFor([Location, Crossword, CrosswordWord, CrosswordCharacter]) final Serializers serializers = _$serializers; diff --git a/generate_crossword/step_05_b/lib/model.g.dart b/generate_crossword/step_05_b/lib/model.g.dart index c2c427dcb4..a4ddf76c65 100644 --- a/generate_crossword/step_05_b/lib/model.g.dart +++ b/generate_crossword/step_05_b/lib/model.g.dart @@ -6,21 +6,24 @@ part of 'model.dart'; // BuiltValueGenerator // ************************************************************************** -Serializers _$serializers = (new Serializers().toBuilder() - ..add(Crossword.serializer) - ..add(CrosswordCharacter.serializer) - ..add(CrosswordWord.serializer) - ..add(Location.serializer) - ..addBuilderFactory( - const FullType(BuiltList, const [const FullType(CrosswordWord)]), - () => new ListBuilder()) - ..addBuilderFactory( - const FullType(BuiltMap, const [ - const FullType(Location), - const FullType(CrosswordCharacter) - ]), - () => new MapBuilder())) - .build(); +Serializers _$serializers = + (new Serializers().toBuilder() + ..add(Crossword.serializer) + ..add(CrosswordCharacter.serializer) + ..add(CrosswordWord.serializer) + ..add(Location.serializer) + ..addBuilderFactory( + const FullType(BuiltList, const [const FullType(CrosswordWord)]), + () => new ListBuilder(), + ) + ..addBuilderFactory( + const FullType(BuiltMap, const [ + const FullType(Location), + const FullType(CrosswordCharacter), + ]), + () => new MapBuilder(), + )) + .build(); Serializer _$locationSerializer = new _$LocationSerializer(); Serializer _$crosswordWordSerializer = new _$CrosswordWordSerializer(); @@ -35,8 +38,11 @@ class _$LocationSerializer implements StructuredSerializer { final String wireName = 'Location'; @override - Iterable serialize(Serializers serializers, Location object, - {FullType specifiedType = FullType.unspecified}) { + Iterable serialize( + Serializers serializers, + Location object, { + FullType specifiedType = FullType.unspecified, + }) { final result = [ 'x', serializers.serialize(object.x, specifiedType: const FullType(int)), @@ -48,8 +54,11 @@ class _$LocationSerializer implements StructuredSerializer { } @override - Location deserialize(Serializers serializers, Iterable serialized, - {FullType specifiedType = FullType.unspecified}) { + Location deserialize( + Serializers serializers, + Iterable serialized, { + FullType specifiedType = FullType.unspecified, + }) { final result = new LocationBuilder(); final iterator = serialized.iterator; @@ -59,12 +68,20 @@ class _$LocationSerializer implements StructuredSerializer { final Object? value = iterator.current; switch (key) { case 'x': - result.x = serializers.deserialize(value, - specifiedType: const FullType(int))! as int; + result.x = + serializers.deserialize( + value, + specifiedType: const FullType(int), + )! + as int; break; case 'y': - result.y = serializers.deserialize(value, - specifiedType: const FullType(int))! as int; + result.y = + serializers.deserialize( + value, + specifiedType: const FullType(int), + )! + as int; break; } } @@ -80,17 +97,24 @@ class _$CrosswordWordSerializer implements StructuredSerializer { final String wireName = 'CrosswordWord'; @override - Iterable serialize(Serializers serializers, CrosswordWord object, - {FullType specifiedType = FullType.unspecified}) { + Iterable serialize( + Serializers serializers, + CrosswordWord object, { + FullType specifiedType = FullType.unspecified, + }) { final result = [ 'word', serializers.serialize(object.word, specifiedType: const FullType(String)), 'location', - serializers.serialize(object.location, - specifiedType: const FullType(Location)), + serializers.serialize( + object.location, + specifiedType: const FullType(Location), + ), 'direction', - serializers.serialize(object.direction, - specifiedType: const FullType(Direction)), + serializers.serialize( + object.direction, + specifiedType: const FullType(Direction), + ), ]; return result; @@ -98,8 +122,10 @@ class _$CrosswordWordSerializer implements StructuredSerializer { @override CrosswordWord deserialize( - Serializers serializers, Iterable serialized, - {FullType specifiedType = FullType.unspecified}) { + Serializers serializers, + Iterable serialized, { + FullType specifiedType = FullType.unspecified, + }) { final result = new CrosswordWordBuilder(); final iterator = serialized.iterator; @@ -109,16 +135,29 @@ class _$CrosswordWordSerializer implements StructuredSerializer { final Object? value = iterator.current; switch (key) { case 'word': - result.word = serializers.deserialize(value, - specifiedType: const FullType(String))! as String; + result.word = + serializers.deserialize( + value, + specifiedType: const FullType(String), + )! + as String; break; case 'location': - result.location.replace(serializers.deserialize(value, - specifiedType: const FullType(Location))! as Location); + result.location.replace( + serializers.deserialize( + value, + specifiedType: const FullType(Location), + )! + as Location, + ); break; case 'direction': - result.direction = serializers.deserialize(value, - specifiedType: const FullType(Direction))! as Direction; + result.direction = + serializers.deserialize( + value, + specifiedType: const FullType(Direction), + )! + as Direction; break; } } @@ -136,35 +175,49 @@ class _$CrosswordCharacterSerializer @override Iterable serialize( - Serializers serializers, CrosswordCharacter object, - {FullType specifiedType = FullType.unspecified}) { + Serializers serializers, + CrosswordCharacter object, { + FullType specifiedType = FullType.unspecified, + }) { final result = [ 'character', - serializers.serialize(object.character, - specifiedType: const FullType(String)), + serializers.serialize( + object.character, + specifiedType: const FullType(String), + ), ]; Object? value; value = object.acrossWord; if (value != null) { result ..add('acrossWord') - ..add(serializers.serialize(value, - specifiedType: const FullType(CrosswordWord))); + ..add( + serializers.serialize( + value, + specifiedType: const FullType(CrosswordWord), + ), + ); } value = object.downWord; if (value != null) { result ..add('downWord') - ..add(serializers.serialize(value, - specifiedType: const FullType(CrosswordWord))); + ..add( + serializers.serialize( + value, + specifiedType: const FullType(CrosswordWord), + ), + ); } return result; } @override CrosswordCharacter deserialize( - Serializers serializers, Iterable serialized, - {FullType specifiedType = FullType.unspecified}) { + Serializers serializers, + Iterable serialized, { + FullType specifiedType = FullType.unspecified, + }) { final result = new CrosswordCharacterBuilder(); final iterator = serialized.iterator; @@ -174,16 +227,30 @@ class _$CrosswordCharacterSerializer final Object? value = iterator.current; switch (key) { case 'character': - result.character = serializers.deserialize(value, - specifiedType: const FullType(String))! as String; + result.character = + serializers.deserialize( + value, + specifiedType: const FullType(String), + )! + as String; break; case 'acrossWord': - result.acrossWord.replace(serializers.deserialize(value, - specifiedType: const FullType(CrosswordWord))! as CrosswordWord); + result.acrossWord.replace( + serializers.deserialize( + value, + specifiedType: const FullType(CrosswordWord), + )! + as CrosswordWord, + ); break; case 'downWord': - result.downWord.replace(serializers.deserialize(value, - specifiedType: const FullType(CrosswordWord))! as CrosswordWord); + result.downWord.replace( + serializers.deserialize( + value, + specifiedType: const FullType(CrosswordWord), + )! + as CrosswordWord, + ); break; } } @@ -199,31 +266,42 @@ class _$CrosswordSerializer implements StructuredSerializer { final String wireName = 'Crossword'; @override - Iterable serialize(Serializers serializers, Crossword object, - {FullType specifiedType = FullType.unspecified}) { + Iterable serialize( + Serializers serializers, + Crossword object, { + FullType specifiedType = FullType.unspecified, + }) { final result = [ 'width', serializers.serialize(object.width, specifiedType: const FullType(int)), 'height', serializers.serialize(object.height, specifiedType: const FullType(int)), 'words', - serializers.serialize(object.words, - specifiedType: - const FullType(BuiltList, const [const FullType(CrosswordWord)])), + serializers.serialize( + object.words, + specifiedType: const FullType(BuiltList, const [ + const FullType(CrosswordWord), + ]), + ), 'characters', - serializers.serialize(object.characters, - specifiedType: const FullType(BuiltMap, const [ - const FullType(Location), - const FullType(CrosswordCharacter) - ])), + serializers.serialize( + object.characters, + specifiedType: const FullType(BuiltMap, const [ + const FullType(Location), + const FullType(CrosswordCharacter), + ]), + ), ]; return result; } @override - Crossword deserialize(Serializers serializers, Iterable serialized, - {FullType specifiedType = FullType.unspecified}) { + Crossword deserialize( + Serializers serializers, + Iterable serialized, { + FullType specifiedType = FullType.unspecified, + }) { final result = new CrosswordBuilder(); final iterator = serialized.iterator; @@ -233,25 +311,42 @@ class _$CrosswordSerializer implements StructuredSerializer { final Object? value = iterator.current; switch (key) { case 'width': - result.width = serializers.deserialize(value, - specifiedType: const FullType(int))! as int; + result.width = + serializers.deserialize( + value, + specifiedType: const FullType(int), + )! + as int; break; case 'height': - result.height = serializers.deserialize(value, - specifiedType: const FullType(int))! as int; + result.height = + serializers.deserialize( + value, + specifiedType: const FullType(int), + )! + as int; break; case 'words': - result.words.replace(serializers.deserialize(value, - specifiedType: const FullType( - BuiltList, const [const FullType(CrosswordWord)]))! - as BuiltList); + result.words.replace( + serializers.deserialize( + value, + specifiedType: const FullType(BuiltList, const [ + const FullType(CrosswordWord), + ]), + )! + as BuiltList, + ); break; case 'characters': - result.characters.replace(serializers.deserialize(value, + result.characters.replace( + serializers.deserialize( + value, specifiedType: const FullType(BuiltMap, const [ const FullType(Location), - const FullType(CrosswordCharacter) - ]))!); + const FullType(CrosswordCharacter), + ]), + )!, + ); break; } } @@ -343,10 +438,12 @@ class LocationBuilder implements Builder { Location build() => _build(); _$Location _build() { - final _$result = _$v ?? + final _$result = + _$v ?? new _$Location._( - x: BuiltValueNullFieldError.checkNotNull(x, r'Location', 'x'), - y: BuiltValueNullFieldError.checkNotNull(y, r'Location', 'y')); + x: BuiltValueNullFieldError.checkNotNull(x, r'Location', 'x'), + y: BuiltValueNullFieldError.checkNotNull(y, r'Location', 'y'), + ); replace(_$result); return _$result; } @@ -363,14 +460,22 @@ class _$CrosswordWord extends CrosswordWord { factory _$CrosswordWord([void Function(CrosswordWordBuilder)? updates]) => (new CrosswordWordBuilder()..update(updates))._build(); - _$CrosswordWord._( - {required this.word, required this.location, required this.direction}) - : super._() { + _$CrosswordWord._({ + required this.word, + required this.location, + required this.direction, + }) : super._() { BuiltValueNullFieldError.checkNotNull(word, r'CrosswordWord', 'word'); BuiltValueNullFieldError.checkNotNull( - location, r'CrosswordWord', 'location'); + location, + r'CrosswordWord', + 'location', + ); BuiltValueNullFieldError.checkNotNull( - direction, r'CrosswordWord', 'direction'); + direction, + r'CrosswordWord', + 'direction', + ); } @override @@ -455,13 +560,21 @@ class CrosswordWordBuilder _$CrosswordWord _build() { _$CrosswordWord _$result; try { - _$result = _$v ?? + _$result = + _$v ?? new _$CrosswordWord._( - word: BuiltValueNullFieldError.checkNotNull( - word, r'CrosswordWord', 'word'), - location: location.build(), - direction: BuiltValueNullFieldError.checkNotNull( - direction, r'CrosswordWord', 'direction')); + word: BuiltValueNullFieldError.checkNotNull( + word, + r'CrosswordWord', + 'word', + ), + location: location.build(), + direction: BuiltValueNullFieldError.checkNotNull( + direction, + r'CrosswordWord', + 'direction', + ), + ); } catch (_) { late String _$failedField; try { @@ -469,7 +582,10 @@ class CrosswordWordBuilder location.build(); } catch (e) { throw new BuiltValueNestedFieldError( - r'CrosswordWord', _$failedField, e.toString()); + r'CrosswordWord', + _$failedField, + e.toString(), + ); } rethrow; } @@ -486,21 +602,26 @@ class _$CrosswordCharacter extends CrosswordCharacter { @override final CrosswordWord? downWord; - factory _$CrosswordCharacter( - [void Function(CrosswordCharacterBuilder)? updates]) => - (new CrosswordCharacterBuilder()..update(updates))._build(); + factory _$CrosswordCharacter([ + void Function(CrosswordCharacterBuilder)? updates, + ]) => (new CrosswordCharacterBuilder()..update(updates))._build(); - _$CrosswordCharacter._( - {required this.character, this.acrossWord, this.downWord}) - : super._() { + _$CrosswordCharacter._({ + required this.character, + this.acrossWord, + this.downWord, + }) : super._() { BuiltValueNullFieldError.checkNotNull( - character, r'CrosswordCharacter', 'character'); + character, + r'CrosswordCharacter', + 'character', + ); } @override CrosswordCharacter rebuild( - void Function(CrosswordCharacterBuilder) updates) => - (toBuilder()..update(updates)).build(); + void Function(CrosswordCharacterBuilder) updates, + ) => (toBuilder()..update(updates)).build(); @override CrosswordCharacterBuilder toBuilder() => @@ -584,12 +705,17 @@ class CrosswordCharacterBuilder _$CrosswordCharacter _build() { _$CrosswordCharacter _$result; try { - _$result = _$v ?? + _$result = + _$v ?? new _$CrosswordCharacter._( - character: BuiltValueNullFieldError.checkNotNull( - character, r'CrosswordCharacter', 'character'), - acrossWord: _acrossWord?.build(), - downWord: _downWord?.build()); + character: BuiltValueNullFieldError.checkNotNull( + character, + r'CrosswordCharacter', + 'character', + ), + acrossWord: _acrossWord?.build(), + downWord: _downWord?.build(), + ); } catch (_) { late String _$failedField; try { @@ -599,7 +725,10 @@ class CrosswordCharacterBuilder _downWord?.build(); } catch (e) { throw new BuiltValueNestedFieldError( - r'CrosswordCharacter', _$failedField, e.toString()); + r'CrosswordCharacter', + _$failedField, + e.toString(), + ); } rethrow; } @@ -621,17 +750,20 @@ class _$Crossword extends Crossword { factory _$Crossword([void Function(CrosswordBuilder)? updates]) => (new CrosswordBuilder()..update(updates))._build(); - _$Crossword._( - {required this.width, - required this.height, - required this.words, - required this.characters}) - : super._() { + _$Crossword._({ + required this.width, + required this.height, + required this.words, + required this.characters, + }) : super._() { BuiltValueNullFieldError.checkNotNull(width, r'Crossword', 'width'); BuiltValueNullFieldError.checkNotNull(height, r'Crossword', 'height'); BuiltValueNullFieldError.checkNotNull(words, r'Crossword', 'words'); BuiltValueNullFieldError.checkNotNull( - characters, r'Crossword', 'characters'); + characters, + r'Crossword', + 'characters', + ); } @override @@ -727,14 +859,22 @@ class CrosswordBuilder implements Builder { Crossword._fillCharacters(this); _$Crossword _$result; try { - _$result = _$v ?? + _$result = + _$v ?? new _$Crossword._( - width: BuiltValueNullFieldError.checkNotNull( - width, r'Crossword', 'width'), - height: BuiltValueNullFieldError.checkNotNull( - height, r'Crossword', 'height'), - words: words.build(), - characters: characters.build()); + width: BuiltValueNullFieldError.checkNotNull( + width, + r'Crossword', + 'width', + ), + height: BuiltValueNullFieldError.checkNotNull( + height, + r'Crossword', + 'height', + ), + words: words.build(), + characters: characters.build(), + ); } catch (_) { late String _$failedField; try { @@ -744,7 +884,10 @@ class CrosswordBuilder implements Builder { characters.build(); } catch (e) { throw new BuiltValueNestedFieldError( - r'Crossword', _$failedField, e.toString()); + r'Crossword', + _$failedField, + e.toString(), + ); } rethrow; } diff --git a/generate_crossword/step_05_b/lib/providers.dart b/generate_crossword/step_05_b/lib/providers.dart index b6191b4bb3..44bbaea58e 100644 --- a/generate_crossword/step_05_b/lib/providers.dart +++ b/generate_crossword/step_05_b/lib/providers.dart @@ -26,10 +26,16 @@ Future> wordList(Ref ref) async { final re = RegExp(r'^[a-z]+$'); final words = await rootBundle.loadString('assets/words.txt'); - return const LineSplitter().convert(words).toBuiltSet().rebuild((b) => b - ..map((word) => word.toLowerCase().trim()) - ..where((word) => word.length > 2) - ..where((word) => re.hasMatch(word))); + return const LineSplitter() + .convert(words) + .toBuiltSet() + .rebuild( + (b) => + b + ..map((word) => word.toLowerCase().trim()) + ..where((word) => word.length > 2) + ..where((word) => re.hasMatch(word)), + ); } /// An enumeration for different sizes of [model.Crossword]s. @@ -40,10 +46,7 @@ enum CrosswordSize { xlarge(width: 160, height: 88), xxlarge(width: 500, height: 500); - const CrosswordSize({ - required this.width, - required this.height, - }); + const CrosswordSize({required this.width, required this.height}); final int width; final int height; @@ -71,8 +74,10 @@ Stream crossword(Ref ref) async* { final size = ref.watch(sizeProvider); final wordListAsync = ref.watch(wordListProvider); - var crossword = - model.Crossword.crossword(width: size.width, height: size.height); + var crossword = model.Crossword.crossword( + width: size.width, + height: size.height, + ); yield* wordListAsync.when( data: (wordList) async* { @@ -81,13 +86,19 @@ Stream crossword(Ref ref) async* { final direction = _random.nextBool() ? model.Direction.across : model.Direction.down; final location = model.Location.at( - _random.nextInt(size.width), _random.nextInt(size.height)); + _random.nextInt(size.width), + _random.nextInt(size.height), + ); try { - var candidate = await compute( - ((String, model.Direction, model.Location) wordToAdd) { + var candidate = await compute(( + (String, model.Direction, model.Location) wordToAdd, + ) { final (word, direction, location) = wordToAdd; return crossword.addWord( - word: word, direction: direction, location: location); + word: word, + direction: direction, + location: location, + ); }, (word, direction, location)); if (candidate != null) { diff --git a/generate_crossword/step_05_b/lib/widgets/crossword_generator_app.dart b/generate_crossword/step_05_b/lib/widgets/crossword_generator_app.dart index 0c4a659789..6775f9fd89 100644 --- a/generate_crossword/step_05_b/lib/widgets/crossword_generator_app.dart +++ b/generate_crossword/step_05_b/lib/widgets/crossword_generator_app.dart @@ -24,9 +24,7 @@ class CrosswordGeneratorApp extends StatelessWidget { ), title: Text('Crossword Generator'), ), - body: SafeArea( - child: CrosswordWidget(), - ), + body: SafeArea(child: CrosswordWidget()), ), ); } @@ -46,19 +44,21 @@ class _EagerInitialization extends ConsumerWidget { class _CrosswordGeneratorMenu extends ConsumerWidget { @override Widget build(BuildContext context, WidgetRef ref) => MenuAnchor( - menuChildren: [ - for (final entry in CrosswordSize.values) - MenuItemButton( - onPressed: () => ref.read(sizeProvider.notifier).setSize(entry), - leadingIcon: entry == ref.watch(sizeProvider) + menuChildren: [ + for (final entry in CrosswordSize.values) + MenuItemButton( + onPressed: () => ref.read(sizeProvider.notifier).setSize(entry), + leadingIcon: + entry == ref.watch(sizeProvider) ? Icon(Icons.radio_button_checked_outlined) : Icon(Icons.radio_button_unchecked_outlined), - child: Text(entry.label), - ), - ], - builder: (context, controller, child) => IconButton( + child: Text(entry.label), + ), + ], + builder: + (context, controller, child) => IconButton( onPressed: () => controller.open(), icon: Icon(Icons.settings), ), - ); + ); } diff --git a/generate_crossword/step_05_b/lib/widgets/crossword_widget.dart b/generate_crossword/step_05_b/lib/widgets/crossword_widget.dart index 17941440ee..1795fe68da 100644 --- a/generate_crossword/step_05_b/lib/widgets/crossword_widget.dart +++ b/generate_crossword/step_05_b/lib/widgets/crossword_widget.dart @@ -70,9 +70,11 @@ class CrosswordWidget extends ConsumerWidget { foregroundDecoration: TableSpanDecoration( border: TableSpanBorder( leading: BorderSide( - color: Theme.of(context).colorScheme.onPrimaryContainer), + color: Theme.of(context).colorScheme.onPrimaryContainer, + ), trailing: BorderSide( - color: Theme.of(context).colorScheme.onPrimaryContainer), + color: Theme.of(context).colorScheme.onPrimaryContainer, + ), ), ), ); diff --git a/generate_crossword/step_05_b/pubspec.yaml b/generate_crossword/step_05_b/pubspec.yaml index cb8178f942..23da5fd396 100644 --- a/generate_crossword/step_05_b/pubspec.yaml +++ b/generate_crossword/step_05_b/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: 'none' version: 0.1.0 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 dependencies: flutter: diff --git a/generate_crossword/step_05_b/test/model_test.dart b/generate_crossword/step_05_b/test/model_test.dart index 2b2f850b2d..1c7adb3431 100644 --- a/generate_crossword/step_05_b/test/model_test.dart +++ b/generate_crossword/step_05_b/test/model_test.dart @@ -38,28 +38,27 @@ void main() { expect(crossword.words.isNotEmpty, true); expect(crossword.words.length, 2); expect( - crossword.words - .rebuild( - (b) => b.where((b) => b.direction == Direction.across), - ) - .length, - 1); + crossword.words + .rebuild((b) => b.where((b) => b.direction == Direction.across)) + .length, + 1, + ); expect( - crossword.words - .rebuild( - (b) => b.where((b) => b.direction == Direction.down), - ) - .length, - 1); + crossword.words + .rebuild((b) => b.where((b) => b.direction == Direction.down)) + .length, + 1, + ); expect(crossword.characters.isNotEmpty, isTrue); expect(crossword.characters.length, 7); expect( - crossword.characters[topLeft], - CrosswordCharacter.character( - acrossWord: thisWord, - downWord: thatWord, - character: 't', - )); + crossword.characters[topLeft], + CrosswordCharacter.character( + acrossWord: thisWord, + downWord: thatWord, + character: 't', + ), + ); expect(crossword.valid, isTrue); }); @@ -85,19 +84,17 @@ void main() { expect(crossword.words.isNotEmpty, true); expect( - crossword.words - .rebuild( - (b) => b.where((b) => b.direction == Direction.across), - ) - .length, - 2); + crossword.words + .rebuild((b) => b.where((b) => b.direction == Direction.across)) + .length, + 2, + ); expect( - crossword.words - .rebuild( - (b) => b.where((b) => b.direction == Direction.down), - ) - .isEmpty, - true); + crossword.words + .rebuild((b) => b.where((b) => b.direction == Direction.down)) + .isEmpty, + true, + ); expect(crossword.characters.isNotEmpty, isTrue); expect(crossword.characters.length, 8); expect(crossword.valid, isFalse); @@ -107,11 +104,12 @@ void main() { Crossword crossword = Crossword.crossword(width: 50, height: 50); expect(crossword.valid, true); - crossword = crossword.addWord( - direction: Direction.across, - location: Location.at(0, 0), - word: 'this', - )!; + crossword = + crossword.addWord( + direction: Direction.across, + location: Location.at(0, 0), + word: 'this', + )!; expect(crossword.valid, true); final crossword2 = crossword.addWord( @@ -173,17 +171,18 @@ void main() { final topLeft = Location.at(0, 0); - crossword = crossword - .addWord( - location: topLeft, - word: 'this', - direction: Direction.down, - )! - .addWord( - location: topLeft, - word: 'total', - direction: Direction.across, - )!; + crossword = + crossword + .addWord( + location: topLeft, + word: 'this', + direction: Direction.down, + )! + .addWord( + location: topLeft, + word: 'total', + direction: Direction.across, + )!; expect(crossword.valid, isTrue); @@ -234,77 +233,85 @@ void main() { }); test('Crossword is not valid with run-on across words', () { - Crossword crossword = - Crossword.crossword(width: 50, height: 50).rebuild((b) => b - ..words.addAll([ - CrosswordWord.word( - direction: Direction.across, - location: Location.at(0, 0), - word: 'word', - ), - CrosswordWord.word( - direction: Direction.across, - location: Location.at(4, 0), - word: 'another', - ), - ])); + Crossword crossword = Crossword.crossword(width: 50, height: 50).rebuild( + (b) => + b + ..words.addAll([ + CrosswordWord.word( + direction: Direction.across, + location: Location.at(0, 0), + word: 'word', + ), + CrosswordWord.word( + direction: Direction.across, + location: Location.at(4, 0), + word: 'another', + ), + ]), + ); expect(crossword.valid, false); }); test('Crossword is not valid with run-on down words', () { - Crossword crossword = - Crossword.crossword(width: 50, height: 50).rebuild((b) => b - ..words.addAll([ - CrosswordWord.word( - direction: Direction.down, - location: Location.at(0, 0), - word: 'word', - ), - CrosswordWord.word( - direction: Direction.down, - location: Location.at(0, 4), - word: 'another', - ), - ])); + Crossword crossword = Crossword.crossword(width: 50, height: 50).rebuild( + (b) => + b + ..words.addAll([ + CrosswordWord.word( + direction: Direction.down, + location: Location.at(0, 0), + word: 'word', + ), + CrosswordWord.word( + direction: Direction.down, + location: Location.at(0, 4), + word: 'another', + ), + ]), + ); expect(crossword.valid, false); }); test('Crossword is not valid with run-on across/down words', () { - Crossword crossword = - Crossword.crossword(width: 50, height: 50).rebuild((b) => b - ..words.addAll([ - CrosswordWord.word( - direction: Direction.across, - location: Location.at(0, 0), - word: 'word', - ), - CrosswordWord.word( - direction: Direction.down, - location: Location.at(4, 0), - word: 'another', - ), - ])); + Crossword crossword = Crossword.crossword(width: 50, height: 50).rebuild( + (b) => + b + ..words.addAll([ + CrosswordWord.word( + direction: Direction.across, + location: Location.at(0, 0), + word: 'word', + ), + CrosswordWord.word( + direction: Direction.down, + location: Location.at(4, 0), + word: 'another', + ), + ]), + ); expect(crossword.valid, false); }); test('Crossword is not valid with run-on down/across words', () { - Crossword? crossword = - Crossword.crossword(width: 50, height: 50).rebuild((b) => b - ..words.addAll([ - CrosswordWord.word( - direction: Direction.down, - location: Location.at(0, 0), - word: 'word', - ), - CrosswordWord.word( - direction: Direction.across, - location: Location.at(0, 4), - word: 'another', - ), - ])); + Crossword? crossword = Crossword.crossword(width: 50, height: 50).rebuild( + (b) => + b + ..words.addAll([ + CrosswordWord.word( + direction: Direction.down, + location: Location.at(0, 0), + word: 'word', + ), + CrosswordWord.word( + direction: Direction.across, + location: Location.at(0, 4), + word: 'another', + ), + ]), + ); expect(crossword.valid, false); }); @@ -312,36 +319,40 @@ void main() { test('Adding duplicate across words returns null', () { Crossword? crossword = Crossword.crossword(width: 50, height: 50); - crossword = crossword.addWord( - direction: Direction.across, - location: Location.at(0, 0), - word: 'duplicated', - )!; - - expect( + crossword = crossword.addWord( direction: Direction.across, - location: Location.at(4, 4), + location: Location.at(0, 0), word: 'duplicated', - ), - isNull); + )!; + + expect( + crossword.addWord( + direction: Direction.across, + location: Location.at(4, 4), + word: 'duplicated', + ), + isNull, + ); }); test('Crossword is not valid with duplicate across words', () { - Crossword? crossword = - Crossword.crossword(width: 50, height: 50).rebuild((b) => b - ..words.addAll([ - CrosswordWord.word( - direction: Direction.across, - location: Location.at(0, 0), - word: 'duplicated', - ), - CrosswordWord.word( - direction: Direction.across, - location: Location.at(4, 4), - word: 'duplicated', - ), - ])); + Crossword? crossword = Crossword.crossword(width: 50, height: 50).rebuild( + (b) => + b + ..words.addAll([ + CrosswordWord.word( + direction: Direction.across, + location: Location.at(0, 0), + word: 'duplicated', + ), + CrosswordWord.word( + direction: Direction.across, + location: Location.at(4, 4), + word: 'duplicated', + ), + ]), + ); expect(crossword.valid, false); }); @@ -349,36 +360,40 @@ void main() { test('Adding duplicate down words returns null', () { Crossword? crossword = Crossword.crossword(width: 50, height: 50); - crossword = crossword.addWord( - direction: Direction.down, - location: Location.at(0, 0), - word: 'duplicated', - )!; - - expect( + crossword = crossword.addWord( direction: Direction.down, - location: Location.at(4, 4), + location: Location.at(0, 0), word: 'duplicated', - ), - isNull); + )!; + + expect( + crossword.addWord( + direction: Direction.down, + location: Location.at(4, 4), + word: 'duplicated', + ), + isNull, + ); }); test('Crossword is not valid with duplicate down words', () { - Crossword? crossword = - Crossword.crossword(width: 50, height: 50).rebuild((b) => b - ..words.addAll([ - CrosswordWord.word( - direction: Direction.down, - location: Location.at(0, 0), - word: 'duplicated', - ), - CrosswordWord.word( - direction: Direction.down, - location: Location.at(4, 4), - word: 'duplicated', - ), - ])); + Crossword? crossword = Crossword.crossword(width: 50, height: 50).rebuild( + (b) => + b + ..words.addAll([ + CrosswordWord.word( + direction: Direction.down, + location: Location.at(0, 0), + word: 'duplicated', + ), + CrosswordWord.word( + direction: Direction.down, + location: Location.at(4, 4), + word: 'duplicated', + ), + ]), + ); expect(crossword.valid, false); }); diff --git a/generate_crossword/step_05_c/lib/isolates.dart b/generate_crossword/step_05_c/lib/isolates.dart index e7e52ef472..94fa62bf5a 100644 --- a/generate_crossword/step_05_c/lib/isolates.dart +++ b/generate_crossword/step_05_c/lib/isolates.dart @@ -16,17 +16,22 @@ Stream exploreCrosswordSolutions({ required Crossword crossword, required BuiltSet wordList, }) async* { - while ( - crossword.characters.length < crossword.width * crossword.height * 0.8) { + while (crossword.characters.length < + crossword.width * crossword.height * 0.8) { final word = wordList.randomElement(); final direction = _random.nextBool() ? Direction.across : Direction.down; final location = Location.at( - _random.nextInt(crossword.width), _random.nextInt(crossword.height)); + _random.nextInt(crossword.width), + _random.nextInt(crossword.height), + ); try { var candidate = await compute(((String, Direction, Location) wordToAdd) { final (word, direction, location) = wordToAdd; return crossword.addWord( - word: word, direction: direction, location: location); + word: word, + direction: direction, + location: location, + ); }, (word, direction, location)); if (candidate != null) { diff --git a/generate_crossword/step_05_c/lib/model.dart b/generate_crossword/step_05_c/lib/model.dart index a9a144b816..48ac50d45d 100644 --- a/generate_crossword/step_05_c/lib/model.dart +++ b/generate_crossword/step_05_c/lib/model.dart @@ -89,7 +89,10 @@ abstract class CrosswordWord static int locationComparator(CrosswordWord a, CrosswordWord b) { final compareRows = a.location.y.compareTo(b.location.y); final compareColumns = a.location.x.compareTo(b.location.x); - return switch (compareColumns) { 0 => compareRows, _ => compareColumns }; + return switch (compareColumns) { + 0 => compareRows, + _ => compareColumns, + }; } /// Constructor for [CrosswordWord]. @@ -98,10 +101,13 @@ abstract class CrosswordWord required Location location, required Direction direction, }) { - return CrosswordWord((b) => b - ..word = word - ..direction = direction - ..location.replace(location)); + return CrosswordWord( + (b) => + b + ..word = word + ..direction = direction + ..location.replace(location), + ); } /// Constructor for [CrosswordWord]. @@ -148,9 +154,9 @@ abstract class CrosswordCharacter /// Constructor for [CrosswordCharacter]. /// Use [CrosswordCharacter.character] instead. - factory CrosswordCharacter( - [void Function(CrosswordCharacterBuilder)? updates]) = - _$CrosswordCharacter; + factory CrosswordCharacter([ + void Function(CrosswordCharacterBuilder)? updates, + ]) = _$CrosswordCharacter; CrosswordCharacter._(); } @@ -281,14 +287,15 @@ abstract class Crossword implements Built { } final candidate = rebuild( - (b) => b - ..words.add( - CrosswordWord.word( - word: word, - direction: direction, - location: location, - ), - ), + (b) => + b + ..words.add( + CrosswordWord.word( + word: word, + direction: direction, + location: location, + ), + ), ); if (candidate.valid) { @@ -310,19 +317,21 @@ abstract class Crossword implements Built { b.characters.updateValue( word.location.rightOffset(idx), (b) => b.rebuild((bInner) => bInner.acrossWord.replace(word)), - ifAbsent: () => CrosswordCharacter.character( - acrossWord: word, - character: character, - ), + ifAbsent: + () => CrosswordCharacter.character( + acrossWord: word, + character: character, + ), ); case Direction.down: b.characters.updateValue( word.location.downOffset(idx), (b) => b.rebuild((bInner) => bInner.downWord.replace(word)), - ifAbsent: () => CrosswordCharacter.character( - downWord: word, - character: character, - ), + ifAbsent: + () => CrosswordCharacter.character( + downWord: word, + character: character, + ), ); } } @@ -336,7 +345,8 @@ abstract class Crossword implements Built { final grid = List.generate( height, (_) => List.generate( - width, (_) => '░', // https://www.compart.com/en/unicode/U+2591 + width, + (_) => '░', // https://www.compart.com/en/unicode/U+2591 ), ); @@ -391,10 +401,5 @@ abstract class Crossword implements Built { } /// Construct the serialization/deserialization code for the data model. -@SerializersFor([ - Location, - Crossword, - CrosswordWord, - CrosswordCharacter, -]) +@SerializersFor([Location, Crossword, CrosswordWord, CrosswordCharacter]) final Serializers serializers = _$serializers; diff --git a/generate_crossword/step_05_c/lib/model.g.dart b/generate_crossword/step_05_c/lib/model.g.dart index c2c427dcb4..a4ddf76c65 100644 --- a/generate_crossword/step_05_c/lib/model.g.dart +++ b/generate_crossword/step_05_c/lib/model.g.dart @@ -6,21 +6,24 @@ part of 'model.dart'; // BuiltValueGenerator // ************************************************************************** -Serializers _$serializers = (new Serializers().toBuilder() - ..add(Crossword.serializer) - ..add(CrosswordCharacter.serializer) - ..add(CrosswordWord.serializer) - ..add(Location.serializer) - ..addBuilderFactory( - const FullType(BuiltList, const [const FullType(CrosswordWord)]), - () => new ListBuilder()) - ..addBuilderFactory( - const FullType(BuiltMap, const [ - const FullType(Location), - const FullType(CrosswordCharacter) - ]), - () => new MapBuilder())) - .build(); +Serializers _$serializers = + (new Serializers().toBuilder() + ..add(Crossword.serializer) + ..add(CrosswordCharacter.serializer) + ..add(CrosswordWord.serializer) + ..add(Location.serializer) + ..addBuilderFactory( + const FullType(BuiltList, const [const FullType(CrosswordWord)]), + () => new ListBuilder(), + ) + ..addBuilderFactory( + const FullType(BuiltMap, const [ + const FullType(Location), + const FullType(CrosswordCharacter), + ]), + () => new MapBuilder(), + )) + .build(); Serializer _$locationSerializer = new _$LocationSerializer(); Serializer _$crosswordWordSerializer = new _$CrosswordWordSerializer(); @@ -35,8 +38,11 @@ class _$LocationSerializer implements StructuredSerializer { final String wireName = 'Location'; @override - Iterable serialize(Serializers serializers, Location object, - {FullType specifiedType = FullType.unspecified}) { + Iterable serialize( + Serializers serializers, + Location object, { + FullType specifiedType = FullType.unspecified, + }) { final result = [ 'x', serializers.serialize(object.x, specifiedType: const FullType(int)), @@ -48,8 +54,11 @@ class _$LocationSerializer implements StructuredSerializer { } @override - Location deserialize(Serializers serializers, Iterable serialized, - {FullType specifiedType = FullType.unspecified}) { + Location deserialize( + Serializers serializers, + Iterable serialized, { + FullType specifiedType = FullType.unspecified, + }) { final result = new LocationBuilder(); final iterator = serialized.iterator; @@ -59,12 +68,20 @@ class _$LocationSerializer implements StructuredSerializer { final Object? value = iterator.current; switch (key) { case 'x': - result.x = serializers.deserialize(value, - specifiedType: const FullType(int))! as int; + result.x = + serializers.deserialize( + value, + specifiedType: const FullType(int), + )! + as int; break; case 'y': - result.y = serializers.deserialize(value, - specifiedType: const FullType(int))! as int; + result.y = + serializers.deserialize( + value, + specifiedType: const FullType(int), + )! + as int; break; } } @@ -80,17 +97,24 @@ class _$CrosswordWordSerializer implements StructuredSerializer { final String wireName = 'CrosswordWord'; @override - Iterable serialize(Serializers serializers, CrosswordWord object, - {FullType specifiedType = FullType.unspecified}) { + Iterable serialize( + Serializers serializers, + CrosswordWord object, { + FullType specifiedType = FullType.unspecified, + }) { final result = [ 'word', serializers.serialize(object.word, specifiedType: const FullType(String)), 'location', - serializers.serialize(object.location, - specifiedType: const FullType(Location)), + serializers.serialize( + object.location, + specifiedType: const FullType(Location), + ), 'direction', - serializers.serialize(object.direction, - specifiedType: const FullType(Direction)), + serializers.serialize( + object.direction, + specifiedType: const FullType(Direction), + ), ]; return result; @@ -98,8 +122,10 @@ class _$CrosswordWordSerializer implements StructuredSerializer { @override CrosswordWord deserialize( - Serializers serializers, Iterable serialized, - {FullType specifiedType = FullType.unspecified}) { + Serializers serializers, + Iterable serialized, { + FullType specifiedType = FullType.unspecified, + }) { final result = new CrosswordWordBuilder(); final iterator = serialized.iterator; @@ -109,16 +135,29 @@ class _$CrosswordWordSerializer implements StructuredSerializer { final Object? value = iterator.current; switch (key) { case 'word': - result.word = serializers.deserialize(value, - specifiedType: const FullType(String))! as String; + result.word = + serializers.deserialize( + value, + specifiedType: const FullType(String), + )! + as String; break; case 'location': - result.location.replace(serializers.deserialize(value, - specifiedType: const FullType(Location))! as Location); + result.location.replace( + serializers.deserialize( + value, + specifiedType: const FullType(Location), + )! + as Location, + ); break; case 'direction': - result.direction = serializers.deserialize(value, - specifiedType: const FullType(Direction))! as Direction; + result.direction = + serializers.deserialize( + value, + specifiedType: const FullType(Direction), + )! + as Direction; break; } } @@ -136,35 +175,49 @@ class _$CrosswordCharacterSerializer @override Iterable serialize( - Serializers serializers, CrosswordCharacter object, - {FullType specifiedType = FullType.unspecified}) { + Serializers serializers, + CrosswordCharacter object, { + FullType specifiedType = FullType.unspecified, + }) { final result = [ 'character', - serializers.serialize(object.character, - specifiedType: const FullType(String)), + serializers.serialize( + object.character, + specifiedType: const FullType(String), + ), ]; Object? value; value = object.acrossWord; if (value != null) { result ..add('acrossWord') - ..add(serializers.serialize(value, - specifiedType: const FullType(CrosswordWord))); + ..add( + serializers.serialize( + value, + specifiedType: const FullType(CrosswordWord), + ), + ); } value = object.downWord; if (value != null) { result ..add('downWord') - ..add(serializers.serialize(value, - specifiedType: const FullType(CrosswordWord))); + ..add( + serializers.serialize( + value, + specifiedType: const FullType(CrosswordWord), + ), + ); } return result; } @override CrosswordCharacter deserialize( - Serializers serializers, Iterable serialized, - {FullType specifiedType = FullType.unspecified}) { + Serializers serializers, + Iterable serialized, { + FullType specifiedType = FullType.unspecified, + }) { final result = new CrosswordCharacterBuilder(); final iterator = serialized.iterator; @@ -174,16 +227,30 @@ class _$CrosswordCharacterSerializer final Object? value = iterator.current; switch (key) { case 'character': - result.character = serializers.deserialize(value, - specifiedType: const FullType(String))! as String; + result.character = + serializers.deserialize( + value, + specifiedType: const FullType(String), + )! + as String; break; case 'acrossWord': - result.acrossWord.replace(serializers.deserialize(value, - specifiedType: const FullType(CrosswordWord))! as CrosswordWord); + result.acrossWord.replace( + serializers.deserialize( + value, + specifiedType: const FullType(CrosswordWord), + )! + as CrosswordWord, + ); break; case 'downWord': - result.downWord.replace(serializers.deserialize(value, - specifiedType: const FullType(CrosswordWord))! as CrosswordWord); + result.downWord.replace( + serializers.deserialize( + value, + specifiedType: const FullType(CrosswordWord), + )! + as CrosswordWord, + ); break; } } @@ -199,31 +266,42 @@ class _$CrosswordSerializer implements StructuredSerializer { final String wireName = 'Crossword'; @override - Iterable serialize(Serializers serializers, Crossword object, - {FullType specifiedType = FullType.unspecified}) { + Iterable serialize( + Serializers serializers, + Crossword object, { + FullType specifiedType = FullType.unspecified, + }) { final result = [ 'width', serializers.serialize(object.width, specifiedType: const FullType(int)), 'height', serializers.serialize(object.height, specifiedType: const FullType(int)), 'words', - serializers.serialize(object.words, - specifiedType: - const FullType(BuiltList, const [const FullType(CrosswordWord)])), + serializers.serialize( + object.words, + specifiedType: const FullType(BuiltList, const [ + const FullType(CrosswordWord), + ]), + ), 'characters', - serializers.serialize(object.characters, - specifiedType: const FullType(BuiltMap, const [ - const FullType(Location), - const FullType(CrosswordCharacter) - ])), + serializers.serialize( + object.characters, + specifiedType: const FullType(BuiltMap, const [ + const FullType(Location), + const FullType(CrosswordCharacter), + ]), + ), ]; return result; } @override - Crossword deserialize(Serializers serializers, Iterable serialized, - {FullType specifiedType = FullType.unspecified}) { + Crossword deserialize( + Serializers serializers, + Iterable serialized, { + FullType specifiedType = FullType.unspecified, + }) { final result = new CrosswordBuilder(); final iterator = serialized.iterator; @@ -233,25 +311,42 @@ class _$CrosswordSerializer implements StructuredSerializer { final Object? value = iterator.current; switch (key) { case 'width': - result.width = serializers.deserialize(value, - specifiedType: const FullType(int))! as int; + result.width = + serializers.deserialize( + value, + specifiedType: const FullType(int), + )! + as int; break; case 'height': - result.height = serializers.deserialize(value, - specifiedType: const FullType(int))! as int; + result.height = + serializers.deserialize( + value, + specifiedType: const FullType(int), + )! + as int; break; case 'words': - result.words.replace(serializers.deserialize(value, - specifiedType: const FullType( - BuiltList, const [const FullType(CrosswordWord)]))! - as BuiltList); + result.words.replace( + serializers.deserialize( + value, + specifiedType: const FullType(BuiltList, const [ + const FullType(CrosswordWord), + ]), + )! + as BuiltList, + ); break; case 'characters': - result.characters.replace(serializers.deserialize(value, + result.characters.replace( + serializers.deserialize( + value, specifiedType: const FullType(BuiltMap, const [ const FullType(Location), - const FullType(CrosswordCharacter) - ]))!); + const FullType(CrosswordCharacter), + ]), + )!, + ); break; } } @@ -343,10 +438,12 @@ class LocationBuilder implements Builder { Location build() => _build(); _$Location _build() { - final _$result = _$v ?? + final _$result = + _$v ?? new _$Location._( - x: BuiltValueNullFieldError.checkNotNull(x, r'Location', 'x'), - y: BuiltValueNullFieldError.checkNotNull(y, r'Location', 'y')); + x: BuiltValueNullFieldError.checkNotNull(x, r'Location', 'x'), + y: BuiltValueNullFieldError.checkNotNull(y, r'Location', 'y'), + ); replace(_$result); return _$result; } @@ -363,14 +460,22 @@ class _$CrosswordWord extends CrosswordWord { factory _$CrosswordWord([void Function(CrosswordWordBuilder)? updates]) => (new CrosswordWordBuilder()..update(updates))._build(); - _$CrosswordWord._( - {required this.word, required this.location, required this.direction}) - : super._() { + _$CrosswordWord._({ + required this.word, + required this.location, + required this.direction, + }) : super._() { BuiltValueNullFieldError.checkNotNull(word, r'CrosswordWord', 'word'); BuiltValueNullFieldError.checkNotNull( - location, r'CrosswordWord', 'location'); + location, + r'CrosswordWord', + 'location', + ); BuiltValueNullFieldError.checkNotNull( - direction, r'CrosswordWord', 'direction'); + direction, + r'CrosswordWord', + 'direction', + ); } @override @@ -455,13 +560,21 @@ class CrosswordWordBuilder _$CrosswordWord _build() { _$CrosswordWord _$result; try { - _$result = _$v ?? + _$result = + _$v ?? new _$CrosswordWord._( - word: BuiltValueNullFieldError.checkNotNull( - word, r'CrosswordWord', 'word'), - location: location.build(), - direction: BuiltValueNullFieldError.checkNotNull( - direction, r'CrosswordWord', 'direction')); + word: BuiltValueNullFieldError.checkNotNull( + word, + r'CrosswordWord', + 'word', + ), + location: location.build(), + direction: BuiltValueNullFieldError.checkNotNull( + direction, + r'CrosswordWord', + 'direction', + ), + ); } catch (_) { late String _$failedField; try { @@ -469,7 +582,10 @@ class CrosswordWordBuilder location.build(); } catch (e) { throw new BuiltValueNestedFieldError( - r'CrosswordWord', _$failedField, e.toString()); + r'CrosswordWord', + _$failedField, + e.toString(), + ); } rethrow; } @@ -486,21 +602,26 @@ class _$CrosswordCharacter extends CrosswordCharacter { @override final CrosswordWord? downWord; - factory _$CrosswordCharacter( - [void Function(CrosswordCharacterBuilder)? updates]) => - (new CrosswordCharacterBuilder()..update(updates))._build(); + factory _$CrosswordCharacter([ + void Function(CrosswordCharacterBuilder)? updates, + ]) => (new CrosswordCharacterBuilder()..update(updates))._build(); - _$CrosswordCharacter._( - {required this.character, this.acrossWord, this.downWord}) - : super._() { + _$CrosswordCharacter._({ + required this.character, + this.acrossWord, + this.downWord, + }) : super._() { BuiltValueNullFieldError.checkNotNull( - character, r'CrosswordCharacter', 'character'); + character, + r'CrosswordCharacter', + 'character', + ); } @override CrosswordCharacter rebuild( - void Function(CrosswordCharacterBuilder) updates) => - (toBuilder()..update(updates)).build(); + void Function(CrosswordCharacterBuilder) updates, + ) => (toBuilder()..update(updates)).build(); @override CrosswordCharacterBuilder toBuilder() => @@ -584,12 +705,17 @@ class CrosswordCharacterBuilder _$CrosswordCharacter _build() { _$CrosswordCharacter _$result; try { - _$result = _$v ?? + _$result = + _$v ?? new _$CrosswordCharacter._( - character: BuiltValueNullFieldError.checkNotNull( - character, r'CrosswordCharacter', 'character'), - acrossWord: _acrossWord?.build(), - downWord: _downWord?.build()); + character: BuiltValueNullFieldError.checkNotNull( + character, + r'CrosswordCharacter', + 'character', + ), + acrossWord: _acrossWord?.build(), + downWord: _downWord?.build(), + ); } catch (_) { late String _$failedField; try { @@ -599,7 +725,10 @@ class CrosswordCharacterBuilder _downWord?.build(); } catch (e) { throw new BuiltValueNestedFieldError( - r'CrosswordCharacter', _$failedField, e.toString()); + r'CrosswordCharacter', + _$failedField, + e.toString(), + ); } rethrow; } @@ -621,17 +750,20 @@ class _$Crossword extends Crossword { factory _$Crossword([void Function(CrosswordBuilder)? updates]) => (new CrosswordBuilder()..update(updates))._build(); - _$Crossword._( - {required this.width, - required this.height, - required this.words, - required this.characters}) - : super._() { + _$Crossword._({ + required this.width, + required this.height, + required this.words, + required this.characters, + }) : super._() { BuiltValueNullFieldError.checkNotNull(width, r'Crossword', 'width'); BuiltValueNullFieldError.checkNotNull(height, r'Crossword', 'height'); BuiltValueNullFieldError.checkNotNull(words, r'Crossword', 'words'); BuiltValueNullFieldError.checkNotNull( - characters, r'Crossword', 'characters'); + characters, + r'Crossword', + 'characters', + ); } @override @@ -727,14 +859,22 @@ class CrosswordBuilder implements Builder { Crossword._fillCharacters(this); _$Crossword _$result; try { - _$result = _$v ?? + _$result = + _$v ?? new _$Crossword._( - width: BuiltValueNullFieldError.checkNotNull( - width, r'Crossword', 'width'), - height: BuiltValueNullFieldError.checkNotNull( - height, r'Crossword', 'height'), - words: words.build(), - characters: characters.build()); + width: BuiltValueNullFieldError.checkNotNull( + width, + r'Crossword', + 'width', + ), + height: BuiltValueNullFieldError.checkNotNull( + height, + r'Crossword', + 'height', + ), + words: words.build(), + characters: characters.build(), + ); } catch (_) { late String _$failedField; try { @@ -744,7 +884,10 @@ class CrosswordBuilder implements Builder { characters.build(); } catch (e) { throw new BuiltValueNestedFieldError( - r'Crossword', _$failedField, e.toString()); + r'Crossword', + _$failedField, + e.toString(), + ); } rethrow; } diff --git a/generate_crossword/step_05_c/lib/providers.dart b/generate_crossword/step_05_c/lib/providers.dart index 102f7a18ca..63a780ffb9 100644 --- a/generate_crossword/step_05_c/lib/providers.dart +++ b/generate_crossword/step_05_c/lib/providers.dart @@ -25,10 +25,16 @@ Future> wordList(Ref ref) async { final re = RegExp(r'^[a-z]+$'); final words = await rootBundle.loadString('assets/words.txt'); - return const LineSplitter().convert(words).toBuiltSet().rebuild((b) => b - ..map((word) => word.toLowerCase().trim()) - ..where((word) => word.length > 2) - ..where((word) => re.hasMatch(word))); + return const LineSplitter() + .convert(words) + .toBuiltSet() + .rebuild( + (b) => + b + ..map((word) => word.toLowerCase().trim()) + ..where((word) => word.length > 2) + ..where((word) => re.hasMatch(word)), + ); } /// An enumeration for different sizes of [model.Crossword]s. @@ -39,10 +45,7 @@ enum CrosswordSize { xlarge(width: 160, height: 88), xxlarge(width: 500, height: 500); - const CrosswordSize({ - required this.width, - required this.height, - }); + const CrosswordSize({required this.width, required this.height}); final int width; final int height; @@ -68,14 +71,17 @@ Stream crossword(Ref ref) async* { final size = ref.watch(sizeProvider); final wordListAsync = ref.watch(wordListProvider); - final emptyCrossword = - model.Crossword.crossword(width: size.width, height: size.height); + final emptyCrossword = model.Crossword.crossword( + width: size.width, + height: size.height, + ); yield* wordListAsync.when( - data: (wordList) => exploreCrosswordSolutions( - crossword: emptyCrossword, - wordList: wordList, - ), + data: + (wordList) => exploreCrosswordSolutions( + crossword: emptyCrossword, + wordList: wordList, + ), error: (error, stackTrace) async* { debugPrint('Error loading word list: $error'); yield emptyCrossword; diff --git a/generate_crossword/step_05_c/lib/widgets/crossword_generator_app.dart b/generate_crossword/step_05_c/lib/widgets/crossword_generator_app.dart index 0c4a659789..6775f9fd89 100644 --- a/generate_crossword/step_05_c/lib/widgets/crossword_generator_app.dart +++ b/generate_crossword/step_05_c/lib/widgets/crossword_generator_app.dart @@ -24,9 +24,7 @@ class CrosswordGeneratorApp extends StatelessWidget { ), title: Text('Crossword Generator'), ), - body: SafeArea( - child: CrosswordWidget(), - ), + body: SafeArea(child: CrosswordWidget()), ), ); } @@ -46,19 +44,21 @@ class _EagerInitialization extends ConsumerWidget { class _CrosswordGeneratorMenu extends ConsumerWidget { @override Widget build(BuildContext context, WidgetRef ref) => MenuAnchor( - menuChildren: [ - for (final entry in CrosswordSize.values) - MenuItemButton( - onPressed: () => ref.read(sizeProvider.notifier).setSize(entry), - leadingIcon: entry == ref.watch(sizeProvider) + menuChildren: [ + for (final entry in CrosswordSize.values) + MenuItemButton( + onPressed: () => ref.read(sizeProvider.notifier).setSize(entry), + leadingIcon: + entry == ref.watch(sizeProvider) ? Icon(Icons.radio_button_checked_outlined) : Icon(Icons.radio_button_unchecked_outlined), - child: Text(entry.label), - ), - ], - builder: (context, controller, child) => IconButton( + child: Text(entry.label), + ), + ], + builder: + (context, controller, child) => IconButton( onPressed: () => controller.open(), icon: Icon(Icons.settings), ), - ); + ); } diff --git a/generate_crossword/step_05_c/lib/widgets/crossword_widget.dart b/generate_crossword/step_05_c/lib/widgets/crossword_widget.dart index 17941440ee..1795fe68da 100644 --- a/generate_crossword/step_05_c/lib/widgets/crossword_widget.dart +++ b/generate_crossword/step_05_c/lib/widgets/crossword_widget.dart @@ -70,9 +70,11 @@ class CrosswordWidget extends ConsumerWidget { foregroundDecoration: TableSpanDecoration( border: TableSpanBorder( leading: BorderSide( - color: Theme.of(context).colorScheme.onPrimaryContainer), + color: Theme.of(context).colorScheme.onPrimaryContainer, + ), trailing: BorderSide( - color: Theme.of(context).colorScheme.onPrimaryContainer), + color: Theme.of(context).colorScheme.onPrimaryContainer, + ), ), ), ); diff --git a/generate_crossword/step_05_c/pubspec.yaml b/generate_crossword/step_05_c/pubspec.yaml index cb8178f942..23da5fd396 100644 --- a/generate_crossword/step_05_c/pubspec.yaml +++ b/generate_crossword/step_05_c/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: 'none' version: 0.1.0 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 dependencies: flutter: diff --git a/generate_crossword/step_05_c/test/model_test.dart b/generate_crossword/step_05_c/test/model_test.dart index 2b2f850b2d..1c7adb3431 100644 --- a/generate_crossword/step_05_c/test/model_test.dart +++ b/generate_crossword/step_05_c/test/model_test.dart @@ -38,28 +38,27 @@ void main() { expect(crossword.words.isNotEmpty, true); expect(crossword.words.length, 2); expect( - crossword.words - .rebuild( - (b) => b.where((b) => b.direction == Direction.across), - ) - .length, - 1); + crossword.words + .rebuild((b) => b.where((b) => b.direction == Direction.across)) + .length, + 1, + ); expect( - crossword.words - .rebuild( - (b) => b.where((b) => b.direction == Direction.down), - ) - .length, - 1); + crossword.words + .rebuild((b) => b.where((b) => b.direction == Direction.down)) + .length, + 1, + ); expect(crossword.characters.isNotEmpty, isTrue); expect(crossword.characters.length, 7); expect( - crossword.characters[topLeft], - CrosswordCharacter.character( - acrossWord: thisWord, - downWord: thatWord, - character: 't', - )); + crossword.characters[topLeft], + CrosswordCharacter.character( + acrossWord: thisWord, + downWord: thatWord, + character: 't', + ), + ); expect(crossword.valid, isTrue); }); @@ -85,19 +84,17 @@ void main() { expect(crossword.words.isNotEmpty, true); expect( - crossword.words - .rebuild( - (b) => b.where((b) => b.direction == Direction.across), - ) - .length, - 2); + crossword.words + .rebuild((b) => b.where((b) => b.direction == Direction.across)) + .length, + 2, + ); expect( - crossword.words - .rebuild( - (b) => b.where((b) => b.direction == Direction.down), - ) - .isEmpty, - true); + crossword.words + .rebuild((b) => b.where((b) => b.direction == Direction.down)) + .isEmpty, + true, + ); expect(crossword.characters.isNotEmpty, isTrue); expect(crossword.characters.length, 8); expect(crossword.valid, isFalse); @@ -107,11 +104,12 @@ void main() { Crossword crossword = Crossword.crossword(width: 50, height: 50); expect(crossword.valid, true); - crossword = crossword.addWord( - direction: Direction.across, - location: Location.at(0, 0), - word: 'this', - )!; + crossword = + crossword.addWord( + direction: Direction.across, + location: Location.at(0, 0), + word: 'this', + )!; expect(crossword.valid, true); final crossword2 = crossword.addWord( @@ -173,17 +171,18 @@ void main() { final topLeft = Location.at(0, 0); - crossword = crossword - .addWord( - location: topLeft, - word: 'this', - direction: Direction.down, - )! - .addWord( - location: topLeft, - word: 'total', - direction: Direction.across, - )!; + crossword = + crossword + .addWord( + location: topLeft, + word: 'this', + direction: Direction.down, + )! + .addWord( + location: topLeft, + word: 'total', + direction: Direction.across, + )!; expect(crossword.valid, isTrue); @@ -234,77 +233,85 @@ void main() { }); test('Crossword is not valid with run-on across words', () { - Crossword crossword = - Crossword.crossword(width: 50, height: 50).rebuild((b) => b - ..words.addAll([ - CrosswordWord.word( - direction: Direction.across, - location: Location.at(0, 0), - word: 'word', - ), - CrosswordWord.word( - direction: Direction.across, - location: Location.at(4, 0), - word: 'another', - ), - ])); + Crossword crossword = Crossword.crossword(width: 50, height: 50).rebuild( + (b) => + b + ..words.addAll([ + CrosswordWord.word( + direction: Direction.across, + location: Location.at(0, 0), + word: 'word', + ), + CrosswordWord.word( + direction: Direction.across, + location: Location.at(4, 0), + word: 'another', + ), + ]), + ); expect(crossword.valid, false); }); test('Crossword is not valid with run-on down words', () { - Crossword crossword = - Crossword.crossword(width: 50, height: 50).rebuild((b) => b - ..words.addAll([ - CrosswordWord.word( - direction: Direction.down, - location: Location.at(0, 0), - word: 'word', - ), - CrosswordWord.word( - direction: Direction.down, - location: Location.at(0, 4), - word: 'another', - ), - ])); + Crossword crossword = Crossword.crossword(width: 50, height: 50).rebuild( + (b) => + b + ..words.addAll([ + CrosswordWord.word( + direction: Direction.down, + location: Location.at(0, 0), + word: 'word', + ), + CrosswordWord.word( + direction: Direction.down, + location: Location.at(0, 4), + word: 'another', + ), + ]), + ); expect(crossword.valid, false); }); test('Crossword is not valid with run-on across/down words', () { - Crossword crossword = - Crossword.crossword(width: 50, height: 50).rebuild((b) => b - ..words.addAll([ - CrosswordWord.word( - direction: Direction.across, - location: Location.at(0, 0), - word: 'word', - ), - CrosswordWord.word( - direction: Direction.down, - location: Location.at(4, 0), - word: 'another', - ), - ])); + Crossword crossword = Crossword.crossword(width: 50, height: 50).rebuild( + (b) => + b + ..words.addAll([ + CrosswordWord.word( + direction: Direction.across, + location: Location.at(0, 0), + word: 'word', + ), + CrosswordWord.word( + direction: Direction.down, + location: Location.at(4, 0), + word: 'another', + ), + ]), + ); expect(crossword.valid, false); }); test('Crossword is not valid with run-on down/across words', () { - Crossword? crossword = - Crossword.crossword(width: 50, height: 50).rebuild((b) => b - ..words.addAll([ - CrosswordWord.word( - direction: Direction.down, - location: Location.at(0, 0), - word: 'word', - ), - CrosswordWord.word( - direction: Direction.across, - location: Location.at(0, 4), - word: 'another', - ), - ])); + Crossword? crossword = Crossword.crossword(width: 50, height: 50).rebuild( + (b) => + b + ..words.addAll([ + CrosswordWord.word( + direction: Direction.down, + location: Location.at(0, 0), + word: 'word', + ), + CrosswordWord.word( + direction: Direction.across, + location: Location.at(0, 4), + word: 'another', + ), + ]), + ); expect(crossword.valid, false); }); @@ -312,36 +319,40 @@ void main() { test('Adding duplicate across words returns null', () { Crossword? crossword = Crossword.crossword(width: 50, height: 50); - crossword = crossword.addWord( - direction: Direction.across, - location: Location.at(0, 0), - word: 'duplicated', - )!; - - expect( + crossword = crossword.addWord( direction: Direction.across, - location: Location.at(4, 4), + location: Location.at(0, 0), word: 'duplicated', - ), - isNull); + )!; + + expect( + crossword.addWord( + direction: Direction.across, + location: Location.at(4, 4), + word: 'duplicated', + ), + isNull, + ); }); test('Crossword is not valid with duplicate across words', () { - Crossword? crossword = - Crossword.crossword(width: 50, height: 50).rebuild((b) => b - ..words.addAll([ - CrosswordWord.word( - direction: Direction.across, - location: Location.at(0, 0), - word: 'duplicated', - ), - CrosswordWord.word( - direction: Direction.across, - location: Location.at(4, 4), - word: 'duplicated', - ), - ])); + Crossword? crossword = Crossword.crossword(width: 50, height: 50).rebuild( + (b) => + b + ..words.addAll([ + CrosswordWord.word( + direction: Direction.across, + location: Location.at(0, 0), + word: 'duplicated', + ), + CrosswordWord.word( + direction: Direction.across, + location: Location.at(4, 4), + word: 'duplicated', + ), + ]), + ); expect(crossword.valid, false); }); @@ -349,36 +360,40 @@ void main() { test('Adding duplicate down words returns null', () { Crossword? crossword = Crossword.crossword(width: 50, height: 50); - crossword = crossword.addWord( - direction: Direction.down, - location: Location.at(0, 0), - word: 'duplicated', - )!; - - expect( + crossword = crossword.addWord( direction: Direction.down, - location: Location.at(4, 4), + location: Location.at(0, 0), word: 'duplicated', - ), - isNull); + )!; + + expect( + crossword.addWord( + direction: Direction.down, + location: Location.at(4, 4), + word: 'duplicated', + ), + isNull, + ); }); test('Crossword is not valid with duplicate down words', () { - Crossword? crossword = - Crossword.crossword(width: 50, height: 50).rebuild((b) => b - ..words.addAll([ - CrosswordWord.word( - direction: Direction.down, - location: Location.at(0, 0), - word: 'duplicated', - ), - CrosswordWord.word( - direction: Direction.down, - location: Location.at(4, 4), - word: 'duplicated', - ), - ])); + Crossword? crossword = Crossword.crossword(width: 50, height: 50).rebuild( + (b) => + b + ..words.addAll([ + CrosswordWord.word( + direction: Direction.down, + location: Location.at(0, 0), + word: 'duplicated', + ), + CrosswordWord.word( + direction: Direction.down, + location: Location.at(4, 4), + word: 'duplicated', + ), + ]), + ); expect(crossword.valid, false); }); diff --git a/generate_crossword/step_06/lib/isolates.dart b/generate_crossword/step_06/lib/isolates.dart index fb84e41ec3..c2d24e8248 100644 --- a/generate_crossword/step_06/lib/isolates.dart +++ b/generate_crossword/step_06/lib/isolates.dart @@ -33,9 +33,12 @@ Stream exploreCrosswordSolutions({ word: workQueue.candidateWords.randomElement(), ); } - var words = workQueue.candidateWords.toBuiltList().rebuild((b) => b - ..where((b) => b.characters.contains(target.character)) - ..shuffle()); + var words = workQueue.candidateWords.toBuiltList().rebuild( + (b) => + b + ..where((b) => b.characters.contains(target.character)) + ..shuffle(), + ); int tryCount = 0; for (final word in words) { tryCount++; @@ -69,6 +72,8 @@ Stream exploreCrosswordSolutions({ debugPrint('Error running isolate: $e'); } } - debugPrint('${crossword.width} x ${crossword.height} Crossword generated in ' - '${DateTime.now().difference(start).formatted}'); + debugPrint( + '${crossword.width} x ${crossword.height} Crossword generated in ' + '${DateTime.now().difference(start).formatted}', + ); } diff --git a/generate_crossword/step_06/lib/model.dart b/generate_crossword/step_06/lib/model.dart index 33e6988c8e..214189d518 100644 --- a/generate_crossword/step_06/lib/model.dart +++ b/generate_crossword/step_06/lib/model.dart @@ -89,7 +89,10 @@ abstract class CrosswordWord static int locationComparator(CrosswordWord a, CrosswordWord b) { final compareRows = a.location.y.compareTo(b.location.y); final compareColumns = a.location.x.compareTo(b.location.x); - return switch (compareColumns) { 0 => compareRows, _ => compareColumns }; + return switch (compareColumns) { + 0 => compareRows, + _ => compareColumns, + }; } /// Constructor for [CrosswordWord]. @@ -98,10 +101,13 @@ abstract class CrosswordWord required Location location, required Direction direction, }) { - return CrosswordWord((b) => b - ..word = word - ..direction = direction - ..location.replace(location)); + return CrosswordWord( + (b) => + b + ..word = word + ..direction = direction + ..location.replace(location), + ); } /// Constructor for [CrosswordWord]. @@ -148,9 +154,9 @@ abstract class CrosswordCharacter /// Constructor for [CrosswordCharacter]. /// Use [CrosswordCharacter.character] instead. - factory CrosswordCharacter( - [void Function(CrosswordCharacterBuilder)? updates]) = - _$CrosswordCharacter; + factory CrosswordCharacter([ + void Function(CrosswordCharacterBuilder)? updates, + ]) = _$CrosswordCharacter; CrosswordCharacter._(); } @@ -281,14 +287,15 @@ abstract class Crossword implements Built { } final candidate = rebuild( - (b) => b - ..words.add( - CrosswordWord.word( - word: word, - direction: direction, - location: location, - ), - ), + (b) => + b + ..words.add( + CrosswordWord.word( + word: word, + direction: direction, + location: location, + ), + ), ); if (candidate.valid) { @@ -310,19 +317,21 @@ abstract class Crossword implements Built { b.characters.updateValue( word.location.rightOffset(idx), (b) => b.rebuild((bInner) => bInner.acrossWord.replace(word)), - ifAbsent: () => CrosswordCharacter.character( - acrossWord: word, - character: character, - ), + ifAbsent: + () => CrosswordCharacter.character( + acrossWord: word, + character: character, + ), ); case Direction.down: b.characters.updateValue( word.location.downOffset(idx), (b) => b.rebuild((bInner) => bInner.downWord.replace(word)), - ifAbsent: () => CrosswordCharacter.character( - downWord: word, - character: character, - ), + ifAbsent: + () => CrosswordCharacter.character( + downWord: word, + character: character, + ), ); } } @@ -336,7 +345,8 @@ abstract class Crossword implements Built { final grid = List.generate( height, (_) => List.generate( - width, (_) => '░', // https://www.compart.com/en/unicode/U+2591 + width, + (_) => '░', // https://www.compart.com/en/unicode/U+2591 ), ); @@ -416,40 +426,44 @@ abstract class WorkQueue implements Built { required Crossword crossword, required Iterable candidateWords, required Location startLocation, - }) => - WorkQueue((b) { - if (crossword.words.isEmpty) { - // Strip candidate words too long to fit in the crossword - b.candidateWords.addAll(candidateWords - .where((word) => word.characters.length <= crossword.width)); - - b.crossword.replace(crossword); - - b.locationsToTry.addAll({startLocation: Direction.across}); - } else { - // Assuming words have already been stripped to length - b.candidateWords.addAll( - candidateWords.toBuiltSet().rebuild( - (b) => b.removeAll(crossword.words.map((word) => word.word))), - ); - b.crossword.replace(crossword); - crossword.characters - .rebuild((b) => b.removeWhere((location, character) { - if (character.acrossWord != null && - character.downWord != null) { - return true; - } - final left = crossword.characters[location.left]; - if (left != null && left.downWord != null) return true; - final right = crossword.characters[location.right]; - if (right != null && right.downWord != null) return true; - final up = crossword.characters[location.up]; - if (up != null && up.acrossWord != null) return true; - final down = crossword.characters[location.down]; - if (down != null && down.acrossWord != null) return true; - return false; - })) - .forEach((location, character) { + }) => WorkQueue((b) { + if (crossword.words.isEmpty) { + // Strip candidate words too long to fit in the crossword + b.candidateWords.addAll( + candidateWords.where( + (word) => word.characters.length <= crossword.width, + ), + ); + + b.crossword.replace(crossword); + + b.locationsToTry.addAll({startLocation: Direction.across}); + } else { + // Assuming words have already been stripped to length + b.candidateWords.addAll( + candidateWords.toBuiltSet().rebuild( + (b) => b.removeAll(crossword.words.map((word) => word.word)), + ), + ); + b.crossword.replace(crossword); + crossword.characters + .rebuild( + (b) => b.removeWhere((location, character) { + if (character.acrossWord != null && character.downWord != null) { + return true; + } + final left = crossword.characters[location.left]; + if (left != null && left.downWord != null) return true; + final right = crossword.characters[location.right]; + if (right != null && right.downWord != null) return true; + final up = crossword.characters[location.up]; + if (up != null && up.acrossWord != null) return true; + final down = crossword.characters[location.down]; + if (down != null && down.acrossWord != null) return true; + return false; + }), + ) + .forEach((location, character) { b.locationsToTry.addAll({ location: switch ((character.acrossWord, character.downWord)) { (null, null) => @@ -457,28 +471,36 @@ abstract class WorkQueue implements Built { (null, _) => Direction.across, (_, null) => Direction.down, (_, _) => throw StateError('Character is part of two words'), - } + }, }); }); - } - }); + } + }); - WorkQueue remove(Location location) => rebuild((b) => b - ..locationsToTry.remove(location) - ..badLocations.add(location)); + WorkQueue remove(Location location) => rebuild( + (b) => + b + ..locationsToTry.remove(location) + ..badLocations.add(location), + ); /// Update the work queue from a crossword derived from the current crossword /// that this work queue is built from. WorkQueue updateFrom(final Crossword crossword) => WorkQueue.from( - crossword: crossword, - candidateWords: candidateWords, - startLocation: locationsToTry.isNotEmpty + crossword: crossword, + candidateWords: candidateWords, + startLocation: + locationsToTry.isNotEmpty ? locationsToTry.keys.first : Location.at(0, 0), - ).rebuild((b) => b - ..badLocations.addAll(badLocations) - ..locationsToTry - .removeWhere((location, _) => badLocations.contains(location))); + ).rebuild( + (b) => + b + ..badLocations.addAll(badLocations) + ..locationsToTry.removeWhere( + (location, _) => badLocations.contains(location), + ), + ); /// Factory constructor for [WorkQueue] factory WorkQueue([void Function(WorkQueueBuilder)? updates]) = _$WorkQueue; diff --git a/generate_crossword/step_06/lib/model.g.dart b/generate_crossword/step_06/lib/model.g.dart index 037ee52961..ac2ab54c78 100644 --- a/generate_crossword/step_06/lib/model.g.dart +++ b/generate_crossword/step_06/lib/model.g.dart @@ -6,32 +6,40 @@ part of 'model.dart'; // BuiltValueGenerator // ************************************************************************** -Serializers _$serializers = (new Serializers().toBuilder() - ..add(Crossword.serializer) - ..add(CrosswordCharacter.serializer) - ..add(CrosswordWord.serializer) - ..add(Location.serializer) - ..add(WorkQueue.serializer) - ..addBuilderFactory( - const FullType(BuiltList, const [const FullType(CrosswordWord)]), - () => new ListBuilder()) - ..addBuilderFactory( - const FullType(BuiltMap, const [ - const FullType(Location), - const FullType(CrosswordCharacter) - ]), - () => new MapBuilder()) - ..addBuilderFactory( - const FullType(BuiltMap, - const [const FullType(Location), const FullType(Direction)]), - () => new MapBuilder()) - ..addBuilderFactory( - const FullType(BuiltSet, const [const FullType(Location)]), - () => new SetBuilder()) - ..addBuilderFactory( - const FullType(BuiltSet, const [const FullType(String)]), - () => new SetBuilder())) - .build(); +Serializers _$serializers = + (new Serializers().toBuilder() + ..add(Crossword.serializer) + ..add(CrosswordCharacter.serializer) + ..add(CrosswordWord.serializer) + ..add(Location.serializer) + ..add(WorkQueue.serializer) + ..addBuilderFactory( + const FullType(BuiltList, const [const FullType(CrosswordWord)]), + () => new ListBuilder(), + ) + ..addBuilderFactory( + const FullType(BuiltMap, const [ + const FullType(Location), + const FullType(CrosswordCharacter), + ]), + () => new MapBuilder(), + ) + ..addBuilderFactory( + const FullType(BuiltMap, const [ + const FullType(Location), + const FullType(Direction), + ]), + () => new MapBuilder(), + ) + ..addBuilderFactory( + const FullType(BuiltSet, const [const FullType(Location)]), + () => new SetBuilder(), + ) + ..addBuilderFactory( + const FullType(BuiltSet, const [const FullType(String)]), + () => new SetBuilder(), + )) + .build(); Serializer _$locationSerializer = new _$LocationSerializer(); Serializer _$crosswordWordSerializer = new _$CrosswordWordSerializer(); @@ -47,8 +55,11 @@ class _$LocationSerializer implements StructuredSerializer { final String wireName = 'Location'; @override - Iterable serialize(Serializers serializers, Location object, - {FullType specifiedType = FullType.unspecified}) { + Iterable serialize( + Serializers serializers, + Location object, { + FullType specifiedType = FullType.unspecified, + }) { final result = [ 'x', serializers.serialize(object.x, specifiedType: const FullType(int)), @@ -60,8 +71,11 @@ class _$LocationSerializer implements StructuredSerializer { } @override - Location deserialize(Serializers serializers, Iterable serialized, - {FullType specifiedType = FullType.unspecified}) { + Location deserialize( + Serializers serializers, + Iterable serialized, { + FullType specifiedType = FullType.unspecified, + }) { final result = new LocationBuilder(); final iterator = serialized.iterator; @@ -71,12 +85,20 @@ class _$LocationSerializer implements StructuredSerializer { final Object? value = iterator.current; switch (key) { case 'x': - result.x = serializers.deserialize(value, - specifiedType: const FullType(int))! as int; + result.x = + serializers.deserialize( + value, + specifiedType: const FullType(int), + )! + as int; break; case 'y': - result.y = serializers.deserialize(value, - specifiedType: const FullType(int))! as int; + result.y = + serializers.deserialize( + value, + specifiedType: const FullType(int), + )! + as int; break; } } @@ -92,17 +114,24 @@ class _$CrosswordWordSerializer implements StructuredSerializer { final String wireName = 'CrosswordWord'; @override - Iterable serialize(Serializers serializers, CrosswordWord object, - {FullType specifiedType = FullType.unspecified}) { + Iterable serialize( + Serializers serializers, + CrosswordWord object, { + FullType specifiedType = FullType.unspecified, + }) { final result = [ 'word', serializers.serialize(object.word, specifiedType: const FullType(String)), 'location', - serializers.serialize(object.location, - specifiedType: const FullType(Location)), + serializers.serialize( + object.location, + specifiedType: const FullType(Location), + ), 'direction', - serializers.serialize(object.direction, - specifiedType: const FullType(Direction)), + serializers.serialize( + object.direction, + specifiedType: const FullType(Direction), + ), ]; return result; @@ -110,8 +139,10 @@ class _$CrosswordWordSerializer implements StructuredSerializer { @override CrosswordWord deserialize( - Serializers serializers, Iterable serialized, - {FullType specifiedType = FullType.unspecified}) { + Serializers serializers, + Iterable serialized, { + FullType specifiedType = FullType.unspecified, + }) { final result = new CrosswordWordBuilder(); final iterator = serialized.iterator; @@ -121,16 +152,29 @@ class _$CrosswordWordSerializer implements StructuredSerializer { final Object? value = iterator.current; switch (key) { case 'word': - result.word = serializers.deserialize(value, - specifiedType: const FullType(String))! as String; + result.word = + serializers.deserialize( + value, + specifiedType: const FullType(String), + )! + as String; break; case 'location': - result.location.replace(serializers.deserialize(value, - specifiedType: const FullType(Location))! as Location); + result.location.replace( + serializers.deserialize( + value, + specifiedType: const FullType(Location), + )! + as Location, + ); break; case 'direction': - result.direction = serializers.deserialize(value, - specifiedType: const FullType(Direction))! as Direction; + result.direction = + serializers.deserialize( + value, + specifiedType: const FullType(Direction), + )! + as Direction; break; } } @@ -148,35 +192,49 @@ class _$CrosswordCharacterSerializer @override Iterable serialize( - Serializers serializers, CrosswordCharacter object, - {FullType specifiedType = FullType.unspecified}) { + Serializers serializers, + CrosswordCharacter object, { + FullType specifiedType = FullType.unspecified, + }) { final result = [ 'character', - serializers.serialize(object.character, - specifiedType: const FullType(String)), + serializers.serialize( + object.character, + specifiedType: const FullType(String), + ), ]; Object? value; value = object.acrossWord; if (value != null) { result ..add('acrossWord') - ..add(serializers.serialize(value, - specifiedType: const FullType(CrosswordWord))); + ..add( + serializers.serialize( + value, + specifiedType: const FullType(CrosswordWord), + ), + ); } value = object.downWord; if (value != null) { result ..add('downWord') - ..add(serializers.serialize(value, - specifiedType: const FullType(CrosswordWord))); + ..add( + serializers.serialize( + value, + specifiedType: const FullType(CrosswordWord), + ), + ); } return result; } @override CrosswordCharacter deserialize( - Serializers serializers, Iterable serialized, - {FullType specifiedType = FullType.unspecified}) { + Serializers serializers, + Iterable serialized, { + FullType specifiedType = FullType.unspecified, + }) { final result = new CrosswordCharacterBuilder(); final iterator = serialized.iterator; @@ -186,16 +244,30 @@ class _$CrosswordCharacterSerializer final Object? value = iterator.current; switch (key) { case 'character': - result.character = serializers.deserialize(value, - specifiedType: const FullType(String))! as String; + result.character = + serializers.deserialize( + value, + specifiedType: const FullType(String), + )! + as String; break; case 'acrossWord': - result.acrossWord.replace(serializers.deserialize(value, - specifiedType: const FullType(CrosswordWord))! as CrosswordWord); + result.acrossWord.replace( + serializers.deserialize( + value, + specifiedType: const FullType(CrosswordWord), + )! + as CrosswordWord, + ); break; case 'downWord': - result.downWord.replace(serializers.deserialize(value, - specifiedType: const FullType(CrosswordWord))! as CrosswordWord); + result.downWord.replace( + serializers.deserialize( + value, + specifiedType: const FullType(CrosswordWord), + )! + as CrosswordWord, + ); break; } } @@ -211,31 +283,42 @@ class _$CrosswordSerializer implements StructuredSerializer { final String wireName = 'Crossword'; @override - Iterable serialize(Serializers serializers, Crossword object, - {FullType specifiedType = FullType.unspecified}) { + Iterable serialize( + Serializers serializers, + Crossword object, { + FullType specifiedType = FullType.unspecified, + }) { final result = [ 'width', serializers.serialize(object.width, specifiedType: const FullType(int)), 'height', serializers.serialize(object.height, specifiedType: const FullType(int)), 'words', - serializers.serialize(object.words, - specifiedType: - const FullType(BuiltList, const [const FullType(CrosswordWord)])), + serializers.serialize( + object.words, + specifiedType: const FullType(BuiltList, const [ + const FullType(CrosswordWord), + ]), + ), 'characters', - serializers.serialize(object.characters, - specifiedType: const FullType(BuiltMap, const [ - const FullType(Location), - const FullType(CrosswordCharacter) - ])), + serializers.serialize( + object.characters, + specifiedType: const FullType(BuiltMap, const [ + const FullType(Location), + const FullType(CrosswordCharacter), + ]), + ), ]; return result; } @override - Crossword deserialize(Serializers serializers, Iterable serialized, - {FullType specifiedType = FullType.unspecified}) { + Crossword deserialize( + Serializers serializers, + Iterable serialized, { + FullType specifiedType = FullType.unspecified, + }) { final result = new CrosswordBuilder(); final iterator = serialized.iterator; @@ -245,25 +328,42 @@ class _$CrosswordSerializer implements StructuredSerializer { final Object? value = iterator.current; switch (key) { case 'width': - result.width = serializers.deserialize(value, - specifiedType: const FullType(int))! as int; + result.width = + serializers.deserialize( + value, + specifiedType: const FullType(int), + )! + as int; break; case 'height': - result.height = serializers.deserialize(value, - specifiedType: const FullType(int))! as int; + result.height = + serializers.deserialize( + value, + specifiedType: const FullType(int), + )! + as int; break; case 'words': - result.words.replace(serializers.deserialize(value, - specifiedType: const FullType( - BuiltList, const [const FullType(CrosswordWord)]))! - as BuiltList); + result.words.replace( + serializers.deserialize( + value, + specifiedType: const FullType(BuiltList, const [ + const FullType(CrosswordWord), + ]), + )! + as BuiltList, + ); break; case 'characters': - result.characters.replace(serializers.deserialize(value, + result.characters.replace( + serializers.deserialize( + value, specifiedType: const FullType(BuiltMap, const [ const FullType(Location), - const FullType(CrosswordCharacter) - ]))!); + const FullType(CrosswordCharacter), + ]), + )!, + ); break; } } @@ -279,32 +379,48 @@ class _$WorkQueueSerializer implements StructuredSerializer { final String wireName = 'WorkQueue'; @override - Iterable serialize(Serializers serializers, WorkQueue object, - {FullType specifiedType = FullType.unspecified}) { + Iterable serialize( + Serializers serializers, + WorkQueue object, { + FullType specifiedType = FullType.unspecified, + }) { final result = [ 'crossword', - serializers.serialize(object.crossword, - specifiedType: const FullType(Crossword)), + serializers.serialize( + object.crossword, + specifiedType: const FullType(Crossword), + ), 'locationsToTry', - serializers.serialize(object.locationsToTry, - specifiedType: const FullType(BuiltMap, - const [const FullType(Location), const FullType(Direction)])), + serializers.serialize( + object.locationsToTry, + specifiedType: const FullType(BuiltMap, const [ + const FullType(Location), + const FullType(Direction), + ]), + ), 'badLocations', - serializers.serialize(object.badLocations, - specifiedType: - const FullType(BuiltSet, const [const FullType(Location)])), + serializers.serialize( + object.badLocations, + specifiedType: const FullType(BuiltSet, const [ + const FullType(Location), + ]), + ), 'candidateWords', - serializers.serialize(object.candidateWords, - specifiedType: - const FullType(BuiltSet, const [const FullType(String)])), + serializers.serialize( + object.candidateWords, + specifiedType: const FullType(BuiltSet, const [const FullType(String)]), + ), ]; return result; } @override - WorkQueue deserialize(Serializers serializers, Iterable serialized, - {FullType specifiedType = FullType.unspecified}) { + WorkQueue deserialize( + Serializers serializers, + Iterable serialized, { + FullType specifiedType = FullType.unspecified, + }) { final result = new WorkQueueBuilder(); final iterator = serialized.iterator; @@ -314,27 +430,46 @@ class _$WorkQueueSerializer implements StructuredSerializer { final Object? value = iterator.current; switch (key) { case 'crossword': - result.crossword.replace(serializers.deserialize(value, - specifiedType: const FullType(Crossword))! as Crossword); + result.crossword.replace( + serializers.deserialize( + value, + specifiedType: const FullType(Crossword), + )! + as Crossword, + ); break; case 'locationsToTry': - result.locationsToTry.replace(serializers.deserialize(value, + result.locationsToTry.replace( + serializers.deserialize( + value, specifiedType: const FullType(BuiltMap, const [ const FullType(Location), - const FullType(Direction) - ]))!); + const FullType(Direction), + ]), + )!, + ); break; case 'badLocations': - result.badLocations.replace(serializers.deserialize(value, - specifiedType: const FullType( - BuiltSet, const [const FullType(Location)]))! - as BuiltSet); + result.badLocations.replace( + serializers.deserialize( + value, + specifiedType: const FullType(BuiltSet, const [ + const FullType(Location), + ]), + )! + as BuiltSet, + ); break; case 'candidateWords': - result.candidateWords.replace(serializers.deserialize(value, - specifiedType: - const FullType(BuiltSet, const [const FullType(String)]))! - as BuiltSet); + result.candidateWords.replace( + serializers.deserialize( + value, + specifiedType: const FullType(BuiltSet, const [ + const FullType(String), + ]), + )! + as BuiltSet, + ); break; } } @@ -426,10 +561,12 @@ class LocationBuilder implements Builder { Location build() => _build(); _$Location _build() { - final _$result = _$v ?? + final _$result = + _$v ?? new _$Location._( - x: BuiltValueNullFieldError.checkNotNull(x, r'Location', 'x'), - y: BuiltValueNullFieldError.checkNotNull(y, r'Location', 'y')); + x: BuiltValueNullFieldError.checkNotNull(x, r'Location', 'x'), + y: BuiltValueNullFieldError.checkNotNull(y, r'Location', 'y'), + ); replace(_$result); return _$result; } @@ -446,14 +583,22 @@ class _$CrosswordWord extends CrosswordWord { factory _$CrosswordWord([void Function(CrosswordWordBuilder)? updates]) => (new CrosswordWordBuilder()..update(updates))._build(); - _$CrosswordWord._( - {required this.word, required this.location, required this.direction}) - : super._() { + _$CrosswordWord._({ + required this.word, + required this.location, + required this.direction, + }) : super._() { BuiltValueNullFieldError.checkNotNull(word, r'CrosswordWord', 'word'); BuiltValueNullFieldError.checkNotNull( - location, r'CrosswordWord', 'location'); + location, + r'CrosswordWord', + 'location', + ); BuiltValueNullFieldError.checkNotNull( - direction, r'CrosswordWord', 'direction'); + direction, + r'CrosswordWord', + 'direction', + ); } @override @@ -538,13 +683,21 @@ class CrosswordWordBuilder _$CrosswordWord _build() { _$CrosswordWord _$result; try { - _$result = _$v ?? + _$result = + _$v ?? new _$CrosswordWord._( - word: BuiltValueNullFieldError.checkNotNull( - word, r'CrosswordWord', 'word'), - location: location.build(), - direction: BuiltValueNullFieldError.checkNotNull( - direction, r'CrosswordWord', 'direction')); + word: BuiltValueNullFieldError.checkNotNull( + word, + r'CrosswordWord', + 'word', + ), + location: location.build(), + direction: BuiltValueNullFieldError.checkNotNull( + direction, + r'CrosswordWord', + 'direction', + ), + ); } catch (_) { late String _$failedField; try { @@ -552,7 +705,10 @@ class CrosswordWordBuilder location.build(); } catch (e) { throw new BuiltValueNestedFieldError( - r'CrosswordWord', _$failedField, e.toString()); + r'CrosswordWord', + _$failedField, + e.toString(), + ); } rethrow; } @@ -569,21 +725,26 @@ class _$CrosswordCharacter extends CrosswordCharacter { @override final CrosswordWord? downWord; - factory _$CrosswordCharacter( - [void Function(CrosswordCharacterBuilder)? updates]) => - (new CrosswordCharacterBuilder()..update(updates))._build(); + factory _$CrosswordCharacter([ + void Function(CrosswordCharacterBuilder)? updates, + ]) => (new CrosswordCharacterBuilder()..update(updates))._build(); - _$CrosswordCharacter._( - {required this.character, this.acrossWord, this.downWord}) - : super._() { + _$CrosswordCharacter._({ + required this.character, + this.acrossWord, + this.downWord, + }) : super._() { BuiltValueNullFieldError.checkNotNull( - character, r'CrosswordCharacter', 'character'); + character, + r'CrosswordCharacter', + 'character', + ); } @override CrosswordCharacter rebuild( - void Function(CrosswordCharacterBuilder) updates) => - (toBuilder()..update(updates)).build(); + void Function(CrosswordCharacterBuilder) updates, + ) => (toBuilder()..update(updates)).build(); @override CrosswordCharacterBuilder toBuilder() => @@ -667,12 +828,17 @@ class CrosswordCharacterBuilder _$CrosswordCharacter _build() { _$CrosswordCharacter _$result; try { - _$result = _$v ?? + _$result = + _$v ?? new _$CrosswordCharacter._( - character: BuiltValueNullFieldError.checkNotNull( - character, r'CrosswordCharacter', 'character'), - acrossWord: _acrossWord?.build(), - downWord: _downWord?.build()); + character: BuiltValueNullFieldError.checkNotNull( + character, + r'CrosswordCharacter', + 'character', + ), + acrossWord: _acrossWord?.build(), + downWord: _downWord?.build(), + ); } catch (_) { late String _$failedField; try { @@ -682,7 +848,10 @@ class CrosswordCharacterBuilder _downWord?.build(); } catch (e) { throw new BuiltValueNestedFieldError( - r'CrosswordCharacter', _$failedField, e.toString()); + r'CrosswordCharacter', + _$failedField, + e.toString(), + ); } rethrow; } @@ -704,17 +873,20 @@ class _$Crossword extends Crossword { factory _$Crossword([void Function(CrosswordBuilder)? updates]) => (new CrosswordBuilder()..update(updates))._build(); - _$Crossword._( - {required this.width, - required this.height, - required this.words, - required this.characters}) - : super._() { + _$Crossword._({ + required this.width, + required this.height, + required this.words, + required this.characters, + }) : super._() { BuiltValueNullFieldError.checkNotNull(width, r'Crossword', 'width'); BuiltValueNullFieldError.checkNotNull(height, r'Crossword', 'height'); BuiltValueNullFieldError.checkNotNull(words, r'Crossword', 'words'); BuiltValueNullFieldError.checkNotNull( - characters, r'Crossword', 'characters'); + characters, + r'Crossword', + 'characters', + ); } @override @@ -810,14 +982,22 @@ class CrosswordBuilder implements Builder { Crossword._fillCharacters(this); _$Crossword _$result; try { - _$result = _$v ?? + _$result = + _$v ?? new _$Crossword._( - width: BuiltValueNullFieldError.checkNotNull( - width, r'Crossword', 'width'), - height: BuiltValueNullFieldError.checkNotNull( - height, r'Crossword', 'height'), - words: words.build(), - characters: characters.build()); + width: BuiltValueNullFieldError.checkNotNull( + width, + r'Crossword', + 'width', + ), + height: BuiltValueNullFieldError.checkNotNull( + height, + r'Crossword', + 'height', + ), + words: words.build(), + characters: characters.build(), + ); } catch (_) { late String _$failedField; try { @@ -827,7 +1007,10 @@ class CrosswordBuilder implements Builder { characters.build(); } catch (e) { throw new BuiltValueNestedFieldError( - r'Crossword', _$failedField, e.toString()); + r'Crossword', + _$failedField, + e.toString(), + ); } rethrow; } @@ -849,19 +1032,28 @@ class _$WorkQueue extends WorkQueue { factory _$WorkQueue([void Function(WorkQueueBuilder)? updates]) => (new WorkQueueBuilder()..update(updates))._build(); - _$WorkQueue._( - {required this.crossword, - required this.locationsToTry, - required this.badLocations, - required this.candidateWords}) - : super._() { + _$WorkQueue._({ + required this.crossword, + required this.locationsToTry, + required this.badLocations, + required this.candidateWords, + }) : super._() { BuiltValueNullFieldError.checkNotNull(crossword, r'WorkQueue', 'crossword'); BuiltValueNullFieldError.checkNotNull( - locationsToTry, r'WorkQueue', 'locationsToTry'); + locationsToTry, + r'WorkQueue', + 'locationsToTry', + ); BuiltValueNullFieldError.checkNotNull( - badLocations, r'WorkQueue', 'badLocations'); + badLocations, + r'WorkQueue', + 'badLocations', + ); BuiltValueNullFieldError.checkNotNull( - candidateWords, r'WorkQueue', 'candidateWords'); + candidateWords, + r'WorkQueue', + 'candidateWords', + ); } @override @@ -960,12 +1152,14 @@ class WorkQueueBuilder implements Builder { _$WorkQueue _build() { _$WorkQueue _$result; try { - _$result = _$v ?? + _$result = + _$v ?? new _$WorkQueue._( - crossword: crossword.build(), - locationsToTry: locationsToTry.build(), - badLocations: badLocations.build(), - candidateWords: candidateWords.build()); + crossword: crossword.build(), + locationsToTry: locationsToTry.build(), + badLocations: badLocations.build(), + candidateWords: candidateWords.build(), + ); } catch (_) { late String _$failedField; try { @@ -979,7 +1173,10 @@ class WorkQueueBuilder implements Builder { candidateWords.build(); } catch (e) { throw new BuiltValueNestedFieldError( - r'WorkQueue', _$failedField, e.toString()); + r'WorkQueue', + _$failedField, + e.toString(), + ); } rethrow; } diff --git a/generate_crossword/step_06/lib/providers.dart b/generate_crossword/step_06/lib/providers.dart index 102f7a18ca..63a780ffb9 100644 --- a/generate_crossword/step_06/lib/providers.dart +++ b/generate_crossword/step_06/lib/providers.dart @@ -25,10 +25,16 @@ Future> wordList(Ref ref) async { final re = RegExp(r'^[a-z]+$'); final words = await rootBundle.loadString('assets/words.txt'); - return const LineSplitter().convert(words).toBuiltSet().rebuild((b) => b - ..map((word) => word.toLowerCase().trim()) - ..where((word) => word.length > 2) - ..where((word) => re.hasMatch(word))); + return const LineSplitter() + .convert(words) + .toBuiltSet() + .rebuild( + (b) => + b + ..map((word) => word.toLowerCase().trim()) + ..where((word) => word.length > 2) + ..where((word) => re.hasMatch(word)), + ); } /// An enumeration for different sizes of [model.Crossword]s. @@ -39,10 +45,7 @@ enum CrosswordSize { xlarge(width: 160, height: 88), xxlarge(width: 500, height: 500); - const CrosswordSize({ - required this.width, - required this.height, - }); + const CrosswordSize({required this.width, required this.height}); final int width; final int height; @@ -68,14 +71,17 @@ Stream crossword(Ref ref) async* { final size = ref.watch(sizeProvider); final wordListAsync = ref.watch(wordListProvider); - final emptyCrossword = - model.Crossword.crossword(width: size.width, height: size.height); + final emptyCrossword = model.Crossword.crossword( + width: size.width, + height: size.height, + ); yield* wordListAsync.when( - data: (wordList) => exploreCrosswordSolutions( - crossword: emptyCrossword, - wordList: wordList, - ), + data: + (wordList) => exploreCrosswordSolutions( + crossword: emptyCrossword, + wordList: wordList, + ), error: (error, stackTrace) async* { debugPrint('Error loading word list: $error'); yield emptyCrossword; diff --git a/generate_crossword/step_06/lib/widgets/crossword_generator_app.dart b/generate_crossword/step_06/lib/widgets/crossword_generator_app.dart index 0c4a659789..6775f9fd89 100644 --- a/generate_crossword/step_06/lib/widgets/crossword_generator_app.dart +++ b/generate_crossword/step_06/lib/widgets/crossword_generator_app.dart @@ -24,9 +24,7 @@ class CrosswordGeneratorApp extends StatelessWidget { ), title: Text('Crossword Generator'), ), - body: SafeArea( - child: CrosswordWidget(), - ), + body: SafeArea(child: CrosswordWidget()), ), ); } @@ -46,19 +44,21 @@ class _EagerInitialization extends ConsumerWidget { class _CrosswordGeneratorMenu extends ConsumerWidget { @override Widget build(BuildContext context, WidgetRef ref) => MenuAnchor( - menuChildren: [ - for (final entry in CrosswordSize.values) - MenuItemButton( - onPressed: () => ref.read(sizeProvider.notifier).setSize(entry), - leadingIcon: entry == ref.watch(sizeProvider) + menuChildren: [ + for (final entry in CrosswordSize.values) + MenuItemButton( + onPressed: () => ref.read(sizeProvider.notifier).setSize(entry), + leadingIcon: + entry == ref.watch(sizeProvider) ? Icon(Icons.radio_button_checked_outlined) : Icon(Icons.radio_button_unchecked_outlined), - child: Text(entry.label), - ), - ], - builder: (context, controller, child) => IconButton( + child: Text(entry.label), + ), + ], + builder: + (context, controller, child) => IconButton( onPressed: () => controller.open(), icon: Icon(Icons.settings), ), - ); + ); } diff --git a/generate_crossword/step_06/lib/widgets/crossword_widget.dart b/generate_crossword/step_06/lib/widgets/crossword_widget.dart index 17941440ee..1795fe68da 100644 --- a/generate_crossword/step_06/lib/widgets/crossword_widget.dart +++ b/generate_crossword/step_06/lib/widgets/crossword_widget.dart @@ -70,9 +70,11 @@ class CrosswordWidget extends ConsumerWidget { foregroundDecoration: TableSpanDecoration( border: TableSpanBorder( leading: BorderSide( - color: Theme.of(context).colorScheme.onPrimaryContainer), + color: Theme.of(context).colorScheme.onPrimaryContainer, + ), trailing: BorderSide( - color: Theme.of(context).colorScheme.onPrimaryContainer), + color: Theme.of(context).colorScheme.onPrimaryContainer, + ), ), ), ); diff --git a/generate_crossword/step_06/pubspec.yaml b/generate_crossword/step_06/pubspec.yaml index cb8178f942..23da5fd396 100644 --- a/generate_crossword/step_06/pubspec.yaml +++ b/generate_crossword/step_06/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: 'none' version: 0.1.0 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 dependencies: flutter: diff --git a/generate_crossword/step_06/test/model_test.dart b/generate_crossword/step_06/test/model_test.dart index f11e1addb1..342c515ec1 100644 --- a/generate_crossword/step_06/test/model_test.dart +++ b/generate_crossword/step_06/test/model_test.dart @@ -39,28 +39,27 @@ void main() { expect(crossword.words.isNotEmpty, true); expect(crossword.words.length, 2); expect( - crossword.words - .rebuild( - (b) => b.where((b) => b.direction == Direction.across), - ) - .length, - 1); + crossword.words + .rebuild((b) => b.where((b) => b.direction == Direction.across)) + .length, + 1, + ); expect( - crossword.words - .rebuild( - (b) => b.where((b) => b.direction == Direction.down), - ) - .length, - 1); + crossword.words + .rebuild((b) => b.where((b) => b.direction == Direction.down)) + .length, + 1, + ); expect(crossword.characters.isNotEmpty, isTrue); expect(crossword.characters.length, 7); expect( - crossword.characters[topLeft], - CrosswordCharacter.character( - acrossWord: thisWord, - downWord: thatWord, - character: 't', - )); + crossword.characters[topLeft], + CrosswordCharacter.character( + acrossWord: thisWord, + downWord: thatWord, + character: 't', + ), + ); expect(crossword.valid, isTrue); }); @@ -86,19 +85,17 @@ void main() { expect(crossword.words.isNotEmpty, true); expect( - crossword.words - .rebuild( - (b) => b.where((b) => b.direction == Direction.across), - ) - .length, - 2); + crossword.words + .rebuild((b) => b.where((b) => b.direction == Direction.across)) + .length, + 2, + ); expect( - crossword.words - .rebuild( - (b) => b.where((b) => b.direction == Direction.down), - ) - .isEmpty, - true); + crossword.words + .rebuild((b) => b.where((b) => b.direction == Direction.down)) + .isEmpty, + true, + ); expect(crossword.characters.isNotEmpty, isTrue); expect(crossword.characters.length, 8); expect(crossword.valid, isFalse); @@ -108,11 +105,12 @@ void main() { Crossword crossword = Crossword.crossword(width: 50, height: 50); expect(crossword.valid, true); - crossword = crossword.addWord( - direction: Direction.across, - location: Location.at(0, 0), - word: 'this', - )!; + crossword = + crossword.addWord( + direction: Direction.across, + location: Location.at(0, 0), + word: 'this', + )!; expect(crossword.valid, true); final crossword2 = crossword.addWord( @@ -174,17 +172,18 @@ void main() { final topLeft = Location.at(0, 0); - crossword = crossword - .addWord( - location: topLeft, - word: 'this', - direction: Direction.down, - )! - .addWord( - location: topLeft, - word: 'total', - direction: Direction.across, - )!; + crossword = + crossword + .addWord( + location: topLeft, + word: 'this', + direction: Direction.down, + )! + .addWord( + location: topLeft, + word: 'total', + direction: Direction.across, + )!; expect(crossword.valid, isTrue); @@ -235,77 +234,85 @@ void main() { }); test('Crossword is not valid with run-on across words', () { - Crossword crossword = - Crossword.crossword(width: 50, height: 50).rebuild((b) => b - ..words.addAll([ - CrosswordWord.word( - direction: Direction.across, - location: Location.at(0, 0), - word: 'word', - ), - CrosswordWord.word( - direction: Direction.across, - location: Location.at(4, 0), - word: 'another', - ), - ])); + Crossword crossword = Crossword.crossword(width: 50, height: 50).rebuild( + (b) => + b + ..words.addAll([ + CrosswordWord.word( + direction: Direction.across, + location: Location.at(0, 0), + word: 'word', + ), + CrosswordWord.word( + direction: Direction.across, + location: Location.at(4, 0), + word: 'another', + ), + ]), + ); expect(crossword.valid, false); }); test('Crossword is not valid with run-on down words', () { - Crossword crossword = - Crossword.crossword(width: 50, height: 50).rebuild((b) => b - ..words.addAll([ - CrosswordWord.word( - direction: Direction.down, - location: Location.at(0, 0), - word: 'word', - ), - CrosswordWord.word( - direction: Direction.down, - location: Location.at(0, 4), - word: 'another', - ), - ])); + Crossword crossword = Crossword.crossword(width: 50, height: 50).rebuild( + (b) => + b + ..words.addAll([ + CrosswordWord.word( + direction: Direction.down, + location: Location.at(0, 0), + word: 'word', + ), + CrosswordWord.word( + direction: Direction.down, + location: Location.at(0, 4), + word: 'another', + ), + ]), + ); expect(crossword.valid, false); }); test('Crossword is not valid with run-on across/down words', () { - Crossword crossword = - Crossword.crossword(width: 50, height: 50).rebuild((b) => b - ..words.addAll([ - CrosswordWord.word( - direction: Direction.across, - location: Location.at(0, 0), - word: 'word', - ), - CrosswordWord.word( - direction: Direction.down, - location: Location.at(4, 0), - word: 'another', - ), - ])); + Crossword crossword = Crossword.crossword(width: 50, height: 50).rebuild( + (b) => + b + ..words.addAll([ + CrosswordWord.word( + direction: Direction.across, + location: Location.at(0, 0), + word: 'word', + ), + CrosswordWord.word( + direction: Direction.down, + location: Location.at(4, 0), + word: 'another', + ), + ]), + ); expect(crossword.valid, false); }); test('Crossword is not valid with run-on down/across words', () { - Crossword? crossword = - Crossword.crossword(width: 50, height: 50).rebuild((b) => b - ..words.addAll([ - CrosswordWord.word( - direction: Direction.down, - location: Location.at(0, 0), - word: 'word', - ), - CrosswordWord.word( - direction: Direction.across, - location: Location.at(0, 4), - word: 'another', - ), - ])); + Crossword? crossword = Crossword.crossword(width: 50, height: 50).rebuild( + (b) => + b + ..words.addAll([ + CrosswordWord.word( + direction: Direction.down, + location: Location.at(0, 0), + word: 'word', + ), + CrosswordWord.word( + direction: Direction.across, + location: Location.at(0, 4), + word: 'another', + ), + ]), + ); expect(crossword.valid, false); }); @@ -313,36 +320,40 @@ void main() { test('Adding duplicate across words returns null', () { Crossword? crossword = Crossword.crossword(width: 50, height: 50); - crossword = crossword.addWord( - direction: Direction.across, - location: Location.at(0, 0), - word: 'duplicated', - )!; - - expect( + crossword = crossword.addWord( direction: Direction.across, - location: Location.at(4, 4), + location: Location.at(0, 0), word: 'duplicated', - ), - isNull); + )!; + + expect( + crossword.addWord( + direction: Direction.across, + location: Location.at(4, 4), + word: 'duplicated', + ), + isNull, + ); }); test('Crossword is not valid with duplicate across words', () { - Crossword? crossword = - Crossword.crossword(width: 50, height: 50).rebuild((b) => b - ..words.addAll([ - CrosswordWord.word( - direction: Direction.across, - location: Location.at(0, 0), - word: 'duplicated', - ), - CrosswordWord.word( - direction: Direction.across, - location: Location.at(4, 4), - word: 'duplicated', - ), - ])); + Crossword? crossword = Crossword.crossword(width: 50, height: 50).rebuild( + (b) => + b + ..words.addAll([ + CrosswordWord.word( + direction: Direction.across, + location: Location.at(0, 0), + word: 'duplicated', + ), + CrosswordWord.word( + direction: Direction.across, + location: Location.at(4, 4), + word: 'duplicated', + ), + ]), + ); expect(crossword.valid, false); }); @@ -350,36 +361,40 @@ void main() { test('Adding duplicate down words returns null', () { Crossword? crossword = Crossword.crossword(width: 50, height: 50); - crossword = crossword.addWord( - direction: Direction.down, - location: Location.at(0, 0), - word: 'duplicated', - )!; - - expect( + crossword = crossword.addWord( direction: Direction.down, - location: Location.at(4, 4), + location: Location.at(0, 0), word: 'duplicated', - ), - isNull); + )!; + + expect( + crossword.addWord( + direction: Direction.down, + location: Location.at(4, 4), + word: 'duplicated', + ), + isNull, + ); }); test('Crossword is not valid with duplicate down words', () { - Crossword? crossword = - Crossword.crossword(width: 50, height: 50).rebuild((b) => b - ..words.addAll([ - CrosswordWord.word( - direction: Direction.down, - location: Location.at(0, 0), - word: 'duplicated', - ), - CrosswordWord.word( - direction: Direction.down, - location: Location.at(4, 4), - word: 'duplicated', - ), - ])); + Crossword? crossword = Crossword.crossword(width: 50, height: 50).rebuild( + (b) => + b + ..words.addAll([ + CrosswordWord.word( + direction: Direction.down, + location: Location.at(0, 0), + word: 'duplicated', + ), + CrosswordWord.word( + direction: Direction.down, + location: Location.at(4, 4), + word: 'duplicated', + ), + ]), + ); expect(crossword.valid, false); }); @@ -393,10 +408,12 @@ void main() { ); expect(queue.locationsToTry.length, 1); - crossword = crossword.addWord( - direction: Direction.across, - location: Location.at(0, 0), - word: 'word')!; + crossword = + crossword.addWord( + direction: Direction.across, + location: Location.at(0, 0), + word: 'word', + )!; queue = WorkQueue.from( crossword: crossword, candidateWords: ['words', 'and', 'moar', 'wordz'], @@ -404,21 +421,26 @@ void main() { ); expect(queue.locationsToTry.length, 4); expect( - queue.locationsToTry.entries - .every((element) => element.value == Direction.down), - isTrue); + queue.locationsToTry.entries.every( + (element) => element.value == Direction.down, + ), + isTrue, + ); final entries = queue.locationsToTry.entries; expect(entries.every((element) => element.key.y == 0), isTrue); - expect(entries.map((element) => element.key.x).toBuiltSet(), - equals(BuiltSet([0, 1, 2, 3]))); + expect( + entries.map((element) => element.key.x).toBuiltSet(), + equals(BuiltSet([0, 1, 2, 3])), + ); }); test('WorkQueue from down word', () { - Crossword crossword = Crossword.crossword(width: 50, height: 50).addWord( - direction: Direction.down, - location: Location.at(0, 0), - word: 'word', - )!; + Crossword crossword = + Crossword.crossword(width: 50, height: 50).addWord( + direction: Direction.down, + location: Location.at(0, 0), + word: 'word', + )!; WorkQueue queue = WorkQueue.from( crossword: crossword, @@ -427,27 +449,32 @@ void main() { ); expect(queue.locationsToTry.length, 4); expect( - queue.locationsToTry.entries - .every((element) => element.value == Direction.across), - isTrue); + queue.locationsToTry.entries.every( + (element) => element.value == Direction.across, + ), + isTrue, + ); final entries = queue.locationsToTry.entries; expect(entries.every((element) => element.key.x == 0), isTrue); - expect(entries.map((element) => element.key.y).toBuiltSet(), - equals(BuiltSet([0, 1, 2, 3]))); + expect( + entries.map((element) => element.key.y).toBuiltSet(), + equals(BuiltSet([0, 1, 2, 3])), + ); }); test('WorkQueue from two words', () { - Crossword crossword = Crossword.crossword(width: 50, height: 50) - .addWord( - direction: Direction.across, - location: Location.at(0, 0), - word: 'word', - )! - .addWord( - direction: Direction.down, - location: Location.at(0, 0), - word: 'work', - )!; + Crossword crossword = + Crossword.crossword(width: 50, height: 50) + .addWord( + direction: Direction.across, + location: Location.at(0, 0), + word: 'word', + )! + .addWord( + direction: Direction.down, + location: Location.at(0, 0), + word: 'work', + )!; WorkQueue queue = WorkQueue.from( crossword: crossword, @@ -455,27 +482,31 @@ void main() { startLocation: Location.at(0, 0), ); expect( - queue.locationsToTry, - equals(BuiltMap({ + queue.locationsToTry, + equals( + BuiltMap({ Location.at(2, 0): Direction.down, Location.at(0, 2): Direction.across, Location.at(3, 0): Direction.down, Location.at(0, 3): Direction.across, - }))); + }), + ), + ); }); test('WorkQueue removes used words from candidate list', () { - Crossword crossword = Crossword.crossword(width: 50, height: 50) - .addWord( - direction: Direction.across, - location: Location.at(0, 0), - word: 'word', - )! - .addWord( - direction: Direction.down, - location: Location.at(0, 0), - word: 'work', - )!; + Crossword crossword = + Crossword.crossword(width: 50, height: 50) + .addWord( + direction: Direction.across, + location: Location.at(0, 0), + word: 'word', + )! + .addWord( + direction: Direction.down, + location: Location.at(0, 0), + word: 'work', + )!; WorkQueue queue = WorkQueue.from( crossword: crossword, diff --git a/generate_crossword/step_07/lib/isolates.dart b/generate_crossword/step_07/lib/isolates.dart index 93c2b5e3fd..bc5cad39a1 100644 --- a/generate_crossword/step_07/lib/isolates.dart +++ b/generate_crossword/step_07/lib/isolates.dart @@ -33,9 +33,12 @@ Stream exploreCrosswordSolutions({ word: workQueue.candidateWords.randomElement(), ); } - var words = workQueue.candidateWords.toBuiltList().rebuild((b) => b - ..where((b) => b.characters.contains(target.character)) - ..shuffle()); + var words = workQueue.candidateWords.toBuiltList().rebuild( + (b) => + b + ..where((b) => b.characters.contains(target.character)) + ..shuffle(), + ); int tryCount = 0; for (final word in words) { tryCount++; @@ -69,6 +72,8 @@ Stream exploreCrosswordSolutions({ debugPrint('Error running isolate: $e'); } } - debugPrint('${crossword.width} x ${crossword.height} Crossword generated in ' - '${DateTime.now().difference(start).formatted}'); + debugPrint( + '${crossword.width} x ${crossword.height} Crossword generated in ' + '${DateTime.now().difference(start).formatted}', + ); } diff --git a/generate_crossword/step_07/lib/model.dart b/generate_crossword/step_07/lib/model.dart index dbd0a3e309..78800297ac 100644 --- a/generate_crossword/step_07/lib/model.dart +++ b/generate_crossword/step_07/lib/model.dart @@ -90,7 +90,10 @@ abstract class CrosswordWord static int locationComparator(CrosswordWord a, CrosswordWord b) { final compareRows = a.location.y.compareTo(b.location.y); final compareColumns = a.location.x.compareTo(b.location.x); - return switch (compareColumns) { 0 => compareRows, _ => compareColumns }; + return switch (compareColumns) { + 0 => compareRows, + _ => compareColumns, + }; } /// Constructor for [CrosswordWord]. @@ -99,10 +102,13 @@ abstract class CrosswordWord required Location location, required Direction direction, }) { - return CrosswordWord((b) => b - ..word = word - ..direction = direction - ..location.replace(location)); + return CrosswordWord( + (b) => + b + ..word = word + ..direction = direction + ..location.replace(location), + ); } /// Constructor for [CrosswordWord]. @@ -149,9 +155,9 @@ abstract class CrosswordCharacter /// Constructor for [CrosswordCharacter]. /// Use [CrosswordCharacter.character] instead. - factory CrosswordCharacter( - [void Function(CrosswordCharacterBuilder)? updates]) = - _$CrosswordCharacter; + factory CrosswordCharacter([ + void Function(CrosswordCharacterBuilder)? updates, + ]) = _$CrosswordCharacter; CrosswordCharacter._(); } @@ -282,14 +288,15 @@ abstract class Crossword implements Built { } final candidate = rebuild( - (b) => b - ..words.add( - CrosswordWord.word( - word: word, - direction: direction, - location: location, - ), - ), + (b) => + b + ..words.add( + CrosswordWord.word( + word: word, + direction: direction, + location: location, + ), + ), ); if (candidate.valid) { @@ -311,19 +318,21 @@ abstract class Crossword implements Built { b.characters.updateValue( word.location.rightOffset(idx), (b) => b.rebuild((bInner) => bInner.acrossWord.replace(word)), - ifAbsent: () => CrosswordCharacter.character( - acrossWord: word, - character: character, - ), + ifAbsent: + () => CrosswordCharacter.character( + acrossWord: word, + character: character, + ), ); case Direction.down: b.characters.updateValue( word.location.downOffset(idx), (b) => b.rebuild((bInner) => bInner.downWord.replace(word)), - ifAbsent: () => CrosswordCharacter.character( - downWord: word, - character: character, - ), + ifAbsent: + () => CrosswordCharacter.character( + downWord: word, + character: character, + ), ); } } @@ -337,7 +346,8 @@ abstract class Crossword implements Built { final grid = List.generate( height, (_) => List.generate( - width, (_) => '░', // https://www.compart.com/en/unicode/U+2591 + width, + (_) => '░', // https://www.compart.com/en/unicode/U+2591 ), ); @@ -417,40 +427,44 @@ abstract class WorkQueue implements Built { required Crossword crossword, required Iterable candidateWords, required Location startLocation, - }) => - WorkQueue((b) { - if (crossword.words.isEmpty) { - // Strip candidate words too long to fit in the crossword - b.candidateWords.addAll(candidateWords - .where((word) => word.characters.length <= crossword.width)); - - b.crossword.replace(crossword); - - b.locationsToTry.addAll({startLocation: Direction.across}); - } else { - // Assuming words have already been stripped to length - b.candidateWords.addAll( - candidateWords.toBuiltSet().rebuild( - (b) => b.removeAll(crossword.words.map((word) => word.word))), - ); - b.crossword.replace(crossword); - crossword.characters - .rebuild((b) => b.removeWhere((location, character) { - if (character.acrossWord != null && - character.downWord != null) { - return true; - } - final left = crossword.characters[location.left]; - if (left != null && left.downWord != null) return true; - final right = crossword.characters[location.right]; - if (right != null && right.downWord != null) return true; - final up = crossword.characters[location.up]; - if (up != null && up.acrossWord != null) return true; - final down = crossword.characters[location.down]; - if (down != null && down.acrossWord != null) return true; - return false; - })) - .forEach((location, character) { + }) => WorkQueue((b) { + if (crossword.words.isEmpty) { + // Strip candidate words too long to fit in the crossword + b.candidateWords.addAll( + candidateWords.where( + (word) => word.characters.length <= crossword.width, + ), + ); + + b.crossword.replace(crossword); + + b.locationsToTry.addAll({startLocation: Direction.across}); + } else { + // Assuming words have already been stripped to length + b.candidateWords.addAll( + candidateWords.toBuiltSet().rebuild( + (b) => b.removeAll(crossword.words.map((word) => word.word)), + ), + ); + b.crossword.replace(crossword); + crossword.characters + .rebuild( + (b) => b.removeWhere((location, character) { + if (character.acrossWord != null && character.downWord != null) { + return true; + } + final left = crossword.characters[location.left]; + if (left != null && left.downWord != null) return true; + final right = crossword.characters[location.right]; + if (right != null && right.downWord != null) return true; + final up = crossword.characters[location.up]; + if (up != null && up.acrossWord != null) return true; + final down = crossword.characters[location.down]; + if (down != null && down.acrossWord != null) return true; + return false; + }), + ) + .forEach((location, character) { b.locationsToTry.addAll({ location: switch ((character.acrossWord, character.downWord)) { (null, null) => @@ -458,28 +472,36 @@ abstract class WorkQueue implements Built { (null, _) => Direction.across, (_, null) => Direction.down, (_, _) => throw StateError('Character is part of two words'), - } + }, }); }); - } - }); + } + }); - WorkQueue remove(Location location) => rebuild((b) => b - ..locationsToTry.remove(location) - ..badLocations.add(location)); + WorkQueue remove(Location location) => rebuild( + (b) => + b + ..locationsToTry.remove(location) + ..badLocations.add(location), + ); /// Update the work queue from a crossword derived from the current crossword /// that this work queue is built from. WorkQueue updateFrom(final Crossword crossword) => WorkQueue.from( - crossword: crossword, - candidateWords: candidateWords, - startLocation: locationsToTry.isNotEmpty + crossword: crossword, + candidateWords: candidateWords, + startLocation: + locationsToTry.isNotEmpty ? locationsToTry.keys.first : Location.at(0, 0), - ).rebuild((b) => b - ..badLocations.addAll(badLocations) - ..locationsToTry - .removeWhere((location, _) => badLocations.contains(location))); + ).rebuild( + (b) => + b + ..badLocations.addAll(badLocations) + ..locationsToTry.removeWhere( + (location, _) => badLocations.contains(location), + ), + ); /// Factory constructor for [WorkQueue] factory WorkQueue([void Function(WorkQueueBuilder)? updates]) = _$WorkQueue; @@ -508,25 +530,35 @@ abstract class DisplayInfo implements Built { /// Construct a [DisplayInfo] instance from a [WorkQueue]. factory DisplayInfo.from({required WorkQueue workQueue}) { - final gridFilled = (workQueue.crossword.characters.length / - (workQueue.crossword.width * workQueue.crossword.height)); + final gridFilled = + (workQueue.crossword.characters.length / + (workQueue.crossword.width * workQueue.crossword.height)); final fmt = NumberFormat.decimalPattern(); - return DisplayInfo((b) => b - ..wordsInGridCount = fmt.format(workQueue.crossword.words.length) - ..candidateWordsCount = fmt.format(workQueue.candidateWords.length) - ..locationsToExploreCount = fmt.format(workQueue.locationsToTry.length) - ..knownBadLocationsCount = fmt.format(workQueue.badLocations.length) - ..gridFilledPercentage = '${(gridFilled * 100).toStringAsFixed(2)}%'); + return DisplayInfo( + (b) => + b + ..wordsInGridCount = fmt.format(workQueue.crossword.words.length) + ..candidateWordsCount = fmt.format(workQueue.candidateWords.length) + ..locationsToExploreCount = fmt.format( + workQueue.locationsToTry.length, + ) + ..knownBadLocationsCount = fmt.format(workQueue.badLocations.length) + ..gridFilledPercentage = + '${(gridFilled * 100).toStringAsFixed(2)}%', + ); } /// An empty [DisplayInfo] instance. - static DisplayInfo get empty => DisplayInfo((b) => b - ..wordsInGridCount = '0' - ..candidateWordsCount = '0' - ..locationsToExploreCount = '0' - ..knownBadLocationsCount = '0' - ..gridFilledPercentage = '0%'); + static DisplayInfo get empty => DisplayInfo( + (b) => + b + ..wordsInGridCount = '0' + ..candidateWordsCount = '0' + ..locationsToExploreCount = '0' + ..knownBadLocationsCount = '0' + ..gridFilledPercentage = '0%', + ); factory DisplayInfo([void Function(DisplayInfoBuilder)? updates]) = _$DisplayInfo; diff --git a/generate_crossword/step_07/lib/model.g.dart b/generate_crossword/step_07/lib/model.g.dart index bd8168e99d..f10a37ad34 100644 --- a/generate_crossword/step_07/lib/model.g.dart +++ b/generate_crossword/step_07/lib/model.g.dart @@ -6,33 +6,41 @@ part of 'model.dart'; // BuiltValueGenerator // ************************************************************************** -Serializers _$serializers = (new Serializers().toBuilder() - ..add(Crossword.serializer) - ..add(CrosswordCharacter.serializer) - ..add(CrosswordWord.serializer) - ..add(DisplayInfo.serializer) - ..add(Location.serializer) - ..add(WorkQueue.serializer) - ..addBuilderFactory( - const FullType(BuiltList, const [const FullType(CrosswordWord)]), - () => new ListBuilder()) - ..addBuilderFactory( - const FullType(BuiltMap, const [ - const FullType(Location), - const FullType(CrosswordCharacter) - ]), - () => new MapBuilder()) - ..addBuilderFactory( - const FullType(BuiltMap, - const [const FullType(Location), const FullType(Direction)]), - () => new MapBuilder()) - ..addBuilderFactory( - const FullType(BuiltSet, const [const FullType(Location)]), - () => new SetBuilder()) - ..addBuilderFactory( - const FullType(BuiltSet, const [const FullType(String)]), - () => new SetBuilder())) - .build(); +Serializers _$serializers = + (new Serializers().toBuilder() + ..add(Crossword.serializer) + ..add(CrosswordCharacter.serializer) + ..add(CrosswordWord.serializer) + ..add(DisplayInfo.serializer) + ..add(Location.serializer) + ..add(WorkQueue.serializer) + ..addBuilderFactory( + const FullType(BuiltList, const [const FullType(CrosswordWord)]), + () => new ListBuilder(), + ) + ..addBuilderFactory( + const FullType(BuiltMap, const [ + const FullType(Location), + const FullType(CrosswordCharacter), + ]), + () => new MapBuilder(), + ) + ..addBuilderFactory( + const FullType(BuiltMap, const [ + const FullType(Location), + const FullType(Direction), + ]), + () => new MapBuilder(), + ) + ..addBuilderFactory( + const FullType(BuiltSet, const [const FullType(Location)]), + () => new SetBuilder(), + ) + ..addBuilderFactory( + const FullType(BuiltSet, const [const FullType(String)]), + () => new SetBuilder(), + )) + .build(); Serializer _$locationSerializer = new _$LocationSerializer(); Serializer _$crosswordWordSerializer = new _$CrosswordWordSerializer(); @@ -49,8 +57,11 @@ class _$LocationSerializer implements StructuredSerializer { final String wireName = 'Location'; @override - Iterable serialize(Serializers serializers, Location object, - {FullType specifiedType = FullType.unspecified}) { + Iterable serialize( + Serializers serializers, + Location object, { + FullType specifiedType = FullType.unspecified, + }) { final result = [ 'x', serializers.serialize(object.x, specifiedType: const FullType(int)), @@ -62,8 +73,11 @@ class _$LocationSerializer implements StructuredSerializer { } @override - Location deserialize(Serializers serializers, Iterable serialized, - {FullType specifiedType = FullType.unspecified}) { + Location deserialize( + Serializers serializers, + Iterable serialized, { + FullType specifiedType = FullType.unspecified, + }) { final result = new LocationBuilder(); final iterator = serialized.iterator; @@ -73,12 +87,20 @@ class _$LocationSerializer implements StructuredSerializer { final Object? value = iterator.current; switch (key) { case 'x': - result.x = serializers.deserialize(value, - specifiedType: const FullType(int))! as int; + result.x = + serializers.deserialize( + value, + specifiedType: const FullType(int), + )! + as int; break; case 'y': - result.y = serializers.deserialize(value, - specifiedType: const FullType(int))! as int; + result.y = + serializers.deserialize( + value, + specifiedType: const FullType(int), + )! + as int; break; } } @@ -94,17 +116,24 @@ class _$CrosswordWordSerializer implements StructuredSerializer { final String wireName = 'CrosswordWord'; @override - Iterable serialize(Serializers serializers, CrosswordWord object, - {FullType specifiedType = FullType.unspecified}) { + Iterable serialize( + Serializers serializers, + CrosswordWord object, { + FullType specifiedType = FullType.unspecified, + }) { final result = [ 'word', serializers.serialize(object.word, specifiedType: const FullType(String)), 'location', - serializers.serialize(object.location, - specifiedType: const FullType(Location)), + serializers.serialize( + object.location, + specifiedType: const FullType(Location), + ), 'direction', - serializers.serialize(object.direction, - specifiedType: const FullType(Direction)), + serializers.serialize( + object.direction, + specifiedType: const FullType(Direction), + ), ]; return result; @@ -112,8 +141,10 @@ class _$CrosswordWordSerializer implements StructuredSerializer { @override CrosswordWord deserialize( - Serializers serializers, Iterable serialized, - {FullType specifiedType = FullType.unspecified}) { + Serializers serializers, + Iterable serialized, { + FullType specifiedType = FullType.unspecified, + }) { final result = new CrosswordWordBuilder(); final iterator = serialized.iterator; @@ -123,16 +154,29 @@ class _$CrosswordWordSerializer implements StructuredSerializer { final Object? value = iterator.current; switch (key) { case 'word': - result.word = serializers.deserialize(value, - specifiedType: const FullType(String))! as String; + result.word = + serializers.deserialize( + value, + specifiedType: const FullType(String), + )! + as String; break; case 'location': - result.location.replace(serializers.deserialize(value, - specifiedType: const FullType(Location))! as Location); + result.location.replace( + serializers.deserialize( + value, + specifiedType: const FullType(Location), + )! + as Location, + ); break; case 'direction': - result.direction = serializers.deserialize(value, - specifiedType: const FullType(Direction))! as Direction; + result.direction = + serializers.deserialize( + value, + specifiedType: const FullType(Direction), + )! + as Direction; break; } } @@ -150,35 +194,49 @@ class _$CrosswordCharacterSerializer @override Iterable serialize( - Serializers serializers, CrosswordCharacter object, - {FullType specifiedType = FullType.unspecified}) { + Serializers serializers, + CrosswordCharacter object, { + FullType specifiedType = FullType.unspecified, + }) { final result = [ 'character', - serializers.serialize(object.character, - specifiedType: const FullType(String)), + serializers.serialize( + object.character, + specifiedType: const FullType(String), + ), ]; Object? value; value = object.acrossWord; if (value != null) { result ..add('acrossWord') - ..add(serializers.serialize(value, - specifiedType: const FullType(CrosswordWord))); + ..add( + serializers.serialize( + value, + specifiedType: const FullType(CrosswordWord), + ), + ); } value = object.downWord; if (value != null) { result ..add('downWord') - ..add(serializers.serialize(value, - specifiedType: const FullType(CrosswordWord))); + ..add( + serializers.serialize( + value, + specifiedType: const FullType(CrosswordWord), + ), + ); } return result; } @override CrosswordCharacter deserialize( - Serializers serializers, Iterable serialized, - {FullType specifiedType = FullType.unspecified}) { + Serializers serializers, + Iterable serialized, { + FullType specifiedType = FullType.unspecified, + }) { final result = new CrosswordCharacterBuilder(); final iterator = serialized.iterator; @@ -188,16 +246,30 @@ class _$CrosswordCharacterSerializer final Object? value = iterator.current; switch (key) { case 'character': - result.character = serializers.deserialize(value, - specifiedType: const FullType(String))! as String; + result.character = + serializers.deserialize( + value, + specifiedType: const FullType(String), + )! + as String; break; case 'acrossWord': - result.acrossWord.replace(serializers.deserialize(value, - specifiedType: const FullType(CrosswordWord))! as CrosswordWord); + result.acrossWord.replace( + serializers.deserialize( + value, + specifiedType: const FullType(CrosswordWord), + )! + as CrosswordWord, + ); break; case 'downWord': - result.downWord.replace(serializers.deserialize(value, - specifiedType: const FullType(CrosswordWord))! as CrosswordWord); + result.downWord.replace( + serializers.deserialize( + value, + specifiedType: const FullType(CrosswordWord), + )! + as CrosswordWord, + ); break; } } @@ -213,31 +285,42 @@ class _$CrosswordSerializer implements StructuredSerializer { final String wireName = 'Crossword'; @override - Iterable serialize(Serializers serializers, Crossword object, - {FullType specifiedType = FullType.unspecified}) { + Iterable serialize( + Serializers serializers, + Crossword object, { + FullType specifiedType = FullType.unspecified, + }) { final result = [ 'width', serializers.serialize(object.width, specifiedType: const FullType(int)), 'height', serializers.serialize(object.height, specifiedType: const FullType(int)), 'words', - serializers.serialize(object.words, - specifiedType: - const FullType(BuiltList, const [const FullType(CrosswordWord)])), + serializers.serialize( + object.words, + specifiedType: const FullType(BuiltList, const [ + const FullType(CrosswordWord), + ]), + ), 'characters', - serializers.serialize(object.characters, - specifiedType: const FullType(BuiltMap, const [ - const FullType(Location), - const FullType(CrosswordCharacter) - ])), + serializers.serialize( + object.characters, + specifiedType: const FullType(BuiltMap, const [ + const FullType(Location), + const FullType(CrosswordCharacter), + ]), + ), ]; return result; } @override - Crossword deserialize(Serializers serializers, Iterable serialized, - {FullType specifiedType = FullType.unspecified}) { + Crossword deserialize( + Serializers serializers, + Iterable serialized, { + FullType specifiedType = FullType.unspecified, + }) { final result = new CrosswordBuilder(); final iterator = serialized.iterator; @@ -247,25 +330,42 @@ class _$CrosswordSerializer implements StructuredSerializer { final Object? value = iterator.current; switch (key) { case 'width': - result.width = serializers.deserialize(value, - specifiedType: const FullType(int))! as int; + result.width = + serializers.deserialize( + value, + specifiedType: const FullType(int), + )! + as int; break; case 'height': - result.height = serializers.deserialize(value, - specifiedType: const FullType(int))! as int; + result.height = + serializers.deserialize( + value, + specifiedType: const FullType(int), + )! + as int; break; case 'words': - result.words.replace(serializers.deserialize(value, - specifiedType: const FullType( - BuiltList, const [const FullType(CrosswordWord)]))! - as BuiltList); + result.words.replace( + serializers.deserialize( + value, + specifiedType: const FullType(BuiltList, const [ + const FullType(CrosswordWord), + ]), + )! + as BuiltList, + ); break; case 'characters': - result.characters.replace(serializers.deserialize(value, + result.characters.replace( + serializers.deserialize( + value, specifiedType: const FullType(BuiltMap, const [ const FullType(Location), - const FullType(CrosswordCharacter) - ]))!); + const FullType(CrosswordCharacter), + ]), + )!, + ); break; } } @@ -281,32 +381,48 @@ class _$WorkQueueSerializer implements StructuredSerializer { final String wireName = 'WorkQueue'; @override - Iterable serialize(Serializers serializers, WorkQueue object, - {FullType specifiedType = FullType.unspecified}) { + Iterable serialize( + Serializers serializers, + WorkQueue object, { + FullType specifiedType = FullType.unspecified, + }) { final result = [ 'crossword', - serializers.serialize(object.crossword, - specifiedType: const FullType(Crossword)), + serializers.serialize( + object.crossword, + specifiedType: const FullType(Crossword), + ), 'locationsToTry', - serializers.serialize(object.locationsToTry, - specifiedType: const FullType(BuiltMap, - const [const FullType(Location), const FullType(Direction)])), + serializers.serialize( + object.locationsToTry, + specifiedType: const FullType(BuiltMap, const [ + const FullType(Location), + const FullType(Direction), + ]), + ), 'badLocations', - serializers.serialize(object.badLocations, - specifiedType: - const FullType(BuiltSet, const [const FullType(Location)])), + serializers.serialize( + object.badLocations, + specifiedType: const FullType(BuiltSet, const [ + const FullType(Location), + ]), + ), 'candidateWords', - serializers.serialize(object.candidateWords, - specifiedType: - const FullType(BuiltSet, const [const FullType(String)])), + serializers.serialize( + object.candidateWords, + specifiedType: const FullType(BuiltSet, const [const FullType(String)]), + ), ]; return result; } @override - WorkQueue deserialize(Serializers serializers, Iterable serialized, - {FullType specifiedType = FullType.unspecified}) { + WorkQueue deserialize( + Serializers serializers, + Iterable serialized, { + FullType specifiedType = FullType.unspecified, + }) { final result = new WorkQueueBuilder(); final iterator = serialized.iterator; @@ -316,27 +432,46 @@ class _$WorkQueueSerializer implements StructuredSerializer { final Object? value = iterator.current; switch (key) { case 'crossword': - result.crossword.replace(serializers.deserialize(value, - specifiedType: const FullType(Crossword))! as Crossword); + result.crossword.replace( + serializers.deserialize( + value, + specifiedType: const FullType(Crossword), + )! + as Crossword, + ); break; case 'locationsToTry': - result.locationsToTry.replace(serializers.deserialize(value, + result.locationsToTry.replace( + serializers.deserialize( + value, specifiedType: const FullType(BuiltMap, const [ const FullType(Location), - const FullType(Direction) - ]))!); + const FullType(Direction), + ]), + )!, + ); break; case 'badLocations': - result.badLocations.replace(serializers.deserialize(value, - specifiedType: const FullType( - BuiltSet, const [const FullType(Location)]))! - as BuiltSet); + result.badLocations.replace( + serializers.deserialize( + value, + specifiedType: const FullType(BuiltSet, const [ + const FullType(Location), + ]), + )! + as BuiltSet, + ); break; case 'candidateWords': - result.candidateWords.replace(serializers.deserialize(value, - specifiedType: - const FullType(BuiltSet, const [const FullType(String)]))! - as BuiltSet); + result.candidateWords.replace( + serializers.deserialize( + value, + specifiedType: const FullType(BuiltSet, const [ + const FullType(String), + ]), + )! + as BuiltSet, + ); break; } } @@ -352,32 +487,48 @@ class _$DisplayInfoSerializer implements StructuredSerializer { final String wireName = 'DisplayInfo'; @override - Iterable serialize(Serializers serializers, DisplayInfo object, - {FullType specifiedType = FullType.unspecified}) { + Iterable serialize( + Serializers serializers, + DisplayInfo object, { + FullType specifiedType = FullType.unspecified, + }) { final result = [ 'wordsInGridCount', - serializers.serialize(object.wordsInGridCount, - specifiedType: const FullType(String)), + serializers.serialize( + object.wordsInGridCount, + specifiedType: const FullType(String), + ), 'candidateWordsCount', - serializers.serialize(object.candidateWordsCount, - specifiedType: const FullType(String)), + serializers.serialize( + object.candidateWordsCount, + specifiedType: const FullType(String), + ), 'locationsToExploreCount', - serializers.serialize(object.locationsToExploreCount, - specifiedType: const FullType(String)), + serializers.serialize( + object.locationsToExploreCount, + specifiedType: const FullType(String), + ), 'knownBadLocationsCount', - serializers.serialize(object.knownBadLocationsCount, - specifiedType: const FullType(String)), + serializers.serialize( + object.knownBadLocationsCount, + specifiedType: const FullType(String), + ), 'gridFilledPercentage', - serializers.serialize(object.gridFilledPercentage, - specifiedType: const FullType(String)), + serializers.serialize( + object.gridFilledPercentage, + specifiedType: const FullType(String), + ), ]; return result; } @override - DisplayInfo deserialize(Serializers serializers, Iterable serialized, - {FullType specifiedType = FullType.unspecified}) { + DisplayInfo deserialize( + Serializers serializers, + Iterable serialized, { + FullType specifiedType = FullType.unspecified, + }) { final result = new DisplayInfoBuilder(); final iterator = serialized.iterator; @@ -387,24 +538,44 @@ class _$DisplayInfoSerializer implements StructuredSerializer { final Object? value = iterator.current; switch (key) { case 'wordsInGridCount': - result.wordsInGridCount = serializers.deserialize(value, - specifiedType: const FullType(String))! as String; + result.wordsInGridCount = + serializers.deserialize( + value, + specifiedType: const FullType(String), + )! + as String; break; case 'candidateWordsCount': - result.candidateWordsCount = serializers.deserialize(value, - specifiedType: const FullType(String))! as String; + result.candidateWordsCount = + serializers.deserialize( + value, + specifiedType: const FullType(String), + )! + as String; break; case 'locationsToExploreCount': - result.locationsToExploreCount = serializers.deserialize(value, - specifiedType: const FullType(String))! as String; + result.locationsToExploreCount = + serializers.deserialize( + value, + specifiedType: const FullType(String), + )! + as String; break; case 'knownBadLocationsCount': - result.knownBadLocationsCount = serializers.deserialize(value, - specifiedType: const FullType(String))! as String; + result.knownBadLocationsCount = + serializers.deserialize( + value, + specifiedType: const FullType(String), + )! + as String; break; case 'gridFilledPercentage': - result.gridFilledPercentage = serializers.deserialize(value, - specifiedType: const FullType(String))! as String; + result.gridFilledPercentage = + serializers.deserialize( + value, + specifiedType: const FullType(String), + )! + as String; break; } } @@ -496,10 +667,12 @@ class LocationBuilder implements Builder { Location build() => _build(); _$Location _build() { - final _$result = _$v ?? + final _$result = + _$v ?? new _$Location._( - x: BuiltValueNullFieldError.checkNotNull(x, r'Location', 'x'), - y: BuiltValueNullFieldError.checkNotNull(y, r'Location', 'y')); + x: BuiltValueNullFieldError.checkNotNull(x, r'Location', 'x'), + y: BuiltValueNullFieldError.checkNotNull(y, r'Location', 'y'), + ); replace(_$result); return _$result; } @@ -516,14 +689,22 @@ class _$CrosswordWord extends CrosswordWord { factory _$CrosswordWord([void Function(CrosswordWordBuilder)? updates]) => (new CrosswordWordBuilder()..update(updates))._build(); - _$CrosswordWord._( - {required this.word, required this.location, required this.direction}) - : super._() { + _$CrosswordWord._({ + required this.word, + required this.location, + required this.direction, + }) : super._() { BuiltValueNullFieldError.checkNotNull(word, r'CrosswordWord', 'word'); BuiltValueNullFieldError.checkNotNull( - location, r'CrosswordWord', 'location'); + location, + r'CrosswordWord', + 'location', + ); BuiltValueNullFieldError.checkNotNull( - direction, r'CrosswordWord', 'direction'); + direction, + r'CrosswordWord', + 'direction', + ); } @override @@ -608,13 +789,21 @@ class CrosswordWordBuilder _$CrosswordWord _build() { _$CrosswordWord _$result; try { - _$result = _$v ?? + _$result = + _$v ?? new _$CrosswordWord._( - word: BuiltValueNullFieldError.checkNotNull( - word, r'CrosswordWord', 'word'), - location: location.build(), - direction: BuiltValueNullFieldError.checkNotNull( - direction, r'CrosswordWord', 'direction')); + word: BuiltValueNullFieldError.checkNotNull( + word, + r'CrosswordWord', + 'word', + ), + location: location.build(), + direction: BuiltValueNullFieldError.checkNotNull( + direction, + r'CrosswordWord', + 'direction', + ), + ); } catch (_) { late String _$failedField; try { @@ -622,7 +811,10 @@ class CrosswordWordBuilder location.build(); } catch (e) { throw new BuiltValueNestedFieldError( - r'CrosswordWord', _$failedField, e.toString()); + r'CrosswordWord', + _$failedField, + e.toString(), + ); } rethrow; } @@ -639,21 +831,26 @@ class _$CrosswordCharacter extends CrosswordCharacter { @override final CrosswordWord? downWord; - factory _$CrosswordCharacter( - [void Function(CrosswordCharacterBuilder)? updates]) => - (new CrosswordCharacterBuilder()..update(updates))._build(); + factory _$CrosswordCharacter([ + void Function(CrosswordCharacterBuilder)? updates, + ]) => (new CrosswordCharacterBuilder()..update(updates))._build(); - _$CrosswordCharacter._( - {required this.character, this.acrossWord, this.downWord}) - : super._() { + _$CrosswordCharacter._({ + required this.character, + this.acrossWord, + this.downWord, + }) : super._() { BuiltValueNullFieldError.checkNotNull( - character, r'CrosswordCharacter', 'character'); + character, + r'CrosswordCharacter', + 'character', + ); } @override CrosswordCharacter rebuild( - void Function(CrosswordCharacterBuilder) updates) => - (toBuilder()..update(updates)).build(); + void Function(CrosswordCharacterBuilder) updates, + ) => (toBuilder()..update(updates)).build(); @override CrosswordCharacterBuilder toBuilder() => @@ -737,12 +934,17 @@ class CrosswordCharacterBuilder _$CrosswordCharacter _build() { _$CrosswordCharacter _$result; try { - _$result = _$v ?? + _$result = + _$v ?? new _$CrosswordCharacter._( - character: BuiltValueNullFieldError.checkNotNull( - character, r'CrosswordCharacter', 'character'), - acrossWord: _acrossWord?.build(), - downWord: _downWord?.build()); + character: BuiltValueNullFieldError.checkNotNull( + character, + r'CrosswordCharacter', + 'character', + ), + acrossWord: _acrossWord?.build(), + downWord: _downWord?.build(), + ); } catch (_) { late String _$failedField; try { @@ -752,7 +954,10 @@ class CrosswordCharacterBuilder _downWord?.build(); } catch (e) { throw new BuiltValueNestedFieldError( - r'CrosswordCharacter', _$failedField, e.toString()); + r'CrosswordCharacter', + _$failedField, + e.toString(), + ); } rethrow; } @@ -774,17 +979,20 @@ class _$Crossword extends Crossword { factory _$Crossword([void Function(CrosswordBuilder)? updates]) => (new CrosswordBuilder()..update(updates))._build(); - _$Crossword._( - {required this.width, - required this.height, - required this.words, - required this.characters}) - : super._() { + _$Crossword._({ + required this.width, + required this.height, + required this.words, + required this.characters, + }) : super._() { BuiltValueNullFieldError.checkNotNull(width, r'Crossword', 'width'); BuiltValueNullFieldError.checkNotNull(height, r'Crossword', 'height'); BuiltValueNullFieldError.checkNotNull(words, r'Crossword', 'words'); BuiltValueNullFieldError.checkNotNull( - characters, r'Crossword', 'characters'); + characters, + r'Crossword', + 'characters', + ); } @override @@ -880,14 +1088,22 @@ class CrosswordBuilder implements Builder { Crossword._fillCharacters(this); _$Crossword _$result; try { - _$result = _$v ?? + _$result = + _$v ?? new _$Crossword._( - width: BuiltValueNullFieldError.checkNotNull( - width, r'Crossword', 'width'), - height: BuiltValueNullFieldError.checkNotNull( - height, r'Crossword', 'height'), - words: words.build(), - characters: characters.build()); + width: BuiltValueNullFieldError.checkNotNull( + width, + r'Crossword', + 'width', + ), + height: BuiltValueNullFieldError.checkNotNull( + height, + r'Crossword', + 'height', + ), + words: words.build(), + characters: characters.build(), + ); } catch (_) { late String _$failedField; try { @@ -897,7 +1113,10 @@ class CrosswordBuilder implements Builder { characters.build(); } catch (e) { throw new BuiltValueNestedFieldError( - r'Crossword', _$failedField, e.toString()); + r'Crossword', + _$failedField, + e.toString(), + ); } rethrow; } @@ -919,19 +1138,28 @@ class _$WorkQueue extends WorkQueue { factory _$WorkQueue([void Function(WorkQueueBuilder)? updates]) => (new WorkQueueBuilder()..update(updates))._build(); - _$WorkQueue._( - {required this.crossword, - required this.locationsToTry, - required this.badLocations, - required this.candidateWords}) - : super._() { + _$WorkQueue._({ + required this.crossword, + required this.locationsToTry, + required this.badLocations, + required this.candidateWords, + }) : super._() { BuiltValueNullFieldError.checkNotNull(crossword, r'WorkQueue', 'crossword'); BuiltValueNullFieldError.checkNotNull( - locationsToTry, r'WorkQueue', 'locationsToTry'); + locationsToTry, + r'WorkQueue', + 'locationsToTry', + ); BuiltValueNullFieldError.checkNotNull( - badLocations, r'WorkQueue', 'badLocations'); + badLocations, + r'WorkQueue', + 'badLocations', + ); BuiltValueNullFieldError.checkNotNull( - candidateWords, r'WorkQueue', 'candidateWords'); + candidateWords, + r'WorkQueue', + 'candidateWords', + ); } @override @@ -1030,12 +1258,14 @@ class WorkQueueBuilder implements Builder { _$WorkQueue _build() { _$WorkQueue _$result; try { - _$result = _$v ?? + _$result = + _$v ?? new _$WorkQueue._( - crossword: crossword.build(), - locationsToTry: locationsToTry.build(), - badLocations: badLocations.build(), - candidateWords: candidateWords.build()); + crossword: crossword.build(), + locationsToTry: locationsToTry.build(), + badLocations: badLocations.build(), + candidateWords: candidateWords.build(), + ); } catch (_) { late String _$failedField; try { @@ -1049,7 +1279,10 @@ class WorkQueueBuilder implements Builder { candidateWords.build(); } catch (e) { throw new BuiltValueNestedFieldError( - r'WorkQueue', _$failedField, e.toString()); + r'WorkQueue', + _$failedField, + e.toString(), + ); } rethrow; } @@ -1073,23 +1306,38 @@ class _$DisplayInfo extends DisplayInfo { factory _$DisplayInfo([void Function(DisplayInfoBuilder)? updates]) => (new DisplayInfoBuilder()..update(updates))._build(); - _$DisplayInfo._( - {required this.wordsInGridCount, - required this.candidateWordsCount, - required this.locationsToExploreCount, - required this.knownBadLocationsCount, - required this.gridFilledPercentage}) - : super._() { + _$DisplayInfo._({ + required this.wordsInGridCount, + required this.candidateWordsCount, + required this.locationsToExploreCount, + required this.knownBadLocationsCount, + required this.gridFilledPercentage, + }) : super._() { BuiltValueNullFieldError.checkNotNull( - wordsInGridCount, r'DisplayInfo', 'wordsInGridCount'); + wordsInGridCount, + r'DisplayInfo', + 'wordsInGridCount', + ); BuiltValueNullFieldError.checkNotNull( - candidateWordsCount, r'DisplayInfo', 'candidateWordsCount'); + candidateWordsCount, + r'DisplayInfo', + 'candidateWordsCount', + ); BuiltValueNullFieldError.checkNotNull( - locationsToExploreCount, r'DisplayInfo', 'locationsToExploreCount'); + locationsToExploreCount, + r'DisplayInfo', + 'locationsToExploreCount', + ); BuiltValueNullFieldError.checkNotNull( - knownBadLocationsCount, r'DisplayInfo', 'knownBadLocationsCount'); + knownBadLocationsCount, + r'DisplayInfo', + 'knownBadLocationsCount', + ); BuiltValueNullFieldError.checkNotNull( - gridFilledPercentage, r'DisplayInfo', 'gridFilledPercentage'); + gridFilledPercentage, + r'DisplayInfo', + 'gridFilledPercentage', + ); } @override @@ -1192,22 +1440,35 @@ class DisplayInfoBuilder implements Builder { DisplayInfo build() => _build(); _$DisplayInfo _build() { - final _$result = _$v ?? + final _$result = + _$v ?? new _$DisplayInfo._( - wordsInGridCount: BuiltValueNullFieldError.checkNotNull( - wordsInGridCount, r'DisplayInfo', 'wordsInGridCount'), - candidateWordsCount: BuiltValueNullFieldError.checkNotNull( - candidateWordsCount, r'DisplayInfo', 'candidateWordsCount'), - locationsToExploreCount: BuiltValueNullFieldError.checkNotNull( - locationsToExploreCount, - r'DisplayInfo', - 'locationsToExploreCount'), - knownBadLocationsCount: BuiltValueNullFieldError.checkNotNull( - knownBadLocationsCount, - r'DisplayInfo', - 'knownBadLocationsCount'), - gridFilledPercentage: BuiltValueNullFieldError.checkNotNull( - gridFilledPercentage, r'DisplayInfo', 'gridFilledPercentage')); + wordsInGridCount: BuiltValueNullFieldError.checkNotNull( + wordsInGridCount, + r'DisplayInfo', + 'wordsInGridCount', + ), + candidateWordsCount: BuiltValueNullFieldError.checkNotNull( + candidateWordsCount, + r'DisplayInfo', + 'candidateWordsCount', + ), + locationsToExploreCount: BuiltValueNullFieldError.checkNotNull( + locationsToExploreCount, + r'DisplayInfo', + 'locationsToExploreCount', + ), + knownBadLocationsCount: BuiltValueNullFieldError.checkNotNull( + knownBadLocationsCount, + r'DisplayInfo', + 'knownBadLocationsCount', + ), + gridFilledPercentage: BuiltValueNullFieldError.checkNotNull( + gridFilledPercentage, + r'DisplayInfo', + 'gridFilledPercentage', + ), + ); replace(_$result); return _$result; } diff --git a/generate_crossword/step_07/lib/providers.dart b/generate_crossword/step_07/lib/providers.dart index 683c943f0d..854108939a 100644 --- a/generate_crossword/step_07/lib/providers.dart +++ b/generate_crossword/step_07/lib/providers.dart @@ -26,10 +26,16 @@ Future> wordList(Ref ref) async { final re = RegExp(r'^[a-z]+$'); final words = await rootBundle.loadString('assets/words.txt'); - return const LineSplitter().convert(words).toBuiltSet().rebuild((b) => b - ..map((word) => word.toLowerCase().trim()) - ..where((word) => word.length > 2) - ..where((word) => re.hasMatch(word))); + return const LineSplitter() + .convert(words) + .toBuiltSet() + .rebuild( + (b) => + b + ..map((word) => word.toLowerCase().trim()) + ..where((word) => word.length > 2) + ..where((word) => re.hasMatch(word)), + ); } /// An enumeration for different sizes of [model.Crossword]s. @@ -40,10 +46,7 @@ enum CrosswordSize { xlarge(width: 160, height: 88), xxlarge(width: 500, height: 500); - const CrosswordSize({ - required this.width, - required this.height, - }); + const CrosswordSize({required this.width, required this.height}); final int width; final int height; @@ -68,8 +71,10 @@ class Size extends _$Size { Stream workQueue(Ref ref) async* { final size = ref.watch(sizeProvider); final wordListAsync = ref.watch(wordListProvider); - final emptyCrossword = - model.Crossword.crossword(width: size.width, height: size.height); + final emptyCrossword = model.Crossword.crossword( + width: size.width, + height: size.height, + ); final emptyWorkQueue = model.WorkQueue.from( crossword: emptyCrossword, candidateWords: BuiltSet(), @@ -80,10 +85,11 @@ Stream workQueue(Ref ref) async* { ref.read(endTimeProvider.notifier).clear(); yield* wordListAsync.when( - data: (wordList) => exploreCrosswordSolutions( - crossword: emptyCrossword, - wordList: wordList, - ), + data: + (wordList) => exploreCrosswordSolutions( + crossword: emptyCrossword, + wordList: wordList, + ), error: (error, stackTrace) async* { debugPrint('Error loading word list: $error'); yield emptyWorkQueue; @@ -143,10 +149,11 @@ Duration expectedRemainingTime(Ref ref) { try { final soFar = DateTime.now().difference(startTime); final completedPercentage = min( - 0.99, - (workQueue.crossword.characters.length / - (workQueue.crossword.width * workQueue.crossword.height) / - _estimatedTotalCoverage)); + 0.99, + (workQueue.crossword.characters.length / + (workQueue.crossword.width * workQueue.crossword.height) / + _estimatedTotalCoverage), + ); final expectedTotal = soFar.inSeconds / completedPercentage; final expectedRemaining = expectedTotal - soFar.inSeconds; return Duration(seconds: expectedRemaining.toInt()); @@ -177,7 +184,9 @@ class ShowDisplayInfo extends _$ShowDisplayInfo { @riverpod class DisplayInfo extends _$DisplayInfo { @override - model.DisplayInfo build() => ref.watch(workQueueProvider).when( + model.DisplayInfo build() => ref + .watch(workQueueProvider) + .when( data: (workQueue) => model.DisplayInfo.from(workQueue: workQueue), error: (error, stackTrace) => model.DisplayInfo.empty, loading: () => model.DisplayInfo.empty, diff --git a/generate_crossword/step_07/lib/providers.g.dart b/generate_crossword/step_07/lib/providers.g.dart index 6363546d41..322f686f1d 100644 --- a/generate_crossword/step_07/lib/providers.g.dart +++ b/generate_crossword/step_07/lib/providers.g.dart @@ -48,9 +48,10 @@ String _$expectedRemainingTimeHash() => final expectedRemainingTimeProvider = AutoDisposeProvider.internal( expectedRemainingTime, name: r'expectedRemainingTimeProvider', - debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') - ? null - : _$expectedRemainingTimeHash, + debugGetCreateSourceHash: + const bool.fromEnvironment('dart.vm.product') + ? null + : _$expectedRemainingTimeHash, dependencies: null, allTransitiveDependencies: null, ); @@ -110,14 +111,15 @@ String _$showDisplayInfoHash() => r'75a0679db4cc1a0d5cfa7aa33afc633faf08fc24'; @ProviderFor(ShowDisplayInfo) final showDisplayInfoProvider = NotifierProvider.internal( - ShowDisplayInfo.new, - name: r'showDisplayInfoProvider', - debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') - ? null - : _$showDisplayInfoHash, - dependencies: null, - allTransitiveDependencies: null, -); + ShowDisplayInfo.new, + name: r'showDisplayInfoProvider', + debugGetCreateSourceHash: + const bool.fromEnvironment('dart.vm.product') + ? null + : _$showDisplayInfoHash, + dependencies: null, + allTransitiveDependencies: null, + ); typedef _$ShowDisplayInfo = Notifier; String _$displayInfoHash() => r'6516f6bf346baa6914fdfffad1ccee8a5345a137'; @@ -128,13 +130,15 @@ String _$displayInfoHash() => r'6516f6bf346baa6914fdfffad1ccee8a5345a137'; @ProviderFor(DisplayInfo) final displayInfoProvider = AutoDisposeNotifierProvider.internal( - DisplayInfo.new, - name: r'displayInfoProvider', - debugGetCreateSourceHash: - const bool.fromEnvironment('dart.vm.product') ? null : _$displayInfoHash, - dependencies: null, - allTransitiveDependencies: null, -); + DisplayInfo.new, + name: r'displayInfoProvider', + debugGetCreateSourceHash: + const bool.fromEnvironment('dart.vm.product') + ? null + : _$displayInfoHash, + dependencies: null, + allTransitiveDependencies: null, + ); typedef _$DisplayInfo = AutoDisposeNotifier; // ignore_for_file: type=lint diff --git a/generate_crossword/step_07/lib/widgets/crossword_generator_app.dart b/generate_crossword/step_07/lib/widgets/crossword_generator_app.dart index e8b6093db1..f3d64afb4b 100644 --- a/generate_crossword/step_07/lib/widgets/crossword_generator_app.dart +++ b/generate_crossword/step_07/lib/widgets/crossword_generator_app.dart @@ -30,9 +30,7 @@ class CrosswordGeneratorApp extends StatelessWidget { builder: (context, ref, child) { return Stack( children: [ - Positioned.fill( - child: CrosswordWidget(), - ), + Positioned.fill(child: CrosswordWidget()), if (ref.watch(showDisplayInfoProvider)) CrosswordInfoWidget(), ], ); @@ -58,27 +56,29 @@ class _EagerInitialization extends ConsumerWidget { class _CrosswordGeneratorMenu extends ConsumerWidget { @override Widget build(BuildContext context, WidgetRef ref) => MenuAnchor( - menuChildren: [ - for (final entry in CrosswordSize.values) - MenuItemButton( - onPressed: () => ref.read(sizeProvider.notifier).setSize(entry), - leadingIcon: entry == ref.watch(sizeProvider) + menuChildren: [ + for (final entry in CrosswordSize.values) + MenuItemButton( + onPressed: () => ref.read(sizeProvider.notifier).setSize(entry), + leadingIcon: + entry == ref.watch(sizeProvider) ? Icon(Icons.radio_button_checked_outlined) : Icon(Icons.radio_button_unchecked_outlined), - child: Text(entry.label), - ), - MenuItemButton( - leadingIcon: ref.watch(showDisplayInfoProvider) + child: Text(entry.label), + ), + MenuItemButton( + leadingIcon: + ref.watch(showDisplayInfoProvider) ? Icon(Icons.check_box_outlined) : Icon(Icons.check_box_outline_blank_outlined), - onPressed: () => - ref.read(showDisplayInfoProvider.notifier).toggle(), - child: Text('Display Info'), - ), - ], - builder: (context, controller, child) => IconButton( + onPressed: () => ref.read(showDisplayInfoProvider.notifier).toggle(), + child: Text('Display Info'), + ), + ], + builder: + (context, controller, child) => IconButton( onPressed: () => controller.open(), icon: Icon(Icons.settings), ), - ); + ); } diff --git a/generate_crossword/step_07/lib/widgets/crossword_info_widget.dart b/generate_crossword/step_07/lib/widgets/crossword_info_widget.dart index 44deb06303..eb75df49c1 100644 --- a/generate_crossword/step_07/lib/widgets/crossword_info_widget.dart +++ b/generate_crossword/step_07/lib/widgets/crossword_info_widget.dart @@ -10,9 +10,7 @@ import '../utils.dart'; import 'ticker_builder.dart'; class CrosswordInfoWidget extends ConsumerWidget { - const CrosswordInfoWidget({ - super.key, - }); + const CrosswordInfoWidget({super.key}); @override Widget build(BuildContext context, WidgetRef ref) { @@ -25,62 +23,68 @@ class CrosswordInfoWidget extends ConsumerWidget { return Align( alignment: Alignment.bottomRight, child: Padding( - padding: const EdgeInsets.only( - right: 32.0, - bottom: 32.0, - ), + padding: const EdgeInsets.only(right: 32.0, bottom: 32.0), child: ClipRRect( borderRadius: BorderRadius.circular(8), child: ColoredBox( color: Theme.of(context).colorScheme.onPrimary.withAlpha(230), child: Padding( - padding: const EdgeInsets.symmetric( - horizontal: 12, - vertical: 8, - ), + padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 8), child: DefaultTextStyle( style: TextStyle( - fontSize: 16, color: Theme.of(context).colorScheme.primary), + fontSize: 16, + color: Theme.of(context).colorScheme.primary, + ), child: Column( mainAxisSize: MainAxisSize.min, crossAxisAlignment: CrossAxisAlignment.start, children: [ _CrosswordInfoRichText( - label: 'Grid Size', - value: '${size.width} x ${size.height}'), + label: 'Grid Size', + value: '${size.width} x ${size.height}', + ), _CrosswordInfoRichText( - label: 'Words in grid', - value: displayInfo.wordsInGridCount), + label: 'Words in grid', + value: displayInfo.wordsInGridCount, + ), _CrosswordInfoRichText( - label: 'Candidate words', - value: displayInfo.candidateWordsCount), + label: 'Candidate words', + value: displayInfo.candidateWordsCount, + ), _CrosswordInfoRichText( - label: 'Locations to explore', - value: displayInfo.locationsToExploreCount), + label: 'Locations to explore', + value: displayInfo.locationsToExploreCount, + ), _CrosswordInfoRichText( - label: 'Known bad locations', - value: displayInfo.knownBadLocationsCount), + label: 'Known bad locations', + value: displayInfo.knownBadLocationsCount, + ), _CrosswordInfoRichText( - label: 'Grid filled', - value: displayInfo.gridFilledPercentage), + label: 'Grid filled', + value: displayInfo.gridFilledPercentage, + ), switch ((startTime, endTime)) { (null, _) => _CrosswordInfoRichText( - label: 'Time elapsed', - value: 'Not started yet', - ), + label: 'Time elapsed', + value: 'Not started yet', + ), (DateTime start, null) => TickerBuilder( - builder: (context) => _CrosswordInfoRichText( - label: 'Time elapsed', - value: DateTime.now().difference(start).formatted, - ), - ), + builder: + (context) => _CrosswordInfoRichText( + label: 'Time elapsed', + value: DateTime.now().difference(start).formatted, + ), + ), (DateTime start, DateTime end) => _CrosswordInfoRichText( - label: 'Completed in', - value: end.difference(start).formatted), + label: 'Completed in', + value: end.difference(start).formatted, + ), }, if (startTime != null && endTime == null) _CrosswordInfoRichText( - label: 'Est. remaining', value: remaining.formatted), + label: 'Est. remaining', + value: remaining.formatted, + ), ], ), ), @@ -100,19 +104,16 @@ class _CrosswordInfoRichText extends StatelessWidget { @override Widget build(BuildContext context) => RichText( - text: TextSpan( - children: [ - TextSpan( - text: '$label ', - style: DefaultTextStyle.of(context).style, - ), - TextSpan( - text: value, - style: DefaultTextStyle.of(context) - .style - .copyWith(fontWeight: FontWeight.bold), - ), - ], + text: TextSpan( + children: [ + TextSpan(text: '$label ', style: DefaultTextStyle.of(context).style), + TextSpan( + text: value, + style: DefaultTextStyle.of( + context, + ).style.copyWith(fontWeight: FontWeight.bold), ), - ); + ], + ), + ); } diff --git a/generate_crossword/step_07/lib/widgets/crossword_widget.dart b/generate_crossword/step_07/lib/widgets/crossword_widget.dart index d243507093..6ac322d6d4 100644 --- a/generate_crossword/step_07/lib/widgets/crossword_widget.dart +++ b/generate_crossword/step_07/lib/widgets/crossword_widget.dart @@ -70,9 +70,11 @@ class CrosswordWidget extends ConsumerWidget { foregroundDecoration: TableSpanDecoration( border: TableSpanBorder( leading: BorderSide( - color: Theme.of(context).colorScheme.onPrimaryContainer), + color: Theme.of(context).colorScheme.onPrimaryContainer, + ), trailing: BorderSide( - color: Theme.of(context).colorScheme.onPrimaryContainer), + color: Theme.of(context).colorScheme.onPrimaryContainer, + ), ), ), ); diff --git a/generate_crossword/step_07/pubspec.yaml b/generate_crossword/step_07/pubspec.yaml index cb8178f942..23da5fd396 100644 --- a/generate_crossword/step_07/pubspec.yaml +++ b/generate_crossword/step_07/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: 'none' version: 0.1.0 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 dependencies: flutter: diff --git a/generate_crossword/step_07/test/model_test.dart b/generate_crossword/step_07/test/model_test.dart index f11e1addb1..342c515ec1 100644 --- a/generate_crossword/step_07/test/model_test.dart +++ b/generate_crossword/step_07/test/model_test.dart @@ -39,28 +39,27 @@ void main() { expect(crossword.words.isNotEmpty, true); expect(crossword.words.length, 2); expect( - crossword.words - .rebuild( - (b) => b.where((b) => b.direction == Direction.across), - ) - .length, - 1); + crossword.words + .rebuild((b) => b.where((b) => b.direction == Direction.across)) + .length, + 1, + ); expect( - crossword.words - .rebuild( - (b) => b.where((b) => b.direction == Direction.down), - ) - .length, - 1); + crossword.words + .rebuild((b) => b.where((b) => b.direction == Direction.down)) + .length, + 1, + ); expect(crossword.characters.isNotEmpty, isTrue); expect(crossword.characters.length, 7); expect( - crossword.characters[topLeft], - CrosswordCharacter.character( - acrossWord: thisWord, - downWord: thatWord, - character: 't', - )); + crossword.characters[topLeft], + CrosswordCharacter.character( + acrossWord: thisWord, + downWord: thatWord, + character: 't', + ), + ); expect(crossword.valid, isTrue); }); @@ -86,19 +85,17 @@ void main() { expect(crossword.words.isNotEmpty, true); expect( - crossword.words - .rebuild( - (b) => b.where((b) => b.direction == Direction.across), - ) - .length, - 2); + crossword.words + .rebuild((b) => b.where((b) => b.direction == Direction.across)) + .length, + 2, + ); expect( - crossword.words - .rebuild( - (b) => b.where((b) => b.direction == Direction.down), - ) - .isEmpty, - true); + crossword.words + .rebuild((b) => b.where((b) => b.direction == Direction.down)) + .isEmpty, + true, + ); expect(crossword.characters.isNotEmpty, isTrue); expect(crossword.characters.length, 8); expect(crossword.valid, isFalse); @@ -108,11 +105,12 @@ void main() { Crossword crossword = Crossword.crossword(width: 50, height: 50); expect(crossword.valid, true); - crossword = crossword.addWord( - direction: Direction.across, - location: Location.at(0, 0), - word: 'this', - )!; + crossword = + crossword.addWord( + direction: Direction.across, + location: Location.at(0, 0), + word: 'this', + )!; expect(crossword.valid, true); final crossword2 = crossword.addWord( @@ -174,17 +172,18 @@ void main() { final topLeft = Location.at(0, 0); - crossword = crossword - .addWord( - location: topLeft, - word: 'this', - direction: Direction.down, - )! - .addWord( - location: topLeft, - word: 'total', - direction: Direction.across, - )!; + crossword = + crossword + .addWord( + location: topLeft, + word: 'this', + direction: Direction.down, + )! + .addWord( + location: topLeft, + word: 'total', + direction: Direction.across, + )!; expect(crossword.valid, isTrue); @@ -235,77 +234,85 @@ void main() { }); test('Crossword is not valid with run-on across words', () { - Crossword crossword = - Crossword.crossword(width: 50, height: 50).rebuild((b) => b - ..words.addAll([ - CrosswordWord.word( - direction: Direction.across, - location: Location.at(0, 0), - word: 'word', - ), - CrosswordWord.word( - direction: Direction.across, - location: Location.at(4, 0), - word: 'another', - ), - ])); + Crossword crossword = Crossword.crossword(width: 50, height: 50).rebuild( + (b) => + b + ..words.addAll([ + CrosswordWord.word( + direction: Direction.across, + location: Location.at(0, 0), + word: 'word', + ), + CrosswordWord.word( + direction: Direction.across, + location: Location.at(4, 0), + word: 'another', + ), + ]), + ); expect(crossword.valid, false); }); test('Crossword is not valid with run-on down words', () { - Crossword crossword = - Crossword.crossword(width: 50, height: 50).rebuild((b) => b - ..words.addAll([ - CrosswordWord.word( - direction: Direction.down, - location: Location.at(0, 0), - word: 'word', - ), - CrosswordWord.word( - direction: Direction.down, - location: Location.at(0, 4), - word: 'another', - ), - ])); + Crossword crossword = Crossword.crossword(width: 50, height: 50).rebuild( + (b) => + b + ..words.addAll([ + CrosswordWord.word( + direction: Direction.down, + location: Location.at(0, 0), + word: 'word', + ), + CrosswordWord.word( + direction: Direction.down, + location: Location.at(0, 4), + word: 'another', + ), + ]), + ); expect(crossword.valid, false); }); test('Crossword is not valid with run-on across/down words', () { - Crossword crossword = - Crossword.crossword(width: 50, height: 50).rebuild((b) => b - ..words.addAll([ - CrosswordWord.word( - direction: Direction.across, - location: Location.at(0, 0), - word: 'word', - ), - CrosswordWord.word( - direction: Direction.down, - location: Location.at(4, 0), - word: 'another', - ), - ])); + Crossword crossword = Crossword.crossword(width: 50, height: 50).rebuild( + (b) => + b + ..words.addAll([ + CrosswordWord.word( + direction: Direction.across, + location: Location.at(0, 0), + word: 'word', + ), + CrosswordWord.word( + direction: Direction.down, + location: Location.at(4, 0), + word: 'another', + ), + ]), + ); expect(crossword.valid, false); }); test('Crossword is not valid with run-on down/across words', () { - Crossword? crossword = - Crossword.crossword(width: 50, height: 50).rebuild((b) => b - ..words.addAll([ - CrosswordWord.word( - direction: Direction.down, - location: Location.at(0, 0), - word: 'word', - ), - CrosswordWord.word( - direction: Direction.across, - location: Location.at(0, 4), - word: 'another', - ), - ])); + Crossword? crossword = Crossword.crossword(width: 50, height: 50).rebuild( + (b) => + b + ..words.addAll([ + CrosswordWord.word( + direction: Direction.down, + location: Location.at(0, 0), + word: 'word', + ), + CrosswordWord.word( + direction: Direction.across, + location: Location.at(0, 4), + word: 'another', + ), + ]), + ); expect(crossword.valid, false); }); @@ -313,36 +320,40 @@ void main() { test('Adding duplicate across words returns null', () { Crossword? crossword = Crossword.crossword(width: 50, height: 50); - crossword = crossword.addWord( - direction: Direction.across, - location: Location.at(0, 0), - word: 'duplicated', - )!; - - expect( + crossword = crossword.addWord( direction: Direction.across, - location: Location.at(4, 4), + location: Location.at(0, 0), word: 'duplicated', - ), - isNull); + )!; + + expect( + crossword.addWord( + direction: Direction.across, + location: Location.at(4, 4), + word: 'duplicated', + ), + isNull, + ); }); test('Crossword is not valid with duplicate across words', () { - Crossword? crossword = - Crossword.crossword(width: 50, height: 50).rebuild((b) => b - ..words.addAll([ - CrosswordWord.word( - direction: Direction.across, - location: Location.at(0, 0), - word: 'duplicated', - ), - CrosswordWord.word( - direction: Direction.across, - location: Location.at(4, 4), - word: 'duplicated', - ), - ])); + Crossword? crossword = Crossword.crossword(width: 50, height: 50).rebuild( + (b) => + b + ..words.addAll([ + CrosswordWord.word( + direction: Direction.across, + location: Location.at(0, 0), + word: 'duplicated', + ), + CrosswordWord.word( + direction: Direction.across, + location: Location.at(4, 4), + word: 'duplicated', + ), + ]), + ); expect(crossword.valid, false); }); @@ -350,36 +361,40 @@ void main() { test('Adding duplicate down words returns null', () { Crossword? crossword = Crossword.crossword(width: 50, height: 50); - crossword = crossword.addWord( - direction: Direction.down, - location: Location.at(0, 0), - word: 'duplicated', - )!; - - expect( + crossword = crossword.addWord( direction: Direction.down, - location: Location.at(4, 4), + location: Location.at(0, 0), word: 'duplicated', - ), - isNull); + )!; + + expect( + crossword.addWord( + direction: Direction.down, + location: Location.at(4, 4), + word: 'duplicated', + ), + isNull, + ); }); test('Crossword is not valid with duplicate down words', () { - Crossword? crossword = - Crossword.crossword(width: 50, height: 50).rebuild((b) => b - ..words.addAll([ - CrosswordWord.word( - direction: Direction.down, - location: Location.at(0, 0), - word: 'duplicated', - ), - CrosswordWord.word( - direction: Direction.down, - location: Location.at(4, 4), - word: 'duplicated', - ), - ])); + Crossword? crossword = Crossword.crossword(width: 50, height: 50).rebuild( + (b) => + b + ..words.addAll([ + CrosswordWord.word( + direction: Direction.down, + location: Location.at(0, 0), + word: 'duplicated', + ), + CrosswordWord.word( + direction: Direction.down, + location: Location.at(4, 4), + word: 'duplicated', + ), + ]), + ); expect(crossword.valid, false); }); @@ -393,10 +408,12 @@ void main() { ); expect(queue.locationsToTry.length, 1); - crossword = crossword.addWord( - direction: Direction.across, - location: Location.at(0, 0), - word: 'word')!; + crossword = + crossword.addWord( + direction: Direction.across, + location: Location.at(0, 0), + word: 'word', + )!; queue = WorkQueue.from( crossword: crossword, candidateWords: ['words', 'and', 'moar', 'wordz'], @@ -404,21 +421,26 @@ void main() { ); expect(queue.locationsToTry.length, 4); expect( - queue.locationsToTry.entries - .every((element) => element.value == Direction.down), - isTrue); + queue.locationsToTry.entries.every( + (element) => element.value == Direction.down, + ), + isTrue, + ); final entries = queue.locationsToTry.entries; expect(entries.every((element) => element.key.y == 0), isTrue); - expect(entries.map((element) => element.key.x).toBuiltSet(), - equals(BuiltSet([0, 1, 2, 3]))); + expect( + entries.map((element) => element.key.x).toBuiltSet(), + equals(BuiltSet([0, 1, 2, 3])), + ); }); test('WorkQueue from down word', () { - Crossword crossword = Crossword.crossword(width: 50, height: 50).addWord( - direction: Direction.down, - location: Location.at(0, 0), - word: 'word', - )!; + Crossword crossword = + Crossword.crossword(width: 50, height: 50).addWord( + direction: Direction.down, + location: Location.at(0, 0), + word: 'word', + )!; WorkQueue queue = WorkQueue.from( crossword: crossword, @@ -427,27 +449,32 @@ void main() { ); expect(queue.locationsToTry.length, 4); expect( - queue.locationsToTry.entries - .every((element) => element.value == Direction.across), - isTrue); + queue.locationsToTry.entries.every( + (element) => element.value == Direction.across, + ), + isTrue, + ); final entries = queue.locationsToTry.entries; expect(entries.every((element) => element.key.x == 0), isTrue); - expect(entries.map((element) => element.key.y).toBuiltSet(), - equals(BuiltSet([0, 1, 2, 3]))); + expect( + entries.map((element) => element.key.y).toBuiltSet(), + equals(BuiltSet([0, 1, 2, 3])), + ); }); test('WorkQueue from two words', () { - Crossword crossword = Crossword.crossword(width: 50, height: 50) - .addWord( - direction: Direction.across, - location: Location.at(0, 0), - word: 'word', - )! - .addWord( - direction: Direction.down, - location: Location.at(0, 0), - word: 'work', - )!; + Crossword crossword = + Crossword.crossword(width: 50, height: 50) + .addWord( + direction: Direction.across, + location: Location.at(0, 0), + word: 'word', + )! + .addWord( + direction: Direction.down, + location: Location.at(0, 0), + word: 'work', + )!; WorkQueue queue = WorkQueue.from( crossword: crossword, @@ -455,27 +482,31 @@ void main() { startLocation: Location.at(0, 0), ); expect( - queue.locationsToTry, - equals(BuiltMap({ + queue.locationsToTry, + equals( + BuiltMap({ Location.at(2, 0): Direction.down, Location.at(0, 2): Direction.across, Location.at(3, 0): Direction.down, Location.at(0, 3): Direction.across, - }))); + }), + ), + ); }); test('WorkQueue removes used words from candidate list', () { - Crossword crossword = Crossword.crossword(width: 50, height: 50) - .addWord( - direction: Direction.across, - location: Location.at(0, 0), - word: 'word', - )! - .addWord( - direction: Direction.down, - location: Location.at(0, 0), - word: 'work', - )!; + Crossword crossword = + Crossword.crossword(width: 50, height: 50) + .addWord( + direction: Direction.across, + location: Location.at(0, 0), + word: 'word', + )! + .addWord( + direction: Direction.down, + location: Location.at(0, 0), + word: 'work', + )!; WorkQueue queue = WorkQueue.from( crossword: crossword, diff --git a/generate_crossword/step_08/lib/isolates.dart b/generate_crossword/step_08/lib/isolates.dart index bc16c4f074..91f8015800 100644 --- a/generate_crossword/step_08/lib/isolates.dart +++ b/generate_crossword/step_08/lib/isolates.dart @@ -29,24 +29,35 @@ Stream exploreCrosswordSolutions({ } } - debugPrint('Generated ${workQueue.crossword.width} x ' - '${workQueue.crossword.height} crossword in ' - '${DateTime.now().difference(start).formatted} ' - 'with $maxWorkerCount workers.'); + debugPrint( + 'Generated ${workQueue.crossword.width} x ' + '${workQueue.crossword.height} crossword in ' + '${DateTime.now().difference(start).formatted} ' + 'with $maxWorkerCount workers.', + ); } Future _generate((WorkQueue, int) workMessage) async { var (workQueue, maxWorkerCount) = workMessage; final candidateGeneratorFutures = >[]; - final locations = workQueue.locationsToTry.keys.toBuiltList().rebuild((b) => b - ..shuffle() - ..take(maxWorkerCount)); + final locations = workQueue.locationsToTry.keys.toBuiltList().rebuild( + (b) => + b + ..shuffle() + ..take(maxWorkerCount), + ); for (final location in locations) { final direction = workQueue.locationsToTry[location]!; - candidateGeneratorFutures.add(compute(_generateCandidate, - (workQueue.crossword, workQueue.candidateWords, location, direction))); + candidateGeneratorFutures.add( + compute(_generateCandidate, ( + workQueue.crossword, + workQueue.candidateWords, + location, + direction, + )), + ); } try { @@ -55,7 +66,10 @@ Future _generate((WorkQueue, int) workMessage) async { for (final (location, direction, word) in results) { if (word != null) { final candidate = crossword.addWord( - location: location, word: word, direction: direction); + location: location, + word: word, + direction: direction, + ); if (candidate != null) { crossword = candidate; } @@ -73,7 +87,8 @@ Future _generate((WorkQueue, int) workMessage) async { } (Location, Direction, String?) _generateCandidate( - (Crossword, BuiltSet, Location, Direction) searchDetailMessage) { + (Crossword, BuiltSet, Location, Direction) searchDetailMessage, +) { final (crossword, candidateWords, location, direction) = searchDetailMessage; final target = crossword.characters[location]; @@ -83,9 +98,12 @@ Future _generate((WorkQueue, int) workMessage) async { // Filter down the candidate word list to those that contain the letter // at the current location - final words = candidateWords.toBuiltList().rebuild((b) => b - ..where((b) => b.characters.contains(target.character)) - ..shuffle()); + final words = candidateWords.toBuiltList().rebuild( + (b) => + b + ..where((b) => b.characters.contains(target.character)) + ..shuffle(), + ); int tryCount = 0; final start = DateTime.now(); for (final word in words) { diff --git a/generate_crossword/step_08/lib/model.dart b/generate_crossword/step_08/lib/model.dart index dbd0a3e309..78800297ac 100644 --- a/generate_crossword/step_08/lib/model.dart +++ b/generate_crossword/step_08/lib/model.dart @@ -90,7 +90,10 @@ abstract class CrosswordWord static int locationComparator(CrosswordWord a, CrosswordWord b) { final compareRows = a.location.y.compareTo(b.location.y); final compareColumns = a.location.x.compareTo(b.location.x); - return switch (compareColumns) { 0 => compareRows, _ => compareColumns }; + return switch (compareColumns) { + 0 => compareRows, + _ => compareColumns, + }; } /// Constructor for [CrosswordWord]. @@ -99,10 +102,13 @@ abstract class CrosswordWord required Location location, required Direction direction, }) { - return CrosswordWord((b) => b - ..word = word - ..direction = direction - ..location.replace(location)); + return CrosswordWord( + (b) => + b + ..word = word + ..direction = direction + ..location.replace(location), + ); } /// Constructor for [CrosswordWord]. @@ -149,9 +155,9 @@ abstract class CrosswordCharacter /// Constructor for [CrosswordCharacter]. /// Use [CrosswordCharacter.character] instead. - factory CrosswordCharacter( - [void Function(CrosswordCharacterBuilder)? updates]) = - _$CrosswordCharacter; + factory CrosswordCharacter([ + void Function(CrosswordCharacterBuilder)? updates, + ]) = _$CrosswordCharacter; CrosswordCharacter._(); } @@ -282,14 +288,15 @@ abstract class Crossword implements Built { } final candidate = rebuild( - (b) => b - ..words.add( - CrosswordWord.word( - word: word, - direction: direction, - location: location, - ), - ), + (b) => + b + ..words.add( + CrosswordWord.word( + word: word, + direction: direction, + location: location, + ), + ), ); if (candidate.valid) { @@ -311,19 +318,21 @@ abstract class Crossword implements Built { b.characters.updateValue( word.location.rightOffset(idx), (b) => b.rebuild((bInner) => bInner.acrossWord.replace(word)), - ifAbsent: () => CrosswordCharacter.character( - acrossWord: word, - character: character, - ), + ifAbsent: + () => CrosswordCharacter.character( + acrossWord: word, + character: character, + ), ); case Direction.down: b.characters.updateValue( word.location.downOffset(idx), (b) => b.rebuild((bInner) => bInner.downWord.replace(word)), - ifAbsent: () => CrosswordCharacter.character( - downWord: word, - character: character, - ), + ifAbsent: + () => CrosswordCharacter.character( + downWord: word, + character: character, + ), ); } } @@ -337,7 +346,8 @@ abstract class Crossword implements Built { final grid = List.generate( height, (_) => List.generate( - width, (_) => '░', // https://www.compart.com/en/unicode/U+2591 + width, + (_) => '░', // https://www.compart.com/en/unicode/U+2591 ), ); @@ -417,40 +427,44 @@ abstract class WorkQueue implements Built { required Crossword crossword, required Iterable candidateWords, required Location startLocation, - }) => - WorkQueue((b) { - if (crossword.words.isEmpty) { - // Strip candidate words too long to fit in the crossword - b.candidateWords.addAll(candidateWords - .where((word) => word.characters.length <= crossword.width)); - - b.crossword.replace(crossword); - - b.locationsToTry.addAll({startLocation: Direction.across}); - } else { - // Assuming words have already been stripped to length - b.candidateWords.addAll( - candidateWords.toBuiltSet().rebuild( - (b) => b.removeAll(crossword.words.map((word) => word.word))), - ); - b.crossword.replace(crossword); - crossword.characters - .rebuild((b) => b.removeWhere((location, character) { - if (character.acrossWord != null && - character.downWord != null) { - return true; - } - final left = crossword.characters[location.left]; - if (left != null && left.downWord != null) return true; - final right = crossword.characters[location.right]; - if (right != null && right.downWord != null) return true; - final up = crossword.characters[location.up]; - if (up != null && up.acrossWord != null) return true; - final down = crossword.characters[location.down]; - if (down != null && down.acrossWord != null) return true; - return false; - })) - .forEach((location, character) { + }) => WorkQueue((b) { + if (crossword.words.isEmpty) { + // Strip candidate words too long to fit in the crossword + b.candidateWords.addAll( + candidateWords.where( + (word) => word.characters.length <= crossword.width, + ), + ); + + b.crossword.replace(crossword); + + b.locationsToTry.addAll({startLocation: Direction.across}); + } else { + // Assuming words have already been stripped to length + b.candidateWords.addAll( + candidateWords.toBuiltSet().rebuild( + (b) => b.removeAll(crossword.words.map((word) => word.word)), + ), + ); + b.crossword.replace(crossword); + crossword.characters + .rebuild( + (b) => b.removeWhere((location, character) { + if (character.acrossWord != null && character.downWord != null) { + return true; + } + final left = crossword.characters[location.left]; + if (left != null && left.downWord != null) return true; + final right = crossword.characters[location.right]; + if (right != null && right.downWord != null) return true; + final up = crossword.characters[location.up]; + if (up != null && up.acrossWord != null) return true; + final down = crossword.characters[location.down]; + if (down != null && down.acrossWord != null) return true; + return false; + }), + ) + .forEach((location, character) { b.locationsToTry.addAll({ location: switch ((character.acrossWord, character.downWord)) { (null, null) => @@ -458,28 +472,36 @@ abstract class WorkQueue implements Built { (null, _) => Direction.across, (_, null) => Direction.down, (_, _) => throw StateError('Character is part of two words'), - } + }, }); }); - } - }); + } + }); - WorkQueue remove(Location location) => rebuild((b) => b - ..locationsToTry.remove(location) - ..badLocations.add(location)); + WorkQueue remove(Location location) => rebuild( + (b) => + b + ..locationsToTry.remove(location) + ..badLocations.add(location), + ); /// Update the work queue from a crossword derived from the current crossword /// that this work queue is built from. WorkQueue updateFrom(final Crossword crossword) => WorkQueue.from( - crossword: crossword, - candidateWords: candidateWords, - startLocation: locationsToTry.isNotEmpty + crossword: crossword, + candidateWords: candidateWords, + startLocation: + locationsToTry.isNotEmpty ? locationsToTry.keys.first : Location.at(0, 0), - ).rebuild((b) => b - ..badLocations.addAll(badLocations) - ..locationsToTry - .removeWhere((location, _) => badLocations.contains(location))); + ).rebuild( + (b) => + b + ..badLocations.addAll(badLocations) + ..locationsToTry.removeWhere( + (location, _) => badLocations.contains(location), + ), + ); /// Factory constructor for [WorkQueue] factory WorkQueue([void Function(WorkQueueBuilder)? updates]) = _$WorkQueue; @@ -508,25 +530,35 @@ abstract class DisplayInfo implements Built { /// Construct a [DisplayInfo] instance from a [WorkQueue]. factory DisplayInfo.from({required WorkQueue workQueue}) { - final gridFilled = (workQueue.crossword.characters.length / - (workQueue.crossword.width * workQueue.crossword.height)); + final gridFilled = + (workQueue.crossword.characters.length / + (workQueue.crossword.width * workQueue.crossword.height)); final fmt = NumberFormat.decimalPattern(); - return DisplayInfo((b) => b - ..wordsInGridCount = fmt.format(workQueue.crossword.words.length) - ..candidateWordsCount = fmt.format(workQueue.candidateWords.length) - ..locationsToExploreCount = fmt.format(workQueue.locationsToTry.length) - ..knownBadLocationsCount = fmt.format(workQueue.badLocations.length) - ..gridFilledPercentage = '${(gridFilled * 100).toStringAsFixed(2)}%'); + return DisplayInfo( + (b) => + b + ..wordsInGridCount = fmt.format(workQueue.crossword.words.length) + ..candidateWordsCount = fmt.format(workQueue.candidateWords.length) + ..locationsToExploreCount = fmt.format( + workQueue.locationsToTry.length, + ) + ..knownBadLocationsCount = fmt.format(workQueue.badLocations.length) + ..gridFilledPercentage = + '${(gridFilled * 100).toStringAsFixed(2)}%', + ); } /// An empty [DisplayInfo] instance. - static DisplayInfo get empty => DisplayInfo((b) => b - ..wordsInGridCount = '0' - ..candidateWordsCount = '0' - ..locationsToExploreCount = '0' - ..knownBadLocationsCount = '0' - ..gridFilledPercentage = '0%'); + static DisplayInfo get empty => DisplayInfo( + (b) => + b + ..wordsInGridCount = '0' + ..candidateWordsCount = '0' + ..locationsToExploreCount = '0' + ..knownBadLocationsCount = '0' + ..gridFilledPercentage = '0%', + ); factory DisplayInfo([void Function(DisplayInfoBuilder)? updates]) = _$DisplayInfo; diff --git a/generate_crossword/step_08/lib/model.g.dart b/generate_crossword/step_08/lib/model.g.dart index bd8168e99d..f10a37ad34 100644 --- a/generate_crossword/step_08/lib/model.g.dart +++ b/generate_crossword/step_08/lib/model.g.dart @@ -6,33 +6,41 @@ part of 'model.dart'; // BuiltValueGenerator // ************************************************************************** -Serializers _$serializers = (new Serializers().toBuilder() - ..add(Crossword.serializer) - ..add(CrosswordCharacter.serializer) - ..add(CrosswordWord.serializer) - ..add(DisplayInfo.serializer) - ..add(Location.serializer) - ..add(WorkQueue.serializer) - ..addBuilderFactory( - const FullType(BuiltList, const [const FullType(CrosswordWord)]), - () => new ListBuilder()) - ..addBuilderFactory( - const FullType(BuiltMap, const [ - const FullType(Location), - const FullType(CrosswordCharacter) - ]), - () => new MapBuilder()) - ..addBuilderFactory( - const FullType(BuiltMap, - const [const FullType(Location), const FullType(Direction)]), - () => new MapBuilder()) - ..addBuilderFactory( - const FullType(BuiltSet, const [const FullType(Location)]), - () => new SetBuilder()) - ..addBuilderFactory( - const FullType(BuiltSet, const [const FullType(String)]), - () => new SetBuilder())) - .build(); +Serializers _$serializers = + (new Serializers().toBuilder() + ..add(Crossword.serializer) + ..add(CrosswordCharacter.serializer) + ..add(CrosswordWord.serializer) + ..add(DisplayInfo.serializer) + ..add(Location.serializer) + ..add(WorkQueue.serializer) + ..addBuilderFactory( + const FullType(BuiltList, const [const FullType(CrosswordWord)]), + () => new ListBuilder(), + ) + ..addBuilderFactory( + const FullType(BuiltMap, const [ + const FullType(Location), + const FullType(CrosswordCharacter), + ]), + () => new MapBuilder(), + ) + ..addBuilderFactory( + const FullType(BuiltMap, const [ + const FullType(Location), + const FullType(Direction), + ]), + () => new MapBuilder(), + ) + ..addBuilderFactory( + const FullType(BuiltSet, const [const FullType(Location)]), + () => new SetBuilder(), + ) + ..addBuilderFactory( + const FullType(BuiltSet, const [const FullType(String)]), + () => new SetBuilder(), + )) + .build(); Serializer _$locationSerializer = new _$LocationSerializer(); Serializer _$crosswordWordSerializer = new _$CrosswordWordSerializer(); @@ -49,8 +57,11 @@ class _$LocationSerializer implements StructuredSerializer { final String wireName = 'Location'; @override - Iterable serialize(Serializers serializers, Location object, - {FullType specifiedType = FullType.unspecified}) { + Iterable serialize( + Serializers serializers, + Location object, { + FullType specifiedType = FullType.unspecified, + }) { final result = [ 'x', serializers.serialize(object.x, specifiedType: const FullType(int)), @@ -62,8 +73,11 @@ class _$LocationSerializer implements StructuredSerializer { } @override - Location deserialize(Serializers serializers, Iterable serialized, - {FullType specifiedType = FullType.unspecified}) { + Location deserialize( + Serializers serializers, + Iterable serialized, { + FullType specifiedType = FullType.unspecified, + }) { final result = new LocationBuilder(); final iterator = serialized.iterator; @@ -73,12 +87,20 @@ class _$LocationSerializer implements StructuredSerializer { final Object? value = iterator.current; switch (key) { case 'x': - result.x = serializers.deserialize(value, - specifiedType: const FullType(int))! as int; + result.x = + serializers.deserialize( + value, + specifiedType: const FullType(int), + )! + as int; break; case 'y': - result.y = serializers.deserialize(value, - specifiedType: const FullType(int))! as int; + result.y = + serializers.deserialize( + value, + specifiedType: const FullType(int), + )! + as int; break; } } @@ -94,17 +116,24 @@ class _$CrosswordWordSerializer implements StructuredSerializer { final String wireName = 'CrosswordWord'; @override - Iterable serialize(Serializers serializers, CrosswordWord object, - {FullType specifiedType = FullType.unspecified}) { + Iterable serialize( + Serializers serializers, + CrosswordWord object, { + FullType specifiedType = FullType.unspecified, + }) { final result = [ 'word', serializers.serialize(object.word, specifiedType: const FullType(String)), 'location', - serializers.serialize(object.location, - specifiedType: const FullType(Location)), + serializers.serialize( + object.location, + specifiedType: const FullType(Location), + ), 'direction', - serializers.serialize(object.direction, - specifiedType: const FullType(Direction)), + serializers.serialize( + object.direction, + specifiedType: const FullType(Direction), + ), ]; return result; @@ -112,8 +141,10 @@ class _$CrosswordWordSerializer implements StructuredSerializer { @override CrosswordWord deserialize( - Serializers serializers, Iterable serialized, - {FullType specifiedType = FullType.unspecified}) { + Serializers serializers, + Iterable serialized, { + FullType specifiedType = FullType.unspecified, + }) { final result = new CrosswordWordBuilder(); final iterator = serialized.iterator; @@ -123,16 +154,29 @@ class _$CrosswordWordSerializer implements StructuredSerializer { final Object? value = iterator.current; switch (key) { case 'word': - result.word = serializers.deserialize(value, - specifiedType: const FullType(String))! as String; + result.word = + serializers.deserialize( + value, + specifiedType: const FullType(String), + )! + as String; break; case 'location': - result.location.replace(serializers.deserialize(value, - specifiedType: const FullType(Location))! as Location); + result.location.replace( + serializers.deserialize( + value, + specifiedType: const FullType(Location), + )! + as Location, + ); break; case 'direction': - result.direction = serializers.deserialize(value, - specifiedType: const FullType(Direction))! as Direction; + result.direction = + serializers.deserialize( + value, + specifiedType: const FullType(Direction), + )! + as Direction; break; } } @@ -150,35 +194,49 @@ class _$CrosswordCharacterSerializer @override Iterable serialize( - Serializers serializers, CrosswordCharacter object, - {FullType specifiedType = FullType.unspecified}) { + Serializers serializers, + CrosswordCharacter object, { + FullType specifiedType = FullType.unspecified, + }) { final result = [ 'character', - serializers.serialize(object.character, - specifiedType: const FullType(String)), + serializers.serialize( + object.character, + specifiedType: const FullType(String), + ), ]; Object? value; value = object.acrossWord; if (value != null) { result ..add('acrossWord') - ..add(serializers.serialize(value, - specifiedType: const FullType(CrosswordWord))); + ..add( + serializers.serialize( + value, + specifiedType: const FullType(CrosswordWord), + ), + ); } value = object.downWord; if (value != null) { result ..add('downWord') - ..add(serializers.serialize(value, - specifiedType: const FullType(CrosswordWord))); + ..add( + serializers.serialize( + value, + specifiedType: const FullType(CrosswordWord), + ), + ); } return result; } @override CrosswordCharacter deserialize( - Serializers serializers, Iterable serialized, - {FullType specifiedType = FullType.unspecified}) { + Serializers serializers, + Iterable serialized, { + FullType specifiedType = FullType.unspecified, + }) { final result = new CrosswordCharacterBuilder(); final iterator = serialized.iterator; @@ -188,16 +246,30 @@ class _$CrosswordCharacterSerializer final Object? value = iterator.current; switch (key) { case 'character': - result.character = serializers.deserialize(value, - specifiedType: const FullType(String))! as String; + result.character = + serializers.deserialize( + value, + specifiedType: const FullType(String), + )! + as String; break; case 'acrossWord': - result.acrossWord.replace(serializers.deserialize(value, - specifiedType: const FullType(CrosswordWord))! as CrosswordWord); + result.acrossWord.replace( + serializers.deserialize( + value, + specifiedType: const FullType(CrosswordWord), + )! + as CrosswordWord, + ); break; case 'downWord': - result.downWord.replace(serializers.deserialize(value, - specifiedType: const FullType(CrosswordWord))! as CrosswordWord); + result.downWord.replace( + serializers.deserialize( + value, + specifiedType: const FullType(CrosswordWord), + )! + as CrosswordWord, + ); break; } } @@ -213,31 +285,42 @@ class _$CrosswordSerializer implements StructuredSerializer { final String wireName = 'Crossword'; @override - Iterable serialize(Serializers serializers, Crossword object, - {FullType specifiedType = FullType.unspecified}) { + Iterable serialize( + Serializers serializers, + Crossword object, { + FullType specifiedType = FullType.unspecified, + }) { final result = [ 'width', serializers.serialize(object.width, specifiedType: const FullType(int)), 'height', serializers.serialize(object.height, specifiedType: const FullType(int)), 'words', - serializers.serialize(object.words, - specifiedType: - const FullType(BuiltList, const [const FullType(CrosswordWord)])), + serializers.serialize( + object.words, + specifiedType: const FullType(BuiltList, const [ + const FullType(CrosswordWord), + ]), + ), 'characters', - serializers.serialize(object.characters, - specifiedType: const FullType(BuiltMap, const [ - const FullType(Location), - const FullType(CrosswordCharacter) - ])), + serializers.serialize( + object.characters, + specifiedType: const FullType(BuiltMap, const [ + const FullType(Location), + const FullType(CrosswordCharacter), + ]), + ), ]; return result; } @override - Crossword deserialize(Serializers serializers, Iterable serialized, - {FullType specifiedType = FullType.unspecified}) { + Crossword deserialize( + Serializers serializers, + Iterable serialized, { + FullType specifiedType = FullType.unspecified, + }) { final result = new CrosswordBuilder(); final iterator = serialized.iterator; @@ -247,25 +330,42 @@ class _$CrosswordSerializer implements StructuredSerializer { final Object? value = iterator.current; switch (key) { case 'width': - result.width = serializers.deserialize(value, - specifiedType: const FullType(int))! as int; + result.width = + serializers.deserialize( + value, + specifiedType: const FullType(int), + )! + as int; break; case 'height': - result.height = serializers.deserialize(value, - specifiedType: const FullType(int))! as int; + result.height = + serializers.deserialize( + value, + specifiedType: const FullType(int), + )! + as int; break; case 'words': - result.words.replace(serializers.deserialize(value, - specifiedType: const FullType( - BuiltList, const [const FullType(CrosswordWord)]))! - as BuiltList); + result.words.replace( + serializers.deserialize( + value, + specifiedType: const FullType(BuiltList, const [ + const FullType(CrosswordWord), + ]), + )! + as BuiltList, + ); break; case 'characters': - result.characters.replace(serializers.deserialize(value, + result.characters.replace( + serializers.deserialize( + value, specifiedType: const FullType(BuiltMap, const [ const FullType(Location), - const FullType(CrosswordCharacter) - ]))!); + const FullType(CrosswordCharacter), + ]), + )!, + ); break; } } @@ -281,32 +381,48 @@ class _$WorkQueueSerializer implements StructuredSerializer { final String wireName = 'WorkQueue'; @override - Iterable serialize(Serializers serializers, WorkQueue object, - {FullType specifiedType = FullType.unspecified}) { + Iterable serialize( + Serializers serializers, + WorkQueue object, { + FullType specifiedType = FullType.unspecified, + }) { final result = [ 'crossword', - serializers.serialize(object.crossword, - specifiedType: const FullType(Crossword)), + serializers.serialize( + object.crossword, + specifiedType: const FullType(Crossword), + ), 'locationsToTry', - serializers.serialize(object.locationsToTry, - specifiedType: const FullType(BuiltMap, - const [const FullType(Location), const FullType(Direction)])), + serializers.serialize( + object.locationsToTry, + specifiedType: const FullType(BuiltMap, const [ + const FullType(Location), + const FullType(Direction), + ]), + ), 'badLocations', - serializers.serialize(object.badLocations, - specifiedType: - const FullType(BuiltSet, const [const FullType(Location)])), + serializers.serialize( + object.badLocations, + specifiedType: const FullType(BuiltSet, const [ + const FullType(Location), + ]), + ), 'candidateWords', - serializers.serialize(object.candidateWords, - specifiedType: - const FullType(BuiltSet, const [const FullType(String)])), + serializers.serialize( + object.candidateWords, + specifiedType: const FullType(BuiltSet, const [const FullType(String)]), + ), ]; return result; } @override - WorkQueue deserialize(Serializers serializers, Iterable serialized, - {FullType specifiedType = FullType.unspecified}) { + WorkQueue deserialize( + Serializers serializers, + Iterable serialized, { + FullType specifiedType = FullType.unspecified, + }) { final result = new WorkQueueBuilder(); final iterator = serialized.iterator; @@ -316,27 +432,46 @@ class _$WorkQueueSerializer implements StructuredSerializer { final Object? value = iterator.current; switch (key) { case 'crossword': - result.crossword.replace(serializers.deserialize(value, - specifiedType: const FullType(Crossword))! as Crossword); + result.crossword.replace( + serializers.deserialize( + value, + specifiedType: const FullType(Crossword), + )! + as Crossword, + ); break; case 'locationsToTry': - result.locationsToTry.replace(serializers.deserialize(value, + result.locationsToTry.replace( + serializers.deserialize( + value, specifiedType: const FullType(BuiltMap, const [ const FullType(Location), - const FullType(Direction) - ]))!); + const FullType(Direction), + ]), + )!, + ); break; case 'badLocations': - result.badLocations.replace(serializers.deserialize(value, - specifiedType: const FullType( - BuiltSet, const [const FullType(Location)]))! - as BuiltSet); + result.badLocations.replace( + serializers.deserialize( + value, + specifiedType: const FullType(BuiltSet, const [ + const FullType(Location), + ]), + )! + as BuiltSet, + ); break; case 'candidateWords': - result.candidateWords.replace(serializers.deserialize(value, - specifiedType: - const FullType(BuiltSet, const [const FullType(String)]))! - as BuiltSet); + result.candidateWords.replace( + serializers.deserialize( + value, + specifiedType: const FullType(BuiltSet, const [ + const FullType(String), + ]), + )! + as BuiltSet, + ); break; } } @@ -352,32 +487,48 @@ class _$DisplayInfoSerializer implements StructuredSerializer { final String wireName = 'DisplayInfo'; @override - Iterable serialize(Serializers serializers, DisplayInfo object, - {FullType specifiedType = FullType.unspecified}) { + Iterable serialize( + Serializers serializers, + DisplayInfo object, { + FullType specifiedType = FullType.unspecified, + }) { final result = [ 'wordsInGridCount', - serializers.serialize(object.wordsInGridCount, - specifiedType: const FullType(String)), + serializers.serialize( + object.wordsInGridCount, + specifiedType: const FullType(String), + ), 'candidateWordsCount', - serializers.serialize(object.candidateWordsCount, - specifiedType: const FullType(String)), + serializers.serialize( + object.candidateWordsCount, + specifiedType: const FullType(String), + ), 'locationsToExploreCount', - serializers.serialize(object.locationsToExploreCount, - specifiedType: const FullType(String)), + serializers.serialize( + object.locationsToExploreCount, + specifiedType: const FullType(String), + ), 'knownBadLocationsCount', - serializers.serialize(object.knownBadLocationsCount, - specifiedType: const FullType(String)), + serializers.serialize( + object.knownBadLocationsCount, + specifiedType: const FullType(String), + ), 'gridFilledPercentage', - serializers.serialize(object.gridFilledPercentage, - specifiedType: const FullType(String)), + serializers.serialize( + object.gridFilledPercentage, + specifiedType: const FullType(String), + ), ]; return result; } @override - DisplayInfo deserialize(Serializers serializers, Iterable serialized, - {FullType specifiedType = FullType.unspecified}) { + DisplayInfo deserialize( + Serializers serializers, + Iterable serialized, { + FullType specifiedType = FullType.unspecified, + }) { final result = new DisplayInfoBuilder(); final iterator = serialized.iterator; @@ -387,24 +538,44 @@ class _$DisplayInfoSerializer implements StructuredSerializer { final Object? value = iterator.current; switch (key) { case 'wordsInGridCount': - result.wordsInGridCount = serializers.deserialize(value, - specifiedType: const FullType(String))! as String; + result.wordsInGridCount = + serializers.deserialize( + value, + specifiedType: const FullType(String), + )! + as String; break; case 'candidateWordsCount': - result.candidateWordsCount = serializers.deserialize(value, - specifiedType: const FullType(String))! as String; + result.candidateWordsCount = + serializers.deserialize( + value, + specifiedType: const FullType(String), + )! + as String; break; case 'locationsToExploreCount': - result.locationsToExploreCount = serializers.deserialize(value, - specifiedType: const FullType(String))! as String; + result.locationsToExploreCount = + serializers.deserialize( + value, + specifiedType: const FullType(String), + )! + as String; break; case 'knownBadLocationsCount': - result.knownBadLocationsCount = serializers.deserialize(value, - specifiedType: const FullType(String))! as String; + result.knownBadLocationsCount = + serializers.deserialize( + value, + specifiedType: const FullType(String), + )! + as String; break; case 'gridFilledPercentage': - result.gridFilledPercentage = serializers.deserialize(value, - specifiedType: const FullType(String))! as String; + result.gridFilledPercentage = + serializers.deserialize( + value, + specifiedType: const FullType(String), + )! + as String; break; } } @@ -496,10 +667,12 @@ class LocationBuilder implements Builder { Location build() => _build(); _$Location _build() { - final _$result = _$v ?? + final _$result = + _$v ?? new _$Location._( - x: BuiltValueNullFieldError.checkNotNull(x, r'Location', 'x'), - y: BuiltValueNullFieldError.checkNotNull(y, r'Location', 'y')); + x: BuiltValueNullFieldError.checkNotNull(x, r'Location', 'x'), + y: BuiltValueNullFieldError.checkNotNull(y, r'Location', 'y'), + ); replace(_$result); return _$result; } @@ -516,14 +689,22 @@ class _$CrosswordWord extends CrosswordWord { factory _$CrosswordWord([void Function(CrosswordWordBuilder)? updates]) => (new CrosswordWordBuilder()..update(updates))._build(); - _$CrosswordWord._( - {required this.word, required this.location, required this.direction}) - : super._() { + _$CrosswordWord._({ + required this.word, + required this.location, + required this.direction, + }) : super._() { BuiltValueNullFieldError.checkNotNull(word, r'CrosswordWord', 'word'); BuiltValueNullFieldError.checkNotNull( - location, r'CrosswordWord', 'location'); + location, + r'CrosswordWord', + 'location', + ); BuiltValueNullFieldError.checkNotNull( - direction, r'CrosswordWord', 'direction'); + direction, + r'CrosswordWord', + 'direction', + ); } @override @@ -608,13 +789,21 @@ class CrosswordWordBuilder _$CrosswordWord _build() { _$CrosswordWord _$result; try { - _$result = _$v ?? + _$result = + _$v ?? new _$CrosswordWord._( - word: BuiltValueNullFieldError.checkNotNull( - word, r'CrosswordWord', 'word'), - location: location.build(), - direction: BuiltValueNullFieldError.checkNotNull( - direction, r'CrosswordWord', 'direction')); + word: BuiltValueNullFieldError.checkNotNull( + word, + r'CrosswordWord', + 'word', + ), + location: location.build(), + direction: BuiltValueNullFieldError.checkNotNull( + direction, + r'CrosswordWord', + 'direction', + ), + ); } catch (_) { late String _$failedField; try { @@ -622,7 +811,10 @@ class CrosswordWordBuilder location.build(); } catch (e) { throw new BuiltValueNestedFieldError( - r'CrosswordWord', _$failedField, e.toString()); + r'CrosswordWord', + _$failedField, + e.toString(), + ); } rethrow; } @@ -639,21 +831,26 @@ class _$CrosswordCharacter extends CrosswordCharacter { @override final CrosswordWord? downWord; - factory _$CrosswordCharacter( - [void Function(CrosswordCharacterBuilder)? updates]) => - (new CrosswordCharacterBuilder()..update(updates))._build(); + factory _$CrosswordCharacter([ + void Function(CrosswordCharacterBuilder)? updates, + ]) => (new CrosswordCharacterBuilder()..update(updates))._build(); - _$CrosswordCharacter._( - {required this.character, this.acrossWord, this.downWord}) - : super._() { + _$CrosswordCharacter._({ + required this.character, + this.acrossWord, + this.downWord, + }) : super._() { BuiltValueNullFieldError.checkNotNull( - character, r'CrosswordCharacter', 'character'); + character, + r'CrosswordCharacter', + 'character', + ); } @override CrosswordCharacter rebuild( - void Function(CrosswordCharacterBuilder) updates) => - (toBuilder()..update(updates)).build(); + void Function(CrosswordCharacterBuilder) updates, + ) => (toBuilder()..update(updates)).build(); @override CrosswordCharacterBuilder toBuilder() => @@ -737,12 +934,17 @@ class CrosswordCharacterBuilder _$CrosswordCharacter _build() { _$CrosswordCharacter _$result; try { - _$result = _$v ?? + _$result = + _$v ?? new _$CrosswordCharacter._( - character: BuiltValueNullFieldError.checkNotNull( - character, r'CrosswordCharacter', 'character'), - acrossWord: _acrossWord?.build(), - downWord: _downWord?.build()); + character: BuiltValueNullFieldError.checkNotNull( + character, + r'CrosswordCharacter', + 'character', + ), + acrossWord: _acrossWord?.build(), + downWord: _downWord?.build(), + ); } catch (_) { late String _$failedField; try { @@ -752,7 +954,10 @@ class CrosswordCharacterBuilder _downWord?.build(); } catch (e) { throw new BuiltValueNestedFieldError( - r'CrosswordCharacter', _$failedField, e.toString()); + r'CrosswordCharacter', + _$failedField, + e.toString(), + ); } rethrow; } @@ -774,17 +979,20 @@ class _$Crossword extends Crossword { factory _$Crossword([void Function(CrosswordBuilder)? updates]) => (new CrosswordBuilder()..update(updates))._build(); - _$Crossword._( - {required this.width, - required this.height, - required this.words, - required this.characters}) - : super._() { + _$Crossword._({ + required this.width, + required this.height, + required this.words, + required this.characters, + }) : super._() { BuiltValueNullFieldError.checkNotNull(width, r'Crossword', 'width'); BuiltValueNullFieldError.checkNotNull(height, r'Crossword', 'height'); BuiltValueNullFieldError.checkNotNull(words, r'Crossword', 'words'); BuiltValueNullFieldError.checkNotNull( - characters, r'Crossword', 'characters'); + characters, + r'Crossword', + 'characters', + ); } @override @@ -880,14 +1088,22 @@ class CrosswordBuilder implements Builder { Crossword._fillCharacters(this); _$Crossword _$result; try { - _$result = _$v ?? + _$result = + _$v ?? new _$Crossword._( - width: BuiltValueNullFieldError.checkNotNull( - width, r'Crossword', 'width'), - height: BuiltValueNullFieldError.checkNotNull( - height, r'Crossword', 'height'), - words: words.build(), - characters: characters.build()); + width: BuiltValueNullFieldError.checkNotNull( + width, + r'Crossword', + 'width', + ), + height: BuiltValueNullFieldError.checkNotNull( + height, + r'Crossword', + 'height', + ), + words: words.build(), + characters: characters.build(), + ); } catch (_) { late String _$failedField; try { @@ -897,7 +1113,10 @@ class CrosswordBuilder implements Builder { characters.build(); } catch (e) { throw new BuiltValueNestedFieldError( - r'Crossword', _$failedField, e.toString()); + r'Crossword', + _$failedField, + e.toString(), + ); } rethrow; } @@ -919,19 +1138,28 @@ class _$WorkQueue extends WorkQueue { factory _$WorkQueue([void Function(WorkQueueBuilder)? updates]) => (new WorkQueueBuilder()..update(updates))._build(); - _$WorkQueue._( - {required this.crossword, - required this.locationsToTry, - required this.badLocations, - required this.candidateWords}) - : super._() { + _$WorkQueue._({ + required this.crossword, + required this.locationsToTry, + required this.badLocations, + required this.candidateWords, + }) : super._() { BuiltValueNullFieldError.checkNotNull(crossword, r'WorkQueue', 'crossword'); BuiltValueNullFieldError.checkNotNull( - locationsToTry, r'WorkQueue', 'locationsToTry'); + locationsToTry, + r'WorkQueue', + 'locationsToTry', + ); BuiltValueNullFieldError.checkNotNull( - badLocations, r'WorkQueue', 'badLocations'); + badLocations, + r'WorkQueue', + 'badLocations', + ); BuiltValueNullFieldError.checkNotNull( - candidateWords, r'WorkQueue', 'candidateWords'); + candidateWords, + r'WorkQueue', + 'candidateWords', + ); } @override @@ -1030,12 +1258,14 @@ class WorkQueueBuilder implements Builder { _$WorkQueue _build() { _$WorkQueue _$result; try { - _$result = _$v ?? + _$result = + _$v ?? new _$WorkQueue._( - crossword: crossword.build(), - locationsToTry: locationsToTry.build(), - badLocations: badLocations.build(), - candidateWords: candidateWords.build()); + crossword: crossword.build(), + locationsToTry: locationsToTry.build(), + badLocations: badLocations.build(), + candidateWords: candidateWords.build(), + ); } catch (_) { late String _$failedField; try { @@ -1049,7 +1279,10 @@ class WorkQueueBuilder implements Builder { candidateWords.build(); } catch (e) { throw new BuiltValueNestedFieldError( - r'WorkQueue', _$failedField, e.toString()); + r'WorkQueue', + _$failedField, + e.toString(), + ); } rethrow; } @@ -1073,23 +1306,38 @@ class _$DisplayInfo extends DisplayInfo { factory _$DisplayInfo([void Function(DisplayInfoBuilder)? updates]) => (new DisplayInfoBuilder()..update(updates))._build(); - _$DisplayInfo._( - {required this.wordsInGridCount, - required this.candidateWordsCount, - required this.locationsToExploreCount, - required this.knownBadLocationsCount, - required this.gridFilledPercentage}) - : super._() { + _$DisplayInfo._({ + required this.wordsInGridCount, + required this.candidateWordsCount, + required this.locationsToExploreCount, + required this.knownBadLocationsCount, + required this.gridFilledPercentage, + }) : super._() { BuiltValueNullFieldError.checkNotNull( - wordsInGridCount, r'DisplayInfo', 'wordsInGridCount'); + wordsInGridCount, + r'DisplayInfo', + 'wordsInGridCount', + ); BuiltValueNullFieldError.checkNotNull( - candidateWordsCount, r'DisplayInfo', 'candidateWordsCount'); + candidateWordsCount, + r'DisplayInfo', + 'candidateWordsCount', + ); BuiltValueNullFieldError.checkNotNull( - locationsToExploreCount, r'DisplayInfo', 'locationsToExploreCount'); + locationsToExploreCount, + r'DisplayInfo', + 'locationsToExploreCount', + ); BuiltValueNullFieldError.checkNotNull( - knownBadLocationsCount, r'DisplayInfo', 'knownBadLocationsCount'); + knownBadLocationsCount, + r'DisplayInfo', + 'knownBadLocationsCount', + ); BuiltValueNullFieldError.checkNotNull( - gridFilledPercentage, r'DisplayInfo', 'gridFilledPercentage'); + gridFilledPercentage, + r'DisplayInfo', + 'gridFilledPercentage', + ); } @override @@ -1192,22 +1440,35 @@ class DisplayInfoBuilder implements Builder { DisplayInfo build() => _build(); _$DisplayInfo _build() { - final _$result = _$v ?? + final _$result = + _$v ?? new _$DisplayInfo._( - wordsInGridCount: BuiltValueNullFieldError.checkNotNull( - wordsInGridCount, r'DisplayInfo', 'wordsInGridCount'), - candidateWordsCount: BuiltValueNullFieldError.checkNotNull( - candidateWordsCount, r'DisplayInfo', 'candidateWordsCount'), - locationsToExploreCount: BuiltValueNullFieldError.checkNotNull( - locationsToExploreCount, - r'DisplayInfo', - 'locationsToExploreCount'), - knownBadLocationsCount: BuiltValueNullFieldError.checkNotNull( - knownBadLocationsCount, - r'DisplayInfo', - 'knownBadLocationsCount'), - gridFilledPercentage: BuiltValueNullFieldError.checkNotNull( - gridFilledPercentage, r'DisplayInfo', 'gridFilledPercentage')); + wordsInGridCount: BuiltValueNullFieldError.checkNotNull( + wordsInGridCount, + r'DisplayInfo', + 'wordsInGridCount', + ), + candidateWordsCount: BuiltValueNullFieldError.checkNotNull( + candidateWordsCount, + r'DisplayInfo', + 'candidateWordsCount', + ), + locationsToExploreCount: BuiltValueNullFieldError.checkNotNull( + locationsToExploreCount, + r'DisplayInfo', + 'locationsToExploreCount', + ), + knownBadLocationsCount: BuiltValueNullFieldError.checkNotNull( + knownBadLocationsCount, + r'DisplayInfo', + 'knownBadLocationsCount', + ), + gridFilledPercentage: BuiltValueNullFieldError.checkNotNull( + gridFilledPercentage, + r'DisplayInfo', + 'gridFilledPercentage', + ), + ); replace(_$result); return _$result; } diff --git a/generate_crossword/step_08/lib/providers.dart b/generate_crossword/step_08/lib/providers.dart index 658211c69d..01748b11d9 100644 --- a/generate_crossword/step_08/lib/providers.dart +++ b/generate_crossword/step_08/lib/providers.dart @@ -26,10 +26,16 @@ Future> wordList(Ref ref) async { final re = RegExp(r'^[a-z]+$'); final words = await rootBundle.loadString('assets/words.txt'); - return const LineSplitter().convert(words).toBuiltSet().rebuild((b) => b - ..map((word) => word.toLowerCase().trim()) - ..where((word) => word.length > 2) - ..where((word) => re.hasMatch(word))); + return const LineSplitter() + .convert(words) + .toBuiltSet() + .rebuild( + (b) => + b + ..map((word) => word.toLowerCase().trim()) + ..where((word) => word.length > 2) + ..where((word) => re.hasMatch(word)), + ); } /// An enumeration for different sizes of [model.Crossword]s. @@ -40,10 +46,7 @@ enum CrosswordSize { xlarge(width: 160, height: 88), xxlarge(width: 500, height: 500); - const CrosswordSize({ - required this.width, - required this.height, - }); + const CrosswordSize({required this.width, required this.height}); final int width; final int height; @@ -69,8 +72,10 @@ Stream workQueue(Ref ref) async* { final workers = ref.watch(workerCountProvider); final size = ref.watch(sizeProvider); final wordListAsync = ref.watch(wordListProvider); - final emptyCrossword = - model.Crossword.crossword(width: size.width, height: size.height); + final emptyCrossword = model.Crossword.crossword( + width: size.width, + height: size.height, + ); final emptyWorkQueue = model.WorkQueue.from( crossword: emptyCrossword, candidateWords: BuiltSet(), @@ -81,11 +86,12 @@ Stream workQueue(Ref ref) async* { ref.read(endTimeProvider.notifier).clear(); yield* wordListAsync.when( - data: (wordList) => exploreCrosswordSolutions( - crossword: emptyCrossword, - wordList: wordList, - maxWorkerCount: workers.count, - ), + data: + (wordList) => exploreCrosswordSolutions( + crossword: emptyCrossword, + wordList: wordList, + maxWorkerCount: workers.count, + ), error: (error, stackTrace) async* { debugPrint('Error loading word list: $error'); yield emptyWorkQueue; @@ -145,10 +151,11 @@ Duration expectedRemainingTime(Ref ref) { try { final soFar = DateTime.now().difference(startTime); final completedPercentage = min( - 0.99, - (workQueue.crossword.characters.length / - (workQueue.crossword.width * workQueue.crossword.height) / - _estimatedTotalCoverage)); + 0.99, + (workQueue.crossword.characters.length / + (workQueue.crossword.width * workQueue.crossword.height) / + _estimatedTotalCoverage), + ); final expectedTotal = soFar.inSeconds / completedPercentage; final expectedRemaining = expectedTotal - soFar.inSeconds; return Duration(seconds: expectedRemaining.toInt()); @@ -179,7 +186,9 @@ class ShowDisplayInfo extends _$ShowDisplayInfo { @riverpod class DisplayInfo extends _$DisplayInfo { @override - model.DisplayInfo build() => ref.watch(workQueueProvider).when( + model.DisplayInfo build() => ref + .watch(workQueueProvider) + .when( data: (workQueue) => model.DisplayInfo.from(workQueue: workQueue), error: (error, stackTrace) => model.DisplayInfo.empty, loading: () => model.DisplayInfo.empty, diff --git a/generate_crossword/step_08/lib/providers.g.dart b/generate_crossword/step_08/lib/providers.g.dart index c5660762c1..e29c2fd6fa 100644 --- a/generate_crossword/step_08/lib/providers.g.dart +++ b/generate_crossword/step_08/lib/providers.g.dart @@ -48,9 +48,10 @@ String _$expectedRemainingTimeHash() => final expectedRemainingTimeProvider = AutoDisposeProvider.internal( expectedRemainingTime, name: r'expectedRemainingTimeProvider', - debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') - ? null - : _$expectedRemainingTimeHash, + debugGetCreateSourceHash: + const bool.fromEnvironment('dart.vm.product') + ? null + : _$expectedRemainingTimeHash, dependencies: null, allTransitiveDependencies: null, ); @@ -110,14 +111,15 @@ String _$showDisplayInfoHash() => r'75a0679db4cc1a0d5cfa7aa33afc633faf08fc24'; @ProviderFor(ShowDisplayInfo) final showDisplayInfoProvider = NotifierProvider.internal( - ShowDisplayInfo.new, - name: r'showDisplayInfoProvider', - debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') - ? null - : _$showDisplayInfoHash, - dependencies: null, - allTransitiveDependencies: null, -); + ShowDisplayInfo.new, + name: r'showDisplayInfoProvider', + debugGetCreateSourceHash: + const bool.fromEnvironment('dart.vm.product') + ? null + : _$showDisplayInfoHash, + dependencies: null, + allTransitiveDependencies: null, + ); typedef _$ShowDisplayInfo = Notifier; String _$displayInfoHash() => r'6516f6bf346baa6914fdfffad1ccee8a5345a137'; @@ -128,13 +130,15 @@ String _$displayInfoHash() => r'6516f6bf346baa6914fdfffad1ccee8a5345a137'; @ProviderFor(DisplayInfo) final displayInfoProvider = AutoDisposeNotifierProvider.internal( - DisplayInfo.new, - name: r'displayInfoProvider', - debugGetCreateSourceHash: - const bool.fromEnvironment('dart.vm.product') ? null : _$displayInfoHash, - dependencies: null, - allTransitiveDependencies: null, -); + DisplayInfo.new, + name: r'displayInfoProvider', + debugGetCreateSourceHash: + const bool.fromEnvironment('dart.vm.product') + ? null + : _$displayInfoHash, + dependencies: null, + allTransitiveDependencies: null, + ); typedef _$DisplayInfo = AutoDisposeNotifier; String _$workerCountHash() => r'36dad09ba2cfe03b0879e7bf20059cec12e5118c'; @@ -145,13 +149,15 @@ String _$workerCountHash() => r'36dad09ba2cfe03b0879e7bf20059cec12e5118c'; @ProviderFor(WorkerCount) final workerCountProvider = NotifierProvider.internal( - WorkerCount.new, - name: r'workerCountProvider', - debugGetCreateSourceHash: - const bool.fromEnvironment('dart.vm.product') ? null : _$workerCountHash, - dependencies: null, - allTransitiveDependencies: null, -); + WorkerCount.new, + name: r'workerCountProvider', + debugGetCreateSourceHash: + const bool.fromEnvironment('dart.vm.product') + ? null + : _$workerCountHash, + dependencies: null, + allTransitiveDependencies: null, + ); typedef _$WorkerCount = Notifier; // ignore_for_file: type=lint diff --git a/generate_crossword/step_08/lib/widgets/crossword_generator_app.dart b/generate_crossword/step_08/lib/widgets/crossword_generator_app.dart index 58113f5b93..72f96bcee2 100644 --- a/generate_crossword/step_08/lib/widgets/crossword_generator_app.dart +++ b/generate_crossword/step_08/lib/widgets/crossword_generator_app.dart @@ -30,9 +30,7 @@ class CrosswordGeneratorApp extends StatelessWidget { builder: (context, ref, child) { return Stack( children: [ - Positioned.fill( - child: CrosswordWidget(), - ), + Positioned.fill(child: CrosswordWidget()), if (ref.watch(showDisplayInfoProvider)) CrosswordInfoWidget(), ], ); @@ -58,36 +56,39 @@ class _EagerInitialization extends ConsumerWidget { class _CrosswordGeneratorMenu extends ConsumerWidget { @override Widget build(BuildContext context, WidgetRef ref) => MenuAnchor( - menuChildren: [ - for (final entry in CrosswordSize.values) - MenuItemButton( - onPressed: () => ref.read(sizeProvider.notifier).setSize(entry), - leadingIcon: entry == ref.watch(sizeProvider) + menuChildren: [ + for (final entry in CrosswordSize.values) + MenuItemButton( + onPressed: () => ref.read(sizeProvider.notifier).setSize(entry), + leadingIcon: + entry == ref.watch(sizeProvider) ? Icon(Icons.radio_button_checked_outlined) : Icon(Icons.radio_button_unchecked_outlined), - child: Text(entry.label), - ), - MenuItemButton( - leadingIcon: ref.watch(showDisplayInfoProvider) + child: Text(entry.label), + ), + MenuItemButton( + leadingIcon: + ref.watch(showDisplayInfoProvider) ? Icon(Icons.check_box_outlined) : Icon(Icons.check_box_outline_blank_outlined), - onPressed: () => - ref.read(showDisplayInfoProvider.notifier).toggle(), - child: Text('Display Info'), - ), - for (final count in BackgroundWorkers.values) - MenuItemButton( - leadingIcon: count == ref.watch(workerCountProvider) + onPressed: () => ref.read(showDisplayInfoProvider.notifier).toggle(), + child: Text('Display Info'), + ), + for (final count in BackgroundWorkers.values) + MenuItemButton( + leadingIcon: + count == ref.watch(workerCountProvider) ? Icon(Icons.radio_button_checked_outlined) : Icon(Icons.radio_button_unchecked_outlined), - onPressed: () => - ref.read(workerCountProvider.notifier).setCount(count), - child: Text(count.label), - ), - ], - builder: (context, controller, child) => IconButton( + onPressed: + () => ref.read(workerCountProvider.notifier).setCount(count), + child: Text(count.label), + ), + ], + builder: + (context, controller, child) => IconButton( onPressed: () => controller.open(), icon: Icon(Icons.settings), ), - ); + ); } diff --git a/generate_crossword/step_08/lib/widgets/crossword_info_widget.dart b/generate_crossword/step_08/lib/widgets/crossword_info_widget.dart index 31c0affe1a..ebdc2ef73b 100644 --- a/generate_crossword/step_08/lib/widgets/crossword_info_widget.dart +++ b/generate_crossword/step_08/lib/widgets/crossword_info_widget.dart @@ -10,9 +10,7 @@ import '../utils.dart'; import 'ticker_builder.dart'; class CrosswordInfoWidget extends ConsumerWidget { - const CrosswordInfoWidget({ - super.key, - }); + const CrosswordInfoWidget({super.key}); @override Widget build(BuildContext context, WidgetRef ref) { @@ -26,64 +24,72 @@ class CrosswordInfoWidget extends ConsumerWidget { return Align( alignment: Alignment.bottomRight, child: Padding( - padding: const EdgeInsets.only( - right: 32.0, - bottom: 32.0, - ), + padding: const EdgeInsets.only(right: 32.0, bottom: 32.0), child: ClipRRect( borderRadius: BorderRadius.circular(8), child: ColoredBox( color: Theme.of(context).colorScheme.onPrimary.withAlpha(230), child: Padding( - padding: const EdgeInsets.symmetric( - horizontal: 12, - vertical: 8, - ), + padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 8), child: DefaultTextStyle( style: TextStyle( - fontSize: 16, color: Theme.of(context).colorScheme.primary), + fontSize: 16, + color: Theme.of(context).colorScheme.primary, + ), child: Column( mainAxisSize: MainAxisSize.min, crossAxisAlignment: CrossAxisAlignment.start, children: [ _CrosswordInfoRichText( - label: 'Grid Size', - value: '${size.width} x ${size.height}'), + label: 'Grid Size', + value: '${size.width} x ${size.height}', + ), _CrosswordInfoRichText( - label: 'Words in grid', - value: displayInfo.wordsInGridCount), + label: 'Words in grid', + value: displayInfo.wordsInGridCount, + ), _CrosswordInfoRichText( - label: 'Candidate words', - value: displayInfo.candidateWordsCount), + label: 'Candidate words', + value: displayInfo.candidateWordsCount, + ), _CrosswordInfoRichText( - label: 'Locations to explore', - value: displayInfo.locationsToExploreCount), + label: 'Locations to explore', + value: displayInfo.locationsToExploreCount, + ), _CrosswordInfoRichText( - label: 'Known bad locations', - value: displayInfo.knownBadLocationsCount), + label: 'Known bad locations', + value: displayInfo.knownBadLocationsCount, + ), _CrosswordInfoRichText( - label: 'Grid filled', - value: displayInfo.gridFilledPercentage), + label: 'Grid filled', + value: displayInfo.gridFilledPercentage, + ), _CrosswordInfoRichText( - label: 'Max worker count', value: workerCount), + label: 'Max worker count', + value: workerCount, + ), switch ((startTime, endTime)) { (null, _) => _CrosswordInfoRichText( - label: 'Time elapsed', - value: 'Not started yet', - ), + label: 'Time elapsed', + value: 'Not started yet', + ), (DateTime start, null) => TickerBuilder( - builder: (context) => _CrosswordInfoRichText( - label: 'Time elapsed', - value: DateTime.now().difference(start).formatted, - ), - ), + builder: + (context) => _CrosswordInfoRichText( + label: 'Time elapsed', + value: DateTime.now().difference(start).formatted, + ), + ), (DateTime start, DateTime end) => _CrosswordInfoRichText( - label: 'Completed in', - value: end.difference(start).formatted), + label: 'Completed in', + value: end.difference(start).formatted, + ), }, if (startTime != null && endTime == null) _CrosswordInfoRichText( - label: 'Est. remaining', value: remaining.formatted), + label: 'Est. remaining', + value: remaining.formatted, + ), ], ), ), @@ -103,19 +109,16 @@ class _CrosswordInfoRichText extends StatelessWidget { @override Widget build(BuildContext context) => RichText( - text: TextSpan( - children: [ - TextSpan( - text: '$label ', - style: DefaultTextStyle.of(context).style, - ), - TextSpan( - text: value, - style: DefaultTextStyle.of(context) - .style - .copyWith(fontWeight: FontWeight.bold), - ), - ], + text: TextSpan( + children: [ + TextSpan(text: '$label ', style: DefaultTextStyle.of(context).style), + TextSpan( + text: value, + style: DefaultTextStyle.of( + context, + ).style.copyWith(fontWeight: FontWeight.bold), ), - ); + ], + ), + ); } diff --git a/generate_crossword/step_08/lib/widgets/crossword_widget.dart b/generate_crossword/step_08/lib/widgets/crossword_widget.dart index 23b2678ff5..955436b7da 100644 --- a/generate_crossword/step_08/lib/widgets/crossword_widget.dart +++ b/generate_crossword/step_08/lib/widgets/crossword_widget.dart @@ -44,8 +44,9 @@ class CrosswordWidget extends ConsumerWidget { final explorationCell = ref.watch( workQueueProvider.select( (workQueueAsync) => workQueueAsync.when( - data: (workQueue) => - workQueue.locationsToTry.keys.contains(location), + data: + (workQueue) => + workQueue.locationsToTry.keys.contains(location), error: (error, stackTrace) => false, loading: () => false, ), @@ -56,18 +57,20 @@ class CrosswordWidget extends ConsumerWidget { return AnimatedContainer( duration: Durations.extralong1, curve: Curves.easeInOut, - color: explorationCell - ? Theme.of(context).colorScheme.primary - : Theme.of(context).colorScheme.onPrimary, + color: + explorationCell + ? Theme.of(context).colorScheme.primary + : Theme.of(context).colorScheme.onPrimary, child: Center( child: AnimatedDefaultTextStyle( duration: Durations.extralong1, curve: Curves.easeInOut, style: TextStyle( fontSize: 24, - color: explorationCell - ? Theme.of(context).colorScheme.onPrimary - : Theme.of(context).colorScheme.primary, + color: + explorationCell + ? Theme.of(context).colorScheme.onPrimary + : Theme.of(context).colorScheme.primary, ), child: Text(character.character), ), @@ -89,9 +92,11 @@ class CrosswordWidget extends ConsumerWidget { foregroundDecoration: TableSpanDecoration( border: TableSpanBorder( leading: BorderSide( - color: Theme.of(context).colorScheme.onPrimaryContainer), + color: Theme.of(context).colorScheme.onPrimaryContainer, + ), trailing: BorderSide( - color: Theme.of(context).colorScheme.onPrimaryContainer), + color: Theme.of(context).colorScheme.onPrimaryContainer, + ), ), ), ); diff --git a/generate_crossword/step_08/pubspec.yaml b/generate_crossword/step_08/pubspec.yaml index cb8178f942..23da5fd396 100644 --- a/generate_crossword/step_08/pubspec.yaml +++ b/generate_crossword/step_08/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: 'none' version: 0.1.0 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 dependencies: flutter: diff --git a/generate_crossword/step_08/test/model_test.dart b/generate_crossword/step_08/test/model_test.dart index f11e1addb1..342c515ec1 100644 --- a/generate_crossword/step_08/test/model_test.dart +++ b/generate_crossword/step_08/test/model_test.dart @@ -39,28 +39,27 @@ void main() { expect(crossword.words.isNotEmpty, true); expect(crossword.words.length, 2); expect( - crossword.words - .rebuild( - (b) => b.where((b) => b.direction == Direction.across), - ) - .length, - 1); + crossword.words + .rebuild((b) => b.where((b) => b.direction == Direction.across)) + .length, + 1, + ); expect( - crossword.words - .rebuild( - (b) => b.where((b) => b.direction == Direction.down), - ) - .length, - 1); + crossword.words + .rebuild((b) => b.where((b) => b.direction == Direction.down)) + .length, + 1, + ); expect(crossword.characters.isNotEmpty, isTrue); expect(crossword.characters.length, 7); expect( - crossword.characters[topLeft], - CrosswordCharacter.character( - acrossWord: thisWord, - downWord: thatWord, - character: 't', - )); + crossword.characters[topLeft], + CrosswordCharacter.character( + acrossWord: thisWord, + downWord: thatWord, + character: 't', + ), + ); expect(crossword.valid, isTrue); }); @@ -86,19 +85,17 @@ void main() { expect(crossword.words.isNotEmpty, true); expect( - crossword.words - .rebuild( - (b) => b.where((b) => b.direction == Direction.across), - ) - .length, - 2); + crossword.words + .rebuild((b) => b.where((b) => b.direction == Direction.across)) + .length, + 2, + ); expect( - crossword.words - .rebuild( - (b) => b.where((b) => b.direction == Direction.down), - ) - .isEmpty, - true); + crossword.words + .rebuild((b) => b.where((b) => b.direction == Direction.down)) + .isEmpty, + true, + ); expect(crossword.characters.isNotEmpty, isTrue); expect(crossword.characters.length, 8); expect(crossword.valid, isFalse); @@ -108,11 +105,12 @@ void main() { Crossword crossword = Crossword.crossword(width: 50, height: 50); expect(crossword.valid, true); - crossword = crossword.addWord( - direction: Direction.across, - location: Location.at(0, 0), - word: 'this', - )!; + crossword = + crossword.addWord( + direction: Direction.across, + location: Location.at(0, 0), + word: 'this', + )!; expect(crossword.valid, true); final crossword2 = crossword.addWord( @@ -174,17 +172,18 @@ void main() { final topLeft = Location.at(0, 0); - crossword = crossword - .addWord( - location: topLeft, - word: 'this', - direction: Direction.down, - )! - .addWord( - location: topLeft, - word: 'total', - direction: Direction.across, - )!; + crossword = + crossword + .addWord( + location: topLeft, + word: 'this', + direction: Direction.down, + )! + .addWord( + location: topLeft, + word: 'total', + direction: Direction.across, + )!; expect(crossword.valid, isTrue); @@ -235,77 +234,85 @@ void main() { }); test('Crossword is not valid with run-on across words', () { - Crossword crossword = - Crossword.crossword(width: 50, height: 50).rebuild((b) => b - ..words.addAll([ - CrosswordWord.word( - direction: Direction.across, - location: Location.at(0, 0), - word: 'word', - ), - CrosswordWord.word( - direction: Direction.across, - location: Location.at(4, 0), - word: 'another', - ), - ])); + Crossword crossword = Crossword.crossword(width: 50, height: 50).rebuild( + (b) => + b + ..words.addAll([ + CrosswordWord.word( + direction: Direction.across, + location: Location.at(0, 0), + word: 'word', + ), + CrosswordWord.word( + direction: Direction.across, + location: Location.at(4, 0), + word: 'another', + ), + ]), + ); expect(crossword.valid, false); }); test('Crossword is not valid with run-on down words', () { - Crossword crossword = - Crossword.crossword(width: 50, height: 50).rebuild((b) => b - ..words.addAll([ - CrosswordWord.word( - direction: Direction.down, - location: Location.at(0, 0), - word: 'word', - ), - CrosswordWord.word( - direction: Direction.down, - location: Location.at(0, 4), - word: 'another', - ), - ])); + Crossword crossword = Crossword.crossword(width: 50, height: 50).rebuild( + (b) => + b + ..words.addAll([ + CrosswordWord.word( + direction: Direction.down, + location: Location.at(0, 0), + word: 'word', + ), + CrosswordWord.word( + direction: Direction.down, + location: Location.at(0, 4), + word: 'another', + ), + ]), + ); expect(crossword.valid, false); }); test('Crossword is not valid with run-on across/down words', () { - Crossword crossword = - Crossword.crossword(width: 50, height: 50).rebuild((b) => b - ..words.addAll([ - CrosswordWord.word( - direction: Direction.across, - location: Location.at(0, 0), - word: 'word', - ), - CrosswordWord.word( - direction: Direction.down, - location: Location.at(4, 0), - word: 'another', - ), - ])); + Crossword crossword = Crossword.crossword(width: 50, height: 50).rebuild( + (b) => + b + ..words.addAll([ + CrosswordWord.word( + direction: Direction.across, + location: Location.at(0, 0), + word: 'word', + ), + CrosswordWord.word( + direction: Direction.down, + location: Location.at(4, 0), + word: 'another', + ), + ]), + ); expect(crossword.valid, false); }); test('Crossword is not valid with run-on down/across words', () { - Crossword? crossword = - Crossword.crossword(width: 50, height: 50).rebuild((b) => b - ..words.addAll([ - CrosswordWord.word( - direction: Direction.down, - location: Location.at(0, 0), - word: 'word', - ), - CrosswordWord.word( - direction: Direction.across, - location: Location.at(0, 4), - word: 'another', - ), - ])); + Crossword? crossword = Crossword.crossword(width: 50, height: 50).rebuild( + (b) => + b + ..words.addAll([ + CrosswordWord.word( + direction: Direction.down, + location: Location.at(0, 0), + word: 'word', + ), + CrosswordWord.word( + direction: Direction.across, + location: Location.at(0, 4), + word: 'another', + ), + ]), + ); expect(crossword.valid, false); }); @@ -313,36 +320,40 @@ void main() { test('Adding duplicate across words returns null', () { Crossword? crossword = Crossword.crossword(width: 50, height: 50); - crossword = crossword.addWord( - direction: Direction.across, - location: Location.at(0, 0), - word: 'duplicated', - )!; - - expect( + crossword = crossword.addWord( direction: Direction.across, - location: Location.at(4, 4), + location: Location.at(0, 0), word: 'duplicated', - ), - isNull); + )!; + + expect( + crossword.addWord( + direction: Direction.across, + location: Location.at(4, 4), + word: 'duplicated', + ), + isNull, + ); }); test('Crossword is not valid with duplicate across words', () { - Crossword? crossword = - Crossword.crossword(width: 50, height: 50).rebuild((b) => b - ..words.addAll([ - CrosswordWord.word( - direction: Direction.across, - location: Location.at(0, 0), - word: 'duplicated', - ), - CrosswordWord.word( - direction: Direction.across, - location: Location.at(4, 4), - word: 'duplicated', - ), - ])); + Crossword? crossword = Crossword.crossword(width: 50, height: 50).rebuild( + (b) => + b + ..words.addAll([ + CrosswordWord.word( + direction: Direction.across, + location: Location.at(0, 0), + word: 'duplicated', + ), + CrosswordWord.word( + direction: Direction.across, + location: Location.at(4, 4), + word: 'duplicated', + ), + ]), + ); expect(crossword.valid, false); }); @@ -350,36 +361,40 @@ void main() { test('Adding duplicate down words returns null', () { Crossword? crossword = Crossword.crossword(width: 50, height: 50); - crossword = crossword.addWord( - direction: Direction.down, - location: Location.at(0, 0), - word: 'duplicated', - )!; - - expect( + crossword = crossword.addWord( direction: Direction.down, - location: Location.at(4, 4), + location: Location.at(0, 0), word: 'duplicated', - ), - isNull); + )!; + + expect( + crossword.addWord( + direction: Direction.down, + location: Location.at(4, 4), + word: 'duplicated', + ), + isNull, + ); }); test('Crossword is not valid with duplicate down words', () { - Crossword? crossword = - Crossword.crossword(width: 50, height: 50).rebuild((b) => b - ..words.addAll([ - CrosswordWord.word( - direction: Direction.down, - location: Location.at(0, 0), - word: 'duplicated', - ), - CrosswordWord.word( - direction: Direction.down, - location: Location.at(4, 4), - word: 'duplicated', - ), - ])); + Crossword? crossword = Crossword.crossword(width: 50, height: 50).rebuild( + (b) => + b + ..words.addAll([ + CrosswordWord.word( + direction: Direction.down, + location: Location.at(0, 0), + word: 'duplicated', + ), + CrosswordWord.word( + direction: Direction.down, + location: Location.at(4, 4), + word: 'duplicated', + ), + ]), + ); expect(crossword.valid, false); }); @@ -393,10 +408,12 @@ void main() { ); expect(queue.locationsToTry.length, 1); - crossword = crossword.addWord( - direction: Direction.across, - location: Location.at(0, 0), - word: 'word')!; + crossword = + crossword.addWord( + direction: Direction.across, + location: Location.at(0, 0), + word: 'word', + )!; queue = WorkQueue.from( crossword: crossword, candidateWords: ['words', 'and', 'moar', 'wordz'], @@ -404,21 +421,26 @@ void main() { ); expect(queue.locationsToTry.length, 4); expect( - queue.locationsToTry.entries - .every((element) => element.value == Direction.down), - isTrue); + queue.locationsToTry.entries.every( + (element) => element.value == Direction.down, + ), + isTrue, + ); final entries = queue.locationsToTry.entries; expect(entries.every((element) => element.key.y == 0), isTrue); - expect(entries.map((element) => element.key.x).toBuiltSet(), - equals(BuiltSet([0, 1, 2, 3]))); + expect( + entries.map((element) => element.key.x).toBuiltSet(), + equals(BuiltSet([0, 1, 2, 3])), + ); }); test('WorkQueue from down word', () { - Crossword crossword = Crossword.crossword(width: 50, height: 50).addWord( - direction: Direction.down, - location: Location.at(0, 0), - word: 'word', - )!; + Crossword crossword = + Crossword.crossword(width: 50, height: 50).addWord( + direction: Direction.down, + location: Location.at(0, 0), + word: 'word', + )!; WorkQueue queue = WorkQueue.from( crossword: crossword, @@ -427,27 +449,32 @@ void main() { ); expect(queue.locationsToTry.length, 4); expect( - queue.locationsToTry.entries - .every((element) => element.value == Direction.across), - isTrue); + queue.locationsToTry.entries.every( + (element) => element.value == Direction.across, + ), + isTrue, + ); final entries = queue.locationsToTry.entries; expect(entries.every((element) => element.key.x == 0), isTrue); - expect(entries.map((element) => element.key.y).toBuiltSet(), - equals(BuiltSet([0, 1, 2, 3]))); + expect( + entries.map((element) => element.key.y).toBuiltSet(), + equals(BuiltSet([0, 1, 2, 3])), + ); }); test('WorkQueue from two words', () { - Crossword crossword = Crossword.crossword(width: 50, height: 50) - .addWord( - direction: Direction.across, - location: Location.at(0, 0), - word: 'word', - )! - .addWord( - direction: Direction.down, - location: Location.at(0, 0), - word: 'work', - )!; + Crossword crossword = + Crossword.crossword(width: 50, height: 50) + .addWord( + direction: Direction.across, + location: Location.at(0, 0), + word: 'word', + )! + .addWord( + direction: Direction.down, + location: Location.at(0, 0), + word: 'work', + )!; WorkQueue queue = WorkQueue.from( crossword: crossword, @@ -455,27 +482,31 @@ void main() { startLocation: Location.at(0, 0), ); expect( - queue.locationsToTry, - equals(BuiltMap({ + queue.locationsToTry, + equals( + BuiltMap({ Location.at(2, 0): Direction.down, Location.at(0, 2): Direction.across, Location.at(3, 0): Direction.down, Location.at(0, 3): Direction.across, - }))); + }), + ), + ); }); test('WorkQueue removes used words from candidate list', () { - Crossword crossword = Crossword.crossword(width: 50, height: 50) - .addWord( - direction: Direction.across, - location: Location.at(0, 0), - word: 'word', - )! - .addWord( - direction: Direction.down, - location: Location.at(0, 0), - word: 'work', - )!; + Crossword crossword = + Crossword.crossword(width: 50, height: 50) + .addWord( + direction: Direction.across, + location: Location.at(0, 0), + word: 'word', + )! + .addWord( + direction: Direction.down, + location: Location.at(0, 0), + word: 'work', + )!; WorkQueue queue = WorkQueue.from( crossword: crossword, diff --git a/generate_crossword/step_09/lib/isolates.dart b/generate_crossword/step_09/lib/isolates.dart index bc16c4f074..91f8015800 100644 --- a/generate_crossword/step_09/lib/isolates.dart +++ b/generate_crossword/step_09/lib/isolates.dart @@ -29,24 +29,35 @@ Stream exploreCrosswordSolutions({ } } - debugPrint('Generated ${workQueue.crossword.width} x ' - '${workQueue.crossword.height} crossword in ' - '${DateTime.now().difference(start).formatted} ' - 'with $maxWorkerCount workers.'); + debugPrint( + 'Generated ${workQueue.crossword.width} x ' + '${workQueue.crossword.height} crossword in ' + '${DateTime.now().difference(start).formatted} ' + 'with $maxWorkerCount workers.', + ); } Future _generate((WorkQueue, int) workMessage) async { var (workQueue, maxWorkerCount) = workMessage; final candidateGeneratorFutures = >[]; - final locations = workQueue.locationsToTry.keys.toBuiltList().rebuild((b) => b - ..shuffle() - ..take(maxWorkerCount)); + final locations = workQueue.locationsToTry.keys.toBuiltList().rebuild( + (b) => + b + ..shuffle() + ..take(maxWorkerCount), + ); for (final location in locations) { final direction = workQueue.locationsToTry[location]!; - candidateGeneratorFutures.add(compute(_generateCandidate, - (workQueue.crossword, workQueue.candidateWords, location, direction))); + candidateGeneratorFutures.add( + compute(_generateCandidate, ( + workQueue.crossword, + workQueue.candidateWords, + location, + direction, + )), + ); } try { @@ -55,7 +66,10 @@ Future _generate((WorkQueue, int) workMessage) async { for (final (location, direction, word) in results) { if (word != null) { final candidate = crossword.addWord( - location: location, word: word, direction: direction); + location: location, + word: word, + direction: direction, + ); if (candidate != null) { crossword = candidate; } @@ -73,7 +87,8 @@ Future _generate((WorkQueue, int) workMessage) async { } (Location, Direction, String?) _generateCandidate( - (Crossword, BuiltSet, Location, Direction) searchDetailMessage) { + (Crossword, BuiltSet, Location, Direction) searchDetailMessage, +) { final (crossword, candidateWords, location, direction) = searchDetailMessage; final target = crossword.characters[location]; @@ -83,9 +98,12 @@ Future _generate((WorkQueue, int) workMessage) async { // Filter down the candidate word list to those that contain the letter // at the current location - final words = candidateWords.toBuiltList().rebuild((b) => b - ..where((b) => b.characters.contains(target.character)) - ..shuffle()); + final words = candidateWords.toBuiltList().rebuild( + (b) => + b + ..where((b) => b.characters.contains(target.character)) + ..shuffle(), + ); int tryCount = 0; final start = DateTime.now(); for (final word in words) { diff --git a/generate_crossword/step_09/lib/model.dart b/generate_crossword/step_09/lib/model.dart index 45963c9ae1..2a390bf1a5 100644 --- a/generate_crossword/step_09/lib/model.dart +++ b/generate_crossword/step_09/lib/model.dart @@ -90,7 +90,10 @@ abstract class CrosswordWord static int locationComparator(CrosswordWord a, CrosswordWord b) { final compareRows = a.location.y.compareTo(b.location.y); final compareColumns = a.location.x.compareTo(b.location.x); - return switch (compareColumns) { 0 => compareRows, _ => compareColumns }; + return switch (compareColumns) { + 0 => compareRows, + _ => compareColumns, + }; } /// Constructor for [CrosswordWord]. @@ -99,10 +102,13 @@ abstract class CrosswordWord required Location location, required Direction direction, }) { - return CrosswordWord((b) => b - ..word = word - ..direction = direction - ..location.replace(location)); + return CrosswordWord( + (b) => + b + ..word = word + ..direction = direction + ..location.replace(location), + ); } /// Constructor for [CrosswordWord]. @@ -149,9 +155,9 @@ abstract class CrosswordCharacter /// Constructor for [CrosswordCharacter]. /// Use [CrosswordCharacter.character] instead. - factory CrosswordCharacter( - [void Function(CrosswordCharacterBuilder)? updates]) = - _$CrosswordCharacter; + factory CrosswordCharacter([ + void Function(CrosswordCharacterBuilder)? updates, + ]) = _$CrosswordCharacter; CrosswordCharacter._(); } @@ -286,14 +292,15 @@ abstract class Crossword implements Built { } final candidate = rebuild( - (b) => b - ..words.add( - CrosswordWord.word( - word: word, - direction: direction, - location: location, - ), - ), + (b) => + b + ..words.add( + CrosswordWord.word( + word: word, + direction: direction, + location: location, + ), + ), ); if (candidate.valid) { @@ -315,19 +322,21 @@ abstract class Crossword implements Built { b.characters.updateValue( word.location.rightOffset(idx), (b) => b.rebuild((bInner) => bInner.acrossWord.replace(word)), - ifAbsent: () => CrosswordCharacter.character( - acrossWord: word, - character: character, - ), + ifAbsent: + () => CrosswordCharacter.character( + acrossWord: word, + character: character, + ), ); case Direction.down: b.characters.updateValue( word.location.downOffset(idx), (b) => b.rebuild((bInner) => bInner.downWord.replace(word)), - ifAbsent: () => CrosswordCharacter.character( - downWord: word, - character: character, - ), + ifAbsent: + () => CrosswordCharacter.character( + downWord: word, + character: character, + ), ); } } @@ -341,7 +350,8 @@ abstract class Crossword implements Built { final grid = List.generate( height, (_) => List.generate( - width, (_) => '░', // https://www.compart.com/en/unicode/U+2591 + width, + (_) => '░', // https://www.compart.com/en/unicode/U+2591 ), ); @@ -421,40 +431,44 @@ abstract class WorkQueue implements Built { required Crossword crossword, required Iterable candidateWords, required Location startLocation, - }) => - WorkQueue((b) { - if (crossword.words.isEmpty) { - // Strip candidate words too long to fit in the crossword - b.candidateWords.addAll(candidateWords - .where((word) => word.characters.length <= crossword.width)); - - b.crossword.replace(crossword); - - b.locationsToTry.addAll({startLocation: Direction.across}); - } else { - // Assuming words have already been stripped to length - b.candidateWords.addAll( - candidateWords.toBuiltSet().rebuild( - (b) => b.removeAll(crossword.words.map((word) => word.word))), - ); - b.crossword.replace(crossword); - crossword.characters - .rebuild((b) => b.removeWhere((location, character) { - if (character.acrossWord != null && - character.downWord != null) { - return true; - } - final left = crossword.characters[location.left]; - if (left != null && left.downWord != null) return true; - final right = crossword.characters[location.right]; - if (right != null && right.downWord != null) return true; - final up = crossword.characters[location.up]; - if (up != null && up.acrossWord != null) return true; - final down = crossword.characters[location.down]; - if (down != null && down.acrossWord != null) return true; - return false; - })) - .forEach((location, character) { + }) => WorkQueue((b) { + if (crossword.words.isEmpty) { + // Strip candidate words too long to fit in the crossword + b.candidateWords.addAll( + candidateWords.where( + (word) => word.characters.length <= crossword.width, + ), + ); + + b.crossword.replace(crossword); + + b.locationsToTry.addAll({startLocation: Direction.across}); + } else { + // Assuming words have already been stripped to length + b.candidateWords.addAll( + candidateWords.toBuiltSet().rebuild( + (b) => b.removeAll(crossword.words.map((word) => word.word)), + ), + ); + b.crossword.replace(crossword); + crossword.characters + .rebuild( + (b) => b.removeWhere((location, character) { + if (character.acrossWord != null && character.downWord != null) { + return true; + } + final left = crossword.characters[location.left]; + if (left != null && left.downWord != null) return true; + final right = crossword.characters[location.right]; + if (right != null && right.downWord != null) return true; + final up = crossword.characters[location.up]; + if (up != null && up.acrossWord != null) return true; + final down = crossword.characters[location.down]; + if (down != null && down.acrossWord != null) return true; + return false; + }), + ) + .forEach((location, character) { b.locationsToTry.addAll({ location: switch ((character.acrossWord, character.downWord)) { (null, null) => @@ -462,28 +476,36 @@ abstract class WorkQueue implements Built { (null, _) => Direction.across, (_, null) => Direction.down, (_, _) => throw StateError('Character is part of two words'), - } + }, }); }); - } - }); + } + }); - WorkQueue remove(Location location) => rebuild((b) => b - ..locationsToTry.remove(location) - ..badLocations.add(location)); + WorkQueue remove(Location location) => rebuild( + (b) => + b + ..locationsToTry.remove(location) + ..badLocations.add(location), + ); /// Update the work queue from a crossword derived from the current crossword /// that this work queue is built from. WorkQueue updateFrom(final Crossword crossword) => WorkQueue.from( - crossword: crossword, - candidateWords: candidateWords, - startLocation: locationsToTry.isNotEmpty + crossword: crossword, + candidateWords: candidateWords, + startLocation: + locationsToTry.isNotEmpty ? locationsToTry.keys.first : Location.at(0, 0), - ).rebuild((b) => b - ..badLocations.addAll(badLocations) - ..locationsToTry - .removeWhere((location, _) => badLocations.contains(location))); + ).rebuild( + (b) => + b + ..badLocations.addAll(badLocations) + ..locationsToTry.removeWhere( + (location, _) => badLocations.contains(location), + ), + ); /// Factory constructor for [WorkQueue] factory WorkQueue([void Function(WorkQueueBuilder)? updates]) = _$WorkQueue; @@ -512,25 +534,35 @@ abstract class DisplayInfo implements Built { /// Construct a [DisplayInfo] instance from a [WorkQueue]. factory DisplayInfo.from({required WorkQueue workQueue}) { - final gridFilled = (workQueue.crossword.characters.length / - (workQueue.crossword.width * workQueue.crossword.height)); + final gridFilled = + (workQueue.crossword.characters.length / + (workQueue.crossword.width * workQueue.crossword.height)); final fmt = NumberFormat.decimalPattern(); - return DisplayInfo((b) => b - ..wordsInGridCount = fmt.format(workQueue.crossword.words.length) - ..candidateWordsCount = fmt.format(workQueue.candidateWords.length) - ..locationsToExploreCount = fmt.format(workQueue.locationsToTry.length) - ..knownBadLocationsCount = fmt.format(workQueue.badLocations.length) - ..gridFilledPercentage = '${(gridFilled * 100).toStringAsFixed(2)}%'); + return DisplayInfo( + (b) => + b + ..wordsInGridCount = fmt.format(workQueue.crossword.words.length) + ..candidateWordsCount = fmt.format(workQueue.candidateWords.length) + ..locationsToExploreCount = fmt.format( + workQueue.locationsToTry.length, + ) + ..knownBadLocationsCount = fmt.format(workQueue.badLocations.length) + ..gridFilledPercentage = + '${(gridFilled * 100).toStringAsFixed(2)}%', + ); } /// An empty [DisplayInfo] instance. - static DisplayInfo get empty => DisplayInfo((b) => b - ..wordsInGridCount = '0' - ..candidateWordsCount = '0' - ..locationsToExploreCount = '0' - ..knownBadLocationsCount = '0' - ..gridFilledPercentage = '0%'); + static DisplayInfo get empty => DisplayInfo( + (b) => + b + ..wordsInGridCount = '0' + ..candidateWordsCount = '0' + ..locationsToExploreCount = '0' + ..knownBadLocationsCount = '0' + ..gridFilledPercentage = '0%', + ); factory DisplayInfo([void Function(DisplayInfoBuilder)? updates]) = _$DisplayInfo; @@ -572,20 +604,24 @@ abstract class CrosswordPuzzleGame if (puzzle.selectedWords .where((b) => b.direction == direction && b.location == location) .isNotEmpty) { - puzzle = puzzle.rebuild((b) => b - ..selectedWords.removeWhere( - (selectedWord) => - selectedWord.location == location && - selectedWord.direction == direction, - )); + puzzle = puzzle.rebuild( + (b) => + b + ..selectedWords.removeWhere( + (selectedWord) => + selectedWord.location == location && + selectedWord.direction == direction, + ), + ); } return null != puzzle.crosswordFromSelectedWords.addWord( - location: location, - word: word, - direction: direction, - requireOverlap: false); + location: location, + word: word, + direction: direction, + requireOverlap: false, + ); } CrosswordPuzzleGame? selectWord({ @@ -608,33 +644,44 @@ abstract class CrosswordPuzzleGame if (puzzle.selectedWords .where((b) => b.direction == direction && b.location == location) .isNotEmpty) { - puzzle = puzzle.rebuild((b) => b - ..selectedWords.removeWhere( - (selectedWord) => - selectedWord.location == location && - selectedWord.direction == direction, - )); + puzzle = puzzle.rebuild( + (b) => + b + ..selectedWords.removeWhere( + (selectedWord) => + selectedWord.location == location && + selectedWord.direction == direction, + ), + ); } // Check if the selected word meshes with the already selected words. // Note this version of the crossword does not enforce overlap to // allow the player to select words anywhere on the grid. Enforcing words // to be solved in order is a possible alternative. - final updatedSelectedWordsCrossword = - puzzle.crosswordFromSelectedWords.addWord( - location: location, - word: word, - direction: direction, - requireOverlap: false, - ); + final updatedSelectedWordsCrossword = puzzle.crosswordFromSelectedWords + .addWord( + location: location, + word: word, + direction: direction, + requireOverlap: false, + ); // Make sure the selected word is in the crossword or is an alternate word. if (updatedSelectedWordsCrossword != null) { if (puzzle.crossword.words.contains(crosswordWord) || puzzle.alternateWords[location]?[direction]?.contains(word) == true) { - return puzzle.rebuild((b) => b - ..selectedWords.add(CrosswordWord.word( - word: word, location: location, direction: direction))); + return puzzle.rebuild( + (b) => + b + ..selectedWords.add( + CrosswordWord.word( + word: word, + location: location, + direction: direction, + ), + ), + ); } } return null; @@ -642,7 +689,10 @@ abstract class CrosswordPuzzleGame /// The crossword from the selected words. Crossword get crosswordFromSelectedWords => Crossword.crossword( - width: crossword.width, height: crossword.height, words: selectedWords); + width: crossword.width, + height: crossword.height, + words: selectedWords, + ); /// Test if the puzzle is solved. Note, this allows for the possibility of /// multiple solutions. @@ -658,8 +708,9 @@ abstract class CrosswordPuzzleGame required BuiltSet candidateWords, }) { // Remove all of the currently used words from the list of candidates - candidateWords = candidateWords - .rebuild((p0) => p0.removeAll(crossword.words.map((p1) => p1.word))); + candidateWords = candidateWords.rebuild( + (p0) => p0.removeAll(crossword.words.map((p1) => p1.word)), + ); // This is the list of alternate words for each word in the crossword var alternates = @@ -667,14 +718,18 @@ abstract class CrosswordPuzzleGame // Build the alternate words for each word in the crossword for (final crosswordWord in crossword.words) { - final alternateWords = candidateWords.toBuiltList().rebuild((b) => b - ..where((b) => b.length == crosswordWord.word.length) - ..shuffle() - ..take(4) - ..sort()); + final alternateWords = candidateWords.toBuiltList().rebuild( + (b) => + b + ..where((b) => b.length == crosswordWord.word.length) + ..shuffle() + ..take(4) + ..sort(), + ); - candidateWords = - candidateWords.rebuild((b) => b.removeAll(alternateWords)); + candidateWords = candidateWords.rebuild( + (b) => b.removeAll(alternateWords), + ); alternates = alternates.rebuild( (b) => b.updateValue( @@ -698,9 +753,9 @@ abstract class CrosswordPuzzleGame }); } - factory CrosswordPuzzleGame( - [void Function(CrosswordPuzzleGameBuilder)? updates]) = - _$CrosswordPuzzleGame; + factory CrosswordPuzzleGame([ + void Function(CrosswordPuzzleGameBuilder)? updates, + ]) = _$CrosswordPuzzleGame; CrosswordPuzzleGame._(); } diff --git a/generate_crossword/step_09/lib/model.g.dart b/generate_crossword/step_09/lib/model.g.dart index b484e25f79..ec4b5e7d67 100644 --- a/generate_crossword/step_09/lib/model.g.dart +++ b/generate_crossword/step_09/lib/model.g.dart @@ -6,47 +6,60 @@ part of 'model.dart'; // BuiltValueGenerator // ************************************************************************** -Serializers _$serializers = (new Serializers().toBuilder() - ..add(Crossword.serializer) - ..add(CrosswordCharacter.serializer) - ..add(CrosswordPuzzleGame.serializer) - ..add(CrosswordWord.serializer) - ..add(DisplayInfo.serializer) - ..add(Location.serializer) - ..add(WorkQueue.serializer) - ..addBuilderFactory( - const FullType(BuiltList, const [const FullType(CrosswordWord)]), - () => new ListBuilder()) - ..addBuilderFactory( - const FullType(BuiltMap, const [ - const FullType(Location), - const FullType(CrosswordCharacter) - ]), - () => new MapBuilder()) - ..addBuilderFactory( - const FullType(BuiltMap, const [ - const FullType(Location), +Serializers _$serializers = + (new Serializers().toBuilder() + ..add(Crossword.serializer) + ..add(CrosswordCharacter.serializer) + ..add(CrosswordPuzzleGame.serializer) + ..add(CrosswordWord.serializer) + ..add(DisplayInfo.serializer) + ..add(Location.serializer) + ..add(WorkQueue.serializer) + ..addBuilderFactory( + const FullType(BuiltList, const [const FullType(CrosswordWord)]), + () => new ListBuilder(), + ) + ..addBuilderFactory( + const FullType(BuiltMap, const [ + const FullType(Location), + const FullType(CrosswordCharacter), + ]), + () => new MapBuilder(), + ) + ..addBuilderFactory( const FullType(BuiltMap, const [ + const FullType(Location), + const FullType(BuiltMap, const [ + const FullType(Direction), + const FullType(BuiltList, const [const FullType(String)]), + ]), + ]), + () => + new MapBuilder< + Location, + BuiltMap> + >(), + ) + ..addBuilderFactory( + const FullType(BuiltList, const [const FullType(CrosswordWord)]), + () => new ListBuilder(), + ) + ..addBuilderFactory( + const FullType(BuiltMap, const [ + const FullType(Location), const FullType(Direction), - const FullType(BuiltList, const [const FullType(String)]) - ]) - ]), - () => new MapBuilder>>()) - ..addBuilderFactory( - const FullType(BuiltList, const [const FullType(CrosswordWord)]), - () => new ListBuilder()) - ..addBuilderFactory( - const FullType(BuiltMap, - const [const FullType(Location), const FullType(Direction)]), - () => new MapBuilder()) - ..addBuilderFactory( - const FullType(BuiltSet, const [const FullType(Location)]), - () => new SetBuilder()) - ..addBuilderFactory( - const FullType(BuiltSet, const [const FullType(String)]), - () => new SetBuilder())) - .build(); + ]), + () => new MapBuilder(), + ) + ..addBuilderFactory( + const FullType(BuiltSet, const [const FullType(Location)]), + () => new SetBuilder(), + ) + ..addBuilderFactory( + const FullType(BuiltSet, const [const FullType(String)]), + () => new SetBuilder(), + )) + .build(); Serializer _$locationSerializer = new _$LocationSerializer(); Serializer _$crosswordWordSerializer = new _$CrosswordWordSerializer(); @@ -65,8 +78,11 @@ class _$LocationSerializer implements StructuredSerializer { final String wireName = 'Location'; @override - Iterable serialize(Serializers serializers, Location object, - {FullType specifiedType = FullType.unspecified}) { + Iterable serialize( + Serializers serializers, + Location object, { + FullType specifiedType = FullType.unspecified, + }) { final result = [ 'x', serializers.serialize(object.x, specifiedType: const FullType(int)), @@ -78,8 +94,11 @@ class _$LocationSerializer implements StructuredSerializer { } @override - Location deserialize(Serializers serializers, Iterable serialized, - {FullType specifiedType = FullType.unspecified}) { + Location deserialize( + Serializers serializers, + Iterable serialized, { + FullType specifiedType = FullType.unspecified, + }) { final result = new LocationBuilder(); final iterator = serialized.iterator; @@ -89,12 +108,20 @@ class _$LocationSerializer implements StructuredSerializer { final Object? value = iterator.current; switch (key) { case 'x': - result.x = serializers.deserialize(value, - specifiedType: const FullType(int))! as int; + result.x = + serializers.deserialize( + value, + specifiedType: const FullType(int), + )! + as int; break; case 'y': - result.y = serializers.deserialize(value, - specifiedType: const FullType(int))! as int; + result.y = + serializers.deserialize( + value, + specifiedType: const FullType(int), + )! + as int; break; } } @@ -110,17 +137,24 @@ class _$CrosswordWordSerializer implements StructuredSerializer { final String wireName = 'CrosswordWord'; @override - Iterable serialize(Serializers serializers, CrosswordWord object, - {FullType specifiedType = FullType.unspecified}) { + Iterable serialize( + Serializers serializers, + CrosswordWord object, { + FullType specifiedType = FullType.unspecified, + }) { final result = [ 'word', serializers.serialize(object.word, specifiedType: const FullType(String)), 'location', - serializers.serialize(object.location, - specifiedType: const FullType(Location)), + serializers.serialize( + object.location, + specifiedType: const FullType(Location), + ), 'direction', - serializers.serialize(object.direction, - specifiedType: const FullType(Direction)), + serializers.serialize( + object.direction, + specifiedType: const FullType(Direction), + ), ]; return result; @@ -128,8 +162,10 @@ class _$CrosswordWordSerializer implements StructuredSerializer { @override CrosswordWord deserialize( - Serializers serializers, Iterable serialized, - {FullType specifiedType = FullType.unspecified}) { + Serializers serializers, + Iterable serialized, { + FullType specifiedType = FullType.unspecified, + }) { final result = new CrosswordWordBuilder(); final iterator = serialized.iterator; @@ -139,16 +175,29 @@ class _$CrosswordWordSerializer implements StructuredSerializer { final Object? value = iterator.current; switch (key) { case 'word': - result.word = serializers.deserialize(value, - specifiedType: const FullType(String))! as String; + result.word = + serializers.deserialize( + value, + specifiedType: const FullType(String), + )! + as String; break; case 'location': - result.location.replace(serializers.deserialize(value, - specifiedType: const FullType(Location))! as Location); + result.location.replace( + serializers.deserialize( + value, + specifiedType: const FullType(Location), + )! + as Location, + ); break; case 'direction': - result.direction = serializers.deserialize(value, - specifiedType: const FullType(Direction))! as Direction; + result.direction = + serializers.deserialize( + value, + specifiedType: const FullType(Direction), + )! + as Direction; break; } } @@ -166,35 +215,49 @@ class _$CrosswordCharacterSerializer @override Iterable serialize( - Serializers serializers, CrosswordCharacter object, - {FullType specifiedType = FullType.unspecified}) { + Serializers serializers, + CrosswordCharacter object, { + FullType specifiedType = FullType.unspecified, + }) { final result = [ 'character', - serializers.serialize(object.character, - specifiedType: const FullType(String)), + serializers.serialize( + object.character, + specifiedType: const FullType(String), + ), ]; Object? value; value = object.acrossWord; if (value != null) { result ..add('acrossWord') - ..add(serializers.serialize(value, - specifiedType: const FullType(CrosswordWord))); + ..add( + serializers.serialize( + value, + specifiedType: const FullType(CrosswordWord), + ), + ); } value = object.downWord; if (value != null) { result ..add('downWord') - ..add(serializers.serialize(value, - specifiedType: const FullType(CrosswordWord))); + ..add( + serializers.serialize( + value, + specifiedType: const FullType(CrosswordWord), + ), + ); } return result; } @override CrosswordCharacter deserialize( - Serializers serializers, Iterable serialized, - {FullType specifiedType = FullType.unspecified}) { + Serializers serializers, + Iterable serialized, { + FullType specifiedType = FullType.unspecified, + }) { final result = new CrosswordCharacterBuilder(); final iterator = serialized.iterator; @@ -204,16 +267,30 @@ class _$CrosswordCharacterSerializer final Object? value = iterator.current; switch (key) { case 'character': - result.character = serializers.deserialize(value, - specifiedType: const FullType(String))! as String; + result.character = + serializers.deserialize( + value, + specifiedType: const FullType(String), + )! + as String; break; case 'acrossWord': - result.acrossWord.replace(serializers.deserialize(value, - specifiedType: const FullType(CrosswordWord))! as CrosswordWord); + result.acrossWord.replace( + serializers.deserialize( + value, + specifiedType: const FullType(CrosswordWord), + )! + as CrosswordWord, + ); break; case 'downWord': - result.downWord.replace(serializers.deserialize(value, - specifiedType: const FullType(CrosswordWord))! as CrosswordWord); + result.downWord.replace( + serializers.deserialize( + value, + specifiedType: const FullType(CrosswordWord), + )! + as CrosswordWord, + ); break; } } @@ -229,31 +306,42 @@ class _$CrosswordSerializer implements StructuredSerializer { final String wireName = 'Crossword'; @override - Iterable serialize(Serializers serializers, Crossword object, - {FullType specifiedType = FullType.unspecified}) { + Iterable serialize( + Serializers serializers, + Crossword object, { + FullType specifiedType = FullType.unspecified, + }) { final result = [ 'width', serializers.serialize(object.width, specifiedType: const FullType(int)), 'height', serializers.serialize(object.height, specifiedType: const FullType(int)), 'words', - serializers.serialize(object.words, - specifiedType: - const FullType(BuiltList, const [const FullType(CrosswordWord)])), + serializers.serialize( + object.words, + specifiedType: const FullType(BuiltList, const [ + const FullType(CrosswordWord), + ]), + ), 'characters', - serializers.serialize(object.characters, - specifiedType: const FullType(BuiltMap, const [ - const FullType(Location), - const FullType(CrosswordCharacter) - ])), + serializers.serialize( + object.characters, + specifiedType: const FullType(BuiltMap, const [ + const FullType(Location), + const FullType(CrosswordCharacter), + ]), + ), ]; return result; } @override - Crossword deserialize(Serializers serializers, Iterable serialized, - {FullType specifiedType = FullType.unspecified}) { + Crossword deserialize( + Serializers serializers, + Iterable serialized, { + FullType specifiedType = FullType.unspecified, + }) { final result = new CrosswordBuilder(); final iterator = serialized.iterator; @@ -263,25 +351,42 @@ class _$CrosswordSerializer implements StructuredSerializer { final Object? value = iterator.current; switch (key) { case 'width': - result.width = serializers.deserialize(value, - specifiedType: const FullType(int))! as int; + result.width = + serializers.deserialize( + value, + specifiedType: const FullType(int), + )! + as int; break; case 'height': - result.height = serializers.deserialize(value, - specifiedType: const FullType(int))! as int; + result.height = + serializers.deserialize( + value, + specifiedType: const FullType(int), + )! + as int; break; case 'words': - result.words.replace(serializers.deserialize(value, - specifiedType: const FullType( - BuiltList, const [const FullType(CrosswordWord)]))! - as BuiltList); + result.words.replace( + serializers.deserialize( + value, + specifiedType: const FullType(BuiltList, const [ + const FullType(CrosswordWord), + ]), + )! + as BuiltList, + ); break; case 'characters': - result.characters.replace(serializers.deserialize(value, + result.characters.replace( + serializers.deserialize( + value, specifiedType: const FullType(BuiltMap, const [ const FullType(Location), - const FullType(CrosswordCharacter) - ]))!); + const FullType(CrosswordCharacter), + ]), + )!, + ); break; } } @@ -297,32 +402,48 @@ class _$WorkQueueSerializer implements StructuredSerializer { final String wireName = 'WorkQueue'; @override - Iterable serialize(Serializers serializers, WorkQueue object, - {FullType specifiedType = FullType.unspecified}) { + Iterable serialize( + Serializers serializers, + WorkQueue object, { + FullType specifiedType = FullType.unspecified, + }) { final result = [ 'crossword', - serializers.serialize(object.crossword, - specifiedType: const FullType(Crossword)), + serializers.serialize( + object.crossword, + specifiedType: const FullType(Crossword), + ), 'locationsToTry', - serializers.serialize(object.locationsToTry, - specifiedType: const FullType(BuiltMap, - const [const FullType(Location), const FullType(Direction)])), + serializers.serialize( + object.locationsToTry, + specifiedType: const FullType(BuiltMap, const [ + const FullType(Location), + const FullType(Direction), + ]), + ), 'badLocations', - serializers.serialize(object.badLocations, - specifiedType: - const FullType(BuiltSet, const [const FullType(Location)])), + serializers.serialize( + object.badLocations, + specifiedType: const FullType(BuiltSet, const [ + const FullType(Location), + ]), + ), 'candidateWords', - serializers.serialize(object.candidateWords, - specifiedType: - const FullType(BuiltSet, const [const FullType(String)])), + serializers.serialize( + object.candidateWords, + specifiedType: const FullType(BuiltSet, const [const FullType(String)]), + ), ]; return result; } @override - WorkQueue deserialize(Serializers serializers, Iterable serialized, - {FullType specifiedType = FullType.unspecified}) { + WorkQueue deserialize( + Serializers serializers, + Iterable serialized, { + FullType specifiedType = FullType.unspecified, + }) { final result = new WorkQueueBuilder(); final iterator = serialized.iterator; @@ -332,27 +453,46 @@ class _$WorkQueueSerializer implements StructuredSerializer { final Object? value = iterator.current; switch (key) { case 'crossword': - result.crossword.replace(serializers.deserialize(value, - specifiedType: const FullType(Crossword))! as Crossword); + result.crossword.replace( + serializers.deserialize( + value, + specifiedType: const FullType(Crossword), + )! + as Crossword, + ); break; case 'locationsToTry': - result.locationsToTry.replace(serializers.deserialize(value, + result.locationsToTry.replace( + serializers.deserialize( + value, specifiedType: const FullType(BuiltMap, const [ const FullType(Location), - const FullType(Direction) - ]))!); + const FullType(Direction), + ]), + )!, + ); break; case 'badLocations': - result.badLocations.replace(serializers.deserialize(value, - specifiedType: const FullType( - BuiltSet, const [const FullType(Location)]))! - as BuiltSet); + result.badLocations.replace( + serializers.deserialize( + value, + specifiedType: const FullType(BuiltSet, const [ + const FullType(Location), + ]), + )! + as BuiltSet, + ); break; case 'candidateWords': - result.candidateWords.replace(serializers.deserialize(value, - specifiedType: - const FullType(BuiltSet, const [const FullType(String)]))! - as BuiltSet); + result.candidateWords.replace( + serializers.deserialize( + value, + specifiedType: const FullType(BuiltSet, const [ + const FullType(String), + ]), + )! + as BuiltSet, + ); break; } } @@ -368,32 +508,48 @@ class _$DisplayInfoSerializer implements StructuredSerializer { final String wireName = 'DisplayInfo'; @override - Iterable serialize(Serializers serializers, DisplayInfo object, - {FullType specifiedType = FullType.unspecified}) { + Iterable serialize( + Serializers serializers, + DisplayInfo object, { + FullType specifiedType = FullType.unspecified, + }) { final result = [ 'wordsInGridCount', - serializers.serialize(object.wordsInGridCount, - specifiedType: const FullType(String)), + serializers.serialize( + object.wordsInGridCount, + specifiedType: const FullType(String), + ), 'candidateWordsCount', - serializers.serialize(object.candidateWordsCount, - specifiedType: const FullType(String)), + serializers.serialize( + object.candidateWordsCount, + specifiedType: const FullType(String), + ), 'locationsToExploreCount', - serializers.serialize(object.locationsToExploreCount, - specifiedType: const FullType(String)), + serializers.serialize( + object.locationsToExploreCount, + specifiedType: const FullType(String), + ), 'knownBadLocationsCount', - serializers.serialize(object.knownBadLocationsCount, - specifiedType: const FullType(String)), + serializers.serialize( + object.knownBadLocationsCount, + specifiedType: const FullType(String), + ), 'gridFilledPercentage', - serializers.serialize(object.gridFilledPercentage, - specifiedType: const FullType(String)), + serializers.serialize( + object.gridFilledPercentage, + specifiedType: const FullType(String), + ), ]; return result; } @override - DisplayInfo deserialize(Serializers serializers, Iterable serialized, - {FullType specifiedType = FullType.unspecified}) { + DisplayInfo deserialize( + Serializers serializers, + Iterable serialized, { + FullType specifiedType = FullType.unspecified, + }) { final result = new DisplayInfoBuilder(); final iterator = serialized.iterator; @@ -403,24 +559,44 @@ class _$DisplayInfoSerializer implements StructuredSerializer { final Object? value = iterator.current; switch (key) { case 'wordsInGridCount': - result.wordsInGridCount = serializers.deserialize(value, - specifiedType: const FullType(String))! as String; + result.wordsInGridCount = + serializers.deserialize( + value, + specifiedType: const FullType(String), + )! + as String; break; case 'candidateWordsCount': - result.candidateWordsCount = serializers.deserialize(value, - specifiedType: const FullType(String))! as String; + result.candidateWordsCount = + serializers.deserialize( + value, + specifiedType: const FullType(String), + )! + as String; break; case 'locationsToExploreCount': - result.locationsToExploreCount = serializers.deserialize(value, - specifiedType: const FullType(String))! as String; + result.locationsToExploreCount = + serializers.deserialize( + value, + specifiedType: const FullType(String), + )! + as String; break; case 'knownBadLocationsCount': - result.knownBadLocationsCount = serializers.deserialize(value, - specifiedType: const FullType(String))! as String; + result.knownBadLocationsCount = + serializers.deserialize( + value, + specifiedType: const FullType(String), + )! + as String; break; case 'gridFilledPercentage': - result.gridFilledPercentage = serializers.deserialize(value, - specifiedType: const FullType(String))! as String; + result.gridFilledPercentage = + serializers.deserialize( + value, + specifiedType: const FullType(String), + )! + as String; break; } } @@ -434,32 +610,41 @@ class _$CrosswordPuzzleGameSerializer @override final Iterable types = const [ CrosswordPuzzleGame, - _$CrosswordPuzzleGame + _$CrosswordPuzzleGame, ]; @override final String wireName = 'CrosswordPuzzleGame'; @override Iterable serialize( - Serializers serializers, CrosswordPuzzleGame object, - {FullType specifiedType = FullType.unspecified}) { + Serializers serializers, + CrosswordPuzzleGame object, { + FullType specifiedType = FullType.unspecified, + }) { final result = [ 'crossword', - serializers.serialize(object.crossword, - specifiedType: const FullType(Crossword)), + serializers.serialize( + object.crossword, + specifiedType: const FullType(Crossword), + ), 'alternateWords', - serializers.serialize(object.alternateWords, - specifiedType: const FullType(BuiltMap, const [ - const FullType(Location), - const FullType(BuiltMap, const [ - const FullType(Direction), - const FullType(BuiltList, const [const FullType(String)]) - ]) - ])), + serializers.serialize( + object.alternateWords, + specifiedType: const FullType(BuiltMap, const [ + const FullType(Location), + const FullType(BuiltMap, const [ + const FullType(Direction), + const FullType(BuiltList, const [const FullType(String)]), + ]), + ]), + ), 'selectedWords', - serializers.serialize(object.selectedWords, - specifiedType: - const FullType(BuiltList, const [const FullType(CrosswordWord)])), + serializers.serialize( + object.selectedWords, + specifiedType: const FullType(BuiltList, const [ + const FullType(CrosswordWord), + ]), + ), ]; return result; @@ -467,8 +652,10 @@ class _$CrosswordPuzzleGameSerializer @override CrosswordPuzzleGame deserialize( - Serializers serializers, Iterable serialized, - {FullType specifiedType = FullType.unspecified}) { + Serializers serializers, + Iterable serialized, { + FullType specifiedType = FullType.unspecified, + }) { final result = new CrosswordPuzzleGameBuilder(); final iterator = serialized.iterator; @@ -478,24 +665,38 @@ class _$CrosswordPuzzleGameSerializer final Object? value = iterator.current; switch (key) { case 'crossword': - result.crossword.replace(serializers.deserialize(value, - specifiedType: const FullType(Crossword))! as Crossword); + result.crossword.replace( + serializers.deserialize( + value, + specifiedType: const FullType(Crossword), + )! + as Crossword, + ); break; case 'alternateWords': - result.alternateWords.replace(serializers.deserialize(value, + result.alternateWords.replace( + serializers.deserialize( + value, specifiedType: const FullType(BuiltMap, const [ const FullType(Location), const FullType(BuiltMap, const [ const FullType(Direction), - const FullType(BuiltList, const [const FullType(String)]) - ]) - ]))!); + const FullType(BuiltList, const [const FullType(String)]), + ]), + ]), + )!, + ); break; case 'selectedWords': - result.selectedWords.replace(serializers.deserialize(value, - specifiedType: const FullType( - BuiltList, const [const FullType(CrosswordWord)]))! - as BuiltList); + result.selectedWords.replace( + serializers.deserialize( + value, + specifiedType: const FullType(BuiltList, const [ + const FullType(CrosswordWord), + ]), + )! + as BuiltList, + ); break; } } @@ -587,10 +788,12 @@ class LocationBuilder implements Builder { Location build() => _build(); _$Location _build() { - final _$result = _$v ?? + final _$result = + _$v ?? new _$Location._( - x: BuiltValueNullFieldError.checkNotNull(x, r'Location', 'x'), - y: BuiltValueNullFieldError.checkNotNull(y, r'Location', 'y')); + x: BuiltValueNullFieldError.checkNotNull(x, r'Location', 'x'), + y: BuiltValueNullFieldError.checkNotNull(y, r'Location', 'y'), + ); replace(_$result); return _$result; } @@ -607,14 +810,22 @@ class _$CrosswordWord extends CrosswordWord { factory _$CrosswordWord([void Function(CrosswordWordBuilder)? updates]) => (new CrosswordWordBuilder()..update(updates))._build(); - _$CrosswordWord._( - {required this.word, required this.location, required this.direction}) - : super._() { + _$CrosswordWord._({ + required this.word, + required this.location, + required this.direction, + }) : super._() { BuiltValueNullFieldError.checkNotNull(word, r'CrosswordWord', 'word'); BuiltValueNullFieldError.checkNotNull( - location, r'CrosswordWord', 'location'); + location, + r'CrosswordWord', + 'location', + ); BuiltValueNullFieldError.checkNotNull( - direction, r'CrosswordWord', 'direction'); + direction, + r'CrosswordWord', + 'direction', + ); } @override @@ -699,13 +910,21 @@ class CrosswordWordBuilder _$CrosswordWord _build() { _$CrosswordWord _$result; try { - _$result = _$v ?? + _$result = + _$v ?? new _$CrosswordWord._( - word: BuiltValueNullFieldError.checkNotNull( - word, r'CrosswordWord', 'word'), - location: location.build(), - direction: BuiltValueNullFieldError.checkNotNull( - direction, r'CrosswordWord', 'direction')); + word: BuiltValueNullFieldError.checkNotNull( + word, + r'CrosswordWord', + 'word', + ), + location: location.build(), + direction: BuiltValueNullFieldError.checkNotNull( + direction, + r'CrosswordWord', + 'direction', + ), + ); } catch (_) { late String _$failedField; try { @@ -713,7 +932,10 @@ class CrosswordWordBuilder location.build(); } catch (e) { throw new BuiltValueNestedFieldError( - r'CrosswordWord', _$failedField, e.toString()); + r'CrosswordWord', + _$failedField, + e.toString(), + ); } rethrow; } @@ -730,21 +952,26 @@ class _$CrosswordCharacter extends CrosswordCharacter { @override final CrosswordWord? downWord; - factory _$CrosswordCharacter( - [void Function(CrosswordCharacterBuilder)? updates]) => - (new CrosswordCharacterBuilder()..update(updates))._build(); + factory _$CrosswordCharacter([ + void Function(CrosswordCharacterBuilder)? updates, + ]) => (new CrosswordCharacterBuilder()..update(updates))._build(); - _$CrosswordCharacter._( - {required this.character, this.acrossWord, this.downWord}) - : super._() { + _$CrosswordCharacter._({ + required this.character, + this.acrossWord, + this.downWord, + }) : super._() { BuiltValueNullFieldError.checkNotNull( - character, r'CrosswordCharacter', 'character'); + character, + r'CrosswordCharacter', + 'character', + ); } @override CrosswordCharacter rebuild( - void Function(CrosswordCharacterBuilder) updates) => - (toBuilder()..update(updates)).build(); + void Function(CrosswordCharacterBuilder) updates, + ) => (toBuilder()..update(updates)).build(); @override CrosswordCharacterBuilder toBuilder() => @@ -828,12 +1055,17 @@ class CrosswordCharacterBuilder _$CrosswordCharacter _build() { _$CrosswordCharacter _$result; try { - _$result = _$v ?? + _$result = + _$v ?? new _$CrosswordCharacter._( - character: BuiltValueNullFieldError.checkNotNull( - character, r'CrosswordCharacter', 'character'), - acrossWord: _acrossWord?.build(), - downWord: _downWord?.build()); + character: BuiltValueNullFieldError.checkNotNull( + character, + r'CrosswordCharacter', + 'character', + ), + acrossWord: _acrossWord?.build(), + downWord: _downWord?.build(), + ); } catch (_) { late String _$failedField; try { @@ -843,7 +1075,10 @@ class CrosswordCharacterBuilder _downWord?.build(); } catch (e) { throw new BuiltValueNestedFieldError( - r'CrosswordCharacter', _$failedField, e.toString()); + r'CrosswordCharacter', + _$failedField, + e.toString(), + ); } rethrow; } @@ -865,17 +1100,20 @@ class _$Crossword extends Crossword { factory _$Crossword([void Function(CrosswordBuilder)? updates]) => (new CrosswordBuilder()..update(updates))._build(); - _$Crossword._( - {required this.width, - required this.height, - required this.words, - required this.characters}) - : super._() { + _$Crossword._({ + required this.width, + required this.height, + required this.words, + required this.characters, + }) : super._() { BuiltValueNullFieldError.checkNotNull(width, r'Crossword', 'width'); BuiltValueNullFieldError.checkNotNull(height, r'Crossword', 'height'); BuiltValueNullFieldError.checkNotNull(words, r'Crossword', 'words'); BuiltValueNullFieldError.checkNotNull( - characters, r'Crossword', 'characters'); + characters, + r'Crossword', + 'characters', + ); } @override @@ -971,14 +1209,22 @@ class CrosswordBuilder implements Builder { Crossword._fillCharacters(this); _$Crossword _$result; try { - _$result = _$v ?? + _$result = + _$v ?? new _$Crossword._( - width: BuiltValueNullFieldError.checkNotNull( - width, r'Crossword', 'width'), - height: BuiltValueNullFieldError.checkNotNull( - height, r'Crossword', 'height'), - words: words.build(), - characters: characters.build()); + width: BuiltValueNullFieldError.checkNotNull( + width, + r'Crossword', + 'width', + ), + height: BuiltValueNullFieldError.checkNotNull( + height, + r'Crossword', + 'height', + ), + words: words.build(), + characters: characters.build(), + ); } catch (_) { late String _$failedField; try { @@ -988,7 +1234,10 @@ class CrosswordBuilder implements Builder { characters.build(); } catch (e) { throw new BuiltValueNestedFieldError( - r'Crossword', _$failedField, e.toString()); + r'Crossword', + _$failedField, + e.toString(), + ); } rethrow; } @@ -1010,19 +1259,28 @@ class _$WorkQueue extends WorkQueue { factory _$WorkQueue([void Function(WorkQueueBuilder)? updates]) => (new WorkQueueBuilder()..update(updates))._build(); - _$WorkQueue._( - {required this.crossword, - required this.locationsToTry, - required this.badLocations, - required this.candidateWords}) - : super._() { + _$WorkQueue._({ + required this.crossword, + required this.locationsToTry, + required this.badLocations, + required this.candidateWords, + }) : super._() { BuiltValueNullFieldError.checkNotNull(crossword, r'WorkQueue', 'crossword'); BuiltValueNullFieldError.checkNotNull( - locationsToTry, r'WorkQueue', 'locationsToTry'); + locationsToTry, + r'WorkQueue', + 'locationsToTry', + ); BuiltValueNullFieldError.checkNotNull( - badLocations, r'WorkQueue', 'badLocations'); + badLocations, + r'WorkQueue', + 'badLocations', + ); BuiltValueNullFieldError.checkNotNull( - candidateWords, r'WorkQueue', 'candidateWords'); + candidateWords, + r'WorkQueue', + 'candidateWords', + ); } @override @@ -1121,12 +1379,14 @@ class WorkQueueBuilder implements Builder { _$WorkQueue _build() { _$WorkQueue _$result; try { - _$result = _$v ?? + _$result = + _$v ?? new _$WorkQueue._( - crossword: crossword.build(), - locationsToTry: locationsToTry.build(), - badLocations: badLocations.build(), - candidateWords: candidateWords.build()); + crossword: crossword.build(), + locationsToTry: locationsToTry.build(), + badLocations: badLocations.build(), + candidateWords: candidateWords.build(), + ); } catch (_) { late String _$failedField; try { @@ -1140,7 +1400,10 @@ class WorkQueueBuilder implements Builder { candidateWords.build(); } catch (e) { throw new BuiltValueNestedFieldError( - r'WorkQueue', _$failedField, e.toString()); + r'WorkQueue', + _$failedField, + e.toString(), + ); } rethrow; } @@ -1164,23 +1427,38 @@ class _$DisplayInfo extends DisplayInfo { factory _$DisplayInfo([void Function(DisplayInfoBuilder)? updates]) => (new DisplayInfoBuilder()..update(updates))._build(); - _$DisplayInfo._( - {required this.wordsInGridCount, - required this.candidateWordsCount, - required this.locationsToExploreCount, - required this.knownBadLocationsCount, - required this.gridFilledPercentage}) - : super._() { + _$DisplayInfo._({ + required this.wordsInGridCount, + required this.candidateWordsCount, + required this.locationsToExploreCount, + required this.knownBadLocationsCount, + required this.gridFilledPercentage, + }) : super._() { BuiltValueNullFieldError.checkNotNull( - wordsInGridCount, r'DisplayInfo', 'wordsInGridCount'); + wordsInGridCount, + r'DisplayInfo', + 'wordsInGridCount', + ); BuiltValueNullFieldError.checkNotNull( - candidateWordsCount, r'DisplayInfo', 'candidateWordsCount'); + candidateWordsCount, + r'DisplayInfo', + 'candidateWordsCount', + ); BuiltValueNullFieldError.checkNotNull( - locationsToExploreCount, r'DisplayInfo', 'locationsToExploreCount'); + locationsToExploreCount, + r'DisplayInfo', + 'locationsToExploreCount', + ); BuiltValueNullFieldError.checkNotNull( - knownBadLocationsCount, r'DisplayInfo', 'knownBadLocationsCount'); + knownBadLocationsCount, + r'DisplayInfo', + 'knownBadLocationsCount', + ); BuiltValueNullFieldError.checkNotNull( - gridFilledPercentage, r'DisplayInfo', 'gridFilledPercentage'); + gridFilledPercentage, + r'DisplayInfo', + 'gridFilledPercentage', + ); } @override @@ -1283,22 +1561,35 @@ class DisplayInfoBuilder implements Builder { DisplayInfo build() => _build(); _$DisplayInfo _build() { - final _$result = _$v ?? + final _$result = + _$v ?? new _$DisplayInfo._( - wordsInGridCount: BuiltValueNullFieldError.checkNotNull( - wordsInGridCount, r'DisplayInfo', 'wordsInGridCount'), - candidateWordsCount: BuiltValueNullFieldError.checkNotNull( - candidateWordsCount, r'DisplayInfo', 'candidateWordsCount'), - locationsToExploreCount: BuiltValueNullFieldError.checkNotNull( - locationsToExploreCount, - r'DisplayInfo', - 'locationsToExploreCount'), - knownBadLocationsCount: BuiltValueNullFieldError.checkNotNull( - knownBadLocationsCount, - r'DisplayInfo', - 'knownBadLocationsCount'), - gridFilledPercentage: BuiltValueNullFieldError.checkNotNull( - gridFilledPercentage, r'DisplayInfo', 'gridFilledPercentage')); + wordsInGridCount: BuiltValueNullFieldError.checkNotNull( + wordsInGridCount, + r'DisplayInfo', + 'wordsInGridCount', + ), + candidateWordsCount: BuiltValueNullFieldError.checkNotNull( + candidateWordsCount, + r'DisplayInfo', + 'candidateWordsCount', + ), + locationsToExploreCount: BuiltValueNullFieldError.checkNotNull( + locationsToExploreCount, + r'DisplayInfo', + 'locationsToExploreCount', + ), + knownBadLocationsCount: BuiltValueNullFieldError.checkNotNull( + knownBadLocationsCount, + r'DisplayInfo', + 'knownBadLocationsCount', + ), + gridFilledPercentage: BuiltValueNullFieldError.checkNotNull( + gridFilledPercentage, + r'DisplayInfo', + 'gridFilledPercentage', + ), + ); replace(_$result); return _$result; } @@ -1309,31 +1600,40 @@ class _$CrosswordPuzzleGame extends CrosswordPuzzleGame { final Crossword crossword; @override final BuiltMap>> - alternateWords; + alternateWords; @override final BuiltList selectedWords; - factory _$CrosswordPuzzleGame( - [void Function(CrosswordPuzzleGameBuilder)? updates]) => - (new CrosswordPuzzleGameBuilder()..update(updates))._build(); + factory _$CrosswordPuzzleGame([ + void Function(CrosswordPuzzleGameBuilder)? updates, + ]) => (new CrosswordPuzzleGameBuilder()..update(updates))._build(); - _$CrosswordPuzzleGame._( - {required this.crossword, - required this.alternateWords, - required this.selectedWords}) - : super._() { + _$CrosswordPuzzleGame._({ + required this.crossword, + required this.alternateWords, + required this.selectedWords, + }) : super._() { BuiltValueNullFieldError.checkNotNull( - crossword, r'CrosswordPuzzleGame', 'crossword'); + crossword, + r'CrosswordPuzzleGame', + 'crossword', + ); BuiltValueNullFieldError.checkNotNull( - alternateWords, r'CrosswordPuzzleGame', 'alternateWords'); + alternateWords, + r'CrosswordPuzzleGame', + 'alternateWords', + ); BuiltValueNullFieldError.checkNotNull( - selectedWords, r'CrosswordPuzzleGame', 'selectedWords'); + selectedWords, + r'CrosswordPuzzleGame', + 'selectedWords', + ); } @override CrosswordPuzzleGame rebuild( - void Function(CrosswordPuzzleGameBuilder) updates) => - (toBuilder()..update(updates)).build(); + void Function(CrosswordPuzzleGameBuilder) updates, + ) => (toBuilder()..update(updates)).build(); @override CrosswordPuzzleGameBuilder toBuilder() => @@ -1379,12 +1679,13 @@ class CrosswordPuzzleGameBuilder MapBuilder>>? _alternateWords; MapBuilder>> - get alternateWords => _$this._alternateWords ??= + get alternateWords => + _$this._alternateWords ??= new MapBuilder>>(); set alternateWords( - MapBuilder>>? - alternateWords) => - _$this._alternateWords = alternateWords; + MapBuilder>>? + alternateWords, + ) => _$this._alternateWords = alternateWords; ListBuilder? _selectedWords; ListBuilder get selectedWords => @@ -1422,11 +1723,13 @@ class CrosswordPuzzleGameBuilder _$CrosswordPuzzleGame _build() { _$CrosswordPuzzleGame _$result; try { - _$result = _$v ?? + _$result = + _$v ?? new _$CrosswordPuzzleGame._( - crossword: crossword.build(), - alternateWords: alternateWords.build(), - selectedWords: selectedWords.build()); + crossword: crossword.build(), + alternateWords: alternateWords.build(), + selectedWords: selectedWords.build(), + ); } catch (_) { late String _$failedField; try { @@ -1438,7 +1741,10 @@ class CrosswordPuzzleGameBuilder selectedWords.build(); } catch (e) { throw new BuiltValueNestedFieldError( - r'CrosswordPuzzleGame', _$failedField, e.toString()); + r'CrosswordPuzzleGame', + _$failedField, + e.toString(), + ); } rethrow; } diff --git a/generate_crossword/step_09/lib/providers.dart b/generate_crossword/step_09/lib/providers.dart index 62e75c6222..d0900ceaff 100644 --- a/generate_crossword/step_09/lib/providers.dart +++ b/generate_crossword/step_09/lib/providers.dart @@ -27,10 +27,16 @@ Future> wordList(Ref ref) async { final re = RegExp(r'^[a-z]+$'); final words = await rootBundle.loadString('assets/words.txt'); - return const LineSplitter().convert(words).toBuiltSet().rebuild((b) => b - ..map((word) => word.toLowerCase().trim()) - ..where((word) => word.length > 2) - ..where((word) => re.hasMatch(word))); + return const LineSplitter() + .convert(words) + .toBuiltSet() + .rebuild( + (b) => + b + ..map((word) => word.toLowerCase().trim()) + ..where((word) => word.length > 2) + ..where((word) => re.hasMatch(word)), + ); } /// An enumeration for different sizes of [model.Crossword]s. @@ -41,10 +47,7 @@ enum CrosswordSize { xlarge(width: 160, height: 88), xxlarge(width: 500, height: 500); - const CrosswordSize({ - required this.width, - required this.height, - }); + const CrosswordSize({required this.width, required this.height}); final int width; final int height; @@ -69,8 +72,10 @@ class Size extends _$Size { Stream workQueue(Ref ref) async* { final size = ref.watch(sizeProvider); final wordListAsync = ref.watch(wordListProvider); - final emptyCrossword = - model.Crossword.crossword(width: size.width, height: size.height); + final emptyCrossword = model.Crossword.crossword( + width: size.width, + height: size.height, + ); final emptyWorkQueue = model.WorkQueue.from( crossword: emptyCrossword, candidateWords: BuiltSet(), @@ -78,11 +83,12 @@ Stream workQueue(Ref ref) async* { ); yield* wordListAsync.when( - data: (wordList) => exploreCrosswordSolutions( - crossword: emptyCrossword, - wordList: wordList, - maxWorkerCount: backgroundWorkerCount, - ), + data: + (wordList) => exploreCrosswordSolutions( + crossword: emptyCrossword, + wordList: wordList, + maxWorkerCount: backgroundWorkerCount, + ), error: (error, stackTrace) async* { debugPrint('Error loading word list: $error'); yield emptyWorkQueue; @@ -112,8 +118,10 @@ class Puzzle extends _$Puzzle { (_puzzle.crossword.height != size.height || _puzzle.crossword.width != size.width || _puzzle.crossword != workQueue.crossword)) { - compute(_puzzleFromCrosswordTrampoline, (workQueue.crossword, wordList)) - .then((puzzle) { + compute(_puzzleFromCrosswordTrampoline, ( + workQueue.crossword, + wordList, + )).then((puzzle) { _puzzle = puzzle; ref.invalidateSelf(); }); @@ -127,8 +135,12 @@ class Puzzle extends _$Puzzle { required String word, required model.Direction direction, }) async { - final candidate = await compute( - _puzzleSelectWordTrampoline, (_puzzle, location, word, direction)); + final candidate = await compute(_puzzleSelectWordTrampoline, ( + _puzzle, + location, + word, + direction, + )); if (candidate != null) { _puzzle = candidate; @@ -155,14 +167,10 @@ class Puzzle extends _$Puzzle { // unsendable reference to the [Puzzle] provider. Future _puzzleFromCrosswordTrampoline( - (model.Crossword, BuiltSet) args) async => + (model.Crossword, BuiltSet) args, +) async => model.CrosswordPuzzleGame.from(crossword: args.$1, candidateWords: args.$2); model.CrosswordPuzzleGame? _puzzleSelectWordTrampoline( - ( - model.CrosswordPuzzleGame, - model.Location, - String, - model.Direction - ) args) => - args.$1.selectWord(location: args.$2, word: args.$3, direction: args.$4); + (model.CrosswordPuzzleGame, model.Location, String, model.Direction) args, +) => args.$1.selectWord(location: args.$2, word: args.$3, direction: args.$4); diff --git a/generate_crossword/step_09/lib/providers.g.dart b/generate_crossword/step_09/lib/providers.g.dart index 18b1cd60e7..aa7fed7e1d 100644 --- a/generate_crossword/step_09/lib/providers.g.dart +++ b/generate_crossword/step_09/lib/providers.g.dart @@ -62,13 +62,13 @@ String _$puzzleHash() => r'dddad218b4318b008af2db67dd0ff284bcef3231'; @ProviderFor(Puzzle) final puzzleProvider = AutoDisposeNotifierProvider.internal( - Puzzle.new, - name: r'puzzleProvider', - debugGetCreateSourceHash: - const bool.fromEnvironment('dart.vm.product') ? null : _$puzzleHash, - dependencies: null, - allTransitiveDependencies: null, -); + Puzzle.new, + name: r'puzzleProvider', + debugGetCreateSourceHash: + const bool.fromEnvironment('dart.vm.product') ? null : _$puzzleHash, + dependencies: null, + allTransitiveDependencies: null, + ); typedef _$Puzzle = AutoDisposeNotifier; // ignore_for_file: type=lint diff --git a/generate_crossword/step_09/lib/widgets/crossword_generator_widget.dart b/generate_crossword/step_09/lib/widgets/crossword_generator_widget.dart index 306e7b31f4..0f1f92bceb 100644 --- a/generate_crossword/step_09/lib/widgets/crossword_generator_widget.dart +++ b/generate_crossword/step_09/lib/widgets/crossword_generator_widget.dart @@ -44,8 +44,9 @@ class CrosswordGeneratorWidget extends ConsumerWidget { final explorationCell = ref.watch( workQueueProvider.select( (workQueueAsync) => workQueueAsync.when( - data: (workQueue) => - workQueue.locationsToTry.keys.contains(location), + data: + (workQueue) => + workQueue.locationsToTry.keys.contains(location), error: (error, stackTrace) => false, loading: () => false, ), @@ -56,18 +57,20 @@ class CrosswordGeneratorWidget extends ConsumerWidget { return AnimatedContainer( duration: Durations.extralong1, curve: Curves.easeInOut, - color: explorationCell - ? Theme.of(context).colorScheme.primary - : Theme.of(context).colorScheme.onPrimary, + color: + explorationCell + ? Theme.of(context).colorScheme.primary + : Theme.of(context).colorScheme.onPrimary, child: Center( child: AnimatedDefaultTextStyle( duration: Durations.extralong1, curve: Curves.easeInOut, style: TextStyle( fontSize: 24, - color: explorationCell - ? Theme.of(context).colorScheme.onPrimary - : Theme.of(context).colorScheme.primary, + color: + explorationCell + ? Theme.of(context).colorScheme.onPrimary + : Theme.of(context).colorScheme.primary, ), child: Text('•'), // https://www.compart.com/en/unicode/U+2022 ), @@ -89,9 +92,11 @@ class CrosswordGeneratorWidget extends ConsumerWidget { foregroundDecoration: TableSpanDecoration( border: TableSpanBorder( leading: BorderSide( - color: Theme.of(context).colorScheme.onPrimaryContainer), + color: Theme.of(context).colorScheme.onPrimaryContainer, + ), trailing: BorderSide( - color: Theme.of(context).colorScheme.onPrimaryContainer), + color: Theme.of(context).colorScheme.onPrimaryContainer, + ), ), ), ); diff --git a/generate_crossword/step_09/lib/widgets/crossword_puzzle_app.dart b/generate_crossword/step_09/lib/widgets/crossword_puzzle_app.dart index f7a53ec2ef..0ca224c7ad 100644 --- a/generate_crossword/step_09/lib/widgets/crossword_puzzle_app.dart +++ b/generate_crossword/step_09/lib/widgets/crossword_puzzle_app.dart @@ -27,26 +27,29 @@ class CrosswordPuzzleApp extends StatelessWidget { title: Text('Crossword Puzzle'), ), body: SafeArea( - child: Consumer(builder: (context, ref, _) { - final workQueueAsync = ref.watch(workQueueProvider); - final puzzleSolved = - ref.watch(puzzleProvider.select((puzzle) => puzzle.solved)); + child: Consumer( + builder: (context, ref, _) { + final workQueueAsync = ref.watch(workQueueProvider); + final puzzleSolved = ref.watch( + puzzleProvider.select((puzzle) => puzzle.solved), + ); - return workQueueAsync.when( - data: (workQueue) { - if (puzzleSolved) { - return PuzzleCompletedWidget(); - } - if (workQueue.isCompleted && - workQueue.crossword.characters.isNotEmpty) { - return CrosswordPuzzleWidget(); - } - return CrosswordGeneratorWidget(); - }, - loading: () => Center(child: CircularProgressIndicator()), - error: (error, stackTrace) => Center(child: Text('$error')), - ); - }), + return workQueueAsync.when( + data: (workQueue) { + if (puzzleSolved) { + return PuzzleCompletedWidget(); + } + if (workQueue.isCompleted && + workQueue.crossword.characters.isNotEmpty) { + return CrosswordPuzzleWidget(); + } + return CrosswordGeneratorWidget(); + }, + loading: () => Center(child: CircularProgressIndicator()), + error: (error, stackTrace) => Center(child: Text('$error')), + ); + }, + ), ), ), ); @@ -67,19 +70,21 @@ class _EagerInitialization extends ConsumerWidget { class _CrosswordPuzzleAppMenu extends ConsumerWidget { @override Widget build(BuildContext context, WidgetRef ref) => MenuAnchor( - menuChildren: [ - for (final entry in CrosswordSize.values) - MenuItemButton( - onPressed: () => ref.read(sizeProvider.notifier).setSize(entry), - leadingIcon: entry == ref.watch(sizeProvider) + menuChildren: [ + for (final entry in CrosswordSize.values) + MenuItemButton( + onPressed: () => ref.read(sizeProvider.notifier).setSize(entry), + leadingIcon: + entry == ref.watch(sizeProvider) ? Icon(Icons.radio_button_checked_outlined) : Icon(Icons.radio_button_unchecked_outlined), - child: Text(entry.label), - ), - ], - builder: (context, controller, child) => IconButton( + child: Text(entry.label), + ), + ], + builder: + (context, controller, child) => IconButton( onPressed: () => controller.open(), icon: Icon(Icons.settings), ), - ); + ); } diff --git a/generate_crossword/step_09/lib/widgets/crossword_puzzle_widget.dart b/generate_crossword/step_09/lib/widgets/crossword_puzzle_widget.dart index 79aec2492c..706376d963 100644 --- a/generate_crossword/step_09/lib/widgets/crossword_puzzle_widget.dart +++ b/generate_crossword/step_09/lib/widgets/crossword_puzzle_widget.dart @@ -32,41 +32,60 @@ class CrosswordPuzzleWidget extends ConsumerWidget { return TableViewCell( child: Consumer( builder: (context, ref, _) { - final character = ref.watch(puzzleProvider - .select((puzzle) => puzzle.crossword.characters[location])); - final selectedCharacter = ref.watch(puzzleProvider.select((puzzle) => - puzzle.crosswordFromSelectedWords.characters[location])); - final alternateWords = ref - .watch(puzzleProvider.select((puzzle) => puzzle.alternateWords)); + final character = ref.watch( + puzzleProvider.select( + (puzzle) => puzzle.crossword.characters[location], + ), + ); + final selectedCharacter = ref.watch( + puzzleProvider.select( + (puzzle) => + puzzle.crosswordFromSelectedWords.characters[location], + ), + ); + final alternateWords = ref.watch( + puzzleProvider.select((puzzle) => puzzle.alternateWords), + ); if (character != null) { final acrossWord = character.acrossWord; var acrossWords = BuiltList(); if (acrossWord != null) { - acrossWords = acrossWords.rebuild((b) => b - ..add(acrossWord.word) - ..addAll(alternateWords[acrossWord.location] - ?[acrossWord.direction] ?? - []) - ..sort()); + acrossWords = acrossWords.rebuild( + (b) => + b + ..add(acrossWord.word) + ..addAll( + alternateWords[acrossWord.location]?[acrossWord + .direction] ?? + [], + ) + ..sort(), + ); } final downWord = character.downWord; var downWords = BuiltList(); if (downWord != null) { - downWords = downWords.rebuild((b) => b - ..add(downWord.word) - ..addAll(alternateWords[downWord.location] - ?[downWord.direction] ?? - []) - ..sort()); + downWords = downWords.rebuild( + (b) => + b + ..add(downWord.word) + ..addAll( + alternateWords[downWord.location]?[downWord + .direction] ?? + [], + ) + ..sort(), + ); } return MenuAnchor( builder: (context, controller, _) { return GestureDetector( - onTapDown: (details) => - controller.open(position: details.localPosition), + onTapDown: + (details) => + controller.open(position: details.localPosition), child: AnimatedContainer( duration: Durations.extralong1, curve: Curves.easeInOut, @@ -128,9 +147,11 @@ class CrosswordPuzzleWidget extends ConsumerWidget { foregroundDecoration: TableSpanDecoration( border: TableSpanBorder( leading: BorderSide( - color: Theme.of(context).colorScheme.onPrimaryContainer), + color: Theme.of(context).colorScheme.onPrimaryContainer, + ), trailing: BorderSide( - color: Theme.of(context).colorScheme.onPrimaryContainer), + color: Theme.of(context).colorScheme.onPrimaryContainer, + ), ), ), ); @@ -154,18 +175,29 @@ class _WordSelectMenuItem extends ConsumerWidget { Widget build(BuildContext context, WidgetRef ref) { final notifier = ref.read(puzzleProvider.notifier); return MenuItemButton( - onPressed: ref.watch(puzzleProvider.select((puzzle) => - puzzle.canSelectWord( - location: location, word: word, direction: direction))) - ? () => notifier.selectWord( - location: location, word: word, direction: direction) - : null, - leadingIcon: switch (direction) { - Direction.across => selectedCharacter?.acrossWord?.word == word, - Direction.down => selectedCharacter?.downWord?.word == word, - } - ? Icon(Icons.radio_button_checked_outlined) - : Icon(Icons.radio_button_unchecked_outlined), + onPressed: + ref.watch( + puzzleProvider.select( + (puzzle) => puzzle.canSelectWord( + location: location, + word: word, + direction: direction, + ), + ), + ) + ? () => notifier.selectWord( + location: location, + word: word, + direction: direction, + ) + : null, + leadingIcon: + switch (direction) { + Direction.across => selectedCharacter?.acrossWord?.word == word, + Direction.down => selectedCharacter?.downWord?.word == word, + } + ? Icon(Icons.radio_button_checked_outlined) + : Icon(Icons.radio_button_unchecked_outlined), child: Text(word), ); } diff --git a/generate_crossword/step_09/lib/widgets/puzzle_completed_widget.dart b/generate_crossword/step_09/lib/widgets/puzzle_completed_widget.dart index cfd658e738..182d34a6b0 100644 --- a/generate_crossword/step_09/lib/widgets/puzzle_completed_widget.dart +++ b/generate_crossword/step_09/lib/widgets/puzzle_completed_widget.dart @@ -12,10 +12,7 @@ class PuzzleCompletedWidget extends StatelessWidget { return Center( child: Text( 'Puzzle Completed!', - style: TextStyle( - fontSize: 36, - fontWeight: FontWeight.bold, - ), + style: TextStyle(fontSize: 36, fontWeight: FontWeight.bold), ), ); } diff --git a/generate_crossword/step_09/pubspec.yaml b/generate_crossword/step_09/pubspec.yaml index cb8178f942..23da5fd396 100644 --- a/generate_crossword/step_09/pubspec.yaml +++ b/generate_crossword/step_09/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: 'none' version: 0.1.0 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 dependencies: flutter: diff --git a/generate_crossword/step_09/test/model_test.dart b/generate_crossword/step_09/test/model_test.dart index 12e66f5401..690718d1f4 100644 --- a/generate_crossword/step_09/test/model_test.dart +++ b/generate_crossword/step_09/test/model_test.dart @@ -40,28 +40,27 @@ void main() { expect(crossword.words.isNotEmpty, true); expect(crossword.words.length, 2); expect( - crossword.words - .rebuild( - (b) => b.where((b) => b.direction == Direction.across), - ) - .length, - 1); + crossword.words + .rebuild((b) => b.where((b) => b.direction == Direction.across)) + .length, + 1, + ); expect( - crossword.words - .rebuild( - (b) => b.where((b) => b.direction == Direction.down), - ) - .length, - 1); + crossword.words + .rebuild((b) => b.where((b) => b.direction == Direction.down)) + .length, + 1, + ); expect(crossword.characters.isNotEmpty, isTrue); expect(crossword.characters.length, 7); expect( - crossword.characters[topLeft], - CrosswordCharacter.character( - acrossWord: thisWord, - downWord: thatWord, - character: 't', - )); + crossword.characters[topLeft], + CrosswordCharacter.character( + acrossWord: thisWord, + downWord: thatWord, + character: 't', + ), + ); expect(crossword.valid, isTrue); }); @@ -87,19 +86,17 @@ void main() { expect(crossword.words.isNotEmpty, true); expect( - crossword.words - .rebuild( - (b) => b.where((b) => b.direction == Direction.across), - ) - .length, - 2); + crossword.words + .rebuild((b) => b.where((b) => b.direction == Direction.across)) + .length, + 2, + ); expect( - crossword.words - .rebuild( - (b) => b.where((b) => b.direction == Direction.down), - ) - .isEmpty, - true); + crossword.words + .rebuild((b) => b.where((b) => b.direction == Direction.down)) + .isEmpty, + true, + ); expect(crossword.characters.isNotEmpty, isTrue); expect(crossword.characters.length, 8); expect(crossword.valid, isFalse); @@ -109,11 +106,12 @@ void main() { Crossword crossword = Crossword.crossword(width: 50, height: 50); expect(crossword.valid, true); - crossword = crossword.addWord( - direction: Direction.across, - location: Location.at(0, 0), - word: 'this', - )!; + crossword = + crossword.addWord( + direction: Direction.across, + location: Location.at(0, 0), + word: 'this', + )!; expect(crossword.valid, true); final crossword2 = crossword.addWord( @@ -175,17 +173,18 @@ void main() { final topLeft = Location.at(0, 0); - crossword = crossword - .addWord( - location: topLeft, - word: 'this', - direction: Direction.down, - )! - .addWord( - location: topLeft, - word: 'total', - direction: Direction.across, - )!; + crossword = + crossword + .addWord( + location: topLeft, + word: 'this', + direction: Direction.down, + )! + .addWord( + location: topLeft, + word: 'total', + direction: Direction.across, + )!; expect(crossword.valid, isTrue); @@ -236,77 +235,85 @@ void main() { }); test('Crossword is not valid with run-on across words', () { - Crossword crossword = - Crossword.crossword(width: 50, height: 50).rebuild((b) => b - ..words.addAll([ - CrosswordWord.word( - direction: Direction.across, - location: Location.at(0, 0), - word: 'word', - ), - CrosswordWord.word( - direction: Direction.across, - location: Location.at(4, 0), - word: 'another', - ), - ])); + Crossword crossword = Crossword.crossword(width: 50, height: 50).rebuild( + (b) => + b + ..words.addAll([ + CrosswordWord.word( + direction: Direction.across, + location: Location.at(0, 0), + word: 'word', + ), + CrosswordWord.word( + direction: Direction.across, + location: Location.at(4, 0), + word: 'another', + ), + ]), + ); expect(crossword.valid, false); }); test('Crossword is not valid with run-on down words', () { - Crossword crossword = - Crossword.crossword(width: 50, height: 50).rebuild((b) => b - ..words.addAll([ - CrosswordWord.word( - direction: Direction.down, - location: Location.at(0, 0), - word: 'word', - ), - CrosswordWord.word( - direction: Direction.down, - location: Location.at(0, 4), - word: 'another', - ), - ])); + Crossword crossword = Crossword.crossword(width: 50, height: 50).rebuild( + (b) => + b + ..words.addAll([ + CrosswordWord.word( + direction: Direction.down, + location: Location.at(0, 0), + word: 'word', + ), + CrosswordWord.word( + direction: Direction.down, + location: Location.at(0, 4), + word: 'another', + ), + ]), + ); expect(crossword.valid, false); }); test('Crossword is not valid with run-on across/down words', () { - Crossword crossword = - Crossword.crossword(width: 50, height: 50).rebuild((b) => b - ..words.addAll([ - CrosswordWord.word( - direction: Direction.across, - location: Location.at(0, 0), - word: 'word', - ), - CrosswordWord.word( - direction: Direction.down, - location: Location.at(4, 0), - word: 'another', - ), - ])); + Crossword crossword = Crossword.crossword(width: 50, height: 50).rebuild( + (b) => + b + ..words.addAll([ + CrosswordWord.word( + direction: Direction.across, + location: Location.at(0, 0), + word: 'word', + ), + CrosswordWord.word( + direction: Direction.down, + location: Location.at(4, 0), + word: 'another', + ), + ]), + ); expect(crossword.valid, false); }); test('Crossword is not valid with run-on down/across words', () { - Crossword? crossword = - Crossword.crossword(width: 50, height: 50).rebuild((b) => b - ..words.addAll([ - CrosswordWord.word( - direction: Direction.down, - location: Location.at(0, 0), - word: 'word', - ), - CrosswordWord.word( - direction: Direction.across, - location: Location.at(0, 4), - word: 'another', - ), - ])); + Crossword? crossword = Crossword.crossword(width: 50, height: 50).rebuild( + (b) => + b + ..words.addAll([ + CrosswordWord.word( + direction: Direction.down, + location: Location.at(0, 0), + word: 'word', + ), + CrosswordWord.word( + direction: Direction.across, + location: Location.at(0, 4), + word: 'another', + ), + ]), + ); expect(crossword.valid, false); }); @@ -314,36 +321,40 @@ void main() { test('Adding duplicate across words returns null', () { Crossword? crossword = Crossword.crossword(width: 50, height: 50); - crossword = crossword.addWord( - direction: Direction.across, - location: Location.at(0, 0), - word: 'duplicated', - )!; - - expect( + crossword = crossword.addWord( direction: Direction.across, - location: Location.at(4, 4), + location: Location.at(0, 0), word: 'duplicated', - ), - isNull); + )!; + + expect( + crossword.addWord( + direction: Direction.across, + location: Location.at(4, 4), + word: 'duplicated', + ), + isNull, + ); }); test('Crossword is not valid with duplicate across words', () { - Crossword? crossword = - Crossword.crossword(width: 50, height: 50).rebuild((b) => b - ..words.addAll([ - CrosswordWord.word( - direction: Direction.across, - location: Location.at(0, 0), - word: 'duplicated', - ), - CrosswordWord.word( - direction: Direction.across, - location: Location.at(4, 4), - word: 'duplicated', - ), - ])); + Crossword? crossword = Crossword.crossword(width: 50, height: 50).rebuild( + (b) => + b + ..words.addAll([ + CrosswordWord.word( + direction: Direction.across, + location: Location.at(0, 0), + word: 'duplicated', + ), + CrosswordWord.word( + direction: Direction.across, + location: Location.at(4, 4), + word: 'duplicated', + ), + ]), + ); expect(crossword.valid, false); }); @@ -351,36 +362,40 @@ void main() { test('Adding duplicate down words returns null', () { Crossword? crossword = Crossword.crossword(width: 50, height: 50); - crossword = crossword.addWord( - direction: Direction.down, - location: Location.at(0, 0), - word: 'duplicated', - )!; - - expect( + crossword = crossword.addWord( direction: Direction.down, - location: Location.at(4, 4), + location: Location.at(0, 0), word: 'duplicated', - ), - isNull); + )!; + + expect( + crossword.addWord( + direction: Direction.down, + location: Location.at(4, 4), + word: 'duplicated', + ), + isNull, + ); }); test('Crossword is not valid with duplicate down words', () { - Crossword? crossword = - Crossword.crossword(width: 50, height: 50).rebuild((b) => b - ..words.addAll([ - CrosswordWord.word( - direction: Direction.down, - location: Location.at(0, 0), - word: 'duplicated', - ), - CrosswordWord.word( - direction: Direction.down, - location: Location.at(4, 4), - word: 'duplicated', - ), - ])); + Crossword? crossword = Crossword.crossword(width: 50, height: 50).rebuild( + (b) => + b + ..words.addAll([ + CrosswordWord.word( + direction: Direction.down, + location: Location.at(0, 0), + word: 'duplicated', + ), + CrosswordWord.word( + direction: Direction.down, + location: Location.at(4, 4), + word: 'duplicated', + ), + ]), + ); expect(crossword.valid, false); }); @@ -394,10 +409,12 @@ void main() { ); expect(queue.locationsToTry.length, 1); - crossword = crossword.addWord( - direction: Direction.across, - location: Location.at(0, 0), - word: 'word')!; + crossword = + crossword.addWord( + direction: Direction.across, + location: Location.at(0, 0), + word: 'word', + )!; queue = WorkQueue.from( crossword: crossword, candidateWords: ['words', 'and', 'moar', 'wordz'], @@ -405,21 +422,26 @@ void main() { ); expect(queue.locationsToTry.length, 4); expect( - queue.locationsToTry.entries - .every((element) => element.value == Direction.down), - isTrue); + queue.locationsToTry.entries.every( + (element) => element.value == Direction.down, + ), + isTrue, + ); final entries = queue.locationsToTry.entries; expect(entries.every((element) => element.key.y == 0), isTrue); - expect(entries.map((element) => element.key.x).toBuiltSet(), - equals(BuiltSet([0, 1, 2, 3]))); + expect( + entries.map((element) => element.key.x).toBuiltSet(), + equals(BuiltSet([0, 1, 2, 3])), + ); }); test('WorkQueue from down word', () { - Crossword crossword = Crossword.crossword(width: 50, height: 50).addWord( - direction: Direction.down, - location: Location.at(0, 0), - word: 'word', - )!; + Crossword crossword = + Crossword.crossword(width: 50, height: 50).addWord( + direction: Direction.down, + location: Location.at(0, 0), + word: 'word', + )!; WorkQueue queue = WorkQueue.from( crossword: crossword, @@ -428,27 +450,32 @@ void main() { ); expect(queue.locationsToTry.length, 4); expect( - queue.locationsToTry.entries - .every((element) => element.value == Direction.across), - isTrue); + queue.locationsToTry.entries.every( + (element) => element.value == Direction.across, + ), + isTrue, + ); final entries = queue.locationsToTry.entries; expect(entries.every((element) => element.key.x == 0), isTrue); - expect(entries.map((element) => element.key.y).toBuiltSet(), - equals(BuiltSet([0, 1, 2, 3]))); + expect( + entries.map((element) => element.key.y).toBuiltSet(), + equals(BuiltSet([0, 1, 2, 3])), + ); }); test('WorkQueue from two words', () { - Crossword crossword = Crossword.crossword(width: 50, height: 50) - .addWord( - direction: Direction.across, - location: Location.at(0, 0), - word: 'word', - )! - .addWord( - direction: Direction.down, - location: Location.at(0, 0), - word: 'work', - )!; + Crossword crossword = + Crossword.crossword(width: 50, height: 50) + .addWord( + direction: Direction.across, + location: Location.at(0, 0), + word: 'word', + )! + .addWord( + direction: Direction.down, + location: Location.at(0, 0), + word: 'work', + )!; WorkQueue queue = WorkQueue.from( crossword: crossword, @@ -456,27 +483,31 @@ void main() { startLocation: Location.at(0, 0), ); expect( - queue.locationsToTry, - equals(BuiltMap({ + queue.locationsToTry, + equals( + BuiltMap({ Location.at(2, 0): Direction.down, Location.at(0, 2): Direction.across, Location.at(3, 0): Direction.down, Location.at(0, 3): Direction.across, - }))); + }), + ), + ); }); test('WorkQueue removes used words from candidate list', () { - Crossword crossword = Crossword.crossword(width: 50, height: 50) - .addWord( - direction: Direction.across, - location: Location.at(0, 0), - word: 'word', - )! - .addWord( - direction: Direction.down, - location: Location.at(0, 0), - word: 'work', - )!; + Crossword crossword = + Crossword.crossword(width: 50, height: 50) + .addWord( + direction: Direction.across, + location: Location.at(0, 0), + word: 'word', + )! + .addWord( + direction: Direction.down, + location: Location.at(0, 0), + word: 'work', + )!; WorkQueue queue = WorkQueue.from( crossword: crossword, @@ -500,16 +531,22 @@ void main() { word: 'works', location: Location.at(0, 0), direction: Direction.down, - ) + ), ], ); final re = RegExp('^[a-z]+\$'); final str = await rootBundle.loadString('assets/words.txt'); - final words = str.split('\n').toBuiltSet().rebuild((b) => b - ..map((str) => str.toLowerCase().trim()) - ..removeWhere((str) => str.length < 3) - ..removeWhere((str) => re.stringMatch(str) == null)); + final words = str + .split('\n') + .toBuiltSet() + .rebuild( + (b) => + b + ..map((str) => str.toLowerCase().trim()) + ..removeWhere((str) => str.length < 3) + ..removeWhere((str) => re.stringMatch(str) == null), + ); final puzzle = CrosswordPuzzleGame.from( crossword: crossword, @@ -520,132 +557,144 @@ void main() { expect(puzzle.alternateWords.keys.length, 1); expect(puzzle.alternateWords[Location.at(0, 0)]?.keys.length, 2); expect( - puzzle.alternateWords[Location.at(0, 0)]?[Direction.down]?.length, 4); + puzzle.alternateWords[Location.at(0, 0)]?[Direction.down]?.length, + 4, + ); expect( - puzzle.alternateWords[Location.at(0, 0)]?[Direction.across]?.length, 4); + puzzle.alternateWords[Location.at(0, 0)]?[Direction.across]?.length, + 4, + ); }); test('Allow non-overlapping words with requireOverlap: false', () { Crossword? crossword = Crossword.crossword(width: 50, height: 50); - crossword = crossword.addWord( - direction: Direction.across, - location: Location.at(0, 0), - word: 'word', - requireOverlap: false); - - if (crossword == null) fail("crossword shouldn't be null"); - - crossword = crossword.addWord( - direction: Direction.across, - location: Location.at(3, 3), - word: 'another', - requireOverlap: false); - - if (crossword == null) fail("crossword shouldn't be null"); - }); - - test( - 'Adding overlapping across words returns null with requireOverlap: false', - () { - Crossword? crossword = Crossword.crossword(width: 50, height: 50); - expect(crossword.valid, isTrue); - - final topLeft = Location.at(0, 0); - crossword = crossword.addWord( direction: Direction.across, - location: topLeft, - word: 'this', + location: Location.at(0, 0), + word: 'word', requireOverlap: false, ); + if (crossword == null) fail("crossword shouldn't be null"); - expect(crossword.valid, true); - final crossword2 = crossword.addWord( + crossword = crossword.addWord( direction: Direction.across, - location: topLeft, - word: 'that', + location: Location.at(3, 3), + word: 'another', requireOverlap: false, ); - expect(crossword2, isNull); - }); - - test('Adding overlapping down words returns null with requireOverlap: false', - () { - Crossword? crossword = Crossword.crossword(width: 50, height: 50); - expect(crossword.valid, true); - - final topLeft = Location.at(0, 0); - - crossword = crossword - .addWord( - location: topLeft, - word: 'this', - direction: Direction.down, - requireOverlap: false, - )! - .addWord( - location: topLeft, - word: 'total', - direction: Direction.across, - requireOverlap: false, - )!; - - expect(crossword.valid, isTrue); - - final crossword2 = crossword.addWord( - direction: Direction.down, - location: topLeft, - word: 'that', - requireOverlap: false, - ); - expect(crossword2, isNull); + if (crossword == null) fail("crossword shouldn't be null"); }); - test('Adding words out of bounds returns null with requireOverlap: false', - () { - final crossword = Crossword.crossword(width: 50, height: 50); + test( + 'Adding overlapping across words returns null with requireOverlap: false', + () { + Crossword? crossword = Crossword.crossword(width: 50, height: 50); + expect(crossword.valid, isTrue); - expect(crossword.valid, true); + final topLeft = Location.at(0, 0); - // Above the top of the board - final crossword1 = crossword.addWord( - direction: Direction.down, - location: Location.at(0, -1), - word: 'this', - requireOverlap: false, - ); - expect(crossword1, isNull); + crossword = crossword.addWord( + direction: Direction.across, + location: topLeft, + word: 'this', + requireOverlap: false, + ); + if (crossword == null) fail("crossword shouldn't be null"); + expect(crossword.valid, true); - // To the left of the board - final crossword2 = crossword.addWord( - direction: Direction.down, - location: Location.at(-1, 0), - word: 'that', - requireOverlap: false, - ); - expect(crossword2, isNull); + final crossword2 = crossword.addWord( + direction: Direction.across, + location: topLeft, + word: 'that', + requireOverlap: false, + ); + expect(crossword2, isNull); + }, + ); - // To the right of the board - final crossword3 = crossword.addWord( - direction: Direction.down, - location: Location.at(51, 0), - word: 'this', - requireOverlap: false, - ); - expect(crossword3, isNull); + test( + 'Adding overlapping down words returns null with requireOverlap: false', + () { + Crossword? crossword = Crossword.crossword(width: 50, height: 50); + + expect(crossword.valid, true); + + final topLeft = Location.at(0, 0); + + crossword = + crossword + .addWord( + location: topLeft, + word: 'this', + direction: Direction.down, + requireOverlap: false, + )! + .addWord( + location: topLeft, + word: 'total', + direction: Direction.across, + requireOverlap: false, + )!; + + expect(crossword.valid, isTrue); + + final crossword2 = crossword.addWord( + direction: Direction.down, + location: topLeft, + word: 'that', + requireOverlap: false, + ); + expect(crossword2, isNull); + }, + ); - // Below the bottom of the board - final crossword4 = crossword.addWord( - direction: Direction.down, - location: Location.at(0, 51), - word: 'that', - requireOverlap: false, - ); - expect(crossword4, isNull); - }); + test( + 'Adding words out of bounds returns null with requireOverlap: false', + () { + final crossword = Crossword.crossword(width: 50, height: 50); + + expect(crossword.valid, true); + + // Above the top of the board + final crossword1 = crossword.addWord( + direction: Direction.down, + location: Location.at(0, -1), + word: 'this', + requireOverlap: false, + ); + expect(crossword1, isNull); + + // To the left of the board + final crossword2 = crossword.addWord( + direction: Direction.down, + location: Location.at(-1, 0), + word: 'that', + requireOverlap: false, + ); + expect(crossword2, isNull); + + // To the right of the board + final crossword3 = crossword.addWord( + direction: Direction.down, + location: Location.at(51, 0), + word: 'this', + requireOverlap: false, + ); + expect(crossword3, isNull); + + // Below the bottom of the board + final crossword4 = crossword.addWord( + direction: Direction.down, + location: Location.at(0, 51), + word: 'that', + requireOverlap: false, + ); + expect(crossword4, isNull); + }, + ); test('CrosswordPuzzleGame allows alternate play', () async { final topLeft = Location.at(0, 0); @@ -676,10 +725,16 @@ void main() { final re = RegExp('^[a-z]+\$'); final str = await rootBundle.loadString('assets/words.txt'); - final words = str.split('\n').toBuiltSet().rebuild((b) => b - ..map((str) => str.toLowerCase().trim()) - ..removeWhere((str) => str.length < 3) - ..removeWhere((str) => re.stringMatch(str) == null)); + final words = str + .split('\n') + .toBuiltSet() + .rebuild( + (b) => + b + ..map((str) => str.toLowerCase().trim()) + ..removeWhere((str) => str.length < 3) + ..removeWhere((str) => re.stringMatch(str) == null), + ); CrosswordPuzzleGame? puzzle = CrosswordPuzzleGame.from( crossword: crossword, @@ -702,17 +757,19 @@ void main() { } puzzle = puzzle.selectWord( - location: topLeft, - word: topLeftAcrossAlternates.first, - direction: Direction.across); + location: topLeft, + word: topLeftAcrossAlternates.first, + direction: Direction.across, + ); if (puzzle == null) { fail('puzzle should not be null'); } puzzle = puzzle.selectWord( - location: downBy4, - word: downBy4AcrossAlternates.first, - direction: Direction.across); + location: downBy4, + word: downBy4AcrossAlternates.first, + direction: Direction.across, + ); if (puzzle == null) { fail('puzzle should not be null'); } @@ -749,10 +806,16 @@ void main() { final re = RegExp('^[a-z]+\$'); final str = await rootBundle.loadString('assets/words.txt'); - final words = str.split('\n').toBuiltSet().rebuild((b) => b - ..map((str) => str.toLowerCase().trim()) - ..removeWhere((str) => str.length < 3) - ..removeWhere((str) => re.stringMatch(str) == null)); + final words = str + .split('\n') + .toBuiltSet() + .rebuild( + (b) => + b + ..map((str) => str.toLowerCase().trim()) + ..removeWhere((str) => str.length < 3) + ..removeWhere((str) => re.stringMatch(str) == null), + ); CrosswordPuzzleGame? puzzle = CrosswordPuzzleGame.from( crossword: crossword, @@ -760,19 +823,28 @@ void main() { ); puzzle = puzzle.selectWord( - location: topLeft, word: 'word', direction: Direction.across); + location: topLeft, + word: 'word', + direction: Direction.across, + ); if (puzzle == null) { fail('puzzle should not be null'); } puzzle = puzzle.selectWord( - location: topLeft, word: 'works', direction: Direction.down); + location: topLeft, + word: 'works', + direction: Direction.down, + ); if (puzzle == null) { fail('puzzle should not be null'); } puzzle = puzzle.selectWord( - location: downBy4, word: 'silent', direction: Direction.across); + location: downBy4, + word: 'silent', + direction: Direction.across, + ); if (puzzle == null) { fail('puzzle should not be null'); } diff --git a/github-client/step_03/lib/main.dart b/github-client/step_03/lib/main.dart index daa28234e5..d81639ea77 100644 --- a/github-client/step_03/lib/main.dart +++ b/github-client/step_03/lib/main.dart @@ -119,9 +119,7 @@ class _MyHomePageState extends State { // wireframe for each widget. mainAxisAlignment: MainAxisAlignment.center, children: [ - const Text( - 'You have pushed the button this many times:', - ), + const Text('You have pushed the button this many times:'), Text( '$_counter', style: Theme.of(context).textTheme.headlineMedium, diff --git a/github-client/step_03/pubspec.yaml b/github-client/step_03/pubspec.yaml index b4d57826a5..6bddde2c65 100644 --- a/github-client/step_03/pubspec.yaml +++ b/github-client/step_03/pubspec.yaml @@ -19,7 +19,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev version: 1.0.0+1 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 # Dependencies specify other packages that your package needs in order to work. # To automatically upgrade your package dependencies to the latest versions diff --git a/github-client/step_04/lib/main.dart b/github-client/step_04/lib/main.dart index 59c8b9d229..a3df1891d4 100644 --- a/github-client/step_04/lib/main.dart +++ b/github-client/step_04/lib/main.dart @@ -46,15 +46,8 @@ class MyHomePage extends StatelessWidget { return GithubLoginWidget( builder: (context, httpClient) { return Scaffold( - appBar: AppBar( - title: Text(title), - elevation: 2, - ), - body: const Center( - child: Text( - 'You are logged in to GitHub!', - ), - ), + appBar: AppBar(title: Text(title), elevation: 2), + body: const Center(child: Text('You are logged in to GitHub!')), ); }, githubClientId: githubClientId, diff --git a/github-client/step_04/lib/src/github_login.dart b/github-client/step_04/lib/src/github_login.dart index fbd47c777d..a641e5242a 100644 --- a/github-client/step_04/lib/src/github_login.dart +++ b/github-client/step_04/lib/src/github_login.dart @@ -19,8 +19,9 @@ import 'package:http/http.dart' as http; import 'package:oauth2/oauth2.dart' as oauth2; import 'package:url_launcher/url_launcher.dart'; -final _authorizationEndpoint = - Uri.parse('https://github.com/login/oauth/authorize'); +final _authorizationEndpoint = Uri.parse( + 'https://github.com/login/oauth/authorize', +); final _tokenEndpoint = Uri.parse('https://github.com/login/oauth/access_token'); class GithubLoginWidget extends StatefulWidget { @@ -40,8 +41,8 @@ class GithubLoginWidget extends StatefulWidget { State createState() => _GithubLoginState(); } -typedef AuthenticatedBuilder = Widget Function( - BuildContext context, oauth2.Client client); +typedef AuthenticatedBuilder = + Widget Function(BuildContext context, oauth2.Client client); class _GithubLoginState extends State { HttpServer? _redirectServer; @@ -55,10 +56,7 @@ class _GithubLoginState extends State { } return Scaffold( - appBar: AppBar( - title: const Text('Github Login'), - elevation: 2, - ), + appBar: AppBar(title: const Text('Github Login'), elevation: 2), body: Center( child: ElevatedButton( onPressed: () async { @@ -66,7 +64,8 @@ class _GithubLoginState extends State { // Bind to an ephemeral port on localhost _redirectServer = await HttpServer.bind('localhost', 0); var authenticatedHttpClient = await _getOAuth2Client( - Uri.parse('http://localhost:${_redirectServer!.port}/auth')); + Uri.parse('http://localhost:${_redirectServer!.port}/auth'), + ); setState(() { _client = authenticatedHttpClient; }); @@ -80,8 +79,9 @@ class _GithubLoginState extends State { Future _getOAuth2Client(Uri redirectUrl) async { if (widget.githubClientId.isEmpty || widget.githubClientSecret.isEmpty) { throw const GithubLoginException( - 'githubClientId and githubClientSecret must be not empty. ' - 'See `lib/github_oauth_credentials.dart` for more detail.'); + 'githubClientId and githubClientSecret must be not empty. ' + 'See `lib/github_oauth_credentials.dart` for more detail.', + ); } var grant = oauth2.AuthorizationCodeGrant( widget.githubClientId, @@ -90,13 +90,16 @@ class _GithubLoginState extends State { secret: widget.githubClientSecret, httpClient: _JsonAcceptingHttpClient(), ); - var authorizationUrl = - grant.getAuthorizationUrl(redirectUrl, scopes: widget.githubScopes); + var authorizationUrl = grant.getAuthorizationUrl( + redirectUrl, + scopes: widget.githubScopes, + ); await _redirect(authorizationUrl); var responseQueryParameters = await _listen(); - var client = - await grant.handleAuthorizationResponse(responseQueryParameters); + var client = await grant.handleAuthorizationResponse( + responseQueryParameters, + ); return client; } diff --git a/github-client/step_04/pubspec.yaml b/github-client/step_04/pubspec.yaml index 5a4f3b3c2b..5d87900bbc 100644 --- a/github-client/step_04/pubspec.yaml +++ b/github-client/step_04/pubspec.yaml @@ -19,7 +19,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev version: 1.0.0+1 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 # Dependencies specify other packages that your package needs in order to work. # To automatically upgrade your package dependencies to the latest versions diff --git a/github-client/step_05/lib/main.dart b/github-client/step_05/lib/main.dart index 8d5c7fa013..6d52705a6c 100644 --- a/github-client/step_05/lib/main.dart +++ b/github-client/step_05/lib/main.dart @@ -51,10 +51,7 @@ class MyHomePage extends StatelessWidget { future: viewerDetail(httpClient.credentials.accessToken), builder: (context, snapshot) { return Scaffold( - appBar: AppBar( - title: Text(title), - elevation: 2, - ), + appBar: AppBar(title: Text(title), elevation: 2), body: Center( child: Text( snapshot.hasData diff --git a/github-client/step_05/lib/src/github_login.dart b/github-client/step_05/lib/src/github_login.dart index fbd47c777d..a641e5242a 100644 --- a/github-client/step_05/lib/src/github_login.dart +++ b/github-client/step_05/lib/src/github_login.dart @@ -19,8 +19,9 @@ import 'package:http/http.dart' as http; import 'package:oauth2/oauth2.dart' as oauth2; import 'package:url_launcher/url_launcher.dart'; -final _authorizationEndpoint = - Uri.parse('https://github.com/login/oauth/authorize'); +final _authorizationEndpoint = Uri.parse( + 'https://github.com/login/oauth/authorize', +); final _tokenEndpoint = Uri.parse('https://github.com/login/oauth/access_token'); class GithubLoginWidget extends StatefulWidget { @@ -40,8 +41,8 @@ class GithubLoginWidget extends StatefulWidget { State createState() => _GithubLoginState(); } -typedef AuthenticatedBuilder = Widget Function( - BuildContext context, oauth2.Client client); +typedef AuthenticatedBuilder = + Widget Function(BuildContext context, oauth2.Client client); class _GithubLoginState extends State { HttpServer? _redirectServer; @@ -55,10 +56,7 @@ class _GithubLoginState extends State { } return Scaffold( - appBar: AppBar( - title: const Text('Github Login'), - elevation: 2, - ), + appBar: AppBar(title: const Text('Github Login'), elevation: 2), body: Center( child: ElevatedButton( onPressed: () async { @@ -66,7 +64,8 @@ class _GithubLoginState extends State { // Bind to an ephemeral port on localhost _redirectServer = await HttpServer.bind('localhost', 0); var authenticatedHttpClient = await _getOAuth2Client( - Uri.parse('http://localhost:${_redirectServer!.port}/auth')); + Uri.parse('http://localhost:${_redirectServer!.port}/auth'), + ); setState(() { _client = authenticatedHttpClient; }); @@ -80,8 +79,9 @@ class _GithubLoginState extends State { Future _getOAuth2Client(Uri redirectUrl) async { if (widget.githubClientId.isEmpty || widget.githubClientSecret.isEmpty) { throw const GithubLoginException( - 'githubClientId and githubClientSecret must be not empty. ' - 'See `lib/github_oauth_credentials.dart` for more detail.'); + 'githubClientId and githubClientSecret must be not empty. ' + 'See `lib/github_oauth_credentials.dart` for more detail.', + ); } var grant = oauth2.AuthorizationCodeGrant( widget.githubClientId, @@ -90,13 +90,16 @@ class _GithubLoginState extends State { secret: widget.githubClientSecret, httpClient: _JsonAcceptingHttpClient(), ); - var authorizationUrl = - grant.getAuthorizationUrl(redirectUrl, scopes: widget.githubScopes); + var authorizationUrl = grant.getAuthorizationUrl( + redirectUrl, + scopes: widget.githubScopes, + ); await _redirect(authorizationUrl); var responseQueryParameters = await _listen(); - var client = - await grant.handleAuthorizationResponse(responseQueryParameters); + var client = await grant.handleAuthorizationResponse( + responseQueryParameters, + ); return client; } diff --git a/github-client/step_05/pubspec.yaml b/github-client/step_05/pubspec.yaml index 71e3e689ce..7a03662b26 100644 --- a/github-client/step_05/pubspec.yaml +++ b/github-client/step_05/pubspec.yaml @@ -19,7 +19,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev version: 1.0.0+1 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 # Dependencies specify other packages that your package needs in order to work. # To automatically upgrade your package dependencies to the latest versions diff --git a/github-client/step_06/lib/main.dart b/github-client/step_06/lib/main.dart index 795c44aa44..9a374dc760 100644 --- a/github-client/step_06/lib/main.dart +++ b/github-client/step_06/lib/main.dart @@ -53,10 +53,7 @@ class MyHomePage extends StatelessWidget { future: viewerDetail(httpClient.credentials.accessToken), builder: (context, snapshot) { return Scaffold( - appBar: AppBar( - title: Text(title), - elevation: 2, - ), + appBar: AppBar(title: Text(title), elevation: 2), body: Center( child: Text( snapshot.hasData diff --git a/github-client/step_06/lib/src/github_login.dart b/github-client/step_06/lib/src/github_login.dart index fbd47c777d..a641e5242a 100644 --- a/github-client/step_06/lib/src/github_login.dart +++ b/github-client/step_06/lib/src/github_login.dart @@ -19,8 +19,9 @@ import 'package:http/http.dart' as http; import 'package:oauth2/oauth2.dart' as oauth2; import 'package:url_launcher/url_launcher.dart'; -final _authorizationEndpoint = - Uri.parse('https://github.com/login/oauth/authorize'); +final _authorizationEndpoint = Uri.parse( + 'https://github.com/login/oauth/authorize', +); final _tokenEndpoint = Uri.parse('https://github.com/login/oauth/access_token'); class GithubLoginWidget extends StatefulWidget { @@ -40,8 +41,8 @@ class GithubLoginWidget extends StatefulWidget { State createState() => _GithubLoginState(); } -typedef AuthenticatedBuilder = Widget Function( - BuildContext context, oauth2.Client client); +typedef AuthenticatedBuilder = + Widget Function(BuildContext context, oauth2.Client client); class _GithubLoginState extends State { HttpServer? _redirectServer; @@ -55,10 +56,7 @@ class _GithubLoginState extends State { } return Scaffold( - appBar: AppBar( - title: const Text('Github Login'), - elevation: 2, - ), + appBar: AppBar(title: const Text('Github Login'), elevation: 2), body: Center( child: ElevatedButton( onPressed: () async { @@ -66,7 +64,8 @@ class _GithubLoginState extends State { // Bind to an ephemeral port on localhost _redirectServer = await HttpServer.bind('localhost', 0); var authenticatedHttpClient = await _getOAuth2Client( - Uri.parse('http://localhost:${_redirectServer!.port}/auth')); + Uri.parse('http://localhost:${_redirectServer!.port}/auth'), + ); setState(() { _client = authenticatedHttpClient; }); @@ -80,8 +79,9 @@ class _GithubLoginState extends State { Future _getOAuth2Client(Uri redirectUrl) async { if (widget.githubClientId.isEmpty || widget.githubClientSecret.isEmpty) { throw const GithubLoginException( - 'githubClientId and githubClientSecret must be not empty. ' - 'See `lib/github_oauth_credentials.dart` for more detail.'); + 'githubClientId and githubClientSecret must be not empty. ' + 'See `lib/github_oauth_credentials.dart` for more detail.', + ); } var grant = oauth2.AuthorizationCodeGrant( widget.githubClientId, @@ -90,13 +90,16 @@ class _GithubLoginState extends State { secret: widget.githubClientSecret, httpClient: _JsonAcceptingHttpClient(), ); - var authorizationUrl = - grant.getAuthorizationUrl(redirectUrl, scopes: widget.githubScopes); + var authorizationUrl = grant.getAuthorizationUrl( + redirectUrl, + scopes: widget.githubScopes, + ); await _redirect(authorizationUrl); var responseQueryParameters = await _listen(); - var client = - await grant.handleAuthorizationResponse(responseQueryParameters); + var client = await grant.handleAuthorizationResponse( + responseQueryParameters, + ); return client; } diff --git a/github-client/step_06/pubspec.yaml b/github-client/step_06/pubspec.yaml index 55e6a59332..05ba280901 100644 --- a/github-client/step_06/pubspec.yaml +++ b/github-client/step_06/pubspec.yaml @@ -19,7 +19,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev version: 1.0.0+1 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 # Dependencies specify other packages that your package needs in order to work. # To automatically upgrade your package dependencies to the latest versions diff --git a/github-client/step_07/lib/main.dart b/github-client/step_07/lib/main.dart index 7b56ff767d..0940152697 100644 --- a/github-client/step_07/lib/main.dart +++ b/github-client/step_07/lib/main.dart @@ -51,10 +51,7 @@ class MyHomePage extends StatelessWidget { builder: (context, httpClient) { WindowToFront.activate(); return Scaffold( - appBar: AppBar( - title: Text(title), - elevation: 2, - ), + appBar: AppBar(title: Text(title), elevation: 2), body: GitHubSummary( gitHub: _getGitHub(httpClient.credentials.accessToken), ), diff --git a/github-client/step_07/lib/src/github_login.dart b/github-client/step_07/lib/src/github_login.dart index fbd47c777d..a641e5242a 100644 --- a/github-client/step_07/lib/src/github_login.dart +++ b/github-client/step_07/lib/src/github_login.dart @@ -19,8 +19,9 @@ import 'package:http/http.dart' as http; import 'package:oauth2/oauth2.dart' as oauth2; import 'package:url_launcher/url_launcher.dart'; -final _authorizationEndpoint = - Uri.parse('https://github.com/login/oauth/authorize'); +final _authorizationEndpoint = Uri.parse( + 'https://github.com/login/oauth/authorize', +); final _tokenEndpoint = Uri.parse('https://github.com/login/oauth/access_token'); class GithubLoginWidget extends StatefulWidget { @@ -40,8 +41,8 @@ class GithubLoginWidget extends StatefulWidget { State createState() => _GithubLoginState(); } -typedef AuthenticatedBuilder = Widget Function( - BuildContext context, oauth2.Client client); +typedef AuthenticatedBuilder = + Widget Function(BuildContext context, oauth2.Client client); class _GithubLoginState extends State { HttpServer? _redirectServer; @@ -55,10 +56,7 @@ class _GithubLoginState extends State { } return Scaffold( - appBar: AppBar( - title: const Text('Github Login'), - elevation: 2, - ), + appBar: AppBar(title: const Text('Github Login'), elevation: 2), body: Center( child: ElevatedButton( onPressed: () async { @@ -66,7 +64,8 @@ class _GithubLoginState extends State { // Bind to an ephemeral port on localhost _redirectServer = await HttpServer.bind('localhost', 0); var authenticatedHttpClient = await _getOAuth2Client( - Uri.parse('http://localhost:${_redirectServer!.port}/auth')); + Uri.parse('http://localhost:${_redirectServer!.port}/auth'), + ); setState(() { _client = authenticatedHttpClient; }); @@ -80,8 +79,9 @@ class _GithubLoginState extends State { Future _getOAuth2Client(Uri redirectUrl) async { if (widget.githubClientId.isEmpty || widget.githubClientSecret.isEmpty) { throw const GithubLoginException( - 'githubClientId and githubClientSecret must be not empty. ' - 'See `lib/github_oauth_credentials.dart` for more detail.'); + 'githubClientId and githubClientSecret must be not empty. ' + 'See `lib/github_oauth_credentials.dart` for more detail.', + ); } var grant = oauth2.AuthorizationCodeGrant( widget.githubClientId, @@ -90,13 +90,16 @@ class _GithubLoginState extends State { secret: widget.githubClientSecret, httpClient: _JsonAcceptingHttpClient(), ); - var authorizationUrl = - grant.getAuthorizationUrl(redirectUrl, scopes: widget.githubScopes); + var authorizationUrl = grant.getAuthorizationUrl( + redirectUrl, + scopes: widget.githubScopes, + ); await _redirect(authorizationUrl); var responseQueryParameters = await _listen(); - var client = - await grant.handleAuthorizationResponse(responseQueryParameters); + var client = await grant.handleAuthorizationResponse( + responseQueryParameters, + ); return client; } diff --git a/github-client/step_07/lib/src/github_summary.dart b/github-client/step_07/lib/src/github_summary.dart index f0b7c7d3b1..f65b4c93dd 100644 --- a/github-client/step_07/lib/src/github_summary.dart +++ b/github-client/step_07/lib/src/github_summary.dart @@ -106,8 +106,9 @@ class _RepositoriesListState extends State { itemBuilder: (context, index) { var repository = repositories[index]; return ListTile( - title: - Text('${repository.owner?.login ?? ''}/${repository.name}'), + title: Text( + '${repository.owner?.login ?? ''}/${repository.name}', + ), subtitle: Text(repository.description), onTap: () => _launchUrl(this, repository.htmlUrl), ); @@ -154,9 +155,11 @@ class _AssignedIssuesListState extends State { var assignedIssue = assignedIssues[index]; return ListTile( title: Text(assignedIssue.title), - subtitle: Text('${_nameWithOwner(assignedIssue)} ' - 'Issue #${assignedIssue.number} ' - 'opened by ${assignedIssue.user?.login ?? ''}'), + subtitle: Text( + '${_nameWithOwner(assignedIssue)} ' + 'Issue #${assignedIssue.number} ' + 'opened by ${assignedIssue.user?.login ?? ''}', + ), onTap: () => _launchUrl(this, assignedIssue.htmlUrl), ); }, @@ -184,9 +187,10 @@ class _PullRequestsListState extends State { @override initState() { super.initState(); - _pullRequests = widget.gitHub.pullRequests - .list(RepositorySlug('flutter', 'flutter')) - .toList(); + _pullRequests = + widget.gitHub.pullRequests + .list(RepositorySlug('flutter', 'flutter')) + .toList(); } late Future> _pullRequests; @@ -209,10 +213,12 @@ class _PullRequestsListState extends State { var pullRequest = pullRequests[index]; return ListTile( title: Text(pullRequest.title ?? ''), - subtitle: Text('flutter/flutter ' - 'PR #${pullRequest.number} ' - 'opened by ${pullRequest.user?.login ?? ''} ' - '(${pullRequest.state?.toLowerCase() ?? ''})'), + subtitle: Text( + 'flutter/flutter ' + 'PR #${pullRequest.number} ' + 'opened by ${pullRequest.user?.login ?? ''} ' + '(${pullRequest.state?.toLowerCase() ?? ''})', + ), onTap: () => _launchUrl(this, pullRequest.htmlUrl ?? ''), ); }, @@ -230,18 +236,19 @@ Future _launchUrl(State state, String url) async { if (state.mounted) { return showDialog( context: state.context, - builder: (context) => AlertDialog( - title: const Text('Navigation error'), - content: Text('Could not launch $url'), - actions: [ - TextButton( - onPressed: () { - Navigator.of(context).pop(); - }, - child: const Text('Close'), + builder: + (context) => AlertDialog( + title: const Text('Navigation error'), + content: Text('Could not launch $url'), + actions: [ + TextButton( + onPressed: () { + Navigator.of(context).pop(); + }, + child: const Text('Close'), + ), + ], ), - ], - ), ); } } diff --git a/github-client/step_07/pubspec.yaml b/github-client/step_07/pubspec.yaml index ab0cef8d62..85ebe44084 100644 --- a/github-client/step_07/pubspec.yaml +++ b/github-client/step_07/pubspec.yaml @@ -19,7 +19,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev version: 1.0.0+1 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 # Dependencies specify other packages that your package needs in order to work. # To automatically upgrade your package dependencies to the latest versions diff --git a/github-client/window_to_front/pubspec.yaml b/github-client/window_to_front/pubspec.yaml index 3892b0866a..7e4c04475a 100644 --- a/github-client/window_to_front/pubspec.yaml +++ b/github-client/window_to_front/pubspec.yaml @@ -18,7 +18,7 @@ version: 0.0.1 homepage: environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 flutter: '>=3.3.0' dependencies: diff --git a/google-maps-in-flutter/step_3/lib/main.dart b/google-maps-in-flutter/step_3/lib/main.dart index b4d67e5f23..16596796bf 100644 --- a/google-maps-in-flutter/step_3/lib/main.dart +++ b/google-maps-in-flutter/step_3/lib/main.dart @@ -121,9 +121,7 @@ class _MyHomePageState extends State { // wireframe for each widget. mainAxisAlignment: MainAxisAlignment.center, children: [ - const Text( - 'You have pushed the button this many times:', - ), + const Text('You have pushed the button this many times:'), Text( '$_counter', style: Theme.of(context).textTheme.headlineMedium, diff --git a/google-maps-in-flutter/step_3/pubspec.yaml b/google-maps-in-flutter/step_3/pubspec.yaml index 2121fc2335..55a905dacb 100644 --- a/google-maps-in-flutter/step_3/pubspec.yaml +++ b/google-maps-in-flutter/step_3/pubspec.yaml @@ -19,7 +19,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev version: 1.0.0+1 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 # Dependencies specify other packages that your package needs in order to work. # To automatically upgrade your package dependencies to the latest versions diff --git a/google-maps-in-flutter/step_4/lib/main.dart b/google-maps-in-flutter/step_4/lib/main.dart index 3700bf99df..035f7e0634 100644 --- a/google-maps-in-flutter/step_4/lib/main.dart +++ b/google-maps-in-flutter/step_4/lib/main.dart @@ -40,21 +40,12 @@ class _MyAppState extends State { @override Widget build(BuildContext context) { return MaterialApp( - theme: ThemeData( - useMaterial3: true, - colorSchemeSeed: Colors.green[700], - ), + theme: ThemeData(useMaterial3: true, colorSchemeSeed: Colors.green[700]), home: Scaffold( - appBar: AppBar( - title: const Text('Maps Sample App'), - elevation: 2, - ), + appBar: AppBar(title: const Text('Maps Sample App'), elevation: 2), body: GoogleMap( onMapCreated: _onMapCreated, - initialCameraPosition: CameraPosition( - target: _center, - zoom: 11.0, - ), + initialCameraPosition: CameraPosition(target: _center, zoom: 11.0), ), ), ); diff --git a/google-maps-in-flutter/step_4/pubspec.yaml b/google-maps-in-flutter/step_4/pubspec.yaml index 2121fc2335..55a905dacb 100644 --- a/google-maps-in-flutter/step_4/pubspec.yaml +++ b/google-maps-in-flutter/step_4/pubspec.yaml @@ -19,7 +19,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev version: 1.0.0+1 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 # Dependencies specify other packages that your package needs in order to work. # To automatically upgrade your package dependencies to the latest versions diff --git a/google-maps-in-flutter/step_5/lib/main.dart b/google-maps-in-flutter/step_5/lib/main.dart index 1af3e11d54..09dd9f04cd 100644 --- a/google-maps-in-flutter/step_5/lib/main.dart +++ b/google-maps-in-flutter/step_5/lib/main.dart @@ -39,10 +39,7 @@ class _MyAppState extends State { final marker = Marker( markerId: MarkerId(office.name), position: LatLng(office.lat, office.lng), - infoWindow: InfoWindow( - title: office.name, - snippet: office.address, - ), + infoWindow: InfoWindow(title: office.name, snippet: office.address), ); _markers[office.name] = marker; } @@ -52,10 +49,7 @@ class _MyAppState extends State { @override Widget build(BuildContext context) { return MaterialApp( - theme: ThemeData( - useMaterial3: true, - colorSchemeSeed: Colors.green[700], - ), + theme: ThemeData(useMaterial3: true, colorSchemeSeed: Colors.green[700]), home: Scaffold( appBar: AppBar( title: const Text('Google Office Locations'), diff --git a/google-maps-in-flutter/step_5/lib/src/locations.dart b/google-maps-in-flutter/step_5/lib/src/locations.dart index 8b36f93449..cdc4a01ac8 100644 --- a/google-maps-in-flutter/step_5/lib/src/locations.dart +++ b/google-maps-in-flutter/step_5/lib/src/locations.dart @@ -25,10 +25,7 @@ part 'locations.g.dart'; @JsonSerializable() class LatLng { - LatLng({ - required this.lat, - required this.lng, - }); + LatLng({required this.lat, required this.lng}); factory LatLng.fromJson(Map json) => _$LatLngFromJson(json); Map toJson() => _$LatLngToJson(this); @@ -83,10 +80,7 @@ class Office { @JsonSerializable() class Locations { - Locations({ - required this.offices, - required this.regions, - }); + Locations({required this.offices, required this.regions}); factory Locations.fromJson(Map json) => _$LocationsFromJson(json); @@ -104,7 +98,8 @@ Future getGoogleOffices() async { final response = await http.get(Uri.parse(googleLocationsURL)); if (response.statusCode == 200) { return Locations.fromJson( - json.decode(response.body) as Map); + json.decode(response.body) as Map, + ); } } catch (e) { if (kDebugMode) { @@ -114,8 +109,7 @@ Future getGoogleOffices() async { // Fallback for when the above HTTP request fails. return Locations.fromJson( - json.decode( - await rootBundle.loadString('assets/locations.json'), - ) as Map, + json.decode(await rootBundle.loadString('assets/locations.json')) + as Map, ); } diff --git a/google-maps-in-flutter/step_5/lib/src/locations.g.dart b/google-maps-in-flutter/step_5/lib/src/locations.g.dart index 64cd86d81d..685fbd1d14 100644 --- a/google-maps-in-flutter/step_5/lib/src/locations.g.dart +++ b/google-maps-in-flutter/step_5/lib/src/locations.g.dart @@ -23,61 +23,63 @@ part of 'locations.dart'; // ************************************************************************** LatLng _$LatLngFromJson(Map json) => LatLng( - lat: (json['lat'] as num).toDouble(), - lng: (json['lng'] as num).toDouble(), - ); + lat: (json['lat'] as num).toDouble(), + lng: (json['lng'] as num).toDouble(), +); Map _$LatLngToJson(LatLng instance) => { - 'lat': instance.lat, - 'lng': instance.lng, - }; + 'lat': instance.lat, + 'lng': instance.lng, +}; Region _$RegionFromJson(Map json) => Region( - coords: LatLng.fromJson(json['coords'] as Map), - id: json['id'] as String, - name: json['name'] as String, - zoom: (json['zoom'] as num).toDouble(), - ); + coords: LatLng.fromJson(json['coords'] as Map), + id: json['id'] as String, + name: json['name'] as String, + zoom: (json['zoom'] as num).toDouble(), +); Map _$RegionToJson(Region instance) => { - 'coords': instance.coords, - 'id': instance.id, - 'name': instance.name, - 'zoom': instance.zoom, - }; + 'coords': instance.coords, + 'id': instance.id, + 'name': instance.name, + 'zoom': instance.zoom, +}; Office _$OfficeFromJson(Map json) => Office( - address: json['address'] as String, - id: json['id'] as String, - image: json['image'] as String, - lat: (json['lat'] as num).toDouble(), - lng: (json['lng'] as num).toDouble(), - name: json['name'] as String, - phone: json['phone'] as String, - region: json['region'] as String, - ); + address: json['address'] as String, + id: json['id'] as String, + image: json['image'] as String, + lat: (json['lat'] as num).toDouble(), + lng: (json['lng'] as num).toDouble(), + name: json['name'] as String, + phone: json['phone'] as String, + region: json['region'] as String, +); Map _$OfficeToJson(Office instance) => { - 'address': instance.address, - 'id': instance.id, - 'image': instance.image, - 'lat': instance.lat, - 'lng': instance.lng, - 'name': instance.name, - 'phone': instance.phone, - 'region': instance.region, - }; + 'address': instance.address, + 'id': instance.id, + 'image': instance.image, + 'lat': instance.lat, + 'lng': instance.lng, + 'name': instance.name, + 'phone': instance.phone, + 'region': instance.region, +}; Locations _$LocationsFromJson(Map json) => Locations( - offices: (json['offices'] as List) + offices: + (json['offices'] as List) .map((e) => Office.fromJson(e as Map)) .toList(), - regions: (json['regions'] as List) + regions: + (json['regions'] as List) .map((e) => Region.fromJson(e as Map)) .toList(), - ); +); Map _$LocationsToJson(Locations instance) => { - 'offices': instance.offices, - 'regions': instance.regions, - }; + 'offices': instance.offices, + 'regions': instance.regions, +}; diff --git a/google-maps-in-flutter/step_5/pubspec.yaml b/google-maps-in-flutter/step_5/pubspec.yaml index 16caa3ae2c..803b8d08fc 100644 --- a/google-maps-in-flutter/step_5/pubspec.yaml +++ b/google-maps-in-flutter/step_5/pubspec.yaml @@ -19,7 +19,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev version: 1.0.0+1 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 # Dependencies specify other packages that your package needs in order to work. # To automatically upgrade your package dependencies to the latest versions diff --git a/haiku_generator/finished/lib/app.dart b/haiku_generator/finished/lib/app.dart index 0c2bb9d44a..8115a6918f 100644 --- a/haiku_generator/finished/lib/app.dart +++ b/haiku_generator/finished/lib/app.dart @@ -47,21 +47,18 @@ class HaikuPageState extends State { @override Widget build(BuildContext context) { return Scaffold( - appBar: AppBar( - title: Text(widget.title), - ), + appBar: AppBar(title: Text(widget.title)), body: Center( child: Padding( - padding: const EdgeInsets.all(16.0), - child: Column( - children: [ - buildTopView(), - const SizedBox( - height: 10.0, - ), - buildBottomView() - ], - )), + padding: const EdgeInsets.all(16.0), + child: Column( + children: [ + buildTopView(), + const SizedBox(height: 10.0), + buildBottomView(), + ], + ), + ), ), ); } @@ -71,26 +68,23 @@ class HaikuPageState extends State { children: [ Text( subTitle, - style: const TextStyle( - fontSize: 18, - color: Colors.black, - ), + style: const TextStyle(fontSize: 18, color: Colors.black), ), SizedBox( width: 150.0, child: DropdownButton( - items: listProduct.map((Product value) { - return DropdownMenuItem( - value: value, - child: Text(value.productName), - ); - }).toList(), - hint: Text(productName.toString(), - style: const TextStyle(color: Colors.deepPurpleAccent)), - underline: Container( - height: 1, - color: Colors.deepPurpleAccent, + items: + listProduct.map((Product value) { + return DropdownMenuItem( + value: value, + child: Text(value.productName), + ); + }).toList(), + hint: Text( + productName.toString(), + style: const TextStyle(color: Colors.deepPurpleAccent), ), + underline: Container(height: 1, color: Colors.deepPurpleAccent), onChanged: (value) { setState(() { productName = value!.productName; @@ -116,45 +110,46 @@ class HaikuPageState extends State { fontWeight: FontWeight.w500, ), ), - ) + ), ], ); } Expanded buildBottomView() { return Expanded( - child: haikuText.isNotEmpty - ? Container( - decoration: BoxDecoration( - color: Colors.amberAccent.shade100, - borderRadius: BorderRadius.circular(8), - ), - child: Padding( - padding: const EdgeInsets.all(8.0), - child: SizedBox( - width: double.maxFinite, - child: Text( - haikuText, - style: const TextStyle( - color: Colors.black, - fontSize: 18, - fontWeight: FontWeight.w300, + child: + haikuText.isNotEmpty + ? Container( + decoration: BoxDecoration( + color: Colors.amberAccent.shade100, + borderRadius: BorderRadius.circular(8), + ), + child: Padding( + padding: const EdgeInsets.all(8.0), + child: SizedBox( + width: double.maxFinite, + child: Text( + haikuText, + style: const TextStyle( + color: Colors.black, + fontSize: 18, + fontWeight: FontWeight.w300, + ), ), ), ), - ), - ) - : ShimmerLoadingAnim( - isLoading: true, - child: Container( - height: double.maxFinite, - width: double.maxFinite, - decoration: BoxDecoration( - color: const Color(0xFFE5E5E5), - borderRadius: BorderRadius.circular(8), + ) + : ShimmerLoadingAnim( + isLoading: true, + child: Container( + height: double.maxFinite, + width: double.maxFinite, + decoration: BoxDecoration( + color: const Color(0xFFE5E5E5), + borderRadius: BorderRadius.circular(8), + ), ), ), - ), ); } } diff --git a/haiku_generator/finished/lib/data/repositories/poem_repository_impl.dart b/haiku_generator/finished/lib/data/repositories/poem_repository_impl.dart index 56db2bcc5c..bc797f40c0 100644 --- a/haiku_generator/finished/lib/data/repositories/poem_repository_impl.dart +++ b/haiku_generator/finished/lib/data/repositories/poem_repository_impl.dart @@ -12,7 +12,8 @@ class PoemRepositoryImpl implements PoemRepository { const haikuCount = 5; final url = Uri.parse( - 'https://generativelanguage.googleapis.com/v1beta2/models/chat-bison-001:generateMessage?key=$apiKey'); + 'https://generativelanguage.googleapis.com/v1beta2/models/chat-bison-001:generateMessage?key=$apiKey', + ); final headers = {'Content-Type': 'application/json'}; final body = jsonEncode({ "prompt": { @@ -22,13 +23,13 @@ class PoemRepositoryImpl implements PoemRepository { "input": {"content": "Write a haiku about Google Photos."}, "output": { "content": - "Google Photos, my friend\nA journey of a lifetime\nCaptured in pixels" - } - } + "Google Photos, my friend\nA journey of a lifetime\nCaptured in pixels", + }, + }, ], "messages": [ - {"content": "Write a cool, long haiku of for $productName"} - ] + {"content": "Write a cool, long haiku of for $productName"}, + ], }, "candidate_count": haikuCount, "temperature": 1, diff --git a/haiku_generator/finished/lib/data/repositories/product_repository_impl.dart b/haiku_generator/finished/lib/data/repositories/product_repository_impl.dart index 0f2027c54c..7dbffb7d55 100644 --- a/haiku_generator/finished/lib/data/repositories/product_repository_impl.dart +++ b/haiku_generator/finished/lib/data/repositories/product_repository_impl.dart @@ -11,7 +11,7 @@ class ProductRepositoryImpl implements ProductRepository { {'productName': 'YouTube'}, {'productName': 'Android'}, {'productName': 'Google Maps'}, - {'productName': 'GMail'} + {'productName': 'GMail'}, ]; return dummyData.map((item) => Product.fromMap(item)).toList(); } diff --git a/haiku_generator/finished/lib/domain/models/product.dart b/haiku_generator/finished/lib/domain/models/product.dart index b5091f8201..43fdb68250 100644 --- a/haiku_generator/finished/lib/domain/models/product.dart +++ b/haiku_generator/finished/lib/domain/models/product.dart @@ -4,11 +4,9 @@ class Product { Product(this.productName); Product.fromMap(Map json) - : productName = json['productName']; + : productName = json['productName']; Map toMap() { - return { - 'productName': productName, - }; + return {'productName': productName}; } } diff --git a/haiku_generator/finished/lib/main.dart b/haiku_generator/finished/lib/main.dart index 62eb4b226f..f2db0a2d91 100644 --- a/haiku_generator/finished/lib/main.dart +++ b/haiku_generator/finished/lib/main.dart @@ -13,9 +13,7 @@ class MyApp extends StatelessWidget { Widget build(BuildContext context) { return MaterialApp( title: 'Haiku Generator Demo', - theme: ThemeData( - useMaterial3: true, - ), + theme: ThemeData(useMaterial3: true), home: const HaikuPage(title: 'Haiku generator for Google products'), ); } diff --git a/haiku_generator/finished/lib/widgets/shimmer_gradient.dart b/haiku_generator/finished/lib/widgets/shimmer_gradient.dart index 03d815b57a..5e9de7419a 100644 --- a/haiku_generator/finished/lib/widgets/shimmer_gradient.dart +++ b/haiku_generator/finished/lib/widgets/shimmer_gradient.dart @@ -1,16 +1,8 @@ import 'package:flutter/material.dart'; LinearGradient shimmerGradient = const LinearGradient( - colors: [ - Color(0xFFEBEBF4), - Color(0xFFF4F4F4), - Color(0xFFEBEBF4), - ], - stops: [ - 0.1, - 0.3, - 0.4, - ], + colors: [Color(0xFFEBEBF4), Color(0xFFF4F4F4), Color(0xFFEBEBF4)], + stops: [0.1, 0.3, 0.4], begin: Alignment(-1.0, -0.3), end: Alignment(1.0, 0.3), ); diff --git a/haiku_generator/finished/lib/widgets/shimmer_loading.dart b/haiku_generator/finished/lib/widgets/shimmer_loading.dart index 4611994d12..12eb051bbf 100644 --- a/haiku_generator/finished/lib/widgets/shimmer_loading.dart +++ b/haiku_generator/finished/lib/widgets/shimmer_loading.dart @@ -1,11 +1,7 @@ import 'package:flutter/material.dart'; class Shimmer extends StatefulWidget { - const Shimmer({ - super.key, - required this.linearGradient, - this.child, - }); + const Shimmer({super.key, required this.linearGradient, this.child}); static ShimmerState? of(BuildContext context) { return context.findAncestorStateOfType(); @@ -36,13 +32,12 @@ class ShimmerState extends State with SingleTickerProviderStateMixin { } LinearGradient get gradient => LinearGradient( - colors: widget.linearGradient.colors, - stops: widget.linearGradient.stops, - begin: widget.linearGradient.begin, - end: widget.linearGradient.end, - transform: - SlidingGradientTransform(slidePercent: shimmerController.value), - ); + colors: widget.linearGradient.colors, + stops: widget.linearGradient.stops, + begin: widget.linearGradient.begin, + end: widget.linearGradient.end, + transform: SlidingGradientTransform(slidePercent: shimmerController.value), + ); bool get isSized { if (context.findRenderObject() != null) { @@ -71,9 +66,7 @@ class ShimmerState extends State with SingleTickerProviderStateMixin { } class SlidingGradientTransform extends GradientTransform { - const SlidingGradientTransform({ - required this.slidePercent, - }); + const SlidingGradientTransform({required this.slidePercent}); final double slidePercent; diff --git a/haiku_generator/finished/lib/widgets/shimmer_loading_anim.dart b/haiku_generator/finished/lib/widgets/shimmer_loading_anim.dart index 3dfeda37bb..72b9697804 100644 --- a/haiku_generator/finished/lib/widgets/shimmer_loading_anim.dart +++ b/haiku_generator/finished/lib/widgets/shimmer_loading_anim.dart @@ -4,8 +4,11 @@ import 'shimmer_gradient.dart'; import 'shimmer_loading.dart'; class ShimmerLoadingAnim extends StatelessWidget { - const ShimmerLoadingAnim( - {super.key, required this.child, this.isLoading = false}); + const ShimmerLoadingAnim({ + super.key, + required this.child, + this.isLoading = false, + }); final Widget child; final bool isLoading; @@ -14,10 +17,7 @@ class ShimmerLoadingAnim extends StatelessWidget { Widget build(BuildContext context) { return Shimmer( linearGradient: shimmerGradient, - child: ShimmerLoading( - isLoading: isLoading, - child: child, - ), + child: ShimmerLoading(isLoading: isLoading, child: child), ); } } diff --git a/haiku_generator/finished/pubspec.yaml b/haiku_generator/finished/pubspec.yaml index 826e533279..568dbed7d7 100644 --- a/haiku_generator/finished/pubspec.yaml +++ b/haiku_generator/finished/pubspec.yaml @@ -18,7 +18,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev version: 1.0.0+1 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 # Dependencies specify other packages that your package needs in order to work. # To automatically upgrade your package dependencies to the latest versions diff --git a/haiku_generator/step0/lib/app.dart b/haiku_generator/step0/lib/app.dart index 0c2bb9d44a..8115a6918f 100644 --- a/haiku_generator/step0/lib/app.dart +++ b/haiku_generator/step0/lib/app.dart @@ -47,21 +47,18 @@ class HaikuPageState extends State { @override Widget build(BuildContext context) { return Scaffold( - appBar: AppBar( - title: Text(widget.title), - ), + appBar: AppBar(title: Text(widget.title)), body: Center( child: Padding( - padding: const EdgeInsets.all(16.0), - child: Column( - children: [ - buildTopView(), - const SizedBox( - height: 10.0, - ), - buildBottomView() - ], - )), + padding: const EdgeInsets.all(16.0), + child: Column( + children: [ + buildTopView(), + const SizedBox(height: 10.0), + buildBottomView(), + ], + ), + ), ), ); } @@ -71,26 +68,23 @@ class HaikuPageState extends State { children: [ Text( subTitle, - style: const TextStyle( - fontSize: 18, - color: Colors.black, - ), + style: const TextStyle(fontSize: 18, color: Colors.black), ), SizedBox( width: 150.0, child: DropdownButton( - items: listProduct.map((Product value) { - return DropdownMenuItem( - value: value, - child: Text(value.productName), - ); - }).toList(), - hint: Text(productName.toString(), - style: const TextStyle(color: Colors.deepPurpleAccent)), - underline: Container( - height: 1, - color: Colors.deepPurpleAccent, + items: + listProduct.map((Product value) { + return DropdownMenuItem( + value: value, + child: Text(value.productName), + ); + }).toList(), + hint: Text( + productName.toString(), + style: const TextStyle(color: Colors.deepPurpleAccent), ), + underline: Container(height: 1, color: Colors.deepPurpleAccent), onChanged: (value) { setState(() { productName = value!.productName; @@ -116,45 +110,46 @@ class HaikuPageState extends State { fontWeight: FontWeight.w500, ), ), - ) + ), ], ); } Expanded buildBottomView() { return Expanded( - child: haikuText.isNotEmpty - ? Container( - decoration: BoxDecoration( - color: Colors.amberAccent.shade100, - borderRadius: BorderRadius.circular(8), - ), - child: Padding( - padding: const EdgeInsets.all(8.0), - child: SizedBox( - width: double.maxFinite, - child: Text( - haikuText, - style: const TextStyle( - color: Colors.black, - fontSize: 18, - fontWeight: FontWeight.w300, + child: + haikuText.isNotEmpty + ? Container( + decoration: BoxDecoration( + color: Colors.amberAccent.shade100, + borderRadius: BorderRadius.circular(8), + ), + child: Padding( + padding: const EdgeInsets.all(8.0), + child: SizedBox( + width: double.maxFinite, + child: Text( + haikuText, + style: const TextStyle( + color: Colors.black, + fontSize: 18, + fontWeight: FontWeight.w300, + ), ), ), ), - ), - ) - : ShimmerLoadingAnim( - isLoading: true, - child: Container( - height: double.maxFinite, - width: double.maxFinite, - decoration: BoxDecoration( - color: const Color(0xFFE5E5E5), - borderRadius: BorderRadius.circular(8), + ) + : ShimmerLoadingAnim( + isLoading: true, + child: Container( + height: double.maxFinite, + width: double.maxFinite, + decoration: BoxDecoration( + color: const Color(0xFFE5E5E5), + borderRadius: BorderRadius.circular(8), + ), ), ), - ), ); } } diff --git a/haiku_generator/step0/lib/domain/models/product.dart b/haiku_generator/step0/lib/domain/models/product.dart index b5091f8201..43fdb68250 100644 --- a/haiku_generator/step0/lib/domain/models/product.dart +++ b/haiku_generator/step0/lib/domain/models/product.dart @@ -4,11 +4,9 @@ class Product { Product(this.productName); Product.fromMap(Map json) - : productName = json['productName']; + : productName = json['productName']; Map toMap() { - return { - 'productName': productName, - }; + return {'productName': productName}; } } diff --git a/haiku_generator/step0/lib/main.dart b/haiku_generator/step0/lib/main.dart index 62eb4b226f..f2db0a2d91 100644 --- a/haiku_generator/step0/lib/main.dart +++ b/haiku_generator/step0/lib/main.dart @@ -13,9 +13,7 @@ class MyApp extends StatelessWidget { Widget build(BuildContext context) { return MaterialApp( title: 'Haiku Generator Demo', - theme: ThemeData( - useMaterial3: true, - ), + theme: ThemeData(useMaterial3: true), home: const HaikuPage(title: 'Haiku generator for Google products'), ); } diff --git a/haiku_generator/step0/lib/widgets/shimmer_gradient.dart b/haiku_generator/step0/lib/widgets/shimmer_gradient.dart index 03d815b57a..5e9de7419a 100644 --- a/haiku_generator/step0/lib/widgets/shimmer_gradient.dart +++ b/haiku_generator/step0/lib/widgets/shimmer_gradient.dart @@ -1,16 +1,8 @@ import 'package:flutter/material.dart'; LinearGradient shimmerGradient = const LinearGradient( - colors: [ - Color(0xFFEBEBF4), - Color(0xFFF4F4F4), - Color(0xFFEBEBF4), - ], - stops: [ - 0.1, - 0.3, - 0.4, - ], + colors: [Color(0xFFEBEBF4), Color(0xFFF4F4F4), Color(0xFFEBEBF4)], + stops: [0.1, 0.3, 0.4], begin: Alignment(-1.0, -0.3), end: Alignment(1.0, 0.3), ); diff --git a/haiku_generator/step0/lib/widgets/shimmer_loading.dart b/haiku_generator/step0/lib/widgets/shimmer_loading.dart index 4611994d12..12eb051bbf 100644 --- a/haiku_generator/step0/lib/widgets/shimmer_loading.dart +++ b/haiku_generator/step0/lib/widgets/shimmer_loading.dart @@ -1,11 +1,7 @@ import 'package:flutter/material.dart'; class Shimmer extends StatefulWidget { - const Shimmer({ - super.key, - required this.linearGradient, - this.child, - }); + const Shimmer({super.key, required this.linearGradient, this.child}); static ShimmerState? of(BuildContext context) { return context.findAncestorStateOfType(); @@ -36,13 +32,12 @@ class ShimmerState extends State with SingleTickerProviderStateMixin { } LinearGradient get gradient => LinearGradient( - colors: widget.linearGradient.colors, - stops: widget.linearGradient.stops, - begin: widget.linearGradient.begin, - end: widget.linearGradient.end, - transform: - SlidingGradientTransform(slidePercent: shimmerController.value), - ); + colors: widget.linearGradient.colors, + stops: widget.linearGradient.stops, + begin: widget.linearGradient.begin, + end: widget.linearGradient.end, + transform: SlidingGradientTransform(slidePercent: shimmerController.value), + ); bool get isSized { if (context.findRenderObject() != null) { @@ -71,9 +66,7 @@ class ShimmerState extends State with SingleTickerProviderStateMixin { } class SlidingGradientTransform extends GradientTransform { - const SlidingGradientTransform({ - required this.slidePercent, - }); + const SlidingGradientTransform({required this.slidePercent}); final double slidePercent; diff --git a/haiku_generator/step0/lib/widgets/shimmer_loading_anim.dart b/haiku_generator/step0/lib/widgets/shimmer_loading_anim.dart index 3dfeda37bb..72b9697804 100644 --- a/haiku_generator/step0/lib/widgets/shimmer_loading_anim.dart +++ b/haiku_generator/step0/lib/widgets/shimmer_loading_anim.dart @@ -4,8 +4,11 @@ import 'shimmer_gradient.dart'; import 'shimmer_loading.dart'; class ShimmerLoadingAnim extends StatelessWidget { - const ShimmerLoadingAnim( - {super.key, required this.child, this.isLoading = false}); + const ShimmerLoadingAnim({ + super.key, + required this.child, + this.isLoading = false, + }); final Widget child; final bool isLoading; @@ -14,10 +17,7 @@ class ShimmerLoadingAnim extends StatelessWidget { Widget build(BuildContext context) { return Shimmer( linearGradient: shimmerGradient, - child: ShimmerLoading( - isLoading: isLoading, - child: child, - ), + child: ShimmerLoading(isLoading: isLoading, child: child), ); } } diff --git a/haiku_generator/step0/pubspec.yaml b/haiku_generator/step0/pubspec.yaml index 826e533279..568dbed7d7 100644 --- a/haiku_generator/step0/pubspec.yaml +++ b/haiku_generator/step0/pubspec.yaml @@ -18,7 +18,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev version: 1.0.0+1 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 # Dependencies specify other packages that your package needs in order to work. # To automatically upgrade your package dependencies to the latest versions diff --git a/haiku_generator/step1/lib/app.dart b/haiku_generator/step1/lib/app.dart index 0c2bb9d44a..8115a6918f 100644 --- a/haiku_generator/step1/lib/app.dart +++ b/haiku_generator/step1/lib/app.dart @@ -47,21 +47,18 @@ class HaikuPageState extends State { @override Widget build(BuildContext context) { return Scaffold( - appBar: AppBar( - title: Text(widget.title), - ), + appBar: AppBar(title: Text(widget.title)), body: Center( child: Padding( - padding: const EdgeInsets.all(16.0), - child: Column( - children: [ - buildTopView(), - const SizedBox( - height: 10.0, - ), - buildBottomView() - ], - )), + padding: const EdgeInsets.all(16.0), + child: Column( + children: [ + buildTopView(), + const SizedBox(height: 10.0), + buildBottomView(), + ], + ), + ), ), ); } @@ -71,26 +68,23 @@ class HaikuPageState extends State { children: [ Text( subTitle, - style: const TextStyle( - fontSize: 18, - color: Colors.black, - ), + style: const TextStyle(fontSize: 18, color: Colors.black), ), SizedBox( width: 150.0, child: DropdownButton( - items: listProduct.map((Product value) { - return DropdownMenuItem( - value: value, - child: Text(value.productName), - ); - }).toList(), - hint: Text(productName.toString(), - style: const TextStyle(color: Colors.deepPurpleAccent)), - underline: Container( - height: 1, - color: Colors.deepPurpleAccent, + items: + listProduct.map((Product value) { + return DropdownMenuItem( + value: value, + child: Text(value.productName), + ); + }).toList(), + hint: Text( + productName.toString(), + style: const TextStyle(color: Colors.deepPurpleAccent), ), + underline: Container(height: 1, color: Colors.deepPurpleAccent), onChanged: (value) { setState(() { productName = value!.productName; @@ -116,45 +110,46 @@ class HaikuPageState extends State { fontWeight: FontWeight.w500, ), ), - ) + ), ], ); } Expanded buildBottomView() { return Expanded( - child: haikuText.isNotEmpty - ? Container( - decoration: BoxDecoration( - color: Colors.amberAccent.shade100, - borderRadius: BorderRadius.circular(8), - ), - child: Padding( - padding: const EdgeInsets.all(8.0), - child: SizedBox( - width: double.maxFinite, - child: Text( - haikuText, - style: const TextStyle( - color: Colors.black, - fontSize: 18, - fontWeight: FontWeight.w300, + child: + haikuText.isNotEmpty + ? Container( + decoration: BoxDecoration( + color: Colors.amberAccent.shade100, + borderRadius: BorderRadius.circular(8), + ), + child: Padding( + padding: const EdgeInsets.all(8.0), + child: SizedBox( + width: double.maxFinite, + child: Text( + haikuText, + style: const TextStyle( + color: Colors.black, + fontSize: 18, + fontWeight: FontWeight.w300, + ), ), ), ), - ), - ) - : ShimmerLoadingAnim( - isLoading: true, - child: Container( - height: double.maxFinite, - width: double.maxFinite, - decoration: BoxDecoration( - color: const Color(0xFFE5E5E5), - borderRadius: BorderRadius.circular(8), + ) + : ShimmerLoadingAnim( + isLoading: true, + child: Container( + height: double.maxFinite, + width: double.maxFinite, + decoration: BoxDecoration( + color: const Color(0xFFE5E5E5), + borderRadius: BorderRadius.circular(8), + ), ), ), - ), ); } } diff --git a/haiku_generator/step1/lib/domain/models/product.dart b/haiku_generator/step1/lib/domain/models/product.dart index b5091f8201..43fdb68250 100644 --- a/haiku_generator/step1/lib/domain/models/product.dart +++ b/haiku_generator/step1/lib/domain/models/product.dart @@ -4,11 +4,9 @@ class Product { Product(this.productName); Product.fromMap(Map json) - : productName = json['productName']; + : productName = json['productName']; Map toMap() { - return { - 'productName': productName, - }; + return {'productName': productName}; } } diff --git a/haiku_generator/step1/lib/main.dart b/haiku_generator/step1/lib/main.dart index 62eb4b226f..f2db0a2d91 100644 --- a/haiku_generator/step1/lib/main.dart +++ b/haiku_generator/step1/lib/main.dart @@ -13,9 +13,7 @@ class MyApp extends StatelessWidget { Widget build(BuildContext context) { return MaterialApp( title: 'Haiku Generator Demo', - theme: ThemeData( - useMaterial3: true, - ), + theme: ThemeData(useMaterial3: true), home: const HaikuPage(title: 'Haiku generator for Google products'), ); } diff --git a/haiku_generator/step1/lib/widgets/shimmer_gradient.dart b/haiku_generator/step1/lib/widgets/shimmer_gradient.dart index 03d815b57a..5e9de7419a 100644 --- a/haiku_generator/step1/lib/widgets/shimmer_gradient.dart +++ b/haiku_generator/step1/lib/widgets/shimmer_gradient.dart @@ -1,16 +1,8 @@ import 'package:flutter/material.dart'; LinearGradient shimmerGradient = const LinearGradient( - colors: [ - Color(0xFFEBEBF4), - Color(0xFFF4F4F4), - Color(0xFFEBEBF4), - ], - stops: [ - 0.1, - 0.3, - 0.4, - ], + colors: [Color(0xFFEBEBF4), Color(0xFFF4F4F4), Color(0xFFEBEBF4)], + stops: [0.1, 0.3, 0.4], begin: Alignment(-1.0, -0.3), end: Alignment(1.0, 0.3), ); diff --git a/haiku_generator/step1/lib/widgets/shimmer_loading.dart b/haiku_generator/step1/lib/widgets/shimmer_loading.dart index 4611994d12..12eb051bbf 100644 --- a/haiku_generator/step1/lib/widgets/shimmer_loading.dart +++ b/haiku_generator/step1/lib/widgets/shimmer_loading.dart @@ -1,11 +1,7 @@ import 'package:flutter/material.dart'; class Shimmer extends StatefulWidget { - const Shimmer({ - super.key, - required this.linearGradient, - this.child, - }); + const Shimmer({super.key, required this.linearGradient, this.child}); static ShimmerState? of(BuildContext context) { return context.findAncestorStateOfType(); @@ -36,13 +32,12 @@ class ShimmerState extends State with SingleTickerProviderStateMixin { } LinearGradient get gradient => LinearGradient( - colors: widget.linearGradient.colors, - stops: widget.linearGradient.stops, - begin: widget.linearGradient.begin, - end: widget.linearGradient.end, - transform: - SlidingGradientTransform(slidePercent: shimmerController.value), - ); + colors: widget.linearGradient.colors, + stops: widget.linearGradient.stops, + begin: widget.linearGradient.begin, + end: widget.linearGradient.end, + transform: SlidingGradientTransform(slidePercent: shimmerController.value), + ); bool get isSized { if (context.findRenderObject() != null) { @@ -71,9 +66,7 @@ class ShimmerState extends State with SingleTickerProviderStateMixin { } class SlidingGradientTransform extends GradientTransform { - const SlidingGradientTransform({ - required this.slidePercent, - }); + const SlidingGradientTransform({required this.slidePercent}); final double slidePercent; diff --git a/haiku_generator/step1/lib/widgets/shimmer_loading_anim.dart b/haiku_generator/step1/lib/widgets/shimmer_loading_anim.dart index 3dfeda37bb..72b9697804 100644 --- a/haiku_generator/step1/lib/widgets/shimmer_loading_anim.dart +++ b/haiku_generator/step1/lib/widgets/shimmer_loading_anim.dart @@ -4,8 +4,11 @@ import 'shimmer_gradient.dart'; import 'shimmer_loading.dart'; class ShimmerLoadingAnim extends StatelessWidget { - const ShimmerLoadingAnim( - {super.key, required this.child, this.isLoading = false}); + const ShimmerLoadingAnim({ + super.key, + required this.child, + this.isLoading = false, + }); final Widget child; final bool isLoading; @@ -14,10 +17,7 @@ class ShimmerLoadingAnim extends StatelessWidget { Widget build(BuildContext context) { return Shimmer( linearGradient: shimmerGradient, - child: ShimmerLoading( - isLoading: isLoading, - child: child, - ), + child: ShimmerLoading(isLoading: isLoading, child: child), ); } } diff --git a/haiku_generator/step1/pubspec.yaml b/haiku_generator/step1/pubspec.yaml index 826e533279..568dbed7d7 100644 --- a/haiku_generator/step1/pubspec.yaml +++ b/haiku_generator/step1/pubspec.yaml @@ -18,7 +18,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev version: 1.0.0+1 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 # Dependencies specify other packages that your package needs in order to work. # To automatically upgrade your package dependencies to the latest versions diff --git a/haiku_generator/step2/lib/app.dart b/haiku_generator/step2/lib/app.dart index a56bfb311d..8115a6918f 100644 --- a/haiku_generator/step2/lib/app.dart +++ b/haiku_generator/step2/lib/app.dart @@ -47,21 +47,18 @@ class HaikuPageState extends State { @override Widget build(BuildContext context) { return Scaffold( - appBar: AppBar( - title: Text(widget.title), - ), + appBar: AppBar(title: Text(widget.title)), body: Center( child: Padding( - padding: const EdgeInsets.all(16.0), - child: Column( - children: [ - buildTopView(), - const SizedBox( - height: 10.0, - ), - buildBottomView() - ], - )), + padding: const EdgeInsets.all(16.0), + child: Column( + children: [ + buildTopView(), + const SizedBox(height: 10.0), + buildBottomView(), + ], + ), + ), ), ); } @@ -71,26 +68,23 @@ class HaikuPageState extends State { children: [ Text( subTitle, - style: const TextStyle( - fontSize: 18, - color: Colors.black, - ), + style: const TextStyle(fontSize: 18, color: Colors.black), ), SizedBox( width: 150.0, child: DropdownButton( - items: listProduct.map((Product value) { - return DropdownMenuItem( - value: value, - child: Text(value.productName), - ); - }).toList(), - hint: Text(productName.toString(), - style: const TextStyle(color: Colors.deepPurpleAccent)), - underline: Container( - height: 1, - color: Colors.deepPurpleAccent, + items: + listProduct.map((Product value) { + return DropdownMenuItem( + value: value, + child: Text(value.productName), + ); + }).toList(), + hint: Text( + productName.toString(), + style: const TextStyle(color: Colors.deepPurpleAccent), ), + underline: Container(height: 1, color: Colors.deepPurpleAccent), onChanged: (value) { setState(() { productName = value!.productName; @@ -123,38 +117,39 @@ class HaikuPageState extends State { Expanded buildBottomView() { return Expanded( - child: haikuText.isNotEmpty - ? Container( - decoration: BoxDecoration( - color: Colors.amberAccent.shade100, - borderRadius: BorderRadius.circular(8), - ), - child: Padding( - padding: const EdgeInsets.all(8.0), - child: SizedBox( - width: double.maxFinite, - child: Text( - haikuText, - style: const TextStyle( - color: Colors.black, - fontSize: 18, - fontWeight: FontWeight.w300, + child: + haikuText.isNotEmpty + ? Container( + decoration: BoxDecoration( + color: Colors.amberAccent.shade100, + borderRadius: BorderRadius.circular(8), + ), + child: Padding( + padding: const EdgeInsets.all(8.0), + child: SizedBox( + width: double.maxFinite, + child: Text( + haikuText, + style: const TextStyle( + color: Colors.black, + fontSize: 18, + fontWeight: FontWeight.w300, + ), ), ), ), - ), - ) - : ShimmerLoadingAnim( - isLoading: true, - child: Container( - height: double.maxFinite, - width: double.maxFinite, - decoration: BoxDecoration( - color: const Color(0xFFE5E5E5), - borderRadius: BorderRadius.circular(8), + ) + : ShimmerLoadingAnim( + isLoading: true, + child: Container( + height: double.maxFinite, + width: double.maxFinite, + decoration: BoxDecoration( + color: const Color(0xFFE5E5E5), + borderRadius: BorderRadius.circular(8), + ), ), ), - ), ); } } diff --git a/haiku_generator/step2/lib/data/repositories/product_repository_impl.dart b/haiku_generator/step2/lib/data/repositories/product_repository_impl.dart index 0f2027c54c..7dbffb7d55 100644 --- a/haiku_generator/step2/lib/data/repositories/product_repository_impl.dart +++ b/haiku_generator/step2/lib/data/repositories/product_repository_impl.dart @@ -11,7 +11,7 @@ class ProductRepositoryImpl implements ProductRepository { {'productName': 'YouTube'}, {'productName': 'Android'}, {'productName': 'Google Maps'}, - {'productName': 'GMail'} + {'productName': 'GMail'}, ]; return dummyData.map((item) => Product.fromMap(item)).toList(); } diff --git a/haiku_generator/step2/lib/domain/models/product.dart b/haiku_generator/step2/lib/domain/models/product.dart index b5091f8201..43fdb68250 100644 --- a/haiku_generator/step2/lib/domain/models/product.dart +++ b/haiku_generator/step2/lib/domain/models/product.dart @@ -4,11 +4,9 @@ class Product { Product(this.productName); Product.fromMap(Map json) - : productName = json['productName']; + : productName = json['productName']; Map toMap() { - return { - 'productName': productName, - }; + return {'productName': productName}; } } diff --git a/haiku_generator/step2/lib/main.dart b/haiku_generator/step2/lib/main.dart index 62eb4b226f..f2db0a2d91 100644 --- a/haiku_generator/step2/lib/main.dart +++ b/haiku_generator/step2/lib/main.dart @@ -13,9 +13,7 @@ class MyApp extends StatelessWidget { Widget build(BuildContext context) { return MaterialApp( title: 'Haiku Generator Demo', - theme: ThemeData( - useMaterial3: true, - ), + theme: ThemeData(useMaterial3: true), home: const HaikuPage(title: 'Haiku generator for Google products'), ); } diff --git a/haiku_generator/step2/lib/widgets/shimmer_gradient.dart b/haiku_generator/step2/lib/widgets/shimmer_gradient.dart index 03d815b57a..5e9de7419a 100644 --- a/haiku_generator/step2/lib/widgets/shimmer_gradient.dart +++ b/haiku_generator/step2/lib/widgets/shimmer_gradient.dart @@ -1,16 +1,8 @@ import 'package:flutter/material.dart'; LinearGradient shimmerGradient = const LinearGradient( - colors: [ - Color(0xFFEBEBF4), - Color(0xFFF4F4F4), - Color(0xFFEBEBF4), - ], - stops: [ - 0.1, - 0.3, - 0.4, - ], + colors: [Color(0xFFEBEBF4), Color(0xFFF4F4F4), Color(0xFFEBEBF4)], + stops: [0.1, 0.3, 0.4], begin: Alignment(-1.0, -0.3), end: Alignment(1.0, 0.3), ); diff --git a/haiku_generator/step2/lib/widgets/shimmer_loading.dart b/haiku_generator/step2/lib/widgets/shimmer_loading.dart index 4611994d12..12eb051bbf 100644 --- a/haiku_generator/step2/lib/widgets/shimmer_loading.dart +++ b/haiku_generator/step2/lib/widgets/shimmer_loading.dart @@ -1,11 +1,7 @@ import 'package:flutter/material.dart'; class Shimmer extends StatefulWidget { - const Shimmer({ - super.key, - required this.linearGradient, - this.child, - }); + const Shimmer({super.key, required this.linearGradient, this.child}); static ShimmerState? of(BuildContext context) { return context.findAncestorStateOfType(); @@ -36,13 +32,12 @@ class ShimmerState extends State with SingleTickerProviderStateMixin { } LinearGradient get gradient => LinearGradient( - colors: widget.linearGradient.colors, - stops: widget.linearGradient.stops, - begin: widget.linearGradient.begin, - end: widget.linearGradient.end, - transform: - SlidingGradientTransform(slidePercent: shimmerController.value), - ); + colors: widget.linearGradient.colors, + stops: widget.linearGradient.stops, + begin: widget.linearGradient.begin, + end: widget.linearGradient.end, + transform: SlidingGradientTransform(slidePercent: shimmerController.value), + ); bool get isSized { if (context.findRenderObject() != null) { @@ -71,9 +66,7 @@ class ShimmerState extends State with SingleTickerProviderStateMixin { } class SlidingGradientTransform extends GradientTransform { - const SlidingGradientTransform({ - required this.slidePercent, - }); + const SlidingGradientTransform({required this.slidePercent}); final double slidePercent; diff --git a/haiku_generator/step2/lib/widgets/shimmer_loading_anim.dart b/haiku_generator/step2/lib/widgets/shimmer_loading_anim.dart index 3dfeda37bb..72b9697804 100644 --- a/haiku_generator/step2/lib/widgets/shimmer_loading_anim.dart +++ b/haiku_generator/step2/lib/widgets/shimmer_loading_anim.dart @@ -4,8 +4,11 @@ import 'shimmer_gradient.dart'; import 'shimmer_loading.dart'; class ShimmerLoadingAnim extends StatelessWidget { - const ShimmerLoadingAnim( - {super.key, required this.child, this.isLoading = false}); + const ShimmerLoadingAnim({ + super.key, + required this.child, + this.isLoading = false, + }); final Widget child; final bool isLoading; @@ -14,10 +17,7 @@ class ShimmerLoadingAnim extends StatelessWidget { Widget build(BuildContext context) { return Shimmer( linearGradient: shimmerGradient, - child: ShimmerLoading( - isLoading: isLoading, - child: child, - ), + child: ShimmerLoading(isLoading: isLoading, child: child), ); } } diff --git a/haiku_generator/step2/pubspec.yaml b/haiku_generator/step2/pubspec.yaml index 826e533279..568dbed7d7 100644 --- a/haiku_generator/step2/pubspec.yaml +++ b/haiku_generator/step2/pubspec.yaml @@ -18,7 +18,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev version: 1.0.0+1 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 # Dependencies specify other packages that your package needs in order to work. # To automatically upgrade your package dependencies to the latest versions diff --git a/haiku_generator/step3/lib/app.dart b/haiku_generator/step3/lib/app.dart index a56bfb311d..8115a6918f 100644 --- a/haiku_generator/step3/lib/app.dart +++ b/haiku_generator/step3/lib/app.dart @@ -47,21 +47,18 @@ class HaikuPageState extends State { @override Widget build(BuildContext context) { return Scaffold( - appBar: AppBar( - title: Text(widget.title), - ), + appBar: AppBar(title: Text(widget.title)), body: Center( child: Padding( - padding: const EdgeInsets.all(16.0), - child: Column( - children: [ - buildTopView(), - const SizedBox( - height: 10.0, - ), - buildBottomView() - ], - )), + padding: const EdgeInsets.all(16.0), + child: Column( + children: [ + buildTopView(), + const SizedBox(height: 10.0), + buildBottomView(), + ], + ), + ), ), ); } @@ -71,26 +68,23 @@ class HaikuPageState extends State { children: [ Text( subTitle, - style: const TextStyle( - fontSize: 18, - color: Colors.black, - ), + style: const TextStyle(fontSize: 18, color: Colors.black), ), SizedBox( width: 150.0, child: DropdownButton( - items: listProduct.map((Product value) { - return DropdownMenuItem( - value: value, - child: Text(value.productName), - ); - }).toList(), - hint: Text(productName.toString(), - style: const TextStyle(color: Colors.deepPurpleAccent)), - underline: Container( - height: 1, - color: Colors.deepPurpleAccent, + items: + listProduct.map((Product value) { + return DropdownMenuItem( + value: value, + child: Text(value.productName), + ); + }).toList(), + hint: Text( + productName.toString(), + style: const TextStyle(color: Colors.deepPurpleAccent), ), + underline: Container(height: 1, color: Colors.deepPurpleAccent), onChanged: (value) { setState(() { productName = value!.productName; @@ -123,38 +117,39 @@ class HaikuPageState extends State { Expanded buildBottomView() { return Expanded( - child: haikuText.isNotEmpty - ? Container( - decoration: BoxDecoration( - color: Colors.amberAccent.shade100, - borderRadius: BorderRadius.circular(8), - ), - child: Padding( - padding: const EdgeInsets.all(8.0), - child: SizedBox( - width: double.maxFinite, - child: Text( - haikuText, - style: const TextStyle( - color: Colors.black, - fontSize: 18, - fontWeight: FontWeight.w300, + child: + haikuText.isNotEmpty + ? Container( + decoration: BoxDecoration( + color: Colors.amberAccent.shade100, + borderRadius: BorderRadius.circular(8), + ), + child: Padding( + padding: const EdgeInsets.all(8.0), + child: SizedBox( + width: double.maxFinite, + child: Text( + haikuText, + style: const TextStyle( + color: Colors.black, + fontSize: 18, + fontWeight: FontWeight.w300, + ), ), ), ), - ), - ) - : ShimmerLoadingAnim( - isLoading: true, - child: Container( - height: double.maxFinite, - width: double.maxFinite, - decoration: BoxDecoration( - color: const Color(0xFFE5E5E5), - borderRadius: BorderRadius.circular(8), + ) + : ShimmerLoadingAnim( + isLoading: true, + child: Container( + height: double.maxFinite, + width: double.maxFinite, + decoration: BoxDecoration( + color: const Color(0xFFE5E5E5), + borderRadius: BorderRadius.circular(8), + ), ), ), - ), ); } } diff --git a/haiku_generator/step3/lib/data/repositories/poem_repository_impl.dart b/haiku_generator/step3/lib/data/repositories/poem_repository_impl.dart index 56db2bcc5c..bc797f40c0 100644 --- a/haiku_generator/step3/lib/data/repositories/poem_repository_impl.dart +++ b/haiku_generator/step3/lib/data/repositories/poem_repository_impl.dart @@ -12,7 +12,8 @@ class PoemRepositoryImpl implements PoemRepository { const haikuCount = 5; final url = Uri.parse( - 'https://generativelanguage.googleapis.com/v1beta2/models/chat-bison-001:generateMessage?key=$apiKey'); + 'https://generativelanguage.googleapis.com/v1beta2/models/chat-bison-001:generateMessage?key=$apiKey', + ); final headers = {'Content-Type': 'application/json'}; final body = jsonEncode({ "prompt": { @@ -22,13 +23,13 @@ class PoemRepositoryImpl implements PoemRepository { "input": {"content": "Write a haiku about Google Photos."}, "output": { "content": - "Google Photos, my friend\nA journey of a lifetime\nCaptured in pixels" - } - } + "Google Photos, my friend\nA journey of a lifetime\nCaptured in pixels", + }, + }, ], "messages": [ - {"content": "Write a cool, long haiku of for $productName"} - ] + {"content": "Write a cool, long haiku of for $productName"}, + ], }, "candidate_count": haikuCount, "temperature": 1, diff --git a/haiku_generator/step3/lib/data/repositories/product_repository_impl.dart b/haiku_generator/step3/lib/data/repositories/product_repository_impl.dart index 0f2027c54c..7dbffb7d55 100644 --- a/haiku_generator/step3/lib/data/repositories/product_repository_impl.dart +++ b/haiku_generator/step3/lib/data/repositories/product_repository_impl.dart @@ -11,7 +11,7 @@ class ProductRepositoryImpl implements ProductRepository { {'productName': 'YouTube'}, {'productName': 'Android'}, {'productName': 'Google Maps'}, - {'productName': 'GMail'} + {'productName': 'GMail'}, ]; return dummyData.map((item) => Product.fromMap(item)).toList(); } diff --git a/haiku_generator/step3/lib/domain/models/product.dart b/haiku_generator/step3/lib/domain/models/product.dart index b5091f8201..43fdb68250 100644 --- a/haiku_generator/step3/lib/domain/models/product.dart +++ b/haiku_generator/step3/lib/domain/models/product.dart @@ -4,11 +4,9 @@ class Product { Product(this.productName); Product.fromMap(Map json) - : productName = json['productName']; + : productName = json['productName']; Map toMap() { - return { - 'productName': productName, - }; + return {'productName': productName}; } } diff --git a/haiku_generator/step3/lib/main.dart b/haiku_generator/step3/lib/main.dart index 62eb4b226f..f2db0a2d91 100644 --- a/haiku_generator/step3/lib/main.dart +++ b/haiku_generator/step3/lib/main.dart @@ -13,9 +13,7 @@ class MyApp extends StatelessWidget { Widget build(BuildContext context) { return MaterialApp( title: 'Haiku Generator Demo', - theme: ThemeData( - useMaterial3: true, - ), + theme: ThemeData(useMaterial3: true), home: const HaikuPage(title: 'Haiku generator for Google products'), ); } diff --git a/haiku_generator/step3/lib/widgets/shimmer_gradient.dart b/haiku_generator/step3/lib/widgets/shimmer_gradient.dart index 03d815b57a..5e9de7419a 100644 --- a/haiku_generator/step3/lib/widgets/shimmer_gradient.dart +++ b/haiku_generator/step3/lib/widgets/shimmer_gradient.dart @@ -1,16 +1,8 @@ import 'package:flutter/material.dart'; LinearGradient shimmerGradient = const LinearGradient( - colors: [ - Color(0xFFEBEBF4), - Color(0xFFF4F4F4), - Color(0xFFEBEBF4), - ], - stops: [ - 0.1, - 0.3, - 0.4, - ], + colors: [Color(0xFFEBEBF4), Color(0xFFF4F4F4), Color(0xFFEBEBF4)], + stops: [0.1, 0.3, 0.4], begin: Alignment(-1.0, -0.3), end: Alignment(1.0, 0.3), ); diff --git a/haiku_generator/step3/lib/widgets/shimmer_loading.dart b/haiku_generator/step3/lib/widgets/shimmer_loading.dart index 4611994d12..12eb051bbf 100644 --- a/haiku_generator/step3/lib/widgets/shimmer_loading.dart +++ b/haiku_generator/step3/lib/widgets/shimmer_loading.dart @@ -1,11 +1,7 @@ import 'package:flutter/material.dart'; class Shimmer extends StatefulWidget { - const Shimmer({ - super.key, - required this.linearGradient, - this.child, - }); + const Shimmer({super.key, required this.linearGradient, this.child}); static ShimmerState? of(BuildContext context) { return context.findAncestorStateOfType(); @@ -36,13 +32,12 @@ class ShimmerState extends State with SingleTickerProviderStateMixin { } LinearGradient get gradient => LinearGradient( - colors: widget.linearGradient.colors, - stops: widget.linearGradient.stops, - begin: widget.linearGradient.begin, - end: widget.linearGradient.end, - transform: - SlidingGradientTransform(slidePercent: shimmerController.value), - ); + colors: widget.linearGradient.colors, + stops: widget.linearGradient.stops, + begin: widget.linearGradient.begin, + end: widget.linearGradient.end, + transform: SlidingGradientTransform(slidePercent: shimmerController.value), + ); bool get isSized { if (context.findRenderObject() != null) { @@ -71,9 +66,7 @@ class ShimmerState extends State with SingleTickerProviderStateMixin { } class SlidingGradientTransform extends GradientTransform { - const SlidingGradientTransform({ - required this.slidePercent, - }); + const SlidingGradientTransform({required this.slidePercent}); final double slidePercent; diff --git a/haiku_generator/step3/lib/widgets/shimmer_loading_anim.dart b/haiku_generator/step3/lib/widgets/shimmer_loading_anim.dart index 3dfeda37bb..72b9697804 100644 --- a/haiku_generator/step3/lib/widgets/shimmer_loading_anim.dart +++ b/haiku_generator/step3/lib/widgets/shimmer_loading_anim.dart @@ -4,8 +4,11 @@ import 'shimmer_gradient.dart'; import 'shimmer_loading.dart'; class ShimmerLoadingAnim extends StatelessWidget { - const ShimmerLoadingAnim( - {super.key, required this.child, this.isLoading = false}); + const ShimmerLoadingAnim({ + super.key, + required this.child, + this.isLoading = false, + }); final Widget child; final bool isLoading; @@ -14,10 +17,7 @@ class ShimmerLoadingAnim extends StatelessWidget { Widget build(BuildContext context) { return Shimmer( linearGradient: shimmerGradient, - child: ShimmerLoading( - isLoading: isLoading, - child: child, - ), + child: ShimmerLoading(isLoading: isLoading, child: child), ); } } diff --git a/haiku_generator/step3/pubspec.yaml b/haiku_generator/step3/pubspec.yaml index 826e533279..568dbed7d7 100644 --- a/haiku_generator/step3/pubspec.yaml +++ b/haiku_generator/step3/pubspec.yaml @@ -18,7 +18,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev version: 1.0.0+1 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 # Dependencies specify other packages that your package needs in order to work. # To automatically upgrade your package dependencies to the latest versions diff --git a/homescreen_codelab/step_03/lib/article_screen.dart b/homescreen_codelab/step_03/lib/article_screen.dart index 318ad4a180..a354515c4f 100644 --- a/homescreen_codelab/step_03/lib/article_screen.dart +++ b/homescreen_codelab/step_03/lib/article_screen.dart @@ -5,10 +5,7 @@ import 'news_data.dart'; class ArticleScreen extends StatefulWidget { final NewsArticle article; - const ArticleScreen({ - super.key, - required this.article, - }); + const ArticleScreen({super.key, required this.article}); @override State createState() => _ArticleScreenState(); @@ -19,15 +16,17 @@ class _ArticleScreenState extends State { Widget build(BuildContext context) { return Scaffold( appBar: AppBar( - title: Text(widget.article.title), - titleTextStyle: const TextStyle( - fontSize: 16, fontWeight: FontWeight.bold, color: Colors.black)), + title: Text(widget.article.title), + titleTextStyle: const TextStyle( + fontSize: 16, + fontWeight: FontWeight.bold, + color: Colors.black, + ), + ), floatingActionButton: FloatingActionButton.extended( onPressed: () { ScaffoldMessenger.of(context).showSnackBar( - const SnackBar( - content: Text('Updating home screen widget...'), - ), + const SnackBar(content: Text('Updating home screen widget...')), ); }, label: const Text('Update Homescreen'), @@ -52,18 +51,13 @@ class _ArticleScreenState extends State { } class LineChart extends StatelessWidget { - const LineChart({ - super.key, - }); + const LineChart({super.key}); @override Widget build(BuildContext context) { return CustomPaint( painter: LineChartPainter(), - child: const SizedBox( - height: 200, - width: 200, - ), + child: const SizedBox(height: 200, width: 200), ); } } @@ -71,20 +65,23 @@ class LineChart extends StatelessWidget { class LineChartPainter extends CustomPainter { @override void paint(Canvas canvas, Size size) { - final axisPaint = Paint() - ..color = Colors.black - ..strokeWidth = 2 - ..style = PaintingStyle.stroke; - - final dataPaint = Paint() - ..color = Colors.blue - ..strokeWidth = 2 - ..style = PaintingStyle.stroke; - - final markingLinePaint = Paint() - ..color = Colors.red - ..strokeWidth = 2 - ..style = PaintingStyle.stroke; + final axisPaint = + Paint() + ..color = Colors.black + ..strokeWidth = 2 + ..style = PaintingStyle.stroke; + + final dataPaint = + Paint() + ..color = Colors.blue + ..strokeWidth = 2 + ..style = PaintingStyle.stroke; + + final markingLinePaint = + Paint() + ..color = Colors.red + ..strokeWidth = 2 + ..style = PaintingStyle.stroke; final mockDataPoints = [ const Offset(15, 155), @@ -99,14 +96,16 @@ class LineChartPainter extends CustomPainter { const Offset(200, -10), ]; - final axis = Path() - ..moveTo(0, 0) - ..lineTo(0, size.height) - ..lineTo(size.width, size.height); + final axis = + Path() + ..moveTo(0, 0) + ..lineTo(0, size.height) + ..lineTo(size.width, size.height); - final markingLine = Path() - ..moveTo(-10, 50) - ..lineTo(size.width + 10, 50); + final markingLine = + Path() + ..moveTo(-10, 50) + ..lineTo(size.width + 10, 50); final data = Path()..moveTo(1, 180); diff --git a/homescreen_codelab/step_03/lib/home_screen.dart b/homescreen_codelab/step_03/lib/home_screen.dart index 49a6afc64e..fc8afbf228 100644 --- a/homescreen_codelab/step_03/lib/home_screen.dart +++ b/homescreen_codelab/step_03/lib/home_screen.dart @@ -13,35 +13,38 @@ class _MyHomePageState extends State { @override Widget build(BuildContext context) { return Scaffold( - appBar: AppBar( - title: const Text('Top Stories'), - centerTitle: false, - titleTextStyle: const TextStyle( - fontSize: 30, - fontWeight: FontWeight.bold, - color: Colors.black)), - body: ListView.separated( - separatorBuilder: (context, idx) { - return const Divider(); - }, - itemCount: getNewsStories().length, - itemBuilder: (context, idx) { - final article = getNewsStories()[idx]; - return ListTile( - key: Key('$idx ${article.hashCode}'), - title: Text(article.title), - subtitle: Text(article.description), - onTap: () { - Navigator.of(context).push( - MaterialPageRoute( - builder: (context) { - return ArticleScreen(article: article); - }, - ), - ); - }, - ); - }, - )); + appBar: AppBar( + title: const Text('Top Stories'), + centerTitle: false, + titleTextStyle: const TextStyle( + fontSize: 30, + fontWeight: FontWeight.bold, + color: Colors.black, + ), + ), + body: ListView.separated( + separatorBuilder: (context, idx) { + return const Divider(); + }, + itemCount: getNewsStories().length, + itemBuilder: (context, idx) { + final article = getNewsStories()[idx]; + return ListTile( + key: Key('$idx ${article.hashCode}'), + title: Text(article.title), + subtitle: Text(article.description), + onTap: () { + Navigator.of(context).push( + MaterialPageRoute( + builder: (context) { + return ArticleScreen(article: article); + }, + ), + ); + }, + ); + }, + ), + ); } } diff --git a/homescreen_codelab/step_03/lib/main.dart b/homescreen_codelab/step_03/lib/main.dart index 94735bf1e8..85d9209442 100644 --- a/homescreen_codelab/step_03/lib/main.dart +++ b/homescreen_codelab/step_03/lib/main.dart @@ -16,14 +16,13 @@ class MyApp extends StatelessWidget { theme: ThemeData( useMaterial3: true, appBarTheme: AppBarTheme( - backgroundColor: ColorScheme.fromSeed(seedColor: Colors.deepPurple) - .primaryContainer, + backgroundColor: + ColorScheme.fromSeed( + seedColor: Colors.deepPurple, + ).primaryContainer, ), textTheme: const TextTheme( - titleMedium: TextStyle( - fontFamily: 'Chewy', - fontSize: 20, - ), + titleMedium: TextStyle(fontFamily: 'Chewy', fontSize: 20), ), ), home: const MyHomePage(), diff --git a/homescreen_codelab/step_03/lib/news_data.dart b/homescreen_codelab/step_03/lib/news_data.dart index 17df63fa12..783c03e598 100644 --- a/homescreen_codelab/step_03/lib/news_data.dart +++ b/homescreen_codelab/step_03/lib/news_data.dart @@ -35,6 +35,6 @@ List getNewsStories() { title: 'Flutter DAU surpasses 10 billion', description: 'There are more Flutter users than there are human beings. What gives?', - ) + ), ]; } diff --git a/homescreen_codelab/step_03/pubspec.yaml b/homescreen_codelab/step_03/pubspec.yaml index c18a94f920..d8252f3430 100644 --- a/homescreen_codelab/step_03/pubspec.yaml +++ b/homescreen_codelab/step_03/pubspec.yaml @@ -6,7 +6,7 @@ publish_to: 'none' version: 1.0.0+1 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 dependencies: flutter: diff --git a/homescreen_codelab/step_04/lib/article_screen.dart b/homescreen_codelab/step_04/lib/article_screen.dart index 032da5b9a6..cb745aa3ae 100644 --- a/homescreen_codelab/step_04/lib/article_screen.dart +++ b/homescreen_codelab/step_04/lib/article_screen.dart @@ -7,10 +7,7 @@ import 'news_data.dart'; class ArticleScreen extends StatefulWidget { final NewsArticle article; - const ArticleScreen({ - super.key, - required this.article, - }); + const ArticleScreen({super.key, required this.article}); @override State createState() => _ArticleScreenState(); @@ -21,14 +18,18 @@ class _ArticleScreenState extends State { Widget build(BuildContext context) { return Scaffold( appBar: AppBar( - title: Text(widget.article.title), - titleTextStyle: const TextStyle( - fontSize: 16, fontWeight: FontWeight.bold, color: Colors.black)), + title: Text(widget.article.title), + titleTextStyle: const TextStyle( + fontSize: 16, + fontWeight: FontWeight.bold, + color: Colors.black, + ), + ), floatingActionButton: FloatingActionButton.extended( onPressed: () { - ScaffoldMessenger.of(context).showSnackBar(const SnackBar( - content: Text('Updating home screen widget...'), - )); + ScaffoldMessenger.of(context).showSnackBar( + const SnackBar(content: Text('Updating home screen widget...')), + ); // New: call updateHeadline updateHeadline(widget.article); }, @@ -54,18 +55,13 @@ class _ArticleScreenState extends State { } class LineChart extends StatelessWidget { - const LineChart({ - super.key, - }); + const LineChart({super.key}); @override Widget build(BuildContext context) { return CustomPaint( painter: LineChartPainter(), - child: const SizedBox( - height: 200, - width: 200, - ), + child: const SizedBox(height: 200, width: 200), ); } } @@ -73,20 +69,23 @@ class LineChart extends StatelessWidget { class LineChartPainter extends CustomPainter { @override void paint(Canvas canvas, Size size) { - final axisPaint = Paint() - ..color = Colors.black - ..strokeWidth = 2 - ..style = PaintingStyle.stroke; - - final dataPaint = Paint() - ..color = Colors.blue - ..strokeWidth = 2 - ..style = PaintingStyle.stroke; - - final markingLinePaint = Paint() - ..color = Colors.red - ..strokeWidth = 2 - ..style = PaintingStyle.stroke; + final axisPaint = + Paint() + ..color = Colors.black + ..strokeWidth = 2 + ..style = PaintingStyle.stroke; + + final dataPaint = + Paint() + ..color = Colors.blue + ..strokeWidth = 2 + ..style = PaintingStyle.stroke; + + final markingLinePaint = + Paint() + ..color = Colors.red + ..strokeWidth = 2 + ..style = PaintingStyle.stroke; final mockDataPoints = [ const Offset(15, 155), @@ -101,14 +100,16 @@ class LineChartPainter extends CustomPainter { const Offset(200, -10), ]; - final axis = Path() - ..moveTo(0, 0) - ..lineTo(0, size.height) - ..lineTo(size.width, size.height); + final axis = + Path() + ..moveTo(0, 0) + ..lineTo(0, size.height) + ..lineTo(size.width, size.height); - final markingLine = Path() - ..moveTo(-10, 50) - ..lineTo(size.width + 10, 50); + final markingLine = + Path() + ..moveTo(-10, 50) + ..lineTo(size.width + 10, 50); final data = Path()..moveTo(1, 180); diff --git a/homescreen_codelab/step_04/lib/home_screen.dart b/homescreen_codelab/step_04/lib/home_screen.dart index c09b58c85c..91ee7c69c6 100644 --- a/homescreen_codelab/step_04/lib/home_screen.dart +++ b/homescreen_codelab/step_04/lib/home_screen.dart @@ -22,7 +22,9 @@ void updateHeadline(NewsArticle newHeadline) { // Save the headline data to the widget HomeWidget.saveWidgetData('headline_title', newHeadline.title); HomeWidget.saveWidgetData( - 'headline_description', newHeadline.description); + 'headline_description', + newHeadline.description, + ); HomeWidget.updateWidget( iOSName: iOSWidgetName, androidName: androidWidgetName, @@ -46,35 +48,38 @@ class _MyHomePageState extends State { @override Widget build(BuildContext context) { return Scaffold( - appBar: AppBar( - title: const Text('Top Stories'), - centerTitle: false, - titleTextStyle: const TextStyle( - fontSize: 30, - fontWeight: FontWeight.bold, - color: Colors.black)), - body: ListView.separated( - separatorBuilder: (context, idx) { - return const Divider(); - }, - itemCount: getNewsStories().length, - itemBuilder: (context, idx) { - final article = getNewsStories()[idx]; - return ListTile( - key: Key('$idx ${article.hashCode}'), - title: Text(article.title), - subtitle: Text(article.description), - onTap: () { - Navigator.of(context).push( - MaterialPageRoute( - builder: (context) { - return ArticleScreen(article: article); - }, - ), - ); - }, - ); - }, - )); + appBar: AppBar( + title: const Text('Top Stories'), + centerTitle: false, + titleTextStyle: const TextStyle( + fontSize: 30, + fontWeight: FontWeight.bold, + color: Colors.black, + ), + ), + body: ListView.separated( + separatorBuilder: (context, idx) { + return const Divider(); + }, + itemCount: getNewsStories().length, + itemBuilder: (context, idx) { + final article = getNewsStories()[idx]; + return ListTile( + key: Key('$idx ${article.hashCode}'), + title: Text(article.title), + subtitle: Text(article.description), + onTap: () { + Navigator.of(context).push( + MaterialPageRoute( + builder: (context) { + return ArticleScreen(article: article); + }, + ), + ); + }, + ); + }, + ), + ); } } diff --git a/homescreen_codelab/step_04/lib/main.dart b/homescreen_codelab/step_04/lib/main.dart index 94735bf1e8..85d9209442 100644 --- a/homescreen_codelab/step_04/lib/main.dart +++ b/homescreen_codelab/step_04/lib/main.dart @@ -16,14 +16,13 @@ class MyApp extends StatelessWidget { theme: ThemeData( useMaterial3: true, appBarTheme: AppBarTheme( - backgroundColor: ColorScheme.fromSeed(seedColor: Colors.deepPurple) - .primaryContainer, + backgroundColor: + ColorScheme.fromSeed( + seedColor: Colors.deepPurple, + ).primaryContainer, ), textTheme: const TextTheme( - titleMedium: TextStyle( - fontFamily: 'Chewy', - fontSize: 20, - ), + titleMedium: TextStyle(fontFamily: 'Chewy', fontSize: 20), ), ), home: const MyHomePage(), diff --git a/homescreen_codelab/step_04/lib/news_data.dart b/homescreen_codelab/step_04/lib/news_data.dart index f06d24ef15..0299927168 100644 --- a/homescreen_codelab/step_04/lib/news_data.dart +++ b/homescreen_codelab/step_04/lib/news_data.dart @@ -33,6 +33,6 @@ List getNewsStories() { title: 'Flutter DAU surpasses 10 billion', description: 'There are more Flutter users than there are human beings. What gives?', - ) + ), ]; } diff --git a/homescreen_codelab/step_04/pubspec.yaml b/homescreen_codelab/step_04/pubspec.yaml index e86043988f..1ee2292f20 100644 --- a/homescreen_codelab/step_04/pubspec.yaml +++ b/homescreen_codelab/step_04/pubspec.yaml @@ -6,7 +6,7 @@ publish_to: 'none' version: 1.0.0+1 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 dependencies: flutter: diff --git a/homescreen_codelab/step_05/lib/article_screen.dart b/homescreen_codelab/step_05/lib/article_screen.dart index 271da26e94..4079bbd534 100644 --- a/homescreen_codelab/step_05/lib/article_screen.dart +++ b/homescreen_codelab/step_05/lib/article_screen.dart @@ -6,10 +6,7 @@ import 'news_data.dart'; class ArticleScreen extends StatefulWidget { final NewsArticle article; - const ArticleScreen({ - super.key, - required this.article, - }); + const ArticleScreen({super.key, required this.article}); @override State createState() => _ArticleScreenState(); @@ -20,14 +17,18 @@ class _ArticleScreenState extends State { Widget build(BuildContext context) { return Scaffold( appBar: AppBar( - title: Text(widget.article.title), - titleTextStyle: const TextStyle( - fontSize: 16, fontWeight: FontWeight.bold, color: Colors.black)), + title: Text(widget.article.title), + titleTextStyle: const TextStyle( + fontSize: 16, + fontWeight: FontWeight.bold, + color: Colors.black, + ), + ), floatingActionButton: FloatingActionButton.extended( onPressed: () { - ScaffoldMessenger.of(context).showSnackBar(const SnackBar( - content: Text('Updating home screen widget...'), - )); + ScaffoldMessenger.of(context).showSnackBar( + const SnackBar(content: Text('Updating home screen widget...')), + ); // New: call updateHeadline updateHeadline(widget.article); }, @@ -53,18 +54,13 @@ class _ArticleScreenState extends State { } class LineChart extends StatelessWidget { - const LineChart({ - super.key, - }); + const LineChart({super.key}); @override Widget build(BuildContext context) { return CustomPaint( painter: LineChartPainter(), - child: const SizedBox( - height: 200, - width: 200, - ), + child: const SizedBox(height: 200, width: 200), ); } } @@ -72,20 +68,23 @@ class LineChart extends StatelessWidget { class LineChartPainter extends CustomPainter { @override void paint(Canvas canvas, Size size) { - final axisPaint = Paint() - ..color = Colors.black - ..strokeWidth = 2 - ..style = PaintingStyle.stroke; - - final dataPaint = Paint() - ..color = Colors.blue - ..strokeWidth = 2 - ..style = PaintingStyle.stroke; - - final markingLinePaint = Paint() - ..color = Colors.red - ..strokeWidth = 2 - ..style = PaintingStyle.stroke; + final axisPaint = + Paint() + ..color = Colors.black + ..strokeWidth = 2 + ..style = PaintingStyle.stroke; + + final dataPaint = + Paint() + ..color = Colors.blue + ..strokeWidth = 2 + ..style = PaintingStyle.stroke; + + final markingLinePaint = + Paint() + ..color = Colors.red + ..strokeWidth = 2 + ..style = PaintingStyle.stroke; final mockDataPoints = [ const Offset(15, 155), @@ -100,14 +99,16 @@ class LineChartPainter extends CustomPainter { const Offset(200, -10), ]; - final axis = Path() - ..moveTo(0, 0) - ..lineTo(0, size.height) - ..lineTo(size.width, size.height); + final axis = + Path() + ..moveTo(0, 0) + ..lineTo(0, size.height) + ..lineTo(size.width, size.height); - final markingLine = Path() - ..moveTo(-10, 50) - ..lineTo(size.width + 10, 50); + final markingLine = + Path() + ..moveTo(-10, 50) + ..lineTo(size.width + 10, 50); final data = Path()..moveTo(1, 180); diff --git a/homescreen_codelab/step_05/lib/home_screen.dart b/homescreen_codelab/step_05/lib/home_screen.dart index e9736bf1ca..d4493d5f64 100644 --- a/homescreen_codelab/step_05/lib/home_screen.dart +++ b/homescreen_codelab/step_05/lib/home_screen.dart @@ -18,7 +18,9 @@ class MyHomePage extends StatefulWidget { void updateHeadline(NewsArticle newHeadline) { HomeWidget.saveWidgetData('headline_title', newHeadline.title); HomeWidget.saveWidgetData( - 'headline_description', newHeadline.description); + 'headline_description', + newHeadline.description, + ); HomeWidget.updateWidget( iOSName: iOSWidgetName, androidName: androidWidgetName, @@ -39,35 +41,38 @@ class _MyHomePageState extends State { @override Widget build(BuildContext context) { return Scaffold( - appBar: AppBar( - title: const Text('Top Stories'), - centerTitle: false, - titleTextStyle: const TextStyle( - fontSize: 30, - fontWeight: FontWeight.bold, - color: Colors.black)), - body: ListView.separated( - separatorBuilder: (context, idx) { - return const Divider(); - }, - itemCount: getNewsStories().length, - itemBuilder: (context, idx) { - final article = getNewsStories()[idx]; - return ListTile( - key: Key('$idx ${article.hashCode}'), - title: Text(article.title), - subtitle: Text(article.description), - onTap: () { - Navigator.of(context).push( - MaterialPageRoute( - builder: (context) { - return ArticleScreen(article: article); - }, - ), - ); - }, - ); - }, - )); + appBar: AppBar( + title: const Text('Top Stories'), + centerTitle: false, + titleTextStyle: const TextStyle( + fontSize: 30, + fontWeight: FontWeight.bold, + color: Colors.black, + ), + ), + body: ListView.separated( + separatorBuilder: (context, idx) { + return const Divider(); + }, + itemCount: getNewsStories().length, + itemBuilder: (context, idx) { + final article = getNewsStories()[idx]; + return ListTile( + key: Key('$idx ${article.hashCode}'), + title: Text(article.title), + subtitle: Text(article.description), + onTap: () { + Navigator.of(context).push( + MaterialPageRoute( + builder: (context) { + return ArticleScreen(article: article); + }, + ), + ); + }, + ); + }, + ), + ); } } diff --git a/homescreen_codelab/step_05/lib/main.dart b/homescreen_codelab/step_05/lib/main.dart index 94735bf1e8..85d9209442 100644 --- a/homescreen_codelab/step_05/lib/main.dart +++ b/homescreen_codelab/step_05/lib/main.dart @@ -16,14 +16,13 @@ class MyApp extends StatelessWidget { theme: ThemeData( useMaterial3: true, appBarTheme: AppBarTheme( - backgroundColor: ColorScheme.fromSeed(seedColor: Colors.deepPurple) - .primaryContainer, + backgroundColor: + ColorScheme.fromSeed( + seedColor: Colors.deepPurple, + ).primaryContainer, ), textTheme: const TextTheme( - titleMedium: TextStyle( - fontFamily: 'Chewy', - fontSize: 20, - ), + titleMedium: TextStyle(fontFamily: 'Chewy', fontSize: 20), ), ), home: const MyHomePage(), diff --git a/homescreen_codelab/step_05/lib/news_data.dart b/homescreen_codelab/step_05/lib/news_data.dart index 17df63fa12..783c03e598 100644 --- a/homescreen_codelab/step_05/lib/news_data.dart +++ b/homescreen_codelab/step_05/lib/news_data.dart @@ -35,6 +35,6 @@ List getNewsStories() { title: 'Flutter DAU surpasses 10 billion', description: 'There are more Flutter users than there are human beings. What gives?', - ) + ), ]; } diff --git a/homescreen_codelab/step_05/pubspec.yaml b/homescreen_codelab/step_05/pubspec.yaml index e86043988f..1ee2292f20 100644 --- a/homescreen_codelab/step_05/pubspec.yaml +++ b/homescreen_codelab/step_05/pubspec.yaml @@ -6,7 +6,7 @@ publish_to: 'none' version: 1.0.0+1 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 dependencies: flutter: diff --git a/homescreen_codelab/step_06/lib/article_screen.dart b/homescreen_codelab/step_06/lib/article_screen.dart index 5de5745dbd..3bd835444f 100644 --- a/homescreen_codelab/step_06/lib/article_screen.dart +++ b/homescreen_codelab/step_06/lib/article_screen.dart @@ -8,10 +8,7 @@ import 'news_data.dart'; class ArticleScreen extends StatefulWidget { final NewsArticle article; - const ArticleScreen({ - super.key, - required this.article, - }); + const ArticleScreen({super.key, required this.article}); @override State createState() => _ArticleScreenState(); @@ -26,20 +23,22 @@ class _ArticleScreenState extends State { @override Widget build(BuildContext context) { return Scaffold( - appBar: AppBar( - title: Text(widget.article.title), - ), + appBar: AppBar(title: Text(widget.article.title)), // New: add this FloatingActionButton floatingActionButton: FloatingActionButton.extended( onPressed: () async { if (_globalKey.currentContext != null) { - var path = await HomeWidget.renderFlutterWidget( - const LineChart(), - key: 'filename', - logicalSize: _globalKey.currentContext!.size!, - pixelRatio: - MediaQuery.of(_globalKey.currentContext!).devicePixelRatio, - ) as String; + var path = + await HomeWidget.renderFlutterWidget( + const LineChart(), + key: 'filename', + logicalSize: _globalKey.currentContext!.size!, + pixelRatio: + MediaQuery.of( + _globalKey.currentContext!, + ).devicePixelRatio, + ) + as String; setState(() { imagePath = path; }); @@ -72,18 +71,13 @@ class _ArticleScreenState extends State { } class LineChart extends StatelessWidget { - const LineChart({ - super.key, - }); + const LineChart({super.key}); @override Widget build(BuildContext context) { return CustomPaint( painter: LineChartPainter(), - child: const SizedBox( - height: 200, - width: 200, - ), + child: const SizedBox(height: 200, width: 200), ); } } @@ -91,20 +85,23 @@ class LineChart extends StatelessWidget { class LineChartPainter extends CustomPainter { @override void paint(Canvas canvas, Size size) { - final axisPaint = Paint() - ..color = Colors.black - ..strokeWidth = 2 - ..style = PaintingStyle.stroke; - - final dataPaint = Paint() - ..color = Colors.blue - ..strokeWidth = 2 - ..style = PaintingStyle.stroke; - - final markingLinePaint = Paint() - ..color = Colors.red - ..strokeWidth = 2 - ..style = PaintingStyle.stroke; + final axisPaint = + Paint() + ..color = Colors.black + ..strokeWidth = 2 + ..style = PaintingStyle.stroke; + + final dataPaint = + Paint() + ..color = Colors.blue + ..strokeWidth = 2 + ..style = PaintingStyle.stroke; + + final markingLinePaint = + Paint() + ..color = Colors.red + ..strokeWidth = 2 + ..style = PaintingStyle.stroke; final mockDataPoints = [ const Offset(15, 155), @@ -119,14 +116,16 @@ class LineChartPainter extends CustomPainter { const Offset(200, -10), ]; - final axis = Path() - ..moveTo(0, 0) - ..lineTo(0, size.height) - ..lineTo(size.width, size.height); + final axis = + Path() + ..moveTo(0, 0) + ..lineTo(0, size.height) + ..lineTo(size.width, size.height); - final markingLine = Path() - ..moveTo(-10, 50) - ..lineTo(size.width + 10, 50); + final markingLine = + Path() + ..moveTo(-10, 50) + ..lineTo(size.width + 10, 50); final data = Path()..moveTo(1, 180); diff --git a/homescreen_codelab/step_06/lib/home_screen.dart b/homescreen_codelab/step_06/lib/home_screen.dart index e9736bf1ca..d4493d5f64 100644 --- a/homescreen_codelab/step_06/lib/home_screen.dart +++ b/homescreen_codelab/step_06/lib/home_screen.dart @@ -18,7 +18,9 @@ class MyHomePage extends StatefulWidget { void updateHeadline(NewsArticle newHeadline) { HomeWidget.saveWidgetData('headline_title', newHeadline.title); HomeWidget.saveWidgetData( - 'headline_description', newHeadline.description); + 'headline_description', + newHeadline.description, + ); HomeWidget.updateWidget( iOSName: iOSWidgetName, androidName: androidWidgetName, @@ -39,35 +41,38 @@ class _MyHomePageState extends State { @override Widget build(BuildContext context) { return Scaffold( - appBar: AppBar( - title: const Text('Top Stories'), - centerTitle: false, - titleTextStyle: const TextStyle( - fontSize: 30, - fontWeight: FontWeight.bold, - color: Colors.black)), - body: ListView.separated( - separatorBuilder: (context, idx) { - return const Divider(); - }, - itemCount: getNewsStories().length, - itemBuilder: (context, idx) { - final article = getNewsStories()[idx]; - return ListTile( - key: Key('$idx ${article.hashCode}'), - title: Text(article.title), - subtitle: Text(article.description), - onTap: () { - Navigator.of(context).push( - MaterialPageRoute( - builder: (context) { - return ArticleScreen(article: article); - }, - ), - ); - }, - ); - }, - )); + appBar: AppBar( + title: const Text('Top Stories'), + centerTitle: false, + titleTextStyle: const TextStyle( + fontSize: 30, + fontWeight: FontWeight.bold, + color: Colors.black, + ), + ), + body: ListView.separated( + separatorBuilder: (context, idx) { + return const Divider(); + }, + itemCount: getNewsStories().length, + itemBuilder: (context, idx) { + final article = getNewsStories()[idx]; + return ListTile( + key: Key('$idx ${article.hashCode}'), + title: Text(article.title), + subtitle: Text(article.description), + onTap: () { + Navigator.of(context).push( + MaterialPageRoute( + builder: (context) { + return ArticleScreen(article: article); + }, + ), + ); + }, + ); + }, + ), + ); } } diff --git a/homescreen_codelab/step_06/lib/main.dart b/homescreen_codelab/step_06/lib/main.dart index 94735bf1e8..85d9209442 100644 --- a/homescreen_codelab/step_06/lib/main.dart +++ b/homescreen_codelab/step_06/lib/main.dart @@ -16,14 +16,13 @@ class MyApp extends StatelessWidget { theme: ThemeData( useMaterial3: true, appBarTheme: AppBarTheme( - backgroundColor: ColorScheme.fromSeed(seedColor: Colors.deepPurple) - .primaryContainer, + backgroundColor: + ColorScheme.fromSeed( + seedColor: Colors.deepPurple, + ).primaryContainer, ), textTheme: const TextTheme( - titleMedium: TextStyle( - fontFamily: 'Chewy', - fontSize: 20, - ), + titleMedium: TextStyle(fontFamily: 'Chewy', fontSize: 20), ), ), home: const MyHomePage(), diff --git a/homescreen_codelab/step_06/lib/news_data.dart b/homescreen_codelab/step_06/lib/news_data.dart index f06d24ef15..0299927168 100644 --- a/homescreen_codelab/step_06/lib/news_data.dart +++ b/homescreen_codelab/step_06/lib/news_data.dart @@ -33,6 +33,6 @@ List getNewsStories() { title: 'Flutter DAU surpasses 10 billion', description: 'There are more Flutter users than there are human beings. What gives?', - ) + ), ]; } diff --git a/homescreen_codelab/step_06/pubspec.yaml b/homescreen_codelab/step_06/pubspec.yaml index e86043988f..1ee2292f20 100644 --- a/homescreen_codelab/step_06/pubspec.yaml +++ b/homescreen_codelab/step_06/pubspec.yaml @@ -6,7 +6,7 @@ publish_to: 'none' version: 1.0.0+1 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 dependencies: flutter: diff --git a/in_app_purchases/complete/app/lib/logic/dash_purchases.dart b/in_app_purchases/complete/app/lib/logic/dash_purchases.dart index a8c7e0a12f..a3d5038cc0 100644 --- a/in_app_purchases/complete/app/lib/logic/dash_purchases.dart +++ b/in_app_purchases/complete/app/lib/logic/dash_purchases.dart @@ -76,12 +76,15 @@ class DashPurchases extends ChangeNotifier { await iapConnection.buyNonConsumable(purchaseParam: purchaseParam); default: throw ArgumentError.value( - product.productDetails, '${product.id} is not a known product'); + product.productDetails, + '${product.id} is not a known product', + ); } } Future _onPurchaseUpdate( - List purchaseDetailsList) async { + List purchaseDetailsList, + ) async { for (var purchaseDetails in purchaseDetailsList) { await _handlePurchase(purchaseDetails); } @@ -151,12 +154,16 @@ class DashPurchases extends ChangeNotifier { // Get a list of purchasable products for the subscription and upgrade. // This should be 1 per type. if (products.isNotEmpty) { - subscriptions = products - .where((element) => element.productDetails.id == storeKeySubscription) - .toList(); - upgrades = products - .where((element) => element.productDetails.id == storeKeyUpgrade) - .toList(); + subscriptions = + products + .where( + (element) => element.productDetails.id == storeKeySubscription, + ) + .toList(); + upgrades = + products + .where((element) => element.productDetails.id == storeKeyUpgrade) + .toList(); } // Set the subscription in the counter logic and show/hide purchased on the @@ -179,10 +186,11 @@ class DashPurchases extends ChangeNotifier { _beautifiedDashUpgrade = iapRepo.hasUpgrade; for (final element in upgrades) { _updateStatus( - element, - _beautifiedDashUpgrade - ? ProductStatus.purchased - : ProductStatus.purchasable); + element, + _beautifiedDashUpgrade + ? ProductStatus.purchased + : ProductStatus.purchasable, + ); } notifyListeners(); } diff --git a/in_app_purchases/complete/app/lib/logic/dash_upgrades.dart b/in_app_purchases/complete/app/lib/logic/dash_upgrades.dart index 826aec517a..f6201177f5 100644 --- a/in_app_purchases/complete/app/lib/logic/dash_upgrades.dart +++ b/in_app_purchases/complete/app/lib/logic/dash_upgrades.dart @@ -37,9 +37,7 @@ class DashUpgrades extends ChangeNotifier { _buy(tim); } - void _buy( - Upgrade upgrade, - ) { + void _buy(Upgrade upgrade) { if (counter.count < upgrade.cost) return; counter.addAutoIncrement( diff --git a/in_app_purchases/complete/app/lib/main.dart b/in_app_purchases/complete/app/lib/main.dart index 541c9e42d3..7c13c8b9b1 100644 --- a/in_app_purchases/complete/app/lib/main.dart +++ b/in_app_purchases/complete/app/lib/main.dart @@ -66,41 +66,36 @@ class _MyHomePageState extends State { return MultiProvider( providers: [ ChangeNotifierProvider( - create: (_) => FirebaseNotifier()), + create: (_) => FirebaseNotifier(), + ), ChangeNotifierProvider(create: (_) => DashCounter()), ChangeNotifierProvider( - create: (context) => DashUpgrades( - context.read(), - context.read(), - ), + create: + (context) => DashUpgrades( + context.read(), + context.read(), + ), ), ChangeNotifierProvider( create: (context) => IAPRepo(context.read()), ), ChangeNotifierProvider( - create: (context) => DashPurchases( - context.read(), - context.read(), - context.read(), - ), + create: + (context) => DashPurchases( + context.read(), + context.read(), + context.read(), + ), lazy: false, ), ], child: Scaffold( - appBar: AppBar( - title: Text(widget.title), - ), + appBar: AppBar(title: Text(widget.title)), body: _widgetOptions[_selectedIndex], bottomNavigationBar: BottomNavigationBar( items: const [ - BottomNavigationBarItem( - icon: Icon(Icons.home), - label: 'Home', - ), - BottomNavigationBarItem( - icon: Icon(Icons.shop), - label: 'Purchase', - ), + BottomNavigationBarItem(icon: Icon(Icons.home), label: 'Home'), + BottomNavigationBarItem(icon: Icon(Icons.shop), label: 'Purchase'), ], currentIndex: _selectedIndex, selectedItemColor: Colors.amber[800], diff --git a/in_app_purchases/complete/app/lib/model/firebase_state.dart b/in_app_purchases/complete/app/lib/model/firebase_state.dart index 1a04db5438..9fc7102e99 100644 --- a/in_app_purchases/complete/app/lib/model/firebase_state.dart +++ b/in_app_purchases/complete/app/lib/model/firebase_state.dart @@ -1,5 +1 @@ -enum FirebaseState { - loading, - available, - notAvailable, -} +enum FirebaseState { loading, available, notAvailable } diff --git a/in_app_purchases/complete/app/lib/model/past_purchase.dart b/in_app_purchases/complete/app/lib/model/past_purchase.dart index 42f412481d..63142b1be7 100644 --- a/in_app_purchases/complete/app/lib/model/past_purchase.dart +++ b/in_app_purchases/complete/app/lib/model/past_purchase.dart @@ -2,22 +2,11 @@ import 'package:flutter/widgets.dart'; import '../constants.dart'; -enum PurchaseType { - subscriptionPurchase, - nonSubscriptionPurchase, -} +enum PurchaseType { subscriptionPurchase, nonSubscriptionPurchase } -enum Store { - googlePlay, - appStore, -} +enum Store { googlePlay, appStore } -enum Status { - pending, - completed, - active, - expired, -} +enum Status { pending, completed, active, expired } @immutable class PastPurchase { @@ -33,25 +22,25 @@ class PastPurchase { return switch (productId) { storeKeyConsumable => 'Consumable', storeKeySubscription => 'Subscription', - _ => productId + _ => productId, }; } PastPurchase.fromJson(Map json) - : type = _typeFromString(json['type'] as String), - store = _storeFromString(json['iapSource'] as String), - orderId = json['orderId'] as String, - productId = json['productId'] as String, - purchaseDate = DateTime.now(), - expiryDate = null, - status = _statusFromString(json['status'] as String); + : type = _typeFromString(json['type'] as String), + store = _storeFromString(json['iapSource'] as String), + orderId = json['orderId'] as String, + productId = json['productId'] as String, + purchaseDate = DateTime.now(), + expiryDate = null, + status = _statusFromString(json['status'] as String); } PurchaseType _typeFromString(String type) { return switch (type) { 'nonSubscription' => PurchaseType.subscriptionPurchase, 'subscription' => PurchaseType.nonSubscriptionPurchase, - _ => throw ArgumentError.value(type, '$type is not a supported type') + _ => throw ArgumentError.value(type, '$type is not a supported type'), }; } @@ -59,7 +48,7 @@ Store _storeFromString(String store) { return switch (store) { 'googleplay' => Store.googlePlay, 'appstore' => Store.appStore, - _ => throw ArgumentError.value(store, '$store is not a supported store') + _ => throw ArgumentError.value(store, '$store is not a supported store'), }; } @@ -69,6 +58,6 @@ Status _statusFromString(String status) { 'completed' => Status.completed, 'active' => Status.active, 'expired' => Status.expired, - _ => throw ArgumentError.value(status, '$status is not a supported status') + _ => throw ArgumentError.value(status, '$status is not a supported status'), }; } diff --git a/in_app_purchases/complete/app/lib/model/purchasable_product.dart b/in_app_purchases/complete/app/lib/model/purchasable_product.dart index 9abe078e52..e2b8b81970 100644 --- a/in_app_purchases/complete/app/lib/model/purchasable_product.dart +++ b/in_app_purchases/complete/app/lib/model/purchasable_product.dart @@ -1,10 +1,6 @@ import 'package:in_app_purchase/in_app_purchase.dart'; -enum ProductStatus { - purchasable, - purchased, - pending, -} +enum ProductStatus { purchasable, purchased, pending } class PurchasableProduct { String get id => productDetails.id; diff --git a/in_app_purchases/complete/app/lib/model/store_state.dart b/in_app_purchases/complete/app/lib/model/store_state.dart index a4f1490b60..a299611086 100644 --- a/in_app_purchases/complete/app/lib/model/store_state.dart +++ b/in_app_purchases/complete/app/lib/model/store_state.dart @@ -1,5 +1 @@ -enum StoreState { - loading, - available, - notAvailable, -} +enum StoreState { loading, available, notAvailable } diff --git a/in_app_purchases/complete/app/lib/pages/home_page.dart b/in_app_purchases/complete/app/lib/pages/home_page.dart index 57087c5f24..83d674703b 100644 --- a/in_app_purchases/complete/app/lib/pages/home_page.dart +++ b/in_app_purchases/complete/app/lib/pages/home_page.dart @@ -13,10 +13,7 @@ class HomePage extends StatelessWidget { Widget build(BuildContext context) { return const Column( children: [ - Expanded( - flex: 2, - child: DashClickerWidget(), - ), + Expanded(flex: 2, child: DashClickerWidget()), Expanded(child: UpgradeList()), ], ); @@ -36,10 +33,12 @@ class DashClickerWidget extends StatelessWidget { InkWell( // Don't listen as we don't need a rebuild when the count changes onTap: Provider.of(context, listen: false).increment, - child: Image.asset(context.read().beautifiedDash - ? 'assets/dash.png' - : 'assets/dash_old.png'), - ) + child: Image.asset( + context.read().beautifiedDash + ? 'assets/dash.png' + : 'assets/dash_old.png', + ), + ), ], ), ); @@ -60,8 +59,9 @@ class CounterStateWidget extends StatelessWidget { style: DefaultTextStyle.of(context).style, children: [ TextSpan( - text: counter.countString, - style: const TextStyle(fontWeight: FontWeight.bold)), + text: counter.countString, + style: const TextStyle(fontWeight: FontWeight.bold), + ), const TextSpan(text: ' times!'), ], ), @@ -75,13 +75,15 @@ class UpgradeList extends StatelessWidget { @override Widget build(BuildContext context) { var upgrades = context.watch(); - return ListView(children: [ - _UpgradeWidget( - upgrade: upgrades.tim, - title: 'Tim Sneath', - onPressed: upgrades.addTim, - ), - ]); + return ListView( + children: [ + _UpgradeWidget( + upgrade: upgrades.tim, + title: 'Tim Sneath', + onPressed: upgrades.addTim, + ), + ], + ); } } @@ -99,24 +101,19 @@ class _UpgradeWidget extends StatelessWidget { @override Widget build(BuildContext context) { return InkWell( - onTap: onPressed, - child: ListTile( - leading: Center( - widthFactor: 1, - child: Text( - upgrade.count.toString(), - ), - ), - title: Text( - title, - style: !upgrade.purchasable - ? const TextStyle(color: Colors.redAccent) - : null, - ), - subtitle: Text('Produces ${upgrade.work} dashes per second'), - trailing: Text( - '${NumberFormat.compact().format(upgrade.cost)} dashes', - ), - )); + onTap: onPressed, + child: ListTile( + leading: Center(widthFactor: 1, child: Text(upgrade.count.toString())), + title: Text( + title, + style: + !upgrade.purchasable + ? const TextStyle(color: Colors.redAccent) + : null, + ), + subtitle: Text('Produces ${upgrade.work} dashes per second'), + trailing: Text('${NumberFormat.compact().format(upgrade.cost)} dashes'), + ), + ); } } diff --git a/in_app_purchases/complete/app/lib/pages/login_page.dart b/in_app_purchases/complete/app/lib/pages/login_page.dart index f0bc7dbc45..655da8b403 100644 --- a/in_app_purchases/complete/app/lib/pages/login_page.dart +++ b/in_app_purchases/complete/app/lib/pages/login_page.dart @@ -11,16 +11,15 @@ class LoginPage extends StatelessWidget { var firebaseNotifier = context.watch(); if (firebaseNotifier.isLoggingIn) { - return const Center( - child: Text('Logging in...'), - ); + return const Center(child: Text('Logging in...')); } return Center( - child: FilledButton( - onPressed: () { - firebaseNotifier.login(); - }, - child: const Text('Login'), - )); + child: FilledButton( + onPressed: () { + firebaseNotifier.login(); + }, + child: const Text('Login'), + ), + ); } } diff --git a/in_app_purchases/complete/app/lib/pages/purchase_page.dart b/in_app_purchases/complete/app/lib/pages/purchase_page.dart index 85470b24fb..97eee25f38 100644 --- a/in_app_purchases/complete/app/lib/pages/purchase_page.dart +++ b/in_app_purchases/complete/app/lib/pages/purchase_page.dart @@ -36,17 +36,20 @@ class PurchasePage extends StatelessWidget { case StoreState.notAvailable: storeWidget = _PurchasesNotAvailable(); } - return Column(crossAxisAlignment: CrossAxisAlignment.start, children: [ - storeWidget, - const Padding( - padding: EdgeInsets.fromLTRB(32.0, 32.0, 32.0, 0.0), - child: Text( - 'Past purchases', - style: TextStyle(fontWeight: FontWeight.bold), + return Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + storeWidget, + const Padding( + padding: EdgeInsets.fromLTRB(32.0, 32.0, 32.0, 0.0), + child: Text( + 'Past purchases', + style: TextStyle(fontWeight: FontWeight.bold), + ), ), - ), - const PastPurchasesWidget(), - ]); + const PastPurchasesWidget(), + ], + ); } } @@ -70,13 +73,17 @@ class _PurchaseList extends StatelessWidget { var purchases = context.watch(); var products = purchases.products; return Column( - children: products - .map((product) => _PurchaseWidget( - product: product, - onPressed: () { - purchases.buy(product); - })) - .toList(), + children: + products + .map( + (product) => _PurchaseWidget( + product: product, + onPressed: () { + purchases.buy(product); + }, + ), + ) + .toList(), ); } } @@ -85,10 +92,7 @@ class _PurchaseWidget extends StatelessWidget { final PurchasableProduct product; final VoidCallback onPressed; - const _PurchaseWidget({ - required this.product, - required this.onPressed, - }); + const _PurchaseWidget({required this.product, required this.onPressed}); @override Widget build(BuildContext context) { @@ -97,21 +101,20 @@ class _PurchaseWidget extends StatelessWidget { title += ' (purchased)'; } return InkWell( - onTap: onPressed, - child: ListTile( - title: Text( - title, - ), - subtitle: Text(product.description), - trailing: Text(_trailing()), - )); + onTap: onPressed, + child: ListTile( + title: Text(title), + subtitle: Text(product.description), + trailing: Text(_trailing()), + ), + ); } String _trailing() { return switch (product.status) { ProductStatus.purchasable => product.price, ProductStatus.purchased => 'purchased', - ProductStatus.pending => 'buying...' + ProductStatus.pending => 'buying...', }; } } @@ -125,10 +128,11 @@ class PastPurchasesWidget extends StatelessWidget { return ListView.separated( shrinkWrap: true, itemCount: purchases.length, - itemBuilder: (context, index) => ListTile( - title: Text(purchases[index].title), - subtitle: Text(purchases[index].status.toString()), - ), + itemBuilder: + (context, index) => ListTile( + title: Text(purchases[index].title), + subtitle: Text(purchases[index].status.toString()), + ), separatorBuilder: (context, index) => const Divider(), ); } diff --git a/in_app_purchases/complete/app/lib/repo/iap_repo.dart b/in_app_purchases/complete/app/lib/repo/iap_repo.dart index f238a98c39..67e3f137ba 100644 --- a/in_app_purchases/complete/app/lib/repo/iap_repo.dart +++ b/in_app_purchases/complete/app/lib/repo/iap_repo.dart @@ -47,19 +47,23 @@ class IAPRepo extends ChangeNotifier { hasUpgrade = false; return; } - var purchaseStream = _firestore - .collection('purchases') - .where('userId', isEqualTo: user.uid) - .snapshots(); + var purchaseStream = + _firestore + .collection('purchases') + .where('userId', isEqualTo: user.uid) + .snapshots(); _purchaseSubscription = purchaseStream.listen((snapshot) { - purchases = snapshot.docs.map((document) { - var data = document.data(); - return PastPurchase.fromJson(data); - }).toList(); + purchases = + snapshot.docs.map((document) { + var data = document.data(); + return PastPurchase.fromJson(data); + }).toList(); - hasActiveSubscription = purchases.any((element) => - element.productId == storeKeySubscription && - element.status != Status.expired); + hasActiveSubscription = purchases.any( + (element) => + element.productId == storeKeySubscription && + element.status != Status.expired, + ); hasUpgrade = purchases.any( (element) => element.productId == storeKeyUpgrade, diff --git a/in_app_purchases/complete/app/pubspec.yaml b/in_app_purchases/complete/app/pubspec.yaml index 8cc03a3aa2..b5ded35ba8 100644 --- a/in_app_purchases/complete/app/pubspec.yaml +++ b/in_app_purchases/complete/app/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: "none" version: 1.0.0+1 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 dependencies: cloud_firestore: ^4.0.3 diff --git a/in_app_purchases/complete/app/test/widget_test.dart b/in_app_purchases/complete/app/test/widget_test.dart index cd48c00478..ce165ef6de 100644 --- a/in_app_purchases/complete/app/test/widget_test.dart +++ b/in_app_purchases/complete/app/test/widget_test.dart @@ -13,8 +13,10 @@ void main() { class TestIAPConnection implements InAppPurchase { @override - Future buyConsumable( - {required PurchaseParam purchaseParam, bool autoConsume = true}) { + Future buyConsumable({ + required PurchaseParam purchaseParam, + bool autoConsume = true, + }) { return Future.value(false); } @@ -35,10 +37,9 @@ class TestIAPConnection implements InAppPurchase { @override Future queryProductDetails(Set identifiers) { - return Future.value(ProductDetailsResponse( - productDetails: [], - notFoundIDs: [], - )); + return Future.value( + ProductDetailsResponse(productDetails: [], notFoundIDs: []), + ); } @override diff --git a/in_app_purchases/complete/dart-backend/bin/server.dart b/in_app_purchases/complete/dart-backend/bin/server.dart index 8eb019f5f9..0007cf9ad2 100644 --- a/in_app_purchases/complete/dart-backend/bin/server.dart +++ b/in_app_purchases/complete/dart-backend/bin/server.dart @@ -26,13 +26,14 @@ Future> _createPurchaseHandlers() async { // Configure Android Publisher API access final serviceAccountGooglePlay = File('assets/service-account-google-play.json').readAsStringSync(); - final clientCredentialsGooglePlay = - auth.ServiceAccountCredentials.fromJson(serviceAccountGooglePlay); - final clientGooglePlay = - await auth.clientViaServiceAccount(clientCredentialsGooglePlay, [ - ap.AndroidPublisherApi.androidpublisherScope, - pubsub.PubsubApi.cloudPlatformScope, - ]); + final clientCredentialsGooglePlay = auth.ServiceAccountCredentials.fromJson( + serviceAccountGooglePlay, + ); + final clientGooglePlay = await auth + .clientViaServiceAccount(clientCredentialsGooglePlay, [ + ap.AndroidPublisherApi.androidpublisherScope, + pubsub.PubsubApi.cloudPlatformScope, + ]); final androidPublisher = ap.AndroidPublisherApi(clientGooglePlay); // Pub/Sub API to receive on purchase events from Google Play @@ -41,12 +42,13 @@ Future> _createPurchaseHandlers() async { // Configure Firestore API access final serviceAccountFirebase = File('assets/service-account-firebase.json').readAsStringSync(); - final clientCredentialsFirebase = - auth.ServiceAccountCredentials.fromJson(serviceAccountFirebase); - final clientFirebase = - await auth.clientViaServiceAccount(clientCredentialsFirebase, [ - fs.FirestoreApi.cloudPlatformScope, - ]); + final clientCredentialsFirebase = auth.ServiceAccountCredentials.fromJson( + serviceAccountFirebase, + ); + final clientFirebase = await auth.clientViaServiceAccount( + clientCredentialsFirebase, + [fs.FirestoreApi.cloudPlatformScope], + ); final firestoreApi = fs.FirestoreApi(clientFirebase); final dynamic json = jsonDecode(serviceAccountFirebase); final projectId = json['project_id'] as String; @@ -86,10 +88,7 @@ Future> _createPurchaseHandlers() async { iapRepository, pubsubApi, ), - 'app_store': AppStorePurchaseHandler( - iapRepository, - appStoreServerAPI, - ), + 'app_store': AppStorePurchaseHandler(iapRepository, appStoreServerAPI), }; } @@ -132,19 +131,14 @@ Future main() async { await serveHandler(router.call); } -({ - String userId, - String source, - ProductData productData, - String token, -}) getPurchaseData(dynamic payload) { - if (payload - case { - 'userId': String userId, - 'source': String source, - 'productId': String productId, - 'verificationData': String token, - }) { +({String userId, String source, ProductData productData, String token}) +getPurchaseData(dynamic payload) { + if (payload case { + 'userId': String userId, + 'source': String source, + 'productId': String productId, + 'verificationData': String token, + }) { return ( userId: userId, source: source, diff --git a/in_app_purchases/complete/dart-backend/lib/app_store_purchase_handler.dart b/in_app_purchases/complete/dart-backend/lib/app_store_purchase_handler.dart index 440bbb10ec..b4789d3462 100644 --- a/in_app_purchases/complete/dart-backend/lib/app_store_purchase_handler.dart +++ b/in_app_purchases/complete/dart-backend/lib/app_store_purchase_handler.dart @@ -14,10 +14,7 @@ class AppStorePurchaseHandler extends PurchaseHandler { final IapRepository iapRepository; final AppStoreServerAPI appStoreServerAPI; - AppStorePurchaseHandler( - this.iapRepository, - this.appStoreServerAPI, - ) { + AppStorePurchaseHandler(this.iapRepository, this.appStoreServerAPI) { // Poll Subscription status every 10 seconds. Timer.periodic(Duration(seconds: 10), (_) { _pullStatus(); @@ -25,10 +22,7 @@ class AppStorePurchaseHandler extends PurchaseHandler { } final _iTunesAPI = ITunesApi( - ITunesHttpClient( - ITunesEnvironment.sandbox(), - loggingEnabled: true, - ), + ITunesHttpClient(ITunesEnvironment.sandbox(), loggingEnabled: true), ); @override @@ -71,30 +65,37 @@ class AppStorePurchaseHandler extends PurchaseHandler { } switch (product.type) { case ProductType.nonSubscription: - await iapRepository.createOrUpdatePurchase(NonSubscriptionPurchase( - userId: userId, - productId: receipt.productId ?? '', - iapSource: IAPSource.appstore, - orderId: receipt.originalTransactionId ?? '', - purchaseDate: DateTime.fromMillisecondsSinceEpoch( - int.parse(receipt.originalPurchaseDateMs ?? '0')), - type: product.type, - status: NonSubscriptionStatus.completed, - )); + await iapRepository.createOrUpdatePurchase( + NonSubscriptionPurchase( + userId: userId, + productId: receipt.productId ?? '', + iapSource: IAPSource.appstore, + orderId: receipt.originalTransactionId ?? '', + purchaseDate: DateTime.fromMillisecondsSinceEpoch( + int.parse(receipt.originalPurchaseDateMs ?? '0'), + ), + type: product.type, + status: NonSubscriptionStatus.completed, + ), + ); break; case ProductType.subscription: - await iapRepository.createOrUpdatePurchase(SubscriptionPurchase( - userId: userId, - productId: receipt.productId ?? '', - iapSource: IAPSource.appstore, - orderId: receipt.originalTransactionId ?? '', - purchaseDate: DateTime.fromMillisecondsSinceEpoch( - int.parse(receipt.originalPurchaseDateMs ?? '0')), - type: product.type, - expiryDate: DateTime.fromMillisecondsSinceEpoch( - int.parse(receipt.expiresDateMs ?? '0')), - status: SubscriptionStatus.active, - )); + await iapRepository.createOrUpdatePurchase( + SubscriptionPurchase( + userId: userId, + productId: receipt.productId ?? '', + iapSource: IAPSource.appstore, + orderId: receipt.originalTransactionId ?? '', + purchaseDate: DateTime.fromMillisecondsSinceEpoch( + int.parse(receipt.originalPurchaseDateMs ?? '0'), + ), + type: product.type, + expiryDate: DateTime.fromMillisecondsSinceEpoch( + int.parse(receipt.expiresDateMs ?? '0'), + ), + status: SubscriptionStatus.active, + ), + ); break; } } @@ -112,35 +113,43 @@ class AppStorePurchaseHandler extends PurchaseHandler { print('Polling App Store'); final purchases = await iapRepository.getPurchases(); // filter for App Store subscriptions - final appStoreSubscriptions = purchases.where((element) => - element.type == ProductType.subscription && - element.iapSource == IAPSource.appstore); + final appStoreSubscriptions = purchases.where( + (element) => + element.type == ProductType.subscription && + element.iapSource == IAPSource.appstore, + ); for (final purchase in appStoreSubscriptions) { - final status = - await appStoreServerAPI.getAllSubscriptionStatuses(purchase.orderId); + final status = await appStoreServerAPI.getAllSubscriptionStatuses( + purchase.orderId, + ); // Obtain all subscriptions for the order id. for (final subscription in status.data) { // Last transaction contains the subscription status. for (final transaction in subscription.lastTransactions) { final expirationDate = DateTime.fromMillisecondsSinceEpoch( - transaction.transactionInfo.expiresDate ?? 0); + transaction.transactionInfo.expiresDate ?? 0, + ); // Check if subscription has expired. final isExpired = expirationDate.isBefore(DateTime.now()); print('Expiration Date: $expirationDate - isExpired: $isExpired'); // Update the subscription status with the new expiration date and status. - await iapRepository.updatePurchase(SubscriptionPurchase( - userId: null, - productId: transaction.transactionInfo.productId, - iapSource: IAPSource.appstore, - orderId: transaction.originalTransactionId, - purchaseDate: DateTime.fromMillisecondsSinceEpoch( - transaction.transactionInfo.originalPurchaseDate), - type: ProductType.subscription, - expiryDate: expirationDate, - status: isExpired - ? SubscriptionStatus.expired - : SubscriptionStatus.active, - )); + await iapRepository.updatePurchase( + SubscriptionPurchase( + userId: null, + productId: transaction.transactionInfo.productId, + iapSource: IAPSource.appstore, + orderId: transaction.originalTransactionId, + purchaseDate: DateTime.fromMillisecondsSinceEpoch( + transaction.transactionInfo.originalPurchaseDate, + ), + type: ProductType.subscription, + expiryDate: expirationDate, + status: + isExpired + ? SubscriptionStatus.expired + : SubscriptionStatus.active, + ), + ); } } } diff --git a/in_app_purchases/complete/dart-backend/lib/google_play_purchase_handler.dart b/in_app_purchases/complete/dart-backend/lib/google_play_purchase_handler.dart index b77ca0e461..ead67e4603 100644 --- a/in_app_purchases/complete/dart-backend/lib/google_play_purchase_handler.dart +++ b/in_app_purchases/complete/dart-backend/lib/google_play_purchase_handler.dart @@ -162,9 +162,7 @@ class GooglePlayPurchaseHandler extends PurchaseHandler { /// Called every 10 seconds Future _pullMessageFromPubSub() async { print('Polling Google Play messages'); - final request = pubsub.PullRequest( - maxMessages: 1000, - ); + final request = pubsub.PullRequest(maxMessages: 1000); final topicName = 'projects/$googlePlayProjectName/subscriptions/$googlePlayPubsubBillingTopic-sub'; final pullResponse = await pubsubApi.projects.subscriptions.pull( @@ -230,9 +228,7 @@ class GooglePlayPurchaseHandler extends PurchaseHandler { /// ACK Messages from Pub/Sub Future _ackMessage(String id) async { print('ACK Message'); - final request = pubsub.AcknowledgeRequest( - ackIds: [id], - ); + final request = pubsub.AcknowledgeRequest(ackIds: [id]); final subscriptionName = 'projects/$googlePlayProjectName/subscriptions/$googlePlayPubsubBillingTopic-sub'; await pubsubApi.projects.subscriptions.acknowledge( diff --git a/in_app_purchases/complete/dart-backend/lib/iap_repository.dart b/in_app_purchases/complete/dart-backend/lib/iap_repository.dart index 1856f31c95..98a0d6ace6 100644 --- a/in_app_purchases/complete/dart-backend/lib/iap_repository.dart +++ b/in_app_purchases/complete/dart-backend/lib/iap_repository.dart @@ -2,10 +2,7 @@ import 'package:googleapis/firestore/v1.dart'; import 'products.dart'; -enum IAPSource { - googleplay, - appstore, -} +enum IAPSource { googleplay, appstore } abstract class Purchase { final IAPSource iapSource; @@ -30,8 +27,9 @@ abstract class Purchase { 'orderId': Value(stringValue: orderId), 'productId': Value(stringValue: productId), 'userId': Value(stringValue: userId), - 'purchaseDate': - Value(timestampValue: purchaseDate.toUtc().toIso8601String()), + 'purchaseDate': Value( + timestampValue: purchaseDate.toUtc().toIso8601String(), + ), 'type': Value(stringValue: type.name), }; } @@ -40,46 +38,51 @@ abstract class Purchase { static Purchase fromDocument(Document e) { final type = ProductType.values.firstWhere( - (element) => element.name == e.fields!['type']!.stringValue); + (element) => element.name == e.fields!['type']!.stringValue, + ); switch (type) { case ProductType.subscription: return SubscriptionPurchase( - iapSource: e.fields!['iapSource']!.stringValue == 'googleplay' - ? IAPSource.googleplay - : IAPSource.appstore, + iapSource: + e.fields!['iapSource']!.stringValue == 'googleplay' + ? IAPSource.googleplay + : IAPSource.appstore, orderId: e.fields!['orderId']!.stringValue!, productId: e.fields!['productId']!.stringValue!, userId: e.fields!['userId']!.stringValue, - purchaseDate: - DateTime.parse(e.fields!['purchaseDate']!.timestampValue!), + purchaseDate: DateTime.parse( + e.fields!['purchaseDate']!.timestampValue!, + ), status: SubscriptionStatus.values.firstWhere( - (element) => element.name == e.fields!['status']!.stringValue), - expiryDate: DateTime.tryParse( - e.fields!['expiryDate']?.timestampValue ?? '') ?? + (element) => element.name == e.fields!['status']!.stringValue, + ), + expiryDate: + DateTime.tryParse( + e.fields!['expiryDate']?.timestampValue ?? '', + ) ?? DateTime.now(), ); case ProductType.nonSubscription: return NonSubscriptionPurchase( - iapSource: e.fields!['iapSource']!.stringValue == 'googleplay' - ? IAPSource.googleplay - : IAPSource.appstore, + iapSource: + e.fields!['iapSource']!.stringValue == 'googleplay' + ? IAPSource.googleplay + : IAPSource.appstore, orderId: e.fields!['orderId']!.stringValue!, productId: e.fields!['productId']!.stringValue!, userId: e.fields!['userId']!.stringValue, - purchaseDate: - DateTime.parse(e.fields!['purchaseDate']!.timestampValue!), + purchaseDate: DateTime.parse( + e.fields!['purchaseDate']!.timestampValue!, + ), status: NonSubscriptionStatus.values.firstWhere( - (element) => element.name == e.fields!['status']!.stringValue), + (element) => element.name == e.fields!['status']!.stringValue, + ), ); } } } -enum NonSubscriptionStatus { - pending, - completed, - cancelled, -} +enum NonSubscriptionStatus { pending, completed, cancelled } enum SubscriptionStatus { pending, active, expired } @@ -99,17 +102,13 @@ class NonSubscriptionPurchase extends Purchase { @override Map toDocument() { final doc = super.toDocument(); - doc.addAll({ - 'status': Value(stringValue: status.name), - }); + doc.addAll({'status': Value(stringValue: status.name)}); return doc; } @override Map updateDocument() { - return { - 'status': Value(stringValue: status.name), - }; + return {'status': Value(stringValue: status.name)}; } @override @@ -153,9 +152,7 @@ class SubscriptionPurchase extends Purchase { @override Map updateDocument() { - return { - 'status': Value(stringValue: status.name), - }; + return {'status': Value(stringValue: status.name)}; } @override @@ -187,9 +184,10 @@ class IapRepository { writes: [ Write( update: Document( - fields: purchaseData.toDocument(), - name: - 'projects/$projectId/databases/(default)/documents/purchases/$purchaseId'), + fields: purchaseData.toDocument(), + name: + 'projects/$projectId/databases/(default)/documents/purchases/$purchaseId', + ), ), ], ), @@ -205,9 +203,10 @@ class IapRepository { writes: [ Write( update: Document( - fields: purchaseData.updateDocument(), - name: - 'projects/$projectId/databases/(default)/documents/purchases/$purchaseId'), + fields: purchaseData.updateDocument(), + name: + 'projects/$projectId/databases/(default)/documents/purchases/$purchaseId', + ), updateMask: DocumentMask(fieldPaths: ['status']), ), ], diff --git a/in_app_purchases/complete/dart-backend/lib/products.dart b/in_app_purchases/complete/dart-backend/lib/products.dart index d6baaeb9ca..921ffd8da9 100644 --- a/in_app_purchases/complete/dart-backend/lib/products.dart +++ b/in_app_purchases/complete/dart-backend/lib/products.dart @@ -5,10 +5,7 @@ class ProductData { const ProductData(this.productId, this.type); } -enum ProductType { - subscription, - nonSubscription, -} +enum ProductType { subscription, nonSubscription } const productDataMap = { 'dash_consumable_2k': ProductData( diff --git a/in_app_purchases/complete/dart-backend/pubspec.yaml b/in_app_purchases/complete/dart-backend/pubspec.yaml index c57dee4b4b..b269180b81 100644 --- a/in_app_purchases/complete/dart-backend/pubspec.yaml +++ b/in_app_purchases/complete/dart-backend/pubspec.yaml @@ -4,7 +4,7 @@ version: 1.0.0 # homepage: https://www.example.com environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 dependencies: googleapis: ^11.0.0 diff --git a/in_app_purchases/step_00/app/lib/logic/dash_upgrades.dart b/in_app_purchases/step_00/app/lib/logic/dash_upgrades.dart index 826aec517a..f6201177f5 100644 --- a/in_app_purchases/step_00/app/lib/logic/dash_upgrades.dart +++ b/in_app_purchases/step_00/app/lib/logic/dash_upgrades.dart @@ -37,9 +37,7 @@ class DashUpgrades extends ChangeNotifier { _buy(tim); } - void _buy( - Upgrade upgrade, - ) { + void _buy(Upgrade upgrade) { if (counter.count < upgrade.cost) return; counter.addAutoIncrement( diff --git a/in_app_purchases/step_00/app/lib/main.dart b/in_app_purchases/step_00/app/lib/main.dart index 0a85a4ae74..92f24c6f1f 100644 --- a/in_app_purchases/step_00/app/lib/main.dart +++ b/in_app_purchases/step_00/app/lib/main.dart @@ -52,38 +52,30 @@ class _MyHomePageState extends State { return MultiProvider( providers: [ ChangeNotifierProvider( - create: (_) => FirebaseNotifier()), + create: (_) => FirebaseNotifier(), + ), ChangeNotifierProvider(create: (_) => DashCounter()), ChangeNotifierProvider( - create: (context) => DashUpgrades( - context.read(), - context.read(), - ), + create: + (context) => DashUpgrades( + context.read(), + context.read(), + ), ), ChangeNotifierProvider( create: (context) => IAPRepo(context.read()), ), ChangeNotifierProvider( - create: (context) => DashPurchases( - context.read(), - ), + create: (context) => DashPurchases(context.read()), ), ], child: Scaffold( - appBar: AppBar( - title: Text(widget.title), - ), + appBar: AppBar(title: Text(widget.title)), body: _widgetOptions[_selectedIndex], bottomNavigationBar: BottomNavigationBar( items: const [ - BottomNavigationBarItem( - icon: Icon(Icons.home), - label: 'Home', - ), - BottomNavigationBarItem( - icon: Icon(Icons.shop), - label: 'Purchase', - ), + BottomNavigationBarItem(icon: Icon(Icons.home), label: 'Home'), + BottomNavigationBarItem(icon: Icon(Icons.shop), label: 'Purchase'), ], currentIndex: _selectedIndex, selectedItemColor: Colors.amber[800], diff --git a/in_app_purchases/step_00/app/lib/model/firebase_state.dart b/in_app_purchases/step_00/app/lib/model/firebase_state.dart index 1a04db5438..9fc7102e99 100644 --- a/in_app_purchases/step_00/app/lib/model/firebase_state.dart +++ b/in_app_purchases/step_00/app/lib/model/firebase_state.dart @@ -1,5 +1 @@ -enum FirebaseState { - loading, - available, - notAvailable, -} +enum FirebaseState { loading, available, notAvailable } diff --git a/in_app_purchases/step_00/app/lib/model/past_purchase.dart b/in_app_purchases/step_00/app/lib/model/past_purchase.dart index 42f412481d..63142b1be7 100644 --- a/in_app_purchases/step_00/app/lib/model/past_purchase.dart +++ b/in_app_purchases/step_00/app/lib/model/past_purchase.dart @@ -2,22 +2,11 @@ import 'package:flutter/widgets.dart'; import '../constants.dart'; -enum PurchaseType { - subscriptionPurchase, - nonSubscriptionPurchase, -} +enum PurchaseType { subscriptionPurchase, nonSubscriptionPurchase } -enum Store { - googlePlay, - appStore, -} +enum Store { googlePlay, appStore } -enum Status { - pending, - completed, - active, - expired, -} +enum Status { pending, completed, active, expired } @immutable class PastPurchase { @@ -33,25 +22,25 @@ class PastPurchase { return switch (productId) { storeKeyConsumable => 'Consumable', storeKeySubscription => 'Subscription', - _ => productId + _ => productId, }; } PastPurchase.fromJson(Map json) - : type = _typeFromString(json['type'] as String), - store = _storeFromString(json['iapSource'] as String), - orderId = json['orderId'] as String, - productId = json['productId'] as String, - purchaseDate = DateTime.now(), - expiryDate = null, - status = _statusFromString(json['status'] as String); + : type = _typeFromString(json['type'] as String), + store = _storeFromString(json['iapSource'] as String), + orderId = json['orderId'] as String, + productId = json['productId'] as String, + purchaseDate = DateTime.now(), + expiryDate = null, + status = _statusFromString(json['status'] as String); } PurchaseType _typeFromString(String type) { return switch (type) { 'nonSubscription' => PurchaseType.subscriptionPurchase, 'subscription' => PurchaseType.nonSubscriptionPurchase, - _ => throw ArgumentError.value(type, '$type is not a supported type') + _ => throw ArgumentError.value(type, '$type is not a supported type'), }; } @@ -59,7 +48,7 @@ Store _storeFromString(String store) { return switch (store) { 'googleplay' => Store.googlePlay, 'appstore' => Store.appStore, - _ => throw ArgumentError.value(store, '$store is not a supported store') + _ => throw ArgumentError.value(store, '$store is not a supported store'), }; } @@ -69,6 +58,6 @@ Status _statusFromString(String status) { 'completed' => Status.completed, 'active' => Status.active, 'expired' => Status.expired, - _ => throw ArgumentError.value(status, '$status is not a supported status') + _ => throw ArgumentError.value(status, '$status is not a supported status'), }; } diff --git a/in_app_purchases/step_00/app/lib/model/purchasable_product.dart b/in_app_purchases/step_00/app/lib/model/purchasable_product.dart index 873e488056..46f1aaa0c6 100644 --- a/in_app_purchases/step_00/app/lib/model/purchasable_product.dart +++ b/in_app_purchases/step_00/app/lib/model/purchasable_product.dart @@ -1,8 +1,4 @@ -enum ProductStatus { - purchasable, - purchased, - pending, -} +enum ProductStatus { purchasable, purchased, pending } class PurchasableProduct { final String title; @@ -11,5 +7,5 @@ class PurchasableProduct { ProductStatus status; PurchasableProduct(this.title, this.description, this.price) - : status = ProductStatus.purchasable; + : status = ProductStatus.purchasable; } diff --git a/in_app_purchases/step_00/app/lib/model/store_state.dart b/in_app_purchases/step_00/app/lib/model/store_state.dart index a4f1490b60..a299611086 100644 --- a/in_app_purchases/step_00/app/lib/model/store_state.dart +++ b/in_app_purchases/step_00/app/lib/model/store_state.dart @@ -1,5 +1 @@ -enum StoreState { - loading, - available, - notAvailable, -} +enum StoreState { loading, available, notAvailable } diff --git a/in_app_purchases/step_00/app/lib/pages/home_page.dart b/in_app_purchases/step_00/app/lib/pages/home_page.dart index 57087c5f24..83d674703b 100644 --- a/in_app_purchases/step_00/app/lib/pages/home_page.dart +++ b/in_app_purchases/step_00/app/lib/pages/home_page.dart @@ -13,10 +13,7 @@ class HomePage extends StatelessWidget { Widget build(BuildContext context) { return const Column( children: [ - Expanded( - flex: 2, - child: DashClickerWidget(), - ), + Expanded(flex: 2, child: DashClickerWidget()), Expanded(child: UpgradeList()), ], ); @@ -36,10 +33,12 @@ class DashClickerWidget extends StatelessWidget { InkWell( // Don't listen as we don't need a rebuild when the count changes onTap: Provider.of(context, listen: false).increment, - child: Image.asset(context.read().beautifiedDash - ? 'assets/dash.png' - : 'assets/dash_old.png'), - ) + child: Image.asset( + context.read().beautifiedDash + ? 'assets/dash.png' + : 'assets/dash_old.png', + ), + ), ], ), ); @@ -60,8 +59,9 @@ class CounterStateWidget extends StatelessWidget { style: DefaultTextStyle.of(context).style, children: [ TextSpan( - text: counter.countString, - style: const TextStyle(fontWeight: FontWeight.bold)), + text: counter.countString, + style: const TextStyle(fontWeight: FontWeight.bold), + ), const TextSpan(text: ' times!'), ], ), @@ -75,13 +75,15 @@ class UpgradeList extends StatelessWidget { @override Widget build(BuildContext context) { var upgrades = context.watch(); - return ListView(children: [ - _UpgradeWidget( - upgrade: upgrades.tim, - title: 'Tim Sneath', - onPressed: upgrades.addTim, - ), - ]); + return ListView( + children: [ + _UpgradeWidget( + upgrade: upgrades.tim, + title: 'Tim Sneath', + onPressed: upgrades.addTim, + ), + ], + ); } } @@ -99,24 +101,19 @@ class _UpgradeWidget extends StatelessWidget { @override Widget build(BuildContext context) { return InkWell( - onTap: onPressed, - child: ListTile( - leading: Center( - widthFactor: 1, - child: Text( - upgrade.count.toString(), - ), - ), - title: Text( - title, - style: !upgrade.purchasable - ? const TextStyle(color: Colors.redAccent) - : null, - ), - subtitle: Text('Produces ${upgrade.work} dashes per second'), - trailing: Text( - '${NumberFormat.compact().format(upgrade.cost)} dashes', - ), - )); + onTap: onPressed, + child: ListTile( + leading: Center(widthFactor: 1, child: Text(upgrade.count.toString())), + title: Text( + title, + style: + !upgrade.purchasable + ? const TextStyle(color: Colors.redAccent) + : null, + ), + subtitle: Text('Produces ${upgrade.work} dashes per second'), + trailing: Text('${NumberFormat.compact().format(upgrade.cost)} dashes'), + ), + ); } } diff --git a/in_app_purchases/step_00/app/lib/pages/login_page.dart b/in_app_purchases/step_00/app/lib/pages/login_page.dart index f0bc7dbc45..655da8b403 100644 --- a/in_app_purchases/step_00/app/lib/pages/login_page.dart +++ b/in_app_purchases/step_00/app/lib/pages/login_page.dart @@ -11,16 +11,15 @@ class LoginPage extends StatelessWidget { var firebaseNotifier = context.watch(); if (firebaseNotifier.isLoggingIn) { - return const Center( - child: Text('Logging in...'), - ); + return const Center(child: Text('Logging in...')); } return Center( - child: FilledButton( - onPressed: () { - firebaseNotifier.login(); - }, - child: const Text('Login'), - )); + child: FilledButton( + onPressed: () { + firebaseNotifier.login(); + }, + child: const Text('Login'), + ), + ); } } diff --git a/in_app_purchases/step_00/app/lib/pages/purchase_page.dart b/in_app_purchases/step_00/app/lib/pages/purchase_page.dart index 7b4c011173..5b27d88137 100644 --- a/in_app_purchases/step_00/app/lib/pages/purchase_page.dart +++ b/in_app_purchases/step_00/app/lib/pages/purchase_page.dart @@ -22,17 +22,20 @@ class PurchasePage extends StatelessWidget { case StoreState.notAvailable: storeWidget = _PurchasesNotAvailable(); } - return Column(crossAxisAlignment: CrossAxisAlignment.start, children: [ - storeWidget, - const Padding( - padding: EdgeInsets.fromLTRB(32.0, 32.0, 32.0, 0.0), - child: Text( - 'Past purchases', - style: TextStyle(fontWeight: FontWeight.bold), + return Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + storeWidget, + const Padding( + padding: EdgeInsets.fromLTRB(32.0, 32.0, 32.0, 0.0), + child: Text( + 'Past purchases', + style: TextStyle(fontWeight: FontWeight.bold), + ), ), - ), - const PastPurchasesWidget(), - ]); + const PastPurchasesWidget(), + ], + ); } } @@ -56,13 +59,17 @@ class _PurchaseList extends StatelessWidget { var purchases = context.watch(); var products = purchases.products; return Column( - children: products - .map((product) => _PurchaseWidget( - product: product, - onPressed: () { - purchases.buy(product); - })) - .toList(), + children: + products + .map( + (product) => _PurchaseWidget( + product: product, + onPressed: () { + purchases.buy(product); + }, + ), + ) + .toList(), ); } } @@ -71,10 +78,7 @@ class _PurchaseWidget extends StatelessWidget { final PurchasableProduct product; final VoidCallback onPressed; - const _PurchaseWidget({ - required this.product, - required this.onPressed, - }); + const _PurchaseWidget({required this.product, required this.onPressed}); @override Widget build(BuildContext context) { @@ -83,21 +87,20 @@ class _PurchaseWidget extends StatelessWidget { title += ' (purchased)'; } return InkWell( - onTap: onPressed, - child: ListTile( - title: Text( - title, - ), - subtitle: Text(product.description), - trailing: Text(_trailing()), - )); + onTap: onPressed, + child: ListTile( + title: Text(title), + subtitle: Text(product.description), + trailing: Text(_trailing()), + ), + ); } String _trailing() { return switch (product.status) { ProductStatus.purchasable => product.price, ProductStatus.purchased => 'purchased', - ProductStatus.pending => 'buying...' + ProductStatus.pending => 'buying...', }; } } @@ -111,10 +114,11 @@ class PastPurchasesWidget extends StatelessWidget { return ListView.separated( shrinkWrap: true, itemCount: purchases.length, - itemBuilder: (context, index) => ListTile( - title: Text(purchases[index].title), - subtitle: Text(purchases[index].status.toString()), - ), + itemBuilder: + (context, index) => ListTile( + title: Text(purchases[index].title), + subtitle: Text(purchases[index].status.toString()), + ), separatorBuilder: (context, index) => const Divider(), ); } diff --git a/in_app_purchases/step_00/app/lib/repo/iap_repo.dart b/in_app_purchases/step_00/app/lib/repo/iap_repo.dart index f238a98c39..67e3f137ba 100644 --- a/in_app_purchases/step_00/app/lib/repo/iap_repo.dart +++ b/in_app_purchases/step_00/app/lib/repo/iap_repo.dart @@ -47,19 +47,23 @@ class IAPRepo extends ChangeNotifier { hasUpgrade = false; return; } - var purchaseStream = _firestore - .collection('purchases') - .where('userId', isEqualTo: user.uid) - .snapshots(); + var purchaseStream = + _firestore + .collection('purchases') + .where('userId', isEqualTo: user.uid) + .snapshots(); _purchaseSubscription = purchaseStream.listen((snapshot) { - purchases = snapshot.docs.map((document) { - var data = document.data(); - return PastPurchase.fromJson(data); - }).toList(); + purchases = + snapshot.docs.map((document) { + var data = document.data(); + return PastPurchase.fromJson(data); + }).toList(); - hasActiveSubscription = purchases.any((element) => - element.productId == storeKeySubscription && - element.status != Status.expired); + hasActiveSubscription = purchases.any( + (element) => + element.productId == storeKeySubscription && + element.status != Status.expired, + ); hasUpgrade = purchases.any( (element) => element.productId == storeKeyUpgrade, diff --git a/in_app_purchases/step_00/app/pubspec.yaml b/in_app_purchases/step_00/app/pubspec.yaml index 2a4f7f1c05..f04f77ad6f 100644 --- a/in_app_purchases/step_00/app/pubspec.yaml +++ b/in_app_purchases/step_00/app/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: "none" version: 1.0.0+1 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 dependencies: cloud_firestore: ^4.0.3 diff --git a/in_app_purchases/step_00/dart-backend/lib/iap_repository.dart b/in_app_purchases/step_00/dart-backend/lib/iap_repository.dart index 1856f31c95..98a0d6ace6 100644 --- a/in_app_purchases/step_00/dart-backend/lib/iap_repository.dart +++ b/in_app_purchases/step_00/dart-backend/lib/iap_repository.dart @@ -2,10 +2,7 @@ import 'package:googleapis/firestore/v1.dart'; import 'products.dart'; -enum IAPSource { - googleplay, - appstore, -} +enum IAPSource { googleplay, appstore } abstract class Purchase { final IAPSource iapSource; @@ -30,8 +27,9 @@ abstract class Purchase { 'orderId': Value(stringValue: orderId), 'productId': Value(stringValue: productId), 'userId': Value(stringValue: userId), - 'purchaseDate': - Value(timestampValue: purchaseDate.toUtc().toIso8601String()), + 'purchaseDate': Value( + timestampValue: purchaseDate.toUtc().toIso8601String(), + ), 'type': Value(stringValue: type.name), }; } @@ -40,46 +38,51 @@ abstract class Purchase { static Purchase fromDocument(Document e) { final type = ProductType.values.firstWhere( - (element) => element.name == e.fields!['type']!.stringValue); + (element) => element.name == e.fields!['type']!.stringValue, + ); switch (type) { case ProductType.subscription: return SubscriptionPurchase( - iapSource: e.fields!['iapSource']!.stringValue == 'googleplay' - ? IAPSource.googleplay - : IAPSource.appstore, + iapSource: + e.fields!['iapSource']!.stringValue == 'googleplay' + ? IAPSource.googleplay + : IAPSource.appstore, orderId: e.fields!['orderId']!.stringValue!, productId: e.fields!['productId']!.stringValue!, userId: e.fields!['userId']!.stringValue, - purchaseDate: - DateTime.parse(e.fields!['purchaseDate']!.timestampValue!), + purchaseDate: DateTime.parse( + e.fields!['purchaseDate']!.timestampValue!, + ), status: SubscriptionStatus.values.firstWhere( - (element) => element.name == e.fields!['status']!.stringValue), - expiryDate: DateTime.tryParse( - e.fields!['expiryDate']?.timestampValue ?? '') ?? + (element) => element.name == e.fields!['status']!.stringValue, + ), + expiryDate: + DateTime.tryParse( + e.fields!['expiryDate']?.timestampValue ?? '', + ) ?? DateTime.now(), ); case ProductType.nonSubscription: return NonSubscriptionPurchase( - iapSource: e.fields!['iapSource']!.stringValue == 'googleplay' - ? IAPSource.googleplay - : IAPSource.appstore, + iapSource: + e.fields!['iapSource']!.stringValue == 'googleplay' + ? IAPSource.googleplay + : IAPSource.appstore, orderId: e.fields!['orderId']!.stringValue!, productId: e.fields!['productId']!.stringValue!, userId: e.fields!['userId']!.stringValue, - purchaseDate: - DateTime.parse(e.fields!['purchaseDate']!.timestampValue!), + purchaseDate: DateTime.parse( + e.fields!['purchaseDate']!.timestampValue!, + ), status: NonSubscriptionStatus.values.firstWhere( - (element) => element.name == e.fields!['status']!.stringValue), + (element) => element.name == e.fields!['status']!.stringValue, + ), ); } } } -enum NonSubscriptionStatus { - pending, - completed, - cancelled, -} +enum NonSubscriptionStatus { pending, completed, cancelled } enum SubscriptionStatus { pending, active, expired } @@ -99,17 +102,13 @@ class NonSubscriptionPurchase extends Purchase { @override Map toDocument() { final doc = super.toDocument(); - doc.addAll({ - 'status': Value(stringValue: status.name), - }); + doc.addAll({'status': Value(stringValue: status.name)}); return doc; } @override Map updateDocument() { - return { - 'status': Value(stringValue: status.name), - }; + return {'status': Value(stringValue: status.name)}; } @override @@ -153,9 +152,7 @@ class SubscriptionPurchase extends Purchase { @override Map updateDocument() { - return { - 'status': Value(stringValue: status.name), - }; + return {'status': Value(stringValue: status.name)}; } @override @@ -187,9 +184,10 @@ class IapRepository { writes: [ Write( update: Document( - fields: purchaseData.toDocument(), - name: - 'projects/$projectId/databases/(default)/documents/purchases/$purchaseId'), + fields: purchaseData.toDocument(), + name: + 'projects/$projectId/databases/(default)/documents/purchases/$purchaseId', + ), ), ], ), @@ -205,9 +203,10 @@ class IapRepository { writes: [ Write( update: Document( - fields: purchaseData.updateDocument(), - name: - 'projects/$projectId/databases/(default)/documents/purchases/$purchaseId'), + fields: purchaseData.updateDocument(), + name: + 'projects/$projectId/databases/(default)/documents/purchases/$purchaseId', + ), updateMask: DocumentMask(fieldPaths: ['status']), ), ], diff --git a/in_app_purchases/step_00/dart-backend/lib/products.dart b/in_app_purchases/step_00/dart-backend/lib/products.dart index d6baaeb9ca..921ffd8da9 100644 --- a/in_app_purchases/step_00/dart-backend/lib/products.dart +++ b/in_app_purchases/step_00/dart-backend/lib/products.dart @@ -5,10 +5,7 @@ class ProductData { const ProductData(this.productId, this.type); } -enum ProductType { - subscription, - nonSubscription, -} +enum ProductType { subscription, nonSubscription } const productDataMap = { 'dash_consumable_2k': ProductData( diff --git a/in_app_purchases/step_00/dart-backend/pubspec.yaml b/in_app_purchases/step_00/dart-backend/pubspec.yaml index c57dee4b4b..b269180b81 100644 --- a/in_app_purchases/step_00/dart-backend/pubspec.yaml +++ b/in_app_purchases/step_00/dart-backend/pubspec.yaml @@ -4,7 +4,7 @@ version: 1.0.0 # homepage: https://www.example.com environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 dependencies: googleapis: ^11.0.0 diff --git a/in_app_purchases/step_07/app/lib/logic/dash_upgrades.dart b/in_app_purchases/step_07/app/lib/logic/dash_upgrades.dart index 826aec517a..f6201177f5 100644 --- a/in_app_purchases/step_07/app/lib/logic/dash_upgrades.dart +++ b/in_app_purchases/step_07/app/lib/logic/dash_upgrades.dart @@ -37,9 +37,7 @@ class DashUpgrades extends ChangeNotifier { _buy(tim); } - void _buy( - Upgrade upgrade, - ) { + void _buy(Upgrade upgrade) { if (counter.count < upgrade.cost) return; counter.addAutoIncrement( diff --git a/in_app_purchases/step_07/app/lib/main.dart b/in_app_purchases/step_07/app/lib/main.dart index 481a138860..96f84d57cd 100644 --- a/in_app_purchases/step_07/app/lib/main.dart +++ b/in_app_purchases/step_07/app/lib/main.dart @@ -66,39 +66,31 @@ class _MyHomePageState extends State { return MultiProvider( providers: [ ChangeNotifierProvider( - create: (_) => FirebaseNotifier()), + create: (_) => FirebaseNotifier(), + ), ChangeNotifierProvider(create: (_) => DashCounter()), ChangeNotifierProvider( - create: (context) => DashUpgrades( - context.read(), - context.read(), - ), + create: + (context) => DashUpgrades( + context.read(), + context.read(), + ), ), ChangeNotifierProvider( create: (context) => IAPRepo(context.read()), ), ChangeNotifierProvider( - create: (context) => DashPurchases( - context.read(), - ), + create: (context) => DashPurchases(context.read()), lazy: false, ), ], child: Scaffold( - appBar: AppBar( - title: Text(widget.title), - ), + appBar: AppBar(title: Text(widget.title)), body: _widgetOptions[_selectedIndex], bottomNavigationBar: BottomNavigationBar( items: const [ - BottomNavigationBarItem( - icon: Icon(Icons.home), - label: 'Home', - ), - BottomNavigationBarItem( - icon: Icon(Icons.shop), - label: 'Purchase', - ), + BottomNavigationBarItem(icon: Icon(Icons.home), label: 'Home'), + BottomNavigationBarItem(icon: Icon(Icons.shop), label: 'Purchase'), ], currentIndex: _selectedIndex, selectedItemColor: Colors.amber[800], diff --git a/in_app_purchases/step_07/app/lib/model/firebase_state.dart b/in_app_purchases/step_07/app/lib/model/firebase_state.dart index 1a04db5438..9fc7102e99 100644 --- a/in_app_purchases/step_07/app/lib/model/firebase_state.dart +++ b/in_app_purchases/step_07/app/lib/model/firebase_state.dart @@ -1,5 +1 @@ -enum FirebaseState { - loading, - available, - notAvailable, -} +enum FirebaseState { loading, available, notAvailable } diff --git a/in_app_purchases/step_07/app/lib/model/past_purchase.dart b/in_app_purchases/step_07/app/lib/model/past_purchase.dart index 42f412481d..63142b1be7 100644 --- a/in_app_purchases/step_07/app/lib/model/past_purchase.dart +++ b/in_app_purchases/step_07/app/lib/model/past_purchase.dart @@ -2,22 +2,11 @@ import 'package:flutter/widgets.dart'; import '../constants.dart'; -enum PurchaseType { - subscriptionPurchase, - nonSubscriptionPurchase, -} +enum PurchaseType { subscriptionPurchase, nonSubscriptionPurchase } -enum Store { - googlePlay, - appStore, -} +enum Store { googlePlay, appStore } -enum Status { - pending, - completed, - active, - expired, -} +enum Status { pending, completed, active, expired } @immutable class PastPurchase { @@ -33,25 +22,25 @@ class PastPurchase { return switch (productId) { storeKeyConsumable => 'Consumable', storeKeySubscription => 'Subscription', - _ => productId + _ => productId, }; } PastPurchase.fromJson(Map json) - : type = _typeFromString(json['type'] as String), - store = _storeFromString(json['iapSource'] as String), - orderId = json['orderId'] as String, - productId = json['productId'] as String, - purchaseDate = DateTime.now(), - expiryDate = null, - status = _statusFromString(json['status'] as String); + : type = _typeFromString(json['type'] as String), + store = _storeFromString(json['iapSource'] as String), + orderId = json['orderId'] as String, + productId = json['productId'] as String, + purchaseDate = DateTime.now(), + expiryDate = null, + status = _statusFromString(json['status'] as String); } PurchaseType _typeFromString(String type) { return switch (type) { 'nonSubscription' => PurchaseType.subscriptionPurchase, 'subscription' => PurchaseType.nonSubscriptionPurchase, - _ => throw ArgumentError.value(type, '$type is not a supported type') + _ => throw ArgumentError.value(type, '$type is not a supported type'), }; } @@ -59,7 +48,7 @@ Store _storeFromString(String store) { return switch (store) { 'googleplay' => Store.googlePlay, 'appstore' => Store.appStore, - _ => throw ArgumentError.value(store, '$store is not a supported store') + _ => throw ArgumentError.value(store, '$store is not a supported store'), }; } @@ -69,6 +58,6 @@ Status _statusFromString(String status) { 'completed' => Status.completed, 'active' => Status.active, 'expired' => Status.expired, - _ => throw ArgumentError.value(status, '$status is not a supported status') + _ => throw ArgumentError.value(status, '$status is not a supported status'), }; } diff --git a/in_app_purchases/step_07/app/lib/model/purchasable_product.dart b/in_app_purchases/step_07/app/lib/model/purchasable_product.dart index 873e488056..46f1aaa0c6 100644 --- a/in_app_purchases/step_07/app/lib/model/purchasable_product.dart +++ b/in_app_purchases/step_07/app/lib/model/purchasable_product.dart @@ -1,8 +1,4 @@ -enum ProductStatus { - purchasable, - purchased, - pending, -} +enum ProductStatus { purchasable, purchased, pending } class PurchasableProduct { final String title; @@ -11,5 +7,5 @@ class PurchasableProduct { ProductStatus status; PurchasableProduct(this.title, this.description, this.price) - : status = ProductStatus.purchasable; + : status = ProductStatus.purchasable; } diff --git a/in_app_purchases/step_07/app/lib/model/store_state.dart b/in_app_purchases/step_07/app/lib/model/store_state.dart index a4f1490b60..a299611086 100644 --- a/in_app_purchases/step_07/app/lib/model/store_state.dart +++ b/in_app_purchases/step_07/app/lib/model/store_state.dart @@ -1,5 +1 @@ -enum StoreState { - loading, - available, - notAvailable, -} +enum StoreState { loading, available, notAvailable } diff --git a/in_app_purchases/step_07/app/lib/pages/home_page.dart b/in_app_purchases/step_07/app/lib/pages/home_page.dart index 57087c5f24..83d674703b 100644 --- a/in_app_purchases/step_07/app/lib/pages/home_page.dart +++ b/in_app_purchases/step_07/app/lib/pages/home_page.dart @@ -13,10 +13,7 @@ class HomePage extends StatelessWidget { Widget build(BuildContext context) { return const Column( children: [ - Expanded( - flex: 2, - child: DashClickerWidget(), - ), + Expanded(flex: 2, child: DashClickerWidget()), Expanded(child: UpgradeList()), ], ); @@ -36,10 +33,12 @@ class DashClickerWidget extends StatelessWidget { InkWell( // Don't listen as we don't need a rebuild when the count changes onTap: Provider.of(context, listen: false).increment, - child: Image.asset(context.read().beautifiedDash - ? 'assets/dash.png' - : 'assets/dash_old.png'), - ) + child: Image.asset( + context.read().beautifiedDash + ? 'assets/dash.png' + : 'assets/dash_old.png', + ), + ), ], ), ); @@ -60,8 +59,9 @@ class CounterStateWidget extends StatelessWidget { style: DefaultTextStyle.of(context).style, children: [ TextSpan( - text: counter.countString, - style: const TextStyle(fontWeight: FontWeight.bold)), + text: counter.countString, + style: const TextStyle(fontWeight: FontWeight.bold), + ), const TextSpan(text: ' times!'), ], ), @@ -75,13 +75,15 @@ class UpgradeList extends StatelessWidget { @override Widget build(BuildContext context) { var upgrades = context.watch(); - return ListView(children: [ - _UpgradeWidget( - upgrade: upgrades.tim, - title: 'Tim Sneath', - onPressed: upgrades.addTim, - ), - ]); + return ListView( + children: [ + _UpgradeWidget( + upgrade: upgrades.tim, + title: 'Tim Sneath', + onPressed: upgrades.addTim, + ), + ], + ); } } @@ -99,24 +101,19 @@ class _UpgradeWidget extends StatelessWidget { @override Widget build(BuildContext context) { return InkWell( - onTap: onPressed, - child: ListTile( - leading: Center( - widthFactor: 1, - child: Text( - upgrade.count.toString(), - ), - ), - title: Text( - title, - style: !upgrade.purchasable - ? const TextStyle(color: Colors.redAccent) - : null, - ), - subtitle: Text('Produces ${upgrade.work} dashes per second'), - trailing: Text( - '${NumberFormat.compact().format(upgrade.cost)} dashes', - ), - )); + onTap: onPressed, + child: ListTile( + leading: Center(widthFactor: 1, child: Text(upgrade.count.toString())), + title: Text( + title, + style: + !upgrade.purchasable + ? const TextStyle(color: Colors.redAccent) + : null, + ), + subtitle: Text('Produces ${upgrade.work} dashes per second'), + trailing: Text('${NumberFormat.compact().format(upgrade.cost)} dashes'), + ), + ); } } diff --git a/in_app_purchases/step_07/app/lib/pages/login_page.dart b/in_app_purchases/step_07/app/lib/pages/login_page.dart index f0bc7dbc45..655da8b403 100644 --- a/in_app_purchases/step_07/app/lib/pages/login_page.dart +++ b/in_app_purchases/step_07/app/lib/pages/login_page.dart @@ -11,16 +11,15 @@ class LoginPage extends StatelessWidget { var firebaseNotifier = context.watch(); if (firebaseNotifier.isLoggingIn) { - return const Center( - child: Text('Logging in...'), - ); + return const Center(child: Text('Logging in...')); } return Center( - child: FilledButton( - onPressed: () { - firebaseNotifier.login(); - }, - child: const Text('Login'), - )); + child: FilledButton( + onPressed: () { + firebaseNotifier.login(); + }, + child: const Text('Login'), + ), + ); } } diff --git a/in_app_purchases/step_07/app/lib/pages/purchase_page.dart b/in_app_purchases/step_07/app/lib/pages/purchase_page.dart index 7b4c011173..5b27d88137 100644 --- a/in_app_purchases/step_07/app/lib/pages/purchase_page.dart +++ b/in_app_purchases/step_07/app/lib/pages/purchase_page.dart @@ -22,17 +22,20 @@ class PurchasePage extends StatelessWidget { case StoreState.notAvailable: storeWidget = _PurchasesNotAvailable(); } - return Column(crossAxisAlignment: CrossAxisAlignment.start, children: [ - storeWidget, - const Padding( - padding: EdgeInsets.fromLTRB(32.0, 32.0, 32.0, 0.0), - child: Text( - 'Past purchases', - style: TextStyle(fontWeight: FontWeight.bold), + return Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + storeWidget, + const Padding( + padding: EdgeInsets.fromLTRB(32.0, 32.0, 32.0, 0.0), + child: Text( + 'Past purchases', + style: TextStyle(fontWeight: FontWeight.bold), + ), ), - ), - const PastPurchasesWidget(), - ]); + const PastPurchasesWidget(), + ], + ); } } @@ -56,13 +59,17 @@ class _PurchaseList extends StatelessWidget { var purchases = context.watch(); var products = purchases.products; return Column( - children: products - .map((product) => _PurchaseWidget( - product: product, - onPressed: () { - purchases.buy(product); - })) - .toList(), + children: + products + .map( + (product) => _PurchaseWidget( + product: product, + onPressed: () { + purchases.buy(product); + }, + ), + ) + .toList(), ); } } @@ -71,10 +78,7 @@ class _PurchaseWidget extends StatelessWidget { final PurchasableProduct product; final VoidCallback onPressed; - const _PurchaseWidget({ - required this.product, - required this.onPressed, - }); + const _PurchaseWidget({required this.product, required this.onPressed}); @override Widget build(BuildContext context) { @@ -83,21 +87,20 @@ class _PurchaseWidget extends StatelessWidget { title += ' (purchased)'; } return InkWell( - onTap: onPressed, - child: ListTile( - title: Text( - title, - ), - subtitle: Text(product.description), - trailing: Text(_trailing()), - )); + onTap: onPressed, + child: ListTile( + title: Text(title), + subtitle: Text(product.description), + trailing: Text(_trailing()), + ), + ); } String _trailing() { return switch (product.status) { ProductStatus.purchasable => product.price, ProductStatus.purchased => 'purchased', - ProductStatus.pending => 'buying...' + ProductStatus.pending => 'buying...', }; } } @@ -111,10 +114,11 @@ class PastPurchasesWidget extends StatelessWidget { return ListView.separated( shrinkWrap: true, itemCount: purchases.length, - itemBuilder: (context, index) => ListTile( - title: Text(purchases[index].title), - subtitle: Text(purchases[index].status.toString()), - ), + itemBuilder: + (context, index) => ListTile( + title: Text(purchases[index].title), + subtitle: Text(purchases[index].status.toString()), + ), separatorBuilder: (context, index) => const Divider(), ); } diff --git a/in_app_purchases/step_07/app/lib/repo/iap_repo.dart b/in_app_purchases/step_07/app/lib/repo/iap_repo.dart index f238a98c39..67e3f137ba 100644 --- a/in_app_purchases/step_07/app/lib/repo/iap_repo.dart +++ b/in_app_purchases/step_07/app/lib/repo/iap_repo.dart @@ -47,19 +47,23 @@ class IAPRepo extends ChangeNotifier { hasUpgrade = false; return; } - var purchaseStream = _firestore - .collection('purchases') - .where('userId', isEqualTo: user.uid) - .snapshots(); + var purchaseStream = + _firestore + .collection('purchases') + .where('userId', isEqualTo: user.uid) + .snapshots(); _purchaseSubscription = purchaseStream.listen((snapshot) { - purchases = snapshot.docs.map((document) { - var data = document.data(); - return PastPurchase.fromJson(data); - }).toList(); + purchases = + snapshot.docs.map((document) { + var data = document.data(); + return PastPurchase.fromJson(data); + }).toList(); - hasActiveSubscription = purchases.any((element) => - element.productId == storeKeySubscription && - element.status != Status.expired); + hasActiveSubscription = purchases.any( + (element) => + element.productId == storeKeySubscription && + element.status != Status.expired, + ); hasUpgrade = purchases.any( (element) => element.productId == storeKeyUpgrade, diff --git a/in_app_purchases/step_07/app/pubspec.yaml b/in_app_purchases/step_07/app/pubspec.yaml index 2a4f7f1c05..f04f77ad6f 100644 --- a/in_app_purchases/step_07/app/pubspec.yaml +++ b/in_app_purchases/step_07/app/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: "none" version: 1.0.0+1 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 dependencies: cloud_firestore: ^4.0.3 diff --git a/in_app_purchases/step_07/app/test/widget_test.dart b/in_app_purchases/step_07/app/test/widget_test.dart index cd48c00478..ce165ef6de 100644 --- a/in_app_purchases/step_07/app/test/widget_test.dart +++ b/in_app_purchases/step_07/app/test/widget_test.dart @@ -13,8 +13,10 @@ void main() { class TestIAPConnection implements InAppPurchase { @override - Future buyConsumable( - {required PurchaseParam purchaseParam, bool autoConsume = true}) { + Future buyConsumable({ + required PurchaseParam purchaseParam, + bool autoConsume = true, + }) { return Future.value(false); } @@ -35,10 +37,9 @@ class TestIAPConnection implements InAppPurchase { @override Future queryProductDetails(Set identifiers) { - return Future.value(ProductDetailsResponse( - productDetails: [], - notFoundIDs: [], - )); + return Future.value( + ProductDetailsResponse(productDetails: [], notFoundIDs: []), + ); } @override diff --git a/in_app_purchases/step_07/dart-backend/lib/iap_repository.dart b/in_app_purchases/step_07/dart-backend/lib/iap_repository.dart index 1856f31c95..98a0d6ace6 100644 --- a/in_app_purchases/step_07/dart-backend/lib/iap_repository.dart +++ b/in_app_purchases/step_07/dart-backend/lib/iap_repository.dart @@ -2,10 +2,7 @@ import 'package:googleapis/firestore/v1.dart'; import 'products.dart'; -enum IAPSource { - googleplay, - appstore, -} +enum IAPSource { googleplay, appstore } abstract class Purchase { final IAPSource iapSource; @@ -30,8 +27,9 @@ abstract class Purchase { 'orderId': Value(stringValue: orderId), 'productId': Value(stringValue: productId), 'userId': Value(stringValue: userId), - 'purchaseDate': - Value(timestampValue: purchaseDate.toUtc().toIso8601String()), + 'purchaseDate': Value( + timestampValue: purchaseDate.toUtc().toIso8601String(), + ), 'type': Value(stringValue: type.name), }; } @@ -40,46 +38,51 @@ abstract class Purchase { static Purchase fromDocument(Document e) { final type = ProductType.values.firstWhere( - (element) => element.name == e.fields!['type']!.stringValue); + (element) => element.name == e.fields!['type']!.stringValue, + ); switch (type) { case ProductType.subscription: return SubscriptionPurchase( - iapSource: e.fields!['iapSource']!.stringValue == 'googleplay' - ? IAPSource.googleplay - : IAPSource.appstore, + iapSource: + e.fields!['iapSource']!.stringValue == 'googleplay' + ? IAPSource.googleplay + : IAPSource.appstore, orderId: e.fields!['orderId']!.stringValue!, productId: e.fields!['productId']!.stringValue!, userId: e.fields!['userId']!.stringValue, - purchaseDate: - DateTime.parse(e.fields!['purchaseDate']!.timestampValue!), + purchaseDate: DateTime.parse( + e.fields!['purchaseDate']!.timestampValue!, + ), status: SubscriptionStatus.values.firstWhere( - (element) => element.name == e.fields!['status']!.stringValue), - expiryDate: DateTime.tryParse( - e.fields!['expiryDate']?.timestampValue ?? '') ?? + (element) => element.name == e.fields!['status']!.stringValue, + ), + expiryDate: + DateTime.tryParse( + e.fields!['expiryDate']?.timestampValue ?? '', + ) ?? DateTime.now(), ); case ProductType.nonSubscription: return NonSubscriptionPurchase( - iapSource: e.fields!['iapSource']!.stringValue == 'googleplay' - ? IAPSource.googleplay - : IAPSource.appstore, + iapSource: + e.fields!['iapSource']!.stringValue == 'googleplay' + ? IAPSource.googleplay + : IAPSource.appstore, orderId: e.fields!['orderId']!.stringValue!, productId: e.fields!['productId']!.stringValue!, userId: e.fields!['userId']!.stringValue, - purchaseDate: - DateTime.parse(e.fields!['purchaseDate']!.timestampValue!), + purchaseDate: DateTime.parse( + e.fields!['purchaseDate']!.timestampValue!, + ), status: NonSubscriptionStatus.values.firstWhere( - (element) => element.name == e.fields!['status']!.stringValue), + (element) => element.name == e.fields!['status']!.stringValue, + ), ); } } } -enum NonSubscriptionStatus { - pending, - completed, - cancelled, -} +enum NonSubscriptionStatus { pending, completed, cancelled } enum SubscriptionStatus { pending, active, expired } @@ -99,17 +102,13 @@ class NonSubscriptionPurchase extends Purchase { @override Map toDocument() { final doc = super.toDocument(); - doc.addAll({ - 'status': Value(stringValue: status.name), - }); + doc.addAll({'status': Value(stringValue: status.name)}); return doc; } @override Map updateDocument() { - return { - 'status': Value(stringValue: status.name), - }; + return {'status': Value(stringValue: status.name)}; } @override @@ -153,9 +152,7 @@ class SubscriptionPurchase extends Purchase { @override Map updateDocument() { - return { - 'status': Value(stringValue: status.name), - }; + return {'status': Value(stringValue: status.name)}; } @override @@ -187,9 +184,10 @@ class IapRepository { writes: [ Write( update: Document( - fields: purchaseData.toDocument(), - name: - 'projects/$projectId/databases/(default)/documents/purchases/$purchaseId'), + fields: purchaseData.toDocument(), + name: + 'projects/$projectId/databases/(default)/documents/purchases/$purchaseId', + ), ), ], ), @@ -205,9 +203,10 @@ class IapRepository { writes: [ Write( update: Document( - fields: purchaseData.updateDocument(), - name: - 'projects/$projectId/databases/(default)/documents/purchases/$purchaseId'), + fields: purchaseData.updateDocument(), + name: + 'projects/$projectId/databases/(default)/documents/purchases/$purchaseId', + ), updateMask: DocumentMask(fieldPaths: ['status']), ), ], diff --git a/in_app_purchases/step_07/dart-backend/lib/products.dart b/in_app_purchases/step_07/dart-backend/lib/products.dart index d6baaeb9ca..921ffd8da9 100644 --- a/in_app_purchases/step_07/dart-backend/lib/products.dart +++ b/in_app_purchases/step_07/dart-backend/lib/products.dart @@ -5,10 +5,7 @@ class ProductData { const ProductData(this.productId, this.type); } -enum ProductType { - subscription, - nonSubscription, -} +enum ProductType { subscription, nonSubscription } const productDataMap = { 'dash_consumable_2k': ProductData( diff --git a/in_app_purchases/step_07/dart-backend/pubspec.yaml b/in_app_purchases/step_07/dart-backend/pubspec.yaml index c57dee4b4b..b269180b81 100644 --- a/in_app_purchases/step_07/dart-backend/pubspec.yaml +++ b/in_app_purchases/step_07/dart-backend/pubspec.yaml @@ -4,7 +4,7 @@ version: 1.0.0 # homepage: https://www.example.com environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 dependencies: googleapis: ^11.0.0 diff --git a/in_app_purchases/step_08/app/lib/logic/dash_purchases.dart b/in_app_purchases/step_08/app/lib/logic/dash_purchases.dart index de187049ba..b114faedaf 100644 --- a/in_app_purchases/step_08/app/lib/logic/dash_purchases.dart +++ b/in_app_purchases/step_08/app/lib/logic/dash_purchases.dart @@ -66,12 +66,15 @@ class DashPurchases extends ChangeNotifier { await iapConnection.buyNonConsumable(purchaseParam: purchaseParam); default: throw ArgumentError.value( - product.productDetails, '${product.id} is not a known product'); + product.productDetails, + '${product.id} is not a known product', + ); } } Future _onPurchaseUpdate( - List purchaseDetailsList) async { + List purchaseDetailsList, + ) async { for (var purchaseDetails in purchaseDetailsList) { await _handlePurchase(purchaseDetails); } diff --git a/in_app_purchases/step_08/app/lib/logic/dash_upgrades.dart b/in_app_purchases/step_08/app/lib/logic/dash_upgrades.dart index 826aec517a..f6201177f5 100644 --- a/in_app_purchases/step_08/app/lib/logic/dash_upgrades.dart +++ b/in_app_purchases/step_08/app/lib/logic/dash_upgrades.dart @@ -37,9 +37,7 @@ class DashUpgrades extends ChangeNotifier { _buy(tim); } - void _buy( - Upgrade upgrade, - ) { + void _buy(Upgrade upgrade) { if (counter.count < upgrade.cost) return; counter.addAutoIncrement( diff --git a/in_app_purchases/step_08/app/lib/main.dart b/in_app_purchases/step_08/app/lib/main.dart index 481a138860..96f84d57cd 100644 --- a/in_app_purchases/step_08/app/lib/main.dart +++ b/in_app_purchases/step_08/app/lib/main.dart @@ -66,39 +66,31 @@ class _MyHomePageState extends State { return MultiProvider( providers: [ ChangeNotifierProvider( - create: (_) => FirebaseNotifier()), + create: (_) => FirebaseNotifier(), + ), ChangeNotifierProvider(create: (_) => DashCounter()), ChangeNotifierProvider( - create: (context) => DashUpgrades( - context.read(), - context.read(), - ), + create: + (context) => DashUpgrades( + context.read(), + context.read(), + ), ), ChangeNotifierProvider( create: (context) => IAPRepo(context.read()), ), ChangeNotifierProvider( - create: (context) => DashPurchases( - context.read(), - ), + create: (context) => DashPurchases(context.read()), lazy: false, ), ], child: Scaffold( - appBar: AppBar( - title: Text(widget.title), - ), + appBar: AppBar(title: Text(widget.title)), body: _widgetOptions[_selectedIndex], bottomNavigationBar: BottomNavigationBar( items: const [ - BottomNavigationBarItem( - icon: Icon(Icons.home), - label: 'Home', - ), - BottomNavigationBarItem( - icon: Icon(Icons.shop), - label: 'Purchase', - ), + BottomNavigationBarItem(icon: Icon(Icons.home), label: 'Home'), + BottomNavigationBarItem(icon: Icon(Icons.shop), label: 'Purchase'), ], currentIndex: _selectedIndex, selectedItemColor: Colors.amber[800], diff --git a/in_app_purchases/step_08/app/lib/model/firebase_state.dart b/in_app_purchases/step_08/app/lib/model/firebase_state.dart index 1a04db5438..9fc7102e99 100644 --- a/in_app_purchases/step_08/app/lib/model/firebase_state.dart +++ b/in_app_purchases/step_08/app/lib/model/firebase_state.dart @@ -1,5 +1 @@ -enum FirebaseState { - loading, - available, - notAvailable, -} +enum FirebaseState { loading, available, notAvailable } diff --git a/in_app_purchases/step_08/app/lib/model/past_purchase.dart b/in_app_purchases/step_08/app/lib/model/past_purchase.dart index 42f412481d..63142b1be7 100644 --- a/in_app_purchases/step_08/app/lib/model/past_purchase.dart +++ b/in_app_purchases/step_08/app/lib/model/past_purchase.dart @@ -2,22 +2,11 @@ import 'package:flutter/widgets.dart'; import '../constants.dart'; -enum PurchaseType { - subscriptionPurchase, - nonSubscriptionPurchase, -} +enum PurchaseType { subscriptionPurchase, nonSubscriptionPurchase } -enum Store { - googlePlay, - appStore, -} +enum Store { googlePlay, appStore } -enum Status { - pending, - completed, - active, - expired, -} +enum Status { pending, completed, active, expired } @immutable class PastPurchase { @@ -33,25 +22,25 @@ class PastPurchase { return switch (productId) { storeKeyConsumable => 'Consumable', storeKeySubscription => 'Subscription', - _ => productId + _ => productId, }; } PastPurchase.fromJson(Map json) - : type = _typeFromString(json['type'] as String), - store = _storeFromString(json['iapSource'] as String), - orderId = json['orderId'] as String, - productId = json['productId'] as String, - purchaseDate = DateTime.now(), - expiryDate = null, - status = _statusFromString(json['status'] as String); + : type = _typeFromString(json['type'] as String), + store = _storeFromString(json['iapSource'] as String), + orderId = json['orderId'] as String, + productId = json['productId'] as String, + purchaseDate = DateTime.now(), + expiryDate = null, + status = _statusFromString(json['status'] as String); } PurchaseType _typeFromString(String type) { return switch (type) { 'nonSubscription' => PurchaseType.subscriptionPurchase, 'subscription' => PurchaseType.nonSubscriptionPurchase, - _ => throw ArgumentError.value(type, '$type is not a supported type') + _ => throw ArgumentError.value(type, '$type is not a supported type'), }; } @@ -59,7 +48,7 @@ Store _storeFromString(String store) { return switch (store) { 'googleplay' => Store.googlePlay, 'appstore' => Store.appStore, - _ => throw ArgumentError.value(store, '$store is not a supported store') + _ => throw ArgumentError.value(store, '$store is not a supported store'), }; } @@ -69,6 +58,6 @@ Status _statusFromString(String status) { 'completed' => Status.completed, 'active' => Status.active, 'expired' => Status.expired, - _ => throw ArgumentError.value(status, '$status is not a supported status') + _ => throw ArgumentError.value(status, '$status is not a supported status'), }; } diff --git a/in_app_purchases/step_08/app/lib/model/purchasable_product.dart b/in_app_purchases/step_08/app/lib/model/purchasable_product.dart index 9abe078e52..e2b8b81970 100644 --- a/in_app_purchases/step_08/app/lib/model/purchasable_product.dart +++ b/in_app_purchases/step_08/app/lib/model/purchasable_product.dart @@ -1,10 +1,6 @@ import 'package:in_app_purchase/in_app_purchase.dart'; -enum ProductStatus { - purchasable, - purchased, - pending, -} +enum ProductStatus { purchasable, purchased, pending } class PurchasableProduct { String get id => productDetails.id; diff --git a/in_app_purchases/step_08/app/lib/model/store_state.dart b/in_app_purchases/step_08/app/lib/model/store_state.dart index a4f1490b60..a299611086 100644 --- a/in_app_purchases/step_08/app/lib/model/store_state.dart +++ b/in_app_purchases/step_08/app/lib/model/store_state.dart @@ -1,5 +1 @@ -enum StoreState { - loading, - available, - notAvailable, -} +enum StoreState { loading, available, notAvailable } diff --git a/in_app_purchases/step_08/app/lib/pages/home_page.dart b/in_app_purchases/step_08/app/lib/pages/home_page.dart index 57087c5f24..83d674703b 100644 --- a/in_app_purchases/step_08/app/lib/pages/home_page.dart +++ b/in_app_purchases/step_08/app/lib/pages/home_page.dart @@ -13,10 +13,7 @@ class HomePage extends StatelessWidget { Widget build(BuildContext context) { return const Column( children: [ - Expanded( - flex: 2, - child: DashClickerWidget(), - ), + Expanded(flex: 2, child: DashClickerWidget()), Expanded(child: UpgradeList()), ], ); @@ -36,10 +33,12 @@ class DashClickerWidget extends StatelessWidget { InkWell( // Don't listen as we don't need a rebuild when the count changes onTap: Provider.of(context, listen: false).increment, - child: Image.asset(context.read().beautifiedDash - ? 'assets/dash.png' - : 'assets/dash_old.png'), - ) + child: Image.asset( + context.read().beautifiedDash + ? 'assets/dash.png' + : 'assets/dash_old.png', + ), + ), ], ), ); @@ -60,8 +59,9 @@ class CounterStateWidget extends StatelessWidget { style: DefaultTextStyle.of(context).style, children: [ TextSpan( - text: counter.countString, - style: const TextStyle(fontWeight: FontWeight.bold)), + text: counter.countString, + style: const TextStyle(fontWeight: FontWeight.bold), + ), const TextSpan(text: ' times!'), ], ), @@ -75,13 +75,15 @@ class UpgradeList extends StatelessWidget { @override Widget build(BuildContext context) { var upgrades = context.watch(); - return ListView(children: [ - _UpgradeWidget( - upgrade: upgrades.tim, - title: 'Tim Sneath', - onPressed: upgrades.addTim, - ), - ]); + return ListView( + children: [ + _UpgradeWidget( + upgrade: upgrades.tim, + title: 'Tim Sneath', + onPressed: upgrades.addTim, + ), + ], + ); } } @@ -99,24 +101,19 @@ class _UpgradeWidget extends StatelessWidget { @override Widget build(BuildContext context) { return InkWell( - onTap: onPressed, - child: ListTile( - leading: Center( - widthFactor: 1, - child: Text( - upgrade.count.toString(), - ), - ), - title: Text( - title, - style: !upgrade.purchasable - ? const TextStyle(color: Colors.redAccent) - : null, - ), - subtitle: Text('Produces ${upgrade.work} dashes per second'), - trailing: Text( - '${NumberFormat.compact().format(upgrade.cost)} dashes', - ), - )); + onTap: onPressed, + child: ListTile( + leading: Center(widthFactor: 1, child: Text(upgrade.count.toString())), + title: Text( + title, + style: + !upgrade.purchasable + ? const TextStyle(color: Colors.redAccent) + : null, + ), + subtitle: Text('Produces ${upgrade.work} dashes per second'), + trailing: Text('${NumberFormat.compact().format(upgrade.cost)} dashes'), + ), + ); } } diff --git a/in_app_purchases/step_08/app/lib/pages/login_page.dart b/in_app_purchases/step_08/app/lib/pages/login_page.dart index f0bc7dbc45..655da8b403 100644 --- a/in_app_purchases/step_08/app/lib/pages/login_page.dart +++ b/in_app_purchases/step_08/app/lib/pages/login_page.dart @@ -11,16 +11,15 @@ class LoginPage extends StatelessWidget { var firebaseNotifier = context.watch(); if (firebaseNotifier.isLoggingIn) { - return const Center( - child: Text('Logging in...'), - ); + return const Center(child: Text('Logging in...')); } return Center( - child: FilledButton( - onPressed: () { - firebaseNotifier.login(); - }, - child: const Text('Login'), - )); + child: FilledButton( + onPressed: () { + firebaseNotifier.login(); + }, + child: const Text('Login'), + ), + ); } } diff --git a/in_app_purchases/step_08/app/lib/pages/purchase_page.dart b/in_app_purchases/step_08/app/lib/pages/purchase_page.dart index 7b4c011173..5b27d88137 100644 --- a/in_app_purchases/step_08/app/lib/pages/purchase_page.dart +++ b/in_app_purchases/step_08/app/lib/pages/purchase_page.dart @@ -22,17 +22,20 @@ class PurchasePage extends StatelessWidget { case StoreState.notAvailable: storeWidget = _PurchasesNotAvailable(); } - return Column(crossAxisAlignment: CrossAxisAlignment.start, children: [ - storeWidget, - const Padding( - padding: EdgeInsets.fromLTRB(32.0, 32.0, 32.0, 0.0), - child: Text( - 'Past purchases', - style: TextStyle(fontWeight: FontWeight.bold), + return Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + storeWidget, + const Padding( + padding: EdgeInsets.fromLTRB(32.0, 32.0, 32.0, 0.0), + child: Text( + 'Past purchases', + style: TextStyle(fontWeight: FontWeight.bold), + ), ), - ), - const PastPurchasesWidget(), - ]); + const PastPurchasesWidget(), + ], + ); } } @@ -56,13 +59,17 @@ class _PurchaseList extends StatelessWidget { var purchases = context.watch(); var products = purchases.products; return Column( - children: products - .map((product) => _PurchaseWidget( - product: product, - onPressed: () { - purchases.buy(product); - })) - .toList(), + children: + products + .map( + (product) => _PurchaseWidget( + product: product, + onPressed: () { + purchases.buy(product); + }, + ), + ) + .toList(), ); } } @@ -71,10 +78,7 @@ class _PurchaseWidget extends StatelessWidget { final PurchasableProduct product; final VoidCallback onPressed; - const _PurchaseWidget({ - required this.product, - required this.onPressed, - }); + const _PurchaseWidget({required this.product, required this.onPressed}); @override Widget build(BuildContext context) { @@ -83,21 +87,20 @@ class _PurchaseWidget extends StatelessWidget { title += ' (purchased)'; } return InkWell( - onTap: onPressed, - child: ListTile( - title: Text( - title, - ), - subtitle: Text(product.description), - trailing: Text(_trailing()), - )); + onTap: onPressed, + child: ListTile( + title: Text(title), + subtitle: Text(product.description), + trailing: Text(_trailing()), + ), + ); } String _trailing() { return switch (product.status) { ProductStatus.purchasable => product.price, ProductStatus.purchased => 'purchased', - ProductStatus.pending => 'buying...' + ProductStatus.pending => 'buying...', }; } } @@ -111,10 +114,11 @@ class PastPurchasesWidget extends StatelessWidget { return ListView.separated( shrinkWrap: true, itemCount: purchases.length, - itemBuilder: (context, index) => ListTile( - title: Text(purchases[index].title), - subtitle: Text(purchases[index].status.toString()), - ), + itemBuilder: + (context, index) => ListTile( + title: Text(purchases[index].title), + subtitle: Text(purchases[index].status.toString()), + ), separatorBuilder: (context, index) => const Divider(), ); } diff --git a/in_app_purchases/step_08/app/lib/repo/iap_repo.dart b/in_app_purchases/step_08/app/lib/repo/iap_repo.dart index f238a98c39..67e3f137ba 100644 --- a/in_app_purchases/step_08/app/lib/repo/iap_repo.dart +++ b/in_app_purchases/step_08/app/lib/repo/iap_repo.dart @@ -47,19 +47,23 @@ class IAPRepo extends ChangeNotifier { hasUpgrade = false; return; } - var purchaseStream = _firestore - .collection('purchases') - .where('userId', isEqualTo: user.uid) - .snapshots(); + var purchaseStream = + _firestore + .collection('purchases') + .where('userId', isEqualTo: user.uid) + .snapshots(); _purchaseSubscription = purchaseStream.listen((snapshot) { - purchases = snapshot.docs.map((document) { - var data = document.data(); - return PastPurchase.fromJson(data); - }).toList(); + purchases = + snapshot.docs.map((document) { + var data = document.data(); + return PastPurchase.fromJson(data); + }).toList(); - hasActiveSubscription = purchases.any((element) => - element.productId == storeKeySubscription && - element.status != Status.expired); + hasActiveSubscription = purchases.any( + (element) => + element.productId == storeKeySubscription && + element.status != Status.expired, + ); hasUpgrade = purchases.any( (element) => element.productId == storeKeyUpgrade, diff --git a/in_app_purchases/step_08/app/pubspec.yaml b/in_app_purchases/step_08/app/pubspec.yaml index 2a4f7f1c05..f04f77ad6f 100644 --- a/in_app_purchases/step_08/app/pubspec.yaml +++ b/in_app_purchases/step_08/app/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: "none" version: 1.0.0+1 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 dependencies: cloud_firestore: ^4.0.3 diff --git a/in_app_purchases/step_08/app/test/widget_test.dart b/in_app_purchases/step_08/app/test/widget_test.dart index cd48c00478..ce165ef6de 100644 --- a/in_app_purchases/step_08/app/test/widget_test.dart +++ b/in_app_purchases/step_08/app/test/widget_test.dart @@ -13,8 +13,10 @@ void main() { class TestIAPConnection implements InAppPurchase { @override - Future buyConsumable( - {required PurchaseParam purchaseParam, bool autoConsume = true}) { + Future buyConsumable({ + required PurchaseParam purchaseParam, + bool autoConsume = true, + }) { return Future.value(false); } @@ -35,10 +37,9 @@ class TestIAPConnection implements InAppPurchase { @override Future queryProductDetails(Set identifiers) { - return Future.value(ProductDetailsResponse( - productDetails: [], - notFoundIDs: [], - )); + return Future.value( + ProductDetailsResponse(productDetails: [], notFoundIDs: []), + ); } @override diff --git a/in_app_purchases/step_08/dart-backend/lib/iap_repository.dart b/in_app_purchases/step_08/dart-backend/lib/iap_repository.dart index 1856f31c95..98a0d6ace6 100644 --- a/in_app_purchases/step_08/dart-backend/lib/iap_repository.dart +++ b/in_app_purchases/step_08/dart-backend/lib/iap_repository.dart @@ -2,10 +2,7 @@ import 'package:googleapis/firestore/v1.dart'; import 'products.dart'; -enum IAPSource { - googleplay, - appstore, -} +enum IAPSource { googleplay, appstore } abstract class Purchase { final IAPSource iapSource; @@ -30,8 +27,9 @@ abstract class Purchase { 'orderId': Value(stringValue: orderId), 'productId': Value(stringValue: productId), 'userId': Value(stringValue: userId), - 'purchaseDate': - Value(timestampValue: purchaseDate.toUtc().toIso8601String()), + 'purchaseDate': Value( + timestampValue: purchaseDate.toUtc().toIso8601String(), + ), 'type': Value(stringValue: type.name), }; } @@ -40,46 +38,51 @@ abstract class Purchase { static Purchase fromDocument(Document e) { final type = ProductType.values.firstWhere( - (element) => element.name == e.fields!['type']!.stringValue); + (element) => element.name == e.fields!['type']!.stringValue, + ); switch (type) { case ProductType.subscription: return SubscriptionPurchase( - iapSource: e.fields!['iapSource']!.stringValue == 'googleplay' - ? IAPSource.googleplay - : IAPSource.appstore, + iapSource: + e.fields!['iapSource']!.stringValue == 'googleplay' + ? IAPSource.googleplay + : IAPSource.appstore, orderId: e.fields!['orderId']!.stringValue!, productId: e.fields!['productId']!.stringValue!, userId: e.fields!['userId']!.stringValue, - purchaseDate: - DateTime.parse(e.fields!['purchaseDate']!.timestampValue!), + purchaseDate: DateTime.parse( + e.fields!['purchaseDate']!.timestampValue!, + ), status: SubscriptionStatus.values.firstWhere( - (element) => element.name == e.fields!['status']!.stringValue), - expiryDate: DateTime.tryParse( - e.fields!['expiryDate']?.timestampValue ?? '') ?? + (element) => element.name == e.fields!['status']!.stringValue, + ), + expiryDate: + DateTime.tryParse( + e.fields!['expiryDate']?.timestampValue ?? '', + ) ?? DateTime.now(), ); case ProductType.nonSubscription: return NonSubscriptionPurchase( - iapSource: e.fields!['iapSource']!.stringValue == 'googleplay' - ? IAPSource.googleplay - : IAPSource.appstore, + iapSource: + e.fields!['iapSource']!.stringValue == 'googleplay' + ? IAPSource.googleplay + : IAPSource.appstore, orderId: e.fields!['orderId']!.stringValue!, productId: e.fields!['productId']!.stringValue!, userId: e.fields!['userId']!.stringValue, - purchaseDate: - DateTime.parse(e.fields!['purchaseDate']!.timestampValue!), + purchaseDate: DateTime.parse( + e.fields!['purchaseDate']!.timestampValue!, + ), status: NonSubscriptionStatus.values.firstWhere( - (element) => element.name == e.fields!['status']!.stringValue), + (element) => element.name == e.fields!['status']!.stringValue, + ), ); } } } -enum NonSubscriptionStatus { - pending, - completed, - cancelled, -} +enum NonSubscriptionStatus { pending, completed, cancelled } enum SubscriptionStatus { pending, active, expired } @@ -99,17 +102,13 @@ class NonSubscriptionPurchase extends Purchase { @override Map toDocument() { final doc = super.toDocument(); - doc.addAll({ - 'status': Value(stringValue: status.name), - }); + doc.addAll({'status': Value(stringValue: status.name)}); return doc; } @override Map updateDocument() { - return { - 'status': Value(stringValue: status.name), - }; + return {'status': Value(stringValue: status.name)}; } @override @@ -153,9 +152,7 @@ class SubscriptionPurchase extends Purchase { @override Map updateDocument() { - return { - 'status': Value(stringValue: status.name), - }; + return {'status': Value(stringValue: status.name)}; } @override @@ -187,9 +184,10 @@ class IapRepository { writes: [ Write( update: Document( - fields: purchaseData.toDocument(), - name: - 'projects/$projectId/databases/(default)/documents/purchases/$purchaseId'), + fields: purchaseData.toDocument(), + name: + 'projects/$projectId/databases/(default)/documents/purchases/$purchaseId', + ), ), ], ), @@ -205,9 +203,10 @@ class IapRepository { writes: [ Write( update: Document( - fields: purchaseData.updateDocument(), - name: - 'projects/$projectId/databases/(default)/documents/purchases/$purchaseId'), + fields: purchaseData.updateDocument(), + name: + 'projects/$projectId/databases/(default)/documents/purchases/$purchaseId', + ), updateMask: DocumentMask(fieldPaths: ['status']), ), ], diff --git a/in_app_purchases/step_08/dart-backend/lib/products.dart b/in_app_purchases/step_08/dart-backend/lib/products.dart index d6baaeb9ca..921ffd8da9 100644 --- a/in_app_purchases/step_08/dart-backend/lib/products.dart +++ b/in_app_purchases/step_08/dart-backend/lib/products.dart @@ -5,10 +5,7 @@ class ProductData { const ProductData(this.productId, this.type); } -enum ProductType { - subscription, - nonSubscription, -} +enum ProductType { subscription, nonSubscription } const productDataMap = { 'dash_consumable_2k': ProductData( diff --git a/in_app_purchases/step_08/dart-backend/pubspec.yaml b/in_app_purchases/step_08/dart-backend/pubspec.yaml index c57dee4b4b..b269180b81 100644 --- a/in_app_purchases/step_08/dart-backend/pubspec.yaml +++ b/in_app_purchases/step_08/dart-backend/pubspec.yaml @@ -4,7 +4,7 @@ version: 1.0.0 # homepage: https://www.example.com environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 dependencies: googleapis: ^11.0.0 diff --git a/in_app_purchases/step_09/app/lib/logic/dash_purchases.dart b/in_app_purchases/step_09/app/lib/logic/dash_purchases.dart index 7803176552..d81ee593c5 100644 --- a/in_app_purchases/step_09/app/lib/logic/dash_purchases.dart +++ b/in_app_purchases/step_09/app/lib/logic/dash_purchases.dart @@ -70,12 +70,15 @@ class DashPurchases extends ChangeNotifier { await iapConnection.buyNonConsumable(purchaseParam: purchaseParam); default: throw ArgumentError.value( - product.productDetails, '${product.id} is not a known product'); + product.productDetails, + '${product.id} is not a known product', + ); } } Future _onPurchaseUpdate( - List purchaseDetailsList) async { + List purchaseDetailsList, + ) async { for (var purchaseDetails in purchaseDetailsList) { await _handlePurchase(purchaseDetails); } diff --git a/in_app_purchases/step_09/app/lib/logic/dash_upgrades.dart b/in_app_purchases/step_09/app/lib/logic/dash_upgrades.dart index 826aec517a..f6201177f5 100644 --- a/in_app_purchases/step_09/app/lib/logic/dash_upgrades.dart +++ b/in_app_purchases/step_09/app/lib/logic/dash_upgrades.dart @@ -37,9 +37,7 @@ class DashUpgrades extends ChangeNotifier { _buy(tim); } - void _buy( - Upgrade upgrade, - ) { + void _buy(Upgrade upgrade) { if (counter.count < upgrade.cost) return; counter.addAutoIncrement( diff --git a/in_app_purchases/step_09/app/lib/main.dart b/in_app_purchases/step_09/app/lib/main.dart index be757cc2ba..943470fb01 100644 --- a/in_app_purchases/step_09/app/lib/main.dart +++ b/in_app_purchases/step_09/app/lib/main.dart @@ -66,40 +66,35 @@ class _MyHomePageState extends State { return MultiProvider( providers: [ ChangeNotifierProvider( - create: (_) => FirebaseNotifier()), + create: (_) => FirebaseNotifier(), + ), ChangeNotifierProvider(create: (_) => DashCounter()), ChangeNotifierProvider( - create: (context) => DashUpgrades( - context.read(), - context.read(), - ), + create: + (context) => DashUpgrades( + context.read(), + context.read(), + ), ), ChangeNotifierProvider( create: (context) => IAPRepo(context.read()), ), ChangeNotifierProvider( - create: (context) => DashPurchases( - context.read(), - context.read(), - ), + create: + (context) => DashPurchases( + context.read(), + context.read(), + ), lazy: false, ), ], child: Scaffold( - appBar: AppBar( - title: Text(widget.title), - ), + appBar: AppBar(title: Text(widget.title)), body: _widgetOptions[_selectedIndex], bottomNavigationBar: BottomNavigationBar( items: const [ - BottomNavigationBarItem( - icon: Icon(Icons.home), - label: 'Home', - ), - BottomNavigationBarItem( - icon: Icon(Icons.shop), - label: 'Purchase', - ), + BottomNavigationBarItem(icon: Icon(Icons.home), label: 'Home'), + BottomNavigationBarItem(icon: Icon(Icons.shop), label: 'Purchase'), ], currentIndex: _selectedIndex, selectedItemColor: Colors.amber[800], diff --git a/in_app_purchases/step_09/app/lib/model/firebase_state.dart b/in_app_purchases/step_09/app/lib/model/firebase_state.dart index 1a04db5438..9fc7102e99 100644 --- a/in_app_purchases/step_09/app/lib/model/firebase_state.dart +++ b/in_app_purchases/step_09/app/lib/model/firebase_state.dart @@ -1,5 +1 @@ -enum FirebaseState { - loading, - available, - notAvailable, -} +enum FirebaseState { loading, available, notAvailable } diff --git a/in_app_purchases/step_09/app/lib/model/past_purchase.dart b/in_app_purchases/step_09/app/lib/model/past_purchase.dart index 42f412481d..63142b1be7 100644 --- a/in_app_purchases/step_09/app/lib/model/past_purchase.dart +++ b/in_app_purchases/step_09/app/lib/model/past_purchase.dart @@ -2,22 +2,11 @@ import 'package:flutter/widgets.dart'; import '../constants.dart'; -enum PurchaseType { - subscriptionPurchase, - nonSubscriptionPurchase, -} +enum PurchaseType { subscriptionPurchase, nonSubscriptionPurchase } -enum Store { - googlePlay, - appStore, -} +enum Store { googlePlay, appStore } -enum Status { - pending, - completed, - active, - expired, -} +enum Status { pending, completed, active, expired } @immutable class PastPurchase { @@ -33,25 +22,25 @@ class PastPurchase { return switch (productId) { storeKeyConsumable => 'Consumable', storeKeySubscription => 'Subscription', - _ => productId + _ => productId, }; } PastPurchase.fromJson(Map json) - : type = _typeFromString(json['type'] as String), - store = _storeFromString(json['iapSource'] as String), - orderId = json['orderId'] as String, - productId = json['productId'] as String, - purchaseDate = DateTime.now(), - expiryDate = null, - status = _statusFromString(json['status'] as String); + : type = _typeFromString(json['type'] as String), + store = _storeFromString(json['iapSource'] as String), + orderId = json['orderId'] as String, + productId = json['productId'] as String, + purchaseDate = DateTime.now(), + expiryDate = null, + status = _statusFromString(json['status'] as String); } PurchaseType _typeFromString(String type) { return switch (type) { 'nonSubscription' => PurchaseType.subscriptionPurchase, 'subscription' => PurchaseType.nonSubscriptionPurchase, - _ => throw ArgumentError.value(type, '$type is not a supported type') + _ => throw ArgumentError.value(type, '$type is not a supported type'), }; } @@ -59,7 +48,7 @@ Store _storeFromString(String store) { return switch (store) { 'googleplay' => Store.googlePlay, 'appstore' => Store.appStore, - _ => throw ArgumentError.value(store, '$store is not a supported store') + _ => throw ArgumentError.value(store, '$store is not a supported store'), }; } @@ -69,6 +58,6 @@ Status _statusFromString(String status) { 'completed' => Status.completed, 'active' => Status.active, 'expired' => Status.expired, - _ => throw ArgumentError.value(status, '$status is not a supported status') + _ => throw ArgumentError.value(status, '$status is not a supported status'), }; } diff --git a/in_app_purchases/step_09/app/lib/model/purchasable_product.dart b/in_app_purchases/step_09/app/lib/model/purchasable_product.dart index 9abe078e52..e2b8b81970 100644 --- a/in_app_purchases/step_09/app/lib/model/purchasable_product.dart +++ b/in_app_purchases/step_09/app/lib/model/purchasable_product.dart @@ -1,10 +1,6 @@ import 'package:in_app_purchase/in_app_purchase.dart'; -enum ProductStatus { - purchasable, - purchased, - pending, -} +enum ProductStatus { purchasable, purchased, pending } class PurchasableProduct { String get id => productDetails.id; diff --git a/in_app_purchases/step_09/app/lib/model/store_state.dart b/in_app_purchases/step_09/app/lib/model/store_state.dart index a4f1490b60..a299611086 100644 --- a/in_app_purchases/step_09/app/lib/model/store_state.dart +++ b/in_app_purchases/step_09/app/lib/model/store_state.dart @@ -1,5 +1 @@ -enum StoreState { - loading, - available, - notAvailable, -} +enum StoreState { loading, available, notAvailable } diff --git a/in_app_purchases/step_09/app/lib/pages/home_page.dart b/in_app_purchases/step_09/app/lib/pages/home_page.dart index 57087c5f24..83d674703b 100644 --- a/in_app_purchases/step_09/app/lib/pages/home_page.dart +++ b/in_app_purchases/step_09/app/lib/pages/home_page.dart @@ -13,10 +13,7 @@ class HomePage extends StatelessWidget { Widget build(BuildContext context) { return const Column( children: [ - Expanded( - flex: 2, - child: DashClickerWidget(), - ), + Expanded(flex: 2, child: DashClickerWidget()), Expanded(child: UpgradeList()), ], ); @@ -36,10 +33,12 @@ class DashClickerWidget extends StatelessWidget { InkWell( // Don't listen as we don't need a rebuild when the count changes onTap: Provider.of(context, listen: false).increment, - child: Image.asset(context.read().beautifiedDash - ? 'assets/dash.png' - : 'assets/dash_old.png'), - ) + child: Image.asset( + context.read().beautifiedDash + ? 'assets/dash.png' + : 'assets/dash_old.png', + ), + ), ], ), ); @@ -60,8 +59,9 @@ class CounterStateWidget extends StatelessWidget { style: DefaultTextStyle.of(context).style, children: [ TextSpan( - text: counter.countString, - style: const TextStyle(fontWeight: FontWeight.bold)), + text: counter.countString, + style: const TextStyle(fontWeight: FontWeight.bold), + ), const TextSpan(text: ' times!'), ], ), @@ -75,13 +75,15 @@ class UpgradeList extends StatelessWidget { @override Widget build(BuildContext context) { var upgrades = context.watch(); - return ListView(children: [ - _UpgradeWidget( - upgrade: upgrades.tim, - title: 'Tim Sneath', - onPressed: upgrades.addTim, - ), - ]); + return ListView( + children: [ + _UpgradeWidget( + upgrade: upgrades.tim, + title: 'Tim Sneath', + onPressed: upgrades.addTim, + ), + ], + ); } } @@ -99,24 +101,19 @@ class _UpgradeWidget extends StatelessWidget { @override Widget build(BuildContext context) { return InkWell( - onTap: onPressed, - child: ListTile( - leading: Center( - widthFactor: 1, - child: Text( - upgrade.count.toString(), - ), - ), - title: Text( - title, - style: !upgrade.purchasable - ? const TextStyle(color: Colors.redAccent) - : null, - ), - subtitle: Text('Produces ${upgrade.work} dashes per second'), - trailing: Text( - '${NumberFormat.compact().format(upgrade.cost)} dashes', - ), - )); + onTap: onPressed, + child: ListTile( + leading: Center(widthFactor: 1, child: Text(upgrade.count.toString())), + title: Text( + title, + style: + !upgrade.purchasable + ? const TextStyle(color: Colors.redAccent) + : null, + ), + subtitle: Text('Produces ${upgrade.work} dashes per second'), + trailing: Text('${NumberFormat.compact().format(upgrade.cost)} dashes'), + ), + ); } } diff --git a/in_app_purchases/step_09/app/lib/pages/login_page.dart b/in_app_purchases/step_09/app/lib/pages/login_page.dart index f0bc7dbc45..655da8b403 100644 --- a/in_app_purchases/step_09/app/lib/pages/login_page.dart +++ b/in_app_purchases/step_09/app/lib/pages/login_page.dart @@ -11,16 +11,15 @@ class LoginPage extends StatelessWidget { var firebaseNotifier = context.watch(); if (firebaseNotifier.isLoggingIn) { - return const Center( - child: Text('Logging in...'), - ); + return const Center(child: Text('Logging in...')); } return Center( - child: FilledButton( - onPressed: () { - firebaseNotifier.login(); - }, - child: const Text('Login'), - )); + child: FilledButton( + onPressed: () { + firebaseNotifier.login(); + }, + child: const Text('Login'), + ), + ); } } diff --git a/in_app_purchases/step_09/app/lib/pages/purchase_page.dart b/in_app_purchases/step_09/app/lib/pages/purchase_page.dart index 85470b24fb..97eee25f38 100644 --- a/in_app_purchases/step_09/app/lib/pages/purchase_page.dart +++ b/in_app_purchases/step_09/app/lib/pages/purchase_page.dart @@ -36,17 +36,20 @@ class PurchasePage extends StatelessWidget { case StoreState.notAvailable: storeWidget = _PurchasesNotAvailable(); } - return Column(crossAxisAlignment: CrossAxisAlignment.start, children: [ - storeWidget, - const Padding( - padding: EdgeInsets.fromLTRB(32.0, 32.0, 32.0, 0.0), - child: Text( - 'Past purchases', - style: TextStyle(fontWeight: FontWeight.bold), + return Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + storeWidget, + const Padding( + padding: EdgeInsets.fromLTRB(32.0, 32.0, 32.0, 0.0), + child: Text( + 'Past purchases', + style: TextStyle(fontWeight: FontWeight.bold), + ), ), - ), - const PastPurchasesWidget(), - ]); + const PastPurchasesWidget(), + ], + ); } } @@ -70,13 +73,17 @@ class _PurchaseList extends StatelessWidget { var purchases = context.watch(); var products = purchases.products; return Column( - children: products - .map((product) => _PurchaseWidget( - product: product, - onPressed: () { - purchases.buy(product); - })) - .toList(), + children: + products + .map( + (product) => _PurchaseWidget( + product: product, + onPressed: () { + purchases.buy(product); + }, + ), + ) + .toList(), ); } } @@ -85,10 +92,7 @@ class _PurchaseWidget extends StatelessWidget { final PurchasableProduct product; final VoidCallback onPressed; - const _PurchaseWidget({ - required this.product, - required this.onPressed, - }); + const _PurchaseWidget({required this.product, required this.onPressed}); @override Widget build(BuildContext context) { @@ -97,21 +101,20 @@ class _PurchaseWidget extends StatelessWidget { title += ' (purchased)'; } return InkWell( - onTap: onPressed, - child: ListTile( - title: Text( - title, - ), - subtitle: Text(product.description), - trailing: Text(_trailing()), - )); + onTap: onPressed, + child: ListTile( + title: Text(title), + subtitle: Text(product.description), + trailing: Text(_trailing()), + ), + ); } String _trailing() { return switch (product.status) { ProductStatus.purchasable => product.price, ProductStatus.purchased => 'purchased', - ProductStatus.pending => 'buying...' + ProductStatus.pending => 'buying...', }; } } @@ -125,10 +128,11 @@ class PastPurchasesWidget extends StatelessWidget { return ListView.separated( shrinkWrap: true, itemCount: purchases.length, - itemBuilder: (context, index) => ListTile( - title: Text(purchases[index].title), - subtitle: Text(purchases[index].status.toString()), - ), + itemBuilder: + (context, index) => ListTile( + title: Text(purchases[index].title), + subtitle: Text(purchases[index].status.toString()), + ), separatorBuilder: (context, index) => const Divider(), ); } diff --git a/in_app_purchases/step_09/app/lib/repo/iap_repo.dart b/in_app_purchases/step_09/app/lib/repo/iap_repo.dart index f238a98c39..67e3f137ba 100644 --- a/in_app_purchases/step_09/app/lib/repo/iap_repo.dart +++ b/in_app_purchases/step_09/app/lib/repo/iap_repo.dart @@ -47,19 +47,23 @@ class IAPRepo extends ChangeNotifier { hasUpgrade = false; return; } - var purchaseStream = _firestore - .collection('purchases') - .where('userId', isEqualTo: user.uid) - .snapshots(); + var purchaseStream = + _firestore + .collection('purchases') + .where('userId', isEqualTo: user.uid) + .snapshots(); _purchaseSubscription = purchaseStream.listen((snapshot) { - purchases = snapshot.docs.map((document) { - var data = document.data(); - return PastPurchase.fromJson(data); - }).toList(); + purchases = + snapshot.docs.map((document) { + var data = document.data(); + return PastPurchase.fromJson(data); + }).toList(); - hasActiveSubscription = purchases.any((element) => - element.productId == storeKeySubscription && - element.status != Status.expired); + hasActiveSubscription = purchases.any( + (element) => + element.productId == storeKeySubscription && + element.status != Status.expired, + ); hasUpgrade = purchases.any( (element) => element.productId == storeKeyUpgrade, diff --git a/in_app_purchases/step_09/app/pubspec.yaml b/in_app_purchases/step_09/app/pubspec.yaml index 2a4f7f1c05..f04f77ad6f 100644 --- a/in_app_purchases/step_09/app/pubspec.yaml +++ b/in_app_purchases/step_09/app/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: "none" version: 1.0.0+1 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 dependencies: cloud_firestore: ^4.0.3 diff --git a/in_app_purchases/step_09/app/test/widget_test.dart b/in_app_purchases/step_09/app/test/widget_test.dart index cd48c00478..ce165ef6de 100644 --- a/in_app_purchases/step_09/app/test/widget_test.dart +++ b/in_app_purchases/step_09/app/test/widget_test.dart @@ -13,8 +13,10 @@ void main() { class TestIAPConnection implements InAppPurchase { @override - Future buyConsumable( - {required PurchaseParam purchaseParam, bool autoConsume = true}) { + Future buyConsumable({ + required PurchaseParam purchaseParam, + bool autoConsume = true, + }) { return Future.value(false); } @@ -35,10 +37,9 @@ class TestIAPConnection implements InAppPurchase { @override Future queryProductDetails(Set identifiers) { - return Future.value(ProductDetailsResponse( - productDetails: [], - notFoundIDs: [], - )); + return Future.value( + ProductDetailsResponse(productDetails: [], notFoundIDs: []), + ); } @override diff --git a/in_app_purchases/step_09/dart-backend/bin/server.dart b/in_app_purchases/step_09/dart-backend/bin/server.dart index 520e6f8ac5..69736a1abd 100644 --- a/in_app_purchases/step_09/dart-backend/bin/server.dart +++ b/in_app_purchases/step_09/dart-backend/bin/server.dart @@ -23,36 +23,33 @@ Future> _createPurchaseHandlers() async { // Configure Android Publisher API access final serviceAccountGooglePlay = File('assets/service-account-google-play.json').readAsStringSync(); - final clientCredentialsGooglePlay = - auth.ServiceAccountCredentials.fromJson(serviceAccountGooglePlay); - final clientGooglePlay = - await auth.clientViaServiceAccount(clientCredentialsGooglePlay, [ - ap.AndroidPublisherApi.androidpublisherScope, - ]); + final clientCredentialsGooglePlay = auth.ServiceAccountCredentials.fromJson( + serviceAccountGooglePlay, + ); + final clientGooglePlay = await auth.clientViaServiceAccount( + clientCredentialsGooglePlay, + [ap.AndroidPublisherApi.androidpublisherScope], + ); final androidPublisher = ap.AndroidPublisherApi(clientGooglePlay); // Configure Firestore API access final serviceAccountFirebase = File('assets/service-account-firebase.json').readAsStringSync(); - final clientCredentialsFirebase = - auth.ServiceAccountCredentials.fromJson(serviceAccountFirebase); - final clientFirebase = - await auth.clientViaServiceAccount(clientCredentialsFirebase, [ - fs.FirestoreApi.cloudPlatformScope, - ]); + final clientCredentialsFirebase = auth.ServiceAccountCredentials.fromJson( + serviceAccountFirebase, + ); + final clientFirebase = await auth.clientViaServiceAccount( + clientCredentialsFirebase, + [fs.FirestoreApi.cloudPlatformScope], + ); final firestoreApi = fs.FirestoreApi(clientFirebase); final dynamic json = jsonDecode(serviceAccountFirebase); final projectId = json['project_id'] as String; final iapRepository = IapRepository(firestoreApi, projectId); return { - 'google_play': GooglePlayPurchaseHandler( - androidPublisher, - iapRepository, - ), - 'app_store': AppStorePurchaseHandler( - iapRepository, - ), + 'google_play': GooglePlayPurchaseHandler(androidPublisher, iapRepository), + 'app_store': AppStorePurchaseHandler(iapRepository), }; } @@ -95,19 +92,14 @@ Future main() async { await serveHandler(router.call); } -({ - String userId, - String source, - ProductData productData, - String token, -}) getPurchaseData(dynamic payload) { - if (payload - case { - 'userId': String userId, - 'source': String source, - 'productId': String productId, - 'verificationData': String token, - }) { +({String userId, String source, ProductData productData, String token}) +getPurchaseData(dynamic payload) { + if (payload case { + 'userId': String userId, + 'source': String source, + 'productId': String productId, + 'verificationData': String token, + }) { return ( userId: userId, source: source, diff --git a/in_app_purchases/step_09/dart-backend/lib/app_store_purchase_handler.dart b/in_app_purchases/step_09/dart-backend/lib/app_store_purchase_handler.dart index 6b06decbb3..b69abc17c2 100644 --- a/in_app_purchases/step_09/dart-backend/lib/app_store_purchase_handler.dart +++ b/in_app_purchases/step_09/dart-backend/lib/app_store_purchase_handler.dart @@ -10,15 +10,10 @@ import 'purchase_handler.dart'; class AppStorePurchaseHandler extends PurchaseHandler { final IapRepository iapRepository; - AppStorePurchaseHandler( - this.iapRepository, - ); + AppStorePurchaseHandler(this.iapRepository); final _iTunesAPI = ITunesApi( - ITunesHttpClient( - ITunesEnvironment.sandbox(), - loggingEnabled: true, - ), + ITunesHttpClient(ITunesEnvironment.sandbox(), loggingEnabled: true), ); @override @@ -61,30 +56,37 @@ class AppStorePurchaseHandler extends PurchaseHandler { } switch (product.type) { case ProductType.nonSubscription: - await iapRepository.createOrUpdatePurchase(NonSubscriptionPurchase( - userId: userId, - productId: receipt.productId ?? '', - iapSource: IAPSource.appstore, - orderId: receipt.originalTransactionId ?? '', - purchaseDate: DateTime.fromMillisecondsSinceEpoch( - int.parse(receipt.originalPurchaseDateMs ?? '0')), - type: product.type, - status: NonSubscriptionStatus.completed, - )); + await iapRepository.createOrUpdatePurchase( + NonSubscriptionPurchase( + userId: userId, + productId: receipt.productId ?? '', + iapSource: IAPSource.appstore, + orderId: receipt.originalTransactionId ?? '', + purchaseDate: DateTime.fromMillisecondsSinceEpoch( + int.parse(receipt.originalPurchaseDateMs ?? '0'), + ), + type: product.type, + status: NonSubscriptionStatus.completed, + ), + ); break; case ProductType.subscription: - await iapRepository.createOrUpdatePurchase(SubscriptionPurchase( - userId: userId, - productId: receipt.productId ?? '', - iapSource: IAPSource.appstore, - orderId: receipt.originalTransactionId ?? '', - purchaseDate: DateTime.fromMillisecondsSinceEpoch( - int.parse(receipt.originalPurchaseDateMs ?? '0')), - type: product.type, - expiryDate: DateTime.fromMillisecondsSinceEpoch( - int.parse(receipt.expiresDateMs ?? '0')), - status: SubscriptionStatus.active, - )); + await iapRepository.createOrUpdatePurchase( + SubscriptionPurchase( + userId: userId, + productId: receipt.productId ?? '', + iapSource: IAPSource.appstore, + orderId: receipt.originalTransactionId ?? '', + purchaseDate: DateTime.fromMillisecondsSinceEpoch( + int.parse(receipt.originalPurchaseDateMs ?? '0'), + ), + type: product.type, + expiryDate: DateTime.fromMillisecondsSinceEpoch( + int.parse(receipt.expiresDateMs ?? '0'), + ), + status: SubscriptionStatus.active, + ), + ); break; } } diff --git a/in_app_purchases/step_09/dart-backend/lib/google_play_purchase_handler.dart b/in_app_purchases/step_09/dart-backend/lib/google_play_purchase_handler.dart index ea2aaa7045..ffb57823cd 100644 --- a/in_app_purchases/step_09/dart-backend/lib/google_play_purchase_handler.dart +++ b/in_app_purchases/step_09/dart-backend/lib/google_play_purchase_handler.dart @@ -11,10 +11,7 @@ class GooglePlayPurchaseHandler extends PurchaseHandler { final ap.AndroidPublisherApi androidPublisher; final IapRepository iapRepository; - GooglePlayPurchaseHandler( - this.androidPublisher, - this.iapRepository, - ); + GooglePlayPurchaseHandler(this.androidPublisher, this.iapRepository); /// Handle non-subscription purchases (one time purchases). /// diff --git a/in_app_purchases/step_09/dart-backend/lib/iap_repository.dart b/in_app_purchases/step_09/dart-backend/lib/iap_repository.dart index 1856f31c95..98a0d6ace6 100644 --- a/in_app_purchases/step_09/dart-backend/lib/iap_repository.dart +++ b/in_app_purchases/step_09/dart-backend/lib/iap_repository.dart @@ -2,10 +2,7 @@ import 'package:googleapis/firestore/v1.dart'; import 'products.dart'; -enum IAPSource { - googleplay, - appstore, -} +enum IAPSource { googleplay, appstore } abstract class Purchase { final IAPSource iapSource; @@ -30,8 +27,9 @@ abstract class Purchase { 'orderId': Value(stringValue: orderId), 'productId': Value(stringValue: productId), 'userId': Value(stringValue: userId), - 'purchaseDate': - Value(timestampValue: purchaseDate.toUtc().toIso8601String()), + 'purchaseDate': Value( + timestampValue: purchaseDate.toUtc().toIso8601String(), + ), 'type': Value(stringValue: type.name), }; } @@ -40,46 +38,51 @@ abstract class Purchase { static Purchase fromDocument(Document e) { final type = ProductType.values.firstWhere( - (element) => element.name == e.fields!['type']!.stringValue); + (element) => element.name == e.fields!['type']!.stringValue, + ); switch (type) { case ProductType.subscription: return SubscriptionPurchase( - iapSource: e.fields!['iapSource']!.stringValue == 'googleplay' - ? IAPSource.googleplay - : IAPSource.appstore, + iapSource: + e.fields!['iapSource']!.stringValue == 'googleplay' + ? IAPSource.googleplay + : IAPSource.appstore, orderId: e.fields!['orderId']!.stringValue!, productId: e.fields!['productId']!.stringValue!, userId: e.fields!['userId']!.stringValue, - purchaseDate: - DateTime.parse(e.fields!['purchaseDate']!.timestampValue!), + purchaseDate: DateTime.parse( + e.fields!['purchaseDate']!.timestampValue!, + ), status: SubscriptionStatus.values.firstWhere( - (element) => element.name == e.fields!['status']!.stringValue), - expiryDate: DateTime.tryParse( - e.fields!['expiryDate']?.timestampValue ?? '') ?? + (element) => element.name == e.fields!['status']!.stringValue, + ), + expiryDate: + DateTime.tryParse( + e.fields!['expiryDate']?.timestampValue ?? '', + ) ?? DateTime.now(), ); case ProductType.nonSubscription: return NonSubscriptionPurchase( - iapSource: e.fields!['iapSource']!.stringValue == 'googleplay' - ? IAPSource.googleplay - : IAPSource.appstore, + iapSource: + e.fields!['iapSource']!.stringValue == 'googleplay' + ? IAPSource.googleplay + : IAPSource.appstore, orderId: e.fields!['orderId']!.stringValue!, productId: e.fields!['productId']!.stringValue!, userId: e.fields!['userId']!.stringValue, - purchaseDate: - DateTime.parse(e.fields!['purchaseDate']!.timestampValue!), + purchaseDate: DateTime.parse( + e.fields!['purchaseDate']!.timestampValue!, + ), status: NonSubscriptionStatus.values.firstWhere( - (element) => element.name == e.fields!['status']!.stringValue), + (element) => element.name == e.fields!['status']!.stringValue, + ), ); } } } -enum NonSubscriptionStatus { - pending, - completed, - cancelled, -} +enum NonSubscriptionStatus { pending, completed, cancelled } enum SubscriptionStatus { pending, active, expired } @@ -99,17 +102,13 @@ class NonSubscriptionPurchase extends Purchase { @override Map toDocument() { final doc = super.toDocument(); - doc.addAll({ - 'status': Value(stringValue: status.name), - }); + doc.addAll({'status': Value(stringValue: status.name)}); return doc; } @override Map updateDocument() { - return { - 'status': Value(stringValue: status.name), - }; + return {'status': Value(stringValue: status.name)}; } @override @@ -153,9 +152,7 @@ class SubscriptionPurchase extends Purchase { @override Map updateDocument() { - return { - 'status': Value(stringValue: status.name), - }; + return {'status': Value(stringValue: status.name)}; } @override @@ -187,9 +184,10 @@ class IapRepository { writes: [ Write( update: Document( - fields: purchaseData.toDocument(), - name: - 'projects/$projectId/databases/(default)/documents/purchases/$purchaseId'), + fields: purchaseData.toDocument(), + name: + 'projects/$projectId/databases/(default)/documents/purchases/$purchaseId', + ), ), ], ), @@ -205,9 +203,10 @@ class IapRepository { writes: [ Write( update: Document( - fields: purchaseData.updateDocument(), - name: - 'projects/$projectId/databases/(default)/documents/purchases/$purchaseId'), + fields: purchaseData.updateDocument(), + name: + 'projects/$projectId/databases/(default)/documents/purchases/$purchaseId', + ), updateMask: DocumentMask(fieldPaths: ['status']), ), ], diff --git a/in_app_purchases/step_09/dart-backend/lib/products.dart b/in_app_purchases/step_09/dart-backend/lib/products.dart index d6baaeb9ca..921ffd8da9 100644 --- a/in_app_purchases/step_09/dart-backend/lib/products.dart +++ b/in_app_purchases/step_09/dart-backend/lib/products.dart @@ -5,10 +5,7 @@ class ProductData { const ProductData(this.productId, this.type); } -enum ProductType { - subscription, - nonSubscription, -} +enum ProductType { subscription, nonSubscription } const productDataMap = { 'dash_consumable_2k': ProductData( diff --git a/in_app_purchases/step_09/dart-backend/pubspec.yaml b/in_app_purchases/step_09/dart-backend/pubspec.yaml index 1cb7d17c93..eeb6ec5f39 100644 --- a/in_app_purchases/step_09/dart-backend/pubspec.yaml +++ b/in_app_purchases/step_09/dart-backend/pubspec.yaml @@ -4,7 +4,7 @@ version: 1.0.0 # homepage: https://www.example.com environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 dependencies: googleapis: ^11.0.0 diff --git a/in_app_purchases/step_10/app/lib/logic/dash_purchases.dart b/in_app_purchases/step_10/app/lib/logic/dash_purchases.dart index b19b0b212f..513ffbfaa0 100644 --- a/in_app_purchases/step_10/app/lib/logic/dash_purchases.dart +++ b/in_app_purchases/step_10/app/lib/logic/dash_purchases.dart @@ -74,12 +74,15 @@ class DashPurchases extends ChangeNotifier { await iapConnection.buyNonConsumable(purchaseParam: purchaseParam); default: throw ArgumentError.value( - product.productDetails, '${product.id} is not a known product'); + product.productDetails, + '${product.id} is not a known product', + ); } } Future _onPurchaseUpdate( - List purchaseDetailsList) async { + List purchaseDetailsList, + ) async { for (var purchaseDetails in purchaseDetailsList) { await _handlePurchase(purchaseDetails); } @@ -147,12 +150,16 @@ class DashPurchases extends ChangeNotifier { // Get a list of purchasable products for the subscription and upgrade. // This should be 1 per type. if (products.isNotEmpty) { - subscriptions = products - .where((element) => element.productDetails.id == storeKeySubscription) - .toList(); - upgrades = products - .where((element) => element.productDetails.id == storeKeyUpgrade) - .toList(); + subscriptions = + products + .where( + (element) => element.productDetails.id == storeKeySubscription, + ) + .toList(); + upgrades = + products + .where((element) => element.productDetails.id == storeKeyUpgrade) + .toList(); } // Set the subscription in the counter logic and show/hide purchased on the @@ -175,10 +182,11 @@ class DashPurchases extends ChangeNotifier { _beautifiedDashUpgrade = iapRepo.hasUpgrade; for (var element in upgrades) { _updateStatus( - element, - _beautifiedDashUpgrade - ? ProductStatus.purchased - : ProductStatus.purchasable); + element, + _beautifiedDashUpgrade + ? ProductStatus.purchased + : ProductStatus.purchasable, + ); } notifyListeners(); } diff --git a/in_app_purchases/step_10/app/lib/logic/dash_upgrades.dart b/in_app_purchases/step_10/app/lib/logic/dash_upgrades.dart index 826aec517a..f6201177f5 100644 --- a/in_app_purchases/step_10/app/lib/logic/dash_upgrades.dart +++ b/in_app_purchases/step_10/app/lib/logic/dash_upgrades.dart @@ -37,9 +37,7 @@ class DashUpgrades extends ChangeNotifier { _buy(tim); } - void _buy( - Upgrade upgrade, - ) { + void _buy(Upgrade upgrade) { if (counter.count < upgrade.cost) return; counter.addAutoIncrement( diff --git a/in_app_purchases/step_10/app/lib/main.dart b/in_app_purchases/step_10/app/lib/main.dart index 541c9e42d3..7c13c8b9b1 100644 --- a/in_app_purchases/step_10/app/lib/main.dart +++ b/in_app_purchases/step_10/app/lib/main.dart @@ -66,41 +66,36 @@ class _MyHomePageState extends State { return MultiProvider( providers: [ ChangeNotifierProvider( - create: (_) => FirebaseNotifier()), + create: (_) => FirebaseNotifier(), + ), ChangeNotifierProvider(create: (_) => DashCounter()), ChangeNotifierProvider( - create: (context) => DashUpgrades( - context.read(), - context.read(), - ), + create: + (context) => DashUpgrades( + context.read(), + context.read(), + ), ), ChangeNotifierProvider( create: (context) => IAPRepo(context.read()), ), ChangeNotifierProvider( - create: (context) => DashPurchases( - context.read(), - context.read(), - context.read(), - ), + create: + (context) => DashPurchases( + context.read(), + context.read(), + context.read(), + ), lazy: false, ), ], child: Scaffold( - appBar: AppBar( - title: Text(widget.title), - ), + appBar: AppBar(title: Text(widget.title)), body: _widgetOptions[_selectedIndex], bottomNavigationBar: BottomNavigationBar( items: const [ - BottomNavigationBarItem( - icon: Icon(Icons.home), - label: 'Home', - ), - BottomNavigationBarItem( - icon: Icon(Icons.shop), - label: 'Purchase', - ), + BottomNavigationBarItem(icon: Icon(Icons.home), label: 'Home'), + BottomNavigationBarItem(icon: Icon(Icons.shop), label: 'Purchase'), ], currentIndex: _selectedIndex, selectedItemColor: Colors.amber[800], diff --git a/in_app_purchases/step_10/app/lib/model/firebase_state.dart b/in_app_purchases/step_10/app/lib/model/firebase_state.dart index 1a04db5438..9fc7102e99 100644 --- a/in_app_purchases/step_10/app/lib/model/firebase_state.dart +++ b/in_app_purchases/step_10/app/lib/model/firebase_state.dart @@ -1,5 +1 @@ -enum FirebaseState { - loading, - available, - notAvailable, -} +enum FirebaseState { loading, available, notAvailable } diff --git a/in_app_purchases/step_10/app/lib/model/past_purchase.dart b/in_app_purchases/step_10/app/lib/model/past_purchase.dart index 42f412481d..63142b1be7 100644 --- a/in_app_purchases/step_10/app/lib/model/past_purchase.dart +++ b/in_app_purchases/step_10/app/lib/model/past_purchase.dart @@ -2,22 +2,11 @@ import 'package:flutter/widgets.dart'; import '../constants.dart'; -enum PurchaseType { - subscriptionPurchase, - nonSubscriptionPurchase, -} +enum PurchaseType { subscriptionPurchase, nonSubscriptionPurchase } -enum Store { - googlePlay, - appStore, -} +enum Store { googlePlay, appStore } -enum Status { - pending, - completed, - active, - expired, -} +enum Status { pending, completed, active, expired } @immutable class PastPurchase { @@ -33,25 +22,25 @@ class PastPurchase { return switch (productId) { storeKeyConsumable => 'Consumable', storeKeySubscription => 'Subscription', - _ => productId + _ => productId, }; } PastPurchase.fromJson(Map json) - : type = _typeFromString(json['type'] as String), - store = _storeFromString(json['iapSource'] as String), - orderId = json['orderId'] as String, - productId = json['productId'] as String, - purchaseDate = DateTime.now(), - expiryDate = null, - status = _statusFromString(json['status'] as String); + : type = _typeFromString(json['type'] as String), + store = _storeFromString(json['iapSource'] as String), + orderId = json['orderId'] as String, + productId = json['productId'] as String, + purchaseDate = DateTime.now(), + expiryDate = null, + status = _statusFromString(json['status'] as String); } PurchaseType _typeFromString(String type) { return switch (type) { 'nonSubscription' => PurchaseType.subscriptionPurchase, 'subscription' => PurchaseType.nonSubscriptionPurchase, - _ => throw ArgumentError.value(type, '$type is not a supported type') + _ => throw ArgumentError.value(type, '$type is not a supported type'), }; } @@ -59,7 +48,7 @@ Store _storeFromString(String store) { return switch (store) { 'googleplay' => Store.googlePlay, 'appstore' => Store.appStore, - _ => throw ArgumentError.value(store, '$store is not a supported store') + _ => throw ArgumentError.value(store, '$store is not a supported store'), }; } @@ -69,6 +58,6 @@ Status _statusFromString(String status) { 'completed' => Status.completed, 'active' => Status.active, 'expired' => Status.expired, - _ => throw ArgumentError.value(status, '$status is not a supported status') + _ => throw ArgumentError.value(status, '$status is not a supported status'), }; } diff --git a/in_app_purchases/step_10/app/lib/model/purchasable_product.dart b/in_app_purchases/step_10/app/lib/model/purchasable_product.dart index 9abe078e52..e2b8b81970 100644 --- a/in_app_purchases/step_10/app/lib/model/purchasable_product.dart +++ b/in_app_purchases/step_10/app/lib/model/purchasable_product.dart @@ -1,10 +1,6 @@ import 'package:in_app_purchase/in_app_purchase.dart'; -enum ProductStatus { - purchasable, - purchased, - pending, -} +enum ProductStatus { purchasable, purchased, pending } class PurchasableProduct { String get id => productDetails.id; diff --git a/in_app_purchases/step_10/app/lib/model/store_state.dart b/in_app_purchases/step_10/app/lib/model/store_state.dart index a4f1490b60..a299611086 100644 --- a/in_app_purchases/step_10/app/lib/model/store_state.dart +++ b/in_app_purchases/step_10/app/lib/model/store_state.dart @@ -1,5 +1 @@ -enum StoreState { - loading, - available, - notAvailable, -} +enum StoreState { loading, available, notAvailable } diff --git a/in_app_purchases/step_10/app/lib/pages/home_page.dart b/in_app_purchases/step_10/app/lib/pages/home_page.dart index 57087c5f24..83d674703b 100644 --- a/in_app_purchases/step_10/app/lib/pages/home_page.dart +++ b/in_app_purchases/step_10/app/lib/pages/home_page.dart @@ -13,10 +13,7 @@ class HomePage extends StatelessWidget { Widget build(BuildContext context) { return const Column( children: [ - Expanded( - flex: 2, - child: DashClickerWidget(), - ), + Expanded(flex: 2, child: DashClickerWidget()), Expanded(child: UpgradeList()), ], ); @@ -36,10 +33,12 @@ class DashClickerWidget extends StatelessWidget { InkWell( // Don't listen as we don't need a rebuild when the count changes onTap: Provider.of(context, listen: false).increment, - child: Image.asset(context.read().beautifiedDash - ? 'assets/dash.png' - : 'assets/dash_old.png'), - ) + child: Image.asset( + context.read().beautifiedDash + ? 'assets/dash.png' + : 'assets/dash_old.png', + ), + ), ], ), ); @@ -60,8 +59,9 @@ class CounterStateWidget extends StatelessWidget { style: DefaultTextStyle.of(context).style, children: [ TextSpan( - text: counter.countString, - style: const TextStyle(fontWeight: FontWeight.bold)), + text: counter.countString, + style: const TextStyle(fontWeight: FontWeight.bold), + ), const TextSpan(text: ' times!'), ], ), @@ -75,13 +75,15 @@ class UpgradeList extends StatelessWidget { @override Widget build(BuildContext context) { var upgrades = context.watch(); - return ListView(children: [ - _UpgradeWidget( - upgrade: upgrades.tim, - title: 'Tim Sneath', - onPressed: upgrades.addTim, - ), - ]); + return ListView( + children: [ + _UpgradeWidget( + upgrade: upgrades.tim, + title: 'Tim Sneath', + onPressed: upgrades.addTim, + ), + ], + ); } } @@ -99,24 +101,19 @@ class _UpgradeWidget extends StatelessWidget { @override Widget build(BuildContext context) { return InkWell( - onTap: onPressed, - child: ListTile( - leading: Center( - widthFactor: 1, - child: Text( - upgrade.count.toString(), - ), - ), - title: Text( - title, - style: !upgrade.purchasable - ? const TextStyle(color: Colors.redAccent) - : null, - ), - subtitle: Text('Produces ${upgrade.work} dashes per second'), - trailing: Text( - '${NumberFormat.compact().format(upgrade.cost)} dashes', - ), - )); + onTap: onPressed, + child: ListTile( + leading: Center(widthFactor: 1, child: Text(upgrade.count.toString())), + title: Text( + title, + style: + !upgrade.purchasable + ? const TextStyle(color: Colors.redAccent) + : null, + ), + subtitle: Text('Produces ${upgrade.work} dashes per second'), + trailing: Text('${NumberFormat.compact().format(upgrade.cost)} dashes'), + ), + ); } } diff --git a/in_app_purchases/step_10/app/lib/pages/login_page.dart b/in_app_purchases/step_10/app/lib/pages/login_page.dart index f0bc7dbc45..655da8b403 100644 --- a/in_app_purchases/step_10/app/lib/pages/login_page.dart +++ b/in_app_purchases/step_10/app/lib/pages/login_page.dart @@ -11,16 +11,15 @@ class LoginPage extends StatelessWidget { var firebaseNotifier = context.watch(); if (firebaseNotifier.isLoggingIn) { - return const Center( - child: Text('Logging in...'), - ); + return const Center(child: Text('Logging in...')); } return Center( - child: FilledButton( - onPressed: () { - firebaseNotifier.login(); - }, - child: const Text('Login'), - )); + child: FilledButton( + onPressed: () { + firebaseNotifier.login(); + }, + child: const Text('Login'), + ), + ); } } diff --git a/in_app_purchases/step_10/app/lib/pages/purchase_page.dart b/in_app_purchases/step_10/app/lib/pages/purchase_page.dart index 85470b24fb..97eee25f38 100644 --- a/in_app_purchases/step_10/app/lib/pages/purchase_page.dart +++ b/in_app_purchases/step_10/app/lib/pages/purchase_page.dart @@ -36,17 +36,20 @@ class PurchasePage extends StatelessWidget { case StoreState.notAvailable: storeWidget = _PurchasesNotAvailable(); } - return Column(crossAxisAlignment: CrossAxisAlignment.start, children: [ - storeWidget, - const Padding( - padding: EdgeInsets.fromLTRB(32.0, 32.0, 32.0, 0.0), - child: Text( - 'Past purchases', - style: TextStyle(fontWeight: FontWeight.bold), + return Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + storeWidget, + const Padding( + padding: EdgeInsets.fromLTRB(32.0, 32.0, 32.0, 0.0), + child: Text( + 'Past purchases', + style: TextStyle(fontWeight: FontWeight.bold), + ), ), - ), - const PastPurchasesWidget(), - ]); + const PastPurchasesWidget(), + ], + ); } } @@ -70,13 +73,17 @@ class _PurchaseList extends StatelessWidget { var purchases = context.watch(); var products = purchases.products; return Column( - children: products - .map((product) => _PurchaseWidget( - product: product, - onPressed: () { - purchases.buy(product); - })) - .toList(), + children: + products + .map( + (product) => _PurchaseWidget( + product: product, + onPressed: () { + purchases.buy(product); + }, + ), + ) + .toList(), ); } } @@ -85,10 +92,7 @@ class _PurchaseWidget extends StatelessWidget { final PurchasableProduct product; final VoidCallback onPressed; - const _PurchaseWidget({ - required this.product, - required this.onPressed, - }); + const _PurchaseWidget({required this.product, required this.onPressed}); @override Widget build(BuildContext context) { @@ -97,21 +101,20 @@ class _PurchaseWidget extends StatelessWidget { title += ' (purchased)'; } return InkWell( - onTap: onPressed, - child: ListTile( - title: Text( - title, - ), - subtitle: Text(product.description), - trailing: Text(_trailing()), - )); + onTap: onPressed, + child: ListTile( + title: Text(title), + subtitle: Text(product.description), + trailing: Text(_trailing()), + ), + ); } String _trailing() { return switch (product.status) { ProductStatus.purchasable => product.price, ProductStatus.purchased => 'purchased', - ProductStatus.pending => 'buying...' + ProductStatus.pending => 'buying...', }; } } @@ -125,10 +128,11 @@ class PastPurchasesWidget extends StatelessWidget { return ListView.separated( shrinkWrap: true, itemCount: purchases.length, - itemBuilder: (context, index) => ListTile( - title: Text(purchases[index].title), - subtitle: Text(purchases[index].status.toString()), - ), + itemBuilder: + (context, index) => ListTile( + title: Text(purchases[index].title), + subtitle: Text(purchases[index].status.toString()), + ), separatorBuilder: (context, index) => const Divider(), ); } diff --git a/in_app_purchases/step_10/app/lib/repo/iap_repo.dart b/in_app_purchases/step_10/app/lib/repo/iap_repo.dart index f238a98c39..67e3f137ba 100644 --- a/in_app_purchases/step_10/app/lib/repo/iap_repo.dart +++ b/in_app_purchases/step_10/app/lib/repo/iap_repo.dart @@ -47,19 +47,23 @@ class IAPRepo extends ChangeNotifier { hasUpgrade = false; return; } - var purchaseStream = _firestore - .collection('purchases') - .where('userId', isEqualTo: user.uid) - .snapshots(); + var purchaseStream = + _firestore + .collection('purchases') + .where('userId', isEqualTo: user.uid) + .snapshots(); _purchaseSubscription = purchaseStream.listen((snapshot) { - purchases = snapshot.docs.map((document) { - var data = document.data(); - return PastPurchase.fromJson(data); - }).toList(); + purchases = + snapshot.docs.map((document) { + var data = document.data(); + return PastPurchase.fromJson(data); + }).toList(); - hasActiveSubscription = purchases.any((element) => - element.productId == storeKeySubscription && - element.status != Status.expired); + hasActiveSubscription = purchases.any( + (element) => + element.productId == storeKeySubscription && + element.status != Status.expired, + ); hasUpgrade = purchases.any( (element) => element.productId == storeKeyUpgrade, diff --git a/in_app_purchases/step_10/app/pubspec.yaml b/in_app_purchases/step_10/app/pubspec.yaml index 2a4f7f1c05..f04f77ad6f 100644 --- a/in_app_purchases/step_10/app/pubspec.yaml +++ b/in_app_purchases/step_10/app/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: "none" version: 1.0.0+1 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 dependencies: cloud_firestore: ^4.0.3 diff --git a/in_app_purchases/step_10/app/test/widget_test.dart b/in_app_purchases/step_10/app/test/widget_test.dart index cd48c00478..ce165ef6de 100644 --- a/in_app_purchases/step_10/app/test/widget_test.dart +++ b/in_app_purchases/step_10/app/test/widget_test.dart @@ -13,8 +13,10 @@ void main() { class TestIAPConnection implements InAppPurchase { @override - Future buyConsumable( - {required PurchaseParam purchaseParam, bool autoConsume = true}) { + Future buyConsumable({ + required PurchaseParam purchaseParam, + bool autoConsume = true, + }) { return Future.value(false); } @@ -35,10 +37,9 @@ class TestIAPConnection implements InAppPurchase { @override Future queryProductDetails(Set identifiers) { - return Future.value(ProductDetailsResponse( - productDetails: [], - notFoundIDs: [], - )); + return Future.value( + ProductDetailsResponse(productDetails: [], notFoundIDs: []), + ); } @override diff --git a/in_app_purchases/step_10/dart-backend/bin/server.dart b/in_app_purchases/step_10/dart-backend/bin/server.dart index 8eb019f5f9..0007cf9ad2 100644 --- a/in_app_purchases/step_10/dart-backend/bin/server.dart +++ b/in_app_purchases/step_10/dart-backend/bin/server.dart @@ -26,13 +26,14 @@ Future> _createPurchaseHandlers() async { // Configure Android Publisher API access final serviceAccountGooglePlay = File('assets/service-account-google-play.json').readAsStringSync(); - final clientCredentialsGooglePlay = - auth.ServiceAccountCredentials.fromJson(serviceAccountGooglePlay); - final clientGooglePlay = - await auth.clientViaServiceAccount(clientCredentialsGooglePlay, [ - ap.AndroidPublisherApi.androidpublisherScope, - pubsub.PubsubApi.cloudPlatformScope, - ]); + final clientCredentialsGooglePlay = auth.ServiceAccountCredentials.fromJson( + serviceAccountGooglePlay, + ); + final clientGooglePlay = await auth + .clientViaServiceAccount(clientCredentialsGooglePlay, [ + ap.AndroidPublisherApi.androidpublisherScope, + pubsub.PubsubApi.cloudPlatformScope, + ]); final androidPublisher = ap.AndroidPublisherApi(clientGooglePlay); // Pub/Sub API to receive on purchase events from Google Play @@ -41,12 +42,13 @@ Future> _createPurchaseHandlers() async { // Configure Firestore API access final serviceAccountFirebase = File('assets/service-account-firebase.json').readAsStringSync(); - final clientCredentialsFirebase = - auth.ServiceAccountCredentials.fromJson(serviceAccountFirebase); - final clientFirebase = - await auth.clientViaServiceAccount(clientCredentialsFirebase, [ - fs.FirestoreApi.cloudPlatformScope, - ]); + final clientCredentialsFirebase = auth.ServiceAccountCredentials.fromJson( + serviceAccountFirebase, + ); + final clientFirebase = await auth.clientViaServiceAccount( + clientCredentialsFirebase, + [fs.FirestoreApi.cloudPlatformScope], + ); final firestoreApi = fs.FirestoreApi(clientFirebase); final dynamic json = jsonDecode(serviceAccountFirebase); final projectId = json['project_id'] as String; @@ -86,10 +88,7 @@ Future> _createPurchaseHandlers() async { iapRepository, pubsubApi, ), - 'app_store': AppStorePurchaseHandler( - iapRepository, - appStoreServerAPI, - ), + 'app_store': AppStorePurchaseHandler(iapRepository, appStoreServerAPI), }; } @@ -132,19 +131,14 @@ Future main() async { await serveHandler(router.call); } -({ - String userId, - String source, - ProductData productData, - String token, -}) getPurchaseData(dynamic payload) { - if (payload - case { - 'userId': String userId, - 'source': String source, - 'productId': String productId, - 'verificationData': String token, - }) { +({String userId, String source, ProductData productData, String token}) +getPurchaseData(dynamic payload) { + if (payload case { + 'userId': String userId, + 'source': String source, + 'productId': String productId, + 'verificationData': String token, + }) { return ( userId: userId, source: source, diff --git a/in_app_purchases/step_10/dart-backend/lib/app_store_purchase_handler.dart b/in_app_purchases/step_10/dart-backend/lib/app_store_purchase_handler.dart index 440bbb10ec..b4789d3462 100644 --- a/in_app_purchases/step_10/dart-backend/lib/app_store_purchase_handler.dart +++ b/in_app_purchases/step_10/dart-backend/lib/app_store_purchase_handler.dart @@ -14,10 +14,7 @@ class AppStorePurchaseHandler extends PurchaseHandler { final IapRepository iapRepository; final AppStoreServerAPI appStoreServerAPI; - AppStorePurchaseHandler( - this.iapRepository, - this.appStoreServerAPI, - ) { + AppStorePurchaseHandler(this.iapRepository, this.appStoreServerAPI) { // Poll Subscription status every 10 seconds. Timer.periodic(Duration(seconds: 10), (_) { _pullStatus(); @@ -25,10 +22,7 @@ class AppStorePurchaseHandler extends PurchaseHandler { } final _iTunesAPI = ITunesApi( - ITunesHttpClient( - ITunesEnvironment.sandbox(), - loggingEnabled: true, - ), + ITunesHttpClient(ITunesEnvironment.sandbox(), loggingEnabled: true), ); @override @@ -71,30 +65,37 @@ class AppStorePurchaseHandler extends PurchaseHandler { } switch (product.type) { case ProductType.nonSubscription: - await iapRepository.createOrUpdatePurchase(NonSubscriptionPurchase( - userId: userId, - productId: receipt.productId ?? '', - iapSource: IAPSource.appstore, - orderId: receipt.originalTransactionId ?? '', - purchaseDate: DateTime.fromMillisecondsSinceEpoch( - int.parse(receipt.originalPurchaseDateMs ?? '0')), - type: product.type, - status: NonSubscriptionStatus.completed, - )); + await iapRepository.createOrUpdatePurchase( + NonSubscriptionPurchase( + userId: userId, + productId: receipt.productId ?? '', + iapSource: IAPSource.appstore, + orderId: receipt.originalTransactionId ?? '', + purchaseDate: DateTime.fromMillisecondsSinceEpoch( + int.parse(receipt.originalPurchaseDateMs ?? '0'), + ), + type: product.type, + status: NonSubscriptionStatus.completed, + ), + ); break; case ProductType.subscription: - await iapRepository.createOrUpdatePurchase(SubscriptionPurchase( - userId: userId, - productId: receipt.productId ?? '', - iapSource: IAPSource.appstore, - orderId: receipt.originalTransactionId ?? '', - purchaseDate: DateTime.fromMillisecondsSinceEpoch( - int.parse(receipt.originalPurchaseDateMs ?? '0')), - type: product.type, - expiryDate: DateTime.fromMillisecondsSinceEpoch( - int.parse(receipt.expiresDateMs ?? '0')), - status: SubscriptionStatus.active, - )); + await iapRepository.createOrUpdatePurchase( + SubscriptionPurchase( + userId: userId, + productId: receipt.productId ?? '', + iapSource: IAPSource.appstore, + orderId: receipt.originalTransactionId ?? '', + purchaseDate: DateTime.fromMillisecondsSinceEpoch( + int.parse(receipt.originalPurchaseDateMs ?? '0'), + ), + type: product.type, + expiryDate: DateTime.fromMillisecondsSinceEpoch( + int.parse(receipt.expiresDateMs ?? '0'), + ), + status: SubscriptionStatus.active, + ), + ); break; } } @@ -112,35 +113,43 @@ class AppStorePurchaseHandler extends PurchaseHandler { print('Polling App Store'); final purchases = await iapRepository.getPurchases(); // filter for App Store subscriptions - final appStoreSubscriptions = purchases.where((element) => - element.type == ProductType.subscription && - element.iapSource == IAPSource.appstore); + final appStoreSubscriptions = purchases.where( + (element) => + element.type == ProductType.subscription && + element.iapSource == IAPSource.appstore, + ); for (final purchase in appStoreSubscriptions) { - final status = - await appStoreServerAPI.getAllSubscriptionStatuses(purchase.orderId); + final status = await appStoreServerAPI.getAllSubscriptionStatuses( + purchase.orderId, + ); // Obtain all subscriptions for the order id. for (final subscription in status.data) { // Last transaction contains the subscription status. for (final transaction in subscription.lastTransactions) { final expirationDate = DateTime.fromMillisecondsSinceEpoch( - transaction.transactionInfo.expiresDate ?? 0); + transaction.transactionInfo.expiresDate ?? 0, + ); // Check if subscription has expired. final isExpired = expirationDate.isBefore(DateTime.now()); print('Expiration Date: $expirationDate - isExpired: $isExpired'); // Update the subscription status with the new expiration date and status. - await iapRepository.updatePurchase(SubscriptionPurchase( - userId: null, - productId: transaction.transactionInfo.productId, - iapSource: IAPSource.appstore, - orderId: transaction.originalTransactionId, - purchaseDate: DateTime.fromMillisecondsSinceEpoch( - transaction.transactionInfo.originalPurchaseDate), - type: ProductType.subscription, - expiryDate: expirationDate, - status: isExpired - ? SubscriptionStatus.expired - : SubscriptionStatus.active, - )); + await iapRepository.updatePurchase( + SubscriptionPurchase( + userId: null, + productId: transaction.transactionInfo.productId, + iapSource: IAPSource.appstore, + orderId: transaction.originalTransactionId, + purchaseDate: DateTime.fromMillisecondsSinceEpoch( + transaction.transactionInfo.originalPurchaseDate, + ), + type: ProductType.subscription, + expiryDate: expirationDate, + status: + isExpired + ? SubscriptionStatus.expired + : SubscriptionStatus.active, + ), + ); } } } diff --git a/in_app_purchases/step_10/dart-backend/lib/google_play_purchase_handler.dart b/in_app_purchases/step_10/dart-backend/lib/google_play_purchase_handler.dart index b77ca0e461..ead67e4603 100644 --- a/in_app_purchases/step_10/dart-backend/lib/google_play_purchase_handler.dart +++ b/in_app_purchases/step_10/dart-backend/lib/google_play_purchase_handler.dart @@ -162,9 +162,7 @@ class GooglePlayPurchaseHandler extends PurchaseHandler { /// Called every 10 seconds Future _pullMessageFromPubSub() async { print('Polling Google Play messages'); - final request = pubsub.PullRequest( - maxMessages: 1000, - ); + final request = pubsub.PullRequest(maxMessages: 1000); final topicName = 'projects/$googlePlayProjectName/subscriptions/$googlePlayPubsubBillingTopic-sub'; final pullResponse = await pubsubApi.projects.subscriptions.pull( @@ -230,9 +228,7 @@ class GooglePlayPurchaseHandler extends PurchaseHandler { /// ACK Messages from Pub/Sub Future _ackMessage(String id) async { print('ACK Message'); - final request = pubsub.AcknowledgeRequest( - ackIds: [id], - ); + final request = pubsub.AcknowledgeRequest(ackIds: [id]); final subscriptionName = 'projects/$googlePlayProjectName/subscriptions/$googlePlayPubsubBillingTopic-sub'; await pubsubApi.projects.subscriptions.acknowledge( diff --git a/in_app_purchases/step_10/dart-backend/lib/iap_repository.dart b/in_app_purchases/step_10/dart-backend/lib/iap_repository.dart index 1856f31c95..98a0d6ace6 100644 --- a/in_app_purchases/step_10/dart-backend/lib/iap_repository.dart +++ b/in_app_purchases/step_10/dart-backend/lib/iap_repository.dart @@ -2,10 +2,7 @@ import 'package:googleapis/firestore/v1.dart'; import 'products.dart'; -enum IAPSource { - googleplay, - appstore, -} +enum IAPSource { googleplay, appstore } abstract class Purchase { final IAPSource iapSource; @@ -30,8 +27,9 @@ abstract class Purchase { 'orderId': Value(stringValue: orderId), 'productId': Value(stringValue: productId), 'userId': Value(stringValue: userId), - 'purchaseDate': - Value(timestampValue: purchaseDate.toUtc().toIso8601String()), + 'purchaseDate': Value( + timestampValue: purchaseDate.toUtc().toIso8601String(), + ), 'type': Value(stringValue: type.name), }; } @@ -40,46 +38,51 @@ abstract class Purchase { static Purchase fromDocument(Document e) { final type = ProductType.values.firstWhere( - (element) => element.name == e.fields!['type']!.stringValue); + (element) => element.name == e.fields!['type']!.stringValue, + ); switch (type) { case ProductType.subscription: return SubscriptionPurchase( - iapSource: e.fields!['iapSource']!.stringValue == 'googleplay' - ? IAPSource.googleplay - : IAPSource.appstore, + iapSource: + e.fields!['iapSource']!.stringValue == 'googleplay' + ? IAPSource.googleplay + : IAPSource.appstore, orderId: e.fields!['orderId']!.stringValue!, productId: e.fields!['productId']!.stringValue!, userId: e.fields!['userId']!.stringValue, - purchaseDate: - DateTime.parse(e.fields!['purchaseDate']!.timestampValue!), + purchaseDate: DateTime.parse( + e.fields!['purchaseDate']!.timestampValue!, + ), status: SubscriptionStatus.values.firstWhere( - (element) => element.name == e.fields!['status']!.stringValue), - expiryDate: DateTime.tryParse( - e.fields!['expiryDate']?.timestampValue ?? '') ?? + (element) => element.name == e.fields!['status']!.stringValue, + ), + expiryDate: + DateTime.tryParse( + e.fields!['expiryDate']?.timestampValue ?? '', + ) ?? DateTime.now(), ); case ProductType.nonSubscription: return NonSubscriptionPurchase( - iapSource: e.fields!['iapSource']!.stringValue == 'googleplay' - ? IAPSource.googleplay - : IAPSource.appstore, + iapSource: + e.fields!['iapSource']!.stringValue == 'googleplay' + ? IAPSource.googleplay + : IAPSource.appstore, orderId: e.fields!['orderId']!.stringValue!, productId: e.fields!['productId']!.stringValue!, userId: e.fields!['userId']!.stringValue, - purchaseDate: - DateTime.parse(e.fields!['purchaseDate']!.timestampValue!), + purchaseDate: DateTime.parse( + e.fields!['purchaseDate']!.timestampValue!, + ), status: NonSubscriptionStatus.values.firstWhere( - (element) => element.name == e.fields!['status']!.stringValue), + (element) => element.name == e.fields!['status']!.stringValue, + ), ); } } } -enum NonSubscriptionStatus { - pending, - completed, - cancelled, -} +enum NonSubscriptionStatus { pending, completed, cancelled } enum SubscriptionStatus { pending, active, expired } @@ -99,17 +102,13 @@ class NonSubscriptionPurchase extends Purchase { @override Map toDocument() { final doc = super.toDocument(); - doc.addAll({ - 'status': Value(stringValue: status.name), - }); + doc.addAll({'status': Value(stringValue: status.name)}); return doc; } @override Map updateDocument() { - return { - 'status': Value(stringValue: status.name), - }; + return {'status': Value(stringValue: status.name)}; } @override @@ -153,9 +152,7 @@ class SubscriptionPurchase extends Purchase { @override Map updateDocument() { - return { - 'status': Value(stringValue: status.name), - }; + return {'status': Value(stringValue: status.name)}; } @override @@ -187,9 +184,10 @@ class IapRepository { writes: [ Write( update: Document( - fields: purchaseData.toDocument(), - name: - 'projects/$projectId/databases/(default)/documents/purchases/$purchaseId'), + fields: purchaseData.toDocument(), + name: + 'projects/$projectId/databases/(default)/documents/purchases/$purchaseId', + ), ), ], ), @@ -205,9 +203,10 @@ class IapRepository { writes: [ Write( update: Document( - fields: purchaseData.updateDocument(), - name: - 'projects/$projectId/databases/(default)/documents/purchases/$purchaseId'), + fields: purchaseData.updateDocument(), + name: + 'projects/$projectId/databases/(default)/documents/purchases/$purchaseId', + ), updateMask: DocumentMask(fieldPaths: ['status']), ), ], diff --git a/in_app_purchases/step_10/dart-backend/lib/products.dart b/in_app_purchases/step_10/dart-backend/lib/products.dart index d6baaeb9ca..921ffd8da9 100644 --- a/in_app_purchases/step_10/dart-backend/lib/products.dart +++ b/in_app_purchases/step_10/dart-backend/lib/products.dart @@ -5,10 +5,7 @@ class ProductData { const ProductData(this.productId, this.type); } -enum ProductType { - subscription, - nonSubscription, -} +enum ProductType { subscription, nonSubscription } const productDataMap = { 'dash_consumable_2k': ProductData( diff --git a/in_app_purchases/step_10/dart-backend/pubspec.yaml b/in_app_purchases/step_10/dart-backend/pubspec.yaml index c57dee4b4b..b269180b81 100644 --- a/in_app_purchases/step_10/dart-backend/pubspec.yaml +++ b/in_app_purchases/step_10/dart-backend/pubspec.yaml @@ -4,7 +4,7 @@ version: 1.0.0 # homepage: https://www.example.com environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 dependencies: googleapis: ^11.0.0 diff --git a/namer/codelab_rebuild.yaml b/namer/codelab_rebuild.yaml index bb17a4b9fd..f1913b439b 100644 --- a/namer/codelab_rebuild.yaml +++ b/namer/codelab_rebuild.yaml @@ -20,7 +20,7 @@ steps: version: 0.0.1+1 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 dependencies: flutter: diff --git a/namer/step_03/lib/main.dart b/namer/step_03/lib/main.dart index ca550b3901..efd8025757 100644 --- a/namer/step_03/lib/main.dart +++ b/namer/step_03/lib/main.dart @@ -36,10 +36,7 @@ class MyHomePage extends StatelessWidget { return Scaffold( body: Column( - children: [ - Text('A random idea:'), - Text(appState.current.asLowerCase), - ], + children: [Text('A random idea:'), Text(appState.current.asLowerCase)], ), ); } diff --git a/namer/step_03/pubspec.yaml b/namer/step_03/pubspec.yaml index c83392b54d..224748d04a 100644 --- a/namer/step_03/pubspec.yaml +++ b/namer/step_03/pubspec.yaml @@ -6,7 +6,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev version: 0.0.1+1 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 dependencies: flutter: diff --git a/namer/step_04_a_widget/pubspec.yaml b/namer/step_04_a_widget/pubspec.yaml index c83392b54d..224748d04a 100644 --- a/namer/step_04_a_widget/pubspec.yaml +++ b/namer/step_04_a_widget/pubspec.yaml @@ -6,7 +6,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev version: 0.0.1+1 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 dependencies: flutter: diff --git a/namer/step_04_b_behavior/pubspec.yaml b/namer/step_04_b_behavior/pubspec.yaml index c83392b54d..224748d04a 100644 --- a/namer/step_04_b_behavior/pubspec.yaml +++ b/namer/step_04_b_behavior/pubspec.yaml @@ -6,7 +6,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev version: 0.0.1+1 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 dependencies: flutter: diff --git a/namer/step_04_b_behavior/test/widget_test.dart b/namer/step_04_b_behavior/test/widget_test.dart index d9e3d9b474..074e6c0f8d 100644 --- a/namer/step_04_b_behavior/test/widget_test.dart +++ b/namer/step_04_b_behavior/test/widget_test.dart @@ -13,21 +13,20 @@ void main() { await tester.pumpWidget(const MyApp()); String findWordPair() { - final wordPairTextWidget = tester - // Get all Text widgets... - .widgetList(find.byType(Text)) - // ... skip one ('A random AWESOME idea:') ... - .skip(1) - // ... and take the first after it. - .first; + final wordPairTextWidget = + tester + // Get all Text widgets... + .widgetList(find.byType(Text)) + // ... skip one ('A random AWESOME idea:') ... + .skip(1) + // ... and take the first after it. + .first; return wordPairTextWidget.data!; } // Tap several times and keep a list of word pair values. const tryCount = 5; - final pairs = [ - findWordPair(), - ]; + final pairs = [findWordPair()]; for (var i = 1; i < tryCount; i++) { await tester.tap(find.text('Next')); await tester.pumpAndSettle(); @@ -41,7 +40,8 @@ void main() { // We only fail this test when there is zero variance - all the // word pairs are the same, even though we clicked 'Next' several times. hasLength(greaterThan(1)), - reason: 'After clicking $tryCount times, ' + reason: + 'After clicking $tryCount times, ' 'the app should have generated at least two different word pairs. ' 'Instead, the app showed these: $pairs. ' 'That almost certainly means that the word pair is not being ' diff --git a/namer/step_05_a_pair/pubspec.yaml b/namer/step_05_a_pair/pubspec.yaml index c83392b54d..224748d04a 100644 --- a/namer/step_05_a_pair/pubspec.yaml +++ b/namer/step_05_a_pair/pubspec.yaml @@ -6,7 +6,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev version: 0.0.1+1 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 dependencies: flutter: diff --git a/namer/step_05_a_pair/test/widget_test.dart b/namer/step_05_a_pair/test/widget_test.dart index d9e3d9b474..074e6c0f8d 100644 --- a/namer/step_05_a_pair/test/widget_test.dart +++ b/namer/step_05_a_pair/test/widget_test.dart @@ -13,21 +13,20 @@ void main() { await tester.pumpWidget(const MyApp()); String findWordPair() { - final wordPairTextWidget = tester - // Get all Text widgets... - .widgetList(find.byType(Text)) - // ... skip one ('A random AWESOME idea:') ... - .skip(1) - // ... and take the first after it. - .first; + final wordPairTextWidget = + tester + // Get all Text widgets... + .widgetList(find.byType(Text)) + // ... skip one ('A random AWESOME idea:') ... + .skip(1) + // ... and take the first after it. + .first; return wordPairTextWidget.data!; } // Tap several times and keep a list of word pair values. const tryCount = 5; - final pairs = [ - findWordPair(), - ]; + final pairs = [findWordPair()]; for (var i = 1; i < tryCount; i++) { await tester.tap(find.text('Next')); await tester.pumpAndSettle(); @@ -41,7 +40,8 @@ void main() { // We only fail this test when there is zero variance - all the // word pairs are the same, even though we clicked 'Next' several times. hasLength(greaterThan(1)), - reason: 'After clicking $tryCount times, ' + reason: + 'After clicking $tryCount times, ' 'the app should have generated at least two different word pairs. ' 'Instead, the app showed these: $pairs. ' 'That almost certainly means that the word pair is not being ' diff --git a/namer/step_05_b_extract/lib/main.dart b/namer/step_05_b_extract/lib/main.dart index 89438a5501..0e77ee9a05 100644 --- a/namer/step_05_b_extract/lib/main.dart +++ b/namer/step_05_b_extract/lib/main.dart @@ -58,10 +58,7 @@ class MyHomePage extends StatelessWidget { } class BigCard extends StatelessWidget { - const BigCard({ - super.key, - required this.pair, - }); + const BigCard({super.key, required this.pair}); final WordPair pair; diff --git a/namer/step_05_b_extract/pubspec.yaml b/namer/step_05_b_extract/pubspec.yaml index c83392b54d..224748d04a 100644 --- a/namer/step_05_b_extract/pubspec.yaml +++ b/namer/step_05_b_extract/pubspec.yaml @@ -6,7 +6,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev version: 0.0.1+1 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 dependencies: flutter: diff --git a/namer/step_05_b_extract/test/widget_test.dart b/namer/step_05_b_extract/test/widget_test.dart index edfa65481d..50ae8b2f16 100644 --- a/namer/step_05_b_extract/test/widget_test.dart +++ b/namer/step_05_b_extract/test/widget_test.dart @@ -13,18 +13,15 @@ void main() { await tester.pumpWidget(const MyApp()); String findWordPair() { - final wordPairTextWidget = tester.widget(find.descendant( - of: find.byType(BigCard), - matching: find.byType(Text), - )); + final wordPairTextWidget = tester.widget( + find.descendant(of: find.byType(BigCard), matching: find.byType(Text)), + ); return wordPairTextWidget.data!; } // Tap several times and keep a list of word pair values. const tryCount = 5; - final pairs = [ - findWordPair(), - ]; + final pairs = [findWordPair()]; for (var i = 1; i < tryCount; i++) { await tester.tap(find.text('Next')); await tester.pumpAndSettle(); @@ -38,7 +35,8 @@ void main() { // We only fail this test when there is zero variance - all the // word pairs are the same, even though we clicked 'Next' several times. hasLength(greaterThan(1)), - reason: 'After clicking $tryCount times, ' + reason: + 'After clicking $tryCount times, ' 'the app should have generated at least two different word pairs. ' 'Instead, the app showed these: $pairs. ' 'That almost certainly means that the word pair is not being ' diff --git a/namer/step_05_c_card_padding/lib/main.dart b/namer/step_05_c_card_padding/lib/main.dart index 266640cb8e..7225905ddf 100644 --- a/namer/step_05_c_card_padding/lib/main.dart +++ b/namer/step_05_c_card_padding/lib/main.dart @@ -58,10 +58,7 @@ class MyHomePage extends StatelessWidget { } class BigCard extends StatelessWidget { - const BigCard({ - super.key, - required this.pair, - }); + const BigCard({super.key, required this.pair}); final WordPair pair; diff --git a/namer/step_05_c_card_padding/pubspec.yaml b/namer/step_05_c_card_padding/pubspec.yaml index c83392b54d..224748d04a 100644 --- a/namer/step_05_c_card_padding/pubspec.yaml +++ b/namer/step_05_c_card_padding/pubspec.yaml @@ -6,7 +6,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev version: 0.0.1+1 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 dependencies: flutter: diff --git a/namer/step_05_c_card_padding/test/widget_test.dart b/namer/step_05_c_card_padding/test/widget_test.dart index edfa65481d..50ae8b2f16 100644 --- a/namer/step_05_c_card_padding/test/widget_test.dart +++ b/namer/step_05_c_card_padding/test/widget_test.dart @@ -13,18 +13,15 @@ void main() { await tester.pumpWidget(const MyApp()); String findWordPair() { - final wordPairTextWidget = tester.widget(find.descendant( - of: find.byType(BigCard), - matching: find.byType(Text), - )); + final wordPairTextWidget = tester.widget( + find.descendant(of: find.byType(BigCard), matching: find.byType(Text)), + ); return wordPairTextWidget.data!; } // Tap several times and keep a list of word pair values. const tryCount = 5; - final pairs = [ - findWordPair(), - ]; + final pairs = [findWordPair()]; for (var i = 1; i < tryCount; i++) { await tester.tap(find.text('Next')); await tester.pumpAndSettle(); @@ -38,7 +35,8 @@ void main() { // We only fail this test when there is zero variance - all the // word pairs are the same, even though we clicked 'Next' several times. hasLength(greaterThan(1)), - reason: 'After clicking $tryCount times, ' + reason: + 'After clicking $tryCount times, ' 'the app should have generated at least two different word pairs. ' 'Instead, the app showed these: $pairs. ' 'That almost certainly means that the word pair is not being ' diff --git a/namer/step_05_d_theme/lib/main.dart b/namer/step_05_d_theme/lib/main.dart index a54004bbb7..ae9ac8d69b 100644 --- a/namer/step_05_d_theme/lib/main.dart +++ b/namer/step_05_d_theme/lib/main.dart @@ -58,10 +58,7 @@ class MyHomePage extends StatelessWidget { } class BigCard extends StatelessWidget { - const BigCard({ - super.key, - required this.pair, - }); + const BigCard({super.key, required this.pair}); final WordPair pair; diff --git a/namer/step_05_d_theme/pubspec.yaml b/namer/step_05_d_theme/pubspec.yaml index c83392b54d..224748d04a 100644 --- a/namer/step_05_d_theme/pubspec.yaml +++ b/namer/step_05_d_theme/pubspec.yaml @@ -6,7 +6,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev version: 0.0.1+1 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 dependencies: flutter: diff --git a/namer/step_05_d_theme/test/widget_test.dart b/namer/step_05_d_theme/test/widget_test.dart index edfa65481d..50ae8b2f16 100644 --- a/namer/step_05_d_theme/test/widget_test.dart +++ b/namer/step_05_d_theme/test/widget_test.dart @@ -13,18 +13,15 @@ void main() { await tester.pumpWidget(const MyApp()); String findWordPair() { - final wordPairTextWidget = tester.widget(find.descendant( - of: find.byType(BigCard), - matching: find.byType(Text), - )); + final wordPairTextWidget = tester.widget( + find.descendant(of: find.byType(BigCard), matching: find.byType(Text)), + ); return wordPairTextWidget.data!; } // Tap several times and keep a list of word pair values. const tryCount = 5; - final pairs = [ - findWordPair(), - ]; + final pairs = [findWordPair()]; for (var i = 1; i < tryCount; i++) { await tester.tap(find.text('Next')); await tester.pumpAndSettle(); @@ -38,7 +35,8 @@ void main() { // We only fail this test when there is zero variance - all the // word pairs are the same, even though we clicked 'Next' several times. hasLength(greaterThan(1)), - reason: 'After clicking $tryCount times, ' + reason: + 'After clicking $tryCount times, ' 'the app should have generated at least two different word pairs. ' 'Instead, the app showed these: $pairs. ' 'That almost certainly means that the word pair is not being ' diff --git a/namer/step_05_e_text_style/lib/main.dart b/namer/step_05_e_text_style/lib/main.dart index 0dd8a34cb4..e33e5b7a8c 100644 --- a/namer/step_05_e_text_style/lib/main.dart +++ b/namer/step_05_e_text_style/lib/main.dart @@ -58,10 +58,7 @@ class MyHomePage extends StatelessWidget { } class BigCard extends StatelessWidget { - const BigCard({ - super.key, - required this.pair, - }); + const BigCard({super.key, required this.pair}); final WordPair pair; diff --git a/namer/step_05_e_text_style/pubspec.yaml b/namer/step_05_e_text_style/pubspec.yaml index c83392b54d..224748d04a 100644 --- a/namer/step_05_e_text_style/pubspec.yaml +++ b/namer/step_05_e_text_style/pubspec.yaml @@ -6,7 +6,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev version: 0.0.1+1 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 dependencies: flutter: diff --git a/namer/step_05_e_text_style/test/widget_test.dart b/namer/step_05_e_text_style/test/widget_test.dart index edfa65481d..50ae8b2f16 100644 --- a/namer/step_05_e_text_style/test/widget_test.dart +++ b/namer/step_05_e_text_style/test/widget_test.dart @@ -13,18 +13,15 @@ void main() { await tester.pumpWidget(const MyApp()); String findWordPair() { - final wordPairTextWidget = tester.widget(find.descendant( - of: find.byType(BigCard), - matching: find.byType(Text), - )); + final wordPairTextWidget = tester.widget( + find.descendant(of: find.byType(BigCard), matching: find.byType(Text)), + ); return wordPairTextWidget.data!; } // Tap several times and keep a list of word pair values. const tryCount = 5; - final pairs = [ - findWordPair(), - ]; + final pairs = [findWordPair()]; for (var i = 1; i < tryCount; i++) { await tester.tap(find.text('Next')); await tester.pumpAndSettle(); @@ -38,7 +35,8 @@ void main() { // We only fail this test when there is zero variance - all the // word pairs are the same, even though we clicked 'Next' several times. hasLength(greaterThan(1)), - reason: 'After clicking $tryCount times, ' + reason: + 'After clicking $tryCount times, ' 'the app should have generated at least two different word pairs. ' 'Instead, the app showed these: $pairs. ' 'That almost certainly means that the word pair is not being ' diff --git a/namer/step_05_f_accessibility/lib/main.dart b/namer/step_05_f_accessibility/lib/main.dart index ba9271f245..729ed22650 100644 --- a/namer/step_05_f_accessibility/lib/main.dart +++ b/namer/step_05_f_accessibility/lib/main.dart @@ -58,10 +58,7 @@ class MyHomePage extends StatelessWidget { } class BigCard extends StatelessWidget { - const BigCard({ - super.key, - required this.pair, - }); + const BigCard({super.key, required this.pair}); final WordPair pair; diff --git a/namer/step_05_f_accessibility/pubspec.yaml b/namer/step_05_f_accessibility/pubspec.yaml index c83392b54d..224748d04a 100644 --- a/namer/step_05_f_accessibility/pubspec.yaml +++ b/namer/step_05_f_accessibility/pubspec.yaml @@ -6,7 +6,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev version: 0.0.1+1 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 dependencies: flutter: diff --git a/namer/step_05_f_accessibility/test/widget_test.dart b/namer/step_05_f_accessibility/test/widget_test.dart index edfa65481d..50ae8b2f16 100644 --- a/namer/step_05_f_accessibility/test/widget_test.dart +++ b/namer/step_05_f_accessibility/test/widget_test.dart @@ -13,18 +13,15 @@ void main() { await tester.pumpWidget(const MyApp()); String findWordPair() { - final wordPairTextWidget = tester.widget(find.descendant( - of: find.byType(BigCard), - matching: find.byType(Text), - )); + final wordPairTextWidget = tester.widget( + find.descendant(of: find.byType(BigCard), matching: find.byType(Text)), + ); return wordPairTextWidget.data!; } // Tap several times and keep a list of word pair values. const tryCount = 5; - final pairs = [ - findWordPair(), - ]; + final pairs = [findWordPair()]; for (var i = 1; i < tryCount; i++) { await tester.tap(find.text('Next')); await tester.pumpAndSettle(); @@ -38,7 +35,8 @@ void main() { // We only fail this test when there is zero variance - all the // word pairs are the same, even though we clicked 'Next' several times. hasLength(greaterThan(1)), - reason: 'After clicking $tryCount times, ' + reason: + 'After clicking $tryCount times, ' 'the app should have generated at least two different word pairs. ' 'Instead, the app showed these: $pairs. ' 'That almost certainly means that the word pair is not being ' diff --git a/namer/step_05_g_center_vertical/lib/main.dart b/namer/step_05_g_center_vertical/lib/main.dart index cf8bd03b16..35db291c20 100644 --- a/namer/step_05_g_center_vertical/lib/main.dart +++ b/namer/step_05_g_center_vertical/lib/main.dart @@ -59,10 +59,7 @@ class MyHomePage extends StatelessWidget { } class BigCard extends StatelessWidget { - const BigCard({ - super.key, - required this.pair, - }); + const BigCard({super.key, required this.pair}); final WordPair pair; diff --git a/namer/step_05_g_center_vertical/pubspec.yaml b/namer/step_05_g_center_vertical/pubspec.yaml index c83392b54d..224748d04a 100644 --- a/namer/step_05_g_center_vertical/pubspec.yaml +++ b/namer/step_05_g_center_vertical/pubspec.yaml @@ -6,7 +6,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev version: 0.0.1+1 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 dependencies: flutter: diff --git a/namer/step_05_g_center_vertical/test/widget_test.dart b/namer/step_05_g_center_vertical/test/widget_test.dart index edfa65481d..50ae8b2f16 100644 --- a/namer/step_05_g_center_vertical/test/widget_test.dart +++ b/namer/step_05_g_center_vertical/test/widget_test.dart @@ -13,18 +13,15 @@ void main() { await tester.pumpWidget(const MyApp()); String findWordPair() { - final wordPairTextWidget = tester.widget(find.descendant( - of: find.byType(BigCard), - matching: find.byType(Text), - )); + final wordPairTextWidget = tester.widget( + find.descendant(of: find.byType(BigCard), matching: find.byType(Text)), + ); return wordPairTextWidget.data!; } // Tap several times and keep a list of word pair values. const tryCount = 5; - final pairs = [ - findWordPair(), - ]; + final pairs = [findWordPair()]; for (var i = 1; i < tryCount; i++) { await tester.tap(find.text('Next')); await tester.pumpAndSettle(); @@ -38,7 +35,8 @@ void main() { // We only fail this test when there is zero variance - all the // word pairs are the same, even though we clicked 'Next' several times. hasLength(greaterThan(1)), - reason: 'After clicking $tryCount times, ' + reason: + 'After clicking $tryCount times, ' 'the app should have generated at least two different word pairs. ' 'Instead, the app showed these: $pairs. ' 'That almost certainly means that the word pair is not being ' diff --git a/namer/step_05_h_center_horizontal/lib/main.dart b/namer/step_05_h_center_horizontal/lib/main.dart index 5bcf0b71e7..3fc7e66b56 100644 --- a/namer/step_05_h_center_horizontal/lib/main.dart +++ b/namer/step_05_h_center_horizontal/lib/main.dart @@ -61,10 +61,7 @@ class MyHomePage extends StatelessWidget { } class BigCard extends StatelessWidget { - const BigCard({ - super.key, - required this.pair, - }); + const BigCard({super.key, required this.pair}); final WordPair pair; diff --git a/namer/step_05_h_center_horizontal/pubspec.yaml b/namer/step_05_h_center_horizontal/pubspec.yaml index c83392b54d..224748d04a 100644 --- a/namer/step_05_h_center_horizontal/pubspec.yaml +++ b/namer/step_05_h_center_horizontal/pubspec.yaml @@ -6,7 +6,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev version: 0.0.1+1 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 dependencies: flutter: diff --git a/namer/step_05_h_center_horizontal/test/widget_test.dart b/namer/step_05_h_center_horizontal/test/widget_test.dart index edfa65481d..50ae8b2f16 100644 --- a/namer/step_05_h_center_horizontal/test/widget_test.dart +++ b/namer/step_05_h_center_horizontal/test/widget_test.dart @@ -13,18 +13,15 @@ void main() { await tester.pumpWidget(const MyApp()); String findWordPair() { - final wordPairTextWidget = tester.widget(find.descendant( - of: find.byType(BigCard), - matching: find.byType(Text), - )); + final wordPairTextWidget = tester.widget( + find.descendant(of: find.byType(BigCard), matching: find.byType(Text)), + ); return wordPairTextWidget.data!; } // Tap several times and keep a list of word pair values. const tryCount = 5; - final pairs = [ - findWordPair(), - ]; + final pairs = [findWordPair()]; for (var i = 1; i < tryCount; i++) { await tester.tap(find.text('Next')); await tester.pumpAndSettle(); @@ -38,7 +35,8 @@ void main() { // We only fail this test when there is zero variance - all the // word pairs are the same, even though we clicked 'Next' several times. hasLength(greaterThan(1)), - reason: 'After clicking $tryCount times, ' + reason: + 'After clicking $tryCount times, ' 'the app should have generated at least two different word pairs. ' 'Instead, the app showed these: $pairs. ' 'That almost certainly means that the word pair is not being ' diff --git a/namer/step_05_i_optional_changes/lib/main.dart b/namer/step_05_i_optional_changes/lib/main.dart index f1a42139c6..d6cbdfcdec 100644 --- a/namer/step_05_i_optional_changes/lib/main.dart +++ b/namer/step_05_i_optional_changes/lib/main.dart @@ -61,10 +61,7 @@ class MyHomePage extends StatelessWidget { } class BigCard extends StatelessWidget { - const BigCard({ - super.key, - required this.pair, - }); + const BigCard({super.key, required this.pair}); final WordPair pair; diff --git a/namer/step_05_i_optional_changes/pubspec.yaml b/namer/step_05_i_optional_changes/pubspec.yaml index c83392b54d..224748d04a 100644 --- a/namer/step_05_i_optional_changes/pubspec.yaml +++ b/namer/step_05_i_optional_changes/pubspec.yaml @@ -6,7 +6,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev version: 0.0.1+1 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 dependencies: flutter: diff --git a/namer/step_05_i_optional_changes/test/widget_test.dart b/namer/step_05_i_optional_changes/test/widget_test.dart index f78c4b8b7e..0d96309d19 100644 --- a/namer/step_05_i_optional_changes/test/widget_test.dart +++ b/namer/step_05_i_optional_changes/test/widget_test.dart @@ -13,18 +13,15 @@ void main() { await tester.pumpWidget(const MyApp()); String findWordPair() { - final wordPairTextWidget = tester.widget(find.descendant( - of: find.byType(BigCard), - matching: find.byType(Text), - )); + final wordPairTextWidget = tester.widget( + find.descendant(of: find.byType(BigCard), matching: find.byType(Text)), + ); return wordPairTextWidget.data!; } // Tap several times and keep a list of word pair values. const tryCount = 5; - final pairs = [ - findWordPair(), - ]; + final pairs = [findWordPair()]; for (var i = 1; i < tryCount; i++) { await tester.tap(find.text('Next')); await tester.pumpAndSettle(); @@ -38,7 +35,8 @@ void main() { // We only fail this test when there is zero variance - all the // word pairs are the same, even though we clicked 'Next' several times. hasLength(greaterThan(1)), - reason: 'After clicking $tryCount times, ' + reason: + 'After clicking $tryCount times, ' 'the app should have generated at least two different word pairs. ' 'Instead, the app showed these: $pairs. ' 'That almost certainly means that the word pair is not being ' diff --git a/namer/step_06_a_business_logic/lib/main.dart b/namer/step_06_a_business_logic/lib/main.dart index 4f4b52571f..36a40bae7d 100644 --- a/namer/step_06_a_business_logic/lib/main.dart +++ b/namer/step_06_a_business_logic/lib/main.dart @@ -72,10 +72,7 @@ class MyHomePage extends StatelessWidget { } class BigCard extends StatelessWidget { - const BigCard({ - super.key, - required this.pair, - }); + const BigCard({super.key, required this.pair}); final WordPair pair; diff --git a/namer/step_06_a_business_logic/pubspec.yaml b/namer/step_06_a_business_logic/pubspec.yaml index c83392b54d..224748d04a 100644 --- a/namer/step_06_a_business_logic/pubspec.yaml +++ b/namer/step_06_a_business_logic/pubspec.yaml @@ -6,7 +6,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev version: 0.0.1+1 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 dependencies: flutter: diff --git a/namer/step_06_a_business_logic/test/widget_test.dart b/namer/step_06_a_business_logic/test/widget_test.dart index f78c4b8b7e..0d96309d19 100644 --- a/namer/step_06_a_business_logic/test/widget_test.dart +++ b/namer/step_06_a_business_logic/test/widget_test.dart @@ -13,18 +13,15 @@ void main() { await tester.pumpWidget(const MyApp()); String findWordPair() { - final wordPairTextWidget = tester.widget(find.descendant( - of: find.byType(BigCard), - matching: find.byType(Text), - )); + final wordPairTextWidget = tester.widget( + find.descendant(of: find.byType(BigCard), matching: find.byType(Text)), + ); return wordPairTextWidget.data!; } // Tap several times and keep a list of word pair values. const tryCount = 5; - final pairs = [ - findWordPair(), - ]; + final pairs = [findWordPair()]; for (var i = 1; i < tryCount; i++) { await tester.tap(find.text('Next')); await tester.pumpAndSettle(); @@ -38,7 +35,8 @@ void main() { // We only fail this test when there is zero variance - all the // word pairs are the same, even though we clicked 'Next' several times. hasLength(greaterThan(1)), - reason: 'After clicking $tryCount times, ' + reason: + 'After clicking $tryCount times, ' 'the app should have generated at least two different word pairs. ' 'Instead, the app showed these: $pairs. ' 'That almost certainly means that the word pair is not being ' diff --git a/namer/step_06_b_add_row/lib/main.dart b/namer/step_06_b_add_row/lib/main.dart index 8bf27bce63..d0d5c32df4 100644 --- a/namer/step_06_b_add_row/lib/main.dart +++ b/namer/step_06_b_add_row/lib/main.dart @@ -77,10 +77,7 @@ class MyHomePage extends StatelessWidget { } class BigCard extends StatelessWidget { - const BigCard({ - super.key, - required this.pair, - }); + const BigCard({super.key, required this.pair}); final WordPair pair; diff --git a/namer/step_06_b_add_row/pubspec.yaml b/namer/step_06_b_add_row/pubspec.yaml index c83392b54d..224748d04a 100644 --- a/namer/step_06_b_add_row/pubspec.yaml +++ b/namer/step_06_b_add_row/pubspec.yaml @@ -6,7 +6,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev version: 0.0.1+1 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 dependencies: flutter: diff --git a/namer/step_06_b_add_row/test/widget_test.dart b/namer/step_06_b_add_row/test/widget_test.dart index f78c4b8b7e..0d96309d19 100644 --- a/namer/step_06_b_add_row/test/widget_test.dart +++ b/namer/step_06_b_add_row/test/widget_test.dart @@ -13,18 +13,15 @@ void main() { await tester.pumpWidget(const MyApp()); String findWordPair() { - final wordPairTextWidget = tester.widget(find.descendant( - of: find.byType(BigCard), - matching: find.byType(Text), - )); + final wordPairTextWidget = tester.widget( + find.descendant(of: find.byType(BigCard), matching: find.byType(Text)), + ); return wordPairTextWidget.data!; } // Tap several times and keep a list of word pair values. const tryCount = 5; - final pairs = [ - findWordPair(), - ]; + final pairs = [findWordPair()]; for (var i = 1; i < tryCount; i++) { await tester.tap(find.text('Next')); await tester.pumpAndSettle(); @@ -38,7 +35,8 @@ void main() { // We only fail this test when there is zero variance - all the // word pairs are the same, even though we clicked 'Next' several times. hasLength(greaterThan(1)), - reason: 'After clicking $tryCount times, ' + reason: + 'After clicking $tryCount times, ' 'the app should have generated at least two different word pairs. ' 'Instead, the app showed these: $pairs. ' 'That almost certainly means that the word pair is not being ' diff --git a/namer/step_06_c_add_like_button/lib/main.dart b/namer/step_06_c_add_like_button/lib/main.dart index 7e6135100c..4190274b34 100644 --- a/namer/step_06_c_add_like_button/lib/main.dart +++ b/namer/step_06_c_add_like_button/lib/main.dart @@ -92,10 +92,7 @@ class MyHomePage extends StatelessWidget { } class BigCard extends StatelessWidget { - const BigCard({ - super.key, - required this.pair, - }); + const BigCard({super.key, required this.pair}); final WordPair pair; diff --git a/namer/step_06_c_add_like_button/pubspec.yaml b/namer/step_06_c_add_like_button/pubspec.yaml index c83392b54d..224748d04a 100644 --- a/namer/step_06_c_add_like_button/pubspec.yaml +++ b/namer/step_06_c_add_like_button/pubspec.yaml @@ -6,7 +6,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev version: 0.0.1+1 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 dependencies: flutter: diff --git a/namer/step_06_c_add_like_button/test/widget_test.dart b/namer/step_06_c_add_like_button/test/widget_test.dart index 528bd2d6fd..e4176ea2b9 100644 --- a/namer/step_06_c_add_like_button/test/widget_test.dart +++ b/namer/step_06_c_add_like_button/test/widget_test.dart @@ -13,18 +13,15 @@ void main() { await tester.pumpWidget(const MyApp()); String findWordPair() { - final wordPairTextWidget = tester.widget(find.descendant( - of: find.byType(BigCard), - matching: find.byType(Text), - )); + final wordPairTextWidget = tester.widget( + find.descendant(of: find.byType(BigCard), matching: find.byType(Text)), + ); return wordPairTextWidget.data!; } // Tap several times and keep a list of word pair values. const tryCount = 5; - final pairs = [ - findWordPair(), - ]; + final pairs = [findWordPair()]; for (var i = 1; i < tryCount; i++) { await tester.tap(find.text('Next')); await tester.pumpAndSettle(); @@ -38,7 +35,8 @@ void main() { // We only fail this test when there is zero variance - all the // word pairs are the same, even though we clicked 'Next' several times. hasLength(greaterThan(1)), - reason: 'After clicking $tryCount times, ' + reason: + 'After clicking $tryCount times, ' 'the app should have generated at least two different word pairs. ' 'Instead, the app showed these: $pairs. ' 'That almost certainly means that the word pair is not being ' diff --git a/namer/step_07_a_split_my_home_page/lib/main.dart b/namer/step_07_a_split_my_home_page/lib/main.dart index e9a3bbf446..4a5d81b812 100644 --- a/namer/step_07_a_split_my_home_page/lib/main.dart +++ b/namer/step_07_a_split_my_home_page/lib/main.dart @@ -127,10 +127,7 @@ class GeneratorPage extends StatelessWidget { } class BigCard extends StatelessWidget { - const BigCard({ - super.key, - required this.pair, - }); + const BigCard({super.key, required this.pair}); final WordPair pair; diff --git a/namer/step_07_a_split_my_home_page/pubspec.yaml b/namer/step_07_a_split_my_home_page/pubspec.yaml index c83392b54d..224748d04a 100644 --- a/namer/step_07_a_split_my_home_page/pubspec.yaml +++ b/namer/step_07_a_split_my_home_page/pubspec.yaml @@ -6,7 +6,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev version: 0.0.1+1 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 dependencies: flutter: diff --git a/namer/step_07_a_split_my_home_page/test/widget_test.dart b/namer/step_07_a_split_my_home_page/test/widget_test.dart index 528bd2d6fd..e4176ea2b9 100644 --- a/namer/step_07_a_split_my_home_page/test/widget_test.dart +++ b/namer/step_07_a_split_my_home_page/test/widget_test.dart @@ -13,18 +13,15 @@ void main() { await tester.pumpWidget(const MyApp()); String findWordPair() { - final wordPairTextWidget = tester.widget(find.descendant( - of: find.byType(BigCard), - matching: find.byType(Text), - )); + final wordPairTextWidget = tester.widget( + find.descendant(of: find.byType(BigCard), matching: find.byType(Text)), + ); return wordPairTextWidget.data!; } // Tap several times and keep a list of word pair values. const tryCount = 5; - final pairs = [ - findWordPair(), - ]; + final pairs = [findWordPair()]; for (var i = 1; i < tryCount; i++) { await tester.tap(find.text('Next')); await tester.pumpAndSettle(); @@ -38,7 +35,8 @@ void main() { // We only fail this test when there is zero variance - all the // word pairs are the same, even though we clicked 'Next' several times. hasLength(greaterThan(1)), - reason: 'After clicking $tryCount times, ' + reason: + 'After clicking $tryCount times, ' 'the app should have generated at least two different word pairs. ' 'Instead, the app showed these: $pairs. ' 'That almost certainly means that the word pair is not being ' diff --git a/namer/step_07_b_convert_to_stateful/lib/main.dart b/namer/step_07_b_convert_to_stateful/lib/main.dart index a2c48cdf0e..c0bad6528e 100644 --- a/namer/step_07_b_convert_to_stateful/lib/main.dart +++ b/namer/step_07_b_convert_to_stateful/lib/main.dart @@ -132,10 +132,7 @@ class GeneratorPage extends StatelessWidget { } class BigCard extends StatelessWidget { - const BigCard({ - super.key, - required this.pair, - }); + const BigCard({super.key, required this.pair}); final WordPair pair; diff --git a/namer/step_07_b_convert_to_stateful/pubspec.yaml b/namer/step_07_b_convert_to_stateful/pubspec.yaml index c83392b54d..224748d04a 100644 --- a/namer/step_07_b_convert_to_stateful/pubspec.yaml +++ b/namer/step_07_b_convert_to_stateful/pubspec.yaml @@ -6,7 +6,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev version: 0.0.1+1 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 dependencies: flutter: diff --git a/namer/step_07_b_convert_to_stateful/test/widget_test.dart b/namer/step_07_b_convert_to_stateful/test/widget_test.dart index 528bd2d6fd..e4176ea2b9 100644 --- a/namer/step_07_b_convert_to_stateful/test/widget_test.dart +++ b/namer/step_07_b_convert_to_stateful/test/widget_test.dart @@ -13,18 +13,15 @@ void main() { await tester.pumpWidget(const MyApp()); String findWordPair() { - final wordPairTextWidget = tester.widget(find.descendant( - of: find.byType(BigCard), - matching: find.byType(Text), - )); + final wordPairTextWidget = tester.widget( + find.descendant(of: find.byType(BigCard), matching: find.byType(Text)), + ); return wordPairTextWidget.data!; } // Tap several times and keep a list of word pair values. const tryCount = 5; - final pairs = [ - findWordPair(), - ]; + final pairs = [findWordPair()]; for (var i = 1; i < tryCount; i++) { await tester.tap(find.text('Next')); await tester.pumpAndSettle(); @@ -38,7 +35,8 @@ void main() { // We only fail this test when there is zero variance - all the // word pairs are the same, even though we clicked 'Next' several times. hasLength(greaterThan(1)), - reason: 'After clicking $tryCount times, ' + reason: + 'After clicking $tryCount times, ' 'the app should have generated at least two different word pairs. ' 'Instead, the app showed these: $pairs. ' 'That almost certainly means that the word pair is not being ' diff --git a/namer/step_07_c_add_selectedindex/lib/main.dart b/namer/step_07_c_add_selectedindex/lib/main.dart index eaf26808ec..865136f327 100644 --- a/namer/step_07_c_add_selectedindex/lib/main.dart +++ b/namer/step_07_c_add_selectedindex/lib/main.dart @@ -136,10 +136,7 @@ class GeneratorPage extends StatelessWidget { } class BigCard extends StatelessWidget { - const BigCard({ - super.key, - required this.pair, - }); + const BigCard({super.key, required this.pair}); final WordPair pair; diff --git a/namer/step_07_c_add_selectedindex/pubspec.yaml b/namer/step_07_c_add_selectedindex/pubspec.yaml index c83392b54d..224748d04a 100644 --- a/namer/step_07_c_add_selectedindex/pubspec.yaml +++ b/namer/step_07_c_add_selectedindex/pubspec.yaml @@ -6,7 +6,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev version: 0.0.1+1 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 dependencies: flutter: diff --git a/namer/step_07_c_add_selectedindex/test/widget_test.dart b/namer/step_07_c_add_selectedindex/test/widget_test.dart index 528bd2d6fd..e4176ea2b9 100644 --- a/namer/step_07_c_add_selectedindex/test/widget_test.dart +++ b/namer/step_07_c_add_selectedindex/test/widget_test.dart @@ -13,18 +13,15 @@ void main() { await tester.pumpWidget(const MyApp()); String findWordPair() { - final wordPairTextWidget = tester.widget(find.descendant( - of: find.byType(BigCard), - matching: find.byType(Text), - )); + final wordPairTextWidget = tester.widget( + find.descendant(of: find.byType(BigCard), matching: find.byType(Text)), + ); return wordPairTextWidget.data!; } // Tap several times and keep a list of word pair values. const tryCount = 5; - final pairs = [ - findWordPair(), - ]; + final pairs = [findWordPair()]; for (var i = 1; i < tryCount; i++) { await tester.tap(find.text('Next')); await tester.pumpAndSettle(); @@ -38,7 +35,8 @@ void main() { // We only fail this test when there is zero variance - all the // word pairs are the same, even though we clicked 'Next' several times. hasLength(greaterThan(1)), - reason: 'After clicking $tryCount times, ' + reason: + 'After clicking $tryCount times, ' 'the app should have generated at least two different word pairs. ' 'Instead, the app showed these: $pairs. ' 'That almost certainly means that the word pair is not being ' diff --git a/namer/step_07_d_use_selectedindex/lib/main.dart b/namer/step_07_d_use_selectedindex/lib/main.dart index 546a1a480e..6114698f87 100644 --- a/namer/step_07_d_use_selectedindex/lib/main.dart +++ b/namer/step_07_d_use_selectedindex/lib/main.dart @@ -146,10 +146,7 @@ class GeneratorPage extends StatelessWidget { } class BigCard extends StatelessWidget { - const BigCard({ - super.key, - required this.pair, - }); + const BigCard({super.key, required this.pair}); final WordPair pair; diff --git a/namer/step_07_d_use_selectedindex/pubspec.yaml b/namer/step_07_d_use_selectedindex/pubspec.yaml index c83392b54d..224748d04a 100644 --- a/namer/step_07_d_use_selectedindex/pubspec.yaml +++ b/namer/step_07_d_use_selectedindex/pubspec.yaml @@ -6,7 +6,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev version: 0.0.1+1 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 dependencies: flutter: diff --git a/namer/step_07_d_use_selectedindex/test/widget_test.dart b/namer/step_07_d_use_selectedindex/test/widget_test.dart index 528bd2d6fd..e4176ea2b9 100644 --- a/namer/step_07_d_use_selectedindex/test/widget_test.dart +++ b/namer/step_07_d_use_selectedindex/test/widget_test.dart @@ -13,18 +13,15 @@ void main() { await tester.pumpWidget(const MyApp()); String findWordPair() { - final wordPairTextWidget = tester.widget(find.descendant( - of: find.byType(BigCard), - matching: find.byType(Text), - )); + final wordPairTextWidget = tester.widget( + find.descendant(of: find.byType(BigCard), matching: find.byType(Text)), + ); return wordPairTextWidget.data!; } // Tap several times and keep a list of word pair values. const tryCount = 5; - final pairs = [ - findWordPair(), - ]; + final pairs = [findWordPair()]; for (var i = 1; i < tryCount; i++) { await tester.tap(find.text('Next')); await tester.pumpAndSettle(); @@ -38,7 +35,8 @@ void main() { // We only fail this test when there is zero variance - all the // word pairs are the same, even though we clicked 'Next' several times. hasLength(greaterThan(1)), - reason: 'After clicking $tryCount times, ' + reason: + 'After clicking $tryCount times, ' 'the app should have generated at least two different word pairs. ' 'Instead, the app showed these: $pairs. ' 'That almost certainly means that the word pair is not being ' diff --git a/namer/step_07_e_add_layout_builder/lib/main.dart b/namer/step_07_e_add_layout_builder/lib/main.dart index 7c81351e03..481e62c10a 100644 --- a/namer/step_07_e_add_layout_builder/lib/main.dart +++ b/namer/step_07_e_add_layout_builder/lib/main.dart @@ -65,41 +65,43 @@ class _MyHomePageState extends State { throw UnimplementedError('no widget for $selectedIndex'); } - return LayoutBuilder(builder: (context, constraints) { - return Scaffold( - body: Row( - children: [ - SafeArea( - child: NavigationRail( - extended: constraints.maxWidth >= 600, - destinations: [ - NavigationRailDestination( - icon: Icon(Icons.home), - label: Text('Home'), - ), - NavigationRailDestination( - icon: Icon(Icons.favorite), - label: Text('Favorites'), - ), - ], - selectedIndex: selectedIndex, - onDestinationSelected: (value) { - setState(() { - selectedIndex = value; - }); - }, + return LayoutBuilder( + builder: (context, constraints) { + return Scaffold( + body: Row( + children: [ + SafeArea( + child: NavigationRail( + extended: constraints.maxWidth >= 600, + destinations: [ + NavigationRailDestination( + icon: Icon(Icons.home), + label: Text('Home'), + ), + NavigationRailDestination( + icon: Icon(Icons.favorite), + label: Text('Favorites'), + ), + ], + selectedIndex: selectedIndex, + onDestinationSelected: (value) { + setState(() { + selectedIndex = value; + }); + }, + ), ), - ), - Expanded( - child: Container( - color: Theme.of(context).colorScheme.primaryContainer, - child: page, + Expanded( + child: Container( + color: Theme.of(context).colorScheme.primaryContainer, + child: page, + ), ), - ), - ], - ), - ); - }); + ], + ), + ); + }, + ); } } @@ -148,10 +150,7 @@ class GeneratorPage extends StatelessWidget { } class BigCard extends StatelessWidget { - const BigCard({ - super.key, - required this.pair, - }); + const BigCard({super.key, required this.pair}); final WordPair pair; diff --git a/namer/step_07_e_add_layout_builder/pubspec.yaml b/namer/step_07_e_add_layout_builder/pubspec.yaml index c83392b54d..224748d04a 100644 --- a/namer/step_07_e_add_layout_builder/pubspec.yaml +++ b/namer/step_07_e_add_layout_builder/pubspec.yaml @@ -6,7 +6,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev version: 0.0.1+1 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 dependencies: flutter: diff --git a/namer/step_07_e_add_layout_builder/test/widget_test.dart b/namer/step_07_e_add_layout_builder/test/widget_test.dart index 528bd2d6fd..e4176ea2b9 100644 --- a/namer/step_07_e_add_layout_builder/test/widget_test.dart +++ b/namer/step_07_e_add_layout_builder/test/widget_test.dart @@ -13,18 +13,15 @@ void main() { await tester.pumpWidget(const MyApp()); String findWordPair() { - final wordPairTextWidget = tester.widget(find.descendant( - of: find.byType(BigCard), - matching: find.byType(Text), - )); + final wordPairTextWidget = tester.widget( + find.descendant(of: find.byType(BigCard), matching: find.byType(Text)), + ); return wordPairTextWidget.data!; } // Tap several times and keep a list of word pair values. const tryCount = 5; - final pairs = [ - findWordPair(), - ]; + final pairs = [findWordPair()]; for (var i = 1; i < tryCount; i++) { await tester.tap(find.text('Next')); await tester.pumpAndSettle(); @@ -38,7 +35,8 @@ void main() { // We only fail this test when there is zero variance - all the // word pairs are the same, even though we clicked 'Next' several times. hasLength(greaterThan(1)), - reason: 'After clicking $tryCount times, ' + reason: + 'After clicking $tryCount times, ' 'the app should have generated at least two different word pairs. ' 'Instead, the app showed these: $pairs. ' 'That almost certainly means that the word pair is not being ' diff --git a/namer/step_08/lib/main.dart b/namer/step_08/lib/main.dart index 1a77df221f..df50cfcc8d 100644 --- a/namer/step_08/lib/main.dart +++ b/namer/step_08/lib/main.dart @@ -65,41 +65,43 @@ class _MyHomePageState extends State { throw UnimplementedError('no widget for $selectedIndex'); } - return LayoutBuilder(builder: (context, constraints) { - return Scaffold( - body: Row( - children: [ - SafeArea( - child: NavigationRail( - extended: constraints.maxWidth >= 600, - destinations: [ - NavigationRailDestination( - icon: Icon(Icons.home), - label: Text('Home'), - ), - NavigationRailDestination( - icon: Icon(Icons.favorite), - label: Text('Favorites'), - ), - ], - selectedIndex: selectedIndex, - onDestinationSelected: (value) { - setState(() { - selectedIndex = value; - }); - }, + return LayoutBuilder( + builder: (context, constraints) { + return Scaffold( + body: Row( + children: [ + SafeArea( + child: NavigationRail( + extended: constraints.maxWidth >= 600, + destinations: [ + NavigationRailDestination( + icon: Icon(Icons.home), + label: Text('Home'), + ), + NavigationRailDestination( + icon: Icon(Icons.favorite), + label: Text('Favorites'), + ), + ], + selectedIndex: selectedIndex, + onDestinationSelected: (value) { + setState(() { + selectedIndex = value; + }); + }, + ), ), - ), - Expanded( - child: Container( - color: Theme.of(context).colorScheme.primaryContainer, - child: page, + Expanded( + child: Container( + color: Theme.of(context).colorScheme.primaryContainer, + child: page, + ), ), - ), - ], - ), - ); - }); + ], + ), + ); + }, + ); } } @@ -148,10 +150,7 @@ class GeneratorPage extends StatelessWidget { } class BigCard extends StatelessWidget { - const BigCard({ - super.key, - required this.pair, - }); + const BigCard({super.key, required this.pair}); final WordPair pair; @@ -182,17 +181,17 @@ class FavoritesPage extends StatelessWidget { var appState = context.watch(); if (appState.favorites.isEmpty) { - return Center( - child: Text('No favorites yet.'), - ); + return Center(child: Text('No favorites yet.')); } return ListView( children: [ Padding( padding: const EdgeInsets.all(20), - child: Text('You have ' - '${appState.favorites.length} favorites:'), + child: Text( + 'You have ' + '${appState.favorites.length} favorites:', + ), ), for (var pair in appState.favorites) ListTile( diff --git a/namer/step_08/pubspec.yaml b/namer/step_08/pubspec.yaml index cade592614..3380c91553 100644 --- a/namer/step_08/pubspec.yaml +++ b/namer/step_08/pubspec.yaml @@ -6,7 +6,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev version: 0.0.1+1 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 dependencies: flutter: diff --git a/namer/step_08/test/widget_test.dart b/namer/step_08/test/widget_test.dart index 3a0f557bcc..b7f97317be 100644 --- a/namer/step_08/test/widget_test.dart +++ b/namer/step_08/test/widget_test.dart @@ -13,18 +13,15 @@ void main() { await tester.pumpWidget(const MyApp()); String findWordPair() { - final wordPairTextWidget = tester.widget(find.descendant( - of: find.byType(BigCard), - matching: find.byType(Text), - )); + final wordPairTextWidget = tester.widget( + find.descendant(of: find.byType(BigCard), matching: find.byType(Text)), + ); return wordPairTextWidget.data!; } // Tap several times and keep a list of word pair values. const tryCount = 5; - final pairs = [ - findWordPair(), - ]; + final pairs = [findWordPair()]; for (var i = 1; i < tryCount; i++) { await tester.tap(find.text('Next')); await tester.pumpAndSettle(); @@ -38,7 +35,8 @@ void main() { // We only fail this test when there is zero variance - all the // word pairs are the same, even though we clicked 'Next' several times. hasLength(greaterThan(1)), - reason: 'After clicking $tryCount times, ' + reason: + 'After clicking $tryCount times, ' 'the app should have generated at least two different word pairs. ' 'Instead, the app showed these: $pairs. ' 'That almost certainly means that the word pair is not being ' @@ -68,41 +66,47 @@ void main() { expect(findElevatedButtonByIcon(Icons.favorite), findsOneWidget); }); - testWidgets('Liked word pair shows up in Favorites', - (WidgetTester tester) async { + testWidgets('Liked word pair shows up in Favorites', ( + WidgetTester tester, + ) async { await tester.pumpWidget(const MyApp()); // Find the currently shown word pair. - final wordPairTextWidget = tester.widget(find.descendant( - of: find.byType(BigCard), - matching: find.byType(Text), - )); + final wordPairTextWidget = tester.widget( + find.descendant(of: find.byType(BigCard), matching: find.byType(Text)), + ); final current = wordPairTextWidget.data!; // Go to the Favorites page. - await tester.tap(find.descendant( - of: find.byType(NavigationRail), - matching: find.byIcon(Icons.favorite), - )); + await tester.tap( + find.descendant( + of: find.byType(NavigationRail), + matching: find.byIcon(Icons.favorite), + ), + ); await tester.pumpAndSettle(); // Not there yet. expect(find.text(current), findsNothing); // Go back to the Generator page. - await tester.tap(find.descendant( - of: find.byType(NavigationRail), - matching: find.byIcon(Icons.home), - )); + await tester.tap( + find.descendant( + of: find.byType(NavigationRail), + matching: find.byIcon(Icons.home), + ), + ); await tester.pumpAndSettle(); await tester.tap(find.text('Like')); // Go to Favorites page once again. - await tester.tap(find.descendant( - of: find.byType(NavigationRail), - matching: find.byIcon(Icons.favorite), - )); + await tester.tap( + find.descendant( + of: find.byType(NavigationRail), + matching: find.byIcon(Icons.favorite), + ), + ); await tester.pumpAndSettle(); // Should be there. diff --git a/next-gen-ui/step_01/lib/assets.dart b/next-gen-ui/step_01/lib/assets.dart index d0286c9a12..440dab3f61 100644 --- a/next-gen-ui/step_01/lib/assets.dart +++ b/next-gen-ui/step_01/lib/assets.dart @@ -32,9 +32,9 @@ class AssetPaths { typedef FragmentPrograms = ({FragmentProgram orb, FragmentProgram ui}); Future loadFragmentPrograms() async => ( - orb: (await _loadFragmentProgram(AssetPaths.orbShader)), - ui: (await _loadFragmentProgram(AssetPaths.uiShader)), - ); + orb: (await _loadFragmentProgram(AssetPaths.orbShader)), + ui: (await _loadFragmentProgram(AssetPaths.uiShader)), +); Future _loadFragmentProgram(String path) async { return (await FragmentProgram.fromAsset(path)); diff --git a/next-gen-ui/step_01/lib/common/reactive_widget.dart b/next-gen-ui/step_01/lib/common/reactive_widget.dart index c75aa491e9..f480d8b3eb 100644 --- a/next-gen-ui/step_01/lib/common/reactive_widget.dart +++ b/next-gen-ui/step_01/lib/common/reactive_widget.dart @@ -6,14 +6,11 @@ import 'package:flutter/material.dart'; import 'ticking_builder.dart'; -typedef ReactiveWidgetBuilder = Widget Function( - BuildContext context, double time, Size bounds); +typedef ReactiveWidgetBuilder = + Widget Function(BuildContext context, double time, Size bounds); class ReactiveWidget extends StatefulWidget { - const ReactiveWidget({ - super.key, - required this.builder, - }); + const ReactiveWidget({super.key, required this.builder}); final ReactiveWidgetBuilder builder; @override State createState() => _ReactiveWidgetState(); diff --git a/next-gen-ui/step_01/lib/common/shader_effect.dart b/next-gen-ui/step_01/lib/common/shader_effect.dart index 69bd75f7d9..7e6ebe8bdf 100644 --- a/next-gen-ui/step_01/lib/common/shader_effect.dart +++ b/next-gen-ui/step_01/lib/common/shader_effect.dart @@ -32,11 +32,8 @@ class ShaderEffect extends Effect { this.shader, this.update, ShaderLayer? layer, - }) : layer = layer ?? ShaderLayer.replace, - super( - begin: 0, - end: 1, - ); + }) : layer = layer ?? ShaderLayer.replace, + super(begin: 0, end: 1); final ui.FragmentShader? shader; final ShaderUpdateCallback? update; @@ -91,22 +88,28 @@ extension ShaderEffectExtensions on AnimateManager { ui.FragmentShader? shader, ShaderUpdateCallback? update, ShaderLayer? layer, - }) => - addEffect(ShaderEffect( - delay: delay, - duration: duration, - curve: curve, - shader: shader, - update: update, - layer: layer, - )); + }) => addEffect( + ShaderEffect( + delay: delay, + duration: duration, + curve: curve, + shader: shader, + update: update, + layer: layer, + ), + ); } enum ShaderLayer { foreground, background, replace } /// Function signature for [ShaderEffect] update handlers. -typedef ShaderUpdateCallback = EdgeInsets? Function( - ui.FragmentShader shader, double value, Size size, ui.Image image); +typedef ShaderUpdateCallback = + EdgeInsets? Function( + ui.FragmentShader shader, + double value, + Size size, + ui.Image image, + ); /******************************************************************************/ // TODO: add this as a dependency instead of copying it in once it is stable: @@ -117,11 +120,8 @@ typedef ShaderUpdateCallback = EdgeInsets? Function( // found in the LICENSE file. /// A callback for the [AnimatedSamplerBuilder] widget. -typedef AnimatedSamplerBuilder = void Function( - ui.Image image, - Size size, - ui.Canvas canvas, -); +typedef AnimatedSamplerBuilder = + void Function(ui.Image image, Size size, ui.Canvas canvas); /// A widget that allows access to a snapshot of the child widgets for painting /// with a sampler applied to a [FragmentProgram]. @@ -181,11 +181,7 @@ class AnimatedSampler extends StatelessWidget { @override Widget build(BuildContext context) { - return _ShaderSamplerBuilder( - builder, - enabled: enabled, - child: child, - ); + return _ShaderSamplerBuilder(builder, enabled: enabled, child: child); } } @@ -210,7 +206,9 @@ class _ShaderSamplerBuilder extends SingleChildRenderObjectWidget { @override void updateRenderObject( - BuildContext context, covariant RenderObject renderObject) { + BuildContext context, + covariant RenderObject renderObject, + ) { (renderObject as _RenderShaderSamplerBuilderWidget) ..devicePixelRatio = MediaQuery.of(context).devicePixelRatio ..builder = builder @@ -226,13 +224,14 @@ class _RenderShaderSamplerBuilderWidget extends RenderProxyBox { required double devicePixelRatio, required AnimatedSamplerBuilder builder, required bool enabled, - }) : _devicePixelRatio = devicePixelRatio, - _builder = builder, - _enabled = enabled; + }) : _devicePixelRatio = devicePixelRatio, + _builder = builder, + _enabled = enabled; @override - OffsetLayer updateCompositedLayer( - {required covariant _ShaderSamplerBuilderLayer? oldLayer}) { + OffsetLayer updateCompositedLayer({ + required covariant _ShaderSamplerBuilderLayer? oldLayer, + }) { final _ShaderSamplerBuilderLayer layer = oldLayer ?? _ShaderSamplerBuilderLayer(builder); layer @@ -328,24 +327,24 @@ class _ShaderSamplerBuilderLayer extends OffsetLayer { ui.Image _buildChildScene(Rect bounds, double pixelRatio) { final ui.SceneBuilder builder = ui.SceneBuilder(); - final Matrix4 transform = - Matrix4.diagonal3Values(pixelRatio, pixelRatio, 1); + final Matrix4 transform = Matrix4.diagonal3Values( + pixelRatio, + pixelRatio, + 1, + ); builder.pushTransform(transform.storage); addChildrenToScene(builder); builder.pop(); return builder.build().toImageSync( - (pixelRatio * bounds.width).ceil(), - (pixelRatio * bounds.height).ceil(), - ); + (pixelRatio * bounds.width).ceil(), + (pixelRatio * bounds.height).ceil(), + ); } @override void addToScene(ui.SceneBuilder builder) { if (size.isEmpty) return; - final ui.Image image = _buildChildScene( - offset & size, - devicePixelRatio, - ); + final ui.Image image = _buildChildScene(offset & size, devicePixelRatio); final ui.PictureRecorder pictureRecorder = ui.PictureRecorder(); final Canvas canvas = Canvas(pictureRecorder); try { diff --git a/next-gen-ui/step_01/lib/common/ui_scaler.dart b/next-gen-ui/step_01/lib/common/ui_scaler.dart index 07c3287650..e7dbb9be42 100644 --- a/next-gen-ui/step_01/lib/common/ui_scaler.dart +++ b/next-gen-ui/step_01/lib/common/ui_scaler.dart @@ -22,10 +22,6 @@ class UiScaler extends StatelessWidget { Widget build(BuildContext context) { final screenSize = MediaQuery.of(context).size; final double scale = min(screenSize.height / referenceHeight, 1.0); - return Transform.scale( - scale: scale, - alignment: alignment, - child: child, - ); + return Transform.scale(scale: scale, alignment: alignment, child: child); } } diff --git a/next-gen-ui/step_01/lib/orb_shader/orb_shader_config.dart b/next-gen-ui/step_01/lib/orb_shader/orb_shader_config.dart index ef975cccf8..a038e0be63 100644 --- a/next-gen-ui/step_01/lib/orb_shader/orb_shader_config.dart +++ b/next-gen-ui/step_01/lib/orb_shader/orb_shader_config.dart @@ -22,14 +22,14 @@ class OrbShaderConfig { this.lightOffsetX = 0, this.lightOffsetY = 0.1, this.lightOffsetZ = -0.66, - }) : assert(zoom >= 0 && zoom <= 1), - assert(exposure >= 0), - assert(metalness >= 0 && metalness <= 1), - assert(lightRadius >= 0), - assert(lightBrightness >= 1), - assert(ior >= 0 && ior <= 2), - assert(lightAttenuation >= 0 && lightAttenuation <= 1), - assert(ambientLightBrightness >= 0); + }) : assert(zoom >= 0 && zoom <= 1), + assert(exposure >= 0), + assert(metalness >= 0 && metalness <= 1), + assert(lightRadius >= 0), + assert(lightBrightness >= 1), + assert(ior >= 0 && ior <= 2), + assert(lightAttenuation >= 0 && lightAttenuation <= 1), + assert(ambientLightBrightness >= 0); final double zoom; diff --git a/next-gen-ui/step_01/lib/orb_shader/orb_shader_painter.dart b/next-gen-ui/step_01/lib/orb_shader/orb_shader_painter.dart index 399c20ab7e..1e04cc0df8 100644 --- a/next-gen-ui/step_01/lib/orb_shader/orb_shader_painter.dart +++ b/next-gen-ui/step_01/lib/orb_shader/orb_shader_painter.dart @@ -30,11 +30,13 @@ class OrbShaderPainter extends CustomPainter { v64.Vector3 colorToVector3(Color c) => v64.Vector3(c.r, c.g, c.b); - v64.Vector3 lightLumP = colorToVector3(config.lightColor).normalized() * + v64.Vector3 lightLumP = + colorToVector3(config.lightColor).normalized() * max(0.0, config.lightBrightness); v64.Vector3 albedo = colorToVector3(config.materialColor); - v64.Vector3 ambientLight = colorToVector3(config.ambientLightColor) * + v64.Vector3 ambientLight = + colorToVector3(config.ambientLightColor) * max(0.0, config.ambientLightBrightness); shader.setFloat(0, size.width); diff --git a/next-gen-ui/step_01/lib/orb_shader/orb_shader_widget.dart b/next-gen-ui/step_01/lib/orb_shader/orb_shader_widget.dart index 573b68afea..4187e7ced2 100644 --- a/next-gen-ui/step_01/lib/orb_shader/orb_shader_widget.dart +++ b/next-gen-ui/step_01/lib/orb_shader/orb_shader_widget.dart @@ -35,72 +35,82 @@ class OrbShaderWidget extends StatefulWidget { class OrbShaderWidgetState extends State with SingleTickerProviderStateMixin { - final _heartbeatSequence = TweenSequence( - [ - TweenSequenceItem(tween: ConstantTween(0), weight: 40), - TweenSequenceItem( - tween: Tween(begin: 0.0, end: 1.0) - .chain(CurveTween(curve: Curves.easeInOutCubic)), - weight: 8), - TweenSequenceItem( - tween: Tween(begin: 1.0, end: 0.2) - .chain(CurveTween(curve: Curves.easeInOutCubic)), - weight: 12), - TweenSequenceItem( - tween: Tween(begin: 0.2, end: 0.8) - .chain(CurveTween(curve: Curves.easeInOutCubic)), - weight: 6), - TweenSequenceItem( - tween: Tween(begin: 0.8, end: 0.0) - .chain(CurveTween(curve: Curves.easeInOutCubic)), - weight: 10), - ], - ); + final _heartbeatSequence = TweenSequence([ + TweenSequenceItem(tween: ConstantTween(0), weight: 40), + TweenSequenceItem( + tween: Tween( + begin: 0.0, + end: 1.0, + ).chain(CurveTween(curve: Curves.easeInOutCubic)), + weight: 8, + ), + TweenSequenceItem( + tween: Tween( + begin: 1.0, + end: 0.2, + ).chain(CurveTween(curve: Curves.easeInOutCubic)), + weight: 12, + ), + TweenSequenceItem( + tween: Tween( + begin: 0.2, + end: 0.8, + ).chain(CurveTween(curve: Curves.easeInOutCubic)), + weight: 6, + ), + TweenSequenceItem( + tween: Tween( + begin: 0.8, + end: 0.0, + ).chain(CurveTween(curve: Curves.easeInOutCubic)), + weight: 10, + ), + ]); - late final _heartbeatAnim = - AnimationController(vsync: this, duration: 3000.ms)..repeat(); + late final _heartbeatAnim = AnimationController( + vsync: this, + duration: 3000.ms, + )..repeat(); @override Widget build(BuildContext context) => Consumer( - builder: (context, fragmentPrograms, _) { - if (fragmentPrograms == null) return const SizedBox.expand(); - return ListenableBuilder( - listenable: _heartbeatAnim, - builder: (_, __) { - final heartbeatEnergy = - _heartbeatAnim.drive(_heartbeatSequence).value; - return TweenAnimationBuilder( - tween: Tween( - begin: widget.minEnergy, end: widget.minEnergy), - duration: 300.ms, - curve: Curves.easeOutCubic, - builder: (context, minEnergy, child) { - return ReactiveWidget( - builder: (context, time, size) { - double energyLevel = 0; - if (size.shortestSide != 0) { - final d = (Offset(size.width, size.height) / 2 - - widget.mousePos) + builder: (context, fragmentPrograms, _) { + if (fragmentPrograms == null) return const SizedBox.expand(); + return ListenableBuilder( + listenable: _heartbeatAnim, + builder: (_, __) { + final heartbeatEnergy = + _heartbeatAnim.drive(_heartbeatSequence).value; + return TweenAnimationBuilder( + tween: Tween( + begin: widget.minEnergy, + end: widget.minEnergy, + ), + duration: 300.ms, + curve: Curves.easeOutCubic, + builder: (context, minEnergy, child) { + return ReactiveWidget( + builder: (context, time, size) { + double energyLevel = 0; + if (size.shortestSide != 0) { + final d = + (Offset(size.width, size.height) / 2 - widget.mousePos) .distance; - final hitSize = size.shortestSide * .5; - energyLevel = 1 - min(1, (d / hitSize)); - scheduleMicrotask( - () => widget.onUpdate?.call(energyLevel)); - } - energyLevel += - (1.3 - energyLevel) * heartbeatEnergy * 0.1; - energyLevel = lerpDouble(minEnergy, 1, energyLevel)!; - return CustomPaint( - size: size, - painter: OrbShaderPainter( - fragmentPrograms.orb.fragmentShader(), - config: widget.config, - time: time, - mousePos: widget.mousePos, - energy: energyLevel, - ), - ); - }, + final hitSize = size.shortestSide * .5; + energyLevel = 1 - min(1, (d / hitSize)); + scheduleMicrotask(() => widget.onUpdate?.call(energyLevel)); + } + energyLevel += (1.3 - energyLevel) * heartbeatEnergy * 0.1; + energyLevel = lerpDouble(minEnergy, 1, energyLevel)!; + return CustomPaint( + size: size, + painter: OrbShaderPainter( + fragmentPrograms.orb.fragmentShader(), + config: widget.config, + time: time, + mousePos: widget.mousePos, + energy: energyLevel, + ), ); }, ); @@ -108,4 +118,6 @@ class OrbShaderWidgetState extends State ); }, ); + }, + ); } diff --git a/next-gen-ui/step_01/lib/styles.dart b/next-gen-ui/step_01/lib/styles.dart index 1e449fff3a..fb5083c6a8 100644 --- a/next-gen-ui/step_01/lib/styles.dart +++ b/next-gen-ui/step_01/lib/styles.dart @@ -8,16 +8,19 @@ class TextStyles { static const _font1 = TextStyle(fontFamily: 'Exo', color: Colors.white); static TextStyle get h1 => _font1.copyWith( - fontSize: 75, letterSpacing: 35, fontWeight: FontWeight.w700); + fontSize: 75, + letterSpacing: 35, + fontWeight: FontWeight.w700, + ); static TextStyle get h2 => h1.copyWith(fontSize: 40, letterSpacing: 0); static TextStyle get h3 => h1.copyWith(fontSize: 24, letterSpacing: 20, fontWeight: FontWeight.w400); static TextStyle get body => _font1.copyWith(fontSize: 16); static TextStyle get btn => _font1.copyWith( - fontSize: 16, - fontWeight: FontWeight.bold, - letterSpacing: 10, - ); + fontSize: 16, + fontWeight: FontWeight.bold, + letterSpacing: 10, + ); } abstract class AppColors { diff --git a/next-gen-ui/step_01/pubspec.yaml b/next-gen-ui/step_01/pubspec.yaml index dd3eb24959..7fd82808a1 100644 --- a/next-gen-ui/step_01/pubspec.yaml +++ b/next-gen-ui/step_01/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: 'none' version: 0.1.0 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 dependencies: flutter: diff --git a/next-gen-ui/step_02_a/lib/assets.dart b/next-gen-ui/step_02_a/lib/assets.dart index d0286c9a12..440dab3f61 100644 --- a/next-gen-ui/step_02_a/lib/assets.dart +++ b/next-gen-ui/step_02_a/lib/assets.dart @@ -32,9 +32,9 @@ class AssetPaths { typedef FragmentPrograms = ({FragmentProgram orb, FragmentProgram ui}); Future loadFragmentPrograms() async => ( - orb: (await _loadFragmentProgram(AssetPaths.orbShader)), - ui: (await _loadFragmentProgram(AssetPaths.uiShader)), - ); + orb: (await _loadFragmentProgram(AssetPaths.orbShader)), + ui: (await _loadFragmentProgram(AssetPaths.uiShader)), +); Future _loadFragmentProgram(String path) async { return (await FragmentProgram.fromAsset(path)); diff --git a/next-gen-ui/step_02_a/lib/common/reactive_widget.dart b/next-gen-ui/step_02_a/lib/common/reactive_widget.dart index c75aa491e9..f480d8b3eb 100644 --- a/next-gen-ui/step_02_a/lib/common/reactive_widget.dart +++ b/next-gen-ui/step_02_a/lib/common/reactive_widget.dart @@ -6,14 +6,11 @@ import 'package:flutter/material.dart'; import 'ticking_builder.dart'; -typedef ReactiveWidgetBuilder = Widget Function( - BuildContext context, double time, Size bounds); +typedef ReactiveWidgetBuilder = + Widget Function(BuildContext context, double time, Size bounds); class ReactiveWidget extends StatefulWidget { - const ReactiveWidget({ - super.key, - required this.builder, - }); + const ReactiveWidget({super.key, required this.builder}); final ReactiveWidgetBuilder builder; @override State createState() => _ReactiveWidgetState(); diff --git a/next-gen-ui/step_02_a/lib/common/shader_effect.dart b/next-gen-ui/step_02_a/lib/common/shader_effect.dart index 69bd75f7d9..7e6ebe8bdf 100644 --- a/next-gen-ui/step_02_a/lib/common/shader_effect.dart +++ b/next-gen-ui/step_02_a/lib/common/shader_effect.dart @@ -32,11 +32,8 @@ class ShaderEffect extends Effect { this.shader, this.update, ShaderLayer? layer, - }) : layer = layer ?? ShaderLayer.replace, - super( - begin: 0, - end: 1, - ); + }) : layer = layer ?? ShaderLayer.replace, + super(begin: 0, end: 1); final ui.FragmentShader? shader; final ShaderUpdateCallback? update; @@ -91,22 +88,28 @@ extension ShaderEffectExtensions on AnimateManager { ui.FragmentShader? shader, ShaderUpdateCallback? update, ShaderLayer? layer, - }) => - addEffect(ShaderEffect( - delay: delay, - duration: duration, - curve: curve, - shader: shader, - update: update, - layer: layer, - )); + }) => addEffect( + ShaderEffect( + delay: delay, + duration: duration, + curve: curve, + shader: shader, + update: update, + layer: layer, + ), + ); } enum ShaderLayer { foreground, background, replace } /// Function signature for [ShaderEffect] update handlers. -typedef ShaderUpdateCallback = EdgeInsets? Function( - ui.FragmentShader shader, double value, Size size, ui.Image image); +typedef ShaderUpdateCallback = + EdgeInsets? Function( + ui.FragmentShader shader, + double value, + Size size, + ui.Image image, + ); /******************************************************************************/ // TODO: add this as a dependency instead of copying it in once it is stable: @@ -117,11 +120,8 @@ typedef ShaderUpdateCallback = EdgeInsets? Function( // found in the LICENSE file. /// A callback for the [AnimatedSamplerBuilder] widget. -typedef AnimatedSamplerBuilder = void Function( - ui.Image image, - Size size, - ui.Canvas canvas, -); +typedef AnimatedSamplerBuilder = + void Function(ui.Image image, Size size, ui.Canvas canvas); /// A widget that allows access to a snapshot of the child widgets for painting /// with a sampler applied to a [FragmentProgram]. @@ -181,11 +181,7 @@ class AnimatedSampler extends StatelessWidget { @override Widget build(BuildContext context) { - return _ShaderSamplerBuilder( - builder, - enabled: enabled, - child: child, - ); + return _ShaderSamplerBuilder(builder, enabled: enabled, child: child); } } @@ -210,7 +206,9 @@ class _ShaderSamplerBuilder extends SingleChildRenderObjectWidget { @override void updateRenderObject( - BuildContext context, covariant RenderObject renderObject) { + BuildContext context, + covariant RenderObject renderObject, + ) { (renderObject as _RenderShaderSamplerBuilderWidget) ..devicePixelRatio = MediaQuery.of(context).devicePixelRatio ..builder = builder @@ -226,13 +224,14 @@ class _RenderShaderSamplerBuilderWidget extends RenderProxyBox { required double devicePixelRatio, required AnimatedSamplerBuilder builder, required bool enabled, - }) : _devicePixelRatio = devicePixelRatio, - _builder = builder, - _enabled = enabled; + }) : _devicePixelRatio = devicePixelRatio, + _builder = builder, + _enabled = enabled; @override - OffsetLayer updateCompositedLayer( - {required covariant _ShaderSamplerBuilderLayer? oldLayer}) { + OffsetLayer updateCompositedLayer({ + required covariant _ShaderSamplerBuilderLayer? oldLayer, + }) { final _ShaderSamplerBuilderLayer layer = oldLayer ?? _ShaderSamplerBuilderLayer(builder); layer @@ -328,24 +327,24 @@ class _ShaderSamplerBuilderLayer extends OffsetLayer { ui.Image _buildChildScene(Rect bounds, double pixelRatio) { final ui.SceneBuilder builder = ui.SceneBuilder(); - final Matrix4 transform = - Matrix4.diagonal3Values(pixelRatio, pixelRatio, 1); + final Matrix4 transform = Matrix4.diagonal3Values( + pixelRatio, + pixelRatio, + 1, + ); builder.pushTransform(transform.storage); addChildrenToScene(builder); builder.pop(); return builder.build().toImageSync( - (pixelRatio * bounds.width).ceil(), - (pixelRatio * bounds.height).ceil(), - ); + (pixelRatio * bounds.width).ceil(), + (pixelRatio * bounds.height).ceil(), + ); } @override void addToScene(ui.SceneBuilder builder) { if (size.isEmpty) return; - final ui.Image image = _buildChildScene( - offset & size, - devicePixelRatio, - ); + final ui.Image image = _buildChildScene(offset & size, devicePixelRatio); final ui.PictureRecorder pictureRecorder = ui.PictureRecorder(); final Canvas canvas = Canvas(pictureRecorder); try { diff --git a/next-gen-ui/step_02_a/lib/common/ui_scaler.dart b/next-gen-ui/step_02_a/lib/common/ui_scaler.dart index 07c3287650..e7dbb9be42 100644 --- a/next-gen-ui/step_02_a/lib/common/ui_scaler.dart +++ b/next-gen-ui/step_02_a/lib/common/ui_scaler.dart @@ -22,10 +22,6 @@ class UiScaler extends StatelessWidget { Widget build(BuildContext context) { final screenSize = MediaQuery.of(context).size; final double scale = min(screenSize.height / referenceHeight, 1.0); - return Transform.scale( - scale: scale, - alignment: alignment, - child: child, - ); + return Transform.scale(scale: scale, alignment: alignment, child: child); } } diff --git a/next-gen-ui/step_02_a/lib/orb_shader/orb_shader_config.dart b/next-gen-ui/step_02_a/lib/orb_shader/orb_shader_config.dart index ef975cccf8..a038e0be63 100644 --- a/next-gen-ui/step_02_a/lib/orb_shader/orb_shader_config.dart +++ b/next-gen-ui/step_02_a/lib/orb_shader/orb_shader_config.dart @@ -22,14 +22,14 @@ class OrbShaderConfig { this.lightOffsetX = 0, this.lightOffsetY = 0.1, this.lightOffsetZ = -0.66, - }) : assert(zoom >= 0 && zoom <= 1), - assert(exposure >= 0), - assert(metalness >= 0 && metalness <= 1), - assert(lightRadius >= 0), - assert(lightBrightness >= 1), - assert(ior >= 0 && ior <= 2), - assert(lightAttenuation >= 0 && lightAttenuation <= 1), - assert(ambientLightBrightness >= 0); + }) : assert(zoom >= 0 && zoom <= 1), + assert(exposure >= 0), + assert(metalness >= 0 && metalness <= 1), + assert(lightRadius >= 0), + assert(lightBrightness >= 1), + assert(ior >= 0 && ior <= 2), + assert(lightAttenuation >= 0 && lightAttenuation <= 1), + assert(ambientLightBrightness >= 0); final double zoom; diff --git a/next-gen-ui/step_02_a/lib/orb_shader/orb_shader_painter.dart b/next-gen-ui/step_02_a/lib/orb_shader/orb_shader_painter.dart index 399c20ab7e..1e04cc0df8 100644 --- a/next-gen-ui/step_02_a/lib/orb_shader/orb_shader_painter.dart +++ b/next-gen-ui/step_02_a/lib/orb_shader/orb_shader_painter.dart @@ -30,11 +30,13 @@ class OrbShaderPainter extends CustomPainter { v64.Vector3 colorToVector3(Color c) => v64.Vector3(c.r, c.g, c.b); - v64.Vector3 lightLumP = colorToVector3(config.lightColor).normalized() * + v64.Vector3 lightLumP = + colorToVector3(config.lightColor).normalized() * max(0.0, config.lightBrightness); v64.Vector3 albedo = colorToVector3(config.materialColor); - v64.Vector3 ambientLight = colorToVector3(config.ambientLightColor) * + v64.Vector3 ambientLight = + colorToVector3(config.ambientLightColor) * max(0.0, config.ambientLightBrightness); shader.setFloat(0, size.width); diff --git a/next-gen-ui/step_02_a/lib/orb_shader/orb_shader_widget.dart b/next-gen-ui/step_02_a/lib/orb_shader/orb_shader_widget.dart index 573b68afea..4187e7ced2 100644 --- a/next-gen-ui/step_02_a/lib/orb_shader/orb_shader_widget.dart +++ b/next-gen-ui/step_02_a/lib/orb_shader/orb_shader_widget.dart @@ -35,72 +35,82 @@ class OrbShaderWidget extends StatefulWidget { class OrbShaderWidgetState extends State with SingleTickerProviderStateMixin { - final _heartbeatSequence = TweenSequence( - [ - TweenSequenceItem(tween: ConstantTween(0), weight: 40), - TweenSequenceItem( - tween: Tween(begin: 0.0, end: 1.0) - .chain(CurveTween(curve: Curves.easeInOutCubic)), - weight: 8), - TweenSequenceItem( - tween: Tween(begin: 1.0, end: 0.2) - .chain(CurveTween(curve: Curves.easeInOutCubic)), - weight: 12), - TweenSequenceItem( - tween: Tween(begin: 0.2, end: 0.8) - .chain(CurveTween(curve: Curves.easeInOutCubic)), - weight: 6), - TweenSequenceItem( - tween: Tween(begin: 0.8, end: 0.0) - .chain(CurveTween(curve: Curves.easeInOutCubic)), - weight: 10), - ], - ); + final _heartbeatSequence = TweenSequence([ + TweenSequenceItem(tween: ConstantTween(0), weight: 40), + TweenSequenceItem( + tween: Tween( + begin: 0.0, + end: 1.0, + ).chain(CurveTween(curve: Curves.easeInOutCubic)), + weight: 8, + ), + TweenSequenceItem( + tween: Tween( + begin: 1.0, + end: 0.2, + ).chain(CurveTween(curve: Curves.easeInOutCubic)), + weight: 12, + ), + TweenSequenceItem( + tween: Tween( + begin: 0.2, + end: 0.8, + ).chain(CurveTween(curve: Curves.easeInOutCubic)), + weight: 6, + ), + TweenSequenceItem( + tween: Tween( + begin: 0.8, + end: 0.0, + ).chain(CurveTween(curve: Curves.easeInOutCubic)), + weight: 10, + ), + ]); - late final _heartbeatAnim = - AnimationController(vsync: this, duration: 3000.ms)..repeat(); + late final _heartbeatAnim = AnimationController( + vsync: this, + duration: 3000.ms, + )..repeat(); @override Widget build(BuildContext context) => Consumer( - builder: (context, fragmentPrograms, _) { - if (fragmentPrograms == null) return const SizedBox.expand(); - return ListenableBuilder( - listenable: _heartbeatAnim, - builder: (_, __) { - final heartbeatEnergy = - _heartbeatAnim.drive(_heartbeatSequence).value; - return TweenAnimationBuilder( - tween: Tween( - begin: widget.minEnergy, end: widget.minEnergy), - duration: 300.ms, - curve: Curves.easeOutCubic, - builder: (context, minEnergy, child) { - return ReactiveWidget( - builder: (context, time, size) { - double energyLevel = 0; - if (size.shortestSide != 0) { - final d = (Offset(size.width, size.height) / 2 - - widget.mousePos) + builder: (context, fragmentPrograms, _) { + if (fragmentPrograms == null) return const SizedBox.expand(); + return ListenableBuilder( + listenable: _heartbeatAnim, + builder: (_, __) { + final heartbeatEnergy = + _heartbeatAnim.drive(_heartbeatSequence).value; + return TweenAnimationBuilder( + tween: Tween( + begin: widget.minEnergy, + end: widget.minEnergy, + ), + duration: 300.ms, + curve: Curves.easeOutCubic, + builder: (context, minEnergy, child) { + return ReactiveWidget( + builder: (context, time, size) { + double energyLevel = 0; + if (size.shortestSide != 0) { + final d = + (Offset(size.width, size.height) / 2 - widget.mousePos) .distance; - final hitSize = size.shortestSide * .5; - energyLevel = 1 - min(1, (d / hitSize)); - scheduleMicrotask( - () => widget.onUpdate?.call(energyLevel)); - } - energyLevel += - (1.3 - energyLevel) * heartbeatEnergy * 0.1; - energyLevel = lerpDouble(minEnergy, 1, energyLevel)!; - return CustomPaint( - size: size, - painter: OrbShaderPainter( - fragmentPrograms.orb.fragmentShader(), - config: widget.config, - time: time, - mousePos: widget.mousePos, - energy: energyLevel, - ), - ); - }, + final hitSize = size.shortestSide * .5; + energyLevel = 1 - min(1, (d / hitSize)); + scheduleMicrotask(() => widget.onUpdate?.call(energyLevel)); + } + energyLevel += (1.3 - energyLevel) * heartbeatEnergy * 0.1; + energyLevel = lerpDouble(minEnergy, 1, energyLevel)!; + return CustomPaint( + size: size, + painter: OrbShaderPainter( + fragmentPrograms.orb.fragmentShader(), + config: widget.config, + time: time, + mousePos: widget.mousePos, + energy: energyLevel, + ), ); }, ); @@ -108,4 +118,6 @@ class OrbShaderWidgetState extends State ); }, ); + }, + ); } diff --git a/next-gen-ui/step_02_a/lib/styles.dart b/next-gen-ui/step_02_a/lib/styles.dart index 1e449fff3a..fb5083c6a8 100644 --- a/next-gen-ui/step_02_a/lib/styles.dart +++ b/next-gen-ui/step_02_a/lib/styles.dart @@ -8,16 +8,19 @@ class TextStyles { static const _font1 = TextStyle(fontFamily: 'Exo', color: Colors.white); static TextStyle get h1 => _font1.copyWith( - fontSize: 75, letterSpacing: 35, fontWeight: FontWeight.w700); + fontSize: 75, + letterSpacing: 35, + fontWeight: FontWeight.w700, + ); static TextStyle get h2 => h1.copyWith(fontSize: 40, letterSpacing: 0); static TextStyle get h3 => h1.copyWith(fontSize: 24, letterSpacing: 20, fontWeight: FontWeight.w400); static TextStyle get body => _font1.copyWith(fontSize: 16); static TextStyle get btn => _font1.copyWith( - fontSize: 16, - fontWeight: FontWeight.bold, - letterSpacing: 10, - ); + fontSize: 16, + fontWeight: FontWeight.bold, + letterSpacing: 10, + ); } abstract class AppColors { diff --git a/next-gen-ui/step_02_a/pubspec.yaml b/next-gen-ui/step_02_a/pubspec.yaml index dd3eb24959..7fd82808a1 100644 --- a/next-gen-ui/step_02_a/pubspec.yaml +++ b/next-gen-ui/step_02_a/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: 'none' version: 0.1.0 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 dependencies: flutter: diff --git a/next-gen-ui/step_02_b/lib/assets.dart b/next-gen-ui/step_02_b/lib/assets.dart index d0286c9a12..440dab3f61 100644 --- a/next-gen-ui/step_02_b/lib/assets.dart +++ b/next-gen-ui/step_02_b/lib/assets.dart @@ -32,9 +32,9 @@ class AssetPaths { typedef FragmentPrograms = ({FragmentProgram orb, FragmentProgram ui}); Future loadFragmentPrograms() async => ( - orb: (await _loadFragmentProgram(AssetPaths.orbShader)), - ui: (await _loadFragmentProgram(AssetPaths.uiShader)), - ); + orb: (await _loadFragmentProgram(AssetPaths.orbShader)), + ui: (await _loadFragmentProgram(AssetPaths.uiShader)), +); Future _loadFragmentProgram(String path) async { return (await FragmentProgram.fromAsset(path)); diff --git a/next-gen-ui/step_02_b/lib/common/reactive_widget.dart b/next-gen-ui/step_02_b/lib/common/reactive_widget.dart index c75aa491e9..f480d8b3eb 100644 --- a/next-gen-ui/step_02_b/lib/common/reactive_widget.dart +++ b/next-gen-ui/step_02_b/lib/common/reactive_widget.dart @@ -6,14 +6,11 @@ import 'package:flutter/material.dart'; import 'ticking_builder.dart'; -typedef ReactiveWidgetBuilder = Widget Function( - BuildContext context, double time, Size bounds); +typedef ReactiveWidgetBuilder = + Widget Function(BuildContext context, double time, Size bounds); class ReactiveWidget extends StatefulWidget { - const ReactiveWidget({ - super.key, - required this.builder, - }); + const ReactiveWidget({super.key, required this.builder}); final ReactiveWidgetBuilder builder; @override State createState() => _ReactiveWidgetState(); diff --git a/next-gen-ui/step_02_b/lib/common/shader_effect.dart b/next-gen-ui/step_02_b/lib/common/shader_effect.dart index 69bd75f7d9..7e6ebe8bdf 100644 --- a/next-gen-ui/step_02_b/lib/common/shader_effect.dart +++ b/next-gen-ui/step_02_b/lib/common/shader_effect.dart @@ -32,11 +32,8 @@ class ShaderEffect extends Effect { this.shader, this.update, ShaderLayer? layer, - }) : layer = layer ?? ShaderLayer.replace, - super( - begin: 0, - end: 1, - ); + }) : layer = layer ?? ShaderLayer.replace, + super(begin: 0, end: 1); final ui.FragmentShader? shader; final ShaderUpdateCallback? update; @@ -91,22 +88,28 @@ extension ShaderEffectExtensions on AnimateManager { ui.FragmentShader? shader, ShaderUpdateCallback? update, ShaderLayer? layer, - }) => - addEffect(ShaderEffect( - delay: delay, - duration: duration, - curve: curve, - shader: shader, - update: update, - layer: layer, - )); + }) => addEffect( + ShaderEffect( + delay: delay, + duration: duration, + curve: curve, + shader: shader, + update: update, + layer: layer, + ), + ); } enum ShaderLayer { foreground, background, replace } /// Function signature for [ShaderEffect] update handlers. -typedef ShaderUpdateCallback = EdgeInsets? Function( - ui.FragmentShader shader, double value, Size size, ui.Image image); +typedef ShaderUpdateCallback = + EdgeInsets? Function( + ui.FragmentShader shader, + double value, + Size size, + ui.Image image, + ); /******************************************************************************/ // TODO: add this as a dependency instead of copying it in once it is stable: @@ -117,11 +120,8 @@ typedef ShaderUpdateCallback = EdgeInsets? Function( // found in the LICENSE file. /// A callback for the [AnimatedSamplerBuilder] widget. -typedef AnimatedSamplerBuilder = void Function( - ui.Image image, - Size size, - ui.Canvas canvas, -); +typedef AnimatedSamplerBuilder = + void Function(ui.Image image, Size size, ui.Canvas canvas); /// A widget that allows access to a snapshot of the child widgets for painting /// with a sampler applied to a [FragmentProgram]. @@ -181,11 +181,7 @@ class AnimatedSampler extends StatelessWidget { @override Widget build(BuildContext context) { - return _ShaderSamplerBuilder( - builder, - enabled: enabled, - child: child, - ); + return _ShaderSamplerBuilder(builder, enabled: enabled, child: child); } } @@ -210,7 +206,9 @@ class _ShaderSamplerBuilder extends SingleChildRenderObjectWidget { @override void updateRenderObject( - BuildContext context, covariant RenderObject renderObject) { + BuildContext context, + covariant RenderObject renderObject, + ) { (renderObject as _RenderShaderSamplerBuilderWidget) ..devicePixelRatio = MediaQuery.of(context).devicePixelRatio ..builder = builder @@ -226,13 +224,14 @@ class _RenderShaderSamplerBuilderWidget extends RenderProxyBox { required double devicePixelRatio, required AnimatedSamplerBuilder builder, required bool enabled, - }) : _devicePixelRatio = devicePixelRatio, - _builder = builder, - _enabled = enabled; + }) : _devicePixelRatio = devicePixelRatio, + _builder = builder, + _enabled = enabled; @override - OffsetLayer updateCompositedLayer( - {required covariant _ShaderSamplerBuilderLayer? oldLayer}) { + OffsetLayer updateCompositedLayer({ + required covariant _ShaderSamplerBuilderLayer? oldLayer, + }) { final _ShaderSamplerBuilderLayer layer = oldLayer ?? _ShaderSamplerBuilderLayer(builder); layer @@ -328,24 +327,24 @@ class _ShaderSamplerBuilderLayer extends OffsetLayer { ui.Image _buildChildScene(Rect bounds, double pixelRatio) { final ui.SceneBuilder builder = ui.SceneBuilder(); - final Matrix4 transform = - Matrix4.diagonal3Values(pixelRatio, pixelRatio, 1); + final Matrix4 transform = Matrix4.diagonal3Values( + pixelRatio, + pixelRatio, + 1, + ); builder.pushTransform(transform.storage); addChildrenToScene(builder); builder.pop(); return builder.build().toImageSync( - (pixelRatio * bounds.width).ceil(), - (pixelRatio * bounds.height).ceil(), - ); + (pixelRatio * bounds.width).ceil(), + (pixelRatio * bounds.height).ceil(), + ); } @override void addToScene(ui.SceneBuilder builder) { if (size.isEmpty) return; - final ui.Image image = _buildChildScene( - offset & size, - devicePixelRatio, - ); + final ui.Image image = _buildChildScene(offset & size, devicePixelRatio); final ui.PictureRecorder pictureRecorder = ui.PictureRecorder(); final Canvas canvas = Canvas(pictureRecorder); try { diff --git a/next-gen-ui/step_02_b/lib/common/ui_scaler.dart b/next-gen-ui/step_02_b/lib/common/ui_scaler.dart index 07c3287650..e7dbb9be42 100644 --- a/next-gen-ui/step_02_b/lib/common/ui_scaler.dart +++ b/next-gen-ui/step_02_b/lib/common/ui_scaler.dart @@ -22,10 +22,6 @@ class UiScaler extends StatelessWidget { Widget build(BuildContext context) { final screenSize = MediaQuery.of(context).size; final double scale = min(screenSize.height / referenceHeight, 1.0); - return Transform.scale( - scale: scale, - alignment: alignment, - child: child, - ); + return Transform.scale(scale: scale, alignment: alignment, child: child); } } diff --git a/next-gen-ui/step_02_b/lib/orb_shader/orb_shader_config.dart b/next-gen-ui/step_02_b/lib/orb_shader/orb_shader_config.dart index ef975cccf8..a038e0be63 100644 --- a/next-gen-ui/step_02_b/lib/orb_shader/orb_shader_config.dart +++ b/next-gen-ui/step_02_b/lib/orb_shader/orb_shader_config.dart @@ -22,14 +22,14 @@ class OrbShaderConfig { this.lightOffsetX = 0, this.lightOffsetY = 0.1, this.lightOffsetZ = -0.66, - }) : assert(zoom >= 0 && zoom <= 1), - assert(exposure >= 0), - assert(metalness >= 0 && metalness <= 1), - assert(lightRadius >= 0), - assert(lightBrightness >= 1), - assert(ior >= 0 && ior <= 2), - assert(lightAttenuation >= 0 && lightAttenuation <= 1), - assert(ambientLightBrightness >= 0); + }) : assert(zoom >= 0 && zoom <= 1), + assert(exposure >= 0), + assert(metalness >= 0 && metalness <= 1), + assert(lightRadius >= 0), + assert(lightBrightness >= 1), + assert(ior >= 0 && ior <= 2), + assert(lightAttenuation >= 0 && lightAttenuation <= 1), + assert(ambientLightBrightness >= 0); final double zoom; diff --git a/next-gen-ui/step_02_b/lib/orb_shader/orb_shader_painter.dart b/next-gen-ui/step_02_b/lib/orb_shader/orb_shader_painter.dart index 399c20ab7e..1e04cc0df8 100644 --- a/next-gen-ui/step_02_b/lib/orb_shader/orb_shader_painter.dart +++ b/next-gen-ui/step_02_b/lib/orb_shader/orb_shader_painter.dart @@ -30,11 +30,13 @@ class OrbShaderPainter extends CustomPainter { v64.Vector3 colorToVector3(Color c) => v64.Vector3(c.r, c.g, c.b); - v64.Vector3 lightLumP = colorToVector3(config.lightColor).normalized() * + v64.Vector3 lightLumP = + colorToVector3(config.lightColor).normalized() * max(0.0, config.lightBrightness); v64.Vector3 albedo = colorToVector3(config.materialColor); - v64.Vector3 ambientLight = colorToVector3(config.ambientLightColor) * + v64.Vector3 ambientLight = + colorToVector3(config.ambientLightColor) * max(0.0, config.ambientLightBrightness); shader.setFloat(0, size.width); diff --git a/next-gen-ui/step_02_b/lib/orb_shader/orb_shader_widget.dart b/next-gen-ui/step_02_b/lib/orb_shader/orb_shader_widget.dart index 573b68afea..4187e7ced2 100644 --- a/next-gen-ui/step_02_b/lib/orb_shader/orb_shader_widget.dart +++ b/next-gen-ui/step_02_b/lib/orb_shader/orb_shader_widget.dart @@ -35,72 +35,82 @@ class OrbShaderWidget extends StatefulWidget { class OrbShaderWidgetState extends State with SingleTickerProviderStateMixin { - final _heartbeatSequence = TweenSequence( - [ - TweenSequenceItem(tween: ConstantTween(0), weight: 40), - TweenSequenceItem( - tween: Tween(begin: 0.0, end: 1.0) - .chain(CurveTween(curve: Curves.easeInOutCubic)), - weight: 8), - TweenSequenceItem( - tween: Tween(begin: 1.0, end: 0.2) - .chain(CurveTween(curve: Curves.easeInOutCubic)), - weight: 12), - TweenSequenceItem( - tween: Tween(begin: 0.2, end: 0.8) - .chain(CurveTween(curve: Curves.easeInOutCubic)), - weight: 6), - TweenSequenceItem( - tween: Tween(begin: 0.8, end: 0.0) - .chain(CurveTween(curve: Curves.easeInOutCubic)), - weight: 10), - ], - ); + final _heartbeatSequence = TweenSequence([ + TweenSequenceItem(tween: ConstantTween(0), weight: 40), + TweenSequenceItem( + tween: Tween( + begin: 0.0, + end: 1.0, + ).chain(CurveTween(curve: Curves.easeInOutCubic)), + weight: 8, + ), + TweenSequenceItem( + tween: Tween( + begin: 1.0, + end: 0.2, + ).chain(CurveTween(curve: Curves.easeInOutCubic)), + weight: 12, + ), + TweenSequenceItem( + tween: Tween( + begin: 0.2, + end: 0.8, + ).chain(CurveTween(curve: Curves.easeInOutCubic)), + weight: 6, + ), + TweenSequenceItem( + tween: Tween( + begin: 0.8, + end: 0.0, + ).chain(CurveTween(curve: Curves.easeInOutCubic)), + weight: 10, + ), + ]); - late final _heartbeatAnim = - AnimationController(vsync: this, duration: 3000.ms)..repeat(); + late final _heartbeatAnim = AnimationController( + vsync: this, + duration: 3000.ms, + )..repeat(); @override Widget build(BuildContext context) => Consumer( - builder: (context, fragmentPrograms, _) { - if (fragmentPrograms == null) return const SizedBox.expand(); - return ListenableBuilder( - listenable: _heartbeatAnim, - builder: (_, __) { - final heartbeatEnergy = - _heartbeatAnim.drive(_heartbeatSequence).value; - return TweenAnimationBuilder( - tween: Tween( - begin: widget.minEnergy, end: widget.minEnergy), - duration: 300.ms, - curve: Curves.easeOutCubic, - builder: (context, minEnergy, child) { - return ReactiveWidget( - builder: (context, time, size) { - double energyLevel = 0; - if (size.shortestSide != 0) { - final d = (Offset(size.width, size.height) / 2 - - widget.mousePos) + builder: (context, fragmentPrograms, _) { + if (fragmentPrograms == null) return const SizedBox.expand(); + return ListenableBuilder( + listenable: _heartbeatAnim, + builder: (_, __) { + final heartbeatEnergy = + _heartbeatAnim.drive(_heartbeatSequence).value; + return TweenAnimationBuilder( + tween: Tween( + begin: widget.minEnergy, + end: widget.minEnergy, + ), + duration: 300.ms, + curve: Curves.easeOutCubic, + builder: (context, minEnergy, child) { + return ReactiveWidget( + builder: (context, time, size) { + double energyLevel = 0; + if (size.shortestSide != 0) { + final d = + (Offset(size.width, size.height) / 2 - widget.mousePos) .distance; - final hitSize = size.shortestSide * .5; - energyLevel = 1 - min(1, (d / hitSize)); - scheduleMicrotask( - () => widget.onUpdate?.call(energyLevel)); - } - energyLevel += - (1.3 - energyLevel) * heartbeatEnergy * 0.1; - energyLevel = lerpDouble(minEnergy, 1, energyLevel)!; - return CustomPaint( - size: size, - painter: OrbShaderPainter( - fragmentPrograms.orb.fragmentShader(), - config: widget.config, - time: time, - mousePos: widget.mousePos, - energy: energyLevel, - ), - ); - }, + final hitSize = size.shortestSide * .5; + energyLevel = 1 - min(1, (d / hitSize)); + scheduleMicrotask(() => widget.onUpdate?.call(energyLevel)); + } + energyLevel += (1.3 - energyLevel) * heartbeatEnergy * 0.1; + energyLevel = lerpDouble(minEnergy, 1, energyLevel)!; + return CustomPaint( + size: size, + painter: OrbShaderPainter( + fragmentPrograms.orb.fragmentShader(), + config: widget.config, + time: time, + mousePos: widget.mousePos, + energy: energyLevel, + ), ); }, ); @@ -108,4 +118,6 @@ class OrbShaderWidgetState extends State ); }, ); + }, + ); } diff --git a/next-gen-ui/step_02_b/lib/styles.dart b/next-gen-ui/step_02_b/lib/styles.dart index 1e449fff3a..fb5083c6a8 100644 --- a/next-gen-ui/step_02_b/lib/styles.dart +++ b/next-gen-ui/step_02_b/lib/styles.dart @@ -8,16 +8,19 @@ class TextStyles { static const _font1 = TextStyle(fontFamily: 'Exo', color: Colors.white); static TextStyle get h1 => _font1.copyWith( - fontSize: 75, letterSpacing: 35, fontWeight: FontWeight.w700); + fontSize: 75, + letterSpacing: 35, + fontWeight: FontWeight.w700, + ); static TextStyle get h2 => h1.copyWith(fontSize: 40, letterSpacing: 0); static TextStyle get h3 => h1.copyWith(fontSize: 24, letterSpacing: 20, fontWeight: FontWeight.w400); static TextStyle get body => _font1.copyWith(fontSize: 16); static TextStyle get btn => _font1.copyWith( - fontSize: 16, - fontWeight: FontWeight.bold, - letterSpacing: 10, - ); + fontSize: 16, + fontWeight: FontWeight.bold, + letterSpacing: 10, + ); } abstract class AppColors { diff --git a/next-gen-ui/step_02_b/pubspec.yaml b/next-gen-ui/step_02_b/pubspec.yaml index dd3eb24959..7fd82808a1 100644 --- a/next-gen-ui/step_02_b/pubspec.yaml +++ b/next-gen-ui/step_02_b/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: 'none' version: 0.1.0 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 dependencies: flutter: diff --git a/next-gen-ui/step_02_c/lib/assets.dart b/next-gen-ui/step_02_c/lib/assets.dart index d0286c9a12..440dab3f61 100644 --- a/next-gen-ui/step_02_c/lib/assets.dart +++ b/next-gen-ui/step_02_c/lib/assets.dart @@ -32,9 +32,9 @@ class AssetPaths { typedef FragmentPrograms = ({FragmentProgram orb, FragmentProgram ui}); Future loadFragmentPrograms() async => ( - orb: (await _loadFragmentProgram(AssetPaths.orbShader)), - ui: (await _loadFragmentProgram(AssetPaths.uiShader)), - ); + orb: (await _loadFragmentProgram(AssetPaths.orbShader)), + ui: (await _loadFragmentProgram(AssetPaths.uiShader)), +); Future _loadFragmentProgram(String path) async { return (await FragmentProgram.fromAsset(path)); diff --git a/next-gen-ui/step_02_c/lib/common/reactive_widget.dart b/next-gen-ui/step_02_c/lib/common/reactive_widget.dart index c75aa491e9..f480d8b3eb 100644 --- a/next-gen-ui/step_02_c/lib/common/reactive_widget.dart +++ b/next-gen-ui/step_02_c/lib/common/reactive_widget.dart @@ -6,14 +6,11 @@ import 'package:flutter/material.dart'; import 'ticking_builder.dart'; -typedef ReactiveWidgetBuilder = Widget Function( - BuildContext context, double time, Size bounds); +typedef ReactiveWidgetBuilder = + Widget Function(BuildContext context, double time, Size bounds); class ReactiveWidget extends StatefulWidget { - const ReactiveWidget({ - super.key, - required this.builder, - }); + const ReactiveWidget({super.key, required this.builder}); final ReactiveWidgetBuilder builder; @override State createState() => _ReactiveWidgetState(); diff --git a/next-gen-ui/step_02_c/lib/common/shader_effect.dart b/next-gen-ui/step_02_c/lib/common/shader_effect.dart index 69bd75f7d9..7e6ebe8bdf 100644 --- a/next-gen-ui/step_02_c/lib/common/shader_effect.dart +++ b/next-gen-ui/step_02_c/lib/common/shader_effect.dart @@ -32,11 +32,8 @@ class ShaderEffect extends Effect { this.shader, this.update, ShaderLayer? layer, - }) : layer = layer ?? ShaderLayer.replace, - super( - begin: 0, - end: 1, - ); + }) : layer = layer ?? ShaderLayer.replace, + super(begin: 0, end: 1); final ui.FragmentShader? shader; final ShaderUpdateCallback? update; @@ -91,22 +88,28 @@ extension ShaderEffectExtensions on AnimateManager { ui.FragmentShader? shader, ShaderUpdateCallback? update, ShaderLayer? layer, - }) => - addEffect(ShaderEffect( - delay: delay, - duration: duration, - curve: curve, - shader: shader, - update: update, - layer: layer, - )); + }) => addEffect( + ShaderEffect( + delay: delay, + duration: duration, + curve: curve, + shader: shader, + update: update, + layer: layer, + ), + ); } enum ShaderLayer { foreground, background, replace } /// Function signature for [ShaderEffect] update handlers. -typedef ShaderUpdateCallback = EdgeInsets? Function( - ui.FragmentShader shader, double value, Size size, ui.Image image); +typedef ShaderUpdateCallback = + EdgeInsets? Function( + ui.FragmentShader shader, + double value, + Size size, + ui.Image image, + ); /******************************************************************************/ // TODO: add this as a dependency instead of copying it in once it is stable: @@ -117,11 +120,8 @@ typedef ShaderUpdateCallback = EdgeInsets? Function( // found in the LICENSE file. /// A callback for the [AnimatedSamplerBuilder] widget. -typedef AnimatedSamplerBuilder = void Function( - ui.Image image, - Size size, - ui.Canvas canvas, -); +typedef AnimatedSamplerBuilder = + void Function(ui.Image image, Size size, ui.Canvas canvas); /// A widget that allows access to a snapshot of the child widgets for painting /// with a sampler applied to a [FragmentProgram]. @@ -181,11 +181,7 @@ class AnimatedSampler extends StatelessWidget { @override Widget build(BuildContext context) { - return _ShaderSamplerBuilder( - builder, - enabled: enabled, - child: child, - ); + return _ShaderSamplerBuilder(builder, enabled: enabled, child: child); } } @@ -210,7 +206,9 @@ class _ShaderSamplerBuilder extends SingleChildRenderObjectWidget { @override void updateRenderObject( - BuildContext context, covariant RenderObject renderObject) { + BuildContext context, + covariant RenderObject renderObject, + ) { (renderObject as _RenderShaderSamplerBuilderWidget) ..devicePixelRatio = MediaQuery.of(context).devicePixelRatio ..builder = builder @@ -226,13 +224,14 @@ class _RenderShaderSamplerBuilderWidget extends RenderProxyBox { required double devicePixelRatio, required AnimatedSamplerBuilder builder, required bool enabled, - }) : _devicePixelRatio = devicePixelRatio, - _builder = builder, - _enabled = enabled; + }) : _devicePixelRatio = devicePixelRatio, + _builder = builder, + _enabled = enabled; @override - OffsetLayer updateCompositedLayer( - {required covariant _ShaderSamplerBuilderLayer? oldLayer}) { + OffsetLayer updateCompositedLayer({ + required covariant _ShaderSamplerBuilderLayer? oldLayer, + }) { final _ShaderSamplerBuilderLayer layer = oldLayer ?? _ShaderSamplerBuilderLayer(builder); layer @@ -328,24 +327,24 @@ class _ShaderSamplerBuilderLayer extends OffsetLayer { ui.Image _buildChildScene(Rect bounds, double pixelRatio) { final ui.SceneBuilder builder = ui.SceneBuilder(); - final Matrix4 transform = - Matrix4.diagonal3Values(pixelRatio, pixelRatio, 1); + final Matrix4 transform = Matrix4.diagonal3Values( + pixelRatio, + pixelRatio, + 1, + ); builder.pushTransform(transform.storage); addChildrenToScene(builder); builder.pop(); return builder.build().toImageSync( - (pixelRatio * bounds.width).ceil(), - (pixelRatio * bounds.height).ceil(), - ); + (pixelRatio * bounds.width).ceil(), + (pixelRatio * bounds.height).ceil(), + ); } @override void addToScene(ui.SceneBuilder builder) { if (size.isEmpty) return; - final ui.Image image = _buildChildScene( - offset & size, - devicePixelRatio, - ); + final ui.Image image = _buildChildScene(offset & size, devicePixelRatio); final ui.PictureRecorder pictureRecorder = ui.PictureRecorder(); final Canvas canvas = Canvas(pictureRecorder); try { diff --git a/next-gen-ui/step_02_c/lib/common/ui_scaler.dart b/next-gen-ui/step_02_c/lib/common/ui_scaler.dart index 07c3287650..e7dbb9be42 100644 --- a/next-gen-ui/step_02_c/lib/common/ui_scaler.dart +++ b/next-gen-ui/step_02_c/lib/common/ui_scaler.dart @@ -22,10 +22,6 @@ class UiScaler extends StatelessWidget { Widget build(BuildContext context) { final screenSize = MediaQuery.of(context).size; final double scale = min(screenSize.height / referenceHeight, 1.0); - return Transform.scale( - scale: scale, - alignment: alignment, - child: child, - ); + return Transform.scale(scale: scale, alignment: alignment, child: child); } } diff --git a/next-gen-ui/step_02_c/lib/orb_shader/orb_shader_config.dart b/next-gen-ui/step_02_c/lib/orb_shader/orb_shader_config.dart index ef975cccf8..a038e0be63 100644 --- a/next-gen-ui/step_02_c/lib/orb_shader/orb_shader_config.dart +++ b/next-gen-ui/step_02_c/lib/orb_shader/orb_shader_config.dart @@ -22,14 +22,14 @@ class OrbShaderConfig { this.lightOffsetX = 0, this.lightOffsetY = 0.1, this.lightOffsetZ = -0.66, - }) : assert(zoom >= 0 && zoom <= 1), - assert(exposure >= 0), - assert(metalness >= 0 && metalness <= 1), - assert(lightRadius >= 0), - assert(lightBrightness >= 1), - assert(ior >= 0 && ior <= 2), - assert(lightAttenuation >= 0 && lightAttenuation <= 1), - assert(ambientLightBrightness >= 0); + }) : assert(zoom >= 0 && zoom <= 1), + assert(exposure >= 0), + assert(metalness >= 0 && metalness <= 1), + assert(lightRadius >= 0), + assert(lightBrightness >= 1), + assert(ior >= 0 && ior <= 2), + assert(lightAttenuation >= 0 && lightAttenuation <= 1), + assert(ambientLightBrightness >= 0); final double zoom; diff --git a/next-gen-ui/step_02_c/lib/orb_shader/orb_shader_painter.dart b/next-gen-ui/step_02_c/lib/orb_shader/orb_shader_painter.dart index 399c20ab7e..1e04cc0df8 100644 --- a/next-gen-ui/step_02_c/lib/orb_shader/orb_shader_painter.dart +++ b/next-gen-ui/step_02_c/lib/orb_shader/orb_shader_painter.dart @@ -30,11 +30,13 @@ class OrbShaderPainter extends CustomPainter { v64.Vector3 colorToVector3(Color c) => v64.Vector3(c.r, c.g, c.b); - v64.Vector3 lightLumP = colorToVector3(config.lightColor).normalized() * + v64.Vector3 lightLumP = + colorToVector3(config.lightColor).normalized() * max(0.0, config.lightBrightness); v64.Vector3 albedo = colorToVector3(config.materialColor); - v64.Vector3 ambientLight = colorToVector3(config.ambientLightColor) * + v64.Vector3 ambientLight = + colorToVector3(config.ambientLightColor) * max(0.0, config.ambientLightBrightness); shader.setFloat(0, size.width); diff --git a/next-gen-ui/step_02_c/lib/orb_shader/orb_shader_widget.dart b/next-gen-ui/step_02_c/lib/orb_shader/orb_shader_widget.dart index 573b68afea..4187e7ced2 100644 --- a/next-gen-ui/step_02_c/lib/orb_shader/orb_shader_widget.dart +++ b/next-gen-ui/step_02_c/lib/orb_shader/orb_shader_widget.dart @@ -35,72 +35,82 @@ class OrbShaderWidget extends StatefulWidget { class OrbShaderWidgetState extends State with SingleTickerProviderStateMixin { - final _heartbeatSequence = TweenSequence( - [ - TweenSequenceItem(tween: ConstantTween(0), weight: 40), - TweenSequenceItem( - tween: Tween(begin: 0.0, end: 1.0) - .chain(CurveTween(curve: Curves.easeInOutCubic)), - weight: 8), - TweenSequenceItem( - tween: Tween(begin: 1.0, end: 0.2) - .chain(CurveTween(curve: Curves.easeInOutCubic)), - weight: 12), - TweenSequenceItem( - tween: Tween(begin: 0.2, end: 0.8) - .chain(CurveTween(curve: Curves.easeInOutCubic)), - weight: 6), - TweenSequenceItem( - tween: Tween(begin: 0.8, end: 0.0) - .chain(CurveTween(curve: Curves.easeInOutCubic)), - weight: 10), - ], - ); + final _heartbeatSequence = TweenSequence([ + TweenSequenceItem(tween: ConstantTween(0), weight: 40), + TweenSequenceItem( + tween: Tween( + begin: 0.0, + end: 1.0, + ).chain(CurveTween(curve: Curves.easeInOutCubic)), + weight: 8, + ), + TweenSequenceItem( + tween: Tween( + begin: 1.0, + end: 0.2, + ).chain(CurveTween(curve: Curves.easeInOutCubic)), + weight: 12, + ), + TweenSequenceItem( + tween: Tween( + begin: 0.2, + end: 0.8, + ).chain(CurveTween(curve: Curves.easeInOutCubic)), + weight: 6, + ), + TweenSequenceItem( + tween: Tween( + begin: 0.8, + end: 0.0, + ).chain(CurveTween(curve: Curves.easeInOutCubic)), + weight: 10, + ), + ]); - late final _heartbeatAnim = - AnimationController(vsync: this, duration: 3000.ms)..repeat(); + late final _heartbeatAnim = AnimationController( + vsync: this, + duration: 3000.ms, + )..repeat(); @override Widget build(BuildContext context) => Consumer( - builder: (context, fragmentPrograms, _) { - if (fragmentPrograms == null) return const SizedBox.expand(); - return ListenableBuilder( - listenable: _heartbeatAnim, - builder: (_, __) { - final heartbeatEnergy = - _heartbeatAnim.drive(_heartbeatSequence).value; - return TweenAnimationBuilder( - tween: Tween( - begin: widget.minEnergy, end: widget.minEnergy), - duration: 300.ms, - curve: Curves.easeOutCubic, - builder: (context, minEnergy, child) { - return ReactiveWidget( - builder: (context, time, size) { - double energyLevel = 0; - if (size.shortestSide != 0) { - final d = (Offset(size.width, size.height) / 2 - - widget.mousePos) + builder: (context, fragmentPrograms, _) { + if (fragmentPrograms == null) return const SizedBox.expand(); + return ListenableBuilder( + listenable: _heartbeatAnim, + builder: (_, __) { + final heartbeatEnergy = + _heartbeatAnim.drive(_heartbeatSequence).value; + return TweenAnimationBuilder( + tween: Tween( + begin: widget.minEnergy, + end: widget.minEnergy, + ), + duration: 300.ms, + curve: Curves.easeOutCubic, + builder: (context, minEnergy, child) { + return ReactiveWidget( + builder: (context, time, size) { + double energyLevel = 0; + if (size.shortestSide != 0) { + final d = + (Offset(size.width, size.height) / 2 - widget.mousePos) .distance; - final hitSize = size.shortestSide * .5; - energyLevel = 1 - min(1, (d / hitSize)); - scheduleMicrotask( - () => widget.onUpdate?.call(energyLevel)); - } - energyLevel += - (1.3 - energyLevel) * heartbeatEnergy * 0.1; - energyLevel = lerpDouble(minEnergy, 1, energyLevel)!; - return CustomPaint( - size: size, - painter: OrbShaderPainter( - fragmentPrograms.orb.fragmentShader(), - config: widget.config, - time: time, - mousePos: widget.mousePos, - energy: energyLevel, - ), - ); - }, + final hitSize = size.shortestSide * .5; + energyLevel = 1 - min(1, (d / hitSize)); + scheduleMicrotask(() => widget.onUpdate?.call(energyLevel)); + } + energyLevel += (1.3 - energyLevel) * heartbeatEnergy * 0.1; + energyLevel = lerpDouble(minEnergy, 1, energyLevel)!; + return CustomPaint( + size: size, + painter: OrbShaderPainter( + fragmentPrograms.orb.fragmentShader(), + config: widget.config, + time: time, + mousePos: widget.mousePos, + energy: energyLevel, + ), ); }, ); @@ -108,4 +118,6 @@ class OrbShaderWidgetState extends State ); }, ); + }, + ); } diff --git a/next-gen-ui/step_02_c/lib/styles.dart b/next-gen-ui/step_02_c/lib/styles.dart index 1e449fff3a..fb5083c6a8 100644 --- a/next-gen-ui/step_02_c/lib/styles.dart +++ b/next-gen-ui/step_02_c/lib/styles.dart @@ -8,16 +8,19 @@ class TextStyles { static const _font1 = TextStyle(fontFamily: 'Exo', color: Colors.white); static TextStyle get h1 => _font1.copyWith( - fontSize: 75, letterSpacing: 35, fontWeight: FontWeight.w700); + fontSize: 75, + letterSpacing: 35, + fontWeight: FontWeight.w700, + ); static TextStyle get h2 => h1.copyWith(fontSize: 40, letterSpacing: 0); static TextStyle get h3 => h1.copyWith(fontSize: 24, letterSpacing: 20, fontWeight: FontWeight.w400); static TextStyle get body => _font1.copyWith(fontSize: 16); static TextStyle get btn => _font1.copyWith( - fontSize: 16, - fontWeight: FontWeight.bold, - letterSpacing: 10, - ); + fontSize: 16, + fontWeight: FontWeight.bold, + letterSpacing: 10, + ); } abstract class AppColors { diff --git a/next-gen-ui/step_02_c/pubspec.yaml b/next-gen-ui/step_02_c/pubspec.yaml index dd3eb24959..7fd82808a1 100644 --- a/next-gen-ui/step_02_c/pubspec.yaml +++ b/next-gen-ui/step_02_c/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: 'none' version: 0.1.0 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 dependencies: flutter: diff --git a/next-gen-ui/step_03_a/lib/assets.dart b/next-gen-ui/step_03_a/lib/assets.dart index d0286c9a12..440dab3f61 100644 --- a/next-gen-ui/step_03_a/lib/assets.dart +++ b/next-gen-ui/step_03_a/lib/assets.dart @@ -32,9 +32,9 @@ class AssetPaths { typedef FragmentPrograms = ({FragmentProgram orb, FragmentProgram ui}); Future loadFragmentPrograms() async => ( - orb: (await _loadFragmentProgram(AssetPaths.orbShader)), - ui: (await _loadFragmentProgram(AssetPaths.uiShader)), - ); + orb: (await _loadFragmentProgram(AssetPaths.orbShader)), + ui: (await _loadFragmentProgram(AssetPaths.uiShader)), +); Future _loadFragmentProgram(String path) async { return (await FragmentProgram.fromAsset(path)); diff --git a/next-gen-ui/step_03_a/lib/common/reactive_widget.dart b/next-gen-ui/step_03_a/lib/common/reactive_widget.dart index c75aa491e9..f480d8b3eb 100644 --- a/next-gen-ui/step_03_a/lib/common/reactive_widget.dart +++ b/next-gen-ui/step_03_a/lib/common/reactive_widget.dart @@ -6,14 +6,11 @@ import 'package:flutter/material.dart'; import 'ticking_builder.dart'; -typedef ReactiveWidgetBuilder = Widget Function( - BuildContext context, double time, Size bounds); +typedef ReactiveWidgetBuilder = + Widget Function(BuildContext context, double time, Size bounds); class ReactiveWidget extends StatefulWidget { - const ReactiveWidget({ - super.key, - required this.builder, - }); + const ReactiveWidget({super.key, required this.builder}); final ReactiveWidgetBuilder builder; @override State createState() => _ReactiveWidgetState(); diff --git a/next-gen-ui/step_03_a/lib/common/shader_effect.dart b/next-gen-ui/step_03_a/lib/common/shader_effect.dart index 69bd75f7d9..7e6ebe8bdf 100644 --- a/next-gen-ui/step_03_a/lib/common/shader_effect.dart +++ b/next-gen-ui/step_03_a/lib/common/shader_effect.dart @@ -32,11 +32,8 @@ class ShaderEffect extends Effect { this.shader, this.update, ShaderLayer? layer, - }) : layer = layer ?? ShaderLayer.replace, - super( - begin: 0, - end: 1, - ); + }) : layer = layer ?? ShaderLayer.replace, + super(begin: 0, end: 1); final ui.FragmentShader? shader; final ShaderUpdateCallback? update; @@ -91,22 +88,28 @@ extension ShaderEffectExtensions on AnimateManager { ui.FragmentShader? shader, ShaderUpdateCallback? update, ShaderLayer? layer, - }) => - addEffect(ShaderEffect( - delay: delay, - duration: duration, - curve: curve, - shader: shader, - update: update, - layer: layer, - )); + }) => addEffect( + ShaderEffect( + delay: delay, + duration: duration, + curve: curve, + shader: shader, + update: update, + layer: layer, + ), + ); } enum ShaderLayer { foreground, background, replace } /// Function signature for [ShaderEffect] update handlers. -typedef ShaderUpdateCallback = EdgeInsets? Function( - ui.FragmentShader shader, double value, Size size, ui.Image image); +typedef ShaderUpdateCallback = + EdgeInsets? Function( + ui.FragmentShader shader, + double value, + Size size, + ui.Image image, + ); /******************************************************************************/ // TODO: add this as a dependency instead of copying it in once it is stable: @@ -117,11 +120,8 @@ typedef ShaderUpdateCallback = EdgeInsets? Function( // found in the LICENSE file. /// A callback for the [AnimatedSamplerBuilder] widget. -typedef AnimatedSamplerBuilder = void Function( - ui.Image image, - Size size, - ui.Canvas canvas, -); +typedef AnimatedSamplerBuilder = + void Function(ui.Image image, Size size, ui.Canvas canvas); /// A widget that allows access to a snapshot of the child widgets for painting /// with a sampler applied to a [FragmentProgram]. @@ -181,11 +181,7 @@ class AnimatedSampler extends StatelessWidget { @override Widget build(BuildContext context) { - return _ShaderSamplerBuilder( - builder, - enabled: enabled, - child: child, - ); + return _ShaderSamplerBuilder(builder, enabled: enabled, child: child); } } @@ -210,7 +206,9 @@ class _ShaderSamplerBuilder extends SingleChildRenderObjectWidget { @override void updateRenderObject( - BuildContext context, covariant RenderObject renderObject) { + BuildContext context, + covariant RenderObject renderObject, + ) { (renderObject as _RenderShaderSamplerBuilderWidget) ..devicePixelRatio = MediaQuery.of(context).devicePixelRatio ..builder = builder @@ -226,13 +224,14 @@ class _RenderShaderSamplerBuilderWidget extends RenderProxyBox { required double devicePixelRatio, required AnimatedSamplerBuilder builder, required bool enabled, - }) : _devicePixelRatio = devicePixelRatio, - _builder = builder, - _enabled = enabled; + }) : _devicePixelRatio = devicePixelRatio, + _builder = builder, + _enabled = enabled; @override - OffsetLayer updateCompositedLayer( - {required covariant _ShaderSamplerBuilderLayer? oldLayer}) { + OffsetLayer updateCompositedLayer({ + required covariant _ShaderSamplerBuilderLayer? oldLayer, + }) { final _ShaderSamplerBuilderLayer layer = oldLayer ?? _ShaderSamplerBuilderLayer(builder); layer @@ -328,24 +327,24 @@ class _ShaderSamplerBuilderLayer extends OffsetLayer { ui.Image _buildChildScene(Rect bounds, double pixelRatio) { final ui.SceneBuilder builder = ui.SceneBuilder(); - final Matrix4 transform = - Matrix4.diagonal3Values(pixelRatio, pixelRatio, 1); + final Matrix4 transform = Matrix4.diagonal3Values( + pixelRatio, + pixelRatio, + 1, + ); builder.pushTransform(transform.storage); addChildrenToScene(builder); builder.pop(); return builder.build().toImageSync( - (pixelRatio * bounds.width).ceil(), - (pixelRatio * bounds.height).ceil(), - ); + (pixelRatio * bounds.width).ceil(), + (pixelRatio * bounds.height).ceil(), + ); } @override void addToScene(ui.SceneBuilder builder) { if (size.isEmpty) return; - final ui.Image image = _buildChildScene( - offset & size, - devicePixelRatio, - ); + final ui.Image image = _buildChildScene(offset & size, devicePixelRatio); final ui.PictureRecorder pictureRecorder = ui.PictureRecorder(); final Canvas canvas = Canvas(pictureRecorder); try { diff --git a/next-gen-ui/step_03_a/lib/common/ui_scaler.dart b/next-gen-ui/step_03_a/lib/common/ui_scaler.dart index 07c3287650..e7dbb9be42 100644 --- a/next-gen-ui/step_03_a/lib/common/ui_scaler.dart +++ b/next-gen-ui/step_03_a/lib/common/ui_scaler.dart @@ -22,10 +22,6 @@ class UiScaler extends StatelessWidget { Widget build(BuildContext context) { final screenSize = MediaQuery.of(context).size; final double scale = min(screenSize.height / referenceHeight, 1.0); - return Transform.scale( - scale: scale, - alignment: alignment, - child: child, - ); + return Transform.scale(scale: scale, alignment: alignment, child: child); } } diff --git a/next-gen-ui/step_03_a/lib/orb_shader/orb_shader_config.dart b/next-gen-ui/step_03_a/lib/orb_shader/orb_shader_config.dart index ef975cccf8..a038e0be63 100644 --- a/next-gen-ui/step_03_a/lib/orb_shader/orb_shader_config.dart +++ b/next-gen-ui/step_03_a/lib/orb_shader/orb_shader_config.dart @@ -22,14 +22,14 @@ class OrbShaderConfig { this.lightOffsetX = 0, this.lightOffsetY = 0.1, this.lightOffsetZ = -0.66, - }) : assert(zoom >= 0 && zoom <= 1), - assert(exposure >= 0), - assert(metalness >= 0 && metalness <= 1), - assert(lightRadius >= 0), - assert(lightBrightness >= 1), - assert(ior >= 0 && ior <= 2), - assert(lightAttenuation >= 0 && lightAttenuation <= 1), - assert(ambientLightBrightness >= 0); + }) : assert(zoom >= 0 && zoom <= 1), + assert(exposure >= 0), + assert(metalness >= 0 && metalness <= 1), + assert(lightRadius >= 0), + assert(lightBrightness >= 1), + assert(ior >= 0 && ior <= 2), + assert(lightAttenuation >= 0 && lightAttenuation <= 1), + assert(ambientLightBrightness >= 0); final double zoom; diff --git a/next-gen-ui/step_03_a/lib/orb_shader/orb_shader_painter.dart b/next-gen-ui/step_03_a/lib/orb_shader/orb_shader_painter.dart index 399c20ab7e..1e04cc0df8 100644 --- a/next-gen-ui/step_03_a/lib/orb_shader/orb_shader_painter.dart +++ b/next-gen-ui/step_03_a/lib/orb_shader/orb_shader_painter.dart @@ -30,11 +30,13 @@ class OrbShaderPainter extends CustomPainter { v64.Vector3 colorToVector3(Color c) => v64.Vector3(c.r, c.g, c.b); - v64.Vector3 lightLumP = colorToVector3(config.lightColor).normalized() * + v64.Vector3 lightLumP = + colorToVector3(config.lightColor).normalized() * max(0.0, config.lightBrightness); v64.Vector3 albedo = colorToVector3(config.materialColor); - v64.Vector3 ambientLight = colorToVector3(config.ambientLightColor) * + v64.Vector3 ambientLight = + colorToVector3(config.ambientLightColor) * max(0.0, config.ambientLightBrightness); shader.setFloat(0, size.width); diff --git a/next-gen-ui/step_03_a/lib/orb_shader/orb_shader_widget.dart b/next-gen-ui/step_03_a/lib/orb_shader/orb_shader_widget.dart index 573b68afea..4187e7ced2 100644 --- a/next-gen-ui/step_03_a/lib/orb_shader/orb_shader_widget.dart +++ b/next-gen-ui/step_03_a/lib/orb_shader/orb_shader_widget.dart @@ -35,72 +35,82 @@ class OrbShaderWidget extends StatefulWidget { class OrbShaderWidgetState extends State with SingleTickerProviderStateMixin { - final _heartbeatSequence = TweenSequence( - [ - TweenSequenceItem(tween: ConstantTween(0), weight: 40), - TweenSequenceItem( - tween: Tween(begin: 0.0, end: 1.0) - .chain(CurveTween(curve: Curves.easeInOutCubic)), - weight: 8), - TweenSequenceItem( - tween: Tween(begin: 1.0, end: 0.2) - .chain(CurveTween(curve: Curves.easeInOutCubic)), - weight: 12), - TweenSequenceItem( - tween: Tween(begin: 0.2, end: 0.8) - .chain(CurveTween(curve: Curves.easeInOutCubic)), - weight: 6), - TweenSequenceItem( - tween: Tween(begin: 0.8, end: 0.0) - .chain(CurveTween(curve: Curves.easeInOutCubic)), - weight: 10), - ], - ); + final _heartbeatSequence = TweenSequence([ + TweenSequenceItem(tween: ConstantTween(0), weight: 40), + TweenSequenceItem( + tween: Tween( + begin: 0.0, + end: 1.0, + ).chain(CurveTween(curve: Curves.easeInOutCubic)), + weight: 8, + ), + TweenSequenceItem( + tween: Tween( + begin: 1.0, + end: 0.2, + ).chain(CurveTween(curve: Curves.easeInOutCubic)), + weight: 12, + ), + TweenSequenceItem( + tween: Tween( + begin: 0.2, + end: 0.8, + ).chain(CurveTween(curve: Curves.easeInOutCubic)), + weight: 6, + ), + TweenSequenceItem( + tween: Tween( + begin: 0.8, + end: 0.0, + ).chain(CurveTween(curve: Curves.easeInOutCubic)), + weight: 10, + ), + ]); - late final _heartbeatAnim = - AnimationController(vsync: this, duration: 3000.ms)..repeat(); + late final _heartbeatAnim = AnimationController( + vsync: this, + duration: 3000.ms, + )..repeat(); @override Widget build(BuildContext context) => Consumer( - builder: (context, fragmentPrograms, _) { - if (fragmentPrograms == null) return const SizedBox.expand(); - return ListenableBuilder( - listenable: _heartbeatAnim, - builder: (_, __) { - final heartbeatEnergy = - _heartbeatAnim.drive(_heartbeatSequence).value; - return TweenAnimationBuilder( - tween: Tween( - begin: widget.minEnergy, end: widget.minEnergy), - duration: 300.ms, - curve: Curves.easeOutCubic, - builder: (context, minEnergy, child) { - return ReactiveWidget( - builder: (context, time, size) { - double energyLevel = 0; - if (size.shortestSide != 0) { - final d = (Offset(size.width, size.height) / 2 - - widget.mousePos) + builder: (context, fragmentPrograms, _) { + if (fragmentPrograms == null) return const SizedBox.expand(); + return ListenableBuilder( + listenable: _heartbeatAnim, + builder: (_, __) { + final heartbeatEnergy = + _heartbeatAnim.drive(_heartbeatSequence).value; + return TweenAnimationBuilder( + tween: Tween( + begin: widget.minEnergy, + end: widget.minEnergy, + ), + duration: 300.ms, + curve: Curves.easeOutCubic, + builder: (context, minEnergy, child) { + return ReactiveWidget( + builder: (context, time, size) { + double energyLevel = 0; + if (size.shortestSide != 0) { + final d = + (Offset(size.width, size.height) / 2 - widget.mousePos) .distance; - final hitSize = size.shortestSide * .5; - energyLevel = 1 - min(1, (d / hitSize)); - scheduleMicrotask( - () => widget.onUpdate?.call(energyLevel)); - } - energyLevel += - (1.3 - energyLevel) * heartbeatEnergy * 0.1; - energyLevel = lerpDouble(minEnergy, 1, energyLevel)!; - return CustomPaint( - size: size, - painter: OrbShaderPainter( - fragmentPrograms.orb.fragmentShader(), - config: widget.config, - time: time, - mousePos: widget.mousePos, - energy: energyLevel, - ), - ); - }, + final hitSize = size.shortestSide * .5; + energyLevel = 1 - min(1, (d / hitSize)); + scheduleMicrotask(() => widget.onUpdate?.call(energyLevel)); + } + energyLevel += (1.3 - energyLevel) * heartbeatEnergy * 0.1; + energyLevel = lerpDouble(minEnergy, 1, energyLevel)!; + return CustomPaint( + size: size, + painter: OrbShaderPainter( + fragmentPrograms.orb.fragmentShader(), + config: widget.config, + time: time, + mousePos: widget.mousePos, + energy: energyLevel, + ), ); }, ); @@ -108,4 +118,6 @@ class OrbShaderWidgetState extends State ); }, ); + }, + ); } diff --git a/next-gen-ui/step_03_a/lib/styles.dart b/next-gen-ui/step_03_a/lib/styles.dart index 1e449fff3a..fb5083c6a8 100644 --- a/next-gen-ui/step_03_a/lib/styles.dart +++ b/next-gen-ui/step_03_a/lib/styles.dart @@ -8,16 +8,19 @@ class TextStyles { static const _font1 = TextStyle(fontFamily: 'Exo', color: Colors.white); static TextStyle get h1 => _font1.copyWith( - fontSize: 75, letterSpacing: 35, fontWeight: FontWeight.w700); + fontSize: 75, + letterSpacing: 35, + fontWeight: FontWeight.w700, + ); static TextStyle get h2 => h1.copyWith(fontSize: 40, letterSpacing: 0); static TextStyle get h3 => h1.copyWith(fontSize: 24, letterSpacing: 20, fontWeight: FontWeight.w400); static TextStyle get body => _font1.copyWith(fontSize: 16); static TextStyle get btn => _font1.copyWith( - fontSize: 16, - fontWeight: FontWeight.bold, - letterSpacing: 10, - ); + fontSize: 16, + fontWeight: FontWeight.bold, + letterSpacing: 10, + ); } abstract class AppColors { diff --git a/next-gen-ui/step_03_a/lib/title_screen/title_screen.dart b/next-gen-ui/step_03_a/lib/title_screen/title_screen.dart index 7d7f32a6fe..f03d72cfaa 100644 --- a/next-gen-ui/step_03_a/lib/title_screen/title_screen.dart +++ b/next-gen-ui/step_03_a/lib/title_screen/title_screen.dart @@ -73,9 +73,7 @@ class TitleScreen extends StatelessWidget { ), /// UI - const Positioned.fill( - child: TitleScreenUi(), - ), + const Positioned.fill(child: TitleScreenUi()), ], ), ), diff --git a/next-gen-ui/step_03_a/lib/title_screen/title_screen_ui.dart b/next-gen-ui/step_03_a/lib/title_screen/title_screen_ui.dart index 63f726ef94..ddefb308b6 100644 --- a/next-gen-ui/step_03_a/lib/title_screen/title_screen_ui.dart +++ b/next-gen-ui/step_03_a/lib/title_screen/title_screen_ui.dart @@ -11,9 +11,7 @@ import '../common/ui_scaler.dart'; import '../styles.dart'; class TitleScreenUi extends StatelessWidget { - const TitleScreenUi({ - super.key, - }); + const TitleScreenUi({super.key}); @override Widget build(BuildContext context) { return const Padding( @@ -22,10 +20,7 @@ class TitleScreenUi extends StatelessWidget { children: [ /// Title Text TopLeft( - child: UiScaler( - alignment: Alignment.topLeft, - child: _TitleText(), - ), + child: UiScaler(alignment: Alignment.topLeft, child: _TitleText()), ), ], ), diff --git a/next-gen-ui/step_03_a/pubspec.yaml b/next-gen-ui/step_03_a/pubspec.yaml index dd3eb24959..7fd82808a1 100644 --- a/next-gen-ui/step_03_a/pubspec.yaml +++ b/next-gen-ui/step_03_a/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: 'none' version: 0.1.0 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 dependencies: flutter: diff --git a/next-gen-ui/step_03_b/lib/assets.dart b/next-gen-ui/step_03_b/lib/assets.dart index d0286c9a12..440dab3f61 100644 --- a/next-gen-ui/step_03_b/lib/assets.dart +++ b/next-gen-ui/step_03_b/lib/assets.dart @@ -32,9 +32,9 @@ class AssetPaths { typedef FragmentPrograms = ({FragmentProgram orb, FragmentProgram ui}); Future loadFragmentPrograms() async => ( - orb: (await _loadFragmentProgram(AssetPaths.orbShader)), - ui: (await _loadFragmentProgram(AssetPaths.uiShader)), - ); + orb: (await _loadFragmentProgram(AssetPaths.orbShader)), + ui: (await _loadFragmentProgram(AssetPaths.uiShader)), +); Future _loadFragmentProgram(String path) async { return (await FragmentProgram.fromAsset(path)); diff --git a/next-gen-ui/step_03_b/lib/common/reactive_widget.dart b/next-gen-ui/step_03_b/lib/common/reactive_widget.dart index c75aa491e9..f480d8b3eb 100644 --- a/next-gen-ui/step_03_b/lib/common/reactive_widget.dart +++ b/next-gen-ui/step_03_b/lib/common/reactive_widget.dart @@ -6,14 +6,11 @@ import 'package:flutter/material.dart'; import 'ticking_builder.dart'; -typedef ReactiveWidgetBuilder = Widget Function( - BuildContext context, double time, Size bounds); +typedef ReactiveWidgetBuilder = + Widget Function(BuildContext context, double time, Size bounds); class ReactiveWidget extends StatefulWidget { - const ReactiveWidget({ - super.key, - required this.builder, - }); + const ReactiveWidget({super.key, required this.builder}); final ReactiveWidgetBuilder builder; @override State createState() => _ReactiveWidgetState(); diff --git a/next-gen-ui/step_03_b/lib/common/shader_effect.dart b/next-gen-ui/step_03_b/lib/common/shader_effect.dart index 69bd75f7d9..7e6ebe8bdf 100644 --- a/next-gen-ui/step_03_b/lib/common/shader_effect.dart +++ b/next-gen-ui/step_03_b/lib/common/shader_effect.dart @@ -32,11 +32,8 @@ class ShaderEffect extends Effect { this.shader, this.update, ShaderLayer? layer, - }) : layer = layer ?? ShaderLayer.replace, - super( - begin: 0, - end: 1, - ); + }) : layer = layer ?? ShaderLayer.replace, + super(begin: 0, end: 1); final ui.FragmentShader? shader; final ShaderUpdateCallback? update; @@ -91,22 +88,28 @@ extension ShaderEffectExtensions on AnimateManager { ui.FragmentShader? shader, ShaderUpdateCallback? update, ShaderLayer? layer, - }) => - addEffect(ShaderEffect( - delay: delay, - duration: duration, - curve: curve, - shader: shader, - update: update, - layer: layer, - )); + }) => addEffect( + ShaderEffect( + delay: delay, + duration: duration, + curve: curve, + shader: shader, + update: update, + layer: layer, + ), + ); } enum ShaderLayer { foreground, background, replace } /// Function signature for [ShaderEffect] update handlers. -typedef ShaderUpdateCallback = EdgeInsets? Function( - ui.FragmentShader shader, double value, Size size, ui.Image image); +typedef ShaderUpdateCallback = + EdgeInsets? Function( + ui.FragmentShader shader, + double value, + Size size, + ui.Image image, + ); /******************************************************************************/ // TODO: add this as a dependency instead of copying it in once it is stable: @@ -117,11 +120,8 @@ typedef ShaderUpdateCallback = EdgeInsets? Function( // found in the LICENSE file. /// A callback for the [AnimatedSamplerBuilder] widget. -typedef AnimatedSamplerBuilder = void Function( - ui.Image image, - Size size, - ui.Canvas canvas, -); +typedef AnimatedSamplerBuilder = + void Function(ui.Image image, Size size, ui.Canvas canvas); /// A widget that allows access to a snapshot of the child widgets for painting /// with a sampler applied to a [FragmentProgram]. @@ -181,11 +181,7 @@ class AnimatedSampler extends StatelessWidget { @override Widget build(BuildContext context) { - return _ShaderSamplerBuilder( - builder, - enabled: enabled, - child: child, - ); + return _ShaderSamplerBuilder(builder, enabled: enabled, child: child); } } @@ -210,7 +206,9 @@ class _ShaderSamplerBuilder extends SingleChildRenderObjectWidget { @override void updateRenderObject( - BuildContext context, covariant RenderObject renderObject) { + BuildContext context, + covariant RenderObject renderObject, + ) { (renderObject as _RenderShaderSamplerBuilderWidget) ..devicePixelRatio = MediaQuery.of(context).devicePixelRatio ..builder = builder @@ -226,13 +224,14 @@ class _RenderShaderSamplerBuilderWidget extends RenderProxyBox { required double devicePixelRatio, required AnimatedSamplerBuilder builder, required bool enabled, - }) : _devicePixelRatio = devicePixelRatio, - _builder = builder, - _enabled = enabled; + }) : _devicePixelRatio = devicePixelRatio, + _builder = builder, + _enabled = enabled; @override - OffsetLayer updateCompositedLayer( - {required covariant _ShaderSamplerBuilderLayer? oldLayer}) { + OffsetLayer updateCompositedLayer({ + required covariant _ShaderSamplerBuilderLayer? oldLayer, + }) { final _ShaderSamplerBuilderLayer layer = oldLayer ?? _ShaderSamplerBuilderLayer(builder); layer @@ -328,24 +327,24 @@ class _ShaderSamplerBuilderLayer extends OffsetLayer { ui.Image _buildChildScene(Rect bounds, double pixelRatio) { final ui.SceneBuilder builder = ui.SceneBuilder(); - final Matrix4 transform = - Matrix4.diagonal3Values(pixelRatio, pixelRatio, 1); + final Matrix4 transform = Matrix4.diagonal3Values( + pixelRatio, + pixelRatio, + 1, + ); builder.pushTransform(transform.storage); addChildrenToScene(builder); builder.pop(); return builder.build().toImageSync( - (pixelRatio * bounds.width).ceil(), - (pixelRatio * bounds.height).ceil(), - ); + (pixelRatio * bounds.width).ceil(), + (pixelRatio * bounds.height).ceil(), + ); } @override void addToScene(ui.SceneBuilder builder) { if (size.isEmpty) return; - final ui.Image image = _buildChildScene( - offset & size, - devicePixelRatio, - ); + final ui.Image image = _buildChildScene(offset & size, devicePixelRatio); final ui.PictureRecorder pictureRecorder = ui.PictureRecorder(); final Canvas canvas = Canvas(pictureRecorder); try { diff --git a/next-gen-ui/step_03_b/lib/common/ui_scaler.dart b/next-gen-ui/step_03_b/lib/common/ui_scaler.dart index 07c3287650..e7dbb9be42 100644 --- a/next-gen-ui/step_03_b/lib/common/ui_scaler.dart +++ b/next-gen-ui/step_03_b/lib/common/ui_scaler.dart @@ -22,10 +22,6 @@ class UiScaler extends StatelessWidget { Widget build(BuildContext context) { final screenSize = MediaQuery.of(context).size; final double scale = min(screenSize.height / referenceHeight, 1.0); - return Transform.scale( - scale: scale, - alignment: alignment, - child: child, - ); + return Transform.scale(scale: scale, alignment: alignment, child: child); } } diff --git a/next-gen-ui/step_03_b/lib/orb_shader/orb_shader_config.dart b/next-gen-ui/step_03_b/lib/orb_shader/orb_shader_config.dart index ef975cccf8..a038e0be63 100644 --- a/next-gen-ui/step_03_b/lib/orb_shader/orb_shader_config.dart +++ b/next-gen-ui/step_03_b/lib/orb_shader/orb_shader_config.dart @@ -22,14 +22,14 @@ class OrbShaderConfig { this.lightOffsetX = 0, this.lightOffsetY = 0.1, this.lightOffsetZ = -0.66, - }) : assert(zoom >= 0 && zoom <= 1), - assert(exposure >= 0), - assert(metalness >= 0 && metalness <= 1), - assert(lightRadius >= 0), - assert(lightBrightness >= 1), - assert(ior >= 0 && ior <= 2), - assert(lightAttenuation >= 0 && lightAttenuation <= 1), - assert(ambientLightBrightness >= 0); + }) : assert(zoom >= 0 && zoom <= 1), + assert(exposure >= 0), + assert(metalness >= 0 && metalness <= 1), + assert(lightRadius >= 0), + assert(lightBrightness >= 1), + assert(ior >= 0 && ior <= 2), + assert(lightAttenuation >= 0 && lightAttenuation <= 1), + assert(ambientLightBrightness >= 0); final double zoom; diff --git a/next-gen-ui/step_03_b/lib/orb_shader/orb_shader_painter.dart b/next-gen-ui/step_03_b/lib/orb_shader/orb_shader_painter.dart index 399c20ab7e..1e04cc0df8 100644 --- a/next-gen-ui/step_03_b/lib/orb_shader/orb_shader_painter.dart +++ b/next-gen-ui/step_03_b/lib/orb_shader/orb_shader_painter.dart @@ -30,11 +30,13 @@ class OrbShaderPainter extends CustomPainter { v64.Vector3 colorToVector3(Color c) => v64.Vector3(c.r, c.g, c.b); - v64.Vector3 lightLumP = colorToVector3(config.lightColor).normalized() * + v64.Vector3 lightLumP = + colorToVector3(config.lightColor).normalized() * max(0.0, config.lightBrightness); v64.Vector3 albedo = colorToVector3(config.materialColor); - v64.Vector3 ambientLight = colorToVector3(config.ambientLightColor) * + v64.Vector3 ambientLight = + colorToVector3(config.ambientLightColor) * max(0.0, config.ambientLightBrightness); shader.setFloat(0, size.width); diff --git a/next-gen-ui/step_03_b/lib/orb_shader/orb_shader_widget.dart b/next-gen-ui/step_03_b/lib/orb_shader/orb_shader_widget.dart index 573b68afea..4187e7ced2 100644 --- a/next-gen-ui/step_03_b/lib/orb_shader/orb_shader_widget.dart +++ b/next-gen-ui/step_03_b/lib/orb_shader/orb_shader_widget.dart @@ -35,72 +35,82 @@ class OrbShaderWidget extends StatefulWidget { class OrbShaderWidgetState extends State with SingleTickerProviderStateMixin { - final _heartbeatSequence = TweenSequence( - [ - TweenSequenceItem(tween: ConstantTween(0), weight: 40), - TweenSequenceItem( - tween: Tween(begin: 0.0, end: 1.0) - .chain(CurveTween(curve: Curves.easeInOutCubic)), - weight: 8), - TweenSequenceItem( - tween: Tween(begin: 1.0, end: 0.2) - .chain(CurveTween(curve: Curves.easeInOutCubic)), - weight: 12), - TweenSequenceItem( - tween: Tween(begin: 0.2, end: 0.8) - .chain(CurveTween(curve: Curves.easeInOutCubic)), - weight: 6), - TweenSequenceItem( - tween: Tween(begin: 0.8, end: 0.0) - .chain(CurveTween(curve: Curves.easeInOutCubic)), - weight: 10), - ], - ); + final _heartbeatSequence = TweenSequence([ + TweenSequenceItem(tween: ConstantTween(0), weight: 40), + TweenSequenceItem( + tween: Tween( + begin: 0.0, + end: 1.0, + ).chain(CurveTween(curve: Curves.easeInOutCubic)), + weight: 8, + ), + TweenSequenceItem( + tween: Tween( + begin: 1.0, + end: 0.2, + ).chain(CurveTween(curve: Curves.easeInOutCubic)), + weight: 12, + ), + TweenSequenceItem( + tween: Tween( + begin: 0.2, + end: 0.8, + ).chain(CurveTween(curve: Curves.easeInOutCubic)), + weight: 6, + ), + TweenSequenceItem( + tween: Tween( + begin: 0.8, + end: 0.0, + ).chain(CurveTween(curve: Curves.easeInOutCubic)), + weight: 10, + ), + ]); - late final _heartbeatAnim = - AnimationController(vsync: this, duration: 3000.ms)..repeat(); + late final _heartbeatAnim = AnimationController( + vsync: this, + duration: 3000.ms, + )..repeat(); @override Widget build(BuildContext context) => Consumer( - builder: (context, fragmentPrograms, _) { - if (fragmentPrograms == null) return const SizedBox.expand(); - return ListenableBuilder( - listenable: _heartbeatAnim, - builder: (_, __) { - final heartbeatEnergy = - _heartbeatAnim.drive(_heartbeatSequence).value; - return TweenAnimationBuilder( - tween: Tween( - begin: widget.minEnergy, end: widget.minEnergy), - duration: 300.ms, - curve: Curves.easeOutCubic, - builder: (context, minEnergy, child) { - return ReactiveWidget( - builder: (context, time, size) { - double energyLevel = 0; - if (size.shortestSide != 0) { - final d = (Offset(size.width, size.height) / 2 - - widget.mousePos) + builder: (context, fragmentPrograms, _) { + if (fragmentPrograms == null) return const SizedBox.expand(); + return ListenableBuilder( + listenable: _heartbeatAnim, + builder: (_, __) { + final heartbeatEnergy = + _heartbeatAnim.drive(_heartbeatSequence).value; + return TweenAnimationBuilder( + tween: Tween( + begin: widget.minEnergy, + end: widget.minEnergy, + ), + duration: 300.ms, + curve: Curves.easeOutCubic, + builder: (context, minEnergy, child) { + return ReactiveWidget( + builder: (context, time, size) { + double energyLevel = 0; + if (size.shortestSide != 0) { + final d = + (Offset(size.width, size.height) / 2 - widget.mousePos) .distance; - final hitSize = size.shortestSide * .5; - energyLevel = 1 - min(1, (d / hitSize)); - scheduleMicrotask( - () => widget.onUpdate?.call(energyLevel)); - } - energyLevel += - (1.3 - energyLevel) * heartbeatEnergy * 0.1; - energyLevel = lerpDouble(minEnergy, 1, energyLevel)!; - return CustomPaint( - size: size, - painter: OrbShaderPainter( - fragmentPrograms.orb.fragmentShader(), - config: widget.config, - time: time, - mousePos: widget.mousePos, - energy: energyLevel, - ), - ); - }, + final hitSize = size.shortestSide * .5; + energyLevel = 1 - min(1, (d / hitSize)); + scheduleMicrotask(() => widget.onUpdate?.call(energyLevel)); + } + energyLevel += (1.3 - energyLevel) * heartbeatEnergy * 0.1; + energyLevel = lerpDouble(minEnergy, 1, energyLevel)!; + return CustomPaint( + size: size, + painter: OrbShaderPainter( + fragmentPrograms.orb.fragmentShader(), + config: widget.config, + time: time, + mousePos: widget.mousePos, + energy: energyLevel, + ), ); }, ); @@ -108,4 +118,6 @@ class OrbShaderWidgetState extends State ); }, ); + }, + ); } diff --git a/next-gen-ui/step_03_b/lib/styles.dart b/next-gen-ui/step_03_b/lib/styles.dart index 1e449fff3a..fb5083c6a8 100644 --- a/next-gen-ui/step_03_b/lib/styles.dart +++ b/next-gen-ui/step_03_b/lib/styles.dart @@ -8,16 +8,19 @@ class TextStyles { static const _font1 = TextStyle(fontFamily: 'Exo', color: Colors.white); static TextStyle get h1 => _font1.copyWith( - fontSize: 75, letterSpacing: 35, fontWeight: FontWeight.w700); + fontSize: 75, + letterSpacing: 35, + fontWeight: FontWeight.w700, + ); static TextStyle get h2 => h1.copyWith(fontSize: 40, letterSpacing: 0); static TextStyle get h3 => h1.copyWith(fontSize: 24, letterSpacing: 20, fontWeight: FontWeight.w400); static TextStyle get body => _font1.copyWith(fontSize: 16); static TextStyle get btn => _font1.copyWith( - fontSize: 16, - fontWeight: FontWeight.bold, - letterSpacing: 10, - ); + fontSize: 16, + fontWeight: FontWeight.bold, + letterSpacing: 10, + ); } abstract class AppColors { diff --git a/next-gen-ui/step_03_b/lib/title_screen/title_screen_ui.dart b/next-gen-ui/step_03_b/lib/title_screen/title_screen_ui.dart index 5ab4f262e2..7d790b0fec 100644 --- a/next-gen-ui/step_03_b/lib/title_screen/title_screen_ui.dart +++ b/next-gen-ui/step_03_b/lib/title_screen/title_screen_ui.dart @@ -31,10 +31,7 @@ class TitleScreenUi extends StatelessWidget { children: [ /// Title Text const TopLeft( - child: UiScaler( - alignment: Alignment.topLeft, - child: _TitleText(), - ), + child: UiScaler(alignment: Alignment.topLeft, child: _TitleText()), ), /// Difficulty Btns @@ -165,18 +162,14 @@ class _DifficultyBtn extends StatelessWidget { /// cross-hairs (selected state) if (selected) ...[ - CenterLeft( - child: Image.asset(AssetPaths.titleSelectedLeft), - ), + CenterLeft(child: Image.asset(AssetPaths.titleSelectedLeft)), CenterRight( child: Image.asset(AssetPaths.titleSelectedRight), ), ], /// Label - Center( - child: Text(label.toUpperCase(), style: TextStyles.btn), - ), + Center(child: Text(label.toUpperCase(), style: TextStyles.btn)), ], ), ), diff --git a/next-gen-ui/step_03_b/pubspec.yaml b/next-gen-ui/step_03_b/pubspec.yaml index dd3eb24959..7fd82808a1 100644 --- a/next-gen-ui/step_03_b/pubspec.yaml +++ b/next-gen-ui/step_03_b/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: 'none' version: 0.1.0 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 dependencies: flutter: diff --git a/next-gen-ui/step_03_c/lib/assets.dart b/next-gen-ui/step_03_c/lib/assets.dart index d0286c9a12..440dab3f61 100644 --- a/next-gen-ui/step_03_c/lib/assets.dart +++ b/next-gen-ui/step_03_c/lib/assets.dart @@ -32,9 +32,9 @@ class AssetPaths { typedef FragmentPrograms = ({FragmentProgram orb, FragmentProgram ui}); Future loadFragmentPrograms() async => ( - orb: (await _loadFragmentProgram(AssetPaths.orbShader)), - ui: (await _loadFragmentProgram(AssetPaths.uiShader)), - ); + orb: (await _loadFragmentProgram(AssetPaths.orbShader)), + ui: (await _loadFragmentProgram(AssetPaths.uiShader)), +); Future _loadFragmentProgram(String path) async { return (await FragmentProgram.fromAsset(path)); diff --git a/next-gen-ui/step_03_c/lib/common/reactive_widget.dart b/next-gen-ui/step_03_c/lib/common/reactive_widget.dart index c75aa491e9..f480d8b3eb 100644 --- a/next-gen-ui/step_03_c/lib/common/reactive_widget.dart +++ b/next-gen-ui/step_03_c/lib/common/reactive_widget.dart @@ -6,14 +6,11 @@ import 'package:flutter/material.dart'; import 'ticking_builder.dart'; -typedef ReactiveWidgetBuilder = Widget Function( - BuildContext context, double time, Size bounds); +typedef ReactiveWidgetBuilder = + Widget Function(BuildContext context, double time, Size bounds); class ReactiveWidget extends StatefulWidget { - const ReactiveWidget({ - super.key, - required this.builder, - }); + const ReactiveWidget({super.key, required this.builder}); final ReactiveWidgetBuilder builder; @override State createState() => _ReactiveWidgetState(); diff --git a/next-gen-ui/step_03_c/lib/common/shader_effect.dart b/next-gen-ui/step_03_c/lib/common/shader_effect.dart index 69bd75f7d9..7e6ebe8bdf 100644 --- a/next-gen-ui/step_03_c/lib/common/shader_effect.dart +++ b/next-gen-ui/step_03_c/lib/common/shader_effect.dart @@ -32,11 +32,8 @@ class ShaderEffect extends Effect { this.shader, this.update, ShaderLayer? layer, - }) : layer = layer ?? ShaderLayer.replace, - super( - begin: 0, - end: 1, - ); + }) : layer = layer ?? ShaderLayer.replace, + super(begin: 0, end: 1); final ui.FragmentShader? shader; final ShaderUpdateCallback? update; @@ -91,22 +88,28 @@ extension ShaderEffectExtensions on AnimateManager { ui.FragmentShader? shader, ShaderUpdateCallback? update, ShaderLayer? layer, - }) => - addEffect(ShaderEffect( - delay: delay, - duration: duration, - curve: curve, - shader: shader, - update: update, - layer: layer, - )); + }) => addEffect( + ShaderEffect( + delay: delay, + duration: duration, + curve: curve, + shader: shader, + update: update, + layer: layer, + ), + ); } enum ShaderLayer { foreground, background, replace } /// Function signature for [ShaderEffect] update handlers. -typedef ShaderUpdateCallback = EdgeInsets? Function( - ui.FragmentShader shader, double value, Size size, ui.Image image); +typedef ShaderUpdateCallback = + EdgeInsets? Function( + ui.FragmentShader shader, + double value, + Size size, + ui.Image image, + ); /******************************************************************************/ // TODO: add this as a dependency instead of copying it in once it is stable: @@ -117,11 +120,8 @@ typedef ShaderUpdateCallback = EdgeInsets? Function( // found in the LICENSE file. /// A callback for the [AnimatedSamplerBuilder] widget. -typedef AnimatedSamplerBuilder = void Function( - ui.Image image, - Size size, - ui.Canvas canvas, -); +typedef AnimatedSamplerBuilder = + void Function(ui.Image image, Size size, ui.Canvas canvas); /// A widget that allows access to a snapshot of the child widgets for painting /// with a sampler applied to a [FragmentProgram]. @@ -181,11 +181,7 @@ class AnimatedSampler extends StatelessWidget { @override Widget build(BuildContext context) { - return _ShaderSamplerBuilder( - builder, - enabled: enabled, - child: child, - ); + return _ShaderSamplerBuilder(builder, enabled: enabled, child: child); } } @@ -210,7 +206,9 @@ class _ShaderSamplerBuilder extends SingleChildRenderObjectWidget { @override void updateRenderObject( - BuildContext context, covariant RenderObject renderObject) { + BuildContext context, + covariant RenderObject renderObject, + ) { (renderObject as _RenderShaderSamplerBuilderWidget) ..devicePixelRatio = MediaQuery.of(context).devicePixelRatio ..builder = builder @@ -226,13 +224,14 @@ class _RenderShaderSamplerBuilderWidget extends RenderProxyBox { required double devicePixelRatio, required AnimatedSamplerBuilder builder, required bool enabled, - }) : _devicePixelRatio = devicePixelRatio, - _builder = builder, - _enabled = enabled; + }) : _devicePixelRatio = devicePixelRatio, + _builder = builder, + _enabled = enabled; @override - OffsetLayer updateCompositedLayer( - {required covariant _ShaderSamplerBuilderLayer? oldLayer}) { + OffsetLayer updateCompositedLayer({ + required covariant _ShaderSamplerBuilderLayer? oldLayer, + }) { final _ShaderSamplerBuilderLayer layer = oldLayer ?? _ShaderSamplerBuilderLayer(builder); layer @@ -328,24 +327,24 @@ class _ShaderSamplerBuilderLayer extends OffsetLayer { ui.Image _buildChildScene(Rect bounds, double pixelRatio) { final ui.SceneBuilder builder = ui.SceneBuilder(); - final Matrix4 transform = - Matrix4.diagonal3Values(pixelRatio, pixelRatio, 1); + final Matrix4 transform = Matrix4.diagonal3Values( + pixelRatio, + pixelRatio, + 1, + ); builder.pushTransform(transform.storage); addChildrenToScene(builder); builder.pop(); return builder.build().toImageSync( - (pixelRatio * bounds.width).ceil(), - (pixelRatio * bounds.height).ceil(), - ); + (pixelRatio * bounds.width).ceil(), + (pixelRatio * bounds.height).ceil(), + ); } @override void addToScene(ui.SceneBuilder builder) { if (size.isEmpty) return; - final ui.Image image = _buildChildScene( - offset & size, - devicePixelRatio, - ); + final ui.Image image = _buildChildScene(offset & size, devicePixelRatio); final ui.PictureRecorder pictureRecorder = ui.PictureRecorder(); final Canvas canvas = Canvas(pictureRecorder); try { diff --git a/next-gen-ui/step_03_c/lib/common/ui_scaler.dart b/next-gen-ui/step_03_c/lib/common/ui_scaler.dart index 07c3287650..e7dbb9be42 100644 --- a/next-gen-ui/step_03_c/lib/common/ui_scaler.dart +++ b/next-gen-ui/step_03_c/lib/common/ui_scaler.dart @@ -22,10 +22,6 @@ class UiScaler extends StatelessWidget { Widget build(BuildContext context) { final screenSize = MediaQuery.of(context).size; final double scale = min(screenSize.height / referenceHeight, 1.0); - return Transform.scale( - scale: scale, - alignment: alignment, - child: child, - ); + return Transform.scale(scale: scale, alignment: alignment, child: child); } } diff --git a/next-gen-ui/step_03_c/lib/orb_shader/orb_shader_config.dart b/next-gen-ui/step_03_c/lib/orb_shader/orb_shader_config.dart index ef975cccf8..a038e0be63 100644 --- a/next-gen-ui/step_03_c/lib/orb_shader/orb_shader_config.dart +++ b/next-gen-ui/step_03_c/lib/orb_shader/orb_shader_config.dart @@ -22,14 +22,14 @@ class OrbShaderConfig { this.lightOffsetX = 0, this.lightOffsetY = 0.1, this.lightOffsetZ = -0.66, - }) : assert(zoom >= 0 && zoom <= 1), - assert(exposure >= 0), - assert(metalness >= 0 && metalness <= 1), - assert(lightRadius >= 0), - assert(lightBrightness >= 1), - assert(ior >= 0 && ior <= 2), - assert(lightAttenuation >= 0 && lightAttenuation <= 1), - assert(ambientLightBrightness >= 0); + }) : assert(zoom >= 0 && zoom <= 1), + assert(exposure >= 0), + assert(metalness >= 0 && metalness <= 1), + assert(lightRadius >= 0), + assert(lightBrightness >= 1), + assert(ior >= 0 && ior <= 2), + assert(lightAttenuation >= 0 && lightAttenuation <= 1), + assert(ambientLightBrightness >= 0); final double zoom; diff --git a/next-gen-ui/step_03_c/lib/orb_shader/orb_shader_painter.dart b/next-gen-ui/step_03_c/lib/orb_shader/orb_shader_painter.dart index 399c20ab7e..1e04cc0df8 100644 --- a/next-gen-ui/step_03_c/lib/orb_shader/orb_shader_painter.dart +++ b/next-gen-ui/step_03_c/lib/orb_shader/orb_shader_painter.dart @@ -30,11 +30,13 @@ class OrbShaderPainter extends CustomPainter { v64.Vector3 colorToVector3(Color c) => v64.Vector3(c.r, c.g, c.b); - v64.Vector3 lightLumP = colorToVector3(config.lightColor).normalized() * + v64.Vector3 lightLumP = + colorToVector3(config.lightColor).normalized() * max(0.0, config.lightBrightness); v64.Vector3 albedo = colorToVector3(config.materialColor); - v64.Vector3 ambientLight = colorToVector3(config.ambientLightColor) * + v64.Vector3 ambientLight = + colorToVector3(config.ambientLightColor) * max(0.0, config.ambientLightBrightness); shader.setFloat(0, size.width); diff --git a/next-gen-ui/step_03_c/lib/orb_shader/orb_shader_widget.dart b/next-gen-ui/step_03_c/lib/orb_shader/orb_shader_widget.dart index 573b68afea..4187e7ced2 100644 --- a/next-gen-ui/step_03_c/lib/orb_shader/orb_shader_widget.dart +++ b/next-gen-ui/step_03_c/lib/orb_shader/orb_shader_widget.dart @@ -35,72 +35,82 @@ class OrbShaderWidget extends StatefulWidget { class OrbShaderWidgetState extends State with SingleTickerProviderStateMixin { - final _heartbeatSequence = TweenSequence( - [ - TweenSequenceItem(tween: ConstantTween(0), weight: 40), - TweenSequenceItem( - tween: Tween(begin: 0.0, end: 1.0) - .chain(CurveTween(curve: Curves.easeInOutCubic)), - weight: 8), - TweenSequenceItem( - tween: Tween(begin: 1.0, end: 0.2) - .chain(CurveTween(curve: Curves.easeInOutCubic)), - weight: 12), - TweenSequenceItem( - tween: Tween(begin: 0.2, end: 0.8) - .chain(CurveTween(curve: Curves.easeInOutCubic)), - weight: 6), - TweenSequenceItem( - tween: Tween(begin: 0.8, end: 0.0) - .chain(CurveTween(curve: Curves.easeInOutCubic)), - weight: 10), - ], - ); + final _heartbeatSequence = TweenSequence([ + TweenSequenceItem(tween: ConstantTween(0), weight: 40), + TweenSequenceItem( + tween: Tween( + begin: 0.0, + end: 1.0, + ).chain(CurveTween(curve: Curves.easeInOutCubic)), + weight: 8, + ), + TweenSequenceItem( + tween: Tween( + begin: 1.0, + end: 0.2, + ).chain(CurveTween(curve: Curves.easeInOutCubic)), + weight: 12, + ), + TweenSequenceItem( + tween: Tween( + begin: 0.2, + end: 0.8, + ).chain(CurveTween(curve: Curves.easeInOutCubic)), + weight: 6, + ), + TweenSequenceItem( + tween: Tween( + begin: 0.8, + end: 0.0, + ).chain(CurveTween(curve: Curves.easeInOutCubic)), + weight: 10, + ), + ]); - late final _heartbeatAnim = - AnimationController(vsync: this, duration: 3000.ms)..repeat(); + late final _heartbeatAnim = AnimationController( + vsync: this, + duration: 3000.ms, + )..repeat(); @override Widget build(BuildContext context) => Consumer( - builder: (context, fragmentPrograms, _) { - if (fragmentPrograms == null) return const SizedBox.expand(); - return ListenableBuilder( - listenable: _heartbeatAnim, - builder: (_, __) { - final heartbeatEnergy = - _heartbeatAnim.drive(_heartbeatSequence).value; - return TweenAnimationBuilder( - tween: Tween( - begin: widget.minEnergy, end: widget.minEnergy), - duration: 300.ms, - curve: Curves.easeOutCubic, - builder: (context, minEnergy, child) { - return ReactiveWidget( - builder: (context, time, size) { - double energyLevel = 0; - if (size.shortestSide != 0) { - final d = (Offset(size.width, size.height) / 2 - - widget.mousePos) + builder: (context, fragmentPrograms, _) { + if (fragmentPrograms == null) return const SizedBox.expand(); + return ListenableBuilder( + listenable: _heartbeatAnim, + builder: (_, __) { + final heartbeatEnergy = + _heartbeatAnim.drive(_heartbeatSequence).value; + return TweenAnimationBuilder( + tween: Tween( + begin: widget.minEnergy, + end: widget.minEnergy, + ), + duration: 300.ms, + curve: Curves.easeOutCubic, + builder: (context, minEnergy, child) { + return ReactiveWidget( + builder: (context, time, size) { + double energyLevel = 0; + if (size.shortestSide != 0) { + final d = + (Offset(size.width, size.height) / 2 - widget.mousePos) .distance; - final hitSize = size.shortestSide * .5; - energyLevel = 1 - min(1, (d / hitSize)); - scheduleMicrotask( - () => widget.onUpdate?.call(energyLevel)); - } - energyLevel += - (1.3 - energyLevel) * heartbeatEnergy * 0.1; - energyLevel = lerpDouble(minEnergy, 1, energyLevel)!; - return CustomPaint( - size: size, - painter: OrbShaderPainter( - fragmentPrograms.orb.fragmentShader(), - config: widget.config, - time: time, - mousePos: widget.mousePos, - energy: energyLevel, - ), - ); - }, + final hitSize = size.shortestSide * .5; + energyLevel = 1 - min(1, (d / hitSize)); + scheduleMicrotask(() => widget.onUpdate?.call(energyLevel)); + } + energyLevel += (1.3 - energyLevel) * heartbeatEnergy * 0.1; + energyLevel = lerpDouble(minEnergy, 1, energyLevel)!; + return CustomPaint( + size: size, + painter: OrbShaderPainter( + fragmentPrograms.orb.fragmentShader(), + config: widget.config, + time: time, + mousePos: widget.mousePos, + energy: energyLevel, + ), ); }, ); @@ -108,4 +118,6 @@ class OrbShaderWidgetState extends State ); }, ); + }, + ); } diff --git a/next-gen-ui/step_03_c/lib/styles.dart b/next-gen-ui/step_03_c/lib/styles.dart index 1e449fff3a..fb5083c6a8 100644 --- a/next-gen-ui/step_03_c/lib/styles.dart +++ b/next-gen-ui/step_03_c/lib/styles.dart @@ -8,16 +8,19 @@ class TextStyles { static const _font1 = TextStyle(fontFamily: 'Exo', color: Colors.white); static TextStyle get h1 => _font1.copyWith( - fontSize: 75, letterSpacing: 35, fontWeight: FontWeight.w700); + fontSize: 75, + letterSpacing: 35, + fontWeight: FontWeight.w700, + ); static TextStyle get h2 => h1.copyWith(fontSize: 40, letterSpacing: 0); static TextStyle get h3 => h1.copyWith(fontSize: 24, letterSpacing: 20, fontWeight: FontWeight.w400); static TextStyle get body => _font1.copyWith(fontSize: 16); static TextStyle get btn => _font1.copyWith( - fontSize: 16, - fontWeight: FontWeight.bold, - letterSpacing: 10, - ); + fontSize: 16, + fontWeight: FontWeight.bold, + letterSpacing: 10, + ); } abstract class AppColors { diff --git a/next-gen-ui/step_03_c/lib/title_screen/title_screen_ui.dart b/next-gen-ui/step_03_c/lib/title_screen/title_screen_ui.dart index c2e83197c3..fbc0cd55cb 100644 --- a/next-gen-ui/step_03_c/lib/title_screen/title_screen_ui.dart +++ b/next-gen-ui/step_03_c/lib/title_screen/title_screen_ui.dart @@ -31,10 +31,7 @@ class TitleScreenUi extends StatelessWidget { children: [ /// Title Text const TopLeft( - child: UiScaler( - alignment: Alignment.topLeft, - child: _TitleText(), - ), + child: UiScaler(alignment: Alignment.topLeft, child: _TitleText()), ), /// Difficulty Btns @@ -176,18 +173,14 @@ class _DifficultyBtn extends StatelessWidget { /// cross-hairs (selected state) if (selected) ...[ - CenterLeft( - child: Image.asset(AssetPaths.titleSelectedLeft), - ), + CenterLeft(child: Image.asset(AssetPaths.titleSelectedLeft)), CenterRight( child: Image.asset(AssetPaths.titleSelectedRight), ), ], /// Label - Center( - child: Text(label.toUpperCase(), style: TextStyles.btn), - ), + Center(child: Text(label.toUpperCase(), style: TextStyles.btn)), ], ), ), @@ -229,15 +222,20 @@ class _StartBtnState extends State<_StartBtn> { Positioned.fill(child: Image.asset(AssetPaths.titleStartBtn)), if (state.isHovered || state.isFocused) ...[ Positioned.fill( - child: Image.asset(AssetPaths.titleStartBtnHover)), + child: Image.asset(AssetPaths.titleStartBtnHover), + ), ], Center( child: Row( mainAxisAlignment: MainAxisAlignment.end, children: [ - Text('START MISSION', - style: TextStyles.btn - .copyWith(fontSize: 24, letterSpacing: 18)), + Text( + 'START MISSION', + style: TextStyles.btn.copyWith( + fontSize: 24, + letterSpacing: 18, + ), + ), ], ), ), diff --git a/next-gen-ui/step_03_c/pubspec.yaml b/next-gen-ui/step_03_c/pubspec.yaml index dd3eb24959..7fd82808a1 100644 --- a/next-gen-ui/step_03_c/pubspec.yaml +++ b/next-gen-ui/step_03_c/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: 'none' version: 0.1.0 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 dependencies: flutter: diff --git a/next-gen-ui/step_04_a/lib/assets.dart b/next-gen-ui/step_04_a/lib/assets.dart index d0286c9a12..440dab3f61 100644 --- a/next-gen-ui/step_04_a/lib/assets.dart +++ b/next-gen-ui/step_04_a/lib/assets.dart @@ -32,9 +32,9 @@ class AssetPaths { typedef FragmentPrograms = ({FragmentProgram orb, FragmentProgram ui}); Future loadFragmentPrograms() async => ( - orb: (await _loadFragmentProgram(AssetPaths.orbShader)), - ui: (await _loadFragmentProgram(AssetPaths.uiShader)), - ); + orb: (await _loadFragmentProgram(AssetPaths.orbShader)), + ui: (await _loadFragmentProgram(AssetPaths.uiShader)), +); Future _loadFragmentProgram(String path) async { return (await FragmentProgram.fromAsset(path)); diff --git a/next-gen-ui/step_04_a/lib/common/reactive_widget.dart b/next-gen-ui/step_04_a/lib/common/reactive_widget.dart index c75aa491e9..f480d8b3eb 100644 --- a/next-gen-ui/step_04_a/lib/common/reactive_widget.dart +++ b/next-gen-ui/step_04_a/lib/common/reactive_widget.dart @@ -6,14 +6,11 @@ import 'package:flutter/material.dart'; import 'ticking_builder.dart'; -typedef ReactiveWidgetBuilder = Widget Function( - BuildContext context, double time, Size bounds); +typedef ReactiveWidgetBuilder = + Widget Function(BuildContext context, double time, Size bounds); class ReactiveWidget extends StatefulWidget { - const ReactiveWidget({ - super.key, - required this.builder, - }); + const ReactiveWidget({super.key, required this.builder}); final ReactiveWidgetBuilder builder; @override State createState() => _ReactiveWidgetState(); diff --git a/next-gen-ui/step_04_a/lib/common/shader_effect.dart b/next-gen-ui/step_04_a/lib/common/shader_effect.dart index 69bd75f7d9..7e6ebe8bdf 100644 --- a/next-gen-ui/step_04_a/lib/common/shader_effect.dart +++ b/next-gen-ui/step_04_a/lib/common/shader_effect.dart @@ -32,11 +32,8 @@ class ShaderEffect extends Effect { this.shader, this.update, ShaderLayer? layer, - }) : layer = layer ?? ShaderLayer.replace, - super( - begin: 0, - end: 1, - ); + }) : layer = layer ?? ShaderLayer.replace, + super(begin: 0, end: 1); final ui.FragmentShader? shader; final ShaderUpdateCallback? update; @@ -91,22 +88,28 @@ extension ShaderEffectExtensions on AnimateManager { ui.FragmentShader? shader, ShaderUpdateCallback? update, ShaderLayer? layer, - }) => - addEffect(ShaderEffect( - delay: delay, - duration: duration, - curve: curve, - shader: shader, - update: update, - layer: layer, - )); + }) => addEffect( + ShaderEffect( + delay: delay, + duration: duration, + curve: curve, + shader: shader, + update: update, + layer: layer, + ), + ); } enum ShaderLayer { foreground, background, replace } /// Function signature for [ShaderEffect] update handlers. -typedef ShaderUpdateCallback = EdgeInsets? Function( - ui.FragmentShader shader, double value, Size size, ui.Image image); +typedef ShaderUpdateCallback = + EdgeInsets? Function( + ui.FragmentShader shader, + double value, + Size size, + ui.Image image, + ); /******************************************************************************/ // TODO: add this as a dependency instead of copying it in once it is stable: @@ -117,11 +120,8 @@ typedef ShaderUpdateCallback = EdgeInsets? Function( // found in the LICENSE file. /// A callback for the [AnimatedSamplerBuilder] widget. -typedef AnimatedSamplerBuilder = void Function( - ui.Image image, - Size size, - ui.Canvas canvas, -); +typedef AnimatedSamplerBuilder = + void Function(ui.Image image, Size size, ui.Canvas canvas); /// A widget that allows access to a snapshot of the child widgets for painting /// with a sampler applied to a [FragmentProgram]. @@ -181,11 +181,7 @@ class AnimatedSampler extends StatelessWidget { @override Widget build(BuildContext context) { - return _ShaderSamplerBuilder( - builder, - enabled: enabled, - child: child, - ); + return _ShaderSamplerBuilder(builder, enabled: enabled, child: child); } } @@ -210,7 +206,9 @@ class _ShaderSamplerBuilder extends SingleChildRenderObjectWidget { @override void updateRenderObject( - BuildContext context, covariant RenderObject renderObject) { + BuildContext context, + covariant RenderObject renderObject, + ) { (renderObject as _RenderShaderSamplerBuilderWidget) ..devicePixelRatio = MediaQuery.of(context).devicePixelRatio ..builder = builder @@ -226,13 +224,14 @@ class _RenderShaderSamplerBuilderWidget extends RenderProxyBox { required double devicePixelRatio, required AnimatedSamplerBuilder builder, required bool enabled, - }) : _devicePixelRatio = devicePixelRatio, - _builder = builder, - _enabled = enabled; + }) : _devicePixelRatio = devicePixelRatio, + _builder = builder, + _enabled = enabled; @override - OffsetLayer updateCompositedLayer( - {required covariant _ShaderSamplerBuilderLayer? oldLayer}) { + OffsetLayer updateCompositedLayer({ + required covariant _ShaderSamplerBuilderLayer? oldLayer, + }) { final _ShaderSamplerBuilderLayer layer = oldLayer ?? _ShaderSamplerBuilderLayer(builder); layer @@ -328,24 +327,24 @@ class _ShaderSamplerBuilderLayer extends OffsetLayer { ui.Image _buildChildScene(Rect bounds, double pixelRatio) { final ui.SceneBuilder builder = ui.SceneBuilder(); - final Matrix4 transform = - Matrix4.diagonal3Values(pixelRatio, pixelRatio, 1); + final Matrix4 transform = Matrix4.diagonal3Values( + pixelRatio, + pixelRatio, + 1, + ); builder.pushTransform(transform.storage); addChildrenToScene(builder); builder.pop(); return builder.build().toImageSync( - (pixelRatio * bounds.width).ceil(), - (pixelRatio * bounds.height).ceil(), - ); + (pixelRatio * bounds.width).ceil(), + (pixelRatio * bounds.height).ceil(), + ); } @override void addToScene(ui.SceneBuilder builder) { if (size.isEmpty) return; - final ui.Image image = _buildChildScene( - offset & size, - devicePixelRatio, - ); + final ui.Image image = _buildChildScene(offset & size, devicePixelRatio); final ui.PictureRecorder pictureRecorder = ui.PictureRecorder(); final Canvas canvas = Canvas(pictureRecorder); try { diff --git a/next-gen-ui/step_04_a/lib/common/ui_scaler.dart b/next-gen-ui/step_04_a/lib/common/ui_scaler.dart index 07c3287650..e7dbb9be42 100644 --- a/next-gen-ui/step_04_a/lib/common/ui_scaler.dart +++ b/next-gen-ui/step_04_a/lib/common/ui_scaler.dart @@ -22,10 +22,6 @@ class UiScaler extends StatelessWidget { Widget build(BuildContext context) { final screenSize = MediaQuery.of(context).size; final double scale = min(screenSize.height / referenceHeight, 1.0); - return Transform.scale( - scale: scale, - alignment: alignment, - child: child, - ); + return Transform.scale(scale: scale, alignment: alignment, child: child); } } diff --git a/next-gen-ui/step_04_a/lib/orb_shader/orb_shader_config.dart b/next-gen-ui/step_04_a/lib/orb_shader/orb_shader_config.dart index ef975cccf8..a038e0be63 100644 --- a/next-gen-ui/step_04_a/lib/orb_shader/orb_shader_config.dart +++ b/next-gen-ui/step_04_a/lib/orb_shader/orb_shader_config.dart @@ -22,14 +22,14 @@ class OrbShaderConfig { this.lightOffsetX = 0, this.lightOffsetY = 0.1, this.lightOffsetZ = -0.66, - }) : assert(zoom >= 0 && zoom <= 1), - assert(exposure >= 0), - assert(metalness >= 0 && metalness <= 1), - assert(lightRadius >= 0), - assert(lightBrightness >= 1), - assert(ior >= 0 && ior <= 2), - assert(lightAttenuation >= 0 && lightAttenuation <= 1), - assert(ambientLightBrightness >= 0); + }) : assert(zoom >= 0 && zoom <= 1), + assert(exposure >= 0), + assert(metalness >= 0 && metalness <= 1), + assert(lightRadius >= 0), + assert(lightBrightness >= 1), + assert(ior >= 0 && ior <= 2), + assert(lightAttenuation >= 0 && lightAttenuation <= 1), + assert(ambientLightBrightness >= 0); final double zoom; diff --git a/next-gen-ui/step_04_a/lib/orb_shader/orb_shader_painter.dart b/next-gen-ui/step_04_a/lib/orb_shader/orb_shader_painter.dart index 399c20ab7e..1e04cc0df8 100644 --- a/next-gen-ui/step_04_a/lib/orb_shader/orb_shader_painter.dart +++ b/next-gen-ui/step_04_a/lib/orb_shader/orb_shader_painter.dart @@ -30,11 +30,13 @@ class OrbShaderPainter extends CustomPainter { v64.Vector3 colorToVector3(Color c) => v64.Vector3(c.r, c.g, c.b); - v64.Vector3 lightLumP = colorToVector3(config.lightColor).normalized() * + v64.Vector3 lightLumP = + colorToVector3(config.lightColor).normalized() * max(0.0, config.lightBrightness); v64.Vector3 albedo = colorToVector3(config.materialColor); - v64.Vector3 ambientLight = colorToVector3(config.ambientLightColor) * + v64.Vector3 ambientLight = + colorToVector3(config.ambientLightColor) * max(0.0, config.ambientLightBrightness); shader.setFloat(0, size.width); diff --git a/next-gen-ui/step_04_a/lib/orb_shader/orb_shader_widget.dart b/next-gen-ui/step_04_a/lib/orb_shader/orb_shader_widget.dart index 573b68afea..4187e7ced2 100644 --- a/next-gen-ui/step_04_a/lib/orb_shader/orb_shader_widget.dart +++ b/next-gen-ui/step_04_a/lib/orb_shader/orb_shader_widget.dart @@ -35,72 +35,82 @@ class OrbShaderWidget extends StatefulWidget { class OrbShaderWidgetState extends State with SingleTickerProviderStateMixin { - final _heartbeatSequence = TweenSequence( - [ - TweenSequenceItem(tween: ConstantTween(0), weight: 40), - TweenSequenceItem( - tween: Tween(begin: 0.0, end: 1.0) - .chain(CurveTween(curve: Curves.easeInOutCubic)), - weight: 8), - TweenSequenceItem( - tween: Tween(begin: 1.0, end: 0.2) - .chain(CurveTween(curve: Curves.easeInOutCubic)), - weight: 12), - TweenSequenceItem( - tween: Tween(begin: 0.2, end: 0.8) - .chain(CurveTween(curve: Curves.easeInOutCubic)), - weight: 6), - TweenSequenceItem( - tween: Tween(begin: 0.8, end: 0.0) - .chain(CurveTween(curve: Curves.easeInOutCubic)), - weight: 10), - ], - ); + final _heartbeatSequence = TweenSequence([ + TweenSequenceItem(tween: ConstantTween(0), weight: 40), + TweenSequenceItem( + tween: Tween( + begin: 0.0, + end: 1.0, + ).chain(CurveTween(curve: Curves.easeInOutCubic)), + weight: 8, + ), + TweenSequenceItem( + tween: Tween( + begin: 1.0, + end: 0.2, + ).chain(CurveTween(curve: Curves.easeInOutCubic)), + weight: 12, + ), + TweenSequenceItem( + tween: Tween( + begin: 0.2, + end: 0.8, + ).chain(CurveTween(curve: Curves.easeInOutCubic)), + weight: 6, + ), + TweenSequenceItem( + tween: Tween( + begin: 0.8, + end: 0.0, + ).chain(CurveTween(curve: Curves.easeInOutCubic)), + weight: 10, + ), + ]); - late final _heartbeatAnim = - AnimationController(vsync: this, duration: 3000.ms)..repeat(); + late final _heartbeatAnim = AnimationController( + vsync: this, + duration: 3000.ms, + )..repeat(); @override Widget build(BuildContext context) => Consumer( - builder: (context, fragmentPrograms, _) { - if (fragmentPrograms == null) return const SizedBox.expand(); - return ListenableBuilder( - listenable: _heartbeatAnim, - builder: (_, __) { - final heartbeatEnergy = - _heartbeatAnim.drive(_heartbeatSequence).value; - return TweenAnimationBuilder( - tween: Tween( - begin: widget.minEnergy, end: widget.minEnergy), - duration: 300.ms, - curve: Curves.easeOutCubic, - builder: (context, minEnergy, child) { - return ReactiveWidget( - builder: (context, time, size) { - double energyLevel = 0; - if (size.shortestSide != 0) { - final d = (Offset(size.width, size.height) / 2 - - widget.mousePos) + builder: (context, fragmentPrograms, _) { + if (fragmentPrograms == null) return const SizedBox.expand(); + return ListenableBuilder( + listenable: _heartbeatAnim, + builder: (_, __) { + final heartbeatEnergy = + _heartbeatAnim.drive(_heartbeatSequence).value; + return TweenAnimationBuilder( + tween: Tween( + begin: widget.minEnergy, + end: widget.minEnergy, + ), + duration: 300.ms, + curve: Curves.easeOutCubic, + builder: (context, minEnergy, child) { + return ReactiveWidget( + builder: (context, time, size) { + double energyLevel = 0; + if (size.shortestSide != 0) { + final d = + (Offset(size.width, size.height) / 2 - widget.mousePos) .distance; - final hitSize = size.shortestSide * .5; - energyLevel = 1 - min(1, (d / hitSize)); - scheduleMicrotask( - () => widget.onUpdate?.call(energyLevel)); - } - energyLevel += - (1.3 - energyLevel) * heartbeatEnergy * 0.1; - energyLevel = lerpDouble(minEnergy, 1, energyLevel)!; - return CustomPaint( - size: size, - painter: OrbShaderPainter( - fragmentPrograms.orb.fragmentShader(), - config: widget.config, - time: time, - mousePos: widget.mousePos, - energy: energyLevel, - ), - ); - }, + final hitSize = size.shortestSide * .5; + energyLevel = 1 - min(1, (d / hitSize)); + scheduleMicrotask(() => widget.onUpdate?.call(energyLevel)); + } + energyLevel += (1.3 - energyLevel) * heartbeatEnergy * 0.1; + energyLevel = lerpDouble(minEnergy, 1, energyLevel)!; + return CustomPaint( + size: size, + painter: OrbShaderPainter( + fragmentPrograms.orb.fragmentShader(), + config: widget.config, + time: time, + mousePos: widget.mousePos, + energy: energyLevel, + ), ); }, ); @@ -108,4 +118,6 @@ class OrbShaderWidgetState extends State ); }, ); + }, + ); } diff --git a/next-gen-ui/step_04_a/lib/styles.dart b/next-gen-ui/step_04_a/lib/styles.dart index 1e449fff3a..fb5083c6a8 100644 --- a/next-gen-ui/step_04_a/lib/styles.dart +++ b/next-gen-ui/step_04_a/lib/styles.dart @@ -8,16 +8,19 @@ class TextStyles { static const _font1 = TextStyle(fontFamily: 'Exo', color: Colors.white); static TextStyle get h1 => _font1.copyWith( - fontSize: 75, letterSpacing: 35, fontWeight: FontWeight.w700); + fontSize: 75, + letterSpacing: 35, + fontWeight: FontWeight.w700, + ); static TextStyle get h2 => h1.copyWith(fontSize: 40, letterSpacing: 0); static TextStyle get h3 => h1.copyWith(fontSize: 24, letterSpacing: 20, fontWeight: FontWeight.w400); static TextStyle get body => _font1.copyWith(fontSize: 16); static TextStyle get btn => _font1.copyWith( - fontSize: 16, - fontWeight: FontWeight.bold, - letterSpacing: 10, - ); + fontSize: 16, + fontWeight: FontWeight.bold, + letterSpacing: 10, + ); } abstract class AppColors { diff --git a/next-gen-ui/step_04_a/lib/title_screen/title_screen_ui.dart b/next-gen-ui/step_04_a/lib/title_screen/title_screen_ui.dart index 8643ec908b..aaef7ba096 100644 --- a/next-gen-ui/step_04_a/lib/title_screen/title_screen_ui.dart +++ b/next-gen-ui/step_04_a/lib/title_screen/title_screen_ui.dart @@ -32,10 +32,7 @@ class TitleScreenUi extends StatelessWidget { children: [ /// Title Text const TopLeft( - child: UiScaler( - alignment: Alignment.topLeft, - child: _TitleText(), - ), + child: UiScaler(alignment: Alignment.topLeft, child: _TitleText()), ), /// Difficulty Btns @@ -88,9 +85,10 @@ class _TitleText extends StatelessWidget { Image.asset(AssetPaths.titleSelectedRight, height: 65), ], ).animate().fadeIn(delay: .8.seconds, duration: .7.seconds), - Text('INTO THE UNKNOWN', style: TextStyles.h3) - .animate() - .fadeIn(delay: 1.seconds, duration: .7.seconds), + Text( + 'INTO THE UNKNOWN', + style: TextStyles.h3, + ).animate().fadeIn(delay: 1.seconds, duration: .7.seconds), ], ); } @@ -179,18 +177,14 @@ class _DifficultyBtn extends StatelessWidget { /// cross-hairs (selected state) if (selected) ...[ - CenterLeft( - child: Image.asset(AssetPaths.titleSelectedLeft), - ), + CenterLeft(child: Image.asset(AssetPaths.titleSelectedLeft)), CenterRight( child: Image.asset(AssetPaths.titleSelectedRight), ), ], /// Label - Center( - child: Text(label.toUpperCase(), style: TextStyles.btn), - ), + Center(child: Text(label.toUpperCase(), style: TextStyles.btn)), ], ), ), @@ -232,15 +226,20 @@ class _StartBtnState extends State<_StartBtn> { Positioned.fill(child: Image.asset(AssetPaths.titleStartBtn)), if (state.isHovered || state.isFocused) ...[ Positioned.fill( - child: Image.asset(AssetPaths.titleStartBtnHover)), + child: Image.asset(AssetPaths.titleStartBtnHover), + ), ], Center( child: Row( mainAxisAlignment: MainAxisAlignment.end, children: [ - Text('START MISSION', - style: TextStyles.btn - .copyWith(fontSize: 24, letterSpacing: 18)), + Text( + 'START MISSION', + style: TextStyles.btn.copyWith( + fontSize: 24, + letterSpacing: 18, + ), + ), ], ), ), diff --git a/next-gen-ui/step_04_a/pubspec.yaml b/next-gen-ui/step_04_a/pubspec.yaml index dd3eb24959..7fd82808a1 100644 --- a/next-gen-ui/step_04_a/pubspec.yaml +++ b/next-gen-ui/step_04_a/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: 'none' version: 0.1.0 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 dependencies: flutter: diff --git a/next-gen-ui/step_04_b/lib/assets.dart b/next-gen-ui/step_04_b/lib/assets.dart index d0286c9a12..440dab3f61 100644 --- a/next-gen-ui/step_04_b/lib/assets.dart +++ b/next-gen-ui/step_04_b/lib/assets.dart @@ -32,9 +32,9 @@ class AssetPaths { typedef FragmentPrograms = ({FragmentProgram orb, FragmentProgram ui}); Future loadFragmentPrograms() async => ( - orb: (await _loadFragmentProgram(AssetPaths.orbShader)), - ui: (await _loadFragmentProgram(AssetPaths.uiShader)), - ); + orb: (await _loadFragmentProgram(AssetPaths.orbShader)), + ui: (await _loadFragmentProgram(AssetPaths.uiShader)), +); Future _loadFragmentProgram(String path) async { return (await FragmentProgram.fromAsset(path)); diff --git a/next-gen-ui/step_04_b/lib/common/reactive_widget.dart b/next-gen-ui/step_04_b/lib/common/reactive_widget.dart index c75aa491e9..f480d8b3eb 100644 --- a/next-gen-ui/step_04_b/lib/common/reactive_widget.dart +++ b/next-gen-ui/step_04_b/lib/common/reactive_widget.dart @@ -6,14 +6,11 @@ import 'package:flutter/material.dart'; import 'ticking_builder.dart'; -typedef ReactiveWidgetBuilder = Widget Function( - BuildContext context, double time, Size bounds); +typedef ReactiveWidgetBuilder = + Widget Function(BuildContext context, double time, Size bounds); class ReactiveWidget extends StatefulWidget { - const ReactiveWidget({ - super.key, - required this.builder, - }); + const ReactiveWidget({super.key, required this.builder}); final ReactiveWidgetBuilder builder; @override State createState() => _ReactiveWidgetState(); diff --git a/next-gen-ui/step_04_b/lib/common/shader_effect.dart b/next-gen-ui/step_04_b/lib/common/shader_effect.dart index 69bd75f7d9..7e6ebe8bdf 100644 --- a/next-gen-ui/step_04_b/lib/common/shader_effect.dart +++ b/next-gen-ui/step_04_b/lib/common/shader_effect.dart @@ -32,11 +32,8 @@ class ShaderEffect extends Effect { this.shader, this.update, ShaderLayer? layer, - }) : layer = layer ?? ShaderLayer.replace, - super( - begin: 0, - end: 1, - ); + }) : layer = layer ?? ShaderLayer.replace, + super(begin: 0, end: 1); final ui.FragmentShader? shader; final ShaderUpdateCallback? update; @@ -91,22 +88,28 @@ extension ShaderEffectExtensions on AnimateManager { ui.FragmentShader? shader, ShaderUpdateCallback? update, ShaderLayer? layer, - }) => - addEffect(ShaderEffect( - delay: delay, - duration: duration, - curve: curve, - shader: shader, - update: update, - layer: layer, - )); + }) => addEffect( + ShaderEffect( + delay: delay, + duration: duration, + curve: curve, + shader: shader, + update: update, + layer: layer, + ), + ); } enum ShaderLayer { foreground, background, replace } /// Function signature for [ShaderEffect] update handlers. -typedef ShaderUpdateCallback = EdgeInsets? Function( - ui.FragmentShader shader, double value, Size size, ui.Image image); +typedef ShaderUpdateCallback = + EdgeInsets? Function( + ui.FragmentShader shader, + double value, + Size size, + ui.Image image, + ); /******************************************************************************/ // TODO: add this as a dependency instead of copying it in once it is stable: @@ -117,11 +120,8 @@ typedef ShaderUpdateCallback = EdgeInsets? Function( // found in the LICENSE file. /// A callback for the [AnimatedSamplerBuilder] widget. -typedef AnimatedSamplerBuilder = void Function( - ui.Image image, - Size size, - ui.Canvas canvas, -); +typedef AnimatedSamplerBuilder = + void Function(ui.Image image, Size size, ui.Canvas canvas); /// A widget that allows access to a snapshot of the child widgets for painting /// with a sampler applied to a [FragmentProgram]. @@ -181,11 +181,7 @@ class AnimatedSampler extends StatelessWidget { @override Widget build(BuildContext context) { - return _ShaderSamplerBuilder( - builder, - enabled: enabled, - child: child, - ); + return _ShaderSamplerBuilder(builder, enabled: enabled, child: child); } } @@ -210,7 +206,9 @@ class _ShaderSamplerBuilder extends SingleChildRenderObjectWidget { @override void updateRenderObject( - BuildContext context, covariant RenderObject renderObject) { + BuildContext context, + covariant RenderObject renderObject, + ) { (renderObject as _RenderShaderSamplerBuilderWidget) ..devicePixelRatio = MediaQuery.of(context).devicePixelRatio ..builder = builder @@ -226,13 +224,14 @@ class _RenderShaderSamplerBuilderWidget extends RenderProxyBox { required double devicePixelRatio, required AnimatedSamplerBuilder builder, required bool enabled, - }) : _devicePixelRatio = devicePixelRatio, - _builder = builder, - _enabled = enabled; + }) : _devicePixelRatio = devicePixelRatio, + _builder = builder, + _enabled = enabled; @override - OffsetLayer updateCompositedLayer( - {required covariant _ShaderSamplerBuilderLayer? oldLayer}) { + OffsetLayer updateCompositedLayer({ + required covariant _ShaderSamplerBuilderLayer? oldLayer, + }) { final _ShaderSamplerBuilderLayer layer = oldLayer ?? _ShaderSamplerBuilderLayer(builder); layer @@ -328,24 +327,24 @@ class _ShaderSamplerBuilderLayer extends OffsetLayer { ui.Image _buildChildScene(Rect bounds, double pixelRatio) { final ui.SceneBuilder builder = ui.SceneBuilder(); - final Matrix4 transform = - Matrix4.diagonal3Values(pixelRatio, pixelRatio, 1); + final Matrix4 transform = Matrix4.diagonal3Values( + pixelRatio, + pixelRatio, + 1, + ); builder.pushTransform(transform.storage); addChildrenToScene(builder); builder.pop(); return builder.build().toImageSync( - (pixelRatio * bounds.width).ceil(), - (pixelRatio * bounds.height).ceil(), - ); + (pixelRatio * bounds.width).ceil(), + (pixelRatio * bounds.height).ceil(), + ); } @override void addToScene(ui.SceneBuilder builder) { if (size.isEmpty) return; - final ui.Image image = _buildChildScene( - offset & size, - devicePixelRatio, - ); + final ui.Image image = _buildChildScene(offset & size, devicePixelRatio); final ui.PictureRecorder pictureRecorder = ui.PictureRecorder(); final Canvas canvas = Canvas(pictureRecorder); try { diff --git a/next-gen-ui/step_04_b/lib/common/ui_scaler.dart b/next-gen-ui/step_04_b/lib/common/ui_scaler.dart index 07c3287650..e7dbb9be42 100644 --- a/next-gen-ui/step_04_b/lib/common/ui_scaler.dart +++ b/next-gen-ui/step_04_b/lib/common/ui_scaler.dart @@ -22,10 +22,6 @@ class UiScaler extends StatelessWidget { Widget build(BuildContext context) { final screenSize = MediaQuery.of(context).size; final double scale = min(screenSize.height / referenceHeight, 1.0); - return Transform.scale( - scale: scale, - alignment: alignment, - child: child, - ); + return Transform.scale(scale: scale, alignment: alignment, child: child); } } diff --git a/next-gen-ui/step_04_b/lib/orb_shader/orb_shader_config.dart b/next-gen-ui/step_04_b/lib/orb_shader/orb_shader_config.dart index ef975cccf8..a038e0be63 100644 --- a/next-gen-ui/step_04_b/lib/orb_shader/orb_shader_config.dart +++ b/next-gen-ui/step_04_b/lib/orb_shader/orb_shader_config.dart @@ -22,14 +22,14 @@ class OrbShaderConfig { this.lightOffsetX = 0, this.lightOffsetY = 0.1, this.lightOffsetZ = -0.66, - }) : assert(zoom >= 0 && zoom <= 1), - assert(exposure >= 0), - assert(metalness >= 0 && metalness <= 1), - assert(lightRadius >= 0), - assert(lightBrightness >= 1), - assert(ior >= 0 && ior <= 2), - assert(lightAttenuation >= 0 && lightAttenuation <= 1), - assert(ambientLightBrightness >= 0); + }) : assert(zoom >= 0 && zoom <= 1), + assert(exposure >= 0), + assert(metalness >= 0 && metalness <= 1), + assert(lightRadius >= 0), + assert(lightBrightness >= 1), + assert(ior >= 0 && ior <= 2), + assert(lightAttenuation >= 0 && lightAttenuation <= 1), + assert(ambientLightBrightness >= 0); final double zoom; diff --git a/next-gen-ui/step_04_b/lib/orb_shader/orb_shader_painter.dart b/next-gen-ui/step_04_b/lib/orb_shader/orb_shader_painter.dart index 399c20ab7e..1e04cc0df8 100644 --- a/next-gen-ui/step_04_b/lib/orb_shader/orb_shader_painter.dart +++ b/next-gen-ui/step_04_b/lib/orb_shader/orb_shader_painter.dart @@ -30,11 +30,13 @@ class OrbShaderPainter extends CustomPainter { v64.Vector3 colorToVector3(Color c) => v64.Vector3(c.r, c.g, c.b); - v64.Vector3 lightLumP = colorToVector3(config.lightColor).normalized() * + v64.Vector3 lightLumP = + colorToVector3(config.lightColor).normalized() * max(0.0, config.lightBrightness); v64.Vector3 albedo = colorToVector3(config.materialColor); - v64.Vector3 ambientLight = colorToVector3(config.ambientLightColor) * + v64.Vector3 ambientLight = + colorToVector3(config.ambientLightColor) * max(0.0, config.ambientLightBrightness); shader.setFloat(0, size.width); diff --git a/next-gen-ui/step_04_b/lib/orb_shader/orb_shader_widget.dart b/next-gen-ui/step_04_b/lib/orb_shader/orb_shader_widget.dart index 573b68afea..4187e7ced2 100644 --- a/next-gen-ui/step_04_b/lib/orb_shader/orb_shader_widget.dart +++ b/next-gen-ui/step_04_b/lib/orb_shader/orb_shader_widget.dart @@ -35,72 +35,82 @@ class OrbShaderWidget extends StatefulWidget { class OrbShaderWidgetState extends State with SingleTickerProviderStateMixin { - final _heartbeatSequence = TweenSequence( - [ - TweenSequenceItem(tween: ConstantTween(0), weight: 40), - TweenSequenceItem( - tween: Tween(begin: 0.0, end: 1.0) - .chain(CurveTween(curve: Curves.easeInOutCubic)), - weight: 8), - TweenSequenceItem( - tween: Tween(begin: 1.0, end: 0.2) - .chain(CurveTween(curve: Curves.easeInOutCubic)), - weight: 12), - TweenSequenceItem( - tween: Tween(begin: 0.2, end: 0.8) - .chain(CurveTween(curve: Curves.easeInOutCubic)), - weight: 6), - TweenSequenceItem( - tween: Tween(begin: 0.8, end: 0.0) - .chain(CurveTween(curve: Curves.easeInOutCubic)), - weight: 10), - ], - ); + final _heartbeatSequence = TweenSequence([ + TweenSequenceItem(tween: ConstantTween(0), weight: 40), + TweenSequenceItem( + tween: Tween( + begin: 0.0, + end: 1.0, + ).chain(CurveTween(curve: Curves.easeInOutCubic)), + weight: 8, + ), + TweenSequenceItem( + tween: Tween( + begin: 1.0, + end: 0.2, + ).chain(CurveTween(curve: Curves.easeInOutCubic)), + weight: 12, + ), + TweenSequenceItem( + tween: Tween( + begin: 0.2, + end: 0.8, + ).chain(CurveTween(curve: Curves.easeInOutCubic)), + weight: 6, + ), + TweenSequenceItem( + tween: Tween( + begin: 0.8, + end: 0.0, + ).chain(CurveTween(curve: Curves.easeInOutCubic)), + weight: 10, + ), + ]); - late final _heartbeatAnim = - AnimationController(vsync: this, duration: 3000.ms)..repeat(); + late final _heartbeatAnim = AnimationController( + vsync: this, + duration: 3000.ms, + )..repeat(); @override Widget build(BuildContext context) => Consumer( - builder: (context, fragmentPrograms, _) { - if (fragmentPrograms == null) return const SizedBox.expand(); - return ListenableBuilder( - listenable: _heartbeatAnim, - builder: (_, __) { - final heartbeatEnergy = - _heartbeatAnim.drive(_heartbeatSequence).value; - return TweenAnimationBuilder( - tween: Tween( - begin: widget.minEnergy, end: widget.minEnergy), - duration: 300.ms, - curve: Curves.easeOutCubic, - builder: (context, minEnergy, child) { - return ReactiveWidget( - builder: (context, time, size) { - double energyLevel = 0; - if (size.shortestSide != 0) { - final d = (Offset(size.width, size.height) / 2 - - widget.mousePos) + builder: (context, fragmentPrograms, _) { + if (fragmentPrograms == null) return const SizedBox.expand(); + return ListenableBuilder( + listenable: _heartbeatAnim, + builder: (_, __) { + final heartbeatEnergy = + _heartbeatAnim.drive(_heartbeatSequence).value; + return TweenAnimationBuilder( + tween: Tween( + begin: widget.minEnergy, + end: widget.minEnergy, + ), + duration: 300.ms, + curve: Curves.easeOutCubic, + builder: (context, minEnergy, child) { + return ReactiveWidget( + builder: (context, time, size) { + double energyLevel = 0; + if (size.shortestSide != 0) { + final d = + (Offset(size.width, size.height) / 2 - widget.mousePos) .distance; - final hitSize = size.shortestSide * .5; - energyLevel = 1 - min(1, (d / hitSize)); - scheduleMicrotask( - () => widget.onUpdate?.call(energyLevel)); - } - energyLevel += - (1.3 - energyLevel) * heartbeatEnergy * 0.1; - energyLevel = lerpDouble(minEnergy, 1, energyLevel)!; - return CustomPaint( - size: size, - painter: OrbShaderPainter( - fragmentPrograms.orb.fragmentShader(), - config: widget.config, - time: time, - mousePos: widget.mousePos, - energy: energyLevel, - ), - ); - }, + final hitSize = size.shortestSide * .5; + energyLevel = 1 - min(1, (d / hitSize)); + scheduleMicrotask(() => widget.onUpdate?.call(energyLevel)); + } + energyLevel += (1.3 - energyLevel) * heartbeatEnergy * 0.1; + energyLevel = lerpDouble(minEnergy, 1, energyLevel)!; + return CustomPaint( + size: size, + painter: OrbShaderPainter( + fragmentPrograms.orb.fragmentShader(), + config: widget.config, + time: time, + mousePos: widget.mousePos, + energy: energyLevel, + ), ); }, ); @@ -108,4 +118,6 @@ class OrbShaderWidgetState extends State ); }, ); + }, + ); } diff --git a/next-gen-ui/step_04_b/lib/styles.dart b/next-gen-ui/step_04_b/lib/styles.dart index 1e449fff3a..fb5083c6a8 100644 --- a/next-gen-ui/step_04_b/lib/styles.dart +++ b/next-gen-ui/step_04_b/lib/styles.dart @@ -8,16 +8,19 @@ class TextStyles { static const _font1 = TextStyle(fontFamily: 'Exo', color: Colors.white); static TextStyle get h1 => _font1.copyWith( - fontSize: 75, letterSpacing: 35, fontWeight: FontWeight.w700); + fontSize: 75, + letterSpacing: 35, + fontWeight: FontWeight.w700, + ); static TextStyle get h2 => h1.copyWith(fontSize: 40, letterSpacing: 0); static TextStyle get h3 => h1.copyWith(fontSize: 24, letterSpacing: 20, fontWeight: FontWeight.w400); static TextStyle get body => _font1.copyWith(fontSize: 16); static TextStyle get btn => _font1.copyWith( - fontSize: 16, - fontWeight: FontWeight.bold, - letterSpacing: 10, - ); + fontSize: 16, + fontWeight: FontWeight.bold, + letterSpacing: 10, + ); } abstract class AppColors { diff --git a/next-gen-ui/step_04_b/lib/title_screen/title_screen_ui.dart b/next-gen-ui/step_04_b/lib/title_screen/title_screen_ui.dart index ca3cfdba90..ba77e2a952 100644 --- a/next-gen-ui/step_04_b/lib/title_screen/title_screen_ui.dart +++ b/next-gen-ui/step_04_b/lib/title_screen/title_screen_ui.dart @@ -32,10 +32,7 @@ class TitleScreenUi extends StatelessWidget { children: [ /// Title Text const TopLeft( - child: UiScaler( - alignment: Alignment.topLeft, - child: _TitleText(), - ), + child: UiScaler(alignment: Alignment.topLeft, child: _TitleText()), ), /// Difficulty Btns @@ -88,9 +85,10 @@ class _TitleText extends StatelessWidget { Image.asset(AssetPaths.titleSelectedRight, height: 65), ], ).animate().fadeIn(delay: .8.seconds, duration: .7.seconds), - Text('INTO THE UNKNOWN', style: TextStyles.h3) - .animate() - .fadeIn(delay: 1.seconds, duration: .7.seconds), + Text( + 'INTO THE UNKNOWN', + style: TextStyles.h3, + ).animate().fadeIn(delay: 1.seconds, duration: .7.seconds), ], ); } @@ -113,29 +111,29 @@ class _DifficultyBtns extends StatelessWidget { mainAxisSize: MainAxisSize.min, children: [ _DifficultyBtn( - label: 'Casual', - selected: difficulty == 0, - onPressed: () => onDifficultyPressed(0), - onHover: (over) => onDifficultyFocused(over ? 0 : null), - ) + label: 'Casual', + selected: difficulty == 0, + onPressed: () => onDifficultyPressed(0), + onHover: (over) => onDifficultyFocused(over ? 0 : null), + ) .animate() .fadeIn(delay: 1.3.seconds, duration: .35.seconds) .slide(begin: const Offset(0, .2)), _DifficultyBtn( - label: 'Normal', - selected: difficulty == 1, - onPressed: () => onDifficultyPressed(1), - onHover: (over) => onDifficultyFocused(over ? 1 : null), - ) + label: 'Normal', + selected: difficulty == 1, + onPressed: () => onDifficultyPressed(1), + onHover: (over) => onDifficultyFocused(over ? 1 : null), + ) .animate() .fadeIn(delay: 1.5.seconds, duration: .35.seconds) .slide(begin: const Offset(0, .2)), _DifficultyBtn( - label: 'Hardcore', - selected: difficulty == 2, - onPressed: () => onDifficultyPressed(2), - onHover: (over) => onDifficultyFocused(over ? 2 : null), - ) + label: 'Hardcore', + selected: difficulty == 2, + onPressed: () => onDifficultyPressed(2), + onHover: (over) => onDifficultyFocused(over ? 2 : null), + ) .animate() .fadeIn(delay: 1.7.seconds, duration: .35.seconds) .slide(begin: const Offset(0, .2)), @@ -188,18 +186,14 @@ class _DifficultyBtn extends StatelessWidget { /// cross-hairs (selected state) if (selected) ...[ - CenterLeft( - child: Image.asset(AssetPaths.titleSelectedLeft), - ), + CenterLeft(child: Image.asset(AssetPaths.titleSelectedLeft)), CenterRight( child: Image.asset(AssetPaths.titleSelectedRight), ), ], /// Label - Center( - child: Text(label.toUpperCase(), style: TextStyles.btn), - ), + Center(child: Text(label.toUpperCase(), style: TextStyles.btn)), ], ), ), @@ -241,15 +235,20 @@ class _StartBtnState extends State<_StartBtn> { Positioned.fill(child: Image.asset(AssetPaths.titleStartBtn)), if (state.isHovered || state.isFocused) ...[ Positioned.fill( - child: Image.asset(AssetPaths.titleStartBtnHover)), + child: Image.asset(AssetPaths.titleStartBtnHover), + ), ], Center( child: Row( mainAxisAlignment: MainAxisAlignment.end, children: [ - Text('START MISSION', - style: TextStyles.btn - .copyWith(fontSize: 24, letterSpacing: 18)), + Text( + 'START MISSION', + style: TextStyles.btn.copyWith( + fontSize: 24, + letterSpacing: 18, + ), + ), ], ), ), diff --git a/next-gen-ui/step_04_b/pubspec.yaml b/next-gen-ui/step_04_b/pubspec.yaml index dd3eb24959..7fd82808a1 100644 --- a/next-gen-ui/step_04_b/pubspec.yaml +++ b/next-gen-ui/step_04_b/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: 'none' version: 0.1.0 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 dependencies: flutter: diff --git a/next-gen-ui/step_04_c/lib/assets.dart b/next-gen-ui/step_04_c/lib/assets.dart index d0286c9a12..440dab3f61 100644 --- a/next-gen-ui/step_04_c/lib/assets.dart +++ b/next-gen-ui/step_04_c/lib/assets.dart @@ -32,9 +32,9 @@ class AssetPaths { typedef FragmentPrograms = ({FragmentProgram orb, FragmentProgram ui}); Future loadFragmentPrograms() async => ( - orb: (await _loadFragmentProgram(AssetPaths.orbShader)), - ui: (await _loadFragmentProgram(AssetPaths.uiShader)), - ); + orb: (await _loadFragmentProgram(AssetPaths.orbShader)), + ui: (await _loadFragmentProgram(AssetPaths.uiShader)), +); Future _loadFragmentProgram(String path) async { return (await FragmentProgram.fromAsset(path)); diff --git a/next-gen-ui/step_04_c/lib/common/reactive_widget.dart b/next-gen-ui/step_04_c/lib/common/reactive_widget.dart index c75aa491e9..f480d8b3eb 100644 --- a/next-gen-ui/step_04_c/lib/common/reactive_widget.dart +++ b/next-gen-ui/step_04_c/lib/common/reactive_widget.dart @@ -6,14 +6,11 @@ import 'package:flutter/material.dart'; import 'ticking_builder.dart'; -typedef ReactiveWidgetBuilder = Widget Function( - BuildContext context, double time, Size bounds); +typedef ReactiveWidgetBuilder = + Widget Function(BuildContext context, double time, Size bounds); class ReactiveWidget extends StatefulWidget { - const ReactiveWidget({ - super.key, - required this.builder, - }); + const ReactiveWidget({super.key, required this.builder}); final ReactiveWidgetBuilder builder; @override State createState() => _ReactiveWidgetState(); diff --git a/next-gen-ui/step_04_c/lib/common/shader_effect.dart b/next-gen-ui/step_04_c/lib/common/shader_effect.dart index 69bd75f7d9..7e6ebe8bdf 100644 --- a/next-gen-ui/step_04_c/lib/common/shader_effect.dart +++ b/next-gen-ui/step_04_c/lib/common/shader_effect.dart @@ -32,11 +32,8 @@ class ShaderEffect extends Effect { this.shader, this.update, ShaderLayer? layer, - }) : layer = layer ?? ShaderLayer.replace, - super( - begin: 0, - end: 1, - ); + }) : layer = layer ?? ShaderLayer.replace, + super(begin: 0, end: 1); final ui.FragmentShader? shader; final ShaderUpdateCallback? update; @@ -91,22 +88,28 @@ extension ShaderEffectExtensions on AnimateManager { ui.FragmentShader? shader, ShaderUpdateCallback? update, ShaderLayer? layer, - }) => - addEffect(ShaderEffect( - delay: delay, - duration: duration, - curve: curve, - shader: shader, - update: update, - layer: layer, - )); + }) => addEffect( + ShaderEffect( + delay: delay, + duration: duration, + curve: curve, + shader: shader, + update: update, + layer: layer, + ), + ); } enum ShaderLayer { foreground, background, replace } /// Function signature for [ShaderEffect] update handlers. -typedef ShaderUpdateCallback = EdgeInsets? Function( - ui.FragmentShader shader, double value, Size size, ui.Image image); +typedef ShaderUpdateCallback = + EdgeInsets? Function( + ui.FragmentShader shader, + double value, + Size size, + ui.Image image, + ); /******************************************************************************/ // TODO: add this as a dependency instead of copying it in once it is stable: @@ -117,11 +120,8 @@ typedef ShaderUpdateCallback = EdgeInsets? Function( // found in the LICENSE file. /// A callback for the [AnimatedSamplerBuilder] widget. -typedef AnimatedSamplerBuilder = void Function( - ui.Image image, - Size size, - ui.Canvas canvas, -); +typedef AnimatedSamplerBuilder = + void Function(ui.Image image, Size size, ui.Canvas canvas); /// A widget that allows access to a snapshot of the child widgets for painting /// with a sampler applied to a [FragmentProgram]. @@ -181,11 +181,7 @@ class AnimatedSampler extends StatelessWidget { @override Widget build(BuildContext context) { - return _ShaderSamplerBuilder( - builder, - enabled: enabled, - child: child, - ); + return _ShaderSamplerBuilder(builder, enabled: enabled, child: child); } } @@ -210,7 +206,9 @@ class _ShaderSamplerBuilder extends SingleChildRenderObjectWidget { @override void updateRenderObject( - BuildContext context, covariant RenderObject renderObject) { + BuildContext context, + covariant RenderObject renderObject, + ) { (renderObject as _RenderShaderSamplerBuilderWidget) ..devicePixelRatio = MediaQuery.of(context).devicePixelRatio ..builder = builder @@ -226,13 +224,14 @@ class _RenderShaderSamplerBuilderWidget extends RenderProxyBox { required double devicePixelRatio, required AnimatedSamplerBuilder builder, required bool enabled, - }) : _devicePixelRatio = devicePixelRatio, - _builder = builder, - _enabled = enabled; + }) : _devicePixelRatio = devicePixelRatio, + _builder = builder, + _enabled = enabled; @override - OffsetLayer updateCompositedLayer( - {required covariant _ShaderSamplerBuilderLayer? oldLayer}) { + OffsetLayer updateCompositedLayer({ + required covariant _ShaderSamplerBuilderLayer? oldLayer, + }) { final _ShaderSamplerBuilderLayer layer = oldLayer ?? _ShaderSamplerBuilderLayer(builder); layer @@ -328,24 +327,24 @@ class _ShaderSamplerBuilderLayer extends OffsetLayer { ui.Image _buildChildScene(Rect bounds, double pixelRatio) { final ui.SceneBuilder builder = ui.SceneBuilder(); - final Matrix4 transform = - Matrix4.diagonal3Values(pixelRatio, pixelRatio, 1); + final Matrix4 transform = Matrix4.diagonal3Values( + pixelRatio, + pixelRatio, + 1, + ); builder.pushTransform(transform.storage); addChildrenToScene(builder); builder.pop(); return builder.build().toImageSync( - (pixelRatio * bounds.width).ceil(), - (pixelRatio * bounds.height).ceil(), - ); + (pixelRatio * bounds.width).ceil(), + (pixelRatio * bounds.height).ceil(), + ); } @override void addToScene(ui.SceneBuilder builder) { if (size.isEmpty) return; - final ui.Image image = _buildChildScene( - offset & size, - devicePixelRatio, - ); + final ui.Image image = _buildChildScene(offset & size, devicePixelRatio); final ui.PictureRecorder pictureRecorder = ui.PictureRecorder(); final Canvas canvas = Canvas(pictureRecorder); try { diff --git a/next-gen-ui/step_04_c/lib/common/ui_scaler.dart b/next-gen-ui/step_04_c/lib/common/ui_scaler.dart index 07c3287650..e7dbb9be42 100644 --- a/next-gen-ui/step_04_c/lib/common/ui_scaler.dart +++ b/next-gen-ui/step_04_c/lib/common/ui_scaler.dart @@ -22,10 +22,6 @@ class UiScaler extends StatelessWidget { Widget build(BuildContext context) { final screenSize = MediaQuery.of(context).size; final double scale = min(screenSize.height / referenceHeight, 1.0); - return Transform.scale( - scale: scale, - alignment: alignment, - child: child, - ); + return Transform.scale(scale: scale, alignment: alignment, child: child); } } diff --git a/next-gen-ui/step_04_c/lib/orb_shader/orb_shader_config.dart b/next-gen-ui/step_04_c/lib/orb_shader/orb_shader_config.dart index ef975cccf8..a038e0be63 100644 --- a/next-gen-ui/step_04_c/lib/orb_shader/orb_shader_config.dart +++ b/next-gen-ui/step_04_c/lib/orb_shader/orb_shader_config.dart @@ -22,14 +22,14 @@ class OrbShaderConfig { this.lightOffsetX = 0, this.lightOffsetY = 0.1, this.lightOffsetZ = -0.66, - }) : assert(zoom >= 0 && zoom <= 1), - assert(exposure >= 0), - assert(metalness >= 0 && metalness <= 1), - assert(lightRadius >= 0), - assert(lightBrightness >= 1), - assert(ior >= 0 && ior <= 2), - assert(lightAttenuation >= 0 && lightAttenuation <= 1), - assert(ambientLightBrightness >= 0); + }) : assert(zoom >= 0 && zoom <= 1), + assert(exposure >= 0), + assert(metalness >= 0 && metalness <= 1), + assert(lightRadius >= 0), + assert(lightBrightness >= 1), + assert(ior >= 0 && ior <= 2), + assert(lightAttenuation >= 0 && lightAttenuation <= 1), + assert(ambientLightBrightness >= 0); final double zoom; diff --git a/next-gen-ui/step_04_c/lib/orb_shader/orb_shader_painter.dart b/next-gen-ui/step_04_c/lib/orb_shader/orb_shader_painter.dart index 399c20ab7e..1e04cc0df8 100644 --- a/next-gen-ui/step_04_c/lib/orb_shader/orb_shader_painter.dart +++ b/next-gen-ui/step_04_c/lib/orb_shader/orb_shader_painter.dart @@ -30,11 +30,13 @@ class OrbShaderPainter extends CustomPainter { v64.Vector3 colorToVector3(Color c) => v64.Vector3(c.r, c.g, c.b); - v64.Vector3 lightLumP = colorToVector3(config.lightColor).normalized() * + v64.Vector3 lightLumP = + colorToVector3(config.lightColor).normalized() * max(0.0, config.lightBrightness); v64.Vector3 albedo = colorToVector3(config.materialColor); - v64.Vector3 ambientLight = colorToVector3(config.ambientLightColor) * + v64.Vector3 ambientLight = + colorToVector3(config.ambientLightColor) * max(0.0, config.ambientLightBrightness); shader.setFloat(0, size.width); diff --git a/next-gen-ui/step_04_c/lib/orb_shader/orb_shader_widget.dart b/next-gen-ui/step_04_c/lib/orb_shader/orb_shader_widget.dart index 573b68afea..4187e7ced2 100644 --- a/next-gen-ui/step_04_c/lib/orb_shader/orb_shader_widget.dart +++ b/next-gen-ui/step_04_c/lib/orb_shader/orb_shader_widget.dart @@ -35,72 +35,82 @@ class OrbShaderWidget extends StatefulWidget { class OrbShaderWidgetState extends State with SingleTickerProviderStateMixin { - final _heartbeatSequence = TweenSequence( - [ - TweenSequenceItem(tween: ConstantTween(0), weight: 40), - TweenSequenceItem( - tween: Tween(begin: 0.0, end: 1.0) - .chain(CurveTween(curve: Curves.easeInOutCubic)), - weight: 8), - TweenSequenceItem( - tween: Tween(begin: 1.0, end: 0.2) - .chain(CurveTween(curve: Curves.easeInOutCubic)), - weight: 12), - TweenSequenceItem( - tween: Tween(begin: 0.2, end: 0.8) - .chain(CurveTween(curve: Curves.easeInOutCubic)), - weight: 6), - TweenSequenceItem( - tween: Tween(begin: 0.8, end: 0.0) - .chain(CurveTween(curve: Curves.easeInOutCubic)), - weight: 10), - ], - ); + final _heartbeatSequence = TweenSequence([ + TweenSequenceItem(tween: ConstantTween(0), weight: 40), + TweenSequenceItem( + tween: Tween( + begin: 0.0, + end: 1.0, + ).chain(CurveTween(curve: Curves.easeInOutCubic)), + weight: 8, + ), + TweenSequenceItem( + tween: Tween( + begin: 1.0, + end: 0.2, + ).chain(CurveTween(curve: Curves.easeInOutCubic)), + weight: 12, + ), + TweenSequenceItem( + tween: Tween( + begin: 0.2, + end: 0.8, + ).chain(CurveTween(curve: Curves.easeInOutCubic)), + weight: 6, + ), + TweenSequenceItem( + tween: Tween( + begin: 0.8, + end: 0.0, + ).chain(CurveTween(curve: Curves.easeInOutCubic)), + weight: 10, + ), + ]); - late final _heartbeatAnim = - AnimationController(vsync: this, duration: 3000.ms)..repeat(); + late final _heartbeatAnim = AnimationController( + vsync: this, + duration: 3000.ms, + )..repeat(); @override Widget build(BuildContext context) => Consumer( - builder: (context, fragmentPrograms, _) { - if (fragmentPrograms == null) return const SizedBox.expand(); - return ListenableBuilder( - listenable: _heartbeatAnim, - builder: (_, __) { - final heartbeatEnergy = - _heartbeatAnim.drive(_heartbeatSequence).value; - return TweenAnimationBuilder( - tween: Tween( - begin: widget.minEnergy, end: widget.minEnergy), - duration: 300.ms, - curve: Curves.easeOutCubic, - builder: (context, minEnergy, child) { - return ReactiveWidget( - builder: (context, time, size) { - double energyLevel = 0; - if (size.shortestSide != 0) { - final d = (Offset(size.width, size.height) / 2 - - widget.mousePos) + builder: (context, fragmentPrograms, _) { + if (fragmentPrograms == null) return const SizedBox.expand(); + return ListenableBuilder( + listenable: _heartbeatAnim, + builder: (_, __) { + final heartbeatEnergy = + _heartbeatAnim.drive(_heartbeatSequence).value; + return TweenAnimationBuilder( + tween: Tween( + begin: widget.minEnergy, + end: widget.minEnergy, + ), + duration: 300.ms, + curve: Curves.easeOutCubic, + builder: (context, minEnergy, child) { + return ReactiveWidget( + builder: (context, time, size) { + double energyLevel = 0; + if (size.shortestSide != 0) { + final d = + (Offset(size.width, size.height) / 2 - widget.mousePos) .distance; - final hitSize = size.shortestSide * .5; - energyLevel = 1 - min(1, (d / hitSize)); - scheduleMicrotask( - () => widget.onUpdate?.call(energyLevel)); - } - energyLevel += - (1.3 - energyLevel) * heartbeatEnergy * 0.1; - energyLevel = lerpDouble(minEnergy, 1, energyLevel)!; - return CustomPaint( - size: size, - painter: OrbShaderPainter( - fragmentPrograms.orb.fragmentShader(), - config: widget.config, - time: time, - mousePos: widget.mousePos, - energy: energyLevel, - ), - ); - }, + final hitSize = size.shortestSide * .5; + energyLevel = 1 - min(1, (d / hitSize)); + scheduleMicrotask(() => widget.onUpdate?.call(energyLevel)); + } + energyLevel += (1.3 - energyLevel) * heartbeatEnergy * 0.1; + energyLevel = lerpDouble(minEnergy, 1, energyLevel)!; + return CustomPaint( + size: size, + painter: OrbShaderPainter( + fragmentPrograms.orb.fragmentShader(), + config: widget.config, + time: time, + mousePos: widget.mousePos, + energy: energyLevel, + ), ); }, ); @@ -108,4 +118,6 @@ class OrbShaderWidgetState extends State ); }, ); + }, + ); } diff --git a/next-gen-ui/step_04_c/lib/styles.dart b/next-gen-ui/step_04_c/lib/styles.dart index 1e449fff3a..fb5083c6a8 100644 --- a/next-gen-ui/step_04_c/lib/styles.dart +++ b/next-gen-ui/step_04_c/lib/styles.dart @@ -8,16 +8,19 @@ class TextStyles { static const _font1 = TextStyle(fontFamily: 'Exo', color: Colors.white); static TextStyle get h1 => _font1.copyWith( - fontSize: 75, letterSpacing: 35, fontWeight: FontWeight.w700); + fontSize: 75, + letterSpacing: 35, + fontWeight: FontWeight.w700, + ); static TextStyle get h2 => h1.copyWith(fontSize: 40, letterSpacing: 0); static TextStyle get h3 => h1.copyWith(fontSize: 24, letterSpacing: 20, fontWeight: FontWeight.w400); static TextStyle get body => _font1.copyWith(fontSize: 16); static TextStyle get btn => _font1.copyWith( - fontSize: 16, - fontWeight: FontWeight.bold, - letterSpacing: 10, - ); + fontSize: 16, + fontWeight: FontWeight.bold, + letterSpacing: 10, + ); } abstract class AppColors { diff --git a/next-gen-ui/step_04_c/lib/title_screen/title_screen_ui.dart b/next-gen-ui/step_04_c/lib/title_screen/title_screen_ui.dart index 4b08343cb0..9b093de263 100644 --- a/next-gen-ui/step_04_c/lib/title_screen/title_screen_ui.dart +++ b/next-gen-ui/step_04_c/lib/title_screen/title_screen_ui.dart @@ -32,10 +32,7 @@ class TitleScreenUi extends StatelessWidget { children: [ /// Title Text const TopLeft( - child: UiScaler( - alignment: Alignment.topLeft, - child: _TitleText(), - ), + child: UiScaler(alignment: Alignment.topLeft, child: _TitleText()), ), /// Difficulty Btns @@ -88,9 +85,10 @@ class _TitleText extends StatelessWidget { Image.asset(AssetPaths.titleSelectedRight, height: 65), ], ).animate().fadeIn(delay: .8.seconds, duration: .7.seconds), - Text('INTO THE UNKNOWN', style: TextStyles.h3) - .animate() - .fadeIn(delay: 1.seconds, duration: .7.seconds), + Text( + 'INTO THE UNKNOWN', + style: TextStyles.h3, + ).animate().fadeIn(delay: 1.seconds, duration: .7.seconds), ], ); } @@ -113,29 +111,29 @@ class _DifficultyBtns extends StatelessWidget { mainAxisSize: MainAxisSize.min, children: [ _DifficultyBtn( - label: 'Casual', - selected: difficulty == 0, - onPressed: () => onDifficultyPressed(0), - onHover: (over) => onDifficultyFocused(over ? 0 : null), - ) + label: 'Casual', + selected: difficulty == 0, + onPressed: () => onDifficultyPressed(0), + onHover: (over) => onDifficultyFocused(over ? 0 : null), + ) .animate() .fadeIn(delay: 1.3.seconds, duration: .35.seconds) .slide(begin: const Offset(0, .2)), _DifficultyBtn( - label: 'Normal', - selected: difficulty == 1, - onPressed: () => onDifficultyPressed(1), - onHover: (over) => onDifficultyFocused(over ? 1 : null), - ) + label: 'Normal', + selected: difficulty == 1, + onPressed: () => onDifficultyPressed(1), + onHover: (over) => onDifficultyFocused(over ? 1 : null), + ) .animate() .fadeIn(delay: 1.5.seconds, duration: .35.seconds) .slide(begin: const Offset(0, .2)), _DifficultyBtn( - label: 'Hardcore', - selected: difficulty == 2, - onPressed: () => onDifficultyPressed(2), - onHover: (over) => onDifficultyFocused(over ? 2 : null), - ) + label: 'Hardcore', + selected: difficulty == 2, + onPressed: () => onDifficultyPressed(2), + onHover: (over) => onDifficultyFocused(over ? 2 : null), + ) .animate() .fadeIn(delay: 1.7.seconds, duration: .35.seconds) .slide(begin: const Offset(0, .2)), @@ -188,18 +186,14 @@ class _DifficultyBtn extends StatelessWidget { /// cross-hairs (selected state) if (selected) ...[ - CenterLeft( - child: Image.asset(AssetPaths.titleSelectedLeft), - ), + CenterLeft(child: Image.asset(AssetPaths.titleSelectedLeft)), CenterRight( child: Image.asset(AssetPaths.titleSelectedRight), ), ], /// Label - Center( - child: Text(label.toUpperCase(), style: TextStyles.btn), - ), + Center(child: Text(label.toUpperCase(), style: TextStyles.btn)), ], ), ), @@ -234,30 +228,37 @@ class _StartBtnState extends State<_StartBtn> { } _wasHovered = (state.isHovered || state.isFocused); return SizedBox( - width: 520, - height: 100, - child: Stack( - children: [ - Positioned.fill(child: Image.asset(AssetPaths.titleStartBtn)), - if (state.isHovered || state.isFocused) ...[ - Positioned.fill( - child: Image.asset(AssetPaths.titleStartBtnHover)), - ], - Center( - child: Row( - mainAxisAlignment: MainAxisAlignment.end, - children: [ - Text('START MISSION', - style: TextStyles.btn - .copyWith(fontSize: 24, letterSpacing: 18)), - ], - ), - ), - ], - ) - .animate(autoPlay: false, onInit: (c) => _btnAnim = c) - .shimmer(duration: .7.seconds, color: Colors.black), - ) + width: 520, + height: 100, + child: Stack( + children: [ + Positioned.fill( + child: Image.asset(AssetPaths.titleStartBtn), + ), + if (state.isHovered || state.isFocused) ...[ + Positioned.fill( + child: Image.asset(AssetPaths.titleStartBtnHover), + ), + ], + Center( + child: Row( + mainAxisAlignment: MainAxisAlignment.end, + children: [ + Text( + 'START MISSION', + style: TextStyles.btn.copyWith( + fontSize: 24, + letterSpacing: 18, + ), + ), + ], + ), + ), + ], + ) + .animate(autoPlay: false, onInit: (c) => _btnAnim = c) + .shimmer(duration: .7.seconds, color: Colors.black), + ) .animate() .fadeIn(delay: 2.3.seconds) .slide(begin: const Offset(0, .2)); diff --git a/next-gen-ui/step_04_c/pubspec.yaml b/next-gen-ui/step_04_c/pubspec.yaml index dd3eb24959..7fd82808a1 100644 --- a/next-gen-ui/step_04_c/pubspec.yaml +++ b/next-gen-ui/step_04_c/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: 'none' version: 0.1.0 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 dependencies: flutter: diff --git a/next-gen-ui/step_04_d/lib/assets.dart b/next-gen-ui/step_04_d/lib/assets.dart index d0286c9a12..440dab3f61 100644 --- a/next-gen-ui/step_04_d/lib/assets.dart +++ b/next-gen-ui/step_04_d/lib/assets.dart @@ -32,9 +32,9 @@ class AssetPaths { typedef FragmentPrograms = ({FragmentProgram orb, FragmentProgram ui}); Future loadFragmentPrograms() async => ( - orb: (await _loadFragmentProgram(AssetPaths.orbShader)), - ui: (await _loadFragmentProgram(AssetPaths.uiShader)), - ); + orb: (await _loadFragmentProgram(AssetPaths.orbShader)), + ui: (await _loadFragmentProgram(AssetPaths.uiShader)), +); Future _loadFragmentProgram(String path) async { return (await FragmentProgram.fromAsset(path)); diff --git a/next-gen-ui/step_04_d/lib/common/reactive_widget.dart b/next-gen-ui/step_04_d/lib/common/reactive_widget.dart index c75aa491e9..f480d8b3eb 100644 --- a/next-gen-ui/step_04_d/lib/common/reactive_widget.dart +++ b/next-gen-ui/step_04_d/lib/common/reactive_widget.dart @@ -6,14 +6,11 @@ import 'package:flutter/material.dart'; import 'ticking_builder.dart'; -typedef ReactiveWidgetBuilder = Widget Function( - BuildContext context, double time, Size bounds); +typedef ReactiveWidgetBuilder = + Widget Function(BuildContext context, double time, Size bounds); class ReactiveWidget extends StatefulWidget { - const ReactiveWidget({ - super.key, - required this.builder, - }); + const ReactiveWidget({super.key, required this.builder}); final ReactiveWidgetBuilder builder; @override State createState() => _ReactiveWidgetState(); diff --git a/next-gen-ui/step_04_d/lib/common/shader_effect.dart b/next-gen-ui/step_04_d/lib/common/shader_effect.dart index 69bd75f7d9..7e6ebe8bdf 100644 --- a/next-gen-ui/step_04_d/lib/common/shader_effect.dart +++ b/next-gen-ui/step_04_d/lib/common/shader_effect.dart @@ -32,11 +32,8 @@ class ShaderEffect extends Effect { this.shader, this.update, ShaderLayer? layer, - }) : layer = layer ?? ShaderLayer.replace, - super( - begin: 0, - end: 1, - ); + }) : layer = layer ?? ShaderLayer.replace, + super(begin: 0, end: 1); final ui.FragmentShader? shader; final ShaderUpdateCallback? update; @@ -91,22 +88,28 @@ extension ShaderEffectExtensions on AnimateManager { ui.FragmentShader? shader, ShaderUpdateCallback? update, ShaderLayer? layer, - }) => - addEffect(ShaderEffect( - delay: delay, - duration: duration, - curve: curve, - shader: shader, - update: update, - layer: layer, - )); + }) => addEffect( + ShaderEffect( + delay: delay, + duration: duration, + curve: curve, + shader: shader, + update: update, + layer: layer, + ), + ); } enum ShaderLayer { foreground, background, replace } /// Function signature for [ShaderEffect] update handlers. -typedef ShaderUpdateCallback = EdgeInsets? Function( - ui.FragmentShader shader, double value, Size size, ui.Image image); +typedef ShaderUpdateCallback = + EdgeInsets? Function( + ui.FragmentShader shader, + double value, + Size size, + ui.Image image, + ); /******************************************************************************/ // TODO: add this as a dependency instead of copying it in once it is stable: @@ -117,11 +120,8 @@ typedef ShaderUpdateCallback = EdgeInsets? Function( // found in the LICENSE file. /// A callback for the [AnimatedSamplerBuilder] widget. -typedef AnimatedSamplerBuilder = void Function( - ui.Image image, - Size size, - ui.Canvas canvas, -); +typedef AnimatedSamplerBuilder = + void Function(ui.Image image, Size size, ui.Canvas canvas); /// A widget that allows access to a snapshot of the child widgets for painting /// with a sampler applied to a [FragmentProgram]. @@ -181,11 +181,7 @@ class AnimatedSampler extends StatelessWidget { @override Widget build(BuildContext context) { - return _ShaderSamplerBuilder( - builder, - enabled: enabled, - child: child, - ); + return _ShaderSamplerBuilder(builder, enabled: enabled, child: child); } } @@ -210,7 +206,9 @@ class _ShaderSamplerBuilder extends SingleChildRenderObjectWidget { @override void updateRenderObject( - BuildContext context, covariant RenderObject renderObject) { + BuildContext context, + covariant RenderObject renderObject, + ) { (renderObject as _RenderShaderSamplerBuilderWidget) ..devicePixelRatio = MediaQuery.of(context).devicePixelRatio ..builder = builder @@ -226,13 +224,14 @@ class _RenderShaderSamplerBuilderWidget extends RenderProxyBox { required double devicePixelRatio, required AnimatedSamplerBuilder builder, required bool enabled, - }) : _devicePixelRatio = devicePixelRatio, - _builder = builder, - _enabled = enabled; + }) : _devicePixelRatio = devicePixelRatio, + _builder = builder, + _enabled = enabled; @override - OffsetLayer updateCompositedLayer( - {required covariant _ShaderSamplerBuilderLayer? oldLayer}) { + OffsetLayer updateCompositedLayer({ + required covariant _ShaderSamplerBuilderLayer? oldLayer, + }) { final _ShaderSamplerBuilderLayer layer = oldLayer ?? _ShaderSamplerBuilderLayer(builder); layer @@ -328,24 +327,24 @@ class _ShaderSamplerBuilderLayer extends OffsetLayer { ui.Image _buildChildScene(Rect bounds, double pixelRatio) { final ui.SceneBuilder builder = ui.SceneBuilder(); - final Matrix4 transform = - Matrix4.diagonal3Values(pixelRatio, pixelRatio, 1); + final Matrix4 transform = Matrix4.diagonal3Values( + pixelRatio, + pixelRatio, + 1, + ); builder.pushTransform(transform.storage); addChildrenToScene(builder); builder.pop(); return builder.build().toImageSync( - (pixelRatio * bounds.width).ceil(), - (pixelRatio * bounds.height).ceil(), - ); + (pixelRatio * bounds.width).ceil(), + (pixelRatio * bounds.height).ceil(), + ); } @override void addToScene(ui.SceneBuilder builder) { if (size.isEmpty) return; - final ui.Image image = _buildChildScene( - offset & size, - devicePixelRatio, - ); + final ui.Image image = _buildChildScene(offset & size, devicePixelRatio); final ui.PictureRecorder pictureRecorder = ui.PictureRecorder(); final Canvas canvas = Canvas(pictureRecorder); try { diff --git a/next-gen-ui/step_04_d/lib/common/ui_scaler.dart b/next-gen-ui/step_04_d/lib/common/ui_scaler.dart index 07c3287650..e7dbb9be42 100644 --- a/next-gen-ui/step_04_d/lib/common/ui_scaler.dart +++ b/next-gen-ui/step_04_d/lib/common/ui_scaler.dart @@ -22,10 +22,6 @@ class UiScaler extends StatelessWidget { Widget build(BuildContext context) { final screenSize = MediaQuery.of(context).size; final double scale = min(screenSize.height / referenceHeight, 1.0); - return Transform.scale( - scale: scale, - alignment: alignment, - child: child, - ); + return Transform.scale(scale: scale, alignment: alignment, child: child); } } diff --git a/next-gen-ui/step_04_d/lib/orb_shader/orb_shader_config.dart b/next-gen-ui/step_04_d/lib/orb_shader/orb_shader_config.dart index ef975cccf8..a038e0be63 100644 --- a/next-gen-ui/step_04_d/lib/orb_shader/orb_shader_config.dart +++ b/next-gen-ui/step_04_d/lib/orb_shader/orb_shader_config.dart @@ -22,14 +22,14 @@ class OrbShaderConfig { this.lightOffsetX = 0, this.lightOffsetY = 0.1, this.lightOffsetZ = -0.66, - }) : assert(zoom >= 0 && zoom <= 1), - assert(exposure >= 0), - assert(metalness >= 0 && metalness <= 1), - assert(lightRadius >= 0), - assert(lightBrightness >= 1), - assert(ior >= 0 && ior <= 2), - assert(lightAttenuation >= 0 && lightAttenuation <= 1), - assert(ambientLightBrightness >= 0); + }) : assert(zoom >= 0 && zoom <= 1), + assert(exposure >= 0), + assert(metalness >= 0 && metalness <= 1), + assert(lightRadius >= 0), + assert(lightBrightness >= 1), + assert(ior >= 0 && ior <= 2), + assert(lightAttenuation >= 0 && lightAttenuation <= 1), + assert(ambientLightBrightness >= 0); final double zoom; diff --git a/next-gen-ui/step_04_d/lib/orb_shader/orb_shader_painter.dart b/next-gen-ui/step_04_d/lib/orb_shader/orb_shader_painter.dart index 399c20ab7e..1e04cc0df8 100644 --- a/next-gen-ui/step_04_d/lib/orb_shader/orb_shader_painter.dart +++ b/next-gen-ui/step_04_d/lib/orb_shader/orb_shader_painter.dart @@ -30,11 +30,13 @@ class OrbShaderPainter extends CustomPainter { v64.Vector3 colorToVector3(Color c) => v64.Vector3(c.r, c.g, c.b); - v64.Vector3 lightLumP = colorToVector3(config.lightColor).normalized() * + v64.Vector3 lightLumP = + colorToVector3(config.lightColor).normalized() * max(0.0, config.lightBrightness); v64.Vector3 albedo = colorToVector3(config.materialColor); - v64.Vector3 ambientLight = colorToVector3(config.ambientLightColor) * + v64.Vector3 ambientLight = + colorToVector3(config.ambientLightColor) * max(0.0, config.ambientLightBrightness); shader.setFloat(0, size.width); diff --git a/next-gen-ui/step_04_d/lib/orb_shader/orb_shader_widget.dart b/next-gen-ui/step_04_d/lib/orb_shader/orb_shader_widget.dart index 573b68afea..4187e7ced2 100644 --- a/next-gen-ui/step_04_d/lib/orb_shader/orb_shader_widget.dart +++ b/next-gen-ui/step_04_d/lib/orb_shader/orb_shader_widget.dart @@ -35,72 +35,82 @@ class OrbShaderWidget extends StatefulWidget { class OrbShaderWidgetState extends State with SingleTickerProviderStateMixin { - final _heartbeatSequence = TweenSequence( - [ - TweenSequenceItem(tween: ConstantTween(0), weight: 40), - TweenSequenceItem( - tween: Tween(begin: 0.0, end: 1.0) - .chain(CurveTween(curve: Curves.easeInOutCubic)), - weight: 8), - TweenSequenceItem( - tween: Tween(begin: 1.0, end: 0.2) - .chain(CurveTween(curve: Curves.easeInOutCubic)), - weight: 12), - TweenSequenceItem( - tween: Tween(begin: 0.2, end: 0.8) - .chain(CurveTween(curve: Curves.easeInOutCubic)), - weight: 6), - TweenSequenceItem( - tween: Tween(begin: 0.8, end: 0.0) - .chain(CurveTween(curve: Curves.easeInOutCubic)), - weight: 10), - ], - ); + final _heartbeatSequence = TweenSequence([ + TweenSequenceItem(tween: ConstantTween(0), weight: 40), + TweenSequenceItem( + tween: Tween( + begin: 0.0, + end: 1.0, + ).chain(CurveTween(curve: Curves.easeInOutCubic)), + weight: 8, + ), + TweenSequenceItem( + tween: Tween( + begin: 1.0, + end: 0.2, + ).chain(CurveTween(curve: Curves.easeInOutCubic)), + weight: 12, + ), + TweenSequenceItem( + tween: Tween( + begin: 0.2, + end: 0.8, + ).chain(CurveTween(curve: Curves.easeInOutCubic)), + weight: 6, + ), + TweenSequenceItem( + tween: Tween( + begin: 0.8, + end: 0.0, + ).chain(CurveTween(curve: Curves.easeInOutCubic)), + weight: 10, + ), + ]); - late final _heartbeatAnim = - AnimationController(vsync: this, duration: 3000.ms)..repeat(); + late final _heartbeatAnim = AnimationController( + vsync: this, + duration: 3000.ms, + )..repeat(); @override Widget build(BuildContext context) => Consumer( - builder: (context, fragmentPrograms, _) { - if (fragmentPrograms == null) return const SizedBox.expand(); - return ListenableBuilder( - listenable: _heartbeatAnim, - builder: (_, __) { - final heartbeatEnergy = - _heartbeatAnim.drive(_heartbeatSequence).value; - return TweenAnimationBuilder( - tween: Tween( - begin: widget.minEnergy, end: widget.minEnergy), - duration: 300.ms, - curve: Curves.easeOutCubic, - builder: (context, minEnergy, child) { - return ReactiveWidget( - builder: (context, time, size) { - double energyLevel = 0; - if (size.shortestSide != 0) { - final d = (Offset(size.width, size.height) / 2 - - widget.mousePos) + builder: (context, fragmentPrograms, _) { + if (fragmentPrograms == null) return const SizedBox.expand(); + return ListenableBuilder( + listenable: _heartbeatAnim, + builder: (_, __) { + final heartbeatEnergy = + _heartbeatAnim.drive(_heartbeatSequence).value; + return TweenAnimationBuilder( + tween: Tween( + begin: widget.minEnergy, + end: widget.minEnergy, + ), + duration: 300.ms, + curve: Curves.easeOutCubic, + builder: (context, minEnergy, child) { + return ReactiveWidget( + builder: (context, time, size) { + double energyLevel = 0; + if (size.shortestSide != 0) { + final d = + (Offset(size.width, size.height) / 2 - widget.mousePos) .distance; - final hitSize = size.shortestSide * .5; - energyLevel = 1 - min(1, (d / hitSize)); - scheduleMicrotask( - () => widget.onUpdate?.call(energyLevel)); - } - energyLevel += - (1.3 - energyLevel) * heartbeatEnergy * 0.1; - energyLevel = lerpDouble(minEnergy, 1, energyLevel)!; - return CustomPaint( - size: size, - painter: OrbShaderPainter( - fragmentPrograms.orb.fragmentShader(), - config: widget.config, - time: time, - mousePos: widget.mousePos, - energy: energyLevel, - ), - ); - }, + final hitSize = size.shortestSide * .5; + energyLevel = 1 - min(1, (d / hitSize)); + scheduleMicrotask(() => widget.onUpdate?.call(energyLevel)); + } + energyLevel += (1.3 - energyLevel) * heartbeatEnergy * 0.1; + energyLevel = lerpDouble(minEnergy, 1, energyLevel)!; + return CustomPaint( + size: size, + painter: OrbShaderPainter( + fragmentPrograms.orb.fragmentShader(), + config: widget.config, + time: time, + mousePos: widget.mousePos, + energy: energyLevel, + ), ); }, ); @@ -108,4 +118,6 @@ class OrbShaderWidgetState extends State ); }, ); + }, + ); } diff --git a/next-gen-ui/step_04_d/lib/styles.dart b/next-gen-ui/step_04_d/lib/styles.dart index 1e449fff3a..fb5083c6a8 100644 --- a/next-gen-ui/step_04_d/lib/styles.dart +++ b/next-gen-ui/step_04_d/lib/styles.dart @@ -8,16 +8,19 @@ class TextStyles { static const _font1 = TextStyle(fontFamily: 'Exo', color: Colors.white); static TextStyle get h1 => _font1.copyWith( - fontSize: 75, letterSpacing: 35, fontWeight: FontWeight.w700); + fontSize: 75, + letterSpacing: 35, + fontWeight: FontWeight.w700, + ); static TextStyle get h2 => h1.copyWith(fontSize: 40, letterSpacing: 0); static TextStyle get h3 => h1.copyWith(fontSize: 24, letterSpacing: 20, fontWeight: FontWeight.w400); static TextStyle get body => _font1.copyWith(fontSize: 16); static TextStyle get btn => _font1.copyWith( - fontSize: 16, - fontWeight: FontWeight.bold, - letterSpacing: 10, - ); + fontSize: 16, + fontWeight: FontWeight.bold, + letterSpacing: 10, + ); } abstract class AppColors { diff --git a/next-gen-ui/step_04_d/lib/title_screen/title_screen_ui.dart b/next-gen-ui/step_04_d/lib/title_screen/title_screen_ui.dart index c83f15dde4..10d3f0c702 100644 --- a/next-gen-ui/step_04_d/lib/title_screen/title_screen_ui.dart +++ b/next-gen-ui/step_04_d/lib/title_screen/title_screen_ui.dart @@ -32,10 +32,7 @@ class TitleScreenUi extends StatelessWidget { children: [ /// Title Text const TopLeft( - child: UiScaler( - alignment: Alignment.topLeft, - child: _TitleText(), - ), + child: UiScaler(alignment: Alignment.topLeft, child: _TitleText()), ), /// Difficulty Btns @@ -88,9 +85,10 @@ class _TitleText extends StatelessWidget { Image.asset(AssetPaths.titleSelectedRight, height: 65), ], ).animate().fadeIn(delay: .8.seconds, duration: .7.seconds), - Text('INTO THE UNKNOWN', style: TextStyles.h3) - .animate() - .fadeIn(delay: 1.seconds, duration: .7.seconds), + Text( + 'INTO THE UNKNOWN', + style: TextStyles.h3, + ).animate().fadeIn(delay: 1.seconds, duration: .7.seconds), ], ); } @@ -113,29 +111,29 @@ class _DifficultyBtns extends StatelessWidget { mainAxisSize: MainAxisSize.min, children: [ _DifficultyBtn( - label: 'Casual', - selected: difficulty == 0, - onPressed: () => onDifficultyPressed(0), - onHover: (over) => onDifficultyFocused(over ? 0 : null), - ) + label: 'Casual', + selected: difficulty == 0, + onPressed: () => onDifficultyPressed(0), + onHover: (over) => onDifficultyFocused(over ? 0 : null), + ) .animate() .fadeIn(delay: 1.3.seconds, duration: .35.seconds) .slide(begin: const Offset(0, .2)), _DifficultyBtn( - label: 'Normal', - selected: difficulty == 1, - onPressed: () => onDifficultyPressed(1), - onHover: (over) => onDifficultyFocused(over ? 1 : null), - ) + label: 'Normal', + selected: difficulty == 1, + onPressed: () => onDifficultyPressed(1), + onHover: (over) => onDifficultyFocused(over ? 1 : null), + ) .animate() .fadeIn(delay: 1.5.seconds, duration: .35.seconds) .slide(begin: const Offset(0, .2)), _DifficultyBtn( - label: 'Hardcore', - selected: difficulty == 2, - onPressed: () => onDifficultyPressed(2), - onHover: (over) => onDifficultyFocused(over ? 2 : null), - ) + label: 'Hardcore', + selected: difficulty == 2, + onPressed: () => onDifficultyPressed(2), + onHover: (over) => onDifficultyFocused(over ? 2 : null), + ) .animate() .fadeIn(delay: 1.7.seconds, duration: .35.seconds) .slide(begin: const Offset(0, .2)), @@ -172,9 +170,10 @@ class _DifficultyBtn extends StatelessWidget { children: [ /// Bg with fill and outline AnimatedOpacity( - opacity: (!selected && (state.isHovered || state.isFocused)) - ? 1 - : 0, + opacity: + (!selected && (state.isHovered || state.isFocused)) + ? 1 + : 0, duration: .3.seconds, child: Container( decoration: BoxDecoration( @@ -194,18 +193,14 @@ class _DifficultyBtn extends StatelessWidget { /// cross-hairs (selected state) if (selected) ...[ - CenterLeft( - child: Image.asset(AssetPaths.titleSelectedLeft), - ), + CenterLeft(child: Image.asset(AssetPaths.titleSelectedLeft)), CenterRight( child: Image.asset(AssetPaths.titleSelectedRight), ), ], /// Label - Center( - child: Text(label.toUpperCase(), style: TextStyles.btn), - ), + Center(child: Text(label.toUpperCase(), style: TextStyles.btn)), ], ), ), @@ -240,30 +235,37 @@ class _StartBtnState extends State<_StartBtn> { } _wasHovered = (state.isHovered || state.isFocused); return SizedBox( - width: 520, - height: 100, - child: Stack( - children: [ - Positioned.fill(child: Image.asset(AssetPaths.titleStartBtn)), - if (state.isHovered || state.isFocused) ...[ - Positioned.fill( - child: Image.asset(AssetPaths.titleStartBtnHover)), - ], - Center( - child: Row( - mainAxisAlignment: MainAxisAlignment.end, - children: [ - Text('START MISSION', - style: TextStyles.btn - .copyWith(fontSize: 24, letterSpacing: 18)), - ], - ), - ), - ], - ) - .animate(autoPlay: false, onInit: (c) => _btnAnim = c) - .shimmer(duration: .7.seconds, color: Colors.black), - ) + width: 520, + height: 100, + child: Stack( + children: [ + Positioned.fill( + child: Image.asset(AssetPaths.titleStartBtn), + ), + if (state.isHovered || state.isFocused) ...[ + Positioned.fill( + child: Image.asset(AssetPaths.titleStartBtnHover), + ), + ], + Center( + child: Row( + mainAxisAlignment: MainAxisAlignment.end, + children: [ + Text( + 'START MISSION', + style: TextStyles.btn.copyWith( + fontSize: 24, + letterSpacing: 18, + ), + ), + ], + ), + ), + ], + ) + .animate(autoPlay: false, onInit: (c) => _btnAnim = c) + .shimmer(duration: .7.seconds, color: Colors.black), + ) .animate() .fadeIn(delay: 2.3.seconds) .slide(begin: const Offset(0, .2)); diff --git a/next-gen-ui/step_04_d/pubspec.yaml b/next-gen-ui/step_04_d/pubspec.yaml index dd3eb24959..7fd82808a1 100644 --- a/next-gen-ui/step_04_d/pubspec.yaml +++ b/next-gen-ui/step_04_d/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: 'none' version: 0.1.0 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 dependencies: flutter: diff --git a/next-gen-ui/step_04_e/lib/assets.dart b/next-gen-ui/step_04_e/lib/assets.dart index d0286c9a12..440dab3f61 100644 --- a/next-gen-ui/step_04_e/lib/assets.dart +++ b/next-gen-ui/step_04_e/lib/assets.dart @@ -32,9 +32,9 @@ class AssetPaths { typedef FragmentPrograms = ({FragmentProgram orb, FragmentProgram ui}); Future loadFragmentPrograms() async => ( - orb: (await _loadFragmentProgram(AssetPaths.orbShader)), - ui: (await _loadFragmentProgram(AssetPaths.uiShader)), - ); + orb: (await _loadFragmentProgram(AssetPaths.orbShader)), + ui: (await _loadFragmentProgram(AssetPaths.uiShader)), +); Future _loadFragmentProgram(String path) async { return (await FragmentProgram.fromAsset(path)); diff --git a/next-gen-ui/step_04_e/lib/common/reactive_widget.dart b/next-gen-ui/step_04_e/lib/common/reactive_widget.dart index c75aa491e9..f480d8b3eb 100644 --- a/next-gen-ui/step_04_e/lib/common/reactive_widget.dart +++ b/next-gen-ui/step_04_e/lib/common/reactive_widget.dart @@ -6,14 +6,11 @@ import 'package:flutter/material.dart'; import 'ticking_builder.dart'; -typedef ReactiveWidgetBuilder = Widget Function( - BuildContext context, double time, Size bounds); +typedef ReactiveWidgetBuilder = + Widget Function(BuildContext context, double time, Size bounds); class ReactiveWidget extends StatefulWidget { - const ReactiveWidget({ - super.key, - required this.builder, - }); + const ReactiveWidget({super.key, required this.builder}); final ReactiveWidgetBuilder builder; @override State createState() => _ReactiveWidgetState(); diff --git a/next-gen-ui/step_04_e/lib/common/shader_effect.dart b/next-gen-ui/step_04_e/lib/common/shader_effect.dart index 69bd75f7d9..7e6ebe8bdf 100644 --- a/next-gen-ui/step_04_e/lib/common/shader_effect.dart +++ b/next-gen-ui/step_04_e/lib/common/shader_effect.dart @@ -32,11 +32,8 @@ class ShaderEffect extends Effect { this.shader, this.update, ShaderLayer? layer, - }) : layer = layer ?? ShaderLayer.replace, - super( - begin: 0, - end: 1, - ); + }) : layer = layer ?? ShaderLayer.replace, + super(begin: 0, end: 1); final ui.FragmentShader? shader; final ShaderUpdateCallback? update; @@ -91,22 +88,28 @@ extension ShaderEffectExtensions on AnimateManager { ui.FragmentShader? shader, ShaderUpdateCallback? update, ShaderLayer? layer, - }) => - addEffect(ShaderEffect( - delay: delay, - duration: duration, - curve: curve, - shader: shader, - update: update, - layer: layer, - )); + }) => addEffect( + ShaderEffect( + delay: delay, + duration: duration, + curve: curve, + shader: shader, + update: update, + layer: layer, + ), + ); } enum ShaderLayer { foreground, background, replace } /// Function signature for [ShaderEffect] update handlers. -typedef ShaderUpdateCallback = EdgeInsets? Function( - ui.FragmentShader shader, double value, Size size, ui.Image image); +typedef ShaderUpdateCallback = + EdgeInsets? Function( + ui.FragmentShader shader, + double value, + Size size, + ui.Image image, + ); /******************************************************************************/ // TODO: add this as a dependency instead of copying it in once it is stable: @@ -117,11 +120,8 @@ typedef ShaderUpdateCallback = EdgeInsets? Function( // found in the LICENSE file. /// A callback for the [AnimatedSamplerBuilder] widget. -typedef AnimatedSamplerBuilder = void Function( - ui.Image image, - Size size, - ui.Canvas canvas, -); +typedef AnimatedSamplerBuilder = + void Function(ui.Image image, Size size, ui.Canvas canvas); /// A widget that allows access to a snapshot of the child widgets for painting /// with a sampler applied to a [FragmentProgram]. @@ -181,11 +181,7 @@ class AnimatedSampler extends StatelessWidget { @override Widget build(BuildContext context) { - return _ShaderSamplerBuilder( - builder, - enabled: enabled, - child: child, - ); + return _ShaderSamplerBuilder(builder, enabled: enabled, child: child); } } @@ -210,7 +206,9 @@ class _ShaderSamplerBuilder extends SingleChildRenderObjectWidget { @override void updateRenderObject( - BuildContext context, covariant RenderObject renderObject) { + BuildContext context, + covariant RenderObject renderObject, + ) { (renderObject as _RenderShaderSamplerBuilderWidget) ..devicePixelRatio = MediaQuery.of(context).devicePixelRatio ..builder = builder @@ -226,13 +224,14 @@ class _RenderShaderSamplerBuilderWidget extends RenderProxyBox { required double devicePixelRatio, required AnimatedSamplerBuilder builder, required bool enabled, - }) : _devicePixelRatio = devicePixelRatio, - _builder = builder, - _enabled = enabled; + }) : _devicePixelRatio = devicePixelRatio, + _builder = builder, + _enabled = enabled; @override - OffsetLayer updateCompositedLayer( - {required covariant _ShaderSamplerBuilderLayer? oldLayer}) { + OffsetLayer updateCompositedLayer({ + required covariant _ShaderSamplerBuilderLayer? oldLayer, + }) { final _ShaderSamplerBuilderLayer layer = oldLayer ?? _ShaderSamplerBuilderLayer(builder); layer @@ -328,24 +327,24 @@ class _ShaderSamplerBuilderLayer extends OffsetLayer { ui.Image _buildChildScene(Rect bounds, double pixelRatio) { final ui.SceneBuilder builder = ui.SceneBuilder(); - final Matrix4 transform = - Matrix4.diagonal3Values(pixelRatio, pixelRatio, 1); + final Matrix4 transform = Matrix4.diagonal3Values( + pixelRatio, + pixelRatio, + 1, + ); builder.pushTransform(transform.storage); addChildrenToScene(builder); builder.pop(); return builder.build().toImageSync( - (pixelRatio * bounds.width).ceil(), - (pixelRatio * bounds.height).ceil(), - ); + (pixelRatio * bounds.width).ceil(), + (pixelRatio * bounds.height).ceil(), + ); } @override void addToScene(ui.SceneBuilder builder) { if (size.isEmpty) return; - final ui.Image image = _buildChildScene( - offset & size, - devicePixelRatio, - ); + final ui.Image image = _buildChildScene(offset & size, devicePixelRatio); final ui.PictureRecorder pictureRecorder = ui.PictureRecorder(); final Canvas canvas = Canvas(pictureRecorder); try { diff --git a/next-gen-ui/step_04_e/lib/common/ui_scaler.dart b/next-gen-ui/step_04_e/lib/common/ui_scaler.dart index 07c3287650..e7dbb9be42 100644 --- a/next-gen-ui/step_04_e/lib/common/ui_scaler.dart +++ b/next-gen-ui/step_04_e/lib/common/ui_scaler.dart @@ -22,10 +22,6 @@ class UiScaler extends StatelessWidget { Widget build(BuildContext context) { final screenSize = MediaQuery.of(context).size; final double scale = min(screenSize.height / referenceHeight, 1.0); - return Transform.scale( - scale: scale, - alignment: alignment, - child: child, - ); + return Transform.scale(scale: scale, alignment: alignment, child: child); } } diff --git a/next-gen-ui/step_04_e/lib/orb_shader/orb_shader_config.dart b/next-gen-ui/step_04_e/lib/orb_shader/orb_shader_config.dart index ef975cccf8..a038e0be63 100644 --- a/next-gen-ui/step_04_e/lib/orb_shader/orb_shader_config.dart +++ b/next-gen-ui/step_04_e/lib/orb_shader/orb_shader_config.dart @@ -22,14 +22,14 @@ class OrbShaderConfig { this.lightOffsetX = 0, this.lightOffsetY = 0.1, this.lightOffsetZ = -0.66, - }) : assert(zoom >= 0 && zoom <= 1), - assert(exposure >= 0), - assert(metalness >= 0 && metalness <= 1), - assert(lightRadius >= 0), - assert(lightBrightness >= 1), - assert(ior >= 0 && ior <= 2), - assert(lightAttenuation >= 0 && lightAttenuation <= 1), - assert(ambientLightBrightness >= 0); + }) : assert(zoom >= 0 && zoom <= 1), + assert(exposure >= 0), + assert(metalness >= 0 && metalness <= 1), + assert(lightRadius >= 0), + assert(lightBrightness >= 1), + assert(ior >= 0 && ior <= 2), + assert(lightAttenuation >= 0 && lightAttenuation <= 1), + assert(ambientLightBrightness >= 0); final double zoom; diff --git a/next-gen-ui/step_04_e/lib/orb_shader/orb_shader_painter.dart b/next-gen-ui/step_04_e/lib/orb_shader/orb_shader_painter.dart index 399c20ab7e..1e04cc0df8 100644 --- a/next-gen-ui/step_04_e/lib/orb_shader/orb_shader_painter.dart +++ b/next-gen-ui/step_04_e/lib/orb_shader/orb_shader_painter.dart @@ -30,11 +30,13 @@ class OrbShaderPainter extends CustomPainter { v64.Vector3 colorToVector3(Color c) => v64.Vector3(c.r, c.g, c.b); - v64.Vector3 lightLumP = colorToVector3(config.lightColor).normalized() * + v64.Vector3 lightLumP = + colorToVector3(config.lightColor).normalized() * max(0.0, config.lightBrightness); v64.Vector3 albedo = colorToVector3(config.materialColor); - v64.Vector3 ambientLight = colorToVector3(config.ambientLightColor) * + v64.Vector3 ambientLight = + colorToVector3(config.ambientLightColor) * max(0.0, config.ambientLightBrightness); shader.setFloat(0, size.width); diff --git a/next-gen-ui/step_04_e/lib/orb_shader/orb_shader_widget.dart b/next-gen-ui/step_04_e/lib/orb_shader/orb_shader_widget.dart index 573b68afea..4187e7ced2 100644 --- a/next-gen-ui/step_04_e/lib/orb_shader/orb_shader_widget.dart +++ b/next-gen-ui/step_04_e/lib/orb_shader/orb_shader_widget.dart @@ -35,72 +35,82 @@ class OrbShaderWidget extends StatefulWidget { class OrbShaderWidgetState extends State with SingleTickerProviderStateMixin { - final _heartbeatSequence = TweenSequence( - [ - TweenSequenceItem(tween: ConstantTween(0), weight: 40), - TweenSequenceItem( - tween: Tween(begin: 0.0, end: 1.0) - .chain(CurveTween(curve: Curves.easeInOutCubic)), - weight: 8), - TweenSequenceItem( - tween: Tween(begin: 1.0, end: 0.2) - .chain(CurveTween(curve: Curves.easeInOutCubic)), - weight: 12), - TweenSequenceItem( - tween: Tween(begin: 0.2, end: 0.8) - .chain(CurveTween(curve: Curves.easeInOutCubic)), - weight: 6), - TweenSequenceItem( - tween: Tween(begin: 0.8, end: 0.0) - .chain(CurveTween(curve: Curves.easeInOutCubic)), - weight: 10), - ], - ); + final _heartbeatSequence = TweenSequence([ + TweenSequenceItem(tween: ConstantTween(0), weight: 40), + TweenSequenceItem( + tween: Tween( + begin: 0.0, + end: 1.0, + ).chain(CurveTween(curve: Curves.easeInOutCubic)), + weight: 8, + ), + TweenSequenceItem( + tween: Tween( + begin: 1.0, + end: 0.2, + ).chain(CurveTween(curve: Curves.easeInOutCubic)), + weight: 12, + ), + TweenSequenceItem( + tween: Tween( + begin: 0.2, + end: 0.8, + ).chain(CurveTween(curve: Curves.easeInOutCubic)), + weight: 6, + ), + TweenSequenceItem( + tween: Tween( + begin: 0.8, + end: 0.0, + ).chain(CurveTween(curve: Curves.easeInOutCubic)), + weight: 10, + ), + ]); - late final _heartbeatAnim = - AnimationController(vsync: this, duration: 3000.ms)..repeat(); + late final _heartbeatAnim = AnimationController( + vsync: this, + duration: 3000.ms, + )..repeat(); @override Widget build(BuildContext context) => Consumer( - builder: (context, fragmentPrograms, _) { - if (fragmentPrograms == null) return const SizedBox.expand(); - return ListenableBuilder( - listenable: _heartbeatAnim, - builder: (_, __) { - final heartbeatEnergy = - _heartbeatAnim.drive(_heartbeatSequence).value; - return TweenAnimationBuilder( - tween: Tween( - begin: widget.minEnergy, end: widget.minEnergy), - duration: 300.ms, - curve: Curves.easeOutCubic, - builder: (context, minEnergy, child) { - return ReactiveWidget( - builder: (context, time, size) { - double energyLevel = 0; - if (size.shortestSide != 0) { - final d = (Offset(size.width, size.height) / 2 - - widget.mousePos) + builder: (context, fragmentPrograms, _) { + if (fragmentPrograms == null) return const SizedBox.expand(); + return ListenableBuilder( + listenable: _heartbeatAnim, + builder: (_, __) { + final heartbeatEnergy = + _heartbeatAnim.drive(_heartbeatSequence).value; + return TweenAnimationBuilder( + tween: Tween( + begin: widget.minEnergy, + end: widget.minEnergy, + ), + duration: 300.ms, + curve: Curves.easeOutCubic, + builder: (context, minEnergy, child) { + return ReactiveWidget( + builder: (context, time, size) { + double energyLevel = 0; + if (size.shortestSide != 0) { + final d = + (Offset(size.width, size.height) / 2 - widget.mousePos) .distance; - final hitSize = size.shortestSide * .5; - energyLevel = 1 - min(1, (d / hitSize)); - scheduleMicrotask( - () => widget.onUpdate?.call(energyLevel)); - } - energyLevel += - (1.3 - energyLevel) * heartbeatEnergy * 0.1; - energyLevel = lerpDouble(minEnergy, 1, energyLevel)!; - return CustomPaint( - size: size, - painter: OrbShaderPainter( - fragmentPrograms.orb.fragmentShader(), - config: widget.config, - time: time, - mousePos: widget.mousePos, - energy: energyLevel, - ), - ); - }, + final hitSize = size.shortestSide * .5; + energyLevel = 1 - min(1, (d / hitSize)); + scheduleMicrotask(() => widget.onUpdate?.call(energyLevel)); + } + energyLevel += (1.3 - energyLevel) * heartbeatEnergy * 0.1; + energyLevel = lerpDouble(minEnergy, 1, energyLevel)!; + return CustomPaint( + size: size, + painter: OrbShaderPainter( + fragmentPrograms.orb.fragmentShader(), + config: widget.config, + time: time, + mousePos: widget.mousePos, + energy: energyLevel, + ), ); }, ); @@ -108,4 +118,6 @@ class OrbShaderWidgetState extends State ); }, ); + }, + ); } diff --git a/next-gen-ui/step_04_e/lib/styles.dart b/next-gen-ui/step_04_e/lib/styles.dart index 1e449fff3a..fb5083c6a8 100644 --- a/next-gen-ui/step_04_e/lib/styles.dart +++ b/next-gen-ui/step_04_e/lib/styles.dart @@ -8,16 +8,19 @@ class TextStyles { static const _font1 = TextStyle(fontFamily: 'Exo', color: Colors.white); static TextStyle get h1 => _font1.copyWith( - fontSize: 75, letterSpacing: 35, fontWeight: FontWeight.w700); + fontSize: 75, + letterSpacing: 35, + fontWeight: FontWeight.w700, + ); static TextStyle get h2 => h1.copyWith(fontSize: 40, letterSpacing: 0); static TextStyle get h3 => h1.copyWith(fontSize: 24, letterSpacing: 20, fontWeight: FontWeight.w400); static TextStyle get body => _font1.copyWith(fontSize: 16); static TextStyle get btn => _font1.copyWith( - fontSize: 16, - fontWeight: FontWeight.bold, - letterSpacing: 10, - ); + fontSize: 16, + fontWeight: FontWeight.bold, + letterSpacing: 10, + ); } abstract class AppColors { diff --git a/next-gen-ui/step_04_e/lib/title_screen/title_screen.dart b/next-gen-ui/step_04_e/lib/title_screen/title_screen.dart index 4c6723725b..aad83b04cb 100644 --- a/next-gen-ui/step_04_e/lib/title_screen/title_screen.dart +++ b/next-gen-ui/step_04_e/lib/title_screen/title_screen.dart @@ -147,7 +147,7 @@ class _AnimatedColors extends StatelessWidget { final Color orbColor; final Widget Function(BuildContext context, Color orbColor, Color emitColor) - builder; + builder; @override Widget build(BuildContext context) { diff --git a/next-gen-ui/step_04_e/lib/title_screen/title_screen_ui.dart b/next-gen-ui/step_04_e/lib/title_screen/title_screen_ui.dart index c83f15dde4..10d3f0c702 100644 --- a/next-gen-ui/step_04_e/lib/title_screen/title_screen_ui.dart +++ b/next-gen-ui/step_04_e/lib/title_screen/title_screen_ui.dart @@ -32,10 +32,7 @@ class TitleScreenUi extends StatelessWidget { children: [ /// Title Text const TopLeft( - child: UiScaler( - alignment: Alignment.topLeft, - child: _TitleText(), - ), + child: UiScaler(alignment: Alignment.topLeft, child: _TitleText()), ), /// Difficulty Btns @@ -88,9 +85,10 @@ class _TitleText extends StatelessWidget { Image.asset(AssetPaths.titleSelectedRight, height: 65), ], ).animate().fadeIn(delay: .8.seconds, duration: .7.seconds), - Text('INTO THE UNKNOWN', style: TextStyles.h3) - .animate() - .fadeIn(delay: 1.seconds, duration: .7.seconds), + Text( + 'INTO THE UNKNOWN', + style: TextStyles.h3, + ).animate().fadeIn(delay: 1.seconds, duration: .7.seconds), ], ); } @@ -113,29 +111,29 @@ class _DifficultyBtns extends StatelessWidget { mainAxisSize: MainAxisSize.min, children: [ _DifficultyBtn( - label: 'Casual', - selected: difficulty == 0, - onPressed: () => onDifficultyPressed(0), - onHover: (over) => onDifficultyFocused(over ? 0 : null), - ) + label: 'Casual', + selected: difficulty == 0, + onPressed: () => onDifficultyPressed(0), + onHover: (over) => onDifficultyFocused(over ? 0 : null), + ) .animate() .fadeIn(delay: 1.3.seconds, duration: .35.seconds) .slide(begin: const Offset(0, .2)), _DifficultyBtn( - label: 'Normal', - selected: difficulty == 1, - onPressed: () => onDifficultyPressed(1), - onHover: (over) => onDifficultyFocused(over ? 1 : null), - ) + label: 'Normal', + selected: difficulty == 1, + onPressed: () => onDifficultyPressed(1), + onHover: (over) => onDifficultyFocused(over ? 1 : null), + ) .animate() .fadeIn(delay: 1.5.seconds, duration: .35.seconds) .slide(begin: const Offset(0, .2)), _DifficultyBtn( - label: 'Hardcore', - selected: difficulty == 2, - onPressed: () => onDifficultyPressed(2), - onHover: (over) => onDifficultyFocused(over ? 2 : null), - ) + label: 'Hardcore', + selected: difficulty == 2, + onPressed: () => onDifficultyPressed(2), + onHover: (over) => onDifficultyFocused(over ? 2 : null), + ) .animate() .fadeIn(delay: 1.7.seconds, duration: .35.seconds) .slide(begin: const Offset(0, .2)), @@ -172,9 +170,10 @@ class _DifficultyBtn extends StatelessWidget { children: [ /// Bg with fill and outline AnimatedOpacity( - opacity: (!selected && (state.isHovered || state.isFocused)) - ? 1 - : 0, + opacity: + (!selected && (state.isHovered || state.isFocused)) + ? 1 + : 0, duration: .3.seconds, child: Container( decoration: BoxDecoration( @@ -194,18 +193,14 @@ class _DifficultyBtn extends StatelessWidget { /// cross-hairs (selected state) if (selected) ...[ - CenterLeft( - child: Image.asset(AssetPaths.titleSelectedLeft), - ), + CenterLeft(child: Image.asset(AssetPaths.titleSelectedLeft)), CenterRight( child: Image.asset(AssetPaths.titleSelectedRight), ), ], /// Label - Center( - child: Text(label.toUpperCase(), style: TextStyles.btn), - ), + Center(child: Text(label.toUpperCase(), style: TextStyles.btn)), ], ), ), @@ -240,30 +235,37 @@ class _StartBtnState extends State<_StartBtn> { } _wasHovered = (state.isHovered || state.isFocused); return SizedBox( - width: 520, - height: 100, - child: Stack( - children: [ - Positioned.fill(child: Image.asset(AssetPaths.titleStartBtn)), - if (state.isHovered || state.isFocused) ...[ - Positioned.fill( - child: Image.asset(AssetPaths.titleStartBtnHover)), - ], - Center( - child: Row( - mainAxisAlignment: MainAxisAlignment.end, - children: [ - Text('START MISSION', - style: TextStyles.btn - .copyWith(fontSize: 24, letterSpacing: 18)), - ], - ), - ), - ], - ) - .animate(autoPlay: false, onInit: (c) => _btnAnim = c) - .shimmer(duration: .7.seconds, color: Colors.black), - ) + width: 520, + height: 100, + child: Stack( + children: [ + Positioned.fill( + child: Image.asset(AssetPaths.titleStartBtn), + ), + if (state.isHovered || state.isFocused) ...[ + Positioned.fill( + child: Image.asset(AssetPaths.titleStartBtnHover), + ), + ], + Center( + child: Row( + mainAxisAlignment: MainAxisAlignment.end, + children: [ + Text( + 'START MISSION', + style: TextStyles.btn.copyWith( + fontSize: 24, + letterSpacing: 18, + ), + ), + ], + ), + ), + ], + ) + .animate(autoPlay: false, onInit: (c) => _btnAnim = c) + .shimmer(duration: .7.seconds, color: Colors.black), + ) .animate() .fadeIn(delay: 2.3.seconds) .slide(begin: const Offset(0, .2)); diff --git a/next-gen-ui/step_04_e/pubspec.yaml b/next-gen-ui/step_04_e/pubspec.yaml index dd3eb24959..7fd82808a1 100644 --- a/next-gen-ui/step_04_e/pubspec.yaml +++ b/next-gen-ui/step_04_e/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: 'none' version: 0.1.0 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 dependencies: flutter: diff --git a/next-gen-ui/step_05_a/lib/assets.dart b/next-gen-ui/step_05_a/lib/assets.dart index d0286c9a12..440dab3f61 100644 --- a/next-gen-ui/step_05_a/lib/assets.dart +++ b/next-gen-ui/step_05_a/lib/assets.dart @@ -32,9 +32,9 @@ class AssetPaths { typedef FragmentPrograms = ({FragmentProgram orb, FragmentProgram ui}); Future loadFragmentPrograms() async => ( - orb: (await _loadFragmentProgram(AssetPaths.orbShader)), - ui: (await _loadFragmentProgram(AssetPaths.uiShader)), - ); + orb: (await _loadFragmentProgram(AssetPaths.orbShader)), + ui: (await _loadFragmentProgram(AssetPaths.uiShader)), +); Future _loadFragmentProgram(String path) async { return (await FragmentProgram.fromAsset(path)); diff --git a/next-gen-ui/step_05_a/lib/common/reactive_widget.dart b/next-gen-ui/step_05_a/lib/common/reactive_widget.dart index c75aa491e9..f480d8b3eb 100644 --- a/next-gen-ui/step_05_a/lib/common/reactive_widget.dart +++ b/next-gen-ui/step_05_a/lib/common/reactive_widget.dart @@ -6,14 +6,11 @@ import 'package:flutter/material.dart'; import 'ticking_builder.dart'; -typedef ReactiveWidgetBuilder = Widget Function( - BuildContext context, double time, Size bounds); +typedef ReactiveWidgetBuilder = + Widget Function(BuildContext context, double time, Size bounds); class ReactiveWidget extends StatefulWidget { - const ReactiveWidget({ - super.key, - required this.builder, - }); + const ReactiveWidget({super.key, required this.builder}); final ReactiveWidgetBuilder builder; @override State createState() => _ReactiveWidgetState(); diff --git a/next-gen-ui/step_05_a/lib/common/shader_effect.dart b/next-gen-ui/step_05_a/lib/common/shader_effect.dart index 69bd75f7d9..7e6ebe8bdf 100644 --- a/next-gen-ui/step_05_a/lib/common/shader_effect.dart +++ b/next-gen-ui/step_05_a/lib/common/shader_effect.dart @@ -32,11 +32,8 @@ class ShaderEffect extends Effect { this.shader, this.update, ShaderLayer? layer, - }) : layer = layer ?? ShaderLayer.replace, - super( - begin: 0, - end: 1, - ); + }) : layer = layer ?? ShaderLayer.replace, + super(begin: 0, end: 1); final ui.FragmentShader? shader; final ShaderUpdateCallback? update; @@ -91,22 +88,28 @@ extension ShaderEffectExtensions on AnimateManager { ui.FragmentShader? shader, ShaderUpdateCallback? update, ShaderLayer? layer, - }) => - addEffect(ShaderEffect( - delay: delay, - duration: duration, - curve: curve, - shader: shader, - update: update, - layer: layer, - )); + }) => addEffect( + ShaderEffect( + delay: delay, + duration: duration, + curve: curve, + shader: shader, + update: update, + layer: layer, + ), + ); } enum ShaderLayer { foreground, background, replace } /// Function signature for [ShaderEffect] update handlers. -typedef ShaderUpdateCallback = EdgeInsets? Function( - ui.FragmentShader shader, double value, Size size, ui.Image image); +typedef ShaderUpdateCallback = + EdgeInsets? Function( + ui.FragmentShader shader, + double value, + Size size, + ui.Image image, + ); /******************************************************************************/ // TODO: add this as a dependency instead of copying it in once it is stable: @@ -117,11 +120,8 @@ typedef ShaderUpdateCallback = EdgeInsets? Function( // found in the LICENSE file. /// A callback for the [AnimatedSamplerBuilder] widget. -typedef AnimatedSamplerBuilder = void Function( - ui.Image image, - Size size, - ui.Canvas canvas, -); +typedef AnimatedSamplerBuilder = + void Function(ui.Image image, Size size, ui.Canvas canvas); /// A widget that allows access to a snapshot of the child widgets for painting /// with a sampler applied to a [FragmentProgram]. @@ -181,11 +181,7 @@ class AnimatedSampler extends StatelessWidget { @override Widget build(BuildContext context) { - return _ShaderSamplerBuilder( - builder, - enabled: enabled, - child: child, - ); + return _ShaderSamplerBuilder(builder, enabled: enabled, child: child); } } @@ -210,7 +206,9 @@ class _ShaderSamplerBuilder extends SingleChildRenderObjectWidget { @override void updateRenderObject( - BuildContext context, covariant RenderObject renderObject) { + BuildContext context, + covariant RenderObject renderObject, + ) { (renderObject as _RenderShaderSamplerBuilderWidget) ..devicePixelRatio = MediaQuery.of(context).devicePixelRatio ..builder = builder @@ -226,13 +224,14 @@ class _RenderShaderSamplerBuilderWidget extends RenderProxyBox { required double devicePixelRatio, required AnimatedSamplerBuilder builder, required bool enabled, - }) : _devicePixelRatio = devicePixelRatio, - _builder = builder, - _enabled = enabled; + }) : _devicePixelRatio = devicePixelRatio, + _builder = builder, + _enabled = enabled; @override - OffsetLayer updateCompositedLayer( - {required covariant _ShaderSamplerBuilderLayer? oldLayer}) { + OffsetLayer updateCompositedLayer({ + required covariant _ShaderSamplerBuilderLayer? oldLayer, + }) { final _ShaderSamplerBuilderLayer layer = oldLayer ?? _ShaderSamplerBuilderLayer(builder); layer @@ -328,24 +327,24 @@ class _ShaderSamplerBuilderLayer extends OffsetLayer { ui.Image _buildChildScene(Rect bounds, double pixelRatio) { final ui.SceneBuilder builder = ui.SceneBuilder(); - final Matrix4 transform = - Matrix4.diagonal3Values(pixelRatio, pixelRatio, 1); + final Matrix4 transform = Matrix4.diagonal3Values( + pixelRatio, + pixelRatio, + 1, + ); builder.pushTransform(transform.storage); addChildrenToScene(builder); builder.pop(); return builder.build().toImageSync( - (pixelRatio * bounds.width).ceil(), - (pixelRatio * bounds.height).ceil(), - ); + (pixelRatio * bounds.width).ceil(), + (pixelRatio * bounds.height).ceil(), + ); } @override void addToScene(ui.SceneBuilder builder) { if (size.isEmpty) return; - final ui.Image image = _buildChildScene( - offset & size, - devicePixelRatio, - ); + final ui.Image image = _buildChildScene(offset & size, devicePixelRatio); final ui.PictureRecorder pictureRecorder = ui.PictureRecorder(); final Canvas canvas = Canvas(pictureRecorder); try { diff --git a/next-gen-ui/step_05_a/lib/common/ui_scaler.dart b/next-gen-ui/step_05_a/lib/common/ui_scaler.dart index 07c3287650..e7dbb9be42 100644 --- a/next-gen-ui/step_05_a/lib/common/ui_scaler.dart +++ b/next-gen-ui/step_05_a/lib/common/ui_scaler.dart @@ -22,10 +22,6 @@ class UiScaler extends StatelessWidget { Widget build(BuildContext context) { final screenSize = MediaQuery.of(context).size; final double scale = min(screenSize.height / referenceHeight, 1.0); - return Transform.scale( - scale: scale, - alignment: alignment, - child: child, - ); + return Transform.scale(scale: scale, alignment: alignment, child: child); } } diff --git a/next-gen-ui/step_05_a/lib/orb_shader/orb_shader_config.dart b/next-gen-ui/step_05_a/lib/orb_shader/orb_shader_config.dart index ef975cccf8..a038e0be63 100644 --- a/next-gen-ui/step_05_a/lib/orb_shader/orb_shader_config.dart +++ b/next-gen-ui/step_05_a/lib/orb_shader/orb_shader_config.dart @@ -22,14 +22,14 @@ class OrbShaderConfig { this.lightOffsetX = 0, this.lightOffsetY = 0.1, this.lightOffsetZ = -0.66, - }) : assert(zoom >= 0 && zoom <= 1), - assert(exposure >= 0), - assert(metalness >= 0 && metalness <= 1), - assert(lightRadius >= 0), - assert(lightBrightness >= 1), - assert(ior >= 0 && ior <= 2), - assert(lightAttenuation >= 0 && lightAttenuation <= 1), - assert(ambientLightBrightness >= 0); + }) : assert(zoom >= 0 && zoom <= 1), + assert(exposure >= 0), + assert(metalness >= 0 && metalness <= 1), + assert(lightRadius >= 0), + assert(lightBrightness >= 1), + assert(ior >= 0 && ior <= 2), + assert(lightAttenuation >= 0 && lightAttenuation <= 1), + assert(ambientLightBrightness >= 0); final double zoom; diff --git a/next-gen-ui/step_05_a/lib/orb_shader/orb_shader_painter.dart b/next-gen-ui/step_05_a/lib/orb_shader/orb_shader_painter.dart index 399c20ab7e..1e04cc0df8 100644 --- a/next-gen-ui/step_05_a/lib/orb_shader/orb_shader_painter.dart +++ b/next-gen-ui/step_05_a/lib/orb_shader/orb_shader_painter.dart @@ -30,11 +30,13 @@ class OrbShaderPainter extends CustomPainter { v64.Vector3 colorToVector3(Color c) => v64.Vector3(c.r, c.g, c.b); - v64.Vector3 lightLumP = colorToVector3(config.lightColor).normalized() * + v64.Vector3 lightLumP = + colorToVector3(config.lightColor).normalized() * max(0.0, config.lightBrightness); v64.Vector3 albedo = colorToVector3(config.materialColor); - v64.Vector3 ambientLight = colorToVector3(config.ambientLightColor) * + v64.Vector3 ambientLight = + colorToVector3(config.ambientLightColor) * max(0.0, config.ambientLightBrightness); shader.setFloat(0, size.width); diff --git a/next-gen-ui/step_05_a/lib/orb_shader/orb_shader_widget.dart b/next-gen-ui/step_05_a/lib/orb_shader/orb_shader_widget.dart index 573b68afea..4187e7ced2 100644 --- a/next-gen-ui/step_05_a/lib/orb_shader/orb_shader_widget.dart +++ b/next-gen-ui/step_05_a/lib/orb_shader/orb_shader_widget.dart @@ -35,72 +35,82 @@ class OrbShaderWidget extends StatefulWidget { class OrbShaderWidgetState extends State with SingleTickerProviderStateMixin { - final _heartbeatSequence = TweenSequence( - [ - TweenSequenceItem(tween: ConstantTween(0), weight: 40), - TweenSequenceItem( - tween: Tween(begin: 0.0, end: 1.0) - .chain(CurveTween(curve: Curves.easeInOutCubic)), - weight: 8), - TweenSequenceItem( - tween: Tween(begin: 1.0, end: 0.2) - .chain(CurveTween(curve: Curves.easeInOutCubic)), - weight: 12), - TweenSequenceItem( - tween: Tween(begin: 0.2, end: 0.8) - .chain(CurveTween(curve: Curves.easeInOutCubic)), - weight: 6), - TweenSequenceItem( - tween: Tween(begin: 0.8, end: 0.0) - .chain(CurveTween(curve: Curves.easeInOutCubic)), - weight: 10), - ], - ); + final _heartbeatSequence = TweenSequence([ + TweenSequenceItem(tween: ConstantTween(0), weight: 40), + TweenSequenceItem( + tween: Tween( + begin: 0.0, + end: 1.0, + ).chain(CurveTween(curve: Curves.easeInOutCubic)), + weight: 8, + ), + TweenSequenceItem( + tween: Tween( + begin: 1.0, + end: 0.2, + ).chain(CurveTween(curve: Curves.easeInOutCubic)), + weight: 12, + ), + TweenSequenceItem( + tween: Tween( + begin: 0.2, + end: 0.8, + ).chain(CurveTween(curve: Curves.easeInOutCubic)), + weight: 6, + ), + TweenSequenceItem( + tween: Tween( + begin: 0.8, + end: 0.0, + ).chain(CurveTween(curve: Curves.easeInOutCubic)), + weight: 10, + ), + ]); - late final _heartbeatAnim = - AnimationController(vsync: this, duration: 3000.ms)..repeat(); + late final _heartbeatAnim = AnimationController( + vsync: this, + duration: 3000.ms, + )..repeat(); @override Widget build(BuildContext context) => Consumer( - builder: (context, fragmentPrograms, _) { - if (fragmentPrograms == null) return const SizedBox.expand(); - return ListenableBuilder( - listenable: _heartbeatAnim, - builder: (_, __) { - final heartbeatEnergy = - _heartbeatAnim.drive(_heartbeatSequence).value; - return TweenAnimationBuilder( - tween: Tween( - begin: widget.minEnergy, end: widget.minEnergy), - duration: 300.ms, - curve: Curves.easeOutCubic, - builder: (context, minEnergy, child) { - return ReactiveWidget( - builder: (context, time, size) { - double energyLevel = 0; - if (size.shortestSide != 0) { - final d = (Offset(size.width, size.height) / 2 - - widget.mousePos) + builder: (context, fragmentPrograms, _) { + if (fragmentPrograms == null) return const SizedBox.expand(); + return ListenableBuilder( + listenable: _heartbeatAnim, + builder: (_, __) { + final heartbeatEnergy = + _heartbeatAnim.drive(_heartbeatSequence).value; + return TweenAnimationBuilder( + tween: Tween( + begin: widget.minEnergy, + end: widget.minEnergy, + ), + duration: 300.ms, + curve: Curves.easeOutCubic, + builder: (context, minEnergy, child) { + return ReactiveWidget( + builder: (context, time, size) { + double energyLevel = 0; + if (size.shortestSide != 0) { + final d = + (Offset(size.width, size.height) / 2 - widget.mousePos) .distance; - final hitSize = size.shortestSide * .5; - energyLevel = 1 - min(1, (d / hitSize)); - scheduleMicrotask( - () => widget.onUpdate?.call(energyLevel)); - } - energyLevel += - (1.3 - energyLevel) * heartbeatEnergy * 0.1; - energyLevel = lerpDouble(minEnergy, 1, energyLevel)!; - return CustomPaint( - size: size, - painter: OrbShaderPainter( - fragmentPrograms.orb.fragmentShader(), - config: widget.config, - time: time, - mousePos: widget.mousePos, - energy: energyLevel, - ), - ); - }, + final hitSize = size.shortestSide * .5; + energyLevel = 1 - min(1, (d / hitSize)); + scheduleMicrotask(() => widget.onUpdate?.call(energyLevel)); + } + energyLevel += (1.3 - energyLevel) * heartbeatEnergy * 0.1; + energyLevel = lerpDouble(minEnergy, 1, energyLevel)!; + return CustomPaint( + size: size, + painter: OrbShaderPainter( + fragmentPrograms.orb.fragmentShader(), + config: widget.config, + time: time, + mousePos: widget.mousePos, + energy: energyLevel, + ), ); }, ); @@ -108,4 +118,6 @@ class OrbShaderWidgetState extends State ); }, ); + }, + ); } diff --git a/next-gen-ui/step_05_a/lib/styles.dart b/next-gen-ui/step_05_a/lib/styles.dart index 1e449fff3a..fb5083c6a8 100644 --- a/next-gen-ui/step_05_a/lib/styles.dart +++ b/next-gen-ui/step_05_a/lib/styles.dart @@ -8,16 +8,19 @@ class TextStyles { static const _font1 = TextStyle(fontFamily: 'Exo', color: Colors.white); static TextStyle get h1 => _font1.copyWith( - fontSize: 75, letterSpacing: 35, fontWeight: FontWeight.w700); + fontSize: 75, + letterSpacing: 35, + fontWeight: FontWeight.w700, + ); static TextStyle get h2 => h1.copyWith(fontSize: 40, letterSpacing: 0); static TextStyle get h3 => h1.copyWith(fontSize: 24, letterSpacing: 20, fontWeight: FontWeight.w400); static TextStyle get body => _font1.copyWith(fontSize: 16); static TextStyle get btn => _font1.copyWith( - fontSize: 16, - fontWeight: FontWeight.bold, - letterSpacing: 10, - ); + fontSize: 16, + fontWeight: FontWeight.bold, + letterSpacing: 10, + ); } abstract class AppColors { diff --git a/next-gen-ui/step_05_a/lib/title_screen/title_screen.dart b/next-gen-ui/step_05_a/lib/title_screen/title_screen.dart index 4c6723725b..aad83b04cb 100644 --- a/next-gen-ui/step_05_a/lib/title_screen/title_screen.dart +++ b/next-gen-ui/step_05_a/lib/title_screen/title_screen.dart @@ -147,7 +147,7 @@ class _AnimatedColors extends StatelessWidget { final Color orbColor; final Widget Function(BuildContext context, Color orbColor, Color emitColor) - builder; + builder; @override Widget build(BuildContext context) { diff --git a/next-gen-ui/step_05_a/lib/title_screen/title_screen_ui.dart b/next-gen-ui/step_05_a/lib/title_screen/title_screen_ui.dart index 3bf7e64717..16ac96eb77 100644 --- a/next-gen-ui/step_05_a/lib/title_screen/title_screen_ui.dart +++ b/next-gen-ui/step_05_a/lib/title_screen/title_screen_ui.dart @@ -35,10 +35,7 @@ class TitleScreenUi extends StatelessWidget { children: [ /// Title Text const TopLeft( - child: UiScaler( - alignment: Alignment.topLeft, - child: _TitleText(), - ), + child: UiScaler(alignment: Alignment.topLeft, child: _TitleText()), ), /// Difficulty Btns @@ -91,9 +88,10 @@ class _TitleText extends StatelessWidget { Image.asset(AssetPaths.titleSelectedRight, height: 65), ], ).animate().fadeIn(delay: .8.seconds, duration: .7.seconds), - Text('INTO THE UNKNOWN', style: TextStyles.h3) - .animate() - .fadeIn(delay: 1.seconds, duration: .7.seconds), + Text( + 'INTO THE UNKNOWN', + style: TextStyles.h3, + ).animate().fadeIn(delay: 1.seconds, duration: .7.seconds), ], ); return Consumer( @@ -101,21 +99,22 @@ class _TitleText extends StatelessWidget { if (fragmentPrograms == null) return content; return TickingBuilder( builder: (context, time) { - return AnimatedSampler( - (image, size, canvas) { - const double overdrawPx = 30; - final shader = fragmentPrograms.ui.fragmentShader(); - shader - ..setFloat(0, size.width) - ..setFloat(1, size.height) - ..setFloat(2, time) - ..setImageSampler(0, image); - Rect rect = Rect.fromLTWH(-overdrawPx, -overdrawPx, - size.width + overdrawPx, size.height + overdrawPx); - canvas.drawRect(rect, Paint()..shader = shader); - }, - child: content, - ); + return AnimatedSampler((image, size, canvas) { + const double overdrawPx = 30; + final shader = fragmentPrograms.ui.fragmentShader(); + shader + ..setFloat(0, size.width) + ..setFloat(1, size.height) + ..setFloat(2, time) + ..setImageSampler(0, image); + Rect rect = Rect.fromLTWH( + -overdrawPx, + -overdrawPx, + size.width + overdrawPx, + size.height + overdrawPx, + ); + canvas.drawRect(rect, Paint()..shader = shader); + }, child: content); }, ); }, @@ -140,29 +139,29 @@ class _DifficultyBtns extends StatelessWidget { mainAxisSize: MainAxisSize.min, children: [ _DifficultyBtn( - label: 'Casual', - selected: difficulty == 0, - onPressed: () => onDifficultyPressed(0), - onHover: (over) => onDifficultyFocused(over ? 0 : null), - ) + label: 'Casual', + selected: difficulty == 0, + onPressed: () => onDifficultyPressed(0), + onHover: (over) => onDifficultyFocused(over ? 0 : null), + ) .animate() .fadeIn(delay: 1.3.seconds, duration: .35.seconds) .slide(begin: const Offset(0, .2)), _DifficultyBtn( - label: 'Normal', - selected: difficulty == 1, - onPressed: () => onDifficultyPressed(1), - onHover: (over) => onDifficultyFocused(over ? 1 : null), - ) + label: 'Normal', + selected: difficulty == 1, + onPressed: () => onDifficultyPressed(1), + onHover: (over) => onDifficultyFocused(over ? 1 : null), + ) .animate() .fadeIn(delay: 1.5.seconds, duration: .35.seconds) .slide(begin: const Offset(0, .2)), _DifficultyBtn( - label: 'Hardcore', - selected: difficulty == 2, - onPressed: () => onDifficultyPressed(2), - onHover: (over) => onDifficultyFocused(over ? 2 : null), - ) + label: 'Hardcore', + selected: difficulty == 2, + onPressed: () => onDifficultyPressed(2), + onHover: (over) => onDifficultyFocused(over ? 2 : null), + ) .animate() .fadeIn(delay: 1.7.seconds, duration: .35.seconds) .slide(begin: const Offset(0, .2)), @@ -199,9 +198,10 @@ class _DifficultyBtn extends StatelessWidget { children: [ /// Bg with fill and outline AnimatedOpacity( - opacity: (!selected && (state.isHovered || state.isFocused)) - ? 1 - : 0, + opacity: + (!selected && (state.isHovered || state.isFocused)) + ? 1 + : 0, duration: .3.seconds, child: Container( decoration: BoxDecoration( @@ -221,18 +221,14 @@ class _DifficultyBtn extends StatelessWidget { /// cross-hairs (selected state) if (selected) ...[ - CenterLeft( - child: Image.asset(AssetPaths.titleSelectedLeft), - ), + CenterLeft(child: Image.asset(AssetPaths.titleSelectedLeft)), CenterRight( child: Image.asset(AssetPaths.titleSelectedRight), ), ], /// Label - Center( - child: Text(label.toUpperCase(), style: TextStyles.btn), - ), + Center(child: Text(label.toUpperCase(), style: TextStyles.btn)), ], ), ), @@ -267,30 +263,37 @@ class _StartBtnState extends State<_StartBtn> { } _wasHovered = (state.isHovered || state.isFocused); return SizedBox( - width: 520, - height: 100, - child: Stack( - children: [ - Positioned.fill(child: Image.asset(AssetPaths.titleStartBtn)), - if (state.isHovered || state.isFocused) ...[ - Positioned.fill( - child: Image.asset(AssetPaths.titleStartBtnHover)), - ], - Center( - child: Row( - mainAxisAlignment: MainAxisAlignment.end, - children: [ - Text('START MISSION', - style: TextStyles.btn - .copyWith(fontSize: 24, letterSpacing: 18)), - ], - ), - ), - ], - ) - .animate(autoPlay: false, onInit: (c) => _btnAnim = c) - .shimmer(duration: .7.seconds, color: Colors.black), - ) + width: 520, + height: 100, + child: Stack( + children: [ + Positioned.fill( + child: Image.asset(AssetPaths.titleStartBtn), + ), + if (state.isHovered || state.isFocused) ...[ + Positioned.fill( + child: Image.asset(AssetPaths.titleStartBtnHover), + ), + ], + Center( + child: Row( + mainAxisAlignment: MainAxisAlignment.end, + children: [ + Text( + 'START MISSION', + style: TextStyles.btn.copyWith( + fontSize: 24, + letterSpacing: 18, + ), + ), + ], + ), + ), + ], + ) + .animate(autoPlay: false, onInit: (c) => _btnAnim = c) + .shimmer(duration: .7.seconds, color: Colors.black), + ) .animate() .fadeIn(delay: 2.3.seconds) .slide(begin: const Offset(0, .2)); diff --git a/next-gen-ui/step_05_a/pubspec.yaml b/next-gen-ui/step_05_a/pubspec.yaml index dd3eb24959..7fd82808a1 100644 --- a/next-gen-ui/step_05_a/pubspec.yaml +++ b/next-gen-ui/step_05_a/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: 'none' version: 0.1.0 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 dependencies: flutter: diff --git a/next-gen-ui/step_05_b/lib/assets.dart b/next-gen-ui/step_05_b/lib/assets.dart index d0286c9a12..440dab3f61 100644 --- a/next-gen-ui/step_05_b/lib/assets.dart +++ b/next-gen-ui/step_05_b/lib/assets.dart @@ -32,9 +32,9 @@ class AssetPaths { typedef FragmentPrograms = ({FragmentProgram orb, FragmentProgram ui}); Future loadFragmentPrograms() async => ( - orb: (await _loadFragmentProgram(AssetPaths.orbShader)), - ui: (await _loadFragmentProgram(AssetPaths.uiShader)), - ); + orb: (await _loadFragmentProgram(AssetPaths.orbShader)), + ui: (await _loadFragmentProgram(AssetPaths.uiShader)), +); Future _loadFragmentProgram(String path) async { return (await FragmentProgram.fromAsset(path)); diff --git a/next-gen-ui/step_05_b/lib/common/reactive_widget.dart b/next-gen-ui/step_05_b/lib/common/reactive_widget.dart index c75aa491e9..f480d8b3eb 100644 --- a/next-gen-ui/step_05_b/lib/common/reactive_widget.dart +++ b/next-gen-ui/step_05_b/lib/common/reactive_widget.dart @@ -6,14 +6,11 @@ import 'package:flutter/material.dart'; import 'ticking_builder.dart'; -typedef ReactiveWidgetBuilder = Widget Function( - BuildContext context, double time, Size bounds); +typedef ReactiveWidgetBuilder = + Widget Function(BuildContext context, double time, Size bounds); class ReactiveWidget extends StatefulWidget { - const ReactiveWidget({ - super.key, - required this.builder, - }); + const ReactiveWidget({super.key, required this.builder}); final ReactiveWidgetBuilder builder; @override State createState() => _ReactiveWidgetState(); diff --git a/next-gen-ui/step_05_b/lib/common/shader_effect.dart b/next-gen-ui/step_05_b/lib/common/shader_effect.dart index 69bd75f7d9..7e6ebe8bdf 100644 --- a/next-gen-ui/step_05_b/lib/common/shader_effect.dart +++ b/next-gen-ui/step_05_b/lib/common/shader_effect.dart @@ -32,11 +32,8 @@ class ShaderEffect extends Effect { this.shader, this.update, ShaderLayer? layer, - }) : layer = layer ?? ShaderLayer.replace, - super( - begin: 0, - end: 1, - ); + }) : layer = layer ?? ShaderLayer.replace, + super(begin: 0, end: 1); final ui.FragmentShader? shader; final ShaderUpdateCallback? update; @@ -91,22 +88,28 @@ extension ShaderEffectExtensions on AnimateManager { ui.FragmentShader? shader, ShaderUpdateCallback? update, ShaderLayer? layer, - }) => - addEffect(ShaderEffect( - delay: delay, - duration: duration, - curve: curve, - shader: shader, - update: update, - layer: layer, - )); + }) => addEffect( + ShaderEffect( + delay: delay, + duration: duration, + curve: curve, + shader: shader, + update: update, + layer: layer, + ), + ); } enum ShaderLayer { foreground, background, replace } /// Function signature for [ShaderEffect] update handlers. -typedef ShaderUpdateCallback = EdgeInsets? Function( - ui.FragmentShader shader, double value, Size size, ui.Image image); +typedef ShaderUpdateCallback = + EdgeInsets? Function( + ui.FragmentShader shader, + double value, + Size size, + ui.Image image, + ); /******************************************************************************/ // TODO: add this as a dependency instead of copying it in once it is stable: @@ -117,11 +120,8 @@ typedef ShaderUpdateCallback = EdgeInsets? Function( // found in the LICENSE file. /// A callback for the [AnimatedSamplerBuilder] widget. -typedef AnimatedSamplerBuilder = void Function( - ui.Image image, - Size size, - ui.Canvas canvas, -); +typedef AnimatedSamplerBuilder = + void Function(ui.Image image, Size size, ui.Canvas canvas); /// A widget that allows access to a snapshot of the child widgets for painting /// with a sampler applied to a [FragmentProgram]. @@ -181,11 +181,7 @@ class AnimatedSampler extends StatelessWidget { @override Widget build(BuildContext context) { - return _ShaderSamplerBuilder( - builder, - enabled: enabled, - child: child, - ); + return _ShaderSamplerBuilder(builder, enabled: enabled, child: child); } } @@ -210,7 +206,9 @@ class _ShaderSamplerBuilder extends SingleChildRenderObjectWidget { @override void updateRenderObject( - BuildContext context, covariant RenderObject renderObject) { + BuildContext context, + covariant RenderObject renderObject, + ) { (renderObject as _RenderShaderSamplerBuilderWidget) ..devicePixelRatio = MediaQuery.of(context).devicePixelRatio ..builder = builder @@ -226,13 +224,14 @@ class _RenderShaderSamplerBuilderWidget extends RenderProxyBox { required double devicePixelRatio, required AnimatedSamplerBuilder builder, required bool enabled, - }) : _devicePixelRatio = devicePixelRatio, - _builder = builder, - _enabled = enabled; + }) : _devicePixelRatio = devicePixelRatio, + _builder = builder, + _enabled = enabled; @override - OffsetLayer updateCompositedLayer( - {required covariant _ShaderSamplerBuilderLayer? oldLayer}) { + OffsetLayer updateCompositedLayer({ + required covariant _ShaderSamplerBuilderLayer? oldLayer, + }) { final _ShaderSamplerBuilderLayer layer = oldLayer ?? _ShaderSamplerBuilderLayer(builder); layer @@ -328,24 +327,24 @@ class _ShaderSamplerBuilderLayer extends OffsetLayer { ui.Image _buildChildScene(Rect bounds, double pixelRatio) { final ui.SceneBuilder builder = ui.SceneBuilder(); - final Matrix4 transform = - Matrix4.diagonal3Values(pixelRatio, pixelRatio, 1); + final Matrix4 transform = Matrix4.diagonal3Values( + pixelRatio, + pixelRatio, + 1, + ); builder.pushTransform(transform.storage); addChildrenToScene(builder); builder.pop(); return builder.build().toImageSync( - (pixelRatio * bounds.width).ceil(), - (pixelRatio * bounds.height).ceil(), - ); + (pixelRatio * bounds.width).ceil(), + (pixelRatio * bounds.height).ceil(), + ); } @override void addToScene(ui.SceneBuilder builder) { if (size.isEmpty) return; - final ui.Image image = _buildChildScene( - offset & size, - devicePixelRatio, - ); + final ui.Image image = _buildChildScene(offset & size, devicePixelRatio); final ui.PictureRecorder pictureRecorder = ui.PictureRecorder(); final Canvas canvas = Canvas(pictureRecorder); try { diff --git a/next-gen-ui/step_05_b/lib/common/ui_scaler.dart b/next-gen-ui/step_05_b/lib/common/ui_scaler.dart index 07c3287650..e7dbb9be42 100644 --- a/next-gen-ui/step_05_b/lib/common/ui_scaler.dart +++ b/next-gen-ui/step_05_b/lib/common/ui_scaler.dart @@ -22,10 +22,6 @@ class UiScaler extends StatelessWidget { Widget build(BuildContext context) { final screenSize = MediaQuery.of(context).size; final double scale = min(screenSize.height / referenceHeight, 1.0); - return Transform.scale( - scale: scale, - alignment: alignment, - child: child, - ); + return Transform.scale(scale: scale, alignment: alignment, child: child); } } diff --git a/next-gen-ui/step_05_b/lib/orb_shader/orb_shader_config.dart b/next-gen-ui/step_05_b/lib/orb_shader/orb_shader_config.dart index ef975cccf8..a038e0be63 100644 --- a/next-gen-ui/step_05_b/lib/orb_shader/orb_shader_config.dart +++ b/next-gen-ui/step_05_b/lib/orb_shader/orb_shader_config.dart @@ -22,14 +22,14 @@ class OrbShaderConfig { this.lightOffsetX = 0, this.lightOffsetY = 0.1, this.lightOffsetZ = -0.66, - }) : assert(zoom >= 0 && zoom <= 1), - assert(exposure >= 0), - assert(metalness >= 0 && metalness <= 1), - assert(lightRadius >= 0), - assert(lightBrightness >= 1), - assert(ior >= 0 && ior <= 2), - assert(lightAttenuation >= 0 && lightAttenuation <= 1), - assert(ambientLightBrightness >= 0); + }) : assert(zoom >= 0 && zoom <= 1), + assert(exposure >= 0), + assert(metalness >= 0 && metalness <= 1), + assert(lightRadius >= 0), + assert(lightBrightness >= 1), + assert(ior >= 0 && ior <= 2), + assert(lightAttenuation >= 0 && lightAttenuation <= 1), + assert(ambientLightBrightness >= 0); final double zoom; diff --git a/next-gen-ui/step_05_b/lib/orb_shader/orb_shader_painter.dart b/next-gen-ui/step_05_b/lib/orb_shader/orb_shader_painter.dart index 399c20ab7e..1e04cc0df8 100644 --- a/next-gen-ui/step_05_b/lib/orb_shader/orb_shader_painter.dart +++ b/next-gen-ui/step_05_b/lib/orb_shader/orb_shader_painter.dart @@ -30,11 +30,13 @@ class OrbShaderPainter extends CustomPainter { v64.Vector3 colorToVector3(Color c) => v64.Vector3(c.r, c.g, c.b); - v64.Vector3 lightLumP = colorToVector3(config.lightColor).normalized() * + v64.Vector3 lightLumP = + colorToVector3(config.lightColor).normalized() * max(0.0, config.lightBrightness); v64.Vector3 albedo = colorToVector3(config.materialColor); - v64.Vector3 ambientLight = colorToVector3(config.ambientLightColor) * + v64.Vector3 ambientLight = + colorToVector3(config.ambientLightColor) * max(0.0, config.ambientLightBrightness); shader.setFloat(0, size.width); diff --git a/next-gen-ui/step_05_b/lib/orb_shader/orb_shader_widget.dart b/next-gen-ui/step_05_b/lib/orb_shader/orb_shader_widget.dart index 573b68afea..4187e7ced2 100644 --- a/next-gen-ui/step_05_b/lib/orb_shader/orb_shader_widget.dart +++ b/next-gen-ui/step_05_b/lib/orb_shader/orb_shader_widget.dart @@ -35,72 +35,82 @@ class OrbShaderWidget extends StatefulWidget { class OrbShaderWidgetState extends State with SingleTickerProviderStateMixin { - final _heartbeatSequence = TweenSequence( - [ - TweenSequenceItem(tween: ConstantTween(0), weight: 40), - TweenSequenceItem( - tween: Tween(begin: 0.0, end: 1.0) - .chain(CurveTween(curve: Curves.easeInOutCubic)), - weight: 8), - TweenSequenceItem( - tween: Tween(begin: 1.0, end: 0.2) - .chain(CurveTween(curve: Curves.easeInOutCubic)), - weight: 12), - TweenSequenceItem( - tween: Tween(begin: 0.2, end: 0.8) - .chain(CurveTween(curve: Curves.easeInOutCubic)), - weight: 6), - TweenSequenceItem( - tween: Tween(begin: 0.8, end: 0.0) - .chain(CurveTween(curve: Curves.easeInOutCubic)), - weight: 10), - ], - ); + final _heartbeatSequence = TweenSequence([ + TweenSequenceItem(tween: ConstantTween(0), weight: 40), + TweenSequenceItem( + tween: Tween( + begin: 0.0, + end: 1.0, + ).chain(CurveTween(curve: Curves.easeInOutCubic)), + weight: 8, + ), + TweenSequenceItem( + tween: Tween( + begin: 1.0, + end: 0.2, + ).chain(CurveTween(curve: Curves.easeInOutCubic)), + weight: 12, + ), + TweenSequenceItem( + tween: Tween( + begin: 0.2, + end: 0.8, + ).chain(CurveTween(curve: Curves.easeInOutCubic)), + weight: 6, + ), + TweenSequenceItem( + tween: Tween( + begin: 0.8, + end: 0.0, + ).chain(CurveTween(curve: Curves.easeInOutCubic)), + weight: 10, + ), + ]); - late final _heartbeatAnim = - AnimationController(vsync: this, duration: 3000.ms)..repeat(); + late final _heartbeatAnim = AnimationController( + vsync: this, + duration: 3000.ms, + )..repeat(); @override Widget build(BuildContext context) => Consumer( - builder: (context, fragmentPrograms, _) { - if (fragmentPrograms == null) return const SizedBox.expand(); - return ListenableBuilder( - listenable: _heartbeatAnim, - builder: (_, __) { - final heartbeatEnergy = - _heartbeatAnim.drive(_heartbeatSequence).value; - return TweenAnimationBuilder( - tween: Tween( - begin: widget.minEnergy, end: widget.minEnergy), - duration: 300.ms, - curve: Curves.easeOutCubic, - builder: (context, minEnergy, child) { - return ReactiveWidget( - builder: (context, time, size) { - double energyLevel = 0; - if (size.shortestSide != 0) { - final d = (Offset(size.width, size.height) / 2 - - widget.mousePos) + builder: (context, fragmentPrograms, _) { + if (fragmentPrograms == null) return const SizedBox.expand(); + return ListenableBuilder( + listenable: _heartbeatAnim, + builder: (_, __) { + final heartbeatEnergy = + _heartbeatAnim.drive(_heartbeatSequence).value; + return TweenAnimationBuilder( + tween: Tween( + begin: widget.minEnergy, + end: widget.minEnergy, + ), + duration: 300.ms, + curve: Curves.easeOutCubic, + builder: (context, minEnergy, child) { + return ReactiveWidget( + builder: (context, time, size) { + double energyLevel = 0; + if (size.shortestSide != 0) { + final d = + (Offset(size.width, size.height) / 2 - widget.mousePos) .distance; - final hitSize = size.shortestSide * .5; - energyLevel = 1 - min(1, (d / hitSize)); - scheduleMicrotask( - () => widget.onUpdate?.call(energyLevel)); - } - energyLevel += - (1.3 - energyLevel) * heartbeatEnergy * 0.1; - energyLevel = lerpDouble(minEnergy, 1, energyLevel)!; - return CustomPaint( - size: size, - painter: OrbShaderPainter( - fragmentPrograms.orb.fragmentShader(), - config: widget.config, - time: time, - mousePos: widget.mousePos, - energy: energyLevel, - ), - ); - }, + final hitSize = size.shortestSide * .5; + energyLevel = 1 - min(1, (d / hitSize)); + scheduleMicrotask(() => widget.onUpdate?.call(energyLevel)); + } + energyLevel += (1.3 - energyLevel) * heartbeatEnergy * 0.1; + energyLevel = lerpDouble(minEnergy, 1, energyLevel)!; + return CustomPaint( + size: size, + painter: OrbShaderPainter( + fragmentPrograms.orb.fragmentShader(), + config: widget.config, + time: time, + mousePos: widget.mousePos, + energy: energyLevel, + ), ); }, ); @@ -108,4 +118,6 @@ class OrbShaderWidgetState extends State ); }, ); + }, + ); } diff --git a/next-gen-ui/step_05_b/lib/styles.dart b/next-gen-ui/step_05_b/lib/styles.dart index 1e449fff3a..fb5083c6a8 100644 --- a/next-gen-ui/step_05_b/lib/styles.dart +++ b/next-gen-ui/step_05_b/lib/styles.dart @@ -8,16 +8,19 @@ class TextStyles { static const _font1 = TextStyle(fontFamily: 'Exo', color: Colors.white); static TextStyle get h1 => _font1.copyWith( - fontSize: 75, letterSpacing: 35, fontWeight: FontWeight.w700); + fontSize: 75, + letterSpacing: 35, + fontWeight: FontWeight.w700, + ); static TextStyle get h2 => h1.copyWith(fontSize: 40, letterSpacing: 0); static TextStyle get h3 => h1.copyWith(fontSize: 24, letterSpacing: 20, fontWeight: FontWeight.w400); static TextStyle get body => _font1.copyWith(fontSize: 16); static TextStyle get btn => _font1.copyWith( - fontSize: 16, - fontWeight: FontWeight.bold, - letterSpacing: 10, - ); + fontSize: 16, + fontWeight: FontWeight.bold, + letterSpacing: 10, + ); } abstract class AppColors { diff --git a/next-gen-ui/step_05_b/lib/title_screen/title_screen.dart b/next-gen-ui/step_05_b/lib/title_screen/title_screen.dart index a69c4dce06..6a228c85ba 100644 --- a/next-gen-ui/step_05_b/lib/title_screen/title_screen.dart +++ b/next-gen-ui/step_05_b/lib/title_screen/title_screen.dart @@ -71,10 +71,10 @@ class _TitleScreenState extends State Duration _getRndPulseDuration() => 100.ms + 200.ms * Random().nextDouble(); double _getMinEnergyForDifficulty(int difficulty) => switch (difficulty) { - 1 => 0.3, - 2 => 0.6, - _ => 0, - }; + 1 => 0.3, + 2 => 0.6, + _ => 0, + }; @override void initState() { @@ -167,9 +167,10 @@ class _TitleScreenState extends State materialColor: orbColor, lightColor: orbColor, ), - onUpdate: (energy) => setState(() { - _orbEnergy = energy; - }), + onUpdate: + (energy) => setState(() { + _orbEnergy = energy; + }), ), ], ), @@ -276,7 +277,7 @@ class _AnimatedColors extends StatelessWidget { final Color orbColor; final Widget Function(BuildContext context, Color orbColor, Color emitColor) - builder; + builder; @override Widget build(BuildContext context) { diff --git a/next-gen-ui/step_05_b/lib/title_screen/title_screen_ui.dart b/next-gen-ui/step_05_b/lib/title_screen/title_screen_ui.dart index 4a7dd6ea7f..2831ad9136 100644 --- a/next-gen-ui/step_05_b/lib/title_screen/title_screen_ui.dart +++ b/next-gen-ui/step_05_b/lib/title_screen/title_screen_ui.dart @@ -37,10 +37,7 @@ class TitleScreenUi extends StatelessWidget { children: [ /// Title Text const TopLeft( - child: UiScaler( - alignment: Alignment.topLeft, - child: _TitleText(), - ), + child: UiScaler(alignment: Alignment.topLeft, child: _TitleText()), ), /// Difficulty Btns @@ -93,9 +90,10 @@ class _TitleText extends StatelessWidget { Image.asset(AssetPaths.titleSelectedRight, height: 65), ], ).animate().fadeIn(delay: .8.seconds, duration: .7.seconds), - Text('INTO THE UNKNOWN', style: TextStyles.h3) - .animate() - .fadeIn(delay: 1.seconds, duration: .7.seconds), + Text( + 'INTO THE UNKNOWN', + style: TextStyles.h3, + ).animate().fadeIn(delay: 1.seconds, duration: .7.seconds), ], ); return Consumer( @@ -103,21 +101,22 @@ class _TitleText extends StatelessWidget { if (fragmentPrograms == null) return content; return TickingBuilder( builder: (context, time) { - return AnimatedSampler( - (image, size, canvas) { - const double overdrawPx = 30; - final shader = fragmentPrograms.ui.fragmentShader(); - shader - ..setFloat(0, size.width) - ..setFloat(1, size.height) - ..setFloat(2, time) - ..setImageSampler(0, image); - Rect rect = Rect.fromLTWH(-overdrawPx, -overdrawPx, - size.width + overdrawPx, size.height + overdrawPx); - canvas.drawRect(rect, Paint()..shader = shader); - }, - child: content, - ); + return AnimatedSampler((image, size, canvas) { + const double overdrawPx = 30; + final shader = fragmentPrograms.ui.fragmentShader(); + shader + ..setFloat(0, size.width) + ..setFloat(1, size.height) + ..setFloat(2, time) + ..setImageSampler(0, image); + Rect rect = Rect.fromLTWH( + -overdrawPx, + -overdrawPx, + size.width + overdrawPx, + size.height + overdrawPx, + ); + canvas.drawRect(rect, Paint()..shader = shader); + }, child: content); }, ); }, @@ -142,29 +141,29 @@ class _DifficultyBtns extends StatelessWidget { mainAxisSize: MainAxisSize.min, children: [ _DifficultyBtn( - label: 'Casual', - selected: difficulty == 0, - onPressed: () => onDifficultyPressed(0), - onHover: (over) => onDifficultyFocused(over ? 0 : null), - ) + label: 'Casual', + selected: difficulty == 0, + onPressed: () => onDifficultyPressed(0), + onHover: (over) => onDifficultyFocused(over ? 0 : null), + ) .animate() .fadeIn(delay: 1.3.seconds, duration: .35.seconds) .slide(begin: const Offset(0, .2)), _DifficultyBtn( - label: 'Normal', - selected: difficulty == 1, - onPressed: () => onDifficultyPressed(1), - onHover: (over) => onDifficultyFocused(over ? 1 : null), - ) + label: 'Normal', + selected: difficulty == 1, + onPressed: () => onDifficultyPressed(1), + onHover: (over) => onDifficultyFocused(over ? 1 : null), + ) .animate() .fadeIn(delay: 1.5.seconds, duration: .35.seconds) .slide(begin: const Offset(0, .2)), _DifficultyBtn( - label: 'Hardcore', - selected: difficulty == 2, - onPressed: () => onDifficultyPressed(2), - onHover: (over) => onDifficultyFocused(over ? 2 : null), - ) + label: 'Hardcore', + selected: difficulty == 2, + onPressed: () => onDifficultyPressed(2), + onHover: (over) => onDifficultyFocused(over ? 2 : null), + ) .animate() .fadeIn(delay: 1.7.seconds, duration: .35.seconds) .slide(begin: const Offset(0, .2)), @@ -201,9 +200,10 @@ class _DifficultyBtn extends StatelessWidget { children: [ /// Bg with fill and outline AnimatedOpacity( - opacity: (!selected && (state.isHovered || state.isFocused)) - ? 1 - : 0, + opacity: + (!selected && (state.isHovered || state.isFocused)) + ? 1 + : 0, duration: .3.seconds, child: Container( decoration: BoxDecoration( @@ -223,18 +223,14 @@ class _DifficultyBtn extends StatelessWidget { /// cross-hairs (selected state) if (selected) ...[ - CenterLeft( - child: Image.asset(AssetPaths.titleSelectedLeft), - ), + CenterLeft(child: Image.asset(AssetPaths.titleSelectedLeft)), CenterRight( child: Image.asset(AssetPaths.titleSelectedRight), ), ], /// Label - Center( - child: Text(label.toUpperCase(), style: TextStyles.btn), - ), + Center(child: Text(label.toUpperCase(), style: TextStyles.btn)), ], ), ), @@ -269,30 +265,37 @@ class _StartBtnState extends State<_StartBtn> { } _wasHovered = (state.isHovered || state.isFocused); return SizedBox( - width: 520, - height: 100, - child: Stack( - children: [ - Positioned.fill(child: Image.asset(AssetPaths.titleStartBtn)), - if (state.isHovered || state.isFocused) ...[ - Positioned.fill( - child: Image.asset(AssetPaths.titleStartBtnHover)), - ], - Center( - child: Row( - mainAxisAlignment: MainAxisAlignment.end, - children: [ - Text('START MISSION', - style: TextStyles.btn - .copyWith(fontSize: 24, letterSpacing: 18)), - ], - ), - ), - ], - ) - .animate(autoPlay: false, onInit: (c) => _btnAnim = c) - .shimmer(duration: .7.seconds, color: Colors.black), - ) + width: 520, + height: 100, + child: Stack( + children: [ + Positioned.fill( + child: Image.asset(AssetPaths.titleStartBtn), + ), + if (state.isHovered || state.isFocused) ...[ + Positioned.fill( + child: Image.asset(AssetPaths.titleStartBtnHover), + ), + ], + Center( + child: Row( + mainAxisAlignment: MainAxisAlignment.end, + children: [ + Text( + 'START MISSION', + style: TextStyles.btn.copyWith( + fontSize: 24, + letterSpacing: 18, + ), + ), + ], + ), + ), + ], + ) + .animate(autoPlay: false, onInit: (c) => _btnAnim = c) + .shimmer(duration: .7.seconds, color: Colors.black), + ) .animate() .fadeIn(delay: 2.3.seconds) .slide(begin: const Offset(0, .2)); diff --git a/next-gen-ui/step_05_b/pubspec.yaml b/next-gen-ui/step_05_b/pubspec.yaml index dd3eb24959..7fd82808a1 100644 --- a/next-gen-ui/step_05_b/pubspec.yaml +++ b/next-gen-ui/step_05_b/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: 'none' version: 0.1.0 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 dependencies: flutter: diff --git a/next-gen-ui/step_06/lib/assets.dart b/next-gen-ui/step_06/lib/assets.dart index d0286c9a12..440dab3f61 100644 --- a/next-gen-ui/step_06/lib/assets.dart +++ b/next-gen-ui/step_06/lib/assets.dart @@ -32,9 +32,9 @@ class AssetPaths { typedef FragmentPrograms = ({FragmentProgram orb, FragmentProgram ui}); Future loadFragmentPrograms() async => ( - orb: (await _loadFragmentProgram(AssetPaths.orbShader)), - ui: (await _loadFragmentProgram(AssetPaths.uiShader)), - ); + orb: (await _loadFragmentProgram(AssetPaths.orbShader)), + ui: (await _loadFragmentProgram(AssetPaths.uiShader)), +); Future _loadFragmentProgram(String path) async { return (await FragmentProgram.fromAsset(path)); diff --git a/next-gen-ui/step_06/lib/common/reactive_widget.dart b/next-gen-ui/step_06/lib/common/reactive_widget.dart index c75aa491e9..f480d8b3eb 100644 --- a/next-gen-ui/step_06/lib/common/reactive_widget.dart +++ b/next-gen-ui/step_06/lib/common/reactive_widget.dart @@ -6,14 +6,11 @@ import 'package:flutter/material.dart'; import 'ticking_builder.dart'; -typedef ReactiveWidgetBuilder = Widget Function( - BuildContext context, double time, Size bounds); +typedef ReactiveWidgetBuilder = + Widget Function(BuildContext context, double time, Size bounds); class ReactiveWidget extends StatefulWidget { - const ReactiveWidget({ - super.key, - required this.builder, - }); + const ReactiveWidget({super.key, required this.builder}); final ReactiveWidgetBuilder builder; @override State createState() => _ReactiveWidgetState(); diff --git a/next-gen-ui/step_06/lib/common/shader_effect.dart b/next-gen-ui/step_06/lib/common/shader_effect.dart index 69bd75f7d9..7e6ebe8bdf 100644 --- a/next-gen-ui/step_06/lib/common/shader_effect.dart +++ b/next-gen-ui/step_06/lib/common/shader_effect.dart @@ -32,11 +32,8 @@ class ShaderEffect extends Effect { this.shader, this.update, ShaderLayer? layer, - }) : layer = layer ?? ShaderLayer.replace, - super( - begin: 0, - end: 1, - ); + }) : layer = layer ?? ShaderLayer.replace, + super(begin: 0, end: 1); final ui.FragmentShader? shader; final ShaderUpdateCallback? update; @@ -91,22 +88,28 @@ extension ShaderEffectExtensions on AnimateManager { ui.FragmentShader? shader, ShaderUpdateCallback? update, ShaderLayer? layer, - }) => - addEffect(ShaderEffect( - delay: delay, - duration: duration, - curve: curve, - shader: shader, - update: update, - layer: layer, - )); + }) => addEffect( + ShaderEffect( + delay: delay, + duration: duration, + curve: curve, + shader: shader, + update: update, + layer: layer, + ), + ); } enum ShaderLayer { foreground, background, replace } /// Function signature for [ShaderEffect] update handlers. -typedef ShaderUpdateCallback = EdgeInsets? Function( - ui.FragmentShader shader, double value, Size size, ui.Image image); +typedef ShaderUpdateCallback = + EdgeInsets? Function( + ui.FragmentShader shader, + double value, + Size size, + ui.Image image, + ); /******************************************************************************/ // TODO: add this as a dependency instead of copying it in once it is stable: @@ -117,11 +120,8 @@ typedef ShaderUpdateCallback = EdgeInsets? Function( // found in the LICENSE file. /// A callback for the [AnimatedSamplerBuilder] widget. -typedef AnimatedSamplerBuilder = void Function( - ui.Image image, - Size size, - ui.Canvas canvas, -); +typedef AnimatedSamplerBuilder = + void Function(ui.Image image, Size size, ui.Canvas canvas); /// A widget that allows access to a snapshot of the child widgets for painting /// with a sampler applied to a [FragmentProgram]. @@ -181,11 +181,7 @@ class AnimatedSampler extends StatelessWidget { @override Widget build(BuildContext context) { - return _ShaderSamplerBuilder( - builder, - enabled: enabled, - child: child, - ); + return _ShaderSamplerBuilder(builder, enabled: enabled, child: child); } } @@ -210,7 +206,9 @@ class _ShaderSamplerBuilder extends SingleChildRenderObjectWidget { @override void updateRenderObject( - BuildContext context, covariant RenderObject renderObject) { + BuildContext context, + covariant RenderObject renderObject, + ) { (renderObject as _RenderShaderSamplerBuilderWidget) ..devicePixelRatio = MediaQuery.of(context).devicePixelRatio ..builder = builder @@ -226,13 +224,14 @@ class _RenderShaderSamplerBuilderWidget extends RenderProxyBox { required double devicePixelRatio, required AnimatedSamplerBuilder builder, required bool enabled, - }) : _devicePixelRatio = devicePixelRatio, - _builder = builder, - _enabled = enabled; + }) : _devicePixelRatio = devicePixelRatio, + _builder = builder, + _enabled = enabled; @override - OffsetLayer updateCompositedLayer( - {required covariant _ShaderSamplerBuilderLayer? oldLayer}) { + OffsetLayer updateCompositedLayer({ + required covariant _ShaderSamplerBuilderLayer? oldLayer, + }) { final _ShaderSamplerBuilderLayer layer = oldLayer ?? _ShaderSamplerBuilderLayer(builder); layer @@ -328,24 +327,24 @@ class _ShaderSamplerBuilderLayer extends OffsetLayer { ui.Image _buildChildScene(Rect bounds, double pixelRatio) { final ui.SceneBuilder builder = ui.SceneBuilder(); - final Matrix4 transform = - Matrix4.diagonal3Values(pixelRatio, pixelRatio, 1); + final Matrix4 transform = Matrix4.diagonal3Values( + pixelRatio, + pixelRatio, + 1, + ); builder.pushTransform(transform.storage); addChildrenToScene(builder); builder.pop(); return builder.build().toImageSync( - (pixelRatio * bounds.width).ceil(), - (pixelRatio * bounds.height).ceil(), - ); + (pixelRatio * bounds.width).ceil(), + (pixelRatio * bounds.height).ceil(), + ); } @override void addToScene(ui.SceneBuilder builder) { if (size.isEmpty) return; - final ui.Image image = _buildChildScene( - offset & size, - devicePixelRatio, - ); + final ui.Image image = _buildChildScene(offset & size, devicePixelRatio); final ui.PictureRecorder pictureRecorder = ui.PictureRecorder(); final Canvas canvas = Canvas(pictureRecorder); try { diff --git a/next-gen-ui/step_06/lib/common/ui_scaler.dart b/next-gen-ui/step_06/lib/common/ui_scaler.dart index 07c3287650..e7dbb9be42 100644 --- a/next-gen-ui/step_06/lib/common/ui_scaler.dart +++ b/next-gen-ui/step_06/lib/common/ui_scaler.dart @@ -22,10 +22,6 @@ class UiScaler extends StatelessWidget { Widget build(BuildContext context) { final screenSize = MediaQuery.of(context).size; final double scale = min(screenSize.height / referenceHeight, 1.0); - return Transform.scale( - scale: scale, - alignment: alignment, - child: child, - ); + return Transform.scale(scale: scale, alignment: alignment, child: child); } } diff --git a/next-gen-ui/step_06/lib/orb_shader/orb_shader_config.dart b/next-gen-ui/step_06/lib/orb_shader/orb_shader_config.dart index ef975cccf8..a038e0be63 100644 --- a/next-gen-ui/step_06/lib/orb_shader/orb_shader_config.dart +++ b/next-gen-ui/step_06/lib/orb_shader/orb_shader_config.dart @@ -22,14 +22,14 @@ class OrbShaderConfig { this.lightOffsetX = 0, this.lightOffsetY = 0.1, this.lightOffsetZ = -0.66, - }) : assert(zoom >= 0 && zoom <= 1), - assert(exposure >= 0), - assert(metalness >= 0 && metalness <= 1), - assert(lightRadius >= 0), - assert(lightBrightness >= 1), - assert(ior >= 0 && ior <= 2), - assert(lightAttenuation >= 0 && lightAttenuation <= 1), - assert(ambientLightBrightness >= 0); + }) : assert(zoom >= 0 && zoom <= 1), + assert(exposure >= 0), + assert(metalness >= 0 && metalness <= 1), + assert(lightRadius >= 0), + assert(lightBrightness >= 1), + assert(ior >= 0 && ior <= 2), + assert(lightAttenuation >= 0 && lightAttenuation <= 1), + assert(ambientLightBrightness >= 0); final double zoom; diff --git a/next-gen-ui/step_06/lib/orb_shader/orb_shader_painter.dart b/next-gen-ui/step_06/lib/orb_shader/orb_shader_painter.dart index 399c20ab7e..1e04cc0df8 100644 --- a/next-gen-ui/step_06/lib/orb_shader/orb_shader_painter.dart +++ b/next-gen-ui/step_06/lib/orb_shader/orb_shader_painter.dart @@ -30,11 +30,13 @@ class OrbShaderPainter extends CustomPainter { v64.Vector3 colorToVector3(Color c) => v64.Vector3(c.r, c.g, c.b); - v64.Vector3 lightLumP = colorToVector3(config.lightColor).normalized() * + v64.Vector3 lightLumP = + colorToVector3(config.lightColor).normalized() * max(0.0, config.lightBrightness); v64.Vector3 albedo = colorToVector3(config.materialColor); - v64.Vector3 ambientLight = colorToVector3(config.ambientLightColor) * + v64.Vector3 ambientLight = + colorToVector3(config.ambientLightColor) * max(0.0, config.ambientLightBrightness); shader.setFloat(0, size.width); diff --git a/next-gen-ui/step_06/lib/orb_shader/orb_shader_widget.dart b/next-gen-ui/step_06/lib/orb_shader/orb_shader_widget.dart index 573b68afea..4187e7ced2 100644 --- a/next-gen-ui/step_06/lib/orb_shader/orb_shader_widget.dart +++ b/next-gen-ui/step_06/lib/orb_shader/orb_shader_widget.dart @@ -35,72 +35,82 @@ class OrbShaderWidget extends StatefulWidget { class OrbShaderWidgetState extends State with SingleTickerProviderStateMixin { - final _heartbeatSequence = TweenSequence( - [ - TweenSequenceItem(tween: ConstantTween(0), weight: 40), - TweenSequenceItem( - tween: Tween(begin: 0.0, end: 1.0) - .chain(CurveTween(curve: Curves.easeInOutCubic)), - weight: 8), - TweenSequenceItem( - tween: Tween(begin: 1.0, end: 0.2) - .chain(CurveTween(curve: Curves.easeInOutCubic)), - weight: 12), - TweenSequenceItem( - tween: Tween(begin: 0.2, end: 0.8) - .chain(CurveTween(curve: Curves.easeInOutCubic)), - weight: 6), - TweenSequenceItem( - tween: Tween(begin: 0.8, end: 0.0) - .chain(CurveTween(curve: Curves.easeInOutCubic)), - weight: 10), - ], - ); + final _heartbeatSequence = TweenSequence([ + TweenSequenceItem(tween: ConstantTween(0), weight: 40), + TweenSequenceItem( + tween: Tween( + begin: 0.0, + end: 1.0, + ).chain(CurveTween(curve: Curves.easeInOutCubic)), + weight: 8, + ), + TweenSequenceItem( + tween: Tween( + begin: 1.0, + end: 0.2, + ).chain(CurveTween(curve: Curves.easeInOutCubic)), + weight: 12, + ), + TweenSequenceItem( + tween: Tween( + begin: 0.2, + end: 0.8, + ).chain(CurveTween(curve: Curves.easeInOutCubic)), + weight: 6, + ), + TweenSequenceItem( + tween: Tween( + begin: 0.8, + end: 0.0, + ).chain(CurveTween(curve: Curves.easeInOutCubic)), + weight: 10, + ), + ]); - late final _heartbeatAnim = - AnimationController(vsync: this, duration: 3000.ms)..repeat(); + late final _heartbeatAnim = AnimationController( + vsync: this, + duration: 3000.ms, + )..repeat(); @override Widget build(BuildContext context) => Consumer( - builder: (context, fragmentPrograms, _) { - if (fragmentPrograms == null) return const SizedBox.expand(); - return ListenableBuilder( - listenable: _heartbeatAnim, - builder: (_, __) { - final heartbeatEnergy = - _heartbeatAnim.drive(_heartbeatSequence).value; - return TweenAnimationBuilder( - tween: Tween( - begin: widget.minEnergy, end: widget.minEnergy), - duration: 300.ms, - curve: Curves.easeOutCubic, - builder: (context, minEnergy, child) { - return ReactiveWidget( - builder: (context, time, size) { - double energyLevel = 0; - if (size.shortestSide != 0) { - final d = (Offset(size.width, size.height) / 2 - - widget.mousePos) + builder: (context, fragmentPrograms, _) { + if (fragmentPrograms == null) return const SizedBox.expand(); + return ListenableBuilder( + listenable: _heartbeatAnim, + builder: (_, __) { + final heartbeatEnergy = + _heartbeatAnim.drive(_heartbeatSequence).value; + return TweenAnimationBuilder( + tween: Tween( + begin: widget.minEnergy, + end: widget.minEnergy, + ), + duration: 300.ms, + curve: Curves.easeOutCubic, + builder: (context, minEnergy, child) { + return ReactiveWidget( + builder: (context, time, size) { + double energyLevel = 0; + if (size.shortestSide != 0) { + final d = + (Offset(size.width, size.height) / 2 - widget.mousePos) .distance; - final hitSize = size.shortestSide * .5; - energyLevel = 1 - min(1, (d / hitSize)); - scheduleMicrotask( - () => widget.onUpdate?.call(energyLevel)); - } - energyLevel += - (1.3 - energyLevel) * heartbeatEnergy * 0.1; - energyLevel = lerpDouble(minEnergy, 1, energyLevel)!; - return CustomPaint( - size: size, - painter: OrbShaderPainter( - fragmentPrograms.orb.fragmentShader(), - config: widget.config, - time: time, - mousePos: widget.mousePos, - energy: energyLevel, - ), - ); - }, + final hitSize = size.shortestSide * .5; + energyLevel = 1 - min(1, (d / hitSize)); + scheduleMicrotask(() => widget.onUpdate?.call(energyLevel)); + } + energyLevel += (1.3 - energyLevel) * heartbeatEnergy * 0.1; + energyLevel = lerpDouble(minEnergy, 1, energyLevel)!; + return CustomPaint( + size: size, + painter: OrbShaderPainter( + fragmentPrograms.orb.fragmentShader(), + config: widget.config, + time: time, + mousePos: widget.mousePos, + energy: energyLevel, + ), ); }, ); @@ -108,4 +118,6 @@ class OrbShaderWidgetState extends State ); }, ); + }, + ); } diff --git a/next-gen-ui/step_06/lib/styles.dart b/next-gen-ui/step_06/lib/styles.dart index 1e449fff3a..fb5083c6a8 100644 --- a/next-gen-ui/step_06/lib/styles.dart +++ b/next-gen-ui/step_06/lib/styles.dart @@ -8,16 +8,19 @@ class TextStyles { static const _font1 = TextStyle(fontFamily: 'Exo', color: Colors.white); static TextStyle get h1 => _font1.copyWith( - fontSize: 75, letterSpacing: 35, fontWeight: FontWeight.w700); + fontSize: 75, + letterSpacing: 35, + fontWeight: FontWeight.w700, + ); static TextStyle get h2 => h1.copyWith(fontSize: 40, letterSpacing: 0); static TextStyle get h3 => h1.copyWith(fontSize: 24, letterSpacing: 20, fontWeight: FontWeight.w400); static TextStyle get body => _font1.copyWith(fontSize: 16); static TextStyle get btn => _font1.copyWith( - fontSize: 16, - fontWeight: FontWeight.bold, - letterSpacing: 10, - ); + fontSize: 16, + fontWeight: FontWeight.bold, + letterSpacing: 10, + ); } abstract class AppColors { diff --git a/next-gen-ui/step_06/lib/title_screen/particle_overlay.dart b/next-gen-ui/step_06/lib/title_screen/particle_overlay.dart index 52d6a1c8a8..183d22f338 100644 --- a/next-gen-ui/step_06/lib/title_screen/particle_overlay.dart +++ b/next-gen-ui/step_06/lib/title_screen/particle_overlay.dart @@ -31,19 +31,21 @@ class ParticleOverlay extends StatelessWidget { double a = rnd(pi * 2); double dist = rnd(1, 4) * 35 + 150 * energy; double vel = rnd(1, 2) * (1 + energy * 1.8); - particles.add(Particle( - // how many ticks this particle will live: - lifespan: rnd(1, 2) * 20 + energy * 15, - // starting distance from center: - x: cos(a) * dist, - y: sin(a) * dist, - // starting velocity: - vx: cos(a) * vel, - vy: sin(a) * vel, - // other starting values: - rotation: a, - scale: rnd(1, 2) * 0.6 + energy * 0.5, - )); + particles.add( + Particle( + // how many ticks this particle will live: + lifespan: rnd(1, 2) * 20 + energy * 15, + // starting distance from center: + x: cos(a) * dist, + y: sin(a) * dist, + // starting velocity: + vx: cos(a) * vel, + vy: sin(a) * vel, + // other starting values: + rotation: a, + scale: rnd(1, 2) * 0.6 + energy * 0.5, + ), + ); // update all of the particles: for (int i = particles.length - 1; i >= 0; i--) { diff --git a/next-gen-ui/step_06/lib/title_screen/title_screen.dart b/next-gen-ui/step_06/lib/title_screen/title_screen.dart index 913ac6b873..ce5a4dba46 100644 --- a/next-gen-ui/step_06/lib/title_screen/title_screen.dart +++ b/next-gen-ui/step_06/lib/title_screen/title_screen.dart @@ -72,10 +72,10 @@ class _TitleScreenState extends State Duration _getRndPulseDuration() => 100.ms + 200.ms * Random().nextDouble(); double _getMinEnergyForDifficulty(int difficulty) => switch (difficulty) { - 1 => 0.3, - 2 => 0.6, - _ => 0, - }; + 1 => 0.3, + 2 => 0.6, + _ => 0, + }; @override void initState() { @@ -168,9 +168,10 @@ class _TitleScreenState extends State materialColor: orbColor, lightColor: orbColor, ), - onUpdate: (energy) => setState(() { - _orbEnergy = energy; - }), + onUpdate: + (energy) => setState(() { + _orbEnergy = energy; + }), ), ], ), @@ -287,7 +288,7 @@ class _AnimatedColors extends StatelessWidget { final Color orbColor; final Widget Function(BuildContext context, Color orbColor, Color emitColor) - builder; + builder; @override Widget build(BuildContext context) { diff --git a/next-gen-ui/step_06/lib/title_screen/title_screen_ui.dart b/next-gen-ui/step_06/lib/title_screen/title_screen_ui.dart index 4a7dd6ea7f..2831ad9136 100644 --- a/next-gen-ui/step_06/lib/title_screen/title_screen_ui.dart +++ b/next-gen-ui/step_06/lib/title_screen/title_screen_ui.dart @@ -37,10 +37,7 @@ class TitleScreenUi extends StatelessWidget { children: [ /// Title Text const TopLeft( - child: UiScaler( - alignment: Alignment.topLeft, - child: _TitleText(), - ), + child: UiScaler(alignment: Alignment.topLeft, child: _TitleText()), ), /// Difficulty Btns @@ -93,9 +90,10 @@ class _TitleText extends StatelessWidget { Image.asset(AssetPaths.titleSelectedRight, height: 65), ], ).animate().fadeIn(delay: .8.seconds, duration: .7.seconds), - Text('INTO THE UNKNOWN', style: TextStyles.h3) - .animate() - .fadeIn(delay: 1.seconds, duration: .7.seconds), + Text( + 'INTO THE UNKNOWN', + style: TextStyles.h3, + ).animate().fadeIn(delay: 1.seconds, duration: .7.seconds), ], ); return Consumer( @@ -103,21 +101,22 @@ class _TitleText extends StatelessWidget { if (fragmentPrograms == null) return content; return TickingBuilder( builder: (context, time) { - return AnimatedSampler( - (image, size, canvas) { - const double overdrawPx = 30; - final shader = fragmentPrograms.ui.fragmentShader(); - shader - ..setFloat(0, size.width) - ..setFloat(1, size.height) - ..setFloat(2, time) - ..setImageSampler(0, image); - Rect rect = Rect.fromLTWH(-overdrawPx, -overdrawPx, - size.width + overdrawPx, size.height + overdrawPx); - canvas.drawRect(rect, Paint()..shader = shader); - }, - child: content, - ); + return AnimatedSampler((image, size, canvas) { + const double overdrawPx = 30; + final shader = fragmentPrograms.ui.fragmentShader(); + shader + ..setFloat(0, size.width) + ..setFloat(1, size.height) + ..setFloat(2, time) + ..setImageSampler(0, image); + Rect rect = Rect.fromLTWH( + -overdrawPx, + -overdrawPx, + size.width + overdrawPx, + size.height + overdrawPx, + ); + canvas.drawRect(rect, Paint()..shader = shader); + }, child: content); }, ); }, @@ -142,29 +141,29 @@ class _DifficultyBtns extends StatelessWidget { mainAxisSize: MainAxisSize.min, children: [ _DifficultyBtn( - label: 'Casual', - selected: difficulty == 0, - onPressed: () => onDifficultyPressed(0), - onHover: (over) => onDifficultyFocused(over ? 0 : null), - ) + label: 'Casual', + selected: difficulty == 0, + onPressed: () => onDifficultyPressed(0), + onHover: (over) => onDifficultyFocused(over ? 0 : null), + ) .animate() .fadeIn(delay: 1.3.seconds, duration: .35.seconds) .slide(begin: const Offset(0, .2)), _DifficultyBtn( - label: 'Normal', - selected: difficulty == 1, - onPressed: () => onDifficultyPressed(1), - onHover: (over) => onDifficultyFocused(over ? 1 : null), - ) + label: 'Normal', + selected: difficulty == 1, + onPressed: () => onDifficultyPressed(1), + onHover: (over) => onDifficultyFocused(over ? 1 : null), + ) .animate() .fadeIn(delay: 1.5.seconds, duration: .35.seconds) .slide(begin: const Offset(0, .2)), _DifficultyBtn( - label: 'Hardcore', - selected: difficulty == 2, - onPressed: () => onDifficultyPressed(2), - onHover: (over) => onDifficultyFocused(over ? 2 : null), - ) + label: 'Hardcore', + selected: difficulty == 2, + onPressed: () => onDifficultyPressed(2), + onHover: (over) => onDifficultyFocused(over ? 2 : null), + ) .animate() .fadeIn(delay: 1.7.seconds, duration: .35.seconds) .slide(begin: const Offset(0, .2)), @@ -201,9 +200,10 @@ class _DifficultyBtn extends StatelessWidget { children: [ /// Bg with fill and outline AnimatedOpacity( - opacity: (!selected && (state.isHovered || state.isFocused)) - ? 1 - : 0, + opacity: + (!selected && (state.isHovered || state.isFocused)) + ? 1 + : 0, duration: .3.seconds, child: Container( decoration: BoxDecoration( @@ -223,18 +223,14 @@ class _DifficultyBtn extends StatelessWidget { /// cross-hairs (selected state) if (selected) ...[ - CenterLeft( - child: Image.asset(AssetPaths.titleSelectedLeft), - ), + CenterLeft(child: Image.asset(AssetPaths.titleSelectedLeft)), CenterRight( child: Image.asset(AssetPaths.titleSelectedRight), ), ], /// Label - Center( - child: Text(label.toUpperCase(), style: TextStyles.btn), - ), + Center(child: Text(label.toUpperCase(), style: TextStyles.btn)), ], ), ), @@ -269,30 +265,37 @@ class _StartBtnState extends State<_StartBtn> { } _wasHovered = (state.isHovered || state.isFocused); return SizedBox( - width: 520, - height: 100, - child: Stack( - children: [ - Positioned.fill(child: Image.asset(AssetPaths.titleStartBtn)), - if (state.isHovered || state.isFocused) ...[ - Positioned.fill( - child: Image.asset(AssetPaths.titleStartBtnHover)), - ], - Center( - child: Row( - mainAxisAlignment: MainAxisAlignment.end, - children: [ - Text('START MISSION', - style: TextStyles.btn - .copyWith(fontSize: 24, letterSpacing: 18)), - ], - ), - ), - ], - ) - .animate(autoPlay: false, onInit: (c) => _btnAnim = c) - .shimmer(duration: .7.seconds, color: Colors.black), - ) + width: 520, + height: 100, + child: Stack( + children: [ + Positioned.fill( + child: Image.asset(AssetPaths.titleStartBtn), + ), + if (state.isHovered || state.isFocused) ...[ + Positioned.fill( + child: Image.asset(AssetPaths.titleStartBtnHover), + ), + ], + Center( + child: Row( + mainAxisAlignment: MainAxisAlignment.end, + children: [ + Text( + 'START MISSION', + style: TextStyles.btn.copyWith( + fontSize: 24, + letterSpacing: 18, + ), + ), + ], + ), + ), + ], + ) + .animate(autoPlay: false, onInit: (c) => _btnAnim = c) + .shimmer(duration: .7.seconds, color: Colors.black), + ) .animate() .fadeIn(delay: 2.3.seconds) .slide(begin: const Offset(0, .2)); diff --git a/next-gen-ui/step_06/pubspec.yaml b/next-gen-ui/step_06/pubspec.yaml index dd3eb24959..7fd82808a1 100644 --- a/next-gen-ui/step_06/pubspec.yaml +++ b/next-gen-ui/step_06/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: 'none' version: 0.1.0 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 dependencies: flutter: diff --git a/testing_codelab/step_03/lib/main.dart b/testing_codelab/step_03/lib/main.dart index a54c73710f..11536f7c6f 100644 --- a/testing_codelab/step_03/lib/main.dart +++ b/testing_codelab/step_03/lib/main.dart @@ -14,11 +14,7 @@ class MainApp extends StatelessWidget { @override Widget build(BuildContext context) { return const MaterialApp( - home: Scaffold( - body: Center( - child: Text('Hello World!'), - ), - ), + home: Scaffold(body: Center(child: Text('Hello World!'))), ); } } diff --git a/testing_codelab/step_03/pubspec.yaml b/testing_codelab/step_03/pubspec.yaml index 9681735f0a..92f65a3e21 100644 --- a/testing_codelab/step_03/pubspec.yaml +++ b/testing_codelab/step_03/pubspec.yaml @@ -8,7 +8,7 @@ publish_to: 'none' version: 0.1.0 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 dependencies: flutter: diff --git a/testing_codelab/step_04/lib/main.dart b/testing_codelab/step_04/lib/main.dart index 9a8eab4067..91f24fb58b 100644 --- a/testing_codelab/step_04/lib/main.dart +++ b/testing_codelab/step_04/lib/main.dart @@ -42,9 +42,7 @@ class TestingApp extends StatelessWidget { child: MaterialApp.router( title: 'Testing Sample', theme: ThemeData( - colorScheme: ColorScheme.fromSeed( - seedColor: Colors.deepPurple, - ), + colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple), useMaterial3: true, ), routerConfig: _router, diff --git a/testing_codelab/step_04/lib/screens/favorites.dart b/testing_codelab/step_04/lib/screens/favorites.dart index fb66994a02..a8424f04b8 100644 --- a/testing_codelab/step_04/lib/screens/favorites.dart +++ b/testing_codelab/step_04/lib/screens/favorites.dart @@ -15,15 +15,15 @@ class FavoritesPage extends StatelessWidget { @override Widget build(BuildContext context) { return Scaffold( - appBar: AppBar( - title: const Text('Favorites'), - ), + appBar: AppBar(title: const Text('Favorites')), body: Consumer( - builder: (context, value, child) => ListView.builder( - itemCount: value.items.length, - padding: const EdgeInsets.symmetric(vertical: 16), - itemBuilder: (context, index) => FavoriteItemTile(value.items[index]), - ), + builder: + (context, value, child) => ListView.builder( + itemCount: value.items.length, + padding: const EdgeInsets.symmetric(vertical: 16), + itemBuilder: + (context, index) => FavoriteItemTile(value.items[index]), + ), ), ); } @@ -42,10 +42,7 @@ class FavoriteItemTile extends StatelessWidget { leading: CircleAvatar( backgroundColor: Colors.primaries[itemNo % Colors.primaries.length], ), - title: Text( - 'Item $itemNo', - key: Key('favorites_text_$itemNo'), - ), + title: Text('Item $itemNo', key: Key('favorites_text_$itemNo')), trailing: IconButton( key: Key('remove_icon_$itemNo'), icon: const Icon(Icons.close), diff --git a/testing_codelab/step_04/lib/screens/home.dart b/testing_codelab/step_04/lib/screens/home.dart index 1af3be5985..15c4f8048e 100644 --- a/testing_codelab/step_04/lib/screens/home.dart +++ b/testing_codelab/step_04/lib/screens/home.dart @@ -53,24 +53,24 @@ class ItemTile extends StatelessWidget { leading: CircleAvatar( backgroundColor: Colors.primaries[itemNo % Colors.primaries.length], ), - title: Text( - 'Item $itemNo', - key: Key('text_$itemNo'), - ), + title: Text('Item $itemNo', key: Key('text_$itemNo')), trailing: IconButton( key: Key('icon_$itemNo'), - icon: favoritesList.items.contains(itemNo) - ? const Icon(Icons.favorite) - : const Icon(Icons.favorite_border), + icon: + favoritesList.items.contains(itemNo) + ? const Icon(Icons.favorite) + : const Icon(Icons.favorite_border), onPressed: () { !favoritesList.items.contains(itemNo) ? favoritesList.add(itemNo) : favoritesList.remove(itemNo); ScaffoldMessenger.of(context).showSnackBar( SnackBar( - content: Text(favoritesList.items.contains(itemNo) - ? 'Added to favorites.' - : 'Removed from favorites.'), + content: Text( + favoritesList.items.contains(itemNo) + ? 'Added to favorites.' + : 'Removed from favorites.', + ), duration: const Duration(seconds: 1), ), ); diff --git a/testing_codelab/step_04/pubspec.yaml b/testing_codelab/step_04/pubspec.yaml index 9681735f0a..92f65a3e21 100644 --- a/testing_codelab/step_04/pubspec.yaml +++ b/testing_codelab/step_04/pubspec.yaml @@ -8,7 +8,7 @@ publish_to: 'none' version: 0.1.0 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 dependencies: flutter: diff --git a/testing_codelab/step_05/lib/main.dart b/testing_codelab/step_05/lib/main.dart index 9a8eab4067..91f24fb58b 100644 --- a/testing_codelab/step_05/lib/main.dart +++ b/testing_codelab/step_05/lib/main.dart @@ -42,9 +42,7 @@ class TestingApp extends StatelessWidget { child: MaterialApp.router( title: 'Testing Sample', theme: ThemeData( - colorScheme: ColorScheme.fromSeed( - seedColor: Colors.deepPurple, - ), + colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple), useMaterial3: true, ), routerConfig: _router, diff --git a/testing_codelab/step_05/lib/screens/favorites.dart b/testing_codelab/step_05/lib/screens/favorites.dart index fb66994a02..a8424f04b8 100644 --- a/testing_codelab/step_05/lib/screens/favorites.dart +++ b/testing_codelab/step_05/lib/screens/favorites.dart @@ -15,15 +15,15 @@ class FavoritesPage extends StatelessWidget { @override Widget build(BuildContext context) { return Scaffold( - appBar: AppBar( - title: const Text('Favorites'), - ), + appBar: AppBar(title: const Text('Favorites')), body: Consumer( - builder: (context, value, child) => ListView.builder( - itemCount: value.items.length, - padding: const EdgeInsets.symmetric(vertical: 16), - itemBuilder: (context, index) => FavoriteItemTile(value.items[index]), - ), + builder: + (context, value, child) => ListView.builder( + itemCount: value.items.length, + padding: const EdgeInsets.symmetric(vertical: 16), + itemBuilder: + (context, index) => FavoriteItemTile(value.items[index]), + ), ), ); } @@ -42,10 +42,7 @@ class FavoriteItemTile extends StatelessWidget { leading: CircleAvatar( backgroundColor: Colors.primaries[itemNo % Colors.primaries.length], ), - title: Text( - 'Item $itemNo', - key: Key('favorites_text_$itemNo'), - ), + title: Text('Item $itemNo', key: Key('favorites_text_$itemNo')), trailing: IconButton( key: Key('remove_icon_$itemNo'), icon: const Icon(Icons.close), diff --git a/testing_codelab/step_05/lib/screens/home.dart b/testing_codelab/step_05/lib/screens/home.dart index 1af3be5985..15c4f8048e 100644 --- a/testing_codelab/step_05/lib/screens/home.dart +++ b/testing_codelab/step_05/lib/screens/home.dart @@ -53,24 +53,24 @@ class ItemTile extends StatelessWidget { leading: CircleAvatar( backgroundColor: Colors.primaries[itemNo % Colors.primaries.length], ), - title: Text( - 'Item $itemNo', - key: Key('text_$itemNo'), - ), + title: Text('Item $itemNo', key: Key('text_$itemNo')), trailing: IconButton( key: Key('icon_$itemNo'), - icon: favoritesList.items.contains(itemNo) - ? const Icon(Icons.favorite) - : const Icon(Icons.favorite_border), + icon: + favoritesList.items.contains(itemNo) + ? const Icon(Icons.favorite) + : const Icon(Icons.favorite_border), onPressed: () { !favoritesList.items.contains(itemNo) ? favoritesList.add(itemNo) : favoritesList.remove(itemNo); ScaffoldMessenger.of(context).showSnackBar( SnackBar( - content: Text(favoritesList.items.contains(itemNo) - ? 'Added to favorites.' - : 'Removed from favorites.'), + content: Text( + favoritesList.items.contains(itemNo) + ? 'Added to favorites.' + : 'Removed from favorites.', + ), duration: const Duration(seconds: 1), ), ); diff --git a/testing_codelab/step_05/pubspec.yaml b/testing_codelab/step_05/pubspec.yaml index 9681735f0a..92f65a3e21 100644 --- a/testing_codelab/step_05/pubspec.yaml +++ b/testing_codelab/step_05/pubspec.yaml @@ -8,7 +8,7 @@ publish_to: 'none' version: 0.1.0 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 dependencies: flutter: diff --git a/testing_codelab/step_06/lib/main.dart b/testing_codelab/step_06/lib/main.dart index 9a8eab4067..91f24fb58b 100644 --- a/testing_codelab/step_06/lib/main.dart +++ b/testing_codelab/step_06/lib/main.dart @@ -42,9 +42,7 @@ class TestingApp extends StatelessWidget { child: MaterialApp.router( title: 'Testing Sample', theme: ThemeData( - colorScheme: ColorScheme.fromSeed( - seedColor: Colors.deepPurple, - ), + colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple), useMaterial3: true, ), routerConfig: _router, diff --git a/testing_codelab/step_06/lib/screens/favorites.dart b/testing_codelab/step_06/lib/screens/favorites.dart index fb66994a02..a8424f04b8 100644 --- a/testing_codelab/step_06/lib/screens/favorites.dart +++ b/testing_codelab/step_06/lib/screens/favorites.dart @@ -15,15 +15,15 @@ class FavoritesPage extends StatelessWidget { @override Widget build(BuildContext context) { return Scaffold( - appBar: AppBar( - title: const Text('Favorites'), - ), + appBar: AppBar(title: const Text('Favorites')), body: Consumer( - builder: (context, value, child) => ListView.builder( - itemCount: value.items.length, - padding: const EdgeInsets.symmetric(vertical: 16), - itemBuilder: (context, index) => FavoriteItemTile(value.items[index]), - ), + builder: + (context, value, child) => ListView.builder( + itemCount: value.items.length, + padding: const EdgeInsets.symmetric(vertical: 16), + itemBuilder: + (context, index) => FavoriteItemTile(value.items[index]), + ), ), ); } @@ -42,10 +42,7 @@ class FavoriteItemTile extends StatelessWidget { leading: CircleAvatar( backgroundColor: Colors.primaries[itemNo % Colors.primaries.length], ), - title: Text( - 'Item $itemNo', - key: Key('favorites_text_$itemNo'), - ), + title: Text('Item $itemNo', key: Key('favorites_text_$itemNo')), trailing: IconButton( key: Key('remove_icon_$itemNo'), icon: const Icon(Icons.close), diff --git a/testing_codelab/step_06/lib/screens/home.dart b/testing_codelab/step_06/lib/screens/home.dart index 1af3be5985..15c4f8048e 100644 --- a/testing_codelab/step_06/lib/screens/home.dart +++ b/testing_codelab/step_06/lib/screens/home.dart @@ -53,24 +53,24 @@ class ItemTile extends StatelessWidget { leading: CircleAvatar( backgroundColor: Colors.primaries[itemNo % Colors.primaries.length], ), - title: Text( - 'Item $itemNo', - key: Key('text_$itemNo'), - ), + title: Text('Item $itemNo', key: Key('text_$itemNo')), trailing: IconButton( key: Key('icon_$itemNo'), - icon: favoritesList.items.contains(itemNo) - ? const Icon(Icons.favorite) - : const Icon(Icons.favorite_border), + icon: + favoritesList.items.contains(itemNo) + ? const Icon(Icons.favorite) + : const Icon(Icons.favorite_border), onPressed: () { !favoritesList.items.contains(itemNo) ? favoritesList.add(itemNo) : favoritesList.remove(itemNo); ScaffoldMessenger.of(context).showSnackBar( SnackBar( - content: Text(favoritesList.items.contains(itemNo) - ? 'Added to favorites.' - : 'Removed from favorites.'), + content: Text( + favoritesList.items.contains(itemNo) + ? 'Added to favorites.' + : 'Removed from favorites.', + ), duration: const Duration(seconds: 1), ), ); diff --git a/testing_codelab/step_06/pubspec.yaml b/testing_codelab/step_06/pubspec.yaml index 9681735f0a..92f65a3e21 100644 --- a/testing_codelab/step_06/pubspec.yaml +++ b/testing_codelab/step_06/pubspec.yaml @@ -8,7 +8,7 @@ publish_to: 'none' version: 0.1.0 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 dependencies: flutter: diff --git a/testing_codelab/step_06/test/favorites_test.dart b/testing_codelab/step_06/test/favorites_test.dart index 25b3f4ce78..a2b50dfb97 100644 --- a/testing_codelab/step_06/test/favorites_test.dart +++ b/testing_codelab/step_06/test/favorites_test.dart @@ -11,14 +11,12 @@ import 'package:testing_app/screens/favorites.dart'; late Favorites favoritesList; Widget createFavoritesScreen() => ChangeNotifierProvider( - create: (context) { - favoritesList = Favorites(); - return favoritesList; - }, - child: const MaterialApp( - home: FavoritesPage(), - ), - ); + create: (context) { + favoritesList = Favorites(); + return favoritesList; + }, + child: const MaterialApp(home: FavoritesPage()), +); void addItems() { for (var i = 0; i < 10; i += 2) { @@ -42,8 +40,10 @@ void main() { var totalItems = tester.widgetList(find.byIcon(Icons.close)).length; await tester.tap(find.byIcon(Icons.close).first); await tester.pumpAndSettle(); - expect(tester.widgetList(find.byIcon(Icons.close)).length, - lessThan(totalItems)); + expect( + tester.widgetList(find.byIcon(Icons.close)).length, + lessThan(totalItems), + ); expect(find.text('Removed from favorites.'), findsOneWidget); }); }); diff --git a/testing_codelab/step_06/test/home_test.dart b/testing_codelab/step_06/test/home_test.dart index 6979041f50..1d561156a6 100644 --- a/testing_codelab/step_06/test/home_test.dart +++ b/testing_codelab/step_06/test/home_test.dart @@ -9,11 +9,9 @@ import 'package:testing_app/models/favorites.dart'; import 'package:testing_app/screens/home.dart'; Widget createHomeScreen() => ChangeNotifierProvider( - create: (context) => Favorites(), - child: const MaterialApp( - home: HomePage(), - ), - ); + create: (context) => Favorites(), + child: const MaterialApp(home: HomePage()), +); void main() { group('Home Page Widget Tests', () { @@ -25,11 +23,7 @@ void main() { testWidgets('Testing Scrolling', (tester) async { await tester.pumpWidget(createHomeScreen()); expect(find.text('Item 0'), findsOneWidget); - await tester.fling( - find.byType(ListView), - const Offset(0, -200), - 3000, - ); + await tester.fling(find.byType(ListView), const Offset(0, -200), 3000); await tester.pumpAndSettle(); expect(find.text('Item 0'), findsNothing); }); diff --git a/testing_codelab/step_07/integration_test/app_test.dart b/testing_codelab/step_07/integration_test/app_test.dart index 8497bc0aa7..2ed3c02001 100644 --- a/testing_codelab/step_07/integration_test/app_test.dart +++ b/testing_codelab/step_07/integration_test/app_test.dart @@ -11,11 +11,7 @@ void main() { testWidgets('Favorites operations test', (tester) async { await tester.pumpWidget(const TestingApp()); - final iconKeys = [ - 'icon_0', - 'icon_1', - 'icon_2', - ]; + final iconKeys = ['icon_0', 'icon_1', 'icon_2']; for (var icon in iconKeys) { await tester.tap(find.byKey(ValueKey(icon))); diff --git a/testing_codelab/step_07/lib/main.dart b/testing_codelab/step_07/lib/main.dart index 9a8eab4067..91f24fb58b 100644 --- a/testing_codelab/step_07/lib/main.dart +++ b/testing_codelab/step_07/lib/main.dart @@ -42,9 +42,7 @@ class TestingApp extends StatelessWidget { child: MaterialApp.router( title: 'Testing Sample', theme: ThemeData( - colorScheme: ColorScheme.fromSeed( - seedColor: Colors.deepPurple, - ), + colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple), useMaterial3: true, ), routerConfig: _router, diff --git a/testing_codelab/step_07/lib/screens/favorites.dart b/testing_codelab/step_07/lib/screens/favorites.dart index fb66994a02..a8424f04b8 100644 --- a/testing_codelab/step_07/lib/screens/favorites.dart +++ b/testing_codelab/step_07/lib/screens/favorites.dart @@ -15,15 +15,15 @@ class FavoritesPage extends StatelessWidget { @override Widget build(BuildContext context) { return Scaffold( - appBar: AppBar( - title: const Text('Favorites'), - ), + appBar: AppBar(title: const Text('Favorites')), body: Consumer( - builder: (context, value, child) => ListView.builder( - itemCount: value.items.length, - padding: const EdgeInsets.symmetric(vertical: 16), - itemBuilder: (context, index) => FavoriteItemTile(value.items[index]), - ), + builder: + (context, value, child) => ListView.builder( + itemCount: value.items.length, + padding: const EdgeInsets.symmetric(vertical: 16), + itemBuilder: + (context, index) => FavoriteItemTile(value.items[index]), + ), ), ); } @@ -42,10 +42,7 @@ class FavoriteItemTile extends StatelessWidget { leading: CircleAvatar( backgroundColor: Colors.primaries[itemNo % Colors.primaries.length], ), - title: Text( - 'Item $itemNo', - key: Key('favorites_text_$itemNo'), - ), + title: Text('Item $itemNo', key: Key('favorites_text_$itemNo')), trailing: IconButton( key: Key('remove_icon_$itemNo'), icon: const Icon(Icons.close), diff --git a/testing_codelab/step_07/lib/screens/home.dart b/testing_codelab/step_07/lib/screens/home.dart index 1af3be5985..15c4f8048e 100644 --- a/testing_codelab/step_07/lib/screens/home.dart +++ b/testing_codelab/step_07/lib/screens/home.dart @@ -53,24 +53,24 @@ class ItemTile extends StatelessWidget { leading: CircleAvatar( backgroundColor: Colors.primaries[itemNo % Colors.primaries.length], ), - title: Text( - 'Item $itemNo', - key: Key('text_$itemNo'), - ), + title: Text('Item $itemNo', key: Key('text_$itemNo')), trailing: IconButton( key: Key('icon_$itemNo'), - icon: favoritesList.items.contains(itemNo) - ? const Icon(Icons.favorite) - : const Icon(Icons.favorite_border), + icon: + favoritesList.items.contains(itemNo) + ? const Icon(Icons.favorite) + : const Icon(Icons.favorite_border), onPressed: () { !favoritesList.items.contains(itemNo) ? favoritesList.add(itemNo) : favoritesList.remove(itemNo); ScaffoldMessenger.of(context).showSnackBar( SnackBar( - content: Text(favoritesList.items.contains(itemNo) - ? 'Added to favorites.' - : 'Removed from favorites.'), + content: Text( + favoritesList.items.contains(itemNo) + ? 'Added to favorites.' + : 'Removed from favorites.', + ), duration: const Duration(seconds: 1), ), ); diff --git a/testing_codelab/step_07/pubspec.yaml b/testing_codelab/step_07/pubspec.yaml index 9681735f0a..92f65a3e21 100644 --- a/testing_codelab/step_07/pubspec.yaml +++ b/testing_codelab/step_07/pubspec.yaml @@ -8,7 +8,7 @@ publish_to: 'none' version: 0.1.0 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 dependencies: flutter: diff --git a/testing_codelab/step_07/test/favorites_test.dart b/testing_codelab/step_07/test/favorites_test.dart index 25b3f4ce78..a2b50dfb97 100644 --- a/testing_codelab/step_07/test/favorites_test.dart +++ b/testing_codelab/step_07/test/favorites_test.dart @@ -11,14 +11,12 @@ import 'package:testing_app/screens/favorites.dart'; late Favorites favoritesList; Widget createFavoritesScreen() => ChangeNotifierProvider( - create: (context) { - favoritesList = Favorites(); - return favoritesList; - }, - child: const MaterialApp( - home: FavoritesPage(), - ), - ); + create: (context) { + favoritesList = Favorites(); + return favoritesList; + }, + child: const MaterialApp(home: FavoritesPage()), +); void addItems() { for (var i = 0; i < 10; i += 2) { @@ -42,8 +40,10 @@ void main() { var totalItems = tester.widgetList(find.byIcon(Icons.close)).length; await tester.tap(find.byIcon(Icons.close).first); await tester.pumpAndSettle(); - expect(tester.widgetList(find.byIcon(Icons.close)).length, - lessThan(totalItems)); + expect( + tester.widgetList(find.byIcon(Icons.close)).length, + lessThan(totalItems), + ); expect(find.text('Removed from favorites.'), findsOneWidget); }); }); diff --git a/testing_codelab/step_07/test/home_test.dart b/testing_codelab/step_07/test/home_test.dart index 6979041f50..1d561156a6 100644 --- a/testing_codelab/step_07/test/home_test.dart +++ b/testing_codelab/step_07/test/home_test.dart @@ -9,11 +9,9 @@ import 'package:testing_app/models/favorites.dart'; import 'package:testing_app/screens/home.dart'; Widget createHomeScreen() => ChangeNotifierProvider( - create: (context) => Favorites(), - child: const MaterialApp( - home: HomePage(), - ), - ); + create: (context) => Favorites(), + child: const MaterialApp(home: HomePage()), +); void main() { group('Home Page Widget Tests', () { @@ -25,11 +23,7 @@ void main() { testWidgets('Testing Scrolling', (tester) async { await tester.pumpWidget(createHomeScreen()); expect(find.text('Item 0'), findsOneWidget); - await tester.fling( - find.byType(ListView), - const Offset(0, -200), - 3000, - ); + await tester.fling(find.byType(ListView), const Offset(0, -200), 3000); await tester.pumpAndSettle(); expect(find.text('Item 0'), findsNothing); }); diff --git a/testing_codelab/step_08/integration_test/app_test.dart b/testing_codelab/step_08/integration_test/app_test.dart index 8497bc0aa7..2ed3c02001 100644 --- a/testing_codelab/step_08/integration_test/app_test.dart +++ b/testing_codelab/step_08/integration_test/app_test.dart @@ -11,11 +11,7 @@ void main() { testWidgets('Favorites operations test', (tester) async { await tester.pumpWidget(const TestingApp()); - final iconKeys = [ - 'icon_0', - 'icon_1', - 'icon_2', - ]; + final iconKeys = ['icon_0', 'icon_1', 'icon_2']; for (var icon in iconKeys) { await tester.tap(find.byKey(ValueKey(icon))); diff --git a/testing_codelab/step_08/lib/main.dart b/testing_codelab/step_08/lib/main.dart index 9a8eab4067..91f24fb58b 100644 --- a/testing_codelab/step_08/lib/main.dart +++ b/testing_codelab/step_08/lib/main.dart @@ -42,9 +42,7 @@ class TestingApp extends StatelessWidget { child: MaterialApp.router( title: 'Testing Sample', theme: ThemeData( - colorScheme: ColorScheme.fromSeed( - seedColor: Colors.deepPurple, - ), + colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple), useMaterial3: true, ), routerConfig: _router, diff --git a/testing_codelab/step_08/lib/screens/favorites.dart b/testing_codelab/step_08/lib/screens/favorites.dart index fb66994a02..a8424f04b8 100644 --- a/testing_codelab/step_08/lib/screens/favorites.dart +++ b/testing_codelab/step_08/lib/screens/favorites.dart @@ -15,15 +15,15 @@ class FavoritesPage extends StatelessWidget { @override Widget build(BuildContext context) { return Scaffold( - appBar: AppBar( - title: const Text('Favorites'), - ), + appBar: AppBar(title: const Text('Favorites')), body: Consumer( - builder: (context, value, child) => ListView.builder( - itemCount: value.items.length, - padding: const EdgeInsets.symmetric(vertical: 16), - itemBuilder: (context, index) => FavoriteItemTile(value.items[index]), - ), + builder: + (context, value, child) => ListView.builder( + itemCount: value.items.length, + padding: const EdgeInsets.symmetric(vertical: 16), + itemBuilder: + (context, index) => FavoriteItemTile(value.items[index]), + ), ), ); } @@ -42,10 +42,7 @@ class FavoriteItemTile extends StatelessWidget { leading: CircleAvatar( backgroundColor: Colors.primaries[itemNo % Colors.primaries.length], ), - title: Text( - 'Item $itemNo', - key: Key('favorites_text_$itemNo'), - ), + title: Text('Item $itemNo', key: Key('favorites_text_$itemNo')), trailing: IconButton( key: Key('remove_icon_$itemNo'), icon: const Icon(Icons.close), diff --git a/testing_codelab/step_08/lib/screens/home.dart b/testing_codelab/step_08/lib/screens/home.dart index 1af3be5985..15c4f8048e 100644 --- a/testing_codelab/step_08/lib/screens/home.dart +++ b/testing_codelab/step_08/lib/screens/home.dart @@ -53,24 +53,24 @@ class ItemTile extends StatelessWidget { leading: CircleAvatar( backgroundColor: Colors.primaries[itemNo % Colors.primaries.length], ), - title: Text( - 'Item $itemNo', - key: Key('text_$itemNo'), - ), + title: Text('Item $itemNo', key: Key('text_$itemNo')), trailing: IconButton( key: Key('icon_$itemNo'), - icon: favoritesList.items.contains(itemNo) - ? const Icon(Icons.favorite) - : const Icon(Icons.favorite_border), + icon: + favoritesList.items.contains(itemNo) + ? const Icon(Icons.favorite) + : const Icon(Icons.favorite_border), onPressed: () { !favoritesList.items.contains(itemNo) ? favoritesList.add(itemNo) : favoritesList.remove(itemNo); ScaffoldMessenger.of(context).showSnackBar( SnackBar( - content: Text(favoritesList.items.contains(itemNo) - ? 'Added to favorites.' - : 'Removed from favorites.'), + content: Text( + favoritesList.items.contains(itemNo) + ? 'Added to favorites.' + : 'Removed from favorites.', + ), duration: const Duration(seconds: 1), ), ); diff --git a/testing_codelab/step_08/pubspec.yaml b/testing_codelab/step_08/pubspec.yaml index 9681735f0a..92f65a3e21 100644 --- a/testing_codelab/step_08/pubspec.yaml +++ b/testing_codelab/step_08/pubspec.yaml @@ -8,7 +8,7 @@ publish_to: 'none' version: 0.1.0 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 dependencies: flutter: diff --git a/testing_codelab/step_08/test/favorites_test.dart b/testing_codelab/step_08/test/favorites_test.dart index 25b3f4ce78..a2b50dfb97 100644 --- a/testing_codelab/step_08/test/favorites_test.dart +++ b/testing_codelab/step_08/test/favorites_test.dart @@ -11,14 +11,12 @@ import 'package:testing_app/screens/favorites.dart'; late Favorites favoritesList; Widget createFavoritesScreen() => ChangeNotifierProvider( - create: (context) { - favoritesList = Favorites(); - return favoritesList; - }, - child: const MaterialApp( - home: FavoritesPage(), - ), - ); + create: (context) { + favoritesList = Favorites(); + return favoritesList; + }, + child: const MaterialApp(home: FavoritesPage()), +); void addItems() { for (var i = 0; i < 10; i += 2) { @@ -42,8 +40,10 @@ void main() { var totalItems = tester.widgetList(find.byIcon(Icons.close)).length; await tester.tap(find.byIcon(Icons.close).first); await tester.pumpAndSettle(); - expect(tester.widgetList(find.byIcon(Icons.close)).length, - lessThan(totalItems)); + expect( + tester.widgetList(find.byIcon(Icons.close)).length, + lessThan(totalItems), + ); expect(find.text('Removed from favorites.'), findsOneWidget); }); }); diff --git a/testing_codelab/step_08/test/home_test.dart b/testing_codelab/step_08/test/home_test.dart index 6979041f50..1d561156a6 100644 --- a/testing_codelab/step_08/test/home_test.dart +++ b/testing_codelab/step_08/test/home_test.dart @@ -9,11 +9,9 @@ import 'package:testing_app/models/favorites.dart'; import 'package:testing_app/screens/home.dart'; Widget createHomeScreen() => ChangeNotifierProvider( - create: (context) => Favorites(), - child: const MaterialApp( - home: HomePage(), - ), - ); + create: (context) => Favorites(), + child: const MaterialApp(home: HomePage()), +); void main() { group('Home Page Widget Tests', () { @@ -25,11 +23,7 @@ void main() { testWidgets('Testing Scrolling', (tester) async { await tester.pumpWidget(createHomeScreen()); expect(find.text('Item 0'), findsOneWidget); - await tester.fling( - find.byType(ListView), - const Offset(0, -200), - 3000, - ); + await tester.fling(find.byType(ListView), const Offset(0, -200), 3000); await tester.pumpAndSettle(); expect(find.text('Item 0'), findsNothing); }); diff --git a/testing_codelab/step_08/test_driver/perf_driver.dart b/testing_codelab/step_08/test_driver/perf_driver.dart index e00ea019f0..efc52cd9e4 100644 --- a/testing_codelab/step_08/test_driver/perf_driver.dart +++ b/testing_codelab/step_08/test_driver/perf_driver.dart @@ -10,7 +10,8 @@ Future main() { responseDataCallback: (data) async { if (data != null) { final timeline = driver.Timeline.fromJson( - data['scrolling_summary'] as Map); + data['scrolling_summary'] as Map, + ); final summary = driver.TimelineSummary.summarize(timeline); diff --git a/tooling/claat_export_images/bin/claat_export_images.dart b/tooling/claat_export_images/bin/claat_export_images.dart index e4e4354bb7..ac5f5be21d 100644 --- a/tooling/claat_export_images/bin/claat_export_images.dart +++ b/tooling/claat_export_images/bin/claat_export_images.dart @@ -16,12 +16,7 @@ import 'package:path/path.dart' as path; void main(List arguments) async { final argParser = ArgParser(); - argParser.addFlag( - 'help', - abbr: 'h', - negatable: false, - help: 'Display usage', - ); + argParser.addFlag('help', abbr: 'h', negatable: false, help: 'Display usage'); argParser.addOption( 'client-secrets', abbr: 's', @@ -42,9 +37,7 @@ void main(List arguments) async { } final clientSecret = ClientSecret.fromJson( - jsonDecode( - await File(args['client-secrets']).readAsString(), - ), + jsonDecode(await File(args['client-secrets']).readAsString()), ); final gDocID = args['doc-id']; @@ -54,28 +47,34 @@ void main(List arguments) async { clientSecret: clientSecret.installed.clientSecret, ); final apiClient = google_docs.DocsApi(client); - final document = await apiClient.documents - .get(gDocID, suggestionsViewMode: 'PREVIEW_WITHOUT_SUGGESTIONS'); + final document = await apiClient.documents.get( + gDocID, + suggestionsViewMode: 'PREVIEW_WITHOUT_SUGGESTIONS', + ); final uris = claatImageUris(document); Directory('img').createSync(); int imageCount = 0; for (final uri in uris) { final response = await http.get(uri); if (PngDecoder().isValidFile(response.bodyBytes)) { - File(path.join('img', '${uri.pathSegments.last}.png')) - .writeAsBytesSync(response.bodyBytes); + File( + path.join('img', '${uri.pathSegments.last}.png'), + ).writeAsBytesSync(response.bodyBytes); imageCount += 1; } else if (JpegDecoder().isValidFile(response.bodyBytes)) { - File(path.join('img', '${uri.pathSegments.last}.jpg')) - .writeAsBytesSync(response.bodyBytes); + File( + path.join('img', '${uri.pathSegments.last}.jpg'), + ).writeAsBytesSync(response.bodyBytes); imageCount += 1; } else if (GifDecoder().isValidFile(response.bodyBytes)) { - File(path.join('img', '${uri.pathSegments.last}.gif')) - .writeAsBytesSync(response.bodyBytes); + File( + path.join('img', '${uri.pathSegments.last}.gif'), + ).writeAsBytesSync(response.bodyBytes); imageCount += 1; } else if (WebPDecoder().isValidFile(response.bodyBytes)) { - File(path.join('img', '${uri.pathSegments.last}.webp')) - .writeAsBytesSync(response.bodyBytes); + File( + path.join('img', '${uri.pathSegments.last}.webp'), + ).writeAsBytesSync(response.bodyBytes); imageCount += 1; } else { print('Unknown image format: $uri'); @@ -84,13 +83,12 @@ void main(List arguments) async { print('Wrote $imageCount images to img/'); } -Future obtainCredentials( - {required String clientID, required String clientSecret}) async => - await clientViaUserConsent( - ClientId(clientID, clientSecret), - [google_docs.DocsApi.driveReadonlyScope], - _prompt, - ); +Future obtainCredentials({ + required String clientID, + required String clientSecret, +}) async => await clientViaUserConsent(ClientId(clientID, clientSecret), [ + google_docs.DocsApi.driveReadonlyScope, +], _prompt); void _prompt(String url) { print('Please go to the following URL and grant access:'); diff --git a/tooling/claat_export_images/lib/claat_export_images.dart b/tooling/claat_export_images/lib/claat_export_images.dart index 5fbbd4d2f2..fe9fd87abf 100644 --- a/tooling/claat_export_images/lib/claat_export_images.dart +++ b/tooling/claat_export_images/lib/claat_export_images.dart @@ -7,8 +7,12 @@ import 'package:googleapis/docs/v1.dart' as gdoc; List claatImageUris(gdoc.Document document) { List uris = []; for (final MapEntry(:value) in document.inlineObjects!.entries) { - final contentUri = value - .inlineObjectProperties?.embeddedObject?.imageProperties?.contentUri; + final contentUri = + value + .inlineObjectProperties + ?.embeddedObject + ?.imageProperties + ?.contentUri; if (contentUri != null) { final uri = Uri.tryParse(contentUri); if (uri != null) { diff --git a/tooling/claat_export_images/lib/client_secret.dart b/tooling/claat_export_images/lib/client_secret.dart index 5a98298453..b13f633050 100644 --- a/tooling/claat_export_images/lib/client_secret.dart +++ b/tooling/claat_export_images/lib/client_secret.dart @@ -42,13 +42,14 @@ class ClientSecretInstalled { final List redirectUris; ClientSecretInstalled( - this.clientId, - this.projectId, - this.authUri, - this.tokenUri, - this.authProviderX509CertUrl, - this.clientSecret, - this.redirectUris); + this.clientId, + this.projectId, + this.authUri, + this.tokenUri, + this.authProviderX509CertUrl, + this.clientSecret, + this.redirectUris, + ); factory ClientSecretInstalled.fromJson(Map json) => _$ClientSecretInstalledFromJson(json); diff --git a/tooling/claat_export_images/lib/client_secret.g.dart b/tooling/claat_export_images/lib/client_secret.g.dart index 105cc1741b..ca3eb2f4a4 100644 --- a/tooling/claat_export_images/lib/client_secret.g.dart +++ b/tooling/claat_export_images/lib/client_secret.g.dart @@ -11,34 +11,32 @@ part of 'client_secret.dart'; // ************************************************************************** ClientSecret _$ClientSecretFromJson(Map json) => ClientSecret( - ClientSecretInstalled.fromJson(json['installed'] as Map), - ); + ClientSecretInstalled.fromJson(json['installed'] as Map), +); Map _$ClientSecretToJson(ClientSecret instance) => - { - 'installed': instance.installed, - }; + {'installed': instance.installed}; ClientSecretInstalled _$ClientSecretInstalledFromJson( - Map json) => - ClientSecretInstalled( - json['client_id'] as String, - json['project_id'] as String, - json['auth_uri'] as String, - json['token_uri'] as String, - json['auth_provider_x509_cert_url'] as String, - json['client_secret'] as String, - (json['redirect_uris'] as List).map((e) => e as String).toList(), - ); + Map json, +) => ClientSecretInstalled( + json['client_id'] as String, + json['project_id'] as String, + json['auth_uri'] as String, + json['token_uri'] as String, + json['auth_provider_x509_cert_url'] as String, + json['client_secret'] as String, + (json['redirect_uris'] as List).map((e) => e as String).toList(), +); Map _$ClientSecretInstalledToJson( - ClientSecretInstalled instance) => - { - 'client_id': instance.clientId, - 'project_id': instance.projectId, - 'auth_uri': instance.authUri, - 'token_uri': instance.tokenUri, - 'auth_provider_x509_cert_url': instance.authProviderX509CertUrl, - 'client_secret': instance.clientSecret, - 'redirect_uris': instance.redirectUris, - }; + ClientSecretInstalled instance, +) => { + 'client_id': instance.clientId, + 'project_id': instance.projectId, + 'auth_uri': instance.authUri, + 'token_uri': instance.tokenUri, + 'auth_provider_x509_cert_url': instance.authProviderX509CertUrl, + 'client_secret': instance.clientSecret, + 'redirect_uris': instance.redirectUris, +}; diff --git a/tooling/claat_export_images/pubspec.yaml b/tooling/claat_export_images/pubspec.yaml index ee286a2e19..1931fd342d 100644 --- a/tooling/claat_export_images/pubspec.yaml +++ b/tooling/claat_export_images/pubspec.yaml @@ -4,7 +4,7 @@ version: 1.0.0 repository: https://github.com/flutter/codelabs environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 dependencies: args: ^2.4.2 diff --git a/tooling/codelab_rebuild/bin/codelab_rebuild.dart b/tooling/codelab_rebuild/bin/codelab_rebuild.dart index d57b6c5f37..f6753d0bac 100644 --- a/tooling/codelab_rebuild/bin/codelab_rebuild.dart +++ b/tooling/codelab_rebuild/bin/codelab_rebuild.dart @@ -13,8 +13,9 @@ void main(List arguments) { }); if (arguments.length != 1) { - Logger('main') - .severe('Usage: codelab_rebuild path/to/codelab_rebuild.yaml'); + Logger( + 'main', + ).severe('Usage: codelab_rebuild path/to/codelab_rebuild.yaml'); exit(1); } diff --git a/tooling/codelab_rebuild/lib/src/blueprint.dart b/tooling/codelab_rebuild/lib/src/blueprint.dart index 8141a4334d..a88488347c 100644 --- a/tooling/codelab_rebuild/lib/src/blueprint.dart +++ b/tooling/codelab_rebuild/lib/src/blueprint.dart @@ -14,11 +14,7 @@ part 'blueprint.g.dart'; final _logger = Logger('blueprint'); -@JsonSerializable( - anyMap: true, - checked: true, - disallowUnrecognizedKeys: true, -) +@JsonSerializable(anyMap: true, checked: true, disallowUnrecognizedKeys: true) class Blueprint { @JsonKey(required: true) final String name; @@ -62,10 +58,7 @@ class Blueprint { } factory Blueprint.fromString(String yaml) { - return checkedYamlDecode( - yaml, - (m) => Blueprint.fromJson(m!), - ); + return checkedYamlDecode(yaml, (m) => Blueprint.fromJson(m!)); } /// Rebuild a blueprint in a target directory. @@ -77,11 +70,7 @@ class Blueprint { String toString() => 'Blueprint: ${toJson()}'; } -@JsonSerializable( - anyMap: true, - checked: true, - disallowUnrecognizedKeys: true, -) +@JsonSerializable(anyMap: true, checked: true, disallowUnrecognizedKeys: true) class BlueprintStep { @JsonKey(required: true) final String name; @@ -269,21 +258,24 @@ class BlueprintStep { // We can't have patch and patch-u and patch-c if (patch != null && patchU != null && patchC != null) { _logger.warning( - 'Invalid step, multiple of patch, patch-u and patch-c specified: $name'); + 'Invalid step, multiple of patch, patch-u and patch-c specified: $name', + ); return false; } // If we have replace-contents, we need a file to apply it to. if (replaceContents != null && path == null) { - _logger - .warning('Invalid step, replace-contents with no target path: $name'); + _logger.warning( + 'Invalid step, replace-contents with no target path: $name', + ); return false; } // If we have base64-contents, we need a file to apply it to. if (base64Contents != null && path == null) { - _logger - .warning('Invalid step, base64-contents with no target path: $name'); + _logger.warning( + 'Invalid step, base64-contents with no target path: $name', + ); return false; } @@ -308,7 +300,8 @@ class BlueprintStep { // If we have a stripLinesContaining, we need a path to strip if (stripLinesContaining != null && path == null) { _logger.warning( - 'Invalid step, strip-lines-containing with no target path: $name'); + 'Invalid step, strip-lines-containing with no target path: $name', + ); return false; } @@ -318,7 +311,8 @@ class BlueprintStep { iphoneosDeploymentTarget == null && macosxDeploymentTarget == null) { _logger.warning( - 'Invalid step, xcode-add-file with no xcode-project-path, iphoneos-deployment-target or macosx-deployment-target: $name'); + 'Invalid step, xcode-add-file with no xcode-project-path, iphoneos-deployment-target or macosx-deployment-target: $name', + ); return false; } @@ -344,7 +338,8 @@ class BlueprintStep { xcodeAddFile != null || xcodeProjectPath != null)) { _logger.warning( - 'Invalid step, patch with command(s), replace-contents, or base64-contents: $name'); + 'Invalid step, patch with command(s), replace-contents, or base64-contents: $name', + ); return false; } @@ -359,11 +354,7 @@ class BlueprintStep { String toString() => 'BlueprintStep: ${toJson()}'; } -@JsonSerializable( - anyMap: true, - checked: true, - disallowUnrecognizedKeys: true, -) +@JsonSerializable(anyMap: true, checked: true, disallowUnrecognizedKeys: true) class FromTo { final String from; final String to; diff --git a/tooling/codelab_rebuild/lib/src/blueprint.g.dart b/tooling/codelab_rebuild/lib/src/blueprint.g.dart index 3bdb4a3572..aa322f1922 100644 --- a/tooling/codelab_rebuild/lib/src/blueprint.g.dart +++ b/tooling/codelab_rebuild/lib/src/blueprint.g.dart @@ -6,148 +6,164 @@ part of 'blueprint.dart'; // JsonSerializableGenerator // ************************************************************************** -Blueprint _$BlueprintFromJson(Map json) => $checkedCreate( - 'Blueprint', - json, - ($checkedConvert) { - $checkKeys( - json, - allowedKeys: const ['name', 'steps'], - requiredKeys: const ['name', 'steps'], - ); - final val = Blueprint( - name: $checkedConvert('name', (v) => v as String), - steps: $checkedConvert( - 'steps', - (v) => (v as List) +Blueprint _$BlueprintFromJson(Map json) => + $checkedCreate('Blueprint', json, ($checkedConvert) { + $checkKeys( + json, + allowedKeys: const ['name', 'steps'], + requiredKeys: const ['name', 'steps'], + ); + final val = Blueprint( + name: $checkedConvert('name', (v) => v as String), + steps: $checkedConvert( + 'steps', + (v) => + (v as List) .map((e) => BlueprintStep.fromJson(e as Map)) - .toList()), - ); - return val; - }, - ); + .toList(), + ), + ); + return val; + }); Map _$BlueprintToJson(Blueprint instance) => { - 'name': instance.name, - 'steps': instance.steps, - }; + 'name': instance.name, + 'steps': instance.steps, +}; BlueprintStep _$BlueprintStepFromJson(Map json) => $checkedCreate( - 'BlueprintStep', + 'BlueprintStep', + json, + ($checkedConvert) { + $checkKeys( json, - ($checkedConvert) { - $checkKeys( - json, - allowedKeys: const [ - 'name', - 'steps', - 'path', - 'base64-contents', - 'patch', - 'patch-u', - 'patch-c', - 'replace-contents', - 'platforms', - 'dart', - 'flutter', - 'git', - 'pod', - 'rm', - 'mkdir', - 'mkdirs', - 'rmdir', - 'rmdirs', - 'copydir', - 'copy', - 'rename', - 'retrieve-url', - 'tar', - '7z', - 'strip-lines-containing', - 'stop', - 'xcode-add-file', - 'xcode-project-path', - 'iphoneos-deployment-target', - 'macosx-deployment-target', - 'full-screen-macos-main-menu-xib' - ], - requiredKeys: const ['name'], - ); - final val = BlueprintStep( - name: $checkedConvert('name', (v) => v as String), - steps: $checkedConvert( - 'steps', - (v) => - (v as List?) - ?.map((e) => BlueprintStep.fromJson(e as Map)) - .toList() ?? - const []), - base64Contents: - $checkedConvert('base64-contents', (v) => v as String?), - patch: $checkedConvert('patch', (v) => v as String?), - patchU: $checkedConvert('patch-u', (v) => v as String?), - patchC: $checkedConvert('patch-c', (v) => v as String?), - path: $checkedConvert('path', (v) => v as String?), - replaceContents: - $checkedConvert('replace-contents', (v) => v as String?), - mkdir: $checkedConvert('mkdir', (v) => v as String?), - mkdirs: $checkedConvert( - 'mkdirs', - (v) => - (v as List?)?.map((e) => e as String).toList() ?? - const []), - rmdir: $checkedConvert('rmdir', (v) => v as String?), - rmdirs: $checkedConvert( - 'rmdirs', - (v) => - (v as List?)?.map((e) => e as String).toList() ?? - const []), - copydir: $checkedConvert( - 'copydir', (v) => v == null ? null : FromTo.fromJson(v as Map)), - copy: $checkedConvert( - 'copy', (v) => v == null ? null : FromTo.fromJson(v as Map)), - rename: $checkedConvert( - 'rename', (v) => v == null ? null : FromTo.fromJson(v as Map)), - platforms: $checkedConvert('platforms', - (v) => (v as List?)?.map((e) => e as String).toList()), - dart: $checkedConvert('dart', (v) => v as String?), - flutter: $checkedConvert('flutter', (v) => v as String?), - git: $checkedConvert('git', (v) => v as String?), - rm: $checkedConvert('rm', (v) => v as String?), - pod: $checkedConvert('pod', (v) => v as String?), - retrieveUrl: $checkedConvert('retrieve-url', (v) => v as String?), - tar: $checkedConvert('tar', (v) => v as String?), - sevenZip: $checkedConvert('7z', (v) => v as String?), - stripLinesContaining: - $checkedConvert('strip-lines-containing', (v) => v as String?), - stop: $checkedConvert('stop', (v) => v as bool?), - xcodeAddFile: $checkedConvert('xcode-add-file', (v) => v as String?), - xcodeProjectPath: - $checkedConvert('xcode-project-path', (v) => v as String?), - macOsMainMenuXib: $checkedConvert( - 'full-screen-macos-main-menu-xib', (v) => v as String?), - iphoneosDeploymentTarget: $checkedConvert( - 'iphoneos-deployment-target', (v) => v as String?), - macosxDeploymentTarget: - $checkedConvert('macosx-deployment-target', (v) => v as String?), - ); - return val; - }, - fieldKeyMap: const { - 'base64Contents': 'base64-contents', - 'patchU': 'patch-u', - 'patchC': 'patch-c', - 'replaceContents': 'replace-contents', - 'retrieveUrl': 'retrieve-url', - 'sevenZip': '7z', - 'stripLinesContaining': 'strip-lines-containing', - 'xcodeAddFile': 'xcode-add-file', - 'xcodeProjectPath': 'xcode-project-path', - 'macOsMainMenuXib': 'full-screen-macos-main-menu-xib', - 'iphoneosDeploymentTarget': 'iphoneos-deployment-target', - 'macosxDeploymentTarget': 'macosx-deployment-target' - }, + allowedKeys: const [ + 'name', + 'steps', + 'path', + 'base64-contents', + 'patch', + 'patch-u', + 'patch-c', + 'replace-contents', + 'platforms', + 'dart', + 'flutter', + 'git', + 'pod', + 'rm', + 'mkdir', + 'mkdirs', + 'rmdir', + 'rmdirs', + 'copydir', + 'copy', + 'rename', + 'retrieve-url', + 'tar', + '7z', + 'strip-lines-containing', + 'stop', + 'xcode-add-file', + 'xcode-project-path', + 'iphoneos-deployment-target', + 'macosx-deployment-target', + 'full-screen-macos-main-menu-xib', + ], + requiredKeys: const ['name'], ); + final val = BlueprintStep( + name: $checkedConvert('name', (v) => v as String), + steps: $checkedConvert( + 'steps', + (v) => + (v as List?) + ?.map((e) => BlueprintStep.fromJson(e as Map)) + .toList() ?? + const [], + ), + base64Contents: $checkedConvert('base64-contents', (v) => v as String?), + patch: $checkedConvert('patch', (v) => v as String?), + patchU: $checkedConvert('patch-u', (v) => v as String?), + patchC: $checkedConvert('patch-c', (v) => v as String?), + path: $checkedConvert('path', (v) => v as String?), + replaceContents: $checkedConvert('replace-contents', (v) => v as String?), + mkdir: $checkedConvert('mkdir', (v) => v as String?), + mkdirs: $checkedConvert( + 'mkdirs', + (v) => + (v as List?)?.map((e) => e as String).toList() ?? const [], + ), + rmdir: $checkedConvert('rmdir', (v) => v as String?), + rmdirs: $checkedConvert( + 'rmdirs', + (v) => + (v as List?)?.map((e) => e as String).toList() ?? const [], + ), + copydir: $checkedConvert( + 'copydir', + (v) => v == null ? null : FromTo.fromJson(v as Map), + ), + copy: $checkedConvert( + 'copy', + (v) => v == null ? null : FromTo.fromJson(v as Map), + ), + rename: $checkedConvert( + 'rename', + (v) => v == null ? null : FromTo.fromJson(v as Map), + ), + platforms: $checkedConvert( + 'platforms', + (v) => (v as List?)?.map((e) => e as String).toList(), + ), + dart: $checkedConvert('dart', (v) => v as String?), + flutter: $checkedConvert('flutter', (v) => v as String?), + git: $checkedConvert('git', (v) => v as String?), + rm: $checkedConvert('rm', (v) => v as String?), + pod: $checkedConvert('pod', (v) => v as String?), + retrieveUrl: $checkedConvert('retrieve-url', (v) => v as String?), + tar: $checkedConvert('tar', (v) => v as String?), + sevenZip: $checkedConvert('7z', (v) => v as String?), + stripLinesContaining: $checkedConvert( + 'strip-lines-containing', + (v) => v as String?, + ), + stop: $checkedConvert('stop', (v) => v as bool?), + xcodeAddFile: $checkedConvert('xcode-add-file', (v) => v as String?), + xcodeProjectPath: $checkedConvert( + 'xcode-project-path', + (v) => v as String?, + ), + macOsMainMenuXib: $checkedConvert( + 'full-screen-macos-main-menu-xib', + (v) => v as String?, + ), + iphoneosDeploymentTarget: $checkedConvert( + 'iphoneos-deployment-target', + (v) => v as String?, + ), + macosxDeploymentTarget: $checkedConvert( + 'macosx-deployment-target', + (v) => v as String?, + ), + ); + return val; + }, + fieldKeyMap: const { + 'base64Contents': 'base64-contents', + 'patchU': 'patch-u', + 'patchC': 'patch-c', + 'replaceContents': 'replace-contents', + 'retrieveUrl': 'retrieve-url', + 'sevenZip': '7z', + 'stripLinesContaining': 'strip-lines-containing', + 'xcodeAddFile': 'xcode-add-file', + 'xcodeProjectPath': 'xcode-project-path', + 'macOsMainMenuXib': 'full-screen-macos-main-menu-xib', + 'iphoneosDeploymentTarget': 'iphoneos-deployment-target', + 'macosxDeploymentTarget': 'macosx-deployment-target', + }, +); Map _$BlueprintStepToJson(BlueprintStep instance) => { @@ -184,23 +200,17 @@ Map _$BlueprintStepToJson(BlueprintStep instance) => 'full-screen-macos-main-menu-xib': instance.macOsMainMenuXib, }; -FromTo _$FromToFromJson(Map json) => $checkedCreate( - 'FromTo', - json, - ($checkedConvert) { - $checkKeys( - json, - allowedKeys: const ['from', 'to'], - ); - final val = FromTo( - from: $checkedConvert('from', (v) => v as String), - to: $checkedConvert('to', (v) => v as String), - ); - return val; - }, - ); +FromTo _$FromToFromJson(Map json) => + $checkedCreate('FromTo', json, ($checkedConvert) { + $checkKeys(json, allowedKeys: const ['from', 'to']); + final val = FromTo( + from: $checkedConvert('from', (v) => v as String), + to: $checkedConvert('to', (v) => v as String), + ); + return val; + }); Map _$FromToToJson(FromTo instance) => { - 'from': instance.from, - 'to': instance.to, - }; + 'from': instance.from, + 'to': instance.to, +}; diff --git a/tooling/codelab_rebuild/lib/src/rebuild_blueprint.dart b/tooling/codelab_rebuild/lib/src/rebuild_blueprint.dart index 953aa059ae..edb8945966 100644 --- a/tooling/codelab_rebuild/lib/src/rebuild_blueprint.dart +++ b/tooling/codelab_rebuild/lib/src/rebuild_blueprint.dart @@ -41,7 +41,8 @@ Future _buildBlueprintStep(Directory cwd, BlueprintStep step) async { if (platforms != null) { if (!platforms.contains(Platform.operatingSystem)) { _logger.info( - 'Skipping because ${Platform.operatingSystem} is not in [${platforms.join(',')}].'); + 'Skipping because ${Platform.operatingSystem} is not in [${platforms.join(',')}].', + ); return; } } @@ -58,17 +59,19 @@ Future _buildBlueprintStep(Directory cwd, BlueprintStep step) async { final dir = step.mkdir; if (dir != null) { _mkdir( - step.path != null - ? p.join(cwd.path, step.path, dir) - : p.join(cwd.path, dir), - step: step); + step.path != null + ? p.join(cwd.path, step.path, dir) + : p.join(cwd.path, dir), + step: step, + ); } else { for (final dir in step.mkdirs) { _mkdir( - step.path != null - ? p.join(cwd.path, step.path, dir) - : p.join(cwd.path, dir), - step: step); + step.path != null + ? p.join(cwd.path, step.path, dir) + : p.join(cwd.path, dir), + step: step, + ); } } return; @@ -78,17 +81,19 @@ Future _buildBlueprintStep(Directory cwd, BlueprintStep step) async { final dir = step.rmdir; if (dir != null) { _rmdir( - step.path != null - ? p.join(cwd.path, step.path, dir) - : p.join(cwd.path, dir), - step: step); + step.path != null + ? p.join(cwd.path, step.path, dir) + : p.join(cwd.path, dir), + step: step, + ); } else { for (final dir in step.rmdirs) { _rmdir( - step.path != null - ? p.join(cwd.path, step.path, dir) - : p.join(cwd.path, dir), - step: step); + step.path != null + ? p.join(cwd.path, step.path, dir) + : p.join(cwd.path, dir), + step: step, + ); } } return; @@ -98,14 +103,16 @@ Future _buildBlueprintStep(Directory cwd, BlueprintStep step) async { if (rename != null) { if (step.path != null) { _rename( - from: p.join(cwd.path, step.path, rename.from), - to: p.join(cwd.path, step.path, rename.to), - step: step); + from: p.join(cwd.path, step.path, rename.from), + to: p.join(cwd.path, step.path, rename.to), + step: step, + ); } else { _rename( - from: p.join(cwd.path, rename.from), - to: p.join(cwd.path, rename.to), - step: step); + from: p.join(cwd.path, rename.from), + to: p.join(cwd.path, rename.to), + step: step, + ); } return; } @@ -114,14 +121,16 @@ Future _buildBlueprintStep(Directory cwd, BlueprintStep step) async { if (cpdir != null) { if (step.path != null) { _cpdir( - from: p.join(cwd.path, step.path, cpdir.from), - to: p.join(cwd.path, step.path, cpdir.to), - step: step); + from: p.join(cwd.path, step.path, cpdir.from), + to: p.join(cwd.path, step.path, cpdir.to), + step: step, + ); } else { _cpdir( - from: p.join(cwd.path, cpdir.from), - to: p.join(cwd.path, cpdir.to), - step: step); + from: p.join(cwd.path, cpdir.from), + to: p.join(cwd.path, cpdir.to), + step: step, + ); } return; } @@ -130,14 +139,16 @@ Future _buildBlueprintStep(Directory cwd, BlueprintStep step) async { if (cp != null) { if (step.path != null) { _cp( - from: p.join(cwd.path, step.path, cp.from), - to: p.join(cwd.path, step.path, cp.to), - step: step); + from: p.join(cwd.path, step.path, cp.from), + to: p.join(cwd.path, step.path, cp.to), + step: step, + ); } else { _cp( - from: p.join(cwd.path, cp.from), - to: p.join(cwd.path, cp.to), - step: step); + from: p.join(cwd.path, cp.from), + to: p.join(cwd.path, cp.to), + step: step, + ); } return; } @@ -180,12 +191,7 @@ Future _buildBlueprintStep(Directory cwd, BlueprintStep step) async { final dart = step.dart; if (dart != null) { - await _runNamedCommand( - command: 'dart', - step: step, - cwd: cwd, - args: dart, - ); + await _runNamedCommand(command: 'dart', step: step, cwd: cwd, args: dart); return; } @@ -215,23 +221,13 @@ Future _buildBlueprintStep(Directory cwd, BlueprintStep step) async { final tar = step.tar; if (tar != null) { - await _runNamedCommand( - command: 'tar', - step: step, - cwd: cwd, - args: tar, - ); + await _runNamedCommand(command: 'tar', step: step, cwd: cwd, args: tar); return; } final sevenZip = step.sevenZip; if (sevenZip != null) { - await _runNamedCommand( - command: '7z', - step: step, - cwd: cwd, - args: sevenZip, - ); + await _runNamedCommand(command: '7z', step: step, cwd: cwd, args: sevenZip); return; } @@ -261,10 +257,7 @@ project = Xcodeproj::Project.open("$xcodeProjectPath") group = project.main_group["Runner"] project.targets.first.add_file_references([group.new_file("$xcodeAddFile")]) project.save -''' - .split('\n') - .map((str) => "-e '$str'") - .join(' '); +'''.split('\n').map((str) => "-e '$str'").join(' '); } else if (iphoneosDeploymentTarget != null && iphoneosDeploymentTarget.isNotEmpty) { script = ''' @@ -273,10 +266,7 @@ project = Xcodeproj::Project.open("$xcodeProjectPath") group = project.main_group["Runner"] project.targets.each { |t| t.build_configurations.each { |c| c.build_settings["IPHONEOS_DEPLOYMENT_TARGET"] ||= $iphoneosDeploymentTarget } } project.save -''' - .split('\n') - .map((str) => "-e '$str'") - .join(' '); +'''.split('\n').map((str) => "-e '$str'").join(' '); } else if (macosxDeploymentTarget != null && macosxDeploymentTarget.isNotEmpty) { script = ''' @@ -285,23 +275,22 @@ project = Xcodeproj::Project.open("$xcodeProjectPath") group = project.main_group["Runner"] project.targets.each { |t| t.build_configurations.each { |c| c.build_settings["MACOSX_DEPLOYMENT_TARGET"] ||= $macosxDeploymentTarget } } project.save -''' - .split('\n') - .map((str) => "-e '$str'") - .join(' '); +'''.split('\n').map((str) => "-e '$str'").join(' '); } else { _logger.severe( - 'xcode-add-file requires xcode-project-path, iphoneos-deployment-target' - ' or macosx-deployment-target: ${step.name}'); + 'xcode-add-file requires xcode-project-path, iphoneos-deployment-target' + ' or macosx-deployment-target: ${step.name}', + ); exit(-1); } await _runNamedCommand( - command: 'ruby', - step: step, - cwd: cwd, - args: script, - exitOnStdErr: false); + command: 'ruby', + step: step, + cwd: cwd, + args: script, + exitOnStdErr: false, + ); return; } // Modifies a macOS MainMenu.xib file to make the titlebar transparent, @@ -329,7 +318,8 @@ project.save final path = step.path; if (path == null) { _logger.severe( - 'patch, base64-contents and replace-contents require a path: ${step.name}'); + 'patch, base64-contents and replace-contents require a path: ${step.name}', + ); exit(-1); } @@ -346,14 +336,19 @@ project.save late final Process process; if (patch != null) { - process = - await Process.start('patch', [fullPath], workingDirectory: cwd.path); + process = await Process.start('patch', [ + fullPath, + ], workingDirectory: cwd.path); } else if (patchC != null) { - process = await Process.start('patch', ['-c', fullPath], - workingDirectory: cwd.path); + process = await Process.start('patch', [ + '-c', + fullPath, + ], workingDirectory: cwd.path); } else if (patchU != null) { - process = await Process.start('patch', ['-u', fullPath], - workingDirectory: cwd.path); + process = await Process.start('patch', [ + '-u', + fullPath, + ], workingDirectory: cwd.path); } process.stderr.transform(utf8.decoder).listen((str) { seenError = true; @@ -378,8 +373,9 @@ project.save final base64Contents = step.base64Contents; if (base64Contents != null) { - File(p.join(cwd.path, path)) - .writeAsBytesSync(base64Decode(base64Contents.split('\n').join(''))); + File( + p.join(cwd.path, path), + ).writeAsBytesSync(base64Decode(base64Contents.split('\n').join(''))); return; } @@ -402,8 +398,9 @@ Future _runNamedCommand({ bool exitOnStdErr = true, }) async { var seenStdErr = false; - final String workingDirectory = p - .canonicalize(step.path != null ? p.join(cwd.path, step.path) : cwd.path); + final String workingDirectory = p.canonicalize( + step.path != null ? p.join(cwd.path, step.path) : cwd.path, + ); final shellSplit = io.shellSplit(args); final process = await Process.start( command, diff --git a/tooling/codelab_rebuild/pubspec.yaml b/tooling/codelab_rebuild/pubspec.yaml index bfda8f3496..01f31448be 100644 --- a/tooling/codelab_rebuild/pubspec.yaml +++ b/tooling/codelab_rebuild/pubspec.yaml @@ -3,7 +3,7 @@ description: Rebuild codelabs from a yaml file. version: 1.0.1 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 dependencies: checked_yaml: ^2.0.1 diff --git a/tooling/codelab_rebuild/test/load_config_test.dart b/tooling/codelab_rebuild/test/load_config_test.dart index 773737e516..d7e46a1ffe 100644 --- a/tooling/codelab_rebuild/test/load_config_test.dart +++ b/tooling/codelab_rebuild/test/load_config_test.dart @@ -59,9 +59,13 @@ steps: expect(blueprint.steps[0].steps[1].isValid, equals(true)); expect(blueprint.steps[0].steps[2].isValid, equals(true)); expect(blueprint.steps[0].steps[2].name, equals('blueprint')); - expect(blueprint.steps[0].steps[2].path, - equals('cupertino_store/analysis_options.yaml')); - expect(blueprint.steps[0].steps[2].replaceContents, equals(''' + expect( + blueprint.steps[0].steps[2].path, + equals('cupertino_store/analysis_options.yaml'), + ); + expect( + blueprint.steps[0].steps[2].replaceContents, + equals(''' # Copyright 2019 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -77,16 +81,16 @@ steps: # limitations under the License. include: ../../analysis_options.yaml -''')); +'''), + ); expect(blueprint.steps[0].steps[3].isValid, equals(true)); expect(blueprint.steps[0].steps[4].isValid, equals(true)); expect(blueprint.steps[0].steps[5].isValid, equals(true)); - expect(blueprint.steps[0].steps[5].name, - equals('Remove the Android, Web, and Desktop runners')); expect( - blueprint.steps[0].steps[5].path, - equals('cupertino_store'), + blueprint.steps[0].steps[5].name, + equals('Remove the Android, Web, and Desktop runners'), ); + expect(blueprint.steps[0].steps[5].path, equals('cupertino_store')); expect( blueprint.steps[0].steps[5].rmdirs, equals(['android', 'linux', 'macos', 'web', 'windows']), diff --git a/webview_flutter/step_03/lib/main.dart b/webview_flutter/step_03/lib/main.dart index 8e94089121..0b070b3ee2 100644 --- a/webview_flutter/step_03/lib/main.dart +++ b/webview_flutter/step_03/lib/main.dart @@ -105,9 +105,7 @@ class _MyHomePageState extends State { // wireframe for each widget. mainAxisAlignment: MainAxisAlignment.center, children: [ - const Text( - 'You have pushed the button this many times:', - ), + const Text('You have pushed the button this many times:'), Text( '$_counter', style: Theme.of(context).textTheme.headlineMedium, diff --git a/webview_flutter/step_03/pubspec.yaml b/webview_flutter/step_03/pubspec.yaml index 3fdc9dcaad..903226b47b 100644 --- a/webview_flutter/step_03/pubspec.yaml +++ b/webview_flutter/step_03/pubspec.yaml @@ -19,7 +19,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev version: 1.0.0+1 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 # Dependencies specify other packages that your package needs in order to work. # To automatically upgrade your package dependencies to the latest versions diff --git a/webview_flutter/step_04/lib/main.dart b/webview_flutter/step_04/lib/main.dart index 7e9208a7c9..50cc1dcebf 100644 --- a/webview_flutter/step_04/lib/main.dart +++ b/webview_flutter/step_04/lib/main.dart @@ -7,10 +7,7 @@ import 'package:webview_flutter/webview_flutter.dart'; void main() { runApp( - MaterialApp( - theme: ThemeData(useMaterial3: true), - home: const WebViewApp(), - ), + MaterialApp(theme: ThemeData(useMaterial3: true), home: const WebViewApp()), ); } @@ -27,21 +24,15 @@ class _WebViewAppState extends State { @override void initState() { super.initState(); - controller = WebViewController() - ..loadRequest( - Uri.parse('https://flutter.dev'), - ); + controller = + WebViewController()..loadRequest(Uri.parse('https://flutter.dev')); } @override Widget build(BuildContext context) { return Scaffold( - appBar: AppBar( - title: const Text('Flutter WebView'), - ), - body: WebViewWidget( - controller: controller, - ), + appBar: AppBar(title: const Text('Flutter WebView')), + body: WebViewWidget(controller: controller), ); } } diff --git a/webview_flutter/step_04/pubspec.yaml b/webview_flutter/step_04/pubspec.yaml index 3fdc9dcaad..903226b47b 100644 --- a/webview_flutter/step_04/pubspec.yaml +++ b/webview_flutter/step_04/pubspec.yaml @@ -19,7 +19,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev version: 1.0.0+1 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 # Dependencies specify other packages that your package needs in order to work. # To automatically upgrade your package dependencies to the latest versions diff --git a/webview_flutter/step_05/lib/main.dart b/webview_flutter/step_05/lib/main.dart index 969980a7c8..1791a60236 100644 --- a/webview_flutter/step_05/lib/main.dart +++ b/webview_flutter/step_05/lib/main.dart @@ -8,10 +8,7 @@ import 'src/web_view_stack.dart'; void main() { runApp( - MaterialApp( - theme: ThemeData(useMaterial3: true), - home: const WebViewApp(), - ), + MaterialApp(theme: ThemeData(useMaterial3: true), home: const WebViewApp()), ); } @@ -26,9 +23,7 @@ class _WebViewAppState extends State { @override Widget build(BuildContext context) { return Scaffold( - appBar: AppBar( - title: const Text('Flutter WebView'), - ), + appBar: AppBar(title: const Text('Flutter WebView')), body: const WebViewStack(), ); } diff --git a/webview_flutter/step_05/lib/src/web_view_stack.dart b/webview_flutter/step_05/lib/src/web_view_stack.dart index 90999968f8..e8b5755e9b 100644 --- a/webview_flutter/step_05/lib/src/web_view_stack.dart +++ b/webview_flutter/step_05/lib/src/web_view_stack.dart @@ -19,40 +19,37 @@ class _WebViewStackState extends State { @override void initState() { super.initState(); - controller = WebViewController() - ..setNavigationDelegate(NavigationDelegate( - onPageStarted: (url) { - setState(() { - loadingPercentage = 0; - }); - }, - onProgress: (progress) { - setState(() { - loadingPercentage = progress; - }); - }, - onPageFinished: (url) { - setState(() { - loadingPercentage = 100; - }); - }, - )) - ..loadRequest( - Uri.parse('https://flutter.dev'), - ); + controller = + WebViewController() + ..setNavigationDelegate( + NavigationDelegate( + onPageStarted: (url) { + setState(() { + loadingPercentage = 0; + }); + }, + onProgress: (progress) { + setState(() { + loadingPercentage = progress; + }); + }, + onPageFinished: (url) { + setState(() { + loadingPercentage = 100; + }); + }, + ), + ) + ..loadRequest(Uri.parse('https://flutter.dev')); } @override Widget build(BuildContext context) { return Stack( children: [ - WebViewWidget( - controller: controller, - ), + WebViewWidget(controller: controller), if (loadingPercentage < 100) - LinearProgressIndicator( - value: loadingPercentage / 100.0, - ), + LinearProgressIndicator(value: loadingPercentage / 100.0), ], ); } diff --git a/webview_flutter/step_05/pubspec.yaml b/webview_flutter/step_05/pubspec.yaml index 3fdc9dcaad..903226b47b 100644 --- a/webview_flutter/step_05/pubspec.yaml +++ b/webview_flutter/step_05/pubspec.yaml @@ -19,7 +19,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev version: 1.0.0+1 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 # Dependencies specify other packages that your package needs in order to work. # To automatically upgrade your package dependencies to the latest versions diff --git a/webview_flutter/step_06/lib/main.dart b/webview_flutter/step_06/lib/main.dart index 789a4df0d6..c6fd759f4d 100644 --- a/webview_flutter/step_06/lib/main.dart +++ b/webview_flutter/step_06/lib/main.dart @@ -10,10 +10,7 @@ import 'src/web_view_stack.dart'; void main() { runApp( - MaterialApp( - theme: ThemeData(useMaterial3: true), - home: const WebViewApp(), - ), + MaterialApp(theme: ThemeData(useMaterial3: true), home: const WebViewApp()), ); } @@ -30,10 +27,8 @@ class _WebViewAppState extends State { @override void initState() { super.initState(); - controller = WebViewController() - ..loadRequest( - Uri.parse('https://flutter.dev'), - ); + controller = + WebViewController()..loadRequest(Uri.parse('https://flutter.dev')); } @override @@ -41,9 +36,7 @@ class _WebViewAppState extends State { return Scaffold( appBar: AppBar( title: const Text('Flutter WebView'), - actions: [ - NavigationControls(controller: controller), - ], + actions: [NavigationControls(controller: controller)], ), body: WebViewStack(controller: controller), ); diff --git a/webview_flutter/step_06/lib/src/web_view_stack.dart b/webview_flutter/step_06/lib/src/web_view_stack.dart index b906d76ec9..9b1563eff6 100644 --- a/webview_flutter/step_06/lib/src/web_view_stack.dart +++ b/webview_flutter/step_06/lib/src/web_view_stack.dart @@ -45,13 +45,9 @@ class _WebViewStackState extends State { Widget build(BuildContext context) { return Stack( children: [ - WebViewWidget( - controller: widget.controller, - ), + WebViewWidget(controller: widget.controller), if (loadingPercentage < 100) - LinearProgressIndicator( - value: loadingPercentage / 100.0, - ), + LinearProgressIndicator(value: loadingPercentage / 100.0), ], ); } diff --git a/webview_flutter/step_06/pubspec.yaml b/webview_flutter/step_06/pubspec.yaml index 3fdc9dcaad..903226b47b 100644 --- a/webview_flutter/step_06/pubspec.yaml +++ b/webview_flutter/step_06/pubspec.yaml @@ -19,7 +19,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev version: 1.0.0+1 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 # Dependencies specify other packages that your package needs in order to work. # To automatically upgrade your package dependencies to the latest versions diff --git a/webview_flutter/step_07/lib/main.dart b/webview_flutter/step_07/lib/main.dart index 789a4df0d6..c6fd759f4d 100644 --- a/webview_flutter/step_07/lib/main.dart +++ b/webview_flutter/step_07/lib/main.dart @@ -10,10 +10,7 @@ import 'src/web_view_stack.dart'; void main() { runApp( - MaterialApp( - theme: ThemeData(useMaterial3: true), - home: const WebViewApp(), - ), + MaterialApp(theme: ThemeData(useMaterial3: true), home: const WebViewApp()), ); } @@ -30,10 +27,8 @@ class _WebViewAppState extends State { @override void initState() { super.initState(); - controller = WebViewController() - ..loadRequest( - Uri.parse('https://flutter.dev'), - ); + controller = + WebViewController()..loadRequest(Uri.parse('https://flutter.dev')); } @override @@ -41,9 +36,7 @@ class _WebViewAppState extends State { return Scaffold( appBar: AppBar( title: const Text('Flutter WebView'), - actions: [ - NavigationControls(controller: controller), - ], + actions: [NavigationControls(controller: controller)], ), body: WebViewStack(controller: controller), ); diff --git a/webview_flutter/step_07/lib/src/web_view_stack.dart b/webview_flutter/step_07/lib/src/web_view_stack.dart index af453976f0..438415539b 100644 --- a/webview_flutter/step_07/lib/src/web_view_stack.dart +++ b/webview_flutter/step_07/lib/src/web_view_stack.dart @@ -41,11 +41,7 @@ class _WebViewStackState extends State { final host = Uri.parse(navigation.url).host; if (host.contains('youtube.com')) { ScaffoldMessenger.of(context).showSnackBar( - SnackBar( - content: Text( - 'Blocking navigation to $host', - ), - ), + SnackBar(content: Text('Blocking navigation to $host')), ); return NavigationDecision.prevent; } @@ -59,13 +55,9 @@ class _WebViewStackState extends State { Widget build(BuildContext context) { return Stack( children: [ - WebViewWidget( - controller: widget.controller, - ), + WebViewWidget(controller: widget.controller), if (loadingPercentage < 100) - LinearProgressIndicator( - value: loadingPercentage / 100.0, - ), + LinearProgressIndicator(value: loadingPercentage / 100.0), ], ); } diff --git a/webview_flutter/step_07/pubspec.yaml b/webview_flutter/step_07/pubspec.yaml index 3fdc9dcaad..903226b47b 100644 --- a/webview_flutter/step_07/pubspec.yaml +++ b/webview_flutter/step_07/pubspec.yaml @@ -19,7 +19,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev version: 1.0.0+1 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 # Dependencies specify other packages that your package needs in order to work. # To automatically upgrade your package dependencies to the latest versions diff --git a/webview_flutter/step_08/lib/main.dart b/webview_flutter/step_08/lib/main.dart index ef3bfd2f56..cddee402b9 100644 --- a/webview_flutter/step_08/lib/main.dart +++ b/webview_flutter/step_08/lib/main.dart @@ -11,10 +11,7 @@ import 'src/web_view_stack.dart'; void main() { runApp( - MaterialApp( - theme: ThemeData(useMaterial3: true), - home: const WebViewApp(), - ), + MaterialApp(theme: ThemeData(useMaterial3: true), home: const WebViewApp()), ); } @@ -31,10 +28,8 @@ class _WebViewAppState extends State { @override void initState() { super.initState(); - controller = WebViewController() - ..loadRequest( - Uri.parse('https://flutter.dev'), - ); + controller = + WebViewController()..loadRequest(Uri.parse('https://flutter.dev')); } @override diff --git a/webview_flutter/step_08/lib/src/menu.dart b/webview_flutter/step_08/lib/src/menu.dart index 0373d6fe65..08e90e9ace 100644 --- a/webview_flutter/step_08/lib/src/menu.dart +++ b/webview_flutter/step_08/lib/src/menu.dart @@ -5,9 +5,7 @@ import 'package:flutter/material.dart'; import 'package:webview_flutter/webview_flutter.dart'; -enum _MenuOptions { - navigationDelegate, -} +enum _MenuOptions { navigationDelegate } class Menu extends StatelessWidget { const Menu({required this.controller, super.key}); @@ -23,12 +21,13 @@ class Menu extends StatelessWidget { await controller.loadRequest(Uri.parse('https://youtube.com')); } }, - itemBuilder: (context) => [ - const PopupMenuItem<_MenuOptions>( - value: _MenuOptions.navigationDelegate, - child: Text('Navigate to YouTube'), - ), - ], + itemBuilder: + (context) => [ + const PopupMenuItem<_MenuOptions>( + value: _MenuOptions.navigationDelegate, + child: Text('Navigate to YouTube'), + ), + ], ); } } diff --git a/webview_flutter/step_08/lib/src/web_view_stack.dart b/webview_flutter/step_08/lib/src/web_view_stack.dart index af453976f0..438415539b 100644 --- a/webview_flutter/step_08/lib/src/web_view_stack.dart +++ b/webview_flutter/step_08/lib/src/web_view_stack.dart @@ -41,11 +41,7 @@ class _WebViewStackState extends State { final host = Uri.parse(navigation.url).host; if (host.contains('youtube.com')) { ScaffoldMessenger.of(context).showSnackBar( - SnackBar( - content: Text( - 'Blocking navigation to $host', - ), - ), + SnackBar(content: Text('Blocking navigation to $host')), ); return NavigationDecision.prevent; } @@ -59,13 +55,9 @@ class _WebViewStackState extends State { Widget build(BuildContext context) { return Stack( children: [ - WebViewWidget( - controller: widget.controller, - ), + WebViewWidget(controller: widget.controller), if (loadingPercentage < 100) - LinearProgressIndicator( - value: loadingPercentage / 100.0, - ), + LinearProgressIndicator(value: loadingPercentage / 100.0), ], ); } diff --git a/webview_flutter/step_08/pubspec.yaml b/webview_flutter/step_08/pubspec.yaml index 3fdc9dcaad..903226b47b 100644 --- a/webview_flutter/step_08/pubspec.yaml +++ b/webview_flutter/step_08/pubspec.yaml @@ -19,7 +19,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev version: 1.0.0+1 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 # Dependencies specify other packages that your package needs in order to work. # To automatically upgrade your package dependencies to the latest versions diff --git a/webview_flutter/step_09/lib/main.dart b/webview_flutter/step_09/lib/main.dart index ef3bfd2f56..cddee402b9 100644 --- a/webview_flutter/step_09/lib/main.dart +++ b/webview_flutter/step_09/lib/main.dart @@ -11,10 +11,7 @@ import 'src/web_view_stack.dart'; void main() { runApp( - MaterialApp( - theme: ThemeData(useMaterial3: true), - home: const WebViewApp(), - ), + MaterialApp(theme: ThemeData(useMaterial3: true), home: const WebViewApp()), ); } @@ -31,10 +28,8 @@ class _WebViewAppState extends State { @override void initState() { super.initState(); - controller = WebViewController() - ..loadRequest( - Uri.parse('https://flutter.dev'), - ); + controller = + WebViewController()..loadRequest(Uri.parse('https://flutter.dev')); } @override diff --git a/webview_flutter/step_09/lib/src/menu.dart b/webview_flutter/step_09/lib/src/menu.dart index e805721e51..676fd04601 100644 --- a/webview_flutter/step_09/lib/src/menu.dart +++ b/webview_flutter/step_09/lib/src/menu.dart @@ -5,10 +5,7 @@ import 'package:flutter/material.dart'; import 'package:webview_flutter/webview_flutter.dart'; -enum _MenuOptions { - navigationDelegate, - userAgent, -} +enum _MenuOptions { navigationDelegate, userAgent } class Menu extends StatefulWidget { const Menu({required this.controller, super.key}); @@ -26,27 +23,29 @@ class _MenuState extends State { onSelected: (value) async { switch (value) { case _MenuOptions.navigationDelegate: - await widget.controller - .loadRequest(Uri.parse('https://youtube.com')); + await widget.controller.loadRequest( + Uri.parse('https://youtube.com'), + ); case _MenuOptions.userAgent: final userAgent = await widget.controller .runJavaScriptReturningResult('navigator.userAgent'); if (!context.mounted) return; - ScaffoldMessenger.of(context).showSnackBar(SnackBar( - content: Text('$userAgent'), - )); + ScaffoldMessenger.of( + context, + ).showSnackBar(SnackBar(content: Text('$userAgent'))); } }, - itemBuilder: (context) => [ - const PopupMenuItem<_MenuOptions>( - value: _MenuOptions.navigationDelegate, - child: Text('Navigate to YouTube'), - ), - const PopupMenuItem<_MenuOptions>( - value: _MenuOptions.userAgent, - child: Text('Show user-agent'), - ), - ], + itemBuilder: + (context) => [ + const PopupMenuItem<_MenuOptions>( + value: _MenuOptions.navigationDelegate, + child: Text('Navigate to YouTube'), + ), + const PopupMenuItem<_MenuOptions>( + value: _MenuOptions.userAgent, + child: Text('Show user-agent'), + ), + ], ); } } diff --git a/webview_flutter/step_09/lib/src/web_view_stack.dart b/webview_flutter/step_09/lib/src/web_view_stack.dart index 107f626284..9c7556772a 100644 --- a/webview_flutter/step_09/lib/src/web_view_stack.dart +++ b/webview_flutter/step_09/lib/src/web_view_stack.dart @@ -42,11 +42,7 @@ class _WebViewStackState extends State { final host = Uri.parse(navigation.url).host; if (host.contains('youtube.com')) { ScaffoldMessenger.of(context).showSnackBar( - SnackBar( - content: Text( - 'Blocking navigation to $host', - ), - ), + SnackBar(content: Text('Blocking navigation to $host')), ); return NavigationDecision.prevent; } @@ -61,13 +57,9 @@ class _WebViewStackState extends State { Widget build(BuildContext context) { return Stack( children: [ - WebViewWidget( - controller: widget.controller, - ), + WebViewWidget(controller: widget.controller), if (loadingPercentage < 100) - LinearProgressIndicator( - value: loadingPercentage / 100.0, - ), + LinearProgressIndicator(value: loadingPercentage / 100.0), ], ); } diff --git a/webview_flutter/step_09/pubspec.yaml b/webview_flutter/step_09/pubspec.yaml index 3fdc9dcaad..903226b47b 100644 --- a/webview_flutter/step_09/pubspec.yaml +++ b/webview_flutter/step_09/pubspec.yaml @@ -19,7 +19,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev version: 1.0.0+1 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 # Dependencies specify other packages that your package needs in order to work. # To automatically upgrade your package dependencies to the latest versions diff --git a/webview_flutter/step_10/lib/main.dart b/webview_flutter/step_10/lib/main.dart index ef3bfd2f56..cddee402b9 100644 --- a/webview_flutter/step_10/lib/main.dart +++ b/webview_flutter/step_10/lib/main.dart @@ -11,10 +11,7 @@ import 'src/web_view_stack.dart'; void main() { runApp( - MaterialApp( - theme: ThemeData(useMaterial3: true), - home: const WebViewApp(), - ), + MaterialApp(theme: ThemeData(useMaterial3: true), home: const WebViewApp()), ); } @@ -31,10 +28,8 @@ class _WebViewAppState extends State { @override void initState() { super.initState(); - controller = WebViewController() - ..loadRequest( - Uri.parse('https://flutter.dev'), - ); + controller = + WebViewController()..loadRequest(Uri.parse('https://flutter.dev')); } @override diff --git a/webview_flutter/step_10/lib/src/menu.dart b/webview_flutter/step_10/lib/src/menu.dart index 8fe93797ce..dbb41ed88d 100644 --- a/webview_flutter/step_10/lib/src/menu.dart +++ b/webview_flutter/step_10/lib/src/menu.dart @@ -5,11 +5,7 @@ import 'package:flutter/material.dart'; import 'package:webview_flutter/webview_flutter.dart'; -enum _MenuOptions { - navigationDelegate, - userAgent, - javascriptChannel, -} +enum _MenuOptions { navigationDelegate, userAgent, javascriptChannel } class Menu extends StatefulWidget { const Menu({required this.controller, super.key}); @@ -27,15 +23,16 @@ class _MenuState extends State { onSelected: (value) async { switch (value) { case _MenuOptions.navigationDelegate: - await widget.controller - .loadRequest(Uri.parse('https://youtube.com')); + await widget.controller.loadRequest( + Uri.parse('https://youtube.com'), + ); case _MenuOptions.userAgent: final userAgent = await widget.controller .runJavaScriptReturningResult('navigator.userAgent'); if (!context.mounted) return; - ScaffoldMessenger.of(context).showSnackBar(SnackBar( - content: Text('$userAgent'), - )); + ScaffoldMessenger.of( + context, + ).showSnackBar(SnackBar(content: Text('$userAgent'))); case _MenuOptions.javascriptChannel: await widget.controller.runJavaScript(''' var req = new XMLHttpRequest(); @@ -51,20 +48,21 @@ req.onload = function() { req.send();'''); } }, - itemBuilder: (context) => [ - const PopupMenuItem<_MenuOptions>( - value: _MenuOptions.navigationDelegate, - child: Text('Navigate to YouTube'), - ), - const PopupMenuItem<_MenuOptions>( - value: _MenuOptions.userAgent, - child: Text('Show user-agent'), - ), - const PopupMenuItem<_MenuOptions>( - value: _MenuOptions.javascriptChannel, - child: Text('Lookup IP Address'), - ), - ], + itemBuilder: + (context) => [ + const PopupMenuItem<_MenuOptions>( + value: _MenuOptions.navigationDelegate, + child: Text('Navigate to YouTube'), + ), + const PopupMenuItem<_MenuOptions>( + value: _MenuOptions.userAgent, + child: Text('Show user-agent'), + ), + const PopupMenuItem<_MenuOptions>( + value: _MenuOptions.javascriptChannel, + child: Text('Lookup IP Address'), + ), + ], ); } } diff --git a/webview_flutter/step_10/lib/src/web_view_stack.dart b/webview_flutter/step_10/lib/src/web_view_stack.dart index dba36955e9..42a5508cc8 100644 --- a/webview_flutter/step_10/lib/src/web_view_stack.dart +++ b/webview_flutter/step_10/lib/src/web_view_stack.dart @@ -42,11 +42,7 @@ class _WebViewStackState extends State { final host = Uri.parse(navigation.url).host; if (host.contains('youtube.com')) { ScaffoldMessenger.of(context).showSnackBar( - SnackBar( - content: Text( - 'Blocking navigation to $host', - ), - ), + SnackBar(content: Text('Blocking navigation to $host')), ); return NavigationDecision.prevent; } @@ -58,8 +54,9 @@ class _WebViewStackState extends State { ..addJavaScriptChannel( 'SnackBar', onMessageReceived: (message) { - ScaffoldMessenger.of(context) - .showSnackBar(SnackBar(content: Text(message.message))); + ScaffoldMessenger.of( + context, + ).showSnackBar(SnackBar(content: Text(message.message))); }, ); } @@ -68,13 +65,9 @@ class _WebViewStackState extends State { Widget build(BuildContext context) { return Stack( children: [ - WebViewWidget( - controller: widget.controller, - ), + WebViewWidget(controller: widget.controller), if (loadingPercentage < 100) - LinearProgressIndicator( - value: loadingPercentage / 100.0, - ), + LinearProgressIndicator(value: loadingPercentage / 100.0), ], ); } diff --git a/webview_flutter/step_10/pubspec.yaml b/webview_flutter/step_10/pubspec.yaml index 3fdc9dcaad..903226b47b 100644 --- a/webview_flutter/step_10/pubspec.yaml +++ b/webview_flutter/step_10/pubspec.yaml @@ -19,7 +19,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev version: 1.0.0+1 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 # Dependencies specify other packages that your package needs in order to work. # To automatically upgrade your package dependencies to the latest versions diff --git a/webview_flutter/step_11/lib/main.dart b/webview_flutter/step_11/lib/main.dart index ef3bfd2f56..cddee402b9 100644 --- a/webview_flutter/step_11/lib/main.dart +++ b/webview_flutter/step_11/lib/main.dart @@ -11,10 +11,7 @@ import 'src/web_view_stack.dart'; void main() { runApp( - MaterialApp( - theme: ThemeData(useMaterial3: true), - home: const WebViewApp(), - ), + MaterialApp(theme: ThemeData(useMaterial3: true), home: const WebViewApp()), ); } @@ -31,10 +28,8 @@ class _WebViewAppState extends State { @override void initState() { super.initState(); - controller = WebViewController() - ..loadRequest( - Uri.parse('https://flutter.dev'), - ); + controller = + WebViewController()..loadRequest(Uri.parse('https://flutter.dev')); } @override diff --git a/webview_flutter/step_11/lib/src/menu.dart b/webview_flutter/step_11/lib/src/menu.dart index 238b96bf0d..83bfa0bd69 100644 --- a/webview_flutter/step_11/lib/src/menu.dart +++ b/webview_flutter/step_11/lib/src/menu.dart @@ -34,15 +34,16 @@ class _MenuState extends State { onSelected: (value) async { switch (value) { case _MenuOptions.navigationDelegate: - await widget.controller - .loadRequest(Uri.parse('https://youtube.com')); + await widget.controller.loadRequest( + Uri.parse('https://youtube.com'), + ); case _MenuOptions.userAgent: final userAgent = await widget.controller .runJavaScriptReturningResult('navigator.userAgent'); if (!context.mounted) return; - ScaffoldMessenger.of(context).showSnackBar(SnackBar( - content: Text('$userAgent'), - )); + ScaffoldMessenger.of( + context, + ).showSnackBar(SnackBar(content: Text('$userAgent'))); case _MenuOptions.javascriptChannel: await widget.controller.runJavaScript(''' var req = new XMLHttpRequest(); @@ -68,46 +69,48 @@ req.send();'''); await _onRemoveCookie(widget.controller); } }, - itemBuilder: (context) => [ - const PopupMenuItem<_MenuOptions>( - value: _MenuOptions.navigationDelegate, - child: Text('Navigate to YouTube'), - ), - const PopupMenuItem<_MenuOptions>( - value: _MenuOptions.userAgent, - child: Text('Show user-agent'), - ), - const PopupMenuItem<_MenuOptions>( - value: _MenuOptions.javascriptChannel, - child: Text('Lookup IP Address'), - ), - const PopupMenuItem<_MenuOptions>( - value: _MenuOptions.clearCookies, - child: Text('Clear cookies'), - ), - const PopupMenuItem<_MenuOptions>( - value: _MenuOptions.listCookies, - child: Text('List cookies'), - ), - const PopupMenuItem<_MenuOptions>( - value: _MenuOptions.addCookie, - child: Text('Add cookie'), - ), - const PopupMenuItem<_MenuOptions>( - value: _MenuOptions.setCookie, - child: Text('Set cookie'), - ), - const PopupMenuItem<_MenuOptions>( - value: _MenuOptions.removeCookie, - child: Text('Remove cookie'), - ), - ], + itemBuilder: + (context) => [ + const PopupMenuItem<_MenuOptions>( + value: _MenuOptions.navigationDelegate, + child: Text('Navigate to YouTube'), + ), + const PopupMenuItem<_MenuOptions>( + value: _MenuOptions.userAgent, + child: Text('Show user-agent'), + ), + const PopupMenuItem<_MenuOptions>( + value: _MenuOptions.javascriptChannel, + child: Text('Lookup IP Address'), + ), + const PopupMenuItem<_MenuOptions>( + value: _MenuOptions.clearCookies, + child: Text('Clear cookies'), + ), + const PopupMenuItem<_MenuOptions>( + value: _MenuOptions.listCookies, + child: Text('List cookies'), + ), + const PopupMenuItem<_MenuOptions>( + value: _MenuOptions.addCookie, + child: Text('Add cookie'), + ), + const PopupMenuItem<_MenuOptions>( + value: _MenuOptions.setCookie, + child: Text('Set cookie'), + ), + const PopupMenuItem<_MenuOptions>( + value: _MenuOptions.removeCookie, + child: Text('Remove cookie'), + ), + ], ); } Future _onListCookies(WebViewController controller) async { - final String cookies = await controller - .runJavaScriptReturningResult('document.cookie') as String; + final String cookies = + await controller.runJavaScriptReturningResult('document.cookie') + as String; if (!mounted) return; ScaffoldMessenger.of(context).showSnackBar( SnackBar( @@ -123,11 +126,9 @@ req.send();'''); message = 'There were no cookies to clear.'; } if (!mounted) return; - ScaffoldMessenger.of(context).showSnackBar( - SnackBar( - content: Text(message), - ), - ); + ScaffoldMessenger.of( + context, + ).showSnackBar(SnackBar(content: Text(message))); } Future _onAddCookie(WebViewController controller) async { @@ -135,11 +136,9 @@ req.send();'''); date.setTime(date.getTime()+(30*24*60*60*1000)); document.cookie = "FirstName=John; expires=" + date.toGMTString();'''); if (!mounted) return; - ScaffoldMessenger.of(context).showSnackBar( - const SnackBar( - content: Text('Custom cookie added.'), - ), - ); + ScaffoldMessenger.of( + context, + ).showSnackBar(const SnackBar(content: Text('Custom cookie added.'))); } Future _onSetCookie(WebViewController controller) async { @@ -147,21 +146,18 @@ req.send();'''); const WebViewCookie(name: 'foo', value: 'bar', domain: 'flutter.dev'), ); if (!mounted) return; - ScaffoldMessenger.of(context).showSnackBar( - const SnackBar( - content: Text('Custom cookie is set.'), - ), - ); + ScaffoldMessenger.of( + context, + ).showSnackBar(const SnackBar(content: Text('Custom cookie is set.'))); } Future _onRemoveCookie(WebViewController controller) async { await controller.runJavaScript( - 'document.cookie="FirstName=John; expires=Thu, 01 Jan 1970 00:00:00 UTC" '); - if (!mounted) return; - ScaffoldMessenger.of(context).showSnackBar( - const SnackBar( - content: Text('Custom cookie removed.'), - ), + 'document.cookie="FirstName=John; expires=Thu, 01 Jan 1970 00:00:00 UTC" ', ); + if (!mounted) return; + ScaffoldMessenger.of( + context, + ).showSnackBar(const SnackBar(content: Text('Custom cookie removed.'))); } } diff --git a/webview_flutter/step_11/lib/src/web_view_stack.dart b/webview_flutter/step_11/lib/src/web_view_stack.dart index dba36955e9..42a5508cc8 100644 --- a/webview_flutter/step_11/lib/src/web_view_stack.dart +++ b/webview_flutter/step_11/lib/src/web_view_stack.dart @@ -42,11 +42,7 @@ class _WebViewStackState extends State { final host = Uri.parse(navigation.url).host; if (host.contains('youtube.com')) { ScaffoldMessenger.of(context).showSnackBar( - SnackBar( - content: Text( - 'Blocking navigation to $host', - ), - ), + SnackBar(content: Text('Blocking navigation to $host')), ); return NavigationDecision.prevent; } @@ -58,8 +54,9 @@ class _WebViewStackState extends State { ..addJavaScriptChannel( 'SnackBar', onMessageReceived: (message) { - ScaffoldMessenger.of(context) - .showSnackBar(SnackBar(content: Text(message.message))); + ScaffoldMessenger.of( + context, + ).showSnackBar(SnackBar(content: Text(message.message))); }, ); } @@ -68,13 +65,9 @@ class _WebViewStackState extends State { Widget build(BuildContext context) { return Stack( children: [ - WebViewWidget( - controller: widget.controller, - ), + WebViewWidget(controller: widget.controller), if (loadingPercentage < 100) - LinearProgressIndicator( - value: loadingPercentage / 100.0, - ), + LinearProgressIndicator(value: loadingPercentage / 100.0), ], ); } diff --git a/webview_flutter/step_11/pubspec.yaml b/webview_flutter/step_11/pubspec.yaml index 3fdc9dcaad..903226b47b 100644 --- a/webview_flutter/step_11/pubspec.yaml +++ b/webview_flutter/step_11/pubspec.yaml @@ -19,7 +19,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev version: 1.0.0+1 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 # Dependencies specify other packages that your package needs in order to work. # To automatically upgrade your package dependencies to the latest versions diff --git a/webview_flutter/step_12/lib/main.dart b/webview_flutter/step_12/lib/main.dart index ef3bfd2f56..cddee402b9 100644 --- a/webview_flutter/step_12/lib/main.dart +++ b/webview_flutter/step_12/lib/main.dart @@ -11,10 +11,7 @@ import 'src/web_view_stack.dart'; void main() { runApp( - MaterialApp( - theme: ThemeData(useMaterial3: true), - home: const WebViewApp(), - ), + MaterialApp(theme: ThemeData(useMaterial3: true), home: const WebViewApp()), ); } @@ -31,10 +28,8 @@ class _WebViewAppState extends State { @override void initState() { super.initState(); - controller = WebViewController() - ..loadRequest( - Uri.parse('https://flutter.dev'), - ); + controller = + WebViewController()..loadRequest(Uri.parse('https://flutter.dev')); } @override diff --git a/webview_flutter/step_12/lib/src/menu.dart b/webview_flutter/step_12/lib/src/menu.dart index f3d076f4a5..7023f07681 100644 --- a/webview_flutter/step_12/lib/src/menu.dart +++ b/webview_flutter/step_12/lib/src/menu.dart @@ -58,15 +58,16 @@ class _MenuState extends State { onSelected: (value) async { switch (value) { case _MenuOptions.navigationDelegate: - await widget.controller - .loadRequest(Uri.parse('https://youtube.com')); + await widget.controller.loadRequest( + Uri.parse('https://youtube.com'), + ); case _MenuOptions.userAgent: final userAgent = await widget.controller .runJavaScriptReturningResult('navigator.userAgent'); if (!context.mounted) return; - ScaffoldMessenger.of(context).showSnackBar(SnackBar( - content: Text('$userAgent'), - )); + ScaffoldMessenger.of( + context, + ).showSnackBar(SnackBar(content: Text('$userAgent'))); case _MenuOptions.javascriptChannel: await widget.controller.runJavaScript(''' var req = new XMLHttpRequest(); @@ -101,58 +102,60 @@ req.send();'''); await _onLoadHtmlStringExample(widget.controller, context); } }, - itemBuilder: (context) => [ - const PopupMenuItem<_MenuOptions>( - value: _MenuOptions.navigationDelegate, - child: Text('Navigate to YouTube'), - ), - const PopupMenuItem<_MenuOptions>( - value: _MenuOptions.userAgent, - child: Text('Show user-agent'), - ), - const PopupMenuItem<_MenuOptions>( - value: _MenuOptions.javascriptChannel, - child: Text('Lookup IP Address'), - ), - const PopupMenuItem<_MenuOptions>( - value: _MenuOptions.clearCookies, - child: Text('Clear cookies'), - ), - const PopupMenuItem<_MenuOptions>( - value: _MenuOptions.listCookies, - child: Text('List cookies'), - ), - const PopupMenuItem<_MenuOptions>( - value: _MenuOptions.addCookie, - child: Text('Add cookie'), - ), - const PopupMenuItem<_MenuOptions>( - value: _MenuOptions.setCookie, - child: Text('Set cookie'), - ), - const PopupMenuItem<_MenuOptions>( - value: _MenuOptions.removeCookie, - child: Text('Remove cookie'), - ), - const PopupMenuItem<_MenuOptions>( - value: _MenuOptions.loadFlutterAsset, - child: Text('Load Flutter Asset'), - ), - const PopupMenuItem<_MenuOptions>( - value: _MenuOptions.loadHtmlString, - child: Text('Load HTML string'), - ), - const PopupMenuItem<_MenuOptions>( - value: _MenuOptions.loadLocalFile, - child: Text('Load local file'), - ), - ], + itemBuilder: + (context) => [ + const PopupMenuItem<_MenuOptions>( + value: _MenuOptions.navigationDelegate, + child: Text('Navigate to YouTube'), + ), + const PopupMenuItem<_MenuOptions>( + value: _MenuOptions.userAgent, + child: Text('Show user-agent'), + ), + const PopupMenuItem<_MenuOptions>( + value: _MenuOptions.javascriptChannel, + child: Text('Lookup IP Address'), + ), + const PopupMenuItem<_MenuOptions>( + value: _MenuOptions.clearCookies, + child: Text('Clear cookies'), + ), + const PopupMenuItem<_MenuOptions>( + value: _MenuOptions.listCookies, + child: Text('List cookies'), + ), + const PopupMenuItem<_MenuOptions>( + value: _MenuOptions.addCookie, + child: Text('Add cookie'), + ), + const PopupMenuItem<_MenuOptions>( + value: _MenuOptions.setCookie, + child: Text('Set cookie'), + ), + const PopupMenuItem<_MenuOptions>( + value: _MenuOptions.removeCookie, + child: Text('Remove cookie'), + ), + const PopupMenuItem<_MenuOptions>( + value: _MenuOptions.loadFlutterAsset, + child: Text('Load Flutter Asset'), + ), + const PopupMenuItem<_MenuOptions>( + value: _MenuOptions.loadHtmlString, + child: Text('Load HTML string'), + ), + const PopupMenuItem<_MenuOptions>( + value: _MenuOptions.loadLocalFile, + child: Text('Load local file'), + ), + ], ); } Future _onListCookies(WebViewController controller) async { - final String cookies = await controller - .runJavaScriptReturningResult('document.cookie') as String; + final String cookies = + await controller.runJavaScriptReturningResult('document.cookie') + as String; if (!mounted) return; ScaffoldMessenger.of(context).showSnackBar( SnackBar( @@ -168,11 +171,9 @@ req.send();'''); message = 'There were no cookies to clear.'; } if (!mounted) return; - ScaffoldMessenger.of(context).showSnackBar( - SnackBar( - content: Text(message), - ), - ); + ScaffoldMessenger.of( + context, + ).showSnackBar(SnackBar(content: Text(message))); } Future _onAddCookie(WebViewController controller) async { @@ -180,11 +181,9 @@ req.send();'''); date.setTime(date.getTime()+(30*24*60*60*1000)); document.cookie = "FirstName=John; expires=" + date.toGMTString();'''); if (!mounted) return; - ScaffoldMessenger.of(context).showSnackBar( - const SnackBar( - content: Text('Custom cookie added.'), - ), - ); + ScaffoldMessenger.of( + context, + ).showSnackBar(const SnackBar(content: Text('Custom cookie added.'))); } Future _onSetCookie(WebViewController controller) async { @@ -192,31 +191,32 @@ req.send();'''); const WebViewCookie(name: 'foo', value: 'bar', domain: 'flutter.dev'), ); if (!mounted) return; - ScaffoldMessenger.of(context).showSnackBar( - const SnackBar( - content: Text('Custom cookie is set.'), - ), - ); + ScaffoldMessenger.of( + context, + ).showSnackBar(const SnackBar(content: Text('Custom cookie is set.'))); } Future _onRemoveCookie(WebViewController controller) async { await controller.runJavaScript( - 'document.cookie="FirstName=John; expires=Thu, 01 Jan 1970 00:00:00 UTC" '); - if (!mounted) return; - ScaffoldMessenger.of(context).showSnackBar( - const SnackBar( - content: Text('Custom cookie removed.'), - ), + 'document.cookie="FirstName=John; expires=Thu, 01 Jan 1970 00:00:00 UTC" ', ); + if (!mounted) return; + ScaffoldMessenger.of( + context, + ).showSnackBar(const SnackBar(content: Text('Custom cookie removed.'))); } Future _onLoadFlutterAssetExample( - WebViewController controller, BuildContext context) async { + WebViewController controller, + BuildContext context, + ) async { await controller.loadFlutterAsset('assets/www/index.html'); } Future _onLoadLocalFileExample( - WebViewController controller, BuildContext context) async { + WebViewController controller, + BuildContext context, + ) async { final String pathToIndex = await _prepareLocalFile(); await controller.loadFile(pathToIndex); @@ -233,7 +233,9 @@ req.send();'''); } Future _onLoadHtmlStringExample( - WebViewController controller, BuildContext context) async { + WebViewController controller, + BuildContext context, + ) async { await controller.loadHtmlString(kExamplePage); } } diff --git a/webview_flutter/step_12/lib/src/web_view_stack.dart b/webview_flutter/step_12/lib/src/web_view_stack.dart index dba36955e9..42a5508cc8 100644 --- a/webview_flutter/step_12/lib/src/web_view_stack.dart +++ b/webview_flutter/step_12/lib/src/web_view_stack.dart @@ -42,11 +42,7 @@ class _WebViewStackState extends State { final host = Uri.parse(navigation.url).host; if (host.contains('youtube.com')) { ScaffoldMessenger.of(context).showSnackBar( - SnackBar( - content: Text( - 'Blocking navigation to $host', - ), - ), + SnackBar(content: Text('Blocking navigation to $host')), ); return NavigationDecision.prevent; } @@ -58,8 +54,9 @@ class _WebViewStackState extends State { ..addJavaScriptChannel( 'SnackBar', onMessageReceived: (message) { - ScaffoldMessenger.of(context) - .showSnackBar(SnackBar(content: Text(message.message))); + ScaffoldMessenger.of( + context, + ).showSnackBar(SnackBar(content: Text(message.message))); }, ); } @@ -68,13 +65,9 @@ class _WebViewStackState extends State { Widget build(BuildContext context) { return Stack( children: [ - WebViewWidget( - controller: widget.controller, - ), + WebViewWidget(controller: widget.controller), if (loadingPercentage < 100) - LinearProgressIndicator( - value: loadingPercentage / 100.0, - ), + LinearProgressIndicator(value: loadingPercentage / 100.0), ], ); } diff --git a/webview_flutter/step_12/pubspec.yaml b/webview_flutter/step_12/pubspec.yaml index c6d65a6ce1..963a9bd892 100644 --- a/webview_flutter/step_12/pubspec.yaml +++ b/webview_flutter/step_12/pubspec.yaml @@ -19,7 +19,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev version: 1.0.0+1 environment: - sdk: ^3.6.0-0 + sdk: ^3.7.0-0 # Dependencies specify other packages that your package needs in order to work. # To automatically upgrade your package dependencies to the latest versions From c913cc4733d00759b95a917e2c9350f63172729f Mon Sep 17 00:00:00 2001 From: Brett Morgan Date: Wed, 13 Nov 2024 16:33:44 +1100 Subject: [PATCH 054/108] Update `adaptive_app` --- adaptive_app/codelab_rebuild.yaml | 464 +++++++++--------- .../app/{build.gradle => build.gradle.kts} | 10 +- adaptive_app/step_03/android/build.gradle | 18 - adaptive_app/step_03/android/build.gradle.kts | 21 + .../step_03/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- adaptive_app/step_03/android/settings.gradle | 25 - .../step_03/android/settings.gradle.kts | 25 + .../android/app/build.gradle.kts} | 10 +- adaptive_app/step_04/android/build.gradle | 18 - adaptive_app/step_04/android/build.gradle.kts | 21 + .../step_04/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- adaptive_app/step_04/android/settings.gradle | 25 - .../step_04/android/settings.gradle.kts | 25 + adaptive_app/step_04/ios/Podfile | 1 - .../ios/Runner.xcodeproj/project.pbxproj | 130 ++--- adaptive_app/step_04/macos/Podfile | 1 - .../macos/Runner.xcodeproj/project.pbxproj | 94 ++-- adaptive_app/step_04/pubspec.yaml | 2 +- .../android/app/build.gradle.kts} | 10 +- adaptive_app/step_05/android/build.gradle | 18 - adaptive_app/step_05/android/build.gradle.kts | 21 + .../step_05/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- adaptive_app/step_05/android/settings.gradle | 25 - .../step_05/android/settings.gradle.kts | 25 + adaptive_app/step_05/ios/Podfile | 1 - .../ios/Runner.xcodeproj/project.pbxproj | 130 ++--- adaptive_app/step_05/macos/Podfile | 1 - .../macos/Runner.xcodeproj/project.pbxproj | 94 ++-- adaptive_app/step_05/pubspec.yaml | 2 +- .../android/app/build.gradle.kts} | 10 +- adaptive_app/step_06/android/build.gradle | 18 - adaptive_app/step_06/android/build.gradle.kts | 21 + .../step_06/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- adaptive_app/step_06/android/settings.gradle | 25 - .../step_06/android/settings.gradle.kts | 25 + adaptive_app/step_06/ios/Podfile | 1 - .../ios/Runner.xcodeproj/project.pbxproj | 130 ++--- adaptive_app/step_06/macos/Podfile | 1 - .../macos/Runner.xcodeproj/project.pbxproj | 94 ++-- adaptive_app/step_06/pubspec.yaml | 2 +- adaptive_app/step_07/android/app/build.gradle | 44 -- .../step_07/android/app/build.gradle.kts | 44 ++ adaptive_app/step_07/android/build.gradle | 18 - adaptive_app/step_07/android/build.gradle.kts | 21 + .../step_07/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- adaptive_app/step_07/android/settings.gradle | 25 - .../step_07/android/settings.gradle.kts | 25 + adaptive_app/step_07/ios/Podfile | 1 - .../ios/Runner.xcodeproj/project.pbxproj | 142 +++--- adaptive_app/step_07/macos/Podfile | 1 - .../macos/Runner.xcodeproj/project.pbxproj | 98 ++-- adaptive_app/step_07/pubspec.yaml | 2 +- 57 files changed, 983 insertions(+), 1002 deletions(-) rename adaptive_app/step_03/android/app/{build.gradle => build.gradle.kts} (84%) delete mode 100644 adaptive_app/step_03/android/build.gradle create mode 100644 adaptive_app/step_03/android/build.gradle.kts delete mode 100644 adaptive_app/step_03/android/settings.gradle create mode 100644 adaptive_app/step_03/android/settings.gradle.kts rename adaptive_app/{step_05/android/app/build.gradle => step_04/android/app/build.gradle.kts} (84%) delete mode 100644 adaptive_app/step_04/android/build.gradle create mode 100644 adaptive_app/step_04/android/build.gradle.kts delete mode 100644 adaptive_app/step_04/android/settings.gradle create mode 100644 adaptive_app/step_04/android/settings.gradle.kts rename adaptive_app/{step_06/android/app/build.gradle => step_05/android/app/build.gradle.kts} (84%) delete mode 100644 adaptive_app/step_05/android/build.gradle create mode 100644 adaptive_app/step_05/android/build.gradle.kts delete mode 100644 adaptive_app/step_05/android/settings.gradle create mode 100644 adaptive_app/step_05/android/settings.gradle.kts rename adaptive_app/{step_04/android/app/build.gradle => step_06/android/app/build.gradle.kts} (84%) delete mode 100644 adaptive_app/step_06/android/build.gradle create mode 100644 adaptive_app/step_06/android/build.gradle.kts delete mode 100644 adaptive_app/step_06/android/settings.gradle create mode 100644 adaptive_app/step_06/android/settings.gradle.kts delete mode 100644 adaptive_app/step_07/android/app/build.gradle create mode 100644 adaptive_app/step_07/android/app/build.gradle.kts delete mode 100644 adaptive_app/step_07/android/build.gradle create mode 100644 adaptive_app/step_07/android/build.gradle.kts delete mode 100644 adaptive_app/step_07/android/settings.gradle create mode 100644 adaptive_app/step_07/android/settings.gradle.kts diff --git a/adaptive_app/codelab_rebuild.yaml b/adaptive_app/codelab_rebuild.yaml index d6fbdcc88e..14e8d6b249 100644 --- a/adaptive_app/codelab_rebuild.yaml +++ b/adaptive_app/codelab_rebuild.yaml @@ -93,7 +93,8 @@ steps: _fillTableRow( context: context, property: 'Window Size', - value: '${mediaQuery.size.width.toStringAsFixed(1)} x ' + value: + '${mediaQuery.size.width.toStringAsFixed(1)} x ' '${mediaQuery.size.height.toStringAsFixed(1)}', ), _fillTableRow( @@ -120,10 +121,11 @@ steps: ); } - TableRow _fillTableRow( - {required BuildContext context, - required String property, - required String value}) { + TableRow _fillTableRow({ + required BuildContext context, + required String property, + required String value, + }) { return TableRow( children: [ TableCell( @@ -268,24 +270,24 @@ steps: // Copyright 2022 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. - + import 'dart:io'; - + import 'package:flex_color_scheme/flex_color_scheme.dart'; import 'package:flutter/material.dart'; import 'package:go_router/go_router.dart'; import 'package:provider/provider.dart'; - + import 'src/app_state.dart'; import 'src/playlist_details.dart'; import 'src/playlists.dart'; - + // From https://www.youtube.com/channel/UCwXdFgeE9KYzlDdR7TG9cMw const flutterDevAccountId = 'UCwXdFgeE9KYzlDdR7TG9cMw'; - + // TODO: Replace with your YouTube API Key const youTubeApiKey = 'AIzaNotAnApiKey'; - + final _router = GoRouter( routes: [ GoRoute( @@ -299,47 +301,49 @@ steps: builder: (context, state) { final title = state.uri.queryParameters['title']!; final id = state.pathParameters['id']!; - return PlaylistDetails( - playlistId: id, - playlistName: title, - ); + return PlaylistDetails(playlistId: id, playlistName: title); }, ), ], ), ], ); - + void main() { if (youTubeApiKey == 'AIzaNotAnApiKey') { print('youTubeApiKey has not been configured.'); exit(1); } - - runApp(ChangeNotifierProvider( - create: (context) => FlutterDevPlaylists( - flutterDevAccountId: flutterDevAccountId, - youTubeApiKey: youTubeApiKey, + + runApp( + ChangeNotifierProvider( + create: + (context) => FlutterDevPlaylists( + flutterDevAccountId: flutterDevAccountId, + youTubeApiKey: youTubeApiKey, + ), + child: const PlaylistsApp(), ), - child: const PlaylistsApp(), - )); + ); } - + class PlaylistsApp extends StatelessWidget { const PlaylistsApp({super.key}); - + @override Widget build(BuildContext context) { return MaterialApp.router( title: 'FlutterDev Playlists', - theme: FlexColorScheme.light( - scheme: FlexScheme.red, - useMaterial3: true, - ).toTheme, - darkTheme: FlexColorScheme.dark( - scheme: FlexScheme.red, - useMaterial3: true, - ).toTheme, + theme: + FlexColorScheme.light( + scheme: FlexScheme.red, + useMaterial3: true, + ).toTheme, + darkTheme: + FlexColorScheme.dark( + scheme: FlexScheme.red, + useMaterial3: true, + ).toTheme, themeMode: ThemeMode.dark, // Or ThemeMode.System if you'd prefer debugShowCheckedModeBanner: false, routerConfig: _router, @@ -355,7 +359,7 @@ steps: // Copyright 2022 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. - + import 'dart:collection'; import 'package:flutter/foundation.dart'; @@ -367,12 +371,7 @@ steps: required String flutterDevAccountId, required String youTubeApiKey, }) : _flutterDevAccountId = flutterDevAccountId { - _api = YouTubeApi( - _ApiKeyClient( - client: http.Client(), - key: youTubeApiKey, - ), - ); + _api = YouTubeApi(_ApiKeyClient(client: http.Client(), key: youTubeApiKey)); _loadPlaylists(); } @@ -388,9 +387,11 @@ steps: pageToken: nextPageToken, ); _playlists.addAll(response.items!); - _playlists.sort((a, b) => a.snippet!.title! - .toLowerCase() - .compareTo(b.snippet!.title!.toLowerCase())); + _playlists.sort( + (a, b) => a.snippet!.title!.toLowerCase().compareTo( + b.snippet!.title!.toLowerCase(), + ), + ); notifyListeners(); nextPageToken = response.nextPageToken; } while (nextPageToken != null); @@ -438,10 +439,12 @@ steps: @override Future send(http.BaseRequest request) { - final url = request.url.replace(queryParameters: >{ - ...request.url.queryParametersAll, - 'key': [key] - }); + final url = request.url.replace( + queryParameters: >{ + ...request.url.queryParametersAll, + 'key': [key], + }, + ); return client.send(http.Request(request.method, url)); } @@ -452,44 +455,45 @@ steps: // Copyright 2022 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. - + import 'package:flutter/material.dart'; import 'package:googleapis/youtube/v3.dart'; import 'package:provider/provider.dart'; import 'package:url_launcher/link.dart'; - + import 'app_state.dart'; - + class PlaylistDetails extends StatelessWidget { - const PlaylistDetails( - {required this.playlistId, required this.playlistName, super.key}); + const PlaylistDetails({ + required this.playlistId, + required this.playlistName, + super.key, + }); final String playlistId; final String playlistName; - + @override Widget build(BuildContext context) { return Scaffold( - appBar: AppBar( - title: Text(playlistName), - ), + appBar: AppBar(title: Text(playlistName)), body: Consumer( builder: (context, playlists, _) { final playlistItems = playlists.playlistItems(playlistId: playlistId); if (playlistItems.isEmpty) { return const Center(child: CircularProgressIndicator()); } - + return _PlaylistDetailsListView(playlistItems: playlistItems); }, ), ); } } - + class _PlaylistDetailsListView extends StatelessWidget { const _PlaylistDetailsListView({required this.playlistItems}); final List playlistItems; - + @override Widget build(BuildContext context) { return ListView.builder( @@ -515,16 +519,13 @@ steps: }, ); } - + Widget _buildGradient(BuildContext context) { return Positioned.fill( child: DecoratedBox( decoration: BoxDecoration( gradient: LinearGradient( - colors: [ - Colors.transparent, - Theme.of(context).colorScheme.surface, - ], + colors: [Colors.transparent, Theme.of(context).colorScheme.surface], begin: Alignment.topCenter, end: Alignment.bottomCenter, stops: const [0.5, 0.95], @@ -533,9 +534,11 @@ steps: ), ); } - + Widget _buildTitleAndSubtitle( - BuildContext context, PlaylistItem playlistItem) { + BuildContext context, + PlaylistItem playlistItem, + ) { return Positioned( left: 20, right: 0, @@ -547,22 +550,22 @@ steps: Text( playlistItem.snippet!.title!, style: Theme.of(context).textTheme.bodyLarge!.copyWith( - fontSize: 18, - // fontWeight: FontWeight.bold, - ), + fontSize: 18, + // fontWeight: FontWeight.bold, + ), ), if (playlistItem.snippet!.videoOwnerChannelTitle != null) Text( playlistItem.snippet!.videoOwnerChannelTitle!, - style: Theme.of(context).textTheme.bodyMedium!.copyWith( - fontSize: 12, - ), + style: Theme.of( + context, + ).textTheme.bodyMedium!.copyWith(fontSize: 12), ), ], ), ); } - + Widget _buildPlayButton(BuildContext context, PlaylistItem playlistItem) { return Stack( alignment: AlignmentDirectional.center, @@ -572,20 +575,20 @@ steps: height: 42, decoration: const BoxDecoration( color: Colors.white, - borderRadius: BorderRadius.all( - Radius.circular(21), - ), + borderRadius: BorderRadius.all(Radius.circular(21)), ), ), Link( uri: Uri.parse( - 'https://www.youtube.com/watch?v=${playlistItem.snippet!.resourceId!.videoId}'), - builder: (context, followLink) => IconButton( - onPressed: followLink, - color: Colors.red, - icon: const Icon(Icons.play_circle_fill), - iconSize: 45, + 'https://www.youtube.com/watch?v=${playlistItem.snippet!.resourceId!.videoId}', ), + builder: + (context, followLink) => IconButton( + onPressed: followLink, + color: Colors.red, + icon: const Icon(Icons.play_circle_fill), + iconSize: 45, + ), ), ], ); @@ -597,44 +600,40 @@ steps: // Copyright 2022 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. - + import 'package:flutter/material.dart'; import 'package:go_router/go_router.dart'; import 'package:googleapis/youtube/v3.dart'; import 'package:provider/provider.dart'; - + import 'app_state.dart'; - + class Playlists extends StatelessWidget { const Playlists({super.key}); - + @override Widget build(BuildContext context) { return Scaffold( - appBar: AppBar( - title: const Text('FlutterDev Playlists'), - ), + appBar: AppBar(title: const Text('FlutterDev Playlists')), body: Consumer( builder: (context, flutterDev, child) { final playlists = flutterDev.playlists; if (playlists.isEmpty) { - return const Center( - child: CircularProgressIndicator(), - ); + return const Center(child: CircularProgressIndicator()); } - + return _PlaylistsListView(items: playlists); }, ), ); } } - + class _PlaylistsListView extends StatelessWidget { const _PlaylistsListView({required this.items}); - + final List items; - + @override Widget build(BuildContext context) { return ListView.builder( @@ -648,15 +647,13 @@ steps: playlist.snippet!.thumbnails!.default_!.url!, ), title: Text(playlist.snippet!.title!), - subtitle: Text( - playlist.snippet!.description!, - ), + subtitle: Text(playlist.snippet!.description!), onTap: () { context.go( Uri( path: '/playlist/${playlist.id}', queryParameters: { - 'title': playlist.snippet!.title! + 'title': playlist.snippet!.title!, }, ).toString(), ); @@ -767,28 +764,24 @@ steps: }, routes: [ GoRoute( - @@ -32,9 +32,12 @@ final _router = GoRouter( + @@ -32,7 +32,10 @@ final _router = GoRouter( builder: (context, state) { final title = state.uri.queryParameters['title']!; final id = state.pathParameters['id']!; - - return PlaylistDetails( - - playlistId: id, - - playlistName: title, + - return PlaylistDetails(playlistId: id, playlistName: title); + return Scaffold( + appBar: AppBar(title: Text(title)), - + body: PlaylistDetails( - + playlistId: id, - + playlistName: title, - + ), - ); + + body: PlaylistDetails(playlistId: id, playlistName: title), + + ); }, ), + ], - name: Patch lib/src/playlists.dart path: adaptive_app/lib/src/playlists.dart patch-u: | --- b/adaptive_app/step_05/lib/src/playlists.dart +++ a/adaptive_app/step_05/lib/src/playlists.dart - @@ -3,48 +3,73 @@ + @@ -3,44 +3,71 @@ // found in the LICENSE file. import 'package:flutter/material.dart'; @@ -807,24 +800,18 @@ steps: @override Widget build(BuildContext context) { - return Scaffold( - - appBar: AppBar( - - title: const Text('FlutterDev Playlists'), - - ), + - appBar: AppBar(title: const Text('FlutterDev Playlists')), - body: Consumer( - builder: (context, flutterDev, child) { - final playlists = flutterDev.playlists; - if (playlists.isEmpty) { - - return const Center( - - child: CircularProgressIndicator(), - - ); + - return const Center(child: CircularProgressIndicator()); - } + return Consumer( + builder: (context, flutterDev, child) { + final playlists = flutterDev.playlists; + if (playlists.isEmpty) { - + return const Center( - + child: CircularProgressIndicator(), - + ); + + return const Center(child: CircularProgressIndicator()); + } - return _PlaylistsListView(items: playlists); @@ -883,15 +870,15 @@ steps: return Padding( padding: const EdgeInsets.all(8.0), child: ListTile( - @@ -56,14 +81,7 @@ class _PlaylistsListView extends StatelessWidget { - playlist.snippet!.description!, - ), + @@ -50,14 +77,7 @@ class _PlaylistsListView extends StatelessWidget { + title: Text(playlist.snippet!.title!), + subtitle: Text(playlist.snippet!.description!), onTap: () { - context.go( - Uri( - path: '/playlist/${playlist.id}', - queryParameters: { - - 'title': playlist.snippet!.title! + - 'title': playlist.snippet!.title!, - }, - ).toString(), - ); @@ -904,14 +891,12 @@ steps: patch-u: | --- b/adaptive_app/step_05/lib/src/playlist_details.dart +++ a/adaptive_app/step_05/lib/src/playlist_details.dart - @@ -17,34 +17,50 @@ class PlaylistDetails extends StatelessWidget { + @@ -20,32 +20,50 @@ class PlaylistDetails extends StatelessWidget { @override Widget build(BuildContext context) { - return Scaffold( - - appBar: AppBar( - - title: Text(playlistName), - - ), + - appBar: AppBar(title: Text(playlistName)), - body: Consumer( - builder: (context, playlists, _) { - final playlistItems = playlists.playlistItems(playlistId: playlistId); @@ -977,23 +962,23 @@ steps: // Copyright 2022 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. - + import 'package:flutter/material.dart'; import 'package:go_router/go_router.dart'; import 'package:googleapis/youtube/v3.dart'; import 'package:split_view/split_view.dart'; - + import 'playlist_details.dart'; import 'playlists.dart'; - + class AdaptivePlaylists extends StatelessWidget { const AdaptivePlaylists({super.key}); - + @override Widget build(BuildContext context) { final screenWidth = MediaQuery.of(context).size.width; final targetPlatform = Theme.of(context).platform; - + if (targetPlatform == TargetPlatform.android || targetPlatform == TargetPlatform.iOS || screenWidth <= 600) { @@ -1003,10 +988,10 @@ steps: } } } - + class NarrowDisplayPlaylists extends StatelessWidget { const NarrowDisplayPlaylists({super.key}); - + @override Widget build(BuildContext context) { return Scaffold( @@ -1017,7 +1002,7 @@ steps: Uri( path: '/playlist/${playlist.id}', queryParameters: { - 'title': playlist.snippet!.title! + 'title': playlist.snippet!.title!, }, ).toString(), ); @@ -1026,14 +1011,14 @@ steps: ); } } - + class WideDisplayPlaylists extends StatefulWidget { const WideDisplayPlaylists({super.key}); - + @override State createState() => _WideDisplayPlaylistsState(); } - + class _WideDisplayPlaylistsState extends State { Playlist? selectedPlaylist; @override @@ -1048,14 +1033,18 @@ steps: body: SplitView( viewMode: SplitViewMode.Horizontal, children: [ - Playlists(playlistSelected: (playlist) { - setState(() { - selectedPlaylist = playlist; - }); - }), + Playlists( + playlistSelected: (playlist) { + setState(() { + selectedPlaylist = playlist; + }); + }, + ), switch ((selectedPlaylist?.id, selectedPlaylist?.snippet?.title)) { - (String id, String title) => - PlaylistDetails(playlistId: id, playlistName: title), + (String id, String title) => PlaylistDetails( + playlistId: id, + playlistName: title, + ), _ => const Center(child: Text('Select a playlist')), }, ], @@ -1094,7 +1083,6 @@ steps: +description: A YouTube CORS Proxy Server. version: 1.0.0 -# repository: https://github.com/my_org/my_repo - - name: Remove yt_cors_proxy/CHANGELOG.md path: adaptive_app/yt_cors_proxy rm: CHANGELOG.md @@ -1167,17 +1155,18 @@ steps: import 'app_state.dart'; class PlaylistDetails extends StatelessWidget { - @@ -69,7 +71,8 @@ class _PlaylistDetailsListViewState extends State<_PlaylistDetailsListView> { + @@ -72,7 +74,9 @@ class _PlaylistDetailsListViewState extends State<_PlaylistDetailsListView> { alignment: Alignment.center, children: [ if (playlistItem.snippet!.thumbnails!.high != null) - Image.network(playlistItem.snippet!.thumbnails!.high!.url!), + AdaptiveImage.network( - + playlistItem.snippet!.thumbnails!.high!.url!), + + playlistItem.snippet!.thumbnails!.high!.url!, + + ), _buildGradient(context), _buildTitleAndSubtitle(context, playlistItem), _buildPlayButton(context, playlistItem), - @@ -109,7 +112,7 @@ class _PlaylistDetailsListViewState extends State<_PlaylistDetailsListView> { + @@ -111,7 +115,7 @@ class _PlaylistDetailsListViewState extends State<_PlaylistDetailsListView> { mainAxisSize: MainAxisSize.min, crossAxisAlignment: CrossAxisAlignment.start, children: [ @@ -1185,16 +1174,16 @@ steps: + AdaptiveText( playlistItem.snippet!.title!, style: Theme.of(context).textTheme.bodyLarge!.copyWith( - fontSize: 18, - @@ -117,7 +120,7 @@ class _PlaylistDetailsListViewState extends State<_PlaylistDetailsListView> { - ), + fontSize: 18, + @@ -119,7 +123,7 @@ class _PlaylistDetailsListViewState extends State<_PlaylistDetailsListView> { + ), ), if (playlistItem.snippet!.videoOwnerChannelTitle != null) - Text( + AdaptiveText( playlistItem.snippet!.videoOwnerChannelTitle!, - style: Theme.of(context).textTheme.bodyMedium!.copyWith( - fontSize: 12, + style: Theme.of( + context, - name: Patch playlists.dart path: adaptive_app/lib/src/playlists.dart patch-u: | @@ -1208,7 +1197,7 @@ steps: import 'app_state.dart'; class Playlists extends StatelessWidget { - @@ -73,7 +74,7 @@ class _PlaylistsListViewState extends State<_PlaylistsListView> { + @@ -71,7 +72,7 @@ class _PlaylistsListViewState extends State<_PlaylistsListView> { return Padding( padding: const EdgeInsets.all(8.0), child: ListTile( @@ -1223,16 +1212,17 @@ steps: // Copyright 2022 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. - + import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; class AdaptiveImage extends StatelessWidget { AdaptiveImage.network(String url, {super.key}) { if (kIsWeb) { - _url = Uri.parse(url) - .replace(host: 'localhost', port: 8080, scheme: 'http') - .toString(); + _url = + Uri.parse( + url, + ).replace(host: 'localhost', port: 8080, scheme: 'http').toString(); } else { _url = url; } @@ -1251,7 +1241,7 @@ steps: // Copyright 2022 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. - + import 'package:flutter/material.dart'; class AdaptiveText extends StatelessWidget { @@ -1263,7 +1253,7 @@ steps: Widget build(BuildContext context) { return switch (Theme.of(context).platform) { TargetPlatform.android || TargetPlatform.iOS => Text(data, style: style), - _ => SelectableText(data, style: style) + _ => SelectableText(data, style: style), }; } } @@ -1316,9 +1306,9 @@ steps: // Copyright 2022 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. - + import 'dart:io' show Platform; - + import 'package:extension_google_sign_in_as_googleapis_auth/extension_google_sign_in_as_googleapis_auth.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; @@ -1327,13 +1317,12 @@ steps: import 'package:googleapis_auth/auth_io.dart'; import 'package:provider/provider.dart'; import 'package:url_launcher/link.dart'; - + import 'app_state.dart'; - - typedef _AdaptiveLoginButtonWidget = Widget Function({ - required VoidCallback? onPressed, - }); - + + typedef _AdaptiveLoginButtonWidget = + Widget Function({required VoidCallback? onPressed}); + class AdaptiveLogin extends StatelessWidget { const AdaptiveLogin({ super.key, @@ -1341,18 +1330,15 @@ steps: required this.scopes, required this.loginButtonChild, }); - + final ClientId clientId; final List scopes; final Widget loginButtonChild; - + @override Widget build(BuildContext context) { if (kIsWeb || Platform.isAndroid || Platform.isIOS) { - return _GoogleSignInLogin( - button: _loginButton, - scopes: scopes, - ); + return _GoogleSignInLogin(button: _loginButton, scopes: scopes); } else { return _GoogleApisAuthLogin( button: _loginButton, @@ -1361,33 +1347,26 @@ steps: ); } } - - Widget _loginButton({required VoidCallback? onPressed}) => ElevatedButton( - onPressed: onPressed, - child: loginButtonChild, - ); + + Widget _loginButton({required VoidCallback? onPressed}) => + ElevatedButton(onPressed: onPressed, child: loginButtonChild); } - + class _GoogleSignInLogin extends StatefulWidget { - const _GoogleSignInLogin({ - required this.button, - required this.scopes, - }); - + const _GoogleSignInLogin({required this.button, required this.scopes}); + final _AdaptiveLoginButtonWidget button; final List scopes; - + @override State<_GoogleSignInLogin> createState() => _GoogleSignInLoginState(); } - + class _GoogleSignInLoginState extends State<_GoogleSignInLogin> { @override initState() { super.initState(); - _googleSignIn = GoogleSignIn( - scopes: widget.scopes, - ); + _googleSignIn = GoogleSignIn(scopes: widget.scopes); _googleSignIn.onCurrentUserChanged.listen((account) { if (account != null) { _googleSignIn.authenticatedClient().then((authClient) { @@ -1400,36 +1379,38 @@ steps: } }); } - + late final GoogleSignIn _googleSignIn; - + @override Widget build(BuildContext context) { return Scaffold( body: Center( - child: widget.button(onPressed: () { - _googleSignIn.signIn(); - }), + child: widget.button( + onPressed: () { + _googleSignIn.signIn(); + }, + ), ), ); } } - + class _GoogleApisAuthLogin extends StatefulWidget { const _GoogleApisAuthLogin({ required this.button, required this.scopes, required this.clientId, }); - + final _AdaptiveLoginButtonWidget button; final List scopes; final ClientId clientId; - + @override State<_GoogleApisAuthLogin> createState() => _GoogleApisAuthLoginState(); } - + class _GoogleApisAuthLoginState extends State<_GoogleApisAuthLogin> { @override initState() { @@ -1446,9 +1427,9 @@ steps: } }); } - + Uri? _authUrl; - + @override Widget build(BuildContext context) { final authUrl = _authUrl; @@ -1457,18 +1438,14 @@ steps: body: Center( child: Link( uri: authUrl, - builder: (context, followLink) => - widget.button(onPressed: followLink), + builder: + (context, followLink) => widget.button(onPressed: followLink), ), ), ); } - - return const Scaffold( - body: Center( - child: CircularProgressIndicator(), - ), - ); + + return const Scaffold(body: Center(child: CircularProgressIndicator())); } } - name: Patch Info.plist @@ -1500,7 +1477,7 @@ steps: patch-u: | --- b/adaptive_app/step_07/lib/main.dart +++ a/adaptive_app/step_07/lib/main.dart - @@ -2,22 +2,27 @@ + @@ -2,22 +2,25 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. @@ -1520,9 +1497,7 @@ steps: -// From https://www.youtube.com/channel/UCwXdFgeE9KYzlDdR7TG9cMw -const flutterDevAccountId = 'UCwXdFgeE9KYzlDdR7TG9cMw'; +// From https://developers.google.com/youtube/v3/guides/auth/installed-apps#identify-access-scopes - +final scopes = [ - + 'https://www.googleapis.com/auth/youtube.readonly', - +]; + +final scopes = ['https://www.googleapis.com/auth/youtube.readonly']; -// TODO: Replace with your YouTube API Key -const youTubeApiKey = 'AIzaNotAnApiKey'; @@ -1534,7 +1509,7 @@ steps: final _router = GoRouter( routes: [ - @@ -26,7 +31,24 @@ final _router = GoRouter( + @@ -26,7 +29,24 @@ final _router = GoRouter( builder: (context, state) { return const AdaptivePlaylists(); }, @@ -1559,7 +1534,7 @@ steps: GoRoute( path: 'playlist/:id', builder: (context, state) { - @@ -47,16 +69,8 @@ final _router = GoRouter( + @@ -44,18 +64,9 @@ final _router = GoRouter( ); void main() { @@ -1568,25 +1543,27 @@ steps: - exit(1); - } - - - runApp(ChangeNotifierProvider( - - create: (context) => FlutterDevPlaylists( - - flutterDevAccountId: flutterDevAccountId, - - youTubeApiKey: youTubeApiKey, - - ), - + runApp(ChangeNotifierProvider( - + create: (context) => AuthedUserPlaylists(), - child: const PlaylistsApp(), - )); - } - @@ -67,7 +81,7 @@ class PlaylistsApp extends StatelessWidget { + runApp( + - ChangeNotifierProvider( + - create: + - (context) => FlutterDevPlaylists( + - flutterDevAccountId: flutterDevAccountId, + - youTubeApiKey: youTubeApiKey, + - ), + + ChangeNotifierProvider( + + create: (context) => AuthedUserPlaylists(), + child: const PlaylistsApp(), + ), + ); + @@ -67,7 +78,7 @@ class PlaylistsApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp.router( - title: 'FlutterDev Playlists', + title: 'Your Playlists', - theme: FlexColorScheme.light( - scheme: FlexScheme.red, - useMaterial3: true, + theme: + FlexColorScheme.light( + scheme: FlexScheme.red, - name: Patch lib/src/adaptive_playlists.dart path: adaptive_app/lib/src/adaptive_playlists.dart patch-u: | @@ -1617,7 +1594,7 @@ steps: patch-u: | --- b/adaptive_app/step_07/lib/src/app_state.dart +++ a/adaptive_app/step_07/lib/src/app_state.dart - @@ -8,28 +8,22 @@ import 'package:flutter/foundation.dart'; + @@ -8,23 +8,22 @@ import 'package:flutter/foundation.dart'; import 'package:googleapis/youtube/v3.dart'; import 'package:http/http.dart' as http; @@ -1626,12 +1603,7 @@ steps: - required String flutterDevAccountId, - required String youTubeApiKey, - }) : _flutterDevAccountId = flutterDevAccountId { - - _api = YouTubeApi( - - _ApiKeyClient( - - client: http.Client(), - - key: youTubeApiKey, - - ), - - ); + - _api = YouTubeApi(_ApiKeyClient(client: http.Client(), key: youTubeApiKey)); +class AuthedUserPlaylists extends ChangeNotifier { + set authClient(http.Client client) { + _api = YouTubeApi(client); @@ -1653,7 +1625,7 @@ steps: maxResults: 50, pageToken: nextPageToken, ); - @@ -42,8 +36,7 @@ class FlutterDevPlaylists extends ChangeNotifier { + @@ -39,8 +38,7 @@ class FlutterDevPlaylists extends ChangeNotifier { } while (nextPageToken != null); } @@ -1663,7 +1635,7 @@ steps: final List _playlists = []; List get playlists => UnmodifiableListView(_playlists); - @@ -60,7 +53,7 @@ class FlutterDevPlaylists extends ChangeNotifier { + @@ -57,7 +55,7 @@ class FlutterDevPlaylists extends ChangeNotifier { Future _retrievePlaylist(String playlistId) async { String? nextPageToken; do { @@ -1672,7 +1644,7 @@ steps: ['snippet', 'contentDetails'], playlistId: playlistId, maxResults: 25, - @@ -75,20 +68,3 @@ class FlutterDevPlaylists extends ChangeNotifier { + @@ -72,22 +70,3 @@ class FlutterDevPlaylists extends ChangeNotifier { } while (nextPageToken != null); } } @@ -1685,10 +1657,12 @@ steps: - - @override - Future send(http.BaseRequest request) { - - final url = request.url.replace(queryParameters: >{ - - ...request.url.queryParametersAll, - - 'key': [key] - - }); + - final url = request.url.replace( + - queryParameters: >{ + - ...request.url.queryParametersAll, + - 'key': [key], + - }, + - ); - - return client.send(http.Request(request.method, url)); - } @@ -1698,7 +1672,7 @@ steps: patch-u: | --- b/adaptive_app/step_07/lib/src/playlist_details.dart +++ a/adaptive_app/step_07/lib/src/playlist_details.dart - @@ -19,7 +19,7 @@ class PlaylistDetails extends StatelessWidget { + @@ -22,7 +22,7 @@ class PlaylistDetails extends StatelessWidget { @override Widget build(BuildContext context) { diff --git a/adaptive_app/step_03/android/app/build.gradle b/adaptive_app/step_03/android/app/build.gradle.kts similarity index 84% rename from adaptive_app/step_03/android/app/build.gradle rename to adaptive_app/step_03/android/app/build.gradle.kts index 8853b72ac2..30c4d24116 100644 --- a/adaptive_app/step_03/android/app/build.gradle +++ b/adaptive_app/step_03/android/app/build.gradle.kts @@ -1,8 +1,8 @@ plugins { - id "com.android.application" - id "kotlin-android" + id("com.android.application") + id("kotlin-android") // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. - id "dev.flutter.flutter-gradle-plugin" + id("dev.flutter.flutter-gradle-plugin") } android { @@ -16,7 +16,7 @@ android { } kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8 + jvmTarget = JavaVersion.VERSION_1_8.toString() } defaultConfig { @@ -34,7 +34,7 @@ android { release { // TODO: Add your own signing config for the release build. // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig = signingConfigs.debug + signingConfig = signingConfigs.getByName("debug") } } } diff --git a/adaptive_app/step_03/android/build.gradle b/adaptive_app/step_03/android/build.gradle deleted file mode 100644 index d2ffbffa4c..0000000000 --- a/adaptive_app/step_03/android/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = "../build" -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(":app") -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/adaptive_app/step_03/android/build.gradle.kts b/adaptive_app/step_03/android/build.gradle.kts new file mode 100644 index 0000000000..89176ef44e --- /dev/null +++ b/adaptive_app/step_03/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/adaptive_app/step_03/android/gradle.properties b/adaptive_app/step_03/android/gradle.properties index 2597170821..f018a61817 100644 --- a/adaptive_app/step_03/android/gradle.properties +++ b/adaptive_app/step_03/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/adaptive_app/step_03/android/gradle/wrapper/gradle-wrapper.properties b/adaptive_app/step_03/android/gradle/wrapper/gradle-wrapper.properties index 7bb2df6ba6..afa1e8eb0a 100644 --- a/adaptive_app/step_03/android/gradle/wrapper/gradle-wrapper.properties +++ b/adaptive_app/step_03/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip diff --git a/adaptive_app/step_03/android/settings.gradle b/adaptive_app/step_03/android/settings.gradle deleted file mode 100644 index b9e43bd376..0000000000 --- a/adaptive_app/step_03/android/settings.gradle +++ /dev/null @@ -1,25 +0,0 @@ -pluginManagement { - def flutterSdkPath = { - def properties = new Properties() - file("local.properties").withInputStream { properties.load(it) } - def flutterSdkPath = properties.getProperty("flutter.sdk") - assert flutterSdkPath != null, "flutter.sdk not set in local.properties" - return flutterSdkPath - }() - - includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") - - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} - -plugins { - id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.1.0" apply false - id "org.jetbrains.kotlin.android" version "1.8.22" apply false -} - -include ":app" diff --git a/adaptive_app/step_03/android/settings.gradle.kts b/adaptive_app/step_03/android/settings.gradle.kts new file mode 100644 index 0000000000..a439442c20 --- /dev/null +++ b/adaptive_app/step_03/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.0" apply false + id("org.jetbrains.kotlin.android") version "1.8.22" apply false +} + +include(":app") diff --git a/adaptive_app/step_05/android/app/build.gradle b/adaptive_app/step_04/android/app/build.gradle.kts similarity index 84% rename from adaptive_app/step_05/android/app/build.gradle rename to adaptive_app/step_04/android/app/build.gradle.kts index 8853b72ac2..30c4d24116 100644 --- a/adaptive_app/step_05/android/app/build.gradle +++ b/adaptive_app/step_04/android/app/build.gradle.kts @@ -1,8 +1,8 @@ plugins { - id "com.android.application" - id "kotlin-android" + id("com.android.application") + id("kotlin-android") // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. - id "dev.flutter.flutter-gradle-plugin" + id("dev.flutter.flutter-gradle-plugin") } android { @@ -16,7 +16,7 @@ android { } kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8 + jvmTarget = JavaVersion.VERSION_1_8.toString() } defaultConfig { @@ -34,7 +34,7 @@ android { release { // TODO: Add your own signing config for the release build. // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig = signingConfigs.debug + signingConfig = signingConfigs.getByName("debug") } } } diff --git a/adaptive_app/step_04/android/build.gradle b/adaptive_app/step_04/android/build.gradle deleted file mode 100644 index d2ffbffa4c..0000000000 --- a/adaptive_app/step_04/android/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = "../build" -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(":app") -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/adaptive_app/step_04/android/build.gradle.kts b/adaptive_app/step_04/android/build.gradle.kts new file mode 100644 index 0000000000..89176ef44e --- /dev/null +++ b/adaptive_app/step_04/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/adaptive_app/step_04/android/gradle.properties b/adaptive_app/step_04/android/gradle.properties index 2597170821..f018a61817 100644 --- a/adaptive_app/step_04/android/gradle.properties +++ b/adaptive_app/step_04/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/adaptive_app/step_04/android/gradle/wrapper/gradle-wrapper.properties b/adaptive_app/step_04/android/gradle/wrapper/gradle-wrapper.properties index 7bb2df6ba6..afa1e8eb0a 100644 --- a/adaptive_app/step_04/android/gradle/wrapper/gradle-wrapper.properties +++ b/adaptive_app/step_04/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip diff --git a/adaptive_app/step_04/android/settings.gradle b/adaptive_app/step_04/android/settings.gradle deleted file mode 100644 index b9e43bd376..0000000000 --- a/adaptive_app/step_04/android/settings.gradle +++ /dev/null @@ -1,25 +0,0 @@ -pluginManagement { - def flutterSdkPath = { - def properties = new Properties() - file("local.properties").withInputStream { properties.load(it) } - def flutterSdkPath = properties.getProperty("flutter.sdk") - assert flutterSdkPath != null, "flutter.sdk not set in local.properties" - return flutterSdkPath - }() - - includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") - - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} - -plugins { - id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.1.0" apply false - id "org.jetbrains.kotlin.android" version "1.8.22" apply false -} - -include ":app" diff --git a/adaptive_app/step_04/android/settings.gradle.kts b/adaptive_app/step_04/android/settings.gradle.kts new file mode 100644 index 0000000000..a439442c20 --- /dev/null +++ b/adaptive_app/step_04/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.0" apply false + id("org.jetbrains.kotlin.android") version "1.8.22" apply false +} + +include(":app") diff --git a/adaptive_app/step_04/ios/Podfile b/adaptive_app/step_04/ios/Podfile index d97f17e223..e549ee22f3 100644 --- a/adaptive_app/step_04/ios/Podfile +++ b/adaptive_app/step_04/ios/Podfile @@ -29,7 +29,6 @@ flutter_ios_podfile_setup target 'Runner' do use_frameworks! - use_modular_headers! flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) target 'RunnerTests' do diff --git a/adaptive_app/step_04/ios/Runner.xcodeproj/project.pbxproj b/adaptive_app/step_04/ios/Runner.xcodeproj/project.pbxproj index 512b5a18de..50a966c5fd 100644 --- a/adaptive_app/step_04/ios/Runner.xcodeproj/project.pbxproj +++ b/adaptive_app/step_04/ios/Runner.xcodeproj/project.pbxproj @@ -9,13 +9,13 @@ /* Begin PBXBuildFile section */ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; - 3AE7C7DF67AA4CDF243E2E1C /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7C07A2960006E0A16CB1B561 /* Pods_Runner.framework */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - E1DB66C58B70207C10007CBF /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 73DB936017B364807528B099 /* Pods_RunnerTests.framework */; }; + B16BA6C51BA285DECDB79BB8 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C2FB0263E2D99A46FFA66DBB /* Pods_RunnerTests.framework */; }; + DFA393EB376DBA74780EAAC2 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 55F4C38CF4EBD1926D9E22C5 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,20 +42,19 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 024A6DC50D0775C59F04031C /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 0616142A429EDEA8CE0DBD9C /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; + 1B1ADB4242A0DD266E5018E1 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 2B5E20702CACA7ED0B62DB4A /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 3667019138558933973CD77A /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 5F88E23C37558266340B2D91 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 7140F2A21BE1D4615BE7905B /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - 73DB936017B364807528B099 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 55F4C38CF4EBD1926D9E22C5 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 7C07A2960006E0A16CB1B561 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 91CF80C7305E0756AD09AC93 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -63,8 +62,9 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - B3E2F20D5F23748D9C9431A1 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - DCAD021F025D21E0842F9C11 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 9C482595CC85A49F02F28710 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + BEB5BC588DA5742A6AA9CD32 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + C2FB0263E2D99A46FFA66DBB /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -72,21 +72,35 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 3AE7C7DF67AA4CDF243E2E1C /* Pods_Runner.framework in Frameworks */, + DFA393EB376DBA74780EAAC2 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - C97E2568A22FD470B376D43A /* Frameworks */ = { + A276C318665D15747965776A /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - E1DB66C58B70207C10007CBF /* Pods_RunnerTests.framework in Frameworks */, + B16BA6C51BA285DECDB79BB8 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 03A45E0B164E84EC5486BB7C /* Pods */ = { + isa = PBXGroup; + children = ( + BEB5BC588DA5742A6AA9CD32 /* Pods-Runner.debug.xcconfig */, + 9C482595CC85A49F02F28710 /* Pods-Runner.release.xcconfig */, + 024A6DC50D0775C59F04031C /* Pods-Runner.profile.xcconfig */, + 2B5E20702CACA7ED0B62DB4A /* Pods-RunnerTests.debug.xcconfig */, + 1B1ADB4242A0DD266E5018E1 /* Pods-RunnerTests.release.xcconfig */, + 0616142A429EDEA8CE0DBD9C /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; 331C8082294A63A400263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -95,6 +109,15 @@ path = RunnerTests; sourceTree = ""; }; + 4F886EFE9A901BD73FBF4A1F /* Frameworks */ = { + isa = PBXGroup; + children = ( + 55F4C38CF4EBD1926D9E22C5 /* Pods_Runner.framework */, + C2FB0263E2D99A46FFA66DBB /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( @@ -113,8 +136,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - E135EF9AADA269FF5FC2ED2C /* Pods */, - CC59AB8EBA23BDDE38EA5FCC /* Frameworks */, + 03A45E0B164E84EC5486BB7C /* Pods */, + 4F886EFE9A901BD73FBF4A1F /* Frameworks */, ); sourceTree = ""; }; @@ -142,29 +165,6 @@ path = Runner; sourceTree = ""; }; - CC59AB8EBA23BDDE38EA5FCC /* Frameworks */ = { - isa = PBXGroup; - children = ( - 7C07A2960006E0A16CB1B561 /* Pods_Runner.framework */, - 73DB936017B364807528B099 /* Pods_RunnerTests.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; - E135EF9AADA269FF5FC2ED2C /* Pods */ = { - isa = PBXGroup; - children = ( - 91CF80C7305E0756AD09AC93 /* Pods-Runner.debug.xcconfig */, - 5F88E23C37558266340B2D91 /* Pods-Runner.release.xcconfig */, - B3E2F20D5F23748D9C9431A1 /* Pods-Runner.profile.xcconfig */, - 3667019138558933973CD77A /* Pods-RunnerTests.debug.xcconfig */, - DCAD021F025D21E0842F9C11 /* Pods-RunnerTests.release.xcconfig */, - 7140F2A21BE1D4615BE7905B /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - A001BA7F57EE3D79EFFD0EF1 /* [CP] Check Pods Manifest.lock */, + 60C1B2227700B656916106F7 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - C97E2568A22FD470B376D43A /* Frameworks */, + A276C318665D15747965776A /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - C41B444AA018B8FD8810556B /* [CP] Check Pods Manifest.lock */, + 446D8AAFE227FBD7F707F01B /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - EA6AA4E9EF4215A1718DDDC9 /* [CP] Embed Pods Frameworks */, + 7DF91B471083D979286710BC /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -286,22 +286,7 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { - isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "Run Script"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; - }; - A001BA7F57EE3D79EFFD0EF1 /* [CP] Check Pods Manifest.lock */ = { + 446D8AAFE227FBD7F707F01B /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -316,14 +301,14 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - C41B444AA018B8FD8810556B /* [CP] Check Pods Manifest.lock */ = { + 60C1B2227700B656916106F7 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -338,14 +323,14 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - EA6AA4E9EF4215A1718DDDC9 /* [CP] Embed Pods Frameworks */ = { + 7DF91B471083D979286710BC /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -362,6 +347,21 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; + 9740EEB61CF901F6004384FC /* Run Script */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Run Script"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 3667019138558933973CD77A /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 2B5E20702CACA7ED0B62DB4A /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = DCAD021F025D21E0842F9C11 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 1B1ADB4242A0DD266E5018E1 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 7140F2A21BE1D4615BE7905B /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 0616142A429EDEA8CE0DBD9C /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/adaptive_app/step_04/macos/Podfile b/adaptive_app/step_04/macos/Podfile index c795730db8..29c8eb3294 100644 --- a/adaptive_app/step_04/macos/Podfile +++ b/adaptive_app/step_04/macos/Podfile @@ -28,7 +28,6 @@ flutter_macos_podfile_setup target 'Runner' do use_frameworks! - use_modular_headers! flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__)) target 'RunnerTests' do diff --git a/adaptive_app/step_04/macos/Runner.xcodeproj/project.pbxproj b/adaptive_app/step_04/macos/Runner.xcodeproj/project.pbxproj index 83effe2fe4..e8edf5464a 100644 --- a/adaptive_app/step_04/macos/Runner.xcodeproj/project.pbxproj +++ b/adaptive_app/step_04/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ - 2F9B180810AB765F1B54E002 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DA383A1C3D90B37EDAE6D729 /* Pods_Runner.framework */; }; + 2332CB429A2F7687397896CE /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2E31DF4301EE3AAE0EEC3499 /* Pods_Runner.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 69309F61A50CA3C54E77F970 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 58A5BBA4148C365D540080FF /* Pods_RunnerTests.framework */; }; + 7B0E3BBDBD871B8776321E1D /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E0BF5BFB41809E524423F6D1 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,7 +62,7 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 0FB8EF672BA40059DAE0971D /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 2E31DF4301EE3AAE0EEC3499 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -79,15 +79,15 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 48A5C0A56B536CFD25892C9D /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - 4FCB4CB74835465DBF76AEE2 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - 58A5BBA4148C365D540080FF /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 6191C3D6D5D8FE1E4C40E774 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 76BE812573BEA526EFADD390 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 7053D155ACFB0858C84F04C2 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; + 82507D8B7DE143A50317D524 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 862A7400A3C2E8073C30A22F /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - B29B36FD5C12742852AC4DFE /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - DA383A1C3D90B37EDAE6D729 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + B5428A6A0824034B71605EB7 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + B642E55A52A222A30521360B /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + E0BF5BFB41809E524423F6D1 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + E52BFBAF82750EDD54C6081A /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 69309F61A50CA3C54E77F970 /* Pods_RunnerTests.framework in Frameworks */, + 7B0E3BBDBD871B8776321E1D /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,7 +103,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 2F9B180810AB765F1B54E002 /* Pods_Runner.framework in Frameworks */, + 2332CB429A2F7687397896CE /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -137,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 823035D7AE10C88CEA68C175 /* Pods */, + B989015D088337045B444540 /* Pods */, ); sourceTree = ""; }; @@ -185,15 +185,15 @@ path = Runner; sourceTree = ""; }; - 823035D7AE10C88CEA68C175 /* Pods */ = { + B989015D088337045B444540 /* Pods */ = { isa = PBXGroup; children = ( - B29B36FD5C12742852AC4DFE /* Pods-Runner.debug.xcconfig */, - 6191C3D6D5D8FE1E4C40E774 /* Pods-Runner.release.xcconfig */, - 48A5C0A56B536CFD25892C9D /* Pods-Runner.profile.xcconfig */, - 0FB8EF672BA40059DAE0971D /* Pods-RunnerTests.debug.xcconfig */, - 4FCB4CB74835465DBF76AEE2 /* Pods-RunnerTests.release.xcconfig */, - 76BE812573BEA526EFADD390 /* Pods-RunnerTests.profile.xcconfig */, + E52BFBAF82750EDD54C6081A /* Pods-Runner.debug.xcconfig */, + 7053D155ACFB0858C84F04C2 /* Pods-Runner.release.xcconfig */, + B642E55A52A222A30521360B /* Pods-Runner.profile.xcconfig */, + 82507D8B7DE143A50317D524 /* Pods-RunnerTests.debug.xcconfig */, + 862A7400A3C2E8073C30A22F /* Pods-RunnerTests.release.xcconfig */, + B5428A6A0824034B71605EB7 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -202,8 +202,8 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - DA383A1C3D90B37EDAE6D729 /* Pods_Runner.framework */, - 58A5BBA4148C365D540080FF /* Pods_RunnerTests.framework */, + 2E31DF4301EE3AAE0EEC3499 /* Pods_Runner.framework */, + E0BF5BFB41809E524423F6D1 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 6B021C8235C0E046BDDCAC79 /* [CP] Check Pods Manifest.lock */, + 9F6266F2717F512831975696 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 6175E7F7D6386C261A7CA2B1 /* [CP] Check Pods Manifest.lock */, + 9DCFCCE4539CFD3C012C14EF /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 13DA6B85C9A60F79C86317E9 /* [CP] Embed Pods Frameworks */, + 8D12D63DEACB8119AF22982A /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,23 +323,6 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 13DA6B85C9A60F79C86317E9 /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -378,7 +361,24 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 6175E7F7D6386C261A7CA2B1 /* [CP] Check Pods Manifest.lock */ = { + 8D12D63DEACB8119AF22982A /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; + 9DCFCCE4539CFD3C012C14EF /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -400,7 +400,7 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 6B021C8235C0E046BDDCAC79 /* [CP] Check Pods Manifest.lock */ = { + 9F6266F2717F512831975696 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 0FB8EF672BA40059DAE0971D /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 82507D8B7DE143A50317D524 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 4FCB4CB74835465DBF76AEE2 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 862A7400A3C2E8073C30A22F /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 76BE812573BEA526EFADD390 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = B5428A6A0824034B71605EB7 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/adaptive_app/step_04/pubspec.yaml b/adaptive_app/step_04/pubspec.yaml index a14257d214..fb07a5c2f2 100644 --- a/adaptive_app/step_04/pubspec.yaml +++ b/adaptive_app/step_04/pubspec.yaml @@ -39,7 +39,7 @@ dependencies: provider: ^6.1.2 url_launcher: ^6.3.1 flex_color_scheme: ^8.0.0 - go_router: ^14.4.1 + go_router: ^14.6.0 dev_dependencies: flutter_test: diff --git a/adaptive_app/step_06/android/app/build.gradle b/adaptive_app/step_05/android/app/build.gradle.kts similarity index 84% rename from adaptive_app/step_06/android/app/build.gradle rename to adaptive_app/step_05/android/app/build.gradle.kts index 8853b72ac2..30c4d24116 100644 --- a/adaptive_app/step_06/android/app/build.gradle +++ b/adaptive_app/step_05/android/app/build.gradle.kts @@ -1,8 +1,8 @@ plugins { - id "com.android.application" - id "kotlin-android" + id("com.android.application") + id("kotlin-android") // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. - id "dev.flutter.flutter-gradle-plugin" + id("dev.flutter.flutter-gradle-plugin") } android { @@ -16,7 +16,7 @@ android { } kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8 + jvmTarget = JavaVersion.VERSION_1_8.toString() } defaultConfig { @@ -34,7 +34,7 @@ android { release { // TODO: Add your own signing config for the release build. // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig = signingConfigs.debug + signingConfig = signingConfigs.getByName("debug") } } } diff --git a/adaptive_app/step_05/android/build.gradle b/adaptive_app/step_05/android/build.gradle deleted file mode 100644 index d2ffbffa4c..0000000000 --- a/adaptive_app/step_05/android/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = "../build" -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(":app") -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/adaptive_app/step_05/android/build.gradle.kts b/adaptive_app/step_05/android/build.gradle.kts new file mode 100644 index 0000000000..89176ef44e --- /dev/null +++ b/adaptive_app/step_05/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/adaptive_app/step_05/android/gradle.properties b/adaptive_app/step_05/android/gradle.properties index 2597170821..f018a61817 100644 --- a/adaptive_app/step_05/android/gradle.properties +++ b/adaptive_app/step_05/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/adaptive_app/step_05/android/gradle/wrapper/gradle-wrapper.properties b/adaptive_app/step_05/android/gradle/wrapper/gradle-wrapper.properties index 7bb2df6ba6..afa1e8eb0a 100644 --- a/adaptive_app/step_05/android/gradle/wrapper/gradle-wrapper.properties +++ b/adaptive_app/step_05/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip diff --git a/adaptive_app/step_05/android/settings.gradle b/adaptive_app/step_05/android/settings.gradle deleted file mode 100644 index b9e43bd376..0000000000 --- a/adaptive_app/step_05/android/settings.gradle +++ /dev/null @@ -1,25 +0,0 @@ -pluginManagement { - def flutterSdkPath = { - def properties = new Properties() - file("local.properties").withInputStream { properties.load(it) } - def flutterSdkPath = properties.getProperty("flutter.sdk") - assert flutterSdkPath != null, "flutter.sdk not set in local.properties" - return flutterSdkPath - }() - - includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") - - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} - -plugins { - id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.1.0" apply false - id "org.jetbrains.kotlin.android" version "1.8.22" apply false -} - -include ":app" diff --git a/adaptive_app/step_05/android/settings.gradle.kts b/adaptive_app/step_05/android/settings.gradle.kts new file mode 100644 index 0000000000..a439442c20 --- /dev/null +++ b/adaptive_app/step_05/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.0" apply false + id("org.jetbrains.kotlin.android") version "1.8.22" apply false +} + +include(":app") diff --git a/adaptive_app/step_05/ios/Podfile b/adaptive_app/step_05/ios/Podfile index d97f17e223..e549ee22f3 100644 --- a/adaptive_app/step_05/ios/Podfile +++ b/adaptive_app/step_05/ios/Podfile @@ -29,7 +29,6 @@ flutter_ios_podfile_setup target 'Runner' do use_frameworks! - use_modular_headers! flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) target 'RunnerTests' do diff --git a/adaptive_app/step_05/ios/Runner.xcodeproj/project.pbxproj b/adaptive_app/step_05/ios/Runner.xcodeproj/project.pbxproj index 512b5a18de..50a966c5fd 100644 --- a/adaptive_app/step_05/ios/Runner.xcodeproj/project.pbxproj +++ b/adaptive_app/step_05/ios/Runner.xcodeproj/project.pbxproj @@ -9,13 +9,13 @@ /* Begin PBXBuildFile section */ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; - 3AE7C7DF67AA4CDF243E2E1C /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7C07A2960006E0A16CB1B561 /* Pods_Runner.framework */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - E1DB66C58B70207C10007CBF /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 73DB936017B364807528B099 /* Pods_RunnerTests.framework */; }; + B16BA6C51BA285DECDB79BB8 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C2FB0263E2D99A46FFA66DBB /* Pods_RunnerTests.framework */; }; + DFA393EB376DBA74780EAAC2 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 55F4C38CF4EBD1926D9E22C5 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,20 +42,19 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 024A6DC50D0775C59F04031C /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 0616142A429EDEA8CE0DBD9C /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; + 1B1ADB4242A0DD266E5018E1 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 2B5E20702CACA7ED0B62DB4A /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 3667019138558933973CD77A /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 5F88E23C37558266340B2D91 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 7140F2A21BE1D4615BE7905B /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - 73DB936017B364807528B099 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 55F4C38CF4EBD1926D9E22C5 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 7C07A2960006E0A16CB1B561 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 91CF80C7305E0756AD09AC93 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -63,8 +62,9 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - B3E2F20D5F23748D9C9431A1 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - DCAD021F025D21E0842F9C11 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 9C482595CC85A49F02F28710 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + BEB5BC588DA5742A6AA9CD32 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + C2FB0263E2D99A46FFA66DBB /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -72,21 +72,35 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 3AE7C7DF67AA4CDF243E2E1C /* Pods_Runner.framework in Frameworks */, + DFA393EB376DBA74780EAAC2 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - C97E2568A22FD470B376D43A /* Frameworks */ = { + A276C318665D15747965776A /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - E1DB66C58B70207C10007CBF /* Pods_RunnerTests.framework in Frameworks */, + B16BA6C51BA285DECDB79BB8 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 03A45E0B164E84EC5486BB7C /* Pods */ = { + isa = PBXGroup; + children = ( + BEB5BC588DA5742A6AA9CD32 /* Pods-Runner.debug.xcconfig */, + 9C482595CC85A49F02F28710 /* Pods-Runner.release.xcconfig */, + 024A6DC50D0775C59F04031C /* Pods-Runner.profile.xcconfig */, + 2B5E20702CACA7ED0B62DB4A /* Pods-RunnerTests.debug.xcconfig */, + 1B1ADB4242A0DD266E5018E1 /* Pods-RunnerTests.release.xcconfig */, + 0616142A429EDEA8CE0DBD9C /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; 331C8082294A63A400263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -95,6 +109,15 @@ path = RunnerTests; sourceTree = ""; }; + 4F886EFE9A901BD73FBF4A1F /* Frameworks */ = { + isa = PBXGroup; + children = ( + 55F4C38CF4EBD1926D9E22C5 /* Pods_Runner.framework */, + C2FB0263E2D99A46FFA66DBB /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( @@ -113,8 +136,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - E135EF9AADA269FF5FC2ED2C /* Pods */, - CC59AB8EBA23BDDE38EA5FCC /* Frameworks */, + 03A45E0B164E84EC5486BB7C /* Pods */, + 4F886EFE9A901BD73FBF4A1F /* Frameworks */, ); sourceTree = ""; }; @@ -142,29 +165,6 @@ path = Runner; sourceTree = ""; }; - CC59AB8EBA23BDDE38EA5FCC /* Frameworks */ = { - isa = PBXGroup; - children = ( - 7C07A2960006E0A16CB1B561 /* Pods_Runner.framework */, - 73DB936017B364807528B099 /* Pods_RunnerTests.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; - E135EF9AADA269FF5FC2ED2C /* Pods */ = { - isa = PBXGroup; - children = ( - 91CF80C7305E0756AD09AC93 /* Pods-Runner.debug.xcconfig */, - 5F88E23C37558266340B2D91 /* Pods-Runner.release.xcconfig */, - B3E2F20D5F23748D9C9431A1 /* Pods-Runner.profile.xcconfig */, - 3667019138558933973CD77A /* Pods-RunnerTests.debug.xcconfig */, - DCAD021F025D21E0842F9C11 /* Pods-RunnerTests.release.xcconfig */, - 7140F2A21BE1D4615BE7905B /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - A001BA7F57EE3D79EFFD0EF1 /* [CP] Check Pods Manifest.lock */, + 60C1B2227700B656916106F7 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - C97E2568A22FD470B376D43A /* Frameworks */, + A276C318665D15747965776A /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - C41B444AA018B8FD8810556B /* [CP] Check Pods Manifest.lock */, + 446D8AAFE227FBD7F707F01B /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - EA6AA4E9EF4215A1718DDDC9 /* [CP] Embed Pods Frameworks */, + 7DF91B471083D979286710BC /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -286,22 +286,7 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { - isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "Run Script"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; - }; - A001BA7F57EE3D79EFFD0EF1 /* [CP] Check Pods Manifest.lock */ = { + 446D8AAFE227FBD7F707F01B /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -316,14 +301,14 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - C41B444AA018B8FD8810556B /* [CP] Check Pods Manifest.lock */ = { + 60C1B2227700B656916106F7 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -338,14 +323,14 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - EA6AA4E9EF4215A1718DDDC9 /* [CP] Embed Pods Frameworks */ = { + 7DF91B471083D979286710BC /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -362,6 +347,21 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; + 9740EEB61CF901F6004384FC /* Run Script */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Run Script"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 3667019138558933973CD77A /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 2B5E20702CACA7ED0B62DB4A /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = DCAD021F025D21E0842F9C11 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 1B1ADB4242A0DD266E5018E1 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 7140F2A21BE1D4615BE7905B /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 0616142A429EDEA8CE0DBD9C /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/adaptive_app/step_05/macos/Podfile b/adaptive_app/step_05/macos/Podfile index c795730db8..29c8eb3294 100644 --- a/adaptive_app/step_05/macos/Podfile +++ b/adaptive_app/step_05/macos/Podfile @@ -28,7 +28,6 @@ flutter_macos_podfile_setup target 'Runner' do use_frameworks! - use_modular_headers! flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__)) target 'RunnerTests' do diff --git a/adaptive_app/step_05/macos/Runner.xcodeproj/project.pbxproj b/adaptive_app/step_05/macos/Runner.xcodeproj/project.pbxproj index 83effe2fe4..e8edf5464a 100644 --- a/adaptive_app/step_05/macos/Runner.xcodeproj/project.pbxproj +++ b/adaptive_app/step_05/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ - 2F9B180810AB765F1B54E002 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DA383A1C3D90B37EDAE6D729 /* Pods_Runner.framework */; }; + 2332CB429A2F7687397896CE /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2E31DF4301EE3AAE0EEC3499 /* Pods_Runner.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 69309F61A50CA3C54E77F970 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 58A5BBA4148C365D540080FF /* Pods_RunnerTests.framework */; }; + 7B0E3BBDBD871B8776321E1D /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E0BF5BFB41809E524423F6D1 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,7 +62,7 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 0FB8EF672BA40059DAE0971D /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 2E31DF4301EE3AAE0EEC3499 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -79,15 +79,15 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 48A5C0A56B536CFD25892C9D /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - 4FCB4CB74835465DBF76AEE2 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - 58A5BBA4148C365D540080FF /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 6191C3D6D5D8FE1E4C40E774 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 76BE812573BEA526EFADD390 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 7053D155ACFB0858C84F04C2 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; + 82507D8B7DE143A50317D524 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 862A7400A3C2E8073C30A22F /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - B29B36FD5C12742852AC4DFE /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - DA383A1C3D90B37EDAE6D729 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + B5428A6A0824034B71605EB7 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + B642E55A52A222A30521360B /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + E0BF5BFB41809E524423F6D1 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + E52BFBAF82750EDD54C6081A /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 69309F61A50CA3C54E77F970 /* Pods_RunnerTests.framework in Frameworks */, + 7B0E3BBDBD871B8776321E1D /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,7 +103,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 2F9B180810AB765F1B54E002 /* Pods_Runner.framework in Frameworks */, + 2332CB429A2F7687397896CE /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -137,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 823035D7AE10C88CEA68C175 /* Pods */, + B989015D088337045B444540 /* Pods */, ); sourceTree = ""; }; @@ -185,15 +185,15 @@ path = Runner; sourceTree = ""; }; - 823035D7AE10C88CEA68C175 /* Pods */ = { + B989015D088337045B444540 /* Pods */ = { isa = PBXGroup; children = ( - B29B36FD5C12742852AC4DFE /* Pods-Runner.debug.xcconfig */, - 6191C3D6D5D8FE1E4C40E774 /* Pods-Runner.release.xcconfig */, - 48A5C0A56B536CFD25892C9D /* Pods-Runner.profile.xcconfig */, - 0FB8EF672BA40059DAE0971D /* Pods-RunnerTests.debug.xcconfig */, - 4FCB4CB74835465DBF76AEE2 /* Pods-RunnerTests.release.xcconfig */, - 76BE812573BEA526EFADD390 /* Pods-RunnerTests.profile.xcconfig */, + E52BFBAF82750EDD54C6081A /* Pods-Runner.debug.xcconfig */, + 7053D155ACFB0858C84F04C2 /* Pods-Runner.release.xcconfig */, + B642E55A52A222A30521360B /* Pods-Runner.profile.xcconfig */, + 82507D8B7DE143A50317D524 /* Pods-RunnerTests.debug.xcconfig */, + 862A7400A3C2E8073C30A22F /* Pods-RunnerTests.release.xcconfig */, + B5428A6A0824034B71605EB7 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -202,8 +202,8 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - DA383A1C3D90B37EDAE6D729 /* Pods_Runner.framework */, - 58A5BBA4148C365D540080FF /* Pods_RunnerTests.framework */, + 2E31DF4301EE3AAE0EEC3499 /* Pods_Runner.framework */, + E0BF5BFB41809E524423F6D1 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 6B021C8235C0E046BDDCAC79 /* [CP] Check Pods Manifest.lock */, + 9F6266F2717F512831975696 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 6175E7F7D6386C261A7CA2B1 /* [CP] Check Pods Manifest.lock */, + 9DCFCCE4539CFD3C012C14EF /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 13DA6B85C9A60F79C86317E9 /* [CP] Embed Pods Frameworks */, + 8D12D63DEACB8119AF22982A /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,23 +323,6 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 13DA6B85C9A60F79C86317E9 /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -378,7 +361,24 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 6175E7F7D6386C261A7CA2B1 /* [CP] Check Pods Manifest.lock */ = { + 8D12D63DEACB8119AF22982A /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; + 9DCFCCE4539CFD3C012C14EF /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -400,7 +400,7 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 6B021C8235C0E046BDDCAC79 /* [CP] Check Pods Manifest.lock */ = { + 9F6266F2717F512831975696 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 0FB8EF672BA40059DAE0971D /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 82507D8B7DE143A50317D524 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 4FCB4CB74835465DBF76AEE2 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 862A7400A3C2E8073C30A22F /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 76BE812573BEA526EFADD390 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = B5428A6A0824034B71605EB7 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/adaptive_app/step_05/pubspec.yaml b/adaptive_app/step_05/pubspec.yaml index 70036dee8c..cc02634920 100644 --- a/adaptive_app/step_05/pubspec.yaml +++ b/adaptive_app/step_05/pubspec.yaml @@ -39,7 +39,7 @@ dependencies: provider: ^6.1.2 url_launcher: ^6.3.1 flex_color_scheme: ^8.0.0 - go_router: ^14.4.1 + go_router: ^14.6.0 split_view: ^3.2.1 dev_dependencies: diff --git a/adaptive_app/step_04/android/app/build.gradle b/adaptive_app/step_06/android/app/build.gradle.kts similarity index 84% rename from adaptive_app/step_04/android/app/build.gradle rename to adaptive_app/step_06/android/app/build.gradle.kts index 8853b72ac2..30c4d24116 100644 --- a/adaptive_app/step_04/android/app/build.gradle +++ b/adaptive_app/step_06/android/app/build.gradle.kts @@ -1,8 +1,8 @@ plugins { - id "com.android.application" - id "kotlin-android" + id("com.android.application") + id("kotlin-android") // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. - id "dev.flutter.flutter-gradle-plugin" + id("dev.flutter.flutter-gradle-plugin") } android { @@ -16,7 +16,7 @@ android { } kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8 + jvmTarget = JavaVersion.VERSION_1_8.toString() } defaultConfig { @@ -34,7 +34,7 @@ android { release { // TODO: Add your own signing config for the release build. // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig = signingConfigs.debug + signingConfig = signingConfigs.getByName("debug") } } } diff --git a/adaptive_app/step_06/android/build.gradle b/adaptive_app/step_06/android/build.gradle deleted file mode 100644 index d2ffbffa4c..0000000000 --- a/adaptive_app/step_06/android/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = "../build" -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(":app") -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/adaptive_app/step_06/android/build.gradle.kts b/adaptive_app/step_06/android/build.gradle.kts new file mode 100644 index 0000000000..89176ef44e --- /dev/null +++ b/adaptive_app/step_06/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/adaptive_app/step_06/android/gradle.properties b/adaptive_app/step_06/android/gradle.properties index 2597170821..f018a61817 100644 --- a/adaptive_app/step_06/android/gradle.properties +++ b/adaptive_app/step_06/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/adaptive_app/step_06/android/gradle/wrapper/gradle-wrapper.properties b/adaptive_app/step_06/android/gradle/wrapper/gradle-wrapper.properties index 7bb2df6ba6..afa1e8eb0a 100644 --- a/adaptive_app/step_06/android/gradle/wrapper/gradle-wrapper.properties +++ b/adaptive_app/step_06/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip diff --git a/adaptive_app/step_06/android/settings.gradle b/adaptive_app/step_06/android/settings.gradle deleted file mode 100644 index b9e43bd376..0000000000 --- a/adaptive_app/step_06/android/settings.gradle +++ /dev/null @@ -1,25 +0,0 @@ -pluginManagement { - def flutterSdkPath = { - def properties = new Properties() - file("local.properties").withInputStream { properties.load(it) } - def flutterSdkPath = properties.getProperty("flutter.sdk") - assert flutterSdkPath != null, "flutter.sdk not set in local.properties" - return flutterSdkPath - }() - - includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") - - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} - -plugins { - id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.1.0" apply false - id "org.jetbrains.kotlin.android" version "1.8.22" apply false -} - -include ":app" diff --git a/adaptive_app/step_06/android/settings.gradle.kts b/adaptive_app/step_06/android/settings.gradle.kts new file mode 100644 index 0000000000..a439442c20 --- /dev/null +++ b/adaptive_app/step_06/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.0" apply false + id("org.jetbrains.kotlin.android") version "1.8.22" apply false +} + +include(":app") diff --git a/adaptive_app/step_06/ios/Podfile b/adaptive_app/step_06/ios/Podfile index d97f17e223..e549ee22f3 100644 --- a/adaptive_app/step_06/ios/Podfile +++ b/adaptive_app/step_06/ios/Podfile @@ -29,7 +29,6 @@ flutter_ios_podfile_setup target 'Runner' do use_frameworks! - use_modular_headers! flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) target 'RunnerTests' do diff --git a/adaptive_app/step_06/ios/Runner.xcodeproj/project.pbxproj b/adaptive_app/step_06/ios/Runner.xcodeproj/project.pbxproj index 512b5a18de..50a966c5fd 100644 --- a/adaptive_app/step_06/ios/Runner.xcodeproj/project.pbxproj +++ b/adaptive_app/step_06/ios/Runner.xcodeproj/project.pbxproj @@ -9,13 +9,13 @@ /* Begin PBXBuildFile section */ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; - 3AE7C7DF67AA4CDF243E2E1C /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7C07A2960006E0A16CB1B561 /* Pods_Runner.framework */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - E1DB66C58B70207C10007CBF /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 73DB936017B364807528B099 /* Pods_RunnerTests.framework */; }; + B16BA6C51BA285DECDB79BB8 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C2FB0263E2D99A46FFA66DBB /* Pods_RunnerTests.framework */; }; + DFA393EB376DBA74780EAAC2 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 55F4C38CF4EBD1926D9E22C5 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,20 +42,19 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 024A6DC50D0775C59F04031C /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 0616142A429EDEA8CE0DBD9C /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; + 1B1ADB4242A0DD266E5018E1 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 2B5E20702CACA7ED0B62DB4A /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 3667019138558933973CD77A /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 5F88E23C37558266340B2D91 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 7140F2A21BE1D4615BE7905B /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - 73DB936017B364807528B099 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 55F4C38CF4EBD1926D9E22C5 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 7C07A2960006E0A16CB1B561 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 91CF80C7305E0756AD09AC93 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -63,8 +62,9 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - B3E2F20D5F23748D9C9431A1 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - DCAD021F025D21E0842F9C11 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 9C482595CC85A49F02F28710 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + BEB5BC588DA5742A6AA9CD32 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + C2FB0263E2D99A46FFA66DBB /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -72,21 +72,35 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 3AE7C7DF67AA4CDF243E2E1C /* Pods_Runner.framework in Frameworks */, + DFA393EB376DBA74780EAAC2 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - C97E2568A22FD470B376D43A /* Frameworks */ = { + A276C318665D15747965776A /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - E1DB66C58B70207C10007CBF /* Pods_RunnerTests.framework in Frameworks */, + B16BA6C51BA285DECDB79BB8 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 03A45E0B164E84EC5486BB7C /* Pods */ = { + isa = PBXGroup; + children = ( + BEB5BC588DA5742A6AA9CD32 /* Pods-Runner.debug.xcconfig */, + 9C482595CC85A49F02F28710 /* Pods-Runner.release.xcconfig */, + 024A6DC50D0775C59F04031C /* Pods-Runner.profile.xcconfig */, + 2B5E20702CACA7ED0B62DB4A /* Pods-RunnerTests.debug.xcconfig */, + 1B1ADB4242A0DD266E5018E1 /* Pods-RunnerTests.release.xcconfig */, + 0616142A429EDEA8CE0DBD9C /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; 331C8082294A63A400263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -95,6 +109,15 @@ path = RunnerTests; sourceTree = ""; }; + 4F886EFE9A901BD73FBF4A1F /* Frameworks */ = { + isa = PBXGroup; + children = ( + 55F4C38CF4EBD1926D9E22C5 /* Pods_Runner.framework */, + C2FB0263E2D99A46FFA66DBB /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( @@ -113,8 +136,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - E135EF9AADA269FF5FC2ED2C /* Pods */, - CC59AB8EBA23BDDE38EA5FCC /* Frameworks */, + 03A45E0B164E84EC5486BB7C /* Pods */, + 4F886EFE9A901BD73FBF4A1F /* Frameworks */, ); sourceTree = ""; }; @@ -142,29 +165,6 @@ path = Runner; sourceTree = ""; }; - CC59AB8EBA23BDDE38EA5FCC /* Frameworks */ = { - isa = PBXGroup; - children = ( - 7C07A2960006E0A16CB1B561 /* Pods_Runner.framework */, - 73DB936017B364807528B099 /* Pods_RunnerTests.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; - E135EF9AADA269FF5FC2ED2C /* Pods */ = { - isa = PBXGroup; - children = ( - 91CF80C7305E0756AD09AC93 /* Pods-Runner.debug.xcconfig */, - 5F88E23C37558266340B2D91 /* Pods-Runner.release.xcconfig */, - B3E2F20D5F23748D9C9431A1 /* Pods-Runner.profile.xcconfig */, - 3667019138558933973CD77A /* Pods-RunnerTests.debug.xcconfig */, - DCAD021F025D21E0842F9C11 /* Pods-RunnerTests.release.xcconfig */, - 7140F2A21BE1D4615BE7905B /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - A001BA7F57EE3D79EFFD0EF1 /* [CP] Check Pods Manifest.lock */, + 60C1B2227700B656916106F7 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - C97E2568A22FD470B376D43A /* Frameworks */, + A276C318665D15747965776A /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - C41B444AA018B8FD8810556B /* [CP] Check Pods Manifest.lock */, + 446D8AAFE227FBD7F707F01B /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - EA6AA4E9EF4215A1718DDDC9 /* [CP] Embed Pods Frameworks */, + 7DF91B471083D979286710BC /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -286,22 +286,7 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { - isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "Run Script"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; - }; - A001BA7F57EE3D79EFFD0EF1 /* [CP] Check Pods Manifest.lock */ = { + 446D8AAFE227FBD7F707F01B /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -316,14 +301,14 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - C41B444AA018B8FD8810556B /* [CP] Check Pods Manifest.lock */ = { + 60C1B2227700B656916106F7 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -338,14 +323,14 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - EA6AA4E9EF4215A1718DDDC9 /* [CP] Embed Pods Frameworks */ = { + 7DF91B471083D979286710BC /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -362,6 +347,21 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; + 9740EEB61CF901F6004384FC /* Run Script */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Run Script"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 3667019138558933973CD77A /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 2B5E20702CACA7ED0B62DB4A /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = DCAD021F025D21E0842F9C11 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 1B1ADB4242A0DD266E5018E1 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 7140F2A21BE1D4615BE7905B /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 0616142A429EDEA8CE0DBD9C /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/adaptive_app/step_06/macos/Podfile b/adaptive_app/step_06/macos/Podfile index c795730db8..29c8eb3294 100644 --- a/adaptive_app/step_06/macos/Podfile +++ b/adaptive_app/step_06/macos/Podfile @@ -28,7 +28,6 @@ flutter_macos_podfile_setup target 'Runner' do use_frameworks! - use_modular_headers! flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__)) target 'RunnerTests' do diff --git a/adaptive_app/step_06/macos/Runner.xcodeproj/project.pbxproj b/adaptive_app/step_06/macos/Runner.xcodeproj/project.pbxproj index 83effe2fe4..e8edf5464a 100644 --- a/adaptive_app/step_06/macos/Runner.xcodeproj/project.pbxproj +++ b/adaptive_app/step_06/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ - 2F9B180810AB765F1B54E002 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DA383A1C3D90B37EDAE6D729 /* Pods_Runner.framework */; }; + 2332CB429A2F7687397896CE /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2E31DF4301EE3AAE0EEC3499 /* Pods_Runner.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 69309F61A50CA3C54E77F970 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 58A5BBA4148C365D540080FF /* Pods_RunnerTests.framework */; }; + 7B0E3BBDBD871B8776321E1D /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E0BF5BFB41809E524423F6D1 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,7 +62,7 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 0FB8EF672BA40059DAE0971D /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 2E31DF4301EE3AAE0EEC3499 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -79,15 +79,15 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 48A5C0A56B536CFD25892C9D /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - 4FCB4CB74835465DBF76AEE2 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - 58A5BBA4148C365D540080FF /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 6191C3D6D5D8FE1E4C40E774 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 76BE812573BEA526EFADD390 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 7053D155ACFB0858C84F04C2 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; + 82507D8B7DE143A50317D524 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 862A7400A3C2E8073C30A22F /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - B29B36FD5C12742852AC4DFE /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - DA383A1C3D90B37EDAE6D729 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + B5428A6A0824034B71605EB7 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + B642E55A52A222A30521360B /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + E0BF5BFB41809E524423F6D1 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + E52BFBAF82750EDD54C6081A /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 69309F61A50CA3C54E77F970 /* Pods_RunnerTests.framework in Frameworks */, + 7B0E3BBDBD871B8776321E1D /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,7 +103,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 2F9B180810AB765F1B54E002 /* Pods_Runner.framework in Frameworks */, + 2332CB429A2F7687397896CE /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -137,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 823035D7AE10C88CEA68C175 /* Pods */, + B989015D088337045B444540 /* Pods */, ); sourceTree = ""; }; @@ -185,15 +185,15 @@ path = Runner; sourceTree = ""; }; - 823035D7AE10C88CEA68C175 /* Pods */ = { + B989015D088337045B444540 /* Pods */ = { isa = PBXGroup; children = ( - B29B36FD5C12742852AC4DFE /* Pods-Runner.debug.xcconfig */, - 6191C3D6D5D8FE1E4C40E774 /* Pods-Runner.release.xcconfig */, - 48A5C0A56B536CFD25892C9D /* Pods-Runner.profile.xcconfig */, - 0FB8EF672BA40059DAE0971D /* Pods-RunnerTests.debug.xcconfig */, - 4FCB4CB74835465DBF76AEE2 /* Pods-RunnerTests.release.xcconfig */, - 76BE812573BEA526EFADD390 /* Pods-RunnerTests.profile.xcconfig */, + E52BFBAF82750EDD54C6081A /* Pods-Runner.debug.xcconfig */, + 7053D155ACFB0858C84F04C2 /* Pods-Runner.release.xcconfig */, + B642E55A52A222A30521360B /* Pods-Runner.profile.xcconfig */, + 82507D8B7DE143A50317D524 /* Pods-RunnerTests.debug.xcconfig */, + 862A7400A3C2E8073C30A22F /* Pods-RunnerTests.release.xcconfig */, + B5428A6A0824034B71605EB7 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -202,8 +202,8 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - DA383A1C3D90B37EDAE6D729 /* Pods_Runner.framework */, - 58A5BBA4148C365D540080FF /* Pods_RunnerTests.framework */, + 2E31DF4301EE3AAE0EEC3499 /* Pods_Runner.framework */, + E0BF5BFB41809E524423F6D1 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 6B021C8235C0E046BDDCAC79 /* [CP] Check Pods Manifest.lock */, + 9F6266F2717F512831975696 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 6175E7F7D6386C261A7CA2B1 /* [CP] Check Pods Manifest.lock */, + 9DCFCCE4539CFD3C012C14EF /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 13DA6B85C9A60F79C86317E9 /* [CP] Embed Pods Frameworks */, + 8D12D63DEACB8119AF22982A /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,23 +323,6 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 13DA6B85C9A60F79C86317E9 /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -378,7 +361,24 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 6175E7F7D6386C261A7CA2B1 /* [CP] Check Pods Manifest.lock */ = { + 8D12D63DEACB8119AF22982A /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; + 9DCFCCE4539CFD3C012C14EF /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -400,7 +400,7 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 6B021C8235C0E046BDDCAC79 /* [CP] Check Pods Manifest.lock */ = { + 9F6266F2717F512831975696 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 0FB8EF672BA40059DAE0971D /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 82507D8B7DE143A50317D524 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 4FCB4CB74835465DBF76AEE2 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 862A7400A3C2E8073C30A22F /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 76BE812573BEA526EFADD390 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = B5428A6A0824034B71605EB7 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/adaptive_app/step_06/pubspec.yaml b/adaptive_app/step_06/pubspec.yaml index 70036dee8c..cc02634920 100644 --- a/adaptive_app/step_06/pubspec.yaml +++ b/adaptive_app/step_06/pubspec.yaml @@ -39,7 +39,7 @@ dependencies: provider: ^6.1.2 url_launcher: ^6.3.1 flex_color_scheme: ^8.0.0 - go_router: ^14.4.1 + go_router: ^14.6.0 split_view: ^3.2.1 dev_dependencies: diff --git a/adaptive_app/step_07/android/app/build.gradle b/adaptive_app/step_07/android/app/build.gradle deleted file mode 100644 index 8853b72ac2..0000000000 --- a/adaptive_app/step_07/android/app/build.gradle +++ /dev/null @@ -1,44 +0,0 @@ -plugins { - id "com.android.application" - id "kotlin-android" - // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. - id "dev.flutter.flutter-gradle-plugin" -} - -android { - namespace = "com.example.adaptive_app" - compileSdk = flutter.compileSdkVersion - ndkVersion = flutter.ndkVersion - - compileOptions { - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 - } - - kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8 - } - - defaultConfig { - // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). - applicationId = "com.example.adaptive_app" - // You can update the following values to match your application needs. - // For more information, see: https://flutter.dev/to/review-gradle-config. - minSdk = flutter.minSdkVersion - targetSdk = flutter.targetSdkVersion - versionCode = flutter.versionCode - versionName = flutter.versionName - } - - buildTypes { - release { - // TODO: Add your own signing config for the release build. - // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig = signingConfigs.debug - } - } -} - -flutter { - source = "../.." -} diff --git a/adaptive_app/step_07/android/app/build.gradle.kts b/adaptive_app/step_07/android/app/build.gradle.kts new file mode 100644 index 0000000000..30c4d24116 --- /dev/null +++ b/adaptive_app/step_07/android/app/build.gradle.kts @@ -0,0 +1,44 @@ +plugins { + id("com.android.application") + id("kotlin-android") + // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. + id("dev.flutter.flutter-gradle-plugin") +} + +android { + namespace = "com.example.adaptive_app" + compileSdk = flutter.compileSdkVersion + ndkVersion = flutter.ndkVersion + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 + } + + kotlinOptions { + jvmTarget = JavaVersion.VERSION_1_8.toString() + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId = "com.example.adaptive_app" + // You can update the following values to match your application needs. + // For more information, see: https://flutter.dev/to/review-gradle-config. + minSdk = flutter.minSdkVersion + targetSdk = flutter.targetSdkVersion + versionCode = flutter.versionCode + versionName = flutter.versionName + } + + buildTypes { + release { + // TODO: Add your own signing config for the release build. + // Signing with the debug keys for now, so `flutter run --release` works. + signingConfig = signingConfigs.getByName("debug") + } + } +} + +flutter { + source = "../.." +} diff --git a/adaptive_app/step_07/android/build.gradle b/adaptive_app/step_07/android/build.gradle deleted file mode 100644 index d2ffbffa4c..0000000000 --- a/adaptive_app/step_07/android/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = "../build" -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(":app") -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/adaptive_app/step_07/android/build.gradle.kts b/adaptive_app/step_07/android/build.gradle.kts new file mode 100644 index 0000000000..89176ef44e --- /dev/null +++ b/adaptive_app/step_07/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/adaptive_app/step_07/android/gradle.properties b/adaptive_app/step_07/android/gradle.properties index 2597170821..f018a61817 100644 --- a/adaptive_app/step_07/android/gradle.properties +++ b/adaptive_app/step_07/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/adaptive_app/step_07/android/gradle/wrapper/gradle-wrapper.properties b/adaptive_app/step_07/android/gradle/wrapper/gradle-wrapper.properties index 7bb2df6ba6..afa1e8eb0a 100644 --- a/adaptive_app/step_07/android/gradle/wrapper/gradle-wrapper.properties +++ b/adaptive_app/step_07/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip diff --git a/adaptive_app/step_07/android/settings.gradle b/adaptive_app/step_07/android/settings.gradle deleted file mode 100644 index b9e43bd376..0000000000 --- a/adaptive_app/step_07/android/settings.gradle +++ /dev/null @@ -1,25 +0,0 @@ -pluginManagement { - def flutterSdkPath = { - def properties = new Properties() - file("local.properties").withInputStream { properties.load(it) } - def flutterSdkPath = properties.getProperty("flutter.sdk") - assert flutterSdkPath != null, "flutter.sdk not set in local.properties" - return flutterSdkPath - }() - - includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") - - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} - -plugins { - id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.1.0" apply false - id "org.jetbrains.kotlin.android" version "1.8.22" apply false -} - -include ":app" diff --git a/adaptive_app/step_07/android/settings.gradle.kts b/adaptive_app/step_07/android/settings.gradle.kts new file mode 100644 index 0000000000..a439442c20 --- /dev/null +++ b/adaptive_app/step_07/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.0" apply false + id("org.jetbrains.kotlin.android") version "1.8.22" apply false +} + +include(":app") diff --git a/adaptive_app/step_07/ios/Podfile b/adaptive_app/step_07/ios/Podfile index d97f17e223..e549ee22f3 100644 --- a/adaptive_app/step_07/ios/Podfile +++ b/adaptive_app/step_07/ios/Podfile @@ -29,7 +29,6 @@ flutter_ios_podfile_setup target 'Runner' do use_frameworks! - use_modular_headers! flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) target 'RunnerTests' do diff --git a/adaptive_app/step_07/ios/Runner.xcodeproj/project.pbxproj b/adaptive_app/step_07/ios/Runner.xcodeproj/project.pbxproj index a7d885d0e6..b913a1bcf8 100644 --- a/adaptive_app/step_07/ios/Runner.xcodeproj/project.pbxproj +++ b/adaptive_app/step_07/ios/Runner.xcodeproj/project.pbxproj @@ -9,13 +9,13 @@ /* Begin PBXBuildFile section */ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; - 3AE7C7DF67AA4CDF243E2E1C /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7C07A2960006E0A16CB1B561 /* Pods_Runner.framework */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - E1DB66C58B70207C10007CBF /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 73DB936017B364807528B099 /* Pods_RunnerTests.framework */; }; + B16BA6C51BA285DECDB79BB8 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C2FB0263E2D99A46FFA66DBB /* Pods_RunnerTests.framework */; }; + DFA393EB376DBA74780EAAC2 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 55F4C38CF4EBD1926D9E22C5 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,20 +42,19 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 024A6DC50D0775C59F04031C /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 0616142A429EDEA8CE0DBD9C /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; + 1B1ADB4242A0DD266E5018E1 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 2B5E20702CACA7ED0B62DB4A /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 3667019138558933973CD77A /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 5F88E23C37558266340B2D91 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 7140F2A21BE1D4615BE7905B /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - 73DB936017B364807528B099 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 55F4C38CF4EBD1926D9E22C5 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 7C07A2960006E0A16CB1B561 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 91CF80C7305E0756AD09AC93 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -63,8 +62,9 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - B3E2F20D5F23748D9C9431A1 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - DCAD021F025D21E0842F9C11 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 9C482595CC85A49F02F28710 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + BEB5BC588DA5742A6AA9CD32 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + C2FB0263E2D99A46FFA66DBB /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -72,21 +72,35 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 3AE7C7DF67AA4CDF243E2E1C /* Pods_Runner.framework in Frameworks */, + DFA393EB376DBA74780EAAC2 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - C97E2568A22FD470B376D43A /* Frameworks */ = { + A276C318665D15747965776A /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - E1DB66C58B70207C10007CBF /* Pods_RunnerTests.framework in Frameworks */, + B16BA6C51BA285DECDB79BB8 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 03A45E0B164E84EC5486BB7C /* Pods */ = { + isa = PBXGroup; + children = ( + BEB5BC588DA5742A6AA9CD32 /* Pods-Runner.debug.xcconfig */, + 9C482595CC85A49F02F28710 /* Pods-Runner.release.xcconfig */, + 024A6DC50D0775C59F04031C /* Pods-Runner.profile.xcconfig */, + 2B5E20702CACA7ED0B62DB4A /* Pods-RunnerTests.debug.xcconfig */, + 1B1ADB4242A0DD266E5018E1 /* Pods-RunnerTests.release.xcconfig */, + 0616142A429EDEA8CE0DBD9C /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; 331C8082294A63A400263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -95,6 +109,15 @@ path = RunnerTests; sourceTree = ""; }; + 4F886EFE9A901BD73FBF4A1F /* Frameworks */ = { + isa = PBXGroup; + children = ( + 55F4C38CF4EBD1926D9E22C5 /* Pods_Runner.framework */, + C2FB0263E2D99A46FFA66DBB /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( @@ -113,8 +136,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - E135EF9AADA269FF5FC2ED2C /* Pods */, - CC59AB8EBA23BDDE38EA5FCC /* Frameworks */, + 03A45E0B164E84EC5486BB7C /* Pods */, + 4F886EFE9A901BD73FBF4A1F /* Frameworks */, ); sourceTree = ""; }; @@ -142,29 +165,6 @@ path = Runner; sourceTree = ""; }; - CC59AB8EBA23BDDE38EA5FCC /* Frameworks */ = { - isa = PBXGroup; - children = ( - 7C07A2960006E0A16CB1B561 /* Pods_Runner.framework */, - 73DB936017B364807528B099 /* Pods_RunnerTests.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; - E135EF9AADA269FF5FC2ED2C /* Pods */ = { - isa = PBXGroup; - children = ( - 91CF80C7305E0756AD09AC93 /* Pods-Runner.debug.xcconfig */, - 5F88E23C37558266340B2D91 /* Pods-Runner.release.xcconfig */, - B3E2F20D5F23748D9C9431A1 /* Pods-Runner.profile.xcconfig */, - 3667019138558933973CD77A /* Pods-RunnerTests.debug.xcconfig */, - DCAD021F025D21E0842F9C11 /* Pods-RunnerTests.release.xcconfig */, - 7140F2A21BE1D4615BE7905B /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - A001BA7F57EE3D79EFFD0EF1 /* [CP] Check Pods Manifest.lock */, + 60C1B2227700B656916106F7 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - C97E2568A22FD470B376D43A /* Frameworks */, + A276C318665D15747965776A /* Frameworks */, ); buildRules = ( ); @@ -191,15 +191,15 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - C41B444AA018B8FD8810556B /* [CP] Check Pods Manifest.lock */, + 446D8AAFE227FBD7F707F01B /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - EA6AA4E9EF4215A1718DDDC9 /* [CP] Embed Pods Frameworks */, - 79DB2413E811A211B40FF2DC /* [CP] Copy Pods Resources */, + 7DF91B471083D979286710BC /* [CP] Embed Pods Frameworks */, + 1046A61444B5265DC2047FF5 /* [CP] Copy Pods Resources */, ); buildRules = ( ); @@ -271,23 +271,7 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { - isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", - ); - name = "Thin Binary"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; - }; - 79DB2413E811A211B40FF2DC /* [CP] Copy Pods Resources */ = { + 1046A61444B5265DC2047FF5 /* [CP] Copy Pods Resources */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -304,22 +288,23 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n"; showEnvVarsInLog = 0; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); - name = "Run Script"; + name = "Thin Binary"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - A001BA7F57EE3D79EFFD0EF1 /* [CP] Check Pods Manifest.lock */ = { + 446D8AAFE227FBD7F707F01B /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -334,14 +319,14 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - C41B444AA018B8FD8810556B /* [CP] Check Pods Manifest.lock */ = { + 60C1B2227700B656916106F7 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -356,14 +341,14 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - EA6AA4E9EF4215A1718DDDC9 /* [CP] Embed Pods Frameworks */ = { + 7DF91B471083D979286710BC /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -380,6 +365,21 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; + 9740EEB61CF901F6004384FC /* Run Script */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Run Script"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -505,7 +505,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 3667019138558933973CD77A /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 2B5E20702CACA7ED0B62DB4A /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -523,7 +523,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = DCAD021F025D21E0842F9C11 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 1B1ADB4242A0DD266E5018E1 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -539,7 +539,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 7140F2A21BE1D4615BE7905B /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 0616142A429EDEA8CE0DBD9C /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/adaptive_app/step_07/macos/Podfile b/adaptive_app/step_07/macos/Podfile index b52666a103..ff5ddb3b8b 100644 --- a/adaptive_app/step_07/macos/Podfile +++ b/adaptive_app/step_07/macos/Podfile @@ -28,7 +28,6 @@ flutter_macos_podfile_setup target 'Runner' do use_frameworks! - use_modular_headers! flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__)) target 'RunnerTests' do diff --git a/adaptive_app/step_07/macos/Runner.xcodeproj/project.pbxproj b/adaptive_app/step_07/macos/Runner.xcodeproj/project.pbxproj index 18993faf39..c0574df28e 100644 --- a/adaptive_app/step_07/macos/Runner.xcodeproj/project.pbxproj +++ b/adaptive_app/step_07/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ - 2F9B180810AB765F1B54E002 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DA383A1C3D90B37EDAE6D729 /* Pods_Runner.framework */; }; + 2332CB429A2F7687397896CE /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2E31DF4301EE3AAE0EEC3499 /* Pods_Runner.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 69309F61A50CA3C54E77F970 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 58A5BBA4148C365D540080FF /* Pods_RunnerTests.framework */; }; + 7B0E3BBDBD871B8776321E1D /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E0BF5BFB41809E524423F6D1 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,7 +62,7 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 0FB8EF672BA40059DAE0971D /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 2E31DF4301EE3AAE0EEC3499 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -79,15 +79,15 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 48A5C0A56B536CFD25892C9D /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - 4FCB4CB74835465DBF76AEE2 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - 58A5BBA4148C365D540080FF /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 6191C3D6D5D8FE1E4C40E774 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 76BE812573BEA526EFADD390 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 7053D155ACFB0858C84F04C2 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; + 82507D8B7DE143A50317D524 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 862A7400A3C2E8073C30A22F /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - B29B36FD5C12742852AC4DFE /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - DA383A1C3D90B37EDAE6D729 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + B5428A6A0824034B71605EB7 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + B642E55A52A222A30521360B /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + E0BF5BFB41809E524423F6D1 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + E52BFBAF82750EDD54C6081A /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 69309F61A50CA3C54E77F970 /* Pods_RunnerTests.framework in Frameworks */, + 7B0E3BBDBD871B8776321E1D /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,7 +103,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 2F9B180810AB765F1B54E002 /* Pods_Runner.framework in Frameworks */, + 2332CB429A2F7687397896CE /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -137,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 823035D7AE10C88CEA68C175 /* Pods */, + B989015D088337045B444540 /* Pods */, ); sourceTree = ""; }; @@ -185,15 +185,15 @@ path = Runner; sourceTree = ""; }; - 823035D7AE10C88CEA68C175 /* Pods */ = { + B989015D088337045B444540 /* Pods */ = { isa = PBXGroup; children = ( - B29B36FD5C12742852AC4DFE /* Pods-Runner.debug.xcconfig */, - 6191C3D6D5D8FE1E4C40E774 /* Pods-Runner.release.xcconfig */, - 48A5C0A56B536CFD25892C9D /* Pods-Runner.profile.xcconfig */, - 0FB8EF672BA40059DAE0971D /* Pods-RunnerTests.debug.xcconfig */, - 4FCB4CB74835465DBF76AEE2 /* Pods-RunnerTests.release.xcconfig */, - 76BE812573BEA526EFADD390 /* Pods-RunnerTests.profile.xcconfig */, + E52BFBAF82750EDD54C6081A /* Pods-Runner.debug.xcconfig */, + 7053D155ACFB0858C84F04C2 /* Pods-Runner.release.xcconfig */, + B642E55A52A222A30521360B /* Pods-Runner.profile.xcconfig */, + 82507D8B7DE143A50317D524 /* Pods-RunnerTests.debug.xcconfig */, + 862A7400A3C2E8073C30A22F /* Pods-RunnerTests.release.xcconfig */, + B5428A6A0824034B71605EB7 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -202,8 +202,8 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - DA383A1C3D90B37EDAE6D729 /* Pods_Runner.framework */, - 58A5BBA4148C365D540080FF /* Pods_RunnerTests.framework */, + 2E31DF4301EE3AAE0EEC3499 /* Pods_Runner.framework */, + E0BF5BFB41809E524423F6D1 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 6B021C8235C0E046BDDCAC79 /* [CP] Check Pods Manifest.lock */, + 9F6266F2717F512831975696 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,14 +234,14 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 6175E7F7D6386C261A7CA2B1 /* [CP] Check Pods Manifest.lock */, + 9DCFCCE4539CFD3C012C14EF /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 13DA6B85C9A60F79C86317E9 /* [CP] Embed Pods Frameworks */, - 2AB337462971F4A09F29C5FE /* [CP] Copy Pods Resources */, + 8D12D63DEACB8119AF22982A /* [CP] Embed Pods Frameworks */, + 20DB7D1B17324A56AC0BB4D0 /* [CP] Copy Pods Resources */, ); buildRules = ( ); @@ -324,24 +324,7 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 13DA6B85C9A60F79C86317E9 /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; - 2AB337462971F4A09F29C5FE /* [CP] Copy Pods Resources */ = { + 20DB7D1B17324A56AC0BB4D0 /* [CP] Copy Pods Resources */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -396,7 +379,24 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 6175E7F7D6386C261A7CA2B1 /* [CP] Check Pods Manifest.lock */ = { + 8D12D63DEACB8119AF22982A /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; + 9DCFCCE4539CFD3C012C14EF /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -418,7 +418,7 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 6B021C8235C0E046BDDCAC79 /* [CP] Check Pods Manifest.lock */ = { + 9F6266F2717F512831975696 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -491,7 +491,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 0FB8EF672BA40059DAE0971D /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 82507D8B7DE143A50317D524 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -506,7 +506,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 4FCB4CB74835465DBF76AEE2 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 862A7400A3C2E8073C30A22F /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -521,7 +521,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 76BE812573BEA526EFADD390 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = B5428A6A0824034B71605EB7 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/adaptive_app/step_07/pubspec.yaml b/adaptive_app/step_07/pubspec.yaml index 4709faabb7..d42eee20fb 100644 --- a/adaptive_app/step_07/pubspec.yaml +++ b/adaptive_app/step_07/pubspec.yaml @@ -38,7 +38,7 @@ dependencies: provider: ^6.1.2 url_launcher: ^6.3.1 flex_color_scheme: ^8.0.0 - go_router: ^14.4.1 + go_router: ^14.6.0 split_view: ^3.2.1 googleapis_auth: ^1.6.0 google_sign_in: ^6.2.2 From d3104b46ac212a7ba583ff7091229168dff151e4 Mon Sep 17 00:00:00 2001 From: Brett Morgan Date: Wed, 13 Nov 2024 17:30:22 +1100 Subject: [PATCH 055/108] Update `animated-responsive-layout` --- .../codelab_rebuild.yaml | 1030 ++++++++--------- .../app/{build.gradle => build.gradle.kts} | 10 +- .../step_03/android/build.gradle | 18 - .../step_03/android/build.gradle.kts | 21 + .../step_03/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../step_03/android/settings.gradle | 25 - .../step_03/android/settings.gradle.kts | 25 + .../android/app/build.gradle.kts} | 10 +- .../step_04/android/build.gradle | 18 - .../step_04/android/build.gradle.kts | 21 + .../step_04/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../step_04/android/settings.gradle | 25 - .../step_04/android/settings.gradle.kts | 25 + .../android/app/build.gradle.kts} | 10 +- .../step_05/android/build.gradle | 18 - .../step_05/android/build.gradle.kts | 21 + .../step_05/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../step_05/android/settings.gradle | 25 - .../step_05/android/settings.gradle.kts | 25 + .../android/app/build.gradle.kts} | 10 +- .../step_06/android/build.gradle | 18 - .../step_06/android/build.gradle.kts | 21 + .../step_06/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../step_06/android/settings.gradle | 25 - .../step_06/android/settings.gradle.kts | 25 + .../step_07/android/app/build.gradle | 44 - .../step_07/android/app/build.gradle.kts | 44 + .../step_07/android/build.gradle | 18 - .../step_07/android/build.gradle.kts | 21 + .../step_07/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../step_07/android/settings.gradle | 25 - .../step_07/android/settings.gradle.kts | 25 + .../step_08/android/app/build.gradle | 44 - .../step_08/android/app/build.gradle.kts | 44 + .../step_08/android/build.gradle | 18 - .../step_08/android/build.gradle.kts | 21 + .../step_08/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../step_08/android/settings.gradle | 25 - .../step_08/android/settings.gradle.kts | 25 + 45 files changed, 902 insertions(+), 902 deletions(-) rename animated-responsive-layout/step_03/android/app/{build.gradle => build.gradle.kts} (84%) delete mode 100644 animated-responsive-layout/step_03/android/build.gradle create mode 100644 animated-responsive-layout/step_03/android/build.gradle.kts delete mode 100644 animated-responsive-layout/step_03/android/settings.gradle create mode 100644 animated-responsive-layout/step_03/android/settings.gradle.kts rename animated-responsive-layout/{step_05/android/app/build.gradle => step_04/android/app/build.gradle.kts} (84%) delete mode 100644 animated-responsive-layout/step_04/android/build.gradle create mode 100644 animated-responsive-layout/step_04/android/build.gradle.kts delete mode 100644 animated-responsive-layout/step_04/android/settings.gradle create mode 100644 animated-responsive-layout/step_04/android/settings.gradle.kts rename animated-responsive-layout/{step_06/android/app/build.gradle => step_05/android/app/build.gradle.kts} (84%) delete mode 100644 animated-responsive-layout/step_05/android/build.gradle create mode 100644 animated-responsive-layout/step_05/android/build.gradle.kts delete mode 100644 animated-responsive-layout/step_05/android/settings.gradle create mode 100644 animated-responsive-layout/step_05/android/settings.gradle.kts rename animated-responsive-layout/{step_04/android/app/build.gradle => step_06/android/app/build.gradle.kts} (84%) delete mode 100644 animated-responsive-layout/step_06/android/build.gradle create mode 100644 animated-responsive-layout/step_06/android/build.gradle.kts delete mode 100644 animated-responsive-layout/step_06/android/settings.gradle create mode 100644 animated-responsive-layout/step_06/android/settings.gradle.kts delete mode 100644 animated-responsive-layout/step_07/android/app/build.gradle create mode 100644 animated-responsive-layout/step_07/android/app/build.gradle.kts delete mode 100644 animated-responsive-layout/step_07/android/build.gradle create mode 100644 animated-responsive-layout/step_07/android/build.gradle.kts delete mode 100644 animated-responsive-layout/step_07/android/settings.gradle create mode 100644 animated-responsive-layout/step_07/android/settings.gradle.kts delete mode 100644 animated-responsive-layout/step_08/android/app/build.gradle create mode 100644 animated-responsive-layout/step_08/android/app/build.gradle.kts delete mode 100644 animated-responsive-layout/step_08/android/build.gradle create mode 100644 animated-responsive-layout/step_08/android/build.gradle.kts delete mode 100644 animated-responsive-layout/step_08/android/settings.gradle create mode 100644 animated-responsive-layout/step_08/android/settings.gradle.kts diff --git a/animated-responsive-layout/codelab_rebuild.yaml b/animated-responsive-layout/codelab_rebuild.yaml index 3fe60459e2..a3f6a1f582 100644 --- a/animated-responsive-layout/codelab_rebuild.yaml +++ b/animated-responsive-layout/codelab_rebuild.yaml @@ -49,6 +49,9 @@ steps: await tester.pumpWidget(const MainApp()); }); } + - name: Dart format + path: animated_responsive_layout + dart: format . - name: Build iOS simulator bundle platforms: [ macos ] path: animated_responsive_layout @@ -145,15 +148,13 @@ steps: // Copyright 2022 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. - + class Attachment { - const Attachment({ - required this.url, - }); - + const Attachment({required this.url}); + final String url; } - + class Email { const Email({ required this.sender, @@ -163,7 +164,7 @@ steps: this.replies = 0, this.attachments = const [], }); - + final User sender; final List recipients; final String subject; @@ -171,25 +172,22 @@ steps: final List attachments; final double replies; } - + class Name { - const Name({ - required this.first, - required this.last, - }); - + const Name({required this.first, required this.last}); + final String first; final String last; String get fullName => '$first $last'; } - + class User { const User({ required this.name, required this.avatarUrl, required this.lastActive, }); - + final Name name; final String avatarUrl; final DateTime lastActive; @@ -200,30 +198,35 @@ steps: // Copyright 2022 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. - + import 'models.dart'; - + final User user_0 = User( - name: const Name(first: 'Me', last: ''), - avatarUrl: 'assets/avatar_1.png', - lastActive: DateTime.now()); + name: const Name(first: 'Me', last: ''), + avatarUrl: 'assets/avatar_1.png', + lastActive: DateTime.now(), + ); final User user_1 = User( - name: const Name(first: '老', last: '强'), - avatarUrl: 'assets/avatar_2.png', - lastActive: DateTime.now().subtract(const Duration(minutes: 10))); + name: const Name(first: '老', last: '强'), + avatarUrl: 'assets/avatar_2.png', + lastActive: DateTime.now().subtract(const Duration(minutes: 10)), + ); final User user_2 = User( - name: const Name(first: 'So', last: 'Duri'), - avatarUrl: 'assets/avatar_3.png', - lastActive: DateTime.now().subtract(const Duration(minutes: 20))); + name: const Name(first: 'So', last: 'Duri'), + avatarUrl: 'assets/avatar_3.png', + lastActive: DateTime.now().subtract(const Duration(minutes: 20)), + ); final User user_3 = User( - name: const Name(first: 'Lily', last: 'MacDonald'), - avatarUrl: 'assets/avatar_4.png', - lastActive: DateTime.now().subtract(const Duration(hours: 2))); + name: const Name(first: 'Lily', last: 'MacDonald'), + avatarUrl: 'assets/avatar_4.png', + lastActive: DateTime.now().subtract(const Duration(hours: 2)), + ); final User user_4 = User( - name: const Name(first: 'Ziad', last: 'Aouad'), - avatarUrl: 'assets/avatar_5.png', - lastActive: DateTime.now().subtract(const Duration(hours: 6))); - + name: const Name(first: 'Ziad', last: 'Aouad'), + avatarUrl: 'assets/avatar_5.png', + lastActive: DateTime.now().subtract(const Duration(hours: 6)), + ); + final List emails = [ Email( sender: user_1, @@ -239,12 +242,13 @@ steps: 'I think it’s time for us to finally try that new noodle shop downtown that doesn’t use menus. Anyone else have other suggestions for dinner club this week? I’m so intrigued by this idea of a noodle restaurant where no one gets to order for themselves - could be fun, or terrible, or both :)\n\nSo', ), Email( - sender: user_3, - recipients: [], - subject: 'This food show is made for you', - content: - 'Ping– you’d love this new food show I started watching. It’s produced by a Thai drummer who started getting recognized for the amazing vegan food she always brought to shows.', - attachments: [const Attachment(url: 'assets/thumbnail_1.png')]), + sender: user_3, + recipients: [], + subject: 'This food show is made for you', + content: + 'Ping– you’d love this new food show I started watching. It’s produced by a Thai drummer who started getting recognized for the amazing vegan food she always brought to shows.', + attachments: [const Attachment(url: 'assets/thumbnail_1.png')], + ), Email( sender: user_4, recipients: [], @@ -253,24 +257,18 @@ steps: 'What do you think about training to be volunteer EMTs? We could do it together for moral support. Think about it??', ), ]; - + final List replies = [ Email( sender: user_2, - recipients: [ - user_3, - user_2, - ], + recipients: [user_3, user_2], subject: 'Dinner Club', content: 'I think it’s time for us to finally try that new noodle shop downtown that doesn’t use menus. Anyone else have other suggestions for dinner club this week? I’m so intrigued by this idea of a noodle restaurant where no one gets to order for themselves - could be fun, or terrible, or both :)\n\nSo', ), Email( sender: user_0, - recipients: [ - user_3, - user_2, - ], + recipients: [user_3, user_2], subject: 'Dinner Club', content: 'Yes! I forgot about that place! I’m definitely up for taking a risk this week and handing control over to this mysterious noodle chef. I wonder what happens if you have allergies though? Lucky none of us have any otherwise I’d be a bit concerned.\n\nThis is going to be great. See you all at the usual time?', @@ -284,14 +282,14 @@ steps: // Copyright 2022 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. - + import 'package:flutter/material.dart'; - + import '../models/data.dart' as data; import '../models/models.dart'; import 'email_widget.dart'; import 'search_bar.dart' as search_bar; - + class EmailListView extends StatelessWidget { const EmailListView({ super.key, @@ -299,11 +297,11 @@ steps: this.onSelected, required this.currentUser, }); - + final int? selectedIndex; final ValueChanged? onSelected; final User currentUser; - + @override Widget build(BuildContext context) { return Padding( @@ -313,23 +311,21 @@ steps: const SizedBox(height: 8), search_bar.SearchBar(currentUser: currentUser), const SizedBox(height: 8), - ...List.generate( - data.emails.length, - (index) { - return Padding( - padding: const EdgeInsets.only(bottom: 8.0), - child: EmailWidget( - email: data.emails[index], - onSelected: onSelected != null - ? () { + ...List.generate(data.emails.length, (index) { + return Padding( + padding: const EdgeInsets.only(bottom: 8.0), + child: EmailWidget( + email: data.emails[index], + onSelected: + onSelected != null + ? () { onSelected!(index); } - : null, - isSelected: selectedIndex == index, - ), - ); - }, - ), + : null, + isSelected: selectedIndex == index, + ), + ); + }), ], ), ); @@ -346,11 +342,7 @@ steps: import '../models/models.dart'; import 'star_button.dart'; - enum EmailType { - preview, - threaded, - primaryThreaded, - } + enum EmailType { preview, threaded, primaryThreaded } class EmailWidget extends StatefulWidget { const EmailWidget({ @@ -382,10 +374,10 @@ steps: ); Color get _surfaceColor => switch (widget) { - EmailWidget(isPreview: false) => _colorScheme.surface, - EmailWidget(isSelected: true) => _colorScheme.primaryContainer, - _ => unselectedColor, - }; + EmailWidget(isPreview: false) => _colorScheme.surface, + EmailWidget(isSelected: true) => _colorScheme.primaryContainer, + _ => unselectedColor, + }; @override Widget build(BuildContext context) { @@ -400,10 +392,7 @@ steps: mainAxisSize: MainAxisSize.min, children: [ if (widget.showHeadline) ...[ - EmailHeadline( - email: widget.email, - isSelected: widget.isSelected, - ), + EmailHeadline(email: widget.email, isSelected: widget.isSelected), ], EmailContent( email: widget.email, @@ -457,12 +446,12 @@ steps: } TextStyle? get contentTextStyle => switch (widget) { - EmailContent(isThreaded: true) => _textTheme.bodyLarge, - EmailContent(isSelected: true) => _textTheme.bodyMedium - ?.copyWith(color: _colorScheme.onPrimaryContainer), - _ => - _textTheme.bodyMedium?.copyWith(color: _colorScheme.onSurfaceVariant), - }; + EmailContent(isThreaded: true) => _textTheme.bodyLarge, + EmailContent(isSelected: true) => _textTheme.bodyMedium?.copyWith( + color: _colorScheme.onPrimaryContainer, + ), + _ => _textTheme.bodyMedium?.copyWith(color: _colorScheme.onSurfaceVariant), + }; @override Widget build(BuildContext context) { @@ -471,49 +460,59 @@ steps: child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - LayoutBuilder(builder: (context, constraints) { - return Row( - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - if (constraints.maxWidth - 200 > 0) ...[ - CircleAvatar( - backgroundImage: AssetImage(widget.email.sender.avatarUrl), - ), - const Padding(padding: EdgeInsets.symmetric(horizontal: 6.0)), - ], - Expanded( - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text( - widget.email.sender.name.fullName, - overflow: TextOverflow.fade, - maxLines: 1, - style: widget.isSelected - ? _textTheme.labelMedium?.copyWith( - color: _colorScheme.onSecondaryContainer) - : _textTheme.labelMedium - ?.copyWith(color: _colorScheme.onSurface), - ), - Text( - lastActiveLabel, - overflow: TextOverflow.fade, - maxLines: 1, - style: widget.isSelected - ? _textTheme.labelMedium?.copyWith( - color: _colorScheme.onSecondaryContainer) - : _textTheme.labelMedium?.copyWith( - color: _colorScheme.onSurfaceVariant), + LayoutBuilder( + builder: (context, constraints) { + return Row( + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + if (constraints.maxWidth - 200 > 0) ...[ + CircleAvatar( + backgroundImage: AssetImage( + widget.email.sender.avatarUrl, ), - ], + ), + const Padding( + padding: EdgeInsets.symmetric(horizontal: 6.0), + ), + ], + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + widget.email.sender.name.fullName, + overflow: TextOverflow.fade, + maxLines: 1, + style: + widget.isSelected + ? _textTheme.labelMedium?.copyWith( + color: _colorScheme.onSecondaryContainer, + ) + : _textTheme.labelMedium?.copyWith( + color: _colorScheme.onSurface, + ), + ), + Text( + lastActiveLabel, + overflow: TextOverflow.fade, + maxLines: 1, + style: + widget.isSelected + ? _textTheme.labelMedium?.copyWith( + color: _colorScheme.onSecondaryContainer, + ) + : _textTheme.labelMedium?.copyWith( + color: _colorScheme.onSurfaceVariant, + ), + ), + ], + ), ), - ), - if (constraints.maxWidth - 200 > 0) ...[ - const StarButton(), - ] - ], - ); - }), + if (constraints.maxWidth - 200 > 0) ...[const StarButton()], + ], + ); + }, + ), const SizedBox(width: 8), Column( crossAxisAlignment: CrossAxisAlignment.start, @@ -521,8 +520,9 @@ steps: if (widget.isPreview) ...[ Text( widget.email.subject, - style: const TextStyle(fontSize: 18) - .copyWith(color: _colorScheme.onSurface), + style: const TextStyle( + fontSize: 18, + ).copyWith(color: _colorScheme.onSurface), ), ], if (widget.isThreaded) ...[ @@ -530,7 +530,7 @@ steps: Text( "To ${widget.email.recipients.map((recipient) => recipient.name.first).join(", ")}", style: _textTheme.bodyMedium, - ) + ), ], contentSpacer, Text( @@ -544,19 +544,17 @@ steps: const SizedBox(width: 12), widget.email.attachments.isNotEmpty ? Container( - height: 96, - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(8.0), - image: DecorationImage( - fit: BoxFit.cover, - image: AssetImage(widget.email.attachments.first.url), - ), + height: 96, + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(8.0), + image: DecorationImage( + fit: BoxFit.cover, + image: AssetImage(widget.email.attachments.first.url), ), - ) + ), + ) : const SizedBox.shrink(), - if (!widget.isPreview) ...[ - const EmailReplyOptions(), - ], + if (!widget.isPreview) ...[const EmailReplyOptions()], ], ), ); @@ -583,71 +581,76 @@ steps: @override Widget build(BuildContext context) { - return LayoutBuilder(builder: (context, constraints) { - return Container( - height: 84, - color: Color.alphaBlend( - _colorScheme.primary.withAlpha(12), - _colorScheme.surface, - ), - child: Padding( - padding: const EdgeInsets.fromLTRB(24, 12, 12, 12), - child: Row( - mainAxisSize: MainAxisSize.max, - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - Expanded( - child: Column( - mainAxisSize: MainAxisSize.min, - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text( - widget.email.subject, - maxLines: 1, - overflow: TextOverflow.fade, - style: const TextStyle( - fontSize: 18, fontWeight: FontWeight.w400), - ), - Text( - '${widget.email.replies.toString()} Messages', - maxLines: 1, - overflow: TextOverflow.fade, - style: _textTheme.labelMedium - ?.copyWith(fontWeight: FontWeight.w500), - ), - ], - ), - ), - // Display a "condensed" version if the widget in the row are - // expected to overflow. - if (constraints.maxWidth - 200 > 0) ...[ - SizedBox( - height: 40, - width: 40, - child: FloatingActionButton( - onPressed: () {}, - elevation: 0, - backgroundColor: _colorScheme.surface, - child: const Icon(Icons.delete_outline), + return LayoutBuilder( + builder: (context, constraints) { + return Container( + height: 84, + color: Color.alphaBlend( + _colorScheme.primary.withAlpha(12), + _colorScheme.surface, + ), + child: Padding( + padding: const EdgeInsets.fromLTRB(24, 12, 12, 12), + child: Row( + mainAxisSize: MainAxisSize.max, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Expanded( + child: Column( + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + widget.email.subject, + maxLines: 1, + overflow: TextOverflow.fade, + style: const TextStyle( + fontSize: 18, + fontWeight: FontWeight.w400, + ), + ), + Text( + '${widget.email.replies.toString()} Messages', + maxLines: 1, + overflow: TextOverflow.fade, + style: _textTheme.labelMedium?.copyWith( + fontWeight: FontWeight.w500, + ), + ), + ], ), ), - const Padding(padding: EdgeInsets.only(right: 8.0)), - SizedBox( - height: 40, - width: 40, - child: FloatingActionButton( - onPressed: () {}, - elevation: 0, - backgroundColor: _colorScheme.surface, - child: const Icon(Icons.more_vert), + // Display a "condensed" version if the widget in the row are + // expected to overflow. + if (constraints.maxWidth - 200 > 0) ...[ + SizedBox( + height: 40, + width: 40, + child: FloatingActionButton( + onPressed: () {}, + elevation: 0, + backgroundColor: _colorScheme.surface, + child: const Icon(Icons.delete_outline), + ), ), - ), - ] - ], + const Padding(padding: EdgeInsets.only(right: 8.0)), + SizedBox( + height: 40, + width: 40, + child: FloatingActionButton( + onPressed: () {}, + elevation: 0, + backgroundColor: _colorScheme.surface, + child: const Icon(Icons.more_vert), + ), + ), + ], + ], + ), ), - ), - ); - }); + ); + }, + ); } } @@ -673,8 +676,9 @@ steps: Expanded( child: TextButton( style: ButtonStyle( - backgroundColor: - WidgetStateProperty.all(_colorScheme.onInverseSurface), + backgroundColor: WidgetStateProperty.all( + _colorScheme.onInverseSurface, + ), ), onPressed: () {}, child: Text( @@ -687,8 +691,9 @@ steps: Expanded( child: TextButton( style: ButtonStyle( - backgroundColor: - WidgetStateProperty.all(_colorScheme.onInverseSurface), + backgroundColor: WidgetStateProperty.all( + _colorScheme.onInverseSurface, + ), ), onPressed: () {}, child: Text( @@ -709,19 +714,16 @@ steps: // Copyright 2022 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. - + import 'package:flutter/material.dart'; - + import '../models/models.dart'; - + class SearchBar extends StatelessWidget { - const SearchBar({ - super.key, - required this.currentUser, - }); - + const SearchBar({super.key, required this.currentUser}); + final User currentUser; - + @override Widget build(BuildContext context) { return SizedBox( @@ -748,9 +750,7 @@ steps: ), ), ), - CircleAvatar( - backgroundImage: AssetImage(currentUser.avatarUrl), - ), + CircleAvatar(backgroundImage: AssetImage(currentUser.avatarUrl)), ], ), ), @@ -763,38 +763,34 @@ steps: // Copyright 2022 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. - + import 'package:flutter/material.dart'; - + class StarButton extends StatefulWidget { const StarButton({super.key}); - + @override State createState() => _StarButtonState(); } - + class _StarButtonState extends State { bool state = false; late final ColorScheme _colorScheme = Theme.of(context).colorScheme; - + Icon get icon { final IconData iconData = state ? Icons.star : Icons.star_outline; - - return Icon( - iconData, - color: Colors.grey, - size: 20, - ); + + return Icon(iconData, color: Colors.grey, size: 20); } - + void _toggle() { setState(() { state = !state; }); } - + double get turns => state ? 1 : 0; - + @override Widget build(BuildContext context) { return AnimatedRotation( @@ -806,10 +802,7 @@ steps: shape: const CircleBorder(), backgroundColor: _colorScheme.surface, onPressed: () => _toggle(), - child: Padding( - padding: const EdgeInsets.all(10.0), - child: icon, - ), + child: Padding(padding: const EdgeInsets.all(10.0), child: icon), ), ); } @@ -820,20 +813,20 @@ steps: // Copyright 2022 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. - + import 'package:flutter/material.dart'; - + import 'models/data.dart' as data; import 'models/models.dart'; import 'widgets/email_list_view.dart'; - + void main() { runApp(const MainApp()); } - + class MainApp extends StatelessWidget { const MainApp({super.key}); - + @override Widget build(BuildContext context) { return MaterialApp( @@ -842,32 +835,29 @@ steps: ); } } - + class Feed extends StatefulWidget { - const Feed({ - super.key, - required this.currentUser, - }); - + const Feed({super.key, required this.currentUser}); + final User currentUser; - + @override State createState() => _FeedState(); } - + class _FeedState extends State { late final _colorScheme = Theme.of(context).colorScheme; late final _backgroundColor = Color.alphaBlend( - _colorScheme.primary.withAlpha(36), _colorScheme.surface); - + _colorScheme.primary.withAlpha(36), + _colorScheme.surface, + ); + @override Widget build(BuildContext context) { return Scaffold( body: Container( color: _backgroundColor, - child: EmailListView( - currentUser: widget.currentUser, - ), + child: EmailListView(currentUser: widget.currentUser), ), floatingActionButton: FloatingActionButton( backgroundColor: _colorScheme.tertiaryContainer, @@ -913,8 +903,8 @@ steps: - name: Patch lib/main.dart path: animated_responsive_layout/lib/main.dart patch-u: | - --- b/material-3-codelab/step_05/lib/main.dart - +++ a/material-3-codelab/step_05/lib/main.dart + --- b/animated-responsive-layout/step_05/lib/main.dart + +++ a/animated-responsive-layout/step_05/lib/main.dart @@ -4,6 +4,7 @@ import 'package:flutter/material.dart'; @@ -923,9 +913,9 @@ steps: import 'models/data.dart' as data; import 'models/models.dart'; import 'widgets/email_list_view.dart'; - @@ -41,12 +42,20 @@ class _FeedState extends State { - late final _backgroundColor = Color.alphaBlend( - _colorScheme.primary.withAlpha(36), _colorScheme.surface); + @@ -40,12 +41,22 @@ class _FeedState extends State { + _colorScheme.surface, + ); + int selectedIndex = 0; + @@ -934,29 +924,30 @@ steps: return Scaffold( body: Container( color: _backgroundColor, - child: EmailListView( + - child: EmailListView(currentUser: widget.currentUser), + + child: EmailListView( + selectedIndex: selectedIndex, + onSelected: (index) { + setState(() { + selectedIndex = index; + }); + }, - currentUser: widget.currentUser, - ), + + currentUser: widget.currentUser, + + ), ), - @@ -56,6 +65,22 @@ class _FeedState extends State { + floatingActionButton: FloatingActionButton( + backgroundColor: _colorScheme.tertiaryContainer, + @@ -53,6 +64,20 @@ class _FeedState extends State { onPressed: () {}, child: const Icon(Icons.add), ), + bottomNavigationBar: NavigationBar( + elevation: 0, + backgroundColor: Colors.white, - + destinations: destinations.map((d) { - + return NavigationDestination( - + icon: Icon(d.icon), - + label: d.label, - + ); - + }).toList(), + + destinations: + + destinations.map((d) { + + return NavigationDestination(icon: Icon(d.icon), label: d.label); + + }).toList(), + selectedIndex: selectedIndex, + onDestinationSelected: (index) { + setState(() { @@ -984,32 +975,30 @@ steps: // Copyright 2022 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. - + import 'package:flutter/material.dart'; - + import '../destinations.dart'; - + class DisappearingBottomNavigationBar extends StatelessWidget { const DisappearingBottomNavigationBar({ super.key, required this.selectedIndex, this.onDestinationSelected, }); - + final int selectedIndex; final ValueChanged? onDestinationSelected; - + @override Widget build(BuildContext context) { return NavigationBar( elevation: 0, backgroundColor: Colors.white, - destinations: destinations.map((d) { - return NavigationDestination( - icon: Icon(d.icon), - label: d.label, - ); - }).toList(), + destinations: + destinations.map((d) { + return NavigationDestination(icon: Icon(d.icon), label: d.label); + }).toList(), selectedIndex: selectedIndex, onDestinationSelected: onDestinationSelected, ); @@ -1021,11 +1010,11 @@ steps: // Copyright 2022 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. - + import 'package:flutter/material.dart'; - + import '../destinations.dart'; - + class DisappearingNavigationRail extends StatelessWidget { const DisappearingNavigationRail({ super.key, @@ -1033,11 +1022,11 @@ steps: required this.selectedIndex, this.onDestinationSelected, }); - + final Color backgroundColor; final int selectedIndex; final ValueChanged? onDestinationSelected; - + @override Widget build(BuildContext context) { final colorScheme = Theme.of(context).colorScheme; @@ -1047,16 +1036,11 @@ steps: onDestinationSelected: onDestinationSelected, leading: Column( children: [ - IconButton( - onPressed: () {}, - icon: const Icon(Icons.menu), - ), + IconButton(onPressed: () {}, icon: const Icon(Icons.menu)), const SizedBox(height: 8), FloatingActionButton( shape: const RoundedRectangleBorder( - borderRadius: BorderRadius.all( - Radius.circular(15), - ), + borderRadius: BorderRadius.all(Radius.circular(15)), ), backgroundColor: colorScheme.tertiaryContainer, foregroundColor: colorScheme.onTertiaryContainer, @@ -1066,20 +1050,21 @@ steps: ], ), groupAlignment: -0.85, - destinations: destinations.map((d) { - return NavigationRailDestination( - icon: Icon(d.icon), - label: Text(d.label), - ); - }).toList(), + destinations: + destinations.map((d) { + return NavigationRailDestination( + icon: Icon(d.icon), + label: Text(d.label), + ); + }).toList(), ); } } - name: Patch lib/main.dart path: animated_responsive_layout/lib/main.dart patch-u: | - --- b/material-3-codelab/step_06/lib/main.dart - +++ a/material-3-codelab/step_06/lib/main.dart + --- b/animated-responsive-layout/step_06/lib/main.dart + +++ a/animated-responsive-layout/step_06/lib/main.dart @@ -4,9 +4,10 @@ import 'package:flutter/material.dart'; @@ -1092,8 +1077,8 @@ steps: import 'widgets/email_list_view.dart'; void main() { - @@ -43,44 +44,65 @@ class _FeedState extends State { - _colorScheme.primary.withAlpha(36), _colorScheme.surface); + @@ -42,42 +43,67 @@ class _FeedState extends State { + ); int selectedIndex = 0; + bool wideScreen = false; @@ -1130,12 +1115,10 @@ steps: - bottomNavigationBar: NavigationBar( - elevation: 0, - backgroundColor: Colors.white, - - destinations: destinations.map((d) { - - return NavigationDestination( - - icon: Icon(d.icon), - - label: d.label, - - ); - - }).toList(), + - destinations: + - destinations.map((d) { + - return NavigationDestination(icon: Icon(d.icon), label: d.label); + - }).toList(), - selectedIndex: selectedIndex, - onDestinationSelected: (index) { - setState(() { @@ -1170,24 +1153,26 @@ steps: + ), + ], ), - + floatingActionButton: wideScreen - + ? null - + : FloatingActionButton( - + backgroundColor: _colorScheme.tertiaryContainer, - + foregroundColor: _colorScheme.onTertiaryContainer, - + onPressed: () {}, - + child: const Icon(Icons.add), - + ), - + bottomNavigationBar: wideScreen - + ? null - + : DisappearingBottomNavigationBar( - + selectedIndex: selectedIndex, - + onDestinationSelected: (index) { - + setState(() { - + selectedIndex = index; - + }); - + }, - + ), + + floatingActionButton: + + wideScreen + + ? null + + : FloatingActionButton( + + backgroundColor: _colorScheme.tertiaryContainer, + + foregroundColor: _colorScheme.onTertiaryContainer, + + onPressed: () {}, + + child: const Icon(Icons.add), + + ), + + bottomNavigationBar: + + wideScreen + + ? null + + : DisappearingBottomNavigationBar( + + selectedIndex: selectedIndex, + + onDestinationSelected: (index) { + + setState(() { + + selectedIndex = index; + + }); + + }, + + ), ); } } @@ -1208,92 +1193,90 @@ steps: // Copyright 2022 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. - + import 'package:flutter/animation.dart'; - + class BarAnimation extends ReverseAnimation { BarAnimation({required AnimationController parent}) - : super( - CurvedAnimation( - parent: parent, - curve: const Interval(0, 1 / 5), - reverseCurve: const Interval(1 / 5, 4 / 5), - ), - ); + : super( + CurvedAnimation( + parent: parent, + curve: const Interval(0, 1 / 5), + reverseCurve: const Interval(1 / 5, 4 / 5), + ), + ); } - + class OffsetAnimation extends CurvedAnimation { OffsetAnimation({required super.parent}) - : super( - curve: const Interval( - 2 / 5, - 3 / 5, - curve: Curves.easeInOutCubicEmphasized, - ), - reverseCurve: Interval( - 4 / 5, - 1, - curve: Curves.easeInOutCubicEmphasized.flipped, - ), - ); + : super( + curve: const Interval( + 2 / 5, + 3 / 5, + curve: Curves.easeInOutCubicEmphasized, + ), + reverseCurve: Interval( + 4 / 5, + 1, + curve: Curves.easeInOutCubicEmphasized.flipped, + ), + ); } - + class RailAnimation extends CurvedAnimation { RailAnimation({required super.parent}) - : super( - curve: const Interval(0 / 5, 4 / 5), - reverseCurve: const Interval(3 / 5, 1), - ); + : super( + curve: const Interval(0 / 5, 4 / 5), + reverseCurve: const Interval(3 / 5, 1), + ); } - + class RailFabAnimation extends CurvedAnimation { RailFabAnimation({required super.parent}) - : super( - curve: const Interval(3 / 5, 1), - ); + : super(curve: const Interval(3 / 5, 1)); } - + class ScaleAnimation extends CurvedAnimation { ScaleAnimation({required super.parent}) - : super( - curve: const Interval( - 3 / 5, - 4 / 5, - curve: Curves.easeInOutCubicEmphasized, - ), - reverseCurve: Interval( - 3 / 5, - 1, - curve: Curves.easeInOutCubicEmphasized.flipped, - ), - ); + : super( + curve: const Interval( + 3 / 5, + 4 / 5, + curve: Curves.easeInOutCubicEmphasized, + ), + reverseCurve: Interval( + 3 / 5, + 1, + curve: Curves.easeInOutCubicEmphasized.flipped, + ), + ); } - + class ShapeAnimation extends CurvedAnimation { ShapeAnimation({required super.parent}) - : super( - curve: const Interval( - 2 / 5, - 3 / 5, - curve: Curves.easeInOutCubicEmphasized, - ), - ); + : super( + curve: const Interval( + 2 / 5, + 3 / 5, + curve: Curves.easeInOutCubicEmphasized, + ), + ); } - + class SizeAnimation extends CurvedAnimation { SizeAnimation({required super.parent}) - : super( - curve: const Interval( - 0 / 5, - 3 / 5, - curve: Curves.easeInOutCubicEmphasized, - ), - reverseCurve: Interval( - 2 / 5, - 1, - curve: Curves.easeInOutCubicEmphasized.flipped, - ), - ); + : super( + curve: const Interval( + 0 / 5, + 3 / 5, + curve: Curves.easeInOutCubicEmphasized, + ), + reverseCurve: Interval( + 2 / 5, + 1, + curve: Curves.easeInOutCubicEmphasized.flipped, + ), + ); } - name: mkdir lib/transitions mkdir: animated_responsive_layout/lib/transitions @@ -1303,36 +1286,37 @@ steps: // Copyright 2022 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. - + import 'package:flutter/material.dart'; import '../animations.dart'; - + class BottomBarTransition extends StatefulWidget { - const BottomBarTransition( - {super.key, - required this.animation, - required this.backgroundColor, - required this.child}); - + const BottomBarTransition({ + super.key, + required this.animation, + required this.backgroundColor, + required this.child, + }); + final Animation animation; final Color backgroundColor; final Widget child; - + @override State createState() => _BottomBarTransition(); } - + class _BottomBarTransition extends State { late final Animation offsetAnimation = Tween( begin: const Offset(0, 1), end: Offset.zero, ).animate(OffsetAnimation(parent: widget.animation)); - + late final Animation heightAnimation = Tween( begin: 0, end: 1, ).animate(SizeAnimation(parent: widget.animation)); - + @override Widget build(BuildContext context) { return ClipRect( @@ -1356,25 +1340,26 @@ steps: // Copyright 2022 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. - + import 'package:flutter/material.dart'; import '../animations.dart'; - + class NavRailTransition extends StatefulWidget { - const NavRailTransition( - {super.key, - required this.animation, - required this.backgroundColor, - required this.child}); - + const NavRailTransition({ + super.key, + required this.animation, + required this.backgroundColor, + required this.child, + }); + final Animation animation; final Widget child; final Color backgroundColor; - + @override State createState() => _NavRailTransitionState(); } - + class _NavRailTransitionState extends State { // The animations are only rebuilt by this method when the text // direction changes because this widget only depends on Directionality. @@ -1387,7 +1372,7 @@ steps: begin: 0, end: 1, ).animate(SizeAnimation(parent: widget.animation)); - + @override Widget build(BuildContext context) { return ClipRect( @@ -1416,12 +1401,12 @@ steps: // Copyright 2022 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. - + import 'dart:ui'; - + import 'package:flutter/material.dart'; import '../animations.dart'; - + class AnimatedFloatingActionButton extends StatefulWidget { const AnimatedFloatingActionButton({ super.key, @@ -1430,25 +1415,27 @@ steps: this.onPressed, this.child, }); - + final Animation animation; final VoidCallback? onPressed; final Widget? child; final double? elevation; - + @override State createState() => _AnimatedFloatingActionButton(); } - + class _AnimatedFloatingActionButton extends State { late final ColorScheme _colorScheme = Theme.of(context).colorScheme; - late final Animation _scaleAnimation = - ScaleAnimation(parent: widget.animation); - late final Animation _shapeAnimation = - ShapeAnimation(parent: widget.animation); - + late final Animation _scaleAnimation = ScaleAnimation( + parent: widget.animation, + ); + late final Animation _shapeAnimation = ShapeAnimation( + parent: widget.animation, + ); + @override Widget build(BuildContext context) { return ScaleTransition( @@ -1471,9 +1458,9 @@ steps: - name: Patch lib/widgets/disappearing_bottom_navigation_bar.dart path: animated_responsive_layout/lib/widgets/disappearing_bottom_navigation_bar.dart patch-u: | - --- b/material-3-codelab/step_07/lib/widgets/disappearing_bottom_navigation_bar.dart - +++ a/material-3-codelab/step_07/lib/widgets/disappearing_bottom_navigation_bar.dart - @@ -4,31 +4,39 @@ + --- b/animated-responsive-layout/step_07/lib/widgets/disappearing_bottom_navigation_bar.dart + +++ a/animated-responsive-layout/step_07/lib/widgets/disappearing_bottom_navigation_bar.dart + @@ -4,29 +4,37 @@ import 'package:flutter/material.dart'; @@ -1500,23 +1487,19 @@ steps: + return BottomBarTransition( + animation: barAnimation, backgroundColor: Colors.white, - - destinations: destinations.map((d) { - - return NavigationDestination( - - icon: Icon(d.icon), - - label: d.label, - - ); - - }).toList(), + - destinations: + - destinations.map((d) { + - return NavigationDestination(icon: Icon(d.icon), label: d.label); + - }).toList(), - selectedIndex: selectedIndex, - onDestinationSelected: onDestinationSelected, + child: NavigationBar( + elevation: 0, + backgroundColor: Colors.white, - + destinations: destinations.map((d) { - + return NavigationDestination( - + icon: Icon(d.icon), - + label: d.label, - + ); - + }).toList(), + + destinations: + + destinations.map((d) { + + return NavigationDestination(icon: Icon(d.icon), label: d.label); + + }).toList(), + selectedIndex: selectedIndex, + onDestinationSelected: onDestinationSelected, + ), @@ -1526,9 +1509,9 @@ steps: - name: Patch lib/widgets/disappearing_navigation_rail.dart path: animated_responsive_layout/lib/widgets/disappearing_navigation_rail.dart patch-u: | - --- b/material-3-codelab/step_07/lib/widgets/disappearing_navigation_rail.dart - +++ a/material-3-codelab/step_07/lib/widgets/disappearing_navigation_rail.dart - @@ -4,54 +4,59 @@ + --- b/animated-responsive-layout/step_07/lib/widgets/disappearing_navigation_rail.dart + +++ a/animated-responsive-layout/step_07/lib/widgets/disappearing_navigation_rail.dart + @@ -4,50 +4,57 @@ import 'package:flutter/material.dart'; @@ -1564,25 +1547,24 @@ steps: - onDestinationSelected: onDestinationSelected, - leading: Column( - children: [ - - IconButton( - - onPressed: () {}, - - icon: const Icon(Icons.menu), - - ), + - IconButton(onPressed: () {}, icon: const Icon(Icons.menu)), - const SizedBox(height: 8), - FloatingActionButton( - shape: const RoundedRectangleBorder( - - borderRadius: BorderRadius.all( - - Radius.circular(15), - - ), + - borderRadius: BorderRadius.all(Radius.circular(15)), + child: NavigationRail( + selectedIndex: selectedIndex, + backgroundColor: backgroundColor, + onDestinationSelected: onDestinationSelected, + leading: Column( + children: [ - + IconButton( + + IconButton(onPressed: () {}, icon: const Icon(Icons.menu)), + + const SizedBox(height: 8), + + AnimatedFloatingActionButton( + + animation: railFabAnimation, + + elevation: 0, + onPressed: () {}, - + icon: const Icon(Icons.menu), + + child: const Icon(Icons.add), ), - backgroundColor: colorScheme.tertiaryContainer, - foregroundColor: colorScheme.onTertiaryContainer, @@ -1590,38 +1572,33 @@ steps: - child: const Icon(Icons.add), - ), - ], - + const SizedBox(height: 8), - + AnimatedFloatingActionButton( - + animation: railFabAnimation, - + elevation: 0, - + onPressed: () {}, - + child: const Icon(Icons.add), - + ), + ], + ), + groupAlignment: -0.85, - + destinations: destinations.map((d) { - + return NavigationRailDestination( - + icon: Icon(d.icon), - + label: Text(d.label), - + ); - + }).toList(), + + destinations: + + destinations.map((d) { + + return NavigationRailDestination( + + icon: Icon(d.icon), + + label: Text(d.label), + + ); + + }).toList(), ), - groupAlignment: -0.85, - - destinations: destinations.map((d) { - - return NavigationRailDestination( - - icon: Icon(d.icon), - - label: Text(d.label), - - ); - - }).toList(), + - destinations: + - destinations.map((d) { + - return NavigationRailDestination( + - icon: Icon(d.icon), + - label: Text(d.label), + - ); + - }).toList(), ); } } - name: Patch lib/main.dart path: animated_responsive_layout/lib/main.dart patch-u: | - --- b/material-3-codelab/step_07/lib/main.dart - +++ a/material-3-codelab/step_07/lib/main.dart + --- b/animated-responsive-layout/step_07/lib/main.dart + +++ a/animated-responsive-layout/step_07/lib/main.dart @@ -4,8 +4,10 @@ import 'package:flutter/material.dart'; @@ -1633,7 +1610,7 @@ steps: import 'widgets/disappearing_bottom_navigation_bar.dart'; import 'widgets/disappearing_navigation_rail.dart'; import 'widgets/email_list_view.dart'; - @@ -38,71 +40,102 @@ class Feed extends StatefulWidget { + @@ -35,75 +37,105 @@ class Feed extends StatefulWidget { State createState() => _FeedState(); } @@ -1641,12 +1618,15 @@ steps: +class _FeedState extends State with SingleTickerProviderStateMixin { late final _colorScheme = Theme.of(context).colorScheme; late final _backgroundColor = Color.alphaBlend( - _colorScheme.primary.withAlpha(36), _colorScheme.surface); + _colorScheme.primary.withAlpha(36), + _colorScheme.surface, + ); + late final _controller = AnimationController( - + duration: const Duration(milliseconds: 1000), - + reverseDuration: const Duration(milliseconds: 1250), - + value: 0, - + vsync: this); + + duration: const Duration(milliseconds: 1000), + + reverseDuration: const Duration(milliseconds: 1250), + + value: 0, + + vsync: this, + + ); + late final _railAnimation = RailAnimation(parent: _controller); + late final _railFabAnimation = RailFabAnimation(parent: _controller); + late final _barAnimation = BarAnimation(parent: _controller); @@ -1704,6 +1684,31 @@ steps: - child: Container( - color: _backgroundColor, - child: EmailListView( + - selectedIndex: selectedIndex, + - onSelected: (index) { + - setState(() { + - selectedIndex = index; + - }); + - }, + - currentUser: widget.currentUser, + - ), + - ), + - ), + - ], + - ), + - floatingActionButton: + - wideScreen + - ? null + - : FloatingActionButton( + - backgroundColor: _colorScheme.tertiaryContainer, + - foregroundColor: _colorScheme.onTertiaryContainer, + - onPressed: () {}, + - child: const Icon(Icons.add), + - ), + - bottomNavigationBar: + - wideScreen + - ? null + - : DisappearingBottomNavigationBar( + return AnimatedBuilder( + animation: _controller, + builder: (context, _) { @@ -1714,16 +1719,13 @@ steps: + railAnimation: _railAnimation, + railFabAnimation: _railFabAnimation, selectedIndex: selectedIndex, - - onSelected: (index) { + backgroundColor: _backgroundColor, - + onDestinationSelected: (index) { + onDestinationSelected: (index) { setState(() { selectedIndex = index; }); }, - - currentUser: widget.currentUser, ), - - ), + Expanded( + child: Container( + color: _backgroundColor, @@ -1753,27 +1755,7 @@ steps: + selectedIndex = index; + }); + }, - ), - - ], - - ), - - floatingActionButton: wideScreen - - ? null - - : FloatingActionButton( - - backgroundColor: _colorScheme.tertiaryContainer, - - foregroundColor: _colorScheme.onTertiaryContainer, - - onPressed: () {}, - - child: const Icon(Icons.add), - - ), - - bottomNavigationBar: wideScreen - - ? null - - : DisappearingBottomNavigationBar( - - selectedIndex: selectedIndex, - - onDestinationSelected: (index) { - - setState(() { - - selectedIndex = index; - - }); - - }, - - ), + + ), + ); + }, ); @@ -1820,8 +1802,9 @@ steps: class _ListDetailTransitionState extends State { Animation widthAnimation = const AlwaysStoppedAnimation(0); - late final Animation sizeAnimation = - SizeAnimation(parent: widget.animation); + late final Animation sizeAnimation = SizeAnimation( + parent: widget.animation, + ); late final Animation offsetAnimation = Tween( begin: const Offset(1, 0), end: Offset.zero, @@ -1851,8 +1834,10 @@ steps: } if (currentFlexFactor == 0) { - widthAnimation = - Tween(begin: 0, end: nextFlexFactor).animate(sizeAnimation); + widthAnimation = Tween( + begin: 0, + end: nextFlexFactor, + ).animate(sizeAnimation); } else { final TweenSequence sequence = TweenSequence([ if (sizeAnimation.value > 0) ...[ @@ -1880,20 +1865,17 @@ steps: return widthAnimation.value.toInt() == 0 ? widget.one : Row( - children: [ - Flexible( - flex: 1000, - child: widget.one, - ), - Flexible( - flex: widthAnimation.value.toInt(), - child: FractionalTranslation( - translation: offsetAnimation.value, - child: widget.two, - ), + children: [ + Flexible(flex: 1000, child: widget.one), + Flexible( + flex: widthAnimation.value.toInt(), + child: FractionalTranslation( + translation: offsetAnimation.value, + child: widget.two, ), - ], - ); + ), + ], + ); } } - name: Create lib/widgets/reply_list_view.dart @@ -1937,8 +1919,8 @@ steps: - name: Update lib/main.dart path: animated_responsive_layout/lib/main.dart patch-u: | - --- b/material-3-codelab/step_08/lib/main.dart - +++ a/material-3-codelab/step_08/lib/main.dart + --- b/animated-responsive-layout/step_08/lib/main.dart + +++ a/animated-responsive-layout/step_08/lib/main.dart @@ -7,10 +7,12 @@ import 'package:flutter/material.dart'; import 'animations.dart'; import 'models/data.dart' as data; diff --git a/animated-responsive-layout/step_03/android/app/build.gradle b/animated-responsive-layout/step_03/android/app/build.gradle.kts similarity index 84% rename from animated-responsive-layout/step_03/android/app/build.gradle rename to animated-responsive-layout/step_03/android/app/build.gradle.kts index 79a54d97fd..5643237de3 100644 --- a/animated-responsive-layout/step_03/android/app/build.gradle +++ b/animated-responsive-layout/step_03/android/app/build.gradle.kts @@ -1,8 +1,8 @@ plugins { - id "com.android.application" - id "kotlin-android" + id("com.android.application") + id("kotlin-android") // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. - id "dev.flutter.flutter-gradle-plugin" + id("dev.flutter.flutter-gradle-plugin") } android { @@ -16,7 +16,7 @@ android { } kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8 + jvmTarget = JavaVersion.VERSION_1_8.toString() } defaultConfig { @@ -34,7 +34,7 @@ android { release { // TODO: Add your own signing config for the release build. // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig = signingConfigs.debug + signingConfig = signingConfigs.getByName("debug") } } } diff --git a/animated-responsive-layout/step_03/android/build.gradle b/animated-responsive-layout/step_03/android/build.gradle deleted file mode 100644 index d2ffbffa4c..0000000000 --- a/animated-responsive-layout/step_03/android/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = "../build" -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(":app") -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/animated-responsive-layout/step_03/android/build.gradle.kts b/animated-responsive-layout/step_03/android/build.gradle.kts new file mode 100644 index 0000000000..89176ef44e --- /dev/null +++ b/animated-responsive-layout/step_03/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/animated-responsive-layout/step_03/android/gradle.properties b/animated-responsive-layout/step_03/android/gradle.properties index 2597170821..f018a61817 100644 --- a/animated-responsive-layout/step_03/android/gradle.properties +++ b/animated-responsive-layout/step_03/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/animated-responsive-layout/step_03/android/gradle/wrapper/gradle-wrapper.properties b/animated-responsive-layout/step_03/android/gradle/wrapper/gradle-wrapper.properties index 7bb2df6ba6..afa1e8eb0a 100644 --- a/animated-responsive-layout/step_03/android/gradle/wrapper/gradle-wrapper.properties +++ b/animated-responsive-layout/step_03/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip diff --git a/animated-responsive-layout/step_03/android/settings.gradle b/animated-responsive-layout/step_03/android/settings.gradle deleted file mode 100644 index b9e43bd376..0000000000 --- a/animated-responsive-layout/step_03/android/settings.gradle +++ /dev/null @@ -1,25 +0,0 @@ -pluginManagement { - def flutterSdkPath = { - def properties = new Properties() - file("local.properties").withInputStream { properties.load(it) } - def flutterSdkPath = properties.getProperty("flutter.sdk") - assert flutterSdkPath != null, "flutter.sdk not set in local.properties" - return flutterSdkPath - }() - - includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") - - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} - -plugins { - id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.1.0" apply false - id "org.jetbrains.kotlin.android" version "1.8.22" apply false -} - -include ":app" diff --git a/animated-responsive-layout/step_03/android/settings.gradle.kts b/animated-responsive-layout/step_03/android/settings.gradle.kts new file mode 100644 index 0000000000..a439442c20 --- /dev/null +++ b/animated-responsive-layout/step_03/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.0" apply false + id("org.jetbrains.kotlin.android") version "1.8.22" apply false +} + +include(":app") diff --git a/animated-responsive-layout/step_05/android/app/build.gradle b/animated-responsive-layout/step_04/android/app/build.gradle.kts similarity index 84% rename from animated-responsive-layout/step_05/android/app/build.gradle rename to animated-responsive-layout/step_04/android/app/build.gradle.kts index 79a54d97fd..5643237de3 100644 --- a/animated-responsive-layout/step_05/android/app/build.gradle +++ b/animated-responsive-layout/step_04/android/app/build.gradle.kts @@ -1,8 +1,8 @@ plugins { - id "com.android.application" - id "kotlin-android" + id("com.android.application") + id("kotlin-android") // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. - id "dev.flutter.flutter-gradle-plugin" + id("dev.flutter.flutter-gradle-plugin") } android { @@ -16,7 +16,7 @@ android { } kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8 + jvmTarget = JavaVersion.VERSION_1_8.toString() } defaultConfig { @@ -34,7 +34,7 @@ android { release { // TODO: Add your own signing config for the release build. // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig = signingConfigs.debug + signingConfig = signingConfigs.getByName("debug") } } } diff --git a/animated-responsive-layout/step_04/android/build.gradle b/animated-responsive-layout/step_04/android/build.gradle deleted file mode 100644 index d2ffbffa4c..0000000000 --- a/animated-responsive-layout/step_04/android/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = "../build" -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(":app") -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/animated-responsive-layout/step_04/android/build.gradle.kts b/animated-responsive-layout/step_04/android/build.gradle.kts new file mode 100644 index 0000000000..89176ef44e --- /dev/null +++ b/animated-responsive-layout/step_04/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/animated-responsive-layout/step_04/android/gradle.properties b/animated-responsive-layout/step_04/android/gradle.properties index 2597170821..f018a61817 100644 --- a/animated-responsive-layout/step_04/android/gradle.properties +++ b/animated-responsive-layout/step_04/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/animated-responsive-layout/step_04/android/gradle/wrapper/gradle-wrapper.properties b/animated-responsive-layout/step_04/android/gradle/wrapper/gradle-wrapper.properties index 7bb2df6ba6..afa1e8eb0a 100644 --- a/animated-responsive-layout/step_04/android/gradle/wrapper/gradle-wrapper.properties +++ b/animated-responsive-layout/step_04/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip diff --git a/animated-responsive-layout/step_04/android/settings.gradle b/animated-responsive-layout/step_04/android/settings.gradle deleted file mode 100644 index b9e43bd376..0000000000 --- a/animated-responsive-layout/step_04/android/settings.gradle +++ /dev/null @@ -1,25 +0,0 @@ -pluginManagement { - def flutterSdkPath = { - def properties = new Properties() - file("local.properties").withInputStream { properties.load(it) } - def flutterSdkPath = properties.getProperty("flutter.sdk") - assert flutterSdkPath != null, "flutter.sdk not set in local.properties" - return flutterSdkPath - }() - - includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") - - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} - -plugins { - id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.1.0" apply false - id "org.jetbrains.kotlin.android" version "1.8.22" apply false -} - -include ":app" diff --git a/animated-responsive-layout/step_04/android/settings.gradle.kts b/animated-responsive-layout/step_04/android/settings.gradle.kts new file mode 100644 index 0000000000..a439442c20 --- /dev/null +++ b/animated-responsive-layout/step_04/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.0" apply false + id("org.jetbrains.kotlin.android") version "1.8.22" apply false +} + +include(":app") diff --git a/animated-responsive-layout/step_06/android/app/build.gradle b/animated-responsive-layout/step_05/android/app/build.gradle.kts similarity index 84% rename from animated-responsive-layout/step_06/android/app/build.gradle rename to animated-responsive-layout/step_05/android/app/build.gradle.kts index 79a54d97fd..5643237de3 100644 --- a/animated-responsive-layout/step_06/android/app/build.gradle +++ b/animated-responsive-layout/step_05/android/app/build.gradle.kts @@ -1,8 +1,8 @@ plugins { - id "com.android.application" - id "kotlin-android" + id("com.android.application") + id("kotlin-android") // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. - id "dev.flutter.flutter-gradle-plugin" + id("dev.flutter.flutter-gradle-plugin") } android { @@ -16,7 +16,7 @@ android { } kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8 + jvmTarget = JavaVersion.VERSION_1_8.toString() } defaultConfig { @@ -34,7 +34,7 @@ android { release { // TODO: Add your own signing config for the release build. // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig = signingConfigs.debug + signingConfig = signingConfigs.getByName("debug") } } } diff --git a/animated-responsive-layout/step_05/android/build.gradle b/animated-responsive-layout/step_05/android/build.gradle deleted file mode 100644 index d2ffbffa4c..0000000000 --- a/animated-responsive-layout/step_05/android/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = "../build" -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(":app") -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/animated-responsive-layout/step_05/android/build.gradle.kts b/animated-responsive-layout/step_05/android/build.gradle.kts new file mode 100644 index 0000000000..89176ef44e --- /dev/null +++ b/animated-responsive-layout/step_05/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/animated-responsive-layout/step_05/android/gradle.properties b/animated-responsive-layout/step_05/android/gradle.properties index 2597170821..f018a61817 100644 --- a/animated-responsive-layout/step_05/android/gradle.properties +++ b/animated-responsive-layout/step_05/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/animated-responsive-layout/step_05/android/gradle/wrapper/gradle-wrapper.properties b/animated-responsive-layout/step_05/android/gradle/wrapper/gradle-wrapper.properties index 7bb2df6ba6..afa1e8eb0a 100644 --- a/animated-responsive-layout/step_05/android/gradle/wrapper/gradle-wrapper.properties +++ b/animated-responsive-layout/step_05/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip diff --git a/animated-responsive-layout/step_05/android/settings.gradle b/animated-responsive-layout/step_05/android/settings.gradle deleted file mode 100644 index b9e43bd376..0000000000 --- a/animated-responsive-layout/step_05/android/settings.gradle +++ /dev/null @@ -1,25 +0,0 @@ -pluginManagement { - def flutterSdkPath = { - def properties = new Properties() - file("local.properties").withInputStream { properties.load(it) } - def flutterSdkPath = properties.getProperty("flutter.sdk") - assert flutterSdkPath != null, "flutter.sdk not set in local.properties" - return flutterSdkPath - }() - - includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") - - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} - -plugins { - id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.1.0" apply false - id "org.jetbrains.kotlin.android" version "1.8.22" apply false -} - -include ":app" diff --git a/animated-responsive-layout/step_05/android/settings.gradle.kts b/animated-responsive-layout/step_05/android/settings.gradle.kts new file mode 100644 index 0000000000..a439442c20 --- /dev/null +++ b/animated-responsive-layout/step_05/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.0" apply false + id("org.jetbrains.kotlin.android") version "1.8.22" apply false +} + +include(":app") diff --git a/animated-responsive-layout/step_04/android/app/build.gradle b/animated-responsive-layout/step_06/android/app/build.gradle.kts similarity index 84% rename from animated-responsive-layout/step_04/android/app/build.gradle rename to animated-responsive-layout/step_06/android/app/build.gradle.kts index 79a54d97fd..5643237de3 100644 --- a/animated-responsive-layout/step_04/android/app/build.gradle +++ b/animated-responsive-layout/step_06/android/app/build.gradle.kts @@ -1,8 +1,8 @@ plugins { - id "com.android.application" - id "kotlin-android" + id("com.android.application") + id("kotlin-android") // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. - id "dev.flutter.flutter-gradle-plugin" + id("dev.flutter.flutter-gradle-plugin") } android { @@ -16,7 +16,7 @@ android { } kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8 + jvmTarget = JavaVersion.VERSION_1_8.toString() } defaultConfig { @@ -34,7 +34,7 @@ android { release { // TODO: Add your own signing config for the release build. // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig = signingConfigs.debug + signingConfig = signingConfigs.getByName("debug") } } } diff --git a/animated-responsive-layout/step_06/android/build.gradle b/animated-responsive-layout/step_06/android/build.gradle deleted file mode 100644 index d2ffbffa4c..0000000000 --- a/animated-responsive-layout/step_06/android/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = "../build" -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(":app") -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/animated-responsive-layout/step_06/android/build.gradle.kts b/animated-responsive-layout/step_06/android/build.gradle.kts new file mode 100644 index 0000000000..89176ef44e --- /dev/null +++ b/animated-responsive-layout/step_06/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/animated-responsive-layout/step_06/android/gradle.properties b/animated-responsive-layout/step_06/android/gradle.properties index 2597170821..f018a61817 100644 --- a/animated-responsive-layout/step_06/android/gradle.properties +++ b/animated-responsive-layout/step_06/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/animated-responsive-layout/step_06/android/gradle/wrapper/gradle-wrapper.properties b/animated-responsive-layout/step_06/android/gradle/wrapper/gradle-wrapper.properties index 7bb2df6ba6..afa1e8eb0a 100644 --- a/animated-responsive-layout/step_06/android/gradle/wrapper/gradle-wrapper.properties +++ b/animated-responsive-layout/step_06/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip diff --git a/animated-responsive-layout/step_06/android/settings.gradle b/animated-responsive-layout/step_06/android/settings.gradle deleted file mode 100644 index b9e43bd376..0000000000 --- a/animated-responsive-layout/step_06/android/settings.gradle +++ /dev/null @@ -1,25 +0,0 @@ -pluginManagement { - def flutterSdkPath = { - def properties = new Properties() - file("local.properties").withInputStream { properties.load(it) } - def flutterSdkPath = properties.getProperty("flutter.sdk") - assert flutterSdkPath != null, "flutter.sdk not set in local.properties" - return flutterSdkPath - }() - - includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") - - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} - -plugins { - id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.1.0" apply false - id "org.jetbrains.kotlin.android" version "1.8.22" apply false -} - -include ":app" diff --git a/animated-responsive-layout/step_06/android/settings.gradle.kts b/animated-responsive-layout/step_06/android/settings.gradle.kts new file mode 100644 index 0000000000..a439442c20 --- /dev/null +++ b/animated-responsive-layout/step_06/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.0" apply false + id("org.jetbrains.kotlin.android") version "1.8.22" apply false +} + +include(":app") diff --git a/animated-responsive-layout/step_07/android/app/build.gradle b/animated-responsive-layout/step_07/android/app/build.gradle deleted file mode 100644 index 79a54d97fd..0000000000 --- a/animated-responsive-layout/step_07/android/app/build.gradle +++ /dev/null @@ -1,44 +0,0 @@ -plugins { - id "com.android.application" - id "kotlin-android" - // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. - id "dev.flutter.flutter-gradle-plugin" -} - -android { - namespace = "com.example.animated_responsive_layout" - compileSdk = flutter.compileSdkVersion - ndkVersion = flutter.ndkVersion - - compileOptions { - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 - } - - kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8 - } - - defaultConfig { - // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). - applicationId = "com.example.animated_responsive_layout" - // You can update the following values to match your application needs. - // For more information, see: https://flutter.dev/to/review-gradle-config. - minSdk = flutter.minSdkVersion - targetSdk = flutter.targetSdkVersion - versionCode = flutter.versionCode - versionName = flutter.versionName - } - - buildTypes { - release { - // TODO: Add your own signing config for the release build. - // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig = signingConfigs.debug - } - } -} - -flutter { - source = "../.." -} diff --git a/animated-responsive-layout/step_07/android/app/build.gradle.kts b/animated-responsive-layout/step_07/android/app/build.gradle.kts new file mode 100644 index 0000000000..5643237de3 --- /dev/null +++ b/animated-responsive-layout/step_07/android/app/build.gradle.kts @@ -0,0 +1,44 @@ +plugins { + id("com.android.application") + id("kotlin-android") + // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. + id("dev.flutter.flutter-gradle-plugin") +} + +android { + namespace = "com.example.animated_responsive_layout" + compileSdk = flutter.compileSdkVersion + ndkVersion = flutter.ndkVersion + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 + } + + kotlinOptions { + jvmTarget = JavaVersion.VERSION_1_8.toString() + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId = "com.example.animated_responsive_layout" + // You can update the following values to match your application needs. + // For more information, see: https://flutter.dev/to/review-gradle-config. + minSdk = flutter.minSdkVersion + targetSdk = flutter.targetSdkVersion + versionCode = flutter.versionCode + versionName = flutter.versionName + } + + buildTypes { + release { + // TODO: Add your own signing config for the release build. + // Signing with the debug keys for now, so `flutter run --release` works. + signingConfig = signingConfigs.getByName("debug") + } + } +} + +flutter { + source = "../.." +} diff --git a/animated-responsive-layout/step_07/android/build.gradle b/animated-responsive-layout/step_07/android/build.gradle deleted file mode 100644 index d2ffbffa4c..0000000000 --- a/animated-responsive-layout/step_07/android/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = "../build" -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(":app") -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/animated-responsive-layout/step_07/android/build.gradle.kts b/animated-responsive-layout/step_07/android/build.gradle.kts new file mode 100644 index 0000000000..89176ef44e --- /dev/null +++ b/animated-responsive-layout/step_07/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/animated-responsive-layout/step_07/android/gradle.properties b/animated-responsive-layout/step_07/android/gradle.properties index 2597170821..f018a61817 100644 --- a/animated-responsive-layout/step_07/android/gradle.properties +++ b/animated-responsive-layout/step_07/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/animated-responsive-layout/step_07/android/gradle/wrapper/gradle-wrapper.properties b/animated-responsive-layout/step_07/android/gradle/wrapper/gradle-wrapper.properties index 7bb2df6ba6..afa1e8eb0a 100644 --- a/animated-responsive-layout/step_07/android/gradle/wrapper/gradle-wrapper.properties +++ b/animated-responsive-layout/step_07/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip diff --git a/animated-responsive-layout/step_07/android/settings.gradle b/animated-responsive-layout/step_07/android/settings.gradle deleted file mode 100644 index b9e43bd376..0000000000 --- a/animated-responsive-layout/step_07/android/settings.gradle +++ /dev/null @@ -1,25 +0,0 @@ -pluginManagement { - def flutterSdkPath = { - def properties = new Properties() - file("local.properties").withInputStream { properties.load(it) } - def flutterSdkPath = properties.getProperty("flutter.sdk") - assert flutterSdkPath != null, "flutter.sdk not set in local.properties" - return flutterSdkPath - }() - - includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") - - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} - -plugins { - id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.1.0" apply false - id "org.jetbrains.kotlin.android" version "1.8.22" apply false -} - -include ":app" diff --git a/animated-responsive-layout/step_07/android/settings.gradle.kts b/animated-responsive-layout/step_07/android/settings.gradle.kts new file mode 100644 index 0000000000..a439442c20 --- /dev/null +++ b/animated-responsive-layout/step_07/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.0" apply false + id("org.jetbrains.kotlin.android") version "1.8.22" apply false +} + +include(":app") diff --git a/animated-responsive-layout/step_08/android/app/build.gradle b/animated-responsive-layout/step_08/android/app/build.gradle deleted file mode 100644 index 79a54d97fd..0000000000 --- a/animated-responsive-layout/step_08/android/app/build.gradle +++ /dev/null @@ -1,44 +0,0 @@ -plugins { - id "com.android.application" - id "kotlin-android" - // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. - id "dev.flutter.flutter-gradle-plugin" -} - -android { - namespace = "com.example.animated_responsive_layout" - compileSdk = flutter.compileSdkVersion - ndkVersion = flutter.ndkVersion - - compileOptions { - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 - } - - kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8 - } - - defaultConfig { - // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). - applicationId = "com.example.animated_responsive_layout" - // You can update the following values to match your application needs. - // For more information, see: https://flutter.dev/to/review-gradle-config. - minSdk = flutter.minSdkVersion - targetSdk = flutter.targetSdkVersion - versionCode = flutter.versionCode - versionName = flutter.versionName - } - - buildTypes { - release { - // TODO: Add your own signing config for the release build. - // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig = signingConfigs.debug - } - } -} - -flutter { - source = "../.." -} diff --git a/animated-responsive-layout/step_08/android/app/build.gradle.kts b/animated-responsive-layout/step_08/android/app/build.gradle.kts new file mode 100644 index 0000000000..5643237de3 --- /dev/null +++ b/animated-responsive-layout/step_08/android/app/build.gradle.kts @@ -0,0 +1,44 @@ +plugins { + id("com.android.application") + id("kotlin-android") + // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. + id("dev.flutter.flutter-gradle-plugin") +} + +android { + namespace = "com.example.animated_responsive_layout" + compileSdk = flutter.compileSdkVersion + ndkVersion = flutter.ndkVersion + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 + } + + kotlinOptions { + jvmTarget = JavaVersion.VERSION_1_8.toString() + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId = "com.example.animated_responsive_layout" + // You can update the following values to match your application needs. + // For more information, see: https://flutter.dev/to/review-gradle-config. + minSdk = flutter.minSdkVersion + targetSdk = flutter.targetSdkVersion + versionCode = flutter.versionCode + versionName = flutter.versionName + } + + buildTypes { + release { + // TODO: Add your own signing config for the release build. + // Signing with the debug keys for now, so `flutter run --release` works. + signingConfig = signingConfigs.getByName("debug") + } + } +} + +flutter { + source = "../.." +} diff --git a/animated-responsive-layout/step_08/android/build.gradle b/animated-responsive-layout/step_08/android/build.gradle deleted file mode 100644 index d2ffbffa4c..0000000000 --- a/animated-responsive-layout/step_08/android/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = "../build" -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(":app") -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/animated-responsive-layout/step_08/android/build.gradle.kts b/animated-responsive-layout/step_08/android/build.gradle.kts new file mode 100644 index 0000000000..89176ef44e --- /dev/null +++ b/animated-responsive-layout/step_08/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/animated-responsive-layout/step_08/android/gradle.properties b/animated-responsive-layout/step_08/android/gradle.properties index 2597170821..f018a61817 100644 --- a/animated-responsive-layout/step_08/android/gradle.properties +++ b/animated-responsive-layout/step_08/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/animated-responsive-layout/step_08/android/gradle/wrapper/gradle-wrapper.properties b/animated-responsive-layout/step_08/android/gradle/wrapper/gradle-wrapper.properties index 7bb2df6ba6..afa1e8eb0a 100644 --- a/animated-responsive-layout/step_08/android/gradle/wrapper/gradle-wrapper.properties +++ b/animated-responsive-layout/step_08/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip diff --git a/animated-responsive-layout/step_08/android/settings.gradle b/animated-responsive-layout/step_08/android/settings.gradle deleted file mode 100644 index b9e43bd376..0000000000 --- a/animated-responsive-layout/step_08/android/settings.gradle +++ /dev/null @@ -1,25 +0,0 @@ -pluginManagement { - def flutterSdkPath = { - def properties = new Properties() - file("local.properties").withInputStream { properties.load(it) } - def flutterSdkPath = properties.getProperty("flutter.sdk") - assert flutterSdkPath != null, "flutter.sdk not set in local.properties" - return flutterSdkPath - }() - - includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") - - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} - -plugins { - id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.1.0" apply false - id "org.jetbrains.kotlin.android" version "1.8.22" apply false -} - -include ":app" diff --git a/animated-responsive-layout/step_08/android/settings.gradle.kts b/animated-responsive-layout/step_08/android/settings.gradle.kts new file mode 100644 index 0000000000..a439442c20 --- /dev/null +++ b/animated-responsive-layout/step_08/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.0" apply false + id("org.jetbrains.kotlin.android") version "1.8.22" apply false +} + +include(":app") From 54ce1c832124ac913b524923c69f198d6b2db102 Mon Sep 17 00:00:00 2001 From: Brett Morgan Date: Thu, 14 Nov 2024 10:55:11 +1100 Subject: [PATCH 056/108] Update `animations` --- animations/step_02_a/.gitignore | 2 + animations/step_02_a/linux/CMakeLists.txt | 23 +--- .../step_02_a/linux/runner/CMakeLists.txt | 26 ++++ .../linux => step_02_a/linux/runner}/main.cc | 0 .../linux/runner}/my_application.cc | 6 + .../linux/runner}/my_application.h | 0 .../step_02_a/macos/Runner/AppDelegate.swift | 4 + animations/step_02_a/pubspec.yaml | 2 +- animations/step_02_a/web/index.html | 2 +- animations/step_02_b/.gitignore | 2 + animations/step_02_b/linux/CMakeLists.txt | 23 +--- .../step_02_b/linux/runner/CMakeLists.txt | 26 ++++ .../linux => step_02_b/linux/runner}/main.cc | 0 .../linux/runner}/my_application.cc | 6 + .../linux/runner}/my_application.h | 0 .../step_02_b/macos/Runner/AppDelegate.swift | 4 + animations/step_02_b/pubspec.yaml | 2 +- animations/step_02_b/web/index.html | 2 +- animations/step_02_c/.gitignore | 2 + animations/step_02_c/linux/CMakeLists.txt | 23 +--- .../step_02_c/linux/runner/CMakeLists.txt | 26 ++++ .../linux => step_02_c/linux/runner}/main.cc | 0 .../linux/runner}/my_application.cc | 6 + .../linux/runner}/my_application.h | 0 .../step_02_c/macos/Runner/AppDelegate.swift | 4 + animations/step_02_c/pubspec.yaml | 2 +- animations/step_02_c/web/index.html | 2 +- animations/step_02_d/.gitignore | 2 + animations/step_02_d/linux/CMakeLists.txt | 23 +--- animations/step_02_d/linux/my_application.cc | 124 ----------------- .../step_02_d/linux/runner/CMakeLists.txt | 26 ++++ .../linux => step_02_d/linux/runner}/main.cc | 0 .../linux/runner}/my_application.cc | 6 + .../linux/runner}/my_application.h | 0 .../step_02_d/macos/Runner/AppDelegate.swift | 4 + animations/step_02_d/pubspec.yaml | 2 +- animations/step_02_d/web/index.html | 2 +- animations/step_02_e/.gitignore | 2 + animations/step_02_e/linux/CMakeLists.txt | 23 +--- animations/step_02_e/linux/my_application.cc | 124 ----------------- .../step_02_e/linux/runner/CMakeLists.txt | 26 ++++ .../linux => step_02_e/linux/runner}/main.cc | 0 .../step_02_e/linux/runner/my_application.cc | 130 ++++++++++++++++++ .../linux/runner}/my_application.h | 0 .../step_02_e/macos/Runner/AppDelegate.swift | 4 + animations/step_02_e/pubspec.yaml | 2 +- animations/step_02_e/web/index.html | 2 +- animations/step_03/linux/my_application.cc | 124 ----------------- animations/step_03_a/.gitignore | 2 + animations/step_03_a/linux/CMakeLists.txt | 23 +--- animations/step_03_a/linux/my_application.cc | 124 ----------------- .../step_03_a/linux/runner/CMakeLists.txt | 26 ++++ .../linux => step_03_a/linux/runner}/main.cc | 0 .../step_03_a/linux/runner/my_application.cc | 130 ++++++++++++++++++ .../linux/runner}/my_application.h | 0 .../step_03_a/macos/Runner/AppDelegate.swift | 4 + animations/step_03_a/pubspec.yaml | 2 +- animations/step_03_a/web/index.html | 2 +- animations/step_03_b/.gitignore | 2 + animations/step_03_b/linux/CMakeLists.txt | 23 +--- animations/step_03_b/linux/my_application.cc | 124 ----------------- .../step_03_b/linux/runner/CMakeLists.txt | 26 ++++ .../linux => step_03_b/linux/runner}/main.cc | 0 .../step_03_b/linux/runner/my_application.cc | 130 ++++++++++++++++++ .../linux/runner}/my_application.h | 0 .../step_03_b/macos/Runner/AppDelegate.swift | 4 + animations/step_03_b/pubspec.yaml | 2 +- animations/step_03_b/web/index.html | 2 +- animations/step_03_c/.gitignore | 2 + animations/step_03_c/linux/CMakeLists.txt | 23 +--- animations/step_03_c/linux/my_application.cc | 124 ----------------- .../step_03_c/linux/runner/CMakeLists.txt | 26 ++++ .../linux => step_03_c/linux/runner}/main.cc | 0 .../step_03_c/linux/runner/my_application.cc | 130 ++++++++++++++++++ .../linux/runner}/my_application.h | 0 .../step_03_c/macos/Runner/AppDelegate.swift | 4 + animations/step_03_c/pubspec.yaml | 2 +- animations/step_03_c/web/index.html | 2 +- animations/step_03_d/.gitignore | 2 + animations/step_03_d/linux/CMakeLists.txt | 23 +--- animations/step_03_d/linux/my_application.cc | 124 ----------------- .../step_03_d/linux/runner/CMakeLists.txt | 26 ++++ .../linux => step_03_d/linux/runner}/main.cc | 0 .../step_03_d/linux/runner/my_application.cc | 130 ++++++++++++++++++ .../linux/runner}/my_application.h | 0 .../step_03_d/macos/Runner/AppDelegate.swift | 4 + animations/step_03_d/pubspec.yaml | 2 +- animations/step_03_d/web/index.html | 2 +- animations/step_04/linux/my_application.cc | 124 ----------------- animations/step_04_a/.gitignore | 2 + animations/step_04_a/linux/CMakeLists.txt | 23 +--- animations/step_04_a/linux/my_application.cc | 124 ----------------- .../step_04_a/linux/runner/CMakeLists.txt | 26 ++++ .../linux => step_04_a/linux/runner}/main.cc | 0 .../step_04_a/linux/runner/my_application.cc | 130 ++++++++++++++++++ .../linux/runner}/my_application.h | 0 .../step_04_a/macos/Runner/AppDelegate.swift | 4 + animations/step_04_a/pubspec.yaml | 2 +- animations/step_04_a/web/index.html | 2 +- animations/step_04_b/.gitignore | 2 + animations/step_04_b/linux/CMakeLists.txt | 23 +--- animations/step_04_b/linux/main.cc | 6 - animations/step_04_b/linux/my_application.cc | 124 ----------------- animations/step_04_b/linux/my_application.h | 18 --- .../step_04_b/linux/runner/CMakeLists.txt | 26 ++++ .../linux => step_04_b/linux/runner}/main.cc | 0 .../step_04_b/linux/runner/my_application.cc | 130 ++++++++++++++++++ .../linux/runner}/my_application.h | 0 .../step_04_b/macos/Runner/AppDelegate.swift | 4 + animations/step_04_b/pubspec.yaml | 2 +- animations/step_04_b/web/index.html | 2 +- animations/step_04_c/.gitignore | 2 + animations/step_04_c/linux/CMakeLists.txt | 23 +--- animations/step_04_c/linux/main.cc | 6 - animations/step_04_c/linux/my_application.cc | 124 ----------------- animations/step_04_c/linux/my_application.h | 18 --- .../step_04_c/linux/runner/CMakeLists.txt | 26 ++++ .../linux => step_04_c/linux/runner}/main.cc | 0 .../step_04_c/linux/runner/my_application.cc | 130 ++++++++++++++++++ .../linux/runner}/my_application.h | 0 .../step_04_c/macos/Runner/AppDelegate.swift | 4 + animations/step_04_c/pubspec.yaml | 2 +- animations/step_04_c/web/index.html | 2 +- animations/step_04_d/.gitignore | 2 + animations/step_04_d/linux/CMakeLists.txt | 23 +--- animations/step_04_d/linux/main.cc | 6 - animations/step_04_d/linux/my_application.cc | 124 ----------------- animations/step_04_d/linux/my_application.h | 18 --- .../step_04_d/linux/runner/CMakeLists.txt | 26 ++++ .../linux => step_04_d/linux/runner}/main.cc | 0 .../step_04_d/linux/runner/my_application.cc | 130 ++++++++++++++++++ .../linux/runner}/my_application.h | 0 .../step_04_d/macos/Runner/AppDelegate.swift | 4 + animations/step_04_d/pubspec.yaml | 2 +- animations/step_04_d/web/index.html | 2 +- animations/step_05/linux/main.cc | 6 - animations/step_05/linux/my_application.cc | 124 ----------------- animations/step_05/linux/my_application.h | 18 --- 138 files changed, 1675 insertions(+), 1994 deletions(-) create mode 100644 animations/step_02_a/linux/runner/CMakeLists.txt rename animations/{step_02/linux => step_02_a/linux/runner}/main.cc (100%) rename animations/{step_02/linux => step_02_a/linux/runner}/my_application.cc (93%) rename animations/{step_02/linux => step_02_a/linux/runner}/my_application.h (100%) create mode 100644 animations/step_02_b/linux/runner/CMakeLists.txt rename animations/{step_02_a/linux => step_02_b/linux/runner}/main.cc (100%) rename animations/{step_02_a/linux => step_02_b/linux/runner}/my_application.cc (93%) rename animations/{step_02_a/linux => step_02_b/linux/runner}/my_application.h (100%) create mode 100644 animations/step_02_c/linux/runner/CMakeLists.txt rename animations/{step_02_b/linux => step_02_c/linux/runner}/main.cc (100%) rename animations/{step_02_b/linux => step_02_c/linux/runner}/my_application.cc (93%) rename animations/{step_02_b/linux => step_02_c/linux/runner}/my_application.h (100%) delete mode 100644 animations/step_02_d/linux/my_application.cc create mode 100644 animations/step_02_d/linux/runner/CMakeLists.txt rename animations/{step_02_c/linux => step_02_d/linux/runner}/main.cc (100%) rename animations/{step_02_c/linux => step_02_d/linux/runner}/my_application.cc (93%) rename animations/{step_02_c/linux => step_02_d/linux/runner}/my_application.h (100%) delete mode 100644 animations/step_02_e/linux/my_application.cc create mode 100644 animations/step_02_e/linux/runner/CMakeLists.txt rename animations/{step_02_d/linux => step_02_e/linux/runner}/main.cc (100%) create mode 100644 animations/step_02_e/linux/runner/my_application.cc rename animations/{step_02_d/linux => step_02_e/linux/runner}/my_application.h (100%) delete mode 100644 animations/step_03/linux/my_application.cc delete mode 100644 animations/step_03_a/linux/my_application.cc create mode 100644 animations/step_03_a/linux/runner/CMakeLists.txt rename animations/{step_02_e/linux => step_03_a/linux/runner}/main.cc (100%) create mode 100644 animations/step_03_a/linux/runner/my_application.cc rename animations/{step_02_e/linux => step_03_a/linux/runner}/my_application.h (100%) delete mode 100644 animations/step_03_b/linux/my_application.cc create mode 100644 animations/step_03_b/linux/runner/CMakeLists.txt rename animations/{step_03/linux => step_03_b/linux/runner}/main.cc (100%) create mode 100644 animations/step_03_b/linux/runner/my_application.cc rename animations/{step_03/linux => step_03_b/linux/runner}/my_application.h (100%) delete mode 100644 animations/step_03_c/linux/my_application.cc create mode 100644 animations/step_03_c/linux/runner/CMakeLists.txt rename animations/{step_03_a/linux => step_03_c/linux/runner}/main.cc (100%) create mode 100644 animations/step_03_c/linux/runner/my_application.cc rename animations/{step_03_a/linux => step_03_c/linux/runner}/my_application.h (100%) delete mode 100644 animations/step_03_d/linux/my_application.cc create mode 100644 animations/step_03_d/linux/runner/CMakeLists.txt rename animations/{step_03_b/linux => step_03_d/linux/runner}/main.cc (100%) create mode 100644 animations/step_03_d/linux/runner/my_application.cc rename animations/{step_03_b/linux => step_03_d/linux/runner}/my_application.h (100%) delete mode 100644 animations/step_04/linux/my_application.cc delete mode 100644 animations/step_04_a/linux/my_application.cc create mode 100644 animations/step_04_a/linux/runner/CMakeLists.txt rename animations/{step_03_c/linux => step_04_a/linux/runner}/main.cc (100%) create mode 100644 animations/step_04_a/linux/runner/my_application.cc rename animations/{step_03_c/linux => step_04_a/linux/runner}/my_application.h (100%) delete mode 100644 animations/step_04_b/linux/main.cc delete mode 100644 animations/step_04_b/linux/my_application.cc delete mode 100644 animations/step_04_b/linux/my_application.h create mode 100644 animations/step_04_b/linux/runner/CMakeLists.txt rename animations/{step_03_d/linux => step_04_b/linux/runner}/main.cc (100%) create mode 100644 animations/step_04_b/linux/runner/my_application.cc rename animations/{step_03_d/linux => step_04_b/linux/runner}/my_application.h (100%) delete mode 100644 animations/step_04_c/linux/main.cc delete mode 100644 animations/step_04_c/linux/my_application.cc delete mode 100644 animations/step_04_c/linux/my_application.h create mode 100644 animations/step_04_c/linux/runner/CMakeLists.txt rename animations/{step_04/linux => step_04_c/linux/runner}/main.cc (100%) create mode 100644 animations/step_04_c/linux/runner/my_application.cc rename animations/{step_04/linux => step_04_c/linux/runner}/my_application.h (100%) delete mode 100644 animations/step_04_d/linux/main.cc delete mode 100644 animations/step_04_d/linux/my_application.cc delete mode 100644 animations/step_04_d/linux/my_application.h create mode 100644 animations/step_04_d/linux/runner/CMakeLists.txt rename animations/{step_04_a/linux => step_04_d/linux/runner}/main.cc (100%) create mode 100644 animations/step_04_d/linux/runner/my_application.cc rename animations/{step_04_a/linux => step_04_d/linux/runner}/my_application.h (100%) delete mode 100644 animations/step_05/linux/main.cc delete mode 100644 animations/step_05/linux/my_application.cc delete mode 100644 animations/step_05/linux/my_application.h diff --git a/animations/step_02_a/.gitignore b/animations/step_02_a/.gitignore index 29a3a5017f..79c113f9b5 100644 --- a/animations/step_02_a/.gitignore +++ b/animations/step_02_a/.gitignore @@ -5,9 +5,11 @@ *.swp .DS_Store .atom/ +.build/ .buildlog/ .history .svn/ +.swiftpm/ migrate_working_dir/ # IntelliJ related diff --git a/animations/step_02_a/linux/CMakeLists.txt b/animations/step_02_a/linux/CMakeLists.txt index 658be85ac5..7caf822271 100644 --- a/animations/step_02_a/linux/CMakeLists.txt +++ b/animations/step_02_a/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/animations/step_02_a/linux/runner/CMakeLists.txt b/animations/step_02_a/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/animations/step_02_a/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/animations/step_02/linux/main.cc b/animations/step_02_a/linux/runner/main.cc similarity index 100% rename from animations/step_02/linux/main.cc rename to animations/step_02_a/linux/runner/main.cc diff --git a/animations/step_02/linux/my_application.cc b/animations/step_02_a/linux/runner/my_application.cc similarity index 93% rename from animations/step_02/linux/my_application.cc rename to animations/step_02_a/linux/runner/my_application.cc index d6ea0e3c5f..0040d7e46c 100644 --- a/animations/step_02/linux/my_application.cc +++ b/animations/step_02_a/linux/runner/my_application.cc @@ -117,6 +117,12 @@ static void my_application_class_init(MyApplicationClass* klass) { static void my_application_init(MyApplication* self) {} MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + return MY_APPLICATION(g_object_new(my_application_get_type(), "application-id", APPLICATION_ID, "flags", G_APPLICATION_NON_UNIQUE, diff --git a/animations/step_02/linux/my_application.h b/animations/step_02_a/linux/runner/my_application.h similarity index 100% rename from animations/step_02/linux/my_application.h rename to animations/step_02_a/linux/runner/my_application.h diff --git a/animations/step_02_a/macos/Runner/AppDelegate.swift b/animations/step_02_a/macos/Runner/AppDelegate.swift index 8e02df2888..b3c1761412 100644 --- a/animations/step_02_a/macos/Runner/AppDelegate.swift +++ b/animations/step_02_a/macos/Runner/AppDelegate.swift @@ -6,4 +6,8 @@ class AppDelegate: FlutterAppDelegate { override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { return true } + + override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { + return true + } } diff --git a/animations/step_02_a/pubspec.yaml b/animations/step_02_a/pubspec.yaml index 52735dfa55..f3328a6945 100644 --- a/animations/step_02_a/pubspec.yaml +++ b/animations/step_02_a/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: "none" version: 1.0.0 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 dependencies: animations: ^2.0.0 diff --git a/animations/step_02_a/web/index.html b/animations/step_02_a/web/index.html index 89656d9a06..ec05768c59 100644 --- a/animations/step_02_a/web/index.html +++ b/animations/step_02_a/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/animations/step_02_b/.gitignore b/animations/step_02_b/.gitignore index 29a3a5017f..79c113f9b5 100644 --- a/animations/step_02_b/.gitignore +++ b/animations/step_02_b/.gitignore @@ -5,9 +5,11 @@ *.swp .DS_Store .atom/ +.build/ .buildlog/ .history .svn/ +.swiftpm/ migrate_working_dir/ # IntelliJ related diff --git a/animations/step_02_b/linux/CMakeLists.txt b/animations/step_02_b/linux/CMakeLists.txt index 658be85ac5..7caf822271 100644 --- a/animations/step_02_b/linux/CMakeLists.txt +++ b/animations/step_02_b/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/animations/step_02_b/linux/runner/CMakeLists.txt b/animations/step_02_b/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/animations/step_02_b/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/animations/step_02_a/linux/main.cc b/animations/step_02_b/linux/runner/main.cc similarity index 100% rename from animations/step_02_a/linux/main.cc rename to animations/step_02_b/linux/runner/main.cc diff --git a/animations/step_02_a/linux/my_application.cc b/animations/step_02_b/linux/runner/my_application.cc similarity index 93% rename from animations/step_02_a/linux/my_application.cc rename to animations/step_02_b/linux/runner/my_application.cc index d6ea0e3c5f..0040d7e46c 100644 --- a/animations/step_02_a/linux/my_application.cc +++ b/animations/step_02_b/linux/runner/my_application.cc @@ -117,6 +117,12 @@ static void my_application_class_init(MyApplicationClass* klass) { static void my_application_init(MyApplication* self) {} MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + return MY_APPLICATION(g_object_new(my_application_get_type(), "application-id", APPLICATION_ID, "flags", G_APPLICATION_NON_UNIQUE, diff --git a/animations/step_02_a/linux/my_application.h b/animations/step_02_b/linux/runner/my_application.h similarity index 100% rename from animations/step_02_a/linux/my_application.h rename to animations/step_02_b/linux/runner/my_application.h diff --git a/animations/step_02_b/macos/Runner/AppDelegate.swift b/animations/step_02_b/macos/Runner/AppDelegate.swift index 8e02df2888..b3c1761412 100644 --- a/animations/step_02_b/macos/Runner/AppDelegate.swift +++ b/animations/step_02_b/macos/Runner/AppDelegate.swift @@ -6,4 +6,8 @@ class AppDelegate: FlutterAppDelegate { override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { return true } + + override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { + return true + } } diff --git a/animations/step_02_b/pubspec.yaml b/animations/step_02_b/pubspec.yaml index 52735dfa55..f3328a6945 100644 --- a/animations/step_02_b/pubspec.yaml +++ b/animations/step_02_b/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: "none" version: 1.0.0 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 dependencies: animations: ^2.0.0 diff --git a/animations/step_02_b/web/index.html b/animations/step_02_b/web/index.html index 89656d9a06..ec05768c59 100644 --- a/animations/step_02_b/web/index.html +++ b/animations/step_02_b/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/animations/step_02_c/.gitignore b/animations/step_02_c/.gitignore index 29a3a5017f..79c113f9b5 100644 --- a/animations/step_02_c/.gitignore +++ b/animations/step_02_c/.gitignore @@ -5,9 +5,11 @@ *.swp .DS_Store .atom/ +.build/ .buildlog/ .history .svn/ +.swiftpm/ migrate_working_dir/ # IntelliJ related diff --git a/animations/step_02_c/linux/CMakeLists.txt b/animations/step_02_c/linux/CMakeLists.txt index 658be85ac5..7caf822271 100644 --- a/animations/step_02_c/linux/CMakeLists.txt +++ b/animations/step_02_c/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/animations/step_02_c/linux/runner/CMakeLists.txt b/animations/step_02_c/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/animations/step_02_c/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/animations/step_02_b/linux/main.cc b/animations/step_02_c/linux/runner/main.cc similarity index 100% rename from animations/step_02_b/linux/main.cc rename to animations/step_02_c/linux/runner/main.cc diff --git a/animations/step_02_b/linux/my_application.cc b/animations/step_02_c/linux/runner/my_application.cc similarity index 93% rename from animations/step_02_b/linux/my_application.cc rename to animations/step_02_c/linux/runner/my_application.cc index d6ea0e3c5f..0040d7e46c 100644 --- a/animations/step_02_b/linux/my_application.cc +++ b/animations/step_02_c/linux/runner/my_application.cc @@ -117,6 +117,12 @@ static void my_application_class_init(MyApplicationClass* klass) { static void my_application_init(MyApplication* self) {} MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + return MY_APPLICATION(g_object_new(my_application_get_type(), "application-id", APPLICATION_ID, "flags", G_APPLICATION_NON_UNIQUE, diff --git a/animations/step_02_b/linux/my_application.h b/animations/step_02_c/linux/runner/my_application.h similarity index 100% rename from animations/step_02_b/linux/my_application.h rename to animations/step_02_c/linux/runner/my_application.h diff --git a/animations/step_02_c/macos/Runner/AppDelegate.swift b/animations/step_02_c/macos/Runner/AppDelegate.swift index 8e02df2888..b3c1761412 100644 --- a/animations/step_02_c/macos/Runner/AppDelegate.swift +++ b/animations/step_02_c/macos/Runner/AppDelegate.swift @@ -6,4 +6,8 @@ class AppDelegate: FlutterAppDelegate { override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { return true } + + override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { + return true + } } diff --git a/animations/step_02_c/pubspec.yaml b/animations/step_02_c/pubspec.yaml index 52735dfa55..f3328a6945 100644 --- a/animations/step_02_c/pubspec.yaml +++ b/animations/step_02_c/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: "none" version: 1.0.0 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 dependencies: animations: ^2.0.0 diff --git a/animations/step_02_c/web/index.html b/animations/step_02_c/web/index.html index 89656d9a06..ec05768c59 100644 --- a/animations/step_02_c/web/index.html +++ b/animations/step_02_c/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/animations/step_02_d/.gitignore b/animations/step_02_d/.gitignore index 29a3a5017f..79c113f9b5 100644 --- a/animations/step_02_d/.gitignore +++ b/animations/step_02_d/.gitignore @@ -5,9 +5,11 @@ *.swp .DS_Store .atom/ +.build/ .buildlog/ .history .svn/ +.swiftpm/ migrate_working_dir/ # IntelliJ related diff --git a/animations/step_02_d/linux/CMakeLists.txt b/animations/step_02_d/linux/CMakeLists.txt index 658be85ac5..7caf822271 100644 --- a/animations/step_02_d/linux/CMakeLists.txt +++ b/animations/step_02_d/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/animations/step_02_d/linux/my_application.cc b/animations/step_02_d/linux/my_application.cc deleted file mode 100644 index d6ea0e3c5f..0000000000 --- a/animations/step_02_d/linux/my_application.cc +++ /dev/null @@ -1,124 +0,0 @@ -#include "my_application.h" - -#include -#ifdef GDK_WINDOWING_X11 -#include -#endif - -#include "flutter/generated_plugin_registrant.h" - -struct _MyApplication { - GtkApplication parent_instance; - char** dart_entrypoint_arguments; -}; - -G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) - -// Implements GApplication::activate. -static void my_application_activate(GApplication* application) { - MyApplication* self = MY_APPLICATION(application); - GtkWindow* window = - GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); - - // Use a header bar when running in GNOME as this is the common style used - // by applications and is the setup most users will be using (e.g. Ubuntu - // desktop). - // If running on X and not using GNOME then just use a traditional title bar - // in case the window manager does more exotic layout, e.g. tiling. - // If running on Wayland assume the header bar will work (may need changing - // if future cases occur). - gboolean use_header_bar = TRUE; -#ifdef GDK_WINDOWING_X11 - GdkScreen* screen = gtk_window_get_screen(window); - if (GDK_IS_X11_SCREEN(screen)) { - const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); - if (g_strcmp0(wm_name, "GNOME Shell") != 0) { - use_header_bar = FALSE; - } - } -#endif - if (use_header_bar) { - GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); - gtk_widget_show(GTK_WIDGET(header_bar)); - gtk_header_bar_set_title(header_bar, "quiz"); - gtk_header_bar_set_show_close_button(header_bar, TRUE); - gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); - } else { - gtk_window_set_title(window, "quiz"); - } - - gtk_window_set_default_size(window, 1280, 720); - gtk_widget_show(GTK_WIDGET(window)); - - g_autoptr(FlDartProject) project = fl_dart_project_new(); - fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); - - FlView* view = fl_view_new(project); - gtk_widget_show(GTK_WIDGET(view)); - gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); - - fl_register_plugins(FL_PLUGIN_REGISTRY(view)); - - gtk_widget_grab_focus(GTK_WIDGET(view)); -} - -// Implements GApplication::local_command_line. -static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { - MyApplication* self = MY_APPLICATION(application); - // Strip out the first argument as it is the binary name. - self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); - - g_autoptr(GError) error = nullptr; - if (!g_application_register(application, nullptr, &error)) { - g_warning("Failed to register: %s", error->message); - *exit_status = 1; - return TRUE; - } - - g_application_activate(application); - *exit_status = 0; - - return TRUE; -} - -// Implements GApplication::startup. -static void my_application_startup(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application startup. - - G_APPLICATION_CLASS(my_application_parent_class)->startup(application); -} - -// Implements GApplication::shutdown. -static void my_application_shutdown(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application shutdown. - - G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); -} - -// Implements GObject::dispose. -static void my_application_dispose(GObject* object) { - MyApplication* self = MY_APPLICATION(object); - g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); - G_OBJECT_CLASS(my_application_parent_class)->dispose(object); -} - -static void my_application_class_init(MyApplicationClass* klass) { - G_APPLICATION_CLASS(klass)->activate = my_application_activate; - G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; - G_APPLICATION_CLASS(klass)->startup = my_application_startup; - G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; - G_OBJECT_CLASS(klass)->dispose = my_application_dispose; -} - -static void my_application_init(MyApplication* self) {} - -MyApplication* my_application_new() { - return MY_APPLICATION(g_object_new(my_application_get_type(), - "application-id", APPLICATION_ID, - "flags", G_APPLICATION_NON_UNIQUE, - nullptr)); -} diff --git a/animations/step_02_d/linux/runner/CMakeLists.txt b/animations/step_02_d/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/animations/step_02_d/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/animations/step_02_c/linux/main.cc b/animations/step_02_d/linux/runner/main.cc similarity index 100% rename from animations/step_02_c/linux/main.cc rename to animations/step_02_d/linux/runner/main.cc diff --git a/animations/step_02_c/linux/my_application.cc b/animations/step_02_d/linux/runner/my_application.cc similarity index 93% rename from animations/step_02_c/linux/my_application.cc rename to animations/step_02_d/linux/runner/my_application.cc index d6ea0e3c5f..0040d7e46c 100644 --- a/animations/step_02_c/linux/my_application.cc +++ b/animations/step_02_d/linux/runner/my_application.cc @@ -117,6 +117,12 @@ static void my_application_class_init(MyApplicationClass* klass) { static void my_application_init(MyApplication* self) {} MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + return MY_APPLICATION(g_object_new(my_application_get_type(), "application-id", APPLICATION_ID, "flags", G_APPLICATION_NON_UNIQUE, diff --git a/animations/step_02_c/linux/my_application.h b/animations/step_02_d/linux/runner/my_application.h similarity index 100% rename from animations/step_02_c/linux/my_application.h rename to animations/step_02_d/linux/runner/my_application.h diff --git a/animations/step_02_d/macos/Runner/AppDelegate.swift b/animations/step_02_d/macos/Runner/AppDelegate.swift index 8e02df2888..b3c1761412 100644 --- a/animations/step_02_d/macos/Runner/AppDelegate.swift +++ b/animations/step_02_d/macos/Runner/AppDelegate.swift @@ -6,4 +6,8 @@ class AppDelegate: FlutterAppDelegate { override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { return true } + + override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { + return true + } } diff --git a/animations/step_02_d/pubspec.yaml b/animations/step_02_d/pubspec.yaml index 52735dfa55..f3328a6945 100644 --- a/animations/step_02_d/pubspec.yaml +++ b/animations/step_02_d/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: "none" version: 1.0.0 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 dependencies: animations: ^2.0.0 diff --git a/animations/step_02_d/web/index.html b/animations/step_02_d/web/index.html index 89656d9a06..ec05768c59 100644 --- a/animations/step_02_d/web/index.html +++ b/animations/step_02_d/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/animations/step_02_e/.gitignore b/animations/step_02_e/.gitignore index 29a3a5017f..79c113f9b5 100644 --- a/animations/step_02_e/.gitignore +++ b/animations/step_02_e/.gitignore @@ -5,9 +5,11 @@ *.swp .DS_Store .atom/ +.build/ .buildlog/ .history .svn/ +.swiftpm/ migrate_working_dir/ # IntelliJ related diff --git a/animations/step_02_e/linux/CMakeLists.txt b/animations/step_02_e/linux/CMakeLists.txt index 658be85ac5..7caf822271 100644 --- a/animations/step_02_e/linux/CMakeLists.txt +++ b/animations/step_02_e/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/animations/step_02_e/linux/my_application.cc b/animations/step_02_e/linux/my_application.cc deleted file mode 100644 index d6ea0e3c5f..0000000000 --- a/animations/step_02_e/linux/my_application.cc +++ /dev/null @@ -1,124 +0,0 @@ -#include "my_application.h" - -#include -#ifdef GDK_WINDOWING_X11 -#include -#endif - -#include "flutter/generated_plugin_registrant.h" - -struct _MyApplication { - GtkApplication parent_instance; - char** dart_entrypoint_arguments; -}; - -G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) - -// Implements GApplication::activate. -static void my_application_activate(GApplication* application) { - MyApplication* self = MY_APPLICATION(application); - GtkWindow* window = - GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); - - // Use a header bar when running in GNOME as this is the common style used - // by applications and is the setup most users will be using (e.g. Ubuntu - // desktop). - // If running on X and not using GNOME then just use a traditional title bar - // in case the window manager does more exotic layout, e.g. tiling. - // If running on Wayland assume the header bar will work (may need changing - // if future cases occur). - gboolean use_header_bar = TRUE; -#ifdef GDK_WINDOWING_X11 - GdkScreen* screen = gtk_window_get_screen(window); - if (GDK_IS_X11_SCREEN(screen)) { - const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); - if (g_strcmp0(wm_name, "GNOME Shell") != 0) { - use_header_bar = FALSE; - } - } -#endif - if (use_header_bar) { - GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); - gtk_widget_show(GTK_WIDGET(header_bar)); - gtk_header_bar_set_title(header_bar, "quiz"); - gtk_header_bar_set_show_close_button(header_bar, TRUE); - gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); - } else { - gtk_window_set_title(window, "quiz"); - } - - gtk_window_set_default_size(window, 1280, 720); - gtk_widget_show(GTK_WIDGET(window)); - - g_autoptr(FlDartProject) project = fl_dart_project_new(); - fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); - - FlView* view = fl_view_new(project); - gtk_widget_show(GTK_WIDGET(view)); - gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); - - fl_register_plugins(FL_PLUGIN_REGISTRY(view)); - - gtk_widget_grab_focus(GTK_WIDGET(view)); -} - -// Implements GApplication::local_command_line. -static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { - MyApplication* self = MY_APPLICATION(application); - // Strip out the first argument as it is the binary name. - self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); - - g_autoptr(GError) error = nullptr; - if (!g_application_register(application, nullptr, &error)) { - g_warning("Failed to register: %s", error->message); - *exit_status = 1; - return TRUE; - } - - g_application_activate(application); - *exit_status = 0; - - return TRUE; -} - -// Implements GApplication::startup. -static void my_application_startup(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application startup. - - G_APPLICATION_CLASS(my_application_parent_class)->startup(application); -} - -// Implements GApplication::shutdown. -static void my_application_shutdown(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application shutdown. - - G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); -} - -// Implements GObject::dispose. -static void my_application_dispose(GObject* object) { - MyApplication* self = MY_APPLICATION(object); - g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); - G_OBJECT_CLASS(my_application_parent_class)->dispose(object); -} - -static void my_application_class_init(MyApplicationClass* klass) { - G_APPLICATION_CLASS(klass)->activate = my_application_activate; - G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; - G_APPLICATION_CLASS(klass)->startup = my_application_startup; - G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; - G_OBJECT_CLASS(klass)->dispose = my_application_dispose; -} - -static void my_application_init(MyApplication* self) {} - -MyApplication* my_application_new() { - return MY_APPLICATION(g_object_new(my_application_get_type(), - "application-id", APPLICATION_ID, - "flags", G_APPLICATION_NON_UNIQUE, - nullptr)); -} diff --git a/animations/step_02_e/linux/runner/CMakeLists.txt b/animations/step_02_e/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/animations/step_02_e/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/animations/step_02_d/linux/main.cc b/animations/step_02_e/linux/runner/main.cc similarity index 100% rename from animations/step_02_d/linux/main.cc rename to animations/step_02_e/linux/runner/main.cc diff --git a/animations/step_02_e/linux/runner/my_application.cc b/animations/step_02_e/linux/runner/my_application.cc new file mode 100644 index 0000000000..0040d7e46c --- /dev/null +++ b/animations/step_02_e/linux/runner/my_application.cc @@ -0,0 +1,130 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "quiz"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "quiz"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/animations/step_02_d/linux/my_application.h b/animations/step_02_e/linux/runner/my_application.h similarity index 100% rename from animations/step_02_d/linux/my_application.h rename to animations/step_02_e/linux/runner/my_application.h diff --git a/animations/step_02_e/macos/Runner/AppDelegate.swift b/animations/step_02_e/macos/Runner/AppDelegate.swift index 8e02df2888..b3c1761412 100644 --- a/animations/step_02_e/macos/Runner/AppDelegate.swift +++ b/animations/step_02_e/macos/Runner/AppDelegate.swift @@ -6,4 +6,8 @@ class AppDelegate: FlutterAppDelegate { override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { return true } + + override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { + return true + } } diff --git a/animations/step_02_e/pubspec.yaml b/animations/step_02_e/pubspec.yaml index 52735dfa55..f3328a6945 100644 --- a/animations/step_02_e/pubspec.yaml +++ b/animations/step_02_e/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: "none" version: 1.0.0 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 dependencies: animations: ^2.0.0 diff --git a/animations/step_02_e/web/index.html b/animations/step_02_e/web/index.html index 89656d9a06..ec05768c59 100644 --- a/animations/step_02_e/web/index.html +++ b/animations/step_02_e/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/animations/step_03/linux/my_application.cc b/animations/step_03/linux/my_application.cc deleted file mode 100644 index d6ea0e3c5f..0000000000 --- a/animations/step_03/linux/my_application.cc +++ /dev/null @@ -1,124 +0,0 @@ -#include "my_application.h" - -#include -#ifdef GDK_WINDOWING_X11 -#include -#endif - -#include "flutter/generated_plugin_registrant.h" - -struct _MyApplication { - GtkApplication parent_instance; - char** dart_entrypoint_arguments; -}; - -G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) - -// Implements GApplication::activate. -static void my_application_activate(GApplication* application) { - MyApplication* self = MY_APPLICATION(application); - GtkWindow* window = - GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); - - // Use a header bar when running in GNOME as this is the common style used - // by applications and is the setup most users will be using (e.g. Ubuntu - // desktop). - // If running on X and not using GNOME then just use a traditional title bar - // in case the window manager does more exotic layout, e.g. tiling. - // If running on Wayland assume the header bar will work (may need changing - // if future cases occur). - gboolean use_header_bar = TRUE; -#ifdef GDK_WINDOWING_X11 - GdkScreen* screen = gtk_window_get_screen(window); - if (GDK_IS_X11_SCREEN(screen)) { - const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); - if (g_strcmp0(wm_name, "GNOME Shell") != 0) { - use_header_bar = FALSE; - } - } -#endif - if (use_header_bar) { - GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); - gtk_widget_show(GTK_WIDGET(header_bar)); - gtk_header_bar_set_title(header_bar, "quiz"); - gtk_header_bar_set_show_close_button(header_bar, TRUE); - gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); - } else { - gtk_window_set_title(window, "quiz"); - } - - gtk_window_set_default_size(window, 1280, 720); - gtk_widget_show(GTK_WIDGET(window)); - - g_autoptr(FlDartProject) project = fl_dart_project_new(); - fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); - - FlView* view = fl_view_new(project); - gtk_widget_show(GTK_WIDGET(view)); - gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); - - fl_register_plugins(FL_PLUGIN_REGISTRY(view)); - - gtk_widget_grab_focus(GTK_WIDGET(view)); -} - -// Implements GApplication::local_command_line. -static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { - MyApplication* self = MY_APPLICATION(application); - // Strip out the first argument as it is the binary name. - self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); - - g_autoptr(GError) error = nullptr; - if (!g_application_register(application, nullptr, &error)) { - g_warning("Failed to register: %s", error->message); - *exit_status = 1; - return TRUE; - } - - g_application_activate(application); - *exit_status = 0; - - return TRUE; -} - -// Implements GApplication::startup. -static void my_application_startup(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application startup. - - G_APPLICATION_CLASS(my_application_parent_class)->startup(application); -} - -// Implements GApplication::shutdown. -static void my_application_shutdown(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application shutdown. - - G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); -} - -// Implements GObject::dispose. -static void my_application_dispose(GObject* object) { - MyApplication* self = MY_APPLICATION(object); - g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); - G_OBJECT_CLASS(my_application_parent_class)->dispose(object); -} - -static void my_application_class_init(MyApplicationClass* klass) { - G_APPLICATION_CLASS(klass)->activate = my_application_activate; - G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; - G_APPLICATION_CLASS(klass)->startup = my_application_startup; - G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; - G_OBJECT_CLASS(klass)->dispose = my_application_dispose; -} - -static void my_application_init(MyApplication* self) {} - -MyApplication* my_application_new() { - return MY_APPLICATION(g_object_new(my_application_get_type(), - "application-id", APPLICATION_ID, - "flags", G_APPLICATION_NON_UNIQUE, - nullptr)); -} diff --git a/animations/step_03_a/.gitignore b/animations/step_03_a/.gitignore index 29a3a5017f..79c113f9b5 100644 --- a/animations/step_03_a/.gitignore +++ b/animations/step_03_a/.gitignore @@ -5,9 +5,11 @@ *.swp .DS_Store .atom/ +.build/ .buildlog/ .history .svn/ +.swiftpm/ migrate_working_dir/ # IntelliJ related diff --git a/animations/step_03_a/linux/CMakeLists.txt b/animations/step_03_a/linux/CMakeLists.txt index 658be85ac5..7caf822271 100644 --- a/animations/step_03_a/linux/CMakeLists.txt +++ b/animations/step_03_a/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/animations/step_03_a/linux/my_application.cc b/animations/step_03_a/linux/my_application.cc deleted file mode 100644 index d6ea0e3c5f..0000000000 --- a/animations/step_03_a/linux/my_application.cc +++ /dev/null @@ -1,124 +0,0 @@ -#include "my_application.h" - -#include -#ifdef GDK_WINDOWING_X11 -#include -#endif - -#include "flutter/generated_plugin_registrant.h" - -struct _MyApplication { - GtkApplication parent_instance; - char** dart_entrypoint_arguments; -}; - -G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) - -// Implements GApplication::activate. -static void my_application_activate(GApplication* application) { - MyApplication* self = MY_APPLICATION(application); - GtkWindow* window = - GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); - - // Use a header bar when running in GNOME as this is the common style used - // by applications and is the setup most users will be using (e.g. Ubuntu - // desktop). - // If running on X and not using GNOME then just use a traditional title bar - // in case the window manager does more exotic layout, e.g. tiling. - // If running on Wayland assume the header bar will work (may need changing - // if future cases occur). - gboolean use_header_bar = TRUE; -#ifdef GDK_WINDOWING_X11 - GdkScreen* screen = gtk_window_get_screen(window); - if (GDK_IS_X11_SCREEN(screen)) { - const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); - if (g_strcmp0(wm_name, "GNOME Shell") != 0) { - use_header_bar = FALSE; - } - } -#endif - if (use_header_bar) { - GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); - gtk_widget_show(GTK_WIDGET(header_bar)); - gtk_header_bar_set_title(header_bar, "quiz"); - gtk_header_bar_set_show_close_button(header_bar, TRUE); - gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); - } else { - gtk_window_set_title(window, "quiz"); - } - - gtk_window_set_default_size(window, 1280, 720); - gtk_widget_show(GTK_WIDGET(window)); - - g_autoptr(FlDartProject) project = fl_dart_project_new(); - fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); - - FlView* view = fl_view_new(project); - gtk_widget_show(GTK_WIDGET(view)); - gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); - - fl_register_plugins(FL_PLUGIN_REGISTRY(view)); - - gtk_widget_grab_focus(GTK_WIDGET(view)); -} - -// Implements GApplication::local_command_line. -static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { - MyApplication* self = MY_APPLICATION(application); - // Strip out the first argument as it is the binary name. - self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); - - g_autoptr(GError) error = nullptr; - if (!g_application_register(application, nullptr, &error)) { - g_warning("Failed to register: %s", error->message); - *exit_status = 1; - return TRUE; - } - - g_application_activate(application); - *exit_status = 0; - - return TRUE; -} - -// Implements GApplication::startup. -static void my_application_startup(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application startup. - - G_APPLICATION_CLASS(my_application_parent_class)->startup(application); -} - -// Implements GApplication::shutdown. -static void my_application_shutdown(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application shutdown. - - G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); -} - -// Implements GObject::dispose. -static void my_application_dispose(GObject* object) { - MyApplication* self = MY_APPLICATION(object); - g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); - G_OBJECT_CLASS(my_application_parent_class)->dispose(object); -} - -static void my_application_class_init(MyApplicationClass* klass) { - G_APPLICATION_CLASS(klass)->activate = my_application_activate; - G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; - G_APPLICATION_CLASS(klass)->startup = my_application_startup; - G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; - G_OBJECT_CLASS(klass)->dispose = my_application_dispose; -} - -static void my_application_init(MyApplication* self) {} - -MyApplication* my_application_new() { - return MY_APPLICATION(g_object_new(my_application_get_type(), - "application-id", APPLICATION_ID, - "flags", G_APPLICATION_NON_UNIQUE, - nullptr)); -} diff --git a/animations/step_03_a/linux/runner/CMakeLists.txt b/animations/step_03_a/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/animations/step_03_a/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/animations/step_02_e/linux/main.cc b/animations/step_03_a/linux/runner/main.cc similarity index 100% rename from animations/step_02_e/linux/main.cc rename to animations/step_03_a/linux/runner/main.cc diff --git a/animations/step_03_a/linux/runner/my_application.cc b/animations/step_03_a/linux/runner/my_application.cc new file mode 100644 index 0000000000..0040d7e46c --- /dev/null +++ b/animations/step_03_a/linux/runner/my_application.cc @@ -0,0 +1,130 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "quiz"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "quiz"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/animations/step_02_e/linux/my_application.h b/animations/step_03_a/linux/runner/my_application.h similarity index 100% rename from animations/step_02_e/linux/my_application.h rename to animations/step_03_a/linux/runner/my_application.h diff --git a/animations/step_03_a/macos/Runner/AppDelegate.swift b/animations/step_03_a/macos/Runner/AppDelegate.swift index 8e02df2888..b3c1761412 100644 --- a/animations/step_03_a/macos/Runner/AppDelegate.swift +++ b/animations/step_03_a/macos/Runner/AppDelegate.swift @@ -6,4 +6,8 @@ class AppDelegate: FlutterAppDelegate { override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { return true } + + override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { + return true + } } diff --git a/animations/step_03_a/pubspec.yaml b/animations/step_03_a/pubspec.yaml index 52735dfa55..f3328a6945 100644 --- a/animations/step_03_a/pubspec.yaml +++ b/animations/step_03_a/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: "none" version: 1.0.0 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 dependencies: animations: ^2.0.0 diff --git a/animations/step_03_a/web/index.html b/animations/step_03_a/web/index.html index 89656d9a06..ec05768c59 100644 --- a/animations/step_03_a/web/index.html +++ b/animations/step_03_a/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/animations/step_03_b/.gitignore b/animations/step_03_b/.gitignore index 29a3a5017f..79c113f9b5 100644 --- a/animations/step_03_b/.gitignore +++ b/animations/step_03_b/.gitignore @@ -5,9 +5,11 @@ *.swp .DS_Store .atom/ +.build/ .buildlog/ .history .svn/ +.swiftpm/ migrate_working_dir/ # IntelliJ related diff --git a/animations/step_03_b/linux/CMakeLists.txt b/animations/step_03_b/linux/CMakeLists.txt index 658be85ac5..7caf822271 100644 --- a/animations/step_03_b/linux/CMakeLists.txt +++ b/animations/step_03_b/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/animations/step_03_b/linux/my_application.cc b/animations/step_03_b/linux/my_application.cc deleted file mode 100644 index d6ea0e3c5f..0000000000 --- a/animations/step_03_b/linux/my_application.cc +++ /dev/null @@ -1,124 +0,0 @@ -#include "my_application.h" - -#include -#ifdef GDK_WINDOWING_X11 -#include -#endif - -#include "flutter/generated_plugin_registrant.h" - -struct _MyApplication { - GtkApplication parent_instance; - char** dart_entrypoint_arguments; -}; - -G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) - -// Implements GApplication::activate. -static void my_application_activate(GApplication* application) { - MyApplication* self = MY_APPLICATION(application); - GtkWindow* window = - GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); - - // Use a header bar when running in GNOME as this is the common style used - // by applications and is the setup most users will be using (e.g. Ubuntu - // desktop). - // If running on X and not using GNOME then just use a traditional title bar - // in case the window manager does more exotic layout, e.g. tiling. - // If running on Wayland assume the header bar will work (may need changing - // if future cases occur). - gboolean use_header_bar = TRUE; -#ifdef GDK_WINDOWING_X11 - GdkScreen* screen = gtk_window_get_screen(window); - if (GDK_IS_X11_SCREEN(screen)) { - const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); - if (g_strcmp0(wm_name, "GNOME Shell") != 0) { - use_header_bar = FALSE; - } - } -#endif - if (use_header_bar) { - GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); - gtk_widget_show(GTK_WIDGET(header_bar)); - gtk_header_bar_set_title(header_bar, "quiz"); - gtk_header_bar_set_show_close_button(header_bar, TRUE); - gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); - } else { - gtk_window_set_title(window, "quiz"); - } - - gtk_window_set_default_size(window, 1280, 720); - gtk_widget_show(GTK_WIDGET(window)); - - g_autoptr(FlDartProject) project = fl_dart_project_new(); - fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); - - FlView* view = fl_view_new(project); - gtk_widget_show(GTK_WIDGET(view)); - gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); - - fl_register_plugins(FL_PLUGIN_REGISTRY(view)); - - gtk_widget_grab_focus(GTK_WIDGET(view)); -} - -// Implements GApplication::local_command_line. -static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { - MyApplication* self = MY_APPLICATION(application); - // Strip out the first argument as it is the binary name. - self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); - - g_autoptr(GError) error = nullptr; - if (!g_application_register(application, nullptr, &error)) { - g_warning("Failed to register: %s", error->message); - *exit_status = 1; - return TRUE; - } - - g_application_activate(application); - *exit_status = 0; - - return TRUE; -} - -// Implements GApplication::startup. -static void my_application_startup(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application startup. - - G_APPLICATION_CLASS(my_application_parent_class)->startup(application); -} - -// Implements GApplication::shutdown. -static void my_application_shutdown(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application shutdown. - - G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); -} - -// Implements GObject::dispose. -static void my_application_dispose(GObject* object) { - MyApplication* self = MY_APPLICATION(object); - g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); - G_OBJECT_CLASS(my_application_parent_class)->dispose(object); -} - -static void my_application_class_init(MyApplicationClass* klass) { - G_APPLICATION_CLASS(klass)->activate = my_application_activate; - G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; - G_APPLICATION_CLASS(klass)->startup = my_application_startup; - G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; - G_OBJECT_CLASS(klass)->dispose = my_application_dispose; -} - -static void my_application_init(MyApplication* self) {} - -MyApplication* my_application_new() { - return MY_APPLICATION(g_object_new(my_application_get_type(), - "application-id", APPLICATION_ID, - "flags", G_APPLICATION_NON_UNIQUE, - nullptr)); -} diff --git a/animations/step_03_b/linux/runner/CMakeLists.txt b/animations/step_03_b/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/animations/step_03_b/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/animations/step_03/linux/main.cc b/animations/step_03_b/linux/runner/main.cc similarity index 100% rename from animations/step_03/linux/main.cc rename to animations/step_03_b/linux/runner/main.cc diff --git a/animations/step_03_b/linux/runner/my_application.cc b/animations/step_03_b/linux/runner/my_application.cc new file mode 100644 index 0000000000..0040d7e46c --- /dev/null +++ b/animations/step_03_b/linux/runner/my_application.cc @@ -0,0 +1,130 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "quiz"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "quiz"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/animations/step_03/linux/my_application.h b/animations/step_03_b/linux/runner/my_application.h similarity index 100% rename from animations/step_03/linux/my_application.h rename to animations/step_03_b/linux/runner/my_application.h diff --git a/animations/step_03_b/macos/Runner/AppDelegate.swift b/animations/step_03_b/macos/Runner/AppDelegate.swift index 8e02df2888..b3c1761412 100644 --- a/animations/step_03_b/macos/Runner/AppDelegate.swift +++ b/animations/step_03_b/macos/Runner/AppDelegate.swift @@ -6,4 +6,8 @@ class AppDelegate: FlutterAppDelegate { override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { return true } + + override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { + return true + } } diff --git a/animations/step_03_b/pubspec.yaml b/animations/step_03_b/pubspec.yaml index 52735dfa55..f3328a6945 100644 --- a/animations/step_03_b/pubspec.yaml +++ b/animations/step_03_b/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: "none" version: 1.0.0 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 dependencies: animations: ^2.0.0 diff --git a/animations/step_03_b/web/index.html b/animations/step_03_b/web/index.html index 89656d9a06..ec05768c59 100644 --- a/animations/step_03_b/web/index.html +++ b/animations/step_03_b/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/animations/step_03_c/.gitignore b/animations/step_03_c/.gitignore index 29a3a5017f..79c113f9b5 100644 --- a/animations/step_03_c/.gitignore +++ b/animations/step_03_c/.gitignore @@ -5,9 +5,11 @@ *.swp .DS_Store .atom/ +.build/ .buildlog/ .history .svn/ +.swiftpm/ migrate_working_dir/ # IntelliJ related diff --git a/animations/step_03_c/linux/CMakeLists.txt b/animations/step_03_c/linux/CMakeLists.txt index 658be85ac5..7caf822271 100644 --- a/animations/step_03_c/linux/CMakeLists.txt +++ b/animations/step_03_c/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/animations/step_03_c/linux/my_application.cc b/animations/step_03_c/linux/my_application.cc deleted file mode 100644 index d6ea0e3c5f..0000000000 --- a/animations/step_03_c/linux/my_application.cc +++ /dev/null @@ -1,124 +0,0 @@ -#include "my_application.h" - -#include -#ifdef GDK_WINDOWING_X11 -#include -#endif - -#include "flutter/generated_plugin_registrant.h" - -struct _MyApplication { - GtkApplication parent_instance; - char** dart_entrypoint_arguments; -}; - -G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) - -// Implements GApplication::activate. -static void my_application_activate(GApplication* application) { - MyApplication* self = MY_APPLICATION(application); - GtkWindow* window = - GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); - - // Use a header bar when running in GNOME as this is the common style used - // by applications and is the setup most users will be using (e.g. Ubuntu - // desktop). - // If running on X and not using GNOME then just use a traditional title bar - // in case the window manager does more exotic layout, e.g. tiling. - // If running on Wayland assume the header bar will work (may need changing - // if future cases occur). - gboolean use_header_bar = TRUE; -#ifdef GDK_WINDOWING_X11 - GdkScreen* screen = gtk_window_get_screen(window); - if (GDK_IS_X11_SCREEN(screen)) { - const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); - if (g_strcmp0(wm_name, "GNOME Shell") != 0) { - use_header_bar = FALSE; - } - } -#endif - if (use_header_bar) { - GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); - gtk_widget_show(GTK_WIDGET(header_bar)); - gtk_header_bar_set_title(header_bar, "quiz"); - gtk_header_bar_set_show_close_button(header_bar, TRUE); - gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); - } else { - gtk_window_set_title(window, "quiz"); - } - - gtk_window_set_default_size(window, 1280, 720); - gtk_widget_show(GTK_WIDGET(window)); - - g_autoptr(FlDartProject) project = fl_dart_project_new(); - fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); - - FlView* view = fl_view_new(project); - gtk_widget_show(GTK_WIDGET(view)); - gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); - - fl_register_plugins(FL_PLUGIN_REGISTRY(view)); - - gtk_widget_grab_focus(GTK_WIDGET(view)); -} - -// Implements GApplication::local_command_line. -static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { - MyApplication* self = MY_APPLICATION(application); - // Strip out the first argument as it is the binary name. - self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); - - g_autoptr(GError) error = nullptr; - if (!g_application_register(application, nullptr, &error)) { - g_warning("Failed to register: %s", error->message); - *exit_status = 1; - return TRUE; - } - - g_application_activate(application); - *exit_status = 0; - - return TRUE; -} - -// Implements GApplication::startup. -static void my_application_startup(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application startup. - - G_APPLICATION_CLASS(my_application_parent_class)->startup(application); -} - -// Implements GApplication::shutdown. -static void my_application_shutdown(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application shutdown. - - G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); -} - -// Implements GObject::dispose. -static void my_application_dispose(GObject* object) { - MyApplication* self = MY_APPLICATION(object); - g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); - G_OBJECT_CLASS(my_application_parent_class)->dispose(object); -} - -static void my_application_class_init(MyApplicationClass* klass) { - G_APPLICATION_CLASS(klass)->activate = my_application_activate; - G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; - G_APPLICATION_CLASS(klass)->startup = my_application_startup; - G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; - G_OBJECT_CLASS(klass)->dispose = my_application_dispose; -} - -static void my_application_init(MyApplication* self) {} - -MyApplication* my_application_new() { - return MY_APPLICATION(g_object_new(my_application_get_type(), - "application-id", APPLICATION_ID, - "flags", G_APPLICATION_NON_UNIQUE, - nullptr)); -} diff --git a/animations/step_03_c/linux/runner/CMakeLists.txt b/animations/step_03_c/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/animations/step_03_c/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/animations/step_03_a/linux/main.cc b/animations/step_03_c/linux/runner/main.cc similarity index 100% rename from animations/step_03_a/linux/main.cc rename to animations/step_03_c/linux/runner/main.cc diff --git a/animations/step_03_c/linux/runner/my_application.cc b/animations/step_03_c/linux/runner/my_application.cc new file mode 100644 index 0000000000..0040d7e46c --- /dev/null +++ b/animations/step_03_c/linux/runner/my_application.cc @@ -0,0 +1,130 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "quiz"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "quiz"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/animations/step_03_a/linux/my_application.h b/animations/step_03_c/linux/runner/my_application.h similarity index 100% rename from animations/step_03_a/linux/my_application.h rename to animations/step_03_c/linux/runner/my_application.h diff --git a/animations/step_03_c/macos/Runner/AppDelegate.swift b/animations/step_03_c/macos/Runner/AppDelegate.swift index 8e02df2888..b3c1761412 100644 --- a/animations/step_03_c/macos/Runner/AppDelegate.swift +++ b/animations/step_03_c/macos/Runner/AppDelegate.swift @@ -6,4 +6,8 @@ class AppDelegate: FlutterAppDelegate { override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { return true } + + override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { + return true + } } diff --git a/animations/step_03_c/pubspec.yaml b/animations/step_03_c/pubspec.yaml index 52735dfa55..f3328a6945 100644 --- a/animations/step_03_c/pubspec.yaml +++ b/animations/step_03_c/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: "none" version: 1.0.0 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 dependencies: animations: ^2.0.0 diff --git a/animations/step_03_c/web/index.html b/animations/step_03_c/web/index.html index 89656d9a06..ec05768c59 100644 --- a/animations/step_03_c/web/index.html +++ b/animations/step_03_c/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/animations/step_03_d/.gitignore b/animations/step_03_d/.gitignore index 29a3a5017f..79c113f9b5 100644 --- a/animations/step_03_d/.gitignore +++ b/animations/step_03_d/.gitignore @@ -5,9 +5,11 @@ *.swp .DS_Store .atom/ +.build/ .buildlog/ .history .svn/ +.swiftpm/ migrate_working_dir/ # IntelliJ related diff --git a/animations/step_03_d/linux/CMakeLists.txt b/animations/step_03_d/linux/CMakeLists.txt index 658be85ac5..7caf822271 100644 --- a/animations/step_03_d/linux/CMakeLists.txt +++ b/animations/step_03_d/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/animations/step_03_d/linux/my_application.cc b/animations/step_03_d/linux/my_application.cc deleted file mode 100644 index d6ea0e3c5f..0000000000 --- a/animations/step_03_d/linux/my_application.cc +++ /dev/null @@ -1,124 +0,0 @@ -#include "my_application.h" - -#include -#ifdef GDK_WINDOWING_X11 -#include -#endif - -#include "flutter/generated_plugin_registrant.h" - -struct _MyApplication { - GtkApplication parent_instance; - char** dart_entrypoint_arguments; -}; - -G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) - -// Implements GApplication::activate. -static void my_application_activate(GApplication* application) { - MyApplication* self = MY_APPLICATION(application); - GtkWindow* window = - GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); - - // Use a header bar when running in GNOME as this is the common style used - // by applications and is the setup most users will be using (e.g. Ubuntu - // desktop). - // If running on X and not using GNOME then just use a traditional title bar - // in case the window manager does more exotic layout, e.g. tiling. - // If running on Wayland assume the header bar will work (may need changing - // if future cases occur). - gboolean use_header_bar = TRUE; -#ifdef GDK_WINDOWING_X11 - GdkScreen* screen = gtk_window_get_screen(window); - if (GDK_IS_X11_SCREEN(screen)) { - const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); - if (g_strcmp0(wm_name, "GNOME Shell") != 0) { - use_header_bar = FALSE; - } - } -#endif - if (use_header_bar) { - GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); - gtk_widget_show(GTK_WIDGET(header_bar)); - gtk_header_bar_set_title(header_bar, "quiz"); - gtk_header_bar_set_show_close_button(header_bar, TRUE); - gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); - } else { - gtk_window_set_title(window, "quiz"); - } - - gtk_window_set_default_size(window, 1280, 720); - gtk_widget_show(GTK_WIDGET(window)); - - g_autoptr(FlDartProject) project = fl_dart_project_new(); - fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); - - FlView* view = fl_view_new(project); - gtk_widget_show(GTK_WIDGET(view)); - gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); - - fl_register_plugins(FL_PLUGIN_REGISTRY(view)); - - gtk_widget_grab_focus(GTK_WIDGET(view)); -} - -// Implements GApplication::local_command_line. -static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { - MyApplication* self = MY_APPLICATION(application); - // Strip out the first argument as it is the binary name. - self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); - - g_autoptr(GError) error = nullptr; - if (!g_application_register(application, nullptr, &error)) { - g_warning("Failed to register: %s", error->message); - *exit_status = 1; - return TRUE; - } - - g_application_activate(application); - *exit_status = 0; - - return TRUE; -} - -// Implements GApplication::startup. -static void my_application_startup(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application startup. - - G_APPLICATION_CLASS(my_application_parent_class)->startup(application); -} - -// Implements GApplication::shutdown. -static void my_application_shutdown(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application shutdown. - - G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); -} - -// Implements GObject::dispose. -static void my_application_dispose(GObject* object) { - MyApplication* self = MY_APPLICATION(object); - g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); - G_OBJECT_CLASS(my_application_parent_class)->dispose(object); -} - -static void my_application_class_init(MyApplicationClass* klass) { - G_APPLICATION_CLASS(klass)->activate = my_application_activate; - G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; - G_APPLICATION_CLASS(klass)->startup = my_application_startup; - G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; - G_OBJECT_CLASS(klass)->dispose = my_application_dispose; -} - -static void my_application_init(MyApplication* self) {} - -MyApplication* my_application_new() { - return MY_APPLICATION(g_object_new(my_application_get_type(), - "application-id", APPLICATION_ID, - "flags", G_APPLICATION_NON_UNIQUE, - nullptr)); -} diff --git a/animations/step_03_d/linux/runner/CMakeLists.txt b/animations/step_03_d/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/animations/step_03_d/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/animations/step_03_b/linux/main.cc b/animations/step_03_d/linux/runner/main.cc similarity index 100% rename from animations/step_03_b/linux/main.cc rename to animations/step_03_d/linux/runner/main.cc diff --git a/animations/step_03_d/linux/runner/my_application.cc b/animations/step_03_d/linux/runner/my_application.cc new file mode 100644 index 0000000000..0040d7e46c --- /dev/null +++ b/animations/step_03_d/linux/runner/my_application.cc @@ -0,0 +1,130 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "quiz"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "quiz"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/animations/step_03_b/linux/my_application.h b/animations/step_03_d/linux/runner/my_application.h similarity index 100% rename from animations/step_03_b/linux/my_application.h rename to animations/step_03_d/linux/runner/my_application.h diff --git a/animations/step_03_d/macos/Runner/AppDelegate.swift b/animations/step_03_d/macos/Runner/AppDelegate.swift index 8e02df2888..b3c1761412 100644 --- a/animations/step_03_d/macos/Runner/AppDelegate.swift +++ b/animations/step_03_d/macos/Runner/AppDelegate.swift @@ -6,4 +6,8 @@ class AppDelegate: FlutterAppDelegate { override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { return true } + + override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { + return true + } } diff --git a/animations/step_03_d/pubspec.yaml b/animations/step_03_d/pubspec.yaml index 52735dfa55..f3328a6945 100644 --- a/animations/step_03_d/pubspec.yaml +++ b/animations/step_03_d/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: "none" version: 1.0.0 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 dependencies: animations: ^2.0.0 diff --git a/animations/step_03_d/web/index.html b/animations/step_03_d/web/index.html index 89656d9a06..ec05768c59 100644 --- a/animations/step_03_d/web/index.html +++ b/animations/step_03_d/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/animations/step_04/linux/my_application.cc b/animations/step_04/linux/my_application.cc deleted file mode 100644 index d6ea0e3c5f..0000000000 --- a/animations/step_04/linux/my_application.cc +++ /dev/null @@ -1,124 +0,0 @@ -#include "my_application.h" - -#include -#ifdef GDK_WINDOWING_X11 -#include -#endif - -#include "flutter/generated_plugin_registrant.h" - -struct _MyApplication { - GtkApplication parent_instance; - char** dart_entrypoint_arguments; -}; - -G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) - -// Implements GApplication::activate. -static void my_application_activate(GApplication* application) { - MyApplication* self = MY_APPLICATION(application); - GtkWindow* window = - GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); - - // Use a header bar when running in GNOME as this is the common style used - // by applications and is the setup most users will be using (e.g. Ubuntu - // desktop). - // If running on X and not using GNOME then just use a traditional title bar - // in case the window manager does more exotic layout, e.g. tiling. - // If running on Wayland assume the header bar will work (may need changing - // if future cases occur). - gboolean use_header_bar = TRUE; -#ifdef GDK_WINDOWING_X11 - GdkScreen* screen = gtk_window_get_screen(window); - if (GDK_IS_X11_SCREEN(screen)) { - const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); - if (g_strcmp0(wm_name, "GNOME Shell") != 0) { - use_header_bar = FALSE; - } - } -#endif - if (use_header_bar) { - GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); - gtk_widget_show(GTK_WIDGET(header_bar)); - gtk_header_bar_set_title(header_bar, "quiz"); - gtk_header_bar_set_show_close_button(header_bar, TRUE); - gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); - } else { - gtk_window_set_title(window, "quiz"); - } - - gtk_window_set_default_size(window, 1280, 720); - gtk_widget_show(GTK_WIDGET(window)); - - g_autoptr(FlDartProject) project = fl_dart_project_new(); - fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); - - FlView* view = fl_view_new(project); - gtk_widget_show(GTK_WIDGET(view)); - gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); - - fl_register_plugins(FL_PLUGIN_REGISTRY(view)); - - gtk_widget_grab_focus(GTK_WIDGET(view)); -} - -// Implements GApplication::local_command_line. -static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { - MyApplication* self = MY_APPLICATION(application); - // Strip out the first argument as it is the binary name. - self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); - - g_autoptr(GError) error = nullptr; - if (!g_application_register(application, nullptr, &error)) { - g_warning("Failed to register: %s", error->message); - *exit_status = 1; - return TRUE; - } - - g_application_activate(application); - *exit_status = 0; - - return TRUE; -} - -// Implements GApplication::startup. -static void my_application_startup(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application startup. - - G_APPLICATION_CLASS(my_application_parent_class)->startup(application); -} - -// Implements GApplication::shutdown. -static void my_application_shutdown(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application shutdown. - - G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); -} - -// Implements GObject::dispose. -static void my_application_dispose(GObject* object) { - MyApplication* self = MY_APPLICATION(object); - g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); - G_OBJECT_CLASS(my_application_parent_class)->dispose(object); -} - -static void my_application_class_init(MyApplicationClass* klass) { - G_APPLICATION_CLASS(klass)->activate = my_application_activate; - G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; - G_APPLICATION_CLASS(klass)->startup = my_application_startup; - G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; - G_OBJECT_CLASS(klass)->dispose = my_application_dispose; -} - -static void my_application_init(MyApplication* self) {} - -MyApplication* my_application_new() { - return MY_APPLICATION(g_object_new(my_application_get_type(), - "application-id", APPLICATION_ID, - "flags", G_APPLICATION_NON_UNIQUE, - nullptr)); -} diff --git a/animations/step_04_a/.gitignore b/animations/step_04_a/.gitignore index 29a3a5017f..79c113f9b5 100644 --- a/animations/step_04_a/.gitignore +++ b/animations/step_04_a/.gitignore @@ -5,9 +5,11 @@ *.swp .DS_Store .atom/ +.build/ .buildlog/ .history .svn/ +.swiftpm/ migrate_working_dir/ # IntelliJ related diff --git a/animations/step_04_a/linux/CMakeLists.txt b/animations/step_04_a/linux/CMakeLists.txt index 658be85ac5..7caf822271 100644 --- a/animations/step_04_a/linux/CMakeLists.txt +++ b/animations/step_04_a/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/animations/step_04_a/linux/my_application.cc b/animations/step_04_a/linux/my_application.cc deleted file mode 100644 index d6ea0e3c5f..0000000000 --- a/animations/step_04_a/linux/my_application.cc +++ /dev/null @@ -1,124 +0,0 @@ -#include "my_application.h" - -#include -#ifdef GDK_WINDOWING_X11 -#include -#endif - -#include "flutter/generated_plugin_registrant.h" - -struct _MyApplication { - GtkApplication parent_instance; - char** dart_entrypoint_arguments; -}; - -G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) - -// Implements GApplication::activate. -static void my_application_activate(GApplication* application) { - MyApplication* self = MY_APPLICATION(application); - GtkWindow* window = - GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); - - // Use a header bar when running in GNOME as this is the common style used - // by applications and is the setup most users will be using (e.g. Ubuntu - // desktop). - // If running on X and not using GNOME then just use a traditional title bar - // in case the window manager does more exotic layout, e.g. tiling. - // If running on Wayland assume the header bar will work (may need changing - // if future cases occur). - gboolean use_header_bar = TRUE; -#ifdef GDK_WINDOWING_X11 - GdkScreen* screen = gtk_window_get_screen(window); - if (GDK_IS_X11_SCREEN(screen)) { - const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); - if (g_strcmp0(wm_name, "GNOME Shell") != 0) { - use_header_bar = FALSE; - } - } -#endif - if (use_header_bar) { - GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); - gtk_widget_show(GTK_WIDGET(header_bar)); - gtk_header_bar_set_title(header_bar, "quiz"); - gtk_header_bar_set_show_close_button(header_bar, TRUE); - gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); - } else { - gtk_window_set_title(window, "quiz"); - } - - gtk_window_set_default_size(window, 1280, 720); - gtk_widget_show(GTK_WIDGET(window)); - - g_autoptr(FlDartProject) project = fl_dart_project_new(); - fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); - - FlView* view = fl_view_new(project); - gtk_widget_show(GTK_WIDGET(view)); - gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); - - fl_register_plugins(FL_PLUGIN_REGISTRY(view)); - - gtk_widget_grab_focus(GTK_WIDGET(view)); -} - -// Implements GApplication::local_command_line. -static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { - MyApplication* self = MY_APPLICATION(application); - // Strip out the first argument as it is the binary name. - self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); - - g_autoptr(GError) error = nullptr; - if (!g_application_register(application, nullptr, &error)) { - g_warning("Failed to register: %s", error->message); - *exit_status = 1; - return TRUE; - } - - g_application_activate(application); - *exit_status = 0; - - return TRUE; -} - -// Implements GApplication::startup. -static void my_application_startup(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application startup. - - G_APPLICATION_CLASS(my_application_parent_class)->startup(application); -} - -// Implements GApplication::shutdown. -static void my_application_shutdown(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application shutdown. - - G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); -} - -// Implements GObject::dispose. -static void my_application_dispose(GObject* object) { - MyApplication* self = MY_APPLICATION(object); - g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); - G_OBJECT_CLASS(my_application_parent_class)->dispose(object); -} - -static void my_application_class_init(MyApplicationClass* klass) { - G_APPLICATION_CLASS(klass)->activate = my_application_activate; - G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; - G_APPLICATION_CLASS(klass)->startup = my_application_startup; - G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; - G_OBJECT_CLASS(klass)->dispose = my_application_dispose; -} - -static void my_application_init(MyApplication* self) {} - -MyApplication* my_application_new() { - return MY_APPLICATION(g_object_new(my_application_get_type(), - "application-id", APPLICATION_ID, - "flags", G_APPLICATION_NON_UNIQUE, - nullptr)); -} diff --git a/animations/step_04_a/linux/runner/CMakeLists.txt b/animations/step_04_a/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/animations/step_04_a/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/animations/step_03_c/linux/main.cc b/animations/step_04_a/linux/runner/main.cc similarity index 100% rename from animations/step_03_c/linux/main.cc rename to animations/step_04_a/linux/runner/main.cc diff --git a/animations/step_04_a/linux/runner/my_application.cc b/animations/step_04_a/linux/runner/my_application.cc new file mode 100644 index 0000000000..0040d7e46c --- /dev/null +++ b/animations/step_04_a/linux/runner/my_application.cc @@ -0,0 +1,130 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "quiz"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "quiz"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/animations/step_03_c/linux/my_application.h b/animations/step_04_a/linux/runner/my_application.h similarity index 100% rename from animations/step_03_c/linux/my_application.h rename to animations/step_04_a/linux/runner/my_application.h diff --git a/animations/step_04_a/macos/Runner/AppDelegate.swift b/animations/step_04_a/macos/Runner/AppDelegate.swift index 8e02df2888..b3c1761412 100644 --- a/animations/step_04_a/macos/Runner/AppDelegate.swift +++ b/animations/step_04_a/macos/Runner/AppDelegate.swift @@ -6,4 +6,8 @@ class AppDelegate: FlutterAppDelegate { override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { return true } + + override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { + return true + } } diff --git a/animations/step_04_a/pubspec.yaml b/animations/step_04_a/pubspec.yaml index 52735dfa55..f3328a6945 100644 --- a/animations/step_04_a/pubspec.yaml +++ b/animations/step_04_a/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: "none" version: 1.0.0 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 dependencies: animations: ^2.0.0 diff --git a/animations/step_04_a/web/index.html b/animations/step_04_a/web/index.html index 89656d9a06..ec05768c59 100644 --- a/animations/step_04_a/web/index.html +++ b/animations/step_04_a/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/animations/step_04_b/.gitignore b/animations/step_04_b/.gitignore index 29a3a5017f..79c113f9b5 100644 --- a/animations/step_04_b/.gitignore +++ b/animations/step_04_b/.gitignore @@ -5,9 +5,11 @@ *.swp .DS_Store .atom/ +.build/ .buildlog/ .history .svn/ +.swiftpm/ migrate_working_dir/ # IntelliJ related diff --git a/animations/step_04_b/linux/CMakeLists.txt b/animations/step_04_b/linux/CMakeLists.txt index 658be85ac5..7caf822271 100644 --- a/animations/step_04_b/linux/CMakeLists.txt +++ b/animations/step_04_b/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/animations/step_04_b/linux/main.cc b/animations/step_04_b/linux/main.cc deleted file mode 100644 index e7c5c54370..0000000000 --- a/animations/step_04_b/linux/main.cc +++ /dev/null @@ -1,6 +0,0 @@ -#include "my_application.h" - -int main(int argc, char** argv) { - g_autoptr(MyApplication) app = my_application_new(); - return g_application_run(G_APPLICATION(app), argc, argv); -} diff --git a/animations/step_04_b/linux/my_application.cc b/animations/step_04_b/linux/my_application.cc deleted file mode 100644 index d6ea0e3c5f..0000000000 --- a/animations/step_04_b/linux/my_application.cc +++ /dev/null @@ -1,124 +0,0 @@ -#include "my_application.h" - -#include -#ifdef GDK_WINDOWING_X11 -#include -#endif - -#include "flutter/generated_plugin_registrant.h" - -struct _MyApplication { - GtkApplication parent_instance; - char** dart_entrypoint_arguments; -}; - -G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) - -// Implements GApplication::activate. -static void my_application_activate(GApplication* application) { - MyApplication* self = MY_APPLICATION(application); - GtkWindow* window = - GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); - - // Use a header bar when running in GNOME as this is the common style used - // by applications and is the setup most users will be using (e.g. Ubuntu - // desktop). - // If running on X and not using GNOME then just use a traditional title bar - // in case the window manager does more exotic layout, e.g. tiling. - // If running on Wayland assume the header bar will work (may need changing - // if future cases occur). - gboolean use_header_bar = TRUE; -#ifdef GDK_WINDOWING_X11 - GdkScreen* screen = gtk_window_get_screen(window); - if (GDK_IS_X11_SCREEN(screen)) { - const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); - if (g_strcmp0(wm_name, "GNOME Shell") != 0) { - use_header_bar = FALSE; - } - } -#endif - if (use_header_bar) { - GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); - gtk_widget_show(GTK_WIDGET(header_bar)); - gtk_header_bar_set_title(header_bar, "quiz"); - gtk_header_bar_set_show_close_button(header_bar, TRUE); - gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); - } else { - gtk_window_set_title(window, "quiz"); - } - - gtk_window_set_default_size(window, 1280, 720); - gtk_widget_show(GTK_WIDGET(window)); - - g_autoptr(FlDartProject) project = fl_dart_project_new(); - fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); - - FlView* view = fl_view_new(project); - gtk_widget_show(GTK_WIDGET(view)); - gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); - - fl_register_plugins(FL_PLUGIN_REGISTRY(view)); - - gtk_widget_grab_focus(GTK_WIDGET(view)); -} - -// Implements GApplication::local_command_line. -static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { - MyApplication* self = MY_APPLICATION(application); - // Strip out the first argument as it is the binary name. - self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); - - g_autoptr(GError) error = nullptr; - if (!g_application_register(application, nullptr, &error)) { - g_warning("Failed to register: %s", error->message); - *exit_status = 1; - return TRUE; - } - - g_application_activate(application); - *exit_status = 0; - - return TRUE; -} - -// Implements GApplication::startup. -static void my_application_startup(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application startup. - - G_APPLICATION_CLASS(my_application_parent_class)->startup(application); -} - -// Implements GApplication::shutdown. -static void my_application_shutdown(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application shutdown. - - G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); -} - -// Implements GObject::dispose. -static void my_application_dispose(GObject* object) { - MyApplication* self = MY_APPLICATION(object); - g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); - G_OBJECT_CLASS(my_application_parent_class)->dispose(object); -} - -static void my_application_class_init(MyApplicationClass* klass) { - G_APPLICATION_CLASS(klass)->activate = my_application_activate; - G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; - G_APPLICATION_CLASS(klass)->startup = my_application_startup; - G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; - G_OBJECT_CLASS(klass)->dispose = my_application_dispose; -} - -static void my_application_init(MyApplication* self) {} - -MyApplication* my_application_new() { - return MY_APPLICATION(g_object_new(my_application_get_type(), - "application-id", APPLICATION_ID, - "flags", G_APPLICATION_NON_UNIQUE, - nullptr)); -} diff --git a/animations/step_04_b/linux/my_application.h b/animations/step_04_b/linux/my_application.h deleted file mode 100644 index 72271d5e41..0000000000 --- a/animations/step_04_b/linux/my_application.h +++ /dev/null @@ -1,18 +0,0 @@ -#ifndef FLUTTER_MY_APPLICATION_H_ -#define FLUTTER_MY_APPLICATION_H_ - -#include - -G_DECLARE_FINAL_TYPE(MyApplication, my_application, MY, APPLICATION, - GtkApplication) - -/** - * my_application_new: - * - * Creates a new Flutter-based application. - * - * Returns: a new #MyApplication. - */ -MyApplication* my_application_new(); - -#endif // FLUTTER_MY_APPLICATION_H_ diff --git a/animations/step_04_b/linux/runner/CMakeLists.txt b/animations/step_04_b/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/animations/step_04_b/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/animations/step_03_d/linux/main.cc b/animations/step_04_b/linux/runner/main.cc similarity index 100% rename from animations/step_03_d/linux/main.cc rename to animations/step_04_b/linux/runner/main.cc diff --git a/animations/step_04_b/linux/runner/my_application.cc b/animations/step_04_b/linux/runner/my_application.cc new file mode 100644 index 0000000000..0040d7e46c --- /dev/null +++ b/animations/step_04_b/linux/runner/my_application.cc @@ -0,0 +1,130 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "quiz"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "quiz"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/animations/step_03_d/linux/my_application.h b/animations/step_04_b/linux/runner/my_application.h similarity index 100% rename from animations/step_03_d/linux/my_application.h rename to animations/step_04_b/linux/runner/my_application.h diff --git a/animations/step_04_b/macos/Runner/AppDelegate.swift b/animations/step_04_b/macos/Runner/AppDelegate.swift index 8e02df2888..b3c1761412 100644 --- a/animations/step_04_b/macos/Runner/AppDelegate.swift +++ b/animations/step_04_b/macos/Runner/AppDelegate.swift @@ -6,4 +6,8 @@ class AppDelegate: FlutterAppDelegate { override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { return true } + + override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { + return true + } } diff --git a/animations/step_04_b/pubspec.yaml b/animations/step_04_b/pubspec.yaml index 52735dfa55..f3328a6945 100644 --- a/animations/step_04_b/pubspec.yaml +++ b/animations/step_04_b/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: "none" version: 1.0.0 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 dependencies: animations: ^2.0.0 diff --git a/animations/step_04_b/web/index.html b/animations/step_04_b/web/index.html index 89656d9a06..ec05768c59 100644 --- a/animations/step_04_b/web/index.html +++ b/animations/step_04_b/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/animations/step_04_c/.gitignore b/animations/step_04_c/.gitignore index 29a3a5017f..79c113f9b5 100644 --- a/animations/step_04_c/.gitignore +++ b/animations/step_04_c/.gitignore @@ -5,9 +5,11 @@ *.swp .DS_Store .atom/ +.build/ .buildlog/ .history .svn/ +.swiftpm/ migrate_working_dir/ # IntelliJ related diff --git a/animations/step_04_c/linux/CMakeLists.txt b/animations/step_04_c/linux/CMakeLists.txt index 658be85ac5..7caf822271 100644 --- a/animations/step_04_c/linux/CMakeLists.txt +++ b/animations/step_04_c/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/animations/step_04_c/linux/main.cc b/animations/step_04_c/linux/main.cc deleted file mode 100644 index e7c5c54370..0000000000 --- a/animations/step_04_c/linux/main.cc +++ /dev/null @@ -1,6 +0,0 @@ -#include "my_application.h" - -int main(int argc, char** argv) { - g_autoptr(MyApplication) app = my_application_new(); - return g_application_run(G_APPLICATION(app), argc, argv); -} diff --git a/animations/step_04_c/linux/my_application.cc b/animations/step_04_c/linux/my_application.cc deleted file mode 100644 index d6ea0e3c5f..0000000000 --- a/animations/step_04_c/linux/my_application.cc +++ /dev/null @@ -1,124 +0,0 @@ -#include "my_application.h" - -#include -#ifdef GDK_WINDOWING_X11 -#include -#endif - -#include "flutter/generated_plugin_registrant.h" - -struct _MyApplication { - GtkApplication parent_instance; - char** dart_entrypoint_arguments; -}; - -G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) - -// Implements GApplication::activate. -static void my_application_activate(GApplication* application) { - MyApplication* self = MY_APPLICATION(application); - GtkWindow* window = - GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); - - // Use a header bar when running in GNOME as this is the common style used - // by applications and is the setup most users will be using (e.g. Ubuntu - // desktop). - // If running on X and not using GNOME then just use a traditional title bar - // in case the window manager does more exotic layout, e.g. tiling. - // If running on Wayland assume the header bar will work (may need changing - // if future cases occur). - gboolean use_header_bar = TRUE; -#ifdef GDK_WINDOWING_X11 - GdkScreen* screen = gtk_window_get_screen(window); - if (GDK_IS_X11_SCREEN(screen)) { - const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); - if (g_strcmp0(wm_name, "GNOME Shell") != 0) { - use_header_bar = FALSE; - } - } -#endif - if (use_header_bar) { - GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); - gtk_widget_show(GTK_WIDGET(header_bar)); - gtk_header_bar_set_title(header_bar, "quiz"); - gtk_header_bar_set_show_close_button(header_bar, TRUE); - gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); - } else { - gtk_window_set_title(window, "quiz"); - } - - gtk_window_set_default_size(window, 1280, 720); - gtk_widget_show(GTK_WIDGET(window)); - - g_autoptr(FlDartProject) project = fl_dart_project_new(); - fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); - - FlView* view = fl_view_new(project); - gtk_widget_show(GTK_WIDGET(view)); - gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); - - fl_register_plugins(FL_PLUGIN_REGISTRY(view)); - - gtk_widget_grab_focus(GTK_WIDGET(view)); -} - -// Implements GApplication::local_command_line. -static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { - MyApplication* self = MY_APPLICATION(application); - // Strip out the first argument as it is the binary name. - self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); - - g_autoptr(GError) error = nullptr; - if (!g_application_register(application, nullptr, &error)) { - g_warning("Failed to register: %s", error->message); - *exit_status = 1; - return TRUE; - } - - g_application_activate(application); - *exit_status = 0; - - return TRUE; -} - -// Implements GApplication::startup. -static void my_application_startup(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application startup. - - G_APPLICATION_CLASS(my_application_parent_class)->startup(application); -} - -// Implements GApplication::shutdown. -static void my_application_shutdown(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application shutdown. - - G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); -} - -// Implements GObject::dispose. -static void my_application_dispose(GObject* object) { - MyApplication* self = MY_APPLICATION(object); - g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); - G_OBJECT_CLASS(my_application_parent_class)->dispose(object); -} - -static void my_application_class_init(MyApplicationClass* klass) { - G_APPLICATION_CLASS(klass)->activate = my_application_activate; - G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; - G_APPLICATION_CLASS(klass)->startup = my_application_startup; - G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; - G_OBJECT_CLASS(klass)->dispose = my_application_dispose; -} - -static void my_application_init(MyApplication* self) {} - -MyApplication* my_application_new() { - return MY_APPLICATION(g_object_new(my_application_get_type(), - "application-id", APPLICATION_ID, - "flags", G_APPLICATION_NON_UNIQUE, - nullptr)); -} diff --git a/animations/step_04_c/linux/my_application.h b/animations/step_04_c/linux/my_application.h deleted file mode 100644 index 72271d5e41..0000000000 --- a/animations/step_04_c/linux/my_application.h +++ /dev/null @@ -1,18 +0,0 @@ -#ifndef FLUTTER_MY_APPLICATION_H_ -#define FLUTTER_MY_APPLICATION_H_ - -#include - -G_DECLARE_FINAL_TYPE(MyApplication, my_application, MY, APPLICATION, - GtkApplication) - -/** - * my_application_new: - * - * Creates a new Flutter-based application. - * - * Returns: a new #MyApplication. - */ -MyApplication* my_application_new(); - -#endif // FLUTTER_MY_APPLICATION_H_ diff --git a/animations/step_04_c/linux/runner/CMakeLists.txt b/animations/step_04_c/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/animations/step_04_c/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/animations/step_04/linux/main.cc b/animations/step_04_c/linux/runner/main.cc similarity index 100% rename from animations/step_04/linux/main.cc rename to animations/step_04_c/linux/runner/main.cc diff --git a/animations/step_04_c/linux/runner/my_application.cc b/animations/step_04_c/linux/runner/my_application.cc new file mode 100644 index 0000000000..0040d7e46c --- /dev/null +++ b/animations/step_04_c/linux/runner/my_application.cc @@ -0,0 +1,130 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "quiz"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "quiz"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/animations/step_04/linux/my_application.h b/animations/step_04_c/linux/runner/my_application.h similarity index 100% rename from animations/step_04/linux/my_application.h rename to animations/step_04_c/linux/runner/my_application.h diff --git a/animations/step_04_c/macos/Runner/AppDelegate.swift b/animations/step_04_c/macos/Runner/AppDelegate.swift index 8e02df2888..b3c1761412 100644 --- a/animations/step_04_c/macos/Runner/AppDelegate.swift +++ b/animations/step_04_c/macos/Runner/AppDelegate.swift @@ -6,4 +6,8 @@ class AppDelegate: FlutterAppDelegate { override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { return true } + + override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { + return true + } } diff --git a/animations/step_04_c/pubspec.yaml b/animations/step_04_c/pubspec.yaml index 52735dfa55..f3328a6945 100644 --- a/animations/step_04_c/pubspec.yaml +++ b/animations/step_04_c/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: "none" version: 1.0.0 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 dependencies: animations: ^2.0.0 diff --git a/animations/step_04_c/web/index.html b/animations/step_04_c/web/index.html index 89656d9a06..ec05768c59 100644 --- a/animations/step_04_c/web/index.html +++ b/animations/step_04_c/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/animations/step_04_d/.gitignore b/animations/step_04_d/.gitignore index 29a3a5017f..79c113f9b5 100644 --- a/animations/step_04_d/.gitignore +++ b/animations/step_04_d/.gitignore @@ -5,9 +5,11 @@ *.swp .DS_Store .atom/ +.build/ .buildlog/ .history .svn/ +.swiftpm/ migrate_working_dir/ # IntelliJ related diff --git a/animations/step_04_d/linux/CMakeLists.txt b/animations/step_04_d/linux/CMakeLists.txt index 658be85ac5..7caf822271 100644 --- a/animations/step_04_d/linux/CMakeLists.txt +++ b/animations/step_04_d/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/animations/step_04_d/linux/main.cc b/animations/step_04_d/linux/main.cc deleted file mode 100644 index e7c5c54370..0000000000 --- a/animations/step_04_d/linux/main.cc +++ /dev/null @@ -1,6 +0,0 @@ -#include "my_application.h" - -int main(int argc, char** argv) { - g_autoptr(MyApplication) app = my_application_new(); - return g_application_run(G_APPLICATION(app), argc, argv); -} diff --git a/animations/step_04_d/linux/my_application.cc b/animations/step_04_d/linux/my_application.cc deleted file mode 100644 index d6ea0e3c5f..0000000000 --- a/animations/step_04_d/linux/my_application.cc +++ /dev/null @@ -1,124 +0,0 @@ -#include "my_application.h" - -#include -#ifdef GDK_WINDOWING_X11 -#include -#endif - -#include "flutter/generated_plugin_registrant.h" - -struct _MyApplication { - GtkApplication parent_instance; - char** dart_entrypoint_arguments; -}; - -G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) - -// Implements GApplication::activate. -static void my_application_activate(GApplication* application) { - MyApplication* self = MY_APPLICATION(application); - GtkWindow* window = - GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); - - // Use a header bar when running in GNOME as this is the common style used - // by applications and is the setup most users will be using (e.g. Ubuntu - // desktop). - // If running on X and not using GNOME then just use a traditional title bar - // in case the window manager does more exotic layout, e.g. tiling. - // If running on Wayland assume the header bar will work (may need changing - // if future cases occur). - gboolean use_header_bar = TRUE; -#ifdef GDK_WINDOWING_X11 - GdkScreen* screen = gtk_window_get_screen(window); - if (GDK_IS_X11_SCREEN(screen)) { - const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); - if (g_strcmp0(wm_name, "GNOME Shell") != 0) { - use_header_bar = FALSE; - } - } -#endif - if (use_header_bar) { - GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); - gtk_widget_show(GTK_WIDGET(header_bar)); - gtk_header_bar_set_title(header_bar, "quiz"); - gtk_header_bar_set_show_close_button(header_bar, TRUE); - gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); - } else { - gtk_window_set_title(window, "quiz"); - } - - gtk_window_set_default_size(window, 1280, 720); - gtk_widget_show(GTK_WIDGET(window)); - - g_autoptr(FlDartProject) project = fl_dart_project_new(); - fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); - - FlView* view = fl_view_new(project); - gtk_widget_show(GTK_WIDGET(view)); - gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); - - fl_register_plugins(FL_PLUGIN_REGISTRY(view)); - - gtk_widget_grab_focus(GTK_WIDGET(view)); -} - -// Implements GApplication::local_command_line. -static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { - MyApplication* self = MY_APPLICATION(application); - // Strip out the first argument as it is the binary name. - self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); - - g_autoptr(GError) error = nullptr; - if (!g_application_register(application, nullptr, &error)) { - g_warning("Failed to register: %s", error->message); - *exit_status = 1; - return TRUE; - } - - g_application_activate(application); - *exit_status = 0; - - return TRUE; -} - -// Implements GApplication::startup. -static void my_application_startup(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application startup. - - G_APPLICATION_CLASS(my_application_parent_class)->startup(application); -} - -// Implements GApplication::shutdown. -static void my_application_shutdown(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application shutdown. - - G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); -} - -// Implements GObject::dispose. -static void my_application_dispose(GObject* object) { - MyApplication* self = MY_APPLICATION(object); - g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); - G_OBJECT_CLASS(my_application_parent_class)->dispose(object); -} - -static void my_application_class_init(MyApplicationClass* klass) { - G_APPLICATION_CLASS(klass)->activate = my_application_activate; - G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; - G_APPLICATION_CLASS(klass)->startup = my_application_startup; - G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; - G_OBJECT_CLASS(klass)->dispose = my_application_dispose; -} - -static void my_application_init(MyApplication* self) {} - -MyApplication* my_application_new() { - return MY_APPLICATION(g_object_new(my_application_get_type(), - "application-id", APPLICATION_ID, - "flags", G_APPLICATION_NON_UNIQUE, - nullptr)); -} diff --git a/animations/step_04_d/linux/my_application.h b/animations/step_04_d/linux/my_application.h deleted file mode 100644 index 72271d5e41..0000000000 --- a/animations/step_04_d/linux/my_application.h +++ /dev/null @@ -1,18 +0,0 @@ -#ifndef FLUTTER_MY_APPLICATION_H_ -#define FLUTTER_MY_APPLICATION_H_ - -#include - -G_DECLARE_FINAL_TYPE(MyApplication, my_application, MY, APPLICATION, - GtkApplication) - -/** - * my_application_new: - * - * Creates a new Flutter-based application. - * - * Returns: a new #MyApplication. - */ -MyApplication* my_application_new(); - -#endif // FLUTTER_MY_APPLICATION_H_ diff --git a/animations/step_04_d/linux/runner/CMakeLists.txt b/animations/step_04_d/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/animations/step_04_d/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/animations/step_04_a/linux/main.cc b/animations/step_04_d/linux/runner/main.cc similarity index 100% rename from animations/step_04_a/linux/main.cc rename to animations/step_04_d/linux/runner/main.cc diff --git a/animations/step_04_d/linux/runner/my_application.cc b/animations/step_04_d/linux/runner/my_application.cc new file mode 100644 index 0000000000..0040d7e46c --- /dev/null +++ b/animations/step_04_d/linux/runner/my_application.cc @@ -0,0 +1,130 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "quiz"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "quiz"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/animations/step_04_a/linux/my_application.h b/animations/step_04_d/linux/runner/my_application.h similarity index 100% rename from animations/step_04_a/linux/my_application.h rename to animations/step_04_d/linux/runner/my_application.h diff --git a/animations/step_04_d/macos/Runner/AppDelegate.swift b/animations/step_04_d/macos/Runner/AppDelegate.swift index 8e02df2888..b3c1761412 100644 --- a/animations/step_04_d/macos/Runner/AppDelegate.swift +++ b/animations/step_04_d/macos/Runner/AppDelegate.swift @@ -6,4 +6,8 @@ class AppDelegate: FlutterAppDelegate { override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { return true } + + override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { + return true + } } diff --git a/animations/step_04_d/pubspec.yaml b/animations/step_04_d/pubspec.yaml index 52735dfa55..f3328a6945 100644 --- a/animations/step_04_d/pubspec.yaml +++ b/animations/step_04_d/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: "none" version: 1.0.0 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 dependencies: animations: ^2.0.0 diff --git a/animations/step_04_d/web/index.html b/animations/step_04_d/web/index.html index 89656d9a06..ec05768c59 100644 --- a/animations/step_04_d/web/index.html +++ b/animations/step_04_d/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/animations/step_05/linux/main.cc b/animations/step_05/linux/main.cc deleted file mode 100644 index e7c5c54370..0000000000 --- a/animations/step_05/linux/main.cc +++ /dev/null @@ -1,6 +0,0 @@ -#include "my_application.h" - -int main(int argc, char** argv) { - g_autoptr(MyApplication) app = my_application_new(); - return g_application_run(G_APPLICATION(app), argc, argv); -} diff --git a/animations/step_05/linux/my_application.cc b/animations/step_05/linux/my_application.cc deleted file mode 100644 index d6ea0e3c5f..0000000000 --- a/animations/step_05/linux/my_application.cc +++ /dev/null @@ -1,124 +0,0 @@ -#include "my_application.h" - -#include -#ifdef GDK_WINDOWING_X11 -#include -#endif - -#include "flutter/generated_plugin_registrant.h" - -struct _MyApplication { - GtkApplication parent_instance; - char** dart_entrypoint_arguments; -}; - -G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) - -// Implements GApplication::activate. -static void my_application_activate(GApplication* application) { - MyApplication* self = MY_APPLICATION(application); - GtkWindow* window = - GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); - - // Use a header bar when running in GNOME as this is the common style used - // by applications and is the setup most users will be using (e.g. Ubuntu - // desktop). - // If running on X and not using GNOME then just use a traditional title bar - // in case the window manager does more exotic layout, e.g. tiling. - // If running on Wayland assume the header bar will work (may need changing - // if future cases occur). - gboolean use_header_bar = TRUE; -#ifdef GDK_WINDOWING_X11 - GdkScreen* screen = gtk_window_get_screen(window); - if (GDK_IS_X11_SCREEN(screen)) { - const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); - if (g_strcmp0(wm_name, "GNOME Shell") != 0) { - use_header_bar = FALSE; - } - } -#endif - if (use_header_bar) { - GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); - gtk_widget_show(GTK_WIDGET(header_bar)); - gtk_header_bar_set_title(header_bar, "quiz"); - gtk_header_bar_set_show_close_button(header_bar, TRUE); - gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); - } else { - gtk_window_set_title(window, "quiz"); - } - - gtk_window_set_default_size(window, 1280, 720); - gtk_widget_show(GTK_WIDGET(window)); - - g_autoptr(FlDartProject) project = fl_dart_project_new(); - fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); - - FlView* view = fl_view_new(project); - gtk_widget_show(GTK_WIDGET(view)); - gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); - - fl_register_plugins(FL_PLUGIN_REGISTRY(view)); - - gtk_widget_grab_focus(GTK_WIDGET(view)); -} - -// Implements GApplication::local_command_line. -static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { - MyApplication* self = MY_APPLICATION(application); - // Strip out the first argument as it is the binary name. - self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); - - g_autoptr(GError) error = nullptr; - if (!g_application_register(application, nullptr, &error)) { - g_warning("Failed to register: %s", error->message); - *exit_status = 1; - return TRUE; - } - - g_application_activate(application); - *exit_status = 0; - - return TRUE; -} - -// Implements GApplication::startup. -static void my_application_startup(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application startup. - - G_APPLICATION_CLASS(my_application_parent_class)->startup(application); -} - -// Implements GApplication::shutdown. -static void my_application_shutdown(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application shutdown. - - G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); -} - -// Implements GObject::dispose. -static void my_application_dispose(GObject* object) { - MyApplication* self = MY_APPLICATION(object); - g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); - G_OBJECT_CLASS(my_application_parent_class)->dispose(object); -} - -static void my_application_class_init(MyApplicationClass* klass) { - G_APPLICATION_CLASS(klass)->activate = my_application_activate; - G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; - G_APPLICATION_CLASS(klass)->startup = my_application_startup; - G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; - G_OBJECT_CLASS(klass)->dispose = my_application_dispose; -} - -static void my_application_init(MyApplication* self) {} - -MyApplication* my_application_new() { - return MY_APPLICATION(g_object_new(my_application_get_type(), - "application-id", APPLICATION_ID, - "flags", G_APPLICATION_NON_UNIQUE, - nullptr)); -} diff --git a/animations/step_05/linux/my_application.h b/animations/step_05/linux/my_application.h deleted file mode 100644 index 72271d5e41..0000000000 --- a/animations/step_05/linux/my_application.h +++ /dev/null @@ -1,18 +0,0 @@ -#ifndef FLUTTER_MY_APPLICATION_H_ -#define FLUTTER_MY_APPLICATION_H_ - -#include - -G_DECLARE_FINAL_TYPE(MyApplication, my_application, MY, APPLICATION, - GtkApplication) - -/** - * my_application_new: - * - * Creates a new Flutter-based application. - * - * Returns: a new #MyApplication. - */ -MyApplication* my_application_new(); - -#endif // FLUTTER_MY_APPLICATION_H_ From 84f59b03f673a00c853a36deff56905a1c2f935a Mon Sep 17 00:00:00 2001 From: Brett Morgan Date: Thu, 14 Nov 2024 11:39:11 +1100 Subject: [PATCH 057/108] Dart format --- animations/step_02_a/lib/home_screen.dart | 10 +++--- animations/step_02_a/lib/model.dart | 14 ++------ animations/step_02_a/lib/question_screen.dart | 23 ++++++------ animations/step_02_a/lib/scoreboard.dart | 2 +- animations/step_02_a/pubspec.yaml | 2 +- animations/step_02_b/lib/home_screen.dart | 10 +++--- animations/step_02_b/lib/model.dart | 14 ++------ animations/step_02_b/lib/question_screen.dart | 23 ++++++------ animations/step_02_b/lib/scoreboard.dart | 2 +- animations/step_02_b/pubspec.yaml | 2 +- animations/step_02_c/lib/home_screen.dart | 10 +++--- animations/step_02_c/lib/model.dart | 14 ++------ animations/step_02_c/lib/question_screen.dart | 23 ++++++------ animations/step_02_c/lib/scoreboard.dart | 4 +-- animations/step_02_c/pubspec.yaml | 2 +- animations/step_02_d/lib/home_screen.dart | 10 +++--- animations/step_02_d/lib/model.dart | 14 ++------ animations/step_02_d/lib/question_screen.dart | 23 ++++++------ animations/step_02_d/lib/scoreboard.dart | 10 ++---- animations/step_02_d/pubspec.yaml | 2 +- animations/step_02_e/lib/home_screen.dart | 10 +++--- animations/step_02_e/lib/model.dart | 14 ++------ animations/step_02_e/lib/question_screen.dart | 23 ++++++------ animations/step_02_e/lib/scoreboard.dart | 10 ++---- animations/step_02_e/pubspec.yaml | 2 +- animations/step_03_a/lib/home_screen.dart | 10 +++--- animations/step_03_a/lib/model.dart | 14 ++------ animations/step_03_a/lib/question_screen.dart | 23 ++++++------ animations/step_03_a/lib/scoreboard.dart | 10 ++---- animations/step_03_a/pubspec.yaml | 2 +- animations/step_03_b/lib/home_screen.dart | 10 +++--- animations/step_03_b/lib/model.dart | 14 ++------ animations/step_03_b/lib/question_screen.dart | 35 ++++++++++--------- animations/step_03_b/lib/scoreboard.dart | 10 ++---- animations/step_03_b/pubspec.yaml | 2 +- animations/step_03_c/lib/home_screen.dart | 10 +++--- animations/step_03_c/lib/model.dart | 14 ++------ animations/step_03_c/lib/question_screen.dart | 35 ++++++++++--------- animations/step_03_c/lib/scoreboard.dart | 10 ++---- animations/step_03_c/pubspec.yaml | 2 +- animations/step_03_d/lib/home_screen.dart | 10 +++--- animations/step_03_d/lib/model.dart | 14 ++------ animations/step_03_d/lib/question_screen.dart | 35 ++++++++++--------- animations/step_03_d/lib/scoreboard.dart | 10 ++---- animations/step_03_d/pubspec.yaml | 2 +- animations/step_04_a/lib/flip_effect.dart | 21 ++++++----- animations/step_04_a/lib/home_screen.dart | 10 +++--- animations/step_04_a/lib/model.dart | 14 ++------ animations/step_04_a/lib/question_screen.dart | 35 ++++++++++--------- animations/step_04_a/lib/scoreboard.dart | 10 ++---- animations/step_04_a/pubspec.yaml | 2 +- animations/step_04_b/lib/flip_effect.dart | 21 ++++++----- animations/step_04_b/lib/home_screen.dart | 10 +++--- animations/step_04_b/lib/model.dart | 14 ++------ animations/step_04_b/lib/question_screen.dart | 35 ++++++++++--------- animations/step_04_b/lib/scoreboard.dart | 10 ++---- animations/step_04_b/pubspec.yaml | 2 +- animations/step_04_c/lib/flip_effect.dart | 24 ++++++------- animations/step_04_c/lib/home_screen.dart | 10 +++--- animations/step_04_c/lib/model.dart | 14 ++------ animations/step_04_c/lib/question_screen.dart | 35 ++++++++++--------- animations/step_04_c/lib/scoreboard.dart | 10 ++---- animations/step_04_c/pubspec.yaml | 2 +- animations/step_04_d/lib/flip_effect.dart | 24 ++++++------- animations/step_04_d/lib/home_screen.dart | 10 +++--- animations/step_04_d/lib/model.dart | 14 ++------ animations/step_04_d/lib/question_screen.dart | 35 ++++++++++--------- animations/step_04_d/lib/scoreboard.dart | 10 ++---- animations/step_04_d/pubspec.yaml | 2 +- 69 files changed, 354 insertions(+), 565 deletions(-) diff --git a/animations/step_02_a/lib/home_screen.dart b/animations/step_02_a/lib/home_screen.dart index 2d2408d466..e5a6433c47 100644 --- a/animations/step_02_a/lib/home_screen.dart +++ b/animations/step_02_a/lib/home_screen.dart @@ -11,15 +11,13 @@ class HomeScreen extends StatelessWidget { child: Column( mainAxisSize: MainAxisSize.min, children: [ - Text( - '✏️', - style: Theme.of(context).textTheme.displayLarge, - ), + Text('✏️', style: Theme.of(context).textTheme.displayLarge), Text( 'Flutter Quiz', style: Theme.of(context).textTheme.displayLarge!.copyWith( - fontWeight: FontWeight.w700, - color: Theme.of(context).colorScheme.onPrimaryFixedVariant), + fontWeight: FontWeight.w700, + color: Theme.of(context).colorScheme.onPrimaryFixedVariant, + ), ), ElevatedButton( onPressed: () { diff --git a/animations/step_02_a/lib/model.dart b/animations/step_02_a/lib/model.dart index 0662327f52..56666d11dc 100644 --- a/animations/step_02_a/lib/model.dart +++ b/animations/step_02_a/lib/model.dart @@ -30,12 +30,7 @@ List _createQuestions() { return [ Question( 'What class used to create custom explicit animations in Flutter?', - [ - 'AnimationController', - 'AnimatedWidget', - 'AnimatedBuilder', - 'Tween', - ], + ['AnimationController', 'AnimatedWidget', 'AnimatedBuilder', 'Tween'], 0, ), Question( @@ -50,12 +45,7 @@ List _createQuestions() { ), Question( 'What class is used to define the start and end values for an animation?', - [ - 'Tween', - 'Curve', - 'AnimationController', - 'AnimatedWidget', - ], + ['Tween', 'Curve', 'AnimationController', 'AnimatedWidget'], 0, ), ]; diff --git a/animations/step_02_a/lib/question_screen.dart b/animations/step_02_a/lib/question_screen.dart index e5e90c5b42..d42be66a57 100644 --- a/animations/step_02_a/lib/question_screen.dart +++ b/animations/step_02_a/lib/question_screen.dart @@ -9,8 +9,9 @@ class QuestionScreen extends StatefulWidget { } class _QuestionScreenState extends State { - late final QuizViewModel viewModel = - QuizViewModel(onGameOver: _handleGameOver); + late final QuizViewModel viewModel = QuizViewModel( + onGameOver: _handleGameOver, + ); @override Widget build(BuildContext context) { @@ -24,11 +25,11 @@ class _QuestionScreenState extends State { onPressed: viewModel.hasNextQuestion && viewModel.didAnswerQuestion ? () { - viewModel.getNextQuestion(); - } + viewModel.getNextQuestion(); + } : null, child: const Text('Next'), - ) + ), ], ), body: Center( @@ -41,9 +42,10 @@ class _QuestionScreenState extends State { viewModel.checkAnswer(index); }, answers: viewModel.currentQuestion?.possibleAnswers ?? [], - correctAnswer: viewModel.didAnswerQuestion - ? viewModel.currentQuestion?.correctAnswer - : null, + correctAnswer: + viewModel.didAnswerQuestion + ? viewModel.currentQuestion?.correctAnswer + : null, ), StatusBar(viewModel: viewModel), ], @@ -79,10 +81,7 @@ class _QuestionScreenState extends State { class QuestionCard extends StatelessWidget { final String? question; - const QuestionCard({ - required this.question, - super.key, - }); + const QuestionCard({required this.question, super.key}); @override Widget build(BuildContext context) { diff --git a/animations/step_02_a/lib/scoreboard.dart b/animations/step_02_a/lib/scoreboard.dart index e875caebf3..1f8d31e019 100644 --- a/animations/step_02_a/lib/scoreboard.dart +++ b/animations/step_02_a/lib/scoreboard.dart @@ -23,7 +23,7 @@ class Scoreboard extends StatelessWidget { size: 50, color: score < i + 1 ? Colors.grey.shade400 : Colors.yellow.shade700, - ) + ), ], ), ); diff --git a/animations/step_02_a/pubspec.yaml b/animations/step_02_a/pubspec.yaml index 52735dfa55..d8e843d9c9 100644 --- a/animations/step_02_a/pubspec.yaml +++ b/animations/step_02_a/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: "none" version: 1.0.0 environment: - sdk: ^3.5.1 + sdk: ^3.7.0-0 dependencies: animations: ^2.0.0 diff --git a/animations/step_02_b/lib/home_screen.dart b/animations/step_02_b/lib/home_screen.dart index 2d2408d466..e5a6433c47 100644 --- a/animations/step_02_b/lib/home_screen.dart +++ b/animations/step_02_b/lib/home_screen.dart @@ -11,15 +11,13 @@ class HomeScreen extends StatelessWidget { child: Column( mainAxisSize: MainAxisSize.min, children: [ - Text( - '✏️', - style: Theme.of(context).textTheme.displayLarge, - ), + Text('✏️', style: Theme.of(context).textTheme.displayLarge), Text( 'Flutter Quiz', style: Theme.of(context).textTheme.displayLarge!.copyWith( - fontWeight: FontWeight.w700, - color: Theme.of(context).colorScheme.onPrimaryFixedVariant), + fontWeight: FontWeight.w700, + color: Theme.of(context).colorScheme.onPrimaryFixedVariant, + ), ), ElevatedButton( onPressed: () { diff --git a/animations/step_02_b/lib/model.dart b/animations/step_02_b/lib/model.dart index 0662327f52..56666d11dc 100644 --- a/animations/step_02_b/lib/model.dart +++ b/animations/step_02_b/lib/model.dart @@ -30,12 +30,7 @@ List _createQuestions() { return [ Question( 'What class used to create custom explicit animations in Flutter?', - [ - 'AnimationController', - 'AnimatedWidget', - 'AnimatedBuilder', - 'Tween', - ], + ['AnimationController', 'AnimatedWidget', 'AnimatedBuilder', 'Tween'], 0, ), Question( @@ -50,12 +45,7 @@ List _createQuestions() { ), Question( 'What class is used to define the start and end values for an animation?', - [ - 'Tween', - 'Curve', - 'AnimationController', - 'AnimatedWidget', - ], + ['Tween', 'Curve', 'AnimationController', 'AnimatedWidget'], 0, ), ]; diff --git a/animations/step_02_b/lib/question_screen.dart b/animations/step_02_b/lib/question_screen.dart index 84541c918d..cbb77b5673 100644 --- a/animations/step_02_b/lib/question_screen.dart +++ b/animations/step_02_b/lib/question_screen.dart @@ -10,8 +10,9 @@ class QuestionScreen extends StatefulWidget { } class _QuestionScreenState extends State { - late final QuizViewModel viewModel = - QuizViewModel(onGameOver: _handleGameOver); + late final QuizViewModel viewModel = QuizViewModel( + onGameOver: _handleGameOver, + ); @override Widget build(BuildContext context) { @@ -25,11 +26,11 @@ class _QuestionScreenState extends State { onPressed: viewModel.hasNextQuestion && viewModel.didAnswerQuestion ? () { - viewModel.getNextQuestion(); - } + viewModel.getNextQuestion(); + } : null, child: const Text('Next'), - ) + ), ], ), body: Center( @@ -42,9 +43,10 @@ class _QuestionScreenState extends State { viewModel.checkAnswer(index); }, answers: viewModel.currentQuestion?.possibleAnswers ?? [], - correctAnswer: viewModel.didAnswerQuestion - ? viewModel.currentQuestion?.correctAnswer - : null, + correctAnswer: + viewModel.didAnswerQuestion + ? viewModel.currentQuestion?.correctAnswer + : null, ), StatusBar(viewModel: viewModel), ], @@ -80,10 +82,7 @@ class _QuestionScreenState extends State { class QuestionCard extends StatelessWidget { final String? question; - const QuestionCard({ - required this.question, - super.key, - }); + const QuestionCard({required this.question, super.key}); @override Widget build(BuildContext context) { diff --git a/animations/step_02_b/lib/scoreboard.dart b/animations/step_02_b/lib/scoreboard.dart index e875caebf3..1f8d31e019 100644 --- a/animations/step_02_b/lib/scoreboard.dart +++ b/animations/step_02_b/lib/scoreboard.dart @@ -23,7 +23,7 @@ class Scoreboard extends StatelessWidget { size: 50, color: score < i + 1 ? Colors.grey.shade400 : Colors.yellow.shade700, - ) + ), ], ), ); diff --git a/animations/step_02_b/pubspec.yaml b/animations/step_02_b/pubspec.yaml index 52735dfa55..d8e843d9c9 100644 --- a/animations/step_02_b/pubspec.yaml +++ b/animations/step_02_b/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: "none" version: 1.0.0 environment: - sdk: ^3.5.1 + sdk: ^3.7.0-0 dependencies: animations: ^2.0.0 diff --git a/animations/step_02_c/lib/home_screen.dart b/animations/step_02_c/lib/home_screen.dart index 2d2408d466..e5a6433c47 100644 --- a/animations/step_02_c/lib/home_screen.dart +++ b/animations/step_02_c/lib/home_screen.dart @@ -11,15 +11,13 @@ class HomeScreen extends StatelessWidget { child: Column( mainAxisSize: MainAxisSize.min, children: [ - Text( - '✏️', - style: Theme.of(context).textTheme.displayLarge, - ), + Text('✏️', style: Theme.of(context).textTheme.displayLarge), Text( 'Flutter Quiz', style: Theme.of(context).textTheme.displayLarge!.copyWith( - fontWeight: FontWeight.w700, - color: Theme.of(context).colorScheme.onPrimaryFixedVariant), + fontWeight: FontWeight.w700, + color: Theme.of(context).colorScheme.onPrimaryFixedVariant, + ), ), ElevatedButton( onPressed: () { diff --git a/animations/step_02_c/lib/model.dart b/animations/step_02_c/lib/model.dart index 0662327f52..56666d11dc 100644 --- a/animations/step_02_c/lib/model.dart +++ b/animations/step_02_c/lib/model.dart @@ -30,12 +30,7 @@ List _createQuestions() { return [ Question( 'What class used to create custom explicit animations in Flutter?', - [ - 'AnimationController', - 'AnimatedWidget', - 'AnimatedBuilder', - 'Tween', - ], + ['AnimationController', 'AnimatedWidget', 'AnimatedBuilder', 'Tween'], 0, ), Question( @@ -50,12 +45,7 @@ List _createQuestions() { ), Question( 'What class is used to define the start and end values for an animation?', - [ - 'Tween', - 'Curve', - 'AnimationController', - 'AnimatedWidget', - ], + ['Tween', 'Curve', 'AnimationController', 'AnimatedWidget'], 0, ), ]; diff --git a/animations/step_02_c/lib/question_screen.dart b/animations/step_02_c/lib/question_screen.dart index 84541c918d..cbb77b5673 100644 --- a/animations/step_02_c/lib/question_screen.dart +++ b/animations/step_02_c/lib/question_screen.dart @@ -10,8 +10,9 @@ class QuestionScreen extends StatefulWidget { } class _QuestionScreenState extends State { - late final QuizViewModel viewModel = - QuizViewModel(onGameOver: _handleGameOver); + late final QuizViewModel viewModel = QuizViewModel( + onGameOver: _handleGameOver, + ); @override Widget build(BuildContext context) { @@ -25,11 +26,11 @@ class _QuestionScreenState extends State { onPressed: viewModel.hasNextQuestion && viewModel.didAnswerQuestion ? () { - viewModel.getNextQuestion(); - } + viewModel.getNextQuestion(); + } : null, child: const Text('Next'), - ) + ), ], ), body: Center( @@ -42,9 +43,10 @@ class _QuestionScreenState extends State { viewModel.checkAnswer(index); }, answers: viewModel.currentQuestion?.possibleAnswers ?? [], - correctAnswer: viewModel.didAnswerQuestion - ? viewModel.currentQuestion?.correctAnswer - : null, + correctAnswer: + viewModel.didAnswerQuestion + ? viewModel.currentQuestion?.correctAnswer + : null, ), StatusBar(viewModel: viewModel), ], @@ -80,10 +82,7 @@ class _QuestionScreenState extends State { class QuestionCard extends StatelessWidget { final String? question; - const QuestionCard({ - required this.question, - super.key, - }); + const QuestionCard({required this.question, super.key}); @override Widget build(BuildContext context) { diff --git a/animations/step_02_c/lib/scoreboard.dart b/animations/step_02_c/lib/scoreboard.dart index 52ed759ad2..90cc849afe 100644 --- a/animations/step_02_c/lib/scoreboard.dart +++ b/animations/step_02_c/lib/scoreboard.dart @@ -18,9 +18,7 @@ class Scoreboard extends StatelessWidget { mainAxisAlignment: MainAxisAlignment.center, children: [ for (var i = 0; i < totalQuestions; i++) - AnimatedStar( - isActive: score > i, - ) + AnimatedStar(isActive: score > i), ], ), ); diff --git a/animations/step_02_c/pubspec.yaml b/animations/step_02_c/pubspec.yaml index 52735dfa55..d8e843d9c9 100644 --- a/animations/step_02_c/pubspec.yaml +++ b/animations/step_02_c/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: "none" version: 1.0.0 environment: - sdk: ^3.5.1 + sdk: ^3.7.0-0 dependencies: animations: ^2.0.0 diff --git a/animations/step_02_d/lib/home_screen.dart b/animations/step_02_d/lib/home_screen.dart index 2d2408d466..e5a6433c47 100644 --- a/animations/step_02_d/lib/home_screen.dart +++ b/animations/step_02_d/lib/home_screen.dart @@ -11,15 +11,13 @@ class HomeScreen extends StatelessWidget { child: Column( mainAxisSize: MainAxisSize.min, children: [ - Text( - '✏️', - style: Theme.of(context).textTheme.displayLarge, - ), + Text('✏️', style: Theme.of(context).textTheme.displayLarge), Text( 'Flutter Quiz', style: Theme.of(context).textTheme.displayLarge!.copyWith( - fontWeight: FontWeight.w700, - color: Theme.of(context).colorScheme.onPrimaryFixedVariant), + fontWeight: FontWeight.w700, + color: Theme.of(context).colorScheme.onPrimaryFixedVariant, + ), ), ElevatedButton( onPressed: () { diff --git a/animations/step_02_d/lib/model.dart b/animations/step_02_d/lib/model.dart index 0662327f52..56666d11dc 100644 --- a/animations/step_02_d/lib/model.dart +++ b/animations/step_02_d/lib/model.dart @@ -30,12 +30,7 @@ List _createQuestions() { return [ Question( 'What class used to create custom explicit animations in Flutter?', - [ - 'AnimationController', - 'AnimatedWidget', - 'AnimatedBuilder', - 'Tween', - ], + ['AnimationController', 'AnimatedWidget', 'AnimatedBuilder', 'Tween'], 0, ), Question( @@ -50,12 +45,7 @@ List _createQuestions() { ), Question( 'What class is used to define the start and end values for an animation?', - [ - 'Tween', - 'Curve', - 'AnimationController', - 'AnimatedWidget', - ], + ['Tween', 'Curve', 'AnimationController', 'AnimatedWidget'], 0, ), ]; diff --git a/animations/step_02_d/lib/question_screen.dart b/animations/step_02_d/lib/question_screen.dart index 84541c918d..cbb77b5673 100644 --- a/animations/step_02_d/lib/question_screen.dart +++ b/animations/step_02_d/lib/question_screen.dart @@ -10,8 +10,9 @@ class QuestionScreen extends StatefulWidget { } class _QuestionScreenState extends State { - late final QuizViewModel viewModel = - QuizViewModel(onGameOver: _handleGameOver); + late final QuizViewModel viewModel = QuizViewModel( + onGameOver: _handleGameOver, + ); @override Widget build(BuildContext context) { @@ -25,11 +26,11 @@ class _QuestionScreenState extends State { onPressed: viewModel.hasNextQuestion && viewModel.didAnswerQuestion ? () { - viewModel.getNextQuestion(); - } + viewModel.getNextQuestion(); + } : null, child: const Text('Next'), - ) + ), ], ), body: Center( @@ -42,9 +43,10 @@ class _QuestionScreenState extends State { viewModel.checkAnswer(index); }, answers: viewModel.currentQuestion?.possibleAnswers ?? [], - correctAnswer: viewModel.didAnswerQuestion - ? viewModel.currentQuestion?.correctAnswer - : null, + correctAnswer: + viewModel.didAnswerQuestion + ? viewModel.currentQuestion?.correctAnswer + : null, ), StatusBar(viewModel: viewModel), ], @@ -80,10 +82,7 @@ class _QuestionScreenState extends State { class QuestionCard extends StatelessWidget { final String? question; - const QuestionCard({ - required this.question, - super.key, - }); + const QuestionCard({required this.question, super.key}); @override Widget build(BuildContext context) { diff --git a/animations/step_02_d/lib/scoreboard.dart b/animations/step_02_d/lib/scoreboard.dart index 734b3223ec..b9f8689830 100644 --- a/animations/step_02_d/lib/scoreboard.dart +++ b/animations/step_02_d/lib/scoreboard.dart @@ -18,9 +18,7 @@ class Scoreboard extends StatelessWidget { mainAxisAlignment: MainAxisAlignment.center, children: [ for (var i = 0; i < totalQuestions; i++) - AnimatedStar( - isActive: score > i, - ) + AnimatedStar(isActive: score > i), ], ), ); @@ -47,11 +45,7 @@ class AnimatedStar extends StatelessWidget { end: isActive ? _activatedColor : _deactivatedColor, ), builder: (context, value, child) { - return Icon( - Icons.star, - size: 50, - color: value, - ); + return Icon(Icons.star, size: 50, color: value); }, ), ); diff --git a/animations/step_02_d/pubspec.yaml b/animations/step_02_d/pubspec.yaml index 52735dfa55..d8e843d9c9 100644 --- a/animations/step_02_d/pubspec.yaml +++ b/animations/step_02_d/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: "none" version: 1.0.0 environment: - sdk: ^3.5.1 + sdk: ^3.7.0-0 dependencies: animations: ^2.0.0 diff --git a/animations/step_02_e/lib/home_screen.dart b/animations/step_02_e/lib/home_screen.dart index 2d2408d466..e5a6433c47 100644 --- a/animations/step_02_e/lib/home_screen.dart +++ b/animations/step_02_e/lib/home_screen.dart @@ -11,15 +11,13 @@ class HomeScreen extends StatelessWidget { child: Column( mainAxisSize: MainAxisSize.min, children: [ - Text( - '✏️', - style: Theme.of(context).textTheme.displayLarge, - ), + Text('✏️', style: Theme.of(context).textTheme.displayLarge), Text( 'Flutter Quiz', style: Theme.of(context).textTheme.displayLarge!.copyWith( - fontWeight: FontWeight.w700, - color: Theme.of(context).colorScheme.onPrimaryFixedVariant), + fontWeight: FontWeight.w700, + color: Theme.of(context).colorScheme.onPrimaryFixedVariant, + ), ), ElevatedButton( onPressed: () { diff --git a/animations/step_02_e/lib/model.dart b/animations/step_02_e/lib/model.dart index 0662327f52..56666d11dc 100644 --- a/animations/step_02_e/lib/model.dart +++ b/animations/step_02_e/lib/model.dart @@ -30,12 +30,7 @@ List _createQuestions() { return [ Question( 'What class used to create custom explicit animations in Flutter?', - [ - 'AnimationController', - 'AnimatedWidget', - 'AnimatedBuilder', - 'Tween', - ], + ['AnimationController', 'AnimatedWidget', 'AnimatedBuilder', 'Tween'], 0, ), Question( @@ -50,12 +45,7 @@ List _createQuestions() { ), Question( 'What class is used to define the start and end values for an animation?', - [ - 'Tween', - 'Curve', - 'AnimationController', - 'AnimatedWidget', - ], + ['Tween', 'Curve', 'AnimationController', 'AnimatedWidget'], 0, ), ]; diff --git a/animations/step_02_e/lib/question_screen.dart b/animations/step_02_e/lib/question_screen.dart index 84541c918d..cbb77b5673 100644 --- a/animations/step_02_e/lib/question_screen.dart +++ b/animations/step_02_e/lib/question_screen.dart @@ -10,8 +10,9 @@ class QuestionScreen extends StatefulWidget { } class _QuestionScreenState extends State { - late final QuizViewModel viewModel = - QuizViewModel(onGameOver: _handleGameOver); + late final QuizViewModel viewModel = QuizViewModel( + onGameOver: _handleGameOver, + ); @override Widget build(BuildContext context) { @@ -25,11 +26,11 @@ class _QuestionScreenState extends State { onPressed: viewModel.hasNextQuestion && viewModel.didAnswerQuestion ? () { - viewModel.getNextQuestion(); - } + viewModel.getNextQuestion(); + } : null, child: const Text('Next'), - ) + ), ], ), body: Center( @@ -42,9 +43,10 @@ class _QuestionScreenState extends State { viewModel.checkAnswer(index); }, answers: viewModel.currentQuestion?.possibleAnswers ?? [], - correctAnswer: viewModel.didAnswerQuestion - ? viewModel.currentQuestion?.correctAnswer - : null, + correctAnswer: + viewModel.didAnswerQuestion + ? viewModel.currentQuestion?.correctAnswer + : null, ), StatusBar(viewModel: viewModel), ], @@ -80,10 +82,7 @@ class _QuestionScreenState extends State { class QuestionCard extends StatelessWidget { final String? question; - const QuestionCard({ - required this.question, - super.key, - }); + const QuestionCard({required this.question, super.key}); @override Widget build(BuildContext context) { diff --git a/animations/step_02_e/lib/scoreboard.dart b/animations/step_02_e/lib/scoreboard.dart index dd71080ba3..765711fe87 100644 --- a/animations/step_02_e/lib/scoreboard.dart +++ b/animations/step_02_e/lib/scoreboard.dart @@ -18,9 +18,7 @@ class Scoreboard extends StatelessWidget { mainAxisAlignment: MainAxisAlignment.center, children: [ for (var i = 0; i < totalQuestions; i++) - AnimatedStar( - isActive: score > i, - ) + AnimatedStar(isActive: score > i), ], ), ); @@ -50,11 +48,7 @@ class AnimatedStar extends StatelessWidget { end: isActive ? _activatedColor : _deactivatedColor, ), builder: (context, value, child) { - return Icon( - Icons.star, - size: 50, - color: value, - ); + return Icon(Icons.star, size: 50, color: value); }, ), ); diff --git a/animations/step_02_e/pubspec.yaml b/animations/step_02_e/pubspec.yaml index 52735dfa55..d8e843d9c9 100644 --- a/animations/step_02_e/pubspec.yaml +++ b/animations/step_02_e/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: "none" version: 1.0.0 environment: - sdk: ^3.5.1 + sdk: ^3.7.0-0 dependencies: animations: ^2.0.0 diff --git a/animations/step_03_a/lib/home_screen.dart b/animations/step_03_a/lib/home_screen.dart index 2d2408d466..e5a6433c47 100644 --- a/animations/step_03_a/lib/home_screen.dart +++ b/animations/step_03_a/lib/home_screen.dart @@ -11,15 +11,13 @@ class HomeScreen extends StatelessWidget { child: Column( mainAxisSize: MainAxisSize.min, children: [ - Text( - '✏️', - style: Theme.of(context).textTheme.displayLarge, - ), + Text('✏️', style: Theme.of(context).textTheme.displayLarge), Text( 'Flutter Quiz', style: Theme.of(context).textTheme.displayLarge!.copyWith( - fontWeight: FontWeight.w700, - color: Theme.of(context).colorScheme.onPrimaryFixedVariant), + fontWeight: FontWeight.w700, + color: Theme.of(context).colorScheme.onPrimaryFixedVariant, + ), ), ElevatedButton( onPressed: () { diff --git a/animations/step_03_a/lib/model.dart b/animations/step_03_a/lib/model.dart index 0662327f52..56666d11dc 100644 --- a/animations/step_03_a/lib/model.dart +++ b/animations/step_03_a/lib/model.dart @@ -30,12 +30,7 @@ List _createQuestions() { return [ Question( 'What class used to create custom explicit animations in Flutter?', - [ - 'AnimationController', - 'AnimatedWidget', - 'AnimatedBuilder', - 'Tween', - ], + ['AnimationController', 'AnimatedWidget', 'AnimatedBuilder', 'Tween'], 0, ), Question( @@ -50,12 +45,7 @@ List _createQuestions() { ), Question( 'What class is used to define the start and end values for an animation?', - [ - 'Tween', - 'Curve', - 'AnimationController', - 'AnimatedWidget', - ], + ['Tween', 'Curve', 'AnimationController', 'AnimatedWidget'], 0, ), ]; diff --git a/animations/step_03_a/lib/question_screen.dart b/animations/step_03_a/lib/question_screen.dart index e6fe0502c2..4be2fd5f7e 100644 --- a/animations/step_03_a/lib/question_screen.dart +++ b/animations/step_03_a/lib/question_screen.dart @@ -10,8 +10,9 @@ class QuestionScreen extends StatefulWidget { } class _QuestionScreenState extends State { - late final QuizViewModel viewModel = - QuizViewModel(onGameOver: _handleGameOver); + late final QuizViewModel viewModel = QuizViewModel( + onGameOver: _handleGameOver, + ); @override Widget build(BuildContext context) { @@ -25,11 +26,11 @@ class _QuestionScreenState extends State { onPressed: viewModel.hasNextQuestion && viewModel.didAnswerQuestion ? () { - viewModel.getNextQuestion(); - } + viewModel.getNextQuestion(); + } : null, child: const Text('Next'), - ) + ), ], ), body: Center( @@ -42,9 +43,10 @@ class _QuestionScreenState extends State { viewModel.checkAnswer(index); }, answers: viewModel.currentQuestion?.possibleAnswers ?? [], - correctAnswer: viewModel.didAnswerQuestion - ? viewModel.currentQuestion?.correctAnswer - : null, + correctAnswer: + viewModel.didAnswerQuestion + ? viewModel.currentQuestion?.correctAnswer + : null, ), StatusBar(viewModel: viewModel), ], @@ -80,10 +82,7 @@ class _QuestionScreenState extends State { class QuestionCard extends StatelessWidget { final String? question; - const QuestionCard({ - required this.question, - super.key, - }); + const QuestionCard({required this.question, super.key}); @override Widget build(BuildContext context) { diff --git a/animations/step_03_a/lib/scoreboard.dart b/animations/step_03_a/lib/scoreboard.dart index dd71080ba3..765711fe87 100644 --- a/animations/step_03_a/lib/scoreboard.dart +++ b/animations/step_03_a/lib/scoreboard.dart @@ -18,9 +18,7 @@ class Scoreboard extends StatelessWidget { mainAxisAlignment: MainAxisAlignment.center, children: [ for (var i = 0; i < totalQuestions; i++) - AnimatedStar( - isActive: score > i, - ) + AnimatedStar(isActive: score > i), ], ), ); @@ -50,11 +48,7 @@ class AnimatedStar extends StatelessWidget { end: isActive ? _activatedColor : _deactivatedColor, ), builder: (context, value, child) { - return Icon( - Icons.star, - size: 50, - color: value, - ); + return Icon(Icons.star, size: 50, color: value); }, ), ); diff --git a/animations/step_03_a/pubspec.yaml b/animations/step_03_a/pubspec.yaml index 52735dfa55..d8e843d9c9 100644 --- a/animations/step_03_a/pubspec.yaml +++ b/animations/step_03_a/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: "none" version: 1.0.0 environment: - sdk: ^3.5.1 + sdk: ^3.7.0-0 dependencies: animations: ^2.0.0 diff --git a/animations/step_03_b/lib/home_screen.dart b/animations/step_03_b/lib/home_screen.dart index 2d2408d466..e5a6433c47 100644 --- a/animations/step_03_b/lib/home_screen.dart +++ b/animations/step_03_b/lib/home_screen.dart @@ -11,15 +11,13 @@ class HomeScreen extends StatelessWidget { child: Column( mainAxisSize: MainAxisSize.min, children: [ - Text( - '✏️', - style: Theme.of(context).textTheme.displayLarge, - ), + Text('✏️', style: Theme.of(context).textTheme.displayLarge), Text( 'Flutter Quiz', style: Theme.of(context).textTheme.displayLarge!.copyWith( - fontWeight: FontWeight.w700, - color: Theme.of(context).colorScheme.onPrimaryFixedVariant), + fontWeight: FontWeight.w700, + color: Theme.of(context).colorScheme.onPrimaryFixedVariant, + ), ), ElevatedButton( onPressed: () { diff --git a/animations/step_03_b/lib/model.dart b/animations/step_03_b/lib/model.dart index 0662327f52..56666d11dc 100644 --- a/animations/step_03_b/lib/model.dart +++ b/animations/step_03_b/lib/model.dart @@ -30,12 +30,7 @@ List _createQuestions() { return [ Question( 'What class used to create custom explicit animations in Flutter?', - [ - 'AnimationController', - 'AnimatedWidget', - 'AnimatedBuilder', - 'Tween', - ], + ['AnimationController', 'AnimatedWidget', 'AnimatedBuilder', 'Tween'], 0, ), Question( @@ -50,12 +45,7 @@ List _createQuestions() { ), Question( 'What class is used to define the start and end values for an animation?', - [ - 'Tween', - 'Curve', - 'AnimationController', - 'AnimatedWidget', - ], + ['Tween', 'Curve', 'AnimationController', 'AnimatedWidget'], 0, ), ]; diff --git a/animations/step_03_b/lib/question_screen.dart b/animations/step_03_b/lib/question_screen.dart index 1cbbec7d2a..4bf7423766 100644 --- a/animations/step_03_b/lib/question_screen.dart +++ b/animations/step_03_b/lib/question_screen.dart @@ -10,8 +10,9 @@ class QuestionScreen extends StatefulWidget { } class _QuestionScreenState extends State { - late final QuizViewModel viewModel = - QuizViewModel(onGameOver: _handleGameOver); + late final QuizViewModel viewModel = QuizViewModel( + onGameOver: _handleGameOver, + ); @override Widget build(BuildContext context) { @@ -25,11 +26,11 @@ class _QuestionScreenState extends State { onPressed: viewModel.hasNextQuestion && viewModel.didAnswerQuestion ? () { - viewModel.getNextQuestion(); - } + viewModel.getNextQuestion(); + } : null, child: const Text('Next'), - ) + ), ], ), body: Center( @@ -42,9 +43,10 @@ class _QuestionScreenState extends State { viewModel.checkAnswer(index); }, answers: viewModel.currentQuestion?.possibleAnswers ?? [], - correctAnswer: viewModel.didAnswerQuestion - ? viewModel.currentQuestion?.correctAnswer - : null, + correctAnswer: + viewModel.didAnswerQuestion + ? viewModel.currentQuestion?.correctAnswer + : null, ), StatusBar(viewModel: viewModel), ], @@ -80,20 +82,19 @@ class _QuestionScreenState extends State { class QuestionCard extends StatelessWidget { final String? question; - const QuestionCard({ - required this.question, - super.key, - }); + const QuestionCard({required this.question, super.key}); @override Widget build(BuildContext context) { return AnimatedSwitcher( transitionBuilder: (Widget child, Animation animation) { - final curveAnimation = - CurveTween(curve: Curves.easeInCubic).animate(animation); - final offsetAnimation = - Tween(begin: Offset(-0.1, 0.0), end: Offset.zero) - .animate(curveAnimation); + final curveAnimation = CurveTween( + curve: Curves.easeInCubic, + ).animate(animation); + final offsetAnimation = Tween( + begin: Offset(-0.1, 0.0), + end: Offset.zero, + ).animate(curveAnimation); return SlideTransition(position: offsetAnimation, child: child); }, duration: const Duration(milliseconds: 300), diff --git a/animations/step_03_b/lib/scoreboard.dart b/animations/step_03_b/lib/scoreboard.dart index dd71080ba3..765711fe87 100644 --- a/animations/step_03_b/lib/scoreboard.dart +++ b/animations/step_03_b/lib/scoreboard.dart @@ -18,9 +18,7 @@ class Scoreboard extends StatelessWidget { mainAxisAlignment: MainAxisAlignment.center, children: [ for (var i = 0; i < totalQuestions; i++) - AnimatedStar( - isActive: score > i, - ) + AnimatedStar(isActive: score > i), ], ), ); @@ -50,11 +48,7 @@ class AnimatedStar extends StatelessWidget { end: isActive ? _activatedColor : _deactivatedColor, ), builder: (context, value, child) { - return Icon( - Icons.star, - size: 50, - color: value, - ); + return Icon(Icons.star, size: 50, color: value); }, ), ); diff --git a/animations/step_03_b/pubspec.yaml b/animations/step_03_b/pubspec.yaml index 52735dfa55..d8e843d9c9 100644 --- a/animations/step_03_b/pubspec.yaml +++ b/animations/step_03_b/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: "none" version: 1.0.0 environment: - sdk: ^3.5.1 + sdk: ^3.7.0-0 dependencies: animations: ^2.0.0 diff --git a/animations/step_03_c/lib/home_screen.dart b/animations/step_03_c/lib/home_screen.dart index 2d2408d466..e5a6433c47 100644 --- a/animations/step_03_c/lib/home_screen.dart +++ b/animations/step_03_c/lib/home_screen.dart @@ -11,15 +11,13 @@ class HomeScreen extends StatelessWidget { child: Column( mainAxisSize: MainAxisSize.min, children: [ - Text( - '✏️', - style: Theme.of(context).textTheme.displayLarge, - ), + Text('✏️', style: Theme.of(context).textTheme.displayLarge), Text( 'Flutter Quiz', style: Theme.of(context).textTheme.displayLarge!.copyWith( - fontWeight: FontWeight.w700, - color: Theme.of(context).colorScheme.onPrimaryFixedVariant), + fontWeight: FontWeight.w700, + color: Theme.of(context).colorScheme.onPrimaryFixedVariant, + ), ), ElevatedButton( onPressed: () { diff --git a/animations/step_03_c/lib/model.dart b/animations/step_03_c/lib/model.dart index 0662327f52..56666d11dc 100644 --- a/animations/step_03_c/lib/model.dart +++ b/animations/step_03_c/lib/model.dart @@ -30,12 +30,7 @@ List _createQuestions() { return [ Question( 'What class used to create custom explicit animations in Flutter?', - [ - 'AnimationController', - 'AnimatedWidget', - 'AnimatedBuilder', - 'Tween', - ], + ['AnimationController', 'AnimatedWidget', 'AnimatedBuilder', 'Tween'], 0, ), Question( @@ -50,12 +45,7 @@ List _createQuestions() { ), Question( 'What class is used to define the start and end values for an animation?', - [ - 'Tween', - 'Curve', - 'AnimationController', - 'AnimatedWidget', - ], + ['Tween', 'Curve', 'AnimationController', 'AnimatedWidget'], 0, ), ]; diff --git a/animations/step_03_c/lib/question_screen.dart b/animations/step_03_c/lib/question_screen.dart index db5895a8b2..fb3e24b8dc 100644 --- a/animations/step_03_c/lib/question_screen.dart +++ b/animations/step_03_c/lib/question_screen.dart @@ -10,8 +10,9 @@ class QuestionScreen extends StatefulWidget { } class _QuestionScreenState extends State { - late final QuizViewModel viewModel = - QuizViewModel(onGameOver: _handleGameOver); + late final QuizViewModel viewModel = QuizViewModel( + onGameOver: _handleGameOver, + ); @override Widget build(BuildContext context) { @@ -25,11 +26,11 @@ class _QuestionScreenState extends State { onPressed: viewModel.hasNextQuestion && viewModel.didAnswerQuestion ? () { - viewModel.getNextQuestion(); - } + viewModel.getNextQuestion(); + } : null, child: const Text('Next'), - ) + ), ], ), body: Center( @@ -42,9 +43,10 @@ class _QuestionScreenState extends State { viewModel.checkAnswer(index); }, answers: viewModel.currentQuestion?.possibleAnswers ?? [], - correctAnswer: viewModel.didAnswerQuestion - ? viewModel.currentQuestion?.correctAnswer - : null, + correctAnswer: + viewModel.didAnswerQuestion + ? viewModel.currentQuestion?.correctAnswer + : null, ), StatusBar(viewModel: viewModel), ], @@ -80,20 +82,19 @@ class _QuestionScreenState extends State { class QuestionCard extends StatelessWidget { final String? question; - const QuestionCard({ - required this.question, - super.key, - }); + const QuestionCard({required this.question, super.key}); @override Widget build(BuildContext context) { return AnimatedSwitcher( transitionBuilder: (Widget child, Animation animation) { - final curveAnimation = - CurveTween(curve: Curves.easeInCubic).animate(animation); - final offsetAnimation = - Tween(begin: Offset(-0.1, 0.0), end: Offset.zero) - .animate(curveAnimation); + final curveAnimation = CurveTween( + curve: Curves.easeInCubic, + ).animate(animation); + final offsetAnimation = Tween( + begin: Offset(-0.1, 0.0), + end: Offset.zero, + ).animate(curveAnimation); final fadeInAnimation = curveAnimation; return FadeTransition( opacity: fadeInAnimation, diff --git a/animations/step_03_c/lib/scoreboard.dart b/animations/step_03_c/lib/scoreboard.dart index dd71080ba3..765711fe87 100644 --- a/animations/step_03_c/lib/scoreboard.dart +++ b/animations/step_03_c/lib/scoreboard.dart @@ -18,9 +18,7 @@ class Scoreboard extends StatelessWidget { mainAxisAlignment: MainAxisAlignment.center, children: [ for (var i = 0; i < totalQuestions; i++) - AnimatedStar( - isActive: score > i, - ) + AnimatedStar(isActive: score > i), ], ), ); @@ -50,11 +48,7 @@ class AnimatedStar extends StatelessWidget { end: isActive ? _activatedColor : _deactivatedColor, ), builder: (context, value, child) { - return Icon( - Icons.star, - size: 50, - color: value, - ); + return Icon(Icons.star, size: 50, color: value); }, ), ); diff --git a/animations/step_03_c/pubspec.yaml b/animations/step_03_c/pubspec.yaml index 52735dfa55..d8e843d9c9 100644 --- a/animations/step_03_c/pubspec.yaml +++ b/animations/step_03_c/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: "none" version: 1.0.0 environment: - sdk: ^3.5.1 + sdk: ^3.7.0-0 dependencies: animations: ^2.0.0 diff --git a/animations/step_03_d/lib/home_screen.dart b/animations/step_03_d/lib/home_screen.dart index 2d2408d466..e5a6433c47 100644 --- a/animations/step_03_d/lib/home_screen.dart +++ b/animations/step_03_d/lib/home_screen.dart @@ -11,15 +11,13 @@ class HomeScreen extends StatelessWidget { child: Column( mainAxisSize: MainAxisSize.min, children: [ - Text( - '✏️', - style: Theme.of(context).textTheme.displayLarge, - ), + Text('✏️', style: Theme.of(context).textTheme.displayLarge), Text( 'Flutter Quiz', style: Theme.of(context).textTheme.displayLarge!.copyWith( - fontWeight: FontWeight.w700, - color: Theme.of(context).colorScheme.onPrimaryFixedVariant), + fontWeight: FontWeight.w700, + color: Theme.of(context).colorScheme.onPrimaryFixedVariant, + ), ), ElevatedButton( onPressed: () { diff --git a/animations/step_03_d/lib/model.dart b/animations/step_03_d/lib/model.dart index 0662327f52..56666d11dc 100644 --- a/animations/step_03_d/lib/model.dart +++ b/animations/step_03_d/lib/model.dart @@ -30,12 +30,7 @@ List _createQuestions() { return [ Question( 'What class used to create custom explicit animations in Flutter?', - [ - 'AnimationController', - 'AnimatedWidget', - 'AnimatedBuilder', - 'Tween', - ], + ['AnimationController', 'AnimatedWidget', 'AnimatedBuilder', 'Tween'], 0, ), Question( @@ -50,12 +45,7 @@ List _createQuestions() { ), Question( 'What class is used to define the start and end values for an animation?', - [ - 'Tween', - 'Curve', - 'AnimationController', - 'AnimatedWidget', - ], + ['Tween', 'Curve', 'AnimationController', 'AnimatedWidget'], 0, ), ]; diff --git a/animations/step_03_d/lib/question_screen.dart b/animations/step_03_d/lib/question_screen.dart index a3f8e11e0f..4bda3d9b41 100644 --- a/animations/step_03_d/lib/question_screen.dart +++ b/animations/step_03_d/lib/question_screen.dart @@ -10,8 +10,9 @@ class QuestionScreen extends StatefulWidget { } class _QuestionScreenState extends State { - late final QuizViewModel viewModel = - QuizViewModel(onGameOver: _handleGameOver); + late final QuizViewModel viewModel = QuizViewModel( + onGameOver: _handleGameOver, + ); @override Widget build(BuildContext context) { @@ -25,11 +26,11 @@ class _QuestionScreenState extends State { onPressed: viewModel.hasNextQuestion && viewModel.didAnswerQuestion ? () { - viewModel.getNextQuestion(); - } + viewModel.getNextQuestion(); + } : null, child: const Text('Next'), - ) + ), ], ), body: Center( @@ -42,9 +43,10 @@ class _QuestionScreenState extends State { viewModel.checkAnswer(index); }, answers: viewModel.currentQuestion?.possibleAnswers ?? [], - correctAnswer: viewModel.didAnswerQuestion - ? viewModel.currentQuestion?.correctAnswer - : null, + correctAnswer: + viewModel.didAnswerQuestion + ? viewModel.currentQuestion?.correctAnswer + : null, ), StatusBar(viewModel: viewModel), ], @@ -80,10 +82,7 @@ class _QuestionScreenState extends State { class QuestionCard extends StatelessWidget { final String? question; - const QuestionCard({ - required this.question, - super.key, - }); + const QuestionCard({required this.question, super.key}); @override Widget build(BuildContext context) { @@ -98,11 +97,13 @@ class QuestionCard extends StatelessWidget { ); }, transitionBuilder: (Widget child, Animation animation) { - final curveAnimation = - CurveTween(curve: Curves.easeInCubic).animate(animation); - final offsetAnimation = - Tween(begin: Offset(-0.1, 0.0), end: Offset.zero) - .animate(curveAnimation); + final curveAnimation = CurveTween( + curve: Curves.easeInCubic, + ).animate(animation); + final offsetAnimation = Tween( + begin: Offset(-0.1, 0.0), + end: Offset.zero, + ).animate(curveAnimation); final fadeInAnimation = curveAnimation; return FadeTransition( opacity: fadeInAnimation, diff --git a/animations/step_03_d/lib/scoreboard.dart b/animations/step_03_d/lib/scoreboard.dart index dd71080ba3..765711fe87 100644 --- a/animations/step_03_d/lib/scoreboard.dart +++ b/animations/step_03_d/lib/scoreboard.dart @@ -18,9 +18,7 @@ class Scoreboard extends StatelessWidget { mainAxisAlignment: MainAxisAlignment.center, children: [ for (var i = 0; i < totalQuestions; i++) - AnimatedStar( - isActive: score > i, - ) + AnimatedStar(isActive: score > i), ], ), ); @@ -50,11 +48,7 @@ class AnimatedStar extends StatelessWidget { end: isActive ? _activatedColor : _deactivatedColor, ), builder: (context, value, child) { - return Icon( - Icons.star, - size: 50, - color: value, - ); + return Icon(Icons.star, size: 50, color: value); }, ), ); diff --git a/animations/step_03_d/pubspec.yaml b/animations/step_03_d/pubspec.yaml index 52735dfa55..d8e843d9c9 100644 --- a/animations/step_03_d/pubspec.yaml +++ b/animations/step_03_d/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: "none" version: 1.0.0 environment: - sdk: ^3.5.1 + sdk: ^3.7.0-0 dependencies: animations: ^2.0.0 diff --git a/animations/step_04_a/lib/flip_effect.dart b/animations/step_04_a/lib/flip_effect.dart index 021d862a36..a1b393c238 100644 --- a/animations/step_04_a/lib/flip_effect.dart +++ b/animations/step_04_a/lib/flip_effect.dart @@ -24,8 +24,10 @@ class _CardFlipEffectState extends State void initState() { super.initState(); - _animationController = - AnimationController(vsync: this, duration: widget.duration); + _animationController = AnimationController( + vsync: this, + duration: widget.duration, + ); _animationController.addListener(() { if (_animationController.value == 1) { @@ -55,13 +57,14 @@ class _CardFlipEffectState extends State builder: (context, child) { return Transform( alignment: Alignment.center, - transform: Matrix4.identity() - ..rotateX(_animationController.value * math.pi), - child: _animationController.isAnimating - ? _animationController.value < 0.5 - ? _previousChild - : Transform.flip(flipY: true, child: widget.child) - : widget.child, + transform: + Matrix4.identity()..rotateX(_animationController.value * math.pi), + child: + _animationController.isAnimating + ? _animationController.value < 0.5 + ? _previousChild + : Transform.flip(flipY: true, child: widget.child) + : widget.child, ); }, child: widget.child, diff --git a/animations/step_04_a/lib/home_screen.dart b/animations/step_04_a/lib/home_screen.dart index 2d2408d466..e5a6433c47 100644 --- a/animations/step_04_a/lib/home_screen.dart +++ b/animations/step_04_a/lib/home_screen.dart @@ -11,15 +11,13 @@ class HomeScreen extends StatelessWidget { child: Column( mainAxisSize: MainAxisSize.min, children: [ - Text( - '✏️', - style: Theme.of(context).textTheme.displayLarge, - ), + Text('✏️', style: Theme.of(context).textTheme.displayLarge), Text( 'Flutter Quiz', style: Theme.of(context).textTheme.displayLarge!.copyWith( - fontWeight: FontWeight.w700, - color: Theme.of(context).colorScheme.onPrimaryFixedVariant), + fontWeight: FontWeight.w700, + color: Theme.of(context).colorScheme.onPrimaryFixedVariant, + ), ), ElevatedButton( onPressed: () { diff --git a/animations/step_04_a/lib/model.dart b/animations/step_04_a/lib/model.dart index 0662327f52..56666d11dc 100644 --- a/animations/step_04_a/lib/model.dart +++ b/animations/step_04_a/lib/model.dart @@ -30,12 +30,7 @@ List _createQuestions() { return [ Question( 'What class used to create custom explicit animations in Flutter?', - [ - 'AnimationController', - 'AnimatedWidget', - 'AnimatedBuilder', - 'Tween', - ], + ['AnimationController', 'AnimatedWidget', 'AnimatedBuilder', 'Tween'], 0, ), Question( @@ -50,12 +45,7 @@ List _createQuestions() { ), Question( 'What class is used to define the start and end values for an animation?', - [ - 'Tween', - 'Curve', - 'AnimationController', - 'AnimatedWidget', - ], + ['Tween', 'Curve', 'AnimationController', 'AnimatedWidget'], 0, ), ]; diff --git a/animations/step_04_a/lib/question_screen.dart b/animations/step_04_a/lib/question_screen.dart index 77bb71e262..4203920147 100644 --- a/animations/step_04_a/lib/question_screen.dart +++ b/animations/step_04_a/lib/question_screen.dart @@ -11,8 +11,9 @@ class QuestionScreen extends StatefulWidget { } class _QuestionScreenState extends State { - late final QuizViewModel viewModel = - QuizViewModel(onGameOver: _handleGameOver); + late final QuizViewModel viewModel = QuizViewModel( + onGameOver: _handleGameOver, + ); @override Widget build(BuildContext context) { @@ -26,11 +27,11 @@ class _QuestionScreenState extends State { onPressed: viewModel.hasNextQuestion && viewModel.didAnswerQuestion ? () { - viewModel.getNextQuestion(); - } + viewModel.getNextQuestion(); + } : null, child: const Text('Next'), - ) + ), ], ), body: Center( @@ -43,9 +44,10 @@ class _QuestionScreenState extends State { viewModel.checkAnswer(index); }, answers: viewModel.currentQuestion?.possibleAnswers ?? [], - correctAnswer: viewModel.didAnswerQuestion - ? viewModel.currentQuestion?.correctAnswer - : null, + correctAnswer: + viewModel.didAnswerQuestion + ? viewModel.currentQuestion?.correctAnswer + : null, ), StatusBar(viewModel: viewModel), ], @@ -81,10 +83,7 @@ class _QuestionScreenState extends State { class QuestionCard extends StatelessWidget { final String? question; - const QuestionCard({ - required this.question, - super.key, - }); + const QuestionCard({required this.question, super.key}); @override Widget build(BuildContext context) { @@ -99,11 +98,13 @@ class QuestionCard extends StatelessWidget { ); }, transitionBuilder: (Widget child, Animation animation) { - final curveAnimation = - CurveTween(curve: Curves.easeInCubic).animate(animation); - final offsetAnimation = - Tween(begin: Offset(-0.1, 0.0), end: Offset.zero) - .animate(curveAnimation); + final curveAnimation = CurveTween( + curve: Curves.easeInCubic, + ).animate(animation); + final offsetAnimation = Tween( + begin: Offset(-0.1, 0.0), + end: Offset.zero, + ).animate(curveAnimation); final fadeInAnimation = curveAnimation; return FadeTransition( opacity: fadeInAnimation, diff --git a/animations/step_04_a/lib/scoreboard.dart b/animations/step_04_a/lib/scoreboard.dart index dd71080ba3..765711fe87 100644 --- a/animations/step_04_a/lib/scoreboard.dart +++ b/animations/step_04_a/lib/scoreboard.dart @@ -18,9 +18,7 @@ class Scoreboard extends StatelessWidget { mainAxisAlignment: MainAxisAlignment.center, children: [ for (var i = 0; i < totalQuestions; i++) - AnimatedStar( - isActive: score > i, - ) + AnimatedStar(isActive: score > i), ], ), ); @@ -50,11 +48,7 @@ class AnimatedStar extends StatelessWidget { end: isActive ? _activatedColor : _deactivatedColor, ), builder: (context, value, child) { - return Icon( - Icons.star, - size: 50, - color: value, - ); + return Icon(Icons.star, size: 50, color: value); }, ), ); diff --git a/animations/step_04_a/pubspec.yaml b/animations/step_04_a/pubspec.yaml index 52735dfa55..d8e843d9c9 100644 --- a/animations/step_04_a/pubspec.yaml +++ b/animations/step_04_a/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: "none" version: 1.0.0 environment: - sdk: ^3.5.1 + sdk: ^3.7.0-0 dependencies: animations: ^2.0.0 diff --git a/animations/step_04_b/lib/flip_effect.dart b/animations/step_04_b/lib/flip_effect.dart index f92b3355a5..f38daae5f3 100644 --- a/animations/step_04_b/lib/flip_effect.dart +++ b/animations/step_04_b/lib/flip_effect.dart @@ -26,8 +26,10 @@ class _CardFlipEffectState extends State void initState() { super.initState(); - _animationController = - AnimationController(vsync: this, duration: widget.duration); + _animationController = AnimationController( + vsync: this, + duration: widget.duration, + ); _animationController.addListener(() { if (_animationController.value == 1) { @@ -57,13 +59,14 @@ class _CardFlipEffectState extends State builder: (context, child) { return Transform( alignment: Alignment.center, - transform: Matrix4.identity() - ..rotateX(_animationController.value * math.pi), - child: _animationController.isAnimating - ? _animationController.value < 0.5 - ? _previousChild - : Transform.flip(flipY: true, child: widget.child) - : widget.child, + transform: + Matrix4.identity()..rotateX(_animationController.value * math.pi), + child: + _animationController.isAnimating + ? _animationController.value < 0.5 + ? _previousChild + : Transform.flip(flipY: true, child: widget.child) + : widget.child, ); }, child: widget.child, diff --git a/animations/step_04_b/lib/home_screen.dart b/animations/step_04_b/lib/home_screen.dart index 2d2408d466..e5a6433c47 100644 --- a/animations/step_04_b/lib/home_screen.dart +++ b/animations/step_04_b/lib/home_screen.dart @@ -11,15 +11,13 @@ class HomeScreen extends StatelessWidget { child: Column( mainAxisSize: MainAxisSize.min, children: [ - Text( - '✏️', - style: Theme.of(context).textTheme.displayLarge, - ), + Text('✏️', style: Theme.of(context).textTheme.displayLarge), Text( 'Flutter Quiz', style: Theme.of(context).textTheme.displayLarge!.copyWith( - fontWeight: FontWeight.w700, - color: Theme.of(context).colorScheme.onPrimaryFixedVariant), + fontWeight: FontWeight.w700, + color: Theme.of(context).colorScheme.onPrimaryFixedVariant, + ), ), ElevatedButton( onPressed: () { diff --git a/animations/step_04_b/lib/model.dart b/animations/step_04_b/lib/model.dart index 0662327f52..56666d11dc 100644 --- a/animations/step_04_b/lib/model.dart +++ b/animations/step_04_b/lib/model.dart @@ -30,12 +30,7 @@ List _createQuestions() { return [ Question( 'What class used to create custom explicit animations in Flutter?', - [ - 'AnimationController', - 'AnimatedWidget', - 'AnimatedBuilder', - 'Tween', - ], + ['AnimationController', 'AnimatedWidget', 'AnimatedBuilder', 'Tween'], 0, ), Question( @@ -50,12 +45,7 @@ List _createQuestions() { ), Question( 'What class is used to define the start and end values for an animation?', - [ - 'Tween', - 'Curve', - 'AnimationController', - 'AnimatedWidget', - ], + ['Tween', 'Curve', 'AnimationController', 'AnimatedWidget'], 0, ), ]; diff --git a/animations/step_04_b/lib/question_screen.dart b/animations/step_04_b/lib/question_screen.dart index 36a4aeb4bf..9cce323aa7 100644 --- a/animations/step_04_b/lib/question_screen.dart +++ b/animations/step_04_b/lib/question_screen.dart @@ -11,8 +11,9 @@ class QuestionScreen extends StatefulWidget { } class _QuestionScreenState extends State { - late final QuizViewModel viewModel = - QuizViewModel(onGameOver: _handleGameOver); + late final QuizViewModel viewModel = QuizViewModel( + onGameOver: _handleGameOver, + ); @override Widget build(BuildContext context) { @@ -26,11 +27,11 @@ class _QuestionScreenState extends State { onPressed: viewModel.hasNextQuestion && viewModel.didAnswerQuestion ? () { - viewModel.getNextQuestion(); - } + viewModel.getNextQuestion(); + } : null, child: const Text('Next'), - ) + ), ], ), body: Center( @@ -43,9 +44,10 @@ class _QuestionScreenState extends State { viewModel.checkAnswer(index); }, answers: viewModel.currentQuestion?.possibleAnswers ?? [], - correctAnswer: viewModel.didAnswerQuestion - ? viewModel.currentQuestion?.correctAnswer - : null, + correctAnswer: + viewModel.didAnswerQuestion + ? viewModel.currentQuestion?.correctAnswer + : null, ), StatusBar(viewModel: viewModel), ], @@ -81,10 +83,7 @@ class _QuestionScreenState extends State { class QuestionCard extends StatelessWidget { final String? question; - const QuestionCard({ - required this.question, - super.key, - }); + const QuestionCard({required this.question, super.key}); @override Widget build(BuildContext context) { @@ -99,11 +98,13 @@ class QuestionCard extends StatelessWidget { ); }, transitionBuilder: (Widget child, Animation animation) { - final curveAnimation = - CurveTween(curve: Curves.easeInCubic).animate(animation); - final offsetAnimation = - Tween(begin: Offset(-0.1, 0.0), end: Offset.zero) - .animate(curveAnimation); + final curveAnimation = CurveTween( + curve: Curves.easeInCubic, + ).animate(animation); + final offsetAnimation = Tween( + begin: Offset(-0.1, 0.0), + end: Offset.zero, + ).animate(curveAnimation); final fadeInAnimation = curveAnimation; return FadeTransition( opacity: fadeInAnimation, diff --git a/animations/step_04_b/lib/scoreboard.dart b/animations/step_04_b/lib/scoreboard.dart index dd71080ba3..765711fe87 100644 --- a/animations/step_04_b/lib/scoreboard.dart +++ b/animations/step_04_b/lib/scoreboard.dart @@ -18,9 +18,7 @@ class Scoreboard extends StatelessWidget { mainAxisAlignment: MainAxisAlignment.center, children: [ for (var i = 0; i < totalQuestions; i++) - AnimatedStar( - isActive: score > i, - ) + AnimatedStar(isActive: score > i), ], ), ); @@ -50,11 +48,7 @@ class AnimatedStar extends StatelessWidget { end: isActive ? _activatedColor : _deactivatedColor, ), builder: (context, value, child) { - return Icon( - Icons.star, - size: 50, - color: value, - ); + return Icon(Icons.star, size: 50, color: value); }, ), ); diff --git a/animations/step_04_b/pubspec.yaml b/animations/step_04_b/pubspec.yaml index 52735dfa55..d8e843d9c9 100644 --- a/animations/step_04_b/pubspec.yaml +++ b/animations/step_04_b/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: "none" version: 1.0.0 environment: - sdk: ^3.5.1 + sdk: ^3.7.0-0 dependencies: animations: ^2.0.0 diff --git a/animations/step_04_c/lib/flip_effect.dart b/animations/step_04_c/lib/flip_effect.dart index b2c381485f..5fd21e4976 100644 --- a/animations/step_04_c/lib/flip_effect.dart +++ b/animations/step_04_c/lib/flip_effect.dart @@ -28,7 +28,9 @@ class _CardFlipEffectState extends State super.initState(); _animationController = AnimationController( - vsync: this, duration: widget.duration * (widget.delayAmount + 1)); + vsync: this, + duration: widget.duration * (widget.delayAmount + 1), + ); _animationController.addListener(() { if (_animationController.value == 1) { @@ -42,10 +44,7 @@ class _CardFlipEffectState extends State tween: ConstantTween(0.0), weight: widget.delayAmount, ), - TweenSequenceItem( - tween: Tween(begin: 0.0, end: 1.0), - weight: 1.0, - ), + TweenSequenceItem(tween: Tween(begin: 0.0, end: 1.0), weight: 1.0), ]).animate(_animationController); } @@ -70,13 +69,14 @@ class _CardFlipEffectState extends State builder: (context, child) { return Transform( alignment: Alignment.center, - transform: Matrix4.identity() - ..rotateX(_animationController.value * math.pi), - child: _animationController.isAnimating - ? _animationController.value < 0.5 - ? _previousChild - : Transform.flip(flipY: true, child: widget.child) - : widget.child, + transform: + Matrix4.identity()..rotateX(_animationController.value * math.pi), + child: + _animationController.isAnimating + ? _animationController.value < 0.5 + ? _previousChild + : Transform.flip(flipY: true, child: widget.child) + : widget.child, ); }, child: widget.child, diff --git a/animations/step_04_c/lib/home_screen.dart b/animations/step_04_c/lib/home_screen.dart index 2d2408d466..e5a6433c47 100644 --- a/animations/step_04_c/lib/home_screen.dart +++ b/animations/step_04_c/lib/home_screen.dart @@ -11,15 +11,13 @@ class HomeScreen extends StatelessWidget { child: Column( mainAxisSize: MainAxisSize.min, children: [ - Text( - '✏️', - style: Theme.of(context).textTheme.displayLarge, - ), + Text('✏️', style: Theme.of(context).textTheme.displayLarge), Text( 'Flutter Quiz', style: Theme.of(context).textTheme.displayLarge!.copyWith( - fontWeight: FontWeight.w700, - color: Theme.of(context).colorScheme.onPrimaryFixedVariant), + fontWeight: FontWeight.w700, + color: Theme.of(context).colorScheme.onPrimaryFixedVariant, + ), ), ElevatedButton( onPressed: () { diff --git a/animations/step_04_c/lib/model.dart b/animations/step_04_c/lib/model.dart index 0662327f52..56666d11dc 100644 --- a/animations/step_04_c/lib/model.dart +++ b/animations/step_04_c/lib/model.dart @@ -30,12 +30,7 @@ List _createQuestions() { return [ Question( 'What class used to create custom explicit animations in Flutter?', - [ - 'AnimationController', - 'AnimatedWidget', - 'AnimatedBuilder', - 'Tween', - ], + ['AnimationController', 'AnimatedWidget', 'AnimatedBuilder', 'Tween'], 0, ), Question( @@ -50,12 +45,7 @@ List _createQuestions() { ), Question( 'What class is used to define the start and end values for an animation?', - [ - 'Tween', - 'Curve', - 'AnimationController', - 'AnimatedWidget', - ], + ['Tween', 'Curve', 'AnimationController', 'AnimatedWidget'], 0, ), ]; diff --git a/animations/step_04_c/lib/question_screen.dart b/animations/step_04_c/lib/question_screen.dart index 36a4aeb4bf..9cce323aa7 100644 --- a/animations/step_04_c/lib/question_screen.dart +++ b/animations/step_04_c/lib/question_screen.dart @@ -11,8 +11,9 @@ class QuestionScreen extends StatefulWidget { } class _QuestionScreenState extends State { - late final QuizViewModel viewModel = - QuizViewModel(onGameOver: _handleGameOver); + late final QuizViewModel viewModel = QuizViewModel( + onGameOver: _handleGameOver, + ); @override Widget build(BuildContext context) { @@ -26,11 +27,11 @@ class _QuestionScreenState extends State { onPressed: viewModel.hasNextQuestion && viewModel.didAnswerQuestion ? () { - viewModel.getNextQuestion(); - } + viewModel.getNextQuestion(); + } : null, child: const Text('Next'), - ) + ), ], ), body: Center( @@ -43,9 +44,10 @@ class _QuestionScreenState extends State { viewModel.checkAnswer(index); }, answers: viewModel.currentQuestion?.possibleAnswers ?? [], - correctAnswer: viewModel.didAnswerQuestion - ? viewModel.currentQuestion?.correctAnswer - : null, + correctAnswer: + viewModel.didAnswerQuestion + ? viewModel.currentQuestion?.correctAnswer + : null, ), StatusBar(viewModel: viewModel), ], @@ -81,10 +83,7 @@ class _QuestionScreenState extends State { class QuestionCard extends StatelessWidget { final String? question; - const QuestionCard({ - required this.question, - super.key, - }); + const QuestionCard({required this.question, super.key}); @override Widget build(BuildContext context) { @@ -99,11 +98,13 @@ class QuestionCard extends StatelessWidget { ); }, transitionBuilder: (Widget child, Animation animation) { - final curveAnimation = - CurveTween(curve: Curves.easeInCubic).animate(animation); - final offsetAnimation = - Tween(begin: Offset(-0.1, 0.0), end: Offset.zero) - .animate(curveAnimation); + final curveAnimation = CurveTween( + curve: Curves.easeInCubic, + ).animate(animation); + final offsetAnimation = Tween( + begin: Offset(-0.1, 0.0), + end: Offset.zero, + ).animate(curveAnimation); final fadeInAnimation = curveAnimation; return FadeTransition( opacity: fadeInAnimation, diff --git a/animations/step_04_c/lib/scoreboard.dart b/animations/step_04_c/lib/scoreboard.dart index dd71080ba3..765711fe87 100644 --- a/animations/step_04_c/lib/scoreboard.dart +++ b/animations/step_04_c/lib/scoreboard.dart @@ -18,9 +18,7 @@ class Scoreboard extends StatelessWidget { mainAxisAlignment: MainAxisAlignment.center, children: [ for (var i = 0; i < totalQuestions; i++) - AnimatedStar( - isActive: score > i, - ) + AnimatedStar(isActive: score > i), ], ), ); @@ -50,11 +48,7 @@ class AnimatedStar extends StatelessWidget { end: isActive ? _activatedColor : _deactivatedColor, ), builder: (context, value, child) { - return Icon( - Icons.star, - size: 50, - color: value, - ); + return Icon(Icons.star, size: 50, color: value); }, ), ); diff --git a/animations/step_04_c/pubspec.yaml b/animations/step_04_c/pubspec.yaml index 52735dfa55..d8e843d9c9 100644 --- a/animations/step_04_c/pubspec.yaml +++ b/animations/step_04_c/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: "none" version: 1.0.0 environment: - sdk: ^3.5.1 + sdk: ^3.7.0-0 dependencies: animations: ^2.0.0 diff --git a/animations/step_04_d/lib/flip_effect.dart b/animations/step_04_d/lib/flip_effect.dart index cafd21bece..953c479ae9 100644 --- a/animations/step_04_d/lib/flip_effect.dart +++ b/animations/step_04_d/lib/flip_effect.dart @@ -28,7 +28,9 @@ class _CardFlipEffectState extends State super.initState(); _animationController = AnimationController( - vsync: this, duration: widget.duration * (widget.delayAmount + 1)); + vsync: this, + duration: widget.duration * (widget.delayAmount + 1), + ); _animationController.addListener(() { if (_animationController.value == 1) { @@ -42,10 +44,7 @@ class _CardFlipEffectState extends State tween: ConstantTween(0.0), weight: widget.delayAmount, ), - TweenSequenceItem( - tween: Tween(begin: 0.0, end: 1.0), - weight: 1.0, - ), + TweenSequenceItem(tween: Tween(begin: 0.0, end: 1.0), weight: 1.0), ]).animate(_animationController); } @@ -70,13 +69,14 @@ class _CardFlipEffectState extends State builder: (context, child) { return Transform( alignment: Alignment.center, - transform: Matrix4.identity() - ..rotateX(_animationWithDelay.value * math.pi), - child: _animationController.isAnimating - ? _animationWithDelay.value < 0.5 - ? _previousChild - : Transform.flip(flipY: true, child: widget.child) - : widget.child, + transform: + Matrix4.identity()..rotateX(_animationWithDelay.value * math.pi), + child: + _animationController.isAnimating + ? _animationWithDelay.value < 0.5 + ? _previousChild + : Transform.flip(flipY: true, child: widget.child) + : widget.child, ); }, child: widget.child, diff --git a/animations/step_04_d/lib/home_screen.dart b/animations/step_04_d/lib/home_screen.dart index 2d2408d466..e5a6433c47 100644 --- a/animations/step_04_d/lib/home_screen.dart +++ b/animations/step_04_d/lib/home_screen.dart @@ -11,15 +11,13 @@ class HomeScreen extends StatelessWidget { child: Column( mainAxisSize: MainAxisSize.min, children: [ - Text( - '✏️', - style: Theme.of(context).textTheme.displayLarge, - ), + Text('✏️', style: Theme.of(context).textTheme.displayLarge), Text( 'Flutter Quiz', style: Theme.of(context).textTheme.displayLarge!.copyWith( - fontWeight: FontWeight.w700, - color: Theme.of(context).colorScheme.onPrimaryFixedVariant), + fontWeight: FontWeight.w700, + color: Theme.of(context).colorScheme.onPrimaryFixedVariant, + ), ), ElevatedButton( onPressed: () { diff --git a/animations/step_04_d/lib/model.dart b/animations/step_04_d/lib/model.dart index 0662327f52..56666d11dc 100644 --- a/animations/step_04_d/lib/model.dart +++ b/animations/step_04_d/lib/model.dart @@ -30,12 +30,7 @@ List _createQuestions() { return [ Question( 'What class used to create custom explicit animations in Flutter?', - [ - 'AnimationController', - 'AnimatedWidget', - 'AnimatedBuilder', - 'Tween', - ], + ['AnimationController', 'AnimatedWidget', 'AnimatedBuilder', 'Tween'], 0, ), Question( @@ -50,12 +45,7 @@ List _createQuestions() { ), Question( 'What class is used to define the start and end values for an animation?', - [ - 'Tween', - 'Curve', - 'AnimationController', - 'AnimatedWidget', - ], + ['Tween', 'Curve', 'AnimationController', 'AnimatedWidget'], 0, ), ]; diff --git a/animations/step_04_d/lib/question_screen.dart b/animations/step_04_d/lib/question_screen.dart index 36a4aeb4bf..9cce323aa7 100644 --- a/animations/step_04_d/lib/question_screen.dart +++ b/animations/step_04_d/lib/question_screen.dart @@ -11,8 +11,9 @@ class QuestionScreen extends StatefulWidget { } class _QuestionScreenState extends State { - late final QuizViewModel viewModel = - QuizViewModel(onGameOver: _handleGameOver); + late final QuizViewModel viewModel = QuizViewModel( + onGameOver: _handleGameOver, + ); @override Widget build(BuildContext context) { @@ -26,11 +27,11 @@ class _QuestionScreenState extends State { onPressed: viewModel.hasNextQuestion && viewModel.didAnswerQuestion ? () { - viewModel.getNextQuestion(); - } + viewModel.getNextQuestion(); + } : null, child: const Text('Next'), - ) + ), ], ), body: Center( @@ -43,9 +44,10 @@ class _QuestionScreenState extends State { viewModel.checkAnswer(index); }, answers: viewModel.currentQuestion?.possibleAnswers ?? [], - correctAnswer: viewModel.didAnswerQuestion - ? viewModel.currentQuestion?.correctAnswer - : null, + correctAnswer: + viewModel.didAnswerQuestion + ? viewModel.currentQuestion?.correctAnswer + : null, ), StatusBar(viewModel: viewModel), ], @@ -81,10 +83,7 @@ class _QuestionScreenState extends State { class QuestionCard extends StatelessWidget { final String? question; - const QuestionCard({ - required this.question, - super.key, - }); + const QuestionCard({required this.question, super.key}); @override Widget build(BuildContext context) { @@ -99,11 +98,13 @@ class QuestionCard extends StatelessWidget { ); }, transitionBuilder: (Widget child, Animation animation) { - final curveAnimation = - CurveTween(curve: Curves.easeInCubic).animate(animation); - final offsetAnimation = - Tween(begin: Offset(-0.1, 0.0), end: Offset.zero) - .animate(curveAnimation); + final curveAnimation = CurveTween( + curve: Curves.easeInCubic, + ).animate(animation); + final offsetAnimation = Tween( + begin: Offset(-0.1, 0.0), + end: Offset.zero, + ).animate(curveAnimation); final fadeInAnimation = curveAnimation; return FadeTransition( opacity: fadeInAnimation, diff --git a/animations/step_04_d/lib/scoreboard.dart b/animations/step_04_d/lib/scoreboard.dart index dd71080ba3..765711fe87 100644 --- a/animations/step_04_d/lib/scoreboard.dart +++ b/animations/step_04_d/lib/scoreboard.dart @@ -18,9 +18,7 @@ class Scoreboard extends StatelessWidget { mainAxisAlignment: MainAxisAlignment.center, children: [ for (var i = 0; i < totalQuestions; i++) - AnimatedStar( - isActive: score > i, - ) + AnimatedStar(isActive: score > i), ], ), ); @@ -50,11 +48,7 @@ class AnimatedStar extends StatelessWidget { end: isActive ? _activatedColor : _deactivatedColor, ), builder: (context, value, child) { - return Icon( - Icons.star, - size: 50, - color: value, - ); + return Icon(Icons.star, size: 50, color: value); }, ), ); diff --git a/animations/step_04_d/pubspec.yaml b/animations/step_04_d/pubspec.yaml index 52735dfa55..d8e843d9c9 100644 --- a/animations/step_04_d/pubspec.yaml +++ b/animations/step_04_d/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: "none" version: 1.0.0 environment: - sdk: ^3.5.1 + sdk: ^3.7.0-0 dependencies: animations: ^2.0.0 From 347930e03bc12d01dd7982322188ce81d3c52e1c Mon Sep 17 00:00:00 2001 From: Brett Morgan Date: Thu, 14 Nov 2024 13:58:12 +1100 Subject: [PATCH 058/108] Update `animations` --- animations/codelab_rebuild.yaml | 467 +++++++----------- .../app/{build.gradle => build.gradle.kts} | 10 +- animations/step_01/android/build.gradle | 18 - animations/step_01/android/build.gradle.kts | 21 + animations/step_01/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- animations/step_01/android/settings.gradle | 25 - .../step_01/android/settings.gradle.kts | 25 + .../android/app/build.gradle.kts} | 10 +- animations/step_02/android/build.gradle | 18 - animations/step_02/android/build.gradle.kts | 21 + animations/step_02/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- animations/step_02/android/settings.gradle | 25 - .../step_02/android/settings.gradle.kts | 25 + animations/step_02_a/.gitignore | 2 + .../android/app/build.gradle.kts} | 10 +- animations/step_02_a/android/build.gradle | 18 - animations/step_02_a/android/build.gradle.kts | 21 + .../step_02_a/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- animations/step_02_a/android/settings.gradle | 25 - .../step_02_a/android/settings.gradle.kts | 25 + animations/step_02_a/linux/CMakeLists.txt | 23 +- .../step_02_a/linux/runner/CMakeLists.txt | 26 + .../linux => step_02_a/linux/runner}/main.cc | 0 .../linux/runner}/my_application.cc | 6 + .../linux/runner}/my_application.h | 0 .../step_02_a/macos/Runner/AppDelegate.swift | 4 + animations/step_02_a/web/index.html | 2 +- animations/step_02_b/.gitignore | 2 + .../android/app/build.gradle.kts} | 10 +- animations/step_02_b/android/build.gradle | 18 - animations/step_02_b/android/build.gradle.kts | 21 + .../step_02_b/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- animations/step_02_b/android/settings.gradle | 25 - .../step_02_b/android/settings.gradle.kts | 25 + animations/step_02_b/linux/CMakeLists.txt | 23 +- .../step_02_b/linux/runner/CMakeLists.txt | 26 + .../linux => step_02_b/linux/runner}/main.cc | 0 .../linux/runner}/my_application.cc | 6 + .../linux/runner}/my_application.h | 0 .../step_02_b/macos/Runner/AppDelegate.swift | 4 + animations/step_02_b/web/index.html | 2 +- animations/step_02_c/.gitignore | 2 + animations/step_02_c/android/app/build.gradle | 44 -- .../step_02_c/android/app/build.gradle.kts | 44 ++ animations/step_02_c/android/build.gradle | 18 - animations/step_02_c/android/build.gradle.kts | 21 + .../step_02_c/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- animations/step_02_c/android/settings.gradle | 25 - .../step_02_c/android/settings.gradle.kts | 25 + animations/step_02_c/linux/CMakeLists.txt | 23 +- .../step_02_c/linux/runner/CMakeLists.txt | 26 + .../linux => step_02_c/linux/runner}/main.cc | 0 .../linux/runner}/my_application.cc | 6 + .../linux/runner}/my_application.h | 0 .../step_02_c/macos/Runner/AppDelegate.swift | 4 + animations/step_02_c/web/index.html | 2 +- animations/step_02_d/.gitignore | 2 + animations/step_02_d/android/app/build.gradle | 44 -- .../step_02_d/android/app/build.gradle.kts | 44 ++ animations/step_02_d/android/build.gradle | 18 - animations/step_02_d/android/build.gradle.kts | 21 + .../step_02_d/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- animations/step_02_d/android/settings.gradle | 25 - .../step_02_d/android/settings.gradle.kts | 25 + animations/step_02_d/linux/CMakeLists.txt | 23 +- animations/step_02_d/linux/my_application.cc | 124 ----- .../step_02_d/linux/runner/CMakeLists.txt | 26 + .../linux => step_02_d/linux/runner}/main.cc | 0 .../linux/runner}/my_application.cc | 6 + .../linux/runner}/my_application.h | 0 .../step_02_d/macos/Runner/AppDelegate.swift | 4 + animations/step_02_d/web/index.html | 2 +- animations/step_02_e/.gitignore | 2 + animations/step_02_e/android/app/build.gradle | 44 -- .../step_02_e/android/app/build.gradle.kts | 44 ++ animations/step_02_e/android/build.gradle | 18 - animations/step_02_e/android/build.gradle.kts | 21 + .../step_02_e/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- animations/step_02_e/android/settings.gradle | 25 - .../step_02_e/android/settings.gradle.kts | 25 + animations/step_02_e/linux/CMakeLists.txt | 23 +- animations/step_02_e/linux/my_application.cc | 124 ----- .../step_02_e/linux/runner/CMakeLists.txt | 26 + .../linux => step_02_e/linux/runner}/main.cc | 0 .../step_02_e/linux/runner/my_application.cc | 130 +++++ .../linux/runner}/my_application.h | 0 .../step_02_e/macos/Runner/AppDelegate.swift | 4 + animations/step_02_e/web/index.html | 2 +- animations/step_03/android/app/build.gradle | 44 -- .../step_03/android/app/build.gradle.kts | 44 ++ animations/step_03/android/build.gradle | 18 - animations/step_03/android/build.gradle.kts | 21 + animations/step_03/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- animations/step_03/android/settings.gradle | 25 - .../step_03/android/settings.gradle.kts | 25 + animations/step_03/linux/my_application.cc | 124 ----- animations/step_03_a/.gitignore | 2 + animations/step_03_a/android/app/build.gradle | 44 -- .../step_03_a/android/app/build.gradle.kts | 44 ++ animations/step_03_a/android/build.gradle | 18 - animations/step_03_a/android/build.gradle.kts | 21 + .../step_03_a/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- animations/step_03_a/android/settings.gradle | 25 - .../step_03_a/android/settings.gradle.kts | 25 + animations/step_03_a/linux/CMakeLists.txt | 23 +- animations/step_03_a/linux/my_application.cc | 124 ----- .../step_03_a/linux/runner/CMakeLists.txt | 26 + .../linux => step_03_a/linux/runner}/main.cc | 0 .../step_03_a/linux/runner/my_application.cc | 130 +++++ .../linux/runner}/my_application.h | 0 .../step_03_a/macos/Runner/AppDelegate.swift | 4 + animations/step_03_a/web/index.html | 2 +- animations/step_03_b/.gitignore | 2 + animations/step_03_b/android/app/build.gradle | 44 -- .../step_03_b/android/app/build.gradle.kts | 44 ++ animations/step_03_b/android/build.gradle | 18 - animations/step_03_b/android/build.gradle.kts | 21 + .../step_03_b/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- animations/step_03_b/android/settings.gradle | 25 - .../step_03_b/android/settings.gradle.kts | 25 + animations/step_03_b/linux/CMakeLists.txt | 23 +- animations/step_03_b/linux/my_application.cc | 124 ----- .../step_03_b/linux/runner/CMakeLists.txt | 26 + .../linux => step_03_b/linux/runner}/main.cc | 0 .../step_03_b/linux/runner/my_application.cc | 130 +++++ .../linux/runner}/my_application.h | 0 .../step_03_b/macos/Runner/AppDelegate.swift | 4 + animations/step_03_b/web/index.html | 2 +- animations/step_03_c/.gitignore | 2 + animations/step_03_c/android/app/build.gradle | 44 -- .../step_03_c/android/app/build.gradle.kts | 44 ++ animations/step_03_c/android/build.gradle | 18 - animations/step_03_c/android/build.gradle.kts | 21 + .../step_03_c/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- animations/step_03_c/android/settings.gradle | 25 - .../step_03_c/android/settings.gradle.kts | 25 + animations/step_03_c/linux/CMakeLists.txt | 23 +- animations/step_03_c/linux/my_application.cc | 124 ----- .../step_03_c/linux/runner/CMakeLists.txt | 26 + .../linux => step_03_c/linux/runner}/main.cc | 0 .../step_03_c/linux/runner/my_application.cc | 130 +++++ .../linux/runner}/my_application.h | 0 .../step_03_c/macos/Runner/AppDelegate.swift | 4 + animations/step_03_c/web/index.html | 2 +- animations/step_03_d/.gitignore | 2 + animations/step_03_d/android/app/build.gradle | 44 -- .../step_03_d/android/app/build.gradle.kts | 44 ++ animations/step_03_d/android/build.gradle | 18 - animations/step_03_d/android/build.gradle.kts | 21 + .../step_03_d/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- animations/step_03_d/android/settings.gradle | 25 - .../step_03_d/android/settings.gradle.kts | 25 + animations/step_03_d/linux/CMakeLists.txt | 23 +- animations/step_03_d/linux/my_application.cc | 124 ----- .../step_03_d/linux/runner/CMakeLists.txt | 26 + .../linux => step_03_d/linux/runner}/main.cc | 0 .../step_03_d/linux/runner/my_application.cc | 130 +++++ .../linux/runner}/my_application.h | 0 .../step_03_d/macos/Runner/AppDelegate.swift | 4 + animations/step_03_d/web/index.html | 2 +- animations/step_04/android/app/build.gradle | 44 -- .../step_04/android/app/build.gradle.kts | 44 ++ animations/step_04/android/build.gradle | 18 - animations/step_04/android/build.gradle.kts | 21 + animations/step_04/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- animations/step_04/android/settings.gradle | 25 - .../step_04/android/settings.gradle.kts | 25 + animations/step_04/linux/my_application.cc | 124 ----- animations/step_04_a/.gitignore | 2 + animations/step_04_a/android/app/build.gradle | 44 -- .../step_04_a/android/app/build.gradle.kts | 44 ++ animations/step_04_a/android/build.gradle | 18 - animations/step_04_a/android/build.gradle.kts | 21 + .../step_04_a/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- animations/step_04_a/android/settings.gradle | 25 - .../step_04_a/android/settings.gradle.kts | 25 + animations/step_04_a/linux/CMakeLists.txt | 23 +- animations/step_04_a/linux/my_application.cc | 124 ----- .../step_04_a/linux/runner/CMakeLists.txt | 26 + .../linux => step_04_a/linux/runner}/main.cc | 0 .../step_04_a/linux/runner/my_application.cc | 130 +++++ .../linux/runner}/my_application.h | 0 .../step_04_a/macos/Runner/AppDelegate.swift | 4 + animations/step_04_a/web/index.html | 2 +- animations/step_04_b/.gitignore | 2 + animations/step_04_b/android/app/build.gradle | 44 -- .../step_04_b/android/app/build.gradle.kts | 44 ++ animations/step_04_b/android/build.gradle | 18 - animations/step_04_b/android/build.gradle.kts | 21 + .../step_04_b/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- animations/step_04_b/android/settings.gradle | 25 - .../step_04_b/android/settings.gradle.kts | 25 + animations/step_04_b/linux/CMakeLists.txt | 23 +- animations/step_04_b/linux/main.cc | 6 - animations/step_04_b/linux/my_application.cc | 124 ----- animations/step_04_b/linux/my_application.h | 18 - .../step_04_b/linux/runner/CMakeLists.txt | 26 + .../linux => step_04_b/linux/runner}/main.cc | 0 .../step_04_b/linux/runner/my_application.cc | 130 +++++ .../linux/runner}/my_application.h | 0 .../step_04_b/macos/Runner/AppDelegate.swift | 4 + animations/step_04_b/web/index.html | 2 +- animations/step_04_c/.gitignore | 2 + animations/step_04_c/android/app/build.gradle | 44 -- .../step_04_c/android/app/build.gradle.kts | 44 ++ animations/step_04_c/android/build.gradle | 18 - animations/step_04_c/android/build.gradle.kts | 21 + .../step_04_c/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- animations/step_04_c/android/settings.gradle | 25 - .../step_04_c/android/settings.gradle.kts | 25 + animations/step_04_c/linux/CMakeLists.txt | 23 +- animations/step_04_c/linux/main.cc | 6 - animations/step_04_c/linux/my_application.cc | 124 ----- animations/step_04_c/linux/my_application.h | 18 - .../step_04_c/linux/runner/CMakeLists.txt | 26 + .../linux => step_04_c/linux/runner}/main.cc | 0 .../step_04_c/linux/runner/my_application.cc | 130 +++++ .../linux/runner}/my_application.h | 0 .../step_04_c/macos/Runner/AppDelegate.swift | 4 + animations/step_04_c/web/index.html | 2 +- animations/step_04_d/.gitignore | 2 + animations/step_04_d/android/app/build.gradle | 44 -- .../step_04_d/android/app/build.gradle.kts | 44 ++ animations/step_04_d/android/build.gradle | 18 - animations/step_04_d/android/build.gradle.kts | 21 + .../step_04_d/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- animations/step_04_d/android/settings.gradle | 25 - .../step_04_d/android/settings.gradle.kts | 25 + animations/step_04_d/linux/CMakeLists.txt | 23 +- animations/step_04_d/linux/main.cc | 6 - animations/step_04_d/linux/my_application.cc | 124 ----- animations/step_04_d/linux/my_application.h | 18 - .../step_04_d/linux/runner/CMakeLists.txt | 26 + .../linux => step_04_d/linux/runner}/main.cc | 0 .../step_04_d/linux/runner/my_application.cc | 130 +++++ .../linux/runner}/my_application.h | 0 .../step_04_d/macos/Runner/AppDelegate.swift | 4 + animations/step_04_d/web/index.html | 2 +- animations/step_05/android/app/build.gradle | 44 -- .../step_05/android/app/build.gradle.kts | 44 ++ animations/step_05/android/build.gradle | 18 - animations/step_05/android/build.gradle.kts | 21 + animations/step_05/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- animations/step_05/android/settings.gradle | 25 - .../step_05/android/settings.gradle.kts | 25 + animations/step_05/linux/main.cc | 6 - animations/step_05/linux/my_application.cc | 124 ----- animations/step_05/linux/my_application.h | 18 - 266 files changed, 3337 insertions(+), 3719 deletions(-) rename animations/step_01/android/app/{build.gradle => build.gradle.kts} (84%) delete mode 100644 animations/step_01/android/build.gradle create mode 100644 animations/step_01/android/build.gradle.kts delete mode 100644 animations/step_01/android/settings.gradle create mode 100644 animations/step_01/android/settings.gradle.kts rename animations/{step_02_a/android/app/build.gradle => step_02/android/app/build.gradle.kts} (84%) delete mode 100644 animations/step_02/android/build.gradle create mode 100644 animations/step_02/android/build.gradle.kts delete mode 100644 animations/step_02/android/settings.gradle create mode 100644 animations/step_02/android/settings.gradle.kts rename animations/{step_02_b/android/app/build.gradle => step_02_a/android/app/build.gradle.kts} (84%) delete mode 100644 animations/step_02_a/android/build.gradle create mode 100644 animations/step_02_a/android/build.gradle.kts delete mode 100644 animations/step_02_a/android/settings.gradle create mode 100644 animations/step_02_a/android/settings.gradle.kts create mode 100644 animations/step_02_a/linux/runner/CMakeLists.txt rename animations/{step_02/linux => step_02_a/linux/runner}/main.cc (100%) rename animations/{step_02/linux => step_02_a/linux/runner}/my_application.cc (93%) rename animations/{step_02/linux => step_02_a/linux/runner}/my_application.h (100%) rename animations/{step_02/android/app/build.gradle => step_02_b/android/app/build.gradle.kts} (84%) delete mode 100644 animations/step_02_b/android/build.gradle create mode 100644 animations/step_02_b/android/build.gradle.kts delete mode 100644 animations/step_02_b/android/settings.gradle create mode 100644 animations/step_02_b/android/settings.gradle.kts create mode 100644 animations/step_02_b/linux/runner/CMakeLists.txt rename animations/{step_02_a/linux => step_02_b/linux/runner}/main.cc (100%) rename animations/{step_02_a/linux => step_02_b/linux/runner}/my_application.cc (93%) rename animations/{step_02_a/linux => step_02_b/linux/runner}/my_application.h (100%) delete mode 100644 animations/step_02_c/android/app/build.gradle create mode 100644 animations/step_02_c/android/app/build.gradle.kts delete mode 100644 animations/step_02_c/android/build.gradle create mode 100644 animations/step_02_c/android/build.gradle.kts delete mode 100644 animations/step_02_c/android/settings.gradle create mode 100644 animations/step_02_c/android/settings.gradle.kts create mode 100644 animations/step_02_c/linux/runner/CMakeLists.txt rename animations/{step_02_b/linux => step_02_c/linux/runner}/main.cc (100%) rename animations/{step_02_b/linux => step_02_c/linux/runner}/my_application.cc (93%) rename animations/{step_02_b/linux => step_02_c/linux/runner}/my_application.h (100%) delete mode 100644 animations/step_02_d/android/app/build.gradle create mode 100644 animations/step_02_d/android/app/build.gradle.kts delete mode 100644 animations/step_02_d/android/build.gradle create mode 100644 animations/step_02_d/android/build.gradle.kts delete mode 100644 animations/step_02_d/android/settings.gradle create mode 100644 animations/step_02_d/android/settings.gradle.kts delete mode 100644 animations/step_02_d/linux/my_application.cc create mode 100644 animations/step_02_d/linux/runner/CMakeLists.txt rename animations/{step_02_c/linux => step_02_d/linux/runner}/main.cc (100%) rename animations/{step_02_c/linux => step_02_d/linux/runner}/my_application.cc (93%) rename animations/{step_02_c/linux => step_02_d/linux/runner}/my_application.h (100%) delete mode 100644 animations/step_02_e/android/app/build.gradle create mode 100644 animations/step_02_e/android/app/build.gradle.kts delete mode 100644 animations/step_02_e/android/build.gradle create mode 100644 animations/step_02_e/android/build.gradle.kts delete mode 100644 animations/step_02_e/android/settings.gradle create mode 100644 animations/step_02_e/android/settings.gradle.kts delete mode 100644 animations/step_02_e/linux/my_application.cc create mode 100644 animations/step_02_e/linux/runner/CMakeLists.txt rename animations/{step_02_d/linux => step_02_e/linux/runner}/main.cc (100%) create mode 100644 animations/step_02_e/linux/runner/my_application.cc rename animations/{step_02_d/linux => step_02_e/linux/runner}/my_application.h (100%) delete mode 100644 animations/step_03/android/app/build.gradle create mode 100644 animations/step_03/android/app/build.gradle.kts delete mode 100644 animations/step_03/android/build.gradle create mode 100644 animations/step_03/android/build.gradle.kts delete mode 100644 animations/step_03/android/settings.gradle create mode 100644 animations/step_03/android/settings.gradle.kts delete mode 100644 animations/step_03/linux/my_application.cc delete mode 100644 animations/step_03_a/android/app/build.gradle create mode 100644 animations/step_03_a/android/app/build.gradle.kts delete mode 100644 animations/step_03_a/android/build.gradle create mode 100644 animations/step_03_a/android/build.gradle.kts delete mode 100644 animations/step_03_a/android/settings.gradle create mode 100644 animations/step_03_a/android/settings.gradle.kts delete mode 100644 animations/step_03_a/linux/my_application.cc create mode 100644 animations/step_03_a/linux/runner/CMakeLists.txt rename animations/{step_02_e/linux => step_03_a/linux/runner}/main.cc (100%) create mode 100644 animations/step_03_a/linux/runner/my_application.cc rename animations/{step_02_e/linux => step_03_a/linux/runner}/my_application.h (100%) delete mode 100644 animations/step_03_b/android/app/build.gradle create mode 100644 animations/step_03_b/android/app/build.gradle.kts delete mode 100644 animations/step_03_b/android/build.gradle create mode 100644 animations/step_03_b/android/build.gradle.kts delete mode 100644 animations/step_03_b/android/settings.gradle create mode 100644 animations/step_03_b/android/settings.gradle.kts delete mode 100644 animations/step_03_b/linux/my_application.cc create mode 100644 animations/step_03_b/linux/runner/CMakeLists.txt rename animations/{step_03/linux => step_03_b/linux/runner}/main.cc (100%) create mode 100644 animations/step_03_b/linux/runner/my_application.cc rename animations/{step_03/linux => step_03_b/linux/runner}/my_application.h (100%) delete mode 100644 animations/step_03_c/android/app/build.gradle create mode 100644 animations/step_03_c/android/app/build.gradle.kts delete mode 100644 animations/step_03_c/android/build.gradle create mode 100644 animations/step_03_c/android/build.gradle.kts delete mode 100644 animations/step_03_c/android/settings.gradle create mode 100644 animations/step_03_c/android/settings.gradle.kts delete mode 100644 animations/step_03_c/linux/my_application.cc create mode 100644 animations/step_03_c/linux/runner/CMakeLists.txt rename animations/{step_03_a/linux => step_03_c/linux/runner}/main.cc (100%) create mode 100644 animations/step_03_c/linux/runner/my_application.cc rename animations/{step_03_a/linux => step_03_c/linux/runner}/my_application.h (100%) delete mode 100644 animations/step_03_d/android/app/build.gradle create mode 100644 animations/step_03_d/android/app/build.gradle.kts delete mode 100644 animations/step_03_d/android/build.gradle create mode 100644 animations/step_03_d/android/build.gradle.kts delete mode 100644 animations/step_03_d/android/settings.gradle create mode 100644 animations/step_03_d/android/settings.gradle.kts delete mode 100644 animations/step_03_d/linux/my_application.cc create mode 100644 animations/step_03_d/linux/runner/CMakeLists.txt rename animations/{step_03_b/linux => step_03_d/linux/runner}/main.cc (100%) create mode 100644 animations/step_03_d/linux/runner/my_application.cc rename animations/{step_03_b/linux => step_03_d/linux/runner}/my_application.h (100%) delete mode 100644 animations/step_04/android/app/build.gradle create mode 100644 animations/step_04/android/app/build.gradle.kts delete mode 100644 animations/step_04/android/build.gradle create mode 100644 animations/step_04/android/build.gradle.kts delete mode 100644 animations/step_04/android/settings.gradle create mode 100644 animations/step_04/android/settings.gradle.kts delete mode 100644 animations/step_04/linux/my_application.cc delete mode 100644 animations/step_04_a/android/app/build.gradle create mode 100644 animations/step_04_a/android/app/build.gradle.kts delete mode 100644 animations/step_04_a/android/build.gradle create mode 100644 animations/step_04_a/android/build.gradle.kts delete mode 100644 animations/step_04_a/android/settings.gradle create mode 100644 animations/step_04_a/android/settings.gradle.kts delete mode 100644 animations/step_04_a/linux/my_application.cc create mode 100644 animations/step_04_a/linux/runner/CMakeLists.txt rename animations/{step_03_c/linux => step_04_a/linux/runner}/main.cc (100%) create mode 100644 animations/step_04_a/linux/runner/my_application.cc rename animations/{step_03_c/linux => step_04_a/linux/runner}/my_application.h (100%) delete mode 100644 animations/step_04_b/android/app/build.gradle create mode 100644 animations/step_04_b/android/app/build.gradle.kts delete mode 100644 animations/step_04_b/android/build.gradle create mode 100644 animations/step_04_b/android/build.gradle.kts delete mode 100644 animations/step_04_b/android/settings.gradle create mode 100644 animations/step_04_b/android/settings.gradle.kts delete mode 100644 animations/step_04_b/linux/main.cc delete mode 100644 animations/step_04_b/linux/my_application.cc delete mode 100644 animations/step_04_b/linux/my_application.h create mode 100644 animations/step_04_b/linux/runner/CMakeLists.txt rename animations/{step_03_d/linux => step_04_b/linux/runner}/main.cc (100%) create mode 100644 animations/step_04_b/linux/runner/my_application.cc rename animations/{step_03_d/linux => step_04_b/linux/runner}/my_application.h (100%) delete mode 100644 animations/step_04_c/android/app/build.gradle create mode 100644 animations/step_04_c/android/app/build.gradle.kts delete mode 100644 animations/step_04_c/android/build.gradle create mode 100644 animations/step_04_c/android/build.gradle.kts delete mode 100644 animations/step_04_c/android/settings.gradle create mode 100644 animations/step_04_c/android/settings.gradle.kts delete mode 100644 animations/step_04_c/linux/main.cc delete mode 100644 animations/step_04_c/linux/my_application.cc delete mode 100644 animations/step_04_c/linux/my_application.h create mode 100644 animations/step_04_c/linux/runner/CMakeLists.txt rename animations/{step_04/linux => step_04_c/linux/runner}/main.cc (100%) create mode 100644 animations/step_04_c/linux/runner/my_application.cc rename animations/{step_04/linux => step_04_c/linux/runner}/my_application.h (100%) delete mode 100644 animations/step_04_d/android/app/build.gradle create mode 100644 animations/step_04_d/android/app/build.gradle.kts delete mode 100644 animations/step_04_d/android/build.gradle create mode 100644 animations/step_04_d/android/build.gradle.kts delete mode 100644 animations/step_04_d/android/settings.gradle create mode 100644 animations/step_04_d/android/settings.gradle.kts delete mode 100644 animations/step_04_d/linux/main.cc delete mode 100644 animations/step_04_d/linux/my_application.cc delete mode 100644 animations/step_04_d/linux/my_application.h create mode 100644 animations/step_04_d/linux/runner/CMakeLists.txt rename animations/{step_04_a/linux => step_04_d/linux/runner}/main.cc (100%) create mode 100644 animations/step_04_d/linux/runner/my_application.cc rename animations/{step_04_a/linux => step_04_d/linux/runner}/my_application.h (100%) delete mode 100644 animations/step_05/android/app/build.gradle create mode 100644 animations/step_05/android/app/build.gradle.kts delete mode 100644 animations/step_05/android/build.gradle create mode 100644 animations/step_05/android/build.gradle.kts delete mode 100644 animations/step_05/android/settings.gradle create mode 100644 animations/step_05/android/settings.gradle.kts delete mode 100644 animations/step_05/linux/main.cc delete mode 100644 animations/step_05/linux/my_application.cc delete mode 100644 animations/step_05/linux/my_application.h diff --git a/animations/codelab_rebuild.yaml b/animations/codelab_rebuild.yaml index 34aa19db42..d751f17615 100644 --- a/animations/codelab_rebuild.yaml +++ b/animations/codelab_rebuild.yaml @@ -54,10 +54,10 @@ steps: replace-contents: | import 'package:flutter/material.dart'; import 'question_screen.dart'; - + class HomeScreen extends StatelessWidget { const HomeScreen({super.key}); - + @override Widget build(BuildContext context) { return Scaffold( @@ -65,15 +65,13 @@ steps: child: Column( mainAxisSize: MainAxisSize.min, children: [ - Text( - '✏️', - style: Theme.of(context).textTheme.displayLarge, - ), + Text('✏️', style: Theme.of(context).textTheme.displayLarge), Text( 'Flutter Quiz', style: Theme.of(context).textTheme.displayLarge!.copyWith( - fontWeight: FontWeight.w700, - color: Theme.of(context).colorScheme.onPrimaryFixedVariant), + fontWeight: FontWeight.w700, + color: Theme.of(context).colorScheme.onPrimaryFixedVariant, + ), ), ElevatedButton( onPressed: () { @@ -125,43 +123,38 @@ steps: path: quiz/lib/model.dart replace-contents: | import 'dart:math' as math; - + class Question { final String question; final List possibleAnswers; final int correctAnswer; Question(this.question, this.possibleAnswers, this.correctAnswer); } - + class QuestionBank { final List _questions = _createQuestions(); - + bool get hasNextQuestion => _questions.isNotEmpty; int get remainingQuestions => _questions.length; - + Question? getRandomQuestion() { if (_questions.isEmpty) { return null; } - + var i = math.Random().nextInt(_questions.length); var question = _questions[i]; - + _questions.removeAt(i); return question; } } - + List _createQuestions() { return [ Question( 'What class used to create custom explicit animations in Flutter?', - [ - 'AnimationController', - 'AnimatedWidget', - 'AnimatedBuilder', - 'Tween', - ], + ['AnimationController', 'AnimatedWidget', 'AnimatedBuilder', 'Tween'], 0, ), Question( @@ -176,12 +169,7 @@ steps: ), Question( 'What class is used to define the start and end values for an animation?', - [ - 'Tween', - 'Curve', - 'AnimationController', - 'AnimatedWidget', - ], + ['Tween', 'Curve', 'AnimationController', 'AnimatedWidget'], 0, ), ]; @@ -237,18 +225,19 @@ steps: replace-contents: | import 'package:flutter/material.dart'; import 'view_model.dart'; - + class QuestionScreen extends StatefulWidget { const QuestionScreen({super.key}); - + @override State createState() => _QuestionScreenState(); } - + class _QuestionScreenState extends State { - late final QuizViewModel viewModel = - QuizViewModel(onGameOver: _handleGameOver); - + late final QuizViewModel viewModel = QuizViewModel( + onGameOver: _handleGameOver, + ); + @override Widget build(BuildContext context) { return ListenableBuilder( @@ -261,11 +250,11 @@ steps: onPressed: viewModel.hasNextQuestion && viewModel.didAnswerQuestion ? () { - viewModel.getNextQuestion(); - } + viewModel.getNextQuestion(); + } : null, child: const Text('Next'), - ) + ), ], ), body: Center( @@ -278,9 +267,10 @@ steps: viewModel.checkAnswer(index); }, answers: viewModel.currentQuestion?.possibleAnswers ?? [], - correctAnswer: viewModel.didAnswerQuestion - ? viewModel.currentQuestion?.correctAnswer - : null, + correctAnswer: + viewModel.didAnswerQuestion + ? viewModel.currentQuestion?.correctAnswer + : null, ), StatusBar(viewModel: viewModel), ], @@ -290,7 +280,7 @@ steps: }, ); } - + void _handleGameOver() { showDialog( barrierDismissible: false, @@ -312,15 +302,12 @@ steps: ); } } - + class QuestionCard extends StatelessWidget { final String? question; - - const QuestionCard({ - required this.question, - super.key, - }); - + + const QuestionCard({required this.question, super.key}); + @override Widget build(BuildContext context) { return Card( @@ -335,19 +322,19 @@ steps: ); } } - + class AnswerCards extends StatelessWidget { final List answers; final ValueChanged onTapped; final int? correctAnswer; - + const AnswerCards({ required this.answers, required this.onTapped, required this.correctAnswer, super.key, }); - + @override Widget build(BuildContext context) { return GridView.count( @@ -383,12 +370,12 @@ steps: ); } } - + class StatusBar extends StatelessWidget { final QuizViewModel viewModel; - + const StatusBar({required this.viewModel, super.key}); - + @override Widget build(BuildContext context) { return Card( @@ -430,17 +417,17 @@ steps: path: quiz/lib/scoreboard.dart replace-contents: | import 'package:flutter/material.dart'; - + class Scoreboard extends StatelessWidget { final int score; final int totalQuestions; - + const Scoreboard({ super.key, required this.score, required this.totalQuestions, }); - + @override Widget build(BuildContext context) { return Padding( @@ -454,7 +441,7 @@ steps: size: 50, color: score < i + 1 ? Colors.grey.shade400 : Colors.yellow.shade700, - ) + ), ], ), ); @@ -469,15 +456,15 @@ steps: - name: Use Scoreboard widget path: quiz/lib/question_screen.dart patch-u: | - --- a/animations/step_01/lib/question_screen.dart - +++ b/animations/step_01/lib/question_screen.dart + --- b/animations/step_02_b/lib/question_screen.dart + +++ a/animations/step_02_b/lib/question_screen.dart @@ -1,4 +1,5 @@ import 'package:flutter/material.dart'; +import 'scoreboard.dart'; import 'view_model.dart'; class QuestionScreen extends StatefulWidget { - @@ -161,13 +162,9 @@ class StatusBar extends StatelessWidget { + @@ -160,13 +161,9 @@ class StatusBar extends StatelessWidget { child: Row( mainAxisAlignment: MainAxisAlignment.spaceAround, children: [ @@ -503,9 +490,9 @@ steps: - name: Use an ImplicitlyAnimatedWidget path: quiz/lib/scoreboard.dart patch-u: | - --- a/animations/step_02/lib/scoreboard.dart - +++ b/animations/step_02/lib/scoreboard.dart - @@ -18,14 +18,33 @@ class Scoreboard extends StatelessWidget { + --- b/animations/step_02_c/lib/scoreboard.dart + +++ a/animations/step_02_c/lib/scoreboard.dart + @@ -18,14 +18,31 @@ class Scoreboard extends StatelessWidget { mainAxisAlignment: MainAxisAlignment.center, children: [ for (var i = 0; i < totalQuestions; i++) @@ -514,9 +501,8 @@ steps: - size: 50, - color: - score < i + 1 ? Colors.grey.shade400 : Colors.yellow.shade700, - + AnimatedStar( - + isActive: score > i, - ) + - ), + + AnimatedStar(isActive: score > i), ], ), ); @@ -553,9 +539,9 @@ steps: - name: Use a TweenAnimationBuilder to change the color path: quiz/lib/scoreboard.dart patch-u: | - --- a/animations/step_02/lib/scoreboard.dart - +++ b/animations/step_02/lib/scoreboard.dart - @@ -40,10 +40,19 @@ class AnimatedStar extends StatelessWidget { + --- b/animations/step_02_d/lib/scoreboard.dart + +++ a/animations/step_02_d/lib/scoreboard.dart + @@ -38,10 +38,15 @@ class AnimatedStar extends StatelessWidget { return AnimatedScale( scale: isActive ? 1.0 : 0.5, duration: _duration, @@ -570,11 +556,7 @@ steps: + end: isActive ? _activatedColor : _deactivatedColor, + ), + builder: (context, value, child) { - + return Icon( - + Icons.star, - + size: 50, - + color: value, - + ); + + return Icon(Icons.star, size: 50, color: value); + }, ), ); @@ -588,9 +570,9 @@ steps: - name: Use a Curve path: quiz/lib/scoreboard.dart patch-u: | - --- a/animations/step_02/lib/scoreboard.dart - +++ b/animations/step_02/lib/scoreboard.dart - @@ -32,6 +32,7 @@ class AnimatedStar extends StatelessWidget { + --- b/animations/step_02_e/lib/scoreboard.dart + +++ a/animations/step_02_e/lib/scoreboard.dart + @@ -30,6 +30,7 @@ class AnimatedStar extends StatelessWidget { final Duration _duration = const Duration(milliseconds: 1000); final Color _deactivatedColor = Colors.grey.shade400; final Color _activatedColor = Colors.yellow.shade700; @@ -598,7 +580,7 @@ steps: AnimatedStar({super.key, required this.isActive}); - @@ -39,8 +40,10 @@ class AnimatedStar extends StatelessWidget { + @@ -37,8 +38,10 @@ class AnimatedStar extends StatelessWidget { Widget build(BuildContext context) { return AnimatedScale( scale: isActive ? 1.0 : 0.5, @@ -629,7 +611,7 @@ steps: patch-u: | --- b/animations/step_03_a/lib/question_screen.dart +++ a/animations/step_03_a/lib/question_screen.dart - @@ -87,13 +87,17 @@ class QuestionCard extends StatelessWidget { + @@ -86,13 +86,17 @@ class QuestionCard extends StatelessWidget { @override Widget build(BuildContext context) { @@ -663,18 +645,20 @@ steps: - name: Use a custom transitionBuilder path: quiz/lib/question_screen.dart patch-u: | - --- a/animations/step_03/lib/question_screen.dart - +++ b/animations/step_03/lib/question_screen.dart - @@ -88,6 +88,14 @@ class QuestionCard extends StatelessWidget { + --- b/animations/step_03_b/lib/question_screen.dart + +++ a/animations/step_03_b/lib/question_screen.dart + @@ -87,6 +87,16 @@ class QuestionCard extends StatelessWidget { @override Widget build(BuildContext context) { return AnimatedSwitcher( + transitionBuilder: (Widget child, Animation animation) { - + final curveAnimation = - + CurveTween(curve: Curves.easeInCubic).animate(animation); - + final offsetAnimation = - + Tween(begin: Offset(-0.1, 0.0), end: Offset.zero) - + .animate(curveAnimation); + + final curveAnimation = CurveTween( + + curve: Curves.easeInCubic, + + ).animate(animation); + + final offsetAnimation = Tween( + + begin: Offset(-0.1, 0.0), + + end: Offset.zero, + + ).animate(curveAnimation); + return SlideTransition(position: offsetAnimation, child: child); + }, duration: const Duration(milliseconds: 300), @@ -689,12 +673,12 @@ steps: - name: Apply a fade effect to the transitionBuilder path: quiz/lib/question_screen.dart patch-u: | - --- a/animations/step_03/lib/question_screen.dart - +++ b/animations/step_03/lib/question_screen.dart - @@ -94,7 +94,11 @@ class QuestionCard extends StatelessWidget { - final offsetAnimation = - Tween(begin: Offset(-0.1, 0.0), end: Offset.zero) - .animate(curveAnimation); + --- b/animations/step_03_c/lib/question_screen.dart + +++ a/animations/step_03_c/lib/question_screen.dart + @@ -95,7 +95,11 @@ class QuestionCard extends StatelessWidget { + begin: Offset(-0.1, 0.0), + end: Offset.zero, + ).animate(curveAnimation); - return SlideTransition(position: offsetAnimation, child: child); + final fadeInAnimation = curveAnimation; + return FadeTransition( @@ -713,9 +697,9 @@ steps: - name: Customize the layoutBuilder path: quiz/lib/question_screen.dart patch-u: | - --- a/animations/step_03/lib/question_screen.dart - +++ b/animations/step_03/lib/question_screen.dart - @@ -88,6 +88,15 @@ class QuestionCard extends StatelessWidget { + --- b/animations/step_03_d/lib/question_screen.dart + +++ a/animations/step_03_d/lib/question_screen.dart + @@ -87,6 +87,15 @@ class QuestionCard extends StatelessWidget { @override Widget build(BuildContext context) { return AnimatedSwitcher( @@ -729,8 +713,8 @@ steps: + ); + }, transitionBuilder: (Widget child, Animation animation) { - final curveAnimation = - CurveTween(curve: Curves.easeInCubic).animate(animation); + final curveAnimation = CurveTween( + curve: Curves.easeInCubic, - name: Remove step_03_d rmdir: step_03_d - name: Copy step_03_d @@ -775,8 +759,10 @@ steps: void initState() { super.initState(); - _animationController = - AnimationController(vsync: this, duration: widget.duration); + _animationController = AnimationController( + vsync: this, + duration: widget.duration, + ); _animationController.addListener(() { if (_animationController.value == 1) { @@ -806,13 +792,14 @@ steps: builder: (context, child) { return Transform( alignment: Alignment.center, - transform: Matrix4.identity() - ..rotateX(_animationController.value * math.pi), - child: _animationController.isAnimating - ? _animationController.value < 0.5 - ? _previousChild - : Transform.flip(flipY: true, child: widget.child) - : widget.child, + transform: + Matrix4.identity()..rotateX(_animationController.value * math.pi), + child: + _animationController.isAnimating + ? _animationController.value < 0.5 + ? _previousChild + : Transform.flip(flipY: true, child: widget.child) + : widget.child, ); }, child: widget.child, @@ -822,15 +809,15 @@ steps: - name: Use CardFlipEffect path: quiz/lib/question_screen.dart patch-u: | - --- a/animations/step_04/lib/question_screen.dart - +++ b/animations/step_04/lib/question_screen.dart + --- b/animations/step_04_a/lib/question_screen.dart + +++ a/animations/step_04_a/lib/question_screen.dart @@ -1,4 +1,5 @@ import 'package:flutter/material.dart'; +import 'flip_effect.dart'; import 'scoreboard.dart'; import 'view_model.dart'; - @@ -148,21 +149,25 @@ class AnswerCards extends StatelessWidget { + @@ -149,21 +150,25 @@ class AnswerCards extends StatelessWidget { if (correctAnswer == index) { color = Theme.of(context).colorScheme.tertiaryContainer; } @@ -880,8 +867,8 @@ steps: - name: Add delay using TweenSequence path: quiz/lib/flip_effect.dart patch-u: | - --- a/animations/step_04/lib/flip_effect.dart - +++ b/animations/step_04/lib/flip_effect.dart + --- b/animations/step_04_b/lib/flip_effect.dart + +++ a/animations/step_04_b/lib/flip_effect.dart @@ -4,11 +4,13 @@ import 'dart:math' as math; class CardFlipEffect extends StatefulWidget { final Widget child; @@ -899,9 +886,9 @@ steps: - name: Add delay to question screen path: quiz/lib/question_screen.dart patch-u: | - --- a/animations/step_04/lib/question_screen.dart - +++ b/animations/step_04/lib/question_screen.dart - @@ -151,6 +151,7 @@ class AnswerCards extends StatelessWidget { + --- b/animations/step_04_b/lib/question_screen.dart + +++ a/animations/step_04_b/lib/question_screen.dart + @@ -152,6 +152,7 @@ class AnswerCards extends StatelessWidget { } return CardFlipEffect( @@ -920,7 +907,7 @@ steps: patch-u: | --- b/animations/step_04_c/lib/flip_effect.dart +++ a/animations/step_04_c/lib/flip_effect.dart - @@ -21,19 +21,32 @@ class _CardFlipEffectState extends State + @@ -21,6 +21,7 @@ class _CardFlipEffectState extends State with SingleTickerProviderStateMixin { late final AnimationController _animationController; Widget? _previousChild; @@ -928,15 +915,16 @@ steps: @override void initState() { - super.initState(); + @@ -28,7 +29,7 @@ class _CardFlipEffectState extends State - - _animationController = - - AnimationController(vsync: this, duration: widget.duration); - + _animationController = AnimationController( - + vsync: this, duration: widget.duration * (widget.delayAmount + 1)); + _animationController = AnimationController( + vsync: this, + - duration: widget.duration, + + duration: widget.duration * (widget.delayAmount + 1), + ); _animationController.addListener(() { - if (_animationController.value == 1) { + @@ -36,6 +37,15 @@ class _CardFlipEffectState extends State _animationController.reset(); } }); @@ -947,10 +935,7 @@ steps: + tween: ConstantTween(0.0), + weight: widget.delayAmount, + ), - + TweenSequenceItem( - + tween: Tween(begin: 0.0, end: 1.0), - + weight: 1.0, - + ), + + TweenSequenceItem(tween: Tween(begin: 0.0, end: 1.0), weight: 1.0), + ]).animate(_animationController); } @@ -966,7 +951,7 @@ steps: patch-u: | --- b/animations/step_04_d/lib/flip_effect.dart +++ a/animations/step_04_d/lib/flip_effect.dart - @@ -66,14 +66,14 @@ class _CardFlipEffectState extends State + @@ -65,15 +65,15 @@ class _CardFlipEffectState extends State @override Widget build(BuildContext context) { return AnimatedBuilder( @@ -975,15 +960,16 @@ steps: builder: (context, child) { return Transform( alignment: Alignment.center, - transform: Matrix4.identity() - - ..rotateX(_animationController.value * math.pi), - + ..rotateX(_animationWithDelay.value * math.pi), - child: _animationController.isAnimating - - ? _animationController.value < 0.5 - + ? _animationWithDelay.value < 0.5 - ? _previousChild - : Transform.flip(flipY: true, child: widget.child) - : widget.child, + transform: + - Matrix4.identity()..rotateX(_animationController.value * math.pi), + + Matrix4.identity()..rotateX(_animationWithDelay.value * math.pi), + child: + _animationController.isAnimating + - ? _animationController.value < 0.5 + + ? _animationWithDelay.value < 0.5 + ? _previousChild + : Transform.flip(flipY: true, child: widget.child) + : widget.child, - name: Remove step_04_d rmdir: step_04_d - name: Copy step_04_d @@ -1002,27 +988,18 @@ steps: - name: Use PageRouteBuilder path: quiz/lib/home_screen.dart patch-u: | - --- a/animations/step_05/lib/home_screen.dart - +++ b/animations/step_05/lib/home_screen.dart - @@ -26,14 +26,19 @@ class HomeScreen extends StatelessWidget { - // Show the question screen to start the game + --- b/animations/step_05/lib/home_screen.dart + +++ a/animations/step_05/lib/home_screen.dart + @@ -25,13 +25,13 @@ class HomeScreen extends StatelessWidget { Navigator.push( context, - - MaterialPageRoute( + MaterialPageRoute( - builder: (BuildContext context) { - return QuestionScreen(); - - }, - - ), - + PageRouteBuilder( - + pageBuilder: (context, animation, secondaryAnimation) { - + return const QuestionScreen(); - + }, transitionsBuilder: - + (context, animation, secondaryAnimation, child) { - + return FadeTransition( - + opacity: animation, - + child: child, - + ); - + }), + + builder: (context) { + + return const QuestionScreen(); + }, + ), ); }, - child: Text('New Game'), @@ -1030,33 +1007,11 @@ steps: ), ], ), - - name: Use package:animations FadeThroughTransition - path: quiz/lib/home_screen.dart - patch-u: | - --- a/animations/step_05/lib/home_screen.dart - +++ b/animations/step_05/lib/home_screen.dart - @@ -1,3 +1,4 @@ - +import 'package:animations/animations.dart'; - import 'package:flutter/material.dart'; - import 'question_screen.dart'; - - @@ -31,8 +32,9 @@ class HomeScreen extends StatelessWidget { - return const QuestionScreen(); - }, transitionsBuilder: - (context, animation, secondaryAnimation, child) { - - return FadeTransition( - - opacity: animation, - + return FadeThroughTransition( - + animation: animation, - + secondaryAnimation: secondaryAnimation, - child: child, - ); - }), - name: Configure Predictive Back on Android path: quiz/lib/main.dart patch-u: | - --- a/animations/step_05/lib/main.dart - +++ b/animations/step_05/lib/main.dart + --- b/animations/step_05/lib/main.dart + +++ a/animations/step_05/lib/main.dart @@ -1,3 +1,4 @@ +import 'package:animations/animations.dart'; import 'package:flutter/material.dart'; @@ -1078,98 +1033,25 @@ steps: ), home: HomeScreen(), ); - - name: Change back to MaterialPageRoute - path: quiz/lib/home_screen.dart - patch-u: | - --- a/animations/step_05/lib/home_screen.dart - +++ b/animations/step_05/lib/home_screen.dart - @@ -1,4 +1,3 @@ - -import 'package:animations/animations.dart'; - import 'package:flutter/material.dart'; - import 'question_screen.dart'; - - @@ -27,16 +26,8 @@ class HomeScreen extends StatelessWidget { - // Show the question screen to start the game - Navigator.push( - context, - - PageRouteBuilder( - - pageBuilder: (context, animation, secondaryAnimation) { - - return const QuestionScreen(); - - }, transitionsBuilder: - - (context, animation, secondaryAnimation, child) { - - return FadeThroughTransition( - - animation: animation, - - secondaryAnimation: secondaryAnimation, - - child: child, - - ); - + MaterialPageRoute(builder: (context) { - + return const QuestionScreen(); - }), - ); - }, - name: Use FadeThroughTransition path: quiz/lib/question_screen.dart patch-u: | - --- a/animations/step_05/lib/question_screen.dart - +++ b/animations/step_05/lib/question_screen.dart + --- b/animations/step_05/lib/question_screen.dart + +++ a/animations/step_05/lib/question_screen.dart @@ -1,3 +1,4 @@ +import 'package:animations/animations.dart'; import 'package:flutter/material.dart'; import 'flip_effect.dart'; import 'scoreboard.dart'; - @@ -88,29 +89,23 @@ class QuestionCard extends StatelessWidget { - - @override - Widget build(BuildContext context) { - - return AnimatedSwitcher( - - layoutBuilder: (Widget? currentChild, List previousChildren) { - + return PageTransitionSwitcher( - + duration: const Duration(milliseconds: 200), - + layoutBuilder: (List entries) { - return Stack( - alignment: Alignment.topCenter, - children: [ - - ...previousChildren, - - if (currentChild != null) currentChild, - + ...entries, - ], - ); - }, - - transitionBuilder: (Widget child, Animation animation) { - - final curveAnimation = - - CurveTween(curve: Curves.easeInCubic).animate(animation); - - final offsetAnimation = - - Tween(begin: Offset(-0.1, 0.0), end: Offset.zero) - - .animate(curveAnimation); - - final fadeInAnimation = curveAnimation; - - return FadeTransition( - - opacity: fadeInAnimation, - - child: SlideTransition(position: offsetAnimation, child: child), - + transitionBuilder: (Widget child, animation, secondaryAnimation) { - + return FadeThroughTransition( - + animation: animation, - + secondaryAnimation: secondaryAnimation, - + child: child, - ); - }, - - duration: const Duration(milliseconds: 300), - child: Card( - key: ValueKey(question), - elevation: 4, - - name: Use OpenContainer - path: quiz/lib/question_screen.dart - patch-u: | - --- a/animations/step_05/lib/question_screen.dart - +++ b/animations/step_05/lib/question_screen.dart - @@ -14,6 +14,7 @@ class QuestionScreen extends StatefulWidget { - class _QuestionScreenState extends State { - late final QuizViewModel viewModel = - QuizViewModel(onGameOver: _handleGameOver); + @@ -14,6 +15,7 @@ class _QuestionScreenState extends State { + late final QuizViewModel viewModel = QuizViewModel( + onGameOver: _handleGameOver, + ); + VoidCallback? _showGameOverScreen; @override Widget build(BuildContext context) { - @@ -37,7 +38,11 @@ class _QuestionScreenState extends State { + @@ -37,7 +39,11 @@ class _QuestionScreenState extends State { body: Center( child: Column( children: [ @@ -1182,18 +1064,7 @@ steps: Spacer(), AnswerCards( onTapped: (index) { - @@ -48,7 +53,9 @@ class _QuestionScreenState extends State { - ? viewModel.currentQuestion?.correctAnswer - : null, - ), - - StatusBar(viewModel: viewModel), - + StatusBar( - + viewModel: viewModel, - + ) - ], - ), - ), - @@ -57,24 +64,54 @@ class _QuestionScreenState extends State { + @@ -58,24 +64,49 @@ class _QuestionScreenState extends State { ); } @@ -1224,9 +1095,7 @@ steps: + @override + Widget build(BuildContext context) { + return Scaffold( - + appBar: AppBar( - + automaticallyImplyLeading: false, - + ), + + appBar: AppBar(automaticallyImplyLeading: false), + body: Center( + child: Column( + mainAxisAlignment: MainAxisAlignment.center, @@ -1235,10 +1104,7 @@ steps: + score: viewModel.score, + totalQuestions: viewModel.totalQuestions, + ), - + Text( - + 'You Win!', - + style: Theme.of(context).textTheme.displayLarge, - + ), + + Text('You Win!', style: Theme.of(context).textTheme.displayLarge), + Text( + 'Score: ${viewModel.score} / ${viewModel.totalQuestions}', + style: Theme.of(context).textTheme.displaySmall, @@ -1261,40 +1127,57 @@ steps: ); } } - @@ -83,22 +120,21 @@ class QuestionCard extends StatelessWidget { + @@ -83,45 +114,53 @@ class _QuestionScreenState extends State { + class QuestionCard extends StatelessWidget { final String? question; - const QuestionCard({ + - const QuestionCard({required this.question, super.key}); + + const QuestionCard({ + required this.onChangeOpenContainer, - required this.question, + + required this.question, + required this.viewModel, - super.key, - }); - + + super.key, + + }); + + + final ValueChanged onChangeOpenContainer; + final QuizViewModel viewModel; + + static const _backgroundColor = Color(0xfff2f3fa); - + + @override Widget build(BuildContext context) { - return PageTransitionSwitcher( - duration: const Duration(milliseconds: 200), - - layoutBuilder: (List entries) { + - return AnimatedSwitcher( + - layoutBuilder: (Widget? currentChild, List previousChildren) { - return Stack( - alignment: Alignment.topCenter, - children: [ - - ...entries, + - ...previousChildren, + - if (currentChild != null) currentChild, - ], - ); - }, - transitionBuilder: (Widget child, animation, secondaryAnimation) { - return FadeThroughTransition( - animation: animation, - @@ -106,16 +142,30 @@ class QuestionCard extends StatelessWidget { - child: child, + - transitionBuilder: (Widget child, Animation animation) { + - final curveAnimation = CurveTween( + - curve: Curves.easeInCubic, + - ).animate(animation); + - final offsetAnimation = Tween( + - begin: Offset(-0.1, 0.0), + - end: Offset.zero, + - ).animate(curveAnimation); + - final fadeInAnimation = curveAnimation; + - return FadeTransition( + - opacity: fadeInAnimation, + - child: SlideTransition(position: offsetAnimation, child: child), + + return PageTransitionSwitcher( + + duration: const Duration(milliseconds: 200), + + transitionBuilder: (Widget child, animation, secondaryAnimation) { + + return FadeThroughTransition( + + animation: animation, + + secondaryAnimation: secondaryAnimation, + + child: child, ); }, + - duration: const Duration(milliseconds: 300), - child: Card( + child: OpenContainer( key: ValueKey(question), diff --git a/animations/step_01/android/app/build.gradle b/animations/step_01/android/app/build.gradle.kts similarity index 84% rename from animations/step_01/android/app/build.gradle rename to animations/step_01/android/app/build.gradle.kts index 7c3594ed33..31d285867f 100644 --- a/animations/step_01/android/app/build.gradle +++ b/animations/step_01/android/app/build.gradle.kts @@ -1,8 +1,8 @@ plugins { - id "com.android.application" - id "kotlin-android" + id("com.android.application") + id("kotlin-android") // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. - id "dev.flutter.flutter-gradle-plugin" + id("dev.flutter.flutter-gradle-plugin") } android { @@ -16,7 +16,7 @@ android { } kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8 + jvmTarget = JavaVersion.VERSION_1_8.toString() } defaultConfig { @@ -34,7 +34,7 @@ android { release { // TODO: Add your own signing config for the release build. // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig = signingConfigs.debug + signingConfig = signingConfigs.getByName("debug") } } } diff --git a/animations/step_01/android/build.gradle b/animations/step_01/android/build.gradle deleted file mode 100644 index d2ffbffa4c..0000000000 --- a/animations/step_01/android/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = "../build" -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(":app") -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/animations/step_01/android/build.gradle.kts b/animations/step_01/android/build.gradle.kts new file mode 100644 index 0000000000..89176ef44e --- /dev/null +++ b/animations/step_01/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/animations/step_01/android/gradle.properties b/animations/step_01/android/gradle.properties index 2597170821..f018a61817 100644 --- a/animations/step_01/android/gradle.properties +++ b/animations/step_01/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/animations/step_01/android/gradle/wrapper/gradle-wrapper.properties b/animations/step_01/android/gradle/wrapper/gradle-wrapper.properties index 7bb2df6ba6..afa1e8eb0a 100644 --- a/animations/step_01/android/gradle/wrapper/gradle-wrapper.properties +++ b/animations/step_01/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip diff --git a/animations/step_01/android/settings.gradle b/animations/step_01/android/settings.gradle deleted file mode 100644 index b9e43bd376..0000000000 --- a/animations/step_01/android/settings.gradle +++ /dev/null @@ -1,25 +0,0 @@ -pluginManagement { - def flutterSdkPath = { - def properties = new Properties() - file("local.properties").withInputStream { properties.load(it) } - def flutterSdkPath = properties.getProperty("flutter.sdk") - assert flutterSdkPath != null, "flutter.sdk not set in local.properties" - return flutterSdkPath - }() - - includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") - - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} - -plugins { - id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.1.0" apply false - id "org.jetbrains.kotlin.android" version "1.8.22" apply false -} - -include ":app" diff --git a/animations/step_01/android/settings.gradle.kts b/animations/step_01/android/settings.gradle.kts new file mode 100644 index 0000000000..a439442c20 --- /dev/null +++ b/animations/step_01/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.0" apply false + id("org.jetbrains.kotlin.android") version "1.8.22" apply false +} + +include(":app") diff --git a/animations/step_02_a/android/app/build.gradle b/animations/step_02/android/app/build.gradle.kts similarity index 84% rename from animations/step_02_a/android/app/build.gradle rename to animations/step_02/android/app/build.gradle.kts index 7c3594ed33..31d285867f 100644 --- a/animations/step_02_a/android/app/build.gradle +++ b/animations/step_02/android/app/build.gradle.kts @@ -1,8 +1,8 @@ plugins { - id "com.android.application" - id "kotlin-android" + id("com.android.application") + id("kotlin-android") // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. - id "dev.flutter.flutter-gradle-plugin" + id("dev.flutter.flutter-gradle-plugin") } android { @@ -16,7 +16,7 @@ android { } kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8 + jvmTarget = JavaVersion.VERSION_1_8.toString() } defaultConfig { @@ -34,7 +34,7 @@ android { release { // TODO: Add your own signing config for the release build. // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig = signingConfigs.debug + signingConfig = signingConfigs.getByName("debug") } } } diff --git a/animations/step_02/android/build.gradle b/animations/step_02/android/build.gradle deleted file mode 100644 index d2ffbffa4c..0000000000 --- a/animations/step_02/android/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = "../build" -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(":app") -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/animations/step_02/android/build.gradle.kts b/animations/step_02/android/build.gradle.kts new file mode 100644 index 0000000000..89176ef44e --- /dev/null +++ b/animations/step_02/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/animations/step_02/android/gradle.properties b/animations/step_02/android/gradle.properties index 2597170821..f018a61817 100644 --- a/animations/step_02/android/gradle.properties +++ b/animations/step_02/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/animations/step_02/android/gradle/wrapper/gradle-wrapper.properties b/animations/step_02/android/gradle/wrapper/gradle-wrapper.properties index 7bb2df6ba6..afa1e8eb0a 100644 --- a/animations/step_02/android/gradle/wrapper/gradle-wrapper.properties +++ b/animations/step_02/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip diff --git a/animations/step_02/android/settings.gradle b/animations/step_02/android/settings.gradle deleted file mode 100644 index b9e43bd376..0000000000 --- a/animations/step_02/android/settings.gradle +++ /dev/null @@ -1,25 +0,0 @@ -pluginManagement { - def flutterSdkPath = { - def properties = new Properties() - file("local.properties").withInputStream { properties.load(it) } - def flutterSdkPath = properties.getProperty("flutter.sdk") - assert flutterSdkPath != null, "flutter.sdk not set in local.properties" - return flutterSdkPath - }() - - includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") - - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} - -plugins { - id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.1.0" apply false - id "org.jetbrains.kotlin.android" version "1.8.22" apply false -} - -include ":app" diff --git a/animations/step_02/android/settings.gradle.kts b/animations/step_02/android/settings.gradle.kts new file mode 100644 index 0000000000..a439442c20 --- /dev/null +++ b/animations/step_02/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.0" apply false + id("org.jetbrains.kotlin.android") version "1.8.22" apply false +} + +include(":app") diff --git a/animations/step_02_a/.gitignore b/animations/step_02_a/.gitignore index 29a3a5017f..79c113f9b5 100644 --- a/animations/step_02_a/.gitignore +++ b/animations/step_02_a/.gitignore @@ -5,9 +5,11 @@ *.swp .DS_Store .atom/ +.build/ .buildlog/ .history .svn/ +.swiftpm/ migrate_working_dir/ # IntelliJ related diff --git a/animations/step_02_b/android/app/build.gradle b/animations/step_02_a/android/app/build.gradle.kts similarity index 84% rename from animations/step_02_b/android/app/build.gradle rename to animations/step_02_a/android/app/build.gradle.kts index 7c3594ed33..31d285867f 100644 --- a/animations/step_02_b/android/app/build.gradle +++ b/animations/step_02_a/android/app/build.gradle.kts @@ -1,8 +1,8 @@ plugins { - id "com.android.application" - id "kotlin-android" + id("com.android.application") + id("kotlin-android") // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. - id "dev.flutter.flutter-gradle-plugin" + id("dev.flutter.flutter-gradle-plugin") } android { @@ -16,7 +16,7 @@ android { } kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8 + jvmTarget = JavaVersion.VERSION_1_8.toString() } defaultConfig { @@ -34,7 +34,7 @@ android { release { // TODO: Add your own signing config for the release build. // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig = signingConfigs.debug + signingConfig = signingConfigs.getByName("debug") } } } diff --git a/animations/step_02_a/android/build.gradle b/animations/step_02_a/android/build.gradle deleted file mode 100644 index d2ffbffa4c..0000000000 --- a/animations/step_02_a/android/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = "../build" -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(":app") -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/animations/step_02_a/android/build.gradle.kts b/animations/step_02_a/android/build.gradle.kts new file mode 100644 index 0000000000..89176ef44e --- /dev/null +++ b/animations/step_02_a/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/animations/step_02_a/android/gradle.properties b/animations/step_02_a/android/gradle.properties index 2597170821..f018a61817 100644 --- a/animations/step_02_a/android/gradle.properties +++ b/animations/step_02_a/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/animations/step_02_a/android/gradle/wrapper/gradle-wrapper.properties b/animations/step_02_a/android/gradle/wrapper/gradle-wrapper.properties index 7bb2df6ba6..afa1e8eb0a 100644 --- a/animations/step_02_a/android/gradle/wrapper/gradle-wrapper.properties +++ b/animations/step_02_a/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip diff --git a/animations/step_02_a/android/settings.gradle b/animations/step_02_a/android/settings.gradle deleted file mode 100644 index b9e43bd376..0000000000 --- a/animations/step_02_a/android/settings.gradle +++ /dev/null @@ -1,25 +0,0 @@ -pluginManagement { - def flutterSdkPath = { - def properties = new Properties() - file("local.properties").withInputStream { properties.load(it) } - def flutterSdkPath = properties.getProperty("flutter.sdk") - assert flutterSdkPath != null, "flutter.sdk not set in local.properties" - return flutterSdkPath - }() - - includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") - - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} - -plugins { - id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.1.0" apply false - id "org.jetbrains.kotlin.android" version "1.8.22" apply false -} - -include ":app" diff --git a/animations/step_02_a/android/settings.gradle.kts b/animations/step_02_a/android/settings.gradle.kts new file mode 100644 index 0000000000..a439442c20 --- /dev/null +++ b/animations/step_02_a/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.0" apply false + id("org.jetbrains.kotlin.android") version "1.8.22" apply false +} + +include(":app") diff --git a/animations/step_02_a/linux/CMakeLists.txt b/animations/step_02_a/linux/CMakeLists.txt index 658be85ac5..7caf822271 100644 --- a/animations/step_02_a/linux/CMakeLists.txt +++ b/animations/step_02_a/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/animations/step_02_a/linux/runner/CMakeLists.txt b/animations/step_02_a/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/animations/step_02_a/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/animations/step_02/linux/main.cc b/animations/step_02_a/linux/runner/main.cc similarity index 100% rename from animations/step_02/linux/main.cc rename to animations/step_02_a/linux/runner/main.cc diff --git a/animations/step_02/linux/my_application.cc b/animations/step_02_a/linux/runner/my_application.cc similarity index 93% rename from animations/step_02/linux/my_application.cc rename to animations/step_02_a/linux/runner/my_application.cc index d6ea0e3c5f..0040d7e46c 100644 --- a/animations/step_02/linux/my_application.cc +++ b/animations/step_02_a/linux/runner/my_application.cc @@ -117,6 +117,12 @@ static void my_application_class_init(MyApplicationClass* klass) { static void my_application_init(MyApplication* self) {} MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + return MY_APPLICATION(g_object_new(my_application_get_type(), "application-id", APPLICATION_ID, "flags", G_APPLICATION_NON_UNIQUE, diff --git a/animations/step_02/linux/my_application.h b/animations/step_02_a/linux/runner/my_application.h similarity index 100% rename from animations/step_02/linux/my_application.h rename to animations/step_02_a/linux/runner/my_application.h diff --git a/animations/step_02_a/macos/Runner/AppDelegate.swift b/animations/step_02_a/macos/Runner/AppDelegate.swift index 8e02df2888..b3c1761412 100644 --- a/animations/step_02_a/macos/Runner/AppDelegate.swift +++ b/animations/step_02_a/macos/Runner/AppDelegate.swift @@ -6,4 +6,8 @@ class AppDelegate: FlutterAppDelegate { override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { return true } + + override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { + return true + } } diff --git a/animations/step_02_a/web/index.html b/animations/step_02_a/web/index.html index 89656d9a06..ec05768c59 100644 --- a/animations/step_02_a/web/index.html +++ b/animations/step_02_a/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/animations/step_02_b/.gitignore b/animations/step_02_b/.gitignore index 29a3a5017f..79c113f9b5 100644 --- a/animations/step_02_b/.gitignore +++ b/animations/step_02_b/.gitignore @@ -5,9 +5,11 @@ *.swp .DS_Store .atom/ +.build/ .buildlog/ .history .svn/ +.swiftpm/ migrate_working_dir/ # IntelliJ related diff --git a/animations/step_02/android/app/build.gradle b/animations/step_02_b/android/app/build.gradle.kts similarity index 84% rename from animations/step_02/android/app/build.gradle rename to animations/step_02_b/android/app/build.gradle.kts index 7c3594ed33..31d285867f 100644 --- a/animations/step_02/android/app/build.gradle +++ b/animations/step_02_b/android/app/build.gradle.kts @@ -1,8 +1,8 @@ plugins { - id "com.android.application" - id "kotlin-android" + id("com.android.application") + id("kotlin-android") // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. - id "dev.flutter.flutter-gradle-plugin" + id("dev.flutter.flutter-gradle-plugin") } android { @@ -16,7 +16,7 @@ android { } kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8 + jvmTarget = JavaVersion.VERSION_1_8.toString() } defaultConfig { @@ -34,7 +34,7 @@ android { release { // TODO: Add your own signing config for the release build. // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig = signingConfigs.debug + signingConfig = signingConfigs.getByName("debug") } } } diff --git a/animations/step_02_b/android/build.gradle b/animations/step_02_b/android/build.gradle deleted file mode 100644 index d2ffbffa4c..0000000000 --- a/animations/step_02_b/android/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = "../build" -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(":app") -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/animations/step_02_b/android/build.gradle.kts b/animations/step_02_b/android/build.gradle.kts new file mode 100644 index 0000000000..89176ef44e --- /dev/null +++ b/animations/step_02_b/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/animations/step_02_b/android/gradle.properties b/animations/step_02_b/android/gradle.properties index 2597170821..f018a61817 100644 --- a/animations/step_02_b/android/gradle.properties +++ b/animations/step_02_b/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/animations/step_02_b/android/gradle/wrapper/gradle-wrapper.properties b/animations/step_02_b/android/gradle/wrapper/gradle-wrapper.properties index 7bb2df6ba6..afa1e8eb0a 100644 --- a/animations/step_02_b/android/gradle/wrapper/gradle-wrapper.properties +++ b/animations/step_02_b/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip diff --git a/animations/step_02_b/android/settings.gradle b/animations/step_02_b/android/settings.gradle deleted file mode 100644 index b9e43bd376..0000000000 --- a/animations/step_02_b/android/settings.gradle +++ /dev/null @@ -1,25 +0,0 @@ -pluginManagement { - def flutterSdkPath = { - def properties = new Properties() - file("local.properties").withInputStream { properties.load(it) } - def flutterSdkPath = properties.getProperty("flutter.sdk") - assert flutterSdkPath != null, "flutter.sdk not set in local.properties" - return flutterSdkPath - }() - - includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") - - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} - -plugins { - id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.1.0" apply false - id "org.jetbrains.kotlin.android" version "1.8.22" apply false -} - -include ":app" diff --git a/animations/step_02_b/android/settings.gradle.kts b/animations/step_02_b/android/settings.gradle.kts new file mode 100644 index 0000000000..a439442c20 --- /dev/null +++ b/animations/step_02_b/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.0" apply false + id("org.jetbrains.kotlin.android") version "1.8.22" apply false +} + +include(":app") diff --git a/animations/step_02_b/linux/CMakeLists.txt b/animations/step_02_b/linux/CMakeLists.txt index 658be85ac5..7caf822271 100644 --- a/animations/step_02_b/linux/CMakeLists.txt +++ b/animations/step_02_b/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/animations/step_02_b/linux/runner/CMakeLists.txt b/animations/step_02_b/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/animations/step_02_b/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/animations/step_02_a/linux/main.cc b/animations/step_02_b/linux/runner/main.cc similarity index 100% rename from animations/step_02_a/linux/main.cc rename to animations/step_02_b/linux/runner/main.cc diff --git a/animations/step_02_a/linux/my_application.cc b/animations/step_02_b/linux/runner/my_application.cc similarity index 93% rename from animations/step_02_a/linux/my_application.cc rename to animations/step_02_b/linux/runner/my_application.cc index d6ea0e3c5f..0040d7e46c 100644 --- a/animations/step_02_a/linux/my_application.cc +++ b/animations/step_02_b/linux/runner/my_application.cc @@ -117,6 +117,12 @@ static void my_application_class_init(MyApplicationClass* klass) { static void my_application_init(MyApplication* self) {} MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + return MY_APPLICATION(g_object_new(my_application_get_type(), "application-id", APPLICATION_ID, "flags", G_APPLICATION_NON_UNIQUE, diff --git a/animations/step_02_a/linux/my_application.h b/animations/step_02_b/linux/runner/my_application.h similarity index 100% rename from animations/step_02_a/linux/my_application.h rename to animations/step_02_b/linux/runner/my_application.h diff --git a/animations/step_02_b/macos/Runner/AppDelegate.swift b/animations/step_02_b/macos/Runner/AppDelegate.swift index 8e02df2888..b3c1761412 100644 --- a/animations/step_02_b/macos/Runner/AppDelegate.swift +++ b/animations/step_02_b/macos/Runner/AppDelegate.swift @@ -6,4 +6,8 @@ class AppDelegate: FlutterAppDelegate { override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { return true } + + override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { + return true + } } diff --git a/animations/step_02_b/web/index.html b/animations/step_02_b/web/index.html index 89656d9a06..ec05768c59 100644 --- a/animations/step_02_b/web/index.html +++ b/animations/step_02_b/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/animations/step_02_c/.gitignore b/animations/step_02_c/.gitignore index 29a3a5017f..79c113f9b5 100644 --- a/animations/step_02_c/.gitignore +++ b/animations/step_02_c/.gitignore @@ -5,9 +5,11 @@ *.swp .DS_Store .atom/ +.build/ .buildlog/ .history .svn/ +.swiftpm/ migrate_working_dir/ # IntelliJ related diff --git a/animations/step_02_c/android/app/build.gradle b/animations/step_02_c/android/app/build.gradle deleted file mode 100644 index 7c3594ed33..0000000000 --- a/animations/step_02_c/android/app/build.gradle +++ /dev/null @@ -1,44 +0,0 @@ -plugins { - id "com.android.application" - id "kotlin-android" - // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. - id "dev.flutter.flutter-gradle-plugin" -} - -android { - namespace = "com.example.quiz" - compileSdk = flutter.compileSdkVersion - ndkVersion = flutter.ndkVersion - - compileOptions { - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 - } - - kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8 - } - - defaultConfig { - // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). - applicationId = "com.example.quiz" - // You can update the following values to match your application needs. - // For more information, see: https://flutter.dev/to/review-gradle-config. - minSdk = flutter.minSdkVersion - targetSdk = flutter.targetSdkVersion - versionCode = flutter.versionCode - versionName = flutter.versionName - } - - buildTypes { - release { - // TODO: Add your own signing config for the release build. - // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig = signingConfigs.debug - } - } -} - -flutter { - source = "../.." -} diff --git a/animations/step_02_c/android/app/build.gradle.kts b/animations/step_02_c/android/app/build.gradle.kts new file mode 100644 index 0000000000..31d285867f --- /dev/null +++ b/animations/step_02_c/android/app/build.gradle.kts @@ -0,0 +1,44 @@ +plugins { + id("com.android.application") + id("kotlin-android") + // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. + id("dev.flutter.flutter-gradle-plugin") +} + +android { + namespace = "com.example.quiz" + compileSdk = flutter.compileSdkVersion + ndkVersion = flutter.ndkVersion + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 + } + + kotlinOptions { + jvmTarget = JavaVersion.VERSION_1_8.toString() + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId = "com.example.quiz" + // You can update the following values to match your application needs. + // For more information, see: https://flutter.dev/to/review-gradle-config. + minSdk = flutter.minSdkVersion + targetSdk = flutter.targetSdkVersion + versionCode = flutter.versionCode + versionName = flutter.versionName + } + + buildTypes { + release { + // TODO: Add your own signing config for the release build. + // Signing with the debug keys for now, so `flutter run --release` works. + signingConfig = signingConfigs.getByName("debug") + } + } +} + +flutter { + source = "../.." +} diff --git a/animations/step_02_c/android/build.gradle b/animations/step_02_c/android/build.gradle deleted file mode 100644 index d2ffbffa4c..0000000000 --- a/animations/step_02_c/android/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = "../build" -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(":app") -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/animations/step_02_c/android/build.gradle.kts b/animations/step_02_c/android/build.gradle.kts new file mode 100644 index 0000000000..89176ef44e --- /dev/null +++ b/animations/step_02_c/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/animations/step_02_c/android/gradle.properties b/animations/step_02_c/android/gradle.properties index 2597170821..f018a61817 100644 --- a/animations/step_02_c/android/gradle.properties +++ b/animations/step_02_c/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/animations/step_02_c/android/gradle/wrapper/gradle-wrapper.properties b/animations/step_02_c/android/gradle/wrapper/gradle-wrapper.properties index 7bb2df6ba6..afa1e8eb0a 100644 --- a/animations/step_02_c/android/gradle/wrapper/gradle-wrapper.properties +++ b/animations/step_02_c/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip diff --git a/animations/step_02_c/android/settings.gradle b/animations/step_02_c/android/settings.gradle deleted file mode 100644 index b9e43bd376..0000000000 --- a/animations/step_02_c/android/settings.gradle +++ /dev/null @@ -1,25 +0,0 @@ -pluginManagement { - def flutterSdkPath = { - def properties = new Properties() - file("local.properties").withInputStream { properties.load(it) } - def flutterSdkPath = properties.getProperty("flutter.sdk") - assert flutterSdkPath != null, "flutter.sdk not set in local.properties" - return flutterSdkPath - }() - - includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") - - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} - -plugins { - id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.1.0" apply false - id "org.jetbrains.kotlin.android" version "1.8.22" apply false -} - -include ":app" diff --git a/animations/step_02_c/android/settings.gradle.kts b/animations/step_02_c/android/settings.gradle.kts new file mode 100644 index 0000000000..a439442c20 --- /dev/null +++ b/animations/step_02_c/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.0" apply false + id("org.jetbrains.kotlin.android") version "1.8.22" apply false +} + +include(":app") diff --git a/animations/step_02_c/linux/CMakeLists.txt b/animations/step_02_c/linux/CMakeLists.txt index 658be85ac5..7caf822271 100644 --- a/animations/step_02_c/linux/CMakeLists.txt +++ b/animations/step_02_c/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/animations/step_02_c/linux/runner/CMakeLists.txt b/animations/step_02_c/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/animations/step_02_c/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/animations/step_02_b/linux/main.cc b/animations/step_02_c/linux/runner/main.cc similarity index 100% rename from animations/step_02_b/linux/main.cc rename to animations/step_02_c/linux/runner/main.cc diff --git a/animations/step_02_b/linux/my_application.cc b/animations/step_02_c/linux/runner/my_application.cc similarity index 93% rename from animations/step_02_b/linux/my_application.cc rename to animations/step_02_c/linux/runner/my_application.cc index d6ea0e3c5f..0040d7e46c 100644 --- a/animations/step_02_b/linux/my_application.cc +++ b/animations/step_02_c/linux/runner/my_application.cc @@ -117,6 +117,12 @@ static void my_application_class_init(MyApplicationClass* klass) { static void my_application_init(MyApplication* self) {} MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + return MY_APPLICATION(g_object_new(my_application_get_type(), "application-id", APPLICATION_ID, "flags", G_APPLICATION_NON_UNIQUE, diff --git a/animations/step_02_b/linux/my_application.h b/animations/step_02_c/linux/runner/my_application.h similarity index 100% rename from animations/step_02_b/linux/my_application.h rename to animations/step_02_c/linux/runner/my_application.h diff --git a/animations/step_02_c/macos/Runner/AppDelegate.swift b/animations/step_02_c/macos/Runner/AppDelegate.swift index 8e02df2888..b3c1761412 100644 --- a/animations/step_02_c/macos/Runner/AppDelegate.swift +++ b/animations/step_02_c/macos/Runner/AppDelegate.swift @@ -6,4 +6,8 @@ class AppDelegate: FlutterAppDelegate { override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { return true } + + override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { + return true + } } diff --git a/animations/step_02_c/web/index.html b/animations/step_02_c/web/index.html index 89656d9a06..ec05768c59 100644 --- a/animations/step_02_c/web/index.html +++ b/animations/step_02_c/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/animations/step_02_d/.gitignore b/animations/step_02_d/.gitignore index 29a3a5017f..79c113f9b5 100644 --- a/animations/step_02_d/.gitignore +++ b/animations/step_02_d/.gitignore @@ -5,9 +5,11 @@ *.swp .DS_Store .atom/ +.build/ .buildlog/ .history .svn/ +.swiftpm/ migrate_working_dir/ # IntelliJ related diff --git a/animations/step_02_d/android/app/build.gradle b/animations/step_02_d/android/app/build.gradle deleted file mode 100644 index 7c3594ed33..0000000000 --- a/animations/step_02_d/android/app/build.gradle +++ /dev/null @@ -1,44 +0,0 @@ -plugins { - id "com.android.application" - id "kotlin-android" - // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. - id "dev.flutter.flutter-gradle-plugin" -} - -android { - namespace = "com.example.quiz" - compileSdk = flutter.compileSdkVersion - ndkVersion = flutter.ndkVersion - - compileOptions { - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 - } - - kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8 - } - - defaultConfig { - // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). - applicationId = "com.example.quiz" - // You can update the following values to match your application needs. - // For more information, see: https://flutter.dev/to/review-gradle-config. - minSdk = flutter.minSdkVersion - targetSdk = flutter.targetSdkVersion - versionCode = flutter.versionCode - versionName = flutter.versionName - } - - buildTypes { - release { - // TODO: Add your own signing config for the release build. - // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig = signingConfigs.debug - } - } -} - -flutter { - source = "../.." -} diff --git a/animations/step_02_d/android/app/build.gradle.kts b/animations/step_02_d/android/app/build.gradle.kts new file mode 100644 index 0000000000..31d285867f --- /dev/null +++ b/animations/step_02_d/android/app/build.gradle.kts @@ -0,0 +1,44 @@ +plugins { + id("com.android.application") + id("kotlin-android") + // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. + id("dev.flutter.flutter-gradle-plugin") +} + +android { + namespace = "com.example.quiz" + compileSdk = flutter.compileSdkVersion + ndkVersion = flutter.ndkVersion + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 + } + + kotlinOptions { + jvmTarget = JavaVersion.VERSION_1_8.toString() + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId = "com.example.quiz" + // You can update the following values to match your application needs. + // For more information, see: https://flutter.dev/to/review-gradle-config. + minSdk = flutter.minSdkVersion + targetSdk = flutter.targetSdkVersion + versionCode = flutter.versionCode + versionName = flutter.versionName + } + + buildTypes { + release { + // TODO: Add your own signing config for the release build. + // Signing with the debug keys for now, so `flutter run --release` works. + signingConfig = signingConfigs.getByName("debug") + } + } +} + +flutter { + source = "../.." +} diff --git a/animations/step_02_d/android/build.gradle b/animations/step_02_d/android/build.gradle deleted file mode 100644 index d2ffbffa4c..0000000000 --- a/animations/step_02_d/android/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = "../build" -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(":app") -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/animations/step_02_d/android/build.gradle.kts b/animations/step_02_d/android/build.gradle.kts new file mode 100644 index 0000000000..89176ef44e --- /dev/null +++ b/animations/step_02_d/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/animations/step_02_d/android/gradle.properties b/animations/step_02_d/android/gradle.properties index 2597170821..f018a61817 100644 --- a/animations/step_02_d/android/gradle.properties +++ b/animations/step_02_d/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/animations/step_02_d/android/gradle/wrapper/gradle-wrapper.properties b/animations/step_02_d/android/gradle/wrapper/gradle-wrapper.properties index 7bb2df6ba6..afa1e8eb0a 100644 --- a/animations/step_02_d/android/gradle/wrapper/gradle-wrapper.properties +++ b/animations/step_02_d/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip diff --git a/animations/step_02_d/android/settings.gradle b/animations/step_02_d/android/settings.gradle deleted file mode 100644 index b9e43bd376..0000000000 --- a/animations/step_02_d/android/settings.gradle +++ /dev/null @@ -1,25 +0,0 @@ -pluginManagement { - def flutterSdkPath = { - def properties = new Properties() - file("local.properties").withInputStream { properties.load(it) } - def flutterSdkPath = properties.getProperty("flutter.sdk") - assert flutterSdkPath != null, "flutter.sdk not set in local.properties" - return flutterSdkPath - }() - - includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") - - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} - -plugins { - id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.1.0" apply false - id "org.jetbrains.kotlin.android" version "1.8.22" apply false -} - -include ":app" diff --git a/animations/step_02_d/android/settings.gradle.kts b/animations/step_02_d/android/settings.gradle.kts new file mode 100644 index 0000000000..a439442c20 --- /dev/null +++ b/animations/step_02_d/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.0" apply false + id("org.jetbrains.kotlin.android") version "1.8.22" apply false +} + +include(":app") diff --git a/animations/step_02_d/linux/CMakeLists.txt b/animations/step_02_d/linux/CMakeLists.txt index 658be85ac5..7caf822271 100644 --- a/animations/step_02_d/linux/CMakeLists.txt +++ b/animations/step_02_d/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/animations/step_02_d/linux/my_application.cc b/animations/step_02_d/linux/my_application.cc deleted file mode 100644 index d6ea0e3c5f..0000000000 --- a/animations/step_02_d/linux/my_application.cc +++ /dev/null @@ -1,124 +0,0 @@ -#include "my_application.h" - -#include -#ifdef GDK_WINDOWING_X11 -#include -#endif - -#include "flutter/generated_plugin_registrant.h" - -struct _MyApplication { - GtkApplication parent_instance; - char** dart_entrypoint_arguments; -}; - -G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) - -// Implements GApplication::activate. -static void my_application_activate(GApplication* application) { - MyApplication* self = MY_APPLICATION(application); - GtkWindow* window = - GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); - - // Use a header bar when running in GNOME as this is the common style used - // by applications and is the setup most users will be using (e.g. Ubuntu - // desktop). - // If running on X and not using GNOME then just use a traditional title bar - // in case the window manager does more exotic layout, e.g. tiling. - // If running on Wayland assume the header bar will work (may need changing - // if future cases occur). - gboolean use_header_bar = TRUE; -#ifdef GDK_WINDOWING_X11 - GdkScreen* screen = gtk_window_get_screen(window); - if (GDK_IS_X11_SCREEN(screen)) { - const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); - if (g_strcmp0(wm_name, "GNOME Shell") != 0) { - use_header_bar = FALSE; - } - } -#endif - if (use_header_bar) { - GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); - gtk_widget_show(GTK_WIDGET(header_bar)); - gtk_header_bar_set_title(header_bar, "quiz"); - gtk_header_bar_set_show_close_button(header_bar, TRUE); - gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); - } else { - gtk_window_set_title(window, "quiz"); - } - - gtk_window_set_default_size(window, 1280, 720); - gtk_widget_show(GTK_WIDGET(window)); - - g_autoptr(FlDartProject) project = fl_dart_project_new(); - fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); - - FlView* view = fl_view_new(project); - gtk_widget_show(GTK_WIDGET(view)); - gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); - - fl_register_plugins(FL_PLUGIN_REGISTRY(view)); - - gtk_widget_grab_focus(GTK_WIDGET(view)); -} - -// Implements GApplication::local_command_line. -static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { - MyApplication* self = MY_APPLICATION(application); - // Strip out the first argument as it is the binary name. - self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); - - g_autoptr(GError) error = nullptr; - if (!g_application_register(application, nullptr, &error)) { - g_warning("Failed to register: %s", error->message); - *exit_status = 1; - return TRUE; - } - - g_application_activate(application); - *exit_status = 0; - - return TRUE; -} - -// Implements GApplication::startup. -static void my_application_startup(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application startup. - - G_APPLICATION_CLASS(my_application_parent_class)->startup(application); -} - -// Implements GApplication::shutdown. -static void my_application_shutdown(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application shutdown. - - G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); -} - -// Implements GObject::dispose. -static void my_application_dispose(GObject* object) { - MyApplication* self = MY_APPLICATION(object); - g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); - G_OBJECT_CLASS(my_application_parent_class)->dispose(object); -} - -static void my_application_class_init(MyApplicationClass* klass) { - G_APPLICATION_CLASS(klass)->activate = my_application_activate; - G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; - G_APPLICATION_CLASS(klass)->startup = my_application_startup; - G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; - G_OBJECT_CLASS(klass)->dispose = my_application_dispose; -} - -static void my_application_init(MyApplication* self) {} - -MyApplication* my_application_new() { - return MY_APPLICATION(g_object_new(my_application_get_type(), - "application-id", APPLICATION_ID, - "flags", G_APPLICATION_NON_UNIQUE, - nullptr)); -} diff --git a/animations/step_02_d/linux/runner/CMakeLists.txt b/animations/step_02_d/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/animations/step_02_d/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/animations/step_02_c/linux/main.cc b/animations/step_02_d/linux/runner/main.cc similarity index 100% rename from animations/step_02_c/linux/main.cc rename to animations/step_02_d/linux/runner/main.cc diff --git a/animations/step_02_c/linux/my_application.cc b/animations/step_02_d/linux/runner/my_application.cc similarity index 93% rename from animations/step_02_c/linux/my_application.cc rename to animations/step_02_d/linux/runner/my_application.cc index d6ea0e3c5f..0040d7e46c 100644 --- a/animations/step_02_c/linux/my_application.cc +++ b/animations/step_02_d/linux/runner/my_application.cc @@ -117,6 +117,12 @@ static void my_application_class_init(MyApplicationClass* klass) { static void my_application_init(MyApplication* self) {} MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + return MY_APPLICATION(g_object_new(my_application_get_type(), "application-id", APPLICATION_ID, "flags", G_APPLICATION_NON_UNIQUE, diff --git a/animations/step_02_c/linux/my_application.h b/animations/step_02_d/linux/runner/my_application.h similarity index 100% rename from animations/step_02_c/linux/my_application.h rename to animations/step_02_d/linux/runner/my_application.h diff --git a/animations/step_02_d/macos/Runner/AppDelegate.swift b/animations/step_02_d/macos/Runner/AppDelegate.swift index 8e02df2888..b3c1761412 100644 --- a/animations/step_02_d/macos/Runner/AppDelegate.swift +++ b/animations/step_02_d/macos/Runner/AppDelegate.swift @@ -6,4 +6,8 @@ class AppDelegate: FlutterAppDelegate { override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { return true } + + override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { + return true + } } diff --git a/animations/step_02_d/web/index.html b/animations/step_02_d/web/index.html index 89656d9a06..ec05768c59 100644 --- a/animations/step_02_d/web/index.html +++ b/animations/step_02_d/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/animations/step_02_e/.gitignore b/animations/step_02_e/.gitignore index 29a3a5017f..79c113f9b5 100644 --- a/animations/step_02_e/.gitignore +++ b/animations/step_02_e/.gitignore @@ -5,9 +5,11 @@ *.swp .DS_Store .atom/ +.build/ .buildlog/ .history .svn/ +.swiftpm/ migrate_working_dir/ # IntelliJ related diff --git a/animations/step_02_e/android/app/build.gradle b/animations/step_02_e/android/app/build.gradle deleted file mode 100644 index 7c3594ed33..0000000000 --- a/animations/step_02_e/android/app/build.gradle +++ /dev/null @@ -1,44 +0,0 @@ -plugins { - id "com.android.application" - id "kotlin-android" - // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. - id "dev.flutter.flutter-gradle-plugin" -} - -android { - namespace = "com.example.quiz" - compileSdk = flutter.compileSdkVersion - ndkVersion = flutter.ndkVersion - - compileOptions { - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 - } - - kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8 - } - - defaultConfig { - // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). - applicationId = "com.example.quiz" - // You can update the following values to match your application needs. - // For more information, see: https://flutter.dev/to/review-gradle-config. - minSdk = flutter.minSdkVersion - targetSdk = flutter.targetSdkVersion - versionCode = flutter.versionCode - versionName = flutter.versionName - } - - buildTypes { - release { - // TODO: Add your own signing config for the release build. - // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig = signingConfigs.debug - } - } -} - -flutter { - source = "../.." -} diff --git a/animations/step_02_e/android/app/build.gradle.kts b/animations/step_02_e/android/app/build.gradle.kts new file mode 100644 index 0000000000..31d285867f --- /dev/null +++ b/animations/step_02_e/android/app/build.gradle.kts @@ -0,0 +1,44 @@ +plugins { + id("com.android.application") + id("kotlin-android") + // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. + id("dev.flutter.flutter-gradle-plugin") +} + +android { + namespace = "com.example.quiz" + compileSdk = flutter.compileSdkVersion + ndkVersion = flutter.ndkVersion + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 + } + + kotlinOptions { + jvmTarget = JavaVersion.VERSION_1_8.toString() + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId = "com.example.quiz" + // You can update the following values to match your application needs. + // For more information, see: https://flutter.dev/to/review-gradle-config. + minSdk = flutter.minSdkVersion + targetSdk = flutter.targetSdkVersion + versionCode = flutter.versionCode + versionName = flutter.versionName + } + + buildTypes { + release { + // TODO: Add your own signing config for the release build. + // Signing with the debug keys for now, so `flutter run --release` works. + signingConfig = signingConfigs.getByName("debug") + } + } +} + +flutter { + source = "../.." +} diff --git a/animations/step_02_e/android/build.gradle b/animations/step_02_e/android/build.gradle deleted file mode 100644 index d2ffbffa4c..0000000000 --- a/animations/step_02_e/android/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = "../build" -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(":app") -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/animations/step_02_e/android/build.gradle.kts b/animations/step_02_e/android/build.gradle.kts new file mode 100644 index 0000000000..89176ef44e --- /dev/null +++ b/animations/step_02_e/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/animations/step_02_e/android/gradle.properties b/animations/step_02_e/android/gradle.properties index 2597170821..f018a61817 100644 --- a/animations/step_02_e/android/gradle.properties +++ b/animations/step_02_e/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/animations/step_02_e/android/gradle/wrapper/gradle-wrapper.properties b/animations/step_02_e/android/gradle/wrapper/gradle-wrapper.properties index 7bb2df6ba6..afa1e8eb0a 100644 --- a/animations/step_02_e/android/gradle/wrapper/gradle-wrapper.properties +++ b/animations/step_02_e/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip diff --git a/animations/step_02_e/android/settings.gradle b/animations/step_02_e/android/settings.gradle deleted file mode 100644 index b9e43bd376..0000000000 --- a/animations/step_02_e/android/settings.gradle +++ /dev/null @@ -1,25 +0,0 @@ -pluginManagement { - def flutterSdkPath = { - def properties = new Properties() - file("local.properties").withInputStream { properties.load(it) } - def flutterSdkPath = properties.getProperty("flutter.sdk") - assert flutterSdkPath != null, "flutter.sdk not set in local.properties" - return flutterSdkPath - }() - - includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") - - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} - -plugins { - id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.1.0" apply false - id "org.jetbrains.kotlin.android" version "1.8.22" apply false -} - -include ":app" diff --git a/animations/step_02_e/android/settings.gradle.kts b/animations/step_02_e/android/settings.gradle.kts new file mode 100644 index 0000000000..a439442c20 --- /dev/null +++ b/animations/step_02_e/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.0" apply false + id("org.jetbrains.kotlin.android") version "1.8.22" apply false +} + +include(":app") diff --git a/animations/step_02_e/linux/CMakeLists.txt b/animations/step_02_e/linux/CMakeLists.txt index 658be85ac5..7caf822271 100644 --- a/animations/step_02_e/linux/CMakeLists.txt +++ b/animations/step_02_e/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/animations/step_02_e/linux/my_application.cc b/animations/step_02_e/linux/my_application.cc deleted file mode 100644 index d6ea0e3c5f..0000000000 --- a/animations/step_02_e/linux/my_application.cc +++ /dev/null @@ -1,124 +0,0 @@ -#include "my_application.h" - -#include -#ifdef GDK_WINDOWING_X11 -#include -#endif - -#include "flutter/generated_plugin_registrant.h" - -struct _MyApplication { - GtkApplication parent_instance; - char** dart_entrypoint_arguments; -}; - -G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) - -// Implements GApplication::activate. -static void my_application_activate(GApplication* application) { - MyApplication* self = MY_APPLICATION(application); - GtkWindow* window = - GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); - - // Use a header bar when running in GNOME as this is the common style used - // by applications and is the setup most users will be using (e.g. Ubuntu - // desktop). - // If running on X and not using GNOME then just use a traditional title bar - // in case the window manager does more exotic layout, e.g. tiling. - // If running on Wayland assume the header bar will work (may need changing - // if future cases occur). - gboolean use_header_bar = TRUE; -#ifdef GDK_WINDOWING_X11 - GdkScreen* screen = gtk_window_get_screen(window); - if (GDK_IS_X11_SCREEN(screen)) { - const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); - if (g_strcmp0(wm_name, "GNOME Shell") != 0) { - use_header_bar = FALSE; - } - } -#endif - if (use_header_bar) { - GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); - gtk_widget_show(GTK_WIDGET(header_bar)); - gtk_header_bar_set_title(header_bar, "quiz"); - gtk_header_bar_set_show_close_button(header_bar, TRUE); - gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); - } else { - gtk_window_set_title(window, "quiz"); - } - - gtk_window_set_default_size(window, 1280, 720); - gtk_widget_show(GTK_WIDGET(window)); - - g_autoptr(FlDartProject) project = fl_dart_project_new(); - fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); - - FlView* view = fl_view_new(project); - gtk_widget_show(GTK_WIDGET(view)); - gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); - - fl_register_plugins(FL_PLUGIN_REGISTRY(view)); - - gtk_widget_grab_focus(GTK_WIDGET(view)); -} - -// Implements GApplication::local_command_line. -static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { - MyApplication* self = MY_APPLICATION(application); - // Strip out the first argument as it is the binary name. - self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); - - g_autoptr(GError) error = nullptr; - if (!g_application_register(application, nullptr, &error)) { - g_warning("Failed to register: %s", error->message); - *exit_status = 1; - return TRUE; - } - - g_application_activate(application); - *exit_status = 0; - - return TRUE; -} - -// Implements GApplication::startup. -static void my_application_startup(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application startup. - - G_APPLICATION_CLASS(my_application_parent_class)->startup(application); -} - -// Implements GApplication::shutdown. -static void my_application_shutdown(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application shutdown. - - G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); -} - -// Implements GObject::dispose. -static void my_application_dispose(GObject* object) { - MyApplication* self = MY_APPLICATION(object); - g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); - G_OBJECT_CLASS(my_application_parent_class)->dispose(object); -} - -static void my_application_class_init(MyApplicationClass* klass) { - G_APPLICATION_CLASS(klass)->activate = my_application_activate; - G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; - G_APPLICATION_CLASS(klass)->startup = my_application_startup; - G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; - G_OBJECT_CLASS(klass)->dispose = my_application_dispose; -} - -static void my_application_init(MyApplication* self) {} - -MyApplication* my_application_new() { - return MY_APPLICATION(g_object_new(my_application_get_type(), - "application-id", APPLICATION_ID, - "flags", G_APPLICATION_NON_UNIQUE, - nullptr)); -} diff --git a/animations/step_02_e/linux/runner/CMakeLists.txt b/animations/step_02_e/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/animations/step_02_e/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/animations/step_02_d/linux/main.cc b/animations/step_02_e/linux/runner/main.cc similarity index 100% rename from animations/step_02_d/linux/main.cc rename to animations/step_02_e/linux/runner/main.cc diff --git a/animations/step_02_e/linux/runner/my_application.cc b/animations/step_02_e/linux/runner/my_application.cc new file mode 100644 index 0000000000..0040d7e46c --- /dev/null +++ b/animations/step_02_e/linux/runner/my_application.cc @@ -0,0 +1,130 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "quiz"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "quiz"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/animations/step_02_d/linux/my_application.h b/animations/step_02_e/linux/runner/my_application.h similarity index 100% rename from animations/step_02_d/linux/my_application.h rename to animations/step_02_e/linux/runner/my_application.h diff --git a/animations/step_02_e/macos/Runner/AppDelegate.swift b/animations/step_02_e/macos/Runner/AppDelegate.swift index 8e02df2888..b3c1761412 100644 --- a/animations/step_02_e/macos/Runner/AppDelegate.swift +++ b/animations/step_02_e/macos/Runner/AppDelegate.swift @@ -6,4 +6,8 @@ class AppDelegate: FlutterAppDelegate { override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { return true } + + override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { + return true + } } diff --git a/animations/step_02_e/web/index.html b/animations/step_02_e/web/index.html index 89656d9a06..ec05768c59 100644 --- a/animations/step_02_e/web/index.html +++ b/animations/step_02_e/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/animations/step_03/android/app/build.gradle b/animations/step_03/android/app/build.gradle deleted file mode 100644 index 7c3594ed33..0000000000 --- a/animations/step_03/android/app/build.gradle +++ /dev/null @@ -1,44 +0,0 @@ -plugins { - id "com.android.application" - id "kotlin-android" - // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. - id "dev.flutter.flutter-gradle-plugin" -} - -android { - namespace = "com.example.quiz" - compileSdk = flutter.compileSdkVersion - ndkVersion = flutter.ndkVersion - - compileOptions { - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 - } - - kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8 - } - - defaultConfig { - // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). - applicationId = "com.example.quiz" - // You can update the following values to match your application needs. - // For more information, see: https://flutter.dev/to/review-gradle-config. - minSdk = flutter.minSdkVersion - targetSdk = flutter.targetSdkVersion - versionCode = flutter.versionCode - versionName = flutter.versionName - } - - buildTypes { - release { - // TODO: Add your own signing config for the release build. - // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig = signingConfigs.debug - } - } -} - -flutter { - source = "../.." -} diff --git a/animations/step_03/android/app/build.gradle.kts b/animations/step_03/android/app/build.gradle.kts new file mode 100644 index 0000000000..31d285867f --- /dev/null +++ b/animations/step_03/android/app/build.gradle.kts @@ -0,0 +1,44 @@ +plugins { + id("com.android.application") + id("kotlin-android") + // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. + id("dev.flutter.flutter-gradle-plugin") +} + +android { + namespace = "com.example.quiz" + compileSdk = flutter.compileSdkVersion + ndkVersion = flutter.ndkVersion + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 + } + + kotlinOptions { + jvmTarget = JavaVersion.VERSION_1_8.toString() + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId = "com.example.quiz" + // You can update the following values to match your application needs. + // For more information, see: https://flutter.dev/to/review-gradle-config. + minSdk = flutter.minSdkVersion + targetSdk = flutter.targetSdkVersion + versionCode = flutter.versionCode + versionName = flutter.versionName + } + + buildTypes { + release { + // TODO: Add your own signing config for the release build. + // Signing with the debug keys for now, so `flutter run --release` works. + signingConfig = signingConfigs.getByName("debug") + } + } +} + +flutter { + source = "../.." +} diff --git a/animations/step_03/android/build.gradle b/animations/step_03/android/build.gradle deleted file mode 100644 index d2ffbffa4c..0000000000 --- a/animations/step_03/android/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = "../build" -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(":app") -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/animations/step_03/android/build.gradle.kts b/animations/step_03/android/build.gradle.kts new file mode 100644 index 0000000000..89176ef44e --- /dev/null +++ b/animations/step_03/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/animations/step_03/android/gradle.properties b/animations/step_03/android/gradle.properties index 2597170821..f018a61817 100644 --- a/animations/step_03/android/gradle.properties +++ b/animations/step_03/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/animations/step_03/android/gradle/wrapper/gradle-wrapper.properties b/animations/step_03/android/gradle/wrapper/gradle-wrapper.properties index 7bb2df6ba6..afa1e8eb0a 100644 --- a/animations/step_03/android/gradle/wrapper/gradle-wrapper.properties +++ b/animations/step_03/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip diff --git a/animations/step_03/android/settings.gradle b/animations/step_03/android/settings.gradle deleted file mode 100644 index b9e43bd376..0000000000 --- a/animations/step_03/android/settings.gradle +++ /dev/null @@ -1,25 +0,0 @@ -pluginManagement { - def flutterSdkPath = { - def properties = new Properties() - file("local.properties").withInputStream { properties.load(it) } - def flutterSdkPath = properties.getProperty("flutter.sdk") - assert flutterSdkPath != null, "flutter.sdk not set in local.properties" - return flutterSdkPath - }() - - includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") - - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} - -plugins { - id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.1.0" apply false - id "org.jetbrains.kotlin.android" version "1.8.22" apply false -} - -include ":app" diff --git a/animations/step_03/android/settings.gradle.kts b/animations/step_03/android/settings.gradle.kts new file mode 100644 index 0000000000..a439442c20 --- /dev/null +++ b/animations/step_03/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.0" apply false + id("org.jetbrains.kotlin.android") version "1.8.22" apply false +} + +include(":app") diff --git a/animations/step_03/linux/my_application.cc b/animations/step_03/linux/my_application.cc deleted file mode 100644 index d6ea0e3c5f..0000000000 --- a/animations/step_03/linux/my_application.cc +++ /dev/null @@ -1,124 +0,0 @@ -#include "my_application.h" - -#include -#ifdef GDK_WINDOWING_X11 -#include -#endif - -#include "flutter/generated_plugin_registrant.h" - -struct _MyApplication { - GtkApplication parent_instance; - char** dart_entrypoint_arguments; -}; - -G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) - -// Implements GApplication::activate. -static void my_application_activate(GApplication* application) { - MyApplication* self = MY_APPLICATION(application); - GtkWindow* window = - GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); - - // Use a header bar when running in GNOME as this is the common style used - // by applications and is the setup most users will be using (e.g. Ubuntu - // desktop). - // If running on X and not using GNOME then just use a traditional title bar - // in case the window manager does more exotic layout, e.g. tiling. - // If running on Wayland assume the header bar will work (may need changing - // if future cases occur). - gboolean use_header_bar = TRUE; -#ifdef GDK_WINDOWING_X11 - GdkScreen* screen = gtk_window_get_screen(window); - if (GDK_IS_X11_SCREEN(screen)) { - const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); - if (g_strcmp0(wm_name, "GNOME Shell") != 0) { - use_header_bar = FALSE; - } - } -#endif - if (use_header_bar) { - GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); - gtk_widget_show(GTK_WIDGET(header_bar)); - gtk_header_bar_set_title(header_bar, "quiz"); - gtk_header_bar_set_show_close_button(header_bar, TRUE); - gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); - } else { - gtk_window_set_title(window, "quiz"); - } - - gtk_window_set_default_size(window, 1280, 720); - gtk_widget_show(GTK_WIDGET(window)); - - g_autoptr(FlDartProject) project = fl_dart_project_new(); - fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); - - FlView* view = fl_view_new(project); - gtk_widget_show(GTK_WIDGET(view)); - gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); - - fl_register_plugins(FL_PLUGIN_REGISTRY(view)); - - gtk_widget_grab_focus(GTK_WIDGET(view)); -} - -// Implements GApplication::local_command_line. -static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { - MyApplication* self = MY_APPLICATION(application); - // Strip out the first argument as it is the binary name. - self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); - - g_autoptr(GError) error = nullptr; - if (!g_application_register(application, nullptr, &error)) { - g_warning("Failed to register: %s", error->message); - *exit_status = 1; - return TRUE; - } - - g_application_activate(application); - *exit_status = 0; - - return TRUE; -} - -// Implements GApplication::startup. -static void my_application_startup(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application startup. - - G_APPLICATION_CLASS(my_application_parent_class)->startup(application); -} - -// Implements GApplication::shutdown. -static void my_application_shutdown(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application shutdown. - - G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); -} - -// Implements GObject::dispose. -static void my_application_dispose(GObject* object) { - MyApplication* self = MY_APPLICATION(object); - g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); - G_OBJECT_CLASS(my_application_parent_class)->dispose(object); -} - -static void my_application_class_init(MyApplicationClass* klass) { - G_APPLICATION_CLASS(klass)->activate = my_application_activate; - G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; - G_APPLICATION_CLASS(klass)->startup = my_application_startup; - G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; - G_OBJECT_CLASS(klass)->dispose = my_application_dispose; -} - -static void my_application_init(MyApplication* self) {} - -MyApplication* my_application_new() { - return MY_APPLICATION(g_object_new(my_application_get_type(), - "application-id", APPLICATION_ID, - "flags", G_APPLICATION_NON_UNIQUE, - nullptr)); -} diff --git a/animations/step_03_a/.gitignore b/animations/step_03_a/.gitignore index 29a3a5017f..79c113f9b5 100644 --- a/animations/step_03_a/.gitignore +++ b/animations/step_03_a/.gitignore @@ -5,9 +5,11 @@ *.swp .DS_Store .atom/ +.build/ .buildlog/ .history .svn/ +.swiftpm/ migrate_working_dir/ # IntelliJ related diff --git a/animations/step_03_a/android/app/build.gradle b/animations/step_03_a/android/app/build.gradle deleted file mode 100644 index 7c3594ed33..0000000000 --- a/animations/step_03_a/android/app/build.gradle +++ /dev/null @@ -1,44 +0,0 @@ -plugins { - id "com.android.application" - id "kotlin-android" - // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. - id "dev.flutter.flutter-gradle-plugin" -} - -android { - namespace = "com.example.quiz" - compileSdk = flutter.compileSdkVersion - ndkVersion = flutter.ndkVersion - - compileOptions { - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 - } - - kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8 - } - - defaultConfig { - // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). - applicationId = "com.example.quiz" - // You can update the following values to match your application needs. - // For more information, see: https://flutter.dev/to/review-gradle-config. - minSdk = flutter.minSdkVersion - targetSdk = flutter.targetSdkVersion - versionCode = flutter.versionCode - versionName = flutter.versionName - } - - buildTypes { - release { - // TODO: Add your own signing config for the release build. - // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig = signingConfigs.debug - } - } -} - -flutter { - source = "../.." -} diff --git a/animations/step_03_a/android/app/build.gradle.kts b/animations/step_03_a/android/app/build.gradle.kts new file mode 100644 index 0000000000..31d285867f --- /dev/null +++ b/animations/step_03_a/android/app/build.gradle.kts @@ -0,0 +1,44 @@ +plugins { + id("com.android.application") + id("kotlin-android") + // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. + id("dev.flutter.flutter-gradle-plugin") +} + +android { + namespace = "com.example.quiz" + compileSdk = flutter.compileSdkVersion + ndkVersion = flutter.ndkVersion + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 + } + + kotlinOptions { + jvmTarget = JavaVersion.VERSION_1_8.toString() + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId = "com.example.quiz" + // You can update the following values to match your application needs. + // For more information, see: https://flutter.dev/to/review-gradle-config. + minSdk = flutter.minSdkVersion + targetSdk = flutter.targetSdkVersion + versionCode = flutter.versionCode + versionName = flutter.versionName + } + + buildTypes { + release { + // TODO: Add your own signing config for the release build. + // Signing with the debug keys for now, so `flutter run --release` works. + signingConfig = signingConfigs.getByName("debug") + } + } +} + +flutter { + source = "../.." +} diff --git a/animations/step_03_a/android/build.gradle b/animations/step_03_a/android/build.gradle deleted file mode 100644 index d2ffbffa4c..0000000000 --- a/animations/step_03_a/android/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = "../build" -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(":app") -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/animations/step_03_a/android/build.gradle.kts b/animations/step_03_a/android/build.gradle.kts new file mode 100644 index 0000000000..89176ef44e --- /dev/null +++ b/animations/step_03_a/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/animations/step_03_a/android/gradle.properties b/animations/step_03_a/android/gradle.properties index 2597170821..f018a61817 100644 --- a/animations/step_03_a/android/gradle.properties +++ b/animations/step_03_a/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/animations/step_03_a/android/gradle/wrapper/gradle-wrapper.properties b/animations/step_03_a/android/gradle/wrapper/gradle-wrapper.properties index 7bb2df6ba6..afa1e8eb0a 100644 --- a/animations/step_03_a/android/gradle/wrapper/gradle-wrapper.properties +++ b/animations/step_03_a/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip diff --git a/animations/step_03_a/android/settings.gradle b/animations/step_03_a/android/settings.gradle deleted file mode 100644 index b9e43bd376..0000000000 --- a/animations/step_03_a/android/settings.gradle +++ /dev/null @@ -1,25 +0,0 @@ -pluginManagement { - def flutterSdkPath = { - def properties = new Properties() - file("local.properties").withInputStream { properties.load(it) } - def flutterSdkPath = properties.getProperty("flutter.sdk") - assert flutterSdkPath != null, "flutter.sdk not set in local.properties" - return flutterSdkPath - }() - - includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") - - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} - -plugins { - id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.1.0" apply false - id "org.jetbrains.kotlin.android" version "1.8.22" apply false -} - -include ":app" diff --git a/animations/step_03_a/android/settings.gradle.kts b/animations/step_03_a/android/settings.gradle.kts new file mode 100644 index 0000000000..a439442c20 --- /dev/null +++ b/animations/step_03_a/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.0" apply false + id("org.jetbrains.kotlin.android") version "1.8.22" apply false +} + +include(":app") diff --git a/animations/step_03_a/linux/CMakeLists.txt b/animations/step_03_a/linux/CMakeLists.txt index 658be85ac5..7caf822271 100644 --- a/animations/step_03_a/linux/CMakeLists.txt +++ b/animations/step_03_a/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/animations/step_03_a/linux/my_application.cc b/animations/step_03_a/linux/my_application.cc deleted file mode 100644 index d6ea0e3c5f..0000000000 --- a/animations/step_03_a/linux/my_application.cc +++ /dev/null @@ -1,124 +0,0 @@ -#include "my_application.h" - -#include -#ifdef GDK_WINDOWING_X11 -#include -#endif - -#include "flutter/generated_plugin_registrant.h" - -struct _MyApplication { - GtkApplication parent_instance; - char** dart_entrypoint_arguments; -}; - -G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) - -// Implements GApplication::activate. -static void my_application_activate(GApplication* application) { - MyApplication* self = MY_APPLICATION(application); - GtkWindow* window = - GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); - - // Use a header bar when running in GNOME as this is the common style used - // by applications and is the setup most users will be using (e.g. Ubuntu - // desktop). - // If running on X and not using GNOME then just use a traditional title bar - // in case the window manager does more exotic layout, e.g. tiling. - // If running on Wayland assume the header bar will work (may need changing - // if future cases occur). - gboolean use_header_bar = TRUE; -#ifdef GDK_WINDOWING_X11 - GdkScreen* screen = gtk_window_get_screen(window); - if (GDK_IS_X11_SCREEN(screen)) { - const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); - if (g_strcmp0(wm_name, "GNOME Shell") != 0) { - use_header_bar = FALSE; - } - } -#endif - if (use_header_bar) { - GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); - gtk_widget_show(GTK_WIDGET(header_bar)); - gtk_header_bar_set_title(header_bar, "quiz"); - gtk_header_bar_set_show_close_button(header_bar, TRUE); - gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); - } else { - gtk_window_set_title(window, "quiz"); - } - - gtk_window_set_default_size(window, 1280, 720); - gtk_widget_show(GTK_WIDGET(window)); - - g_autoptr(FlDartProject) project = fl_dart_project_new(); - fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); - - FlView* view = fl_view_new(project); - gtk_widget_show(GTK_WIDGET(view)); - gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); - - fl_register_plugins(FL_PLUGIN_REGISTRY(view)); - - gtk_widget_grab_focus(GTK_WIDGET(view)); -} - -// Implements GApplication::local_command_line. -static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { - MyApplication* self = MY_APPLICATION(application); - // Strip out the first argument as it is the binary name. - self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); - - g_autoptr(GError) error = nullptr; - if (!g_application_register(application, nullptr, &error)) { - g_warning("Failed to register: %s", error->message); - *exit_status = 1; - return TRUE; - } - - g_application_activate(application); - *exit_status = 0; - - return TRUE; -} - -// Implements GApplication::startup. -static void my_application_startup(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application startup. - - G_APPLICATION_CLASS(my_application_parent_class)->startup(application); -} - -// Implements GApplication::shutdown. -static void my_application_shutdown(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application shutdown. - - G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); -} - -// Implements GObject::dispose. -static void my_application_dispose(GObject* object) { - MyApplication* self = MY_APPLICATION(object); - g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); - G_OBJECT_CLASS(my_application_parent_class)->dispose(object); -} - -static void my_application_class_init(MyApplicationClass* klass) { - G_APPLICATION_CLASS(klass)->activate = my_application_activate; - G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; - G_APPLICATION_CLASS(klass)->startup = my_application_startup; - G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; - G_OBJECT_CLASS(klass)->dispose = my_application_dispose; -} - -static void my_application_init(MyApplication* self) {} - -MyApplication* my_application_new() { - return MY_APPLICATION(g_object_new(my_application_get_type(), - "application-id", APPLICATION_ID, - "flags", G_APPLICATION_NON_UNIQUE, - nullptr)); -} diff --git a/animations/step_03_a/linux/runner/CMakeLists.txt b/animations/step_03_a/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/animations/step_03_a/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/animations/step_02_e/linux/main.cc b/animations/step_03_a/linux/runner/main.cc similarity index 100% rename from animations/step_02_e/linux/main.cc rename to animations/step_03_a/linux/runner/main.cc diff --git a/animations/step_03_a/linux/runner/my_application.cc b/animations/step_03_a/linux/runner/my_application.cc new file mode 100644 index 0000000000..0040d7e46c --- /dev/null +++ b/animations/step_03_a/linux/runner/my_application.cc @@ -0,0 +1,130 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "quiz"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "quiz"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/animations/step_02_e/linux/my_application.h b/animations/step_03_a/linux/runner/my_application.h similarity index 100% rename from animations/step_02_e/linux/my_application.h rename to animations/step_03_a/linux/runner/my_application.h diff --git a/animations/step_03_a/macos/Runner/AppDelegate.swift b/animations/step_03_a/macos/Runner/AppDelegate.swift index 8e02df2888..b3c1761412 100644 --- a/animations/step_03_a/macos/Runner/AppDelegate.swift +++ b/animations/step_03_a/macos/Runner/AppDelegate.swift @@ -6,4 +6,8 @@ class AppDelegate: FlutterAppDelegate { override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { return true } + + override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { + return true + } } diff --git a/animations/step_03_a/web/index.html b/animations/step_03_a/web/index.html index 89656d9a06..ec05768c59 100644 --- a/animations/step_03_a/web/index.html +++ b/animations/step_03_a/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/animations/step_03_b/.gitignore b/animations/step_03_b/.gitignore index 29a3a5017f..79c113f9b5 100644 --- a/animations/step_03_b/.gitignore +++ b/animations/step_03_b/.gitignore @@ -5,9 +5,11 @@ *.swp .DS_Store .atom/ +.build/ .buildlog/ .history .svn/ +.swiftpm/ migrate_working_dir/ # IntelliJ related diff --git a/animations/step_03_b/android/app/build.gradle b/animations/step_03_b/android/app/build.gradle deleted file mode 100644 index 7c3594ed33..0000000000 --- a/animations/step_03_b/android/app/build.gradle +++ /dev/null @@ -1,44 +0,0 @@ -plugins { - id "com.android.application" - id "kotlin-android" - // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. - id "dev.flutter.flutter-gradle-plugin" -} - -android { - namespace = "com.example.quiz" - compileSdk = flutter.compileSdkVersion - ndkVersion = flutter.ndkVersion - - compileOptions { - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 - } - - kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8 - } - - defaultConfig { - // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). - applicationId = "com.example.quiz" - // You can update the following values to match your application needs. - // For more information, see: https://flutter.dev/to/review-gradle-config. - minSdk = flutter.minSdkVersion - targetSdk = flutter.targetSdkVersion - versionCode = flutter.versionCode - versionName = flutter.versionName - } - - buildTypes { - release { - // TODO: Add your own signing config for the release build. - // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig = signingConfigs.debug - } - } -} - -flutter { - source = "../.." -} diff --git a/animations/step_03_b/android/app/build.gradle.kts b/animations/step_03_b/android/app/build.gradle.kts new file mode 100644 index 0000000000..31d285867f --- /dev/null +++ b/animations/step_03_b/android/app/build.gradle.kts @@ -0,0 +1,44 @@ +plugins { + id("com.android.application") + id("kotlin-android") + // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. + id("dev.flutter.flutter-gradle-plugin") +} + +android { + namespace = "com.example.quiz" + compileSdk = flutter.compileSdkVersion + ndkVersion = flutter.ndkVersion + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 + } + + kotlinOptions { + jvmTarget = JavaVersion.VERSION_1_8.toString() + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId = "com.example.quiz" + // You can update the following values to match your application needs. + // For more information, see: https://flutter.dev/to/review-gradle-config. + minSdk = flutter.minSdkVersion + targetSdk = flutter.targetSdkVersion + versionCode = flutter.versionCode + versionName = flutter.versionName + } + + buildTypes { + release { + // TODO: Add your own signing config for the release build. + // Signing with the debug keys for now, so `flutter run --release` works. + signingConfig = signingConfigs.getByName("debug") + } + } +} + +flutter { + source = "../.." +} diff --git a/animations/step_03_b/android/build.gradle b/animations/step_03_b/android/build.gradle deleted file mode 100644 index d2ffbffa4c..0000000000 --- a/animations/step_03_b/android/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = "../build" -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(":app") -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/animations/step_03_b/android/build.gradle.kts b/animations/step_03_b/android/build.gradle.kts new file mode 100644 index 0000000000..89176ef44e --- /dev/null +++ b/animations/step_03_b/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/animations/step_03_b/android/gradle.properties b/animations/step_03_b/android/gradle.properties index 2597170821..f018a61817 100644 --- a/animations/step_03_b/android/gradle.properties +++ b/animations/step_03_b/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/animations/step_03_b/android/gradle/wrapper/gradle-wrapper.properties b/animations/step_03_b/android/gradle/wrapper/gradle-wrapper.properties index 7bb2df6ba6..afa1e8eb0a 100644 --- a/animations/step_03_b/android/gradle/wrapper/gradle-wrapper.properties +++ b/animations/step_03_b/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip diff --git a/animations/step_03_b/android/settings.gradle b/animations/step_03_b/android/settings.gradle deleted file mode 100644 index b9e43bd376..0000000000 --- a/animations/step_03_b/android/settings.gradle +++ /dev/null @@ -1,25 +0,0 @@ -pluginManagement { - def flutterSdkPath = { - def properties = new Properties() - file("local.properties").withInputStream { properties.load(it) } - def flutterSdkPath = properties.getProperty("flutter.sdk") - assert flutterSdkPath != null, "flutter.sdk not set in local.properties" - return flutterSdkPath - }() - - includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") - - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} - -plugins { - id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.1.0" apply false - id "org.jetbrains.kotlin.android" version "1.8.22" apply false -} - -include ":app" diff --git a/animations/step_03_b/android/settings.gradle.kts b/animations/step_03_b/android/settings.gradle.kts new file mode 100644 index 0000000000..a439442c20 --- /dev/null +++ b/animations/step_03_b/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.0" apply false + id("org.jetbrains.kotlin.android") version "1.8.22" apply false +} + +include(":app") diff --git a/animations/step_03_b/linux/CMakeLists.txt b/animations/step_03_b/linux/CMakeLists.txt index 658be85ac5..7caf822271 100644 --- a/animations/step_03_b/linux/CMakeLists.txt +++ b/animations/step_03_b/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/animations/step_03_b/linux/my_application.cc b/animations/step_03_b/linux/my_application.cc deleted file mode 100644 index d6ea0e3c5f..0000000000 --- a/animations/step_03_b/linux/my_application.cc +++ /dev/null @@ -1,124 +0,0 @@ -#include "my_application.h" - -#include -#ifdef GDK_WINDOWING_X11 -#include -#endif - -#include "flutter/generated_plugin_registrant.h" - -struct _MyApplication { - GtkApplication parent_instance; - char** dart_entrypoint_arguments; -}; - -G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) - -// Implements GApplication::activate. -static void my_application_activate(GApplication* application) { - MyApplication* self = MY_APPLICATION(application); - GtkWindow* window = - GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); - - // Use a header bar when running in GNOME as this is the common style used - // by applications and is the setup most users will be using (e.g. Ubuntu - // desktop). - // If running on X and not using GNOME then just use a traditional title bar - // in case the window manager does more exotic layout, e.g. tiling. - // If running on Wayland assume the header bar will work (may need changing - // if future cases occur). - gboolean use_header_bar = TRUE; -#ifdef GDK_WINDOWING_X11 - GdkScreen* screen = gtk_window_get_screen(window); - if (GDK_IS_X11_SCREEN(screen)) { - const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); - if (g_strcmp0(wm_name, "GNOME Shell") != 0) { - use_header_bar = FALSE; - } - } -#endif - if (use_header_bar) { - GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); - gtk_widget_show(GTK_WIDGET(header_bar)); - gtk_header_bar_set_title(header_bar, "quiz"); - gtk_header_bar_set_show_close_button(header_bar, TRUE); - gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); - } else { - gtk_window_set_title(window, "quiz"); - } - - gtk_window_set_default_size(window, 1280, 720); - gtk_widget_show(GTK_WIDGET(window)); - - g_autoptr(FlDartProject) project = fl_dart_project_new(); - fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); - - FlView* view = fl_view_new(project); - gtk_widget_show(GTK_WIDGET(view)); - gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); - - fl_register_plugins(FL_PLUGIN_REGISTRY(view)); - - gtk_widget_grab_focus(GTK_WIDGET(view)); -} - -// Implements GApplication::local_command_line. -static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { - MyApplication* self = MY_APPLICATION(application); - // Strip out the first argument as it is the binary name. - self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); - - g_autoptr(GError) error = nullptr; - if (!g_application_register(application, nullptr, &error)) { - g_warning("Failed to register: %s", error->message); - *exit_status = 1; - return TRUE; - } - - g_application_activate(application); - *exit_status = 0; - - return TRUE; -} - -// Implements GApplication::startup. -static void my_application_startup(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application startup. - - G_APPLICATION_CLASS(my_application_parent_class)->startup(application); -} - -// Implements GApplication::shutdown. -static void my_application_shutdown(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application shutdown. - - G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); -} - -// Implements GObject::dispose. -static void my_application_dispose(GObject* object) { - MyApplication* self = MY_APPLICATION(object); - g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); - G_OBJECT_CLASS(my_application_parent_class)->dispose(object); -} - -static void my_application_class_init(MyApplicationClass* klass) { - G_APPLICATION_CLASS(klass)->activate = my_application_activate; - G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; - G_APPLICATION_CLASS(klass)->startup = my_application_startup; - G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; - G_OBJECT_CLASS(klass)->dispose = my_application_dispose; -} - -static void my_application_init(MyApplication* self) {} - -MyApplication* my_application_new() { - return MY_APPLICATION(g_object_new(my_application_get_type(), - "application-id", APPLICATION_ID, - "flags", G_APPLICATION_NON_UNIQUE, - nullptr)); -} diff --git a/animations/step_03_b/linux/runner/CMakeLists.txt b/animations/step_03_b/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/animations/step_03_b/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/animations/step_03/linux/main.cc b/animations/step_03_b/linux/runner/main.cc similarity index 100% rename from animations/step_03/linux/main.cc rename to animations/step_03_b/linux/runner/main.cc diff --git a/animations/step_03_b/linux/runner/my_application.cc b/animations/step_03_b/linux/runner/my_application.cc new file mode 100644 index 0000000000..0040d7e46c --- /dev/null +++ b/animations/step_03_b/linux/runner/my_application.cc @@ -0,0 +1,130 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "quiz"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "quiz"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/animations/step_03/linux/my_application.h b/animations/step_03_b/linux/runner/my_application.h similarity index 100% rename from animations/step_03/linux/my_application.h rename to animations/step_03_b/linux/runner/my_application.h diff --git a/animations/step_03_b/macos/Runner/AppDelegate.swift b/animations/step_03_b/macos/Runner/AppDelegate.swift index 8e02df2888..b3c1761412 100644 --- a/animations/step_03_b/macos/Runner/AppDelegate.swift +++ b/animations/step_03_b/macos/Runner/AppDelegate.swift @@ -6,4 +6,8 @@ class AppDelegate: FlutterAppDelegate { override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { return true } + + override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { + return true + } } diff --git a/animations/step_03_b/web/index.html b/animations/step_03_b/web/index.html index 89656d9a06..ec05768c59 100644 --- a/animations/step_03_b/web/index.html +++ b/animations/step_03_b/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/animations/step_03_c/.gitignore b/animations/step_03_c/.gitignore index 29a3a5017f..79c113f9b5 100644 --- a/animations/step_03_c/.gitignore +++ b/animations/step_03_c/.gitignore @@ -5,9 +5,11 @@ *.swp .DS_Store .atom/ +.build/ .buildlog/ .history .svn/ +.swiftpm/ migrate_working_dir/ # IntelliJ related diff --git a/animations/step_03_c/android/app/build.gradle b/animations/step_03_c/android/app/build.gradle deleted file mode 100644 index 7c3594ed33..0000000000 --- a/animations/step_03_c/android/app/build.gradle +++ /dev/null @@ -1,44 +0,0 @@ -plugins { - id "com.android.application" - id "kotlin-android" - // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. - id "dev.flutter.flutter-gradle-plugin" -} - -android { - namespace = "com.example.quiz" - compileSdk = flutter.compileSdkVersion - ndkVersion = flutter.ndkVersion - - compileOptions { - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 - } - - kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8 - } - - defaultConfig { - // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). - applicationId = "com.example.quiz" - // You can update the following values to match your application needs. - // For more information, see: https://flutter.dev/to/review-gradle-config. - minSdk = flutter.minSdkVersion - targetSdk = flutter.targetSdkVersion - versionCode = flutter.versionCode - versionName = flutter.versionName - } - - buildTypes { - release { - // TODO: Add your own signing config for the release build. - // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig = signingConfigs.debug - } - } -} - -flutter { - source = "../.." -} diff --git a/animations/step_03_c/android/app/build.gradle.kts b/animations/step_03_c/android/app/build.gradle.kts new file mode 100644 index 0000000000..31d285867f --- /dev/null +++ b/animations/step_03_c/android/app/build.gradle.kts @@ -0,0 +1,44 @@ +plugins { + id("com.android.application") + id("kotlin-android") + // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. + id("dev.flutter.flutter-gradle-plugin") +} + +android { + namespace = "com.example.quiz" + compileSdk = flutter.compileSdkVersion + ndkVersion = flutter.ndkVersion + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 + } + + kotlinOptions { + jvmTarget = JavaVersion.VERSION_1_8.toString() + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId = "com.example.quiz" + // You can update the following values to match your application needs. + // For more information, see: https://flutter.dev/to/review-gradle-config. + minSdk = flutter.minSdkVersion + targetSdk = flutter.targetSdkVersion + versionCode = flutter.versionCode + versionName = flutter.versionName + } + + buildTypes { + release { + // TODO: Add your own signing config for the release build. + // Signing with the debug keys for now, so `flutter run --release` works. + signingConfig = signingConfigs.getByName("debug") + } + } +} + +flutter { + source = "../.." +} diff --git a/animations/step_03_c/android/build.gradle b/animations/step_03_c/android/build.gradle deleted file mode 100644 index d2ffbffa4c..0000000000 --- a/animations/step_03_c/android/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = "../build" -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(":app") -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/animations/step_03_c/android/build.gradle.kts b/animations/step_03_c/android/build.gradle.kts new file mode 100644 index 0000000000..89176ef44e --- /dev/null +++ b/animations/step_03_c/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/animations/step_03_c/android/gradle.properties b/animations/step_03_c/android/gradle.properties index 2597170821..f018a61817 100644 --- a/animations/step_03_c/android/gradle.properties +++ b/animations/step_03_c/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/animations/step_03_c/android/gradle/wrapper/gradle-wrapper.properties b/animations/step_03_c/android/gradle/wrapper/gradle-wrapper.properties index 7bb2df6ba6..afa1e8eb0a 100644 --- a/animations/step_03_c/android/gradle/wrapper/gradle-wrapper.properties +++ b/animations/step_03_c/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip diff --git a/animations/step_03_c/android/settings.gradle b/animations/step_03_c/android/settings.gradle deleted file mode 100644 index b9e43bd376..0000000000 --- a/animations/step_03_c/android/settings.gradle +++ /dev/null @@ -1,25 +0,0 @@ -pluginManagement { - def flutterSdkPath = { - def properties = new Properties() - file("local.properties").withInputStream { properties.load(it) } - def flutterSdkPath = properties.getProperty("flutter.sdk") - assert flutterSdkPath != null, "flutter.sdk not set in local.properties" - return flutterSdkPath - }() - - includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") - - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} - -plugins { - id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.1.0" apply false - id "org.jetbrains.kotlin.android" version "1.8.22" apply false -} - -include ":app" diff --git a/animations/step_03_c/android/settings.gradle.kts b/animations/step_03_c/android/settings.gradle.kts new file mode 100644 index 0000000000..a439442c20 --- /dev/null +++ b/animations/step_03_c/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.0" apply false + id("org.jetbrains.kotlin.android") version "1.8.22" apply false +} + +include(":app") diff --git a/animations/step_03_c/linux/CMakeLists.txt b/animations/step_03_c/linux/CMakeLists.txt index 658be85ac5..7caf822271 100644 --- a/animations/step_03_c/linux/CMakeLists.txt +++ b/animations/step_03_c/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/animations/step_03_c/linux/my_application.cc b/animations/step_03_c/linux/my_application.cc deleted file mode 100644 index d6ea0e3c5f..0000000000 --- a/animations/step_03_c/linux/my_application.cc +++ /dev/null @@ -1,124 +0,0 @@ -#include "my_application.h" - -#include -#ifdef GDK_WINDOWING_X11 -#include -#endif - -#include "flutter/generated_plugin_registrant.h" - -struct _MyApplication { - GtkApplication parent_instance; - char** dart_entrypoint_arguments; -}; - -G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) - -// Implements GApplication::activate. -static void my_application_activate(GApplication* application) { - MyApplication* self = MY_APPLICATION(application); - GtkWindow* window = - GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); - - // Use a header bar when running in GNOME as this is the common style used - // by applications and is the setup most users will be using (e.g. Ubuntu - // desktop). - // If running on X and not using GNOME then just use a traditional title bar - // in case the window manager does more exotic layout, e.g. tiling. - // If running on Wayland assume the header bar will work (may need changing - // if future cases occur). - gboolean use_header_bar = TRUE; -#ifdef GDK_WINDOWING_X11 - GdkScreen* screen = gtk_window_get_screen(window); - if (GDK_IS_X11_SCREEN(screen)) { - const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); - if (g_strcmp0(wm_name, "GNOME Shell") != 0) { - use_header_bar = FALSE; - } - } -#endif - if (use_header_bar) { - GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); - gtk_widget_show(GTK_WIDGET(header_bar)); - gtk_header_bar_set_title(header_bar, "quiz"); - gtk_header_bar_set_show_close_button(header_bar, TRUE); - gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); - } else { - gtk_window_set_title(window, "quiz"); - } - - gtk_window_set_default_size(window, 1280, 720); - gtk_widget_show(GTK_WIDGET(window)); - - g_autoptr(FlDartProject) project = fl_dart_project_new(); - fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); - - FlView* view = fl_view_new(project); - gtk_widget_show(GTK_WIDGET(view)); - gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); - - fl_register_plugins(FL_PLUGIN_REGISTRY(view)); - - gtk_widget_grab_focus(GTK_WIDGET(view)); -} - -// Implements GApplication::local_command_line. -static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { - MyApplication* self = MY_APPLICATION(application); - // Strip out the first argument as it is the binary name. - self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); - - g_autoptr(GError) error = nullptr; - if (!g_application_register(application, nullptr, &error)) { - g_warning("Failed to register: %s", error->message); - *exit_status = 1; - return TRUE; - } - - g_application_activate(application); - *exit_status = 0; - - return TRUE; -} - -// Implements GApplication::startup. -static void my_application_startup(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application startup. - - G_APPLICATION_CLASS(my_application_parent_class)->startup(application); -} - -// Implements GApplication::shutdown. -static void my_application_shutdown(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application shutdown. - - G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); -} - -// Implements GObject::dispose. -static void my_application_dispose(GObject* object) { - MyApplication* self = MY_APPLICATION(object); - g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); - G_OBJECT_CLASS(my_application_parent_class)->dispose(object); -} - -static void my_application_class_init(MyApplicationClass* klass) { - G_APPLICATION_CLASS(klass)->activate = my_application_activate; - G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; - G_APPLICATION_CLASS(klass)->startup = my_application_startup; - G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; - G_OBJECT_CLASS(klass)->dispose = my_application_dispose; -} - -static void my_application_init(MyApplication* self) {} - -MyApplication* my_application_new() { - return MY_APPLICATION(g_object_new(my_application_get_type(), - "application-id", APPLICATION_ID, - "flags", G_APPLICATION_NON_UNIQUE, - nullptr)); -} diff --git a/animations/step_03_c/linux/runner/CMakeLists.txt b/animations/step_03_c/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/animations/step_03_c/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/animations/step_03_a/linux/main.cc b/animations/step_03_c/linux/runner/main.cc similarity index 100% rename from animations/step_03_a/linux/main.cc rename to animations/step_03_c/linux/runner/main.cc diff --git a/animations/step_03_c/linux/runner/my_application.cc b/animations/step_03_c/linux/runner/my_application.cc new file mode 100644 index 0000000000..0040d7e46c --- /dev/null +++ b/animations/step_03_c/linux/runner/my_application.cc @@ -0,0 +1,130 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "quiz"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "quiz"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/animations/step_03_a/linux/my_application.h b/animations/step_03_c/linux/runner/my_application.h similarity index 100% rename from animations/step_03_a/linux/my_application.h rename to animations/step_03_c/linux/runner/my_application.h diff --git a/animations/step_03_c/macos/Runner/AppDelegate.swift b/animations/step_03_c/macos/Runner/AppDelegate.swift index 8e02df2888..b3c1761412 100644 --- a/animations/step_03_c/macos/Runner/AppDelegate.swift +++ b/animations/step_03_c/macos/Runner/AppDelegate.swift @@ -6,4 +6,8 @@ class AppDelegate: FlutterAppDelegate { override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { return true } + + override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { + return true + } } diff --git a/animations/step_03_c/web/index.html b/animations/step_03_c/web/index.html index 89656d9a06..ec05768c59 100644 --- a/animations/step_03_c/web/index.html +++ b/animations/step_03_c/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/animations/step_03_d/.gitignore b/animations/step_03_d/.gitignore index 29a3a5017f..79c113f9b5 100644 --- a/animations/step_03_d/.gitignore +++ b/animations/step_03_d/.gitignore @@ -5,9 +5,11 @@ *.swp .DS_Store .atom/ +.build/ .buildlog/ .history .svn/ +.swiftpm/ migrate_working_dir/ # IntelliJ related diff --git a/animations/step_03_d/android/app/build.gradle b/animations/step_03_d/android/app/build.gradle deleted file mode 100644 index 7c3594ed33..0000000000 --- a/animations/step_03_d/android/app/build.gradle +++ /dev/null @@ -1,44 +0,0 @@ -plugins { - id "com.android.application" - id "kotlin-android" - // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. - id "dev.flutter.flutter-gradle-plugin" -} - -android { - namespace = "com.example.quiz" - compileSdk = flutter.compileSdkVersion - ndkVersion = flutter.ndkVersion - - compileOptions { - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 - } - - kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8 - } - - defaultConfig { - // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). - applicationId = "com.example.quiz" - // You can update the following values to match your application needs. - // For more information, see: https://flutter.dev/to/review-gradle-config. - minSdk = flutter.minSdkVersion - targetSdk = flutter.targetSdkVersion - versionCode = flutter.versionCode - versionName = flutter.versionName - } - - buildTypes { - release { - // TODO: Add your own signing config for the release build. - // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig = signingConfigs.debug - } - } -} - -flutter { - source = "../.." -} diff --git a/animations/step_03_d/android/app/build.gradle.kts b/animations/step_03_d/android/app/build.gradle.kts new file mode 100644 index 0000000000..31d285867f --- /dev/null +++ b/animations/step_03_d/android/app/build.gradle.kts @@ -0,0 +1,44 @@ +plugins { + id("com.android.application") + id("kotlin-android") + // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. + id("dev.flutter.flutter-gradle-plugin") +} + +android { + namespace = "com.example.quiz" + compileSdk = flutter.compileSdkVersion + ndkVersion = flutter.ndkVersion + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 + } + + kotlinOptions { + jvmTarget = JavaVersion.VERSION_1_8.toString() + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId = "com.example.quiz" + // You can update the following values to match your application needs. + // For more information, see: https://flutter.dev/to/review-gradle-config. + minSdk = flutter.minSdkVersion + targetSdk = flutter.targetSdkVersion + versionCode = flutter.versionCode + versionName = flutter.versionName + } + + buildTypes { + release { + // TODO: Add your own signing config for the release build. + // Signing with the debug keys for now, so `flutter run --release` works. + signingConfig = signingConfigs.getByName("debug") + } + } +} + +flutter { + source = "../.." +} diff --git a/animations/step_03_d/android/build.gradle b/animations/step_03_d/android/build.gradle deleted file mode 100644 index d2ffbffa4c..0000000000 --- a/animations/step_03_d/android/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = "../build" -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(":app") -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/animations/step_03_d/android/build.gradle.kts b/animations/step_03_d/android/build.gradle.kts new file mode 100644 index 0000000000..89176ef44e --- /dev/null +++ b/animations/step_03_d/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/animations/step_03_d/android/gradle.properties b/animations/step_03_d/android/gradle.properties index 2597170821..f018a61817 100644 --- a/animations/step_03_d/android/gradle.properties +++ b/animations/step_03_d/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/animations/step_03_d/android/gradle/wrapper/gradle-wrapper.properties b/animations/step_03_d/android/gradle/wrapper/gradle-wrapper.properties index 7bb2df6ba6..afa1e8eb0a 100644 --- a/animations/step_03_d/android/gradle/wrapper/gradle-wrapper.properties +++ b/animations/step_03_d/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip diff --git a/animations/step_03_d/android/settings.gradle b/animations/step_03_d/android/settings.gradle deleted file mode 100644 index b9e43bd376..0000000000 --- a/animations/step_03_d/android/settings.gradle +++ /dev/null @@ -1,25 +0,0 @@ -pluginManagement { - def flutterSdkPath = { - def properties = new Properties() - file("local.properties").withInputStream { properties.load(it) } - def flutterSdkPath = properties.getProperty("flutter.sdk") - assert flutterSdkPath != null, "flutter.sdk not set in local.properties" - return flutterSdkPath - }() - - includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") - - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} - -plugins { - id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.1.0" apply false - id "org.jetbrains.kotlin.android" version "1.8.22" apply false -} - -include ":app" diff --git a/animations/step_03_d/android/settings.gradle.kts b/animations/step_03_d/android/settings.gradle.kts new file mode 100644 index 0000000000..a439442c20 --- /dev/null +++ b/animations/step_03_d/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.0" apply false + id("org.jetbrains.kotlin.android") version "1.8.22" apply false +} + +include(":app") diff --git a/animations/step_03_d/linux/CMakeLists.txt b/animations/step_03_d/linux/CMakeLists.txt index 658be85ac5..7caf822271 100644 --- a/animations/step_03_d/linux/CMakeLists.txt +++ b/animations/step_03_d/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/animations/step_03_d/linux/my_application.cc b/animations/step_03_d/linux/my_application.cc deleted file mode 100644 index d6ea0e3c5f..0000000000 --- a/animations/step_03_d/linux/my_application.cc +++ /dev/null @@ -1,124 +0,0 @@ -#include "my_application.h" - -#include -#ifdef GDK_WINDOWING_X11 -#include -#endif - -#include "flutter/generated_plugin_registrant.h" - -struct _MyApplication { - GtkApplication parent_instance; - char** dart_entrypoint_arguments; -}; - -G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) - -// Implements GApplication::activate. -static void my_application_activate(GApplication* application) { - MyApplication* self = MY_APPLICATION(application); - GtkWindow* window = - GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); - - // Use a header bar when running in GNOME as this is the common style used - // by applications and is the setup most users will be using (e.g. Ubuntu - // desktop). - // If running on X and not using GNOME then just use a traditional title bar - // in case the window manager does more exotic layout, e.g. tiling. - // If running on Wayland assume the header bar will work (may need changing - // if future cases occur). - gboolean use_header_bar = TRUE; -#ifdef GDK_WINDOWING_X11 - GdkScreen* screen = gtk_window_get_screen(window); - if (GDK_IS_X11_SCREEN(screen)) { - const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); - if (g_strcmp0(wm_name, "GNOME Shell") != 0) { - use_header_bar = FALSE; - } - } -#endif - if (use_header_bar) { - GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); - gtk_widget_show(GTK_WIDGET(header_bar)); - gtk_header_bar_set_title(header_bar, "quiz"); - gtk_header_bar_set_show_close_button(header_bar, TRUE); - gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); - } else { - gtk_window_set_title(window, "quiz"); - } - - gtk_window_set_default_size(window, 1280, 720); - gtk_widget_show(GTK_WIDGET(window)); - - g_autoptr(FlDartProject) project = fl_dart_project_new(); - fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); - - FlView* view = fl_view_new(project); - gtk_widget_show(GTK_WIDGET(view)); - gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); - - fl_register_plugins(FL_PLUGIN_REGISTRY(view)); - - gtk_widget_grab_focus(GTK_WIDGET(view)); -} - -// Implements GApplication::local_command_line. -static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { - MyApplication* self = MY_APPLICATION(application); - // Strip out the first argument as it is the binary name. - self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); - - g_autoptr(GError) error = nullptr; - if (!g_application_register(application, nullptr, &error)) { - g_warning("Failed to register: %s", error->message); - *exit_status = 1; - return TRUE; - } - - g_application_activate(application); - *exit_status = 0; - - return TRUE; -} - -// Implements GApplication::startup. -static void my_application_startup(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application startup. - - G_APPLICATION_CLASS(my_application_parent_class)->startup(application); -} - -// Implements GApplication::shutdown. -static void my_application_shutdown(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application shutdown. - - G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); -} - -// Implements GObject::dispose. -static void my_application_dispose(GObject* object) { - MyApplication* self = MY_APPLICATION(object); - g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); - G_OBJECT_CLASS(my_application_parent_class)->dispose(object); -} - -static void my_application_class_init(MyApplicationClass* klass) { - G_APPLICATION_CLASS(klass)->activate = my_application_activate; - G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; - G_APPLICATION_CLASS(klass)->startup = my_application_startup; - G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; - G_OBJECT_CLASS(klass)->dispose = my_application_dispose; -} - -static void my_application_init(MyApplication* self) {} - -MyApplication* my_application_new() { - return MY_APPLICATION(g_object_new(my_application_get_type(), - "application-id", APPLICATION_ID, - "flags", G_APPLICATION_NON_UNIQUE, - nullptr)); -} diff --git a/animations/step_03_d/linux/runner/CMakeLists.txt b/animations/step_03_d/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/animations/step_03_d/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/animations/step_03_b/linux/main.cc b/animations/step_03_d/linux/runner/main.cc similarity index 100% rename from animations/step_03_b/linux/main.cc rename to animations/step_03_d/linux/runner/main.cc diff --git a/animations/step_03_d/linux/runner/my_application.cc b/animations/step_03_d/linux/runner/my_application.cc new file mode 100644 index 0000000000..0040d7e46c --- /dev/null +++ b/animations/step_03_d/linux/runner/my_application.cc @@ -0,0 +1,130 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "quiz"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "quiz"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/animations/step_03_b/linux/my_application.h b/animations/step_03_d/linux/runner/my_application.h similarity index 100% rename from animations/step_03_b/linux/my_application.h rename to animations/step_03_d/linux/runner/my_application.h diff --git a/animations/step_03_d/macos/Runner/AppDelegate.swift b/animations/step_03_d/macos/Runner/AppDelegate.swift index 8e02df2888..b3c1761412 100644 --- a/animations/step_03_d/macos/Runner/AppDelegate.swift +++ b/animations/step_03_d/macos/Runner/AppDelegate.swift @@ -6,4 +6,8 @@ class AppDelegate: FlutterAppDelegate { override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { return true } + + override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { + return true + } } diff --git a/animations/step_03_d/web/index.html b/animations/step_03_d/web/index.html index 89656d9a06..ec05768c59 100644 --- a/animations/step_03_d/web/index.html +++ b/animations/step_03_d/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/animations/step_04/android/app/build.gradle b/animations/step_04/android/app/build.gradle deleted file mode 100644 index 7c3594ed33..0000000000 --- a/animations/step_04/android/app/build.gradle +++ /dev/null @@ -1,44 +0,0 @@ -plugins { - id "com.android.application" - id "kotlin-android" - // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. - id "dev.flutter.flutter-gradle-plugin" -} - -android { - namespace = "com.example.quiz" - compileSdk = flutter.compileSdkVersion - ndkVersion = flutter.ndkVersion - - compileOptions { - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 - } - - kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8 - } - - defaultConfig { - // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). - applicationId = "com.example.quiz" - // You can update the following values to match your application needs. - // For more information, see: https://flutter.dev/to/review-gradle-config. - minSdk = flutter.minSdkVersion - targetSdk = flutter.targetSdkVersion - versionCode = flutter.versionCode - versionName = flutter.versionName - } - - buildTypes { - release { - // TODO: Add your own signing config for the release build. - // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig = signingConfigs.debug - } - } -} - -flutter { - source = "../.." -} diff --git a/animations/step_04/android/app/build.gradle.kts b/animations/step_04/android/app/build.gradle.kts new file mode 100644 index 0000000000..31d285867f --- /dev/null +++ b/animations/step_04/android/app/build.gradle.kts @@ -0,0 +1,44 @@ +plugins { + id("com.android.application") + id("kotlin-android") + // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. + id("dev.flutter.flutter-gradle-plugin") +} + +android { + namespace = "com.example.quiz" + compileSdk = flutter.compileSdkVersion + ndkVersion = flutter.ndkVersion + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 + } + + kotlinOptions { + jvmTarget = JavaVersion.VERSION_1_8.toString() + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId = "com.example.quiz" + // You can update the following values to match your application needs. + // For more information, see: https://flutter.dev/to/review-gradle-config. + minSdk = flutter.minSdkVersion + targetSdk = flutter.targetSdkVersion + versionCode = flutter.versionCode + versionName = flutter.versionName + } + + buildTypes { + release { + // TODO: Add your own signing config for the release build. + // Signing with the debug keys for now, so `flutter run --release` works. + signingConfig = signingConfigs.getByName("debug") + } + } +} + +flutter { + source = "../.." +} diff --git a/animations/step_04/android/build.gradle b/animations/step_04/android/build.gradle deleted file mode 100644 index d2ffbffa4c..0000000000 --- a/animations/step_04/android/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = "../build" -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(":app") -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/animations/step_04/android/build.gradle.kts b/animations/step_04/android/build.gradle.kts new file mode 100644 index 0000000000..89176ef44e --- /dev/null +++ b/animations/step_04/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/animations/step_04/android/gradle.properties b/animations/step_04/android/gradle.properties index 2597170821..f018a61817 100644 --- a/animations/step_04/android/gradle.properties +++ b/animations/step_04/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/animations/step_04/android/gradle/wrapper/gradle-wrapper.properties b/animations/step_04/android/gradle/wrapper/gradle-wrapper.properties index 7bb2df6ba6..afa1e8eb0a 100644 --- a/animations/step_04/android/gradle/wrapper/gradle-wrapper.properties +++ b/animations/step_04/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip diff --git a/animations/step_04/android/settings.gradle b/animations/step_04/android/settings.gradle deleted file mode 100644 index b9e43bd376..0000000000 --- a/animations/step_04/android/settings.gradle +++ /dev/null @@ -1,25 +0,0 @@ -pluginManagement { - def flutterSdkPath = { - def properties = new Properties() - file("local.properties").withInputStream { properties.load(it) } - def flutterSdkPath = properties.getProperty("flutter.sdk") - assert flutterSdkPath != null, "flutter.sdk not set in local.properties" - return flutterSdkPath - }() - - includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") - - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} - -plugins { - id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.1.0" apply false - id "org.jetbrains.kotlin.android" version "1.8.22" apply false -} - -include ":app" diff --git a/animations/step_04/android/settings.gradle.kts b/animations/step_04/android/settings.gradle.kts new file mode 100644 index 0000000000..a439442c20 --- /dev/null +++ b/animations/step_04/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.0" apply false + id("org.jetbrains.kotlin.android") version "1.8.22" apply false +} + +include(":app") diff --git a/animations/step_04/linux/my_application.cc b/animations/step_04/linux/my_application.cc deleted file mode 100644 index d6ea0e3c5f..0000000000 --- a/animations/step_04/linux/my_application.cc +++ /dev/null @@ -1,124 +0,0 @@ -#include "my_application.h" - -#include -#ifdef GDK_WINDOWING_X11 -#include -#endif - -#include "flutter/generated_plugin_registrant.h" - -struct _MyApplication { - GtkApplication parent_instance; - char** dart_entrypoint_arguments; -}; - -G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) - -// Implements GApplication::activate. -static void my_application_activate(GApplication* application) { - MyApplication* self = MY_APPLICATION(application); - GtkWindow* window = - GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); - - // Use a header bar when running in GNOME as this is the common style used - // by applications and is the setup most users will be using (e.g. Ubuntu - // desktop). - // If running on X and not using GNOME then just use a traditional title bar - // in case the window manager does more exotic layout, e.g. tiling. - // If running on Wayland assume the header bar will work (may need changing - // if future cases occur). - gboolean use_header_bar = TRUE; -#ifdef GDK_WINDOWING_X11 - GdkScreen* screen = gtk_window_get_screen(window); - if (GDK_IS_X11_SCREEN(screen)) { - const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); - if (g_strcmp0(wm_name, "GNOME Shell") != 0) { - use_header_bar = FALSE; - } - } -#endif - if (use_header_bar) { - GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); - gtk_widget_show(GTK_WIDGET(header_bar)); - gtk_header_bar_set_title(header_bar, "quiz"); - gtk_header_bar_set_show_close_button(header_bar, TRUE); - gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); - } else { - gtk_window_set_title(window, "quiz"); - } - - gtk_window_set_default_size(window, 1280, 720); - gtk_widget_show(GTK_WIDGET(window)); - - g_autoptr(FlDartProject) project = fl_dart_project_new(); - fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); - - FlView* view = fl_view_new(project); - gtk_widget_show(GTK_WIDGET(view)); - gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); - - fl_register_plugins(FL_PLUGIN_REGISTRY(view)); - - gtk_widget_grab_focus(GTK_WIDGET(view)); -} - -// Implements GApplication::local_command_line. -static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { - MyApplication* self = MY_APPLICATION(application); - // Strip out the first argument as it is the binary name. - self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); - - g_autoptr(GError) error = nullptr; - if (!g_application_register(application, nullptr, &error)) { - g_warning("Failed to register: %s", error->message); - *exit_status = 1; - return TRUE; - } - - g_application_activate(application); - *exit_status = 0; - - return TRUE; -} - -// Implements GApplication::startup. -static void my_application_startup(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application startup. - - G_APPLICATION_CLASS(my_application_parent_class)->startup(application); -} - -// Implements GApplication::shutdown. -static void my_application_shutdown(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application shutdown. - - G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); -} - -// Implements GObject::dispose. -static void my_application_dispose(GObject* object) { - MyApplication* self = MY_APPLICATION(object); - g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); - G_OBJECT_CLASS(my_application_parent_class)->dispose(object); -} - -static void my_application_class_init(MyApplicationClass* klass) { - G_APPLICATION_CLASS(klass)->activate = my_application_activate; - G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; - G_APPLICATION_CLASS(klass)->startup = my_application_startup; - G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; - G_OBJECT_CLASS(klass)->dispose = my_application_dispose; -} - -static void my_application_init(MyApplication* self) {} - -MyApplication* my_application_new() { - return MY_APPLICATION(g_object_new(my_application_get_type(), - "application-id", APPLICATION_ID, - "flags", G_APPLICATION_NON_UNIQUE, - nullptr)); -} diff --git a/animations/step_04_a/.gitignore b/animations/step_04_a/.gitignore index 29a3a5017f..79c113f9b5 100644 --- a/animations/step_04_a/.gitignore +++ b/animations/step_04_a/.gitignore @@ -5,9 +5,11 @@ *.swp .DS_Store .atom/ +.build/ .buildlog/ .history .svn/ +.swiftpm/ migrate_working_dir/ # IntelliJ related diff --git a/animations/step_04_a/android/app/build.gradle b/animations/step_04_a/android/app/build.gradle deleted file mode 100644 index 7c3594ed33..0000000000 --- a/animations/step_04_a/android/app/build.gradle +++ /dev/null @@ -1,44 +0,0 @@ -plugins { - id "com.android.application" - id "kotlin-android" - // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. - id "dev.flutter.flutter-gradle-plugin" -} - -android { - namespace = "com.example.quiz" - compileSdk = flutter.compileSdkVersion - ndkVersion = flutter.ndkVersion - - compileOptions { - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 - } - - kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8 - } - - defaultConfig { - // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). - applicationId = "com.example.quiz" - // You can update the following values to match your application needs. - // For more information, see: https://flutter.dev/to/review-gradle-config. - minSdk = flutter.minSdkVersion - targetSdk = flutter.targetSdkVersion - versionCode = flutter.versionCode - versionName = flutter.versionName - } - - buildTypes { - release { - // TODO: Add your own signing config for the release build. - // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig = signingConfigs.debug - } - } -} - -flutter { - source = "../.." -} diff --git a/animations/step_04_a/android/app/build.gradle.kts b/animations/step_04_a/android/app/build.gradle.kts new file mode 100644 index 0000000000..31d285867f --- /dev/null +++ b/animations/step_04_a/android/app/build.gradle.kts @@ -0,0 +1,44 @@ +plugins { + id("com.android.application") + id("kotlin-android") + // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. + id("dev.flutter.flutter-gradle-plugin") +} + +android { + namespace = "com.example.quiz" + compileSdk = flutter.compileSdkVersion + ndkVersion = flutter.ndkVersion + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 + } + + kotlinOptions { + jvmTarget = JavaVersion.VERSION_1_8.toString() + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId = "com.example.quiz" + // You can update the following values to match your application needs. + // For more information, see: https://flutter.dev/to/review-gradle-config. + minSdk = flutter.minSdkVersion + targetSdk = flutter.targetSdkVersion + versionCode = flutter.versionCode + versionName = flutter.versionName + } + + buildTypes { + release { + // TODO: Add your own signing config for the release build. + // Signing with the debug keys for now, so `flutter run --release` works. + signingConfig = signingConfigs.getByName("debug") + } + } +} + +flutter { + source = "../.." +} diff --git a/animations/step_04_a/android/build.gradle b/animations/step_04_a/android/build.gradle deleted file mode 100644 index d2ffbffa4c..0000000000 --- a/animations/step_04_a/android/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = "../build" -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(":app") -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/animations/step_04_a/android/build.gradle.kts b/animations/step_04_a/android/build.gradle.kts new file mode 100644 index 0000000000..89176ef44e --- /dev/null +++ b/animations/step_04_a/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/animations/step_04_a/android/gradle.properties b/animations/step_04_a/android/gradle.properties index 2597170821..f018a61817 100644 --- a/animations/step_04_a/android/gradle.properties +++ b/animations/step_04_a/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/animations/step_04_a/android/gradle/wrapper/gradle-wrapper.properties b/animations/step_04_a/android/gradle/wrapper/gradle-wrapper.properties index 7bb2df6ba6..afa1e8eb0a 100644 --- a/animations/step_04_a/android/gradle/wrapper/gradle-wrapper.properties +++ b/animations/step_04_a/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip diff --git a/animations/step_04_a/android/settings.gradle b/animations/step_04_a/android/settings.gradle deleted file mode 100644 index b9e43bd376..0000000000 --- a/animations/step_04_a/android/settings.gradle +++ /dev/null @@ -1,25 +0,0 @@ -pluginManagement { - def flutterSdkPath = { - def properties = new Properties() - file("local.properties").withInputStream { properties.load(it) } - def flutterSdkPath = properties.getProperty("flutter.sdk") - assert flutterSdkPath != null, "flutter.sdk not set in local.properties" - return flutterSdkPath - }() - - includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") - - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} - -plugins { - id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.1.0" apply false - id "org.jetbrains.kotlin.android" version "1.8.22" apply false -} - -include ":app" diff --git a/animations/step_04_a/android/settings.gradle.kts b/animations/step_04_a/android/settings.gradle.kts new file mode 100644 index 0000000000..a439442c20 --- /dev/null +++ b/animations/step_04_a/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.0" apply false + id("org.jetbrains.kotlin.android") version "1.8.22" apply false +} + +include(":app") diff --git a/animations/step_04_a/linux/CMakeLists.txt b/animations/step_04_a/linux/CMakeLists.txt index 658be85ac5..7caf822271 100644 --- a/animations/step_04_a/linux/CMakeLists.txt +++ b/animations/step_04_a/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/animations/step_04_a/linux/my_application.cc b/animations/step_04_a/linux/my_application.cc deleted file mode 100644 index d6ea0e3c5f..0000000000 --- a/animations/step_04_a/linux/my_application.cc +++ /dev/null @@ -1,124 +0,0 @@ -#include "my_application.h" - -#include -#ifdef GDK_WINDOWING_X11 -#include -#endif - -#include "flutter/generated_plugin_registrant.h" - -struct _MyApplication { - GtkApplication parent_instance; - char** dart_entrypoint_arguments; -}; - -G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) - -// Implements GApplication::activate. -static void my_application_activate(GApplication* application) { - MyApplication* self = MY_APPLICATION(application); - GtkWindow* window = - GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); - - // Use a header bar when running in GNOME as this is the common style used - // by applications and is the setup most users will be using (e.g. Ubuntu - // desktop). - // If running on X and not using GNOME then just use a traditional title bar - // in case the window manager does more exotic layout, e.g. tiling. - // If running on Wayland assume the header bar will work (may need changing - // if future cases occur). - gboolean use_header_bar = TRUE; -#ifdef GDK_WINDOWING_X11 - GdkScreen* screen = gtk_window_get_screen(window); - if (GDK_IS_X11_SCREEN(screen)) { - const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); - if (g_strcmp0(wm_name, "GNOME Shell") != 0) { - use_header_bar = FALSE; - } - } -#endif - if (use_header_bar) { - GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); - gtk_widget_show(GTK_WIDGET(header_bar)); - gtk_header_bar_set_title(header_bar, "quiz"); - gtk_header_bar_set_show_close_button(header_bar, TRUE); - gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); - } else { - gtk_window_set_title(window, "quiz"); - } - - gtk_window_set_default_size(window, 1280, 720); - gtk_widget_show(GTK_WIDGET(window)); - - g_autoptr(FlDartProject) project = fl_dart_project_new(); - fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); - - FlView* view = fl_view_new(project); - gtk_widget_show(GTK_WIDGET(view)); - gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); - - fl_register_plugins(FL_PLUGIN_REGISTRY(view)); - - gtk_widget_grab_focus(GTK_WIDGET(view)); -} - -// Implements GApplication::local_command_line. -static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { - MyApplication* self = MY_APPLICATION(application); - // Strip out the first argument as it is the binary name. - self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); - - g_autoptr(GError) error = nullptr; - if (!g_application_register(application, nullptr, &error)) { - g_warning("Failed to register: %s", error->message); - *exit_status = 1; - return TRUE; - } - - g_application_activate(application); - *exit_status = 0; - - return TRUE; -} - -// Implements GApplication::startup. -static void my_application_startup(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application startup. - - G_APPLICATION_CLASS(my_application_parent_class)->startup(application); -} - -// Implements GApplication::shutdown. -static void my_application_shutdown(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application shutdown. - - G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); -} - -// Implements GObject::dispose. -static void my_application_dispose(GObject* object) { - MyApplication* self = MY_APPLICATION(object); - g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); - G_OBJECT_CLASS(my_application_parent_class)->dispose(object); -} - -static void my_application_class_init(MyApplicationClass* klass) { - G_APPLICATION_CLASS(klass)->activate = my_application_activate; - G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; - G_APPLICATION_CLASS(klass)->startup = my_application_startup; - G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; - G_OBJECT_CLASS(klass)->dispose = my_application_dispose; -} - -static void my_application_init(MyApplication* self) {} - -MyApplication* my_application_new() { - return MY_APPLICATION(g_object_new(my_application_get_type(), - "application-id", APPLICATION_ID, - "flags", G_APPLICATION_NON_UNIQUE, - nullptr)); -} diff --git a/animations/step_04_a/linux/runner/CMakeLists.txt b/animations/step_04_a/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/animations/step_04_a/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/animations/step_03_c/linux/main.cc b/animations/step_04_a/linux/runner/main.cc similarity index 100% rename from animations/step_03_c/linux/main.cc rename to animations/step_04_a/linux/runner/main.cc diff --git a/animations/step_04_a/linux/runner/my_application.cc b/animations/step_04_a/linux/runner/my_application.cc new file mode 100644 index 0000000000..0040d7e46c --- /dev/null +++ b/animations/step_04_a/linux/runner/my_application.cc @@ -0,0 +1,130 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "quiz"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "quiz"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/animations/step_03_c/linux/my_application.h b/animations/step_04_a/linux/runner/my_application.h similarity index 100% rename from animations/step_03_c/linux/my_application.h rename to animations/step_04_a/linux/runner/my_application.h diff --git a/animations/step_04_a/macos/Runner/AppDelegate.swift b/animations/step_04_a/macos/Runner/AppDelegate.swift index 8e02df2888..b3c1761412 100644 --- a/animations/step_04_a/macos/Runner/AppDelegate.swift +++ b/animations/step_04_a/macos/Runner/AppDelegate.swift @@ -6,4 +6,8 @@ class AppDelegate: FlutterAppDelegate { override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { return true } + + override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { + return true + } } diff --git a/animations/step_04_a/web/index.html b/animations/step_04_a/web/index.html index 89656d9a06..ec05768c59 100644 --- a/animations/step_04_a/web/index.html +++ b/animations/step_04_a/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/animations/step_04_b/.gitignore b/animations/step_04_b/.gitignore index 29a3a5017f..79c113f9b5 100644 --- a/animations/step_04_b/.gitignore +++ b/animations/step_04_b/.gitignore @@ -5,9 +5,11 @@ *.swp .DS_Store .atom/ +.build/ .buildlog/ .history .svn/ +.swiftpm/ migrate_working_dir/ # IntelliJ related diff --git a/animations/step_04_b/android/app/build.gradle b/animations/step_04_b/android/app/build.gradle deleted file mode 100644 index 7c3594ed33..0000000000 --- a/animations/step_04_b/android/app/build.gradle +++ /dev/null @@ -1,44 +0,0 @@ -plugins { - id "com.android.application" - id "kotlin-android" - // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. - id "dev.flutter.flutter-gradle-plugin" -} - -android { - namespace = "com.example.quiz" - compileSdk = flutter.compileSdkVersion - ndkVersion = flutter.ndkVersion - - compileOptions { - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 - } - - kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8 - } - - defaultConfig { - // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). - applicationId = "com.example.quiz" - // You can update the following values to match your application needs. - // For more information, see: https://flutter.dev/to/review-gradle-config. - minSdk = flutter.minSdkVersion - targetSdk = flutter.targetSdkVersion - versionCode = flutter.versionCode - versionName = flutter.versionName - } - - buildTypes { - release { - // TODO: Add your own signing config for the release build. - // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig = signingConfigs.debug - } - } -} - -flutter { - source = "../.." -} diff --git a/animations/step_04_b/android/app/build.gradle.kts b/animations/step_04_b/android/app/build.gradle.kts new file mode 100644 index 0000000000..31d285867f --- /dev/null +++ b/animations/step_04_b/android/app/build.gradle.kts @@ -0,0 +1,44 @@ +plugins { + id("com.android.application") + id("kotlin-android") + // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. + id("dev.flutter.flutter-gradle-plugin") +} + +android { + namespace = "com.example.quiz" + compileSdk = flutter.compileSdkVersion + ndkVersion = flutter.ndkVersion + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 + } + + kotlinOptions { + jvmTarget = JavaVersion.VERSION_1_8.toString() + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId = "com.example.quiz" + // You can update the following values to match your application needs. + // For more information, see: https://flutter.dev/to/review-gradle-config. + minSdk = flutter.minSdkVersion + targetSdk = flutter.targetSdkVersion + versionCode = flutter.versionCode + versionName = flutter.versionName + } + + buildTypes { + release { + // TODO: Add your own signing config for the release build. + // Signing with the debug keys for now, so `flutter run --release` works. + signingConfig = signingConfigs.getByName("debug") + } + } +} + +flutter { + source = "../.." +} diff --git a/animations/step_04_b/android/build.gradle b/animations/step_04_b/android/build.gradle deleted file mode 100644 index d2ffbffa4c..0000000000 --- a/animations/step_04_b/android/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = "../build" -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(":app") -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/animations/step_04_b/android/build.gradle.kts b/animations/step_04_b/android/build.gradle.kts new file mode 100644 index 0000000000..89176ef44e --- /dev/null +++ b/animations/step_04_b/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/animations/step_04_b/android/gradle.properties b/animations/step_04_b/android/gradle.properties index 2597170821..f018a61817 100644 --- a/animations/step_04_b/android/gradle.properties +++ b/animations/step_04_b/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/animations/step_04_b/android/gradle/wrapper/gradle-wrapper.properties b/animations/step_04_b/android/gradle/wrapper/gradle-wrapper.properties index 7bb2df6ba6..afa1e8eb0a 100644 --- a/animations/step_04_b/android/gradle/wrapper/gradle-wrapper.properties +++ b/animations/step_04_b/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip diff --git a/animations/step_04_b/android/settings.gradle b/animations/step_04_b/android/settings.gradle deleted file mode 100644 index b9e43bd376..0000000000 --- a/animations/step_04_b/android/settings.gradle +++ /dev/null @@ -1,25 +0,0 @@ -pluginManagement { - def flutterSdkPath = { - def properties = new Properties() - file("local.properties").withInputStream { properties.load(it) } - def flutterSdkPath = properties.getProperty("flutter.sdk") - assert flutterSdkPath != null, "flutter.sdk not set in local.properties" - return flutterSdkPath - }() - - includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") - - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} - -plugins { - id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.1.0" apply false - id "org.jetbrains.kotlin.android" version "1.8.22" apply false -} - -include ":app" diff --git a/animations/step_04_b/android/settings.gradle.kts b/animations/step_04_b/android/settings.gradle.kts new file mode 100644 index 0000000000..a439442c20 --- /dev/null +++ b/animations/step_04_b/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.0" apply false + id("org.jetbrains.kotlin.android") version "1.8.22" apply false +} + +include(":app") diff --git a/animations/step_04_b/linux/CMakeLists.txt b/animations/step_04_b/linux/CMakeLists.txt index 658be85ac5..7caf822271 100644 --- a/animations/step_04_b/linux/CMakeLists.txt +++ b/animations/step_04_b/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/animations/step_04_b/linux/main.cc b/animations/step_04_b/linux/main.cc deleted file mode 100644 index e7c5c54370..0000000000 --- a/animations/step_04_b/linux/main.cc +++ /dev/null @@ -1,6 +0,0 @@ -#include "my_application.h" - -int main(int argc, char** argv) { - g_autoptr(MyApplication) app = my_application_new(); - return g_application_run(G_APPLICATION(app), argc, argv); -} diff --git a/animations/step_04_b/linux/my_application.cc b/animations/step_04_b/linux/my_application.cc deleted file mode 100644 index d6ea0e3c5f..0000000000 --- a/animations/step_04_b/linux/my_application.cc +++ /dev/null @@ -1,124 +0,0 @@ -#include "my_application.h" - -#include -#ifdef GDK_WINDOWING_X11 -#include -#endif - -#include "flutter/generated_plugin_registrant.h" - -struct _MyApplication { - GtkApplication parent_instance; - char** dart_entrypoint_arguments; -}; - -G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) - -// Implements GApplication::activate. -static void my_application_activate(GApplication* application) { - MyApplication* self = MY_APPLICATION(application); - GtkWindow* window = - GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); - - // Use a header bar when running in GNOME as this is the common style used - // by applications and is the setup most users will be using (e.g. Ubuntu - // desktop). - // If running on X and not using GNOME then just use a traditional title bar - // in case the window manager does more exotic layout, e.g. tiling. - // If running on Wayland assume the header bar will work (may need changing - // if future cases occur). - gboolean use_header_bar = TRUE; -#ifdef GDK_WINDOWING_X11 - GdkScreen* screen = gtk_window_get_screen(window); - if (GDK_IS_X11_SCREEN(screen)) { - const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); - if (g_strcmp0(wm_name, "GNOME Shell") != 0) { - use_header_bar = FALSE; - } - } -#endif - if (use_header_bar) { - GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); - gtk_widget_show(GTK_WIDGET(header_bar)); - gtk_header_bar_set_title(header_bar, "quiz"); - gtk_header_bar_set_show_close_button(header_bar, TRUE); - gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); - } else { - gtk_window_set_title(window, "quiz"); - } - - gtk_window_set_default_size(window, 1280, 720); - gtk_widget_show(GTK_WIDGET(window)); - - g_autoptr(FlDartProject) project = fl_dart_project_new(); - fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); - - FlView* view = fl_view_new(project); - gtk_widget_show(GTK_WIDGET(view)); - gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); - - fl_register_plugins(FL_PLUGIN_REGISTRY(view)); - - gtk_widget_grab_focus(GTK_WIDGET(view)); -} - -// Implements GApplication::local_command_line. -static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { - MyApplication* self = MY_APPLICATION(application); - // Strip out the first argument as it is the binary name. - self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); - - g_autoptr(GError) error = nullptr; - if (!g_application_register(application, nullptr, &error)) { - g_warning("Failed to register: %s", error->message); - *exit_status = 1; - return TRUE; - } - - g_application_activate(application); - *exit_status = 0; - - return TRUE; -} - -// Implements GApplication::startup. -static void my_application_startup(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application startup. - - G_APPLICATION_CLASS(my_application_parent_class)->startup(application); -} - -// Implements GApplication::shutdown. -static void my_application_shutdown(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application shutdown. - - G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); -} - -// Implements GObject::dispose. -static void my_application_dispose(GObject* object) { - MyApplication* self = MY_APPLICATION(object); - g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); - G_OBJECT_CLASS(my_application_parent_class)->dispose(object); -} - -static void my_application_class_init(MyApplicationClass* klass) { - G_APPLICATION_CLASS(klass)->activate = my_application_activate; - G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; - G_APPLICATION_CLASS(klass)->startup = my_application_startup; - G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; - G_OBJECT_CLASS(klass)->dispose = my_application_dispose; -} - -static void my_application_init(MyApplication* self) {} - -MyApplication* my_application_new() { - return MY_APPLICATION(g_object_new(my_application_get_type(), - "application-id", APPLICATION_ID, - "flags", G_APPLICATION_NON_UNIQUE, - nullptr)); -} diff --git a/animations/step_04_b/linux/my_application.h b/animations/step_04_b/linux/my_application.h deleted file mode 100644 index 72271d5e41..0000000000 --- a/animations/step_04_b/linux/my_application.h +++ /dev/null @@ -1,18 +0,0 @@ -#ifndef FLUTTER_MY_APPLICATION_H_ -#define FLUTTER_MY_APPLICATION_H_ - -#include - -G_DECLARE_FINAL_TYPE(MyApplication, my_application, MY, APPLICATION, - GtkApplication) - -/** - * my_application_new: - * - * Creates a new Flutter-based application. - * - * Returns: a new #MyApplication. - */ -MyApplication* my_application_new(); - -#endif // FLUTTER_MY_APPLICATION_H_ diff --git a/animations/step_04_b/linux/runner/CMakeLists.txt b/animations/step_04_b/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/animations/step_04_b/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/animations/step_03_d/linux/main.cc b/animations/step_04_b/linux/runner/main.cc similarity index 100% rename from animations/step_03_d/linux/main.cc rename to animations/step_04_b/linux/runner/main.cc diff --git a/animations/step_04_b/linux/runner/my_application.cc b/animations/step_04_b/linux/runner/my_application.cc new file mode 100644 index 0000000000..0040d7e46c --- /dev/null +++ b/animations/step_04_b/linux/runner/my_application.cc @@ -0,0 +1,130 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "quiz"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "quiz"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/animations/step_03_d/linux/my_application.h b/animations/step_04_b/linux/runner/my_application.h similarity index 100% rename from animations/step_03_d/linux/my_application.h rename to animations/step_04_b/linux/runner/my_application.h diff --git a/animations/step_04_b/macos/Runner/AppDelegate.swift b/animations/step_04_b/macos/Runner/AppDelegate.swift index 8e02df2888..b3c1761412 100644 --- a/animations/step_04_b/macos/Runner/AppDelegate.swift +++ b/animations/step_04_b/macos/Runner/AppDelegate.swift @@ -6,4 +6,8 @@ class AppDelegate: FlutterAppDelegate { override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { return true } + + override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { + return true + } } diff --git a/animations/step_04_b/web/index.html b/animations/step_04_b/web/index.html index 89656d9a06..ec05768c59 100644 --- a/animations/step_04_b/web/index.html +++ b/animations/step_04_b/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/animations/step_04_c/.gitignore b/animations/step_04_c/.gitignore index 29a3a5017f..79c113f9b5 100644 --- a/animations/step_04_c/.gitignore +++ b/animations/step_04_c/.gitignore @@ -5,9 +5,11 @@ *.swp .DS_Store .atom/ +.build/ .buildlog/ .history .svn/ +.swiftpm/ migrate_working_dir/ # IntelliJ related diff --git a/animations/step_04_c/android/app/build.gradle b/animations/step_04_c/android/app/build.gradle deleted file mode 100644 index 7c3594ed33..0000000000 --- a/animations/step_04_c/android/app/build.gradle +++ /dev/null @@ -1,44 +0,0 @@ -plugins { - id "com.android.application" - id "kotlin-android" - // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. - id "dev.flutter.flutter-gradle-plugin" -} - -android { - namespace = "com.example.quiz" - compileSdk = flutter.compileSdkVersion - ndkVersion = flutter.ndkVersion - - compileOptions { - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 - } - - kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8 - } - - defaultConfig { - // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). - applicationId = "com.example.quiz" - // You can update the following values to match your application needs. - // For more information, see: https://flutter.dev/to/review-gradle-config. - minSdk = flutter.minSdkVersion - targetSdk = flutter.targetSdkVersion - versionCode = flutter.versionCode - versionName = flutter.versionName - } - - buildTypes { - release { - // TODO: Add your own signing config for the release build. - // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig = signingConfigs.debug - } - } -} - -flutter { - source = "../.." -} diff --git a/animations/step_04_c/android/app/build.gradle.kts b/animations/step_04_c/android/app/build.gradle.kts new file mode 100644 index 0000000000..31d285867f --- /dev/null +++ b/animations/step_04_c/android/app/build.gradle.kts @@ -0,0 +1,44 @@ +plugins { + id("com.android.application") + id("kotlin-android") + // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. + id("dev.flutter.flutter-gradle-plugin") +} + +android { + namespace = "com.example.quiz" + compileSdk = flutter.compileSdkVersion + ndkVersion = flutter.ndkVersion + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 + } + + kotlinOptions { + jvmTarget = JavaVersion.VERSION_1_8.toString() + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId = "com.example.quiz" + // You can update the following values to match your application needs. + // For more information, see: https://flutter.dev/to/review-gradle-config. + minSdk = flutter.minSdkVersion + targetSdk = flutter.targetSdkVersion + versionCode = flutter.versionCode + versionName = flutter.versionName + } + + buildTypes { + release { + // TODO: Add your own signing config for the release build. + // Signing with the debug keys for now, so `flutter run --release` works. + signingConfig = signingConfigs.getByName("debug") + } + } +} + +flutter { + source = "../.." +} diff --git a/animations/step_04_c/android/build.gradle b/animations/step_04_c/android/build.gradle deleted file mode 100644 index d2ffbffa4c..0000000000 --- a/animations/step_04_c/android/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = "../build" -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(":app") -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/animations/step_04_c/android/build.gradle.kts b/animations/step_04_c/android/build.gradle.kts new file mode 100644 index 0000000000..89176ef44e --- /dev/null +++ b/animations/step_04_c/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/animations/step_04_c/android/gradle.properties b/animations/step_04_c/android/gradle.properties index 2597170821..f018a61817 100644 --- a/animations/step_04_c/android/gradle.properties +++ b/animations/step_04_c/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/animations/step_04_c/android/gradle/wrapper/gradle-wrapper.properties b/animations/step_04_c/android/gradle/wrapper/gradle-wrapper.properties index 7bb2df6ba6..afa1e8eb0a 100644 --- a/animations/step_04_c/android/gradle/wrapper/gradle-wrapper.properties +++ b/animations/step_04_c/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip diff --git a/animations/step_04_c/android/settings.gradle b/animations/step_04_c/android/settings.gradle deleted file mode 100644 index b9e43bd376..0000000000 --- a/animations/step_04_c/android/settings.gradle +++ /dev/null @@ -1,25 +0,0 @@ -pluginManagement { - def flutterSdkPath = { - def properties = new Properties() - file("local.properties").withInputStream { properties.load(it) } - def flutterSdkPath = properties.getProperty("flutter.sdk") - assert flutterSdkPath != null, "flutter.sdk not set in local.properties" - return flutterSdkPath - }() - - includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") - - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} - -plugins { - id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.1.0" apply false - id "org.jetbrains.kotlin.android" version "1.8.22" apply false -} - -include ":app" diff --git a/animations/step_04_c/android/settings.gradle.kts b/animations/step_04_c/android/settings.gradle.kts new file mode 100644 index 0000000000..a439442c20 --- /dev/null +++ b/animations/step_04_c/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.0" apply false + id("org.jetbrains.kotlin.android") version "1.8.22" apply false +} + +include(":app") diff --git a/animations/step_04_c/linux/CMakeLists.txt b/animations/step_04_c/linux/CMakeLists.txt index 658be85ac5..7caf822271 100644 --- a/animations/step_04_c/linux/CMakeLists.txt +++ b/animations/step_04_c/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/animations/step_04_c/linux/main.cc b/animations/step_04_c/linux/main.cc deleted file mode 100644 index e7c5c54370..0000000000 --- a/animations/step_04_c/linux/main.cc +++ /dev/null @@ -1,6 +0,0 @@ -#include "my_application.h" - -int main(int argc, char** argv) { - g_autoptr(MyApplication) app = my_application_new(); - return g_application_run(G_APPLICATION(app), argc, argv); -} diff --git a/animations/step_04_c/linux/my_application.cc b/animations/step_04_c/linux/my_application.cc deleted file mode 100644 index d6ea0e3c5f..0000000000 --- a/animations/step_04_c/linux/my_application.cc +++ /dev/null @@ -1,124 +0,0 @@ -#include "my_application.h" - -#include -#ifdef GDK_WINDOWING_X11 -#include -#endif - -#include "flutter/generated_plugin_registrant.h" - -struct _MyApplication { - GtkApplication parent_instance; - char** dart_entrypoint_arguments; -}; - -G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) - -// Implements GApplication::activate. -static void my_application_activate(GApplication* application) { - MyApplication* self = MY_APPLICATION(application); - GtkWindow* window = - GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); - - // Use a header bar when running in GNOME as this is the common style used - // by applications and is the setup most users will be using (e.g. Ubuntu - // desktop). - // If running on X and not using GNOME then just use a traditional title bar - // in case the window manager does more exotic layout, e.g. tiling. - // If running on Wayland assume the header bar will work (may need changing - // if future cases occur). - gboolean use_header_bar = TRUE; -#ifdef GDK_WINDOWING_X11 - GdkScreen* screen = gtk_window_get_screen(window); - if (GDK_IS_X11_SCREEN(screen)) { - const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); - if (g_strcmp0(wm_name, "GNOME Shell") != 0) { - use_header_bar = FALSE; - } - } -#endif - if (use_header_bar) { - GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); - gtk_widget_show(GTK_WIDGET(header_bar)); - gtk_header_bar_set_title(header_bar, "quiz"); - gtk_header_bar_set_show_close_button(header_bar, TRUE); - gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); - } else { - gtk_window_set_title(window, "quiz"); - } - - gtk_window_set_default_size(window, 1280, 720); - gtk_widget_show(GTK_WIDGET(window)); - - g_autoptr(FlDartProject) project = fl_dart_project_new(); - fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); - - FlView* view = fl_view_new(project); - gtk_widget_show(GTK_WIDGET(view)); - gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); - - fl_register_plugins(FL_PLUGIN_REGISTRY(view)); - - gtk_widget_grab_focus(GTK_WIDGET(view)); -} - -// Implements GApplication::local_command_line. -static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { - MyApplication* self = MY_APPLICATION(application); - // Strip out the first argument as it is the binary name. - self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); - - g_autoptr(GError) error = nullptr; - if (!g_application_register(application, nullptr, &error)) { - g_warning("Failed to register: %s", error->message); - *exit_status = 1; - return TRUE; - } - - g_application_activate(application); - *exit_status = 0; - - return TRUE; -} - -// Implements GApplication::startup. -static void my_application_startup(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application startup. - - G_APPLICATION_CLASS(my_application_parent_class)->startup(application); -} - -// Implements GApplication::shutdown. -static void my_application_shutdown(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application shutdown. - - G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); -} - -// Implements GObject::dispose. -static void my_application_dispose(GObject* object) { - MyApplication* self = MY_APPLICATION(object); - g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); - G_OBJECT_CLASS(my_application_parent_class)->dispose(object); -} - -static void my_application_class_init(MyApplicationClass* klass) { - G_APPLICATION_CLASS(klass)->activate = my_application_activate; - G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; - G_APPLICATION_CLASS(klass)->startup = my_application_startup; - G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; - G_OBJECT_CLASS(klass)->dispose = my_application_dispose; -} - -static void my_application_init(MyApplication* self) {} - -MyApplication* my_application_new() { - return MY_APPLICATION(g_object_new(my_application_get_type(), - "application-id", APPLICATION_ID, - "flags", G_APPLICATION_NON_UNIQUE, - nullptr)); -} diff --git a/animations/step_04_c/linux/my_application.h b/animations/step_04_c/linux/my_application.h deleted file mode 100644 index 72271d5e41..0000000000 --- a/animations/step_04_c/linux/my_application.h +++ /dev/null @@ -1,18 +0,0 @@ -#ifndef FLUTTER_MY_APPLICATION_H_ -#define FLUTTER_MY_APPLICATION_H_ - -#include - -G_DECLARE_FINAL_TYPE(MyApplication, my_application, MY, APPLICATION, - GtkApplication) - -/** - * my_application_new: - * - * Creates a new Flutter-based application. - * - * Returns: a new #MyApplication. - */ -MyApplication* my_application_new(); - -#endif // FLUTTER_MY_APPLICATION_H_ diff --git a/animations/step_04_c/linux/runner/CMakeLists.txt b/animations/step_04_c/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/animations/step_04_c/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/animations/step_04/linux/main.cc b/animations/step_04_c/linux/runner/main.cc similarity index 100% rename from animations/step_04/linux/main.cc rename to animations/step_04_c/linux/runner/main.cc diff --git a/animations/step_04_c/linux/runner/my_application.cc b/animations/step_04_c/linux/runner/my_application.cc new file mode 100644 index 0000000000..0040d7e46c --- /dev/null +++ b/animations/step_04_c/linux/runner/my_application.cc @@ -0,0 +1,130 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "quiz"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "quiz"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/animations/step_04/linux/my_application.h b/animations/step_04_c/linux/runner/my_application.h similarity index 100% rename from animations/step_04/linux/my_application.h rename to animations/step_04_c/linux/runner/my_application.h diff --git a/animations/step_04_c/macos/Runner/AppDelegate.swift b/animations/step_04_c/macos/Runner/AppDelegate.swift index 8e02df2888..b3c1761412 100644 --- a/animations/step_04_c/macos/Runner/AppDelegate.swift +++ b/animations/step_04_c/macos/Runner/AppDelegate.swift @@ -6,4 +6,8 @@ class AppDelegate: FlutterAppDelegate { override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { return true } + + override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { + return true + } } diff --git a/animations/step_04_c/web/index.html b/animations/step_04_c/web/index.html index 89656d9a06..ec05768c59 100644 --- a/animations/step_04_c/web/index.html +++ b/animations/step_04_c/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/animations/step_04_d/.gitignore b/animations/step_04_d/.gitignore index 29a3a5017f..79c113f9b5 100644 --- a/animations/step_04_d/.gitignore +++ b/animations/step_04_d/.gitignore @@ -5,9 +5,11 @@ *.swp .DS_Store .atom/ +.build/ .buildlog/ .history .svn/ +.swiftpm/ migrate_working_dir/ # IntelliJ related diff --git a/animations/step_04_d/android/app/build.gradle b/animations/step_04_d/android/app/build.gradle deleted file mode 100644 index 7c3594ed33..0000000000 --- a/animations/step_04_d/android/app/build.gradle +++ /dev/null @@ -1,44 +0,0 @@ -plugins { - id "com.android.application" - id "kotlin-android" - // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. - id "dev.flutter.flutter-gradle-plugin" -} - -android { - namespace = "com.example.quiz" - compileSdk = flutter.compileSdkVersion - ndkVersion = flutter.ndkVersion - - compileOptions { - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 - } - - kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8 - } - - defaultConfig { - // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). - applicationId = "com.example.quiz" - // You can update the following values to match your application needs. - // For more information, see: https://flutter.dev/to/review-gradle-config. - minSdk = flutter.minSdkVersion - targetSdk = flutter.targetSdkVersion - versionCode = flutter.versionCode - versionName = flutter.versionName - } - - buildTypes { - release { - // TODO: Add your own signing config for the release build. - // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig = signingConfigs.debug - } - } -} - -flutter { - source = "../.." -} diff --git a/animations/step_04_d/android/app/build.gradle.kts b/animations/step_04_d/android/app/build.gradle.kts new file mode 100644 index 0000000000..31d285867f --- /dev/null +++ b/animations/step_04_d/android/app/build.gradle.kts @@ -0,0 +1,44 @@ +plugins { + id("com.android.application") + id("kotlin-android") + // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. + id("dev.flutter.flutter-gradle-plugin") +} + +android { + namespace = "com.example.quiz" + compileSdk = flutter.compileSdkVersion + ndkVersion = flutter.ndkVersion + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 + } + + kotlinOptions { + jvmTarget = JavaVersion.VERSION_1_8.toString() + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId = "com.example.quiz" + // You can update the following values to match your application needs. + // For more information, see: https://flutter.dev/to/review-gradle-config. + minSdk = flutter.minSdkVersion + targetSdk = flutter.targetSdkVersion + versionCode = flutter.versionCode + versionName = flutter.versionName + } + + buildTypes { + release { + // TODO: Add your own signing config for the release build. + // Signing with the debug keys for now, so `flutter run --release` works. + signingConfig = signingConfigs.getByName("debug") + } + } +} + +flutter { + source = "../.." +} diff --git a/animations/step_04_d/android/build.gradle b/animations/step_04_d/android/build.gradle deleted file mode 100644 index d2ffbffa4c..0000000000 --- a/animations/step_04_d/android/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = "../build" -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(":app") -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/animations/step_04_d/android/build.gradle.kts b/animations/step_04_d/android/build.gradle.kts new file mode 100644 index 0000000000..89176ef44e --- /dev/null +++ b/animations/step_04_d/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/animations/step_04_d/android/gradle.properties b/animations/step_04_d/android/gradle.properties index 2597170821..f018a61817 100644 --- a/animations/step_04_d/android/gradle.properties +++ b/animations/step_04_d/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/animations/step_04_d/android/gradle/wrapper/gradle-wrapper.properties b/animations/step_04_d/android/gradle/wrapper/gradle-wrapper.properties index 7bb2df6ba6..afa1e8eb0a 100644 --- a/animations/step_04_d/android/gradle/wrapper/gradle-wrapper.properties +++ b/animations/step_04_d/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip diff --git a/animations/step_04_d/android/settings.gradle b/animations/step_04_d/android/settings.gradle deleted file mode 100644 index b9e43bd376..0000000000 --- a/animations/step_04_d/android/settings.gradle +++ /dev/null @@ -1,25 +0,0 @@ -pluginManagement { - def flutterSdkPath = { - def properties = new Properties() - file("local.properties").withInputStream { properties.load(it) } - def flutterSdkPath = properties.getProperty("flutter.sdk") - assert flutterSdkPath != null, "flutter.sdk not set in local.properties" - return flutterSdkPath - }() - - includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") - - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} - -plugins { - id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.1.0" apply false - id "org.jetbrains.kotlin.android" version "1.8.22" apply false -} - -include ":app" diff --git a/animations/step_04_d/android/settings.gradle.kts b/animations/step_04_d/android/settings.gradle.kts new file mode 100644 index 0000000000..a439442c20 --- /dev/null +++ b/animations/step_04_d/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.0" apply false + id("org.jetbrains.kotlin.android") version "1.8.22" apply false +} + +include(":app") diff --git a/animations/step_04_d/linux/CMakeLists.txt b/animations/step_04_d/linux/CMakeLists.txt index 658be85ac5..7caf822271 100644 --- a/animations/step_04_d/linux/CMakeLists.txt +++ b/animations/step_04_d/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/animations/step_04_d/linux/main.cc b/animations/step_04_d/linux/main.cc deleted file mode 100644 index e7c5c54370..0000000000 --- a/animations/step_04_d/linux/main.cc +++ /dev/null @@ -1,6 +0,0 @@ -#include "my_application.h" - -int main(int argc, char** argv) { - g_autoptr(MyApplication) app = my_application_new(); - return g_application_run(G_APPLICATION(app), argc, argv); -} diff --git a/animations/step_04_d/linux/my_application.cc b/animations/step_04_d/linux/my_application.cc deleted file mode 100644 index d6ea0e3c5f..0000000000 --- a/animations/step_04_d/linux/my_application.cc +++ /dev/null @@ -1,124 +0,0 @@ -#include "my_application.h" - -#include -#ifdef GDK_WINDOWING_X11 -#include -#endif - -#include "flutter/generated_plugin_registrant.h" - -struct _MyApplication { - GtkApplication parent_instance; - char** dart_entrypoint_arguments; -}; - -G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) - -// Implements GApplication::activate. -static void my_application_activate(GApplication* application) { - MyApplication* self = MY_APPLICATION(application); - GtkWindow* window = - GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); - - // Use a header bar when running in GNOME as this is the common style used - // by applications and is the setup most users will be using (e.g. Ubuntu - // desktop). - // If running on X and not using GNOME then just use a traditional title bar - // in case the window manager does more exotic layout, e.g. tiling. - // If running on Wayland assume the header bar will work (may need changing - // if future cases occur). - gboolean use_header_bar = TRUE; -#ifdef GDK_WINDOWING_X11 - GdkScreen* screen = gtk_window_get_screen(window); - if (GDK_IS_X11_SCREEN(screen)) { - const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); - if (g_strcmp0(wm_name, "GNOME Shell") != 0) { - use_header_bar = FALSE; - } - } -#endif - if (use_header_bar) { - GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); - gtk_widget_show(GTK_WIDGET(header_bar)); - gtk_header_bar_set_title(header_bar, "quiz"); - gtk_header_bar_set_show_close_button(header_bar, TRUE); - gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); - } else { - gtk_window_set_title(window, "quiz"); - } - - gtk_window_set_default_size(window, 1280, 720); - gtk_widget_show(GTK_WIDGET(window)); - - g_autoptr(FlDartProject) project = fl_dart_project_new(); - fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); - - FlView* view = fl_view_new(project); - gtk_widget_show(GTK_WIDGET(view)); - gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); - - fl_register_plugins(FL_PLUGIN_REGISTRY(view)); - - gtk_widget_grab_focus(GTK_WIDGET(view)); -} - -// Implements GApplication::local_command_line. -static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { - MyApplication* self = MY_APPLICATION(application); - // Strip out the first argument as it is the binary name. - self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); - - g_autoptr(GError) error = nullptr; - if (!g_application_register(application, nullptr, &error)) { - g_warning("Failed to register: %s", error->message); - *exit_status = 1; - return TRUE; - } - - g_application_activate(application); - *exit_status = 0; - - return TRUE; -} - -// Implements GApplication::startup. -static void my_application_startup(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application startup. - - G_APPLICATION_CLASS(my_application_parent_class)->startup(application); -} - -// Implements GApplication::shutdown. -static void my_application_shutdown(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application shutdown. - - G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); -} - -// Implements GObject::dispose. -static void my_application_dispose(GObject* object) { - MyApplication* self = MY_APPLICATION(object); - g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); - G_OBJECT_CLASS(my_application_parent_class)->dispose(object); -} - -static void my_application_class_init(MyApplicationClass* klass) { - G_APPLICATION_CLASS(klass)->activate = my_application_activate; - G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; - G_APPLICATION_CLASS(klass)->startup = my_application_startup; - G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; - G_OBJECT_CLASS(klass)->dispose = my_application_dispose; -} - -static void my_application_init(MyApplication* self) {} - -MyApplication* my_application_new() { - return MY_APPLICATION(g_object_new(my_application_get_type(), - "application-id", APPLICATION_ID, - "flags", G_APPLICATION_NON_UNIQUE, - nullptr)); -} diff --git a/animations/step_04_d/linux/my_application.h b/animations/step_04_d/linux/my_application.h deleted file mode 100644 index 72271d5e41..0000000000 --- a/animations/step_04_d/linux/my_application.h +++ /dev/null @@ -1,18 +0,0 @@ -#ifndef FLUTTER_MY_APPLICATION_H_ -#define FLUTTER_MY_APPLICATION_H_ - -#include - -G_DECLARE_FINAL_TYPE(MyApplication, my_application, MY, APPLICATION, - GtkApplication) - -/** - * my_application_new: - * - * Creates a new Flutter-based application. - * - * Returns: a new #MyApplication. - */ -MyApplication* my_application_new(); - -#endif // FLUTTER_MY_APPLICATION_H_ diff --git a/animations/step_04_d/linux/runner/CMakeLists.txt b/animations/step_04_d/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/animations/step_04_d/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/animations/step_04_a/linux/main.cc b/animations/step_04_d/linux/runner/main.cc similarity index 100% rename from animations/step_04_a/linux/main.cc rename to animations/step_04_d/linux/runner/main.cc diff --git a/animations/step_04_d/linux/runner/my_application.cc b/animations/step_04_d/linux/runner/my_application.cc new file mode 100644 index 0000000000..0040d7e46c --- /dev/null +++ b/animations/step_04_d/linux/runner/my_application.cc @@ -0,0 +1,130 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "quiz"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "quiz"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/animations/step_04_a/linux/my_application.h b/animations/step_04_d/linux/runner/my_application.h similarity index 100% rename from animations/step_04_a/linux/my_application.h rename to animations/step_04_d/linux/runner/my_application.h diff --git a/animations/step_04_d/macos/Runner/AppDelegate.swift b/animations/step_04_d/macos/Runner/AppDelegate.swift index 8e02df2888..b3c1761412 100644 --- a/animations/step_04_d/macos/Runner/AppDelegate.swift +++ b/animations/step_04_d/macos/Runner/AppDelegate.swift @@ -6,4 +6,8 @@ class AppDelegate: FlutterAppDelegate { override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { return true } + + override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { + return true + } } diff --git a/animations/step_04_d/web/index.html b/animations/step_04_d/web/index.html index 89656d9a06..ec05768c59 100644 --- a/animations/step_04_d/web/index.html +++ b/animations/step_04_d/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/animations/step_05/android/app/build.gradle b/animations/step_05/android/app/build.gradle deleted file mode 100644 index 7c3594ed33..0000000000 --- a/animations/step_05/android/app/build.gradle +++ /dev/null @@ -1,44 +0,0 @@ -plugins { - id "com.android.application" - id "kotlin-android" - // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. - id "dev.flutter.flutter-gradle-plugin" -} - -android { - namespace = "com.example.quiz" - compileSdk = flutter.compileSdkVersion - ndkVersion = flutter.ndkVersion - - compileOptions { - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 - } - - kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8 - } - - defaultConfig { - // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). - applicationId = "com.example.quiz" - // You can update the following values to match your application needs. - // For more information, see: https://flutter.dev/to/review-gradle-config. - minSdk = flutter.minSdkVersion - targetSdk = flutter.targetSdkVersion - versionCode = flutter.versionCode - versionName = flutter.versionName - } - - buildTypes { - release { - // TODO: Add your own signing config for the release build. - // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig = signingConfigs.debug - } - } -} - -flutter { - source = "../.." -} diff --git a/animations/step_05/android/app/build.gradle.kts b/animations/step_05/android/app/build.gradle.kts new file mode 100644 index 0000000000..31d285867f --- /dev/null +++ b/animations/step_05/android/app/build.gradle.kts @@ -0,0 +1,44 @@ +plugins { + id("com.android.application") + id("kotlin-android") + // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. + id("dev.flutter.flutter-gradle-plugin") +} + +android { + namespace = "com.example.quiz" + compileSdk = flutter.compileSdkVersion + ndkVersion = flutter.ndkVersion + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 + } + + kotlinOptions { + jvmTarget = JavaVersion.VERSION_1_8.toString() + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId = "com.example.quiz" + // You can update the following values to match your application needs. + // For more information, see: https://flutter.dev/to/review-gradle-config. + minSdk = flutter.minSdkVersion + targetSdk = flutter.targetSdkVersion + versionCode = flutter.versionCode + versionName = flutter.versionName + } + + buildTypes { + release { + // TODO: Add your own signing config for the release build. + // Signing with the debug keys for now, so `flutter run --release` works. + signingConfig = signingConfigs.getByName("debug") + } + } +} + +flutter { + source = "../.." +} diff --git a/animations/step_05/android/build.gradle b/animations/step_05/android/build.gradle deleted file mode 100644 index d2ffbffa4c..0000000000 --- a/animations/step_05/android/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = "../build" -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(":app") -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/animations/step_05/android/build.gradle.kts b/animations/step_05/android/build.gradle.kts new file mode 100644 index 0000000000..89176ef44e --- /dev/null +++ b/animations/step_05/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/animations/step_05/android/gradle.properties b/animations/step_05/android/gradle.properties index 2597170821..f018a61817 100644 --- a/animations/step_05/android/gradle.properties +++ b/animations/step_05/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/animations/step_05/android/gradle/wrapper/gradle-wrapper.properties b/animations/step_05/android/gradle/wrapper/gradle-wrapper.properties index 7bb2df6ba6..afa1e8eb0a 100644 --- a/animations/step_05/android/gradle/wrapper/gradle-wrapper.properties +++ b/animations/step_05/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip diff --git a/animations/step_05/android/settings.gradle b/animations/step_05/android/settings.gradle deleted file mode 100644 index b9e43bd376..0000000000 --- a/animations/step_05/android/settings.gradle +++ /dev/null @@ -1,25 +0,0 @@ -pluginManagement { - def flutterSdkPath = { - def properties = new Properties() - file("local.properties").withInputStream { properties.load(it) } - def flutterSdkPath = properties.getProperty("flutter.sdk") - assert flutterSdkPath != null, "flutter.sdk not set in local.properties" - return flutterSdkPath - }() - - includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") - - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} - -plugins { - id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.1.0" apply false - id "org.jetbrains.kotlin.android" version "1.8.22" apply false -} - -include ":app" diff --git a/animations/step_05/android/settings.gradle.kts b/animations/step_05/android/settings.gradle.kts new file mode 100644 index 0000000000..a439442c20 --- /dev/null +++ b/animations/step_05/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.0" apply false + id("org.jetbrains.kotlin.android") version "1.8.22" apply false +} + +include(":app") diff --git a/animations/step_05/linux/main.cc b/animations/step_05/linux/main.cc deleted file mode 100644 index e7c5c54370..0000000000 --- a/animations/step_05/linux/main.cc +++ /dev/null @@ -1,6 +0,0 @@ -#include "my_application.h" - -int main(int argc, char** argv) { - g_autoptr(MyApplication) app = my_application_new(); - return g_application_run(G_APPLICATION(app), argc, argv); -} diff --git a/animations/step_05/linux/my_application.cc b/animations/step_05/linux/my_application.cc deleted file mode 100644 index d6ea0e3c5f..0000000000 --- a/animations/step_05/linux/my_application.cc +++ /dev/null @@ -1,124 +0,0 @@ -#include "my_application.h" - -#include -#ifdef GDK_WINDOWING_X11 -#include -#endif - -#include "flutter/generated_plugin_registrant.h" - -struct _MyApplication { - GtkApplication parent_instance; - char** dart_entrypoint_arguments; -}; - -G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) - -// Implements GApplication::activate. -static void my_application_activate(GApplication* application) { - MyApplication* self = MY_APPLICATION(application); - GtkWindow* window = - GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); - - // Use a header bar when running in GNOME as this is the common style used - // by applications and is the setup most users will be using (e.g. Ubuntu - // desktop). - // If running on X and not using GNOME then just use a traditional title bar - // in case the window manager does more exotic layout, e.g. tiling. - // If running on Wayland assume the header bar will work (may need changing - // if future cases occur). - gboolean use_header_bar = TRUE; -#ifdef GDK_WINDOWING_X11 - GdkScreen* screen = gtk_window_get_screen(window); - if (GDK_IS_X11_SCREEN(screen)) { - const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); - if (g_strcmp0(wm_name, "GNOME Shell") != 0) { - use_header_bar = FALSE; - } - } -#endif - if (use_header_bar) { - GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); - gtk_widget_show(GTK_WIDGET(header_bar)); - gtk_header_bar_set_title(header_bar, "quiz"); - gtk_header_bar_set_show_close_button(header_bar, TRUE); - gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); - } else { - gtk_window_set_title(window, "quiz"); - } - - gtk_window_set_default_size(window, 1280, 720); - gtk_widget_show(GTK_WIDGET(window)); - - g_autoptr(FlDartProject) project = fl_dart_project_new(); - fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); - - FlView* view = fl_view_new(project); - gtk_widget_show(GTK_WIDGET(view)); - gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); - - fl_register_plugins(FL_PLUGIN_REGISTRY(view)); - - gtk_widget_grab_focus(GTK_WIDGET(view)); -} - -// Implements GApplication::local_command_line. -static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { - MyApplication* self = MY_APPLICATION(application); - // Strip out the first argument as it is the binary name. - self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); - - g_autoptr(GError) error = nullptr; - if (!g_application_register(application, nullptr, &error)) { - g_warning("Failed to register: %s", error->message); - *exit_status = 1; - return TRUE; - } - - g_application_activate(application); - *exit_status = 0; - - return TRUE; -} - -// Implements GApplication::startup. -static void my_application_startup(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application startup. - - G_APPLICATION_CLASS(my_application_parent_class)->startup(application); -} - -// Implements GApplication::shutdown. -static void my_application_shutdown(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application shutdown. - - G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); -} - -// Implements GObject::dispose. -static void my_application_dispose(GObject* object) { - MyApplication* self = MY_APPLICATION(object); - g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); - G_OBJECT_CLASS(my_application_parent_class)->dispose(object); -} - -static void my_application_class_init(MyApplicationClass* klass) { - G_APPLICATION_CLASS(klass)->activate = my_application_activate; - G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; - G_APPLICATION_CLASS(klass)->startup = my_application_startup; - G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; - G_OBJECT_CLASS(klass)->dispose = my_application_dispose; -} - -static void my_application_init(MyApplication* self) {} - -MyApplication* my_application_new() { - return MY_APPLICATION(g_object_new(my_application_get_type(), - "application-id", APPLICATION_ID, - "flags", G_APPLICATION_NON_UNIQUE, - nullptr)); -} diff --git a/animations/step_05/linux/my_application.h b/animations/step_05/linux/my_application.h deleted file mode 100644 index 72271d5e41..0000000000 --- a/animations/step_05/linux/my_application.h +++ /dev/null @@ -1,18 +0,0 @@ -#ifndef FLUTTER_MY_APPLICATION_H_ -#define FLUTTER_MY_APPLICATION_H_ - -#include - -G_DECLARE_FINAL_TYPE(MyApplication, my_application, MY, APPLICATION, - GtkApplication) - -/** - * my_application_new: - * - * Creates a new Flutter-based application. - * - * Returns: a new #MyApplication. - */ -MyApplication* my_application_new(); - -#endif // FLUTTER_MY_APPLICATION_H_ From 7fa189a3647c09f2e7d5a82d3c71e80dfe24dc82 Mon Sep 17 00:00:00 2001 From: Brett Morgan Date: Thu, 14 Nov 2024 14:12:26 +1100 Subject: [PATCH 059/108] Breaking up Step 5 --- animations/codelab_rebuild.yaml | 24 + animations/step_05_a/.gitignore | 43 ++ animations/step_05_a/analysis_options.yaml | 13 + animations/step_05_a/android/.gitignore | 13 + animations/step_05_a/android/app/build.gradle | 44 ++ .../android/app/src/debug/AndroidManifest.xml | 7 + .../android/app/src/main/AndroidManifest.xml | 45 ++ .../kotlin/com/example/quiz/MainActivity.kt | 5 + .../res/drawable-v21/launch_background.xml | 12 + .../main/res/drawable/launch_background.xml | 12 + .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 544 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 442 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 721 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 1031 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 1443 bytes .../app/src/main/res/values-night/styles.xml | 18 + .../app/src/main/res/values/styles.xml | 18 + .../app/src/profile/AndroidManifest.xml | 7 + animations/step_05_a/android/build.gradle | 18 + .../step_05_a/android/gradle.properties | 3 + .../gradle/wrapper/gradle-wrapper.properties | 5 + animations/step_05_a/android/settings.gradle | 25 + animations/step_05_a/ios/.gitignore | 34 + .../ios/Flutter/AppFrameworkInfo.plist | 26 + .../step_05_a/ios/Flutter/Debug.xcconfig | 1 + .../step_05_a/ios/Flutter/Release.xcconfig | 1 + .../ios/Runner.xcodeproj/project.pbxproj | 616 +++++++++++++++ .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/WorkspaceSettings.xcsettings | 8 + .../xcshareddata/xcschemes/Runner.xcscheme | 98 +++ .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/WorkspaceSettings.xcsettings | 8 + .../step_05_a/ios/Runner/AppDelegate.swift | 13 + .../AppIcon.appiconset/Contents.json | 122 +++ .../Icon-App-1024x1024@1x.png | Bin 0 -> 10932 bytes .../AppIcon.appiconset/Icon-App-20x20@1x.png | Bin 0 -> 295 bytes .../AppIcon.appiconset/Icon-App-20x20@2x.png | Bin 0 -> 406 bytes .../AppIcon.appiconset/Icon-App-20x20@3x.png | Bin 0 -> 450 bytes .../AppIcon.appiconset/Icon-App-29x29@1x.png | Bin 0 -> 282 bytes .../AppIcon.appiconset/Icon-App-29x29@2x.png | Bin 0 -> 462 bytes .../AppIcon.appiconset/Icon-App-29x29@3x.png | Bin 0 -> 704 bytes .../AppIcon.appiconset/Icon-App-40x40@1x.png | Bin 0 -> 406 bytes .../AppIcon.appiconset/Icon-App-40x40@2x.png | Bin 0 -> 586 bytes .../AppIcon.appiconset/Icon-App-40x40@3x.png | Bin 0 -> 862 bytes .../AppIcon.appiconset/Icon-App-60x60@2x.png | Bin 0 -> 862 bytes .../AppIcon.appiconset/Icon-App-60x60@3x.png | Bin 0 -> 1674 bytes .../AppIcon.appiconset/Icon-App-76x76@1x.png | Bin 0 -> 762 bytes .../AppIcon.appiconset/Icon-App-76x76@2x.png | Bin 0 -> 1226 bytes .../Icon-App-83.5x83.5@2x.png | Bin 0 -> 1418 bytes .../LaunchImage.imageset/Contents.json | 23 + .../LaunchImage.imageset/LaunchImage.png | Bin 0 -> 68 bytes .../LaunchImage.imageset/LaunchImage@2x.png | Bin 0 -> 68 bytes .../LaunchImage.imageset/LaunchImage@3x.png | Bin 0 -> 68 bytes .../LaunchImage.imageset/README.md | 5 + .../Runner/Base.lproj/LaunchScreen.storyboard | 37 + .../ios/Runner/Base.lproj/Main.storyboard | 26 + animations/step_05_a/ios/Runner/Info.plist | 49 ++ .../ios/Runner/Runner-Bridging-Header.h | 1 + .../ios/RunnerTests/RunnerTests.swift | 12 + animations/step_05_a/lib/flip_effect.dart | 85 +++ animations/step_05_a/lib/home_screen.dart | 48 ++ animations/step_05_a/lib/main.dart | 23 + animations/step_05_a/lib/model.dart | 62 ++ animations/step_05_a/lib/question_screen.dart | 205 +++++ animations/step_05_a/lib/scoreboard.dart | 62 ++ animations/step_05_a/lib/view_model.dart | 43 ++ animations/step_05_a/linux/.gitignore | 1 + animations/step_05_a/linux/CMakeLists.txt | 145 ++++ .../step_05_a/linux/flutter/CMakeLists.txt | 88 +++ .../flutter/generated_plugin_registrant.cc | 11 + .../flutter/generated_plugin_registrant.h | 15 + .../linux/flutter/generated_plugins.cmake | 23 + animations/step_05_a/linux/main.cc | 6 + animations/step_05_a/linux/my_application.cc | 124 +++ animations/step_05_a/linux/my_application.h | 18 + animations/step_05_a/macos/.gitignore | 7 + .../macos/Flutter/Flutter-Debug.xcconfig | 1 + .../macos/Flutter/Flutter-Release.xcconfig | 1 + .../Flutter/GeneratedPluginRegistrant.swift | 10 + .../macos/Runner.xcodeproj/project.pbxproj | 705 ++++++++++++++++++ .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/xcschemes/Runner.xcscheme | 98 +++ .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../step_05_a/macos/Runner/AppDelegate.swift | 9 + .../AppIcon.appiconset/Contents.json | 68 ++ .../AppIcon.appiconset/app_icon_1024.png | Bin 0 -> 102994 bytes .../AppIcon.appiconset/app_icon_128.png | Bin 0 -> 5680 bytes .../AppIcon.appiconset/app_icon_16.png | Bin 0 -> 520 bytes .../AppIcon.appiconset/app_icon_256.png | Bin 0 -> 14142 bytes .../AppIcon.appiconset/app_icon_32.png | Bin 0 -> 1066 bytes .../AppIcon.appiconset/app_icon_512.png | Bin 0 -> 36406 bytes .../AppIcon.appiconset/app_icon_64.png | Bin 0 -> 2218 bytes .../macos/Runner/Base.lproj/MainMenu.xib | 343 +++++++++ .../macos/Runner/Configs/AppInfo.xcconfig | 14 + .../macos/Runner/Configs/Debug.xcconfig | 2 + .../macos/Runner/Configs/Release.xcconfig | 2 + .../macos/Runner/Configs/Warnings.xcconfig | 13 + .../macos/Runner/DebugProfile.entitlements | 12 + animations/step_05_a/macos/Runner/Info.plist | 32 + .../macos/Runner/MainFlutterWindow.swift | 15 + .../macos/Runner/Release.entitlements | 8 + .../macos/RunnerTests/RunnerTests.swift | 12 + animations/step_05_a/pubspec.yaml | 21 + animations/step_05_a/web/favicon.png | Bin 0 -> 917 bytes animations/step_05_a/web/icons/Icon-192.png | Bin 0 -> 5292 bytes animations/step_05_a/web/icons/Icon-512.png | Bin 0 -> 8252 bytes .../step_05_a/web/icons/Icon-maskable-192.png | Bin 0 -> 5594 bytes .../step_05_a/web/icons/Icon-maskable-512.png | Bin 0 -> 20998 bytes animations/step_05_a/web/index.html | 38 + animations/step_05_a/web/manifest.json | 35 + animations/step_05_a/windows/.gitignore | 17 + animations/step_05_a/windows/CMakeLists.txt | 108 +++ .../step_05_a/windows/flutter/CMakeLists.txt | 109 +++ .../flutter/generated_plugin_registrant.cc | 11 + .../flutter/generated_plugin_registrant.h | 15 + .../windows/flutter/generated_plugins.cmake | 23 + .../step_05_a/windows/runner/CMakeLists.txt | 40 + animations/step_05_a/windows/runner/Runner.rc | 121 +++ .../windows/runner/flutter_window.cpp | 71 ++ .../step_05_a/windows/runner/flutter_window.h | 33 + animations/step_05_a/windows/runner/main.cpp | 43 ++ .../step_05_a/windows/runner/resource.h | 16 + .../windows/runner/resources/app_icon.ico | Bin 0 -> 33772 bytes .../windows/runner/runner.exe.manifest | 14 + animations/step_05_a/windows/runner/utils.cpp | 65 ++ animations/step_05_a/windows/runner/utils.h | 19 + .../step_05_a/windows/runner/win32_window.cpp | 288 +++++++ .../step_05_a/windows/runner/win32_window.h | 102 +++ animations/step_05_b/.gitignore | 43 ++ animations/step_05_b/analysis_options.yaml | 13 + animations/step_05_b/android/.gitignore | 13 + animations/step_05_b/android/app/build.gradle | 44 ++ .../android/app/src/debug/AndroidManifest.xml | 7 + .../android/app/src/main/AndroidManifest.xml | 45 ++ .../kotlin/com/example/quiz/MainActivity.kt | 5 + .../res/drawable-v21/launch_background.xml | 12 + .../main/res/drawable/launch_background.xml | 12 + .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 544 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 442 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 721 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 1031 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 1443 bytes .../app/src/main/res/values-night/styles.xml | 18 + .../app/src/main/res/values/styles.xml | 18 + .../app/src/profile/AndroidManifest.xml | 7 + animations/step_05_b/android/build.gradle | 18 + .../step_05_b/android/gradle.properties | 3 + .../gradle/wrapper/gradle-wrapper.properties | 5 + animations/step_05_b/android/settings.gradle | 25 + animations/step_05_b/ios/.gitignore | 34 + .../ios/Flutter/AppFrameworkInfo.plist | 26 + .../step_05_b/ios/Flutter/Debug.xcconfig | 1 + .../step_05_b/ios/Flutter/Release.xcconfig | 1 + .../ios/Runner.xcodeproj/project.pbxproj | 616 +++++++++++++++ .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/WorkspaceSettings.xcsettings | 8 + .../xcshareddata/xcschemes/Runner.xcscheme | 98 +++ .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/WorkspaceSettings.xcsettings | 8 + .../step_05_b/ios/Runner/AppDelegate.swift | 13 + .../AppIcon.appiconset/Contents.json | 122 +++ .../Icon-App-1024x1024@1x.png | Bin 0 -> 10932 bytes .../AppIcon.appiconset/Icon-App-20x20@1x.png | Bin 0 -> 295 bytes .../AppIcon.appiconset/Icon-App-20x20@2x.png | Bin 0 -> 406 bytes .../AppIcon.appiconset/Icon-App-20x20@3x.png | Bin 0 -> 450 bytes .../AppIcon.appiconset/Icon-App-29x29@1x.png | Bin 0 -> 282 bytes .../AppIcon.appiconset/Icon-App-29x29@2x.png | Bin 0 -> 462 bytes .../AppIcon.appiconset/Icon-App-29x29@3x.png | Bin 0 -> 704 bytes .../AppIcon.appiconset/Icon-App-40x40@1x.png | Bin 0 -> 406 bytes .../AppIcon.appiconset/Icon-App-40x40@2x.png | Bin 0 -> 586 bytes .../AppIcon.appiconset/Icon-App-40x40@3x.png | Bin 0 -> 862 bytes .../AppIcon.appiconset/Icon-App-60x60@2x.png | Bin 0 -> 862 bytes .../AppIcon.appiconset/Icon-App-60x60@3x.png | Bin 0 -> 1674 bytes .../AppIcon.appiconset/Icon-App-76x76@1x.png | Bin 0 -> 762 bytes .../AppIcon.appiconset/Icon-App-76x76@2x.png | Bin 0 -> 1226 bytes .../Icon-App-83.5x83.5@2x.png | Bin 0 -> 1418 bytes .../LaunchImage.imageset/Contents.json | 23 + .../LaunchImage.imageset/LaunchImage.png | Bin 0 -> 68 bytes .../LaunchImage.imageset/LaunchImage@2x.png | Bin 0 -> 68 bytes .../LaunchImage.imageset/LaunchImage@3x.png | Bin 0 -> 68 bytes .../LaunchImage.imageset/README.md | 5 + .../Runner/Base.lproj/LaunchScreen.storyboard | 37 + .../ios/Runner/Base.lproj/Main.storyboard | 26 + animations/step_05_b/ios/Runner/Info.plist | 49 ++ .../ios/Runner/Runner-Bridging-Header.h | 1 + .../ios/RunnerTests/RunnerTests.swift | 12 + animations/step_05_b/lib/flip_effect.dart | 85 +++ animations/step_05_b/lib/home_screen.dart | 50 ++ animations/step_05_b/lib/main.dart | 33 + animations/step_05_b/lib/model.dart | 62 ++ animations/step_05_b/lib/question_screen.dart | 205 +++++ animations/step_05_b/lib/scoreboard.dart | 62 ++ animations/step_05_b/lib/view_model.dart | 43 ++ animations/step_05_b/linux/.gitignore | 1 + animations/step_05_b/linux/CMakeLists.txt | 145 ++++ .../step_05_b/linux/flutter/CMakeLists.txt | 88 +++ .../flutter/generated_plugin_registrant.cc | 11 + .../flutter/generated_plugin_registrant.h | 15 + .../linux/flutter/generated_plugins.cmake | 23 + animations/step_05_b/linux/main.cc | 6 + animations/step_05_b/linux/my_application.cc | 124 +++ animations/step_05_b/linux/my_application.h | 18 + animations/step_05_b/macos/.gitignore | 7 + .../macos/Flutter/Flutter-Debug.xcconfig | 1 + .../macos/Flutter/Flutter-Release.xcconfig | 1 + .../Flutter/GeneratedPluginRegistrant.swift | 10 + .../macos/Runner.xcodeproj/project.pbxproj | 705 ++++++++++++++++++ .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/xcschemes/Runner.xcscheme | 98 +++ .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../step_05_b/macos/Runner/AppDelegate.swift | 9 + .../AppIcon.appiconset/Contents.json | 68 ++ .../AppIcon.appiconset/app_icon_1024.png | Bin 0 -> 102994 bytes .../AppIcon.appiconset/app_icon_128.png | Bin 0 -> 5680 bytes .../AppIcon.appiconset/app_icon_16.png | Bin 0 -> 520 bytes .../AppIcon.appiconset/app_icon_256.png | Bin 0 -> 14142 bytes .../AppIcon.appiconset/app_icon_32.png | Bin 0 -> 1066 bytes .../AppIcon.appiconset/app_icon_512.png | Bin 0 -> 36406 bytes .../AppIcon.appiconset/app_icon_64.png | Bin 0 -> 2218 bytes .../macos/Runner/Base.lproj/MainMenu.xib | 343 +++++++++ .../macos/Runner/Configs/AppInfo.xcconfig | 14 + .../macos/Runner/Configs/Debug.xcconfig | 2 + .../macos/Runner/Configs/Release.xcconfig | 2 + .../macos/Runner/Configs/Warnings.xcconfig | 13 + .../macos/Runner/DebugProfile.entitlements | 12 + animations/step_05_b/macos/Runner/Info.plist | 32 + .../macos/Runner/MainFlutterWindow.swift | 15 + .../macos/Runner/Release.entitlements | 8 + .../macos/RunnerTests/RunnerTests.swift | 12 + animations/step_05_b/pubspec.yaml | 21 + animations/step_05_b/web/favicon.png | Bin 0 -> 917 bytes animations/step_05_b/web/icons/Icon-192.png | Bin 0 -> 5292 bytes animations/step_05_b/web/icons/Icon-512.png | Bin 0 -> 8252 bytes .../step_05_b/web/icons/Icon-maskable-192.png | Bin 0 -> 5594 bytes .../step_05_b/web/icons/Icon-maskable-512.png | Bin 0 -> 20998 bytes animations/step_05_b/web/index.html | 38 + animations/step_05_b/web/manifest.json | 35 + animations/step_05_b/windows/.gitignore | 17 + animations/step_05_b/windows/CMakeLists.txt | 108 +++ .../step_05_b/windows/flutter/CMakeLists.txt | 109 +++ .../flutter/generated_plugin_registrant.cc | 11 + .../flutter/generated_plugin_registrant.h | 15 + .../windows/flutter/generated_plugins.cmake | 23 + .../step_05_b/windows/runner/CMakeLists.txt | 40 + animations/step_05_b/windows/runner/Runner.rc | 121 +++ .../windows/runner/flutter_window.cpp | 71 ++ .../step_05_b/windows/runner/flutter_window.h | 33 + animations/step_05_b/windows/runner/main.cpp | 43 ++ .../step_05_b/windows/runner/resource.h | 16 + .../windows/runner/resources/app_icon.ico | Bin 0 -> 33772 bytes .../windows/runner/runner.exe.manifest | 14 + animations/step_05_b/windows/runner/utils.cpp | 65 ++ animations/step_05_b/windows/runner/utils.h | 19 + .../step_05_b/windows/runner/win32_window.cpp | 288 +++++++ .../step_05_b/windows/runner/win32_window.h | 102 +++ animations/step_05_c/.gitignore | 43 ++ animations/step_05_c/analysis_options.yaml | 13 + animations/step_05_c/android/.gitignore | 13 + animations/step_05_c/android/app/build.gradle | 44 ++ .../android/app/src/debug/AndroidManifest.xml | 7 + .../android/app/src/main/AndroidManifest.xml | 45 ++ .../kotlin/com/example/quiz/MainActivity.kt | 5 + .../res/drawable-v21/launch_background.xml | 12 + .../main/res/drawable/launch_background.xml | 12 + .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 544 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 442 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 721 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 1031 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 1443 bytes .../app/src/main/res/values-night/styles.xml | 18 + .../app/src/main/res/values/styles.xml | 18 + .../app/src/profile/AndroidManifest.xml | 7 + animations/step_05_c/android/build.gradle | 18 + .../step_05_c/android/gradle.properties | 3 + .../gradle/wrapper/gradle-wrapper.properties | 5 + animations/step_05_c/android/settings.gradle | 25 + animations/step_05_c/ios/.gitignore | 34 + .../ios/Flutter/AppFrameworkInfo.plist | 26 + .../step_05_c/ios/Flutter/Debug.xcconfig | 1 + .../step_05_c/ios/Flutter/Release.xcconfig | 1 + .../ios/Runner.xcodeproj/project.pbxproj | 616 +++++++++++++++ .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/WorkspaceSettings.xcsettings | 8 + .../xcshareddata/xcschemes/Runner.xcscheme | 98 +++ .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/WorkspaceSettings.xcsettings | 8 + .../step_05_c/ios/Runner/AppDelegate.swift | 13 + .../AppIcon.appiconset/Contents.json | 122 +++ .../Icon-App-1024x1024@1x.png | Bin 0 -> 10932 bytes .../AppIcon.appiconset/Icon-App-20x20@1x.png | Bin 0 -> 295 bytes .../AppIcon.appiconset/Icon-App-20x20@2x.png | Bin 0 -> 406 bytes .../AppIcon.appiconset/Icon-App-20x20@3x.png | Bin 0 -> 450 bytes .../AppIcon.appiconset/Icon-App-29x29@1x.png | Bin 0 -> 282 bytes .../AppIcon.appiconset/Icon-App-29x29@2x.png | Bin 0 -> 462 bytes .../AppIcon.appiconset/Icon-App-29x29@3x.png | Bin 0 -> 704 bytes .../AppIcon.appiconset/Icon-App-40x40@1x.png | Bin 0 -> 406 bytes .../AppIcon.appiconset/Icon-App-40x40@2x.png | Bin 0 -> 586 bytes .../AppIcon.appiconset/Icon-App-40x40@3x.png | Bin 0 -> 862 bytes .../AppIcon.appiconset/Icon-App-60x60@2x.png | Bin 0 -> 862 bytes .../AppIcon.appiconset/Icon-App-60x60@3x.png | Bin 0 -> 1674 bytes .../AppIcon.appiconset/Icon-App-76x76@1x.png | Bin 0 -> 762 bytes .../AppIcon.appiconset/Icon-App-76x76@2x.png | Bin 0 -> 1226 bytes .../Icon-App-83.5x83.5@2x.png | Bin 0 -> 1418 bytes .../LaunchImage.imageset/Contents.json | 23 + .../LaunchImage.imageset/LaunchImage.png | Bin 0 -> 68 bytes .../LaunchImage.imageset/LaunchImage@2x.png | Bin 0 -> 68 bytes .../LaunchImage.imageset/LaunchImage@3x.png | Bin 0 -> 68 bytes .../LaunchImage.imageset/README.md | 5 + .../Runner/Base.lproj/LaunchScreen.storyboard | 37 + .../ios/Runner/Base.lproj/Main.storyboard | 26 + animations/step_05_c/ios/Runner/Info.plist | 49 ++ .../ios/Runner/Runner-Bridging-Header.h | 1 + .../ios/RunnerTests/RunnerTests.swift | 12 + animations/step_05_c/lib/flip_effect.dart | 85 +++ animations/step_05_c/lib/home_screen.dart | 41 + animations/step_05_c/lib/main.dart | 33 + animations/step_05_c/lib/model.dart | 62 ++ animations/step_05_c/lib/question_screen.dart | 200 +++++ animations/step_05_c/lib/scoreboard.dart | 62 ++ animations/step_05_c/lib/view_model.dart | 43 ++ animations/step_05_c/linux/.gitignore | 1 + animations/step_05_c/linux/CMakeLists.txt | 145 ++++ .../step_05_c/linux/flutter/CMakeLists.txt | 88 +++ .../flutter/generated_plugin_registrant.cc | 11 + .../flutter/generated_plugin_registrant.h | 15 + .../linux/flutter/generated_plugins.cmake | 23 + animations/step_05_c/linux/main.cc | 6 + animations/step_05_c/linux/my_application.cc | 124 +++ animations/step_05_c/linux/my_application.h | 18 + animations/step_05_c/macos/.gitignore | 7 + .../macos/Flutter/Flutter-Debug.xcconfig | 1 + .../macos/Flutter/Flutter-Release.xcconfig | 1 + .../Flutter/GeneratedPluginRegistrant.swift | 10 + .../macos/Runner.xcodeproj/project.pbxproj | 705 ++++++++++++++++++ .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/xcschemes/Runner.xcscheme | 98 +++ .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../step_05_c/macos/Runner/AppDelegate.swift | 9 + .../AppIcon.appiconset/Contents.json | 68 ++ .../AppIcon.appiconset/app_icon_1024.png | Bin 0 -> 102994 bytes .../AppIcon.appiconset/app_icon_128.png | Bin 0 -> 5680 bytes .../AppIcon.appiconset/app_icon_16.png | Bin 0 -> 520 bytes .../AppIcon.appiconset/app_icon_256.png | Bin 0 -> 14142 bytes .../AppIcon.appiconset/app_icon_32.png | Bin 0 -> 1066 bytes .../AppIcon.appiconset/app_icon_512.png | Bin 0 -> 36406 bytes .../AppIcon.appiconset/app_icon_64.png | Bin 0 -> 2218 bytes .../macos/Runner/Base.lproj/MainMenu.xib | 343 +++++++++ .../macos/Runner/Configs/AppInfo.xcconfig | 14 + .../macos/Runner/Configs/Debug.xcconfig | 2 + .../macos/Runner/Configs/Release.xcconfig | 2 + .../macos/Runner/Configs/Warnings.xcconfig | 13 + .../macos/Runner/DebugProfile.entitlements | 12 + animations/step_05_c/macos/Runner/Info.plist | 32 + .../macos/Runner/MainFlutterWindow.swift | 15 + .../macos/Runner/Release.entitlements | 8 + .../macos/RunnerTests/RunnerTests.swift | 12 + animations/step_05_c/pubspec.yaml | 21 + animations/step_05_c/web/favicon.png | Bin 0 -> 917 bytes animations/step_05_c/web/icons/Icon-192.png | Bin 0 -> 5292 bytes animations/step_05_c/web/icons/Icon-512.png | Bin 0 -> 8252 bytes .../step_05_c/web/icons/Icon-maskable-192.png | Bin 0 -> 5594 bytes .../step_05_c/web/icons/Icon-maskable-512.png | Bin 0 -> 20998 bytes animations/step_05_c/web/index.html | 38 + animations/step_05_c/web/manifest.json | 35 + animations/step_05_c/windows/.gitignore | 17 + animations/step_05_c/windows/CMakeLists.txt | 108 +++ .../step_05_c/windows/flutter/CMakeLists.txt | 109 +++ .../flutter/generated_plugin_registrant.cc | 11 + .../flutter/generated_plugin_registrant.h | 15 + .../windows/flutter/generated_plugins.cmake | 23 + .../step_05_c/windows/runner/CMakeLists.txt | 40 + animations/step_05_c/windows/runner/Runner.rc | 121 +++ .../windows/runner/flutter_window.cpp | 71 ++ .../step_05_c/windows/runner/flutter_window.h | 33 + animations/step_05_c/windows/runner/main.cpp | 43 ++ .../step_05_c/windows/runner/resource.h | 16 + .../windows/runner/resources/app_icon.ico | Bin 0 -> 33772 bytes .../windows/runner/runner.exe.manifest | 14 + animations/step_05_c/windows/runner/utils.cpp | 65 ++ animations/step_05_c/windows/runner/utils.h | 19 + .../step_05_c/windows/runner/win32_window.cpp | 288 +++++++ .../step_05_c/windows/runner/win32_window.h | 102 +++ animations/step_05_d/.gitignore | 43 ++ animations/step_05_d/analysis_options.yaml | 13 + animations/step_05_d/android/.gitignore | 13 + animations/step_05_d/android/app/build.gradle | 44 ++ .../android/app/src/debug/AndroidManifest.xml | 7 + .../android/app/src/main/AndroidManifest.xml | 45 ++ .../kotlin/com/example/quiz/MainActivity.kt | 5 + .../res/drawable-v21/launch_background.xml | 12 + .../main/res/drawable/launch_background.xml | 12 + .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 544 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 442 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 721 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 1031 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 1443 bytes .../app/src/main/res/values-night/styles.xml | 18 + .../app/src/main/res/values/styles.xml | 18 + .../app/src/profile/AndroidManifest.xml | 7 + animations/step_05_d/android/build.gradle | 18 + .../step_05_d/android/gradle.properties | 3 + .../gradle/wrapper/gradle-wrapper.properties | 5 + animations/step_05_d/android/settings.gradle | 25 + animations/step_05_d/ios/.gitignore | 34 + .../ios/Flutter/AppFrameworkInfo.plist | 26 + .../step_05_d/ios/Flutter/Debug.xcconfig | 1 + .../step_05_d/ios/Flutter/Release.xcconfig | 1 + .../ios/Runner.xcodeproj/project.pbxproj | 616 +++++++++++++++ .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/WorkspaceSettings.xcsettings | 8 + .../xcshareddata/xcschemes/Runner.xcscheme | 98 +++ .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/WorkspaceSettings.xcsettings | 8 + .../step_05_d/ios/Runner/AppDelegate.swift | 13 + .../AppIcon.appiconset/Contents.json | 122 +++ .../Icon-App-1024x1024@1x.png | Bin 0 -> 10932 bytes .../AppIcon.appiconset/Icon-App-20x20@1x.png | Bin 0 -> 295 bytes .../AppIcon.appiconset/Icon-App-20x20@2x.png | Bin 0 -> 406 bytes .../AppIcon.appiconset/Icon-App-20x20@3x.png | Bin 0 -> 450 bytes .../AppIcon.appiconset/Icon-App-29x29@1x.png | Bin 0 -> 282 bytes .../AppIcon.appiconset/Icon-App-29x29@2x.png | Bin 0 -> 462 bytes .../AppIcon.appiconset/Icon-App-29x29@3x.png | Bin 0 -> 704 bytes .../AppIcon.appiconset/Icon-App-40x40@1x.png | Bin 0 -> 406 bytes .../AppIcon.appiconset/Icon-App-40x40@2x.png | Bin 0 -> 586 bytes .../AppIcon.appiconset/Icon-App-40x40@3x.png | Bin 0 -> 862 bytes .../AppIcon.appiconset/Icon-App-60x60@2x.png | Bin 0 -> 862 bytes .../AppIcon.appiconset/Icon-App-60x60@3x.png | Bin 0 -> 1674 bytes .../AppIcon.appiconset/Icon-App-76x76@1x.png | Bin 0 -> 762 bytes .../AppIcon.appiconset/Icon-App-76x76@2x.png | Bin 0 -> 1226 bytes .../Icon-App-83.5x83.5@2x.png | Bin 0 -> 1418 bytes .../LaunchImage.imageset/Contents.json | 23 + .../LaunchImage.imageset/LaunchImage.png | Bin 0 -> 68 bytes .../LaunchImage.imageset/LaunchImage@2x.png | Bin 0 -> 68 bytes .../LaunchImage.imageset/LaunchImage@3x.png | Bin 0 -> 68 bytes .../LaunchImage.imageset/README.md | 5 + .../Runner/Base.lproj/LaunchScreen.storyboard | 37 + .../ios/Runner/Base.lproj/Main.storyboard | 26 + animations/step_05_d/ios/Runner/Info.plist | 49 ++ .../ios/Runner/Runner-Bridging-Header.h | 1 + .../ios/RunnerTests/RunnerTests.swift | 12 + animations/step_05_d/lib/flip_effect.dart | 85 +++ animations/step_05_d/lib/home_screen.dart | 41 + animations/step_05_d/lib/main.dart | 33 + animations/step_05_d/lib/model.dart | 62 ++ animations/step_05_d/lib/question_screen.dart | 250 +++++++ animations/step_05_d/lib/scoreboard.dart | 62 ++ animations/step_05_d/lib/view_model.dart | 43 ++ animations/step_05_d/linux/.gitignore | 1 + animations/step_05_d/linux/CMakeLists.txt | 145 ++++ .../step_05_d/linux/flutter/CMakeLists.txt | 88 +++ .../flutter/generated_plugin_registrant.cc | 11 + .../flutter/generated_plugin_registrant.h | 15 + .../linux/flutter/generated_plugins.cmake | 23 + animations/step_05_d/linux/main.cc | 6 + animations/step_05_d/linux/my_application.cc | 124 +++ animations/step_05_d/linux/my_application.h | 18 + animations/step_05_d/macos/.gitignore | 7 + .../macos/Flutter/Flutter-Debug.xcconfig | 1 + .../macos/Flutter/Flutter-Release.xcconfig | 1 + .../Flutter/GeneratedPluginRegistrant.swift | 10 + .../macos/Runner.xcodeproj/project.pbxproj | 705 ++++++++++++++++++ .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/xcschemes/Runner.xcscheme | 98 +++ .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../step_05_d/macos/Runner/AppDelegate.swift | 9 + .../AppIcon.appiconset/Contents.json | 68 ++ .../AppIcon.appiconset/app_icon_1024.png | Bin 0 -> 102994 bytes .../AppIcon.appiconset/app_icon_128.png | Bin 0 -> 5680 bytes .../AppIcon.appiconset/app_icon_16.png | Bin 0 -> 520 bytes .../AppIcon.appiconset/app_icon_256.png | Bin 0 -> 14142 bytes .../AppIcon.appiconset/app_icon_32.png | Bin 0 -> 1066 bytes .../AppIcon.appiconset/app_icon_512.png | Bin 0 -> 36406 bytes .../AppIcon.appiconset/app_icon_64.png | Bin 0 -> 2218 bytes .../macos/Runner/Base.lproj/MainMenu.xib | 343 +++++++++ .../macos/Runner/Configs/AppInfo.xcconfig | 14 + .../macos/Runner/Configs/Debug.xcconfig | 2 + .../macos/Runner/Configs/Release.xcconfig | 2 + .../macos/Runner/Configs/Warnings.xcconfig | 13 + .../macos/Runner/DebugProfile.entitlements | 12 + animations/step_05_d/macos/Runner/Info.plist | 32 + .../macos/Runner/MainFlutterWindow.swift | 15 + .../macos/Runner/Release.entitlements | 8 + .../macos/RunnerTests/RunnerTests.swift | 12 + animations/step_05_d/pubspec.yaml | 21 + animations/step_05_d/web/favicon.png | Bin 0 -> 917 bytes animations/step_05_d/web/icons/Icon-192.png | Bin 0 -> 5292 bytes animations/step_05_d/web/icons/Icon-512.png | Bin 0 -> 8252 bytes .../step_05_d/web/icons/Icon-maskable-192.png | Bin 0 -> 5594 bytes .../step_05_d/web/icons/Icon-maskable-512.png | Bin 0 -> 20998 bytes animations/step_05_d/web/index.html | 38 + animations/step_05_d/web/manifest.json | 35 + animations/step_05_d/windows/.gitignore | 17 + animations/step_05_d/windows/CMakeLists.txt | 108 +++ .../step_05_d/windows/flutter/CMakeLists.txt | 109 +++ .../flutter/generated_plugin_registrant.cc | 11 + .../flutter/generated_plugin_registrant.h | 15 + .../windows/flutter/generated_plugins.cmake | 23 + .../step_05_d/windows/runner/CMakeLists.txt | 40 + animations/step_05_d/windows/runner/Runner.rc | 121 +++ .../windows/runner/flutter_window.cpp | 71 ++ .../step_05_d/windows/runner/flutter_window.h | 33 + animations/step_05_d/windows/runner/main.cpp | 43 ++ .../step_05_d/windows/runner/resource.h | 16 + .../windows/runner/resources/app_icon.ico | Bin 0 -> 33772 bytes .../windows/runner/runner.exe.manifest | 14 + animations/step_05_d/windows/runner/utils.cpp | 65 ++ animations/step_05_d/windows/runner/utils.h | 19 + .../step_05_d/windows/runner/win32_window.cpp | 288 +++++++ .../step_05_d/windows/runner/win32_window.h | 102 +++ 521 files changed, 19766 insertions(+) create mode 100644 animations/step_05_a/.gitignore create mode 100644 animations/step_05_a/analysis_options.yaml create mode 100644 animations/step_05_a/android/.gitignore create mode 100644 animations/step_05_a/android/app/build.gradle create mode 100644 animations/step_05_a/android/app/src/debug/AndroidManifest.xml create mode 100644 animations/step_05_a/android/app/src/main/AndroidManifest.xml create mode 100644 animations/step_05_a/android/app/src/main/kotlin/com/example/quiz/MainActivity.kt create mode 100644 animations/step_05_a/android/app/src/main/res/drawable-v21/launch_background.xml create mode 100644 animations/step_05_a/android/app/src/main/res/drawable/launch_background.xml create mode 100644 animations/step_05_a/android/app/src/main/res/mipmap-hdpi/ic_launcher.png create mode 100644 animations/step_05_a/android/app/src/main/res/mipmap-mdpi/ic_launcher.png create mode 100644 animations/step_05_a/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png create mode 100644 animations/step_05_a/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 animations/step_05_a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 animations/step_05_a/android/app/src/main/res/values-night/styles.xml create mode 100644 animations/step_05_a/android/app/src/main/res/values/styles.xml create mode 100644 animations/step_05_a/android/app/src/profile/AndroidManifest.xml create mode 100644 animations/step_05_a/android/build.gradle create mode 100644 animations/step_05_a/android/gradle.properties create mode 100644 animations/step_05_a/android/gradle/wrapper/gradle-wrapper.properties create mode 100644 animations/step_05_a/android/settings.gradle create mode 100644 animations/step_05_a/ios/.gitignore create mode 100644 animations/step_05_a/ios/Flutter/AppFrameworkInfo.plist create mode 100644 animations/step_05_a/ios/Flutter/Debug.xcconfig create mode 100644 animations/step_05_a/ios/Flutter/Release.xcconfig create mode 100644 animations/step_05_a/ios/Runner.xcodeproj/project.pbxproj create mode 100644 animations/step_05_a/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 animations/step_05_a/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 animations/step_05_a/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings create mode 100644 animations/step_05_a/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme create mode 100644 animations/step_05_a/ios/Runner.xcworkspace/contents.xcworkspacedata create mode 100644 animations/step_05_a/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 animations/step_05_a/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings create mode 100644 animations/step_05_a/ios/Runner/AppDelegate.swift create mode 100644 animations/step_05_a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 animations/step_05_a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png create mode 100644 animations/step_05_a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png create mode 100644 animations/step_05_a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png create mode 100644 animations/step_05_a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png create mode 100644 animations/step_05_a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png create mode 100644 animations/step_05_a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png create mode 100644 animations/step_05_a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png create mode 100644 animations/step_05_a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png create mode 100644 animations/step_05_a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png create mode 100644 animations/step_05_a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png create mode 100644 animations/step_05_a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png create mode 100644 animations/step_05_a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png create mode 100644 animations/step_05_a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png create mode 100644 animations/step_05_a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png create mode 100644 animations/step_05_a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png create mode 100644 animations/step_05_a/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json create mode 100644 animations/step_05_a/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png create mode 100644 animations/step_05_a/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png create mode 100644 animations/step_05_a/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png create mode 100644 animations/step_05_a/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md create mode 100644 animations/step_05_a/ios/Runner/Base.lproj/LaunchScreen.storyboard create mode 100644 animations/step_05_a/ios/Runner/Base.lproj/Main.storyboard create mode 100644 animations/step_05_a/ios/Runner/Info.plist create mode 100644 animations/step_05_a/ios/Runner/Runner-Bridging-Header.h create mode 100644 animations/step_05_a/ios/RunnerTests/RunnerTests.swift create mode 100644 animations/step_05_a/lib/flip_effect.dart create mode 100644 animations/step_05_a/lib/home_screen.dart create mode 100644 animations/step_05_a/lib/main.dart create mode 100644 animations/step_05_a/lib/model.dart create mode 100644 animations/step_05_a/lib/question_screen.dart create mode 100644 animations/step_05_a/lib/scoreboard.dart create mode 100644 animations/step_05_a/lib/view_model.dart create mode 100644 animations/step_05_a/linux/.gitignore create mode 100644 animations/step_05_a/linux/CMakeLists.txt create mode 100644 animations/step_05_a/linux/flutter/CMakeLists.txt create mode 100644 animations/step_05_a/linux/flutter/generated_plugin_registrant.cc create mode 100644 animations/step_05_a/linux/flutter/generated_plugin_registrant.h create mode 100644 animations/step_05_a/linux/flutter/generated_plugins.cmake create mode 100644 animations/step_05_a/linux/main.cc create mode 100644 animations/step_05_a/linux/my_application.cc create mode 100644 animations/step_05_a/linux/my_application.h create mode 100644 animations/step_05_a/macos/.gitignore create mode 100644 animations/step_05_a/macos/Flutter/Flutter-Debug.xcconfig create mode 100644 animations/step_05_a/macos/Flutter/Flutter-Release.xcconfig create mode 100644 animations/step_05_a/macos/Flutter/GeneratedPluginRegistrant.swift create mode 100644 animations/step_05_a/macos/Runner.xcodeproj/project.pbxproj create mode 100644 animations/step_05_a/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 animations/step_05_a/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme create mode 100644 animations/step_05_a/macos/Runner.xcworkspace/contents.xcworkspacedata create mode 100644 animations/step_05_a/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 animations/step_05_a/macos/Runner/AppDelegate.swift create mode 100644 animations/step_05_a/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 animations/step_05_a/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png create mode 100644 animations/step_05_a/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png create mode 100644 animations/step_05_a/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png create mode 100644 animations/step_05_a/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png create mode 100644 animations/step_05_a/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png create mode 100644 animations/step_05_a/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png create mode 100644 animations/step_05_a/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png create mode 100644 animations/step_05_a/macos/Runner/Base.lproj/MainMenu.xib create mode 100644 animations/step_05_a/macos/Runner/Configs/AppInfo.xcconfig create mode 100644 animations/step_05_a/macos/Runner/Configs/Debug.xcconfig create mode 100644 animations/step_05_a/macos/Runner/Configs/Release.xcconfig create mode 100644 animations/step_05_a/macos/Runner/Configs/Warnings.xcconfig create mode 100644 animations/step_05_a/macos/Runner/DebugProfile.entitlements create mode 100644 animations/step_05_a/macos/Runner/Info.plist create mode 100644 animations/step_05_a/macos/Runner/MainFlutterWindow.swift create mode 100644 animations/step_05_a/macos/Runner/Release.entitlements create mode 100644 animations/step_05_a/macos/RunnerTests/RunnerTests.swift create mode 100644 animations/step_05_a/pubspec.yaml create mode 100644 animations/step_05_a/web/favicon.png create mode 100644 animations/step_05_a/web/icons/Icon-192.png create mode 100644 animations/step_05_a/web/icons/Icon-512.png create mode 100644 animations/step_05_a/web/icons/Icon-maskable-192.png create mode 100644 animations/step_05_a/web/icons/Icon-maskable-512.png create mode 100644 animations/step_05_a/web/index.html create mode 100644 animations/step_05_a/web/manifest.json create mode 100644 animations/step_05_a/windows/.gitignore create mode 100644 animations/step_05_a/windows/CMakeLists.txt create mode 100644 animations/step_05_a/windows/flutter/CMakeLists.txt create mode 100644 animations/step_05_a/windows/flutter/generated_plugin_registrant.cc create mode 100644 animations/step_05_a/windows/flutter/generated_plugin_registrant.h create mode 100644 animations/step_05_a/windows/flutter/generated_plugins.cmake create mode 100644 animations/step_05_a/windows/runner/CMakeLists.txt create mode 100644 animations/step_05_a/windows/runner/Runner.rc create mode 100644 animations/step_05_a/windows/runner/flutter_window.cpp create mode 100644 animations/step_05_a/windows/runner/flutter_window.h create mode 100644 animations/step_05_a/windows/runner/main.cpp create mode 100644 animations/step_05_a/windows/runner/resource.h create mode 100644 animations/step_05_a/windows/runner/resources/app_icon.ico create mode 100644 animations/step_05_a/windows/runner/runner.exe.manifest create mode 100644 animations/step_05_a/windows/runner/utils.cpp create mode 100644 animations/step_05_a/windows/runner/utils.h create mode 100644 animations/step_05_a/windows/runner/win32_window.cpp create mode 100644 animations/step_05_a/windows/runner/win32_window.h create mode 100644 animations/step_05_b/.gitignore create mode 100644 animations/step_05_b/analysis_options.yaml create mode 100644 animations/step_05_b/android/.gitignore create mode 100644 animations/step_05_b/android/app/build.gradle create mode 100644 animations/step_05_b/android/app/src/debug/AndroidManifest.xml create mode 100644 animations/step_05_b/android/app/src/main/AndroidManifest.xml create mode 100644 animations/step_05_b/android/app/src/main/kotlin/com/example/quiz/MainActivity.kt create mode 100644 animations/step_05_b/android/app/src/main/res/drawable-v21/launch_background.xml create mode 100644 animations/step_05_b/android/app/src/main/res/drawable/launch_background.xml create mode 100644 animations/step_05_b/android/app/src/main/res/mipmap-hdpi/ic_launcher.png create mode 100644 animations/step_05_b/android/app/src/main/res/mipmap-mdpi/ic_launcher.png create mode 100644 animations/step_05_b/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png create mode 100644 animations/step_05_b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 animations/step_05_b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 animations/step_05_b/android/app/src/main/res/values-night/styles.xml create mode 100644 animations/step_05_b/android/app/src/main/res/values/styles.xml create mode 100644 animations/step_05_b/android/app/src/profile/AndroidManifest.xml create mode 100644 animations/step_05_b/android/build.gradle create mode 100644 animations/step_05_b/android/gradle.properties create mode 100644 animations/step_05_b/android/gradle/wrapper/gradle-wrapper.properties create mode 100644 animations/step_05_b/android/settings.gradle create mode 100644 animations/step_05_b/ios/.gitignore create mode 100644 animations/step_05_b/ios/Flutter/AppFrameworkInfo.plist create mode 100644 animations/step_05_b/ios/Flutter/Debug.xcconfig create mode 100644 animations/step_05_b/ios/Flutter/Release.xcconfig create mode 100644 animations/step_05_b/ios/Runner.xcodeproj/project.pbxproj create mode 100644 animations/step_05_b/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 animations/step_05_b/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 animations/step_05_b/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings create mode 100644 animations/step_05_b/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme create mode 100644 animations/step_05_b/ios/Runner.xcworkspace/contents.xcworkspacedata create mode 100644 animations/step_05_b/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 animations/step_05_b/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings create mode 100644 animations/step_05_b/ios/Runner/AppDelegate.swift create mode 100644 animations/step_05_b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 animations/step_05_b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png create mode 100644 animations/step_05_b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png create mode 100644 animations/step_05_b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png create mode 100644 animations/step_05_b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png create mode 100644 animations/step_05_b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png create mode 100644 animations/step_05_b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png create mode 100644 animations/step_05_b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png create mode 100644 animations/step_05_b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png create mode 100644 animations/step_05_b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png create mode 100644 animations/step_05_b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png create mode 100644 animations/step_05_b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png create mode 100644 animations/step_05_b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png create mode 100644 animations/step_05_b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png create mode 100644 animations/step_05_b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png create mode 100644 animations/step_05_b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png create mode 100644 animations/step_05_b/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json create mode 100644 animations/step_05_b/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png create mode 100644 animations/step_05_b/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png create mode 100644 animations/step_05_b/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png create mode 100644 animations/step_05_b/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md create mode 100644 animations/step_05_b/ios/Runner/Base.lproj/LaunchScreen.storyboard create mode 100644 animations/step_05_b/ios/Runner/Base.lproj/Main.storyboard create mode 100644 animations/step_05_b/ios/Runner/Info.plist create mode 100644 animations/step_05_b/ios/Runner/Runner-Bridging-Header.h create mode 100644 animations/step_05_b/ios/RunnerTests/RunnerTests.swift create mode 100644 animations/step_05_b/lib/flip_effect.dart create mode 100644 animations/step_05_b/lib/home_screen.dart create mode 100644 animations/step_05_b/lib/main.dart create mode 100644 animations/step_05_b/lib/model.dart create mode 100644 animations/step_05_b/lib/question_screen.dart create mode 100644 animations/step_05_b/lib/scoreboard.dart create mode 100644 animations/step_05_b/lib/view_model.dart create mode 100644 animations/step_05_b/linux/.gitignore create mode 100644 animations/step_05_b/linux/CMakeLists.txt create mode 100644 animations/step_05_b/linux/flutter/CMakeLists.txt create mode 100644 animations/step_05_b/linux/flutter/generated_plugin_registrant.cc create mode 100644 animations/step_05_b/linux/flutter/generated_plugin_registrant.h create mode 100644 animations/step_05_b/linux/flutter/generated_plugins.cmake create mode 100644 animations/step_05_b/linux/main.cc create mode 100644 animations/step_05_b/linux/my_application.cc create mode 100644 animations/step_05_b/linux/my_application.h create mode 100644 animations/step_05_b/macos/.gitignore create mode 100644 animations/step_05_b/macos/Flutter/Flutter-Debug.xcconfig create mode 100644 animations/step_05_b/macos/Flutter/Flutter-Release.xcconfig create mode 100644 animations/step_05_b/macos/Flutter/GeneratedPluginRegistrant.swift create mode 100644 animations/step_05_b/macos/Runner.xcodeproj/project.pbxproj create mode 100644 animations/step_05_b/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 animations/step_05_b/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme create mode 100644 animations/step_05_b/macos/Runner.xcworkspace/contents.xcworkspacedata create mode 100644 animations/step_05_b/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 animations/step_05_b/macos/Runner/AppDelegate.swift create mode 100644 animations/step_05_b/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 animations/step_05_b/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png create mode 100644 animations/step_05_b/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png create mode 100644 animations/step_05_b/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png create mode 100644 animations/step_05_b/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png create mode 100644 animations/step_05_b/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png create mode 100644 animations/step_05_b/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png create mode 100644 animations/step_05_b/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png create mode 100644 animations/step_05_b/macos/Runner/Base.lproj/MainMenu.xib create mode 100644 animations/step_05_b/macos/Runner/Configs/AppInfo.xcconfig create mode 100644 animations/step_05_b/macos/Runner/Configs/Debug.xcconfig create mode 100644 animations/step_05_b/macos/Runner/Configs/Release.xcconfig create mode 100644 animations/step_05_b/macos/Runner/Configs/Warnings.xcconfig create mode 100644 animations/step_05_b/macos/Runner/DebugProfile.entitlements create mode 100644 animations/step_05_b/macos/Runner/Info.plist create mode 100644 animations/step_05_b/macos/Runner/MainFlutterWindow.swift create mode 100644 animations/step_05_b/macos/Runner/Release.entitlements create mode 100644 animations/step_05_b/macos/RunnerTests/RunnerTests.swift create mode 100644 animations/step_05_b/pubspec.yaml create mode 100644 animations/step_05_b/web/favicon.png create mode 100644 animations/step_05_b/web/icons/Icon-192.png create mode 100644 animations/step_05_b/web/icons/Icon-512.png create mode 100644 animations/step_05_b/web/icons/Icon-maskable-192.png create mode 100644 animations/step_05_b/web/icons/Icon-maskable-512.png create mode 100644 animations/step_05_b/web/index.html create mode 100644 animations/step_05_b/web/manifest.json create mode 100644 animations/step_05_b/windows/.gitignore create mode 100644 animations/step_05_b/windows/CMakeLists.txt create mode 100644 animations/step_05_b/windows/flutter/CMakeLists.txt create mode 100644 animations/step_05_b/windows/flutter/generated_plugin_registrant.cc create mode 100644 animations/step_05_b/windows/flutter/generated_plugin_registrant.h create mode 100644 animations/step_05_b/windows/flutter/generated_plugins.cmake create mode 100644 animations/step_05_b/windows/runner/CMakeLists.txt create mode 100644 animations/step_05_b/windows/runner/Runner.rc create mode 100644 animations/step_05_b/windows/runner/flutter_window.cpp create mode 100644 animations/step_05_b/windows/runner/flutter_window.h create mode 100644 animations/step_05_b/windows/runner/main.cpp create mode 100644 animations/step_05_b/windows/runner/resource.h create mode 100644 animations/step_05_b/windows/runner/resources/app_icon.ico create mode 100644 animations/step_05_b/windows/runner/runner.exe.manifest create mode 100644 animations/step_05_b/windows/runner/utils.cpp create mode 100644 animations/step_05_b/windows/runner/utils.h create mode 100644 animations/step_05_b/windows/runner/win32_window.cpp create mode 100644 animations/step_05_b/windows/runner/win32_window.h create mode 100644 animations/step_05_c/.gitignore create mode 100644 animations/step_05_c/analysis_options.yaml create mode 100644 animations/step_05_c/android/.gitignore create mode 100644 animations/step_05_c/android/app/build.gradle create mode 100644 animations/step_05_c/android/app/src/debug/AndroidManifest.xml create mode 100644 animations/step_05_c/android/app/src/main/AndroidManifest.xml create mode 100644 animations/step_05_c/android/app/src/main/kotlin/com/example/quiz/MainActivity.kt create mode 100644 animations/step_05_c/android/app/src/main/res/drawable-v21/launch_background.xml create mode 100644 animations/step_05_c/android/app/src/main/res/drawable/launch_background.xml create mode 100644 animations/step_05_c/android/app/src/main/res/mipmap-hdpi/ic_launcher.png create mode 100644 animations/step_05_c/android/app/src/main/res/mipmap-mdpi/ic_launcher.png create mode 100644 animations/step_05_c/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png create mode 100644 animations/step_05_c/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 animations/step_05_c/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 animations/step_05_c/android/app/src/main/res/values-night/styles.xml create mode 100644 animations/step_05_c/android/app/src/main/res/values/styles.xml create mode 100644 animations/step_05_c/android/app/src/profile/AndroidManifest.xml create mode 100644 animations/step_05_c/android/build.gradle create mode 100644 animations/step_05_c/android/gradle.properties create mode 100644 animations/step_05_c/android/gradle/wrapper/gradle-wrapper.properties create mode 100644 animations/step_05_c/android/settings.gradle create mode 100644 animations/step_05_c/ios/.gitignore create mode 100644 animations/step_05_c/ios/Flutter/AppFrameworkInfo.plist create mode 100644 animations/step_05_c/ios/Flutter/Debug.xcconfig create mode 100644 animations/step_05_c/ios/Flutter/Release.xcconfig create mode 100644 animations/step_05_c/ios/Runner.xcodeproj/project.pbxproj create mode 100644 animations/step_05_c/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 animations/step_05_c/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 animations/step_05_c/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings create mode 100644 animations/step_05_c/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme create mode 100644 animations/step_05_c/ios/Runner.xcworkspace/contents.xcworkspacedata create mode 100644 animations/step_05_c/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 animations/step_05_c/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings create mode 100644 animations/step_05_c/ios/Runner/AppDelegate.swift create mode 100644 animations/step_05_c/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 animations/step_05_c/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png create mode 100644 animations/step_05_c/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png create mode 100644 animations/step_05_c/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png create mode 100644 animations/step_05_c/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png create mode 100644 animations/step_05_c/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png create mode 100644 animations/step_05_c/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png create mode 100644 animations/step_05_c/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png create mode 100644 animations/step_05_c/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png create mode 100644 animations/step_05_c/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png create mode 100644 animations/step_05_c/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png create mode 100644 animations/step_05_c/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png create mode 100644 animations/step_05_c/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png create mode 100644 animations/step_05_c/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png create mode 100644 animations/step_05_c/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png create mode 100644 animations/step_05_c/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png create mode 100644 animations/step_05_c/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json create mode 100644 animations/step_05_c/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png create mode 100644 animations/step_05_c/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png create mode 100644 animations/step_05_c/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png create mode 100644 animations/step_05_c/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md create mode 100644 animations/step_05_c/ios/Runner/Base.lproj/LaunchScreen.storyboard create mode 100644 animations/step_05_c/ios/Runner/Base.lproj/Main.storyboard create mode 100644 animations/step_05_c/ios/Runner/Info.plist create mode 100644 animations/step_05_c/ios/Runner/Runner-Bridging-Header.h create mode 100644 animations/step_05_c/ios/RunnerTests/RunnerTests.swift create mode 100644 animations/step_05_c/lib/flip_effect.dart create mode 100644 animations/step_05_c/lib/home_screen.dart create mode 100644 animations/step_05_c/lib/main.dart create mode 100644 animations/step_05_c/lib/model.dart create mode 100644 animations/step_05_c/lib/question_screen.dart create mode 100644 animations/step_05_c/lib/scoreboard.dart create mode 100644 animations/step_05_c/lib/view_model.dart create mode 100644 animations/step_05_c/linux/.gitignore create mode 100644 animations/step_05_c/linux/CMakeLists.txt create mode 100644 animations/step_05_c/linux/flutter/CMakeLists.txt create mode 100644 animations/step_05_c/linux/flutter/generated_plugin_registrant.cc create mode 100644 animations/step_05_c/linux/flutter/generated_plugin_registrant.h create mode 100644 animations/step_05_c/linux/flutter/generated_plugins.cmake create mode 100644 animations/step_05_c/linux/main.cc create mode 100644 animations/step_05_c/linux/my_application.cc create mode 100644 animations/step_05_c/linux/my_application.h create mode 100644 animations/step_05_c/macos/.gitignore create mode 100644 animations/step_05_c/macos/Flutter/Flutter-Debug.xcconfig create mode 100644 animations/step_05_c/macos/Flutter/Flutter-Release.xcconfig create mode 100644 animations/step_05_c/macos/Flutter/GeneratedPluginRegistrant.swift create mode 100644 animations/step_05_c/macos/Runner.xcodeproj/project.pbxproj create mode 100644 animations/step_05_c/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 animations/step_05_c/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme create mode 100644 animations/step_05_c/macos/Runner.xcworkspace/contents.xcworkspacedata create mode 100644 animations/step_05_c/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 animations/step_05_c/macos/Runner/AppDelegate.swift create mode 100644 animations/step_05_c/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 animations/step_05_c/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png create mode 100644 animations/step_05_c/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png create mode 100644 animations/step_05_c/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png create mode 100644 animations/step_05_c/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png create mode 100644 animations/step_05_c/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png create mode 100644 animations/step_05_c/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png create mode 100644 animations/step_05_c/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png create mode 100644 animations/step_05_c/macos/Runner/Base.lproj/MainMenu.xib create mode 100644 animations/step_05_c/macos/Runner/Configs/AppInfo.xcconfig create mode 100644 animations/step_05_c/macos/Runner/Configs/Debug.xcconfig create mode 100644 animations/step_05_c/macos/Runner/Configs/Release.xcconfig create mode 100644 animations/step_05_c/macos/Runner/Configs/Warnings.xcconfig create mode 100644 animations/step_05_c/macos/Runner/DebugProfile.entitlements create mode 100644 animations/step_05_c/macos/Runner/Info.plist create mode 100644 animations/step_05_c/macos/Runner/MainFlutterWindow.swift create mode 100644 animations/step_05_c/macos/Runner/Release.entitlements create mode 100644 animations/step_05_c/macos/RunnerTests/RunnerTests.swift create mode 100644 animations/step_05_c/pubspec.yaml create mode 100644 animations/step_05_c/web/favicon.png create mode 100644 animations/step_05_c/web/icons/Icon-192.png create mode 100644 animations/step_05_c/web/icons/Icon-512.png create mode 100644 animations/step_05_c/web/icons/Icon-maskable-192.png create mode 100644 animations/step_05_c/web/icons/Icon-maskable-512.png create mode 100644 animations/step_05_c/web/index.html create mode 100644 animations/step_05_c/web/manifest.json create mode 100644 animations/step_05_c/windows/.gitignore create mode 100644 animations/step_05_c/windows/CMakeLists.txt create mode 100644 animations/step_05_c/windows/flutter/CMakeLists.txt create mode 100644 animations/step_05_c/windows/flutter/generated_plugin_registrant.cc create mode 100644 animations/step_05_c/windows/flutter/generated_plugin_registrant.h create mode 100644 animations/step_05_c/windows/flutter/generated_plugins.cmake create mode 100644 animations/step_05_c/windows/runner/CMakeLists.txt create mode 100644 animations/step_05_c/windows/runner/Runner.rc create mode 100644 animations/step_05_c/windows/runner/flutter_window.cpp create mode 100644 animations/step_05_c/windows/runner/flutter_window.h create mode 100644 animations/step_05_c/windows/runner/main.cpp create mode 100644 animations/step_05_c/windows/runner/resource.h create mode 100644 animations/step_05_c/windows/runner/resources/app_icon.ico create mode 100644 animations/step_05_c/windows/runner/runner.exe.manifest create mode 100644 animations/step_05_c/windows/runner/utils.cpp create mode 100644 animations/step_05_c/windows/runner/utils.h create mode 100644 animations/step_05_c/windows/runner/win32_window.cpp create mode 100644 animations/step_05_c/windows/runner/win32_window.h create mode 100644 animations/step_05_d/.gitignore create mode 100644 animations/step_05_d/analysis_options.yaml create mode 100644 animations/step_05_d/android/.gitignore create mode 100644 animations/step_05_d/android/app/build.gradle create mode 100644 animations/step_05_d/android/app/src/debug/AndroidManifest.xml create mode 100644 animations/step_05_d/android/app/src/main/AndroidManifest.xml create mode 100644 animations/step_05_d/android/app/src/main/kotlin/com/example/quiz/MainActivity.kt create mode 100644 animations/step_05_d/android/app/src/main/res/drawable-v21/launch_background.xml create mode 100644 animations/step_05_d/android/app/src/main/res/drawable/launch_background.xml create mode 100644 animations/step_05_d/android/app/src/main/res/mipmap-hdpi/ic_launcher.png create mode 100644 animations/step_05_d/android/app/src/main/res/mipmap-mdpi/ic_launcher.png create mode 100644 animations/step_05_d/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png create mode 100644 animations/step_05_d/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 animations/step_05_d/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 animations/step_05_d/android/app/src/main/res/values-night/styles.xml create mode 100644 animations/step_05_d/android/app/src/main/res/values/styles.xml create mode 100644 animations/step_05_d/android/app/src/profile/AndroidManifest.xml create mode 100644 animations/step_05_d/android/build.gradle create mode 100644 animations/step_05_d/android/gradle.properties create mode 100644 animations/step_05_d/android/gradle/wrapper/gradle-wrapper.properties create mode 100644 animations/step_05_d/android/settings.gradle create mode 100644 animations/step_05_d/ios/.gitignore create mode 100644 animations/step_05_d/ios/Flutter/AppFrameworkInfo.plist create mode 100644 animations/step_05_d/ios/Flutter/Debug.xcconfig create mode 100644 animations/step_05_d/ios/Flutter/Release.xcconfig create mode 100644 animations/step_05_d/ios/Runner.xcodeproj/project.pbxproj create mode 100644 animations/step_05_d/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 animations/step_05_d/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 animations/step_05_d/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings create mode 100644 animations/step_05_d/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme create mode 100644 animations/step_05_d/ios/Runner.xcworkspace/contents.xcworkspacedata create mode 100644 animations/step_05_d/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 animations/step_05_d/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings create mode 100644 animations/step_05_d/ios/Runner/AppDelegate.swift create mode 100644 animations/step_05_d/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 animations/step_05_d/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png create mode 100644 animations/step_05_d/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png create mode 100644 animations/step_05_d/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png create mode 100644 animations/step_05_d/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png create mode 100644 animations/step_05_d/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png create mode 100644 animations/step_05_d/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png create mode 100644 animations/step_05_d/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png create mode 100644 animations/step_05_d/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png create mode 100644 animations/step_05_d/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png create mode 100644 animations/step_05_d/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png create mode 100644 animations/step_05_d/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png create mode 100644 animations/step_05_d/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png create mode 100644 animations/step_05_d/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png create mode 100644 animations/step_05_d/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png create mode 100644 animations/step_05_d/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png create mode 100644 animations/step_05_d/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json create mode 100644 animations/step_05_d/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png create mode 100644 animations/step_05_d/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png create mode 100644 animations/step_05_d/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png create mode 100644 animations/step_05_d/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md create mode 100644 animations/step_05_d/ios/Runner/Base.lproj/LaunchScreen.storyboard create mode 100644 animations/step_05_d/ios/Runner/Base.lproj/Main.storyboard create mode 100644 animations/step_05_d/ios/Runner/Info.plist create mode 100644 animations/step_05_d/ios/Runner/Runner-Bridging-Header.h create mode 100644 animations/step_05_d/ios/RunnerTests/RunnerTests.swift create mode 100644 animations/step_05_d/lib/flip_effect.dart create mode 100644 animations/step_05_d/lib/home_screen.dart create mode 100644 animations/step_05_d/lib/main.dart create mode 100644 animations/step_05_d/lib/model.dart create mode 100644 animations/step_05_d/lib/question_screen.dart create mode 100644 animations/step_05_d/lib/scoreboard.dart create mode 100644 animations/step_05_d/lib/view_model.dart create mode 100644 animations/step_05_d/linux/.gitignore create mode 100644 animations/step_05_d/linux/CMakeLists.txt create mode 100644 animations/step_05_d/linux/flutter/CMakeLists.txt create mode 100644 animations/step_05_d/linux/flutter/generated_plugin_registrant.cc create mode 100644 animations/step_05_d/linux/flutter/generated_plugin_registrant.h create mode 100644 animations/step_05_d/linux/flutter/generated_plugins.cmake create mode 100644 animations/step_05_d/linux/main.cc create mode 100644 animations/step_05_d/linux/my_application.cc create mode 100644 animations/step_05_d/linux/my_application.h create mode 100644 animations/step_05_d/macos/.gitignore create mode 100644 animations/step_05_d/macos/Flutter/Flutter-Debug.xcconfig create mode 100644 animations/step_05_d/macos/Flutter/Flutter-Release.xcconfig create mode 100644 animations/step_05_d/macos/Flutter/GeneratedPluginRegistrant.swift create mode 100644 animations/step_05_d/macos/Runner.xcodeproj/project.pbxproj create mode 100644 animations/step_05_d/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 animations/step_05_d/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme create mode 100644 animations/step_05_d/macos/Runner.xcworkspace/contents.xcworkspacedata create mode 100644 animations/step_05_d/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 animations/step_05_d/macos/Runner/AppDelegate.swift create mode 100644 animations/step_05_d/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 animations/step_05_d/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png create mode 100644 animations/step_05_d/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png create mode 100644 animations/step_05_d/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png create mode 100644 animations/step_05_d/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png create mode 100644 animations/step_05_d/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png create mode 100644 animations/step_05_d/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png create mode 100644 animations/step_05_d/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png create mode 100644 animations/step_05_d/macos/Runner/Base.lproj/MainMenu.xib create mode 100644 animations/step_05_d/macos/Runner/Configs/AppInfo.xcconfig create mode 100644 animations/step_05_d/macos/Runner/Configs/Debug.xcconfig create mode 100644 animations/step_05_d/macos/Runner/Configs/Release.xcconfig create mode 100644 animations/step_05_d/macos/Runner/Configs/Warnings.xcconfig create mode 100644 animations/step_05_d/macos/Runner/DebugProfile.entitlements create mode 100644 animations/step_05_d/macos/Runner/Info.plist create mode 100644 animations/step_05_d/macos/Runner/MainFlutterWindow.swift create mode 100644 animations/step_05_d/macos/Runner/Release.entitlements create mode 100644 animations/step_05_d/macos/RunnerTests/RunnerTests.swift create mode 100644 animations/step_05_d/pubspec.yaml create mode 100644 animations/step_05_d/web/favicon.png create mode 100644 animations/step_05_d/web/icons/Icon-192.png create mode 100644 animations/step_05_d/web/icons/Icon-512.png create mode 100644 animations/step_05_d/web/icons/Icon-maskable-192.png create mode 100644 animations/step_05_d/web/icons/Icon-maskable-512.png create mode 100644 animations/step_05_d/web/index.html create mode 100644 animations/step_05_d/web/manifest.json create mode 100644 animations/step_05_d/windows/.gitignore create mode 100644 animations/step_05_d/windows/CMakeLists.txt create mode 100644 animations/step_05_d/windows/flutter/CMakeLists.txt create mode 100644 animations/step_05_d/windows/flutter/generated_plugin_registrant.cc create mode 100644 animations/step_05_d/windows/flutter/generated_plugin_registrant.h create mode 100644 animations/step_05_d/windows/flutter/generated_plugins.cmake create mode 100644 animations/step_05_d/windows/runner/CMakeLists.txt create mode 100644 animations/step_05_d/windows/runner/Runner.rc create mode 100644 animations/step_05_d/windows/runner/flutter_window.cpp create mode 100644 animations/step_05_d/windows/runner/flutter_window.h create mode 100644 animations/step_05_d/windows/runner/main.cpp create mode 100644 animations/step_05_d/windows/runner/resource.h create mode 100644 animations/step_05_d/windows/runner/resources/app_icon.ico create mode 100644 animations/step_05_d/windows/runner/runner.exe.manifest create mode 100644 animations/step_05_d/windows/runner/utils.cpp create mode 100644 animations/step_05_d/windows/runner/utils.h create mode 100644 animations/step_05_d/windows/runner/win32_window.cpp create mode 100644 animations/step_05_d/windows/runner/win32_window.h diff --git a/animations/codelab_rebuild.yaml b/animations/codelab_rebuild.yaml index 7ca0377aa7..e719f7c419 100644 --- a/animations/codelab_rebuild.yaml +++ b/animations/codelab_rebuild.yaml @@ -1030,6 +1030,12 @@ steps: ), ], ), + - name: Remove step_05_a + rmdir: step_05_a + - name: Copy step_05_a + copydir: + from: quiz + to: step_05_a - name: Use package:animations FadeThroughTransition path: quiz/lib/home_screen.dart patch-u: | @@ -1078,6 +1084,12 @@ steps: ), home: HomeScreen(), ); + - name: Remove step_05_b + rmdir: step_05_b + - name: Copy step_05_b + copydir: + from: quiz + to: step_05_b - name: Change back to MaterialPageRoute path: quiz/lib/home_screen.dart patch-u: | @@ -1156,6 +1168,12 @@ steps: child: Card( key: ValueKey(question), elevation: 4, + - name: Remove step_05_c + rmdir: step_05_c + - name: Copy step_05_c + copydir: + from: quiz + to: step_05_c - name: Use OpenContainer path: quiz/lib/question_screen.dart patch-u: | @@ -1330,6 +1348,12 @@ steps: ), ); } + - name: Remove step_05_d + rmdir: step_05_d + - name: Copy step_05_d + copydir: + from: quiz + to: step_05_d - name: dart analyze path: quiz dart: analyze --fatal-infos diff --git a/animations/step_05_a/.gitignore b/animations/step_05_a/.gitignore new file mode 100644 index 0000000000..29a3a5017f --- /dev/null +++ b/animations/step_05_a/.gitignore @@ -0,0 +1,43 @@ +# Miscellaneous +*.class +*.log +*.pyc +*.swp +.DS_Store +.atom/ +.buildlog/ +.history +.svn/ +migrate_working_dir/ + +# IntelliJ related +*.iml +*.ipr +*.iws +.idea/ + +# The .vscode folder contains launch configuration and tasks you configure in +# VS Code which you may wish to be included in version control, so this line +# is commented out by default. +#.vscode/ + +# Flutter/Dart/Pub related +**/doc/api/ +**/ios/Flutter/.last_build_id +.dart_tool/ +.flutter-plugins +.flutter-plugins-dependencies +.pub-cache/ +.pub/ +/build/ + +# Symbolication related +app.*.symbols + +# Obfuscation related +app.*.map.json + +# Android Studio will place build artifacts here +/android/app/debug +/android/app/profile +/android/app/release diff --git a/animations/step_05_a/analysis_options.yaml b/animations/step_05_a/analysis_options.yaml new file mode 100644 index 0000000000..03de3bd700 --- /dev/null +++ b/animations/step_05_a/analysis_options.yaml @@ -0,0 +1,13 @@ +include: package:flutter_lints/flutter.yaml + +analyzer: + errors: + unused_field: ignore + +linter: + rules: + annotate_overrides: false + prefer_const_constructors: false + prefer_const_constructors_in_immutables: false + prefer_const_declarations: false + prefer_const_literals_to_create_immutables: false diff --git a/animations/step_05_a/android/.gitignore b/animations/step_05_a/android/.gitignore new file mode 100644 index 0000000000..55afd919c6 --- /dev/null +++ b/animations/step_05_a/android/.gitignore @@ -0,0 +1,13 @@ +gradle-wrapper.jar +/.gradle +/captures/ +/gradlew +/gradlew.bat +/local.properties +GeneratedPluginRegistrant.java + +# Remember to never publicly share your keystore. +# See https://flutter.dev/to/reference-keystore +key.properties +**/*.keystore +**/*.jks diff --git a/animations/step_05_a/android/app/build.gradle b/animations/step_05_a/android/app/build.gradle new file mode 100644 index 0000000000..7c3594ed33 --- /dev/null +++ b/animations/step_05_a/android/app/build.gradle @@ -0,0 +1,44 @@ +plugins { + id "com.android.application" + id "kotlin-android" + // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. + id "dev.flutter.flutter-gradle-plugin" +} + +android { + namespace = "com.example.quiz" + compileSdk = flutter.compileSdkVersion + ndkVersion = flutter.ndkVersion + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 + } + + kotlinOptions { + jvmTarget = JavaVersion.VERSION_1_8 + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId = "com.example.quiz" + // You can update the following values to match your application needs. + // For more information, see: https://flutter.dev/to/review-gradle-config. + minSdk = flutter.minSdkVersion + targetSdk = flutter.targetSdkVersion + versionCode = flutter.versionCode + versionName = flutter.versionName + } + + buildTypes { + release { + // TODO: Add your own signing config for the release build. + // Signing with the debug keys for now, so `flutter run --release` works. + signingConfig = signingConfigs.debug + } + } +} + +flutter { + source = "../.." +} diff --git a/animations/step_05_a/android/app/src/debug/AndroidManifest.xml b/animations/step_05_a/android/app/src/debug/AndroidManifest.xml new file mode 100644 index 0000000000..399f6981d5 --- /dev/null +++ b/animations/step_05_a/android/app/src/debug/AndroidManifest.xml @@ -0,0 +1,7 @@ + + + + diff --git a/animations/step_05_a/android/app/src/main/AndroidManifest.xml b/animations/step_05_a/android/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000000..34076b28b3 --- /dev/null +++ b/animations/step_05_a/android/app/src/main/AndroidManifest.xml @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/animations/step_05_a/android/app/src/main/kotlin/com/example/quiz/MainActivity.kt b/animations/step_05_a/android/app/src/main/kotlin/com/example/quiz/MainActivity.kt new file mode 100644 index 0000000000..87081bb97c --- /dev/null +++ b/animations/step_05_a/android/app/src/main/kotlin/com/example/quiz/MainActivity.kt @@ -0,0 +1,5 @@ +package com.example.quiz + +import io.flutter.embedding.android.FlutterActivity + +class MainActivity: FlutterActivity() diff --git a/animations/step_05_a/android/app/src/main/res/drawable-v21/launch_background.xml b/animations/step_05_a/android/app/src/main/res/drawable-v21/launch_background.xml new file mode 100644 index 0000000000..f74085f3f6 --- /dev/null +++ b/animations/step_05_a/android/app/src/main/res/drawable-v21/launch_background.xml @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/animations/step_05_a/android/app/src/main/res/drawable/launch_background.xml b/animations/step_05_a/android/app/src/main/res/drawable/launch_background.xml new file mode 100644 index 0000000000..304732f884 --- /dev/null +++ b/animations/step_05_a/android/app/src/main/res/drawable/launch_background.xml @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/animations/step_05_a/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/animations/step_05_a/android/app/src/main/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..db77bb4b7b0906d62b1847e87f15cdcacf6a4f29 GIT binary patch literal 544 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY3?!3`olAj~WQl7;NpOBzNqJ&XDuZK6ep0G} zXKrG8YEWuoN@d~6R2!h8bpbvhu0Wd6uZuB!w&u2PAxD2eNXD>P5D~Wn-+_Wa#27Xc zC?Zj|6r#X(-D3u$NCt}(Ms06KgJ4FxJVv{GM)!I~&n8Bnc94O7-Hd)cjDZswgC;Qs zO=b+9!WcT8F?0rF7!Uys2bs@gozCP?z~o%U|N3vA*22NaGQG zlg@K`O_XuxvZ&Ks^m&R!`&1=spLvfx7oGDKDwpwW`#iqdw@AL`7MR}m`rwr|mZgU`8P7SBkL78fFf!WnuYWm$5Z0 zNXhDbCv&49sM544K|?c)WrFfiZvCi9h0O)B3Pgg&ebxsLQ05GG~ AQ2+n{ literal 0 HcmV?d00001 diff --git a/animations/step_05_a/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/animations/step_05_a/android/app/src/main/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..17987b79bb8a35cc66c3c1fd44f5a5526c1b78be GIT binary patch literal 442 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA3?vioaBc-sk|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*D5Xx&nMcT!A!W`0S9QKQy;}1Cl^CgaH=;G9cpY;r$Q>i*pfB zP2drbID<_#qf;rPZx^FqH)F_D#*k@@q03KywUtLX8Ua?`H+NMzkczFPK3lFz@i_kW%1NOn0|D2I9n9wzH8m|-tHjsw|9>@K=iMBhxvkv6m8Y-l zytQ?X=U+MF$@3 zt`~i=@j|6y)RWMK--}M|=T`o&^Ni>IoWKHEbBXz7?A@mgWoL>!*SXo`SZH-*HSdS+ yn*9;$7;m`l>wYBC5bq;=U}IMqLzqbYCidGC!)_gkIk_C@Uy!y&wkt5C($~2D>~)O*cj@FGjOCM)M>_ixfudOh)?xMu#Fs z#}Y=@YDTwOM)x{K_j*Q;dPdJ?Mz0n|pLRx{4n|)f>SXlmV)XB04CrSJn#dS5nK2lM zrZ9#~WelCp7&e13Y$jvaEXHskn$2V!!DN-nWS__6T*l;H&Fopn?A6HZ-6WRLFP=R` zqG+CE#d4|IbyAI+rJJ`&x9*T`+a=p|0O(+s{UBcyZdkhj=yS1>AirP+0R;mf2uMgM zC}@~JfByORAh4SyRgi&!(cja>F(l*O+nd+@4m$|6K6KDn_&uvCpV23&>G9HJp{xgg zoq1^2_p9@|WEo z*X_Uko@K)qYYv~>43eQGMdbiGbo>E~Q& zrYBH{QP^@Sti!`2)uG{irBBq@y*$B zi#&(U-*=fp74j)RyIw49+0MRPMRU)+a2r*PJ$L5roHt2$UjExCTZSbq%V!HeS7J$N zdG@vOZB4v_lF7Plrx+hxo7(fCV&}fHq)$ literal 0 HcmV?d00001 diff --git a/animations/step_05_a/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/animations/step_05_a/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..d5f1c8d34e7a88e3f88bea192c3a370d44689c3c GIT binary patch literal 1031 zcmeAS@N?(olHy`uVBq!ia0vp^6F``Q8Ax83A=Cw=BuiW)N`mv#O3D+9QW+dm@{>{( zJaZG%Q-e|yQz{EjrrIztFa`(sgt!6~Yi|1%a`XoT0ojZ}lNrNjb9xjc(B0U1_% zz5^97Xt*%oq$rQy4?0GKNfJ44uvxI)gC`h-NZ|&0-7(qS@?b!5r36oQ}zyZrNO3 zMO=Or+<~>+A&uN&E!^Sl+>xE!QC-|oJv`ApDhqC^EWD|@=#J`=d#Xzxs4ah}w&Jnc z$|q_opQ^2TrnVZ0o~wh<3t%W&flvYGe#$xqda2bR_R zvPYgMcHgjZ5nSA^lJr%;<&0do;O^tDDh~=pIxA#coaCY>&N%M2^tq^U%3DB@ynvKo}b?yu-bFc-u0JHzced$sg7S3zqI(2 z#Km{dPr7I=pQ5>FuK#)QwK?Y`E`B?nP+}U)I#c1+FM*1kNvWG|a(TpksZQ3B@sD~b zpQ2)*V*TdwjFOtHvV|;OsiDqHi=6%)o4b!)x$)%9pGTsE z-JL={-Ffv+T87W(Xpooq<`r*VzWQcgBN$$`u}f>-ZQI1BB8ykN*=e4rIsJx9>z}*o zo~|9I;xof literal 0 HcmV?d00001 diff --git a/animations/step_05_a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/animations/step_05_a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..4d6372eebdb28e45604e46eeda8dd24651419bc0 GIT binary patch literal 1443 zcmb`G{WsKk6vsdJTdFg%tJav9_E4vzrOaqkWF|A724Nly!y+?N9`YV6wZ}5(X(D_N(?!*n3`|_r0Hc?=PQw&*vnU?QTFY zB_MsH|!j$PP;I}?dppoE_gA(4uc!jV&0!l7_;&p2^pxNo>PEcNJv za5_RT$o2Mf!<+r?&EbHH6nMoTsDOa;mN(wv8RNsHpG)`^ymG-S5By8=l9iVXzN_eG%Xg2@Xeq76tTZ*dGh~Lo9vl;Zfs+W#BydUw zCkZ$o1LqWQO$FC9aKlLl*7x9^0q%0}$OMlp@Kk_jHXOjofdePND+j!A{q!8~Jn+s3 z?~~w@4?egS02}8NuulUA=L~QQfm;MzCGd)XhiftT;+zFO&JVyp2mBww?;QByS_1w! zrQlx%{^cMj0|Bo1FjwY@Q8?Hx0cIPF*@-ZRFpPc#bBw{5@tD(5%sClzIfl8WU~V#u zm5Q;_F!wa$BSpqhN>W@2De?TKWR*!ujY;Yylk_X5#~V!L*Gw~;$%4Q8~Mad z@`-kG?yb$a9cHIApZDVZ^U6Xkp<*4rU82O7%}0jjHlK{id@?-wpN*fCHXyXh(bLt* zPc}H-x0e4E&nQ>y%B-(EL=9}RyC%MyX=upHuFhAk&MLbsF0LP-q`XnH78@fT+pKPW zu72MW`|?8ht^tz$iC}ZwLp4tB;Q49K!QCF3@!iB1qOI=?w z7In!}F~ij(18UYUjnbmC!qKhPo%24?8U1x{7o(+?^Zu0Hx81|FuS?bJ0jgBhEMzf< zCgUq7r2OCB(`XkKcN-TL>u5y#dD6D!)5W?`O5)V^>jb)P)GBdy%t$uUMpf$SNV31$ zb||OojAbvMP?T@$h_ZiFLFVHDmbyMhJF|-_)HX3%m=CDI+ID$0^C>kzxprBW)hw(v zr!Gmda);ICoQyhV_oP5+C%?jcG8v+D@9f?Dk*!BxY}dazmrT@64UrP3hlslANK)bq z$67n83eh}OeW&SV@HG95P|bjfqJ7gw$e+`Hxo!4cx`jdK1bJ>YDSpGKLPZ^1cv$ek zIB?0S<#tX?SJCLWdMd{-ME?$hc7A$zBOdIJ)4!KcAwb=VMov)nK;9z>x~rfT1>dS+ zZ6#`2v@`jgbqq)P22H)Tx2CpmM^o1$B+xT6`(v%5xJ(?j#>Q$+rx_R|7TzDZe{J6q zG1*EcU%tE?!kO%^M;3aM6JN*LAKUVb^xz8-Pxo#jR5(-KBeLJvA@-gxNHx0M-ZJLl z;#JwQoh~9V?`UVo#}{6ka@II>++D@%KqGpMdlQ}?9E*wFcf5(#XQnP$Dk5~%iX^>f z%$y;?M0BLp{O3a(-4A?ewryHrrD%cx#Q^%KY1H zNre$ve+vceSLZcNY4U(RBX&)oZn*Py()h)XkE?PL$!bNb{N5FVI2Y%LKEm%yvpyTP z(1P?z~7YxD~Rf<(a@_y` literal 0 HcmV?d00001 diff --git a/animations/step_05_a/android/app/src/main/res/values-night/styles.xml b/animations/step_05_a/android/app/src/main/res/values-night/styles.xml new file mode 100644 index 0000000000..06952be745 --- /dev/null +++ b/animations/step_05_a/android/app/src/main/res/values-night/styles.xml @@ -0,0 +1,18 @@ + + + + + + + diff --git a/animations/step_05_a/android/app/src/main/res/values/styles.xml b/animations/step_05_a/android/app/src/main/res/values/styles.xml new file mode 100644 index 0000000000..cb1ef88056 --- /dev/null +++ b/animations/step_05_a/android/app/src/main/res/values/styles.xml @@ -0,0 +1,18 @@ + + + + + + + diff --git a/animations/step_05_a/android/app/src/profile/AndroidManifest.xml b/animations/step_05_a/android/app/src/profile/AndroidManifest.xml new file mode 100644 index 0000000000..399f6981d5 --- /dev/null +++ b/animations/step_05_a/android/app/src/profile/AndroidManifest.xml @@ -0,0 +1,7 @@ + + + + diff --git a/animations/step_05_a/android/build.gradle b/animations/step_05_a/android/build.gradle new file mode 100644 index 0000000000..d2ffbffa4c --- /dev/null +++ b/animations/step_05_a/android/build.gradle @@ -0,0 +1,18 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +rootProject.buildDir = "../build" +subprojects { + project.buildDir = "${rootProject.buildDir}/${project.name}" +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean", Delete) { + delete rootProject.buildDir +} diff --git a/animations/step_05_a/android/gradle.properties b/animations/step_05_a/android/gradle.properties new file mode 100644 index 0000000000..2597170821 --- /dev/null +++ b/animations/step_05_a/android/gradle.properties @@ -0,0 +1,3 @@ +org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +android.useAndroidX=true +android.enableJetifier=true diff --git a/animations/step_05_a/android/gradle/wrapper/gradle-wrapper.properties b/animations/step_05_a/android/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000000..7bb2df6ba6 --- /dev/null +++ b/animations/step_05_a/android/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,5 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip diff --git a/animations/step_05_a/android/settings.gradle b/animations/step_05_a/android/settings.gradle new file mode 100644 index 0000000000..b9e43bd376 --- /dev/null +++ b/animations/step_05_a/android/settings.gradle @@ -0,0 +1,25 @@ +pluginManagement { + def flutterSdkPath = { + def properties = new Properties() + file("local.properties").withInputStream { properties.load(it) } + def flutterSdkPath = properties.getProperty("flutter.sdk") + assert flutterSdkPath != null, "flutter.sdk not set in local.properties" + return flutterSdkPath + }() + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id "dev.flutter.flutter-plugin-loader" version "1.0.0" + id "com.android.application" version "8.1.0" apply false + id "org.jetbrains.kotlin.android" version "1.8.22" apply false +} + +include ":app" diff --git a/animations/step_05_a/ios/.gitignore b/animations/step_05_a/ios/.gitignore new file mode 100644 index 0000000000..7a7f9873ad --- /dev/null +++ b/animations/step_05_a/ios/.gitignore @@ -0,0 +1,34 @@ +**/dgph +*.mode1v3 +*.mode2v3 +*.moved-aside +*.pbxuser +*.perspectivev3 +**/*sync/ +.sconsign.dblite +.tags* +**/.vagrant/ +**/DerivedData/ +Icon? +**/Pods/ +**/.symlinks/ +profile +xcuserdata +**/.generated/ +Flutter/App.framework +Flutter/Flutter.framework +Flutter/Flutter.podspec +Flutter/Generated.xcconfig +Flutter/ephemeral/ +Flutter/app.flx +Flutter/app.zip +Flutter/flutter_assets/ +Flutter/flutter_export_environment.sh +ServiceDefinitions.json +Runner/GeneratedPluginRegistrant.* + +# Exceptions to above rules. +!default.mode1v3 +!default.mode2v3 +!default.pbxuser +!default.perspectivev3 diff --git a/animations/step_05_a/ios/Flutter/AppFrameworkInfo.plist b/animations/step_05_a/ios/Flutter/AppFrameworkInfo.plist new file mode 100644 index 0000000000..7c56964006 --- /dev/null +++ b/animations/step_05_a/ios/Flutter/AppFrameworkInfo.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + App + CFBundleIdentifier + io.flutter.flutter.app + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + App + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1.0 + MinimumOSVersion + 12.0 + + diff --git a/animations/step_05_a/ios/Flutter/Debug.xcconfig b/animations/step_05_a/ios/Flutter/Debug.xcconfig new file mode 100644 index 0000000000..592ceee85b --- /dev/null +++ b/animations/step_05_a/ios/Flutter/Debug.xcconfig @@ -0,0 +1 @@ +#include "Generated.xcconfig" diff --git a/animations/step_05_a/ios/Flutter/Release.xcconfig b/animations/step_05_a/ios/Flutter/Release.xcconfig new file mode 100644 index 0000000000..592ceee85b --- /dev/null +++ b/animations/step_05_a/ios/Flutter/Release.xcconfig @@ -0,0 +1 @@ +#include "Generated.xcconfig" diff --git a/animations/step_05_a/ios/Runner.xcodeproj/project.pbxproj b/animations/step_05_a/ios/Runner.xcodeproj/project.pbxproj new file mode 100644 index 0000000000..faef24d87a --- /dev/null +++ b/animations/step_05_a/ios/Runner.xcodeproj/project.pbxproj @@ -0,0 +1,616 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 54; + objects = { + +/* Begin PBXBuildFile section */ + 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; + 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; + 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; + 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; + 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; + 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; + 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 331C8085294A63A400263BE5 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 97C146E61CF9000F007C117D /* Project object */; + proxyType = 1; + remoteGlobalIDString = 97C146ED1CF9000F007C117D; + remoteInfo = Runner; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 9705A1C41CF9048500538489 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; + 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; + 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; + 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; + 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; + 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; + 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; + 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; + 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 97C146EB1CF9000F007C117D /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 331C8082294A63A400263BE5 /* RunnerTests */ = { + isa = PBXGroup; + children = ( + 331C807B294A618700263BE5 /* RunnerTests.swift */, + ); + path = RunnerTests; + sourceTree = ""; + }; + 9740EEB11CF90186004384FC /* Flutter */ = { + isa = PBXGroup; + children = ( + 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */, + 9740EEB21CF90195004384FC /* Debug.xcconfig */, + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, + 9740EEB31CF90195004384FC /* Generated.xcconfig */, + ); + name = Flutter; + sourceTree = ""; + }; + 97C146E51CF9000F007C117D = { + isa = PBXGroup; + children = ( + 9740EEB11CF90186004384FC /* Flutter */, + 97C146F01CF9000F007C117D /* Runner */, + 97C146EF1CF9000F007C117D /* Products */, + 331C8082294A63A400263BE5 /* RunnerTests */, + ); + sourceTree = ""; + }; + 97C146EF1CF9000F007C117D /* Products */ = { + isa = PBXGroup; + children = ( + 97C146EE1CF9000F007C117D /* Runner.app */, + 331C8081294A63A400263BE5 /* RunnerTests.xctest */, + ); + name = Products; + sourceTree = ""; + }; + 97C146F01CF9000F007C117D /* Runner */ = { + isa = PBXGroup; + children = ( + 97C146FA1CF9000F007C117D /* Main.storyboard */, + 97C146FD1CF9000F007C117D /* Assets.xcassets */, + 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */, + 97C147021CF9000F007C117D /* Info.plist */, + 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */, + 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */, + 74858FAE1ED2DC5600515810 /* AppDelegate.swift */, + 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */, + ); + path = Runner; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 331C8080294A63A400263BE5 /* RunnerTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; + buildPhases = ( + 331C807D294A63A400263BE5 /* Sources */, + 331C807F294A63A400263BE5 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 331C8086294A63A400263BE5 /* PBXTargetDependency */, + ); + name = RunnerTests; + productName = RunnerTests; + productReference = 331C8081294A63A400263BE5 /* RunnerTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; + 97C146ED1CF9000F007C117D /* Runner */ = { + isa = PBXNativeTarget; + buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; + buildPhases = ( + 9740EEB61CF901F6004384FC /* Run Script */, + 97C146EA1CF9000F007C117D /* Sources */, + 97C146EB1CF9000F007C117D /* Frameworks */, + 97C146EC1CF9000F007C117D /* Resources */, + 9705A1C41CF9048500538489 /* Embed Frameworks */, + 3B06AD1E1E4923F5004D2608 /* Thin Binary */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = Runner; + productName = Runner; + productReference = 97C146EE1CF9000F007C117D /* Runner.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 97C146E61CF9000F007C117D /* Project object */ = { + isa = PBXProject; + attributes = { + BuildIndependentTargetsInParallel = YES; + LastUpgradeCheck = 1510; + ORGANIZATIONNAME = ""; + TargetAttributes = { + 331C8080294A63A400263BE5 = { + CreatedOnToolsVersion = 14.0; + TestTargetID = 97C146ED1CF9000F007C117D; + }; + 97C146ED1CF9000F007C117D = { + CreatedOnToolsVersion = 7.3.1; + LastSwiftMigration = 1100; + }; + }; + }; + buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 97C146E51CF9000F007C117D; + productRefGroup = 97C146EF1CF9000F007C117D /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 97C146ED1CF9000F007C117D /* Runner */, + 331C8080294A63A400263BE5 /* RunnerTests */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 331C807F294A63A400263BE5 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 97C146EC1CF9000F007C117D /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */, + 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */, + 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */, + 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", + ); + name = "Thin Binary"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + }; + 9740EEB61CF901F6004384FC /* Run Script */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Run Script"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 331C807D294A63A400263BE5 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 97C146EA1CF9000F007C117D /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */, + 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 331C8086294A63A400263BE5 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 97C146ED1CF9000F007C117D /* Runner */; + targetProxy = 331C8085294A63A400263BE5 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + 97C146FA1CF9000F007C117D /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 97C146FB1CF9000F007C117D /* Base */, + ); + name = Main.storyboard; + sourceTree = ""; + }; + 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 97C147001CF9000F007C117D /* Base */, + ); + name = LaunchScreen.storyboard; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 249021D3217E4FDB00AE95B9 /* Profile */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + SUPPORTED_PLATFORMS = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Profile; + }; + 249021D4217E4FDB00AE95B9 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + ENABLE_BITCODE = NO; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.example.quiz; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; + SWIFT_VERSION = 5.0; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Profile; + }; + 331C8088294A63A400263BE5 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.quiz.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; + }; + name = Debug; + }; + 331C8089294A63A400263BE5 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.quiz.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; + }; + name = Release; + }; + 331C808A294A63A400263BE5 /* Profile */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.quiz.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; + }; + name = Profile; + }; + 97C147031CF9000F007C117D /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 97C147041CF9000F007C117D /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + SUPPORTED_PLATFORMS = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 97C147061CF9000F007C117D /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + ENABLE_BITCODE = NO; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.example.quiz; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Debug; + }; + 97C147071CF9000F007C117D /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + ENABLE_BITCODE = NO; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.example.quiz; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; + SWIFT_VERSION = 5.0; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 331C8088294A63A400263BE5 /* Debug */, + 331C8089294A63A400263BE5 /* Release */, + 331C808A294A63A400263BE5 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 97C147031CF9000F007C117D /* Debug */, + 97C147041CF9000F007C117D /* Release */, + 249021D3217E4FDB00AE95B9 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 97C147061CF9000F007C117D /* Debug */, + 97C147071CF9000F007C117D /* Release */, + 249021D4217E4FDB00AE95B9 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 97C146E61CF9000F007C117D /* Project object */; +} diff --git a/animations/step_05_a/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/animations/step_05_a/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000000..919434a625 --- /dev/null +++ b/animations/step_05_a/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/animations/step_05_a/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/animations/step_05_a/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000000..18d981003d --- /dev/null +++ b/animations/step_05_a/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/animations/step_05_a/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/animations/step_05_a/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings new file mode 100644 index 0000000000..f9b0d7c5ea --- /dev/null +++ b/animations/step_05_a/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings @@ -0,0 +1,8 @@ + + + + + PreviewsEnabled + + + diff --git a/animations/step_05_a/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/animations/step_05_a/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme new file mode 100644 index 0000000000..8e3ca5dfe1 --- /dev/null +++ b/animations/step_05_a/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -0,0 +1,98 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/animations/step_05_a/ios/Runner.xcworkspace/contents.xcworkspacedata b/animations/step_05_a/ios/Runner.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000000..1d526a16ed --- /dev/null +++ b/animations/step_05_a/ios/Runner.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/animations/step_05_a/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/animations/step_05_a/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000000..18d981003d --- /dev/null +++ b/animations/step_05_a/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/animations/step_05_a/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/animations/step_05_a/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings new file mode 100644 index 0000000000..f9b0d7c5ea --- /dev/null +++ b/animations/step_05_a/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings @@ -0,0 +1,8 @@ + + + + + PreviewsEnabled + + + diff --git a/animations/step_05_a/ios/Runner/AppDelegate.swift b/animations/step_05_a/ios/Runner/AppDelegate.swift new file mode 100644 index 0000000000..626664468b --- /dev/null +++ b/animations/step_05_a/ios/Runner/AppDelegate.swift @@ -0,0 +1,13 @@ +import Flutter +import UIKit + +@main +@objc class AppDelegate: FlutterAppDelegate { + override func application( + _ application: UIApplication, + didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? + ) -> Bool { + GeneratedPluginRegistrant.register(with: self) + return super.application(application, didFinishLaunchingWithOptions: launchOptions) + } +} diff --git a/animations/step_05_a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/animations/step_05_a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000000..d36b1fab2d --- /dev/null +++ b/animations/step_05_a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,122 @@ +{ + "images" : [ + { + "size" : "20x20", + "idiom" : "iphone", + "filename" : "Icon-App-20x20@2x.png", + "scale" : "2x" + }, + { + "size" : "20x20", + "idiom" : "iphone", + "filename" : "Icon-App-20x20@3x.png", + "scale" : "3x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "Icon-App-29x29@1x.png", + "scale" : "1x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "Icon-App-29x29@2x.png", + "scale" : "2x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "Icon-App-29x29@3x.png", + "scale" : "3x" + }, + { + "size" : "40x40", + "idiom" : "iphone", + "filename" : "Icon-App-40x40@2x.png", + "scale" : "2x" + }, + { + "size" : "40x40", + "idiom" : "iphone", + "filename" : "Icon-App-40x40@3x.png", + "scale" : "3x" + }, + { + "size" : "60x60", + "idiom" : "iphone", + "filename" : "Icon-App-60x60@2x.png", + "scale" : "2x" + }, + { + "size" : "60x60", + "idiom" : "iphone", + "filename" : "Icon-App-60x60@3x.png", + "scale" : "3x" + }, + { + "size" : "20x20", + "idiom" : "ipad", + "filename" : "Icon-App-20x20@1x.png", + "scale" : "1x" + }, + { + "size" : "20x20", + "idiom" : "ipad", + "filename" : "Icon-App-20x20@2x.png", + "scale" : "2x" + }, + { + "size" : "29x29", + "idiom" : "ipad", + "filename" : "Icon-App-29x29@1x.png", + "scale" : "1x" + }, + { + "size" : "29x29", + "idiom" : "ipad", + "filename" : "Icon-App-29x29@2x.png", + "scale" : "2x" + }, + { + "size" : "40x40", + "idiom" : "ipad", + "filename" : "Icon-App-40x40@1x.png", + "scale" : "1x" + }, + { + "size" : "40x40", + "idiom" : "ipad", + "filename" : "Icon-App-40x40@2x.png", + "scale" : "2x" + }, + { + "size" : "76x76", + "idiom" : "ipad", + "filename" : "Icon-App-76x76@1x.png", + "scale" : "1x" + }, + { + "size" : "76x76", + "idiom" : "ipad", + "filename" : "Icon-App-76x76@2x.png", + "scale" : "2x" + }, + { + "size" : "83.5x83.5", + "idiom" : "ipad", + "filename" : "Icon-App-83.5x83.5@2x.png", + "scale" : "2x" + }, + { + "size" : "1024x1024", + "idiom" : "ios-marketing", + "filename" : "Icon-App-1024x1024@1x.png", + "scale" : "1x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} diff --git a/animations/step_05_a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png b/animations/step_05_a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..dc9ada4725e9b0ddb1deab583e5b5102493aa332 GIT binary patch literal 10932 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 literal 0 HcmV?d00001 diff --git a/animations/step_05_a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png b/animations/step_05_a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..797d452e458972bab9d994556c8305db4c827017 GIT binary patch literal 406 zcmV;H0crk;P))>cdjpWt&rLJgVp-t?DREyuq1A%0Z4)6_WsQ7{nzjN zo!X zGXV)2i3kcZIL~_j>uIKPK_zib+3T+Nt3Mb&Br)s)UIaA}@p{wDda>7=Q|mGRp7pqY zkJ!7E{MNz$9nOwoVqpFb)}$IP24Wn2JJ=Cw(!`OXJBr45rP>>AQr$6c7slJWvbpNW z@KTwna6d?PP>hvXCcp=4F;=GR@R4E7{4VU^0p4F>v^#A|>07*qoM6N<$f*5nx ACIA2c literal 0 HcmV?d00001 diff --git a/animations/step_05_a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png b/animations/step_05_a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..6ed2d933e1120817fe9182483a228007b18ab6ae GIT binary patch literal 450 zcmV;z0X_bSP)iGWQ_5NJQ_~rNh*z)}eT%KUb z`7gNk0#AwF^#0T0?hIa^`~Ck;!}#m+_uT050aTR(J!bU#|IzRL%^UsMS#KsYnTF*!YeDOytlP4VhV?b} z%rz_<=#CPc)tU1MZTq~*2=8~iZ!lSa<{9b@2Jl;?IEV8)=fG217*|@)CCYgFze-x? zIFODUIA>nWKpE+bn~n7;-89sa>#DR>TSlqWk*!2hSN6D~Qb#VqbP~4Fk&m`@1$JGr zXPIdeRE&b2Thd#{MtDK$px*d3-Wx``>!oimf%|A-&-q*6KAH)e$3|6JV%HX{Hig)k suLT-RhftRq8b9;(V=235Wa|I=027H2wCDra;{X5v07*qoM6N<$f;9x^2LJ#7 literal 0 HcmV?d00001 diff --git a/animations/step_05_a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png b/animations/step_05_a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..4cd7b0099ca80c806f8fe495613e8d6c69460d76 GIT binary patch literal 282 zcmV+#0p(^bcu7P-R4C8Q z&e;xxFbF_Vrezo%_kH*OKhshZ6BFpG-Y1e10`QXJKbND7AMQ&cMj60B5TNObaZxYybcN07*qoM6N<$g3m;S%K!iX literal 0 HcmV?d00001 diff --git a/animations/step_05_a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png b/animations/step_05_a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..fe730945a01f64a61e2235dbe3f45b08f7729182 GIT binary patch literal 462 zcmV;<0WtoGP)-}iV`2<;=$?g5M=KQbZ{F&YRNy7Nn@%_*5{gvDM0aKI4?ESmw z{NnZg)A0R`+4?NF_RZexyVB&^^ZvN!{I28tr{Vje;QNTz`dG&Jz0~Ek&f2;*Z7>B|cg}xYpxEFY+0YrKLF;^Q+-HreN0P{&i zK~zY`?b7ECf-n?@;d<&orQ*Q7KoR%4|C>{W^h6@&01>0SKS`dn{Q}GT%Qj_{PLZ_& zs`MFI#j-(>?bvdZ!8^xTwlY{qA)T4QLbY@j(!YJ7aXJervHy6HaG_2SB`6CC{He}f zHVw(fJWApwPq!6VY7r1w-Fs)@ox~N+q|w~e;JI~C4Vf^@d>Wvj=fl`^u9x9wd9 zR%3*Q+)t%S!MU_`id^@&Y{y7-r98lZX0?YrHlfmwb?#}^1b{8g&KzmkE(L>Z&)179 zp<)v6Y}pRl100G2FL_t(o!|l{-Q-VMg#&MKg7c{O0 z2wJImOS3Gy*Z2Qifdv~JYOp;v+U)a|nLoc7hNH;I$;lzDt$}rkaFw1mYK5_0Q(Sut zvbEloxON7$+HSOgC9Z8ltuC&0OSF!-mXv5caV>#bc3@hBPX@I$58-z}(ZZE!t-aOG zpjNkbau@>yEzH(5Yj4kZiMH32XI!4~gVXNnjAvRx;Sdg^`>2DpUEwoMhTs_st8pKG z(%SHyHdU&v%f36~uERh!bd`!T2dw;z6PrOTQ7Vt*#9F2uHlUVnb#ev_o^fh}Dzmq} zWtlk35}k=?xj28uO|5>>$yXadTUE@@IPpgH`gJ~Ro4>jd1IF|(+IX>8M4Ps{PNvmI zNj4D+XgN83gPt_Gm}`Ybv{;+&yu-C(Grdiahmo~BjG-l&mWM+{e5M1sm&=xduwgM9 z`8OEh`=F3r`^E{n_;%9weN{cf2%7=VzC@cYj+lg>+3|D|_1C@{hcU(DyQG_BvBWe? zvTv``=%b1zrol#=R`JB)>cdjpWt&rLJgVp-t?DREyuq1A%0Z4)6_WsQ7{nzjN zo!X zGXV)2i3kcZIL~_j>uIKPK_zib+3T+Nt3Mb&Br)s)UIaA}@p{wDda>7=Q|mGRp7pqY zkJ!7E{MNz$9nOwoVqpFb)}$IP24Wn2JJ=Cw(!`OXJBr45rP>>AQr$6c7slJWvbpNW z@KTwna6d?PP>hvXCcp=4F;=GR@R4E7{4VU^0p4F>v^#A|>07*qoM6N<$f*5nx ACIA2c literal 0 HcmV?d00001 diff --git a/animations/step_05_a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png b/animations/step_05_a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..502f463a9bc882b461c96aadf492d1729e49e725 GIT binary patch literal 586 zcmV-Q0=4~#P)+}#`wDE{8-2Mebf5<{{PqV{TgVcv*r8?UZ3{-|G?_}T*&y;@cqf{ z{Q*~+qr%%p!1pS*_Uicl#q9lc(D`!D`LN62sNwq{oYw(Wmhk)k<@f$!$@ng~_5)Ru z0Z)trIA5^j{DIW^c+vT2%lW+2<(RtE2wR;4O@)Tm`Xr*?A(qYoM}7i5Yxw>D(&6ou zxz!_Xr~yNF+waPe00049Nkl*;a!v6h%{rlvIH#gW3s8p;bFr=l}mRqpW2h zw=OA%hdyL~z+UHOzl0eKhEr$YYOL-c-%Y<)=j?(bzDweB7{b+%_ypvm_cG{SvM=DK zhv{K@m>#Bw>2W$eUI#iU)Wdgs8Y3U+A$Gd&{+j)d)BmGKx+43U_!tik_YlN)>$7G! zhkE!s;%oku3;IwG3U^2kw?z+HM)jB{@zFhK8P#KMSytSthr+4!c(5c%+^UBn`0X*2 zy3(k600_CSZj?O$Qu%&$;|TGUJrptR(HzyIx>5E(2r{eA(<6t3e3I0B)7d6s7?Z5J zZ!rtKvA{MiEBm&KFtoifx>5P^Z=vl)95XJn()aS5%ad(s?4-=Tkis9IGu{`Fy8r+H07*qoM6N<$f20Z)wqMt%V?S?~D#06};F zA3KcL`Wb+>5ObvgQIG&ig8(;V04hz?@cqy3{mSh8o!|U|)cI!1_+!fWH@o*8vh^CU z^ws0;(c$gI+2~q^tO#GDHf@=;DncUw00J^eL_t(&-tE|HQ`%4vfZ;WsBqu-$0nu1R zq^Vj;p$clf^?twn|KHO+IGt^q#a3X?w9dXC@*yxhv&l}F322(8Y1&=P&I}~G@#h6; z1CV9ecD9ZEe87{{NtI*)_aJ<`kJa z?5=RBtFF50s;jQLFil-`)m2wrb=6h(&brpj%nG_U&ut~$?8Rokzxi8zJoWr#2dto5 zOX_URcc<1`Iky+jc;A%Vzx}1QU{2$|cKPom2Vf1{8m`vja4{F>HS?^Nc^rp}xo+Nh zxd}eOm`fm3@MQC1< zIk&aCjb~Yh%5+Yq0`)D;q{#-Uqlv*o+Oor zE!I71Z@ASH3grl8&P^L0WpavHoP|UX4e?!igT`4?AZk$hu*@%6WJ;zDOGlw7kj@ zY5!B-0ft0f?Lgb>C;$Ke07*qoM6N<$f~t1N9smFU literal 0 HcmV?d00001 diff --git a/animations/step_05_a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png b/animations/step_05_a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..0ec303439225b78712f49115768196d8d76f6790 GIT binary patch literal 862 zcmV-k1EKthP)20Z)wqMt%V?S?~D#06};F zA3KcL`Wb+>5ObvgQIG&ig8(;V04hz?@cqy3{mSh8o!|U|)cI!1_+!fWH@o*8vh^CU z^ws0;(c$gI+2~q^tO#GDHf@=;DncUw00J^eL_t(&-tE|HQ`%4vfZ;WsBqu-$0nu1R zq^Vj;p$clf^?twn|KHO+IGt^q#a3X?w9dXC@*yxhv&l}F322(8Y1&=P&I}~G@#h6; z1CV9ecD9ZEe87{{NtI*)_aJ<`kJa z?5=RBtFF50s;jQLFil-`)m2wrb=6h(&brpj%nG_U&ut~$?8Rokzxi8zJoWr#2dto5 zOX_URcc<1`Iky+jc;A%Vzx}1QU{2$|cKPom2Vf1{8m`vja4{F>HS?^Nc^rp}xo+Nh zxd}eOm`fm3@MQC1< zIk&aCjb~Yh%5+Yq0`)D;q{#-Uqlv*o+Oor zE!I71Z@ASH3grl8&P^L0WpavHoP|UX4e?!igT`4?AZk$hu*@%6WJ;zDOGlw7kj@ zY5!B-0ft0f?Lgb>C;$Ke07*qoM6N<$f~t1N9smFU literal 0 HcmV?d00001 diff --git a/animations/step_05_a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png b/animations/step_05_a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..e9f5fea27c705180eb716271f41b582e76dcbd90 GIT binary patch literal 1674 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 literal 0 HcmV?d00001 diff --git a/animations/step_05_a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png b/animations/step_05_a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..0467bf12aa4d28f374bb26596605a46dcbb3e7c8 GIT binary patch literal 1418 zcmV;51$Fv~P)q zKfU)WzW*n(@|xWGCA9ScMt*e9`2kdxPQ&&>|-UCa7_51w+ zLUsW@ZzZSW0y$)Hp~e9%PvP|a03ks1`~K?q{u;6NC8*{AOqIUq{CL&;p56Lf$oQGq z^={4hPQv)y=I|4n+?>7Fim=dxt1 z2H+Dm+1+fh+IF>G0SjJMkQQre1x4|G*Z==(Ot&kCnUrL4I(rf(ucITwmuHf^hXiJT zkdTm&kdTm&kdTm&kdP`esgWG0BcWCVkVZ&2dUwN`cgM8QJb`Z7Z~e<&Yj2(}>Tmf` zm1{eLgw!b{bXkjWbF%dTkTZEJWyWOb##Lfw4EK2}<0d6%>AGS{po>WCOy&f$Tay_> z?NBlkpo@s-O;0V%Y_Xa-G#_O08q5LR*~F%&)}{}r&L%Sbs8AS4t7Y0NEx*{soY=0MZExqA5XHQkqi#4gW3 zqODM^iyZl;dvf)-bOXtOru(s)Uc7~BFx{w-FK;2{`VA?(g&@3z&bfLFyctOH!cVsF z7IL=fo-qBndRUm;kAdXR4e6>k-z|21AaN%ubeVrHl*<|s&Ax@W-t?LR(P-24A5=>a z*R9#QvjzF8n%@1Nw@?CG@6(%>+-0ASK~jEmCV|&a*7-GKT72W<(TbSjf)&Eme6nGE z>Gkj4Sq&2e+-G%|+NM8OOm5zVl9{Z8Dd8A5z3y8mZ=4Bv4%>as_{9cN#bm~;h>62( zdqY93Zy}v&c4n($Vv!UybR8ocs7#zbfX1IY-*w~)p}XyZ-SFC~4w>BvMVr`dFbelV{lLL0bx7@*ZZdebr3`sP;? zVImji)kG)(6Juv0lz@q`F!k1FE;CQ(D0iG$wchPbKZQELlsZ#~rt8#90Y_Xh&3U-< z{s<&cCV_1`^TD^ia9!*mQDq& zn2{r`j};V|uV%_wsP!zB?m%;FeaRe+X47K0e+KE!8C{gAWF8)lCd1u1%~|M!XNRvw zvtqy3iz0WSpWdhn6$hP8PaRBmp)q`#PCA`Vd#Tc$@f1tAcM>f_I@bC)hkI9|o(Iqv zo}Piadq!j76}004RBio<`)70k^`K1NK)q>w?p^C6J2ZC!+UppiK6&y3Kmbv&O!oYF z34$0Z;QO!JOY#!`qyGH<3Pd}Pt@q*A0V=3SVtWKRR8d8Z&@)3qLPA19LPA19LPEUC YUoZo%k(ykuW&i*H07*qoM6N<$f+CH{y8r+H literal 0 HcmV?d00001 diff --git a/animations/step_05_a/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json b/animations/step_05_a/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json new file mode 100644 index 0000000000..0bedcf2fd4 --- /dev/null +++ b/animations/step_05_a/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "LaunchImage.png", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "LaunchImage@2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "filename" : "LaunchImage@3x.png", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} diff --git a/animations/step_05_a/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png b/animations/step_05_a/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png new file mode 100644 index 0000000000000000000000000000000000000000..9da19eacad3b03bb08bbddbbf4ac48dd78b3d838 GIT binary patch literal 68 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx0wlM}@Gt=>Zci7-kcv6Uzs@r-FtIZ-&5|)J Q1PU{Fy85}Sb4q9e0B4a5jsO4v literal 0 HcmV?d00001 diff --git a/animations/step_05_a/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png b/animations/step_05_a/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..9da19eacad3b03bb08bbddbbf4ac48dd78b3d838 GIT binary patch literal 68 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx0wlM}@Gt=>Zci7-kcv6Uzs@r-FtIZ-&5|)J Q1PU{Fy85}Sb4q9e0B4a5jsO4v literal 0 HcmV?d00001 diff --git a/animations/step_05_a/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png b/animations/step_05_a/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..9da19eacad3b03bb08bbddbbf4ac48dd78b3d838 GIT binary patch literal 68 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx0wlM}@Gt=>Zci7-kcv6Uzs@r-FtIZ-&5|)J Q1PU{Fy85}Sb4q9e0B4a5jsO4v literal 0 HcmV?d00001 diff --git a/animations/step_05_a/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md b/animations/step_05_a/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md new file mode 100644 index 0000000000..89c2725b70 --- /dev/null +++ b/animations/step_05_a/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md @@ -0,0 +1,5 @@ +# Launch Screen Assets + +You can customize the launch screen with your own desired assets by replacing the image files in this directory. + +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. \ No newline at end of file diff --git a/animations/step_05_a/ios/Runner/Base.lproj/LaunchScreen.storyboard b/animations/step_05_a/ios/Runner/Base.lproj/LaunchScreen.storyboard new file mode 100644 index 0000000000..f2e259c7c9 --- /dev/null +++ b/animations/step_05_a/ios/Runner/Base.lproj/LaunchScreen.storyboard @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/animations/step_05_a/ios/Runner/Base.lproj/Main.storyboard b/animations/step_05_a/ios/Runner/Base.lproj/Main.storyboard new file mode 100644 index 0000000000..f3c28516fb --- /dev/null +++ b/animations/step_05_a/ios/Runner/Base.lproj/Main.storyboard @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/animations/step_05_a/ios/Runner/Info.plist b/animations/step_05_a/ios/Runner/Info.plist new file mode 100644 index 0000000000..1a0d38e408 --- /dev/null +++ b/animations/step_05_a/ios/Runner/Info.plist @@ -0,0 +1,49 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleDisplayName + Quiz + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + quiz + CFBundlePackageType + APPL + CFBundleShortVersionString + $(FLUTTER_BUILD_NAME) + CFBundleSignature + ???? + CFBundleVersion + $(FLUTTER_BUILD_NUMBER) + LSRequiresIPhoneOS + + UILaunchStoryboardName + LaunchScreen + UIMainStoryboardFile + Main + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + CADisableMinimumFrameDurationOnPhone + + UIApplicationSupportsIndirectInputEvents + + + diff --git a/animations/step_05_a/ios/Runner/Runner-Bridging-Header.h b/animations/step_05_a/ios/Runner/Runner-Bridging-Header.h new file mode 100644 index 0000000000..308a2a560b --- /dev/null +++ b/animations/step_05_a/ios/Runner/Runner-Bridging-Header.h @@ -0,0 +1 @@ +#import "GeneratedPluginRegistrant.h" diff --git a/animations/step_05_a/ios/RunnerTests/RunnerTests.swift b/animations/step_05_a/ios/RunnerTests/RunnerTests.swift new file mode 100644 index 0000000000..86a7c3b1b6 --- /dev/null +++ b/animations/step_05_a/ios/RunnerTests/RunnerTests.swift @@ -0,0 +1,12 @@ +import Flutter +import UIKit +import XCTest + +class RunnerTests: XCTestCase { + + func testExample() { + // If you add code to the Runner application, consider adding tests here. + // See https://developer.apple.com/documentation/xctest for more information about using XCTest. + } + +} diff --git a/animations/step_05_a/lib/flip_effect.dart b/animations/step_05_a/lib/flip_effect.dart new file mode 100644 index 0000000000..cafd21bece --- /dev/null +++ b/animations/step_05_a/lib/flip_effect.dart @@ -0,0 +1,85 @@ +import 'package:flutter/widgets.dart'; +import 'dart:math' as math; + +class CardFlipEffect extends StatefulWidget { + final Widget child; + final Duration duration; + final double delayAmount; + + const CardFlipEffect({ + super.key, + required this.child, + required this.duration, + required this.delayAmount, + }); + + @override + State createState() => _CardFlipEffectState(); +} + +class _CardFlipEffectState extends State + with SingleTickerProviderStateMixin { + late final AnimationController _animationController; + Widget? _previousChild; + late final Animation _animationWithDelay; + + @override + void initState() { + super.initState(); + + _animationController = AnimationController( + vsync: this, duration: widget.duration * (widget.delayAmount + 1)); + + _animationController.addListener(() { + if (_animationController.value == 1) { + _animationController.reset(); + } + }); + + _animationWithDelay = TweenSequence([ + if (widget.delayAmount > 0) + TweenSequenceItem( + tween: ConstantTween(0.0), + weight: widget.delayAmount, + ), + TweenSequenceItem( + tween: Tween(begin: 0.0, end: 1.0), + weight: 1.0, + ), + ]).animate(_animationController); + } + + @override + void didUpdateWidget(covariant CardFlipEffect oldWidget) { + super.didUpdateWidget(oldWidget); + + if (widget.child.key != oldWidget.child.key) { + _handleChildChanged(widget.child, oldWidget.child); + } + } + + void _handleChildChanged(Widget newChild, Widget previousChild) { + _previousChild = previousChild; + _animationController.forward(); + } + + @override + Widget build(BuildContext context) { + return AnimatedBuilder( + animation: _animationWithDelay, + builder: (context, child) { + return Transform( + alignment: Alignment.center, + transform: Matrix4.identity() + ..rotateX(_animationWithDelay.value * math.pi), + child: _animationController.isAnimating + ? _animationWithDelay.value < 0.5 + ? _previousChild + : Transform.flip(flipY: true, child: widget.child) + : widget.child, + ); + }, + child: widget.child, + ); + } +} diff --git a/animations/step_05_a/lib/home_screen.dart b/animations/step_05_a/lib/home_screen.dart new file mode 100644 index 0000000000..cc49bb89b2 --- /dev/null +++ b/animations/step_05_a/lib/home_screen.dart @@ -0,0 +1,48 @@ +import 'package:flutter/material.dart'; +import 'question_screen.dart'; + +class HomeScreen extends StatelessWidget { + const HomeScreen({super.key}); + + @override + Widget build(BuildContext context) { + return Scaffold( + body: Center( + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + Text( + '✏️', + style: Theme.of(context).textTheme.displayLarge, + ), + Text( + 'Flutter Quiz', + style: Theme.of(context).textTheme.displayLarge!.copyWith( + fontWeight: FontWeight.w700, + color: Theme.of(context).colorScheme.onPrimaryFixedVariant), + ), + ElevatedButton( + onPressed: () { + // Show the question screen to start the game + Navigator.push( + context, + PageRouteBuilder( + pageBuilder: (context, animation, secondaryAnimation) { + return const QuestionScreen(); + }, transitionsBuilder: + (context, animation, secondaryAnimation, child) { + return FadeTransition( + opacity: animation, + child: child, + ); + }), + ); + }, + child: const Text('New Game'), + ), + ], + ), + ), + ); + } +} diff --git a/animations/step_05_a/lib/main.dart b/animations/step_05_a/lib/main.dart new file mode 100644 index 0000000000..1d399ebf36 --- /dev/null +++ b/animations/step_05_a/lib/main.dart @@ -0,0 +1,23 @@ +import 'package:flutter/material.dart'; + +import 'home_screen.dart'; + +void main() { + runApp(MainApp()); +} + +class MainApp extends StatelessWidget { + const MainApp({super.key}); + + @override + Widget build(BuildContext context) { + return MaterialApp( + debugShowCheckedModeBanner: false, + theme: ThemeData( + colorScheme: ColorScheme.fromSeed(seedColor: Colors.blue), + useMaterial3: true, + ), + home: HomeScreen(), + ); + } +} diff --git a/animations/step_05_a/lib/model.dart b/animations/step_05_a/lib/model.dart new file mode 100644 index 0000000000..0662327f52 --- /dev/null +++ b/animations/step_05_a/lib/model.dart @@ -0,0 +1,62 @@ +import 'dart:math' as math; + +class Question { + final String question; + final List possibleAnswers; + final int correctAnswer; + Question(this.question, this.possibleAnswers, this.correctAnswer); +} + +class QuestionBank { + final List _questions = _createQuestions(); + + bool get hasNextQuestion => _questions.isNotEmpty; + int get remainingQuestions => _questions.length; + + Question? getRandomQuestion() { + if (_questions.isEmpty) { + return null; + } + + var i = math.Random().nextInt(_questions.length); + var question = _questions[i]; + + _questions.removeAt(i); + return question; + } +} + +List _createQuestions() { + return [ + Question( + 'What class used to create custom explicit animations in Flutter?', + [ + 'AnimationController', + 'AnimatedWidget', + 'AnimatedBuilder', + 'Tween', + ], + 0, + ), + Question( + 'Which widget is used to rebuild its child whenever an animation changes?', + [ + 'AnimatedContainer', + 'AnimatedBuilder', + 'AnimatedSwitcher', + 'AnimatedOpacity', + ], + 1, + ), + Question( + 'What class is used to define the start and end values for an animation?', + [ + 'Tween', + 'Curve', + 'AnimationController', + 'AnimatedWidget', + ], + 0, + ), + ]; +} diff --git a/animations/step_05_a/lib/question_screen.dart b/animations/step_05_a/lib/question_screen.dart new file mode 100644 index 0000000000..36a4aeb4bf --- /dev/null +++ b/animations/step_05_a/lib/question_screen.dart @@ -0,0 +1,205 @@ +import 'package:flutter/material.dart'; +import 'flip_effect.dart'; +import 'scoreboard.dart'; +import 'view_model.dart'; + +class QuestionScreen extends StatefulWidget { + const QuestionScreen({super.key}); + + @override + State createState() => _QuestionScreenState(); +} + +class _QuestionScreenState extends State { + late final QuizViewModel viewModel = + QuizViewModel(onGameOver: _handleGameOver); + + @override + Widget build(BuildContext context) { + return ListenableBuilder( + listenable: viewModel, + builder: (context, child) { + return Scaffold( + appBar: AppBar( + actions: [ + TextButton( + onPressed: + viewModel.hasNextQuestion && viewModel.didAnswerQuestion + ? () { + viewModel.getNextQuestion(); + } + : null, + child: const Text('Next'), + ) + ], + ), + body: Center( + child: Column( + children: [ + QuestionCard(question: viewModel.currentQuestion?.question), + Spacer(), + AnswerCards( + onTapped: (index) { + viewModel.checkAnswer(index); + }, + answers: viewModel.currentQuestion?.possibleAnswers ?? [], + correctAnswer: viewModel.didAnswerQuestion + ? viewModel.currentQuestion?.correctAnswer + : null, + ), + StatusBar(viewModel: viewModel), + ], + ), + ), + ); + }, + ); + } + + void _handleGameOver() { + showDialog( + barrierDismissible: false, + context: context, + builder: (context) { + return AlertDialog( + title: Text('Game Over!'), + content: Text('Score: ${viewModel.score}'), + actions: [ + TextButton( + onPressed: () { + Navigator.popUntil(context, (route) => route.isFirst); + }, + child: Text('OK'), + ), + ], + ); + }, + ); + } +} + +class QuestionCard extends StatelessWidget { + final String? question; + + const QuestionCard({ + required this.question, + super.key, + }); + + @override + Widget build(BuildContext context) { + return AnimatedSwitcher( + layoutBuilder: (Widget? currentChild, List previousChildren) { + return Stack( + alignment: Alignment.topCenter, + children: [ + ...previousChildren, + if (currentChild != null) currentChild, + ], + ); + }, + transitionBuilder: (Widget child, Animation animation) { + final curveAnimation = + CurveTween(curve: Curves.easeInCubic).animate(animation); + final offsetAnimation = + Tween(begin: Offset(-0.1, 0.0), end: Offset.zero) + .animate(curveAnimation); + final fadeInAnimation = curveAnimation; + return FadeTransition( + opacity: fadeInAnimation, + child: SlideTransition(position: offsetAnimation, child: child), + ); + }, + duration: const Duration(milliseconds: 300), + child: Card( + key: ValueKey(question), + elevation: 4, + child: Padding( + padding: const EdgeInsets.all(16.0), + child: Text( + question ?? "", + style: Theme.of(context).textTheme.displaySmall, + ), + ), + ), + ); + } +} + +class AnswerCards extends StatelessWidget { + final List answers; + final ValueChanged onTapped; + final int? correctAnswer; + + const AnswerCards({ + required this.answers, + required this.onTapped, + required this.correctAnswer, + super.key, + }); + + @override + Widget build(BuildContext context) { + return GridView.count( + shrinkWrap: true, + crossAxisCount: 2, + childAspectRatio: 5 / 2, + children: List.generate(answers.length, (index) { + var color = Theme.of(context).colorScheme.primaryContainer; + if (correctAnswer == index) { + color = Theme.of(context).colorScheme.tertiaryContainer; + } + + return CardFlipEffect( + delayAmount: index.toDouble() / 2, + duration: const Duration(milliseconds: 300), + child: Card.filled( + key: ValueKey(answers[index]), + color: color, + elevation: 2, + margin: const EdgeInsets.all(8), + clipBehavior: Clip.hardEdge, + child: InkWell( + onTap: () => onTapped(index), + child: Padding( + padding: const EdgeInsets.all(16.0), + child: Center( + child: Text( + answers.length > index ? answers[index] : "", + style: Theme.of(context).textTheme.titleMedium, + overflow: TextOverflow.clip, + ), + ), + ), + ), + ), + ); + }), + ); + } +} + +class StatusBar extends StatelessWidget { + final QuizViewModel viewModel; + + const StatusBar({required this.viewModel, super.key}); + + @override + Widget build(BuildContext context) { + return Card( + elevation: 4, + child: Padding( + padding: EdgeInsets.all(8.0), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceAround, + children: [ + Scoreboard( + score: viewModel.score, + totalQuestions: viewModel.totalQuestions, + ), + ], + ), + ), + ); + } +} diff --git a/animations/step_05_a/lib/scoreboard.dart b/animations/step_05_a/lib/scoreboard.dart new file mode 100644 index 0000000000..dd71080ba3 --- /dev/null +++ b/animations/step_05_a/lib/scoreboard.dart @@ -0,0 +1,62 @@ +import 'package:flutter/material.dart'; + +class Scoreboard extends StatelessWidget { + final int score; + final int totalQuestions; + + const Scoreboard({ + super.key, + required this.score, + required this.totalQuestions, + }); + + @override + Widget build(BuildContext context) { + return Padding( + padding: const EdgeInsets.all(8.0), + child: Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + for (var i = 0; i < totalQuestions; i++) + AnimatedStar( + isActive: score > i, + ) + ], + ), + ); + } +} + +class AnimatedStar extends StatelessWidget { + final bool isActive; + final Duration _duration = const Duration(milliseconds: 1000); + final Color _deactivatedColor = Colors.grey.shade400; + final Color _activatedColor = Colors.yellow.shade700; + final Curve _curve = Curves.elasticOut; + + AnimatedStar({super.key, required this.isActive}); + + @override + Widget build(BuildContext context) { + return AnimatedScale( + scale: isActive ? 1.0 : 0.5, + curve: _curve, + duration: _duration, + child: TweenAnimationBuilder( + curve: _curve, + duration: _duration, + tween: ColorTween( + begin: _deactivatedColor, + end: isActive ? _activatedColor : _deactivatedColor, + ), + builder: (context, value, child) { + return Icon( + Icons.star, + size: 50, + color: value, + ); + }, + ), + ); + } +} diff --git a/animations/step_05_a/lib/view_model.dart b/animations/step_05_a/lib/view_model.dart new file mode 100644 index 0000000000..84fc5f218b --- /dev/null +++ b/animations/step_05_a/lib/view_model.dart @@ -0,0 +1,43 @@ +import 'package:flutter/cupertino.dart'; +import 'model.dart'; + +class QuizViewModel extends ChangeNotifier { + final QuestionBank _questionBank = QuestionBank(); + final VoidCallback onGameOver; + late final int totalQuestions; + Question? currentQuestion; + int answeredQuestionCount = 0; + int score = 0; + bool didAnswerQuestion = false; + bool get hasNextQuestion => answeredQuestionCount < totalQuestions; + + QuizViewModel({required this.onGameOver}) { + totalQuestions = _questionBank.remainingQuestions; + getNextQuestion(); + } + + void getNextQuestion() { + if (_questionBank.hasNextQuestion) { + currentQuestion = _questionBank.getRandomQuestion(); + answeredQuestionCount++; + } + + didAnswerQuestion = false; + + notifyListeners(); + } + + void checkAnswer(int selectedIndex) { + if (!didAnswerQuestion && currentQuestion?.correctAnswer == selectedIndex) { + score++; + } + + didAnswerQuestion = true; + + if (!_questionBank.hasNextQuestion) { + onGameOver(); + } + + notifyListeners(); + } +} diff --git a/animations/step_05_a/linux/.gitignore b/animations/step_05_a/linux/.gitignore new file mode 100644 index 0000000000..d3896c9844 --- /dev/null +++ b/animations/step_05_a/linux/.gitignore @@ -0,0 +1 @@ +flutter/ephemeral diff --git a/animations/step_05_a/linux/CMakeLists.txt b/animations/step_05_a/linux/CMakeLists.txt new file mode 100644 index 0000000000..658be85ac5 --- /dev/null +++ b/animations/step_05_a/linux/CMakeLists.txt @@ -0,0 +1,145 @@ +# Project-level configuration. +cmake_minimum_required(VERSION 3.10) +project(runner LANGUAGES CXX) + +# The name of the executable created for the application. Change this to change +# the on-disk name of your application. +set(BINARY_NAME "quiz") +# The unique GTK application identifier for this application. See: +# https://wiki.gnome.org/HowDoI/ChooseApplicationID +set(APPLICATION_ID "com.example.quiz") + +# Explicitly opt in to modern CMake behaviors to avoid warnings with recent +# versions of CMake. +cmake_policy(SET CMP0063 NEW) + +# Load bundled libraries from the lib/ directory relative to the binary. +set(CMAKE_INSTALL_RPATH "$ORIGIN/lib") + +# Root filesystem for cross-building. +if(FLUTTER_TARGET_PLATFORM_SYSROOT) + set(CMAKE_SYSROOT ${FLUTTER_TARGET_PLATFORM_SYSROOT}) + set(CMAKE_FIND_ROOT_PATH ${CMAKE_SYSROOT}) + set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) + set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY) + set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) + set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) +endif() + +# Define build configuration options. +if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) + set(CMAKE_BUILD_TYPE "Debug" CACHE + STRING "Flutter build mode" FORCE) + set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS + "Debug" "Profile" "Release") +endif() + +# Compilation settings that should be applied to most targets. +# +# Be cautious about adding new options here, as plugins use this function by +# default. In most cases, you should add new options to specific targets instead +# of modifying this function. +function(APPLY_STANDARD_SETTINGS TARGET) + target_compile_features(${TARGET} PUBLIC cxx_std_14) + target_compile_options(${TARGET} PRIVATE -Wall -Werror) + target_compile_options(${TARGET} PRIVATE "$<$>:-O3>") + target_compile_definitions(${TARGET} PRIVATE "$<$>:NDEBUG>") +endfunction() + +# Flutter library and tool build rules. +set(FLUTTER_MANAGED_DIR "${CMAKE_CURRENT_SOURCE_DIR}/flutter") +add_subdirectory(${FLUTTER_MANAGED_DIR}) + +# System-level dependencies. +find_package(PkgConfig REQUIRED) +pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) + +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Define the application target. To change its name, change BINARY_NAME above, +# not the value here, or `flutter run` will no longer work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +# Run the Flutter tool portions of the build. This must not be removed. +add_dependencies(${BINARY_NAME} flutter_assemble) + +# Only the install-generated bundle's copy of the executable will launch +# correctly, since the resources must in the right relative locations. To avoid +# people trying to run the unbundled copy, put it in a subdirectory instead of +# the default top-level location. +set_target_properties(${BINARY_NAME} + PROPERTIES + RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/intermediates_do_not_run" +) + + +# Generated plugin build rules, which manage building the plugins and adding +# them to the application. +include(flutter/generated_plugins.cmake) + + +# === Installation === +# By default, "installing" just makes a relocatable bundle in the build +# directory. +set(BUILD_BUNDLE_DIR "${PROJECT_BINARY_DIR}/bundle") +if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) + set(CMAKE_INSTALL_PREFIX "${BUILD_BUNDLE_DIR}" CACHE PATH "..." FORCE) +endif() + +# Start with a clean build bundle directory every time. +install(CODE " + file(REMOVE_RECURSE \"${BUILD_BUNDLE_DIR}/\") + " COMPONENT Runtime) + +set(INSTALL_BUNDLE_DATA_DIR "${CMAKE_INSTALL_PREFIX}/data") +set(INSTALL_BUNDLE_LIB_DIR "${CMAKE_INSTALL_PREFIX}/lib") + +install(TARGETS ${BINARY_NAME} RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_ICU_DATA_FILE}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) + +foreach(bundled_library ${PLUGIN_BUNDLED_LIBRARIES}) + install(FILES "${bundled_library}" + DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) +endforeach(bundled_library) + +# Copy the native assets provided by the build.dart from all packages. +set(NATIVE_ASSETS_DIR "${PROJECT_BUILD_DIR}native_assets/linux/") +install(DIRECTORY "${NATIVE_ASSETS_DIR}" + DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) + +# Fully re-copy the assets directory on each build to avoid having stale files +# from a previous install. +set(FLUTTER_ASSET_DIR_NAME "flutter_assets") +install(CODE " + file(REMOVE_RECURSE \"${INSTALL_BUNDLE_DATA_DIR}/${FLUTTER_ASSET_DIR_NAME}\") + " COMPONENT Runtime) +install(DIRECTORY "${PROJECT_BUILD_DIR}/${FLUTTER_ASSET_DIR_NAME}" + DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" COMPONENT Runtime) + +# Install the AOT library on non-Debug builds only. +if(NOT CMAKE_BUILD_TYPE MATCHES "Debug") + install(FILES "${AOT_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) +endif() diff --git a/animations/step_05_a/linux/flutter/CMakeLists.txt b/animations/step_05_a/linux/flutter/CMakeLists.txt new file mode 100644 index 0000000000..d5bd01648a --- /dev/null +++ b/animations/step_05_a/linux/flutter/CMakeLists.txt @@ -0,0 +1,88 @@ +# This file controls Flutter-level build steps. It should not be edited. +cmake_minimum_required(VERSION 3.10) + +set(EPHEMERAL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/ephemeral") + +# Configuration provided via flutter tool. +include(${EPHEMERAL_DIR}/generated_config.cmake) + +# TODO: Move the rest of this into files in ephemeral. See +# https://github.com/flutter/flutter/issues/57146. + +# Serves the same purpose as list(TRANSFORM ... PREPEND ...), +# which isn't available in 3.10. +function(list_prepend LIST_NAME PREFIX) + set(NEW_LIST "") + foreach(element ${${LIST_NAME}}) + list(APPEND NEW_LIST "${PREFIX}${element}") + endforeach(element) + set(${LIST_NAME} "${NEW_LIST}" PARENT_SCOPE) +endfunction() + +# === Flutter Library === +# System-level dependencies. +find_package(PkgConfig REQUIRED) +pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) +pkg_check_modules(GLIB REQUIRED IMPORTED_TARGET glib-2.0) +pkg_check_modules(GIO REQUIRED IMPORTED_TARGET gio-2.0) + +set(FLUTTER_LIBRARY "${EPHEMERAL_DIR}/libflutter_linux_gtk.so") + +# Published to parent scope for install step. +set(FLUTTER_LIBRARY ${FLUTTER_LIBRARY} PARENT_SCOPE) +set(FLUTTER_ICU_DATA_FILE "${EPHEMERAL_DIR}/icudtl.dat" PARENT_SCOPE) +set(PROJECT_BUILD_DIR "${PROJECT_DIR}/build/" PARENT_SCOPE) +set(AOT_LIBRARY "${PROJECT_DIR}/build/lib/libapp.so" PARENT_SCOPE) + +list(APPEND FLUTTER_LIBRARY_HEADERS + "fl_basic_message_channel.h" + "fl_binary_codec.h" + "fl_binary_messenger.h" + "fl_dart_project.h" + "fl_engine.h" + "fl_json_message_codec.h" + "fl_json_method_codec.h" + "fl_message_codec.h" + "fl_method_call.h" + "fl_method_channel.h" + "fl_method_codec.h" + "fl_method_response.h" + "fl_plugin_registrar.h" + "fl_plugin_registry.h" + "fl_standard_message_codec.h" + "fl_standard_method_codec.h" + "fl_string_codec.h" + "fl_value.h" + "fl_view.h" + "flutter_linux.h" +) +list_prepend(FLUTTER_LIBRARY_HEADERS "${EPHEMERAL_DIR}/flutter_linux/") +add_library(flutter INTERFACE) +target_include_directories(flutter INTERFACE + "${EPHEMERAL_DIR}" +) +target_link_libraries(flutter INTERFACE "${FLUTTER_LIBRARY}") +target_link_libraries(flutter INTERFACE + PkgConfig::GTK + PkgConfig::GLIB + PkgConfig::GIO +) +add_dependencies(flutter flutter_assemble) + +# === Flutter tool backend === +# _phony_ is a non-existent file to force this command to run every time, +# since currently there's no way to get a full input/output list from the +# flutter tool. +add_custom_command( + OUTPUT ${FLUTTER_LIBRARY} ${FLUTTER_LIBRARY_HEADERS} + ${CMAKE_CURRENT_BINARY_DIR}/_phony_ + COMMAND ${CMAKE_COMMAND} -E env + ${FLUTTER_TOOL_ENVIRONMENT} + "${FLUTTER_ROOT}/packages/flutter_tools/bin/tool_backend.sh" + ${FLUTTER_TARGET_PLATFORM} ${CMAKE_BUILD_TYPE} + VERBATIM +) +add_custom_target(flutter_assemble DEPENDS + "${FLUTTER_LIBRARY}" + ${FLUTTER_LIBRARY_HEADERS} +) diff --git a/animations/step_05_a/linux/flutter/generated_plugin_registrant.cc b/animations/step_05_a/linux/flutter/generated_plugin_registrant.cc new file mode 100644 index 0000000000..e71a16d23d --- /dev/null +++ b/animations/step_05_a/linux/flutter/generated_plugin_registrant.cc @@ -0,0 +1,11 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#include "generated_plugin_registrant.h" + + +void fl_register_plugins(FlPluginRegistry* registry) { +} diff --git a/animations/step_05_a/linux/flutter/generated_plugin_registrant.h b/animations/step_05_a/linux/flutter/generated_plugin_registrant.h new file mode 100644 index 0000000000..e0f0a47bc0 --- /dev/null +++ b/animations/step_05_a/linux/flutter/generated_plugin_registrant.h @@ -0,0 +1,15 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#ifndef GENERATED_PLUGIN_REGISTRANT_ +#define GENERATED_PLUGIN_REGISTRANT_ + +#include + +// Registers Flutter plugins. +void fl_register_plugins(FlPluginRegistry* registry); + +#endif // GENERATED_PLUGIN_REGISTRANT_ diff --git a/animations/step_05_a/linux/flutter/generated_plugins.cmake b/animations/step_05_a/linux/flutter/generated_plugins.cmake new file mode 100644 index 0000000000..2e1de87a7e --- /dev/null +++ b/animations/step_05_a/linux/flutter/generated_plugins.cmake @@ -0,0 +1,23 @@ +# +# Generated file, do not edit. +# + +list(APPEND FLUTTER_PLUGIN_LIST +) + +list(APPEND FLUTTER_FFI_PLUGIN_LIST +) + +set(PLUGIN_BUNDLED_LIBRARIES) + +foreach(plugin ${FLUTTER_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${plugin}/linux plugins/${plugin}) + target_link_libraries(${BINARY_NAME} PRIVATE ${plugin}_plugin) + list(APPEND PLUGIN_BUNDLED_LIBRARIES $) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${plugin}_bundled_libraries}) +endforeach(plugin) + +foreach(ffi_plugin ${FLUTTER_FFI_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${ffi_plugin}/linux plugins/${ffi_plugin}) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${ffi_plugin}_bundled_libraries}) +endforeach(ffi_plugin) diff --git a/animations/step_05_a/linux/main.cc b/animations/step_05_a/linux/main.cc new file mode 100644 index 0000000000..e7c5c54370 --- /dev/null +++ b/animations/step_05_a/linux/main.cc @@ -0,0 +1,6 @@ +#include "my_application.h" + +int main(int argc, char** argv) { + g_autoptr(MyApplication) app = my_application_new(); + return g_application_run(G_APPLICATION(app), argc, argv); +} diff --git a/animations/step_05_a/linux/my_application.cc b/animations/step_05_a/linux/my_application.cc new file mode 100644 index 0000000000..d6ea0e3c5f --- /dev/null +++ b/animations/step_05_a/linux/my_application.cc @@ -0,0 +1,124 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "quiz"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "quiz"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/animations/step_05_a/linux/my_application.h b/animations/step_05_a/linux/my_application.h new file mode 100644 index 0000000000..72271d5e41 --- /dev/null +++ b/animations/step_05_a/linux/my_application.h @@ -0,0 +1,18 @@ +#ifndef FLUTTER_MY_APPLICATION_H_ +#define FLUTTER_MY_APPLICATION_H_ + +#include + +G_DECLARE_FINAL_TYPE(MyApplication, my_application, MY, APPLICATION, + GtkApplication) + +/** + * my_application_new: + * + * Creates a new Flutter-based application. + * + * Returns: a new #MyApplication. + */ +MyApplication* my_application_new(); + +#endif // FLUTTER_MY_APPLICATION_H_ diff --git a/animations/step_05_a/macos/.gitignore b/animations/step_05_a/macos/.gitignore new file mode 100644 index 0000000000..746adbb6b9 --- /dev/null +++ b/animations/step_05_a/macos/.gitignore @@ -0,0 +1,7 @@ +# Flutter-related +**/Flutter/ephemeral/ +**/Pods/ + +# Xcode-related +**/dgph +**/xcuserdata/ diff --git a/animations/step_05_a/macos/Flutter/Flutter-Debug.xcconfig b/animations/step_05_a/macos/Flutter/Flutter-Debug.xcconfig new file mode 100644 index 0000000000..c2efd0b608 --- /dev/null +++ b/animations/step_05_a/macos/Flutter/Flutter-Debug.xcconfig @@ -0,0 +1 @@ +#include "ephemeral/Flutter-Generated.xcconfig" diff --git a/animations/step_05_a/macos/Flutter/Flutter-Release.xcconfig b/animations/step_05_a/macos/Flutter/Flutter-Release.xcconfig new file mode 100644 index 0000000000..c2efd0b608 --- /dev/null +++ b/animations/step_05_a/macos/Flutter/Flutter-Release.xcconfig @@ -0,0 +1 @@ +#include "ephemeral/Flutter-Generated.xcconfig" diff --git a/animations/step_05_a/macos/Flutter/GeneratedPluginRegistrant.swift b/animations/step_05_a/macos/Flutter/GeneratedPluginRegistrant.swift new file mode 100644 index 0000000000..cccf817a52 --- /dev/null +++ b/animations/step_05_a/macos/Flutter/GeneratedPluginRegistrant.swift @@ -0,0 +1,10 @@ +// +// Generated file. Do not edit. +// + +import FlutterMacOS +import Foundation + + +func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { +} diff --git a/animations/step_05_a/macos/Runner.xcodeproj/project.pbxproj b/animations/step_05_a/macos/Runner.xcodeproj/project.pbxproj new file mode 100644 index 0000000000..45c35dfed5 --- /dev/null +++ b/animations/step_05_a/macos/Runner.xcodeproj/project.pbxproj @@ -0,0 +1,705 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 54; + objects = { + +/* Begin PBXAggregateTarget section */ + 33CC111A2044C6BA0003C045 /* Flutter Assemble */ = { + isa = PBXAggregateTarget; + buildConfigurationList = 33CC111B2044C6BA0003C045 /* Build configuration list for PBXAggregateTarget "Flutter Assemble" */; + buildPhases = ( + 33CC111E2044C6BF0003C045 /* ShellScript */, + ); + dependencies = ( + ); + name = "Flutter Assemble"; + productName = FLX; + }; +/* End PBXAggregateTarget section */ + +/* Begin PBXBuildFile section */ + 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; + 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; + 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; + 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; + 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; + 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 331C80D9294CF71000263BE5 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 33CC10E52044A3C60003C045 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 33CC10EC2044A3C60003C045; + remoteInfo = Runner; + }; + 33CC111F2044C79F0003C045 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 33CC10E52044A3C60003C045 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 33CC111A2044C6BA0003C045; + remoteInfo = FLX; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 33CC110E2044A8840003C045 /* Bundle Framework */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + ); + name = "Bundle Framework"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; + 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; + 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; }; + 33CC10ED2044A3C60003C045 /* quiz.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "quiz.app"; sourceTree = BUILT_PRODUCTS_DIR; }; + 33CC10F02044A3C60003C045 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 33CC10F22044A3C60003C045 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = Runner/Assets.xcassets; sourceTree = ""; }; + 33CC10F52044A3C60003C045 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = ""; }; + 33CC10F72044A3C60003C045 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = Info.plist; path = Runner/Info.plist; sourceTree = ""; }; + 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainFlutterWindow.swift; sourceTree = ""; }; + 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Debug.xcconfig"; sourceTree = ""; }; + 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Release.xcconfig"; sourceTree = ""; }; + 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = "Flutter-Generated.xcconfig"; path = "ephemeral/Flutter-Generated.xcconfig"; sourceTree = ""; }; + 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; + 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; + 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; + 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 331C80D2294CF70F00263BE5 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 33CC10EA2044A3C60003C045 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 331C80D6294CF71000263BE5 /* RunnerTests */ = { + isa = PBXGroup; + children = ( + 331C80D7294CF71000263BE5 /* RunnerTests.swift */, + ); + path = RunnerTests; + sourceTree = ""; + }; + 33BA886A226E78AF003329D5 /* Configs */ = { + isa = PBXGroup; + children = ( + 33E5194F232828860026EE4D /* AppInfo.xcconfig */, + 9740EEB21CF90195004384FC /* Debug.xcconfig */, + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, + 333000ED22D3DE5D00554162 /* Warnings.xcconfig */, + ); + path = Configs; + sourceTree = ""; + }; + 33CC10E42044A3C60003C045 = { + isa = PBXGroup; + children = ( + 33FAB671232836740065AC1E /* Runner */, + 33CEB47122A05771004F2AC0 /* Flutter */, + 331C80D6294CF71000263BE5 /* RunnerTests */, + 33CC10EE2044A3C60003C045 /* Products */, + D73912EC22F37F3D000D13A0 /* Frameworks */, + ); + sourceTree = ""; + }; + 33CC10EE2044A3C60003C045 /* Products */ = { + isa = PBXGroup; + children = ( + 33CC10ED2044A3C60003C045 /* quiz.app */, + 331C80D5294CF71000263BE5 /* RunnerTests.xctest */, + ); + name = Products; + sourceTree = ""; + }; + 33CC11242044D66E0003C045 /* Resources */ = { + isa = PBXGroup; + children = ( + 33CC10F22044A3C60003C045 /* Assets.xcassets */, + 33CC10F42044A3C60003C045 /* MainMenu.xib */, + 33CC10F72044A3C60003C045 /* Info.plist */, + ); + name = Resources; + path = ..; + sourceTree = ""; + }; + 33CEB47122A05771004F2AC0 /* Flutter */ = { + isa = PBXGroup; + children = ( + 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */, + 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */, + 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */, + 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */, + ); + path = Flutter; + sourceTree = ""; + }; + 33FAB671232836740065AC1E /* Runner */ = { + isa = PBXGroup; + children = ( + 33CC10F02044A3C60003C045 /* AppDelegate.swift */, + 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */, + 33E51913231747F40026EE4D /* DebugProfile.entitlements */, + 33E51914231749380026EE4D /* Release.entitlements */, + 33CC11242044D66E0003C045 /* Resources */, + 33BA886A226E78AF003329D5 /* Configs */, + ); + path = Runner; + sourceTree = ""; + }; + D73912EC22F37F3D000D13A0 /* Frameworks */ = { + isa = PBXGroup; + children = ( + ); + name = Frameworks; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 331C80D4294CF70F00263BE5 /* RunnerTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; + buildPhases = ( + 331C80D1294CF70F00263BE5 /* Sources */, + 331C80D2294CF70F00263BE5 /* Frameworks */, + 331C80D3294CF70F00263BE5 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 331C80DA294CF71000263BE5 /* PBXTargetDependency */, + ); + name = RunnerTests; + productName = RunnerTests; + productReference = 331C80D5294CF71000263BE5 /* RunnerTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; + 33CC10EC2044A3C60003C045 /* Runner */ = { + isa = PBXNativeTarget; + buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; + buildPhases = ( + 33CC10E92044A3C60003C045 /* Sources */, + 33CC10EA2044A3C60003C045 /* Frameworks */, + 33CC10EB2044A3C60003C045 /* Resources */, + 33CC110E2044A8840003C045 /* Bundle Framework */, + 3399D490228B24CF009A79C7 /* ShellScript */, + ); + buildRules = ( + ); + dependencies = ( + 33CC11202044C79F0003C045 /* PBXTargetDependency */, + ); + name = Runner; + productName = Runner; + productReference = 33CC10ED2044A3C60003C045 /* quiz.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 33CC10E52044A3C60003C045 /* Project object */ = { + isa = PBXProject; + attributes = { + BuildIndependentTargetsInParallel = YES; + LastSwiftUpdateCheck = 0920; + LastUpgradeCheck = 1510; + ORGANIZATIONNAME = ""; + TargetAttributes = { + 331C80D4294CF70F00263BE5 = { + CreatedOnToolsVersion = 14.0; + TestTargetID = 33CC10EC2044A3C60003C045; + }; + 33CC10EC2044A3C60003C045 = { + CreatedOnToolsVersion = 9.2; + LastSwiftMigration = 1100; + ProvisioningStyle = Automatic; + SystemCapabilities = { + com.apple.Sandbox = { + enabled = 1; + }; + }; + }; + 33CC111A2044C6BA0003C045 = { + CreatedOnToolsVersion = 9.2; + ProvisioningStyle = Manual; + }; + }; + }; + buildConfigurationList = 33CC10E82044A3C60003C045 /* Build configuration list for PBXProject "Runner" */; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 33CC10E42044A3C60003C045; + productRefGroup = 33CC10EE2044A3C60003C045 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 33CC10EC2044A3C60003C045 /* Runner */, + 331C80D4294CF70F00263BE5 /* RunnerTests */, + 33CC111A2044C6BA0003C045 /* Flutter Assemble */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 331C80D3294CF70F00263BE5 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 33CC10EB2044A3C60003C045 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */, + 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 3399D490228B24CF009A79C7 /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; + }; + 33CC111E2044C6BF0003C045 /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + Flutter/ephemeral/FlutterInputs.xcfilelist, + ); + inputPaths = ( + Flutter/ephemeral/tripwire, + ); + outputFileListPaths = ( + Flutter/ephemeral/FlutterOutputs.xcfilelist, + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 331C80D1294CF70F00263BE5 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 33CC10E92044A3C60003C045 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */, + 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */, + 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 331C80DA294CF71000263BE5 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 33CC10EC2044A3C60003C045 /* Runner */; + targetProxy = 331C80D9294CF71000263BE5 /* PBXContainerItemProxy */; + }; + 33CC11202044C79F0003C045 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 33CC111A2044C6BA0003C045 /* Flutter Assemble */; + targetProxy = 33CC111F2044C79F0003C045 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + 33CC10F42044A3C60003C045 /* MainMenu.xib */ = { + isa = PBXVariantGroup; + children = ( + 33CC10F52044A3C60003C045 /* Base */, + ); + name = MainMenu.xib; + path = Runner; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 331C80DB294CF71000263BE5 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.quiz.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/quiz.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/quiz"; + }; + name = Debug; + }; + 331C80DC294CF71000263BE5 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.quiz.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/quiz.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/quiz"; + }; + name = Release; + }; + 331C80DD294CF71000263BE5 /* Profile */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.quiz.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/quiz.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/quiz"; + }; + name = Profile; + }; + 338D0CE9231458BD00FA5F75 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + DEAD_CODE_STRIPPING = YES; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.14; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = macosx; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + }; + name = Profile; + }; + 338D0CEA231458BD00FA5F75 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_VERSION = 5.0; + }; + name = Profile; + }; + 338D0CEB231458BD00FA5F75 /* Profile */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Manual; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Profile; + }; + 33CC10F92044A3C60003C045 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + DEAD_CODE_STRIPPING = YES; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.14; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = macosx; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + }; + name = Debug; + }; + 33CC10FA2044A3C60003C045 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + DEAD_CODE_STRIPPING = YES; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.14; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = macosx; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + }; + name = Release; + }; + 33CC10FC2044A3C60003C045 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + }; + name = Debug; + }; + 33CC10FD2044A3C60003C045 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/Release.entitlements; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_VERSION = 5.0; + }; + name = Release; + }; + 33CC111C2044C6BA0003C045 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Manual; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Debug; + }; + 33CC111D2044C6BA0003C045 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Automatic; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 331C80DB294CF71000263BE5 /* Debug */, + 331C80DC294CF71000263BE5 /* Release */, + 331C80DD294CF71000263BE5 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 33CC10E82044A3C60003C045 /* Build configuration list for PBXProject "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 33CC10F92044A3C60003C045 /* Debug */, + 33CC10FA2044A3C60003C045 /* Release */, + 338D0CE9231458BD00FA5F75 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 33CC10FC2044A3C60003C045 /* Debug */, + 33CC10FD2044A3C60003C045 /* Release */, + 338D0CEA231458BD00FA5F75 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 33CC111B2044C6BA0003C045 /* Build configuration list for PBXAggregateTarget "Flutter Assemble" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 33CC111C2044C6BA0003C045 /* Debug */, + 33CC111D2044C6BA0003C045 /* Release */, + 338D0CEB231458BD00FA5F75 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 33CC10E52044A3C60003C045 /* Project object */; +} diff --git a/animations/step_05_a/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/animations/step_05_a/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000000..18d981003d --- /dev/null +++ b/animations/step_05_a/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/animations/step_05_a/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/animations/step_05_a/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme new file mode 100644 index 0000000000..2f413cb17b --- /dev/null +++ b/animations/step_05_a/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -0,0 +1,98 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/animations/step_05_a/macos/Runner.xcworkspace/contents.xcworkspacedata b/animations/step_05_a/macos/Runner.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000000..1d526a16ed --- /dev/null +++ b/animations/step_05_a/macos/Runner.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/animations/step_05_a/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/animations/step_05_a/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000000..18d981003d --- /dev/null +++ b/animations/step_05_a/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/animations/step_05_a/macos/Runner/AppDelegate.swift b/animations/step_05_a/macos/Runner/AppDelegate.swift new file mode 100644 index 0000000000..8e02df2888 --- /dev/null +++ b/animations/step_05_a/macos/Runner/AppDelegate.swift @@ -0,0 +1,9 @@ +import Cocoa +import FlutterMacOS + +@main +class AppDelegate: FlutterAppDelegate { + override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { + return true + } +} diff --git a/animations/step_05_a/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/animations/step_05_a/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000000..a2ec33f19f --- /dev/null +++ b/animations/step_05_a/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,68 @@ +{ + "images" : [ + { + "size" : "16x16", + "idiom" : "mac", + "filename" : "app_icon_16.png", + "scale" : "1x" + }, + { + "size" : "16x16", + "idiom" : "mac", + "filename" : "app_icon_32.png", + "scale" : "2x" + }, + { + "size" : "32x32", + "idiom" : "mac", + "filename" : "app_icon_32.png", + "scale" : "1x" + }, + { + "size" : "32x32", + "idiom" : "mac", + "filename" : "app_icon_64.png", + "scale" : "2x" + }, + { + "size" : "128x128", + "idiom" : "mac", + "filename" : "app_icon_128.png", + "scale" : "1x" + }, + { + "size" : "128x128", + "idiom" : "mac", + "filename" : "app_icon_256.png", + "scale" : "2x" + }, + { + "size" : "256x256", + "idiom" : "mac", + "filename" : "app_icon_256.png", + "scale" : "1x" + }, + { + "size" : "256x256", + "idiom" : "mac", + "filename" : "app_icon_512.png", + "scale" : "2x" + }, + { + "size" : "512x512", + "idiom" : "mac", + "filename" : "app_icon_512.png", + "scale" : "1x" + }, + { + "size" : "512x512", + "idiom" : "mac", + "filename" : "app_icon_1024.png", + "scale" : "2x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} diff --git a/animations/step_05_a/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png b/animations/step_05_a/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png new file mode 100644 index 0000000000000000000000000000000000000000..82b6f9d9a33e198f5747104729e1fcef999772a5 GIT binary patch literal 102994 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ⅅ8MglG&ER{i5lN315cO?EdHNLrg? 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 z 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 Pe7HEdAEg|=c=LY&YVNkY literal 0 HcmV?d00001 diff --git a/animations/step_05_a/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png b/animations/step_05_a/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png new file mode 100644 index 0000000000000000000000000000000000000000..13b35eba55c6dabc3aac36f33d859266c18fa0d0 GIT binary patch literal 5680 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 literal 0 HcmV?d00001 diff --git a/animations/step_05_a/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png b/animations/step_05_a/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png new file mode 100644 index 0000000000000000000000000000000000000000..0a3f5fa40fb3d1e0710331a48de5d256da3f275d GIT binary patch literal 520 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 literal 0 HcmV?d00001 diff --git a/animations/step_05_a/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png b/animations/step_05_a/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png new file mode 100644 index 0000000000000000000000000000000000000000..2f1632cfddf3d9dade342351e627a0a75609fb46 GIT binary patch literal 2218 zcmV;b2vzrqP)Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91K%fHv1ONa40RR91KmY&$07g+lumAuE6iGxuRCodHTWf3-RTMruyW6Fu zQYeUM04eX6D5c0FCjKKPrco1(K`<0SL=crI{PC3-^hZU0kQie$gh-5!7z6SH6Q0J% zqot*`H1q{R5fHFYS}dje@;kG=v$L0(yY0?wY2%*c?A&{2?!D*x?m71{of2gv!$5|C z3>qG_BW}7K_yUcT3A5C6QD<+{aq?x;MAUyAiJn#Jv8_zZtQ{P zTRzbL3U9!qVuZzS$xKU10KiW~Bgdcv1-!uAhQxf3a7q+dU6lj?yoO4Lq4TUN4}h{N z*fIM=SS8|C2$(T>w$`t@3Tka!(r!7W`x z-isCVgQD^mG-MJ;XtJuK3V{Vy72GQ83KRWsHU?e*wrhKk=ApIYeDqLi;JI1e zuvv}5^Dc=k7F7?nm3nIw$NVmU-+R>> zyqOR$-2SDpJ}Pt;^RkJytDVXNTsu|mI1`~G7yw`EJR?VkGfNdqK9^^8P`JdtTV&tX4CNcV4 z&N06nZa??Fw1AgQOUSE2AmPE@WO(Fvo`%m`cDgiv(fAeRA%3AGXUbsGw{7Q`cY;1BI#ac3iN$$Hw z0LT0;xc%=q)me?Y*$xI@GRAw?+}>=9D+KTk??-HJ4=A>`V&vKFS75@MKdSF1JTq{S zc1!^8?YA|t+uKigaq!sT;Z!&0F2=k7F0PIU;F$leJLaw2UI6FL^w}OG&!;+b%ya1c z1n+6-inU<0VM-Y_s5iTElq)ThyF?StVcebpGI znw#+zLx2@ah{$_2jn+@}(zJZ{+}_N9BM;z)0yr|gF-4=Iyu@hI*Lk=-A8f#bAzc9f z`Kd6K--x@t04swJVC3JK1cHY-Hq+=|PN-VO;?^_C#;coU6TDP7Bt`;{JTG;!+jj(` zw5cLQ-(Cz-Tlb`A^w7|R56Ce;Wmr0)$KWOUZ6ai0PhzPeHwdl0H(etP zUV`va_i0s-4#DkNM8lUlqI7>YQLf)(lz9Q3Uw`)nc(z3{m5ZE77Ul$V%m)E}3&8L0 z-XaU|eB~Is08eORPk;=<>!1w)Kf}FOVS2l&9~A+@R#koFJ$Czd%Y(ENTV&A~U(IPI z;UY+gf+&6ioZ=roly<0Yst8ck>(M=S?B-ys3mLdM&)ex!hbt+ol|T6CTS+Sc0jv(& z7ijdvFwBq;0a{%3GGwkDKTeG`b+lyj0jjS1OMkYnepCdoosNY`*zmBIo*981BU%%U z@~$z0V`OVtIbEx5pa|Tct|Lg#ZQf5OYMUMRD>Wdxm5SAqV2}3!ceE-M2 z@O~lQ0OiKQp}o9I;?uxCgYVV?FH|?Riri*U$Zi_`V2eiA>l zdSm6;SEm6#T+SpcE8Ro_f2AwxzI z44hfe^WE3!h@W3RDyA_H440cpmYkv*)6m1XazTqw%=E5Xv7^@^^T7Q2wxr+Z2kVYr + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/animations/step_05_a/macos/Runner/Configs/AppInfo.xcconfig b/animations/step_05_a/macos/Runner/Configs/AppInfo.xcconfig new file mode 100644 index 0000000000..28c7905763 --- /dev/null +++ b/animations/step_05_a/macos/Runner/Configs/AppInfo.xcconfig @@ -0,0 +1,14 @@ +// Application-level settings for the Runner target. +// +// This may be replaced with something auto-generated from metadata (e.g., pubspec.yaml) in the +// future. If not, the values below would default to using the project name when this becomes a +// 'flutter create' template. + +// The application's name. By default this is also the title of the Flutter window. +PRODUCT_NAME = quiz + +// The application's bundle identifier +PRODUCT_BUNDLE_IDENTIFIER = com.example.quiz + +// The copyright displayed in application information +PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved. diff --git a/animations/step_05_a/macos/Runner/Configs/Debug.xcconfig b/animations/step_05_a/macos/Runner/Configs/Debug.xcconfig new file mode 100644 index 0000000000..36b0fd9464 --- /dev/null +++ b/animations/step_05_a/macos/Runner/Configs/Debug.xcconfig @@ -0,0 +1,2 @@ +#include "../../Flutter/Flutter-Debug.xcconfig" +#include "Warnings.xcconfig" diff --git a/animations/step_05_a/macos/Runner/Configs/Release.xcconfig b/animations/step_05_a/macos/Runner/Configs/Release.xcconfig new file mode 100644 index 0000000000..dff4f49561 --- /dev/null +++ b/animations/step_05_a/macos/Runner/Configs/Release.xcconfig @@ -0,0 +1,2 @@ +#include "../../Flutter/Flutter-Release.xcconfig" +#include "Warnings.xcconfig" diff --git a/animations/step_05_a/macos/Runner/Configs/Warnings.xcconfig b/animations/step_05_a/macos/Runner/Configs/Warnings.xcconfig new file mode 100644 index 0000000000..42bcbf4780 --- /dev/null +++ b/animations/step_05_a/macos/Runner/Configs/Warnings.xcconfig @@ -0,0 +1,13 @@ +WARNING_CFLAGS = -Wall -Wconditional-uninitialized -Wnullable-to-nonnull-conversion -Wmissing-method-return-type -Woverlength-strings +GCC_WARN_UNDECLARED_SELECTOR = YES +CLANG_UNDEFINED_BEHAVIOR_SANITIZER_NULLABILITY = YES +CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE +CLANG_WARN__DUPLICATE_METHOD_MATCH = YES +CLANG_WARN_PRAGMA_PACK = YES +CLANG_WARN_STRICT_PROTOTYPES = YES +CLANG_WARN_COMMA = YES +GCC_WARN_STRICT_SELECTOR_MATCH = YES +CLANG_WARN_OBJC_REPEATED_USE_OF_WEAK = YES +CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES +GCC_WARN_SHADOW = YES +CLANG_WARN_UNREACHABLE_CODE = YES diff --git a/animations/step_05_a/macos/Runner/DebugProfile.entitlements b/animations/step_05_a/macos/Runner/DebugProfile.entitlements new file mode 100644 index 0000000000..dddb8a30c8 --- /dev/null +++ b/animations/step_05_a/macos/Runner/DebugProfile.entitlements @@ -0,0 +1,12 @@ + + + + + com.apple.security.app-sandbox + + com.apple.security.cs.allow-jit + + com.apple.security.network.server + + + diff --git a/animations/step_05_a/macos/Runner/Info.plist b/animations/step_05_a/macos/Runner/Info.plist new file mode 100644 index 0000000000..4789daa6a4 --- /dev/null +++ b/animations/step_05_a/macos/Runner/Info.plist @@ -0,0 +1,32 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIconFile + + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + APPL + CFBundleShortVersionString + $(FLUTTER_BUILD_NAME) + CFBundleVersion + $(FLUTTER_BUILD_NUMBER) + LSMinimumSystemVersion + $(MACOSX_DEPLOYMENT_TARGET) + NSHumanReadableCopyright + $(PRODUCT_COPYRIGHT) + NSMainNibFile + MainMenu + NSPrincipalClass + NSApplication + + diff --git a/animations/step_05_a/macos/Runner/MainFlutterWindow.swift b/animations/step_05_a/macos/Runner/MainFlutterWindow.swift new file mode 100644 index 0000000000..3cc05eb234 --- /dev/null +++ b/animations/step_05_a/macos/Runner/MainFlutterWindow.swift @@ -0,0 +1,15 @@ +import Cocoa +import FlutterMacOS + +class MainFlutterWindow: NSWindow { + override func awakeFromNib() { + let flutterViewController = FlutterViewController() + let windowFrame = self.frame + self.contentViewController = flutterViewController + self.setFrame(windowFrame, display: true) + + RegisterGeneratedPlugins(registry: flutterViewController) + + super.awakeFromNib() + } +} diff --git a/animations/step_05_a/macos/Runner/Release.entitlements b/animations/step_05_a/macos/Runner/Release.entitlements new file mode 100644 index 0000000000..852fa1a472 --- /dev/null +++ b/animations/step_05_a/macos/Runner/Release.entitlements @@ -0,0 +1,8 @@ + + + + + com.apple.security.app-sandbox + + + diff --git a/animations/step_05_a/macos/RunnerTests/RunnerTests.swift b/animations/step_05_a/macos/RunnerTests/RunnerTests.swift new file mode 100644 index 0000000000..61f3bd1fc5 --- /dev/null +++ b/animations/step_05_a/macos/RunnerTests/RunnerTests.swift @@ -0,0 +1,12 @@ +import Cocoa +import FlutterMacOS +import XCTest + +class RunnerTests: XCTestCase { + + func testExample() { + // If you add code to the Runner application, consider adding tests here. + // See https://developer.apple.com/documentation/xctest for more information about using XCTest. + } + +} diff --git a/animations/step_05_a/pubspec.yaml b/animations/step_05_a/pubspec.yaml new file mode 100644 index 0000000000..52735dfa55 --- /dev/null +++ b/animations/step_05_a/pubspec.yaml @@ -0,0 +1,21 @@ +name: quiz +description: A quiz app for demonstrating animation effects in Flutter +publish_to: "none" +version: 1.0.0 + +environment: + sdk: ^3.5.1 + +dependencies: + animations: ^2.0.0 + flutter: + sdk: flutter + +dev_dependencies: + flutter_test: + sdk: flutter + flutter_lints: ^4.0.0 + + +flutter: + uses-material-design: true diff --git a/animations/step_05_a/web/favicon.png b/animations/step_05_a/web/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..8aaa46ac1ae21512746f852a42ba87e4165dfdd1 GIT binary patch literal 917 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|I14-?iy0X7 zltGxWVyS%@P(fs7NJL45ua8x7ey(0(N`6wRUPW#JP&EUCO@$SZnVVXYs8ErclUHn2 zVXFjIVFhG^g!Ppaz)DK8ZIvQ?0~DO|i&7O#^-S~(l1AfjnEK zjFOT9D}DX)@^Za$W4-*MbbUihOG|wNBYh(yU7!lx;>x^|#0uTKVr7USFmqf|i<65o z3raHc^AtelCMM;Vme?vOfh>Xph&xL%(-1c06+^uR^q@XSM&D4+Kp$>4P^%3{)XKjo zGZknv$b36P8?Z_gF{nK@`XI}Z90TzwSQO}0J1!f2c(B=V`5aP@1P1a|PZ!4!3&Gl8 zTYqUsf!gYFyJnXpu0!n&N*SYAX-%d(5gVjrHJWqXQshj@!Zm{!01WsQrH~9=kTxW#6SvuapgMqt>$=j#%eyGrQzr zP{L-3gsMA^$I1&gsBAEL+vxi1*Igl=8#8`5?A-T5=z-sk46WA1IUT)AIZHx1rdUrf zVJrJn<74DDw`j)Ki#gt}mIT-Q`XRa2-jQXQoI%w`nb|XblvzK${ZzlV)m-XcwC(od z71_OEC5Bt9GEXosOXaPTYOia#R4ID2TiU~`zVMl08TV_C%DnU4^+HE>9(CE4D6?Fz oujB08i7adh9xk7*FX66dWH6F5TM;?E2b5PlUHx3vIVCg!0Dx9vYXATM literal 0 HcmV?d00001 diff --git a/animations/step_05_a/web/icons/Icon-192.png b/animations/step_05_a/web/icons/Icon-192.png new file mode 100644 index 0000000000000000000000000000000000000000..b749bfef07473333cf1dd31e9eed89862a5d52aa GIT binary patch literal 5292 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 literal 0 HcmV?d00001 diff --git a/animations/step_05_a/web/icons/Icon-512.png b/animations/step_05_a/web/icons/Icon-512.png new file mode 100644 index 0000000000000000000000000000000000000000..88cfd48dff1169879ba46840804b412fe02fefd6 GIT binary patch literal 8252 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 literal 0 HcmV?d00001 diff --git a/animations/step_05_a/web/icons/Icon-maskable-192.png b/animations/step_05_a/web/icons/Icon-maskable-192.png new file mode 100644 index 0000000000000000000000000000000000000000..eb9b4d76e525556d5d89141648c724331630325d GIT binary patch literal 5594 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 X>c!)3PgKfL&lX^$Z>Cpu&6)6jvi^Z! literal 0 HcmV?d00001 diff --git a/animations/step_05_a/web/icons/Icon-maskable-512.png b/animations/step_05_a/web/icons/Icon-maskable-512.png new file mode 100644 index 0000000000000000000000000000000000000000..d69c56691fbdb0b7efa65097c7cc1edac12a6d3e GIT binary patch literal 20998 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 MPgg&ebxsLQ025IeI{*Lx literal 0 HcmV?d00001 diff --git a/animations/step_05_a/web/index.html b/animations/step_05_a/web/index.html new file mode 100644 index 0000000000..89656d9a06 --- /dev/null +++ b/animations/step_05_a/web/index.html @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + quiz + + + + + + diff --git a/animations/step_05_a/web/manifest.json b/animations/step_05_a/web/manifest.json new file mode 100644 index 0000000000..467748be48 --- /dev/null +++ b/animations/step_05_a/web/manifest.json @@ -0,0 +1,35 @@ +{ + "name": "quiz", + "short_name": "quiz", + "start_url": ".", + "display": "standalone", + "background_color": "#0175C2", + "theme_color": "#0175C2", + "description": "A new Flutter project.", + "orientation": "portrait-primary", + "prefer_related_applications": false, + "icons": [ + { + "src": "icons/Icon-192.png", + "sizes": "192x192", + "type": "image/png" + }, + { + "src": "icons/Icon-512.png", + "sizes": "512x512", + "type": "image/png" + }, + { + "src": "icons/Icon-maskable-192.png", + "sizes": "192x192", + "type": "image/png", + "purpose": "maskable" + }, + { + "src": "icons/Icon-maskable-512.png", + "sizes": "512x512", + "type": "image/png", + "purpose": "maskable" + } + ] +} diff --git a/animations/step_05_a/windows/.gitignore b/animations/step_05_a/windows/.gitignore new file mode 100644 index 0000000000..d492d0d98c --- /dev/null +++ b/animations/step_05_a/windows/.gitignore @@ -0,0 +1,17 @@ +flutter/ephemeral/ + +# Visual Studio user-specific files. +*.suo +*.user +*.userosscache +*.sln.docstates + +# Visual Studio build-related files. +x64/ +x86/ + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!*.[Cc]ache/ diff --git a/animations/step_05_a/windows/CMakeLists.txt b/animations/step_05_a/windows/CMakeLists.txt new file mode 100644 index 0000000000..e65947e844 --- /dev/null +++ b/animations/step_05_a/windows/CMakeLists.txt @@ -0,0 +1,108 @@ +# Project-level configuration. +cmake_minimum_required(VERSION 3.14) +project(quiz LANGUAGES CXX) + +# The name of the executable created for the application. Change this to change +# the on-disk name of your application. +set(BINARY_NAME "quiz") + +# Explicitly opt in to modern CMake behaviors to avoid warnings with recent +# versions of CMake. +cmake_policy(VERSION 3.14...3.25) + +# Define build configuration option. +get_property(IS_MULTICONFIG GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG) +if(IS_MULTICONFIG) + set(CMAKE_CONFIGURATION_TYPES "Debug;Profile;Release" + CACHE STRING "" FORCE) +else() + if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) + set(CMAKE_BUILD_TYPE "Debug" CACHE + STRING "Flutter build mode" FORCE) + set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS + "Debug" "Profile" "Release") + endif() +endif() +# Define settings for the Profile build mode. +set(CMAKE_EXE_LINKER_FLAGS_PROFILE "${CMAKE_EXE_LINKER_FLAGS_RELEASE}") +set(CMAKE_SHARED_LINKER_FLAGS_PROFILE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE}") +set(CMAKE_C_FLAGS_PROFILE "${CMAKE_C_FLAGS_RELEASE}") +set(CMAKE_CXX_FLAGS_PROFILE "${CMAKE_CXX_FLAGS_RELEASE}") + +# Use Unicode for all projects. +add_definitions(-DUNICODE -D_UNICODE) + +# Compilation settings that should be applied to most targets. +# +# Be cautious about adding new options here, as plugins use this function by +# default. In most cases, you should add new options to specific targets instead +# of modifying this function. +function(APPLY_STANDARD_SETTINGS TARGET) + target_compile_features(${TARGET} PUBLIC cxx_std_17) + target_compile_options(${TARGET} PRIVATE /W4 /WX /wd"4100") + target_compile_options(${TARGET} PRIVATE /EHsc) + target_compile_definitions(${TARGET} PRIVATE "_HAS_EXCEPTIONS=0") + target_compile_definitions(${TARGET} PRIVATE "$<$:_DEBUG>") +endfunction() + +# Flutter library and tool build rules. +set(FLUTTER_MANAGED_DIR "${CMAKE_CURRENT_SOURCE_DIR}/flutter") +add_subdirectory(${FLUTTER_MANAGED_DIR}) + +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") + + +# Generated plugin build rules, which manage building the plugins and adding +# them to the application. +include(flutter/generated_plugins.cmake) + + +# === Installation === +# Support files are copied into place next to the executable, so that it can +# run in place. This is done instead of making a separate bundle (as on Linux) +# so that building and running from within Visual Studio will work. +set(BUILD_BUNDLE_DIR "$") +# Make the "install" step default, as it's required to run. +set(CMAKE_VS_INCLUDE_INSTALL_TO_DEFAULT_BUILD 1) +if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) + set(CMAKE_INSTALL_PREFIX "${BUILD_BUNDLE_DIR}" CACHE PATH "..." FORCE) +endif() + +set(INSTALL_BUNDLE_DATA_DIR "${CMAKE_INSTALL_PREFIX}/data") +set(INSTALL_BUNDLE_LIB_DIR "${CMAKE_INSTALL_PREFIX}") + +install(TARGETS ${BINARY_NAME} RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_ICU_DATA_FILE}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) + +if(PLUGIN_BUNDLED_LIBRARIES) + install(FILES "${PLUGIN_BUNDLED_LIBRARIES}" + DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) +endif() + +# Copy the native assets provided by the build.dart from all packages. +set(NATIVE_ASSETS_DIR "${PROJECT_BUILD_DIR}native_assets/windows/") +install(DIRECTORY "${NATIVE_ASSETS_DIR}" + DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) + +# Fully re-copy the assets directory on each build to avoid having stale files +# from a previous install. +set(FLUTTER_ASSET_DIR_NAME "flutter_assets") +install(CODE " + file(REMOVE_RECURSE \"${INSTALL_BUNDLE_DATA_DIR}/${FLUTTER_ASSET_DIR_NAME}\") + " COMPONENT Runtime) +install(DIRECTORY "${PROJECT_BUILD_DIR}/${FLUTTER_ASSET_DIR_NAME}" + DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" COMPONENT Runtime) + +# Install the AOT library on non-Debug builds only. +install(FILES "${AOT_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" + CONFIGURATIONS Profile;Release + COMPONENT Runtime) diff --git a/animations/step_05_a/windows/flutter/CMakeLists.txt b/animations/step_05_a/windows/flutter/CMakeLists.txt new file mode 100644 index 0000000000..903f4899d6 --- /dev/null +++ b/animations/step_05_a/windows/flutter/CMakeLists.txt @@ -0,0 +1,109 @@ +# This file controls Flutter-level build steps. It should not be edited. +cmake_minimum_required(VERSION 3.14) + +set(EPHEMERAL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/ephemeral") + +# Configuration provided via flutter tool. +include(${EPHEMERAL_DIR}/generated_config.cmake) + +# TODO: Move the rest of this into files in ephemeral. See +# https://github.com/flutter/flutter/issues/57146. +set(WRAPPER_ROOT "${EPHEMERAL_DIR}/cpp_client_wrapper") + +# Set fallback configurations for older versions of the flutter tool. +if (NOT DEFINED FLUTTER_TARGET_PLATFORM) + set(FLUTTER_TARGET_PLATFORM "windows-x64") +endif() + +# === Flutter Library === +set(FLUTTER_LIBRARY "${EPHEMERAL_DIR}/flutter_windows.dll") + +# Published to parent scope for install step. +set(FLUTTER_LIBRARY ${FLUTTER_LIBRARY} PARENT_SCOPE) +set(FLUTTER_ICU_DATA_FILE "${EPHEMERAL_DIR}/icudtl.dat" PARENT_SCOPE) +set(PROJECT_BUILD_DIR "${PROJECT_DIR}/build/" PARENT_SCOPE) +set(AOT_LIBRARY "${PROJECT_DIR}/build/windows/app.so" PARENT_SCOPE) + +list(APPEND FLUTTER_LIBRARY_HEADERS + "flutter_export.h" + "flutter_windows.h" + "flutter_messenger.h" + "flutter_plugin_registrar.h" + "flutter_texture_registrar.h" +) +list(TRANSFORM FLUTTER_LIBRARY_HEADERS PREPEND "${EPHEMERAL_DIR}/") +add_library(flutter INTERFACE) +target_include_directories(flutter INTERFACE + "${EPHEMERAL_DIR}" +) +target_link_libraries(flutter INTERFACE "${FLUTTER_LIBRARY}.lib") +add_dependencies(flutter flutter_assemble) + +# === Wrapper === +list(APPEND CPP_WRAPPER_SOURCES_CORE + "core_implementations.cc" + "standard_codec.cc" +) +list(TRANSFORM CPP_WRAPPER_SOURCES_CORE PREPEND "${WRAPPER_ROOT}/") +list(APPEND CPP_WRAPPER_SOURCES_PLUGIN + "plugin_registrar.cc" +) +list(TRANSFORM CPP_WRAPPER_SOURCES_PLUGIN PREPEND "${WRAPPER_ROOT}/") +list(APPEND CPP_WRAPPER_SOURCES_APP + "flutter_engine.cc" + "flutter_view_controller.cc" +) +list(TRANSFORM CPP_WRAPPER_SOURCES_APP PREPEND "${WRAPPER_ROOT}/") + +# Wrapper sources needed for a plugin. +add_library(flutter_wrapper_plugin STATIC + ${CPP_WRAPPER_SOURCES_CORE} + ${CPP_WRAPPER_SOURCES_PLUGIN} +) +apply_standard_settings(flutter_wrapper_plugin) +set_target_properties(flutter_wrapper_plugin PROPERTIES + POSITION_INDEPENDENT_CODE ON) +set_target_properties(flutter_wrapper_plugin PROPERTIES + CXX_VISIBILITY_PRESET hidden) +target_link_libraries(flutter_wrapper_plugin PUBLIC flutter) +target_include_directories(flutter_wrapper_plugin PUBLIC + "${WRAPPER_ROOT}/include" +) +add_dependencies(flutter_wrapper_plugin flutter_assemble) + +# Wrapper sources needed for the runner. +add_library(flutter_wrapper_app STATIC + ${CPP_WRAPPER_SOURCES_CORE} + ${CPP_WRAPPER_SOURCES_APP} +) +apply_standard_settings(flutter_wrapper_app) +target_link_libraries(flutter_wrapper_app PUBLIC flutter) +target_include_directories(flutter_wrapper_app PUBLIC + "${WRAPPER_ROOT}/include" +) +add_dependencies(flutter_wrapper_app flutter_assemble) + +# === Flutter tool backend === +# _phony_ is a non-existent file to force this command to run every time, +# since currently there's no way to get a full input/output list from the +# flutter tool. +set(PHONY_OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/_phony_") +set_source_files_properties("${PHONY_OUTPUT}" PROPERTIES SYMBOLIC TRUE) +add_custom_command( + OUTPUT ${FLUTTER_LIBRARY} ${FLUTTER_LIBRARY_HEADERS} + ${CPP_WRAPPER_SOURCES_CORE} ${CPP_WRAPPER_SOURCES_PLUGIN} + ${CPP_WRAPPER_SOURCES_APP} + ${PHONY_OUTPUT} + COMMAND ${CMAKE_COMMAND} -E env + ${FLUTTER_TOOL_ENVIRONMENT} + "${FLUTTER_ROOT}/packages/flutter_tools/bin/tool_backend.bat" + ${FLUTTER_TARGET_PLATFORM} $ + VERBATIM +) +add_custom_target(flutter_assemble DEPENDS + "${FLUTTER_LIBRARY}" + ${FLUTTER_LIBRARY_HEADERS} + ${CPP_WRAPPER_SOURCES_CORE} + ${CPP_WRAPPER_SOURCES_PLUGIN} + ${CPP_WRAPPER_SOURCES_APP} +) diff --git a/animations/step_05_a/windows/flutter/generated_plugin_registrant.cc b/animations/step_05_a/windows/flutter/generated_plugin_registrant.cc new file mode 100644 index 0000000000..8b6d4680af --- /dev/null +++ b/animations/step_05_a/windows/flutter/generated_plugin_registrant.cc @@ -0,0 +1,11 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#include "generated_plugin_registrant.h" + + +void RegisterPlugins(flutter::PluginRegistry* registry) { +} diff --git a/animations/step_05_a/windows/flutter/generated_plugin_registrant.h b/animations/step_05_a/windows/flutter/generated_plugin_registrant.h new file mode 100644 index 0000000000..dc139d85a9 --- /dev/null +++ b/animations/step_05_a/windows/flutter/generated_plugin_registrant.h @@ -0,0 +1,15 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#ifndef GENERATED_PLUGIN_REGISTRANT_ +#define GENERATED_PLUGIN_REGISTRANT_ + +#include + +// Registers Flutter plugins. +void RegisterPlugins(flutter::PluginRegistry* registry); + +#endif // GENERATED_PLUGIN_REGISTRANT_ diff --git a/animations/step_05_a/windows/flutter/generated_plugins.cmake b/animations/step_05_a/windows/flutter/generated_plugins.cmake new file mode 100644 index 0000000000..b93c4c30c1 --- /dev/null +++ b/animations/step_05_a/windows/flutter/generated_plugins.cmake @@ -0,0 +1,23 @@ +# +# Generated file, do not edit. +# + +list(APPEND FLUTTER_PLUGIN_LIST +) + +list(APPEND FLUTTER_FFI_PLUGIN_LIST +) + +set(PLUGIN_BUNDLED_LIBRARIES) + +foreach(plugin ${FLUTTER_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${plugin}/windows plugins/${plugin}) + target_link_libraries(${BINARY_NAME} PRIVATE ${plugin}_plugin) + list(APPEND PLUGIN_BUNDLED_LIBRARIES $) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${plugin}_bundled_libraries}) +endforeach(plugin) + +foreach(ffi_plugin ${FLUTTER_FFI_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${ffi_plugin}/windows plugins/${ffi_plugin}) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${ffi_plugin}_bundled_libraries}) +endforeach(ffi_plugin) diff --git a/animations/step_05_a/windows/runner/CMakeLists.txt b/animations/step_05_a/windows/runner/CMakeLists.txt new file mode 100644 index 0000000000..394917c053 --- /dev/null +++ b/animations/step_05_a/windows/runner/CMakeLists.txt @@ -0,0 +1,40 @@ +cmake_minimum_required(VERSION 3.14) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} WIN32 + "flutter_window.cpp" + "main.cpp" + "utils.cpp" + "win32_window.cpp" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" + "Runner.rc" + "runner.exe.manifest" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the build version. +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION=\"${FLUTTER_VERSION}\"") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_MAJOR=${FLUTTER_VERSION_MAJOR}") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_MINOR=${FLUTTER_VERSION_MINOR}") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_PATCH=${FLUTTER_VERSION_PATCH}") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_BUILD=${FLUTTER_VERSION_BUILD}") + +# Disable Windows macros that collide with C++ standard library functions. +target_compile_definitions(${BINARY_NAME} PRIVATE "NOMINMAX") + +# Add dependency libraries and include directories. Add any application-specific +# dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter flutter_wrapper_app) +target_link_libraries(${BINARY_NAME} PRIVATE "dwmapi.lib") +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") + +# Run the Flutter tool portions of the build. This must not be removed. +add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/animations/step_05_a/windows/runner/Runner.rc b/animations/step_05_a/windows/runner/Runner.rc new file mode 100644 index 0000000000..f0d8342b40 --- /dev/null +++ b/animations/step_05_a/windows/runner/Runner.rc @@ -0,0 +1,121 @@ +// Microsoft Visual C++ generated resource script. +// +#pragma code_page(65001) +#include "resource.h" + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#include "winres.h" + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// English (United States) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE +BEGIN + "resource.h\0" +END + +2 TEXTINCLUDE +BEGIN + "#include ""winres.h""\r\n" + "\0" +END + +3 TEXTINCLUDE +BEGIN + "\r\n" + "\0" +END + +#endif // APSTUDIO_INVOKED + + +///////////////////////////////////////////////////////////////////////////// +// +// Icon +// + +// Icon with lowest ID value placed first to ensure application icon +// remains consistent on all systems. +IDI_APP_ICON ICON "resources\\app_icon.ico" + + +///////////////////////////////////////////////////////////////////////////// +// +// Version +// + +#if defined(FLUTTER_VERSION_MAJOR) && defined(FLUTTER_VERSION_MINOR) && defined(FLUTTER_VERSION_PATCH) && defined(FLUTTER_VERSION_BUILD) +#define VERSION_AS_NUMBER FLUTTER_VERSION_MAJOR,FLUTTER_VERSION_MINOR,FLUTTER_VERSION_PATCH,FLUTTER_VERSION_BUILD +#else +#define VERSION_AS_NUMBER 1,0,0,0 +#endif + +#if defined(FLUTTER_VERSION) +#define VERSION_AS_STRING FLUTTER_VERSION +#else +#define VERSION_AS_STRING "1.0.0" +#endif + +VS_VERSION_INFO VERSIONINFO + FILEVERSION VERSION_AS_NUMBER + PRODUCTVERSION VERSION_AS_NUMBER + FILEFLAGSMASK VS_FFI_FILEFLAGSMASK +#ifdef _DEBUG + FILEFLAGS VS_FF_DEBUG +#else + FILEFLAGS 0x0L +#endif + FILEOS VOS__WINDOWS32 + FILETYPE VFT_APP + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904e4" + BEGIN + VALUE "CompanyName", "com.example" "\0" + VALUE "FileDescription", "quiz" "\0" + VALUE "FileVersion", VERSION_AS_STRING "\0" + VALUE "InternalName", "quiz" "\0" + VALUE "LegalCopyright", "Copyright (C) 2024 com.example. All rights reserved." "\0" + VALUE "OriginalFilename", "quiz.exe" "\0" + VALUE "ProductName", "quiz" "\0" + VALUE "ProductVersion", VERSION_AS_STRING "\0" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x409, 1252 + END +END + +#endif // English (United States) resources +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// + + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED diff --git a/animations/step_05_a/windows/runner/flutter_window.cpp b/animations/step_05_a/windows/runner/flutter_window.cpp new file mode 100644 index 0000000000..955ee3038f --- /dev/null +++ b/animations/step_05_a/windows/runner/flutter_window.cpp @@ -0,0 +1,71 @@ +#include "flutter_window.h" + +#include + +#include "flutter/generated_plugin_registrant.h" + +FlutterWindow::FlutterWindow(const flutter::DartProject& project) + : project_(project) {} + +FlutterWindow::~FlutterWindow() {} + +bool FlutterWindow::OnCreate() { + if (!Win32Window::OnCreate()) { + return false; + } + + RECT frame = GetClientArea(); + + // The size here must match the window dimensions to avoid unnecessary surface + // creation / destruction in the startup path. + flutter_controller_ = std::make_unique( + frame.right - frame.left, frame.bottom - frame.top, project_); + // Ensure that basic setup of the controller was successful. + if (!flutter_controller_->engine() || !flutter_controller_->view()) { + return false; + } + RegisterPlugins(flutter_controller_->engine()); + SetChildContent(flutter_controller_->view()->GetNativeWindow()); + + flutter_controller_->engine()->SetNextFrameCallback([&]() { + this->Show(); + }); + + // Flutter can complete the first frame before the "show window" callback is + // registered. The following call ensures a frame is pending to ensure the + // window is shown. It is a no-op if the first frame hasn't completed yet. + flutter_controller_->ForceRedraw(); + + return true; +} + +void FlutterWindow::OnDestroy() { + if (flutter_controller_) { + flutter_controller_ = nullptr; + } + + Win32Window::OnDestroy(); +} + +LRESULT +FlutterWindow::MessageHandler(HWND hwnd, UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept { + // Give Flutter, including plugins, an opportunity to handle window messages. + if (flutter_controller_) { + std::optional result = + flutter_controller_->HandleTopLevelWindowProc(hwnd, message, wparam, + lparam); + if (result) { + return *result; + } + } + + switch (message) { + case WM_FONTCHANGE: + flutter_controller_->engine()->ReloadSystemFonts(); + break; + } + + return Win32Window::MessageHandler(hwnd, message, wparam, lparam); +} diff --git a/animations/step_05_a/windows/runner/flutter_window.h b/animations/step_05_a/windows/runner/flutter_window.h new file mode 100644 index 0000000000..6da0652f05 --- /dev/null +++ b/animations/step_05_a/windows/runner/flutter_window.h @@ -0,0 +1,33 @@ +#ifndef RUNNER_FLUTTER_WINDOW_H_ +#define RUNNER_FLUTTER_WINDOW_H_ + +#include +#include + +#include + +#include "win32_window.h" + +// A window that does nothing but host a Flutter view. +class FlutterWindow : public Win32Window { + public: + // Creates a new FlutterWindow hosting a Flutter view running |project|. + explicit FlutterWindow(const flutter::DartProject& project); + virtual ~FlutterWindow(); + + protected: + // Win32Window: + bool OnCreate() override; + void OnDestroy() override; + LRESULT MessageHandler(HWND window, UINT const message, WPARAM const wparam, + LPARAM const lparam) noexcept override; + + private: + // The project to run. + flutter::DartProject project_; + + // The Flutter instance hosted by this window. + std::unique_ptr flutter_controller_; +}; + +#endif // RUNNER_FLUTTER_WINDOW_H_ diff --git a/animations/step_05_a/windows/runner/main.cpp b/animations/step_05_a/windows/runner/main.cpp new file mode 100644 index 0000000000..cc4e09820c --- /dev/null +++ b/animations/step_05_a/windows/runner/main.cpp @@ -0,0 +1,43 @@ +#include +#include +#include + +#include "flutter_window.h" +#include "utils.h" + +int APIENTRY wWinMain(_In_ HINSTANCE instance, _In_opt_ HINSTANCE prev, + _In_ wchar_t *command_line, _In_ int show_command) { + // Attach to console when present (e.g., 'flutter run') or create a + // new console when running with a debugger. + if (!::AttachConsole(ATTACH_PARENT_PROCESS) && ::IsDebuggerPresent()) { + CreateAndAttachConsole(); + } + + // Initialize COM, so that it is available for use in the library and/or + // plugins. + ::CoInitializeEx(nullptr, COINIT_APARTMENTTHREADED); + + flutter::DartProject project(L"data"); + + std::vector command_line_arguments = + GetCommandLineArguments(); + + project.set_dart_entrypoint_arguments(std::move(command_line_arguments)); + + FlutterWindow window(project); + Win32Window::Point origin(10, 10); + Win32Window::Size size(1280, 720); + if (!window.Create(L"quiz", origin, size)) { + return EXIT_FAILURE; + } + window.SetQuitOnClose(true); + + ::MSG msg; + while (::GetMessage(&msg, nullptr, 0, 0)) { + ::TranslateMessage(&msg); + ::DispatchMessage(&msg); + } + + ::CoUninitialize(); + return EXIT_SUCCESS; +} diff --git a/animations/step_05_a/windows/runner/resource.h b/animations/step_05_a/windows/runner/resource.h new file mode 100644 index 0000000000..66a65d1e4a --- /dev/null +++ b/animations/step_05_a/windows/runner/resource.h @@ -0,0 +1,16 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Visual C++ generated include file. +// Used by Runner.rc +// +#define IDI_APP_ICON 101 + +// Next default values for new objects +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS +#define _APS_NEXT_RESOURCE_VALUE 102 +#define _APS_NEXT_COMMAND_VALUE 40001 +#define _APS_NEXT_CONTROL_VALUE 1001 +#define _APS_NEXT_SYMED_VALUE 101 +#endif +#endif diff --git a/animations/step_05_a/windows/runner/resources/app_icon.ico b/animations/step_05_a/windows/runner/resources/app_icon.ico new file mode 100644 index 0000000000000000000000000000000000000000..c04e20caf6370ebb9253ad831cc31de4a9c965f6 GIT binary patch literal 33772 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 literal 0 HcmV?d00001 diff --git a/animations/step_05_a/windows/runner/runner.exe.manifest b/animations/step_05_a/windows/runner/runner.exe.manifest new file mode 100644 index 0000000000..153653e8d6 --- /dev/null +++ b/animations/step_05_a/windows/runner/runner.exe.manifest @@ -0,0 +1,14 @@ + + + + + PerMonitorV2 + + + + + + + + + diff --git a/animations/step_05_a/windows/runner/utils.cpp b/animations/step_05_a/windows/runner/utils.cpp new file mode 100644 index 0000000000..3a0b46511a --- /dev/null +++ b/animations/step_05_a/windows/runner/utils.cpp @@ -0,0 +1,65 @@ +#include "utils.h" + +#include +#include +#include +#include + +#include + +void CreateAndAttachConsole() { + if (::AllocConsole()) { + FILE *unused; + if (freopen_s(&unused, "CONOUT$", "w", stdout)) { + _dup2(_fileno(stdout), 1); + } + if (freopen_s(&unused, "CONOUT$", "w", stderr)) { + _dup2(_fileno(stdout), 2); + } + std::ios::sync_with_stdio(); + FlutterDesktopResyncOutputStreams(); + } +} + +std::vector GetCommandLineArguments() { + // Convert the UTF-16 command line arguments to UTF-8 for the Engine to use. + int argc; + wchar_t** argv = ::CommandLineToArgvW(::GetCommandLineW(), &argc); + if (argv == nullptr) { + return std::vector(); + } + + std::vector command_line_arguments; + + // Skip the first argument as it's the binary name. + for (int i = 1; i < argc; i++) { + command_line_arguments.push_back(Utf8FromUtf16(argv[i])); + } + + ::LocalFree(argv); + + return command_line_arguments; +} + +std::string Utf8FromUtf16(const wchar_t* utf16_string) { + if (utf16_string == nullptr) { + return std::string(); + } + unsigned int target_length = ::WideCharToMultiByte( + CP_UTF8, WC_ERR_INVALID_CHARS, utf16_string, + -1, nullptr, 0, nullptr, nullptr) + -1; // remove the trailing null character + int input_length = (int)wcslen(utf16_string); + std::string utf8_string; + if (target_length == 0 || target_length > utf8_string.max_size()) { + return utf8_string; + } + utf8_string.resize(target_length); + int converted_length = ::WideCharToMultiByte( + CP_UTF8, WC_ERR_INVALID_CHARS, utf16_string, + input_length, utf8_string.data(), target_length, nullptr, nullptr); + if (converted_length == 0) { + return std::string(); + } + return utf8_string; +} diff --git a/animations/step_05_a/windows/runner/utils.h b/animations/step_05_a/windows/runner/utils.h new file mode 100644 index 0000000000..3879d54755 --- /dev/null +++ b/animations/step_05_a/windows/runner/utils.h @@ -0,0 +1,19 @@ +#ifndef RUNNER_UTILS_H_ +#define RUNNER_UTILS_H_ + +#include +#include + +// Creates a console for the process, and redirects stdout and stderr to +// it for both the runner and the Flutter library. +void CreateAndAttachConsole(); + +// Takes a null-terminated wchar_t* encoded in UTF-16 and returns a std::string +// encoded in UTF-8. Returns an empty std::string on failure. +std::string Utf8FromUtf16(const wchar_t* utf16_string); + +// Gets the command line arguments passed in as a std::vector, +// encoded in UTF-8. Returns an empty std::vector on failure. +std::vector GetCommandLineArguments(); + +#endif // RUNNER_UTILS_H_ diff --git a/animations/step_05_a/windows/runner/win32_window.cpp b/animations/step_05_a/windows/runner/win32_window.cpp new file mode 100644 index 0000000000..60608d0fe5 --- /dev/null +++ b/animations/step_05_a/windows/runner/win32_window.cpp @@ -0,0 +1,288 @@ +#include "win32_window.h" + +#include +#include + +#include "resource.h" + +namespace { + +/// Window attribute that enables dark mode window decorations. +/// +/// Redefined in case the developer's machine has a Windows SDK older than +/// version 10.0.22000.0. +/// See: https://docs.microsoft.com/windows/win32/api/dwmapi/ne-dwmapi-dwmwindowattribute +#ifndef DWMWA_USE_IMMERSIVE_DARK_MODE +#define DWMWA_USE_IMMERSIVE_DARK_MODE 20 +#endif + +constexpr const wchar_t kWindowClassName[] = L"FLUTTER_RUNNER_WIN32_WINDOW"; + +/// Registry key for app theme preference. +/// +/// A value of 0 indicates apps should use dark mode. A non-zero or missing +/// value indicates apps should use light mode. +constexpr const wchar_t kGetPreferredBrightnessRegKey[] = + L"Software\\Microsoft\\Windows\\CurrentVersion\\Themes\\Personalize"; +constexpr const wchar_t kGetPreferredBrightnessRegValue[] = L"AppsUseLightTheme"; + +// The number of Win32Window objects that currently exist. +static int g_active_window_count = 0; + +using EnableNonClientDpiScaling = BOOL __stdcall(HWND hwnd); + +// Scale helper to convert logical scaler values to physical using passed in +// scale factor +int Scale(int source, double scale_factor) { + return static_cast(source * scale_factor); +} + +// Dynamically loads the |EnableNonClientDpiScaling| from the User32 module. +// This API is only needed for PerMonitor V1 awareness mode. +void EnableFullDpiSupportIfAvailable(HWND hwnd) { + HMODULE user32_module = LoadLibraryA("User32.dll"); + if (!user32_module) { + return; + } + auto enable_non_client_dpi_scaling = + reinterpret_cast( + GetProcAddress(user32_module, "EnableNonClientDpiScaling")); + if (enable_non_client_dpi_scaling != nullptr) { + enable_non_client_dpi_scaling(hwnd); + } + FreeLibrary(user32_module); +} + +} // namespace + +// Manages the Win32Window's window class registration. +class WindowClassRegistrar { + public: + ~WindowClassRegistrar() = default; + + // Returns the singleton registrar instance. + static WindowClassRegistrar* GetInstance() { + if (!instance_) { + instance_ = new WindowClassRegistrar(); + } + return instance_; + } + + // Returns the name of the window class, registering the class if it hasn't + // previously been registered. + const wchar_t* GetWindowClass(); + + // Unregisters the window class. Should only be called if there are no + // instances of the window. + void UnregisterWindowClass(); + + private: + WindowClassRegistrar() = default; + + static WindowClassRegistrar* instance_; + + bool class_registered_ = false; +}; + +WindowClassRegistrar* WindowClassRegistrar::instance_ = nullptr; + +const wchar_t* WindowClassRegistrar::GetWindowClass() { + if (!class_registered_) { + WNDCLASS window_class{}; + window_class.hCursor = LoadCursor(nullptr, IDC_ARROW); + window_class.lpszClassName = kWindowClassName; + window_class.style = CS_HREDRAW | CS_VREDRAW; + window_class.cbClsExtra = 0; + window_class.cbWndExtra = 0; + window_class.hInstance = GetModuleHandle(nullptr); + window_class.hIcon = + LoadIcon(window_class.hInstance, MAKEINTRESOURCE(IDI_APP_ICON)); + window_class.hbrBackground = 0; + window_class.lpszMenuName = nullptr; + window_class.lpfnWndProc = Win32Window::WndProc; + RegisterClass(&window_class); + class_registered_ = true; + } + return kWindowClassName; +} + +void WindowClassRegistrar::UnregisterWindowClass() { + UnregisterClass(kWindowClassName, nullptr); + class_registered_ = false; +} + +Win32Window::Win32Window() { + ++g_active_window_count; +} + +Win32Window::~Win32Window() { + --g_active_window_count; + Destroy(); +} + +bool Win32Window::Create(const std::wstring& title, + const Point& origin, + const Size& size) { + Destroy(); + + const wchar_t* window_class = + WindowClassRegistrar::GetInstance()->GetWindowClass(); + + const POINT target_point = {static_cast(origin.x), + static_cast(origin.y)}; + HMONITOR monitor = MonitorFromPoint(target_point, MONITOR_DEFAULTTONEAREST); + UINT dpi = FlutterDesktopGetDpiForMonitor(monitor); + double scale_factor = dpi / 96.0; + + HWND window = CreateWindow( + window_class, title.c_str(), WS_OVERLAPPEDWINDOW, + Scale(origin.x, scale_factor), Scale(origin.y, scale_factor), + Scale(size.width, scale_factor), Scale(size.height, scale_factor), + nullptr, nullptr, GetModuleHandle(nullptr), this); + + if (!window) { + return false; + } + + UpdateTheme(window); + + return OnCreate(); +} + +bool Win32Window::Show() { + return ShowWindow(window_handle_, SW_SHOWNORMAL); +} + +// static +LRESULT CALLBACK Win32Window::WndProc(HWND const window, + UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept { + if (message == WM_NCCREATE) { + auto window_struct = reinterpret_cast(lparam); + SetWindowLongPtr(window, GWLP_USERDATA, + reinterpret_cast(window_struct->lpCreateParams)); + + auto that = static_cast(window_struct->lpCreateParams); + EnableFullDpiSupportIfAvailable(window); + that->window_handle_ = window; + } else if (Win32Window* that = GetThisFromHandle(window)) { + return that->MessageHandler(window, message, wparam, lparam); + } + + return DefWindowProc(window, message, wparam, lparam); +} + +LRESULT +Win32Window::MessageHandler(HWND hwnd, + UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept { + switch (message) { + case WM_DESTROY: + window_handle_ = nullptr; + Destroy(); + if (quit_on_close_) { + PostQuitMessage(0); + } + return 0; + + case WM_DPICHANGED: { + auto newRectSize = reinterpret_cast(lparam); + LONG newWidth = newRectSize->right - newRectSize->left; + LONG newHeight = newRectSize->bottom - newRectSize->top; + + SetWindowPos(hwnd, nullptr, newRectSize->left, newRectSize->top, newWidth, + newHeight, SWP_NOZORDER | SWP_NOACTIVATE); + + return 0; + } + case WM_SIZE: { + RECT rect = GetClientArea(); + if (child_content_ != nullptr) { + // Size and position the child window. + MoveWindow(child_content_, rect.left, rect.top, rect.right - rect.left, + rect.bottom - rect.top, TRUE); + } + return 0; + } + + case WM_ACTIVATE: + if (child_content_ != nullptr) { + SetFocus(child_content_); + } + return 0; + + case WM_DWMCOLORIZATIONCOLORCHANGED: + UpdateTheme(hwnd); + return 0; + } + + return DefWindowProc(window_handle_, message, wparam, lparam); +} + +void Win32Window::Destroy() { + OnDestroy(); + + if (window_handle_) { + DestroyWindow(window_handle_); + window_handle_ = nullptr; + } + if (g_active_window_count == 0) { + WindowClassRegistrar::GetInstance()->UnregisterWindowClass(); + } +} + +Win32Window* Win32Window::GetThisFromHandle(HWND const window) noexcept { + return reinterpret_cast( + GetWindowLongPtr(window, GWLP_USERDATA)); +} + +void Win32Window::SetChildContent(HWND content) { + child_content_ = content; + SetParent(content, window_handle_); + RECT frame = GetClientArea(); + + MoveWindow(content, frame.left, frame.top, frame.right - frame.left, + frame.bottom - frame.top, true); + + SetFocus(child_content_); +} + +RECT Win32Window::GetClientArea() { + RECT frame; + GetClientRect(window_handle_, &frame); + return frame; +} + +HWND Win32Window::GetHandle() { + return window_handle_; +} + +void Win32Window::SetQuitOnClose(bool quit_on_close) { + quit_on_close_ = quit_on_close; +} + +bool Win32Window::OnCreate() { + // No-op; provided for subclasses. + return true; +} + +void Win32Window::OnDestroy() { + // No-op; provided for subclasses. +} + +void Win32Window::UpdateTheme(HWND const window) { + DWORD light_mode; + DWORD light_mode_size = sizeof(light_mode); + LSTATUS result = RegGetValue(HKEY_CURRENT_USER, kGetPreferredBrightnessRegKey, + kGetPreferredBrightnessRegValue, + RRF_RT_REG_DWORD, nullptr, &light_mode, + &light_mode_size); + + if (result == ERROR_SUCCESS) { + BOOL enable_dark_mode = light_mode == 0; + DwmSetWindowAttribute(window, DWMWA_USE_IMMERSIVE_DARK_MODE, + &enable_dark_mode, sizeof(enable_dark_mode)); + } +} diff --git a/animations/step_05_a/windows/runner/win32_window.h b/animations/step_05_a/windows/runner/win32_window.h new file mode 100644 index 0000000000..e901dde684 --- /dev/null +++ b/animations/step_05_a/windows/runner/win32_window.h @@ -0,0 +1,102 @@ +#ifndef RUNNER_WIN32_WINDOW_H_ +#define RUNNER_WIN32_WINDOW_H_ + +#include + +#include +#include +#include + +// A class abstraction for a high DPI-aware Win32 Window. Intended to be +// inherited from by classes that wish to specialize with custom +// rendering and input handling +class Win32Window { + public: + struct Point { + unsigned int x; + unsigned int y; + Point(unsigned int x, unsigned int y) : x(x), y(y) {} + }; + + struct Size { + unsigned int width; + unsigned int height; + Size(unsigned int width, unsigned int height) + : width(width), height(height) {} + }; + + Win32Window(); + virtual ~Win32Window(); + + // Creates a win32 window with |title| that is positioned and sized using + // |origin| and |size|. New windows are created on the default monitor. Window + // sizes are specified to the OS in physical pixels, hence to ensure a + // consistent size this function will scale the inputted width and height as + // as appropriate for the default monitor. The window is invisible until + // |Show| is called. Returns true if the window was created successfully. + bool Create(const std::wstring& title, const Point& origin, const Size& size); + + // Show the current window. Returns true if the window was successfully shown. + bool Show(); + + // Release OS resources associated with window. + void Destroy(); + + // Inserts |content| into the window tree. + void SetChildContent(HWND content); + + // Returns the backing Window handle to enable clients to set icon and other + // window properties. Returns nullptr if the window has been destroyed. + HWND GetHandle(); + + // If true, closing this window will quit the application. + void SetQuitOnClose(bool quit_on_close); + + // Return a RECT representing the bounds of the current client area. + RECT GetClientArea(); + + protected: + // Processes and route salient window messages for mouse handling, + // size change and DPI. Delegates handling of these to member overloads that + // inheriting classes can handle. + virtual LRESULT MessageHandler(HWND window, + UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept; + + // Called when CreateAndShow is called, allowing subclass window-related + // setup. Subclasses should return false if setup fails. + virtual bool OnCreate(); + + // Called when Destroy is called. + virtual void OnDestroy(); + + private: + friend class WindowClassRegistrar; + + // OS callback called by message pump. Handles the WM_NCCREATE message which + // is passed when the non-client area is being created and enables automatic + // non-client DPI scaling so that the non-client area automatically + // responds to changes in DPI. All other messages are handled by + // MessageHandler. + static LRESULT CALLBACK WndProc(HWND const window, + UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept; + + // Retrieves a class instance pointer for |window| + static Win32Window* GetThisFromHandle(HWND const window) noexcept; + + // Update the window frame's theme to match the system theme. + static void UpdateTheme(HWND const window); + + bool quit_on_close_ = false; + + // window handle for top level window. + HWND window_handle_ = nullptr; + + // window handle for hosted content. + HWND child_content_ = nullptr; +}; + +#endif // RUNNER_WIN32_WINDOW_H_ diff --git a/animations/step_05_b/.gitignore b/animations/step_05_b/.gitignore new file mode 100644 index 0000000000..29a3a5017f --- /dev/null +++ b/animations/step_05_b/.gitignore @@ -0,0 +1,43 @@ +# Miscellaneous +*.class +*.log +*.pyc +*.swp +.DS_Store +.atom/ +.buildlog/ +.history +.svn/ +migrate_working_dir/ + +# IntelliJ related +*.iml +*.ipr +*.iws +.idea/ + +# The .vscode folder contains launch configuration and tasks you configure in +# VS Code which you may wish to be included in version control, so this line +# is commented out by default. +#.vscode/ + +# Flutter/Dart/Pub related +**/doc/api/ +**/ios/Flutter/.last_build_id +.dart_tool/ +.flutter-plugins +.flutter-plugins-dependencies +.pub-cache/ +.pub/ +/build/ + +# Symbolication related +app.*.symbols + +# Obfuscation related +app.*.map.json + +# Android Studio will place build artifacts here +/android/app/debug +/android/app/profile +/android/app/release diff --git a/animations/step_05_b/analysis_options.yaml b/animations/step_05_b/analysis_options.yaml new file mode 100644 index 0000000000..03de3bd700 --- /dev/null +++ b/animations/step_05_b/analysis_options.yaml @@ -0,0 +1,13 @@ +include: package:flutter_lints/flutter.yaml + +analyzer: + errors: + unused_field: ignore + +linter: + rules: + annotate_overrides: false + prefer_const_constructors: false + prefer_const_constructors_in_immutables: false + prefer_const_declarations: false + prefer_const_literals_to_create_immutables: false diff --git a/animations/step_05_b/android/.gitignore b/animations/step_05_b/android/.gitignore new file mode 100644 index 0000000000..55afd919c6 --- /dev/null +++ b/animations/step_05_b/android/.gitignore @@ -0,0 +1,13 @@ +gradle-wrapper.jar +/.gradle +/captures/ +/gradlew +/gradlew.bat +/local.properties +GeneratedPluginRegistrant.java + +# Remember to never publicly share your keystore. +# See https://flutter.dev/to/reference-keystore +key.properties +**/*.keystore +**/*.jks diff --git a/animations/step_05_b/android/app/build.gradle b/animations/step_05_b/android/app/build.gradle new file mode 100644 index 0000000000..7c3594ed33 --- /dev/null +++ b/animations/step_05_b/android/app/build.gradle @@ -0,0 +1,44 @@ +plugins { + id "com.android.application" + id "kotlin-android" + // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. + id "dev.flutter.flutter-gradle-plugin" +} + +android { + namespace = "com.example.quiz" + compileSdk = flutter.compileSdkVersion + ndkVersion = flutter.ndkVersion + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 + } + + kotlinOptions { + jvmTarget = JavaVersion.VERSION_1_8 + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId = "com.example.quiz" + // You can update the following values to match your application needs. + // For more information, see: https://flutter.dev/to/review-gradle-config. + minSdk = flutter.minSdkVersion + targetSdk = flutter.targetSdkVersion + versionCode = flutter.versionCode + versionName = flutter.versionName + } + + buildTypes { + release { + // TODO: Add your own signing config for the release build. + // Signing with the debug keys for now, so `flutter run --release` works. + signingConfig = signingConfigs.debug + } + } +} + +flutter { + source = "../.." +} diff --git a/animations/step_05_b/android/app/src/debug/AndroidManifest.xml b/animations/step_05_b/android/app/src/debug/AndroidManifest.xml new file mode 100644 index 0000000000..399f6981d5 --- /dev/null +++ b/animations/step_05_b/android/app/src/debug/AndroidManifest.xml @@ -0,0 +1,7 @@ + + + + diff --git a/animations/step_05_b/android/app/src/main/AndroidManifest.xml b/animations/step_05_b/android/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000000..34076b28b3 --- /dev/null +++ b/animations/step_05_b/android/app/src/main/AndroidManifest.xml @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/animations/step_05_b/android/app/src/main/kotlin/com/example/quiz/MainActivity.kt b/animations/step_05_b/android/app/src/main/kotlin/com/example/quiz/MainActivity.kt new file mode 100644 index 0000000000..87081bb97c --- /dev/null +++ b/animations/step_05_b/android/app/src/main/kotlin/com/example/quiz/MainActivity.kt @@ -0,0 +1,5 @@ +package com.example.quiz + +import io.flutter.embedding.android.FlutterActivity + +class MainActivity: FlutterActivity() diff --git a/animations/step_05_b/android/app/src/main/res/drawable-v21/launch_background.xml b/animations/step_05_b/android/app/src/main/res/drawable-v21/launch_background.xml new file mode 100644 index 0000000000..f74085f3f6 --- /dev/null +++ b/animations/step_05_b/android/app/src/main/res/drawable-v21/launch_background.xml @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/animations/step_05_b/android/app/src/main/res/drawable/launch_background.xml b/animations/step_05_b/android/app/src/main/res/drawable/launch_background.xml new file mode 100644 index 0000000000..304732f884 --- /dev/null +++ b/animations/step_05_b/android/app/src/main/res/drawable/launch_background.xml @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/animations/step_05_b/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/animations/step_05_b/android/app/src/main/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..db77bb4b7b0906d62b1847e87f15cdcacf6a4f29 GIT binary patch literal 544 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY3?!3`olAj~WQl7;NpOBzNqJ&XDuZK6ep0G} zXKrG8YEWuoN@d~6R2!h8bpbvhu0Wd6uZuB!w&u2PAxD2eNXD>P5D~Wn-+_Wa#27Xc zC?Zj|6r#X(-D3u$NCt}(Ms06KgJ4FxJVv{GM)!I~&n8Bnc94O7-Hd)cjDZswgC;Qs zO=b+9!WcT8F?0rF7!Uys2bs@gozCP?z~o%U|N3vA*22NaGQG zlg@K`O_XuxvZ&Ks^m&R!`&1=spLvfx7oGDKDwpwW`#iqdw@AL`7MR}m`rwr|mZgU`8P7SBkL78fFf!WnuYWm$5Z0 zNXhDbCv&49sM544K|?c)WrFfiZvCi9h0O)B3Pgg&ebxsLQ05GG~ AQ2+n{ literal 0 HcmV?d00001 diff --git a/animations/step_05_b/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/animations/step_05_b/android/app/src/main/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..17987b79bb8a35cc66c3c1fd44f5a5526c1b78be GIT binary patch literal 442 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA3?vioaBc-sk|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*D5Xx&nMcT!A!W`0S9QKQy;}1Cl^CgaH=;G9cpY;r$Q>i*pfB zP2drbID<_#qf;rPZx^FqH)F_D#*k@@q03KywUtLX8Ua?`H+NMzkczFPK3lFz@i_kW%1NOn0|D2I9n9wzH8m|-tHjsw|9>@K=iMBhxvkv6m8Y-l zytQ?X=U+MF$@3 zt`~i=@j|6y)RWMK--}M|=T`o&^Ni>IoWKHEbBXz7?A@mgWoL>!*SXo`SZH-*HSdS+ yn*9;$7;m`l>wYBC5bq;=U}IMqLzqbYCidGC!)_gkIk_C@Uy!y&wkt5C($~2D>~)O*cj@FGjOCM)M>_ixfudOh)?xMu#Fs z#}Y=@YDTwOM)x{K_j*Q;dPdJ?Mz0n|pLRx{4n|)f>SXlmV)XB04CrSJn#dS5nK2lM zrZ9#~WelCp7&e13Y$jvaEXHskn$2V!!DN-nWS__6T*l;H&Fopn?A6HZ-6WRLFP=R` zqG+CE#d4|IbyAI+rJJ`&x9*T`+a=p|0O(+s{UBcyZdkhj=yS1>AirP+0R;mf2uMgM zC}@~JfByORAh4SyRgi&!(cja>F(l*O+nd+@4m$|6K6KDn_&uvCpV23&>G9HJp{xgg zoq1^2_p9@|WEo z*X_Uko@K)qYYv~>43eQGMdbiGbo>E~Q& zrYBH{QP^@Sti!`2)uG{irBBq@y*$B zi#&(U-*=fp74j)RyIw49+0MRPMRU)+a2r*PJ$L5roHt2$UjExCTZSbq%V!HeS7J$N zdG@vOZB4v_lF7Plrx+hxo7(fCV&}fHq)$ literal 0 HcmV?d00001 diff --git a/animations/step_05_b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/animations/step_05_b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..d5f1c8d34e7a88e3f88bea192c3a370d44689c3c GIT binary patch literal 1031 zcmeAS@N?(olHy`uVBq!ia0vp^6F``Q8Ax83A=Cw=BuiW)N`mv#O3D+9QW+dm@{>{( zJaZG%Q-e|yQz{EjrrIztFa`(sgt!6~Yi|1%a`XoT0ojZ}lNrNjb9xjc(B0U1_% zz5^97Xt*%oq$rQy4?0GKNfJ44uvxI)gC`h-NZ|&0-7(qS@?b!5r36oQ}zyZrNO3 zMO=Or+<~>+A&uN&E!^Sl+>xE!QC-|oJv`ApDhqC^EWD|@=#J`=d#Xzxs4ah}w&Jnc z$|q_opQ^2TrnVZ0o~wh<3t%W&flvYGe#$xqda2bR_R zvPYgMcHgjZ5nSA^lJr%;<&0do;O^tDDh~=pIxA#coaCY>&N%M2^tq^U%3DB@ynvKo}b?yu-bFc-u0JHzced$sg7S3zqI(2 z#Km{dPr7I=pQ5>FuK#)QwK?Y`E`B?nP+}U)I#c1+FM*1kNvWG|a(TpksZQ3B@sD~b zpQ2)*V*TdwjFOtHvV|;OsiDqHi=6%)o4b!)x$)%9pGTsE z-JL={-Ffv+T87W(Xpooq<`r*VzWQcgBN$$`u}f>-ZQI1BB8ykN*=e4rIsJx9>z}*o zo~|9I;xof literal 0 HcmV?d00001 diff --git a/animations/step_05_b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/animations/step_05_b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..4d6372eebdb28e45604e46eeda8dd24651419bc0 GIT binary patch literal 1443 zcmb`G{WsKk6vsdJTdFg%tJav9_E4vzrOaqkWF|A724Nly!y+?N9`YV6wZ}5(X(D_N(?!*n3`|_r0Hc?=PQw&*vnU?QTFY zB_MsH|!j$PP;I}?dppoE_gA(4uc!jV&0!l7_;&p2^pxNo>PEcNJv za5_RT$o2Mf!<+r?&EbHH6nMoTsDOa;mN(wv8RNsHpG)`^ymG-S5By8=l9iVXzN_eG%Xg2@Xeq76tTZ*dGh~Lo9vl;Zfs+W#BydUw zCkZ$o1LqWQO$FC9aKlLl*7x9^0q%0}$OMlp@Kk_jHXOjofdePND+j!A{q!8~Jn+s3 z?~~w@4?egS02}8NuulUA=L~QQfm;MzCGd)XhiftT;+zFO&JVyp2mBww?;QByS_1w! zrQlx%{^cMj0|Bo1FjwY@Q8?Hx0cIPF*@-ZRFpPc#bBw{5@tD(5%sClzIfl8WU~V#u zm5Q;_F!wa$BSpqhN>W@2De?TKWR*!ujY;Yylk_X5#~V!L*Gw~;$%4Q8~Mad z@`-kG?yb$a9cHIApZDVZ^U6Xkp<*4rU82O7%}0jjHlK{id@?-wpN*fCHXyXh(bLt* zPc}H-x0e4E&nQ>y%B-(EL=9}RyC%MyX=upHuFhAk&MLbsF0LP-q`XnH78@fT+pKPW zu72MW`|?8ht^tz$iC}ZwLp4tB;Q49K!QCF3@!iB1qOI=?w z7In!}F~ij(18UYUjnbmC!qKhPo%24?8U1x{7o(+?^Zu0Hx81|FuS?bJ0jgBhEMzf< zCgUq7r2OCB(`XkKcN-TL>u5y#dD6D!)5W?`O5)V^>jb)P)GBdy%t$uUMpf$SNV31$ zb||OojAbvMP?T@$h_ZiFLFVHDmbyMhJF|-_)HX3%m=CDI+ID$0^C>kzxprBW)hw(v zr!Gmda);ICoQyhV_oP5+C%?jcG8v+D@9f?Dk*!BxY}dazmrT@64UrP3hlslANK)bq z$67n83eh}OeW&SV@HG95P|bjfqJ7gw$e+`Hxo!4cx`jdK1bJ>YDSpGKLPZ^1cv$ek zIB?0S<#tX?SJCLWdMd{-ME?$hc7A$zBOdIJ)4!KcAwb=VMov)nK;9z>x~rfT1>dS+ zZ6#`2v@`jgbqq)P22H)Tx2CpmM^o1$B+xT6`(v%5xJ(?j#>Q$+rx_R|7TzDZe{J6q zG1*EcU%tE?!kO%^M;3aM6JN*LAKUVb^xz8-Pxo#jR5(-KBeLJvA@-gxNHx0M-ZJLl z;#JwQoh~9V?`UVo#}{6ka@II>++D@%KqGpMdlQ}?9E*wFcf5(#XQnP$Dk5~%iX^>f z%$y;?M0BLp{O3a(-4A?ewryHrrD%cx#Q^%KY1H zNre$ve+vceSLZcNY4U(RBX&)oZn*Py()h)XkE?PL$!bNb{N5FVI2Y%LKEm%yvpyTP z(1P?z~7YxD~Rf<(a@_y` literal 0 HcmV?d00001 diff --git a/animations/step_05_b/android/app/src/main/res/values-night/styles.xml b/animations/step_05_b/android/app/src/main/res/values-night/styles.xml new file mode 100644 index 0000000000..06952be745 --- /dev/null +++ b/animations/step_05_b/android/app/src/main/res/values-night/styles.xml @@ -0,0 +1,18 @@ + + + + + + + diff --git a/animations/step_05_b/android/app/src/main/res/values/styles.xml b/animations/step_05_b/android/app/src/main/res/values/styles.xml new file mode 100644 index 0000000000..cb1ef88056 --- /dev/null +++ b/animations/step_05_b/android/app/src/main/res/values/styles.xml @@ -0,0 +1,18 @@ + + + + + + + diff --git a/animations/step_05_b/android/app/src/profile/AndroidManifest.xml b/animations/step_05_b/android/app/src/profile/AndroidManifest.xml new file mode 100644 index 0000000000..399f6981d5 --- /dev/null +++ b/animations/step_05_b/android/app/src/profile/AndroidManifest.xml @@ -0,0 +1,7 @@ + + + + diff --git a/animations/step_05_b/android/build.gradle b/animations/step_05_b/android/build.gradle new file mode 100644 index 0000000000..d2ffbffa4c --- /dev/null +++ b/animations/step_05_b/android/build.gradle @@ -0,0 +1,18 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +rootProject.buildDir = "../build" +subprojects { + project.buildDir = "${rootProject.buildDir}/${project.name}" +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean", Delete) { + delete rootProject.buildDir +} diff --git a/animations/step_05_b/android/gradle.properties b/animations/step_05_b/android/gradle.properties new file mode 100644 index 0000000000..2597170821 --- /dev/null +++ b/animations/step_05_b/android/gradle.properties @@ -0,0 +1,3 @@ +org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +android.useAndroidX=true +android.enableJetifier=true diff --git a/animations/step_05_b/android/gradle/wrapper/gradle-wrapper.properties b/animations/step_05_b/android/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000000..7bb2df6ba6 --- /dev/null +++ b/animations/step_05_b/android/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,5 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip diff --git a/animations/step_05_b/android/settings.gradle b/animations/step_05_b/android/settings.gradle new file mode 100644 index 0000000000..b9e43bd376 --- /dev/null +++ b/animations/step_05_b/android/settings.gradle @@ -0,0 +1,25 @@ +pluginManagement { + def flutterSdkPath = { + def properties = new Properties() + file("local.properties").withInputStream { properties.load(it) } + def flutterSdkPath = properties.getProperty("flutter.sdk") + assert flutterSdkPath != null, "flutter.sdk not set in local.properties" + return flutterSdkPath + }() + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id "dev.flutter.flutter-plugin-loader" version "1.0.0" + id "com.android.application" version "8.1.0" apply false + id "org.jetbrains.kotlin.android" version "1.8.22" apply false +} + +include ":app" diff --git a/animations/step_05_b/ios/.gitignore b/animations/step_05_b/ios/.gitignore new file mode 100644 index 0000000000..7a7f9873ad --- /dev/null +++ b/animations/step_05_b/ios/.gitignore @@ -0,0 +1,34 @@ +**/dgph +*.mode1v3 +*.mode2v3 +*.moved-aside +*.pbxuser +*.perspectivev3 +**/*sync/ +.sconsign.dblite +.tags* +**/.vagrant/ +**/DerivedData/ +Icon? +**/Pods/ +**/.symlinks/ +profile +xcuserdata +**/.generated/ +Flutter/App.framework +Flutter/Flutter.framework +Flutter/Flutter.podspec +Flutter/Generated.xcconfig +Flutter/ephemeral/ +Flutter/app.flx +Flutter/app.zip +Flutter/flutter_assets/ +Flutter/flutter_export_environment.sh +ServiceDefinitions.json +Runner/GeneratedPluginRegistrant.* + +# Exceptions to above rules. +!default.mode1v3 +!default.mode2v3 +!default.pbxuser +!default.perspectivev3 diff --git a/animations/step_05_b/ios/Flutter/AppFrameworkInfo.plist b/animations/step_05_b/ios/Flutter/AppFrameworkInfo.plist new file mode 100644 index 0000000000..7c56964006 --- /dev/null +++ b/animations/step_05_b/ios/Flutter/AppFrameworkInfo.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + App + CFBundleIdentifier + io.flutter.flutter.app + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + App + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1.0 + MinimumOSVersion + 12.0 + + diff --git a/animations/step_05_b/ios/Flutter/Debug.xcconfig b/animations/step_05_b/ios/Flutter/Debug.xcconfig new file mode 100644 index 0000000000..592ceee85b --- /dev/null +++ b/animations/step_05_b/ios/Flutter/Debug.xcconfig @@ -0,0 +1 @@ +#include "Generated.xcconfig" diff --git a/animations/step_05_b/ios/Flutter/Release.xcconfig b/animations/step_05_b/ios/Flutter/Release.xcconfig new file mode 100644 index 0000000000..592ceee85b --- /dev/null +++ b/animations/step_05_b/ios/Flutter/Release.xcconfig @@ -0,0 +1 @@ +#include "Generated.xcconfig" diff --git a/animations/step_05_b/ios/Runner.xcodeproj/project.pbxproj b/animations/step_05_b/ios/Runner.xcodeproj/project.pbxproj new file mode 100644 index 0000000000..faef24d87a --- /dev/null +++ b/animations/step_05_b/ios/Runner.xcodeproj/project.pbxproj @@ -0,0 +1,616 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 54; + objects = { + +/* Begin PBXBuildFile section */ + 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; + 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; + 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; + 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; + 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; + 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; + 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 331C8085294A63A400263BE5 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 97C146E61CF9000F007C117D /* Project object */; + proxyType = 1; + remoteGlobalIDString = 97C146ED1CF9000F007C117D; + remoteInfo = Runner; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 9705A1C41CF9048500538489 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; + 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; + 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; + 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; + 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; + 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; + 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; + 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; + 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 97C146EB1CF9000F007C117D /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 331C8082294A63A400263BE5 /* RunnerTests */ = { + isa = PBXGroup; + children = ( + 331C807B294A618700263BE5 /* RunnerTests.swift */, + ); + path = RunnerTests; + sourceTree = ""; + }; + 9740EEB11CF90186004384FC /* Flutter */ = { + isa = PBXGroup; + children = ( + 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */, + 9740EEB21CF90195004384FC /* Debug.xcconfig */, + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, + 9740EEB31CF90195004384FC /* Generated.xcconfig */, + ); + name = Flutter; + sourceTree = ""; + }; + 97C146E51CF9000F007C117D = { + isa = PBXGroup; + children = ( + 9740EEB11CF90186004384FC /* Flutter */, + 97C146F01CF9000F007C117D /* Runner */, + 97C146EF1CF9000F007C117D /* Products */, + 331C8082294A63A400263BE5 /* RunnerTests */, + ); + sourceTree = ""; + }; + 97C146EF1CF9000F007C117D /* Products */ = { + isa = PBXGroup; + children = ( + 97C146EE1CF9000F007C117D /* Runner.app */, + 331C8081294A63A400263BE5 /* RunnerTests.xctest */, + ); + name = Products; + sourceTree = ""; + }; + 97C146F01CF9000F007C117D /* Runner */ = { + isa = PBXGroup; + children = ( + 97C146FA1CF9000F007C117D /* Main.storyboard */, + 97C146FD1CF9000F007C117D /* Assets.xcassets */, + 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */, + 97C147021CF9000F007C117D /* Info.plist */, + 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */, + 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */, + 74858FAE1ED2DC5600515810 /* AppDelegate.swift */, + 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */, + ); + path = Runner; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 331C8080294A63A400263BE5 /* RunnerTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; + buildPhases = ( + 331C807D294A63A400263BE5 /* Sources */, + 331C807F294A63A400263BE5 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 331C8086294A63A400263BE5 /* PBXTargetDependency */, + ); + name = RunnerTests; + productName = RunnerTests; + productReference = 331C8081294A63A400263BE5 /* RunnerTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; + 97C146ED1CF9000F007C117D /* Runner */ = { + isa = PBXNativeTarget; + buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; + buildPhases = ( + 9740EEB61CF901F6004384FC /* Run Script */, + 97C146EA1CF9000F007C117D /* Sources */, + 97C146EB1CF9000F007C117D /* Frameworks */, + 97C146EC1CF9000F007C117D /* Resources */, + 9705A1C41CF9048500538489 /* Embed Frameworks */, + 3B06AD1E1E4923F5004D2608 /* Thin Binary */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = Runner; + productName = Runner; + productReference = 97C146EE1CF9000F007C117D /* Runner.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 97C146E61CF9000F007C117D /* Project object */ = { + isa = PBXProject; + attributes = { + BuildIndependentTargetsInParallel = YES; + LastUpgradeCheck = 1510; + ORGANIZATIONNAME = ""; + TargetAttributes = { + 331C8080294A63A400263BE5 = { + CreatedOnToolsVersion = 14.0; + TestTargetID = 97C146ED1CF9000F007C117D; + }; + 97C146ED1CF9000F007C117D = { + CreatedOnToolsVersion = 7.3.1; + LastSwiftMigration = 1100; + }; + }; + }; + buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 97C146E51CF9000F007C117D; + productRefGroup = 97C146EF1CF9000F007C117D /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 97C146ED1CF9000F007C117D /* Runner */, + 331C8080294A63A400263BE5 /* RunnerTests */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 331C807F294A63A400263BE5 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 97C146EC1CF9000F007C117D /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */, + 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */, + 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */, + 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", + ); + name = "Thin Binary"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + }; + 9740EEB61CF901F6004384FC /* Run Script */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Run Script"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 331C807D294A63A400263BE5 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 97C146EA1CF9000F007C117D /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */, + 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 331C8086294A63A400263BE5 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 97C146ED1CF9000F007C117D /* Runner */; + targetProxy = 331C8085294A63A400263BE5 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + 97C146FA1CF9000F007C117D /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 97C146FB1CF9000F007C117D /* Base */, + ); + name = Main.storyboard; + sourceTree = ""; + }; + 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 97C147001CF9000F007C117D /* Base */, + ); + name = LaunchScreen.storyboard; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 249021D3217E4FDB00AE95B9 /* Profile */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + SUPPORTED_PLATFORMS = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Profile; + }; + 249021D4217E4FDB00AE95B9 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + ENABLE_BITCODE = NO; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.example.quiz; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; + SWIFT_VERSION = 5.0; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Profile; + }; + 331C8088294A63A400263BE5 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.quiz.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; + }; + name = Debug; + }; + 331C8089294A63A400263BE5 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.quiz.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; + }; + name = Release; + }; + 331C808A294A63A400263BE5 /* Profile */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.quiz.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; + }; + name = Profile; + }; + 97C147031CF9000F007C117D /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 97C147041CF9000F007C117D /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + SUPPORTED_PLATFORMS = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 97C147061CF9000F007C117D /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + ENABLE_BITCODE = NO; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.example.quiz; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Debug; + }; + 97C147071CF9000F007C117D /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + ENABLE_BITCODE = NO; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.example.quiz; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; + SWIFT_VERSION = 5.0; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 331C8088294A63A400263BE5 /* Debug */, + 331C8089294A63A400263BE5 /* Release */, + 331C808A294A63A400263BE5 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 97C147031CF9000F007C117D /* Debug */, + 97C147041CF9000F007C117D /* Release */, + 249021D3217E4FDB00AE95B9 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 97C147061CF9000F007C117D /* Debug */, + 97C147071CF9000F007C117D /* Release */, + 249021D4217E4FDB00AE95B9 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 97C146E61CF9000F007C117D /* Project object */; +} diff --git a/animations/step_05_b/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/animations/step_05_b/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000000..919434a625 --- /dev/null +++ b/animations/step_05_b/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/animations/step_05_b/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/animations/step_05_b/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000000..18d981003d --- /dev/null +++ b/animations/step_05_b/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/animations/step_05_b/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/animations/step_05_b/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings new file mode 100644 index 0000000000..f9b0d7c5ea --- /dev/null +++ b/animations/step_05_b/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings @@ -0,0 +1,8 @@ + + + + + PreviewsEnabled + + + diff --git a/animations/step_05_b/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/animations/step_05_b/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme new file mode 100644 index 0000000000..8e3ca5dfe1 --- /dev/null +++ b/animations/step_05_b/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -0,0 +1,98 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/animations/step_05_b/ios/Runner.xcworkspace/contents.xcworkspacedata b/animations/step_05_b/ios/Runner.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000000..1d526a16ed --- /dev/null +++ b/animations/step_05_b/ios/Runner.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/animations/step_05_b/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/animations/step_05_b/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000000..18d981003d --- /dev/null +++ b/animations/step_05_b/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/animations/step_05_b/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/animations/step_05_b/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings new file mode 100644 index 0000000000..f9b0d7c5ea --- /dev/null +++ b/animations/step_05_b/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings @@ -0,0 +1,8 @@ + + + + + PreviewsEnabled + + + diff --git a/animations/step_05_b/ios/Runner/AppDelegate.swift b/animations/step_05_b/ios/Runner/AppDelegate.swift new file mode 100644 index 0000000000..626664468b --- /dev/null +++ b/animations/step_05_b/ios/Runner/AppDelegate.swift @@ -0,0 +1,13 @@ +import Flutter +import UIKit + +@main +@objc class AppDelegate: FlutterAppDelegate { + override func application( + _ application: UIApplication, + didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? + ) -> Bool { + GeneratedPluginRegistrant.register(with: self) + return super.application(application, didFinishLaunchingWithOptions: launchOptions) + } +} diff --git a/animations/step_05_b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/animations/step_05_b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000000..d36b1fab2d --- /dev/null +++ b/animations/step_05_b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,122 @@ +{ + "images" : [ + { + "size" : "20x20", + "idiom" : "iphone", + "filename" : "Icon-App-20x20@2x.png", + "scale" : "2x" + }, + { + "size" : "20x20", + "idiom" : "iphone", + "filename" : "Icon-App-20x20@3x.png", + "scale" : "3x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "Icon-App-29x29@1x.png", + "scale" : "1x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "Icon-App-29x29@2x.png", + "scale" : "2x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "Icon-App-29x29@3x.png", + "scale" : "3x" + }, + { + "size" : "40x40", + "idiom" : "iphone", + "filename" : "Icon-App-40x40@2x.png", + "scale" : "2x" + }, + { + "size" : "40x40", + "idiom" : "iphone", + "filename" : "Icon-App-40x40@3x.png", + "scale" : "3x" + }, + { + "size" : "60x60", + "idiom" : "iphone", + "filename" : "Icon-App-60x60@2x.png", + "scale" : "2x" + }, + { + "size" : "60x60", + "idiom" : "iphone", + "filename" : "Icon-App-60x60@3x.png", + "scale" : "3x" + }, + { + "size" : "20x20", + "idiom" : "ipad", + "filename" : "Icon-App-20x20@1x.png", + "scale" : "1x" + }, + { + "size" : "20x20", + "idiom" : "ipad", + "filename" : "Icon-App-20x20@2x.png", + "scale" : "2x" + }, + { + "size" : "29x29", + "idiom" : "ipad", + "filename" : "Icon-App-29x29@1x.png", + "scale" : "1x" + }, + { + "size" : "29x29", + "idiom" : "ipad", + "filename" : "Icon-App-29x29@2x.png", + "scale" : "2x" + }, + { + "size" : "40x40", + "idiom" : "ipad", + "filename" : "Icon-App-40x40@1x.png", + "scale" : "1x" + }, + { + "size" : "40x40", + "idiom" : "ipad", + "filename" : "Icon-App-40x40@2x.png", + "scale" : "2x" + }, + { + "size" : "76x76", + "idiom" : "ipad", + "filename" : "Icon-App-76x76@1x.png", + "scale" : "1x" + }, + { + "size" : "76x76", + "idiom" : "ipad", + "filename" : "Icon-App-76x76@2x.png", + "scale" : "2x" + }, + { + "size" : "83.5x83.5", + "idiom" : "ipad", + "filename" : "Icon-App-83.5x83.5@2x.png", + "scale" : "2x" + }, + { + "size" : "1024x1024", + "idiom" : "ios-marketing", + "filename" : "Icon-App-1024x1024@1x.png", + "scale" : "1x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} diff --git a/animations/step_05_b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png b/animations/step_05_b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..dc9ada4725e9b0ddb1deab583e5b5102493aa332 GIT binary patch literal 10932 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 literal 0 HcmV?d00001 diff --git a/animations/step_05_b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png b/animations/step_05_b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..797d452e458972bab9d994556c8305db4c827017 GIT binary patch literal 406 zcmV;H0crk;P))>cdjpWt&rLJgVp-t?DREyuq1A%0Z4)6_WsQ7{nzjN zo!X zGXV)2i3kcZIL~_j>uIKPK_zib+3T+Nt3Mb&Br)s)UIaA}@p{wDda>7=Q|mGRp7pqY zkJ!7E{MNz$9nOwoVqpFb)}$IP24Wn2JJ=Cw(!`OXJBr45rP>>AQr$6c7slJWvbpNW z@KTwna6d?PP>hvXCcp=4F;=GR@R4E7{4VU^0p4F>v^#A|>07*qoM6N<$f*5nx ACIA2c literal 0 HcmV?d00001 diff --git a/animations/step_05_b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png b/animations/step_05_b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..6ed2d933e1120817fe9182483a228007b18ab6ae GIT binary patch literal 450 zcmV;z0X_bSP)iGWQ_5NJQ_~rNh*z)}eT%KUb z`7gNk0#AwF^#0T0?hIa^`~Ck;!}#m+_uT050aTR(J!bU#|IzRL%^UsMS#KsYnTF*!YeDOytlP4VhV?b} z%rz_<=#CPc)tU1MZTq~*2=8~iZ!lSa<{9b@2Jl;?IEV8)=fG217*|@)CCYgFze-x? zIFODUIA>nWKpE+bn~n7;-89sa>#DR>TSlqWk*!2hSN6D~Qb#VqbP~4Fk&m`@1$JGr zXPIdeRE&b2Thd#{MtDK$px*d3-Wx``>!oimf%|A-&-q*6KAH)e$3|6JV%HX{Hig)k suLT-RhftRq8b9;(V=235Wa|I=027H2wCDra;{X5v07*qoM6N<$f;9x^2LJ#7 literal 0 HcmV?d00001 diff --git a/animations/step_05_b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png b/animations/step_05_b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..4cd7b0099ca80c806f8fe495613e8d6c69460d76 GIT binary patch literal 282 zcmV+#0p(^bcu7P-R4C8Q z&e;xxFbF_Vrezo%_kH*OKhshZ6BFpG-Y1e10`QXJKbND7AMQ&cMj60B5TNObaZxYybcN07*qoM6N<$g3m;S%K!iX literal 0 HcmV?d00001 diff --git a/animations/step_05_b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png b/animations/step_05_b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..fe730945a01f64a61e2235dbe3f45b08f7729182 GIT binary patch literal 462 zcmV;<0WtoGP)-}iV`2<;=$?g5M=KQbZ{F&YRNy7Nn@%_*5{gvDM0aKI4?ESmw z{NnZg)A0R`+4?NF_RZexyVB&^^ZvN!{I28tr{Vje;QNTz`dG&Jz0~Ek&f2;*Z7>B|cg}xYpxEFY+0YrKLF;^Q+-HreN0P{&i zK~zY`?b7ECf-n?@;d<&orQ*Q7KoR%4|C>{W^h6@&01>0SKS`dn{Q}GT%Qj_{PLZ_& zs`MFI#j-(>?bvdZ!8^xTwlY{qA)T4QLbY@j(!YJ7aXJervHy6HaG_2SB`6CC{He}f zHVw(fJWApwPq!6VY7r1w-Fs)@ox~N+q|w~e;JI~C4Vf^@d>Wvj=fl`^u9x9wd9 zR%3*Q+)t%S!MU_`id^@&Y{y7-r98lZX0?YrHlfmwb?#}^1b{8g&KzmkE(L>Z&)179 zp<)v6Y}pRl100G2FL_t(o!|l{-Q-VMg#&MKg7c{O0 z2wJImOS3Gy*Z2Qifdv~JYOp;v+U)a|nLoc7hNH;I$;lzDt$}rkaFw1mYK5_0Q(Sut zvbEloxON7$+HSOgC9Z8ltuC&0OSF!-mXv5caV>#bc3@hBPX@I$58-z}(ZZE!t-aOG zpjNkbau@>yEzH(5Yj4kZiMH32XI!4~gVXNnjAvRx;Sdg^`>2DpUEwoMhTs_st8pKG z(%SHyHdU&v%f36~uERh!bd`!T2dw;z6PrOTQ7Vt*#9F2uHlUVnb#ev_o^fh}Dzmq} zWtlk35}k=?xj28uO|5>>$yXadTUE@@IPpgH`gJ~Ro4>jd1IF|(+IX>8M4Ps{PNvmI zNj4D+XgN83gPt_Gm}`Ybv{;+&yu-C(Grdiahmo~BjG-l&mWM+{e5M1sm&=xduwgM9 z`8OEh`=F3r`^E{n_;%9weN{cf2%7=VzC@cYj+lg>+3|D|_1C@{hcU(DyQG_BvBWe? zvTv``=%b1zrol#=R`JB)>cdjpWt&rLJgVp-t?DREyuq1A%0Z4)6_WsQ7{nzjN zo!X zGXV)2i3kcZIL~_j>uIKPK_zib+3T+Nt3Mb&Br)s)UIaA}@p{wDda>7=Q|mGRp7pqY zkJ!7E{MNz$9nOwoVqpFb)}$IP24Wn2JJ=Cw(!`OXJBr45rP>>AQr$6c7slJWvbpNW z@KTwna6d?PP>hvXCcp=4F;=GR@R4E7{4VU^0p4F>v^#A|>07*qoM6N<$f*5nx ACIA2c literal 0 HcmV?d00001 diff --git a/animations/step_05_b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png b/animations/step_05_b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..502f463a9bc882b461c96aadf492d1729e49e725 GIT binary patch literal 586 zcmV-Q0=4~#P)+}#`wDE{8-2Mebf5<{{PqV{TgVcv*r8?UZ3{-|G?_}T*&y;@cqf{ z{Q*~+qr%%p!1pS*_Uicl#q9lc(D`!D`LN62sNwq{oYw(Wmhk)k<@f$!$@ng~_5)Ru z0Z)trIA5^j{DIW^c+vT2%lW+2<(RtE2wR;4O@)Tm`Xr*?A(qYoM}7i5Yxw>D(&6ou zxz!_Xr~yNF+waPe00049Nkl*;a!v6h%{rlvIH#gW3s8p;bFr=l}mRqpW2h zw=OA%hdyL~z+UHOzl0eKhEr$YYOL-c-%Y<)=j?(bzDweB7{b+%_ypvm_cG{SvM=DK zhv{K@m>#Bw>2W$eUI#iU)Wdgs8Y3U+A$Gd&{+j)d)BmGKx+43U_!tik_YlN)>$7G! zhkE!s;%oku3;IwG3U^2kw?z+HM)jB{@zFhK8P#KMSytSthr+4!c(5c%+^UBn`0X*2 zy3(k600_CSZj?O$Qu%&$;|TGUJrptR(HzyIx>5E(2r{eA(<6t3e3I0B)7d6s7?Z5J zZ!rtKvA{MiEBm&KFtoifx>5P^Z=vl)95XJn()aS5%ad(s?4-=Tkis9IGu{`Fy8r+H07*qoM6N<$f20Z)wqMt%V?S?~D#06};F zA3KcL`Wb+>5ObvgQIG&ig8(;V04hz?@cqy3{mSh8o!|U|)cI!1_+!fWH@o*8vh^CU z^ws0;(c$gI+2~q^tO#GDHf@=;DncUw00J^eL_t(&-tE|HQ`%4vfZ;WsBqu-$0nu1R zq^Vj;p$clf^?twn|KHO+IGt^q#a3X?w9dXC@*yxhv&l}F322(8Y1&=P&I}~G@#h6; z1CV9ecD9ZEe87{{NtI*)_aJ<`kJa z?5=RBtFF50s;jQLFil-`)m2wrb=6h(&brpj%nG_U&ut~$?8Rokzxi8zJoWr#2dto5 zOX_URcc<1`Iky+jc;A%Vzx}1QU{2$|cKPom2Vf1{8m`vja4{F>HS?^Nc^rp}xo+Nh zxd}eOm`fm3@MQC1< zIk&aCjb~Yh%5+Yq0`)D;q{#-Uqlv*o+Oor zE!I71Z@ASH3grl8&P^L0WpavHoP|UX4e?!igT`4?AZk$hu*@%6WJ;zDOGlw7kj@ zY5!B-0ft0f?Lgb>C;$Ke07*qoM6N<$f~t1N9smFU literal 0 HcmV?d00001 diff --git a/animations/step_05_b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png b/animations/step_05_b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..0ec303439225b78712f49115768196d8d76f6790 GIT binary patch literal 862 zcmV-k1EKthP)20Z)wqMt%V?S?~D#06};F zA3KcL`Wb+>5ObvgQIG&ig8(;V04hz?@cqy3{mSh8o!|U|)cI!1_+!fWH@o*8vh^CU z^ws0;(c$gI+2~q^tO#GDHf@=;DncUw00J^eL_t(&-tE|HQ`%4vfZ;WsBqu-$0nu1R zq^Vj;p$clf^?twn|KHO+IGt^q#a3X?w9dXC@*yxhv&l}F322(8Y1&=P&I}~G@#h6; z1CV9ecD9ZEe87{{NtI*)_aJ<`kJa z?5=RBtFF50s;jQLFil-`)m2wrb=6h(&brpj%nG_U&ut~$?8Rokzxi8zJoWr#2dto5 zOX_URcc<1`Iky+jc;A%Vzx}1QU{2$|cKPom2Vf1{8m`vja4{F>HS?^Nc^rp}xo+Nh zxd}eOm`fm3@MQC1< zIk&aCjb~Yh%5+Yq0`)D;q{#-Uqlv*o+Oor zE!I71Z@ASH3grl8&P^L0WpavHoP|UX4e?!igT`4?AZk$hu*@%6WJ;zDOGlw7kj@ zY5!B-0ft0f?Lgb>C;$Ke07*qoM6N<$f~t1N9smFU literal 0 HcmV?d00001 diff --git a/animations/step_05_b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png b/animations/step_05_b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..e9f5fea27c705180eb716271f41b582e76dcbd90 GIT binary patch literal 1674 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 literal 0 HcmV?d00001 diff --git a/animations/step_05_b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png b/animations/step_05_b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..0467bf12aa4d28f374bb26596605a46dcbb3e7c8 GIT binary patch literal 1418 zcmV;51$Fv~P)q zKfU)WzW*n(@|xWGCA9ScMt*e9`2kdxPQ&&>|-UCa7_51w+ zLUsW@ZzZSW0y$)Hp~e9%PvP|a03ks1`~K?q{u;6NC8*{AOqIUq{CL&;p56Lf$oQGq z^={4hPQv)y=I|4n+?>7Fim=dxt1 z2H+Dm+1+fh+IF>G0SjJMkQQre1x4|G*Z==(Ot&kCnUrL4I(rf(ucITwmuHf^hXiJT zkdTm&kdTm&kdTm&kdP`esgWG0BcWCVkVZ&2dUwN`cgM8QJb`Z7Z~e<&Yj2(}>Tmf` zm1{eLgw!b{bXkjWbF%dTkTZEJWyWOb##Lfw4EK2}<0d6%>AGS{po>WCOy&f$Tay_> z?NBlkpo@s-O;0V%Y_Xa-G#_O08q5LR*~F%&)}{}r&L%Sbs8AS4t7Y0NEx*{soY=0MZExqA5XHQkqi#4gW3 zqODM^iyZl;dvf)-bOXtOru(s)Uc7~BFx{w-FK;2{`VA?(g&@3z&bfLFyctOH!cVsF z7IL=fo-qBndRUm;kAdXR4e6>k-z|21AaN%ubeVrHl*<|s&Ax@W-t?LR(P-24A5=>a z*R9#QvjzF8n%@1Nw@?CG@6(%>+-0ASK~jEmCV|&a*7-GKT72W<(TbSjf)&Eme6nGE z>Gkj4Sq&2e+-G%|+NM8OOm5zVl9{Z8Dd8A5z3y8mZ=4Bv4%>as_{9cN#bm~;h>62( zdqY93Zy}v&c4n($Vv!UybR8ocs7#zbfX1IY-*w~)p}XyZ-SFC~4w>BvMVr`dFbelV{lLL0bx7@*ZZdebr3`sP;? zVImji)kG)(6Juv0lz@q`F!k1FE;CQ(D0iG$wchPbKZQELlsZ#~rt8#90Y_Xh&3U-< z{s<&cCV_1`^TD^ia9!*mQDq& zn2{r`j};V|uV%_wsP!zB?m%;FeaRe+X47K0e+KE!8C{gAWF8)lCd1u1%~|M!XNRvw zvtqy3iz0WSpWdhn6$hP8PaRBmp)q`#PCA`Vd#Tc$@f1tAcM>f_I@bC)hkI9|o(Iqv zo}Piadq!j76}004RBio<`)70k^`K1NK)q>w?p^C6J2ZC!+UppiK6&y3Kmbv&O!oYF z34$0Z;QO!JOY#!`qyGH<3Pd}Pt@q*A0V=3SVtWKRR8d8Z&@)3qLPA19LPA19LPEUC YUoZo%k(ykuW&i*H07*qoM6N<$f+CH{y8r+H literal 0 HcmV?d00001 diff --git a/animations/step_05_b/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json b/animations/step_05_b/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json new file mode 100644 index 0000000000..0bedcf2fd4 --- /dev/null +++ b/animations/step_05_b/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "LaunchImage.png", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "LaunchImage@2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "filename" : "LaunchImage@3x.png", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} diff --git a/animations/step_05_b/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png b/animations/step_05_b/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png new file mode 100644 index 0000000000000000000000000000000000000000..9da19eacad3b03bb08bbddbbf4ac48dd78b3d838 GIT binary patch literal 68 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx0wlM}@Gt=>Zci7-kcv6Uzs@r-FtIZ-&5|)J Q1PU{Fy85}Sb4q9e0B4a5jsO4v literal 0 HcmV?d00001 diff --git a/animations/step_05_b/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png b/animations/step_05_b/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..9da19eacad3b03bb08bbddbbf4ac48dd78b3d838 GIT binary patch literal 68 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx0wlM}@Gt=>Zci7-kcv6Uzs@r-FtIZ-&5|)J Q1PU{Fy85}Sb4q9e0B4a5jsO4v literal 0 HcmV?d00001 diff --git a/animations/step_05_b/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png b/animations/step_05_b/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..9da19eacad3b03bb08bbddbbf4ac48dd78b3d838 GIT binary patch literal 68 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx0wlM}@Gt=>Zci7-kcv6Uzs@r-FtIZ-&5|)J Q1PU{Fy85}Sb4q9e0B4a5jsO4v literal 0 HcmV?d00001 diff --git a/animations/step_05_b/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md b/animations/step_05_b/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md new file mode 100644 index 0000000000..89c2725b70 --- /dev/null +++ b/animations/step_05_b/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md @@ -0,0 +1,5 @@ +# Launch Screen Assets + +You can customize the launch screen with your own desired assets by replacing the image files in this directory. + +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. \ No newline at end of file diff --git a/animations/step_05_b/ios/Runner/Base.lproj/LaunchScreen.storyboard b/animations/step_05_b/ios/Runner/Base.lproj/LaunchScreen.storyboard new file mode 100644 index 0000000000..f2e259c7c9 --- /dev/null +++ b/animations/step_05_b/ios/Runner/Base.lproj/LaunchScreen.storyboard @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/animations/step_05_b/ios/Runner/Base.lproj/Main.storyboard b/animations/step_05_b/ios/Runner/Base.lproj/Main.storyboard new file mode 100644 index 0000000000..f3c28516fb --- /dev/null +++ b/animations/step_05_b/ios/Runner/Base.lproj/Main.storyboard @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/animations/step_05_b/ios/Runner/Info.plist b/animations/step_05_b/ios/Runner/Info.plist new file mode 100644 index 0000000000..1a0d38e408 --- /dev/null +++ b/animations/step_05_b/ios/Runner/Info.plist @@ -0,0 +1,49 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleDisplayName + Quiz + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + quiz + CFBundlePackageType + APPL + CFBundleShortVersionString + $(FLUTTER_BUILD_NAME) + CFBundleSignature + ???? + CFBundleVersion + $(FLUTTER_BUILD_NUMBER) + LSRequiresIPhoneOS + + UILaunchStoryboardName + LaunchScreen + UIMainStoryboardFile + Main + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + CADisableMinimumFrameDurationOnPhone + + UIApplicationSupportsIndirectInputEvents + + + diff --git a/animations/step_05_b/ios/Runner/Runner-Bridging-Header.h b/animations/step_05_b/ios/Runner/Runner-Bridging-Header.h new file mode 100644 index 0000000000..308a2a560b --- /dev/null +++ b/animations/step_05_b/ios/Runner/Runner-Bridging-Header.h @@ -0,0 +1 @@ +#import "GeneratedPluginRegistrant.h" diff --git a/animations/step_05_b/ios/RunnerTests/RunnerTests.swift b/animations/step_05_b/ios/RunnerTests/RunnerTests.swift new file mode 100644 index 0000000000..86a7c3b1b6 --- /dev/null +++ b/animations/step_05_b/ios/RunnerTests/RunnerTests.swift @@ -0,0 +1,12 @@ +import Flutter +import UIKit +import XCTest + +class RunnerTests: XCTestCase { + + func testExample() { + // If you add code to the Runner application, consider adding tests here. + // See https://developer.apple.com/documentation/xctest for more information about using XCTest. + } + +} diff --git a/animations/step_05_b/lib/flip_effect.dart b/animations/step_05_b/lib/flip_effect.dart new file mode 100644 index 0000000000..cafd21bece --- /dev/null +++ b/animations/step_05_b/lib/flip_effect.dart @@ -0,0 +1,85 @@ +import 'package:flutter/widgets.dart'; +import 'dart:math' as math; + +class CardFlipEffect extends StatefulWidget { + final Widget child; + final Duration duration; + final double delayAmount; + + const CardFlipEffect({ + super.key, + required this.child, + required this.duration, + required this.delayAmount, + }); + + @override + State createState() => _CardFlipEffectState(); +} + +class _CardFlipEffectState extends State + with SingleTickerProviderStateMixin { + late final AnimationController _animationController; + Widget? _previousChild; + late final Animation _animationWithDelay; + + @override + void initState() { + super.initState(); + + _animationController = AnimationController( + vsync: this, duration: widget.duration * (widget.delayAmount + 1)); + + _animationController.addListener(() { + if (_animationController.value == 1) { + _animationController.reset(); + } + }); + + _animationWithDelay = TweenSequence([ + if (widget.delayAmount > 0) + TweenSequenceItem( + tween: ConstantTween(0.0), + weight: widget.delayAmount, + ), + TweenSequenceItem( + tween: Tween(begin: 0.0, end: 1.0), + weight: 1.0, + ), + ]).animate(_animationController); + } + + @override + void didUpdateWidget(covariant CardFlipEffect oldWidget) { + super.didUpdateWidget(oldWidget); + + if (widget.child.key != oldWidget.child.key) { + _handleChildChanged(widget.child, oldWidget.child); + } + } + + void _handleChildChanged(Widget newChild, Widget previousChild) { + _previousChild = previousChild; + _animationController.forward(); + } + + @override + Widget build(BuildContext context) { + return AnimatedBuilder( + animation: _animationWithDelay, + builder: (context, child) { + return Transform( + alignment: Alignment.center, + transform: Matrix4.identity() + ..rotateX(_animationWithDelay.value * math.pi), + child: _animationController.isAnimating + ? _animationWithDelay.value < 0.5 + ? _previousChild + : Transform.flip(flipY: true, child: widget.child) + : widget.child, + ); + }, + child: widget.child, + ); + } +} diff --git a/animations/step_05_b/lib/home_screen.dart b/animations/step_05_b/lib/home_screen.dart new file mode 100644 index 0000000000..6e41695236 --- /dev/null +++ b/animations/step_05_b/lib/home_screen.dart @@ -0,0 +1,50 @@ +import 'package:animations/animations.dart'; +import 'package:flutter/material.dart'; +import 'question_screen.dart'; + +class HomeScreen extends StatelessWidget { + const HomeScreen({super.key}); + + @override + Widget build(BuildContext context) { + return Scaffold( + body: Center( + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + Text( + '✏️', + style: Theme.of(context).textTheme.displayLarge, + ), + Text( + 'Flutter Quiz', + style: Theme.of(context).textTheme.displayLarge!.copyWith( + fontWeight: FontWeight.w700, + color: Theme.of(context).colorScheme.onPrimaryFixedVariant), + ), + ElevatedButton( + onPressed: () { + // Show the question screen to start the game + Navigator.push( + context, + PageRouteBuilder( + pageBuilder: (context, animation, secondaryAnimation) { + return const QuestionScreen(); + }, transitionsBuilder: + (context, animation, secondaryAnimation, child) { + return FadeThroughTransition( + animation: animation, + secondaryAnimation: secondaryAnimation, + child: child, + ); + }), + ); + }, + child: const Text('New Game'), + ), + ], + ), + ), + ); + } +} diff --git a/animations/step_05_b/lib/main.dart b/animations/step_05_b/lib/main.dart new file mode 100644 index 0000000000..9ad4855719 --- /dev/null +++ b/animations/step_05_b/lib/main.dart @@ -0,0 +1,33 @@ +import 'package:animations/animations.dart'; +import 'package:flutter/material.dart'; + +import 'home_screen.dart'; + +void main() { + runApp(MainApp()); +} + +class MainApp extends StatelessWidget { + const MainApp({super.key}); + + @override + Widget build(BuildContext context) { + return MaterialApp( + debugShowCheckedModeBanner: false, + theme: ThemeData( + colorScheme: ColorScheme.fromSeed(seedColor: Colors.blue), + useMaterial3: true, + pageTransitionsTheme: PageTransitionsTheme( + builders: { + TargetPlatform.android: PredictiveBackPageTransitionsBuilder(), + TargetPlatform.iOS: FadeThroughPageTransitionsBuilder(), + TargetPlatform.macOS: FadeThroughPageTransitionsBuilder(), + TargetPlatform.windows: FadeThroughPageTransitionsBuilder(), + TargetPlatform.linux: FadeThroughPageTransitionsBuilder(), + }, + ), + ), + home: HomeScreen(), + ); + } +} diff --git a/animations/step_05_b/lib/model.dart b/animations/step_05_b/lib/model.dart new file mode 100644 index 0000000000..0662327f52 --- /dev/null +++ b/animations/step_05_b/lib/model.dart @@ -0,0 +1,62 @@ +import 'dart:math' as math; + +class Question { + final String question; + final List possibleAnswers; + final int correctAnswer; + Question(this.question, this.possibleAnswers, this.correctAnswer); +} + +class QuestionBank { + final List _questions = _createQuestions(); + + bool get hasNextQuestion => _questions.isNotEmpty; + int get remainingQuestions => _questions.length; + + Question? getRandomQuestion() { + if (_questions.isEmpty) { + return null; + } + + var i = math.Random().nextInt(_questions.length); + var question = _questions[i]; + + _questions.removeAt(i); + return question; + } +} + +List _createQuestions() { + return [ + Question( + 'What class used to create custom explicit animations in Flutter?', + [ + 'AnimationController', + 'AnimatedWidget', + 'AnimatedBuilder', + 'Tween', + ], + 0, + ), + Question( + 'Which widget is used to rebuild its child whenever an animation changes?', + [ + 'AnimatedContainer', + 'AnimatedBuilder', + 'AnimatedSwitcher', + 'AnimatedOpacity', + ], + 1, + ), + Question( + 'What class is used to define the start and end values for an animation?', + [ + 'Tween', + 'Curve', + 'AnimationController', + 'AnimatedWidget', + ], + 0, + ), + ]; +} diff --git a/animations/step_05_b/lib/question_screen.dart b/animations/step_05_b/lib/question_screen.dart new file mode 100644 index 0000000000..36a4aeb4bf --- /dev/null +++ b/animations/step_05_b/lib/question_screen.dart @@ -0,0 +1,205 @@ +import 'package:flutter/material.dart'; +import 'flip_effect.dart'; +import 'scoreboard.dart'; +import 'view_model.dart'; + +class QuestionScreen extends StatefulWidget { + const QuestionScreen({super.key}); + + @override + State createState() => _QuestionScreenState(); +} + +class _QuestionScreenState extends State { + late final QuizViewModel viewModel = + QuizViewModel(onGameOver: _handleGameOver); + + @override + Widget build(BuildContext context) { + return ListenableBuilder( + listenable: viewModel, + builder: (context, child) { + return Scaffold( + appBar: AppBar( + actions: [ + TextButton( + onPressed: + viewModel.hasNextQuestion && viewModel.didAnswerQuestion + ? () { + viewModel.getNextQuestion(); + } + : null, + child: const Text('Next'), + ) + ], + ), + body: Center( + child: Column( + children: [ + QuestionCard(question: viewModel.currentQuestion?.question), + Spacer(), + AnswerCards( + onTapped: (index) { + viewModel.checkAnswer(index); + }, + answers: viewModel.currentQuestion?.possibleAnswers ?? [], + correctAnswer: viewModel.didAnswerQuestion + ? viewModel.currentQuestion?.correctAnswer + : null, + ), + StatusBar(viewModel: viewModel), + ], + ), + ), + ); + }, + ); + } + + void _handleGameOver() { + showDialog( + barrierDismissible: false, + context: context, + builder: (context) { + return AlertDialog( + title: Text('Game Over!'), + content: Text('Score: ${viewModel.score}'), + actions: [ + TextButton( + onPressed: () { + Navigator.popUntil(context, (route) => route.isFirst); + }, + child: Text('OK'), + ), + ], + ); + }, + ); + } +} + +class QuestionCard extends StatelessWidget { + final String? question; + + const QuestionCard({ + required this.question, + super.key, + }); + + @override + Widget build(BuildContext context) { + return AnimatedSwitcher( + layoutBuilder: (Widget? currentChild, List previousChildren) { + return Stack( + alignment: Alignment.topCenter, + children: [ + ...previousChildren, + if (currentChild != null) currentChild, + ], + ); + }, + transitionBuilder: (Widget child, Animation animation) { + final curveAnimation = + CurveTween(curve: Curves.easeInCubic).animate(animation); + final offsetAnimation = + Tween(begin: Offset(-0.1, 0.0), end: Offset.zero) + .animate(curveAnimation); + final fadeInAnimation = curveAnimation; + return FadeTransition( + opacity: fadeInAnimation, + child: SlideTransition(position: offsetAnimation, child: child), + ); + }, + duration: const Duration(milliseconds: 300), + child: Card( + key: ValueKey(question), + elevation: 4, + child: Padding( + padding: const EdgeInsets.all(16.0), + child: Text( + question ?? "", + style: Theme.of(context).textTheme.displaySmall, + ), + ), + ), + ); + } +} + +class AnswerCards extends StatelessWidget { + final List answers; + final ValueChanged onTapped; + final int? correctAnswer; + + const AnswerCards({ + required this.answers, + required this.onTapped, + required this.correctAnswer, + super.key, + }); + + @override + Widget build(BuildContext context) { + return GridView.count( + shrinkWrap: true, + crossAxisCount: 2, + childAspectRatio: 5 / 2, + children: List.generate(answers.length, (index) { + var color = Theme.of(context).colorScheme.primaryContainer; + if (correctAnswer == index) { + color = Theme.of(context).colorScheme.tertiaryContainer; + } + + return CardFlipEffect( + delayAmount: index.toDouble() / 2, + duration: const Duration(milliseconds: 300), + child: Card.filled( + key: ValueKey(answers[index]), + color: color, + elevation: 2, + margin: const EdgeInsets.all(8), + clipBehavior: Clip.hardEdge, + child: InkWell( + onTap: () => onTapped(index), + child: Padding( + padding: const EdgeInsets.all(16.0), + child: Center( + child: Text( + answers.length > index ? answers[index] : "", + style: Theme.of(context).textTheme.titleMedium, + overflow: TextOverflow.clip, + ), + ), + ), + ), + ), + ); + }), + ); + } +} + +class StatusBar extends StatelessWidget { + final QuizViewModel viewModel; + + const StatusBar({required this.viewModel, super.key}); + + @override + Widget build(BuildContext context) { + return Card( + elevation: 4, + child: Padding( + padding: EdgeInsets.all(8.0), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceAround, + children: [ + Scoreboard( + score: viewModel.score, + totalQuestions: viewModel.totalQuestions, + ), + ], + ), + ), + ); + } +} diff --git a/animations/step_05_b/lib/scoreboard.dart b/animations/step_05_b/lib/scoreboard.dart new file mode 100644 index 0000000000..dd71080ba3 --- /dev/null +++ b/animations/step_05_b/lib/scoreboard.dart @@ -0,0 +1,62 @@ +import 'package:flutter/material.dart'; + +class Scoreboard extends StatelessWidget { + final int score; + final int totalQuestions; + + const Scoreboard({ + super.key, + required this.score, + required this.totalQuestions, + }); + + @override + Widget build(BuildContext context) { + return Padding( + padding: const EdgeInsets.all(8.0), + child: Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + for (var i = 0; i < totalQuestions; i++) + AnimatedStar( + isActive: score > i, + ) + ], + ), + ); + } +} + +class AnimatedStar extends StatelessWidget { + final bool isActive; + final Duration _duration = const Duration(milliseconds: 1000); + final Color _deactivatedColor = Colors.grey.shade400; + final Color _activatedColor = Colors.yellow.shade700; + final Curve _curve = Curves.elasticOut; + + AnimatedStar({super.key, required this.isActive}); + + @override + Widget build(BuildContext context) { + return AnimatedScale( + scale: isActive ? 1.0 : 0.5, + curve: _curve, + duration: _duration, + child: TweenAnimationBuilder( + curve: _curve, + duration: _duration, + tween: ColorTween( + begin: _deactivatedColor, + end: isActive ? _activatedColor : _deactivatedColor, + ), + builder: (context, value, child) { + return Icon( + Icons.star, + size: 50, + color: value, + ); + }, + ), + ); + } +} diff --git a/animations/step_05_b/lib/view_model.dart b/animations/step_05_b/lib/view_model.dart new file mode 100644 index 0000000000..84fc5f218b --- /dev/null +++ b/animations/step_05_b/lib/view_model.dart @@ -0,0 +1,43 @@ +import 'package:flutter/cupertino.dart'; +import 'model.dart'; + +class QuizViewModel extends ChangeNotifier { + final QuestionBank _questionBank = QuestionBank(); + final VoidCallback onGameOver; + late final int totalQuestions; + Question? currentQuestion; + int answeredQuestionCount = 0; + int score = 0; + bool didAnswerQuestion = false; + bool get hasNextQuestion => answeredQuestionCount < totalQuestions; + + QuizViewModel({required this.onGameOver}) { + totalQuestions = _questionBank.remainingQuestions; + getNextQuestion(); + } + + void getNextQuestion() { + if (_questionBank.hasNextQuestion) { + currentQuestion = _questionBank.getRandomQuestion(); + answeredQuestionCount++; + } + + didAnswerQuestion = false; + + notifyListeners(); + } + + void checkAnswer(int selectedIndex) { + if (!didAnswerQuestion && currentQuestion?.correctAnswer == selectedIndex) { + score++; + } + + didAnswerQuestion = true; + + if (!_questionBank.hasNextQuestion) { + onGameOver(); + } + + notifyListeners(); + } +} diff --git a/animations/step_05_b/linux/.gitignore b/animations/step_05_b/linux/.gitignore new file mode 100644 index 0000000000..d3896c9844 --- /dev/null +++ b/animations/step_05_b/linux/.gitignore @@ -0,0 +1 @@ +flutter/ephemeral diff --git a/animations/step_05_b/linux/CMakeLists.txt b/animations/step_05_b/linux/CMakeLists.txt new file mode 100644 index 0000000000..658be85ac5 --- /dev/null +++ b/animations/step_05_b/linux/CMakeLists.txt @@ -0,0 +1,145 @@ +# Project-level configuration. +cmake_minimum_required(VERSION 3.10) +project(runner LANGUAGES CXX) + +# The name of the executable created for the application. Change this to change +# the on-disk name of your application. +set(BINARY_NAME "quiz") +# The unique GTK application identifier for this application. See: +# https://wiki.gnome.org/HowDoI/ChooseApplicationID +set(APPLICATION_ID "com.example.quiz") + +# Explicitly opt in to modern CMake behaviors to avoid warnings with recent +# versions of CMake. +cmake_policy(SET CMP0063 NEW) + +# Load bundled libraries from the lib/ directory relative to the binary. +set(CMAKE_INSTALL_RPATH "$ORIGIN/lib") + +# Root filesystem for cross-building. +if(FLUTTER_TARGET_PLATFORM_SYSROOT) + set(CMAKE_SYSROOT ${FLUTTER_TARGET_PLATFORM_SYSROOT}) + set(CMAKE_FIND_ROOT_PATH ${CMAKE_SYSROOT}) + set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) + set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY) + set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) + set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) +endif() + +# Define build configuration options. +if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) + set(CMAKE_BUILD_TYPE "Debug" CACHE + STRING "Flutter build mode" FORCE) + set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS + "Debug" "Profile" "Release") +endif() + +# Compilation settings that should be applied to most targets. +# +# Be cautious about adding new options here, as plugins use this function by +# default. In most cases, you should add new options to specific targets instead +# of modifying this function. +function(APPLY_STANDARD_SETTINGS TARGET) + target_compile_features(${TARGET} PUBLIC cxx_std_14) + target_compile_options(${TARGET} PRIVATE -Wall -Werror) + target_compile_options(${TARGET} PRIVATE "$<$>:-O3>") + target_compile_definitions(${TARGET} PRIVATE "$<$>:NDEBUG>") +endfunction() + +# Flutter library and tool build rules. +set(FLUTTER_MANAGED_DIR "${CMAKE_CURRENT_SOURCE_DIR}/flutter") +add_subdirectory(${FLUTTER_MANAGED_DIR}) + +# System-level dependencies. +find_package(PkgConfig REQUIRED) +pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) + +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Define the application target. To change its name, change BINARY_NAME above, +# not the value here, or `flutter run` will no longer work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +# Run the Flutter tool portions of the build. This must not be removed. +add_dependencies(${BINARY_NAME} flutter_assemble) + +# Only the install-generated bundle's copy of the executable will launch +# correctly, since the resources must in the right relative locations. To avoid +# people trying to run the unbundled copy, put it in a subdirectory instead of +# the default top-level location. +set_target_properties(${BINARY_NAME} + PROPERTIES + RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/intermediates_do_not_run" +) + + +# Generated plugin build rules, which manage building the plugins and adding +# them to the application. +include(flutter/generated_plugins.cmake) + + +# === Installation === +# By default, "installing" just makes a relocatable bundle in the build +# directory. +set(BUILD_BUNDLE_DIR "${PROJECT_BINARY_DIR}/bundle") +if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) + set(CMAKE_INSTALL_PREFIX "${BUILD_BUNDLE_DIR}" CACHE PATH "..." FORCE) +endif() + +# Start with a clean build bundle directory every time. +install(CODE " + file(REMOVE_RECURSE \"${BUILD_BUNDLE_DIR}/\") + " COMPONENT Runtime) + +set(INSTALL_BUNDLE_DATA_DIR "${CMAKE_INSTALL_PREFIX}/data") +set(INSTALL_BUNDLE_LIB_DIR "${CMAKE_INSTALL_PREFIX}/lib") + +install(TARGETS ${BINARY_NAME} RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_ICU_DATA_FILE}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) + +foreach(bundled_library ${PLUGIN_BUNDLED_LIBRARIES}) + install(FILES "${bundled_library}" + DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) +endforeach(bundled_library) + +# Copy the native assets provided by the build.dart from all packages. +set(NATIVE_ASSETS_DIR "${PROJECT_BUILD_DIR}native_assets/linux/") +install(DIRECTORY "${NATIVE_ASSETS_DIR}" + DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) + +# Fully re-copy the assets directory on each build to avoid having stale files +# from a previous install. +set(FLUTTER_ASSET_DIR_NAME "flutter_assets") +install(CODE " + file(REMOVE_RECURSE \"${INSTALL_BUNDLE_DATA_DIR}/${FLUTTER_ASSET_DIR_NAME}\") + " COMPONENT Runtime) +install(DIRECTORY "${PROJECT_BUILD_DIR}/${FLUTTER_ASSET_DIR_NAME}" + DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" COMPONENT Runtime) + +# Install the AOT library on non-Debug builds only. +if(NOT CMAKE_BUILD_TYPE MATCHES "Debug") + install(FILES "${AOT_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) +endif() diff --git a/animations/step_05_b/linux/flutter/CMakeLists.txt b/animations/step_05_b/linux/flutter/CMakeLists.txt new file mode 100644 index 0000000000..d5bd01648a --- /dev/null +++ b/animations/step_05_b/linux/flutter/CMakeLists.txt @@ -0,0 +1,88 @@ +# This file controls Flutter-level build steps. It should not be edited. +cmake_minimum_required(VERSION 3.10) + +set(EPHEMERAL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/ephemeral") + +# Configuration provided via flutter tool. +include(${EPHEMERAL_DIR}/generated_config.cmake) + +# TODO: Move the rest of this into files in ephemeral. See +# https://github.com/flutter/flutter/issues/57146. + +# Serves the same purpose as list(TRANSFORM ... PREPEND ...), +# which isn't available in 3.10. +function(list_prepend LIST_NAME PREFIX) + set(NEW_LIST "") + foreach(element ${${LIST_NAME}}) + list(APPEND NEW_LIST "${PREFIX}${element}") + endforeach(element) + set(${LIST_NAME} "${NEW_LIST}" PARENT_SCOPE) +endfunction() + +# === Flutter Library === +# System-level dependencies. +find_package(PkgConfig REQUIRED) +pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) +pkg_check_modules(GLIB REQUIRED IMPORTED_TARGET glib-2.0) +pkg_check_modules(GIO REQUIRED IMPORTED_TARGET gio-2.0) + +set(FLUTTER_LIBRARY "${EPHEMERAL_DIR}/libflutter_linux_gtk.so") + +# Published to parent scope for install step. +set(FLUTTER_LIBRARY ${FLUTTER_LIBRARY} PARENT_SCOPE) +set(FLUTTER_ICU_DATA_FILE "${EPHEMERAL_DIR}/icudtl.dat" PARENT_SCOPE) +set(PROJECT_BUILD_DIR "${PROJECT_DIR}/build/" PARENT_SCOPE) +set(AOT_LIBRARY "${PROJECT_DIR}/build/lib/libapp.so" PARENT_SCOPE) + +list(APPEND FLUTTER_LIBRARY_HEADERS + "fl_basic_message_channel.h" + "fl_binary_codec.h" + "fl_binary_messenger.h" + "fl_dart_project.h" + "fl_engine.h" + "fl_json_message_codec.h" + "fl_json_method_codec.h" + "fl_message_codec.h" + "fl_method_call.h" + "fl_method_channel.h" + "fl_method_codec.h" + "fl_method_response.h" + "fl_plugin_registrar.h" + "fl_plugin_registry.h" + "fl_standard_message_codec.h" + "fl_standard_method_codec.h" + "fl_string_codec.h" + "fl_value.h" + "fl_view.h" + "flutter_linux.h" +) +list_prepend(FLUTTER_LIBRARY_HEADERS "${EPHEMERAL_DIR}/flutter_linux/") +add_library(flutter INTERFACE) +target_include_directories(flutter INTERFACE + "${EPHEMERAL_DIR}" +) +target_link_libraries(flutter INTERFACE "${FLUTTER_LIBRARY}") +target_link_libraries(flutter INTERFACE + PkgConfig::GTK + PkgConfig::GLIB + PkgConfig::GIO +) +add_dependencies(flutter flutter_assemble) + +# === Flutter tool backend === +# _phony_ is a non-existent file to force this command to run every time, +# since currently there's no way to get a full input/output list from the +# flutter tool. +add_custom_command( + OUTPUT ${FLUTTER_LIBRARY} ${FLUTTER_LIBRARY_HEADERS} + ${CMAKE_CURRENT_BINARY_DIR}/_phony_ + COMMAND ${CMAKE_COMMAND} -E env + ${FLUTTER_TOOL_ENVIRONMENT} + "${FLUTTER_ROOT}/packages/flutter_tools/bin/tool_backend.sh" + ${FLUTTER_TARGET_PLATFORM} ${CMAKE_BUILD_TYPE} + VERBATIM +) +add_custom_target(flutter_assemble DEPENDS + "${FLUTTER_LIBRARY}" + ${FLUTTER_LIBRARY_HEADERS} +) diff --git a/animations/step_05_b/linux/flutter/generated_plugin_registrant.cc b/animations/step_05_b/linux/flutter/generated_plugin_registrant.cc new file mode 100644 index 0000000000..e71a16d23d --- /dev/null +++ b/animations/step_05_b/linux/flutter/generated_plugin_registrant.cc @@ -0,0 +1,11 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#include "generated_plugin_registrant.h" + + +void fl_register_plugins(FlPluginRegistry* registry) { +} diff --git a/animations/step_05_b/linux/flutter/generated_plugin_registrant.h b/animations/step_05_b/linux/flutter/generated_plugin_registrant.h new file mode 100644 index 0000000000..e0f0a47bc0 --- /dev/null +++ b/animations/step_05_b/linux/flutter/generated_plugin_registrant.h @@ -0,0 +1,15 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#ifndef GENERATED_PLUGIN_REGISTRANT_ +#define GENERATED_PLUGIN_REGISTRANT_ + +#include + +// Registers Flutter plugins. +void fl_register_plugins(FlPluginRegistry* registry); + +#endif // GENERATED_PLUGIN_REGISTRANT_ diff --git a/animations/step_05_b/linux/flutter/generated_plugins.cmake b/animations/step_05_b/linux/flutter/generated_plugins.cmake new file mode 100644 index 0000000000..2e1de87a7e --- /dev/null +++ b/animations/step_05_b/linux/flutter/generated_plugins.cmake @@ -0,0 +1,23 @@ +# +# Generated file, do not edit. +# + +list(APPEND FLUTTER_PLUGIN_LIST +) + +list(APPEND FLUTTER_FFI_PLUGIN_LIST +) + +set(PLUGIN_BUNDLED_LIBRARIES) + +foreach(plugin ${FLUTTER_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${plugin}/linux plugins/${plugin}) + target_link_libraries(${BINARY_NAME} PRIVATE ${plugin}_plugin) + list(APPEND PLUGIN_BUNDLED_LIBRARIES $) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${plugin}_bundled_libraries}) +endforeach(plugin) + +foreach(ffi_plugin ${FLUTTER_FFI_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${ffi_plugin}/linux plugins/${ffi_plugin}) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${ffi_plugin}_bundled_libraries}) +endforeach(ffi_plugin) diff --git a/animations/step_05_b/linux/main.cc b/animations/step_05_b/linux/main.cc new file mode 100644 index 0000000000..e7c5c54370 --- /dev/null +++ b/animations/step_05_b/linux/main.cc @@ -0,0 +1,6 @@ +#include "my_application.h" + +int main(int argc, char** argv) { + g_autoptr(MyApplication) app = my_application_new(); + return g_application_run(G_APPLICATION(app), argc, argv); +} diff --git a/animations/step_05_b/linux/my_application.cc b/animations/step_05_b/linux/my_application.cc new file mode 100644 index 0000000000..d6ea0e3c5f --- /dev/null +++ b/animations/step_05_b/linux/my_application.cc @@ -0,0 +1,124 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "quiz"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "quiz"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/animations/step_05_b/linux/my_application.h b/animations/step_05_b/linux/my_application.h new file mode 100644 index 0000000000..72271d5e41 --- /dev/null +++ b/animations/step_05_b/linux/my_application.h @@ -0,0 +1,18 @@ +#ifndef FLUTTER_MY_APPLICATION_H_ +#define FLUTTER_MY_APPLICATION_H_ + +#include + +G_DECLARE_FINAL_TYPE(MyApplication, my_application, MY, APPLICATION, + GtkApplication) + +/** + * my_application_new: + * + * Creates a new Flutter-based application. + * + * Returns: a new #MyApplication. + */ +MyApplication* my_application_new(); + +#endif // FLUTTER_MY_APPLICATION_H_ diff --git a/animations/step_05_b/macos/.gitignore b/animations/step_05_b/macos/.gitignore new file mode 100644 index 0000000000..746adbb6b9 --- /dev/null +++ b/animations/step_05_b/macos/.gitignore @@ -0,0 +1,7 @@ +# Flutter-related +**/Flutter/ephemeral/ +**/Pods/ + +# Xcode-related +**/dgph +**/xcuserdata/ diff --git a/animations/step_05_b/macos/Flutter/Flutter-Debug.xcconfig b/animations/step_05_b/macos/Flutter/Flutter-Debug.xcconfig new file mode 100644 index 0000000000..c2efd0b608 --- /dev/null +++ b/animations/step_05_b/macos/Flutter/Flutter-Debug.xcconfig @@ -0,0 +1 @@ +#include "ephemeral/Flutter-Generated.xcconfig" diff --git a/animations/step_05_b/macos/Flutter/Flutter-Release.xcconfig b/animations/step_05_b/macos/Flutter/Flutter-Release.xcconfig new file mode 100644 index 0000000000..c2efd0b608 --- /dev/null +++ b/animations/step_05_b/macos/Flutter/Flutter-Release.xcconfig @@ -0,0 +1 @@ +#include "ephemeral/Flutter-Generated.xcconfig" diff --git a/animations/step_05_b/macos/Flutter/GeneratedPluginRegistrant.swift b/animations/step_05_b/macos/Flutter/GeneratedPluginRegistrant.swift new file mode 100644 index 0000000000..cccf817a52 --- /dev/null +++ b/animations/step_05_b/macos/Flutter/GeneratedPluginRegistrant.swift @@ -0,0 +1,10 @@ +// +// Generated file. Do not edit. +// + +import FlutterMacOS +import Foundation + + +func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { +} diff --git a/animations/step_05_b/macos/Runner.xcodeproj/project.pbxproj b/animations/step_05_b/macos/Runner.xcodeproj/project.pbxproj new file mode 100644 index 0000000000..45c35dfed5 --- /dev/null +++ b/animations/step_05_b/macos/Runner.xcodeproj/project.pbxproj @@ -0,0 +1,705 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 54; + objects = { + +/* Begin PBXAggregateTarget section */ + 33CC111A2044C6BA0003C045 /* Flutter Assemble */ = { + isa = PBXAggregateTarget; + buildConfigurationList = 33CC111B2044C6BA0003C045 /* Build configuration list for PBXAggregateTarget "Flutter Assemble" */; + buildPhases = ( + 33CC111E2044C6BF0003C045 /* ShellScript */, + ); + dependencies = ( + ); + name = "Flutter Assemble"; + productName = FLX; + }; +/* End PBXAggregateTarget section */ + +/* Begin PBXBuildFile section */ + 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; + 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; + 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; + 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; + 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; + 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 331C80D9294CF71000263BE5 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 33CC10E52044A3C60003C045 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 33CC10EC2044A3C60003C045; + remoteInfo = Runner; + }; + 33CC111F2044C79F0003C045 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 33CC10E52044A3C60003C045 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 33CC111A2044C6BA0003C045; + remoteInfo = FLX; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 33CC110E2044A8840003C045 /* Bundle Framework */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + ); + name = "Bundle Framework"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; + 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; + 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; }; + 33CC10ED2044A3C60003C045 /* quiz.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "quiz.app"; sourceTree = BUILT_PRODUCTS_DIR; }; + 33CC10F02044A3C60003C045 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 33CC10F22044A3C60003C045 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = Runner/Assets.xcassets; sourceTree = ""; }; + 33CC10F52044A3C60003C045 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = ""; }; + 33CC10F72044A3C60003C045 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = Info.plist; path = Runner/Info.plist; sourceTree = ""; }; + 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainFlutterWindow.swift; sourceTree = ""; }; + 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Debug.xcconfig"; sourceTree = ""; }; + 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Release.xcconfig"; sourceTree = ""; }; + 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = "Flutter-Generated.xcconfig"; path = "ephemeral/Flutter-Generated.xcconfig"; sourceTree = ""; }; + 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; + 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; + 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; + 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 331C80D2294CF70F00263BE5 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 33CC10EA2044A3C60003C045 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 331C80D6294CF71000263BE5 /* RunnerTests */ = { + isa = PBXGroup; + children = ( + 331C80D7294CF71000263BE5 /* RunnerTests.swift */, + ); + path = RunnerTests; + sourceTree = ""; + }; + 33BA886A226E78AF003329D5 /* Configs */ = { + isa = PBXGroup; + children = ( + 33E5194F232828860026EE4D /* AppInfo.xcconfig */, + 9740EEB21CF90195004384FC /* Debug.xcconfig */, + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, + 333000ED22D3DE5D00554162 /* Warnings.xcconfig */, + ); + path = Configs; + sourceTree = ""; + }; + 33CC10E42044A3C60003C045 = { + isa = PBXGroup; + children = ( + 33FAB671232836740065AC1E /* Runner */, + 33CEB47122A05771004F2AC0 /* Flutter */, + 331C80D6294CF71000263BE5 /* RunnerTests */, + 33CC10EE2044A3C60003C045 /* Products */, + D73912EC22F37F3D000D13A0 /* Frameworks */, + ); + sourceTree = ""; + }; + 33CC10EE2044A3C60003C045 /* Products */ = { + isa = PBXGroup; + children = ( + 33CC10ED2044A3C60003C045 /* quiz.app */, + 331C80D5294CF71000263BE5 /* RunnerTests.xctest */, + ); + name = Products; + sourceTree = ""; + }; + 33CC11242044D66E0003C045 /* Resources */ = { + isa = PBXGroup; + children = ( + 33CC10F22044A3C60003C045 /* Assets.xcassets */, + 33CC10F42044A3C60003C045 /* MainMenu.xib */, + 33CC10F72044A3C60003C045 /* Info.plist */, + ); + name = Resources; + path = ..; + sourceTree = ""; + }; + 33CEB47122A05771004F2AC0 /* Flutter */ = { + isa = PBXGroup; + children = ( + 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */, + 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */, + 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */, + 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */, + ); + path = Flutter; + sourceTree = ""; + }; + 33FAB671232836740065AC1E /* Runner */ = { + isa = PBXGroup; + children = ( + 33CC10F02044A3C60003C045 /* AppDelegate.swift */, + 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */, + 33E51913231747F40026EE4D /* DebugProfile.entitlements */, + 33E51914231749380026EE4D /* Release.entitlements */, + 33CC11242044D66E0003C045 /* Resources */, + 33BA886A226E78AF003329D5 /* Configs */, + ); + path = Runner; + sourceTree = ""; + }; + D73912EC22F37F3D000D13A0 /* Frameworks */ = { + isa = PBXGroup; + children = ( + ); + name = Frameworks; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 331C80D4294CF70F00263BE5 /* RunnerTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; + buildPhases = ( + 331C80D1294CF70F00263BE5 /* Sources */, + 331C80D2294CF70F00263BE5 /* Frameworks */, + 331C80D3294CF70F00263BE5 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 331C80DA294CF71000263BE5 /* PBXTargetDependency */, + ); + name = RunnerTests; + productName = RunnerTests; + productReference = 331C80D5294CF71000263BE5 /* RunnerTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; + 33CC10EC2044A3C60003C045 /* Runner */ = { + isa = PBXNativeTarget; + buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; + buildPhases = ( + 33CC10E92044A3C60003C045 /* Sources */, + 33CC10EA2044A3C60003C045 /* Frameworks */, + 33CC10EB2044A3C60003C045 /* Resources */, + 33CC110E2044A8840003C045 /* Bundle Framework */, + 3399D490228B24CF009A79C7 /* ShellScript */, + ); + buildRules = ( + ); + dependencies = ( + 33CC11202044C79F0003C045 /* PBXTargetDependency */, + ); + name = Runner; + productName = Runner; + productReference = 33CC10ED2044A3C60003C045 /* quiz.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 33CC10E52044A3C60003C045 /* Project object */ = { + isa = PBXProject; + attributes = { + BuildIndependentTargetsInParallel = YES; + LastSwiftUpdateCheck = 0920; + LastUpgradeCheck = 1510; + ORGANIZATIONNAME = ""; + TargetAttributes = { + 331C80D4294CF70F00263BE5 = { + CreatedOnToolsVersion = 14.0; + TestTargetID = 33CC10EC2044A3C60003C045; + }; + 33CC10EC2044A3C60003C045 = { + CreatedOnToolsVersion = 9.2; + LastSwiftMigration = 1100; + ProvisioningStyle = Automatic; + SystemCapabilities = { + com.apple.Sandbox = { + enabled = 1; + }; + }; + }; + 33CC111A2044C6BA0003C045 = { + CreatedOnToolsVersion = 9.2; + ProvisioningStyle = Manual; + }; + }; + }; + buildConfigurationList = 33CC10E82044A3C60003C045 /* Build configuration list for PBXProject "Runner" */; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 33CC10E42044A3C60003C045; + productRefGroup = 33CC10EE2044A3C60003C045 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 33CC10EC2044A3C60003C045 /* Runner */, + 331C80D4294CF70F00263BE5 /* RunnerTests */, + 33CC111A2044C6BA0003C045 /* Flutter Assemble */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 331C80D3294CF70F00263BE5 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 33CC10EB2044A3C60003C045 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */, + 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 3399D490228B24CF009A79C7 /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; + }; + 33CC111E2044C6BF0003C045 /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + Flutter/ephemeral/FlutterInputs.xcfilelist, + ); + inputPaths = ( + Flutter/ephemeral/tripwire, + ); + outputFileListPaths = ( + Flutter/ephemeral/FlutterOutputs.xcfilelist, + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 331C80D1294CF70F00263BE5 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 33CC10E92044A3C60003C045 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */, + 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */, + 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 331C80DA294CF71000263BE5 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 33CC10EC2044A3C60003C045 /* Runner */; + targetProxy = 331C80D9294CF71000263BE5 /* PBXContainerItemProxy */; + }; + 33CC11202044C79F0003C045 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 33CC111A2044C6BA0003C045 /* Flutter Assemble */; + targetProxy = 33CC111F2044C79F0003C045 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + 33CC10F42044A3C60003C045 /* MainMenu.xib */ = { + isa = PBXVariantGroup; + children = ( + 33CC10F52044A3C60003C045 /* Base */, + ); + name = MainMenu.xib; + path = Runner; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 331C80DB294CF71000263BE5 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.quiz.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/quiz.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/quiz"; + }; + name = Debug; + }; + 331C80DC294CF71000263BE5 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.quiz.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/quiz.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/quiz"; + }; + name = Release; + }; + 331C80DD294CF71000263BE5 /* Profile */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.quiz.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/quiz.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/quiz"; + }; + name = Profile; + }; + 338D0CE9231458BD00FA5F75 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + DEAD_CODE_STRIPPING = YES; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.14; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = macosx; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + }; + name = Profile; + }; + 338D0CEA231458BD00FA5F75 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_VERSION = 5.0; + }; + name = Profile; + }; + 338D0CEB231458BD00FA5F75 /* Profile */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Manual; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Profile; + }; + 33CC10F92044A3C60003C045 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + DEAD_CODE_STRIPPING = YES; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.14; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = macosx; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + }; + name = Debug; + }; + 33CC10FA2044A3C60003C045 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + DEAD_CODE_STRIPPING = YES; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.14; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = macosx; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + }; + name = Release; + }; + 33CC10FC2044A3C60003C045 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + }; + name = Debug; + }; + 33CC10FD2044A3C60003C045 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/Release.entitlements; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_VERSION = 5.0; + }; + name = Release; + }; + 33CC111C2044C6BA0003C045 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Manual; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Debug; + }; + 33CC111D2044C6BA0003C045 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Automatic; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 331C80DB294CF71000263BE5 /* Debug */, + 331C80DC294CF71000263BE5 /* Release */, + 331C80DD294CF71000263BE5 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 33CC10E82044A3C60003C045 /* Build configuration list for PBXProject "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 33CC10F92044A3C60003C045 /* Debug */, + 33CC10FA2044A3C60003C045 /* Release */, + 338D0CE9231458BD00FA5F75 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 33CC10FC2044A3C60003C045 /* Debug */, + 33CC10FD2044A3C60003C045 /* Release */, + 338D0CEA231458BD00FA5F75 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 33CC111B2044C6BA0003C045 /* Build configuration list for PBXAggregateTarget "Flutter Assemble" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 33CC111C2044C6BA0003C045 /* Debug */, + 33CC111D2044C6BA0003C045 /* Release */, + 338D0CEB231458BD00FA5F75 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 33CC10E52044A3C60003C045 /* Project object */; +} diff --git a/animations/step_05_b/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/animations/step_05_b/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000000..18d981003d --- /dev/null +++ b/animations/step_05_b/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/animations/step_05_b/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/animations/step_05_b/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme new file mode 100644 index 0000000000..2f413cb17b --- /dev/null +++ b/animations/step_05_b/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -0,0 +1,98 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/animations/step_05_b/macos/Runner.xcworkspace/contents.xcworkspacedata b/animations/step_05_b/macos/Runner.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000000..1d526a16ed --- /dev/null +++ b/animations/step_05_b/macos/Runner.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/animations/step_05_b/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/animations/step_05_b/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000000..18d981003d --- /dev/null +++ b/animations/step_05_b/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/animations/step_05_b/macos/Runner/AppDelegate.swift b/animations/step_05_b/macos/Runner/AppDelegate.swift new file mode 100644 index 0000000000..8e02df2888 --- /dev/null +++ b/animations/step_05_b/macos/Runner/AppDelegate.swift @@ -0,0 +1,9 @@ +import Cocoa +import FlutterMacOS + +@main +class AppDelegate: FlutterAppDelegate { + override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { + return true + } +} diff --git a/animations/step_05_b/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/animations/step_05_b/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000000..a2ec33f19f --- /dev/null +++ b/animations/step_05_b/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,68 @@ +{ + "images" : [ + { + "size" : "16x16", + "idiom" : "mac", + "filename" : "app_icon_16.png", + "scale" : "1x" + }, + { + "size" : "16x16", + "idiom" : "mac", + "filename" : "app_icon_32.png", + "scale" : "2x" + }, + { + "size" : "32x32", + "idiom" : "mac", + "filename" : "app_icon_32.png", + "scale" : "1x" + }, + { + "size" : "32x32", + "idiom" : "mac", + "filename" : "app_icon_64.png", + "scale" : "2x" + }, + { + "size" : "128x128", + "idiom" : "mac", + "filename" : "app_icon_128.png", + "scale" : "1x" + }, + { + "size" : "128x128", + "idiom" : "mac", + "filename" : "app_icon_256.png", + "scale" : "2x" + }, + { + "size" : "256x256", + "idiom" : "mac", + "filename" : "app_icon_256.png", + "scale" : "1x" + }, + { + "size" : "256x256", + "idiom" : "mac", + "filename" : "app_icon_512.png", + "scale" : "2x" + }, + { + "size" : "512x512", + "idiom" : "mac", + "filename" : "app_icon_512.png", + "scale" : "1x" + }, + { + "size" : "512x512", + "idiom" : "mac", + "filename" : "app_icon_1024.png", + "scale" : "2x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} diff --git a/animations/step_05_b/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png b/animations/step_05_b/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png new file mode 100644 index 0000000000000000000000000000000000000000..82b6f9d9a33e198f5747104729e1fcef999772a5 GIT binary patch literal 102994 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ⅅ8MglG&ER{i5lN315cO?EdHNLrg? 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 z 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 Pe7HEdAEg|=c=LY&YVNkY literal 0 HcmV?d00001 diff --git a/animations/step_05_b/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png b/animations/step_05_b/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png new file mode 100644 index 0000000000000000000000000000000000000000..13b35eba55c6dabc3aac36f33d859266c18fa0d0 GIT binary patch literal 5680 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 literal 0 HcmV?d00001 diff --git a/animations/step_05_b/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png b/animations/step_05_b/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png new file mode 100644 index 0000000000000000000000000000000000000000..0a3f5fa40fb3d1e0710331a48de5d256da3f275d GIT binary patch literal 520 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|Tv8)E(|mmy zw18|52FCVG1{RPKAeI7R1_tH@j10^`nh_+nfC(-uuz(rC1}QWNE&K#jR^;j87-Auq zoUlN^K{r-Q+XN;zI ze|?*NFmgt#V#GwrSWaz^2G&@SBmck6ZcIFMww~vE<1E?M2#KUn1CzsB6D2+0SuRV@ zV2kK5HvIGB{HX-hQzs0*AB%5$9RJ@a;)Ahq#p$GSP91^&hi#6sg*;a~dt}4AclK>h z_3MoPRQ{i;==;*1S-mY<(JFzhAxMI&<61&m$J0NDHdJ3tYx~j0%M-uN6Zl8~_0DOkGXc0001@sz3l12C6Xg{AT~( zm6w64BA|AX`Ve)YY-glyudNN>MAfkXz-T7`_`fEolM;0T0BA)(02-OaW z0*cW7Z~ec94o8&g0D$N>b!COu{=m}^%oXZ4?T8ZyPZuGGBPBA7pbQMoV5HYhiT?%! zcae~`(QAN4&}-=#2f5fkn!SWGWmSeCISBcS=1-U|MEoKq=k?_x3apK>9((R zuu$9X?^8?@(a{qMS%J8SJPq))v}Q-ZyDm6Gbie0m92=`YlwnQPQP1kGSm(N2UJ3P6 z^{p-u)SSCTW~c1rw;cM)-uL2{->wCn2{#%;AtCQ!m%AakVs1K#v@(*-6QavyY&v&*wO_rCJXJuq$c$7ZjsW+pJo-$L^@!7X04CvaOpPyfw|FKvu;e(&Iw>Tbg zL}#8e^?X%TReXTt>gsBByt0kSU20oQx*~P=4`&tcZ7N6t-6LiK{LxX*p6}9c<0Pu^ zLx1w_P4P2V>bX=`F%v$#{sUDdF|;rbI{p#ZW`00Bgh(eB(nOIhy8W9T>3aQ=k8Z9% zB+TusFABF~J?N~fAd}1Rme=@4+1=M{^P`~se7}e3;mY0!%#MJf!XSrUC{0uZqMAd7%q zQY#$A>q}noIB4g54Ue)x>ofVm3DKBbUmS4Z-bm7KdKsUixva)1*&z5rgAG2gxG+_x zqT-KNY4g7eM!?>==;uD9Y4iI(Hu$pl8!LrK_Zb}5nv(XKW{9R144E!cFf36p{i|8pRL~p`_^iNo z{mf7y`#hejw#^#7oKPlN_Td{psNpNnM?{7{R-ICBtYxk>?3}OTH_8WkfaTLw)ZRTfxjW+0>gMe zpKg~`Bc$Y>^VX;ks^J0oKhB#6Ukt{oQhN+o2FKGZx}~j`cQB%vVsMFnm~R_1Y&Ml? zwFfb~d|dW~UktY@?zkau>Owe zRroi(<)c4Ux&wJfY=3I=vg)uh;sL(IYY9r$WK1$F;jYqq1>xT{LCkIMb3t2jN8d`9 z=4(v-z7vHucc_fjkpS}mGC{ND+J-hc_0Ix4kT^~{-2n|;Jmn|Xf9wGudDk7bi*?^+ z7fku8z*mbkGm&xf&lmu#=b5mp{X(AwtLTf!N`7FmOmX=4xwbD=fEo8CaB1d1=$|)+ z+Dlf^GzGOdlqTO8EwO?8;r+b;gkaF^$;+#~2_YYVH!hD6r;PaWdm#V=BJ1gH9ZK_9 zrAiIC-)z)hRq6i5+$JVmR!m4P>3yJ%lH)O&wtCyum3A*})*fHODD2nq!1@M>t@Za+ zH6{(Vf>_7!I-APmpsGLYpl7jww@s5hHOj5LCQXh)YAp+y{gG(0UMm(Ur z3o3n36oFwCkn+H*GZ-c6$Y!5r3z*@z0`NrB2C^q#LkOuooUM8Oek2KBk}o1PU8&2L z4iNkb5CqJWs58aR394iCU^ImDqV;q_Pp?pl=RB2372(Io^GA^+oKguO1(x$0<7w3z z)j{vnqEB679Rz4i4t;8|&Zg77UrklxY9@GDq(ZphH6=sW`;@uIt5B?7Oi?A0-BL}(#1&R;>2aFdq+E{jsvpNHjLx2t{@g1}c~DQcPNmVmy| zNMO@ewD^+T!|!DCOf}s9dLJU}(KZy@Jc&2Nq3^;vHTs}Hgcp`cw&gd7#N}nAFe3cM1TF%vKbKSffd&~FG9y$gLyr{#to)nxz5cCASEzQ}gz8O)phtHuKOW6p z@EQF(R>j%~P63Wfosrz8p(F=D|Mff~chUGn(<=CQbSiZ{t!e zeDU-pPsLgtc#d`3PYr$i*AaT!zF#23htIG&?QfcUk+@k$LZI}v+js|yuGmE!PvAV3 ztzh90rK-0L6P}s?1QH`Ot@ilbgMBzWIs zIs6K<_NL$O4lwR%zH4oJ+}JJp-bL6~%k&p)NGDMNZX7)0kni&%^sH|T?A)`z z=adV?!qnWx^B$|LD3BaA(G=ePL1+}8iu^SnnD;VE1@VLHMVdSN9$d)R(Wk{JEOp(P zm3LtAL$b^*JsQ0W&eLaoYag~=fRRdI>#FaELCO7L>zXe6w*nxN$Iy*Q*ftHUX0+N- zU>{D_;RRVPbQ?U+$^%{lhOMKyE5>$?U1aEPist+r)b47_LehJGTu>TcgZe&J{ z{q&D{^Ps~z7|zj~rpoh2I_{gAYNoCIJmio3B}$!5vTF*h$Q*vFj~qbo%bJCCRy509 zHTdDh_HYH8Zb9`}D5;;J9fkWOQi%Y$B1!b9+ESj+B@dtAztlY2O3NE<6HFiqOF&p_ zW-K`KiY@RPSY-p9Q99}Hcd05DT79_pfb{BV7r~?9pWh=;mcKBLTen%THFPo2NN~Nf zriOtFnqx}rtO|A6k!r6 zf-z?y-UD{dT0kT9FJ`-oWuPHbo+3wBS(}?2ql(+e@VTExmfnB*liCb zmeI+v5*+W_L;&kQN^ChW{jE0Mw#0Tfs}`9bk3&7UjxP^Ke(%eJu2{VnW?tu7Iqecm zB5|=-QdzK$=h50~{X3*w4%o1FS_u(dG2s&427$lJ?6bkLet}yYXCy)u_Io1&g^c#( z-$yYmSpxz{>BL;~c+~sxJIe1$7eZI_9t`eB^Pr0)5CuA}w;;7#RvPq|H6!byRzIJG ziQ7a4y_vhj(AL`8PhIm9edCv|%TX#f50lt8+&V+D4<}IA@S@#f4xId80oH$!_!q?@ zFRGGg2mTv&@76P7aTI{)Hu%>3QS_d)pQ%g8BYi58K~m-Ov^7r8BhX7YC1D3vwz&N8{?H*_U7DI?CI)+et?q|eGu>42NJ?K4SY zD?kc>h@%4IqNYuQ8m10+8xr2HYg2qFNdJl=Tmp&ybF>1>pqVfa%SsV*BY$d6<@iJA ziyvKnZ(~F9xQNokBgMci#pnZ}Igh0@S~cYcU_2Jfuf|d3tuH?ZSSYBfM(Y3-JBsC|S9c;# zyIMkPxgrq};0T09pjj#X?W^TFCMf1-9P{)g88;NDI+S4DXe>7d3Mb~i-h&S|Jy{J< zq3736$bH?@{!amD!1Ys-X)9V=#Z={fzsjVYMX5BG6%}tkzwC#1nQLj1y1f#}8**4Y zAvDZHw8)N)8~oWC88CgzbwOrL9HFbk4}h85^ptuu7A+uc#$f^9`EWv1Vr{5+@~@Uv z#B<;-nt;)!k|fRIg;2DZ(A2M2aC65kOIov|?Mhi1Sl7YOU4c$T(DoRQIGY`ycfkn% zViHzL;E*A{`&L?GP06Foa38+QNGA zw3+Wqs(@q+H{XLJbwZzE(omw%9~LPZfYB|NF5%j%E5kr_xE0u;i?IOIchn~VjeDZ) zAqsqhP0vu2&Tbz3IgJvMpKbThC-@=nk)!|?MIPP>MggZg{cUcKsP8|N#cG5 zUXMXxcXBF9`p>09IR?x$Ry3;q@x*%}G#lnB1}r#!WL88I@uvm}X98cZ8KO&cqT1p> z+gT=IxPsq%n4GWgh-Bk8E4!~`r@t>DaQKsjDqYc&h$p~TCh8_Mck5UB84u6Jl@kUZCU9BA-S!*bf>ZotFX9?a_^y%)yH~rsAz0M5#^Di80_tgoKw(egN z`)#(MqAI&A84J#Z<|4`Co8`iY+Cv&iboMJ^f9ROUK0Lm$;-T*c;TCTED_0|qfhlcS zv;BD*$Zko#nWPL}2K8T-?4}p{u)4xon!v_(yVW8VMpxg4Kh^J6WM{IlD{s?%XRT8P|yCU`R&6gwB~ zg}{At!iWCzOH37!ytcPeC`(({ovP7M5Y@bYYMZ}P2Z3=Y_hT)4DRk}wfeIo%q*M9UvXYJq!-@Ly79m5aLD{hf@BzQB>FdQ4mw z6$@vzSKF^Gnzc9vbccii)==~9H#KW<6)Uy1wb~auBn6s`ct!ZEos`WK8e2%<00b%# zY9Nvnmj@V^K(a_38dw-S*;G-(i(ETuIwyirs?$FFW@|66a38k+a%GLmucL%Wc8qk3 z?h_4!?4Y-xt)ry)>J`SuY**fuq2>u+)VZ+_1Egzctb*xJ6+7q`K$^f~r|!i?(07CD zH!)C_uerf-AHNa?6Y61D_MjGu*|wcO+ZMOo4q2bWpvjEWK9yASk%)QhwZS%N2_F4& z16D18>e%Q1mZb`R;vW{+IUoKE`y3(7p zplg5cBB)dtf^SdLd4n60oWie|(ZjgZa6L*VKq02Aij+?Qfr#1z#fwh92aV-HGd^_w zsucG24j8b|pk>BO7k8dS86>f-jBP^Sa}SF{YNn=^NU9mLOdKcAstv&GV>r zLxKHPkFxpvE8^r@MSF6UA}cG`#yFL8;kA7ccH9D=BGBtW2;H>C`FjnF^P}(G{wU;G z!LXLCbPfsGeLCQ{Ep$^~)@?v`q(uI`CxBY44osPcq@(rR-633!qa zsyb>?v%@X+e|Mg`+kRL*(;X>^BNZz{_kw5+K;w?#pReiw7eU8_Z^hhJ&fj80XQkuU z39?-z)6Fy$I`bEiMheS(iB6uLmiMd1i)cbK*9iPpl+h4x9ch7x- z1h4H;W_G?|)i`z??KNJVwgfuAM=7&Apd3vm#AT8uzQZ!NII}}@!j)eIfn53h{NmN7 zAKG6SnKP%^k&R~m5#@_4B@V?hYyHkm>0SQ@PPiw*@Tp@UhP-?w@jW?nxXuCipMW=L zH*5l*d@+jXm0tIMP_ec6Jcy6$w(gKK@xBX8@%oPaSyG;13qkFb*LuVx3{AgIyy&n3 z@R2_DcEn|75_?-v5_o~%xEt~ONB>M~tpL!nOVBLPN&e5bn5>+7o0?Nm|EGJ5 zmUbF{u|Qn?cu5}n4@9}g(G1JxtzkKv(tqwm_?1`?YSVA2IS4WI+*(2D*wh&6MIEhw z+B+2U<&E&|YA=3>?^i6)@n1&&;WGHF-pqi_sN&^C9xoxME5UgorQ_hh1__zzR#zVC zOQt4q6>ME^iPJ37*(kg4^=EFqyKH@6HEHXy79oLj{vFqZGY?sVjk!BX^h$SFJlJnv z5uw~2jLpA)|0=tp>qG*tuLru?-u`khGG2)o{+iDx&nC}eWj3^zx|T`xn5SuR;Aw8U z`p&>dJw`F17@J8YAuW4=;leBE%qagVTG5SZdh&d)(#ZhowZ|cvWvGMMrfVsbg>_~! z19fRz8CSJdrD|Rl)w!uznBF&2-dg{>y4l+6(L(vzbLA0Bk&`=;oQQ>(M8G=3kto_) zP8HD*n4?MySO2YrG6fwSrVmnesW+D&fxjfEmp=tPd?RKLZJcH&K(-S+x)2~QZ$c(> zru?MND7_HPZJVF%wX(49H)+~!7*!I8w72v&{b={#l9yz+S_aVPc_So%iF8>$XD1q1 zFtucO=rBj0Ctmi0{njN8l@}!LX}@dwl>3yMxZ;7 z0Ff2oh8L)YuaAGOuZ5`-p%Z4H@H$;_XRJQ|&(MhO78E|nyFa158gAxG^SP(vGi^+< zChY}o(_=ci3Wta#|K6MVljNe0T$%Q5ylx-v`R)r8;3+VUpp-)7T`-Y&{Zk z*)1*2MW+_eOJtF5tCMDV`}jg-R(_IzeE9|MBKl;a7&(pCLz}5<Zf+)T7bgNUQ_!gZtMlw=8doE}#W+`Xp~1DlE=d5SPT?ymu!r4z%&#A-@x^=QfvDkfx5-jz+h zoZ1OK)2|}_+UI)i9%8sJ9X<7AA?g&_Wd7g#rttHZE;J*7!e5B^zdb%jBj&dUDg4&B zMMYrJ$Z%t!5z6=pMGuO-VF~2dwjoXY+kvR>`N7UYfIBMZGP|C7*O=tU z2Tg_xi#Q3S=1|=WRfZD;HT<1D?GMR%5kI^KWwGrC@P2@R>mDT^3qsmbBiJc21kip~ zZp<7;^w{R;JqZ)C4z-^wL=&dBYj9WJBh&rd^A^n@07qM$c+kGv^f+~mU5_*|eePF| z3wDo-qaoRjmIw<2DjMTG4$HP{z54_te_{W^gu8$r=q0JgowzgQPct2JNtWPUsjF8R zvit&V8$(;7a_m%%9TqPkCXYUp&k*MRcwr*24>hR! z$4c#E=PVE=P4MLTUBM z7#*RDe0}=B)(3cvNpOmWa*eH#2HR?NVqXdJ=hq);MGD07JIQQ7Y0#iD!$C+mk7x&B zMwkS@H%>|fmSu#+ zI!}Sb(%o29Vkp_Th>&&!k7O>Ba#Om~B_J{pT7BHHd8(Ede(l`7O#`_}19hr_?~JP9 z`q(`<)y>%)x;O7)#-wfCP{?llFMoH!)ZomgsOYFvZ1DxrlYhkWRw#E-#Qf*z@Y-EQ z1~?_=c@M4DO@8AzZ2hKvw8CgitzI9yFd&N1-{|vP#4IqYb*#S0e3hrjsEGlnc4xwk z4o!0rxpUt8j&`mJ8?+P8G{m^jbk)bo_UPM+ifW*y-A*et`#_Ja_3nYyRa9fAG1Xr5 z>#AM_@PY|*u)DGRWJihZvgEh#{*joJN28uN7;i5{kJ*Gb-TERfN{ERe_~$Es~NJCpdKLRvdj4658uYYx{ng7I<6j~w@p%F<7a(Ssib|j z51;=Py(Nu*#hnLx@w&8X%=jrADn3TW>kplnb zYbFIWWVQXN7%Cwn6KnR)kYePEBmvM45I)UJb$)ninpdYg3a5N6pm_7Q+9>!_^xy?k za8@tJ@OOs-pRAAfT>Nc2x=>sZUs2!9Dwa%TTmDggH4fq(x^MW>mcRyJINlAqK$YQCMgR8`>6=Sg$ zFnJZsA8xUBXIN3i70Q%8px@yQPMgVP=>xcPI38jNJK<=6hC={a07+n@R|$bnhB)X$ z(Zc%tadp70vBTnW{OUIjTMe38F}JIH$#A}PB&RosPyFZMD}q}5W%$rh>5#U;m`z2K zc(&WRxx7DQLM-+--^w*EWAIS%bi>h587qkwu|H=hma3T^bGD&Z!`u(RKLeNZ&pI=q$|HOcji(0P1QC!YkAp*u z3%S$kumxR}jU<@6`;*-9=5-&LYRA<~uFrwO3U0k*4|xUTp4ZY7;Zbjx|uw&BWU$zK(w55pWa~#=f$c zNDW0O68N!xCy>G}(CX=;8hJLxAKn@Aj(dbZxO8a$+L$jK8$N-h@4$i8)WqD_%Snh4 zR?{O%k}>lr>w$b$g=VP8mckcCrjnp>uQl5F_6dPM8FWRqs}h`DpfCv20uZhyY~tr8 zkAYW4#yM;*je)n=EAb(q@5BWD8b1_--m$Q-3wbh1hM{8ihq7UUQfg@)l06}y+#=$( z$x>oVYJ47zAC^>HLRE-!HitjUixP6!R98WU+h>zct7g4eD;Mj#FL*a!VW!v-@b(Jv zj@@xM5noCp5%Vk3vY{tyI#oyDV7<$`KG`tktVyC&0DqxA#>V;-3oH%NW|Q&=UQ&zU zXNIT67J4D%5R1k#bW0F}TD`hlW7b)-=-%X4;UxQ*u4bK$mTAp%y&-(?{sXF%e_VH6 zTkt(X)SSN|;8q@8XX6qfR;*$r#HbIrvOj*-5ND8RCrcw4u8D$LXm5zlj@E5<3S0R# z??=E$p{tOk96$SloZ~ARe5`J=dB|Nj?u|zy2r(-*(q^@YwZiTF@QzQyPx_l=IDKa) zqD@0?IHJqSqZ_5`)81?4^~`yiGh6>7?|dKa8!e|}5@&qV!Iu9<@G?E}Vx9EzomB3t zEbMEm$TKGwkHDpirp;FZD#6P5qIlQJ8}rf;lHoz#h4TFFPYmS3+8(13_Mx2`?^=8S z|0)0&dQLJTU6{b%*yrpQe#OKKCrL8}YKw+<#|m`SkgeoN69TzIBQOl_Yg)W*w?NW) z*WxhEp$zQBBazJSE6ygu@O^!@Fr46j=|K`Mmb~xbggw7<)BuC@cT@Bwb^k?o-A zKX^9AyqR?zBtW5UA#siILztgOp?r4qgC`9jYJG_fxlsVSugGprremg-W(K0{O!Nw-DN%=FYCyfYA3&p*K>+|Q}s4rx#CQK zNj^U;sLM#q8}#|PeC$p&jAjqMu(lkp-_50Y&n=qF9`a3`Pr9f;b`-~YZ+Bb0r~c+V z*JJ&|^T{}IHkwjNAaM^V*IQ;rk^hnnA@~?YL}7~^St}XfHf6OMMCd9!vhk#gRA*{L zp?&63axj|Si%^NW05#87zpU_>QpFNb+I00v@cHwvdBn+Un)n2Egdt~LcWOeBW4Okm zD$-e~RD+W|UB;KQ;a7GOU&%p*efGu2$@wR74+&iP8|6#_fmnh^WcJLs)rtz{46);F z4v0OL{ZP9550>2%FE(;SbM*#sqMl*UXOb>ch`fJ|(*bOZ9=EB1+V4fkQ)hjsm3-u^Pk-4ji_uDDHdD>84tER!MvbH`*tG zzvbhBR@}Yd`azQGavooV=<WbvWLlO#x`hyO34mKcxrGv=`{ssnP=0Be5#1B;Co9 zh{TR>tjW2Ny$ZxJpYeg57#0`GP#jxDCU0!H15nL@@G*HLQcRdcsUO3sO9xvtmUcc{F*>FQZcZ5bgwaS^k-j5mmt zI7Z{Xnoml|A(&_{imAjK!kf5>g(oDqDI4C{;Bv162k8sFNr;!qPa2LPh>=1n z=^_9)TsLDvTqK7&*Vfm5k;VXjBW^qN3Tl&}K=X5)oXJs$z3gk0_+7`mJvz{pK|FVs zHw!k&7xVjvY;|(Py<;J{)b#Yjj*LZO7x|~pO4^MJ2LqK3X;Irb%nf}L|gck zE#55_BNsy6m+W{e zo!P59DDo*s@VIi+S|v93PwY6d?CE=S&!JLXwE9{i)DMO*_X90;n2*mPDrL%{iqN!?%-_95J^L z=l<*{em(6|h7DR4+4G3Wr;4*}yrBkbe3}=p7sOW1xj!EZVKSMSd;QPw>uhKK z#>MlS@RB@-`ULv|#zI5GytO{=zp*R__uK~R6&p$q{Y{iNkg61yAgB8C^oy&``{~FK z8hE}H&nIihSozKrOONe5Hu?0Zy04U#0$fB7C6y~?8{or}KNvP)an=QP&W80mj&8WL zEZQF&*FhoMMG6tOjeiCIV;T{I>jhi9hiUwz?bkX3NS-k5eWKy)Mo_orMEg4sV6R6X&i-Q%JG;Esl+kLpn@Bsls9O|i9z`tKB^~1D5)RIBB&J<6T@a4$pUvh$IR$%ubH)joi z!7>ON0DPwx=>0DA>Bb^c?L8N0BBrMl#oDB+GOXJh;Y&6I)#GRy$W5xK%a;KS8BrER zX)M>Rdoc*bqP*L9DDA3lF%U8Yzb6RyIsW@}IKq^i7v&{LeIc=*ZHIbO68x=d=+0T( zev=DT9f|x!IWZNTB#N7}V4;9#V$%Wo0%g>*!MdLOEU>My0^gni9ocID{$g9ytD!gy zKRWT`DVN(lcYjR|(}f0?zgBa3SwunLfAhx><%u0uFkrdyqlh8_g zDKt#R6rA2(Vm2LW_>3lBNYKG_F{TEnnKWGGC15y&OebIRhFL4TeMR*v9i0wPoK#H< zu4){s4K&K)K(9~jgGm;H7lS7y_RYfS;&!Oj5*eqbvEcW^a*i67nevzOZxN6F+K~A%TYEtsAVsR z@J=1hc#Dgs7J2^FL|qV&#WBFQyDtEQ2kPO7m2`)WFhqAob)Y>@{crkil6w9VoA?M6 zADGq*#-hyEVhDG5MQj677XmcWY1_-UO40QEP&+D)rZoYv^1B_^w7zAvWGw&pQyCyx zD|ga$w!ODOxxGf_Qq%V9Z7Q2pFiUOIK818AGeZ-~*R zI1O|SSc=3Z?#61Rd|AXx2)K|F@Z1@x!hBBMhAqiU)J=U|Y)T$h3D?ZPPQgkSosnN! zIqw-t$0fqsOlgw3TlHJF*t$Q@bg$9}A3X=cS@-yU3_vNG_!#9}7=q7!LZ?-%U26W4 z$d>_}*s1>Ac%3uFR;tnl*fNlylJ)}r2^Q3&@+is3BIv<}x>-^_ng;jhdaM}6Sg3?p z0jS|b%QyScy3OQ(V*~l~bK>VC{9@FMuW_JUZO?y(V?LKWD6(MXzh}M3r3{7b4eB(#`(q1m{>Be%_<9jw8HO!x#yF6vez$c#kR+}s zZO-_;25Sxngd(}){zv?ccbLqRAlo;yog>4LH&uZUK1n>x?u49C)Y&2evH5Zgt~666 z_2_z|H5AO5Iqxv_Bn~*y1qzRPcob<+Otod5Xd2&z=C;u+F}zBB@b^UdGdUz|s!H}M zXG%KiLzn3G?FZgdY&3pV$nSeY?ZbU^jhLz9!t0K?ep}EFNqR1@E!f*n>x*!uO*~JF zW9UXWrVgbX1n#76_;&0S7z}(5n-bqnII}_iDsNqfmye@)kRk`w~1 z6j4h4BxcPe6}v)xGm%=z2#tB#^KwbgMTl2I*$9eY|EWAHFc3tO48Xo5rW z5oHD!G4kb?MdrOHV=A+8ThlIqL8Uu+7{G@ zb)cGBm|S^Eh5= z^E^SZ=yeC;6nNCdztw&TdnIz}^Of@Ke*@vjt)0g>Y!4AJvWiL~e7+9#Ibhe)> ziNwh>gWZL@FlWc)wzihocz+%+@*euwXhW%Hb>l7tf8aJe5_ZSH1w-uG|B;9qpcBP0 zM`r1Hu#htOl)4Cl1c7oY^t0e4Jh$-I(}M5kzWqh{F=g&IM#JiC`NDSd@BCKX#y<P@Gwl$3a3w z6<(b|K(X5FIR22M)sy$4jY*F4tT{?wZRI+KkZFb<@j@_C316lu1hq2hA|1wCmR+S@ zRN)YNNE{}i_H`_h&VUT5=Y(lN%m?%QX;6$*1P}K-PcPx>*S55v)qZ@r&Vcic-sjkm z! z=nfW&X`}iAqa_H$H%z3Tyz5&P3%+;93_0b;zxLs)t#B|up}JyV$W4~`8E@+BHQ+!y zuIo-jW!~)MN$2eHwyx-{fyGjAWJ(l8TZtUp?wZWBZ%}krT{f*^fqUh+ywHifw)_F> zp76_kj_B&zFmv$FsPm|L7%x-j!WP>_P6dHnUTv!9ZWrrmAUteBa`rT7$2ixO;ga8U z3!91micm}{!Btk+I%pMgcKs?H4`i+=w0@Ws-CS&n^=2hFTQ#QeOmSz6ttIkzmh^`A zYPq)G1l3h(E$mkyr{mvz*MP`x+PULBn%CDhltKkNo6Uqg!vJ#DA@BIYr9TQ`18Un2 zv$}BYzOQuay9}w(?JV63F$H6WmlYPPpH=R|CPb%C@BCv|&Q|&IcW7*LX?Q%epS z`=CPx{1HnJ9_46^=0VmNb>8JvMw-@&+V8SDLRYsa>hZXEeRbtf5eJ>0@Ds47zIY{N z42EOP9J8G@MXXdeiPx#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91AfN*P1ONa40RR91AOHXW0IY^$^8f$?lu1NER9Fe^SItioK@|V(ZWmgL zZT;XwPgVuWM>O%^|Dc$VK;n&?9!&g5)aVsG8cjs5UbtxVVnQNOV~7Mrg3+jnU;rhE z6fhW6P)R>_eXrXo-RW*y6RQ_qcb^s1wTu$TwriZ`=JUws>vRi}5x}MW1MR#7p|gIWJlaLK;~xaN}b< z<-@=RX-%1mt`^O0o^~2=CD7pJ<<$Rp-oUL-7PuG>do^5W_Mk#unlP}6I@6NPxY`Q} zuXJF}!0l)vwPNAW;@5DjPRj?*rZxl zwn;A(cFV!xe^CUu+6SrN?xe#mz?&%N9QHf~=KyK%DoB8HKC)=w=3E?1Bqj9RMJs3U z5am3Uv`@+{jgqO^f}Lx_Jp~CoP3N4AMZr~4&d)T`R?`(M{W5WWJV^z~2B|-oih@h^ zD#DuzGbl(P5>()u*YGo*Och=oRr~3P1wOlKqI)udc$|)(bacG5>~p(y>?{JD7nQf_ z*`T^YL06-O>T(s$bi5v~_fWMfnE7Vn%2*tqV|?~m;wSJEVGkNMD>+xCu#um(7}0so zSEu7?_=Q64Q5D+fz~T=Rr=G_!L*P|(-iOK*@X8r{-?oBlnxMNNgCVCN9Y~ocu+?XA zjjovJ9F1W$Nf!{AEv%W~8oahwM}4Ruc+SLs>_I_*uBxdcn1gQ^2F8a*vGjgAXYyh? zWCE@c5R=tbD(F4nL9NS?$PN1V_2*WR?gjv3)4MQeizuH`;sqrhgykEzj z593&TGlm3h`sIXy_U<7(dpRXGgp0TB{>s?}D{fwLe>IV~exweOfH!qM@CV5kib!YA z6O0gvJi_0J8IdEvyP#;PtqP*=;$iI2t(xG2YI-e!)~kaUn~b{6(&n zp)?iJ`z2)Xh%sCV@BkU`XL%_|FnCA?cVv@h*-FOZhY5erbGh)%Q!Av#fJM3Csc_g zC2I6x%$)80`Tkz#KRA!h1FzY`?0es3t!rKDT5EjPe6B=BLPr7s0GW!if;Ip^!AmGW zL;$`Vdre+|FA!I4r6)keFvAx3M#1`}ijBHDzy)3t0gwjl|qC2YB`SSxFKHr(oY#H$)x{L$LL zBdLKTlsOrmb>T0wd=&6l3+_Te>1!j0OU8%b%N342^opKmT)gni(wV($s(>V-fUv@0p8!f`=>PxC|9=nu ze{ToBBj8b<{PLfXV$h8YPgA~E!_sF9bl;QOF{o6t&JdsX?}rW!_&d`#wlB6T_h;Xf zl{4Tz5>qjF4kZgjO7ZiLPRz_~U@k5%?=30+nxEh9?s78gZ07YHB`FV`4%hlQlMJe@J`+e(qzy+h(9yY^ckv_* zb_E6o4p)ZaWfraIoB2)U7_@l(J0O%jm+Or>8}zSSTkM$ASG^w3F|I? z$+eHt7T~04(_WfKh27zqS$6* zzyy-ZyqvSIZ0!kkSvHknm_P*{5TKLQs8S6M=ONuKAUJWtpxbL#2(_huvY(v~Y%%#~ zYgsq$JbLLprKkV)32`liIT$KKEqs$iYxjFlHiRNvBhxbDg*3@Qefw4UM$>i${R5uB zhvTgmqQsKA{vrKN;TSJU2$f9q=y{$oH{<)woSeV>fkIz6D8@KB zf4M%v%f5U2?<8B(xn}xV+gWP?t&oiapJhJbfa;agtz-YM7=hrSuxl8lAc3GgFna#7 zNjX7;`d?oD`#AK+fQ=ZXqfIZFEk{ApzjJF0=yO~Yj{7oQfXl+6v!wNnoqwEvrs81a zGC?yXeSD2NV!ejp{LdZGEtd1TJ)3g{P6j#2jLR`cpo;YX}~_gU&Gd<+~SUJVh+$7S%`zLy^QqndN<_9 zrLwnXrLvW+ew9zX2)5qw7)zIYawgMrh`{_|(nx%u-ur1B7YcLp&WFa24gAuw~& zKJD3~^`Vp_SR$WGGBaMnttT)#fCc^+P$@UHIyBu+TRJWbcw4`CYL@SVGh!X&y%!x~ zaO*m-bTadEcEL6V6*{>irB8qT5Tqd54TC4`h`PVcd^AM6^Qf=GS->x%N70SY-u?qr>o2*OV7LQ=j)pQGv%4~z zz?X;qv*l$QSNjOuQZ>&WZs2^@G^Qas`T8iM{b19dS>DaXX~=jd4B2u`P;B}JjRBi# z_a@&Z5ev1-VphmKlZEZZd2-Lsw!+1S60YwW6@>+NQ=E5PZ+OUEXjgUaXL-E0fo(E* zsjQ{s>n33o#VZm0e%H{`KJi@2ghl8g>a~`?mFjw+$zlt|VJhSU@Y%0TWs>cnD&61fW4e0vFSaXZa4-c}U{4QR8U z;GV3^@(?Dk5uc@RT|+5C8-24->1snH6-?(nwXSnPcLn#X_}y3XS)MI_?zQ$ZAuyg+ z-pjqsw}|hg{$~f0FzmmbZzFC0He_*Vx|_uLc!Ffeb8#+@m#Z^AYcWcZF(^Os8&Z4g zG)y{$_pgrv#=_rV^D|Y<_b@ICleUv>c<0HzJDOsgJb#Rd-Vt@+EBDPyq7dUM9O{Yp zuGUrO?ma2wpuJuwl1M=*+tb|qx7Doj?!F-3Z>Dq_ihFP=d@_JO;vF{iu-6MWYn#=2 zRX6W=`Q`q-+q@Db|6_a1#8B|#%hskH82lS|9`im0UOJn?N#S;Y0$%xZw3*jR(1h5s z?-7D1tnIafviko>q6$UyqVDq1o@cwyCb*})l~x<@s$5D6N=-Uo1yc49p)xMzxwnuZ zHt!(hu-Ek;Fv4MyNTgbW%rPF*dB=;@r3YnrlFV{#-*gKS_qA(G-~TAlZ@Ti~Yxw;k za1EYyX_Up|`rpbZ0&Iv#$;eC|c0r4XGaQ-1mw@M_4p3vKIIpKs49a8Ns#ni)G314Z z8$Ei?AhiT5dQGWUYdCS|IC7r z=-8ol>V?u!n%F*J^^PZ(ONT&$Ph;r6X;pj|03HlDY6r~0g~X#zuzVU%a&!fs_f|m?qYvg^Z{y?9Qh7Rn?T*F%7lUtA6U&={HzhYEzA`knx1VH> z{tqv?p@I(&ObD5L4|YJV$QM>Nh-X3cx{I&!$FoPC_2iIEJfPk-$;4wz>adRu@n`_y z_R6aN|MDHdK;+IJmyw(hMoDCFCQ(6?hCAG5&7p{y->0Uckv# zvooVuu04$+pqof777ftk<#42@KQ((5DPcSMQyzGOJ{e9H$a9<2Qi_oHjl{#=FUL9d z+~0^2`tcvmp0hENwfHR`Ce|<1S@p;MNGInXCtHnrDPXCKmMTZQ{HVm_cZ>@?Wa6}O zHsJc7wE)mc@1OR2DWY%ZIPK1J2p6XDO$ar`$RXkbW}=@rFZ(t85AS>>U0!yt9f49^ zA9@pc0P#k;>+o5bJfx0t)Lq#v4`OcQn~av__dZ-RYOYu}F#pdsl31C^+Qgro}$q~5A<*c|kypzd} ziYGZ~?}5o`S5lw^B{O@laad9M_DuJle- z*9C7o=CJh#QL=V^sFlJ0c?BaB#4bV^T(DS6&Ne&DBM_3E$S^S13qC$7_Z?GYXTpR@wqr70wu$7+qvf-SEUa5mdHvFbu^7ew!Z1a^ zo}xKOuT*gtGws-a{Tx}{#(>G~Y_h&5P@Q8&p!{*s37^QX_Ibx<6XU*AtDOIvk|^{~ zPlS}&DM5$Ffyu-T&0|KS;Wnaqw{9DB&B3}vcO14wn;)O_e@2*9B&0I_ zZz{}CMxx`hv-XouY>^$Y@J(_INeM>lIQI@I>dBAqq1)}?Xmx(qRuX^i4IV%=MF306 z9g)i*79pP%_7Ex?m6ag-4Tlm=Z;?DQDyC-NpUIb#_^~V_tsL<~5<&;Gf2N+p?(msn zzUD~g>OoW@O}y0@Z;RN)wjam`CipmT&O7a|YljZqU=U86 zedayEdY)2F#BJ6xvmW8K&ffdS*0!%N<%RB!2~PAT4AD*$W7yzHbX#Eja9%3aD+Ah2 zf#T;XJW-GMxpE=d4Y>}jE=#U`IqgSoWcuvgaWQ9j1CKzG zDkoMDDT)B;Byl3R2PtC`ip=yGybfzmVNEx{xi_1|Cbqj>=FxQc{g`xj6fIfy`D8fA z##!-H_e6o0>6Su&$H2kQTujtbtyNFeKc}2=|4IfLTnye#@$Au7Kv4)dnA;-fz@D_8 z)>irG$)dkBY~zX zC!ZXLy*L3xr6cb70QqfN#Q>lFIc<>}>la4@3%7#>a1$PU&O^&VszpxLC%*!m-cO{B z-Y}rQr4$84(hvy#R69H{H zJ*O#uJh)TF6fbXy;fZkk%X=CjsTK}o5N1a`d7kgYYZLPxsHx%9*_XN8VWXEkVJZ%A z1A+5(B;0^{T4aPYr8%i@i32h)_)|q?9vws)r+=5u)1YNftF5mknwfd*%jXA2TeP}Z zQ!m?xJ3?9LpPM?_A3$hQ1QxNbR&}^m z!F999s?p^ak#C4NM_x2p9FoXWJ$>r?lJ)2bG)sX{gExgLA2s5RwHV!h6!C~d_H||J z>9{E{mEv{Z1z~65Vix@dqM4ZqiU|!)eWX$mwS5mLSufxbpBqqS!jShq1bmwCR6 z4uBri7ezMeS6ycaXPVu(i2up$L; zjpMtB`k~WaNrdgM_R=e#SN?Oa*u%nQy01?()h4A(jyfeNfx;5o+kX?maO4#1A^L}0 zYNyIh@QVXIFiS0*tE}2SWTrWNP3pH}1Vz1;E{@JbbgDFM-_Mky^7gH}LEhl~Ve5PexgbIyZ(IN%PqcaV@*_`ZFb=`EjspSz%5m2E34BVT)d=LGyHVz@-e%9Ova*{5@RD;7=Ebkc2GP%pIP^P7KzKapnh`UpH?@h z$RBpD*{b?vhohOKf-JG3?A|AX|2pQ?(>dwIbWhZ38GbTm4AImRNdv_&<99ySX;kJ| zo|5YgbHZC#HYgjBZrvGAT4NZYbp}qkVSa;C-LGsR26Co+i_HM&{awuO9l)Ml{G8zD zs$M8R`r+>PT#Rg!J(K6T4xHq7+tscU(}N$HY;Yz*cUObX7J7h0#u)S7b~t^Oj}TBF zuzsugnst;F#^1jm>22*AC$heublWtaQyM6RuaquFd8V#hJ60Z3j7@bAs&?dD#*>H0SJaDwp%U~27>zdtn+ z|8sZzklZy$%S|+^ie&P6++>zbrq&?+{Yy11Y>@_ce@vU4ZulS@6yziG6;iu3Iu`M= zf3rcWG<+3F`K|*(`0mE<$89F@jSq;j=W#E>(R}2drCB7D*0-|D;S;(;TwzIJkGs|q z2qH{m_zZ+el`b;Bv-#bQ>}*VPYC|7`rgBFf2oivXS^>v<&HHTypvd4|-zn|=h=TG{ z05TH2+{T%EnADO>3i|CB zCu60#qk`}GW{n4l-E$VrqgZGbI zbQW690KgZt4U3F^5@bdO1!xu~p@7Y~*_FfWg2CdvED5P5#w#V46LH`<&V0{t&Ml~4 zHNi7lIa+#i+^Z6EnxO7KJQw)wD)4~&S-Ki8)3=jpqxmx6c&zU&<&h%*c$I(5{1HZT zc9WE}ijcWJiVa^Q^xC|WX0habl89qycOyeViIbi(LFsEY_8a|+X^+%Qv+W4vzj>`y zpuRnjc-eHNkvXvI_f{=*FX=OKQzT?bck#2*qoKTHmDe>CDb&3AngA1O)1b}QJ1Tun z_<@yVEM>qG7664Pa@dzL@;DEh`#?yM+M|_fQS<7yv|i*pw)|Z8)9IR+QB7N3v3K(wv4OY*TXnH&X0nQB}?|h2XQeGL^q~N7N zDFa@x0E(UyN7k9g%IFq7Sf+EAfE#K%%#`)!90_)Dmy3Bll&e1vHQyPA87TaF(xbqMpDntVp?;8*$87STop$!EAnGhZ?>mqPJ(X zFsr336p3P{PpZCGn&^LP(JjnBbl_3P3Kcq+m}xVFMVr1zdCPJMDIV_ki#c=vvTwbU z*gKtfic&{<5ozL6Vfpx>o2Tts?3fkhWnJD&^$&+Mh5WGGyO7fG@6WDE`tEe(8<;+q z@Ld~g08XDzF8xtmpIj`#q^(Ty{Hq>t*v`pedHnuj(0%L(%sjkwp%s}wMd!a<*L~9T z9MM@s)Km~ogxlqEhIw5(lc46gCPsSosUFsgGDr8H{mj%OzJz{N#;bQ;KkV+ZWA1(9 zu0PXzyh+C<4OBYQ0v3z~Lr;=C@qmt8===Ov2lJ1=DeLfq*#jgT{YQCuwz?j{&3o_6 zsqp2Z_q-YWJg?C6=!Or|b@(zxTlg$ng2eUQzuC<+o)k<6^9ju_Z*#x+oioZ5T8Z_L zz9^A1h2eFS0O5muq8;LuDKwOv4A9pxmOjgb6L*i!-(0`Ie^d5Fsgspon%X|7 zC{RRXEmYn!5zP9XjG*{pLa)!2;PJB2<-tH@R7+E1cRo=Wz_5Ko8h8bB$QU%t9#vol zAoq?C$~~AsYC|AQQ)>>7BJ@{Cal)ZpqE=gjT+Juf!RD-;U0mbV1ED5PbvFD6M=qj1 zZ{QERT5@(&LQ~1X9xSf&@%r|3`S#ZCE=sWD`D4YQZ`MR`G&s>lN{y2+HqCfvgcw3E z-}Kp(dfGG?V|97kAHQX+OcKCZS`Q%}HD6u*e$~Ki&Vx53&FC!x94xJd4F2l^qQeFO z?&JdmgrdVjroKNJx64C!H&Vncr^w zzR#XI}Dn&o8jB~_YlVM^+#0W(G1LZH5K^|uYT@KSR z^Y5>^*Bc45E1({~EJB(t@4n9gb-eT#s@@7)J^^<_VV`Pm!h7av8XH6^5zO zOcQBhTGr;|MbRsgxCW69w{bl4EW#A~);L?d4*y#j8Ne=Z@fmJP0k4{_cQ~KA|Y#_#BuUiYx8y*za3_6Y}c=GSe7(2|KAfhdzud!Zq&}j)=o4 z7R|&&oX7~e@~HmyOOsCCwy`AR+deNjZ3bf6ijI_*tKP*_5JP3;0d;L_p(c>W1b%sG zJ*$wcO$ng^aW0E(5ldckV9unU7}OB7s?Wx(761?1^&8tA5y0_(ieV>(x-e@}1`lWC z-YH~G$D>#ud!SxK2_Iw{K%92=+{4yb-_XC>ji&j7)1ofp(OGa4jjF;Hd*`6YQL+Jf zffg+6CPc8F@EDPN{Kn96yip;?g@)qgkPo^nVKFqY?8!=h$G$V=<>%5J&iVjwR!7H0 z$@QL|_Q81I;Bnq8-5JyNRv$Y>`sWl{qhq>u+X|)@cMlsG!{*lu?*H`Tp|!uv z9oEPU1jUEj@ueBr}%Y)7Luyi)REaJV>eQ{+uy4uh0ep0){t;OU8D*RZ& zE-Z-&=BrWQLAD^A&qut&4{ZfhqK1ZQB0fACP)=zgx(0(o-`U62EzTkBkG@mXqbjXm z>w`HNeQM?Is&4xq@BB(K;wv5nI6EXas)XXAkUuf}5uSrZLYxRCQPefn-1^#OCd4aO zzF=dQ*CREEyWf@n6h7(uXLNgJIwGp#Xrsj6S<^bzQ7N0B0N{XlT;`=m9Olg<>KL}9 zlp>EKTx-h|%d1Ncqa=wnQEuE;sIO-f#%Bs?g4}&xS?$9MG?n$isHky0caj za8W+B^ERK#&h?(x)7LLpOqApV5F>sqB`sntV%SV>Q1;ax67qs+WcssfFeF3Xk=e4^ zjR2^(%K1oBq%0%Rf!y&WT;lu2Co(rHi|r1_uW)n{<7fGc-c=ft7Z0Q}r4W$o$@tQF#i?jDBwZ8h+=SC}3?anUp3mtRVv9l#H?-UD;HjTF zQ*>|}e=6gDrgI9p%c&4iMUkQa4zziS$bO&i#DI$Wu$7dz7-}XLk%!US^XUIFf2obO zFCTjVEtkvYSKWB;<0C;_B{HHs~ax_48^Cml*mjfBC5*7^HJZiLDir(3k&BerVIZF8zF;0q80eX8c zPN4tc+Dc5DqEAq$Y3B3R&XPZ=AQfFMXv#!RQnGecJONe0H;+!f^h5x0wS<+%;D}MpUbTNUBA}S2n&U59-_5HKr{L^jPsV8B^%NaH|tUr)mq=qCBv_- ziZ1xUp(ZzxUYTCF@C}To;u60?RIfTGS?#JnB8S8@j`TKPkAa)$My+6ziGaBcA@){d z91)%+v2_ba7gNecdj^8*I4#<11l!{XKl6s0zkXfJPxhP+@b+5ev{a>p*W-3*25c&} zmCf{g9mPWVQ$?Sp*4V|lT@~>RR)9iNdN^7KT@>*MU3&v^3e?=NTbG9!h6C|9zO097 zN{Qs6YwR-5$)~ z`b~qs`a1Dbx8P>%V=1XGjBptMf%P~sl1qbHVm1HYpY|-Z^Dar8^HqjIw}xaeRlsYa zJ_@Apy-??`gxPmb`m`0`z`#G7*_C}qiSZe~l2z65tE~IwMw$1|-u&t|z-8SxliH00 zlh1#kuqB56s+E&PWQ7Nz17?c}pN+A@-c^xLqh(j;mS|?>(Pf7(?qd z5q@jkc^nA&!K-}-1P=Ry0yyze0W!+h^iW}7jzC1{?|rEFFWbE^Yu7Y}t?jmP-D$f+ zmqFT7nTl0HL|4jwGm7w@a>9 zKD)V~+g~ysmei$OT5}%$&LK8?ib|8aY|>W3;P+0B;=oD=?1rg+PxKcP(d;OEzq1CKA&y#boc51P^ZJPPS)z5 zAZ)dd2$glGQXFj$`XBBJyl2y-aoBA8121JC9&~|_nY>nkmW>TLi%mWdn-^Jks-Jv| zSR*wij;A3Fcy8KsDjQ15?Z9oOj|Qw2;jgJiq>dxG(2I2RE- z$As!#zSFIskebqU2bnoM^N<4VWD2#>!;saPSsY8OaCCQqkCMdje$C?Sp%V}f2~tG5 z0whMYk6tcaABwu*x)ak@n4sMElGPX1_lmv@bgdI2jPdD|2-<~Jf`L`@>Lj7{<-uLQ zE3S_#3e10q-ra=vaDQ42QUY^@edh>tnTtpBiiDVUk5+Po@%RmuTntOlE29I4MeJI?;`7;{3e4Qst#i-RH6s;>e(Sc+ubF2_gwf5Qi%P!aa89fx6^{~A*&B4Q zKTF|Kx^NkiWx=RDhe<{PWXMQ;2)=SC=yZC&mh?T&CvFVz?5cW~ritRjG2?I0Av_cI z)=s!@MXpXbarYm>Kj0wOxl=eFMgSMc?62U#2gM^li@wKPK9^;;0_h7B>F>0>I3P`{ zr^ygPYp~WVm?Qbp6O3*O2)(`y)x>%ZXtztz zMAcwKDr=TCMY!S-MJ8|2MJCVNUBI0BkJV6?(!~W!_dC{TS=eh}t#X+2D>Kp&)ZN~q zvg!ogxUXu^y(P*;Q+y_rDoGeSCYxkaGPldDDx)k;ocJvvGO#1YKoQLHUf2h_pjm&1 zqh&!_KFH03FcJvSdfgUYMp=5EpigZ*8}7N_W%Ms^WSQ4hH`9>3061OEcxmf~TcYn5_oHtscWn zo5!ayj<_fZ)vHu3!A!7M;4y1QIr8YGy$P2qDD_4+T8^=^dB6uNsz|D>p~4pF3Nrb6 zcpRK*($<~JUqOya#M1=#IhOZ zG)W+rJS-x(6EoVz)P zsSo>JtnChdj9^);su%SkFG~_7JPM zEDz3gk2T7Y%x>1tWyia|op(ilEzvAujW?Xwlw>J6d7yEi8E zv30riR|a_MM%ZZX&n!qm0{2agq(s?x9E@=*tyT$nND+{Djpm7Rsy!+c$j+wqMwTOF zZL8BQ|I`<^bGW)5apO{lh(Asqen?_U`$_n0-Ob~Yd%^89oEe%9yGumQ_8Be+l2k+n zCxT%s?bMpv|AdWP7M1LQwLm|x+igA~;+iK-*+tClF&ueX_V}>=4gvZ01xpubQWXD_ zi?Un>&3=$fu)dgk-Z;0Ll}HK5_YM->l^Czrd0^cJ))(DwL2g3aZuza7ga9^|mT_70 z))}A}r1#-(9cxtn<9jGRwOB4hb9kK@YCgjfOM-90I$8@l=H^`K$cyhe2mTM|FY9vW znH~h)I<_aa#V1xmhk?Ng@$Jw-s%a!$BI4Us+Df+?J&gKAF-M`v}j`OWKP3>6`X`tEmhe#y*(Xm$_^Ybbs=%;L7h zp7q^C*qM}Krqsinq|WolR99>_!GL#Z71Hhz|IwQQv<>Ds09B?Je(lhI1(FInO8mc} zl$RyKCUmfku+Cd^8s0|t+e}5g7M{ZPJQH=UB3(~U&(w#Bz#@DTDHy>_UaS~AtN>4O zJ-I#U@R($fgupHebcpuEBX`SZ>kN!rW$#9>s{^3`86ZRQRtYTY)hiFm_9wU3c`SC8 z-5M%g)h}3Pt|wyj#F%}pGC@VL`9&>9P+_UbudCkS%y2w&*o})hBplrB*@Z?gel5q+ z%|*59(sR9GMk3xME}wd%&k?7~J)OL`rK#4d-haC7uaU8-L@?$K6(r<0e<;y83rK&` z3Q!1rD9WkcB8WBQ|WT|$u^lkr0UL4WH4EQTJyk@5gzHb18cOte4w zS`fLv8q;PvAZyY;*Go3Qw1~5#gP0D0ERla6M6#{; zr1l?bR}Nh+OC7)4bfAs(0ZD(axaw6j9v`^jh5>*Eo&$dAnt?c|Y*ckEORIiJXfGcM zEo`bmIq6rJm`XhkXR-^3d8^RTK2;nmVetHfUNugJG(4XLOu>HJA;0EWb~?&|0abr6 zxqVp@p=b3MN^|~?djPe!=eex(u!x>RYFAj|*T$cTi*Sd3Bme7Pri1tkK9N`KtRmXf zZYNBNtik97ct1R^vamQBfo9ZUR@k*LhIg8OR9d_{iv#t)LQV91^5}K5u{eyxwOFoU zHMVq$C>tfa@uNDW^_>EmO~WYQd(@!nKmAvSSIb&hPO|}g-3985t?|R&WZXvxS}Kt2i^eRe>WHb_;-K5cM4=@AN1>E&1c$k!w4O*oscx(f=<1K6l#8Exi)U(ZiZ zdr#YTP6?m1e1dOKysUjQ^>-MR={OuD00g6+(a^cvcmn#A_%Fh3Of%(qP5nvjS1=(> z|Ld8{u%(J}%2SY~+$4pjy{()5HN2MYUjg1X9umxOMFFPdM+IwOVEs4Z(olynvT%G) zt9|#VR}%O2@f6=+6uvbZv{3U)l;C{tuc zZ{K$rut=eS%3_~fQv^@$HV6#9)K9>|0qD$EV2$G^XUNBLM|5-ZmFF!KV)$4l^KVj@ zZ4fI}Knv*K%zPqK77}B-h_V{66VrmoZP2>@^euu8Rc}#qwRwt5uEBWcJJE5*5rT2t zA4Jpx`QQ~1Sh_n_a9x%Il!t1&B~J6p54zxAJx`REov${jeuL8h8x-z=?qwMAmPK5i z_*ES)BW(NZluu#Bmn1-NUKQip_X&_WzJy~J`WYxEJQ&Gu7DD< z&F9urE;}8S{x4{yB zaq~1Zrz%8)<`prSQv$eu5@1RY2WLu=waPTrn`WK%;G5(jt^FeM;gOdvXQjYhax~_> z{bS_`;t#$RYMu-;_Dd&o+LD<5Afg6v{NK?0d8dD5ohAN?QoocETBj?y{MB)jQ%UQ}#t3j&iL!qr@#6JEajR3@^k5wgLfI9S9dT2^f`2wd z%I#Q*@Ctk@w=(u)@QC}yBvUP&fFRR-uYKJ){Wp3&$s(o~W7OzgsUIPx0|ph2L1(r*_Pa@T@mcH^JxBjh09#fgo|W#gG7}|)k&uD1iZxb0 z@|Y)W79SKj9sS&EhmTD;uI#)FE6VwQ*YAr&foK$RI5H8_ripb$^=;U%gWbrrk4!5P zXDcyscEZoSH~n6VJu8$^6LE6)>+=o#Q-~*jmob^@191+Ot1w454e3)WMliLtY6~^w zW|n#R@~{5K#P+(w+XC%(+UcOrk|yzkEes=!qW%imu6>zjdb!B#`efaliKtN}_c!Jp zfyZa`n+Nx8;*AquvMT2;c8fnYszdDA*0(R`bsof1W<#O{v%O!1IO4WZe=>XBu_D%d zOwWDaEtX%@B>4V%f1+dKqcXT>m2!|&?}(GK8e&R=&w?V`*Vj)sCetWp9lr@@{xe6a zE)JL&;p}OnOO}Nw?vFyoccXT*z*?r}E8{uPtd;4<(hmX;d$rqJhEF}I+kD+m(ke;J z7Cm$W*CSdcD=RYEBhedg>tuT{PHqwCdDP*NkHv4rvQTXkzEn*Mb0oJz&+WfWIOS4@ zzpPJ|e%a-PIwOaOC7uQcHQ-q(SE(e@fj+7oC@34wzaBNaP;cw&gm{Z8yYX?V(lIv5 zKbg*zo1m5aGA4^lwJ|bAU=j3*d8S{vp!~fLFcK8s6%Ng55_qW_d*3R%e=34aDZPfD z&Le39j|ahp6E7B0*9OVdeMNrTErFatiE+=Z!XZ^tv0y%zZKXRTBuPyP&C{5(H?t)S zKV24_-TKpOmCPzU&by8R1Q5HY^@IDoeDA9MbgizgQ*F1Er~HVmvSU>vx}pZVQ&tr| zOtZl8vfY2#L<)gZ=ba&wG~EI*Vd?}lRMCf+!b5CDz$8~be-HKMo5omk$w7p4`Mym*IR8WiTz4^kKcUo^8Hkcsu14u z`Pkg`#-Y^A%CqJ0O@UF|caAulf68@(zhqp~YjzInh7qSN7Ov%Aj(Qz%{3zW|xubJ- ztNE_u_MO7Q_585r;xD?e=Er}@U1G@BKW5v$UM((eByhH2p!^g9W}99OD8VV@7d{#H zv)Eam+^K(5>-Ot~U!R$Um3prQmM)7DyK=iM%vy>BRX4#aH7*oCMmz07YB(EL!^%F7?CA#>zXqiYDhS;e?LYPTf(bte6B ztrfvDXYG*T;ExK-w?Knt{jNv)>KMk*sM^ngZ-WiUN;=0Ev^GIDMs=AyLg2V@3R z7ugNc45;4!RPxvzoT}3NCMeK$7j#q3r_xV(@t@OPRyoKBzHJ#IepkDsm$EJRxL)A* zf{_GQYttu^OXr$jHQn}zs$Eh|s|Z!r?Yi+bS-bi+PE*lH zo|6ztu6$r_?|B~S#m>imI!kQP9`6X426uHRri!wGcK;J;`%sFM(D#*Le~W*t2uH`Q z(HEO9-c_`mhA@4QhbW+tgtt9Pzx=_*3Kh~TB$SKmU4yx-Ay&)n%PZPKg#rD4H{%Ke zdMY@rf5EAFfqtrf?Vmk&N(_d-<=bvfOdPrYwY*;5%j@O6@O#Qj7LJTk-x3LN+dEKy+X z>~U8j3Ql`exr1jR>+S4nEy+4c2f{-Q!3_9)yY758tLGg7k^=nt<6h$YE$ltA+13S<}uOg#XHe6 zZHKdNsAnMQ_RIuB;mdoZ%RWpandzLR-BnjN2j@lkBbBd+?i ze*!5mC}!Qj(Q!rTu`KrRRqp22c=hF6<^v&iCDB`n7mHl;vdclcer%;{;=kA(PwdGG zdX#BWoC!leBC4);^J^tPkPbIe<)~nYb6R3u{HvC!NOQa?DC^Q`|_@ zcz;rk`a!4rSLAS>_=b@g?Yab4%=J3Cc7pRv8?_rHMl_aK*HSPU%0pG2Fyhef_biA!aW|-(( z*RIdG&Lmk(=(nk28Q1k1Oa$8Oa-phG%Mc6dT3>JIylcMMIc{&FsBYBD^n@#~>C?HG z*1&FpYVvXOU@~r2(BUa+KZv;tZ15#RewooEM0LFb>guQN;Z0EBFMFMZ=-m$a3;gVD z)2EBD4+*=6ZF?+)P`z@DOT;azK0Q4p4>NfwDR#Pd;no|{q_qB!zk1O8QojE;>zhPu z1Q=1z^0MYHo1*``H3ex|bW-Zy==5J4fE2;g6sq6YcXMYK5i|S^9(OSw#v!3^!EB<% zZF~J~CleS`V-peStyf*I%1^R88D;+8{{qN6-t!@gTARDg^w2`uSzFZbPQ!)q^oC}m zPo8VOQxq2BaIN`pAVFGu8!{p3}(+iZ`f4ck2ygVpEZMQW38nLpj3NQx+&sAkb8`}P3- zc>N*k6AG?r}bfO6_vccTuKX+*- z7W4Q#2``P0jIHYs)F>uG#AM#I6W2)!Nu2nD5{CRV_PmkDS2ditmbd#pggqEgAo%5oC?|CP zGa0CV)wA*ko!xC7pZYkqo{10CN_e00FX5SjWkI3?@XG}}bze!(&+k2$C-C`6temSk z_YyYpB^wh3woo`B zrMSTd4T?(X-jh`FeO76C(3xsOm9s2BP_b%ospg^!#*2*o9N;tf4(X9$qc_d(()yz5 zDk@1}u_Xd+86vy5RBs?LQCuYKCGPS;E4uFOi@V%1JTK&|eRf~lp$AV#;*#O}iRI2=i3rFL8{ zA^ptDZ0l6k-mq=hUJ0x$Y@J>UNfz~I5l63H(`~*v;qX`Z{zwsQQD-!wp0D&hyB8&Z z7$R07gIKGJ^%AvQ{4KM0edM39iFRx=P^6`!<1(s0t|JbB2tXs_B_IH9#ajH0C=-n+ z`nz`fKMBKLlf?2AC+|83M+0rqR%uhNGD;uKA6jOjp7YDe^4%0fRB<^bcjlS2KF~F; zu09wh1x0&4pG&76M;x8$u`b134t=dEPBn6PV|X29<#T4F1mxGF*HOgiWU8tN@cguI z_F@o+XL7FJztR63wC|j4x_DANzcX94r7Iz-O2x$({&qd*mdLG=-Rv)uZ}UlMR+F&q zU}=lkfb0p1>1Ho){o$@}mSKIV;h*$AND7~Dl)QzpFBlSM99Kx+F7GsVK5xcR? z_4Q(Z%cgk8ST}U;;=!LwyZVu^S$>B-Waeik%wzcKTIqeX=0FP(TGQ=nxi=dsS5BYF zl@?}NT!Y!Iyos^@v7XWXA{_bV~1lxz7gC?xuXxy0_?GaN!AhRRM5>)^t%&ODd;@HN5L{MD3 zc>i2keQZVm#?NrDwbfd}_<*5^U&w0zv~n-y8=GGN-!=_`FU^cM8oVCWRFxw?BM^YD zi=Vxz4q|jwPTg+?q7_XI)-S@gQkh>w0ZUB}a{^ z_i;`Y(~fvpI!vmW*A^|P7(6+@C4UeL2WATf{P1?H5rk`5{TL zcf!CgP6Mi{MvjZS)rfo7JLDZK7M7ANd$3`{j9baD*7{#Zu-33fOYUzjvtKzR2)_T1I1s7fe&z|=)QkX;=`zX8!Byw-veM#yr;|wjO^II>!B*B z0+w%;0(=*G3V@88t!}~zx)&do(uF=073Yeh*fEhZb3Vn>t!m(9p~Y_FdV3IgR)9eT z)~e9xpI%2deTWyHlXA(7srrfc_`7ACm!R>SoIgkuF8 z!wkOhrixFy9y@)GdxAntd!!7@=L_tFD2T5OdSUO)I%yj02le`qeQ=yKq$g^h)NG;# za(0J@#VBi^5YI|QI=rq{KlxwGabZJ0dKmfWDROkcM}lUN$@DV`K7fU?8CP2H23QPi zG?YF*=Vn=kTK*#Y_{AQN&oLju|0#E=fx%YVh>S{puu&K$b;BN*jIo@VYhqPiJPzzM>#kxoy0vW9i;ne2_BIG0zyRFp<3M(iY(%*M_>q0ulV2K}Tg zkG{EWKS{i%4DUuHi%DVKy%e+Q!~Uf`>>F6NgD{{I8~nO4!VgOvtFOc7(O)X`|7n*f zxBa4CJ-v9fUUH+`7sPVvpM_C*udZ@OTGTzx56QM5y~OlrZc&w9=)B?nmd@keRn+^= zvm~4sa5987LFDnU{(N|N zJAR8H@}p1fC+H(yTI4n#%~TbImMpuqYn9cQ<0QQ%=PzZItLkC*ef9WJUvfITKWh#D zc#__8`4am9%#NslIUw+<82#SR8AYG|woLfBg#!-&dqq}@P>|I0%lbdy0lSMmNe+}o zj0zZuFr6Wb?Y{Qy-S=|r`bdrDmhnmvkRnkdn`YCleU>Q$=je}LGhh>_QAj6aa_0Oc z%Swsmui;IRx7bN*=AAS@5yW&Y2hy;3&|HAiA8}!HT6!Z!RVn~MZg`RmI6&%#tBZDx zfD+y@Z~NWlk*4l13vmt3AK2wP!fQlnBbECL>?p)F?T)<`w&QN>cP_V>r7UTcsTaaP zTOb$f!P@zf$6>890NVKbIkG8rE?9!Y97sMSZjfF?A zYR8lp`LMoz~O?iaZN;gcX;LC-%Ia*R%A&SLx!YIf29?P+=XAAojK8!^OU*@?R&DK!#G_lsn!#;S375uZ&B0HH1|BO0R90$U>qs zSvHv>H~mAgNCcjo-e+;RjY6B9NCbQrZ|BHjTkehaU<9CSkdd>Vl*ifA2LNOP&R2Qdy3k3-TQ+ zbq=#vI43x`s=%~cGyN&y4Y!FxhwgDe@i6uv8^BLL&3z*SO=D0aLjih?gY4-9uWp5or)H+v~w6n5X#F-I52z=Z_p4JB(;M| zeaVFhuR2|3UD2MzVc~^nSoD2(dD#uL_1PdnIxeA{V5n`#3xf1Zx@4lw(DsQ&H$h zw#%3O<1173hjg2_nhKi!d1ej=h7y`hVjCNB6|HTnx>SWuCE-kgTnfT+YGX4_Lun({ zDv2`>d3vrS)tTf7ps_vvh!Cx^e1BFuWnEAh0(7fkNk|-3oU|iRWdsC6U)?Raft~HN z;^$U}vZK5O8|LV$>6X5T(uYkblv{zwPxnQBh(BQ5tA~J!vGiAMYP^_ki~pkIxDfOZ zUJDwq%O~WueeV6%uN<54&u*c&E4y431cklBNrb06zGOOy4XNT~JS-q(s6@)F@ovbe ze`fial(O4(-su%6@@1+V0MsdLLMyE8;)nou(7}czU(5ASaZYDT(kUZ0L(&g$nF^n9 z9-Pi`ZZLX&)^*M6As4_2Mmc9S7OT)F8KkL2NJ)KJcnCuWU=Wy402A&45#Q9Id~BBH z0cY*xlv!uXzKrXLH!xQu(OtJvEj|0-DmRj1vjFz{c*I4$Pe(+_V|^b~S!0xm{8lq= zZv)@NlcyL3Xdz+*|L137F7y6L-2VsrKw=q^S>F6i%<{Fr8zk06$Ay-(!L$fY@7mcng!2}L0t zgi|KxfB63Xtk_Q8#ZPipQ@!zgjdpEIbK_?q17Hoi4Eiyun$hrc>T(7pOLVLQE=lgGwA+A308p& z7@=09(|$>eLy5gLe{*|3b(M;1n;C^~v?o88jYib48eR4$QGsBFzd}3QuwO^_XE(=B zq+hMi0UFC|dB{LCwch7;zYT=NK})O%sgi0k#yV;My@24^B1+CuZmYOh0^b)5Ba_)) zC%i#_Iev&nsu%I|1N5=MVc#PrlunKAs&hY|3s5;@}`>sB>}gzxuB zB=2vrRyB3uiyW(hkDUNe1@&(b`;>ZvGgw|@s{zVC#_`HXIN_^J@Etb zA7A+F?ot37T{<-vTy8h&b3e+WKHE1oh;pUQrN4yRRrx?mT_9jRa2i4l1fUnLW^Cbl z!I1>VzyFe?VELWWhM?@?t-YPZkD-Qjo@bC2(o#ZtZmr{KZsdFWItV`rs$gp{724@C zL8K5}E0+DHcWcL^{BGei4>@J-3%a#$y6;I}=upc};-NDv-z#kPX26ylOpH)Ov1uU{ zkLj6oiH6l_s+B~_z;|Jc2oi?naS7#3H63~~lWj4rUnd=fCnKdkik<@R&kch9q##G{ z4u!%=rlM~Yp3jk*t8}1B`Sv6<%Z^}~1e@aq zg|JQ`QO2pSjAm-g*?IrNc$^~sIrNBo2$m|Sxanr?Mfs>2@Auu49 zGXlsS<9XS1&8h(dD*Hl&5HBDG!^pJ*lkau_Ur+7`7z;rcs$hT4we?3bT=7Fe<>{5( z2m2(c+hUz2BTHM8dCe*Z3XX&Av;b~a=$6EF>&^E8%nyxO@m_n!q&XD^A{SRjRZQ0L~qDeC=j&0$j6=LNIz@`ni^>ch|sv}^6 zlm>?28yPl@WmDPR?Y-A9X{U9Dv_IsbXJnzKCjkRksLOg#42uG2mE_acbTQ4)J|1V>%U@K(FP3AYhL0U zdeOCPN1qLv!|#c=p!_+%VNV(GHt`RuLRV^vz<5tt-r)yOK**kUWPspVAf|}ZL{LS= z@k(@@!P&W!>wwe`x{+GrFSWhHov7hu?{KuuT%kl#WO@*WX$i_@retlhQBj++SVNCx z5$78LxP>Z=^aJ)D280r_jj=zFfMJFXCIe^B{~V@d1rl_F(qo&AB4bC-vYL>x2jSKX zpuTG-6kgp3e^T&+dtV*i6a~)v@n?n*MffN59y}<0djUX zt27R+SE#hp8bzc#;rk$jw3r4)Q@eI$*`_)=Pvge8@8|8>H3X)<9YX6cXa=ii#Le;(qKm@%0-7$>2ShnYc`j#zJ7gu_FE^?uAkL|H)UIH#gPu^40!6^J=^ zr`}iwa^!4tzW~vOMZAaKF>*8A{^8m$i(VK)>?=#l`xrVe>wseSvM_aF zATNkY>kM_P3?1kE`uIq#mvr-wuTgUH0N<&JhF=(E9%^NS*HLm!4GZ4_XI zL=R5tlG5Mk_1rPfg)sk^llFuKPMPBhuU|L5q#yP_mzxp1o&pAzi-X31sgFpIHn@($ z_>=`AB5(8tP6p2zS5VEvH5J$M` z_much3>S7t3Yo`Yx!>83-hW9LYzDKP?mKdkD#QAK8*M((sx{eBQdrR<^3ZhFP81+& zBnJMUefQyNBji~$5d88Wfw1Lv59aJN9t2!pABLg;ewJ#LXL-10;QcJl+Y4Mtngb)k6JZlCf)3uD_u)J3sYyN;NN5hNbg$%W!i-GK%e&!Us)2IExWSss$YG(hm3kJ-h%yD z>8q^n$+4I(_y_mbT{du4P%h1j3oSpjhY97{+IZ`aA4ug!vNJ6*p?<2H(2w+GD3j$I z1TUXGyNzdf>_yB3grP~FZUs<2Quw;eEi*7s(-MiIkQ%@J^+WGdQvYSUN+TRiD-xto zJ=OUU+kxGYc!HCLNbCvR4lGTp~#L;DFzGd-#gJe*xf(P3hDQz|y)?b9mwU3WUVnpcqXM<@w%r-k*Wr^gzAv)8T^sqA=Ye z!7qy&exJmAcAt~CwS#@yNmjr8*T*!A6w4~E*ibaLRs0CFo(;R3=ODhDt6zWNodmo0 zXx&bT$6&+5c>a|WJ)F4G-^GjY0H#*tY=UNyYr_q5fsrcjk(c^~e*7Lf`!Jd`)p412 zn|^*hV= zFI4UbwA%X@smDd$cQOiMC%jfitTxTb+#`9`G=2rJDfK!E=5ra|So>lc{X1$~w28i+ z4p&cTGwZ#5VueiXS9O8#;RR$yg7tL9!^)Sz&pZYIzlSh}0}V{LxL$Cu%B4U5_}k}- zm~|CsD<076x@<>m=6w6N?WaThIBP`!u{-;WF)xc=2otx*lwf|5+MkdJePjh(B z9SH+%cHGCMAXNxB{_3^otDWdsV7Ob6n{0 z+&!(;iaHOX__5z_$Qk{%xYV%Ig@7iokGBwR`3642ZP#H#v9QGbWl8<|MS*=@qO@Uj z6+SZ_v9`1paUe5tFN~v(b#J3a_Lx0+;r9giZIx-A5TxdbG>xi#AZ5_z1V}B^n)sxT zz49}eK7EWb6wR!6-qQOrHQHkUvshvq%=G2d&@(#XM*Am1;WbnJ{X_!a{ZkphD$^TQ z=Iskb&}=lBm(RHiwJoGg`*NiQ6#RB$T#LF+>#ef;Jne&MxKPX!#r`&TVEFsp2jnNx>dClzpcPy&G&13a_<0qaR3i+k212~hoQ z8nMk{JP-t04I{GW5gUBqcJW-jSMrlw}>p)ptx?WKuCUV77taMiV zHok9V=6yv+Uts@fMY&A}amC=!Yj}eL@=e%XJ#%?agkt1jWF+10{(E9mHLDa>Ll7Vj zG=3cp%ljIB-6pC}6&`xJ*6WCP|IlglLWJ^?yviI8Ve)?V_i4%n;olzny62_`-|IGi z^=}p_O>Z8M;c4|RExu70E7ePW(HWVS&E$+LL6xSQgB`QfMQJ|4pCTFowA39p5P-|$ zUtM_H2HnP8_RoS~Vwk(FhbG zH41licj%=0a;Ln2STFBvU}Ne&O&%8bYKj!h1FA#sNM`232fX|U3QPp#3C?mN2;hE9 z;)!@5ixSPl<89^7gwhHc2YAX1KJK$#*3`KOMIQ253q7-*RJ5k)zp9GBO|Ga~X*^}US5oN@aG&waHV%vi~r{t^`ptTxb zL}q1W8S7*>7oWwvgV4uFLZ(@k`R*=LO_|Gu`prs~!WQXj-NLIa^2(7IHg>BG^N zc|i{-^=&Cek9dkJFQys|sjG9i>LLz|;yCv{^1i%c*h>8zF91kLvS9HBQi~ZU!JL`B zK8N+U0fr1*6??Ium)AF!6tc1eGhXIYL6IRT7rmKp7+>?%5Pa6zC5)KY$ycF0ZJ`G5nEQDG100U-jLkH8^UE4g6wq?sg%pP=-$&G#bcN`^?w3a6 z((s$6eRKcSEIslW-kk5Qi|5Mg-(xdLF}PxxVh$PuO}#aR6pW1kV4Af!Bqh*btXNNZ z>-4(IUl+L4dw+3LcpGut=qB45O+W)Q5?*zZ2A6rJcg`qkSvWA!j^r2mqKuCm6`Py? z@^T#Ux04HemPGd!Hs7NkZdVn1}8_j`o?)*OKZGS!`ff)gF zG?v-lj$wWNWCcw2Mg2o18D~1?3_b0XzdiKBNkYSDpcv@&kp0POmweJE2ZkIQ3B!a! zIgIoE+Xv?;34kyo^QYjZk+tEqZvq^#QG(OzX4~X+KtsoQoddTWUR(yo8R+ObEF1j<-syWOb>)JQ&Zbdu(sctU%Mt zW&YR0{ttY2TTXYZ?~WNU&cES1Z2q(7SrWDh``!J(JM+Nk$!hu&Y;(7E`ZNKTe0w+% zJc?Qnw2B+%UR}0;cB0Rufa(7-3FF}?629@LgTiEC&2uyL6NxexOp?AKT^aAx3gi(W zao>r>MPw0eQ3>IV02uLsC@>yK_epX6GRg4{NEL2wPPF9=*L2RV3yyK8DhuEK>rmmV z`&Q~#c`lgR&93TdOCja|ewOXmPNRh7!&dMT(1ett#iDr8HZW~VqWW@7fe9B6;7S+? zbC`d4@MEau&mKlOPKd>*10q0c{~^baw6!a*w^sY#0Xim{oOsiXiDOhbG&kl3c$$n1 zMRrD83&QucDSEcV*7LIp8VTA@F<%qe+_c`L;6on(>SjAU^}5c9!BCffT>$VQhe=)z z8(=Ej{5>jhmjB3{xDfj2R@VmHQ!CqjlO4KnuOmvHy3K#po$yp_V;p_MKjh1`(rzj6 zHW956k1yvntz{_g?Xbs`avK(IjlTnsu%htO;D7 z?J#x^EzuvVn&NA=!MEj7cwe5A-Z$Zk2LBZH$~%E* zf`((xH0?`}hs|HA%mtwfOEsZJxxrennkTYcwP#FKO5%Lpc^JXhSpV|ZH$Wr;`}`_( zIP==gd3LYyVtwD|*ZJGi{7~x8{=^bGVqu0RJ`n_BZH9+}kz%-4ZRsImi@rx%=ZEKs zcPnUXo6hbJV>fH;@1|bAHIe0ijYI*&kdT|HkDS$9No9 zCHo=*HWb~U+Dtzxr+Esao}6@|;Pf+E$ay0$kQp#s{wlw+7aIKbMdf`OqhoG*;Tco0 zjrP}VQG#Y2cJuqoJg&5({)S(BA}q9T1lGeWRyu=Je|)I!6a+aj!IP^1({)ZYe&x6w zt3a)Dq^TB+A7CdB0-}#z2Ur$W&h3YVw8==!xONy$uQmDWh-@15iEOt!q2m&?ZLA|w z8loSb(0}7y6Xu0?M5Uf4>VZGluB`wMf2oh;m)ghxVda>3m}4%V)r^0nVQ5V6f3>*) z0&VN!N0~GC^P}vj$`EDMZEmVV;N&RISY2C;$0;2(<{Lt&PKzqRByQdiEHGAbwtbS zPj`Da5%U6k1oEtVzI}QNw;!hT6F+~|@=c@$C4NtO@=xgP?|5MyZAyuCzcvq4rdAv@C06%gZ`9%I);R6UGiGJobfux+<0DLS&|MSG4UH z_~o{^^9>ixMg~mY!-@Fai{xaE4^;qy9iZN15Gbn5ZqHWf>Jc5Rv6(#n8`1NcCsdmG zab*dSXVPaE?)wCalD;$ivF%@nB#7D`@YG04p6ed9m}4iJW|pfVMLE<-c{=-8$e?cH zUdU#mCj4gb zZKA^b9p*9S(}8@tw~1RNPHr7tQr;P+-)D8|sq=*o)G%RGqt> zzP5yf`pVxb)I51D_G~Xp^GNK zVI6sAX)a9s)e{8N3?35YA6aQTXuyszK3ah~CemzA&CII#8F&F#KN41~8I^&_%}6MCNb{W87qAF`zj_Y^szhb> z3p3}KbOxotY|(lD=;)`fYE_*{S}x;f^SW#)SU&5X#o|-R|trpa|L5PS5aa0 zTHw8%SDSVtU4?vyrhnq+^@dgFS)|(y{~(4j%3UEiO-rBM9%`)8(dh33pMLiuurNY# z#10AsQ7%*0Cu_DSAU}P;X(JwA64~Q_^R%d_zSm^6Aux?Pn70PM>9EvLeOX z&w9c)pGmcL22;MO3C_B>=NC0RJpMp8?#ZUf=GWRvy z6RHq3B}=MGVg?9@iKFBpsvnkVh3{Vpp=`CcD=u~@ql{my|6?3ssi3mCOPnjI&E}VC zc@X+Yl>;;DNo0W0`0th!X{?luDhOC{E8N=?!w}K1{V=)+1={m(f`Oc|N=07>}3;z{-(A zm{JL=j?Sro5iecmE2-pWlRf(r%|HEQ7kgwQ9+kt=NBhtQI7OwcZ#3%$Uf%^r2nhjY zoQ08MfC%_X{O9~WcirMZMhn#z^ux4Erx-tf-6bHD)9eH&^L>^jvAd^9A^DCDs?0;k zkm7LE*KjP6`2d17MrQaaLqd_Rka}J$csvUec#hw78<=s(hyR>065~YCVCA9+#Q+; za(*L0IEw!r5P|@-;x33L$Lv9 zcuN8YG&g{<(SeJG18~(b!5yywSqQiLAX0;---;}mF5&b4lg|T?LwKREa{9YX_-zL@ZE?Zqi@HxK^2KO1>0LATu{te=T zprmHtY)bDVfxI1S}KBE7V zznP7KQ8HekWU#W6mw`dr-boV}pMQR==&5=Q5T=_q091jfc;R*jX#&=MQ%~@E@9^?`$v48ks<>(fI(F6L(5ppKy|$HWng*bKOb(4|cMUB&z$#ob#XV z5-mg)gmFIybZf=znm3ZPyUO^GJfxt0kmHjaTZ|sthsxXw&}Y)fOUSg=JhRSR^UjZ- zhqqb}Wsyw4zdnj6@#BAJa#-PdI4_dgafFXh85DsEQ_cT+5)XpZq$fZlBA_9UsE9r6 zEFec5?uqN@QhJ^IzwZrwl-5J`CmVPv{(YDTqEqWR^dI;5hXc~cxP%B3v&~s0`Ct89 z@S`i~a^c%V^N81dDT*ItFS*&IN;@O$EgzX0e7x&}TD=!zS}hTpezBLS>mdX(5< z)8DEI(-o_D)c-UX@dA1MuJ*yc>Hf4|`*B2S_O>w*-tbUwtiu`;W(Ud{HTty@(&x(T(F&;M zJ=?H>6`B7nf-90e8V`WSVp|0oEKB-P2M{}4ZDawzvM&a!y>`Y#jCsD%T_l``@ah(I2nJs~Q|%uSKu@k!m~*8B*IoA{*TgtF<(5sHCGG;n@NE%~Xt(G$^&<87u;}Na zx-8cq0g`uA(&RBFo=-4Y1GUZ<``Zw{xL4jfHkZw~%~wvtGueszcXt)_QwH8g!; z%s&3kSa~R$dO$-%L-)c@_hi7&>{6L_M>OZFkUQu;{sL_bUMStNrt{{&O(Wn~*zPOk zB>dnfszb29NSTf2pqIs68k|p-UrSrxgLHqi?3N-UFa!LHy9n1)=s>`yS+J{MEzS@ zNlfGtpma7kG&LR3JE@wB%rFA*h~~KitlO=IP)ZjN6dQLM6qsry zHkB#cyNh#n`)}bCrN1My*;k)^@>e4gJ`LJK?2)Pwp?4Tl4)4FA0(tvY+#1jOUM)xw zlMz4x-f@g^+yKUN`?Vu)|AwujArnM~Pa@y*Q9S8eS(u{-S%(Z5=R~pRl5ZGDjdqH% zC8rW&{##wOpU_oTIG4WXMk4&%2t1;lWcW5&!yxmOT*!hBcKyTqEcNoO+R2;Q?Yj+W z1-Y4?59fijz4(MIDwGe4-baYf08UCs;r|YefD-Md2ST;=cxwpgW=tR76-dQVAhn^= zG9Wk5lQk%jIR@KNU!UMp6@BfU;r+;y4VQ)D2!Il9HX%yW-9nOzV+m$YKzVaO`B8S7t z$!S2Mz`xw>V(RjE`0>bQp<0y&h~Y=M#jpy!#=dE>`=e_AjSZq6u!Dy1xJf~-7|0F! zPR9|n`e_7D2DIV2H(CESQ}hA>U>n|6`%z?YKEA~)BOVY%y=jPV zT=44R!L?J)736X#csn|lfBJ)o8ixaZclguWgrGO<`TN2FMfO}7;5}d+BlK0yTSH3* z4!=;5rOh85&2|x=46hkNaz?)U8&=bcfh=N_#8BNpZ2v$aVBo;sk^*X`v;4-LU;D>! zM*h12MxXIQy)SfAqE4;jY)wgnppazZkdNNVVF;(PLf^qK$FgY9+VFyBKE7UC|f z`R|?&egV11K3s$rJ6!GvoeW=jV*!-e(wA;x(2=d0E_e_%0x--0o8#~m^H1%AH5Z^B zn!TNPn927*bvaf0pt}zhK0o^V@WlGwwKo(*nQ|Q~4_;>~-8y20`HP>@UJa)3nEnGG z5Hwhs|FcmFG16ZVNb5hL`2Gc1{zWIMM{_OiKewV!hCi}U!VuE?s9wU-QbZ!)+Y^tS zGzp5OSi5iq6hmEr$w}&9DFgoB+i*`q`8TBi^MVS{SKEb8Aw%@K7@XCo(De2A`6%mf&a2#~y1N)+kJLD$1HCP!22)(U}xo2|j?WRzt(11j8Z_*v;P$R+Ug*Gy3VxV4K; zGGUGabnW*`Z}~`ydXL-l9e=GC$pY#z|63vy>E*m=$=j}iWP{sRTh0%H54`t>2xYH% zsk+M&u&pNgMCM@3e)Xc?jBWX-TIR_cQ1Z!RW7!B zBjZX=+^3}?SE)B+$EP+0oi1Fp5blDT?*}nsP>filqXH{ms zxU<$hetC`u)Wi+x|EKL-`y^#aQX+sDYIa{M;V%LqLrOk~lR>u0Q!+pyQSU4zY`?E^ z|5@)C)w6G_=i5YYC5SE_u(7hDNYr}uKT|@DSqF%S++lTIbIk^$a>{~0IH8KNFEy%+ zW#$&!ynpgNJh>6uR~?2c)ZMW+h0OKu231(7L_vETPaR+(P)Zy%0~yGm>E9?@@x!Jy z3PYgS}Q@b}x}E#F27@F+j}0=&Ql4gES&f8acMrPAVlVs9$97`FR))R5wI zc&}KFI1UIewh>3PkhnB7u zS3AT8_*|nexznG|Z*DU0c!K@jsI4J)5#DyNi#|e#`l1Vv1`1)*NVcy0LZ``aL0n8B zecupJ(rhq3u8bW0NIRhKYq$v1li+jp*4hfAd&wxYDE8vn1TQ7S@bTM|I2Ob z8vMOIxA7&_j{AKmD+O@EyXT`|dElt0pED^@IV0m)RPBUs*5jW60>>w1!@_G3aBKzG z_f(KfAPBk}-jQtR*Sroq!*3rbQ_m27e+YdzQjUb<_*k8vc_C)y!@cj5E>NxUhPu&g z@Z2<~esU`)ih+4opWe+K7sbN9n*9@n>#@n3*o z?xoROgDuvhq>jJ;Ve{6i<3roQNfgo5^4Q4(|GNExO2Dr7GjgA2zWuKp_K)K0R(6lv z!l$!zW-+T6mb3gQaAFviTQi{|*t%>{(mhTdy+y;Re4qT@kccy#{b z&zWy~kLO@>*WPj2k#H)|7L&gAJ37DmHQAme#@m;(Y8Nu^`D5vf8sZFW#+lA2!HK=( zJ)#hO6JD*`o~&c*&46d}g=Qj@SsoB5ikC z^1V8E+&<-OzuS_C`p5<<(A6fB`LXT(!kV^0_~hL6PpW4={l%|#xgdh?5EIk~lu8{D z2hiyhv3Yxij_#$Wu>P@7SYsl`-~3;}Ktx{34_NL^Kwin&=?!HDv3elQDbcU*qyYpN z(#yw~f1vFGK-t%CC-qa-4FYHbA^h>bag-I&*qaxwn?Qv|idE$<>1H|Gr6JtUu(he2$eg!N z@HTF@dG1)*y;4fxe)4_ZkpaBHH9hXp9p4|gLrRQyuevRd@gSS}JhRnWqrvm|U@>qM z=yl7RQROTKwQtzP3!zUF)_6Ld#NGA6v~2{J9Dd`h6{%+XsU#qGLh%`fB1Hc?wfayK zN`H4BpDp)npVQuu$DVW1qsBS&AJ2eP%6Qw>;k{)Z$8%HL=Q4(a$Ng2_vHw&vA!1L+9zc8vaX2GtqJ{L-;gvF0IR$em zMQ8@{Qp3+3Quk)TJ$?I<8KmwzD*7#(q<@Mc`dchngW}cRG14(Z6K7{T|LhFXwhqUQ;BET;cYqPcAcMgt6M$V9$(?jHo@Sud$an$U&5F zZ1QNh^ztt)E*d#Ij;<43oSKKnd+WNr$_r}+s_O_x6DZSB10*5Q{ourqq>mTl| zx4y^(cy+9;t@R=*j>3_dmm_m)$k$#937V(sllby&5)Xex^UD-|m|q<(jEd#@DV(of zAd7sSdmS*zUDqJ9|K%O2J2OfdUiK{{b{PCy)pi<;hp~7v1CQj&4-10 zgO<3dqhYH1#-Fa}Q{pjql5>>P6gZH21zLfxZ4$SK4T@7b!|`nWF9b*84Bq8&Eht;9 z*P72x&NUCZ7*@B$`FtE=hz5b}S`|c6Ey+j@D1ZibjJaRlR;{cxAWv z?Nqa>QqV*H-*zzaPvpLMHt~nl(x6?vrPpR?zn7~wow?oj*1TKmx4j71>$hvtC$DLD zUrz0^tiP0792U&dxJxNv@r}Elsjn^aSLUu=9#mD{&9n8|ayIL$!H3s>%KEvbchBFW z%cd?VU83mGF#Dar9*s~w&AnmQRQIOvR+uWsuZ?+|a=TzApXO@q^(r%8=}iv#wCnFq z=K9}JbqU@k99Q%j-}NNk+qLCP)jXfmOO|)@?mHcnynd6({mJisP1_}u7k)|eYHXWK z63eQ)E$ufFi!3CWUY2gw%e>omCv}qEX66aH-k&35f9`Q@Us|NPetVqe8=dX*VxJdn ze`q7b=Dn(UA(2sf&g)cOmQFhNJ#<-aMELJZbA#@to>25@kbW<)&!X01 z%NMJt>1ST)tyX)h@?`DxhbgCHr>S4wv}WC&Nw-!{+Z7$2D}74QAcXTvip=M0%Tp_N zor=k`)t|ra^ySr-+(|R9mB(E=`MX#y(wSw)$!iymzB;^c*>%&^*7HxTnRga=soSZT zdDl+9s;r!v8hk6POtzBaig4pRp7eWF(<8gufvNHPu6xs-=e{;mnHzJyGKE+8L0j}; z@%8-e^UCL5HhMiR>sD3Rve&yVZ#{Q1*CO8c+qSr^Z#CN;)(X5>tGG5yUw3<+CfhaL z%bP;hZ?jvgJU67BWyiy74_)6r)_nSxttxn0`0?HE^5(uydHVgP+HE$V?Lv)Leti43 zWA|;f-RqX``95>)^P-fw!Vi{3KNsII-*5f){gdxqd%gVdB1sOBNe=nEW%;i~g_P8J w!5uhoe-Jcg1nPN%MiEAtgE$;km@@t6ukO)1^!cY^83Pb_y85}Sb4q9e0FIsP9{>OV literal 0 HcmV?d00001 diff --git a/animations/step_05_b/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png b/animations/step_05_b/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png new file mode 100644 index 0000000000000000000000000000000000000000..2f1632cfddf3d9dade342351e627a0a75609fb46 GIT binary patch literal 2218 zcmV;b2vzrqP)Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91K%fHv1ONa40RR91KmY&$07g+lumAuE6iGxuRCodHTWf3-RTMruyW6Fu zQYeUM04eX6D5c0FCjKKPrco1(K`<0SL=crI{PC3-^hZU0kQie$gh-5!7z6SH6Q0J% zqot*`H1q{R5fHFYS}dje@;kG=v$L0(yY0?wY2%*c?A&{2?!D*x?m71{of2gv!$5|C z3>qG_BW}7K_yUcT3A5C6QD<+{aq?x;MAUyAiJn#Jv8_zZtQ{P zTRzbL3U9!qVuZzS$xKU10KiW~Bgdcv1-!uAhQxf3a7q+dU6lj?yoO4Lq4TUN4}h{N z*fIM=SS8|C2$(T>w$`t@3Tka!(r!7W`x z-isCVgQD^mG-MJ;XtJuK3V{Vy72GQ83KRWsHU?e*wrhKk=ApIYeDqLi;JI1e zuvv}5^Dc=k7F7?nm3nIw$NVmU-+R>> zyqOR$-2SDpJ}Pt;^RkJytDVXNTsu|mI1`~G7yw`EJR?VkGfNdqK9^^8P`JdtTV&tX4CNcV4 z&N06nZa??Fw1AgQOUSE2AmPE@WO(Fvo`%m`cDgiv(fAeRA%3AGXUbsGw{7Q`cY;1BI#ac3iN$$Hw z0LT0;xc%=q)me?Y*$xI@GRAw?+}>=9D+KTk??-HJ4=A>`V&vKFS75@MKdSF1JTq{S zc1!^8?YA|t+uKigaq!sT;Z!&0F2=k7F0PIU;F$leJLaw2UI6FL^w}OG&!;+b%ya1c z1n+6-inU<0VM-Y_s5iTElq)ThyF?StVcebpGI znw#+zLx2@ah{$_2jn+@}(zJZ{+}_N9BM;z)0yr|gF-4=Iyu@hI*Lk=-A8f#bAzc9f z`Kd6K--x@t04swJVC3JK1cHY-Hq+=|PN-VO;?^_C#;coU6TDP7Bt`;{JTG;!+jj(` zw5cLQ-(Cz-Tlb`A^w7|R56Ce;Wmr0)$KWOUZ6ai0PhzPeHwdl0H(etP zUV`va_i0s-4#DkNM8lUlqI7>YQLf)(lz9Q3Uw`)nc(z3{m5ZE77Ul$V%m)E}3&8L0 z-XaU|eB~Is08eORPk;=<>!1w)Kf}FOVS2l&9~A+@R#koFJ$Czd%Y(ENTV&A~U(IPI z;UY+gf+&6ioZ=roly<0Yst8ck>(M=S?B-ys3mLdM&)ex!hbt+ol|T6CTS+Sc0jv(& z7ijdvFwBq;0a{%3GGwkDKTeG`b+lyj0jjS1OMkYnepCdoosNY`*zmBIo*981BU%%U z@~$z0V`OVtIbEx5pa|Tct|Lg#ZQf5OYMUMRD>Wdxm5SAqV2}3!ceE-M2 z@O~lQ0OiKQp}o9I;?uxCgYVV?FH|?Riri*U$Zi_`V2eiA>l zdSm6;SEm6#T+SpcE8Ro_f2AwxzI z44hfe^WE3!h@W3RDyA_H440cpmYkv*)6m1XazTqw%=E5Xv7^@^^T7Q2wxr+Z2kVYr + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/animations/step_05_b/macos/Runner/Configs/AppInfo.xcconfig b/animations/step_05_b/macos/Runner/Configs/AppInfo.xcconfig new file mode 100644 index 0000000000..28c7905763 --- /dev/null +++ b/animations/step_05_b/macos/Runner/Configs/AppInfo.xcconfig @@ -0,0 +1,14 @@ +// Application-level settings for the Runner target. +// +// This may be replaced with something auto-generated from metadata (e.g., pubspec.yaml) in the +// future. If not, the values below would default to using the project name when this becomes a +// 'flutter create' template. + +// The application's name. By default this is also the title of the Flutter window. +PRODUCT_NAME = quiz + +// The application's bundle identifier +PRODUCT_BUNDLE_IDENTIFIER = com.example.quiz + +// The copyright displayed in application information +PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved. diff --git a/animations/step_05_b/macos/Runner/Configs/Debug.xcconfig b/animations/step_05_b/macos/Runner/Configs/Debug.xcconfig new file mode 100644 index 0000000000..36b0fd9464 --- /dev/null +++ b/animations/step_05_b/macos/Runner/Configs/Debug.xcconfig @@ -0,0 +1,2 @@ +#include "../../Flutter/Flutter-Debug.xcconfig" +#include "Warnings.xcconfig" diff --git a/animations/step_05_b/macos/Runner/Configs/Release.xcconfig b/animations/step_05_b/macos/Runner/Configs/Release.xcconfig new file mode 100644 index 0000000000..dff4f49561 --- /dev/null +++ b/animations/step_05_b/macos/Runner/Configs/Release.xcconfig @@ -0,0 +1,2 @@ +#include "../../Flutter/Flutter-Release.xcconfig" +#include "Warnings.xcconfig" diff --git a/animations/step_05_b/macos/Runner/Configs/Warnings.xcconfig b/animations/step_05_b/macos/Runner/Configs/Warnings.xcconfig new file mode 100644 index 0000000000..42bcbf4780 --- /dev/null +++ b/animations/step_05_b/macos/Runner/Configs/Warnings.xcconfig @@ -0,0 +1,13 @@ +WARNING_CFLAGS = -Wall -Wconditional-uninitialized -Wnullable-to-nonnull-conversion -Wmissing-method-return-type -Woverlength-strings +GCC_WARN_UNDECLARED_SELECTOR = YES +CLANG_UNDEFINED_BEHAVIOR_SANITIZER_NULLABILITY = YES +CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE +CLANG_WARN__DUPLICATE_METHOD_MATCH = YES +CLANG_WARN_PRAGMA_PACK = YES +CLANG_WARN_STRICT_PROTOTYPES = YES +CLANG_WARN_COMMA = YES +GCC_WARN_STRICT_SELECTOR_MATCH = YES +CLANG_WARN_OBJC_REPEATED_USE_OF_WEAK = YES +CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES +GCC_WARN_SHADOW = YES +CLANG_WARN_UNREACHABLE_CODE = YES diff --git a/animations/step_05_b/macos/Runner/DebugProfile.entitlements b/animations/step_05_b/macos/Runner/DebugProfile.entitlements new file mode 100644 index 0000000000..dddb8a30c8 --- /dev/null +++ b/animations/step_05_b/macos/Runner/DebugProfile.entitlements @@ -0,0 +1,12 @@ + + + + + com.apple.security.app-sandbox + + com.apple.security.cs.allow-jit + + com.apple.security.network.server + + + diff --git a/animations/step_05_b/macos/Runner/Info.plist b/animations/step_05_b/macos/Runner/Info.plist new file mode 100644 index 0000000000..4789daa6a4 --- /dev/null +++ b/animations/step_05_b/macos/Runner/Info.plist @@ -0,0 +1,32 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIconFile + + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + APPL + CFBundleShortVersionString + $(FLUTTER_BUILD_NAME) + CFBundleVersion + $(FLUTTER_BUILD_NUMBER) + LSMinimumSystemVersion + $(MACOSX_DEPLOYMENT_TARGET) + NSHumanReadableCopyright + $(PRODUCT_COPYRIGHT) + NSMainNibFile + MainMenu + NSPrincipalClass + NSApplication + + diff --git a/animations/step_05_b/macos/Runner/MainFlutterWindow.swift b/animations/step_05_b/macos/Runner/MainFlutterWindow.swift new file mode 100644 index 0000000000..3cc05eb234 --- /dev/null +++ b/animations/step_05_b/macos/Runner/MainFlutterWindow.swift @@ -0,0 +1,15 @@ +import Cocoa +import FlutterMacOS + +class MainFlutterWindow: NSWindow { + override func awakeFromNib() { + let flutterViewController = FlutterViewController() + let windowFrame = self.frame + self.contentViewController = flutterViewController + self.setFrame(windowFrame, display: true) + + RegisterGeneratedPlugins(registry: flutterViewController) + + super.awakeFromNib() + } +} diff --git a/animations/step_05_b/macos/Runner/Release.entitlements b/animations/step_05_b/macos/Runner/Release.entitlements new file mode 100644 index 0000000000..852fa1a472 --- /dev/null +++ b/animations/step_05_b/macos/Runner/Release.entitlements @@ -0,0 +1,8 @@ + + + + + com.apple.security.app-sandbox + + + diff --git a/animations/step_05_b/macos/RunnerTests/RunnerTests.swift b/animations/step_05_b/macos/RunnerTests/RunnerTests.swift new file mode 100644 index 0000000000..61f3bd1fc5 --- /dev/null +++ b/animations/step_05_b/macos/RunnerTests/RunnerTests.swift @@ -0,0 +1,12 @@ +import Cocoa +import FlutterMacOS +import XCTest + +class RunnerTests: XCTestCase { + + func testExample() { + // If you add code to the Runner application, consider adding tests here. + // See https://developer.apple.com/documentation/xctest for more information about using XCTest. + } + +} diff --git a/animations/step_05_b/pubspec.yaml b/animations/step_05_b/pubspec.yaml new file mode 100644 index 0000000000..52735dfa55 --- /dev/null +++ b/animations/step_05_b/pubspec.yaml @@ -0,0 +1,21 @@ +name: quiz +description: A quiz app for demonstrating animation effects in Flutter +publish_to: "none" +version: 1.0.0 + +environment: + sdk: ^3.5.1 + +dependencies: + animations: ^2.0.0 + flutter: + sdk: flutter + +dev_dependencies: + flutter_test: + sdk: flutter + flutter_lints: ^4.0.0 + + +flutter: + uses-material-design: true diff --git a/animations/step_05_b/web/favicon.png b/animations/step_05_b/web/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..8aaa46ac1ae21512746f852a42ba87e4165dfdd1 GIT binary patch literal 917 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|I14-?iy0X7 zltGxWVyS%@P(fs7NJL45ua8x7ey(0(N`6wRUPW#JP&EUCO@$SZnVVXYs8ErclUHn2 zVXFjIVFhG^g!Ppaz)DK8ZIvQ?0~DO|i&7O#^-S~(l1AfjnEK zjFOT9D}DX)@^Za$W4-*MbbUihOG|wNBYh(yU7!lx;>x^|#0uTKVr7USFmqf|i<65o z3raHc^AtelCMM;Vme?vOfh>Xph&xL%(-1c06+^uR^q@XSM&D4+Kp$>4P^%3{)XKjo zGZknv$b36P8?Z_gF{nK@`XI}Z90TzwSQO}0J1!f2c(B=V`5aP@1P1a|PZ!4!3&Gl8 zTYqUsf!gYFyJnXpu0!n&N*SYAX-%d(5gVjrHJWqXQshj@!Zm{!01WsQrH~9=kTxW#6SvuapgMqt>$=j#%eyGrQzr zP{L-3gsMA^$I1&gsBAEL+vxi1*Igl=8#8`5?A-T5=z-sk46WA1IUT)AIZHx1rdUrf zVJrJn<74DDw`j)Ki#gt}mIT-Q`XRa2-jQXQoI%w`nb|XblvzK${ZzlV)m-XcwC(od z71_OEC5Bt9GEXosOXaPTYOia#R4ID2TiU~`zVMl08TV_C%DnU4^+HE>9(CE4D6?Fz oujB08i7adh9xk7*FX66dWH6F5TM;?E2b5PlUHx3vIVCg!0Dx9vYXATM literal 0 HcmV?d00001 diff --git a/animations/step_05_b/web/icons/Icon-192.png b/animations/step_05_b/web/icons/Icon-192.png new file mode 100644 index 0000000000000000000000000000000000000000..b749bfef07473333cf1dd31e9eed89862a5d52aa GIT binary patch literal 5292 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 literal 0 HcmV?d00001 diff --git a/animations/step_05_b/web/icons/Icon-512.png b/animations/step_05_b/web/icons/Icon-512.png new file mode 100644 index 0000000000000000000000000000000000000000..88cfd48dff1169879ba46840804b412fe02fefd6 GIT binary patch literal 8252 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 literal 0 HcmV?d00001 diff --git a/animations/step_05_b/web/icons/Icon-maskable-192.png b/animations/step_05_b/web/icons/Icon-maskable-192.png new file mode 100644 index 0000000000000000000000000000000000000000..eb9b4d76e525556d5d89141648c724331630325d GIT binary patch literal 5594 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 X>c!)3PgKfL&lX^$Z>Cpu&6)6jvi^Z! literal 0 HcmV?d00001 diff --git a/animations/step_05_b/web/icons/Icon-maskable-512.png b/animations/step_05_b/web/icons/Icon-maskable-512.png new file mode 100644 index 0000000000000000000000000000000000000000..d69c56691fbdb0b7efa65097c7cc1edac12a6d3e GIT binary patch literal 20998 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 MPgg&ebxsLQ025IeI{*Lx literal 0 HcmV?d00001 diff --git a/animations/step_05_b/web/index.html b/animations/step_05_b/web/index.html new file mode 100644 index 0000000000..89656d9a06 --- /dev/null +++ b/animations/step_05_b/web/index.html @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + quiz + + + + + + diff --git a/animations/step_05_b/web/manifest.json b/animations/step_05_b/web/manifest.json new file mode 100644 index 0000000000..467748be48 --- /dev/null +++ b/animations/step_05_b/web/manifest.json @@ -0,0 +1,35 @@ +{ + "name": "quiz", + "short_name": "quiz", + "start_url": ".", + "display": "standalone", + "background_color": "#0175C2", + "theme_color": "#0175C2", + "description": "A new Flutter project.", + "orientation": "portrait-primary", + "prefer_related_applications": false, + "icons": [ + { + "src": "icons/Icon-192.png", + "sizes": "192x192", + "type": "image/png" + }, + { + "src": "icons/Icon-512.png", + "sizes": "512x512", + "type": "image/png" + }, + { + "src": "icons/Icon-maskable-192.png", + "sizes": "192x192", + "type": "image/png", + "purpose": "maskable" + }, + { + "src": "icons/Icon-maskable-512.png", + "sizes": "512x512", + "type": "image/png", + "purpose": "maskable" + } + ] +} diff --git a/animations/step_05_b/windows/.gitignore b/animations/step_05_b/windows/.gitignore new file mode 100644 index 0000000000..d492d0d98c --- /dev/null +++ b/animations/step_05_b/windows/.gitignore @@ -0,0 +1,17 @@ +flutter/ephemeral/ + +# Visual Studio user-specific files. +*.suo +*.user +*.userosscache +*.sln.docstates + +# Visual Studio build-related files. +x64/ +x86/ + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!*.[Cc]ache/ diff --git a/animations/step_05_b/windows/CMakeLists.txt b/animations/step_05_b/windows/CMakeLists.txt new file mode 100644 index 0000000000..e65947e844 --- /dev/null +++ b/animations/step_05_b/windows/CMakeLists.txt @@ -0,0 +1,108 @@ +# Project-level configuration. +cmake_minimum_required(VERSION 3.14) +project(quiz LANGUAGES CXX) + +# The name of the executable created for the application. Change this to change +# the on-disk name of your application. +set(BINARY_NAME "quiz") + +# Explicitly opt in to modern CMake behaviors to avoid warnings with recent +# versions of CMake. +cmake_policy(VERSION 3.14...3.25) + +# Define build configuration option. +get_property(IS_MULTICONFIG GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG) +if(IS_MULTICONFIG) + set(CMAKE_CONFIGURATION_TYPES "Debug;Profile;Release" + CACHE STRING "" FORCE) +else() + if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) + set(CMAKE_BUILD_TYPE "Debug" CACHE + STRING "Flutter build mode" FORCE) + set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS + "Debug" "Profile" "Release") + endif() +endif() +# Define settings for the Profile build mode. +set(CMAKE_EXE_LINKER_FLAGS_PROFILE "${CMAKE_EXE_LINKER_FLAGS_RELEASE}") +set(CMAKE_SHARED_LINKER_FLAGS_PROFILE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE}") +set(CMAKE_C_FLAGS_PROFILE "${CMAKE_C_FLAGS_RELEASE}") +set(CMAKE_CXX_FLAGS_PROFILE "${CMAKE_CXX_FLAGS_RELEASE}") + +# Use Unicode for all projects. +add_definitions(-DUNICODE -D_UNICODE) + +# Compilation settings that should be applied to most targets. +# +# Be cautious about adding new options here, as plugins use this function by +# default. In most cases, you should add new options to specific targets instead +# of modifying this function. +function(APPLY_STANDARD_SETTINGS TARGET) + target_compile_features(${TARGET} PUBLIC cxx_std_17) + target_compile_options(${TARGET} PRIVATE /W4 /WX /wd"4100") + target_compile_options(${TARGET} PRIVATE /EHsc) + target_compile_definitions(${TARGET} PRIVATE "_HAS_EXCEPTIONS=0") + target_compile_definitions(${TARGET} PRIVATE "$<$:_DEBUG>") +endfunction() + +# Flutter library and tool build rules. +set(FLUTTER_MANAGED_DIR "${CMAKE_CURRENT_SOURCE_DIR}/flutter") +add_subdirectory(${FLUTTER_MANAGED_DIR}) + +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") + + +# Generated plugin build rules, which manage building the plugins and adding +# them to the application. +include(flutter/generated_plugins.cmake) + + +# === Installation === +# Support files are copied into place next to the executable, so that it can +# run in place. This is done instead of making a separate bundle (as on Linux) +# so that building and running from within Visual Studio will work. +set(BUILD_BUNDLE_DIR "$") +# Make the "install" step default, as it's required to run. +set(CMAKE_VS_INCLUDE_INSTALL_TO_DEFAULT_BUILD 1) +if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) + set(CMAKE_INSTALL_PREFIX "${BUILD_BUNDLE_DIR}" CACHE PATH "..." FORCE) +endif() + +set(INSTALL_BUNDLE_DATA_DIR "${CMAKE_INSTALL_PREFIX}/data") +set(INSTALL_BUNDLE_LIB_DIR "${CMAKE_INSTALL_PREFIX}") + +install(TARGETS ${BINARY_NAME} RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_ICU_DATA_FILE}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) + +if(PLUGIN_BUNDLED_LIBRARIES) + install(FILES "${PLUGIN_BUNDLED_LIBRARIES}" + DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) +endif() + +# Copy the native assets provided by the build.dart from all packages. +set(NATIVE_ASSETS_DIR "${PROJECT_BUILD_DIR}native_assets/windows/") +install(DIRECTORY "${NATIVE_ASSETS_DIR}" + DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) + +# Fully re-copy the assets directory on each build to avoid having stale files +# from a previous install. +set(FLUTTER_ASSET_DIR_NAME "flutter_assets") +install(CODE " + file(REMOVE_RECURSE \"${INSTALL_BUNDLE_DATA_DIR}/${FLUTTER_ASSET_DIR_NAME}\") + " COMPONENT Runtime) +install(DIRECTORY "${PROJECT_BUILD_DIR}/${FLUTTER_ASSET_DIR_NAME}" + DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" COMPONENT Runtime) + +# Install the AOT library on non-Debug builds only. +install(FILES "${AOT_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" + CONFIGURATIONS Profile;Release + COMPONENT Runtime) diff --git a/animations/step_05_b/windows/flutter/CMakeLists.txt b/animations/step_05_b/windows/flutter/CMakeLists.txt new file mode 100644 index 0000000000..903f4899d6 --- /dev/null +++ b/animations/step_05_b/windows/flutter/CMakeLists.txt @@ -0,0 +1,109 @@ +# This file controls Flutter-level build steps. It should not be edited. +cmake_minimum_required(VERSION 3.14) + +set(EPHEMERAL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/ephemeral") + +# Configuration provided via flutter tool. +include(${EPHEMERAL_DIR}/generated_config.cmake) + +# TODO: Move the rest of this into files in ephemeral. See +# https://github.com/flutter/flutter/issues/57146. +set(WRAPPER_ROOT "${EPHEMERAL_DIR}/cpp_client_wrapper") + +# Set fallback configurations for older versions of the flutter tool. +if (NOT DEFINED FLUTTER_TARGET_PLATFORM) + set(FLUTTER_TARGET_PLATFORM "windows-x64") +endif() + +# === Flutter Library === +set(FLUTTER_LIBRARY "${EPHEMERAL_DIR}/flutter_windows.dll") + +# Published to parent scope for install step. +set(FLUTTER_LIBRARY ${FLUTTER_LIBRARY} PARENT_SCOPE) +set(FLUTTER_ICU_DATA_FILE "${EPHEMERAL_DIR}/icudtl.dat" PARENT_SCOPE) +set(PROJECT_BUILD_DIR "${PROJECT_DIR}/build/" PARENT_SCOPE) +set(AOT_LIBRARY "${PROJECT_DIR}/build/windows/app.so" PARENT_SCOPE) + +list(APPEND FLUTTER_LIBRARY_HEADERS + "flutter_export.h" + "flutter_windows.h" + "flutter_messenger.h" + "flutter_plugin_registrar.h" + "flutter_texture_registrar.h" +) +list(TRANSFORM FLUTTER_LIBRARY_HEADERS PREPEND "${EPHEMERAL_DIR}/") +add_library(flutter INTERFACE) +target_include_directories(flutter INTERFACE + "${EPHEMERAL_DIR}" +) +target_link_libraries(flutter INTERFACE "${FLUTTER_LIBRARY}.lib") +add_dependencies(flutter flutter_assemble) + +# === Wrapper === +list(APPEND CPP_WRAPPER_SOURCES_CORE + "core_implementations.cc" + "standard_codec.cc" +) +list(TRANSFORM CPP_WRAPPER_SOURCES_CORE PREPEND "${WRAPPER_ROOT}/") +list(APPEND CPP_WRAPPER_SOURCES_PLUGIN + "plugin_registrar.cc" +) +list(TRANSFORM CPP_WRAPPER_SOURCES_PLUGIN PREPEND "${WRAPPER_ROOT}/") +list(APPEND CPP_WRAPPER_SOURCES_APP + "flutter_engine.cc" + "flutter_view_controller.cc" +) +list(TRANSFORM CPP_WRAPPER_SOURCES_APP PREPEND "${WRAPPER_ROOT}/") + +# Wrapper sources needed for a plugin. +add_library(flutter_wrapper_plugin STATIC + ${CPP_WRAPPER_SOURCES_CORE} + ${CPP_WRAPPER_SOURCES_PLUGIN} +) +apply_standard_settings(flutter_wrapper_plugin) +set_target_properties(flutter_wrapper_plugin PROPERTIES + POSITION_INDEPENDENT_CODE ON) +set_target_properties(flutter_wrapper_plugin PROPERTIES + CXX_VISIBILITY_PRESET hidden) +target_link_libraries(flutter_wrapper_plugin PUBLIC flutter) +target_include_directories(flutter_wrapper_plugin PUBLIC + "${WRAPPER_ROOT}/include" +) +add_dependencies(flutter_wrapper_plugin flutter_assemble) + +# Wrapper sources needed for the runner. +add_library(flutter_wrapper_app STATIC + ${CPP_WRAPPER_SOURCES_CORE} + ${CPP_WRAPPER_SOURCES_APP} +) +apply_standard_settings(flutter_wrapper_app) +target_link_libraries(flutter_wrapper_app PUBLIC flutter) +target_include_directories(flutter_wrapper_app PUBLIC + "${WRAPPER_ROOT}/include" +) +add_dependencies(flutter_wrapper_app flutter_assemble) + +# === Flutter tool backend === +# _phony_ is a non-existent file to force this command to run every time, +# since currently there's no way to get a full input/output list from the +# flutter tool. +set(PHONY_OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/_phony_") +set_source_files_properties("${PHONY_OUTPUT}" PROPERTIES SYMBOLIC TRUE) +add_custom_command( + OUTPUT ${FLUTTER_LIBRARY} ${FLUTTER_LIBRARY_HEADERS} + ${CPP_WRAPPER_SOURCES_CORE} ${CPP_WRAPPER_SOURCES_PLUGIN} + ${CPP_WRAPPER_SOURCES_APP} + ${PHONY_OUTPUT} + COMMAND ${CMAKE_COMMAND} -E env + ${FLUTTER_TOOL_ENVIRONMENT} + "${FLUTTER_ROOT}/packages/flutter_tools/bin/tool_backend.bat" + ${FLUTTER_TARGET_PLATFORM} $ + VERBATIM +) +add_custom_target(flutter_assemble DEPENDS + "${FLUTTER_LIBRARY}" + ${FLUTTER_LIBRARY_HEADERS} + ${CPP_WRAPPER_SOURCES_CORE} + ${CPP_WRAPPER_SOURCES_PLUGIN} + ${CPP_WRAPPER_SOURCES_APP} +) diff --git a/animations/step_05_b/windows/flutter/generated_plugin_registrant.cc b/animations/step_05_b/windows/flutter/generated_plugin_registrant.cc new file mode 100644 index 0000000000..8b6d4680af --- /dev/null +++ b/animations/step_05_b/windows/flutter/generated_plugin_registrant.cc @@ -0,0 +1,11 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#include "generated_plugin_registrant.h" + + +void RegisterPlugins(flutter::PluginRegistry* registry) { +} diff --git a/animations/step_05_b/windows/flutter/generated_plugin_registrant.h b/animations/step_05_b/windows/flutter/generated_plugin_registrant.h new file mode 100644 index 0000000000..dc139d85a9 --- /dev/null +++ b/animations/step_05_b/windows/flutter/generated_plugin_registrant.h @@ -0,0 +1,15 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#ifndef GENERATED_PLUGIN_REGISTRANT_ +#define GENERATED_PLUGIN_REGISTRANT_ + +#include + +// Registers Flutter plugins. +void RegisterPlugins(flutter::PluginRegistry* registry); + +#endif // GENERATED_PLUGIN_REGISTRANT_ diff --git a/animations/step_05_b/windows/flutter/generated_plugins.cmake b/animations/step_05_b/windows/flutter/generated_plugins.cmake new file mode 100644 index 0000000000..b93c4c30c1 --- /dev/null +++ b/animations/step_05_b/windows/flutter/generated_plugins.cmake @@ -0,0 +1,23 @@ +# +# Generated file, do not edit. +# + +list(APPEND FLUTTER_PLUGIN_LIST +) + +list(APPEND FLUTTER_FFI_PLUGIN_LIST +) + +set(PLUGIN_BUNDLED_LIBRARIES) + +foreach(plugin ${FLUTTER_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${plugin}/windows plugins/${plugin}) + target_link_libraries(${BINARY_NAME} PRIVATE ${plugin}_plugin) + list(APPEND PLUGIN_BUNDLED_LIBRARIES $) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${plugin}_bundled_libraries}) +endforeach(plugin) + +foreach(ffi_plugin ${FLUTTER_FFI_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${ffi_plugin}/windows plugins/${ffi_plugin}) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${ffi_plugin}_bundled_libraries}) +endforeach(ffi_plugin) diff --git a/animations/step_05_b/windows/runner/CMakeLists.txt b/animations/step_05_b/windows/runner/CMakeLists.txt new file mode 100644 index 0000000000..394917c053 --- /dev/null +++ b/animations/step_05_b/windows/runner/CMakeLists.txt @@ -0,0 +1,40 @@ +cmake_minimum_required(VERSION 3.14) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} WIN32 + "flutter_window.cpp" + "main.cpp" + "utils.cpp" + "win32_window.cpp" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" + "Runner.rc" + "runner.exe.manifest" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the build version. +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION=\"${FLUTTER_VERSION}\"") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_MAJOR=${FLUTTER_VERSION_MAJOR}") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_MINOR=${FLUTTER_VERSION_MINOR}") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_PATCH=${FLUTTER_VERSION_PATCH}") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_BUILD=${FLUTTER_VERSION_BUILD}") + +# Disable Windows macros that collide with C++ standard library functions. +target_compile_definitions(${BINARY_NAME} PRIVATE "NOMINMAX") + +# Add dependency libraries and include directories. Add any application-specific +# dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter flutter_wrapper_app) +target_link_libraries(${BINARY_NAME} PRIVATE "dwmapi.lib") +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") + +# Run the Flutter tool portions of the build. This must not be removed. +add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/animations/step_05_b/windows/runner/Runner.rc b/animations/step_05_b/windows/runner/Runner.rc new file mode 100644 index 0000000000..f0d8342b40 --- /dev/null +++ b/animations/step_05_b/windows/runner/Runner.rc @@ -0,0 +1,121 @@ +// Microsoft Visual C++ generated resource script. +// +#pragma code_page(65001) +#include "resource.h" + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#include "winres.h" + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// English (United States) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE +BEGIN + "resource.h\0" +END + +2 TEXTINCLUDE +BEGIN + "#include ""winres.h""\r\n" + "\0" +END + +3 TEXTINCLUDE +BEGIN + "\r\n" + "\0" +END + +#endif // APSTUDIO_INVOKED + + +///////////////////////////////////////////////////////////////////////////// +// +// Icon +// + +// Icon with lowest ID value placed first to ensure application icon +// remains consistent on all systems. +IDI_APP_ICON ICON "resources\\app_icon.ico" + + +///////////////////////////////////////////////////////////////////////////// +// +// Version +// + +#if defined(FLUTTER_VERSION_MAJOR) && defined(FLUTTER_VERSION_MINOR) && defined(FLUTTER_VERSION_PATCH) && defined(FLUTTER_VERSION_BUILD) +#define VERSION_AS_NUMBER FLUTTER_VERSION_MAJOR,FLUTTER_VERSION_MINOR,FLUTTER_VERSION_PATCH,FLUTTER_VERSION_BUILD +#else +#define VERSION_AS_NUMBER 1,0,0,0 +#endif + +#if defined(FLUTTER_VERSION) +#define VERSION_AS_STRING FLUTTER_VERSION +#else +#define VERSION_AS_STRING "1.0.0" +#endif + +VS_VERSION_INFO VERSIONINFO + FILEVERSION VERSION_AS_NUMBER + PRODUCTVERSION VERSION_AS_NUMBER + FILEFLAGSMASK VS_FFI_FILEFLAGSMASK +#ifdef _DEBUG + FILEFLAGS VS_FF_DEBUG +#else + FILEFLAGS 0x0L +#endif + FILEOS VOS__WINDOWS32 + FILETYPE VFT_APP + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904e4" + BEGIN + VALUE "CompanyName", "com.example" "\0" + VALUE "FileDescription", "quiz" "\0" + VALUE "FileVersion", VERSION_AS_STRING "\0" + VALUE "InternalName", "quiz" "\0" + VALUE "LegalCopyright", "Copyright (C) 2024 com.example. All rights reserved." "\0" + VALUE "OriginalFilename", "quiz.exe" "\0" + VALUE "ProductName", "quiz" "\0" + VALUE "ProductVersion", VERSION_AS_STRING "\0" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x409, 1252 + END +END + +#endif // English (United States) resources +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// + + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED diff --git a/animations/step_05_b/windows/runner/flutter_window.cpp b/animations/step_05_b/windows/runner/flutter_window.cpp new file mode 100644 index 0000000000..955ee3038f --- /dev/null +++ b/animations/step_05_b/windows/runner/flutter_window.cpp @@ -0,0 +1,71 @@ +#include "flutter_window.h" + +#include + +#include "flutter/generated_plugin_registrant.h" + +FlutterWindow::FlutterWindow(const flutter::DartProject& project) + : project_(project) {} + +FlutterWindow::~FlutterWindow() {} + +bool FlutterWindow::OnCreate() { + if (!Win32Window::OnCreate()) { + return false; + } + + RECT frame = GetClientArea(); + + // The size here must match the window dimensions to avoid unnecessary surface + // creation / destruction in the startup path. + flutter_controller_ = std::make_unique( + frame.right - frame.left, frame.bottom - frame.top, project_); + // Ensure that basic setup of the controller was successful. + if (!flutter_controller_->engine() || !flutter_controller_->view()) { + return false; + } + RegisterPlugins(flutter_controller_->engine()); + SetChildContent(flutter_controller_->view()->GetNativeWindow()); + + flutter_controller_->engine()->SetNextFrameCallback([&]() { + this->Show(); + }); + + // Flutter can complete the first frame before the "show window" callback is + // registered. The following call ensures a frame is pending to ensure the + // window is shown. It is a no-op if the first frame hasn't completed yet. + flutter_controller_->ForceRedraw(); + + return true; +} + +void FlutterWindow::OnDestroy() { + if (flutter_controller_) { + flutter_controller_ = nullptr; + } + + Win32Window::OnDestroy(); +} + +LRESULT +FlutterWindow::MessageHandler(HWND hwnd, UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept { + // Give Flutter, including plugins, an opportunity to handle window messages. + if (flutter_controller_) { + std::optional result = + flutter_controller_->HandleTopLevelWindowProc(hwnd, message, wparam, + lparam); + if (result) { + return *result; + } + } + + switch (message) { + case WM_FONTCHANGE: + flutter_controller_->engine()->ReloadSystemFonts(); + break; + } + + return Win32Window::MessageHandler(hwnd, message, wparam, lparam); +} diff --git a/animations/step_05_b/windows/runner/flutter_window.h b/animations/step_05_b/windows/runner/flutter_window.h new file mode 100644 index 0000000000..6da0652f05 --- /dev/null +++ b/animations/step_05_b/windows/runner/flutter_window.h @@ -0,0 +1,33 @@ +#ifndef RUNNER_FLUTTER_WINDOW_H_ +#define RUNNER_FLUTTER_WINDOW_H_ + +#include +#include + +#include + +#include "win32_window.h" + +// A window that does nothing but host a Flutter view. +class FlutterWindow : public Win32Window { + public: + // Creates a new FlutterWindow hosting a Flutter view running |project|. + explicit FlutterWindow(const flutter::DartProject& project); + virtual ~FlutterWindow(); + + protected: + // Win32Window: + bool OnCreate() override; + void OnDestroy() override; + LRESULT MessageHandler(HWND window, UINT const message, WPARAM const wparam, + LPARAM const lparam) noexcept override; + + private: + // The project to run. + flutter::DartProject project_; + + // The Flutter instance hosted by this window. + std::unique_ptr flutter_controller_; +}; + +#endif // RUNNER_FLUTTER_WINDOW_H_ diff --git a/animations/step_05_b/windows/runner/main.cpp b/animations/step_05_b/windows/runner/main.cpp new file mode 100644 index 0000000000..cc4e09820c --- /dev/null +++ b/animations/step_05_b/windows/runner/main.cpp @@ -0,0 +1,43 @@ +#include +#include +#include + +#include "flutter_window.h" +#include "utils.h" + +int APIENTRY wWinMain(_In_ HINSTANCE instance, _In_opt_ HINSTANCE prev, + _In_ wchar_t *command_line, _In_ int show_command) { + // Attach to console when present (e.g., 'flutter run') or create a + // new console when running with a debugger. + if (!::AttachConsole(ATTACH_PARENT_PROCESS) && ::IsDebuggerPresent()) { + CreateAndAttachConsole(); + } + + // Initialize COM, so that it is available for use in the library and/or + // plugins. + ::CoInitializeEx(nullptr, COINIT_APARTMENTTHREADED); + + flutter::DartProject project(L"data"); + + std::vector command_line_arguments = + GetCommandLineArguments(); + + project.set_dart_entrypoint_arguments(std::move(command_line_arguments)); + + FlutterWindow window(project); + Win32Window::Point origin(10, 10); + Win32Window::Size size(1280, 720); + if (!window.Create(L"quiz", origin, size)) { + return EXIT_FAILURE; + } + window.SetQuitOnClose(true); + + ::MSG msg; + while (::GetMessage(&msg, nullptr, 0, 0)) { + ::TranslateMessage(&msg); + ::DispatchMessage(&msg); + } + + ::CoUninitialize(); + return EXIT_SUCCESS; +} diff --git a/animations/step_05_b/windows/runner/resource.h b/animations/step_05_b/windows/runner/resource.h new file mode 100644 index 0000000000..66a65d1e4a --- /dev/null +++ b/animations/step_05_b/windows/runner/resource.h @@ -0,0 +1,16 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Visual C++ generated include file. +// Used by Runner.rc +// +#define IDI_APP_ICON 101 + +// Next default values for new objects +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS +#define _APS_NEXT_RESOURCE_VALUE 102 +#define _APS_NEXT_COMMAND_VALUE 40001 +#define _APS_NEXT_CONTROL_VALUE 1001 +#define _APS_NEXT_SYMED_VALUE 101 +#endif +#endif diff --git a/animations/step_05_b/windows/runner/resources/app_icon.ico b/animations/step_05_b/windows/runner/resources/app_icon.ico new file mode 100644 index 0000000000000000000000000000000000000000..c04e20caf6370ebb9253ad831cc31de4a9c965f6 GIT binary patch literal 33772 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 literal 0 HcmV?d00001 diff --git a/animations/step_05_b/windows/runner/runner.exe.manifest b/animations/step_05_b/windows/runner/runner.exe.manifest new file mode 100644 index 0000000000..153653e8d6 --- /dev/null +++ b/animations/step_05_b/windows/runner/runner.exe.manifest @@ -0,0 +1,14 @@ + + + + + PerMonitorV2 + + + + + + + + + diff --git a/animations/step_05_b/windows/runner/utils.cpp b/animations/step_05_b/windows/runner/utils.cpp new file mode 100644 index 0000000000..3a0b46511a --- /dev/null +++ b/animations/step_05_b/windows/runner/utils.cpp @@ -0,0 +1,65 @@ +#include "utils.h" + +#include +#include +#include +#include + +#include + +void CreateAndAttachConsole() { + if (::AllocConsole()) { + FILE *unused; + if (freopen_s(&unused, "CONOUT$", "w", stdout)) { + _dup2(_fileno(stdout), 1); + } + if (freopen_s(&unused, "CONOUT$", "w", stderr)) { + _dup2(_fileno(stdout), 2); + } + std::ios::sync_with_stdio(); + FlutterDesktopResyncOutputStreams(); + } +} + +std::vector GetCommandLineArguments() { + // Convert the UTF-16 command line arguments to UTF-8 for the Engine to use. + int argc; + wchar_t** argv = ::CommandLineToArgvW(::GetCommandLineW(), &argc); + if (argv == nullptr) { + return std::vector(); + } + + std::vector command_line_arguments; + + // Skip the first argument as it's the binary name. + for (int i = 1; i < argc; i++) { + command_line_arguments.push_back(Utf8FromUtf16(argv[i])); + } + + ::LocalFree(argv); + + return command_line_arguments; +} + +std::string Utf8FromUtf16(const wchar_t* utf16_string) { + if (utf16_string == nullptr) { + return std::string(); + } + unsigned int target_length = ::WideCharToMultiByte( + CP_UTF8, WC_ERR_INVALID_CHARS, utf16_string, + -1, nullptr, 0, nullptr, nullptr) + -1; // remove the trailing null character + int input_length = (int)wcslen(utf16_string); + std::string utf8_string; + if (target_length == 0 || target_length > utf8_string.max_size()) { + return utf8_string; + } + utf8_string.resize(target_length); + int converted_length = ::WideCharToMultiByte( + CP_UTF8, WC_ERR_INVALID_CHARS, utf16_string, + input_length, utf8_string.data(), target_length, nullptr, nullptr); + if (converted_length == 0) { + return std::string(); + } + return utf8_string; +} diff --git a/animations/step_05_b/windows/runner/utils.h b/animations/step_05_b/windows/runner/utils.h new file mode 100644 index 0000000000..3879d54755 --- /dev/null +++ b/animations/step_05_b/windows/runner/utils.h @@ -0,0 +1,19 @@ +#ifndef RUNNER_UTILS_H_ +#define RUNNER_UTILS_H_ + +#include +#include + +// Creates a console for the process, and redirects stdout and stderr to +// it for both the runner and the Flutter library. +void CreateAndAttachConsole(); + +// Takes a null-terminated wchar_t* encoded in UTF-16 and returns a std::string +// encoded in UTF-8. Returns an empty std::string on failure. +std::string Utf8FromUtf16(const wchar_t* utf16_string); + +// Gets the command line arguments passed in as a std::vector, +// encoded in UTF-8. Returns an empty std::vector on failure. +std::vector GetCommandLineArguments(); + +#endif // RUNNER_UTILS_H_ diff --git a/animations/step_05_b/windows/runner/win32_window.cpp b/animations/step_05_b/windows/runner/win32_window.cpp new file mode 100644 index 0000000000..60608d0fe5 --- /dev/null +++ b/animations/step_05_b/windows/runner/win32_window.cpp @@ -0,0 +1,288 @@ +#include "win32_window.h" + +#include +#include + +#include "resource.h" + +namespace { + +/// Window attribute that enables dark mode window decorations. +/// +/// Redefined in case the developer's machine has a Windows SDK older than +/// version 10.0.22000.0. +/// See: https://docs.microsoft.com/windows/win32/api/dwmapi/ne-dwmapi-dwmwindowattribute +#ifndef DWMWA_USE_IMMERSIVE_DARK_MODE +#define DWMWA_USE_IMMERSIVE_DARK_MODE 20 +#endif + +constexpr const wchar_t kWindowClassName[] = L"FLUTTER_RUNNER_WIN32_WINDOW"; + +/// Registry key for app theme preference. +/// +/// A value of 0 indicates apps should use dark mode. A non-zero or missing +/// value indicates apps should use light mode. +constexpr const wchar_t kGetPreferredBrightnessRegKey[] = + L"Software\\Microsoft\\Windows\\CurrentVersion\\Themes\\Personalize"; +constexpr const wchar_t kGetPreferredBrightnessRegValue[] = L"AppsUseLightTheme"; + +// The number of Win32Window objects that currently exist. +static int g_active_window_count = 0; + +using EnableNonClientDpiScaling = BOOL __stdcall(HWND hwnd); + +// Scale helper to convert logical scaler values to physical using passed in +// scale factor +int Scale(int source, double scale_factor) { + return static_cast(source * scale_factor); +} + +// Dynamically loads the |EnableNonClientDpiScaling| from the User32 module. +// This API is only needed for PerMonitor V1 awareness mode. +void EnableFullDpiSupportIfAvailable(HWND hwnd) { + HMODULE user32_module = LoadLibraryA("User32.dll"); + if (!user32_module) { + return; + } + auto enable_non_client_dpi_scaling = + reinterpret_cast( + GetProcAddress(user32_module, "EnableNonClientDpiScaling")); + if (enable_non_client_dpi_scaling != nullptr) { + enable_non_client_dpi_scaling(hwnd); + } + FreeLibrary(user32_module); +} + +} // namespace + +// Manages the Win32Window's window class registration. +class WindowClassRegistrar { + public: + ~WindowClassRegistrar() = default; + + // Returns the singleton registrar instance. + static WindowClassRegistrar* GetInstance() { + if (!instance_) { + instance_ = new WindowClassRegistrar(); + } + return instance_; + } + + // Returns the name of the window class, registering the class if it hasn't + // previously been registered. + const wchar_t* GetWindowClass(); + + // Unregisters the window class. Should only be called if there are no + // instances of the window. + void UnregisterWindowClass(); + + private: + WindowClassRegistrar() = default; + + static WindowClassRegistrar* instance_; + + bool class_registered_ = false; +}; + +WindowClassRegistrar* WindowClassRegistrar::instance_ = nullptr; + +const wchar_t* WindowClassRegistrar::GetWindowClass() { + if (!class_registered_) { + WNDCLASS window_class{}; + window_class.hCursor = LoadCursor(nullptr, IDC_ARROW); + window_class.lpszClassName = kWindowClassName; + window_class.style = CS_HREDRAW | CS_VREDRAW; + window_class.cbClsExtra = 0; + window_class.cbWndExtra = 0; + window_class.hInstance = GetModuleHandle(nullptr); + window_class.hIcon = + LoadIcon(window_class.hInstance, MAKEINTRESOURCE(IDI_APP_ICON)); + window_class.hbrBackground = 0; + window_class.lpszMenuName = nullptr; + window_class.lpfnWndProc = Win32Window::WndProc; + RegisterClass(&window_class); + class_registered_ = true; + } + return kWindowClassName; +} + +void WindowClassRegistrar::UnregisterWindowClass() { + UnregisterClass(kWindowClassName, nullptr); + class_registered_ = false; +} + +Win32Window::Win32Window() { + ++g_active_window_count; +} + +Win32Window::~Win32Window() { + --g_active_window_count; + Destroy(); +} + +bool Win32Window::Create(const std::wstring& title, + const Point& origin, + const Size& size) { + Destroy(); + + const wchar_t* window_class = + WindowClassRegistrar::GetInstance()->GetWindowClass(); + + const POINT target_point = {static_cast(origin.x), + static_cast(origin.y)}; + HMONITOR monitor = MonitorFromPoint(target_point, MONITOR_DEFAULTTONEAREST); + UINT dpi = FlutterDesktopGetDpiForMonitor(monitor); + double scale_factor = dpi / 96.0; + + HWND window = CreateWindow( + window_class, title.c_str(), WS_OVERLAPPEDWINDOW, + Scale(origin.x, scale_factor), Scale(origin.y, scale_factor), + Scale(size.width, scale_factor), Scale(size.height, scale_factor), + nullptr, nullptr, GetModuleHandle(nullptr), this); + + if (!window) { + return false; + } + + UpdateTheme(window); + + return OnCreate(); +} + +bool Win32Window::Show() { + return ShowWindow(window_handle_, SW_SHOWNORMAL); +} + +// static +LRESULT CALLBACK Win32Window::WndProc(HWND const window, + UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept { + if (message == WM_NCCREATE) { + auto window_struct = reinterpret_cast(lparam); + SetWindowLongPtr(window, GWLP_USERDATA, + reinterpret_cast(window_struct->lpCreateParams)); + + auto that = static_cast(window_struct->lpCreateParams); + EnableFullDpiSupportIfAvailable(window); + that->window_handle_ = window; + } else if (Win32Window* that = GetThisFromHandle(window)) { + return that->MessageHandler(window, message, wparam, lparam); + } + + return DefWindowProc(window, message, wparam, lparam); +} + +LRESULT +Win32Window::MessageHandler(HWND hwnd, + UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept { + switch (message) { + case WM_DESTROY: + window_handle_ = nullptr; + Destroy(); + if (quit_on_close_) { + PostQuitMessage(0); + } + return 0; + + case WM_DPICHANGED: { + auto newRectSize = reinterpret_cast(lparam); + LONG newWidth = newRectSize->right - newRectSize->left; + LONG newHeight = newRectSize->bottom - newRectSize->top; + + SetWindowPos(hwnd, nullptr, newRectSize->left, newRectSize->top, newWidth, + newHeight, SWP_NOZORDER | SWP_NOACTIVATE); + + return 0; + } + case WM_SIZE: { + RECT rect = GetClientArea(); + if (child_content_ != nullptr) { + // Size and position the child window. + MoveWindow(child_content_, rect.left, rect.top, rect.right - rect.left, + rect.bottom - rect.top, TRUE); + } + return 0; + } + + case WM_ACTIVATE: + if (child_content_ != nullptr) { + SetFocus(child_content_); + } + return 0; + + case WM_DWMCOLORIZATIONCOLORCHANGED: + UpdateTheme(hwnd); + return 0; + } + + return DefWindowProc(window_handle_, message, wparam, lparam); +} + +void Win32Window::Destroy() { + OnDestroy(); + + if (window_handle_) { + DestroyWindow(window_handle_); + window_handle_ = nullptr; + } + if (g_active_window_count == 0) { + WindowClassRegistrar::GetInstance()->UnregisterWindowClass(); + } +} + +Win32Window* Win32Window::GetThisFromHandle(HWND const window) noexcept { + return reinterpret_cast( + GetWindowLongPtr(window, GWLP_USERDATA)); +} + +void Win32Window::SetChildContent(HWND content) { + child_content_ = content; + SetParent(content, window_handle_); + RECT frame = GetClientArea(); + + MoveWindow(content, frame.left, frame.top, frame.right - frame.left, + frame.bottom - frame.top, true); + + SetFocus(child_content_); +} + +RECT Win32Window::GetClientArea() { + RECT frame; + GetClientRect(window_handle_, &frame); + return frame; +} + +HWND Win32Window::GetHandle() { + return window_handle_; +} + +void Win32Window::SetQuitOnClose(bool quit_on_close) { + quit_on_close_ = quit_on_close; +} + +bool Win32Window::OnCreate() { + // No-op; provided for subclasses. + return true; +} + +void Win32Window::OnDestroy() { + // No-op; provided for subclasses. +} + +void Win32Window::UpdateTheme(HWND const window) { + DWORD light_mode; + DWORD light_mode_size = sizeof(light_mode); + LSTATUS result = RegGetValue(HKEY_CURRENT_USER, kGetPreferredBrightnessRegKey, + kGetPreferredBrightnessRegValue, + RRF_RT_REG_DWORD, nullptr, &light_mode, + &light_mode_size); + + if (result == ERROR_SUCCESS) { + BOOL enable_dark_mode = light_mode == 0; + DwmSetWindowAttribute(window, DWMWA_USE_IMMERSIVE_DARK_MODE, + &enable_dark_mode, sizeof(enable_dark_mode)); + } +} diff --git a/animations/step_05_b/windows/runner/win32_window.h b/animations/step_05_b/windows/runner/win32_window.h new file mode 100644 index 0000000000..e901dde684 --- /dev/null +++ b/animations/step_05_b/windows/runner/win32_window.h @@ -0,0 +1,102 @@ +#ifndef RUNNER_WIN32_WINDOW_H_ +#define RUNNER_WIN32_WINDOW_H_ + +#include + +#include +#include +#include + +// A class abstraction for a high DPI-aware Win32 Window. Intended to be +// inherited from by classes that wish to specialize with custom +// rendering and input handling +class Win32Window { + public: + struct Point { + unsigned int x; + unsigned int y; + Point(unsigned int x, unsigned int y) : x(x), y(y) {} + }; + + struct Size { + unsigned int width; + unsigned int height; + Size(unsigned int width, unsigned int height) + : width(width), height(height) {} + }; + + Win32Window(); + virtual ~Win32Window(); + + // Creates a win32 window with |title| that is positioned and sized using + // |origin| and |size|. New windows are created on the default monitor. Window + // sizes are specified to the OS in physical pixels, hence to ensure a + // consistent size this function will scale the inputted width and height as + // as appropriate for the default monitor. The window is invisible until + // |Show| is called. Returns true if the window was created successfully. + bool Create(const std::wstring& title, const Point& origin, const Size& size); + + // Show the current window. Returns true if the window was successfully shown. + bool Show(); + + // Release OS resources associated with window. + void Destroy(); + + // Inserts |content| into the window tree. + void SetChildContent(HWND content); + + // Returns the backing Window handle to enable clients to set icon and other + // window properties. Returns nullptr if the window has been destroyed. + HWND GetHandle(); + + // If true, closing this window will quit the application. + void SetQuitOnClose(bool quit_on_close); + + // Return a RECT representing the bounds of the current client area. + RECT GetClientArea(); + + protected: + // Processes and route salient window messages for mouse handling, + // size change and DPI. Delegates handling of these to member overloads that + // inheriting classes can handle. + virtual LRESULT MessageHandler(HWND window, + UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept; + + // Called when CreateAndShow is called, allowing subclass window-related + // setup. Subclasses should return false if setup fails. + virtual bool OnCreate(); + + // Called when Destroy is called. + virtual void OnDestroy(); + + private: + friend class WindowClassRegistrar; + + // OS callback called by message pump. Handles the WM_NCCREATE message which + // is passed when the non-client area is being created and enables automatic + // non-client DPI scaling so that the non-client area automatically + // responds to changes in DPI. All other messages are handled by + // MessageHandler. + static LRESULT CALLBACK WndProc(HWND const window, + UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept; + + // Retrieves a class instance pointer for |window| + static Win32Window* GetThisFromHandle(HWND const window) noexcept; + + // Update the window frame's theme to match the system theme. + static void UpdateTheme(HWND const window); + + bool quit_on_close_ = false; + + // window handle for top level window. + HWND window_handle_ = nullptr; + + // window handle for hosted content. + HWND child_content_ = nullptr; +}; + +#endif // RUNNER_WIN32_WINDOW_H_ diff --git a/animations/step_05_c/.gitignore b/animations/step_05_c/.gitignore new file mode 100644 index 0000000000..29a3a5017f --- /dev/null +++ b/animations/step_05_c/.gitignore @@ -0,0 +1,43 @@ +# Miscellaneous +*.class +*.log +*.pyc +*.swp +.DS_Store +.atom/ +.buildlog/ +.history +.svn/ +migrate_working_dir/ + +# IntelliJ related +*.iml +*.ipr +*.iws +.idea/ + +# The .vscode folder contains launch configuration and tasks you configure in +# VS Code which you may wish to be included in version control, so this line +# is commented out by default. +#.vscode/ + +# Flutter/Dart/Pub related +**/doc/api/ +**/ios/Flutter/.last_build_id +.dart_tool/ +.flutter-plugins +.flutter-plugins-dependencies +.pub-cache/ +.pub/ +/build/ + +# Symbolication related +app.*.symbols + +# Obfuscation related +app.*.map.json + +# Android Studio will place build artifacts here +/android/app/debug +/android/app/profile +/android/app/release diff --git a/animations/step_05_c/analysis_options.yaml b/animations/step_05_c/analysis_options.yaml new file mode 100644 index 0000000000..03de3bd700 --- /dev/null +++ b/animations/step_05_c/analysis_options.yaml @@ -0,0 +1,13 @@ +include: package:flutter_lints/flutter.yaml + +analyzer: + errors: + unused_field: ignore + +linter: + rules: + annotate_overrides: false + prefer_const_constructors: false + prefer_const_constructors_in_immutables: false + prefer_const_declarations: false + prefer_const_literals_to_create_immutables: false diff --git a/animations/step_05_c/android/.gitignore b/animations/step_05_c/android/.gitignore new file mode 100644 index 0000000000..55afd919c6 --- /dev/null +++ b/animations/step_05_c/android/.gitignore @@ -0,0 +1,13 @@ +gradle-wrapper.jar +/.gradle +/captures/ +/gradlew +/gradlew.bat +/local.properties +GeneratedPluginRegistrant.java + +# Remember to never publicly share your keystore. +# See https://flutter.dev/to/reference-keystore +key.properties +**/*.keystore +**/*.jks diff --git a/animations/step_05_c/android/app/build.gradle b/animations/step_05_c/android/app/build.gradle new file mode 100644 index 0000000000..7c3594ed33 --- /dev/null +++ b/animations/step_05_c/android/app/build.gradle @@ -0,0 +1,44 @@ +plugins { + id "com.android.application" + id "kotlin-android" + // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. + id "dev.flutter.flutter-gradle-plugin" +} + +android { + namespace = "com.example.quiz" + compileSdk = flutter.compileSdkVersion + ndkVersion = flutter.ndkVersion + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 + } + + kotlinOptions { + jvmTarget = JavaVersion.VERSION_1_8 + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId = "com.example.quiz" + // You can update the following values to match your application needs. + // For more information, see: https://flutter.dev/to/review-gradle-config. + minSdk = flutter.minSdkVersion + targetSdk = flutter.targetSdkVersion + versionCode = flutter.versionCode + versionName = flutter.versionName + } + + buildTypes { + release { + // TODO: Add your own signing config for the release build. + // Signing with the debug keys for now, so `flutter run --release` works. + signingConfig = signingConfigs.debug + } + } +} + +flutter { + source = "../.." +} diff --git a/animations/step_05_c/android/app/src/debug/AndroidManifest.xml b/animations/step_05_c/android/app/src/debug/AndroidManifest.xml new file mode 100644 index 0000000000..399f6981d5 --- /dev/null +++ b/animations/step_05_c/android/app/src/debug/AndroidManifest.xml @@ -0,0 +1,7 @@ + + + + diff --git a/animations/step_05_c/android/app/src/main/AndroidManifest.xml b/animations/step_05_c/android/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000000..34076b28b3 --- /dev/null +++ b/animations/step_05_c/android/app/src/main/AndroidManifest.xml @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/animations/step_05_c/android/app/src/main/kotlin/com/example/quiz/MainActivity.kt b/animations/step_05_c/android/app/src/main/kotlin/com/example/quiz/MainActivity.kt new file mode 100644 index 0000000000..87081bb97c --- /dev/null +++ b/animations/step_05_c/android/app/src/main/kotlin/com/example/quiz/MainActivity.kt @@ -0,0 +1,5 @@ +package com.example.quiz + +import io.flutter.embedding.android.FlutterActivity + +class MainActivity: FlutterActivity() diff --git a/animations/step_05_c/android/app/src/main/res/drawable-v21/launch_background.xml b/animations/step_05_c/android/app/src/main/res/drawable-v21/launch_background.xml new file mode 100644 index 0000000000..f74085f3f6 --- /dev/null +++ b/animations/step_05_c/android/app/src/main/res/drawable-v21/launch_background.xml @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/animations/step_05_c/android/app/src/main/res/drawable/launch_background.xml b/animations/step_05_c/android/app/src/main/res/drawable/launch_background.xml new file mode 100644 index 0000000000..304732f884 --- /dev/null +++ b/animations/step_05_c/android/app/src/main/res/drawable/launch_background.xml @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/animations/step_05_c/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/animations/step_05_c/android/app/src/main/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..db77bb4b7b0906d62b1847e87f15cdcacf6a4f29 GIT binary patch literal 544 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY3?!3`olAj~WQl7;NpOBzNqJ&XDuZK6ep0G} zXKrG8YEWuoN@d~6R2!h8bpbvhu0Wd6uZuB!w&u2PAxD2eNXD>P5D~Wn-+_Wa#27Xc zC?Zj|6r#X(-D3u$NCt}(Ms06KgJ4FxJVv{GM)!I~&n8Bnc94O7-Hd)cjDZswgC;Qs zO=b+9!WcT8F?0rF7!Uys2bs@gozCP?z~o%U|N3vA*22NaGQG zlg@K`O_XuxvZ&Ks^m&R!`&1=spLvfx7oGDKDwpwW`#iqdw@AL`7MR}m`rwr|mZgU`8P7SBkL78fFf!WnuYWm$5Z0 zNXhDbCv&49sM544K|?c)WrFfiZvCi9h0O)B3Pgg&ebxsLQ05GG~ AQ2+n{ literal 0 HcmV?d00001 diff --git a/animations/step_05_c/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/animations/step_05_c/android/app/src/main/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..17987b79bb8a35cc66c3c1fd44f5a5526c1b78be GIT binary patch literal 442 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA3?vioaBc-sk|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*D5Xx&nMcT!A!W`0S9QKQy;}1Cl^CgaH=;G9cpY;r$Q>i*pfB zP2drbID<_#qf;rPZx^FqH)F_D#*k@@q03KywUtLX8Ua?`H+NMzkczFPK3lFz@i_kW%1NOn0|D2I9n9wzH8m|-tHjsw|9>@K=iMBhxvkv6m8Y-l zytQ?X=U+MF$@3 zt`~i=@j|6y)RWMK--}M|=T`o&^Ni>IoWKHEbBXz7?A@mgWoL>!*SXo`SZH-*HSdS+ yn*9;$7;m`l>wYBC5bq;=U}IMqLzqbYCidGC!)_gkIk_C@Uy!y&wkt5C($~2D>~)O*cj@FGjOCM)M>_ixfudOh)?xMu#Fs z#}Y=@YDTwOM)x{K_j*Q;dPdJ?Mz0n|pLRx{4n|)f>SXlmV)XB04CrSJn#dS5nK2lM zrZ9#~WelCp7&e13Y$jvaEXHskn$2V!!DN-nWS__6T*l;H&Fopn?A6HZ-6WRLFP=R` zqG+CE#d4|IbyAI+rJJ`&x9*T`+a=p|0O(+s{UBcyZdkhj=yS1>AirP+0R;mf2uMgM zC}@~JfByORAh4SyRgi&!(cja>F(l*O+nd+@4m$|6K6KDn_&uvCpV23&>G9HJp{xgg zoq1^2_p9@|WEo z*X_Uko@K)qYYv~>43eQGMdbiGbo>E~Q& zrYBH{QP^@Sti!`2)uG{irBBq@y*$B zi#&(U-*=fp74j)RyIw49+0MRPMRU)+a2r*PJ$L5roHt2$UjExCTZSbq%V!HeS7J$N zdG@vOZB4v_lF7Plrx+hxo7(fCV&}fHq)$ literal 0 HcmV?d00001 diff --git a/animations/step_05_c/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/animations/step_05_c/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..d5f1c8d34e7a88e3f88bea192c3a370d44689c3c GIT binary patch literal 1031 zcmeAS@N?(olHy`uVBq!ia0vp^6F``Q8Ax83A=Cw=BuiW)N`mv#O3D+9QW+dm@{>{( zJaZG%Q-e|yQz{EjrrIztFa`(sgt!6~Yi|1%a`XoT0ojZ}lNrNjb9xjc(B0U1_% zz5^97Xt*%oq$rQy4?0GKNfJ44uvxI)gC`h-NZ|&0-7(qS@?b!5r36oQ}zyZrNO3 zMO=Or+<~>+A&uN&E!^Sl+>xE!QC-|oJv`ApDhqC^EWD|@=#J`=d#Xzxs4ah}w&Jnc z$|q_opQ^2TrnVZ0o~wh<3t%W&flvYGe#$xqda2bR_R zvPYgMcHgjZ5nSA^lJr%;<&0do;O^tDDh~=pIxA#coaCY>&N%M2^tq^U%3DB@ynvKo}b?yu-bFc-u0JHzced$sg7S3zqI(2 z#Km{dPr7I=pQ5>FuK#)QwK?Y`E`B?nP+}U)I#c1+FM*1kNvWG|a(TpksZQ3B@sD~b zpQ2)*V*TdwjFOtHvV|;OsiDqHi=6%)o4b!)x$)%9pGTsE z-JL={-Ffv+T87W(Xpooq<`r*VzWQcgBN$$`u}f>-ZQI1BB8ykN*=e4rIsJx9>z}*o zo~|9I;xof literal 0 HcmV?d00001 diff --git a/animations/step_05_c/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/animations/step_05_c/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..4d6372eebdb28e45604e46eeda8dd24651419bc0 GIT binary patch literal 1443 zcmb`G{WsKk6vsdJTdFg%tJav9_E4vzrOaqkWF|A724Nly!y+?N9`YV6wZ}5(X(D_N(?!*n3`|_r0Hc?=PQw&*vnU?QTFY zB_MsH|!j$PP;I}?dppoE_gA(4uc!jV&0!l7_;&p2^pxNo>PEcNJv za5_RT$o2Mf!<+r?&EbHH6nMoTsDOa;mN(wv8RNsHpG)`^ymG-S5By8=l9iVXzN_eG%Xg2@Xeq76tTZ*dGh~Lo9vl;Zfs+W#BydUw zCkZ$o1LqWQO$FC9aKlLl*7x9^0q%0}$OMlp@Kk_jHXOjofdePND+j!A{q!8~Jn+s3 z?~~w@4?egS02}8NuulUA=L~QQfm;MzCGd)XhiftT;+zFO&JVyp2mBww?;QByS_1w! zrQlx%{^cMj0|Bo1FjwY@Q8?Hx0cIPF*@-ZRFpPc#bBw{5@tD(5%sClzIfl8WU~V#u zm5Q;_F!wa$BSpqhN>W@2De?TKWR*!ujY;Yylk_X5#~V!L*Gw~;$%4Q8~Mad z@`-kG?yb$a9cHIApZDVZ^U6Xkp<*4rU82O7%}0jjHlK{id@?-wpN*fCHXyXh(bLt* zPc}H-x0e4E&nQ>y%B-(EL=9}RyC%MyX=upHuFhAk&MLbsF0LP-q`XnH78@fT+pKPW zu72MW`|?8ht^tz$iC}ZwLp4tB;Q49K!QCF3@!iB1qOI=?w z7In!}F~ij(18UYUjnbmC!qKhPo%24?8U1x{7o(+?^Zu0Hx81|FuS?bJ0jgBhEMzf< zCgUq7r2OCB(`XkKcN-TL>u5y#dD6D!)5W?`O5)V^>jb)P)GBdy%t$uUMpf$SNV31$ zb||OojAbvMP?T@$h_ZiFLFVHDmbyMhJF|-_)HX3%m=CDI+ID$0^C>kzxprBW)hw(v zr!Gmda);ICoQyhV_oP5+C%?jcG8v+D@9f?Dk*!BxY}dazmrT@64UrP3hlslANK)bq z$67n83eh}OeW&SV@HG95P|bjfqJ7gw$e+`Hxo!4cx`jdK1bJ>YDSpGKLPZ^1cv$ek zIB?0S<#tX?SJCLWdMd{-ME?$hc7A$zBOdIJ)4!KcAwb=VMov)nK;9z>x~rfT1>dS+ zZ6#`2v@`jgbqq)P22H)Tx2CpmM^o1$B+xT6`(v%5xJ(?j#>Q$+rx_R|7TzDZe{J6q zG1*EcU%tE?!kO%^M;3aM6JN*LAKUVb^xz8-Pxo#jR5(-KBeLJvA@-gxNHx0M-ZJLl z;#JwQoh~9V?`UVo#}{6ka@II>++D@%KqGpMdlQ}?9E*wFcf5(#XQnP$Dk5~%iX^>f z%$y;?M0BLp{O3a(-4A?ewryHrrD%cx#Q^%KY1H zNre$ve+vceSLZcNY4U(RBX&)oZn*Py()h)XkE?PL$!bNb{N5FVI2Y%LKEm%yvpyTP z(1P?z~7YxD~Rf<(a@_y` literal 0 HcmV?d00001 diff --git a/animations/step_05_c/android/app/src/main/res/values-night/styles.xml b/animations/step_05_c/android/app/src/main/res/values-night/styles.xml new file mode 100644 index 0000000000..06952be745 --- /dev/null +++ b/animations/step_05_c/android/app/src/main/res/values-night/styles.xml @@ -0,0 +1,18 @@ + + + + + + + diff --git a/animations/step_05_c/android/app/src/main/res/values/styles.xml b/animations/step_05_c/android/app/src/main/res/values/styles.xml new file mode 100644 index 0000000000..cb1ef88056 --- /dev/null +++ b/animations/step_05_c/android/app/src/main/res/values/styles.xml @@ -0,0 +1,18 @@ + + + + + + + diff --git a/animations/step_05_c/android/app/src/profile/AndroidManifest.xml b/animations/step_05_c/android/app/src/profile/AndroidManifest.xml new file mode 100644 index 0000000000..399f6981d5 --- /dev/null +++ b/animations/step_05_c/android/app/src/profile/AndroidManifest.xml @@ -0,0 +1,7 @@ + + + + diff --git a/animations/step_05_c/android/build.gradle b/animations/step_05_c/android/build.gradle new file mode 100644 index 0000000000..d2ffbffa4c --- /dev/null +++ b/animations/step_05_c/android/build.gradle @@ -0,0 +1,18 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +rootProject.buildDir = "../build" +subprojects { + project.buildDir = "${rootProject.buildDir}/${project.name}" +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean", Delete) { + delete rootProject.buildDir +} diff --git a/animations/step_05_c/android/gradle.properties b/animations/step_05_c/android/gradle.properties new file mode 100644 index 0000000000..2597170821 --- /dev/null +++ b/animations/step_05_c/android/gradle.properties @@ -0,0 +1,3 @@ +org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +android.useAndroidX=true +android.enableJetifier=true diff --git a/animations/step_05_c/android/gradle/wrapper/gradle-wrapper.properties b/animations/step_05_c/android/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000000..7bb2df6ba6 --- /dev/null +++ b/animations/step_05_c/android/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,5 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip diff --git a/animations/step_05_c/android/settings.gradle b/animations/step_05_c/android/settings.gradle new file mode 100644 index 0000000000..b9e43bd376 --- /dev/null +++ b/animations/step_05_c/android/settings.gradle @@ -0,0 +1,25 @@ +pluginManagement { + def flutterSdkPath = { + def properties = new Properties() + file("local.properties").withInputStream { properties.load(it) } + def flutterSdkPath = properties.getProperty("flutter.sdk") + assert flutterSdkPath != null, "flutter.sdk not set in local.properties" + return flutterSdkPath + }() + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id "dev.flutter.flutter-plugin-loader" version "1.0.0" + id "com.android.application" version "8.1.0" apply false + id "org.jetbrains.kotlin.android" version "1.8.22" apply false +} + +include ":app" diff --git a/animations/step_05_c/ios/.gitignore b/animations/step_05_c/ios/.gitignore new file mode 100644 index 0000000000..7a7f9873ad --- /dev/null +++ b/animations/step_05_c/ios/.gitignore @@ -0,0 +1,34 @@ +**/dgph +*.mode1v3 +*.mode2v3 +*.moved-aside +*.pbxuser +*.perspectivev3 +**/*sync/ +.sconsign.dblite +.tags* +**/.vagrant/ +**/DerivedData/ +Icon? +**/Pods/ +**/.symlinks/ +profile +xcuserdata +**/.generated/ +Flutter/App.framework +Flutter/Flutter.framework +Flutter/Flutter.podspec +Flutter/Generated.xcconfig +Flutter/ephemeral/ +Flutter/app.flx +Flutter/app.zip +Flutter/flutter_assets/ +Flutter/flutter_export_environment.sh +ServiceDefinitions.json +Runner/GeneratedPluginRegistrant.* + +# Exceptions to above rules. +!default.mode1v3 +!default.mode2v3 +!default.pbxuser +!default.perspectivev3 diff --git a/animations/step_05_c/ios/Flutter/AppFrameworkInfo.plist b/animations/step_05_c/ios/Flutter/AppFrameworkInfo.plist new file mode 100644 index 0000000000..7c56964006 --- /dev/null +++ b/animations/step_05_c/ios/Flutter/AppFrameworkInfo.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + App + CFBundleIdentifier + io.flutter.flutter.app + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + App + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1.0 + MinimumOSVersion + 12.0 + + diff --git a/animations/step_05_c/ios/Flutter/Debug.xcconfig b/animations/step_05_c/ios/Flutter/Debug.xcconfig new file mode 100644 index 0000000000..592ceee85b --- /dev/null +++ b/animations/step_05_c/ios/Flutter/Debug.xcconfig @@ -0,0 +1 @@ +#include "Generated.xcconfig" diff --git a/animations/step_05_c/ios/Flutter/Release.xcconfig b/animations/step_05_c/ios/Flutter/Release.xcconfig new file mode 100644 index 0000000000..592ceee85b --- /dev/null +++ b/animations/step_05_c/ios/Flutter/Release.xcconfig @@ -0,0 +1 @@ +#include "Generated.xcconfig" diff --git a/animations/step_05_c/ios/Runner.xcodeproj/project.pbxproj b/animations/step_05_c/ios/Runner.xcodeproj/project.pbxproj new file mode 100644 index 0000000000..faef24d87a --- /dev/null +++ b/animations/step_05_c/ios/Runner.xcodeproj/project.pbxproj @@ -0,0 +1,616 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 54; + objects = { + +/* Begin PBXBuildFile section */ + 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; + 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; + 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; + 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; + 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; + 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; + 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 331C8085294A63A400263BE5 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 97C146E61CF9000F007C117D /* Project object */; + proxyType = 1; + remoteGlobalIDString = 97C146ED1CF9000F007C117D; + remoteInfo = Runner; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 9705A1C41CF9048500538489 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; + 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; + 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; + 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; + 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; + 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; + 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; + 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; + 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 97C146EB1CF9000F007C117D /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 331C8082294A63A400263BE5 /* RunnerTests */ = { + isa = PBXGroup; + children = ( + 331C807B294A618700263BE5 /* RunnerTests.swift */, + ); + path = RunnerTests; + sourceTree = ""; + }; + 9740EEB11CF90186004384FC /* Flutter */ = { + isa = PBXGroup; + children = ( + 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */, + 9740EEB21CF90195004384FC /* Debug.xcconfig */, + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, + 9740EEB31CF90195004384FC /* Generated.xcconfig */, + ); + name = Flutter; + sourceTree = ""; + }; + 97C146E51CF9000F007C117D = { + isa = PBXGroup; + children = ( + 9740EEB11CF90186004384FC /* Flutter */, + 97C146F01CF9000F007C117D /* Runner */, + 97C146EF1CF9000F007C117D /* Products */, + 331C8082294A63A400263BE5 /* RunnerTests */, + ); + sourceTree = ""; + }; + 97C146EF1CF9000F007C117D /* Products */ = { + isa = PBXGroup; + children = ( + 97C146EE1CF9000F007C117D /* Runner.app */, + 331C8081294A63A400263BE5 /* RunnerTests.xctest */, + ); + name = Products; + sourceTree = ""; + }; + 97C146F01CF9000F007C117D /* Runner */ = { + isa = PBXGroup; + children = ( + 97C146FA1CF9000F007C117D /* Main.storyboard */, + 97C146FD1CF9000F007C117D /* Assets.xcassets */, + 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */, + 97C147021CF9000F007C117D /* Info.plist */, + 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */, + 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */, + 74858FAE1ED2DC5600515810 /* AppDelegate.swift */, + 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */, + ); + path = Runner; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 331C8080294A63A400263BE5 /* RunnerTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; + buildPhases = ( + 331C807D294A63A400263BE5 /* Sources */, + 331C807F294A63A400263BE5 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 331C8086294A63A400263BE5 /* PBXTargetDependency */, + ); + name = RunnerTests; + productName = RunnerTests; + productReference = 331C8081294A63A400263BE5 /* RunnerTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; + 97C146ED1CF9000F007C117D /* Runner */ = { + isa = PBXNativeTarget; + buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; + buildPhases = ( + 9740EEB61CF901F6004384FC /* Run Script */, + 97C146EA1CF9000F007C117D /* Sources */, + 97C146EB1CF9000F007C117D /* Frameworks */, + 97C146EC1CF9000F007C117D /* Resources */, + 9705A1C41CF9048500538489 /* Embed Frameworks */, + 3B06AD1E1E4923F5004D2608 /* Thin Binary */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = Runner; + productName = Runner; + productReference = 97C146EE1CF9000F007C117D /* Runner.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 97C146E61CF9000F007C117D /* Project object */ = { + isa = PBXProject; + attributes = { + BuildIndependentTargetsInParallel = YES; + LastUpgradeCheck = 1510; + ORGANIZATIONNAME = ""; + TargetAttributes = { + 331C8080294A63A400263BE5 = { + CreatedOnToolsVersion = 14.0; + TestTargetID = 97C146ED1CF9000F007C117D; + }; + 97C146ED1CF9000F007C117D = { + CreatedOnToolsVersion = 7.3.1; + LastSwiftMigration = 1100; + }; + }; + }; + buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 97C146E51CF9000F007C117D; + productRefGroup = 97C146EF1CF9000F007C117D /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 97C146ED1CF9000F007C117D /* Runner */, + 331C8080294A63A400263BE5 /* RunnerTests */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 331C807F294A63A400263BE5 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 97C146EC1CF9000F007C117D /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */, + 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */, + 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */, + 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", + ); + name = "Thin Binary"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + }; + 9740EEB61CF901F6004384FC /* Run Script */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Run Script"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 331C807D294A63A400263BE5 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 97C146EA1CF9000F007C117D /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */, + 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 331C8086294A63A400263BE5 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 97C146ED1CF9000F007C117D /* Runner */; + targetProxy = 331C8085294A63A400263BE5 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + 97C146FA1CF9000F007C117D /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 97C146FB1CF9000F007C117D /* Base */, + ); + name = Main.storyboard; + sourceTree = ""; + }; + 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 97C147001CF9000F007C117D /* Base */, + ); + name = LaunchScreen.storyboard; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 249021D3217E4FDB00AE95B9 /* Profile */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + SUPPORTED_PLATFORMS = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Profile; + }; + 249021D4217E4FDB00AE95B9 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + ENABLE_BITCODE = NO; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.example.quiz; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; + SWIFT_VERSION = 5.0; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Profile; + }; + 331C8088294A63A400263BE5 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.quiz.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; + }; + name = Debug; + }; + 331C8089294A63A400263BE5 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.quiz.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; + }; + name = Release; + }; + 331C808A294A63A400263BE5 /* Profile */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.quiz.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; + }; + name = Profile; + }; + 97C147031CF9000F007C117D /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 97C147041CF9000F007C117D /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + SUPPORTED_PLATFORMS = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 97C147061CF9000F007C117D /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + ENABLE_BITCODE = NO; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.example.quiz; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Debug; + }; + 97C147071CF9000F007C117D /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + ENABLE_BITCODE = NO; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.example.quiz; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; + SWIFT_VERSION = 5.0; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 331C8088294A63A400263BE5 /* Debug */, + 331C8089294A63A400263BE5 /* Release */, + 331C808A294A63A400263BE5 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 97C147031CF9000F007C117D /* Debug */, + 97C147041CF9000F007C117D /* Release */, + 249021D3217E4FDB00AE95B9 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 97C147061CF9000F007C117D /* Debug */, + 97C147071CF9000F007C117D /* Release */, + 249021D4217E4FDB00AE95B9 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 97C146E61CF9000F007C117D /* Project object */; +} diff --git a/animations/step_05_c/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/animations/step_05_c/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000000..919434a625 --- /dev/null +++ b/animations/step_05_c/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/animations/step_05_c/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/animations/step_05_c/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000000..18d981003d --- /dev/null +++ b/animations/step_05_c/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/animations/step_05_c/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/animations/step_05_c/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings new file mode 100644 index 0000000000..f9b0d7c5ea --- /dev/null +++ b/animations/step_05_c/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings @@ -0,0 +1,8 @@ + + + + + PreviewsEnabled + + + diff --git a/animations/step_05_c/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/animations/step_05_c/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme new file mode 100644 index 0000000000..8e3ca5dfe1 --- /dev/null +++ b/animations/step_05_c/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -0,0 +1,98 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/animations/step_05_c/ios/Runner.xcworkspace/contents.xcworkspacedata b/animations/step_05_c/ios/Runner.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000000..1d526a16ed --- /dev/null +++ b/animations/step_05_c/ios/Runner.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/animations/step_05_c/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/animations/step_05_c/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000000..18d981003d --- /dev/null +++ b/animations/step_05_c/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/animations/step_05_c/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/animations/step_05_c/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings new file mode 100644 index 0000000000..f9b0d7c5ea --- /dev/null +++ b/animations/step_05_c/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings @@ -0,0 +1,8 @@ + + + + + PreviewsEnabled + + + diff --git a/animations/step_05_c/ios/Runner/AppDelegate.swift b/animations/step_05_c/ios/Runner/AppDelegate.swift new file mode 100644 index 0000000000..626664468b --- /dev/null +++ b/animations/step_05_c/ios/Runner/AppDelegate.swift @@ -0,0 +1,13 @@ +import Flutter +import UIKit + +@main +@objc class AppDelegate: FlutterAppDelegate { + override func application( + _ application: UIApplication, + didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? + ) -> Bool { + GeneratedPluginRegistrant.register(with: self) + return super.application(application, didFinishLaunchingWithOptions: launchOptions) + } +} diff --git a/animations/step_05_c/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/animations/step_05_c/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000000..d36b1fab2d --- /dev/null +++ b/animations/step_05_c/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,122 @@ +{ + "images" : [ + { + "size" : "20x20", + "idiom" : "iphone", + "filename" : "Icon-App-20x20@2x.png", + "scale" : "2x" + }, + { + "size" : "20x20", + "idiom" : "iphone", + "filename" : "Icon-App-20x20@3x.png", + "scale" : "3x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "Icon-App-29x29@1x.png", + "scale" : "1x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "Icon-App-29x29@2x.png", + "scale" : "2x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "Icon-App-29x29@3x.png", + "scale" : "3x" + }, + { + "size" : "40x40", + "idiom" : "iphone", + "filename" : "Icon-App-40x40@2x.png", + "scale" : "2x" + }, + { + "size" : "40x40", + "idiom" : "iphone", + "filename" : "Icon-App-40x40@3x.png", + "scale" : "3x" + }, + { + "size" : "60x60", + "idiom" : "iphone", + "filename" : "Icon-App-60x60@2x.png", + "scale" : "2x" + }, + { + "size" : "60x60", + "idiom" : "iphone", + "filename" : "Icon-App-60x60@3x.png", + "scale" : "3x" + }, + { + "size" : "20x20", + "idiom" : "ipad", + "filename" : "Icon-App-20x20@1x.png", + "scale" : "1x" + }, + { + "size" : "20x20", + "idiom" : "ipad", + "filename" : "Icon-App-20x20@2x.png", + "scale" : "2x" + }, + { + "size" : "29x29", + "idiom" : "ipad", + "filename" : "Icon-App-29x29@1x.png", + "scale" : "1x" + }, + { + "size" : "29x29", + "idiom" : "ipad", + "filename" : "Icon-App-29x29@2x.png", + "scale" : "2x" + }, + { + "size" : "40x40", + "idiom" : "ipad", + "filename" : "Icon-App-40x40@1x.png", + "scale" : "1x" + }, + { + "size" : "40x40", + "idiom" : "ipad", + "filename" : "Icon-App-40x40@2x.png", + "scale" : "2x" + }, + { + "size" : "76x76", + "idiom" : "ipad", + "filename" : "Icon-App-76x76@1x.png", + "scale" : "1x" + }, + { + "size" : "76x76", + "idiom" : "ipad", + "filename" : "Icon-App-76x76@2x.png", + "scale" : "2x" + }, + { + "size" : "83.5x83.5", + "idiom" : "ipad", + "filename" : "Icon-App-83.5x83.5@2x.png", + "scale" : "2x" + }, + { + "size" : "1024x1024", + "idiom" : "ios-marketing", + "filename" : "Icon-App-1024x1024@1x.png", + "scale" : "1x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} diff --git a/animations/step_05_c/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png b/animations/step_05_c/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..dc9ada4725e9b0ddb1deab583e5b5102493aa332 GIT binary patch literal 10932 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 literal 0 HcmV?d00001 diff --git a/animations/step_05_c/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png b/animations/step_05_c/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..797d452e458972bab9d994556c8305db4c827017 GIT binary patch literal 406 zcmV;H0crk;P))>cdjpWt&rLJgVp-t?DREyuq1A%0Z4)6_WsQ7{nzjN zo!X zGXV)2i3kcZIL~_j>uIKPK_zib+3T+Nt3Mb&Br)s)UIaA}@p{wDda>7=Q|mGRp7pqY zkJ!7E{MNz$9nOwoVqpFb)}$IP24Wn2JJ=Cw(!`OXJBr45rP>>AQr$6c7slJWvbpNW z@KTwna6d?PP>hvXCcp=4F;=GR@R4E7{4VU^0p4F>v^#A|>07*qoM6N<$f*5nx ACIA2c literal 0 HcmV?d00001 diff --git a/animations/step_05_c/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png b/animations/step_05_c/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..6ed2d933e1120817fe9182483a228007b18ab6ae GIT binary patch literal 450 zcmV;z0X_bSP)iGWQ_5NJQ_~rNh*z)}eT%KUb z`7gNk0#AwF^#0T0?hIa^`~Ck;!}#m+_uT050aTR(J!bU#|IzRL%^UsMS#KsYnTF*!YeDOytlP4VhV?b} z%rz_<=#CPc)tU1MZTq~*2=8~iZ!lSa<{9b@2Jl;?IEV8)=fG217*|@)CCYgFze-x? zIFODUIA>nWKpE+bn~n7;-89sa>#DR>TSlqWk*!2hSN6D~Qb#VqbP~4Fk&m`@1$JGr zXPIdeRE&b2Thd#{MtDK$px*d3-Wx``>!oimf%|A-&-q*6KAH)e$3|6JV%HX{Hig)k suLT-RhftRq8b9;(V=235Wa|I=027H2wCDra;{X5v07*qoM6N<$f;9x^2LJ#7 literal 0 HcmV?d00001 diff --git a/animations/step_05_c/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png b/animations/step_05_c/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..4cd7b0099ca80c806f8fe495613e8d6c69460d76 GIT binary patch literal 282 zcmV+#0p(^bcu7P-R4C8Q z&e;xxFbF_Vrezo%_kH*OKhshZ6BFpG-Y1e10`QXJKbND7AMQ&cMj60B5TNObaZxYybcN07*qoM6N<$g3m;S%K!iX literal 0 HcmV?d00001 diff --git a/animations/step_05_c/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png b/animations/step_05_c/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..fe730945a01f64a61e2235dbe3f45b08f7729182 GIT binary patch literal 462 zcmV;<0WtoGP)-}iV`2<;=$?g5M=KQbZ{F&YRNy7Nn@%_*5{gvDM0aKI4?ESmw z{NnZg)A0R`+4?NF_RZexyVB&^^ZvN!{I28tr{Vje;QNTz`dG&Jz0~Ek&f2;*Z7>B|cg}xYpxEFY+0YrKLF;^Q+-HreN0P{&i zK~zY`?b7ECf-n?@;d<&orQ*Q7KoR%4|C>{W^h6@&01>0SKS`dn{Q}GT%Qj_{PLZ_& zs`MFI#j-(>?bvdZ!8^xTwlY{qA)T4QLbY@j(!YJ7aXJervHy6HaG_2SB`6CC{He}f zHVw(fJWApwPq!6VY7r1w-Fs)@ox~N+q|w~e;JI~C4Vf^@d>Wvj=fl`^u9x9wd9 zR%3*Q+)t%S!MU_`id^@&Y{y7-r98lZX0?YrHlfmwb?#}^1b{8g&KzmkE(L>Z&)179 zp<)v6Y}pRl100G2FL_t(o!|l{-Q-VMg#&MKg7c{O0 z2wJImOS3Gy*Z2Qifdv~JYOp;v+U)a|nLoc7hNH;I$;lzDt$}rkaFw1mYK5_0Q(Sut zvbEloxON7$+HSOgC9Z8ltuC&0OSF!-mXv5caV>#bc3@hBPX@I$58-z}(ZZE!t-aOG zpjNkbau@>yEzH(5Yj4kZiMH32XI!4~gVXNnjAvRx;Sdg^`>2DpUEwoMhTs_st8pKG z(%SHyHdU&v%f36~uERh!bd`!T2dw;z6PrOTQ7Vt*#9F2uHlUVnb#ev_o^fh}Dzmq} zWtlk35}k=?xj28uO|5>>$yXadTUE@@IPpgH`gJ~Ro4>jd1IF|(+IX>8M4Ps{PNvmI zNj4D+XgN83gPt_Gm}`Ybv{;+&yu-C(Grdiahmo~BjG-l&mWM+{e5M1sm&=xduwgM9 z`8OEh`=F3r`^E{n_;%9weN{cf2%7=VzC@cYj+lg>+3|D|_1C@{hcU(DyQG_BvBWe? zvTv``=%b1zrol#=R`JB)>cdjpWt&rLJgVp-t?DREyuq1A%0Z4)6_WsQ7{nzjN zo!X zGXV)2i3kcZIL~_j>uIKPK_zib+3T+Nt3Mb&Br)s)UIaA}@p{wDda>7=Q|mGRp7pqY zkJ!7E{MNz$9nOwoVqpFb)}$IP24Wn2JJ=Cw(!`OXJBr45rP>>AQr$6c7slJWvbpNW z@KTwna6d?PP>hvXCcp=4F;=GR@R4E7{4VU^0p4F>v^#A|>07*qoM6N<$f*5nx ACIA2c literal 0 HcmV?d00001 diff --git a/animations/step_05_c/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png b/animations/step_05_c/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..502f463a9bc882b461c96aadf492d1729e49e725 GIT binary patch literal 586 zcmV-Q0=4~#P)+}#`wDE{8-2Mebf5<{{PqV{TgVcv*r8?UZ3{-|G?_}T*&y;@cqf{ z{Q*~+qr%%p!1pS*_Uicl#q9lc(D`!D`LN62sNwq{oYw(Wmhk)k<@f$!$@ng~_5)Ru z0Z)trIA5^j{DIW^c+vT2%lW+2<(RtE2wR;4O@)Tm`Xr*?A(qYoM}7i5Yxw>D(&6ou zxz!_Xr~yNF+waPe00049Nkl*;a!v6h%{rlvIH#gW3s8p;bFr=l}mRqpW2h zw=OA%hdyL~z+UHOzl0eKhEr$YYOL-c-%Y<)=j?(bzDweB7{b+%_ypvm_cG{SvM=DK zhv{K@m>#Bw>2W$eUI#iU)Wdgs8Y3U+A$Gd&{+j)d)BmGKx+43U_!tik_YlN)>$7G! zhkE!s;%oku3;IwG3U^2kw?z+HM)jB{@zFhK8P#KMSytSthr+4!c(5c%+^UBn`0X*2 zy3(k600_CSZj?O$Qu%&$;|TGUJrptR(HzyIx>5E(2r{eA(<6t3e3I0B)7d6s7?Z5J zZ!rtKvA{MiEBm&KFtoifx>5P^Z=vl)95XJn()aS5%ad(s?4-=Tkis9IGu{`Fy8r+H07*qoM6N<$f20Z)wqMt%V?S?~D#06};F zA3KcL`Wb+>5ObvgQIG&ig8(;V04hz?@cqy3{mSh8o!|U|)cI!1_+!fWH@o*8vh^CU z^ws0;(c$gI+2~q^tO#GDHf@=;DncUw00J^eL_t(&-tE|HQ`%4vfZ;WsBqu-$0nu1R zq^Vj;p$clf^?twn|KHO+IGt^q#a3X?w9dXC@*yxhv&l}F322(8Y1&=P&I}~G@#h6; z1CV9ecD9ZEe87{{NtI*)_aJ<`kJa z?5=RBtFF50s;jQLFil-`)m2wrb=6h(&brpj%nG_U&ut~$?8Rokzxi8zJoWr#2dto5 zOX_URcc<1`Iky+jc;A%Vzx}1QU{2$|cKPom2Vf1{8m`vja4{F>HS?^Nc^rp}xo+Nh zxd}eOm`fm3@MQC1< zIk&aCjb~Yh%5+Yq0`)D;q{#-Uqlv*o+Oor zE!I71Z@ASH3grl8&P^L0WpavHoP|UX4e?!igT`4?AZk$hu*@%6WJ;zDOGlw7kj@ zY5!B-0ft0f?Lgb>C;$Ke07*qoM6N<$f~t1N9smFU literal 0 HcmV?d00001 diff --git a/animations/step_05_c/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png b/animations/step_05_c/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..0ec303439225b78712f49115768196d8d76f6790 GIT binary patch literal 862 zcmV-k1EKthP)20Z)wqMt%V?S?~D#06};F zA3KcL`Wb+>5ObvgQIG&ig8(;V04hz?@cqy3{mSh8o!|U|)cI!1_+!fWH@o*8vh^CU z^ws0;(c$gI+2~q^tO#GDHf@=;DncUw00J^eL_t(&-tE|HQ`%4vfZ;WsBqu-$0nu1R zq^Vj;p$clf^?twn|KHO+IGt^q#a3X?w9dXC@*yxhv&l}F322(8Y1&=P&I}~G@#h6; z1CV9ecD9ZEe87{{NtI*)_aJ<`kJa z?5=RBtFF50s;jQLFil-`)m2wrb=6h(&brpj%nG_U&ut~$?8Rokzxi8zJoWr#2dto5 zOX_URcc<1`Iky+jc;A%Vzx}1QU{2$|cKPom2Vf1{8m`vja4{F>HS?^Nc^rp}xo+Nh zxd}eOm`fm3@MQC1< zIk&aCjb~Yh%5+Yq0`)D;q{#-Uqlv*o+Oor zE!I71Z@ASH3grl8&P^L0WpavHoP|UX4e?!igT`4?AZk$hu*@%6WJ;zDOGlw7kj@ zY5!B-0ft0f?Lgb>C;$Ke07*qoM6N<$f~t1N9smFU literal 0 HcmV?d00001 diff --git a/animations/step_05_c/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png b/animations/step_05_c/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..e9f5fea27c705180eb716271f41b582e76dcbd90 GIT binary patch literal 1674 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 literal 0 HcmV?d00001 diff --git a/animations/step_05_c/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png b/animations/step_05_c/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..0467bf12aa4d28f374bb26596605a46dcbb3e7c8 GIT binary patch literal 1418 zcmV;51$Fv~P)q zKfU)WzW*n(@|xWGCA9ScMt*e9`2kdxPQ&&>|-UCa7_51w+ zLUsW@ZzZSW0y$)Hp~e9%PvP|a03ks1`~K?q{u;6NC8*{AOqIUq{CL&;p56Lf$oQGq z^={4hPQv)y=I|4n+?>7Fim=dxt1 z2H+Dm+1+fh+IF>G0SjJMkQQre1x4|G*Z==(Ot&kCnUrL4I(rf(ucITwmuHf^hXiJT zkdTm&kdTm&kdTm&kdP`esgWG0BcWCVkVZ&2dUwN`cgM8QJb`Z7Z~e<&Yj2(}>Tmf` zm1{eLgw!b{bXkjWbF%dTkTZEJWyWOb##Lfw4EK2}<0d6%>AGS{po>WCOy&f$Tay_> z?NBlkpo@s-O;0V%Y_Xa-G#_O08q5LR*~F%&)}{}r&L%Sbs8AS4t7Y0NEx*{soY=0MZExqA5XHQkqi#4gW3 zqODM^iyZl;dvf)-bOXtOru(s)Uc7~BFx{w-FK;2{`VA?(g&@3z&bfLFyctOH!cVsF z7IL=fo-qBndRUm;kAdXR4e6>k-z|21AaN%ubeVrHl*<|s&Ax@W-t?LR(P-24A5=>a z*R9#QvjzF8n%@1Nw@?CG@6(%>+-0ASK~jEmCV|&a*7-GKT72W<(TbSjf)&Eme6nGE z>Gkj4Sq&2e+-G%|+NM8OOm5zVl9{Z8Dd8A5z3y8mZ=4Bv4%>as_{9cN#bm~;h>62( zdqY93Zy}v&c4n($Vv!UybR8ocs7#zbfX1IY-*w~)p}XyZ-SFC~4w>BvMVr`dFbelV{lLL0bx7@*ZZdebr3`sP;? zVImji)kG)(6Juv0lz@q`F!k1FE;CQ(D0iG$wchPbKZQELlsZ#~rt8#90Y_Xh&3U-< z{s<&cCV_1`^TD^ia9!*mQDq& zn2{r`j};V|uV%_wsP!zB?m%;FeaRe+X47K0e+KE!8C{gAWF8)lCd1u1%~|M!XNRvw zvtqy3iz0WSpWdhn6$hP8PaRBmp)q`#PCA`Vd#Tc$@f1tAcM>f_I@bC)hkI9|o(Iqv zo}Piadq!j76}004RBio<`)70k^`K1NK)q>w?p^C6J2ZC!+UppiK6&y3Kmbv&O!oYF z34$0Z;QO!JOY#!`qyGH<3Pd}Pt@q*A0V=3SVtWKRR8d8Z&@)3qLPA19LPA19LPEUC YUoZo%k(ykuW&i*H07*qoM6N<$f+CH{y8r+H literal 0 HcmV?d00001 diff --git a/animations/step_05_c/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json b/animations/step_05_c/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json new file mode 100644 index 0000000000..0bedcf2fd4 --- /dev/null +++ b/animations/step_05_c/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "LaunchImage.png", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "LaunchImage@2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "filename" : "LaunchImage@3x.png", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} diff --git a/animations/step_05_c/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png b/animations/step_05_c/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png new file mode 100644 index 0000000000000000000000000000000000000000..9da19eacad3b03bb08bbddbbf4ac48dd78b3d838 GIT binary patch literal 68 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx0wlM}@Gt=>Zci7-kcv6Uzs@r-FtIZ-&5|)J Q1PU{Fy85}Sb4q9e0B4a5jsO4v literal 0 HcmV?d00001 diff --git a/animations/step_05_c/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png b/animations/step_05_c/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..9da19eacad3b03bb08bbddbbf4ac48dd78b3d838 GIT binary patch literal 68 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx0wlM}@Gt=>Zci7-kcv6Uzs@r-FtIZ-&5|)J Q1PU{Fy85}Sb4q9e0B4a5jsO4v literal 0 HcmV?d00001 diff --git a/animations/step_05_c/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png b/animations/step_05_c/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..9da19eacad3b03bb08bbddbbf4ac48dd78b3d838 GIT binary patch literal 68 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx0wlM}@Gt=>Zci7-kcv6Uzs@r-FtIZ-&5|)J Q1PU{Fy85}Sb4q9e0B4a5jsO4v literal 0 HcmV?d00001 diff --git a/animations/step_05_c/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md b/animations/step_05_c/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md new file mode 100644 index 0000000000..89c2725b70 --- /dev/null +++ b/animations/step_05_c/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md @@ -0,0 +1,5 @@ +# Launch Screen Assets + +You can customize the launch screen with your own desired assets by replacing the image files in this directory. + +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. \ No newline at end of file diff --git a/animations/step_05_c/ios/Runner/Base.lproj/LaunchScreen.storyboard b/animations/step_05_c/ios/Runner/Base.lproj/LaunchScreen.storyboard new file mode 100644 index 0000000000..f2e259c7c9 --- /dev/null +++ b/animations/step_05_c/ios/Runner/Base.lproj/LaunchScreen.storyboard @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/animations/step_05_c/ios/Runner/Base.lproj/Main.storyboard b/animations/step_05_c/ios/Runner/Base.lproj/Main.storyboard new file mode 100644 index 0000000000..f3c28516fb --- /dev/null +++ b/animations/step_05_c/ios/Runner/Base.lproj/Main.storyboard @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/animations/step_05_c/ios/Runner/Info.plist b/animations/step_05_c/ios/Runner/Info.plist new file mode 100644 index 0000000000..1a0d38e408 --- /dev/null +++ b/animations/step_05_c/ios/Runner/Info.plist @@ -0,0 +1,49 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleDisplayName + Quiz + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + quiz + CFBundlePackageType + APPL + CFBundleShortVersionString + $(FLUTTER_BUILD_NAME) + CFBundleSignature + ???? + CFBundleVersion + $(FLUTTER_BUILD_NUMBER) + LSRequiresIPhoneOS + + UILaunchStoryboardName + LaunchScreen + UIMainStoryboardFile + Main + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + CADisableMinimumFrameDurationOnPhone + + UIApplicationSupportsIndirectInputEvents + + + diff --git a/animations/step_05_c/ios/Runner/Runner-Bridging-Header.h b/animations/step_05_c/ios/Runner/Runner-Bridging-Header.h new file mode 100644 index 0000000000..308a2a560b --- /dev/null +++ b/animations/step_05_c/ios/Runner/Runner-Bridging-Header.h @@ -0,0 +1 @@ +#import "GeneratedPluginRegistrant.h" diff --git a/animations/step_05_c/ios/RunnerTests/RunnerTests.swift b/animations/step_05_c/ios/RunnerTests/RunnerTests.swift new file mode 100644 index 0000000000..86a7c3b1b6 --- /dev/null +++ b/animations/step_05_c/ios/RunnerTests/RunnerTests.swift @@ -0,0 +1,12 @@ +import Flutter +import UIKit +import XCTest + +class RunnerTests: XCTestCase { + + func testExample() { + // If you add code to the Runner application, consider adding tests here. + // See https://developer.apple.com/documentation/xctest for more information about using XCTest. + } + +} diff --git a/animations/step_05_c/lib/flip_effect.dart b/animations/step_05_c/lib/flip_effect.dart new file mode 100644 index 0000000000..cafd21bece --- /dev/null +++ b/animations/step_05_c/lib/flip_effect.dart @@ -0,0 +1,85 @@ +import 'package:flutter/widgets.dart'; +import 'dart:math' as math; + +class CardFlipEffect extends StatefulWidget { + final Widget child; + final Duration duration; + final double delayAmount; + + const CardFlipEffect({ + super.key, + required this.child, + required this.duration, + required this.delayAmount, + }); + + @override + State createState() => _CardFlipEffectState(); +} + +class _CardFlipEffectState extends State + with SingleTickerProviderStateMixin { + late final AnimationController _animationController; + Widget? _previousChild; + late final Animation _animationWithDelay; + + @override + void initState() { + super.initState(); + + _animationController = AnimationController( + vsync: this, duration: widget.duration * (widget.delayAmount + 1)); + + _animationController.addListener(() { + if (_animationController.value == 1) { + _animationController.reset(); + } + }); + + _animationWithDelay = TweenSequence([ + if (widget.delayAmount > 0) + TweenSequenceItem( + tween: ConstantTween(0.0), + weight: widget.delayAmount, + ), + TweenSequenceItem( + tween: Tween(begin: 0.0, end: 1.0), + weight: 1.0, + ), + ]).animate(_animationController); + } + + @override + void didUpdateWidget(covariant CardFlipEffect oldWidget) { + super.didUpdateWidget(oldWidget); + + if (widget.child.key != oldWidget.child.key) { + _handleChildChanged(widget.child, oldWidget.child); + } + } + + void _handleChildChanged(Widget newChild, Widget previousChild) { + _previousChild = previousChild; + _animationController.forward(); + } + + @override + Widget build(BuildContext context) { + return AnimatedBuilder( + animation: _animationWithDelay, + builder: (context, child) { + return Transform( + alignment: Alignment.center, + transform: Matrix4.identity() + ..rotateX(_animationWithDelay.value * math.pi), + child: _animationController.isAnimating + ? _animationWithDelay.value < 0.5 + ? _previousChild + : Transform.flip(flipY: true, child: widget.child) + : widget.child, + ); + }, + child: widget.child, + ); + } +} diff --git a/animations/step_05_c/lib/home_screen.dart b/animations/step_05_c/lib/home_screen.dart new file mode 100644 index 0000000000..534110a0c8 --- /dev/null +++ b/animations/step_05_c/lib/home_screen.dart @@ -0,0 +1,41 @@ +import 'package:flutter/material.dart'; +import 'question_screen.dart'; + +class HomeScreen extends StatelessWidget { + const HomeScreen({super.key}); + + @override + Widget build(BuildContext context) { + return Scaffold( + body: Center( + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + Text( + '✏️', + style: Theme.of(context).textTheme.displayLarge, + ), + Text( + 'Flutter Quiz', + style: Theme.of(context).textTheme.displayLarge!.copyWith( + fontWeight: FontWeight.w700, + color: Theme.of(context).colorScheme.onPrimaryFixedVariant), + ), + ElevatedButton( + onPressed: () { + // Show the question screen to start the game + Navigator.push( + context, + MaterialPageRoute(builder: (context) { + return const QuestionScreen(); + }), + ); + }, + child: const Text('New Game'), + ), + ], + ), + ), + ); + } +} diff --git a/animations/step_05_c/lib/main.dart b/animations/step_05_c/lib/main.dart new file mode 100644 index 0000000000..9ad4855719 --- /dev/null +++ b/animations/step_05_c/lib/main.dart @@ -0,0 +1,33 @@ +import 'package:animations/animations.dart'; +import 'package:flutter/material.dart'; + +import 'home_screen.dart'; + +void main() { + runApp(MainApp()); +} + +class MainApp extends StatelessWidget { + const MainApp({super.key}); + + @override + Widget build(BuildContext context) { + return MaterialApp( + debugShowCheckedModeBanner: false, + theme: ThemeData( + colorScheme: ColorScheme.fromSeed(seedColor: Colors.blue), + useMaterial3: true, + pageTransitionsTheme: PageTransitionsTheme( + builders: { + TargetPlatform.android: PredictiveBackPageTransitionsBuilder(), + TargetPlatform.iOS: FadeThroughPageTransitionsBuilder(), + TargetPlatform.macOS: FadeThroughPageTransitionsBuilder(), + TargetPlatform.windows: FadeThroughPageTransitionsBuilder(), + TargetPlatform.linux: FadeThroughPageTransitionsBuilder(), + }, + ), + ), + home: HomeScreen(), + ); + } +} diff --git a/animations/step_05_c/lib/model.dart b/animations/step_05_c/lib/model.dart new file mode 100644 index 0000000000..0662327f52 --- /dev/null +++ b/animations/step_05_c/lib/model.dart @@ -0,0 +1,62 @@ +import 'dart:math' as math; + +class Question { + final String question; + final List possibleAnswers; + final int correctAnswer; + Question(this.question, this.possibleAnswers, this.correctAnswer); +} + +class QuestionBank { + final List _questions = _createQuestions(); + + bool get hasNextQuestion => _questions.isNotEmpty; + int get remainingQuestions => _questions.length; + + Question? getRandomQuestion() { + if (_questions.isEmpty) { + return null; + } + + var i = math.Random().nextInt(_questions.length); + var question = _questions[i]; + + _questions.removeAt(i); + return question; + } +} + +List _createQuestions() { + return [ + Question( + 'What class used to create custom explicit animations in Flutter?', + [ + 'AnimationController', + 'AnimatedWidget', + 'AnimatedBuilder', + 'Tween', + ], + 0, + ), + Question( + 'Which widget is used to rebuild its child whenever an animation changes?', + [ + 'AnimatedContainer', + 'AnimatedBuilder', + 'AnimatedSwitcher', + 'AnimatedOpacity', + ], + 1, + ), + Question( + 'What class is used to define the start and end values for an animation?', + [ + 'Tween', + 'Curve', + 'AnimationController', + 'AnimatedWidget', + ], + 0, + ), + ]; +} diff --git a/animations/step_05_c/lib/question_screen.dart b/animations/step_05_c/lib/question_screen.dart new file mode 100644 index 0000000000..458f617e59 --- /dev/null +++ b/animations/step_05_c/lib/question_screen.dart @@ -0,0 +1,200 @@ +import 'package:animations/animations.dart'; +import 'package:flutter/material.dart'; +import 'flip_effect.dart'; +import 'scoreboard.dart'; +import 'view_model.dart'; + +class QuestionScreen extends StatefulWidget { + const QuestionScreen({super.key}); + + @override + State createState() => _QuestionScreenState(); +} + +class _QuestionScreenState extends State { + late final QuizViewModel viewModel = + QuizViewModel(onGameOver: _handleGameOver); + + @override + Widget build(BuildContext context) { + return ListenableBuilder( + listenable: viewModel, + builder: (context, child) { + return Scaffold( + appBar: AppBar( + actions: [ + TextButton( + onPressed: + viewModel.hasNextQuestion && viewModel.didAnswerQuestion + ? () { + viewModel.getNextQuestion(); + } + : null, + child: const Text('Next'), + ) + ], + ), + body: Center( + child: Column( + children: [ + QuestionCard(question: viewModel.currentQuestion?.question), + Spacer(), + AnswerCards( + onTapped: (index) { + viewModel.checkAnswer(index); + }, + answers: viewModel.currentQuestion?.possibleAnswers ?? [], + correctAnswer: viewModel.didAnswerQuestion + ? viewModel.currentQuestion?.correctAnswer + : null, + ), + StatusBar(viewModel: viewModel), + ], + ), + ), + ); + }, + ); + } + + void _handleGameOver() { + showDialog( + barrierDismissible: false, + context: context, + builder: (context) { + return AlertDialog( + title: Text('Game Over!'), + content: Text('Score: ${viewModel.score}'), + actions: [ + TextButton( + onPressed: () { + Navigator.popUntil(context, (route) => route.isFirst); + }, + child: Text('OK'), + ), + ], + ); + }, + ); + } +} + +class QuestionCard extends StatelessWidget { + final String? question; + + const QuestionCard({ + required this.question, + super.key, + }); + + @override + Widget build(BuildContext context) { + return PageTransitionSwitcher( + duration: const Duration(milliseconds: 200), + layoutBuilder: (List entries) { + return Stack( + alignment: Alignment.topCenter, + children: [ + ...entries, + ], + ); + }, + transitionBuilder: (Widget child, animation, secondaryAnimation) { + return FadeThroughTransition( + animation: animation, + secondaryAnimation: secondaryAnimation, + child: child, + ); + }, + child: Card( + key: ValueKey(question), + elevation: 4, + child: Padding( + padding: const EdgeInsets.all(16.0), + child: Text( + question ?? "", + style: Theme.of(context).textTheme.displaySmall, + ), + ), + ), + ); + } +} + +class AnswerCards extends StatelessWidget { + final List answers; + final ValueChanged onTapped; + final int? correctAnswer; + + const AnswerCards({ + required this.answers, + required this.onTapped, + required this.correctAnswer, + super.key, + }); + + @override + Widget build(BuildContext context) { + return GridView.count( + shrinkWrap: true, + crossAxisCount: 2, + childAspectRatio: 5 / 2, + children: List.generate(answers.length, (index) { + var color = Theme.of(context).colorScheme.primaryContainer; + if (correctAnswer == index) { + color = Theme.of(context).colorScheme.tertiaryContainer; + } + + return CardFlipEffect( + delayAmount: index.toDouble() / 2, + duration: const Duration(milliseconds: 300), + child: Card.filled( + key: ValueKey(answers[index]), + color: color, + elevation: 2, + margin: const EdgeInsets.all(8), + clipBehavior: Clip.hardEdge, + child: InkWell( + onTap: () => onTapped(index), + child: Padding( + padding: const EdgeInsets.all(16.0), + child: Center( + child: Text( + answers.length > index ? answers[index] : "", + style: Theme.of(context).textTheme.titleMedium, + overflow: TextOverflow.clip, + ), + ), + ), + ), + ), + ); + }), + ); + } +} + +class StatusBar extends StatelessWidget { + final QuizViewModel viewModel; + + const StatusBar({required this.viewModel, super.key}); + + @override + Widget build(BuildContext context) { + return Card( + elevation: 4, + child: Padding( + padding: EdgeInsets.all(8.0), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceAround, + children: [ + Scoreboard( + score: viewModel.score, + totalQuestions: viewModel.totalQuestions, + ), + ], + ), + ), + ); + } +} diff --git a/animations/step_05_c/lib/scoreboard.dart b/animations/step_05_c/lib/scoreboard.dart new file mode 100644 index 0000000000..dd71080ba3 --- /dev/null +++ b/animations/step_05_c/lib/scoreboard.dart @@ -0,0 +1,62 @@ +import 'package:flutter/material.dart'; + +class Scoreboard extends StatelessWidget { + final int score; + final int totalQuestions; + + const Scoreboard({ + super.key, + required this.score, + required this.totalQuestions, + }); + + @override + Widget build(BuildContext context) { + return Padding( + padding: const EdgeInsets.all(8.0), + child: Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + for (var i = 0; i < totalQuestions; i++) + AnimatedStar( + isActive: score > i, + ) + ], + ), + ); + } +} + +class AnimatedStar extends StatelessWidget { + final bool isActive; + final Duration _duration = const Duration(milliseconds: 1000); + final Color _deactivatedColor = Colors.grey.shade400; + final Color _activatedColor = Colors.yellow.shade700; + final Curve _curve = Curves.elasticOut; + + AnimatedStar({super.key, required this.isActive}); + + @override + Widget build(BuildContext context) { + return AnimatedScale( + scale: isActive ? 1.0 : 0.5, + curve: _curve, + duration: _duration, + child: TweenAnimationBuilder( + curve: _curve, + duration: _duration, + tween: ColorTween( + begin: _deactivatedColor, + end: isActive ? _activatedColor : _deactivatedColor, + ), + builder: (context, value, child) { + return Icon( + Icons.star, + size: 50, + color: value, + ); + }, + ), + ); + } +} diff --git a/animations/step_05_c/lib/view_model.dart b/animations/step_05_c/lib/view_model.dart new file mode 100644 index 0000000000..84fc5f218b --- /dev/null +++ b/animations/step_05_c/lib/view_model.dart @@ -0,0 +1,43 @@ +import 'package:flutter/cupertino.dart'; +import 'model.dart'; + +class QuizViewModel extends ChangeNotifier { + final QuestionBank _questionBank = QuestionBank(); + final VoidCallback onGameOver; + late final int totalQuestions; + Question? currentQuestion; + int answeredQuestionCount = 0; + int score = 0; + bool didAnswerQuestion = false; + bool get hasNextQuestion => answeredQuestionCount < totalQuestions; + + QuizViewModel({required this.onGameOver}) { + totalQuestions = _questionBank.remainingQuestions; + getNextQuestion(); + } + + void getNextQuestion() { + if (_questionBank.hasNextQuestion) { + currentQuestion = _questionBank.getRandomQuestion(); + answeredQuestionCount++; + } + + didAnswerQuestion = false; + + notifyListeners(); + } + + void checkAnswer(int selectedIndex) { + if (!didAnswerQuestion && currentQuestion?.correctAnswer == selectedIndex) { + score++; + } + + didAnswerQuestion = true; + + if (!_questionBank.hasNextQuestion) { + onGameOver(); + } + + notifyListeners(); + } +} diff --git a/animations/step_05_c/linux/.gitignore b/animations/step_05_c/linux/.gitignore new file mode 100644 index 0000000000..d3896c9844 --- /dev/null +++ b/animations/step_05_c/linux/.gitignore @@ -0,0 +1 @@ +flutter/ephemeral diff --git a/animations/step_05_c/linux/CMakeLists.txt b/animations/step_05_c/linux/CMakeLists.txt new file mode 100644 index 0000000000..658be85ac5 --- /dev/null +++ b/animations/step_05_c/linux/CMakeLists.txt @@ -0,0 +1,145 @@ +# Project-level configuration. +cmake_minimum_required(VERSION 3.10) +project(runner LANGUAGES CXX) + +# The name of the executable created for the application. Change this to change +# the on-disk name of your application. +set(BINARY_NAME "quiz") +# The unique GTK application identifier for this application. See: +# https://wiki.gnome.org/HowDoI/ChooseApplicationID +set(APPLICATION_ID "com.example.quiz") + +# Explicitly opt in to modern CMake behaviors to avoid warnings with recent +# versions of CMake. +cmake_policy(SET CMP0063 NEW) + +# Load bundled libraries from the lib/ directory relative to the binary. +set(CMAKE_INSTALL_RPATH "$ORIGIN/lib") + +# Root filesystem for cross-building. +if(FLUTTER_TARGET_PLATFORM_SYSROOT) + set(CMAKE_SYSROOT ${FLUTTER_TARGET_PLATFORM_SYSROOT}) + set(CMAKE_FIND_ROOT_PATH ${CMAKE_SYSROOT}) + set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) + set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY) + set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) + set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) +endif() + +# Define build configuration options. +if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) + set(CMAKE_BUILD_TYPE "Debug" CACHE + STRING "Flutter build mode" FORCE) + set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS + "Debug" "Profile" "Release") +endif() + +# Compilation settings that should be applied to most targets. +# +# Be cautious about adding new options here, as plugins use this function by +# default. In most cases, you should add new options to specific targets instead +# of modifying this function. +function(APPLY_STANDARD_SETTINGS TARGET) + target_compile_features(${TARGET} PUBLIC cxx_std_14) + target_compile_options(${TARGET} PRIVATE -Wall -Werror) + target_compile_options(${TARGET} PRIVATE "$<$>:-O3>") + target_compile_definitions(${TARGET} PRIVATE "$<$>:NDEBUG>") +endfunction() + +# Flutter library and tool build rules. +set(FLUTTER_MANAGED_DIR "${CMAKE_CURRENT_SOURCE_DIR}/flutter") +add_subdirectory(${FLUTTER_MANAGED_DIR}) + +# System-level dependencies. +find_package(PkgConfig REQUIRED) +pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) + +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Define the application target. To change its name, change BINARY_NAME above, +# not the value here, or `flutter run` will no longer work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +# Run the Flutter tool portions of the build. This must not be removed. +add_dependencies(${BINARY_NAME} flutter_assemble) + +# Only the install-generated bundle's copy of the executable will launch +# correctly, since the resources must in the right relative locations. To avoid +# people trying to run the unbundled copy, put it in a subdirectory instead of +# the default top-level location. +set_target_properties(${BINARY_NAME} + PROPERTIES + RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/intermediates_do_not_run" +) + + +# Generated plugin build rules, which manage building the plugins and adding +# them to the application. +include(flutter/generated_plugins.cmake) + + +# === Installation === +# By default, "installing" just makes a relocatable bundle in the build +# directory. +set(BUILD_BUNDLE_DIR "${PROJECT_BINARY_DIR}/bundle") +if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) + set(CMAKE_INSTALL_PREFIX "${BUILD_BUNDLE_DIR}" CACHE PATH "..." FORCE) +endif() + +# Start with a clean build bundle directory every time. +install(CODE " + file(REMOVE_RECURSE \"${BUILD_BUNDLE_DIR}/\") + " COMPONENT Runtime) + +set(INSTALL_BUNDLE_DATA_DIR "${CMAKE_INSTALL_PREFIX}/data") +set(INSTALL_BUNDLE_LIB_DIR "${CMAKE_INSTALL_PREFIX}/lib") + +install(TARGETS ${BINARY_NAME} RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_ICU_DATA_FILE}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) + +foreach(bundled_library ${PLUGIN_BUNDLED_LIBRARIES}) + install(FILES "${bundled_library}" + DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) +endforeach(bundled_library) + +# Copy the native assets provided by the build.dart from all packages. +set(NATIVE_ASSETS_DIR "${PROJECT_BUILD_DIR}native_assets/linux/") +install(DIRECTORY "${NATIVE_ASSETS_DIR}" + DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) + +# Fully re-copy the assets directory on each build to avoid having stale files +# from a previous install. +set(FLUTTER_ASSET_DIR_NAME "flutter_assets") +install(CODE " + file(REMOVE_RECURSE \"${INSTALL_BUNDLE_DATA_DIR}/${FLUTTER_ASSET_DIR_NAME}\") + " COMPONENT Runtime) +install(DIRECTORY "${PROJECT_BUILD_DIR}/${FLUTTER_ASSET_DIR_NAME}" + DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" COMPONENT Runtime) + +# Install the AOT library on non-Debug builds only. +if(NOT CMAKE_BUILD_TYPE MATCHES "Debug") + install(FILES "${AOT_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) +endif() diff --git a/animations/step_05_c/linux/flutter/CMakeLists.txt b/animations/step_05_c/linux/flutter/CMakeLists.txt new file mode 100644 index 0000000000..d5bd01648a --- /dev/null +++ b/animations/step_05_c/linux/flutter/CMakeLists.txt @@ -0,0 +1,88 @@ +# This file controls Flutter-level build steps. It should not be edited. +cmake_minimum_required(VERSION 3.10) + +set(EPHEMERAL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/ephemeral") + +# Configuration provided via flutter tool. +include(${EPHEMERAL_DIR}/generated_config.cmake) + +# TODO: Move the rest of this into files in ephemeral. See +# https://github.com/flutter/flutter/issues/57146. + +# Serves the same purpose as list(TRANSFORM ... PREPEND ...), +# which isn't available in 3.10. +function(list_prepend LIST_NAME PREFIX) + set(NEW_LIST "") + foreach(element ${${LIST_NAME}}) + list(APPEND NEW_LIST "${PREFIX}${element}") + endforeach(element) + set(${LIST_NAME} "${NEW_LIST}" PARENT_SCOPE) +endfunction() + +# === Flutter Library === +# System-level dependencies. +find_package(PkgConfig REQUIRED) +pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) +pkg_check_modules(GLIB REQUIRED IMPORTED_TARGET glib-2.0) +pkg_check_modules(GIO REQUIRED IMPORTED_TARGET gio-2.0) + +set(FLUTTER_LIBRARY "${EPHEMERAL_DIR}/libflutter_linux_gtk.so") + +# Published to parent scope for install step. +set(FLUTTER_LIBRARY ${FLUTTER_LIBRARY} PARENT_SCOPE) +set(FLUTTER_ICU_DATA_FILE "${EPHEMERAL_DIR}/icudtl.dat" PARENT_SCOPE) +set(PROJECT_BUILD_DIR "${PROJECT_DIR}/build/" PARENT_SCOPE) +set(AOT_LIBRARY "${PROJECT_DIR}/build/lib/libapp.so" PARENT_SCOPE) + +list(APPEND FLUTTER_LIBRARY_HEADERS + "fl_basic_message_channel.h" + "fl_binary_codec.h" + "fl_binary_messenger.h" + "fl_dart_project.h" + "fl_engine.h" + "fl_json_message_codec.h" + "fl_json_method_codec.h" + "fl_message_codec.h" + "fl_method_call.h" + "fl_method_channel.h" + "fl_method_codec.h" + "fl_method_response.h" + "fl_plugin_registrar.h" + "fl_plugin_registry.h" + "fl_standard_message_codec.h" + "fl_standard_method_codec.h" + "fl_string_codec.h" + "fl_value.h" + "fl_view.h" + "flutter_linux.h" +) +list_prepend(FLUTTER_LIBRARY_HEADERS "${EPHEMERAL_DIR}/flutter_linux/") +add_library(flutter INTERFACE) +target_include_directories(flutter INTERFACE + "${EPHEMERAL_DIR}" +) +target_link_libraries(flutter INTERFACE "${FLUTTER_LIBRARY}") +target_link_libraries(flutter INTERFACE + PkgConfig::GTK + PkgConfig::GLIB + PkgConfig::GIO +) +add_dependencies(flutter flutter_assemble) + +# === Flutter tool backend === +# _phony_ is a non-existent file to force this command to run every time, +# since currently there's no way to get a full input/output list from the +# flutter tool. +add_custom_command( + OUTPUT ${FLUTTER_LIBRARY} ${FLUTTER_LIBRARY_HEADERS} + ${CMAKE_CURRENT_BINARY_DIR}/_phony_ + COMMAND ${CMAKE_COMMAND} -E env + ${FLUTTER_TOOL_ENVIRONMENT} + "${FLUTTER_ROOT}/packages/flutter_tools/bin/tool_backend.sh" + ${FLUTTER_TARGET_PLATFORM} ${CMAKE_BUILD_TYPE} + VERBATIM +) +add_custom_target(flutter_assemble DEPENDS + "${FLUTTER_LIBRARY}" + ${FLUTTER_LIBRARY_HEADERS} +) diff --git a/animations/step_05_c/linux/flutter/generated_plugin_registrant.cc b/animations/step_05_c/linux/flutter/generated_plugin_registrant.cc new file mode 100644 index 0000000000..e71a16d23d --- /dev/null +++ b/animations/step_05_c/linux/flutter/generated_plugin_registrant.cc @@ -0,0 +1,11 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#include "generated_plugin_registrant.h" + + +void fl_register_plugins(FlPluginRegistry* registry) { +} diff --git a/animations/step_05_c/linux/flutter/generated_plugin_registrant.h b/animations/step_05_c/linux/flutter/generated_plugin_registrant.h new file mode 100644 index 0000000000..e0f0a47bc0 --- /dev/null +++ b/animations/step_05_c/linux/flutter/generated_plugin_registrant.h @@ -0,0 +1,15 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#ifndef GENERATED_PLUGIN_REGISTRANT_ +#define GENERATED_PLUGIN_REGISTRANT_ + +#include + +// Registers Flutter plugins. +void fl_register_plugins(FlPluginRegistry* registry); + +#endif // GENERATED_PLUGIN_REGISTRANT_ diff --git a/animations/step_05_c/linux/flutter/generated_plugins.cmake b/animations/step_05_c/linux/flutter/generated_plugins.cmake new file mode 100644 index 0000000000..2e1de87a7e --- /dev/null +++ b/animations/step_05_c/linux/flutter/generated_plugins.cmake @@ -0,0 +1,23 @@ +# +# Generated file, do not edit. +# + +list(APPEND FLUTTER_PLUGIN_LIST +) + +list(APPEND FLUTTER_FFI_PLUGIN_LIST +) + +set(PLUGIN_BUNDLED_LIBRARIES) + +foreach(plugin ${FLUTTER_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${plugin}/linux plugins/${plugin}) + target_link_libraries(${BINARY_NAME} PRIVATE ${plugin}_plugin) + list(APPEND PLUGIN_BUNDLED_LIBRARIES $) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${plugin}_bundled_libraries}) +endforeach(plugin) + +foreach(ffi_plugin ${FLUTTER_FFI_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${ffi_plugin}/linux plugins/${ffi_plugin}) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${ffi_plugin}_bundled_libraries}) +endforeach(ffi_plugin) diff --git a/animations/step_05_c/linux/main.cc b/animations/step_05_c/linux/main.cc new file mode 100644 index 0000000000..e7c5c54370 --- /dev/null +++ b/animations/step_05_c/linux/main.cc @@ -0,0 +1,6 @@ +#include "my_application.h" + +int main(int argc, char** argv) { + g_autoptr(MyApplication) app = my_application_new(); + return g_application_run(G_APPLICATION(app), argc, argv); +} diff --git a/animations/step_05_c/linux/my_application.cc b/animations/step_05_c/linux/my_application.cc new file mode 100644 index 0000000000..d6ea0e3c5f --- /dev/null +++ b/animations/step_05_c/linux/my_application.cc @@ -0,0 +1,124 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "quiz"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "quiz"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/animations/step_05_c/linux/my_application.h b/animations/step_05_c/linux/my_application.h new file mode 100644 index 0000000000..72271d5e41 --- /dev/null +++ b/animations/step_05_c/linux/my_application.h @@ -0,0 +1,18 @@ +#ifndef FLUTTER_MY_APPLICATION_H_ +#define FLUTTER_MY_APPLICATION_H_ + +#include + +G_DECLARE_FINAL_TYPE(MyApplication, my_application, MY, APPLICATION, + GtkApplication) + +/** + * my_application_new: + * + * Creates a new Flutter-based application. + * + * Returns: a new #MyApplication. + */ +MyApplication* my_application_new(); + +#endif // FLUTTER_MY_APPLICATION_H_ diff --git a/animations/step_05_c/macos/.gitignore b/animations/step_05_c/macos/.gitignore new file mode 100644 index 0000000000..746adbb6b9 --- /dev/null +++ b/animations/step_05_c/macos/.gitignore @@ -0,0 +1,7 @@ +# Flutter-related +**/Flutter/ephemeral/ +**/Pods/ + +# Xcode-related +**/dgph +**/xcuserdata/ diff --git a/animations/step_05_c/macos/Flutter/Flutter-Debug.xcconfig b/animations/step_05_c/macos/Flutter/Flutter-Debug.xcconfig new file mode 100644 index 0000000000..c2efd0b608 --- /dev/null +++ b/animations/step_05_c/macos/Flutter/Flutter-Debug.xcconfig @@ -0,0 +1 @@ +#include "ephemeral/Flutter-Generated.xcconfig" diff --git a/animations/step_05_c/macos/Flutter/Flutter-Release.xcconfig b/animations/step_05_c/macos/Flutter/Flutter-Release.xcconfig new file mode 100644 index 0000000000..c2efd0b608 --- /dev/null +++ b/animations/step_05_c/macos/Flutter/Flutter-Release.xcconfig @@ -0,0 +1 @@ +#include "ephemeral/Flutter-Generated.xcconfig" diff --git a/animations/step_05_c/macos/Flutter/GeneratedPluginRegistrant.swift b/animations/step_05_c/macos/Flutter/GeneratedPluginRegistrant.swift new file mode 100644 index 0000000000..cccf817a52 --- /dev/null +++ b/animations/step_05_c/macos/Flutter/GeneratedPluginRegistrant.swift @@ -0,0 +1,10 @@ +// +// Generated file. Do not edit. +// + +import FlutterMacOS +import Foundation + + +func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { +} diff --git a/animations/step_05_c/macos/Runner.xcodeproj/project.pbxproj b/animations/step_05_c/macos/Runner.xcodeproj/project.pbxproj new file mode 100644 index 0000000000..45c35dfed5 --- /dev/null +++ b/animations/step_05_c/macos/Runner.xcodeproj/project.pbxproj @@ -0,0 +1,705 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 54; + objects = { + +/* Begin PBXAggregateTarget section */ + 33CC111A2044C6BA0003C045 /* Flutter Assemble */ = { + isa = PBXAggregateTarget; + buildConfigurationList = 33CC111B2044C6BA0003C045 /* Build configuration list for PBXAggregateTarget "Flutter Assemble" */; + buildPhases = ( + 33CC111E2044C6BF0003C045 /* ShellScript */, + ); + dependencies = ( + ); + name = "Flutter Assemble"; + productName = FLX; + }; +/* End PBXAggregateTarget section */ + +/* Begin PBXBuildFile section */ + 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; + 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; + 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; + 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; + 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; + 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 331C80D9294CF71000263BE5 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 33CC10E52044A3C60003C045 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 33CC10EC2044A3C60003C045; + remoteInfo = Runner; + }; + 33CC111F2044C79F0003C045 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 33CC10E52044A3C60003C045 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 33CC111A2044C6BA0003C045; + remoteInfo = FLX; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 33CC110E2044A8840003C045 /* Bundle Framework */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + ); + name = "Bundle Framework"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; + 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; + 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; }; + 33CC10ED2044A3C60003C045 /* quiz.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "quiz.app"; sourceTree = BUILT_PRODUCTS_DIR; }; + 33CC10F02044A3C60003C045 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 33CC10F22044A3C60003C045 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = Runner/Assets.xcassets; sourceTree = ""; }; + 33CC10F52044A3C60003C045 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = ""; }; + 33CC10F72044A3C60003C045 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = Info.plist; path = Runner/Info.plist; sourceTree = ""; }; + 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainFlutterWindow.swift; sourceTree = ""; }; + 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Debug.xcconfig"; sourceTree = ""; }; + 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Release.xcconfig"; sourceTree = ""; }; + 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = "Flutter-Generated.xcconfig"; path = "ephemeral/Flutter-Generated.xcconfig"; sourceTree = ""; }; + 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; + 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; + 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; + 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 331C80D2294CF70F00263BE5 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 33CC10EA2044A3C60003C045 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 331C80D6294CF71000263BE5 /* RunnerTests */ = { + isa = PBXGroup; + children = ( + 331C80D7294CF71000263BE5 /* RunnerTests.swift */, + ); + path = RunnerTests; + sourceTree = ""; + }; + 33BA886A226E78AF003329D5 /* Configs */ = { + isa = PBXGroup; + children = ( + 33E5194F232828860026EE4D /* AppInfo.xcconfig */, + 9740EEB21CF90195004384FC /* Debug.xcconfig */, + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, + 333000ED22D3DE5D00554162 /* Warnings.xcconfig */, + ); + path = Configs; + sourceTree = ""; + }; + 33CC10E42044A3C60003C045 = { + isa = PBXGroup; + children = ( + 33FAB671232836740065AC1E /* Runner */, + 33CEB47122A05771004F2AC0 /* Flutter */, + 331C80D6294CF71000263BE5 /* RunnerTests */, + 33CC10EE2044A3C60003C045 /* Products */, + D73912EC22F37F3D000D13A0 /* Frameworks */, + ); + sourceTree = ""; + }; + 33CC10EE2044A3C60003C045 /* Products */ = { + isa = PBXGroup; + children = ( + 33CC10ED2044A3C60003C045 /* quiz.app */, + 331C80D5294CF71000263BE5 /* RunnerTests.xctest */, + ); + name = Products; + sourceTree = ""; + }; + 33CC11242044D66E0003C045 /* Resources */ = { + isa = PBXGroup; + children = ( + 33CC10F22044A3C60003C045 /* Assets.xcassets */, + 33CC10F42044A3C60003C045 /* MainMenu.xib */, + 33CC10F72044A3C60003C045 /* Info.plist */, + ); + name = Resources; + path = ..; + sourceTree = ""; + }; + 33CEB47122A05771004F2AC0 /* Flutter */ = { + isa = PBXGroup; + children = ( + 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */, + 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */, + 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */, + 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */, + ); + path = Flutter; + sourceTree = ""; + }; + 33FAB671232836740065AC1E /* Runner */ = { + isa = PBXGroup; + children = ( + 33CC10F02044A3C60003C045 /* AppDelegate.swift */, + 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */, + 33E51913231747F40026EE4D /* DebugProfile.entitlements */, + 33E51914231749380026EE4D /* Release.entitlements */, + 33CC11242044D66E0003C045 /* Resources */, + 33BA886A226E78AF003329D5 /* Configs */, + ); + path = Runner; + sourceTree = ""; + }; + D73912EC22F37F3D000D13A0 /* Frameworks */ = { + isa = PBXGroup; + children = ( + ); + name = Frameworks; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 331C80D4294CF70F00263BE5 /* RunnerTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; + buildPhases = ( + 331C80D1294CF70F00263BE5 /* Sources */, + 331C80D2294CF70F00263BE5 /* Frameworks */, + 331C80D3294CF70F00263BE5 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 331C80DA294CF71000263BE5 /* PBXTargetDependency */, + ); + name = RunnerTests; + productName = RunnerTests; + productReference = 331C80D5294CF71000263BE5 /* RunnerTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; + 33CC10EC2044A3C60003C045 /* Runner */ = { + isa = PBXNativeTarget; + buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; + buildPhases = ( + 33CC10E92044A3C60003C045 /* Sources */, + 33CC10EA2044A3C60003C045 /* Frameworks */, + 33CC10EB2044A3C60003C045 /* Resources */, + 33CC110E2044A8840003C045 /* Bundle Framework */, + 3399D490228B24CF009A79C7 /* ShellScript */, + ); + buildRules = ( + ); + dependencies = ( + 33CC11202044C79F0003C045 /* PBXTargetDependency */, + ); + name = Runner; + productName = Runner; + productReference = 33CC10ED2044A3C60003C045 /* quiz.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 33CC10E52044A3C60003C045 /* Project object */ = { + isa = PBXProject; + attributes = { + BuildIndependentTargetsInParallel = YES; + LastSwiftUpdateCheck = 0920; + LastUpgradeCheck = 1510; + ORGANIZATIONNAME = ""; + TargetAttributes = { + 331C80D4294CF70F00263BE5 = { + CreatedOnToolsVersion = 14.0; + TestTargetID = 33CC10EC2044A3C60003C045; + }; + 33CC10EC2044A3C60003C045 = { + CreatedOnToolsVersion = 9.2; + LastSwiftMigration = 1100; + ProvisioningStyle = Automatic; + SystemCapabilities = { + com.apple.Sandbox = { + enabled = 1; + }; + }; + }; + 33CC111A2044C6BA0003C045 = { + CreatedOnToolsVersion = 9.2; + ProvisioningStyle = Manual; + }; + }; + }; + buildConfigurationList = 33CC10E82044A3C60003C045 /* Build configuration list for PBXProject "Runner" */; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 33CC10E42044A3C60003C045; + productRefGroup = 33CC10EE2044A3C60003C045 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 33CC10EC2044A3C60003C045 /* Runner */, + 331C80D4294CF70F00263BE5 /* RunnerTests */, + 33CC111A2044C6BA0003C045 /* Flutter Assemble */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 331C80D3294CF70F00263BE5 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 33CC10EB2044A3C60003C045 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */, + 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 3399D490228B24CF009A79C7 /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; + }; + 33CC111E2044C6BF0003C045 /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + Flutter/ephemeral/FlutterInputs.xcfilelist, + ); + inputPaths = ( + Flutter/ephemeral/tripwire, + ); + outputFileListPaths = ( + Flutter/ephemeral/FlutterOutputs.xcfilelist, + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 331C80D1294CF70F00263BE5 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 33CC10E92044A3C60003C045 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */, + 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */, + 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 331C80DA294CF71000263BE5 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 33CC10EC2044A3C60003C045 /* Runner */; + targetProxy = 331C80D9294CF71000263BE5 /* PBXContainerItemProxy */; + }; + 33CC11202044C79F0003C045 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 33CC111A2044C6BA0003C045 /* Flutter Assemble */; + targetProxy = 33CC111F2044C79F0003C045 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + 33CC10F42044A3C60003C045 /* MainMenu.xib */ = { + isa = PBXVariantGroup; + children = ( + 33CC10F52044A3C60003C045 /* Base */, + ); + name = MainMenu.xib; + path = Runner; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 331C80DB294CF71000263BE5 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.quiz.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/quiz.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/quiz"; + }; + name = Debug; + }; + 331C80DC294CF71000263BE5 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.quiz.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/quiz.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/quiz"; + }; + name = Release; + }; + 331C80DD294CF71000263BE5 /* Profile */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.quiz.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/quiz.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/quiz"; + }; + name = Profile; + }; + 338D0CE9231458BD00FA5F75 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + DEAD_CODE_STRIPPING = YES; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.14; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = macosx; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + }; + name = Profile; + }; + 338D0CEA231458BD00FA5F75 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_VERSION = 5.0; + }; + name = Profile; + }; + 338D0CEB231458BD00FA5F75 /* Profile */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Manual; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Profile; + }; + 33CC10F92044A3C60003C045 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + DEAD_CODE_STRIPPING = YES; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.14; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = macosx; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + }; + name = Debug; + }; + 33CC10FA2044A3C60003C045 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + DEAD_CODE_STRIPPING = YES; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.14; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = macosx; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + }; + name = Release; + }; + 33CC10FC2044A3C60003C045 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + }; + name = Debug; + }; + 33CC10FD2044A3C60003C045 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/Release.entitlements; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_VERSION = 5.0; + }; + name = Release; + }; + 33CC111C2044C6BA0003C045 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Manual; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Debug; + }; + 33CC111D2044C6BA0003C045 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Automatic; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 331C80DB294CF71000263BE5 /* Debug */, + 331C80DC294CF71000263BE5 /* Release */, + 331C80DD294CF71000263BE5 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 33CC10E82044A3C60003C045 /* Build configuration list for PBXProject "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 33CC10F92044A3C60003C045 /* Debug */, + 33CC10FA2044A3C60003C045 /* Release */, + 338D0CE9231458BD00FA5F75 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 33CC10FC2044A3C60003C045 /* Debug */, + 33CC10FD2044A3C60003C045 /* Release */, + 338D0CEA231458BD00FA5F75 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 33CC111B2044C6BA0003C045 /* Build configuration list for PBXAggregateTarget "Flutter Assemble" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 33CC111C2044C6BA0003C045 /* Debug */, + 33CC111D2044C6BA0003C045 /* Release */, + 338D0CEB231458BD00FA5F75 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 33CC10E52044A3C60003C045 /* Project object */; +} diff --git a/animations/step_05_c/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/animations/step_05_c/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000000..18d981003d --- /dev/null +++ b/animations/step_05_c/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/animations/step_05_c/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/animations/step_05_c/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme new file mode 100644 index 0000000000..2f413cb17b --- /dev/null +++ b/animations/step_05_c/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -0,0 +1,98 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/animations/step_05_c/macos/Runner.xcworkspace/contents.xcworkspacedata b/animations/step_05_c/macos/Runner.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000000..1d526a16ed --- /dev/null +++ b/animations/step_05_c/macos/Runner.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/animations/step_05_c/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/animations/step_05_c/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000000..18d981003d --- /dev/null +++ b/animations/step_05_c/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/animations/step_05_c/macos/Runner/AppDelegate.swift b/animations/step_05_c/macos/Runner/AppDelegate.swift new file mode 100644 index 0000000000..8e02df2888 --- /dev/null +++ b/animations/step_05_c/macos/Runner/AppDelegate.swift @@ -0,0 +1,9 @@ +import Cocoa +import FlutterMacOS + +@main +class AppDelegate: FlutterAppDelegate { + override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { + return true + } +} diff --git a/animations/step_05_c/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/animations/step_05_c/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000000..a2ec33f19f --- /dev/null +++ b/animations/step_05_c/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,68 @@ +{ + "images" : [ + { + "size" : "16x16", + "idiom" : "mac", + "filename" : "app_icon_16.png", + "scale" : "1x" + }, + { + "size" : "16x16", + "idiom" : "mac", + "filename" : "app_icon_32.png", + "scale" : "2x" + }, + { + "size" : "32x32", + "idiom" : "mac", + "filename" : "app_icon_32.png", + "scale" : "1x" + }, + { + "size" : "32x32", + "idiom" : "mac", + "filename" : "app_icon_64.png", + "scale" : "2x" + }, + { + "size" : "128x128", + "idiom" : "mac", + "filename" : "app_icon_128.png", + "scale" : "1x" + }, + { + "size" : "128x128", + "idiom" : "mac", + "filename" : "app_icon_256.png", + "scale" : "2x" + }, + { + "size" : "256x256", + "idiom" : "mac", + "filename" : "app_icon_256.png", + "scale" : "1x" + }, + { + "size" : "256x256", + "idiom" : "mac", + "filename" : "app_icon_512.png", + "scale" : "2x" + }, + { + "size" : "512x512", + "idiom" : "mac", + "filename" : "app_icon_512.png", + "scale" : "1x" + }, + { + "size" : "512x512", + "idiom" : "mac", + "filename" : "app_icon_1024.png", + "scale" : "2x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} diff --git a/animations/step_05_c/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png b/animations/step_05_c/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png new file mode 100644 index 0000000000000000000000000000000000000000..82b6f9d9a33e198f5747104729e1fcef999772a5 GIT binary patch literal 102994 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ⅅ8MglG&ER{i5lN315cO?EdHNLrg? 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 z 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 Pe7HEdAEg|=c=LY&YVNkY literal 0 HcmV?d00001 diff --git a/animations/step_05_c/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png b/animations/step_05_c/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png new file mode 100644 index 0000000000000000000000000000000000000000..13b35eba55c6dabc3aac36f33d859266c18fa0d0 GIT binary patch literal 5680 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 literal 0 HcmV?d00001 diff --git a/animations/step_05_c/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png b/animations/step_05_c/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png new file mode 100644 index 0000000000000000000000000000000000000000..0a3f5fa40fb3d1e0710331a48de5d256da3f275d GIT binary patch literal 520 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 literal 0 HcmV?d00001 diff --git a/animations/step_05_c/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png b/animations/step_05_c/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png new file mode 100644 index 0000000000000000000000000000000000000000..2f1632cfddf3d9dade342351e627a0a75609fb46 GIT binary patch literal 2218 zcmV;b2vzrqP)Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91K%fHv1ONa40RR91KmY&$07g+lumAuE6iGxuRCodHTWf3-RTMruyW6Fu zQYeUM04eX6D5c0FCjKKPrco1(K`<0SL=crI{PC3-^hZU0kQie$gh-5!7z6SH6Q0J% zqot*`H1q{R5fHFYS}dje@;kG=v$L0(yY0?wY2%*c?A&{2?!D*x?m71{of2gv!$5|C z3>qG_BW}7K_yUcT3A5C6QD<+{aq?x;MAUyAiJn#Jv8_zZtQ{P zTRzbL3U9!qVuZzS$xKU10KiW~Bgdcv1-!uAhQxf3a7q+dU6lj?yoO4Lq4TUN4}h{N z*fIM=SS8|C2$(T>w$`t@3Tka!(r!7W`x z-isCVgQD^mG-MJ;XtJuK3V{Vy72GQ83KRWsHU?e*wrhKk=ApIYeDqLi;JI1e zuvv}5^Dc=k7F7?nm3nIw$NVmU-+R>> zyqOR$-2SDpJ}Pt;^RkJytDVXNTsu|mI1`~G7yw`EJR?VkGfNdqK9^^8P`JdtTV&tX4CNcV4 z&N06nZa??Fw1AgQOUSE2AmPE@WO(Fvo`%m`cDgiv(fAeRA%3AGXUbsGw{7Q`cY;1BI#ac3iN$$Hw z0LT0;xc%=q)me?Y*$xI@GRAw?+}>=9D+KTk??-HJ4=A>`V&vKFS75@MKdSF1JTq{S zc1!^8?YA|t+uKigaq!sT;Z!&0F2=k7F0PIU;F$leJLaw2UI6FL^w}OG&!;+b%ya1c z1n+6-inU<0VM-Y_s5iTElq)ThyF?StVcebpGI znw#+zLx2@ah{$_2jn+@}(zJZ{+}_N9BM;z)0yr|gF-4=Iyu@hI*Lk=-A8f#bAzc9f z`Kd6K--x@t04swJVC3JK1cHY-Hq+=|PN-VO;?^_C#;coU6TDP7Bt`;{JTG;!+jj(` zw5cLQ-(Cz-Tlb`A^w7|R56Ce;Wmr0)$KWOUZ6ai0PhzPeHwdl0H(etP zUV`va_i0s-4#DkNM8lUlqI7>YQLf)(lz9Q3Uw`)nc(z3{m5ZE77Ul$V%m)E}3&8L0 z-XaU|eB~Is08eORPk;=<>!1w)Kf}FOVS2l&9~A+@R#koFJ$Czd%Y(ENTV&A~U(IPI z;UY+gf+&6ioZ=roly<0Yst8ck>(M=S?B-ys3mLdM&)ex!hbt+ol|T6CTS+Sc0jv(& z7ijdvFwBq;0a{%3GGwkDKTeG`b+lyj0jjS1OMkYnepCdoosNY`*zmBIo*981BU%%U z@~$z0V`OVtIbEx5pa|Tct|Lg#ZQf5OYMUMRD>Wdxm5SAqV2}3!ceE-M2 z@O~lQ0OiKQp}o9I;?uxCgYVV?FH|?Riri*U$Zi_`V2eiA>l zdSm6;SEm6#T+SpcE8Ro_f2AwxzI z44hfe^WE3!h@W3RDyA_H440cpmYkv*)6m1XazTqw%=E5Xv7^@^^T7Q2wxr+Z2kVYr + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/animations/step_05_c/macos/Runner/Configs/AppInfo.xcconfig b/animations/step_05_c/macos/Runner/Configs/AppInfo.xcconfig new file mode 100644 index 0000000000..28c7905763 --- /dev/null +++ b/animations/step_05_c/macos/Runner/Configs/AppInfo.xcconfig @@ -0,0 +1,14 @@ +// Application-level settings for the Runner target. +// +// This may be replaced with something auto-generated from metadata (e.g., pubspec.yaml) in the +// future. If not, the values below would default to using the project name when this becomes a +// 'flutter create' template. + +// The application's name. By default this is also the title of the Flutter window. +PRODUCT_NAME = quiz + +// The application's bundle identifier +PRODUCT_BUNDLE_IDENTIFIER = com.example.quiz + +// The copyright displayed in application information +PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved. diff --git a/animations/step_05_c/macos/Runner/Configs/Debug.xcconfig b/animations/step_05_c/macos/Runner/Configs/Debug.xcconfig new file mode 100644 index 0000000000..36b0fd9464 --- /dev/null +++ b/animations/step_05_c/macos/Runner/Configs/Debug.xcconfig @@ -0,0 +1,2 @@ +#include "../../Flutter/Flutter-Debug.xcconfig" +#include "Warnings.xcconfig" diff --git a/animations/step_05_c/macos/Runner/Configs/Release.xcconfig b/animations/step_05_c/macos/Runner/Configs/Release.xcconfig new file mode 100644 index 0000000000..dff4f49561 --- /dev/null +++ b/animations/step_05_c/macos/Runner/Configs/Release.xcconfig @@ -0,0 +1,2 @@ +#include "../../Flutter/Flutter-Release.xcconfig" +#include "Warnings.xcconfig" diff --git a/animations/step_05_c/macos/Runner/Configs/Warnings.xcconfig b/animations/step_05_c/macos/Runner/Configs/Warnings.xcconfig new file mode 100644 index 0000000000..42bcbf4780 --- /dev/null +++ b/animations/step_05_c/macos/Runner/Configs/Warnings.xcconfig @@ -0,0 +1,13 @@ +WARNING_CFLAGS = -Wall -Wconditional-uninitialized -Wnullable-to-nonnull-conversion -Wmissing-method-return-type -Woverlength-strings +GCC_WARN_UNDECLARED_SELECTOR = YES +CLANG_UNDEFINED_BEHAVIOR_SANITIZER_NULLABILITY = YES +CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE +CLANG_WARN__DUPLICATE_METHOD_MATCH = YES +CLANG_WARN_PRAGMA_PACK = YES +CLANG_WARN_STRICT_PROTOTYPES = YES +CLANG_WARN_COMMA = YES +GCC_WARN_STRICT_SELECTOR_MATCH = YES +CLANG_WARN_OBJC_REPEATED_USE_OF_WEAK = YES +CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES +GCC_WARN_SHADOW = YES +CLANG_WARN_UNREACHABLE_CODE = YES diff --git a/animations/step_05_c/macos/Runner/DebugProfile.entitlements b/animations/step_05_c/macos/Runner/DebugProfile.entitlements new file mode 100644 index 0000000000..dddb8a30c8 --- /dev/null +++ b/animations/step_05_c/macos/Runner/DebugProfile.entitlements @@ -0,0 +1,12 @@ + + + + + com.apple.security.app-sandbox + + com.apple.security.cs.allow-jit + + com.apple.security.network.server + + + diff --git a/animations/step_05_c/macos/Runner/Info.plist b/animations/step_05_c/macos/Runner/Info.plist new file mode 100644 index 0000000000..4789daa6a4 --- /dev/null +++ b/animations/step_05_c/macos/Runner/Info.plist @@ -0,0 +1,32 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIconFile + + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + APPL + CFBundleShortVersionString + $(FLUTTER_BUILD_NAME) + CFBundleVersion + $(FLUTTER_BUILD_NUMBER) + LSMinimumSystemVersion + $(MACOSX_DEPLOYMENT_TARGET) + NSHumanReadableCopyright + $(PRODUCT_COPYRIGHT) + NSMainNibFile + MainMenu + NSPrincipalClass + NSApplication + + diff --git a/animations/step_05_c/macos/Runner/MainFlutterWindow.swift b/animations/step_05_c/macos/Runner/MainFlutterWindow.swift new file mode 100644 index 0000000000..3cc05eb234 --- /dev/null +++ b/animations/step_05_c/macos/Runner/MainFlutterWindow.swift @@ -0,0 +1,15 @@ +import Cocoa +import FlutterMacOS + +class MainFlutterWindow: NSWindow { + override func awakeFromNib() { + let flutterViewController = FlutterViewController() + let windowFrame = self.frame + self.contentViewController = flutterViewController + self.setFrame(windowFrame, display: true) + + RegisterGeneratedPlugins(registry: flutterViewController) + + super.awakeFromNib() + } +} diff --git a/animations/step_05_c/macos/Runner/Release.entitlements b/animations/step_05_c/macos/Runner/Release.entitlements new file mode 100644 index 0000000000..852fa1a472 --- /dev/null +++ b/animations/step_05_c/macos/Runner/Release.entitlements @@ -0,0 +1,8 @@ + + + + + com.apple.security.app-sandbox + + + diff --git a/animations/step_05_c/macos/RunnerTests/RunnerTests.swift b/animations/step_05_c/macos/RunnerTests/RunnerTests.swift new file mode 100644 index 0000000000..61f3bd1fc5 --- /dev/null +++ b/animations/step_05_c/macos/RunnerTests/RunnerTests.swift @@ -0,0 +1,12 @@ +import Cocoa +import FlutterMacOS +import XCTest + +class RunnerTests: XCTestCase { + + func testExample() { + // If you add code to the Runner application, consider adding tests here. + // See https://developer.apple.com/documentation/xctest for more information about using XCTest. + } + +} diff --git a/animations/step_05_c/pubspec.yaml b/animations/step_05_c/pubspec.yaml new file mode 100644 index 0000000000..52735dfa55 --- /dev/null +++ b/animations/step_05_c/pubspec.yaml @@ -0,0 +1,21 @@ +name: quiz +description: A quiz app for demonstrating animation effects in Flutter +publish_to: "none" +version: 1.0.0 + +environment: + sdk: ^3.5.1 + +dependencies: + animations: ^2.0.0 + flutter: + sdk: flutter + +dev_dependencies: + flutter_test: + sdk: flutter + flutter_lints: ^4.0.0 + + +flutter: + uses-material-design: true diff --git a/animations/step_05_c/web/favicon.png b/animations/step_05_c/web/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..8aaa46ac1ae21512746f852a42ba87e4165dfdd1 GIT binary patch literal 917 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|I14-?iy0X7 zltGxWVyS%@P(fs7NJL45ua8x7ey(0(N`6wRUPW#JP&EUCO@$SZnVVXYs8ErclUHn2 zVXFjIVFhG^g!Ppaz)DK8ZIvQ?0~DO|i&7O#^-S~(l1AfjnEK zjFOT9D}DX)@^Za$W4-*MbbUihOG|wNBYh(yU7!lx;>x^|#0uTKVr7USFmqf|i<65o z3raHc^AtelCMM;Vme?vOfh>Xph&xL%(-1c06+^uR^q@XSM&D4+Kp$>4P^%3{)XKjo zGZknv$b36P8?Z_gF{nK@`XI}Z90TzwSQO}0J1!f2c(B=V`5aP@1P1a|PZ!4!3&Gl8 zTYqUsf!gYFyJnXpu0!n&N*SYAX-%d(5gVjrHJWqXQshj@!Zm{!01WsQrH~9=kTxW#6SvuapgMqt>$=j#%eyGrQzr zP{L-3gsMA^$I1&gsBAEL+vxi1*Igl=8#8`5?A-T5=z-sk46WA1IUT)AIZHx1rdUrf zVJrJn<74DDw`j)Ki#gt}mIT-Q`XRa2-jQXQoI%w`nb|XblvzK${ZzlV)m-XcwC(od z71_OEC5Bt9GEXosOXaPTYOia#R4ID2TiU~`zVMl08TV_C%DnU4^+HE>9(CE4D6?Fz oujB08i7adh9xk7*FX66dWH6F5TM;?E2b5PlUHx3vIVCg!0Dx9vYXATM literal 0 HcmV?d00001 diff --git a/animations/step_05_c/web/icons/Icon-192.png b/animations/step_05_c/web/icons/Icon-192.png new file mode 100644 index 0000000000000000000000000000000000000000..b749bfef07473333cf1dd31e9eed89862a5d52aa GIT binary patch literal 5292 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 literal 0 HcmV?d00001 diff --git a/animations/step_05_c/web/icons/Icon-512.png b/animations/step_05_c/web/icons/Icon-512.png new file mode 100644 index 0000000000000000000000000000000000000000..88cfd48dff1169879ba46840804b412fe02fefd6 GIT binary patch literal 8252 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 literal 0 HcmV?d00001 diff --git a/animations/step_05_c/web/icons/Icon-maskable-192.png b/animations/step_05_c/web/icons/Icon-maskable-192.png new file mode 100644 index 0000000000000000000000000000000000000000..eb9b4d76e525556d5d89141648c724331630325d GIT binary patch literal 5594 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 X>c!)3PgKfL&lX^$Z>Cpu&6)6jvi^Z! literal 0 HcmV?d00001 diff --git a/animations/step_05_c/web/icons/Icon-maskable-512.png b/animations/step_05_c/web/icons/Icon-maskable-512.png new file mode 100644 index 0000000000000000000000000000000000000000..d69c56691fbdb0b7efa65097c7cc1edac12a6d3e GIT binary patch literal 20998 zcmeFZ_gj-)&^4Nb2tlbLMU<{!p(#yjqEe+=0IA_oih%ScH9@5#MNp&}Y#;;(h=A0@ zh7{>lT2MkSQ344eAvrhici!td|HJuyvJm#Y_w1Q9Yu3!26dNlO-oxUDK_C#XnW^Co z5C{VN6#{~B0)K2j7}*1Xq(Nqemv23A-6&=ZpEijkVnSwVGqLv40?n0=p;k3-U5e5+ z+z3>aS`u9DS=!wg8ROu?X4TFoW6CFLL&{GzoVT)ldhLekLM|+j3tIxRd|*5=c{=s&*vfPdBr(Fyj(v@%eQj1Soy7m4^@VRl1~@-PV7y+c!xz$8436WBn$t{=}mEdK#k`aystimGgI{(IBx$!pAwFoE9Y`^t^;> zKAD)C(Dl^s%`?q5$P|fZf8Xymrtu^Pv(7D`rn>Z-w$Ahs!z9!94WNVxrJuXfHAaxg zC6s@|Z1$7R$(!#t%Jb{{s6(Y?NoQXDYq)!}X@jKPhe`{9KQ@sAU8y-5`xt?S9$jKH zoi}6m5PcG*^{kjvt+kwPpyQzVg4o)a>;LK`aaN2x4@itBD3Aq?yWTM20VRn1rrd+2 zKO=P0rMjEGq_UqpMa`~7B|p?xAN1SCoCp}QxAv8O`jLJ5CVh@umR%c%i^)6!o+~`F zaalSTQcl5iwOLC&H)efzd{8(88mo`GI(56T<(&p7>Qd^;R1hn1Y~jN~tApaL8>##U zd65bo8)79CplWxr#z4!6HvLz&N7_5AN#x;kLG?zQ(#p|lj<8VUlKY=Aw!ATqeL-VG z42gA!^cMNPj>(`ZMEbCrnkg*QTsn*u(nQPWI9pA{MQ=IsPTzd7q5E#7+z>Ch=fx$~ z;J|?(5jTo5UWGvsJa(Sx0?S#56+8SD!I^tftyeh_{5_31l6&Hywtn`bbqYDqGZXI( zCG7hBgvksX2ak8+)hB4jnxlO@A32C_RM&g&qDSb~3kM&)@A_j1*oTO@nicGUyv+%^ z=vB)4(q!ykzT==Z)3*3{atJ5}2PV*?Uw+HhN&+RvKvZL3p9E?gHjv{6zM!A|z|UHK z-r6jeLxbGn0D@q5aBzlco|nG2tr}N@m;CJX(4#Cn&p&sLKwzLFx1A5izu?X_X4x8r@K*d~7>t1~ zDW1Mv5O&WOxbzFC`DQ6yNJ(^u9vJdj$fl2dq`!Yba_0^vQHXV)vqv1gssZYzBct!j zHr9>ydtM8wIs}HI4=E}qAkv|BPWzh3^_yLH(|kdb?x56^BlDC)diWyPd*|f!`^12_U>TD^^94OCN0lVv~Sgvs94ecpE^}VY$w`qr_>Ue zTfH~;C<3H<0dS5Rkf_f@1x$Gms}gK#&k()IC0zb^QbR!YLoll)c$Agfi6MKI0dP_L z=Uou&u~~^2onea2%XZ@>`0x^L8CK6=I{ge;|HXMj)-@o~h&O{CuuwBX8pVqjJ*o}5 z#8&oF_p=uSo~8vn?R0!AMWvcbZmsrj{ZswRt(aEdbi~;HeVqIe)-6*1L%5u$Gbs}| zjFh?KL&U(rC2izSGtwP5FnsR@6$-1toz?RvLD^k~h9NfZgzHE7m!!7s6(;)RKo2z} zB$Ci@h({l?arO+vF;s35h=|WpefaOtKVx>l399}EsX@Oe3>>4MPy%h&^3N_`UTAHJ zI$u(|TYC~E4)|JwkWW3F!Tib=NzjHs5ii2uj0^m|Qlh-2VnB#+X~RZ|`SA*}}&8j9IDv?F;(Y^1=Z0?wWz;ikB zewU>MAXDi~O7a~?jx1x=&8GcR-fTp>{2Q`7#BE#N6D@FCp`?ht-<1|y(NArxE_WIu zP+GuG=Qq>SHWtS2M>34xwEw^uvo4|9)4s|Ac=ud?nHQ>ax@LvBqusFcjH0}{T3ZPQ zLO1l<@B_d-(IS682}5KA&qT1+{3jxKolW+1zL4inqBS-D>BohA!K5++41tM@ z@xe<-qz27}LnV#5lk&iC40M||JRmZ*A##K3+!j93eouU8@q-`W0r%7N`V$cR&JV;iX(@cS{#*5Q>~4BEDA)EikLSP@>Oo&Bt1Z~&0d5)COI%3$cLB_M?dK# z{yv2OqW!al-#AEs&QFd;WL5zCcp)JmCKJEdNsJlL9K@MnPegK23?G|O%v`@N{rIRa zi^7a}WBCD77@VQ-z_v{ZdRsWYrYgC$<^gRQwMCi6);%R~uIi31OMS}=gUTE(GKmCI z$zM>mytL{uNN+a&S38^ez(UT=iSw=l2f+a4)DyCA1Cs_N-r?Q@$3KTYosY!;pzQ0k zzh1G|kWCJjc(oZVBji@kN%)UBw(s{KaYGy=i{g3{)Z+&H8t2`^IuLLKWT6lL<-C(! zSF9K4xd-|VO;4}$s?Z7J_dYqD#Mt)WCDnsR{Kpjq275uUq6`v0y*!PHyS(}Zmv)_{>Vose9-$h8P0|y;YG)Bo}$(3Z%+Gs0RBmFiW!^5tBmDK-g zfe5%B*27ib+7|A*Fx5e)2%kIxh7xWoc3pZcXS2zik!63lAG1;sC1ja>BqH7D zODdi5lKW$$AFvxgC-l-)!c+9@YMC7a`w?G(P#MeEQ5xID#<}W$3bSmJ`8V*x2^3qz zVe<^^_8GHqYGF$nIQm0Xq2kAgYtm#UC1A(=&85w;rmg#v906 zT;RyMgbMpYOmS&S9c38^40oUp?!}#_84`aEVw;T;r%gTZkWeU;;FwM@0y0adt{-OK z(vGnPSlR=Nv2OUN!2=xazlnHPM9EWxXg2EKf0kI{iQb#FoP>xCB<)QY>OAM$Dcdbm zU6dU|%Mo(~avBYSjRc13@|s>axhrPl@Sr81{RSZUdz4(=|82XEbV*JAX6Lfbgqgz584lYgi0 z2-E{0XCVON$wHfvaLs;=dqhQJ&6aLn$D#0i(FkAVrXG9LGm3pSTf&f~RQb6|1_;W> z?n-;&hrq*~L=(;u#jS`*Yvh@3hU-33y_Kv1nxqrsf>pHVF&|OKkoC)4DWK%I!yq?P z=vXo8*_1iEWo8xCa{HJ4tzxOmqS0&$q+>LroMKI*V-rxhOc%3Y!)Y|N6p4PLE>Yek>Y(^KRECg8<|%g*nQib_Yc#A5q8Io z6Ig&V>k|~>B6KE%h4reAo*DfOH)_01tE0nWOxX0*YTJgyw7moaI^7gW*WBAeiLbD?FV9GSB zPv3`SX*^GRBM;zledO`!EbdBO_J@fEy)B{-XUTVQv}Qf~PSDpK9+@I`7G7|>Dgbbu z_7sX9%spVo$%qwRwgzq7!_N;#Td08m5HV#?^dF-EV1o)Q=Oa+rs2xH#g;ykLbwtCh znUnA^dW!XjspJ;otq$yV@I^s9Up(5k7rqhQd@OLMyyxVLj_+$#Vc*}Usevp^I(^vH zmDgHc0VMme|K&X?9&lkN{yq_(If)O`oUPW8X}1R5pSVBpfJe0t{sPA(F#`eONTh_) zxeLqHMfJX#?P(@6w4CqRE@Eiza; z;^5)Kk=^5)KDvd9Q<`=sJU8rjjxPmtWMTmzcH={o$U)j=QBuHarp?=}c??!`3d=H$nrJMyr3L-& zA#m?t(NqLM?I3mGgWA_C+0}BWy3-Gj7bR+d+U?n*mN$%5P`ugrB{PeV>jDUn;eVc- zzeMB1mI4?fVJatrNyq|+zn=!AiN~<}eoM#4uSx^K?Iw>P2*r=k`$<3kT00BE_1c(02MRz4(Hq`L^M&xt!pV2 zn+#U3@j~PUR>xIy+P>51iPayk-mqIK_5rlQMSe5&tDkKJk_$i(X&;K(11YGpEc-K= zq4Ln%^j>Zi_+Ae9eYEq_<`D+ddb8_aY!N;)(&EHFAk@Ekg&41ABmOXfWTo)Z&KotA zh*jgDGFYQ^y=m)<_LCWB+v48DTJw*5dwMm_YP0*_{@HANValf?kV-Ic3xsC}#x2h8 z`q5}d8IRmqWk%gR)s~M}(Qas5+`np^jW^oEd-pzERRPMXj$kS17g?H#4^trtKtq;C?;c ztd|%|WP2w2Nzg@)^V}!Gv++QF2!@FP9~DFVISRW6S?eP{H;;8EH;{>X_}NGj^0cg@ z!2@A>-CTcoN02^r6@c~^QUa={0xwK0v4i-tQ9wQq^=q*-{;zJ{Qe%7Qd!&X2>rV@4 z&wznCz*63_vw4>ZF8~%QCM?=vfzW0r_4O^>UA@otm_!N%mH)!ERy&b!n3*E*@?9d^ zu}s^By@FAhG(%?xgJMuMzuJw2&@$-oK>n z=UF}rt%vuaP9fzIFCYN-1&b#r^Cl6RDFIWsEsM|ROf`E?O(cy{BPO2Ie~kT+^kI^i zp>Kbc@C?}3vy-$ZFVX#-cx)Xj&G^ibX{pWggtr(%^?HeQL@Z( zM-430g<{>vT*)jK4aY9(a{lSy{8vxLbP~n1MXwM527ne#SHCC^F_2@o`>c>>KCq9c(4c$VSyMl*y3Nq1s+!DF| z^?d9PipQN(mw^j~{wJ^VOXDCaL$UtwwTpyv8IAwGOg<|NSghkAR1GSNLZ1JwdGJYm zP}t<=5=sNNUEjc=g(y)1n5)ynX(_$1-uGuDR*6Y^Wgg(LT)Jp><5X|}bt z_qMa&QP?l_n+iVS>v%s2Li_;AIeC=Ca^v1jX4*gvB$?H?2%ndnqOaK5-J%7a} zIF{qYa&NfVY}(fmS0OmXA70{znljBOiv5Yod!vFU{D~*3B3Ka{P8?^ zfhlF6o7aNT$qi8(w<}OPw5fqA7HUje*r*Oa(YV%*l0|9FP9KW@U&{VSW{&b0?@y)M zs%4k1Ax;TGYuZ9l;vP5@?3oQsp3)rjBeBvQQ>^B;z5pc=(yHhHtq6|0m(h4envn_j787fizY@V`o(!SSyE7vlMT zbo=Z1c=atz*G!kwzGB;*uPL$Ei|EbZLh8o+1BUMOpnU(uX&OG1MV@|!&HOOeU#t^x zr9=w2ow!SsTuJWT7%Wmt14U_M*3XiWBWHxqCVZI0_g0`}*^&yEG9RK9fHK8e+S^m? zfCNn$JTswUVbiC#>|=wS{t>-MI1aYPLtzO5y|LJ9nm>L6*wpr_m!)A2Fb1RceX&*|5|MwrvOk4+!0p99B9AgP*9D{Yt|x=X}O% zgIG$MrTB=n-!q%ROT|SzH#A$Xm;|ym)0>1KR}Yl0hr-KO&qMrV+0Ej3d@?FcgZ+B3 ztEk16g#2)@x=(ko8k7^Tq$*5pfZHC@O@}`SmzT1(V@x&NkZNM2F#Q-Go7-uf_zKC( zB(lHZ=3@dHaCOf6C!6i8rDL%~XM@rVTJbZL09?ht@r^Z_6x}}atLjvH^4Vk#Ibf(^LiBJFqorm?A=lE zzFmwvp4bT@Nv2V>YQT92X;t9<2s|Ru5#w?wCvlhcHLcsq0TaFLKy(?nzezJ>CECqj zggrI~Hd4LudM(m{L@ezfnpELsRFVFw>fx;CqZtie`$BXRn#Ns%AdoE$-Pf~{9A8rV zf7FbgpKmVzmvn-z(g+&+-ID=v`;6=)itq8oM*+Uz**SMm_{%eP_c0{<%1JGiZS19o z@Gj7$Se~0lsu}w!%;L%~mIAO;AY-2i`9A*ZfFs=X!LTd6nWOZ7BZH2M{l2*I>Xu)0 z`<=;ObglnXcVk!T>e$H?El}ra0WmPZ$YAN0#$?|1v26^(quQre8;k20*dpd4N{i=b zuN=y}_ew9SlE~R{2+Rh^7%PA1H5X(p8%0TpJ=cqa$65XL)$#ign-y!qij3;2>j}I; ziO@O|aYfn&up5F`YtjGw68rD3{OSGNYmBnl?zdwY$=RFsegTZ=kkzRQ`r7ZjQP!H( zp4>)&zf<*N!tI00xzm-ME_a{_I!TbDCr;8E;kCH4LlL-tqLxDuBn-+xgPk37S&S2^ z2QZumkIimwz!c@!r0)j3*(jPIs*V!iLTRl0Cpt_UVNUgGZzdvs0(-yUghJfKr7;=h zD~y?OJ-bWJg;VdZ^r@vlDoeGV&8^--!t1AsIMZ5S440HCVr%uk- z2wV>!W1WCvFB~p$P$$_}|H5>uBeAe>`N1FI8AxM|pq%oNs;ED8x+tb44E) zTj{^fbh@eLi%5AqT?;d>Es5D*Fi{Bpk)q$^iF!!U`r2hHAO_?#!aYmf>G+jHsES4W zgpTKY59d?hsb~F0WE&dUp6lPt;Pm zcbTUqRryw^%{ViNW%Z(o8}dd00H(H-MmQmOiTq{}_rnwOr*Ybo7*}3W-qBT!#s0Ie z-s<1rvvJx_W;ViUD`04%1pra*Yw0BcGe)fDKUK8aF#BwBwMPU;9`!6E(~!043?SZx z13K%z@$$#2%2ovVlgFIPp7Q6(vO)ud)=*%ZSucL2Dh~K4B|%q4KnSpj#n@(0B})!9 z8p*hY@5)NDn^&Pmo;|!>erSYg`LkO?0FB@PLqRvc>4IsUM5O&>rRv|IBRxi(RX(gJ ztQ2;??L~&Mv;aVr5Q@(?y^DGo%pO^~zijld41aA0KKsy_6FeHIn?fNHP-z>$OoWer zjZ5hFQTy*-f7KENRiCE$ZOp4|+Wah|2=n@|W=o}bFM}Y@0e62+_|#fND5cwa3;P{^pEzlJbF1Yq^}>=wy8^^^$I2M_MH(4Dw{F6hm+vrWV5!q;oX z;tTNhz5`-V={ew|bD$?qcF^WPR{L(E%~XG8eJx(DoGzt2G{l8r!QPJ>kpHeOvCv#w zr=SSwMDaUX^*~v%6K%O~i)<^6`{go>a3IdfZ8hFmz&;Y@P%ZygShQZ2DSHd`m5AR= zx$wWU06;GYwXOf(%MFyj{8rPFXD};JCe85Bdp4$YJ2$TzZ7Gr#+SwCvBI1o$QP0(c zy`P51FEBV2HTisM3bHqpmECT@H!Y2-bv2*SoSPoO?wLe{M#zDTy@ujAZ!Izzky~3k zRA1RQIIoC*Mej1PH!sUgtkR0VCNMX(_!b65mo66iM*KQ7xT8t2eev$v#&YdUXKwGm z7okYAqYF&bveHeu6M5p9xheRCTiU8PFeb1_Rht0VVSbm%|1cOVobc8mvqcw!RjrMRM#~=7xibH&Fa5Imc|lZ{eC|R__)OrFg4@X_ ze+kk*_sDNG5^ELmHnZ7Ue?)#6!O)#Nv*Dl2mr#2)w{#i-;}0*_h4A%HidnmclH#;Q zmQbq+P4DS%3}PpPm7K_K3d2s#k~x+PlTul7+kIKol0@`YN1NG=+&PYTS->AdzPv!> zQvzT=)9se*Jr1Yq+C{wbK82gAX`NkbXFZ)4==j4t51{|-v!!$H8@WKA={d>CWRW+g z*`L>9rRucS`vbXu0rzA1#AQ(W?6)}1+oJSF=80Kf_2r~Qm-EJ6bbB3k`80rCv(0d` zvCf3;L2ovYG_TES%6vSuoKfIHC6w;V31!oqHM8-I8AFzcd^+_86!EcCOX|Ta9k1!s z_Vh(EGIIsI3fb&dF$9V8v(sTBC%!#<&KIGF;R+;MyC0~}$gC}}= zR`DbUVc&Bx`lYykFZ4{R{xRaUQkWCGCQlEc;!mf=+nOk$RUg*7 z;kP7CVLEc$CA7@6VFpsp3_t~m)W0aPxjsA3e5U%SfY{tp5BV5jH-5n?YX7*+U+Zs%LGR>U- z!x4Y_|4{gx?ZPJobISy991O znrmrC3otC;#4^&Rg_iK}XH(XX+eUHN0@Oe06hJk}F?`$)KmH^eWz@@N%wEc)%>?Ft z#9QAroDeyfztQ5Qe{m*#R#T%-h*&XvSEn@N$hYRTCMXS|EPwzF3IIysD2waj`vQD{ zv_#^Pgr?s~I*NE=acf@dWVRNWTr(GN0wrL)Z2=`Dr>}&ZDNX|+^Anl{Di%v1Id$_p zK5_H5`RDjJx`BW7hc85|> zHMMsWJ4KTMRHGu+vy*kBEMjz*^K8VtU=bXJYdhdZ-?jTXa$&n)C?QQIZ7ln$qbGlr zS*TYE+ppOrI@AoPP=VI-OXm}FzgXRL)OPvR$a_=SsC<3Jb+>5makX|U!}3lx4tX&L z^C<{9TggZNoeX!P1jX_K5HkEVnQ#s2&c#umzV6s2U-Q;({l+j^?hi7JnQ7&&*oOy9 z(|0asVTWUCiCnjcOnB2pN0DpuTglKq;&SFOQ3pUdye*eT<2()7WKbXp1qq9=bhMWlF-7BHT|i3TEIT77AcjD(v=I207wi-=vyiw5mxgPdTVUC z&h^FEUrXwWs9en2C{ywZp;nvS(Mb$8sBEh-*_d-OEm%~p1b2EpcwUdf<~zmJmaSTO zSX&&GGCEz-M^)G$fBvLC2q@wM$;n4jp+mt0MJFLuJ%c`tSp8$xuP|G81GEd2ci$|M z4XmH{5$j?rqDWoL4vs!}W&!?!rtj=6WKJcE>)?NVske(p;|#>vL|M_$as=mi-n-()a*OU3Okmk0wC<9y7t^D(er-&jEEak2!NnDiOQ99Wx8{S8}=Ng!e0tzj*#T)+%7;aM$ z&H}|o|J1p{IK0Q7JggAwipvHvko6>Epmh4RFRUr}$*2K4dz85o7|3#Bec9SQ4Y*;> zXWjT~f+d)dp_J`sV*!w>B%)#GI_;USp7?0810&3S=WntGZ)+tzhZ+!|=XlQ&@G@~3 z-dw@I1>9n1{+!x^Hz|xC+P#Ab`E@=vY?3%Bc!Po~e&&&)Qp85!I|U<-fCXy*wMa&t zgDk!l;gk;$taOCV$&60z+}_$ykz=Ea*)wJQ3-M|p*EK(cvtIre0Pta~(95J7zoxBN zS(yE^3?>88AL0Wfuou$BM{lR1hkrRibz=+I9ccwd`ZC*{NNqL)3pCcw^ygMmrG^Yp zn5f}Xf>%gncC=Yq96;rnfp4FQL#{!Y*->e82rHgY4Zwy{`JH}b9*qr^VA{%~Z}jtp z_t$PlS6}5{NtTqXHN?uI8ut8rOaD#F1C^ls73S=b_yI#iZDOGz3#^L@YheGd>L;<( z)U=iYj;`{>VDNzIxcjbTk-X3keXR8Xbc`A$o5# zKGSk-7YcoBYuAFFSCjGi;7b<;n-*`USs)IX z=0q6WZ=L!)PkYtZE-6)azhXV|+?IVGTOmMCHjhkBjfy@k1>?yFO3u!)@cl{fFAXnRYsWk)kpT?X{_$J=|?g@Q}+kFw|%n!;Zo}|HE@j=SFMvT8v`6Y zNO;tXN^036nOB2%=KzxB?n~NQ1K8IO*UE{;Xy;N^ZNI#P+hRZOaHATz9(=)w=QwV# z`z3+P>9b?l-@$@P3<;w@O1BdKh+H;jo#_%rr!ute{|YX4g5}n?O7Mq^01S5;+lABE+7`&_?mR_z7k|Ja#8h{!~j)| zbBX;*fsbUak_!kXU%HfJ2J+G7;inu#uRjMb|8a){=^))y236LDZ$$q3LRlat1D)%7K0!q5hT5V1j3qHc7MG9 z_)Q=yQ>rs>3%l=vu$#VVd$&IgO}Za#?aN!xY>-<3PhzS&q!N<=1Q7VJBfHjug^4|) z*fW^;%3}P7X#W3d;tUs3;`O&>;NKZBMR8au6>7?QriJ@gBaorz-+`pUWOP73DJL=M z(33uT6Gz@Sv40F6bN|H=lpcO z^AJl}&=TIjdevuDQ!w0K*6oZ2JBOhb31q!XDArFyKpz!I$p4|;c}@^bX{>AXdt7Bm zaLTk?c%h@%xq02reu~;t@$bv`b3i(P=g}~ywgSFpM;}b$zAD+=I!7`V~}ARB(Wx0C(EAq@?GuxOL9X+ffbkn3+Op0*80TqmpAq~EXmv%cq36celXmRz z%0(!oMp&2?`W)ALA&#|fu)MFp{V~~zIIixOxY^YtO5^FSox8v$#d0*{qk0Z)pNTt0QVZ^$`4vImEB>;Lo2!7K05TpY-sl#sWBz_W-aDIV`Ksabi zvpa#93Svo!70W*Ydh)Qzm{0?CU`y;T^ITg-J9nfWeZ-sbw)G@W?$Eomf%Bg2frfh5 zRm1{|E0+(4zXy){$}uC3%Y-mSA2-^I>Tw|gQx|7TDli_hB>``)Q^aZ`LJC2V3U$SABP}T)%}9g2pF9dT}aC~!rFFgkl1J$ z`^z{Arn3On-m%}r}TGF8KQe*OjSJ=T|caa_E;v89A{t@$yT^(G9=N9F?^kT*#s3qhJq!IH5|AhnqFd z0B&^gm3w;YbMNUKU>naBAO@fbz zqw=n!@--}o5;k6DvTW9pw)IJVz;X}ncbPVrmH>4x);8cx;q3UyiML1PWp%bxSiS|^ zC5!kc4qw%NSOGQ*Kcd#&$30=lDvs#*4W4q0u8E02U)7d=!W7+NouEyuF1dyH$D@G& zaFaxo9Ex|ZXA5y{eZT*i*dP~INSMAi@mvEX@q5i<&o&#sM}Df?Og8n8Ku4vOux=T% zeuw~z1hR}ZNwTn8KsQHKLwe2>p^K`YWUJEdVEl|mO21Bov!D0D$qPoOv=vJJ`)|%_ z>l%`eexY7t{BlVKP!`a^U@nM?#9OC*t76My_E_<16vCz1x_#82qj2PkWiMWgF8bM9 z(1t4VdHcJ;B~;Q%x01k_gQ0>u2*OjuEWNOGX#4}+N?Gb5;+NQMqp}Puqw2HnkYuKA zzKFWGHc&K>gwVgI1Sc9OT1s6fq=>$gZU!!xsilA$fF`kLdGoX*^t}ao@+^WBpk>`8 z4v_~gK|c2rCq#DZ+H)$3v~Hoi=)=1D==e3P zpKrRQ+>O^cyTuWJ%2}__0Z9SM_z9rptd*;-9uC1tDw4+A!=+K%8~M&+Zk#13hY$Y$ zo-8$*8dD5@}XDi19RjK6T^J~DIXbF5w&l?JLHMrf0 zLv0{7*G!==o|B%$V!a=EtVHdMwXLtmO~vl}P6;S(R2Q>*kTJK~!}gloxj)m|_LYK{ zl(f1cB=EON&wVFwK?MGn^nWuh@f95SHatPs(jcwSY#Dnl1@_gkOJ5=f`%s$ZHljRH0 z+c%lrb=Gi&N&1>^L_}#m>=U=(oT^vTA&3!xXNyqi$pdW1BDJ#^{h|2tZc{t^vag3& zAD7*8C`chNF|27itjBUo^CCDyEpJLX3&u+(L;YeeMwnXEoyN(ytoEabcl$lSgx~Ltatn}b$@j_yyMrBb03)shJE*$;Mw=;mZd&8e>IzE+4WIoH zCSZE7WthNUL$|Y#m!Hn?x7V1CK}V`KwW2D$-7&ODy5Cj;!_tTOOo1Mm%(RUt)#$@3 zhurA)t<7qik%%1Et+N1?R#hdBB#LdQ7{%-C zn$(`5e0eFh(#c*hvF>WT*07fk$N_631?W>kfjySN8^XC9diiOd#s?4tybICF;wBjp zIPzilX3{j%4u7blhq)tnaOBZ_`h_JqHXuI7SuIlNTgBk9{HIS&3|SEPfrvcE<@}E` zKk$y*nzsqZ{J{uWW9;#n=de&&h>m#A#q)#zRonr(?mDOYU&h&aQWD;?Z(22wY?t$U3qo`?{+amA$^TkxL+Ex2dh`q7iR&TPd0Ymwzo#b? zP$#t=elB5?k$#uE$K>C$YZbYUX_JgnXA`oF_Ifz4H7LEOW~{Gww&3s=wH4+j8*TU| zSX%LtJWqhr-xGNSe{;(16kxnak6RnZ{0qZ^kJI5X*It_YuynSpi(^-}Lolr{)#z_~ zw!(J-8%7Ybo^c3(mED`Xz8xecP35a6M8HarxRn%+NJBE;dw>>Y2T&;jzRd4FSDO3T zt*y+zXCtZQ0bP0yf6HRpD|WmzP;DR^-g^}{z~0x~z4j8m zucTe%k&S9Nt-?Jb^gYW1w6!Y3AUZ0Jcq;pJ)Exz%7k+mUOm6%ApjjSmflfKwBo6`B zhNb@$NHTJ>guaj9S{@DX)!6)b-Shav=DNKWy(V00k(D!v?PAR0f0vDNq*#mYmUp6> z76KxbFDw5U{{qx{BRj(>?|C`82ICKbfLxoldov-M?4Xl+3;I4GzLHyPOzYw7{WQST zPNYcx5onA%MAO9??41Po*1zW(Y%Zzn06-lUp{s<3!_9vv9HBjT02On0Hf$}NP;wF) zP<`2p3}A^~1YbvOh{ePMx$!JGUPX-tbBzp3mDZMY;}h;sQ->!p97GA)9a|tF(Gh{1$xk7 zUw?ELkT({Xw!KIr);kTRb1b|UL`r2_`a+&UFVCdJ)1T#fdh;71EQl9790Br0m_`$x z9|ZANuchFci8GNZ{XbP=+uXSJRe(;V5laQz$u18#?X*9}x7cIEbnr%<=1cX3EIu7$ zhHW6pe5M(&qEtsqRa>?)*{O;OJT+YUhG5{km|YI7I@JL_3Hwao9aXneiSA~a* z|Lp@c-oMNyeAEuUz{F?kuou3x#C*gU?lon!RC1s37gW^0Frc`lqQWH&(J4NoZg3m8 z;Lin#8Q+cFPD7MCzj}#|ws7b@?D9Q4dVjS4dpco=4yX5SSH=A@U@yqPdp@?g?qeia zH=Tt_9)G=6C2QIPsi-QipnK(mc0xXIN;j$WLf@n8eYvMk;*H-Q4tK%(3$CN}NGgO8n}fD~+>?<3UzvsrMf*J~%i;VKQHbF%TPalFi=#sgj)(P#SM^0Q=Tr>4kJVw8X3iWsP|e8tj}NjlMdWp z@2+M4HQu~3!=bZpjh;;DIDk&X}=c8~kn)FWWH z2KL1w^rA5&1@@^X%MjZ7;u(kH=YhH2pJPFQe=hn>tZd5RC5cfGYis8s9PKaxi*}-s6*W zRA^PwR=y^5Z){!(4D9-KC;0~;b*ploznFOaU`bJ_7U?qAi#mTo!&rIECRL$_y@yI27x2?W+zqDBD5~KCVYKFZLK+>ABC(Kj zeAll)KMgIlAG`r^rS{loBrGLtzhHY8$)<_S<(Dpkr(Ym@@vnQ&rS@FC*>2@XCH}M+an74WcRDcoQ+a3@A z9tYhl5$z7bMdTvD2r&jztBuo37?*k~wcU9GK2-)MTFS-lux-mIRYUuGUCI~V$?s#< z?1qAWb(?ZLm(N>%S%y10COdaq_Tm5c^%ooIxpR=`3e4C|@O5wY+eLik&XVi5oT7oe zmxH)Jd*5eo@!7t`x8!K=-+zJ-Sz)B_V$)s1pW~CDU$=q^&ABvf6S|?TOMB-RIm@CoFg>mjIQE)?+A1_3s6zmFU_oW&BqyMz1mY*IcP_2knjq5 zqw~JK(cVsmzc7*EvTT2rvpeqhg)W=%TOZ^>f`rD4|7Z5fq*2D^lpCttIg#ictgqZ$P@ru6P#f$x#KfnfTZj~LG6U_d-kE~`;kU_X)`H5so@?C zWmb!7x|xk@0L~0JFall*@ltyiL^)@3m4MqC7(7H0sH!WidId1#f#6R{Q&A!XzO1IAcIx;$k66dumt6lpUw@nL2MvqJ5^kbOVZ<^2jt5-njy|2@`07}0w z;M%I1$FCoLy`8xp8Tk)bFr;7aJeQ9KK6p=O$U0-&JYYy8woV*>b+FB?xLX`=pirYM z5K$BA(u)+jR{?O2r$c_Qvl?M{=Ar{yQ!UVsVn4k@0!b?_lA;dVz9uaQUgBH8Oz(Sb zrEs;&Ey>_ex8&!N{PmQjp+-Hlh|OA&wvDai#GpU=^-B70V0*LF=^bi+Nhe_o|azZ%~ZZ1$}LTmWt4aoB1 zPgccm$EwYU+jrdBaQFxQfn5gd(gM`Y*Ro1n&Zi?j=(>T3kmf94vdhf?AuS8>$Va#P zGL5F+VHpxdsCUa}+RqavXCobI-@B;WJbMphpK2%6t=XvKWWE|ruvREgM+|V=i6;;O zx$g=7^`$XWn0fu!gF=Xe9cMB8Z_SelD>&o&{1XFS`|nInK3BXlaeD*rc;R-#osyIS zWv&>~^TLIyBB6oDX+#>3<_0+2C4u2zK^wmHXXDD9_)kmLYJ!0SzM|%G9{pi)`X$uf zW}|%%#LgyK7m(4{V&?x_0KEDq56tk|0YNY~B(Sr|>WVz-pO3A##}$JCT}5P7DY+@W z#gJv>pA5>$|E3WO2tV7G^SuymB?tY`ooKcN3!vaQMnBNk-WATF{-$#}FyzgtJ8M^; zUK6KWSG)}6**+rZ&?o@PK3??uN{Q)#+bDP9i1W&j)oaU5d0bIWJ_9T5ac!qc?x66Q z$KUSZ`nYY94qfN_dpTFr8OW~A?}LD;Yty-BA)-be5Z3S#t2Io%q+cAbnGj1t$|qFR z9o?8B7OA^KjCYL=-!p}w(dkC^G6Nd%_I=1))PC0w5}ZZGJxfK)jP4Fwa@b-SYBw?% zdz9B-<`*B2dOn(N;mcTm%Do)rIvfXRNFX&1h`?>Rzuj~Wx)$p13nrDlS8-jwq@e@n zNIj_|8or==8~1h*Ih?w*8K7rYkGlwlTWAwLKc5}~dfz3y`kM&^Q|@C%1VAp_$wnw6zG~W4O+^ z>i?NY?oXf^Puc~+fDM$VgRNBpOZj{2cMP~gCqWAX4 z7>%$ux8@a&_B(pt``KSt;r+sR-$N;jdpY>|pyvPiN)9ohd*>mVST3wMo)){`B(&eX z1?zZJ-4u9NZ|~j1rdZYq4R$?swf}<6(#ex%7r{kh%U@kT)&kWuAszS%oJts=*OcL9 zaZwK<5DZw%1IFHXgFplP6JiL^dk8+SgM$D?8X+gE4172hXh!WeqIO>}$I9?Nry$*S zQ#f)RuH{P7RwA3v9f<-w>{PSzom;>(i&^l{E0(&Xp4A-*q-@{W1oE3K;1zb{&n28dSC2$N+6auXe0}e4b z)KLJ?5c*>@9K#I^)W;uU_Z`enquTUxr>mNq z1{0_puF-M7j${rs!dxxo3EelGodF1TvjV;Zpo;s{5f1pyCuRp=HDZ?s#IA4f?h|-p zGd|Mq^4hDa@Bh!c4ZE?O&x&XZ_ptZGYK4$9F4~{%R!}G1leCBx`dtNUS|K zL-7J5s4W@%mhXg1!}a4PD%!t&Qn%f_oquRajn3@C*)`o&K9o7V6DwzVMEhjVdDJ1fjhr#@=lp#@4EBqi=CCQ>73>R(>QKPNM&_Jpe5G`n4wegeC`FYEPJ{|vwS>$-`fuRSp3927qOv|NC3T3G-0 zA{K`|+tQy1yqE$ShWt8ny&5~)%ITb@^+x$w0)f&om;P8B)@}=Wzy59BwUfZ1vqw87 za2lB8J(&*l#(V}Id8SyQ0C(2amzkz3EqG&Ed0Jq1)$|&>4_|NIe=5|n=3?siFV0fI z{As5DLW^gs|B-b4C;Hd(SM-S~GQhzb>HgF2|2Usww0nL^;x@1eaB)=+Clj+$fF@H( z-fqP??~QMT$KI-#m;QC*&6vkp&8699G3)Bq0*kFZXINw=b9OVaed(3(3kS|IZ)CM? zJdnW&%t8MveBuK21uiYj)_a{Fnw0OErMzMN?d$QoPwkhOwcP&p+t>P)4tHlYw-pPN z^oJ=uc$Sl>pv@fZH~ZqxSvdhF@F1s=oZawpr^-#l{IIOGG=T%QXjtwPhIg-F@k@uIlr?J->Ia zpEUQ*=4g|XYn4Gez&aHr*;t$u3oODPmc2Ku)2Og|xjc%w;q!Zz+zY)*3{7V8bK4;& zYV82FZ+8?v)`J|G1w4I0fWdKg|2b#iaazCv;|?(W-q}$o&Y}Q5d@BRk^jL7#{kbCK zSgkyu;=DV+or2)AxCBgq-nj5=@n^`%T#V+xBGEkW4lCqrE)LMv#f;AvD__cQ@Eg3`~x| zW+h9mofSXCq5|M)9|ez(#X?-sxB%Go8};sJ?2abp(Y!lyi>k)|{M*Z$c{e1-K4ky` MPgg&ebxsLQ025IeI{*Lx literal 0 HcmV?d00001 diff --git a/animations/step_05_c/web/index.html b/animations/step_05_c/web/index.html new file mode 100644 index 0000000000..89656d9a06 --- /dev/null +++ b/animations/step_05_c/web/index.html @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + quiz + + + + + + diff --git a/animations/step_05_c/web/manifest.json b/animations/step_05_c/web/manifest.json new file mode 100644 index 0000000000..467748be48 --- /dev/null +++ b/animations/step_05_c/web/manifest.json @@ -0,0 +1,35 @@ +{ + "name": "quiz", + "short_name": "quiz", + "start_url": ".", + "display": "standalone", + "background_color": "#0175C2", + "theme_color": "#0175C2", + "description": "A new Flutter project.", + "orientation": "portrait-primary", + "prefer_related_applications": false, + "icons": [ + { + "src": "icons/Icon-192.png", + "sizes": "192x192", + "type": "image/png" + }, + { + "src": "icons/Icon-512.png", + "sizes": "512x512", + "type": "image/png" + }, + { + "src": "icons/Icon-maskable-192.png", + "sizes": "192x192", + "type": "image/png", + "purpose": "maskable" + }, + { + "src": "icons/Icon-maskable-512.png", + "sizes": "512x512", + "type": "image/png", + "purpose": "maskable" + } + ] +} diff --git a/animations/step_05_c/windows/.gitignore b/animations/step_05_c/windows/.gitignore new file mode 100644 index 0000000000..d492d0d98c --- /dev/null +++ b/animations/step_05_c/windows/.gitignore @@ -0,0 +1,17 @@ +flutter/ephemeral/ + +# Visual Studio user-specific files. +*.suo +*.user +*.userosscache +*.sln.docstates + +# Visual Studio build-related files. +x64/ +x86/ + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!*.[Cc]ache/ diff --git a/animations/step_05_c/windows/CMakeLists.txt b/animations/step_05_c/windows/CMakeLists.txt new file mode 100644 index 0000000000..e65947e844 --- /dev/null +++ b/animations/step_05_c/windows/CMakeLists.txt @@ -0,0 +1,108 @@ +# Project-level configuration. +cmake_minimum_required(VERSION 3.14) +project(quiz LANGUAGES CXX) + +# The name of the executable created for the application. Change this to change +# the on-disk name of your application. +set(BINARY_NAME "quiz") + +# Explicitly opt in to modern CMake behaviors to avoid warnings with recent +# versions of CMake. +cmake_policy(VERSION 3.14...3.25) + +# Define build configuration option. +get_property(IS_MULTICONFIG GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG) +if(IS_MULTICONFIG) + set(CMAKE_CONFIGURATION_TYPES "Debug;Profile;Release" + CACHE STRING "" FORCE) +else() + if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) + set(CMAKE_BUILD_TYPE "Debug" CACHE + STRING "Flutter build mode" FORCE) + set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS + "Debug" "Profile" "Release") + endif() +endif() +# Define settings for the Profile build mode. +set(CMAKE_EXE_LINKER_FLAGS_PROFILE "${CMAKE_EXE_LINKER_FLAGS_RELEASE}") +set(CMAKE_SHARED_LINKER_FLAGS_PROFILE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE}") +set(CMAKE_C_FLAGS_PROFILE "${CMAKE_C_FLAGS_RELEASE}") +set(CMAKE_CXX_FLAGS_PROFILE "${CMAKE_CXX_FLAGS_RELEASE}") + +# Use Unicode for all projects. +add_definitions(-DUNICODE -D_UNICODE) + +# Compilation settings that should be applied to most targets. +# +# Be cautious about adding new options here, as plugins use this function by +# default. In most cases, you should add new options to specific targets instead +# of modifying this function. +function(APPLY_STANDARD_SETTINGS TARGET) + target_compile_features(${TARGET} PUBLIC cxx_std_17) + target_compile_options(${TARGET} PRIVATE /W4 /WX /wd"4100") + target_compile_options(${TARGET} PRIVATE /EHsc) + target_compile_definitions(${TARGET} PRIVATE "_HAS_EXCEPTIONS=0") + target_compile_definitions(${TARGET} PRIVATE "$<$:_DEBUG>") +endfunction() + +# Flutter library and tool build rules. +set(FLUTTER_MANAGED_DIR "${CMAKE_CURRENT_SOURCE_DIR}/flutter") +add_subdirectory(${FLUTTER_MANAGED_DIR}) + +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") + + +# Generated plugin build rules, which manage building the plugins and adding +# them to the application. +include(flutter/generated_plugins.cmake) + + +# === Installation === +# Support files are copied into place next to the executable, so that it can +# run in place. This is done instead of making a separate bundle (as on Linux) +# so that building and running from within Visual Studio will work. +set(BUILD_BUNDLE_DIR "$") +# Make the "install" step default, as it's required to run. +set(CMAKE_VS_INCLUDE_INSTALL_TO_DEFAULT_BUILD 1) +if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) + set(CMAKE_INSTALL_PREFIX "${BUILD_BUNDLE_DIR}" CACHE PATH "..." FORCE) +endif() + +set(INSTALL_BUNDLE_DATA_DIR "${CMAKE_INSTALL_PREFIX}/data") +set(INSTALL_BUNDLE_LIB_DIR "${CMAKE_INSTALL_PREFIX}") + +install(TARGETS ${BINARY_NAME} RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_ICU_DATA_FILE}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) + +if(PLUGIN_BUNDLED_LIBRARIES) + install(FILES "${PLUGIN_BUNDLED_LIBRARIES}" + DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) +endif() + +# Copy the native assets provided by the build.dart from all packages. +set(NATIVE_ASSETS_DIR "${PROJECT_BUILD_DIR}native_assets/windows/") +install(DIRECTORY "${NATIVE_ASSETS_DIR}" + DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) + +# Fully re-copy the assets directory on each build to avoid having stale files +# from a previous install. +set(FLUTTER_ASSET_DIR_NAME "flutter_assets") +install(CODE " + file(REMOVE_RECURSE \"${INSTALL_BUNDLE_DATA_DIR}/${FLUTTER_ASSET_DIR_NAME}\") + " COMPONENT Runtime) +install(DIRECTORY "${PROJECT_BUILD_DIR}/${FLUTTER_ASSET_DIR_NAME}" + DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" COMPONENT Runtime) + +# Install the AOT library on non-Debug builds only. +install(FILES "${AOT_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" + CONFIGURATIONS Profile;Release + COMPONENT Runtime) diff --git a/animations/step_05_c/windows/flutter/CMakeLists.txt b/animations/step_05_c/windows/flutter/CMakeLists.txt new file mode 100644 index 0000000000..903f4899d6 --- /dev/null +++ b/animations/step_05_c/windows/flutter/CMakeLists.txt @@ -0,0 +1,109 @@ +# This file controls Flutter-level build steps. It should not be edited. +cmake_minimum_required(VERSION 3.14) + +set(EPHEMERAL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/ephemeral") + +# Configuration provided via flutter tool. +include(${EPHEMERAL_DIR}/generated_config.cmake) + +# TODO: Move the rest of this into files in ephemeral. See +# https://github.com/flutter/flutter/issues/57146. +set(WRAPPER_ROOT "${EPHEMERAL_DIR}/cpp_client_wrapper") + +# Set fallback configurations for older versions of the flutter tool. +if (NOT DEFINED FLUTTER_TARGET_PLATFORM) + set(FLUTTER_TARGET_PLATFORM "windows-x64") +endif() + +# === Flutter Library === +set(FLUTTER_LIBRARY "${EPHEMERAL_DIR}/flutter_windows.dll") + +# Published to parent scope for install step. +set(FLUTTER_LIBRARY ${FLUTTER_LIBRARY} PARENT_SCOPE) +set(FLUTTER_ICU_DATA_FILE "${EPHEMERAL_DIR}/icudtl.dat" PARENT_SCOPE) +set(PROJECT_BUILD_DIR "${PROJECT_DIR}/build/" PARENT_SCOPE) +set(AOT_LIBRARY "${PROJECT_DIR}/build/windows/app.so" PARENT_SCOPE) + +list(APPEND FLUTTER_LIBRARY_HEADERS + "flutter_export.h" + "flutter_windows.h" + "flutter_messenger.h" + "flutter_plugin_registrar.h" + "flutter_texture_registrar.h" +) +list(TRANSFORM FLUTTER_LIBRARY_HEADERS PREPEND "${EPHEMERAL_DIR}/") +add_library(flutter INTERFACE) +target_include_directories(flutter INTERFACE + "${EPHEMERAL_DIR}" +) +target_link_libraries(flutter INTERFACE "${FLUTTER_LIBRARY}.lib") +add_dependencies(flutter flutter_assemble) + +# === Wrapper === +list(APPEND CPP_WRAPPER_SOURCES_CORE + "core_implementations.cc" + "standard_codec.cc" +) +list(TRANSFORM CPP_WRAPPER_SOURCES_CORE PREPEND "${WRAPPER_ROOT}/") +list(APPEND CPP_WRAPPER_SOURCES_PLUGIN + "plugin_registrar.cc" +) +list(TRANSFORM CPP_WRAPPER_SOURCES_PLUGIN PREPEND "${WRAPPER_ROOT}/") +list(APPEND CPP_WRAPPER_SOURCES_APP + "flutter_engine.cc" + "flutter_view_controller.cc" +) +list(TRANSFORM CPP_WRAPPER_SOURCES_APP PREPEND "${WRAPPER_ROOT}/") + +# Wrapper sources needed for a plugin. +add_library(flutter_wrapper_plugin STATIC + ${CPP_WRAPPER_SOURCES_CORE} + ${CPP_WRAPPER_SOURCES_PLUGIN} +) +apply_standard_settings(flutter_wrapper_plugin) +set_target_properties(flutter_wrapper_plugin PROPERTIES + POSITION_INDEPENDENT_CODE ON) +set_target_properties(flutter_wrapper_plugin PROPERTIES + CXX_VISIBILITY_PRESET hidden) +target_link_libraries(flutter_wrapper_plugin PUBLIC flutter) +target_include_directories(flutter_wrapper_plugin PUBLIC + "${WRAPPER_ROOT}/include" +) +add_dependencies(flutter_wrapper_plugin flutter_assemble) + +# Wrapper sources needed for the runner. +add_library(flutter_wrapper_app STATIC + ${CPP_WRAPPER_SOURCES_CORE} + ${CPP_WRAPPER_SOURCES_APP} +) +apply_standard_settings(flutter_wrapper_app) +target_link_libraries(flutter_wrapper_app PUBLIC flutter) +target_include_directories(flutter_wrapper_app PUBLIC + "${WRAPPER_ROOT}/include" +) +add_dependencies(flutter_wrapper_app flutter_assemble) + +# === Flutter tool backend === +# _phony_ is a non-existent file to force this command to run every time, +# since currently there's no way to get a full input/output list from the +# flutter tool. +set(PHONY_OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/_phony_") +set_source_files_properties("${PHONY_OUTPUT}" PROPERTIES SYMBOLIC TRUE) +add_custom_command( + OUTPUT ${FLUTTER_LIBRARY} ${FLUTTER_LIBRARY_HEADERS} + ${CPP_WRAPPER_SOURCES_CORE} ${CPP_WRAPPER_SOURCES_PLUGIN} + ${CPP_WRAPPER_SOURCES_APP} + ${PHONY_OUTPUT} + COMMAND ${CMAKE_COMMAND} -E env + ${FLUTTER_TOOL_ENVIRONMENT} + "${FLUTTER_ROOT}/packages/flutter_tools/bin/tool_backend.bat" + ${FLUTTER_TARGET_PLATFORM} $ + VERBATIM +) +add_custom_target(flutter_assemble DEPENDS + "${FLUTTER_LIBRARY}" + ${FLUTTER_LIBRARY_HEADERS} + ${CPP_WRAPPER_SOURCES_CORE} + ${CPP_WRAPPER_SOURCES_PLUGIN} + ${CPP_WRAPPER_SOURCES_APP} +) diff --git a/animations/step_05_c/windows/flutter/generated_plugin_registrant.cc b/animations/step_05_c/windows/flutter/generated_plugin_registrant.cc new file mode 100644 index 0000000000..8b6d4680af --- /dev/null +++ b/animations/step_05_c/windows/flutter/generated_plugin_registrant.cc @@ -0,0 +1,11 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#include "generated_plugin_registrant.h" + + +void RegisterPlugins(flutter::PluginRegistry* registry) { +} diff --git a/animations/step_05_c/windows/flutter/generated_plugin_registrant.h b/animations/step_05_c/windows/flutter/generated_plugin_registrant.h new file mode 100644 index 0000000000..dc139d85a9 --- /dev/null +++ b/animations/step_05_c/windows/flutter/generated_plugin_registrant.h @@ -0,0 +1,15 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#ifndef GENERATED_PLUGIN_REGISTRANT_ +#define GENERATED_PLUGIN_REGISTRANT_ + +#include + +// Registers Flutter plugins. +void RegisterPlugins(flutter::PluginRegistry* registry); + +#endif // GENERATED_PLUGIN_REGISTRANT_ diff --git a/animations/step_05_c/windows/flutter/generated_plugins.cmake b/animations/step_05_c/windows/flutter/generated_plugins.cmake new file mode 100644 index 0000000000..b93c4c30c1 --- /dev/null +++ b/animations/step_05_c/windows/flutter/generated_plugins.cmake @@ -0,0 +1,23 @@ +# +# Generated file, do not edit. +# + +list(APPEND FLUTTER_PLUGIN_LIST +) + +list(APPEND FLUTTER_FFI_PLUGIN_LIST +) + +set(PLUGIN_BUNDLED_LIBRARIES) + +foreach(plugin ${FLUTTER_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${plugin}/windows plugins/${plugin}) + target_link_libraries(${BINARY_NAME} PRIVATE ${plugin}_plugin) + list(APPEND PLUGIN_BUNDLED_LIBRARIES $) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${plugin}_bundled_libraries}) +endforeach(plugin) + +foreach(ffi_plugin ${FLUTTER_FFI_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${ffi_plugin}/windows plugins/${ffi_plugin}) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${ffi_plugin}_bundled_libraries}) +endforeach(ffi_plugin) diff --git a/animations/step_05_c/windows/runner/CMakeLists.txt b/animations/step_05_c/windows/runner/CMakeLists.txt new file mode 100644 index 0000000000..394917c053 --- /dev/null +++ b/animations/step_05_c/windows/runner/CMakeLists.txt @@ -0,0 +1,40 @@ +cmake_minimum_required(VERSION 3.14) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} WIN32 + "flutter_window.cpp" + "main.cpp" + "utils.cpp" + "win32_window.cpp" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" + "Runner.rc" + "runner.exe.manifest" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the build version. +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION=\"${FLUTTER_VERSION}\"") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_MAJOR=${FLUTTER_VERSION_MAJOR}") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_MINOR=${FLUTTER_VERSION_MINOR}") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_PATCH=${FLUTTER_VERSION_PATCH}") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_BUILD=${FLUTTER_VERSION_BUILD}") + +# Disable Windows macros that collide with C++ standard library functions. +target_compile_definitions(${BINARY_NAME} PRIVATE "NOMINMAX") + +# Add dependency libraries and include directories. Add any application-specific +# dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter flutter_wrapper_app) +target_link_libraries(${BINARY_NAME} PRIVATE "dwmapi.lib") +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") + +# Run the Flutter tool portions of the build. This must not be removed. +add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/animations/step_05_c/windows/runner/Runner.rc b/animations/step_05_c/windows/runner/Runner.rc new file mode 100644 index 0000000000..f0d8342b40 --- /dev/null +++ b/animations/step_05_c/windows/runner/Runner.rc @@ -0,0 +1,121 @@ +// Microsoft Visual C++ generated resource script. +// +#pragma code_page(65001) +#include "resource.h" + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#include "winres.h" + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// English (United States) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE +BEGIN + "resource.h\0" +END + +2 TEXTINCLUDE +BEGIN + "#include ""winres.h""\r\n" + "\0" +END + +3 TEXTINCLUDE +BEGIN + "\r\n" + "\0" +END + +#endif // APSTUDIO_INVOKED + + +///////////////////////////////////////////////////////////////////////////// +// +// Icon +// + +// Icon with lowest ID value placed first to ensure application icon +// remains consistent on all systems. +IDI_APP_ICON ICON "resources\\app_icon.ico" + + +///////////////////////////////////////////////////////////////////////////// +// +// Version +// + +#if defined(FLUTTER_VERSION_MAJOR) && defined(FLUTTER_VERSION_MINOR) && defined(FLUTTER_VERSION_PATCH) && defined(FLUTTER_VERSION_BUILD) +#define VERSION_AS_NUMBER FLUTTER_VERSION_MAJOR,FLUTTER_VERSION_MINOR,FLUTTER_VERSION_PATCH,FLUTTER_VERSION_BUILD +#else +#define VERSION_AS_NUMBER 1,0,0,0 +#endif + +#if defined(FLUTTER_VERSION) +#define VERSION_AS_STRING FLUTTER_VERSION +#else +#define VERSION_AS_STRING "1.0.0" +#endif + +VS_VERSION_INFO VERSIONINFO + FILEVERSION VERSION_AS_NUMBER + PRODUCTVERSION VERSION_AS_NUMBER + FILEFLAGSMASK VS_FFI_FILEFLAGSMASK +#ifdef _DEBUG + FILEFLAGS VS_FF_DEBUG +#else + FILEFLAGS 0x0L +#endif + FILEOS VOS__WINDOWS32 + FILETYPE VFT_APP + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904e4" + BEGIN + VALUE "CompanyName", "com.example" "\0" + VALUE "FileDescription", "quiz" "\0" + VALUE "FileVersion", VERSION_AS_STRING "\0" + VALUE "InternalName", "quiz" "\0" + VALUE "LegalCopyright", "Copyright (C) 2024 com.example. All rights reserved." "\0" + VALUE "OriginalFilename", "quiz.exe" "\0" + VALUE "ProductName", "quiz" "\0" + VALUE "ProductVersion", VERSION_AS_STRING "\0" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x409, 1252 + END +END + +#endif // English (United States) resources +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// + + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED diff --git a/animations/step_05_c/windows/runner/flutter_window.cpp b/animations/step_05_c/windows/runner/flutter_window.cpp new file mode 100644 index 0000000000..955ee3038f --- /dev/null +++ b/animations/step_05_c/windows/runner/flutter_window.cpp @@ -0,0 +1,71 @@ +#include "flutter_window.h" + +#include + +#include "flutter/generated_plugin_registrant.h" + +FlutterWindow::FlutterWindow(const flutter::DartProject& project) + : project_(project) {} + +FlutterWindow::~FlutterWindow() {} + +bool FlutterWindow::OnCreate() { + if (!Win32Window::OnCreate()) { + return false; + } + + RECT frame = GetClientArea(); + + // The size here must match the window dimensions to avoid unnecessary surface + // creation / destruction in the startup path. + flutter_controller_ = std::make_unique( + frame.right - frame.left, frame.bottom - frame.top, project_); + // Ensure that basic setup of the controller was successful. + if (!flutter_controller_->engine() || !flutter_controller_->view()) { + return false; + } + RegisterPlugins(flutter_controller_->engine()); + SetChildContent(flutter_controller_->view()->GetNativeWindow()); + + flutter_controller_->engine()->SetNextFrameCallback([&]() { + this->Show(); + }); + + // Flutter can complete the first frame before the "show window" callback is + // registered. The following call ensures a frame is pending to ensure the + // window is shown. It is a no-op if the first frame hasn't completed yet. + flutter_controller_->ForceRedraw(); + + return true; +} + +void FlutterWindow::OnDestroy() { + if (flutter_controller_) { + flutter_controller_ = nullptr; + } + + Win32Window::OnDestroy(); +} + +LRESULT +FlutterWindow::MessageHandler(HWND hwnd, UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept { + // Give Flutter, including plugins, an opportunity to handle window messages. + if (flutter_controller_) { + std::optional result = + flutter_controller_->HandleTopLevelWindowProc(hwnd, message, wparam, + lparam); + if (result) { + return *result; + } + } + + switch (message) { + case WM_FONTCHANGE: + flutter_controller_->engine()->ReloadSystemFonts(); + break; + } + + return Win32Window::MessageHandler(hwnd, message, wparam, lparam); +} diff --git a/animations/step_05_c/windows/runner/flutter_window.h b/animations/step_05_c/windows/runner/flutter_window.h new file mode 100644 index 0000000000..6da0652f05 --- /dev/null +++ b/animations/step_05_c/windows/runner/flutter_window.h @@ -0,0 +1,33 @@ +#ifndef RUNNER_FLUTTER_WINDOW_H_ +#define RUNNER_FLUTTER_WINDOW_H_ + +#include +#include + +#include + +#include "win32_window.h" + +// A window that does nothing but host a Flutter view. +class FlutterWindow : public Win32Window { + public: + // Creates a new FlutterWindow hosting a Flutter view running |project|. + explicit FlutterWindow(const flutter::DartProject& project); + virtual ~FlutterWindow(); + + protected: + // Win32Window: + bool OnCreate() override; + void OnDestroy() override; + LRESULT MessageHandler(HWND window, UINT const message, WPARAM const wparam, + LPARAM const lparam) noexcept override; + + private: + // The project to run. + flutter::DartProject project_; + + // The Flutter instance hosted by this window. + std::unique_ptr flutter_controller_; +}; + +#endif // RUNNER_FLUTTER_WINDOW_H_ diff --git a/animations/step_05_c/windows/runner/main.cpp b/animations/step_05_c/windows/runner/main.cpp new file mode 100644 index 0000000000..cc4e09820c --- /dev/null +++ b/animations/step_05_c/windows/runner/main.cpp @@ -0,0 +1,43 @@ +#include +#include +#include + +#include "flutter_window.h" +#include "utils.h" + +int APIENTRY wWinMain(_In_ HINSTANCE instance, _In_opt_ HINSTANCE prev, + _In_ wchar_t *command_line, _In_ int show_command) { + // Attach to console when present (e.g., 'flutter run') or create a + // new console when running with a debugger. + if (!::AttachConsole(ATTACH_PARENT_PROCESS) && ::IsDebuggerPresent()) { + CreateAndAttachConsole(); + } + + // Initialize COM, so that it is available for use in the library and/or + // plugins. + ::CoInitializeEx(nullptr, COINIT_APARTMENTTHREADED); + + flutter::DartProject project(L"data"); + + std::vector command_line_arguments = + GetCommandLineArguments(); + + project.set_dart_entrypoint_arguments(std::move(command_line_arguments)); + + FlutterWindow window(project); + Win32Window::Point origin(10, 10); + Win32Window::Size size(1280, 720); + if (!window.Create(L"quiz", origin, size)) { + return EXIT_FAILURE; + } + window.SetQuitOnClose(true); + + ::MSG msg; + while (::GetMessage(&msg, nullptr, 0, 0)) { + ::TranslateMessage(&msg); + ::DispatchMessage(&msg); + } + + ::CoUninitialize(); + return EXIT_SUCCESS; +} diff --git a/animations/step_05_c/windows/runner/resource.h b/animations/step_05_c/windows/runner/resource.h new file mode 100644 index 0000000000..66a65d1e4a --- /dev/null +++ b/animations/step_05_c/windows/runner/resource.h @@ -0,0 +1,16 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Visual C++ generated include file. +// Used by Runner.rc +// +#define IDI_APP_ICON 101 + +// Next default values for new objects +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS +#define _APS_NEXT_RESOURCE_VALUE 102 +#define _APS_NEXT_COMMAND_VALUE 40001 +#define _APS_NEXT_CONTROL_VALUE 1001 +#define _APS_NEXT_SYMED_VALUE 101 +#endif +#endif diff --git a/animations/step_05_c/windows/runner/resources/app_icon.ico b/animations/step_05_c/windows/runner/resources/app_icon.ico new file mode 100644 index 0000000000000000000000000000000000000000..c04e20caf6370ebb9253ad831cc31de4a9c965f6 GIT binary patch literal 33772 zcmeHQc|26z|35SKE&G-*mXah&B~fFkXr)DEO&hIfqby^T&>|8^_Ub8Vp#`BLl3lbZ zvPO!8k!2X>cg~Elr=IVxo~J*a`+9wR=A83c-k-DFd(XM&UI1VKCqM@V;DDtJ09WB} zRaHKiW(GT00brH|0EeTeKVbpbGZg?nK6-j827q-+NFM34gXjqWxJ*a#{b_apGN<-L_m3#8Z26atkEn& ze87Bvv^6vVmM+p+cQ~{u%=NJF>#(d;8{7Q{^rWKWNtf14H}>#&y7$lqmY6xmZryI& z($uy?c5-+cPnt2%)R&(KIWEXww>Cnz{OUpT>W$CbO$h1= z#4BPMkFG1Y)x}Ui+WXr?Z!w!t_hjRq8qTaWpu}FH{MsHlU{>;08goVLm{V<&`itk~ zE_Ys=D(hjiy+5=?=$HGii=Y5)jMe9|wWoD_K07(}edAxh`~LBorOJ!Cf@f{_gNCC| z%{*04ViE!#>@hc1t5bb+NO>ncf@@Dv01K!NxH$3Eg1%)|wLyMDF8^d44lV!_Sr}iEWefOaL z8f?ud3Q%Sen39u|%00W<#!E=-RpGa+H8}{ulxVl4mwpjaU+%2pzmi{3HM)%8vb*~-M9rPUAfGCSos8GUXp02|o~0BTV2l#`>>aFV&_P$ejS;nGwSVP8 zMbOaG7<7eKD>c12VdGH;?2@q7535sa7MN*L@&!m?L`ASG%boY7(&L5imY#EQ$KrBB z4@_tfP5m50(T--qv1BJcD&aiH#b-QC>8#7Fx@3yXlonJI#aEIi=8&ChiVpc#N=5le zM*?rDIdcpawoc5kizv$GEjnveyrp3sY>+5_R5;>`>erS%JolimF=A^EIsAK zsPoVyyUHCgf0aYr&alx`<)eb6Be$m&`JYSuBu=p8j%QlNNp$-5C{b4#RubPb|CAIS zGE=9OFLP7?Hgc{?k45)84biT0k&-C6C%Q}aI~q<(7BL`C#<6HyxaR%!dFx7*o^laG z=!GBF^cwK$IA(sn9y6>60Rw{mYRYkp%$jH z*xQM~+bp)G$_RhtFPYx2HTsWk80+p(uqv9@I9)y{b$7NK53rYL$ezbmRjdXS?V}fj zWxX_feWoLFNm3MG7pMUuFPs$qrQWO9!l2B(SIuy2}S|lHNbHzoE+M2|Zxhjq9+Ws8c{*}x^VAib7SbxJ*Q3EnY5lgI9 z=U^f3IW6T=TWaVj+2N%K3<%Un;CF(wUp`TC&Y|ZjyFu6co^uqDDB#EP?DV5v_dw~E zIRK*BoY9y-G_ToU2V_XCX4nJ32~`czdjT!zwme zGgJ0nOk3U4@IE5JwtM}pwimLjk{ln^*4HMU%Fl4~n(cnsLB}Ja-jUM>xIB%aY;Nq8 z)Fp8dv1tkqKanv<68o@cN|%thj$+f;zGSO7H#b+eMAV8xH$hLggtt?O?;oYEgbq@= zV(u9bbd12^%;?nyk6&$GPI%|+<_mEpJGNfl*`!KV;VfmZWw{n{rnZ51?}FDh8we_L z8OI9nE31skDqJ5Oa_ybn7|5@ui>aC`s34p4ZEu6-s!%{uU45$Zd1=p$^^dZBh zu<*pDDPLW+c>iWO$&Z_*{VSQKg7=YEpS3PssPn1U!lSm6eZIho*{@&20e4Y_lRklKDTUCKI%o4Pc<|G^Xgu$J^Q|B87U;`c1zGwf^-zH*VQ^x+i^OUWE0yd z;{FJq)2w!%`x7yg@>uGFFf-XJl4H`YtUG%0slGKOlXV`q?RP>AEWg#x!b{0RicxGhS!3$p7 zij;{gm!_u@D4$Ox%>>bPtLJ> zwKtYz?T_DR1jN>DkkfGU^<#6sGz|~p*I{y`aZ>^Di#TC|Z!7j_O1=Wo8thuit?WxR zh9_S>kw^{V^|g}HRUF=dcq>?q(pHxw!8rx4dC6vbQVmIhmICF#zU!HkHpQ>9S%Uo( zMw{eC+`&pb=GZRou|3;Po1}m46H6NGd$t<2mQh}kaK-WFfmj_66_17BX0|j-E2fe3Jat}ijpc53 zJV$$;PC<5aW`{*^Z6e5##^`Ed#a0nwJDT#Qq~^e8^JTA=z^Kl>La|(UQ!bI@#ge{Dzz@61p-I)kc2?ZxFt^QQ}f%ldLjO*GPj(5)V9IyuUakJX=~GnTgZ4$5!3E=V#t`yOG4U z(gphZB6u2zsj=qNFLYShhg$}lNpO`P9xOSnO*$@@UdMYES*{jJVj|9z-}F^riksLK zbsU+4-{281P9e2UjY6tse^&a)WM1MFw;p#_dHhWI7p&U*9TR0zKdVuQed%6{otTsq z$f~S!;wg#Bd9kez=Br{m|66Wv z#g1xMup<0)H;c2ZO6su_ii&m8j&+jJz4iKnGZ&wxoQX|5a>v&_e#6WA!MB_4asTxLRGQCC5cI(em z%$ZfeqP>!*q5kU>a+BO&ln=4Jm>Ef(QE8o&RgLkk%2}4Tf}U%IFP&uS7}&|Q-)`5< z+e>;s#4cJ-z%&-^&!xsYx777Wt(wZY9(3(avmr|gRe4cD+a8&!LY`1^T?7x{E<=kdY9NYw>A;FtTvQ=Y&1M%lyZPl$ss1oY^Sl8we}n}Aob#6 zl4jERwnt9BlSoWb@3HxYgga(752Vu6Y)k4yk9u~Kw>cA5&LHcrvn1Y-HoIuFWg~}4 zEw4bR`mXZQIyOAzo)FYqg?$5W<;^+XX%Uz61{-L6@eP|lLH%|w?g=rFc;OvEW;^qh z&iYXGhVt(G-q<+_j}CTbPS_=K>RKN0&;dubh0NxJyDOHFF;<1k!{k#7b{|Qok9hac z;gHz}6>H6C6RnB`Tt#oaSrX0p-j-oRJ;_WvS-qS--P*8}V943RT6kou-G=A+7QPGQ z!ze^UGxtW3FC0$|(lY9^L!Lx^?Q8cny(rR`es5U;-xBhphF%_WNu|aO<+e9%6LuZq zt(0PoagJG<%hyuf;te}n+qIl_Ej;czWdc{LX^pS>77s9t*2b4s5dvP_!L^3cwlc)E!(!kGrg~FescVT zZCLeua3f4;d;Tk4iXzt}g}O@nlK3?_o91_~@UMIl?@77Qc$IAlLE95#Z=TES>2E%z zxUKpK{_HvGF;5%Q7n&vA?`{%8ohlYT_?(3A$cZSi)MvIJygXD}TS-3UwyUxGLGiJP znblO~G|*uA^|ac8E-w#}uBtg|s_~s&t>-g0X%zIZ@;o_wNMr_;{KDg^O=rg`fhDZu zFp(VKd1Edj%F zWHPl+)FGj%J1BO3bOHVfH^3d1F{)*PL&sRX`~(-Zy3&9UQX)Z;c51tvaI2E*E7!)q zcz|{vpK7bjxix(k&6=OEIBJC!9lTkUbgg?4-yE{9+pFS)$Ar@vrIf`D0Bnsed(Cf? zObt2CJ>BKOl>q8PyFO6w)+6Iz`LW%T5^R`U_NIW0r1dWv6OY=TVF?N=EfA(k(~7VBW(S;Tu5m4Lg8emDG-(mOSSs=M9Q&N8jc^Y4&9RqIsk(yO_P(mcCr}rCs%1MW1VBrn=0-oQN(Xj!k%iKV zb%ricBF3G4S1;+8lzg5PbZ|$Se$)I=PwiK=cDpHYdov2QO1_a-*dL4KUi|g&oh>(* zq$<`dQ^fat`+VW?m)?_KLn&mp^-@d=&7yGDt<=XwZZC=1scwxO2^RRI7n@g-1o8ps z)&+et_~)vr8aIF1VY1Qrq~Xe``KJrQSnAZ{CSq3yP;V*JC;mmCT6oRLSs7=GA?@6g zUooM}@tKtx(^|aKK8vbaHlUQqwE0}>j&~YlN3H#vKGm@u)xxS?n9XrOWUfCRa< z`20Fld2f&;gg7zpo{Adh+mqNntMc-D$N^yWZAZRI+u1T1zWHPxk{+?vcS1D>08>@6 zLhE@`gt1Y9mAK6Z4p|u(5I%EkfU7rKFSM=E4?VG9tI;a*@?6!ey{lzN5=Y-!$WFSe z&2dtO>^0@V4WRc#L&P%R(?@KfSblMS+N+?xUN$u3K4Ys%OmEh+tq}fnU}i>6YHM?< zlnL2gl~sF!j!Y4E;j3eIU-lfa`RsOL*Tt<%EFC0gPzoHfNWAfKFIKZN8}w~(Yi~=q z>=VNLO2|CjkxP}RkutxjV#4fWYR1KNrPYq5ha9Wl+u>ipsk*I(HS@iLnmGH9MFlTU zaFZ*KSR0px>o+pL7BbhB2EC1%PJ{67_ z#kY&#O4@P=OV#-79y_W>Gv2dxL*@G7%LksNSqgId9v;2xJ zrh8uR!F-eU$NMx@S*+sk=C~Dxr9Qn7TfWnTupuHKuQ$;gGiBcU>GF5sWx(~4IP3`f zWE;YFO*?jGwYh%C3X<>RKHC-DZ!*r;cIr}GLOno^3U4tFSSoJp%oHPiSa%nh=Zgn% z14+8v@ygy0>UgEN1bczD6wK45%M>psM)y^)IfG*>3ItX|TzV*0i%@>L(VN!zdKb8S?Qf7BhjNpziA zR}?={-eu>9JDcl*R=OP9B8N$IcCETXah9SUDhr{yrld{G;PnCWRsPD7!eOOFBTWUQ=LrA_~)mFf&!zJX!Oc-_=kT<}m|K52 z)M=G#;p;Rdb@~h5D{q^K;^fX-m5V}L%!wVC2iZ1uu401Ll}#rocTeK|7FAeBRhNdQ zCc2d^aQnQp=MpOmak60N$OgS}a;p(l9CL`o4r(e-nN}mQ?M&isv-P&d$!8|1D1I(3-z!wi zTgoo)*Mv`gC?~bm?S|@}I|m-E2yqPEvYybiD5azInexpK8?9q*$9Yy9-t%5jU8~ym zgZDx>!@ujQ=|HJnwp^wv-FdD{RtzO9SnyfB{mH_(c!jHL*$>0o-(h(eqe*ZwF6Lvu z{7rkk%PEqaA>o+f{H02tzZ@TWy&su?VNw43! z-X+rN`6llvpUms3ZiSt)JMeztB~>9{J8SPmYs&qohxdYFi!ra8KR$35Zp9oR)eFC4 zE;P31#3V)n`w$fZ|4X-|%MX`xZDM~gJyl2W;O$H25*=+1S#%|53>|LyH za@yh+;325%Gq3;J&a)?%7X%t@WXcWL*BaaR*7UEZad4I8iDt7^R_Fd`XeUo256;sAo2F!HcIQKk;h})QxEsPE5BcKc7WyerTchgKmrfRX z!x#H_%cL#B9TWAqkA4I$R^8{%do3Y*&(;WFmJ zU7Dih{t1<{($VtJRl9|&EB?|cJ)xse!;}>6mSO$o5XIx@V|AA8ZcoD88ZM?C*;{|f zZVmf94_l1OmaICt`2sTyG!$^UeTHx9YuUP!omj(r|7zpm5475|yXI=rR>>fteLI+| z)MoiGho0oEt=*J(;?VY0QzwCqw@cVm?d7Y!z0A@u#H?sCJ*ecvyhj& z-F77lO;SH^dmf?L>3i>?Z*U}Em4ZYV_CjgfvzYsRZ+1B!Uo6H6mbS<-FFL`ytqvb& zE7+)2ahv-~dz(Hs+f})z{*4|{)b=2!RZK;PWwOnO=hG7xG`JU5>bAvUbdYd_CjvtHBHgtGdlO+s^9ca^Bv3`t@VRX2_AD$Ckg36OcQRF zXD6QtGfHdw*hx~V(MV-;;ZZF#dJ-piEF+s27z4X1qi5$!o~xBnvf=uopcn7ftfsZc zy@(PuOk`4GL_n(H9(E2)VUjqRCk9kR?w)v@xO6Jm_Mx})&WGEl=GS0#)0FAq^J*o! zAClhvoTsNP*-b~rN{8Yym3g{01}Ep^^Omf=SKqvN?{Q*C4HNNAcrowIa^mf+3PRy! z*_G-|3i8a;+q;iP@~Of_$(vtFkB8yOyWt2*K)vAn9El>=D;A$CEx6b*XF@4y_6M+2 zpeW`RHoI_p(B{%(&jTHI->hmNmZjHUj<@;7w0mx3&koy!2$@cfX{sN19Y}euYJFn& z1?)+?HCkD0MRI$~uB2UWri})0bru_B;klFdwsLc!ne4YUE;t41JqfG# zZJq6%vbsdx!wYeE<~?>o4V`A3?lN%MnKQ`z=uUivQN^vzJ|C;sdQ37Qn?;lpzg})y z)_2~rUdH}zNwX;Tp0tJ78+&I=IwOQ-fl30R79O8@?Ub8IIA(6I`yHn%lARVL`%b8+ z4$8D-|MZZWxc_)vu6@VZN!HsI$*2NOV&uMxBNzIbRgy%ob_ zhwEH{J9r$!dEix9XM7n&c{S(h>nGm?el;gaX0@|QnzFD@bne`el^CO$yXC?BDJ|Qg z+y$GRoR`?ST1z^e*>;!IS@5Ovb7*RlN>BV_UC!7E_F;N#ky%1J{+iixp(dUJj93aK zzHNN>R-oN7>kykHClPnoPTIj7zc6KM(Pnlb(|s??)SMb)4!sMHU^-ntJwY5Big7xv zb1Ew`Xj;|D2kzGja*C$eS44(d&RMU~c_Y14V9_TLTz0J#uHlsx`S6{nhsA0dWZ#cG zJ?`fO50E>*X4TQLv#nl%3GOk*UkAgt=IY+u0LNXqeln3Z zv$~&Li`ZJOKkFuS)dJRA>)b_Da%Q~axwA_8zNK{BH{#}#m}zGcuckz}riDE-z_Ms> zR8-EqAMcfyGJCtvTpaUVQtajhUS%c@Yj}&6Zz;-M7MZzqv3kA7{SuW$oW#=0az2wQ zg-WG@Vb4|D`pl~Il54N7Hmsauc_ne-a!o5#j3WaBBh@Wuefb!QJIOn5;d)%A#s+5% zuD$H=VNux9bE-}1&bcYGZ+>1Fo;3Z@e&zX^n!?JK*adSbONm$XW9z;Q^L>9U!}Toj2WdafJ%oL#h|yWWwyAGxzfrAWdDTtaKl zK4`5tDpPg5>z$MNv=X0LZ0d6l%D{(D8oT@+w0?ce$DZ6pv>{1&Ok67Ix1 zH}3=IEhPJEhItCC8E=`T`N5(k?G=B4+xzZ?<4!~ ze~z6Wk9!CHTI(0rLJ4{JU?E-puc;xusR?>G?;4vt;q~iI9=kDL=z0Rr%O$vU`30X$ zDZRFyZ`(omOy@u|i6h;wtJlP;+}$|Ak|k2dea7n?U1*$T!sXqqOjq^NxLPMmk~&qI zYg0W?yK8T(6+Ea+$YyspKK?kP$+B`~t3^Pib_`!6xCs32!i@pqXfFV6PmBIR<-QW= zN8L{pt0Vap0x`Gzn#E@zh@H)0FfVfA_Iu4fjYZ+umO1LXIbVc$pY+E234u)ttcrl$ z>s92z4vT%n6cMb>=XT6;l0+9e(|CZG)$@C7t7Z7Ez@a)h)!hyuV&B5K%%)P5?Lk|C zZZSVzdXp{@OXSP0hoU-gF8s8Um(#xzjP2Vem zec#-^JqTa&Y#QJ>-FBxd7tf`XB6e^JPUgagB8iBSEps;92KG`!#mvVcPQ5yNC-GEG zTiHEDYfH+0O15}r^+ z#jxj=@x8iNHWALe!P3R67TwmhItn**0JwnzSV2O&KE8KcT+0hWH^OPD1pwiuyx=b@ zNf5Jh0{9X)8;~Es)$t@%(3!OnbY+`@?i{mGX7Yy}8T_*0a6g;kaFPq;*=px5EhO{Cp%1kI<0?*|h8v!6WnO3cCJRF2-CRrU3JiLJnj@6;L)!0kWYAc_}F{2P))3HmCrz zQ&N&gE70;`!6*eJ4^1IR{f6j4(-l&X!tjHxkbHA^Zhrnhr9g{exN|xrS`5Pq=#Xf& zG%P=#ra-TyVFfgW%cZo5OSIwFL9WtXAlFOa+ubmI5t*3=g#Y zF%;70p5;{ZeFL}&}yOY1N1*Q;*<(kTB!7vM$QokF)yr2FlIU@$Ph58$Bz z0J?xQG=MlS4L6jA22eS42g|9*9pX@$#*sUeM(z+t?hr@r5J&D1rx}2pW&m*_`VDCW zUYY@v-;bAO0HqoAgbbiGGC<=ryf96}3pouhy3XJrX+!!u*O_>Si38V{uJmQ&USptX zKp#l(?>%^7;2%h(q@YWS#9;a!JhKlkR#Vd)ERILlgu!Hr@jA@V;sk4BJ-H#p*4EqC zDGjC*tl=@3Oi6)Bn^QwFpul18fpkbpg0+peH$xyPBqb%`$OUhPKyWb32o7clB*9Z< zN=i~NLjavrLtwgJ01bufP+>p-jR2I95|TpmKpQL2!oV>g(4RvS2pK4*ou%m(h6r3A zX#s&`9LU1ZG&;{CkOK!4fLDTnBys`M!vuz>Q&9OZ0hGQl!~!jSDg|~s*w52opC{sB ze|Cf2luD(*G13LcOAGA!s2FjSK8&IE5#W%J25w!vM0^VyQM!t)inj&RTiJ!wXzFgz z3^IqzB7I0L$llljsGq})thBy9UOyjtFO_*hYM_sgcMk>44jeH0V1FDyELc{S1F-;A zS;T^k^~4biG&V*Irq}O;e}j$$+E_#G?HKIn05iP3j|87TkGK~SqG!-KBg5+mN(aLm z8ybhIM`%C19UX$H$KY6JgXbY$0AT%rEpHC;u`rQ$Y=rxUdsc5*Kvc8jaYaO$^)cI6){P6K0r)I6DY4Wr4&B zLQUBraey#0HV|&c4v7PVo3n$zHj99(TZO^3?Ly%C4nYvJTL9eLBLHsM3WKKD>5!B` zQ=BsR3aR6PD(Fa>327E2HAu5TM~Wusc!)>~(gM)+3~m;92Jd;FnSib=M5d6;;5{%R zb4V7DEJ0V!CP-F*oU?gkc>ksUtAYP&V4ND5J>J2^jt*vcFflQWCrB&fLdT%O59PVJ zhid#toR=FNgD!q3&r8#wEBr`!wzvQu5zX?Q>nlSJ4i@WC*CN*-xU66F^V5crWevQ9gsq$I@z1o(a=k7LL~ z7m_~`o;_Ozha1$8Q}{WBehvAlO4EL60y5}8GDrZ< zXh&F}71JbW2A~8KfEWj&UWV#4+Z4p`b{uAj4&WC zha`}X@3~+Iz^WRlOHU&KngK>#j}+_o@LdBC1H-`gT+krWX3-;!)6?{FBp~%20a}FL zFP9%Emqcwa#(`=G>BBZ0qZDQhmZKJg_g8<=bBFKWr!dyg(YkpE+|R*SGpDVU!+VlU zFC54^DLv}`qa%49T>nNiA9Q7Ips#!Xx90tCU2gvK`(F+GPcL=J^>No{)~we#o@&mUb6c$ zCc*<|NJBk-#+{j9xkQ&ujB zI~`#kN~7W!f*-}wkG~Ld!JqZ@tK}eeSnsS5J1fMFXm|`LJx&}5`@dK3W^7#Wnm+_P zBZkp&j1fa2Y=eIjJ0}gh85jt43kaIXXv?xmo@eHrka!Z|vQv12HN#+!I5E z`(fbuW>gFiJL|uXJ!vKt#z3e3HlVdboH7;e#i3(2<)Fg-I@BR!qY#eof3MFZ&*Y@l zI|KJf&ge@p2Dq09Vu$$Qxb7!}{m-iRk@!)%KL)txi3;~Z4Pb}u@GsW;ELiWeG9V51 znX#}B&4Y2E7-H=OpNE@q{%hFLxwIpBF2t{vPREa8_{linXT;#1vMRWjOzLOP$-hf( z>=?$0;~~PnkqY;~K{EM6Vo-T(0K{A0}VUGmu*hR z{tw3hvBN%N3G3Yw`X5Te+F{J`(3w1s3-+1EbnFQKcrgrX1Jqvs@ADGe%M0s$EbK$$ zK)=y=upBc6SjGYAACCcI=Y*6Fi8_jgwZlLxD26fnQfJmb8^gHRN5(TemhX@0e=vr> zg`W}6U>x6VhoA3DqsGGD9uL1DhB3!OXO=k}59TqD@(0Nb{)Ut_luTioK_>7wjc!5C zIr@w}b`Fez3)0wQfKl&bae7;PcTA7%?f2xucM0G)wt_KO!Ewx>F~;=BI0j=Fb4>pp zv}0R^xM4eti~+^+gE$6b81p(kwzuDti(-K9bc|?+pJEl@H+jSYuxZQV8rl8 zjp@M{#%qItIUFN~KcO9Hed*`$5A-2~pAo~K&<-Q+`9`$CK>rzqAI4w~$F%vs9s{~x zg4BP%Gy*@m?;D6=SRX?888Q6peF@_4Z->8wAH~Cn!R$|Hhq2cIzFYqT_+cDourHbY z0qroxJnrZ4Gh+Ay+F`_c%+KRT>y3qw{)89?=hJ@=KO=@ep)aBJ$c!JHfBMJpsP*3G za7|)VJJ8B;4?n{~ldJF7%jmb`-ftIvNd~ekoufG(`K(3=LNc;HBY& z(lp#q8XAD#cIf}k49zX_i`*fO+#!zKA&%T3j@%)R+#yag067CU%yUEe47>wzGU8^` z1EXFT^@I!{J!F8!X?S6ph8J=gUi5tl93*W>7}_uR<2N2~e}FaG?}KPyugQ=-OGEZs z!GBoyYY+H*ANn4?Z)X4l+7H%`17i5~zRlRIX?t)6_eu=g2Q`3WBhxSUeea+M-S?RL zX9oBGKn%a!H+*hx4d2(I!gsi+@SQK%<{X22M~2tMulJoa)0*+z9=-YO+;DFEm5eE1U9b^B(Z}2^9!Qk`!A$wUE z7$Ar5?NRg2&G!AZqnmE64eh^Anss3i!{}%6@Et+4rr!=}!SBF8eZ2*J3ujCWbl;3; z48H~goPSv(8X61fKKdpP!Z7$88NL^Z?j`!^*I?-P4X^pMxyWz~@$(UeAcTSDd(`vO z{~rc;9|GfMJcApU3k}22a!&)k4{CU!e_ny^Y3cO;tOvOMKEyWz!vG(Kp*;hB?d|R3`2X~=5a6#^o5@qn?J-bI8Ppip{-yG z!k|VcGsq!jF~}7DMr49Wap-s&>o=U^T0!Lcy}!(bhtYsPQy z4|EJe{12QL#=c(suQ89Mhw9<`bui%nx7Nep`C&*M3~vMEACmcRYYRGtANq$F%zh&V zc)cEVeHz*Z1N)L7k-(k3np#{GcDh2Q@ya0YHl*n7fl*ZPAsbU-a94MYYtA#&!c`xGIaV;yzsmrjfieTEtqB_WgZp2*NplHx=$O{M~2#i_vJ{ps-NgK zQsxKK_CBM2PP_je+Xft`(vYfXXgIUr{=PA=7a8`2EHk)Ym2QKIforz# tySWtj{oF3N9@_;i*Fv5S)9x^z=nlWP>jpp-9)52ZmLVA=i*%6g{{fxOO~wEK literal 0 HcmV?d00001 diff --git a/animations/step_05_c/windows/runner/runner.exe.manifest b/animations/step_05_c/windows/runner/runner.exe.manifest new file mode 100644 index 0000000000..153653e8d6 --- /dev/null +++ b/animations/step_05_c/windows/runner/runner.exe.manifest @@ -0,0 +1,14 @@ + + + + + PerMonitorV2 + + + + + + + + + diff --git a/animations/step_05_c/windows/runner/utils.cpp b/animations/step_05_c/windows/runner/utils.cpp new file mode 100644 index 0000000000..3a0b46511a --- /dev/null +++ b/animations/step_05_c/windows/runner/utils.cpp @@ -0,0 +1,65 @@ +#include "utils.h" + +#include +#include +#include +#include + +#include + +void CreateAndAttachConsole() { + if (::AllocConsole()) { + FILE *unused; + if (freopen_s(&unused, "CONOUT$", "w", stdout)) { + _dup2(_fileno(stdout), 1); + } + if (freopen_s(&unused, "CONOUT$", "w", stderr)) { + _dup2(_fileno(stdout), 2); + } + std::ios::sync_with_stdio(); + FlutterDesktopResyncOutputStreams(); + } +} + +std::vector GetCommandLineArguments() { + // Convert the UTF-16 command line arguments to UTF-8 for the Engine to use. + int argc; + wchar_t** argv = ::CommandLineToArgvW(::GetCommandLineW(), &argc); + if (argv == nullptr) { + return std::vector(); + } + + std::vector command_line_arguments; + + // Skip the first argument as it's the binary name. + for (int i = 1; i < argc; i++) { + command_line_arguments.push_back(Utf8FromUtf16(argv[i])); + } + + ::LocalFree(argv); + + return command_line_arguments; +} + +std::string Utf8FromUtf16(const wchar_t* utf16_string) { + if (utf16_string == nullptr) { + return std::string(); + } + unsigned int target_length = ::WideCharToMultiByte( + CP_UTF8, WC_ERR_INVALID_CHARS, utf16_string, + -1, nullptr, 0, nullptr, nullptr) + -1; // remove the trailing null character + int input_length = (int)wcslen(utf16_string); + std::string utf8_string; + if (target_length == 0 || target_length > utf8_string.max_size()) { + return utf8_string; + } + utf8_string.resize(target_length); + int converted_length = ::WideCharToMultiByte( + CP_UTF8, WC_ERR_INVALID_CHARS, utf16_string, + input_length, utf8_string.data(), target_length, nullptr, nullptr); + if (converted_length == 0) { + return std::string(); + } + return utf8_string; +} diff --git a/animations/step_05_c/windows/runner/utils.h b/animations/step_05_c/windows/runner/utils.h new file mode 100644 index 0000000000..3879d54755 --- /dev/null +++ b/animations/step_05_c/windows/runner/utils.h @@ -0,0 +1,19 @@ +#ifndef RUNNER_UTILS_H_ +#define RUNNER_UTILS_H_ + +#include +#include + +// Creates a console for the process, and redirects stdout and stderr to +// it for both the runner and the Flutter library. +void CreateAndAttachConsole(); + +// Takes a null-terminated wchar_t* encoded in UTF-16 and returns a std::string +// encoded in UTF-8. Returns an empty std::string on failure. +std::string Utf8FromUtf16(const wchar_t* utf16_string); + +// Gets the command line arguments passed in as a std::vector, +// encoded in UTF-8. Returns an empty std::vector on failure. +std::vector GetCommandLineArguments(); + +#endif // RUNNER_UTILS_H_ diff --git a/animations/step_05_c/windows/runner/win32_window.cpp b/animations/step_05_c/windows/runner/win32_window.cpp new file mode 100644 index 0000000000..60608d0fe5 --- /dev/null +++ b/animations/step_05_c/windows/runner/win32_window.cpp @@ -0,0 +1,288 @@ +#include "win32_window.h" + +#include +#include + +#include "resource.h" + +namespace { + +/// Window attribute that enables dark mode window decorations. +/// +/// Redefined in case the developer's machine has a Windows SDK older than +/// version 10.0.22000.0. +/// See: https://docs.microsoft.com/windows/win32/api/dwmapi/ne-dwmapi-dwmwindowattribute +#ifndef DWMWA_USE_IMMERSIVE_DARK_MODE +#define DWMWA_USE_IMMERSIVE_DARK_MODE 20 +#endif + +constexpr const wchar_t kWindowClassName[] = L"FLUTTER_RUNNER_WIN32_WINDOW"; + +/// Registry key for app theme preference. +/// +/// A value of 0 indicates apps should use dark mode. A non-zero or missing +/// value indicates apps should use light mode. +constexpr const wchar_t kGetPreferredBrightnessRegKey[] = + L"Software\\Microsoft\\Windows\\CurrentVersion\\Themes\\Personalize"; +constexpr const wchar_t kGetPreferredBrightnessRegValue[] = L"AppsUseLightTheme"; + +// The number of Win32Window objects that currently exist. +static int g_active_window_count = 0; + +using EnableNonClientDpiScaling = BOOL __stdcall(HWND hwnd); + +// Scale helper to convert logical scaler values to physical using passed in +// scale factor +int Scale(int source, double scale_factor) { + return static_cast(source * scale_factor); +} + +// Dynamically loads the |EnableNonClientDpiScaling| from the User32 module. +// This API is only needed for PerMonitor V1 awareness mode. +void EnableFullDpiSupportIfAvailable(HWND hwnd) { + HMODULE user32_module = LoadLibraryA("User32.dll"); + if (!user32_module) { + return; + } + auto enable_non_client_dpi_scaling = + reinterpret_cast( + GetProcAddress(user32_module, "EnableNonClientDpiScaling")); + if (enable_non_client_dpi_scaling != nullptr) { + enable_non_client_dpi_scaling(hwnd); + } + FreeLibrary(user32_module); +} + +} // namespace + +// Manages the Win32Window's window class registration. +class WindowClassRegistrar { + public: + ~WindowClassRegistrar() = default; + + // Returns the singleton registrar instance. + static WindowClassRegistrar* GetInstance() { + if (!instance_) { + instance_ = new WindowClassRegistrar(); + } + return instance_; + } + + // Returns the name of the window class, registering the class if it hasn't + // previously been registered. + const wchar_t* GetWindowClass(); + + // Unregisters the window class. Should only be called if there are no + // instances of the window. + void UnregisterWindowClass(); + + private: + WindowClassRegistrar() = default; + + static WindowClassRegistrar* instance_; + + bool class_registered_ = false; +}; + +WindowClassRegistrar* WindowClassRegistrar::instance_ = nullptr; + +const wchar_t* WindowClassRegistrar::GetWindowClass() { + if (!class_registered_) { + WNDCLASS window_class{}; + window_class.hCursor = LoadCursor(nullptr, IDC_ARROW); + window_class.lpszClassName = kWindowClassName; + window_class.style = CS_HREDRAW | CS_VREDRAW; + window_class.cbClsExtra = 0; + window_class.cbWndExtra = 0; + window_class.hInstance = GetModuleHandle(nullptr); + window_class.hIcon = + LoadIcon(window_class.hInstance, MAKEINTRESOURCE(IDI_APP_ICON)); + window_class.hbrBackground = 0; + window_class.lpszMenuName = nullptr; + window_class.lpfnWndProc = Win32Window::WndProc; + RegisterClass(&window_class); + class_registered_ = true; + } + return kWindowClassName; +} + +void WindowClassRegistrar::UnregisterWindowClass() { + UnregisterClass(kWindowClassName, nullptr); + class_registered_ = false; +} + +Win32Window::Win32Window() { + ++g_active_window_count; +} + +Win32Window::~Win32Window() { + --g_active_window_count; + Destroy(); +} + +bool Win32Window::Create(const std::wstring& title, + const Point& origin, + const Size& size) { + Destroy(); + + const wchar_t* window_class = + WindowClassRegistrar::GetInstance()->GetWindowClass(); + + const POINT target_point = {static_cast(origin.x), + static_cast(origin.y)}; + HMONITOR monitor = MonitorFromPoint(target_point, MONITOR_DEFAULTTONEAREST); + UINT dpi = FlutterDesktopGetDpiForMonitor(monitor); + double scale_factor = dpi / 96.0; + + HWND window = CreateWindow( + window_class, title.c_str(), WS_OVERLAPPEDWINDOW, + Scale(origin.x, scale_factor), Scale(origin.y, scale_factor), + Scale(size.width, scale_factor), Scale(size.height, scale_factor), + nullptr, nullptr, GetModuleHandle(nullptr), this); + + if (!window) { + return false; + } + + UpdateTheme(window); + + return OnCreate(); +} + +bool Win32Window::Show() { + return ShowWindow(window_handle_, SW_SHOWNORMAL); +} + +// static +LRESULT CALLBACK Win32Window::WndProc(HWND const window, + UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept { + if (message == WM_NCCREATE) { + auto window_struct = reinterpret_cast(lparam); + SetWindowLongPtr(window, GWLP_USERDATA, + reinterpret_cast(window_struct->lpCreateParams)); + + auto that = static_cast(window_struct->lpCreateParams); + EnableFullDpiSupportIfAvailable(window); + that->window_handle_ = window; + } else if (Win32Window* that = GetThisFromHandle(window)) { + return that->MessageHandler(window, message, wparam, lparam); + } + + return DefWindowProc(window, message, wparam, lparam); +} + +LRESULT +Win32Window::MessageHandler(HWND hwnd, + UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept { + switch (message) { + case WM_DESTROY: + window_handle_ = nullptr; + Destroy(); + if (quit_on_close_) { + PostQuitMessage(0); + } + return 0; + + case WM_DPICHANGED: { + auto newRectSize = reinterpret_cast(lparam); + LONG newWidth = newRectSize->right - newRectSize->left; + LONG newHeight = newRectSize->bottom - newRectSize->top; + + SetWindowPos(hwnd, nullptr, newRectSize->left, newRectSize->top, newWidth, + newHeight, SWP_NOZORDER | SWP_NOACTIVATE); + + return 0; + } + case WM_SIZE: { + RECT rect = GetClientArea(); + if (child_content_ != nullptr) { + // Size and position the child window. + MoveWindow(child_content_, rect.left, rect.top, rect.right - rect.left, + rect.bottom - rect.top, TRUE); + } + return 0; + } + + case WM_ACTIVATE: + if (child_content_ != nullptr) { + SetFocus(child_content_); + } + return 0; + + case WM_DWMCOLORIZATIONCOLORCHANGED: + UpdateTheme(hwnd); + return 0; + } + + return DefWindowProc(window_handle_, message, wparam, lparam); +} + +void Win32Window::Destroy() { + OnDestroy(); + + if (window_handle_) { + DestroyWindow(window_handle_); + window_handle_ = nullptr; + } + if (g_active_window_count == 0) { + WindowClassRegistrar::GetInstance()->UnregisterWindowClass(); + } +} + +Win32Window* Win32Window::GetThisFromHandle(HWND const window) noexcept { + return reinterpret_cast( + GetWindowLongPtr(window, GWLP_USERDATA)); +} + +void Win32Window::SetChildContent(HWND content) { + child_content_ = content; + SetParent(content, window_handle_); + RECT frame = GetClientArea(); + + MoveWindow(content, frame.left, frame.top, frame.right - frame.left, + frame.bottom - frame.top, true); + + SetFocus(child_content_); +} + +RECT Win32Window::GetClientArea() { + RECT frame; + GetClientRect(window_handle_, &frame); + return frame; +} + +HWND Win32Window::GetHandle() { + return window_handle_; +} + +void Win32Window::SetQuitOnClose(bool quit_on_close) { + quit_on_close_ = quit_on_close; +} + +bool Win32Window::OnCreate() { + // No-op; provided for subclasses. + return true; +} + +void Win32Window::OnDestroy() { + // No-op; provided for subclasses. +} + +void Win32Window::UpdateTheme(HWND const window) { + DWORD light_mode; + DWORD light_mode_size = sizeof(light_mode); + LSTATUS result = RegGetValue(HKEY_CURRENT_USER, kGetPreferredBrightnessRegKey, + kGetPreferredBrightnessRegValue, + RRF_RT_REG_DWORD, nullptr, &light_mode, + &light_mode_size); + + if (result == ERROR_SUCCESS) { + BOOL enable_dark_mode = light_mode == 0; + DwmSetWindowAttribute(window, DWMWA_USE_IMMERSIVE_DARK_MODE, + &enable_dark_mode, sizeof(enable_dark_mode)); + } +} diff --git a/animations/step_05_c/windows/runner/win32_window.h b/animations/step_05_c/windows/runner/win32_window.h new file mode 100644 index 0000000000..e901dde684 --- /dev/null +++ b/animations/step_05_c/windows/runner/win32_window.h @@ -0,0 +1,102 @@ +#ifndef RUNNER_WIN32_WINDOW_H_ +#define RUNNER_WIN32_WINDOW_H_ + +#include + +#include +#include +#include + +// A class abstraction for a high DPI-aware Win32 Window. Intended to be +// inherited from by classes that wish to specialize with custom +// rendering and input handling +class Win32Window { + public: + struct Point { + unsigned int x; + unsigned int y; + Point(unsigned int x, unsigned int y) : x(x), y(y) {} + }; + + struct Size { + unsigned int width; + unsigned int height; + Size(unsigned int width, unsigned int height) + : width(width), height(height) {} + }; + + Win32Window(); + virtual ~Win32Window(); + + // Creates a win32 window with |title| that is positioned and sized using + // |origin| and |size|. New windows are created on the default monitor. Window + // sizes are specified to the OS in physical pixels, hence to ensure a + // consistent size this function will scale the inputted width and height as + // as appropriate for the default monitor. The window is invisible until + // |Show| is called. Returns true if the window was created successfully. + bool Create(const std::wstring& title, const Point& origin, const Size& size); + + // Show the current window. Returns true if the window was successfully shown. + bool Show(); + + // Release OS resources associated with window. + void Destroy(); + + // Inserts |content| into the window tree. + void SetChildContent(HWND content); + + // Returns the backing Window handle to enable clients to set icon and other + // window properties. Returns nullptr if the window has been destroyed. + HWND GetHandle(); + + // If true, closing this window will quit the application. + void SetQuitOnClose(bool quit_on_close); + + // Return a RECT representing the bounds of the current client area. + RECT GetClientArea(); + + protected: + // Processes and route salient window messages for mouse handling, + // size change and DPI. Delegates handling of these to member overloads that + // inheriting classes can handle. + virtual LRESULT MessageHandler(HWND window, + UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept; + + // Called when CreateAndShow is called, allowing subclass window-related + // setup. Subclasses should return false if setup fails. + virtual bool OnCreate(); + + // Called when Destroy is called. + virtual void OnDestroy(); + + private: + friend class WindowClassRegistrar; + + // OS callback called by message pump. Handles the WM_NCCREATE message which + // is passed when the non-client area is being created and enables automatic + // non-client DPI scaling so that the non-client area automatically + // responds to changes in DPI. All other messages are handled by + // MessageHandler. + static LRESULT CALLBACK WndProc(HWND const window, + UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept; + + // Retrieves a class instance pointer for |window| + static Win32Window* GetThisFromHandle(HWND const window) noexcept; + + // Update the window frame's theme to match the system theme. + static void UpdateTheme(HWND const window); + + bool quit_on_close_ = false; + + // window handle for top level window. + HWND window_handle_ = nullptr; + + // window handle for hosted content. + HWND child_content_ = nullptr; +}; + +#endif // RUNNER_WIN32_WINDOW_H_ diff --git a/animations/step_05_d/.gitignore b/animations/step_05_d/.gitignore new file mode 100644 index 0000000000..29a3a5017f --- /dev/null +++ b/animations/step_05_d/.gitignore @@ -0,0 +1,43 @@ +# Miscellaneous +*.class +*.log +*.pyc +*.swp +.DS_Store +.atom/ +.buildlog/ +.history +.svn/ +migrate_working_dir/ + +# IntelliJ related +*.iml +*.ipr +*.iws +.idea/ + +# The .vscode folder contains launch configuration and tasks you configure in +# VS Code which you may wish to be included in version control, so this line +# is commented out by default. +#.vscode/ + +# Flutter/Dart/Pub related +**/doc/api/ +**/ios/Flutter/.last_build_id +.dart_tool/ +.flutter-plugins +.flutter-plugins-dependencies +.pub-cache/ +.pub/ +/build/ + +# Symbolication related +app.*.symbols + +# Obfuscation related +app.*.map.json + +# Android Studio will place build artifacts here +/android/app/debug +/android/app/profile +/android/app/release diff --git a/animations/step_05_d/analysis_options.yaml b/animations/step_05_d/analysis_options.yaml new file mode 100644 index 0000000000..03de3bd700 --- /dev/null +++ b/animations/step_05_d/analysis_options.yaml @@ -0,0 +1,13 @@ +include: package:flutter_lints/flutter.yaml + +analyzer: + errors: + unused_field: ignore + +linter: + rules: + annotate_overrides: false + prefer_const_constructors: false + prefer_const_constructors_in_immutables: false + prefer_const_declarations: false + prefer_const_literals_to_create_immutables: false diff --git a/animations/step_05_d/android/.gitignore b/animations/step_05_d/android/.gitignore new file mode 100644 index 0000000000..55afd919c6 --- /dev/null +++ b/animations/step_05_d/android/.gitignore @@ -0,0 +1,13 @@ +gradle-wrapper.jar +/.gradle +/captures/ +/gradlew +/gradlew.bat +/local.properties +GeneratedPluginRegistrant.java + +# Remember to never publicly share your keystore. +# See https://flutter.dev/to/reference-keystore +key.properties +**/*.keystore +**/*.jks diff --git a/animations/step_05_d/android/app/build.gradle b/animations/step_05_d/android/app/build.gradle new file mode 100644 index 0000000000..7c3594ed33 --- /dev/null +++ b/animations/step_05_d/android/app/build.gradle @@ -0,0 +1,44 @@ +plugins { + id "com.android.application" + id "kotlin-android" + // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. + id "dev.flutter.flutter-gradle-plugin" +} + +android { + namespace = "com.example.quiz" + compileSdk = flutter.compileSdkVersion + ndkVersion = flutter.ndkVersion + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 + } + + kotlinOptions { + jvmTarget = JavaVersion.VERSION_1_8 + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId = "com.example.quiz" + // You can update the following values to match your application needs. + // For more information, see: https://flutter.dev/to/review-gradle-config. + minSdk = flutter.minSdkVersion + targetSdk = flutter.targetSdkVersion + versionCode = flutter.versionCode + versionName = flutter.versionName + } + + buildTypes { + release { + // TODO: Add your own signing config for the release build. + // Signing with the debug keys for now, so `flutter run --release` works. + signingConfig = signingConfigs.debug + } + } +} + +flutter { + source = "../.." +} diff --git a/animations/step_05_d/android/app/src/debug/AndroidManifest.xml b/animations/step_05_d/android/app/src/debug/AndroidManifest.xml new file mode 100644 index 0000000000..399f6981d5 --- /dev/null +++ b/animations/step_05_d/android/app/src/debug/AndroidManifest.xml @@ -0,0 +1,7 @@ + + + + diff --git a/animations/step_05_d/android/app/src/main/AndroidManifest.xml b/animations/step_05_d/android/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000000..34076b28b3 --- /dev/null +++ b/animations/step_05_d/android/app/src/main/AndroidManifest.xml @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/animations/step_05_d/android/app/src/main/kotlin/com/example/quiz/MainActivity.kt b/animations/step_05_d/android/app/src/main/kotlin/com/example/quiz/MainActivity.kt new file mode 100644 index 0000000000..87081bb97c --- /dev/null +++ b/animations/step_05_d/android/app/src/main/kotlin/com/example/quiz/MainActivity.kt @@ -0,0 +1,5 @@ +package com.example.quiz + +import io.flutter.embedding.android.FlutterActivity + +class MainActivity: FlutterActivity() diff --git a/animations/step_05_d/android/app/src/main/res/drawable-v21/launch_background.xml b/animations/step_05_d/android/app/src/main/res/drawable-v21/launch_background.xml new file mode 100644 index 0000000000..f74085f3f6 --- /dev/null +++ b/animations/step_05_d/android/app/src/main/res/drawable-v21/launch_background.xml @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/animations/step_05_d/android/app/src/main/res/drawable/launch_background.xml b/animations/step_05_d/android/app/src/main/res/drawable/launch_background.xml new file mode 100644 index 0000000000..304732f884 --- /dev/null +++ b/animations/step_05_d/android/app/src/main/res/drawable/launch_background.xml @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/animations/step_05_d/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/animations/step_05_d/android/app/src/main/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..db77bb4b7b0906d62b1847e87f15cdcacf6a4f29 GIT binary patch literal 544 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY3?!3`olAj~WQl7;NpOBzNqJ&XDuZK6ep0G} zXKrG8YEWuoN@d~6R2!h8bpbvhu0Wd6uZuB!w&u2PAxD2eNXD>P5D~Wn-+_Wa#27Xc zC?Zj|6r#X(-D3u$NCt}(Ms06KgJ4FxJVv{GM)!I~&n8Bnc94O7-Hd)cjDZswgC;Qs zO=b+9!WcT8F?0rF7!Uys2bs@gozCP?z~o%U|N3vA*22NaGQG zlg@K`O_XuxvZ&Ks^m&R!`&1=spLvfx7oGDKDwpwW`#iqdw@AL`7MR}m`rwr|mZgU`8P7SBkL78fFf!WnuYWm$5Z0 zNXhDbCv&49sM544K|?c)WrFfiZvCi9h0O)B3Pgg&ebxsLQ05GG~ AQ2+n{ literal 0 HcmV?d00001 diff --git a/animations/step_05_d/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/animations/step_05_d/android/app/src/main/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..17987b79bb8a35cc66c3c1fd44f5a5526c1b78be GIT binary patch literal 442 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA3?vioaBc-sk|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*D5Xx&nMcT!A!W`0S9QKQy;}1Cl^CgaH=;G9cpY;r$Q>i*pfB zP2drbID<_#qf;rPZx^FqH)F_D#*k@@q03KywUtLX8Ua?`H+NMzkczFPK3lFz@i_kW%1NOn0|D2I9n9wzH8m|-tHjsw|9>@K=iMBhxvkv6m8Y-l zytQ?X=U+MF$@3 zt`~i=@j|6y)RWMK--}M|=T`o&^Ni>IoWKHEbBXz7?A@mgWoL>!*SXo`SZH-*HSdS+ yn*9;$7;m`l>wYBC5bq;=U}IMqLzqbYCidGC!)_gkIk_C@Uy!y&wkt5C($~2D>~)O*cj@FGjOCM)M>_ixfudOh)?xMu#Fs z#}Y=@YDTwOM)x{K_j*Q;dPdJ?Mz0n|pLRx{4n|)f>SXlmV)XB04CrSJn#dS5nK2lM zrZ9#~WelCp7&e13Y$jvaEXHskn$2V!!DN-nWS__6T*l;H&Fopn?A6HZ-6WRLFP=R` zqG+CE#d4|IbyAI+rJJ`&x9*T`+a=p|0O(+s{UBcyZdkhj=yS1>AirP+0R;mf2uMgM zC}@~JfByORAh4SyRgi&!(cja>F(l*O+nd+@4m$|6K6KDn_&uvCpV23&>G9HJp{xgg zoq1^2_p9@|WEo z*X_Uko@K)qYYv~>43eQGMdbiGbo>E~Q& zrYBH{QP^@Sti!`2)uG{irBBq@y*$B zi#&(U-*=fp74j)RyIw49+0MRPMRU)+a2r*PJ$L5roHt2$UjExCTZSbq%V!HeS7J$N zdG@vOZB4v_lF7Plrx+hxo7(fCV&}fHq)$ literal 0 HcmV?d00001 diff --git a/animations/step_05_d/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/animations/step_05_d/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..d5f1c8d34e7a88e3f88bea192c3a370d44689c3c GIT binary patch literal 1031 zcmeAS@N?(olHy`uVBq!ia0vp^6F``Q8Ax83A=Cw=BuiW)N`mv#O3D+9QW+dm@{>{( zJaZG%Q-e|yQz{EjrrIztFa`(sgt!6~Yi|1%a`XoT0ojZ}lNrNjb9xjc(B0U1_% zz5^97Xt*%oq$rQy4?0GKNfJ44uvxI)gC`h-NZ|&0-7(qS@?b!5r36oQ}zyZrNO3 zMO=Or+<~>+A&uN&E!^Sl+>xE!QC-|oJv`ApDhqC^EWD|@=#J`=d#Xzxs4ah}w&Jnc z$|q_opQ^2TrnVZ0o~wh<3t%W&flvYGe#$xqda2bR_R zvPYgMcHgjZ5nSA^lJr%;<&0do;O^tDDh~=pIxA#coaCY>&N%M2^tq^U%3DB@ynvKo}b?yu-bFc-u0JHzced$sg7S3zqI(2 z#Km{dPr7I=pQ5>FuK#)QwK?Y`E`B?nP+}U)I#c1+FM*1kNvWG|a(TpksZQ3B@sD~b zpQ2)*V*TdwjFOtHvV|;OsiDqHi=6%)o4b!)x$)%9pGTsE z-JL={-Ffv+T87W(Xpooq<`r*VzWQcgBN$$`u}f>-ZQI1BB8ykN*=e4rIsJx9>z}*o zo~|9I;xof literal 0 HcmV?d00001 diff --git a/animations/step_05_d/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/animations/step_05_d/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..4d6372eebdb28e45604e46eeda8dd24651419bc0 GIT binary patch literal 1443 zcmb`G{WsKk6vsdJTdFg%tJav9_E4vzrOaqkWF|A724Nly!y+?N9`YV6wZ}5(X(D_N(?!*n3`|_r0Hc?=PQw&*vnU?QTFY zB_MsH|!j$PP;I}?dppoE_gA(4uc!jV&0!l7_;&p2^pxNo>PEcNJv za5_RT$o2Mf!<+r?&EbHH6nMoTsDOa;mN(wv8RNsHpG)`^ymG-S5By8=l9iVXzN_eG%Xg2@Xeq76tTZ*dGh~Lo9vl;Zfs+W#BydUw zCkZ$o1LqWQO$FC9aKlLl*7x9^0q%0}$OMlp@Kk_jHXOjofdePND+j!A{q!8~Jn+s3 z?~~w@4?egS02}8NuulUA=L~QQfm;MzCGd)XhiftT;+zFO&JVyp2mBww?;QByS_1w! zrQlx%{^cMj0|Bo1FjwY@Q8?Hx0cIPF*@-ZRFpPc#bBw{5@tD(5%sClzIfl8WU~V#u zm5Q;_F!wa$BSpqhN>W@2De?TKWR*!ujY;Yylk_X5#~V!L*Gw~;$%4Q8~Mad z@`-kG?yb$a9cHIApZDVZ^U6Xkp<*4rU82O7%}0jjHlK{id@?-wpN*fCHXyXh(bLt* zPc}H-x0e4E&nQ>y%B-(EL=9}RyC%MyX=upHuFhAk&MLbsF0LP-q`XnH78@fT+pKPW zu72MW`|?8ht^tz$iC}ZwLp4tB;Q49K!QCF3@!iB1qOI=?w z7In!}F~ij(18UYUjnbmC!qKhPo%24?8U1x{7o(+?^Zu0Hx81|FuS?bJ0jgBhEMzf< zCgUq7r2OCB(`XkKcN-TL>u5y#dD6D!)5W?`O5)V^>jb)P)GBdy%t$uUMpf$SNV31$ zb||OojAbvMP?T@$h_ZiFLFVHDmbyMhJF|-_)HX3%m=CDI+ID$0^C>kzxprBW)hw(v zr!Gmda);ICoQyhV_oP5+C%?jcG8v+D@9f?Dk*!BxY}dazmrT@64UrP3hlslANK)bq z$67n83eh}OeW&SV@HG95P|bjfqJ7gw$e+`Hxo!4cx`jdK1bJ>YDSpGKLPZ^1cv$ek zIB?0S<#tX?SJCLWdMd{-ME?$hc7A$zBOdIJ)4!KcAwb=VMov)nK;9z>x~rfT1>dS+ zZ6#`2v@`jgbqq)P22H)Tx2CpmM^o1$B+xT6`(v%5xJ(?j#>Q$+rx_R|7TzDZe{J6q zG1*EcU%tE?!kO%^M;3aM6JN*LAKUVb^xz8-Pxo#jR5(-KBeLJvA@-gxNHx0M-ZJLl z;#JwQoh~9V?`UVo#}{6ka@II>++D@%KqGpMdlQ}?9E*wFcf5(#XQnP$Dk5~%iX^>f z%$y;?M0BLp{O3a(-4A?ewryHrrD%cx#Q^%KY1H zNre$ve+vceSLZcNY4U(RBX&)oZn*Py()h)XkE?PL$!bNb{N5FVI2Y%LKEm%yvpyTP z(1P?z~7YxD~Rf<(a@_y` literal 0 HcmV?d00001 diff --git a/animations/step_05_d/android/app/src/main/res/values-night/styles.xml b/animations/step_05_d/android/app/src/main/res/values-night/styles.xml new file mode 100644 index 0000000000..06952be745 --- /dev/null +++ b/animations/step_05_d/android/app/src/main/res/values-night/styles.xml @@ -0,0 +1,18 @@ + + + + + + + diff --git a/animations/step_05_d/android/app/src/main/res/values/styles.xml b/animations/step_05_d/android/app/src/main/res/values/styles.xml new file mode 100644 index 0000000000..cb1ef88056 --- /dev/null +++ b/animations/step_05_d/android/app/src/main/res/values/styles.xml @@ -0,0 +1,18 @@ + + + + + + + diff --git a/animations/step_05_d/android/app/src/profile/AndroidManifest.xml b/animations/step_05_d/android/app/src/profile/AndroidManifest.xml new file mode 100644 index 0000000000..399f6981d5 --- /dev/null +++ b/animations/step_05_d/android/app/src/profile/AndroidManifest.xml @@ -0,0 +1,7 @@ + + + + diff --git a/animations/step_05_d/android/build.gradle b/animations/step_05_d/android/build.gradle new file mode 100644 index 0000000000..d2ffbffa4c --- /dev/null +++ b/animations/step_05_d/android/build.gradle @@ -0,0 +1,18 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +rootProject.buildDir = "../build" +subprojects { + project.buildDir = "${rootProject.buildDir}/${project.name}" +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean", Delete) { + delete rootProject.buildDir +} diff --git a/animations/step_05_d/android/gradle.properties b/animations/step_05_d/android/gradle.properties new file mode 100644 index 0000000000..2597170821 --- /dev/null +++ b/animations/step_05_d/android/gradle.properties @@ -0,0 +1,3 @@ +org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +android.useAndroidX=true +android.enableJetifier=true diff --git a/animations/step_05_d/android/gradle/wrapper/gradle-wrapper.properties b/animations/step_05_d/android/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000000..7bb2df6ba6 --- /dev/null +++ b/animations/step_05_d/android/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,5 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip diff --git a/animations/step_05_d/android/settings.gradle b/animations/step_05_d/android/settings.gradle new file mode 100644 index 0000000000..b9e43bd376 --- /dev/null +++ b/animations/step_05_d/android/settings.gradle @@ -0,0 +1,25 @@ +pluginManagement { + def flutterSdkPath = { + def properties = new Properties() + file("local.properties").withInputStream { properties.load(it) } + def flutterSdkPath = properties.getProperty("flutter.sdk") + assert flutterSdkPath != null, "flutter.sdk not set in local.properties" + return flutterSdkPath + }() + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id "dev.flutter.flutter-plugin-loader" version "1.0.0" + id "com.android.application" version "8.1.0" apply false + id "org.jetbrains.kotlin.android" version "1.8.22" apply false +} + +include ":app" diff --git a/animations/step_05_d/ios/.gitignore b/animations/step_05_d/ios/.gitignore new file mode 100644 index 0000000000..7a7f9873ad --- /dev/null +++ b/animations/step_05_d/ios/.gitignore @@ -0,0 +1,34 @@ +**/dgph +*.mode1v3 +*.mode2v3 +*.moved-aside +*.pbxuser +*.perspectivev3 +**/*sync/ +.sconsign.dblite +.tags* +**/.vagrant/ +**/DerivedData/ +Icon? +**/Pods/ +**/.symlinks/ +profile +xcuserdata +**/.generated/ +Flutter/App.framework +Flutter/Flutter.framework +Flutter/Flutter.podspec +Flutter/Generated.xcconfig +Flutter/ephemeral/ +Flutter/app.flx +Flutter/app.zip +Flutter/flutter_assets/ +Flutter/flutter_export_environment.sh +ServiceDefinitions.json +Runner/GeneratedPluginRegistrant.* + +# Exceptions to above rules. +!default.mode1v3 +!default.mode2v3 +!default.pbxuser +!default.perspectivev3 diff --git a/animations/step_05_d/ios/Flutter/AppFrameworkInfo.plist b/animations/step_05_d/ios/Flutter/AppFrameworkInfo.plist new file mode 100644 index 0000000000..7c56964006 --- /dev/null +++ b/animations/step_05_d/ios/Flutter/AppFrameworkInfo.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + App + CFBundleIdentifier + io.flutter.flutter.app + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + App + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1.0 + MinimumOSVersion + 12.0 + + diff --git a/animations/step_05_d/ios/Flutter/Debug.xcconfig b/animations/step_05_d/ios/Flutter/Debug.xcconfig new file mode 100644 index 0000000000..592ceee85b --- /dev/null +++ b/animations/step_05_d/ios/Flutter/Debug.xcconfig @@ -0,0 +1 @@ +#include "Generated.xcconfig" diff --git a/animations/step_05_d/ios/Flutter/Release.xcconfig b/animations/step_05_d/ios/Flutter/Release.xcconfig new file mode 100644 index 0000000000..592ceee85b --- /dev/null +++ b/animations/step_05_d/ios/Flutter/Release.xcconfig @@ -0,0 +1 @@ +#include "Generated.xcconfig" diff --git a/animations/step_05_d/ios/Runner.xcodeproj/project.pbxproj b/animations/step_05_d/ios/Runner.xcodeproj/project.pbxproj new file mode 100644 index 0000000000..faef24d87a --- /dev/null +++ b/animations/step_05_d/ios/Runner.xcodeproj/project.pbxproj @@ -0,0 +1,616 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 54; + objects = { + +/* Begin PBXBuildFile section */ + 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; + 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; + 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; + 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; + 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; + 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; + 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 331C8085294A63A400263BE5 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 97C146E61CF9000F007C117D /* Project object */; + proxyType = 1; + remoteGlobalIDString = 97C146ED1CF9000F007C117D; + remoteInfo = Runner; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 9705A1C41CF9048500538489 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; + 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; + 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; + 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; + 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; + 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; + 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; + 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; + 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 97C146EB1CF9000F007C117D /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 331C8082294A63A400263BE5 /* RunnerTests */ = { + isa = PBXGroup; + children = ( + 331C807B294A618700263BE5 /* RunnerTests.swift */, + ); + path = RunnerTests; + sourceTree = ""; + }; + 9740EEB11CF90186004384FC /* Flutter */ = { + isa = PBXGroup; + children = ( + 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */, + 9740EEB21CF90195004384FC /* Debug.xcconfig */, + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, + 9740EEB31CF90195004384FC /* Generated.xcconfig */, + ); + name = Flutter; + sourceTree = ""; + }; + 97C146E51CF9000F007C117D = { + isa = PBXGroup; + children = ( + 9740EEB11CF90186004384FC /* Flutter */, + 97C146F01CF9000F007C117D /* Runner */, + 97C146EF1CF9000F007C117D /* Products */, + 331C8082294A63A400263BE5 /* RunnerTests */, + ); + sourceTree = ""; + }; + 97C146EF1CF9000F007C117D /* Products */ = { + isa = PBXGroup; + children = ( + 97C146EE1CF9000F007C117D /* Runner.app */, + 331C8081294A63A400263BE5 /* RunnerTests.xctest */, + ); + name = Products; + sourceTree = ""; + }; + 97C146F01CF9000F007C117D /* Runner */ = { + isa = PBXGroup; + children = ( + 97C146FA1CF9000F007C117D /* Main.storyboard */, + 97C146FD1CF9000F007C117D /* Assets.xcassets */, + 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */, + 97C147021CF9000F007C117D /* Info.plist */, + 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */, + 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */, + 74858FAE1ED2DC5600515810 /* AppDelegate.swift */, + 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */, + ); + path = Runner; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 331C8080294A63A400263BE5 /* RunnerTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; + buildPhases = ( + 331C807D294A63A400263BE5 /* Sources */, + 331C807F294A63A400263BE5 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 331C8086294A63A400263BE5 /* PBXTargetDependency */, + ); + name = RunnerTests; + productName = RunnerTests; + productReference = 331C8081294A63A400263BE5 /* RunnerTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; + 97C146ED1CF9000F007C117D /* Runner */ = { + isa = PBXNativeTarget; + buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; + buildPhases = ( + 9740EEB61CF901F6004384FC /* Run Script */, + 97C146EA1CF9000F007C117D /* Sources */, + 97C146EB1CF9000F007C117D /* Frameworks */, + 97C146EC1CF9000F007C117D /* Resources */, + 9705A1C41CF9048500538489 /* Embed Frameworks */, + 3B06AD1E1E4923F5004D2608 /* Thin Binary */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = Runner; + productName = Runner; + productReference = 97C146EE1CF9000F007C117D /* Runner.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 97C146E61CF9000F007C117D /* Project object */ = { + isa = PBXProject; + attributes = { + BuildIndependentTargetsInParallel = YES; + LastUpgradeCheck = 1510; + ORGANIZATIONNAME = ""; + TargetAttributes = { + 331C8080294A63A400263BE5 = { + CreatedOnToolsVersion = 14.0; + TestTargetID = 97C146ED1CF9000F007C117D; + }; + 97C146ED1CF9000F007C117D = { + CreatedOnToolsVersion = 7.3.1; + LastSwiftMigration = 1100; + }; + }; + }; + buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 97C146E51CF9000F007C117D; + productRefGroup = 97C146EF1CF9000F007C117D /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 97C146ED1CF9000F007C117D /* Runner */, + 331C8080294A63A400263BE5 /* RunnerTests */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 331C807F294A63A400263BE5 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 97C146EC1CF9000F007C117D /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */, + 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */, + 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */, + 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", + ); + name = "Thin Binary"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + }; + 9740EEB61CF901F6004384FC /* Run Script */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Run Script"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 331C807D294A63A400263BE5 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 97C146EA1CF9000F007C117D /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */, + 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 331C8086294A63A400263BE5 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 97C146ED1CF9000F007C117D /* Runner */; + targetProxy = 331C8085294A63A400263BE5 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + 97C146FA1CF9000F007C117D /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 97C146FB1CF9000F007C117D /* Base */, + ); + name = Main.storyboard; + sourceTree = ""; + }; + 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 97C147001CF9000F007C117D /* Base */, + ); + name = LaunchScreen.storyboard; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 249021D3217E4FDB00AE95B9 /* Profile */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + SUPPORTED_PLATFORMS = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Profile; + }; + 249021D4217E4FDB00AE95B9 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + ENABLE_BITCODE = NO; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.example.quiz; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; + SWIFT_VERSION = 5.0; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Profile; + }; + 331C8088294A63A400263BE5 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.quiz.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; + }; + name = Debug; + }; + 331C8089294A63A400263BE5 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.quiz.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; + }; + name = Release; + }; + 331C808A294A63A400263BE5 /* Profile */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.quiz.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; + }; + name = Profile; + }; + 97C147031CF9000F007C117D /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 97C147041CF9000F007C117D /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + SUPPORTED_PLATFORMS = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 97C147061CF9000F007C117D /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + ENABLE_BITCODE = NO; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.example.quiz; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Debug; + }; + 97C147071CF9000F007C117D /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + ENABLE_BITCODE = NO; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.example.quiz; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; + SWIFT_VERSION = 5.0; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 331C8088294A63A400263BE5 /* Debug */, + 331C8089294A63A400263BE5 /* Release */, + 331C808A294A63A400263BE5 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 97C147031CF9000F007C117D /* Debug */, + 97C147041CF9000F007C117D /* Release */, + 249021D3217E4FDB00AE95B9 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 97C147061CF9000F007C117D /* Debug */, + 97C147071CF9000F007C117D /* Release */, + 249021D4217E4FDB00AE95B9 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 97C146E61CF9000F007C117D /* Project object */; +} diff --git a/animations/step_05_d/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/animations/step_05_d/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000000..919434a625 --- /dev/null +++ b/animations/step_05_d/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/animations/step_05_d/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/animations/step_05_d/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000000..18d981003d --- /dev/null +++ b/animations/step_05_d/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/animations/step_05_d/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/animations/step_05_d/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings new file mode 100644 index 0000000000..f9b0d7c5ea --- /dev/null +++ b/animations/step_05_d/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings @@ -0,0 +1,8 @@ + + + + + PreviewsEnabled + + + diff --git a/animations/step_05_d/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/animations/step_05_d/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme new file mode 100644 index 0000000000..8e3ca5dfe1 --- /dev/null +++ b/animations/step_05_d/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -0,0 +1,98 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/animations/step_05_d/ios/Runner.xcworkspace/contents.xcworkspacedata b/animations/step_05_d/ios/Runner.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000000..1d526a16ed --- /dev/null +++ b/animations/step_05_d/ios/Runner.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/animations/step_05_d/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/animations/step_05_d/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000000..18d981003d --- /dev/null +++ b/animations/step_05_d/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/animations/step_05_d/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/animations/step_05_d/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings new file mode 100644 index 0000000000..f9b0d7c5ea --- /dev/null +++ b/animations/step_05_d/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings @@ -0,0 +1,8 @@ + + + + + PreviewsEnabled + + + diff --git a/animations/step_05_d/ios/Runner/AppDelegate.swift b/animations/step_05_d/ios/Runner/AppDelegate.swift new file mode 100644 index 0000000000..626664468b --- /dev/null +++ b/animations/step_05_d/ios/Runner/AppDelegate.swift @@ -0,0 +1,13 @@ +import Flutter +import UIKit + +@main +@objc class AppDelegate: FlutterAppDelegate { + override func application( + _ application: UIApplication, + didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? + ) -> Bool { + GeneratedPluginRegistrant.register(with: self) + return super.application(application, didFinishLaunchingWithOptions: launchOptions) + } +} diff --git a/animations/step_05_d/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/animations/step_05_d/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000000..d36b1fab2d --- /dev/null +++ b/animations/step_05_d/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,122 @@ +{ + "images" : [ + { + "size" : "20x20", + "idiom" : "iphone", + "filename" : "Icon-App-20x20@2x.png", + "scale" : "2x" + }, + { + "size" : "20x20", + "idiom" : "iphone", + "filename" : "Icon-App-20x20@3x.png", + "scale" : "3x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "Icon-App-29x29@1x.png", + "scale" : "1x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "Icon-App-29x29@2x.png", + "scale" : "2x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "Icon-App-29x29@3x.png", + "scale" : "3x" + }, + { + "size" : "40x40", + "idiom" : "iphone", + "filename" : "Icon-App-40x40@2x.png", + "scale" : "2x" + }, + { + "size" : "40x40", + "idiom" : "iphone", + "filename" : "Icon-App-40x40@3x.png", + "scale" : "3x" + }, + { + "size" : "60x60", + "idiom" : "iphone", + "filename" : "Icon-App-60x60@2x.png", + "scale" : "2x" + }, + { + "size" : "60x60", + "idiom" : "iphone", + "filename" : "Icon-App-60x60@3x.png", + "scale" : "3x" + }, + { + "size" : "20x20", + "idiom" : "ipad", + "filename" : "Icon-App-20x20@1x.png", + "scale" : "1x" + }, + { + "size" : "20x20", + "idiom" : "ipad", + "filename" : "Icon-App-20x20@2x.png", + "scale" : "2x" + }, + { + "size" : "29x29", + "idiom" : "ipad", + "filename" : "Icon-App-29x29@1x.png", + "scale" : "1x" + }, + { + "size" : "29x29", + "idiom" : "ipad", + "filename" : "Icon-App-29x29@2x.png", + "scale" : "2x" + }, + { + "size" : "40x40", + "idiom" : "ipad", + "filename" : "Icon-App-40x40@1x.png", + "scale" : "1x" + }, + { + "size" : "40x40", + "idiom" : "ipad", + "filename" : "Icon-App-40x40@2x.png", + "scale" : "2x" + }, + { + "size" : "76x76", + "idiom" : "ipad", + "filename" : "Icon-App-76x76@1x.png", + "scale" : "1x" + }, + { + "size" : "76x76", + "idiom" : "ipad", + "filename" : "Icon-App-76x76@2x.png", + "scale" : "2x" + }, + { + "size" : "83.5x83.5", + "idiom" : "ipad", + "filename" : "Icon-App-83.5x83.5@2x.png", + "scale" : "2x" + }, + { + "size" : "1024x1024", + "idiom" : "ios-marketing", + "filename" : "Icon-App-1024x1024@1x.png", + "scale" : "1x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} diff --git a/animations/step_05_d/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png b/animations/step_05_d/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..dc9ada4725e9b0ddb1deab583e5b5102493aa332 GIT binary patch literal 10932 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 literal 0 HcmV?d00001 diff --git a/animations/step_05_d/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png b/animations/step_05_d/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..797d452e458972bab9d994556c8305db4c827017 GIT binary patch literal 406 zcmV;H0crk;P))>cdjpWt&rLJgVp-t?DREyuq1A%0Z4)6_WsQ7{nzjN zo!X zGXV)2i3kcZIL~_j>uIKPK_zib+3T+Nt3Mb&Br)s)UIaA}@p{wDda>7=Q|mGRp7pqY zkJ!7E{MNz$9nOwoVqpFb)}$IP24Wn2JJ=Cw(!`OXJBr45rP>>AQr$6c7slJWvbpNW z@KTwna6d?PP>hvXCcp=4F;=GR@R4E7{4VU^0p4F>v^#A|>07*qoM6N<$f*5nx ACIA2c literal 0 HcmV?d00001 diff --git a/animations/step_05_d/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png b/animations/step_05_d/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..6ed2d933e1120817fe9182483a228007b18ab6ae GIT binary patch literal 450 zcmV;z0X_bSP)iGWQ_5NJQ_~rNh*z)}eT%KUb z`7gNk0#AwF^#0T0?hIa^`~Ck;!}#m+_uT050aTR(J!bU#|IzRL%^UsMS#KsYnTF*!YeDOytlP4VhV?b} z%rz_<=#CPc)tU1MZTq~*2=8~iZ!lSa<{9b@2Jl;?IEV8)=fG217*|@)CCYgFze-x? zIFODUIA>nWKpE+bn~n7;-89sa>#DR>TSlqWk*!2hSN6D~Qb#VqbP~4Fk&m`@1$JGr zXPIdeRE&b2Thd#{MtDK$px*d3-Wx``>!oimf%|A-&-q*6KAH)e$3|6JV%HX{Hig)k suLT-RhftRq8b9;(V=235Wa|I=027H2wCDra;{X5v07*qoM6N<$f;9x^2LJ#7 literal 0 HcmV?d00001 diff --git a/animations/step_05_d/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png b/animations/step_05_d/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..4cd7b0099ca80c806f8fe495613e8d6c69460d76 GIT binary patch literal 282 zcmV+#0p(^bcu7P-R4C8Q z&e;xxFbF_Vrezo%_kH*OKhshZ6BFpG-Y1e10`QXJKbND7AMQ&cMj60B5TNObaZxYybcN07*qoM6N<$g3m;S%K!iX literal 0 HcmV?d00001 diff --git a/animations/step_05_d/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png b/animations/step_05_d/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..fe730945a01f64a61e2235dbe3f45b08f7729182 GIT binary patch literal 462 zcmV;<0WtoGP)-}iV`2<;=$?g5M=KQbZ{F&YRNy7Nn@%_*5{gvDM0aKI4?ESmw z{NnZg)A0R`+4?NF_RZexyVB&^^ZvN!{I28tr{Vje;QNTz`dG&Jz0~Ek&f2;*Z7>B|cg}xYpxEFY+0YrKLF;^Q+-HreN0P{&i zK~zY`?b7ECf-n?@;d<&orQ*Q7KoR%4|C>{W^h6@&01>0SKS`dn{Q}GT%Qj_{PLZ_& zs`MFI#j-(>?bvdZ!8^xTwlY{qA)T4QLbY@j(!YJ7aXJervHy6HaG_2SB`6CC{He}f zHVw(fJWApwPq!6VY7r1w-Fs)@ox~N+q|w~e;JI~C4Vf^@d>Wvj=fl`^u9x9wd9 zR%3*Q+)t%S!MU_`id^@&Y{y7-r98lZX0?YrHlfmwb?#}^1b{8g&KzmkE(L>Z&)179 zp<)v6Y}pRl100G2FL_t(o!|l{-Q-VMg#&MKg7c{O0 z2wJImOS3Gy*Z2Qifdv~JYOp;v+U)a|nLoc7hNH;I$;lzDt$}rkaFw1mYK5_0Q(Sut zvbEloxON7$+HSOgC9Z8ltuC&0OSF!-mXv5caV>#bc3@hBPX@I$58-z}(ZZE!t-aOG zpjNkbau@>yEzH(5Yj4kZiMH32XI!4~gVXNnjAvRx;Sdg^`>2DpUEwoMhTs_st8pKG z(%SHyHdU&v%f36~uERh!bd`!T2dw;z6PrOTQ7Vt*#9F2uHlUVnb#ev_o^fh}Dzmq} zWtlk35}k=?xj28uO|5>>$yXadTUE@@IPpgH`gJ~Ro4>jd1IF|(+IX>8M4Ps{PNvmI zNj4D+XgN83gPt_Gm}`Ybv{;+&yu-C(Grdiahmo~BjG-l&mWM+{e5M1sm&=xduwgM9 z`8OEh`=F3r`^E{n_;%9weN{cf2%7=VzC@cYj+lg>+3|D|_1C@{hcU(DyQG_BvBWe? zvTv``=%b1zrol#=R`JB)>cdjpWt&rLJgVp-t?DREyuq1A%0Z4)6_WsQ7{nzjN zo!X zGXV)2i3kcZIL~_j>uIKPK_zib+3T+Nt3Mb&Br)s)UIaA}@p{wDda>7=Q|mGRp7pqY zkJ!7E{MNz$9nOwoVqpFb)}$IP24Wn2JJ=Cw(!`OXJBr45rP>>AQr$6c7slJWvbpNW z@KTwna6d?PP>hvXCcp=4F;=GR@R4E7{4VU^0p4F>v^#A|>07*qoM6N<$f*5nx ACIA2c literal 0 HcmV?d00001 diff --git a/animations/step_05_d/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png b/animations/step_05_d/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..502f463a9bc882b461c96aadf492d1729e49e725 GIT binary patch literal 586 zcmV-Q0=4~#P)+}#`wDE{8-2Mebf5<{{PqV{TgVcv*r8?UZ3{-|G?_}T*&y;@cqf{ z{Q*~+qr%%p!1pS*_Uicl#q9lc(D`!D`LN62sNwq{oYw(Wmhk)k<@f$!$@ng~_5)Ru z0Z)trIA5^j{DIW^c+vT2%lW+2<(RtE2wR;4O@)Tm`Xr*?A(qYoM}7i5Yxw>D(&6ou zxz!_Xr~yNF+waPe00049Nkl*;a!v6h%{rlvIH#gW3s8p;bFr=l}mRqpW2h zw=OA%hdyL~z+UHOzl0eKhEr$YYOL-c-%Y<)=j?(bzDweB7{b+%_ypvm_cG{SvM=DK zhv{K@m>#Bw>2W$eUI#iU)Wdgs8Y3U+A$Gd&{+j)d)BmGKx+43U_!tik_YlN)>$7G! zhkE!s;%oku3;IwG3U^2kw?z+HM)jB{@zFhK8P#KMSytSthr+4!c(5c%+^UBn`0X*2 zy3(k600_CSZj?O$Qu%&$;|TGUJrptR(HzyIx>5E(2r{eA(<6t3e3I0B)7d6s7?Z5J zZ!rtKvA{MiEBm&KFtoifx>5P^Z=vl)95XJn()aS5%ad(s?4-=Tkis9IGu{`Fy8r+H07*qoM6N<$f20Z)wqMt%V?S?~D#06};F zA3KcL`Wb+>5ObvgQIG&ig8(;V04hz?@cqy3{mSh8o!|U|)cI!1_+!fWH@o*8vh^CU z^ws0;(c$gI+2~q^tO#GDHf@=;DncUw00J^eL_t(&-tE|HQ`%4vfZ;WsBqu-$0nu1R zq^Vj;p$clf^?twn|KHO+IGt^q#a3X?w9dXC@*yxhv&l}F322(8Y1&=P&I}~G@#h6; z1CV9ecD9ZEe87{{NtI*)_aJ<`kJa z?5=RBtFF50s;jQLFil-`)m2wrb=6h(&brpj%nG_U&ut~$?8Rokzxi8zJoWr#2dto5 zOX_URcc<1`Iky+jc;A%Vzx}1QU{2$|cKPom2Vf1{8m`vja4{F>HS?^Nc^rp}xo+Nh zxd}eOm`fm3@MQC1< zIk&aCjb~Yh%5+Yq0`)D;q{#-Uqlv*o+Oor zE!I71Z@ASH3grl8&P^L0WpavHoP|UX4e?!igT`4?AZk$hu*@%6WJ;zDOGlw7kj@ zY5!B-0ft0f?Lgb>C;$Ke07*qoM6N<$f~t1N9smFU literal 0 HcmV?d00001 diff --git a/animations/step_05_d/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png b/animations/step_05_d/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..0ec303439225b78712f49115768196d8d76f6790 GIT binary patch literal 862 zcmV-k1EKthP)20Z)wqMt%V?S?~D#06};F zA3KcL`Wb+>5ObvgQIG&ig8(;V04hz?@cqy3{mSh8o!|U|)cI!1_+!fWH@o*8vh^CU z^ws0;(c$gI+2~q^tO#GDHf@=;DncUw00J^eL_t(&-tE|HQ`%4vfZ;WsBqu-$0nu1R zq^Vj;p$clf^?twn|KHO+IGt^q#a3X?w9dXC@*yxhv&l}F322(8Y1&=P&I}~G@#h6; z1CV9ecD9ZEe87{{NtI*)_aJ<`kJa z?5=RBtFF50s;jQLFil-`)m2wrb=6h(&brpj%nG_U&ut~$?8Rokzxi8zJoWr#2dto5 zOX_URcc<1`Iky+jc;A%Vzx}1QU{2$|cKPom2Vf1{8m`vja4{F>HS?^Nc^rp}xo+Nh zxd}eOm`fm3@MQC1< zIk&aCjb~Yh%5+Yq0`)D;q{#-Uqlv*o+Oor zE!I71Z@ASH3grl8&P^L0WpavHoP|UX4e?!igT`4?AZk$hu*@%6WJ;zDOGlw7kj@ zY5!B-0ft0f?Lgb>C;$Ke07*qoM6N<$f~t1N9smFU literal 0 HcmV?d00001 diff --git a/animations/step_05_d/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png b/animations/step_05_d/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..e9f5fea27c705180eb716271f41b582e76dcbd90 GIT binary patch literal 1674 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 literal 0 HcmV?d00001 diff --git a/animations/step_05_d/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png b/animations/step_05_d/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..0467bf12aa4d28f374bb26596605a46dcbb3e7c8 GIT binary patch literal 1418 zcmV;51$Fv~P)q zKfU)WzW*n(@|xWGCA9ScMt*e9`2kdxPQ&&>|-UCa7_51w+ zLUsW@ZzZSW0y$)Hp~e9%PvP|a03ks1`~K?q{u;6NC8*{AOqIUq{CL&;p56Lf$oQGq z^={4hPQv)y=I|4n+?>7Fim=dxt1 z2H+Dm+1+fh+IF>G0SjJMkQQre1x4|G*Z==(Ot&kCnUrL4I(rf(ucITwmuHf^hXiJT zkdTm&kdTm&kdTm&kdP`esgWG0BcWCVkVZ&2dUwN`cgM8QJb`Z7Z~e<&Yj2(}>Tmf` zm1{eLgw!b{bXkjWbF%dTkTZEJWyWOb##Lfw4EK2}<0d6%>AGS{po>WCOy&f$Tay_> z?NBlkpo@s-O;0V%Y_Xa-G#_O08q5LR*~F%&)}{}r&L%Sbs8AS4t7Y0NEx*{soY=0MZExqA5XHQkqi#4gW3 zqODM^iyZl;dvf)-bOXtOru(s)Uc7~BFx{w-FK;2{`VA?(g&@3z&bfLFyctOH!cVsF z7IL=fo-qBndRUm;kAdXR4e6>k-z|21AaN%ubeVrHl*<|s&Ax@W-t?LR(P-24A5=>a z*R9#QvjzF8n%@1Nw@?CG@6(%>+-0ASK~jEmCV|&a*7-GKT72W<(TbSjf)&Eme6nGE z>Gkj4Sq&2e+-G%|+NM8OOm5zVl9{Z8Dd8A5z3y8mZ=4Bv4%>as_{9cN#bm~;h>62( zdqY93Zy}v&c4n($Vv!UybR8ocs7#zbfX1IY-*w~)p}XyZ-SFC~4w>BvMVr`dFbelV{lLL0bx7@*ZZdebr3`sP;? zVImji)kG)(6Juv0lz@q`F!k1FE;CQ(D0iG$wchPbKZQELlsZ#~rt8#90Y_Xh&3U-< z{s<&cCV_1`^TD^ia9!*mQDq& zn2{r`j};V|uV%_wsP!zB?m%;FeaRe+X47K0e+KE!8C{gAWF8)lCd1u1%~|M!XNRvw zvtqy3iz0WSpWdhn6$hP8PaRBmp)q`#PCA`Vd#Tc$@f1tAcM>f_I@bC)hkI9|o(Iqv zo}Piadq!j76}004RBio<`)70k^`K1NK)q>w?p^C6J2ZC!+UppiK6&y3Kmbv&O!oYF z34$0Z;QO!JOY#!`qyGH<3Pd}Pt@q*A0V=3SVtWKRR8d8Z&@)3qLPA19LPA19LPEUC YUoZo%k(ykuW&i*H07*qoM6N<$f+CH{y8r+H literal 0 HcmV?d00001 diff --git a/animations/step_05_d/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json b/animations/step_05_d/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json new file mode 100644 index 0000000000..0bedcf2fd4 --- /dev/null +++ b/animations/step_05_d/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "LaunchImage.png", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "LaunchImage@2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "filename" : "LaunchImage@3x.png", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} diff --git a/animations/step_05_d/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png b/animations/step_05_d/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png new file mode 100644 index 0000000000000000000000000000000000000000..9da19eacad3b03bb08bbddbbf4ac48dd78b3d838 GIT binary patch literal 68 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx0wlM}@Gt=>Zci7-kcv6Uzs@r-FtIZ-&5|)J Q1PU{Fy85}Sb4q9e0B4a5jsO4v literal 0 HcmV?d00001 diff --git a/animations/step_05_d/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png b/animations/step_05_d/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..9da19eacad3b03bb08bbddbbf4ac48dd78b3d838 GIT binary patch literal 68 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx0wlM}@Gt=>Zci7-kcv6Uzs@r-FtIZ-&5|)J Q1PU{Fy85}Sb4q9e0B4a5jsO4v literal 0 HcmV?d00001 diff --git a/animations/step_05_d/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png b/animations/step_05_d/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..9da19eacad3b03bb08bbddbbf4ac48dd78b3d838 GIT binary patch literal 68 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx0wlM}@Gt=>Zci7-kcv6Uzs@r-FtIZ-&5|)J Q1PU{Fy85}Sb4q9e0B4a5jsO4v literal 0 HcmV?d00001 diff --git a/animations/step_05_d/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md b/animations/step_05_d/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md new file mode 100644 index 0000000000..89c2725b70 --- /dev/null +++ b/animations/step_05_d/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md @@ -0,0 +1,5 @@ +# Launch Screen Assets + +You can customize the launch screen with your own desired assets by replacing the image files in this directory. + +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. \ No newline at end of file diff --git a/animations/step_05_d/ios/Runner/Base.lproj/LaunchScreen.storyboard b/animations/step_05_d/ios/Runner/Base.lproj/LaunchScreen.storyboard new file mode 100644 index 0000000000..f2e259c7c9 --- /dev/null +++ b/animations/step_05_d/ios/Runner/Base.lproj/LaunchScreen.storyboard @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/animations/step_05_d/ios/Runner/Base.lproj/Main.storyboard b/animations/step_05_d/ios/Runner/Base.lproj/Main.storyboard new file mode 100644 index 0000000000..f3c28516fb --- /dev/null +++ b/animations/step_05_d/ios/Runner/Base.lproj/Main.storyboard @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/animations/step_05_d/ios/Runner/Info.plist b/animations/step_05_d/ios/Runner/Info.plist new file mode 100644 index 0000000000..1a0d38e408 --- /dev/null +++ b/animations/step_05_d/ios/Runner/Info.plist @@ -0,0 +1,49 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleDisplayName + Quiz + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + quiz + CFBundlePackageType + APPL + CFBundleShortVersionString + $(FLUTTER_BUILD_NAME) + CFBundleSignature + ???? + CFBundleVersion + $(FLUTTER_BUILD_NUMBER) + LSRequiresIPhoneOS + + UILaunchStoryboardName + LaunchScreen + UIMainStoryboardFile + Main + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + CADisableMinimumFrameDurationOnPhone + + UIApplicationSupportsIndirectInputEvents + + + diff --git a/animations/step_05_d/ios/Runner/Runner-Bridging-Header.h b/animations/step_05_d/ios/Runner/Runner-Bridging-Header.h new file mode 100644 index 0000000000..308a2a560b --- /dev/null +++ b/animations/step_05_d/ios/Runner/Runner-Bridging-Header.h @@ -0,0 +1 @@ +#import "GeneratedPluginRegistrant.h" diff --git a/animations/step_05_d/ios/RunnerTests/RunnerTests.swift b/animations/step_05_d/ios/RunnerTests/RunnerTests.swift new file mode 100644 index 0000000000..86a7c3b1b6 --- /dev/null +++ b/animations/step_05_d/ios/RunnerTests/RunnerTests.swift @@ -0,0 +1,12 @@ +import Flutter +import UIKit +import XCTest + +class RunnerTests: XCTestCase { + + func testExample() { + // If you add code to the Runner application, consider adding tests here. + // See https://developer.apple.com/documentation/xctest for more information about using XCTest. + } + +} diff --git a/animations/step_05_d/lib/flip_effect.dart b/animations/step_05_d/lib/flip_effect.dart new file mode 100644 index 0000000000..cafd21bece --- /dev/null +++ b/animations/step_05_d/lib/flip_effect.dart @@ -0,0 +1,85 @@ +import 'package:flutter/widgets.dart'; +import 'dart:math' as math; + +class CardFlipEffect extends StatefulWidget { + final Widget child; + final Duration duration; + final double delayAmount; + + const CardFlipEffect({ + super.key, + required this.child, + required this.duration, + required this.delayAmount, + }); + + @override + State createState() => _CardFlipEffectState(); +} + +class _CardFlipEffectState extends State + with SingleTickerProviderStateMixin { + late final AnimationController _animationController; + Widget? _previousChild; + late final Animation _animationWithDelay; + + @override + void initState() { + super.initState(); + + _animationController = AnimationController( + vsync: this, duration: widget.duration * (widget.delayAmount + 1)); + + _animationController.addListener(() { + if (_animationController.value == 1) { + _animationController.reset(); + } + }); + + _animationWithDelay = TweenSequence([ + if (widget.delayAmount > 0) + TweenSequenceItem( + tween: ConstantTween(0.0), + weight: widget.delayAmount, + ), + TweenSequenceItem( + tween: Tween(begin: 0.0, end: 1.0), + weight: 1.0, + ), + ]).animate(_animationController); + } + + @override + void didUpdateWidget(covariant CardFlipEffect oldWidget) { + super.didUpdateWidget(oldWidget); + + if (widget.child.key != oldWidget.child.key) { + _handleChildChanged(widget.child, oldWidget.child); + } + } + + void _handleChildChanged(Widget newChild, Widget previousChild) { + _previousChild = previousChild; + _animationController.forward(); + } + + @override + Widget build(BuildContext context) { + return AnimatedBuilder( + animation: _animationWithDelay, + builder: (context, child) { + return Transform( + alignment: Alignment.center, + transform: Matrix4.identity() + ..rotateX(_animationWithDelay.value * math.pi), + child: _animationController.isAnimating + ? _animationWithDelay.value < 0.5 + ? _previousChild + : Transform.flip(flipY: true, child: widget.child) + : widget.child, + ); + }, + child: widget.child, + ); + } +} diff --git a/animations/step_05_d/lib/home_screen.dart b/animations/step_05_d/lib/home_screen.dart new file mode 100644 index 0000000000..534110a0c8 --- /dev/null +++ b/animations/step_05_d/lib/home_screen.dart @@ -0,0 +1,41 @@ +import 'package:flutter/material.dart'; +import 'question_screen.dart'; + +class HomeScreen extends StatelessWidget { + const HomeScreen({super.key}); + + @override + Widget build(BuildContext context) { + return Scaffold( + body: Center( + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + Text( + '✏️', + style: Theme.of(context).textTheme.displayLarge, + ), + Text( + 'Flutter Quiz', + style: Theme.of(context).textTheme.displayLarge!.copyWith( + fontWeight: FontWeight.w700, + color: Theme.of(context).colorScheme.onPrimaryFixedVariant), + ), + ElevatedButton( + onPressed: () { + // Show the question screen to start the game + Navigator.push( + context, + MaterialPageRoute(builder: (context) { + return const QuestionScreen(); + }), + ); + }, + child: const Text('New Game'), + ), + ], + ), + ), + ); + } +} diff --git a/animations/step_05_d/lib/main.dart b/animations/step_05_d/lib/main.dart new file mode 100644 index 0000000000..9ad4855719 --- /dev/null +++ b/animations/step_05_d/lib/main.dart @@ -0,0 +1,33 @@ +import 'package:animations/animations.dart'; +import 'package:flutter/material.dart'; + +import 'home_screen.dart'; + +void main() { + runApp(MainApp()); +} + +class MainApp extends StatelessWidget { + const MainApp({super.key}); + + @override + Widget build(BuildContext context) { + return MaterialApp( + debugShowCheckedModeBanner: false, + theme: ThemeData( + colorScheme: ColorScheme.fromSeed(seedColor: Colors.blue), + useMaterial3: true, + pageTransitionsTheme: PageTransitionsTheme( + builders: { + TargetPlatform.android: PredictiveBackPageTransitionsBuilder(), + TargetPlatform.iOS: FadeThroughPageTransitionsBuilder(), + TargetPlatform.macOS: FadeThroughPageTransitionsBuilder(), + TargetPlatform.windows: FadeThroughPageTransitionsBuilder(), + TargetPlatform.linux: FadeThroughPageTransitionsBuilder(), + }, + ), + ), + home: HomeScreen(), + ); + } +} diff --git a/animations/step_05_d/lib/model.dart b/animations/step_05_d/lib/model.dart new file mode 100644 index 0000000000..0662327f52 --- /dev/null +++ b/animations/step_05_d/lib/model.dart @@ -0,0 +1,62 @@ +import 'dart:math' as math; + +class Question { + final String question; + final List possibleAnswers; + final int correctAnswer; + Question(this.question, this.possibleAnswers, this.correctAnswer); +} + +class QuestionBank { + final List _questions = _createQuestions(); + + bool get hasNextQuestion => _questions.isNotEmpty; + int get remainingQuestions => _questions.length; + + Question? getRandomQuestion() { + if (_questions.isEmpty) { + return null; + } + + var i = math.Random().nextInt(_questions.length); + var question = _questions[i]; + + _questions.removeAt(i); + return question; + } +} + +List _createQuestions() { + return [ + Question( + 'What class used to create custom explicit animations in Flutter?', + [ + 'AnimationController', + 'AnimatedWidget', + 'AnimatedBuilder', + 'Tween', + ], + 0, + ), + Question( + 'Which widget is used to rebuild its child whenever an animation changes?', + [ + 'AnimatedContainer', + 'AnimatedBuilder', + 'AnimatedSwitcher', + 'AnimatedOpacity', + ], + 1, + ), + Question( + 'What class is used to define the start and end values for an animation?', + [ + 'Tween', + 'Curve', + 'AnimationController', + 'AnimatedWidget', + ], + 0, + ), + ]; +} diff --git a/animations/step_05_d/lib/question_screen.dart b/animations/step_05_d/lib/question_screen.dart new file mode 100644 index 0000000000..42ee3bfc81 --- /dev/null +++ b/animations/step_05_d/lib/question_screen.dart @@ -0,0 +1,250 @@ +import 'package:animations/animations.dart'; +import 'package:flutter/material.dart'; +import 'flip_effect.dart'; +import 'scoreboard.dart'; +import 'view_model.dart'; + +class QuestionScreen extends StatefulWidget { + const QuestionScreen({super.key}); + + @override + State createState() => _QuestionScreenState(); +} + +class _QuestionScreenState extends State { + late final QuizViewModel viewModel = + QuizViewModel(onGameOver: _handleGameOver); + VoidCallback? _showGameOverScreen; + + @override + Widget build(BuildContext context) { + return ListenableBuilder( + listenable: viewModel, + builder: (context, child) { + return Scaffold( + appBar: AppBar( + actions: [ + TextButton( + onPressed: + viewModel.hasNextQuestion && viewModel.didAnswerQuestion + ? () { + viewModel.getNextQuestion(); + } + : null, + child: const Text('Next'), + ) + ], + ), + body: Center( + child: Column( + children: [ + QuestionCard( + onChangeOpenContainer: _handleChangeOpenContainer, + question: viewModel.currentQuestion?.question, + viewModel: viewModel, + ), + Spacer(), + AnswerCards( + onTapped: (index) { + viewModel.checkAnswer(index); + }, + answers: viewModel.currentQuestion?.possibleAnswers ?? [], + correctAnswer: viewModel.didAnswerQuestion + ? viewModel.currentQuestion?.correctAnswer + : null, + ), + StatusBar( + viewModel: viewModel, + ) + ], + ), + ), + ); + }, + ); + } + + void _handleChangeOpenContainer(VoidCallback openContainer) { + _showGameOverScreen = openContainer; + } + + void _handleGameOver() { + if (_showGameOverScreen != null) { + _showGameOverScreen!(); + } + } +} + +class GameOverScreen extends StatelessWidget { + final QuizViewModel viewModel; + const GameOverScreen({required this.viewModel, super.key}); + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar( + automaticallyImplyLeading: false, + ), + body: Center( + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Scoreboard( + score: viewModel.score, + totalQuestions: viewModel.totalQuestions, + ), + Text( + 'You Win!', + style: Theme.of(context).textTheme.displayLarge, + ), + Text( + 'Score: ${viewModel.score} / ${viewModel.totalQuestions}', + style: Theme.of(context).textTheme.displaySmall, + ), + ElevatedButton( + child: Text('OK'), + onPressed: () { + Navigator.pop(context); + // Navigator.popUntil( + // context, (route) => route.isFirst); + }, + ), + ], + ), + ), + ); + } +} + +class QuestionCard extends StatelessWidget { + final String? question; + + const QuestionCard({ + required this.onChangeOpenContainer, + required this.question, + required this.viewModel, + super.key, + }); + + final ValueChanged onChangeOpenContainer; + final QuizViewModel viewModel; + + static const _backgroundColor = Color(0xfff2f3fa); + + @override + Widget build(BuildContext context) { + return PageTransitionSwitcher( + duration: const Duration(milliseconds: 200), + transitionBuilder: (Widget child, animation, secondaryAnimation) { + return FadeThroughTransition( + animation: animation, + secondaryAnimation: secondaryAnimation, + child: child, + ); + }, + child: OpenContainer( + key: ValueKey(question), + tappable: false, + closedColor: _backgroundColor, + closedShape: const RoundedRectangleBorder( + borderRadius: BorderRadius.all(Radius.circular(12.0)), + ), + closedElevation: 4, + closedBuilder: (context, openContainer) { + onChangeOpenContainer(openContainer); + return ColoredBox( + color: _backgroundColor, + child: Padding( + padding: const EdgeInsets.all(16.0), + child: Text( + question ?? "", + style: Theme.of(context).textTheme.displaySmall, + ), + ), + ); + }, + openBuilder: (context, closeContainer) { + return GameOverScreen(viewModel: viewModel); + }, + ), + ); + } +} + +class AnswerCards extends StatelessWidget { + final List answers; + final ValueChanged onTapped; + final int? correctAnswer; + + const AnswerCards({ + required this.answers, + required this.onTapped, + required this.correctAnswer, + super.key, + }); + + @override + Widget build(BuildContext context) { + return GridView.count( + shrinkWrap: true, + crossAxisCount: 2, + childAspectRatio: 5 / 2, + children: List.generate(answers.length, (index) { + var color = Theme.of(context).colorScheme.primaryContainer; + if (correctAnswer == index) { + color = Theme.of(context).colorScheme.tertiaryContainer; + } + + return CardFlipEffect( + delayAmount: index.toDouble() / 2, + duration: const Duration(milliseconds: 300), + child: Card.filled( + key: ValueKey(answers[index]), + color: color, + elevation: 2, + margin: const EdgeInsets.all(8), + clipBehavior: Clip.hardEdge, + child: InkWell( + onTap: () => onTapped(index), + child: Padding( + padding: const EdgeInsets.all(16.0), + child: Center( + child: Text( + answers.length > index ? answers[index] : "", + style: Theme.of(context).textTheme.titleMedium, + overflow: TextOverflow.clip, + ), + ), + ), + ), + ), + ); + }), + ); + } +} + +class StatusBar extends StatelessWidget { + final QuizViewModel viewModel; + + const StatusBar({required this.viewModel, super.key}); + + @override + Widget build(BuildContext context) { + return Card( + elevation: 4, + child: Padding( + padding: EdgeInsets.all(8.0), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceAround, + children: [ + Scoreboard( + score: viewModel.score, + totalQuestions: viewModel.totalQuestions, + ), + ], + ), + ), + ); + } +} diff --git a/animations/step_05_d/lib/scoreboard.dart b/animations/step_05_d/lib/scoreboard.dart new file mode 100644 index 0000000000..dd71080ba3 --- /dev/null +++ b/animations/step_05_d/lib/scoreboard.dart @@ -0,0 +1,62 @@ +import 'package:flutter/material.dart'; + +class Scoreboard extends StatelessWidget { + final int score; + final int totalQuestions; + + const Scoreboard({ + super.key, + required this.score, + required this.totalQuestions, + }); + + @override + Widget build(BuildContext context) { + return Padding( + padding: const EdgeInsets.all(8.0), + child: Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + for (var i = 0; i < totalQuestions; i++) + AnimatedStar( + isActive: score > i, + ) + ], + ), + ); + } +} + +class AnimatedStar extends StatelessWidget { + final bool isActive; + final Duration _duration = const Duration(milliseconds: 1000); + final Color _deactivatedColor = Colors.grey.shade400; + final Color _activatedColor = Colors.yellow.shade700; + final Curve _curve = Curves.elasticOut; + + AnimatedStar({super.key, required this.isActive}); + + @override + Widget build(BuildContext context) { + return AnimatedScale( + scale: isActive ? 1.0 : 0.5, + curve: _curve, + duration: _duration, + child: TweenAnimationBuilder( + curve: _curve, + duration: _duration, + tween: ColorTween( + begin: _deactivatedColor, + end: isActive ? _activatedColor : _deactivatedColor, + ), + builder: (context, value, child) { + return Icon( + Icons.star, + size: 50, + color: value, + ); + }, + ), + ); + } +} diff --git a/animations/step_05_d/lib/view_model.dart b/animations/step_05_d/lib/view_model.dart new file mode 100644 index 0000000000..84fc5f218b --- /dev/null +++ b/animations/step_05_d/lib/view_model.dart @@ -0,0 +1,43 @@ +import 'package:flutter/cupertino.dart'; +import 'model.dart'; + +class QuizViewModel extends ChangeNotifier { + final QuestionBank _questionBank = QuestionBank(); + final VoidCallback onGameOver; + late final int totalQuestions; + Question? currentQuestion; + int answeredQuestionCount = 0; + int score = 0; + bool didAnswerQuestion = false; + bool get hasNextQuestion => answeredQuestionCount < totalQuestions; + + QuizViewModel({required this.onGameOver}) { + totalQuestions = _questionBank.remainingQuestions; + getNextQuestion(); + } + + void getNextQuestion() { + if (_questionBank.hasNextQuestion) { + currentQuestion = _questionBank.getRandomQuestion(); + answeredQuestionCount++; + } + + didAnswerQuestion = false; + + notifyListeners(); + } + + void checkAnswer(int selectedIndex) { + if (!didAnswerQuestion && currentQuestion?.correctAnswer == selectedIndex) { + score++; + } + + didAnswerQuestion = true; + + if (!_questionBank.hasNextQuestion) { + onGameOver(); + } + + notifyListeners(); + } +} diff --git a/animations/step_05_d/linux/.gitignore b/animations/step_05_d/linux/.gitignore new file mode 100644 index 0000000000..d3896c9844 --- /dev/null +++ b/animations/step_05_d/linux/.gitignore @@ -0,0 +1 @@ +flutter/ephemeral diff --git a/animations/step_05_d/linux/CMakeLists.txt b/animations/step_05_d/linux/CMakeLists.txt new file mode 100644 index 0000000000..658be85ac5 --- /dev/null +++ b/animations/step_05_d/linux/CMakeLists.txt @@ -0,0 +1,145 @@ +# Project-level configuration. +cmake_minimum_required(VERSION 3.10) +project(runner LANGUAGES CXX) + +# The name of the executable created for the application. Change this to change +# the on-disk name of your application. +set(BINARY_NAME "quiz") +# The unique GTK application identifier for this application. See: +# https://wiki.gnome.org/HowDoI/ChooseApplicationID +set(APPLICATION_ID "com.example.quiz") + +# Explicitly opt in to modern CMake behaviors to avoid warnings with recent +# versions of CMake. +cmake_policy(SET CMP0063 NEW) + +# Load bundled libraries from the lib/ directory relative to the binary. +set(CMAKE_INSTALL_RPATH "$ORIGIN/lib") + +# Root filesystem for cross-building. +if(FLUTTER_TARGET_PLATFORM_SYSROOT) + set(CMAKE_SYSROOT ${FLUTTER_TARGET_PLATFORM_SYSROOT}) + set(CMAKE_FIND_ROOT_PATH ${CMAKE_SYSROOT}) + set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) + set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY) + set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) + set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) +endif() + +# Define build configuration options. +if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) + set(CMAKE_BUILD_TYPE "Debug" CACHE + STRING "Flutter build mode" FORCE) + set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS + "Debug" "Profile" "Release") +endif() + +# Compilation settings that should be applied to most targets. +# +# Be cautious about adding new options here, as plugins use this function by +# default. In most cases, you should add new options to specific targets instead +# of modifying this function. +function(APPLY_STANDARD_SETTINGS TARGET) + target_compile_features(${TARGET} PUBLIC cxx_std_14) + target_compile_options(${TARGET} PRIVATE -Wall -Werror) + target_compile_options(${TARGET} PRIVATE "$<$>:-O3>") + target_compile_definitions(${TARGET} PRIVATE "$<$>:NDEBUG>") +endfunction() + +# Flutter library and tool build rules. +set(FLUTTER_MANAGED_DIR "${CMAKE_CURRENT_SOURCE_DIR}/flutter") +add_subdirectory(${FLUTTER_MANAGED_DIR}) + +# System-level dependencies. +find_package(PkgConfig REQUIRED) +pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) + +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Define the application target. To change its name, change BINARY_NAME above, +# not the value here, or `flutter run` will no longer work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +# Run the Flutter tool portions of the build. This must not be removed. +add_dependencies(${BINARY_NAME} flutter_assemble) + +# Only the install-generated bundle's copy of the executable will launch +# correctly, since the resources must in the right relative locations. To avoid +# people trying to run the unbundled copy, put it in a subdirectory instead of +# the default top-level location. +set_target_properties(${BINARY_NAME} + PROPERTIES + RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/intermediates_do_not_run" +) + + +# Generated plugin build rules, which manage building the plugins and adding +# them to the application. +include(flutter/generated_plugins.cmake) + + +# === Installation === +# By default, "installing" just makes a relocatable bundle in the build +# directory. +set(BUILD_BUNDLE_DIR "${PROJECT_BINARY_DIR}/bundle") +if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) + set(CMAKE_INSTALL_PREFIX "${BUILD_BUNDLE_DIR}" CACHE PATH "..." FORCE) +endif() + +# Start with a clean build bundle directory every time. +install(CODE " + file(REMOVE_RECURSE \"${BUILD_BUNDLE_DIR}/\") + " COMPONENT Runtime) + +set(INSTALL_BUNDLE_DATA_DIR "${CMAKE_INSTALL_PREFIX}/data") +set(INSTALL_BUNDLE_LIB_DIR "${CMAKE_INSTALL_PREFIX}/lib") + +install(TARGETS ${BINARY_NAME} RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_ICU_DATA_FILE}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) + +foreach(bundled_library ${PLUGIN_BUNDLED_LIBRARIES}) + install(FILES "${bundled_library}" + DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) +endforeach(bundled_library) + +# Copy the native assets provided by the build.dart from all packages. +set(NATIVE_ASSETS_DIR "${PROJECT_BUILD_DIR}native_assets/linux/") +install(DIRECTORY "${NATIVE_ASSETS_DIR}" + DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) + +# Fully re-copy the assets directory on each build to avoid having stale files +# from a previous install. +set(FLUTTER_ASSET_DIR_NAME "flutter_assets") +install(CODE " + file(REMOVE_RECURSE \"${INSTALL_BUNDLE_DATA_DIR}/${FLUTTER_ASSET_DIR_NAME}\") + " COMPONENT Runtime) +install(DIRECTORY "${PROJECT_BUILD_DIR}/${FLUTTER_ASSET_DIR_NAME}" + DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" COMPONENT Runtime) + +# Install the AOT library on non-Debug builds only. +if(NOT CMAKE_BUILD_TYPE MATCHES "Debug") + install(FILES "${AOT_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) +endif() diff --git a/animations/step_05_d/linux/flutter/CMakeLists.txt b/animations/step_05_d/linux/flutter/CMakeLists.txt new file mode 100644 index 0000000000..d5bd01648a --- /dev/null +++ b/animations/step_05_d/linux/flutter/CMakeLists.txt @@ -0,0 +1,88 @@ +# This file controls Flutter-level build steps. It should not be edited. +cmake_minimum_required(VERSION 3.10) + +set(EPHEMERAL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/ephemeral") + +# Configuration provided via flutter tool. +include(${EPHEMERAL_DIR}/generated_config.cmake) + +# TODO: Move the rest of this into files in ephemeral. See +# https://github.com/flutter/flutter/issues/57146. + +# Serves the same purpose as list(TRANSFORM ... PREPEND ...), +# which isn't available in 3.10. +function(list_prepend LIST_NAME PREFIX) + set(NEW_LIST "") + foreach(element ${${LIST_NAME}}) + list(APPEND NEW_LIST "${PREFIX}${element}") + endforeach(element) + set(${LIST_NAME} "${NEW_LIST}" PARENT_SCOPE) +endfunction() + +# === Flutter Library === +# System-level dependencies. +find_package(PkgConfig REQUIRED) +pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) +pkg_check_modules(GLIB REQUIRED IMPORTED_TARGET glib-2.0) +pkg_check_modules(GIO REQUIRED IMPORTED_TARGET gio-2.0) + +set(FLUTTER_LIBRARY "${EPHEMERAL_DIR}/libflutter_linux_gtk.so") + +# Published to parent scope for install step. +set(FLUTTER_LIBRARY ${FLUTTER_LIBRARY} PARENT_SCOPE) +set(FLUTTER_ICU_DATA_FILE "${EPHEMERAL_DIR}/icudtl.dat" PARENT_SCOPE) +set(PROJECT_BUILD_DIR "${PROJECT_DIR}/build/" PARENT_SCOPE) +set(AOT_LIBRARY "${PROJECT_DIR}/build/lib/libapp.so" PARENT_SCOPE) + +list(APPEND FLUTTER_LIBRARY_HEADERS + "fl_basic_message_channel.h" + "fl_binary_codec.h" + "fl_binary_messenger.h" + "fl_dart_project.h" + "fl_engine.h" + "fl_json_message_codec.h" + "fl_json_method_codec.h" + "fl_message_codec.h" + "fl_method_call.h" + "fl_method_channel.h" + "fl_method_codec.h" + "fl_method_response.h" + "fl_plugin_registrar.h" + "fl_plugin_registry.h" + "fl_standard_message_codec.h" + "fl_standard_method_codec.h" + "fl_string_codec.h" + "fl_value.h" + "fl_view.h" + "flutter_linux.h" +) +list_prepend(FLUTTER_LIBRARY_HEADERS "${EPHEMERAL_DIR}/flutter_linux/") +add_library(flutter INTERFACE) +target_include_directories(flutter INTERFACE + "${EPHEMERAL_DIR}" +) +target_link_libraries(flutter INTERFACE "${FLUTTER_LIBRARY}") +target_link_libraries(flutter INTERFACE + PkgConfig::GTK + PkgConfig::GLIB + PkgConfig::GIO +) +add_dependencies(flutter flutter_assemble) + +# === Flutter tool backend === +# _phony_ is a non-existent file to force this command to run every time, +# since currently there's no way to get a full input/output list from the +# flutter tool. +add_custom_command( + OUTPUT ${FLUTTER_LIBRARY} ${FLUTTER_LIBRARY_HEADERS} + ${CMAKE_CURRENT_BINARY_DIR}/_phony_ + COMMAND ${CMAKE_COMMAND} -E env + ${FLUTTER_TOOL_ENVIRONMENT} + "${FLUTTER_ROOT}/packages/flutter_tools/bin/tool_backend.sh" + ${FLUTTER_TARGET_PLATFORM} ${CMAKE_BUILD_TYPE} + VERBATIM +) +add_custom_target(flutter_assemble DEPENDS + "${FLUTTER_LIBRARY}" + ${FLUTTER_LIBRARY_HEADERS} +) diff --git a/animations/step_05_d/linux/flutter/generated_plugin_registrant.cc b/animations/step_05_d/linux/flutter/generated_plugin_registrant.cc new file mode 100644 index 0000000000..e71a16d23d --- /dev/null +++ b/animations/step_05_d/linux/flutter/generated_plugin_registrant.cc @@ -0,0 +1,11 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#include "generated_plugin_registrant.h" + + +void fl_register_plugins(FlPluginRegistry* registry) { +} diff --git a/animations/step_05_d/linux/flutter/generated_plugin_registrant.h b/animations/step_05_d/linux/flutter/generated_plugin_registrant.h new file mode 100644 index 0000000000..e0f0a47bc0 --- /dev/null +++ b/animations/step_05_d/linux/flutter/generated_plugin_registrant.h @@ -0,0 +1,15 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#ifndef GENERATED_PLUGIN_REGISTRANT_ +#define GENERATED_PLUGIN_REGISTRANT_ + +#include + +// Registers Flutter plugins. +void fl_register_plugins(FlPluginRegistry* registry); + +#endif // GENERATED_PLUGIN_REGISTRANT_ diff --git a/animations/step_05_d/linux/flutter/generated_plugins.cmake b/animations/step_05_d/linux/flutter/generated_plugins.cmake new file mode 100644 index 0000000000..2e1de87a7e --- /dev/null +++ b/animations/step_05_d/linux/flutter/generated_plugins.cmake @@ -0,0 +1,23 @@ +# +# Generated file, do not edit. +# + +list(APPEND FLUTTER_PLUGIN_LIST +) + +list(APPEND FLUTTER_FFI_PLUGIN_LIST +) + +set(PLUGIN_BUNDLED_LIBRARIES) + +foreach(plugin ${FLUTTER_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${plugin}/linux plugins/${plugin}) + target_link_libraries(${BINARY_NAME} PRIVATE ${plugin}_plugin) + list(APPEND PLUGIN_BUNDLED_LIBRARIES $) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${plugin}_bundled_libraries}) +endforeach(plugin) + +foreach(ffi_plugin ${FLUTTER_FFI_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${ffi_plugin}/linux plugins/${ffi_plugin}) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${ffi_plugin}_bundled_libraries}) +endforeach(ffi_plugin) diff --git a/animations/step_05_d/linux/main.cc b/animations/step_05_d/linux/main.cc new file mode 100644 index 0000000000..e7c5c54370 --- /dev/null +++ b/animations/step_05_d/linux/main.cc @@ -0,0 +1,6 @@ +#include "my_application.h" + +int main(int argc, char** argv) { + g_autoptr(MyApplication) app = my_application_new(); + return g_application_run(G_APPLICATION(app), argc, argv); +} diff --git a/animations/step_05_d/linux/my_application.cc b/animations/step_05_d/linux/my_application.cc new file mode 100644 index 0000000000..d6ea0e3c5f --- /dev/null +++ b/animations/step_05_d/linux/my_application.cc @@ -0,0 +1,124 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "quiz"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "quiz"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/animations/step_05_d/linux/my_application.h b/animations/step_05_d/linux/my_application.h new file mode 100644 index 0000000000..72271d5e41 --- /dev/null +++ b/animations/step_05_d/linux/my_application.h @@ -0,0 +1,18 @@ +#ifndef FLUTTER_MY_APPLICATION_H_ +#define FLUTTER_MY_APPLICATION_H_ + +#include + +G_DECLARE_FINAL_TYPE(MyApplication, my_application, MY, APPLICATION, + GtkApplication) + +/** + * my_application_new: + * + * Creates a new Flutter-based application. + * + * Returns: a new #MyApplication. + */ +MyApplication* my_application_new(); + +#endif // FLUTTER_MY_APPLICATION_H_ diff --git a/animations/step_05_d/macos/.gitignore b/animations/step_05_d/macos/.gitignore new file mode 100644 index 0000000000..746adbb6b9 --- /dev/null +++ b/animations/step_05_d/macos/.gitignore @@ -0,0 +1,7 @@ +# Flutter-related +**/Flutter/ephemeral/ +**/Pods/ + +# Xcode-related +**/dgph +**/xcuserdata/ diff --git a/animations/step_05_d/macos/Flutter/Flutter-Debug.xcconfig b/animations/step_05_d/macos/Flutter/Flutter-Debug.xcconfig new file mode 100644 index 0000000000..c2efd0b608 --- /dev/null +++ b/animations/step_05_d/macos/Flutter/Flutter-Debug.xcconfig @@ -0,0 +1 @@ +#include "ephemeral/Flutter-Generated.xcconfig" diff --git a/animations/step_05_d/macos/Flutter/Flutter-Release.xcconfig b/animations/step_05_d/macos/Flutter/Flutter-Release.xcconfig new file mode 100644 index 0000000000..c2efd0b608 --- /dev/null +++ b/animations/step_05_d/macos/Flutter/Flutter-Release.xcconfig @@ -0,0 +1 @@ +#include "ephemeral/Flutter-Generated.xcconfig" diff --git a/animations/step_05_d/macos/Flutter/GeneratedPluginRegistrant.swift b/animations/step_05_d/macos/Flutter/GeneratedPluginRegistrant.swift new file mode 100644 index 0000000000..cccf817a52 --- /dev/null +++ b/animations/step_05_d/macos/Flutter/GeneratedPluginRegistrant.swift @@ -0,0 +1,10 @@ +// +// Generated file. Do not edit. +// + +import FlutterMacOS +import Foundation + + +func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { +} diff --git a/animations/step_05_d/macos/Runner.xcodeproj/project.pbxproj b/animations/step_05_d/macos/Runner.xcodeproj/project.pbxproj new file mode 100644 index 0000000000..45c35dfed5 --- /dev/null +++ b/animations/step_05_d/macos/Runner.xcodeproj/project.pbxproj @@ -0,0 +1,705 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 54; + objects = { + +/* Begin PBXAggregateTarget section */ + 33CC111A2044C6BA0003C045 /* Flutter Assemble */ = { + isa = PBXAggregateTarget; + buildConfigurationList = 33CC111B2044C6BA0003C045 /* Build configuration list for PBXAggregateTarget "Flutter Assemble" */; + buildPhases = ( + 33CC111E2044C6BF0003C045 /* ShellScript */, + ); + dependencies = ( + ); + name = "Flutter Assemble"; + productName = FLX; + }; +/* End PBXAggregateTarget section */ + +/* Begin PBXBuildFile section */ + 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; + 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; + 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; + 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; + 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; + 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 331C80D9294CF71000263BE5 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 33CC10E52044A3C60003C045 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 33CC10EC2044A3C60003C045; + remoteInfo = Runner; + }; + 33CC111F2044C79F0003C045 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 33CC10E52044A3C60003C045 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 33CC111A2044C6BA0003C045; + remoteInfo = FLX; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 33CC110E2044A8840003C045 /* Bundle Framework */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + ); + name = "Bundle Framework"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; + 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; + 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; }; + 33CC10ED2044A3C60003C045 /* quiz.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "quiz.app"; sourceTree = BUILT_PRODUCTS_DIR; }; + 33CC10F02044A3C60003C045 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 33CC10F22044A3C60003C045 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = Runner/Assets.xcassets; sourceTree = ""; }; + 33CC10F52044A3C60003C045 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = ""; }; + 33CC10F72044A3C60003C045 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = Info.plist; path = Runner/Info.plist; sourceTree = ""; }; + 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainFlutterWindow.swift; sourceTree = ""; }; + 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Debug.xcconfig"; sourceTree = ""; }; + 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Release.xcconfig"; sourceTree = ""; }; + 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = "Flutter-Generated.xcconfig"; path = "ephemeral/Flutter-Generated.xcconfig"; sourceTree = ""; }; + 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; + 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; + 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; + 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 331C80D2294CF70F00263BE5 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 33CC10EA2044A3C60003C045 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 331C80D6294CF71000263BE5 /* RunnerTests */ = { + isa = PBXGroup; + children = ( + 331C80D7294CF71000263BE5 /* RunnerTests.swift */, + ); + path = RunnerTests; + sourceTree = ""; + }; + 33BA886A226E78AF003329D5 /* Configs */ = { + isa = PBXGroup; + children = ( + 33E5194F232828860026EE4D /* AppInfo.xcconfig */, + 9740EEB21CF90195004384FC /* Debug.xcconfig */, + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, + 333000ED22D3DE5D00554162 /* Warnings.xcconfig */, + ); + path = Configs; + sourceTree = ""; + }; + 33CC10E42044A3C60003C045 = { + isa = PBXGroup; + children = ( + 33FAB671232836740065AC1E /* Runner */, + 33CEB47122A05771004F2AC0 /* Flutter */, + 331C80D6294CF71000263BE5 /* RunnerTests */, + 33CC10EE2044A3C60003C045 /* Products */, + D73912EC22F37F3D000D13A0 /* Frameworks */, + ); + sourceTree = ""; + }; + 33CC10EE2044A3C60003C045 /* Products */ = { + isa = PBXGroup; + children = ( + 33CC10ED2044A3C60003C045 /* quiz.app */, + 331C80D5294CF71000263BE5 /* RunnerTests.xctest */, + ); + name = Products; + sourceTree = ""; + }; + 33CC11242044D66E0003C045 /* Resources */ = { + isa = PBXGroup; + children = ( + 33CC10F22044A3C60003C045 /* Assets.xcassets */, + 33CC10F42044A3C60003C045 /* MainMenu.xib */, + 33CC10F72044A3C60003C045 /* Info.plist */, + ); + name = Resources; + path = ..; + sourceTree = ""; + }; + 33CEB47122A05771004F2AC0 /* Flutter */ = { + isa = PBXGroup; + children = ( + 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */, + 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */, + 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */, + 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */, + ); + path = Flutter; + sourceTree = ""; + }; + 33FAB671232836740065AC1E /* Runner */ = { + isa = PBXGroup; + children = ( + 33CC10F02044A3C60003C045 /* AppDelegate.swift */, + 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */, + 33E51913231747F40026EE4D /* DebugProfile.entitlements */, + 33E51914231749380026EE4D /* Release.entitlements */, + 33CC11242044D66E0003C045 /* Resources */, + 33BA886A226E78AF003329D5 /* Configs */, + ); + path = Runner; + sourceTree = ""; + }; + D73912EC22F37F3D000D13A0 /* Frameworks */ = { + isa = PBXGroup; + children = ( + ); + name = Frameworks; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 331C80D4294CF70F00263BE5 /* RunnerTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; + buildPhases = ( + 331C80D1294CF70F00263BE5 /* Sources */, + 331C80D2294CF70F00263BE5 /* Frameworks */, + 331C80D3294CF70F00263BE5 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 331C80DA294CF71000263BE5 /* PBXTargetDependency */, + ); + name = RunnerTests; + productName = RunnerTests; + productReference = 331C80D5294CF71000263BE5 /* RunnerTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; + 33CC10EC2044A3C60003C045 /* Runner */ = { + isa = PBXNativeTarget; + buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; + buildPhases = ( + 33CC10E92044A3C60003C045 /* Sources */, + 33CC10EA2044A3C60003C045 /* Frameworks */, + 33CC10EB2044A3C60003C045 /* Resources */, + 33CC110E2044A8840003C045 /* Bundle Framework */, + 3399D490228B24CF009A79C7 /* ShellScript */, + ); + buildRules = ( + ); + dependencies = ( + 33CC11202044C79F0003C045 /* PBXTargetDependency */, + ); + name = Runner; + productName = Runner; + productReference = 33CC10ED2044A3C60003C045 /* quiz.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 33CC10E52044A3C60003C045 /* Project object */ = { + isa = PBXProject; + attributes = { + BuildIndependentTargetsInParallel = YES; + LastSwiftUpdateCheck = 0920; + LastUpgradeCheck = 1510; + ORGANIZATIONNAME = ""; + TargetAttributes = { + 331C80D4294CF70F00263BE5 = { + CreatedOnToolsVersion = 14.0; + TestTargetID = 33CC10EC2044A3C60003C045; + }; + 33CC10EC2044A3C60003C045 = { + CreatedOnToolsVersion = 9.2; + LastSwiftMigration = 1100; + ProvisioningStyle = Automatic; + SystemCapabilities = { + com.apple.Sandbox = { + enabled = 1; + }; + }; + }; + 33CC111A2044C6BA0003C045 = { + CreatedOnToolsVersion = 9.2; + ProvisioningStyle = Manual; + }; + }; + }; + buildConfigurationList = 33CC10E82044A3C60003C045 /* Build configuration list for PBXProject "Runner" */; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 33CC10E42044A3C60003C045; + productRefGroup = 33CC10EE2044A3C60003C045 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 33CC10EC2044A3C60003C045 /* Runner */, + 331C80D4294CF70F00263BE5 /* RunnerTests */, + 33CC111A2044C6BA0003C045 /* Flutter Assemble */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 331C80D3294CF70F00263BE5 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 33CC10EB2044A3C60003C045 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */, + 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 3399D490228B24CF009A79C7 /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; + }; + 33CC111E2044C6BF0003C045 /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + Flutter/ephemeral/FlutterInputs.xcfilelist, + ); + inputPaths = ( + Flutter/ephemeral/tripwire, + ); + outputFileListPaths = ( + Flutter/ephemeral/FlutterOutputs.xcfilelist, + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 331C80D1294CF70F00263BE5 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 33CC10E92044A3C60003C045 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */, + 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */, + 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 331C80DA294CF71000263BE5 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 33CC10EC2044A3C60003C045 /* Runner */; + targetProxy = 331C80D9294CF71000263BE5 /* PBXContainerItemProxy */; + }; + 33CC11202044C79F0003C045 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 33CC111A2044C6BA0003C045 /* Flutter Assemble */; + targetProxy = 33CC111F2044C79F0003C045 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + 33CC10F42044A3C60003C045 /* MainMenu.xib */ = { + isa = PBXVariantGroup; + children = ( + 33CC10F52044A3C60003C045 /* Base */, + ); + name = MainMenu.xib; + path = Runner; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 331C80DB294CF71000263BE5 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.quiz.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/quiz.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/quiz"; + }; + name = Debug; + }; + 331C80DC294CF71000263BE5 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.quiz.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/quiz.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/quiz"; + }; + name = Release; + }; + 331C80DD294CF71000263BE5 /* Profile */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.quiz.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/quiz.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/quiz"; + }; + name = Profile; + }; + 338D0CE9231458BD00FA5F75 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + DEAD_CODE_STRIPPING = YES; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.14; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = macosx; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + }; + name = Profile; + }; + 338D0CEA231458BD00FA5F75 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_VERSION = 5.0; + }; + name = Profile; + }; + 338D0CEB231458BD00FA5F75 /* Profile */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Manual; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Profile; + }; + 33CC10F92044A3C60003C045 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + DEAD_CODE_STRIPPING = YES; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.14; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = macosx; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + }; + name = Debug; + }; + 33CC10FA2044A3C60003C045 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + DEAD_CODE_STRIPPING = YES; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.14; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = macosx; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + }; + name = Release; + }; + 33CC10FC2044A3C60003C045 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + }; + name = Debug; + }; + 33CC10FD2044A3C60003C045 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/Release.entitlements; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_VERSION = 5.0; + }; + name = Release; + }; + 33CC111C2044C6BA0003C045 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Manual; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Debug; + }; + 33CC111D2044C6BA0003C045 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Automatic; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 331C80DB294CF71000263BE5 /* Debug */, + 331C80DC294CF71000263BE5 /* Release */, + 331C80DD294CF71000263BE5 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 33CC10E82044A3C60003C045 /* Build configuration list for PBXProject "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 33CC10F92044A3C60003C045 /* Debug */, + 33CC10FA2044A3C60003C045 /* Release */, + 338D0CE9231458BD00FA5F75 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 33CC10FC2044A3C60003C045 /* Debug */, + 33CC10FD2044A3C60003C045 /* Release */, + 338D0CEA231458BD00FA5F75 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 33CC111B2044C6BA0003C045 /* Build configuration list for PBXAggregateTarget "Flutter Assemble" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 33CC111C2044C6BA0003C045 /* Debug */, + 33CC111D2044C6BA0003C045 /* Release */, + 338D0CEB231458BD00FA5F75 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 33CC10E52044A3C60003C045 /* Project object */; +} diff --git a/animations/step_05_d/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/animations/step_05_d/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000000..18d981003d --- /dev/null +++ b/animations/step_05_d/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/animations/step_05_d/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/animations/step_05_d/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme new file mode 100644 index 0000000000..2f413cb17b --- /dev/null +++ b/animations/step_05_d/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -0,0 +1,98 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/animations/step_05_d/macos/Runner.xcworkspace/contents.xcworkspacedata b/animations/step_05_d/macos/Runner.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000000..1d526a16ed --- /dev/null +++ b/animations/step_05_d/macos/Runner.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/animations/step_05_d/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/animations/step_05_d/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000000..18d981003d --- /dev/null +++ b/animations/step_05_d/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/animations/step_05_d/macos/Runner/AppDelegate.swift b/animations/step_05_d/macos/Runner/AppDelegate.swift new file mode 100644 index 0000000000..8e02df2888 --- /dev/null +++ b/animations/step_05_d/macos/Runner/AppDelegate.swift @@ -0,0 +1,9 @@ +import Cocoa +import FlutterMacOS + +@main +class AppDelegate: FlutterAppDelegate { + override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { + return true + } +} diff --git a/animations/step_05_d/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/animations/step_05_d/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000000..a2ec33f19f --- /dev/null +++ b/animations/step_05_d/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,68 @@ +{ + "images" : [ + { + "size" : "16x16", + "idiom" : "mac", + "filename" : "app_icon_16.png", + "scale" : "1x" + }, + { + "size" : "16x16", + "idiom" : "mac", + "filename" : "app_icon_32.png", + "scale" : "2x" + }, + { + "size" : "32x32", + "idiom" : "mac", + "filename" : "app_icon_32.png", + "scale" : "1x" + }, + { + "size" : "32x32", + "idiom" : "mac", + "filename" : "app_icon_64.png", + "scale" : "2x" + }, + { + "size" : "128x128", + "idiom" : "mac", + "filename" : "app_icon_128.png", + "scale" : "1x" + }, + { + "size" : "128x128", + "idiom" : "mac", + "filename" : "app_icon_256.png", + "scale" : "2x" + }, + { + "size" : "256x256", + "idiom" : "mac", + "filename" : "app_icon_256.png", + "scale" : "1x" + }, + { + "size" : "256x256", + "idiom" : "mac", + "filename" : "app_icon_512.png", + "scale" : "2x" + }, + { + "size" : "512x512", + "idiom" : "mac", + "filename" : "app_icon_512.png", + "scale" : "1x" + }, + { + "size" : "512x512", + "idiom" : "mac", + "filename" : "app_icon_1024.png", + "scale" : "2x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} diff --git a/animations/step_05_d/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png b/animations/step_05_d/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png new file mode 100644 index 0000000000000000000000000000000000000000..82b6f9d9a33e198f5747104729e1fcef999772a5 GIT binary patch literal 102994 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ⅅ8MglG&ER{i5lN315cO?EdHNLrg? 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 z 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 Pe7HEdAEg|=c=LY&YVNkY literal 0 HcmV?d00001 diff --git a/animations/step_05_d/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png b/animations/step_05_d/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png new file mode 100644 index 0000000000000000000000000000000000000000..13b35eba55c6dabc3aac36f33d859266c18fa0d0 GIT binary patch literal 5680 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 literal 0 HcmV?d00001 diff --git a/animations/step_05_d/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png b/animations/step_05_d/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png new file mode 100644 index 0000000000000000000000000000000000000000..0a3f5fa40fb3d1e0710331a48de5d256da3f275d GIT binary patch literal 520 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 literal 0 HcmV?d00001 diff --git a/animations/step_05_d/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png b/animations/step_05_d/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png new file mode 100644 index 0000000000000000000000000000000000000000..2f1632cfddf3d9dade342351e627a0a75609fb46 GIT binary patch literal 2218 zcmV;b2vzrqP)Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91K%fHv1ONa40RR91KmY&$07g+lumAuE6iGxuRCodHTWf3-RTMruyW6Fu zQYeUM04eX6D5c0FCjKKPrco1(K`<0SL=crI{PC3-^hZU0kQie$gh-5!7z6SH6Q0J% zqot*`H1q{R5fHFYS}dje@;kG=v$L0(yY0?wY2%*c?A&{2?!D*x?m71{of2gv!$5|C z3>qG_BW}7K_yUcT3A5C6QD<+{aq?x;MAUyAiJn#Jv8_zZtQ{P zTRzbL3U9!qVuZzS$xKU10KiW~Bgdcv1-!uAhQxf3a7q+dU6lj?yoO4Lq4TUN4}h{N z*fIM=SS8|C2$(T>w$`t@3Tka!(r!7W`x z-isCVgQD^mG-MJ;XtJuK3V{Vy72GQ83KRWsHU?e*wrhKk=ApIYeDqLi;JI1e zuvv}5^Dc=k7F7?nm3nIw$NVmU-+R>> zyqOR$-2SDpJ}Pt;^RkJytDVXNTsu|mI1`~G7yw`EJR?VkGfNdqK9^^8P`JdtTV&tX4CNcV4 z&N06nZa??Fw1AgQOUSE2AmPE@WO(Fvo`%m`cDgiv(fAeRA%3AGXUbsGw{7Q`cY;1BI#ac3iN$$Hw z0LT0;xc%=q)me?Y*$xI@GRAw?+}>=9D+KTk??-HJ4=A>`V&vKFS75@MKdSF1JTq{S zc1!^8?YA|t+uKigaq!sT;Z!&0F2=k7F0PIU;F$leJLaw2UI6FL^w}OG&!;+b%ya1c z1n+6-inU<0VM-Y_s5iTElq)ThyF?StVcebpGI znw#+zLx2@ah{$_2jn+@}(zJZ{+}_N9BM;z)0yr|gF-4=Iyu@hI*Lk=-A8f#bAzc9f z`Kd6K--x@t04swJVC3JK1cHY-Hq+=|PN-VO;?^_C#;coU6TDP7Bt`;{JTG;!+jj(` zw5cLQ-(Cz-Tlb`A^w7|R56Ce;Wmr0)$KWOUZ6ai0PhzPeHwdl0H(etP zUV`va_i0s-4#DkNM8lUlqI7>YQLf)(lz9Q3Uw`)nc(z3{m5ZE77Ul$V%m)E}3&8L0 z-XaU|eB~Is08eORPk;=<>!1w)Kf}FOVS2l&9~A+@R#koFJ$Czd%Y(ENTV&A~U(IPI z;UY+gf+&6ioZ=roly<0Yst8ck>(M=S?B-ys3mLdM&)ex!hbt+ol|T6CTS+Sc0jv(& z7ijdvFwBq;0a{%3GGwkDKTeG`b+lyj0jjS1OMkYnepCdoosNY`*zmBIo*981BU%%U z@~$z0V`OVtIbEx5pa|Tct|Lg#ZQf5OYMUMRD>Wdxm5SAqV2}3!ceE-M2 z@O~lQ0OiKQp}o9I;?uxCgYVV?FH|?Riri*U$Zi_`V2eiA>l zdSm6;SEm6#T+SpcE8Ro_f2AwxzI z44hfe^WE3!h@W3RDyA_H440cpmYkv*)6m1XazTqw%=E5Xv7^@^^T7Q2wxr+Z2kVYr + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/animations/step_05_d/macos/Runner/Configs/AppInfo.xcconfig b/animations/step_05_d/macos/Runner/Configs/AppInfo.xcconfig new file mode 100644 index 0000000000..28c7905763 --- /dev/null +++ b/animations/step_05_d/macos/Runner/Configs/AppInfo.xcconfig @@ -0,0 +1,14 @@ +// Application-level settings for the Runner target. +// +// This may be replaced with something auto-generated from metadata (e.g., pubspec.yaml) in the +// future. If not, the values below would default to using the project name when this becomes a +// 'flutter create' template. + +// The application's name. By default this is also the title of the Flutter window. +PRODUCT_NAME = quiz + +// The application's bundle identifier +PRODUCT_BUNDLE_IDENTIFIER = com.example.quiz + +// The copyright displayed in application information +PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved. diff --git a/animations/step_05_d/macos/Runner/Configs/Debug.xcconfig b/animations/step_05_d/macos/Runner/Configs/Debug.xcconfig new file mode 100644 index 0000000000..36b0fd9464 --- /dev/null +++ b/animations/step_05_d/macos/Runner/Configs/Debug.xcconfig @@ -0,0 +1,2 @@ +#include "../../Flutter/Flutter-Debug.xcconfig" +#include "Warnings.xcconfig" diff --git a/animations/step_05_d/macos/Runner/Configs/Release.xcconfig b/animations/step_05_d/macos/Runner/Configs/Release.xcconfig new file mode 100644 index 0000000000..dff4f49561 --- /dev/null +++ b/animations/step_05_d/macos/Runner/Configs/Release.xcconfig @@ -0,0 +1,2 @@ +#include "../../Flutter/Flutter-Release.xcconfig" +#include "Warnings.xcconfig" diff --git a/animations/step_05_d/macos/Runner/Configs/Warnings.xcconfig b/animations/step_05_d/macos/Runner/Configs/Warnings.xcconfig new file mode 100644 index 0000000000..42bcbf4780 --- /dev/null +++ b/animations/step_05_d/macos/Runner/Configs/Warnings.xcconfig @@ -0,0 +1,13 @@ +WARNING_CFLAGS = -Wall -Wconditional-uninitialized -Wnullable-to-nonnull-conversion -Wmissing-method-return-type -Woverlength-strings +GCC_WARN_UNDECLARED_SELECTOR = YES +CLANG_UNDEFINED_BEHAVIOR_SANITIZER_NULLABILITY = YES +CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE +CLANG_WARN__DUPLICATE_METHOD_MATCH = YES +CLANG_WARN_PRAGMA_PACK = YES +CLANG_WARN_STRICT_PROTOTYPES = YES +CLANG_WARN_COMMA = YES +GCC_WARN_STRICT_SELECTOR_MATCH = YES +CLANG_WARN_OBJC_REPEATED_USE_OF_WEAK = YES +CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES +GCC_WARN_SHADOW = YES +CLANG_WARN_UNREACHABLE_CODE = YES diff --git a/animations/step_05_d/macos/Runner/DebugProfile.entitlements b/animations/step_05_d/macos/Runner/DebugProfile.entitlements new file mode 100644 index 0000000000..dddb8a30c8 --- /dev/null +++ b/animations/step_05_d/macos/Runner/DebugProfile.entitlements @@ -0,0 +1,12 @@ + + + + + com.apple.security.app-sandbox + + com.apple.security.cs.allow-jit + + com.apple.security.network.server + + + diff --git a/animations/step_05_d/macos/Runner/Info.plist b/animations/step_05_d/macos/Runner/Info.plist new file mode 100644 index 0000000000..4789daa6a4 --- /dev/null +++ b/animations/step_05_d/macos/Runner/Info.plist @@ -0,0 +1,32 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIconFile + + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + APPL + CFBundleShortVersionString + $(FLUTTER_BUILD_NAME) + CFBundleVersion + $(FLUTTER_BUILD_NUMBER) + LSMinimumSystemVersion + $(MACOSX_DEPLOYMENT_TARGET) + NSHumanReadableCopyright + $(PRODUCT_COPYRIGHT) + NSMainNibFile + MainMenu + NSPrincipalClass + NSApplication + + diff --git a/animations/step_05_d/macos/Runner/MainFlutterWindow.swift b/animations/step_05_d/macos/Runner/MainFlutterWindow.swift new file mode 100644 index 0000000000..3cc05eb234 --- /dev/null +++ b/animations/step_05_d/macos/Runner/MainFlutterWindow.swift @@ -0,0 +1,15 @@ +import Cocoa +import FlutterMacOS + +class MainFlutterWindow: NSWindow { + override func awakeFromNib() { + let flutterViewController = FlutterViewController() + let windowFrame = self.frame + self.contentViewController = flutterViewController + self.setFrame(windowFrame, display: true) + + RegisterGeneratedPlugins(registry: flutterViewController) + + super.awakeFromNib() + } +} diff --git a/animations/step_05_d/macos/Runner/Release.entitlements b/animations/step_05_d/macos/Runner/Release.entitlements new file mode 100644 index 0000000000..852fa1a472 --- /dev/null +++ b/animations/step_05_d/macos/Runner/Release.entitlements @@ -0,0 +1,8 @@ + + + + + com.apple.security.app-sandbox + + + diff --git a/animations/step_05_d/macos/RunnerTests/RunnerTests.swift b/animations/step_05_d/macos/RunnerTests/RunnerTests.swift new file mode 100644 index 0000000000..61f3bd1fc5 --- /dev/null +++ b/animations/step_05_d/macos/RunnerTests/RunnerTests.swift @@ -0,0 +1,12 @@ +import Cocoa +import FlutterMacOS +import XCTest + +class RunnerTests: XCTestCase { + + func testExample() { + // If you add code to the Runner application, consider adding tests here. + // See https://developer.apple.com/documentation/xctest for more information about using XCTest. + } + +} diff --git a/animations/step_05_d/pubspec.yaml b/animations/step_05_d/pubspec.yaml new file mode 100644 index 0000000000..52735dfa55 --- /dev/null +++ b/animations/step_05_d/pubspec.yaml @@ -0,0 +1,21 @@ +name: quiz +description: A quiz app for demonstrating animation effects in Flutter +publish_to: "none" +version: 1.0.0 + +environment: + sdk: ^3.5.1 + +dependencies: + animations: ^2.0.0 + flutter: + sdk: flutter + +dev_dependencies: + flutter_test: + sdk: flutter + flutter_lints: ^4.0.0 + + +flutter: + uses-material-design: true diff --git a/animations/step_05_d/web/favicon.png b/animations/step_05_d/web/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..8aaa46ac1ae21512746f852a42ba87e4165dfdd1 GIT binary patch literal 917 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|I14-?iy0X7 zltGxWVyS%@P(fs7NJL45ua8x7ey(0(N`6wRUPW#JP&EUCO@$SZnVVXYs8ErclUHn2 zVXFjIVFhG^g!Ppaz)DK8ZIvQ?0~DO|i&7O#^-S~(l1AfjnEK zjFOT9D}DX)@^Za$W4-*MbbUihOG|wNBYh(yU7!lx;>x^|#0uTKVr7USFmqf|i<65o z3raHc^AtelCMM;Vme?vOfh>Xph&xL%(-1c06+^uR^q@XSM&D4+Kp$>4P^%3{)XKjo zGZknv$b36P8?Z_gF{nK@`XI}Z90TzwSQO}0J1!f2c(B=V`5aP@1P1a|PZ!4!3&Gl8 zTYqUsf!gYFyJnXpu0!n&N*SYAX-%d(5gVjrHJWqXQshj@!Zm{!01WsQrH~9=kTxW#6SvuapgMqt>$=j#%eyGrQzr zP{L-3gsMA^$I1&gsBAEL+vxi1*Igl=8#8`5?A-T5=z-sk46WA1IUT)AIZHx1rdUrf zVJrJn<74DDw`j)Ki#gt}mIT-Q`XRa2-jQXQoI%w`nb|XblvzK${ZzlV)m-XcwC(od z71_OEC5Bt9GEXosOXaPTYOia#R4ID2TiU~`zVMl08TV_C%DnU4^+HE>9(CE4D6?Fz oujB08i7adh9xk7*FX66dWH6F5TM;?E2b5PlUHx3vIVCg!0Dx9vYXATM literal 0 HcmV?d00001 diff --git a/animations/step_05_d/web/icons/Icon-192.png b/animations/step_05_d/web/icons/Icon-192.png new file mode 100644 index 0000000000000000000000000000000000000000..b749bfef07473333cf1dd31e9eed89862a5d52aa GIT binary patch literal 5292 zcmZ`-2T+sGz6~)*FVZ`aW+(v>MIm&M-g^@e2u-B-DoB?qO+b1Tq<5uCCv>ESfRum& zp%X;f!~1{tzL__3=gjVJ=j=J>+nMj%ncXj1Q(b|Ckbw{Y0FWpt%4y%$uD=Z*c-x~o zE;IoE;xa#7Ll5nj-e4CuXB&G*IM~D21rCP$*xLXAK8rIMCSHuSu%bL&S3)8YI~vyp@KBu9Ph7R_pvKQ@xv>NQ`dZp(u{Z8K3yOB zn7-AR+d2JkW)KiGx0hosml;+eCXp6+w%@STjFY*CJ?udJ64&{BCbuebcuH;}(($@@ znNlgBA@ZXB)mcl9nbX#F!f_5Z=W>0kh|UVWnf!At4V*LQP%*gPdCXd6P@J4Td;!Ur z<2ZLmwr(NG`u#gDEMP19UcSzRTL@HsK+PnIXbVBT@oHm53DZr?~V(0{rsalAfwgo zEh=GviaqkF;}F_5-yA!1u3!gxaR&Mj)hLuj5Q-N-@Lra{%<4ONja8pycD90&>yMB` zchhd>0CsH`^|&TstH-8+R`CfoWqmTTF_0?zDOY`E`b)cVi!$4xA@oO;SyOjJyP^_j zx^@Gdf+w|FW@DMdOi8=4+LJl$#@R&&=UM`)G!y%6ZzQLoSL%*KE8IO0~&5XYR9 z&N)?goEiWA(YoRfT{06&D6Yuu@Qt&XVbuW@COb;>SP9~aRc+z`m`80pB2o%`#{xD@ zI3RAlukL5L>px6b?QW1Ac_0>ew%NM!XB2(H+1Y3AJC?C?O`GGs`331Nd4ZvG~bMo{lh~GeL zSL|tT*fF-HXxXYtfu5z+T5Mx9OdP7J4g%@oeC2FaWO1D{=NvL|DNZ}GO?O3`+H*SI z=grGv=7dL{+oY0eJFGO!Qe(e2F?CHW(i!!XkGo2tUvsQ)I9ev`H&=;`N%Z{L zO?vV%rDv$y(@1Yj@xfr7Kzr<~0{^T8wM80xf7IGQF_S-2c0)0D6b0~yD7BsCy+(zL z#N~%&e4iAwi4F$&dI7x6cE|B{f@lY5epaDh=2-(4N05VO~A zQT3hanGy_&p+7Fb^I#ewGsjyCEUmSCaP6JDB*=_()FgQ(-pZ28-{qx~2foO4%pM9e z*_63RT8XjgiaWY|*xydf;8MKLd{HnfZ2kM%iq}fstImB-K6A79B~YoPVa@tYN@T_$ zea+9)<%?=Fl!kd(Y!G(-o}ko28hg2!MR-o5BEa_72uj7Mrc&{lRh3u2%Y=Xk9^-qa zBPWaD=2qcuJ&@Tf6ue&)4_V*45=zWk@Z}Q?f5)*z)-+E|-yC4fs5CE6L_PH3=zI8p z*Z3!it{1e5_^(sF*v=0{`U9C741&lub89gdhKp|Y8CeC{_{wYK-LSbp{h)b~9^j!s z7e?Y{Z3pZv0J)(VL=g>l;<}xk=T*O5YR|hg0eg4u98f2IrA-MY+StQIuK-(*J6TRR z|IM(%uI~?`wsfyO6Tgmsy1b3a)j6M&-jgUjVg+mP*oTKdHg?5E`!r`7AE_#?Fc)&a z08KCq>Gc=ne{PCbRvs6gVW|tKdcE1#7C4e`M|j$C5EYZ~Y=jUtc zj`+?p4ba3uy7><7wIokM79jPza``{Lx0)zGWg;FW1^NKY+GpEi=rHJ+fVRGfXO zPHV52k?jxei_!YYAw1HIz}y8ZMwdZqU%ESwMn7~t zdI5%B;U7RF=jzRz^NuY9nM)&<%M>x>0(e$GpU9th%rHiZsIT>_qp%V~ILlyt^V`=d z!1+DX@ah?RnB$X!0xpTA0}lN@9V-ePx>wQ?-xrJr^qDlw?#O(RsXeAvM%}rg0NT#t z!CsT;-vB=B87ShG`GwO;OEbeL;a}LIu=&@9cb~Rsx(ZPNQ!NT7H{@j0e(DiLea>QD zPmpe90gEKHEZ8oQ@6%E7k-Ptn#z)b9NbD@_GTxEhbS+}Bb74WUaRy{w;E|MgDAvHw zL)ycgM7mB?XVh^OzbC?LKFMotw3r@i&VdUV%^Efdib)3@soX%vWCbnOyt@Y4swW925@bt45y0HY3YI~BnnzZYrinFy;L?2D3BAL`UQ zEj))+f>H7~g8*VuWQ83EtGcx`hun$QvuurSMg3l4IP8Fe`#C|N6mbYJ=n;+}EQm;< z!!N=5j1aAr_uEnnzrEV%_E|JpTb#1p1*}5!Ce!R@d$EtMR~%9# zd;h8=QGT)KMW2IKu_fA_>p_und#-;Q)p%%l0XZOXQicfX8M~7?8}@U^ihu;mizj)t zgV7wk%n-UOb z#!P5q?Ex+*Kx@*p`o$q8FWL*E^$&1*!gpv?Za$YO~{BHeGY*5%4HXUKa_A~~^d z=E*gf6&+LFF^`j4$T~dR)%{I)T?>@Ma?D!gi9I^HqvjPc3-v~=qpX1Mne@*rzT&Xw zQ9DXsSV@PqpEJO-g4A&L{F&;K6W60D!_vs?Vx!?w27XbEuJJP&);)^+VF1nHqHBWu z^>kI$M9yfOY8~|hZ9WB!q-9u&mKhEcRjlf2nm_@s;0D#c|@ED7NZE% zzR;>P5B{o4fzlfsn3CkBK&`OSb-YNrqx@N#4CK!>bQ(V(D#9|l!e9(%sz~PYk@8zt zPN9oK78&-IL_F zhsk1$6p;GqFbtB^ZHHP+cjMvA0(LqlskbdYE_rda>gvQLTiqOQ1~*7lg%z*&p`Ry& zRcG^DbbPj_jOKHTr8uk^15Boj6>hA2S-QY(W-6!FIq8h$<>MI>PYYRenQDBamO#Fv zAH5&ImqKBDn0v5kb|8i0wFhUBJTpT!rB-`zK)^SNnRmLraZcPYK7b{I@+}wXVdW-{Ps17qdRA3JatEd?rPV z4@}(DAMf5EqXCr4-B+~H1P#;t@O}B)tIJ(W6$LrK&0plTmnPpb1TKn3?f?Kk``?D+ zQ!MFqOX7JbsXfQrz`-M@hq7xlfNz;_B{^wbpG8des56x(Q)H)5eLeDwCrVR}hzr~= zM{yXR6IM?kXxauLza#@#u?Y|o;904HCqF<8yT~~c-xyRc0-vxofnxG^(x%>bj5r}N zyFT+xnn-?B`ohA>{+ZZQem=*Xpqz{=j8i2TAC#x-m;;mo{{sLB_z(UoAqD=A#*juZ zCv=J~i*O8;F}A^Wf#+zx;~3B{57xtoxC&j^ie^?**T`WT2OPRtC`xj~+3Kprn=rVM zVJ|h5ux%S{dO}!mq93}P+h36mZ5aZg1-?vhL$ke1d52qIiXSE(llCr5i=QUS?LIjc zV$4q=-)aaR4wsrQv}^shL5u%6;`uiSEs<1nG^?$kl$^6DL z43CjY`M*p}ew}}3rXc7Xck@k41jx}c;NgEIhKZ*jsBRZUP-x2cm;F1<5$jefl|ppO zmZd%%?gMJ^g9=RZ^#8Mf5aWNVhjAS^|DQO+q$)oeob_&ZLFL(zur$)); zU19yRm)z<4&4-M}7!9+^Wl}Uk?`S$#V2%pQ*SIH5KI-mn%i;Z7-)m$mN9CnI$G7?# zo`zVrUwoSL&_dJ92YhX5TKqaRkfPgC4=Q&=K+;_aDs&OU0&{WFH}kKX6uNQC6%oUH z2DZa1s3%Vtk|bglbxep-w)PbFG!J17`<$g8lVhqD2w;Z0zGsh-r zxZ13G$G<48leNqR!DCVt9)@}(zMI5w6Wo=N zpP1*3DI;~h2WDWgcKn*f!+ORD)f$DZFwgKBafEZmeXQMAsq9sxP9A)7zOYnkHT9JU zRA`umgmP9d6=PHmFIgx=0$(sjb>+0CHG)K@cPG{IxaJ&Ueo8)0RWgV9+gO7+Bl1(F z7!BslJ2MP*PWJ;x)QXbR$6jEr5q3 z(3}F@YO_P1NyTdEXRLU6fp?9V2-S=E+YaeLL{Y)W%6`k7$(EW8EZSA*(+;e5@jgD^I zaJQ2|oCM1n!A&-8`;#RDcZyk*+RPkn_r8?Ak@agHiSp*qFNX)&i21HE?yuZ;-C<3C zwJGd1lx5UzViP7sZJ&|LqH*mryb}y|%AOw+v)yc`qM)03qyyrqhX?ub`Cjwx2PrR! z)_z>5*!*$x1=Qa-0uE7jy0z`>|Ni#X+uV|%_81F7)b+nf%iz=`fF4g5UfHS_?PHbr zB;0$bK@=di?f`dS(j{l3-tSCfp~zUuva+=EWxJcRfp(<$@vd(GigM&~vaYZ0c#BTs z3ijkxMl=vw5AS&DcXQ%eeKt!uKvh2l3W?&3=dBHU=Gz?O!40S&&~ei2vg**c$o;i89~6DVns zG>9a*`k5)NI9|?W!@9>rzJ;9EJ=YlJTx1r1BA?H`LWijk(rTax9(OAu;q4_wTj-yj z1%W4GW&K4T=uEGb+E!>W0SD_C0RR91 literal 0 HcmV?d00001 diff --git a/animations/step_05_d/web/icons/Icon-512.png b/animations/step_05_d/web/icons/Icon-512.png new file mode 100644 index 0000000000000000000000000000000000000000..88cfd48dff1169879ba46840804b412fe02fefd6 GIT binary patch literal 8252 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 literal 0 HcmV?d00001 diff --git a/animations/step_05_d/web/icons/Icon-maskable-192.png b/animations/step_05_d/web/icons/Icon-maskable-192.png new file mode 100644 index 0000000000000000000000000000000000000000..eb9b4d76e525556d5d89141648c724331630325d GIT binary patch literal 5594 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 X>c!)3PgKfL&lX^$Z>Cpu&6)6jvi^Z! literal 0 HcmV?d00001 diff --git a/animations/step_05_d/web/icons/Icon-maskable-512.png b/animations/step_05_d/web/icons/Icon-maskable-512.png new file mode 100644 index 0000000000000000000000000000000000000000..d69c56691fbdb0b7efa65097c7cc1edac12a6d3e GIT binary patch literal 20998 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 MPgg&ebxsLQ025IeI{*Lx literal 0 HcmV?d00001 diff --git a/animations/step_05_d/web/index.html b/animations/step_05_d/web/index.html new file mode 100644 index 0000000000..89656d9a06 --- /dev/null +++ b/animations/step_05_d/web/index.html @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + quiz + + + + + + diff --git a/animations/step_05_d/web/manifest.json b/animations/step_05_d/web/manifest.json new file mode 100644 index 0000000000..467748be48 --- /dev/null +++ b/animations/step_05_d/web/manifest.json @@ -0,0 +1,35 @@ +{ + "name": "quiz", + "short_name": "quiz", + "start_url": ".", + "display": "standalone", + "background_color": "#0175C2", + "theme_color": "#0175C2", + "description": "A new Flutter project.", + "orientation": "portrait-primary", + "prefer_related_applications": false, + "icons": [ + { + "src": "icons/Icon-192.png", + "sizes": "192x192", + "type": "image/png" + }, + { + "src": "icons/Icon-512.png", + "sizes": "512x512", + "type": "image/png" + }, + { + "src": "icons/Icon-maskable-192.png", + "sizes": "192x192", + "type": "image/png", + "purpose": "maskable" + }, + { + "src": "icons/Icon-maskable-512.png", + "sizes": "512x512", + "type": "image/png", + "purpose": "maskable" + } + ] +} diff --git a/animations/step_05_d/windows/.gitignore b/animations/step_05_d/windows/.gitignore new file mode 100644 index 0000000000..d492d0d98c --- /dev/null +++ b/animations/step_05_d/windows/.gitignore @@ -0,0 +1,17 @@ +flutter/ephemeral/ + +# Visual Studio user-specific files. +*.suo +*.user +*.userosscache +*.sln.docstates + +# Visual Studio build-related files. +x64/ +x86/ + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!*.[Cc]ache/ diff --git a/animations/step_05_d/windows/CMakeLists.txt b/animations/step_05_d/windows/CMakeLists.txt new file mode 100644 index 0000000000..e65947e844 --- /dev/null +++ b/animations/step_05_d/windows/CMakeLists.txt @@ -0,0 +1,108 @@ +# Project-level configuration. +cmake_minimum_required(VERSION 3.14) +project(quiz LANGUAGES CXX) + +# The name of the executable created for the application. Change this to change +# the on-disk name of your application. +set(BINARY_NAME "quiz") + +# Explicitly opt in to modern CMake behaviors to avoid warnings with recent +# versions of CMake. +cmake_policy(VERSION 3.14...3.25) + +# Define build configuration option. +get_property(IS_MULTICONFIG GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG) +if(IS_MULTICONFIG) + set(CMAKE_CONFIGURATION_TYPES "Debug;Profile;Release" + CACHE STRING "" FORCE) +else() + if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) + set(CMAKE_BUILD_TYPE "Debug" CACHE + STRING "Flutter build mode" FORCE) + set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS + "Debug" "Profile" "Release") + endif() +endif() +# Define settings for the Profile build mode. +set(CMAKE_EXE_LINKER_FLAGS_PROFILE "${CMAKE_EXE_LINKER_FLAGS_RELEASE}") +set(CMAKE_SHARED_LINKER_FLAGS_PROFILE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE}") +set(CMAKE_C_FLAGS_PROFILE "${CMAKE_C_FLAGS_RELEASE}") +set(CMAKE_CXX_FLAGS_PROFILE "${CMAKE_CXX_FLAGS_RELEASE}") + +# Use Unicode for all projects. +add_definitions(-DUNICODE -D_UNICODE) + +# Compilation settings that should be applied to most targets. +# +# Be cautious about adding new options here, as plugins use this function by +# default. In most cases, you should add new options to specific targets instead +# of modifying this function. +function(APPLY_STANDARD_SETTINGS TARGET) + target_compile_features(${TARGET} PUBLIC cxx_std_17) + target_compile_options(${TARGET} PRIVATE /W4 /WX /wd"4100") + target_compile_options(${TARGET} PRIVATE /EHsc) + target_compile_definitions(${TARGET} PRIVATE "_HAS_EXCEPTIONS=0") + target_compile_definitions(${TARGET} PRIVATE "$<$:_DEBUG>") +endfunction() + +# Flutter library and tool build rules. +set(FLUTTER_MANAGED_DIR "${CMAKE_CURRENT_SOURCE_DIR}/flutter") +add_subdirectory(${FLUTTER_MANAGED_DIR}) + +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") + + +# Generated plugin build rules, which manage building the plugins and adding +# them to the application. +include(flutter/generated_plugins.cmake) + + +# === Installation === +# Support files are copied into place next to the executable, so that it can +# run in place. This is done instead of making a separate bundle (as on Linux) +# so that building and running from within Visual Studio will work. +set(BUILD_BUNDLE_DIR "$") +# Make the "install" step default, as it's required to run. +set(CMAKE_VS_INCLUDE_INSTALL_TO_DEFAULT_BUILD 1) +if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) + set(CMAKE_INSTALL_PREFIX "${BUILD_BUNDLE_DIR}" CACHE PATH "..." FORCE) +endif() + +set(INSTALL_BUNDLE_DATA_DIR "${CMAKE_INSTALL_PREFIX}/data") +set(INSTALL_BUNDLE_LIB_DIR "${CMAKE_INSTALL_PREFIX}") + +install(TARGETS ${BINARY_NAME} RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_ICU_DATA_FILE}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) + +if(PLUGIN_BUNDLED_LIBRARIES) + install(FILES "${PLUGIN_BUNDLED_LIBRARIES}" + DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) +endif() + +# Copy the native assets provided by the build.dart from all packages. +set(NATIVE_ASSETS_DIR "${PROJECT_BUILD_DIR}native_assets/windows/") +install(DIRECTORY "${NATIVE_ASSETS_DIR}" + DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) + +# Fully re-copy the assets directory on each build to avoid having stale files +# from a previous install. +set(FLUTTER_ASSET_DIR_NAME "flutter_assets") +install(CODE " + file(REMOVE_RECURSE \"${INSTALL_BUNDLE_DATA_DIR}/${FLUTTER_ASSET_DIR_NAME}\") + " COMPONENT Runtime) +install(DIRECTORY "${PROJECT_BUILD_DIR}/${FLUTTER_ASSET_DIR_NAME}" + DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" COMPONENT Runtime) + +# Install the AOT library on non-Debug builds only. +install(FILES "${AOT_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" + CONFIGURATIONS Profile;Release + COMPONENT Runtime) diff --git a/animations/step_05_d/windows/flutter/CMakeLists.txt b/animations/step_05_d/windows/flutter/CMakeLists.txt new file mode 100644 index 0000000000..903f4899d6 --- /dev/null +++ b/animations/step_05_d/windows/flutter/CMakeLists.txt @@ -0,0 +1,109 @@ +# This file controls Flutter-level build steps. It should not be edited. +cmake_minimum_required(VERSION 3.14) + +set(EPHEMERAL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/ephemeral") + +# Configuration provided via flutter tool. +include(${EPHEMERAL_DIR}/generated_config.cmake) + +# TODO: Move the rest of this into files in ephemeral. See +# https://github.com/flutter/flutter/issues/57146. +set(WRAPPER_ROOT "${EPHEMERAL_DIR}/cpp_client_wrapper") + +# Set fallback configurations for older versions of the flutter tool. +if (NOT DEFINED FLUTTER_TARGET_PLATFORM) + set(FLUTTER_TARGET_PLATFORM "windows-x64") +endif() + +# === Flutter Library === +set(FLUTTER_LIBRARY "${EPHEMERAL_DIR}/flutter_windows.dll") + +# Published to parent scope for install step. +set(FLUTTER_LIBRARY ${FLUTTER_LIBRARY} PARENT_SCOPE) +set(FLUTTER_ICU_DATA_FILE "${EPHEMERAL_DIR}/icudtl.dat" PARENT_SCOPE) +set(PROJECT_BUILD_DIR "${PROJECT_DIR}/build/" PARENT_SCOPE) +set(AOT_LIBRARY "${PROJECT_DIR}/build/windows/app.so" PARENT_SCOPE) + +list(APPEND FLUTTER_LIBRARY_HEADERS + "flutter_export.h" + "flutter_windows.h" + "flutter_messenger.h" + "flutter_plugin_registrar.h" + "flutter_texture_registrar.h" +) +list(TRANSFORM FLUTTER_LIBRARY_HEADERS PREPEND "${EPHEMERAL_DIR}/") +add_library(flutter INTERFACE) +target_include_directories(flutter INTERFACE + "${EPHEMERAL_DIR}" +) +target_link_libraries(flutter INTERFACE "${FLUTTER_LIBRARY}.lib") +add_dependencies(flutter flutter_assemble) + +# === Wrapper === +list(APPEND CPP_WRAPPER_SOURCES_CORE + "core_implementations.cc" + "standard_codec.cc" +) +list(TRANSFORM CPP_WRAPPER_SOURCES_CORE PREPEND "${WRAPPER_ROOT}/") +list(APPEND CPP_WRAPPER_SOURCES_PLUGIN + "plugin_registrar.cc" +) +list(TRANSFORM CPP_WRAPPER_SOURCES_PLUGIN PREPEND "${WRAPPER_ROOT}/") +list(APPEND CPP_WRAPPER_SOURCES_APP + "flutter_engine.cc" + "flutter_view_controller.cc" +) +list(TRANSFORM CPP_WRAPPER_SOURCES_APP PREPEND "${WRAPPER_ROOT}/") + +# Wrapper sources needed for a plugin. +add_library(flutter_wrapper_plugin STATIC + ${CPP_WRAPPER_SOURCES_CORE} + ${CPP_WRAPPER_SOURCES_PLUGIN} +) +apply_standard_settings(flutter_wrapper_plugin) +set_target_properties(flutter_wrapper_plugin PROPERTIES + POSITION_INDEPENDENT_CODE ON) +set_target_properties(flutter_wrapper_plugin PROPERTIES + CXX_VISIBILITY_PRESET hidden) +target_link_libraries(flutter_wrapper_plugin PUBLIC flutter) +target_include_directories(flutter_wrapper_plugin PUBLIC + "${WRAPPER_ROOT}/include" +) +add_dependencies(flutter_wrapper_plugin flutter_assemble) + +# Wrapper sources needed for the runner. +add_library(flutter_wrapper_app STATIC + ${CPP_WRAPPER_SOURCES_CORE} + ${CPP_WRAPPER_SOURCES_APP} +) +apply_standard_settings(flutter_wrapper_app) +target_link_libraries(flutter_wrapper_app PUBLIC flutter) +target_include_directories(flutter_wrapper_app PUBLIC + "${WRAPPER_ROOT}/include" +) +add_dependencies(flutter_wrapper_app flutter_assemble) + +# === Flutter tool backend === +# _phony_ is a non-existent file to force this command to run every time, +# since currently there's no way to get a full input/output list from the +# flutter tool. +set(PHONY_OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/_phony_") +set_source_files_properties("${PHONY_OUTPUT}" PROPERTIES SYMBOLIC TRUE) +add_custom_command( + OUTPUT ${FLUTTER_LIBRARY} ${FLUTTER_LIBRARY_HEADERS} + ${CPP_WRAPPER_SOURCES_CORE} ${CPP_WRAPPER_SOURCES_PLUGIN} + ${CPP_WRAPPER_SOURCES_APP} + ${PHONY_OUTPUT} + COMMAND ${CMAKE_COMMAND} -E env + ${FLUTTER_TOOL_ENVIRONMENT} + "${FLUTTER_ROOT}/packages/flutter_tools/bin/tool_backend.bat" + ${FLUTTER_TARGET_PLATFORM} $ + VERBATIM +) +add_custom_target(flutter_assemble DEPENDS + "${FLUTTER_LIBRARY}" + ${FLUTTER_LIBRARY_HEADERS} + ${CPP_WRAPPER_SOURCES_CORE} + ${CPP_WRAPPER_SOURCES_PLUGIN} + ${CPP_WRAPPER_SOURCES_APP} +) diff --git a/animations/step_05_d/windows/flutter/generated_plugin_registrant.cc b/animations/step_05_d/windows/flutter/generated_plugin_registrant.cc new file mode 100644 index 0000000000..8b6d4680af --- /dev/null +++ b/animations/step_05_d/windows/flutter/generated_plugin_registrant.cc @@ -0,0 +1,11 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#include "generated_plugin_registrant.h" + + +void RegisterPlugins(flutter::PluginRegistry* registry) { +} diff --git a/animations/step_05_d/windows/flutter/generated_plugin_registrant.h b/animations/step_05_d/windows/flutter/generated_plugin_registrant.h new file mode 100644 index 0000000000..dc139d85a9 --- /dev/null +++ b/animations/step_05_d/windows/flutter/generated_plugin_registrant.h @@ -0,0 +1,15 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#ifndef GENERATED_PLUGIN_REGISTRANT_ +#define GENERATED_PLUGIN_REGISTRANT_ + +#include + +// Registers Flutter plugins. +void RegisterPlugins(flutter::PluginRegistry* registry); + +#endif // GENERATED_PLUGIN_REGISTRANT_ diff --git a/animations/step_05_d/windows/flutter/generated_plugins.cmake b/animations/step_05_d/windows/flutter/generated_plugins.cmake new file mode 100644 index 0000000000..b93c4c30c1 --- /dev/null +++ b/animations/step_05_d/windows/flutter/generated_plugins.cmake @@ -0,0 +1,23 @@ +# +# Generated file, do not edit. +# + +list(APPEND FLUTTER_PLUGIN_LIST +) + +list(APPEND FLUTTER_FFI_PLUGIN_LIST +) + +set(PLUGIN_BUNDLED_LIBRARIES) + +foreach(plugin ${FLUTTER_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${plugin}/windows plugins/${plugin}) + target_link_libraries(${BINARY_NAME} PRIVATE ${plugin}_plugin) + list(APPEND PLUGIN_BUNDLED_LIBRARIES $) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${plugin}_bundled_libraries}) +endforeach(plugin) + +foreach(ffi_plugin ${FLUTTER_FFI_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${ffi_plugin}/windows plugins/${ffi_plugin}) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${ffi_plugin}_bundled_libraries}) +endforeach(ffi_plugin) diff --git a/animations/step_05_d/windows/runner/CMakeLists.txt b/animations/step_05_d/windows/runner/CMakeLists.txt new file mode 100644 index 0000000000..394917c053 --- /dev/null +++ b/animations/step_05_d/windows/runner/CMakeLists.txt @@ -0,0 +1,40 @@ +cmake_minimum_required(VERSION 3.14) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} WIN32 + "flutter_window.cpp" + "main.cpp" + "utils.cpp" + "win32_window.cpp" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" + "Runner.rc" + "runner.exe.manifest" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the build version. +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION=\"${FLUTTER_VERSION}\"") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_MAJOR=${FLUTTER_VERSION_MAJOR}") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_MINOR=${FLUTTER_VERSION_MINOR}") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_PATCH=${FLUTTER_VERSION_PATCH}") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_BUILD=${FLUTTER_VERSION_BUILD}") + +# Disable Windows macros that collide with C++ standard library functions. +target_compile_definitions(${BINARY_NAME} PRIVATE "NOMINMAX") + +# Add dependency libraries and include directories. Add any application-specific +# dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter flutter_wrapper_app) +target_link_libraries(${BINARY_NAME} PRIVATE "dwmapi.lib") +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") + +# Run the Flutter tool portions of the build. This must not be removed. +add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/animations/step_05_d/windows/runner/Runner.rc b/animations/step_05_d/windows/runner/Runner.rc new file mode 100644 index 0000000000..f0d8342b40 --- /dev/null +++ b/animations/step_05_d/windows/runner/Runner.rc @@ -0,0 +1,121 @@ +// Microsoft Visual C++ generated resource script. +// +#pragma code_page(65001) +#include "resource.h" + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#include "winres.h" + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// English (United States) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE +BEGIN + "resource.h\0" +END + +2 TEXTINCLUDE +BEGIN + "#include ""winres.h""\r\n" + "\0" +END + +3 TEXTINCLUDE +BEGIN + "\r\n" + "\0" +END + +#endif // APSTUDIO_INVOKED + + +///////////////////////////////////////////////////////////////////////////// +// +// Icon +// + +// Icon with lowest ID value placed first to ensure application icon +// remains consistent on all systems. +IDI_APP_ICON ICON "resources\\app_icon.ico" + + +///////////////////////////////////////////////////////////////////////////// +// +// Version +// + +#if defined(FLUTTER_VERSION_MAJOR) && defined(FLUTTER_VERSION_MINOR) && defined(FLUTTER_VERSION_PATCH) && defined(FLUTTER_VERSION_BUILD) +#define VERSION_AS_NUMBER FLUTTER_VERSION_MAJOR,FLUTTER_VERSION_MINOR,FLUTTER_VERSION_PATCH,FLUTTER_VERSION_BUILD +#else +#define VERSION_AS_NUMBER 1,0,0,0 +#endif + +#if defined(FLUTTER_VERSION) +#define VERSION_AS_STRING FLUTTER_VERSION +#else +#define VERSION_AS_STRING "1.0.0" +#endif + +VS_VERSION_INFO VERSIONINFO + FILEVERSION VERSION_AS_NUMBER + PRODUCTVERSION VERSION_AS_NUMBER + FILEFLAGSMASK VS_FFI_FILEFLAGSMASK +#ifdef _DEBUG + FILEFLAGS VS_FF_DEBUG +#else + FILEFLAGS 0x0L +#endif + FILEOS VOS__WINDOWS32 + FILETYPE VFT_APP + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904e4" + BEGIN + VALUE "CompanyName", "com.example" "\0" + VALUE "FileDescription", "quiz" "\0" + VALUE "FileVersion", VERSION_AS_STRING "\0" + VALUE "InternalName", "quiz" "\0" + VALUE "LegalCopyright", "Copyright (C) 2024 com.example. All rights reserved." "\0" + VALUE "OriginalFilename", "quiz.exe" "\0" + VALUE "ProductName", "quiz" "\0" + VALUE "ProductVersion", VERSION_AS_STRING "\0" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x409, 1252 + END +END + +#endif // English (United States) resources +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// + + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED diff --git a/animations/step_05_d/windows/runner/flutter_window.cpp b/animations/step_05_d/windows/runner/flutter_window.cpp new file mode 100644 index 0000000000..955ee3038f --- /dev/null +++ b/animations/step_05_d/windows/runner/flutter_window.cpp @@ -0,0 +1,71 @@ +#include "flutter_window.h" + +#include + +#include "flutter/generated_plugin_registrant.h" + +FlutterWindow::FlutterWindow(const flutter::DartProject& project) + : project_(project) {} + +FlutterWindow::~FlutterWindow() {} + +bool FlutterWindow::OnCreate() { + if (!Win32Window::OnCreate()) { + return false; + } + + RECT frame = GetClientArea(); + + // The size here must match the window dimensions to avoid unnecessary surface + // creation / destruction in the startup path. + flutter_controller_ = std::make_unique( + frame.right - frame.left, frame.bottom - frame.top, project_); + // Ensure that basic setup of the controller was successful. + if (!flutter_controller_->engine() || !flutter_controller_->view()) { + return false; + } + RegisterPlugins(flutter_controller_->engine()); + SetChildContent(flutter_controller_->view()->GetNativeWindow()); + + flutter_controller_->engine()->SetNextFrameCallback([&]() { + this->Show(); + }); + + // Flutter can complete the first frame before the "show window" callback is + // registered. The following call ensures a frame is pending to ensure the + // window is shown. It is a no-op if the first frame hasn't completed yet. + flutter_controller_->ForceRedraw(); + + return true; +} + +void FlutterWindow::OnDestroy() { + if (flutter_controller_) { + flutter_controller_ = nullptr; + } + + Win32Window::OnDestroy(); +} + +LRESULT +FlutterWindow::MessageHandler(HWND hwnd, UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept { + // Give Flutter, including plugins, an opportunity to handle window messages. + if (flutter_controller_) { + std::optional result = + flutter_controller_->HandleTopLevelWindowProc(hwnd, message, wparam, + lparam); + if (result) { + return *result; + } + } + + switch (message) { + case WM_FONTCHANGE: + flutter_controller_->engine()->ReloadSystemFonts(); + break; + } + + return Win32Window::MessageHandler(hwnd, message, wparam, lparam); +} diff --git a/animations/step_05_d/windows/runner/flutter_window.h b/animations/step_05_d/windows/runner/flutter_window.h new file mode 100644 index 0000000000..6da0652f05 --- /dev/null +++ b/animations/step_05_d/windows/runner/flutter_window.h @@ -0,0 +1,33 @@ +#ifndef RUNNER_FLUTTER_WINDOW_H_ +#define RUNNER_FLUTTER_WINDOW_H_ + +#include +#include + +#include + +#include "win32_window.h" + +// A window that does nothing but host a Flutter view. +class FlutterWindow : public Win32Window { + public: + // Creates a new FlutterWindow hosting a Flutter view running |project|. + explicit FlutterWindow(const flutter::DartProject& project); + virtual ~FlutterWindow(); + + protected: + // Win32Window: + bool OnCreate() override; + void OnDestroy() override; + LRESULT MessageHandler(HWND window, UINT const message, WPARAM const wparam, + LPARAM const lparam) noexcept override; + + private: + // The project to run. + flutter::DartProject project_; + + // The Flutter instance hosted by this window. + std::unique_ptr flutter_controller_; +}; + +#endif // RUNNER_FLUTTER_WINDOW_H_ diff --git a/animations/step_05_d/windows/runner/main.cpp b/animations/step_05_d/windows/runner/main.cpp new file mode 100644 index 0000000000..cc4e09820c --- /dev/null +++ b/animations/step_05_d/windows/runner/main.cpp @@ -0,0 +1,43 @@ +#include +#include +#include + +#include "flutter_window.h" +#include "utils.h" + +int APIENTRY wWinMain(_In_ HINSTANCE instance, _In_opt_ HINSTANCE prev, + _In_ wchar_t *command_line, _In_ int show_command) { + // Attach to console when present (e.g., 'flutter run') or create a + // new console when running with a debugger. + if (!::AttachConsole(ATTACH_PARENT_PROCESS) && ::IsDebuggerPresent()) { + CreateAndAttachConsole(); + } + + // Initialize COM, so that it is available for use in the library and/or + // plugins. + ::CoInitializeEx(nullptr, COINIT_APARTMENTTHREADED); + + flutter::DartProject project(L"data"); + + std::vector command_line_arguments = + GetCommandLineArguments(); + + project.set_dart_entrypoint_arguments(std::move(command_line_arguments)); + + FlutterWindow window(project); + Win32Window::Point origin(10, 10); + Win32Window::Size size(1280, 720); + if (!window.Create(L"quiz", origin, size)) { + return EXIT_FAILURE; + } + window.SetQuitOnClose(true); + + ::MSG msg; + while (::GetMessage(&msg, nullptr, 0, 0)) { + ::TranslateMessage(&msg); + ::DispatchMessage(&msg); + } + + ::CoUninitialize(); + return EXIT_SUCCESS; +} diff --git a/animations/step_05_d/windows/runner/resource.h b/animations/step_05_d/windows/runner/resource.h new file mode 100644 index 0000000000..66a65d1e4a --- /dev/null +++ b/animations/step_05_d/windows/runner/resource.h @@ -0,0 +1,16 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Visual C++ generated include file. +// Used by Runner.rc +// +#define IDI_APP_ICON 101 + +// Next default values for new objects +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS +#define _APS_NEXT_RESOURCE_VALUE 102 +#define _APS_NEXT_COMMAND_VALUE 40001 +#define _APS_NEXT_CONTROL_VALUE 1001 +#define _APS_NEXT_SYMED_VALUE 101 +#endif +#endif diff --git a/animations/step_05_d/windows/runner/resources/app_icon.ico b/animations/step_05_d/windows/runner/resources/app_icon.ico new file mode 100644 index 0000000000000000000000000000000000000000..c04e20caf6370ebb9253ad831cc31de4a9c965f6 GIT binary patch literal 33772 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 literal 0 HcmV?d00001 diff --git a/animations/step_05_d/windows/runner/runner.exe.manifest b/animations/step_05_d/windows/runner/runner.exe.manifest new file mode 100644 index 0000000000..153653e8d6 --- /dev/null +++ b/animations/step_05_d/windows/runner/runner.exe.manifest @@ -0,0 +1,14 @@ + + + + + PerMonitorV2 + + + + + + + + + diff --git a/animations/step_05_d/windows/runner/utils.cpp b/animations/step_05_d/windows/runner/utils.cpp new file mode 100644 index 0000000000..3a0b46511a --- /dev/null +++ b/animations/step_05_d/windows/runner/utils.cpp @@ -0,0 +1,65 @@ +#include "utils.h" + +#include +#include +#include +#include + +#include + +void CreateAndAttachConsole() { + if (::AllocConsole()) { + FILE *unused; + if (freopen_s(&unused, "CONOUT$", "w", stdout)) { + _dup2(_fileno(stdout), 1); + } + if (freopen_s(&unused, "CONOUT$", "w", stderr)) { + _dup2(_fileno(stdout), 2); + } + std::ios::sync_with_stdio(); + FlutterDesktopResyncOutputStreams(); + } +} + +std::vector GetCommandLineArguments() { + // Convert the UTF-16 command line arguments to UTF-8 for the Engine to use. + int argc; + wchar_t** argv = ::CommandLineToArgvW(::GetCommandLineW(), &argc); + if (argv == nullptr) { + return std::vector(); + } + + std::vector command_line_arguments; + + // Skip the first argument as it's the binary name. + for (int i = 1; i < argc; i++) { + command_line_arguments.push_back(Utf8FromUtf16(argv[i])); + } + + ::LocalFree(argv); + + return command_line_arguments; +} + +std::string Utf8FromUtf16(const wchar_t* utf16_string) { + if (utf16_string == nullptr) { + return std::string(); + } + unsigned int target_length = ::WideCharToMultiByte( + CP_UTF8, WC_ERR_INVALID_CHARS, utf16_string, + -1, nullptr, 0, nullptr, nullptr) + -1; // remove the trailing null character + int input_length = (int)wcslen(utf16_string); + std::string utf8_string; + if (target_length == 0 || target_length > utf8_string.max_size()) { + return utf8_string; + } + utf8_string.resize(target_length); + int converted_length = ::WideCharToMultiByte( + CP_UTF8, WC_ERR_INVALID_CHARS, utf16_string, + input_length, utf8_string.data(), target_length, nullptr, nullptr); + if (converted_length == 0) { + return std::string(); + } + return utf8_string; +} diff --git a/animations/step_05_d/windows/runner/utils.h b/animations/step_05_d/windows/runner/utils.h new file mode 100644 index 0000000000..3879d54755 --- /dev/null +++ b/animations/step_05_d/windows/runner/utils.h @@ -0,0 +1,19 @@ +#ifndef RUNNER_UTILS_H_ +#define RUNNER_UTILS_H_ + +#include +#include + +// Creates a console for the process, and redirects stdout and stderr to +// it for both the runner and the Flutter library. +void CreateAndAttachConsole(); + +// Takes a null-terminated wchar_t* encoded in UTF-16 and returns a std::string +// encoded in UTF-8. Returns an empty std::string on failure. +std::string Utf8FromUtf16(const wchar_t* utf16_string); + +// Gets the command line arguments passed in as a std::vector, +// encoded in UTF-8. Returns an empty std::vector on failure. +std::vector GetCommandLineArguments(); + +#endif // RUNNER_UTILS_H_ diff --git a/animations/step_05_d/windows/runner/win32_window.cpp b/animations/step_05_d/windows/runner/win32_window.cpp new file mode 100644 index 0000000000..60608d0fe5 --- /dev/null +++ b/animations/step_05_d/windows/runner/win32_window.cpp @@ -0,0 +1,288 @@ +#include "win32_window.h" + +#include +#include + +#include "resource.h" + +namespace { + +/// Window attribute that enables dark mode window decorations. +/// +/// Redefined in case the developer's machine has a Windows SDK older than +/// version 10.0.22000.0. +/// See: https://docs.microsoft.com/windows/win32/api/dwmapi/ne-dwmapi-dwmwindowattribute +#ifndef DWMWA_USE_IMMERSIVE_DARK_MODE +#define DWMWA_USE_IMMERSIVE_DARK_MODE 20 +#endif + +constexpr const wchar_t kWindowClassName[] = L"FLUTTER_RUNNER_WIN32_WINDOW"; + +/// Registry key for app theme preference. +/// +/// A value of 0 indicates apps should use dark mode. A non-zero or missing +/// value indicates apps should use light mode. +constexpr const wchar_t kGetPreferredBrightnessRegKey[] = + L"Software\\Microsoft\\Windows\\CurrentVersion\\Themes\\Personalize"; +constexpr const wchar_t kGetPreferredBrightnessRegValue[] = L"AppsUseLightTheme"; + +// The number of Win32Window objects that currently exist. +static int g_active_window_count = 0; + +using EnableNonClientDpiScaling = BOOL __stdcall(HWND hwnd); + +// Scale helper to convert logical scaler values to physical using passed in +// scale factor +int Scale(int source, double scale_factor) { + return static_cast(source * scale_factor); +} + +// Dynamically loads the |EnableNonClientDpiScaling| from the User32 module. +// This API is only needed for PerMonitor V1 awareness mode. +void EnableFullDpiSupportIfAvailable(HWND hwnd) { + HMODULE user32_module = LoadLibraryA("User32.dll"); + if (!user32_module) { + return; + } + auto enable_non_client_dpi_scaling = + reinterpret_cast( + GetProcAddress(user32_module, "EnableNonClientDpiScaling")); + if (enable_non_client_dpi_scaling != nullptr) { + enable_non_client_dpi_scaling(hwnd); + } + FreeLibrary(user32_module); +} + +} // namespace + +// Manages the Win32Window's window class registration. +class WindowClassRegistrar { + public: + ~WindowClassRegistrar() = default; + + // Returns the singleton registrar instance. + static WindowClassRegistrar* GetInstance() { + if (!instance_) { + instance_ = new WindowClassRegistrar(); + } + return instance_; + } + + // Returns the name of the window class, registering the class if it hasn't + // previously been registered. + const wchar_t* GetWindowClass(); + + // Unregisters the window class. Should only be called if there are no + // instances of the window. + void UnregisterWindowClass(); + + private: + WindowClassRegistrar() = default; + + static WindowClassRegistrar* instance_; + + bool class_registered_ = false; +}; + +WindowClassRegistrar* WindowClassRegistrar::instance_ = nullptr; + +const wchar_t* WindowClassRegistrar::GetWindowClass() { + if (!class_registered_) { + WNDCLASS window_class{}; + window_class.hCursor = LoadCursor(nullptr, IDC_ARROW); + window_class.lpszClassName = kWindowClassName; + window_class.style = CS_HREDRAW | CS_VREDRAW; + window_class.cbClsExtra = 0; + window_class.cbWndExtra = 0; + window_class.hInstance = GetModuleHandle(nullptr); + window_class.hIcon = + LoadIcon(window_class.hInstance, MAKEINTRESOURCE(IDI_APP_ICON)); + window_class.hbrBackground = 0; + window_class.lpszMenuName = nullptr; + window_class.lpfnWndProc = Win32Window::WndProc; + RegisterClass(&window_class); + class_registered_ = true; + } + return kWindowClassName; +} + +void WindowClassRegistrar::UnregisterWindowClass() { + UnregisterClass(kWindowClassName, nullptr); + class_registered_ = false; +} + +Win32Window::Win32Window() { + ++g_active_window_count; +} + +Win32Window::~Win32Window() { + --g_active_window_count; + Destroy(); +} + +bool Win32Window::Create(const std::wstring& title, + const Point& origin, + const Size& size) { + Destroy(); + + const wchar_t* window_class = + WindowClassRegistrar::GetInstance()->GetWindowClass(); + + const POINT target_point = {static_cast(origin.x), + static_cast(origin.y)}; + HMONITOR monitor = MonitorFromPoint(target_point, MONITOR_DEFAULTTONEAREST); + UINT dpi = FlutterDesktopGetDpiForMonitor(monitor); + double scale_factor = dpi / 96.0; + + HWND window = CreateWindow( + window_class, title.c_str(), WS_OVERLAPPEDWINDOW, + Scale(origin.x, scale_factor), Scale(origin.y, scale_factor), + Scale(size.width, scale_factor), Scale(size.height, scale_factor), + nullptr, nullptr, GetModuleHandle(nullptr), this); + + if (!window) { + return false; + } + + UpdateTheme(window); + + return OnCreate(); +} + +bool Win32Window::Show() { + return ShowWindow(window_handle_, SW_SHOWNORMAL); +} + +// static +LRESULT CALLBACK Win32Window::WndProc(HWND const window, + UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept { + if (message == WM_NCCREATE) { + auto window_struct = reinterpret_cast(lparam); + SetWindowLongPtr(window, GWLP_USERDATA, + reinterpret_cast(window_struct->lpCreateParams)); + + auto that = static_cast(window_struct->lpCreateParams); + EnableFullDpiSupportIfAvailable(window); + that->window_handle_ = window; + } else if (Win32Window* that = GetThisFromHandle(window)) { + return that->MessageHandler(window, message, wparam, lparam); + } + + return DefWindowProc(window, message, wparam, lparam); +} + +LRESULT +Win32Window::MessageHandler(HWND hwnd, + UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept { + switch (message) { + case WM_DESTROY: + window_handle_ = nullptr; + Destroy(); + if (quit_on_close_) { + PostQuitMessage(0); + } + return 0; + + case WM_DPICHANGED: { + auto newRectSize = reinterpret_cast(lparam); + LONG newWidth = newRectSize->right - newRectSize->left; + LONG newHeight = newRectSize->bottom - newRectSize->top; + + SetWindowPos(hwnd, nullptr, newRectSize->left, newRectSize->top, newWidth, + newHeight, SWP_NOZORDER | SWP_NOACTIVATE); + + return 0; + } + case WM_SIZE: { + RECT rect = GetClientArea(); + if (child_content_ != nullptr) { + // Size and position the child window. + MoveWindow(child_content_, rect.left, rect.top, rect.right - rect.left, + rect.bottom - rect.top, TRUE); + } + return 0; + } + + case WM_ACTIVATE: + if (child_content_ != nullptr) { + SetFocus(child_content_); + } + return 0; + + case WM_DWMCOLORIZATIONCOLORCHANGED: + UpdateTheme(hwnd); + return 0; + } + + return DefWindowProc(window_handle_, message, wparam, lparam); +} + +void Win32Window::Destroy() { + OnDestroy(); + + if (window_handle_) { + DestroyWindow(window_handle_); + window_handle_ = nullptr; + } + if (g_active_window_count == 0) { + WindowClassRegistrar::GetInstance()->UnregisterWindowClass(); + } +} + +Win32Window* Win32Window::GetThisFromHandle(HWND const window) noexcept { + return reinterpret_cast( + GetWindowLongPtr(window, GWLP_USERDATA)); +} + +void Win32Window::SetChildContent(HWND content) { + child_content_ = content; + SetParent(content, window_handle_); + RECT frame = GetClientArea(); + + MoveWindow(content, frame.left, frame.top, frame.right - frame.left, + frame.bottom - frame.top, true); + + SetFocus(child_content_); +} + +RECT Win32Window::GetClientArea() { + RECT frame; + GetClientRect(window_handle_, &frame); + return frame; +} + +HWND Win32Window::GetHandle() { + return window_handle_; +} + +void Win32Window::SetQuitOnClose(bool quit_on_close) { + quit_on_close_ = quit_on_close; +} + +bool Win32Window::OnCreate() { + // No-op; provided for subclasses. + return true; +} + +void Win32Window::OnDestroy() { + // No-op; provided for subclasses. +} + +void Win32Window::UpdateTheme(HWND const window) { + DWORD light_mode; + DWORD light_mode_size = sizeof(light_mode); + LSTATUS result = RegGetValue(HKEY_CURRENT_USER, kGetPreferredBrightnessRegKey, + kGetPreferredBrightnessRegValue, + RRF_RT_REG_DWORD, nullptr, &light_mode, + &light_mode_size); + + if (result == ERROR_SUCCESS) { + BOOL enable_dark_mode = light_mode == 0; + DwmSetWindowAttribute(window, DWMWA_USE_IMMERSIVE_DARK_MODE, + &enable_dark_mode, sizeof(enable_dark_mode)); + } +} diff --git a/animations/step_05_d/windows/runner/win32_window.h b/animations/step_05_d/windows/runner/win32_window.h new file mode 100644 index 0000000000..e901dde684 --- /dev/null +++ b/animations/step_05_d/windows/runner/win32_window.h @@ -0,0 +1,102 @@ +#ifndef RUNNER_WIN32_WINDOW_H_ +#define RUNNER_WIN32_WINDOW_H_ + +#include + +#include +#include +#include + +// A class abstraction for a high DPI-aware Win32 Window. Intended to be +// inherited from by classes that wish to specialize with custom +// rendering and input handling +class Win32Window { + public: + struct Point { + unsigned int x; + unsigned int y; + Point(unsigned int x, unsigned int y) : x(x), y(y) {} + }; + + struct Size { + unsigned int width; + unsigned int height; + Size(unsigned int width, unsigned int height) + : width(width), height(height) {} + }; + + Win32Window(); + virtual ~Win32Window(); + + // Creates a win32 window with |title| that is positioned and sized using + // |origin| and |size|. New windows are created on the default monitor. Window + // sizes are specified to the OS in physical pixels, hence to ensure a + // consistent size this function will scale the inputted width and height as + // as appropriate for the default monitor. The window is invisible until + // |Show| is called. Returns true if the window was created successfully. + bool Create(const std::wstring& title, const Point& origin, const Size& size); + + // Show the current window. Returns true if the window was successfully shown. + bool Show(); + + // Release OS resources associated with window. + void Destroy(); + + // Inserts |content| into the window tree. + void SetChildContent(HWND content); + + // Returns the backing Window handle to enable clients to set icon and other + // window properties. Returns nullptr if the window has been destroyed. + HWND GetHandle(); + + // If true, closing this window will quit the application. + void SetQuitOnClose(bool quit_on_close); + + // Return a RECT representing the bounds of the current client area. + RECT GetClientArea(); + + protected: + // Processes and route salient window messages for mouse handling, + // size change and DPI. Delegates handling of these to member overloads that + // inheriting classes can handle. + virtual LRESULT MessageHandler(HWND window, + UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept; + + // Called when CreateAndShow is called, allowing subclass window-related + // setup. Subclasses should return false if setup fails. + virtual bool OnCreate(); + + // Called when Destroy is called. + virtual void OnDestroy(); + + private: + friend class WindowClassRegistrar; + + // OS callback called by message pump. Handles the WM_NCCREATE message which + // is passed when the non-client area is being created and enables automatic + // non-client DPI scaling so that the non-client area automatically + // responds to changes in DPI. All other messages are handled by + // MessageHandler. + static LRESULT CALLBACK WndProc(HWND const window, + UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept; + + // Retrieves a class instance pointer for |window| + static Win32Window* GetThisFromHandle(HWND const window) noexcept; + + // Update the window frame's theme to match the system theme. + static void UpdateTheme(HWND const window); + + bool quit_on_close_ = false; + + // window handle for top level window. + HWND window_handle_ = nullptr; + + // window handle for hosted content. + HWND child_content_ = nullptr; +}; + +#endif // RUNNER_WIN32_WINDOW_H_ From 3cb135b03ea8c065df895761463cb0ef1f10283c Mon Sep 17 00:00:00 2001 From: Brett Morgan Date: Thu, 14 Nov 2024 14:22:07 +1100 Subject: [PATCH 060/108] Brea up step 5 of `animations` --- animations/step_05_a/.gitignore | 2 ++ animations/step_05_a/linux/CMakeLists.txt | 23 +++------------- .../step_05_a/linux/runner/CMakeLists.txt | 26 +++++++++++++++++++ .../step_05_a/linux/{ => runner}/main.cc | 0 .../linux/{ => runner}/my_application.cc | 6 +++++ .../linux/{ => runner}/my_application.h | 0 .../step_05_a/macos/Runner/AppDelegate.swift | 4 +++ animations/step_05_a/pubspec.yaml | 2 +- animations/step_05_a/web/index.html | 2 +- animations/step_05_b/.gitignore | 2 ++ animations/step_05_b/linux/CMakeLists.txt | 23 +++------------- .../step_05_b/linux/runner/CMakeLists.txt | 26 +++++++++++++++++++ .../step_05_b/linux/{ => runner}/main.cc | 0 .../linux/{ => runner}/my_application.cc | 6 +++++ .../linux/{ => runner}/my_application.h | 0 .../step_05_b/macos/Runner/AppDelegate.swift | 4 +++ animations/step_05_b/pubspec.yaml | 2 +- animations/step_05_b/web/index.html | 2 +- animations/step_05_c/.gitignore | 2 ++ animations/step_05_c/linux/CMakeLists.txt | 23 +++------------- .../step_05_c/linux/runner/CMakeLists.txt | 26 +++++++++++++++++++ .../step_05_c/linux/{ => runner}/main.cc | 0 .../linux/{ => runner}/my_application.cc | 6 +++++ .../linux/{ => runner}/my_application.h | 0 .../step_05_c/macos/Runner/AppDelegate.swift | 4 +++ animations/step_05_c/pubspec.yaml | 2 +- animations/step_05_c/web/index.html | 2 +- animations/step_05_d/.gitignore | 2 ++ animations/step_05_d/linux/CMakeLists.txt | 23 +++------------- .../step_05_d/linux/runner/CMakeLists.txt | 26 +++++++++++++++++++ .../step_05_d/linux/{ => runner}/main.cc | 0 .../linux/{ => runner}/my_application.cc | 6 +++++ .../linux/{ => runner}/my_application.h | 0 .../step_05_d/macos/Runner/AppDelegate.swift | 4 +++ animations/step_05_d/pubspec.yaml | 2 +- animations/step_05_d/web/index.html | 2 +- 36 files changed, 172 insertions(+), 88 deletions(-) create mode 100644 animations/step_05_a/linux/runner/CMakeLists.txt rename animations/step_05_a/linux/{ => runner}/main.cc (100%) rename animations/step_05_a/linux/{ => runner}/my_application.cc (93%) rename animations/step_05_a/linux/{ => runner}/my_application.h (100%) create mode 100644 animations/step_05_b/linux/runner/CMakeLists.txt rename animations/step_05_b/linux/{ => runner}/main.cc (100%) rename animations/step_05_b/linux/{ => runner}/my_application.cc (93%) rename animations/step_05_b/linux/{ => runner}/my_application.h (100%) create mode 100644 animations/step_05_c/linux/runner/CMakeLists.txt rename animations/step_05_c/linux/{ => runner}/main.cc (100%) rename animations/step_05_c/linux/{ => runner}/my_application.cc (93%) rename animations/step_05_c/linux/{ => runner}/my_application.h (100%) create mode 100644 animations/step_05_d/linux/runner/CMakeLists.txt rename animations/step_05_d/linux/{ => runner}/main.cc (100%) rename animations/step_05_d/linux/{ => runner}/my_application.cc (93%) rename animations/step_05_d/linux/{ => runner}/my_application.h (100%) diff --git a/animations/step_05_a/.gitignore b/animations/step_05_a/.gitignore index 29a3a5017f..79c113f9b5 100644 --- a/animations/step_05_a/.gitignore +++ b/animations/step_05_a/.gitignore @@ -5,9 +5,11 @@ *.swp .DS_Store .atom/ +.build/ .buildlog/ .history .svn/ +.swiftpm/ migrate_working_dir/ # IntelliJ related diff --git a/animations/step_05_a/linux/CMakeLists.txt b/animations/step_05_a/linux/CMakeLists.txt index 658be85ac5..7caf822271 100644 --- a/animations/step_05_a/linux/CMakeLists.txt +++ b/animations/step_05_a/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/animations/step_05_a/linux/runner/CMakeLists.txt b/animations/step_05_a/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/animations/step_05_a/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/animations/step_05_a/linux/main.cc b/animations/step_05_a/linux/runner/main.cc similarity index 100% rename from animations/step_05_a/linux/main.cc rename to animations/step_05_a/linux/runner/main.cc diff --git a/animations/step_05_a/linux/my_application.cc b/animations/step_05_a/linux/runner/my_application.cc similarity index 93% rename from animations/step_05_a/linux/my_application.cc rename to animations/step_05_a/linux/runner/my_application.cc index d6ea0e3c5f..0040d7e46c 100644 --- a/animations/step_05_a/linux/my_application.cc +++ b/animations/step_05_a/linux/runner/my_application.cc @@ -117,6 +117,12 @@ static void my_application_class_init(MyApplicationClass* klass) { static void my_application_init(MyApplication* self) {} MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + return MY_APPLICATION(g_object_new(my_application_get_type(), "application-id", APPLICATION_ID, "flags", G_APPLICATION_NON_UNIQUE, diff --git a/animations/step_05_a/linux/my_application.h b/animations/step_05_a/linux/runner/my_application.h similarity index 100% rename from animations/step_05_a/linux/my_application.h rename to animations/step_05_a/linux/runner/my_application.h diff --git a/animations/step_05_a/macos/Runner/AppDelegate.swift b/animations/step_05_a/macos/Runner/AppDelegate.swift index 8e02df2888..b3c1761412 100644 --- a/animations/step_05_a/macos/Runner/AppDelegate.swift +++ b/animations/step_05_a/macos/Runner/AppDelegate.swift @@ -6,4 +6,8 @@ class AppDelegate: FlutterAppDelegate { override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { return true } + + override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { + return true + } } diff --git a/animations/step_05_a/pubspec.yaml b/animations/step_05_a/pubspec.yaml index 52735dfa55..f3328a6945 100644 --- a/animations/step_05_a/pubspec.yaml +++ b/animations/step_05_a/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: "none" version: 1.0.0 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 dependencies: animations: ^2.0.0 diff --git a/animations/step_05_a/web/index.html b/animations/step_05_a/web/index.html index 89656d9a06..ec05768c59 100644 --- a/animations/step_05_a/web/index.html +++ b/animations/step_05_a/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/animations/step_05_b/.gitignore b/animations/step_05_b/.gitignore index 29a3a5017f..79c113f9b5 100644 --- a/animations/step_05_b/.gitignore +++ b/animations/step_05_b/.gitignore @@ -5,9 +5,11 @@ *.swp .DS_Store .atom/ +.build/ .buildlog/ .history .svn/ +.swiftpm/ migrate_working_dir/ # IntelliJ related diff --git a/animations/step_05_b/linux/CMakeLists.txt b/animations/step_05_b/linux/CMakeLists.txt index 658be85ac5..7caf822271 100644 --- a/animations/step_05_b/linux/CMakeLists.txt +++ b/animations/step_05_b/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/animations/step_05_b/linux/runner/CMakeLists.txt b/animations/step_05_b/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/animations/step_05_b/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/animations/step_05_b/linux/main.cc b/animations/step_05_b/linux/runner/main.cc similarity index 100% rename from animations/step_05_b/linux/main.cc rename to animations/step_05_b/linux/runner/main.cc diff --git a/animations/step_05_b/linux/my_application.cc b/animations/step_05_b/linux/runner/my_application.cc similarity index 93% rename from animations/step_05_b/linux/my_application.cc rename to animations/step_05_b/linux/runner/my_application.cc index d6ea0e3c5f..0040d7e46c 100644 --- a/animations/step_05_b/linux/my_application.cc +++ b/animations/step_05_b/linux/runner/my_application.cc @@ -117,6 +117,12 @@ static void my_application_class_init(MyApplicationClass* klass) { static void my_application_init(MyApplication* self) {} MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + return MY_APPLICATION(g_object_new(my_application_get_type(), "application-id", APPLICATION_ID, "flags", G_APPLICATION_NON_UNIQUE, diff --git a/animations/step_05_b/linux/my_application.h b/animations/step_05_b/linux/runner/my_application.h similarity index 100% rename from animations/step_05_b/linux/my_application.h rename to animations/step_05_b/linux/runner/my_application.h diff --git a/animations/step_05_b/macos/Runner/AppDelegate.swift b/animations/step_05_b/macos/Runner/AppDelegate.swift index 8e02df2888..b3c1761412 100644 --- a/animations/step_05_b/macos/Runner/AppDelegate.swift +++ b/animations/step_05_b/macos/Runner/AppDelegate.swift @@ -6,4 +6,8 @@ class AppDelegate: FlutterAppDelegate { override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { return true } + + override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { + return true + } } diff --git a/animations/step_05_b/pubspec.yaml b/animations/step_05_b/pubspec.yaml index 52735dfa55..f3328a6945 100644 --- a/animations/step_05_b/pubspec.yaml +++ b/animations/step_05_b/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: "none" version: 1.0.0 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 dependencies: animations: ^2.0.0 diff --git a/animations/step_05_b/web/index.html b/animations/step_05_b/web/index.html index 89656d9a06..ec05768c59 100644 --- a/animations/step_05_b/web/index.html +++ b/animations/step_05_b/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/animations/step_05_c/.gitignore b/animations/step_05_c/.gitignore index 29a3a5017f..79c113f9b5 100644 --- a/animations/step_05_c/.gitignore +++ b/animations/step_05_c/.gitignore @@ -5,9 +5,11 @@ *.swp .DS_Store .atom/ +.build/ .buildlog/ .history .svn/ +.swiftpm/ migrate_working_dir/ # IntelliJ related diff --git a/animations/step_05_c/linux/CMakeLists.txt b/animations/step_05_c/linux/CMakeLists.txt index 658be85ac5..7caf822271 100644 --- a/animations/step_05_c/linux/CMakeLists.txt +++ b/animations/step_05_c/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/animations/step_05_c/linux/runner/CMakeLists.txt b/animations/step_05_c/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/animations/step_05_c/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/animations/step_05_c/linux/main.cc b/animations/step_05_c/linux/runner/main.cc similarity index 100% rename from animations/step_05_c/linux/main.cc rename to animations/step_05_c/linux/runner/main.cc diff --git a/animations/step_05_c/linux/my_application.cc b/animations/step_05_c/linux/runner/my_application.cc similarity index 93% rename from animations/step_05_c/linux/my_application.cc rename to animations/step_05_c/linux/runner/my_application.cc index d6ea0e3c5f..0040d7e46c 100644 --- a/animations/step_05_c/linux/my_application.cc +++ b/animations/step_05_c/linux/runner/my_application.cc @@ -117,6 +117,12 @@ static void my_application_class_init(MyApplicationClass* klass) { static void my_application_init(MyApplication* self) {} MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + return MY_APPLICATION(g_object_new(my_application_get_type(), "application-id", APPLICATION_ID, "flags", G_APPLICATION_NON_UNIQUE, diff --git a/animations/step_05_c/linux/my_application.h b/animations/step_05_c/linux/runner/my_application.h similarity index 100% rename from animations/step_05_c/linux/my_application.h rename to animations/step_05_c/linux/runner/my_application.h diff --git a/animations/step_05_c/macos/Runner/AppDelegate.swift b/animations/step_05_c/macos/Runner/AppDelegate.swift index 8e02df2888..b3c1761412 100644 --- a/animations/step_05_c/macos/Runner/AppDelegate.swift +++ b/animations/step_05_c/macos/Runner/AppDelegate.swift @@ -6,4 +6,8 @@ class AppDelegate: FlutterAppDelegate { override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { return true } + + override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { + return true + } } diff --git a/animations/step_05_c/pubspec.yaml b/animations/step_05_c/pubspec.yaml index 52735dfa55..f3328a6945 100644 --- a/animations/step_05_c/pubspec.yaml +++ b/animations/step_05_c/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: "none" version: 1.0.0 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 dependencies: animations: ^2.0.0 diff --git a/animations/step_05_c/web/index.html b/animations/step_05_c/web/index.html index 89656d9a06..ec05768c59 100644 --- a/animations/step_05_c/web/index.html +++ b/animations/step_05_c/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/animations/step_05_d/.gitignore b/animations/step_05_d/.gitignore index 29a3a5017f..79c113f9b5 100644 --- a/animations/step_05_d/.gitignore +++ b/animations/step_05_d/.gitignore @@ -5,9 +5,11 @@ *.swp .DS_Store .atom/ +.build/ .buildlog/ .history .svn/ +.swiftpm/ migrate_working_dir/ # IntelliJ related diff --git a/animations/step_05_d/linux/CMakeLists.txt b/animations/step_05_d/linux/CMakeLists.txt index 658be85ac5..7caf822271 100644 --- a/animations/step_05_d/linux/CMakeLists.txt +++ b/animations/step_05_d/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # Project-level configuration. -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change @@ -54,25 +54,8 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/animations/step_05_d/linux/runner/CMakeLists.txt b/animations/step_05_d/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/animations/step_05_d/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/animations/step_05_d/linux/main.cc b/animations/step_05_d/linux/runner/main.cc similarity index 100% rename from animations/step_05_d/linux/main.cc rename to animations/step_05_d/linux/runner/main.cc diff --git a/animations/step_05_d/linux/my_application.cc b/animations/step_05_d/linux/runner/my_application.cc similarity index 93% rename from animations/step_05_d/linux/my_application.cc rename to animations/step_05_d/linux/runner/my_application.cc index d6ea0e3c5f..0040d7e46c 100644 --- a/animations/step_05_d/linux/my_application.cc +++ b/animations/step_05_d/linux/runner/my_application.cc @@ -117,6 +117,12 @@ static void my_application_class_init(MyApplicationClass* klass) { static void my_application_init(MyApplication* self) {} MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + return MY_APPLICATION(g_object_new(my_application_get_type(), "application-id", APPLICATION_ID, "flags", G_APPLICATION_NON_UNIQUE, diff --git a/animations/step_05_d/linux/my_application.h b/animations/step_05_d/linux/runner/my_application.h similarity index 100% rename from animations/step_05_d/linux/my_application.h rename to animations/step_05_d/linux/runner/my_application.h diff --git a/animations/step_05_d/macos/Runner/AppDelegate.swift b/animations/step_05_d/macos/Runner/AppDelegate.swift index 8e02df2888..b3c1761412 100644 --- a/animations/step_05_d/macos/Runner/AppDelegate.swift +++ b/animations/step_05_d/macos/Runner/AppDelegate.swift @@ -6,4 +6,8 @@ class AppDelegate: FlutterAppDelegate { override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { return true } + + override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { + return true + } } diff --git a/animations/step_05_d/pubspec.yaml b/animations/step_05_d/pubspec.yaml index 52735dfa55..f3328a6945 100644 --- a/animations/step_05_d/pubspec.yaml +++ b/animations/step_05_d/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: "none" version: 1.0.0 environment: - sdk: ^3.5.1 + sdk: ^3.6.0-0 dependencies: animations: ^2.0.0 diff --git a/animations/step_05_d/web/index.html b/animations/step_05_d/web/index.html index 89656d9a06..ec05768c59 100644 --- a/animations/step_05_d/web/index.html +++ b/animations/step_05_d/web/index.html @@ -21,7 +21,7 @@ - + From 54f171a8d8aa75147f8dee92f4b93ccd1fa457b8 Mon Sep 17 00:00:00 2001 From: Brett Morgan Date: Thu, 14 Nov 2024 14:50:39 +1100 Subject: [PATCH 061/108] Fixup step 5 of `animations` --- animations/codelab_rebuild.yaml | 33 +++++++++++------------ animations/step_05_a/lib/home_screen.dart | 6 ++--- animations/step_05_b/lib/home_screen.dart | 6 ++--- 3 files changed, 22 insertions(+), 23 deletions(-) diff --git a/animations/codelab_rebuild.yaml b/animations/codelab_rebuild.yaml index e719f7c419..72d60bcdd5 100644 --- a/animations/codelab_rebuild.yaml +++ b/animations/codelab_rebuild.yaml @@ -1002,8 +1002,8 @@ steps: - name: Use PageRouteBuilder path: quiz/lib/home_screen.dart patch-u: | - --- a/animations/step_05/lib/home_screen.dart - +++ b/animations/step_05/lib/home_screen.dart + --- b/animations/step_05_a/lib/home_screen.dart + +++ a/animations/step_05_a/lib/home_screen.dart @@ -26,14 +26,19 @@ class HomeScreen extends StatelessWidget { // Show the question screen to start the game Navigator.push( @@ -1015,9 +1015,9 @@ steps: - ), + PageRouteBuilder( + pageBuilder: (context, animation, secondaryAnimation) { - + return const QuestionScreen(); - + }, transitionsBuilder: - + (context, animation, secondaryAnimation, child) { + + return const QuestionScreen(); + + }, transitionsBuilder: + + (context, animation, secondaryAnimation, child) { + return FadeTransition( + opacity: animation, + child: child, @@ -1039,17 +1039,17 @@ steps: - name: Use package:animations FadeThroughTransition path: quiz/lib/home_screen.dart patch-u: | - --- a/animations/step_05/lib/home_screen.dart - +++ b/animations/step_05/lib/home_screen.dart + --- b/animations/step_05_b/lib/home_screen.dart + +++ a/animations/step_05_b/lib/home_screen.dart @@ -1,3 +1,4 @@ +import 'package:animations/animations.dart'; import 'package:flutter/material.dart'; import 'question_screen.dart'; @@ -31,8 +32,9 @@ class HomeScreen extends StatelessWidget { - return const QuestionScreen(); - }, transitionsBuilder: - (context, animation, secondaryAnimation, child) { + return const QuestionScreen(); + }, transitionsBuilder: + (context, animation, secondaryAnimation, child) { - return FadeTransition( - opacity: animation, + return FadeThroughTransition( @@ -1093,8 +1093,8 @@ steps: - name: Change back to MaterialPageRoute path: quiz/lib/home_screen.dart patch-u: | - --- a/animations/step_05/lib/home_screen.dart - +++ b/animations/step_05/lib/home_screen.dart + --- b/animations/step_05_c/lib/home_screen.dart + +++ a/animations/step_05_c/lib/home_screen.dart @@ -1,4 +1,3 @@ -import 'package:animations/animations.dart'; import 'package:flutter/material.dart'; @@ -1106,16 +1106,15 @@ steps: context, - PageRouteBuilder( - pageBuilder: (context, animation, secondaryAnimation) { - - return const QuestionScreen(); - - }, transitionsBuilder: - - (context, animation, secondaryAnimation, child) { + + MaterialPageRoute(builder: (context) { + return const QuestionScreen(); + - }, transitionsBuilder: + - (context, animation, secondaryAnimation, child) { - return FadeThroughTransition( - animation: animation, - secondaryAnimation: secondaryAnimation, - child: child, - ); - + MaterialPageRoute(builder: (context) { - + return const QuestionScreen(); }), ); }, diff --git a/animations/step_05_a/lib/home_screen.dart b/animations/step_05_a/lib/home_screen.dart index cc49bb89b2..b4858dcfa6 100644 --- a/animations/step_05_a/lib/home_screen.dart +++ b/animations/step_05_a/lib/home_screen.dart @@ -28,9 +28,9 @@ class HomeScreen extends StatelessWidget { context, PageRouteBuilder( pageBuilder: (context, animation, secondaryAnimation) { - return const QuestionScreen(); - }, transitionsBuilder: - (context, animation, secondaryAnimation, child) { + return const QuestionScreen(); + }, transitionsBuilder: + (context, animation, secondaryAnimation, child) { return FadeTransition( opacity: animation, child: child, diff --git a/animations/step_05_b/lib/home_screen.dart b/animations/step_05_b/lib/home_screen.dart index 6e41695236..176a5be333 100644 --- a/animations/step_05_b/lib/home_screen.dart +++ b/animations/step_05_b/lib/home_screen.dart @@ -29,9 +29,9 @@ class HomeScreen extends StatelessWidget { context, PageRouteBuilder( pageBuilder: (context, animation, secondaryAnimation) { - return const QuestionScreen(); - }, transitionsBuilder: - (context, animation, secondaryAnimation, child) { + return const QuestionScreen(); + }, transitionsBuilder: + (context, animation, secondaryAnimation, child) { return FadeThroughTransition( animation: animation, secondaryAnimation: secondaryAnimation, From 4ea91ee2e96c1baa588bd46c2d37a537aa192f64 Mon Sep 17 00:00:00 2001 From: Brett Morgan Date: Thu, 14 Nov 2024 19:23:36 +1100 Subject: [PATCH 062/108] wip --- animations/codelab_rebuild.yaml | 263 ++----- animations/step_05_a/.gitignore | 45 ++ animations/step_05_a/analysis_options.yaml | 13 + animations/step_05_a/android/.gitignore | 13 + .../step_05_a/android/app/build.gradle.kts | 44 ++ .../android/app/src/debug/AndroidManifest.xml | 7 + .../android/app/src/main/AndroidManifest.xml | 45 ++ .../kotlin/com/example/quiz/MainActivity.kt | 5 + .../res/drawable-v21/launch_background.xml | 12 + .../main/res/drawable/launch_background.xml | 12 + .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 544 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 442 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 721 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 1031 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 1443 bytes .../app/src/main/res/values-night/styles.xml | 18 + .../app/src/main/res/values/styles.xml | 18 + .../app/src/profile/AndroidManifest.xml | 7 + animations/step_05_a/android/build.gradle.kts | 21 + .../step_05_a/android/gradle.properties | 3 + .../gradle/wrapper/gradle-wrapper.properties | 5 + .../step_05_a/android/settings.gradle.kts | 25 + animations/step_05_a/ios/.gitignore | 34 + .../ios/Flutter/AppFrameworkInfo.plist | 26 + .../step_05_a/ios/Flutter/Debug.xcconfig | 1 + .../step_05_a/ios/Flutter/Release.xcconfig | 1 + .../ios/Runner.xcodeproj/project.pbxproj | 616 +++++++++++++++ .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/WorkspaceSettings.xcsettings | 8 + .../xcshareddata/xcschemes/Runner.xcscheme | 98 +++ .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/WorkspaceSettings.xcsettings | 8 + .../step_05_a/ios/Runner/AppDelegate.swift | 13 + .../AppIcon.appiconset/Contents.json | 122 +++ .../Icon-App-1024x1024@1x.png | Bin 0 -> 10932 bytes .../AppIcon.appiconset/Icon-App-20x20@1x.png | Bin 0 -> 295 bytes .../AppIcon.appiconset/Icon-App-20x20@2x.png | Bin 0 -> 406 bytes .../AppIcon.appiconset/Icon-App-20x20@3x.png | Bin 0 -> 450 bytes .../AppIcon.appiconset/Icon-App-29x29@1x.png | Bin 0 -> 282 bytes .../AppIcon.appiconset/Icon-App-29x29@2x.png | Bin 0 -> 462 bytes .../AppIcon.appiconset/Icon-App-29x29@3x.png | Bin 0 -> 704 bytes .../AppIcon.appiconset/Icon-App-40x40@1x.png | Bin 0 -> 406 bytes .../AppIcon.appiconset/Icon-App-40x40@2x.png | Bin 0 -> 586 bytes .../AppIcon.appiconset/Icon-App-40x40@3x.png | Bin 0 -> 862 bytes .../AppIcon.appiconset/Icon-App-60x60@2x.png | Bin 0 -> 862 bytes .../AppIcon.appiconset/Icon-App-60x60@3x.png | Bin 0 -> 1674 bytes .../AppIcon.appiconset/Icon-App-76x76@1x.png | Bin 0 -> 762 bytes .../AppIcon.appiconset/Icon-App-76x76@2x.png | Bin 0 -> 1226 bytes .../Icon-App-83.5x83.5@2x.png | Bin 0 -> 1418 bytes .../LaunchImage.imageset/Contents.json | 23 + .../LaunchImage.imageset/LaunchImage.png | Bin 0 -> 68 bytes .../LaunchImage.imageset/LaunchImage@2x.png | Bin 0 -> 68 bytes .../LaunchImage.imageset/LaunchImage@3x.png | Bin 0 -> 68 bytes .../LaunchImage.imageset/README.md | 5 + .../Runner/Base.lproj/LaunchScreen.storyboard | 37 + .../ios/Runner/Base.lproj/Main.storyboard | 26 + animations/step_05_a/ios/Runner/Info.plist | 49 ++ .../ios/Runner/Runner-Bridging-Header.h | 1 + .../ios/RunnerTests/RunnerTests.swift | 12 + animations/step_05_a/lib/flip_effect.dart | 85 +++ animations/step_05_a/lib/home_screen.dart | 49 ++ animations/step_05_a/lib/main.dart | 23 + animations/step_05_a/lib/model.dart | 52 ++ animations/step_05_a/lib/question_screen.dart | 206 +++++ animations/step_05_a/lib/scoreboard.dart | 56 ++ animations/step_05_a/lib/view_model.dart | 43 ++ animations/step_05_a/linux/.gitignore | 1 + animations/step_05_a/linux/CMakeLists.txt | 128 ++++ .../step_05_a/linux/flutter/CMakeLists.txt | 88 +++ .../flutter/generated_plugin_registrant.cc | 11 + .../flutter/generated_plugin_registrant.h | 15 + .../linux/flutter/generated_plugins.cmake | 23 + .../step_05_a/linux/runner/CMakeLists.txt | 26 + animations/step_05_a/linux/runner/main.cc | 6 + .../step_05_a/linux/runner/my_application.cc | 130 ++++ .../step_05_a/linux/runner/my_application.h | 18 + animations/step_05_a/macos/.gitignore | 7 + .../macos/Flutter/Flutter-Debug.xcconfig | 1 + .../macos/Flutter/Flutter-Release.xcconfig | 1 + .../Flutter/GeneratedPluginRegistrant.swift | 10 + .../macos/Runner.xcodeproj/project.pbxproj | 705 ++++++++++++++++++ .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/xcschemes/Runner.xcscheme | 98 +++ .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../step_05_a/macos/Runner/AppDelegate.swift | 13 + .../AppIcon.appiconset/Contents.json | 68 ++ .../AppIcon.appiconset/app_icon_1024.png | Bin 0 -> 102994 bytes .../AppIcon.appiconset/app_icon_128.png | Bin 0 -> 5680 bytes .../AppIcon.appiconset/app_icon_16.png | Bin 0 -> 520 bytes .../AppIcon.appiconset/app_icon_256.png | Bin 0 -> 14142 bytes .../AppIcon.appiconset/app_icon_32.png | Bin 0 -> 1066 bytes .../AppIcon.appiconset/app_icon_512.png | Bin 0 -> 36406 bytes .../AppIcon.appiconset/app_icon_64.png | Bin 0 -> 2218 bytes .../macos/Runner/Base.lproj/MainMenu.xib | 343 +++++++++ .../macos/Runner/Configs/AppInfo.xcconfig | 14 + .../macos/Runner/Configs/Debug.xcconfig | 2 + .../macos/Runner/Configs/Release.xcconfig | 2 + .../macos/Runner/Configs/Warnings.xcconfig | 13 + .../macos/Runner/DebugProfile.entitlements | 12 + animations/step_05_a/macos/Runner/Info.plist | 32 + .../macos/Runner/MainFlutterWindow.swift | 15 + .../macos/Runner/Release.entitlements | 8 + .../macos/RunnerTests/RunnerTests.swift | 12 + animations/step_05_a/pubspec.yaml | 21 + animations/step_05_a/web/favicon.png | Bin 0 -> 917 bytes animations/step_05_a/web/icons/Icon-192.png | Bin 0 -> 5292 bytes animations/step_05_a/web/icons/Icon-512.png | Bin 0 -> 8252 bytes .../step_05_a/web/icons/Icon-maskable-192.png | Bin 0 -> 5594 bytes .../step_05_a/web/icons/Icon-maskable-512.png | Bin 0 -> 20998 bytes animations/step_05_a/web/index.html | 38 + animations/step_05_a/web/manifest.json | 35 + animations/step_05_a/windows/.gitignore | 17 + animations/step_05_a/windows/CMakeLists.txt | 108 +++ .../step_05_a/windows/flutter/CMakeLists.txt | 109 +++ .../flutter/generated_plugin_registrant.cc | 11 + .../flutter/generated_plugin_registrant.h | 15 + .../windows/flutter/generated_plugins.cmake | 23 + .../step_05_a/windows/runner/CMakeLists.txt | 40 + animations/step_05_a/windows/runner/Runner.rc | 121 +++ .../windows/runner/flutter_window.cpp | 71 ++ .../step_05_a/windows/runner/flutter_window.h | 33 + animations/step_05_a/windows/runner/main.cpp | 43 ++ .../step_05_a/windows/runner/resource.h | 16 + .../windows/runner/resources/app_icon.ico | Bin 0 -> 33772 bytes .../windows/runner/runner.exe.manifest | 14 + animations/step_05_a/windows/runner/utils.cpp | 65 ++ animations/step_05_a/windows/runner/utils.h | 19 + .../step_05_a/windows/runner/win32_window.cpp | 288 +++++++ .../step_05_a/windows/runner/win32_window.h | 102 +++ animations/step_05_b/.gitignore | 45 ++ animations/step_05_b/analysis_options.yaml | 13 + animations/step_05_b/android/.gitignore | 13 + .../step_05_b/android/app/build.gradle.kts | 44 ++ .../android/app/src/debug/AndroidManifest.xml | 7 + .../android/app/src/main/AndroidManifest.xml | 45 ++ .../kotlin/com/example/quiz/MainActivity.kt | 5 + .../res/drawable-v21/launch_background.xml | 12 + .../main/res/drawable/launch_background.xml | 12 + .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 544 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 442 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 721 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 1031 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 1443 bytes .../app/src/main/res/values-night/styles.xml | 18 + .../app/src/main/res/values/styles.xml | 18 + .../app/src/profile/AndroidManifest.xml | 7 + animations/step_05_b/android/build.gradle.kts | 21 + .../step_05_b/android/gradle.properties | 3 + .../gradle/wrapper/gradle-wrapper.properties | 5 + .../step_05_b/android/settings.gradle.kts | 25 + animations/step_05_b/ios/.gitignore | 34 + .../ios/Flutter/AppFrameworkInfo.plist | 26 + .../step_05_b/ios/Flutter/Debug.xcconfig | 1 + .../step_05_b/ios/Flutter/Release.xcconfig | 1 + .../ios/Runner.xcodeproj/project.pbxproj | 616 +++++++++++++++ .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/WorkspaceSettings.xcsettings | 8 + .../xcshareddata/xcschemes/Runner.xcscheme | 98 +++ .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/WorkspaceSettings.xcsettings | 8 + .../step_05_b/ios/Runner/AppDelegate.swift | 13 + .../AppIcon.appiconset/Contents.json | 122 +++ .../Icon-App-1024x1024@1x.png | Bin 0 -> 10932 bytes .../AppIcon.appiconset/Icon-App-20x20@1x.png | Bin 0 -> 295 bytes .../AppIcon.appiconset/Icon-App-20x20@2x.png | Bin 0 -> 406 bytes .../AppIcon.appiconset/Icon-App-20x20@3x.png | Bin 0 -> 450 bytes .../AppIcon.appiconset/Icon-App-29x29@1x.png | Bin 0 -> 282 bytes .../AppIcon.appiconset/Icon-App-29x29@2x.png | Bin 0 -> 462 bytes .../AppIcon.appiconset/Icon-App-29x29@3x.png | Bin 0 -> 704 bytes .../AppIcon.appiconset/Icon-App-40x40@1x.png | Bin 0 -> 406 bytes .../AppIcon.appiconset/Icon-App-40x40@2x.png | Bin 0 -> 586 bytes .../AppIcon.appiconset/Icon-App-40x40@3x.png | Bin 0 -> 862 bytes .../AppIcon.appiconset/Icon-App-60x60@2x.png | Bin 0 -> 862 bytes .../AppIcon.appiconset/Icon-App-60x60@3x.png | Bin 0 -> 1674 bytes .../AppIcon.appiconset/Icon-App-76x76@1x.png | Bin 0 -> 762 bytes .../AppIcon.appiconset/Icon-App-76x76@2x.png | Bin 0 -> 1226 bytes .../Icon-App-83.5x83.5@2x.png | Bin 0 -> 1418 bytes .../LaunchImage.imageset/Contents.json | 23 + .../LaunchImage.imageset/LaunchImage.png | Bin 0 -> 68 bytes .../LaunchImage.imageset/LaunchImage@2x.png | Bin 0 -> 68 bytes .../LaunchImage.imageset/LaunchImage@3x.png | Bin 0 -> 68 bytes .../LaunchImage.imageset/README.md | 5 + .../Runner/Base.lproj/LaunchScreen.storyboard | 37 + .../ios/Runner/Base.lproj/Main.storyboard | 26 + animations/step_05_b/ios/Runner/Info.plist | 49 ++ .../ios/Runner/Runner-Bridging-Header.h | 1 + .../ios/RunnerTests/RunnerTests.swift | 12 + animations/step_05_b/lib/flip_effect.dart | 85 +++ animations/step_05_b/lib/home_screen.dart | 54 ++ animations/step_05_b/lib/main.dart | 33 + animations/step_05_b/lib/model.dart | 52 ++ animations/step_05_b/lib/question_screen.dart | 206 +++++ animations/step_05_b/lib/scoreboard.dart | 56 ++ animations/step_05_b/lib/view_model.dart | 43 ++ animations/step_05_b/linux/.gitignore | 1 + animations/step_05_b/linux/CMakeLists.txt | 128 ++++ .../step_05_b/linux/flutter/CMakeLists.txt | 88 +++ .../flutter/generated_plugin_registrant.cc | 11 + .../flutter/generated_plugin_registrant.h | 15 + .../linux/flutter/generated_plugins.cmake | 23 + .../step_05_b/linux/runner/CMakeLists.txt | 26 + animations/step_05_b/linux/runner/main.cc | 6 + .../step_05_b/linux/runner/my_application.cc | 130 ++++ .../step_05_b/linux/runner/my_application.h | 18 + animations/step_05_b/macos/.gitignore | 7 + .../macos/Flutter/Flutter-Debug.xcconfig | 1 + .../macos/Flutter/Flutter-Release.xcconfig | 1 + .../Flutter/GeneratedPluginRegistrant.swift | 10 + .../macos/Runner.xcodeproj/project.pbxproj | 705 ++++++++++++++++++ .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/xcschemes/Runner.xcscheme | 98 +++ .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../step_05_b/macos/Runner/AppDelegate.swift | 13 + .../AppIcon.appiconset/Contents.json | 68 ++ .../AppIcon.appiconset/app_icon_1024.png | Bin 0 -> 102994 bytes .../AppIcon.appiconset/app_icon_128.png | Bin 0 -> 5680 bytes .../AppIcon.appiconset/app_icon_16.png | Bin 0 -> 520 bytes .../AppIcon.appiconset/app_icon_256.png | Bin 0 -> 14142 bytes .../AppIcon.appiconset/app_icon_32.png | Bin 0 -> 1066 bytes .../AppIcon.appiconset/app_icon_512.png | Bin 0 -> 36406 bytes .../AppIcon.appiconset/app_icon_64.png | Bin 0 -> 2218 bytes .../macos/Runner/Base.lproj/MainMenu.xib | 343 +++++++++ .../macos/Runner/Configs/AppInfo.xcconfig | 14 + .../macos/Runner/Configs/Debug.xcconfig | 2 + .../macos/Runner/Configs/Release.xcconfig | 2 + .../macos/Runner/Configs/Warnings.xcconfig | 13 + .../macos/Runner/DebugProfile.entitlements | 12 + animations/step_05_b/macos/Runner/Info.plist | 32 + .../macos/Runner/MainFlutterWindow.swift | 15 + .../macos/Runner/Release.entitlements | 8 + .../macos/RunnerTests/RunnerTests.swift | 12 + animations/step_05_b/pubspec.yaml | 21 + animations/step_05_b/web/favicon.png | Bin 0 -> 917 bytes animations/step_05_b/web/icons/Icon-192.png | Bin 0 -> 5292 bytes animations/step_05_b/web/icons/Icon-512.png | Bin 0 -> 8252 bytes .../step_05_b/web/icons/Icon-maskable-192.png | Bin 0 -> 5594 bytes .../step_05_b/web/icons/Icon-maskable-512.png | Bin 0 -> 20998 bytes animations/step_05_b/web/index.html | 38 + animations/step_05_b/web/manifest.json | 35 + animations/step_05_b/windows/.gitignore | 17 + animations/step_05_b/windows/CMakeLists.txt | 108 +++ .../step_05_b/windows/flutter/CMakeLists.txt | 109 +++ .../flutter/generated_plugin_registrant.cc | 11 + .../flutter/generated_plugin_registrant.h | 15 + .../windows/flutter/generated_plugins.cmake | 23 + .../step_05_b/windows/runner/CMakeLists.txt | 40 + animations/step_05_b/windows/runner/Runner.rc | 121 +++ .../windows/runner/flutter_window.cpp | 71 ++ .../step_05_b/windows/runner/flutter_window.h | 33 + animations/step_05_b/windows/runner/main.cpp | 43 ++ .../step_05_b/windows/runner/resource.h | 16 + .../windows/runner/resources/app_icon.ico | Bin 0 -> 33772 bytes .../windows/runner/runner.exe.manifest | 14 + animations/step_05_b/windows/runner/utils.cpp | 65 ++ animations/step_05_b/windows/runner/utils.h | 19 + .../step_05_b/windows/runner/win32_window.cpp | 288 +++++++ .../step_05_b/windows/runner/win32_window.h | 102 +++ animations/step_05_c/.gitignore | 45 ++ animations/step_05_c/analysis_options.yaml | 13 + animations/step_05_c/android/.gitignore | 13 + .../step_05_c/android/app/build.gradle.kts | 44 ++ .../android/app/src/debug/AndroidManifest.xml | 7 + .../android/app/src/main/AndroidManifest.xml | 45 ++ .../kotlin/com/example/quiz/MainActivity.kt | 5 + .../res/drawable-v21/launch_background.xml | 12 + .../main/res/drawable/launch_background.xml | 12 + .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 544 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 442 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 721 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 1031 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 1443 bytes .../app/src/main/res/values-night/styles.xml | 18 + .../app/src/main/res/values/styles.xml | 18 + .../app/src/profile/AndroidManifest.xml | 7 + animations/step_05_c/android/build.gradle.kts | 21 + .../step_05_c/android/gradle.properties | 3 + .../gradle/wrapper/gradle-wrapper.properties | 5 + .../step_05_c/android/settings.gradle.kts | 25 + animations/step_05_c/ios/.gitignore | 34 + .../ios/Flutter/AppFrameworkInfo.plist | 26 + .../step_05_c/ios/Flutter/Debug.xcconfig | 1 + .../step_05_c/ios/Flutter/Release.xcconfig | 1 + .../ios/Runner.xcodeproj/project.pbxproj | 616 +++++++++++++++ .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/WorkspaceSettings.xcsettings | 8 + .../xcshareddata/xcschemes/Runner.xcscheme | 98 +++ .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/WorkspaceSettings.xcsettings | 8 + .../step_05_c/ios/Runner/AppDelegate.swift | 13 + .../AppIcon.appiconset/Contents.json | 122 +++ .../Icon-App-1024x1024@1x.png | Bin 0 -> 10932 bytes .../AppIcon.appiconset/Icon-App-20x20@1x.png | Bin 0 -> 295 bytes .../AppIcon.appiconset/Icon-App-20x20@2x.png | Bin 0 -> 406 bytes .../AppIcon.appiconset/Icon-App-20x20@3x.png | Bin 0 -> 450 bytes .../AppIcon.appiconset/Icon-App-29x29@1x.png | Bin 0 -> 282 bytes .../AppIcon.appiconset/Icon-App-29x29@2x.png | Bin 0 -> 462 bytes .../AppIcon.appiconset/Icon-App-29x29@3x.png | Bin 0 -> 704 bytes .../AppIcon.appiconset/Icon-App-40x40@1x.png | Bin 0 -> 406 bytes .../AppIcon.appiconset/Icon-App-40x40@2x.png | Bin 0 -> 586 bytes .../AppIcon.appiconset/Icon-App-40x40@3x.png | Bin 0 -> 862 bytes .../AppIcon.appiconset/Icon-App-60x60@2x.png | Bin 0 -> 862 bytes .../AppIcon.appiconset/Icon-App-60x60@3x.png | Bin 0 -> 1674 bytes .../AppIcon.appiconset/Icon-App-76x76@1x.png | Bin 0 -> 762 bytes .../AppIcon.appiconset/Icon-App-76x76@2x.png | Bin 0 -> 1226 bytes .../Icon-App-83.5x83.5@2x.png | Bin 0 -> 1418 bytes .../LaunchImage.imageset/Contents.json | 23 + .../LaunchImage.imageset/LaunchImage.png | Bin 0 -> 68 bytes .../LaunchImage.imageset/LaunchImage@2x.png | Bin 0 -> 68 bytes .../LaunchImage.imageset/LaunchImage@3x.png | Bin 0 -> 68 bytes .../LaunchImage.imageset/README.md | 5 + .../Runner/Base.lproj/LaunchScreen.storyboard | 37 + .../ios/Runner/Base.lproj/Main.storyboard | 26 + animations/step_05_c/ios/Runner/Info.plist | 49 ++ .../ios/Runner/Runner-Bridging-Header.h | 1 + .../ios/RunnerTests/RunnerTests.swift | 12 + animations/step_05_c/lib/flip_effect.dart | 85 +++ animations/step_05_c/lib/home_screen.dart | 41 + animations/step_05_c/lib/main.dart | 33 + animations/step_05_c/lib/model.dart | 52 ++ animations/step_05_c/lib/question_screen.dart | 197 +++++ animations/step_05_c/lib/scoreboard.dart | 56 ++ animations/step_05_c/lib/view_model.dart | 43 ++ animations/step_05_c/linux/.gitignore | 1 + animations/step_05_c/linux/CMakeLists.txt | 128 ++++ .../step_05_c/linux/flutter/CMakeLists.txt | 88 +++ .../flutter/generated_plugin_registrant.cc | 11 + .../flutter/generated_plugin_registrant.h | 15 + .../linux/flutter/generated_plugins.cmake | 23 + .../step_05_c/linux/runner/CMakeLists.txt | 26 + animations/step_05_c/linux/runner/main.cc | 6 + .../step_05_c/linux/runner/my_application.cc | 130 ++++ .../step_05_c/linux/runner/my_application.h | 18 + animations/step_05_c/macos/.gitignore | 7 + .../macos/Flutter/Flutter-Debug.xcconfig | 1 + .../macos/Flutter/Flutter-Release.xcconfig | 1 + .../Flutter/GeneratedPluginRegistrant.swift | 10 + .../macos/Runner.xcodeproj/project.pbxproj | 705 ++++++++++++++++++ .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/xcschemes/Runner.xcscheme | 98 +++ .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../step_05_c/macos/Runner/AppDelegate.swift | 13 + .../AppIcon.appiconset/Contents.json | 68 ++ .../AppIcon.appiconset/app_icon_1024.png | Bin 0 -> 102994 bytes .../AppIcon.appiconset/app_icon_128.png | Bin 0 -> 5680 bytes .../AppIcon.appiconset/app_icon_16.png | Bin 0 -> 520 bytes .../AppIcon.appiconset/app_icon_256.png | Bin 0 -> 14142 bytes .../AppIcon.appiconset/app_icon_32.png | Bin 0 -> 1066 bytes .../AppIcon.appiconset/app_icon_512.png | Bin 0 -> 36406 bytes .../AppIcon.appiconset/app_icon_64.png | Bin 0 -> 2218 bytes .../macos/Runner/Base.lproj/MainMenu.xib | 343 +++++++++ .../macos/Runner/Configs/AppInfo.xcconfig | 14 + .../macos/Runner/Configs/Debug.xcconfig | 2 + .../macos/Runner/Configs/Release.xcconfig | 2 + .../macos/Runner/Configs/Warnings.xcconfig | 13 + .../macos/Runner/DebugProfile.entitlements | 12 + animations/step_05_c/macos/Runner/Info.plist | 32 + .../macos/Runner/MainFlutterWindow.swift | 15 + .../macos/Runner/Release.entitlements | 8 + .../macos/RunnerTests/RunnerTests.swift | 12 + animations/step_05_c/pubspec.yaml | 21 + animations/step_05_c/web/favicon.png | Bin 0 -> 917 bytes animations/step_05_c/web/icons/Icon-192.png | Bin 0 -> 5292 bytes animations/step_05_c/web/icons/Icon-512.png | Bin 0 -> 8252 bytes .../step_05_c/web/icons/Icon-maskable-192.png | Bin 0 -> 5594 bytes .../step_05_c/web/icons/Icon-maskable-512.png | Bin 0 -> 20998 bytes animations/step_05_c/web/index.html | 38 + animations/step_05_c/web/manifest.json | 35 + animations/step_05_c/windows/.gitignore | 17 + animations/step_05_c/windows/CMakeLists.txt | 108 +++ .../step_05_c/windows/flutter/CMakeLists.txt | 109 +++ .../flutter/generated_plugin_registrant.cc | 11 + .../flutter/generated_plugin_registrant.h | 15 + .../windows/flutter/generated_plugins.cmake | 23 + .../step_05_c/windows/runner/CMakeLists.txt | 40 + animations/step_05_c/windows/runner/Runner.rc | 121 +++ .../windows/runner/flutter_window.cpp | 71 ++ .../step_05_c/windows/runner/flutter_window.h | 33 + animations/step_05_c/windows/runner/main.cpp | 43 ++ .../step_05_c/windows/runner/resource.h | 16 + .../windows/runner/resources/app_icon.ico | Bin 0 -> 33772 bytes .../windows/runner/runner.exe.manifest | 14 + animations/step_05_c/windows/runner/utils.cpp | 65 ++ animations/step_05_c/windows/runner/utils.h | 19 + .../step_05_c/windows/runner/win32_window.cpp | 288 +++++++ .../step_05_c/windows/runner/win32_window.h | 102 +++ animations/step_05_d/.gitignore | 45 ++ animations/step_05_d/analysis_options.yaml | 13 + animations/step_05_d/android/.gitignore | 13 + .../step_05_d/android/app/build.gradle.kts | 44 ++ .../android/app/src/debug/AndroidManifest.xml | 7 + .../android/app/src/main/AndroidManifest.xml | 45 ++ .../kotlin/com/example/quiz/MainActivity.kt | 5 + .../res/drawable-v21/launch_background.xml | 12 + .../main/res/drawable/launch_background.xml | 12 + .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 544 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 442 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 721 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 1031 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 1443 bytes .../app/src/main/res/values-night/styles.xml | 18 + .../app/src/main/res/values/styles.xml | 18 + .../app/src/profile/AndroidManifest.xml | 7 + animations/step_05_d/android/build.gradle.kts | 21 + .../step_05_d/android/gradle.properties | 3 + .../gradle/wrapper/gradle-wrapper.properties | 5 + .../step_05_d/android/settings.gradle.kts | 25 + animations/step_05_d/ios/.gitignore | 34 + .../ios/Flutter/AppFrameworkInfo.plist | 26 + .../step_05_d/ios/Flutter/Debug.xcconfig | 1 + .../step_05_d/ios/Flutter/Release.xcconfig | 1 + .../ios/Runner.xcodeproj/project.pbxproj | 616 +++++++++++++++ .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/WorkspaceSettings.xcsettings | 8 + .../xcshareddata/xcschemes/Runner.xcscheme | 98 +++ .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/WorkspaceSettings.xcsettings | 8 + .../step_05_d/ios/Runner/AppDelegate.swift | 13 + .../AppIcon.appiconset/Contents.json | 122 +++ .../Icon-App-1024x1024@1x.png | Bin 0 -> 10932 bytes .../AppIcon.appiconset/Icon-App-20x20@1x.png | Bin 0 -> 295 bytes .../AppIcon.appiconset/Icon-App-20x20@2x.png | Bin 0 -> 406 bytes .../AppIcon.appiconset/Icon-App-20x20@3x.png | Bin 0 -> 450 bytes .../AppIcon.appiconset/Icon-App-29x29@1x.png | Bin 0 -> 282 bytes .../AppIcon.appiconset/Icon-App-29x29@2x.png | Bin 0 -> 462 bytes .../AppIcon.appiconset/Icon-App-29x29@3x.png | Bin 0 -> 704 bytes .../AppIcon.appiconset/Icon-App-40x40@1x.png | Bin 0 -> 406 bytes .../AppIcon.appiconset/Icon-App-40x40@2x.png | Bin 0 -> 586 bytes .../AppIcon.appiconset/Icon-App-40x40@3x.png | Bin 0 -> 862 bytes .../AppIcon.appiconset/Icon-App-60x60@2x.png | Bin 0 -> 862 bytes .../AppIcon.appiconset/Icon-App-60x60@3x.png | Bin 0 -> 1674 bytes .../AppIcon.appiconset/Icon-App-76x76@1x.png | Bin 0 -> 762 bytes .../AppIcon.appiconset/Icon-App-76x76@2x.png | Bin 0 -> 1226 bytes .../Icon-App-83.5x83.5@2x.png | Bin 0 -> 1418 bytes .../LaunchImage.imageset/Contents.json | 23 + .../LaunchImage.imageset/LaunchImage.png | Bin 0 -> 68 bytes .../LaunchImage.imageset/LaunchImage@2x.png | Bin 0 -> 68 bytes .../LaunchImage.imageset/LaunchImage@3x.png | Bin 0 -> 68 bytes .../LaunchImage.imageset/README.md | 5 + .../Runner/Base.lproj/LaunchScreen.storyboard | 37 + .../ios/Runner/Base.lproj/Main.storyboard | 26 + animations/step_05_d/ios/Runner/Info.plist | 49 ++ .../ios/Runner/Runner-Bridging-Header.h | 1 + .../ios/RunnerTests/RunnerTests.swift | 12 + animations/step_05_d/lib/flip_effect.dart | 85 +++ animations/step_05_d/lib/home_screen.dart | 41 + animations/step_05_d/lib/main.dart | 33 + animations/step_05_d/lib/model.dart | 52 ++ animations/step_05_d/lib/question_screen.dart | 245 ++++++ animations/step_05_d/lib/scoreboard.dart | 56 ++ animations/step_05_d/lib/view_model.dart | 43 ++ animations/step_05_d/linux/.gitignore | 1 + animations/step_05_d/linux/CMakeLists.txt | 128 ++++ .../step_05_d/linux/flutter/CMakeLists.txt | 88 +++ .../flutter/generated_plugin_registrant.cc | 11 + .../flutter/generated_plugin_registrant.h | 15 + .../linux/flutter/generated_plugins.cmake | 23 + .../step_05_d/linux/runner/CMakeLists.txt | 26 + animations/step_05_d/linux/runner/main.cc | 6 + .../step_05_d/linux/runner/my_application.cc | 130 ++++ .../step_05_d/linux/runner/my_application.h | 18 + animations/step_05_d/macos/.gitignore | 7 + .../macos/Flutter/Flutter-Debug.xcconfig | 1 + .../macos/Flutter/Flutter-Release.xcconfig | 1 + .../Flutter/GeneratedPluginRegistrant.swift | 10 + .../macos/Runner.xcodeproj/project.pbxproj | 705 ++++++++++++++++++ .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/xcschemes/Runner.xcscheme | 98 +++ .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../step_05_d/macos/Runner/AppDelegate.swift | 13 + .../AppIcon.appiconset/Contents.json | 68 ++ .../AppIcon.appiconset/app_icon_1024.png | Bin 0 -> 102994 bytes .../AppIcon.appiconset/app_icon_128.png | Bin 0 -> 5680 bytes .../AppIcon.appiconset/app_icon_16.png | Bin 0 -> 520 bytes .../AppIcon.appiconset/app_icon_256.png | Bin 0 -> 14142 bytes .../AppIcon.appiconset/app_icon_32.png | Bin 0 -> 1066 bytes .../AppIcon.appiconset/app_icon_512.png | Bin 0 -> 36406 bytes .../AppIcon.appiconset/app_icon_64.png | Bin 0 -> 2218 bytes .../macos/Runner/Base.lproj/MainMenu.xib | 343 +++++++++ .../macos/Runner/Configs/AppInfo.xcconfig | 14 + .../macos/Runner/Configs/Debug.xcconfig | 2 + .../macos/Runner/Configs/Release.xcconfig | 2 + .../macos/Runner/Configs/Warnings.xcconfig | 13 + .../macos/Runner/DebugProfile.entitlements | 12 + animations/step_05_d/macos/Runner/Info.plist | 32 + .../macos/Runner/MainFlutterWindow.swift | 15 + .../macos/Runner/Release.entitlements | 8 + .../macos/RunnerTests/RunnerTests.swift | 12 + animations/step_05_d/pubspec.yaml | 21 + animations/step_05_d/web/favicon.png | Bin 0 -> 917 bytes animations/step_05_d/web/icons/Icon-192.png | Bin 0 -> 5292 bytes animations/step_05_d/web/icons/Icon-512.png | Bin 0 -> 8252 bytes .../step_05_d/web/icons/Icon-maskable-192.png | Bin 0 -> 5594 bytes .../step_05_d/web/icons/Icon-maskable-512.png | Bin 0 -> 20998 bytes animations/step_05_d/web/index.html | 38 + animations/step_05_d/web/manifest.json | 35 + animations/step_05_d/windows/.gitignore | 17 + animations/step_05_d/windows/CMakeLists.txt | 108 +++ .../step_05_d/windows/flutter/CMakeLists.txt | 109 +++ .../flutter/generated_plugin_registrant.cc | 11 + .../flutter/generated_plugin_registrant.h | 15 + .../windows/flutter/generated_plugins.cmake | 23 + .../step_05_d/windows/runner/CMakeLists.txt | 40 + animations/step_05_d/windows/runner/Runner.rc | 121 +++ .../windows/runner/flutter_window.cpp | 71 ++ .../step_05_d/windows/runner/flutter_window.h | 33 + animations/step_05_d/windows/runner/main.cpp | 43 ++ .../step_05_d/windows/runner/resource.h | 16 + .../windows/runner/resources/app_icon.ico | Bin 0 -> 33772 bytes .../windows/runner/runner.exe.manifest | 14 + animations/step_05_d/windows/runner/utils.cpp | 65 ++ animations/step_05_d/windows/runner/utils.h | 19 + .../step_05_d/windows/runner/win32_window.cpp | 288 +++++++ .../step_05_d/windows/runner/win32_window.h | 102 +++ 525 files changed, 19827 insertions(+), 209 deletions(-) create mode 100644 animations/step_05_a/.gitignore create mode 100644 animations/step_05_a/analysis_options.yaml create mode 100644 animations/step_05_a/android/.gitignore create mode 100644 animations/step_05_a/android/app/build.gradle.kts create mode 100644 animations/step_05_a/android/app/src/debug/AndroidManifest.xml create mode 100644 animations/step_05_a/android/app/src/main/AndroidManifest.xml create mode 100644 animations/step_05_a/android/app/src/main/kotlin/com/example/quiz/MainActivity.kt create mode 100644 animations/step_05_a/android/app/src/main/res/drawable-v21/launch_background.xml create mode 100644 animations/step_05_a/android/app/src/main/res/drawable/launch_background.xml create mode 100644 animations/step_05_a/android/app/src/main/res/mipmap-hdpi/ic_launcher.png create mode 100644 animations/step_05_a/android/app/src/main/res/mipmap-mdpi/ic_launcher.png create mode 100644 animations/step_05_a/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png create mode 100644 animations/step_05_a/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 animations/step_05_a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 animations/step_05_a/android/app/src/main/res/values-night/styles.xml create mode 100644 animations/step_05_a/android/app/src/main/res/values/styles.xml create mode 100644 animations/step_05_a/android/app/src/profile/AndroidManifest.xml create mode 100644 animations/step_05_a/android/build.gradle.kts create mode 100644 animations/step_05_a/android/gradle.properties create mode 100644 animations/step_05_a/android/gradle/wrapper/gradle-wrapper.properties create mode 100644 animations/step_05_a/android/settings.gradle.kts create mode 100644 animations/step_05_a/ios/.gitignore create mode 100644 animations/step_05_a/ios/Flutter/AppFrameworkInfo.plist create mode 100644 animations/step_05_a/ios/Flutter/Debug.xcconfig create mode 100644 animations/step_05_a/ios/Flutter/Release.xcconfig create mode 100644 animations/step_05_a/ios/Runner.xcodeproj/project.pbxproj create mode 100644 animations/step_05_a/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 animations/step_05_a/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 animations/step_05_a/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings create mode 100644 animations/step_05_a/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme create mode 100644 animations/step_05_a/ios/Runner.xcworkspace/contents.xcworkspacedata create mode 100644 animations/step_05_a/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 animations/step_05_a/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings create mode 100644 animations/step_05_a/ios/Runner/AppDelegate.swift create mode 100644 animations/step_05_a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 animations/step_05_a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png create mode 100644 animations/step_05_a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png create mode 100644 animations/step_05_a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png create mode 100644 animations/step_05_a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png create mode 100644 animations/step_05_a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png create mode 100644 animations/step_05_a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png create mode 100644 animations/step_05_a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png create mode 100644 animations/step_05_a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png create mode 100644 animations/step_05_a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png create mode 100644 animations/step_05_a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png create mode 100644 animations/step_05_a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png create mode 100644 animations/step_05_a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png create mode 100644 animations/step_05_a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png create mode 100644 animations/step_05_a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png create mode 100644 animations/step_05_a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png create mode 100644 animations/step_05_a/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json create mode 100644 animations/step_05_a/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png create mode 100644 animations/step_05_a/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png create mode 100644 animations/step_05_a/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png create mode 100644 animations/step_05_a/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md create mode 100644 animations/step_05_a/ios/Runner/Base.lproj/LaunchScreen.storyboard create mode 100644 animations/step_05_a/ios/Runner/Base.lproj/Main.storyboard create mode 100644 animations/step_05_a/ios/Runner/Info.plist create mode 100644 animations/step_05_a/ios/Runner/Runner-Bridging-Header.h create mode 100644 animations/step_05_a/ios/RunnerTests/RunnerTests.swift create mode 100644 animations/step_05_a/lib/flip_effect.dart create mode 100644 animations/step_05_a/lib/home_screen.dart create mode 100644 animations/step_05_a/lib/main.dart create mode 100644 animations/step_05_a/lib/model.dart create mode 100644 animations/step_05_a/lib/question_screen.dart create mode 100644 animations/step_05_a/lib/scoreboard.dart create mode 100644 animations/step_05_a/lib/view_model.dart create mode 100644 animations/step_05_a/linux/.gitignore create mode 100644 animations/step_05_a/linux/CMakeLists.txt create mode 100644 animations/step_05_a/linux/flutter/CMakeLists.txt create mode 100644 animations/step_05_a/linux/flutter/generated_plugin_registrant.cc create mode 100644 animations/step_05_a/linux/flutter/generated_plugin_registrant.h create mode 100644 animations/step_05_a/linux/flutter/generated_plugins.cmake create mode 100644 animations/step_05_a/linux/runner/CMakeLists.txt create mode 100644 animations/step_05_a/linux/runner/main.cc create mode 100644 animations/step_05_a/linux/runner/my_application.cc create mode 100644 animations/step_05_a/linux/runner/my_application.h create mode 100644 animations/step_05_a/macos/.gitignore create mode 100644 animations/step_05_a/macos/Flutter/Flutter-Debug.xcconfig create mode 100644 animations/step_05_a/macos/Flutter/Flutter-Release.xcconfig create mode 100644 animations/step_05_a/macos/Flutter/GeneratedPluginRegistrant.swift create mode 100644 animations/step_05_a/macos/Runner.xcodeproj/project.pbxproj create mode 100644 animations/step_05_a/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 animations/step_05_a/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme create mode 100644 animations/step_05_a/macos/Runner.xcworkspace/contents.xcworkspacedata create mode 100644 animations/step_05_a/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 animations/step_05_a/macos/Runner/AppDelegate.swift create mode 100644 animations/step_05_a/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 animations/step_05_a/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png create mode 100644 animations/step_05_a/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png create mode 100644 animations/step_05_a/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png create mode 100644 animations/step_05_a/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png create mode 100644 animations/step_05_a/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png create mode 100644 animations/step_05_a/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png create mode 100644 animations/step_05_a/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png create mode 100644 animations/step_05_a/macos/Runner/Base.lproj/MainMenu.xib create mode 100644 animations/step_05_a/macos/Runner/Configs/AppInfo.xcconfig create mode 100644 animations/step_05_a/macos/Runner/Configs/Debug.xcconfig create mode 100644 animations/step_05_a/macos/Runner/Configs/Release.xcconfig create mode 100644 animations/step_05_a/macos/Runner/Configs/Warnings.xcconfig create mode 100644 animations/step_05_a/macos/Runner/DebugProfile.entitlements create mode 100644 animations/step_05_a/macos/Runner/Info.plist create mode 100644 animations/step_05_a/macos/Runner/MainFlutterWindow.swift create mode 100644 animations/step_05_a/macos/Runner/Release.entitlements create mode 100644 animations/step_05_a/macos/RunnerTests/RunnerTests.swift create mode 100644 animations/step_05_a/pubspec.yaml create mode 100644 animations/step_05_a/web/favicon.png create mode 100644 animations/step_05_a/web/icons/Icon-192.png create mode 100644 animations/step_05_a/web/icons/Icon-512.png create mode 100644 animations/step_05_a/web/icons/Icon-maskable-192.png create mode 100644 animations/step_05_a/web/icons/Icon-maskable-512.png create mode 100644 animations/step_05_a/web/index.html create mode 100644 animations/step_05_a/web/manifest.json create mode 100644 animations/step_05_a/windows/.gitignore create mode 100644 animations/step_05_a/windows/CMakeLists.txt create mode 100644 animations/step_05_a/windows/flutter/CMakeLists.txt create mode 100644 animations/step_05_a/windows/flutter/generated_plugin_registrant.cc create mode 100644 animations/step_05_a/windows/flutter/generated_plugin_registrant.h create mode 100644 animations/step_05_a/windows/flutter/generated_plugins.cmake create mode 100644 animations/step_05_a/windows/runner/CMakeLists.txt create mode 100644 animations/step_05_a/windows/runner/Runner.rc create mode 100644 animations/step_05_a/windows/runner/flutter_window.cpp create mode 100644 animations/step_05_a/windows/runner/flutter_window.h create mode 100644 animations/step_05_a/windows/runner/main.cpp create mode 100644 animations/step_05_a/windows/runner/resource.h create mode 100644 animations/step_05_a/windows/runner/resources/app_icon.ico create mode 100644 animations/step_05_a/windows/runner/runner.exe.manifest create mode 100644 animations/step_05_a/windows/runner/utils.cpp create mode 100644 animations/step_05_a/windows/runner/utils.h create mode 100644 animations/step_05_a/windows/runner/win32_window.cpp create mode 100644 animations/step_05_a/windows/runner/win32_window.h create mode 100644 animations/step_05_b/.gitignore create mode 100644 animations/step_05_b/analysis_options.yaml create mode 100644 animations/step_05_b/android/.gitignore create mode 100644 animations/step_05_b/android/app/build.gradle.kts create mode 100644 animations/step_05_b/android/app/src/debug/AndroidManifest.xml create mode 100644 animations/step_05_b/android/app/src/main/AndroidManifest.xml create mode 100644 animations/step_05_b/android/app/src/main/kotlin/com/example/quiz/MainActivity.kt create mode 100644 animations/step_05_b/android/app/src/main/res/drawable-v21/launch_background.xml create mode 100644 animations/step_05_b/android/app/src/main/res/drawable/launch_background.xml create mode 100644 animations/step_05_b/android/app/src/main/res/mipmap-hdpi/ic_launcher.png create mode 100644 animations/step_05_b/android/app/src/main/res/mipmap-mdpi/ic_launcher.png create mode 100644 animations/step_05_b/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png create mode 100644 animations/step_05_b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 animations/step_05_b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 animations/step_05_b/android/app/src/main/res/values-night/styles.xml create mode 100644 animations/step_05_b/android/app/src/main/res/values/styles.xml create mode 100644 animations/step_05_b/android/app/src/profile/AndroidManifest.xml create mode 100644 animations/step_05_b/android/build.gradle.kts create mode 100644 animations/step_05_b/android/gradle.properties create mode 100644 animations/step_05_b/android/gradle/wrapper/gradle-wrapper.properties create mode 100644 animations/step_05_b/android/settings.gradle.kts create mode 100644 animations/step_05_b/ios/.gitignore create mode 100644 animations/step_05_b/ios/Flutter/AppFrameworkInfo.plist create mode 100644 animations/step_05_b/ios/Flutter/Debug.xcconfig create mode 100644 animations/step_05_b/ios/Flutter/Release.xcconfig create mode 100644 animations/step_05_b/ios/Runner.xcodeproj/project.pbxproj create mode 100644 animations/step_05_b/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 animations/step_05_b/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 animations/step_05_b/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings create mode 100644 animations/step_05_b/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme create mode 100644 animations/step_05_b/ios/Runner.xcworkspace/contents.xcworkspacedata create mode 100644 animations/step_05_b/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 animations/step_05_b/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings create mode 100644 animations/step_05_b/ios/Runner/AppDelegate.swift create mode 100644 animations/step_05_b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 animations/step_05_b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png create mode 100644 animations/step_05_b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png create mode 100644 animations/step_05_b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png create mode 100644 animations/step_05_b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png create mode 100644 animations/step_05_b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png create mode 100644 animations/step_05_b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png create mode 100644 animations/step_05_b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png create mode 100644 animations/step_05_b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png create mode 100644 animations/step_05_b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png create mode 100644 animations/step_05_b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png create mode 100644 animations/step_05_b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png create mode 100644 animations/step_05_b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png create mode 100644 animations/step_05_b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png create mode 100644 animations/step_05_b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png create mode 100644 animations/step_05_b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png create mode 100644 animations/step_05_b/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json create mode 100644 animations/step_05_b/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png create mode 100644 animations/step_05_b/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png create mode 100644 animations/step_05_b/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png create mode 100644 animations/step_05_b/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md create mode 100644 animations/step_05_b/ios/Runner/Base.lproj/LaunchScreen.storyboard create mode 100644 animations/step_05_b/ios/Runner/Base.lproj/Main.storyboard create mode 100644 animations/step_05_b/ios/Runner/Info.plist create mode 100644 animations/step_05_b/ios/Runner/Runner-Bridging-Header.h create mode 100644 animations/step_05_b/ios/RunnerTests/RunnerTests.swift create mode 100644 animations/step_05_b/lib/flip_effect.dart create mode 100644 animations/step_05_b/lib/home_screen.dart create mode 100644 animations/step_05_b/lib/main.dart create mode 100644 animations/step_05_b/lib/model.dart create mode 100644 animations/step_05_b/lib/question_screen.dart create mode 100644 animations/step_05_b/lib/scoreboard.dart create mode 100644 animations/step_05_b/lib/view_model.dart create mode 100644 animations/step_05_b/linux/.gitignore create mode 100644 animations/step_05_b/linux/CMakeLists.txt create mode 100644 animations/step_05_b/linux/flutter/CMakeLists.txt create mode 100644 animations/step_05_b/linux/flutter/generated_plugin_registrant.cc create mode 100644 animations/step_05_b/linux/flutter/generated_plugin_registrant.h create mode 100644 animations/step_05_b/linux/flutter/generated_plugins.cmake create mode 100644 animations/step_05_b/linux/runner/CMakeLists.txt create mode 100644 animations/step_05_b/linux/runner/main.cc create mode 100644 animations/step_05_b/linux/runner/my_application.cc create mode 100644 animations/step_05_b/linux/runner/my_application.h create mode 100644 animations/step_05_b/macos/.gitignore create mode 100644 animations/step_05_b/macos/Flutter/Flutter-Debug.xcconfig create mode 100644 animations/step_05_b/macos/Flutter/Flutter-Release.xcconfig create mode 100644 animations/step_05_b/macos/Flutter/GeneratedPluginRegistrant.swift create mode 100644 animations/step_05_b/macos/Runner.xcodeproj/project.pbxproj create mode 100644 animations/step_05_b/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 animations/step_05_b/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme create mode 100644 animations/step_05_b/macos/Runner.xcworkspace/contents.xcworkspacedata create mode 100644 animations/step_05_b/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 animations/step_05_b/macos/Runner/AppDelegate.swift create mode 100644 animations/step_05_b/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 animations/step_05_b/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png create mode 100644 animations/step_05_b/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png create mode 100644 animations/step_05_b/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png create mode 100644 animations/step_05_b/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png create mode 100644 animations/step_05_b/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png create mode 100644 animations/step_05_b/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png create mode 100644 animations/step_05_b/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png create mode 100644 animations/step_05_b/macos/Runner/Base.lproj/MainMenu.xib create mode 100644 animations/step_05_b/macos/Runner/Configs/AppInfo.xcconfig create mode 100644 animations/step_05_b/macos/Runner/Configs/Debug.xcconfig create mode 100644 animations/step_05_b/macos/Runner/Configs/Release.xcconfig create mode 100644 animations/step_05_b/macos/Runner/Configs/Warnings.xcconfig create mode 100644 animations/step_05_b/macos/Runner/DebugProfile.entitlements create mode 100644 animations/step_05_b/macos/Runner/Info.plist create mode 100644 animations/step_05_b/macos/Runner/MainFlutterWindow.swift create mode 100644 animations/step_05_b/macos/Runner/Release.entitlements create mode 100644 animations/step_05_b/macos/RunnerTests/RunnerTests.swift create mode 100644 animations/step_05_b/pubspec.yaml create mode 100644 animations/step_05_b/web/favicon.png create mode 100644 animations/step_05_b/web/icons/Icon-192.png create mode 100644 animations/step_05_b/web/icons/Icon-512.png create mode 100644 animations/step_05_b/web/icons/Icon-maskable-192.png create mode 100644 animations/step_05_b/web/icons/Icon-maskable-512.png create mode 100644 animations/step_05_b/web/index.html create mode 100644 animations/step_05_b/web/manifest.json create mode 100644 animations/step_05_b/windows/.gitignore create mode 100644 animations/step_05_b/windows/CMakeLists.txt create mode 100644 animations/step_05_b/windows/flutter/CMakeLists.txt create mode 100644 animations/step_05_b/windows/flutter/generated_plugin_registrant.cc create mode 100644 animations/step_05_b/windows/flutter/generated_plugin_registrant.h create mode 100644 animations/step_05_b/windows/flutter/generated_plugins.cmake create mode 100644 animations/step_05_b/windows/runner/CMakeLists.txt create mode 100644 animations/step_05_b/windows/runner/Runner.rc create mode 100644 animations/step_05_b/windows/runner/flutter_window.cpp create mode 100644 animations/step_05_b/windows/runner/flutter_window.h create mode 100644 animations/step_05_b/windows/runner/main.cpp create mode 100644 animations/step_05_b/windows/runner/resource.h create mode 100644 animations/step_05_b/windows/runner/resources/app_icon.ico create mode 100644 animations/step_05_b/windows/runner/runner.exe.manifest create mode 100644 animations/step_05_b/windows/runner/utils.cpp create mode 100644 animations/step_05_b/windows/runner/utils.h create mode 100644 animations/step_05_b/windows/runner/win32_window.cpp create mode 100644 animations/step_05_b/windows/runner/win32_window.h create mode 100644 animations/step_05_c/.gitignore create mode 100644 animations/step_05_c/analysis_options.yaml create mode 100644 animations/step_05_c/android/.gitignore create mode 100644 animations/step_05_c/android/app/build.gradle.kts create mode 100644 animations/step_05_c/android/app/src/debug/AndroidManifest.xml create mode 100644 animations/step_05_c/android/app/src/main/AndroidManifest.xml create mode 100644 animations/step_05_c/android/app/src/main/kotlin/com/example/quiz/MainActivity.kt create mode 100644 animations/step_05_c/android/app/src/main/res/drawable-v21/launch_background.xml create mode 100644 animations/step_05_c/android/app/src/main/res/drawable/launch_background.xml create mode 100644 animations/step_05_c/android/app/src/main/res/mipmap-hdpi/ic_launcher.png create mode 100644 animations/step_05_c/android/app/src/main/res/mipmap-mdpi/ic_launcher.png create mode 100644 animations/step_05_c/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png create mode 100644 animations/step_05_c/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 animations/step_05_c/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 animations/step_05_c/android/app/src/main/res/values-night/styles.xml create mode 100644 animations/step_05_c/android/app/src/main/res/values/styles.xml create mode 100644 animations/step_05_c/android/app/src/profile/AndroidManifest.xml create mode 100644 animations/step_05_c/android/build.gradle.kts create mode 100644 animations/step_05_c/android/gradle.properties create mode 100644 animations/step_05_c/android/gradle/wrapper/gradle-wrapper.properties create mode 100644 animations/step_05_c/android/settings.gradle.kts create mode 100644 animations/step_05_c/ios/.gitignore create mode 100644 animations/step_05_c/ios/Flutter/AppFrameworkInfo.plist create mode 100644 animations/step_05_c/ios/Flutter/Debug.xcconfig create mode 100644 animations/step_05_c/ios/Flutter/Release.xcconfig create mode 100644 animations/step_05_c/ios/Runner.xcodeproj/project.pbxproj create mode 100644 animations/step_05_c/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 animations/step_05_c/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 animations/step_05_c/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings create mode 100644 animations/step_05_c/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme create mode 100644 animations/step_05_c/ios/Runner.xcworkspace/contents.xcworkspacedata create mode 100644 animations/step_05_c/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 animations/step_05_c/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings create mode 100644 animations/step_05_c/ios/Runner/AppDelegate.swift create mode 100644 animations/step_05_c/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 animations/step_05_c/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png create mode 100644 animations/step_05_c/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png create mode 100644 animations/step_05_c/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png create mode 100644 animations/step_05_c/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png create mode 100644 animations/step_05_c/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png create mode 100644 animations/step_05_c/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png create mode 100644 animations/step_05_c/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png create mode 100644 animations/step_05_c/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png create mode 100644 animations/step_05_c/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png create mode 100644 animations/step_05_c/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png create mode 100644 animations/step_05_c/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png create mode 100644 animations/step_05_c/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png create mode 100644 animations/step_05_c/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png create mode 100644 animations/step_05_c/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png create mode 100644 animations/step_05_c/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png create mode 100644 animations/step_05_c/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json create mode 100644 animations/step_05_c/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png create mode 100644 animations/step_05_c/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png create mode 100644 animations/step_05_c/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png create mode 100644 animations/step_05_c/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md create mode 100644 animations/step_05_c/ios/Runner/Base.lproj/LaunchScreen.storyboard create mode 100644 animations/step_05_c/ios/Runner/Base.lproj/Main.storyboard create mode 100644 animations/step_05_c/ios/Runner/Info.plist create mode 100644 animations/step_05_c/ios/Runner/Runner-Bridging-Header.h create mode 100644 animations/step_05_c/ios/RunnerTests/RunnerTests.swift create mode 100644 animations/step_05_c/lib/flip_effect.dart create mode 100644 animations/step_05_c/lib/home_screen.dart create mode 100644 animations/step_05_c/lib/main.dart create mode 100644 animations/step_05_c/lib/model.dart create mode 100644 animations/step_05_c/lib/question_screen.dart create mode 100644 animations/step_05_c/lib/scoreboard.dart create mode 100644 animations/step_05_c/lib/view_model.dart create mode 100644 animations/step_05_c/linux/.gitignore create mode 100644 animations/step_05_c/linux/CMakeLists.txt create mode 100644 animations/step_05_c/linux/flutter/CMakeLists.txt create mode 100644 animations/step_05_c/linux/flutter/generated_plugin_registrant.cc create mode 100644 animations/step_05_c/linux/flutter/generated_plugin_registrant.h create mode 100644 animations/step_05_c/linux/flutter/generated_plugins.cmake create mode 100644 animations/step_05_c/linux/runner/CMakeLists.txt create mode 100644 animations/step_05_c/linux/runner/main.cc create mode 100644 animations/step_05_c/linux/runner/my_application.cc create mode 100644 animations/step_05_c/linux/runner/my_application.h create mode 100644 animations/step_05_c/macos/.gitignore create mode 100644 animations/step_05_c/macos/Flutter/Flutter-Debug.xcconfig create mode 100644 animations/step_05_c/macos/Flutter/Flutter-Release.xcconfig create mode 100644 animations/step_05_c/macos/Flutter/GeneratedPluginRegistrant.swift create mode 100644 animations/step_05_c/macos/Runner.xcodeproj/project.pbxproj create mode 100644 animations/step_05_c/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 animations/step_05_c/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme create mode 100644 animations/step_05_c/macos/Runner.xcworkspace/contents.xcworkspacedata create mode 100644 animations/step_05_c/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 animations/step_05_c/macos/Runner/AppDelegate.swift create mode 100644 animations/step_05_c/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 animations/step_05_c/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png create mode 100644 animations/step_05_c/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png create mode 100644 animations/step_05_c/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png create mode 100644 animations/step_05_c/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png create mode 100644 animations/step_05_c/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png create mode 100644 animations/step_05_c/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png create mode 100644 animations/step_05_c/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png create mode 100644 animations/step_05_c/macos/Runner/Base.lproj/MainMenu.xib create mode 100644 animations/step_05_c/macos/Runner/Configs/AppInfo.xcconfig create mode 100644 animations/step_05_c/macos/Runner/Configs/Debug.xcconfig create mode 100644 animations/step_05_c/macos/Runner/Configs/Release.xcconfig create mode 100644 animations/step_05_c/macos/Runner/Configs/Warnings.xcconfig create mode 100644 animations/step_05_c/macos/Runner/DebugProfile.entitlements create mode 100644 animations/step_05_c/macos/Runner/Info.plist create mode 100644 animations/step_05_c/macos/Runner/MainFlutterWindow.swift create mode 100644 animations/step_05_c/macos/Runner/Release.entitlements create mode 100644 animations/step_05_c/macos/RunnerTests/RunnerTests.swift create mode 100644 animations/step_05_c/pubspec.yaml create mode 100644 animations/step_05_c/web/favicon.png create mode 100644 animations/step_05_c/web/icons/Icon-192.png create mode 100644 animations/step_05_c/web/icons/Icon-512.png create mode 100644 animations/step_05_c/web/icons/Icon-maskable-192.png create mode 100644 animations/step_05_c/web/icons/Icon-maskable-512.png create mode 100644 animations/step_05_c/web/index.html create mode 100644 animations/step_05_c/web/manifest.json create mode 100644 animations/step_05_c/windows/.gitignore create mode 100644 animations/step_05_c/windows/CMakeLists.txt create mode 100644 animations/step_05_c/windows/flutter/CMakeLists.txt create mode 100644 animations/step_05_c/windows/flutter/generated_plugin_registrant.cc create mode 100644 animations/step_05_c/windows/flutter/generated_plugin_registrant.h create mode 100644 animations/step_05_c/windows/flutter/generated_plugins.cmake create mode 100644 animations/step_05_c/windows/runner/CMakeLists.txt create mode 100644 animations/step_05_c/windows/runner/Runner.rc create mode 100644 animations/step_05_c/windows/runner/flutter_window.cpp create mode 100644 animations/step_05_c/windows/runner/flutter_window.h create mode 100644 animations/step_05_c/windows/runner/main.cpp create mode 100644 animations/step_05_c/windows/runner/resource.h create mode 100644 animations/step_05_c/windows/runner/resources/app_icon.ico create mode 100644 animations/step_05_c/windows/runner/runner.exe.manifest create mode 100644 animations/step_05_c/windows/runner/utils.cpp create mode 100644 animations/step_05_c/windows/runner/utils.h create mode 100644 animations/step_05_c/windows/runner/win32_window.cpp create mode 100644 animations/step_05_c/windows/runner/win32_window.h create mode 100644 animations/step_05_d/.gitignore create mode 100644 animations/step_05_d/analysis_options.yaml create mode 100644 animations/step_05_d/android/.gitignore create mode 100644 animations/step_05_d/android/app/build.gradle.kts create mode 100644 animations/step_05_d/android/app/src/debug/AndroidManifest.xml create mode 100644 animations/step_05_d/android/app/src/main/AndroidManifest.xml create mode 100644 animations/step_05_d/android/app/src/main/kotlin/com/example/quiz/MainActivity.kt create mode 100644 animations/step_05_d/android/app/src/main/res/drawable-v21/launch_background.xml create mode 100644 animations/step_05_d/android/app/src/main/res/drawable/launch_background.xml create mode 100644 animations/step_05_d/android/app/src/main/res/mipmap-hdpi/ic_launcher.png create mode 100644 animations/step_05_d/android/app/src/main/res/mipmap-mdpi/ic_launcher.png create mode 100644 animations/step_05_d/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png create mode 100644 animations/step_05_d/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 animations/step_05_d/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 animations/step_05_d/android/app/src/main/res/values-night/styles.xml create mode 100644 animations/step_05_d/android/app/src/main/res/values/styles.xml create mode 100644 animations/step_05_d/android/app/src/profile/AndroidManifest.xml create mode 100644 animations/step_05_d/android/build.gradle.kts create mode 100644 animations/step_05_d/android/gradle.properties create mode 100644 animations/step_05_d/android/gradle/wrapper/gradle-wrapper.properties create mode 100644 animations/step_05_d/android/settings.gradle.kts create mode 100644 animations/step_05_d/ios/.gitignore create mode 100644 animations/step_05_d/ios/Flutter/AppFrameworkInfo.plist create mode 100644 animations/step_05_d/ios/Flutter/Debug.xcconfig create mode 100644 animations/step_05_d/ios/Flutter/Release.xcconfig create mode 100644 animations/step_05_d/ios/Runner.xcodeproj/project.pbxproj create mode 100644 animations/step_05_d/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 animations/step_05_d/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 animations/step_05_d/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings create mode 100644 animations/step_05_d/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme create mode 100644 animations/step_05_d/ios/Runner.xcworkspace/contents.xcworkspacedata create mode 100644 animations/step_05_d/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 animations/step_05_d/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings create mode 100644 animations/step_05_d/ios/Runner/AppDelegate.swift create mode 100644 animations/step_05_d/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 animations/step_05_d/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png create mode 100644 animations/step_05_d/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png create mode 100644 animations/step_05_d/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png create mode 100644 animations/step_05_d/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png create mode 100644 animations/step_05_d/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png create mode 100644 animations/step_05_d/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png create mode 100644 animations/step_05_d/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png create mode 100644 animations/step_05_d/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png create mode 100644 animations/step_05_d/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png create mode 100644 animations/step_05_d/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png create mode 100644 animations/step_05_d/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png create mode 100644 animations/step_05_d/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png create mode 100644 animations/step_05_d/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png create mode 100644 animations/step_05_d/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png create mode 100644 animations/step_05_d/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png create mode 100644 animations/step_05_d/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json create mode 100644 animations/step_05_d/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png create mode 100644 animations/step_05_d/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png create mode 100644 animations/step_05_d/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png create mode 100644 animations/step_05_d/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md create mode 100644 animations/step_05_d/ios/Runner/Base.lproj/LaunchScreen.storyboard create mode 100644 animations/step_05_d/ios/Runner/Base.lproj/Main.storyboard create mode 100644 animations/step_05_d/ios/Runner/Info.plist create mode 100644 animations/step_05_d/ios/Runner/Runner-Bridging-Header.h create mode 100644 animations/step_05_d/ios/RunnerTests/RunnerTests.swift create mode 100644 animations/step_05_d/lib/flip_effect.dart create mode 100644 animations/step_05_d/lib/home_screen.dart create mode 100644 animations/step_05_d/lib/main.dart create mode 100644 animations/step_05_d/lib/model.dart create mode 100644 animations/step_05_d/lib/question_screen.dart create mode 100644 animations/step_05_d/lib/scoreboard.dart create mode 100644 animations/step_05_d/lib/view_model.dart create mode 100644 animations/step_05_d/linux/.gitignore create mode 100644 animations/step_05_d/linux/CMakeLists.txt create mode 100644 animations/step_05_d/linux/flutter/CMakeLists.txt create mode 100644 animations/step_05_d/linux/flutter/generated_plugin_registrant.cc create mode 100644 animations/step_05_d/linux/flutter/generated_plugin_registrant.h create mode 100644 animations/step_05_d/linux/flutter/generated_plugins.cmake create mode 100644 animations/step_05_d/linux/runner/CMakeLists.txt create mode 100644 animations/step_05_d/linux/runner/main.cc create mode 100644 animations/step_05_d/linux/runner/my_application.cc create mode 100644 animations/step_05_d/linux/runner/my_application.h create mode 100644 animations/step_05_d/macos/.gitignore create mode 100644 animations/step_05_d/macos/Flutter/Flutter-Debug.xcconfig create mode 100644 animations/step_05_d/macos/Flutter/Flutter-Release.xcconfig create mode 100644 animations/step_05_d/macos/Flutter/GeneratedPluginRegistrant.swift create mode 100644 animations/step_05_d/macos/Runner.xcodeproj/project.pbxproj create mode 100644 animations/step_05_d/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 animations/step_05_d/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme create mode 100644 animations/step_05_d/macos/Runner.xcworkspace/contents.xcworkspacedata create mode 100644 animations/step_05_d/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 animations/step_05_d/macos/Runner/AppDelegate.swift create mode 100644 animations/step_05_d/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 animations/step_05_d/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png create mode 100644 animations/step_05_d/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png create mode 100644 animations/step_05_d/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png create mode 100644 animations/step_05_d/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png create mode 100644 animations/step_05_d/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png create mode 100644 animations/step_05_d/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png create mode 100644 animations/step_05_d/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png create mode 100644 animations/step_05_d/macos/Runner/Base.lproj/MainMenu.xib create mode 100644 animations/step_05_d/macos/Runner/Configs/AppInfo.xcconfig create mode 100644 animations/step_05_d/macos/Runner/Configs/Debug.xcconfig create mode 100644 animations/step_05_d/macos/Runner/Configs/Release.xcconfig create mode 100644 animations/step_05_d/macos/Runner/Configs/Warnings.xcconfig create mode 100644 animations/step_05_d/macos/Runner/DebugProfile.entitlements create mode 100644 animations/step_05_d/macos/Runner/Info.plist create mode 100644 animations/step_05_d/macos/Runner/MainFlutterWindow.swift create mode 100644 animations/step_05_d/macos/Runner/Release.entitlements create mode 100644 animations/step_05_d/macos/RunnerTests/RunnerTests.swift create mode 100644 animations/step_05_d/pubspec.yaml create mode 100644 animations/step_05_d/web/favicon.png create mode 100644 animations/step_05_d/web/icons/Icon-192.png create mode 100644 animations/step_05_d/web/icons/Icon-512.png create mode 100644 animations/step_05_d/web/icons/Icon-maskable-192.png create mode 100644 animations/step_05_d/web/icons/Icon-maskable-512.png create mode 100644 animations/step_05_d/web/index.html create mode 100644 animations/step_05_d/web/manifest.json create mode 100644 animations/step_05_d/windows/.gitignore create mode 100644 animations/step_05_d/windows/CMakeLists.txt create mode 100644 animations/step_05_d/windows/flutter/CMakeLists.txt create mode 100644 animations/step_05_d/windows/flutter/generated_plugin_registrant.cc create mode 100644 animations/step_05_d/windows/flutter/generated_plugin_registrant.h create mode 100644 animations/step_05_d/windows/flutter/generated_plugins.cmake create mode 100644 animations/step_05_d/windows/runner/CMakeLists.txt create mode 100644 animations/step_05_d/windows/runner/Runner.rc create mode 100644 animations/step_05_d/windows/runner/flutter_window.cpp create mode 100644 animations/step_05_d/windows/runner/flutter_window.h create mode 100644 animations/step_05_d/windows/runner/main.cpp create mode 100644 animations/step_05_d/windows/runner/resource.h create mode 100644 animations/step_05_d/windows/runner/resources/app_icon.ico create mode 100644 animations/step_05_d/windows/runner/runner.exe.manifest create mode 100644 animations/step_05_d/windows/runner/utils.cpp create mode 100644 animations/step_05_d/windows/runner/utils.h create mode 100644 animations/step_05_d/windows/runner/win32_window.cpp create mode 100644 animations/step_05_d/windows/runner/win32_window.h diff --git a/animations/codelab_rebuild.yaml b/animations/codelab_rebuild.yaml index d751f17615..a6e996fdf4 100644 --- a/animations/codelab_rebuild.yaml +++ b/animations/codelab_rebuild.yaml @@ -988,16 +988,26 @@ steps: - name: Use PageRouteBuilder path: quiz/lib/home_screen.dart patch-u: | - --- b/animations/step_05/lib/home_screen.dart - +++ a/animations/step_05/lib/home_screen.dart - @@ -25,13 +25,13 @@ class HomeScreen extends StatelessWidget { + --- b/animations/step_05_a/lib/home_screen.dart + +++ a/animations/step_05_a/lib/home_screen.dart + @@ -24,14 +24,22 @@ class HomeScreen extends StatelessWidget { + // Show the question screen to start the game Navigator.push( context, - MaterialPageRoute( + - MaterialPageRoute( - builder: (BuildContext context) { - return QuestionScreen(); - + builder: (context) { + + PageRouteBuilder( + + pageBuilder: (context, animation, secondaryAnimation) { + return const QuestionScreen(); + + }, + + transitionsBuilder: ( + + context, + + animation, + + secondaryAnimation, + + child, + + ) { + + return FadeTransition(opacity: animation, child: child); }, ), ); @@ -1007,215 +1017,50 @@ steps: ), ], ), + - name: Remove step_05_a + rmdir: step_05_a + - name: Copy step_05_a + copydir: + from: quiz + to: step_05_a + - name: Use package:animations FadeThroughTransition + path: quiz/lib/home_screen.dart + patch-u: | + - name: Configure Predictive Back on Android path: quiz/lib/main.dart patch-u: | - --- b/animations/step_05/lib/main.dart - +++ a/animations/step_05/lib/main.dart - @@ -1,3 +1,4 @@ - +import 'package:animations/animations.dart'; - import 'package:flutter/material.dart'; - - import 'home_screen.dart'; - @@ -16,6 +17,15 @@ class MainApp extends StatelessWidget { - theme: ThemeData( - colorScheme: ColorScheme.fromSeed(seedColor: Colors.blue), - useMaterial3: true, - + pageTransitionsTheme: PageTransitionsTheme( - + builders: { - + TargetPlatform.android: PredictiveBackPageTransitionsBuilder(), - + TargetPlatform.iOS: FadeThroughPageTransitionsBuilder(), - + TargetPlatform.macOS: FadeThroughPageTransitionsBuilder(), - + TargetPlatform.windows: FadeThroughPageTransitionsBuilder(), - + TargetPlatform.linux: FadeThroughPageTransitionsBuilder(), - + }, - + ), - ), - home: HomeScreen(), - ); + + - name: Remove step_05_b + rmdir: step_05_b + - name: Copy step_05_b + copydir: + from: quiz + to: step_05_b + - name: Change back to MaterialPageRoute + path: quiz/lib/home_screen.dart + patch-u: | + - name: Use FadeThroughTransition path: quiz/lib/question_screen.dart patch-u: | - --- b/animations/step_05/lib/question_screen.dart - +++ a/animations/step_05/lib/question_screen.dart - @@ -1,3 +1,4 @@ - +import 'package:animations/animations.dart'; - import 'package:flutter/material.dart'; - import 'flip_effect.dart'; - import 'scoreboard.dart'; - @@ -14,6 +15,7 @@ class _QuestionScreenState extends State { - late final QuizViewModel viewModel = QuizViewModel( - onGameOver: _handleGameOver, - ); - + VoidCallback? _showGameOverScreen; - - @override - Widget build(BuildContext context) { - @@ -37,7 +39,11 @@ class _QuestionScreenState extends State { - body: Center( - child: Column( - children: [ - - QuestionCard(question: viewModel.currentQuestion?.question), - + QuestionCard( - + onChangeOpenContainer: _handleChangeOpenContainer, - + question: viewModel.currentQuestion?.question, - + viewModel: viewModel, - + ), - Spacer(), - AnswerCards( - onTapped: (index) { - @@ -58,24 +64,49 @@ class _QuestionScreenState extends State { - ); - } - - + void _handleChangeOpenContainer(VoidCallback openContainer) { - + _showGameOverScreen = openContainer; - + } - + - void _handleGameOver() { - - showDialog( - - barrierDismissible: false, - - context: context, - - builder: (context) { - - return AlertDialog( - - title: Text('Game Over!'), - - content: Text('Score: ${viewModel.score}'), - - actions: [ - - TextButton( - + if (_showGameOverScreen != null) { - + _showGameOverScreen!(); - + } - + } - +} - + - +class GameOverScreen extends StatelessWidget { - + final QuizViewModel viewModel; - + const GameOverScreen({required this.viewModel, super.key}); - + - + @override - + Widget build(BuildContext context) { - + return Scaffold( - + appBar: AppBar(automaticallyImplyLeading: false), - + body: Center( - + child: Column( - + mainAxisAlignment: MainAxisAlignment.center, - + children: [ - + Scoreboard( - + score: viewModel.score, - + totalQuestions: viewModel.totalQuestions, - + ), - + Text('You Win!', style: Theme.of(context).textTheme.displayLarge), - + Text( - + 'Score: ${viewModel.score} / ${viewModel.totalQuestions}', - + style: Theme.of(context).textTheme.displaySmall, - + ), - + ElevatedButton( - + child: Text('OK'), - onPressed: () { - - Navigator.popUntil(context, (route) => route.isFirst); - + Navigator.pop(context); - + // Navigator.popUntil( - + // context, (route) => route.isFirst); - }, - - child: Text('OK'), - ), - ], - - ); - - }, - + ), - + ), - ); - } - } - @@ -83,45 +114,53 @@ class _QuestionScreenState extends State { - class QuestionCard extends StatelessWidget { - final String? question; - - - const QuestionCard({required this.question, super.key}); - + const QuestionCard({ - + required this.onChangeOpenContainer, - + required this.question, - + required this.viewModel, - + super.key, - + }); - + - + final ValueChanged onChangeOpenContainer; - + final QuizViewModel viewModel; - + - + static const _backgroundColor = Color(0xfff2f3fa); - - @override - Widget build(BuildContext context) { - - return AnimatedSwitcher( - - layoutBuilder: (Widget? currentChild, List previousChildren) { - - return Stack( - - alignment: Alignment.topCenter, - - children: [ - - ...previousChildren, - - if (currentChild != null) currentChild, - - ], - - ); - - }, - - transitionBuilder: (Widget child, Animation animation) { - - final curveAnimation = CurveTween( - - curve: Curves.easeInCubic, - - ).animate(animation); - - final offsetAnimation = Tween( - - begin: Offset(-0.1, 0.0), - - end: Offset.zero, - - ).animate(curveAnimation); - - final fadeInAnimation = curveAnimation; - - return FadeTransition( - - opacity: fadeInAnimation, - - child: SlideTransition(position: offsetAnimation, child: child), - + return PageTransitionSwitcher( - + duration: const Duration(milliseconds: 200), - + transitionBuilder: (Widget child, animation, secondaryAnimation) { - + return FadeThroughTransition( - + animation: animation, - + secondaryAnimation: secondaryAnimation, - + child: child, - ); - }, - - duration: const Duration(milliseconds: 300), - - child: Card( - + child: OpenContainer( - key: ValueKey(question), - - elevation: 4, - - child: Padding( - - padding: const EdgeInsets.all(16.0), - - child: Text( - - question ?? "", - - style: Theme.of(context).textTheme.displaySmall, - - ), - + tappable: false, - + closedColor: _backgroundColor, - + closedShape: const RoundedRectangleBorder( - + borderRadius: BorderRadius.all(Radius.circular(12.0)), - ), - + closedElevation: 4, - + closedBuilder: (context, openContainer) { - + onChangeOpenContainer(openContainer); - + return ColoredBox( - + color: _backgroundColor, - + child: Padding( - + padding: const EdgeInsets.all(16.0), - + child: Text( - + question ?? "", - + style: Theme.of(context).textTheme.displaySmall, - + ), - + ), - + ); - + }, - + openBuilder: (context, closeContainer) { - + return GameOverScreen(viewModel: viewModel); - + }, - ), - ); - } - - name: dart analyze - path: quiz - dart: analyze --fatal-infos + + - name: Remove step_05_c + rmdir: step_05_c + - name: Copy step_05_c + copydir: + from: quiz + to: step_05_c + - name: Use OpenContainer + path: quiz/lib/question_screen.dart + patch-u: | + + - name: Remove step_05_d + rmdir: step_05_d + - name: Copy step_05_d + copydir: + from: quiz + to: step_05_d - name: Build Android app platforms: [ macos ] path: quiz @@ -1246,4 +1091,4 @@ steps: from: quiz to: step_05 - name: Cleanup - rmdir: quiz + rmdir: quiz \ No newline at end of file diff --git a/animations/step_05_a/.gitignore b/animations/step_05_a/.gitignore new file mode 100644 index 0000000000..79c113f9b5 --- /dev/null +++ b/animations/step_05_a/.gitignore @@ -0,0 +1,45 @@ +# Miscellaneous +*.class +*.log +*.pyc +*.swp +.DS_Store +.atom/ +.build/ +.buildlog/ +.history +.svn/ +.swiftpm/ +migrate_working_dir/ + +# IntelliJ related +*.iml +*.ipr +*.iws +.idea/ + +# The .vscode folder contains launch configuration and tasks you configure in +# VS Code which you may wish to be included in version control, so this line +# is commented out by default. +#.vscode/ + +# Flutter/Dart/Pub related +**/doc/api/ +**/ios/Flutter/.last_build_id +.dart_tool/ +.flutter-plugins +.flutter-plugins-dependencies +.pub-cache/ +.pub/ +/build/ + +# Symbolication related +app.*.symbols + +# Obfuscation related +app.*.map.json + +# Android Studio will place build artifacts here +/android/app/debug +/android/app/profile +/android/app/release diff --git a/animations/step_05_a/analysis_options.yaml b/animations/step_05_a/analysis_options.yaml new file mode 100644 index 0000000000..03de3bd700 --- /dev/null +++ b/animations/step_05_a/analysis_options.yaml @@ -0,0 +1,13 @@ +include: package:flutter_lints/flutter.yaml + +analyzer: + errors: + unused_field: ignore + +linter: + rules: + annotate_overrides: false + prefer_const_constructors: false + prefer_const_constructors_in_immutables: false + prefer_const_declarations: false + prefer_const_literals_to_create_immutables: false diff --git a/animations/step_05_a/android/.gitignore b/animations/step_05_a/android/.gitignore new file mode 100644 index 0000000000..55afd919c6 --- /dev/null +++ b/animations/step_05_a/android/.gitignore @@ -0,0 +1,13 @@ +gradle-wrapper.jar +/.gradle +/captures/ +/gradlew +/gradlew.bat +/local.properties +GeneratedPluginRegistrant.java + +# Remember to never publicly share your keystore. +# See https://flutter.dev/to/reference-keystore +key.properties +**/*.keystore +**/*.jks diff --git a/animations/step_05_a/android/app/build.gradle.kts b/animations/step_05_a/android/app/build.gradle.kts new file mode 100644 index 0000000000..31d285867f --- /dev/null +++ b/animations/step_05_a/android/app/build.gradle.kts @@ -0,0 +1,44 @@ +plugins { + id("com.android.application") + id("kotlin-android") + // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. + id("dev.flutter.flutter-gradle-plugin") +} + +android { + namespace = "com.example.quiz" + compileSdk = flutter.compileSdkVersion + ndkVersion = flutter.ndkVersion + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 + } + + kotlinOptions { + jvmTarget = JavaVersion.VERSION_1_8.toString() + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId = "com.example.quiz" + // You can update the following values to match your application needs. + // For more information, see: https://flutter.dev/to/review-gradle-config. + minSdk = flutter.minSdkVersion + targetSdk = flutter.targetSdkVersion + versionCode = flutter.versionCode + versionName = flutter.versionName + } + + buildTypes { + release { + // TODO: Add your own signing config for the release build. + // Signing with the debug keys for now, so `flutter run --release` works. + signingConfig = signingConfigs.getByName("debug") + } + } +} + +flutter { + source = "../.." +} diff --git a/animations/step_05_a/android/app/src/debug/AndroidManifest.xml b/animations/step_05_a/android/app/src/debug/AndroidManifest.xml new file mode 100644 index 0000000000..399f6981d5 --- /dev/null +++ b/animations/step_05_a/android/app/src/debug/AndroidManifest.xml @@ -0,0 +1,7 @@ + + + + diff --git a/animations/step_05_a/android/app/src/main/AndroidManifest.xml b/animations/step_05_a/android/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000000..34076b28b3 --- /dev/null +++ b/animations/step_05_a/android/app/src/main/AndroidManifest.xml @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/animations/step_05_a/android/app/src/main/kotlin/com/example/quiz/MainActivity.kt b/animations/step_05_a/android/app/src/main/kotlin/com/example/quiz/MainActivity.kt new file mode 100644 index 0000000000..87081bb97c --- /dev/null +++ b/animations/step_05_a/android/app/src/main/kotlin/com/example/quiz/MainActivity.kt @@ -0,0 +1,5 @@ +package com.example.quiz + +import io.flutter.embedding.android.FlutterActivity + +class MainActivity: FlutterActivity() diff --git a/animations/step_05_a/android/app/src/main/res/drawable-v21/launch_background.xml b/animations/step_05_a/android/app/src/main/res/drawable-v21/launch_background.xml new file mode 100644 index 0000000000..f74085f3f6 --- /dev/null +++ b/animations/step_05_a/android/app/src/main/res/drawable-v21/launch_background.xml @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/animations/step_05_a/android/app/src/main/res/drawable/launch_background.xml b/animations/step_05_a/android/app/src/main/res/drawable/launch_background.xml new file mode 100644 index 0000000000..304732f884 --- /dev/null +++ b/animations/step_05_a/android/app/src/main/res/drawable/launch_background.xml @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/animations/step_05_a/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/animations/step_05_a/android/app/src/main/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..db77bb4b7b0906d62b1847e87f15cdcacf6a4f29 GIT binary patch literal 544 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY3?!3`olAj~WQl7;NpOBzNqJ&XDuZK6ep0G} zXKrG8YEWuoN@d~6R2!h8bpbvhu0Wd6uZuB!w&u2PAxD2eNXD>P5D~Wn-+_Wa#27Xc zC?Zj|6r#X(-D3u$NCt}(Ms06KgJ4FxJVv{GM)!I~&n8Bnc94O7-Hd)cjDZswgC;Qs zO=b+9!WcT8F?0rF7!Uys2bs@gozCP?z~o%U|N3vA*22NaGQG zlg@K`O_XuxvZ&Ks^m&R!`&1=spLvfx7oGDKDwpwW`#iqdw@AL`7MR}m`rwr|mZgU`8P7SBkL78fFf!WnuYWm$5Z0 zNXhDbCv&49sM544K|?c)WrFfiZvCi9h0O)B3Pgg&ebxsLQ05GG~ AQ2+n{ literal 0 HcmV?d00001 diff --git a/animations/step_05_a/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/animations/step_05_a/android/app/src/main/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..17987b79bb8a35cc66c3c1fd44f5a5526c1b78be GIT binary patch literal 442 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA3?vioaBc-sk|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*D5Xx&nMcT!A!W`0S9QKQy;}1Cl^CgaH=;G9cpY;r$Q>i*pfB zP2drbID<_#qf;rPZx^FqH)F_D#*k@@q03KywUtLX8Ua?`H+NMzkczFPK3lFz@i_kW%1NOn0|D2I9n9wzH8m|-tHjsw|9>@K=iMBhxvkv6m8Y-l zytQ?X=U+MF$@3 zt`~i=@j|6y)RWMK--}M|=T`o&^Ni>IoWKHEbBXz7?A@mgWoL>!*SXo`SZH-*HSdS+ yn*9;$7;m`l>wYBC5bq;=U}IMqLzqbYCidGC!)_gkIk_C@Uy!y&wkt5C($~2D>~)O*cj@FGjOCM)M>_ixfudOh)?xMu#Fs z#}Y=@YDTwOM)x{K_j*Q;dPdJ?Mz0n|pLRx{4n|)f>SXlmV)XB04CrSJn#dS5nK2lM zrZ9#~WelCp7&e13Y$jvaEXHskn$2V!!DN-nWS__6T*l;H&Fopn?A6HZ-6WRLFP=R` zqG+CE#d4|IbyAI+rJJ`&x9*T`+a=p|0O(+s{UBcyZdkhj=yS1>AirP+0R;mf2uMgM zC}@~JfByORAh4SyRgi&!(cja>F(l*O+nd+@4m$|6K6KDn_&uvCpV23&>G9HJp{xgg zoq1^2_p9@|WEo z*X_Uko@K)qYYv~>43eQGMdbiGbo>E~Q& zrYBH{QP^@Sti!`2)uG{irBBq@y*$B zi#&(U-*=fp74j)RyIw49+0MRPMRU)+a2r*PJ$L5roHt2$UjExCTZSbq%V!HeS7J$N zdG@vOZB4v_lF7Plrx+hxo7(fCV&}fHq)$ literal 0 HcmV?d00001 diff --git a/animations/step_05_a/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/animations/step_05_a/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..d5f1c8d34e7a88e3f88bea192c3a370d44689c3c GIT binary patch literal 1031 zcmeAS@N?(olHy`uVBq!ia0vp^6F``Q8Ax83A=Cw=BuiW)N`mv#O3D+9QW+dm@{>{( zJaZG%Q-e|yQz{EjrrIztFa`(sgt!6~Yi|1%a`XoT0ojZ}lNrNjb9xjc(B0U1_% zz5^97Xt*%oq$rQy4?0GKNfJ44uvxI)gC`h-NZ|&0-7(qS@?b!5r36oQ}zyZrNO3 zMO=Or+<~>+A&uN&E!^Sl+>xE!QC-|oJv`ApDhqC^EWD|@=#J`=d#Xzxs4ah}w&Jnc z$|q_opQ^2TrnVZ0o~wh<3t%W&flvYGe#$xqda2bR_R zvPYgMcHgjZ5nSA^lJr%;<&0do;O^tDDh~=pIxA#coaCY>&N%M2^tq^U%3DB@ynvKo}b?yu-bFc-u0JHzced$sg7S3zqI(2 z#Km{dPr7I=pQ5>FuK#)QwK?Y`E`B?nP+}U)I#c1+FM*1kNvWG|a(TpksZQ3B@sD~b zpQ2)*V*TdwjFOtHvV|;OsiDqHi=6%)o4b!)x$)%9pGTsE z-JL={-Ffv+T87W(Xpooq<`r*VzWQcgBN$$`u}f>-ZQI1BB8ykN*=e4rIsJx9>z}*o zo~|9I;xof literal 0 HcmV?d00001 diff --git a/animations/step_05_a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/animations/step_05_a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..4d6372eebdb28e45604e46eeda8dd24651419bc0 GIT binary patch literal 1443 zcmb`G{WsKk6vsdJTdFg%tJav9_E4vzrOaqkWF|A724Nly!y+?N9`YV6wZ}5(X(D_N(?!*n3`|_r0Hc?=PQw&*vnU?QTFY zB_MsH|!j$PP;I}?dppoE_gA(4uc!jV&0!l7_;&p2^pxNo>PEcNJv za5_RT$o2Mf!<+r?&EbHH6nMoTsDOa;mN(wv8RNsHpG)`^ymG-S5By8=l9iVXzN_eG%Xg2@Xeq76tTZ*dGh~Lo9vl;Zfs+W#BydUw zCkZ$o1LqWQO$FC9aKlLl*7x9^0q%0}$OMlp@Kk_jHXOjofdePND+j!A{q!8~Jn+s3 z?~~w@4?egS02}8NuulUA=L~QQfm;MzCGd)XhiftT;+zFO&JVyp2mBww?;QByS_1w! zrQlx%{^cMj0|Bo1FjwY@Q8?Hx0cIPF*@-ZRFpPc#bBw{5@tD(5%sClzIfl8WU~V#u zm5Q;_F!wa$BSpqhN>W@2De?TKWR*!ujY;Yylk_X5#~V!L*Gw~;$%4Q8~Mad z@`-kG?yb$a9cHIApZDVZ^U6Xkp<*4rU82O7%}0jjHlK{id@?-wpN*fCHXyXh(bLt* zPc}H-x0e4E&nQ>y%B-(EL=9}RyC%MyX=upHuFhAk&MLbsF0LP-q`XnH78@fT+pKPW zu72MW`|?8ht^tz$iC}ZwLp4tB;Q49K!QCF3@!iB1qOI=?w z7In!}F~ij(18UYUjnbmC!qKhPo%24?8U1x{7o(+?^Zu0Hx81|FuS?bJ0jgBhEMzf< zCgUq7r2OCB(`XkKcN-TL>u5y#dD6D!)5W?`O5)V^>jb)P)GBdy%t$uUMpf$SNV31$ zb||OojAbvMP?T@$h_ZiFLFVHDmbyMhJF|-_)HX3%m=CDI+ID$0^C>kzxprBW)hw(v zr!Gmda);ICoQyhV_oP5+C%?jcG8v+D@9f?Dk*!BxY}dazmrT@64UrP3hlslANK)bq z$67n83eh}OeW&SV@HG95P|bjfqJ7gw$e+`Hxo!4cx`jdK1bJ>YDSpGKLPZ^1cv$ek zIB?0S<#tX?SJCLWdMd{-ME?$hc7A$zBOdIJ)4!KcAwb=VMov)nK;9z>x~rfT1>dS+ zZ6#`2v@`jgbqq)P22H)Tx2CpmM^o1$B+xT6`(v%5xJ(?j#>Q$+rx_R|7TzDZe{J6q zG1*EcU%tE?!kO%^M;3aM6JN*LAKUVb^xz8-Pxo#jR5(-KBeLJvA@-gxNHx0M-ZJLl z;#JwQoh~9V?`UVo#}{6ka@II>++D@%KqGpMdlQ}?9E*wFcf5(#XQnP$Dk5~%iX^>f z%$y;?M0BLp{O3a(-4A?ewryHrrD%cx#Q^%KY1H zNre$ve+vceSLZcNY4U(RBX&)oZn*Py()h)XkE?PL$!bNb{N5FVI2Y%LKEm%yvpyTP z(1P?z~7YxD~Rf<(a@_y` literal 0 HcmV?d00001 diff --git a/animations/step_05_a/android/app/src/main/res/values-night/styles.xml b/animations/step_05_a/android/app/src/main/res/values-night/styles.xml new file mode 100644 index 0000000000..06952be745 --- /dev/null +++ b/animations/step_05_a/android/app/src/main/res/values-night/styles.xml @@ -0,0 +1,18 @@ + + + + + + + diff --git a/animations/step_05_a/android/app/src/main/res/values/styles.xml b/animations/step_05_a/android/app/src/main/res/values/styles.xml new file mode 100644 index 0000000000..cb1ef88056 --- /dev/null +++ b/animations/step_05_a/android/app/src/main/res/values/styles.xml @@ -0,0 +1,18 @@ + + + + + + + diff --git a/animations/step_05_a/android/app/src/profile/AndroidManifest.xml b/animations/step_05_a/android/app/src/profile/AndroidManifest.xml new file mode 100644 index 0000000000..399f6981d5 --- /dev/null +++ b/animations/step_05_a/android/app/src/profile/AndroidManifest.xml @@ -0,0 +1,7 @@ + + + + diff --git a/animations/step_05_a/android/build.gradle.kts b/animations/step_05_a/android/build.gradle.kts new file mode 100644 index 0000000000..89176ef44e --- /dev/null +++ b/animations/step_05_a/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/animations/step_05_a/android/gradle.properties b/animations/step_05_a/android/gradle.properties new file mode 100644 index 0000000000..f018a61817 --- /dev/null +++ b/animations/step_05_a/android/gradle.properties @@ -0,0 +1,3 @@ +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError +android.useAndroidX=true +android.enableJetifier=true diff --git a/animations/step_05_a/android/gradle/wrapper/gradle-wrapper.properties b/animations/step_05_a/android/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000000..afa1e8eb0a --- /dev/null +++ b/animations/step_05_a/android/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,5 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip diff --git a/animations/step_05_a/android/settings.gradle.kts b/animations/step_05_a/android/settings.gradle.kts new file mode 100644 index 0000000000..a439442c20 --- /dev/null +++ b/animations/step_05_a/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.0" apply false + id("org.jetbrains.kotlin.android") version "1.8.22" apply false +} + +include(":app") diff --git a/animations/step_05_a/ios/.gitignore b/animations/step_05_a/ios/.gitignore new file mode 100644 index 0000000000..7a7f9873ad --- /dev/null +++ b/animations/step_05_a/ios/.gitignore @@ -0,0 +1,34 @@ +**/dgph +*.mode1v3 +*.mode2v3 +*.moved-aside +*.pbxuser +*.perspectivev3 +**/*sync/ +.sconsign.dblite +.tags* +**/.vagrant/ +**/DerivedData/ +Icon? +**/Pods/ +**/.symlinks/ +profile +xcuserdata +**/.generated/ +Flutter/App.framework +Flutter/Flutter.framework +Flutter/Flutter.podspec +Flutter/Generated.xcconfig +Flutter/ephemeral/ +Flutter/app.flx +Flutter/app.zip +Flutter/flutter_assets/ +Flutter/flutter_export_environment.sh +ServiceDefinitions.json +Runner/GeneratedPluginRegistrant.* + +# Exceptions to above rules. +!default.mode1v3 +!default.mode2v3 +!default.pbxuser +!default.perspectivev3 diff --git a/animations/step_05_a/ios/Flutter/AppFrameworkInfo.plist b/animations/step_05_a/ios/Flutter/AppFrameworkInfo.plist new file mode 100644 index 0000000000..7c56964006 --- /dev/null +++ b/animations/step_05_a/ios/Flutter/AppFrameworkInfo.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + App + CFBundleIdentifier + io.flutter.flutter.app + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + App + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1.0 + MinimumOSVersion + 12.0 + + diff --git a/animations/step_05_a/ios/Flutter/Debug.xcconfig b/animations/step_05_a/ios/Flutter/Debug.xcconfig new file mode 100644 index 0000000000..592ceee85b --- /dev/null +++ b/animations/step_05_a/ios/Flutter/Debug.xcconfig @@ -0,0 +1 @@ +#include "Generated.xcconfig" diff --git a/animations/step_05_a/ios/Flutter/Release.xcconfig b/animations/step_05_a/ios/Flutter/Release.xcconfig new file mode 100644 index 0000000000..592ceee85b --- /dev/null +++ b/animations/step_05_a/ios/Flutter/Release.xcconfig @@ -0,0 +1 @@ +#include "Generated.xcconfig" diff --git a/animations/step_05_a/ios/Runner.xcodeproj/project.pbxproj b/animations/step_05_a/ios/Runner.xcodeproj/project.pbxproj new file mode 100644 index 0000000000..faef24d87a --- /dev/null +++ b/animations/step_05_a/ios/Runner.xcodeproj/project.pbxproj @@ -0,0 +1,616 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 54; + objects = { + +/* Begin PBXBuildFile section */ + 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; + 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; + 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; + 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; + 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; + 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; + 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 331C8085294A63A400263BE5 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 97C146E61CF9000F007C117D /* Project object */; + proxyType = 1; + remoteGlobalIDString = 97C146ED1CF9000F007C117D; + remoteInfo = Runner; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 9705A1C41CF9048500538489 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; + 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; + 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; + 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; + 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; + 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; + 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; + 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; + 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 97C146EB1CF9000F007C117D /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 331C8082294A63A400263BE5 /* RunnerTests */ = { + isa = PBXGroup; + children = ( + 331C807B294A618700263BE5 /* RunnerTests.swift */, + ); + path = RunnerTests; + sourceTree = ""; + }; + 9740EEB11CF90186004384FC /* Flutter */ = { + isa = PBXGroup; + children = ( + 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */, + 9740EEB21CF90195004384FC /* Debug.xcconfig */, + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, + 9740EEB31CF90195004384FC /* Generated.xcconfig */, + ); + name = Flutter; + sourceTree = ""; + }; + 97C146E51CF9000F007C117D = { + isa = PBXGroup; + children = ( + 9740EEB11CF90186004384FC /* Flutter */, + 97C146F01CF9000F007C117D /* Runner */, + 97C146EF1CF9000F007C117D /* Products */, + 331C8082294A63A400263BE5 /* RunnerTests */, + ); + sourceTree = ""; + }; + 97C146EF1CF9000F007C117D /* Products */ = { + isa = PBXGroup; + children = ( + 97C146EE1CF9000F007C117D /* Runner.app */, + 331C8081294A63A400263BE5 /* RunnerTests.xctest */, + ); + name = Products; + sourceTree = ""; + }; + 97C146F01CF9000F007C117D /* Runner */ = { + isa = PBXGroup; + children = ( + 97C146FA1CF9000F007C117D /* Main.storyboard */, + 97C146FD1CF9000F007C117D /* Assets.xcassets */, + 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */, + 97C147021CF9000F007C117D /* Info.plist */, + 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */, + 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */, + 74858FAE1ED2DC5600515810 /* AppDelegate.swift */, + 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */, + ); + path = Runner; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 331C8080294A63A400263BE5 /* RunnerTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; + buildPhases = ( + 331C807D294A63A400263BE5 /* Sources */, + 331C807F294A63A400263BE5 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 331C8086294A63A400263BE5 /* PBXTargetDependency */, + ); + name = RunnerTests; + productName = RunnerTests; + productReference = 331C8081294A63A400263BE5 /* RunnerTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; + 97C146ED1CF9000F007C117D /* Runner */ = { + isa = PBXNativeTarget; + buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; + buildPhases = ( + 9740EEB61CF901F6004384FC /* Run Script */, + 97C146EA1CF9000F007C117D /* Sources */, + 97C146EB1CF9000F007C117D /* Frameworks */, + 97C146EC1CF9000F007C117D /* Resources */, + 9705A1C41CF9048500538489 /* Embed Frameworks */, + 3B06AD1E1E4923F5004D2608 /* Thin Binary */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = Runner; + productName = Runner; + productReference = 97C146EE1CF9000F007C117D /* Runner.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 97C146E61CF9000F007C117D /* Project object */ = { + isa = PBXProject; + attributes = { + BuildIndependentTargetsInParallel = YES; + LastUpgradeCheck = 1510; + ORGANIZATIONNAME = ""; + TargetAttributes = { + 331C8080294A63A400263BE5 = { + CreatedOnToolsVersion = 14.0; + TestTargetID = 97C146ED1CF9000F007C117D; + }; + 97C146ED1CF9000F007C117D = { + CreatedOnToolsVersion = 7.3.1; + LastSwiftMigration = 1100; + }; + }; + }; + buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 97C146E51CF9000F007C117D; + productRefGroup = 97C146EF1CF9000F007C117D /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 97C146ED1CF9000F007C117D /* Runner */, + 331C8080294A63A400263BE5 /* RunnerTests */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 331C807F294A63A400263BE5 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 97C146EC1CF9000F007C117D /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */, + 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */, + 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */, + 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", + ); + name = "Thin Binary"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + }; + 9740EEB61CF901F6004384FC /* Run Script */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Run Script"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 331C807D294A63A400263BE5 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 97C146EA1CF9000F007C117D /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */, + 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 331C8086294A63A400263BE5 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 97C146ED1CF9000F007C117D /* Runner */; + targetProxy = 331C8085294A63A400263BE5 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + 97C146FA1CF9000F007C117D /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 97C146FB1CF9000F007C117D /* Base */, + ); + name = Main.storyboard; + sourceTree = ""; + }; + 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 97C147001CF9000F007C117D /* Base */, + ); + name = LaunchScreen.storyboard; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 249021D3217E4FDB00AE95B9 /* Profile */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + SUPPORTED_PLATFORMS = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Profile; + }; + 249021D4217E4FDB00AE95B9 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + ENABLE_BITCODE = NO; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.example.quiz; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; + SWIFT_VERSION = 5.0; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Profile; + }; + 331C8088294A63A400263BE5 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.quiz.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; + }; + name = Debug; + }; + 331C8089294A63A400263BE5 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.quiz.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; + }; + name = Release; + }; + 331C808A294A63A400263BE5 /* Profile */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.quiz.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; + }; + name = Profile; + }; + 97C147031CF9000F007C117D /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 97C147041CF9000F007C117D /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + SUPPORTED_PLATFORMS = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 97C147061CF9000F007C117D /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + ENABLE_BITCODE = NO; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.example.quiz; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Debug; + }; + 97C147071CF9000F007C117D /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + ENABLE_BITCODE = NO; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.example.quiz; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; + SWIFT_VERSION = 5.0; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 331C8088294A63A400263BE5 /* Debug */, + 331C8089294A63A400263BE5 /* Release */, + 331C808A294A63A400263BE5 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 97C147031CF9000F007C117D /* Debug */, + 97C147041CF9000F007C117D /* Release */, + 249021D3217E4FDB00AE95B9 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 97C147061CF9000F007C117D /* Debug */, + 97C147071CF9000F007C117D /* Release */, + 249021D4217E4FDB00AE95B9 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 97C146E61CF9000F007C117D /* Project object */; +} diff --git a/animations/step_05_a/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/animations/step_05_a/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000000..919434a625 --- /dev/null +++ b/animations/step_05_a/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/animations/step_05_a/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/animations/step_05_a/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000000..18d981003d --- /dev/null +++ b/animations/step_05_a/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/animations/step_05_a/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/animations/step_05_a/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings new file mode 100644 index 0000000000..f9b0d7c5ea --- /dev/null +++ b/animations/step_05_a/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings @@ -0,0 +1,8 @@ + + + + + PreviewsEnabled + + + diff --git a/animations/step_05_a/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/animations/step_05_a/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme new file mode 100644 index 0000000000..8e3ca5dfe1 --- /dev/null +++ b/animations/step_05_a/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -0,0 +1,98 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/animations/step_05_a/ios/Runner.xcworkspace/contents.xcworkspacedata b/animations/step_05_a/ios/Runner.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000000..1d526a16ed --- /dev/null +++ b/animations/step_05_a/ios/Runner.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/animations/step_05_a/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/animations/step_05_a/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000000..18d981003d --- /dev/null +++ b/animations/step_05_a/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/animations/step_05_a/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/animations/step_05_a/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings new file mode 100644 index 0000000000..f9b0d7c5ea --- /dev/null +++ b/animations/step_05_a/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings @@ -0,0 +1,8 @@ + + + + + PreviewsEnabled + + + diff --git a/animations/step_05_a/ios/Runner/AppDelegate.swift b/animations/step_05_a/ios/Runner/AppDelegate.swift new file mode 100644 index 0000000000..626664468b --- /dev/null +++ b/animations/step_05_a/ios/Runner/AppDelegate.swift @@ -0,0 +1,13 @@ +import Flutter +import UIKit + +@main +@objc class AppDelegate: FlutterAppDelegate { + override func application( + _ application: UIApplication, + didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? + ) -> Bool { + GeneratedPluginRegistrant.register(with: self) + return super.application(application, didFinishLaunchingWithOptions: launchOptions) + } +} diff --git a/animations/step_05_a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/animations/step_05_a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000000..d36b1fab2d --- /dev/null +++ b/animations/step_05_a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,122 @@ +{ + "images" : [ + { + "size" : "20x20", + "idiom" : "iphone", + "filename" : "Icon-App-20x20@2x.png", + "scale" : "2x" + }, + { + "size" : "20x20", + "idiom" : "iphone", + "filename" : "Icon-App-20x20@3x.png", + "scale" : "3x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "Icon-App-29x29@1x.png", + "scale" : "1x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "Icon-App-29x29@2x.png", + "scale" : "2x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "Icon-App-29x29@3x.png", + "scale" : "3x" + }, + { + "size" : "40x40", + "idiom" : "iphone", + "filename" : "Icon-App-40x40@2x.png", + "scale" : "2x" + }, + { + "size" : "40x40", + "idiom" : "iphone", + "filename" : "Icon-App-40x40@3x.png", + "scale" : "3x" + }, + { + "size" : "60x60", + "idiom" : "iphone", + "filename" : "Icon-App-60x60@2x.png", + "scale" : "2x" + }, + { + "size" : "60x60", + "idiom" : "iphone", + "filename" : "Icon-App-60x60@3x.png", + "scale" : "3x" + }, + { + "size" : "20x20", + "idiom" : "ipad", + "filename" : "Icon-App-20x20@1x.png", + "scale" : "1x" + }, + { + "size" : "20x20", + "idiom" : "ipad", + "filename" : "Icon-App-20x20@2x.png", + "scale" : "2x" + }, + { + "size" : "29x29", + "idiom" : "ipad", + "filename" : "Icon-App-29x29@1x.png", + "scale" : "1x" + }, + { + "size" : "29x29", + "idiom" : "ipad", + "filename" : "Icon-App-29x29@2x.png", + "scale" : "2x" + }, + { + "size" : "40x40", + "idiom" : "ipad", + "filename" : "Icon-App-40x40@1x.png", + "scale" : "1x" + }, + { + "size" : "40x40", + "idiom" : "ipad", + "filename" : "Icon-App-40x40@2x.png", + "scale" : "2x" + }, + { + "size" : "76x76", + "idiom" : "ipad", + "filename" : "Icon-App-76x76@1x.png", + "scale" : "1x" + }, + { + "size" : "76x76", + "idiom" : "ipad", + "filename" : "Icon-App-76x76@2x.png", + "scale" : "2x" + }, + { + "size" : "83.5x83.5", + "idiom" : "ipad", + "filename" : "Icon-App-83.5x83.5@2x.png", + "scale" : "2x" + }, + { + "size" : "1024x1024", + "idiom" : "ios-marketing", + "filename" : "Icon-App-1024x1024@1x.png", + "scale" : "1x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} diff --git a/animations/step_05_a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png b/animations/step_05_a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..dc9ada4725e9b0ddb1deab583e5b5102493aa332 GIT binary patch literal 10932 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 literal 0 HcmV?d00001 diff --git a/animations/step_05_a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png b/animations/step_05_a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..797d452e458972bab9d994556c8305db4c827017 GIT binary patch literal 406 zcmV;H0crk;P))>cdjpWt&rLJgVp-t?DREyuq1A%0Z4)6_WsQ7{nzjN zo!X zGXV)2i3kcZIL~_j>uIKPK_zib+3T+Nt3Mb&Br)s)UIaA}@p{wDda>7=Q|mGRp7pqY zkJ!7E{MNz$9nOwoVqpFb)}$IP24Wn2JJ=Cw(!`OXJBr45rP>>AQr$6c7slJWvbpNW z@KTwna6d?PP>hvXCcp=4F;=GR@R4E7{4VU^0p4F>v^#A|>07*qoM6N<$f*5nx ACIA2c literal 0 HcmV?d00001 diff --git a/animations/step_05_a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png b/animations/step_05_a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..6ed2d933e1120817fe9182483a228007b18ab6ae GIT binary patch literal 450 zcmV;z0X_bSP)iGWQ_5NJQ_~rNh*z)}eT%KUb z`7gNk0#AwF^#0T0?hIa^`~Ck;!}#m+_uT050aTR(J!bU#|IzRL%^UsMS#KsYnTF*!YeDOytlP4VhV?b} z%rz_<=#CPc)tU1MZTq~*2=8~iZ!lSa<{9b@2Jl;?IEV8)=fG217*|@)CCYgFze-x? zIFODUIA>nWKpE+bn~n7;-89sa>#DR>TSlqWk*!2hSN6D~Qb#VqbP~4Fk&m`@1$JGr zXPIdeRE&b2Thd#{MtDK$px*d3-Wx``>!oimf%|A-&-q*6KAH)e$3|6JV%HX{Hig)k suLT-RhftRq8b9;(V=235Wa|I=027H2wCDra;{X5v07*qoM6N<$f;9x^2LJ#7 literal 0 HcmV?d00001 diff --git a/animations/step_05_a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png b/animations/step_05_a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..4cd7b0099ca80c806f8fe495613e8d6c69460d76 GIT binary patch literal 282 zcmV+#0p(^bcu7P-R4C8Q z&e;xxFbF_Vrezo%_kH*OKhshZ6BFpG-Y1e10`QXJKbND7AMQ&cMj60B5TNObaZxYybcN07*qoM6N<$g3m;S%K!iX literal 0 HcmV?d00001 diff --git a/animations/step_05_a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png b/animations/step_05_a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..fe730945a01f64a61e2235dbe3f45b08f7729182 GIT binary patch literal 462 zcmV;<0WtoGP)-}iV`2<;=$?g5M=KQbZ{F&YRNy7Nn@%_*5{gvDM0aKI4?ESmw z{NnZg)A0R`+4?NF_RZexyVB&^^ZvN!{I28tr{Vje;QNTz`dG&Jz0~Ek&f2;*Z7>B|cg}xYpxEFY+0YrKLF;^Q+-HreN0P{&i zK~zY`?b7ECf-n?@;d<&orQ*Q7KoR%4|C>{W^h6@&01>0SKS`dn{Q}GT%Qj_{PLZ_& zs`MFI#j-(>?bvdZ!8^xTwlY{qA)T4QLbY@j(!YJ7aXJervHy6HaG_2SB`6CC{He}f zHVw(fJWApwPq!6VY7r1w-Fs)@ox~N+q|w~e;JI~C4Vf^@d>Wvj=fl`^u9x9wd9 zR%3*Q+)t%S!MU_`id^@&Y{y7-r98lZX0?YrHlfmwb?#}^1b{8g&KzmkE(L>Z&)179 zp<)v6Y}pRl100G2FL_t(o!|l{-Q-VMg#&MKg7c{O0 z2wJImOS3Gy*Z2Qifdv~JYOp;v+U)a|nLoc7hNH;I$;lzDt$}rkaFw1mYK5_0Q(Sut zvbEloxON7$+HSOgC9Z8ltuC&0OSF!-mXv5caV>#bc3@hBPX@I$58-z}(ZZE!t-aOG zpjNkbau@>yEzH(5Yj4kZiMH32XI!4~gVXNnjAvRx;Sdg^`>2DpUEwoMhTs_st8pKG z(%SHyHdU&v%f36~uERh!bd`!T2dw;z6PrOTQ7Vt*#9F2uHlUVnb#ev_o^fh}Dzmq} zWtlk35}k=?xj28uO|5>>$yXadTUE@@IPpgH`gJ~Ro4>jd1IF|(+IX>8M4Ps{PNvmI zNj4D+XgN83gPt_Gm}`Ybv{;+&yu-C(Grdiahmo~BjG-l&mWM+{e5M1sm&=xduwgM9 z`8OEh`=F3r`^E{n_;%9weN{cf2%7=VzC@cYj+lg>+3|D|_1C@{hcU(DyQG_BvBWe? zvTv``=%b1zrol#=R`JB)>cdjpWt&rLJgVp-t?DREyuq1A%0Z4)6_WsQ7{nzjN zo!X zGXV)2i3kcZIL~_j>uIKPK_zib+3T+Nt3Mb&Br)s)UIaA}@p{wDda>7=Q|mGRp7pqY zkJ!7E{MNz$9nOwoVqpFb)}$IP24Wn2JJ=Cw(!`OXJBr45rP>>AQr$6c7slJWvbpNW z@KTwna6d?PP>hvXCcp=4F;=GR@R4E7{4VU^0p4F>v^#A|>07*qoM6N<$f*5nx ACIA2c literal 0 HcmV?d00001 diff --git a/animations/step_05_a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png b/animations/step_05_a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..502f463a9bc882b461c96aadf492d1729e49e725 GIT binary patch literal 586 zcmV-Q0=4~#P)+}#`wDE{8-2Mebf5<{{PqV{TgVcv*r8?UZ3{-|G?_}T*&y;@cqf{ z{Q*~+qr%%p!1pS*_Uicl#q9lc(D`!D`LN62sNwq{oYw(Wmhk)k<@f$!$@ng~_5)Ru z0Z)trIA5^j{DIW^c+vT2%lW+2<(RtE2wR;4O@)Tm`Xr*?A(qYoM}7i5Yxw>D(&6ou zxz!_Xr~yNF+waPe00049Nkl*;a!v6h%{rlvIH#gW3s8p;bFr=l}mRqpW2h zw=OA%hdyL~z+UHOzl0eKhEr$YYOL-c-%Y<)=j?(bzDweB7{b+%_ypvm_cG{SvM=DK zhv{K@m>#Bw>2W$eUI#iU)Wdgs8Y3U+A$Gd&{+j)d)BmGKx+43U_!tik_YlN)>$7G! zhkE!s;%oku3;IwG3U^2kw?z+HM)jB{@zFhK8P#KMSytSthr+4!c(5c%+^UBn`0X*2 zy3(k600_CSZj?O$Qu%&$;|TGUJrptR(HzyIx>5E(2r{eA(<6t3e3I0B)7d6s7?Z5J zZ!rtKvA{MiEBm&KFtoifx>5P^Z=vl)95XJn()aS5%ad(s?4-=Tkis9IGu{`Fy8r+H07*qoM6N<$f20Z)wqMt%V?S?~D#06};F zA3KcL`Wb+>5ObvgQIG&ig8(;V04hz?@cqy3{mSh8o!|U|)cI!1_+!fWH@o*8vh^CU z^ws0;(c$gI+2~q^tO#GDHf@=;DncUw00J^eL_t(&-tE|HQ`%4vfZ;WsBqu-$0nu1R zq^Vj;p$clf^?twn|KHO+IGt^q#a3X?w9dXC@*yxhv&l}F322(8Y1&=P&I}~G@#h6; z1CV9ecD9ZEe87{{NtI*)_aJ<`kJa z?5=RBtFF50s;jQLFil-`)m2wrb=6h(&brpj%nG_U&ut~$?8Rokzxi8zJoWr#2dto5 zOX_URcc<1`Iky+jc;A%Vzx}1QU{2$|cKPom2Vf1{8m`vja4{F>HS?^Nc^rp}xo+Nh zxd}eOm`fm3@MQC1< zIk&aCjb~Yh%5+Yq0`)D;q{#-Uqlv*o+Oor zE!I71Z@ASH3grl8&P^L0WpavHoP|UX4e?!igT`4?AZk$hu*@%6WJ;zDOGlw7kj@ zY5!B-0ft0f?Lgb>C;$Ke07*qoM6N<$f~t1N9smFU literal 0 HcmV?d00001 diff --git a/animations/step_05_a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png b/animations/step_05_a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..0ec303439225b78712f49115768196d8d76f6790 GIT binary patch literal 862 zcmV-k1EKthP)20Z)wqMt%V?S?~D#06};F zA3KcL`Wb+>5ObvgQIG&ig8(;V04hz?@cqy3{mSh8o!|U|)cI!1_+!fWH@o*8vh^CU z^ws0;(c$gI+2~q^tO#GDHf@=;DncUw00J^eL_t(&-tE|HQ`%4vfZ;WsBqu-$0nu1R zq^Vj;p$clf^?twn|KHO+IGt^q#a3X?w9dXC@*yxhv&l}F322(8Y1&=P&I}~G@#h6; z1CV9ecD9ZEe87{{NtI*)_aJ<`kJa z?5=RBtFF50s;jQLFil-`)m2wrb=6h(&brpj%nG_U&ut~$?8Rokzxi8zJoWr#2dto5 zOX_URcc<1`Iky+jc;A%Vzx}1QU{2$|cKPom2Vf1{8m`vja4{F>HS?^Nc^rp}xo+Nh zxd}eOm`fm3@MQC1< zIk&aCjb~Yh%5+Yq0`)D;q{#-Uqlv*o+Oor zE!I71Z@ASH3grl8&P^L0WpavHoP|UX4e?!igT`4?AZk$hu*@%6WJ;zDOGlw7kj@ zY5!B-0ft0f?Lgb>C;$Ke07*qoM6N<$f~t1N9smFU literal 0 HcmV?d00001 diff --git a/animations/step_05_a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png b/animations/step_05_a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..e9f5fea27c705180eb716271f41b582e76dcbd90 GIT binary patch literal 1674 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 literal 0 HcmV?d00001 diff --git a/animations/step_05_a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png b/animations/step_05_a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..0467bf12aa4d28f374bb26596605a46dcbb3e7c8 GIT binary patch literal 1418 zcmV;51$Fv~P)q zKfU)WzW*n(@|xWGCA9ScMt*e9`2kdxPQ&&>|-UCa7_51w+ zLUsW@ZzZSW0y$)Hp~e9%PvP|a03ks1`~K?q{u;6NC8*{AOqIUq{CL&;p56Lf$oQGq z^={4hPQv)y=I|4n+?>7Fim=dxt1 z2H+Dm+1+fh+IF>G0SjJMkQQre1x4|G*Z==(Ot&kCnUrL4I(rf(ucITwmuHf^hXiJT zkdTm&kdTm&kdTm&kdP`esgWG0BcWCVkVZ&2dUwN`cgM8QJb`Z7Z~e<&Yj2(}>Tmf` zm1{eLgw!b{bXkjWbF%dTkTZEJWyWOb##Lfw4EK2}<0d6%>AGS{po>WCOy&f$Tay_> z?NBlkpo@s-O;0V%Y_Xa-G#_O08q5LR*~F%&)}{}r&L%Sbs8AS4t7Y0NEx*{soY=0MZExqA5XHQkqi#4gW3 zqODM^iyZl;dvf)-bOXtOru(s)Uc7~BFx{w-FK;2{`VA?(g&@3z&bfLFyctOH!cVsF z7IL=fo-qBndRUm;kAdXR4e6>k-z|21AaN%ubeVrHl*<|s&Ax@W-t?LR(P-24A5=>a z*R9#QvjzF8n%@1Nw@?CG@6(%>+-0ASK~jEmCV|&a*7-GKT72W<(TbSjf)&Eme6nGE z>Gkj4Sq&2e+-G%|+NM8OOm5zVl9{Z8Dd8A5z3y8mZ=4Bv4%>as_{9cN#bm~;h>62( zdqY93Zy}v&c4n($Vv!UybR8ocs7#zbfX1IY-*w~)p}XyZ-SFC~4w>BvMVr`dFbelV{lLL0bx7@*ZZdebr3`sP;? zVImji)kG)(6Juv0lz@q`F!k1FE;CQ(D0iG$wchPbKZQELlsZ#~rt8#90Y_Xh&3U-< z{s<&cCV_1`^TD^ia9!*mQDq& zn2{r`j};V|uV%_wsP!zB?m%;FeaRe+X47K0e+KE!8C{gAWF8)lCd1u1%~|M!XNRvw zvtqy3iz0WSpWdhn6$hP8PaRBmp)q`#PCA`Vd#Tc$@f1tAcM>f_I@bC)hkI9|o(Iqv zo}Piadq!j76}004RBio<`)70k^`K1NK)q>w?p^C6J2ZC!+UppiK6&y3Kmbv&O!oYF z34$0Z;QO!JOY#!`qyGH<3Pd}Pt@q*A0V=3SVtWKRR8d8Z&@)3qLPA19LPA19LPEUC YUoZo%k(ykuW&i*H07*qoM6N<$f+CH{y8r+H literal 0 HcmV?d00001 diff --git a/animations/step_05_a/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json b/animations/step_05_a/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json new file mode 100644 index 0000000000..0bedcf2fd4 --- /dev/null +++ b/animations/step_05_a/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "LaunchImage.png", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "LaunchImage@2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "filename" : "LaunchImage@3x.png", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} diff --git a/animations/step_05_a/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png b/animations/step_05_a/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png new file mode 100644 index 0000000000000000000000000000000000000000..9da19eacad3b03bb08bbddbbf4ac48dd78b3d838 GIT binary patch literal 68 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx0wlM}@Gt=>Zci7-kcv6Uzs@r-FtIZ-&5|)J Q1PU{Fy85}Sb4q9e0B4a5jsO4v literal 0 HcmV?d00001 diff --git a/animations/step_05_a/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png b/animations/step_05_a/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..9da19eacad3b03bb08bbddbbf4ac48dd78b3d838 GIT binary patch literal 68 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx0wlM}@Gt=>Zci7-kcv6Uzs@r-FtIZ-&5|)J Q1PU{Fy85}Sb4q9e0B4a5jsO4v literal 0 HcmV?d00001 diff --git a/animations/step_05_a/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png b/animations/step_05_a/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..9da19eacad3b03bb08bbddbbf4ac48dd78b3d838 GIT binary patch literal 68 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx0wlM}@Gt=>Zci7-kcv6Uzs@r-FtIZ-&5|)J Q1PU{Fy85}Sb4q9e0B4a5jsO4v literal 0 HcmV?d00001 diff --git a/animations/step_05_a/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md b/animations/step_05_a/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md new file mode 100644 index 0000000000..89c2725b70 --- /dev/null +++ b/animations/step_05_a/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md @@ -0,0 +1,5 @@ +# Launch Screen Assets + +You can customize the launch screen with your own desired assets by replacing the image files in this directory. + +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. \ No newline at end of file diff --git a/animations/step_05_a/ios/Runner/Base.lproj/LaunchScreen.storyboard b/animations/step_05_a/ios/Runner/Base.lproj/LaunchScreen.storyboard new file mode 100644 index 0000000000..f2e259c7c9 --- /dev/null +++ b/animations/step_05_a/ios/Runner/Base.lproj/LaunchScreen.storyboard @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/animations/step_05_a/ios/Runner/Base.lproj/Main.storyboard b/animations/step_05_a/ios/Runner/Base.lproj/Main.storyboard new file mode 100644 index 0000000000..f3c28516fb --- /dev/null +++ b/animations/step_05_a/ios/Runner/Base.lproj/Main.storyboard @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/animations/step_05_a/ios/Runner/Info.plist b/animations/step_05_a/ios/Runner/Info.plist new file mode 100644 index 0000000000..1a0d38e408 --- /dev/null +++ b/animations/step_05_a/ios/Runner/Info.plist @@ -0,0 +1,49 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleDisplayName + Quiz + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + quiz + CFBundlePackageType + APPL + CFBundleShortVersionString + $(FLUTTER_BUILD_NAME) + CFBundleSignature + ???? + CFBundleVersion + $(FLUTTER_BUILD_NUMBER) + LSRequiresIPhoneOS + + UILaunchStoryboardName + LaunchScreen + UIMainStoryboardFile + Main + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + CADisableMinimumFrameDurationOnPhone + + UIApplicationSupportsIndirectInputEvents + + + diff --git a/animations/step_05_a/ios/Runner/Runner-Bridging-Header.h b/animations/step_05_a/ios/Runner/Runner-Bridging-Header.h new file mode 100644 index 0000000000..308a2a560b --- /dev/null +++ b/animations/step_05_a/ios/Runner/Runner-Bridging-Header.h @@ -0,0 +1 @@ +#import "GeneratedPluginRegistrant.h" diff --git a/animations/step_05_a/ios/RunnerTests/RunnerTests.swift b/animations/step_05_a/ios/RunnerTests/RunnerTests.swift new file mode 100644 index 0000000000..86a7c3b1b6 --- /dev/null +++ b/animations/step_05_a/ios/RunnerTests/RunnerTests.swift @@ -0,0 +1,12 @@ +import Flutter +import UIKit +import XCTest + +class RunnerTests: XCTestCase { + + func testExample() { + // If you add code to the Runner application, consider adding tests here. + // See https://developer.apple.com/documentation/xctest for more information about using XCTest. + } + +} diff --git a/animations/step_05_a/lib/flip_effect.dart b/animations/step_05_a/lib/flip_effect.dart new file mode 100644 index 0000000000..953c479ae9 --- /dev/null +++ b/animations/step_05_a/lib/flip_effect.dart @@ -0,0 +1,85 @@ +import 'package:flutter/widgets.dart'; +import 'dart:math' as math; + +class CardFlipEffect extends StatefulWidget { + final Widget child; + final Duration duration; + final double delayAmount; + + const CardFlipEffect({ + super.key, + required this.child, + required this.duration, + required this.delayAmount, + }); + + @override + State createState() => _CardFlipEffectState(); +} + +class _CardFlipEffectState extends State + with SingleTickerProviderStateMixin { + late final AnimationController _animationController; + Widget? _previousChild; + late final Animation _animationWithDelay; + + @override + void initState() { + super.initState(); + + _animationController = AnimationController( + vsync: this, + duration: widget.duration * (widget.delayAmount + 1), + ); + + _animationController.addListener(() { + if (_animationController.value == 1) { + _animationController.reset(); + } + }); + + _animationWithDelay = TweenSequence([ + if (widget.delayAmount > 0) + TweenSequenceItem( + tween: ConstantTween(0.0), + weight: widget.delayAmount, + ), + TweenSequenceItem(tween: Tween(begin: 0.0, end: 1.0), weight: 1.0), + ]).animate(_animationController); + } + + @override + void didUpdateWidget(covariant CardFlipEffect oldWidget) { + super.didUpdateWidget(oldWidget); + + if (widget.child.key != oldWidget.child.key) { + _handleChildChanged(widget.child, oldWidget.child); + } + } + + void _handleChildChanged(Widget newChild, Widget previousChild) { + _previousChild = previousChild; + _animationController.forward(); + } + + @override + Widget build(BuildContext context) { + return AnimatedBuilder( + animation: _animationWithDelay, + builder: (context, child) { + return Transform( + alignment: Alignment.center, + transform: + Matrix4.identity()..rotateX(_animationWithDelay.value * math.pi), + child: + _animationController.isAnimating + ? _animationWithDelay.value < 0.5 + ? _previousChild + : Transform.flip(flipY: true, child: widget.child) + : widget.child, + ); + }, + child: widget.child, + ); + } +} diff --git a/animations/step_05_a/lib/home_screen.dart b/animations/step_05_a/lib/home_screen.dart new file mode 100644 index 0000000000..c15065adaa --- /dev/null +++ b/animations/step_05_a/lib/home_screen.dart @@ -0,0 +1,49 @@ +import 'package:flutter/material.dart'; +import 'question_screen.dart'; + +class HomeScreen extends StatelessWidget { + const HomeScreen({super.key}); + + @override + Widget build(BuildContext context) { + return Scaffold( + body: Center( + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + Text('✏️', style: Theme.of(context).textTheme.displayLarge), + Text( + 'Flutter Quiz', + style: Theme.of(context).textTheme.displayLarge!.copyWith( + fontWeight: FontWeight.w700, + color: Theme.of(context).colorScheme.onPrimaryFixedVariant, + ), + ), + ElevatedButton( + onPressed: () { + // Show the question screen to start the game + Navigator.push( + context, + PageRouteBuilder( + pageBuilder: (context, animation, secondaryAnimation) { + return const QuestionScreen(); + }, + transitionsBuilder: ( + context, + animation, + secondaryAnimation, + child, + ) { + return FadeTransition(opacity: animation, child: child); + }, + ), + ); + }, + child: const Text('New Game'), + ), + ], + ), + ), + ); + } +} diff --git a/animations/step_05_a/lib/main.dart b/animations/step_05_a/lib/main.dart new file mode 100644 index 0000000000..1d399ebf36 --- /dev/null +++ b/animations/step_05_a/lib/main.dart @@ -0,0 +1,23 @@ +import 'package:flutter/material.dart'; + +import 'home_screen.dart'; + +void main() { + runApp(MainApp()); +} + +class MainApp extends StatelessWidget { + const MainApp({super.key}); + + @override + Widget build(BuildContext context) { + return MaterialApp( + debugShowCheckedModeBanner: false, + theme: ThemeData( + colorScheme: ColorScheme.fromSeed(seedColor: Colors.blue), + useMaterial3: true, + ), + home: HomeScreen(), + ); + } +} diff --git a/animations/step_05_a/lib/model.dart b/animations/step_05_a/lib/model.dart new file mode 100644 index 0000000000..56666d11dc --- /dev/null +++ b/animations/step_05_a/lib/model.dart @@ -0,0 +1,52 @@ +import 'dart:math' as math; + +class Question { + final String question; + final List possibleAnswers; + final int correctAnswer; + Question(this.question, this.possibleAnswers, this.correctAnswer); +} + +class QuestionBank { + final List _questions = _createQuestions(); + + bool get hasNextQuestion => _questions.isNotEmpty; + int get remainingQuestions => _questions.length; + + Question? getRandomQuestion() { + if (_questions.isEmpty) { + return null; + } + + var i = math.Random().nextInt(_questions.length); + var question = _questions[i]; + + _questions.removeAt(i); + return question; + } +} + +List _createQuestions() { + return [ + Question( + 'What class used to create custom explicit animations in Flutter?', + ['AnimationController', 'AnimatedWidget', 'AnimatedBuilder', 'Tween'], + 0, + ), + Question( + 'Which widget is used to rebuild its child whenever an animation changes?', + [ + 'AnimatedContainer', + 'AnimatedBuilder', + 'AnimatedSwitcher', + 'AnimatedOpacity', + ], + 1, + ), + Question( + 'What class is used to define the start and end values for an animation?', + ['Tween', 'Curve', 'AnimationController', 'AnimatedWidget'], + 0, + ), + ]; +} diff --git a/animations/step_05_a/lib/question_screen.dart b/animations/step_05_a/lib/question_screen.dart new file mode 100644 index 0000000000..9cce323aa7 --- /dev/null +++ b/animations/step_05_a/lib/question_screen.dart @@ -0,0 +1,206 @@ +import 'package:flutter/material.dart'; +import 'flip_effect.dart'; +import 'scoreboard.dart'; +import 'view_model.dart'; + +class QuestionScreen extends StatefulWidget { + const QuestionScreen({super.key}); + + @override + State createState() => _QuestionScreenState(); +} + +class _QuestionScreenState extends State { + late final QuizViewModel viewModel = QuizViewModel( + onGameOver: _handleGameOver, + ); + + @override + Widget build(BuildContext context) { + return ListenableBuilder( + listenable: viewModel, + builder: (context, child) { + return Scaffold( + appBar: AppBar( + actions: [ + TextButton( + onPressed: + viewModel.hasNextQuestion && viewModel.didAnswerQuestion + ? () { + viewModel.getNextQuestion(); + } + : null, + child: const Text('Next'), + ), + ], + ), + body: Center( + child: Column( + children: [ + QuestionCard(question: viewModel.currentQuestion?.question), + Spacer(), + AnswerCards( + onTapped: (index) { + viewModel.checkAnswer(index); + }, + answers: viewModel.currentQuestion?.possibleAnswers ?? [], + correctAnswer: + viewModel.didAnswerQuestion + ? viewModel.currentQuestion?.correctAnswer + : null, + ), + StatusBar(viewModel: viewModel), + ], + ), + ), + ); + }, + ); + } + + void _handleGameOver() { + showDialog( + barrierDismissible: false, + context: context, + builder: (context) { + return AlertDialog( + title: Text('Game Over!'), + content: Text('Score: ${viewModel.score}'), + actions: [ + TextButton( + onPressed: () { + Navigator.popUntil(context, (route) => route.isFirst); + }, + child: Text('OK'), + ), + ], + ); + }, + ); + } +} + +class QuestionCard extends StatelessWidget { + final String? question; + + const QuestionCard({required this.question, super.key}); + + @override + Widget build(BuildContext context) { + return AnimatedSwitcher( + layoutBuilder: (Widget? currentChild, List previousChildren) { + return Stack( + alignment: Alignment.topCenter, + children: [ + ...previousChildren, + if (currentChild != null) currentChild, + ], + ); + }, + transitionBuilder: (Widget child, Animation animation) { + final curveAnimation = CurveTween( + curve: Curves.easeInCubic, + ).animate(animation); + final offsetAnimation = Tween( + begin: Offset(-0.1, 0.0), + end: Offset.zero, + ).animate(curveAnimation); + final fadeInAnimation = curveAnimation; + return FadeTransition( + opacity: fadeInAnimation, + child: SlideTransition(position: offsetAnimation, child: child), + ); + }, + duration: const Duration(milliseconds: 300), + child: Card( + key: ValueKey(question), + elevation: 4, + child: Padding( + padding: const EdgeInsets.all(16.0), + child: Text( + question ?? "", + style: Theme.of(context).textTheme.displaySmall, + ), + ), + ), + ); + } +} + +class AnswerCards extends StatelessWidget { + final List answers; + final ValueChanged onTapped; + final int? correctAnswer; + + const AnswerCards({ + required this.answers, + required this.onTapped, + required this.correctAnswer, + super.key, + }); + + @override + Widget build(BuildContext context) { + return GridView.count( + shrinkWrap: true, + crossAxisCount: 2, + childAspectRatio: 5 / 2, + children: List.generate(answers.length, (index) { + var color = Theme.of(context).colorScheme.primaryContainer; + if (correctAnswer == index) { + color = Theme.of(context).colorScheme.tertiaryContainer; + } + + return CardFlipEffect( + delayAmount: index.toDouble() / 2, + duration: const Duration(milliseconds: 300), + child: Card.filled( + key: ValueKey(answers[index]), + color: color, + elevation: 2, + margin: const EdgeInsets.all(8), + clipBehavior: Clip.hardEdge, + child: InkWell( + onTap: () => onTapped(index), + child: Padding( + padding: const EdgeInsets.all(16.0), + child: Center( + child: Text( + answers.length > index ? answers[index] : "", + style: Theme.of(context).textTheme.titleMedium, + overflow: TextOverflow.clip, + ), + ), + ), + ), + ), + ); + }), + ); + } +} + +class StatusBar extends StatelessWidget { + final QuizViewModel viewModel; + + const StatusBar({required this.viewModel, super.key}); + + @override + Widget build(BuildContext context) { + return Card( + elevation: 4, + child: Padding( + padding: EdgeInsets.all(8.0), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceAround, + children: [ + Scoreboard( + score: viewModel.score, + totalQuestions: viewModel.totalQuestions, + ), + ], + ), + ), + ); + } +} diff --git a/animations/step_05_a/lib/scoreboard.dart b/animations/step_05_a/lib/scoreboard.dart new file mode 100644 index 0000000000..765711fe87 --- /dev/null +++ b/animations/step_05_a/lib/scoreboard.dart @@ -0,0 +1,56 @@ +import 'package:flutter/material.dart'; + +class Scoreboard extends StatelessWidget { + final int score; + final int totalQuestions; + + const Scoreboard({ + super.key, + required this.score, + required this.totalQuestions, + }); + + @override + Widget build(BuildContext context) { + return Padding( + padding: const EdgeInsets.all(8.0), + child: Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + for (var i = 0; i < totalQuestions; i++) + AnimatedStar(isActive: score > i), + ], + ), + ); + } +} + +class AnimatedStar extends StatelessWidget { + final bool isActive; + final Duration _duration = const Duration(milliseconds: 1000); + final Color _deactivatedColor = Colors.grey.shade400; + final Color _activatedColor = Colors.yellow.shade700; + final Curve _curve = Curves.elasticOut; + + AnimatedStar({super.key, required this.isActive}); + + @override + Widget build(BuildContext context) { + return AnimatedScale( + scale: isActive ? 1.0 : 0.5, + curve: _curve, + duration: _duration, + child: TweenAnimationBuilder( + curve: _curve, + duration: _duration, + tween: ColorTween( + begin: _deactivatedColor, + end: isActive ? _activatedColor : _deactivatedColor, + ), + builder: (context, value, child) { + return Icon(Icons.star, size: 50, color: value); + }, + ), + ); + } +} diff --git a/animations/step_05_a/lib/view_model.dart b/animations/step_05_a/lib/view_model.dart new file mode 100644 index 0000000000..84fc5f218b --- /dev/null +++ b/animations/step_05_a/lib/view_model.dart @@ -0,0 +1,43 @@ +import 'package:flutter/cupertino.dart'; +import 'model.dart'; + +class QuizViewModel extends ChangeNotifier { + final QuestionBank _questionBank = QuestionBank(); + final VoidCallback onGameOver; + late final int totalQuestions; + Question? currentQuestion; + int answeredQuestionCount = 0; + int score = 0; + bool didAnswerQuestion = false; + bool get hasNextQuestion => answeredQuestionCount < totalQuestions; + + QuizViewModel({required this.onGameOver}) { + totalQuestions = _questionBank.remainingQuestions; + getNextQuestion(); + } + + void getNextQuestion() { + if (_questionBank.hasNextQuestion) { + currentQuestion = _questionBank.getRandomQuestion(); + answeredQuestionCount++; + } + + didAnswerQuestion = false; + + notifyListeners(); + } + + void checkAnswer(int selectedIndex) { + if (!didAnswerQuestion && currentQuestion?.correctAnswer == selectedIndex) { + score++; + } + + didAnswerQuestion = true; + + if (!_questionBank.hasNextQuestion) { + onGameOver(); + } + + notifyListeners(); + } +} diff --git a/animations/step_05_a/linux/.gitignore b/animations/step_05_a/linux/.gitignore new file mode 100644 index 0000000000..d3896c9844 --- /dev/null +++ b/animations/step_05_a/linux/.gitignore @@ -0,0 +1 @@ +flutter/ephemeral diff --git a/animations/step_05_a/linux/CMakeLists.txt b/animations/step_05_a/linux/CMakeLists.txt new file mode 100644 index 0000000000..7caf822271 --- /dev/null +++ b/animations/step_05_a/linux/CMakeLists.txt @@ -0,0 +1,128 @@ +# Project-level configuration. +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# The name of the executable created for the application. Change this to change +# the on-disk name of your application. +set(BINARY_NAME "quiz") +# The unique GTK application identifier for this application. See: +# https://wiki.gnome.org/HowDoI/ChooseApplicationID +set(APPLICATION_ID "com.example.quiz") + +# Explicitly opt in to modern CMake behaviors to avoid warnings with recent +# versions of CMake. +cmake_policy(SET CMP0063 NEW) + +# Load bundled libraries from the lib/ directory relative to the binary. +set(CMAKE_INSTALL_RPATH "$ORIGIN/lib") + +# Root filesystem for cross-building. +if(FLUTTER_TARGET_PLATFORM_SYSROOT) + set(CMAKE_SYSROOT ${FLUTTER_TARGET_PLATFORM_SYSROOT}) + set(CMAKE_FIND_ROOT_PATH ${CMAKE_SYSROOT}) + set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) + set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY) + set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) + set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) +endif() + +# Define build configuration options. +if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) + set(CMAKE_BUILD_TYPE "Debug" CACHE + STRING "Flutter build mode" FORCE) + set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS + "Debug" "Profile" "Release") +endif() + +# Compilation settings that should be applied to most targets. +# +# Be cautious about adding new options here, as plugins use this function by +# default. In most cases, you should add new options to specific targets instead +# of modifying this function. +function(APPLY_STANDARD_SETTINGS TARGET) + target_compile_features(${TARGET} PUBLIC cxx_std_14) + target_compile_options(${TARGET} PRIVATE -Wall -Werror) + target_compile_options(${TARGET} PRIVATE "$<$>:-O3>") + target_compile_definitions(${TARGET} PRIVATE "$<$>:NDEBUG>") +endfunction() + +# Flutter library and tool build rules. +set(FLUTTER_MANAGED_DIR "${CMAKE_CURRENT_SOURCE_DIR}/flutter") +add_subdirectory(${FLUTTER_MANAGED_DIR}) + +# System-level dependencies. +find_package(PkgConfig REQUIRED) +pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) + +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") + +# Run the Flutter tool portions of the build. This must not be removed. +add_dependencies(${BINARY_NAME} flutter_assemble) + +# Only the install-generated bundle's copy of the executable will launch +# correctly, since the resources must in the right relative locations. To avoid +# people trying to run the unbundled copy, put it in a subdirectory instead of +# the default top-level location. +set_target_properties(${BINARY_NAME} + PROPERTIES + RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/intermediates_do_not_run" +) + + +# Generated plugin build rules, which manage building the plugins and adding +# them to the application. +include(flutter/generated_plugins.cmake) + + +# === Installation === +# By default, "installing" just makes a relocatable bundle in the build +# directory. +set(BUILD_BUNDLE_DIR "${PROJECT_BINARY_DIR}/bundle") +if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) + set(CMAKE_INSTALL_PREFIX "${BUILD_BUNDLE_DIR}" CACHE PATH "..." FORCE) +endif() + +# Start with a clean build bundle directory every time. +install(CODE " + file(REMOVE_RECURSE \"${BUILD_BUNDLE_DIR}/\") + " COMPONENT Runtime) + +set(INSTALL_BUNDLE_DATA_DIR "${CMAKE_INSTALL_PREFIX}/data") +set(INSTALL_BUNDLE_LIB_DIR "${CMAKE_INSTALL_PREFIX}/lib") + +install(TARGETS ${BINARY_NAME} RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_ICU_DATA_FILE}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) + +foreach(bundled_library ${PLUGIN_BUNDLED_LIBRARIES}) + install(FILES "${bundled_library}" + DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) +endforeach(bundled_library) + +# Copy the native assets provided by the build.dart from all packages. +set(NATIVE_ASSETS_DIR "${PROJECT_BUILD_DIR}native_assets/linux/") +install(DIRECTORY "${NATIVE_ASSETS_DIR}" + DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) + +# Fully re-copy the assets directory on each build to avoid having stale files +# from a previous install. +set(FLUTTER_ASSET_DIR_NAME "flutter_assets") +install(CODE " + file(REMOVE_RECURSE \"${INSTALL_BUNDLE_DATA_DIR}/${FLUTTER_ASSET_DIR_NAME}\") + " COMPONENT Runtime) +install(DIRECTORY "${PROJECT_BUILD_DIR}/${FLUTTER_ASSET_DIR_NAME}" + DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" COMPONENT Runtime) + +# Install the AOT library on non-Debug builds only. +if(NOT CMAKE_BUILD_TYPE MATCHES "Debug") + install(FILES "${AOT_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) +endif() diff --git a/animations/step_05_a/linux/flutter/CMakeLists.txt b/animations/step_05_a/linux/flutter/CMakeLists.txt new file mode 100644 index 0000000000..d5bd01648a --- /dev/null +++ b/animations/step_05_a/linux/flutter/CMakeLists.txt @@ -0,0 +1,88 @@ +# This file controls Flutter-level build steps. It should not be edited. +cmake_minimum_required(VERSION 3.10) + +set(EPHEMERAL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/ephemeral") + +# Configuration provided via flutter tool. +include(${EPHEMERAL_DIR}/generated_config.cmake) + +# TODO: Move the rest of this into files in ephemeral. See +# https://github.com/flutter/flutter/issues/57146. + +# Serves the same purpose as list(TRANSFORM ... PREPEND ...), +# which isn't available in 3.10. +function(list_prepend LIST_NAME PREFIX) + set(NEW_LIST "") + foreach(element ${${LIST_NAME}}) + list(APPEND NEW_LIST "${PREFIX}${element}") + endforeach(element) + set(${LIST_NAME} "${NEW_LIST}" PARENT_SCOPE) +endfunction() + +# === Flutter Library === +# System-level dependencies. +find_package(PkgConfig REQUIRED) +pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) +pkg_check_modules(GLIB REQUIRED IMPORTED_TARGET glib-2.0) +pkg_check_modules(GIO REQUIRED IMPORTED_TARGET gio-2.0) + +set(FLUTTER_LIBRARY "${EPHEMERAL_DIR}/libflutter_linux_gtk.so") + +# Published to parent scope for install step. +set(FLUTTER_LIBRARY ${FLUTTER_LIBRARY} PARENT_SCOPE) +set(FLUTTER_ICU_DATA_FILE "${EPHEMERAL_DIR}/icudtl.dat" PARENT_SCOPE) +set(PROJECT_BUILD_DIR "${PROJECT_DIR}/build/" PARENT_SCOPE) +set(AOT_LIBRARY "${PROJECT_DIR}/build/lib/libapp.so" PARENT_SCOPE) + +list(APPEND FLUTTER_LIBRARY_HEADERS + "fl_basic_message_channel.h" + "fl_binary_codec.h" + "fl_binary_messenger.h" + "fl_dart_project.h" + "fl_engine.h" + "fl_json_message_codec.h" + "fl_json_method_codec.h" + "fl_message_codec.h" + "fl_method_call.h" + "fl_method_channel.h" + "fl_method_codec.h" + "fl_method_response.h" + "fl_plugin_registrar.h" + "fl_plugin_registry.h" + "fl_standard_message_codec.h" + "fl_standard_method_codec.h" + "fl_string_codec.h" + "fl_value.h" + "fl_view.h" + "flutter_linux.h" +) +list_prepend(FLUTTER_LIBRARY_HEADERS "${EPHEMERAL_DIR}/flutter_linux/") +add_library(flutter INTERFACE) +target_include_directories(flutter INTERFACE + "${EPHEMERAL_DIR}" +) +target_link_libraries(flutter INTERFACE "${FLUTTER_LIBRARY}") +target_link_libraries(flutter INTERFACE + PkgConfig::GTK + PkgConfig::GLIB + PkgConfig::GIO +) +add_dependencies(flutter flutter_assemble) + +# === Flutter tool backend === +# _phony_ is a non-existent file to force this command to run every time, +# since currently there's no way to get a full input/output list from the +# flutter tool. +add_custom_command( + OUTPUT ${FLUTTER_LIBRARY} ${FLUTTER_LIBRARY_HEADERS} + ${CMAKE_CURRENT_BINARY_DIR}/_phony_ + COMMAND ${CMAKE_COMMAND} -E env + ${FLUTTER_TOOL_ENVIRONMENT} + "${FLUTTER_ROOT}/packages/flutter_tools/bin/tool_backend.sh" + ${FLUTTER_TARGET_PLATFORM} ${CMAKE_BUILD_TYPE} + VERBATIM +) +add_custom_target(flutter_assemble DEPENDS + "${FLUTTER_LIBRARY}" + ${FLUTTER_LIBRARY_HEADERS} +) diff --git a/animations/step_05_a/linux/flutter/generated_plugin_registrant.cc b/animations/step_05_a/linux/flutter/generated_plugin_registrant.cc new file mode 100644 index 0000000000..e71a16d23d --- /dev/null +++ b/animations/step_05_a/linux/flutter/generated_plugin_registrant.cc @@ -0,0 +1,11 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#include "generated_plugin_registrant.h" + + +void fl_register_plugins(FlPluginRegistry* registry) { +} diff --git a/animations/step_05_a/linux/flutter/generated_plugin_registrant.h b/animations/step_05_a/linux/flutter/generated_plugin_registrant.h new file mode 100644 index 0000000000..e0f0a47bc0 --- /dev/null +++ b/animations/step_05_a/linux/flutter/generated_plugin_registrant.h @@ -0,0 +1,15 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#ifndef GENERATED_PLUGIN_REGISTRANT_ +#define GENERATED_PLUGIN_REGISTRANT_ + +#include + +// Registers Flutter plugins. +void fl_register_plugins(FlPluginRegistry* registry); + +#endif // GENERATED_PLUGIN_REGISTRANT_ diff --git a/animations/step_05_a/linux/flutter/generated_plugins.cmake b/animations/step_05_a/linux/flutter/generated_plugins.cmake new file mode 100644 index 0000000000..2e1de87a7e --- /dev/null +++ b/animations/step_05_a/linux/flutter/generated_plugins.cmake @@ -0,0 +1,23 @@ +# +# Generated file, do not edit. +# + +list(APPEND FLUTTER_PLUGIN_LIST +) + +list(APPEND FLUTTER_FFI_PLUGIN_LIST +) + +set(PLUGIN_BUNDLED_LIBRARIES) + +foreach(plugin ${FLUTTER_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${plugin}/linux plugins/${plugin}) + target_link_libraries(${BINARY_NAME} PRIVATE ${plugin}_plugin) + list(APPEND PLUGIN_BUNDLED_LIBRARIES $) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${plugin}_bundled_libraries}) +endforeach(plugin) + +foreach(ffi_plugin ${FLUTTER_FFI_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${ffi_plugin}/linux plugins/${ffi_plugin}) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${ffi_plugin}_bundled_libraries}) +endforeach(ffi_plugin) diff --git a/animations/step_05_a/linux/runner/CMakeLists.txt b/animations/step_05_a/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/animations/step_05_a/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/animations/step_05_a/linux/runner/main.cc b/animations/step_05_a/linux/runner/main.cc new file mode 100644 index 0000000000..e7c5c54370 --- /dev/null +++ b/animations/step_05_a/linux/runner/main.cc @@ -0,0 +1,6 @@ +#include "my_application.h" + +int main(int argc, char** argv) { + g_autoptr(MyApplication) app = my_application_new(); + return g_application_run(G_APPLICATION(app), argc, argv); +} diff --git a/animations/step_05_a/linux/runner/my_application.cc b/animations/step_05_a/linux/runner/my_application.cc new file mode 100644 index 0000000000..0040d7e46c --- /dev/null +++ b/animations/step_05_a/linux/runner/my_application.cc @@ -0,0 +1,130 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "quiz"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "quiz"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/animations/step_05_a/linux/runner/my_application.h b/animations/step_05_a/linux/runner/my_application.h new file mode 100644 index 0000000000..72271d5e41 --- /dev/null +++ b/animations/step_05_a/linux/runner/my_application.h @@ -0,0 +1,18 @@ +#ifndef FLUTTER_MY_APPLICATION_H_ +#define FLUTTER_MY_APPLICATION_H_ + +#include + +G_DECLARE_FINAL_TYPE(MyApplication, my_application, MY, APPLICATION, + GtkApplication) + +/** + * my_application_new: + * + * Creates a new Flutter-based application. + * + * Returns: a new #MyApplication. + */ +MyApplication* my_application_new(); + +#endif // FLUTTER_MY_APPLICATION_H_ diff --git a/animations/step_05_a/macos/.gitignore b/animations/step_05_a/macos/.gitignore new file mode 100644 index 0000000000..746adbb6b9 --- /dev/null +++ b/animations/step_05_a/macos/.gitignore @@ -0,0 +1,7 @@ +# Flutter-related +**/Flutter/ephemeral/ +**/Pods/ + +# Xcode-related +**/dgph +**/xcuserdata/ diff --git a/animations/step_05_a/macos/Flutter/Flutter-Debug.xcconfig b/animations/step_05_a/macos/Flutter/Flutter-Debug.xcconfig new file mode 100644 index 0000000000..c2efd0b608 --- /dev/null +++ b/animations/step_05_a/macos/Flutter/Flutter-Debug.xcconfig @@ -0,0 +1 @@ +#include "ephemeral/Flutter-Generated.xcconfig" diff --git a/animations/step_05_a/macos/Flutter/Flutter-Release.xcconfig b/animations/step_05_a/macos/Flutter/Flutter-Release.xcconfig new file mode 100644 index 0000000000..c2efd0b608 --- /dev/null +++ b/animations/step_05_a/macos/Flutter/Flutter-Release.xcconfig @@ -0,0 +1 @@ +#include "ephemeral/Flutter-Generated.xcconfig" diff --git a/animations/step_05_a/macos/Flutter/GeneratedPluginRegistrant.swift b/animations/step_05_a/macos/Flutter/GeneratedPluginRegistrant.swift new file mode 100644 index 0000000000..cccf817a52 --- /dev/null +++ b/animations/step_05_a/macos/Flutter/GeneratedPluginRegistrant.swift @@ -0,0 +1,10 @@ +// +// Generated file. Do not edit. +// + +import FlutterMacOS +import Foundation + + +func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { +} diff --git a/animations/step_05_a/macos/Runner.xcodeproj/project.pbxproj b/animations/step_05_a/macos/Runner.xcodeproj/project.pbxproj new file mode 100644 index 0000000000..45c35dfed5 --- /dev/null +++ b/animations/step_05_a/macos/Runner.xcodeproj/project.pbxproj @@ -0,0 +1,705 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 54; + objects = { + +/* Begin PBXAggregateTarget section */ + 33CC111A2044C6BA0003C045 /* Flutter Assemble */ = { + isa = PBXAggregateTarget; + buildConfigurationList = 33CC111B2044C6BA0003C045 /* Build configuration list for PBXAggregateTarget "Flutter Assemble" */; + buildPhases = ( + 33CC111E2044C6BF0003C045 /* ShellScript */, + ); + dependencies = ( + ); + name = "Flutter Assemble"; + productName = FLX; + }; +/* End PBXAggregateTarget section */ + +/* Begin PBXBuildFile section */ + 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; + 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; + 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; + 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; + 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; + 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 331C80D9294CF71000263BE5 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 33CC10E52044A3C60003C045 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 33CC10EC2044A3C60003C045; + remoteInfo = Runner; + }; + 33CC111F2044C79F0003C045 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 33CC10E52044A3C60003C045 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 33CC111A2044C6BA0003C045; + remoteInfo = FLX; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 33CC110E2044A8840003C045 /* Bundle Framework */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + ); + name = "Bundle Framework"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; + 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; + 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; }; + 33CC10ED2044A3C60003C045 /* quiz.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "quiz.app"; sourceTree = BUILT_PRODUCTS_DIR; }; + 33CC10F02044A3C60003C045 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 33CC10F22044A3C60003C045 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = Runner/Assets.xcassets; sourceTree = ""; }; + 33CC10F52044A3C60003C045 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = ""; }; + 33CC10F72044A3C60003C045 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = Info.plist; path = Runner/Info.plist; sourceTree = ""; }; + 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainFlutterWindow.swift; sourceTree = ""; }; + 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Debug.xcconfig"; sourceTree = ""; }; + 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Release.xcconfig"; sourceTree = ""; }; + 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = "Flutter-Generated.xcconfig"; path = "ephemeral/Flutter-Generated.xcconfig"; sourceTree = ""; }; + 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; + 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; + 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; + 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 331C80D2294CF70F00263BE5 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 33CC10EA2044A3C60003C045 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 331C80D6294CF71000263BE5 /* RunnerTests */ = { + isa = PBXGroup; + children = ( + 331C80D7294CF71000263BE5 /* RunnerTests.swift */, + ); + path = RunnerTests; + sourceTree = ""; + }; + 33BA886A226E78AF003329D5 /* Configs */ = { + isa = PBXGroup; + children = ( + 33E5194F232828860026EE4D /* AppInfo.xcconfig */, + 9740EEB21CF90195004384FC /* Debug.xcconfig */, + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, + 333000ED22D3DE5D00554162 /* Warnings.xcconfig */, + ); + path = Configs; + sourceTree = ""; + }; + 33CC10E42044A3C60003C045 = { + isa = PBXGroup; + children = ( + 33FAB671232836740065AC1E /* Runner */, + 33CEB47122A05771004F2AC0 /* Flutter */, + 331C80D6294CF71000263BE5 /* RunnerTests */, + 33CC10EE2044A3C60003C045 /* Products */, + D73912EC22F37F3D000D13A0 /* Frameworks */, + ); + sourceTree = ""; + }; + 33CC10EE2044A3C60003C045 /* Products */ = { + isa = PBXGroup; + children = ( + 33CC10ED2044A3C60003C045 /* quiz.app */, + 331C80D5294CF71000263BE5 /* RunnerTests.xctest */, + ); + name = Products; + sourceTree = ""; + }; + 33CC11242044D66E0003C045 /* Resources */ = { + isa = PBXGroup; + children = ( + 33CC10F22044A3C60003C045 /* Assets.xcassets */, + 33CC10F42044A3C60003C045 /* MainMenu.xib */, + 33CC10F72044A3C60003C045 /* Info.plist */, + ); + name = Resources; + path = ..; + sourceTree = ""; + }; + 33CEB47122A05771004F2AC0 /* Flutter */ = { + isa = PBXGroup; + children = ( + 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */, + 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */, + 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */, + 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */, + ); + path = Flutter; + sourceTree = ""; + }; + 33FAB671232836740065AC1E /* Runner */ = { + isa = PBXGroup; + children = ( + 33CC10F02044A3C60003C045 /* AppDelegate.swift */, + 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */, + 33E51913231747F40026EE4D /* DebugProfile.entitlements */, + 33E51914231749380026EE4D /* Release.entitlements */, + 33CC11242044D66E0003C045 /* Resources */, + 33BA886A226E78AF003329D5 /* Configs */, + ); + path = Runner; + sourceTree = ""; + }; + D73912EC22F37F3D000D13A0 /* Frameworks */ = { + isa = PBXGroup; + children = ( + ); + name = Frameworks; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 331C80D4294CF70F00263BE5 /* RunnerTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; + buildPhases = ( + 331C80D1294CF70F00263BE5 /* Sources */, + 331C80D2294CF70F00263BE5 /* Frameworks */, + 331C80D3294CF70F00263BE5 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 331C80DA294CF71000263BE5 /* PBXTargetDependency */, + ); + name = RunnerTests; + productName = RunnerTests; + productReference = 331C80D5294CF71000263BE5 /* RunnerTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; + 33CC10EC2044A3C60003C045 /* Runner */ = { + isa = PBXNativeTarget; + buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; + buildPhases = ( + 33CC10E92044A3C60003C045 /* Sources */, + 33CC10EA2044A3C60003C045 /* Frameworks */, + 33CC10EB2044A3C60003C045 /* Resources */, + 33CC110E2044A8840003C045 /* Bundle Framework */, + 3399D490228B24CF009A79C7 /* ShellScript */, + ); + buildRules = ( + ); + dependencies = ( + 33CC11202044C79F0003C045 /* PBXTargetDependency */, + ); + name = Runner; + productName = Runner; + productReference = 33CC10ED2044A3C60003C045 /* quiz.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 33CC10E52044A3C60003C045 /* Project object */ = { + isa = PBXProject; + attributes = { + BuildIndependentTargetsInParallel = YES; + LastSwiftUpdateCheck = 0920; + LastUpgradeCheck = 1510; + ORGANIZATIONNAME = ""; + TargetAttributes = { + 331C80D4294CF70F00263BE5 = { + CreatedOnToolsVersion = 14.0; + TestTargetID = 33CC10EC2044A3C60003C045; + }; + 33CC10EC2044A3C60003C045 = { + CreatedOnToolsVersion = 9.2; + LastSwiftMigration = 1100; + ProvisioningStyle = Automatic; + SystemCapabilities = { + com.apple.Sandbox = { + enabled = 1; + }; + }; + }; + 33CC111A2044C6BA0003C045 = { + CreatedOnToolsVersion = 9.2; + ProvisioningStyle = Manual; + }; + }; + }; + buildConfigurationList = 33CC10E82044A3C60003C045 /* Build configuration list for PBXProject "Runner" */; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 33CC10E42044A3C60003C045; + productRefGroup = 33CC10EE2044A3C60003C045 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 33CC10EC2044A3C60003C045 /* Runner */, + 331C80D4294CF70F00263BE5 /* RunnerTests */, + 33CC111A2044C6BA0003C045 /* Flutter Assemble */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 331C80D3294CF70F00263BE5 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 33CC10EB2044A3C60003C045 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */, + 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 3399D490228B24CF009A79C7 /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; + }; + 33CC111E2044C6BF0003C045 /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + Flutter/ephemeral/FlutterInputs.xcfilelist, + ); + inputPaths = ( + Flutter/ephemeral/tripwire, + ); + outputFileListPaths = ( + Flutter/ephemeral/FlutterOutputs.xcfilelist, + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 331C80D1294CF70F00263BE5 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 33CC10E92044A3C60003C045 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */, + 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */, + 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 331C80DA294CF71000263BE5 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 33CC10EC2044A3C60003C045 /* Runner */; + targetProxy = 331C80D9294CF71000263BE5 /* PBXContainerItemProxy */; + }; + 33CC11202044C79F0003C045 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 33CC111A2044C6BA0003C045 /* Flutter Assemble */; + targetProxy = 33CC111F2044C79F0003C045 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + 33CC10F42044A3C60003C045 /* MainMenu.xib */ = { + isa = PBXVariantGroup; + children = ( + 33CC10F52044A3C60003C045 /* Base */, + ); + name = MainMenu.xib; + path = Runner; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 331C80DB294CF71000263BE5 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.quiz.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/quiz.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/quiz"; + }; + name = Debug; + }; + 331C80DC294CF71000263BE5 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.quiz.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/quiz.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/quiz"; + }; + name = Release; + }; + 331C80DD294CF71000263BE5 /* Profile */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.quiz.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/quiz.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/quiz"; + }; + name = Profile; + }; + 338D0CE9231458BD00FA5F75 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + DEAD_CODE_STRIPPING = YES; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.14; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = macosx; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + }; + name = Profile; + }; + 338D0CEA231458BD00FA5F75 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_VERSION = 5.0; + }; + name = Profile; + }; + 338D0CEB231458BD00FA5F75 /* Profile */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Manual; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Profile; + }; + 33CC10F92044A3C60003C045 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + DEAD_CODE_STRIPPING = YES; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.14; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = macosx; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + }; + name = Debug; + }; + 33CC10FA2044A3C60003C045 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + DEAD_CODE_STRIPPING = YES; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.14; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = macosx; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + }; + name = Release; + }; + 33CC10FC2044A3C60003C045 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + }; + name = Debug; + }; + 33CC10FD2044A3C60003C045 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/Release.entitlements; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_VERSION = 5.0; + }; + name = Release; + }; + 33CC111C2044C6BA0003C045 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Manual; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Debug; + }; + 33CC111D2044C6BA0003C045 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Automatic; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 331C80DB294CF71000263BE5 /* Debug */, + 331C80DC294CF71000263BE5 /* Release */, + 331C80DD294CF71000263BE5 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 33CC10E82044A3C60003C045 /* Build configuration list for PBXProject "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 33CC10F92044A3C60003C045 /* Debug */, + 33CC10FA2044A3C60003C045 /* Release */, + 338D0CE9231458BD00FA5F75 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 33CC10FC2044A3C60003C045 /* Debug */, + 33CC10FD2044A3C60003C045 /* Release */, + 338D0CEA231458BD00FA5F75 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 33CC111B2044C6BA0003C045 /* Build configuration list for PBXAggregateTarget "Flutter Assemble" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 33CC111C2044C6BA0003C045 /* Debug */, + 33CC111D2044C6BA0003C045 /* Release */, + 338D0CEB231458BD00FA5F75 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 33CC10E52044A3C60003C045 /* Project object */; +} diff --git a/animations/step_05_a/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/animations/step_05_a/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000000..18d981003d --- /dev/null +++ b/animations/step_05_a/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/animations/step_05_a/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/animations/step_05_a/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme new file mode 100644 index 0000000000..2f413cb17b --- /dev/null +++ b/animations/step_05_a/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -0,0 +1,98 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/animations/step_05_a/macos/Runner.xcworkspace/contents.xcworkspacedata b/animations/step_05_a/macos/Runner.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000000..1d526a16ed --- /dev/null +++ b/animations/step_05_a/macos/Runner.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/animations/step_05_a/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/animations/step_05_a/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000000..18d981003d --- /dev/null +++ b/animations/step_05_a/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/animations/step_05_a/macos/Runner/AppDelegate.swift b/animations/step_05_a/macos/Runner/AppDelegate.swift new file mode 100644 index 0000000000..b3c1761412 --- /dev/null +++ b/animations/step_05_a/macos/Runner/AppDelegate.swift @@ -0,0 +1,13 @@ +import Cocoa +import FlutterMacOS + +@main +class AppDelegate: FlutterAppDelegate { + override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { + return true + } + + override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { + return true + } +} diff --git a/animations/step_05_a/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/animations/step_05_a/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000000..a2ec33f19f --- /dev/null +++ b/animations/step_05_a/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,68 @@ +{ + "images" : [ + { + "size" : "16x16", + "idiom" : "mac", + "filename" : "app_icon_16.png", + "scale" : "1x" + }, + { + "size" : "16x16", + "idiom" : "mac", + "filename" : "app_icon_32.png", + "scale" : "2x" + }, + { + "size" : "32x32", + "idiom" : "mac", + "filename" : "app_icon_32.png", + "scale" : "1x" + }, + { + "size" : "32x32", + "idiom" : "mac", + "filename" : "app_icon_64.png", + "scale" : "2x" + }, + { + "size" : "128x128", + "idiom" : "mac", + "filename" : "app_icon_128.png", + "scale" : "1x" + }, + { + "size" : "128x128", + "idiom" : "mac", + "filename" : "app_icon_256.png", + "scale" : "2x" + }, + { + "size" : "256x256", + "idiom" : "mac", + "filename" : "app_icon_256.png", + "scale" : "1x" + }, + { + "size" : "256x256", + "idiom" : "mac", + "filename" : "app_icon_512.png", + "scale" : "2x" + }, + { + "size" : "512x512", + "idiom" : "mac", + "filename" : "app_icon_512.png", + "scale" : "1x" + }, + { + "size" : "512x512", + "idiom" : "mac", + "filename" : "app_icon_1024.png", + "scale" : "2x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} diff --git a/animations/step_05_a/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png b/animations/step_05_a/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png new file mode 100644 index 0000000000000000000000000000000000000000..82b6f9d9a33e198f5747104729e1fcef999772a5 GIT binary patch literal 102994 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ⅅ8MglG&ER{i5lN315cO?EdHNLrg? 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 z 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 Pe7HEdAEg|=c=LY&YVNkY literal 0 HcmV?d00001 diff --git a/animations/step_05_a/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png b/animations/step_05_a/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png new file mode 100644 index 0000000000000000000000000000000000000000..13b35eba55c6dabc3aac36f33d859266c18fa0d0 GIT binary patch literal 5680 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 literal 0 HcmV?d00001 diff --git a/animations/step_05_a/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png b/animations/step_05_a/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png new file mode 100644 index 0000000000000000000000000000000000000000..0a3f5fa40fb3d1e0710331a48de5d256da3f275d GIT binary patch literal 520 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 literal 0 HcmV?d00001 diff --git a/animations/step_05_a/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png b/animations/step_05_a/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png new file mode 100644 index 0000000000000000000000000000000000000000..2f1632cfddf3d9dade342351e627a0a75609fb46 GIT binary patch literal 2218 zcmV;b2vzrqP)Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91K%fHv1ONa40RR91KmY&$07g+lumAuE6iGxuRCodHTWf3-RTMruyW6Fu zQYeUM04eX6D5c0FCjKKPrco1(K`<0SL=crI{PC3-^hZU0kQie$gh-5!7z6SH6Q0J% zqot*`H1q{R5fHFYS}dje@;kG=v$L0(yY0?wY2%*c?A&{2?!D*x?m71{of2gv!$5|C z3>qG_BW}7K_yUcT3A5C6QD<+{aq?x;MAUyAiJn#Jv8_zZtQ{P zTRzbL3U9!qVuZzS$xKU10KiW~Bgdcv1-!uAhQxf3a7q+dU6lj?yoO4Lq4TUN4}h{N z*fIM=SS8|C2$(T>w$`t@3Tka!(r!7W`x z-isCVgQD^mG-MJ;XtJuK3V{Vy72GQ83KRWsHU?e*wrhKk=ApIYeDqLi;JI1e zuvv}5^Dc=k7F7?nm3nIw$NVmU-+R>> zyqOR$-2SDpJ}Pt;^RkJytDVXNTsu|mI1`~G7yw`EJR?VkGfNdqK9^^8P`JdtTV&tX4CNcV4 z&N06nZa??Fw1AgQOUSE2AmPE@WO(Fvo`%m`cDgiv(fAeRA%3AGXUbsGw{7Q`cY;1BI#ac3iN$$Hw z0LT0;xc%=q)me?Y*$xI@GRAw?+}>=9D+KTk??-HJ4=A>`V&vKFS75@MKdSF1JTq{S zc1!^8?YA|t+uKigaq!sT;Z!&0F2=k7F0PIU;F$leJLaw2UI6FL^w}OG&!;+b%ya1c z1n+6-inU<0VM-Y_s5iTElq)ThyF?StVcebpGI znw#+zLx2@ah{$_2jn+@}(zJZ{+}_N9BM;z)0yr|gF-4=Iyu@hI*Lk=-A8f#bAzc9f z`Kd6K--x@t04swJVC3JK1cHY-Hq+=|PN-VO;?^_C#;coU6TDP7Bt`;{JTG;!+jj(` zw5cLQ-(Cz-Tlb`A^w7|R56Ce;Wmr0)$KWOUZ6ai0PhzPeHwdl0H(etP zUV`va_i0s-4#DkNM8lUlqI7>YQLf)(lz9Q3Uw`)nc(z3{m5ZE77Ul$V%m)E}3&8L0 z-XaU|eB~Is08eORPk;=<>!1w)Kf}FOVS2l&9~A+@R#koFJ$Czd%Y(ENTV&A~U(IPI z;UY+gf+&6ioZ=roly<0Yst8ck>(M=S?B-ys3mLdM&)ex!hbt+ol|T6CTS+Sc0jv(& z7ijdvFwBq;0a{%3GGwkDKTeG`b+lyj0jjS1OMkYnepCdoosNY`*zmBIo*981BU%%U z@~$z0V`OVtIbEx5pa|Tct|Lg#ZQf5OYMUMRD>Wdxm5SAqV2}3!ceE-M2 z@O~lQ0OiKQp}o9I;?uxCgYVV?FH|?Riri*U$Zi_`V2eiA>l zdSm6;SEm6#T+SpcE8Ro_f2AwxzI z44hfe^WE3!h@W3RDyA_H440cpmYkv*)6m1XazTqw%=E5Xv7^@^^T7Q2wxr+Z2kVYr + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/animations/step_05_a/macos/Runner/Configs/AppInfo.xcconfig b/animations/step_05_a/macos/Runner/Configs/AppInfo.xcconfig new file mode 100644 index 0000000000..28c7905763 --- /dev/null +++ b/animations/step_05_a/macos/Runner/Configs/AppInfo.xcconfig @@ -0,0 +1,14 @@ +// Application-level settings for the Runner target. +// +// This may be replaced with something auto-generated from metadata (e.g., pubspec.yaml) in the +// future. If not, the values below would default to using the project name when this becomes a +// 'flutter create' template. + +// The application's name. By default this is also the title of the Flutter window. +PRODUCT_NAME = quiz + +// The application's bundle identifier +PRODUCT_BUNDLE_IDENTIFIER = com.example.quiz + +// The copyright displayed in application information +PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved. diff --git a/animations/step_05_a/macos/Runner/Configs/Debug.xcconfig b/animations/step_05_a/macos/Runner/Configs/Debug.xcconfig new file mode 100644 index 0000000000..36b0fd9464 --- /dev/null +++ b/animations/step_05_a/macos/Runner/Configs/Debug.xcconfig @@ -0,0 +1,2 @@ +#include "../../Flutter/Flutter-Debug.xcconfig" +#include "Warnings.xcconfig" diff --git a/animations/step_05_a/macos/Runner/Configs/Release.xcconfig b/animations/step_05_a/macos/Runner/Configs/Release.xcconfig new file mode 100644 index 0000000000..dff4f49561 --- /dev/null +++ b/animations/step_05_a/macos/Runner/Configs/Release.xcconfig @@ -0,0 +1,2 @@ +#include "../../Flutter/Flutter-Release.xcconfig" +#include "Warnings.xcconfig" diff --git a/animations/step_05_a/macos/Runner/Configs/Warnings.xcconfig b/animations/step_05_a/macos/Runner/Configs/Warnings.xcconfig new file mode 100644 index 0000000000..42bcbf4780 --- /dev/null +++ b/animations/step_05_a/macos/Runner/Configs/Warnings.xcconfig @@ -0,0 +1,13 @@ +WARNING_CFLAGS = -Wall -Wconditional-uninitialized -Wnullable-to-nonnull-conversion -Wmissing-method-return-type -Woverlength-strings +GCC_WARN_UNDECLARED_SELECTOR = YES +CLANG_UNDEFINED_BEHAVIOR_SANITIZER_NULLABILITY = YES +CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE +CLANG_WARN__DUPLICATE_METHOD_MATCH = YES +CLANG_WARN_PRAGMA_PACK = YES +CLANG_WARN_STRICT_PROTOTYPES = YES +CLANG_WARN_COMMA = YES +GCC_WARN_STRICT_SELECTOR_MATCH = YES +CLANG_WARN_OBJC_REPEATED_USE_OF_WEAK = YES +CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES +GCC_WARN_SHADOW = YES +CLANG_WARN_UNREACHABLE_CODE = YES diff --git a/animations/step_05_a/macos/Runner/DebugProfile.entitlements b/animations/step_05_a/macos/Runner/DebugProfile.entitlements new file mode 100644 index 0000000000..dddb8a30c8 --- /dev/null +++ b/animations/step_05_a/macos/Runner/DebugProfile.entitlements @@ -0,0 +1,12 @@ + + + + + com.apple.security.app-sandbox + + com.apple.security.cs.allow-jit + + com.apple.security.network.server + + + diff --git a/animations/step_05_a/macos/Runner/Info.plist b/animations/step_05_a/macos/Runner/Info.plist new file mode 100644 index 0000000000..4789daa6a4 --- /dev/null +++ b/animations/step_05_a/macos/Runner/Info.plist @@ -0,0 +1,32 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIconFile + + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + APPL + CFBundleShortVersionString + $(FLUTTER_BUILD_NAME) + CFBundleVersion + $(FLUTTER_BUILD_NUMBER) + LSMinimumSystemVersion + $(MACOSX_DEPLOYMENT_TARGET) + NSHumanReadableCopyright + $(PRODUCT_COPYRIGHT) + NSMainNibFile + MainMenu + NSPrincipalClass + NSApplication + + diff --git a/animations/step_05_a/macos/Runner/MainFlutterWindow.swift b/animations/step_05_a/macos/Runner/MainFlutterWindow.swift new file mode 100644 index 0000000000..3cc05eb234 --- /dev/null +++ b/animations/step_05_a/macos/Runner/MainFlutterWindow.swift @@ -0,0 +1,15 @@ +import Cocoa +import FlutterMacOS + +class MainFlutterWindow: NSWindow { + override func awakeFromNib() { + let flutterViewController = FlutterViewController() + let windowFrame = self.frame + self.contentViewController = flutterViewController + self.setFrame(windowFrame, display: true) + + RegisterGeneratedPlugins(registry: flutterViewController) + + super.awakeFromNib() + } +} diff --git a/animations/step_05_a/macos/Runner/Release.entitlements b/animations/step_05_a/macos/Runner/Release.entitlements new file mode 100644 index 0000000000..852fa1a472 --- /dev/null +++ b/animations/step_05_a/macos/Runner/Release.entitlements @@ -0,0 +1,8 @@ + + + + + com.apple.security.app-sandbox + + + diff --git a/animations/step_05_a/macos/RunnerTests/RunnerTests.swift b/animations/step_05_a/macos/RunnerTests/RunnerTests.swift new file mode 100644 index 0000000000..61f3bd1fc5 --- /dev/null +++ b/animations/step_05_a/macos/RunnerTests/RunnerTests.swift @@ -0,0 +1,12 @@ +import Cocoa +import FlutterMacOS +import XCTest + +class RunnerTests: XCTestCase { + + func testExample() { + // If you add code to the Runner application, consider adding tests here. + // See https://developer.apple.com/documentation/xctest for more information about using XCTest. + } + +} diff --git a/animations/step_05_a/pubspec.yaml b/animations/step_05_a/pubspec.yaml new file mode 100644 index 0000000000..d8e843d9c9 --- /dev/null +++ b/animations/step_05_a/pubspec.yaml @@ -0,0 +1,21 @@ +name: quiz +description: A quiz app for demonstrating animation effects in Flutter +publish_to: "none" +version: 1.0.0 + +environment: + sdk: ^3.7.0-0 + +dependencies: + animations: ^2.0.0 + flutter: + sdk: flutter + +dev_dependencies: + flutter_test: + sdk: flutter + flutter_lints: ^4.0.0 + + +flutter: + uses-material-design: true diff --git a/animations/step_05_a/web/favicon.png b/animations/step_05_a/web/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..8aaa46ac1ae21512746f852a42ba87e4165dfdd1 GIT binary patch literal 917 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|I14-?iy0X7 zltGxWVyS%@P(fs7NJL45ua8x7ey(0(N`6wRUPW#JP&EUCO@$SZnVVXYs8ErclUHn2 zVXFjIVFhG^g!Ppaz)DK8ZIvQ?0~DO|i&7O#^-S~(l1AfjnEK zjFOT9D}DX)@^Za$W4-*MbbUihOG|wNBYh(yU7!lx;>x^|#0uTKVr7USFmqf|i<65o z3raHc^AtelCMM;Vme?vOfh>Xph&xL%(-1c06+^uR^q@XSM&D4+Kp$>4P^%3{)XKjo zGZknv$b36P8?Z_gF{nK@`XI}Z90TzwSQO}0J1!f2c(B=V`5aP@1P1a|PZ!4!3&Gl8 zTYqUsf!gYFyJnXpu0!n&N*SYAX-%d(5gVjrHJWqXQshj@!Zm{!01WsQrH~9=kTxW#6SvuapgMqt>$=j#%eyGrQzr zP{L-3gsMA^$I1&gsBAEL+vxi1*Igl=8#8`5?A-T5=z-sk46WA1IUT)AIZHx1rdUrf zVJrJn<74DDw`j)Ki#gt}mIT-Q`XRa2-jQXQoI%w`nb|XblvzK${ZzlV)m-XcwC(od z71_OEC5Bt9GEXosOXaPTYOia#R4ID2TiU~`zVMl08TV_C%DnU4^+HE>9(CE4D6?Fz oujB08i7adh9xk7*FX66dWH6F5TM;?E2b5PlUHx3vIVCg!0Dx9vYXATM literal 0 HcmV?d00001 diff --git a/animations/step_05_a/web/icons/Icon-192.png b/animations/step_05_a/web/icons/Icon-192.png new file mode 100644 index 0000000000000000000000000000000000000000..b749bfef07473333cf1dd31e9eed89862a5d52aa GIT binary patch literal 5292 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 literal 0 HcmV?d00001 diff --git a/animations/step_05_a/web/icons/Icon-512.png b/animations/step_05_a/web/icons/Icon-512.png new file mode 100644 index 0000000000000000000000000000000000000000..88cfd48dff1169879ba46840804b412fe02fefd6 GIT binary patch literal 8252 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 literal 0 HcmV?d00001 diff --git a/animations/step_05_a/web/icons/Icon-maskable-192.png b/animations/step_05_a/web/icons/Icon-maskable-192.png new file mode 100644 index 0000000000000000000000000000000000000000..eb9b4d76e525556d5d89141648c724331630325d GIT binary patch literal 5594 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 X>c!)3PgKfL&lX^$Z>Cpu&6)6jvi^Z! literal 0 HcmV?d00001 diff --git a/animations/step_05_a/web/icons/Icon-maskable-512.png b/animations/step_05_a/web/icons/Icon-maskable-512.png new file mode 100644 index 0000000000000000000000000000000000000000..d69c56691fbdb0b7efa65097c7cc1edac12a6d3e GIT binary patch literal 20998 zcmeFZ_gj-)&^4Nb2tlbLMU<{!p(#yjqEe+=0IA_oih%ScH9@5#MNp&}Y#;;(h=A0@ zh7{>lT2MkSQ344eAvrhici!td|HJuyvJm#Y_w1Q9Yu3!26dNlO-oxUDK_C#XnW^Co z5C{VN6#{~B0)K2j7}*1Xq(Nqemv23A-6&=ZpEijkVnSwVGqLv40?n0=p;k3-U5e5+ z+z3>aS`u9DS=!wg8ROu?X4TFoW6CFLL&{GzoVT)ldhLekLM|+j3tIxRd|*5=c{=s&*vfPdBr(Fyj(v@%eQj1Soy7m4^@VRl1~@-PV7y+c!xz$8436WBn$t{=}mEdK#k`aystimGgI{(IBx$!pAwFoE9Y`^t^;> zKAD)C(Dl^s%`?q5$P|fZf8Xymrtu^Pv(7D`rn>Z-w$Ahs!z9!94WNVxrJuXfHAaxg zC6s@|Z1$7R$(!#t%Jb{{s6(Y?NoQXDYq)!}X@jKPhe`{9KQ@sAU8y-5`xt?S9$jKH zoi}6m5PcG*^{kjvt+kwPpyQzVg4o)a>;LK`aaN2x4@itBD3Aq?yWTM20VRn1rrd+2 zKO=P0rMjEGq_UqpMa`~7B|p?xAN1SCoCp}QxAv8O`jLJ5CVh@umR%c%i^)6!o+~`F zaalSTQcl5iwOLC&H)efzd{8(88mo`GI(56T<(&p7>Qd^;R1hn1Y~jN~tApaL8>##U zd65bo8)79CplWxr#z4!6HvLz&N7_5AN#x;kLG?zQ(#p|lj<8VUlKY=Aw!ATqeL-VG z42gA!^cMNPj>(`ZMEbCrnkg*QTsn*u(nQPWI9pA{MQ=IsPTzd7q5E#7+z>Ch=fx$~ z;J|?(5jTo5UWGvsJa(Sx0?S#56+8SD!I^tftyeh_{5_31l6&Hywtn`bbqYDqGZXI( zCG7hBgvksX2ak8+)hB4jnxlO@A32C_RM&g&qDSb~3kM&)@A_j1*oTO@nicGUyv+%^ z=vB)4(q!ykzT==Z)3*3{atJ5}2PV*?Uw+HhN&+RvKvZL3p9E?gHjv{6zM!A|z|UHK z-r6jeLxbGn0D@q5aBzlco|nG2tr}N@m;CJX(4#Cn&p&sLKwzLFx1A5izu?X_X4x8r@K*d~7>t1~ zDW1Mv5O&WOxbzFC`DQ6yNJ(^u9vJdj$fl2dq`!Yba_0^vQHXV)vqv1gssZYzBct!j zHr9>ydtM8wIs}HI4=E}qAkv|BPWzh3^_yLH(|kdb?x56^BlDC)diWyPd*|f!`^12_U>TD^^94OCN0lVv~Sgvs94ecpE^}VY$w`qr_>Ue zTfH~;C<3H<0dS5Rkf_f@1x$Gms}gK#&k()IC0zb^QbR!YLoll)c$Agfi6MKI0dP_L z=Uou&u~~^2onea2%XZ@>`0x^L8CK6=I{ge;|HXMj)-@o~h&O{CuuwBX8pVqjJ*o}5 z#8&oF_p=uSo~8vn?R0!AMWvcbZmsrj{ZswRt(aEdbi~;HeVqIe)-6*1L%5u$Gbs}| zjFh?KL&U(rC2izSGtwP5FnsR@6$-1toz?RvLD^k~h9NfZgzHE7m!!7s6(;)RKo2z} zB$Ci@h({l?arO+vF;s35h=|WpefaOtKVx>l399}EsX@Oe3>>4MPy%h&^3N_`UTAHJ zI$u(|TYC~E4)|JwkWW3F!Tib=NzjHs5ii2uj0^m|Qlh-2VnB#+X~RZ|`SA*}}&8j9IDv?F;(Y^1=Z0?wWz;ikB zewU>MAXDi~O7a~?jx1x=&8GcR-fTp>{2Q`7#BE#N6D@FCp`?ht-<1|y(NArxE_WIu zP+GuG=Qq>SHWtS2M>34xwEw^uvo4|9)4s|Ac=ud?nHQ>ax@LvBqusFcjH0}{T3ZPQ zLO1l<@B_d-(IS682}5KA&qT1+{3jxKolW+1zL4inqBS-D>BohA!K5++41tM@ z@xe<-qz27}LnV#5lk&iC40M||JRmZ*A##K3+!j93eouU8@q-`W0r%7N`V$cR&JV;iX(@cS{#*5Q>~4BEDA)EikLSP@>Oo&Bt1Z~&0d5)COI%3$cLB_M?dK# z{yv2OqW!al-#AEs&QFd;WL5zCcp)JmCKJEdNsJlL9K@MnPegK23?G|O%v`@N{rIRa zi^7a}WBCD77@VQ-z_v{ZdRsWYrYgC$<^gRQwMCi6);%R~uIi31OMS}=gUTE(GKmCI z$zM>mytL{uNN+a&S38^ez(UT=iSw=l2f+a4)DyCA1Cs_N-r?Q@$3KTYosY!;pzQ0k zzh1G|kWCJjc(oZVBji@kN%)UBw(s{KaYGy=i{g3{)Z+&H8t2`^IuLLKWT6lL<-C(! zSF9K4xd-|VO;4}$s?Z7J_dYqD#Mt)WCDnsR{Kpjq275uUq6`v0y*!PHyS(}Zmv)_{>Vose9-$h8P0|y;YG)Bo}$(3Z%+Gs0RBmFiW!^5tBmDK-g zfe5%B*27ib+7|A*Fx5e)2%kIxh7xWoc3pZcXS2zik!63lAG1;sC1ja>BqH7D zODdi5lKW$$AFvxgC-l-)!c+9@YMC7a`w?G(P#MeEQ5xID#<}W$3bSmJ`8V*x2^3qz zVe<^^_8GHqYGF$nIQm0Xq2kAgYtm#UC1A(=&85w;rmg#v906 zT;RyMgbMpYOmS&S9c38^40oUp?!}#_84`aEVw;T;r%gTZkWeU;;FwM@0y0adt{-OK z(vGnPSlR=Nv2OUN!2=xazlnHPM9EWxXg2EKf0kI{iQb#FoP>xCB<)QY>OAM$Dcdbm zU6dU|%Mo(~avBYSjRc13@|s>axhrPl@Sr81{RSZUdz4(=|82XEbV*JAX6Lfbgqgz584lYgi0 z2-E{0XCVON$wHfvaLs;=dqhQJ&6aLn$D#0i(FkAVrXG9LGm3pSTf&f~RQb6|1_;W> z?n-;&hrq*~L=(;u#jS`*Yvh@3hU-33y_Kv1nxqrsf>pHVF&|OKkoC)4DWK%I!yq?P z=vXo8*_1iEWo8xCa{HJ4tzxOmqS0&$q+>LroMKI*V-rxhOc%3Y!)Y|N6p4PLE>Yek>Y(^KRECg8<|%g*nQib_Yc#A5q8Io z6Ig&V>k|~>B6KE%h4reAo*DfOH)_01tE0nWOxX0*YTJgyw7moaI^7gW*WBAeiLbD?FV9GSB zPv3`SX*^GRBM;zledO`!EbdBO_J@fEy)B{-XUTVQv}Qf~PSDpK9+@I`7G7|>Dgbbu z_7sX9%spVo$%qwRwgzq7!_N;#Td08m5HV#?^dF-EV1o)Q=Oa+rs2xH#g;ykLbwtCh znUnA^dW!XjspJ;otq$yV@I^s9Up(5k7rqhQd@OLMyyxVLj_+$#Vc*}Usevp^I(^vH zmDgHc0VMme|K&X?9&lkN{yq_(If)O`oUPW8X}1R5pSVBpfJe0t{sPA(F#`eONTh_) zxeLqHMfJX#?P(@6w4CqRE@Eiza; z;^5)Kk=^5)KDvd9Q<`=sJU8rjjxPmtWMTmzcH={o$U)j=QBuHarp?=}c??!`3d=H$nrJMyr3L-& zA#m?t(NqLM?I3mGgWA_C+0}BWy3-Gj7bR+d+U?n*mN$%5P`ugrB{PeV>jDUn;eVc- zzeMB1mI4?fVJatrNyq|+zn=!AiN~<}eoM#4uSx^K?Iw>P2*r=k`$<3kT00BE_1c(02MRz4(Hq`L^M&xt!pV2 zn+#U3@j~PUR>xIy+P>51iPayk-mqIK_5rlQMSe5&tDkKJk_$i(X&;K(11YGpEc-K= zq4Ln%^j>Zi_+Ae9eYEq_<`D+ddb8_aY!N;)(&EHFAk@Ekg&41ABmOXfWTo)Z&KotA zh*jgDGFYQ^y=m)<_LCWB+v48DTJw*5dwMm_YP0*_{@HANValf?kV-Ic3xsC}#x2h8 z`q5}d8IRmqWk%gR)s~M}(Qas5+`np^jW^oEd-pzERRPMXj$kS17g?H#4^trtKtq;C?;c ztd|%|WP2w2Nzg@)^V}!Gv++QF2!@FP9~DFVISRW6S?eP{H;;8EH;{>X_}NGj^0cg@ z!2@A>-CTcoN02^r6@c~^QUa={0xwK0v4i-tQ9wQq^=q*-{;zJ{Qe%7Qd!&X2>rV@4 z&wznCz*63_vw4>ZF8~%QCM?=vfzW0r_4O^>UA@otm_!N%mH)!ERy&b!n3*E*@?9d^ zu}s^By@FAhG(%?xgJMuMzuJw2&@$-oK>n z=UF}rt%vuaP9fzIFCYN-1&b#r^Cl6RDFIWsEsM|ROf`E?O(cy{BPO2Ie~kT+^kI^i zp>Kbc@C?}3vy-$ZFVX#-cx)Xj&G^ibX{pWggtr(%^?HeQL@Z( zM-430g<{>vT*)jK4aY9(a{lSy{8vxLbP~n1MXwM527ne#SHCC^F_2@o`>c>>KCq9c(4c$VSyMl*y3Nq1s+!DF| z^?d9PipQN(mw^j~{wJ^VOXDCaL$UtwwTpyv8IAwGOg<|NSghkAR1GSNLZ1JwdGJYm zP}t<=5=sNNUEjc=g(y)1n5)ynX(_$1-uGuDR*6Y^Wgg(LT)Jp><5X|}bt z_qMa&QP?l_n+iVS>v%s2Li_;AIeC=Ca^v1jX4*gvB$?H?2%ndnqOaK5-J%7a} zIF{qYa&NfVY}(fmS0OmXA70{znljBOiv5Yod!vFU{D~*3B3Ka{P8?^ zfhlF6o7aNT$qi8(w<}OPw5fqA7HUje*r*Oa(YV%*l0|9FP9KW@U&{VSW{&b0?@y)M zs%4k1Ax;TGYuZ9l;vP5@?3oQsp3)rjBeBvQQ>^B;z5pc=(yHhHtq6|0m(h4envn_j787fizY@V`o(!SSyE7vlMT zbo=Z1c=atz*G!kwzGB;*uPL$Ei|EbZLh8o+1BUMOpnU(uX&OG1MV@|!&HOOeU#t^x zr9=w2ow!SsTuJWT7%Wmt14U_M*3XiWBWHxqCVZI0_g0`}*^&yEG9RK9fHK8e+S^m? zfCNn$JTswUVbiC#>|=wS{t>-MI1aYPLtzO5y|LJ9nm>L6*wpr_m!)A2Fb1RceX&*|5|MwrvOk4+!0p99B9AgP*9D{Yt|x=X}O% zgIG$MrTB=n-!q%ROT|SzH#A$Xm;|ym)0>1KR}Yl0hr-KO&qMrV+0Ej3d@?FcgZ+B3 ztEk16g#2)@x=(ko8k7^Tq$*5pfZHC@O@}`SmzT1(V@x&NkZNM2F#Q-Go7-uf_zKC( zB(lHZ=3@dHaCOf6C!6i8rDL%~XM@rVTJbZL09?ht@r^Z_6x}}atLjvH^4Vk#Ibf(^LiBJFqorm?A=lE zzFmwvp4bT@Nv2V>YQT92X;t9<2s|Ru5#w?wCvlhcHLcsq0TaFLKy(?nzezJ>CECqj zggrI~Hd4LudM(m{L@ezfnpELsRFVFw>fx;CqZtie`$BXRn#Ns%AdoE$-Pf~{9A8rV zf7FbgpKmVzmvn-z(g+&+-ID=v`;6=)itq8oM*+Uz**SMm_{%eP_c0{<%1JGiZS19o z@Gj7$Se~0lsu}w!%;L%~mIAO;AY-2i`9A*ZfFs=X!LTd6nWOZ7BZH2M{l2*I>Xu)0 z`<=;ObglnXcVk!T>e$H?El}ra0WmPZ$YAN0#$?|1v26^(quQre8;k20*dpd4N{i=b zuN=y}_ew9SlE~R{2+Rh^7%PA1H5X(p8%0TpJ=cqa$65XL)$#ign-y!qij3;2>j}I; ziO@O|aYfn&up5F`YtjGw68rD3{OSGNYmBnl?zdwY$=RFsegTZ=kkzRQ`r7ZjQP!H( zp4>)&zf<*N!tI00xzm-ME_a{_I!TbDCr;8E;kCH4LlL-tqLxDuBn-+xgPk37S&S2^ z2QZumkIimwz!c@!r0)j3*(jPIs*V!iLTRl0Cpt_UVNUgGZzdvs0(-yUghJfKr7;=h zD~y?OJ-bWJg;VdZ^r@vlDoeGV&8^--!t1AsIMZ5S440HCVr%uk- z2wV>!W1WCvFB~p$P$$_}|H5>uBeAe>`N1FI8AxM|pq%oNs;ED8x+tb44E) zTj{^fbh@eLi%5AqT?;d>Es5D*Fi{Bpk)q$^iF!!U`r2hHAO_?#!aYmf>G+jHsES4W zgpTKY59d?hsb~F0WE&dUp6lPt;Pm zcbTUqRryw^%{ViNW%Z(o8}dd00H(H-MmQmOiTq{}_rnwOr*Ybo7*}3W-qBT!#s0Ie z-s<1rvvJx_W;ViUD`04%1pra*Yw0BcGe)fDKUK8aF#BwBwMPU;9`!6E(~!043?SZx z13K%z@$$#2%2ovVlgFIPp7Q6(vO)ud)=*%ZSucL2Dh~K4B|%q4KnSpj#n@(0B})!9 z8p*hY@5)NDn^&Pmo;|!>erSYg`LkO?0FB@PLqRvc>4IsUM5O&>rRv|IBRxi(RX(gJ ztQ2;??L~&Mv;aVr5Q@(?y^DGo%pO^~zijld41aA0KKsy_6FeHIn?fNHP-z>$OoWer zjZ5hFQTy*-f7KENRiCE$ZOp4|+Wah|2=n@|W=o}bFM}Y@0e62+_|#fND5cwa3;P{^pEzlJbF1Yq^}>=wy8^^^$I2M_MH(4Dw{F6hm+vrWV5!q;oX z;tTNhz5`-V={ew|bD$?qcF^WPR{L(E%~XG8eJx(DoGzt2G{l8r!QPJ>kpHeOvCv#w zr=SSwMDaUX^*~v%6K%O~i)<^6`{go>a3IdfZ8hFmz&;Y@P%ZygShQZ2DSHd`m5AR= zx$wWU06;GYwXOf(%MFyj{8rPFXD};JCe85Bdp4$YJ2$TzZ7Gr#+SwCvBI1o$QP0(c zy`P51FEBV2HTisM3bHqpmECT@H!Y2-bv2*SoSPoO?wLe{M#zDTy@ujAZ!Izzky~3k zRA1RQIIoC*Mej1PH!sUgtkR0VCNMX(_!b65mo66iM*KQ7xT8t2eev$v#&YdUXKwGm z7okYAqYF&bveHeu6M5p9xheRCTiU8PFeb1_Rht0VVSbm%|1cOVobc8mvqcw!RjrMRM#~=7xibH&Fa5Imc|lZ{eC|R__)OrFg4@X_ ze+kk*_sDNG5^ELmHnZ7Ue?)#6!O)#Nv*Dl2mr#2)w{#i-;}0*_h4A%HidnmclH#;Q zmQbq+P4DS%3}PpPm7K_K3d2s#k~x+PlTul7+kIKol0@`YN1NG=+&PYTS->AdzPv!> zQvzT=)9se*Jr1Yq+C{wbK82gAX`NkbXFZ)4==j4t51{|-v!!$H8@WKA={d>CWRW+g z*`L>9rRucS`vbXu0rzA1#AQ(W?6)}1+oJSF=80Kf_2r~Qm-EJ6bbB3k`80rCv(0d` zvCf3;L2ovYG_TES%6vSuoKfIHC6w;V31!oqHM8-I8AFzcd^+_86!EcCOX|Ta9k1!s z_Vh(EGIIsI3fb&dF$9V8v(sTBC%!#<&KIGF;R+;MyC0~}$gC}}= zR`DbUVc&Bx`lYykFZ4{R{xRaUQkWCGCQlEc;!mf=+nOk$RUg*7 z;kP7CVLEc$CA7@6VFpsp3_t~m)W0aPxjsA3e5U%SfY{tp5BV5jH-5n?YX7*+U+Zs%LGR>U- z!x4Y_|4{gx?ZPJobISy991O znrmrC3otC;#4^&Rg_iK}XH(XX+eUHN0@Oe06hJk}F?`$)KmH^eWz@@N%wEc)%>?Ft z#9QAroDeyfztQ5Qe{m*#R#T%-h*&XvSEn@N$hYRTCMXS|EPwzF3IIysD2waj`vQD{ zv_#^Pgr?s~I*NE=acf@dWVRNWTr(GN0wrL)Z2=`Dr>}&ZDNX|+^Anl{Di%v1Id$_p zK5_H5`RDjJx`BW7hc85|> zHMMsWJ4KTMRHGu+vy*kBEMjz*^K8VtU=bXJYdhdZ-?jTXa$&n)C?QQIZ7ln$qbGlr zS*TYE+ppOrI@AoPP=VI-OXm}FzgXRL)OPvR$a_=SsC<3Jb+>5makX|U!}3lx4tX&L z^C<{9TggZNoeX!P1jX_K5HkEVnQ#s2&c#umzV6s2U-Q;({l+j^?hi7JnQ7&&*oOy9 z(|0asVTWUCiCnjcOnB2pN0DpuTglKq;&SFOQ3pUdye*eT<2()7WKbXp1qq9=bhMWlF-7BHT|i3TEIT77AcjD(v=I207wi-=vyiw5mxgPdTVUC z&h^FEUrXwWs9en2C{ywZp;nvS(Mb$8sBEh-*_d-OEm%~p1b2EpcwUdf<~zmJmaSTO zSX&&GGCEz-M^)G$fBvLC2q@wM$;n4jp+mt0MJFLuJ%c`tSp8$xuP|G81GEd2ci$|M z4XmH{5$j?rqDWoL4vs!}W&!?!rtj=6WKJcE>)?NVske(p;|#>vL|M_$as=mi-n-()a*OU3Okmk0wC<9y7t^D(er-&jEEak2!NnDiOQ99Wx8{S8}=Ng!e0tzj*#T)+%7;aM$ z&H}|o|J1p{IK0Q7JggAwipvHvko6>Epmh4RFRUr}$*2K4dz85o7|3#Bec9SQ4Y*;> zXWjT~f+d)dp_J`sV*!w>B%)#GI_;USp7?0810&3S=WntGZ)+tzhZ+!|=XlQ&@G@~3 z-dw@I1>9n1{+!x^Hz|xC+P#Ab`E@=vY?3%Bc!Po~e&&&)Qp85!I|U<-fCXy*wMa&t zgDk!l;gk;$taOCV$&60z+}_$ykz=Ea*)wJQ3-M|p*EK(cvtIre0Pta~(95J7zoxBN zS(yE^3?>88AL0Wfuou$BM{lR1hkrRibz=+I9ccwd`ZC*{NNqL)3pCcw^ygMmrG^Yp zn5f}Xf>%gncC=Yq96;rnfp4FQL#{!Y*->e82rHgY4Zwy{`JH}b9*qr^VA{%~Z}jtp z_t$PlS6}5{NtTqXHN?uI8ut8rOaD#F1C^ls73S=b_yI#iZDOGz3#^L@YheGd>L;<( z)U=iYj;`{>VDNzIxcjbTk-X3keXR8Xbc`A$o5# zKGSk-7YcoBYuAFFSCjGi;7b<;n-*`USs)IX z=0q6WZ=L!)PkYtZE-6)azhXV|+?IVGTOmMCHjhkBjfy@k1>?yFO3u!)@cl{fFAXnRYsWk)kpT?X{_$J=|?g@Q}+kFw|%n!;Zo}|HE@j=SFMvT8v`6Y zNO;tXN^036nOB2%=KzxB?n~NQ1K8IO*UE{;Xy;N^ZNI#P+hRZOaHATz9(=)w=QwV# z`z3+P>9b?l-@$@P3<;w@O1BdKh+H;jo#_%rr!ute{|YX4g5}n?O7Mq^01S5;+lABE+7`&_?mR_z7k|Ja#8h{!~j)| zbBX;*fsbUak_!kXU%HfJ2J+G7;inu#uRjMb|8a){=^))y236LDZ$$q3LRlat1D)%7K0!q5hT5V1j3qHc7MG9 z_)Q=yQ>rs>3%l=vu$#VVd$&IgO}Za#?aN!xY>-<3PhzS&q!N<=1Q7VJBfHjug^4|) z*fW^;%3}P7X#W3d;tUs3;`O&>;NKZBMR8au6>7?QriJ@gBaorz-+`pUWOP73DJL=M z(33uT6Gz@Sv40F6bN|H=lpcO z^AJl}&=TIjdevuDQ!w0K*6oZ2JBOhb31q!XDArFyKpz!I$p4|;c}@^bX{>AXdt7Bm zaLTk?c%h@%xq02reu~;t@$bv`b3i(P=g}~ywgSFpM;}b$zAD+=I!7`V~}ARB(Wx0C(EAq@?GuxOL9X+ffbkn3+Op0*80TqmpAq~EXmv%cq36celXmRz z%0(!oMp&2?`W)ALA&#|fu)MFp{V~~zIIixOxY^YtO5^FSox8v$#d0*{qk0Z)pNTt0QVZ^$`4vImEB>;Lo2!7K05TpY-sl#sWBz_W-aDIV`Ksabi zvpa#93Svo!70W*Ydh)Qzm{0?CU`y;T^ITg-J9nfWeZ-sbw)G@W?$Eomf%Bg2frfh5 zRm1{|E0+(4zXy){$}uC3%Y-mSA2-^I>Tw|gQx|7TDli_hB>``)Q^aZ`LJC2V3U$SABP}T)%}9g2pF9dT}aC~!rFFgkl1J$ z`^z{Arn3On-m%}r}TGF8KQe*OjSJ=T|caa_E;v89A{t@$yT^(G9=N9F?^kT*#s3qhJq!IH5|AhnqFd z0B&^gm3w;YbMNUKU>naBAO@fbz zqw=n!@--}o5;k6DvTW9pw)IJVz;X}ncbPVrmH>4x);8cx;q3UyiML1PWp%bxSiS|^ zC5!kc4qw%NSOGQ*Kcd#&$30=lDvs#*4W4q0u8E02U)7d=!W7+NouEyuF1dyH$D@G& zaFaxo9Ex|ZXA5y{eZT*i*dP~INSMAi@mvEX@q5i<&o&#sM}Df?Og8n8Ku4vOux=T% zeuw~z1hR}ZNwTn8KsQHKLwe2>p^K`YWUJEdVEl|mO21Bov!D0D$qPoOv=vJJ`)|%_ z>l%`eexY7t{BlVKP!`a^U@nM?#9OC*t76My_E_<16vCz1x_#82qj2PkWiMWgF8bM9 z(1t4VdHcJ;B~;Q%x01k_gQ0>u2*OjuEWNOGX#4}+N?Gb5;+NQMqp}Puqw2HnkYuKA zzKFWGHc&K>gwVgI1Sc9OT1s6fq=>$gZU!!xsilA$fF`kLdGoX*^t}ao@+^WBpk>`8 z4v_~gK|c2rCq#DZ+H)$3v~Hoi=)=1D==e3P zpKrRQ+>O^cyTuWJ%2}__0Z9SM_z9rptd*;-9uC1tDw4+A!=+K%8~M&+Zk#13hY$Y$ zo-8$*8dD5@}XDi19RjK6T^J~DIXbF5w&l?JLHMrf0 zLv0{7*G!==o|B%$V!a=EtVHdMwXLtmO~vl}P6;S(R2Q>*kTJK~!}gloxj)m|_LYK{ zl(f1cB=EON&wVFwK?MGn^nWuh@f95SHatPs(jcwSY#Dnl1@_gkOJ5=f`%s$ZHljRH0 z+c%lrb=Gi&N&1>^L_}#m>=U=(oT^vTA&3!xXNyqi$pdW1BDJ#^{h|2tZc{t^vag3& zAD7*8C`chNF|27itjBUo^CCDyEpJLX3&u+(L;YeeMwnXEoyN(ytoEabcl$lSgx~Ltatn}b$@j_yyMrBb03)shJE*$;Mw=;mZd&8e>IzE+4WIoH zCSZE7WthNUL$|Y#m!Hn?x7V1CK}V`KwW2D$-7&ODy5Cj;!_tTOOo1Mm%(RUt)#$@3 zhurA)t<7qik%%1Et+N1?R#hdBB#LdQ7{%-C zn$(`5e0eFh(#c*hvF>WT*07fk$N_631?W>kfjySN8^XC9diiOd#s?4tybICF;wBjp zIPzilX3{j%4u7blhq)tnaOBZ_`h_JqHXuI7SuIlNTgBk9{HIS&3|SEPfrvcE<@}E` zKk$y*nzsqZ{J{uWW9;#n=de&&h>m#A#q)#zRonr(?mDOYU&h&aQWD;?Z(22wY?t$U3qo`?{+amA$^TkxL+Ex2dh`q7iR&TPd0Ymwzo#b? zP$#t=elB5?k$#uE$K>C$YZbYUX_JgnXA`oF_Ifz4H7LEOW~{Gww&3s=wH4+j8*TU| zSX%LtJWqhr-xGNSe{;(16kxnak6RnZ{0qZ^kJI5X*It_YuynSpi(^-}Lolr{)#z_~ zw!(J-8%7Ybo^c3(mED`Xz8xecP35a6M8HarxRn%+NJBE;dw>>Y2T&;jzRd4FSDO3T zt*y+zXCtZQ0bP0yf6HRpD|WmzP;DR^-g^}{z~0x~z4j8m zucTe%k&S9Nt-?Jb^gYW1w6!Y3AUZ0Jcq;pJ)Exz%7k+mUOm6%ApjjSmflfKwBo6`B zhNb@$NHTJ>guaj9S{@DX)!6)b-Shav=DNKWy(V00k(D!v?PAR0f0vDNq*#mYmUp6> z76KxbFDw5U{{qx{BRj(>?|C`82ICKbfLxoldov-M?4Xl+3;I4GzLHyPOzYw7{WQST zPNYcx5onA%MAO9??41Po*1zW(Y%Zzn06-lUp{s<3!_9vv9HBjT02On0Hf$}NP;wF) zP<`2p3}A^~1YbvOh{ePMx$!JGUPX-tbBzp3mDZMY;}h;sQ->!p97GA)9a|tF(Gh{1$xk7 zUw?ELkT({Xw!KIr);kTRb1b|UL`r2_`a+&UFVCdJ)1T#fdh;71EQl9790Br0m_`$x z9|ZANuchFci8GNZ{XbP=+uXSJRe(;V5laQz$u18#?X*9}x7cIEbnr%<=1cX3EIu7$ zhHW6pe5M(&qEtsqRa>?)*{O;OJT+YUhG5{km|YI7I@JL_3Hwao9aXneiSA~a* z|Lp@c-oMNyeAEuUz{F?kuou3x#C*gU?lon!RC1s37gW^0Frc`lqQWH&(J4NoZg3m8 z;Lin#8Q+cFPD7MCzj}#|ws7b@?D9Q4dVjS4dpco=4yX5SSH=A@U@yqPdp@?g?qeia zH=Tt_9)G=6C2QIPsi-QipnK(mc0xXIN;j$WLf@n8eYvMk;*H-Q4tK%(3$CN}NGgO8n}fD~+>?<3UzvsrMf*J~%i;VKQHbF%TPalFi=#sgj)(P#SM^0Q=Tr>4kJVw8X3iWsP|e8tj}NjlMdWp z@2+M4HQu~3!=bZpjh;;DIDk&X}=c8~kn)FWWH z2KL1w^rA5&1@@^X%MjZ7;u(kH=YhH2pJPFQe=hn>tZd5RC5cfGYis8s9PKaxi*}-s6*W zRA^PwR=y^5Z){!(4D9-KC;0~;b*ploznFOaU`bJ_7U?qAi#mTo!&rIECRL$_y@yI27x2?W+zqDBD5~KCVYKFZLK+>ABC(Kj zeAll)KMgIlAG`r^rS{loBrGLtzhHY8$)<_S<(Dpkr(Ym@@vnQ&rS@FC*>2@XCH}M+an74WcRDcoQ+a3@A z9tYhl5$z7bMdTvD2r&jztBuo37?*k~wcU9GK2-)MTFS-lux-mIRYUuGUCI~V$?s#< z?1qAWb(?ZLm(N>%S%y10COdaq_Tm5c^%ooIxpR=`3e4C|@O5wY+eLik&XVi5oT7oe zmxH)Jd*5eo@!7t`x8!K=-+zJ-Sz)B_V$)s1pW~CDU$=q^&ABvf6S|?TOMB-RIm@CoFg>mjIQE)?+A1_3s6zmFU_oW&BqyMz1mY*IcP_2knjq5 zqw~JK(cVsmzc7*EvTT2rvpeqhg)W=%TOZ^>f`rD4|7Z5fq*2D^lpCttIg#ictgqZ$P@ru6P#f$x#KfnfTZj~LG6U_d-kE~`;kU_X)`H5so@?C zWmb!7x|xk@0L~0JFall*@ltyiL^)@3m4MqC7(7H0sH!WidId1#f#6R{Q&A!XzO1IAcIx;$k66dumt6lpUw@nL2MvqJ5^kbOVZ<^2jt5-njy|2@`07}0w z;M%I1$FCoLy`8xp8Tk)bFr;7aJeQ9KK6p=O$U0-&JYYy8woV*>b+FB?xLX`=pirYM z5K$BA(u)+jR{?O2r$c_Qvl?M{=Ar{yQ!UVsVn4k@0!b?_lA;dVz9uaQUgBH8Oz(Sb zrEs;&Ey>_ex8&!N{PmQjp+-Hlh|OA&wvDai#GpU=^-B70V0*LF=^bi+Nhe_o|azZ%~ZZ1$}LTmWt4aoB1 zPgccm$EwYU+jrdBaQFxQfn5gd(gM`Y*Ro1n&Zi?j=(>T3kmf94vdhf?AuS8>$Va#P zGL5F+VHpxdsCUa}+RqavXCobI-@B;WJbMphpK2%6t=XvKWWE|ruvREgM+|V=i6;;O zx$g=7^`$XWn0fu!gF=Xe9cMB8Z_SelD>&o&{1XFS`|nInK3BXlaeD*rc;R-#osyIS zWv&>~^TLIyBB6oDX+#>3<_0+2C4u2zK^wmHXXDD9_)kmLYJ!0SzM|%G9{pi)`X$uf zW}|%%#LgyK7m(4{V&?x_0KEDq56tk|0YNY~B(Sr|>WVz-pO3A##}$JCT}5P7DY+@W z#gJv>pA5>$|E3WO2tV7G^SuymB?tY`ooKcN3!vaQMnBNk-WATF{-$#}FyzgtJ8M^; zUK6KWSG)}6**+rZ&?o@PK3??uN{Q)#+bDP9i1W&j)oaU5d0bIWJ_9T5ac!qc?x66Q z$KUSZ`nYY94qfN_dpTFr8OW~A?}LD;Yty-BA)-be5Z3S#t2Io%q+cAbnGj1t$|qFR z9o?8B7OA^KjCYL=-!p}w(dkC^G6Nd%_I=1))PC0w5}ZZGJxfK)jP4Fwa@b-SYBw?% zdz9B-<`*B2dOn(N;mcTm%Do)rIvfXRNFX&1h`?>Rzuj~Wx)$p13nrDlS8-jwq@e@n zNIj_|8or==8~1h*Ih?w*8K7rYkGlwlTWAwLKc5}~dfz3y`kM&^Q|@C%1VAp_$wnw6zG~W4O+^ z>i?NY?oXf^Puc~+fDM$VgRNBpOZj{2cMP~gCqWAX4 z7>%$ux8@a&_B(pt``KSt;r+sR-$N;jdpY>|pyvPiN)9ohd*>mVST3wMo)){`B(&eX z1?zZJ-4u9NZ|~j1rdZYq4R$?swf}<6(#ex%7r{kh%U@kT)&kWuAszS%oJts=*OcL9 zaZwK<5DZw%1IFHXgFplP6JiL^dk8+SgM$D?8X+gE4172hXh!WeqIO>}$I9?Nry$*S zQ#f)RuH{P7RwA3v9f<-w>{PSzom;>(i&^l{E0(&Xp4A-*q-@{W1oE3K;1zb{&n28dSC2$N+6auXe0}e4b z)KLJ?5c*>@9K#I^)W;uU_Z`enquTUxr>mNq z1{0_puF-M7j${rs!dxxo3EelGodF1TvjV;Zpo;s{5f1pyCuRp=HDZ?s#IA4f?h|-p zGd|Mq^4hDa@Bh!c4ZE?O&x&XZ_ptZGYK4$9F4~{%R!}G1leCBx`dtNUS|K zL-7J5s4W@%mhXg1!}a4PD%!t&Qn%f_oquRajn3@C*)`o&K9o7V6DwzVMEhjVdDJ1fjhr#@=lp#@4EBqi=CCQ>73>R(>QKPNM&_Jpe5G`n4wegeC`FYEPJ{|vwS>$-`fuRSp3927qOv|NC3T3G-0 zA{K`|+tQy1yqE$ShWt8ny&5~)%ITb@^+x$w0)f&om;P8B)@}=Wzy59BwUfZ1vqw87 za2lB8J(&*l#(V}Id8SyQ0C(2amzkz3EqG&Ed0Jq1)$|&>4_|NIe=5|n=3?siFV0fI z{As5DLW^gs|B-b4C;Hd(SM-S~GQhzb>HgF2|2Usww0nL^;x@1eaB)=+Clj+$fF@H( z-fqP??~QMT$KI-#m;QC*&6vkp&8699G3)Bq0*kFZXINw=b9OVaed(3(3kS|IZ)CM? zJdnW&%t8MveBuK21uiYj)_a{Fnw0OErMzMN?d$QoPwkhOwcP&p+t>P)4tHlYw-pPN z^oJ=uc$Sl>pv@fZH~ZqxSvdhF@F1s=oZawpr^-#l{IIOGG=T%QXjtwPhIg-F@k@uIlr?J->Ia zpEUQ*=4g|XYn4Gez&aHr*;t$u3oODPmc2Ku)2Og|xjc%w;q!Zz+zY)*3{7V8bK4;& zYV82FZ+8?v)`J|G1w4I0fWdKg|2b#iaazCv;|?(W-q}$o&Y}Q5d@BRk^jL7#{kbCK zSgkyu;=DV+or2)AxCBgq-nj5=@n^`%T#V+xBGEkW4lCqrE)LMv#f;AvD__cQ@Eg3`~x| zW+h9mofSXCq5|M)9|ez(#X?-sxB%Go8};sJ?2abp(Y!lyi>k)|{M*Z$c{e1-K4ky` MPgg&ebxsLQ025IeI{*Lx literal 0 HcmV?d00001 diff --git a/animations/step_05_a/web/index.html b/animations/step_05_a/web/index.html new file mode 100644 index 0000000000..ec05768c59 --- /dev/null +++ b/animations/step_05_a/web/index.html @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + quiz + + + + + + diff --git a/animations/step_05_a/web/manifest.json b/animations/step_05_a/web/manifest.json new file mode 100644 index 0000000000..467748be48 --- /dev/null +++ b/animations/step_05_a/web/manifest.json @@ -0,0 +1,35 @@ +{ + "name": "quiz", + "short_name": "quiz", + "start_url": ".", + "display": "standalone", + "background_color": "#0175C2", + "theme_color": "#0175C2", + "description": "A new Flutter project.", + "orientation": "portrait-primary", + "prefer_related_applications": false, + "icons": [ + { + "src": "icons/Icon-192.png", + "sizes": "192x192", + "type": "image/png" + }, + { + "src": "icons/Icon-512.png", + "sizes": "512x512", + "type": "image/png" + }, + { + "src": "icons/Icon-maskable-192.png", + "sizes": "192x192", + "type": "image/png", + "purpose": "maskable" + }, + { + "src": "icons/Icon-maskable-512.png", + "sizes": "512x512", + "type": "image/png", + "purpose": "maskable" + } + ] +} diff --git a/animations/step_05_a/windows/.gitignore b/animations/step_05_a/windows/.gitignore new file mode 100644 index 0000000000..d492d0d98c --- /dev/null +++ b/animations/step_05_a/windows/.gitignore @@ -0,0 +1,17 @@ +flutter/ephemeral/ + +# Visual Studio user-specific files. +*.suo +*.user +*.userosscache +*.sln.docstates + +# Visual Studio build-related files. +x64/ +x86/ + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!*.[Cc]ache/ diff --git a/animations/step_05_a/windows/CMakeLists.txt b/animations/step_05_a/windows/CMakeLists.txt new file mode 100644 index 0000000000..e65947e844 --- /dev/null +++ b/animations/step_05_a/windows/CMakeLists.txt @@ -0,0 +1,108 @@ +# Project-level configuration. +cmake_minimum_required(VERSION 3.14) +project(quiz LANGUAGES CXX) + +# The name of the executable created for the application. Change this to change +# the on-disk name of your application. +set(BINARY_NAME "quiz") + +# Explicitly opt in to modern CMake behaviors to avoid warnings with recent +# versions of CMake. +cmake_policy(VERSION 3.14...3.25) + +# Define build configuration option. +get_property(IS_MULTICONFIG GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG) +if(IS_MULTICONFIG) + set(CMAKE_CONFIGURATION_TYPES "Debug;Profile;Release" + CACHE STRING "" FORCE) +else() + if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) + set(CMAKE_BUILD_TYPE "Debug" CACHE + STRING "Flutter build mode" FORCE) + set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS + "Debug" "Profile" "Release") + endif() +endif() +# Define settings for the Profile build mode. +set(CMAKE_EXE_LINKER_FLAGS_PROFILE "${CMAKE_EXE_LINKER_FLAGS_RELEASE}") +set(CMAKE_SHARED_LINKER_FLAGS_PROFILE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE}") +set(CMAKE_C_FLAGS_PROFILE "${CMAKE_C_FLAGS_RELEASE}") +set(CMAKE_CXX_FLAGS_PROFILE "${CMAKE_CXX_FLAGS_RELEASE}") + +# Use Unicode for all projects. +add_definitions(-DUNICODE -D_UNICODE) + +# Compilation settings that should be applied to most targets. +# +# Be cautious about adding new options here, as plugins use this function by +# default. In most cases, you should add new options to specific targets instead +# of modifying this function. +function(APPLY_STANDARD_SETTINGS TARGET) + target_compile_features(${TARGET} PUBLIC cxx_std_17) + target_compile_options(${TARGET} PRIVATE /W4 /WX /wd"4100") + target_compile_options(${TARGET} PRIVATE /EHsc) + target_compile_definitions(${TARGET} PRIVATE "_HAS_EXCEPTIONS=0") + target_compile_definitions(${TARGET} PRIVATE "$<$:_DEBUG>") +endfunction() + +# Flutter library and tool build rules. +set(FLUTTER_MANAGED_DIR "${CMAKE_CURRENT_SOURCE_DIR}/flutter") +add_subdirectory(${FLUTTER_MANAGED_DIR}) + +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") + + +# Generated plugin build rules, which manage building the plugins and adding +# them to the application. +include(flutter/generated_plugins.cmake) + + +# === Installation === +# Support files are copied into place next to the executable, so that it can +# run in place. This is done instead of making a separate bundle (as on Linux) +# so that building and running from within Visual Studio will work. +set(BUILD_BUNDLE_DIR "$") +# Make the "install" step default, as it's required to run. +set(CMAKE_VS_INCLUDE_INSTALL_TO_DEFAULT_BUILD 1) +if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) + set(CMAKE_INSTALL_PREFIX "${BUILD_BUNDLE_DIR}" CACHE PATH "..." FORCE) +endif() + +set(INSTALL_BUNDLE_DATA_DIR "${CMAKE_INSTALL_PREFIX}/data") +set(INSTALL_BUNDLE_LIB_DIR "${CMAKE_INSTALL_PREFIX}") + +install(TARGETS ${BINARY_NAME} RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_ICU_DATA_FILE}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) + +if(PLUGIN_BUNDLED_LIBRARIES) + install(FILES "${PLUGIN_BUNDLED_LIBRARIES}" + DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) +endif() + +# Copy the native assets provided by the build.dart from all packages. +set(NATIVE_ASSETS_DIR "${PROJECT_BUILD_DIR}native_assets/windows/") +install(DIRECTORY "${NATIVE_ASSETS_DIR}" + DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) + +# Fully re-copy the assets directory on each build to avoid having stale files +# from a previous install. +set(FLUTTER_ASSET_DIR_NAME "flutter_assets") +install(CODE " + file(REMOVE_RECURSE \"${INSTALL_BUNDLE_DATA_DIR}/${FLUTTER_ASSET_DIR_NAME}\") + " COMPONENT Runtime) +install(DIRECTORY "${PROJECT_BUILD_DIR}/${FLUTTER_ASSET_DIR_NAME}" + DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" COMPONENT Runtime) + +# Install the AOT library on non-Debug builds only. +install(FILES "${AOT_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" + CONFIGURATIONS Profile;Release + COMPONENT Runtime) diff --git a/animations/step_05_a/windows/flutter/CMakeLists.txt b/animations/step_05_a/windows/flutter/CMakeLists.txt new file mode 100644 index 0000000000..903f4899d6 --- /dev/null +++ b/animations/step_05_a/windows/flutter/CMakeLists.txt @@ -0,0 +1,109 @@ +# This file controls Flutter-level build steps. It should not be edited. +cmake_minimum_required(VERSION 3.14) + +set(EPHEMERAL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/ephemeral") + +# Configuration provided via flutter tool. +include(${EPHEMERAL_DIR}/generated_config.cmake) + +# TODO: Move the rest of this into files in ephemeral. See +# https://github.com/flutter/flutter/issues/57146. +set(WRAPPER_ROOT "${EPHEMERAL_DIR}/cpp_client_wrapper") + +# Set fallback configurations for older versions of the flutter tool. +if (NOT DEFINED FLUTTER_TARGET_PLATFORM) + set(FLUTTER_TARGET_PLATFORM "windows-x64") +endif() + +# === Flutter Library === +set(FLUTTER_LIBRARY "${EPHEMERAL_DIR}/flutter_windows.dll") + +# Published to parent scope for install step. +set(FLUTTER_LIBRARY ${FLUTTER_LIBRARY} PARENT_SCOPE) +set(FLUTTER_ICU_DATA_FILE "${EPHEMERAL_DIR}/icudtl.dat" PARENT_SCOPE) +set(PROJECT_BUILD_DIR "${PROJECT_DIR}/build/" PARENT_SCOPE) +set(AOT_LIBRARY "${PROJECT_DIR}/build/windows/app.so" PARENT_SCOPE) + +list(APPEND FLUTTER_LIBRARY_HEADERS + "flutter_export.h" + "flutter_windows.h" + "flutter_messenger.h" + "flutter_plugin_registrar.h" + "flutter_texture_registrar.h" +) +list(TRANSFORM FLUTTER_LIBRARY_HEADERS PREPEND "${EPHEMERAL_DIR}/") +add_library(flutter INTERFACE) +target_include_directories(flutter INTERFACE + "${EPHEMERAL_DIR}" +) +target_link_libraries(flutter INTERFACE "${FLUTTER_LIBRARY}.lib") +add_dependencies(flutter flutter_assemble) + +# === Wrapper === +list(APPEND CPP_WRAPPER_SOURCES_CORE + "core_implementations.cc" + "standard_codec.cc" +) +list(TRANSFORM CPP_WRAPPER_SOURCES_CORE PREPEND "${WRAPPER_ROOT}/") +list(APPEND CPP_WRAPPER_SOURCES_PLUGIN + "plugin_registrar.cc" +) +list(TRANSFORM CPP_WRAPPER_SOURCES_PLUGIN PREPEND "${WRAPPER_ROOT}/") +list(APPEND CPP_WRAPPER_SOURCES_APP + "flutter_engine.cc" + "flutter_view_controller.cc" +) +list(TRANSFORM CPP_WRAPPER_SOURCES_APP PREPEND "${WRAPPER_ROOT}/") + +# Wrapper sources needed for a plugin. +add_library(flutter_wrapper_plugin STATIC + ${CPP_WRAPPER_SOURCES_CORE} + ${CPP_WRAPPER_SOURCES_PLUGIN} +) +apply_standard_settings(flutter_wrapper_plugin) +set_target_properties(flutter_wrapper_plugin PROPERTIES + POSITION_INDEPENDENT_CODE ON) +set_target_properties(flutter_wrapper_plugin PROPERTIES + CXX_VISIBILITY_PRESET hidden) +target_link_libraries(flutter_wrapper_plugin PUBLIC flutter) +target_include_directories(flutter_wrapper_plugin PUBLIC + "${WRAPPER_ROOT}/include" +) +add_dependencies(flutter_wrapper_plugin flutter_assemble) + +# Wrapper sources needed for the runner. +add_library(flutter_wrapper_app STATIC + ${CPP_WRAPPER_SOURCES_CORE} + ${CPP_WRAPPER_SOURCES_APP} +) +apply_standard_settings(flutter_wrapper_app) +target_link_libraries(flutter_wrapper_app PUBLIC flutter) +target_include_directories(flutter_wrapper_app PUBLIC + "${WRAPPER_ROOT}/include" +) +add_dependencies(flutter_wrapper_app flutter_assemble) + +# === Flutter tool backend === +# _phony_ is a non-existent file to force this command to run every time, +# since currently there's no way to get a full input/output list from the +# flutter tool. +set(PHONY_OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/_phony_") +set_source_files_properties("${PHONY_OUTPUT}" PROPERTIES SYMBOLIC TRUE) +add_custom_command( + OUTPUT ${FLUTTER_LIBRARY} ${FLUTTER_LIBRARY_HEADERS} + ${CPP_WRAPPER_SOURCES_CORE} ${CPP_WRAPPER_SOURCES_PLUGIN} + ${CPP_WRAPPER_SOURCES_APP} + ${PHONY_OUTPUT} + COMMAND ${CMAKE_COMMAND} -E env + ${FLUTTER_TOOL_ENVIRONMENT} + "${FLUTTER_ROOT}/packages/flutter_tools/bin/tool_backend.bat" + ${FLUTTER_TARGET_PLATFORM} $ + VERBATIM +) +add_custom_target(flutter_assemble DEPENDS + "${FLUTTER_LIBRARY}" + ${FLUTTER_LIBRARY_HEADERS} + ${CPP_WRAPPER_SOURCES_CORE} + ${CPP_WRAPPER_SOURCES_PLUGIN} + ${CPP_WRAPPER_SOURCES_APP} +) diff --git a/animations/step_05_a/windows/flutter/generated_plugin_registrant.cc b/animations/step_05_a/windows/flutter/generated_plugin_registrant.cc new file mode 100644 index 0000000000..8b6d4680af --- /dev/null +++ b/animations/step_05_a/windows/flutter/generated_plugin_registrant.cc @@ -0,0 +1,11 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#include "generated_plugin_registrant.h" + + +void RegisterPlugins(flutter::PluginRegistry* registry) { +} diff --git a/animations/step_05_a/windows/flutter/generated_plugin_registrant.h b/animations/step_05_a/windows/flutter/generated_plugin_registrant.h new file mode 100644 index 0000000000..dc139d85a9 --- /dev/null +++ b/animations/step_05_a/windows/flutter/generated_plugin_registrant.h @@ -0,0 +1,15 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#ifndef GENERATED_PLUGIN_REGISTRANT_ +#define GENERATED_PLUGIN_REGISTRANT_ + +#include + +// Registers Flutter plugins. +void RegisterPlugins(flutter::PluginRegistry* registry); + +#endif // GENERATED_PLUGIN_REGISTRANT_ diff --git a/animations/step_05_a/windows/flutter/generated_plugins.cmake b/animations/step_05_a/windows/flutter/generated_plugins.cmake new file mode 100644 index 0000000000..b93c4c30c1 --- /dev/null +++ b/animations/step_05_a/windows/flutter/generated_plugins.cmake @@ -0,0 +1,23 @@ +# +# Generated file, do not edit. +# + +list(APPEND FLUTTER_PLUGIN_LIST +) + +list(APPEND FLUTTER_FFI_PLUGIN_LIST +) + +set(PLUGIN_BUNDLED_LIBRARIES) + +foreach(plugin ${FLUTTER_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${plugin}/windows plugins/${plugin}) + target_link_libraries(${BINARY_NAME} PRIVATE ${plugin}_plugin) + list(APPEND PLUGIN_BUNDLED_LIBRARIES $) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${plugin}_bundled_libraries}) +endforeach(plugin) + +foreach(ffi_plugin ${FLUTTER_FFI_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${ffi_plugin}/windows plugins/${ffi_plugin}) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${ffi_plugin}_bundled_libraries}) +endforeach(ffi_plugin) diff --git a/animations/step_05_a/windows/runner/CMakeLists.txt b/animations/step_05_a/windows/runner/CMakeLists.txt new file mode 100644 index 0000000000..394917c053 --- /dev/null +++ b/animations/step_05_a/windows/runner/CMakeLists.txt @@ -0,0 +1,40 @@ +cmake_minimum_required(VERSION 3.14) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} WIN32 + "flutter_window.cpp" + "main.cpp" + "utils.cpp" + "win32_window.cpp" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" + "Runner.rc" + "runner.exe.manifest" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the build version. +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION=\"${FLUTTER_VERSION}\"") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_MAJOR=${FLUTTER_VERSION_MAJOR}") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_MINOR=${FLUTTER_VERSION_MINOR}") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_PATCH=${FLUTTER_VERSION_PATCH}") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_BUILD=${FLUTTER_VERSION_BUILD}") + +# Disable Windows macros that collide with C++ standard library functions. +target_compile_definitions(${BINARY_NAME} PRIVATE "NOMINMAX") + +# Add dependency libraries and include directories. Add any application-specific +# dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter flutter_wrapper_app) +target_link_libraries(${BINARY_NAME} PRIVATE "dwmapi.lib") +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") + +# Run the Flutter tool portions of the build. This must not be removed. +add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/animations/step_05_a/windows/runner/Runner.rc b/animations/step_05_a/windows/runner/Runner.rc new file mode 100644 index 0000000000..f0d8342b40 --- /dev/null +++ b/animations/step_05_a/windows/runner/Runner.rc @@ -0,0 +1,121 @@ +// Microsoft Visual C++ generated resource script. +// +#pragma code_page(65001) +#include "resource.h" + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#include "winres.h" + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// English (United States) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE +BEGIN + "resource.h\0" +END + +2 TEXTINCLUDE +BEGIN + "#include ""winres.h""\r\n" + "\0" +END + +3 TEXTINCLUDE +BEGIN + "\r\n" + "\0" +END + +#endif // APSTUDIO_INVOKED + + +///////////////////////////////////////////////////////////////////////////// +// +// Icon +// + +// Icon with lowest ID value placed first to ensure application icon +// remains consistent on all systems. +IDI_APP_ICON ICON "resources\\app_icon.ico" + + +///////////////////////////////////////////////////////////////////////////// +// +// Version +// + +#if defined(FLUTTER_VERSION_MAJOR) && defined(FLUTTER_VERSION_MINOR) && defined(FLUTTER_VERSION_PATCH) && defined(FLUTTER_VERSION_BUILD) +#define VERSION_AS_NUMBER FLUTTER_VERSION_MAJOR,FLUTTER_VERSION_MINOR,FLUTTER_VERSION_PATCH,FLUTTER_VERSION_BUILD +#else +#define VERSION_AS_NUMBER 1,0,0,0 +#endif + +#if defined(FLUTTER_VERSION) +#define VERSION_AS_STRING FLUTTER_VERSION +#else +#define VERSION_AS_STRING "1.0.0" +#endif + +VS_VERSION_INFO VERSIONINFO + FILEVERSION VERSION_AS_NUMBER + PRODUCTVERSION VERSION_AS_NUMBER + FILEFLAGSMASK VS_FFI_FILEFLAGSMASK +#ifdef _DEBUG + FILEFLAGS VS_FF_DEBUG +#else + FILEFLAGS 0x0L +#endif + FILEOS VOS__WINDOWS32 + FILETYPE VFT_APP + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904e4" + BEGIN + VALUE "CompanyName", "com.example" "\0" + VALUE "FileDescription", "quiz" "\0" + VALUE "FileVersion", VERSION_AS_STRING "\0" + VALUE "InternalName", "quiz" "\0" + VALUE "LegalCopyright", "Copyright (C) 2024 com.example. All rights reserved." "\0" + VALUE "OriginalFilename", "quiz.exe" "\0" + VALUE "ProductName", "quiz" "\0" + VALUE "ProductVersion", VERSION_AS_STRING "\0" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x409, 1252 + END +END + +#endif // English (United States) resources +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// + + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED diff --git a/animations/step_05_a/windows/runner/flutter_window.cpp b/animations/step_05_a/windows/runner/flutter_window.cpp new file mode 100644 index 0000000000..955ee3038f --- /dev/null +++ b/animations/step_05_a/windows/runner/flutter_window.cpp @@ -0,0 +1,71 @@ +#include "flutter_window.h" + +#include + +#include "flutter/generated_plugin_registrant.h" + +FlutterWindow::FlutterWindow(const flutter::DartProject& project) + : project_(project) {} + +FlutterWindow::~FlutterWindow() {} + +bool FlutterWindow::OnCreate() { + if (!Win32Window::OnCreate()) { + return false; + } + + RECT frame = GetClientArea(); + + // The size here must match the window dimensions to avoid unnecessary surface + // creation / destruction in the startup path. + flutter_controller_ = std::make_unique( + frame.right - frame.left, frame.bottom - frame.top, project_); + // Ensure that basic setup of the controller was successful. + if (!flutter_controller_->engine() || !flutter_controller_->view()) { + return false; + } + RegisterPlugins(flutter_controller_->engine()); + SetChildContent(flutter_controller_->view()->GetNativeWindow()); + + flutter_controller_->engine()->SetNextFrameCallback([&]() { + this->Show(); + }); + + // Flutter can complete the first frame before the "show window" callback is + // registered. The following call ensures a frame is pending to ensure the + // window is shown. It is a no-op if the first frame hasn't completed yet. + flutter_controller_->ForceRedraw(); + + return true; +} + +void FlutterWindow::OnDestroy() { + if (flutter_controller_) { + flutter_controller_ = nullptr; + } + + Win32Window::OnDestroy(); +} + +LRESULT +FlutterWindow::MessageHandler(HWND hwnd, UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept { + // Give Flutter, including plugins, an opportunity to handle window messages. + if (flutter_controller_) { + std::optional result = + flutter_controller_->HandleTopLevelWindowProc(hwnd, message, wparam, + lparam); + if (result) { + return *result; + } + } + + switch (message) { + case WM_FONTCHANGE: + flutter_controller_->engine()->ReloadSystemFonts(); + break; + } + + return Win32Window::MessageHandler(hwnd, message, wparam, lparam); +} diff --git a/animations/step_05_a/windows/runner/flutter_window.h b/animations/step_05_a/windows/runner/flutter_window.h new file mode 100644 index 0000000000..6da0652f05 --- /dev/null +++ b/animations/step_05_a/windows/runner/flutter_window.h @@ -0,0 +1,33 @@ +#ifndef RUNNER_FLUTTER_WINDOW_H_ +#define RUNNER_FLUTTER_WINDOW_H_ + +#include +#include + +#include + +#include "win32_window.h" + +// A window that does nothing but host a Flutter view. +class FlutterWindow : public Win32Window { + public: + // Creates a new FlutterWindow hosting a Flutter view running |project|. + explicit FlutterWindow(const flutter::DartProject& project); + virtual ~FlutterWindow(); + + protected: + // Win32Window: + bool OnCreate() override; + void OnDestroy() override; + LRESULT MessageHandler(HWND window, UINT const message, WPARAM const wparam, + LPARAM const lparam) noexcept override; + + private: + // The project to run. + flutter::DartProject project_; + + // The Flutter instance hosted by this window. + std::unique_ptr flutter_controller_; +}; + +#endif // RUNNER_FLUTTER_WINDOW_H_ diff --git a/animations/step_05_a/windows/runner/main.cpp b/animations/step_05_a/windows/runner/main.cpp new file mode 100644 index 0000000000..cc4e09820c --- /dev/null +++ b/animations/step_05_a/windows/runner/main.cpp @@ -0,0 +1,43 @@ +#include +#include +#include + +#include "flutter_window.h" +#include "utils.h" + +int APIENTRY wWinMain(_In_ HINSTANCE instance, _In_opt_ HINSTANCE prev, + _In_ wchar_t *command_line, _In_ int show_command) { + // Attach to console when present (e.g., 'flutter run') or create a + // new console when running with a debugger. + if (!::AttachConsole(ATTACH_PARENT_PROCESS) && ::IsDebuggerPresent()) { + CreateAndAttachConsole(); + } + + // Initialize COM, so that it is available for use in the library and/or + // plugins. + ::CoInitializeEx(nullptr, COINIT_APARTMENTTHREADED); + + flutter::DartProject project(L"data"); + + std::vector command_line_arguments = + GetCommandLineArguments(); + + project.set_dart_entrypoint_arguments(std::move(command_line_arguments)); + + FlutterWindow window(project); + Win32Window::Point origin(10, 10); + Win32Window::Size size(1280, 720); + if (!window.Create(L"quiz", origin, size)) { + return EXIT_FAILURE; + } + window.SetQuitOnClose(true); + + ::MSG msg; + while (::GetMessage(&msg, nullptr, 0, 0)) { + ::TranslateMessage(&msg); + ::DispatchMessage(&msg); + } + + ::CoUninitialize(); + return EXIT_SUCCESS; +} diff --git a/animations/step_05_a/windows/runner/resource.h b/animations/step_05_a/windows/runner/resource.h new file mode 100644 index 0000000000..66a65d1e4a --- /dev/null +++ b/animations/step_05_a/windows/runner/resource.h @@ -0,0 +1,16 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Visual C++ generated include file. +// Used by Runner.rc +// +#define IDI_APP_ICON 101 + +// Next default values for new objects +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS +#define _APS_NEXT_RESOURCE_VALUE 102 +#define _APS_NEXT_COMMAND_VALUE 40001 +#define _APS_NEXT_CONTROL_VALUE 1001 +#define _APS_NEXT_SYMED_VALUE 101 +#endif +#endif diff --git a/animations/step_05_a/windows/runner/resources/app_icon.ico b/animations/step_05_a/windows/runner/resources/app_icon.ico new file mode 100644 index 0000000000000000000000000000000000000000..c04e20caf6370ebb9253ad831cc31de4a9c965f6 GIT binary patch literal 33772 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 literal 0 HcmV?d00001 diff --git a/animations/step_05_a/windows/runner/runner.exe.manifest b/animations/step_05_a/windows/runner/runner.exe.manifest new file mode 100644 index 0000000000..153653e8d6 --- /dev/null +++ b/animations/step_05_a/windows/runner/runner.exe.manifest @@ -0,0 +1,14 @@ + + + + + PerMonitorV2 + + + + + + + + + diff --git a/animations/step_05_a/windows/runner/utils.cpp b/animations/step_05_a/windows/runner/utils.cpp new file mode 100644 index 0000000000..3a0b46511a --- /dev/null +++ b/animations/step_05_a/windows/runner/utils.cpp @@ -0,0 +1,65 @@ +#include "utils.h" + +#include +#include +#include +#include + +#include + +void CreateAndAttachConsole() { + if (::AllocConsole()) { + FILE *unused; + if (freopen_s(&unused, "CONOUT$", "w", stdout)) { + _dup2(_fileno(stdout), 1); + } + if (freopen_s(&unused, "CONOUT$", "w", stderr)) { + _dup2(_fileno(stdout), 2); + } + std::ios::sync_with_stdio(); + FlutterDesktopResyncOutputStreams(); + } +} + +std::vector GetCommandLineArguments() { + // Convert the UTF-16 command line arguments to UTF-8 for the Engine to use. + int argc; + wchar_t** argv = ::CommandLineToArgvW(::GetCommandLineW(), &argc); + if (argv == nullptr) { + return std::vector(); + } + + std::vector command_line_arguments; + + // Skip the first argument as it's the binary name. + for (int i = 1; i < argc; i++) { + command_line_arguments.push_back(Utf8FromUtf16(argv[i])); + } + + ::LocalFree(argv); + + return command_line_arguments; +} + +std::string Utf8FromUtf16(const wchar_t* utf16_string) { + if (utf16_string == nullptr) { + return std::string(); + } + unsigned int target_length = ::WideCharToMultiByte( + CP_UTF8, WC_ERR_INVALID_CHARS, utf16_string, + -1, nullptr, 0, nullptr, nullptr) + -1; // remove the trailing null character + int input_length = (int)wcslen(utf16_string); + std::string utf8_string; + if (target_length == 0 || target_length > utf8_string.max_size()) { + return utf8_string; + } + utf8_string.resize(target_length); + int converted_length = ::WideCharToMultiByte( + CP_UTF8, WC_ERR_INVALID_CHARS, utf16_string, + input_length, utf8_string.data(), target_length, nullptr, nullptr); + if (converted_length == 0) { + return std::string(); + } + return utf8_string; +} diff --git a/animations/step_05_a/windows/runner/utils.h b/animations/step_05_a/windows/runner/utils.h new file mode 100644 index 0000000000..3879d54755 --- /dev/null +++ b/animations/step_05_a/windows/runner/utils.h @@ -0,0 +1,19 @@ +#ifndef RUNNER_UTILS_H_ +#define RUNNER_UTILS_H_ + +#include +#include + +// Creates a console for the process, and redirects stdout and stderr to +// it for both the runner and the Flutter library. +void CreateAndAttachConsole(); + +// Takes a null-terminated wchar_t* encoded in UTF-16 and returns a std::string +// encoded in UTF-8. Returns an empty std::string on failure. +std::string Utf8FromUtf16(const wchar_t* utf16_string); + +// Gets the command line arguments passed in as a std::vector, +// encoded in UTF-8. Returns an empty std::vector on failure. +std::vector GetCommandLineArguments(); + +#endif // RUNNER_UTILS_H_ diff --git a/animations/step_05_a/windows/runner/win32_window.cpp b/animations/step_05_a/windows/runner/win32_window.cpp new file mode 100644 index 0000000000..60608d0fe5 --- /dev/null +++ b/animations/step_05_a/windows/runner/win32_window.cpp @@ -0,0 +1,288 @@ +#include "win32_window.h" + +#include +#include + +#include "resource.h" + +namespace { + +/// Window attribute that enables dark mode window decorations. +/// +/// Redefined in case the developer's machine has a Windows SDK older than +/// version 10.0.22000.0. +/// See: https://docs.microsoft.com/windows/win32/api/dwmapi/ne-dwmapi-dwmwindowattribute +#ifndef DWMWA_USE_IMMERSIVE_DARK_MODE +#define DWMWA_USE_IMMERSIVE_DARK_MODE 20 +#endif + +constexpr const wchar_t kWindowClassName[] = L"FLUTTER_RUNNER_WIN32_WINDOW"; + +/// Registry key for app theme preference. +/// +/// A value of 0 indicates apps should use dark mode. A non-zero or missing +/// value indicates apps should use light mode. +constexpr const wchar_t kGetPreferredBrightnessRegKey[] = + L"Software\\Microsoft\\Windows\\CurrentVersion\\Themes\\Personalize"; +constexpr const wchar_t kGetPreferredBrightnessRegValue[] = L"AppsUseLightTheme"; + +// The number of Win32Window objects that currently exist. +static int g_active_window_count = 0; + +using EnableNonClientDpiScaling = BOOL __stdcall(HWND hwnd); + +// Scale helper to convert logical scaler values to physical using passed in +// scale factor +int Scale(int source, double scale_factor) { + return static_cast(source * scale_factor); +} + +// Dynamically loads the |EnableNonClientDpiScaling| from the User32 module. +// This API is only needed for PerMonitor V1 awareness mode. +void EnableFullDpiSupportIfAvailable(HWND hwnd) { + HMODULE user32_module = LoadLibraryA("User32.dll"); + if (!user32_module) { + return; + } + auto enable_non_client_dpi_scaling = + reinterpret_cast( + GetProcAddress(user32_module, "EnableNonClientDpiScaling")); + if (enable_non_client_dpi_scaling != nullptr) { + enable_non_client_dpi_scaling(hwnd); + } + FreeLibrary(user32_module); +} + +} // namespace + +// Manages the Win32Window's window class registration. +class WindowClassRegistrar { + public: + ~WindowClassRegistrar() = default; + + // Returns the singleton registrar instance. + static WindowClassRegistrar* GetInstance() { + if (!instance_) { + instance_ = new WindowClassRegistrar(); + } + return instance_; + } + + // Returns the name of the window class, registering the class if it hasn't + // previously been registered. + const wchar_t* GetWindowClass(); + + // Unregisters the window class. Should only be called if there are no + // instances of the window. + void UnregisterWindowClass(); + + private: + WindowClassRegistrar() = default; + + static WindowClassRegistrar* instance_; + + bool class_registered_ = false; +}; + +WindowClassRegistrar* WindowClassRegistrar::instance_ = nullptr; + +const wchar_t* WindowClassRegistrar::GetWindowClass() { + if (!class_registered_) { + WNDCLASS window_class{}; + window_class.hCursor = LoadCursor(nullptr, IDC_ARROW); + window_class.lpszClassName = kWindowClassName; + window_class.style = CS_HREDRAW | CS_VREDRAW; + window_class.cbClsExtra = 0; + window_class.cbWndExtra = 0; + window_class.hInstance = GetModuleHandle(nullptr); + window_class.hIcon = + LoadIcon(window_class.hInstance, MAKEINTRESOURCE(IDI_APP_ICON)); + window_class.hbrBackground = 0; + window_class.lpszMenuName = nullptr; + window_class.lpfnWndProc = Win32Window::WndProc; + RegisterClass(&window_class); + class_registered_ = true; + } + return kWindowClassName; +} + +void WindowClassRegistrar::UnregisterWindowClass() { + UnregisterClass(kWindowClassName, nullptr); + class_registered_ = false; +} + +Win32Window::Win32Window() { + ++g_active_window_count; +} + +Win32Window::~Win32Window() { + --g_active_window_count; + Destroy(); +} + +bool Win32Window::Create(const std::wstring& title, + const Point& origin, + const Size& size) { + Destroy(); + + const wchar_t* window_class = + WindowClassRegistrar::GetInstance()->GetWindowClass(); + + const POINT target_point = {static_cast(origin.x), + static_cast(origin.y)}; + HMONITOR monitor = MonitorFromPoint(target_point, MONITOR_DEFAULTTONEAREST); + UINT dpi = FlutterDesktopGetDpiForMonitor(monitor); + double scale_factor = dpi / 96.0; + + HWND window = CreateWindow( + window_class, title.c_str(), WS_OVERLAPPEDWINDOW, + Scale(origin.x, scale_factor), Scale(origin.y, scale_factor), + Scale(size.width, scale_factor), Scale(size.height, scale_factor), + nullptr, nullptr, GetModuleHandle(nullptr), this); + + if (!window) { + return false; + } + + UpdateTheme(window); + + return OnCreate(); +} + +bool Win32Window::Show() { + return ShowWindow(window_handle_, SW_SHOWNORMAL); +} + +// static +LRESULT CALLBACK Win32Window::WndProc(HWND const window, + UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept { + if (message == WM_NCCREATE) { + auto window_struct = reinterpret_cast(lparam); + SetWindowLongPtr(window, GWLP_USERDATA, + reinterpret_cast(window_struct->lpCreateParams)); + + auto that = static_cast(window_struct->lpCreateParams); + EnableFullDpiSupportIfAvailable(window); + that->window_handle_ = window; + } else if (Win32Window* that = GetThisFromHandle(window)) { + return that->MessageHandler(window, message, wparam, lparam); + } + + return DefWindowProc(window, message, wparam, lparam); +} + +LRESULT +Win32Window::MessageHandler(HWND hwnd, + UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept { + switch (message) { + case WM_DESTROY: + window_handle_ = nullptr; + Destroy(); + if (quit_on_close_) { + PostQuitMessage(0); + } + return 0; + + case WM_DPICHANGED: { + auto newRectSize = reinterpret_cast(lparam); + LONG newWidth = newRectSize->right - newRectSize->left; + LONG newHeight = newRectSize->bottom - newRectSize->top; + + SetWindowPos(hwnd, nullptr, newRectSize->left, newRectSize->top, newWidth, + newHeight, SWP_NOZORDER | SWP_NOACTIVATE); + + return 0; + } + case WM_SIZE: { + RECT rect = GetClientArea(); + if (child_content_ != nullptr) { + // Size and position the child window. + MoveWindow(child_content_, rect.left, rect.top, rect.right - rect.left, + rect.bottom - rect.top, TRUE); + } + return 0; + } + + case WM_ACTIVATE: + if (child_content_ != nullptr) { + SetFocus(child_content_); + } + return 0; + + case WM_DWMCOLORIZATIONCOLORCHANGED: + UpdateTheme(hwnd); + return 0; + } + + return DefWindowProc(window_handle_, message, wparam, lparam); +} + +void Win32Window::Destroy() { + OnDestroy(); + + if (window_handle_) { + DestroyWindow(window_handle_); + window_handle_ = nullptr; + } + if (g_active_window_count == 0) { + WindowClassRegistrar::GetInstance()->UnregisterWindowClass(); + } +} + +Win32Window* Win32Window::GetThisFromHandle(HWND const window) noexcept { + return reinterpret_cast( + GetWindowLongPtr(window, GWLP_USERDATA)); +} + +void Win32Window::SetChildContent(HWND content) { + child_content_ = content; + SetParent(content, window_handle_); + RECT frame = GetClientArea(); + + MoveWindow(content, frame.left, frame.top, frame.right - frame.left, + frame.bottom - frame.top, true); + + SetFocus(child_content_); +} + +RECT Win32Window::GetClientArea() { + RECT frame; + GetClientRect(window_handle_, &frame); + return frame; +} + +HWND Win32Window::GetHandle() { + return window_handle_; +} + +void Win32Window::SetQuitOnClose(bool quit_on_close) { + quit_on_close_ = quit_on_close; +} + +bool Win32Window::OnCreate() { + // No-op; provided for subclasses. + return true; +} + +void Win32Window::OnDestroy() { + // No-op; provided for subclasses. +} + +void Win32Window::UpdateTheme(HWND const window) { + DWORD light_mode; + DWORD light_mode_size = sizeof(light_mode); + LSTATUS result = RegGetValue(HKEY_CURRENT_USER, kGetPreferredBrightnessRegKey, + kGetPreferredBrightnessRegValue, + RRF_RT_REG_DWORD, nullptr, &light_mode, + &light_mode_size); + + if (result == ERROR_SUCCESS) { + BOOL enable_dark_mode = light_mode == 0; + DwmSetWindowAttribute(window, DWMWA_USE_IMMERSIVE_DARK_MODE, + &enable_dark_mode, sizeof(enable_dark_mode)); + } +} diff --git a/animations/step_05_a/windows/runner/win32_window.h b/animations/step_05_a/windows/runner/win32_window.h new file mode 100644 index 0000000000..e901dde684 --- /dev/null +++ b/animations/step_05_a/windows/runner/win32_window.h @@ -0,0 +1,102 @@ +#ifndef RUNNER_WIN32_WINDOW_H_ +#define RUNNER_WIN32_WINDOW_H_ + +#include + +#include +#include +#include + +// A class abstraction for a high DPI-aware Win32 Window. Intended to be +// inherited from by classes that wish to specialize with custom +// rendering and input handling +class Win32Window { + public: + struct Point { + unsigned int x; + unsigned int y; + Point(unsigned int x, unsigned int y) : x(x), y(y) {} + }; + + struct Size { + unsigned int width; + unsigned int height; + Size(unsigned int width, unsigned int height) + : width(width), height(height) {} + }; + + Win32Window(); + virtual ~Win32Window(); + + // Creates a win32 window with |title| that is positioned and sized using + // |origin| and |size|. New windows are created on the default monitor. Window + // sizes are specified to the OS in physical pixels, hence to ensure a + // consistent size this function will scale the inputted width and height as + // as appropriate for the default monitor. The window is invisible until + // |Show| is called. Returns true if the window was created successfully. + bool Create(const std::wstring& title, const Point& origin, const Size& size); + + // Show the current window. Returns true if the window was successfully shown. + bool Show(); + + // Release OS resources associated with window. + void Destroy(); + + // Inserts |content| into the window tree. + void SetChildContent(HWND content); + + // Returns the backing Window handle to enable clients to set icon and other + // window properties. Returns nullptr if the window has been destroyed. + HWND GetHandle(); + + // If true, closing this window will quit the application. + void SetQuitOnClose(bool quit_on_close); + + // Return a RECT representing the bounds of the current client area. + RECT GetClientArea(); + + protected: + // Processes and route salient window messages for mouse handling, + // size change and DPI. Delegates handling of these to member overloads that + // inheriting classes can handle. + virtual LRESULT MessageHandler(HWND window, + UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept; + + // Called when CreateAndShow is called, allowing subclass window-related + // setup. Subclasses should return false if setup fails. + virtual bool OnCreate(); + + // Called when Destroy is called. + virtual void OnDestroy(); + + private: + friend class WindowClassRegistrar; + + // OS callback called by message pump. Handles the WM_NCCREATE message which + // is passed when the non-client area is being created and enables automatic + // non-client DPI scaling so that the non-client area automatically + // responds to changes in DPI. All other messages are handled by + // MessageHandler. + static LRESULT CALLBACK WndProc(HWND const window, + UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept; + + // Retrieves a class instance pointer for |window| + static Win32Window* GetThisFromHandle(HWND const window) noexcept; + + // Update the window frame's theme to match the system theme. + static void UpdateTheme(HWND const window); + + bool quit_on_close_ = false; + + // window handle for top level window. + HWND window_handle_ = nullptr; + + // window handle for hosted content. + HWND child_content_ = nullptr; +}; + +#endif // RUNNER_WIN32_WINDOW_H_ diff --git a/animations/step_05_b/.gitignore b/animations/step_05_b/.gitignore new file mode 100644 index 0000000000..79c113f9b5 --- /dev/null +++ b/animations/step_05_b/.gitignore @@ -0,0 +1,45 @@ +# Miscellaneous +*.class +*.log +*.pyc +*.swp +.DS_Store +.atom/ +.build/ +.buildlog/ +.history +.svn/ +.swiftpm/ +migrate_working_dir/ + +# IntelliJ related +*.iml +*.ipr +*.iws +.idea/ + +# The .vscode folder contains launch configuration and tasks you configure in +# VS Code which you may wish to be included in version control, so this line +# is commented out by default. +#.vscode/ + +# Flutter/Dart/Pub related +**/doc/api/ +**/ios/Flutter/.last_build_id +.dart_tool/ +.flutter-plugins +.flutter-plugins-dependencies +.pub-cache/ +.pub/ +/build/ + +# Symbolication related +app.*.symbols + +# Obfuscation related +app.*.map.json + +# Android Studio will place build artifacts here +/android/app/debug +/android/app/profile +/android/app/release diff --git a/animations/step_05_b/analysis_options.yaml b/animations/step_05_b/analysis_options.yaml new file mode 100644 index 0000000000..03de3bd700 --- /dev/null +++ b/animations/step_05_b/analysis_options.yaml @@ -0,0 +1,13 @@ +include: package:flutter_lints/flutter.yaml + +analyzer: + errors: + unused_field: ignore + +linter: + rules: + annotate_overrides: false + prefer_const_constructors: false + prefer_const_constructors_in_immutables: false + prefer_const_declarations: false + prefer_const_literals_to_create_immutables: false diff --git a/animations/step_05_b/android/.gitignore b/animations/step_05_b/android/.gitignore new file mode 100644 index 0000000000..55afd919c6 --- /dev/null +++ b/animations/step_05_b/android/.gitignore @@ -0,0 +1,13 @@ +gradle-wrapper.jar +/.gradle +/captures/ +/gradlew +/gradlew.bat +/local.properties +GeneratedPluginRegistrant.java + +# Remember to never publicly share your keystore. +# See https://flutter.dev/to/reference-keystore +key.properties +**/*.keystore +**/*.jks diff --git a/animations/step_05_b/android/app/build.gradle.kts b/animations/step_05_b/android/app/build.gradle.kts new file mode 100644 index 0000000000..31d285867f --- /dev/null +++ b/animations/step_05_b/android/app/build.gradle.kts @@ -0,0 +1,44 @@ +plugins { + id("com.android.application") + id("kotlin-android") + // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. + id("dev.flutter.flutter-gradle-plugin") +} + +android { + namespace = "com.example.quiz" + compileSdk = flutter.compileSdkVersion + ndkVersion = flutter.ndkVersion + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 + } + + kotlinOptions { + jvmTarget = JavaVersion.VERSION_1_8.toString() + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId = "com.example.quiz" + // You can update the following values to match your application needs. + // For more information, see: https://flutter.dev/to/review-gradle-config. + minSdk = flutter.minSdkVersion + targetSdk = flutter.targetSdkVersion + versionCode = flutter.versionCode + versionName = flutter.versionName + } + + buildTypes { + release { + // TODO: Add your own signing config for the release build. + // Signing with the debug keys for now, so `flutter run --release` works. + signingConfig = signingConfigs.getByName("debug") + } + } +} + +flutter { + source = "../.." +} diff --git a/animations/step_05_b/android/app/src/debug/AndroidManifest.xml b/animations/step_05_b/android/app/src/debug/AndroidManifest.xml new file mode 100644 index 0000000000..399f6981d5 --- /dev/null +++ b/animations/step_05_b/android/app/src/debug/AndroidManifest.xml @@ -0,0 +1,7 @@ + + + + diff --git a/animations/step_05_b/android/app/src/main/AndroidManifest.xml b/animations/step_05_b/android/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000000..34076b28b3 --- /dev/null +++ b/animations/step_05_b/android/app/src/main/AndroidManifest.xml @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/animations/step_05_b/android/app/src/main/kotlin/com/example/quiz/MainActivity.kt b/animations/step_05_b/android/app/src/main/kotlin/com/example/quiz/MainActivity.kt new file mode 100644 index 0000000000..87081bb97c --- /dev/null +++ b/animations/step_05_b/android/app/src/main/kotlin/com/example/quiz/MainActivity.kt @@ -0,0 +1,5 @@ +package com.example.quiz + +import io.flutter.embedding.android.FlutterActivity + +class MainActivity: FlutterActivity() diff --git a/animations/step_05_b/android/app/src/main/res/drawable-v21/launch_background.xml b/animations/step_05_b/android/app/src/main/res/drawable-v21/launch_background.xml new file mode 100644 index 0000000000..f74085f3f6 --- /dev/null +++ b/animations/step_05_b/android/app/src/main/res/drawable-v21/launch_background.xml @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/animations/step_05_b/android/app/src/main/res/drawable/launch_background.xml b/animations/step_05_b/android/app/src/main/res/drawable/launch_background.xml new file mode 100644 index 0000000000..304732f884 --- /dev/null +++ b/animations/step_05_b/android/app/src/main/res/drawable/launch_background.xml @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/animations/step_05_b/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/animations/step_05_b/android/app/src/main/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..db77bb4b7b0906d62b1847e87f15cdcacf6a4f29 GIT binary patch literal 544 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY3?!3`olAj~WQl7;NpOBzNqJ&XDuZK6ep0G} zXKrG8YEWuoN@d~6R2!h8bpbvhu0Wd6uZuB!w&u2PAxD2eNXD>P5D~Wn-+_Wa#27Xc zC?Zj|6r#X(-D3u$NCt}(Ms06KgJ4FxJVv{GM)!I~&n8Bnc94O7-Hd)cjDZswgC;Qs zO=b+9!WcT8F?0rF7!Uys2bs@gozCP?z~o%U|N3vA*22NaGQG zlg@K`O_XuxvZ&Ks^m&R!`&1=spLvfx7oGDKDwpwW`#iqdw@AL`7MR}m`rwr|mZgU`8P7SBkL78fFf!WnuYWm$5Z0 zNXhDbCv&49sM544K|?c)WrFfiZvCi9h0O)B3Pgg&ebxsLQ05GG~ AQ2+n{ literal 0 HcmV?d00001 diff --git a/animations/step_05_b/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/animations/step_05_b/android/app/src/main/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..17987b79bb8a35cc66c3c1fd44f5a5526c1b78be GIT binary patch literal 442 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA3?vioaBc-sk|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*D5Xx&nMcT!A!W`0S9QKQy;}1Cl^CgaH=;G9cpY;r$Q>i*pfB zP2drbID<_#qf;rPZx^FqH)F_D#*k@@q03KywUtLX8Ua?`H+NMzkczFPK3lFz@i_kW%1NOn0|D2I9n9wzH8m|-tHjsw|9>@K=iMBhxvkv6m8Y-l zytQ?X=U+MF$@3 zt`~i=@j|6y)RWMK--}M|=T`o&^Ni>IoWKHEbBXz7?A@mgWoL>!*SXo`SZH-*HSdS+ yn*9;$7;m`l>wYBC5bq;=U}IMqLzqbYCidGC!)_gkIk_C@Uy!y&wkt5C($~2D>~)O*cj@FGjOCM)M>_ixfudOh)?xMu#Fs z#}Y=@YDTwOM)x{K_j*Q;dPdJ?Mz0n|pLRx{4n|)f>SXlmV)XB04CrSJn#dS5nK2lM zrZ9#~WelCp7&e13Y$jvaEXHskn$2V!!DN-nWS__6T*l;H&Fopn?A6HZ-6WRLFP=R` zqG+CE#d4|IbyAI+rJJ`&x9*T`+a=p|0O(+s{UBcyZdkhj=yS1>AirP+0R;mf2uMgM zC}@~JfByORAh4SyRgi&!(cja>F(l*O+nd+@4m$|6K6KDn_&uvCpV23&>G9HJp{xgg zoq1^2_p9@|WEo z*X_Uko@K)qYYv~>43eQGMdbiGbo>E~Q& zrYBH{QP^@Sti!`2)uG{irBBq@y*$B zi#&(U-*=fp74j)RyIw49+0MRPMRU)+a2r*PJ$L5roHt2$UjExCTZSbq%V!HeS7J$N zdG@vOZB4v_lF7Plrx+hxo7(fCV&}fHq)$ literal 0 HcmV?d00001 diff --git a/animations/step_05_b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/animations/step_05_b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..d5f1c8d34e7a88e3f88bea192c3a370d44689c3c GIT binary patch literal 1031 zcmeAS@N?(olHy`uVBq!ia0vp^6F``Q8Ax83A=Cw=BuiW)N`mv#O3D+9QW+dm@{>{( zJaZG%Q-e|yQz{EjrrIztFa`(sgt!6~Yi|1%a`XoT0ojZ}lNrNjb9xjc(B0U1_% zz5^97Xt*%oq$rQy4?0GKNfJ44uvxI)gC`h-NZ|&0-7(qS@?b!5r36oQ}zyZrNO3 zMO=Or+<~>+A&uN&E!^Sl+>xE!QC-|oJv`ApDhqC^EWD|@=#J`=d#Xzxs4ah}w&Jnc z$|q_opQ^2TrnVZ0o~wh<3t%W&flvYGe#$xqda2bR_R zvPYgMcHgjZ5nSA^lJr%;<&0do;O^tDDh~=pIxA#coaCY>&N%M2^tq^U%3DB@ynvKo}b?yu-bFc-u0JHzced$sg7S3zqI(2 z#Km{dPr7I=pQ5>FuK#)QwK?Y`E`B?nP+}U)I#c1+FM*1kNvWG|a(TpksZQ3B@sD~b zpQ2)*V*TdwjFOtHvV|;OsiDqHi=6%)o4b!)x$)%9pGTsE z-JL={-Ffv+T87W(Xpooq<`r*VzWQcgBN$$`u}f>-ZQI1BB8ykN*=e4rIsJx9>z}*o zo~|9I;xof literal 0 HcmV?d00001 diff --git a/animations/step_05_b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/animations/step_05_b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..4d6372eebdb28e45604e46eeda8dd24651419bc0 GIT binary patch literal 1443 zcmb`G{WsKk6vsdJTdFg%tJav9_E4vzrOaqkWF|A724Nly!y+?N9`YV6wZ}5(X(D_N(?!*n3`|_r0Hc?=PQw&*vnU?QTFY zB_MsH|!j$PP;I}?dppoE_gA(4uc!jV&0!l7_;&p2^pxNo>PEcNJv za5_RT$o2Mf!<+r?&EbHH6nMoTsDOa;mN(wv8RNsHpG)`^ymG-S5By8=l9iVXzN_eG%Xg2@Xeq76tTZ*dGh~Lo9vl;Zfs+W#BydUw zCkZ$o1LqWQO$FC9aKlLl*7x9^0q%0}$OMlp@Kk_jHXOjofdePND+j!A{q!8~Jn+s3 z?~~w@4?egS02}8NuulUA=L~QQfm;MzCGd)XhiftT;+zFO&JVyp2mBww?;QByS_1w! zrQlx%{^cMj0|Bo1FjwY@Q8?Hx0cIPF*@-ZRFpPc#bBw{5@tD(5%sClzIfl8WU~V#u zm5Q;_F!wa$BSpqhN>W@2De?TKWR*!ujY;Yylk_X5#~V!L*Gw~;$%4Q8~Mad z@`-kG?yb$a9cHIApZDVZ^U6Xkp<*4rU82O7%}0jjHlK{id@?-wpN*fCHXyXh(bLt* zPc}H-x0e4E&nQ>y%B-(EL=9}RyC%MyX=upHuFhAk&MLbsF0LP-q`XnH78@fT+pKPW zu72MW`|?8ht^tz$iC}ZwLp4tB;Q49K!QCF3@!iB1qOI=?w z7In!}F~ij(18UYUjnbmC!qKhPo%24?8U1x{7o(+?^Zu0Hx81|FuS?bJ0jgBhEMzf< zCgUq7r2OCB(`XkKcN-TL>u5y#dD6D!)5W?`O5)V^>jb)P)GBdy%t$uUMpf$SNV31$ zb||OojAbvMP?T@$h_ZiFLFVHDmbyMhJF|-_)HX3%m=CDI+ID$0^C>kzxprBW)hw(v zr!Gmda);ICoQyhV_oP5+C%?jcG8v+D@9f?Dk*!BxY}dazmrT@64UrP3hlslANK)bq z$67n83eh}OeW&SV@HG95P|bjfqJ7gw$e+`Hxo!4cx`jdK1bJ>YDSpGKLPZ^1cv$ek zIB?0S<#tX?SJCLWdMd{-ME?$hc7A$zBOdIJ)4!KcAwb=VMov)nK;9z>x~rfT1>dS+ zZ6#`2v@`jgbqq)P22H)Tx2CpmM^o1$B+xT6`(v%5xJ(?j#>Q$+rx_R|7TzDZe{J6q zG1*EcU%tE?!kO%^M;3aM6JN*LAKUVb^xz8-Pxo#jR5(-KBeLJvA@-gxNHx0M-ZJLl z;#JwQoh~9V?`UVo#}{6ka@II>++D@%KqGpMdlQ}?9E*wFcf5(#XQnP$Dk5~%iX^>f z%$y;?M0BLp{O3a(-4A?ewryHrrD%cx#Q^%KY1H zNre$ve+vceSLZcNY4U(RBX&)oZn*Py()h)XkE?PL$!bNb{N5FVI2Y%LKEm%yvpyTP z(1P?z~7YxD~Rf<(a@_y` literal 0 HcmV?d00001 diff --git a/animations/step_05_b/android/app/src/main/res/values-night/styles.xml b/animations/step_05_b/android/app/src/main/res/values-night/styles.xml new file mode 100644 index 0000000000..06952be745 --- /dev/null +++ b/animations/step_05_b/android/app/src/main/res/values-night/styles.xml @@ -0,0 +1,18 @@ + + + + + + + diff --git a/animations/step_05_b/android/app/src/main/res/values/styles.xml b/animations/step_05_b/android/app/src/main/res/values/styles.xml new file mode 100644 index 0000000000..cb1ef88056 --- /dev/null +++ b/animations/step_05_b/android/app/src/main/res/values/styles.xml @@ -0,0 +1,18 @@ + + + + + + + diff --git a/animations/step_05_b/android/app/src/profile/AndroidManifest.xml b/animations/step_05_b/android/app/src/profile/AndroidManifest.xml new file mode 100644 index 0000000000..399f6981d5 --- /dev/null +++ b/animations/step_05_b/android/app/src/profile/AndroidManifest.xml @@ -0,0 +1,7 @@ + + + + diff --git a/animations/step_05_b/android/build.gradle.kts b/animations/step_05_b/android/build.gradle.kts new file mode 100644 index 0000000000..89176ef44e --- /dev/null +++ b/animations/step_05_b/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/animations/step_05_b/android/gradle.properties b/animations/step_05_b/android/gradle.properties new file mode 100644 index 0000000000..f018a61817 --- /dev/null +++ b/animations/step_05_b/android/gradle.properties @@ -0,0 +1,3 @@ +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError +android.useAndroidX=true +android.enableJetifier=true diff --git a/animations/step_05_b/android/gradle/wrapper/gradle-wrapper.properties b/animations/step_05_b/android/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000000..afa1e8eb0a --- /dev/null +++ b/animations/step_05_b/android/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,5 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip diff --git a/animations/step_05_b/android/settings.gradle.kts b/animations/step_05_b/android/settings.gradle.kts new file mode 100644 index 0000000000..a439442c20 --- /dev/null +++ b/animations/step_05_b/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.0" apply false + id("org.jetbrains.kotlin.android") version "1.8.22" apply false +} + +include(":app") diff --git a/animations/step_05_b/ios/.gitignore b/animations/step_05_b/ios/.gitignore new file mode 100644 index 0000000000..7a7f9873ad --- /dev/null +++ b/animations/step_05_b/ios/.gitignore @@ -0,0 +1,34 @@ +**/dgph +*.mode1v3 +*.mode2v3 +*.moved-aside +*.pbxuser +*.perspectivev3 +**/*sync/ +.sconsign.dblite +.tags* +**/.vagrant/ +**/DerivedData/ +Icon? +**/Pods/ +**/.symlinks/ +profile +xcuserdata +**/.generated/ +Flutter/App.framework +Flutter/Flutter.framework +Flutter/Flutter.podspec +Flutter/Generated.xcconfig +Flutter/ephemeral/ +Flutter/app.flx +Flutter/app.zip +Flutter/flutter_assets/ +Flutter/flutter_export_environment.sh +ServiceDefinitions.json +Runner/GeneratedPluginRegistrant.* + +# Exceptions to above rules. +!default.mode1v3 +!default.mode2v3 +!default.pbxuser +!default.perspectivev3 diff --git a/animations/step_05_b/ios/Flutter/AppFrameworkInfo.plist b/animations/step_05_b/ios/Flutter/AppFrameworkInfo.plist new file mode 100644 index 0000000000..7c56964006 --- /dev/null +++ b/animations/step_05_b/ios/Flutter/AppFrameworkInfo.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + App + CFBundleIdentifier + io.flutter.flutter.app + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + App + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1.0 + MinimumOSVersion + 12.0 + + diff --git a/animations/step_05_b/ios/Flutter/Debug.xcconfig b/animations/step_05_b/ios/Flutter/Debug.xcconfig new file mode 100644 index 0000000000..592ceee85b --- /dev/null +++ b/animations/step_05_b/ios/Flutter/Debug.xcconfig @@ -0,0 +1 @@ +#include "Generated.xcconfig" diff --git a/animations/step_05_b/ios/Flutter/Release.xcconfig b/animations/step_05_b/ios/Flutter/Release.xcconfig new file mode 100644 index 0000000000..592ceee85b --- /dev/null +++ b/animations/step_05_b/ios/Flutter/Release.xcconfig @@ -0,0 +1 @@ +#include "Generated.xcconfig" diff --git a/animations/step_05_b/ios/Runner.xcodeproj/project.pbxproj b/animations/step_05_b/ios/Runner.xcodeproj/project.pbxproj new file mode 100644 index 0000000000..faef24d87a --- /dev/null +++ b/animations/step_05_b/ios/Runner.xcodeproj/project.pbxproj @@ -0,0 +1,616 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 54; + objects = { + +/* Begin PBXBuildFile section */ + 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; + 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; + 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; + 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; + 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; + 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; + 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 331C8085294A63A400263BE5 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 97C146E61CF9000F007C117D /* Project object */; + proxyType = 1; + remoteGlobalIDString = 97C146ED1CF9000F007C117D; + remoteInfo = Runner; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 9705A1C41CF9048500538489 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; + 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; + 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; + 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; + 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; + 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; + 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; + 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; + 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 97C146EB1CF9000F007C117D /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 331C8082294A63A400263BE5 /* RunnerTests */ = { + isa = PBXGroup; + children = ( + 331C807B294A618700263BE5 /* RunnerTests.swift */, + ); + path = RunnerTests; + sourceTree = ""; + }; + 9740EEB11CF90186004384FC /* Flutter */ = { + isa = PBXGroup; + children = ( + 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */, + 9740EEB21CF90195004384FC /* Debug.xcconfig */, + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, + 9740EEB31CF90195004384FC /* Generated.xcconfig */, + ); + name = Flutter; + sourceTree = ""; + }; + 97C146E51CF9000F007C117D = { + isa = PBXGroup; + children = ( + 9740EEB11CF90186004384FC /* Flutter */, + 97C146F01CF9000F007C117D /* Runner */, + 97C146EF1CF9000F007C117D /* Products */, + 331C8082294A63A400263BE5 /* RunnerTests */, + ); + sourceTree = ""; + }; + 97C146EF1CF9000F007C117D /* Products */ = { + isa = PBXGroup; + children = ( + 97C146EE1CF9000F007C117D /* Runner.app */, + 331C8081294A63A400263BE5 /* RunnerTests.xctest */, + ); + name = Products; + sourceTree = ""; + }; + 97C146F01CF9000F007C117D /* Runner */ = { + isa = PBXGroup; + children = ( + 97C146FA1CF9000F007C117D /* Main.storyboard */, + 97C146FD1CF9000F007C117D /* Assets.xcassets */, + 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */, + 97C147021CF9000F007C117D /* Info.plist */, + 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */, + 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */, + 74858FAE1ED2DC5600515810 /* AppDelegate.swift */, + 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */, + ); + path = Runner; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 331C8080294A63A400263BE5 /* RunnerTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; + buildPhases = ( + 331C807D294A63A400263BE5 /* Sources */, + 331C807F294A63A400263BE5 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 331C8086294A63A400263BE5 /* PBXTargetDependency */, + ); + name = RunnerTests; + productName = RunnerTests; + productReference = 331C8081294A63A400263BE5 /* RunnerTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; + 97C146ED1CF9000F007C117D /* Runner */ = { + isa = PBXNativeTarget; + buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; + buildPhases = ( + 9740EEB61CF901F6004384FC /* Run Script */, + 97C146EA1CF9000F007C117D /* Sources */, + 97C146EB1CF9000F007C117D /* Frameworks */, + 97C146EC1CF9000F007C117D /* Resources */, + 9705A1C41CF9048500538489 /* Embed Frameworks */, + 3B06AD1E1E4923F5004D2608 /* Thin Binary */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = Runner; + productName = Runner; + productReference = 97C146EE1CF9000F007C117D /* Runner.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 97C146E61CF9000F007C117D /* Project object */ = { + isa = PBXProject; + attributes = { + BuildIndependentTargetsInParallel = YES; + LastUpgradeCheck = 1510; + ORGANIZATIONNAME = ""; + TargetAttributes = { + 331C8080294A63A400263BE5 = { + CreatedOnToolsVersion = 14.0; + TestTargetID = 97C146ED1CF9000F007C117D; + }; + 97C146ED1CF9000F007C117D = { + CreatedOnToolsVersion = 7.3.1; + LastSwiftMigration = 1100; + }; + }; + }; + buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 97C146E51CF9000F007C117D; + productRefGroup = 97C146EF1CF9000F007C117D /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 97C146ED1CF9000F007C117D /* Runner */, + 331C8080294A63A400263BE5 /* RunnerTests */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 331C807F294A63A400263BE5 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 97C146EC1CF9000F007C117D /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */, + 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */, + 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */, + 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", + ); + name = "Thin Binary"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + }; + 9740EEB61CF901F6004384FC /* Run Script */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Run Script"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 331C807D294A63A400263BE5 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 97C146EA1CF9000F007C117D /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */, + 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 331C8086294A63A400263BE5 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 97C146ED1CF9000F007C117D /* Runner */; + targetProxy = 331C8085294A63A400263BE5 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + 97C146FA1CF9000F007C117D /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 97C146FB1CF9000F007C117D /* Base */, + ); + name = Main.storyboard; + sourceTree = ""; + }; + 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 97C147001CF9000F007C117D /* Base */, + ); + name = LaunchScreen.storyboard; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 249021D3217E4FDB00AE95B9 /* Profile */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + SUPPORTED_PLATFORMS = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Profile; + }; + 249021D4217E4FDB00AE95B9 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + ENABLE_BITCODE = NO; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.example.quiz; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; + SWIFT_VERSION = 5.0; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Profile; + }; + 331C8088294A63A400263BE5 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.quiz.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; + }; + name = Debug; + }; + 331C8089294A63A400263BE5 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.quiz.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; + }; + name = Release; + }; + 331C808A294A63A400263BE5 /* Profile */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.quiz.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; + }; + name = Profile; + }; + 97C147031CF9000F007C117D /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 97C147041CF9000F007C117D /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + SUPPORTED_PLATFORMS = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 97C147061CF9000F007C117D /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + ENABLE_BITCODE = NO; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.example.quiz; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Debug; + }; + 97C147071CF9000F007C117D /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + ENABLE_BITCODE = NO; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.example.quiz; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; + SWIFT_VERSION = 5.0; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 331C8088294A63A400263BE5 /* Debug */, + 331C8089294A63A400263BE5 /* Release */, + 331C808A294A63A400263BE5 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 97C147031CF9000F007C117D /* Debug */, + 97C147041CF9000F007C117D /* Release */, + 249021D3217E4FDB00AE95B9 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 97C147061CF9000F007C117D /* Debug */, + 97C147071CF9000F007C117D /* Release */, + 249021D4217E4FDB00AE95B9 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 97C146E61CF9000F007C117D /* Project object */; +} diff --git a/animations/step_05_b/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/animations/step_05_b/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000000..919434a625 --- /dev/null +++ b/animations/step_05_b/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/animations/step_05_b/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/animations/step_05_b/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000000..18d981003d --- /dev/null +++ b/animations/step_05_b/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/animations/step_05_b/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/animations/step_05_b/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings new file mode 100644 index 0000000000..f9b0d7c5ea --- /dev/null +++ b/animations/step_05_b/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings @@ -0,0 +1,8 @@ + + + + + PreviewsEnabled + + + diff --git a/animations/step_05_b/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/animations/step_05_b/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme new file mode 100644 index 0000000000..8e3ca5dfe1 --- /dev/null +++ b/animations/step_05_b/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -0,0 +1,98 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/animations/step_05_b/ios/Runner.xcworkspace/contents.xcworkspacedata b/animations/step_05_b/ios/Runner.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000000..1d526a16ed --- /dev/null +++ b/animations/step_05_b/ios/Runner.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/animations/step_05_b/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/animations/step_05_b/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000000..18d981003d --- /dev/null +++ b/animations/step_05_b/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/animations/step_05_b/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/animations/step_05_b/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings new file mode 100644 index 0000000000..f9b0d7c5ea --- /dev/null +++ b/animations/step_05_b/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings @@ -0,0 +1,8 @@ + + + + + PreviewsEnabled + + + diff --git a/animations/step_05_b/ios/Runner/AppDelegate.swift b/animations/step_05_b/ios/Runner/AppDelegate.swift new file mode 100644 index 0000000000..626664468b --- /dev/null +++ b/animations/step_05_b/ios/Runner/AppDelegate.swift @@ -0,0 +1,13 @@ +import Flutter +import UIKit + +@main +@objc class AppDelegate: FlutterAppDelegate { + override func application( + _ application: UIApplication, + didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? + ) -> Bool { + GeneratedPluginRegistrant.register(with: self) + return super.application(application, didFinishLaunchingWithOptions: launchOptions) + } +} diff --git a/animations/step_05_b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/animations/step_05_b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000000..d36b1fab2d --- /dev/null +++ b/animations/step_05_b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,122 @@ +{ + "images" : [ + { + "size" : "20x20", + "idiom" : "iphone", + "filename" : "Icon-App-20x20@2x.png", + "scale" : "2x" + }, + { + "size" : "20x20", + "idiom" : "iphone", + "filename" : "Icon-App-20x20@3x.png", + "scale" : "3x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "Icon-App-29x29@1x.png", + "scale" : "1x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "Icon-App-29x29@2x.png", + "scale" : "2x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "Icon-App-29x29@3x.png", + "scale" : "3x" + }, + { + "size" : "40x40", + "idiom" : "iphone", + "filename" : "Icon-App-40x40@2x.png", + "scale" : "2x" + }, + { + "size" : "40x40", + "idiom" : "iphone", + "filename" : "Icon-App-40x40@3x.png", + "scale" : "3x" + }, + { + "size" : "60x60", + "idiom" : "iphone", + "filename" : "Icon-App-60x60@2x.png", + "scale" : "2x" + }, + { + "size" : "60x60", + "idiom" : "iphone", + "filename" : "Icon-App-60x60@3x.png", + "scale" : "3x" + }, + { + "size" : "20x20", + "idiom" : "ipad", + "filename" : "Icon-App-20x20@1x.png", + "scale" : "1x" + }, + { + "size" : "20x20", + "idiom" : "ipad", + "filename" : "Icon-App-20x20@2x.png", + "scale" : "2x" + }, + { + "size" : "29x29", + "idiom" : "ipad", + "filename" : "Icon-App-29x29@1x.png", + "scale" : "1x" + }, + { + "size" : "29x29", + "idiom" : "ipad", + "filename" : "Icon-App-29x29@2x.png", + "scale" : "2x" + }, + { + "size" : "40x40", + "idiom" : "ipad", + "filename" : "Icon-App-40x40@1x.png", + "scale" : "1x" + }, + { + "size" : "40x40", + "idiom" : "ipad", + "filename" : "Icon-App-40x40@2x.png", + "scale" : "2x" + }, + { + "size" : "76x76", + "idiom" : "ipad", + "filename" : "Icon-App-76x76@1x.png", + "scale" : "1x" + }, + { + "size" : "76x76", + "idiom" : "ipad", + "filename" : "Icon-App-76x76@2x.png", + "scale" : "2x" + }, + { + "size" : "83.5x83.5", + "idiom" : "ipad", + "filename" : "Icon-App-83.5x83.5@2x.png", + "scale" : "2x" + }, + { + "size" : "1024x1024", + "idiom" : "ios-marketing", + "filename" : "Icon-App-1024x1024@1x.png", + "scale" : "1x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} diff --git a/animations/step_05_b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png b/animations/step_05_b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..dc9ada4725e9b0ddb1deab583e5b5102493aa332 GIT binary patch literal 10932 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 literal 0 HcmV?d00001 diff --git a/animations/step_05_b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png b/animations/step_05_b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..797d452e458972bab9d994556c8305db4c827017 GIT binary patch literal 406 zcmV;H0crk;P))>cdjpWt&rLJgVp-t?DREyuq1A%0Z4)6_WsQ7{nzjN zo!X zGXV)2i3kcZIL~_j>uIKPK_zib+3T+Nt3Mb&Br)s)UIaA}@p{wDda>7=Q|mGRp7pqY zkJ!7E{MNz$9nOwoVqpFb)}$IP24Wn2JJ=Cw(!`OXJBr45rP>>AQr$6c7slJWvbpNW z@KTwna6d?PP>hvXCcp=4F;=GR@R4E7{4VU^0p4F>v^#A|>07*qoM6N<$f*5nx ACIA2c literal 0 HcmV?d00001 diff --git a/animations/step_05_b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png b/animations/step_05_b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..6ed2d933e1120817fe9182483a228007b18ab6ae GIT binary patch literal 450 zcmV;z0X_bSP)iGWQ_5NJQ_~rNh*z)}eT%KUb z`7gNk0#AwF^#0T0?hIa^`~Ck;!}#m+_uT050aTR(J!bU#|IzRL%^UsMS#KsYnTF*!YeDOytlP4VhV?b} z%rz_<=#CPc)tU1MZTq~*2=8~iZ!lSa<{9b@2Jl;?IEV8)=fG217*|@)CCYgFze-x? zIFODUIA>nWKpE+bn~n7;-89sa>#DR>TSlqWk*!2hSN6D~Qb#VqbP~4Fk&m`@1$JGr zXPIdeRE&b2Thd#{MtDK$px*d3-Wx``>!oimf%|A-&-q*6KAH)e$3|6JV%HX{Hig)k suLT-RhftRq8b9;(V=235Wa|I=027H2wCDra;{X5v07*qoM6N<$f;9x^2LJ#7 literal 0 HcmV?d00001 diff --git a/animations/step_05_b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png b/animations/step_05_b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..4cd7b0099ca80c806f8fe495613e8d6c69460d76 GIT binary patch literal 282 zcmV+#0p(^bcu7P-R4C8Q z&e;xxFbF_Vrezo%_kH*OKhshZ6BFpG-Y1e10`QXJKbND7AMQ&cMj60B5TNObaZxYybcN07*qoM6N<$g3m;S%K!iX literal 0 HcmV?d00001 diff --git a/animations/step_05_b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png b/animations/step_05_b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..fe730945a01f64a61e2235dbe3f45b08f7729182 GIT binary patch literal 462 zcmV;<0WtoGP)-}iV`2<;=$?g5M=KQbZ{F&YRNy7Nn@%_*5{gvDM0aKI4?ESmw z{NnZg)A0R`+4?NF_RZexyVB&^^ZvN!{I28tr{Vje;QNTz`dG&Jz0~Ek&f2;*Z7>B|cg}xYpxEFY+0YrKLF;^Q+-HreN0P{&i zK~zY`?b7ECf-n?@;d<&orQ*Q7KoR%4|C>{W^h6@&01>0SKS`dn{Q}GT%Qj_{PLZ_& zs`MFI#j-(>?bvdZ!8^xTwlY{qA)T4QLbY@j(!YJ7aXJervHy6HaG_2SB`6CC{He}f zHVw(fJWApwPq!6VY7r1w-Fs)@ox~N+q|w~e;JI~C4Vf^@d>Wvj=fl`^u9x9wd9 zR%3*Q+)t%S!MU_`id^@&Y{y7-r98lZX0?YrHlfmwb?#}^1b{8g&KzmkE(L>Z&)179 zp<)v6Y}pRl100G2FL_t(o!|l{-Q-VMg#&MKg7c{O0 z2wJImOS3Gy*Z2Qifdv~JYOp;v+U)a|nLoc7hNH;I$;lzDt$}rkaFw1mYK5_0Q(Sut zvbEloxON7$+HSOgC9Z8ltuC&0OSF!-mXv5caV>#bc3@hBPX@I$58-z}(ZZE!t-aOG zpjNkbau@>yEzH(5Yj4kZiMH32XI!4~gVXNnjAvRx;Sdg^`>2DpUEwoMhTs_st8pKG z(%SHyHdU&v%f36~uERh!bd`!T2dw;z6PrOTQ7Vt*#9F2uHlUVnb#ev_o^fh}Dzmq} zWtlk35}k=?xj28uO|5>>$yXadTUE@@IPpgH`gJ~Ro4>jd1IF|(+IX>8M4Ps{PNvmI zNj4D+XgN83gPt_Gm}`Ybv{;+&yu-C(Grdiahmo~BjG-l&mWM+{e5M1sm&=xduwgM9 z`8OEh`=F3r`^E{n_;%9weN{cf2%7=VzC@cYj+lg>+3|D|_1C@{hcU(DyQG_BvBWe? zvTv``=%b1zrol#=R`JB)>cdjpWt&rLJgVp-t?DREyuq1A%0Z4)6_WsQ7{nzjN zo!X zGXV)2i3kcZIL~_j>uIKPK_zib+3T+Nt3Mb&Br)s)UIaA}@p{wDda>7=Q|mGRp7pqY zkJ!7E{MNz$9nOwoVqpFb)}$IP24Wn2JJ=Cw(!`OXJBr45rP>>AQr$6c7slJWvbpNW z@KTwna6d?PP>hvXCcp=4F;=GR@R4E7{4VU^0p4F>v^#A|>07*qoM6N<$f*5nx ACIA2c literal 0 HcmV?d00001 diff --git a/animations/step_05_b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png b/animations/step_05_b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..502f463a9bc882b461c96aadf492d1729e49e725 GIT binary patch literal 586 zcmV-Q0=4~#P)+}#`wDE{8-2Mebf5<{{PqV{TgVcv*r8?UZ3{-|G?_}T*&y;@cqf{ z{Q*~+qr%%p!1pS*_Uicl#q9lc(D`!D`LN62sNwq{oYw(Wmhk)k<@f$!$@ng~_5)Ru z0Z)trIA5^j{DIW^c+vT2%lW+2<(RtE2wR;4O@)Tm`Xr*?A(qYoM}7i5Yxw>D(&6ou zxz!_Xr~yNF+waPe00049Nkl*;a!v6h%{rlvIH#gW3s8p;bFr=l}mRqpW2h zw=OA%hdyL~z+UHOzl0eKhEr$YYOL-c-%Y<)=j?(bzDweB7{b+%_ypvm_cG{SvM=DK zhv{K@m>#Bw>2W$eUI#iU)Wdgs8Y3U+A$Gd&{+j)d)BmGKx+43U_!tik_YlN)>$7G! zhkE!s;%oku3;IwG3U^2kw?z+HM)jB{@zFhK8P#KMSytSthr+4!c(5c%+^UBn`0X*2 zy3(k600_CSZj?O$Qu%&$;|TGUJrptR(HzyIx>5E(2r{eA(<6t3e3I0B)7d6s7?Z5J zZ!rtKvA{MiEBm&KFtoifx>5P^Z=vl)95XJn()aS5%ad(s?4-=Tkis9IGu{`Fy8r+H07*qoM6N<$f20Z)wqMt%V?S?~D#06};F zA3KcL`Wb+>5ObvgQIG&ig8(;V04hz?@cqy3{mSh8o!|U|)cI!1_+!fWH@o*8vh^CU z^ws0;(c$gI+2~q^tO#GDHf@=;DncUw00J^eL_t(&-tE|HQ`%4vfZ;WsBqu-$0nu1R zq^Vj;p$clf^?twn|KHO+IGt^q#a3X?w9dXC@*yxhv&l}F322(8Y1&=P&I}~G@#h6; z1CV9ecD9ZEe87{{NtI*)_aJ<`kJa z?5=RBtFF50s;jQLFil-`)m2wrb=6h(&brpj%nG_U&ut~$?8Rokzxi8zJoWr#2dto5 zOX_URcc<1`Iky+jc;A%Vzx}1QU{2$|cKPom2Vf1{8m`vja4{F>HS?^Nc^rp}xo+Nh zxd}eOm`fm3@MQC1< zIk&aCjb~Yh%5+Yq0`)D;q{#-Uqlv*o+Oor zE!I71Z@ASH3grl8&P^L0WpavHoP|UX4e?!igT`4?AZk$hu*@%6WJ;zDOGlw7kj@ zY5!B-0ft0f?Lgb>C;$Ke07*qoM6N<$f~t1N9smFU literal 0 HcmV?d00001 diff --git a/animations/step_05_b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png b/animations/step_05_b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..0ec303439225b78712f49115768196d8d76f6790 GIT binary patch literal 862 zcmV-k1EKthP)20Z)wqMt%V?S?~D#06};F zA3KcL`Wb+>5ObvgQIG&ig8(;V04hz?@cqy3{mSh8o!|U|)cI!1_+!fWH@o*8vh^CU z^ws0;(c$gI+2~q^tO#GDHf@=;DncUw00J^eL_t(&-tE|HQ`%4vfZ;WsBqu-$0nu1R zq^Vj;p$clf^?twn|KHO+IGt^q#a3X?w9dXC@*yxhv&l}F322(8Y1&=P&I}~G@#h6; z1CV9ecD9ZEe87{{NtI*)_aJ<`kJa z?5=RBtFF50s;jQLFil-`)m2wrb=6h(&brpj%nG_U&ut~$?8Rokzxi8zJoWr#2dto5 zOX_URcc<1`Iky+jc;A%Vzx}1QU{2$|cKPom2Vf1{8m`vja4{F>HS?^Nc^rp}xo+Nh zxd}eOm`fm3@MQC1< zIk&aCjb~Yh%5+Yq0`)D;q{#-Uqlv*o+Oor zE!I71Z@ASH3grl8&P^L0WpavHoP|UX4e?!igT`4?AZk$hu*@%6WJ;zDOGlw7kj@ zY5!B-0ft0f?Lgb>C;$Ke07*qoM6N<$f~t1N9smFU literal 0 HcmV?d00001 diff --git a/animations/step_05_b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png b/animations/step_05_b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..e9f5fea27c705180eb716271f41b582e76dcbd90 GIT binary patch literal 1674 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 literal 0 HcmV?d00001 diff --git a/animations/step_05_b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png b/animations/step_05_b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..0467bf12aa4d28f374bb26596605a46dcbb3e7c8 GIT binary patch literal 1418 zcmV;51$Fv~P)q zKfU)WzW*n(@|xWGCA9ScMt*e9`2kdxPQ&&>|-UCa7_51w+ zLUsW@ZzZSW0y$)Hp~e9%PvP|a03ks1`~K?q{u;6NC8*{AOqIUq{CL&;p56Lf$oQGq z^={4hPQv)y=I|4n+?>7Fim=dxt1 z2H+Dm+1+fh+IF>G0SjJMkQQre1x4|G*Z==(Ot&kCnUrL4I(rf(ucITwmuHf^hXiJT zkdTm&kdTm&kdTm&kdP`esgWG0BcWCVkVZ&2dUwN`cgM8QJb`Z7Z~e<&Yj2(}>Tmf` zm1{eLgw!b{bXkjWbF%dTkTZEJWyWOb##Lfw4EK2}<0d6%>AGS{po>WCOy&f$Tay_> z?NBlkpo@s-O;0V%Y_Xa-G#_O08q5LR*~F%&)}{}r&L%Sbs8AS4t7Y0NEx*{soY=0MZExqA5XHQkqi#4gW3 zqODM^iyZl;dvf)-bOXtOru(s)Uc7~BFx{w-FK;2{`VA?(g&@3z&bfLFyctOH!cVsF z7IL=fo-qBndRUm;kAdXR4e6>k-z|21AaN%ubeVrHl*<|s&Ax@W-t?LR(P-24A5=>a z*R9#QvjzF8n%@1Nw@?CG@6(%>+-0ASK~jEmCV|&a*7-GKT72W<(TbSjf)&Eme6nGE z>Gkj4Sq&2e+-G%|+NM8OOm5zVl9{Z8Dd8A5z3y8mZ=4Bv4%>as_{9cN#bm~;h>62( zdqY93Zy}v&c4n($Vv!UybR8ocs7#zbfX1IY-*w~)p}XyZ-SFC~4w>BvMVr`dFbelV{lLL0bx7@*ZZdebr3`sP;? zVImji)kG)(6Juv0lz@q`F!k1FE;CQ(D0iG$wchPbKZQELlsZ#~rt8#90Y_Xh&3U-< z{s<&cCV_1`^TD^ia9!*mQDq& zn2{r`j};V|uV%_wsP!zB?m%;FeaRe+X47K0e+KE!8C{gAWF8)lCd1u1%~|M!XNRvw zvtqy3iz0WSpWdhn6$hP8PaRBmp)q`#PCA`Vd#Tc$@f1tAcM>f_I@bC)hkI9|o(Iqv zo}Piadq!j76}004RBio<`)70k^`K1NK)q>w?p^C6J2ZC!+UppiK6&y3Kmbv&O!oYF z34$0Z;QO!JOY#!`qyGH<3Pd}Pt@q*A0V=3SVtWKRR8d8Z&@)3qLPA19LPA19LPEUC YUoZo%k(ykuW&i*H07*qoM6N<$f+CH{y8r+H literal 0 HcmV?d00001 diff --git a/animations/step_05_b/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json b/animations/step_05_b/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json new file mode 100644 index 0000000000..0bedcf2fd4 --- /dev/null +++ b/animations/step_05_b/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "LaunchImage.png", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "LaunchImage@2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "filename" : "LaunchImage@3x.png", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} diff --git a/animations/step_05_b/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png b/animations/step_05_b/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png new file mode 100644 index 0000000000000000000000000000000000000000..9da19eacad3b03bb08bbddbbf4ac48dd78b3d838 GIT binary patch literal 68 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx0wlM}@Gt=>Zci7-kcv6Uzs@r-FtIZ-&5|)J Q1PU{Fy85}Sb4q9e0B4a5jsO4v literal 0 HcmV?d00001 diff --git a/animations/step_05_b/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png b/animations/step_05_b/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..9da19eacad3b03bb08bbddbbf4ac48dd78b3d838 GIT binary patch literal 68 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx0wlM}@Gt=>Zci7-kcv6Uzs@r-FtIZ-&5|)J Q1PU{Fy85}Sb4q9e0B4a5jsO4v literal 0 HcmV?d00001 diff --git a/animations/step_05_b/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png b/animations/step_05_b/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..9da19eacad3b03bb08bbddbbf4ac48dd78b3d838 GIT binary patch literal 68 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx0wlM}@Gt=>Zci7-kcv6Uzs@r-FtIZ-&5|)J Q1PU{Fy85}Sb4q9e0B4a5jsO4v literal 0 HcmV?d00001 diff --git a/animations/step_05_b/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md b/animations/step_05_b/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md new file mode 100644 index 0000000000..89c2725b70 --- /dev/null +++ b/animations/step_05_b/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md @@ -0,0 +1,5 @@ +# Launch Screen Assets + +You can customize the launch screen with your own desired assets by replacing the image files in this directory. + +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. \ No newline at end of file diff --git a/animations/step_05_b/ios/Runner/Base.lproj/LaunchScreen.storyboard b/animations/step_05_b/ios/Runner/Base.lproj/LaunchScreen.storyboard new file mode 100644 index 0000000000..f2e259c7c9 --- /dev/null +++ b/animations/step_05_b/ios/Runner/Base.lproj/LaunchScreen.storyboard @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/animations/step_05_b/ios/Runner/Base.lproj/Main.storyboard b/animations/step_05_b/ios/Runner/Base.lproj/Main.storyboard new file mode 100644 index 0000000000..f3c28516fb --- /dev/null +++ b/animations/step_05_b/ios/Runner/Base.lproj/Main.storyboard @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/animations/step_05_b/ios/Runner/Info.plist b/animations/step_05_b/ios/Runner/Info.plist new file mode 100644 index 0000000000..1a0d38e408 --- /dev/null +++ b/animations/step_05_b/ios/Runner/Info.plist @@ -0,0 +1,49 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleDisplayName + Quiz + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + quiz + CFBundlePackageType + APPL + CFBundleShortVersionString + $(FLUTTER_BUILD_NAME) + CFBundleSignature + ???? + CFBundleVersion + $(FLUTTER_BUILD_NUMBER) + LSRequiresIPhoneOS + + UILaunchStoryboardName + LaunchScreen + UIMainStoryboardFile + Main + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + CADisableMinimumFrameDurationOnPhone + + UIApplicationSupportsIndirectInputEvents + + + diff --git a/animations/step_05_b/ios/Runner/Runner-Bridging-Header.h b/animations/step_05_b/ios/Runner/Runner-Bridging-Header.h new file mode 100644 index 0000000000..308a2a560b --- /dev/null +++ b/animations/step_05_b/ios/Runner/Runner-Bridging-Header.h @@ -0,0 +1 @@ +#import "GeneratedPluginRegistrant.h" diff --git a/animations/step_05_b/ios/RunnerTests/RunnerTests.swift b/animations/step_05_b/ios/RunnerTests/RunnerTests.swift new file mode 100644 index 0000000000..86a7c3b1b6 --- /dev/null +++ b/animations/step_05_b/ios/RunnerTests/RunnerTests.swift @@ -0,0 +1,12 @@ +import Flutter +import UIKit +import XCTest + +class RunnerTests: XCTestCase { + + func testExample() { + // If you add code to the Runner application, consider adding tests here. + // See https://developer.apple.com/documentation/xctest for more information about using XCTest. + } + +} diff --git a/animations/step_05_b/lib/flip_effect.dart b/animations/step_05_b/lib/flip_effect.dart new file mode 100644 index 0000000000..953c479ae9 --- /dev/null +++ b/animations/step_05_b/lib/flip_effect.dart @@ -0,0 +1,85 @@ +import 'package:flutter/widgets.dart'; +import 'dart:math' as math; + +class CardFlipEffect extends StatefulWidget { + final Widget child; + final Duration duration; + final double delayAmount; + + const CardFlipEffect({ + super.key, + required this.child, + required this.duration, + required this.delayAmount, + }); + + @override + State createState() => _CardFlipEffectState(); +} + +class _CardFlipEffectState extends State + with SingleTickerProviderStateMixin { + late final AnimationController _animationController; + Widget? _previousChild; + late final Animation _animationWithDelay; + + @override + void initState() { + super.initState(); + + _animationController = AnimationController( + vsync: this, + duration: widget.duration * (widget.delayAmount + 1), + ); + + _animationController.addListener(() { + if (_animationController.value == 1) { + _animationController.reset(); + } + }); + + _animationWithDelay = TweenSequence([ + if (widget.delayAmount > 0) + TweenSequenceItem( + tween: ConstantTween(0.0), + weight: widget.delayAmount, + ), + TweenSequenceItem(tween: Tween(begin: 0.0, end: 1.0), weight: 1.0), + ]).animate(_animationController); + } + + @override + void didUpdateWidget(covariant CardFlipEffect oldWidget) { + super.didUpdateWidget(oldWidget); + + if (widget.child.key != oldWidget.child.key) { + _handleChildChanged(widget.child, oldWidget.child); + } + } + + void _handleChildChanged(Widget newChild, Widget previousChild) { + _previousChild = previousChild; + _animationController.forward(); + } + + @override + Widget build(BuildContext context) { + return AnimatedBuilder( + animation: _animationWithDelay, + builder: (context, child) { + return Transform( + alignment: Alignment.center, + transform: + Matrix4.identity()..rotateX(_animationWithDelay.value * math.pi), + child: + _animationController.isAnimating + ? _animationWithDelay.value < 0.5 + ? _previousChild + : Transform.flip(flipY: true, child: widget.child) + : widget.child, + ); + }, + child: widget.child, + ); + } +} diff --git a/animations/step_05_b/lib/home_screen.dart b/animations/step_05_b/lib/home_screen.dart new file mode 100644 index 0000000000..4833bfb5c8 --- /dev/null +++ b/animations/step_05_b/lib/home_screen.dart @@ -0,0 +1,54 @@ +import 'package:animations/animations.dart'; +import 'package:flutter/material.dart'; +import 'question_screen.dart'; + +class HomeScreen extends StatelessWidget { + const HomeScreen({super.key}); + + @override + Widget build(BuildContext context) { + return Scaffold( + body: Center( + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + Text('✏️', style: Theme.of(context).textTheme.displayLarge), + Text( + 'Flutter Quiz', + style: Theme.of(context).textTheme.displayLarge!.copyWith( + fontWeight: FontWeight.w700, + color: Theme.of(context).colorScheme.onPrimaryFixedVariant, + ), + ), + ElevatedButton( + onPressed: () { + // Show the question screen to start the game + Navigator.push( + context, + PageRouteBuilder( + pageBuilder: (context, animation, secondaryAnimation) { + return const QuestionScreen(); + }, + transitionsBuilder: ( + context, + animation, + secondaryAnimation, + child, + ) { + return FadeThroughTransition( + animation: animation, + secondaryAnimation: secondaryAnimation, + child: child, + ); + }, + ), + ); + }, + child: const Text('New Game'), + ), + ], + ), + ), + ); + } +} diff --git a/animations/step_05_b/lib/main.dart b/animations/step_05_b/lib/main.dart new file mode 100644 index 0000000000..9ad4855719 --- /dev/null +++ b/animations/step_05_b/lib/main.dart @@ -0,0 +1,33 @@ +import 'package:animations/animations.dart'; +import 'package:flutter/material.dart'; + +import 'home_screen.dart'; + +void main() { + runApp(MainApp()); +} + +class MainApp extends StatelessWidget { + const MainApp({super.key}); + + @override + Widget build(BuildContext context) { + return MaterialApp( + debugShowCheckedModeBanner: false, + theme: ThemeData( + colorScheme: ColorScheme.fromSeed(seedColor: Colors.blue), + useMaterial3: true, + pageTransitionsTheme: PageTransitionsTheme( + builders: { + TargetPlatform.android: PredictiveBackPageTransitionsBuilder(), + TargetPlatform.iOS: FadeThroughPageTransitionsBuilder(), + TargetPlatform.macOS: FadeThroughPageTransitionsBuilder(), + TargetPlatform.windows: FadeThroughPageTransitionsBuilder(), + TargetPlatform.linux: FadeThroughPageTransitionsBuilder(), + }, + ), + ), + home: HomeScreen(), + ); + } +} diff --git a/animations/step_05_b/lib/model.dart b/animations/step_05_b/lib/model.dart new file mode 100644 index 0000000000..56666d11dc --- /dev/null +++ b/animations/step_05_b/lib/model.dart @@ -0,0 +1,52 @@ +import 'dart:math' as math; + +class Question { + final String question; + final List possibleAnswers; + final int correctAnswer; + Question(this.question, this.possibleAnswers, this.correctAnswer); +} + +class QuestionBank { + final List _questions = _createQuestions(); + + bool get hasNextQuestion => _questions.isNotEmpty; + int get remainingQuestions => _questions.length; + + Question? getRandomQuestion() { + if (_questions.isEmpty) { + return null; + } + + var i = math.Random().nextInt(_questions.length); + var question = _questions[i]; + + _questions.removeAt(i); + return question; + } +} + +List _createQuestions() { + return [ + Question( + 'What class used to create custom explicit animations in Flutter?', + ['AnimationController', 'AnimatedWidget', 'AnimatedBuilder', 'Tween'], + 0, + ), + Question( + 'Which widget is used to rebuild its child whenever an animation changes?', + [ + 'AnimatedContainer', + 'AnimatedBuilder', + 'AnimatedSwitcher', + 'AnimatedOpacity', + ], + 1, + ), + Question( + 'What class is used to define the start and end values for an animation?', + ['Tween', 'Curve', 'AnimationController', 'AnimatedWidget'], + 0, + ), + ]; +} diff --git a/animations/step_05_b/lib/question_screen.dart b/animations/step_05_b/lib/question_screen.dart new file mode 100644 index 0000000000..9cce323aa7 --- /dev/null +++ b/animations/step_05_b/lib/question_screen.dart @@ -0,0 +1,206 @@ +import 'package:flutter/material.dart'; +import 'flip_effect.dart'; +import 'scoreboard.dart'; +import 'view_model.dart'; + +class QuestionScreen extends StatefulWidget { + const QuestionScreen({super.key}); + + @override + State createState() => _QuestionScreenState(); +} + +class _QuestionScreenState extends State { + late final QuizViewModel viewModel = QuizViewModel( + onGameOver: _handleGameOver, + ); + + @override + Widget build(BuildContext context) { + return ListenableBuilder( + listenable: viewModel, + builder: (context, child) { + return Scaffold( + appBar: AppBar( + actions: [ + TextButton( + onPressed: + viewModel.hasNextQuestion && viewModel.didAnswerQuestion + ? () { + viewModel.getNextQuestion(); + } + : null, + child: const Text('Next'), + ), + ], + ), + body: Center( + child: Column( + children: [ + QuestionCard(question: viewModel.currentQuestion?.question), + Spacer(), + AnswerCards( + onTapped: (index) { + viewModel.checkAnswer(index); + }, + answers: viewModel.currentQuestion?.possibleAnswers ?? [], + correctAnswer: + viewModel.didAnswerQuestion + ? viewModel.currentQuestion?.correctAnswer + : null, + ), + StatusBar(viewModel: viewModel), + ], + ), + ), + ); + }, + ); + } + + void _handleGameOver() { + showDialog( + barrierDismissible: false, + context: context, + builder: (context) { + return AlertDialog( + title: Text('Game Over!'), + content: Text('Score: ${viewModel.score}'), + actions: [ + TextButton( + onPressed: () { + Navigator.popUntil(context, (route) => route.isFirst); + }, + child: Text('OK'), + ), + ], + ); + }, + ); + } +} + +class QuestionCard extends StatelessWidget { + final String? question; + + const QuestionCard({required this.question, super.key}); + + @override + Widget build(BuildContext context) { + return AnimatedSwitcher( + layoutBuilder: (Widget? currentChild, List previousChildren) { + return Stack( + alignment: Alignment.topCenter, + children: [ + ...previousChildren, + if (currentChild != null) currentChild, + ], + ); + }, + transitionBuilder: (Widget child, Animation animation) { + final curveAnimation = CurveTween( + curve: Curves.easeInCubic, + ).animate(animation); + final offsetAnimation = Tween( + begin: Offset(-0.1, 0.0), + end: Offset.zero, + ).animate(curveAnimation); + final fadeInAnimation = curveAnimation; + return FadeTransition( + opacity: fadeInAnimation, + child: SlideTransition(position: offsetAnimation, child: child), + ); + }, + duration: const Duration(milliseconds: 300), + child: Card( + key: ValueKey(question), + elevation: 4, + child: Padding( + padding: const EdgeInsets.all(16.0), + child: Text( + question ?? "", + style: Theme.of(context).textTheme.displaySmall, + ), + ), + ), + ); + } +} + +class AnswerCards extends StatelessWidget { + final List answers; + final ValueChanged onTapped; + final int? correctAnswer; + + const AnswerCards({ + required this.answers, + required this.onTapped, + required this.correctAnswer, + super.key, + }); + + @override + Widget build(BuildContext context) { + return GridView.count( + shrinkWrap: true, + crossAxisCount: 2, + childAspectRatio: 5 / 2, + children: List.generate(answers.length, (index) { + var color = Theme.of(context).colorScheme.primaryContainer; + if (correctAnswer == index) { + color = Theme.of(context).colorScheme.tertiaryContainer; + } + + return CardFlipEffect( + delayAmount: index.toDouble() / 2, + duration: const Duration(milliseconds: 300), + child: Card.filled( + key: ValueKey(answers[index]), + color: color, + elevation: 2, + margin: const EdgeInsets.all(8), + clipBehavior: Clip.hardEdge, + child: InkWell( + onTap: () => onTapped(index), + child: Padding( + padding: const EdgeInsets.all(16.0), + child: Center( + child: Text( + answers.length > index ? answers[index] : "", + style: Theme.of(context).textTheme.titleMedium, + overflow: TextOverflow.clip, + ), + ), + ), + ), + ), + ); + }), + ); + } +} + +class StatusBar extends StatelessWidget { + final QuizViewModel viewModel; + + const StatusBar({required this.viewModel, super.key}); + + @override + Widget build(BuildContext context) { + return Card( + elevation: 4, + child: Padding( + padding: EdgeInsets.all(8.0), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceAround, + children: [ + Scoreboard( + score: viewModel.score, + totalQuestions: viewModel.totalQuestions, + ), + ], + ), + ), + ); + } +} diff --git a/animations/step_05_b/lib/scoreboard.dart b/animations/step_05_b/lib/scoreboard.dart new file mode 100644 index 0000000000..765711fe87 --- /dev/null +++ b/animations/step_05_b/lib/scoreboard.dart @@ -0,0 +1,56 @@ +import 'package:flutter/material.dart'; + +class Scoreboard extends StatelessWidget { + final int score; + final int totalQuestions; + + const Scoreboard({ + super.key, + required this.score, + required this.totalQuestions, + }); + + @override + Widget build(BuildContext context) { + return Padding( + padding: const EdgeInsets.all(8.0), + child: Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + for (var i = 0; i < totalQuestions; i++) + AnimatedStar(isActive: score > i), + ], + ), + ); + } +} + +class AnimatedStar extends StatelessWidget { + final bool isActive; + final Duration _duration = const Duration(milliseconds: 1000); + final Color _deactivatedColor = Colors.grey.shade400; + final Color _activatedColor = Colors.yellow.shade700; + final Curve _curve = Curves.elasticOut; + + AnimatedStar({super.key, required this.isActive}); + + @override + Widget build(BuildContext context) { + return AnimatedScale( + scale: isActive ? 1.0 : 0.5, + curve: _curve, + duration: _duration, + child: TweenAnimationBuilder( + curve: _curve, + duration: _duration, + tween: ColorTween( + begin: _deactivatedColor, + end: isActive ? _activatedColor : _deactivatedColor, + ), + builder: (context, value, child) { + return Icon(Icons.star, size: 50, color: value); + }, + ), + ); + } +} diff --git a/animations/step_05_b/lib/view_model.dart b/animations/step_05_b/lib/view_model.dart new file mode 100644 index 0000000000..84fc5f218b --- /dev/null +++ b/animations/step_05_b/lib/view_model.dart @@ -0,0 +1,43 @@ +import 'package:flutter/cupertino.dart'; +import 'model.dart'; + +class QuizViewModel extends ChangeNotifier { + final QuestionBank _questionBank = QuestionBank(); + final VoidCallback onGameOver; + late final int totalQuestions; + Question? currentQuestion; + int answeredQuestionCount = 0; + int score = 0; + bool didAnswerQuestion = false; + bool get hasNextQuestion => answeredQuestionCount < totalQuestions; + + QuizViewModel({required this.onGameOver}) { + totalQuestions = _questionBank.remainingQuestions; + getNextQuestion(); + } + + void getNextQuestion() { + if (_questionBank.hasNextQuestion) { + currentQuestion = _questionBank.getRandomQuestion(); + answeredQuestionCount++; + } + + didAnswerQuestion = false; + + notifyListeners(); + } + + void checkAnswer(int selectedIndex) { + if (!didAnswerQuestion && currentQuestion?.correctAnswer == selectedIndex) { + score++; + } + + didAnswerQuestion = true; + + if (!_questionBank.hasNextQuestion) { + onGameOver(); + } + + notifyListeners(); + } +} diff --git a/animations/step_05_b/linux/.gitignore b/animations/step_05_b/linux/.gitignore new file mode 100644 index 0000000000..d3896c9844 --- /dev/null +++ b/animations/step_05_b/linux/.gitignore @@ -0,0 +1 @@ +flutter/ephemeral diff --git a/animations/step_05_b/linux/CMakeLists.txt b/animations/step_05_b/linux/CMakeLists.txt new file mode 100644 index 0000000000..7caf822271 --- /dev/null +++ b/animations/step_05_b/linux/CMakeLists.txt @@ -0,0 +1,128 @@ +# Project-level configuration. +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# The name of the executable created for the application. Change this to change +# the on-disk name of your application. +set(BINARY_NAME "quiz") +# The unique GTK application identifier for this application. See: +# https://wiki.gnome.org/HowDoI/ChooseApplicationID +set(APPLICATION_ID "com.example.quiz") + +# Explicitly opt in to modern CMake behaviors to avoid warnings with recent +# versions of CMake. +cmake_policy(SET CMP0063 NEW) + +# Load bundled libraries from the lib/ directory relative to the binary. +set(CMAKE_INSTALL_RPATH "$ORIGIN/lib") + +# Root filesystem for cross-building. +if(FLUTTER_TARGET_PLATFORM_SYSROOT) + set(CMAKE_SYSROOT ${FLUTTER_TARGET_PLATFORM_SYSROOT}) + set(CMAKE_FIND_ROOT_PATH ${CMAKE_SYSROOT}) + set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) + set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY) + set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) + set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) +endif() + +# Define build configuration options. +if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) + set(CMAKE_BUILD_TYPE "Debug" CACHE + STRING "Flutter build mode" FORCE) + set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS + "Debug" "Profile" "Release") +endif() + +# Compilation settings that should be applied to most targets. +# +# Be cautious about adding new options here, as plugins use this function by +# default. In most cases, you should add new options to specific targets instead +# of modifying this function. +function(APPLY_STANDARD_SETTINGS TARGET) + target_compile_features(${TARGET} PUBLIC cxx_std_14) + target_compile_options(${TARGET} PRIVATE -Wall -Werror) + target_compile_options(${TARGET} PRIVATE "$<$>:-O3>") + target_compile_definitions(${TARGET} PRIVATE "$<$>:NDEBUG>") +endfunction() + +# Flutter library and tool build rules. +set(FLUTTER_MANAGED_DIR "${CMAKE_CURRENT_SOURCE_DIR}/flutter") +add_subdirectory(${FLUTTER_MANAGED_DIR}) + +# System-level dependencies. +find_package(PkgConfig REQUIRED) +pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) + +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") + +# Run the Flutter tool portions of the build. This must not be removed. +add_dependencies(${BINARY_NAME} flutter_assemble) + +# Only the install-generated bundle's copy of the executable will launch +# correctly, since the resources must in the right relative locations. To avoid +# people trying to run the unbundled copy, put it in a subdirectory instead of +# the default top-level location. +set_target_properties(${BINARY_NAME} + PROPERTIES + RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/intermediates_do_not_run" +) + + +# Generated plugin build rules, which manage building the plugins and adding +# them to the application. +include(flutter/generated_plugins.cmake) + + +# === Installation === +# By default, "installing" just makes a relocatable bundle in the build +# directory. +set(BUILD_BUNDLE_DIR "${PROJECT_BINARY_DIR}/bundle") +if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) + set(CMAKE_INSTALL_PREFIX "${BUILD_BUNDLE_DIR}" CACHE PATH "..." FORCE) +endif() + +# Start with a clean build bundle directory every time. +install(CODE " + file(REMOVE_RECURSE \"${BUILD_BUNDLE_DIR}/\") + " COMPONENT Runtime) + +set(INSTALL_BUNDLE_DATA_DIR "${CMAKE_INSTALL_PREFIX}/data") +set(INSTALL_BUNDLE_LIB_DIR "${CMAKE_INSTALL_PREFIX}/lib") + +install(TARGETS ${BINARY_NAME} RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_ICU_DATA_FILE}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) + +foreach(bundled_library ${PLUGIN_BUNDLED_LIBRARIES}) + install(FILES "${bundled_library}" + DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) +endforeach(bundled_library) + +# Copy the native assets provided by the build.dart from all packages. +set(NATIVE_ASSETS_DIR "${PROJECT_BUILD_DIR}native_assets/linux/") +install(DIRECTORY "${NATIVE_ASSETS_DIR}" + DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) + +# Fully re-copy the assets directory on each build to avoid having stale files +# from a previous install. +set(FLUTTER_ASSET_DIR_NAME "flutter_assets") +install(CODE " + file(REMOVE_RECURSE \"${INSTALL_BUNDLE_DATA_DIR}/${FLUTTER_ASSET_DIR_NAME}\") + " COMPONENT Runtime) +install(DIRECTORY "${PROJECT_BUILD_DIR}/${FLUTTER_ASSET_DIR_NAME}" + DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" COMPONENT Runtime) + +# Install the AOT library on non-Debug builds only. +if(NOT CMAKE_BUILD_TYPE MATCHES "Debug") + install(FILES "${AOT_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) +endif() diff --git a/animations/step_05_b/linux/flutter/CMakeLists.txt b/animations/step_05_b/linux/flutter/CMakeLists.txt new file mode 100644 index 0000000000..d5bd01648a --- /dev/null +++ b/animations/step_05_b/linux/flutter/CMakeLists.txt @@ -0,0 +1,88 @@ +# This file controls Flutter-level build steps. It should not be edited. +cmake_minimum_required(VERSION 3.10) + +set(EPHEMERAL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/ephemeral") + +# Configuration provided via flutter tool. +include(${EPHEMERAL_DIR}/generated_config.cmake) + +# TODO: Move the rest of this into files in ephemeral. See +# https://github.com/flutter/flutter/issues/57146. + +# Serves the same purpose as list(TRANSFORM ... PREPEND ...), +# which isn't available in 3.10. +function(list_prepend LIST_NAME PREFIX) + set(NEW_LIST "") + foreach(element ${${LIST_NAME}}) + list(APPEND NEW_LIST "${PREFIX}${element}") + endforeach(element) + set(${LIST_NAME} "${NEW_LIST}" PARENT_SCOPE) +endfunction() + +# === Flutter Library === +# System-level dependencies. +find_package(PkgConfig REQUIRED) +pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) +pkg_check_modules(GLIB REQUIRED IMPORTED_TARGET glib-2.0) +pkg_check_modules(GIO REQUIRED IMPORTED_TARGET gio-2.0) + +set(FLUTTER_LIBRARY "${EPHEMERAL_DIR}/libflutter_linux_gtk.so") + +# Published to parent scope for install step. +set(FLUTTER_LIBRARY ${FLUTTER_LIBRARY} PARENT_SCOPE) +set(FLUTTER_ICU_DATA_FILE "${EPHEMERAL_DIR}/icudtl.dat" PARENT_SCOPE) +set(PROJECT_BUILD_DIR "${PROJECT_DIR}/build/" PARENT_SCOPE) +set(AOT_LIBRARY "${PROJECT_DIR}/build/lib/libapp.so" PARENT_SCOPE) + +list(APPEND FLUTTER_LIBRARY_HEADERS + "fl_basic_message_channel.h" + "fl_binary_codec.h" + "fl_binary_messenger.h" + "fl_dart_project.h" + "fl_engine.h" + "fl_json_message_codec.h" + "fl_json_method_codec.h" + "fl_message_codec.h" + "fl_method_call.h" + "fl_method_channel.h" + "fl_method_codec.h" + "fl_method_response.h" + "fl_plugin_registrar.h" + "fl_plugin_registry.h" + "fl_standard_message_codec.h" + "fl_standard_method_codec.h" + "fl_string_codec.h" + "fl_value.h" + "fl_view.h" + "flutter_linux.h" +) +list_prepend(FLUTTER_LIBRARY_HEADERS "${EPHEMERAL_DIR}/flutter_linux/") +add_library(flutter INTERFACE) +target_include_directories(flutter INTERFACE + "${EPHEMERAL_DIR}" +) +target_link_libraries(flutter INTERFACE "${FLUTTER_LIBRARY}") +target_link_libraries(flutter INTERFACE + PkgConfig::GTK + PkgConfig::GLIB + PkgConfig::GIO +) +add_dependencies(flutter flutter_assemble) + +# === Flutter tool backend === +# _phony_ is a non-existent file to force this command to run every time, +# since currently there's no way to get a full input/output list from the +# flutter tool. +add_custom_command( + OUTPUT ${FLUTTER_LIBRARY} ${FLUTTER_LIBRARY_HEADERS} + ${CMAKE_CURRENT_BINARY_DIR}/_phony_ + COMMAND ${CMAKE_COMMAND} -E env + ${FLUTTER_TOOL_ENVIRONMENT} + "${FLUTTER_ROOT}/packages/flutter_tools/bin/tool_backend.sh" + ${FLUTTER_TARGET_PLATFORM} ${CMAKE_BUILD_TYPE} + VERBATIM +) +add_custom_target(flutter_assemble DEPENDS + "${FLUTTER_LIBRARY}" + ${FLUTTER_LIBRARY_HEADERS} +) diff --git a/animations/step_05_b/linux/flutter/generated_plugin_registrant.cc b/animations/step_05_b/linux/flutter/generated_plugin_registrant.cc new file mode 100644 index 0000000000..e71a16d23d --- /dev/null +++ b/animations/step_05_b/linux/flutter/generated_plugin_registrant.cc @@ -0,0 +1,11 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#include "generated_plugin_registrant.h" + + +void fl_register_plugins(FlPluginRegistry* registry) { +} diff --git a/animations/step_05_b/linux/flutter/generated_plugin_registrant.h b/animations/step_05_b/linux/flutter/generated_plugin_registrant.h new file mode 100644 index 0000000000..e0f0a47bc0 --- /dev/null +++ b/animations/step_05_b/linux/flutter/generated_plugin_registrant.h @@ -0,0 +1,15 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#ifndef GENERATED_PLUGIN_REGISTRANT_ +#define GENERATED_PLUGIN_REGISTRANT_ + +#include + +// Registers Flutter plugins. +void fl_register_plugins(FlPluginRegistry* registry); + +#endif // GENERATED_PLUGIN_REGISTRANT_ diff --git a/animations/step_05_b/linux/flutter/generated_plugins.cmake b/animations/step_05_b/linux/flutter/generated_plugins.cmake new file mode 100644 index 0000000000..2e1de87a7e --- /dev/null +++ b/animations/step_05_b/linux/flutter/generated_plugins.cmake @@ -0,0 +1,23 @@ +# +# Generated file, do not edit. +# + +list(APPEND FLUTTER_PLUGIN_LIST +) + +list(APPEND FLUTTER_FFI_PLUGIN_LIST +) + +set(PLUGIN_BUNDLED_LIBRARIES) + +foreach(plugin ${FLUTTER_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${plugin}/linux plugins/${plugin}) + target_link_libraries(${BINARY_NAME} PRIVATE ${plugin}_plugin) + list(APPEND PLUGIN_BUNDLED_LIBRARIES $) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${plugin}_bundled_libraries}) +endforeach(plugin) + +foreach(ffi_plugin ${FLUTTER_FFI_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${ffi_plugin}/linux plugins/${ffi_plugin}) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${ffi_plugin}_bundled_libraries}) +endforeach(ffi_plugin) diff --git a/animations/step_05_b/linux/runner/CMakeLists.txt b/animations/step_05_b/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/animations/step_05_b/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/animations/step_05_b/linux/runner/main.cc b/animations/step_05_b/linux/runner/main.cc new file mode 100644 index 0000000000..e7c5c54370 --- /dev/null +++ b/animations/step_05_b/linux/runner/main.cc @@ -0,0 +1,6 @@ +#include "my_application.h" + +int main(int argc, char** argv) { + g_autoptr(MyApplication) app = my_application_new(); + return g_application_run(G_APPLICATION(app), argc, argv); +} diff --git a/animations/step_05_b/linux/runner/my_application.cc b/animations/step_05_b/linux/runner/my_application.cc new file mode 100644 index 0000000000..0040d7e46c --- /dev/null +++ b/animations/step_05_b/linux/runner/my_application.cc @@ -0,0 +1,130 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "quiz"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "quiz"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/animations/step_05_b/linux/runner/my_application.h b/animations/step_05_b/linux/runner/my_application.h new file mode 100644 index 0000000000..72271d5e41 --- /dev/null +++ b/animations/step_05_b/linux/runner/my_application.h @@ -0,0 +1,18 @@ +#ifndef FLUTTER_MY_APPLICATION_H_ +#define FLUTTER_MY_APPLICATION_H_ + +#include + +G_DECLARE_FINAL_TYPE(MyApplication, my_application, MY, APPLICATION, + GtkApplication) + +/** + * my_application_new: + * + * Creates a new Flutter-based application. + * + * Returns: a new #MyApplication. + */ +MyApplication* my_application_new(); + +#endif // FLUTTER_MY_APPLICATION_H_ diff --git a/animations/step_05_b/macos/.gitignore b/animations/step_05_b/macos/.gitignore new file mode 100644 index 0000000000..746adbb6b9 --- /dev/null +++ b/animations/step_05_b/macos/.gitignore @@ -0,0 +1,7 @@ +# Flutter-related +**/Flutter/ephemeral/ +**/Pods/ + +# Xcode-related +**/dgph +**/xcuserdata/ diff --git a/animations/step_05_b/macos/Flutter/Flutter-Debug.xcconfig b/animations/step_05_b/macos/Flutter/Flutter-Debug.xcconfig new file mode 100644 index 0000000000..c2efd0b608 --- /dev/null +++ b/animations/step_05_b/macos/Flutter/Flutter-Debug.xcconfig @@ -0,0 +1 @@ +#include "ephemeral/Flutter-Generated.xcconfig" diff --git a/animations/step_05_b/macos/Flutter/Flutter-Release.xcconfig b/animations/step_05_b/macos/Flutter/Flutter-Release.xcconfig new file mode 100644 index 0000000000..c2efd0b608 --- /dev/null +++ b/animations/step_05_b/macos/Flutter/Flutter-Release.xcconfig @@ -0,0 +1 @@ +#include "ephemeral/Flutter-Generated.xcconfig" diff --git a/animations/step_05_b/macos/Flutter/GeneratedPluginRegistrant.swift b/animations/step_05_b/macos/Flutter/GeneratedPluginRegistrant.swift new file mode 100644 index 0000000000..cccf817a52 --- /dev/null +++ b/animations/step_05_b/macos/Flutter/GeneratedPluginRegistrant.swift @@ -0,0 +1,10 @@ +// +// Generated file. Do not edit. +// + +import FlutterMacOS +import Foundation + + +func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { +} diff --git a/animations/step_05_b/macos/Runner.xcodeproj/project.pbxproj b/animations/step_05_b/macos/Runner.xcodeproj/project.pbxproj new file mode 100644 index 0000000000..45c35dfed5 --- /dev/null +++ b/animations/step_05_b/macos/Runner.xcodeproj/project.pbxproj @@ -0,0 +1,705 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 54; + objects = { + +/* Begin PBXAggregateTarget section */ + 33CC111A2044C6BA0003C045 /* Flutter Assemble */ = { + isa = PBXAggregateTarget; + buildConfigurationList = 33CC111B2044C6BA0003C045 /* Build configuration list for PBXAggregateTarget "Flutter Assemble" */; + buildPhases = ( + 33CC111E2044C6BF0003C045 /* ShellScript */, + ); + dependencies = ( + ); + name = "Flutter Assemble"; + productName = FLX; + }; +/* End PBXAggregateTarget section */ + +/* Begin PBXBuildFile section */ + 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; + 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; + 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; + 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; + 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; + 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 331C80D9294CF71000263BE5 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 33CC10E52044A3C60003C045 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 33CC10EC2044A3C60003C045; + remoteInfo = Runner; + }; + 33CC111F2044C79F0003C045 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 33CC10E52044A3C60003C045 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 33CC111A2044C6BA0003C045; + remoteInfo = FLX; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 33CC110E2044A8840003C045 /* Bundle Framework */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + ); + name = "Bundle Framework"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; + 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; + 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; }; + 33CC10ED2044A3C60003C045 /* quiz.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "quiz.app"; sourceTree = BUILT_PRODUCTS_DIR; }; + 33CC10F02044A3C60003C045 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 33CC10F22044A3C60003C045 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = Runner/Assets.xcassets; sourceTree = ""; }; + 33CC10F52044A3C60003C045 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = ""; }; + 33CC10F72044A3C60003C045 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = Info.plist; path = Runner/Info.plist; sourceTree = ""; }; + 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainFlutterWindow.swift; sourceTree = ""; }; + 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Debug.xcconfig"; sourceTree = ""; }; + 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Release.xcconfig"; sourceTree = ""; }; + 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = "Flutter-Generated.xcconfig"; path = "ephemeral/Flutter-Generated.xcconfig"; sourceTree = ""; }; + 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; + 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; + 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; + 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 331C80D2294CF70F00263BE5 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 33CC10EA2044A3C60003C045 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 331C80D6294CF71000263BE5 /* RunnerTests */ = { + isa = PBXGroup; + children = ( + 331C80D7294CF71000263BE5 /* RunnerTests.swift */, + ); + path = RunnerTests; + sourceTree = ""; + }; + 33BA886A226E78AF003329D5 /* Configs */ = { + isa = PBXGroup; + children = ( + 33E5194F232828860026EE4D /* AppInfo.xcconfig */, + 9740EEB21CF90195004384FC /* Debug.xcconfig */, + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, + 333000ED22D3DE5D00554162 /* Warnings.xcconfig */, + ); + path = Configs; + sourceTree = ""; + }; + 33CC10E42044A3C60003C045 = { + isa = PBXGroup; + children = ( + 33FAB671232836740065AC1E /* Runner */, + 33CEB47122A05771004F2AC0 /* Flutter */, + 331C80D6294CF71000263BE5 /* RunnerTests */, + 33CC10EE2044A3C60003C045 /* Products */, + D73912EC22F37F3D000D13A0 /* Frameworks */, + ); + sourceTree = ""; + }; + 33CC10EE2044A3C60003C045 /* Products */ = { + isa = PBXGroup; + children = ( + 33CC10ED2044A3C60003C045 /* quiz.app */, + 331C80D5294CF71000263BE5 /* RunnerTests.xctest */, + ); + name = Products; + sourceTree = ""; + }; + 33CC11242044D66E0003C045 /* Resources */ = { + isa = PBXGroup; + children = ( + 33CC10F22044A3C60003C045 /* Assets.xcassets */, + 33CC10F42044A3C60003C045 /* MainMenu.xib */, + 33CC10F72044A3C60003C045 /* Info.plist */, + ); + name = Resources; + path = ..; + sourceTree = ""; + }; + 33CEB47122A05771004F2AC0 /* Flutter */ = { + isa = PBXGroup; + children = ( + 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */, + 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */, + 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */, + 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */, + ); + path = Flutter; + sourceTree = ""; + }; + 33FAB671232836740065AC1E /* Runner */ = { + isa = PBXGroup; + children = ( + 33CC10F02044A3C60003C045 /* AppDelegate.swift */, + 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */, + 33E51913231747F40026EE4D /* DebugProfile.entitlements */, + 33E51914231749380026EE4D /* Release.entitlements */, + 33CC11242044D66E0003C045 /* Resources */, + 33BA886A226E78AF003329D5 /* Configs */, + ); + path = Runner; + sourceTree = ""; + }; + D73912EC22F37F3D000D13A0 /* Frameworks */ = { + isa = PBXGroup; + children = ( + ); + name = Frameworks; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 331C80D4294CF70F00263BE5 /* RunnerTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; + buildPhases = ( + 331C80D1294CF70F00263BE5 /* Sources */, + 331C80D2294CF70F00263BE5 /* Frameworks */, + 331C80D3294CF70F00263BE5 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 331C80DA294CF71000263BE5 /* PBXTargetDependency */, + ); + name = RunnerTests; + productName = RunnerTests; + productReference = 331C80D5294CF71000263BE5 /* RunnerTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; + 33CC10EC2044A3C60003C045 /* Runner */ = { + isa = PBXNativeTarget; + buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; + buildPhases = ( + 33CC10E92044A3C60003C045 /* Sources */, + 33CC10EA2044A3C60003C045 /* Frameworks */, + 33CC10EB2044A3C60003C045 /* Resources */, + 33CC110E2044A8840003C045 /* Bundle Framework */, + 3399D490228B24CF009A79C7 /* ShellScript */, + ); + buildRules = ( + ); + dependencies = ( + 33CC11202044C79F0003C045 /* PBXTargetDependency */, + ); + name = Runner; + productName = Runner; + productReference = 33CC10ED2044A3C60003C045 /* quiz.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 33CC10E52044A3C60003C045 /* Project object */ = { + isa = PBXProject; + attributes = { + BuildIndependentTargetsInParallel = YES; + LastSwiftUpdateCheck = 0920; + LastUpgradeCheck = 1510; + ORGANIZATIONNAME = ""; + TargetAttributes = { + 331C80D4294CF70F00263BE5 = { + CreatedOnToolsVersion = 14.0; + TestTargetID = 33CC10EC2044A3C60003C045; + }; + 33CC10EC2044A3C60003C045 = { + CreatedOnToolsVersion = 9.2; + LastSwiftMigration = 1100; + ProvisioningStyle = Automatic; + SystemCapabilities = { + com.apple.Sandbox = { + enabled = 1; + }; + }; + }; + 33CC111A2044C6BA0003C045 = { + CreatedOnToolsVersion = 9.2; + ProvisioningStyle = Manual; + }; + }; + }; + buildConfigurationList = 33CC10E82044A3C60003C045 /* Build configuration list for PBXProject "Runner" */; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 33CC10E42044A3C60003C045; + productRefGroup = 33CC10EE2044A3C60003C045 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 33CC10EC2044A3C60003C045 /* Runner */, + 331C80D4294CF70F00263BE5 /* RunnerTests */, + 33CC111A2044C6BA0003C045 /* Flutter Assemble */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 331C80D3294CF70F00263BE5 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 33CC10EB2044A3C60003C045 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */, + 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 3399D490228B24CF009A79C7 /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; + }; + 33CC111E2044C6BF0003C045 /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + Flutter/ephemeral/FlutterInputs.xcfilelist, + ); + inputPaths = ( + Flutter/ephemeral/tripwire, + ); + outputFileListPaths = ( + Flutter/ephemeral/FlutterOutputs.xcfilelist, + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 331C80D1294CF70F00263BE5 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 33CC10E92044A3C60003C045 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */, + 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */, + 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 331C80DA294CF71000263BE5 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 33CC10EC2044A3C60003C045 /* Runner */; + targetProxy = 331C80D9294CF71000263BE5 /* PBXContainerItemProxy */; + }; + 33CC11202044C79F0003C045 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 33CC111A2044C6BA0003C045 /* Flutter Assemble */; + targetProxy = 33CC111F2044C79F0003C045 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + 33CC10F42044A3C60003C045 /* MainMenu.xib */ = { + isa = PBXVariantGroup; + children = ( + 33CC10F52044A3C60003C045 /* Base */, + ); + name = MainMenu.xib; + path = Runner; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 331C80DB294CF71000263BE5 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.quiz.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/quiz.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/quiz"; + }; + name = Debug; + }; + 331C80DC294CF71000263BE5 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.quiz.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/quiz.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/quiz"; + }; + name = Release; + }; + 331C80DD294CF71000263BE5 /* Profile */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.quiz.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/quiz.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/quiz"; + }; + name = Profile; + }; + 338D0CE9231458BD00FA5F75 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + DEAD_CODE_STRIPPING = YES; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.14; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = macosx; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + }; + name = Profile; + }; + 338D0CEA231458BD00FA5F75 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_VERSION = 5.0; + }; + name = Profile; + }; + 338D0CEB231458BD00FA5F75 /* Profile */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Manual; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Profile; + }; + 33CC10F92044A3C60003C045 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + DEAD_CODE_STRIPPING = YES; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.14; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = macosx; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + }; + name = Debug; + }; + 33CC10FA2044A3C60003C045 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + DEAD_CODE_STRIPPING = YES; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.14; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = macosx; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + }; + name = Release; + }; + 33CC10FC2044A3C60003C045 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + }; + name = Debug; + }; + 33CC10FD2044A3C60003C045 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/Release.entitlements; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_VERSION = 5.0; + }; + name = Release; + }; + 33CC111C2044C6BA0003C045 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Manual; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Debug; + }; + 33CC111D2044C6BA0003C045 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Automatic; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 331C80DB294CF71000263BE5 /* Debug */, + 331C80DC294CF71000263BE5 /* Release */, + 331C80DD294CF71000263BE5 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 33CC10E82044A3C60003C045 /* Build configuration list for PBXProject "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 33CC10F92044A3C60003C045 /* Debug */, + 33CC10FA2044A3C60003C045 /* Release */, + 338D0CE9231458BD00FA5F75 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 33CC10FC2044A3C60003C045 /* Debug */, + 33CC10FD2044A3C60003C045 /* Release */, + 338D0CEA231458BD00FA5F75 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 33CC111B2044C6BA0003C045 /* Build configuration list for PBXAggregateTarget "Flutter Assemble" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 33CC111C2044C6BA0003C045 /* Debug */, + 33CC111D2044C6BA0003C045 /* Release */, + 338D0CEB231458BD00FA5F75 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 33CC10E52044A3C60003C045 /* Project object */; +} diff --git a/animations/step_05_b/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/animations/step_05_b/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000000..18d981003d --- /dev/null +++ b/animations/step_05_b/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/animations/step_05_b/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/animations/step_05_b/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme new file mode 100644 index 0000000000..2f413cb17b --- /dev/null +++ b/animations/step_05_b/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -0,0 +1,98 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/animations/step_05_b/macos/Runner.xcworkspace/contents.xcworkspacedata b/animations/step_05_b/macos/Runner.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000000..1d526a16ed --- /dev/null +++ b/animations/step_05_b/macos/Runner.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/animations/step_05_b/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/animations/step_05_b/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000000..18d981003d --- /dev/null +++ b/animations/step_05_b/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/animations/step_05_b/macos/Runner/AppDelegate.swift b/animations/step_05_b/macos/Runner/AppDelegate.swift new file mode 100644 index 0000000000..b3c1761412 --- /dev/null +++ b/animations/step_05_b/macos/Runner/AppDelegate.swift @@ -0,0 +1,13 @@ +import Cocoa +import FlutterMacOS + +@main +class AppDelegate: FlutterAppDelegate { + override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { + return true + } + + override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { + return true + } +} diff --git a/animations/step_05_b/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/animations/step_05_b/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000000..a2ec33f19f --- /dev/null +++ b/animations/step_05_b/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,68 @@ +{ + "images" : [ + { + "size" : "16x16", + "idiom" : "mac", + "filename" : "app_icon_16.png", + "scale" : "1x" + }, + { + "size" : "16x16", + "idiom" : "mac", + "filename" : "app_icon_32.png", + "scale" : "2x" + }, + { + "size" : "32x32", + "idiom" : "mac", + "filename" : "app_icon_32.png", + "scale" : "1x" + }, + { + "size" : "32x32", + "idiom" : "mac", + "filename" : "app_icon_64.png", + "scale" : "2x" + }, + { + "size" : "128x128", + "idiom" : "mac", + "filename" : "app_icon_128.png", + "scale" : "1x" + }, + { + "size" : "128x128", + "idiom" : "mac", + "filename" : "app_icon_256.png", + "scale" : "2x" + }, + { + "size" : "256x256", + "idiom" : "mac", + "filename" : "app_icon_256.png", + "scale" : "1x" + }, + { + "size" : "256x256", + "idiom" : "mac", + "filename" : "app_icon_512.png", + "scale" : "2x" + }, + { + "size" : "512x512", + "idiom" : "mac", + "filename" : "app_icon_512.png", + "scale" : "1x" + }, + { + "size" : "512x512", + "idiom" : "mac", + "filename" : "app_icon_1024.png", + "scale" : "2x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} diff --git a/animations/step_05_b/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png b/animations/step_05_b/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png new file mode 100644 index 0000000000000000000000000000000000000000..82b6f9d9a33e198f5747104729e1fcef999772a5 GIT binary patch literal 102994 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ⅅ8MglG&ER{i5lN315cO?EdHNLrg? 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 z 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 Pe7HEdAEg|=c=LY&YVNkY literal 0 HcmV?d00001 diff --git a/animations/step_05_b/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png b/animations/step_05_b/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png new file mode 100644 index 0000000000000000000000000000000000000000..13b35eba55c6dabc3aac36f33d859266c18fa0d0 GIT binary patch literal 5680 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 literal 0 HcmV?d00001 diff --git a/animations/step_05_b/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png b/animations/step_05_b/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png new file mode 100644 index 0000000000000000000000000000000000000000..0a3f5fa40fb3d1e0710331a48de5d256da3f275d GIT binary patch literal 520 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 literal 0 HcmV?d00001 diff --git a/animations/step_05_b/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png b/animations/step_05_b/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png new file mode 100644 index 0000000000000000000000000000000000000000..2f1632cfddf3d9dade342351e627a0a75609fb46 GIT binary patch literal 2218 zcmV;b2vzrqP)Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91K%fHv1ONa40RR91KmY&$07g+lumAuE6iGxuRCodHTWf3-RTMruyW6Fu zQYeUM04eX6D5c0FCjKKPrco1(K`<0SL=crI{PC3-^hZU0kQie$gh-5!7z6SH6Q0J% zqot*`H1q{R5fHFYS}dje@;kG=v$L0(yY0?wY2%*c?A&{2?!D*x?m71{of2gv!$5|C z3>qG_BW}7K_yUcT3A5C6QD<+{aq?x;MAUyAiJn#Jv8_zZtQ{P zTRzbL3U9!qVuZzS$xKU10KiW~Bgdcv1-!uAhQxf3a7q+dU6lj?yoO4Lq4TUN4}h{N z*fIM=SS8|C2$(T>w$`t@3Tka!(r!7W`x z-isCVgQD^mG-MJ;XtJuK3V{Vy72GQ83KRWsHU?e*wrhKk=ApIYeDqLi;JI1e zuvv}5^Dc=k7F7?nm3nIw$NVmU-+R>> zyqOR$-2SDpJ}Pt;^RkJytDVXNTsu|mI1`~G7yw`EJR?VkGfNdqK9^^8P`JdtTV&tX4CNcV4 z&N06nZa??Fw1AgQOUSE2AmPE@WO(Fvo`%m`cDgiv(fAeRA%3AGXUbsGw{7Q`cY;1BI#ac3iN$$Hw z0LT0;xc%=q)me?Y*$xI@GRAw?+}>=9D+KTk??-HJ4=A>`V&vKFS75@MKdSF1JTq{S zc1!^8?YA|t+uKigaq!sT;Z!&0F2=k7F0PIU;F$leJLaw2UI6FL^w}OG&!;+b%ya1c z1n+6-inU<0VM-Y_s5iTElq)ThyF?StVcebpGI znw#+zLx2@ah{$_2jn+@}(zJZ{+}_N9BM;z)0yr|gF-4=Iyu@hI*Lk=-A8f#bAzc9f z`Kd6K--x@t04swJVC3JK1cHY-Hq+=|PN-VO;?^_C#;coU6TDP7Bt`;{JTG;!+jj(` zw5cLQ-(Cz-Tlb`A^w7|R56Ce;Wmr0)$KWOUZ6ai0PhzPeHwdl0H(etP zUV`va_i0s-4#DkNM8lUlqI7>YQLf)(lz9Q3Uw`)nc(z3{m5ZE77Ul$V%m)E}3&8L0 z-XaU|eB~Is08eORPk;=<>!1w)Kf}FOVS2l&9~A+@R#koFJ$Czd%Y(ENTV&A~U(IPI z;UY+gf+&6ioZ=roly<0Yst8ck>(M=S?B-ys3mLdM&)ex!hbt+ol|T6CTS+Sc0jv(& z7ijdvFwBq;0a{%3GGwkDKTeG`b+lyj0jjS1OMkYnepCdoosNY`*zmBIo*981BU%%U z@~$z0V`OVtIbEx5pa|Tct|Lg#ZQf5OYMUMRD>Wdxm5SAqV2}3!ceE-M2 z@O~lQ0OiKQp}o9I;?uxCgYVV?FH|?Riri*U$Zi_`V2eiA>l zdSm6;SEm6#T+SpcE8Ro_f2AwxzI z44hfe^WE3!h@W3RDyA_H440cpmYkv*)6m1XazTqw%=E5Xv7^@^^T7Q2wxr+Z2kVYr + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/animations/step_05_b/macos/Runner/Configs/AppInfo.xcconfig b/animations/step_05_b/macos/Runner/Configs/AppInfo.xcconfig new file mode 100644 index 0000000000..28c7905763 --- /dev/null +++ b/animations/step_05_b/macos/Runner/Configs/AppInfo.xcconfig @@ -0,0 +1,14 @@ +// Application-level settings for the Runner target. +// +// This may be replaced with something auto-generated from metadata (e.g., pubspec.yaml) in the +// future. If not, the values below would default to using the project name when this becomes a +// 'flutter create' template. + +// The application's name. By default this is also the title of the Flutter window. +PRODUCT_NAME = quiz + +// The application's bundle identifier +PRODUCT_BUNDLE_IDENTIFIER = com.example.quiz + +// The copyright displayed in application information +PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved. diff --git a/animations/step_05_b/macos/Runner/Configs/Debug.xcconfig b/animations/step_05_b/macos/Runner/Configs/Debug.xcconfig new file mode 100644 index 0000000000..36b0fd9464 --- /dev/null +++ b/animations/step_05_b/macos/Runner/Configs/Debug.xcconfig @@ -0,0 +1,2 @@ +#include "../../Flutter/Flutter-Debug.xcconfig" +#include "Warnings.xcconfig" diff --git a/animations/step_05_b/macos/Runner/Configs/Release.xcconfig b/animations/step_05_b/macos/Runner/Configs/Release.xcconfig new file mode 100644 index 0000000000..dff4f49561 --- /dev/null +++ b/animations/step_05_b/macos/Runner/Configs/Release.xcconfig @@ -0,0 +1,2 @@ +#include "../../Flutter/Flutter-Release.xcconfig" +#include "Warnings.xcconfig" diff --git a/animations/step_05_b/macos/Runner/Configs/Warnings.xcconfig b/animations/step_05_b/macos/Runner/Configs/Warnings.xcconfig new file mode 100644 index 0000000000..42bcbf4780 --- /dev/null +++ b/animations/step_05_b/macos/Runner/Configs/Warnings.xcconfig @@ -0,0 +1,13 @@ +WARNING_CFLAGS = -Wall -Wconditional-uninitialized -Wnullable-to-nonnull-conversion -Wmissing-method-return-type -Woverlength-strings +GCC_WARN_UNDECLARED_SELECTOR = YES +CLANG_UNDEFINED_BEHAVIOR_SANITIZER_NULLABILITY = YES +CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE +CLANG_WARN__DUPLICATE_METHOD_MATCH = YES +CLANG_WARN_PRAGMA_PACK = YES +CLANG_WARN_STRICT_PROTOTYPES = YES +CLANG_WARN_COMMA = YES +GCC_WARN_STRICT_SELECTOR_MATCH = YES +CLANG_WARN_OBJC_REPEATED_USE_OF_WEAK = YES +CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES +GCC_WARN_SHADOW = YES +CLANG_WARN_UNREACHABLE_CODE = YES diff --git a/animations/step_05_b/macos/Runner/DebugProfile.entitlements b/animations/step_05_b/macos/Runner/DebugProfile.entitlements new file mode 100644 index 0000000000..dddb8a30c8 --- /dev/null +++ b/animations/step_05_b/macos/Runner/DebugProfile.entitlements @@ -0,0 +1,12 @@ + + + + + com.apple.security.app-sandbox + + com.apple.security.cs.allow-jit + + com.apple.security.network.server + + + diff --git a/animations/step_05_b/macos/Runner/Info.plist b/animations/step_05_b/macos/Runner/Info.plist new file mode 100644 index 0000000000..4789daa6a4 --- /dev/null +++ b/animations/step_05_b/macos/Runner/Info.plist @@ -0,0 +1,32 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIconFile + + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + APPL + CFBundleShortVersionString + $(FLUTTER_BUILD_NAME) + CFBundleVersion + $(FLUTTER_BUILD_NUMBER) + LSMinimumSystemVersion + $(MACOSX_DEPLOYMENT_TARGET) + NSHumanReadableCopyright + $(PRODUCT_COPYRIGHT) + NSMainNibFile + MainMenu + NSPrincipalClass + NSApplication + + diff --git a/animations/step_05_b/macos/Runner/MainFlutterWindow.swift b/animations/step_05_b/macos/Runner/MainFlutterWindow.swift new file mode 100644 index 0000000000..3cc05eb234 --- /dev/null +++ b/animations/step_05_b/macos/Runner/MainFlutterWindow.swift @@ -0,0 +1,15 @@ +import Cocoa +import FlutterMacOS + +class MainFlutterWindow: NSWindow { + override func awakeFromNib() { + let flutterViewController = FlutterViewController() + let windowFrame = self.frame + self.contentViewController = flutterViewController + self.setFrame(windowFrame, display: true) + + RegisterGeneratedPlugins(registry: flutterViewController) + + super.awakeFromNib() + } +} diff --git a/animations/step_05_b/macos/Runner/Release.entitlements b/animations/step_05_b/macos/Runner/Release.entitlements new file mode 100644 index 0000000000..852fa1a472 --- /dev/null +++ b/animations/step_05_b/macos/Runner/Release.entitlements @@ -0,0 +1,8 @@ + + + + + com.apple.security.app-sandbox + + + diff --git a/animations/step_05_b/macos/RunnerTests/RunnerTests.swift b/animations/step_05_b/macos/RunnerTests/RunnerTests.swift new file mode 100644 index 0000000000..61f3bd1fc5 --- /dev/null +++ b/animations/step_05_b/macos/RunnerTests/RunnerTests.swift @@ -0,0 +1,12 @@ +import Cocoa +import FlutterMacOS +import XCTest + +class RunnerTests: XCTestCase { + + func testExample() { + // If you add code to the Runner application, consider adding tests here. + // See https://developer.apple.com/documentation/xctest for more information about using XCTest. + } + +} diff --git a/animations/step_05_b/pubspec.yaml b/animations/step_05_b/pubspec.yaml new file mode 100644 index 0000000000..d8e843d9c9 --- /dev/null +++ b/animations/step_05_b/pubspec.yaml @@ -0,0 +1,21 @@ +name: quiz +description: A quiz app for demonstrating animation effects in Flutter +publish_to: "none" +version: 1.0.0 + +environment: + sdk: ^3.7.0-0 + +dependencies: + animations: ^2.0.0 + flutter: + sdk: flutter + +dev_dependencies: + flutter_test: + sdk: flutter + flutter_lints: ^4.0.0 + + +flutter: + uses-material-design: true diff --git a/animations/step_05_b/web/favicon.png b/animations/step_05_b/web/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..8aaa46ac1ae21512746f852a42ba87e4165dfdd1 GIT binary patch literal 917 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|I14-?iy0X7 zltGxWVyS%@P(fs7NJL45ua8x7ey(0(N`6wRUPW#JP&EUCO@$SZnVVXYs8ErclUHn2 zVXFjIVFhG^g!Ppaz)DK8ZIvQ?0~DO|i&7O#^-S~(l1AfjnEK zjFOT9D}DX)@^Za$W4-*MbbUihOG|wNBYh(yU7!lx;>x^|#0uTKVr7USFmqf|i<65o z3raHc^AtelCMM;Vme?vOfh>Xph&xL%(-1c06+^uR^q@XSM&D4+Kp$>4P^%3{)XKjo zGZknv$b36P8?Z_gF{nK@`XI}Z90TzwSQO}0J1!f2c(B=V`5aP@1P1a|PZ!4!3&Gl8 zTYqUsf!gYFyJnXpu0!n&N*SYAX-%d(5gVjrHJWqXQshj@!Zm{!01WsQrH~9=kTxW#6SvuapgMqt>$=j#%eyGrQzr zP{L-3gsMA^$I1&gsBAEL+vxi1*Igl=8#8`5?A-T5=z-sk46WA1IUT)AIZHx1rdUrf zVJrJn<74DDw`j)Ki#gt}mIT-Q`XRa2-jQXQoI%w`nb|XblvzK${ZzlV)m-XcwC(od z71_OEC5Bt9GEXosOXaPTYOia#R4ID2TiU~`zVMl08TV_C%DnU4^+HE>9(CE4D6?Fz oujB08i7adh9xk7*FX66dWH6F5TM;?E2b5PlUHx3vIVCg!0Dx9vYXATM literal 0 HcmV?d00001 diff --git a/animations/step_05_b/web/icons/Icon-192.png b/animations/step_05_b/web/icons/Icon-192.png new file mode 100644 index 0000000000000000000000000000000000000000..b749bfef07473333cf1dd31e9eed89862a5d52aa GIT binary patch literal 5292 zcmZ`-2T+sGz6~)*FVZ`aW+(v>MIm&M-g^@e2u-B-DoB?qO+b1Tq<5uCCv>ESfRum& zp%X;f!~1{tzL__3=gjVJ=j=J>+nMj%ncXj1Q(b|Ckbw{Y0FWpt%4y%$uD=Z*c-x~o zE;IoE;xa#7Ll5nj-e4CuXB&G*IM~D21rCP$*xLXAK8rIMCSHuSu%bL&S3)8YI~vyp@KBu9Ph7R_pvKQ@xv>NQ`dZp(u{Z8K3yOB zn7-AR+d2JkW)KiGx0hosml;+eCXp6+w%@STjFY*CJ?udJ64&{BCbuebcuH;}(($@@ znNlgBA@ZXB)mcl9nbX#F!f_5Z=W>0kh|UVWnf!At4V*LQP%*gPdCXd6P@J4Td;!Ur z<2ZLmwr(NG`u#gDEMP19UcSzRTL@HsK+PnIXbVBT@oHm53DZr?~V(0{rsalAfwgo zEh=GviaqkF;}F_5-yA!1u3!gxaR&Mj)hLuj5Q-N-@Lra{%<4ONja8pycD90&>yMB` zchhd>0CsH`^|&TstH-8+R`CfoWqmTTF_0?zDOY`E`b)cVi!$4xA@oO;SyOjJyP^_j zx^@Gdf+w|FW@DMdOi8=4+LJl$#@R&&=UM`)G!y%6ZzQLoSL%*KE8IO0~&5XYR9 z&N)?goEiWA(YoRfT{06&D6Yuu@Qt&XVbuW@COb;>SP9~aRc+z`m`80pB2o%`#{xD@ zI3RAlukL5L>px6b?QW1Ac_0>ew%NM!XB2(H+1Y3AJC?C?O`GGs`331Nd4ZvG~bMo{lh~GeL zSL|tT*fF-HXxXYtfu5z+T5Mx9OdP7J4g%@oeC2FaWO1D{=NvL|DNZ}GO?O3`+H*SI z=grGv=7dL{+oY0eJFGO!Qe(e2F?CHW(i!!XkGo2tUvsQ)I9ev`H&=;`N%Z{L zO?vV%rDv$y(@1Yj@xfr7Kzr<~0{^T8wM80xf7IGQF_S-2c0)0D6b0~yD7BsCy+(zL z#N~%&e4iAwi4F$&dI7x6cE|B{f@lY5epaDh=2-(4N05VO~A zQT3hanGy_&p+7Fb^I#ewGsjyCEUmSCaP6JDB*=_()FgQ(-pZ28-{qx~2foO4%pM9e z*_63RT8XjgiaWY|*xydf;8MKLd{HnfZ2kM%iq}fstImB-K6A79B~YoPVa@tYN@T_$ zea+9)<%?=Fl!kd(Y!G(-o}ko28hg2!MR-o5BEa_72uj7Mrc&{lRh3u2%Y=Xk9^-qa zBPWaD=2qcuJ&@Tf6ue&)4_V*45=zWk@Z}Q?f5)*z)-+E|-yC4fs5CE6L_PH3=zI8p z*Z3!it{1e5_^(sF*v=0{`U9C741&lub89gdhKp|Y8CeC{_{wYK-LSbp{h)b~9^j!s z7e?Y{Z3pZv0J)(VL=g>l;<}xk=T*O5YR|hg0eg4u98f2IrA-MY+StQIuK-(*J6TRR z|IM(%uI~?`wsfyO6Tgmsy1b3a)j6M&-jgUjVg+mP*oTKdHg?5E`!r`7AE_#?Fc)&a z08KCq>Gc=ne{PCbRvs6gVW|tKdcE1#7C4e`M|j$C5EYZ~Y=jUtc zj`+?p4ba3uy7><7wIokM79jPza``{Lx0)zGWg;FW1^NKY+GpEi=rHJ+fVRGfXO zPHV52k?jxei_!YYAw1HIz}y8ZMwdZqU%ESwMn7~t zdI5%B;U7RF=jzRz^NuY9nM)&<%M>x>0(e$GpU9th%rHiZsIT>_qp%V~ILlyt^V`=d z!1+DX@ah?RnB$X!0xpTA0}lN@9V-ePx>wQ?-xrJr^qDlw?#O(RsXeAvM%}rg0NT#t z!CsT;-vB=B87ShG`GwO;OEbeL;a}LIu=&@9cb~Rsx(ZPNQ!NT7H{@j0e(DiLea>QD zPmpe90gEKHEZ8oQ@6%E7k-Ptn#z)b9NbD@_GTxEhbS+}Bb74WUaRy{w;E|MgDAvHw zL)ycgM7mB?XVh^OzbC?LKFMotw3r@i&VdUV%^Efdib)3@soX%vWCbnOyt@Y4swW925@bt45y0HY3YI~BnnzZYrinFy;L?2D3BAL`UQ zEj))+f>H7~g8*VuWQ83EtGcx`hun$QvuurSMg3l4IP8Fe`#C|N6mbYJ=n;+}EQm;< z!!N=5j1aAr_uEnnzrEV%_E|JpTb#1p1*}5!Ce!R@d$EtMR~%9# zd;h8=QGT)KMW2IKu_fA_>p_und#-;Q)p%%l0XZOXQicfX8M~7?8}@U^ihu;mizj)t zgV7wk%n-UOb z#!P5q?Ex+*Kx@*p`o$q8FWL*E^$&1*!gpv?Za$YO~{BHeGY*5%4HXUKa_A~~^d z=E*gf6&+LFF^`j4$T~dR)%{I)T?>@Ma?D!gi9I^HqvjPc3-v~=qpX1Mne@*rzT&Xw zQ9DXsSV@PqpEJO-g4A&L{F&;K6W60D!_vs?Vx!?w27XbEuJJP&);)^+VF1nHqHBWu z^>kI$M9yfOY8~|hZ9WB!q-9u&mKhEcRjlf2nm_@s;0D#c|@ED7NZE% zzR;>P5B{o4fzlfsn3CkBK&`OSb-YNrqx@N#4CK!>bQ(V(D#9|l!e9(%sz~PYk@8zt zPN9oK78&-IL_F zhsk1$6p;GqFbtB^ZHHP+cjMvA0(LqlskbdYE_rda>gvQLTiqOQ1~*7lg%z*&p`Ry& zRcG^DbbPj_jOKHTr8uk^15Boj6>hA2S-QY(W-6!FIq8h$<>MI>PYYRenQDBamO#Fv zAH5&ImqKBDn0v5kb|8i0wFhUBJTpT!rB-`zK)^SNnRmLraZcPYK7b{I@+}wXVdW-{Ps17qdRA3JatEd?rPV z4@}(DAMf5EqXCr4-B+~H1P#;t@O}B)tIJ(W6$LrK&0plTmnPpb1TKn3?f?Kk``?D+ zQ!MFqOX7JbsXfQrz`-M@hq7xlfNz;_B{^wbpG8des56x(Q)H)5eLeDwCrVR}hzr~= zM{yXR6IM?kXxauLza#@#u?Y|o;904HCqF<8yT~~c-xyRc0-vxofnxG^(x%>bj5r}N zyFT+xnn-?B`ohA>{+ZZQem=*Xpqz{=j8i2TAC#x-m;;mo{{sLB_z(UoAqD=A#*juZ zCv=J~i*O8;F}A^Wf#+zx;~3B{57xtoxC&j^ie^?**T`WT2OPRtC`xj~+3Kprn=rVM zVJ|h5ux%S{dO}!mq93}P+h36mZ5aZg1-?vhL$ke1d52qIiXSE(llCr5i=QUS?LIjc zV$4q=-)aaR4wsrQv}^shL5u%6;`uiSEs<1nG^?$kl$^6DL z43CjY`M*p}ew}}3rXc7Xck@k41jx}c;NgEIhKZ*jsBRZUP-x2cm;F1<5$jefl|ppO zmZd%%?gMJ^g9=RZ^#8Mf5aWNVhjAS^|DQO+q$)oeob_&ZLFL(zur$)); zU19yRm)z<4&4-M}7!9+^Wl}Uk?`S$#V2%pQ*SIH5KI-mn%i;Z7-)m$mN9CnI$G7?# zo`zVrUwoSL&_dJ92YhX5TKqaRkfPgC4=Q&=K+;_aDs&OU0&{WFH}kKX6uNQC6%oUH z2DZa1s3%Vtk|bglbxep-w)PbFG!J17`<$g8lVhqD2w;Z0zGsh-r zxZ13G$G<48leNqR!DCVt9)@}(zMI5w6Wo=N zpP1*3DI;~h2WDWgcKn*f!+ORD)f$DZFwgKBafEZmeXQMAsq9sxP9A)7zOYnkHT9JU zRA`umgmP9d6=PHmFIgx=0$(sjb>+0CHG)K@cPG{IxaJ&Ueo8)0RWgV9+gO7+Bl1(F z7!BslJ2MP*PWJ;x)QXbR$6jEr5q3 z(3}F@YO_P1NyTdEXRLU6fp?9V2-S=E+YaeLL{Y)W%6`k7$(EW8EZSA*(+;e5@jgD^I zaJQ2|oCM1n!A&-8`;#RDcZyk*+RPkn_r8?Ak@agHiSp*qFNX)&i21HE?yuZ;-C<3C zwJGd1lx5UzViP7sZJ&|LqH*mryb}y|%AOw+v)yc`qM)03qyyrqhX?ub`Cjwx2PrR! z)_z>5*!*$x1=Qa-0uE7jy0z`>|Ni#X+uV|%_81F7)b+nf%iz=`fF4g5UfHS_?PHbr zB;0$bK@=di?f`dS(j{l3-tSCfp~zUuva+=EWxJcRfp(<$@vd(GigM&~vaYZ0c#BTs z3ijkxMl=vw5AS&DcXQ%eeKt!uKvh2l3W?&3=dBHU=Gz?O!40S&&~ei2vg**c$o;i89~6DVns zG>9a*`k5)NI9|?W!@9>rzJ;9EJ=YlJTx1r1BA?H`LWijk(rTax9(OAu;q4_wTj-yj z1%W4GW&K4T=uEGb+E!>W0SD_C0RR91 literal 0 HcmV?d00001 diff --git a/animations/step_05_b/web/icons/Icon-512.png b/animations/step_05_b/web/icons/Icon-512.png new file mode 100644 index 0000000000000000000000000000000000000000..88cfd48dff1169879ba46840804b412fe02fefd6 GIT binary patch literal 8252 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 literal 0 HcmV?d00001 diff --git a/animations/step_05_b/web/icons/Icon-maskable-192.png b/animations/step_05_b/web/icons/Icon-maskable-192.png new file mode 100644 index 0000000000000000000000000000000000000000..eb9b4d76e525556d5d89141648c724331630325d GIT binary patch literal 5594 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 X>c!)3PgKfL&lX^$Z>Cpu&6)6jvi^Z! literal 0 HcmV?d00001 diff --git a/animations/step_05_b/web/icons/Icon-maskable-512.png b/animations/step_05_b/web/icons/Icon-maskable-512.png new file mode 100644 index 0000000000000000000000000000000000000000..d69c56691fbdb0b7efa65097c7cc1edac12a6d3e GIT binary patch literal 20998 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 MPgg&ebxsLQ025IeI{*Lx literal 0 HcmV?d00001 diff --git a/animations/step_05_b/web/index.html b/animations/step_05_b/web/index.html new file mode 100644 index 0000000000..ec05768c59 --- /dev/null +++ b/animations/step_05_b/web/index.html @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + quiz + + + + + + diff --git a/animations/step_05_b/web/manifest.json b/animations/step_05_b/web/manifest.json new file mode 100644 index 0000000000..467748be48 --- /dev/null +++ b/animations/step_05_b/web/manifest.json @@ -0,0 +1,35 @@ +{ + "name": "quiz", + "short_name": "quiz", + "start_url": ".", + "display": "standalone", + "background_color": "#0175C2", + "theme_color": "#0175C2", + "description": "A new Flutter project.", + "orientation": "portrait-primary", + "prefer_related_applications": false, + "icons": [ + { + "src": "icons/Icon-192.png", + "sizes": "192x192", + "type": "image/png" + }, + { + "src": "icons/Icon-512.png", + "sizes": "512x512", + "type": "image/png" + }, + { + "src": "icons/Icon-maskable-192.png", + "sizes": "192x192", + "type": "image/png", + "purpose": "maskable" + }, + { + "src": "icons/Icon-maskable-512.png", + "sizes": "512x512", + "type": "image/png", + "purpose": "maskable" + } + ] +} diff --git a/animations/step_05_b/windows/.gitignore b/animations/step_05_b/windows/.gitignore new file mode 100644 index 0000000000..d492d0d98c --- /dev/null +++ b/animations/step_05_b/windows/.gitignore @@ -0,0 +1,17 @@ +flutter/ephemeral/ + +# Visual Studio user-specific files. +*.suo +*.user +*.userosscache +*.sln.docstates + +# Visual Studio build-related files. +x64/ +x86/ + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!*.[Cc]ache/ diff --git a/animations/step_05_b/windows/CMakeLists.txt b/animations/step_05_b/windows/CMakeLists.txt new file mode 100644 index 0000000000..e65947e844 --- /dev/null +++ b/animations/step_05_b/windows/CMakeLists.txt @@ -0,0 +1,108 @@ +# Project-level configuration. +cmake_minimum_required(VERSION 3.14) +project(quiz LANGUAGES CXX) + +# The name of the executable created for the application. Change this to change +# the on-disk name of your application. +set(BINARY_NAME "quiz") + +# Explicitly opt in to modern CMake behaviors to avoid warnings with recent +# versions of CMake. +cmake_policy(VERSION 3.14...3.25) + +# Define build configuration option. +get_property(IS_MULTICONFIG GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG) +if(IS_MULTICONFIG) + set(CMAKE_CONFIGURATION_TYPES "Debug;Profile;Release" + CACHE STRING "" FORCE) +else() + if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) + set(CMAKE_BUILD_TYPE "Debug" CACHE + STRING "Flutter build mode" FORCE) + set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS + "Debug" "Profile" "Release") + endif() +endif() +# Define settings for the Profile build mode. +set(CMAKE_EXE_LINKER_FLAGS_PROFILE "${CMAKE_EXE_LINKER_FLAGS_RELEASE}") +set(CMAKE_SHARED_LINKER_FLAGS_PROFILE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE}") +set(CMAKE_C_FLAGS_PROFILE "${CMAKE_C_FLAGS_RELEASE}") +set(CMAKE_CXX_FLAGS_PROFILE "${CMAKE_CXX_FLAGS_RELEASE}") + +# Use Unicode for all projects. +add_definitions(-DUNICODE -D_UNICODE) + +# Compilation settings that should be applied to most targets. +# +# Be cautious about adding new options here, as plugins use this function by +# default. In most cases, you should add new options to specific targets instead +# of modifying this function. +function(APPLY_STANDARD_SETTINGS TARGET) + target_compile_features(${TARGET} PUBLIC cxx_std_17) + target_compile_options(${TARGET} PRIVATE /W4 /WX /wd"4100") + target_compile_options(${TARGET} PRIVATE /EHsc) + target_compile_definitions(${TARGET} PRIVATE "_HAS_EXCEPTIONS=0") + target_compile_definitions(${TARGET} PRIVATE "$<$:_DEBUG>") +endfunction() + +# Flutter library and tool build rules. +set(FLUTTER_MANAGED_DIR "${CMAKE_CURRENT_SOURCE_DIR}/flutter") +add_subdirectory(${FLUTTER_MANAGED_DIR}) + +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") + + +# Generated plugin build rules, which manage building the plugins and adding +# them to the application. +include(flutter/generated_plugins.cmake) + + +# === Installation === +# Support files are copied into place next to the executable, so that it can +# run in place. This is done instead of making a separate bundle (as on Linux) +# so that building and running from within Visual Studio will work. +set(BUILD_BUNDLE_DIR "$") +# Make the "install" step default, as it's required to run. +set(CMAKE_VS_INCLUDE_INSTALL_TO_DEFAULT_BUILD 1) +if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) + set(CMAKE_INSTALL_PREFIX "${BUILD_BUNDLE_DIR}" CACHE PATH "..." FORCE) +endif() + +set(INSTALL_BUNDLE_DATA_DIR "${CMAKE_INSTALL_PREFIX}/data") +set(INSTALL_BUNDLE_LIB_DIR "${CMAKE_INSTALL_PREFIX}") + +install(TARGETS ${BINARY_NAME} RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_ICU_DATA_FILE}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) + +if(PLUGIN_BUNDLED_LIBRARIES) + install(FILES "${PLUGIN_BUNDLED_LIBRARIES}" + DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) +endif() + +# Copy the native assets provided by the build.dart from all packages. +set(NATIVE_ASSETS_DIR "${PROJECT_BUILD_DIR}native_assets/windows/") +install(DIRECTORY "${NATIVE_ASSETS_DIR}" + DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) + +# Fully re-copy the assets directory on each build to avoid having stale files +# from a previous install. +set(FLUTTER_ASSET_DIR_NAME "flutter_assets") +install(CODE " + file(REMOVE_RECURSE \"${INSTALL_BUNDLE_DATA_DIR}/${FLUTTER_ASSET_DIR_NAME}\") + " COMPONENT Runtime) +install(DIRECTORY "${PROJECT_BUILD_DIR}/${FLUTTER_ASSET_DIR_NAME}" + DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" COMPONENT Runtime) + +# Install the AOT library on non-Debug builds only. +install(FILES "${AOT_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" + CONFIGURATIONS Profile;Release + COMPONENT Runtime) diff --git a/animations/step_05_b/windows/flutter/CMakeLists.txt b/animations/step_05_b/windows/flutter/CMakeLists.txt new file mode 100644 index 0000000000..903f4899d6 --- /dev/null +++ b/animations/step_05_b/windows/flutter/CMakeLists.txt @@ -0,0 +1,109 @@ +# This file controls Flutter-level build steps. It should not be edited. +cmake_minimum_required(VERSION 3.14) + +set(EPHEMERAL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/ephemeral") + +# Configuration provided via flutter tool. +include(${EPHEMERAL_DIR}/generated_config.cmake) + +# TODO: Move the rest of this into files in ephemeral. See +# https://github.com/flutter/flutter/issues/57146. +set(WRAPPER_ROOT "${EPHEMERAL_DIR}/cpp_client_wrapper") + +# Set fallback configurations for older versions of the flutter tool. +if (NOT DEFINED FLUTTER_TARGET_PLATFORM) + set(FLUTTER_TARGET_PLATFORM "windows-x64") +endif() + +# === Flutter Library === +set(FLUTTER_LIBRARY "${EPHEMERAL_DIR}/flutter_windows.dll") + +# Published to parent scope for install step. +set(FLUTTER_LIBRARY ${FLUTTER_LIBRARY} PARENT_SCOPE) +set(FLUTTER_ICU_DATA_FILE "${EPHEMERAL_DIR}/icudtl.dat" PARENT_SCOPE) +set(PROJECT_BUILD_DIR "${PROJECT_DIR}/build/" PARENT_SCOPE) +set(AOT_LIBRARY "${PROJECT_DIR}/build/windows/app.so" PARENT_SCOPE) + +list(APPEND FLUTTER_LIBRARY_HEADERS + "flutter_export.h" + "flutter_windows.h" + "flutter_messenger.h" + "flutter_plugin_registrar.h" + "flutter_texture_registrar.h" +) +list(TRANSFORM FLUTTER_LIBRARY_HEADERS PREPEND "${EPHEMERAL_DIR}/") +add_library(flutter INTERFACE) +target_include_directories(flutter INTERFACE + "${EPHEMERAL_DIR}" +) +target_link_libraries(flutter INTERFACE "${FLUTTER_LIBRARY}.lib") +add_dependencies(flutter flutter_assemble) + +# === Wrapper === +list(APPEND CPP_WRAPPER_SOURCES_CORE + "core_implementations.cc" + "standard_codec.cc" +) +list(TRANSFORM CPP_WRAPPER_SOURCES_CORE PREPEND "${WRAPPER_ROOT}/") +list(APPEND CPP_WRAPPER_SOURCES_PLUGIN + "plugin_registrar.cc" +) +list(TRANSFORM CPP_WRAPPER_SOURCES_PLUGIN PREPEND "${WRAPPER_ROOT}/") +list(APPEND CPP_WRAPPER_SOURCES_APP + "flutter_engine.cc" + "flutter_view_controller.cc" +) +list(TRANSFORM CPP_WRAPPER_SOURCES_APP PREPEND "${WRAPPER_ROOT}/") + +# Wrapper sources needed for a plugin. +add_library(flutter_wrapper_plugin STATIC + ${CPP_WRAPPER_SOURCES_CORE} + ${CPP_WRAPPER_SOURCES_PLUGIN} +) +apply_standard_settings(flutter_wrapper_plugin) +set_target_properties(flutter_wrapper_plugin PROPERTIES + POSITION_INDEPENDENT_CODE ON) +set_target_properties(flutter_wrapper_plugin PROPERTIES + CXX_VISIBILITY_PRESET hidden) +target_link_libraries(flutter_wrapper_plugin PUBLIC flutter) +target_include_directories(flutter_wrapper_plugin PUBLIC + "${WRAPPER_ROOT}/include" +) +add_dependencies(flutter_wrapper_plugin flutter_assemble) + +# Wrapper sources needed for the runner. +add_library(flutter_wrapper_app STATIC + ${CPP_WRAPPER_SOURCES_CORE} + ${CPP_WRAPPER_SOURCES_APP} +) +apply_standard_settings(flutter_wrapper_app) +target_link_libraries(flutter_wrapper_app PUBLIC flutter) +target_include_directories(flutter_wrapper_app PUBLIC + "${WRAPPER_ROOT}/include" +) +add_dependencies(flutter_wrapper_app flutter_assemble) + +# === Flutter tool backend === +# _phony_ is a non-existent file to force this command to run every time, +# since currently there's no way to get a full input/output list from the +# flutter tool. +set(PHONY_OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/_phony_") +set_source_files_properties("${PHONY_OUTPUT}" PROPERTIES SYMBOLIC TRUE) +add_custom_command( + OUTPUT ${FLUTTER_LIBRARY} ${FLUTTER_LIBRARY_HEADERS} + ${CPP_WRAPPER_SOURCES_CORE} ${CPP_WRAPPER_SOURCES_PLUGIN} + ${CPP_WRAPPER_SOURCES_APP} + ${PHONY_OUTPUT} + COMMAND ${CMAKE_COMMAND} -E env + ${FLUTTER_TOOL_ENVIRONMENT} + "${FLUTTER_ROOT}/packages/flutter_tools/bin/tool_backend.bat" + ${FLUTTER_TARGET_PLATFORM} $ + VERBATIM +) +add_custom_target(flutter_assemble DEPENDS + "${FLUTTER_LIBRARY}" + ${FLUTTER_LIBRARY_HEADERS} + ${CPP_WRAPPER_SOURCES_CORE} + ${CPP_WRAPPER_SOURCES_PLUGIN} + ${CPP_WRAPPER_SOURCES_APP} +) diff --git a/animations/step_05_b/windows/flutter/generated_plugin_registrant.cc b/animations/step_05_b/windows/flutter/generated_plugin_registrant.cc new file mode 100644 index 0000000000..8b6d4680af --- /dev/null +++ b/animations/step_05_b/windows/flutter/generated_plugin_registrant.cc @@ -0,0 +1,11 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#include "generated_plugin_registrant.h" + + +void RegisterPlugins(flutter::PluginRegistry* registry) { +} diff --git a/animations/step_05_b/windows/flutter/generated_plugin_registrant.h b/animations/step_05_b/windows/flutter/generated_plugin_registrant.h new file mode 100644 index 0000000000..dc139d85a9 --- /dev/null +++ b/animations/step_05_b/windows/flutter/generated_plugin_registrant.h @@ -0,0 +1,15 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#ifndef GENERATED_PLUGIN_REGISTRANT_ +#define GENERATED_PLUGIN_REGISTRANT_ + +#include + +// Registers Flutter plugins. +void RegisterPlugins(flutter::PluginRegistry* registry); + +#endif // GENERATED_PLUGIN_REGISTRANT_ diff --git a/animations/step_05_b/windows/flutter/generated_plugins.cmake b/animations/step_05_b/windows/flutter/generated_plugins.cmake new file mode 100644 index 0000000000..b93c4c30c1 --- /dev/null +++ b/animations/step_05_b/windows/flutter/generated_plugins.cmake @@ -0,0 +1,23 @@ +# +# Generated file, do not edit. +# + +list(APPEND FLUTTER_PLUGIN_LIST +) + +list(APPEND FLUTTER_FFI_PLUGIN_LIST +) + +set(PLUGIN_BUNDLED_LIBRARIES) + +foreach(plugin ${FLUTTER_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${plugin}/windows plugins/${plugin}) + target_link_libraries(${BINARY_NAME} PRIVATE ${plugin}_plugin) + list(APPEND PLUGIN_BUNDLED_LIBRARIES $) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${plugin}_bundled_libraries}) +endforeach(plugin) + +foreach(ffi_plugin ${FLUTTER_FFI_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${ffi_plugin}/windows plugins/${ffi_plugin}) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${ffi_plugin}_bundled_libraries}) +endforeach(ffi_plugin) diff --git a/animations/step_05_b/windows/runner/CMakeLists.txt b/animations/step_05_b/windows/runner/CMakeLists.txt new file mode 100644 index 0000000000..394917c053 --- /dev/null +++ b/animations/step_05_b/windows/runner/CMakeLists.txt @@ -0,0 +1,40 @@ +cmake_minimum_required(VERSION 3.14) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} WIN32 + "flutter_window.cpp" + "main.cpp" + "utils.cpp" + "win32_window.cpp" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" + "Runner.rc" + "runner.exe.manifest" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the build version. +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION=\"${FLUTTER_VERSION}\"") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_MAJOR=${FLUTTER_VERSION_MAJOR}") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_MINOR=${FLUTTER_VERSION_MINOR}") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_PATCH=${FLUTTER_VERSION_PATCH}") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_BUILD=${FLUTTER_VERSION_BUILD}") + +# Disable Windows macros that collide with C++ standard library functions. +target_compile_definitions(${BINARY_NAME} PRIVATE "NOMINMAX") + +# Add dependency libraries and include directories. Add any application-specific +# dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter flutter_wrapper_app) +target_link_libraries(${BINARY_NAME} PRIVATE "dwmapi.lib") +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") + +# Run the Flutter tool portions of the build. This must not be removed. +add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/animations/step_05_b/windows/runner/Runner.rc b/animations/step_05_b/windows/runner/Runner.rc new file mode 100644 index 0000000000..f0d8342b40 --- /dev/null +++ b/animations/step_05_b/windows/runner/Runner.rc @@ -0,0 +1,121 @@ +// Microsoft Visual C++ generated resource script. +// +#pragma code_page(65001) +#include "resource.h" + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#include "winres.h" + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// English (United States) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE +BEGIN + "resource.h\0" +END + +2 TEXTINCLUDE +BEGIN + "#include ""winres.h""\r\n" + "\0" +END + +3 TEXTINCLUDE +BEGIN + "\r\n" + "\0" +END + +#endif // APSTUDIO_INVOKED + + +///////////////////////////////////////////////////////////////////////////// +// +// Icon +// + +// Icon with lowest ID value placed first to ensure application icon +// remains consistent on all systems. +IDI_APP_ICON ICON "resources\\app_icon.ico" + + +///////////////////////////////////////////////////////////////////////////// +// +// Version +// + +#if defined(FLUTTER_VERSION_MAJOR) && defined(FLUTTER_VERSION_MINOR) && defined(FLUTTER_VERSION_PATCH) && defined(FLUTTER_VERSION_BUILD) +#define VERSION_AS_NUMBER FLUTTER_VERSION_MAJOR,FLUTTER_VERSION_MINOR,FLUTTER_VERSION_PATCH,FLUTTER_VERSION_BUILD +#else +#define VERSION_AS_NUMBER 1,0,0,0 +#endif + +#if defined(FLUTTER_VERSION) +#define VERSION_AS_STRING FLUTTER_VERSION +#else +#define VERSION_AS_STRING "1.0.0" +#endif + +VS_VERSION_INFO VERSIONINFO + FILEVERSION VERSION_AS_NUMBER + PRODUCTVERSION VERSION_AS_NUMBER + FILEFLAGSMASK VS_FFI_FILEFLAGSMASK +#ifdef _DEBUG + FILEFLAGS VS_FF_DEBUG +#else + FILEFLAGS 0x0L +#endif + FILEOS VOS__WINDOWS32 + FILETYPE VFT_APP + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904e4" + BEGIN + VALUE "CompanyName", "com.example" "\0" + VALUE "FileDescription", "quiz" "\0" + VALUE "FileVersion", VERSION_AS_STRING "\0" + VALUE "InternalName", "quiz" "\0" + VALUE "LegalCopyright", "Copyright (C) 2024 com.example. All rights reserved." "\0" + VALUE "OriginalFilename", "quiz.exe" "\0" + VALUE "ProductName", "quiz" "\0" + VALUE "ProductVersion", VERSION_AS_STRING "\0" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x409, 1252 + END +END + +#endif // English (United States) resources +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// + + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED diff --git a/animations/step_05_b/windows/runner/flutter_window.cpp b/animations/step_05_b/windows/runner/flutter_window.cpp new file mode 100644 index 0000000000..955ee3038f --- /dev/null +++ b/animations/step_05_b/windows/runner/flutter_window.cpp @@ -0,0 +1,71 @@ +#include "flutter_window.h" + +#include + +#include "flutter/generated_plugin_registrant.h" + +FlutterWindow::FlutterWindow(const flutter::DartProject& project) + : project_(project) {} + +FlutterWindow::~FlutterWindow() {} + +bool FlutterWindow::OnCreate() { + if (!Win32Window::OnCreate()) { + return false; + } + + RECT frame = GetClientArea(); + + // The size here must match the window dimensions to avoid unnecessary surface + // creation / destruction in the startup path. + flutter_controller_ = std::make_unique( + frame.right - frame.left, frame.bottom - frame.top, project_); + // Ensure that basic setup of the controller was successful. + if (!flutter_controller_->engine() || !flutter_controller_->view()) { + return false; + } + RegisterPlugins(flutter_controller_->engine()); + SetChildContent(flutter_controller_->view()->GetNativeWindow()); + + flutter_controller_->engine()->SetNextFrameCallback([&]() { + this->Show(); + }); + + // Flutter can complete the first frame before the "show window" callback is + // registered. The following call ensures a frame is pending to ensure the + // window is shown. It is a no-op if the first frame hasn't completed yet. + flutter_controller_->ForceRedraw(); + + return true; +} + +void FlutterWindow::OnDestroy() { + if (flutter_controller_) { + flutter_controller_ = nullptr; + } + + Win32Window::OnDestroy(); +} + +LRESULT +FlutterWindow::MessageHandler(HWND hwnd, UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept { + // Give Flutter, including plugins, an opportunity to handle window messages. + if (flutter_controller_) { + std::optional result = + flutter_controller_->HandleTopLevelWindowProc(hwnd, message, wparam, + lparam); + if (result) { + return *result; + } + } + + switch (message) { + case WM_FONTCHANGE: + flutter_controller_->engine()->ReloadSystemFonts(); + break; + } + + return Win32Window::MessageHandler(hwnd, message, wparam, lparam); +} diff --git a/animations/step_05_b/windows/runner/flutter_window.h b/animations/step_05_b/windows/runner/flutter_window.h new file mode 100644 index 0000000000..6da0652f05 --- /dev/null +++ b/animations/step_05_b/windows/runner/flutter_window.h @@ -0,0 +1,33 @@ +#ifndef RUNNER_FLUTTER_WINDOW_H_ +#define RUNNER_FLUTTER_WINDOW_H_ + +#include +#include + +#include + +#include "win32_window.h" + +// A window that does nothing but host a Flutter view. +class FlutterWindow : public Win32Window { + public: + // Creates a new FlutterWindow hosting a Flutter view running |project|. + explicit FlutterWindow(const flutter::DartProject& project); + virtual ~FlutterWindow(); + + protected: + // Win32Window: + bool OnCreate() override; + void OnDestroy() override; + LRESULT MessageHandler(HWND window, UINT const message, WPARAM const wparam, + LPARAM const lparam) noexcept override; + + private: + // The project to run. + flutter::DartProject project_; + + // The Flutter instance hosted by this window. + std::unique_ptr flutter_controller_; +}; + +#endif // RUNNER_FLUTTER_WINDOW_H_ diff --git a/animations/step_05_b/windows/runner/main.cpp b/animations/step_05_b/windows/runner/main.cpp new file mode 100644 index 0000000000..cc4e09820c --- /dev/null +++ b/animations/step_05_b/windows/runner/main.cpp @@ -0,0 +1,43 @@ +#include +#include +#include + +#include "flutter_window.h" +#include "utils.h" + +int APIENTRY wWinMain(_In_ HINSTANCE instance, _In_opt_ HINSTANCE prev, + _In_ wchar_t *command_line, _In_ int show_command) { + // Attach to console when present (e.g., 'flutter run') or create a + // new console when running with a debugger. + if (!::AttachConsole(ATTACH_PARENT_PROCESS) && ::IsDebuggerPresent()) { + CreateAndAttachConsole(); + } + + // Initialize COM, so that it is available for use in the library and/or + // plugins. + ::CoInitializeEx(nullptr, COINIT_APARTMENTTHREADED); + + flutter::DartProject project(L"data"); + + std::vector command_line_arguments = + GetCommandLineArguments(); + + project.set_dart_entrypoint_arguments(std::move(command_line_arguments)); + + FlutterWindow window(project); + Win32Window::Point origin(10, 10); + Win32Window::Size size(1280, 720); + if (!window.Create(L"quiz", origin, size)) { + return EXIT_FAILURE; + } + window.SetQuitOnClose(true); + + ::MSG msg; + while (::GetMessage(&msg, nullptr, 0, 0)) { + ::TranslateMessage(&msg); + ::DispatchMessage(&msg); + } + + ::CoUninitialize(); + return EXIT_SUCCESS; +} diff --git a/animations/step_05_b/windows/runner/resource.h b/animations/step_05_b/windows/runner/resource.h new file mode 100644 index 0000000000..66a65d1e4a --- /dev/null +++ b/animations/step_05_b/windows/runner/resource.h @@ -0,0 +1,16 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Visual C++ generated include file. +// Used by Runner.rc +// +#define IDI_APP_ICON 101 + +// Next default values for new objects +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS +#define _APS_NEXT_RESOURCE_VALUE 102 +#define _APS_NEXT_COMMAND_VALUE 40001 +#define _APS_NEXT_CONTROL_VALUE 1001 +#define _APS_NEXT_SYMED_VALUE 101 +#endif +#endif diff --git a/animations/step_05_b/windows/runner/resources/app_icon.ico b/animations/step_05_b/windows/runner/resources/app_icon.ico new file mode 100644 index 0000000000000000000000000000000000000000..c04e20caf6370ebb9253ad831cc31de4a9c965f6 GIT binary patch literal 33772 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 literal 0 HcmV?d00001 diff --git a/animations/step_05_b/windows/runner/runner.exe.manifest b/animations/step_05_b/windows/runner/runner.exe.manifest new file mode 100644 index 0000000000..153653e8d6 --- /dev/null +++ b/animations/step_05_b/windows/runner/runner.exe.manifest @@ -0,0 +1,14 @@ + + + + + PerMonitorV2 + + + + + + + + + diff --git a/animations/step_05_b/windows/runner/utils.cpp b/animations/step_05_b/windows/runner/utils.cpp new file mode 100644 index 0000000000..3a0b46511a --- /dev/null +++ b/animations/step_05_b/windows/runner/utils.cpp @@ -0,0 +1,65 @@ +#include "utils.h" + +#include +#include +#include +#include + +#include + +void CreateAndAttachConsole() { + if (::AllocConsole()) { + FILE *unused; + if (freopen_s(&unused, "CONOUT$", "w", stdout)) { + _dup2(_fileno(stdout), 1); + } + if (freopen_s(&unused, "CONOUT$", "w", stderr)) { + _dup2(_fileno(stdout), 2); + } + std::ios::sync_with_stdio(); + FlutterDesktopResyncOutputStreams(); + } +} + +std::vector GetCommandLineArguments() { + // Convert the UTF-16 command line arguments to UTF-8 for the Engine to use. + int argc; + wchar_t** argv = ::CommandLineToArgvW(::GetCommandLineW(), &argc); + if (argv == nullptr) { + return std::vector(); + } + + std::vector command_line_arguments; + + // Skip the first argument as it's the binary name. + for (int i = 1; i < argc; i++) { + command_line_arguments.push_back(Utf8FromUtf16(argv[i])); + } + + ::LocalFree(argv); + + return command_line_arguments; +} + +std::string Utf8FromUtf16(const wchar_t* utf16_string) { + if (utf16_string == nullptr) { + return std::string(); + } + unsigned int target_length = ::WideCharToMultiByte( + CP_UTF8, WC_ERR_INVALID_CHARS, utf16_string, + -1, nullptr, 0, nullptr, nullptr) + -1; // remove the trailing null character + int input_length = (int)wcslen(utf16_string); + std::string utf8_string; + if (target_length == 0 || target_length > utf8_string.max_size()) { + return utf8_string; + } + utf8_string.resize(target_length); + int converted_length = ::WideCharToMultiByte( + CP_UTF8, WC_ERR_INVALID_CHARS, utf16_string, + input_length, utf8_string.data(), target_length, nullptr, nullptr); + if (converted_length == 0) { + return std::string(); + } + return utf8_string; +} diff --git a/animations/step_05_b/windows/runner/utils.h b/animations/step_05_b/windows/runner/utils.h new file mode 100644 index 0000000000..3879d54755 --- /dev/null +++ b/animations/step_05_b/windows/runner/utils.h @@ -0,0 +1,19 @@ +#ifndef RUNNER_UTILS_H_ +#define RUNNER_UTILS_H_ + +#include +#include + +// Creates a console for the process, and redirects stdout and stderr to +// it for both the runner and the Flutter library. +void CreateAndAttachConsole(); + +// Takes a null-terminated wchar_t* encoded in UTF-16 and returns a std::string +// encoded in UTF-8. Returns an empty std::string on failure. +std::string Utf8FromUtf16(const wchar_t* utf16_string); + +// Gets the command line arguments passed in as a std::vector, +// encoded in UTF-8. Returns an empty std::vector on failure. +std::vector GetCommandLineArguments(); + +#endif // RUNNER_UTILS_H_ diff --git a/animations/step_05_b/windows/runner/win32_window.cpp b/animations/step_05_b/windows/runner/win32_window.cpp new file mode 100644 index 0000000000..60608d0fe5 --- /dev/null +++ b/animations/step_05_b/windows/runner/win32_window.cpp @@ -0,0 +1,288 @@ +#include "win32_window.h" + +#include +#include + +#include "resource.h" + +namespace { + +/// Window attribute that enables dark mode window decorations. +/// +/// Redefined in case the developer's machine has a Windows SDK older than +/// version 10.0.22000.0. +/// See: https://docs.microsoft.com/windows/win32/api/dwmapi/ne-dwmapi-dwmwindowattribute +#ifndef DWMWA_USE_IMMERSIVE_DARK_MODE +#define DWMWA_USE_IMMERSIVE_DARK_MODE 20 +#endif + +constexpr const wchar_t kWindowClassName[] = L"FLUTTER_RUNNER_WIN32_WINDOW"; + +/// Registry key for app theme preference. +/// +/// A value of 0 indicates apps should use dark mode. A non-zero or missing +/// value indicates apps should use light mode. +constexpr const wchar_t kGetPreferredBrightnessRegKey[] = + L"Software\\Microsoft\\Windows\\CurrentVersion\\Themes\\Personalize"; +constexpr const wchar_t kGetPreferredBrightnessRegValue[] = L"AppsUseLightTheme"; + +// The number of Win32Window objects that currently exist. +static int g_active_window_count = 0; + +using EnableNonClientDpiScaling = BOOL __stdcall(HWND hwnd); + +// Scale helper to convert logical scaler values to physical using passed in +// scale factor +int Scale(int source, double scale_factor) { + return static_cast(source * scale_factor); +} + +// Dynamically loads the |EnableNonClientDpiScaling| from the User32 module. +// This API is only needed for PerMonitor V1 awareness mode. +void EnableFullDpiSupportIfAvailable(HWND hwnd) { + HMODULE user32_module = LoadLibraryA("User32.dll"); + if (!user32_module) { + return; + } + auto enable_non_client_dpi_scaling = + reinterpret_cast( + GetProcAddress(user32_module, "EnableNonClientDpiScaling")); + if (enable_non_client_dpi_scaling != nullptr) { + enable_non_client_dpi_scaling(hwnd); + } + FreeLibrary(user32_module); +} + +} // namespace + +// Manages the Win32Window's window class registration. +class WindowClassRegistrar { + public: + ~WindowClassRegistrar() = default; + + // Returns the singleton registrar instance. + static WindowClassRegistrar* GetInstance() { + if (!instance_) { + instance_ = new WindowClassRegistrar(); + } + return instance_; + } + + // Returns the name of the window class, registering the class if it hasn't + // previously been registered. + const wchar_t* GetWindowClass(); + + // Unregisters the window class. Should only be called if there are no + // instances of the window. + void UnregisterWindowClass(); + + private: + WindowClassRegistrar() = default; + + static WindowClassRegistrar* instance_; + + bool class_registered_ = false; +}; + +WindowClassRegistrar* WindowClassRegistrar::instance_ = nullptr; + +const wchar_t* WindowClassRegistrar::GetWindowClass() { + if (!class_registered_) { + WNDCLASS window_class{}; + window_class.hCursor = LoadCursor(nullptr, IDC_ARROW); + window_class.lpszClassName = kWindowClassName; + window_class.style = CS_HREDRAW | CS_VREDRAW; + window_class.cbClsExtra = 0; + window_class.cbWndExtra = 0; + window_class.hInstance = GetModuleHandle(nullptr); + window_class.hIcon = + LoadIcon(window_class.hInstance, MAKEINTRESOURCE(IDI_APP_ICON)); + window_class.hbrBackground = 0; + window_class.lpszMenuName = nullptr; + window_class.lpfnWndProc = Win32Window::WndProc; + RegisterClass(&window_class); + class_registered_ = true; + } + return kWindowClassName; +} + +void WindowClassRegistrar::UnregisterWindowClass() { + UnregisterClass(kWindowClassName, nullptr); + class_registered_ = false; +} + +Win32Window::Win32Window() { + ++g_active_window_count; +} + +Win32Window::~Win32Window() { + --g_active_window_count; + Destroy(); +} + +bool Win32Window::Create(const std::wstring& title, + const Point& origin, + const Size& size) { + Destroy(); + + const wchar_t* window_class = + WindowClassRegistrar::GetInstance()->GetWindowClass(); + + const POINT target_point = {static_cast(origin.x), + static_cast(origin.y)}; + HMONITOR monitor = MonitorFromPoint(target_point, MONITOR_DEFAULTTONEAREST); + UINT dpi = FlutterDesktopGetDpiForMonitor(monitor); + double scale_factor = dpi / 96.0; + + HWND window = CreateWindow( + window_class, title.c_str(), WS_OVERLAPPEDWINDOW, + Scale(origin.x, scale_factor), Scale(origin.y, scale_factor), + Scale(size.width, scale_factor), Scale(size.height, scale_factor), + nullptr, nullptr, GetModuleHandle(nullptr), this); + + if (!window) { + return false; + } + + UpdateTheme(window); + + return OnCreate(); +} + +bool Win32Window::Show() { + return ShowWindow(window_handle_, SW_SHOWNORMAL); +} + +// static +LRESULT CALLBACK Win32Window::WndProc(HWND const window, + UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept { + if (message == WM_NCCREATE) { + auto window_struct = reinterpret_cast(lparam); + SetWindowLongPtr(window, GWLP_USERDATA, + reinterpret_cast(window_struct->lpCreateParams)); + + auto that = static_cast(window_struct->lpCreateParams); + EnableFullDpiSupportIfAvailable(window); + that->window_handle_ = window; + } else if (Win32Window* that = GetThisFromHandle(window)) { + return that->MessageHandler(window, message, wparam, lparam); + } + + return DefWindowProc(window, message, wparam, lparam); +} + +LRESULT +Win32Window::MessageHandler(HWND hwnd, + UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept { + switch (message) { + case WM_DESTROY: + window_handle_ = nullptr; + Destroy(); + if (quit_on_close_) { + PostQuitMessage(0); + } + return 0; + + case WM_DPICHANGED: { + auto newRectSize = reinterpret_cast(lparam); + LONG newWidth = newRectSize->right - newRectSize->left; + LONG newHeight = newRectSize->bottom - newRectSize->top; + + SetWindowPos(hwnd, nullptr, newRectSize->left, newRectSize->top, newWidth, + newHeight, SWP_NOZORDER | SWP_NOACTIVATE); + + return 0; + } + case WM_SIZE: { + RECT rect = GetClientArea(); + if (child_content_ != nullptr) { + // Size and position the child window. + MoveWindow(child_content_, rect.left, rect.top, rect.right - rect.left, + rect.bottom - rect.top, TRUE); + } + return 0; + } + + case WM_ACTIVATE: + if (child_content_ != nullptr) { + SetFocus(child_content_); + } + return 0; + + case WM_DWMCOLORIZATIONCOLORCHANGED: + UpdateTheme(hwnd); + return 0; + } + + return DefWindowProc(window_handle_, message, wparam, lparam); +} + +void Win32Window::Destroy() { + OnDestroy(); + + if (window_handle_) { + DestroyWindow(window_handle_); + window_handle_ = nullptr; + } + if (g_active_window_count == 0) { + WindowClassRegistrar::GetInstance()->UnregisterWindowClass(); + } +} + +Win32Window* Win32Window::GetThisFromHandle(HWND const window) noexcept { + return reinterpret_cast( + GetWindowLongPtr(window, GWLP_USERDATA)); +} + +void Win32Window::SetChildContent(HWND content) { + child_content_ = content; + SetParent(content, window_handle_); + RECT frame = GetClientArea(); + + MoveWindow(content, frame.left, frame.top, frame.right - frame.left, + frame.bottom - frame.top, true); + + SetFocus(child_content_); +} + +RECT Win32Window::GetClientArea() { + RECT frame; + GetClientRect(window_handle_, &frame); + return frame; +} + +HWND Win32Window::GetHandle() { + return window_handle_; +} + +void Win32Window::SetQuitOnClose(bool quit_on_close) { + quit_on_close_ = quit_on_close; +} + +bool Win32Window::OnCreate() { + // No-op; provided for subclasses. + return true; +} + +void Win32Window::OnDestroy() { + // No-op; provided for subclasses. +} + +void Win32Window::UpdateTheme(HWND const window) { + DWORD light_mode; + DWORD light_mode_size = sizeof(light_mode); + LSTATUS result = RegGetValue(HKEY_CURRENT_USER, kGetPreferredBrightnessRegKey, + kGetPreferredBrightnessRegValue, + RRF_RT_REG_DWORD, nullptr, &light_mode, + &light_mode_size); + + if (result == ERROR_SUCCESS) { + BOOL enable_dark_mode = light_mode == 0; + DwmSetWindowAttribute(window, DWMWA_USE_IMMERSIVE_DARK_MODE, + &enable_dark_mode, sizeof(enable_dark_mode)); + } +} diff --git a/animations/step_05_b/windows/runner/win32_window.h b/animations/step_05_b/windows/runner/win32_window.h new file mode 100644 index 0000000000..e901dde684 --- /dev/null +++ b/animations/step_05_b/windows/runner/win32_window.h @@ -0,0 +1,102 @@ +#ifndef RUNNER_WIN32_WINDOW_H_ +#define RUNNER_WIN32_WINDOW_H_ + +#include + +#include +#include +#include + +// A class abstraction for a high DPI-aware Win32 Window. Intended to be +// inherited from by classes that wish to specialize with custom +// rendering and input handling +class Win32Window { + public: + struct Point { + unsigned int x; + unsigned int y; + Point(unsigned int x, unsigned int y) : x(x), y(y) {} + }; + + struct Size { + unsigned int width; + unsigned int height; + Size(unsigned int width, unsigned int height) + : width(width), height(height) {} + }; + + Win32Window(); + virtual ~Win32Window(); + + // Creates a win32 window with |title| that is positioned and sized using + // |origin| and |size|. New windows are created on the default monitor. Window + // sizes are specified to the OS in physical pixels, hence to ensure a + // consistent size this function will scale the inputted width and height as + // as appropriate for the default monitor. The window is invisible until + // |Show| is called. Returns true if the window was created successfully. + bool Create(const std::wstring& title, const Point& origin, const Size& size); + + // Show the current window. Returns true if the window was successfully shown. + bool Show(); + + // Release OS resources associated with window. + void Destroy(); + + // Inserts |content| into the window tree. + void SetChildContent(HWND content); + + // Returns the backing Window handle to enable clients to set icon and other + // window properties. Returns nullptr if the window has been destroyed. + HWND GetHandle(); + + // If true, closing this window will quit the application. + void SetQuitOnClose(bool quit_on_close); + + // Return a RECT representing the bounds of the current client area. + RECT GetClientArea(); + + protected: + // Processes and route salient window messages for mouse handling, + // size change and DPI. Delegates handling of these to member overloads that + // inheriting classes can handle. + virtual LRESULT MessageHandler(HWND window, + UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept; + + // Called when CreateAndShow is called, allowing subclass window-related + // setup. Subclasses should return false if setup fails. + virtual bool OnCreate(); + + // Called when Destroy is called. + virtual void OnDestroy(); + + private: + friend class WindowClassRegistrar; + + // OS callback called by message pump. Handles the WM_NCCREATE message which + // is passed when the non-client area is being created and enables automatic + // non-client DPI scaling so that the non-client area automatically + // responds to changes in DPI. All other messages are handled by + // MessageHandler. + static LRESULT CALLBACK WndProc(HWND const window, + UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept; + + // Retrieves a class instance pointer for |window| + static Win32Window* GetThisFromHandle(HWND const window) noexcept; + + // Update the window frame's theme to match the system theme. + static void UpdateTheme(HWND const window); + + bool quit_on_close_ = false; + + // window handle for top level window. + HWND window_handle_ = nullptr; + + // window handle for hosted content. + HWND child_content_ = nullptr; +}; + +#endif // RUNNER_WIN32_WINDOW_H_ diff --git a/animations/step_05_c/.gitignore b/animations/step_05_c/.gitignore new file mode 100644 index 0000000000..79c113f9b5 --- /dev/null +++ b/animations/step_05_c/.gitignore @@ -0,0 +1,45 @@ +# Miscellaneous +*.class +*.log +*.pyc +*.swp +.DS_Store +.atom/ +.build/ +.buildlog/ +.history +.svn/ +.swiftpm/ +migrate_working_dir/ + +# IntelliJ related +*.iml +*.ipr +*.iws +.idea/ + +# The .vscode folder contains launch configuration and tasks you configure in +# VS Code which you may wish to be included in version control, so this line +# is commented out by default. +#.vscode/ + +# Flutter/Dart/Pub related +**/doc/api/ +**/ios/Flutter/.last_build_id +.dart_tool/ +.flutter-plugins +.flutter-plugins-dependencies +.pub-cache/ +.pub/ +/build/ + +# Symbolication related +app.*.symbols + +# Obfuscation related +app.*.map.json + +# Android Studio will place build artifacts here +/android/app/debug +/android/app/profile +/android/app/release diff --git a/animations/step_05_c/analysis_options.yaml b/animations/step_05_c/analysis_options.yaml new file mode 100644 index 0000000000..03de3bd700 --- /dev/null +++ b/animations/step_05_c/analysis_options.yaml @@ -0,0 +1,13 @@ +include: package:flutter_lints/flutter.yaml + +analyzer: + errors: + unused_field: ignore + +linter: + rules: + annotate_overrides: false + prefer_const_constructors: false + prefer_const_constructors_in_immutables: false + prefer_const_declarations: false + prefer_const_literals_to_create_immutables: false diff --git a/animations/step_05_c/android/.gitignore b/animations/step_05_c/android/.gitignore new file mode 100644 index 0000000000..55afd919c6 --- /dev/null +++ b/animations/step_05_c/android/.gitignore @@ -0,0 +1,13 @@ +gradle-wrapper.jar +/.gradle +/captures/ +/gradlew +/gradlew.bat +/local.properties +GeneratedPluginRegistrant.java + +# Remember to never publicly share your keystore. +# See https://flutter.dev/to/reference-keystore +key.properties +**/*.keystore +**/*.jks diff --git a/animations/step_05_c/android/app/build.gradle.kts b/animations/step_05_c/android/app/build.gradle.kts new file mode 100644 index 0000000000..31d285867f --- /dev/null +++ b/animations/step_05_c/android/app/build.gradle.kts @@ -0,0 +1,44 @@ +plugins { + id("com.android.application") + id("kotlin-android") + // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. + id("dev.flutter.flutter-gradle-plugin") +} + +android { + namespace = "com.example.quiz" + compileSdk = flutter.compileSdkVersion + ndkVersion = flutter.ndkVersion + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 + } + + kotlinOptions { + jvmTarget = JavaVersion.VERSION_1_8.toString() + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId = "com.example.quiz" + // You can update the following values to match your application needs. + // For more information, see: https://flutter.dev/to/review-gradle-config. + minSdk = flutter.minSdkVersion + targetSdk = flutter.targetSdkVersion + versionCode = flutter.versionCode + versionName = flutter.versionName + } + + buildTypes { + release { + // TODO: Add your own signing config for the release build. + // Signing with the debug keys for now, so `flutter run --release` works. + signingConfig = signingConfigs.getByName("debug") + } + } +} + +flutter { + source = "../.." +} diff --git a/animations/step_05_c/android/app/src/debug/AndroidManifest.xml b/animations/step_05_c/android/app/src/debug/AndroidManifest.xml new file mode 100644 index 0000000000..399f6981d5 --- /dev/null +++ b/animations/step_05_c/android/app/src/debug/AndroidManifest.xml @@ -0,0 +1,7 @@ + + + + diff --git a/animations/step_05_c/android/app/src/main/AndroidManifest.xml b/animations/step_05_c/android/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000000..34076b28b3 --- /dev/null +++ b/animations/step_05_c/android/app/src/main/AndroidManifest.xml @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/animations/step_05_c/android/app/src/main/kotlin/com/example/quiz/MainActivity.kt b/animations/step_05_c/android/app/src/main/kotlin/com/example/quiz/MainActivity.kt new file mode 100644 index 0000000000..87081bb97c --- /dev/null +++ b/animations/step_05_c/android/app/src/main/kotlin/com/example/quiz/MainActivity.kt @@ -0,0 +1,5 @@ +package com.example.quiz + +import io.flutter.embedding.android.FlutterActivity + +class MainActivity: FlutterActivity() diff --git a/animations/step_05_c/android/app/src/main/res/drawable-v21/launch_background.xml b/animations/step_05_c/android/app/src/main/res/drawable-v21/launch_background.xml new file mode 100644 index 0000000000..f74085f3f6 --- /dev/null +++ b/animations/step_05_c/android/app/src/main/res/drawable-v21/launch_background.xml @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/animations/step_05_c/android/app/src/main/res/drawable/launch_background.xml b/animations/step_05_c/android/app/src/main/res/drawable/launch_background.xml new file mode 100644 index 0000000000..304732f884 --- /dev/null +++ b/animations/step_05_c/android/app/src/main/res/drawable/launch_background.xml @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/animations/step_05_c/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/animations/step_05_c/android/app/src/main/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..db77bb4b7b0906d62b1847e87f15cdcacf6a4f29 GIT binary patch literal 544 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY3?!3`olAj~WQl7;NpOBzNqJ&XDuZK6ep0G} zXKrG8YEWuoN@d~6R2!h8bpbvhu0Wd6uZuB!w&u2PAxD2eNXD>P5D~Wn-+_Wa#27Xc zC?Zj|6r#X(-D3u$NCt}(Ms06KgJ4FxJVv{GM)!I~&n8Bnc94O7-Hd)cjDZswgC;Qs zO=b+9!WcT8F?0rF7!Uys2bs@gozCP?z~o%U|N3vA*22NaGQG zlg@K`O_XuxvZ&Ks^m&R!`&1=spLvfx7oGDKDwpwW`#iqdw@AL`7MR}m`rwr|mZgU`8P7SBkL78fFf!WnuYWm$5Z0 zNXhDbCv&49sM544K|?c)WrFfiZvCi9h0O)B3Pgg&ebxsLQ05GG~ AQ2+n{ literal 0 HcmV?d00001 diff --git a/animations/step_05_c/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/animations/step_05_c/android/app/src/main/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..17987b79bb8a35cc66c3c1fd44f5a5526c1b78be GIT binary patch literal 442 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA3?vioaBc-sk|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*D5Xx&nMcT!A!W`0S9QKQy;}1Cl^CgaH=;G9cpY;r$Q>i*pfB zP2drbID<_#qf;rPZx^FqH)F_D#*k@@q03KywUtLX8Ua?`H+NMzkczFPK3lFz@i_kW%1NOn0|D2I9n9wzH8m|-tHjsw|9>@K=iMBhxvkv6m8Y-l zytQ?X=U+MF$@3 zt`~i=@j|6y)RWMK--}M|=T`o&^Ni>IoWKHEbBXz7?A@mgWoL>!*SXo`SZH-*HSdS+ yn*9;$7;m`l>wYBC5bq;=U}IMqLzqbYCidGC!)_gkIk_C@Uy!y&wkt5C($~2D>~)O*cj@FGjOCM)M>_ixfudOh)?xMu#Fs z#}Y=@YDTwOM)x{K_j*Q;dPdJ?Mz0n|pLRx{4n|)f>SXlmV)XB04CrSJn#dS5nK2lM zrZ9#~WelCp7&e13Y$jvaEXHskn$2V!!DN-nWS__6T*l;H&Fopn?A6HZ-6WRLFP=R` zqG+CE#d4|IbyAI+rJJ`&x9*T`+a=p|0O(+s{UBcyZdkhj=yS1>AirP+0R;mf2uMgM zC}@~JfByORAh4SyRgi&!(cja>F(l*O+nd+@4m$|6K6KDn_&uvCpV23&>G9HJp{xgg zoq1^2_p9@|WEo z*X_Uko@K)qYYv~>43eQGMdbiGbo>E~Q& zrYBH{QP^@Sti!`2)uG{irBBq@y*$B zi#&(U-*=fp74j)RyIw49+0MRPMRU)+a2r*PJ$L5roHt2$UjExCTZSbq%V!HeS7J$N zdG@vOZB4v_lF7Plrx+hxo7(fCV&}fHq)$ literal 0 HcmV?d00001 diff --git a/animations/step_05_c/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/animations/step_05_c/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..d5f1c8d34e7a88e3f88bea192c3a370d44689c3c GIT binary patch literal 1031 zcmeAS@N?(olHy`uVBq!ia0vp^6F``Q8Ax83A=Cw=BuiW)N`mv#O3D+9QW+dm@{>{( zJaZG%Q-e|yQz{EjrrIztFa`(sgt!6~Yi|1%a`XoT0ojZ}lNrNjb9xjc(B0U1_% zz5^97Xt*%oq$rQy4?0GKNfJ44uvxI)gC`h-NZ|&0-7(qS@?b!5r36oQ}zyZrNO3 zMO=Or+<~>+A&uN&E!^Sl+>xE!QC-|oJv`ApDhqC^EWD|@=#J`=d#Xzxs4ah}w&Jnc z$|q_opQ^2TrnVZ0o~wh<3t%W&flvYGe#$xqda2bR_R zvPYgMcHgjZ5nSA^lJr%;<&0do;O^tDDh~=pIxA#coaCY>&N%M2^tq^U%3DB@ynvKo}b?yu-bFc-u0JHzced$sg7S3zqI(2 z#Km{dPr7I=pQ5>FuK#)QwK?Y`E`B?nP+}U)I#c1+FM*1kNvWG|a(TpksZQ3B@sD~b zpQ2)*V*TdwjFOtHvV|;OsiDqHi=6%)o4b!)x$)%9pGTsE z-JL={-Ffv+T87W(Xpooq<`r*VzWQcgBN$$`u}f>-ZQI1BB8ykN*=e4rIsJx9>z}*o zo~|9I;xof literal 0 HcmV?d00001 diff --git a/animations/step_05_c/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/animations/step_05_c/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..4d6372eebdb28e45604e46eeda8dd24651419bc0 GIT binary patch literal 1443 zcmb`G{WsKk6vsdJTdFg%tJav9_E4vzrOaqkWF|A724Nly!y+?N9`YV6wZ}5(X(D_N(?!*n3`|_r0Hc?=PQw&*vnU?QTFY zB_MsH|!j$PP;I}?dppoE_gA(4uc!jV&0!l7_;&p2^pxNo>PEcNJv za5_RT$o2Mf!<+r?&EbHH6nMoTsDOa;mN(wv8RNsHpG)`^ymG-S5By8=l9iVXzN_eG%Xg2@Xeq76tTZ*dGh~Lo9vl;Zfs+W#BydUw zCkZ$o1LqWQO$FC9aKlLl*7x9^0q%0}$OMlp@Kk_jHXOjofdePND+j!A{q!8~Jn+s3 z?~~w@4?egS02}8NuulUA=L~QQfm;MzCGd)XhiftT;+zFO&JVyp2mBww?;QByS_1w! zrQlx%{^cMj0|Bo1FjwY@Q8?Hx0cIPF*@-ZRFpPc#bBw{5@tD(5%sClzIfl8WU~V#u zm5Q;_F!wa$BSpqhN>W@2De?TKWR*!ujY;Yylk_X5#~V!L*Gw~;$%4Q8~Mad z@`-kG?yb$a9cHIApZDVZ^U6Xkp<*4rU82O7%}0jjHlK{id@?-wpN*fCHXyXh(bLt* zPc}H-x0e4E&nQ>y%B-(EL=9}RyC%MyX=upHuFhAk&MLbsF0LP-q`XnH78@fT+pKPW zu72MW`|?8ht^tz$iC}ZwLp4tB;Q49K!QCF3@!iB1qOI=?w z7In!}F~ij(18UYUjnbmC!qKhPo%24?8U1x{7o(+?^Zu0Hx81|FuS?bJ0jgBhEMzf< zCgUq7r2OCB(`XkKcN-TL>u5y#dD6D!)5W?`O5)V^>jb)P)GBdy%t$uUMpf$SNV31$ zb||OojAbvMP?T@$h_ZiFLFVHDmbyMhJF|-_)HX3%m=CDI+ID$0^C>kzxprBW)hw(v zr!Gmda);ICoQyhV_oP5+C%?jcG8v+D@9f?Dk*!BxY}dazmrT@64UrP3hlslANK)bq z$67n83eh}OeW&SV@HG95P|bjfqJ7gw$e+`Hxo!4cx`jdK1bJ>YDSpGKLPZ^1cv$ek zIB?0S<#tX?SJCLWdMd{-ME?$hc7A$zBOdIJ)4!KcAwb=VMov)nK;9z>x~rfT1>dS+ zZ6#`2v@`jgbqq)P22H)Tx2CpmM^o1$B+xT6`(v%5xJ(?j#>Q$+rx_R|7TzDZe{J6q zG1*EcU%tE?!kO%^M;3aM6JN*LAKUVb^xz8-Pxo#jR5(-KBeLJvA@-gxNHx0M-ZJLl z;#JwQoh~9V?`UVo#}{6ka@II>++D@%KqGpMdlQ}?9E*wFcf5(#XQnP$Dk5~%iX^>f z%$y;?M0BLp{O3a(-4A?ewryHrrD%cx#Q^%KY1H zNre$ve+vceSLZcNY4U(RBX&)oZn*Py()h)XkE?PL$!bNb{N5FVI2Y%LKEm%yvpyTP z(1P?z~7YxD~Rf<(a@_y` literal 0 HcmV?d00001 diff --git a/animations/step_05_c/android/app/src/main/res/values-night/styles.xml b/animations/step_05_c/android/app/src/main/res/values-night/styles.xml new file mode 100644 index 0000000000..06952be745 --- /dev/null +++ b/animations/step_05_c/android/app/src/main/res/values-night/styles.xml @@ -0,0 +1,18 @@ + + + + + + + diff --git a/animations/step_05_c/android/app/src/main/res/values/styles.xml b/animations/step_05_c/android/app/src/main/res/values/styles.xml new file mode 100644 index 0000000000..cb1ef88056 --- /dev/null +++ b/animations/step_05_c/android/app/src/main/res/values/styles.xml @@ -0,0 +1,18 @@ + + + + + + + diff --git a/animations/step_05_c/android/app/src/profile/AndroidManifest.xml b/animations/step_05_c/android/app/src/profile/AndroidManifest.xml new file mode 100644 index 0000000000..399f6981d5 --- /dev/null +++ b/animations/step_05_c/android/app/src/profile/AndroidManifest.xml @@ -0,0 +1,7 @@ + + + + diff --git a/animations/step_05_c/android/build.gradle.kts b/animations/step_05_c/android/build.gradle.kts new file mode 100644 index 0000000000..89176ef44e --- /dev/null +++ b/animations/step_05_c/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/animations/step_05_c/android/gradle.properties b/animations/step_05_c/android/gradle.properties new file mode 100644 index 0000000000..f018a61817 --- /dev/null +++ b/animations/step_05_c/android/gradle.properties @@ -0,0 +1,3 @@ +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError +android.useAndroidX=true +android.enableJetifier=true diff --git a/animations/step_05_c/android/gradle/wrapper/gradle-wrapper.properties b/animations/step_05_c/android/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000000..afa1e8eb0a --- /dev/null +++ b/animations/step_05_c/android/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,5 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip diff --git a/animations/step_05_c/android/settings.gradle.kts b/animations/step_05_c/android/settings.gradle.kts new file mode 100644 index 0000000000..a439442c20 --- /dev/null +++ b/animations/step_05_c/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.0" apply false + id("org.jetbrains.kotlin.android") version "1.8.22" apply false +} + +include(":app") diff --git a/animations/step_05_c/ios/.gitignore b/animations/step_05_c/ios/.gitignore new file mode 100644 index 0000000000..7a7f9873ad --- /dev/null +++ b/animations/step_05_c/ios/.gitignore @@ -0,0 +1,34 @@ +**/dgph +*.mode1v3 +*.mode2v3 +*.moved-aside +*.pbxuser +*.perspectivev3 +**/*sync/ +.sconsign.dblite +.tags* +**/.vagrant/ +**/DerivedData/ +Icon? +**/Pods/ +**/.symlinks/ +profile +xcuserdata +**/.generated/ +Flutter/App.framework +Flutter/Flutter.framework +Flutter/Flutter.podspec +Flutter/Generated.xcconfig +Flutter/ephemeral/ +Flutter/app.flx +Flutter/app.zip +Flutter/flutter_assets/ +Flutter/flutter_export_environment.sh +ServiceDefinitions.json +Runner/GeneratedPluginRegistrant.* + +# Exceptions to above rules. +!default.mode1v3 +!default.mode2v3 +!default.pbxuser +!default.perspectivev3 diff --git a/animations/step_05_c/ios/Flutter/AppFrameworkInfo.plist b/animations/step_05_c/ios/Flutter/AppFrameworkInfo.plist new file mode 100644 index 0000000000..7c56964006 --- /dev/null +++ b/animations/step_05_c/ios/Flutter/AppFrameworkInfo.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + App + CFBundleIdentifier + io.flutter.flutter.app + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + App + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1.0 + MinimumOSVersion + 12.0 + + diff --git a/animations/step_05_c/ios/Flutter/Debug.xcconfig b/animations/step_05_c/ios/Flutter/Debug.xcconfig new file mode 100644 index 0000000000..592ceee85b --- /dev/null +++ b/animations/step_05_c/ios/Flutter/Debug.xcconfig @@ -0,0 +1 @@ +#include "Generated.xcconfig" diff --git a/animations/step_05_c/ios/Flutter/Release.xcconfig b/animations/step_05_c/ios/Flutter/Release.xcconfig new file mode 100644 index 0000000000..592ceee85b --- /dev/null +++ b/animations/step_05_c/ios/Flutter/Release.xcconfig @@ -0,0 +1 @@ +#include "Generated.xcconfig" diff --git a/animations/step_05_c/ios/Runner.xcodeproj/project.pbxproj b/animations/step_05_c/ios/Runner.xcodeproj/project.pbxproj new file mode 100644 index 0000000000..faef24d87a --- /dev/null +++ b/animations/step_05_c/ios/Runner.xcodeproj/project.pbxproj @@ -0,0 +1,616 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 54; + objects = { + +/* Begin PBXBuildFile section */ + 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; + 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; + 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; + 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; + 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; + 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; + 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 331C8085294A63A400263BE5 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 97C146E61CF9000F007C117D /* Project object */; + proxyType = 1; + remoteGlobalIDString = 97C146ED1CF9000F007C117D; + remoteInfo = Runner; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 9705A1C41CF9048500538489 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; + 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; + 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; + 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; + 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; + 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; + 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; + 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; + 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 97C146EB1CF9000F007C117D /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 331C8082294A63A400263BE5 /* RunnerTests */ = { + isa = PBXGroup; + children = ( + 331C807B294A618700263BE5 /* RunnerTests.swift */, + ); + path = RunnerTests; + sourceTree = ""; + }; + 9740EEB11CF90186004384FC /* Flutter */ = { + isa = PBXGroup; + children = ( + 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */, + 9740EEB21CF90195004384FC /* Debug.xcconfig */, + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, + 9740EEB31CF90195004384FC /* Generated.xcconfig */, + ); + name = Flutter; + sourceTree = ""; + }; + 97C146E51CF9000F007C117D = { + isa = PBXGroup; + children = ( + 9740EEB11CF90186004384FC /* Flutter */, + 97C146F01CF9000F007C117D /* Runner */, + 97C146EF1CF9000F007C117D /* Products */, + 331C8082294A63A400263BE5 /* RunnerTests */, + ); + sourceTree = ""; + }; + 97C146EF1CF9000F007C117D /* Products */ = { + isa = PBXGroup; + children = ( + 97C146EE1CF9000F007C117D /* Runner.app */, + 331C8081294A63A400263BE5 /* RunnerTests.xctest */, + ); + name = Products; + sourceTree = ""; + }; + 97C146F01CF9000F007C117D /* Runner */ = { + isa = PBXGroup; + children = ( + 97C146FA1CF9000F007C117D /* Main.storyboard */, + 97C146FD1CF9000F007C117D /* Assets.xcassets */, + 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */, + 97C147021CF9000F007C117D /* Info.plist */, + 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */, + 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */, + 74858FAE1ED2DC5600515810 /* AppDelegate.swift */, + 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */, + ); + path = Runner; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 331C8080294A63A400263BE5 /* RunnerTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; + buildPhases = ( + 331C807D294A63A400263BE5 /* Sources */, + 331C807F294A63A400263BE5 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 331C8086294A63A400263BE5 /* PBXTargetDependency */, + ); + name = RunnerTests; + productName = RunnerTests; + productReference = 331C8081294A63A400263BE5 /* RunnerTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; + 97C146ED1CF9000F007C117D /* Runner */ = { + isa = PBXNativeTarget; + buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; + buildPhases = ( + 9740EEB61CF901F6004384FC /* Run Script */, + 97C146EA1CF9000F007C117D /* Sources */, + 97C146EB1CF9000F007C117D /* Frameworks */, + 97C146EC1CF9000F007C117D /* Resources */, + 9705A1C41CF9048500538489 /* Embed Frameworks */, + 3B06AD1E1E4923F5004D2608 /* Thin Binary */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = Runner; + productName = Runner; + productReference = 97C146EE1CF9000F007C117D /* Runner.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 97C146E61CF9000F007C117D /* Project object */ = { + isa = PBXProject; + attributes = { + BuildIndependentTargetsInParallel = YES; + LastUpgradeCheck = 1510; + ORGANIZATIONNAME = ""; + TargetAttributes = { + 331C8080294A63A400263BE5 = { + CreatedOnToolsVersion = 14.0; + TestTargetID = 97C146ED1CF9000F007C117D; + }; + 97C146ED1CF9000F007C117D = { + CreatedOnToolsVersion = 7.3.1; + LastSwiftMigration = 1100; + }; + }; + }; + buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 97C146E51CF9000F007C117D; + productRefGroup = 97C146EF1CF9000F007C117D /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 97C146ED1CF9000F007C117D /* Runner */, + 331C8080294A63A400263BE5 /* RunnerTests */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 331C807F294A63A400263BE5 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 97C146EC1CF9000F007C117D /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */, + 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */, + 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */, + 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", + ); + name = "Thin Binary"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + }; + 9740EEB61CF901F6004384FC /* Run Script */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Run Script"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 331C807D294A63A400263BE5 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 97C146EA1CF9000F007C117D /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */, + 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 331C8086294A63A400263BE5 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 97C146ED1CF9000F007C117D /* Runner */; + targetProxy = 331C8085294A63A400263BE5 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + 97C146FA1CF9000F007C117D /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 97C146FB1CF9000F007C117D /* Base */, + ); + name = Main.storyboard; + sourceTree = ""; + }; + 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 97C147001CF9000F007C117D /* Base */, + ); + name = LaunchScreen.storyboard; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 249021D3217E4FDB00AE95B9 /* Profile */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + SUPPORTED_PLATFORMS = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Profile; + }; + 249021D4217E4FDB00AE95B9 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + ENABLE_BITCODE = NO; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.example.quiz; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; + SWIFT_VERSION = 5.0; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Profile; + }; + 331C8088294A63A400263BE5 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.quiz.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; + }; + name = Debug; + }; + 331C8089294A63A400263BE5 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.quiz.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; + }; + name = Release; + }; + 331C808A294A63A400263BE5 /* Profile */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.quiz.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; + }; + name = Profile; + }; + 97C147031CF9000F007C117D /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 97C147041CF9000F007C117D /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + SUPPORTED_PLATFORMS = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 97C147061CF9000F007C117D /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + ENABLE_BITCODE = NO; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.example.quiz; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Debug; + }; + 97C147071CF9000F007C117D /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + ENABLE_BITCODE = NO; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.example.quiz; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; + SWIFT_VERSION = 5.0; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 331C8088294A63A400263BE5 /* Debug */, + 331C8089294A63A400263BE5 /* Release */, + 331C808A294A63A400263BE5 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 97C147031CF9000F007C117D /* Debug */, + 97C147041CF9000F007C117D /* Release */, + 249021D3217E4FDB00AE95B9 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 97C147061CF9000F007C117D /* Debug */, + 97C147071CF9000F007C117D /* Release */, + 249021D4217E4FDB00AE95B9 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 97C146E61CF9000F007C117D /* Project object */; +} diff --git a/animations/step_05_c/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/animations/step_05_c/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000000..919434a625 --- /dev/null +++ b/animations/step_05_c/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/animations/step_05_c/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/animations/step_05_c/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000000..18d981003d --- /dev/null +++ b/animations/step_05_c/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/animations/step_05_c/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/animations/step_05_c/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings new file mode 100644 index 0000000000..f9b0d7c5ea --- /dev/null +++ b/animations/step_05_c/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings @@ -0,0 +1,8 @@ + + + + + PreviewsEnabled + + + diff --git a/animations/step_05_c/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/animations/step_05_c/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme new file mode 100644 index 0000000000..8e3ca5dfe1 --- /dev/null +++ b/animations/step_05_c/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -0,0 +1,98 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/animations/step_05_c/ios/Runner.xcworkspace/contents.xcworkspacedata b/animations/step_05_c/ios/Runner.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000000..1d526a16ed --- /dev/null +++ b/animations/step_05_c/ios/Runner.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/animations/step_05_c/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/animations/step_05_c/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000000..18d981003d --- /dev/null +++ b/animations/step_05_c/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/animations/step_05_c/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/animations/step_05_c/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings new file mode 100644 index 0000000000..f9b0d7c5ea --- /dev/null +++ b/animations/step_05_c/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings @@ -0,0 +1,8 @@ + + + + + PreviewsEnabled + + + diff --git a/animations/step_05_c/ios/Runner/AppDelegate.swift b/animations/step_05_c/ios/Runner/AppDelegate.swift new file mode 100644 index 0000000000..626664468b --- /dev/null +++ b/animations/step_05_c/ios/Runner/AppDelegate.swift @@ -0,0 +1,13 @@ +import Flutter +import UIKit + +@main +@objc class AppDelegate: FlutterAppDelegate { + override func application( + _ application: UIApplication, + didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? + ) -> Bool { + GeneratedPluginRegistrant.register(with: self) + return super.application(application, didFinishLaunchingWithOptions: launchOptions) + } +} diff --git a/animations/step_05_c/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/animations/step_05_c/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000000..d36b1fab2d --- /dev/null +++ b/animations/step_05_c/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,122 @@ +{ + "images" : [ + { + "size" : "20x20", + "idiom" : "iphone", + "filename" : "Icon-App-20x20@2x.png", + "scale" : "2x" + }, + { + "size" : "20x20", + "idiom" : "iphone", + "filename" : "Icon-App-20x20@3x.png", + "scale" : "3x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "Icon-App-29x29@1x.png", + "scale" : "1x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "Icon-App-29x29@2x.png", + "scale" : "2x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "Icon-App-29x29@3x.png", + "scale" : "3x" + }, + { + "size" : "40x40", + "idiom" : "iphone", + "filename" : "Icon-App-40x40@2x.png", + "scale" : "2x" + }, + { + "size" : "40x40", + "idiom" : "iphone", + "filename" : "Icon-App-40x40@3x.png", + "scale" : "3x" + }, + { + "size" : "60x60", + "idiom" : "iphone", + "filename" : "Icon-App-60x60@2x.png", + "scale" : "2x" + }, + { + "size" : "60x60", + "idiom" : "iphone", + "filename" : "Icon-App-60x60@3x.png", + "scale" : "3x" + }, + { + "size" : "20x20", + "idiom" : "ipad", + "filename" : "Icon-App-20x20@1x.png", + "scale" : "1x" + }, + { + "size" : "20x20", + "idiom" : "ipad", + "filename" : "Icon-App-20x20@2x.png", + "scale" : "2x" + }, + { + "size" : "29x29", + "idiom" : "ipad", + "filename" : "Icon-App-29x29@1x.png", + "scale" : "1x" + }, + { + "size" : "29x29", + "idiom" : "ipad", + "filename" : "Icon-App-29x29@2x.png", + "scale" : "2x" + }, + { + "size" : "40x40", + "idiom" : "ipad", + "filename" : "Icon-App-40x40@1x.png", + "scale" : "1x" + }, + { + "size" : "40x40", + "idiom" : "ipad", + "filename" : "Icon-App-40x40@2x.png", + "scale" : "2x" + }, + { + "size" : "76x76", + "idiom" : "ipad", + "filename" : "Icon-App-76x76@1x.png", + "scale" : "1x" + }, + { + "size" : "76x76", + "idiom" : "ipad", + "filename" : "Icon-App-76x76@2x.png", + "scale" : "2x" + }, + { + "size" : "83.5x83.5", + "idiom" : "ipad", + "filename" : "Icon-App-83.5x83.5@2x.png", + "scale" : "2x" + }, + { + "size" : "1024x1024", + "idiom" : "ios-marketing", + "filename" : "Icon-App-1024x1024@1x.png", + "scale" : "1x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} diff --git a/animations/step_05_c/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png b/animations/step_05_c/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..dc9ada4725e9b0ddb1deab583e5b5102493aa332 GIT binary patch literal 10932 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 literal 0 HcmV?d00001 diff --git a/animations/step_05_c/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png b/animations/step_05_c/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..797d452e458972bab9d994556c8305db4c827017 GIT binary patch literal 406 zcmV;H0crk;P))>cdjpWt&rLJgVp-t?DREyuq1A%0Z4)6_WsQ7{nzjN zo!X zGXV)2i3kcZIL~_j>uIKPK_zib+3T+Nt3Mb&Br)s)UIaA}@p{wDda>7=Q|mGRp7pqY zkJ!7E{MNz$9nOwoVqpFb)}$IP24Wn2JJ=Cw(!`OXJBr45rP>>AQr$6c7slJWvbpNW z@KTwna6d?PP>hvXCcp=4F;=GR@R4E7{4VU^0p4F>v^#A|>07*qoM6N<$f*5nx ACIA2c literal 0 HcmV?d00001 diff --git a/animations/step_05_c/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png b/animations/step_05_c/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..6ed2d933e1120817fe9182483a228007b18ab6ae GIT binary patch literal 450 zcmV;z0X_bSP)iGWQ_5NJQ_~rNh*z)}eT%KUb z`7gNk0#AwF^#0T0?hIa^`~Ck;!}#m+_uT050aTR(J!bU#|IzRL%^UsMS#KsYnTF*!YeDOytlP4VhV?b} z%rz_<=#CPc)tU1MZTq~*2=8~iZ!lSa<{9b@2Jl;?IEV8)=fG217*|@)CCYgFze-x? zIFODUIA>nWKpE+bn~n7;-89sa>#DR>TSlqWk*!2hSN6D~Qb#VqbP~4Fk&m`@1$JGr zXPIdeRE&b2Thd#{MtDK$px*d3-Wx``>!oimf%|A-&-q*6KAH)e$3|6JV%HX{Hig)k suLT-RhftRq8b9;(V=235Wa|I=027H2wCDra;{X5v07*qoM6N<$f;9x^2LJ#7 literal 0 HcmV?d00001 diff --git a/animations/step_05_c/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png b/animations/step_05_c/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..4cd7b0099ca80c806f8fe495613e8d6c69460d76 GIT binary patch literal 282 zcmV+#0p(^bcu7P-R4C8Q z&e;xxFbF_Vrezo%_kH*OKhshZ6BFpG-Y1e10`QXJKbND7AMQ&cMj60B5TNObaZxYybcN07*qoM6N<$g3m;S%K!iX literal 0 HcmV?d00001 diff --git a/animations/step_05_c/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png b/animations/step_05_c/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..fe730945a01f64a61e2235dbe3f45b08f7729182 GIT binary patch literal 462 zcmV;<0WtoGP)-}iV`2<;=$?g5M=KQbZ{F&YRNy7Nn@%_*5{gvDM0aKI4?ESmw z{NnZg)A0R`+4?NF_RZexyVB&^^ZvN!{I28tr{Vje;QNTz`dG&Jz0~Ek&f2;*Z7>B|cg}xYpxEFY+0YrKLF;^Q+-HreN0P{&i zK~zY`?b7ECf-n?@;d<&orQ*Q7KoR%4|C>{W^h6@&01>0SKS`dn{Q}GT%Qj_{PLZ_& zs`MFI#j-(>?bvdZ!8^xTwlY{qA)T4QLbY@j(!YJ7aXJervHy6HaG_2SB`6CC{He}f zHVw(fJWApwPq!6VY7r1w-Fs)@ox~N+q|w~e;JI~C4Vf^@d>Wvj=fl`^u9x9wd9 zR%3*Q+)t%S!MU_`id^@&Y{y7-r98lZX0?YrHlfmwb?#}^1b{8g&KzmkE(L>Z&)179 zp<)v6Y}pRl100G2FL_t(o!|l{-Q-VMg#&MKg7c{O0 z2wJImOS3Gy*Z2Qifdv~JYOp;v+U)a|nLoc7hNH;I$;lzDt$}rkaFw1mYK5_0Q(Sut zvbEloxON7$+HSOgC9Z8ltuC&0OSF!-mXv5caV>#bc3@hBPX@I$58-z}(ZZE!t-aOG zpjNkbau@>yEzH(5Yj4kZiMH32XI!4~gVXNnjAvRx;Sdg^`>2DpUEwoMhTs_st8pKG z(%SHyHdU&v%f36~uERh!bd`!T2dw;z6PrOTQ7Vt*#9F2uHlUVnb#ev_o^fh}Dzmq} zWtlk35}k=?xj28uO|5>>$yXadTUE@@IPpgH`gJ~Ro4>jd1IF|(+IX>8M4Ps{PNvmI zNj4D+XgN83gPt_Gm}`Ybv{;+&yu-C(Grdiahmo~BjG-l&mWM+{e5M1sm&=xduwgM9 z`8OEh`=F3r`^E{n_;%9weN{cf2%7=VzC@cYj+lg>+3|D|_1C@{hcU(DyQG_BvBWe? zvTv``=%b1zrol#=R`JB)>cdjpWt&rLJgVp-t?DREyuq1A%0Z4)6_WsQ7{nzjN zo!X zGXV)2i3kcZIL~_j>uIKPK_zib+3T+Nt3Mb&Br)s)UIaA}@p{wDda>7=Q|mGRp7pqY zkJ!7E{MNz$9nOwoVqpFb)}$IP24Wn2JJ=Cw(!`OXJBr45rP>>AQr$6c7slJWvbpNW z@KTwna6d?PP>hvXCcp=4F;=GR@R4E7{4VU^0p4F>v^#A|>07*qoM6N<$f*5nx ACIA2c literal 0 HcmV?d00001 diff --git a/animations/step_05_c/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png b/animations/step_05_c/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..502f463a9bc882b461c96aadf492d1729e49e725 GIT binary patch literal 586 zcmV-Q0=4~#P)+}#`wDE{8-2Mebf5<{{PqV{TgVcv*r8?UZ3{-|G?_}T*&y;@cqf{ z{Q*~+qr%%p!1pS*_Uicl#q9lc(D`!D`LN62sNwq{oYw(Wmhk)k<@f$!$@ng~_5)Ru z0Z)trIA5^j{DIW^c+vT2%lW+2<(RtE2wR;4O@)Tm`Xr*?A(qYoM}7i5Yxw>D(&6ou zxz!_Xr~yNF+waPe00049Nkl*;a!v6h%{rlvIH#gW3s8p;bFr=l}mRqpW2h zw=OA%hdyL~z+UHOzl0eKhEr$YYOL-c-%Y<)=j?(bzDweB7{b+%_ypvm_cG{SvM=DK zhv{K@m>#Bw>2W$eUI#iU)Wdgs8Y3U+A$Gd&{+j)d)BmGKx+43U_!tik_YlN)>$7G! zhkE!s;%oku3;IwG3U^2kw?z+HM)jB{@zFhK8P#KMSytSthr+4!c(5c%+^UBn`0X*2 zy3(k600_CSZj?O$Qu%&$;|TGUJrptR(HzyIx>5E(2r{eA(<6t3e3I0B)7d6s7?Z5J zZ!rtKvA{MiEBm&KFtoifx>5P^Z=vl)95XJn()aS5%ad(s?4-=Tkis9IGu{`Fy8r+H07*qoM6N<$f20Z)wqMt%V?S?~D#06};F zA3KcL`Wb+>5ObvgQIG&ig8(;V04hz?@cqy3{mSh8o!|U|)cI!1_+!fWH@o*8vh^CU z^ws0;(c$gI+2~q^tO#GDHf@=;DncUw00J^eL_t(&-tE|HQ`%4vfZ;WsBqu-$0nu1R zq^Vj;p$clf^?twn|KHO+IGt^q#a3X?w9dXC@*yxhv&l}F322(8Y1&=P&I}~G@#h6; z1CV9ecD9ZEe87{{NtI*)_aJ<`kJa z?5=RBtFF50s;jQLFil-`)m2wrb=6h(&brpj%nG_U&ut~$?8Rokzxi8zJoWr#2dto5 zOX_URcc<1`Iky+jc;A%Vzx}1QU{2$|cKPom2Vf1{8m`vja4{F>HS?^Nc^rp}xo+Nh zxd}eOm`fm3@MQC1< zIk&aCjb~Yh%5+Yq0`)D;q{#-Uqlv*o+Oor zE!I71Z@ASH3grl8&P^L0WpavHoP|UX4e?!igT`4?AZk$hu*@%6WJ;zDOGlw7kj@ zY5!B-0ft0f?Lgb>C;$Ke07*qoM6N<$f~t1N9smFU literal 0 HcmV?d00001 diff --git a/animations/step_05_c/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png b/animations/step_05_c/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..0ec303439225b78712f49115768196d8d76f6790 GIT binary patch literal 862 zcmV-k1EKthP)20Z)wqMt%V?S?~D#06};F zA3KcL`Wb+>5ObvgQIG&ig8(;V04hz?@cqy3{mSh8o!|U|)cI!1_+!fWH@o*8vh^CU z^ws0;(c$gI+2~q^tO#GDHf@=;DncUw00J^eL_t(&-tE|HQ`%4vfZ;WsBqu-$0nu1R zq^Vj;p$clf^?twn|KHO+IGt^q#a3X?w9dXC@*yxhv&l}F322(8Y1&=P&I}~G@#h6; z1CV9ecD9ZEe87{{NtI*)_aJ<`kJa z?5=RBtFF50s;jQLFil-`)m2wrb=6h(&brpj%nG_U&ut~$?8Rokzxi8zJoWr#2dto5 zOX_URcc<1`Iky+jc;A%Vzx}1QU{2$|cKPom2Vf1{8m`vja4{F>HS?^Nc^rp}xo+Nh zxd}eOm`fm3@MQC1< zIk&aCjb~Yh%5+Yq0`)D;q{#-Uqlv*o+Oor zE!I71Z@ASH3grl8&P^L0WpavHoP|UX4e?!igT`4?AZk$hu*@%6WJ;zDOGlw7kj@ zY5!B-0ft0f?Lgb>C;$Ke07*qoM6N<$f~t1N9smFU literal 0 HcmV?d00001 diff --git a/animations/step_05_c/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png b/animations/step_05_c/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..e9f5fea27c705180eb716271f41b582e76dcbd90 GIT binary patch literal 1674 zcmV;526g#~P){YQnis^a@{&-nmRmq)<&%Mztj67_#M}W?l>kYSliK<%xAp;0j{!}J0!o7b zE>q9${Lb$D&h7k=+4=!ek^n+`0zq>LL1O?lVyea53S5x`Nqqo2YyeuIrQrJj9XjOp z{;T5qbj3}&1vg1VK~#9!?b~^C5-}JC@Pyrv-6dSEqJqT}#j9#dJ@GzT@B8}x zU&J@bBI>f6w6en+CeI)3^kC*U?}X%OD8$Fd$H&LV$H&LV$H&LV#|K5~mLYf|VqzOc zkc7qL~0sOYuM{tG`rYEDV{DWY`Z8&)kW*hc2VkBuY+^Yx&92j&StN}Wp=LD zxoGxXw6f&8sB^u})h@b@z0RBeD`K7RMR9deyL(ZJu#39Z>rT)^>v}Khq8U-IbIvT> z?4pV9qGj=2)TNH3d)=De<+^w;>S7m_eFKTvzeaBeir45xY!^m!FmxnljbSS_3o=g( z->^wC9%qkR{kbGnW8MfFew_o9h3(r55Is`L$8KI@d+*%{=Nx+FXJ98L0PjFIu;rGnnfY zn1R5Qnp<{Jq0M1vX=X&F8gtLmcWv$1*M@4ZfF^9``()#hGTeKeP`1!iED ztNE(TN}M5}3Bbc*d=FIv`DNv&@|C6yYj{sSqUj5oo$#*0$7pu|Dd2TLI>t5%I zIa4Dvr(iayb+5x=j*Vum9&irk)xV1`t509lnPO0%skL8_1c#Xbamh(2@f?4yUI zhhuT5<#8RJhGz4%b$`PJwKPAudsm|at?u;*hGgnA zU1;9gnxVBC)wA(BsB`AW54N{|qmikJR*%x0c`{LGsSfa|NK61pYH(r-UQ4_JXd!Rsz)=k zL{GMc5{h138)fF5CzHEDM>+FqY)$pdN3}Ml+riTgJOLN0F*Vh?{9ESR{SVVg>*>=# zix;VJHPtvFFCRY$Ks*F;VX~%*r9F)W`PmPE9F!(&s#x07n2<}?S{(ygpXgX-&B&OM zONY&BRQ(#%0%jeQs?oJ4P!p*R98>qCy5p8w>_gpuh39NcOlp)(wOoz0sY-Qz55eB~ z7OC-fKBaD1sE3$l-6QgBJO!n?QOTza`!S_YK z_v-lm^7{VO^8Q@M_^8F)09Ki6%=s?2_5eupee(w1FB%aqSweusQ-T+CH0Xt{` zFjMvW{@C&TB)k25()nh~_yJ9coBRL(0oO@HK~z}7?bm5j;y@69;bvlHb2tf!$ReA~x{22wTq550 z?f?Hnw(;m3ip30;QzdV~7pi!wyMYhDtXW#cO7T>|f=bdFhu+F!zMZ2UFj;GUKX7tI z;hv3{q~!*pMj75WP_c}>6)IWvg5_yyg<9Op()eD1hWC19M@?_9_MHec{Z8n3FaF{8 z;u`Mw0ly(uE>*CgQYv{be6ab2LWhlaH1^iLIM{olnag$78^Fd}%dR7;JECQ+hmk|o z!u2&!3MqPfP5ChDSkFSH8F2WVOEf0(E_M(JL17G}Y+fg0_IuW%WQ zG(mG&u?|->YSdk0;8rc{yw2@2Z&GA}z{Wb91Ooz9VhA{b2DYE7RmG zjL}?eq#iX%3#k;JWMx_{^2nNax`xPhByFiDX+a7uTGU|otOvIAUy|dEKkXOm-`aWS z27pUzD{a)Ct<6p{{3)+lq@i`t@%>-wT4r?*S}k)58e09WZYP0{{R3FC5Sl00039P)t-s|Ns9~ z#rP?<_5oL$Q^olD{r_0T`27C={r>*`|Nj71npVa5OTzc(_WfbW_({R{p56NV{r*M2 z_xt?)2V0#0NsfV0u>{42ctGP(8vQj-Btk1n|O0ZD=YLwd&R{Ko41Gr9H= zY@z@@bOAMB5Ltl$E>bJJ{>JP30ZxkmI%?eW{k`b?Wy<&gOo;dS`~CR$Vwb@XWtR|N zi~t=w02?-0&j0TD{>bb6sNwsK*!p?V`RMQUl(*DVjk-9Cx+-z1KXab|Ka2oXhX5f% z`$|e!000AhNklrxs)5QTeTVRiEmz~MKK1WAjCw(c-JK6eox;2O)?`? zTG`AHia671e^vgmp!llKp|=5sVHk#C7=~epA~VAf-~%aPC=%Qw01h8mnSZ|p?hz91 z7p83F3%LVu9;S$tSI$C^%^yud1dfTM_6p2|+5Ejp$bd`GDvbR|xit>i!ZD&F>@CJrPmu*UjD&?DfZs=$@e3FQA(vNiU+$A*%a} z?`XcG2jDxJ_ZQ#Md`H{4Lpf6QBDp81_KWZ6Tk#yCy1)32zO#3<7>b`eT7UyYH1eGz z;O(rH$=QR*L%%ZcBpc=eGua?N55nD^K(8<#gl2+pN_j~b2MHs4#mcLmv%DkspS-3< zpI1F=^9siI0s-;IN_IrA;5xm~3?3!StX}pUv0vkxMaqm+zxrg7X7(I&*N~&dEd0kD z-FRV|g=|QuUsuh>-xCI}vD2imzYIOIdcCVV=$Bz@*u0+Bs<|L^)32nN*=wu3n%Ynw z@1|eLG>!8ruU1pFXUfb`j>(=Gy~?Rn4QJ-c3%3T|(Frd!bI`9u&zAnyFYTqlG#&J7 zAkD(jpw|oZLNiA>;>hgp1KX7-wxC~31II47gc zHcehD6Uxlf%+M^^uN5Wc*G%^;>D5qT{>=uxUhX%WJu^Z*(_Wq9y}npFO{Hhb>s6<9 zNi0pHXWFaVZnb)1+RS&F)xOv6&aeILcI)`k#0YE+?e)5&#r7J#c`3Z7x!LpTc01dx zrdC3{Z;joZ^KN&))zB_i)I9fWedoN>Zl-6_Iz+^G&*ak2jpF07*qoM6N<$f;w%0(f|Me literal 0 HcmV?d00001 diff --git a/animations/step_05_c/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png b/animations/step_05_c/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..0467bf12aa4d28f374bb26596605a46dcbb3e7c8 GIT binary patch literal 1418 zcmV;51$Fv~P)q zKfU)WzW*n(@|xWGCA9ScMt*e9`2kdxPQ&&>|-UCa7_51w+ zLUsW@ZzZSW0y$)Hp~e9%PvP|a03ks1`~K?q{u;6NC8*{AOqIUq{CL&;p56Lf$oQGq z^={4hPQv)y=I|4n+?>7Fim=dxt1 z2H+Dm+1+fh+IF>G0SjJMkQQre1x4|G*Z==(Ot&kCnUrL4I(rf(ucITwmuHf^hXiJT zkdTm&kdTm&kdTm&kdP`esgWG0BcWCVkVZ&2dUwN`cgM8QJb`Z7Z~e<&Yj2(}>Tmf` zm1{eLgw!b{bXkjWbF%dTkTZEJWyWOb##Lfw4EK2}<0d6%>AGS{po>WCOy&f$Tay_> z?NBlkpo@s-O;0V%Y_Xa-G#_O08q5LR*~F%&)}{}r&L%Sbs8AS4t7Y0NEx*{soY=0MZExqA5XHQkqi#4gW3 zqODM^iyZl;dvf)-bOXtOru(s)Uc7~BFx{w-FK;2{`VA?(g&@3z&bfLFyctOH!cVsF z7IL=fo-qBndRUm;kAdXR4e6>k-z|21AaN%ubeVrHl*<|s&Ax@W-t?LR(P-24A5=>a z*R9#QvjzF8n%@1Nw@?CG@6(%>+-0ASK~jEmCV|&a*7-GKT72W<(TbSjf)&Eme6nGE z>Gkj4Sq&2e+-G%|+NM8OOm5zVl9{Z8Dd8A5z3y8mZ=4Bv4%>as_{9cN#bm~;h>62( zdqY93Zy}v&c4n($Vv!UybR8ocs7#zbfX1IY-*w~)p}XyZ-SFC~4w>BvMVr`dFbelV{lLL0bx7@*ZZdebr3`sP;? zVImji)kG)(6Juv0lz@q`F!k1FE;CQ(D0iG$wchPbKZQELlsZ#~rt8#90Y_Xh&3U-< z{s<&cCV_1`^TD^ia9!*mQDq& zn2{r`j};V|uV%_wsP!zB?m%;FeaRe+X47K0e+KE!8C{gAWF8)lCd1u1%~|M!XNRvw zvtqy3iz0WSpWdhn6$hP8PaRBmp)q`#PCA`Vd#Tc$@f1tAcM>f_I@bC)hkI9|o(Iqv zo}Piadq!j76}004RBio<`)70k^`K1NK)q>w?p^C6J2ZC!+UppiK6&y3Kmbv&O!oYF z34$0Z;QO!JOY#!`qyGH<3Pd}Pt@q*A0V=3SVtWKRR8d8Z&@)3qLPA19LPA19LPEUC YUoZo%k(ykuW&i*H07*qoM6N<$f+CH{y8r+H literal 0 HcmV?d00001 diff --git a/animations/step_05_c/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json b/animations/step_05_c/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json new file mode 100644 index 0000000000..0bedcf2fd4 --- /dev/null +++ b/animations/step_05_c/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "LaunchImage.png", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "LaunchImage@2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "filename" : "LaunchImage@3x.png", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} diff --git a/animations/step_05_c/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png b/animations/step_05_c/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png new file mode 100644 index 0000000000000000000000000000000000000000..9da19eacad3b03bb08bbddbbf4ac48dd78b3d838 GIT binary patch literal 68 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx0wlM}@Gt=>Zci7-kcv6Uzs@r-FtIZ-&5|)J Q1PU{Fy85}Sb4q9e0B4a5jsO4v literal 0 HcmV?d00001 diff --git a/animations/step_05_c/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png b/animations/step_05_c/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..9da19eacad3b03bb08bbddbbf4ac48dd78b3d838 GIT binary patch literal 68 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx0wlM}@Gt=>Zci7-kcv6Uzs@r-FtIZ-&5|)J Q1PU{Fy85}Sb4q9e0B4a5jsO4v literal 0 HcmV?d00001 diff --git a/animations/step_05_c/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png b/animations/step_05_c/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..9da19eacad3b03bb08bbddbbf4ac48dd78b3d838 GIT binary patch literal 68 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx0wlM}@Gt=>Zci7-kcv6Uzs@r-FtIZ-&5|)J Q1PU{Fy85}Sb4q9e0B4a5jsO4v literal 0 HcmV?d00001 diff --git a/animations/step_05_c/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md b/animations/step_05_c/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md new file mode 100644 index 0000000000..89c2725b70 --- /dev/null +++ b/animations/step_05_c/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md @@ -0,0 +1,5 @@ +# Launch Screen Assets + +You can customize the launch screen with your own desired assets by replacing the image files in this directory. + +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. \ No newline at end of file diff --git a/animations/step_05_c/ios/Runner/Base.lproj/LaunchScreen.storyboard b/animations/step_05_c/ios/Runner/Base.lproj/LaunchScreen.storyboard new file mode 100644 index 0000000000..f2e259c7c9 --- /dev/null +++ b/animations/step_05_c/ios/Runner/Base.lproj/LaunchScreen.storyboard @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/animations/step_05_c/ios/Runner/Base.lproj/Main.storyboard b/animations/step_05_c/ios/Runner/Base.lproj/Main.storyboard new file mode 100644 index 0000000000..f3c28516fb --- /dev/null +++ b/animations/step_05_c/ios/Runner/Base.lproj/Main.storyboard @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/animations/step_05_c/ios/Runner/Info.plist b/animations/step_05_c/ios/Runner/Info.plist new file mode 100644 index 0000000000..1a0d38e408 --- /dev/null +++ b/animations/step_05_c/ios/Runner/Info.plist @@ -0,0 +1,49 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleDisplayName + Quiz + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + quiz + CFBundlePackageType + APPL + CFBundleShortVersionString + $(FLUTTER_BUILD_NAME) + CFBundleSignature + ???? + CFBundleVersion + $(FLUTTER_BUILD_NUMBER) + LSRequiresIPhoneOS + + UILaunchStoryboardName + LaunchScreen + UIMainStoryboardFile + Main + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + CADisableMinimumFrameDurationOnPhone + + UIApplicationSupportsIndirectInputEvents + + + diff --git a/animations/step_05_c/ios/Runner/Runner-Bridging-Header.h b/animations/step_05_c/ios/Runner/Runner-Bridging-Header.h new file mode 100644 index 0000000000..308a2a560b --- /dev/null +++ b/animations/step_05_c/ios/Runner/Runner-Bridging-Header.h @@ -0,0 +1 @@ +#import "GeneratedPluginRegistrant.h" diff --git a/animations/step_05_c/ios/RunnerTests/RunnerTests.swift b/animations/step_05_c/ios/RunnerTests/RunnerTests.swift new file mode 100644 index 0000000000..86a7c3b1b6 --- /dev/null +++ b/animations/step_05_c/ios/RunnerTests/RunnerTests.swift @@ -0,0 +1,12 @@ +import Flutter +import UIKit +import XCTest + +class RunnerTests: XCTestCase { + + func testExample() { + // If you add code to the Runner application, consider adding tests here. + // See https://developer.apple.com/documentation/xctest for more information about using XCTest. + } + +} diff --git a/animations/step_05_c/lib/flip_effect.dart b/animations/step_05_c/lib/flip_effect.dart new file mode 100644 index 0000000000..953c479ae9 --- /dev/null +++ b/animations/step_05_c/lib/flip_effect.dart @@ -0,0 +1,85 @@ +import 'package:flutter/widgets.dart'; +import 'dart:math' as math; + +class CardFlipEffect extends StatefulWidget { + final Widget child; + final Duration duration; + final double delayAmount; + + const CardFlipEffect({ + super.key, + required this.child, + required this.duration, + required this.delayAmount, + }); + + @override + State createState() => _CardFlipEffectState(); +} + +class _CardFlipEffectState extends State + with SingleTickerProviderStateMixin { + late final AnimationController _animationController; + Widget? _previousChild; + late final Animation _animationWithDelay; + + @override + void initState() { + super.initState(); + + _animationController = AnimationController( + vsync: this, + duration: widget.duration * (widget.delayAmount + 1), + ); + + _animationController.addListener(() { + if (_animationController.value == 1) { + _animationController.reset(); + } + }); + + _animationWithDelay = TweenSequence([ + if (widget.delayAmount > 0) + TweenSequenceItem( + tween: ConstantTween(0.0), + weight: widget.delayAmount, + ), + TweenSequenceItem(tween: Tween(begin: 0.0, end: 1.0), weight: 1.0), + ]).animate(_animationController); + } + + @override + void didUpdateWidget(covariant CardFlipEffect oldWidget) { + super.didUpdateWidget(oldWidget); + + if (widget.child.key != oldWidget.child.key) { + _handleChildChanged(widget.child, oldWidget.child); + } + } + + void _handleChildChanged(Widget newChild, Widget previousChild) { + _previousChild = previousChild; + _animationController.forward(); + } + + @override + Widget build(BuildContext context) { + return AnimatedBuilder( + animation: _animationWithDelay, + builder: (context, child) { + return Transform( + alignment: Alignment.center, + transform: + Matrix4.identity()..rotateX(_animationWithDelay.value * math.pi), + child: + _animationController.isAnimating + ? _animationWithDelay.value < 0.5 + ? _previousChild + : Transform.flip(flipY: true, child: widget.child) + : widget.child, + ); + }, + child: widget.child, + ); + } +} diff --git a/animations/step_05_c/lib/home_screen.dart b/animations/step_05_c/lib/home_screen.dart new file mode 100644 index 0000000000..e01ea3d1c8 --- /dev/null +++ b/animations/step_05_c/lib/home_screen.dart @@ -0,0 +1,41 @@ +import 'package:flutter/material.dart'; +import 'question_screen.dart'; + +class HomeScreen extends StatelessWidget { + const HomeScreen({super.key}); + + @override + Widget build(BuildContext context) { + return Scaffold( + body: Center( + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + Text('✏️', style: Theme.of(context).textTheme.displayLarge), + Text( + 'Flutter Quiz', + style: Theme.of(context).textTheme.displayLarge!.copyWith( + fontWeight: FontWeight.w700, + color: Theme.of(context).colorScheme.onPrimaryFixedVariant, + ), + ), + ElevatedButton( + onPressed: () { + // Show the question screen to start the game + Navigator.push( + context, + MaterialPageRoute( + builder: (context) { + return const QuestionScreen(); + }, + ), + ); + }, + child: const Text('New Game'), + ), + ], + ), + ), + ); + } +} diff --git a/animations/step_05_c/lib/main.dart b/animations/step_05_c/lib/main.dart new file mode 100644 index 0000000000..9ad4855719 --- /dev/null +++ b/animations/step_05_c/lib/main.dart @@ -0,0 +1,33 @@ +import 'package:animations/animations.dart'; +import 'package:flutter/material.dart'; + +import 'home_screen.dart'; + +void main() { + runApp(MainApp()); +} + +class MainApp extends StatelessWidget { + const MainApp({super.key}); + + @override + Widget build(BuildContext context) { + return MaterialApp( + debugShowCheckedModeBanner: false, + theme: ThemeData( + colorScheme: ColorScheme.fromSeed(seedColor: Colors.blue), + useMaterial3: true, + pageTransitionsTheme: PageTransitionsTheme( + builders: { + TargetPlatform.android: PredictiveBackPageTransitionsBuilder(), + TargetPlatform.iOS: FadeThroughPageTransitionsBuilder(), + TargetPlatform.macOS: FadeThroughPageTransitionsBuilder(), + TargetPlatform.windows: FadeThroughPageTransitionsBuilder(), + TargetPlatform.linux: FadeThroughPageTransitionsBuilder(), + }, + ), + ), + home: HomeScreen(), + ); + } +} diff --git a/animations/step_05_c/lib/model.dart b/animations/step_05_c/lib/model.dart new file mode 100644 index 0000000000..56666d11dc --- /dev/null +++ b/animations/step_05_c/lib/model.dart @@ -0,0 +1,52 @@ +import 'dart:math' as math; + +class Question { + final String question; + final List possibleAnswers; + final int correctAnswer; + Question(this.question, this.possibleAnswers, this.correctAnswer); +} + +class QuestionBank { + final List _questions = _createQuestions(); + + bool get hasNextQuestion => _questions.isNotEmpty; + int get remainingQuestions => _questions.length; + + Question? getRandomQuestion() { + if (_questions.isEmpty) { + return null; + } + + var i = math.Random().nextInt(_questions.length); + var question = _questions[i]; + + _questions.removeAt(i); + return question; + } +} + +List _createQuestions() { + return [ + Question( + 'What class used to create custom explicit animations in Flutter?', + ['AnimationController', 'AnimatedWidget', 'AnimatedBuilder', 'Tween'], + 0, + ), + Question( + 'Which widget is used to rebuild its child whenever an animation changes?', + [ + 'AnimatedContainer', + 'AnimatedBuilder', + 'AnimatedSwitcher', + 'AnimatedOpacity', + ], + 1, + ), + Question( + 'What class is used to define the start and end values for an animation?', + ['Tween', 'Curve', 'AnimationController', 'AnimatedWidget'], + 0, + ), + ]; +} diff --git a/animations/step_05_c/lib/question_screen.dart b/animations/step_05_c/lib/question_screen.dart new file mode 100644 index 0000000000..ab3545a56a --- /dev/null +++ b/animations/step_05_c/lib/question_screen.dart @@ -0,0 +1,197 @@ +import 'package:animations/animations.dart'; +import 'package:flutter/material.dart'; +import 'flip_effect.dart'; +import 'scoreboard.dart'; +import 'view_model.dart'; + +class QuestionScreen extends StatefulWidget { + const QuestionScreen({super.key}); + + @override + State createState() => _QuestionScreenState(); +} + +class _QuestionScreenState extends State { + late final QuizViewModel viewModel = QuizViewModel( + onGameOver: _handleGameOver, + ); + + @override + Widget build(BuildContext context) { + return ListenableBuilder( + listenable: viewModel, + builder: (context, child) { + return Scaffold( + appBar: AppBar( + actions: [ + TextButton( + onPressed: + viewModel.hasNextQuestion && viewModel.didAnswerQuestion + ? () { + viewModel.getNextQuestion(); + } + : null, + child: const Text('Next'), + ), + ], + ), + body: Center( + child: Column( + children: [ + QuestionCard(question: viewModel.currentQuestion?.question), + Spacer(), + AnswerCards( + onTapped: (index) { + viewModel.checkAnswer(index); + }, + answers: viewModel.currentQuestion?.possibleAnswers ?? [], + correctAnswer: + viewModel.didAnswerQuestion + ? viewModel.currentQuestion?.correctAnswer + : null, + ), + StatusBar(viewModel: viewModel), + ], + ), + ), + ); + }, + ); + } + + void _handleGameOver() { + showDialog( + barrierDismissible: false, + context: context, + builder: (context) { + return AlertDialog( + title: Text('Game Over!'), + content: Text('Score: ${viewModel.score}'), + actions: [ + TextButton( + onPressed: () { + Navigator.popUntil(context, (route) => route.isFirst); + }, + child: Text('OK'), + ), + ], + ); + }, + ); + } +} + +class QuestionCard extends StatelessWidget { + final String? question; + + const QuestionCard({required this.question, super.key}); + + @override + Widget build(BuildContext context) { + return PageTransitionSwitcher( + duration: const Duration(milliseconds: 200), + layoutBuilder: (List entries) { + return Stack( + alignment: Alignment.topCenter, + children: [...entries], + ); + }, + transitionBuilder: (Widget child, animation, secondaryAnimation) { + return FadeThroughTransition( + animation: animation, + secondaryAnimation: secondaryAnimation, + child: child, + ); + }, + child: Card( + key: ValueKey(question), + elevation: 4, + child: Padding( + padding: const EdgeInsets.all(16.0), + child: Text( + question ?? "", + style: Theme.of(context).textTheme.displaySmall, + ), + ), + ), + ); + } +} + +class AnswerCards extends StatelessWidget { + final List answers; + final ValueChanged onTapped; + final int? correctAnswer; + + const AnswerCards({ + required this.answers, + required this.onTapped, + required this.correctAnswer, + super.key, + }); + + @override + Widget build(BuildContext context) { + return GridView.count( + shrinkWrap: true, + crossAxisCount: 2, + childAspectRatio: 5 / 2, + children: List.generate(answers.length, (index) { + var color = Theme.of(context).colorScheme.primaryContainer; + if (correctAnswer == index) { + color = Theme.of(context).colorScheme.tertiaryContainer; + } + + return CardFlipEffect( + delayAmount: index.toDouble() / 2, + duration: const Duration(milliseconds: 300), + child: Card.filled( + key: ValueKey(answers[index]), + color: color, + elevation: 2, + margin: const EdgeInsets.all(8), + clipBehavior: Clip.hardEdge, + child: InkWell( + onTap: () => onTapped(index), + child: Padding( + padding: const EdgeInsets.all(16.0), + child: Center( + child: Text( + answers.length > index ? answers[index] : "", + style: Theme.of(context).textTheme.titleMedium, + overflow: TextOverflow.clip, + ), + ), + ), + ), + ), + ); + }), + ); + } +} + +class StatusBar extends StatelessWidget { + final QuizViewModel viewModel; + + const StatusBar({required this.viewModel, super.key}); + + @override + Widget build(BuildContext context) { + return Card( + elevation: 4, + child: Padding( + padding: EdgeInsets.all(8.0), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceAround, + children: [ + Scoreboard( + score: viewModel.score, + totalQuestions: viewModel.totalQuestions, + ), + ], + ), + ), + ); + } +} diff --git a/animations/step_05_c/lib/scoreboard.dart b/animations/step_05_c/lib/scoreboard.dart new file mode 100644 index 0000000000..765711fe87 --- /dev/null +++ b/animations/step_05_c/lib/scoreboard.dart @@ -0,0 +1,56 @@ +import 'package:flutter/material.dart'; + +class Scoreboard extends StatelessWidget { + final int score; + final int totalQuestions; + + const Scoreboard({ + super.key, + required this.score, + required this.totalQuestions, + }); + + @override + Widget build(BuildContext context) { + return Padding( + padding: const EdgeInsets.all(8.0), + child: Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + for (var i = 0; i < totalQuestions; i++) + AnimatedStar(isActive: score > i), + ], + ), + ); + } +} + +class AnimatedStar extends StatelessWidget { + final bool isActive; + final Duration _duration = const Duration(milliseconds: 1000); + final Color _deactivatedColor = Colors.grey.shade400; + final Color _activatedColor = Colors.yellow.shade700; + final Curve _curve = Curves.elasticOut; + + AnimatedStar({super.key, required this.isActive}); + + @override + Widget build(BuildContext context) { + return AnimatedScale( + scale: isActive ? 1.0 : 0.5, + curve: _curve, + duration: _duration, + child: TweenAnimationBuilder( + curve: _curve, + duration: _duration, + tween: ColorTween( + begin: _deactivatedColor, + end: isActive ? _activatedColor : _deactivatedColor, + ), + builder: (context, value, child) { + return Icon(Icons.star, size: 50, color: value); + }, + ), + ); + } +} diff --git a/animations/step_05_c/lib/view_model.dart b/animations/step_05_c/lib/view_model.dart new file mode 100644 index 0000000000..84fc5f218b --- /dev/null +++ b/animations/step_05_c/lib/view_model.dart @@ -0,0 +1,43 @@ +import 'package:flutter/cupertino.dart'; +import 'model.dart'; + +class QuizViewModel extends ChangeNotifier { + final QuestionBank _questionBank = QuestionBank(); + final VoidCallback onGameOver; + late final int totalQuestions; + Question? currentQuestion; + int answeredQuestionCount = 0; + int score = 0; + bool didAnswerQuestion = false; + bool get hasNextQuestion => answeredQuestionCount < totalQuestions; + + QuizViewModel({required this.onGameOver}) { + totalQuestions = _questionBank.remainingQuestions; + getNextQuestion(); + } + + void getNextQuestion() { + if (_questionBank.hasNextQuestion) { + currentQuestion = _questionBank.getRandomQuestion(); + answeredQuestionCount++; + } + + didAnswerQuestion = false; + + notifyListeners(); + } + + void checkAnswer(int selectedIndex) { + if (!didAnswerQuestion && currentQuestion?.correctAnswer == selectedIndex) { + score++; + } + + didAnswerQuestion = true; + + if (!_questionBank.hasNextQuestion) { + onGameOver(); + } + + notifyListeners(); + } +} diff --git a/animations/step_05_c/linux/.gitignore b/animations/step_05_c/linux/.gitignore new file mode 100644 index 0000000000..d3896c9844 --- /dev/null +++ b/animations/step_05_c/linux/.gitignore @@ -0,0 +1 @@ +flutter/ephemeral diff --git a/animations/step_05_c/linux/CMakeLists.txt b/animations/step_05_c/linux/CMakeLists.txt new file mode 100644 index 0000000000..7caf822271 --- /dev/null +++ b/animations/step_05_c/linux/CMakeLists.txt @@ -0,0 +1,128 @@ +# Project-level configuration. +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# The name of the executable created for the application. Change this to change +# the on-disk name of your application. +set(BINARY_NAME "quiz") +# The unique GTK application identifier for this application. See: +# https://wiki.gnome.org/HowDoI/ChooseApplicationID +set(APPLICATION_ID "com.example.quiz") + +# Explicitly opt in to modern CMake behaviors to avoid warnings with recent +# versions of CMake. +cmake_policy(SET CMP0063 NEW) + +# Load bundled libraries from the lib/ directory relative to the binary. +set(CMAKE_INSTALL_RPATH "$ORIGIN/lib") + +# Root filesystem for cross-building. +if(FLUTTER_TARGET_PLATFORM_SYSROOT) + set(CMAKE_SYSROOT ${FLUTTER_TARGET_PLATFORM_SYSROOT}) + set(CMAKE_FIND_ROOT_PATH ${CMAKE_SYSROOT}) + set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) + set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY) + set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) + set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) +endif() + +# Define build configuration options. +if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) + set(CMAKE_BUILD_TYPE "Debug" CACHE + STRING "Flutter build mode" FORCE) + set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS + "Debug" "Profile" "Release") +endif() + +# Compilation settings that should be applied to most targets. +# +# Be cautious about adding new options here, as plugins use this function by +# default. In most cases, you should add new options to specific targets instead +# of modifying this function. +function(APPLY_STANDARD_SETTINGS TARGET) + target_compile_features(${TARGET} PUBLIC cxx_std_14) + target_compile_options(${TARGET} PRIVATE -Wall -Werror) + target_compile_options(${TARGET} PRIVATE "$<$>:-O3>") + target_compile_definitions(${TARGET} PRIVATE "$<$>:NDEBUG>") +endfunction() + +# Flutter library and tool build rules. +set(FLUTTER_MANAGED_DIR "${CMAKE_CURRENT_SOURCE_DIR}/flutter") +add_subdirectory(${FLUTTER_MANAGED_DIR}) + +# System-level dependencies. +find_package(PkgConfig REQUIRED) +pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) + +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") + +# Run the Flutter tool portions of the build. This must not be removed. +add_dependencies(${BINARY_NAME} flutter_assemble) + +# Only the install-generated bundle's copy of the executable will launch +# correctly, since the resources must in the right relative locations. To avoid +# people trying to run the unbundled copy, put it in a subdirectory instead of +# the default top-level location. +set_target_properties(${BINARY_NAME} + PROPERTIES + RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/intermediates_do_not_run" +) + + +# Generated plugin build rules, which manage building the plugins and adding +# them to the application. +include(flutter/generated_plugins.cmake) + + +# === Installation === +# By default, "installing" just makes a relocatable bundle in the build +# directory. +set(BUILD_BUNDLE_DIR "${PROJECT_BINARY_DIR}/bundle") +if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) + set(CMAKE_INSTALL_PREFIX "${BUILD_BUNDLE_DIR}" CACHE PATH "..." FORCE) +endif() + +# Start with a clean build bundle directory every time. +install(CODE " + file(REMOVE_RECURSE \"${BUILD_BUNDLE_DIR}/\") + " COMPONENT Runtime) + +set(INSTALL_BUNDLE_DATA_DIR "${CMAKE_INSTALL_PREFIX}/data") +set(INSTALL_BUNDLE_LIB_DIR "${CMAKE_INSTALL_PREFIX}/lib") + +install(TARGETS ${BINARY_NAME} RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_ICU_DATA_FILE}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) + +foreach(bundled_library ${PLUGIN_BUNDLED_LIBRARIES}) + install(FILES "${bundled_library}" + DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) +endforeach(bundled_library) + +# Copy the native assets provided by the build.dart from all packages. +set(NATIVE_ASSETS_DIR "${PROJECT_BUILD_DIR}native_assets/linux/") +install(DIRECTORY "${NATIVE_ASSETS_DIR}" + DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) + +# Fully re-copy the assets directory on each build to avoid having stale files +# from a previous install. +set(FLUTTER_ASSET_DIR_NAME "flutter_assets") +install(CODE " + file(REMOVE_RECURSE \"${INSTALL_BUNDLE_DATA_DIR}/${FLUTTER_ASSET_DIR_NAME}\") + " COMPONENT Runtime) +install(DIRECTORY "${PROJECT_BUILD_DIR}/${FLUTTER_ASSET_DIR_NAME}" + DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" COMPONENT Runtime) + +# Install the AOT library on non-Debug builds only. +if(NOT CMAKE_BUILD_TYPE MATCHES "Debug") + install(FILES "${AOT_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) +endif() diff --git a/animations/step_05_c/linux/flutter/CMakeLists.txt b/animations/step_05_c/linux/flutter/CMakeLists.txt new file mode 100644 index 0000000000..d5bd01648a --- /dev/null +++ b/animations/step_05_c/linux/flutter/CMakeLists.txt @@ -0,0 +1,88 @@ +# This file controls Flutter-level build steps. It should not be edited. +cmake_minimum_required(VERSION 3.10) + +set(EPHEMERAL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/ephemeral") + +# Configuration provided via flutter tool. +include(${EPHEMERAL_DIR}/generated_config.cmake) + +# TODO: Move the rest of this into files in ephemeral. See +# https://github.com/flutter/flutter/issues/57146. + +# Serves the same purpose as list(TRANSFORM ... PREPEND ...), +# which isn't available in 3.10. +function(list_prepend LIST_NAME PREFIX) + set(NEW_LIST "") + foreach(element ${${LIST_NAME}}) + list(APPEND NEW_LIST "${PREFIX}${element}") + endforeach(element) + set(${LIST_NAME} "${NEW_LIST}" PARENT_SCOPE) +endfunction() + +# === Flutter Library === +# System-level dependencies. +find_package(PkgConfig REQUIRED) +pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) +pkg_check_modules(GLIB REQUIRED IMPORTED_TARGET glib-2.0) +pkg_check_modules(GIO REQUIRED IMPORTED_TARGET gio-2.0) + +set(FLUTTER_LIBRARY "${EPHEMERAL_DIR}/libflutter_linux_gtk.so") + +# Published to parent scope for install step. +set(FLUTTER_LIBRARY ${FLUTTER_LIBRARY} PARENT_SCOPE) +set(FLUTTER_ICU_DATA_FILE "${EPHEMERAL_DIR}/icudtl.dat" PARENT_SCOPE) +set(PROJECT_BUILD_DIR "${PROJECT_DIR}/build/" PARENT_SCOPE) +set(AOT_LIBRARY "${PROJECT_DIR}/build/lib/libapp.so" PARENT_SCOPE) + +list(APPEND FLUTTER_LIBRARY_HEADERS + "fl_basic_message_channel.h" + "fl_binary_codec.h" + "fl_binary_messenger.h" + "fl_dart_project.h" + "fl_engine.h" + "fl_json_message_codec.h" + "fl_json_method_codec.h" + "fl_message_codec.h" + "fl_method_call.h" + "fl_method_channel.h" + "fl_method_codec.h" + "fl_method_response.h" + "fl_plugin_registrar.h" + "fl_plugin_registry.h" + "fl_standard_message_codec.h" + "fl_standard_method_codec.h" + "fl_string_codec.h" + "fl_value.h" + "fl_view.h" + "flutter_linux.h" +) +list_prepend(FLUTTER_LIBRARY_HEADERS "${EPHEMERAL_DIR}/flutter_linux/") +add_library(flutter INTERFACE) +target_include_directories(flutter INTERFACE + "${EPHEMERAL_DIR}" +) +target_link_libraries(flutter INTERFACE "${FLUTTER_LIBRARY}") +target_link_libraries(flutter INTERFACE + PkgConfig::GTK + PkgConfig::GLIB + PkgConfig::GIO +) +add_dependencies(flutter flutter_assemble) + +# === Flutter tool backend === +# _phony_ is a non-existent file to force this command to run every time, +# since currently there's no way to get a full input/output list from the +# flutter tool. +add_custom_command( + OUTPUT ${FLUTTER_LIBRARY} ${FLUTTER_LIBRARY_HEADERS} + ${CMAKE_CURRENT_BINARY_DIR}/_phony_ + COMMAND ${CMAKE_COMMAND} -E env + ${FLUTTER_TOOL_ENVIRONMENT} + "${FLUTTER_ROOT}/packages/flutter_tools/bin/tool_backend.sh" + ${FLUTTER_TARGET_PLATFORM} ${CMAKE_BUILD_TYPE} + VERBATIM +) +add_custom_target(flutter_assemble DEPENDS + "${FLUTTER_LIBRARY}" + ${FLUTTER_LIBRARY_HEADERS} +) diff --git a/animations/step_05_c/linux/flutter/generated_plugin_registrant.cc b/animations/step_05_c/linux/flutter/generated_plugin_registrant.cc new file mode 100644 index 0000000000..e71a16d23d --- /dev/null +++ b/animations/step_05_c/linux/flutter/generated_plugin_registrant.cc @@ -0,0 +1,11 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#include "generated_plugin_registrant.h" + + +void fl_register_plugins(FlPluginRegistry* registry) { +} diff --git a/animations/step_05_c/linux/flutter/generated_plugin_registrant.h b/animations/step_05_c/linux/flutter/generated_plugin_registrant.h new file mode 100644 index 0000000000..e0f0a47bc0 --- /dev/null +++ b/animations/step_05_c/linux/flutter/generated_plugin_registrant.h @@ -0,0 +1,15 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#ifndef GENERATED_PLUGIN_REGISTRANT_ +#define GENERATED_PLUGIN_REGISTRANT_ + +#include + +// Registers Flutter plugins. +void fl_register_plugins(FlPluginRegistry* registry); + +#endif // GENERATED_PLUGIN_REGISTRANT_ diff --git a/animations/step_05_c/linux/flutter/generated_plugins.cmake b/animations/step_05_c/linux/flutter/generated_plugins.cmake new file mode 100644 index 0000000000..2e1de87a7e --- /dev/null +++ b/animations/step_05_c/linux/flutter/generated_plugins.cmake @@ -0,0 +1,23 @@ +# +# Generated file, do not edit. +# + +list(APPEND FLUTTER_PLUGIN_LIST +) + +list(APPEND FLUTTER_FFI_PLUGIN_LIST +) + +set(PLUGIN_BUNDLED_LIBRARIES) + +foreach(plugin ${FLUTTER_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${plugin}/linux plugins/${plugin}) + target_link_libraries(${BINARY_NAME} PRIVATE ${plugin}_plugin) + list(APPEND PLUGIN_BUNDLED_LIBRARIES $) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${plugin}_bundled_libraries}) +endforeach(plugin) + +foreach(ffi_plugin ${FLUTTER_FFI_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${ffi_plugin}/linux plugins/${ffi_plugin}) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${ffi_plugin}_bundled_libraries}) +endforeach(ffi_plugin) diff --git a/animations/step_05_c/linux/runner/CMakeLists.txt b/animations/step_05_c/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/animations/step_05_c/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/animations/step_05_c/linux/runner/main.cc b/animations/step_05_c/linux/runner/main.cc new file mode 100644 index 0000000000..e7c5c54370 --- /dev/null +++ b/animations/step_05_c/linux/runner/main.cc @@ -0,0 +1,6 @@ +#include "my_application.h" + +int main(int argc, char** argv) { + g_autoptr(MyApplication) app = my_application_new(); + return g_application_run(G_APPLICATION(app), argc, argv); +} diff --git a/animations/step_05_c/linux/runner/my_application.cc b/animations/step_05_c/linux/runner/my_application.cc new file mode 100644 index 0000000000..0040d7e46c --- /dev/null +++ b/animations/step_05_c/linux/runner/my_application.cc @@ -0,0 +1,130 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "quiz"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "quiz"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/animations/step_05_c/linux/runner/my_application.h b/animations/step_05_c/linux/runner/my_application.h new file mode 100644 index 0000000000..72271d5e41 --- /dev/null +++ b/animations/step_05_c/linux/runner/my_application.h @@ -0,0 +1,18 @@ +#ifndef FLUTTER_MY_APPLICATION_H_ +#define FLUTTER_MY_APPLICATION_H_ + +#include + +G_DECLARE_FINAL_TYPE(MyApplication, my_application, MY, APPLICATION, + GtkApplication) + +/** + * my_application_new: + * + * Creates a new Flutter-based application. + * + * Returns: a new #MyApplication. + */ +MyApplication* my_application_new(); + +#endif // FLUTTER_MY_APPLICATION_H_ diff --git a/animations/step_05_c/macos/.gitignore b/animations/step_05_c/macos/.gitignore new file mode 100644 index 0000000000..746adbb6b9 --- /dev/null +++ b/animations/step_05_c/macos/.gitignore @@ -0,0 +1,7 @@ +# Flutter-related +**/Flutter/ephemeral/ +**/Pods/ + +# Xcode-related +**/dgph +**/xcuserdata/ diff --git a/animations/step_05_c/macos/Flutter/Flutter-Debug.xcconfig b/animations/step_05_c/macos/Flutter/Flutter-Debug.xcconfig new file mode 100644 index 0000000000..c2efd0b608 --- /dev/null +++ b/animations/step_05_c/macos/Flutter/Flutter-Debug.xcconfig @@ -0,0 +1 @@ +#include "ephemeral/Flutter-Generated.xcconfig" diff --git a/animations/step_05_c/macos/Flutter/Flutter-Release.xcconfig b/animations/step_05_c/macos/Flutter/Flutter-Release.xcconfig new file mode 100644 index 0000000000..c2efd0b608 --- /dev/null +++ b/animations/step_05_c/macos/Flutter/Flutter-Release.xcconfig @@ -0,0 +1 @@ +#include "ephemeral/Flutter-Generated.xcconfig" diff --git a/animations/step_05_c/macos/Flutter/GeneratedPluginRegistrant.swift b/animations/step_05_c/macos/Flutter/GeneratedPluginRegistrant.swift new file mode 100644 index 0000000000..cccf817a52 --- /dev/null +++ b/animations/step_05_c/macos/Flutter/GeneratedPluginRegistrant.swift @@ -0,0 +1,10 @@ +// +// Generated file. Do not edit. +// + +import FlutterMacOS +import Foundation + + +func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { +} diff --git a/animations/step_05_c/macos/Runner.xcodeproj/project.pbxproj b/animations/step_05_c/macos/Runner.xcodeproj/project.pbxproj new file mode 100644 index 0000000000..45c35dfed5 --- /dev/null +++ b/animations/step_05_c/macos/Runner.xcodeproj/project.pbxproj @@ -0,0 +1,705 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 54; + objects = { + +/* Begin PBXAggregateTarget section */ + 33CC111A2044C6BA0003C045 /* Flutter Assemble */ = { + isa = PBXAggregateTarget; + buildConfigurationList = 33CC111B2044C6BA0003C045 /* Build configuration list for PBXAggregateTarget "Flutter Assemble" */; + buildPhases = ( + 33CC111E2044C6BF0003C045 /* ShellScript */, + ); + dependencies = ( + ); + name = "Flutter Assemble"; + productName = FLX; + }; +/* End PBXAggregateTarget section */ + +/* Begin PBXBuildFile section */ + 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; + 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; + 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; + 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; + 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; + 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 331C80D9294CF71000263BE5 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 33CC10E52044A3C60003C045 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 33CC10EC2044A3C60003C045; + remoteInfo = Runner; + }; + 33CC111F2044C79F0003C045 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 33CC10E52044A3C60003C045 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 33CC111A2044C6BA0003C045; + remoteInfo = FLX; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 33CC110E2044A8840003C045 /* Bundle Framework */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + ); + name = "Bundle Framework"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; + 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; + 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; }; + 33CC10ED2044A3C60003C045 /* quiz.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "quiz.app"; sourceTree = BUILT_PRODUCTS_DIR; }; + 33CC10F02044A3C60003C045 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 33CC10F22044A3C60003C045 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = Runner/Assets.xcassets; sourceTree = ""; }; + 33CC10F52044A3C60003C045 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = ""; }; + 33CC10F72044A3C60003C045 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = Info.plist; path = Runner/Info.plist; sourceTree = ""; }; + 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainFlutterWindow.swift; sourceTree = ""; }; + 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Debug.xcconfig"; sourceTree = ""; }; + 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Release.xcconfig"; sourceTree = ""; }; + 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = "Flutter-Generated.xcconfig"; path = "ephemeral/Flutter-Generated.xcconfig"; sourceTree = ""; }; + 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; + 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; + 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; + 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 331C80D2294CF70F00263BE5 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 33CC10EA2044A3C60003C045 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 331C80D6294CF71000263BE5 /* RunnerTests */ = { + isa = PBXGroup; + children = ( + 331C80D7294CF71000263BE5 /* RunnerTests.swift */, + ); + path = RunnerTests; + sourceTree = ""; + }; + 33BA886A226E78AF003329D5 /* Configs */ = { + isa = PBXGroup; + children = ( + 33E5194F232828860026EE4D /* AppInfo.xcconfig */, + 9740EEB21CF90195004384FC /* Debug.xcconfig */, + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, + 333000ED22D3DE5D00554162 /* Warnings.xcconfig */, + ); + path = Configs; + sourceTree = ""; + }; + 33CC10E42044A3C60003C045 = { + isa = PBXGroup; + children = ( + 33FAB671232836740065AC1E /* Runner */, + 33CEB47122A05771004F2AC0 /* Flutter */, + 331C80D6294CF71000263BE5 /* RunnerTests */, + 33CC10EE2044A3C60003C045 /* Products */, + D73912EC22F37F3D000D13A0 /* Frameworks */, + ); + sourceTree = ""; + }; + 33CC10EE2044A3C60003C045 /* Products */ = { + isa = PBXGroup; + children = ( + 33CC10ED2044A3C60003C045 /* quiz.app */, + 331C80D5294CF71000263BE5 /* RunnerTests.xctest */, + ); + name = Products; + sourceTree = ""; + }; + 33CC11242044D66E0003C045 /* Resources */ = { + isa = PBXGroup; + children = ( + 33CC10F22044A3C60003C045 /* Assets.xcassets */, + 33CC10F42044A3C60003C045 /* MainMenu.xib */, + 33CC10F72044A3C60003C045 /* Info.plist */, + ); + name = Resources; + path = ..; + sourceTree = ""; + }; + 33CEB47122A05771004F2AC0 /* Flutter */ = { + isa = PBXGroup; + children = ( + 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */, + 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */, + 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */, + 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */, + ); + path = Flutter; + sourceTree = ""; + }; + 33FAB671232836740065AC1E /* Runner */ = { + isa = PBXGroup; + children = ( + 33CC10F02044A3C60003C045 /* AppDelegate.swift */, + 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */, + 33E51913231747F40026EE4D /* DebugProfile.entitlements */, + 33E51914231749380026EE4D /* Release.entitlements */, + 33CC11242044D66E0003C045 /* Resources */, + 33BA886A226E78AF003329D5 /* Configs */, + ); + path = Runner; + sourceTree = ""; + }; + D73912EC22F37F3D000D13A0 /* Frameworks */ = { + isa = PBXGroup; + children = ( + ); + name = Frameworks; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 331C80D4294CF70F00263BE5 /* RunnerTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; + buildPhases = ( + 331C80D1294CF70F00263BE5 /* Sources */, + 331C80D2294CF70F00263BE5 /* Frameworks */, + 331C80D3294CF70F00263BE5 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 331C80DA294CF71000263BE5 /* PBXTargetDependency */, + ); + name = RunnerTests; + productName = RunnerTests; + productReference = 331C80D5294CF71000263BE5 /* RunnerTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; + 33CC10EC2044A3C60003C045 /* Runner */ = { + isa = PBXNativeTarget; + buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; + buildPhases = ( + 33CC10E92044A3C60003C045 /* Sources */, + 33CC10EA2044A3C60003C045 /* Frameworks */, + 33CC10EB2044A3C60003C045 /* Resources */, + 33CC110E2044A8840003C045 /* Bundle Framework */, + 3399D490228B24CF009A79C7 /* ShellScript */, + ); + buildRules = ( + ); + dependencies = ( + 33CC11202044C79F0003C045 /* PBXTargetDependency */, + ); + name = Runner; + productName = Runner; + productReference = 33CC10ED2044A3C60003C045 /* quiz.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 33CC10E52044A3C60003C045 /* Project object */ = { + isa = PBXProject; + attributes = { + BuildIndependentTargetsInParallel = YES; + LastSwiftUpdateCheck = 0920; + LastUpgradeCheck = 1510; + ORGANIZATIONNAME = ""; + TargetAttributes = { + 331C80D4294CF70F00263BE5 = { + CreatedOnToolsVersion = 14.0; + TestTargetID = 33CC10EC2044A3C60003C045; + }; + 33CC10EC2044A3C60003C045 = { + CreatedOnToolsVersion = 9.2; + LastSwiftMigration = 1100; + ProvisioningStyle = Automatic; + SystemCapabilities = { + com.apple.Sandbox = { + enabled = 1; + }; + }; + }; + 33CC111A2044C6BA0003C045 = { + CreatedOnToolsVersion = 9.2; + ProvisioningStyle = Manual; + }; + }; + }; + buildConfigurationList = 33CC10E82044A3C60003C045 /* Build configuration list for PBXProject "Runner" */; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 33CC10E42044A3C60003C045; + productRefGroup = 33CC10EE2044A3C60003C045 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 33CC10EC2044A3C60003C045 /* Runner */, + 331C80D4294CF70F00263BE5 /* RunnerTests */, + 33CC111A2044C6BA0003C045 /* Flutter Assemble */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 331C80D3294CF70F00263BE5 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 33CC10EB2044A3C60003C045 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */, + 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 3399D490228B24CF009A79C7 /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; + }; + 33CC111E2044C6BF0003C045 /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + Flutter/ephemeral/FlutterInputs.xcfilelist, + ); + inputPaths = ( + Flutter/ephemeral/tripwire, + ); + outputFileListPaths = ( + Flutter/ephemeral/FlutterOutputs.xcfilelist, + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 331C80D1294CF70F00263BE5 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 33CC10E92044A3C60003C045 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */, + 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */, + 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 331C80DA294CF71000263BE5 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 33CC10EC2044A3C60003C045 /* Runner */; + targetProxy = 331C80D9294CF71000263BE5 /* PBXContainerItemProxy */; + }; + 33CC11202044C79F0003C045 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 33CC111A2044C6BA0003C045 /* Flutter Assemble */; + targetProxy = 33CC111F2044C79F0003C045 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + 33CC10F42044A3C60003C045 /* MainMenu.xib */ = { + isa = PBXVariantGroup; + children = ( + 33CC10F52044A3C60003C045 /* Base */, + ); + name = MainMenu.xib; + path = Runner; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 331C80DB294CF71000263BE5 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.quiz.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/quiz.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/quiz"; + }; + name = Debug; + }; + 331C80DC294CF71000263BE5 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.quiz.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/quiz.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/quiz"; + }; + name = Release; + }; + 331C80DD294CF71000263BE5 /* Profile */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.quiz.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/quiz.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/quiz"; + }; + name = Profile; + }; + 338D0CE9231458BD00FA5F75 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + DEAD_CODE_STRIPPING = YES; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.14; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = macosx; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + }; + name = Profile; + }; + 338D0CEA231458BD00FA5F75 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_VERSION = 5.0; + }; + name = Profile; + }; + 338D0CEB231458BD00FA5F75 /* Profile */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Manual; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Profile; + }; + 33CC10F92044A3C60003C045 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + DEAD_CODE_STRIPPING = YES; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.14; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = macosx; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + }; + name = Debug; + }; + 33CC10FA2044A3C60003C045 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + DEAD_CODE_STRIPPING = YES; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.14; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = macosx; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + }; + name = Release; + }; + 33CC10FC2044A3C60003C045 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + }; + name = Debug; + }; + 33CC10FD2044A3C60003C045 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/Release.entitlements; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_VERSION = 5.0; + }; + name = Release; + }; + 33CC111C2044C6BA0003C045 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Manual; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Debug; + }; + 33CC111D2044C6BA0003C045 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Automatic; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 331C80DB294CF71000263BE5 /* Debug */, + 331C80DC294CF71000263BE5 /* Release */, + 331C80DD294CF71000263BE5 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 33CC10E82044A3C60003C045 /* Build configuration list for PBXProject "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 33CC10F92044A3C60003C045 /* Debug */, + 33CC10FA2044A3C60003C045 /* Release */, + 338D0CE9231458BD00FA5F75 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 33CC10FC2044A3C60003C045 /* Debug */, + 33CC10FD2044A3C60003C045 /* Release */, + 338D0CEA231458BD00FA5F75 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 33CC111B2044C6BA0003C045 /* Build configuration list for PBXAggregateTarget "Flutter Assemble" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 33CC111C2044C6BA0003C045 /* Debug */, + 33CC111D2044C6BA0003C045 /* Release */, + 338D0CEB231458BD00FA5F75 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 33CC10E52044A3C60003C045 /* Project object */; +} diff --git a/animations/step_05_c/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/animations/step_05_c/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000000..18d981003d --- /dev/null +++ b/animations/step_05_c/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/animations/step_05_c/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/animations/step_05_c/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme new file mode 100644 index 0000000000..2f413cb17b --- /dev/null +++ b/animations/step_05_c/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -0,0 +1,98 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/animations/step_05_c/macos/Runner.xcworkspace/contents.xcworkspacedata b/animations/step_05_c/macos/Runner.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000000..1d526a16ed --- /dev/null +++ b/animations/step_05_c/macos/Runner.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/animations/step_05_c/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/animations/step_05_c/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000000..18d981003d --- /dev/null +++ b/animations/step_05_c/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/animations/step_05_c/macos/Runner/AppDelegate.swift b/animations/step_05_c/macos/Runner/AppDelegate.swift new file mode 100644 index 0000000000..b3c1761412 --- /dev/null +++ b/animations/step_05_c/macos/Runner/AppDelegate.swift @@ -0,0 +1,13 @@ +import Cocoa +import FlutterMacOS + +@main +class AppDelegate: FlutterAppDelegate { + override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { + return true + } + + override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { + return true + } +} diff --git a/animations/step_05_c/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/animations/step_05_c/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000000..a2ec33f19f --- /dev/null +++ b/animations/step_05_c/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,68 @@ +{ + "images" : [ + { + "size" : "16x16", + "idiom" : "mac", + "filename" : "app_icon_16.png", + "scale" : "1x" + }, + { + "size" : "16x16", + "idiom" : "mac", + "filename" : "app_icon_32.png", + "scale" : "2x" + }, + { + "size" : "32x32", + "idiom" : "mac", + "filename" : "app_icon_32.png", + "scale" : "1x" + }, + { + "size" : "32x32", + "idiom" : "mac", + "filename" : "app_icon_64.png", + "scale" : "2x" + }, + { + "size" : "128x128", + "idiom" : "mac", + "filename" : "app_icon_128.png", + "scale" : "1x" + }, + { + "size" : "128x128", + "idiom" : "mac", + "filename" : "app_icon_256.png", + "scale" : "2x" + }, + { + "size" : "256x256", + "idiom" : "mac", + "filename" : "app_icon_256.png", + "scale" : "1x" + }, + { + "size" : "256x256", + "idiom" : "mac", + "filename" : "app_icon_512.png", + "scale" : "2x" + }, + { + "size" : "512x512", + "idiom" : "mac", + "filename" : "app_icon_512.png", + "scale" : "1x" + }, + { + "size" : "512x512", + "idiom" : "mac", + "filename" : "app_icon_1024.png", + "scale" : "2x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} diff --git a/animations/step_05_c/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png b/animations/step_05_c/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png new file mode 100644 index 0000000000000000000000000000000000000000..82b6f9d9a33e198f5747104729e1fcef999772a5 GIT binary patch literal 102994 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ⅅ8MglG&ER{i5lN315cO?EdHNLrg? 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 z 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 Pe7HEdAEg|=c=LY&YVNkY literal 0 HcmV?d00001 diff --git a/animations/step_05_c/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png b/animations/step_05_c/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png new file mode 100644 index 0000000000000000000000000000000000000000..13b35eba55c6dabc3aac36f33d859266c18fa0d0 GIT binary patch literal 5680 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 literal 0 HcmV?d00001 diff --git a/animations/step_05_c/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png b/animations/step_05_c/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png new file mode 100644 index 0000000000000000000000000000000000000000..0a3f5fa40fb3d1e0710331a48de5d256da3f275d GIT binary patch literal 520 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 literal 0 HcmV?d00001 diff --git a/animations/step_05_c/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png b/animations/step_05_c/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png new file mode 100644 index 0000000000000000000000000000000000000000..2f1632cfddf3d9dade342351e627a0a75609fb46 GIT binary patch literal 2218 zcmV;b2vzrqP)Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91K%fHv1ONa40RR91KmY&$07g+lumAuE6iGxuRCodHTWf3-RTMruyW6Fu zQYeUM04eX6D5c0FCjKKPrco1(K`<0SL=crI{PC3-^hZU0kQie$gh-5!7z6SH6Q0J% zqot*`H1q{R5fHFYS}dje@;kG=v$L0(yY0?wY2%*c?A&{2?!D*x?m71{of2gv!$5|C z3>qG_BW}7K_yUcT3A5C6QD<+{aq?x;MAUyAiJn#Jv8_zZtQ{P zTRzbL3U9!qVuZzS$xKU10KiW~Bgdcv1-!uAhQxf3a7q+dU6lj?yoO4Lq4TUN4}h{N z*fIM=SS8|C2$(T>w$`t@3Tka!(r!7W`x z-isCVgQD^mG-MJ;XtJuK3V{Vy72GQ83KRWsHU?e*wrhKk=ApIYeDqLi;JI1e zuvv}5^Dc=k7F7?nm3nIw$NVmU-+R>> zyqOR$-2SDpJ}Pt;^RkJytDVXNTsu|mI1`~G7yw`EJR?VkGfNdqK9^^8P`JdtTV&tX4CNcV4 z&N06nZa??Fw1AgQOUSE2AmPE@WO(Fvo`%m`cDgiv(fAeRA%3AGXUbsGw{7Q`cY;1BI#ac3iN$$Hw z0LT0;xc%=q)me?Y*$xI@GRAw?+}>=9D+KTk??-HJ4=A>`V&vKFS75@MKdSF1JTq{S zc1!^8?YA|t+uKigaq!sT;Z!&0F2=k7F0PIU;F$leJLaw2UI6FL^w}OG&!;+b%ya1c z1n+6-inU<0VM-Y_s5iTElq)ThyF?StVcebpGI znw#+zLx2@ah{$_2jn+@}(zJZ{+}_N9BM;z)0yr|gF-4=Iyu@hI*Lk=-A8f#bAzc9f z`Kd6K--x@t04swJVC3JK1cHY-Hq+=|PN-VO;?^_C#;coU6TDP7Bt`;{JTG;!+jj(` zw5cLQ-(Cz-Tlb`A^w7|R56Ce;Wmr0)$KWOUZ6ai0PhzPeHwdl0H(etP zUV`va_i0s-4#DkNM8lUlqI7>YQLf)(lz9Q3Uw`)nc(z3{m5ZE77Ul$V%m)E}3&8L0 z-XaU|eB~Is08eORPk;=<>!1w)Kf}FOVS2l&9~A+@R#koFJ$Czd%Y(ENTV&A~U(IPI z;UY+gf+&6ioZ=roly<0Yst8ck>(M=S?B-ys3mLdM&)ex!hbt+ol|T6CTS+Sc0jv(& z7ijdvFwBq;0a{%3GGwkDKTeG`b+lyj0jjS1OMkYnepCdoosNY`*zmBIo*981BU%%U z@~$z0V`OVtIbEx5pa|Tct|Lg#ZQf5OYMUMRD>Wdxm5SAqV2}3!ceE-M2 z@O~lQ0OiKQp}o9I;?uxCgYVV?FH|?Riri*U$Zi_`V2eiA>l zdSm6;SEm6#T+SpcE8Ro_f2AwxzI z44hfe^WE3!h@W3RDyA_H440cpmYkv*)6m1XazTqw%=E5Xv7^@^^T7Q2wxr+Z2kVYr + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/animations/step_05_c/macos/Runner/Configs/AppInfo.xcconfig b/animations/step_05_c/macos/Runner/Configs/AppInfo.xcconfig new file mode 100644 index 0000000000..28c7905763 --- /dev/null +++ b/animations/step_05_c/macos/Runner/Configs/AppInfo.xcconfig @@ -0,0 +1,14 @@ +// Application-level settings for the Runner target. +// +// This may be replaced with something auto-generated from metadata (e.g., pubspec.yaml) in the +// future. If not, the values below would default to using the project name when this becomes a +// 'flutter create' template. + +// The application's name. By default this is also the title of the Flutter window. +PRODUCT_NAME = quiz + +// The application's bundle identifier +PRODUCT_BUNDLE_IDENTIFIER = com.example.quiz + +// The copyright displayed in application information +PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved. diff --git a/animations/step_05_c/macos/Runner/Configs/Debug.xcconfig b/animations/step_05_c/macos/Runner/Configs/Debug.xcconfig new file mode 100644 index 0000000000..36b0fd9464 --- /dev/null +++ b/animations/step_05_c/macos/Runner/Configs/Debug.xcconfig @@ -0,0 +1,2 @@ +#include "../../Flutter/Flutter-Debug.xcconfig" +#include "Warnings.xcconfig" diff --git a/animations/step_05_c/macos/Runner/Configs/Release.xcconfig b/animations/step_05_c/macos/Runner/Configs/Release.xcconfig new file mode 100644 index 0000000000..dff4f49561 --- /dev/null +++ b/animations/step_05_c/macos/Runner/Configs/Release.xcconfig @@ -0,0 +1,2 @@ +#include "../../Flutter/Flutter-Release.xcconfig" +#include "Warnings.xcconfig" diff --git a/animations/step_05_c/macos/Runner/Configs/Warnings.xcconfig b/animations/step_05_c/macos/Runner/Configs/Warnings.xcconfig new file mode 100644 index 0000000000..42bcbf4780 --- /dev/null +++ b/animations/step_05_c/macos/Runner/Configs/Warnings.xcconfig @@ -0,0 +1,13 @@ +WARNING_CFLAGS = -Wall -Wconditional-uninitialized -Wnullable-to-nonnull-conversion -Wmissing-method-return-type -Woverlength-strings +GCC_WARN_UNDECLARED_SELECTOR = YES +CLANG_UNDEFINED_BEHAVIOR_SANITIZER_NULLABILITY = YES +CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE +CLANG_WARN__DUPLICATE_METHOD_MATCH = YES +CLANG_WARN_PRAGMA_PACK = YES +CLANG_WARN_STRICT_PROTOTYPES = YES +CLANG_WARN_COMMA = YES +GCC_WARN_STRICT_SELECTOR_MATCH = YES +CLANG_WARN_OBJC_REPEATED_USE_OF_WEAK = YES +CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES +GCC_WARN_SHADOW = YES +CLANG_WARN_UNREACHABLE_CODE = YES diff --git a/animations/step_05_c/macos/Runner/DebugProfile.entitlements b/animations/step_05_c/macos/Runner/DebugProfile.entitlements new file mode 100644 index 0000000000..dddb8a30c8 --- /dev/null +++ b/animations/step_05_c/macos/Runner/DebugProfile.entitlements @@ -0,0 +1,12 @@ + + + + + com.apple.security.app-sandbox + + com.apple.security.cs.allow-jit + + com.apple.security.network.server + + + diff --git a/animations/step_05_c/macos/Runner/Info.plist b/animations/step_05_c/macos/Runner/Info.plist new file mode 100644 index 0000000000..4789daa6a4 --- /dev/null +++ b/animations/step_05_c/macos/Runner/Info.plist @@ -0,0 +1,32 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIconFile + + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + APPL + CFBundleShortVersionString + $(FLUTTER_BUILD_NAME) + CFBundleVersion + $(FLUTTER_BUILD_NUMBER) + LSMinimumSystemVersion + $(MACOSX_DEPLOYMENT_TARGET) + NSHumanReadableCopyright + $(PRODUCT_COPYRIGHT) + NSMainNibFile + MainMenu + NSPrincipalClass + NSApplication + + diff --git a/animations/step_05_c/macos/Runner/MainFlutterWindow.swift b/animations/step_05_c/macos/Runner/MainFlutterWindow.swift new file mode 100644 index 0000000000..3cc05eb234 --- /dev/null +++ b/animations/step_05_c/macos/Runner/MainFlutterWindow.swift @@ -0,0 +1,15 @@ +import Cocoa +import FlutterMacOS + +class MainFlutterWindow: NSWindow { + override func awakeFromNib() { + let flutterViewController = FlutterViewController() + let windowFrame = self.frame + self.contentViewController = flutterViewController + self.setFrame(windowFrame, display: true) + + RegisterGeneratedPlugins(registry: flutterViewController) + + super.awakeFromNib() + } +} diff --git a/animations/step_05_c/macos/Runner/Release.entitlements b/animations/step_05_c/macos/Runner/Release.entitlements new file mode 100644 index 0000000000..852fa1a472 --- /dev/null +++ b/animations/step_05_c/macos/Runner/Release.entitlements @@ -0,0 +1,8 @@ + + + + + com.apple.security.app-sandbox + + + diff --git a/animations/step_05_c/macos/RunnerTests/RunnerTests.swift b/animations/step_05_c/macos/RunnerTests/RunnerTests.swift new file mode 100644 index 0000000000..61f3bd1fc5 --- /dev/null +++ b/animations/step_05_c/macos/RunnerTests/RunnerTests.swift @@ -0,0 +1,12 @@ +import Cocoa +import FlutterMacOS +import XCTest + +class RunnerTests: XCTestCase { + + func testExample() { + // If you add code to the Runner application, consider adding tests here. + // See https://developer.apple.com/documentation/xctest for more information about using XCTest. + } + +} diff --git a/animations/step_05_c/pubspec.yaml b/animations/step_05_c/pubspec.yaml new file mode 100644 index 0000000000..d8e843d9c9 --- /dev/null +++ b/animations/step_05_c/pubspec.yaml @@ -0,0 +1,21 @@ +name: quiz +description: A quiz app for demonstrating animation effects in Flutter +publish_to: "none" +version: 1.0.0 + +environment: + sdk: ^3.7.0-0 + +dependencies: + animations: ^2.0.0 + flutter: + sdk: flutter + +dev_dependencies: + flutter_test: + sdk: flutter + flutter_lints: ^4.0.0 + + +flutter: + uses-material-design: true diff --git a/animations/step_05_c/web/favicon.png b/animations/step_05_c/web/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..8aaa46ac1ae21512746f852a42ba87e4165dfdd1 GIT binary patch literal 917 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|I14-?iy0X7 zltGxWVyS%@P(fs7NJL45ua8x7ey(0(N`6wRUPW#JP&EUCO@$SZnVVXYs8ErclUHn2 zVXFjIVFhG^g!Ppaz)DK8ZIvQ?0~DO|i&7O#^-S~(l1AfjnEK zjFOT9D}DX)@^Za$W4-*MbbUihOG|wNBYh(yU7!lx;>x^|#0uTKVr7USFmqf|i<65o z3raHc^AtelCMM;Vme?vOfh>Xph&xL%(-1c06+^uR^q@XSM&D4+Kp$>4P^%3{)XKjo zGZknv$b36P8?Z_gF{nK@`XI}Z90TzwSQO}0J1!f2c(B=V`5aP@1P1a|PZ!4!3&Gl8 zTYqUsf!gYFyJnXpu0!n&N*SYAX-%d(5gVjrHJWqXQshj@!Zm{!01WsQrH~9=kTxW#6SvuapgMqt>$=j#%eyGrQzr zP{L-3gsMA^$I1&gsBAEL+vxi1*Igl=8#8`5?A-T5=z-sk46WA1IUT)AIZHx1rdUrf zVJrJn<74DDw`j)Ki#gt}mIT-Q`XRa2-jQXQoI%w`nb|XblvzK${ZzlV)m-XcwC(od z71_OEC5Bt9GEXosOXaPTYOia#R4ID2TiU~`zVMl08TV_C%DnU4^+HE>9(CE4D6?Fz oujB08i7adh9xk7*FX66dWH6F5TM;?E2b5PlUHx3vIVCg!0Dx9vYXATM literal 0 HcmV?d00001 diff --git a/animations/step_05_c/web/icons/Icon-192.png b/animations/step_05_c/web/icons/Icon-192.png new file mode 100644 index 0000000000000000000000000000000000000000..b749bfef07473333cf1dd31e9eed89862a5d52aa GIT binary patch literal 5292 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 literal 0 HcmV?d00001 diff --git a/animations/step_05_c/web/icons/Icon-512.png b/animations/step_05_c/web/icons/Icon-512.png new file mode 100644 index 0000000000000000000000000000000000000000..88cfd48dff1169879ba46840804b412fe02fefd6 GIT binary patch literal 8252 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 literal 0 HcmV?d00001 diff --git a/animations/step_05_c/web/icons/Icon-maskable-192.png b/animations/step_05_c/web/icons/Icon-maskable-192.png new file mode 100644 index 0000000000000000000000000000000000000000..eb9b4d76e525556d5d89141648c724331630325d GIT binary patch literal 5594 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 X>c!)3PgKfL&lX^$Z>Cpu&6)6jvi^Z! literal 0 HcmV?d00001 diff --git a/animations/step_05_c/web/icons/Icon-maskable-512.png b/animations/step_05_c/web/icons/Icon-maskable-512.png new file mode 100644 index 0000000000000000000000000000000000000000..d69c56691fbdb0b7efa65097c7cc1edac12a6d3e GIT binary patch literal 20998 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 MPgg&ebxsLQ025IeI{*Lx literal 0 HcmV?d00001 diff --git a/animations/step_05_c/web/index.html b/animations/step_05_c/web/index.html new file mode 100644 index 0000000000..ec05768c59 --- /dev/null +++ b/animations/step_05_c/web/index.html @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + quiz + + + + + + diff --git a/animations/step_05_c/web/manifest.json b/animations/step_05_c/web/manifest.json new file mode 100644 index 0000000000..467748be48 --- /dev/null +++ b/animations/step_05_c/web/manifest.json @@ -0,0 +1,35 @@ +{ + "name": "quiz", + "short_name": "quiz", + "start_url": ".", + "display": "standalone", + "background_color": "#0175C2", + "theme_color": "#0175C2", + "description": "A new Flutter project.", + "orientation": "portrait-primary", + "prefer_related_applications": false, + "icons": [ + { + "src": "icons/Icon-192.png", + "sizes": "192x192", + "type": "image/png" + }, + { + "src": "icons/Icon-512.png", + "sizes": "512x512", + "type": "image/png" + }, + { + "src": "icons/Icon-maskable-192.png", + "sizes": "192x192", + "type": "image/png", + "purpose": "maskable" + }, + { + "src": "icons/Icon-maskable-512.png", + "sizes": "512x512", + "type": "image/png", + "purpose": "maskable" + } + ] +} diff --git a/animations/step_05_c/windows/.gitignore b/animations/step_05_c/windows/.gitignore new file mode 100644 index 0000000000..d492d0d98c --- /dev/null +++ b/animations/step_05_c/windows/.gitignore @@ -0,0 +1,17 @@ +flutter/ephemeral/ + +# Visual Studio user-specific files. +*.suo +*.user +*.userosscache +*.sln.docstates + +# Visual Studio build-related files. +x64/ +x86/ + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!*.[Cc]ache/ diff --git a/animations/step_05_c/windows/CMakeLists.txt b/animations/step_05_c/windows/CMakeLists.txt new file mode 100644 index 0000000000..e65947e844 --- /dev/null +++ b/animations/step_05_c/windows/CMakeLists.txt @@ -0,0 +1,108 @@ +# Project-level configuration. +cmake_minimum_required(VERSION 3.14) +project(quiz LANGUAGES CXX) + +# The name of the executable created for the application. Change this to change +# the on-disk name of your application. +set(BINARY_NAME "quiz") + +# Explicitly opt in to modern CMake behaviors to avoid warnings with recent +# versions of CMake. +cmake_policy(VERSION 3.14...3.25) + +# Define build configuration option. +get_property(IS_MULTICONFIG GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG) +if(IS_MULTICONFIG) + set(CMAKE_CONFIGURATION_TYPES "Debug;Profile;Release" + CACHE STRING "" FORCE) +else() + if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) + set(CMAKE_BUILD_TYPE "Debug" CACHE + STRING "Flutter build mode" FORCE) + set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS + "Debug" "Profile" "Release") + endif() +endif() +# Define settings for the Profile build mode. +set(CMAKE_EXE_LINKER_FLAGS_PROFILE "${CMAKE_EXE_LINKER_FLAGS_RELEASE}") +set(CMAKE_SHARED_LINKER_FLAGS_PROFILE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE}") +set(CMAKE_C_FLAGS_PROFILE "${CMAKE_C_FLAGS_RELEASE}") +set(CMAKE_CXX_FLAGS_PROFILE "${CMAKE_CXX_FLAGS_RELEASE}") + +# Use Unicode for all projects. +add_definitions(-DUNICODE -D_UNICODE) + +# Compilation settings that should be applied to most targets. +# +# Be cautious about adding new options here, as plugins use this function by +# default. In most cases, you should add new options to specific targets instead +# of modifying this function. +function(APPLY_STANDARD_SETTINGS TARGET) + target_compile_features(${TARGET} PUBLIC cxx_std_17) + target_compile_options(${TARGET} PRIVATE /W4 /WX /wd"4100") + target_compile_options(${TARGET} PRIVATE /EHsc) + target_compile_definitions(${TARGET} PRIVATE "_HAS_EXCEPTIONS=0") + target_compile_definitions(${TARGET} PRIVATE "$<$:_DEBUG>") +endfunction() + +# Flutter library and tool build rules. +set(FLUTTER_MANAGED_DIR "${CMAKE_CURRENT_SOURCE_DIR}/flutter") +add_subdirectory(${FLUTTER_MANAGED_DIR}) + +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") + + +# Generated plugin build rules, which manage building the plugins and adding +# them to the application. +include(flutter/generated_plugins.cmake) + + +# === Installation === +# Support files are copied into place next to the executable, so that it can +# run in place. This is done instead of making a separate bundle (as on Linux) +# so that building and running from within Visual Studio will work. +set(BUILD_BUNDLE_DIR "$") +# Make the "install" step default, as it's required to run. +set(CMAKE_VS_INCLUDE_INSTALL_TO_DEFAULT_BUILD 1) +if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) + set(CMAKE_INSTALL_PREFIX "${BUILD_BUNDLE_DIR}" CACHE PATH "..." FORCE) +endif() + +set(INSTALL_BUNDLE_DATA_DIR "${CMAKE_INSTALL_PREFIX}/data") +set(INSTALL_BUNDLE_LIB_DIR "${CMAKE_INSTALL_PREFIX}") + +install(TARGETS ${BINARY_NAME} RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_ICU_DATA_FILE}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) + +if(PLUGIN_BUNDLED_LIBRARIES) + install(FILES "${PLUGIN_BUNDLED_LIBRARIES}" + DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) +endif() + +# Copy the native assets provided by the build.dart from all packages. +set(NATIVE_ASSETS_DIR "${PROJECT_BUILD_DIR}native_assets/windows/") +install(DIRECTORY "${NATIVE_ASSETS_DIR}" + DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) + +# Fully re-copy the assets directory on each build to avoid having stale files +# from a previous install. +set(FLUTTER_ASSET_DIR_NAME "flutter_assets") +install(CODE " + file(REMOVE_RECURSE \"${INSTALL_BUNDLE_DATA_DIR}/${FLUTTER_ASSET_DIR_NAME}\") + " COMPONENT Runtime) +install(DIRECTORY "${PROJECT_BUILD_DIR}/${FLUTTER_ASSET_DIR_NAME}" + DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" COMPONENT Runtime) + +# Install the AOT library on non-Debug builds only. +install(FILES "${AOT_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" + CONFIGURATIONS Profile;Release + COMPONENT Runtime) diff --git a/animations/step_05_c/windows/flutter/CMakeLists.txt b/animations/step_05_c/windows/flutter/CMakeLists.txt new file mode 100644 index 0000000000..903f4899d6 --- /dev/null +++ b/animations/step_05_c/windows/flutter/CMakeLists.txt @@ -0,0 +1,109 @@ +# This file controls Flutter-level build steps. It should not be edited. +cmake_minimum_required(VERSION 3.14) + +set(EPHEMERAL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/ephemeral") + +# Configuration provided via flutter tool. +include(${EPHEMERAL_DIR}/generated_config.cmake) + +# TODO: Move the rest of this into files in ephemeral. See +# https://github.com/flutter/flutter/issues/57146. +set(WRAPPER_ROOT "${EPHEMERAL_DIR}/cpp_client_wrapper") + +# Set fallback configurations for older versions of the flutter tool. +if (NOT DEFINED FLUTTER_TARGET_PLATFORM) + set(FLUTTER_TARGET_PLATFORM "windows-x64") +endif() + +# === Flutter Library === +set(FLUTTER_LIBRARY "${EPHEMERAL_DIR}/flutter_windows.dll") + +# Published to parent scope for install step. +set(FLUTTER_LIBRARY ${FLUTTER_LIBRARY} PARENT_SCOPE) +set(FLUTTER_ICU_DATA_FILE "${EPHEMERAL_DIR}/icudtl.dat" PARENT_SCOPE) +set(PROJECT_BUILD_DIR "${PROJECT_DIR}/build/" PARENT_SCOPE) +set(AOT_LIBRARY "${PROJECT_DIR}/build/windows/app.so" PARENT_SCOPE) + +list(APPEND FLUTTER_LIBRARY_HEADERS + "flutter_export.h" + "flutter_windows.h" + "flutter_messenger.h" + "flutter_plugin_registrar.h" + "flutter_texture_registrar.h" +) +list(TRANSFORM FLUTTER_LIBRARY_HEADERS PREPEND "${EPHEMERAL_DIR}/") +add_library(flutter INTERFACE) +target_include_directories(flutter INTERFACE + "${EPHEMERAL_DIR}" +) +target_link_libraries(flutter INTERFACE "${FLUTTER_LIBRARY}.lib") +add_dependencies(flutter flutter_assemble) + +# === Wrapper === +list(APPEND CPP_WRAPPER_SOURCES_CORE + "core_implementations.cc" + "standard_codec.cc" +) +list(TRANSFORM CPP_WRAPPER_SOURCES_CORE PREPEND "${WRAPPER_ROOT}/") +list(APPEND CPP_WRAPPER_SOURCES_PLUGIN + "plugin_registrar.cc" +) +list(TRANSFORM CPP_WRAPPER_SOURCES_PLUGIN PREPEND "${WRAPPER_ROOT}/") +list(APPEND CPP_WRAPPER_SOURCES_APP + "flutter_engine.cc" + "flutter_view_controller.cc" +) +list(TRANSFORM CPP_WRAPPER_SOURCES_APP PREPEND "${WRAPPER_ROOT}/") + +# Wrapper sources needed for a plugin. +add_library(flutter_wrapper_plugin STATIC + ${CPP_WRAPPER_SOURCES_CORE} + ${CPP_WRAPPER_SOURCES_PLUGIN} +) +apply_standard_settings(flutter_wrapper_plugin) +set_target_properties(flutter_wrapper_plugin PROPERTIES + POSITION_INDEPENDENT_CODE ON) +set_target_properties(flutter_wrapper_plugin PROPERTIES + CXX_VISIBILITY_PRESET hidden) +target_link_libraries(flutter_wrapper_plugin PUBLIC flutter) +target_include_directories(flutter_wrapper_plugin PUBLIC + "${WRAPPER_ROOT}/include" +) +add_dependencies(flutter_wrapper_plugin flutter_assemble) + +# Wrapper sources needed for the runner. +add_library(flutter_wrapper_app STATIC + ${CPP_WRAPPER_SOURCES_CORE} + ${CPP_WRAPPER_SOURCES_APP} +) +apply_standard_settings(flutter_wrapper_app) +target_link_libraries(flutter_wrapper_app PUBLIC flutter) +target_include_directories(flutter_wrapper_app PUBLIC + "${WRAPPER_ROOT}/include" +) +add_dependencies(flutter_wrapper_app flutter_assemble) + +# === Flutter tool backend === +# _phony_ is a non-existent file to force this command to run every time, +# since currently there's no way to get a full input/output list from the +# flutter tool. +set(PHONY_OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/_phony_") +set_source_files_properties("${PHONY_OUTPUT}" PROPERTIES SYMBOLIC TRUE) +add_custom_command( + OUTPUT ${FLUTTER_LIBRARY} ${FLUTTER_LIBRARY_HEADERS} + ${CPP_WRAPPER_SOURCES_CORE} ${CPP_WRAPPER_SOURCES_PLUGIN} + ${CPP_WRAPPER_SOURCES_APP} + ${PHONY_OUTPUT} + COMMAND ${CMAKE_COMMAND} -E env + ${FLUTTER_TOOL_ENVIRONMENT} + "${FLUTTER_ROOT}/packages/flutter_tools/bin/tool_backend.bat" + ${FLUTTER_TARGET_PLATFORM} $ + VERBATIM +) +add_custom_target(flutter_assemble DEPENDS + "${FLUTTER_LIBRARY}" + ${FLUTTER_LIBRARY_HEADERS} + ${CPP_WRAPPER_SOURCES_CORE} + ${CPP_WRAPPER_SOURCES_PLUGIN} + ${CPP_WRAPPER_SOURCES_APP} +) diff --git a/animations/step_05_c/windows/flutter/generated_plugin_registrant.cc b/animations/step_05_c/windows/flutter/generated_plugin_registrant.cc new file mode 100644 index 0000000000..8b6d4680af --- /dev/null +++ b/animations/step_05_c/windows/flutter/generated_plugin_registrant.cc @@ -0,0 +1,11 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#include "generated_plugin_registrant.h" + + +void RegisterPlugins(flutter::PluginRegistry* registry) { +} diff --git a/animations/step_05_c/windows/flutter/generated_plugin_registrant.h b/animations/step_05_c/windows/flutter/generated_plugin_registrant.h new file mode 100644 index 0000000000..dc139d85a9 --- /dev/null +++ b/animations/step_05_c/windows/flutter/generated_plugin_registrant.h @@ -0,0 +1,15 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#ifndef GENERATED_PLUGIN_REGISTRANT_ +#define GENERATED_PLUGIN_REGISTRANT_ + +#include + +// Registers Flutter plugins. +void RegisterPlugins(flutter::PluginRegistry* registry); + +#endif // GENERATED_PLUGIN_REGISTRANT_ diff --git a/animations/step_05_c/windows/flutter/generated_plugins.cmake b/animations/step_05_c/windows/flutter/generated_plugins.cmake new file mode 100644 index 0000000000..b93c4c30c1 --- /dev/null +++ b/animations/step_05_c/windows/flutter/generated_plugins.cmake @@ -0,0 +1,23 @@ +# +# Generated file, do not edit. +# + +list(APPEND FLUTTER_PLUGIN_LIST +) + +list(APPEND FLUTTER_FFI_PLUGIN_LIST +) + +set(PLUGIN_BUNDLED_LIBRARIES) + +foreach(plugin ${FLUTTER_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${plugin}/windows plugins/${plugin}) + target_link_libraries(${BINARY_NAME} PRIVATE ${plugin}_plugin) + list(APPEND PLUGIN_BUNDLED_LIBRARIES $) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${plugin}_bundled_libraries}) +endforeach(plugin) + +foreach(ffi_plugin ${FLUTTER_FFI_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${ffi_plugin}/windows plugins/${ffi_plugin}) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${ffi_plugin}_bundled_libraries}) +endforeach(ffi_plugin) diff --git a/animations/step_05_c/windows/runner/CMakeLists.txt b/animations/step_05_c/windows/runner/CMakeLists.txt new file mode 100644 index 0000000000..394917c053 --- /dev/null +++ b/animations/step_05_c/windows/runner/CMakeLists.txt @@ -0,0 +1,40 @@ +cmake_minimum_required(VERSION 3.14) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} WIN32 + "flutter_window.cpp" + "main.cpp" + "utils.cpp" + "win32_window.cpp" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" + "Runner.rc" + "runner.exe.manifest" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the build version. +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION=\"${FLUTTER_VERSION}\"") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_MAJOR=${FLUTTER_VERSION_MAJOR}") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_MINOR=${FLUTTER_VERSION_MINOR}") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_PATCH=${FLUTTER_VERSION_PATCH}") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_BUILD=${FLUTTER_VERSION_BUILD}") + +# Disable Windows macros that collide with C++ standard library functions. +target_compile_definitions(${BINARY_NAME} PRIVATE "NOMINMAX") + +# Add dependency libraries and include directories. Add any application-specific +# dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter flutter_wrapper_app) +target_link_libraries(${BINARY_NAME} PRIVATE "dwmapi.lib") +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") + +# Run the Flutter tool portions of the build. This must not be removed. +add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/animations/step_05_c/windows/runner/Runner.rc b/animations/step_05_c/windows/runner/Runner.rc new file mode 100644 index 0000000000..f0d8342b40 --- /dev/null +++ b/animations/step_05_c/windows/runner/Runner.rc @@ -0,0 +1,121 @@ +// Microsoft Visual C++ generated resource script. +// +#pragma code_page(65001) +#include "resource.h" + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#include "winres.h" + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// English (United States) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE +BEGIN + "resource.h\0" +END + +2 TEXTINCLUDE +BEGIN + "#include ""winres.h""\r\n" + "\0" +END + +3 TEXTINCLUDE +BEGIN + "\r\n" + "\0" +END + +#endif // APSTUDIO_INVOKED + + +///////////////////////////////////////////////////////////////////////////// +// +// Icon +// + +// Icon with lowest ID value placed first to ensure application icon +// remains consistent on all systems. +IDI_APP_ICON ICON "resources\\app_icon.ico" + + +///////////////////////////////////////////////////////////////////////////// +// +// Version +// + +#if defined(FLUTTER_VERSION_MAJOR) && defined(FLUTTER_VERSION_MINOR) && defined(FLUTTER_VERSION_PATCH) && defined(FLUTTER_VERSION_BUILD) +#define VERSION_AS_NUMBER FLUTTER_VERSION_MAJOR,FLUTTER_VERSION_MINOR,FLUTTER_VERSION_PATCH,FLUTTER_VERSION_BUILD +#else +#define VERSION_AS_NUMBER 1,0,0,0 +#endif + +#if defined(FLUTTER_VERSION) +#define VERSION_AS_STRING FLUTTER_VERSION +#else +#define VERSION_AS_STRING "1.0.0" +#endif + +VS_VERSION_INFO VERSIONINFO + FILEVERSION VERSION_AS_NUMBER + PRODUCTVERSION VERSION_AS_NUMBER + FILEFLAGSMASK VS_FFI_FILEFLAGSMASK +#ifdef _DEBUG + FILEFLAGS VS_FF_DEBUG +#else + FILEFLAGS 0x0L +#endif + FILEOS VOS__WINDOWS32 + FILETYPE VFT_APP + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904e4" + BEGIN + VALUE "CompanyName", "com.example" "\0" + VALUE "FileDescription", "quiz" "\0" + VALUE "FileVersion", VERSION_AS_STRING "\0" + VALUE "InternalName", "quiz" "\0" + VALUE "LegalCopyright", "Copyright (C) 2024 com.example. All rights reserved." "\0" + VALUE "OriginalFilename", "quiz.exe" "\0" + VALUE "ProductName", "quiz" "\0" + VALUE "ProductVersion", VERSION_AS_STRING "\0" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x409, 1252 + END +END + +#endif // English (United States) resources +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// + + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED diff --git a/animations/step_05_c/windows/runner/flutter_window.cpp b/animations/step_05_c/windows/runner/flutter_window.cpp new file mode 100644 index 0000000000..955ee3038f --- /dev/null +++ b/animations/step_05_c/windows/runner/flutter_window.cpp @@ -0,0 +1,71 @@ +#include "flutter_window.h" + +#include + +#include "flutter/generated_plugin_registrant.h" + +FlutterWindow::FlutterWindow(const flutter::DartProject& project) + : project_(project) {} + +FlutterWindow::~FlutterWindow() {} + +bool FlutterWindow::OnCreate() { + if (!Win32Window::OnCreate()) { + return false; + } + + RECT frame = GetClientArea(); + + // The size here must match the window dimensions to avoid unnecessary surface + // creation / destruction in the startup path. + flutter_controller_ = std::make_unique( + frame.right - frame.left, frame.bottom - frame.top, project_); + // Ensure that basic setup of the controller was successful. + if (!flutter_controller_->engine() || !flutter_controller_->view()) { + return false; + } + RegisterPlugins(flutter_controller_->engine()); + SetChildContent(flutter_controller_->view()->GetNativeWindow()); + + flutter_controller_->engine()->SetNextFrameCallback([&]() { + this->Show(); + }); + + // Flutter can complete the first frame before the "show window" callback is + // registered. The following call ensures a frame is pending to ensure the + // window is shown. It is a no-op if the first frame hasn't completed yet. + flutter_controller_->ForceRedraw(); + + return true; +} + +void FlutterWindow::OnDestroy() { + if (flutter_controller_) { + flutter_controller_ = nullptr; + } + + Win32Window::OnDestroy(); +} + +LRESULT +FlutterWindow::MessageHandler(HWND hwnd, UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept { + // Give Flutter, including plugins, an opportunity to handle window messages. + if (flutter_controller_) { + std::optional result = + flutter_controller_->HandleTopLevelWindowProc(hwnd, message, wparam, + lparam); + if (result) { + return *result; + } + } + + switch (message) { + case WM_FONTCHANGE: + flutter_controller_->engine()->ReloadSystemFonts(); + break; + } + + return Win32Window::MessageHandler(hwnd, message, wparam, lparam); +} diff --git a/animations/step_05_c/windows/runner/flutter_window.h b/animations/step_05_c/windows/runner/flutter_window.h new file mode 100644 index 0000000000..6da0652f05 --- /dev/null +++ b/animations/step_05_c/windows/runner/flutter_window.h @@ -0,0 +1,33 @@ +#ifndef RUNNER_FLUTTER_WINDOW_H_ +#define RUNNER_FLUTTER_WINDOW_H_ + +#include +#include + +#include + +#include "win32_window.h" + +// A window that does nothing but host a Flutter view. +class FlutterWindow : public Win32Window { + public: + // Creates a new FlutterWindow hosting a Flutter view running |project|. + explicit FlutterWindow(const flutter::DartProject& project); + virtual ~FlutterWindow(); + + protected: + // Win32Window: + bool OnCreate() override; + void OnDestroy() override; + LRESULT MessageHandler(HWND window, UINT const message, WPARAM const wparam, + LPARAM const lparam) noexcept override; + + private: + // The project to run. + flutter::DartProject project_; + + // The Flutter instance hosted by this window. + std::unique_ptr flutter_controller_; +}; + +#endif // RUNNER_FLUTTER_WINDOW_H_ diff --git a/animations/step_05_c/windows/runner/main.cpp b/animations/step_05_c/windows/runner/main.cpp new file mode 100644 index 0000000000..cc4e09820c --- /dev/null +++ b/animations/step_05_c/windows/runner/main.cpp @@ -0,0 +1,43 @@ +#include +#include +#include + +#include "flutter_window.h" +#include "utils.h" + +int APIENTRY wWinMain(_In_ HINSTANCE instance, _In_opt_ HINSTANCE prev, + _In_ wchar_t *command_line, _In_ int show_command) { + // Attach to console when present (e.g., 'flutter run') or create a + // new console when running with a debugger. + if (!::AttachConsole(ATTACH_PARENT_PROCESS) && ::IsDebuggerPresent()) { + CreateAndAttachConsole(); + } + + // Initialize COM, so that it is available for use in the library and/or + // plugins. + ::CoInitializeEx(nullptr, COINIT_APARTMENTTHREADED); + + flutter::DartProject project(L"data"); + + std::vector command_line_arguments = + GetCommandLineArguments(); + + project.set_dart_entrypoint_arguments(std::move(command_line_arguments)); + + FlutterWindow window(project); + Win32Window::Point origin(10, 10); + Win32Window::Size size(1280, 720); + if (!window.Create(L"quiz", origin, size)) { + return EXIT_FAILURE; + } + window.SetQuitOnClose(true); + + ::MSG msg; + while (::GetMessage(&msg, nullptr, 0, 0)) { + ::TranslateMessage(&msg); + ::DispatchMessage(&msg); + } + + ::CoUninitialize(); + return EXIT_SUCCESS; +} diff --git a/animations/step_05_c/windows/runner/resource.h b/animations/step_05_c/windows/runner/resource.h new file mode 100644 index 0000000000..66a65d1e4a --- /dev/null +++ b/animations/step_05_c/windows/runner/resource.h @@ -0,0 +1,16 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Visual C++ generated include file. +// Used by Runner.rc +// +#define IDI_APP_ICON 101 + +// Next default values for new objects +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS +#define _APS_NEXT_RESOURCE_VALUE 102 +#define _APS_NEXT_COMMAND_VALUE 40001 +#define _APS_NEXT_CONTROL_VALUE 1001 +#define _APS_NEXT_SYMED_VALUE 101 +#endif +#endif diff --git a/animations/step_05_c/windows/runner/resources/app_icon.ico b/animations/step_05_c/windows/runner/resources/app_icon.ico new file mode 100644 index 0000000000000000000000000000000000000000..c04e20caf6370ebb9253ad831cc31de4a9c965f6 GIT binary patch literal 33772 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 literal 0 HcmV?d00001 diff --git a/animations/step_05_c/windows/runner/runner.exe.manifest b/animations/step_05_c/windows/runner/runner.exe.manifest new file mode 100644 index 0000000000..153653e8d6 --- /dev/null +++ b/animations/step_05_c/windows/runner/runner.exe.manifest @@ -0,0 +1,14 @@ + + + + + PerMonitorV2 + + + + + + + + + diff --git a/animations/step_05_c/windows/runner/utils.cpp b/animations/step_05_c/windows/runner/utils.cpp new file mode 100644 index 0000000000..3a0b46511a --- /dev/null +++ b/animations/step_05_c/windows/runner/utils.cpp @@ -0,0 +1,65 @@ +#include "utils.h" + +#include +#include +#include +#include + +#include + +void CreateAndAttachConsole() { + if (::AllocConsole()) { + FILE *unused; + if (freopen_s(&unused, "CONOUT$", "w", stdout)) { + _dup2(_fileno(stdout), 1); + } + if (freopen_s(&unused, "CONOUT$", "w", stderr)) { + _dup2(_fileno(stdout), 2); + } + std::ios::sync_with_stdio(); + FlutterDesktopResyncOutputStreams(); + } +} + +std::vector GetCommandLineArguments() { + // Convert the UTF-16 command line arguments to UTF-8 for the Engine to use. + int argc; + wchar_t** argv = ::CommandLineToArgvW(::GetCommandLineW(), &argc); + if (argv == nullptr) { + return std::vector(); + } + + std::vector command_line_arguments; + + // Skip the first argument as it's the binary name. + for (int i = 1; i < argc; i++) { + command_line_arguments.push_back(Utf8FromUtf16(argv[i])); + } + + ::LocalFree(argv); + + return command_line_arguments; +} + +std::string Utf8FromUtf16(const wchar_t* utf16_string) { + if (utf16_string == nullptr) { + return std::string(); + } + unsigned int target_length = ::WideCharToMultiByte( + CP_UTF8, WC_ERR_INVALID_CHARS, utf16_string, + -1, nullptr, 0, nullptr, nullptr) + -1; // remove the trailing null character + int input_length = (int)wcslen(utf16_string); + std::string utf8_string; + if (target_length == 0 || target_length > utf8_string.max_size()) { + return utf8_string; + } + utf8_string.resize(target_length); + int converted_length = ::WideCharToMultiByte( + CP_UTF8, WC_ERR_INVALID_CHARS, utf16_string, + input_length, utf8_string.data(), target_length, nullptr, nullptr); + if (converted_length == 0) { + return std::string(); + } + return utf8_string; +} diff --git a/animations/step_05_c/windows/runner/utils.h b/animations/step_05_c/windows/runner/utils.h new file mode 100644 index 0000000000..3879d54755 --- /dev/null +++ b/animations/step_05_c/windows/runner/utils.h @@ -0,0 +1,19 @@ +#ifndef RUNNER_UTILS_H_ +#define RUNNER_UTILS_H_ + +#include +#include + +// Creates a console for the process, and redirects stdout and stderr to +// it for both the runner and the Flutter library. +void CreateAndAttachConsole(); + +// Takes a null-terminated wchar_t* encoded in UTF-16 and returns a std::string +// encoded in UTF-8. Returns an empty std::string on failure. +std::string Utf8FromUtf16(const wchar_t* utf16_string); + +// Gets the command line arguments passed in as a std::vector, +// encoded in UTF-8. Returns an empty std::vector on failure. +std::vector GetCommandLineArguments(); + +#endif // RUNNER_UTILS_H_ diff --git a/animations/step_05_c/windows/runner/win32_window.cpp b/animations/step_05_c/windows/runner/win32_window.cpp new file mode 100644 index 0000000000..60608d0fe5 --- /dev/null +++ b/animations/step_05_c/windows/runner/win32_window.cpp @@ -0,0 +1,288 @@ +#include "win32_window.h" + +#include +#include + +#include "resource.h" + +namespace { + +/// Window attribute that enables dark mode window decorations. +/// +/// Redefined in case the developer's machine has a Windows SDK older than +/// version 10.0.22000.0. +/// See: https://docs.microsoft.com/windows/win32/api/dwmapi/ne-dwmapi-dwmwindowattribute +#ifndef DWMWA_USE_IMMERSIVE_DARK_MODE +#define DWMWA_USE_IMMERSIVE_DARK_MODE 20 +#endif + +constexpr const wchar_t kWindowClassName[] = L"FLUTTER_RUNNER_WIN32_WINDOW"; + +/// Registry key for app theme preference. +/// +/// A value of 0 indicates apps should use dark mode. A non-zero or missing +/// value indicates apps should use light mode. +constexpr const wchar_t kGetPreferredBrightnessRegKey[] = + L"Software\\Microsoft\\Windows\\CurrentVersion\\Themes\\Personalize"; +constexpr const wchar_t kGetPreferredBrightnessRegValue[] = L"AppsUseLightTheme"; + +// The number of Win32Window objects that currently exist. +static int g_active_window_count = 0; + +using EnableNonClientDpiScaling = BOOL __stdcall(HWND hwnd); + +// Scale helper to convert logical scaler values to physical using passed in +// scale factor +int Scale(int source, double scale_factor) { + return static_cast(source * scale_factor); +} + +// Dynamically loads the |EnableNonClientDpiScaling| from the User32 module. +// This API is only needed for PerMonitor V1 awareness mode. +void EnableFullDpiSupportIfAvailable(HWND hwnd) { + HMODULE user32_module = LoadLibraryA("User32.dll"); + if (!user32_module) { + return; + } + auto enable_non_client_dpi_scaling = + reinterpret_cast( + GetProcAddress(user32_module, "EnableNonClientDpiScaling")); + if (enable_non_client_dpi_scaling != nullptr) { + enable_non_client_dpi_scaling(hwnd); + } + FreeLibrary(user32_module); +} + +} // namespace + +// Manages the Win32Window's window class registration. +class WindowClassRegistrar { + public: + ~WindowClassRegistrar() = default; + + // Returns the singleton registrar instance. + static WindowClassRegistrar* GetInstance() { + if (!instance_) { + instance_ = new WindowClassRegistrar(); + } + return instance_; + } + + // Returns the name of the window class, registering the class if it hasn't + // previously been registered. + const wchar_t* GetWindowClass(); + + // Unregisters the window class. Should only be called if there are no + // instances of the window. + void UnregisterWindowClass(); + + private: + WindowClassRegistrar() = default; + + static WindowClassRegistrar* instance_; + + bool class_registered_ = false; +}; + +WindowClassRegistrar* WindowClassRegistrar::instance_ = nullptr; + +const wchar_t* WindowClassRegistrar::GetWindowClass() { + if (!class_registered_) { + WNDCLASS window_class{}; + window_class.hCursor = LoadCursor(nullptr, IDC_ARROW); + window_class.lpszClassName = kWindowClassName; + window_class.style = CS_HREDRAW | CS_VREDRAW; + window_class.cbClsExtra = 0; + window_class.cbWndExtra = 0; + window_class.hInstance = GetModuleHandle(nullptr); + window_class.hIcon = + LoadIcon(window_class.hInstance, MAKEINTRESOURCE(IDI_APP_ICON)); + window_class.hbrBackground = 0; + window_class.lpszMenuName = nullptr; + window_class.lpfnWndProc = Win32Window::WndProc; + RegisterClass(&window_class); + class_registered_ = true; + } + return kWindowClassName; +} + +void WindowClassRegistrar::UnregisterWindowClass() { + UnregisterClass(kWindowClassName, nullptr); + class_registered_ = false; +} + +Win32Window::Win32Window() { + ++g_active_window_count; +} + +Win32Window::~Win32Window() { + --g_active_window_count; + Destroy(); +} + +bool Win32Window::Create(const std::wstring& title, + const Point& origin, + const Size& size) { + Destroy(); + + const wchar_t* window_class = + WindowClassRegistrar::GetInstance()->GetWindowClass(); + + const POINT target_point = {static_cast(origin.x), + static_cast(origin.y)}; + HMONITOR monitor = MonitorFromPoint(target_point, MONITOR_DEFAULTTONEAREST); + UINT dpi = FlutterDesktopGetDpiForMonitor(monitor); + double scale_factor = dpi / 96.0; + + HWND window = CreateWindow( + window_class, title.c_str(), WS_OVERLAPPEDWINDOW, + Scale(origin.x, scale_factor), Scale(origin.y, scale_factor), + Scale(size.width, scale_factor), Scale(size.height, scale_factor), + nullptr, nullptr, GetModuleHandle(nullptr), this); + + if (!window) { + return false; + } + + UpdateTheme(window); + + return OnCreate(); +} + +bool Win32Window::Show() { + return ShowWindow(window_handle_, SW_SHOWNORMAL); +} + +// static +LRESULT CALLBACK Win32Window::WndProc(HWND const window, + UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept { + if (message == WM_NCCREATE) { + auto window_struct = reinterpret_cast(lparam); + SetWindowLongPtr(window, GWLP_USERDATA, + reinterpret_cast(window_struct->lpCreateParams)); + + auto that = static_cast(window_struct->lpCreateParams); + EnableFullDpiSupportIfAvailable(window); + that->window_handle_ = window; + } else if (Win32Window* that = GetThisFromHandle(window)) { + return that->MessageHandler(window, message, wparam, lparam); + } + + return DefWindowProc(window, message, wparam, lparam); +} + +LRESULT +Win32Window::MessageHandler(HWND hwnd, + UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept { + switch (message) { + case WM_DESTROY: + window_handle_ = nullptr; + Destroy(); + if (quit_on_close_) { + PostQuitMessage(0); + } + return 0; + + case WM_DPICHANGED: { + auto newRectSize = reinterpret_cast(lparam); + LONG newWidth = newRectSize->right - newRectSize->left; + LONG newHeight = newRectSize->bottom - newRectSize->top; + + SetWindowPos(hwnd, nullptr, newRectSize->left, newRectSize->top, newWidth, + newHeight, SWP_NOZORDER | SWP_NOACTIVATE); + + return 0; + } + case WM_SIZE: { + RECT rect = GetClientArea(); + if (child_content_ != nullptr) { + // Size and position the child window. + MoveWindow(child_content_, rect.left, rect.top, rect.right - rect.left, + rect.bottom - rect.top, TRUE); + } + return 0; + } + + case WM_ACTIVATE: + if (child_content_ != nullptr) { + SetFocus(child_content_); + } + return 0; + + case WM_DWMCOLORIZATIONCOLORCHANGED: + UpdateTheme(hwnd); + return 0; + } + + return DefWindowProc(window_handle_, message, wparam, lparam); +} + +void Win32Window::Destroy() { + OnDestroy(); + + if (window_handle_) { + DestroyWindow(window_handle_); + window_handle_ = nullptr; + } + if (g_active_window_count == 0) { + WindowClassRegistrar::GetInstance()->UnregisterWindowClass(); + } +} + +Win32Window* Win32Window::GetThisFromHandle(HWND const window) noexcept { + return reinterpret_cast( + GetWindowLongPtr(window, GWLP_USERDATA)); +} + +void Win32Window::SetChildContent(HWND content) { + child_content_ = content; + SetParent(content, window_handle_); + RECT frame = GetClientArea(); + + MoveWindow(content, frame.left, frame.top, frame.right - frame.left, + frame.bottom - frame.top, true); + + SetFocus(child_content_); +} + +RECT Win32Window::GetClientArea() { + RECT frame; + GetClientRect(window_handle_, &frame); + return frame; +} + +HWND Win32Window::GetHandle() { + return window_handle_; +} + +void Win32Window::SetQuitOnClose(bool quit_on_close) { + quit_on_close_ = quit_on_close; +} + +bool Win32Window::OnCreate() { + // No-op; provided for subclasses. + return true; +} + +void Win32Window::OnDestroy() { + // No-op; provided for subclasses. +} + +void Win32Window::UpdateTheme(HWND const window) { + DWORD light_mode; + DWORD light_mode_size = sizeof(light_mode); + LSTATUS result = RegGetValue(HKEY_CURRENT_USER, kGetPreferredBrightnessRegKey, + kGetPreferredBrightnessRegValue, + RRF_RT_REG_DWORD, nullptr, &light_mode, + &light_mode_size); + + if (result == ERROR_SUCCESS) { + BOOL enable_dark_mode = light_mode == 0; + DwmSetWindowAttribute(window, DWMWA_USE_IMMERSIVE_DARK_MODE, + &enable_dark_mode, sizeof(enable_dark_mode)); + } +} diff --git a/animations/step_05_c/windows/runner/win32_window.h b/animations/step_05_c/windows/runner/win32_window.h new file mode 100644 index 0000000000..e901dde684 --- /dev/null +++ b/animations/step_05_c/windows/runner/win32_window.h @@ -0,0 +1,102 @@ +#ifndef RUNNER_WIN32_WINDOW_H_ +#define RUNNER_WIN32_WINDOW_H_ + +#include + +#include +#include +#include + +// A class abstraction for a high DPI-aware Win32 Window. Intended to be +// inherited from by classes that wish to specialize with custom +// rendering and input handling +class Win32Window { + public: + struct Point { + unsigned int x; + unsigned int y; + Point(unsigned int x, unsigned int y) : x(x), y(y) {} + }; + + struct Size { + unsigned int width; + unsigned int height; + Size(unsigned int width, unsigned int height) + : width(width), height(height) {} + }; + + Win32Window(); + virtual ~Win32Window(); + + // Creates a win32 window with |title| that is positioned and sized using + // |origin| and |size|. New windows are created on the default monitor. Window + // sizes are specified to the OS in physical pixels, hence to ensure a + // consistent size this function will scale the inputted width and height as + // as appropriate for the default monitor. The window is invisible until + // |Show| is called. Returns true if the window was created successfully. + bool Create(const std::wstring& title, const Point& origin, const Size& size); + + // Show the current window. Returns true if the window was successfully shown. + bool Show(); + + // Release OS resources associated with window. + void Destroy(); + + // Inserts |content| into the window tree. + void SetChildContent(HWND content); + + // Returns the backing Window handle to enable clients to set icon and other + // window properties. Returns nullptr if the window has been destroyed. + HWND GetHandle(); + + // If true, closing this window will quit the application. + void SetQuitOnClose(bool quit_on_close); + + // Return a RECT representing the bounds of the current client area. + RECT GetClientArea(); + + protected: + // Processes and route salient window messages for mouse handling, + // size change and DPI. Delegates handling of these to member overloads that + // inheriting classes can handle. + virtual LRESULT MessageHandler(HWND window, + UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept; + + // Called when CreateAndShow is called, allowing subclass window-related + // setup. Subclasses should return false if setup fails. + virtual bool OnCreate(); + + // Called when Destroy is called. + virtual void OnDestroy(); + + private: + friend class WindowClassRegistrar; + + // OS callback called by message pump. Handles the WM_NCCREATE message which + // is passed when the non-client area is being created and enables automatic + // non-client DPI scaling so that the non-client area automatically + // responds to changes in DPI. All other messages are handled by + // MessageHandler. + static LRESULT CALLBACK WndProc(HWND const window, + UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept; + + // Retrieves a class instance pointer for |window| + static Win32Window* GetThisFromHandle(HWND const window) noexcept; + + // Update the window frame's theme to match the system theme. + static void UpdateTheme(HWND const window); + + bool quit_on_close_ = false; + + // window handle for top level window. + HWND window_handle_ = nullptr; + + // window handle for hosted content. + HWND child_content_ = nullptr; +}; + +#endif // RUNNER_WIN32_WINDOW_H_ diff --git a/animations/step_05_d/.gitignore b/animations/step_05_d/.gitignore new file mode 100644 index 0000000000..79c113f9b5 --- /dev/null +++ b/animations/step_05_d/.gitignore @@ -0,0 +1,45 @@ +# Miscellaneous +*.class +*.log +*.pyc +*.swp +.DS_Store +.atom/ +.build/ +.buildlog/ +.history +.svn/ +.swiftpm/ +migrate_working_dir/ + +# IntelliJ related +*.iml +*.ipr +*.iws +.idea/ + +# The .vscode folder contains launch configuration and tasks you configure in +# VS Code which you may wish to be included in version control, so this line +# is commented out by default. +#.vscode/ + +# Flutter/Dart/Pub related +**/doc/api/ +**/ios/Flutter/.last_build_id +.dart_tool/ +.flutter-plugins +.flutter-plugins-dependencies +.pub-cache/ +.pub/ +/build/ + +# Symbolication related +app.*.symbols + +# Obfuscation related +app.*.map.json + +# Android Studio will place build artifacts here +/android/app/debug +/android/app/profile +/android/app/release diff --git a/animations/step_05_d/analysis_options.yaml b/animations/step_05_d/analysis_options.yaml new file mode 100644 index 0000000000..03de3bd700 --- /dev/null +++ b/animations/step_05_d/analysis_options.yaml @@ -0,0 +1,13 @@ +include: package:flutter_lints/flutter.yaml + +analyzer: + errors: + unused_field: ignore + +linter: + rules: + annotate_overrides: false + prefer_const_constructors: false + prefer_const_constructors_in_immutables: false + prefer_const_declarations: false + prefer_const_literals_to_create_immutables: false diff --git a/animations/step_05_d/android/.gitignore b/animations/step_05_d/android/.gitignore new file mode 100644 index 0000000000..55afd919c6 --- /dev/null +++ b/animations/step_05_d/android/.gitignore @@ -0,0 +1,13 @@ +gradle-wrapper.jar +/.gradle +/captures/ +/gradlew +/gradlew.bat +/local.properties +GeneratedPluginRegistrant.java + +# Remember to never publicly share your keystore. +# See https://flutter.dev/to/reference-keystore +key.properties +**/*.keystore +**/*.jks diff --git a/animations/step_05_d/android/app/build.gradle.kts b/animations/step_05_d/android/app/build.gradle.kts new file mode 100644 index 0000000000..31d285867f --- /dev/null +++ b/animations/step_05_d/android/app/build.gradle.kts @@ -0,0 +1,44 @@ +plugins { + id("com.android.application") + id("kotlin-android") + // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. + id("dev.flutter.flutter-gradle-plugin") +} + +android { + namespace = "com.example.quiz" + compileSdk = flutter.compileSdkVersion + ndkVersion = flutter.ndkVersion + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 + } + + kotlinOptions { + jvmTarget = JavaVersion.VERSION_1_8.toString() + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId = "com.example.quiz" + // You can update the following values to match your application needs. + // For more information, see: https://flutter.dev/to/review-gradle-config. + minSdk = flutter.minSdkVersion + targetSdk = flutter.targetSdkVersion + versionCode = flutter.versionCode + versionName = flutter.versionName + } + + buildTypes { + release { + // TODO: Add your own signing config for the release build. + // Signing with the debug keys for now, so `flutter run --release` works. + signingConfig = signingConfigs.getByName("debug") + } + } +} + +flutter { + source = "../.." +} diff --git a/animations/step_05_d/android/app/src/debug/AndroidManifest.xml b/animations/step_05_d/android/app/src/debug/AndroidManifest.xml new file mode 100644 index 0000000000..399f6981d5 --- /dev/null +++ b/animations/step_05_d/android/app/src/debug/AndroidManifest.xml @@ -0,0 +1,7 @@ + + + + diff --git a/animations/step_05_d/android/app/src/main/AndroidManifest.xml b/animations/step_05_d/android/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000000..34076b28b3 --- /dev/null +++ b/animations/step_05_d/android/app/src/main/AndroidManifest.xml @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/animations/step_05_d/android/app/src/main/kotlin/com/example/quiz/MainActivity.kt b/animations/step_05_d/android/app/src/main/kotlin/com/example/quiz/MainActivity.kt new file mode 100644 index 0000000000..87081bb97c --- /dev/null +++ b/animations/step_05_d/android/app/src/main/kotlin/com/example/quiz/MainActivity.kt @@ -0,0 +1,5 @@ +package com.example.quiz + +import io.flutter.embedding.android.FlutterActivity + +class MainActivity: FlutterActivity() diff --git a/animations/step_05_d/android/app/src/main/res/drawable-v21/launch_background.xml b/animations/step_05_d/android/app/src/main/res/drawable-v21/launch_background.xml new file mode 100644 index 0000000000..f74085f3f6 --- /dev/null +++ b/animations/step_05_d/android/app/src/main/res/drawable-v21/launch_background.xml @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/animations/step_05_d/android/app/src/main/res/drawable/launch_background.xml b/animations/step_05_d/android/app/src/main/res/drawable/launch_background.xml new file mode 100644 index 0000000000..304732f884 --- /dev/null +++ b/animations/step_05_d/android/app/src/main/res/drawable/launch_background.xml @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/animations/step_05_d/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/animations/step_05_d/android/app/src/main/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..db77bb4b7b0906d62b1847e87f15cdcacf6a4f29 GIT binary patch literal 544 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY3?!3`olAj~WQl7;NpOBzNqJ&XDuZK6ep0G} zXKrG8YEWuoN@d~6R2!h8bpbvhu0Wd6uZuB!w&u2PAxD2eNXD>P5D~Wn-+_Wa#27Xc zC?Zj|6r#X(-D3u$NCt}(Ms06KgJ4FxJVv{GM)!I~&n8Bnc94O7-Hd)cjDZswgC;Qs zO=b+9!WcT8F?0rF7!Uys2bs@gozCP?z~o%U|N3vA*22NaGQG zlg@K`O_XuxvZ&Ks^m&R!`&1=spLvfx7oGDKDwpwW`#iqdw@AL`7MR}m`rwr|mZgU`8P7SBkL78fFf!WnuYWm$5Z0 zNXhDbCv&49sM544K|?c)WrFfiZvCi9h0O)B3Pgg&ebxsLQ05GG~ AQ2+n{ literal 0 HcmV?d00001 diff --git a/animations/step_05_d/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/animations/step_05_d/android/app/src/main/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..17987b79bb8a35cc66c3c1fd44f5a5526c1b78be GIT binary patch literal 442 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA3?vioaBc-sk|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*D5Xx&nMcT!A!W`0S9QKQy;}1Cl^CgaH=;G9cpY;r$Q>i*pfB zP2drbID<_#qf;rPZx^FqH)F_D#*k@@q03KywUtLX8Ua?`H+NMzkczFPK3lFz@i_kW%1NOn0|D2I9n9wzH8m|-tHjsw|9>@K=iMBhxvkv6m8Y-l zytQ?X=U+MF$@3 zt`~i=@j|6y)RWMK--}M|=T`o&^Ni>IoWKHEbBXz7?A@mgWoL>!*SXo`SZH-*HSdS+ yn*9;$7;m`l>wYBC5bq;=U}IMqLzqbYCidGC!)_gkIk_C@Uy!y&wkt5C($~2D>~)O*cj@FGjOCM)M>_ixfudOh)?xMu#Fs z#}Y=@YDTwOM)x{K_j*Q;dPdJ?Mz0n|pLRx{4n|)f>SXlmV)XB04CrSJn#dS5nK2lM zrZ9#~WelCp7&e13Y$jvaEXHskn$2V!!DN-nWS__6T*l;H&Fopn?A6HZ-6WRLFP=R` zqG+CE#d4|IbyAI+rJJ`&x9*T`+a=p|0O(+s{UBcyZdkhj=yS1>AirP+0R;mf2uMgM zC}@~JfByORAh4SyRgi&!(cja>F(l*O+nd+@4m$|6K6KDn_&uvCpV23&>G9HJp{xgg zoq1^2_p9@|WEo z*X_Uko@K)qYYv~>43eQGMdbiGbo>E~Q& zrYBH{QP^@Sti!`2)uG{irBBq@y*$B zi#&(U-*=fp74j)RyIw49+0MRPMRU)+a2r*PJ$L5roHt2$UjExCTZSbq%V!HeS7J$N zdG@vOZB4v_lF7Plrx+hxo7(fCV&}fHq)$ literal 0 HcmV?d00001 diff --git a/animations/step_05_d/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/animations/step_05_d/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..d5f1c8d34e7a88e3f88bea192c3a370d44689c3c GIT binary patch literal 1031 zcmeAS@N?(olHy`uVBq!ia0vp^6F``Q8Ax83A=Cw=BuiW)N`mv#O3D+9QW+dm@{>{( zJaZG%Q-e|yQz{EjrrIztFa`(sgt!6~Yi|1%a`XoT0ojZ}lNrNjb9xjc(B0U1_% zz5^97Xt*%oq$rQy4?0GKNfJ44uvxI)gC`h-NZ|&0-7(qS@?b!5r36oQ}zyZrNO3 zMO=Or+<~>+A&uN&E!^Sl+>xE!QC-|oJv`ApDhqC^EWD|@=#J`=d#Xzxs4ah}w&Jnc z$|q_opQ^2TrnVZ0o~wh<3t%W&flvYGe#$xqda2bR_R zvPYgMcHgjZ5nSA^lJr%;<&0do;O^tDDh~=pIxA#coaCY>&N%M2^tq^U%3DB@ynvKo}b?yu-bFc-u0JHzced$sg7S3zqI(2 z#Km{dPr7I=pQ5>FuK#)QwK?Y`E`B?nP+}U)I#c1+FM*1kNvWG|a(TpksZQ3B@sD~b zpQ2)*V*TdwjFOtHvV|;OsiDqHi=6%)o4b!)x$)%9pGTsE z-JL={-Ffv+T87W(Xpooq<`r*VzWQcgBN$$`u}f>-ZQI1BB8ykN*=e4rIsJx9>z}*o zo~|9I;xof literal 0 HcmV?d00001 diff --git a/animations/step_05_d/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/animations/step_05_d/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..4d6372eebdb28e45604e46eeda8dd24651419bc0 GIT binary patch literal 1443 zcmb`G{WsKk6vsdJTdFg%tJav9_E4vzrOaqkWF|A724Nly!y+?N9`YV6wZ}5(X(D_N(?!*n3`|_r0Hc?=PQw&*vnU?QTFY zB_MsH|!j$PP;I}?dppoE_gA(4uc!jV&0!l7_;&p2^pxNo>PEcNJv za5_RT$o2Mf!<+r?&EbHH6nMoTsDOa;mN(wv8RNsHpG)`^ymG-S5By8=l9iVXzN_eG%Xg2@Xeq76tTZ*dGh~Lo9vl;Zfs+W#BydUw zCkZ$o1LqWQO$FC9aKlLl*7x9^0q%0}$OMlp@Kk_jHXOjofdePND+j!A{q!8~Jn+s3 z?~~w@4?egS02}8NuulUA=L~QQfm;MzCGd)XhiftT;+zFO&JVyp2mBww?;QByS_1w! zrQlx%{^cMj0|Bo1FjwY@Q8?Hx0cIPF*@-ZRFpPc#bBw{5@tD(5%sClzIfl8WU~V#u zm5Q;_F!wa$BSpqhN>W@2De?TKWR*!ujY;Yylk_X5#~V!L*Gw~;$%4Q8~Mad z@`-kG?yb$a9cHIApZDVZ^U6Xkp<*4rU82O7%}0jjHlK{id@?-wpN*fCHXyXh(bLt* zPc}H-x0e4E&nQ>y%B-(EL=9}RyC%MyX=upHuFhAk&MLbsF0LP-q`XnH78@fT+pKPW zu72MW`|?8ht^tz$iC}ZwLp4tB;Q49K!QCF3@!iB1qOI=?w z7In!}F~ij(18UYUjnbmC!qKhPo%24?8U1x{7o(+?^Zu0Hx81|FuS?bJ0jgBhEMzf< zCgUq7r2OCB(`XkKcN-TL>u5y#dD6D!)5W?`O5)V^>jb)P)GBdy%t$uUMpf$SNV31$ zb||OojAbvMP?T@$h_ZiFLFVHDmbyMhJF|-_)HX3%m=CDI+ID$0^C>kzxprBW)hw(v zr!Gmda);ICoQyhV_oP5+C%?jcG8v+D@9f?Dk*!BxY}dazmrT@64UrP3hlslANK)bq z$67n83eh}OeW&SV@HG95P|bjfqJ7gw$e+`Hxo!4cx`jdK1bJ>YDSpGKLPZ^1cv$ek zIB?0S<#tX?SJCLWdMd{-ME?$hc7A$zBOdIJ)4!KcAwb=VMov)nK;9z>x~rfT1>dS+ zZ6#`2v@`jgbqq)P22H)Tx2CpmM^o1$B+xT6`(v%5xJ(?j#>Q$+rx_R|7TzDZe{J6q zG1*EcU%tE?!kO%^M;3aM6JN*LAKUVb^xz8-Pxo#jR5(-KBeLJvA@-gxNHx0M-ZJLl z;#JwQoh~9V?`UVo#}{6ka@II>++D@%KqGpMdlQ}?9E*wFcf5(#XQnP$Dk5~%iX^>f z%$y;?M0BLp{O3a(-4A?ewryHrrD%cx#Q^%KY1H zNre$ve+vceSLZcNY4U(RBX&)oZn*Py()h)XkE?PL$!bNb{N5FVI2Y%LKEm%yvpyTP z(1P?z~7YxD~Rf<(a@_y` literal 0 HcmV?d00001 diff --git a/animations/step_05_d/android/app/src/main/res/values-night/styles.xml b/animations/step_05_d/android/app/src/main/res/values-night/styles.xml new file mode 100644 index 0000000000..06952be745 --- /dev/null +++ b/animations/step_05_d/android/app/src/main/res/values-night/styles.xml @@ -0,0 +1,18 @@ + + + + + + + diff --git a/animations/step_05_d/android/app/src/main/res/values/styles.xml b/animations/step_05_d/android/app/src/main/res/values/styles.xml new file mode 100644 index 0000000000..cb1ef88056 --- /dev/null +++ b/animations/step_05_d/android/app/src/main/res/values/styles.xml @@ -0,0 +1,18 @@ + + + + + + + diff --git a/animations/step_05_d/android/app/src/profile/AndroidManifest.xml b/animations/step_05_d/android/app/src/profile/AndroidManifest.xml new file mode 100644 index 0000000000..399f6981d5 --- /dev/null +++ b/animations/step_05_d/android/app/src/profile/AndroidManifest.xml @@ -0,0 +1,7 @@ + + + + diff --git a/animations/step_05_d/android/build.gradle.kts b/animations/step_05_d/android/build.gradle.kts new file mode 100644 index 0000000000..89176ef44e --- /dev/null +++ b/animations/step_05_d/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/animations/step_05_d/android/gradle.properties b/animations/step_05_d/android/gradle.properties new file mode 100644 index 0000000000..f018a61817 --- /dev/null +++ b/animations/step_05_d/android/gradle.properties @@ -0,0 +1,3 @@ +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError +android.useAndroidX=true +android.enableJetifier=true diff --git a/animations/step_05_d/android/gradle/wrapper/gradle-wrapper.properties b/animations/step_05_d/android/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000000..afa1e8eb0a --- /dev/null +++ b/animations/step_05_d/android/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,5 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip diff --git a/animations/step_05_d/android/settings.gradle.kts b/animations/step_05_d/android/settings.gradle.kts new file mode 100644 index 0000000000..a439442c20 --- /dev/null +++ b/animations/step_05_d/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.0" apply false + id("org.jetbrains.kotlin.android") version "1.8.22" apply false +} + +include(":app") diff --git a/animations/step_05_d/ios/.gitignore b/animations/step_05_d/ios/.gitignore new file mode 100644 index 0000000000..7a7f9873ad --- /dev/null +++ b/animations/step_05_d/ios/.gitignore @@ -0,0 +1,34 @@ +**/dgph +*.mode1v3 +*.mode2v3 +*.moved-aside +*.pbxuser +*.perspectivev3 +**/*sync/ +.sconsign.dblite +.tags* +**/.vagrant/ +**/DerivedData/ +Icon? +**/Pods/ +**/.symlinks/ +profile +xcuserdata +**/.generated/ +Flutter/App.framework +Flutter/Flutter.framework +Flutter/Flutter.podspec +Flutter/Generated.xcconfig +Flutter/ephemeral/ +Flutter/app.flx +Flutter/app.zip +Flutter/flutter_assets/ +Flutter/flutter_export_environment.sh +ServiceDefinitions.json +Runner/GeneratedPluginRegistrant.* + +# Exceptions to above rules. +!default.mode1v3 +!default.mode2v3 +!default.pbxuser +!default.perspectivev3 diff --git a/animations/step_05_d/ios/Flutter/AppFrameworkInfo.plist b/animations/step_05_d/ios/Flutter/AppFrameworkInfo.plist new file mode 100644 index 0000000000..7c56964006 --- /dev/null +++ b/animations/step_05_d/ios/Flutter/AppFrameworkInfo.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + App + CFBundleIdentifier + io.flutter.flutter.app + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + App + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1.0 + MinimumOSVersion + 12.0 + + diff --git a/animations/step_05_d/ios/Flutter/Debug.xcconfig b/animations/step_05_d/ios/Flutter/Debug.xcconfig new file mode 100644 index 0000000000..592ceee85b --- /dev/null +++ b/animations/step_05_d/ios/Flutter/Debug.xcconfig @@ -0,0 +1 @@ +#include "Generated.xcconfig" diff --git a/animations/step_05_d/ios/Flutter/Release.xcconfig b/animations/step_05_d/ios/Flutter/Release.xcconfig new file mode 100644 index 0000000000..592ceee85b --- /dev/null +++ b/animations/step_05_d/ios/Flutter/Release.xcconfig @@ -0,0 +1 @@ +#include "Generated.xcconfig" diff --git a/animations/step_05_d/ios/Runner.xcodeproj/project.pbxproj b/animations/step_05_d/ios/Runner.xcodeproj/project.pbxproj new file mode 100644 index 0000000000..faef24d87a --- /dev/null +++ b/animations/step_05_d/ios/Runner.xcodeproj/project.pbxproj @@ -0,0 +1,616 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 54; + objects = { + +/* Begin PBXBuildFile section */ + 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; + 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; + 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; + 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; + 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; + 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; + 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 331C8085294A63A400263BE5 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 97C146E61CF9000F007C117D /* Project object */; + proxyType = 1; + remoteGlobalIDString = 97C146ED1CF9000F007C117D; + remoteInfo = Runner; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 9705A1C41CF9048500538489 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; + 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; + 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; + 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; + 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; + 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; + 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; + 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; + 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 97C146EB1CF9000F007C117D /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 331C8082294A63A400263BE5 /* RunnerTests */ = { + isa = PBXGroup; + children = ( + 331C807B294A618700263BE5 /* RunnerTests.swift */, + ); + path = RunnerTests; + sourceTree = ""; + }; + 9740EEB11CF90186004384FC /* Flutter */ = { + isa = PBXGroup; + children = ( + 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */, + 9740EEB21CF90195004384FC /* Debug.xcconfig */, + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, + 9740EEB31CF90195004384FC /* Generated.xcconfig */, + ); + name = Flutter; + sourceTree = ""; + }; + 97C146E51CF9000F007C117D = { + isa = PBXGroup; + children = ( + 9740EEB11CF90186004384FC /* Flutter */, + 97C146F01CF9000F007C117D /* Runner */, + 97C146EF1CF9000F007C117D /* Products */, + 331C8082294A63A400263BE5 /* RunnerTests */, + ); + sourceTree = ""; + }; + 97C146EF1CF9000F007C117D /* Products */ = { + isa = PBXGroup; + children = ( + 97C146EE1CF9000F007C117D /* Runner.app */, + 331C8081294A63A400263BE5 /* RunnerTests.xctest */, + ); + name = Products; + sourceTree = ""; + }; + 97C146F01CF9000F007C117D /* Runner */ = { + isa = PBXGroup; + children = ( + 97C146FA1CF9000F007C117D /* Main.storyboard */, + 97C146FD1CF9000F007C117D /* Assets.xcassets */, + 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */, + 97C147021CF9000F007C117D /* Info.plist */, + 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */, + 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */, + 74858FAE1ED2DC5600515810 /* AppDelegate.swift */, + 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */, + ); + path = Runner; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 331C8080294A63A400263BE5 /* RunnerTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; + buildPhases = ( + 331C807D294A63A400263BE5 /* Sources */, + 331C807F294A63A400263BE5 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 331C8086294A63A400263BE5 /* PBXTargetDependency */, + ); + name = RunnerTests; + productName = RunnerTests; + productReference = 331C8081294A63A400263BE5 /* RunnerTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; + 97C146ED1CF9000F007C117D /* Runner */ = { + isa = PBXNativeTarget; + buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; + buildPhases = ( + 9740EEB61CF901F6004384FC /* Run Script */, + 97C146EA1CF9000F007C117D /* Sources */, + 97C146EB1CF9000F007C117D /* Frameworks */, + 97C146EC1CF9000F007C117D /* Resources */, + 9705A1C41CF9048500538489 /* Embed Frameworks */, + 3B06AD1E1E4923F5004D2608 /* Thin Binary */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = Runner; + productName = Runner; + productReference = 97C146EE1CF9000F007C117D /* Runner.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 97C146E61CF9000F007C117D /* Project object */ = { + isa = PBXProject; + attributes = { + BuildIndependentTargetsInParallel = YES; + LastUpgradeCheck = 1510; + ORGANIZATIONNAME = ""; + TargetAttributes = { + 331C8080294A63A400263BE5 = { + CreatedOnToolsVersion = 14.0; + TestTargetID = 97C146ED1CF9000F007C117D; + }; + 97C146ED1CF9000F007C117D = { + CreatedOnToolsVersion = 7.3.1; + LastSwiftMigration = 1100; + }; + }; + }; + buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 97C146E51CF9000F007C117D; + productRefGroup = 97C146EF1CF9000F007C117D /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 97C146ED1CF9000F007C117D /* Runner */, + 331C8080294A63A400263BE5 /* RunnerTests */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 331C807F294A63A400263BE5 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 97C146EC1CF9000F007C117D /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */, + 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */, + 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */, + 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", + ); + name = "Thin Binary"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + }; + 9740EEB61CF901F6004384FC /* Run Script */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Run Script"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 331C807D294A63A400263BE5 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 97C146EA1CF9000F007C117D /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */, + 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 331C8086294A63A400263BE5 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 97C146ED1CF9000F007C117D /* Runner */; + targetProxy = 331C8085294A63A400263BE5 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + 97C146FA1CF9000F007C117D /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 97C146FB1CF9000F007C117D /* Base */, + ); + name = Main.storyboard; + sourceTree = ""; + }; + 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 97C147001CF9000F007C117D /* Base */, + ); + name = LaunchScreen.storyboard; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 249021D3217E4FDB00AE95B9 /* Profile */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + SUPPORTED_PLATFORMS = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Profile; + }; + 249021D4217E4FDB00AE95B9 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + ENABLE_BITCODE = NO; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.example.quiz; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; + SWIFT_VERSION = 5.0; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Profile; + }; + 331C8088294A63A400263BE5 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.quiz.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; + }; + name = Debug; + }; + 331C8089294A63A400263BE5 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.quiz.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; + }; + name = Release; + }; + 331C808A294A63A400263BE5 /* Profile */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.quiz.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; + }; + name = Profile; + }; + 97C147031CF9000F007C117D /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 97C147041CF9000F007C117D /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + SUPPORTED_PLATFORMS = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 97C147061CF9000F007C117D /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + ENABLE_BITCODE = NO; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.example.quiz; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Debug; + }; + 97C147071CF9000F007C117D /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + ENABLE_BITCODE = NO; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.example.quiz; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; + SWIFT_VERSION = 5.0; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 331C8088294A63A400263BE5 /* Debug */, + 331C8089294A63A400263BE5 /* Release */, + 331C808A294A63A400263BE5 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 97C147031CF9000F007C117D /* Debug */, + 97C147041CF9000F007C117D /* Release */, + 249021D3217E4FDB00AE95B9 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 97C147061CF9000F007C117D /* Debug */, + 97C147071CF9000F007C117D /* Release */, + 249021D4217E4FDB00AE95B9 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 97C146E61CF9000F007C117D /* Project object */; +} diff --git a/animations/step_05_d/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/animations/step_05_d/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000000..919434a625 --- /dev/null +++ b/animations/step_05_d/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/animations/step_05_d/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/animations/step_05_d/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000000..18d981003d --- /dev/null +++ b/animations/step_05_d/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/animations/step_05_d/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/animations/step_05_d/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings new file mode 100644 index 0000000000..f9b0d7c5ea --- /dev/null +++ b/animations/step_05_d/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings @@ -0,0 +1,8 @@ + + + + + PreviewsEnabled + + + diff --git a/animations/step_05_d/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/animations/step_05_d/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme new file mode 100644 index 0000000000..8e3ca5dfe1 --- /dev/null +++ b/animations/step_05_d/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -0,0 +1,98 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/animations/step_05_d/ios/Runner.xcworkspace/contents.xcworkspacedata b/animations/step_05_d/ios/Runner.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000000..1d526a16ed --- /dev/null +++ b/animations/step_05_d/ios/Runner.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/animations/step_05_d/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/animations/step_05_d/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000000..18d981003d --- /dev/null +++ b/animations/step_05_d/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/animations/step_05_d/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/animations/step_05_d/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings new file mode 100644 index 0000000000..f9b0d7c5ea --- /dev/null +++ b/animations/step_05_d/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings @@ -0,0 +1,8 @@ + + + + + PreviewsEnabled + + + diff --git a/animations/step_05_d/ios/Runner/AppDelegate.swift b/animations/step_05_d/ios/Runner/AppDelegate.swift new file mode 100644 index 0000000000..626664468b --- /dev/null +++ b/animations/step_05_d/ios/Runner/AppDelegate.swift @@ -0,0 +1,13 @@ +import Flutter +import UIKit + +@main +@objc class AppDelegate: FlutterAppDelegate { + override func application( + _ application: UIApplication, + didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? + ) -> Bool { + GeneratedPluginRegistrant.register(with: self) + return super.application(application, didFinishLaunchingWithOptions: launchOptions) + } +} diff --git a/animations/step_05_d/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/animations/step_05_d/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000000..d36b1fab2d --- /dev/null +++ b/animations/step_05_d/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,122 @@ +{ + "images" : [ + { + "size" : "20x20", + "idiom" : "iphone", + "filename" : "Icon-App-20x20@2x.png", + "scale" : "2x" + }, + { + "size" : "20x20", + "idiom" : "iphone", + "filename" : "Icon-App-20x20@3x.png", + "scale" : "3x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "Icon-App-29x29@1x.png", + "scale" : "1x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "Icon-App-29x29@2x.png", + "scale" : "2x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "Icon-App-29x29@3x.png", + "scale" : "3x" + }, + { + "size" : "40x40", + "idiom" : "iphone", + "filename" : "Icon-App-40x40@2x.png", + "scale" : "2x" + }, + { + "size" : "40x40", + "idiom" : "iphone", + "filename" : "Icon-App-40x40@3x.png", + "scale" : "3x" + }, + { + "size" : "60x60", + "idiom" : "iphone", + "filename" : "Icon-App-60x60@2x.png", + "scale" : "2x" + }, + { + "size" : "60x60", + "idiom" : "iphone", + "filename" : "Icon-App-60x60@3x.png", + "scale" : "3x" + }, + { + "size" : "20x20", + "idiom" : "ipad", + "filename" : "Icon-App-20x20@1x.png", + "scale" : "1x" + }, + { + "size" : "20x20", + "idiom" : "ipad", + "filename" : "Icon-App-20x20@2x.png", + "scale" : "2x" + }, + { + "size" : "29x29", + "idiom" : "ipad", + "filename" : "Icon-App-29x29@1x.png", + "scale" : "1x" + }, + { + "size" : "29x29", + "idiom" : "ipad", + "filename" : "Icon-App-29x29@2x.png", + "scale" : "2x" + }, + { + "size" : "40x40", + "idiom" : "ipad", + "filename" : "Icon-App-40x40@1x.png", + "scale" : "1x" + }, + { + "size" : "40x40", + "idiom" : "ipad", + "filename" : "Icon-App-40x40@2x.png", + "scale" : "2x" + }, + { + "size" : "76x76", + "idiom" : "ipad", + "filename" : "Icon-App-76x76@1x.png", + "scale" : "1x" + }, + { + "size" : "76x76", + "idiom" : "ipad", + "filename" : "Icon-App-76x76@2x.png", + "scale" : "2x" + }, + { + "size" : "83.5x83.5", + "idiom" : "ipad", + "filename" : "Icon-App-83.5x83.5@2x.png", + "scale" : "2x" + }, + { + "size" : "1024x1024", + "idiom" : "ios-marketing", + "filename" : "Icon-App-1024x1024@1x.png", + "scale" : "1x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} diff --git a/animations/step_05_d/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png b/animations/step_05_d/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..dc9ada4725e9b0ddb1deab583e5b5102493aa332 GIT binary patch literal 10932 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 literal 0 HcmV?d00001 diff --git a/animations/step_05_d/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png b/animations/step_05_d/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..797d452e458972bab9d994556c8305db4c827017 GIT binary patch literal 406 zcmV;H0crk;P))>cdjpWt&rLJgVp-t?DREyuq1A%0Z4)6_WsQ7{nzjN zo!X zGXV)2i3kcZIL~_j>uIKPK_zib+3T+Nt3Mb&Br)s)UIaA}@p{wDda>7=Q|mGRp7pqY zkJ!7E{MNz$9nOwoVqpFb)}$IP24Wn2JJ=Cw(!`OXJBr45rP>>AQr$6c7slJWvbpNW z@KTwna6d?PP>hvXCcp=4F;=GR@R4E7{4VU^0p4F>v^#A|>07*qoM6N<$f*5nx ACIA2c literal 0 HcmV?d00001 diff --git a/animations/step_05_d/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png b/animations/step_05_d/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..6ed2d933e1120817fe9182483a228007b18ab6ae GIT binary patch literal 450 zcmV;z0X_bSP)iGWQ_5NJQ_~rNh*z)}eT%KUb z`7gNk0#AwF^#0T0?hIa^`~Ck;!}#m+_uT050aTR(J!bU#|IzRL%^UsMS#KsYnTF*!YeDOytlP4VhV?b} z%rz_<=#CPc)tU1MZTq~*2=8~iZ!lSa<{9b@2Jl;?IEV8)=fG217*|@)CCYgFze-x? zIFODUIA>nWKpE+bn~n7;-89sa>#DR>TSlqWk*!2hSN6D~Qb#VqbP~4Fk&m`@1$JGr zXPIdeRE&b2Thd#{MtDK$px*d3-Wx``>!oimf%|A-&-q*6KAH)e$3|6JV%HX{Hig)k suLT-RhftRq8b9;(V=235Wa|I=027H2wCDra;{X5v07*qoM6N<$f;9x^2LJ#7 literal 0 HcmV?d00001 diff --git a/animations/step_05_d/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png b/animations/step_05_d/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..4cd7b0099ca80c806f8fe495613e8d6c69460d76 GIT binary patch literal 282 zcmV+#0p(^bcu7P-R4C8Q z&e;xxFbF_Vrezo%_kH*OKhshZ6BFpG-Y1e10`QXJKbND7AMQ&cMj60B5TNObaZxYybcN07*qoM6N<$g3m;S%K!iX literal 0 HcmV?d00001 diff --git a/animations/step_05_d/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png b/animations/step_05_d/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..fe730945a01f64a61e2235dbe3f45b08f7729182 GIT binary patch literal 462 zcmV;<0WtoGP)-}iV`2<;=$?g5M=KQbZ{F&YRNy7Nn@%_*5{gvDM0aKI4?ESmw z{NnZg)A0R`+4?NF_RZexyVB&^^ZvN!{I28tr{Vje;QNTz`dG&Jz0~Ek&f2;*Z7>B|cg}xYpxEFY+0YrKLF;^Q+-HreN0P{&i zK~zY`?b7ECf-n?@;d<&orQ*Q7KoR%4|C>{W^h6@&01>0SKS`dn{Q}GT%Qj_{PLZ_& zs`MFI#j-(>?bvdZ!8^xTwlY{qA)T4QLbY@j(!YJ7aXJervHy6HaG_2SB`6CC{He}f zHVw(fJWApwPq!6VY7r1w-Fs)@ox~N+q|w~e;JI~C4Vf^@d>Wvj=fl`^u9x9wd9 zR%3*Q+)t%S!MU_`id^@&Y{y7-r98lZX0?YrHlfmwb?#}^1b{8g&KzmkE(L>Z&)179 zp<)v6Y}pRl100G2FL_t(o!|l{-Q-VMg#&MKg7c{O0 z2wJImOS3Gy*Z2Qifdv~JYOp;v+U)a|nLoc7hNH;I$;lzDt$}rkaFw1mYK5_0Q(Sut zvbEloxON7$+HSOgC9Z8ltuC&0OSF!-mXv5caV>#bc3@hBPX@I$58-z}(ZZE!t-aOG zpjNkbau@>yEzH(5Yj4kZiMH32XI!4~gVXNnjAvRx;Sdg^`>2DpUEwoMhTs_st8pKG z(%SHyHdU&v%f36~uERh!bd`!T2dw;z6PrOTQ7Vt*#9F2uHlUVnb#ev_o^fh}Dzmq} zWtlk35}k=?xj28uO|5>>$yXadTUE@@IPpgH`gJ~Ro4>jd1IF|(+IX>8M4Ps{PNvmI zNj4D+XgN83gPt_Gm}`Ybv{;+&yu-C(Grdiahmo~BjG-l&mWM+{e5M1sm&=xduwgM9 z`8OEh`=F3r`^E{n_;%9weN{cf2%7=VzC@cYj+lg>+3|D|_1C@{hcU(DyQG_BvBWe? zvTv``=%b1zrol#=R`JB)>cdjpWt&rLJgVp-t?DREyuq1A%0Z4)6_WsQ7{nzjN zo!X zGXV)2i3kcZIL~_j>uIKPK_zib+3T+Nt3Mb&Br)s)UIaA}@p{wDda>7=Q|mGRp7pqY zkJ!7E{MNz$9nOwoVqpFb)}$IP24Wn2JJ=Cw(!`OXJBr45rP>>AQr$6c7slJWvbpNW z@KTwna6d?PP>hvXCcp=4F;=GR@R4E7{4VU^0p4F>v^#A|>07*qoM6N<$f*5nx ACIA2c literal 0 HcmV?d00001 diff --git a/animations/step_05_d/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png b/animations/step_05_d/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..502f463a9bc882b461c96aadf492d1729e49e725 GIT binary patch literal 586 zcmV-Q0=4~#P)+}#`wDE{8-2Mebf5<{{PqV{TgVcv*r8?UZ3{-|G?_}T*&y;@cqf{ z{Q*~+qr%%p!1pS*_Uicl#q9lc(D`!D`LN62sNwq{oYw(Wmhk)k<@f$!$@ng~_5)Ru z0Z)trIA5^j{DIW^c+vT2%lW+2<(RtE2wR;4O@)Tm`Xr*?A(qYoM}7i5Yxw>D(&6ou zxz!_Xr~yNF+waPe00049Nkl*;a!v6h%{rlvIH#gW3s8p;bFr=l}mRqpW2h zw=OA%hdyL~z+UHOzl0eKhEr$YYOL-c-%Y<)=j?(bzDweB7{b+%_ypvm_cG{SvM=DK zhv{K@m>#Bw>2W$eUI#iU)Wdgs8Y3U+A$Gd&{+j)d)BmGKx+43U_!tik_YlN)>$7G! zhkE!s;%oku3;IwG3U^2kw?z+HM)jB{@zFhK8P#KMSytSthr+4!c(5c%+^UBn`0X*2 zy3(k600_CSZj?O$Qu%&$;|TGUJrptR(HzyIx>5E(2r{eA(<6t3e3I0B)7d6s7?Z5J zZ!rtKvA{MiEBm&KFtoifx>5P^Z=vl)95XJn()aS5%ad(s?4-=Tkis9IGu{`Fy8r+H07*qoM6N<$f20Z)wqMt%V?S?~D#06};F zA3KcL`Wb+>5ObvgQIG&ig8(;V04hz?@cqy3{mSh8o!|U|)cI!1_+!fWH@o*8vh^CU z^ws0;(c$gI+2~q^tO#GDHf@=;DncUw00J^eL_t(&-tE|HQ`%4vfZ;WsBqu-$0nu1R zq^Vj;p$clf^?twn|KHO+IGt^q#a3X?w9dXC@*yxhv&l}F322(8Y1&=P&I}~G@#h6; z1CV9ecD9ZEe87{{NtI*)_aJ<`kJa z?5=RBtFF50s;jQLFil-`)m2wrb=6h(&brpj%nG_U&ut~$?8Rokzxi8zJoWr#2dto5 zOX_URcc<1`Iky+jc;A%Vzx}1QU{2$|cKPom2Vf1{8m`vja4{F>HS?^Nc^rp}xo+Nh zxd}eOm`fm3@MQC1< zIk&aCjb~Yh%5+Yq0`)D;q{#-Uqlv*o+Oor zE!I71Z@ASH3grl8&P^L0WpavHoP|UX4e?!igT`4?AZk$hu*@%6WJ;zDOGlw7kj@ zY5!B-0ft0f?Lgb>C;$Ke07*qoM6N<$f~t1N9smFU literal 0 HcmV?d00001 diff --git a/animations/step_05_d/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png b/animations/step_05_d/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..0ec303439225b78712f49115768196d8d76f6790 GIT binary patch literal 862 zcmV-k1EKthP)20Z)wqMt%V?S?~D#06};F zA3KcL`Wb+>5ObvgQIG&ig8(;V04hz?@cqy3{mSh8o!|U|)cI!1_+!fWH@o*8vh^CU z^ws0;(c$gI+2~q^tO#GDHf@=;DncUw00J^eL_t(&-tE|HQ`%4vfZ;WsBqu-$0nu1R zq^Vj;p$clf^?twn|KHO+IGt^q#a3X?w9dXC@*yxhv&l}F322(8Y1&=P&I}~G@#h6; z1CV9ecD9ZEe87{{NtI*)_aJ<`kJa z?5=RBtFF50s;jQLFil-`)m2wrb=6h(&brpj%nG_U&ut~$?8Rokzxi8zJoWr#2dto5 zOX_URcc<1`Iky+jc;A%Vzx}1QU{2$|cKPom2Vf1{8m`vja4{F>HS?^Nc^rp}xo+Nh zxd}eOm`fm3@MQC1< zIk&aCjb~Yh%5+Yq0`)D;q{#-Uqlv*o+Oor zE!I71Z@ASH3grl8&P^L0WpavHoP|UX4e?!igT`4?AZk$hu*@%6WJ;zDOGlw7kj@ zY5!B-0ft0f?Lgb>C;$Ke07*qoM6N<$f~t1N9smFU literal 0 HcmV?d00001 diff --git a/animations/step_05_d/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png b/animations/step_05_d/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..e9f5fea27c705180eb716271f41b582e76dcbd90 GIT binary patch literal 1674 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 literal 0 HcmV?d00001 diff --git a/animations/step_05_d/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png b/animations/step_05_d/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..0467bf12aa4d28f374bb26596605a46dcbb3e7c8 GIT binary patch literal 1418 zcmV;51$Fv~P)q zKfU)WzW*n(@|xWGCA9ScMt*e9`2kdxPQ&&>|-UCa7_51w+ zLUsW@ZzZSW0y$)Hp~e9%PvP|a03ks1`~K?q{u;6NC8*{AOqIUq{CL&;p56Lf$oQGq z^={4hPQv)y=I|4n+?>7Fim=dxt1 z2H+Dm+1+fh+IF>G0SjJMkQQre1x4|G*Z==(Ot&kCnUrL4I(rf(ucITwmuHf^hXiJT zkdTm&kdTm&kdTm&kdP`esgWG0BcWCVkVZ&2dUwN`cgM8QJb`Z7Z~e<&Yj2(}>Tmf` zm1{eLgw!b{bXkjWbF%dTkTZEJWyWOb##Lfw4EK2}<0d6%>AGS{po>WCOy&f$Tay_> z?NBlkpo@s-O;0V%Y_Xa-G#_O08q5LR*~F%&)}{}r&L%Sbs8AS4t7Y0NEx*{soY=0MZExqA5XHQkqi#4gW3 zqODM^iyZl;dvf)-bOXtOru(s)Uc7~BFx{w-FK;2{`VA?(g&@3z&bfLFyctOH!cVsF z7IL=fo-qBndRUm;kAdXR4e6>k-z|21AaN%ubeVrHl*<|s&Ax@W-t?LR(P-24A5=>a z*R9#QvjzF8n%@1Nw@?CG@6(%>+-0ASK~jEmCV|&a*7-GKT72W<(TbSjf)&Eme6nGE z>Gkj4Sq&2e+-G%|+NM8OOm5zVl9{Z8Dd8A5z3y8mZ=4Bv4%>as_{9cN#bm~;h>62( zdqY93Zy}v&c4n($Vv!UybR8ocs7#zbfX1IY-*w~)p}XyZ-SFC~4w>BvMVr`dFbelV{lLL0bx7@*ZZdebr3`sP;? zVImji)kG)(6Juv0lz@q`F!k1FE;CQ(D0iG$wchPbKZQELlsZ#~rt8#90Y_Xh&3U-< z{s<&cCV_1`^TD^ia9!*mQDq& zn2{r`j};V|uV%_wsP!zB?m%;FeaRe+X47K0e+KE!8C{gAWF8)lCd1u1%~|M!XNRvw zvtqy3iz0WSpWdhn6$hP8PaRBmp)q`#PCA`Vd#Tc$@f1tAcM>f_I@bC)hkI9|o(Iqv zo}Piadq!j76}004RBio<`)70k^`K1NK)q>w?p^C6J2ZC!+UppiK6&y3Kmbv&O!oYF z34$0Z;QO!JOY#!`qyGH<3Pd}Pt@q*A0V=3SVtWKRR8d8Z&@)3qLPA19LPA19LPEUC YUoZo%k(ykuW&i*H07*qoM6N<$f+CH{y8r+H literal 0 HcmV?d00001 diff --git a/animations/step_05_d/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json b/animations/step_05_d/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json new file mode 100644 index 0000000000..0bedcf2fd4 --- /dev/null +++ b/animations/step_05_d/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "LaunchImage.png", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "LaunchImage@2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "filename" : "LaunchImage@3x.png", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} diff --git a/animations/step_05_d/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png b/animations/step_05_d/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png new file mode 100644 index 0000000000000000000000000000000000000000..9da19eacad3b03bb08bbddbbf4ac48dd78b3d838 GIT binary patch literal 68 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx0wlM}@Gt=>Zci7-kcv6Uzs@r-FtIZ-&5|)J Q1PU{Fy85}Sb4q9e0B4a5jsO4v literal 0 HcmV?d00001 diff --git a/animations/step_05_d/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png b/animations/step_05_d/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..9da19eacad3b03bb08bbddbbf4ac48dd78b3d838 GIT binary patch literal 68 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx0wlM}@Gt=>Zci7-kcv6Uzs@r-FtIZ-&5|)J Q1PU{Fy85}Sb4q9e0B4a5jsO4v literal 0 HcmV?d00001 diff --git a/animations/step_05_d/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png b/animations/step_05_d/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..9da19eacad3b03bb08bbddbbf4ac48dd78b3d838 GIT binary patch literal 68 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx0wlM}@Gt=>Zci7-kcv6Uzs@r-FtIZ-&5|)J Q1PU{Fy85}Sb4q9e0B4a5jsO4v literal 0 HcmV?d00001 diff --git a/animations/step_05_d/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md b/animations/step_05_d/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md new file mode 100644 index 0000000000..89c2725b70 --- /dev/null +++ b/animations/step_05_d/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md @@ -0,0 +1,5 @@ +# Launch Screen Assets + +You can customize the launch screen with your own desired assets by replacing the image files in this directory. + +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. \ No newline at end of file diff --git a/animations/step_05_d/ios/Runner/Base.lproj/LaunchScreen.storyboard b/animations/step_05_d/ios/Runner/Base.lproj/LaunchScreen.storyboard new file mode 100644 index 0000000000..f2e259c7c9 --- /dev/null +++ b/animations/step_05_d/ios/Runner/Base.lproj/LaunchScreen.storyboard @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/animations/step_05_d/ios/Runner/Base.lproj/Main.storyboard b/animations/step_05_d/ios/Runner/Base.lproj/Main.storyboard new file mode 100644 index 0000000000..f3c28516fb --- /dev/null +++ b/animations/step_05_d/ios/Runner/Base.lproj/Main.storyboard @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/animations/step_05_d/ios/Runner/Info.plist b/animations/step_05_d/ios/Runner/Info.plist new file mode 100644 index 0000000000..1a0d38e408 --- /dev/null +++ b/animations/step_05_d/ios/Runner/Info.plist @@ -0,0 +1,49 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleDisplayName + Quiz + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + quiz + CFBundlePackageType + APPL + CFBundleShortVersionString + $(FLUTTER_BUILD_NAME) + CFBundleSignature + ???? + CFBundleVersion + $(FLUTTER_BUILD_NUMBER) + LSRequiresIPhoneOS + + UILaunchStoryboardName + LaunchScreen + UIMainStoryboardFile + Main + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + CADisableMinimumFrameDurationOnPhone + + UIApplicationSupportsIndirectInputEvents + + + diff --git a/animations/step_05_d/ios/Runner/Runner-Bridging-Header.h b/animations/step_05_d/ios/Runner/Runner-Bridging-Header.h new file mode 100644 index 0000000000..308a2a560b --- /dev/null +++ b/animations/step_05_d/ios/Runner/Runner-Bridging-Header.h @@ -0,0 +1 @@ +#import "GeneratedPluginRegistrant.h" diff --git a/animations/step_05_d/ios/RunnerTests/RunnerTests.swift b/animations/step_05_d/ios/RunnerTests/RunnerTests.swift new file mode 100644 index 0000000000..86a7c3b1b6 --- /dev/null +++ b/animations/step_05_d/ios/RunnerTests/RunnerTests.swift @@ -0,0 +1,12 @@ +import Flutter +import UIKit +import XCTest + +class RunnerTests: XCTestCase { + + func testExample() { + // If you add code to the Runner application, consider adding tests here. + // See https://developer.apple.com/documentation/xctest for more information about using XCTest. + } + +} diff --git a/animations/step_05_d/lib/flip_effect.dart b/animations/step_05_d/lib/flip_effect.dart new file mode 100644 index 0000000000..953c479ae9 --- /dev/null +++ b/animations/step_05_d/lib/flip_effect.dart @@ -0,0 +1,85 @@ +import 'package:flutter/widgets.dart'; +import 'dart:math' as math; + +class CardFlipEffect extends StatefulWidget { + final Widget child; + final Duration duration; + final double delayAmount; + + const CardFlipEffect({ + super.key, + required this.child, + required this.duration, + required this.delayAmount, + }); + + @override + State createState() => _CardFlipEffectState(); +} + +class _CardFlipEffectState extends State + with SingleTickerProviderStateMixin { + late final AnimationController _animationController; + Widget? _previousChild; + late final Animation _animationWithDelay; + + @override + void initState() { + super.initState(); + + _animationController = AnimationController( + vsync: this, + duration: widget.duration * (widget.delayAmount + 1), + ); + + _animationController.addListener(() { + if (_animationController.value == 1) { + _animationController.reset(); + } + }); + + _animationWithDelay = TweenSequence([ + if (widget.delayAmount > 0) + TweenSequenceItem( + tween: ConstantTween(0.0), + weight: widget.delayAmount, + ), + TweenSequenceItem(tween: Tween(begin: 0.0, end: 1.0), weight: 1.0), + ]).animate(_animationController); + } + + @override + void didUpdateWidget(covariant CardFlipEffect oldWidget) { + super.didUpdateWidget(oldWidget); + + if (widget.child.key != oldWidget.child.key) { + _handleChildChanged(widget.child, oldWidget.child); + } + } + + void _handleChildChanged(Widget newChild, Widget previousChild) { + _previousChild = previousChild; + _animationController.forward(); + } + + @override + Widget build(BuildContext context) { + return AnimatedBuilder( + animation: _animationWithDelay, + builder: (context, child) { + return Transform( + alignment: Alignment.center, + transform: + Matrix4.identity()..rotateX(_animationWithDelay.value * math.pi), + child: + _animationController.isAnimating + ? _animationWithDelay.value < 0.5 + ? _previousChild + : Transform.flip(flipY: true, child: widget.child) + : widget.child, + ); + }, + child: widget.child, + ); + } +} diff --git a/animations/step_05_d/lib/home_screen.dart b/animations/step_05_d/lib/home_screen.dart new file mode 100644 index 0000000000..e01ea3d1c8 --- /dev/null +++ b/animations/step_05_d/lib/home_screen.dart @@ -0,0 +1,41 @@ +import 'package:flutter/material.dart'; +import 'question_screen.dart'; + +class HomeScreen extends StatelessWidget { + const HomeScreen({super.key}); + + @override + Widget build(BuildContext context) { + return Scaffold( + body: Center( + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + Text('✏️', style: Theme.of(context).textTheme.displayLarge), + Text( + 'Flutter Quiz', + style: Theme.of(context).textTheme.displayLarge!.copyWith( + fontWeight: FontWeight.w700, + color: Theme.of(context).colorScheme.onPrimaryFixedVariant, + ), + ), + ElevatedButton( + onPressed: () { + // Show the question screen to start the game + Navigator.push( + context, + MaterialPageRoute( + builder: (context) { + return const QuestionScreen(); + }, + ), + ); + }, + child: const Text('New Game'), + ), + ], + ), + ), + ); + } +} diff --git a/animations/step_05_d/lib/main.dart b/animations/step_05_d/lib/main.dart new file mode 100644 index 0000000000..9ad4855719 --- /dev/null +++ b/animations/step_05_d/lib/main.dart @@ -0,0 +1,33 @@ +import 'package:animations/animations.dart'; +import 'package:flutter/material.dart'; + +import 'home_screen.dart'; + +void main() { + runApp(MainApp()); +} + +class MainApp extends StatelessWidget { + const MainApp({super.key}); + + @override + Widget build(BuildContext context) { + return MaterialApp( + debugShowCheckedModeBanner: false, + theme: ThemeData( + colorScheme: ColorScheme.fromSeed(seedColor: Colors.blue), + useMaterial3: true, + pageTransitionsTheme: PageTransitionsTheme( + builders: { + TargetPlatform.android: PredictiveBackPageTransitionsBuilder(), + TargetPlatform.iOS: FadeThroughPageTransitionsBuilder(), + TargetPlatform.macOS: FadeThroughPageTransitionsBuilder(), + TargetPlatform.windows: FadeThroughPageTransitionsBuilder(), + TargetPlatform.linux: FadeThroughPageTransitionsBuilder(), + }, + ), + ), + home: HomeScreen(), + ); + } +} diff --git a/animations/step_05_d/lib/model.dart b/animations/step_05_d/lib/model.dart new file mode 100644 index 0000000000..56666d11dc --- /dev/null +++ b/animations/step_05_d/lib/model.dart @@ -0,0 +1,52 @@ +import 'dart:math' as math; + +class Question { + final String question; + final List possibleAnswers; + final int correctAnswer; + Question(this.question, this.possibleAnswers, this.correctAnswer); +} + +class QuestionBank { + final List _questions = _createQuestions(); + + bool get hasNextQuestion => _questions.isNotEmpty; + int get remainingQuestions => _questions.length; + + Question? getRandomQuestion() { + if (_questions.isEmpty) { + return null; + } + + var i = math.Random().nextInt(_questions.length); + var question = _questions[i]; + + _questions.removeAt(i); + return question; + } +} + +List _createQuestions() { + return [ + Question( + 'What class used to create custom explicit animations in Flutter?', + ['AnimationController', 'AnimatedWidget', 'AnimatedBuilder', 'Tween'], + 0, + ), + Question( + 'Which widget is used to rebuild its child whenever an animation changes?', + [ + 'AnimatedContainer', + 'AnimatedBuilder', + 'AnimatedSwitcher', + 'AnimatedOpacity', + ], + 1, + ), + Question( + 'What class is used to define the start and end values for an animation?', + ['Tween', 'Curve', 'AnimationController', 'AnimatedWidget'], + 0, + ), + ]; +} diff --git a/animations/step_05_d/lib/question_screen.dart b/animations/step_05_d/lib/question_screen.dart new file mode 100644 index 0000000000..6166e900c9 --- /dev/null +++ b/animations/step_05_d/lib/question_screen.dart @@ -0,0 +1,245 @@ +import 'package:animations/animations.dart'; +import 'package:flutter/material.dart'; +import 'flip_effect.dart'; +import 'scoreboard.dart'; +import 'view_model.dart'; + +class QuestionScreen extends StatefulWidget { + const QuestionScreen({super.key}); + + @override + State createState() => _QuestionScreenState(); +} + +class _QuestionScreenState extends State { + late final QuizViewModel viewModel = QuizViewModel( + onGameOver: _handleGameOver, + ); + VoidCallback? _showGameOverScreen; + + @override + Widget build(BuildContext context) { + return ListenableBuilder( + listenable: viewModel, + builder: (context, child) { + return Scaffold( + appBar: AppBar( + actions: [ + TextButton( + onPressed: + viewModel.hasNextQuestion && viewModel.didAnswerQuestion + ? () { + viewModel.getNextQuestion(); + } + : null, + child: const Text('Next'), + ), + ], + ), + body: Center( + child: Column( + children: [ + QuestionCard( + onChangeOpenContainer: _handleChangeOpenContainer, + question: viewModel.currentQuestion?.question, + viewModel: viewModel, + ), + Spacer(), + AnswerCards( + onTapped: (index) { + viewModel.checkAnswer(index); + }, + answers: viewModel.currentQuestion?.possibleAnswers ?? [], + correctAnswer: + viewModel.didAnswerQuestion + ? viewModel.currentQuestion?.correctAnswer + : null, + ), + StatusBar(viewModel: viewModel), + ], + ), + ), + ); + }, + ); + } + + void _handleChangeOpenContainer(VoidCallback openContainer) { + _showGameOverScreen = openContainer; + } + + void _handleGameOver() { + if (_showGameOverScreen != null) { + _showGameOverScreen!(); + } + } +} + +class GameOverScreen extends StatelessWidget { + final QuizViewModel viewModel; + const GameOverScreen({required this.viewModel, super.key}); + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar(automaticallyImplyLeading: false), + body: Center( + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Scoreboard( + score: viewModel.score, + totalQuestions: viewModel.totalQuestions, + ), + Text('You Win!', style: Theme.of(context).textTheme.displayLarge), + Text( + 'Score: ${viewModel.score} / ${viewModel.totalQuestions}', + style: Theme.of(context).textTheme.displaySmall, + ), + ElevatedButton( + child: Text('OK'), + onPressed: () { + Navigator.pop(context); + // Navigator.popUntil( + // context, (route) => route.isFirst); + }, + ), + ], + ), + ), + ); + } +} + +class QuestionCard extends StatelessWidget { + final String? question; + + const QuestionCard({ + required this.onChangeOpenContainer, + required this.question, + required this.viewModel, + super.key, + }); + + final ValueChanged onChangeOpenContainer; + final QuizViewModel viewModel; + + static const _backgroundColor = Color(0xfff2f3fa); + + @override + Widget build(BuildContext context) { + return PageTransitionSwitcher( + duration: const Duration(milliseconds: 200), + transitionBuilder: (Widget child, animation, secondaryAnimation) { + return FadeThroughTransition( + animation: animation, + secondaryAnimation: secondaryAnimation, + child: child, + ); + }, + child: OpenContainer( + key: ValueKey(question), + tappable: false, + closedColor: _backgroundColor, + closedShape: const RoundedRectangleBorder( + borderRadius: BorderRadius.all(Radius.circular(12.0)), + ), + closedElevation: 4, + closedBuilder: (context, openContainer) { + onChangeOpenContainer(openContainer); + return ColoredBox( + color: _backgroundColor, + child: Padding( + padding: const EdgeInsets.all(16.0), + child: Text( + question ?? "", + style: Theme.of(context).textTheme.displaySmall, + ), + ), + ); + }, + openBuilder: (context, closeContainer) { + return GameOverScreen(viewModel: viewModel); + }, + ), + ); + } +} + +class AnswerCards extends StatelessWidget { + final List answers; + final ValueChanged onTapped; + final int? correctAnswer; + + const AnswerCards({ + required this.answers, + required this.onTapped, + required this.correctAnswer, + super.key, + }); + + @override + Widget build(BuildContext context) { + return GridView.count( + shrinkWrap: true, + crossAxisCount: 2, + childAspectRatio: 5 / 2, + children: List.generate(answers.length, (index) { + var color = Theme.of(context).colorScheme.primaryContainer; + if (correctAnswer == index) { + color = Theme.of(context).colorScheme.tertiaryContainer; + } + + return CardFlipEffect( + delayAmount: index.toDouble() / 2, + duration: const Duration(milliseconds: 300), + child: Card.filled( + key: ValueKey(answers[index]), + color: color, + elevation: 2, + margin: const EdgeInsets.all(8), + clipBehavior: Clip.hardEdge, + child: InkWell( + onTap: () => onTapped(index), + child: Padding( + padding: const EdgeInsets.all(16.0), + child: Center( + child: Text( + answers.length > index ? answers[index] : "", + style: Theme.of(context).textTheme.titleMedium, + overflow: TextOverflow.clip, + ), + ), + ), + ), + ), + ); + }), + ); + } +} + +class StatusBar extends StatelessWidget { + final QuizViewModel viewModel; + + const StatusBar({required this.viewModel, super.key}); + + @override + Widget build(BuildContext context) { + return Card( + elevation: 4, + child: Padding( + padding: EdgeInsets.all(8.0), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceAround, + children: [ + Scoreboard( + score: viewModel.score, + totalQuestions: viewModel.totalQuestions, + ), + ], + ), + ), + ); + } +} diff --git a/animations/step_05_d/lib/scoreboard.dart b/animations/step_05_d/lib/scoreboard.dart new file mode 100644 index 0000000000..765711fe87 --- /dev/null +++ b/animations/step_05_d/lib/scoreboard.dart @@ -0,0 +1,56 @@ +import 'package:flutter/material.dart'; + +class Scoreboard extends StatelessWidget { + final int score; + final int totalQuestions; + + const Scoreboard({ + super.key, + required this.score, + required this.totalQuestions, + }); + + @override + Widget build(BuildContext context) { + return Padding( + padding: const EdgeInsets.all(8.0), + child: Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + for (var i = 0; i < totalQuestions; i++) + AnimatedStar(isActive: score > i), + ], + ), + ); + } +} + +class AnimatedStar extends StatelessWidget { + final bool isActive; + final Duration _duration = const Duration(milliseconds: 1000); + final Color _deactivatedColor = Colors.grey.shade400; + final Color _activatedColor = Colors.yellow.shade700; + final Curve _curve = Curves.elasticOut; + + AnimatedStar({super.key, required this.isActive}); + + @override + Widget build(BuildContext context) { + return AnimatedScale( + scale: isActive ? 1.0 : 0.5, + curve: _curve, + duration: _duration, + child: TweenAnimationBuilder( + curve: _curve, + duration: _duration, + tween: ColorTween( + begin: _deactivatedColor, + end: isActive ? _activatedColor : _deactivatedColor, + ), + builder: (context, value, child) { + return Icon(Icons.star, size: 50, color: value); + }, + ), + ); + } +} diff --git a/animations/step_05_d/lib/view_model.dart b/animations/step_05_d/lib/view_model.dart new file mode 100644 index 0000000000..84fc5f218b --- /dev/null +++ b/animations/step_05_d/lib/view_model.dart @@ -0,0 +1,43 @@ +import 'package:flutter/cupertino.dart'; +import 'model.dart'; + +class QuizViewModel extends ChangeNotifier { + final QuestionBank _questionBank = QuestionBank(); + final VoidCallback onGameOver; + late final int totalQuestions; + Question? currentQuestion; + int answeredQuestionCount = 0; + int score = 0; + bool didAnswerQuestion = false; + bool get hasNextQuestion => answeredQuestionCount < totalQuestions; + + QuizViewModel({required this.onGameOver}) { + totalQuestions = _questionBank.remainingQuestions; + getNextQuestion(); + } + + void getNextQuestion() { + if (_questionBank.hasNextQuestion) { + currentQuestion = _questionBank.getRandomQuestion(); + answeredQuestionCount++; + } + + didAnswerQuestion = false; + + notifyListeners(); + } + + void checkAnswer(int selectedIndex) { + if (!didAnswerQuestion && currentQuestion?.correctAnswer == selectedIndex) { + score++; + } + + didAnswerQuestion = true; + + if (!_questionBank.hasNextQuestion) { + onGameOver(); + } + + notifyListeners(); + } +} diff --git a/animations/step_05_d/linux/.gitignore b/animations/step_05_d/linux/.gitignore new file mode 100644 index 0000000000..d3896c9844 --- /dev/null +++ b/animations/step_05_d/linux/.gitignore @@ -0,0 +1 @@ +flutter/ephemeral diff --git a/animations/step_05_d/linux/CMakeLists.txt b/animations/step_05_d/linux/CMakeLists.txt new file mode 100644 index 0000000000..7caf822271 --- /dev/null +++ b/animations/step_05_d/linux/CMakeLists.txt @@ -0,0 +1,128 @@ +# Project-level configuration. +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# The name of the executable created for the application. Change this to change +# the on-disk name of your application. +set(BINARY_NAME "quiz") +# The unique GTK application identifier for this application. See: +# https://wiki.gnome.org/HowDoI/ChooseApplicationID +set(APPLICATION_ID "com.example.quiz") + +# Explicitly opt in to modern CMake behaviors to avoid warnings with recent +# versions of CMake. +cmake_policy(SET CMP0063 NEW) + +# Load bundled libraries from the lib/ directory relative to the binary. +set(CMAKE_INSTALL_RPATH "$ORIGIN/lib") + +# Root filesystem for cross-building. +if(FLUTTER_TARGET_PLATFORM_SYSROOT) + set(CMAKE_SYSROOT ${FLUTTER_TARGET_PLATFORM_SYSROOT}) + set(CMAKE_FIND_ROOT_PATH ${CMAKE_SYSROOT}) + set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) + set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY) + set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) + set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) +endif() + +# Define build configuration options. +if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) + set(CMAKE_BUILD_TYPE "Debug" CACHE + STRING "Flutter build mode" FORCE) + set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS + "Debug" "Profile" "Release") +endif() + +# Compilation settings that should be applied to most targets. +# +# Be cautious about adding new options here, as plugins use this function by +# default. In most cases, you should add new options to specific targets instead +# of modifying this function. +function(APPLY_STANDARD_SETTINGS TARGET) + target_compile_features(${TARGET} PUBLIC cxx_std_14) + target_compile_options(${TARGET} PRIVATE -Wall -Werror) + target_compile_options(${TARGET} PRIVATE "$<$>:-O3>") + target_compile_definitions(${TARGET} PRIVATE "$<$>:NDEBUG>") +endfunction() + +# Flutter library and tool build rules. +set(FLUTTER_MANAGED_DIR "${CMAKE_CURRENT_SOURCE_DIR}/flutter") +add_subdirectory(${FLUTTER_MANAGED_DIR}) + +# System-level dependencies. +find_package(PkgConfig REQUIRED) +pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) + +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") + +# Run the Flutter tool portions of the build. This must not be removed. +add_dependencies(${BINARY_NAME} flutter_assemble) + +# Only the install-generated bundle's copy of the executable will launch +# correctly, since the resources must in the right relative locations. To avoid +# people trying to run the unbundled copy, put it in a subdirectory instead of +# the default top-level location. +set_target_properties(${BINARY_NAME} + PROPERTIES + RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/intermediates_do_not_run" +) + + +# Generated plugin build rules, which manage building the plugins and adding +# them to the application. +include(flutter/generated_plugins.cmake) + + +# === Installation === +# By default, "installing" just makes a relocatable bundle in the build +# directory. +set(BUILD_BUNDLE_DIR "${PROJECT_BINARY_DIR}/bundle") +if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) + set(CMAKE_INSTALL_PREFIX "${BUILD_BUNDLE_DIR}" CACHE PATH "..." FORCE) +endif() + +# Start with a clean build bundle directory every time. +install(CODE " + file(REMOVE_RECURSE \"${BUILD_BUNDLE_DIR}/\") + " COMPONENT Runtime) + +set(INSTALL_BUNDLE_DATA_DIR "${CMAKE_INSTALL_PREFIX}/data") +set(INSTALL_BUNDLE_LIB_DIR "${CMAKE_INSTALL_PREFIX}/lib") + +install(TARGETS ${BINARY_NAME} RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_ICU_DATA_FILE}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) + +foreach(bundled_library ${PLUGIN_BUNDLED_LIBRARIES}) + install(FILES "${bundled_library}" + DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) +endforeach(bundled_library) + +# Copy the native assets provided by the build.dart from all packages. +set(NATIVE_ASSETS_DIR "${PROJECT_BUILD_DIR}native_assets/linux/") +install(DIRECTORY "${NATIVE_ASSETS_DIR}" + DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) + +# Fully re-copy the assets directory on each build to avoid having stale files +# from a previous install. +set(FLUTTER_ASSET_DIR_NAME "flutter_assets") +install(CODE " + file(REMOVE_RECURSE \"${INSTALL_BUNDLE_DATA_DIR}/${FLUTTER_ASSET_DIR_NAME}\") + " COMPONENT Runtime) +install(DIRECTORY "${PROJECT_BUILD_DIR}/${FLUTTER_ASSET_DIR_NAME}" + DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" COMPONENT Runtime) + +# Install the AOT library on non-Debug builds only. +if(NOT CMAKE_BUILD_TYPE MATCHES "Debug") + install(FILES "${AOT_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) +endif() diff --git a/animations/step_05_d/linux/flutter/CMakeLists.txt b/animations/step_05_d/linux/flutter/CMakeLists.txt new file mode 100644 index 0000000000..d5bd01648a --- /dev/null +++ b/animations/step_05_d/linux/flutter/CMakeLists.txt @@ -0,0 +1,88 @@ +# This file controls Flutter-level build steps. It should not be edited. +cmake_minimum_required(VERSION 3.10) + +set(EPHEMERAL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/ephemeral") + +# Configuration provided via flutter tool. +include(${EPHEMERAL_DIR}/generated_config.cmake) + +# TODO: Move the rest of this into files in ephemeral. See +# https://github.com/flutter/flutter/issues/57146. + +# Serves the same purpose as list(TRANSFORM ... PREPEND ...), +# which isn't available in 3.10. +function(list_prepend LIST_NAME PREFIX) + set(NEW_LIST "") + foreach(element ${${LIST_NAME}}) + list(APPEND NEW_LIST "${PREFIX}${element}") + endforeach(element) + set(${LIST_NAME} "${NEW_LIST}" PARENT_SCOPE) +endfunction() + +# === Flutter Library === +# System-level dependencies. +find_package(PkgConfig REQUIRED) +pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) +pkg_check_modules(GLIB REQUIRED IMPORTED_TARGET glib-2.0) +pkg_check_modules(GIO REQUIRED IMPORTED_TARGET gio-2.0) + +set(FLUTTER_LIBRARY "${EPHEMERAL_DIR}/libflutter_linux_gtk.so") + +# Published to parent scope for install step. +set(FLUTTER_LIBRARY ${FLUTTER_LIBRARY} PARENT_SCOPE) +set(FLUTTER_ICU_DATA_FILE "${EPHEMERAL_DIR}/icudtl.dat" PARENT_SCOPE) +set(PROJECT_BUILD_DIR "${PROJECT_DIR}/build/" PARENT_SCOPE) +set(AOT_LIBRARY "${PROJECT_DIR}/build/lib/libapp.so" PARENT_SCOPE) + +list(APPEND FLUTTER_LIBRARY_HEADERS + "fl_basic_message_channel.h" + "fl_binary_codec.h" + "fl_binary_messenger.h" + "fl_dart_project.h" + "fl_engine.h" + "fl_json_message_codec.h" + "fl_json_method_codec.h" + "fl_message_codec.h" + "fl_method_call.h" + "fl_method_channel.h" + "fl_method_codec.h" + "fl_method_response.h" + "fl_plugin_registrar.h" + "fl_plugin_registry.h" + "fl_standard_message_codec.h" + "fl_standard_method_codec.h" + "fl_string_codec.h" + "fl_value.h" + "fl_view.h" + "flutter_linux.h" +) +list_prepend(FLUTTER_LIBRARY_HEADERS "${EPHEMERAL_DIR}/flutter_linux/") +add_library(flutter INTERFACE) +target_include_directories(flutter INTERFACE + "${EPHEMERAL_DIR}" +) +target_link_libraries(flutter INTERFACE "${FLUTTER_LIBRARY}") +target_link_libraries(flutter INTERFACE + PkgConfig::GTK + PkgConfig::GLIB + PkgConfig::GIO +) +add_dependencies(flutter flutter_assemble) + +# === Flutter tool backend === +# _phony_ is a non-existent file to force this command to run every time, +# since currently there's no way to get a full input/output list from the +# flutter tool. +add_custom_command( + OUTPUT ${FLUTTER_LIBRARY} ${FLUTTER_LIBRARY_HEADERS} + ${CMAKE_CURRENT_BINARY_DIR}/_phony_ + COMMAND ${CMAKE_COMMAND} -E env + ${FLUTTER_TOOL_ENVIRONMENT} + "${FLUTTER_ROOT}/packages/flutter_tools/bin/tool_backend.sh" + ${FLUTTER_TARGET_PLATFORM} ${CMAKE_BUILD_TYPE} + VERBATIM +) +add_custom_target(flutter_assemble DEPENDS + "${FLUTTER_LIBRARY}" + ${FLUTTER_LIBRARY_HEADERS} +) diff --git a/animations/step_05_d/linux/flutter/generated_plugin_registrant.cc b/animations/step_05_d/linux/flutter/generated_plugin_registrant.cc new file mode 100644 index 0000000000..e71a16d23d --- /dev/null +++ b/animations/step_05_d/linux/flutter/generated_plugin_registrant.cc @@ -0,0 +1,11 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#include "generated_plugin_registrant.h" + + +void fl_register_plugins(FlPluginRegistry* registry) { +} diff --git a/animations/step_05_d/linux/flutter/generated_plugin_registrant.h b/animations/step_05_d/linux/flutter/generated_plugin_registrant.h new file mode 100644 index 0000000000..e0f0a47bc0 --- /dev/null +++ b/animations/step_05_d/linux/flutter/generated_plugin_registrant.h @@ -0,0 +1,15 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#ifndef GENERATED_PLUGIN_REGISTRANT_ +#define GENERATED_PLUGIN_REGISTRANT_ + +#include + +// Registers Flutter plugins. +void fl_register_plugins(FlPluginRegistry* registry); + +#endif // GENERATED_PLUGIN_REGISTRANT_ diff --git a/animations/step_05_d/linux/flutter/generated_plugins.cmake b/animations/step_05_d/linux/flutter/generated_plugins.cmake new file mode 100644 index 0000000000..2e1de87a7e --- /dev/null +++ b/animations/step_05_d/linux/flutter/generated_plugins.cmake @@ -0,0 +1,23 @@ +# +# Generated file, do not edit. +# + +list(APPEND FLUTTER_PLUGIN_LIST +) + +list(APPEND FLUTTER_FFI_PLUGIN_LIST +) + +set(PLUGIN_BUNDLED_LIBRARIES) + +foreach(plugin ${FLUTTER_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${plugin}/linux plugins/${plugin}) + target_link_libraries(${BINARY_NAME} PRIVATE ${plugin}_plugin) + list(APPEND PLUGIN_BUNDLED_LIBRARIES $) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${plugin}_bundled_libraries}) +endforeach(plugin) + +foreach(ffi_plugin ${FLUTTER_FFI_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${ffi_plugin}/linux plugins/${ffi_plugin}) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${ffi_plugin}_bundled_libraries}) +endforeach(ffi_plugin) diff --git a/animations/step_05_d/linux/runner/CMakeLists.txt b/animations/step_05_d/linux/runner/CMakeLists.txt new file mode 100644 index 0000000000..e97dabc702 --- /dev/null +++ b/animations/step_05_d/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/animations/step_05_d/linux/runner/main.cc b/animations/step_05_d/linux/runner/main.cc new file mode 100644 index 0000000000..e7c5c54370 --- /dev/null +++ b/animations/step_05_d/linux/runner/main.cc @@ -0,0 +1,6 @@ +#include "my_application.h" + +int main(int argc, char** argv) { + g_autoptr(MyApplication) app = my_application_new(); + return g_application_run(G_APPLICATION(app), argc, argv); +} diff --git a/animations/step_05_d/linux/runner/my_application.cc b/animations/step_05_d/linux/runner/my_application.cc new file mode 100644 index 0000000000..0040d7e46c --- /dev/null +++ b/animations/step_05_d/linux/runner/my_application.cc @@ -0,0 +1,130 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "quiz"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "quiz"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/animations/step_05_d/linux/runner/my_application.h b/animations/step_05_d/linux/runner/my_application.h new file mode 100644 index 0000000000..72271d5e41 --- /dev/null +++ b/animations/step_05_d/linux/runner/my_application.h @@ -0,0 +1,18 @@ +#ifndef FLUTTER_MY_APPLICATION_H_ +#define FLUTTER_MY_APPLICATION_H_ + +#include + +G_DECLARE_FINAL_TYPE(MyApplication, my_application, MY, APPLICATION, + GtkApplication) + +/** + * my_application_new: + * + * Creates a new Flutter-based application. + * + * Returns: a new #MyApplication. + */ +MyApplication* my_application_new(); + +#endif // FLUTTER_MY_APPLICATION_H_ diff --git a/animations/step_05_d/macos/.gitignore b/animations/step_05_d/macos/.gitignore new file mode 100644 index 0000000000..746adbb6b9 --- /dev/null +++ b/animations/step_05_d/macos/.gitignore @@ -0,0 +1,7 @@ +# Flutter-related +**/Flutter/ephemeral/ +**/Pods/ + +# Xcode-related +**/dgph +**/xcuserdata/ diff --git a/animations/step_05_d/macos/Flutter/Flutter-Debug.xcconfig b/animations/step_05_d/macos/Flutter/Flutter-Debug.xcconfig new file mode 100644 index 0000000000..c2efd0b608 --- /dev/null +++ b/animations/step_05_d/macos/Flutter/Flutter-Debug.xcconfig @@ -0,0 +1 @@ +#include "ephemeral/Flutter-Generated.xcconfig" diff --git a/animations/step_05_d/macos/Flutter/Flutter-Release.xcconfig b/animations/step_05_d/macos/Flutter/Flutter-Release.xcconfig new file mode 100644 index 0000000000..c2efd0b608 --- /dev/null +++ b/animations/step_05_d/macos/Flutter/Flutter-Release.xcconfig @@ -0,0 +1 @@ +#include "ephemeral/Flutter-Generated.xcconfig" diff --git a/animations/step_05_d/macos/Flutter/GeneratedPluginRegistrant.swift b/animations/step_05_d/macos/Flutter/GeneratedPluginRegistrant.swift new file mode 100644 index 0000000000..cccf817a52 --- /dev/null +++ b/animations/step_05_d/macos/Flutter/GeneratedPluginRegistrant.swift @@ -0,0 +1,10 @@ +// +// Generated file. Do not edit. +// + +import FlutterMacOS +import Foundation + + +func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { +} diff --git a/animations/step_05_d/macos/Runner.xcodeproj/project.pbxproj b/animations/step_05_d/macos/Runner.xcodeproj/project.pbxproj new file mode 100644 index 0000000000..45c35dfed5 --- /dev/null +++ b/animations/step_05_d/macos/Runner.xcodeproj/project.pbxproj @@ -0,0 +1,705 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 54; + objects = { + +/* Begin PBXAggregateTarget section */ + 33CC111A2044C6BA0003C045 /* Flutter Assemble */ = { + isa = PBXAggregateTarget; + buildConfigurationList = 33CC111B2044C6BA0003C045 /* Build configuration list for PBXAggregateTarget "Flutter Assemble" */; + buildPhases = ( + 33CC111E2044C6BF0003C045 /* ShellScript */, + ); + dependencies = ( + ); + name = "Flutter Assemble"; + productName = FLX; + }; +/* End PBXAggregateTarget section */ + +/* Begin PBXBuildFile section */ + 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; + 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; + 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; + 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; + 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; + 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 331C80D9294CF71000263BE5 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 33CC10E52044A3C60003C045 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 33CC10EC2044A3C60003C045; + remoteInfo = Runner; + }; + 33CC111F2044C79F0003C045 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 33CC10E52044A3C60003C045 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 33CC111A2044C6BA0003C045; + remoteInfo = FLX; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 33CC110E2044A8840003C045 /* Bundle Framework */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + ); + name = "Bundle Framework"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; + 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; + 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; }; + 33CC10ED2044A3C60003C045 /* quiz.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "quiz.app"; sourceTree = BUILT_PRODUCTS_DIR; }; + 33CC10F02044A3C60003C045 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 33CC10F22044A3C60003C045 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = Runner/Assets.xcassets; sourceTree = ""; }; + 33CC10F52044A3C60003C045 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = ""; }; + 33CC10F72044A3C60003C045 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = Info.plist; path = Runner/Info.plist; sourceTree = ""; }; + 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainFlutterWindow.swift; sourceTree = ""; }; + 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Debug.xcconfig"; sourceTree = ""; }; + 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Release.xcconfig"; sourceTree = ""; }; + 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = "Flutter-Generated.xcconfig"; path = "ephemeral/Flutter-Generated.xcconfig"; sourceTree = ""; }; + 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; + 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; + 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; + 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 331C80D2294CF70F00263BE5 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 33CC10EA2044A3C60003C045 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 331C80D6294CF71000263BE5 /* RunnerTests */ = { + isa = PBXGroup; + children = ( + 331C80D7294CF71000263BE5 /* RunnerTests.swift */, + ); + path = RunnerTests; + sourceTree = ""; + }; + 33BA886A226E78AF003329D5 /* Configs */ = { + isa = PBXGroup; + children = ( + 33E5194F232828860026EE4D /* AppInfo.xcconfig */, + 9740EEB21CF90195004384FC /* Debug.xcconfig */, + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, + 333000ED22D3DE5D00554162 /* Warnings.xcconfig */, + ); + path = Configs; + sourceTree = ""; + }; + 33CC10E42044A3C60003C045 = { + isa = PBXGroup; + children = ( + 33FAB671232836740065AC1E /* Runner */, + 33CEB47122A05771004F2AC0 /* Flutter */, + 331C80D6294CF71000263BE5 /* RunnerTests */, + 33CC10EE2044A3C60003C045 /* Products */, + D73912EC22F37F3D000D13A0 /* Frameworks */, + ); + sourceTree = ""; + }; + 33CC10EE2044A3C60003C045 /* Products */ = { + isa = PBXGroup; + children = ( + 33CC10ED2044A3C60003C045 /* quiz.app */, + 331C80D5294CF71000263BE5 /* RunnerTests.xctest */, + ); + name = Products; + sourceTree = ""; + }; + 33CC11242044D66E0003C045 /* Resources */ = { + isa = PBXGroup; + children = ( + 33CC10F22044A3C60003C045 /* Assets.xcassets */, + 33CC10F42044A3C60003C045 /* MainMenu.xib */, + 33CC10F72044A3C60003C045 /* Info.plist */, + ); + name = Resources; + path = ..; + sourceTree = ""; + }; + 33CEB47122A05771004F2AC0 /* Flutter */ = { + isa = PBXGroup; + children = ( + 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */, + 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */, + 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */, + 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */, + ); + path = Flutter; + sourceTree = ""; + }; + 33FAB671232836740065AC1E /* Runner */ = { + isa = PBXGroup; + children = ( + 33CC10F02044A3C60003C045 /* AppDelegate.swift */, + 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */, + 33E51913231747F40026EE4D /* DebugProfile.entitlements */, + 33E51914231749380026EE4D /* Release.entitlements */, + 33CC11242044D66E0003C045 /* Resources */, + 33BA886A226E78AF003329D5 /* Configs */, + ); + path = Runner; + sourceTree = ""; + }; + D73912EC22F37F3D000D13A0 /* Frameworks */ = { + isa = PBXGroup; + children = ( + ); + name = Frameworks; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 331C80D4294CF70F00263BE5 /* RunnerTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; + buildPhases = ( + 331C80D1294CF70F00263BE5 /* Sources */, + 331C80D2294CF70F00263BE5 /* Frameworks */, + 331C80D3294CF70F00263BE5 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 331C80DA294CF71000263BE5 /* PBXTargetDependency */, + ); + name = RunnerTests; + productName = RunnerTests; + productReference = 331C80D5294CF71000263BE5 /* RunnerTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; + 33CC10EC2044A3C60003C045 /* Runner */ = { + isa = PBXNativeTarget; + buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; + buildPhases = ( + 33CC10E92044A3C60003C045 /* Sources */, + 33CC10EA2044A3C60003C045 /* Frameworks */, + 33CC10EB2044A3C60003C045 /* Resources */, + 33CC110E2044A8840003C045 /* Bundle Framework */, + 3399D490228B24CF009A79C7 /* ShellScript */, + ); + buildRules = ( + ); + dependencies = ( + 33CC11202044C79F0003C045 /* PBXTargetDependency */, + ); + name = Runner; + productName = Runner; + productReference = 33CC10ED2044A3C60003C045 /* quiz.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 33CC10E52044A3C60003C045 /* Project object */ = { + isa = PBXProject; + attributes = { + BuildIndependentTargetsInParallel = YES; + LastSwiftUpdateCheck = 0920; + LastUpgradeCheck = 1510; + ORGANIZATIONNAME = ""; + TargetAttributes = { + 331C80D4294CF70F00263BE5 = { + CreatedOnToolsVersion = 14.0; + TestTargetID = 33CC10EC2044A3C60003C045; + }; + 33CC10EC2044A3C60003C045 = { + CreatedOnToolsVersion = 9.2; + LastSwiftMigration = 1100; + ProvisioningStyle = Automatic; + SystemCapabilities = { + com.apple.Sandbox = { + enabled = 1; + }; + }; + }; + 33CC111A2044C6BA0003C045 = { + CreatedOnToolsVersion = 9.2; + ProvisioningStyle = Manual; + }; + }; + }; + buildConfigurationList = 33CC10E82044A3C60003C045 /* Build configuration list for PBXProject "Runner" */; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 33CC10E42044A3C60003C045; + productRefGroup = 33CC10EE2044A3C60003C045 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 33CC10EC2044A3C60003C045 /* Runner */, + 331C80D4294CF70F00263BE5 /* RunnerTests */, + 33CC111A2044C6BA0003C045 /* Flutter Assemble */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 331C80D3294CF70F00263BE5 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 33CC10EB2044A3C60003C045 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */, + 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 3399D490228B24CF009A79C7 /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; + }; + 33CC111E2044C6BF0003C045 /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + Flutter/ephemeral/FlutterInputs.xcfilelist, + ); + inputPaths = ( + Flutter/ephemeral/tripwire, + ); + outputFileListPaths = ( + Flutter/ephemeral/FlutterOutputs.xcfilelist, + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 331C80D1294CF70F00263BE5 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 33CC10E92044A3C60003C045 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */, + 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */, + 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 331C80DA294CF71000263BE5 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 33CC10EC2044A3C60003C045 /* Runner */; + targetProxy = 331C80D9294CF71000263BE5 /* PBXContainerItemProxy */; + }; + 33CC11202044C79F0003C045 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 33CC111A2044C6BA0003C045 /* Flutter Assemble */; + targetProxy = 33CC111F2044C79F0003C045 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + 33CC10F42044A3C60003C045 /* MainMenu.xib */ = { + isa = PBXVariantGroup; + children = ( + 33CC10F52044A3C60003C045 /* Base */, + ); + name = MainMenu.xib; + path = Runner; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 331C80DB294CF71000263BE5 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.quiz.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/quiz.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/quiz"; + }; + name = Debug; + }; + 331C80DC294CF71000263BE5 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.quiz.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/quiz.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/quiz"; + }; + name = Release; + }; + 331C80DD294CF71000263BE5 /* Profile */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.quiz.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/quiz.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/quiz"; + }; + name = Profile; + }; + 338D0CE9231458BD00FA5F75 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + DEAD_CODE_STRIPPING = YES; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.14; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = macosx; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + }; + name = Profile; + }; + 338D0CEA231458BD00FA5F75 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_VERSION = 5.0; + }; + name = Profile; + }; + 338D0CEB231458BD00FA5F75 /* Profile */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Manual; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Profile; + }; + 33CC10F92044A3C60003C045 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + DEAD_CODE_STRIPPING = YES; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.14; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = macosx; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + }; + name = Debug; + }; + 33CC10FA2044A3C60003C045 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + DEAD_CODE_STRIPPING = YES; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.14; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = macosx; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + }; + name = Release; + }; + 33CC10FC2044A3C60003C045 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + }; + name = Debug; + }; + 33CC10FD2044A3C60003C045 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/Release.entitlements; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_VERSION = 5.0; + }; + name = Release; + }; + 33CC111C2044C6BA0003C045 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Manual; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Debug; + }; + 33CC111D2044C6BA0003C045 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Automatic; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 331C80DB294CF71000263BE5 /* Debug */, + 331C80DC294CF71000263BE5 /* Release */, + 331C80DD294CF71000263BE5 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 33CC10E82044A3C60003C045 /* Build configuration list for PBXProject "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 33CC10F92044A3C60003C045 /* Debug */, + 33CC10FA2044A3C60003C045 /* Release */, + 338D0CE9231458BD00FA5F75 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 33CC10FC2044A3C60003C045 /* Debug */, + 33CC10FD2044A3C60003C045 /* Release */, + 338D0CEA231458BD00FA5F75 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 33CC111B2044C6BA0003C045 /* Build configuration list for PBXAggregateTarget "Flutter Assemble" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 33CC111C2044C6BA0003C045 /* Debug */, + 33CC111D2044C6BA0003C045 /* Release */, + 338D0CEB231458BD00FA5F75 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 33CC10E52044A3C60003C045 /* Project object */; +} diff --git a/animations/step_05_d/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/animations/step_05_d/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000000..18d981003d --- /dev/null +++ b/animations/step_05_d/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/animations/step_05_d/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/animations/step_05_d/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme new file mode 100644 index 0000000000..2f413cb17b --- /dev/null +++ b/animations/step_05_d/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -0,0 +1,98 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/animations/step_05_d/macos/Runner.xcworkspace/contents.xcworkspacedata b/animations/step_05_d/macos/Runner.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000000..1d526a16ed --- /dev/null +++ b/animations/step_05_d/macos/Runner.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/animations/step_05_d/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/animations/step_05_d/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000000..18d981003d --- /dev/null +++ b/animations/step_05_d/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/animations/step_05_d/macos/Runner/AppDelegate.swift b/animations/step_05_d/macos/Runner/AppDelegate.swift new file mode 100644 index 0000000000..b3c1761412 --- /dev/null +++ b/animations/step_05_d/macos/Runner/AppDelegate.swift @@ -0,0 +1,13 @@ +import Cocoa +import FlutterMacOS + +@main +class AppDelegate: FlutterAppDelegate { + override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { + return true + } + + override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { + return true + } +} diff --git a/animations/step_05_d/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/animations/step_05_d/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000000..a2ec33f19f --- /dev/null +++ b/animations/step_05_d/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,68 @@ +{ + "images" : [ + { + "size" : "16x16", + "idiom" : "mac", + "filename" : "app_icon_16.png", + "scale" : "1x" + }, + { + "size" : "16x16", + "idiom" : "mac", + "filename" : "app_icon_32.png", + "scale" : "2x" + }, + { + "size" : "32x32", + "idiom" : "mac", + "filename" : "app_icon_32.png", + "scale" : "1x" + }, + { + "size" : "32x32", + "idiom" : "mac", + "filename" : "app_icon_64.png", + "scale" : "2x" + }, + { + "size" : "128x128", + "idiom" : "mac", + "filename" : "app_icon_128.png", + "scale" : "1x" + }, + { + "size" : "128x128", + "idiom" : "mac", + "filename" : "app_icon_256.png", + "scale" : "2x" + }, + { + "size" : "256x256", + "idiom" : "mac", + "filename" : "app_icon_256.png", + "scale" : "1x" + }, + { + "size" : "256x256", + "idiom" : "mac", + "filename" : "app_icon_512.png", + "scale" : "2x" + }, + { + "size" : "512x512", + "idiom" : "mac", + "filename" : "app_icon_512.png", + "scale" : "1x" + }, + { + "size" : "512x512", + "idiom" : "mac", + "filename" : "app_icon_1024.png", + "scale" : "2x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} diff --git a/animations/step_05_d/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png b/animations/step_05_d/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png new file mode 100644 index 0000000000000000000000000000000000000000..82b6f9d9a33e198f5747104729e1fcef999772a5 GIT binary patch literal 102994 zcmeEugo5nb1G~3xi~y`}h6XHx5j$(L*3|5S2UfkG$|UCNI>}4f?MfqZ+HW-sRW5RKHEm z^unW*Xx{AH_X3Xdvb%C(Bh6POqg==@d9j=5*}oEny_IS;M3==J`P0R!eD6s~N<36C z*%-OGYqd0AdWClO!Z!}Y1@@RkfeiQ$Ib_ z&fk%T;K9h`{`cX3Hu#?({4WgtmkR!u3ICS~|NqH^fdNz>51-9)OF{|bRLy*RBv#&1 z3Oi_gk=Y5;>`KbHf~w!`u}!&O%ou*Jzf|Sf?J&*f*K8cftMOKswn6|nb1*|!;qSrlw= zr-@X;zGRKs&T$y8ENnFU@_Z~puu(4~Ir)>rbYp{zxcF*!EPS6{(&J}qYpWeqrPWW< zfaApz%<-=KqxrqLLFeV3w0-a0rEaz9&vv^0ZfU%gt9xJ8?=byvNSb%3hF^X_n7`(fMA;C&~( zM$cQvQ|g9X)1AqFvbp^B{JEX$o;4iPi?+v(!wYrN{L}l%e#5y{j+1NMiT-8=2VrCP zmFX9=IZyAYA5c2!QO96Ea-6;v6*$#ZKM-`%JCJtrA3d~6h{u+5oaTaGE)q2b+HvdZ zvHlY&9H&QJ5|uG@wDt1h99>DdHy5hsx)bN`&G@BpxAHh$17yWDyw_jQhhjSqZ=e_k z_|r3=_|`q~uA47y;hv=6-o6z~)gO}ZM9AqDJsR$KCHKH;QIULT)(d;oKTSPDJ}Jx~G#w-(^r<{GcBC*~4bNjfwHBumoPbU}M)O za6Hc2ik)2w37Yyg!YiMq<>Aov?F2l}wTe+>h^YXcK=aesey^i)QC_p~S zp%-lS5%)I29WfywP(r4@UZ@XmTkqo51zV$|U|~Lcap##PBJ}w2b4*kt7x6`agP34^ z5fzu_8rrH+)2u*CPcr6I`gL^cI`R2WUkLDE5*PX)eJU@H3HL$~o_y8oMRoQ0WF9w| z6^HZDKKRDG2g;r8Z4bn+iJNFV(CG;K-j2>aj229gl_C6n12Jh$$h!}KVhn>*f>KcH z;^8s3t(ccVZ5<{>ZJK@Z`hn_jL{bP8Yn(XkwfRm?GlEHy=T($8Z1Mq**IM`zxN9>-yXTjfB18m_$E^JEaYn>pj`V?n#Xu;Z}#$- zw0Vw;T*&9TK$tKI7nBk9NkHzL++dZ^;<|F6KBYh2+XP-b;u`Wy{~79b%IBZa3h*3^ zF&BKfQ@Ej{7ku_#W#mNJEYYp=)bRMUXhLy2+SPMfGn;oBsiG_6KNL8{p1DjuB$UZB zA)a~BkL)7?LJXlCc}bB~j9>4s7tlnRHC5|wnycQPF_jLl!Avs2C3^lWOlHH&v`nGd zf&U!fn!JcZWha`Pl-B3XEe;(ks^`=Z5R zWyQR0u|do2`K3ec=YmWGt5Bwbu|uBW;6D8}J3{Uep7_>L6b4%(d=V4m#(I=gkn4HT zYni3cnn>@F@Wr<hFAY3Y~dW+3bte;70;G?kTn4Aw5nZ^s5|47 z4$rCHCW%9qa4)4vE%^QPMGf!ET!^LutY$G zqdT(ub5T5b+wi+OrV}z3msoy<4)`IPdHsHJggmog0K*pFYMhH!oZcgc5a)WmL?;TPSrerTVPp<#s+imF3v#!FuBNNa`#6 z!GdTCF|IIpz#(eV^mrYKThA4Bnv&vQet@%v9kuRu3EHx1-2-it@E`%9#u`)HRN#M? z7aJ{wzKczn#w^`OZ>Jb898^Xxq)0zd{3Tu7+{-sge-rQ z&0PME&wIo6W&@F|%Z8@@N3)@a_ntJ#+g{pUP7i?~3FirqU`rdf8joMG^ld?(9b7Iv z>TJgBg#)(FcW)h!_if#cWBh}f+V08GKyg|$P#KTS&%=!+0a%}O${0$i)kn9@G!}En zv)_>s?glPiLbbx)xk(lD-QbY(OP3;MSXM5E*P&_`Zks2@46n|-h$Y2L7B)iH{GAAq19h5-y0q>d^oy^y+soJu9lXxAe%jcm?=pDLFEG2kla40e!5a}mpe zdL=WlZ=@U6{>g%5a+y-lx)01V-x;wh%F{=qy#XFEAqcd+m}_!lQ)-9iiOL%&G??t| z?&NSdaLqdPdbQs%y0?uIIHY7rw1EDxtQ=DU!i{)Dkn~c$LG5{rAUYM1j5*G@oVn9~ zizz{XH(nbw%f|wI=4rw^6mNIahQpB)OQy10^}ACdLPFc2@ldVi|v@1nWLND?)53O5|fg`RZW&XpF&s3@c-R?aad!$WoH6u0B|}zt)L($E^@U- zO#^fxu9}Zw7Xl~nG1FVM6DZSR0*t!4IyUeTrnp@?)Z)*!fhd3)&s(O+3D^#m#bAem zpf#*aiG_0S^ofpm@9O7j`VfLU0+{$x!u^}3!zp=XST0N@DZTp!7LEVJgqB1g{psNr za0uVmh3_9qah14@M_pi~vAZ#jc*&aSm$hCNDsuQ-zPe&*Ii#2=2gP+DP4=DY z_Y0lUsyE6yaV9)K)!oI6+*4|spx2at*30CAx~6-5kfJzQ`fN8$!lz%hz^J6GY?mVH zbYR^JZ(Pmj6@vy-&!`$5soyy-NqB^8cCT40&R@|6s@m+ZxPs=Bu77-+Os7+bsz4nA3DrJ8#{f98ZMaj-+BD;M+Jk?pgFcZIb}m9N z{ct9T)Kye&2>l^39O4Q2@b%sY?u#&O9PO4@t0c$NUXG}(DZJ<;_oe2~e==3Z1+`Zo zFrS3ns-c}ZognVBHbg#e+1JhC(Yq7==rSJQ8J~}%94(O#_-zJKwnBXihl#hUd9B_>+T& z7eHHPRC?5ONaUiCF7w|{J`bCWS7Q&xw-Sa={j-f)n5+I=9s;E#fBQB$`DDh<^mGiF zu-m_k+)dkBvBO(VMe2O4r^sf3;sk9K!xgXJU>|t9Vm8Ty;fl5pZzw z9j|}ZD}6}t;20^qrS?YVPuPRS<39d^y0#O1o_1P{tN0?OX!lc-ICcHI@2#$cY}_CY zev|xdFcRTQ_H)1fJ7S0*SpPs8e{d+9lR~IZ^~dKx!oxz?=Dp!fD`H=LH{EeC8C&z-zK$e=!5z8NL=4zx2{hl<5z*hEmO=b-7(k5H`bA~5gT30Sjy`@-_C zKM}^so9Ti1B;DovHByJkTK87cfbF16sk-G>`Q4-txyMkyQS$d}??|Aytz^;0GxvOs zPgH>h>K+`!HABVT{sYgzy3CF5ftv6hI-NRfgu613d|d1cg^jh+SK7WHWaDX~hlIJ3 z>%WxKT0|Db1N-a4r1oPKtF--^YbP=8Nw5CNt_ZnR{N(PXI>Cm$eqi@_IRmJ9#)~ZHK_UQ8mi}w^`+4$OihUGVz!kW^qxnCFo)-RIDbA&k-Y=+*xYv5y4^VQ9S)4W5Pe?_RjAX6lS6Nz#!Hry=+PKx2|o_H_3M`}Dq{Bl_PbP(qel~P@=m}VGW*pK96 zI@fVag{DZHi}>3}<(Hv<7cVfWiaVLWr@WWxk5}GDEbB<+Aj;(c>;p1qmyAIj+R!`@#jf$ zy4`q23L-72Zs4j?W+9lQD;CYIULt%;O3jPWg2a%Zs!5OW>5h1y{Qof!p&QxNt5=T( zd5fy&7=hyq;J8%86YBOdc$BbIFxJx>dUyTh`L z-oKa=OhRK9UPVRWS`o2x53bAv+py)o)kNL6 z9W1Dlk-g6Ht@-Z^#6%`9S9`909^EMj?9R^4IxssCY-hYzei^TLq7Cj>z$AJyaU5=z zl!xiWvz0U8kY$etrcp8mL;sYqGZD!Hs-U2N{A|^oEKA482v1T%cs%G@X9M?%lX)p$ zZoC7iYTPe8yxY0Jne|s)fCRe1mU=Vb1J_&WcIyP|x4$;VSVNC`M+e#oOA`#h>pyU6 z?7FeVpk`Hsu`~T3i<_4<5fu?RkhM;@LjKo6nX>pa%8dSdgPO9~Jze;5r>Tb1Xqh5q z&SEdTXevV@PT~!O6z|oypTk7Qq+BNF5IQ(8s18c=^0@sc8Gi|3e>VKCsaZ?6=rrck zl@oF5Bd0zH?@15PxSJIRroK4Wa?1o;An;p0#%ZJ^tI=(>AJ2OY0GP$E_3(+Zz4$AQ zW)QWl<4toIJ5TeF&gNXs>_rl}glkeG#GYbHHOv-G!%dJNoIKxn)FK$5&2Zv*AFic! z@2?sY&I*PSfZ8bU#c9fdIJQa_cQijnj39-+hS@+~e*5W3bj%A}%p9N@>*tCGOk+cF zlcSzI6j%Q|2e>QG3A<86w?cx6sBtLNWF6_YR?~C)IC6_10SNoZUHrCpp6f^*+*b8` zlx4ToZZuI0XW1W)24)92S)y0QZa);^NRTX6@gh8@P?^=#2dV9s4)Q@K+gnc{6|C}& zDLHr7nDOLrsH)L@Zy{C_2UrYdZ4V{|{c8&dRG;wY`u>w%$*p>PO_}3`Y21pk?8Wtq zGwIXTulf7AO2FkPyyh2TZXM1DJv>hI`}x`OzQI*MBc#=}jaua&czSkI2!s^rOci|V zFkp*Vbiz5vWa9HPFXMi=BV&n3?1?%8#1jq?p^3wAL`jgcF)7F4l<(H^!i=l-(OTDE zxf2p71^WRIExLf?ig0FRO$h~aA23s#L zuZPLkm>mDwBeIu*C7@n@_$oSDmdWY7*wI%aL73t~`Yu7YwE-hxAATmOi0dmB9|D5a zLsR7OQcA0`vN9m0L|5?qZ|jU+cx3_-K2!K$zDbJ$UinQy<9nd5ImWW5n^&=Gg>Gsh zY0u?m1e^c~Ug39M{{5q2L~ROq#c{eG8Oy#5h_q=#AJj2Yops|1C^nv0D1=fBOdfAG z%>=vl*+_w`&M7{qE#$xJJp_t>bSh7Mpc(RAvli9kk3{KgG5K@a-Ue{IbU{`umXrR3ra5Y7xiX42+Q%N&-0#`ae_ z#$Y6Wa++OPEDw@96Zz##PFo9sADepQe|hUy!Zzc2C(L`k9&=a8XFr+!hIS>D2{pdGP1SzwyaGLiH3j--P>U#TWw90t8{8Bt%m7Upspl#=*hS zhy|(XL6HOqBW}Og^tLX7 z+`b^L{O&oqjwbxDDTg2B;Yh2(fW>%S5Pg8^u1p*EFb z`(fbUM0`afawYt%VBfD&b3MNJ39~Ldc@SAuzsMiN%E}5{uUUBc7hc1IUE~t-Y9h@e7PC|sv$xGx=hZiMXNJxz5V(np%6u{n24iWX#!8t#>Ob$in<>dw96H)oGdTHnU zSM+BPss*5)Wz@+FkooMxxXZP1{2Nz7a6BB~-A_(c&OiM)UUNoa@J8FGxtr$)`9;|O z(Q?lq1Q+!E`}d?KemgC!{nB1JJ!B>6J@XGQp9NeQvtbM2n7F%v|IS=XWPVZY(>oq$ zf=}8O_x`KOxZoGnp=y24x}k6?gl_0dTF!M!T`={`Ii{GnT1jrG9gPh)R=RZG8lIR| z{ZJ6`x8n|y+lZuy${fuEDTAf`OP!tGySLXD}ATJO5UoZv|Xo3%7O~L63+kw}v)Ci=&tWx3bQJfL@5O18CbPlkR^IcKA zy1=^Vl-K-QBP?9^R`@;czcUw;Enbbyk@vJQB>BZ4?;DM%BUf^eZE+sOy>a){qCY6Y znYy;KGpch-zf=5|p#SoAV+ie8M5(Xg-{FoLx-wZC9IutT!(9rJ8}=!$!h%!J+vE2e z(sURwqCC35v?1>C1L)swfA^sr16{yj7-zbT6Rf26-JoEt%U?+|rQ zeBuGohE?@*!zR9)1P|3>KmJSgK*fOt>N>j}LJB`>o(G#Dduvx7@DY7};W7K;Yj|8O zGF<+gTuoIKe7Rf+LQG3-V1L^|E;F*}bQ-{kuHq}| ze_NwA7~US19sAZ)@a`g*zkl*ykv2v3tPrb4Og2#?k6Lc7@1I~+ew48N&03hW^1Cx+ zfk5Lr4-n=#HYg<7ka5i>2A@ZeJ60gl)IDX!!p zzfXZQ?GrT>JEKl7$SH!otzK6=0dIlqN)c23YLB&Krf9v-{@V8p+-e2`ujFR!^M%*; ze_7(Jh$QgoqwB!HbX=S+^wqO15O_TQ0-qX8f-|&SOuo3ZE{{9Jw5{}>MhY}|GBhO& zv48s_B=9aYQfa;d>~1Z$y^oUUaDer>7ve5+Gf?rIG4GZ!hRKERlRNgg_C{W_!3tsI2TWbX8f~MY)1Q`6Wj&JJ~*;ay_0@e zzx+mE-pu8{cEcVfBqsnm=jFU?H}xj@%CAx#NO>3 z_re3Rq%d1Y7VkKy{=S73&p;4^Praw6Y59VCP6M?!Kt7{v#DG#tz?E)`K95gH_mEvb z%$<~_mQ$ad?~&T=O0i0?`YSp?E3Dj?V>n+uTRHAXn`l!pH9Mr}^D1d@mkf+;(tV45 zH_yfs^kOGLXlN*0GU;O&{=awxd?&`{JPRr$z<1HcAO2K`K}92$wC}ky&>;L?#!(`w z68avZGvb728!vgw>;8Z8I@mLtI`?^u6R>sK4E7%=y)jpmE$fH!Dj*~(dy~-2A5Cm{ zl{1AZw`jaDmfvaB?jvKwz!GC}@-Dz|bFm1OaPw(ia#?>vF7Y5oh{NVbyD~cHB1KFn z9C@f~X*Wk3>sQH9#D~rLPslAd26@AzMh=_NkH_yTNXx6-AdbAb z{Ul89YPHslD?xAGzOlQ*aMYUl6#efCT~WI zOvyiewT=~l1W(_2cEd(8rDywOwjM-7P9!8GCL-1<9KXXO=6%!9=W++*l1L~gRSxLVd8K=A7&t52ql=J&BMQu{fa6y zXO_e>d?4X)xp2V8e3xIQGbq@+vo#&n>-_WreTTW0Yr?|YRPP43cDYACMQ(3t6(?_k zfgDOAU^-pew_f5U#WxRXB30wcfDS3;k~t@b@w^GG&<5n$Ku?tT(%bQH(@UHQGN)N|nfC~7?(etU`}XB)$>KY;s=bYGY#kD%i9fz= z2nN9l?UPMKYwn9bX*^xX8Y@%LNPFU>s#Ea1DaP%bSioqRWi9JS28suTdJycYQ+tW7 zrQ@@=13`HS*dVKaVgcem-45+buD{B;mUbY$YYULhxK)T{S?EB<8^YTP$}DA{(&)@S zS#<8S96y9K2!lG^VW-+CkfXJIH;Vo6wh)N}!08bM$I7KEW{F6tqEQ?H@(U zAqfi%KCe}2NUXALo;UN&k$rU0BLNC$24T_mcNY(a@lxR`kqNQ0z%8m>`&1ro40HX} z{{3YQ;2F9JnVTvDY<4)x+88i@MtXE6TBd7POk&QfKU-F&*C`isS(T_Q@}K)=zW#K@ zbXpcAkTT-T5k}Wj$dMZl7=GvlcCMt}U`#Oon1QdPq%>9J$rKTY8#OmlnNWBYwafhx zqFnym@okL#Xw>4SeRFejBnZzY$jbO)e^&&sHBgMP%Ygfi!9_3hp17=AwLBNFTimf0 zw6BHNXw19Jg_Ud6`5n#gMpqe%9!QB^_7wAYv8nrW94A{*t8XZu0UT&`ZHfkd(F{Px zD&NbRJP#RX<=+sEeGs2`9_*J2OlECpR;4uJie-d__m*(aaGE}HIo+3P{my@;a~9Y$ zHBXVJ83#&@o6{M+pE9^lI<4meLLFN_3rwgR4IRyp)~OF0n+#ORrcJ2_On9-78bWbG zuCO0esc*n1X3@p1?lN{qWS?l7J$^jbpeel{w~51*0CM+q9@9X=>%MF(ce~om(}?td zjkUmdUR@LOn-~6LX#=@a%rvj&>DFEoQscOvvC@&ZB5jVZ-;XzAshwx$;Qf@U41W=q zOSSjQGQV8Qi3*4DngNMIM&Cxm7z*-K`~Bl(TcEUxjQ1c=?)?wF8W1g;bAR%sM#LK( z_Op?=P%)Z+J!>vpN`By0$?B~Out%P}kCriDq@}In&fa_ZyKV+nLM0E?hfxuu%ciUz z>yAk}OydbWNl7{)#112j&qmw;*Uj&B;>|;Qwfc?5wIYIHH}s6Mve@5c5r+y)jK9i( z_}@uC(98g)==AGkVN?4>o@w=7x9qhW^ zB(b5%%4cHSV?3M?k&^py)j*LK16T^Ef4tb05-h-tyrjt$5!oo4spEfXFK7r_Gfv7#x$bsR7T zs;dqxzUg9v&GjsQGKTP*=B(;)be2aN+6>IUz+Hhw-n>^|`^xu*xvjGPaDoFh2W4-n z@Wji{5Y$m>@Vt7TE_QVQN4*vcfWv5VY-dT0SV=l=8LAEq1go*f zkjukaDV=3kMAX6GAf0QOQHwP^{Z^=#Lc)sh`QB)Ftl&31jABvq?8!3bt7#8vxB z53M{4{GR4Hl~;W3r}PgXSNOt477cO62Yj(HcK&30zsmWpvAplCtpp&mC{`2Ue*Bwu zF&UX1;w%`Bs1u%RtGPFl=&sHu@Q1nT`z={;5^c^^S~^?2-?<|F9RT*KQmfgF!7=wD@hytxbD;=9L6PZrK*1<4HMObNWehA62DtTy)q5H|57 z9dePuC!1;0MMRRl!S@VJ8qG=v^~aEU+}2Qx``h1LII!y{crP2ky*R;Cb;g|r<#ryo zju#s4dE?5CTIZKc*O4^3qWflsQ(voX>(*_JP7>Q&$%zCAIBTtKC^JUi@&l6u&t0hXMXjz_y!;r@?k|OU9aD%938^TZ>V? zqJmom_6dz4DBb4Cgs_Ef@}F%+cRCR%UMa9pi<-KHN;t#O@cA%(LO1Rb=h?5jiTs93 zPLR78p+3t>z4|j=<>2i4b`ketv}9Ax#B0)hn7@bFl;rDfP8p7u9XcEb!5*PLKB(s7wQC2kzI^@ae)|DhNDmSy1bOLid%iIap@24A(q2XI!z_hkl-$1T10 z+KKugG4-}@u8(P^S3PW4x>an;XWEF-R^gB{`t8EiP{ZtAzoZ!JRuMRS__-Gg#Qa3{<;l__CgsF+nfmFNi}p z>rV!Y6B@cC>1up)KvaEQiAvQF!D>GCb+WZsGHjDeWFz?WVAHP65aIA8u6j6H35XNYlyy8>;cWe3ekr};b;$9)0G`zsc9LNsQ&D?hvuHRpBxH)r-1t9|Stc*u<}Ol&2N+wPMom}d15_TA=Aprp zjN-X3*Af$7cDWMWp##kOH|t;c2Pa9Ml4-)o~+7P;&q8teF-l}(Jt zTGKOQqJTeT!L4d}Qw~O0aanA$Vn9Rocp-MO4l*HK)t%hcp@3k0%&_*wwpKD6ThM)R z8k}&7?)YS1ZYKMiy?mn>VXiuzX7$Ixf7EW8+C4K^)m&eLYl%#T=MC;YPvD&w#$MMf zQ=>`@rh&&r!@X&v%ZlLF42L_c=5dSU^uymKVB>5O?AouR3vGv@ei%Z|GX5v1GK2R* zi!!}?+-8>J$JH^fPu@)E6(}9$d&9-j51T^n-e0Ze%Q^)lxuex$IL^XJ&K2oi`wG}QVGk2a7vC4X?+o^z zsCK*7`EUfSuQA*K@Plsi;)2GrayQOG9OYF82Hc@6aNN5ulqs1Of-(iZQdBI^U5of^ zZg2g=Xtad7$hfYu6l~KDQ}EU;oIj(3nO#u9PDz=eO3(iax7OCmgT2p_7&^3q zg7aQ;Vpng*)kb6=sd5?%j5Dm|HczSChMo8HHq_L8R;BR5<~DVyU$8*Tk5}g0eW5x7 z%d)JFZ{(Y<#OTKLBA1fwLM*fH7Q~7Sc2Ne;mVWqt-*o<;| z^1@vo_KTYaMnO$7fbLL+qh#R$9bvnpJ$RAqG+z8h|} z3F5iwG*(sCn9Qbyg@t0&G}3fE0jGq3J!JmG2K&$urx^$z95) z7h?;4vE4W=v)uZ*Eg3M^6f~|0&T)2D;f+L_?M*21-I1pnK(pT$5l#QNlT`SidYw~o z{`)G)Asv#cue)Ax1RNWiRUQ(tQ(bzd-f2U4xlJK+)ZWBxdq#fp=A>+Qc%-tl(c)`t z$e2Ng;Rjvnbu7((;v4LF9Y1?0el9hi!g>G{^37{ z`^s-03Z5jlnD%#Mix19zkU_OS|86^_x4<0(*YbPN}mi-$L?Z4K(M|2&VV*n*ZYN_UqI?eKZi3!b)i z%n3dzUPMc-dc|q}TzvPy!VqsEWCZL(-eURDRG4+;Eu!LugSSI4Fq$Ji$Dp08`pfP_C5Yx~`YKcywlMG;$F z)R5!kVml_Wv6MSpeXjG#g?kJ0t_MEgbXlUN3k|JJ%N>|2xn8yN>>4qxh!?dGI}s|Y zDTKd^JCrRSN+%w%D_uf=Tj6wIV$c*g8D96jb^Kc#>5Fe-XxKC@!pIJw0^zu;`_yeb zhUEm-G*C=F+jW%cP(**b61fTmPn2WllBr4SWNdKe*P8VabZsh0-R|?DO=0x`4_QY) zR7sthW^*BofW7{Sak&S1JdiG?e=SfL24Y#w_)xrBVhGB-13q$>mFU|wd9Xqe-o3{6 zSn@@1@&^)M$rxb>UmFuC+pkio#T;mSnroMVZJ%nZ!uImi?%KsIX#@JU2VY(`kGb1A z7+1MEG)wd@)m^R|a2rXeviv$!emwcY(O|M*xV!9%tBzarBOG<4%gI9SW;Um_gth4=gznYzOFd)y8e+3APCkL)i-OI`;@7-mCJgE`js(M} z;~ZcW{{FMVVO)W>VZ}ILouF#lWGb%Couu}TI4kubUUclW@jEn6B_^v!Ym*(T*4HF9 zWhNKi8%sS~viSdBtnrq!-Dc5(G^XmR>DFx8jhWvR%*8!m*b*R8e1+`7{%FACAK`7 zzdy8TmBh?FVZ0vtw6npnWwM~XjF2fNvV#ZlGG z?FxHkXHN>JqrBYoPo$)zNC7|XrQfcqmEXWud~{j?La6@kbHG@W{xsa~l1=%eLly8B z4gCIH05&Y;6O2uFSopNqP|<$ml$N40^ikxw0`o<~ywS1(qKqQN!@?Ykl|bE4M?P+e zo$^Vs_+x)iuw?^>>`$&lOQOUkZ5>+OLnRA)FqgpDjW&q*WAe(_mAT6IKS9;iZBl8M z<@=Y%zcQUaSBdrs27bVK`c$)h6A1GYPS$y(FLRD5Yl8E3j0KyH08#8qLrsc_qlws; znMV%Zq8k+&T2kf%6ZO^2=AE9>?a587g%-={X}IS~P*I(NeCF9_9&`)|ok0iiIun zo+^odT0&Z4k;rn7I1v87=z!zKU(%gfB$(1mrRYeO$sbqM22Kq68z9wgdg8HBxp>_< zn9o%`f?sVO=IN#5jSX&CGODWlZfQ9A)njK2O{JutYwRZ?n0G_p&*uwpE`Md$iQxrd zoQfF^b8Ou)+3BO_3_K5y*~?<(BF@1l+@?Z6;^;U>qlB)cdro;rxOS1M{Az$s^9o5sXDCg8yD<=(pKI*0e zLk>@lo#&s0)^*Q+G)g}C0IErqfa9VbL*Qe=OT@&+N8m|GJF7jd83vY#SsuEv2s{Q> z>IpoubNs>D_5?|kXGAPgF@mb_9<%hjU;S0C8idI)a=F#lPLuQJ^7OnjJlH_Sks9JD zMl1td%YsWq3YWhc;E$H1<0P$YbSTqs`JKY%(}svsifz|h8BHguL82dBl+z0^YvWk8 zGy;7Z0v5_FJ2A$P0wIr)lD?cPR%cz>kde!=W%Ta^ih+Dh4UKdf7ip?rBz@%y2&>`6 zM#q{JXvW9ZlaSk1oD!n}kSmcDa2v6T^Y-dy+#fW^y>eS8_%<7tWXUp8U@s$^{JFfKMjDAvR z$YmVB;n3ofl!ro9RNT!TpQpcycXCR}$9k5>IPWDXEenQ58os?_weccrT+Bh5sLoiH zZ_7~%t(vT)ZTEO= zb0}@KaD{&IyK_sd8b$`Qz3%UA`nSo zn``!BdCeN!#^G;lK@G2ron*0jQhbdw)%m$2;}le@z~PSLnU-z@tL)^(p%P>OO^*Ff zNRR9oQ`W+x^+EU+3BpluwK77|B3=8QyT|$V;02bn_LF&3LhLA<#}{{)jE)}CiW%VEU~9)SW+=F%7U-iYlQ&q!#N zwI2{(h|Pi&<8_fqvT*}FLN^0CxN}#|3I9G_xmVg$gbn2ZdhbmGk7Q5Q2Tm*ox8NMo zv`iaZW|ZEOMyQga5fts?&T-eCCC9pS0mj7v0SDkD=*^MxurP@89v&Z#3q{FM!a_nr zb?KzMv`BBFOew>4!ft@A&(v-kWXny-j#egKef|#!+3>26Qq0 zv!~8ev4G`7Qk>V1TaMT-&ziqoY3IJp8_S*%^1j73D|=9&;tDZH^!LYFMmME4*Wj(S zRt~Q{aLb_O;wi4u&=}OYuj}Lw*j$@z*3>4&W{)O-oi@9NqdoU!=U%d|se&h?^$Ip# z)BY+(1+cwJz!yy4%l(aLC;T!~Ci>yAtXJb~b*yr&v7f{YCU8P|N1v~H`xmGsG)g)y z4%mv=cPd`s7a*#OR7f0lpD$ueP>w8qXj0J&*7xX+U!uat5QNk>zwU$0acn5p=$88L=jn_QCSYkTV;1~(yUem#0gB`FeqY98sf=>^@ z_MCdvylv~WL%y_%y_FE1)j;{Szj1+K7Lr_y=V+U zk6Tr;>XEqlEom~QGL!a+wOf(@ZWoxE<$^qHYl*H1a~kk^BLPn785%nQb$o;Cuz0h& za9LMx^bKEbPS%e8NM33Jr|1T|ELC(iE!FUci38xW_Y7kdHid#2ie+XZhP;2!Z;ZAM zB_cXKm)VrPK!SK|PY00Phwrpd+x0_Aa;}cDQvWKrwnQrqz##_gvHX2ja?#_{f#;bz`i>C^^ zTLDy;6@HZ~XQi7rph!mz9k!m;KchA)uMd`RK4WLK7)5Rl48m#l>b(#`WPsl<0j z-sFkSF6>Nk|LKnHtZ`W_NnxZP62&w)S(aBmmjMDKzF%G;3Y?FUbo?>b5;0j8Lhtc4 zr*8d5Y9>g@FFZaViw7c16VsHcy0u7M%6>cG1=s=Dtx?xMJSKIu9b6GU8$uSzf43Y3 zYq|U+IWfH;SM~*N1v`KJo!|yfLxTFS?oHsr3qvzeVndVV^%BWmW6re_S!2;g<|Oao z+N`m#*i!)R%i1~NO-xo{qpwL0ZrL7hli;S z3L0lQ_z}z`fdK39Mg~Zd*%mBdD;&5EXa~@H(!###L`ycr7gW`f)KRuqyHL3|uyy3h zSS^td#E&Knc$?dXs*{EnPYOp^-vjAc-h4z#XkbG&REC7;0>z^^Z}i8MxGKerEY z>l?(wReOlXEsNE5!DO&ZWyxY)gG#FSZs%fXuzA~XIAPVp-%yb2XLSV{1nH6{)5opg z(dZKckn}Q4Li-e=eUDs1Psg~5zdn1>ql(*(nn6)iD*OcVkwmKL(A{fix(JhcVB&}V zVt*Xb!{gzvV}dc446>(D=SzfCu7KB`oMjv6kPzSv&B>>HLSJP|wN`H;>oRw*tl#N) z*zZ-xwM7D*AIsBfgqOjY1Mp9aq$kRa^dZU_xw~KxP;|q(m+@e+YSn~`wEJzM|Ippb zzb@%;hB7iH4op9SqmX?j!KP2chsb79(mFossBO-Zj8~L}9L%R%Bw<`^X>hjkCY5SG z7lY!8I2mB#z)1o;*3U$G)3o0A&{0}#B;(zPd2`OF`Gt~8;0Re8nIseU z_yzlf$l+*-wT~_-cYk$^wTJ@~7i@u(CZs9FVkJCru<*yK8&>g+t*!JqCN6RH%8S-P zxH8+Cy#W?!;r?cLMC(^BtAt#xPNnwboI*xWw#T|IW^@3|q&QYY6Ehxoh@^URylR|T zne-Y6ugE^7p5bkRDWIh)?JH5V^ub82l-LuVjDr7UT^g`q4dB&mBFRWGL_C?hoeL(% zo}ocH5t7|1Mda}T!^{Qt9vmA2ep4)dQSZO>?Eq8}qRp&ZJ?-`Tnw+MG(eDswP(L*X3ahC2Ad0_wD^ff9hfzb%Jd`IXx5 zae@NMzBXJDwJS?7_%!TB^E$N8pvhOHDK$7YiOelTY`6KX8hK6YyT$tk*adwN>s^Kp zwM3wGVPhwKU*Yq-*BCs}l`l#Tej(NQ>jg*S0TN%D+GcF<14Ms6J`*yMY;W<-mMN&-K>((+P}+t+#0KPGrzjP zJ~)=Bcz%-K!L5ozIWqO(LM)l_9lVOc4*S65&DKM#TqsiWNG{(EZQw!bc>qLW`=>p-gVJ;T~aN2D_- z{>SZC=_F+%hNmH6ub%Ykih0&YWB!%sd%W5 zHC2%QMP~xJgt4>%bU>%6&uaDtSD?;Usm}ari0^fcMhi_)JZgb1g5j zFl4`FQ*%ROfYI}e7RIq^&^a>jZF23{WB`T>+VIxj%~A-|m=J7Va9FxXV^%UwccSZd zuWINc-g|d6G5;95*%{e;9S(=%yngpfy+7ao|M7S|Jb0-4+^_q-uIqVS&ufU880UDH*>(c)#lt2j zzvIEN>>$Y(PeALC-D?5JfH_j+O-KWGR)TKunsRYKLgk7eu4C{iF^hqSz-bx5^{z0h ze2+u>Iq0J4?)jIo)}V!!m)%)B;a;UfoJ>VRQ*22+ncpe9f4L``?v9PH&;5j{WF?S_C>Lq>nkChZB zjF8(*v0c(lU^ZI-)_uGZnnVRosrO4`YinzI-RSS-YwjYh3M`ch#(QMNw*)~Et7Qpy z{d<3$4FUAKILq9cCZpjvKG#yD%-juhMj>7xIO&;c>_7qJ%Ae8Z^m)g!taK#YOW3B0 zKKSMOd?~G4h}lrZbtPk)n*iOC1~mDhASGZ@N{G|dF|Q^@1ljhe=>;wusA&NvY*w%~ zl+R6B^1yZiF)YN>0ms%}qz-^U-HVyiN3R9k1q4)XgDj#qY4CE0)52%evvrrOc898^ z*^)XFR?W%g0@?|6Mxo1ZBp%(XNv_RD-<#b^?-Fs+NL^EUW=iV|+Vy*F%;rBz~pN7%-698U-VMfGEVnmEz7fL1p)-5sLT zL;Iz>FCLM$p$c}g^tbkGK1G$IALq1Gd|We@&TtW!?4C7x4l*=4oF&&sr0Hu`x<5!m zhX&&Iyjr?AkNXU_5P_b^Q3U9sy#f6ZF@2C96$>1k*E-E%DjwvA{VL0PdU~suN~DZo zm{T!>sRdp`Ldpp9olrH@(J$QyGq!?#o1bUo=XP2OEuT3`XzI>s^0P{manUaE4pI%! zclQq;lbT;nx7v3tR9U)G39h?ryrxzd0xq4KX7nO?piJZbzT_CU&O=T(Vt;>jm?MgC z2vUL#*`UcMsx%w#vvjdamHhmN!(y-hr~byCA-*iCD};#l+bq;gkwQ0oN=AyOf@8ow>Pj<*A~2*dyjK}eYdN);%!t1 z6Y=|cuEv-|5BhA?n2Db@4s%y~(%Wse4&JXw=HiO48%c6LB~Z0SL1(k^9y?ax%oj~l zf7(`iAYLdPRq*ztFC z7VtAb@s{as%&Y;&WnyYl+6Wm$ru*u!MKIg_@01od-iQft0rMjIj8e7P9eKvFnx_X5 zd%pDg-|8<>T2Jdqw>AII+fe?CgP+fL(m0&U??QL8YzSjV{SFi^vW~;wN@or_(q<0Y zRt~L}#JRcHOvm$CB)T1;;7U>m%)QYBLTR)KTARw%zoDxgssu5#v{UEVIa<>{8dtkm zXgbCGp$tfue+}#SD-PgiNT{Zu^YA9;4BnM(wZ9-biRo_7pN}=aaimjYgC=;9@g%6< zxol5sT_$<8{LiJ6{l1+sV)Z_QdbsfEAEMw!5*zz6)Yop?T0DMtR_~wfta)E6_G@k# zZRP11D}$ir<`IQ`<(kGfAS?O-DzCyuzBq6dxGTNNTK?r^?zT30mLY!kQ=o~Hv*k^w zvq!LBjW=zzIi%UF@?!g9vt1CqdwV(-2LYy2=E@Z?B}JDyVkluHtzGsWuI1W5svX~K z&?UJ45$R7g>&}SFnLnmw09R2tUgmr_w6mM9C}8GvQX>nL&5R#xBqnp~Se(I>R42`T zqZe9p6G(VzNB3QD><8+y%{e%6)sZDRXTR|MI zM#eZmao-~_`N|>Yf;a;7yvd_auTG#B?Vz5D1AHx=zpVUFe7*hME z+>KH5h1In8hsVhrstc>y0Q!FHR)hzgl+*Q&5hU9BVJlNGRkXiS&06eOBV^dz3;4d5 zeYX%$62dNOprZV$px~#h1RH?_E%oD6y;J;pF%~y8M)8pQ0olYKj6 zE+hd|7oY3ot=j9ZZ))^CCPADL6Jw%)F@A{*coMApcA$7fZ{T@3;WOQ352F~q6`Mgi z$RI6$8)a`Aaxy<8Bc;{wlDA%*%(msBh*xy$L-cBJvQ8hj#FCyT^%+Phw1~PaqyDou^JR0rxDkSrmAdjeYDFDZ`E z)G3>XtpaSPDlydd$RGHg;#4|4{aP5c_Om z2u5xgnhnA)K%8iU==}AxPxZCYC)lyOlj9as#`5hZ=<6<&DB%i_XCnt5=pjh?iusH$ z>)E`@HNZcAG&RW3Ys@`Ci{;8PNzE-ZsPw$~Wa!cP$ye+X6;9ceE}ah+3VY7Mx}#0x zbqYa}eO*FceiY2jNS&2cH9Y}(;U<^^cWC5Ob&)dZedvZA9HewU3R;gRQ)}hUdf+~Q zS_^4ds*W1T#bxS?%RH&<739q*n<6o|mV;*|1s>ly-Biu<2*{!!0#{_234&9byvn0* z5=>{95Zfb{(?h_Jk#ocR$FZ78O*UTOxld~0UF!kyGM|nH%B*qf)Jy}N!uT9NGeM19 z-@=&Y0yGGo_dw!FD>juk%P$6$qJkj}TwLBoefi;N-$9LAeV|)|-ET&culW9Sb_pc_ zp{cXI0>I0Jm_i$nSvGnYeLSSj{ccVS2wyL&0x~&5v;3Itc82 z5lIAkfn~wcY-bQB$G!ufWt%qO;P%&2B_R5UKwYxMemIaFm)qF1rA zc>gEihb=jBtsXCi0T%J37s&kt*3$s7|6)L(%UiY)6axuk{6RWIS8^+u;)6!R?Sgap z9|6<0bx~AgVi|*;zL@2x>Pbt2Bz*uv4x-`{F)XatTs`S>unZ#P^ZiyjpfL_q2z^fqgR-fbOcG=Y$q>ozkw1T6dH8-)&ww+z?E0 zR|rV(9bi6zpX3Ub>PrPK!{X>e$C66qCXAeFm)Y+lX8n2Olt7PNs*1^si)j!QmFV#t z0P2fyf$N^!dyTot&`Ew5{i5u<8D`8U`qs(KqaWq5iOF3x2!-z65-|HsyYz(MAKZ?< zCpQR;E)wn%s|&q(LVm0Ab>gdmCFJeKwVTnv@Js%!At;I=A>h=l=p^&<4;Boc{$@h< z38v`3&2wJtka@M}GS%9!+SpJ}sdtoYzMevVbnH+d_eMxN@~~ zZq@k)7V5f8u!yAX2qF3qjS7g%n$JuGrMhQF!&S^7(%Y{rP*w2FWj(v_J{+Hg*}wdWOd~pHQ19&n3RWeljK9W%sz&Y3Tm3 zR`>6YR54%qBHGa)2xbs`9cs_EsNHxsfraEgZ)?vrtooeA0sPKJK7an){ngtV@{SBa zkO6ORr1_Xqp+`a0e}sC*_y(|RKS13ikmHp3C^XkE@&wjbGWrt^INg^9lDz#B;bHiW zkK4{|cg08b!yHFSgPca5)vF&gqCgeu+c82%&FeM^Bb}GUxLy-zo)}N;#U?sJ2?G2BNe*9u_7kE5JeY!it=f`A_4gV3} z`M!HXZy#gN-wS!HvHRqpCHUmjiM;rVvpkC!voImG%OFVN3k(QG@X%e``VJSJ@Z7tb z*Onlf>z^D+&$0!4`IE$;2-NSO9HQWd+UFW(r;4hh;(j^p4H-~6OE!HQp^96v?{9Zt z;@!ZcccV%C2s6FMP#qvo4kG6C04A>XILt>JW}%0oE&HM5f6 zYLD!;My>CW+j<~=Wzev{aYtx2ZNw|ptTFV(4;9`6Tmbz6K1)fv4qPXa2mtoPt&c?P zhmO+*o8uP3ykL6E$il00@TDf6tOW7fmo?Oz_6GU^+5J=c22bWyuH#aNj!tT-^IHrJ zu{aqTYw@q;&$xDE*_kl50Jb*dp`(-^p={z}`rqECTi~3 z>0~A7L6X)=L5p#~$V}gxazgGT7$3`?a)zen>?TvAuQ+KAIAJ-s_v}O6@`h9n-sZk> z`3{IJeb2qu9w=P*@q>iC`5wea`KxCxrx{>(4{5P+!cPg|pn~;n@DiZ0Y>;k5mnKeS z!LIfT4{Lgd=MeysR5YiQKCeNhUQ;Os1kAymg6R!u?j%LF z4orCszIq_n52ulpes{(QN|zirdtBsc{9^Z72Ycb2ht?G^opkT_#|4$wa9`)8k3ilU z%ntAi`nakS1r10;#k^{-ZGOD&Z2|k=p40hRh5D7(&JG#Cty|ECOvwsSHkkSa)36$4 z?;v#%@D(=Raw(HP5s>#4Bm?f~n1@ebH}2tv#7-0l-i^H#H{PC|F@xeNS+Yw{F-&wH z07)bj8MaE6`|6NoqKM~`4%X> zKFl&7g1$Z3HB>lxn$J`P`6GSb6CE6_^NA1V%=*`5O!zP$a7Vq)IwJAki~XBLf=4TF zPYSL}>4nOGZ`fyHChq)jy-f{PKFp6$plHB2=;|>%Z^%)ecVue(*mf>EH_uO^+_zm? zJATFa9SF~tFwR#&0xO{LLf~@}s_xvCPU8TwIJgBs%FFzjm`u?1699RTui;O$rrR{# z1^MqMl5&6)G%@_k*$U5Kxq84!AdtbZ!@8FslBML}<`(Jr zenXrC6bFJP=R^FMBg7P?Pww-!a%G@kJH_zezKvuWU0>m1uyy}#Vf<$>u?Vzo3}@O% z1JR`B?~Tx2)Oa|{DQ_)y9=oY%haj!80GNHw3~qazgU-{|q+Bl~H94J!a%8UR?XsZ@ z0*ZyQugyru`V9b(0OrJOKISfi89bSVR zQy<+i_1XY}4>|D%X_`IKZUPz6=TDb)t1mC9eg(Z=tv zq@|r37AQM6A%H%GaH3szv1L^ku~H%5_V*fv$UvHl*yN4iaqWa69T2G8J2f3kxc7UE zOia@p0YNu_q-IbT%RwOi*|V|&)e5B-u>4=&n@`|WzH}BK4?33IPpXJg%`b=dr_`hU z8JibW_3&#uIN_#D&hX<)x(__jUT&lIH$!txEC@cXv$7yB&Rgu){M`9a`*PH} zRcU)pMWI2O?x;?hzR{WdzKt^;_pVGJAKKd)F$h;q=Vw$MP1XSd<;Mu;EU5ffyKIg+ z&n-Nb?h-ERN7(fix`htopPIba?0Gd^y(4EHvfF_KU<4RpN0PgVxt%7Yo99X*Pe|zR z?ytK&5qaZ$0KSS$3ZNS$$k}y(2(rCl=cuYZg{9L?KVgs~{?5adxS))Upm?LDo||`H zV)$`FF3icFmxcQshXX*1k*w3O+NjBR-AuE70=UYM*7>t|I-oix=bzDwp2*RoIwBp@r&vZukG; zyi-2zdyWJ3+E?{%?>e2Ivk`fAn&Ho(KhGSVE4C-zxM-!j01b~mTr>J|5={PrZHOgO zw@ND3=z(J7D>&C7aw{zT>GHhL2BmUX0GLt^=31RRPSnjoUO9LYzh_yegyPoAKhAQE z>#~O27dR4&LdQiak6={9_{LN}Z>;kyVYKH^d^*!`JVSXJlx#&r4>VnP$zb{XoTb=> zZsLvh>keP3fkLTIDdpf-@(ADfq4=@X=&n>dyU0%dwD{zsjCWc;r`-e~X$Q3NTz_TJ zOXG|LMQQIjGXY3o5tBm9>k6y<6XNO<=9H@IXF;63rzsC=-VuS*$E{|L_i;lZmHOD< zY92;>4spdeRn4L6pY4oUKZG<~+8U-q7ZvNOtW0i*6Q?H`9#U3M*k#4J;ek(MwF02x zUo1wgq9o6XG#W^mxl>pAD)Ll-V5BNsdVQ&+QS0+K+?H-gIBJ-ccB1=M_hxB6qcf`C zJ?!q!J4`kLhAMry4&a_0}up{CFevcjBl|N(uDM^N5#@&-nQt2>z*U}eJGi}m5f}l|IRVj-Q;a>wcLpK5RRWJ> zysdd$)Nv0tS?b~bw1=gvz3L_ZAIdDDPj)y|bp1;LE`!av!rODs-tlc}J#?erTgXRX z$@ph%*~_wr^bQYHM7<7=Q=45v|Hk7T=mDpW@OwRy3A_v`ou@JX5h!VI*e((v*5Aq3 zVYfB4<&^Dq5%^?~)NcojqK`(VXP$`#w+&VhQOn%;4pCkz;NEH6-FPHTQ+7I&JE1+Ozq-g43AEZV>ceQ^9PCx zZG@OlEF~!Lq@5dttlr%+gNjRyMwJdJU(6W_KpuVnd{3Yle(-p#6erIRc${l&qx$HA z89&sp=rT7MJ=DuTL1<5{)wtUfpPA|Gr6Q2T*=%2RFm@jyo@`@^*{5{lFPgv>84|pv z%y{|cVNz&`9C*cUely>-PRL)lHVErAKPO!NQ3<&l5(>Vp(MuJnrOf^4qpIa!o3D7( z1bjn#Vv$#or|s7Hct5D@%;@48mM%ISY7>7@ft8f?q~{s)@BqGiupoK1BAg?PyaDQ1 z`YT8{0Vz{zBwJ={I4)#ny{RP{K1dqzAaQN_aaFC%Z>OZ|^VhhautjDavGtsQwx@WH zr|1UKk^+X~S*RjCY_HN!=Jx>b6J8`Q(l4y|mc<6jnkHVng^Wk(A13-;AhawATsmmE#H%|8h}f1frs2x@Fwa_|ea+$tdG2Pz{7 z!ox^w^>^Cv4e{Xo7EQ7bxCe8U+LZG<_e$RnR?p3t?s^1Mb!ieB z#@45r*PTc_yjh#P=O8Zogo+>1#|a2nJvhOjIqKK1U&6P)O%5s~M;99O<|Y9zomWTL z666lK^QW`)cXV_^Y05yQZH3IRCW%25BHAM$c0>w`x!jh^15Zp6xYb!LoQ zr+RukTw0X2mxN%K0%=8|JHiaA3pg5+GMfze%9o5^#upx0M?G9$+P^DTx7~qq9$Qoi zV$o)yy zuUq>3c{_q+HA5OhdN*@*RkxRuD>Bi{Ttv_hyaaB;XhB%mJ2Cb{yL;{Zu@l{N?!GKE7es6_9J{9 zO(tmc0ra2;@oC%SS-8|D=omQ$-Dj>S)Utkthh{ovD3I%k}HoranSepC_yco2Q8 zY{tAuPIhD{X`KbhQIr%!t+GeH%L%q&p z3P%<-S0YY2Emjc~Gb?!su85}h_qdu5XN2XJUM}X1k^!GbwuUPT(b$Ez#LkG6KEWQB z7R&IF4srHe$g2R-SB;inW9T{@+W+~wi7VQd?}7||zi!&V^~o0kM^aby7YE_-B63^d zf_uo8#&C77HBautt_YH%v6!Q>H?}(0@4pv>cM6_7dHJ)5JdyV0Phi!)vz}dv{*n;t zf(+#Hdr=f8DbJqbMez)(n>@QT+amJ7g&w6vZ-vG^H1v~aZqG~u!1D(O+jVAG0EQ*aIsr*bsBdbD`)i^FNJ z&B@yxqPFCRGT#}@dmu-{0vp47xk(`xNM6E=7QZ5{tg6}#zFrd8Pb_bFg7XP{FsYP8 zbvWqG6#jfg*4gvY9!gJxJ3l2UjP}+#QMB(*(?Y&Q4PO`EknE&Cb~Yb@lCbk;-KY)n zzbjS~W5KZ3FV%y>S#$9Sqi$FIBCw`GfPDP|G=|y32VV-g@a1D&@%_oAbB@cAUx#aZ zlAPTJ{iz#Qda8(aNZE&0q+8r3&z_Ln)b=5a%U|OEcc3h1f&8?{b8ErEbilrun}mh3 z$1o^$-XzIiH|iGoJA`w`o|?w3m*NX|sd$`Mt+f*!hyJvQ2fS*&!SYn^On-M|pHGlu z4SC5bM7f6BAkUhGuN*w`97LLkbCx=p@K5RL2p>YpDtf{WTD|d3ucb6iVZ-*DRtoEA zCC5(x)&e=giR_id>5bE^l%Mxx>0@FskpCD4oq@%-Fg$8IcdRwkfn;DsjoX(v;mt3d z_4Mnf#Ft4x!bY!7Hz?RRMq9;5FzugD(sbt4up~6j?-or+ch~y_PqrM2hhTToJjR_~ z)E1idgt7EW>G*9%Q^K;o_#uFjX!V2pwfpgi>}J&p_^QlZki!@#dkvR`p?bckC`J*g z=%3PkFT3HAX2Q+dShHUbb1?ZcK8U7oaufLTCB#1W{=~k0Jabgv>q|H+GU=f-y|{p4 zwN|AE+YbCgx=7vlXE?@gkXW9PaqbO#GB=4$o0FkNT#EI?aLVd2(qnPK$Yh%YD%v(mdwn}bgsxyIBI^)tY?&G zi^2JfClZ@4b{xFjyTY?D61w@*ez2@5rWLpG#34id?>>oPg{`4F-l`7Lg@D@Hc}On} zx%BO4MsLYosLGACJ-d?ifZ35r^t*}wde>AAWO*J-X%jvD+gL9`u`r=kP zyeJ%FqqKfz8e_3K(M1RmB?gIYi{W7Z<THP2ihue0mbpu5n(x_l|e1tw(q!#m5lmef6ktqIb${ zV+ee#XRU}_dDDUiV@opHZ@EbQ<9qIZJMDsZDkW0^t3#j`S)G#>N^ZBs8k+FJhAfu< z%u!$%dyP3*_+jUvCf-%{x#MyDAK?#iPfE<(@Q0H7;a125eD%I(+!x1f;Sy`e<9>nm zQH4czZDQmW7^n>jL)@P@aAuAF$;I7JZE5a8~AJI5CNDqyf$gjloKR7C?OPt9yeH}n5 zNF8Vhmd%1O>T4EZD&0%Dt7YWNImmEV{7QF(dy!>q5k>Kh&Xy8hcBMUvVV~Xn8O&%{ z&q=JCYw#KlwM8%cu-rNadu(P~i3bM<_a{3!J*;vZhR6dln6#eW0^0kN)Vv3!bqM`w z{@j*eyzz=743dgFPY`Cx3|>ata;;_hQ3RJd+kU}~p~aphRx`03B>g4*~f%hUV+#D9rYRbsGD?jkB^$3XcgB|3N1L& zrmk9&Dg450mAd=Q_p?gIy5Zx7vRL?*rpNq76_rysFo)z)tp0B;7lSb9G5wX1vC9Lc z5Q8tb-alolVNWFsxO_=12o}X(>@Mwz1mkYh1##(qQwN=7VKz?61kay8A9(94Ky(4V zq6qd2+4a20Z0QRrmp6C?4;%U?@MatfXnkj&U6bP_&2Ny}BF%4{QhNx*Tabik9Y-~Z z@0WV6XD}aI(%pN}oW$X~Qo_R#+1$@J8(31?zM`#e`#(0f<-AZ^={^NgH#lc?oi(Mu zMk|#KR^Q;V@?&(sh5)D;-fu)rx%gXZ1&5)MR+Mhssy+W>V%S|PRNyTAd}74<(#J>H zR(1BfM%eIv0+ngHH6(i`?-%_4!6PpK*0X)79SX0X$`lv_q>9(E2kkkP;?c@rW2E^Q zs<;`9dg|lDMNECFrD3jTM^Mn-C$44}9d9Kc z#>*k&e#25;D^%82^1d@Yt{Y91MbEu0C}-;HR4+IaCeZ`l?)Q8M2~&E^FvJ?EBJJ(% zz1>tCW-E~FB}DI}z#+fUo+=kQME^=eH>^%V8w)dh*ugPFdhMUi3R2Cg}Zak4!k_8YW(JcR-)hY8C zXja}R7@%Q0&IzQTk@M|)2ViZDNCDRLNI)*lH%SDa^2TG4;%jE4n`8`aQAA$0SPH2@ z)2eWZuP26+uGq+m8F0fZn)X^|bNe z#f{qYZS!(CdBdM$N2(JH_a^b#R2=>yVf%JI_ieRFB{w&|o9txwMrVxv+n78*aXFGb z>Rkj2yq-ED<)A46T9CL^$iPynv`FoEhUM10@J+UZ@+*@_gyboQ>HY9CiwTUo7OM=w zd~$N)1@6U8H#Zu(wGLa_(Esx%h@*pmm5Y9OX@CY`3kPYPQx@z8yAgtm(+agDU%4?c zy8pR4SYbu8vY?JX6HgVq7|f=?w(%`m-C+a@E{euXo>XrGmkmFGzktI*rj*8D z)O|CHKXEzH{~iS+6)%ybRD|JRQ6j<+u_+=SgnJP%K+4$st+~XCVcAjI9e5`RYq$n{ zzy!X9Nv7>T4}}BZpSj9G9|(4ei-}Du<_IZw+CB`?fd$w^;=j8?vlp(#JOWiHaXJjB0Q00RHJ@sG6N#y^H7t^&V} z;VrDI4?75G$q5W9mV=J2iP24NHJy&d|HWHva>FaS#3AO?+ohh1__FMx;?`f{HG3v0 ztiO^Wanb>U4m9eLhoc_2B(ca@YdnHMB*~aYO+AE(&qh@?WukLbf_y z>*3?Xt-lxr?#}y%kTv+l8;!q?Hq8XSU+1E8x~o@9$)zO2z9K#(t`vPDri`mKhv|sh z{KREcy`#pnV>cTT7dm7M9B@9qJRt3lfo(C`CNkIq@>|2<(yn!AmVN?ST zbX_`JjtWa3&N*U{K7FYX8})*D#2@KBae` zhKS~s!r%SrXdhCsv~sF}7?ocyS?afya6%rDBu6g^b2j#TOGp^1zrMR}|70Z>CeYq- z1o|-=FBKlu{@;pm@QQJ_^!&hzi;0Z_Ho){x3O1KQ#TYk=rAt9`YKC0Y^}8GWIN{QW znYJyVTrmNvl!L=YS1G8BAxGmMUPi+Q7yb0XfG`l+L1NQVSbe^BICYrD;^(rke{jWCEZOtVv3xFze!=Z&(7}!)EcN;v0Dbit?RJ6bOr;N$ z=nk8}H<kCEE+IK3z<+3mkn4q!O7TMWpKShWWWM)X*)m6k%3luF6c>zOsFccvfLWf zH+mNkh!H@vR#~oe=ek}W3!71z$Dlj0c(%S|sJr>rvw!x;oCek+8f8s!U{DmfHcNpO z9>(IKOMfJwv?ey`V2ysSx2Npeh_x#bMh)Ngdj$al;5~R7Ac5R2?*f{hI|?{*$0qU- zY$6}ME%OGh^zA^z9zJUs-?a4ni8cw_{cYED*8x{bWg!Fn9)n;E9@B+t;#k}-2_j@# zg#b%R(5_SJAOtfgFCBZc`n<&z6)%nOIu@*yo!a% zpLg#36KBN$01W{b;qWN`Tp(T#jh%;Zp_zpS64lvBVY2B#UK)p`B4Oo)IO3Z&D6<3S zfF?ZdeNEnzE{}#gyuv)>;z6V{!#bx)` zY;hL*f(WVD*D9A4$WbRKF2vf;MoZVdhfWbWhr{+Db5@M^A4wrFReuWWimA4qp`GgoL2`W4WPUL5A=y3Y3P z%G?8lLUhqo@wJW8VDT`j&%YY7xh51NpVYlsrk_i4J|pLO(}(b8_>%U2M`$iVRDc-n zQiOdJbroQ%*vhN{!{pL~N|cfGooK_jTJCA3g_qs4c#6a&_{&$OoSQr_+-O^mKP=Fu zGObEx`7Qyu{nHTGNj(XSX*NPtAILL(0%8Jh)dQh+rtra({;{W2=f4W?Qr3qHi*G6B zOEj7%nw^sPy^@05$lOCjAI)?%B%&#cZ~nC|=g1r!9W@C8T0iUc%T*ne z)&u$n>Ue3FN|hv+VtA+WW)odO-sdtDcHfJ7s&|YCPfWaVHpTGN46V7Lx@feE#Od%0XwiZy40plD%{xl+K04*se zw@X4&*si2Z_0+FU&1AstR)7!Th(fdaOlsWh`d!y=+3m!QC$Zlkg8gnz!}_B7`+wSz z&kD?6{zPnE3uo~Tv8mLP%RaNt2hcCJBq=0T>%MW~Q@Tpt2pPP1?KcywH>in5@ zx+5;xu-ltFfo5vLU;2>r$-KCHjwGR&1XZ0YNyrXXAUK!FLM_7mV&^;;X^*YH(FLRr z`0Jjg7wiq2bisa`CG%o9i)o1`uG?oFjU_Zrv1S^ipz$G-lc^X@~6*)#%nn+RbgksJfl{w=k31(q>7a!PCMp5YY{+Neh~mo zG-3dd!0cy`F!nWR?=9f_KP$X?Lz&cLGm_ohy-|u!VhS1HG~e7~xKpYOh=GmiiU;nu zrZ5tWfan3kp-q_vO)}vY6a$19Q6UL0r znJ+iSHN-&w@vDEZ0V%~?(XBr|jz&vrBNLOngULxtH(Rp&U*rMY42n;05F11xh?k;n_DX2$4|vWIkXnbwfC z=ReH=(O~a;VEgVO?>qsP*#eOC9Y<_9Yt<6X}X{PyF7UXIA$f)>NR5P&4G_Ygq(9TwwQH*P>Rq>3T4I+t2X(b5ogXBAfNf!xiF#Gilm zp2h{&D4k!SkKz-SBa%F-ZoVN$7GX2o=(>vkE^j)BDSGXw?^%RS9F)d_4}PN+6MlI8*Uk7a28CZ)Gp*EK)`n5i z){aq=0SFSO-;sw$nAvJU-$S-cW?RSc7kjEBvWDr1zxb1J7i;!i+3PQwb=)www?7TZ zE~~u)vO>#55eLZW;)F(f0KFf8@$p)~llV{nO7K_Nq-+S^h%QV_CnXLi)p*Pq&`s!d zK2msiR;Hk_rO8`kqe_jfTmmv|$MMo0ll}mI)PO4!ikVd(ZThhi&4ZwK?tD-}noj}v zBJ?jH-%VS|=t)HuTk?J1XaDUjd_5p1kPZi6y#F6$lLeRQbj4hsr=hX z4tXkX2d5DeLMcAYTeYm|u(XvG5JpW}hcOs4#s8g#ihK%@hVz|kL=nfiBqJ{*E*WhC zht3mi$P3a(O5JiDq$Syu9p^HY&9~<#H89D8 zJm84@%TaL_BZ+qy8+T3_pG7Q%z80hnjN;j>S=&WZWF48PDD%55lVuC0%#r5(+S;WH zS7!HEzmn~)Ih`gE`faPRjPe^t%g=F ztpGVW=Cj5ZkpghCf~`ar0+j@A=?3(j@7*pq?|9)n*B4EQTA1xj<+|(Y72?m7F%&&& zdO44owDBPT(8~RO=dT-K4#Ja@^4_0v$O3kn73p6$s?mCmVDUZ+Xl@QcpR6R3B$=am z%>`r9r2Z79Q#RNK?>~lwk^nQlR=Hr-ji$Ss3ltbmB)x@0{VzHL-rxVO(++@Yr@Iu2 zTEX)_9sVM>cX$|xuqz~Y8F-(n;KLAfi*63M7mh&gsPR>N0pd9h!0bm%nA?Lr zS#iEmG|wQd^BSDMk0k?G>S-uE$vtKEF8Dq}%vLD07zK4RLoS?%F1^oZZI$0W->7Z# z?v&|a`u#UD=_>i~`kzBGaPj!mYX5g?3RC4$5EV*j0sV)>H#+$G6!ci=6`)85LWR=FCp-NUff`;2zG9nU6F~ z;3ZyE*>*LvUgae+uMf}aV}V*?DCM>{o31+Sx~6+sz;TI(VmIpDrN3z+BUj`oGGgLP z>h9~MP}Pw#YwzfGP8wSkz`V#}--6}7S9yZvb{;SX?6PM_KuYpbi~*=teZr-ga2QqIz{QrEyZ@>eN*qmy;N@FCBbRNEeeoTmQyrX;+ zCkaJ&vOIbc^2BD6_H+Mrcl?Nt7O{xz9R_L0ZPV_u!sz+TKbXmhK)0QWoe-_HwtKJ@@7=L+ z+K8hhf=4vbdg3GqGN<;v-SMIzvX=Z`WUa_91Yf89^#`G(f-Eq>odB^p-Eqx}ENk#&MxJ+%~Ad2-*`1LNT>2INPw?*V3&kE;tt?rQyBw? zI+xJD04GTz1$7~KMnfpkPRW>f%n|0YCML@ODe`10;^DXX-|Hb*IE%_Vi#Pn9@#ufA z_8NY*1U%VseqYrSm?%>F@`laz+f?+2cIE4Jg6 z_VTcx|DSEA`g!R%RS$2dSRM|9VQClsW-G<~=j5T`pTbu-x6O`R z98b;}`rPM(2={YiytrqX+uh65f?%XiPp`;4CcMT*E*dQJ+if9^D>c_Dk8A(cE<#r=&!& z_`Z01=&MEE+2@yr!|#El=yM}v>i=?w^2E_FLPy(*4A9XmCNy>cBWdx3U>1RylsItO z4V8T$z3W-qqq*H`@}lYpfh=>C!tieKhoMGUi)EpWDr;yIL&fy};Y&l|)f^QE*k~4C zH>y`Iu%#S)z)YUqWO%el*Z)ME#p{1_8-^~6UF;kBTW zMQ!eXQuzkR#}j{qb(y9^Y!X7&T}}-4$%4w@w=;w+>Z%uifR9OoQ>P?0d9xpcwa>7kTv2U zT-F?3`Q`7xOR!gS@j>7In>_h){j#@@(ynYh;nB~}+N6qO(JO1xA z@59Pxc#&I~I64slNR?#hB-4XE>EFU@lUB*D)tu%uEa))B#eJ@ZOX0hIulfnDQz-y8 z`CX@(O%_VC{Ogh&ot``jlDL%R!f>-8yq~oLGxBO?+tQb5%k@a9zTs!+=NOwSVH-cR zqFo^jHeXDA_!rx$NzdP;>{-j5w3QUrR<;}=u2|FBJ;D#v{SK@Z6mjeV7_kFmWt95$ zeGaF{IU?U>?W`jzrG_9=9}yN*LKyzz))PLE+)_jc#4Rd$yFGol;NIk(qO1$5VXR)+ zxF7%f4=Q!NzR>DVXUB&nUT&>Nyf+5QRF+Z`X-bB*7=`|Go5D1&h~ zflKLw??kpiRm0h3|1GvySC2^#kcFz^5{79KKlq@`(leBa=_4CgV9sSHr{RIJ^KwR_ zY??M}-x^=MD+9`v@I3jue=OCn0kxno#6i>b(XKk_XTp_LpI}X*UA<#* zsgvq@yKTe_dTh>q1aeae@8yur08S(Q^8kXkP_ty48V$pX#y9)FQa~E7P7}GP_CbCm zc2dQxTeW(-~Y6}im24*XOC8ySfH*HMEnW3 z4CXp8iK(Nk<^D$g0kUW`8PXn2kdcDk-H@P0?G8?|YVlIFb?a>QunCx%B9TzsqQQ~HD!UO7zq^V!v9jho_FUob&Hxi ztU1nNOK)a!gkb-K4V^QVX05*>-^i|{b`hhvQLyj`E1vAnj0fbqqO%r z6Q;X1x0dL~GqMv%8QindZ4CZ%7pYQW~ z9)I*#Gjref-q(4Z*E#1c&rE0-_(4;_M(V7rgH_7H;ps1s%GBmU z{4a|X##j#XUF2n({v?ZUUAP5k>+)^F)7n-npbV3jAlY8V3*W=fwroDS$c&r$>8aH` zH+irV{RG3^F3oW2&E%5hXgMH9>$WlqX76Cm+iFmFC-DToTa`AcuN9S!SB+BT-IA#3P)JW1m~Cuwjs`Ep(wDXE4oYmt*aU z!Naz^lM}B)JFp7ejro7MU9#cI>wUoi{lylR2~s)3M!6a=_W~ITXCPd@U9W)qA5(mdOf zd3PntGPJyRX<9cgX?(9~TZB5FdEHW~gkJXY51}?s4ZT_VEdwOwD{T2E-B>oC8|_ZwsPNj=-q(-kwy%xX2K0~H z{*+W`-)V`7@c#Iuaef=?RR2O&x>W0A^xSwh5MsjTz(DVG-EoD@asu<>72A_h<39_# zawWVU<9t{r*e^u-5Q#SUI6dV#p$NYEGyiowT>>d*or=Ps!H$-3={bB|An$GPkP5F1 zTnu=ktmF|6E*>ZQvk^~DX(k!N`tiLut*?3FZhs$NUEa4ccDw66-~P;x+0b|<!ZN7Z%A`>2tN#CdoG>((QR~IV_Gj^Yh%!HdA~4C3jOXaqb6Ou z21T~Wmi9F6(_K0@KR@JDTh3-4mv2=T7&ML<+$4;b9SAtv*Uu`0>;VVZHB{4?aIl3J zL(rMfk?1V@l)fy{J5DhVlj&cWKJCcrpOAad(7mC6#%|Sn$VwMjtx6RDx1zbQ|Ngg8N&B56DGhu;dYg$Z{=YmCNn+?ceDclp65c_RnKs4*vefnhudSlrCy6-96vSB4_sFAj# zftzECwmNEOtED^NUt{ZDjT7^g>k1w<=af>+0)%NA;IPq6qx&ya7+QAu=pk8t>KTm` zEBj9J*2t|-(h)xc>Us*jHs)w9qmA>8@u21UqzKk*Ei#0kCeW6o z-2Q+Tvt25IUkb}-_LgD1_FUJ!U8@8OC^9(~Kd*0#zr*8IQkD)6Keb(XFai5*DYf~` z@U?-{)9X&BTf!^&@^rjmvea#9OE~m(D>qfM?CFT9Q4RxqhO0sA7S)=--^*Q=kNh7Y zq%2mu_d_#23d`+v`Ol263CZ<;D%D8Njj6L4T`S*^{!lPL@pXSm>2;~Da- zBX97TS{}exvSva@J5FJVCM$j4WDQuME`vTw>PWS0!;J7R+Kq zVUy6%#n5f7EV(}J#FhDpts;>=d6ow!yhJj8j>MJ@Wr_?x30buuutIG97L1A*QFT$c ziC5rBS;#qj=~yP-yWm-p(?llTwDuhS^f&<(9vA9@UhMH2-Fe_YAG$NvK6X{!mvPK~ zuEA&PA}meylmaIbbJXDOzuIn8cJNCV{tUA<$Vb?57JyAM`*GpEfMmFq>)6$E(9e1@W`l|R%-&}38#bl~levA#fx2wiBk^)mPj?<=S&|gv zQO)4*91$n08@W%2b|QxEiO0KxABAZC{^4BX^6r>Jm?{!`ZId9jjz<%pl(G5l));*`UU3KfnuXSDj2aP>{ zRIB$9pm7lj3*Xg)c1eG!cb+XGt&#?7yJ@C)(Ik)^OZ5><4u$VLCqZ#q2NMCt5 z6$|VN(RWM;5!JV?-h<JkEZ(SZF zC(6J+>A6Am9H7OlOFq6S62-2&z^Np=#xXsOq0WUKr zY_+Ob|CQd1*!Hirj5rn*=_bM5_zKmq6lG zn*&_=x%?ATxZ8ZTzd%biKY_qyNC#ZQ1vX+vc48N>aJXEjs{Y*3Op`Q7-oz8jyAh>d zNt_qvn`>q9aO~7xm{z`ree%lJ3YHCyC`q`-jUVCn*&NIml!uuMNm|~u3#AV?6kC+B z?qrT?xu2^mobSlzb&m(8jttB^je0mx;TT8}`_w(F11IKz83NLj@OmYDpCU^u?fD{) z&=$ptwVw#uohPb2_PrFX;X^I=MVXPDpqTuYhRa>f-=wy$y3)40-;#EUDYB1~V9t%$ z^^<7Zbs0{eB93Pcy)96%XsAi2^k`Gmnypd-&x4v9rAq<>a(pG|J#+Q>E$FvMLmy7T z5_06W=*ASUyPRfgCeiPIe{b47Hjqpb`9Xyl@$6*ntH@SV^bgH&Fk3L9L=6VQb)Uqa z33u#>ecDo&bK(h1WqSH)b_Th#Tvk&%$NXC@_pg5f-Ma#7q;&0QgtsFO~`V&{1b zbSP*X)jgLtd@9XdZ#2_BX4{X~pS8okF7c1xUhEV9>PZco>W-qz7YMD`+kCGULdK|^ zE7VwQ-at{%&fv`a+b&h`TjzxsyQX05UB~a0cuU-}{*%jR48J+yGWyl3Kdz5}U>;lE zgkba*yI5>xqIPz*Y!-P$#_mhHB!0Fpnv{$k-$xxjLAc`XdmHd1k$V@2QlblfJPrly z*~-4HVCq+?9vha>&I6aRGyq2VUon^L1a)g`-Xm*@bl2|hi2b|UmVYW|b+Gy?!aS-p z86a}Jep6Mf>>}n^*Oca@Xz}kxh)Y&pX$^CFAmi#$YVf57X^}uQD!IQSN&int=D> zJ>_|au3Be?hmPKK)1^JQ(O29eTf`>-x^jF2xYK6j_9d_qFkWHIan5=7EmDvZoQWz5 zZGb<{szHc9Nf@om)K_<=FuLR<&?5RKo3LONFQZ@?dyjemAe4$yDrnD zglU#XYo6|~L+YpF#?deK6S{8A*Ou;9G`cdC4S0U74EW18bc5~4>)<*}?Z!1Y)j;Ot zosEP!pc$O^wud(={WG%hY07IE^SwS-fGbvpP?;l8>H$;}urY2JF$u#$q}E*ZG%fR# z`p{xslcvG)kBS~B*^z6zVT@e}imYcz_8PRzM4GS52#ms5Jg9z~ME+uke`(Tq1w3_6 zxUa{HerS7!Wq&y(<9yyN@P^PrQT+6ij_qW3^Q)I53iIFCJE?MVyGLID!f?QHUi1tq z0)RNIMGO$2>S%3MlBc09l!6_(ECxXTU>$KjWdZX^3R~@3!SB zah5Za2$63;#y!Y}(wg1#shMePQTzfQfXyJ-Tf`R05KYcyvo8UW9-IWGWnzxR6Vj8_la;*-z5vWuwUe7@sKr#Tr51d z2PWn5h@|?QU3>k=s{pZ9+(}oye zc*95N_iLmtmu}H-t$smi49Y&ovX}@mKYt2*?C-i3Lh4*#q5YDg1Mh`j9ovRDf9&& zp_UMQh`|pC!|=}1uWoMK5RAjdTg3pXPCsYmRkWW}^m&)u-*c_st~gcss(`haA)xVw zAf=;s>$`Gq_`A}^MjY_BnCjktBNHY1*gzh(i0BFZ{Vg^F?Pbf`8_clvdZ)5(J4EWzAP}Ba5zX=S(2{gDugTQ3`%!q`h7kYSnwC`zEWeuFlODKiityMaM9u{Z%E@@y1jmZA#ⅅ8MglG&ER{i5lN315cO?EdHNLrg? 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 z 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 Pe7HEdAEg|=c=LY&YVNkY literal 0 HcmV?d00001 diff --git a/animations/step_05_d/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png b/animations/step_05_d/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png new file mode 100644 index 0000000000000000000000000000000000000000..13b35eba55c6dabc3aac36f33d859266c18fa0d0 GIT binary patch literal 5680 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 literal 0 HcmV?d00001 diff --git a/animations/step_05_d/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png b/animations/step_05_d/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png new file mode 100644 index 0000000000000000000000000000000000000000..0a3f5fa40fb3d1e0710331a48de5d256da3f275d GIT binary patch literal 520 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 literal 0 HcmV?d00001 diff --git a/animations/step_05_d/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png b/animations/step_05_d/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png new file mode 100644 index 0000000000000000000000000000000000000000..2f1632cfddf3d9dade342351e627a0a75609fb46 GIT binary patch literal 2218 zcmV;b2vzrqP)Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91K%fHv1ONa40RR91KmY&$07g+lumAuE6iGxuRCodHTWf3-RTMruyW6Fu zQYeUM04eX6D5c0FCjKKPrco1(K`<0SL=crI{PC3-^hZU0kQie$gh-5!7z6SH6Q0J% zqot*`H1q{R5fHFYS}dje@;kG=v$L0(yY0?wY2%*c?A&{2?!D*x?m71{of2gv!$5|C z3>qG_BW}7K_yUcT3A5C6QD<+{aq?x;MAUyAiJn#Jv8_zZtQ{P zTRzbL3U9!qVuZzS$xKU10KiW~Bgdcv1-!uAhQxf3a7q+dU6lj?yoO4Lq4TUN4}h{N z*fIM=SS8|C2$(T>w$`t@3Tka!(r!7W`x z-isCVgQD^mG-MJ;XtJuK3V{Vy72GQ83KRWsHU?e*wrhKk=ApIYeDqLi;JI1e zuvv}5^Dc=k7F7?nm3nIw$NVmU-+R>> zyqOR$-2SDpJ}Pt;^RkJytDVXNTsu|mI1`~G7yw`EJR?VkGfNdqK9^^8P`JdtTV&tX4CNcV4 z&N06nZa??Fw1AgQOUSE2AmPE@WO(Fvo`%m`cDgiv(fAeRA%3AGXUbsGw{7Q`cY;1BI#ac3iN$$Hw z0LT0;xc%=q)me?Y*$xI@GRAw?+}>=9D+KTk??-HJ4=A>`V&vKFS75@MKdSF1JTq{S zc1!^8?YA|t+uKigaq!sT;Z!&0F2=k7F0PIU;F$leJLaw2UI6FL^w}OG&!;+b%ya1c z1n+6-inU<0VM-Y_s5iTElq)ThyF?StVcebpGI znw#+zLx2@ah{$_2jn+@}(zJZ{+}_N9BM;z)0yr|gF-4=Iyu@hI*Lk=-A8f#bAzc9f z`Kd6K--x@t04swJVC3JK1cHY-Hq+=|PN-VO;?^_C#;coU6TDP7Bt`;{JTG;!+jj(` zw5cLQ-(Cz-Tlb`A^w7|R56Ce;Wmr0)$KWOUZ6ai0PhzPeHwdl0H(etP zUV`va_i0s-4#DkNM8lUlqI7>YQLf)(lz9Q3Uw`)nc(z3{m5ZE77Ul$V%m)E}3&8L0 z-XaU|eB~Is08eORPk;=<>!1w)Kf}FOVS2l&9~A+@R#koFJ$Czd%Y(ENTV&A~U(IPI z;UY+gf+&6ioZ=roly<0Yst8ck>(M=S?B-ys3mLdM&)ex!hbt+ol|T6CTS+Sc0jv(& z7ijdvFwBq;0a{%3GGwkDKTeG`b+lyj0jjS1OMkYnepCdoosNY`*zmBIo*981BU%%U z@~$z0V`OVtIbEx5pa|Tct|Lg#ZQf5OYMUMRD>Wdxm5SAqV2}3!ceE-M2 z@O~lQ0OiKQp}o9I;?uxCgYVV?FH|?Riri*U$Zi_`V2eiA>l zdSm6;SEm6#T+SpcE8Ro_f2AwxzI z44hfe^WE3!h@W3RDyA_H440cpmYkv*)6m1XazTqw%=E5Xv7^@^^T7Q2wxr+Z2kVYr + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/animations/step_05_d/macos/Runner/Configs/AppInfo.xcconfig b/animations/step_05_d/macos/Runner/Configs/AppInfo.xcconfig new file mode 100644 index 0000000000..28c7905763 --- /dev/null +++ b/animations/step_05_d/macos/Runner/Configs/AppInfo.xcconfig @@ -0,0 +1,14 @@ +// Application-level settings for the Runner target. +// +// This may be replaced with something auto-generated from metadata (e.g., pubspec.yaml) in the +// future. If not, the values below would default to using the project name when this becomes a +// 'flutter create' template. + +// The application's name. By default this is also the title of the Flutter window. +PRODUCT_NAME = quiz + +// The application's bundle identifier +PRODUCT_BUNDLE_IDENTIFIER = com.example.quiz + +// The copyright displayed in application information +PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved. diff --git a/animations/step_05_d/macos/Runner/Configs/Debug.xcconfig b/animations/step_05_d/macos/Runner/Configs/Debug.xcconfig new file mode 100644 index 0000000000..36b0fd9464 --- /dev/null +++ b/animations/step_05_d/macos/Runner/Configs/Debug.xcconfig @@ -0,0 +1,2 @@ +#include "../../Flutter/Flutter-Debug.xcconfig" +#include "Warnings.xcconfig" diff --git a/animations/step_05_d/macos/Runner/Configs/Release.xcconfig b/animations/step_05_d/macos/Runner/Configs/Release.xcconfig new file mode 100644 index 0000000000..dff4f49561 --- /dev/null +++ b/animations/step_05_d/macos/Runner/Configs/Release.xcconfig @@ -0,0 +1,2 @@ +#include "../../Flutter/Flutter-Release.xcconfig" +#include "Warnings.xcconfig" diff --git a/animations/step_05_d/macos/Runner/Configs/Warnings.xcconfig b/animations/step_05_d/macos/Runner/Configs/Warnings.xcconfig new file mode 100644 index 0000000000..42bcbf4780 --- /dev/null +++ b/animations/step_05_d/macos/Runner/Configs/Warnings.xcconfig @@ -0,0 +1,13 @@ +WARNING_CFLAGS = -Wall -Wconditional-uninitialized -Wnullable-to-nonnull-conversion -Wmissing-method-return-type -Woverlength-strings +GCC_WARN_UNDECLARED_SELECTOR = YES +CLANG_UNDEFINED_BEHAVIOR_SANITIZER_NULLABILITY = YES +CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE +CLANG_WARN__DUPLICATE_METHOD_MATCH = YES +CLANG_WARN_PRAGMA_PACK = YES +CLANG_WARN_STRICT_PROTOTYPES = YES +CLANG_WARN_COMMA = YES +GCC_WARN_STRICT_SELECTOR_MATCH = YES +CLANG_WARN_OBJC_REPEATED_USE_OF_WEAK = YES +CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES +GCC_WARN_SHADOW = YES +CLANG_WARN_UNREACHABLE_CODE = YES diff --git a/animations/step_05_d/macos/Runner/DebugProfile.entitlements b/animations/step_05_d/macos/Runner/DebugProfile.entitlements new file mode 100644 index 0000000000..dddb8a30c8 --- /dev/null +++ b/animations/step_05_d/macos/Runner/DebugProfile.entitlements @@ -0,0 +1,12 @@ + + + + + com.apple.security.app-sandbox + + com.apple.security.cs.allow-jit + + com.apple.security.network.server + + + diff --git a/animations/step_05_d/macos/Runner/Info.plist b/animations/step_05_d/macos/Runner/Info.plist new file mode 100644 index 0000000000..4789daa6a4 --- /dev/null +++ b/animations/step_05_d/macos/Runner/Info.plist @@ -0,0 +1,32 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIconFile + + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + APPL + CFBundleShortVersionString + $(FLUTTER_BUILD_NAME) + CFBundleVersion + $(FLUTTER_BUILD_NUMBER) + LSMinimumSystemVersion + $(MACOSX_DEPLOYMENT_TARGET) + NSHumanReadableCopyright + $(PRODUCT_COPYRIGHT) + NSMainNibFile + MainMenu + NSPrincipalClass + NSApplication + + diff --git a/animations/step_05_d/macos/Runner/MainFlutterWindow.swift b/animations/step_05_d/macos/Runner/MainFlutterWindow.swift new file mode 100644 index 0000000000..3cc05eb234 --- /dev/null +++ b/animations/step_05_d/macos/Runner/MainFlutterWindow.swift @@ -0,0 +1,15 @@ +import Cocoa +import FlutterMacOS + +class MainFlutterWindow: NSWindow { + override func awakeFromNib() { + let flutterViewController = FlutterViewController() + let windowFrame = self.frame + self.contentViewController = flutterViewController + self.setFrame(windowFrame, display: true) + + RegisterGeneratedPlugins(registry: flutterViewController) + + super.awakeFromNib() + } +} diff --git a/animations/step_05_d/macos/Runner/Release.entitlements b/animations/step_05_d/macos/Runner/Release.entitlements new file mode 100644 index 0000000000..852fa1a472 --- /dev/null +++ b/animations/step_05_d/macos/Runner/Release.entitlements @@ -0,0 +1,8 @@ + + + + + com.apple.security.app-sandbox + + + diff --git a/animations/step_05_d/macos/RunnerTests/RunnerTests.swift b/animations/step_05_d/macos/RunnerTests/RunnerTests.swift new file mode 100644 index 0000000000..61f3bd1fc5 --- /dev/null +++ b/animations/step_05_d/macos/RunnerTests/RunnerTests.swift @@ -0,0 +1,12 @@ +import Cocoa +import FlutterMacOS +import XCTest + +class RunnerTests: XCTestCase { + + func testExample() { + // If you add code to the Runner application, consider adding tests here. + // See https://developer.apple.com/documentation/xctest for more information about using XCTest. + } + +} diff --git a/animations/step_05_d/pubspec.yaml b/animations/step_05_d/pubspec.yaml new file mode 100644 index 0000000000..d8e843d9c9 --- /dev/null +++ b/animations/step_05_d/pubspec.yaml @@ -0,0 +1,21 @@ +name: quiz +description: A quiz app for demonstrating animation effects in Flutter +publish_to: "none" +version: 1.0.0 + +environment: + sdk: ^3.7.0-0 + +dependencies: + animations: ^2.0.0 + flutter: + sdk: flutter + +dev_dependencies: + flutter_test: + sdk: flutter + flutter_lints: ^4.0.0 + + +flutter: + uses-material-design: true diff --git a/animations/step_05_d/web/favicon.png b/animations/step_05_d/web/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..8aaa46ac1ae21512746f852a42ba87e4165dfdd1 GIT binary patch literal 917 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|I14-?iy0X7 zltGxWVyS%@P(fs7NJL45ua8x7ey(0(N`6wRUPW#JP&EUCO@$SZnVVXYs8ErclUHn2 zVXFjIVFhG^g!Ppaz)DK8ZIvQ?0~DO|i&7O#^-S~(l1AfjnEK zjFOT9D}DX)@^Za$W4-*MbbUihOG|wNBYh(yU7!lx;>x^|#0uTKVr7USFmqf|i<65o z3raHc^AtelCMM;Vme?vOfh>Xph&xL%(-1c06+^uR^q@XSM&D4+Kp$>4P^%3{)XKjo zGZknv$b36P8?Z_gF{nK@`XI}Z90TzwSQO}0J1!f2c(B=V`5aP@1P1a|PZ!4!3&Gl8 zTYqUsf!gYFyJnXpu0!n&N*SYAX-%d(5gVjrHJWqXQshj@!Zm{!01WsQrH~9=kTxW#6SvuapgMqt>$=j#%eyGrQzr zP{L-3gsMA^$I1&gsBAEL+vxi1*Igl=8#8`5?A-T5=z-sk46WA1IUT)AIZHx1rdUrf zVJrJn<74DDw`j)Ki#gt}mIT-Q`XRa2-jQXQoI%w`nb|XblvzK${ZzlV)m-XcwC(od z71_OEC5Bt9GEXosOXaPTYOia#R4ID2TiU~`zVMl08TV_C%DnU4^+HE>9(CE4D6?Fz oujB08i7adh9xk7*FX66dWH6F5TM;?E2b5PlUHx3vIVCg!0Dx9vYXATM literal 0 HcmV?d00001 diff --git a/animations/step_05_d/web/icons/Icon-192.png b/animations/step_05_d/web/icons/Icon-192.png new file mode 100644 index 0000000000000000000000000000000000000000..b749bfef07473333cf1dd31e9eed89862a5d52aa GIT binary patch literal 5292 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 literal 0 HcmV?d00001 diff --git a/animations/step_05_d/web/icons/Icon-512.png b/animations/step_05_d/web/icons/Icon-512.png new file mode 100644 index 0000000000000000000000000000000000000000..88cfd48dff1169879ba46840804b412fe02fefd6 GIT binary patch literal 8252 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 literal 0 HcmV?d00001 diff --git a/animations/step_05_d/web/icons/Icon-maskable-192.png b/animations/step_05_d/web/icons/Icon-maskable-192.png new file mode 100644 index 0000000000000000000000000000000000000000..eb9b4d76e525556d5d89141648c724331630325d GIT binary patch literal 5594 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 X>c!)3PgKfL&lX^$Z>Cpu&6)6jvi^Z! literal 0 HcmV?d00001 diff --git a/animations/step_05_d/web/icons/Icon-maskable-512.png b/animations/step_05_d/web/icons/Icon-maskable-512.png new file mode 100644 index 0000000000000000000000000000000000000000..d69c56691fbdb0b7efa65097c7cc1edac12a6d3e GIT binary patch literal 20998 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 MPgg&ebxsLQ025IeI{*Lx literal 0 HcmV?d00001 diff --git a/animations/step_05_d/web/index.html b/animations/step_05_d/web/index.html new file mode 100644 index 0000000000..ec05768c59 --- /dev/null +++ b/animations/step_05_d/web/index.html @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + quiz + + + + + + diff --git a/animations/step_05_d/web/manifest.json b/animations/step_05_d/web/manifest.json new file mode 100644 index 0000000000..467748be48 --- /dev/null +++ b/animations/step_05_d/web/manifest.json @@ -0,0 +1,35 @@ +{ + "name": "quiz", + "short_name": "quiz", + "start_url": ".", + "display": "standalone", + "background_color": "#0175C2", + "theme_color": "#0175C2", + "description": "A new Flutter project.", + "orientation": "portrait-primary", + "prefer_related_applications": false, + "icons": [ + { + "src": "icons/Icon-192.png", + "sizes": "192x192", + "type": "image/png" + }, + { + "src": "icons/Icon-512.png", + "sizes": "512x512", + "type": "image/png" + }, + { + "src": "icons/Icon-maskable-192.png", + "sizes": "192x192", + "type": "image/png", + "purpose": "maskable" + }, + { + "src": "icons/Icon-maskable-512.png", + "sizes": "512x512", + "type": "image/png", + "purpose": "maskable" + } + ] +} diff --git a/animations/step_05_d/windows/.gitignore b/animations/step_05_d/windows/.gitignore new file mode 100644 index 0000000000..d492d0d98c --- /dev/null +++ b/animations/step_05_d/windows/.gitignore @@ -0,0 +1,17 @@ +flutter/ephemeral/ + +# Visual Studio user-specific files. +*.suo +*.user +*.userosscache +*.sln.docstates + +# Visual Studio build-related files. +x64/ +x86/ + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!*.[Cc]ache/ diff --git a/animations/step_05_d/windows/CMakeLists.txt b/animations/step_05_d/windows/CMakeLists.txt new file mode 100644 index 0000000000..e65947e844 --- /dev/null +++ b/animations/step_05_d/windows/CMakeLists.txt @@ -0,0 +1,108 @@ +# Project-level configuration. +cmake_minimum_required(VERSION 3.14) +project(quiz LANGUAGES CXX) + +# The name of the executable created for the application. Change this to change +# the on-disk name of your application. +set(BINARY_NAME "quiz") + +# Explicitly opt in to modern CMake behaviors to avoid warnings with recent +# versions of CMake. +cmake_policy(VERSION 3.14...3.25) + +# Define build configuration option. +get_property(IS_MULTICONFIG GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG) +if(IS_MULTICONFIG) + set(CMAKE_CONFIGURATION_TYPES "Debug;Profile;Release" + CACHE STRING "" FORCE) +else() + if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) + set(CMAKE_BUILD_TYPE "Debug" CACHE + STRING "Flutter build mode" FORCE) + set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS + "Debug" "Profile" "Release") + endif() +endif() +# Define settings for the Profile build mode. +set(CMAKE_EXE_LINKER_FLAGS_PROFILE "${CMAKE_EXE_LINKER_FLAGS_RELEASE}") +set(CMAKE_SHARED_LINKER_FLAGS_PROFILE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE}") +set(CMAKE_C_FLAGS_PROFILE "${CMAKE_C_FLAGS_RELEASE}") +set(CMAKE_CXX_FLAGS_PROFILE "${CMAKE_CXX_FLAGS_RELEASE}") + +# Use Unicode for all projects. +add_definitions(-DUNICODE -D_UNICODE) + +# Compilation settings that should be applied to most targets. +# +# Be cautious about adding new options here, as plugins use this function by +# default. In most cases, you should add new options to specific targets instead +# of modifying this function. +function(APPLY_STANDARD_SETTINGS TARGET) + target_compile_features(${TARGET} PUBLIC cxx_std_17) + target_compile_options(${TARGET} PRIVATE /W4 /WX /wd"4100") + target_compile_options(${TARGET} PRIVATE /EHsc) + target_compile_definitions(${TARGET} PRIVATE "_HAS_EXCEPTIONS=0") + target_compile_definitions(${TARGET} PRIVATE "$<$:_DEBUG>") +endfunction() + +# Flutter library and tool build rules. +set(FLUTTER_MANAGED_DIR "${CMAKE_CURRENT_SOURCE_DIR}/flutter") +add_subdirectory(${FLUTTER_MANAGED_DIR}) + +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") + + +# Generated plugin build rules, which manage building the plugins and adding +# them to the application. +include(flutter/generated_plugins.cmake) + + +# === Installation === +# Support files are copied into place next to the executable, so that it can +# run in place. This is done instead of making a separate bundle (as on Linux) +# so that building and running from within Visual Studio will work. +set(BUILD_BUNDLE_DIR "$") +# Make the "install" step default, as it's required to run. +set(CMAKE_VS_INCLUDE_INSTALL_TO_DEFAULT_BUILD 1) +if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) + set(CMAKE_INSTALL_PREFIX "${BUILD_BUNDLE_DIR}" CACHE PATH "..." FORCE) +endif() + +set(INSTALL_BUNDLE_DATA_DIR "${CMAKE_INSTALL_PREFIX}/data") +set(INSTALL_BUNDLE_LIB_DIR "${CMAKE_INSTALL_PREFIX}") + +install(TARGETS ${BINARY_NAME} RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_ICU_DATA_FILE}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) + +if(PLUGIN_BUNDLED_LIBRARIES) + install(FILES "${PLUGIN_BUNDLED_LIBRARIES}" + DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) +endif() + +# Copy the native assets provided by the build.dart from all packages. +set(NATIVE_ASSETS_DIR "${PROJECT_BUILD_DIR}native_assets/windows/") +install(DIRECTORY "${NATIVE_ASSETS_DIR}" + DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) + +# Fully re-copy the assets directory on each build to avoid having stale files +# from a previous install. +set(FLUTTER_ASSET_DIR_NAME "flutter_assets") +install(CODE " + file(REMOVE_RECURSE \"${INSTALL_BUNDLE_DATA_DIR}/${FLUTTER_ASSET_DIR_NAME}\") + " COMPONENT Runtime) +install(DIRECTORY "${PROJECT_BUILD_DIR}/${FLUTTER_ASSET_DIR_NAME}" + DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" COMPONENT Runtime) + +# Install the AOT library on non-Debug builds only. +install(FILES "${AOT_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" + CONFIGURATIONS Profile;Release + COMPONENT Runtime) diff --git a/animations/step_05_d/windows/flutter/CMakeLists.txt b/animations/step_05_d/windows/flutter/CMakeLists.txt new file mode 100644 index 0000000000..903f4899d6 --- /dev/null +++ b/animations/step_05_d/windows/flutter/CMakeLists.txt @@ -0,0 +1,109 @@ +# This file controls Flutter-level build steps. It should not be edited. +cmake_minimum_required(VERSION 3.14) + +set(EPHEMERAL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/ephemeral") + +# Configuration provided via flutter tool. +include(${EPHEMERAL_DIR}/generated_config.cmake) + +# TODO: Move the rest of this into files in ephemeral. See +# https://github.com/flutter/flutter/issues/57146. +set(WRAPPER_ROOT "${EPHEMERAL_DIR}/cpp_client_wrapper") + +# Set fallback configurations for older versions of the flutter tool. +if (NOT DEFINED FLUTTER_TARGET_PLATFORM) + set(FLUTTER_TARGET_PLATFORM "windows-x64") +endif() + +# === Flutter Library === +set(FLUTTER_LIBRARY "${EPHEMERAL_DIR}/flutter_windows.dll") + +# Published to parent scope for install step. +set(FLUTTER_LIBRARY ${FLUTTER_LIBRARY} PARENT_SCOPE) +set(FLUTTER_ICU_DATA_FILE "${EPHEMERAL_DIR}/icudtl.dat" PARENT_SCOPE) +set(PROJECT_BUILD_DIR "${PROJECT_DIR}/build/" PARENT_SCOPE) +set(AOT_LIBRARY "${PROJECT_DIR}/build/windows/app.so" PARENT_SCOPE) + +list(APPEND FLUTTER_LIBRARY_HEADERS + "flutter_export.h" + "flutter_windows.h" + "flutter_messenger.h" + "flutter_plugin_registrar.h" + "flutter_texture_registrar.h" +) +list(TRANSFORM FLUTTER_LIBRARY_HEADERS PREPEND "${EPHEMERAL_DIR}/") +add_library(flutter INTERFACE) +target_include_directories(flutter INTERFACE + "${EPHEMERAL_DIR}" +) +target_link_libraries(flutter INTERFACE "${FLUTTER_LIBRARY}.lib") +add_dependencies(flutter flutter_assemble) + +# === Wrapper === +list(APPEND CPP_WRAPPER_SOURCES_CORE + "core_implementations.cc" + "standard_codec.cc" +) +list(TRANSFORM CPP_WRAPPER_SOURCES_CORE PREPEND "${WRAPPER_ROOT}/") +list(APPEND CPP_WRAPPER_SOURCES_PLUGIN + "plugin_registrar.cc" +) +list(TRANSFORM CPP_WRAPPER_SOURCES_PLUGIN PREPEND "${WRAPPER_ROOT}/") +list(APPEND CPP_WRAPPER_SOURCES_APP + "flutter_engine.cc" + "flutter_view_controller.cc" +) +list(TRANSFORM CPP_WRAPPER_SOURCES_APP PREPEND "${WRAPPER_ROOT}/") + +# Wrapper sources needed for a plugin. +add_library(flutter_wrapper_plugin STATIC + ${CPP_WRAPPER_SOURCES_CORE} + ${CPP_WRAPPER_SOURCES_PLUGIN} +) +apply_standard_settings(flutter_wrapper_plugin) +set_target_properties(flutter_wrapper_plugin PROPERTIES + POSITION_INDEPENDENT_CODE ON) +set_target_properties(flutter_wrapper_plugin PROPERTIES + CXX_VISIBILITY_PRESET hidden) +target_link_libraries(flutter_wrapper_plugin PUBLIC flutter) +target_include_directories(flutter_wrapper_plugin PUBLIC + "${WRAPPER_ROOT}/include" +) +add_dependencies(flutter_wrapper_plugin flutter_assemble) + +# Wrapper sources needed for the runner. +add_library(flutter_wrapper_app STATIC + ${CPP_WRAPPER_SOURCES_CORE} + ${CPP_WRAPPER_SOURCES_APP} +) +apply_standard_settings(flutter_wrapper_app) +target_link_libraries(flutter_wrapper_app PUBLIC flutter) +target_include_directories(flutter_wrapper_app PUBLIC + "${WRAPPER_ROOT}/include" +) +add_dependencies(flutter_wrapper_app flutter_assemble) + +# === Flutter tool backend === +# _phony_ is a non-existent file to force this command to run every time, +# since currently there's no way to get a full input/output list from the +# flutter tool. +set(PHONY_OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/_phony_") +set_source_files_properties("${PHONY_OUTPUT}" PROPERTIES SYMBOLIC TRUE) +add_custom_command( + OUTPUT ${FLUTTER_LIBRARY} ${FLUTTER_LIBRARY_HEADERS} + ${CPP_WRAPPER_SOURCES_CORE} ${CPP_WRAPPER_SOURCES_PLUGIN} + ${CPP_WRAPPER_SOURCES_APP} + ${PHONY_OUTPUT} + COMMAND ${CMAKE_COMMAND} -E env + ${FLUTTER_TOOL_ENVIRONMENT} + "${FLUTTER_ROOT}/packages/flutter_tools/bin/tool_backend.bat" + ${FLUTTER_TARGET_PLATFORM} $ + VERBATIM +) +add_custom_target(flutter_assemble DEPENDS + "${FLUTTER_LIBRARY}" + ${FLUTTER_LIBRARY_HEADERS} + ${CPP_WRAPPER_SOURCES_CORE} + ${CPP_WRAPPER_SOURCES_PLUGIN} + ${CPP_WRAPPER_SOURCES_APP} +) diff --git a/animations/step_05_d/windows/flutter/generated_plugin_registrant.cc b/animations/step_05_d/windows/flutter/generated_plugin_registrant.cc new file mode 100644 index 0000000000..8b6d4680af --- /dev/null +++ b/animations/step_05_d/windows/flutter/generated_plugin_registrant.cc @@ -0,0 +1,11 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#include "generated_plugin_registrant.h" + + +void RegisterPlugins(flutter::PluginRegistry* registry) { +} diff --git a/animations/step_05_d/windows/flutter/generated_plugin_registrant.h b/animations/step_05_d/windows/flutter/generated_plugin_registrant.h new file mode 100644 index 0000000000..dc139d85a9 --- /dev/null +++ b/animations/step_05_d/windows/flutter/generated_plugin_registrant.h @@ -0,0 +1,15 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#ifndef GENERATED_PLUGIN_REGISTRANT_ +#define GENERATED_PLUGIN_REGISTRANT_ + +#include + +// Registers Flutter plugins. +void RegisterPlugins(flutter::PluginRegistry* registry); + +#endif // GENERATED_PLUGIN_REGISTRANT_ diff --git a/animations/step_05_d/windows/flutter/generated_plugins.cmake b/animations/step_05_d/windows/flutter/generated_plugins.cmake new file mode 100644 index 0000000000..b93c4c30c1 --- /dev/null +++ b/animations/step_05_d/windows/flutter/generated_plugins.cmake @@ -0,0 +1,23 @@ +# +# Generated file, do not edit. +# + +list(APPEND FLUTTER_PLUGIN_LIST +) + +list(APPEND FLUTTER_FFI_PLUGIN_LIST +) + +set(PLUGIN_BUNDLED_LIBRARIES) + +foreach(plugin ${FLUTTER_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${plugin}/windows plugins/${plugin}) + target_link_libraries(${BINARY_NAME} PRIVATE ${plugin}_plugin) + list(APPEND PLUGIN_BUNDLED_LIBRARIES $) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${plugin}_bundled_libraries}) +endforeach(plugin) + +foreach(ffi_plugin ${FLUTTER_FFI_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${ffi_plugin}/windows plugins/${ffi_plugin}) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${ffi_plugin}_bundled_libraries}) +endforeach(ffi_plugin) diff --git a/animations/step_05_d/windows/runner/CMakeLists.txt b/animations/step_05_d/windows/runner/CMakeLists.txt new file mode 100644 index 0000000000..394917c053 --- /dev/null +++ b/animations/step_05_d/windows/runner/CMakeLists.txt @@ -0,0 +1,40 @@ +cmake_minimum_required(VERSION 3.14) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} WIN32 + "flutter_window.cpp" + "main.cpp" + "utils.cpp" + "win32_window.cpp" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" + "Runner.rc" + "runner.exe.manifest" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the build version. +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION=\"${FLUTTER_VERSION}\"") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_MAJOR=${FLUTTER_VERSION_MAJOR}") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_MINOR=${FLUTTER_VERSION_MINOR}") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_PATCH=${FLUTTER_VERSION_PATCH}") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_BUILD=${FLUTTER_VERSION_BUILD}") + +# Disable Windows macros that collide with C++ standard library functions. +target_compile_definitions(${BINARY_NAME} PRIVATE "NOMINMAX") + +# Add dependency libraries and include directories. Add any application-specific +# dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter flutter_wrapper_app) +target_link_libraries(${BINARY_NAME} PRIVATE "dwmapi.lib") +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") + +# Run the Flutter tool portions of the build. This must not be removed. +add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/animations/step_05_d/windows/runner/Runner.rc b/animations/step_05_d/windows/runner/Runner.rc new file mode 100644 index 0000000000..f0d8342b40 --- /dev/null +++ b/animations/step_05_d/windows/runner/Runner.rc @@ -0,0 +1,121 @@ +// Microsoft Visual C++ generated resource script. +// +#pragma code_page(65001) +#include "resource.h" + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#include "winres.h" + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// English (United States) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE +BEGIN + "resource.h\0" +END + +2 TEXTINCLUDE +BEGIN + "#include ""winres.h""\r\n" + "\0" +END + +3 TEXTINCLUDE +BEGIN + "\r\n" + "\0" +END + +#endif // APSTUDIO_INVOKED + + +///////////////////////////////////////////////////////////////////////////// +// +// Icon +// + +// Icon with lowest ID value placed first to ensure application icon +// remains consistent on all systems. +IDI_APP_ICON ICON "resources\\app_icon.ico" + + +///////////////////////////////////////////////////////////////////////////// +// +// Version +// + +#if defined(FLUTTER_VERSION_MAJOR) && defined(FLUTTER_VERSION_MINOR) && defined(FLUTTER_VERSION_PATCH) && defined(FLUTTER_VERSION_BUILD) +#define VERSION_AS_NUMBER FLUTTER_VERSION_MAJOR,FLUTTER_VERSION_MINOR,FLUTTER_VERSION_PATCH,FLUTTER_VERSION_BUILD +#else +#define VERSION_AS_NUMBER 1,0,0,0 +#endif + +#if defined(FLUTTER_VERSION) +#define VERSION_AS_STRING FLUTTER_VERSION +#else +#define VERSION_AS_STRING "1.0.0" +#endif + +VS_VERSION_INFO VERSIONINFO + FILEVERSION VERSION_AS_NUMBER + PRODUCTVERSION VERSION_AS_NUMBER + FILEFLAGSMASK VS_FFI_FILEFLAGSMASK +#ifdef _DEBUG + FILEFLAGS VS_FF_DEBUG +#else + FILEFLAGS 0x0L +#endif + FILEOS VOS__WINDOWS32 + FILETYPE VFT_APP + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904e4" + BEGIN + VALUE "CompanyName", "com.example" "\0" + VALUE "FileDescription", "quiz" "\0" + VALUE "FileVersion", VERSION_AS_STRING "\0" + VALUE "InternalName", "quiz" "\0" + VALUE "LegalCopyright", "Copyright (C) 2024 com.example. All rights reserved." "\0" + VALUE "OriginalFilename", "quiz.exe" "\0" + VALUE "ProductName", "quiz" "\0" + VALUE "ProductVersion", VERSION_AS_STRING "\0" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x409, 1252 + END +END + +#endif // English (United States) resources +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// + + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED diff --git a/animations/step_05_d/windows/runner/flutter_window.cpp b/animations/step_05_d/windows/runner/flutter_window.cpp new file mode 100644 index 0000000000..955ee3038f --- /dev/null +++ b/animations/step_05_d/windows/runner/flutter_window.cpp @@ -0,0 +1,71 @@ +#include "flutter_window.h" + +#include + +#include "flutter/generated_plugin_registrant.h" + +FlutterWindow::FlutterWindow(const flutter::DartProject& project) + : project_(project) {} + +FlutterWindow::~FlutterWindow() {} + +bool FlutterWindow::OnCreate() { + if (!Win32Window::OnCreate()) { + return false; + } + + RECT frame = GetClientArea(); + + // The size here must match the window dimensions to avoid unnecessary surface + // creation / destruction in the startup path. + flutter_controller_ = std::make_unique( + frame.right - frame.left, frame.bottom - frame.top, project_); + // Ensure that basic setup of the controller was successful. + if (!flutter_controller_->engine() || !flutter_controller_->view()) { + return false; + } + RegisterPlugins(flutter_controller_->engine()); + SetChildContent(flutter_controller_->view()->GetNativeWindow()); + + flutter_controller_->engine()->SetNextFrameCallback([&]() { + this->Show(); + }); + + // Flutter can complete the first frame before the "show window" callback is + // registered. The following call ensures a frame is pending to ensure the + // window is shown. It is a no-op if the first frame hasn't completed yet. + flutter_controller_->ForceRedraw(); + + return true; +} + +void FlutterWindow::OnDestroy() { + if (flutter_controller_) { + flutter_controller_ = nullptr; + } + + Win32Window::OnDestroy(); +} + +LRESULT +FlutterWindow::MessageHandler(HWND hwnd, UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept { + // Give Flutter, including plugins, an opportunity to handle window messages. + if (flutter_controller_) { + std::optional result = + flutter_controller_->HandleTopLevelWindowProc(hwnd, message, wparam, + lparam); + if (result) { + return *result; + } + } + + switch (message) { + case WM_FONTCHANGE: + flutter_controller_->engine()->ReloadSystemFonts(); + break; + } + + return Win32Window::MessageHandler(hwnd, message, wparam, lparam); +} diff --git a/animations/step_05_d/windows/runner/flutter_window.h b/animations/step_05_d/windows/runner/flutter_window.h new file mode 100644 index 0000000000..6da0652f05 --- /dev/null +++ b/animations/step_05_d/windows/runner/flutter_window.h @@ -0,0 +1,33 @@ +#ifndef RUNNER_FLUTTER_WINDOW_H_ +#define RUNNER_FLUTTER_WINDOW_H_ + +#include +#include + +#include + +#include "win32_window.h" + +// A window that does nothing but host a Flutter view. +class FlutterWindow : public Win32Window { + public: + // Creates a new FlutterWindow hosting a Flutter view running |project|. + explicit FlutterWindow(const flutter::DartProject& project); + virtual ~FlutterWindow(); + + protected: + // Win32Window: + bool OnCreate() override; + void OnDestroy() override; + LRESULT MessageHandler(HWND window, UINT const message, WPARAM const wparam, + LPARAM const lparam) noexcept override; + + private: + // The project to run. + flutter::DartProject project_; + + // The Flutter instance hosted by this window. + std::unique_ptr flutter_controller_; +}; + +#endif // RUNNER_FLUTTER_WINDOW_H_ diff --git a/animations/step_05_d/windows/runner/main.cpp b/animations/step_05_d/windows/runner/main.cpp new file mode 100644 index 0000000000..cc4e09820c --- /dev/null +++ b/animations/step_05_d/windows/runner/main.cpp @@ -0,0 +1,43 @@ +#include +#include +#include + +#include "flutter_window.h" +#include "utils.h" + +int APIENTRY wWinMain(_In_ HINSTANCE instance, _In_opt_ HINSTANCE prev, + _In_ wchar_t *command_line, _In_ int show_command) { + // Attach to console when present (e.g., 'flutter run') or create a + // new console when running with a debugger. + if (!::AttachConsole(ATTACH_PARENT_PROCESS) && ::IsDebuggerPresent()) { + CreateAndAttachConsole(); + } + + // Initialize COM, so that it is available for use in the library and/or + // plugins. + ::CoInitializeEx(nullptr, COINIT_APARTMENTTHREADED); + + flutter::DartProject project(L"data"); + + std::vector command_line_arguments = + GetCommandLineArguments(); + + project.set_dart_entrypoint_arguments(std::move(command_line_arguments)); + + FlutterWindow window(project); + Win32Window::Point origin(10, 10); + Win32Window::Size size(1280, 720); + if (!window.Create(L"quiz", origin, size)) { + return EXIT_FAILURE; + } + window.SetQuitOnClose(true); + + ::MSG msg; + while (::GetMessage(&msg, nullptr, 0, 0)) { + ::TranslateMessage(&msg); + ::DispatchMessage(&msg); + } + + ::CoUninitialize(); + return EXIT_SUCCESS; +} diff --git a/animations/step_05_d/windows/runner/resource.h b/animations/step_05_d/windows/runner/resource.h new file mode 100644 index 0000000000..66a65d1e4a --- /dev/null +++ b/animations/step_05_d/windows/runner/resource.h @@ -0,0 +1,16 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Visual C++ generated include file. +// Used by Runner.rc +// +#define IDI_APP_ICON 101 + +// Next default values for new objects +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS +#define _APS_NEXT_RESOURCE_VALUE 102 +#define _APS_NEXT_COMMAND_VALUE 40001 +#define _APS_NEXT_CONTROL_VALUE 1001 +#define _APS_NEXT_SYMED_VALUE 101 +#endif +#endif diff --git a/animations/step_05_d/windows/runner/resources/app_icon.ico b/animations/step_05_d/windows/runner/resources/app_icon.ico new file mode 100644 index 0000000000000000000000000000000000000000..c04e20caf6370ebb9253ad831cc31de4a9c965f6 GIT binary patch literal 33772 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 literal 0 HcmV?d00001 diff --git a/animations/step_05_d/windows/runner/runner.exe.manifest b/animations/step_05_d/windows/runner/runner.exe.manifest new file mode 100644 index 0000000000..153653e8d6 --- /dev/null +++ b/animations/step_05_d/windows/runner/runner.exe.manifest @@ -0,0 +1,14 @@ + + + + + PerMonitorV2 + + + + + + + + + diff --git a/animations/step_05_d/windows/runner/utils.cpp b/animations/step_05_d/windows/runner/utils.cpp new file mode 100644 index 0000000000..3a0b46511a --- /dev/null +++ b/animations/step_05_d/windows/runner/utils.cpp @@ -0,0 +1,65 @@ +#include "utils.h" + +#include +#include +#include +#include + +#include + +void CreateAndAttachConsole() { + if (::AllocConsole()) { + FILE *unused; + if (freopen_s(&unused, "CONOUT$", "w", stdout)) { + _dup2(_fileno(stdout), 1); + } + if (freopen_s(&unused, "CONOUT$", "w", stderr)) { + _dup2(_fileno(stdout), 2); + } + std::ios::sync_with_stdio(); + FlutterDesktopResyncOutputStreams(); + } +} + +std::vector GetCommandLineArguments() { + // Convert the UTF-16 command line arguments to UTF-8 for the Engine to use. + int argc; + wchar_t** argv = ::CommandLineToArgvW(::GetCommandLineW(), &argc); + if (argv == nullptr) { + return std::vector(); + } + + std::vector command_line_arguments; + + // Skip the first argument as it's the binary name. + for (int i = 1; i < argc; i++) { + command_line_arguments.push_back(Utf8FromUtf16(argv[i])); + } + + ::LocalFree(argv); + + return command_line_arguments; +} + +std::string Utf8FromUtf16(const wchar_t* utf16_string) { + if (utf16_string == nullptr) { + return std::string(); + } + unsigned int target_length = ::WideCharToMultiByte( + CP_UTF8, WC_ERR_INVALID_CHARS, utf16_string, + -1, nullptr, 0, nullptr, nullptr) + -1; // remove the trailing null character + int input_length = (int)wcslen(utf16_string); + std::string utf8_string; + if (target_length == 0 || target_length > utf8_string.max_size()) { + return utf8_string; + } + utf8_string.resize(target_length); + int converted_length = ::WideCharToMultiByte( + CP_UTF8, WC_ERR_INVALID_CHARS, utf16_string, + input_length, utf8_string.data(), target_length, nullptr, nullptr); + if (converted_length == 0) { + return std::string(); + } + return utf8_string; +} diff --git a/animations/step_05_d/windows/runner/utils.h b/animations/step_05_d/windows/runner/utils.h new file mode 100644 index 0000000000..3879d54755 --- /dev/null +++ b/animations/step_05_d/windows/runner/utils.h @@ -0,0 +1,19 @@ +#ifndef RUNNER_UTILS_H_ +#define RUNNER_UTILS_H_ + +#include +#include + +// Creates a console for the process, and redirects stdout and stderr to +// it for both the runner and the Flutter library. +void CreateAndAttachConsole(); + +// Takes a null-terminated wchar_t* encoded in UTF-16 and returns a std::string +// encoded in UTF-8. Returns an empty std::string on failure. +std::string Utf8FromUtf16(const wchar_t* utf16_string); + +// Gets the command line arguments passed in as a std::vector, +// encoded in UTF-8. Returns an empty std::vector on failure. +std::vector GetCommandLineArguments(); + +#endif // RUNNER_UTILS_H_ diff --git a/animations/step_05_d/windows/runner/win32_window.cpp b/animations/step_05_d/windows/runner/win32_window.cpp new file mode 100644 index 0000000000..60608d0fe5 --- /dev/null +++ b/animations/step_05_d/windows/runner/win32_window.cpp @@ -0,0 +1,288 @@ +#include "win32_window.h" + +#include +#include + +#include "resource.h" + +namespace { + +/// Window attribute that enables dark mode window decorations. +/// +/// Redefined in case the developer's machine has a Windows SDK older than +/// version 10.0.22000.0. +/// See: https://docs.microsoft.com/windows/win32/api/dwmapi/ne-dwmapi-dwmwindowattribute +#ifndef DWMWA_USE_IMMERSIVE_DARK_MODE +#define DWMWA_USE_IMMERSIVE_DARK_MODE 20 +#endif + +constexpr const wchar_t kWindowClassName[] = L"FLUTTER_RUNNER_WIN32_WINDOW"; + +/// Registry key for app theme preference. +/// +/// A value of 0 indicates apps should use dark mode. A non-zero or missing +/// value indicates apps should use light mode. +constexpr const wchar_t kGetPreferredBrightnessRegKey[] = + L"Software\\Microsoft\\Windows\\CurrentVersion\\Themes\\Personalize"; +constexpr const wchar_t kGetPreferredBrightnessRegValue[] = L"AppsUseLightTheme"; + +// The number of Win32Window objects that currently exist. +static int g_active_window_count = 0; + +using EnableNonClientDpiScaling = BOOL __stdcall(HWND hwnd); + +// Scale helper to convert logical scaler values to physical using passed in +// scale factor +int Scale(int source, double scale_factor) { + return static_cast(source * scale_factor); +} + +// Dynamically loads the |EnableNonClientDpiScaling| from the User32 module. +// This API is only needed for PerMonitor V1 awareness mode. +void EnableFullDpiSupportIfAvailable(HWND hwnd) { + HMODULE user32_module = LoadLibraryA("User32.dll"); + if (!user32_module) { + return; + } + auto enable_non_client_dpi_scaling = + reinterpret_cast( + GetProcAddress(user32_module, "EnableNonClientDpiScaling")); + if (enable_non_client_dpi_scaling != nullptr) { + enable_non_client_dpi_scaling(hwnd); + } + FreeLibrary(user32_module); +} + +} // namespace + +// Manages the Win32Window's window class registration. +class WindowClassRegistrar { + public: + ~WindowClassRegistrar() = default; + + // Returns the singleton registrar instance. + static WindowClassRegistrar* GetInstance() { + if (!instance_) { + instance_ = new WindowClassRegistrar(); + } + return instance_; + } + + // Returns the name of the window class, registering the class if it hasn't + // previously been registered. + const wchar_t* GetWindowClass(); + + // Unregisters the window class. Should only be called if there are no + // instances of the window. + void UnregisterWindowClass(); + + private: + WindowClassRegistrar() = default; + + static WindowClassRegistrar* instance_; + + bool class_registered_ = false; +}; + +WindowClassRegistrar* WindowClassRegistrar::instance_ = nullptr; + +const wchar_t* WindowClassRegistrar::GetWindowClass() { + if (!class_registered_) { + WNDCLASS window_class{}; + window_class.hCursor = LoadCursor(nullptr, IDC_ARROW); + window_class.lpszClassName = kWindowClassName; + window_class.style = CS_HREDRAW | CS_VREDRAW; + window_class.cbClsExtra = 0; + window_class.cbWndExtra = 0; + window_class.hInstance = GetModuleHandle(nullptr); + window_class.hIcon = + LoadIcon(window_class.hInstance, MAKEINTRESOURCE(IDI_APP_ICON)); + window_class.hbrBackground = 0; + window_class.lpszMenuName = nullptr; + window_class.lpfnWndProc = Win32Window::WndProc; + RegisterClass(&window_class); + class_registered_ = true; + } + return kWindowClassName; +} + +void WindowClassRegistrar::UnregisterWindowClass() { + UnregisterClass(kWindowClassName, nullptr); + class_registered_ = false; +} + +Win32Window::Win32Window() { + ++g_active_window_count; +} + +Win32Window::~Win32Window() { + --g_active_window_count; + Destroy(); +} + +bool Win32Window::Create(const std::wstring& title, + const Point& origin, + const Size& size) { + Destroy(); + + const wchar_t* window_class = + WindowClassRegistrar::GetInstance()->GetWindowClass(); + + const POINT target_point = {static_cast(origin.x), + static_cast(origin.y)}; + HMONITOR monitor = MonitorFromPoint(target_point, MONITOR_DEFAULTTONEAREST); + UINT dpi = FlutterDesktopGetDpiForMonitor(monitor); + double scale_factor = dpi / 96.0; + + HWND window = CreateWindow( + window_class, title.c_str(), WS_OVERLAPPEDWINDOW, + Scale(origin.x, scale_factor), Scale(origin.y, scale_factor), + Scale(size.width, scale_factor), Scale(size.height, scale_factor), + nullptr, nullptr, GetModuleHandle(nullptr), this); + + if (!window) { + return false; + } + + UpdateTheme(window); + + return OnCreate(); +} + +bool Win32Window::Show() { + return ShowWindow(window_handle_, SW_SHOWNORMAL); +} + +// static +LRESULT CALLBACK Win32Window::WndProc(HWND const window, + UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept { + if (message == WM_NCCREATE) { + auto window_struct = reinterpret_cast(lparam); + SetWindowLongPtr(window, GWLP_USERDATA, + reinterpret_cast(window_struct->lpCreateParams)); + + auto that = static_cast(window_struct->lpCreateParams); + EnableFullDpiSupportIfAvailable(window); + that->window_handle_ = window; + } else if (Win32Window* that = GetThisFromHandle(window)) { + return that->MessageHandler(window, message, wparam, lparam); + } + + return DefWindowProc(window, message, wparam, lparam); +} + +LRESULT +Win32Window::MessageHandler(HWND hwnd, + UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept { + switch (message) { + case WM_DESTROY: + window_handle_ = nullptr; + Destroy(); + if (quit_on_close_) { + PostQuitMessage(0); + } + return 0; + + case WM_DPICHANGED: { + auto newRectSize = reinterpret_cast(lparam); + LONG newWidth = newRectSize->right - newRectSize->left; + LONG newHeight = newRectSize->bottom - newRectSize->top; + + SetWindowPos(hwnd, nullptr, newRectSize->left, newRectSize->top, newWidth, + newHeight, SWP_NOZORDER | SWP_NOACTIVATE); + + return 0; + } + case WM_SIZE: { + RECT rect = GetClientArea(); + if (child_content_ != nullptr) { + // Size and position the child window. + MoveWindow(child_content_, rect.left, rect.top, rect.right - rect.left, + rect.bottom - rect.top, TRUE); + } + return 0; + } + + case WM_ACTIVATE: + if (child_content_ != nullptr) { + SetFocus(child_content_); + } + return 0; + + case WM_DWMCOLORIZATIONCOLORCHANGED: + UpdateTheme(hwnd); + return 0; + } + + return DefWindowProc(window_handle_, message, wparam, lparam); +} + +void Win32Window::Destroy() { + OnDestroy(); + + if (window_handle_) { + DestroyWindow(window_handle_); + window_handle_ = nullptr; + } + if (g_active_window_count == 0) { + WindowClassRegistrar::GetInstance()->UnregisterWindowClass(); + } +} + +Win32Window* Win32Window::GetThisFromHandle(HWND const window) noexcept { + return reinterpret_cast( + GetWindowLongPtr(window, GWLP_USERDATA)); +} + +void Win32Window::SetChildContent(HWND content) { + child_content_ = content; + SetParent(content, window_handle_); + RECT frame = GetClientArea(); + + MoveWindow(content, frame.left, frame.top, frame.right - frame.left, + frame.bottom - frame.top, true); + + SetFocus(child_content_); +} + +RECT Win32Window::GetClientArea() { + RECT frame; + GetClientRect(window_handle_, &frame); + return frame; +} + +HWND Win32Window::GetHandle() { + return window_handle_; +} + +void Win32Window::SetQuitOnClose(bool quit_on_close) { + quit_on_close_ = quit_on_close; +} + +bool Win32Window::OnCreate() { + // No-op; provided for subclasses. + return true; +} + +void Win32Window::OnDestroy() { + // No-op; provided for subclasses. +} + +void Win32Window::UpdateTheme(HWND const window) { + DWORD light_mode; + DWORD light_mode_size = sizeof(light_mode); + LSTATUS result = RegGetValue(HKEY_CURRENT_USER, kGetPreferredBrightnessRegKey, + kGetPreferredBrightnessRegValue, + RRF_RT_REG_DWORD, nullptr, &light_mode, + &light_mode_size); + + if (result == ERROR_SUCCESS) { + BOOL enable_dark_mode = light_mode == 0; + DwmSetWindowAttribute(window, DWMWA_USE_IMMERSIVE_DARK_MODE, + &enable_dark_mode, sizeof(enable_dark_mode)); + } +} diff --git a/animations/step_05_d/windows/runner/win32_window.h b/animations/step_05_d/windows/runner/win32_window.h new file mode 100644 index 0000000000..e901dde684 --- /dev/null +++ b/animations/step_05_d/windows/runner/win32_window.h @@ -0,0 +1,102 @@ +#ifndef RUNNER_WIN32_WINDOW_H_ +#define RUNNER_WIN32_WINDOW_H_ + +#include + +#include +#include +#include + +// A class abstraction for a high DPI-aware Win32 Window. Intended to be +// inherited from by classes that wish to specialize with custom +// rendering and input handling +class Win32Window { + public: + struct Point { + unsigned int x; + unsigned int y; + Point(unsigned int x, unsigned int y) : x(x), y(y) {} + }; + + struct Size { + unsigned int width; + unsigned int height; + Size(unsigned int width, unsigned int height) + : width(width), height(height) {} + }; + + Win32Window(); + virtual ~Win32Window(); + + // Creates a win32 window with |title| that is positioned and sized using + // |origin| and |size|. New windows are created on the default monitor. Window + // sizes are specified to the OS in physical pixels, hence to ensure a + // consistent size this function will scale the inputted width and height as + // as appropriate for the default monitor. The window is invisible until + // |Show| is called. Returns true if the window was created successfully. + bool Create(const std::wstring& title, const Point& origin, const Size& size); + + // Show the current window. Returns true if the window was successfully shown. + bool Show(); + + // Release OS resources associated with window. + void Destroy(); + + // Inserts |content| into the window tree. + void SetChildContent(HWND content); + + // Returns the backing Window handle to enable clients to set icon and other + // window properties. Returns nullptr if the window has been destroyed. + HWND GetHandle(); + + // If true, closing this window will quit the application. + void SetQuitOnClose(bool quit_on_close); + + // Return a RECT representing the bounds of the current client area. + RECT GetClientArea(); + + protected: + // Processes and route salient window messages for mouse handling, + // size change and DPI. Delegates handling of these to member overloads that + // inheriting classes can handle. + virtual LRESULT MessageHandler(HWND window, + UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept; + + // Called when CreateAndShow is called, allowing subclass window-related + // setup. Subclasses should return false if setup fails. + virtual bool OnCreate(); + + // Called when Destroy is called. + virtual void OnDestroy(); + + private: + friend class WindowClassRegistrar; + + // OS callback called by message pump. Handles the WM_NCCREATE message which + // is passed when the non-client area is being created and enables automatic + // non-client DPI scaling so that the non-client area automatically + // responds to changes in DPI. All other messages are handled by + // MessageHandler. + static LRESULT CALLBACK WndProc(HWND const window, + UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept; + + // Retrieves a class instance pointer for |window| + static Win32Window* GetThisFromHandle(HWND const window) noexcept; + + // Update the window frame's theme to match the system theme. + static void UpdateTheme(HWND const window); + + bool quit_on_close_ = false; + + // window handle for top level window. + HWND window_handle_ = nullptr; + + // window handle for hosted content. + HWND child_content_ = nullptr; +}; + +#endif // RUNNER_WIN32_WINDOW_H_ From 9333bf27fe4da9f91abf187664c9120adfe3511f Mon Sep 17 00:00:00 2001 From: Brett Morgan Date: Thu, 14 Nov 2024 20:17:41 +1100 Subject: [PATCH 063/108] Fixed up WIP --- animations/codelab_rebuild.yaml | 283 +++++++++++++++++++++++++++++++- 1 file changed, 278 insertions(+), 5 deletions(-) diff --git a/animations/codelab_rebuild.yaml b/animations/codelab_rebuild.yaml index a6e996fdf4..49dc7f99b5 100644 --- a/animations/codelab_rebuild.yaml +++ b/animations/codelab_rebuild.yaml @@ -1026,11 +1026,52 @@ steps: - name: Use package:animations FadeThroughTransition path: quiz/lib/home_screen.dart patch-u: | - + --- b/animations/step_05_b/lib/home_screen.dart + +++ a/animations/step_05_b/lib/home_screen.dart + @@ -1,3 +1,4 @@ + +import 'package:animations/animations.dart'; + import 'package:flutter/material.dart'; + import 'question_screen.dart'; + + @@ -34,7 +35,11 @@ class HomeScreen extends StatelessWidget { + secondaryAnimation, + child, + ) { + - return FadeTransition(opacity: animation, child: child); + + return FadeThroughTransition( + + animation: animation, + + secondaryAnimation: secondaryAnimation, + + child: child, + + ); + }, + ), + ); - name: Configure Predictive Back on Android path: quiz/lib/main.dart patch-u: | - + --- b/animations/step_05_b/lib/main.dart + +++ a/animations/step_05_b/lib/main.dart + @@ -1,3 +1,4 @@ + +import 'package:animations/animations.dart'; + import 'package:flutter/material.dart'; + + import 'home_screen.dart'; + @@ -16,6 +17,15 @@ class MainApp extends StatelessWidget { + theme: ThemeData( + colorScheme: ColorScheme.fromSeed(seedColor: Colors.blue), + useMaterial3: true, + + pageTransitionsTheme: PageTransitionsTheme( + + builders: { + + TargetPlatform.android: PredictiveBackPageTransitionsBuilder(), + + TargetPlatform.iOS: FadeThroughPageTransitionsBuilder(), + + TargetPlatform.macOS: FadeThroughPageTransitionsBuilder(), + + TargetPlatform.windows: FadeThroughPageTransitionsBuilder(), + + TargetPlatform.linux: FadeThroughPageTransitionsBuilder(), + + }, + + ), + ), + home: HomeScreen(), + ); - name: Remove step_05_b rmdir: step_05_b - name: Copy step_05_b @@ -1040,11 +1081,89 @@ steps: - name: Change back to MaterialPageRoute path: quiz/lib/home_screen.dart patch-u: | - + --- b/animations/step_05_c/lib/home_screen.dart + +++ a/animations/step_05_c/lib/home_screen.dart + @@ -1,4 +1,3 @@ + -import 'package:animations/animations.dart'; + import 'package:flutter/material.dart'; + import 'question_screen.dart'; + + @@ -25,22 +24,10 @@ class HomeScreen extends StatelessWidget { + // Show the question screen to start the game + Navigator.push( + context, + - PageRouteBuilder( + - pageBuilder: (context, animation, secondaryAnimation) { + + MaterialPageRoute( + + builder: (context) { + return const QuestionScreen(); + }, + - transitionsBuilder: ( + - context, + - animation, + - secondaryAnimation, + - child, + - ) { + - return FadeThroughTransition( + - animation: animation, + - secondaryAnimation: secondaryAnimation, + - child: child, + - ); + - }, + ), + ); + }, - name: Use FadeThroughTransition path: quiz/lib/question_screen.dart patch-u: | - + --- b/animations/step_05_c/lib/question_screen.dart + +++ a/animations/step_05_c/lib/question_screen.dart + @@ -1,3 +1,4 @@ + +import 'package:animations/animations.dart'; + import 'package:flutter/material.dart'; + import 'flip_effect.dart'; + import 'scoreboard.dart'; + @@ -87,31 +88,21 @@ class QuestionCard extends StatelessWidget { + + @override + Widget build(BuildContext context) { + - return AnimatedSwitcher( + - layoutBuilder: (Widget? currentChild, List previousChildren) { + + return PageTransitionSwitcher( + + duration: const Duration(milliseconds: 200), + + layoutBuilder: (List entries) { + return Stack( + alignment: Alignment.topCenter, + - children: [ + - ...previousChildren, + - if (currentChild != null) currentChild, + - ], + + children: [...entries], + ); + }, + - transitionBuilder: (Widget child, Animation animation) { + - final curveAnimation = CurveTween( + - curve: Curves.easeInCubic, + - ).animate(animation); + - final offsetAnimation = Tween( + - begin: Offset(-0.1, 0.0), + - end: Offset.zero, + - ).animate(curveAnimation); + - final fadeInAnimation = curveAnimation; + - return FadeTransition( + - opacity: fadeInAnimation, + - child: SlideTransition(position: offsetAnimation, child: child), + + transitionBuilder: (Widget child, animation, secondaryAnimation) { + + return FadeThroughTransition( + + animation: animation, + + secondaryAnimation: secondaryAnimation, + + child: child, + ); + }, + - duration: const Duration(milliseconds: 300), + child: Card( + key: ValueKey(question), + elevation: 4, - name: Remove step_05_c rmdir: step_05_c - name: Copy step_05_c @@ -1054,7 +1173,161 @@ steps: - name: Use OpenContainer path: quiz/lib/question_screen.dart patch-u: | - + --- b/animations/step_05_d/lib/question_screen.dart + +++ a/animations/step_05_d/lib/question_screen.dart + @@ -15,6 +15,7 @@ class _QuestionScreenState extends State { + late final QuizViewModel viewModel = QuizViewModel( + onGameOver: _handleGameOver, + ); + + VoidCallback? _showGameOverScreen; + + @override + Widget build(BuildContext context) { + @@ -38,7 +39,11 @@ class _QuestionScreenState extends State { + body: Center( + child: Column( + children: [ + - QuestionCard(question: viewModel.currentQuestion?.question), + + QuestionCard( + + onChangeOpenContainer: _handleChangeOpenContainer, + + question: viewModel.currentQuestion?.question, + + viewModel: viewModel, + + ), + Spacer(), + AnswerCards( + onTapped: (index) { + @@ -59,24 +64,49 @@ class _QuestionScreenState extends State { + ); + } + + + void _handleChangeOpenContainer(VoidCallback openContainer) { + + _showGameOverScreen = openContainer; + + } + + + void _handleGameOver() { + - showDialog( + - barrierDismissible: false, + - context: context, + - builder: (context) { + - return AlertDialog( + - title: Text('Game Over!'), + - content: Text('Score: ${viewModel.score}'), + - actions: [ + - TextButton( + + if (_showGameOverScreen != null) { + + _showGameOverScreen!(); + + } + + } + +} + + + +class GameOverScreen extends StatelessWidget { + + final QuizViewModel viewModel; + + const GameOverScreen({required this.viewModel, super.key}); + + + + @override + + Widget build(BuildContext context) { + + return Scaffold( + + appBar: AppBar(automaticallyImplyLeading: false), + + body: Center( + + child: Column( + + mainAxisAlignment: MainAxisAlignment.center, + + children: [ + + Scoreboard( + + score: viewModel.score, + + totalQuestions: viewModel.totalQuestions, + + ), + + Text('You Win!', style: Theme.of(context).textTheme.displayLarge), + + Text( + + 'Score: ${viewModel.score} / ${viewModel.totalQuestions}', + + style: Theme.of(context).textTheme.displaySmall, + + ), + + ElevatedButton( + + child: Text('OK'), + onPressed: () { + - Navigator.popUntil(context, (route) => route.isFirst); + + Navigator.pop(context); + + // Navigator.popUntil( + + // context, (route) => route.isFirst); + }, + - child: Text('OK'), + ), + ], + - ); + - }, + + ), + + ), + ); + } + } + @@ -84,18 +114,22 @@ class _QuestionScreenState extends State { + class QuestionCard extends StatelessWidget { + final String? question; + + - const QuestionCard({required this.question, super.key}); + + const QuestionCard({ + + required this.onChangeOpenContainer, + + required this.question, + + required this.viewModel, + + super.key, + + }); + + + + final ValueChanged onChangeOpenContainer; + + final QuizViewModel viewModel; + + + + static const _backgroundColor = Color(0xfff2f3fa); + + @override + Widget build(BuildContext context) { + return PageTransitionSwitcher( + duration: const Duration(milliseconds: 200), + - layoutBuilder: (List entries) { + - return Stack( + - alignment: Alignment.topCenter, + - children: [...entries], + - ); + - }, + transitionBuilder: (Widget child, animation, secondaryAnimation) { + return FadeThroughTransition( + animation: animation, + @@ -103,16 +137,30 @@ class QuestionCard extends StatelessWidget { + child: child, + ); + }, + - child: Card( + + child: OpenContainer( + key: ValueKey(question), + - elevation: 4, + - child: Padding( + - padding: const EdgeInsets.all(16.0), + - child: Text( + - question ?? "", + - style: Theme.of(context).textTheme.displaySmall, + - ), + + tappable: false, + + closedColor: _backgroundColor, + + closedShape: const RoundedRectangleBorder( + + borderRadius: BorderRadius.all(Radius.circular(12.0)), + ), + + closedElevation: 4, + + closedBuilder: (context, openContainer) { + + onChangeOpenContainer(openContainer); + + return ColoredBox( + + color: _backgroundColor, + + child: Padding( + + padding: const EdgeInsets.all(16.0), + + child: Text( + + question ?? "", + + style: Theme.of(context).textTheme.displaySmall, + + ), + + ), + + ); + + }, + + openBuilder: (context, closeContainer) { + + return GameOverScreen(viewModel: viewModel); + + }, + ), + ); + } - name: Remove step_05_d rmdir: step_05_d - name: Copy step_05_d From e85b6cccebcf03beec69a8448d0342e35f1fc1d3 Mon Sep 17 00:00:00 2001 From: Brett Morgan Date: Thu, 14 Nov 2024 20:30:41 +1100 Subject: [PATCH 064/108] Update `audio_soloud` --- .../app/{build.gradle => build.gradle.kts} | 10 +- audio_soloud/step_02/android/build.gradle | 18 --- audio_soloud/step_02/android/build.gradle.kts | 21 ++++ .../step_02/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- audio_soloud/step_02/android/settings.gradle | 25 ---- .../step_02/android/settings.gradle.kts | 25 ++++ audio_soloud/step_02/ios/Podfile | 1 - .../ios/Runner.xcodeproj/project.pbxproj | 114 +++++++++--------- audio_soloud/step_02/macos/Podfile | 1 - .../macos/Runner.xcodeproj/project.pbxproj | 90 +++++++------- .../android/app/build.gradle.kts} | 10 +- audio_soloud/step_03/android/build.gradle | 18 --- audio_soloud/step_03/android/build.gradle.kts | 21 ++++ .../step_03/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- audio_soloud/step_03/android/settings.gradle | 25 ---- .../step_03/android/settings.gradle.kts | 25 ++++ audio_soloud/step_03/ios/Podfile | 1 - .../ios/Runner.xcodeproj/project.pbxproj | 114 +++++++++--------- audio_soloud/step_03/macos/Podfile | 1 - .../macos/Runner.xcodeproj/project.pbxproj | 90 +++++++------- .../android/app/build.gradle.kts} | 10 +- audio_soloud/step_04a/android/build.gradle | 18 --- .../step_04a/android/build.gradle.kts | 21 ++++ .../step_04a/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- audio_soloud/step_04a/android/settings.gradle | 25 ---- .../step_04a/android/settings.gradle.kts | 25 ++++ audio_soloud/step_04a/ios/Podfile | 1 - .../ios/Runner.xcodeproj/project.pbxproj | 114 +++++++++--------- audio_soloud/step_04a/macos/Podfile | 1 - .../macos/Runner.xcodeproj/project.pbxproj | 90 +++++++------- .../android/app/build.gradle.kts} | 10 +- audio_soloud/step_04b/android/build.gradle | 18 --- .../step_04b/android/build.gradle.kts | 21 ++++ .../step_04b/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- audio_soloud/step_04b/android/settings.gradle | 25 ---- .../step_04b/android/settings.gradle.kts | 25 ++++ audio_soloud/step_04b/ios/Podfile | 1 - .../ios/Runner.xcodeproj/project.pbxproj | 114 +++++++++--------- audio_soloud/step_04b/macos/Podfile | 1 - .../macos/Runner.xcodeproj/project.pbxproj | 90 +++++++------- audio_soloud/step_05/android/app/build.gradle | 44 ------- .../step_05/android/app/build.gradle.kts | 44 +++++++ audio_soloud/step_05/android/build.gradle | 18 --- audio_soloud/step_05/android/build.gradle.kts | 21 ++++ .../step_05/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- audio_soloud/step_05/android/settings.gradle | 25 ---- .../step_05/android/settings.gradle.kts | 25 ++++ audio_soloud/step_05/ios/Podfile | 1 - .../ios/Runner.xcodeproj/project.pbxproj | 114 +++++++++--------- audio_soloud/step_05/macos/Podfile | 1 - .../macos/Runner.xcodeproj/project.pbxproj | 90 +++++++------- audio_soloud/step_06/android/app/build.gradle | 44 ------- .../step_06/android/app/build.gradle.kts | 44 +++++++ audio_soloud/step_06/android/build.gradle | 18 --- audio_soloud/step_06/android/build.gradle.kts | 21 ++++ .../step_06/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- audio_soloud/step_06/android/settings.gradle | 25 ---- .../step_06/android/settings.gradle.kts | 25 ++++ audio_soloud/step_06/ios/Podfile | 1 - .../ios/Runner.xcodeproj/project.pbxproj | 114 +++++++++--------- audio_soloud/step_06/macos/Podfile | 1 - .../macos/Runner.xcodeproj/project.pbxproj | 90 +++++++------- 68 files changed, 1008 insertions(+), 1002 deletions(-) rename audio_soloud/step_02/android/app/{build.gradle => build.gradle.kts} (84%) delete mode 100644 audio_soloud/step_02/android/build.gradle create mode 100644 audio_soloud/step_02/android/build.gradle.kts delete mode 100644 audio_soloud/step_02/android/settings.gradle create mode 100644 audio_soloud/step_02/android/settings.gradle.kts rename audio_soloud/{step_04a/android/app/build.gradle => step_03/android/app/build.gradle.kts} (84%) delete mode 100644 audio_soloud/step_03/android/build.gradle create mode 100644 audio_soloud/step_03/android/build.gradle.kts delete mode 100644 audio_soloud/step_03/android/settings.gradle create mode 100644 audio_soloud/step_03/android/settings.gradle.kts rename audio_soloud/{step_04b/android/app/build.gradle => step_04a/android/app/build.gradle.kts} (84%) delete mode 100644 audio_soloud/step_04a/android/build.gradle create mode 100644 audio_soloud/step_04a/android/build.gradle.kts delete mode 100644 audio_soloud/step_04a/android/settings.gradle create mode 100644 audio_soloud/step_04a/android/settings.gradle.kts rename audio_soloud/{step_03/android/app/build.gradle => step_04b/android/app/build.gradle.kts} (84%) delete mode 100644 audio_soloud/step_04b/android/build.gradle create mode 100644 audio_soloud/step_04b/android/build.gradle.kts delete mode 100644 audio_soloud/step_04b/android/settings.gradle create mode 100644 audio_soloud/step_04b/android/settings.gradle.kts delete mode 100644 audio_soloud/step_05/android/app/build.gradle create mode 100644 audio_soloud/step_05/android/app/build.gradle.kts delete mode 100644 audio_soloud/step_05/android/build.gradle create mode 100644 audio_soloud/step_05/android/build.gradle.kts delete mode 100644 audio_soloud/step_05/android/settings.gradle create mode 100644 audio_soloud/step_05/android/settings.gradle.kts delete mode 100644 audio_soloud/step_06/android/app/build.gradle create mode 100644 audio_soloud/step_06/android/app/build.gradle.kts delete mode 100644 audio_soloud/step_06/android/build.gradle create mode 100644 audio_soloud/step_06/android/build.gradle.kts delete mode 100644 audio_soloud/step_06/android/settings.gradle create mode 100644 audio_soloud/step_06/android/settings.gradle.kts diff --git a/audio_soloud/step_02/android/app/build.gradle b/audio_soloud/step_02/android/app/build.gradle.kts similarity index 84% rename from audio_soloud/step_02/android/app/build.gradle rename to audio_soloud/step_02/android/app/build.gradle.kts index 2c07f0d32f..189d47a473 100644 --- a/audio_soloud/step_02/android/app/build.gradle +++ b/audio_soloud/step_02/android/app/build.gradle.kts @@ -1,8 +1,8 @@ plugins { - id "com.android.application" - id "kotlin-android" + id("com.android.application") + id("kotlin-android") // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. - id "dev.flutter.flutter-gradle-plugin" + id("dev.flutter.flutter-gradle-plugin") } android { @@ -16,7 +16,7 @@ android { } kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8 + jvmTarget = JavaVersion.VERSION_1_8.toString() } defaultConfig { @@ -34,7 +34,7 @@ android { release { // TODO: Add your own signing config for the release build. // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig = signingConfigs.debug + signingConfig = signingConfigs.getByName("debug") } } } diff --git a/audio_soloud/step_02/android/build.gradle b/audio_soloud/step_02/android/build.gradle deleted file mode 100644 index d2ffbffa4c..0000000000 --- a/audio_soloud/step_02/android/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = "../build" -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(":app") -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/audio_soloud/step_02/android/build.gradle.kts b/audio_soloud/step_02/android/build.gradle.kts new file mode 100644 index 0000000000..89176ef44e --- /dev/null +++ b/audio_soloud/step_02/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/audio_soloud/step_02/android/gradle.properties b/audio_soloud/step_02/android/gradle.properties index 2597170821..f018a61817 100644 --- a/audio_soloud/step_02/android/gradle.properties +++ b/audio_soloud/step_02/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/audio_soloud/step_02/android/gradle/wrapper/gradle-wrapper.properties b/audio_soloud/step_02/android/gradle/wrapper/gradle-wrapper.properties index 7bb2df6ba6..afa1e8eb0a 100644 --- a/audio_soloud/step_02/android/gradle/wrapper/gradle-wrapper.properties +++ b/audio_soloud/step_02/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip diff --git a/audio_soloud/step_02/android/settings.gradle b/audio_soloud/step_02/android/settings.gradle deleted file mode 100644 index b9e43bd376..0000000000 --- a/audio_soloud/step_02/android/settings.gradle +++ /dev/null @@ -1,25 +0,0 @@ -pluginManagement { - def flutterSdkPath = { - def properties = new Properties() - file("local.properties").withInputStream { properties.load(it) } - def flutterSdkPath = properties.getProperty("flutter.sdk") - assert flutterSdkPath != null, "flutter.sdk not set in local.properties" - return flutterSdkPath - }() - - includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") - - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} - -plugins { - id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.1.0" apply false - id "org.jetbrains.kotlin.android" version "1.8.22" apply false -} - -include ":app" diff --git a/audio_soloud/step_02/android/settings.gradle.kts b/audio_soloud/step_02/android/settings.gradle.kts new file mode 100644 index 0000000000..a439442c20 --- /dev/null +++ b/audio_soloud/step_02/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.0" apply false + id("org.jetbrains.kotlin.android") version "1.8.22" apply false +} + +include(":app") diff --git a/audio_soloud/step_02/ios/Podfile b/audio_soloud/step_02/ios/Podfile index a836c8c671..11e1cb83ed 100644 --- a/audio_soloud/step_02/ios/Podfile +++ b/audio_soloud/step_02/ios/Podfile @@ -29,7 +29,6 @@ flutter_ios_podfile_setup target 'Runner' do use_frameworks! - use_modular_headers! flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) target 'RunnerTests' do diff --git a/audio_soloud/step_02/ios/Runner.xcodeproj/project.pbxproj b/audio_soloud/step_02/ios/Runner.xcodeproj/project.pbxproj index 1b9ce23f29..f95cd4ddc5 100644 --- a/audio_soloud/step_02/ios/Runner.xcodeproj/project.pbxproj +++ b/audio_soloud/step_02/ios/Runner.xcodeproj/project.pbxproj @@ -8,14 +8,14 @@ /* Begin PBXBuildFile section */ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; + 1F8DFF2D0B45656A1484D9E9 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7699A6C867B148FFFEDA7910 /* Pods_RunnerTests.framework */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; - 660451A8A4F7B5016E2BE610 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5331A371F0116A607BB11374 /* Pods_Runner.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; + 917E733C29294B465786C267 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9897A34F0C6C8980D697D9C2 /* Pods_Runner.framework */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - A6631C561FD82D31CBA4956D /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9A5F864F2C140D5AB62D37C2 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,37 +42,37 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 100CA33BCCF2B6607BE728DB /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 1A15B1F8A041262C230BED54 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - 1A3676A19DF22D28E9BD1FC2 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 419220FE5D8CCA17E4449148 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 5331A371F0116A607BB11374 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 657C8805F3A4B377C4283F24 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 7699A6C867B148FFFEDA7910 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; + 976B10BC2EF464F7C8064A04 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 9A5F864F2C140D5AB62D37C2 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - BFF0A9ECF48DB9005E43855A /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - D07E5EC4B7EF798A3348CFAA /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - EE6B331A67AAC0FCD2EA6C9D /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 9897A34F0C6C8980D697D9C2 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + BD5BF548F0ADA3E97A8011F7 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + C30BE79F2FFD7703DD0D6181 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + E95D62B8B1B4119738B97221 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 797442CBBB46F44138B8A62F /* Frameworks */ = { + 90A6BC6AEE9AD531F4FA0BE7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - A6631C561FD82D31CBA4956D /* Pods_RunnerTests.framework in Frameworks */, + 1F8DFF2D0B45656A1484D9E9 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -80,7 +80,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 660451A8A4F7B5016E2BE610 /* Pods_Runner.framework in Frameworks */, + 917E733C29294B465786C267 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -95,18 +95,13 @@ path = RunnerTests; sourceTree = ""; }; - 84DBD755DD72CD62634B38A6 /* Pods */ = { + 5B23575691AD09BF9C5386A9 /* Frameworks */ = { isa = PBXGroup; children = ( - EE6B331A67AAC0FCD2EA6C9D /* Pods-Runner.debug.xcconfig */, - 1A3676A19DF22D28E9BD1FC2 /* Pods-Runner.release.xcconfig */, - D07E5EC4B7EF798A3348CFAA /* Pods-Runner.profile.xcconfig */, - 419220FE5D8CCA17E4449148 /* Pods-RunnerTests.debug.xcconfig */, - BFF0A9ECF48DB9005E43855A /* Pods-RunnerTests.release.xcconfig */, - 1A15B1F8A041262C230BED54 /* Pods-RunnerTests.profile.xcconfig */, + 9897A34F0C6C8980D697D9C2 /* Pods_Runner.framework */, + 7699A6C867B148FFFEDA7910 /* Pods_RunnerTests.framework */, ); - name = Pods; - path = Pods; + name = Frameworks; sourceTree = ""; }; 9740EEB11CF90186004384FC /* Flutter */ = { @@ -127,8 +122,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - 84DBD755DD72CD62634B38A6 /* Pods */, - CB3C27D4F94DA2B14436D57E /* Frameworks */, + CD6C9B8CDB44AE5FA5357DC4 /* Pods */, + 5B23575691AD09BF9C5386A9 /* Frameworks */, ); sourceTree = ""; }; @@ -156,13 +151,18 @@ path = Runner; sourceTree = ""; }; - CB3C27D4F94DA2B14436D57E /* Frameworks */ = { + CD6C9B8CDB44AE5FA5357DC4 /* Pods */ = { isa = PBXGroup; children = ( - 5331A371F0116A607BB11374 /* Pods_Runner.framework */, - 9A5F864F2C140D5AB62D37C2 /* Pods_RunnerTests.framework */, + C30BE79F2FFD7703DD0D6181 /* Pods-Runner.debug.xcconfig */, + BD5BF548F0ADA3E97A8011F7 /* Pods-Runner.release.xcconfig */, + 100CA33BCCF2B6607BE728DB /* Pods-Runner.profile.xcconfig */, + E95D62B8B1B4119738B97221 /* Pods-RunnerTests.debug.xcconfig */, + 976B10BC2EF464F7C8064A04 /* Pods-RunnerTests.release.xcconfig */, + 657C8805F3A4B377C4283F24 /* Pods-RunnerTests.profile.xcconfig */, ); - name = Frameworks; + name = Pods; + path = Pods; sourceTree = ""; }; /* End PBXGroup section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 2062CF2AA90746DBEBF6222E /* [CP] Check Pods Manifest.lock */, + 57996670C67F3C2A07C0AD53 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 797442CBBB46F44138B8A62F /* Frameworks */, + 90A6BC6AEE9AD531F4FA0BE7 /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 8A9478015A4593F36E3CD603 /* [CP] Check Pods Manifest.lock */, + EF4807D8ED6B42F4EFFF1F5F /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 7A80B7559B6CC8A2CE24A777 /* [CP] Embed Pods Frameworks */, + A44629AD5B7014368847AC88 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -270,7 +270,23 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 2062CF2AA90746DBEBF6222E /* [CP] Check Pods Manifest.lock */ = { + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", + ); + name = "Thin Binary"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + }; + 57996670C67F3C2A07C0AD53 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -292,23 +308,22 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputPaths = ( - "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); - name = "Thin Binary"; + name = "Run Script"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - 7A80B7559B6CC8A2CE24A777 /* [CP] Embed Pods Frameworks */ = { + A44629AD5B7014368847AC88 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -325,7 +340,7 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - 8A9478015A4593F36E3CD603 /* [CP] Check Pods Manifest.lock */ = { + EF4807D8ED6B42F4EFFF1F5F /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -347,21 +362,6 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { - isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "Run Script"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; - }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 419220FE5D8CCA17E4449148 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = E95D62B8B1B4119738B97221 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = BFF0A9ECF48DB9005E43855A /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 976B10BC2EF464F7C8064A04 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 1A15B1F8A041262C230BED54 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 657C8805F3A4B377C4283F24 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/audio_soloud/step_02/macos/Podfile b/audio_soloud/step_02/macos/Podfile index b52666a103..ff5ddb3b8b 100644 --- a/audio_soloud/step_02/macos/Podfile +++ b/audio_soloud/step_02/macos/Podfile @@ -28,7 +28,6 @@ flutter_macos_podfile_setup target 'Runner' do use_frameworks! - use_modular_headers! flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__)) target 'RunnerTests' do diff --git a/audio_soloud/step_02/macos/Runner.xcodeproj/project.pbxproj b/audio_soloud/step_02/macos/Runner.xcodeproj/project.pbxproj index b7362422cc..d52047b92f 100644 --- a/audio_soloud/step_02/macos/Runner.xcodeproj/project.pbxproj +++ b/audio_soloud/step_02/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ - 0D73403B8E98B133AA7CE204 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A47A3F9816C6B404C923F26A /* Pods_RunnerTests.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 64997B24FD16265E26078B31 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E9FF240A7207DE9140CCA6E3 /* Pods_Runner.framework */; }; + 5AD08C26497CC3DA72A60A7B /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B24FD02DE548531E8EB4E4C0 /* Pods_RunnerTests.framework */; }; + C689FF15D65EF8F953F5CF07 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7306EBA146478647D696BEA7 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,7 +62,9 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 2EFEC354148C8AED5D35BDE0 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 02074F761FF084D538C7DA64 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 09005269D751B53A0B905BA3 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 19F716A081271519061BEE50 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -79,15 +81,13 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 5BB8546BA2CD9C2B62569053 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - 6A8117CC8A0D7F170A118ACB /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 72A486F3FD5DA9FCD6EF83EF /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 7306EBA146478647D696BEA7 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 920D8C3ABC08DF577D3461CF /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - 95615250CC33E1E207BF1C7A /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 87DA2706F11528DE51918120 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - A47A3F9816C6B404C923F26A /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - E074DB6C779DC9B0BAB22369 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - E9FF240A7207DE9140CCA6E3 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + A0A96BE6DFA15981D1ABC0CD /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + B24FD02DE548531E8EB4E4C0 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 0D73403B8E98B133AA7CE204 /* Pods_RunnerTests.framework in Frameworks */, + 5AD08C26497CC3DA72A60A7B /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,7 +103,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 64997B24FD16265E26078B31 /* Pods_Runner.framework in Frameworks */, + C689FF15D65EF8F953F5CF07 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -137,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - C7208C9BEB8A8FE581EACF67 /* Pods */, + 5CF1E134C0075671A25E3CF8 /* Pods */, ); sourceTree = ""; }; @@ -185,15 +185,15 @@ path = Runner; sourceTree = ""; }; - C7208C9BEB8A8FE581EACF67 /* Pods */ = { + 5CF1E134C0075671A25E3CF8 /* Pods */ = { isa = PBXGroup; children = ( - 2EFEC354148C8AED5D35BDE0 /* Pods-Runner.debug.xcconfig */, - 6A8117CC8A0D7F170A118ACB /* Pods-Runner.release.xcconfig */, - 5BB8546BA2CD9C2B62569053 /* Pods-Runner.profile.xcconfig */, - 95615250CC33E1E207BF1C7A /* Pods-RunnerTests.debug.xcconfig */, - 920D8C3ABC08DF577D3461CF /* Pods-RunnerTests.release.xcconfig */, - E074DB6C779DC9B0BAB22369 /* Pods-RunnerTests.profile.xcconfig */, + 09005269D751B53A0B905BA3 /* Pods-Runner.debug.xcconfig */, + 87DA2706F11528DE51918120 /* Pods-Runner.release.xcconfig */, + 02074F761FF084D538C7DA64 /* Pods-Runner.profile.xcconfig */, + A0A96BE6DFA15981D1ABC0CD /* Pods-RunnerTests.debug.xcconfig */, + 19F716A081271519061BEE50 /* Pods-RunnerTests.release.xcconfig */, + 72A486F3FD5DA9FCD6EF83EF /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -202,8 +202,8 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - E9FF240A7207DE9140CCA6E3 /* Pods_Runner.framework */, - A47A3F9816C6B404C923F26A /* Pods_RunnerTests.framework */, + 7306EBA146478647D696BEA7 /* Pods_Runner.framework */, + B24FD02DE548531E8EB4E4C0 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 17F5D3067CAF6C4336E34B3C /* [CP] Check Pods Manifest.lock */, + 8046F9597FECD4D2AFE19826 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 58A93043BC52AB230C967806 /* [CP] Check Pods Manifest.lock */, + 00F50DC465F412B5DF36E306 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 38850385B5B0D324974EA1CE /* [CP] Embed Pods Frameworks */, + BFB61F33D6C07588E176985E /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,7 +323,7 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 17F5D3067CAF6C4336E34B3C /* [CP] Check Pods Manifest.lock */ = { + 00F50DC465F412B5DF36E306 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -338,7 +338,7 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -383,43 +383,43 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 38850385B5B0D324974EA1CE /* [CP] Embed Pods Frameworks */ = { + 8046F9597FECD4D2AFE19826 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 58A93043BC52AB230C967806 /* [CP] Check Pods Manifest.lock */ = { + BFB61F33D6C07588E176985E /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 95615250CC33E1E207BF1C7A /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = A0A96BE6DFA15981D1ABC0CD /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 920D8C3ABC08DF577D3461CF /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 19F716A081271519061BEE50 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = E074DB6C779DC9B0BAB22369 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 72A486F3FD5DA9FCD6EF83EF /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/audio_soloud/step_04a/android/app/build.gradle b/audio_soloud/step_03/android/app/build.gradle.kts similarity index 84% rename from audio_soloud/step_04a/android/app/build.gradle rename to audio_soloud/step_03/android/app/build.gradle.kts index 2c07f0d32f..189d47a473 100644 --- a/audio_soloud/step_04a/android/app/build.gradle +++ b/audio_soloud/step_03/android/app/build.gradle.kts @@ -1,8 +1,8 @@ plugins { - id "com.android.application" - id "kotlin-android" + id("com.android.application") + id("kotlin-android") // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. - id "dev.flutter.flutter-gradle-plugin" + id("dev.flutter.flutter-gradle-plugin") } android { @@ -16,7 +16,7 @@ android { } kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8 + jvmTarget = JavaVersion.VERSION_1_8.toString() } defaultConfig { @@ -34,7 +34,7 @@ android { release { // TODO: Add your own signing config for the release build. // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig = signingConfigs.debug + signingConfig = signingConfigs.getByName("debug") } } } diff --git a/audio_soloud/step_03/android/build.gradle b/audio_soloud/step_03/android/build.gradle deleted file mode 100644 index d2ffbffa4c..0000000000 --- a/audio_soloud/step_03/android/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = "../build" -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(":app") -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/audio_soloud/step_03/android/build.gradle.kts b/audio_soloud/step_03/android/build.gradle.kts new file mode 100644 index 0000000000..89176ef44e --- /dev/null +++ b/audio_soloud/step_03/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/audio_soloud/step_03/android/gradle.properties b/audio_soloud/step_03/android/gradle.properties index 2597170821..f018a61817 100644 --- a/audio_soloud/step_03/android/gradle.properties +++ b/audio_soloud/step_03/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/audio_soloud/step_03/android/gradle/wrapper/gradle-wrapper.properties b/audio_soloud/step_03/android/gradle/wrapper/gradle-wrapper.properties index 7bb2df6ba6..afa1e8eb0a 100644 --- a/audio_soloud/step_03/android/gradle/wrapper/gradle-wrapper.properties +++ b/audio_soloud/step_03/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip diff --git a/audio_soloud/step_03/android/settings.gradle b/audio_soloud/step_03/android/settings.gradle deleted file mode 100644 index b9e43bd376..0000000000 --- a/audio_soloud/step_03/android/settings.gradle +++ /dev/null @@ -1,25 +0,0 @@ -pluginManagement { - def flutterSdkPath = { - def properties = new Properties() - file("local.properties").withInputStream { properties.load(it) } - def flutterSdkPath = properties.getProperty("flutter.sdk") - assert flutterSdkPath != null, "flutter.sdk not set in local.properties" - return flutterSdkPath - }() - - includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") - - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} - -plugins { - id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.1.0" apply false - id "org.jetbrains.kotlin.android" version "1.8.22" apply false -} - -include ":app" diff --git a/audio_soloud/step_03/android/settings.gradle.kts b/audio_soloud/step_03/android/settings.gradle.kts new file mode 100644 index 0000000000..a439442c20 --- /dev/null +++ b/audio_soloud/step_03/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.0" apply false + id("org.jetbrains.kotlin.android") version "1.8.22" apply false +} + +include(":app") diff --git a/audio_soloud/step_03/ios/Podfile b/audio_soloud/step_03/ios/Podfile index a836c8c671..11e1cb83ed 100644 --- a/audio_soloud/step_03/ios/Podfile +++ b/audio_soloud/step_03/ios/Podfile @@ -29,7 +29,6 @@ flutter_ios_podfile_setup target 'Runner' do use_frameworks! - use_modular_headers! flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) target 'RunnerTests' do diff --git a/audio_soloud/step_03/ios/Runner.xcodeproj/project.pbxproj b/audio_soloud/step_03/ios/Runner.xcodeproj/project.pbxproj index 1b9ce23f29..f95cd4ddc5 100644 --- a/audio_soloud/step_03/ios/Runner.xcodeproj/project.pbxproj +++ b/audio_soloud/step_03/ios/Runner.xcodeproj/project.pbxproj @@ -8,14 +8,14 @@ /* Begin PBXBuildFile section */ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; + 1F8DFF2D0B45656A1484D9E9 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7699A6C867B148FFFEDA7910 /* Pods_RunnerTests.framework */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; - 660451A8A4F7B5016E2BE610 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5331A371F0116A607BB11374 /* Pods_Runner.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; + 917E733C29294B465786C267 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9897A34F0C6C8980D697D9C2 /* Pods_Runner.framework */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - A6631C561FD82D31CBA4956D /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9A5F864F2C140D5AB62D37C2 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,37 +42,37 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 100CA33BCCF2B6607BE728DB /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 1A15B1F8A041262C230BED54 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - 1A3676A19DF22D28E9BD1FC2 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 419220FE5D8CCA17E4449148 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 5331A371F0116A607BB11374 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 657C8805F3A4B377C4283F24 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 7699A6C867B148FFFEDA7910 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; + 976B10BC2EF464F7C8064A04 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 9A5F864F2C140D5AB62D37C2 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - BFF0A9ECF48DB9005E43855A /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - D07E5EC4B7EF798A3348CFAA /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - EE6B331A67AAC0FCD2EA6C9D /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 9897A34F0C6C8980D697D9C2 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + BD5BF548F0ADA3E97A8011F7 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + C30BE79F2FFD7703DD0D6181 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + E95D62B8B1B4119738B97221 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 797442CBBB46F44138B8A62F /* Frameworks */ = { + 90A6BC6AEE9AD531F4FA0BE7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - A6631C561FD82D31CBA4956D /* Pods_RunnerTests.framework in Frameworks */, + 1F8DFF2D0B45656A1484D9E9 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -80,7 +80,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 660451A8A4F7B5016E2BE610 /* Pods_Runner.framework in Frameworks */, + 917E733C29294B465786C267 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -95,18 +95,13 @@ path = RunnerTests; sourceTree = ""; }; - 84DBD755DD72CD62634B38A6 /* Pods */ = { + 5B23575691AD09BF9C5386A9 /* Frameworks */ = { isa = PBXGroup; children = ( - EE6B331A67AAC0FCD2EA6C9D /* Pods-Runner.debug.xcconfig */, - 1A3676A19DF22D28E9BD1FC2 /* Pods-Runner.release.xcconfig */, - D07E5EC4B7EF798A3348CFAA /* Pods-Runner.profile.xcconfig */, - 419220FE5D8CCA17E4449148 /* Pods-RunnerTests.debug.xcconfig */, - BFF0A9ECF48DB9005E43855A /* Pods-RunnerTests.release.xcconfig */, - 1A15B1F8A041262C230BED54 /* Pods-RunnerTests.profile.xcconfig */, + 9897A34F0C6C8980D697D9C2 /* Pods_Runner.framework */, + 7699A6C867B148FFFEDA7910 /* Pods_RunnerTests.framework */, ); - name = Pods; - path = Pods; + name = Frameworks; sourceTree = ""; }; 9740EEB11CF90186004384FC /* Flutter */ = { @@ -127,8 +122,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - 84DBD755DD72CD62634B38A6 /* Pods */, - CB3C27D4F94DA2B14436D57E /* Frameworks */, + CD6C9B8CDB44AE5FA5357DC4 /* Pods */, + 5B23575691AD09BF9C5386A9 /* Frameworks */, ); sourceTree = ""; }; @@ -156,13 +151,18 @@ path = Runner; sourceTree = ""; }; - CB3C27D4F94DA2B14436D57E /* Frameworks */ = { + CD6C9B8CDB44AE5FA5357DC4 /* Pods */ = { isa = PBXGroup; children = ( - 5331A371F0116A607BB11374 /* Pods_Runner.framework */, - 9A5F864F2C140D5AB62D37C2 /* Pods_RunnerTests.framework */, + C30BE79F2FFD7703DD0D6181 /* Pods-Runner.debug.xcconfig */, + BD5BF548F0ADA3E97A8011F7 /* Pods-Runner.release.xcconfig */, + 100CA33BCCF2B6607BE728DB /* Pods-Runner.profile.xcconfig */, + E95D62B8B1B4119738B97221 /* Pods-RunnerTests.debug.xcconfig */, + 976B10BC2EF464F7C8064A04 /* Pods-RunnerTests.release.xcconfig */, + 657C8805F3A4B377C4283F24 /* Pods-RunnerTests.profile.xcconfig */, ); - name = Frameworks; + name = Pods; + path = Pods; sourceTree = ""; }; /* End PBXGroup section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 2062CF2AA90746DBEBF6222E /* [CP] Check Pods Manifest.lock */, + 57996670C67F3C2A07C0AD53 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 797442CBBB46F44138B8A62F /* Frameworks */, + 90A6BC6AEE9AD531F4FA0BE7 /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 8A9478015A4593F36E3CD603 /* [CP] Check Pods Manifest.lock */, + EF4807D8ED6B42F4EFFF1F5F /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 7A80B7559B6CC8A2CE24A777 /* [CP] Embed Pods Frameworks */, + A44629AD5B7014368847AC88 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -270,7 +270,23 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 2062CF2AA90746DBEBF6222E /* [CP] Check Pods Manifest.lock */ = { + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", + ); + name = "Thin Binary"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + }; + 57996670C67F3C2A07C0AD53 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -292,23 +308,22 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputPaths = ( - "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); - name = "Thin Binary"; + name = "Run Script"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - 7A80B7559B6CC8A2CE24A777 /* [CP] Embed Pods Frameworks */ = { + A44629AD5B7014368847AC88 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -325,7 +340,7 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - 8A9478015A4593F36E3CD603 /* [CP] Check Pods Manifest.lock */ = { + EF4807D8ED6B42F4EFFF1F5F /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -347,21 +362,6 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { - isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "Run Script"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; - }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 419220FE5D8CCA17E4449148 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = E95D62B8B1B4119738B97221 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = BFF0A9ECF48DB9005E43855A /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 976B10BC2EF464F7C8064A04 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 1A15B1F8A041262C230BED54 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 657C8805F3A4B377C4283F24 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/audio_soloud/step_03/macos/Podfile b/audio_soloud/step_03/macos/Podfile index b52666a103..ff5ddb3b8b 100644 --- a/audio_soloud/step_03/macos/Podfile +++ b/audio_soloud/step_03/macos/Podfile @@ -28,7 +28,6 @@ flutter_macos_podfile_setup target 'Runner' do use_frameworks! - use_modular_headers! flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__)) target 'RunnerTests' do diff --git a/audio_soloud/step_03/macos/Runner.xcodeproj/project.pbxproj b/audio_soloud/step_03/macos/Runner.xcodeproj/project.pbxproj index b7362422cc..d52047b92f 100644 --- a/audio_soloud/step_03/macos/Runner.xcodeproj/project.pbxproj +++ b/audio_soloud/step_03/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ - 0D73403B8E98B133AA7CE204 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A47A3F9816C6B404C923F26A /* Pods_RunnerTests.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 64997B24FD16265E26078B31 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E9FF240A7207DE9140CCA6E3 /* Pods_Runner.framework */; }; + 5AD08C26497CC3DA72A60A7B /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B24FD02DE548531E8EB4E4C0 /* Pods_RunnerTests.framework */; }; + C689FF15D65EF8F953F5CF07 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7306EBA146478647D696BEA7 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,7 +62,9 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 2EFEC354148C8AED5D35BDE0 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 02074F761FF084D538C7DA64 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 09005269D751B53A0B905BA3 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 19F716A081271519061BEE50 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -79,15 +81,13 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 5BB8546BA2CD9C2B62569053 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - 6A8117CC8A0D7F170A118ACB /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 72A486F3FD5DA9FCD6EF83EF /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 7306EBA146478647D696BEA7 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 920D8C3ABC08DF577D3461CF /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - 95615250CC33E1E207BF1C7A /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 87DA2706F11528DE51918120 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - A47A3F9816C6B404C923F26A /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - E074DB6C779DC9B0BAB22369 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - E9FF240A7207DE9140CCA6E3 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + A0A96BE6DFA15981D1ABC0CD /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + B24FD02DE548531E8EB4E4C0 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 0D73403B8E98B133AA7CE204 /* Pods_RunnerTests.framework in Frameworks */, + 5AD08C26497CC3DA72A60A7B /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,7 +103,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 64997B24FD16265E26078B31 /* Pods_Runner.framework in Frameworks */, + C689FF15D65EF8F953F5CF07 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -137,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - C7208C9BEB8A8FE581EACF67 /* Pods */, + 5CF1E134C0075671A25E3CF8 /* Pods */, ); sourceTree = ""; }; @@ -185,15 +185,15 @@ path = Runner; sourceTree = ""; }; - C7208C9BEB8A8FE581EACF67 /* Pods */ = { + 5CF1E134C0075671A25E3CF8 /* Pods */ = { isa = PBXGroup; children = ( - 2EFEC354148C8AED5D35BDE0 /* Pods-Runner.debug.xcconfig */, - 6A8117CC8A0D7F170A118ACB /* Pods-Runner.release.xcconfig */, - 5BB8546BA2CD9C2B62569053 /* Pods-Runner.profile.xcconfig */, - 95615250CC33E1E207BF1C7A /* Pods-RunnerTests.debug.xcconfig */, - 920D8C3ABC08DF577D3461CF /* Pods-RunnerTests.release.xcconfig */, - E074DB6C779DC9B0BAB22369 /* Pods-RunnerTests.profile.xcconfig */, + 09005269D751B53A0B905BA3 /* Pods-Runner.debug.xcconfig */, + 87DA2706F11528DE51918120 /* Pods-Runner.release.xcconfig */, + 02074F761FF084D538C7DA64 /* Pods-Runner.profile.xcconfig */, + A0A96BE6DFA15981D1ABC0CD /* Pods-RunnerTests.debug.xcconfig */, + 19F716A081271519061BEE50 /* Pods-RunnerTests.release.xcconfig */, + 72A486F3FD5DA9FCD6EF83EF /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -202,8 +202,8 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - E9FF240A7207DE9140CCA6E3 /* Pods_Runner.framework */, - A47A3F9816C6B404C923F26A /* Pods_RunnerTests.framework */, + 7306EBA146478647D696BEA7 /* Pods_Runner.framework */, + B24FD02DE548531E8EB4E4C0 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 17F5D3067CAF6C4336E34B3C /* [CP] Check Pods Manifest.lock */, + 8046F9597FECD4D2AFE19826 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 58A93043BC52AB230C967806 /* [CP] Check Pods Manifest.lock */, + 00F50DC465F412B5DF36E306 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 38850385B5B0D324974EA1CE /* [CP] Embed Pods Frameworks */, + BFB61F33D6C07588E176985E /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,7 +323,7 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 17F5D3067CAF6C4336E34B3C /* [CP] Check Pods Manifest.lock */ = { + 00F50DC465F412B5DF36E306 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -338,7 +338,7 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -383,43 +383,43 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 38850385B5B0D324974EA1CE /* [CP] Embed Pods Frameworks */ = { + 8046F9597FECD4D2AFE19826 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 58A93043BC52AB230C967806 /* [CP] Check Pods Manifest.lock */ = { + BFB61F33D6C07588E176985E /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 95615250CC33E1E207BF1C7A /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = A0A96BE6DFA15981D1ABC0CD /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 920D8C3ABC08DF577D3461CF /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 19F716A081271519061BEE50 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = E074DB6C779DC9B0BAB22369 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 72A486F3FD5DA9FCD6EF83EF /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/audio_soloud/step_04b/android/app/build.gradle b/audio_soloud/step_04a/android/app/build.gradle.kts similarity index 84% rename from audio_soloud/step_04b/android/app/build.gradle rename to audio_soloud/step_04a/android/app/build.gradle.kts index 2c07f0d32f..189d47a473 100644 --- a/audio_soloud/step_04b/android/app/build.gradle +++ b/audio_soloud/step_04a/android/app/build.gradle.kts @@ -1,8 +1,8 @@ plugins { - id "com.android.application" - id "kotlin-android" + id("com.android.application") + id("kotlin-android") // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. - id "dev.flutter.flutter-gradle-plugin" + id("dev.flutter.flutter-gradle-plugin") } android { @@ -16,7 +16,7 @@ android { } kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8 + jvmTarget = JavaVersion.VERSION_1_8.toString() } defaultConfig { @@ -34,7 +34,7 @@ android { release { // TODO: Add your own signing config for the release build. // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig = signingConfigs.debug + signingConfig = signingConfigs.getByName("debug") } } } diff --git a/audio_soloud/step_04a/android/build.gradle b/audio_soloud/step_04a/android/build.gradle deleted file mode 100644 index d2ffbffa4c..0000000000 --- a/audio_soloud/step_04a/android/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = "../build" -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(":app") -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/audio_soloud/step_04a/android/build.gradle.kts b/audio_soloud/step_04a/android/build.gradle.kts new file mode 100644 index 0000000000..89176ef44e --- /dev/null +++ b/audio_soloud/step_04a/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/audio_soloud/step_04a/android/gradle.properties b/audio_soloud/step_04a/android/gradle.properties index 2597170821..f018a61817 100644 --- a/audio_soloud/step_04a/android/gradle.properties +++ b/audio_soloud/step_04a/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/audio_soloud/step_04a/android/gradle/wrapper/gradle-wrapper.properties b/audio_soloud/step_04a/android/gradle/wrapper/gradle-wrapper.properties index 7bb2df6ba6..afa1e8eb0a 100644 --- a/audio_soloud/step_04a/android/gradle/wrapper/gradle-wrapper.properties +++ b/audio_soloud/step_04a/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip diff --git a/audio_soloud/step_04a/android/settings.gradle b/audio_soloud/step_04a/android/settings.gradle deleted file mode 100644 index b9e43bd376..0000000000 --- a/audio_soloud/step_04a/android/settings.gradle +++ /dev/null @@ -1,25 +0,0 @@ -pluginManagement { - def flutterSdkPath = { - def properties = new Properties() - file("local.properties").withInputStream { properties.load(it) } - def flutterSdkPath = properties.getProperty("flutter.sdk") - assert flutterSdkPath != null, "flutter.sdk not set in local.properties" - return flutterSdkPath - }() - - includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") - - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} - -plugins { - id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.1.0" apply false - id "org.jetbrains.kotlin.android" version "1.8.22" apply false -} - -include ":app" diff --git a/audio_soloud/step_04a/android/settings.gradle.kts b/audio_soloud/step_04a/android/settings.gradle.kts new file mode 100644 index 0000000000..a439442c20 --- /dev/null +++ b/audio_soloud/step_04a/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.0" apply false + id("org.jetbrains.kotlin.android") version "1.8.22" apply false +} + +include(":app") diff --git a/audio_soloud/step_04a/ios/Podfile b/audio_soloud/step_04a/ios/Podfile index a836c8c671..11e1cb83ed 100644 --- a/audio_soloud/step_04a/ios/Podfile +++ b/audio_soloud/step_04a/ios/Podfile @@ -29,7 +29,6 @@ flutter_ios_podfile_setup target 'Runner' do use_frameworks! - use_modular_headers! flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) target 'RunnerTests' do diff --git a/audio_soloud/step_04a/ios/Runner.xcodeproj/project.pbxproj b/audio_soloud/step_04a/ios/Runner.xcodeproj/project.pbxproj index 1b9ce23f29..f95cd4ddc5 100644 --- a/audio_soloud/step_04a/ios/Runner.xcodeproj/project.pbxproj +++ b/audio_soloud/step_04a/ios/Runner.xcodeproj/project.pbxproj @@ -8,14 +8,14 @@ /* Begin PBXBuildFile section */ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; + 1F8DFF2D0B45656A1484D9E9 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7699A6C867B148FFFEDA7910 /* Pods_RunnerTests.framework */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; - 660451A8A4F7B5016E2BE610 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5331A371F0116A607BB11374 /* Pods_Runner.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; + 917E733C29294B465786C267 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9897A34F0C6C8980D697D9C2 /* Pods_Runner.framework */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - A6631C561FD82D31CBA4956D /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9A5F864F2C140D5AB62D37C2 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,37 +42,37 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 100CA33BCCF2B6607BE728DB /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 1A15B1F8A041262C230BED54 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - 1A3676A19DF22D28E9BD1FC2 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 419220FE5D8CCA17E4449148 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 5331A371F0116A607BB11374 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 657C8805F3A4B377C4283F24 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 7699A6C867B148FFFEDA7910 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; + 976B10BC2EF464F7C8064A04 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 9A5F864F2C140D5AB62D37C2 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - BFF0A9ECF48DB9005E43855A /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - D07E5EC4B7EF798A3348CFAA /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - EE6B331A67AAC0FCD2EA6C9D /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 9897A34F0C6C8980D697D9C2 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + BD5BF548F0ADA3E97A8011F7 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + C30BE79F2FFD7703DD0D6181 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + E95D62B8B1B4119738B97221 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 797442CBBB46F44138B8A62F /* Frameworks */ = { + 90A6BC6AEE9AD531F4FA0BE7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - A6631C561FD82D31CBA4956D /* Pods_RunnerTests.framework in Frameworks */, + 1F8DFF2D0B45656A1484D9E9 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -80,7 +80,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 660451A8A4F7B5016E2BE610 /* Pods_Runner.framework in Frameworks */, + 917E733C29294B465786C267 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -95,18 +95,13 @@ path = RunnerTests; sourceTree = ""; }; - 84DBD755DD72CD62634B38A6 /* Pods */ = { + 5B23575691AD09BF9C5386A9 /* Frameworks */ = { isa = PBXGroup; children = ( - EE6B331A67AAC0FCD2EA6C9D /* Pods-Runner.debug.xcconfig */, - 1A3676A19DF22D28E9BD1FC2 /* Pods-Runner.release.xcconfig */, - D07E5EC4B7EF798A3348CFAA /* Pods-Runner.profile.xcconfig */, - 419220FE5D8CCA17E4449148 /* Pods-RunnerTests.debug.xcconfig */, - BFF0A9ECF48DB9005E43855A /* Pods-RunnerTests.release.xcconfig */, - 1A15B1F8A041262C230BED54 /* Pods-RunnerTests.profile.xcconfig */, + 9897A34F0C6C8980D697D9C2 /* Pods_Runner.framework */, + 7699A6C867B148FFFEDA7910 /* Pods_RunnerTests.framework */, ); - name = Pods; - path = Pods; + name = Frameworks; sourceTree = ""; }; 9740EEB11CF90186004384FC /* Flutter */ = { @@ -127,8 +122,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - 84DBD755DD72CD62634B38A6 /* Pods */, - CB3C27D4F94DA2B14436D57E /* Frameworks */, + CD6C9B8CDB44AE5FA5357DC4 /* Pods */, + 5B23575691AD09BF9C5386A9 /* Frameworks */, ); sourceTree = ""; }; @@ -156,13 +151,18 @@ path = Runner; sourceTree = ""; }; - CB3C27D4F94DA2B14436D57E /* Frameworks */ = { + CD6C9B8CDB44AE5FA5357DC4 /* Pods */ = { isa = PBXGroup; children = ( - 5331A371F0116A607BB11374 /* Pods_Runner.framework */, - 9A5F864F2C140D5AB62D37C2 /* Pods_RunnerTests.framework */, + C30BE79F2FFD7703DD0D6181 /* Pods-Runner.debug.xcconfig */, + BD5BF548F0ADA3E97A8011F7 /* Pods-Runner.release.xcconfig */, + 100CA33BCCF2B6607BE728DB /* Pods-Runner.profile.xcconfig */, + E95D62B8B1B4119738B97221 /* Pods-RunnerTests.debug.xcconfig */, + 976B10BC2EF464F7C8064A04 /* Pods-RunnerTests.release.xcconfig */, + 657C8805F3A4B377C4283F24 /* Pods-RunnerTests.profile.xcconfig */, ); - name = Frameworks; + name = Pods; + path = Pods; sourceTree = ""; }; /* End PBXGroup section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 2062CF2AA90746DBEBF6222E /* [CP] Check Pods Manifest.lock */, + 57996670C67F3C2A07C0AD53 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 797442CBBB46F44138B8A62F /* Frameworks */, + 90A6BC6AEE9AD531F4FA0BE7 /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 8A9478015A4593F36E3CD603 /* [CP] Check Pods Manifest.lock */, + EF4807D8ED6B42F4EFFF1F5F /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 7A80B7559B6CC8A2CE24A777 /* [CP] Embed Pods Frameworks */, + A44629AD5B7014368847AC88 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -270,7 +270,23 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 2062CF2AA90746DBEBF6222E /* [CP] Check Pods Manifest.lock */ = { + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", + ); + name = "Thin Binary"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + }; + 57996670C67F3C2A07C0AD53 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -292,23 +308,22 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputPaths = ( - "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); - name = "Thin Binary"; + name = "Run Script"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - 7A80B7559B6CC8A2CE24A777 /* [CP] Embed Pods Frameworks */ = { + A44629AD5B7014368847AC88 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -325,7 +340,7 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - 8A9478015A4593F36E3CD603 /* [CP] Check Pods Manifest.lock */ = { + EF4807D8ED6B42F4EFFF1F5F /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -347,21 +362,6 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { - isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "Run Script"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; - }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 419220FE5D8CCA17E4449148 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = E95D62B8B1B4119738B97221 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = BFF0A9ECF48DB9005E43855A /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 976B10BC2EF464F7C8064A04 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 1A15B1F8A041262C230BED54 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 657C8805F3A4B377C4283F24 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/audio_soloud/step_04a/macos/Podfile b/audio_soloud/step_04a/macos/Podfile index b52666a103..ff5ddb3b8b 100644 --- a/audio_soloud/step_04a/macos/Podfile +++ b/audio_soloud/step_04a/macos/Podfile @@ -28,7 +28,6 @@ flutter_macos_podfile_setup target 'Runner' do use_frameworks! - use_modular_headers! flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__)) target 'RunnerTests' do diff --git a/audio_soloud/step_04a/macos/Runner.xcodeproj/project.pbxproj b/audio_soloud/step_04a/macos/Runner.xcodeproj/project.pbxproj index b7362422cc..d52047b92f 100644 --- a/audio_soloud/step_04a/macos/Runner.xcodeproj/project.pbxproj +++ b/audio_soloud/step_04a/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ - 0D73403B8E98B133AA7CE204 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A47A3F9816C6B404C923F26A /* Pods_RunnerTests.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 64997B24FD16265E26078B31 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E9FF240A7207DE9140CCA6E3 /* Pods_Runner.framework */; }; + 5AD08C26497CC3DA72A60A7B /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B24FD02DE548531E8EB4E4C0 /* Pods_RunnerTests.framework */; }; + C689FF15D65EF8F953F5CF07 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7306EBA146478647D696BEA7 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,7 +62,9 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 2EFEC354148C8AED5D35BDE0 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 02074F761FF084D538C7DA64 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 09005269D751B53A0B905BA3 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 19F716A081271519061BEE50 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -79,15 +81,13 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 5BB8546BA2CD9C2B62569053 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - 6A8117CC8A0D7F170A118ACB /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 72A486F3FD5DA9FCD6EF83EF /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 7306EBA146478647D696BEA7 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 920D8C3ABC08DF577D3461CF /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - 95615250CC33E1E207BF1C7A /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 87DA2706F11528DE51918120 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - A47A3F9816C6B404C923F26A /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - E074DB6C779DC9B0BAB22369 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - E9FF240A7207DE9140CCA6E3 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + A0A96BE6DFA15981D1ABC0CD /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + B24FD02DE548531E8EB4E4C0 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 0D73403B8E98B133AA7CE204 /* Pods_RunnerTests.framework in Frameworks */, + 5AD08C26497CC3DA72A60A7B /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,7 +103,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 64997B24FD16265E26078B31 /* Pods_Runner.framework in Frameworks */, + C689FF15D65EF8F953F5CF07 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -137,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - C7208C9BEB8A8FE581EACF67 /* Pods */, + 5CF1E134C0075671A25E3CF8 /* Pods */, ); sourceTree = ""; }; @@ -185,15 +185,15 @@ path = Runner; sourceTree = ""; }; - C7208C9BEB8A8FE581EACF67 /* Pods */ = { + 5CF1E134C0075671A25E3CF8 /* Pods */ = { isa = PBXGroup; children = ( - 2EFEC354148C8AED5D35BDE0 /* Pods-Runner.debug.xcconfig */, - 6A8117CC8A0D7F170A118ACB /* Pods-Runner.release.xcconfig */, - 5BB8546BA2CD9C2B62569053 /* Pods-Runner.profile.xcconfig */, - 95615250CC33E1E207BF1C7A /* Pods-RunnerTests.debug.xcconfig */, - 920D8C3ABC08DF577D3461CF /* Pods-RunnerTests.release.xcconfig */, - E074DB6C779DC9B0BAB22369 /* Pods-RunnerTests.profile.xcconfig */, + 09005269D751B53A0B905BA3 /* Pods-Runner.debug.xcconfig */, + 87DA2706F11528DE51918120 /* Pods-Runner.release.xcconfig */, + 02074F761FF084D538C7DA64 /* Pods-Runner.profile.xcconfig */, + A0A96BE6DFA15981D1ABC0CD /* Pods-RunnerTests.debug.xcconfig */, + 19F716A081271519061BEE50 /* Pods-RunnerTests.release.xcconfig */, + 72A486F3FD5DA9FCD6EF83EF /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -202,8 +202,8 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - E9FF240A7207DE9140CCA6E3 /* Pods_Runner.framework */, - A47A3F9816C6B404C923F26A /* Pods_RunnerTests.framework */, + 7306EBA146478647D696BEA7 /* Pods_Runner.framework */, + B24FD02DE548531E8EB4E4C0 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 17F5D3067CAF6C4336E34B3C /* [CP] Check Pods Manifest.lock */, + 8046F9597FECD4D2AFE19826 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 58A93043BC52AB230C967806 /* [CP] Check Pods Manifest.lock */, + 00F50DC465F412B5DF36E306 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 38850385B5B0D324974EA1CE /* [CP] Embed Pods Frameworks */, + BFB61F33D6C07588E176985E /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,7 +323,7 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 17F5D3067CAF6C4336E34B3C /* [CP] Check Pods Manifest.lock */ = { + 00F50DC465F412B5DF36E306 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -338,7 +338,7 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -383,43 +383,43 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 38850385B5B0D324974EA1CE /* [CP] Embed Pods Frameworks */ = { + 8046F9597FECD4D2AFE19826 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 58A93043BC52AB230C967806 /* [CP] Check Pods Manifest.lock */ = { + BFB61F33D6C07588E176985E /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 95615250CC33E1E207BF1C7A /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = A0A96BE6DFA15981D1ABC0CD /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 920D8C3ABC08DF577D3461CF /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 19F716A081271519061BEE50 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = E074DB6C779DC9B0BAB22369 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 72A486F3FD5DA9FCD6EF83EF /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/audio_soloud/step_03/android/app/build.gradle b/audio_soloud/step_04b/android/app/build.gradle.kts similarity index 84% rename from audio_soloud/step_03/android/app/build.gradle rename to audio_soloud/step_04b/android/app/build.gradle.kts index 2c07f0d32f..189d47a473 100644 --- a/audio_soloud/step_03/android/app/build.gradle +++ b/audio_soloud/step_04b/android/app/build.gradle.kts @@ -1,8 +1,8 @@ plugins { - id "com.android.application" - id "kotlin-android" + id("com.android.application") + id("kotlin-android") // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. - id "dev.flutter.flutter-gradle-plugin" + id("dev.flutter.flutter-gradle-plugin") } android { @@ -16,7 +16,7 @@ android { } kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8 + jvmTarget = JavaVersion.VERSION_1_8.toString() } defaultConfig { @@ -34,7 +34,7 @@ android { release { // TODO: Add your own signing config for the release build. // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig = signingConfigs.debug + signingConfig = signingConfigs.getByName("debug") } } } diff --git a/audio_soloud/step_04b/android/build.gradle b/audio_soloud/step_04b/android/build.gradle deleted file mode 100644 index d2ffbffa4c..0000000000 --- a/audio_soloud/step_04b/android/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = "../build" -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(":app") -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/audio_soloud/step_04b/android/build.gradle.kts b/audio_soloud/step_04b/android/build.gradle.kts new file mode 100644 index 0000000000..89176ef44e --- /dev/null +++ b/audio_soloud/step_04b/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/audio_soloud/step_04b/android/gradle.properties b/audio_soloud/step_04b/android/gradle.properties index 2597170821..f018a61817 100644 --- a/audio_soloud/step_04b/android/gradle.properties +++ b/audio_soloud/step_04b/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/audio_soloud/step_04b/android/gradle/wrapper/gradle-wrapper.properties b/audio_soloud/step_04b/android/gradle/wrapper/gradle-wrapper.properties index 7bb2df6ba6..afa1e8eb0a 100644 --- a/audio_soloud/step_04b/android/gradle/wrapper/gradle-wrapper.properties +++ b/audio_soloud/step_04b/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip diff --git a/audio_soloud/step_04b/android/settings.gradle b/audio_soloud/step_04b/android/settings.gradle deleted file mode 100644 index b9e43bd376..0000000000 --- a/audio_soloud/step_04b/android/settings.gradle +++ /dev/null @@ -1,25 +0,0 @@ -pluginManagement { - def flutterSdkPath = { - def properties = new Properties() - file("local.properties").withInputStream { properties.load(it) } - def flutterSdkPath = properties.getProperty("flutter.sdk") - assert flutterSdkPath != null, "flutter.sdk not set in local.properties" - return flutterSdkPath - }() - - includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") - - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} - -plugins { - id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.1.0" apply false - id "org.jetbrains.kotlin.android" version "1.8.22" apply false -} - -include ":app" diff --git a/audio_soloud/step_04b/android/settings.gradle.kts b/audio_soloud/step_04b/android/settings.gradle.kts new file mode 100644 index 0000000000..a439442c20 --- /dev/null +++ b/audio_soloud/step_04b/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.0" apply false + id("org.jetbrains.kotlin.android") version "1.8.22" apply false +} + +include(":app") diff --git a/audio_soloud/step_04b/ios/Podfile b/audio_soloud/step_04b/ios/Podfile index a836c8c671..11e1cb83ed 100644 --- a/audio_soloud/step_04b/ios/Podfile +++ b/audio_soloud/step_04b/ios/Podfile @@ -29,7 +29,6 @@ flutter_ios_podfile_setup target 'Runner' do use_frameworks! - use_modular_headers! flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) target 'RunnerTests' do diff --git a/audio_soloud/step_04b/ios/Runner.xcodeproj/project.pbxproj b/audio_soloud/step_04b/ios/Runner.xcodeproj/project.pbxproj index 1b9ce23f29..f95cd4ddc5 100644 --- a/audio_soloud/step_04b/ios/Runner.xcodeproj/project.pbxproj +++ b/audio_soloud/step_04b/ios/Runner.xcodeproj/project.pbxproj @@ -8,14 +8,14 @@ /* Begin PBXBuildFile section */ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; + 1F8DFF2D0B45656A1484D9E9 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7699A6C867B148FFFEDA7910 /* Pods_RunnerTests.framework */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; - 660451A8A4F7B5016E2BE610 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5331A371F0116A607BB11374 /* Pods_Runner.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; + 917E733C29294B465786C267 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9897A34F0C6C8980D697D9C2 /* Pods_Runner.framework */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - A6631C561FD82D31CBA4956D /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9A5F864F2C140D5AB62D37C2 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,37 +42,37 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 100CA33BCCF2B6607BE728DB /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 1A15B1F8A041262C230BED54 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - 1A3676A19DF22D28E9BD1FC2 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 419220FE5D8CCA17E4449148 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 5331A371F0116A607BB11374 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 657C8805F3A4B377C4283F24 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 7699A6C867B148FFFEDA7910 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; + 976B10BC2EF464F7C8064A04 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 9A5F864F2C140D5AB62D37C2 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - BFF0A9ECF48DB9005E43855A /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - D07E5EC4B7EF798A3348CFAA /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - EE6B331A67AAC0FCD2EA6C9D /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 9897A34F0C6C8980D697D9C2 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + BD5BF548F0ADA3E97A8011F7 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + C30BE79F2FFD7703DD0D6181 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + E95D62B8B1B4119738B97221 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 797442CBBB46F44138B8A62F /* Frameworks */ = { + 90A6BC6AEE9AD531F4FA0BE7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - A6631C561FD82D31CBA4956D /* Pods_RunnerTests.framework in Frameworks */, + 1F8DFF2D0B45656A1484D9E9 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -80,7 +80,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 660451A8A4F7B5016E2BE610 /* Pods_Runner.framework in Frameworks */, + 917E733C29294B465786C267 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -95,18 +95,13 @@ path = RunnerTests; sourceTree = ""; }; - 84DBD755DD72CD62634B38A6 /* Pods */ = { + 5B23575691AD09BF9C5386A9 /* Frameworks */ = { isa = PBXGroup; children = ( - EE6B331A67AAC0FCD2EA6C9D /* Pods-Runner.debug.xcconfig */, - 1A3676A19DF22D28E9BD1FC2 /* Pods-Runner.release.xcconfig */, - D07E5EC4B7EF798A3348CFAA /* Pods-Runner.profile.xcconfig */, - 419220FE5D8CCA17E4449148 /* Pods-RunnerTests.debug.xcconfig */, - BFF0A9ECF48DB9005E43855A /* Pods-RunnerTests.release.xcconfig */, - 1A15B1F8A041262C230BED54 /* Pods-RunnerTests.profile.xcconfig */, + 9897A34F0C6C8980D697D9C2 /* Pods_Runner.framework */, + 7699A6C867B148FFFEDA7910 /* Pods_RunnerTests.framework */, ); - name = Pods; - path = Pods; + name = Frameworks; sourceTree = ""; }; 9740EEB11CF90186004384FC /* Flutter */ = { @@ -127,8 +122,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - 84DBD755DD72CD62634B38A6 /* Pods */, - CB3C27D4F94DA2B14436D57E /* Frameworks */, + CD6C9B8CDB44AE5FA5357DC4 /* Pods */, + 5B23575691AD09BF9C5386A9 /* Frameworks */, ); sourceTree = ""; }; @@ -156,13 +151,18 @@ path = Runner; sourceTree = ""; }; - CB3C27D4F94DA2B14436D57E /* Frameworks */ = { + CD6C9B8CDB44AE5FA5357DC4 /* Pods */ = { isa = PBXGroup; children = ( - 5331A371F0116A607BB11374 /* Pods_Runner.framework */, - 9A5F864F2C140D5AB62D37C2 /* Pods_RunnerTests.framework */, + C30BE79F2FFD7703DD0D6181 /* Pods-Runner.debug.xcconfig */, + BD5BF548F0ADA3E97A8011F7 /* Pods-Runner.release.xcconfig */, + 100CA33BCCF2B6607BE728DB /* Pods-Runner.profile.xcconfig */, + E95D62B8B1B4119738B97221 /* Pods-RunnerTests.debug.xcconfig */, + 976B10BC2EF464F7C8064A04 /* Pods-RunnerTests.release.xcconfig */, + 657C8805F3A4B377C4283F24 /* Pods-RunnerTests.profile.xcconfig */, ); - name = Frameworks; + name = Pods; + path = Pods; sourceTree = ""; }; /* End PBXGroup section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 2062CF2AA90746DBEBF6222E /* [CP] Check Pods Manifest.lock */, + 57996670C67F3C2A07C0AD53 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 797442CBBB46F44138B8A62F /* Frameworks */, + 90A6BC6AEE9AD531F4FA0BE7 /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 8A9478015A4593F36E3CD603 /* [CP] Check Pods Manifest.lock */, + EF4807D8ED6B42F4EFFF1F5F /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 7A80B7559B6CC8A2CE24A777 /* [CP] Embed Pods Frameworks */, + A44629AD5B7014368847AC88 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -270,7 +270,23 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 2062CF2AA90746DBEBF6222E /* [CP] Check Pods Manifest.lock */ = { + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", + ); + name = "Thin Binary"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + }; + 57996670C67F3C2A07C0AD53 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -292,23 +308,22 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputPaths = ( - "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); - name = "Thin Binary"; + name = "Run Script"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - 7A80B7559B6CC8A2CE24A777 /* [CP] Embed Pods Frameworks */ = { + A44629AD5B7014368847AC88 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -325,7 +340,7 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - 8A9478015A4593F36E3CD603 /* [CP] Check Pods Manifest.lock */ = { + EF4807D8ED6B42F4EFFF1F5F /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -347,21 +362,6 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { - isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "Run Script"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; - }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 419220FE5D8CCA17E4449148 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = E95D62B8B1B4119738B97221 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = BFF0A9ECF48DB9005E43855A /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 976B10BC2EF464F7C8064A04 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 1A15B1F8A041262C230BED54 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 657C8805F3A4B377C4283F24 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/audio_soloud/step_04b/macos/Podfile b/audio_soloud/step_04b/macos/Podfile index b52666a103..ff5ddb3b8b 100644 --- a/audio_soloud/step_04b/macos/Podfile +++ b/audio_soloud/step_04b/macos/Podfile @@ -28,7 +28,6 @@ flutter_macos_podfile_setup target 'Runner' do use_frameworks! - use_modular_headers! flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__)) target 'RunnerTests' do diff --git a/audio_soloud/step_04b/macos/Runner.xcodeproj/project.pbxproj b/audio_soloud/step_04b/macos/Runner.xcodeproj/project.pbxproj index b7362422cc..d52047b92f 100644 --- a/audio_soloud/step_04b/macos/Runner.xcodeproj/project.pbxproj +++ b/audio_soloud/step_04b/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ - 0D73403B8E98B133AA7CE204 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A47A3F9816C6B404C923F26A /* Pods_RunnerTests.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 64997B24FD16265E26078B31 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E9FF240A7207DE9140CCA6E3 /* Pods_Runner.framework */; }; + 5AD08C26497CC3DA72A60A7B /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B24FD02DE548531E8EB4E4C0 /* Pods_RunnerTests.framework */; }; + C689FF15D65EF8F953F5CF07 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7306EBA146478647D696BEA7 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,7 +62,9 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 2EFEC354148C8AED5D35BDE0 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 02074F761FF084D538C7DA64 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 09005269D751B53A0B905BA3 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 19F716A081271519061BEE50 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -79,15 +81,13 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 5BB8546BA2CD9C2B62569053 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - 6A8117CC8A0D7F170A118ACB /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 72A486F3FD5DA9FCD6EF83EF /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 7306EBA146478647D696BEA7 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 920D8C3ABC08DF577D3461CF /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - 95615250CC33E1E207BF1C7A /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 87DA2706F11528DE51918120 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - A47A3F9816C6B404C923F26A /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - E074DB6C779DC9B0BAB22369 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - E9FF240A7207DE9140CCA6E3 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + A0A96BE6DFA15981D1ABC0CD /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + B24FD02DE548531E8EB4E4C0 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 0D73403B8E98B133AA7CE204 /* Pods_RunnerTests.framework in Frameworks */, + 5AD08C26497CC3DA72A60A7B /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,7 +103,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 64997B24FD16265E26078B31 /* Pods_Runner.framework in Frameworks */, + C689FF15D65EF8F953F5CF07 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -137,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - C7208C9BEB8A8FE581EACF67 /* Pods */, + 5CF1E134C0075671A25E3CF8 /* Pods */, ); sourceTree = ""; }; @@ -185,15 +185,15 @@ path = Runner; sourceTree = ""; }; - C7208C9BEB8A8FE581EACF67 /* Pods */ = { + 5CF1E134C0075671A25E3CF8 /* Pods */ = { isa = PBXGroup; children = ( - 2EFEC354148C8AED5D35BDE0 /* Pods-Runner.debug.xcconfig */, - 6A8117CC8A0D7F170A118ACB /* Pods-Runner.release.xcconfig */, - 5BB8546BA2CD9C2B62569053 /* Pods-Runner.profile.xcconfig */, - 95615250CC33E1E207BF1C7A /* Pods-RunnerTests.debug.xcconfig */, - 920D8C3ABC08DF577D3461CF /* Pods-RunnerTests.release.xcconfig */, - E074DB6C779DC9B0BAB22369 /* Pods-RunnerTests.profile.xcconfig */, + 09005269D751B53A0B905BA3 /* Pods-Runner.debug.xcconfig */, + 87DA2706F11528DE51918120 /* Pods-Runner.release.xcconfig */, + 02074F761FF084D538C7DA64 /* Pods-Runner.profile.xcconfig */, + A0A96BE6DFA15981D1ABC0CD /* Pods-RunnerTests.debug.xcconfig */, + 19F716A081271519061BEE50 /* Pods-RunnerTests.release.xcconfig */, + 72A486F3FD5DA9FCD6EF83EF /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -202,8 +202,8 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - E9FF240A7207DE9140CCA6E3 /* Pods_Runner.framework */, - A47A3F9816C6B404C923F26A /* Pods_RunnerTests.framework */, + 7306EBA146478647D696BEA7 /* Pods_Runner.framework */, + B24FD02DE548531E8EB4E4C0 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 17F5D3067CAF6C4336E34B3C /* [CP] Check Pods Manifest.lock */, + 8046F9597FECD4D2AFE19826 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 58A93043BC52AB230C967806 /* [CP] Check Pods Manifest.lock */, + 00F50DC465F412B5DF36E306 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 38850385B5B0D324974EA1CE /* [CP] Embed Pods Frameworks */, + BFB61F33D6C07588E176985E /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,7 +323,7 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 17F5D3067CAF6C4336E34B3C /* [CP] Check Pods Manifest.lock */ = { + 00F50DC465F412B5DF36E306 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -338,7 +338,7 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -383,43 +383,43 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 38850385B5B0D324974EA1CE /* [CP] Embed Pods Frameworks */ = { + 8046F9597FECD4D2AFE19826 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 58A93043BC52AB230C967806 /* [CP] Check Pods Manifest.lock */ = { + BFB61F33D6C07588E176985E /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 95615250CC33E1E207BF1C7A /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = A0A96BE6DFA15981D1ABC0CD /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 920D8C3ABC08DF577D3461CF /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 19F716A081271519061BEE50 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = E074DB6C779DC9B0BAB22369 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 72A486F3FD5DA9FCD6EF83EF /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/audio_soloud/step_05/android/app/build.gradle b/audio_soloud/step_05/android/app/build.gradle deleted file mode 100644 index 2c07f0d32f..0000000000 --- a/audio_soloud/step_05/android/app/build.gradle +++ /dev/null @@ -1,44 +0,0 @@ -plugins { - id "com.android.application" - id "kotlin-android" - // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. - id "dev.flutter.flutter-gradle-plugin" -} - -android { - namespace = "com.example.audio_soloud" - compileSdk = flutter.compileSdkVersion - ndkVersion = flutter.ndkVersion - - compileOptions { - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 - } - - kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8 - } - - defaultConfig { - // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). - applicationId = "com.example.audio_soloud" - // You can update the following values to match your application needs. - // For more information, see: https://flutter.dev/to/review-gradle-config. - minSdk = flutter.minSdkVersion - targetSdk = flutter.targetSdkVersion - versionCode = flutter.versionCode - versionName = flutter.versionName - } - - buildTypes { - release { - // TODO: Add your own signing config for the release build. - // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig = signingConfigs.debug - } - } -} - -flutter { - source = "../.." -} diff --git a/audio_soloud/step_05/android/app/build.gradle.kts b/audio_soloud/step_05/android/app/build.gradle.kts new file mode 100644 index 0000000000..189d47a473 --- /dev/null +++ b/audio_soloud/step_05/android/app/build.gradle.kts @@ -0,0 +1,44 @@ +plugins { + id("com.android.application") + id("kotlin-android") + // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. + id("dev.flutter.flutter-gradle-plugin") +} + +android { + namespace = "com.example.audio_soloud" + compileSdk = flutter.compileSdkVersion + ndkVersion = flutter.ndkVersion + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 + } + + kotlinOptions { + jvmTarget = JavaVersion.VERSION_1_8.toString() + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId = "com.example.audio_soloud" + // You can update the following values to match your application needs. + // For more information, see: https://flutter.dev/to/review-gradle-config. + minSdk = flutter.minSdkVersion + targetSdk = flutter.targetSdkVersion + versionCode = flutter.versionCode + versionName = flutter.versionName + } + + buildTypes { + release { + // TODO: Add your own signing config for the release build. + // Signing with the debug keys for now, so `flutter run --release` works. + signingConfig = signingConfigs.getByName("debug") + } + } +} + +flutter { + source = "../.." +} diff --git a/audio_soloud/step_05/android/build.gradle b/audio_soloud/step_05/android/build.gradle deleted file mode 100644 index d2ffbffa4c..0000000000 --- a/audio_soloud/step_05/android/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = "../build" -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(":app") -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/audio_soloud/step_05/android/build.gradle.kts b/audio_soloud/step_05/android/build.gradle.kts new file mode 100644 index 0000000000..89176ef44e --- /dev/null +++ b/audio_soloud/step_05/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/audio_soloud/step_05/android/gradle.properties b/audio_soloud/step_05/android/gradle.properties index 2597170821..f018a61817 100644 --- a/audio_soloud/step_05/android/gradle.properties +++ b/audio_soloud/step_05/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/audio_soloud/step_05/android/gradle/wrapper/gradle-wrapper.properties b/audio_soloud/step_05/android/gradle/wrapper/gradle-wrapper.properties index 7bb2df6ba6..afa1e8eb0a 100644 --- a/audio_soloud/step_05/android/gradle/wrapper/gradle-wrapper.properties +++ b/audio_soloud/step_05/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip diff --git a/audio_soloud/step_05/android/settings.gradle b/audio_soloud/step_05/android/settings.gradle deleted file mode 100644 index b9e43bd376..0000000000 --- a/audio_soloud/step_05/android/settings.gradle +++ /dev/null @@ -1,25 +0,0 @@ -pluginManagement { - def flutterSdkPath = { - def properties = new Properties() - file("local.properties").withInputStream { properties.load(it) } - def flutterSdkPath = properties.getProperty("flutter.sdk") - assert flutterSdkPath != null, "flutter.sdk not set in local.properties" - return flutterSdkPath - }() - - includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") - - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} - -plugins { - id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.1.0" apply false - id "org.jetbrains.kotlin.android" version "1.8.22" apply false -} - -include ":app" diff --git a/audio_soloud/step_05/android/settings.gradle.kts b/audio_soloud/step_05/android/settings.gradle.kts new file mode 100644 index 0000000000..a439442c20 --- /dev/null +++ b/audio_soloud/step_05/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.0" apply false + id("org.jetbrains.kotlin.android") version "1.8.22" apply false +} + +include(":app") diff --git a/audio_soloud/step_05/ios/Podfile b/audio_soloud/step_05/ios/Podfile index a836c8c671..11e1cb83ed 100644 --- a/audio_soloud/step_05/ios/Podfile +++ b/audio_soloud/step_05/ios/Podfile @@ -29,7 +29,6 @@ flutter_ios_podfile_setup target 'Runner' do use_frameworks! - use_modular_headers! flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) target 'RunnerTests' do diff --git a/audio_soloud/step_05/ios/Runner.xcodeproj/project.pbxproj b/audio_soloud/step_05/ios/Runner.xcodeproj/project.pbxproj index 1b9ce23f29..f95cd4ddc5 100644 --- a/audio_soloud/step_05/ios/Runner.xcodeproj/project.pbxproj +++ b/audio_soloud/step_05/ios/Runner.xcodeproj/project.pbxproj @@ -8,14 +8,14 @@ /* Begin PBXBuildFile section */ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; + 1F8DFF2D0B45656A1484D9E9 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7699A6C867B148FFFEDA7910 /* Pods_RunnerTests.framework */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; - 660451A8A4F7B5016E2BE610 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5331A371F0116A607BB11374 /* Pods_Runner.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; + 917E733C29294B465786C267 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9897A34F0C6C8980D697D9C2 /* Pods_Runner.framework */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - A6631C561FD82D31CBA4956D /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9A5F864F2C140D5AB62D37C2 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,37 +42,37 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 100CA33BCCF2B6607BE728DB /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 1A15B1F8A041262C230BED54 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - 1A3676A19DF22D28E9BD1FC2 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 419220FE5D8CCA17E4449148 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 5331A371F0116A607BB11374 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 657C8805F3A4B377C4283F24 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 7699A6C867B148FFFEDA7910 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; + 976B10BC2EF464F7C8064A04 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 9A5F864F2C140D5AB62D37C2 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - BFF0A9ECF48DB9005E43855A /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - D07E5EC4B7EF798A3348CFAA /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - EE6B331A67AAC0FCD2EA6C9D /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 9897A34F0C6C8980D697D9C2 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + BD5BF548F0ADA3E97A8011F7 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + C30BE79F2FFD7703DD0D6181 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + E95D62B8B1B4119738B97221 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 797442CBBB46F44138B8A62F /* Frameworks */ = { + 90A6BC6AEE9AD531F4FA0BE7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - A6631C561FD82D31CBA4956D /* Pods_RunnerTests.framework in Frameworks */, + 1F8DFF2D0B45656A1484D9E9 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -80,7 +80,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 660451A8A4F7B5016E2BE610 /* Pods_Runner.framework in Frameworks */, + 917E733C29294B465786C267 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -95,18 +95,13 @@ path = RunnerTests; sourceTree = ""; }; - 84DBD755DD72CD62634B38A6 /* Pods */ = { + 5B23575691AD09BF9C5386A9 /* Frameworks */ = { isa = PBXGroup; children = ( - EE6B331A67AAC0FCD2EA6C9D /* Pods-Runner.debug.xcconfig */, - 1A3676A19DF22D28E9BD1FC2 /* Pods-Runner.release.xcconfig */, - D07E5EC4B7EF798A3348CFAA /* Pods-Runner.profile.xcconfig */, - 419220FE5D8CCA17E4449148 /* Pods-RunnerTests.debug.xcconfig */, - BFF0A9ECF48DB9005E43855A /* Pods-RunnerTests.release.xcconfig */, - 1A15B1F8A041262C230BED54 /* Pods-RunnerTests.profile.xcconfig */, + 9897A34F0C6C8980D697D9C2 /* Pods_Runner.framework */, + 7699A6C867B148FFFEDA7910 /* Pods_RunnerTests.framework */, ); - name = Pods; - path = Pods; + name = Frameworks; sourceTree = ""; }; 9740EEB11CF90186004384FC /* Flutter */ = { @@ -127,8 +122,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - 84DBD755DD72CD62634B38A6 /* Pods */, - CB3C27D4F94DA2B14436D57E /* Frameworks */, + CD6C9B8CDB44AE5FA5357DC4 /* Pods */, + 5B23575691AD09BF9C5386A9 /* Frameworks */, ); sourceTree = ""; }; @@ -156,13 +151,18 @@ path = Runner; sourceTree = ""; }; - CB3C27D4F94DA2B14436D57E /* Frameworks */ = { + CD6C9B8CDB44AE5FA5357DC4 /* Pods */ = { isa = PBXGroup; children = ( - 5331A371F0116A607BB11374 /* Pods_Runner.framework */, - 9A5F864F2C140D5AB62D37C2 /* Pods_RunnerTests.framework */, + C30BE79F2FFD7703DD0D6181 /* Pods-Runner.debug.xcconfig */, + BD5BF548F0ADA3E97A8011F7 /* Pods-Runner.release.xcconfig */, + 100CA33BCCF2B6607BE728DB /* Pods-Runner.profile.xcconfig */, + E95D62B8B1B4119738B97221 /* Pods-RunnerTests.debug.xcconfig */, + 976B10BC2EF464F7C8064A04 /* Pods-RunnerTests.release.xcconfig */, + 657C8805F3A4B377C4283F24 /* Pods-RunnerTests.profile.xcconfig */, ); - name = Frameworks; + name = Pods; + path = Pods; sourceTree = ""; }; /* End PBXGroup section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 2062CF2AA90746DBEBF6222E /* [CP] Check Pods Manifest.lock */, + 57996670C67F3C2A07C0AD53 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 797442CBBB46F44138B8A62F /* Frameworks */, + 90A6BC6AEE9AD531F4FA0BE7 /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 8A9478015A4593F36E3CD603 /* [CP] Check Pods Manifest.lock */, + EF4807D8ED6B42F4EFFF1F5F /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 7A80B7559B6CC8A2CE24A777 /* [CP] Embed Pods Frameworks */, + A44629AD5B7014368847AC88 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -270,7 +270,23 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 2062CF2AA90746DBEBF6222E /* [CP] Check Pods Manifest.lock */ = { + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", + ); + name = "Thin Binary"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + }; + 57996670C67F3C2A07C0AD53 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -292,23 +308,22 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputPaths = ( - "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); - name = "Thin Binary"; + name = "Run Script"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - 7A80B7559B6CC8A2CE24A777 /* [CP] Embed Pods Frameworks */ = { + A44629AD5B7014368847AC88 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -325,7 +340,7 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - 8A9478015A4593F36E3CD603 /* [CP] Check Pods Manifest.lock */ = { + EF4807D8ED6B42F4EFFF1F5F /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -347,21 +362,6 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { - isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "Run Script"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; - }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 419220FE5D8CCA17E4449148 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = E95D62B8B1B4119738B97221 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = BFF0A9ECF48DB9005E43855A /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 976B10BC2EF464F7C8064A04 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 1A15B1F8A041262C230BED54 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 657C8805F3A4B377C4283F24 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/audio_soloud/step_05/macos/Podfile b/audio_soloud/step_05/macos/Podfile index b52666a103..ff5ddb3b8b 100644 --- a/audio_soloud/step_05/macos/Podfile +++ b/audio_soloud/step_05/macos/Podfile @@ -28,7 +28,6 @@ flutter_macos_podfile_setup target 'Runner' do use_frameworks! - use_modular_headers! flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__)) target 'RunnerTests' do diff --git a/audio_soloud/step_05/macos/Runner.xcodeproj/project.pbxproj b/audio_soloud/step_05/macos/Runner.xcodeproj/project.pbxproj index b7362422cc..d52047b92f 100644 --- a/audio_soloud/step_05/macos/Runner.xcodeproj/project.pbxproj +++ b/audio_soloud/step_05/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ - 0D73403B8E98B133AA7CE204 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A47A3F9816C6B404C923F26A /* Pods_RunnerTests.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 64997B24FD16265E26078B31 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E9FF240A7207DE9140CCA6E3 /* Pods_Runner.framework */; }; + 5AD08C26497CC3DA72A60A7B /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B24FD02DE548531E8EB4E4C0 /* Pods_RunnerTests.framework */; }; + C689FF15D65EF8F953F5CF07 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7306EBA146478647D696BEA7 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,7 +62,9 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 2EFEC354148C8AED5D35BDE0 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 02074F761FF084D538C7DA64 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 09005269D751B53A0B905BA3 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 19F716A081271519061BEE50 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -79,15 +81,13 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 5BB8546BA2CD9C2B62569053 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - 6A8117CC8A0D7F170A118ACB /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 72A486F3FD5DA9FCD6EF83EF /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 7306EBA146478647D696BEA7 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 920D8C3ABC08DF577D3461CF /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - 95615250CC33E1E207BF1C7A /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 87DA2706F11528DE51918120 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - A47A3F9816C6B404C923F26A /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - E074DB6C779DC9B0BAB22369 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - E9FF240A7207DE9140CCA6E3 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + A0A96BE6DFA15981D1ABC0CD /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + B24FD02DE548531E8EB4E4C0 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 0D73403B8E98B133AA7CE204 /* Pods_RunnerTests.framework in Frameworks */, + 5AD08C26497CC3DA72A60A7B /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,7 +103,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 64997B24FD16265E26078B31 /* Pods_Runner.framework in Frameworks */, + C689FF15D65EF8F953F5CF07 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -137,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - C7208C9BEB8A8FE581EACF67 /* Pods */, + 5CF1E134C0075671A25E3CF8 /* Pods */, ); sourceTree = ""; }; @@ -185,15 +185,15 @@ path = Runner; sourceTree = ""; }; - C7208C9BEB8A8FE581EACF67 /* Pods */ = { + 5CF1E134C0075671A25E3CF8 /* Pods */ = { isa = PBXGroup; children = ( - 2EFEC354148C8AED5D35BDE0 /* Pods-Runner.debug.xcconfig */, - 6A8117CC8A0D7F170A118ACB /* Pods-Runner.release.xcconfig */, - 5BB8546BA2CD9C2B62569053 /* Pods-Runner.profile.xcconfig */, - 95615250CC33E1E207BF1C7A /* Pods-RunnerTests.debug.xcconfig */, - 920D8C3ABC08DF577D3461CF /* Pods-RunnerTests.release.xcconfig */, - E074DB6C779DC9B0BAB22369 /* Pods-RunnerTests.profile.xcconfig */, + 09005269D751B53A0B905BA3 /* Pods-Runner.debug.xcconfig */, + 87DA2706F11528DE51918120 /* Pods-Runner.release.xcconfig */, + 02074F761FF084D538C7DA64 /* Pods-Runner.profile.xcconfig */, + A0A96BE6DFA15981D1ABC0CD /* Pods-RunnerTests.debug.xcconfig */, + 19F716A081271519061BEE50 /* Pods-RunnerTests.release.xcconfig */, + 72A486F3FD5DA9FCD6EF83EF /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -202,8 +202,8 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - E9FF240A7207DE9140CCA6E3 /* Pods_Runner.framework */, - A47A3F9816C6B404C923F26A /* Pods_RunnerTests.framework */, + 7306EBA146478647D696BEA7 /* Pods_Runner.framework */, + B24FD02DE548531E8EB4E4C0 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 17F5D3067CAF6C4336E34B3C /* [CP] Check Pods Manifest.lock */, + 8046F9597FECD4D2AFE19826 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 58A93043BC52AB230C967806 /* [CP] Check Pods Manifest.lock */, + 00F50DC465F412B5DF36E306 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 38850385B5B0D324974EA1CE /* [CP] Embed Pods Frameworks */, + BFB61F33D6C07588E176985E /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,7 +323,7 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 17F5D3067CAF6C4336E34B3C /* [CP] Check Pods Manifest.lock */ = { + 00F50DC465F412B5DF36E306 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -338,7 +338,7 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -383,43 +383,43 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 38850385B5B0D324974EA1CE /* [CP] Embed Pods Frameworks */ = { + 8046F9597FECD4D2AFE19826 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 58A93043BC52AB230C967806 /* [CP] Check Pods Manifest.lock */ = { + BFB61F33D6C07588E176985E /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 95615250CC33E1E207BF1C7A /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = A0A96BE6DFA15981D1ABC0CD /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 920D8C3ABC08DF577D3461CF /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 19F716A081271519061BEE50 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = E074DB6C779DC9B0BAB22369 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 72A486F3FD5DA9FCD6EF83EF /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/audio_soloud/step_06/android/app/build.gradle b/audio_soloud/step_06/android/app/build.gradle deleted file mode 100644 index 2c07f0d32f..0000000000 --- a/audio_soloud/step_06/android/app/build.gradle +++ /dev/null @@ -1,44 +0,0 @@ -plugins { - id "com.android.application" - id "kotlin-android" - // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. - id "dev.flutter.flutter-gradle-plugin" -} - -android { - namespace = "com.example.audio_soloud" - compileSdk = flutter.compileSdkVersion - ndkVersion = flutter.ndkVersion - - compileOptions { - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 - } - - kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8 - } - - defaultConfig { - // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). - applicationId = "com.example.audio_soloud" - // You can update the following values to match your application needs. - // For more information, see: https://flutter.dev/to/review-gradle-config. - minSdk = flutter.minSdkVersion - targetSdk = flutter.targetSdkVersion - versionCode = flutter.versionCode - versionName = flutter.versionName - } - - buildTypes { - release { - // TODO: Add your own signing config for the release build. - // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig = signingConfigs.debug - } - } -} - -flutter { - source = "../.." -} diff --git a/audio_soloud/step_06/android/app/build.gradle.kts b/audio_soloud/step_06/android/app/build.gradle.kts new file mode 100644 index 0000000000..189d47a473 --- /dev/null +++ b/audio_soloud/step_06/android/app/build.gradle.kts @@ -0,0 +1,44 @@ +plugins { + id("com.android.application") + id("kotlin-android") + // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. + id("dev.flutter.flutter-gradle-plugin") +} + +android { + namespace = "com.example.audio_soloud" + compileSdk = flutter.compileSdkVersion + ndkVersion = flutter.ndkVersion + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 + } + + kotlinOptions { + jvmTarget = JavaVersion.VERSION_1_8.toString() + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId = "com.example.audio_soloud" + // You can update the following values to match your application needs. + // For more information, see: https://flutter.dev/to/review-gradle-config. + minSdk = flutter.minSdkVersion + targetSdk = flutter.targetSdkVersion + versionCode = flutter.versionCode + versionName = flutter.versionName + } + + buildTypes { + release { + // TODO: Add your own signing config for the release build. + // Signing with the debug keys for now, so `flutter run --release` works. + signingConfig = signingConfigs.getByName("debug") + } + } +} + +flutter { + source = "../.." +} diff --git a/audio_soloud/step_06/android/build.gradle b/audio_soloud/step_06/android/build.gradle deleted file mode 100644 index d2ffbffa4c..0000000000 --- a/audio_soloud/step_06/android/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = "../build" -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(":app") -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/audio_soloud/step_06/android/build.gradle.kts b/audio_soloud/step_06/android/build.gradle.kts new file mode 100644 index 0000000000..89176ef44e --- /dev/null +++ b/audio_soloud/step_06/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/audio_soloud/step_06/android/gradle.properties b/audio_soloud/step_06/android/gradle.properties index 2597170821..f018a61817 100644 --- a/audio_soloud/step_06/android/gradle.properties +++ b/audio_soloud/step_06/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/audio_soloud/step_06/android/gradle/wrapper/gradle-wrapper.properties b/audio_soloud/step_06/android/gradle/wrapper/gradle-wrapper.properties index 7bb2df6ba6..afa1e8eb0a 100644 --- a/audio_soloud/step_06/android/gradle/wrapper/gradle-wrapper.properties +++ b/audio_soloud/step_06/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip diff --git a/audio_soloud/step_06/android/settings.gradle b/audio_soloud/step_06/android/settings.gradle deleted file mode 100644 index b9e43bd376..0000000000 --- a/audio_soloud/step_06/android/settings.gradle +++ /dev/null @@ -1,25 +0,0 @@ -pluginManagement { - def flutterSdkPath = { - def properties = new Properties() - file("local.properties").withInputStream { properties.load(it) } - def flutterSdkPath = properties.getProperty("flutter.sdk") - assert flutterSdkPath != null, "flutter.sdk not set in local.properties" - return flutterSdkPath - }() - - includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") - - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} - -plugins { - id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.1.0" apply false - id "org.jetbrains.kotlin.android" version "1.8.22" apply false -} - -include ":app" diff --git a/audio_soloud/step_06/android/settings.gradle.kts b/audio_soloud/step_06/android/settings.gradle.kts new file mode 100644 index 0000000000..a439442c20 --- /dev/null +++ b/audio_soloud/step_06/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.0" apply false + id("org.jetbrains.kotlin.android") version "1.8.22" apply false +} + +include(":app") diff --git a/audio_soloud/step_06/ios/Podfile b/audio_soloud/step_06/ios/Podfile index a836c8c671..11e1cb83ed 100644 --- a/audio_soloud/step_06/ios/Podfile +++ b/audio_soloud/step_06/ios/Podfile @@ -29,7 +29,6 @@ flutter_ios_podfile_setup target 'Runner' do use_frameworks! - use_modular_headers! flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) target 'RunnerTests' do diff --git a/audio_soloud/step_06/ios/Runner.xcodeproj/project.pbxproj b/audio_soloud/step_06/ios/Runner.xcodeproj/project.pbxproj index 1b9ce23f29..f95cd4ddc5 100644 --- a/audio_soloud/step_06/ios/Runner.xcodeproj/project.pbxproj +++ b/audio_soloud/step_06/ios/Runner.xcodeproj/project.pbxproj @@ -8,14 +8,14 @@ /* Begin PBXBuildFile section */ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; + 1F8DFF2D0B45656A1484D9E9 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7699A6C867B148FFFEDA7910 /* Pods_RunnerTests.framework */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; - 660451A8A4F7B5016E2BE610 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5331A371F0116A607BB11374 /* Pods_Runner.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; + 917E733C29294B465786C267 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9897A34F0C6C8980D697D9C2 /* Pods_Runner.framework */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - A6631C561FD82D31CBA4956D /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9A5F864F2C140D5AB62D37C2 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,37 +42,37 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 100CA33BCCF2B6607BE728DB /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 1A15B1F8A041262C230BED54 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - 1A3676A19DF22D28E9BD1FC2 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 419220FE5D8CCA17E4449148 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 5331A371F0116A607BB11374 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 657C8805F3A4B377C4283F24 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 7699A6C867B148FFFEDA7910 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; + 976B10BC2EF464F7C8064A04 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 9A5F864F2C140D5AB62D37C2 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - BFF0A9ECF48DB9005E43855A /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - D07E5EC4B7EF798A3348CFAA /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - EE6B331A67AAC0FCD2EA6C9D /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 9897A34F0C6C8980D697D9C2 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + BD5BF548F0ADA3E97A8011F7 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + C30BE79F2FFD7703DD0D6181 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + E95D62B8B1B4119738B97221 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 797442CBBB46F44138B8A62F /* Frameworks */ = { + 90A6BC6AEE9AD531F4FA0BE7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - A6631C561FD82D31CBA4956D /* Pods_RunnerTests.framework in Frameworks */, + 1F8DFF2D0B45656A1484D9E9 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -80,7 +80,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 660451A8A4F7B5016E2BE610 /* Pods_Runner.framework in Frameworks */, + 917E733C29294B465786C267 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -95,18 +95,13 @@ path = RunnerTests; sourceTree = ""; }; - 84DBD755DD72CD62634B38A6 /* Pods */ = { + 5B23575691AD09BF9C5386A9 /* Frameworks */ = { isa = PBXGroup; children = ( - EE6B331A67AAC0FCD2EA6C9D /* Pods-Runner.debug.xcconfig */, - 1A3676A19DF22D28E9BD1FC2 /* Pods-Runner.release.xcconfig */, - D07E5EC4B7EF798A3348CFAA /* Pods-Runner.profile.xcconfig */, - 419220FE5D8CCA17E4449148 /* Pods-RunnerTests.debug.xcconfig */, - BFF0A9ECF48DB9005E43855A /* Pods-RunnerTests.release.xcconfig */, - 1A15B1F8A041262C230BED54 /* Pods-RunnerTests.profile.xcconfig */, + 9897A34F0C6C8980D697D9C2 /* Pods_Runner.framework */, + 7699A6C867B148FFFEDA7910 /* Pods_RunnerTests.framework */, ); - name = Pods; - path = Pods; + name = Frameworks; sourceTree = ""; }; 9740EEB11CF90186004384FC /* Flutter */ = { @@ -127,8 +122,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - 84DBD755DD72CD62634B38A6 /* Pods */, - CB3C27D4F94DA2B14436D57E /* Frameworks */, + CD6C9B8CDB44AE5FA5357DC4 /* Pods */, + 5B23575691AD09BF9C5386A9 /* Frameworks */, ); sourceTree = ""; }; @@ -156,13 +151,18 @@ path = Runner; sourceTree = ""; }; - CB3C27D4F94DA2B14436D57E /* Frameworks */ = { + CD6C9B8CDB44AE5FA5357DC4 /* Pods */ = { isa = PBXGroup; children = ( - 5331A371F0116A607BB11374 /* Pods_Runner.framework */, - 9A5F864F2C140D5AB62D37C2 /* Pods_RunnerTests.framework */, + C30BE79F2FFD7703DD0D6181 /* Pods-Runner.debug.xcconfig */, + BD5BF548F0ADA3E97A8011F7 /* Pods-Runner.release.xcconfig */, + 100CA33BCCF2B6607BE728DB /* Pods-Runner.profile.xcconfig */, + E95D62B8B1B4119738B97221 /* Pods-RunnerTests.debug.xcconfig */, + 976B10BC2EF464F7C8064A04 /* Pods-RunnerTests.release.xcconfig */, + 657C8805F3A4B377C4283F24 /* Pods-RunnerTests.profile.xcconfig */, ); - name = Frameworks; + name = Pods; + path = Pods; sourceTree = ""; }; /* End PBXGroup section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 2062CF2AA90746DBEBF6222E /* [CP] Check Pods Manifest.lock */, + 57996670C67F3C2A07C0AD53 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 797442CBBB46F44138B8A62F /* Frameworks */, + 90A6BC6AEE9AD531F4FA0BE7 /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 8A9478015A4593F36E3CD603 /* [CP] Check Pods Manifest.lock */, + EF4807D8ED6B42F4EFFF1F5F /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 7A80B7559B6CC8A2CE24A777 /* [CP] Embed Pods Frameworks */, + A44629AD5B7014368847AC88 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -270,7 +270,23 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 2062CF2AA90746DBEBF6222E /* [CP] Check Pods Manifest.lock */ = { + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", + ); + name = "Thin Binary"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + }; + 57996670C67F3C2A07C0AD53 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -292,23 +308,22 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputPaths = ( - "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); - name = "Thin Binary"; + name = "Run Script"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - 7A80B7559B6CC8A2CE24A777 /* [CP] Embed Pods Frameworks */ = { + A44629AD5B7014368847AC88 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -325,7 +340,7 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - 8A9478015A4593F36E3CD603 /* [CP] Check Pods Manifest.lock */ = { + EF4807D8ED6B42F4EFFF1F5F /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -347,21 +362,6 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { - isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "Run Script"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; - }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 419220FE5D8CCA17E4449148 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = E95D62B8B1B4119738B97221 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = BFF0A9ECF48DB9005E43855A /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 976B10BC2EF464F7C8064A04 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 1A15B1F8A041262C230BED54 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 657C8805F3A4B377C4283F24 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/audio_soloud/step_06/macos/Podfile b/audio_soloud/step_06/macos/Podfile index b52666a103..ff5ddb3b8b 100644 --- a/audio_soloud/step_06/macos/Podfile +++ b/audio_soloud/step_06/macos/Podfile @@ -28,7 +28,6 @@ flutter_macos_podfile_setup target 'Runner' do use_frameworks! - use_modular_headers! flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__)) target 'RunnerTests' do diff --git a/audio_soloud/step_06/macos/Runner.xcodeproj/project.pbxproj b/audio_soloud/step_06/macos/Runner.xcodeproj/project.pbxproj index b7362422cc..d52047b92f 100644 --- a/audio_soloud/step_06/macos/Runner.xcodeproj/project.pbxproj +++ b/audio_soloud/step_06/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ - 0D73403B8E98B133AA7CE204 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A47A3F9816C6B404C923F26A /* Pods_RunnerTests.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 64997B24FD16265E26078B31 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E9FF240A7207DE9140CCA6E3 /* Pods_Runner.framework */; }; + 5AD08C26497CC3DA72A60A7B /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B24FD02DE548531E8EB4E4C0 /* Pods_RunnerTests.framework */; }; + C689FF15D65EF8F953F5CF07 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7306EBA146478647D696BEA7 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,7 +62,9 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 2EFEC354148C8AED5D35BDE0 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 02074F761FF084D538C7DA64 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 09005269D751B53A0B905BA3 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 19F716A081271519061BEE50 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -79,15 +81,13 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 5BB8546BA2CD9C2B62569053 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - 6A8117CC8A0D7F170A118ACB /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 72A486F3FD5DA9FCD6EF83EF /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 7306EBA146478647D696BEA7 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 920D8C3ABC08DF577D3461CF /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - 95615250CC33E1E207BF1C7A /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 87DA2706F11528DE51918120 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - A47A3F9816C6B404C923F26A /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - E074DB6C779DC9B0BAB22369 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - E9FF240A7207DE9140CCA6E3 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + A0A96BE6DFA15981D1ABC0CD /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + B24FD02DE548531E8EB4E4C0 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 0D73403B8E98B133AA7CE204 /* Pods_RunnerTests.framework in Frameworks */, + 5AD08C26497CC3DA72A60A7B /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,7 +103,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 64997B24FD16265E26078B31 /* Pods_Runner.framework in Frameworks */, + C689FF15D65EF8F953F5CF07 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -137,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - C7208C9BEB8A8FE581EACF67 /* Pods */, + 5CF1E134C0075671A25E3CF8 /* Pods */, ); sourceTree = ""; }; @@ -185,15 +185,15 @@ path = Runner; sourceTree = ""; }; - C7208C9BEB8A8FE581EACF67 /* Pods */ = { + 5CF1E134C0075671A25E3CF8 /* Pods */ = { isa = PBXGroup; children = ( - 2EFEC354148C8AED5D35BDE0 /* Pods-Runner.debug.xcconfig */, - 6A8117CC8A0D7F170A118ACB /* Pods-Runner.release.xcconfig */, - 5BB8546BA2CD9C2B62569053 /* Pods-Runner.profile.xcconfig */, - 95615250CC33E1E207BF1C7A /* Pods-RunnerTests.debug.xcconfig */, - 920D8C3ABC08DF577D3461CF /* Pods-RunnerTests.release.xcconfig */, - E074DB6C779DC9B0BAB22369 /* Pods-RunnerTests.profile.xcconfig */, + 09005269D751B53A0B905BA3 /* Pods-Runner.debug.xcconfig */, + 87DA2706F11528DE51918120 /* Pods-Runner.release.xcconfig */, + 02074F761FF084D538C7DA64 /* Pods-Runner.profile.xcconfig */, + A0A96BE6DFA15981D1ABC0CD /* Pods-RunnerTests.debug.xcconfig */, + 19F716A081271519061BEE50 /* Pods-RunnerTests.release.xcconfig */, + 72A486F3FD5DA9FCD6EF83EF /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -202,8 +202,8 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - E9FF240A7207DE9140CCA6E3 /* Pods_Runner.framework */, - A47A3F9816C6B404C923F26A /* Pods_RunnerTests.framework */, + 7306EBA146478647D696BEA7 /* Pods_Runner.framework */, + B24FD02DE548531E8EB4E4C0 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 17F5D3067CAF6C4336E34B3C /* [CP] Check Pods Manifest.lock */, + 8046F9597FECD4D2AFE19826 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 58A93043BC52AB230C967806 /* [CP] Check Pods Manifest.lock */, + 00F50DC465F412B5DF36E306 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 38850385B5B0D324974EA1CE /* [CP] Embed Pods Frameworks */, + BFB61F33D6C07588E176985E /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,7 +323,7 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 17F5D3067CAF6C4336E34B3C /* [CP] Check Pods Manifest.lock */ = { + 00F50DC465F412B5DF36E306 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -338,7 +338,7 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -383,43 +383,43 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 38850385B5B0D324974EA1CE /* [CP] Embed Pods Frameworks */ = { + 8046F9597FECD4D2AFE19826 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 58A93043BC52AB230C967806 /* [CP] Check Pods Manifest.lock */ = { + BFB61F33D6C07588E176985E /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 95615250CC33E1E207BF1C7A /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = A0A96BE6DFA15981D1ABC0CD /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 920D8C3ABC08DF577D3461CF /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 19F716A081271519061BEE50 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = E074DB6C779DC9B0BAB22369 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 72A486F3FD5DA9FCD6EF83EF /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; From 19c4ad44fbab5d38cd0bbdf5b4103a33e9bf571c Mon Sep 17 00:00:00 2001 From: Brett Morgan Date: Thu, 14 Nov 2024 20:47:37 +1100 Subject: [PATCH 065/108] Update rebuild script for `audio_soloud ` --- audio_soloud/codelab_rebuild.yaml | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/audio_soloud/codelab_rebuild.yaml b/audio_soloud/codelab_rebuild.yaml index 7c7cab794d..8ac8a095b7 100644 --- a/audio_soloud/codelab_rebuild.yaml +++ b/audio_soloud/codelab_rebuild.yaml @@ -139,9 +139,7 @@ steps: final audioController = AudioController(); await audioController.initialize(); - runApp( - MyApp(audioController: audioController), - ); + runApp(MyApp(audioController: audioController)); } class MyApp extends StatelessWidget { @@ -507,8 +505,8 @@ steps: - name: Play music loops path: audio_soloud/lib/audio/audio_controller.dart patch-u: | - --- a/lib/audio/audio_controller.dart - +++ b/lib/audio/audio_controller.dart + --- b/audio_soloud/step_05/lib/audio/audio_controller.dart + +++ a/audio_soloud/step_05/lib/audio/audio_controller.dart @@ -8,6 +8,8 @@ class AudioController { SoLoud? _soloud; @@ -518,7 +516,7 @@ steps: Future initialize() async { _soloud = SoLoud.instance; await _soloud!.init(); - @@ -27,11 +29,38 @@ class AudioController { + @@ -27,11 +29,40 @@ class AudioController { } Future startMusic() async { @@ -530,8 +528,10 @@ steps: + } + } + _log.info('Loading music'); - + final musicSource = await _soloud! - + .loadAsset('assets/music/looped-song.ogg', mode: LoadMode.disk); + + final musicSource = await _soloud!.loadAsset( + + 'assets/music/looped-song.ogg', + + mode: LoadMode.disk, + + ); + musicSource.allInstancesFinished.first.then((_) { + _soloud!.disposeSource(musicSource); + _log.info('Music source disposed'); @@ -594,9 +594,9 @@ steps: - name: Apply effects path: audio_soloud/lib/audio/audio_controller.dart patch-u: | - --- a/lib/audio/audio_controller.dart - +++ b/lib/audio/audio_controller.dart - @@ -64,10 +64,12 @@ class AudioController { + --- b/audio_soloud/step_06/lib/audio/audio_controller.dart + +++ a/audio_soloud/step_06/lib/audio/audio_controller.dart + @@ -66,10 +66,12 @@ class AudioController { } void applyFilter() { From 6a60e435202b7c31fe71ee0bbca4a2a15dcb78f0 Mon Sep 17 00:00:00 2001 From: Brett Morgan Date: Thu, 14 Nov 2024 20:59:49 +1100 Subject: [PATCH 066/108] Updating `boring_to_beautiful`, part 1 --- .../app/{build.gradle => build.gradle.kts} | 10 +- .../final/android/build.gradle | 18 --- .../final/android/build.gradle.kts | 21 +++ .../final/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../final/android/settings.gradle | 25 ---- .../final/android/settings.gradle.kts | 25 ++++ boring_to_beautiful/final/ios/Podfile | 1 - .../ios/Runner.xcodeproj/project.pbxproj | 136 +++++++++--------- boring_to_beautiful/final/macos/Podfile | 1 - .../macos/Runner.xcodeproj/project.pbxproj | 76 +++++----- boring_to_beautiful/final/pubspec.yaml | 2 +- .../android/app/build.gradle.kts} | 10 +- .../step_01/android/build.gradle | 18 --- .../step_01/android/build.gradle.kts | 21 +++ .../step_01/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../step_01/android/settings.gradle | 25 ---- .../step_01/android/settings.gradle.kts | 25 ++++ boring_to_beautiful/step_01/ios/Podfile | 1 - .../ios/Runner.xcodeproj/project.pbxproj | 136 +++++++++--------- boring_to_beautiful/step_01/macos/Podfile | 1 - .../macos/Runner.xcodeproj/project.pbxproj | 76 +++++----- boring_to_beautiful/step_01/pubspec.yaml | 2 +- .../android/app/build.gradle.kts} | 10 +- .../step_02/android/build.gradle | 18 --- .../step_02/android/build.gradle.kts | 21 +++ .../step_02/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../step_02/android/settings.gradle | 25 ---- .../step_02/android/settings.gradle.kts | 25 ++++ boring_to_beautiful/step_02/ios/Podfile | 1 - .../ios/Runner.xcodeproj/project.pbxproj | 136 +++++++++--------- boring_to_beautiful/step_02/macos/Podfile | 1 - .../macos/Runner.xcodeproj/project.pbxproj | 76 +++++----- boring_to_beautiful/step_02/pubspec.yaml | 2 +- .../android/app/build.gradle.kts} | 10 +- .../step_03/android/build.gradle | 18 --- .../step_03/android/build.gradle.kts | 21 +++ .../step_03/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../step_03/android/settings.gradle | 25 ---- .../step_03/android/settings.gradle.kts | 25 ++++ boring_to_beautiful/step_03/ios/Podfile | 1 - .../ios/Runner.xcodeproj/project.pbxproj | 136 +++++++++--------- boring_to_beautiful/step_03/macos/Podfile | 1 - .../macos/Runner.xcodeproj/project.pbxproj | 76 +++++----- boring_to_beautiful/step_03/pubspec.yaml | 2 +- .../step_04/android/app/build.gradle | 44 ------ .../step_04/android/app/build.gradle.kts | 44 ++++++ .../step_04/android/build.gradle | 18 --- .../step_04/android/build.gradle.kts | 21 +++ .../step_04/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../step_04/android/settings.gradle | 25 ---- .../step_04/android/settings.gradle.kts | 25 ++++ boring_to_beautiful/step_04/ios/Podfile | 1 - .../ios/Runner.xcodeproj/project.pbxproj | 136 +++++++++--------- boring_to_beautiful/step_04/macos/Podfile | 1 - .../macos/Runner.xcodeproj/project.pbxproj | 76 +++++----- boring_to_beautiful/step_04/pubspec.yaml | 2 +- .../step_05/android/app/build.gradle | 44 ------ .../step_05/android/app/build.gradle.kts | 44 ++++++ .../step_05/android/build.gradle | 18 --- .../step_05/android/build.gradle.kts | 21 +++ .../step_05/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../step_05/android/settings.gradle | 25 ---- .../step_05/android/settings.gradle.kts | 25 ++++ boring_to_beautiful/step_05/ios/Podfile | 1 - .../ios/Runner.xcodeproj/project.pbxproj | 136 +++++++++--------- boring_to_beautiful/step_05/macos/Podfile | 1 - .../macos/Runner.xcodeproj/project.pbxproj | 76 +++++----- boring_to_beautiful/step_05/pubspec.yaml | 2 +- .../step_06/android/app/build.gradle | 44 ------ .../step_06/android/app/build.gradle.kts | 44 ++++++ .../step_06/android/build.gradle | 18 --- .../step_06/android/build.gradle.kts | 21 +++ .../step_06/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../step_06/android/settings.gradle | 25 ---- .../step_06/android/settings.gradle.kts | 25 ++++ boring_to_beautiful/step_06/ios/Podfile | 1 - .../ios/Runner.xcodeproj/project.pbxproj | 136 +++++++++--------- boring_to_beautiful/step_06/macos/Podfile | 1 - .../macos/Runner.xcodeproj/project.pbxproj | 76 +++++----- boring_to_beautiful/step_06/pubspec.yaml | 2 +- .../step_07/android/app/build.gradle | 44 ------ .../step_07/android/app/build.gradle.kts | 44 ++++++ .../step_07/android/build.gradle | 18 --- .../step_07/android/build.gradle.kts | 21 +++ .../step_07/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../step_07/android/settings.gradle | 25 ---- .../step_07/android/settings.gradle.kts | 25 ++++ boring_to_beautiful/step_07/ios/Podfile | 1 - .../ios/Runner.xcodeproj/project.pbxproj | 136 +++++++++--------- boring_to_beautiful/step_07/macos/Podfile | 1 - .../macos/Runner.xcodeproj/project.pbxproj | 76 +++++----- boring_to_beautiful/step_07/pubspec.yaml | 2 +- 100 files changed, 1436 insertions(+), 1428 deletions(-) rename boring_to_beautiful/final/android/app/{build.gradle => build.gradle.kts} (84%) delete mode 100644 boring_to_beautiful/final/android/build.gradle create mode 100644 boring_to_beautiful/final/android/build.gradle.kts delete mode 100644 boring_to_beautiful/final/android/settings.gradle create mode 100644 boring_to_beautiful/final/android/settings.gradle.kts rename boring_to_beautiful/{step_02/android/app/build.gradle => step_01/android/app/build.gradle.kts} (84%) delete mode 100644 boring_to_beautiful/step_01/android/build.gradle create mode 100644 boring_to_beautiful/step_01/android/build.gradle.kts delete mode 100644 boring_to_beautiful/step_01/android/settings.gradle create mode 100644 boring_to_beautiful/step_01/android/settings.gradle.kts rename boring_to_beautiful/{step_03/android/app/build.gradle => step_02/android/app/build.gradle.kts} (84%) delete mode 100644 boring_to_beautiful/step_02/android/build.gradle create mode 100644 boring_to_beautiful/step_02/android/build.gradle.kts delete mode 100644 boring_to_beautiful/step_02/android/settings.gradle create mode 100644 boring_to_beautiful/step_02/android/settings.gradle.kts rename boring_to_beautiful/{step_01/android/app/build.gradle => step_03/android/app/build.gradle.kts} (84%) delete mode 100644 boring_to_beautiful/step_03/android/build.gradle create mode 100644 boring_to_beautiful/step_03/android/build.gradle.kts delete mode 100644 boring_to_beautiful/step_03/android/settings.gradle create mode 100644 boring_to_beautiful/step_03/android/settings.gradle.kts delete mode 100644 boring_to_beautiful/step_04/android/app/build.gradle create mode 100644 boring_to_beautiful/step_04/android/app/build.gradle.kts delete mode 100644 boring_to_beautiful/step_04/android/build.gradle create mode 100644 boring_to_beautiful/step_04/android/build.gradle.kts delete mode 100644 boring_to_beautiful/step_04/android/settings.gradle create mode 100644 boring_to_beautiful/step_04/android/settings.gradle.kts delete mode 100644 boring_to_beautiful/step_05/android/app/build.gradle create mode 100644 boring_to_beautiful/step_05/android/app/build.gradle.kts delete mode 100644 boring_to_beautiful/step_05/android/build.gradle create mode 100644 boring_to_beautiful/step_05/android/build.gradle.kts delete mode 100644 boring_to_beautiful/step_05/android/settings.gradle create mode 100644 boring_to_beautiful/step_05/android/settings.gradle.kts delete mode 100644 boring_to_beautiful/step_06/android/app/build.gradle create mode 100644 boring_to_beautiful/step_06/android/app/build.gradle.kts delete mode 100644 boring_to_beautiful/step_06/android/build.gradle create mode 100644 boring_to_beautiful/step_06/android/build.gradle.kts delete mode 100644 boring_to_beautiful/step_06/android/settings.gradle create mode 100644 boring_to_beautiful/step_06/android/settings.gradle.kts delete mode 100644 boring_to_beautiful/step_07/android/app/build.gradle create mode 100644 boring_to_beautiful/step_07/android/app/build.gradle.kts delete mode 100644 boring_to_beautiful/step_07/android/build.gradle create mode 100644 boring_to_beautiful/step_07/android/build.gradle.kts delete mode 100644 boring_to_beautiful/step_07/android/settings.gradle create mode 100644 boring_to_beautiful/step_07/android/settings.gradle.kts diff --git a/boring_to_beautiful/final/android/app/build.gradle b/boring_to_beautiful/final/android/app/build.gradle.kts similarity index 84% rename from boring_to_beautiful/final/android/app/build.gradle rename to boring_to_beautiful/final/android/app/build.gradle.kts index 59485b6bb8..e82aa40635 100644 --- a/boring_to_beautiful/final/android/app/build.gradle +++ b/boring_to_beautiful/final/android/app/build.gradle.kts @@ -1,8 +1,8 @@ plugins { - id "com.android.application" - id "kotlin-android" + id("com.android.application") + id("kotlin-android") // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. - id "dev.flutter.flutter-gradle-plugin" + id("dev.flutter.flutter-gradle-plugin") } android { @@ -16,7 +16,7 @@ android { } kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8 + jvmTarget = JavaVersion.VERSION_1_8.toString() } defaultConfig { @@ -34,7 +34,7 @@ android { release { // TODO: Add your own signing config for the release build. // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig = signingConfigs.debug + signingConfig = signingConfigs.getByName("debug") } } } diff --git a/boring_to_beautiful/final/android/build.gradle b/boring_to_beautiful/final/android/build.gradle deleted file mode 100644 index d2ffbffa4c..0000000000 --- a/boring_to_beautiful/final/android/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = "../build" -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(":app") -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/boring_to_beautiful/final/android/build.gradle.kts b/boring_to_beautiful/final/android/build.gradle.kts new file mode 100644 index 0000000000..89176ef44e --- /dev/null +++ b/boring_to_beautiful/final/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/boring_to_beautiful/final/android/gradle.properties b/boring_to_beautiful/final/android/gradle.properties index 2597170821..f018a61817 100644 --- a/boring_to_beautiful/final/android/gradle.properties +++ b/boring_to_beautiful/final/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/boring_to_beautiful/final/android/gradle/wrapper/gradle-wrapper.properties b/boring_to_beautiful/final/android/gradle/wrapper/gradle-wrapper.properties index 7bb2df6ba6..afa1e8eb0a 100644 --- a/boring_to_beautiful/final/android/gradle/wrapper/gradle-wrapper.properties +++ b/boring_to_beautiful/final/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip diff --git a/boring_to_beautiful/final/android/settings.gradle b/boring_to_beautiful/final/android/settings.gradle deleted file mode 100644 index b9e43bd376..0000000000 --- a/boring_to_beautiful/final/android/settings.gradle +++ /dev/null @@ -1,25 +0,0 @@ -pluginManagement { - def flutterSdkPath = { - def properties = new Properties() - file("local.properties").withInputStream { properties.load(it) } - def flutterSdkPath = properties.getProperty("flutter.sdk") - assert flutterSdkPath != null, "flutter.sdk not set in local.properties" - return flutterSdkPath - }() - - includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") - - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} - -plugins { - id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.1.0" apply false - id "org.jetbrains.kotlin.android" version "1.8.22" apply false -} - -include ":app" diff --git a/boring_to_beautiful/final/android/settings.gradle.kts b/boring_to_beautiful/final/android/settings.gradle.kts new file mode 100644 index 0000000000..a439442c20 --- /dev/null +++ b/boring_to_beautiful/final/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.0" apply false + id("org.jetbrains.kotlin.android") version "1.8.22" apply false +} + +include(":app") diff --git a/boring_to_beautiful/final/ios/Podfile b/boring_to_beautiful/final/ios/Podfile index d97f17e223..e549ee22f3 100644 --- a/boring_to_beautiful/final/ios/Podfile +++ b/boring_to_beautiful/final/ios/Podfile @@ -29,7 +29,6 @@ flutter_ios_podfile_setup target 'Runner' do use_frameworks! - use_modular_headers! flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) target 'RunnerTests' do diff --git a/boring_to_beautiful/final/ios/Runner.xcodeproj/project.pbxproj b/boring_to_beautiful/final/ios/Runner.xcodeproj/project.pbxproj index 8c24a73146..91a5b569c8 100644 --- a/boring_to_beautiful/final/ios/Runner.xcodeproj/project.pbxproj +++ b/boring_to_beautiful/final/ios/Runner.xcodeproj/project.pbxproj @@ -10,12 +10,12 @@ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; + 671CB59AD82B9E9C06F754DE /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CA411DCFAEBFDEF75D6D8BD4 /* Pods_RunnerTests.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - 9B56D0E6D2220ABAA3DCF805 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 66AE42AB618EEF74EA35FAFF /* Pods_Runner.framework */; }; - B589DC7DC7B2D3D3438369C2 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E5357285461CA23D84727993 /* Pods_RunnerTests.framework */; }; + BB3CD294AAEBCD41CD4E3134 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6E0ECB7CDFF84F23DB5F6124 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -44,16 +44,17 @@ /* Begin PBXFileReference section */ 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 2CFC8D32DC8431A771DB05E5 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 226563C2A9B812A252291F53 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 316D7F74FED03C168F533517 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 54DBFF5C8D89E736A0167B68 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 5A4EA9B6A5B733A5877FACBC /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 66AE42AB618EEF74EA35FAFF /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 4EF1D045B457A3820A4986D5 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 6E0ECB7CDFF84F23DB5F6124 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; + 82176D7C03C06BCDC246B582 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -61,18 +62,17 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 9CDB7B42A6F8620995CB6CF2 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - CC18E624AAFABC6DD311F438 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - E5357285461CA23D84727993 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - F5AF1F094CAA852F7BFA8616 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + CA411DCFAEBFDEF75D6D8BD4 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D19725268516F588736475DB /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + FCFFBA3399A8A53D16093E48 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 1ECFA6AA5DAB14ADED5C4715 /* Frameworks */ = { + 4334391D0FC29C876193054F /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - B589DC7DC7B2D3D3438369C2 /* Pods_RunnerTests.framework in Frameworks */, + 671CB59AD82B9E9C06F754DE /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -80,7 +80,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 9B56D0E6D2220ABAA3DCF805 /* Pods_Runner.framework in Frameworks */, + BB3CD294AAEBCD41CD4E3134 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -95,6 +95,20 @@ path = RunnerTests; sourceTree = ""; }; + 5000527615145082DFBE3105 /* Pods */ = { + isa = PBXGroup; + children = ( + FCFFBA3399A8A53D16093E48 /* Pods-Runner.debug.xcconfig */, + 316D7F74FED03C168F533517 /* Pods-Runner.release.xcconfig */, + 4EF1D045B457A3820A4986D5 /* Pods-Runner.profile.xcconfig */, + 226563C2A9B812A252291F53 /* Pods-RunnerTests.debug.xcconfig */, + D19725268516F588736475DB /* Pods-RunnerTests.release.xcconfig */, + 82176D7C03C06BCDC246B582 /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( @@ -113,8 +127,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - D3F2C84AD816806F625749C5 /* Pods */, - CB82902E04104E07EF849C18 /* Frameworks */, + 5000527615145082DFBE3105 /* Pods */, + C1515DABE052E90358A1C2F6 /* Frameworks */, ); sourceTree = ""; }; @@ -142,29 +156,15 @@ path = Runner; sourceTree = ""; }; - CB82902E04104E07EF849C18 /* Frameworks */ = { + C1515DABE052E90358A1C2F6 /* Frameworks */ = { isa = PBXGroup; children = ( - 66AE42AB618EEF74EA35FAFF /* Pods_Runner.framework */, - E5357285461CA23D84727993 /* Pods_RunnerTests.framework */, + 6E0ECB7CDFF84F23DB5F6124 /* Pods_Runner.framework */, + CA411DCFAEBFDEF75D6D8BD4 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; }; - D3F2C84AD816806F625749C5 /* Pods */ = { - isa = PBXGroup; - children = ( - 54DBFF5C8D89E736A0167B68 /* Pods-Runner.debug.xcconfig */, - 9CDB7B42A6F8620995CB6CF2 /* Pods-Runner.release.xcconfig */, - CC18E624AAFABC6DD311F438 /* Pods-Runner.profile.xcconfig */, - 5A4EA9B6A5B733A5877FACBC /* Pods-RunnerTests.debug.xcconfig */, - 2CFC8D32DC8431A771DB05E5 /* Pods-RunnerTests.release.xcconfig */, - F5AF1F094CAA852F7BFA8616 /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 34D2B9D1D9CE963363BA0A5B /* [CP] Check Pods Manifest.lock */, + A7B981FC286A2FF9A61E48CB /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 1ECFA6AA5DAB14ADED5C4715 /* Frameworks */, + 4334391D0FC29C876193054F /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 713F52C5655971916519E71C /* [CP] Check Pods Manifest.lock */, + CD48A0B530902637C4AACC3D /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 4B094A3D6BA73A5B5C65723A /* [CP] Embed Pods Frameworks */, + 4469FCF17CB9A07606C6C035 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -270,28 +270,6 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 34D2B9D1D9CE963363BA0A5B /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -308,7 +286,7 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 4B094A3D6BA73A5B5C65723A /* [CP] Embed Pods Frameworks */ = { + 4469FCF17CB9A07606C6C035 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -325,7 +303,22 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - 713F52C5655971916519E71C /* [CP] Check Pods Manifest.lock */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Run Script"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + }; + A7B981FC286A2FF9A61E48CB /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -340,27 +333,34 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { + CD48A0B530902637C4AACC3D /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "Run Script"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 5A4EA9B6A5B733A5877FACBC /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 226563C2A9B812A252291F53 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 2CFC8D32DC8431A771DB05E5 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = D19725268516F588736475DB /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = F5AF1F094CAA852F7BFA8616 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 82176D7C03C06BCDC246B582 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/boring_to_beautiful/final/macos/Podfile b/boring_to_beautiful/final/macos/Podfile index c795730db8..29c8eb3294 100644 --- a/boring_to_beautiful/final/macos/Podfile +++ b/boring_to_beautiful/final/macos/Podfile @@ -28,7 +28,6 @@ flutter_macos_podfile_setup target 'Runner' do use_frameworks! - use_modular_headers! flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__)) target 'RunnerTests' do diff --git a/boring_to_beautiful/final/macos/Runner.xcodeproj/project.pbxproj b/boring_to_beautiful/final/macos/Runner.xcodeproj/project.pbxproj index 934ea98536..1a280355cc 100644 --- a/boring_to_beautiful/final/macos/Runner.xcodeproj/project.pbxproj +++ b/boring_to_beautiful/final/macos/Runner.xcodeproj/project.pbxproj @@ -27,8 +27,8 @@ 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 7D7A4A5CAEB316CD69FCEFCD /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DBF93DFB67EA7D2AD5967AE4 /* Pods_Runner.framework */; }; - A3110385685B3E3544E9425E /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 14444A669D4E611BC45B0FB6 /* Pods_RunnerTests.framework */; }; + 6C9282E92762AB784716D80C /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B5905423224337C683C7EDCA /* Pods_RunnerTests.framework */; }; + DB1A46C1F69CC17C136B0A9E /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D4D8554BE586BE639F1FD64C /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,7 +62,9 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 14444A669D4E611BC45B0FB6 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 0488DA66F228D684684B49A2 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 216DB3BC1594FA41037BD499 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 2EAB116011D6E2B5F687513C /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -79,15 +81,13 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 4ECA459CDC624519673B0579 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - 5BD2C9EEA1CFBEC2C3745D8F /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 600C1700A09B3910703D860B /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 8A22315681F20849245600B8 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 96DF9F51CFB6CC26507FDDD7 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - DBF93DFB67EA7D2AD5967AE4 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - ED098600EDD4C45849C1CA92 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - F432CC14780751D0ECFDA11E /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - F962DA6A47D4A923B2BF1844 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + B0871DD16BB1C2490AA2275E /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + B5905423224337C683C7EDCA /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D4D8554BE586BE639F1FD64C /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - A3110385685B3E3544E9425E /* Pods_RunnerTests.framework in Frameworks */, + 6C9282E92762AB784716D80C /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,13 +103,27 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 7D7A4A5CAEB316CD69FCEFCD /* Pods_Runner.framework in Frameworks */, + DB1A46C1F69CC17C136B0A9E /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 06CAF7184BB358F9D4564A75 /* Pods */ = { + isa = PBXGroup; + children = ( + 600C1700A09B3910703D860B /* Pods-Runner.debug.xcconfig */, + 2EAB116011D6E2B5F687513C /* Pods-Runner.release.xcconfig */, + 96DF9F51CFB6CC26507FDDD7 /* Pods-Runner.profile.xcconfig */, + 216DB3BC1594FA41037BD499 /* Pods-RunnerTests.debug.xcconfig */, + 0488DA66F228D684684B49A2 /* Pods-RunnerTests.release.xcconfig */, + B0871DD16BB1C2490AA2275E /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; 331C80D6294CF71000263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -137,7 +151,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 97F435B99F0F5B9104CCDE86 /* Pods */, + 06CAF7184BB358F9D4564A75 /* Pods */, ); sourceTree = ""; }; @@ -185,25 +199,11 @@ path = Runner; sourceTree = ""; }; - 97F435B99F0F5B9104CCDE86 /* Pods */ = { - isa = PBXGroup; - children = ( - 8A22315681F20849245600B8 /* Pods-Runner.debug.xcconfig */, - ED098600EDD4C45849C1CA92 /* Pods-Runner.release.xcconfig */, - 5BD2C9EEA1CFBEC2C3745D8F /* Pods-Runner.profile.xcconfig */, - F962DA6A47D4A923B2BF1844 /* Pods-RunnerTests.debug.xcconfig */, - 4ECA459CDC624519673B0579 /* Pods-RunnerTests.release.xcconfig */, - F432CC14780751D0ECFDA11E /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - DBF93DFB67EA7D2AD5967AE4 /* Pods_Runner.framework */, - 14444A669D4E611BC45B0FB6 /* Pods_RunnerTests.framework */, + D4D8554BE586BE639F1FD64C /* Pods_Runner.framework */, + B5905423224337C683C7EDCA /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - B4A4E318F1203470DDF09086 /* [CP] Check Pods Manifest.lock */, + D35AE8F757E6F3EFD8D8A682 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 7D680C9A459DF63FFB6BB961 /* [CP] Check Pods Manifest.lock */, + 7EE9D0C28C82EE3F7CEDBA0A /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 924BD049CB0C75A05F45C790 /* [CP] Embed Pods Frameworks */, + 7FA764A838CC8BBB2E73F693 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -361,7 +361,7 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 7D680C9A459DF63FFB6BB961 /* [CP] Check Pods Manifest.lock */ = { + 7EE9D0C28C82EE3F7CEDBA0A /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -383,7 +383,7 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 924BD049CB0C75A05F45C790 /* [CP] Embed Pods Frameworks */ = { + 7FA764A838CC8BBB2E73F693 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -400,7 +400,7 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - B4A4E318F1203470DDF09086 /* [CP] Check Pods Manifest.lock */ = { + D35AE8F757E6F3EFD8D8A682 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = F962DA6A47D4A923B2BF1844 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 216DB3BC1594FA41037BD499 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 4ECA459CDC624519673B0579 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 0488DA66F228D684684B49A2 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = F432CC14780751D0ECFDA11E /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = B0871DD16BB1C2490AA2275E /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/boring_to_beautiful/final/pubspec.yaml b/boring_to_beautiful/final/pubspec.yaml index ad540a91c3..b76acde6ba 100644 --- a/boring_to_beautiful/final/pubspec.yaml +++ b/boring_to_beautiful/final/pubspec.yaml @@ -20,7 +20,7 @@ dependencies: english_words: ^4.0.0 flutter_bloc: ^8.1.6 freezed_annotation: ^2.4.4 - go_router: ^14.5.0 + go_router: ^14.6.0 material_color_utilities: any universal_platform: ^1.1.0 url_launcher: ^6.3.1 diff --git a/boring_to_beautiful/step_02/android/app/build.gradle b/boring_to_beautiful/step_01/android/app/build.gradle.kts similarity index 84% rename from boring_to_beautiful/step_02/android/app/build.gradle rename to boring_to_beautiful/step_01/android/app/build.gradle.kts index 59485b6bb8..e82aa40635 100644 --- a/boring_to_beautiful/step_02/android/app/build.gradle +++ b/boring_to_beautiful/step_01/android/app/build.gradle.kts @@ -1,8 +1,8 @@ plugins { - id "com.android.application" - id "kotlin-android" + id("com.android.application") + id("kotlin-android") // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. - id "dev.flutter.flutter-gradle-plugin" + id("dev.flutter.flutter-gradle-plugin") } android { @@ -16,7 +16,7 @@ android { } kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8 + jvmTarget = JavaVersion.VERSION_1_8.toString() } defaultConfig { @@ -34,7 +34,7 @@ android { release { // TODO: Add your own signing config for the release build. // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig = signingConfigs.debug + signingConfig = signingConfigs.getByName("debug") } } } diff --git a/boring_to_beautiful/step_01/android/build.gradle b/boring_to_beautiful/step_01/android/build.gradle deleted file mode 100644 index d2ffbffa4c..0000000000 --- a/boring_to_beautiful/step_01/android/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = "../build" -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(":app") -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/boring_to_beautiful/step_01/android/build.gradle.kts b/boring_to_beautiful/step_01/android/build.gradle.kts new file mode 100644 index 0000000000..89176ef44e --- /dev/null +++ b/boring_to_beautiful/step_01/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/boring_to_beautiful/step_01/android/gradle.properties b/boring_to_beautiful/step_01/android/gradle.properties index 2597170821..f018a61817 100644 --- a/boring_to_beautiful/step_01/android/gradle.properties +++ b/boring_to_beautiful/step_01/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/boring_to_beautiful/step_01/android/gradle/wrapper/gradle-wrapper.properties b/boring_to_beautiful/step_01/android/gradle/wrapper/gradle-wrapper.properties index 7bb2df6ba6..afa1e8eb0a 100644 --- a/boring_to_beautiful/step_01/android/gradle/wrapper/gradle-wrapper.properties +++ b/boring_to_beautiful/step_01/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip diff --git a/boring_to_beautiful/step_01/android/settings.gradle b/boring_to_beautiful/step_01/android/settings.gradle deleted file mode 100644 index b9e43bd376..0000000000 --- a/boring_to_beautiful/step_01/android/settings.gradle +++ /dev/null @@ -1,25 +0,0 @@ -pluginManagement { - def flutterSdkPath = { - def properties = new Properties() - file("local.properties").withInputStream { properties.load(it) } - def flutterSdkPath = properties.getProperty("flutter.sdk") - assert flutterSdkPath != null, "flutter.sdk not set in local.properties" - return flutterSdkPath - }() - - includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") - - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} - -plugins { - id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.1.0" apply false - id "org.jetbrains.kotlin.android" version "1.8.22" apply false -} - -include ":app" diff --git a/boring_to_beautiful/step_01/android/settings.gradle.kts b/boring_to_beautiful/step_01/android/settings.gradle.kts new file mode 100644 index 0000000000..a439442c20 --- /dev/null +++ b/boring_to_beautiful/step_01/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.0" apply false + id("org.jetbrains.kotlin.android") version "1.8.22" apply false +} + +include(":app") diff --git a/boring_to_beautiful/step_01/ios/Podfile b/boring_to_beautiful/step_01/ios/Podfile index d97f17e223..e549ee22f3 100644 --- a/boring_to_beautiful/step_01/ios/Podfile +++ b/boring_to_beautiful/step_01/ios/Podfile @@ -29,7 +29,6 @@ flutter_ios_podfile_setup target 'Runner' do use_frameworks! - use_modular_headers! flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) target 'RunnerTests' do diff --git a/boring_to_beautiful/step_01/ios/Runner.xcodeproj/project.pbxproj b/boring_to_beautiful/step_01/ios/Runner.xcodeproj/project.pbxproj index 8c24a73146..91a5b569c8 100644 --- a/boring_to_beautiful/step_01/ios/Runner.xcodeproj/project.pbxproj +++ b/boring_to_beautiful/step_01/ios/Runner.xcodeproj/project.pbxproj @@ -10,12 +10,12 @@ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; + 671CB59AD82B9E9C06F754DE /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CA411DCFAEBFDEF75D6D8BD4 /* Pods_RunnerTests.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - 9B56D0E6D2220ABAA3DCF805 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 66AE42AB618EEF74EA35FAFF /* Pods_Runner.framework */; }; - B589DC7DC7B2D3D3438369C2 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E5357285461CA23D84727993 /* Pods_RunnerTests.framework */; }; + BB3CD294AAEBCD41CD4E3134 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6E0ECB7CDFF84F23DB5F6124 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -44,16 +44,17 @@ /* Begin PBXFileReference section */ 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 2CFC8D32DC8431A771DB05E5 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 226563C2A9B812A252291F53 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 316D7F74FED03C168F533517 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 54DBFF5C8D89E736A0167B68 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 5A4EA9B6A5B733A5877FACBC /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 66AE42AB618EEF74EA35FAFF /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 4EF1D045B457A3820A4986D5 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 6E0ECB7CDFF84F23DB5F6124 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; + 82176D7C03C06BCDC246B582 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -61,18 +62,17 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 9CDB7B42A6F8620995CB6CF2 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - CC18E624AAFABC6DD311F438 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - E5357285461CA23D84727993 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - F5AF1F094CAA852F7BFA8616 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + CA411DCFAEBFDEF75D6D8BD4 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D19725268516F588736475DB /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + FCFFBA3399A8A53D16093E48 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 1ECFA6AA5DAB14ADED5C4715 /* Frameworks */ = { + 4334391D0FC29C876193054F /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - B589DC7DC7B2D3D3438369C2 /* Pods_RunnerTests.framework in Frameworks */, + 671CB59AD82B9E9C06F754DE /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -80,7 +80,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 9B56D0E6D2220ABAA3DCF805 /* Pods_Runner.framework in Frameworks */, + BB3CD294AAEBCD41CD4E3134 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -95,6 +95,20 @@ path = RunnerTests; sourceTree = ""; }; + 5000527615145082DFBE3105 /* Pods */ = { + isa = PBXGroup; + children = ( + FCFFBA3399A8A53D16093E48 /* Pods-Runner.debug.xcconfig */, + 316D7F74FED03C168F533517 /* Pods-Runner.release.xcconfig */, + 4EF1D045B457A3820A4986D5 /* Pods-Runner.profile.xcconfig */, + 226563C2A9B812A252291F53 /* Pods-RunnerTests.debug.xcconfig */, + D19725268516F588736475DB /* Pods-RunnerTests.release.xcconfig */, + 82176D7C03C06BCDC246B582 /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( @@ -113,8 +127,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - D3F2C84AD816806F625749C5 /* Pods */, - CB82902E04104E07EF849C18 /* Frameworks */, + 5000527615145082DFBE3105 /* Pods */, + C1515DABE052E90358A1C2F6 /* Frameworks */, ); sourceTree = ""; }; @@ -142,29 +156,15 @@ path = Runner; sourceTree = ""; }; - CB82902E04104E07EF849C18 /* Frameworks */ = { + C1515DABE052E90358A1C2F6 /* Frameworks */ = { isa = PBXGroup; children = ( - 66AE42AB618EEF74EA35FAFF /* Pods_Runner.framework */, - E5357285461CA23D84727993 /* Pods_RunnerTests.framework */, + 6E0ECB7CDFF84F23DB5F6124 /* Pods_Runner.framework */, + CA411DCFAEBFDEF75D6D8BD4 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; }; - D3F2C84AD816806F625749C5 /* Pods */ = { - isa = PBXGroup; - children = ( - 54DBFF5C8D89E736A0167B68 /* Pods-Runner.debug.xcconfig */, - 9CDB7B42A6F8620995CB6CF2 /* Pods-Runner.release.xcconfig */, - CC18E624AAFABC6DD311F438 /* Pods-Runner.profile.xcconfig */, - 5A4EA9B6A5B733A5877FACBC /* Pods-RunnerTests.debug.xcconfig */, - 2CFC8D32DC8431A771DB05E5 /* Pods-RunnerTests.release.xcconfig */, - F5AF1F094CAA852F7BFA8616 /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 34D2B9D1D9CE963363BA0A5B /* [CP] Check Pods Manifest.lock */, + A7B981FC286A2FF9A61E48CB /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 1ECFA6AA5DAB14ADED5C4715 /* Frameworks */, + 4334391D0FC29C876193054F /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 713F52C5655971916519E71C /* [CP] Check Pods Manifest.lock */, + CD48A0B530902637C4AACC3D /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 4B094A3D6BA73A5B5C65723A /* [CP] Embed Pods Frameworks */, + 4469FCF17CB9A07606C6C035 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -270,28 +270,6 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 34D2B9D1D9CE963363BA0A5B /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -308,7 +286,7 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 4B094A3D6BA73A5B5C65723A /* [CP] Embed Pods Frameworks */ = { + 4469FCF17CB9A07606C6C035 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -325,7 +303,22 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - 713F52C5655971916519E71C /* [CP] Check Pods Manifest.lock */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Run Script"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + }; + A7B981FC286A2FF9A61E48CB /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -340,27 +333,34 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { + CD48A0B530902637C4AACC3D /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "Run Script"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 5A4EA9B6A5B733A5877FACBC /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 226563C2A9B812A252291F53 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 2CFC8D32DC8431A771DB05E5 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = D19725268516F588736475DB /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = F5AF1F094CAA852F7BFA8616 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 82176D7C03C06BCDC246B582 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/boring_to_beautiful/step_01/macos/Podfile b/boring_to_beautiful/step_01/macos/Podfile index c795730db8..29c8eb3294 100644 --- a/boring_to_beautiful/step_01/macos/Podfile +++ b/boring_to_beautiful/step_01/macos/Podfile @@ -28,7 +28,6 @@ flutter_macos_podfile_setup target 'Runner' do use_frameworks! - use_modular_headers! flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__)) target 'RunnerTests' do diff --git a/boring_to_beautiful/step_01/macos/Runner.xcodeproj/project.pbxproj b/boring_to_beautiful/step_01/macos/Runner.xcodeproj/project.pbxproj index 934ea98536..1a280355cc 100644 --- a/boring_to_beautiful/step_01/macos/Runner.xcodeproj/project.pbxproj +++ b/boring_to_beautiful/step_01/macos/Runner.xcodeproj/project.pbxproj @@ -27,8 +27,8 @@ 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 7D7A4A5CAEB316CD69FCEFCD /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DBF93DFB67EA7D2AD5967AE4 /* Pods_Runner.framework */; }; - A3110385685B3E3544E9425E /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 14444A669D4E611BC45B0FB6 /* Pods_RunnerTests.framework */; }; + 6C9282E92762AB784716D80C /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B5905423224337C683C7EDCA /* Pods_RunnerTests.framework */; }; + DB1A46C1F69CC17C136B0A9E /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D4D8554BE586BE639F1FD64C /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,7 +62,9 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 14444A669D4E611BC45B0FB6 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 0488DA66F228D684684B49A2 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 216DB3BC1594FA41037BD499 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 2EAB116011D6E2B5F687513C /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -79,15 +81,13 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 4ECA459CDC624519673B0579 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - 5BD2C9EEA1CFBEC2C3745D8F /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 600C1700A09B3910703D860B /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 8A22315681F20849245600B8 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 96DF9F51CFB6CC26507FDDD7 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - DBF93DFB67EA7D2AD5967AE4 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - ED098600EDD4C45849C1CA92 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - F432CC14780751D0ECFDA11E /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - F962DA6A47D4A923B2BF1844 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + B0871DD16BB1C2490AA2275E /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + B5905423224337C683C7EDCA /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D4D8554BE586BE639F1FD64C /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - A3110385685B3E3544E9425E /* Pods_RunnerTests.framework in Frameworks */, + 6C9282E92762AB784716D80C /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,13 +103,27 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 7D7A4A5CAEB316CD69FCEFCD /* Pods_Runner.framework in Frameworks */, + DB1A46C1F69CC17C136B0A9E /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 06CAF7184BB358F9D4564A75 /* Pods */ = { + isa = PBXGroup; + children = ( + 600C1700A09B3910703D860B /* Pods-Runner.debug.xcconfig */, + 2EAB116011D6E2B5F687513C /* Pods-Runner.release.xcconfig */, + 96DF9F51CFB6CC26507FDDD7 /* Pods-Runner.profile.xcconfig */, + 216DB3BC1594FA41037BD499 /* Pods-RunnerTests.debug.xcconfig */, + 0488DA66F228D684684B49A2 /* Pods-RunnerTests.release.xcconfig */, + B0871DD16BB1C2490AA2275E /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; 331C80D6294CF71000263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -137,7 +151,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 97F435B99F0F5B9104CCDE86 /* Pods */, + 06CAF7184BB358F9D4564A75 /* Pods */, ); sourceTree = ""; }; @@ -185,25 +199,11 @@ path = Runner; sourceTree = ""; }; - 97F435B99F0F5B9104CCDE86 /* Pods */ = { - isa = PBXGroup; - children = ( - 8A22315681F20849245600B8 /* Pods-Runner.debug.xcconfig */, - ED098600EDD4C45849C1CA92 /* Pods-Runner.release.xcconfig */, - 5BD2C9EEA1CFBEC2C3745D8F /* Pods-Runner.profile.xcconfig */, - F962DA6A47D4A923B2BF1844 /* Pods-RunnerTests.debug.xcconfig */, - 4ECA459CDC624519673B0579 /* Pods-RunnerTests.release.xcconfig */, - F432CC14780751D0ECFDA11E /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - DBF93DFB67EA7D2AD5967AE4 /* Pods_Runner.framework */, - 14444A669D4E611BC45B0FB6 /* Pods_RunnerTests.framework */, + D4D8554BE586BE639F1FD64C /* Pods_Runner.framework */, + B5905423224337C683C7EDCA /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - B4A4E318F1203470DDF09086 /* [CP] Check Pods Manifest.lock */, + D35AE8F757E6F3EFD8D8A682 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 7D680C9A459DF63FFB6BB961 /* [CP] Check Pods Manifest.lock */, + 7EE9D0C28C82EE3F7CEDBA0A /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 924BD049CB0C75A05F45C790 /* [CP] Embed Pods Frameworks */, + 7FA764A838CC8BBB2E73F693 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -361,7 +361,7 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 7D680C9A459DF63FFB6BB961 /* [CP] Check Pods Manifest.lock */ = { + 7EE9D0C28C82EE3F7CEDBA0A /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -383,7 +383,7 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 924BD049CB0C75A05F45C790 /* [CP] Embed Pods Frameworks */ = { + 7FA764A838CC8BBB2E73F693 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -400,7 +400,7 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - B4A4E318F1203470DDF09086 /* [CP] Check Pods Manifest.lock */ = { + D35AE8F757E6F3EFD8D8A682 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = F962DA6A47D4A923B2BF1844 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 216DB3BC1594FA41037BD499 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 4ECA459CDC624519673B0579 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 0488DA66F228D684684B49A2 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = F432CC14780751D0ECFDA11E /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = B0871DD16BB1C2490AA2275E /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/boring_to_beautiful/step_01/pubspec.yaml b/boring_to_beautiful/step_01/pubspec.yaml index 4bb4b3b74a..ee295bc09a 100644 --- a/boring_to_beautiful/step_01/pubspec.yaml +++ b/boring_to_beautiful/step_01/pubspec.yaml @@ -20,7 +20,7 @@ dependencies: english_words: ^4.0.0 flutter_bloc: ^8.1.6 freezed_annotation: ^2.4.4 - go_router: ^14.5.0 + go_router: ^14.6.0 material_color_utilities: any universal_platform: ^1.1.0 url_launcher: ^6.3.1 diff --git a/boring_to_beautiful/step_03/android/app/build.gradle b/boring_to_beautiful/step_02/android/app/build.gradle.kts similarity index 84% rename from boring_to_beautiful/step_03/android/app/build.gradle rename to boring_to_beautiful/step_02/android/app/build.gradle.kts index 59485b6bb8..e82aa40635 100644 --- a/boring_to_beautiful/step_03/android/app/build.gradle +++ b/boring_to_beautiful/step_02/android/app/build.gradle.kts @@ -1,8 +1,8 @@ plugins { - id "com.android.application" - id "kotlin-android" + id("com.android.application") + id("kotlin-android") // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. - id "dev.flutter.flutter-gradle-plugin" + id("dev.flutter.flutter-gradle-plugin") } android { @@ -16,7 +16,7 @@ android { } kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8 + jvmTarget = JavaVersion.VERSION_1_8.toString() } defaultConfig { @@ -34,7 +34,7 @@ android { release { // TODO: Add your own signing config for the release build. // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig = signingConfigs.debug + signingConfig = signingConfigs.getByName("debug") } } } diff --git a/boring_to_beautiful/step_02/android/build.gradle b/boring_to_beautiful/step_02/android/build.gradle deleted file mode 100644 index d2ffbffa4c..0000000000 --- a/boring_to_beautiful/step_02/android/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = "../build" -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(":app") -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/boring_to_beautiful/step_02/android/build.gradle.kts b/boring_to_beautiful/step_02/android/build.gradle.kts new file mode 100644 index 0000000000..89176ef44e --- /dev/null +++ b/boring_to_beautiful/step_02/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/boring_to_beautiful/step_02/android/gradle.properties b/boring_to_beautiful/step_02/android/gradle.properties index 2597170821..f018a61817 100644 --- a/boring_to_beautiful/step_02/android/gradle.properties +++ b/boring_to_beautiful/step_02/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/boring_to_beautiful/step_02/android/gradle/wrapper/gradle-wrapper.properties b/boring_to_beautiful/step_02/android/gradle/wrapper/gradle-wrapper.properties index 7bb2df6ba6..afa1e8eb0a 100644 --- a/boring_to_beautiful/step_02/android/gradle/wrapper/gradle-wrapper.properties +++ b/boring_to_beautiful/step_02/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip diff --git a/boring_to_beautiful/step_02/android/settings.gradle b/boring_to_beautiful/step_02/android/settings.gradle deleted file mode 100644 index b9e43bd376..0000000000 --- a/boring_to_beautiful/step_02/android/settings.gradle +++ /dev/null @@ -1,25 +0,0 @@ -pluginManagement { - def flutterSdkPath = { - def properties = new Properties() - file("local.properties").withInputStream { properties.load(it) } - def flutterSdkPath = properties.getProperty("flutter.sdk") - assert flutterSdkPath != null, "flutter.sdk not set in local.properties" - return flutterSdkPath - }() - - includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") - - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} - -plugins { - id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.1.0" apply false - id "org.jetbrains.kotlin.android" version "1.8.22" apply false -} - -include ":app" diff --git a/boring_to_beautiful/step_02/android/settings.gradle.kts b/boring_to_beautiful/step_02/android/settings.gradle.kts new file mode 100644 index 0000000000..a439442c20 --- /dev/null +++ b/boring_to_beautiful/step_02/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.0" apply false + id("org.jetbrains.kotlin.android") version "1.8.22" apply false +} + +include(":app") diff --git a/boring_to_beautiful/step_02/ios/Podfile b/boring_to_beautiful/step_02/ios/Podfile index d97f17e223..e549ee22f3 100644 --- a/boring_to_beautiful/step_02/ios/Podfile +++ b/boring_to_beautiful/step_02/ios/Podfile @@ -29,7 +29,6 @@ flutter_ios_podfile_setup target 'Runner' do use_frameworks! - use_modular_headers! flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) target 'RunnerTests' do diff --git a/boring_to_beautiful/step_02/ios/Runner.xcodeproj/project.pbxproj b/boring_to_beautiful/step_02/ios/Runner.xcodeproj/project.pbxproj index 8c24a73146..91a5b569c8 100644 --- a/boring_to_beautiful/step_02/ios/Runner.xcodeproj/project.pbxproj +++ b/boring_to_beautiful/step_02/ios/Runner.xcodeproj/project.pbxproj @@ -10,12 +10,12 @@ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; + 671CB59AD82B9E9C06F754DE /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CA411DCFAEBFDEF75D6D8BD4 /* Pods_RunnerTests.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - 9B56D0E6D2220ABAA3DCF805 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 66AE42AB618EEF74EA35FAFF /* Pods_Runner.framework */; }; - B589DC7DC7B2D3D3438369C2 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E5357285461CA23D84727993 /* Pods_RunnerTests.framework */; }; + BB3CD294AAEBCD41CD4E3134 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6E0ECB7CDFF84F23DB5F6124 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -44,16 +44,17 @@ /* Begin PBXFileReference section */ 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 2CFC8D32DC8431A771DB05E5 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 226563C2A9B812A252291F53 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 316D7F74FED03C168F533517 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 54DBFF5C8D89E736A0167B68 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 5A4EA9B6A5B733A5877FACBC /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 66AE42AB618EEF74EA35FAFF /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 4EF1D045B457A3820A4986D5 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 6E0ECB7CDFF84F23DB5F6124 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; + 82176D7C03C06BCDC246B582 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -61,18 +62,17 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 9CDB7B42A6F8620995CB6CF2 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - CC18E624AAFABC6DD311F438 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - E5357285461CA23D84727993 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - F5AF1F094CAA852F7BFA8616 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + CA411DCFAEBFDEF75D6D8BD4 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D19725268516F588736475DB /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + FCFFBA3399A8A53D16093E48 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 1ECFA6AA5DAB14ADED5C4715 /* Frameworks */ = { + 4334391D0FC29C876193054F /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - B589DC7DC7B2D3D3438369C2 /* Pods_RunnerTests.framework in Frameworks */, + 671CB59AD82B9E9C06F754DE /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -80,7 +80,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 9B56D0E6D2220ABAA3DCF805 /* Pods_Runner.framework in Frameworks */, + BB3CD294AAEBCD41CD4E3134 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -95,6 +95,20 @@ path = RunnerTests; sourceTree = ""; }; + 5000527615145082DFBE3105 /* Pods */ = { + isa = PBXGroup; + children = ( + FCFFBA3399A8A53D16093E48 /* Pods-Runner.debug.xcconfig */, + 316D7F74FED03C168F533517 /* Pods-Runner.release.xcconfig */, + 4EF1D045B457A3820A4986D5 /* Pods-Runner.profile.xcconfig */, + 226563C2A9B812A252291F53 /* Pods-RunnerTests.debug.xcconfig */, + D19725268516F588736475DB /* Pods-RunnerTests.release.xcconfig */, + 82176D7C03C06BCDC246B582 /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( @@ -113,8 +127,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - D3F2C84AD816806F625749C5 /* Pods */, - CB82902E04104E07EF849C18 /* Frameworks */, + 5000527615145082DFBE3105 /* Pods */, + C1515DABE052E90358A1C2F6 /* Frameworks */, ); sourceTree = ""; }; @@ -142,29 +156,15 @@ path = Runner; sourceTree = ""; }; - CB82902E04104E07EF849C18 /* Frameworks */ = { + C1515DABE052E90358A1C2F6 /* Frameworks */ = { isa = PBXGroup; children = ( - 66AE42AB618EEF74EA35FAFF /* Pods_Runner.framework */, - E5357285461CA23D84727993 /* Pods_RunnerTests.framework */, + 6E0ECB7CDFF84F23DB5F6124 /* Pods_Runner.framework */, + CA411DCFAEBFDEF75D6D8BD4 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; }; - D3F2C84AD816806F625749C5 /* Pods */ = { - isa = PBXGroup; - children = ( - 54DBFF5C8D89E736A0167B68 /* Pods-Runner.debug.xcconfig */, - 9CDB7B42A6F8620995CB6CF2 /* Pods-Runner.release.xcconfig */, - CC18E624AAFABC6DD311F438 /* Pods-Runner.profile.xcconfig */, - 5A4EA9B6A5B733A5877FACBC /* Pods-RunnerTests.debug.xcconfig */, - 2CFC8D32DC8431A771DB05E5 /* Pods-RunnerTests.release.xcconfig */, - F5AF1F094CAA852F7BFA8616 /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 34D2B9D1D9CE963363BA0A5B /* [CP] Check Pods Manifest.lock */, + A7B981FC286A2FF9A61E48CB /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 1ECFA6AA5DAB14ADED5C4715 /* Frameworks */, + 4334391D0FC29C876193054F /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 713F52C5655971916519E71C /* [CP] Check Pods Manifest.lock */, + CD48A0B530902637C4AACC3D /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 4B094A3D6BA73A5B5C65723A /* [CP] Embed Pods Frameworks */, + 4469FCF17CB9A07606C6C035 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -270,28 +270,6 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 34D2B9D1D9CE963363BA0A5B /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -308,7 +286,7 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 4B094A3D6BA73A5B5C65723A /* [CP] Embed Pods Frameworks */ = { + 4469FCF17CB9A07606C6C035 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -325,7 +303,22 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - 713F52C5655971916519E71C /* [CP] Check Pods Manifest.lock */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Run Script"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + }; + A7B981FC286A2FF9A61E48CB /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -340,27 +333,34 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { + CD48A0B530902637C4AACC3D /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "Run Script"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 5A4EA9B6A5B733A5877FACBC /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 226563C2A9B812A252291F53 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 2CFC8D32DC8431A771DB05E5 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = D19725268516F588736475DB /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = F5AF1F094CAA852F7BFA8616 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 82176D7C03C06BCDC246B582 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/boring_to_beautiful/step_02/macos/Podfile b/boring_to_beautiful/step_02/macos/Podfile index c795730db8..29c8eb3294 100644 --- a/boring_to_beautiful/step_02/macos/Podfile +++ b/boring_to_beautiful/step_02/macos/Podfile @@ -28,7 +28,6 @@ flutter_macos_podfile_setup target 'Runner' do use_frameworks! - use_modular_headers! flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__)) target 'RunnerTests' do diff --git a/boring_to_beautiful/step_02/macos/Runner.xcodeproj/project.pbxproj b/boring_to_beautiful/step_02/macos/Runner.xcodeproj/project.pbxproj index 934ea98536..1a280355cc 100644 --- a/boring_to_beautiful/step_02/macos/Runner.xcodeproj/project.pbxproj +++ b/boring_to_beautiful/step_02/macos/Runner.xcodeproj/project.pbxproj @@ -27,8 +27,8 @@ 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 7D7A4A5CAEB316CD69FCEFCD /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DBF93DFB67EA7D2AD5967AE4 /* Pods_Runner.framework */; }; - A3110385685B3E3544E9425E /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 14444A669D4E611BC45B0FB6 /* Pods_RunnerTests.framework */; }; + 6C9282E92762AB784716D80C /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B5905423224337C683C7EDCA /* Pods_RunnerTests.framework */; }; + DB1A46C1F69CC17C136B0A9E /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D4D8554BE586BE639F1FD64C /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,7 +62,9 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 14444A669D4E611BC45B0FB6 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 0488DA66F228D684684B49A2 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 216DB3BC1594FA41037BD499 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 2EAB116011D6E2B5F687513C /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -79,15 +81,13 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 4ECA459CDC624519673B0579 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - 5BD2C9EEA1CFBEC2C3745D8F /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 600C1700A09B3910703D860B /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 8A22315681F20849245600B8 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 96DF9F51CFB6CC26507FDDD7 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - DBF93DFB67EA7D2AD5967AE4 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - ED098600EDD4C45849C1CA92 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - F432CC14780751D0ECFDA11E /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - F962DA6A47D4A923B2BF1844 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + B0871DD16BB1C2490AA2275E /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + B5905423224337C683C7EDCA /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D4D8554BE586BE639F1FD64C /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - A3110385685B3E3544E9425E /* Pods_RunnerTests.framework in Frameworks */, + 6C9282E92762AB784716D80C /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,13 +103,27 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 7D7A4A5CAEB316CD69FCEFCD /* Pods_Runner.framework in Frameworks */, + DB1A46C1F69CC17C136B0A9E /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 06CAF7184BB358F9D4564A75 /* Pods */ = { + isa = PBXGroup; + children = ( + 600C1700A09B3910703D860B /* Pods-Runner.debug.xcconfig */, + 2EAB116011D6E2B5F687513C /* Pods-Runner.release.xcconfig */, + 96DF9F51CFB6CC26507FDDD7 /* Pods-Runner.profile.xcconfig */, + 216DB3BC1594FA41037BD499 /* Pods-RunnerTests.debug.xcconfig */, + 0488DA66F228D684684B49A2 /* Pods-RunnerTests.release.xcconfig */, + B0871DD16BB1C2490AA2275E /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; 331C80D6294CF71000263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -137,7 +151,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 97F435B99F0F5B9104CCDE86 /* Pods */, + 06CAF7184BB358F9D4564A75 /* Pods */, ); sourceTree = ""; }; @@ -185,25 +199,11 @@ path = Runner; sourceTree = ""; }; - 97F435B99F0F5B9104CCDE86 /* Pods */ = { - isa = PBXGroup; - children = ( - 8A22315681F20849245600B8 /* Pods-Runner.debug.xcconfig */, - ED098600EDD4C45849C1CA92 /* Pods-Runner.release.xcconfig */, - 5BD2C9EEA1CFBEC2C3745D8F /* Pods-Runner.profile.xcconfig */, - F962DA6A47D4A923B2BF1844 /* Pods-RunnerTests.debug.xcconfig */, - 4ECA459CDC624519673B0579 /* Pods-RunnerTests.release.xcconfig */, - F432CC14780751D0ECFDA11E /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - DBF93DFB67EA7D2AD5967AE4 /* Pods_Runner.framework */, - 14444A669D4E611BC45B0FB6 /* Pods_RunnerTests.framework */, + D4D8554BE586BE639F1FD64C /* Pods_Runner.framework */, + B5905423224337C683C7EDCA /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - B4A4E318F1203470DDF09086 /* [CP] Check Pods Manifest.lock */, + D35AE8F757E6F3EFD8D8A682 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 7D680C9A459DF63FFB6BB961 /* [CP] Check Pods Manifest.lock */, + 7EE9D0C28C82EE3F7CEDBA0A /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 924BD049CB0C75A05F45C790 /* [CP] Embed Pods Frameworks */, + 7FA764A838CC8BBB2E73F693 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -361,7 +361,7 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 7D680C9A459DF63FFB6BB961 /* [CP] Check Pods Manifest.lock */ = { + 7EE9D0C28C82EE3F7CEDBA0A /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -383,7 +383,7 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 924BD049CB0C75A05F45C790 /* [CP] Embed Pods Frameworks */ = { + 7FA764A838CC8BBB2E73F693 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -400,7 +400,7 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - B4A4E318F1203470DDF09086 /* [CP] Check Pods Manifest.lock */ = { + D35AE8F757E6F3EFD8D8A682 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = F962DA6A47D4A923B2BF1844 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 216DB3BC1594FA41037BD499 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 4ECA459CDC624519673B0579 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 0488DA66F228D684684B49A2 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = F432CC14780751D0ECFDA11E /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = B0871DD16BB1C2490AA2275E /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/boring_to_beautiful/step_02/pubspec.yaml b/boring_to_beautiful/step_02/pubspec.yaml index 4bb4b3b74a..ee295bc09a 100644 --- a/boring_to_beautiful/step_02/pubspec.yaml +++ b/boring_to_beautiful/step_02/pubspec.yaml @@ -20,7 +20,7 @@ dependencies: english_words: ^4.0.0 flutter_bloc: ^8.1.6 freezed_annotation: ^2.4.4 - go_router: ^14.5.0 + go_router: ^14.6.0 material_color_utilities: any universal_platform: ^1.1.0 url_launcher: ^6.3.1 diff --git a/boring_to_beautiful/step_01/android/app/build.gradle b/boring_to_beautiful/step_03/android/app/build.gradle.kts similarity index 84% rename from boring_to_beautiful/step_01/android/app/build.gradle rename to boring_to_beautiful/step_03/android/app/build.gradle.kts index 59485b6bb8..e82aa40635 100644 --- a/boring_to_beautiful/step_01/android/app/build.gradle +++ b/boring_to_beautiful/step_03/android/app/build.gradle.kts @@ -1,8 +1,8 @@ plugins { - id "com.android.application" - id "kotlin-android" + id("com.android.application") + id("kotlin-android") // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. - id "dev.flutter.flutter-gradle-plugin" + id("dev.flutter.flutter-gradle-plugin") } android { @@ -16,7 +16,7 @@ android { } kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8 + jvmTarget = JavaVersion.VERSION_1_8.toString() } defaultConfig { @@ -34,7 +34,7 @@ android { release { // TODO: Add your own signing config for the release build. // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig = signingConfigs.debug + signingConfig = signingConfigs.getByName("debug") } } } diff --git a/boring_to_beautiful/step_03/android/build.gradle b/boring_to_beautiful/step_03/android/build.gradle deleted file mode 100644 index d2ffbffa4c..0000000000 --- a/boring_to_beautiful/step_03/android/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = "../build" -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(":app") -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/boring_to_beautiful/step_03/android/build.gradle.kts b/boring_to_beautiful/step_03/android/build.gradle.kts new file mode 100644 index 0000000000..89176ef44e --- /dev/null +++ b/boring_to_beautiful/step_03/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/boring_to_beautiful/step_03/android/gradle.properties b/boring_to_beautiful/step_03/android/gradle.properties index 2597170821..f018a61817 100644 --- a/boring_to_beautiful/step_03/android/gradle.properties +++ b/boring_to_beautiful/step_03/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/boring_to_beautiful/step_03/android/gradle/wrapper/gradle-wrapper.properties b/boring_to_beautiful/step_03/android/gradle/wrapper/gradle-wrapper.properties index 7bb2df6ba6..afa1e8eb0a 100644 --- a/boring_to_beautiful/step_03/android/gradle/wrapper/gradle-wrapper.properties +++ b/boring_to_beautiful/step_03/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip diff --git a/boring_to_beautiful/step_03/android/settings.gradle b/boring_to_beautiful/step_03/android/settings.gradle deleted file mode 100644 index b9e43bd376..0000000000 --- a/boring_to_beautiful/step_03/android/settings.gradle +++ /dev/null @@ -1,25 +0,0 @@ -pluginManagement { - def flutterSdkPath = { - def properties = new Properties() - file("local.properties").withInputStream { properties.load(it) } - def flutterSdkPath = properties.getProperty("flutter.sdk") - assert flutterSdkPath != null, "flutter.sdk not set in local.properties" - return flutterSdkPath - }() - - includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") - - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} - -plugins { - id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.1.0" apply false - id "org.jetbrains.kotlin.android" version "1.8.22" apply false -} - -include ":app" diff --git a/boring_to_beautiful/step_03/android/settings.gradle.kts b/boring_to_beautiful/step_03/android/settings.gradle.kts new file mode 100644 index 0000000000..a439442c20 --- /dev/null +++ b/boring_to_beautiful/step_03/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.0" apply false + id("org.jetbrains.kotlin.android") version "1.8.22" apply false +} + +include(":app") diff --git a/boring_to_beautiful/step_03/ios/Podfile b/boring_to_beautiful/step_03/ios/Podfile index d97f17e223..e549ee22f3 100644 --- a/boring_to_beautiful/step_03/ios/Podfile +++ b/boring_to_beautiful/step_03/ios/Podfile @@ -29,7 +29,6 @@ flutter_ios_podfile_setup target 'Runner' do use_frameworks! - use_modular_headers! flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) target 'RunnerTests' do diff --git a/boring_to_beautiful/step_03/ios/Runner.xcodeproj/project.pbxproj b/boring_to_beautiful/step_03/ios/Runner.xcodeproj/project.pbxproj index 8c24a73146..91a5b569c8 100644 --- a/boring_to_beautiful/step_03/ios/Runner.xcodeproj/project.pbxproj +++ b/boring_to_beautiful/step_03/ios/Runner.xcodeproj/project.pbxproj @@ -10,12 +10,12 @@ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; + 671CB59AD82B9E9C06F754DE /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CA411DCFAEBFDEF75D6D8BD4 /* Pods_RunnerTests.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - 9B56D0E6D2220ABAA3DCF805 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 66AE42AB618EEF74EA35FAFF /* Pods_Runner.framework */; }; - B589DC7DC7B2D3D3438369C2 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E5357285461CA23D84727993 /* Pods_RunnerTests.framework */; }; + BB3CD294AAEBCD41CD4E3134 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6E0ECB7CDFF84F23DB5F6124 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -44,16 +44,17 @@ /* Begin PBXFileReference section */ 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 2CFC8D32DC8431A771DB05E5 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 226563C2A9B812A252291F53 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 316D7F74FED03C168F533517 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 54DBFF5C8D89E736A0167B68 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 5A4EA9B6A5B733A5877FACBC /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 66AE42AB618EEF74EA35FAFF /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 4EF1D045B457A3820A4986D5 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 6E0ECB7CDFF84F23DB5F6124 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; + 82176D7C03C06BCDC246B582 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -61,18 +62,17 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 9CDB7B42A6F8620995CB6CF2 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - CC18E624AAFABC6DD311F438 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - E5357285461CA23D84727993 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - F5AF1F094CAA852F7BFA8616 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + CA411DCFAEBFDEF75D6D8BD4 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D19725268516F588736475DB /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + FCFFBA3399A8A53D16093E48 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 1ECFA6AA5DAB14ADED5C4715 /* Frameworks */ = { + 4334391D0FC29C876193054F /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - B589DC7DC7B2D3D3438369C2 /* Pods_RunnerTests.framework in Frameworks */, + 671CB59AD82B9E9C06F754DE /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -80,7 +80,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 9B56D0E6D2220ABAA3DCF805 /* Pods_Runner.framework in Frameworks */, + BB3CD294AAEBCD41CD4E3134 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -95,6 +95,20 @@ path = RunnerTests; sourceTree = ""; }; + 5000527615145082DFBE3105 /* Pods */ = { + isa = PBXGroup; + children = ( + FCFFBA3399A8A53D16093E48 /* Pods-Runner.debug.xcconfig */, + 316D7F74FED03C168F533517 /* Pods-Runner.release.xcconfig */, + 4EF1D045B457A3820A4986D5 /* Pods-Runner.profile.xcconfig */, + 226563C2A9B812A252291F53 /* Pods-RunnerTests.debug.xcconfig */, + D19725268516F588736475DB /* Pods-RunnerTests.release.xcconfig */, + 82176D7C03C06BCDC246B582 /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( @@ -113,8 +127,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - D3F2C84AD816806F625749C5 /* Pods */, - CB82902E04104E07EF849C18 /* Frameworks */, + 5000527615145082DFBE3105 /* Pods */, + C1515DABE052E90358A1C2F6 /* Frameworks */, ); sourceTree = ""; }; @@ -142,29 +156,15 @@ path = Runner; sourceTree = ""; }; - CB82902E04104E07EF849C18 /* Frameworks */ = { + C1515DABE052E90358A1C2F6 /* Frameworks */ = { isa = PBXGroup; children = ( - 66AE42AB618EEF74EA35FAFF /* Pods_Runner.framework */, - E5357285461CA23D84727993 /* Pods_RunnerTests.framework */, + 6E0ECB7CDFF84F23DB5F6124 /* Pods_Runner.framework */, + CA411DCFAEBFDEF75D6D8BD4 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; }; - D3F2C84AD816806F625749C5 /* Pods */ = { - isa = PBXGroup; - children = ( - 54DBFF5C8D89E736A0167B68 /* Pods-Runner.debug.xcconfig */, - 9CDB7B42A6F8620995CB6CF2 /* Pods-Runner.release.xcconfig */, - CC18E624AAFABC6DD311F438 /* Pods-Runner.profile.xcconfig */, - 5A4EA9B6A5B733A5877FACBC /* Pods-RunnerTests.debug.xcconfig */, - 2CFC8D32DC8431A771DB05E5 /* Pods-RunnerTests.release.xcconfig */, - F5AF1F094CAA852F7BFA8616 /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 34D2B9D1D9CE963363BA0A5B /* [CP] Check Pods Manifest.lock */, + A7B981FC286A2FF9A61E48CB /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 1ECFA6AA5DAB14ADED5C4715 /* Frameworks */, + 4334391D0FC29C876193054F /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 713F52C5655971916519E71C /* [CP] Check Pods Manifest.lock */, + CD48A0B530902637C4AACC3D /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 4B094A3D6BA73A5B5C65723A /* [CP] Embed Pods Frameworks */, + 4469FCF17CB9A07606C6C035 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -270,28 +270,6 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 34D2B9D1D9CE963363BA0A5B /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -308,7 +286,7 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 4B094A3D6BA73A5B5C65723A /* [CP] Embed Pods Frameworks */ = { + 4469FCF17CB9A07606C6C035 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -325,7 +303,22 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - 713F52C5655971916519E71C /* [CP] Check Pods Manifest.lock */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Run Script"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + }; + A7B981FC286A2FF9A61E48CB /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -340,27 +333,34 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { + CD48A0B530902637C4AACC3D /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "Run Script"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 5A4EA9B6A5B733A5877FACBC /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 226563C2A9B812A252291F53 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 2CFC8D32DC8431A771DB05E5 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = D19725268516F588736475DB /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = F5AF1F094CAA852F7BFA8616 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 82176D7C03C06BCDC246B582 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/boring_to_beautiful/step_03/macos/Podfile b/boring_to_beautiful/step_03/macos/Podfile index c795730db8..29c8eb3294 100644 --- a/boring_to_beautiful/step_03/macos/Podfile +++ b/boring_to_beautiful/step_03/macos/Podfile @@ -28,7 +28,6 @@ flutter_macos_podfile_setup target 'Runner' do use_frameworks! - use_modular_headers! flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__)) target 'RunnerTests' do diff --git a/boring_to_beautiful/step_03/macos/Runner.xcodeproj/project.pbxproj b/boring_to_beautiful/step_03/macos/Runner.xcodeproj/project.pbxproj index 934ea98536..1a280355cc 100644 --- a/boring_to_beautiful/step_03/macos/Runner.xcodeproj/project.pbxproj +++ b/boring_to_beautiful/step_03/macos/Runner.xcodeproj/project.pbxproj @@ -27,8 +27,8 @@ 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 7D7A4A5CAEB316CD69FCEFCD /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DBF93DFB67EA7D2AD5967AE4 /* Pods_Runner.framework */; }; - A3110385685B3E3544E9425E /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 14444A669D4E611BC45B0FB6 /* Pods_RunnerTests.framework */; }; + 6C9282E92762AB784716D80C /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B5905423224337C683C7EDCA /* Pods_RunnerTests.framework */; }; + DB1A46C1F69CC17C136B0A9E /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D4D8554BE586BE639F1FD64C /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,7 +62,9 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 14444A669D4E611BC45B0FB6 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 0488DA66F228D684684B49A2 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 216DB3BC1594FA41037BD499 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 2EAB116011D6E2B5F687513C /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -79,15 +81,13 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 4ECA459CDC624519673B0579 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - 5BD2C9EEA1CFBEC2C3745D8F /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 600C1700A09B3910703D860B /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 8A22315681F20849245600B8 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 96DF9F51CFB6CC26507FDDD7 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - DBF93DFB67EA7D2AD5967AE4 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - ED098600EDD4C45849C1CA92 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - F432CC14780751D0ECFDA11E /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - F962DA6A47D4A923B2BF1844 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + B0871DD16BB1C2490AA2275E /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + B5905423224337C683C7EDCA /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D4D8554BE586BE639F1FD64C /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - A3110385685B3E3544E9425E /* Pods_RunnerTests.framework in Frameworks */, + 6C9282E92762AB784716D80C /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,13 +103,27 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 7D7A4A5CAEB316CD69FCEFCD /* Pods_Runner.framework in Frameworks */, + DB1A46C1F69CC17C136B0A9E /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 06CAF7184BB358F9D4564A75 /* Pods */ = { + isa = PBXGroup; + children = ( + 600C1700A09B3910703D860B /* Pods-Runner.debug.xcconfig */, + 2EAB116011D6E2B5F687513C /* Pods-Runner.release.xcconfig */, + 96DF9F51CFB6CC26507FDDD7 /* Pods-Runner.profile.xcconfig */, + 216DB3BC1594FA41037BD499 /* Pods-RunnerTests.debug.xcconfig */, + 0488DA66F228D684684B49A2 /* Pods-RunnerTests.release.xcconfig */, + B0871DD16BB1C2490AA2275E /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; 331C80D6294CF71000263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -137,7 +151,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 97F435B99F0F5B9104CCDE86 /* Pods */, + 06CAF7184BB358F9D4564A75 /* Pods */, ); sourceTree = ""; }; @@ -185,25 +199,11 @@ path = Runner; sourceTree = ""; }; - 97F435B99F0F5B9104CCDE86 /* Pods */ = { - isa = PBXGroup; - children = ( - 8A22315681F20849245600B8 /* Pods-Runner.debug.xcconfig */, - ED098600EDD4C45849C1CA92 /* Pods-Runner.release.xcconfig */, - 5BD2C9EEA1CFBEC2C3745D8F /* Pods-Runner.profile.xcconfig */, - F962DA6A47D4A923B2BF1844 /* Pods-RunnerTests.debug.xcconfig */, - 4ECA459CDC624519673B0579 /* Pods-RunnerTests.release.xcconfig */, - F432CC14780751D0ECFDA11E /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - DBF93DFB67EA7D2AD5967AE4 /* Pods_Runner.framework */, - 14444A669D4E611BC45B0FB6 /* Pods_RunnerTests.framework */, + D4D8554BE586BE639F1FD64C /* Pods_Runner.framework */, + B5905423224337C683C7EDCA /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - B4A4E318F1203470DDF09086 /* [CP] Check Pods Manifest.lock */, + D35AE8F757E6F3EFD8D8A682 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 7D680C9A459DF63FFB6BB961 /* [CP] Check Pods Manifest.lock */, + 7EE9D0C28C82EE3F7CEDBA0A /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 924BD049CB0C75A05F45C790 /* [CP] Embed Pods Frameworks */, + 7FA764A838CC8BBB2E73F693 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -361,7 +361,7 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 7D680C9A459DF63FFB6BB961 /* [CP] Check Pods Manifest.lock */ = { + 7EE9D0C28C82EE3F7CEDBA0A /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -383,7 +383,7 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 924BD049CB0C75A05F45C790 /* [CP] Embed Pods Frameworks */ = { + 7FA764A838CC8BBB2E73F693 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -400,7 +400,7 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - B4A4E318F1203470DDF09086 /* [CP] Check Pods Manifest.lock */ = { + D35AE8F757E6F3EFD8D8A682 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = F962DA6A47D4A923B2BF1844 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 216DB3BC1594FA41037BD499 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 4ECA459CDC624519673B0579 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 0488DA66F228D684684B49A2 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = F432CC14780751D0ECFDA11E /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = B0871DD16BB1C2490AA2275E /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/boring_to_beautiful/step_03/pubspec.yaml b/boring_to_beautiful/step_03/pubspec.yaml index ad540a91c3..b76acde6ba 100644 --- a/boring_to_beautiful/step_03/pubspec.yaml +++ b/boring_to_beautiful/step_03/pubspec.yaml @@ -20,7 +20,7 @@ dependencies: english_words: ^4.0.0 flutter_bloc: ^8.1.6 freezed_annotation: ^2.4.4 - go_router: ^14.5.0 + go_router: ^14.6.0 material_color_utilities: any universal_platform: ^1.1.0 url_launcher: ^6.3.1 diff --git a/boring_to_beautiful/step_04/android/app/build.gradle b/boring_to_beautiful/step_04/android/app/build.gradle deleted file mode 100644 index 59485b6bb8..0000000000 --- a/boring_to_beautiful/step_04/android/app/build.gradle +++ /dev/null @@ -1,44 +0,0 @@ -plugins { - id "com.android.application" - id "kotlin-android" - // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. - id "dev.flutter.flutter-gradle-plugin" -} - -android { - namespace = "com.example.myartist" - compileSdk = flutter.compileSdkVersion - ndkVersion = flutter.ndkVersion - - compileOptions { - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 - } - - kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8 - } - - defaultConfig { - // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). - applicationId = "com.example.myartist" - // You can update the following values to match your application needs. - // For more information, see: https://flutter.dev/to/review-gradle-config. - minSdk = flutter.minSdkVersion - targetSdk = flutter.targetSdkVersion - versionCode = flutter.versionCode - versionName = flutter.versionName - } - - buildTypes { - release { - // TODO: Add your own signing config for the release build. - // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig = signingConfigs.debug - } - } -} - -flutter { - source = "../.." -} diff --git a/boring_to_beautiful/step_04/android/app/build.gradle.kts b/boring_to_beautiful/step_04/android/app/build.gradle.kts new file mode 100644 index 0000000000..e82aa40635 --- /dev/null +++ b/boring_to_beautiful/step_04/android/app/build.gradle.kts @@ -0,0 +1,44 @@ +plugins { + id("com.android.application") + id("kotlin-android") + // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. + id("dev.flutter.flutter-gradle-plugin") +} + +android { + namespace = "com.example.myartist" + compileSdk = flutter.compileSdkVersion + ndkVersion = flutter.ndkVersion + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 + } + + kotlinOptions { + jvmTarget = JavaVersion.VERSION_1_8.toString() + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId = "com.example.myartist" + // You can update the following values to match your application needs. + // For more information, see: https://flutter.dev/to/review-gradle-config. + minSdk = flutter.minSdkVersion + targetSdk = flutter.targetSdkVersion + versionCode = flutter.versionCode + versionName = flutter.versionName + } + + buildTypes { + release { + // TODO: Add your own signing config for the release build. + // Signing with the debug keys for now, so `flutter run --release` works. + signingConfig = signingConfigs.getByName("debug") + } + } +} + +flutter { + source = "../.." +} diff --git a/boring_to_beautiful/step_04/android/build.gradle b/boring_to_beautiful/step_04/android/build.gradle deleted file mode 100644 index d2ffbffa4c..0000000000 --- a/boring_to_beautiful/step_04/android/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = "../build" -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(":app") -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/boring_to_beautiful/step_04/android/build.gradle.kts b/boring_to_beautiful/step_04/android/build.gradle.kts new file mode 100644 index 0000000000..89176ef44e --- /dev/null +++ b/boring_to_beautiful/step_04/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/boring_to_beautiful/step_04/android/gradle.properties b/boring_to_beautiful/step_04/android/gradle.properties index 2597170821..f018a61817 100644 --- a/boring_to_beautiful/step_04/android/gradle.properties +++ b/boring_to_beautiful/step_04/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/boring_to_beautiful/step_04/android/gradle/wrapper/gradle-wrapper.properties b/boring_to_beautiful/step_04/android/gradle/wrapper/gradle-wrapper.properties index 7bb2df6ba6..afa1e8eb0a 100644 --- a/boring_to_beautiful/step_04/android/gradle/wrapper/gradle-wrapper.properties +++ b/boring_to_beautiful/step_04/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip diff --git a/boring_to_beautiful/step_04/android/settings.gradle b/boring_to_beautiful/step_04/android/settings.gradle deleted file mode 100644 index b9e43bd376..0000000000 --- a/boring_to_beautiful/step_04/android/settings.gradle +++ /dev/null @@ -1,25 +0,0 @@ -pluginManagement { - def flutterSdkPath = { - def properties = new Properties() - file("local.properties").withInputStream { properties.load(it) } - def flutterSdkPath = properties.getProperty("flutter.sdk") - assert flutterSdkPath != null, "flutter.sdk not set in local.properties" - return flutterSdkPath - }() - - includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") - - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} - -plugins { - id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.1.0" apply false - id "org.jetbrains.kotlin.android" version "1.8.22" apply false -} - -include ":app" diff --git a/boring_to_beautiful/step_04/android/settings.gradle.kts b/boring_to_beautiful/step_04/android/settings.gradle.kts new file mode 100644 index 0000000000..a439442c20 --- /dev/null +++ b/boring_to_beautiful/step_04/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.0" apply false + id("org.jetbrains.kotlin.android") version "1.8.22" apply false +} + +include(":app") diff --git a/boring_to_beautiful/step_04/ios/Podfile b/boring_to_beautiful/step_04/ios/Podfile index d97f17e223..e549ee22f3 100644 --- a/boring_to_beautiful/step_04/ios/Podfile +++ b/boring_to_beautiful/step_04/ios/Podfile @@ -29,7 +29,6 @@ flutter_ios_podfile_setup target 'Runner' do use_frameworks! - use_modular_headers! flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) target 'RunnerTests' do diff --git a/boring_to_beautiful/step_04/ios/Runner.xcodeproj/project.pbxproj b/boring_to_beautiful/step_04/ios/Runner.xcodeproj/project.pbxproj index 8c24a73146..91a5b569c8 100644 --- a/boring_to_beautiful/step_04/ios/Runner.xcodeproj/project.pbxproj +++ b/boring_to_beautiful/step_04/ios/Runner.xcodeproj/project.pbxproj @@ -10,12 +10,12 @@ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; + 671CB59AD82B9E9C06F754DE /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CA411DCFAEBFDEF75D6D8BD4 /* Pods_RunnerTests.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - 9B56D0E6D2220ABAA3DCF805 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 66AE42AB618EEF74EA35FAFF /* Pods_Runner.framework */; }; - B589DC7DC7B2D3D3438369C2 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E5357285461CA23D84727993 /* Pods_RunnerTests.framework */; }; + BB3CD294AAEBCD41CD4E3134 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6E0ECB7CDFF84F23DB5F6124 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -44,16 +44,17 @@ /* Begin PBXFileReference section */ 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 2CFC8D32DC8431A771DB05E5 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 226563C2A9B812A252291F53 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 316D7F74FED03C168F533517 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 54DBFF5C8D89E736A0167B68 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 5A4EA9B6A5B733A5877FACBC /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 66AE42AB618EEF74EA35FAFF /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 4EF1D045B457A3820A4986D5 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 6E0ECB7CDFF84F23DB5F6124 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; + 82176D7C03C06BCDC246B582 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -61,18 +62,17 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 9CDB7B42A6F8620995CB6CF2 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - CC18E624AAFABC6DD311F438 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - E5357285461CA23D84727993 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - F5AF1F094CAA852F7BFA8616 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + CA411DCFAEBFDEF75D6D8BD4 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D19725268516F588736475DB /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + FCFFBA3399A8A53D16093E48 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 1ECFA6AA5DAB14ADED5C4715 /* Frameworks */ = { + 4334391D0FC29C876193054F /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - B589DC7DC7B2D3D3438369C2 /* Pods_RunnerTests.framework in Frameworks */, + 671CB59AD82B9E9C06F754DE /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -80,7 +80,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 9B56D0E6D2220ABAA3DCF805 /* Pods_Runner.framework in Frameworks */, + BB3CD294AAEBCD41CD4E3134 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -95,6 +95,20 @@ path = RunnerTests; sourceTree = ""; }; + 5000527615145082DFBE3105 /* Pods */ = { + isa = PBXGroup; + children = ( + FCFFBA3399A8A53D16093E48 /* Pods-Runner.debug.xcconfig */, + 316D7F74FED03C168F533517 /* Pods-Runner.release.xcconfig */, + 4EF1D045B457A3820A4986D5 /* Pods-Runner.profile.xcconfig */, + 226563C2A9B812A252291F53 /* Pods-RunnerTests.debug.xcconfig */, + D19725268516F588736475DB /* Pods-RunnerTests.release.xcconfig */, + 82176D7C03C06BCDC246B582 /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( @@ -113,8 +127,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - D3F2C84AD816806F625749C5 /* Pods */, - CB82902E04104E07EF849C18 /* Frameworks */, + 5000527615145082DFBE3105 /* Pods */, + C1515DABE052E90358A1C2F6 /* Frameworks */, ); sourceTree = ""; }; @@ -142,29 +156,15 @@ path = Runner; sourceTree = ""; }; - CB82902E04104E07EF849C18 /* Frameworks */ = { + C1515DABE052E90358A1C2F6 /* Frameworks */ = { isa = PBXGroup; children = ( - 66AE42AB618EEF74EA35FAFF /* Pods_Runner.framework */, - E5357285461CA23D84727993 /* Pods_RunnerTests.framework */, + 6E0ECB7CDFF84F23DB5F6124 /* Pods_Runner.framework */, + CA411DCFAEBFDEF75D6D8BD4 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; }; - D3F2C84AD816806F625749C5 /* Pods */ = { - isa = PBXGroup; - children = ( - 54DBFF5C8D89E736A0167B68 /* Pods-Runner.debug.xcconfig */, - 9CDB7B42A6F8620995CB6CF2 /* Pods-Runner.release.xcconfig */, - CC18E624AAFABC6DD311F438 /* Pods-Runner.profile.xcconfig */, - 5A4EA9B6A5B733A5877FACBC /* Pods-RunnerTests.debug.xcconfig */, - 2CFC8D32DC8431A771DB05E5 /* Pods-RunnerTests.release.xcconfig */, - F5AF1F094CAA852F7BFA8616 /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 34D2B9D1D9CE963363BA0A5B /* [CP] Check Pods Manifest.lock */, + A7B981FC286A2FF9A61E48CB /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 1ECFA6AA5DAB14ADED5C4715 /* Frameworks */, + 4334391D0FC29C876193054F /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 713F52C5655971916519E71C /* [CP] Check Pods Manifest.lock */, + CD48A0B530902637C4AACC3D /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 4B094A3D6BA73A5B5C65723A /* [CP] Embed Pods Frameworks */, + 4469FCF17CB9A07606C6C035 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -270,28 +270,6 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 34D2B9D1D9CE963363BA0A5B /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -308,7 +286,7 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 4B094A3D6BA73A5B5C65723A /* [CP] Embed Pods Frameworks */ = { + 4469FCF17CB9A07606C6C035 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -325,7 +303,22 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - 713F52C5655971916519E71C /* [CP] Check Pods Manifest.lock */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Run Script"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + }; + A7B981FC286A2FF9A61E48CB /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -340,27 +333,34 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { + CD48A0B530902637C4AACC3D /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "Run Script"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 5A4EA9B6A5B733A5877FACBC /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 226563C2A9B812A252291F53 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 2CFC8D32DC8431A771DB05E5 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = D19725268516F588736475DB /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = F5AF1F094CAA852F7BFA8616 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 82176D7C03C06BCDC246B582 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/boring_to_beautiful/step_04/macos/Podfile b/boring_to_beautiful/step_04/macos/Podfile index c795730db8..29c8eb3294 100644 --- a/boring_to_beautiful/step_04/macos/Podfile +++ b/boring_to_beautiful/step_04/macos/Podfile @@ -28,7 +28,6 @@ flutter_macos_podfile_setup target 'Runner' do use_frameworks! - use_modular_headers! flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__)) target 'RunnerTests' do diff --git a/boring_to_beautiful/step_04/macos/Runner.xcodeproj/project.pbxproj b/boring_to_beautiful/step_04/macos/Runner.xcodeproj/project.pbxproj index 934ea98536..1a280355cc 100644 --- a/boring_to_beautiful/step_04/macos/Runner.xcodeproj/project.pbxproj +++ b/boring_to_beautiful/step_04/macos/Runner.xcodeproj/project.pbxproj @@ -27,8 +27,8 @@ 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 7D7A4A5CAEB316CD69FCEFCD /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DBF93DFB67EA7D2AD5967AE4 /* Pods_Runner.framework */; }; - A3110385685B3E3544E9425E /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 14444A669D4E611BC45B0FB6 /* Pods_RunnerTests.framework */; }; + 6C9282E92762AB784716D80C /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B5905423224337C683C7EDCA /* Pods_RunnerTests.framework */; }; + DB1A46C1F69CC17C136B0A9E /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D4D8554BE586BE639F1FD64C /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,7 +62,9 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 14444A669D4E611BC45B0FB6 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 0488DA66F228D684684B49A2 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 216DB3BC1594FA41037BD499 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 2EAB116011D6E2B5F687513C /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -79,15 +81,13 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 4ECA459CDC624519673B0579 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - 5BD2C9EEA1CFBEC2C3745D8F /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 600C1700A09B3910703D860B /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 8A22315681F20849245600B8 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 96DF9F51CFB6CC26507FDDD7 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - DBF93DFB67EA7D2AD5967AE4 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - ED098600EDD4C45849C1CA92 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - F432CC14780751D0ECFDA11E /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - F962DA6A47D4A923B2BF1844 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + B0871DD16BB1C2490AA2275E /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + B5905423224337C683C7EDCA /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D4D8554BE586BE639F1FD64C /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - A3110385685B3E3544E9425E /* Pods_RunnerTests.framework in Frameworks */, + 6C9282E92762AB784716D80C /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,13 +103,27 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 7D7A4A5CAEB316CD69FCEFCD /* Pods_Runner.framework in Frameworks */, + DB1A46C1F69CC17C136B0A9E /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 06CAF7184BB358F9D4564A75 /* Pods */ = { + isa = PBXGroup; + children = ( + 600C1700A09B3910703D860B /* Pods-Runner.debug.xcconfig */, + 2EAB116011D6E2B5F687513C /* Pods-Runner.release.xcconfig */, + 96DF9F51CFB6CC26507FDDD7 /* Pods-Runner.profile.xcconfig */, + 216DB3BC1594FA41037BD499 /* Pods-RunnerTests.debug.xcconfig */, + 0488DA66F228D684684B49A2 /* Pods-RunnerTests.release.xcconfig */, + B0871DD16BB1C2490AA2275E /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; 331C80D6294CF71000263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -137,7 +151,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 97F435B99F0F5B9104CCDE86 /* Pods */, + 06CAF7184BB358F9D4564A75 /* Pods */, ); sourceTree = ""; }; @@ -185,25 +199,11 @@ path = Runner; sourceTree = ""; }; - 97F435B99F0F5B9104CCDE86 /* Pods */ = { - isa = PBXGroup; - children = ( - 8A22315681F20849245600B8 /* Pods-Runner.debug.xcconfig */, - ED098600EDD4C45849C1CA92 /* Pods-Runner.release.xcconfig */, - 5BD2C9EEA1CFBEC2C3745D8F /* Pods-Runner.profile.xcconfig */, - F962DA6A47D4A923B2BF1844 /* Pods-RunnerTests.debug.xcconfig */, - 4ECA459CDC624519673B0579 /* Pods-RunnerTests.release.xcconfig */, - F432CC14780751D0ECFDA11E /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - DBF93DFB67EA7D2AD5967AE4 /* Pods_Runner.framework */, - 14444A669D4E611BC45B0FB6 /* Pods_RunnerTests.framework */, + D4D8554BE586BE639F1FD64C /* Pods_Runner.framework */, + B5905423224337C683C7EDCA /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - B4A4E318F1203470DDF09086 /* [CP] Check Pods Manifest.lock */, + D35AE8F757E6F3EFD8D8A682 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 7D680C9A459DF63FFB6BB961 /* [CP] Check Pods Manifest.lock */, + 7EE9D0C28C82EE3F7CEDBA0A /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 924BD049CB0C75A05F45C790 /* [CP] Embed Pods Frameworks */, + 7FA764A838CC8BBB2E73F693 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -361,7 +361,7 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 7D680C9A459DF63FFB6BB961 /* [CP] Check Pods Manifest.lock */ = { + 7EE9D0C28C82EE3F7CEDBA0A /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -383,7 +383,7 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 924BD049CB0C75A05F45C790 /* [CP] Embed Pods Frameworks */ = { + 7FA764A838CC8BBB2E73F693 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -400,7 +400,7 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - B4A4E318F1203470DDF09086 /* [CP] Check Pods Manifest.lock */ = { + D35AE8F757E6F3EFD8D8A682 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = F962DA6A47D4A923B2BF1844 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 216DB3BC1594FA41037BD499 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 4ECA459CDC624519673B0579 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 0488DA66F228D684684B49A2 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = F432CC14780751D0ECFDA11E /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = B0871DD16BB1C2490AA2275E /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/boring_to_beautiful/step_04/pubspec.yaml b/boring_to_beautiful/step_04/pubspec.yaml index ad540a91c3..b76acde6ba 100644 --- a/boring_to_beautiful/step_04/pubspec.yaml +++ b/boring_to_beautiful/step_04/pubspec.yaml @@ -20,7 +20,7 @@ dependencies: english_words: ^4.0.0 flutter_bloc: ^8.1.6 freezed_annotation: ^2.4.4 - go_router: ^14.5.0 + go_router: ^14.6.0 material_color_utilities: any universal_platform: ^1.1.0 url_launcher: ^6.3.1 diff --git a/boring_to_beautiful/step_05/android/app/build.gradle b/boring_to_beautiful/step_05/android/app/build.gradle deleted file mode 100644 index 59485b6bb8..0000000000 --- a/boring_to_beautiful/step_05/android/app/build.gradle +++ /dev/null @@ -1,44 +0,0 @@ -plugins { - id "com.android.application" - id "kotlin-android" - // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. - id "dev.flutter.flutter-gradle-plugin" -} - -android { - namespace = "com.example.myartist" - compileSdk = flutter.compileSdkVersion - ndkVersion = flutter.ndkVersion - - compileOptions { - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 - } - - kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8 - } - - defaultConfig { - // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). - applicationId = "com.example.myartist" - // You can update the following values to match your application needs. - // For more information, see: https://flutter.dev/to/review-gradle-config. - minSdk = flutter.minSdkVersion - targetSdk = flutter.targetSdkVersion - versionCode = flutter.versionCode - versionName = flutter.versionName - } - - buildTypes { - release { - // TODO: Add your own signing config for the release build. - // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig = signingConfigs.debug - } - } -} - -flutter { - source = "../.." -} diff --git a/boring_to_beautiful/step_05/android/app/build.gradle.kts b/boring_to_beautiful/step_05/android/app/build.gradle.kts new file mode 100644 index 0000000000..e82aa40635 --- /dev/null +++ b/boring_to_beautiful/step_05/android/app/build.gradle.kts @@ -0,0 +1,44 @@ +plugins { + id("com.android.application") + id("kotlin-android") + // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. + id("dev.flutter.flutter-gradle-plugin") +} + +android { + namespace = "com.example.myartist" + compileSdk = flutter.compileSdkVersion + ndkVersion = flutter.ndkVersion + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 + } + + kotlinOptions { + jvmTarget = JavaVersion.VERSION_1_8.toString() + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId = "com.example.myartist" + // You can update the following values to match your application needs. + // For more information, see: https://flutter.dev/to/review-gradle-config. + minSdk = flutter.minSdkVersion + targetSdk = flutter.targetSdkVersion + versionCode = flutter.versionCode + versionName = flutter.versionName + } + + buildTypes { + release { + // TODO: Add your own signing config for the release build. + // Signing with the debug keys for now, so `flutter run --release` works. + signingConfig = signingConfigs.getByName("debug") + } + } +} + +flutter { + source = "../.." +} diff --git a/boring_to_beautiful/step_05/android/build.gradle b/boring_to_beautiful/step_05/android/build.gradle deleted file mode 100644 index d2ffbffa4c..0000000000 --- a/boring_to_beautiful/step_05/android/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = "../build" -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(":app") -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/boring_to_beautiful/step_05/android/build.gradle.kts b/boring_to_beautiful/step_05/android/build.gradle.kts new file mode 100644 index 0000000000..89176ef44e --- /dev/null +++ b/boring_to_beautiful/step_05/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/boring_to_beautiful/step_05/android/gradle.properties b/boring_to_beautiful/step_05/android/gradle.properties index 2597170821..f018a61817 100644 --- a/boring_to_beautiful/step_05/android/gradle.properties +++ b/boring_to_beautiful/step_05/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/boring_to_beautiful/step_05/android/gradle/wrapper/gradle-wrapper.properties b/boring_to_beautiful/step_05/android/gradle/wrapper/gradle-wrapper.properties index 7bb2df6ba6..afa1e8eb0a 100644 --- a/boring_to_beautiful/step_05/android/gradle/wrapper/gradle-wrapper.properties +++ b/boring_to_beautiful/step_05/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip diff --git a/boring_to_beautiful/step_05/android/settings.gradle b/boring_to_beautiful/step_05/android/settings.gradle deleted file mode 100644 index b9e43bd376..0000000000 --- a/boring_to_beautiful/step_05/android/settings.gradle +++ /dev/null @@ -1,25 +0,0 @@ -pluginManagement { - def flutterSdkPath = { - def properties = new Properties() - file("local.properties").withInputStream { properties.load(it) } - def flutterSdkPath = properties.getProperty("flutter.sdk") - assert flutterSdkPath != null, "flutter.sdk not set in local.properties" - return flutterSdkPath - }() - - includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") - - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} - -plugins { - id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.1.0" apply false - id "org.jetbrains.kotlin.android" version "1.8.22" apply false -} - -include ":app" diff --git a/boring_to_beautiful/step_05/android/settings.gradle.kts b/boring_to_beautiful/step_05/android/settings.gradle.kts new file mode 100644 index 0000000000..a439442c20 --- /dev/null +++ b/boring_to_beautiful/step_05/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.0" apply false + id("org.jetbrains.kotlin.android") version "1.8.22" apply false +} + +include(":app") diff --git a/boring_to_beautiful/step_05/ios/Podfile b/boring_to_beautiful/step_05/ios/Podfile index d97f17e223..e549ee22f3 100644 --- a/boring_to_beautiful/step_05/ios/Podfile +++ b/boring_to_beautiful/step_05/ios/Podfile @@ -29,7 +29,6 @@ flutter_ios_podfile_setup target 'Runner' do use_frameworks! - use_modular_headers! flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) target 'RunnerTests' do diff --git a/boring_to_beautiful/step_05/ios/Runner.xcodeproj/project.pbxproj b/boring_to_beautiful/step_05/ios/Runner.xcodeproj/project.pbxproj index 8c24a73146..91a5b569c8 100644 --- a/boring_to_beautiful/step_05/ios/Runner.xcodeproj/project.pbxproj +++ b/boring_to_beautiful/step_05/ios/Runner.xcodeproj/project.pbxproj @@ -10,12 +10,12 @@ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; + 671CB59AD82B9E9C06F754DE /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CA411DCFAEBFDEF75D6D8BD4 /* Pods_RunnerTests.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - 9B56D0E6D2220ABAA3DCF805 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 66AE42AB618EEF74EA35FAFF /* Pods_Runner.framework */; }; - B589DC7DC7B2D3D3438369C2 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E5357285461CA23D84727993 /* Pods_RunnerTests.framework */; }; + BB3CD294AAEBCD41CD4E3134 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6E0ECB7CDFF84F23DB5F6124 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -44,16 +44,17 @@ /* Begin PBXFileReference section */ 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 2CFC8D32DC8431A771DB05E5 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 226563C2A9B812A252291F53 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 316D7F74FED03C168F533517 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 54DBFF5C8D89E736A0167B68 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 5A4EA9B6A5B733A5877FACBC /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 66AE42AB618EEF74EA35FAFF /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 4EF1D045B457A3820A4986D5 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 6E0ECB7CDFF84F23DB5F6124 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; + 82176D7C03C06BCDC246B582 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -61,18 +62,17 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 9CDB7B42A6F8620995CB6CF2 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - CC18E624AAFABC6DD311F438 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - E5357285461CA23D84727993 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - F5AF1F094CAA852F7BFA8616 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + CA411DCFAEBFDEF75D6D8BD4 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D19725268516F588736475DB /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + FCFFBA3399A8A53D16093E48 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 1ECFA6AA5DAB14ADED5C4715 /* Frameworks */ = { + 4334391D0FC29C876193054F /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - B589DC7DC7B2D3D3438369C2 /* Pods_RunnerTests.framework in Frameworks */, + 671CB59AD82B9E9C06F754DE /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -80,7 +80,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 9B56D0E6D2220ABAA3DCF805 /* Pods_Runner.framework in Frameworks */, + BB3CD294AAEBCD41CD4E3134 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -95,6 +95,20 @@ path = RunnerTests; sourceTree = ""; }; + 5000527615145082DFBE3105 /* Pods */ = { + isa = PBXGroup; + children = ( + FCFFBA3399A8A53D16093E48 /* Pods-Runner.debug.xcconfig */, + 316D7F74FED03C168F533517 /* Pods-Runner.release.xcconfig */, + 4EF1D045B457A3820A4986D5 /* Pods-Runner.profile.xcconfig */, + 226563C2A9B812A252291F53 /* Pods-RunnerTests.debug.xcconfig */, + D19725268516F588736475DB /* Pods-RunnerTests.release.xcconfig */, + 82176D7C03C06BCDC246B582 /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( @@ -113,8 +127,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - D3F2C84AD816806F625749C5 /* Pods */, - CB82902E04104E07EF849C18 /* Frameworks */, + 5000527615145082DFBE3105 /* Pods */, + C1515DABE052E90358A1C2F6 /* Frameworks */, ); sourceTree = ""; }; @@ -142,29 +156,15 @@ path = Runner; sourceTree = ""; }; - CB82902E04104E07EF849C18 /* Frameworks */ = { + C1515DABE052E90358A1C2F6 /* Frameworks */ = { isa = PBXGroup; children = ( - 66AE42AB618EEF74EA35FAFF /* Pods_Runner.framework */, - E5357285461CA23D84727993 /* Pods_RunnerTests.framework */, + 6E0ECB7CDFF84F23DB5F6124 /* Pods_Runner.framework */, + CA411DCFAEBFDEF75D6D8BD4 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; }; - D3F2C84AD816806F625749C5 /* Pods */ = { - isa = PBXGroup; - children = ( - 54DBFF5C8D89E736A0167B68 /* Pods-Runner.debug.xcconfig */, - 9CDB7B42A6F8620995CB6CF2 /* Pods-Runner.release.xcconfig */, - CC18E624AAFABC6DD311F438 /* Pods-Runner.profile.xcconfig */, - 5A4EA9B6A5B733A5877FACBC /* Pods-RunnerTests.debug.xcconfig */, - 2CFC8D32DC8431A771DB05E5 /* Pods-RunnerTests.release.xcconfig */, - F5AF1F094CAA852F7BFA8616 /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 34D2B9D1D9CE963363BA0A5B /* [CP] Check Pods Manifest.lock */, + A7B981FC286A2FF9A61E48CB /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 1ECFA6AA5DAB14ADED5C4715 /* Frameworks */, + 4334391D0FC29C876193054F /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 713F52C5655971916519E71C /* [CP] Check Pods Manifest.lock */, + CD48A0B530902637C4AACC3D /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 4B094A3D6BA73A5B5C65723A /* [CP] Embed Pods Frameworks */, + 4469FCF17CB9A07606C6C035 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -270,28 +270,6 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 34D2B9D1D9CE963363BA0A5B /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -308,7 +286,7 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 4B094A3D6BA73A5B5C65723A /* [CP] Embed Pods Frameworks */ = { + 4469FCF17CB9A07606C6C035 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -325,7 +303,22 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - 713F52C5655971916519E71C /* [CP] Check Pods Manifest.lock */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Run Script"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + }; + A7B981FC286A2FF9A61E48CB /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -340,27 +333,34 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { + CD48A0B530902637C4AACC3D /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "Run Script"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 5A4EA9B6A5B733A5877FACBC /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 226563C2A9B812A252291F53 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 2CFC8D32DC8431A771DB05E5 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = D19725268516F588736475DB /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = F5AF1F094CAA852F7BFA8616 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 82176D7C03C06BCDC246B582 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/boring_to_beautiful/step_05/macos/Podfile b/boring_to_beautiful/step_05/macos/Podfile index c795730db8..29c8eb3294 100644 --- a/boring_to_beautiful/step_05/macos/Podfile +++ b/boring_to_beautiful/step_05/macos/Podfile @@ -28,7 +28,6 @@ flutter_macos_podfile_setup target 'Runner' do use_frameworks! - use_modular_headers! flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__)) target 'RunnerTests' do diff --git a/boring_to_beautiful/step_05/macos/Runner.xcodeproj/project.pbxproj b/boring_to_beautiful/step_05/macos/Runner.xcodeproj/project.pbxproj index 934ea98536..1a280355cc 100644 --- a/boring_to_beautiful/step_05/macos/Runner.xcodeproj/project.pbxproj +++ b/boring_to_beautiful/step_05/macos/Runner.xcodeproj/project.pbxproj @@ -27,8 +27,8 @@ 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 7D7A4A5CAEB316CD69FCEFCD /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DBF93DFB67EA7D2AD5967AE4 /* Pods_Runner.framework */; }; - A3110385685B3E3544E9425E /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 14444A669D4E611BC45B0FB6 /* Pods_RunnerTests.framework */; }; + 6C9282E92762AB784716D80C /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B5905423224337C683C7EDCA /* Pods_RunnerTests.framework */; }; + DB1A46C1F69CC17C136B0A9E /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D4D8554BE586BE639F1FD64C /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,7 +62,9 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 14444A669D4E611BC45B0FB6 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 0488DA66F228D684684B49A2 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 216DB3BC1594FA41037BD499 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 2EAB116011D6E2B5F687513C /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -79,15 +81,13 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 4ECA459CDC624519673B0579 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - 5BD2C9EEA1CFBEC2C3745D8F /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 600C1700A09B3910703D860B /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 8A22315681F20849245600B8 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 96DF9F51CFB6CC26507FDDD7 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - DBF93DFB67EA7D2AD5967AE4 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - ED098600EDD4C45849C1CA92 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - F432CC14780751D0ECFDA11E /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - F962DA6A47D4A923B2BF1844 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + B0871DD16BB1C2490AA2275E /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + B5905423224337C683C7EDCA /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D4D8554BE586BE639F1FD64C /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - A3110385685B3E3544E9425E /* Pods_RunnerTests.framework in Frameworks */, + 6C9282E92762AB784716D80C /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,13 +103,27 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 7D7A4A5CAEB316CD69FCEFCD /* Pods_Runner.framework in Frameworks */, + DB1A46C1F69CC17C136B0A9E /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 06CAF7184BB358F9D4564A75 /* Pods */ = { + isa = PBXGroup; + children = ( + 600C1700A09B3910703D860B /* Pods-Runner.debug.xcconfig */, + 2EAB116011D6E2B5F687513C /* Pods-Runner.release.xcconfig */, + 96DF9F51CFB6CC26507FDDD7 /* Pods-Runner.profile.xcconfig */, + 216DB3BC1594FA41037BD499 /* Pods-RunnerTests.debug.xcconfig */, + 0488DA66F228D684684B49A2 /* Pods-RunnerTests.release.xcconfig */, + B0871DD16BB1C2490AA2275E /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; 331C80D6294CF71000263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -137,7 +151,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 97F435B99F0F5B9104CCDE86 /* Pods */, + 06CAF7184BB358F9D4564A75 /* Pods */, ); sourceTree = ""; }; @@ -185,25 +199,11 @@ path = Runner; sourceTree = ""; }; - 97F435B99F0F5B9104CCDE86 /* Pods */ = { - isa = PBXGroup; - children = ( - 8A22315681F20849245600B8 /* Pods-Runner.debug.xcconfig */, - ED098600EDD4C45849C1CA92 /* Pods-Runner.release.xcconfig */, - 5BD2C9EEA1CFBEC2C3745D8F /* Pods-Runner.profile.xcconfig */, - F962DA6A47D4A923B2BF1844 /* Pods-RunnerTests.debug.xcconfig */, - 4ECA459CDC624519673B0579 /* Pods-RunnerTests.release.xcconfig */, - F432CC14780751D0ECFDA11E /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - DBF93DFB67EA7D2AD5967AE4 /* Pods_Runner.framework */, - 14444A669D4E611BC45B0FB6 /* Pods_RunnerTests.framework */, + D4D8554BE586BE639F1FD64C /* Pods_Runner.framework */, + B5905423224337C683C7EDCA /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - B4A4E318F1203470DDF09086 /* [CP] Check Pods Manifest.lock */, + D35AE8F757E6F3EFD8D8A682 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 7D680C9A459DF63FFB6BB961 /* [CP] Check Pods Manifest.lock */, + 7EE9D0C28C82EE3F7CEDBA0A /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 924BD049CB0C75A05F45C790 /* [CP] Embed Pods Frameworks */, + 7FA764A838CC8BBB2E73F693 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -361,7 +361,7 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 7D680C9A459DF63FFB6BB961 /* [CP] Check Pods Manifest.lock */ = { + 7EE9D0C28C82EE3F7CEDBA0A /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -383,7 +383,7 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 924BD049CB0C75A05F45C790 /* [CP] Embed Pods Frameworks */ = { + 7FA764A838CC8BBB2E73F693 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -400,7 +400,7 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - B4A4E318F1203470DDF09086 /* [CP] Check Pods Manifest.lock */ = { + D35AE8F757E6F3EFD8D8A682 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = F962DA6A47D4A923B2BF1844 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 216DB3BC1594FA41037BD499 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 4ECA459CDC624519673B0579 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 0488DA66F228D684684B49A2 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = F432CC14780751D0ECFDA11E /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = B0871DD16BB1C2490AA2275E /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/boring_to_beautiful/step_05/pubspec.yaml b/boring_to_beautiful/step_05/pubspec.yaml index ad540a91c3..b76acde6ba 100644 --- a/boring_to_beautiful/step_05/pubspec.yaml +++ b/boring_to_beautiful/step_05/pubspec.yaml @@ -20,7 +20,7 @@ dependencies: english_words: ^4.0.0 flutter_bloc: ^8.1.6 freezed_annotation: ^2.4.4 - go_router: ^14.5.0 + go_router: ^14.6.0 material_color_utilities: any universal_platform: ^1.1.0 url_launcher: ^6.3.1 diff --git a/boring_to_beautiful/step_06/android/app/build.gradle b/boring_to_beautiful/step_06/android/app/build.gradle deleted file mode 100644 index 59485b6bb8..0000000000 --- a/boring_to_beautiful/step_06/android/app/build.gradle +++ /dev/null @@ -1,44 +0,0 @@ -plugins { - id "com.android.application" - id "kotlin-android" - // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. - id "dev.flutter.flutter-gradle-plugin" -} - -android { - namespace = "com.example.myartist" - compileSdk = flutter.compileSdkVersion - ndkVersion = flutter.ndkVersion - - compileOptions { - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 - } - - kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8 - } - - defaultConfig { - // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). - applicationId = "com.example.myartist" - // You can update the following values to match your application needs. - // For more information, see: https://flutter.dev/to/review-gradle-config. - minSdk = flutter.minSdkVersion - targetSdk = flutter.targetSdkVersion - versionCode = flutter.versionCode - versionName = flutter.versionName - } - - buildTypes { - release { - // TODO: Add your own signing config for the release build. - // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig = signingConfigs.debug - } - } -} - -flutter { - source = "../.." -} diff --git a/boring_to_beautiful/step_06/android/app/build.gradle.kts b/boring_to_beautiful/step_06/android/app/build.gradle.kts new file mode 100644 index 0000000000..e82aa40635 --- /dev/null +++ b/boring_to_beautiful/step_06/android/app/build.gradle.kts @@ -0,0 +1,44 @@ +plugins { + id("com.android.application") + id("kotlin-android") + // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. + id("dev.flutter.flutter-gradle-plugin") +} + +android { + namespace = "com.example.myartist" + compileSdk = flutter.compileSdkVersion + ndkVersion = flutter.ndkVersion + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 + } + + kotlinOptions { + jvmTarget = JavaVersion.VERSION_1_8.toString() + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId = "com.example.myartist" + // You can update the following values to match your application needs. + // For more information, see: https://flutter.dev/to/review-gradle-config. + minSdk = flutter.minSdkVersion + targetSdk = flutter.targetSdkVersion + versionCode = flutter.versionCode + versionName = flutter.versionName + } + + buildTypes { + release { + // TODO: Add your own signing config for the release build. + // Signing with the debug keys for now, so `flutter run --release` works. + signingConfig = signingConfigs.getByName("debug") + } + } +} + +flutter { + source = "../.." +} diff --git a/boring_to_beautiful/step_06/android/build.gradle b/boring_to_beautiful/step_06/android/build.gradle deleted file mode 100644 index d2ffbffa4c..0000000000 --- a/boring_to_beautiful/step_06/android/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = "../build" -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(":app") -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/boring_to_beautiful/step_06/android/build.gradle.kts b/boring_to_beautiful/step_06/android/build.gradle.kts new file mode 100644 index 0000000000..89176ef44e --- /dev/null +++ b/boring_to_beautiful/step_06/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/boring_to_beautiful/step_06/android/gradle.properties b/boring_to_beautiful/step_06/android/gradle.properties index 2597170821..f018a61817 100644 --- a/boring_to_beautiful/step_06/android/gradle.properties +++ b/boring_to_beautiful/step_06/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/boring_to_beautiful/step_06/android/gradle/wrapper/gradle-wrapper.properties b/boring_to_beautiful/step_06/android/gradle/wrapper/gradle-wrapper.properties index 7bb2df6ba6..afa1e8eb0a 100644 --- a/boring_to_beautiful/step_06/android/gradle/wrapper/gradle-wrapper.properties +++ b/boring_to_beautiful/step_06/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip diff --git a/boring_to_beautiful/step_06/android/settings.gradle b/boring_to_beautiful/step_06/android/settings.gradle deleted file mode 100644 index b9e43bd376..0000000000 --- a/boring_to_beautiful/step_06/android/settings.gradle +++ /dev/null @@ -1,25 +0,0 @@ -pluginManagement { - def flutterSdkPath = { - def properties = new Properties() - file("local.properties").withInputStream { properties.load(it) } - def flutterSdkPath = properties.getProperty("flutter.sdk") - assert flutterSdkPath != null, "flutter.sdk not set in local.properties" - return flutterSdkPath - }() - - includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") - - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} - -plugins { - id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.1.0" apply false - id "org.jetbrains.kotlin.android" version "1.8.22" apply false -} - -include ":app" diff --git a/boring_to_beautiful/step_06/android/settings.gradle.kts b/boring_to_beautiful/step_06/android/settings.gradle.kts new file mode 100644 index 0000000000..a439442c20 --- /dev/null +++ b/boring_to_beautiful/step_06/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.0" apply false + id("org.jetbrains.kotlin.android") version "1.8.22" apply false +} + +include(":app") diff --git a/boring_to_beautiful/step_06/ios/Podfile b/boring_to_beautiful/step_06/ios/Podfile index d97f17e223..e549ee22f3 100644 --- a/boring_to_beautiful/step_06/ios/Podfile +++ b/boring_to_beautiful/step_06/ios/Podfile @@ -29,7 +29,6 @@ flutter_ios_podfile_setup target 'Runner' do use_frameworks! - use_modular_headers! flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) target 'RunnerTests' do diff --git a/boring_to_beautiful/step_06/ios/Runner.xcodeproj/project.pbxproj b/boring_to_beautiful/step_06/ios/Runner.xcodeproj/project.pbxproj index 8c24a73146..91a5b569c8 100644 --- a/boring_to_beautiful/step_06/ios/Runner.xcodeproj/project.pbxproj +++ b/boring_to_beautiful/step_06/ios/Runner.xcodeproj/project.pbxproj @@ -10,12 +10,12 @@ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; + 671CB59AD82B9E9C06F754DE /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CA411DCFAEBFDEF75D6D8BD4 /* Pods_RunnerTests.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - 9B56D0E6D2220ABAA3DCF805 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 66AE42AB618EEF74EA35FAFF /* Pods_Runner.framework */; }; - B589DC7DC7B2D3D3438369C2 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E5357285461CA23D84727993 /* Pods_RunnerTests.framework */; }; + BB3CD294AAEBCD41CD4E3134 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6E0ECB7CDFF84F23DB5F6124 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -44,16 +44,17 @@ /* Begin PBXFileReference section */ 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 2CFC8D32DC8431A771DB05E5 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 226563C2A9B812A252291F53 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 316D7F74FED03C168F533517 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 54DBFF5C8D89E736A0167B68 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 5A4EA9B6A5B733A5877FACBC /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 66AE42AB618EEF74EA35FAFF /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 4EF1D045B457A3820A4986D5 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 6E0ECB7CDFF84F23DB5F6124 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; + 82176D7C03C06BCDC246B582 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -61,18 +62,17 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 9CDB7B42A6F8620995CB6CF2 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - CC18E624AAFABC6DD311F438 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - E5357285461CA23D84727993 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - F5AF1F094CAA852F7BFA8616 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + CA411DCFAEBFDEF75D6D8BD4 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D19725268516F588736475DB /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + FCFFBA3399A8A53D16093E48 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 1ECFA6AA5DAB14ADED5C4715 /* Frameworks */ = { + 4334391D0FC29C876193054F /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - B589DC7DC7B2D3D3438369C2 /* Pods_RunnerTests.framework in Frameworks */, + 671CB59AD82B9E9C06F754DE /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -80,7 +80,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 9B56D0E6D2220ABAA3DCF805 /* Pods_Runner.framework in Frameworks */, + BB3CD294AAEBCD41CD4E3134 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -95,6 +95,20 @@ path = RunnerTests; sourceTree = ""; }; + 5000527615145082DFBE3105 /* Pods */ = { + isa = PBXGroup; + children = ( + FCFFBA3399A8A53D16093E48 /* Pods-Runner.debug.xcconfig */, + 316D7F74FED03C168F533517 /* Pods-Runner.release.xcconfig */, + 4EF1D045B457A3820A4986D5 /* Pods-Runner.profile.xcconfig */, + 226563C2A9B812A252291F53 /* Pods-RunnerTests.debug.xcconfig */, + D19725268516F588736475DB /* Pods-RunnerTests.release.xcconfig */, + 82176D7C03C06BCDC246B582 /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( @@ -113,8 +127,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - D3F2C84AD816806F625749C5 /* Pods */, - CB82902E04104E07EF849C18 /* Frameworks */, + 5000527615145082DFBE3105 /* Pods */, + C1515DABE052E90358A1C2F6 /* Frameworks */, ); sourceTree = ""; }; @@ -142,29 +156,15 @@ path = Runner; sourceTree = ""; }; - CB82902E04104E07EF849C18 /* Frameworks */ = { + C1515DABE052E90358A1C2F6 /* Frameworks */ = { isa = PBXGroup; children = ( - 66AE42AB618EEF74EA35FAFF /* Pods_Runner.framework */, - E5357285461CA23D84727993 /* Pods_RunnerTests.framework */, + 6E0ECB7CDFF84F23DB5F6124 /* Pods_Runner.framework */, + CA411DCFAEBFDEF75D6D8BD4 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; }; - D3F2C84AD816806F625749C5 /* Pods */ = { - isa = PBXGroup; - children = ( - 54DBFF5C8D89E736A0167B68 /* Pods-Runner.debug.xcconfig */, - 9CDB7B42A6F8620995CB6CF2 /* Pods-Runner.release.xcconfig */, - CC18E624AAFABC6DD311F438 /* Pods-Runner.profile.xcconfig */, - 5A4EA9B6A5B733A5877FACBC /* Pods-RunnerTests.debug.xcconfig */, - 2CFC8D32DC8431A771DB05E5 /* Pods-RunnerTests.release.xcconfig */, - F5AF1F094CAA852F7BFA8616 /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 34D2B9D1D9CE963363BA0A5B /* [CP] Check Pods Manifest.lock */, + A7B981FC286A2FF9A61E48CB /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 1ECFA6AA5DAB14ADED5C4715 /* Frameworks */, + 4334391D0FC29C876193054F /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 713F52C5655971916519E71C /* [CP] Check Pods Manifest.lock */, + CD48A0B530902637C4AACC3D /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 4B094A3D6BA73A5B5C65723A /* [CP] Embed Pods Frameworks */, + 4469FCF17CB9A07606C6C035 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -270,28 +270,6 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 34D2B9D1D9CE963363BA0A5B /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -308,7 +286,7 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 4B094A3D6BA73A5B5C65723A /* [CP] Embed Pods Frameworks */ = { + 4469FCF17CB9A07606C6C035 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -325,7 +303,22 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - 713F52C5655971916519E71C /* [CP] Check Pods Manifest.lock */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Run Script"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + }; + A7B981FC286A2FF9A61E48CB /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -340,27 +333,34 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { + CD48A0B530902637C4AACC3D /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "Run Script"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 5A4EA9B6A5B733A5877FACBC /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 226563C2A9B812A252291F53 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 2CFC8D32DC8431A771DB05E5 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = D19725268516F588736475DB /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = F5AF1F094CAA852F7BFA8616 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 82176D7C03C06BCDC246B582 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/boring_to_beautiful/step_06/macos/Podfile b/boring_to_beautiful/step_06/macos/Podfile index c795730db8..29c8eb3294 100644 --- a/boring_to_beautiful/step_06/macos/Podfile +++ b/boring_to_beautiful/step_06/macos/Podfile @@ -28,7 +28,6 @@ flutter_macos_podfile_setup target 'Runner' do use_frameworks! - use_modular_headers! flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__)) target 'RunnerTests' do diff --git a/boring_to_beautiful/step_06/macos/Runner.xcodeproj/project.pbxproj b/boring_to_beautiful/step_06/macos/Runner.xcodeproj/project.pbxproj index 934ea98536..1a280355cc 100644 --- a/boring_to_beautiful/step_06/macos/Runner.xcodeproj/project.pbxproj +++ b/boring_to_beautiful/step_06/macos/Runner.xcodeproj/project.pbxproj @@ -27,8 +27,8 @@ 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 7D7A4A5CAEB316CD69FCEFCD /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DBF93DFB67EA7D2AD5967AE4 /* Pods_Runner.framework */; }; - A3110385685B3E3544E9425E /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 14444A669D4E611BC45B0FB6 /* Pods_RunnerTests.framework */; }; + 6C9282E92762AB784716D80C /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B5905423224337C683C7EDCA /* Pods_RunnerTests.framework */; }; + DB1A46C1F69CC17C136B0A9E /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D4D8554BE586BE639F1FD64C /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,7 +62,9 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 14444A669D4E611BC45B0FB6 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 0488DA66F228D684684B49A2 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 216DB3BC1594FA41037BD499 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 2EAB116011D6E2B5F687513C /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -79,15 +81,13 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 4ECA459CDC624519673B0579 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - 5BD2C9EEA1CFBEC2C3745D8F /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 600C1700A09B3910703D860B /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 8A22315681F20849245600B8 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 96DF9F51CFB6CC26507FDDD7 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - DBF93DFB67EA7D2AD5967AE4 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - ED098600EDD4C45849C1CA92 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - F432CC14780751D0ECFDA11E /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - F962DA6A47D4A923B2BF1844 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + B0871DD16BB1C2490AA2275E /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + B5905423224337C683C7EDCA /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D4D8554BE586BE639F1FD64C /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - A3110385685B3E3544E9425E /* Pods_RunnerTests.framework in Frameworks */, + 6C9282E92762AB784716D80C /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,13 +103,27 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 7D7A4A5CAEB316CD69FCEFCD /* Pods_Runner.framework in Frameworks */, + DB1A46C1F69CC17C136B0A9E /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 06CAF7184BB358F9D4564A75 /* Pods */ = { + isa = PBXGroup; + children = ( + 600C1700A09B3910703D860B /* Pods-Runner.debug.xcconfig */, + 2EAB116011D6E2B5F687513C /* Pods-Runner.release.xcconfig */, + 96DF9F51CFB6CC26507FDDD7 /* Pods-Runner.profile.xcconfig */, + 216DB3BC1594FA41037BD499 /* Pods-RunnerTests.debug.xcconfig */, + 0488DA66F228D684684B49A2 /* Pods-RunnerTests.release.xcconfig */, + B0871DD16BB1C2490AA2275E /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; 331C80D6294CF71000263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -137,7 +151,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 97F435B99F0F5B9104CCDE86 /* Pods */, + 06CAF7184BB358F9D4564A75 /* Pods */, ); sourceTree = ""; }; @@ -185,25 +199,11 @@ path = Runner; sourceTree = ""; }; - 97F435B99F0F5B9104CCDE86 /* Pods */ = { - isa = PBXGroup; - children = ( - 8A22315681F20849245600B8 /* Pods-Runner.debug.xcconfig */, - ED098600EDD4C45849C1CA92 /* Pods-Runner.release.xcconfig */, - 5BD2C9EEA1CFBEC2C3745D8F /* Pods-Runner.profile.xcconfig */, - F962DA6A47D4A923B2BF1844 /* Pods-RunnerTests.debug.xcconfig */, - 4ECA459CDC624519673B0579 /* Pods-RunnerTests.release.xcconfig */, - F432CC14780751D0ECFDA11E /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - DBF93DFB67EA7D2AD5967AE4 /* Pods_Runner.framework */, - 14444A669D4E611BC45B0FB6 /* Pods_RunnerTests.framework */, + D4D8554BE586BE639F1FD64C /* Pods_Runner.framework */, + B5905423224337C683C7EDCA /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - B4A4E318F1203470DDF09086 /* [CP] Check Pods Manifest.lock */, + D35AE8F757E6F3EFD8D8A682 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 7D680C9A459DF63FFB6BB961 /* [CP] Check Pods Manifest.lock */, + 7EE9D0C28C82EE3F7CEDBA0A /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 924BD049CB0C75A05F45C790 /* [CP] Embed Pods Frameworks */, + 7FA764A838CC8BBB2E73F693 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -361,7 +361,7 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 7D680C9A459DF63FFB6BB961 /* [CP] Check Pods Manifest.lock */ = { + 7EE9D0C28C82EE3F7CEDBA0A /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -383,7 +383,7 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 924BD049CB0C75A05F45C790 /* [CP] Embed Pods Frameworks */ = { + 7FA764A838CC8BBB2E73F693 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -400,7 +400,7 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - B4A4E318F1203470DDF09086 /* [CP] Check Pods Manifest.lock */ = { + D35AE8F757E6F3EFD8D8A682 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = F962DA6A47D4A923B2BF1844 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 216DB3BC1594FA41037BD499 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 4ECA459CDC624519673B0579 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 0488DA66F228D684684B49A2 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = F432CC14780751D0ECFDA11E /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = B0871DD16BB1C2490AA2275E /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/boring_to_beautiful/step_06/pubspec.yaml b/boring_to_beautiful/step_06/pubspec.yaml index ad540a91c3..b76acde6ba 100644 --- a/boring_to_beautiful/step_06/pubspec.yaml +++ b/boring_to_beautiful/step_06/pubspec.yaml @@ -20,7 +20,7 @@ dependencies: english_words: ^4.0.0 flutter_bloc: ^8.1.6 freezed_annotation: ^2.4.4 - go_router: ^14.5.0 + go_router: ^14.6.0 material_color_utilities: any universal_platform: ^1.1.0 url_launcher: ^6.3.1 diff --git a/boring_to_beautiful/step_07/android/app/build.gradle b/boring_to_beautiful/step_07/android/app/build.gradle deleted file mode 100644 index 59485b6bb8..0000000000 --- a/boring_to_beautiful/step_07/android/app/build.gradle +++ /dev/null @@ -1,44 +0,0 @@ -plugins { - id "com.android.application" - id "kotlin-android" - // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. - id "dev.flutter.flutter-gradle-plugin" -} - -android { - namespace = "com.example.myartist" - compileSdk = flutter.compileSdkVersion - ndkVersion = flutter.ndkVersion - - compileOptions { - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 - } - - kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8 - } - - defaultConfig { - // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). - applicationId = "com.example.myartist" - // You can update the following values to match your application needs. - // For more information, see: https://flutter.dev/to/review-gradle-config. - minSdk = flutter.minSdkVersion - targetSdk = flutter.targetSdkVersion - versionCode = flutter.versionCode - versionName = flutter.versionName - } - - buildTypes { - release { - // TODO: Add your own signing config for the release build. - // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig = signingConfigs.debug - } - } -} - -flutter { - source = "../.." -} diff --git a/boring_to_beautiful/step_07/android/app/build.gradle.kts b/boring_to_beautiful/step_07/android/app/build.gradle.kts new file mode 100644 index 0000000000..e82aa40635 --- /dev/null +++ b/boring_to_beautiful/step_07/android/app/build.gradle.kts @@ -0,0 +1,44 @@ +plugins { + id("com.android.application") + id("kotlin-android") + // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. + id("dev.flutter.flutter-gradle-plugin") +} + +android { + namespace = "com.example.myartist" + compileSdk = flutter.compileSdkVersion + ndkVersion = flutter.ndkVersion + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 + } + + kotlinOptions { + jvmTarget = JavaVersion.VERSION_1_8.toString() + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId = "com.example.myartist" + // You can update the following values to match your application needs. + // For more information, see: https://flutter.dev/to/review-gradle-config. + minSdk = flutter.minSdkVersion + targetSdk = flutter.targetSdkVersion + versionCode = flutter.versionCode + versionName = flutter.versionName + } + + buildTypes { + release { + // TODO: Add your own signing config for the release build. + // Signing with the debug keys for now, so `flutter run --release` works. + signingConfig = signingConfigs.getByName("debug") + } + } +} + +flutter { + source = "../.." +} diff --git a/boring_to_beautiful/step_07/android/build.gradle b/boring_to_beautiful/step_07/android/build.gradle deleted file mode 100644 index d2ffbffa4c..0000000000 --- a/boring_to_beautiful/step_07/android/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = "../build" -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(":app") -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/boring_to_beautiful/step_07/android/build.gradle.kts b/boring_to_beautiful/step_07/android/build.gradle.kts new file mode 100644 index 0000000000..89176ef44e --- /dev/null +++ b/boring_to_beautiful/step_07/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/boring_to_beautiful/step_07/android/gradle.properties b/boring_to_beautiful/step_07/android/gradle.properties index 2597170821..f018a61817 100644 --- a/boring_to_beautiful/step_07/android/gradle.properties +++ b/boring_to_beautiful/step_07/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/boring_to_beautiful/step_07/android/gradle/wrapper/gradle-wrapper.properties b/boring_to_beautiful/step_07/android/gradle/wrapper/gradle-wrapper.properties index 7bb2df6ba6..afa1e8eb0a 100644 --- a/boring_to_beautiful/step_07/android/gradle/wrapper/gradle-wrapper.properties +++ b/boring_to_beautiful/step_07/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip diff --git a/boring_to_beautiful/step_07/android/settings.gradle b/boring_to_beautiful/step_07/android/settings.gradle deleted file mode 100644 index b9e43bd376..0000000000 --- a/boring_to_beautiful/step_07/android/settings.gradle +++ /dev/null @@ -1,25 +0,0 @@ -pluginManagement { - def flutterSdkPath = { - def properties = new Properties() - file("local.properties").withInputStream { properties.load(it) } - def flutterSdkPath = properties.getProperty("flutter.sdk") - assert flutterSdkPath != null, "flutter.sdk not set in local.properties" - return flutterSdkPath - }() - - includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") - - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} - -plugins { - id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.1.0" apply false - id "org.jetbrains.kotlin.android" version "1.8.22" apply false -} - -include ":app" diff --git a/boring_to_beautiful/step_07/android/settings.gradle.kts b/boring_to_beautiful/step_07/android/settings.gradle.kts new file mode 100644 index 0000000000..a439442c20 --- /dev/null +++ b/boring_to_beautiful/step_07/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.0" apply false + id("org.jetbrains.kotlin.android") version "1.8.22" apply false +} + +include(":app") diff --git a/boring_to_beautiful/step_07/ios/Podfile b/boring_to_beautiful/step_07/ios/Podfile index d97f17e223..e549ee22f3 100644 --- a/boring_to_beautiful/step_07/ios/Podfile +++ b/boring_to_beautiful/step_07/ios/Podfile @@ -29,7 +29,6 @@ flutter_ios_podfile_setup target 'Runner' do use_frameworks! - use_modular_headers! flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) target 'RunnerTests' do diff --git a/boring_to_beautiful/step_07/ios/Runner.xcodeproj/project.pbxproj b/boring_to_beautiful/step_07/ios/Runner.xcodeproj/project.pbxproj index 8c24a73146..91a5b569c8 100644 --- a/boring_to_beautiful/step_07/ios/Runner.xcodeproj/project.pbxproj +++ b/boring_to_beautiful/step_07/ios/Runner.xcodeproj/project.pbxproj @@ -10,12 +10,12 @@ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; + 671CB59AD82B9E9C06F754DE /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CA411DCFAEBFDEF75D6D8BD4 /* Pods_RunnerTests.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - 9B56D0E6D2220ABAA3DCF805 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 66AE42AB618EEF74EA35FAFF /* Pods_Runner.framework */; }; - B589DC7DC7B2D3D3438369C2 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E5357285461CA23D84727993 /* Pods_RunnerTests.framework */; }; + BB3CD294AAEBCD41CD4E3134 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6E0ECB7CDFF84F23DB5F6124 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -44,16 +44,17 @@ /* Begin PBXFileReference section */ 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 2CFC8D32DC8431A771DB05E5 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 226563C2A9B812A252291F53 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 316D7F74FED03C168F533517 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 54DBFF5C8D89E736A0167B68 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 5A4EA9B6A5B733A5877FACBC /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 66AE42AB618EEF74EA35FAFF /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 4EF1D045B457A3820A4986D5 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 6E0ECB7CDFF84F23DB5F6124 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; + 82176D7C03C06BCDC246B582 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -61,18 +62,17 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 9CDB7B42A6F8620995CB6CF2 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - CC18E624AAFABC6DD311F438 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - E5357285461CA23D84727993 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - F5AF1F094CAA852F7BFA8616 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + CA411DCFAEBFDEF75D6D8BD4 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D19725268516F588736475DB /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + FCFFBA3399A8A53D16093E48 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 1ECFA6AA5DAB14ADED5C4715 /* Frameworks */ = { + 4334391D0FC29C876193054F /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - B589DC7DC7B2D3D3438369C2 /* Pods_RunnerTests.framework in Frameworks */, + 671CB59AD82B9E9C06F754DE /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -80,7 +80,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 9B56D0E6D2220ABAA3DCF805 /* Pods_Runner.framework in Frameworks */, + BB3CD294AAEBCD41CD4E3134 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -95,6 +95,20 @@ path = RunnerTests; sourceTree = ""; }; + 5000527615145082DFBE3105 /* Pods */ = { + isa = PBXGroup; + children = ( + FCFFBA3399A8A53D16093E48 /* Pods-Runner.debug.xcconfig */, + 316D7F74FED03C168F533517 /* Pods-Runner.release.xcconfig */, + 4EF1D045B457A3820A4986D5 /* Pods-Runner.profile.xcconfig */, + 226563C2A9B812A252291F53 /* Pods-RunnerTests.debug.xcconfig */, + D19725268516F588736475DB /* Pods-RunnerTests.release.xcconfig */, + 82176D7C03C06BCDC246B582 /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( @@ -113,8 +127,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - D3F2C84AD816806F625749C5 /* Pods */, - CB82902E04104E07EF849C18 /* Frameworks */, + 5000527615145082DFBE3105 /* Pods */, + C1515DABE052E90358A1C2F6 /* Frameworks */, ); sourceTree = ""; }; @@ -142,29 +156,15 @@ path = Runner; sourceTree = ""; }; - CB82902E04104E07EF849C18 /* Frameworks */ = { + C1515DABE052E90358A1C2F6 /* Frameworks */ = { isa = PBXGroup; children = ( - 66AE42AB618EEF74EA35FAFF /* Pods_Runner.framework */, - E5357285461CA23D84727993 /* Pods_RunnerTests.framework */, + 6E0ECB7CDFF84F23DB5F6124 /* Pods_Runner.framework */, + CA411DCFAEBFDEF75D6D8BD4 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; }; - D3F2C84AD816806F625749C5 /* Pods */ = { - isa = PBXGroup; - children = ( - 54DBFF5C8D89E736A0167B68 /* Pods-Runner.debug.xcconfig */, - 9CDB7B42A6F8620995CB6CF2 /* Pods-Runner.release.xcconfig */, - CC18E624AAFABC6DD311F438 /* Pods-Runner.profile.xcconfig */, - 5A4EA9B6A5B733A5877FACBC /* Pods-RunnerTests.debug.xcconfig */, - 2CFC8D32DC8431A771DB05E5 /* Pods-RunnerTests.release.xcconfig */, - F5AF1F094CAA852F7BFA8616 /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 34D2B9D1D9CE963363BA0A5B /* [CP] Check Pods Manifest.lock */, + A7B981FC286A2FF9A61E48CB /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 1ECFA6AA5DAB14ADED5C4715 /* Frameworks */, + 4334391D0FC29C876193054F /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 713F52C5655971916519E71C /* [CP] Check Pods Manifest.lock */, + CD48A0B530902637C4AACC3D /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 4B094A3D6BA73A5B5C65723A /* [CP] Embed Pods Frameworks */, + 4469FCF17CB9A07606C6C035 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -270,28 +270,6 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 34D2B9D1D9CE963363BA0A5B /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -308,7 +286,7 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 4B094A3D6BA73A5B5C65723A /* [CP] Embed Pods Frameworks */ = { + 4469FCF17CB9A07606C6C035 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -325,7 +303,22 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - 713F52C5655971916519E71C /* [CP] Check Pods Manifest.lock */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Run Script"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + }; + A7B981FC286A2FF9A61E48CB /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -340,27 +333,34 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { + CD48A0B530902637C4AACC3D /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "Run Script"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 5A4EA9B6A5B733A5877FACBC /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 226563C2A9B812A252291F53 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 2CFC8D32DC8431A771DB05E5 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = D19725268516F588736475DB /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = F5AF1F094CAA852F7BFA8616 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 82176D7C03C06BCDC246B582 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/boring_to_beautiful/step_07/macos/Podfile b/boring_to_beautiful/step_07/macos/Podfile index c795730db8..29c8eb3294 100644 --- a/boring_to_beautiful/step_07/macos/Podfile +++ b/boring_to_beautiful/step_07/macos/Podfile @@ -28,7 +28,6 @@ flutter_macos_podfile_setup target 'Runner' do use_frameworks! - use_modular_headers! flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__)) target 'RunnerTests' do diff --git a/boring_to_beautiful/step_07/macos/Runner.xcodeproj/project.pbxproj b/boring_to_beautiful/step_07/macos/Runner.xcodeproj/project.pbxproj index 934ea98536..1a280355cc 100644 --- a/boring_to_beautiful/step_07/macos/Runner.xcodeproj/project.pbxproj +++ b/boring_to_beautiful/step_07/macos/Runner.xcodeproj/project.pbxproj @@ -27,8 +27,8 @@ 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 7D7A4A5CAEB316CD69FCEFCD /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DBF93DFB67EA7D2AD5967AE4 /* Pods_Runner.framework */; }; - A3110385685B3E3544E9425E /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 14444A669D4E611BC45B0FB6 /* Pods_RunnerTests.framework */; }; + 6C9282E92762AB784716D80C /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B5905423224337C683C7EDCA /* Pods_RunnerTests.framework */; }; + DB1A46C1F69CC17C136B0A9E /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D4D8554BE586BE639F1FD64C /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,7 +62,9 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 14444A669D4E611BC45B0FB6 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 0488DA66F228D684684B49A2 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 216DB3BC1594FA41037BD499 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 2EAB116011D6E2B5F687513C /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -79,15 +81,13 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 4ECA459CDC624519673B0579 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - 5BD2C9EEA1CFBEC2C3745D8F /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 600C1700A09B3910703D860B /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 8A22315681F20849245600B8 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 96DF9F51CFB6CC26507FDDD7 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - DBF93DFB67EA7D2AD5967AE4 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - ED098600EDD4C45849C1CA92 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - F432CC14780751D0ECFDA11E /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - F962DA6A47D4A923B2BF1844 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + B0871DD16BB1C2490AA2275E /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + B5905423224337C683C7EDCA /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D4D8554BE586BE639F1FD64C /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - A3110385685B3E3544E9425E /* Pods_RunnerTests.framework in Frameworks */, + 6C9282E92762AB784716D80C /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,13 +103,27 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 7D7A4A5CAEB316CD69FCEFCD /* Pods_Runner.framework in Frameworks */, + DB1A46C1F69CC17C136B0A9E /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 06CAF7184BB358F9D4564A75 /* Pods */ = { + isa = PBXGroup; + children = ( + 600C1700A09B3910703D860B /* Pods-Runner.debug.xcconfig */, + 2EAB116011D6E2B5F687513C /* Pods-Runner.release.xcconfig */, + 96DF9F51CFB6CC26507FDDD7 /* Pods-Runner.profile.xcconfig */, + 216DB3BC1594FA41037BD499 /* Pods-RunnerTests.debug.xcconfig */, + 0488DA66F228D684684B49A2 /* Pods-RunnerTests.release.xcconfig */, + B0871DD16BB1C2490AA2275E /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; 331C80D6294CF71000263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -137,7 +151,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 97F435B99F0F5B9104CCDE86 /* Pods */, + 06CAF7184BB358F9D4564A75 /* Pods */, ); sourceTree = ""; }; @@ -185,25 +199,11 @@ path = Runner; sourceTree = ""; }; - 97F435B99F0F5B9104CCDE86 /* Pods */ = { - isa = PBXGroup; - children = ( - 8A22315681F20849245600B8 /* Pods-Runner.debug.xcconfig */, - ED098600EDD4C45849C1CA92 /* Pods-Runner.release.xcconfig */, - 5BD2C9EEA1CFBEC2C3745D8F /* Pods-Runner.profile.xcconfig */, - F962DA6A47D4A923B2BF1844 /* Pods-RunnerTests.debug.xcconfig */, - 4ECA459CDC624519673B0579 /* Pods-RunnerTests.release.xcconfig */, - F432CC14780751D0ECFDA11E /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - DBF93DFB67EA7D2AD5967AE4 /* Pods_Runner.framework */, - 14444A669D4E611BC45B0FB6 /* Pods_RunnerTests.framework */, + D4D8554BE586BE639F1FD64C /* Pods_Runner.framework */, + B5905423224337C683C7EDCA /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - B4A4E318F1203470DDF09086 /* [CP] Check Pods Manifest.lock */, + D35AE8F757E6F3EFD8D8A682 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 7D680C9A459DF63FFB6BB961 /* [CP] Check Pods Manifest.lock */, + 7EE9D0C28C82EE3F7CEDBA0A /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 924BD049CB0C75A05F45C790 /* [CP] Embed Pods Frameworks */, + 7FA764A838CC8BBB2E73F693 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -361,7 +361,7 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 7D680C9A459DF63FFB6BB961 /* [CP] Check Pods Manifest.lock */ = { + 7EE9D0C28C82EE3F7CEDBA0A /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -383,7 +383,7 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 924BD049CB0C75A05F45C790 /* [CP] Embed Pods Frameworks */ = { + 7FA764A838CC8BBB2E73F693 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -400,7 +400,7 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - B4A4E318F1203470DDF09086 /* [CP] Check Pods Manifest.lock */ = { + D35AE8F757E6F3EFD8D8A682 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = F962DA6A47D4A923B2BF1844 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 216DB3BC1594FA41037BD499 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 4ECA459CDC624519673B0579 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 0488DA66F228D684684B49A2 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = F432CC14780751D0ECFDA11E /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = B0871DD16BB1C2490AA2275E /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/boring_to_beautiful/step_07/pubspec.yaml b/boring_to_beautiful/step_07/pubspec.yaml index ad540a91c3..b76acde6ba 100644 --- a/boring_to_beautiful/step_07/pubspec.yaml +++ b/boring_to_beautiful/step_07/pubspec.yaml @@ -20,7 +20,7 @@ dependencies: english_words: ^4.0.0 flutter_bloc: ^8.1.6 freezed_annotation: ^2.4.4 - go_router: ^14.5.0 + go_router: ^14.6.0 material_color_utilities: any universal_platform: ^1.1.0 url_launcher: ^6.3.1 From 86cef1424e5794404e320e9b0c88629822f171e7 Mon Sep 17 00:00:00 2001 From: Brett Morgan Date: Fri, 15 Nov 2024 11:14:56 +1100 Subject: [PATCH 067/108] Update `boring_to_beautiful`, part 2 --- boring_to_beautiful/codelab_rebuild.yaml | 3071 +++++++++++----------- 1 file changed, 1499 insertions(+), 1572 deletions(-) diff --git a/boring_to_beautiful/codelab_rebuild.yaml b/boring_to_beautiful/codelab_rebuild.yaml index ade7317048..853f857faf 100644 --- a/boring_to_beautiful/codelab_rebuild.yaml +++ b/boring_to_beautiful/codelab_rebuild.yaml @@ -103,25 +103,25 @@ steps: // Copyright 2022 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. - + import 'package:desktop_window/desktop_window.dart'; import 'package:flutter/material.dart'; import 'package:universal_platform/universal_platform.dart'; - + import 'src/shared/app.dart'; - + Future setDesktopWindow() async { await DesktopWindow.setMinWindowSize(const Size(400, 400)); await DesktopWindow.setWindowSize(const Size(1300, 900)); } - + void main() { WidgetsFlutterBinding.ensureInitialized(); - + if (UniversalPlatform.isDesktop) { setDesktopWindow(); } - + runApp(const MyApp()); } - name: mkdir lib/src/features/home/view @@ -159,48 +159,46 @@ steps: // Copyright 2022 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. - + import 'package:flutter/material.dart'; import 'package:go_router/go_router.dart'; - + import '../../../shared/classes/classes.dart'; import '../../../shared/extensions.dart'; - + class HomeArtists extends StatelessWidget { const HomeArtists({ super.key, required this.artists, required this.constraints, }); - + final List artists; final BoxConstraints constraints; - + @override Widget build(BuildContext context) { return Padding( padding: const EdgeInsets.all(15), - child: constraints.isMobile - ? Column( - children: [ - for (final artist in artists) buildTile(context, artist), - ], - ) - : Row(children: [ - for (final artist in artists) - Flexible( - flex: 1, - child: buildTile(context, artist), - ), - ]), + child: + constraints.isMobile + ? Column( + children: [ + for (final artist in artists) buildTile(context, artist), + ], + ) + : Row( + children: [ + for (final artist in artists) + Flexible(flex: 1, child: buildTile(context, artist)), + ], + ), ); } - + Widget buildTile(BuildContext context, Artist artist) { return ListTile( - leading: CircleAvatar( - backgroundImage: AssetImage(artist.image.image), - ), + leading: CircleAvatar(backgroundImage: AssetImage(artist.image.image)), title: Text( artist.updates.first, maxLines: 2, @@ -221,15 +219,15 @@ steps: // Copyright 2022 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. - + import 'package:flutter/material.dart'; import 'package:url_launcher/url_launcher.dart'; - + import '../../../shared/views/views.dart'; - + class HomeHighlight extends StatelessWidget { const HomeHighlight({super.key}); - + @override Widget build(BuildContext context) { return Row( @@ -262,23 +260,26 @@ steps: // Copyright 2022 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. - + import 'package:flutter/material.dart'; import 'package:go_router/go_router.dart'; - + import '../../../shared/classes/playlist.dart'; import '../../../shared/extensions.dart'; import '../../../shared/views/clickable.dart'; import '../../../shared/views/image_clipper.dart'; import '../../../shared/views/outlined_card.dart'; - + class HomeRecent extends StatelessWidget { - const HomeRecent( - {super.key, required this.playlists, this.axis = Axis.horizontal}); - + const HomeRecent({ + super.key, + required this.playlists, + this.axis = Axis.horizontal, + }); + final List playlists; final Axis axis; - + @override Widget build(BuildContext context) { if (axis == Axis.horizontal) { @@ -304,8 +305,10 @@ steps: Row( children: [ Expanded( - child: Image.asset(playlist.cover.image, - fit: BoxFit.cover), + child: Image.asset( + playlist.cover.image, + fit: BoxFit.cover, + ), ), ], ), @@ -340,10 +343,7 @@ steps: crossAxisAlignment: CrossAxisAlignment.center, mainAxisSize: MainAxisSize.max, children: [ - ClippedImage( - playlist.cover.image, - height: 200, - ), + ClippedImage(playlist.cover.image, height: 200), Expanded( child: Center( child: Padding( @@ -360,28 +360,29 @@ steps: }, ); } - + Widget buildDetails(BuildContext context, Playlist playlist) { return Column( children: [ Padding( - padding: const EdgeInsets.fromLTRB(10, 5, 10, 5), - child: Text( - playlist.title, - style: context.titleSmall!.copyWith( - fontWeight: FontWeight.bold, - ), - overflow: TextOverflow.ellipsis, - maxLines: 1, - textAlign: TextAlign.center, - )), + padding: const EdgeInsets.fromLTRB(10, 5, 10, 5), + child: Text( + playlist.title, + style: context.titleSmall!.copyWith(fontWeight: FontWeight.bold), + overflow: TextOverflow.ellipsis, + maxLines: 1, + textAlign: TextAlign.center, + ), + ), Padding( padding: const EdgeInsets.symmetric(vertical: 5, horizontal: 10), - child: Text(playlist.description, - overflow: TextOverflow.ellipsis, - style: context.labelSmall, - maxLines: 2, - textAlign: TextAlign.center), + child: Text( + playlist.description, + overflow: TextOverflow.ellipsis, + style: context.labelSmall, + maxLines: 2, + textAlign: TextAlign.center, + ), ), ], ); @@ -404,24 +405,24 @@ steps: // Copyright 2022 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. - + import 'package:adaptive_components/adaptive_components.dart'; import 'package:flutter/material.dart'; - + import '../../../shared/classes/classes.dart'; import '../../../shared/extensions.dart'; import '../../../shared/providers/providers.dart'; import '../../../shared/views/views.dart'; import '../../playlists/view/playlist_songs.dart'; import 'view.dart'; - + class HomeScreen extends StatefulWidget { const HomeScreen({super.key}); - + @override State createState() => _HomeScreenState(); } - + class _HomeScreenState extends State { @override Widget build(BuildContext context) { @@ -434,7 +435,7 @@ steps: return LayoutBuilder( builder: (context, constraints) { // Add conditional mobile layout - + return Scaffold( body: SingleChildScrollView( child: AdaptiveColumn( @@ -464,10 +465,11 @@ steps: children: [ const HomeHighlight(), LayoutBuilder( - builder: (context, constraints) => HomeArtists( - artists: artists, - constraints: constraints, - ), + builder: + (context, constraints) => HomeArtists( + artists: artists, + constraints: constraints, + ), ), ], ), @@ -484,9 +486,7 @@ steps: style: context.headlineSmall, ), ), - HomeRecent( - playlists: playlists, - ), + HomeRecent(playlists: playlists), ], ), ), @@ -504,19 +504,20 @@ steps: crossAxisAlignment: CrossAxisAlignment.start, children: [ Padding( - padding: - const EdgeInsets.all(2), // Modify this line + padding: const EdgeInsets.all( + 2, + ), // Modify this line child: Text( 'Top Songs Today', style: context.titleLarge, ), ), LayoutBuilder( - builder: (context, constraints) => - PlaylistSongs( - playlist: topSongs, - constraints: constraints, - ), + builder: + (context, constraints) => PlaylistSongs( + playlist: topSongs, + constraints: constraints, + ), ), ], ), @@ -529,19 +530,20 @@ steps: crossAxisAlignment: CrossAxisAlignment.start, children: [ Padding( - padding: - const EdgeInsets.all(2), // Modify this line + padding: const EdgeInsets.all( + 2, + ), // Modify this line child: Text( 'New Releases', style: context.titleLarge, ), ), LayoutBuilder( - builder: (context, constraints) => - PlaylistSongs( - playlist: newReleases, - constraints: constraints, - ), + builder: + (context, constraints) => PlaylistSongs( + playlist: newReleases, + constraints: constraints, + ), ), ], ), @@ -572,23 +574,26 @@ steps: // Copyright 2022 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. - + import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; - + import '../../../shared/classes/classes.dart'; import '../../../shared/extensions.dart'; import '../../../shared/playback/bloc/bloc.dart'; import '../../../shared/views/image_clipper.dart'; import '../../../shared/views/views.dart'; - + class PlaylistSongs extends StatelessWidget { - const PlaylistSongs( - {super.key, required this.playlist, required this.constraints}); - + const PlaylistSongs({ + super.key, + required this.playlist, + required this.constraints, + }); + final Playlist playlist; final BoxConstraints constraints; - + @override Widget build(BuildContext context) { return AdaptiveTable( @@ -596,14 +601,9 @@ steps: breakpoint: 450, columns: const [ DataColumn( - label: Padding( - padding: EdgeInsets.only(left: 20), - child: Text('#'), - ), - ), - DataColumn( - label: Text('Title'), + label: Padding(padding: EdgeInsets.only(left: 20), child: Text('#')), ), + DataColumn(label: Text('Title')), DataColumn( label: Padding( padding: EdgeInsets.only(right: 10), @@ -611,38 +611,40 @@ steps: ), ), ], - rowBuilder: (context, index) => DataRow.byIndex( - index: index, - cells: [ - DataCell( - // Add HoverableSongPlayButton - Center( - child: Text( - (index + 1).toString(), - textAlign: TextAlign.center, + rowBuilder: + (context, index) => DataRow.byIndex( + index: index, + cells: [ + DataCell( + // Add HoverableSongPlayButton + Center( + child: Text( + (index + 1).toString(), + textAlign: TextAlign.center, + ), + ), ), - ), - ), - DataCell( - Row(children: [ - Padding( - padding: const EdgeInsets.all(2), - child: ClippedImage(playlist.songs[index].image.image), + DataCell( + Row( + children: [ + Padding( + padding: const EdgeInsets.all(2), + child: ClippedImage(playlist.songs[index].image.image), + ), + const SizedBox(width: 10), + Expanded(child: Text(playlist.songs[index].title)), + ], + ), ), - const SizedBox(width: 10), - Expanded(child: Text(playlist.songs[index].title)), - ]), - ), - DataCell( - Text(playlist.songs[index].length.toHumanizedString()), + DataCell(Text(playlist.songs[index].length.toHumanizedString())), + ], ), - ], - ), itemBuilder: (song, index) { return ListTile( - onTap: () => BlocProvider.of(context).add( - PlaybackEvent.changeSong(song), - ), + onTap: + () => BlocProvider.of( + context, + ).add(PlaybackEvent.changeSong(song)), leading: ClippedImage(song.image.image), title: Text(song.title), subtitle: Text(song.length.toHumanizedString()), @@ -666,17 +668,17 @@ steps: // Copyright 2022 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. - + import 'package:flutter/material.dart'; import 'package:go_router/go_router.dart'; - + import '../../../shared/classes/classes.dart'; import '../../../shared/providers/providers.dart'; import '../../../shared/views/views.dart'; - + class PlaylistHomeScreen extends StatelessWidget { const PlaylistHomeScreen({super.key}); - + @override Widget build(BuildContext context) { PlaylistsProvider playlistProvider = PlaylistsProvider(); @@ -709,8 +711,10 @@ steps: title: playlist.title, subtitle: playlist.description, ), - onTap: () => - GoRouter.of(context).go('/playlists/${playlist.id}'), + onTap: + () => GoRouter.of( + context, + ).go('/playlists/${playlist.id}'), ); }, ), @@ -728,134 +732,136 @@ steps: // Copyright 2022 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. - + import 'dart:math'; - + import 'package:flutter/material.dart'; import 'package:go_router/go_router.dart'; - + import '../../../shared/classes/classes.dart'; import '../../../shared/extensions.dart'; import '../../../shared/views/adaptive_image_card.dart'; import '../../../shared/views/views.dart'; import 'playlist_songs.dart'; - + class PlaylistScreen extends StatelessWidget { const PlaylistScreen({required this.playlist, super.key}); - + final Playlist playlist; - + @override Widget build(BuildContext context) { - return LayoutBuilder(builder: (context, constraints) { - final colors = Theme.of(context).colorScheme; - final double headerHeight = constraints.isMobile - ? max(constraints.biggest.height * 0.5, 450) - : max(constraints.biggest.height * 0.25, 250); - if (constraints.isMobile) { - return Scaffold( - appBar: AppBar( - leading: BackButton( - onPressed: () => GoRouter.of(context).go('/playlists'), - ), - title: Text(playlist.title), - actions: [ - IconButton( - icon: const Icon(Icons.play_circle_fill), - onPressed: () {}, - ), - IconButton( - onPressed: () {}, - icon: const Icon(Icons.shuffle), - ), - ], - ), - body: ArticleContent( - child: PlaylistSongs( - playlist: playlist, - constraints: constraints, - ), - ), - ); - } - return Scaffold( - body: CustomScrollView( - slivers: [ - SliverAppBar( + return LayoutBuilder( + builder: (context, constraints) { + final colors = Theme.of(context).colorScheme; + final double headerHeight = + constraints.isMobile + ? max(constraints.biggest.height * 0.5, 450) + : max(constraints.biggest.height * 0.25, 250); + if (constraints.isMobile) { + return Scaffold( + appBar: AppBar( leading: BackButton( onPressed: () => GoRouter.of(context).go('/playlists'), ), - expandedHeight: headerHeight, - pinned: false, - flexibleSpace: FlexibleSpaceBar( - background: AdaptiveImageCard( - axis: constraints.isMobile ? Axis.vertical : Axis.horizontal, - constraints: - constraints.copyWith(maxHeight: headerHeight).normalize(), - image: playlist.cover.image, - child: Column( - mainAxisAlignment: MainAxisAlignment.end, - crossAxisAlignment: CrossAxisAlignment.start, - mainAxisSize: MainAxisSize.min, - children: [ - Text( - 'PLAYLIST', - style: context.titleSmall! - .copyWith(color: colors.onSurface), - ), - Text( - playlist.title, - style: context.displaySmall! - .copyWith(color: colors.onSurface), - ), - Text( - playlist.description, - style: context.bodyLarge!.copyWith( - color: colors.onSurface.withAlpha(204), + title: Text(playlist.title), + actions: [ + IconButton( + icon: const Icon(Icons.play_circle_fill), + onPressed: () {}, + ), + IconButton(onPressed: () {}, icon: const Icon(Icons.shuffle)), + ], + ), + body: ArticleContent( + child: PlaylistSongs( + playlist: playlist, + constraints: constraints, + ), + ), + ); + } + return Scaffold( + body: CustomScrollView( + slivers: [ + SliverAppBar( + leading: BackButton( + onPressed: () => GoRouter.of(context).go('/playlists'), + ), + expandedHeight: headerHeight, + pinned: false, + flexibleSpace: FlexibleSpaceBar( + background: AdaptiveImageCard( + axis: + constraints.isMobile ? Axis.vertical : Axis.horizontal, + constraints: + constraints + .copyWith(maxHeight: headerHeight) + .normalize(), + image: playlist.cover.image, + child: Column( + mainAxisAlignment: MainAxisAlignment.end, + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisSize: MainAxisSize.min, + children: [ + Text( + 'PLAYLIST', + style: context.titleSmall!.copyWith( + color: colors.onSurface, + ), ), - ), - const SizedBox(height: 8), - Row( - children: [ - IconButton( - icon: Icon( - Icons.play_circle_fill, - color: colors.tertiary, - ), - onPressed: () {}, + Text( + playlist.title, + style: context.displaySmall!.copyWith( + color: colors.onSurface, ), - TextButton.icon( - onPressed: () {}, - icon: Icon( - Icons.shuffle, - color: colors.tertiary, - ), - label: Text( - 'Shuffle', - style: context.bodySmall!.copyWith( + ), + Text( + playlist.description, + style: context.bodyLarge!.copyWith( + color: colors.onSurface.withAlpha(204), + ), + ), + const SizedBox(height: 8), + Row( + children: [ + IconButton( + icon: Icon( + Icons.play_circle_fill, color: colors.tertiary, ), + onPressed: () {}, ), - ), - ], - ), - ], + TextButton.icon( + onPressed: () {}, + icon: Icon(Icons.shuffle, color: colors.tertiary), + label: Text( + 'Shuffle', + style: context.bodySmall!.copyWith( + color: colors.tertiary, + ), + ), + ), + ], + ), + ], + ), ), ), ), - ), - SliverToBoxAdapter( - child: ArticleContent( - child: PlaylistSongs( - playlist: playlist, - constraints: constraints, + SliverToBoxAdapter( + child: ArticleContent( + child: PlaylistSongs( + playlist: playlist, + constraints: constraints, + ), ), ), - ), - ], - ), - ); - }); + ], + ), + ); + }, + ); } } - name: Add lib/src/features/artists/artists.dart @@ -888,34 +894,34 @@ steps: Widget build(BuildContext context) { final artistsProvider = ArtistsProvider(); final artists = artistsProvider.artists; - return LayoutBuilder(builder: (context, constraints) { - return Scaffold( - primary: false, - appBar: AppBar( - title: const Text('ARTISTS'), - toolbarHeight: kToolbarHeight * 2, - ), - body: GridView.builder( - padding: const EdgeInsets.all(15), - gridDelegate: SliverGridDelegateWithFixedCrossAxisCount( - crossAxisCount: max(1, (constraints.maxWidth ~/ 400).toInt()), - childAspectRatio: 2.5, - mainAxisSpacing: 10, - crossAxisSpacing: 10, + return LayoutBuilder( + builder: (context, constraints) { + return Scaffold( + primary: false, + appBar: AppBar( + title: const Text('ARTISTS'), + toolbarHeight: kToolbarHeight * 2, ), - itemCount: artists.length, - itemBuilder: (context, index) { - final artist = artists[index]; - return GestureDetector( - child: ArtistCard( - artist: artist, - ), - onTap: () => GoRouter.of(context).go('/artists/${artist.id}'), - ); - }, - ), - ); - }); + body: GridView.builder( + padding: const EdgeInsets.all(15), + gridDelegate: SliverGridDelegateWithFixedCrossAxisCount( + crossAxisCount: max(1, (constraints.maxWidth ~/ 400).toInt()), + childAspectRatio: 2.5, + mainAxisSpacing: 10, + crossAxisSpacing: 10, + ), + itemCount: artists.length, + itemBuilder: (context, index) { + final artist = artists[index]; + return GestureDetector( + child: ArtistCard(artist: artist), + onTap: () => GoRouter.of(context).go('/artists/${artist.id}'), + ); + }, + ), + ); + }, + ); } } - name: Add lib/src/features/artists/view/artist_card.dart @@ -924,88 +930,86 @@ steps: // Copyright 2022 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. - + import 'dart:math'; - + import 'package:flutter/material.dart'; import '../../../shared/classes/classes.dart'; import '../../../shared/extensions.dart'; import '../../../shared/views/outlined_card.dart'; import '../../../shared/views/views.dart'; - + class ArtistCard extends StatelessWidget { - const ArtistCard({ - super.key, - required this.artist, - }); - + const ArtistCard({super.key, required this.artist}); + final Artist artist; - + @override Widget build(BuildContext context) { Song nowPlaying = artist.songs[Random().nextInt(artist.songs.length)]; - + return OutlinedCard( child: LayoutBuilder( - builder: (context, dimens) => Row( - children: [ - SizedBox( - width: dimens.maxWidth * 0.4, - child: Image.asset( - artist.image.image, - fit: BoxFit.cover, - ), - ), - Expanded( - child: Padding( - padding: const EdgeInsets.only(left: 16), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Padding( - padding: const EdgeInsets.fromLTRB(0, 0, 15, 0), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text( - artist.name, - style: context.titleMedium, - overflow: TextOverflow.ellipsis, - maxLines: 1, - ), - const SizedBox(height: 10), - Text( - artist.bio, - overflow: TextOverflow.ellipsis, - style: context.labelSmall, - maxLines: 3, - ), - ]), - ), - if (dimens.maxHeight > 100) - Row( - children: [ - HoverableSongPlayButton( - size: const Size(50, 50), - song: nowPlaying, - child: Icon(Icons.play_circle, - color: context.colors.tertiary), + builder: + (context, dimens) => Row( + children: [ + SizedBox( + width: dimens.maxWidth * 0.4, + child: Image.asset(artist.image.image, fit: BoxFit.cover), + ), + Expanded( + child: Padding( + padding: const EdgeInsets.only(left: 16), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Padding( + padding: const EdgeInsets.fromLTRB(0, 0, 15, 0), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + artist.name, + style: context.titleMedium, + overflow: TextOverflow.ellipsis, + maxLines: 1, + ), + const SizedBox(height: 10), + Text( + artist.bio, + overflow: TextOverflow.ellipsis, + style: context.labelSmall, + maxLines: 3, + ), + ], ), - Text( - nowPlaying.title, - maxLines: 1, - overflow: TextOverflow.clip, - style: context.labelMedium, + ), + if (dimens.maxHeight > 100) + Row( + children: [ + HoverableSongPlayButton( + size: const Size(50, 50), + song: nowPlaying, + child: Icon( + Icons.play_circle, + color: context.colors.tertiary, + ), + ), + Text( + nowPlaying.title, + maxLines: 1, + overflow: TextOverflow.clip, + style: context.labelMedium, + ), + ], ), - ], - ), - ], + ], + ), + ), ), - ), + ], ), - ], - ), ), ); } @@ -1016,18 +1020,18 @@ steps: // Copyright 2022 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. - + import 'package:flutter/material.dart'; import 'package:url_launcher/url_launcher.dart'; - + import '../../../shared/classes/classes.dart'; import '../../../shared/views/views.dart'; - + class ArtistNews extends StatelessWidget { const ArtistNews({super.key, required this.artist}); - + final Artist artist; - + @override Widget build(BuildContext context) { return Column( @@ -1073,21 +1077,21 @@ steps: // Copyright 2022 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. - + import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; - + import '../../../shared/classes/classes.dart'; import '../../../shared/extensions.dart'; import '../../../shared/playback/bloc/bloc.dart'; import '../../../shared/views/image_clipper.dart'; import '../../../shared/views/views.dart'; - + class ArtistRankedSongs extends StatelessWidget { const ArtistRankedSongs({super.key, required this.artist}); - + final Artist artist; - + @override Widget build(BuildContext context) { return AdaptiveTable( @@ -1099,52 +1103,42 @@ steps: title: Text(song.title), subtitle: Text(song.length.toHumanizedString()), trailing: Text(song.ranking.toString()), - onTap: () => BlocProvider.of(context).add( - PlaybackEvent.changeSong(song), - ), + onTap: + () => BlocProvider.of( + context, + ).add(PlaybackEvent.changeSong(song)), ); }, columns: const [ - DataColumn( - label: Text( - 'Ranking', - ), - numeric: true, - ), - DataColumn( - label: Text( - 'Title', - ), - ), - DataColumn( - label: Text( - 'Length', - ), - ), + DataColumn(label: Text('Ranking'), numeric: true), + DataColumn(label: Text('Title')), + DataColumn(label: Text('Length')), ], - rowBuilder: (song, index) => DataRow.byIndex(index: index, cells: [ - DataCell( - HoverableSongPlayButton( - song: song, - child: Center( - child: Text(song.ranking.toString()), - ), + rowBuilder: + (song, index) => DataRow.byIndex( + index: index, + cells: [ + DataCell( + HoverableSongPlayButton( + song: song, + child: Center(child: Text(song.ranking.toString())), + ), + ), + DataCell( + Row( + children: [ + Padding( + padding: const EdgeInsets.all(2), + child: ClippedImage(song.image.image), + ), + const SizedBox(width: 5.0), + Expanded(child: Text(song.title)), + ], + ), + ), + DataCell(Text(song.length.toHumanizedString())), + ], ), - ), - DataCell( - Row(children: [ - Padding( - padding: const EdgeInsets.all(2), - child: ClippedImage(song.image.image), - ), - const SizedBox(width: 5.0), - Expanded(child: Text(song.title)), - ]), - ), - DataCell( - Text(song.length.toHumanizedString()), - ), - ]), ); } } @@ -1154,17 +1148,17 @@ steps: // Copyright 2022 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. - + import 'package:flutter/material.dart'; - + import '../../../shared/classes/classes.dart'; import '../../../shared/views/outlined_card.dart'; - + class ArtistUpdates extends StatelessWidget { const ArtistUpdates({super.key, required this.artist}); - + final Artist artist; - + @override Widget build(BuildContext context) { return Column( @@ -1183,7 +1177,7 @@ steps: child: Text(update), ), ), - ) + ), ], ); } @@ -1194,21 +1188,21 @@ steps: // Copyright 2022 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. - + import 'package:flutter/material.dart'; import 'package:go_router/go_router.dart'; - + import '../../../shared/classes/classes.dart'; import '../../../shared/extensions.dart'; import '../../../shared/views/article_content.dart'; import '../../../shared/views/image_clipper.dart'; import 'view.dart'; - + class ArtistScreen extends StatelessWidget { const ArtistScreen({required this.artist, super.key}); - + final Artist artist; - + @override Widget build(BuildContext context) { return LayoutBuilder( @@ -1322,20 +1316,20 @@ steps: // Copyright 2022 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. - + import 'package:flutter/material.dart'; - + import 'package:url_launcher/url_launcher.dart'; - + import '../../../shared/classes/classes.dart'; import '../../../shared/providers/providers.dart'; import '../../../shared/views/views.dart'; - + class ArtistEvents extends StatelessWidget { const ArtistEvents({super.key, required this.artist}); - + final Artist artist; - + @override Widget build(BuildContext context) { final theme = ThemeProvider.of(context); @@ -1391,53 +1385,32 @@ steps: ); }, columns: const [ - DataColumn( - label: Text( - 'Date', - ), - numeric: true, - ), - DataColumn( - label: Text( - 'Event', - ), - ), - DataColumn( - label: Text( - 'Location', - ), - ), - DataColumn( - label: Text( - 'More info', - ), - ), + DataColumn(label: Text('Date'), numeric: true), + DataColumn(label: Text('Event')), + DataColumn(label: Text('Location')), + DataColumn(label: Text('More info')), ], - rowBuilder: (item, index) => DataRow.byIndex(index: index, cells: [ - DataCell( - Text(item.date), - ), - DataCell( - Row(children: [ - Expanded(child: Text(item.title)), - ]), - ), - DataCell( - Text(item.location), - ), - DataCell( - Clickable( - child: Text( - item.link, - style: TextStyle( - color: linkColor.value(theme), - decoration: TextDecoration.underline, + rowBuilder: + (item, index) => DataRow.byIndex( + index: index, + cells: [ + DataCell(Text(item.date)), + DataCell(Row(children: [Expanded(child: Text(item.title))])), + DataCell(Text(item.location)), + DataCell( + Clickable( + child: Text( + item.link, + style: TextStyle( + color: linkColor.value(theme), + decoration: TextDecoration.underline, + ), + ), + onTap: () => launchUrl(Uri.parse('https://docs.flutter.dev')), + ), ), - ), - onTap: () => launchUrl(Uri.parse('https://docs.flutter.dev')), + ], ), - ), - ]), ); } } @@ -1447,26 +1420,24 @@ steps: // Copyright 2022 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. - + import 'package:flutter/material.dart'; - + import '../../../shared/classes/classes.dart'; import '../../../shared/extensions.dart'; - + class ArtistBio extends StatelessWidget { const ArtistBio({super.key, required this.artist}); - + final Artist artist; - + @override Widget build(BuildContext context) { return Text( artist.bio, style: context.bodyLarge!.copyWith( fontSize: 16, - color: context.colors.onSurface.withAlpha( - 222, - ), + color: context.colors.onSurface.withAlpha(222), ), ); } @@ -1477,10 +1448,10 @@ steps: // Copyright 2022 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. - + import 'package:flutter/material.dart'; import 'package:go_router/go_router.dart'; - + import '../features/artists/artists.dart'; import '../features/home/home.dart'; import '../features/playlists/playlists.dart'; @@ -1488,13 +1459,13 @@ steps: import 'providers/artists.dart'; import 'providers/playlists.dart'; import 'views/views.dart'; - + const _pageKey = ValueKey('_pageKey'); const _scaffoldKey = ValueKey('_scaffoldKey'); - + final artistsProvider = ArtistsProvider(); final playlistsProvider = PlaylistsProvider(); - + const List destinations = [ NavigationDestination( label: 'Home', @@ -1512,7 +1483,7 @@ steps: route: '/artists', ), ]; - + class NavigationDestination { const NavigationDestination({ required this.route, @@ -1520,82 +1491,91 @@ steps: required this.icon, this.child, }); - + final String route; final String label; final Icon icon; final Widget? child; } - + final appRouter = GoRouter( routes: [ // HomeScreen GoRoute( path: '/', - pageBuilder: (context, state) => const MaterialPage( - key: _pageKey, - child: RootLayout( - key: _scaffoldKey, - currentIndex: 0, - child: HomeScreen(), - ), - ), + pageBuilder: + (context, state) => const MaterialPage( + key: _pageKey, + child: RootLayout( + key: _scaffoldKey, + currentIndex: 0, + child: HomeScreen(), + ), + ), ), - + // PlaylistHomeScreen GoRoute( path: '/playlists', - pageBuilder: (context, state) => const MaterialPage( - key: _pageKey, - child: RootLayout( - key: _scaffoldKey, - currentIndex: 1, - child: PlaylistHomeScreen(), - ), - ), - routes: [ - GoRoute( - path: ':pid', - pageBuilder: (context, state) => MaterialPage( - key: state.pageKey, + pageBuilder: + (context, state) => const MaterialPage( + key: _pageKey, child: RootLayout( key: _scaffoldKey, currentIndex: 1, - child: PlaylistScreen( - playlist: playlistsProvider - .getPlaylist(state.pathParameters['pid']!)!, - ), + child: PlaylistHomeScreen(), ), ), + routes: [ + GoRoute( + path: ':pid', + pageBuilder: + (context, state) => MaterialPage( + key: state.pageKey, + child: RootLayout( + key: _scaffoldKey, + currentIndex: 1, + child: PlaylistScreen( + playlist: + playlistsProvider.getPlaylist( + state.pathParameters['pid']!, + )!, + ), + ), + ), ), ], ), - + // ArtistHomeScreen GoRoute( path: '/artists', - pageBuilder: (context, state) => const MaterialPage( - key: _pageKey, - child: RootLayout( - key: _scaffoldKey, - currentIndex: 2, - child: ArtistsScreen(), - ), - ), - routes: [ - GoRoute( - path: ':aid', - pageBuilder: (context, state) => MaterialPage( - key: state.pageKey, + pageBuilder: + (context, state) => const MaterialPage( + key: _pageKey, child: RootLayout( key: _scaffoldKey, currentIndex: 2, - child: ArtistScreen( - artist: - artistsProvider.getArtist(state.pathParameters['aid']!)!, - ), + child: ArtistsScreen(), ), ), + routes: [ + GoRoute( + path: ':aid', + pageBuilder: + (context, state) => MaterialPage( + key: state.pageKey, + child: RootLayout( + key: _scaffoldKey, + currentIndex: 2, + child: ArtistScreen( + artist: + artistsProvider.getArtist( + state.pathParameters['aid']!, + )!, + ), + ), + ), // builder: (context, state) => ArtistScreen( // id: state.params['aid']!, // ), @@ -1605,14 +1585,15 @@ steps: for (final route in destinations.skip(3)) GoRoute( path: route.route, - pageBuilder: (context, state) => MaterialPage( - key: _pageKey, - child: RootLayout( - key: _scaffoldKey, - currentIndex: destinations.indexOf(route), - child: const SizedBox(), - ), - ), + pageBuilder: + (context, state) => MaterialPage( + key: _pageKey, + child: RootLayout( + key: _scaffoldKey, + currentIndex: destinations.indexOf(route), + child: const SizedBox(), + ), + ), ), ], ); @@ -1622,15 +1603,15 @@ steps: // Copyright 2022 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. - + import './classes.dart'; - + class Song { final Artist artist; final String title; final Duration length; final MyArtistImage image; - + const Song(this.title, this.artist, this.length, this.image); } - name: Add lib/src/shared/classes/image.dart @@ -1639,13 +1620,14 @@ steps: // Copyright 2022 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. - + class MyArtistImage { - const MyArtistImage( - {required this.image, - required this.sourceName, - required this.sourceLink}); - + const MyArtistImage({ + required this.image, + required this.sourceName, + required this.sourceLink, + }); + final String image; final String sourceName; final String sourceLink; @@ -1656,9 +1638,9 @@ steps: // Copyright 2022 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. - + import './classes.dart'; - + class News { const News({ required this.title, @@ -1666,7 +1648,7 @@ steps: required this.blurb, required this.image, }); - + final String title; final String author; final String blurb; @@ -1710,25 +1692,26 @@ steps: // Copyright 2022 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. - + import './classes.dart'; - + class Playlist { final String id; final String title; final String description; final List songs; MyArtistImage cover; - + Playlist({ required this.id, required this.title, this.description = '', required this.songs, this.cover = const MyArtistImage( - image: 'assets/images/record.jpeg', - sourceName: 'Adobe Stock Images', - sourceLink: ''), + image: 'assets/images/record.jpeg', + sourceName: 'Adobe Stock Images', + sourceLink: '', + ), }); } - name: Add lib/src/shared/classes/classes.dart @@ -1751,7 +1734,7 @@ steps: // Copyright 2022 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. - + class Event { const Event({ required this.date, @@ -1759,7 +1742,7 @@ steps: required this.location, required this.link, }); - + final String date; final String title; final String location; @@ -1771,15 +1754,19 @@ steps: // Copyright 2022 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. - + import './classes.dart'; - + class RankedSong extends Song { final int ranking; - - const RankedSong(this.ranking, String title, Artist artist, Duration length, - MyArtistImage image) - : super(title, artist, length, image); + + const RankedSong( + this.ranking, + String title, + Artist artist, + Duration length, + MyArtistImage image, + ) : super(title, artist, length, image); } - name: Add lib/src/shared/providers/playlists.dart path: myartist/lib/src/shared/providers/playlists.dart @@ -1787,65 +1774,74 @@ steps: // Copyright 2022 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. - + import 'dart:math'; import 'package:collection/collection.dart'; import 'package:english_words/english_words.dart'; - + import '../classes/classes.dart'; import '../extensions.dart'; import 'providers.dart'; - + class PlaylistsProvider { List get playlists => _randomPlaylists; Playlist get newReleases => randomPlaylist(numSongs: 10); Playlist get topSongs => randomPlaylist(numSongs: 10); - + static List images() { return [ const MyArtistImage( - image: 'assets/images/playlists/favorite.jpg', - sourceLink: 'https://unsplash.com/photos/60GsdOMRFGc', - sourceName: 'Karsten Winegeart'), + image: 'assets/images/playlists/favorite.jpg', + sourceLink: 'https://unsplash.com/photos/60GsdOMRFGc', + sourceName: 'Karsten Winegeart', + ), const MyArtistImage( - image: 'assets/images/playlists/austin.jpg', - sourceLink: 'https://unsplash.com/photos/AlBgcDfDG_s', - sourceName: 'Carlos Alfonso'), + image: 'assets/images/playlists/austin.jpg', + sourceLink: 'https://unsplash.com/photos/AlBgcDfDG_s', + sourceName: 'Carlos Alfonso', + ), const MyArtistImage( - image: 'assets/images/playlists/reading.jpg', - sourceLink: 'https://unsplash.com/photos/wkgv7I2VTzM', - sourceName: 'Alexandra Fuller'), + image: 'assets/images/playlists/reading.jpg', + sourceLink: 'https://unsplash.com/photos/wkgv7I2VTzM', + sourceName: 'Alexandra Fuller', + ), const MyArtistImage( - image: 'assets/images/playlists/workout.jpg', - sourceLink: 'https://unsplash.com/photos/CnEEF5eJemQ', - sourceName: 'Karsten Winegeart'), + image: 'assets/images/playlists/workout.jpg', + sourceLink: 'https://unsplash.com/photos/CnEEF5eJemQ', + sourceName: 'Karsten Winegeart', + ), const MyArtistImage( - image: 'assets/images/playlists/calm.jpg', - sourceLink: 'https://unsplash.com/photos/NTyBbu66_SI', - sourceName: 'Jared Rice'), + image: 'assets/images/playlists/calm.jpg', + sourceLink: 'https://unsplash.com/photos/NTyBbu66_SI', + sourceName: 'Jared Rice', + ), const MyArtistImage( - image: 'assets/images/playlists/coffee.jpg', - sourceLink: 'https://unsplash.com/photos/XOhI_kW_TaM', - sourceName: 'Nathan Dumlao'), + image: 'assets/images/playlists/coffee.jpg', + sourceLink: 'https://unsplash.com/photos/XOhI_kW_TaM', + sourceName: 'Nathan Dumlao', + ), const MyArtistImage( - image: 'assets/images/playlists/piano.jpg', - sourceLink: 'https://unsplash.com/photos/BhfE1IgcsA8', - sourceName: 'Jordan Whitfield'), + image: 'assets/images/playlists/piano.jpg', + sourceLink: 'https://unsplash.com/photos/BhfE1IgcsA8', + sourceName: 'Jordan Whitfield', + ), const MyArtistImage( - image: 'assets/images/playlists/studying.jpg', - sourceLink: 'https://unsplash.com/photos/-moT-Deiw1M', - sourceName: 'Humble Lamb'), + image: 'assets/images/playlists/studying.jpg', + sourceLink: 'https://unsplash.com/photos/-moT-Deiw1M', + sourceName: 'Humble Lamb', + ), const MyArtistImage( - image: 'assets/images/playlists/jazz.jpg', - sourceLink: 'https://unsplash.com/photos/BY_KyTwTKq4', - sourceName: 'dimitri.photography'), + image: 'assets/images/playlists/jazz.jpg', + sourceLink: 'https://unsplash.com/photos/BY_KyTwTKq4', + sourceName: 'dimitri.photography', + ), ]; } - + Playlist? getPlaylist(String id) { return playlists.firstWhereOrNull((playlist) => playlist.id == id); } - + static Playlist randomPlaylist({int numSongs = 15}) { return Playlist( id: randomId(), @@ -1855,13 +1851,13 @@ steps: cover: images()[Random().nextInt(images().length - 1)], ); } - + static Playlist randomLengthPlaylist({int maxSongs = 15}) { final int songCount = Random().nextInt(maxSongs) + 1; - + return PlaylistsProvider.randomPlaylist(numSongs: songCount); } - + static Song randomSong() { return Song( generateRandomString(2), @@ -1870,33 +1866,35 @@ steps: images()[Random().nextInt(images().length)], ); } - - static final List _randomPlaylists = - List.generate(10, (index) => randomLengthPlaylist()); + + static final List _randomPlaylists = List.generate( + 10, + (index) => randomLengthPlaylist(), + ); } - + String randomId() { return Random().nextInt(1000000).toString(); } - + String generateRandomString(int wordCount) { final randomWords = generateWordPairs().take((wordCount).floor()); return randomWords.join(' '); } - + Duration generateRandomSongLength() { Random rand = Random(); - + int minute = rand.nextInt(5); - + int second = rand.nextInt(60); - + String secondStr = second.toString(); - + if (second < 10) { secondStr = secondStr.padLeft(2, '0'); } - + return '$minute : $secondStr'.toDuration(); } - name: Add lib/src/shared/providers/providers.dart @@ -1916,177 +1914,190 @@ steps: // Copyright 2022 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. - + import 'dart:math'; - + import 'package:collection/collection.dart'; import '../classes/classes.dart'; - + class ArtistsProvider { static ArtistsProvider get shared => ArtistsProvider(); - + List get artists => const [ - Artist( - id: 'jmo', - name: 'Jessie Morrison', + Artist( + id: 'jmo', + name: 'Jessie Morrison', + image: MyArtistImage( + image: 'assets/images/artists/woman.jpeg', + sourceLink: 'https://unsplash.com/photos/w8wpFqiMpW8', + sourceName: 'Daniel Monteiro', + ), + bio: + 'Jessie "JMo" Morrison is an American singer, actress, and dancer. The following year she won over America\'s hearts first appearing in the 2004 movie Unexpected Engagement. Soon after she released her debut album, Hopeful Romantics.', + updates: [ + 'So happy that everyone is loving the new music! It\'s been my pride and joy to work on and I\'m thrilled that you finally get to hear it!', + 'Happy Valentine\'s Day y\'all!!! I love each and every one of you 💋😘', + '#HappyGalentinesDay!!! Chocolates. Ice Cream. Your favorite rom-com. Let\'s goo!!! 💕✨', + ], + events: [ + Event( + date: '1/20/22', + title: 'Jessie Morrison: No More Heartbreak Tour', + location: 'Mountain View, California', + link: 'Tickets', + ), + Event( + date: '1/22/22', + title: 'Jessie Morrison: No More Heartbreak Tour', + location: 'Austin, Texas', + link: 'Tickets', + ), + Event( + date: '1/23/22', + title: 'Jessie Morrison: No More Heartbreak Tour', + location: 'Houston, Texas', + link: 'Tickets', + ), + Event( + date: '2/8/22', + title: 'Jessie Morrison: No More Heartbreak Tour', + location: 'Los Angeles, California', + link: 'Tickets', + ), + ], + news: [ + News( + title: + 'Jessie Morrison a 26-stop cross country tour for the first time in 6 years.', + author: 'By Jacqueline Stewart', + blurb: + 'Our favorite triple-threat Jessie Morrison is back, this time with a 26 stop tour across the country. She\'ll kick things off in Mountain View on January 20th, 2022 in Mountain View California with more stops being announced over the next few weeks...', image: MyArtistImage( - image: 'assets/images/artists/woman.jpeg', - sourceLink: 'https://unsplash.com/photos/w8wpFqiMpW8', - sourceName: 'Daniel Monteiro', + image: 'assets/images/news/concert.jpeg', + sourceLink: 'https://unsplash.com/photos/hzgs56Ze49s', + sourceName: 'Anthony DELANOIX', ), - bio: - 'Jessie "JMo" Morrison is an American singer, actress, and dancer. The following year she won over America\'s hearts first appearing in the 2004 movie Unexpected Engagement. Soon after she released her debut album, Hopeful Romantics.', - updates: [ - 'So happy that everyone is loving the new music! It\'s been my pride and joy to work on and I\'m thrilled that you finally get to hear it!', - 'Happy Valentine\'s Day y\'all!!! I love each and every one of you 💋😘', - '#HappyGalentinesDay!!! Chocolates. Ice Cream. Your favorite rom-com. Let\'s goo!!! 💕✨', - ], - events: [ - Event( - date: '1/20/22', - title: 'Jessie Morrison: No More Heartbreak Tour', - location: 'Mountain View, California', - link: 'Tickets'), - Event( - date: '1/22/22', - title: 'Jessie Morrison: No More Heartbreak Tour', - location: 'Austin, Texas', - link: 'Tickets'), - Event( - date: '1/23/22', - title: 'Jessie Morrison: No More Heartbreak Tour', - location: 'Houston, Texas', - link: 'Tickets'), - Event( - date: '2/8/22', - title: 'Jessie Morrison: No More Heartbreak Tour', - location: 'Los Angeles, California', - link: 'Tickets'), - ], - news: [ - News( - title: - 'Jessie Morrison a 26-stop cross country tour for the first time in 6 years.', - author: 'By Jacqueline Stewart', - blurb: - 'Our favorite triple-threat Jessie Morrison is back, this time with a 26 stop tour across the country. She\'ll kick things off in Mountain View on January 20th, 2022 in Mountain View California with more stops being announced over the next few weeks...', - image: MyArtistImage( - image: 'assets/images/news/concert.jpeg', - sourceLink: 'https://unsplash.com/photos/hzgs56Ze49s', - sourceName: 'Anthony DELANOIX', - ), - ) - ], ), - Artist( - id: 'lb', - name: 'Lucas Bryant', + ], + ), + Artist( + id: 'lb', + name: 'Lucas Bryant', + image: MyArtistImage( + image: 'assets/images/albums/artist1-album2.jpg', + sourceLink: 'https://unsplash.com/photos/6etHcucBiRg', + sourceName: 'Keagan Henman', + ), + bio: + 'Lucas Bryant is an American country music singer and songwriter. He moved to Nashville at the age of 18 to pursue his country music career. With 34 awards to his name, he currently holds the record for most awards in country music.', + updates: [ + 'Who\'s ready to party this weekend?! See you tomorrow, Nashville! #LBlive', + 'Can\'t wait to get back on stage after so long. What songs do you want to hear?', + 'We\'re going all in this weekend! How are you doing, Vegas?!', + ], + events: [ + Event( + date: '5/16/22', + title: 'Back To My Hometown Tour', + location: 'Indianapolis, IN', + link: 'Tickets', + ), + Event( + date: '5/18/22', + title: 'Back To My Hometown Tour', + location: 'San Antonio, TX', + link: 'Tickets', + ), + Event( + date: '5/20/22', + title: 'Back To My Hometown Tour', + location: 'Phoenix, AZ', + link: 'Tickets', + ), + Event( + date: '5/23/22', + title: 'Back To My Hometown Tour', + location: 'San Diego, CA', + link: 'Tickets', + ), + ], + news: [ + News( + title: + 'Country Music Favorites Lucas Bryant, Mariam Lubbock, Michelle Delaney and Jackson Murray Join Forces For The Biggest Performance in Country History.', + author: 'Lonnie Hall', + blurb: + 'Calling all country music fans! Fasten your seat belts because the 2022 Best of Country Awards is expecting a huge performance from some of our favorite artists. Country music legends Mariam Lubbock and Jackson Murray will be joined by Lucas Bryant and Michelle Delaney for a performance we\'ll never forget.', image: MyArtistImage( image: 'assets/images/albums/artist1-album2.jpg', sourceLink: 'https://unsplash.com/photos/6etHcucBiRg', sourceName: 'Keagan Henman', ), - bio: - 'Lucas Bryant is an American country music singer and songwriter. He moved to Nashville at the age of 18 to pursue his country music career. With 34 awards to his name, he currently holds the record for most awards in country music.', - updates: [ - 'Who\'s ready to party this weekend?! See you tomorrow, Nashville! #LBlive', - 'Can\'t wait to get back on stage after so long. What songs do you want to hear?', - 'We\'re going all in this weekend! How are you doing, Vegas?!', - ], - events: [ - Event( - date: '5/16/22', - title: 'Back To My Hometown Tour', - location: 'Indianapolis, IN', - link: 'Tickets'), - Event( - date: '5/18/22', - title: 'Back To My Hometown Tour', - location: 'San Antonio, TX', - link: 'Tickets'), - Event( - date: '5/20/22', - title: 'Back To My Hometown Tour', - location: 'Phoenix, AZ', - link: 'Tickets'), - Event( - date: '5/23/22', - title: 'Back To My Hometown Tour', - location: 'San Diego, CA', - link: 'Tickets'), - ], - news: [ - News( - title: - 'Country Music Favorites Lucas Bryant, Mariam Lubbock, Michelle Delaney and Jackson Murray Join Forces For The Biggest Performance in Country History.', - author: 'Lonnie Hall', - blurb: - 'Calling all country music fans! Fasten your seat belts because the 2022 Best of Country Awards is expecting a huge performance from some of our favorite artists. Country music legends Mariam Lubbock and Jackson Murray will be joined by Lucas Bryant and Michelle Delaney for a performance we\'ll never forget.', - image: MyArtistImage( - image: 'assets/images/albums/artist1-album2.jpg', - sourceLink: 'https://unsplash.com/photos/6etHcucBiRg', - sourceName: 'Keagan Henman', - ), - ), - ], ), - Artist( - id: 'jonjames', - name: 'Jon James', + ], + ), + Artist( + id: 'jonjames', + name: 'Jon James', + image: MyArtistImage( + image: 'assets/images/artists/joe.jpg', + sourceLink: 'https://unsplash.com/photos/k7UKO-tT5QU', + sourceName: 'Natalie Runnerstrom', + ), + bio: + 'Jon James is an American singer and songwriter. He\'s best known for his number one single "Never Going Back" which stayed atop the charts for 10 weeks.', + updates: [ + '3. MORE. DAYS. Who\'s ready for #FallingForYou?! Tune in tomorrow to see the full track list!', + '4 days until I get to share some of the favorite songs I\'ve ever written with you.', + '#FallingForYou dropping in 5 days! Send me your favorite music video concepts 🎥 😎', + ], + events: [ + Event( + date: '10/22/21', + title: 'Falling For You Tour', + location: 'Dallas, Texas', + link: 'Ticketmaster', + ), + Event( + date: '10/23/21', + title: 'Falling For You Tour', + location: 'Houston, Texas', + link: 'Ticketmaster', + ), + Event( + date: '10/26/21', + title: 'Falling For You Tour', + location: 'Phoenix, Arizona', + link: 'Ticketmaster', + ), + Event( + date: '10/27/21', + title: 'Falling For You Tour', + location: 'Los Angeles, California', + link: 'Ticketmaster', + ), + ], + news: [ + News( + title: + 'Jon James is excited for the release of his sixth album "Falling For You"', + author: 'Top Media Today', + blurb: + 'Jon James will be dropping his new album "Falling For You" on Friday to much fan excitement. The 6-time Grammy winning artist has spent the last year writing and recording for this album that\'s been dubbed "his best work yet."', image: MyArtistImage( - image: 'assets/images/artists/joe.jpg', - sourceLink: 'https://unsplash.com/photos/k7UKO-tT5QU', - sourceName: 'Natalie Runnerstrom', + image: 'assets/images/news/recording_studio.jpg', + sourceLink: 'https://unsplash.com/photos/CbOGmLA46JI', + sourceName: 'Yohann LIBOT', ), - bio: - 'Jon James is an American singer and songwriter. He\'s best known for his number one single "Never Going Back" which stayed atop the charts for 10 weeks.', - updates: [ - '3. MORE. DAYS. Who\'s ready for #FallingForYou?! Tune in tomorrow to see the full track list!', - '4 days until I get to share some of the favorite songs I\'ve ever written with you.', - '#FallingForYou dropping in 5 days! Send me your favorite music video concepts 🎥 😎', - ], - events: [ - Event( - date: '10/22/21', - title: 'Falling For You Tour', - location: 'Dallas, Texas', - link: 'Ticketmaster'), - Event( - date: '10/23/21', - title: 'Falling For You Tour', - location: 'Houston, Texas', - link: 'Ticketmaster'), - Event( - date: '10/26/21', - title: 'Falling For You Tour', - location: 'Phoenix, Arizona', - link: 'Ticketmaster'), - Event( - date: '10/27/21', - title: 'Falling For You Tour', - location: 'Los Angeles, California', - link: 'Ticketmaster'), - ], - news: [ - News( - title: - 'Jon James is excited for the release of his sixth album "Falling For You"', - author: 'Top Media Today', - blurb: - 'Jon James will be dropping his new album "Falling For You" on Friday to much fan excitement. The 6-time Grammy winning artist has spent the last year writing and recording for this album that\'s been dubbed "his best work yet."', - image: MyArtistImage( - image: 'assets/images/news/recording_studio.jpg', - sourceLink: 'https://unsplash.com/photos/CbOGmLA46JI', - sourceName: 'Yohann LIBOT'), - ) - ], ), - ]; - + ], + ), + ]; + Artist? getArtist(String id) { return artists.firstWhereOrNull((artist) => artist.id == id); } - + Artist get randomArtist => artists[Random().nextInt(artists.length)]; } - name: Add lib/src/shared/providers/songs.dart @@ -2146,9 +2157,10 @@ steps: ArtistsProvider.shared.getArtist('jonjames')!, '3:35'.toDuration(), const MyArtistImage( - image: 'assets/images/albums/artist4-album2.jpg', - sourceLink: 'https://unsplash.com/photos/RQgKM1h2agA', - sourceName: 'Alexandru Acea'), + image: 'assets/images/albums/artist4-album2.jpg', + sourceLink: 'https://unsplash.com/photos/RQgKM1h2agA', + sourceName: 'Alexandru Acea', + ), ), RankedSong( 2, @@ -2156,9 +2168,10 @@ steps: ArtistsProvider.shared.getArtist('jonjames')!, '3:52'.toDuration(), const MyArtistImage( - image: 'assets/images/albums/artist4-album1.jpg', - sourceLink: 'https://unsplash.com/photos/ZWDg7v2FPWE', - sourceName: 'Jr Korpa'), + image: 'assets/images/albums/artist4-album1.jpg', + sourceLink: 'https://unsplash.com/photos/ZWDg7v2FPWE', + sourceName: 'Jr Korpa', + ), ), RankedSong( 3, @@ -2166,9 +2179,10 @@ steps: ArtistsProvider.shared.getArtist('jonjames')!, '3:39'.toDuration(), const MyArtistImage( - image: 'assets/images/albums/artist4-album3.jpg', - sourceLink: 'https://unsplash.com/photos/rX12B5uX7QM', - sourceName: 'Stormseeker'), + image: 'assets/images/albums/artist4-album3.jpg', + sourceLink: 'https://unsplash.com/photos/rX12B5uX7QM', + sourceName: 'Stormseeker', + ), ), RankedSong( 1, @@ -2259,12 +2273,13 @@ steps: } class ThemeProvider extends InheritedWidget { - const ThemeProvider( - {super.key, - required this.settings, - required this.lightDynamic, - required this.darkDynamic, - required super.child}); + const ThemeProvider({ + super.key, + required this.settings, + required this.lightDynamic, + required this.darkDynamic, + required super.child, + }); final ValueNotifier settings; final ColorScheme? lightDynamic; @@ -2290,8 +2305,9 @@ steps: Color blend(Color targetColor) { return Color( - // ignore: deprecated_member_use - Blend.harmonize(targetColor.value, settings.value.sourceColor.value)); + // ignore: deprecated_member_use + Blend.harmonize(targetColor.value, settings.value.sourceColor.value), + ); } Color source(Color? target) { @@ -2303,18 +2319,18 @@ steps: } ColorScheme colors(Brightness brightness, Color? targetColor) { - final dynamicPrimary = brightness == Brightness.light - ? lightDynamic?.primary - : darkDynamic?.primary; + final dynamicPrimary = + brightness == Brightness.light + ? lightDynamic?.primary + : darkDynamic?.primary; return ColorScheme.fromSeed( seedColor: dynamicPrimary ?? source(targetColor), brightness: brightness, ); } - ShapeBorder get shapeMedium => RoundedRectangleBorder( - borderRadius: BorderRadius.circular(8), - ); + ShapeBorder get shapeMedium => + RoundedRectangleBorder(borderRadius: BorderRadius.circular(8)); CardTheme cardTheme() { return CardTheme( @@ -2344,21 +2360,13 @@ steps: labelColor: colors.secondary, unselectedLabelColor: colors.onSurfaceVariant, indicator: BoxDecoration( - border: Border( - bottom: BorderSide( - color: colors.secondary, - width: 2, - ), - ), + border: Border(bottom: BorderSide(color: colors.secondary, width: 2)), ), ); } BottomAppBarTheme bottomAppBarTheme(ColorScheme colors) { - return BottomAppBarTheme( - color: colors.surface, - elevation: 0, - ); + return BottomAppBarTheme(color: colors.surface, elevation: 0); } BottomNavigationBarThemeData bottomNavigationBarTheme(ColorScheme colors) { @@ -2377,9 +2385,7 @@ steps: } DrawerThemeData drawerTheme(ColorScheme colors) { - return DrawerThemeData( - backgroundColor: colors.surface, - ); + return DrawerThemeData(backgroundColor: colors.surface); } ThemeData light([Color? targetColor]) { @@ -2438,10 +2444,7 @@ steps: } class ThemeSettings { - ThemeSettings({ - required this.sourceColor, - required this.themeMode, - }); + ThemeSettings({required this.sourceColor, required this.themeMode}); final Color sourceColor; final ThemeMode themeMode; @@ -2452,10 +2455,7 @@ steps: } // Custom Colors - const linkColor = CustomColor( - name: 'Link Color', - color: Color(0xFF00B0FF), - ); + const linkColor = CustomColor(name: 'Link Color', color: Color(0xFF00B0FF)); class CustomColor { const CustomColor({ @@ -2486,51 +2486,36 @@ steps: ThemeData get theme => Theme.of(this); TextTheme get textTheme => theme.textTheme; // Modify this line ColorScheme get colors => theme.colorScheme; - TextStyle? get displayLarge => textTheme.displayLarge?.copyWith( - color: colors.onSurface, - ); - TextStyle? get displayMedium => textTheme.displayMedium?.copyWith( - color: colors.onSurface, - ); - TextStyle? get displaySmall => textTheme.displaySmall?.copyWith( - color: colors.onSurface, - ); - TextStyle? get headlineLarge => textTheme.headlineLarge?.copyWith( - color: colors.onSurface, - ); - TextStyle? get headlineMedium => textTheme.headlineMedium?.copyWith( - color: colors.onSurface, - ); - TextStyle? get headlineSmall => textTheme.headlineSmall?.copyWith( - color: colors.onSurface, - ); - TextStyle? get titleLarge => textTheme.titleLarge?.copyWith( - color: colors.onSurface, - ); - TextStyle? get titleMedium => textTheme.titleMedium?.copyWith( - color: colors.onSurface, - ); - TextStyle? get titleSmall => textTheme.titleSmall?.copyWith( - color: colors.onSurface, - ); - TextStyle? get labelLarge => textTheme.labelLarge?.copyWith( - color: colors.onSurface, - ); - TextStyle? get labelMedium => textTheme.labelMedium?.copyWith( - color: colors.onSurface, - ); - TextStyle? get labelSmall => textTheme.labelSmall?.copyWith( - color: colors.onSurface, - ); - TextStyle? get bodyLarge => textTheme.bodyLarge?.copyWith( - color: colors.onSurface, - ); - TextStyle? get bodyMedium => textTheme.bodyMedium?.copyWith( - color: colors.onSurface, - ); - TextStyle? get bodySmall => textTheme.bodySmall?.copyWith( - color: colors.onSurface, - ); + TextStyle? get displayLarge => + textTheme.displayLarge?.copyWith(color: colors.onSurface); + TextStyle? get displayMedium => + textTheme.displayMedium?.copyWith(color: colors.onSurface); + TextStyle? get displaySmall => + textTheme.displaySmall?.copyWith(color: colors.onSurface); + TextStyle? get headlineLarge => + textTheme.headlineLarge?.copyWith(color: colors.onSurface); + TextStyle? get headlineMedium => + textTheme.headlineMedium?.copyWith(color: colors.onSurface); + TextStyle? get headlineSmall => + textTheme.headlineSmall?.copyWith(color: colors.onSurface); + TextStyle? get titleLarge => + textTheme.titleLarge?.copyWith(color: colors.onSurface); + TextStyle? get titleMedium => + textTheme.titleMedium?.copyWith(color: colors.onSurface); + TextStyle? get titleSmall => + textTheme.titleSmall?.copyWith(color: colors.onSurface); + TextStyle? get labelLarge => + textTheme.labelLarge?.copyWith(color: colors.onSurface); + TextStyle? get labelMedium => + textTheme.labelMedium?.copyWith(color: colors.onSurface); + TextStyle? get labelSmall => + textTheme.labelSmall?.copyWith(color: colors.onSurface); + TextStyle? get bodyLarge => + textTheme.bodyLarge?.copyWith(color: colors.onSurface); + TextStyle? get bodyMedium => + textTheme.bodyMedium?.copyWith(color: colors.onSurface); + TextStyle? get bodySmall => + textTheme.bodySmall?.copyWith(color: colors.onSurface); } extension BreakpointUtils on BoxConstraints { @@ -2542,17 +2527,17 @@ steps: extension DurationString on String { /// Assumes a string (roughly) of the format '\d{1,2}:\d{2}' Duration toDuration() => switch (split(':')) { - [var minutes, var seconds] => Duration( - minutes: int.parse(minutes.trim()), - seconds: int.parse(seconds.trim()), - ), - [var hours, var minutes, var seconds] => Duration( - hours: int.parse(hours.trim()), - minutes: int.parse(minutes.trim()), - seconds: int.parse(seconds.trim()), - ), - _ => throw Exception('Invalid duration string: $this'), - }; + [var minutes, var seconds] => Duration( + minutes: int.parse(minutes.trim()), + seconds: int.parse(seconds.trim()), + ), + [var hours, var minutes, var seconds] => Duration( + hours: int.parse(hours.trim()), + minutes: int.parse(minutes.trim()), + seconds: int.parse(seconds.trim()), + ), + _ => throw Exception('Invalid duration string: $this'), + }; } extension HumanizedDuration on Duration { @@ -2575,20 +2560,20 @@ steps: // Copyright 2022 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. - + part of 'playback_bloc.dart'; - + @Freezed() class PlaybackEvent with _$PlaybackEvent { const factory PlaybackEvent.togglePlayPause() = TogglePlayPause; const factory PlaybackEvent.changeSong(Song song) = ChangeSong; const factory PlaybackEvent.setVolume(double value) = SetVolume; const factory PlaybackEvent.toggleMute() = ToggleMute; - + /// Used to move to a specific timestamp in a song, likely because the user /// has dragged the playback bar. Values should be between 0 and 1. const factory PlaybackEvent.moveToInSong(double percent) = MoveToInSong; - + /// Used to indicate incremental progress in the song that is currently /// playing. const factory PlaybackEvent.songProgress(Duration duration) = SongProgress; @@ -2599,25 +2584,25 @@ steps: // Copyright 2022 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. - + part of 'playback_bloc.dart'; - + @Freezed() class PlaybackState with _$PlaybackState { const factory PlaybackState({ /// Legal values are between 0 and 1. @Default(0.5) double volume, - + /// Used to restore the volume after un-muting. double? previousVolume, @Default(false) bool isMuted, @Default(false) bool isPlaying, SongWithProgress? songWithProgress, }) = _PlaybackState; - + factory PlaybackState.initial() => const PlaybackState(); } - + /// Helper which enforces our rule that our `song` and `progress` must either /// both be `null`, or both have a real value. @Freezed() @@ -2641,16 +2626,16 @@ steps: // Copyright 2022 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. - + import 'dart:async'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:freezed_annotation/freezed_annotation.dart'; import '../../classes/classes.dart'; - + part 'playback_event.dart'; part 'playback_state.dart'; part 'playback_bloc.freezed.dart'; - + class PlaybackBloc extends Bloc { PlaybackBloc() : super(PlaybackState.initial()) { on( @@ -2664,10 +2649,10 @@ steps: ), ); } - + static const _playbackUpdateInterval = Duration(milliseconds: 100); StreamSubscription? _currentlyPlayingSubscription; - + Stream _startPlayingStream() async* { while (state.songWithProgress!.progress < state.songWithProgress!.song.length) { @@ -2680,21 +2665,22 @@ steps: } } } - - void _handlePlaybackProgress(Duration progress) => add( - PlaybackEvent.songProgress(progress), - ); - + + void _handlePlaybackProgress(Duration progress) => + add(PlaybackEvent.songProgress(progress)); + void _togglePlayPause(TogglePlayPause event, Emitter emit) { state.isPlaying ? _pausePlayback() : _resumePlayback(); emit(state.copyWith(isPlaying: !state.isPlaying)); } - + void _pausePlayback() => _currentlyPlayingSubscription!.cancel(); - - void _resumePlayback() => _currentlyPlayingSubscription = - _startPlayingStream().listen(_handlePlaybackProgress); - + + void _resumePlayback() => + _currentlyPlayingSubscription = _startPlayingStream().listen( + _handlePlaybackProgress, + ); + void _changeSong(ChangeSong event, Emitter emit) { emit( state.copyWith( @@ -2707,22 +2693,18 @@ steps: ); _resumePlayback(); } - + void _songProgress(SongProgress event, Emitter emit) => emit( - state.copyWith( - songWithProgress: state.songWithProgress!.copyWith( - progress: state.songWithProgress!.progress + event.duration, - ), - ), - ); + state.copyWith( + songWithProgress: state.songWithProgress!.copyWith( + progress: state.songWithProgress!.progress + event.duration, + ), + ), + ); void _setVolume(SetVolume event, Emitter emit) => emit( - state.copyWith( - volume: event.value, - isMuted: false, - previousVolume: null, - ), - ); - + state.copyWith(volume: event.value, isMuted: false, previousVolume: null), + ); + void _toggleMute(ToggleMute event, Emitter emit) { if (state.isMuted) { emit( @@ -2734,15 +2716,11 @@ steps: ); } else { emit( - state.copyWith( - isMuted: true, - volume: 0, - previousVolume: state.volume, - ), + state.copyWith(isMuted: true, volume: 0, previousVolume: state.volume), ); } } - + void _moveToInSong(MoveToInSong event, Emitter emit) { _pausePlayback(); final targetMilliseconds = @@ -2756,7 +2734,7 @@ steps: ), ); } - + @override Future close() async { await _currentlyPlayingSubscription?.cancel(); @@ -2769,31 +2747,22 @@ steps: // Copyright 2022 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. - + import 'package:flutter/material.dart'; - + class ArticleContent extends StatelessWidget { - const ArticleContent({ - super.key, - required this.child, - this.maxWidth = 960, - }); - + const ArticleContent({super.key, required this.child, this.maxWidth = 960}); + final double maxWidth; final Widget child; - + @override Widget build(BuildContext context) { return Container( alignment: Alignment.topCenter, child: ConstrainedBox( - constraints: BoxConstraints( - maxWidth: maxWidth, - ), - child: Padding( - padding: const EdgeInsets.all(15), - child: child, - ), + constraints: BoxConstraints(maxWidth: maxWidth), + child: Padding(padding: const EdgeInsets.all(15), child: child), ), ); } @@ -2804,30 +2773,27 @@ steps: // Copyright 2022 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. - + import 'package:flutter/material.dart'; - + class OutlinedCard extends StatefulWidget { - const OutlinedCard({ - super.key, - required this.child, - this.clickable = true, - }); - + const OutlinedCard({super.key, required this.child, this.clickable = true}); + final Widget child; final bool clickable; - + @override State createState() => _OutlinedCardState(); } - + class _OutlinedCardState extends State { @override Widget build(BuildContext context) { return MouseRegion( - cursor: widget.clickable - ? SystemMouseCursors.click - : SystemMouseCursors.basic, + cursor: + widget.clickable + ? SystemMouseCursors.click + : SystemMouseCursors.basic, child: Container( // Add box decoration here child: widget.child, @@ -2841,9 +2807,9 @@ steps: // Copyright 2022 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. - + import 'package:flutter/material.dart'; - + class AdaptiveNavigation extends StatelessWidget { const AdaptiveNavigation({ super.key, @@ -2852,12 +2818,12 @@ steps: required this.onDestinationSelected, required this.child, }); - + final List destinations; final int selectedIndex; final void Function(int index) onDestinationSelected; final Widget child; - + @override Widget build(BuildContext context) { return LayoutBuilder( @@ -2870,12 +2836,15 @@ steps: NavigationRail( extended: dimens.maxWidth >= 800, minExtendedWidth: 180, - destinations: destinations - .map((e) => NavigationRailDestination( - icon: e.icon, - label: Text(e.label), - )) - .toList(), + destinations: + destinations + .map( + (e) => NavigationRailDestination( + icon: e.icon, + label: Text(e.label), + ), + ) + .toList(), selectedIndex: selectedIndex, onDestinationSelected: onDestinationSelected, ), @@ -2884,7 +2853,7 @@ steps: ), ); // Add closing curly bracket - + // Add return for mobile layout }, ); @@ -2896,11 +2865,11 @@ steps: // Copyright 2022 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. - + import 'package:flutter/material.dart'; import '../extensions.dart'; import 'outlined_card.dart'; - + class ImageTile extends StatelessWidget { const ImageTile({ super.key, @@ -2908,27 +2877,25 @@ steps: required this.title, required this.subtitle, }); - + final String image; final String title; final String subtitle; - + @override Widget build(BuildContext context) { return OutlinedCard( - child: Column(crossAxisAlignment: CrossAxisAlignment.start, children: [ - Row( - children: [ - Expanded( - child: Image.asset(image, fit: BoxFit.cover), - ), - ], - ), - Column( - mainAxisAlignment: MainAxisAlignment.center, - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - Padding( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + children: [Expanded(child: Image.asset(image, fit: BoxFit.cover))], + ), + Column( + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Padding( padding: const EdgeInsets.fromLTRB(10, 5, 10, 5), child: Text( title, @@ -2938,20 +2905,25 @@ steps: ), overflow: TextOverflow.ellipsis, maxLines: 1, - )), - Padding( - padding: const EdgeInsets.symmetric(vertical: 5, horizontal: 10), - child: Text( - subtitle, - overflow: TextOverflow.ellipsis, - style: context.labelSmall, - maxLines: 2, - textAlign: TextAlign.center, + ), ), - ), - ], - ) - ]), + Padding( + padding: const EdgeInsets.symmetric( + vertical: 5, + horizontal: 10, + ), + child: Text( + subtitle, + overflow: TextOverflow.ellipsis, + style: context.labelSmall, + maxLines: 2, + textAlign: TextAlign.center, + ), + ), + ], + ), + ], + ), ); } } @@ -2961,13 +2933,13 @@ steps: // Copyright 2022 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. - + import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; - + import '../playback/bloc/bloc.dart'; - + /// Widget which catches all incoming Spacebar presses and routes them to the /// [PlaybackBloc]. /// @@ -2976,21 +2948,16 @@ steps: /// shortcuts. By sitting below that machinery, this installs a global Spacebar /// listener which toggles Playback, as is customary in music-playing apps. class PlayPauseListener extends StatelessWidget { - const PlayPauseListener({ - super.key, - required this.child, - }); - + const PlayPauseListener({super.key, required this.child}); + final Widget child; - + @override Widget build(BuildContext context) { // Immediately catch any [_PlayPauseIntent] events released by the inner // [Shortcuts] widget. return Actions( - actions: >{ - _PlayPauseIntent: _PlayPauseAction(), - }, + actions: >{_PlayPauseIntent: _PlayPauseAction()}, child: Shortcuts( // Register a shortcut for Spacebar presses that release a // [_PlayPauseIntent] up the tree to the nearest [Actions] widget. @@ -2998,9 +2965,9 @@ steps: const SingleActivator(LogicalKeyboardKey.space): _PlayPauseIntent( // Create a closure which sends a [TogglePlayPause] event to the // [PlaybackBloc]. - () => BlocProvider.of(context).add( - const PlaybackEvent.togglePlayPause(), - ), + () => BlocProvider.of( + context, + ).add(const PlaybackEvent.togglePlayPause()), ), }, child: child, @@ -3008,15 +2975,15 @@ steps: ); } } - + class _PlayPauseAction extends Action<_PlayPauseIntent> { @override void invoke(_PlayPauseIntent intent) => intent.handler(); } - + class _PlayPauseIntent extends Intent { const _PlayPauseIntent(this.handler); - + final VoidCallback handler; } - name: Add lib/src/shared/views/image_card.dart @@ -3025,26 +2992,27 @@ steps: // Copyright 2022 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. - + import 'package:flutter/material.dart'; import '../../shared/extensions.dart'; import 'outlined_card.dart'; - + class ImageCard extends StatelessWidget { - const ImageCard( - {super.key, - required this.title, - required this.details, - required this.image, - this.subtitle, - this.clickable = false}); - + const ImageCard({ + super.key, + required this.title, + required this.details, + required this.image, + this.subtitle, + this.clickable = false, + }); + final String title; final String? subtitle; final String details; final String image; final bool clickable; - + @override Widget build(BuildContext context) { const padding = EdgeInsets.all(8.0); @@ -3052,54 +3020,51 @@ steps: clickable: clickable, child: Padding( padding: const EdgeInsets.all(8.0), - child: LayoutBuilder(builder: (context, constraints) { - return Row( - children: [ - if (constraints.maxWidth > 600) - SizedBox( - width: 170, - height: 170, - child: Image.asset( - image, - fit: BoxFit.cover, + child: LayoutBuilder( + builder: (context, constraints) { + return Row( + children: [ + if (constraints.maxWidth > 600) + SizedBox( + width: 170, + height: 170, + child: Image.asset(image, fit: BoxFit.cover), ), - ), - Expanded( - child: Padding( - padding: padding, - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Padding( - padding: const EdgeInsets.only(bottom: 5), - child: Text( - title, - style: context.titleLarge! - .copyWith(fontWeight: FontWeight.bold), - ), - ), - if (subtitle != null) + Expanded( + child: Padding( + padding: padding, + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ Padding( - padding: const EdgeInsets.only(bottom: 10), + padding: const EdgeInsets.only(bottom: 5), child: Text( - subtitle!, - style: context.labelMedium, + title, + style: context.titleLarge!.copyWith( + fontWeight: FontWeight.bold, + ), ), ), - Text( - details, - style: context.labelMedium?.copyWith( - fontSize: 16, - height: 1.25, + if (subtitle != null) + Padding( + padding: const EdgeInsets.only(bottom: 10), + child: Text(subtitle!, style: context.labelMedium), + ), + Text( + details, + style: context.labelMedium?.copyWith( + fontSize: 16, + height: 1.25, + ), ), - ), - ], + ], + ), ), ), - ), - ], - ); - }), + ], + ); + }, + ), ), ); } @@ -3110,13 +3075,13 @@ steps: // Copyright 2022 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. - + import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import '../classes/classes.dart'; import '../playback/bloc/bloc.dart'; import '../views/views.dart'; - + /// Renders the child widget when not hovered and a Play button when hovered. class HoverableSongPlayButton extends StatelessWidget { const HoverableSongPlayButton({ @@ -3126,21 +3091,22 @@ steps: this.size = const Size(50, 50), this.hoverMode = HoverMode.replace, }); - + final Widget child; final Size size; final Song song; final HoverMode hoverMode; - + @override Widget build(BuildContext context) { return HoverToggle( hoverChild: Center( child: GestureDetector( child: const Icon(Icons.play_arrow), - onTap: () => BlocProvider.of(context).add( - PlaybackEvent.changeSong(song), - ), + onTap: + () => BlocProvider.of( + context, + ).add(PlaybackEvent.changeSong(song)), ), ), mode: hoverMode, @@ -3180,16 +3146,18 @@ steps: final bloc = BlocProvider.of(context); return BlocBuilder( bloc: bloc, - builder: (context, state) => _BottomBar( - artist: state.songWithProgress?.song.artist, - isMuted: state.isMuted, - isPlaying: state.isPlaying, - preferredSize: preferredSize, - progress: state.songWithProgress?.progress, - song: state.songWithProgress?.song, - togglePlayPause: () => bloc.add(const PlaybackEvent.togglePlayPause()), - volume: state.volume, - ), + builder: + (context, state) => _BottomBar( + artist: state.songWithProgress?.song.artist, + isMuted: state.isMuted, + isPlaying: state.isPlaying, + preferredSize: preferredSize, + progress: state.songWithProgress?.progress, + song: state.songWithProgress?.song, + togglePlayPause: + () => bloc.add(const PlaybackEvent.togglePlayPause()), + volume: state.volume, + ), ); } } @@ -3217,10 +3185,12 @@ steps: @override Widget build(BuildContext context) => LayoutBuilder( - builder: (context, constraints) => constraints.isTablet - ? _buildDesktopBar(context, constraints) - : _buildMobileBar(context, constraints), - ); + builder: + (context, constraints) => + constraints.isTablet + ? _buildDesktopBar(context, constraints) + : _buildMobileBar(context, constraints), + ); Widget _buildDesktopBar(BuildContext context, BoxConstraints constraints) { return ColoredBox( @@ -3233,10 +3203,7 @@ steps: Row( children: [ _AlbumArt(song: song), - _SongDetails( - artist: artist, - song: song, - ), + _SongDetails(artist: artist, song: song), ], ), Flexible( @@ -3249,12 +3216,7 @@ steps: isPlaying: isPlaying, togglePlayPause: togglePlayPause, ), - Center( - child: _ProgressBar( - progress: progress, - song: song, - ), - ), + Center(child: _ProgressBar(progress: progress, song: song)), ], ), ), @@ -3268,17 +3230,18 @@ steps: final overlay = Overlay.of(context); OverlayEntry? entry; entry = OverlayEntry( - builder: (context) => Stack( - children: [ - Positioned( - child: _FullScreenPlayer( - onClose: () { - entry?.remove(); - }, - ), + builder: + (context) => Stack( + children: [ + Positioned( + child: _FullScreenPlayer( + onClose: () { + entry?.remove(); + }, + ), + ), + ], ), - ], - ), ); overlay.insert(entry); }, @@ -3290,10 +3253,10 @@ steps: } double get songProgress => switch ((progress, song)) { - (Duration progress, Song song) => - progress.inMilliseconds / song.length.inMilliseconds, - _ => 0, - }; + (Duration progress, Song song) => + progress.inMilliseconds / song.length.inMilliseconds, + _ => 0, + }; Widget _buildMobileBar(BuildContext context, BoxConstraints constraints) { return ColoredBox( @@ -3306,17 +3269,18 @@ steps: final overlay = Overlay.of(context); OverlayEntry? entry; entry = OverlayEntry( - builder: (context) => Stack( - children: [ - Positioned( - child: _MobilePlayer( - onClose: () { - entry?.remove(); - }, - ), + builder: + (context) => Stack( + children: [ + Positioned( + child: _MobilePlayer( + onClose: () { + entry?.remove(); + }, + ), + ), + ], ), - ], - ), ); overlay.insert(entry); }, @@ -3345,10 +3309,7 @@ steps: mainAxisAlignment: MainAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start, children: [ - Text( - song?.title ?? '', - style: context.labelMedium, - ), + Text(song?.title ?? '', style: context.labelMedium), Text( song?.artist.name ?? '', style: context.labelSmall, @@ -3374,10 +3335,7 @@ steps: } class _ProgressBar extends StatelessWidget { - const _ProgressBar({ - required this.progress, - required this.song, - }); + const _ProgressBar({required this.progress, required this.song}); /// Current playback depth into user is into [song]. final Duration? progress; @@ -3385,10 +3343,10 @@ steps: final Song? song; double get songProgress => switch ((progress, song)) { - (Duration progress, Song song) => - progress.inMilliseconds / song.length.inMilliseconds, - _ => 0, - }; + (Duration progress, Song song) => + progress.inMilliseconds / song.length.inMilliseconds, + _ => 0, + }; @override Widget build(BuildContext context) { @@ -3406,29 +3364,32 @@ steps: children: [ const SizedBox(width: 10), SizedBox( - child: progress != null - ? Text(progress!.toHumanizedString(), - style: Theme.of(context).textTheme.bodySmall) - : const Text('-'), + child: + progress != null + ? Text( + progress!.toHumanizedString(), + style: Theme.of(context).textTheme.bodySmall, + ) + : const Text('-'), ), Expanded( child: Slider( value: songProgress.clamp(0, 1), divisions: 1000, onChanged: (percent) { - BlocProvider.of(context).add( - PlaybackEvent.moveToInSong(percent), - ); + BlocProvider.of( + context, + ).add(PlaybackEvent.moveToInSong(percent)); }, onChangeEnd: (percent) { - BlocProvider.of(context).add( - PlaybackEvent.moveToInSong(percent), - ); + BlocProvider.of( + context, + ).add(PlaybackEvent.moveToInSong(percent)); // Because dragging pauses auto playback, resume playing // once the user finishes dragging. - BlocProvider.of(context).add( - const PlaybackEvent.togglePlayPause(), - ); + BlocProvider.of( + context, + ).add(const PlaybackEvent.togglePlayPause()); }, activeColor: Theme.of(context).colorScheme.onTertiaryContainer, @@ -3436,12 +3397,15 @@ steps: ), ), SizedBox( - child: song != null - ? Text(song!.length.toHumanizedString(), - style: Theme.of(context).textTheme.bodySmall) - : const Text('-'), + child: + song != null + ? Text( + song!.length.toHumanizedString(), + style: Theme.of(context).textTheme.bodySmall, + ) + : const Text('-'), ), - const SizedBox(width: 10) + const SizedBox(width: 10), ], ), ); @@ -3451,10 +3415,7 @@ steps: } class _VolumeBar extends StatelessWidget { - const _VolumeBar({ - required this.volume, - required this.isMuted, - }); + const _VolumeBar({required this.volume, required this.isMuted}); /// The percentage, between 0 and 1, at which to render the volume slider. final double volume; @@ -3467,17 +3428,16 @@ steps: @override Widget build(BuildContext context) { return ConstrainedBox( - constraints: const BoxConstraints( - maxWidth: 200, - ), + constraints: const BoxConstraints(maxWidth: 200), child: Padding( padding: const EdgeInsets.all(8), child: Row( children: [ GestureDetector( - onTap: () => BlocProvider.of(context).add( - const PlaybackEvent.toggleMute(), - ), + onTap: + () => BlocProvider.of( + context, + ).add(const PlaybackEvent.toggleMute()), child: Icon(!isMuted ? Icons.volume_mute : Icons.volume_off), ), Expanded( @@ -3486,8 +3446,10 @@ steps: min: 0, max: 1, divisions: 100, - onChanged: (newValue) => BlocProvider.of(context) - .add(PlaybackEvent.setVolume(newValue)), + onChanged: + (newValue) => BlocProvider.of( + context, + ).add(PlaybackEvent.setVolume(newValue)), activeColor: Theme.of(context).colorScheme.onTertiaryContainer, inactiveColor: Theme.of(context).colorScheme.onSurface, ), @@ -3510,49 +3472,50 @@ steps: @override Widget build(BuildContext context) { - return LayoutBuilder(builder: (context, constraints) { - double iconSize = 24; - double playIconSize = 32; - double innerPadding = 16; - double playPadding = 20; - if (constraints.maxWidth < 500) { - iconSize = 21; - playIconSize = 28; - innerPadding = 14; - playPadding = 17; - } - return Row( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Padding( + return LayoutBuilder( + builder: (context, constraints) { + double iconSize = 24; + double playIconSize = 32; + double innerPadding = 16; + double playPadding = 20; + if (constraints.maxWidth < 500) { + iconSize = 21; + playIconSize = 28; + innerPadding = 14; + playPadding = 17; + } + return Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Padding( padding: EdgeInsets.fromLTRB(0, 0, innerPadding, 0), - child: Icon(Icons.shuffle, size: iconSize)), - Icon(Icons.skip_previous, size: iconSize), - Padding( - padding: EdgeInsets.fromLTRB(playPadding, 0, innerPadding, 0), - child: GestureDetector( - onTap: togglePlayPause, - child: Icon( - isPlaying ? Icons.pause_circle : Icons.play_circle, - size: playIconSize, + child: Icon(Icons.shuffle, size: iconSize), + ), + Icon(Icons.skip_previous, size: iconSize), + Padding( + padding: EdgeInsets.fromLTRB(playPadding, 0, innerPadding, 0), + child: GestureDetector( + onTap: togglePlayPause, + child: Icon( + isPlaying ? Icons.pause_circle : Icons.play_circle, + size: playIconSize, + ), ), ), - ), - Icon(Icons.skip_next, size: iconSize), - Padding( - padding: EdgeInsets.fromLTRB(innerPadding, 0, 0, 0), - child: Icon(Icons.repeat, size: iconSize), - ), - ], - ); - }); + Icon(Icons.skip_next, size: iconSize), + Padding( + padding: EdgeInsets.fromLTRB(innerPadding, 0, 0, 0), + child: Icon(Icons.repeat, size: iconSize), + ), + ], + ); + }, + ); } } class _AlbumArt extends StatelessWidget { - const _AlbumArt({ - required this.song, - }); + const _AlbumArt({required this.song}); final Song? song; @@ -3563,21 +3526,17 @@ steps: child: SizedBox( width: 70, height: 70, - child: song != null - ? Image.asset(song!.image.image) - : Container( - color: Colors.pink[100], - ), + child: + song != null + ? Image.asset(song!.image.image) + : Container(color: Colors.pink[100]), ), ); } } class _SongDetails extends StatelessWidget { - const _SongDetails({ - required this.artist, - required this.song, - }); + const _SongDetails({required this.artist, required this.song}); final Artist? artist; final Song? song; @@ -3609,9 +3568,7 @@ steps: } class _FullScreenPlayer extends StatefulWidget { - const _FullScreenPlayer({ - required this.onClose, - }); + const _FullScreenPlayer({required this.onClose}); final VoidCallback onClose; @@ -3643,29 +3600,33 @@ steps: final bloc = BlocProvider.of(context); return BlocBuilder( bloc: bloc, - builder: (context, state) => Theme( - data: ThemeProvider.of(context).dark(), - child: Scaffold( - body: LayoutBuilder( - builder: (context, dimens) { - return MouseRegion( - onHover: (_) { - setState(() { - _showControls = true; - }); - hideControls(); + builder: + (context, state) => Theme( + data: ThemeProvider.of(context).dark(), + child: Scaffold( + body: LayoutBuilder( + builder: (context, dimens) { + return MouseRegion( + onHover: (_) { + setState(() { + _showControls = true; + }); + hideControls(); + }, + child: buildPlayer(context, state, dimens), + ); }, - child: buildPlayer(context, state, dimens), - ); - }, + ), + ), ), - ), - ), ); } Widget buildPlayer( - BuildContext context, PlaybackState state, BoxConstraints dimens) { + BuildContext context, + PlaybackState state, + BoxConstraints dimens, + ) { final bloc = BlocProvider.of(context); final current = state.songWithProgress; final song = current?.song; @@ -3673,26 +3634,25 @@ steps: fit: StackFit.expand, children: [ Positioned.fill( - child: current == null - ? const Center(child: Text('No song selected')) - : Container( - color: context.colors.shadow, - child: Opacity( - opacity: 0.3, - child: Image.asset( - song!.image.image, - fit: BoxFit.cover, + child: + current == null + ? const Center(child: Text('No song selected')) + : Container( + color: context.colors.shadow, + child: Opacity( + opacity: 0.3, + child: Image.asset(song!.image.image, fit: BoxFit.cover), ), ), - ), ), Positioned( top: 20, right: 20, child: IconButton( - color: song != null - ? context.colors.onSurface - : context.colors.onSurface, + color: + song != null + ? context.colors.onSurface + : context.colors.onSurface, icon: const Icon(Icons.fullscreen_exit), onPressed: widget.onClose, ), @@ -3723,8 +3683,9 @@ steps: Text( song.artist.name, style: context.labelSmall!.copyWith( - fontSize: 20, - color: context.colors.onSurface.withAlpha(204)), + fontSize: 20, + color: context.colors.onSurface.withAlpha(204), + ), overflow: TextOverflow.clip, ), ], @@ -3736,10 +3697,7 @@ steps: right: 20, left: 20, bottom: dimens.biggest.height * 0.2, - child: _ProgressBar( - progress: current?.progress, - song: song, - ), + child: _ProgressBar(progress: current?.progress, song: song), ), Positioned( right: 20, @@ -3752,8 +3710,8 @@ steps: scale: 1.5, child: _PlaybackControls( isPlaying: state.isPlaying, - togglePlayPause: () => - bloc.add(const PlaybackEvent.togglePlayPause()), + togglePlayPause: + () => bloc.add(const PlaybackEvent.togglePlayPause()), ), ), ), @@ -3765,9 +3723,7 @@ steps: } class _MobilePlayer extends StatelessWidget { - const _MobilePlayer({ - required this.onClose, - }); + const _MobilePlayer({required this.onClose}); final VoidCallback onClose; @@ -3776,46 +3732,52 @@ steps: final bloc = BlocProvider.of(context); return BlocBuilder( bloc: bloc, - builder: (context, state) => Theme( - data: ThemeProvider.of(context).dark(), - child: Scaffold( - body: LayoutBuilder( - builder: (context, dimens) { - return buildPlayer(context, state, dimens); - }, + builder: + (context, state) => Theme( + data: ThemeProvider.of(context).dark(), + child: Scaffold( + body: LayoutBuilder( + builder: (context, dimens) { + return buildPlayer(context, state, dimens); + }, + ), + ), ), - ), - ), ); } Widget buildPlayer( - BuildContext context, PlaybackState state, BoxConstraints dimens) { + BuildContext context, + PlaybackState state, + BoxConstraints dimens, + ) { final bloc = BlocProvider.of(context); final current = state.songWithProgress; return Stack( children: [ Positioned.fill( - child: current == null - ? const Center(child: Text('No song selected')) - : Container( - color: context.colors.shadow, - child: Opacity( - opacity: 0.3, - child: Image.asset( - current.song.image.image, - fit: BoxFit.cover, + child: + current == null + ? const Center(child: Text('No song selected')) + : Container( + color: context.colors.shadow, + child: Opacity( + opacity: 0.3, + child: Image.asset( + current.song.image.image, + fit: BoxFit.cover, + ), ), ), - ), ), Positioned( top: 20, left: 20, child: IconButton( - color: current?.song != null - ? context.colors.onSurface - : context.colors.onSurface, + color: + current?.song != null + ? context.colors.onSurface + : context.colors.onSurface, icon: const RotatedBox( quarterTurns: 1, child: Icon(Icons.chevron_right), @@ -3830,10 +3792,7 @@ steps: left: 0, right: 0, height: dimens.biggest.height * 0.5, - child: Image.asset( - current.song.image.image, - fit: BoxFit.contain, - ), + child: Image.asset(current.song.image.image, fit: BoxFit.contain), ), Positioned( left: 0, @@ -3859,8 +3818,9 @@ steps: Text( current.song.artist.name, style: context.labelSmall!.copyWith( - fontSize: 12, - color: context.colors.onSurface.withAlpha(204)), + fontSize: 12, + color: context.colors.onSurface.withAlpha(204), + ), overflow: TextOverflow.clip, ), ], @@ -3872,15 +3832,12 @@ steps: scale: 1.5, child: _PlaybackControls( isPlaying: state.isPlaying, - togglePlayPause: () => - bloc.add(const PlaybackEvent.togglePlayPause()), + togglePlayPause: + () => bloc.add(const PlaybackEvent.togglePlayPause()), ), ), ), - _ProgressBar( - progress: current.progress, - song: current.song, - ), + _ProgressBar(progress: current.progress, song: current.song), ], ), ), @@ -3895,11 +3852,11 @@ steps: // Copyright 2022 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. - + import 'package:flutter/material.dart'; - + import 'image_clipper.dart'; - + class AdaptiveImageCard extends StatelessWidget { const AdaptiveImageCard({ super.key, @@ -3908,12 +3865,12 @@ steps: required this.constraints, this.axis = Axis.horizontal, }); - + final String image; final Widget child; final BoxConstraints constraints; final Axis axis; - + @override Widget build(BuildContext context) { if (axis == Axis.vertical) { @@ -3930,20 +3887,13 @@ steps: ), ), Expanded( - child: Padding( - padding: const EdgeInsets.all(20), - child: child, - ), + child: Padding(padding: const EdgeInsets.all(20), child: child), ), ], ); } return Padding( - padding: const EdgeInsets.only( - left: 20, - bottom: 20, - top: 20, - ), + padding: const EdgeInsets.only(left: 20, bottom: 20, top: 20), child: Row( mainAxisAlignment: MainAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.end, @@ -3959,11 +3909,8 @@ steps: ), ), Expanded( - child: Padding( - padding: const EdgeInsets.all(20), - child: child, - ), - ) + child: Padding(padding: const EdgeInsets.all(20), child: child), + ), ], ), ); @@ -3975,9 +3922,9 @@ steps: // Copyright 2022 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. - + import 'package:flutter/material.dart'; - + class ClippedImage extends StatelessWidget { const ClippedImage( this.image, { @@ -3986,11 +3933,11 @@ steps: this.width, super.key, }); - + final String image; final BoxFit? fit; final double? width, height; - + @override Widget build(BuildContext context) { return ClipRRect( @@ -4010,9 +3957,9 @@ steps: // Copyright 2022 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. - + import 'package:flutter/material.dart'; - + class AdaptiveTable extends StatelessWidget { const AdaptiveTable({ super.key, @@ -4022,13 +3969,13 @@ steps: required this.columns, this.breakpoint = 600, }); - + final List items; final Widget Function(T item, int index) itemBuilder; final DataRow Function(T item, int index) rowBuilder; final List columns; final double breakpoint; - + @override Widget build(BuildContext context) { return LayoutBuilder( @@ -4059,28 +4006,17 @@ steps: // Copyright 2022 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. - + import 'package:flutter/material.dart'; - + class CenterRow extends StatelessWidget { - const CenterRow({ - super.key, - required this.child, - }); - + const CenterRow({super.key, required this.child}); + final Widget child; - + @override Widget build(BuildContext context) { - return Row( - children: [ - Expanded( - child: Center( - child: child, - ), - ), - ], - ); + return Row(children: [Expanded(child: Center(child: child))]); } } - name: Add lib/src/shared/views/clickable.dart @@ -4089,23 +4025,20 @@ steps: // Copyright 2022 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. - + import 'package:flutter/material.dart'; - + class Clickable extends StatelessWidget { const Clickable({required this.child, required this.onTap, super.key}); - + final Widget child; final VoidCallback onTap; - + @override Widget build(BuildContext context) { return MouseRegion( cursor: SystemMouseCursors.click, - child: GestureDetector( - onTap: onTap, - child: child, - ), + child: GestureDetector(onTap: onTap, child: child), ); } } @@ -4115,87 +4048,85 @@ steps: // Copyright 2022 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. - + import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:go_router/go_router.dart' as go; import 'package:universal_platform/universal_platform.dart'; - + import '../playback/bloc/bloc.dart'; import '../router.dart' as router; import 'adaptive_navigation.dart'; import 'views.dart'; - + class RootLayout extends StatelessWidget { const RootLayout({ super.key, required this.child, required this.currentIndex, }); - + final Widget child; final int currentIndex; static const _switcherKey = ValueKey('switcherKey'); static const _navigationRailKey = ValueKey('navigationRailKey'); - + @override Widget build(BuildContext context) { final bloc = BlocProvider.of(context); return BlocBuilder( bloc: bloc, - builder: (context, state) => LayoutBuilder(builder: (context, dimens) { - void onSelected(int index) { - final destination = router.destinations[index]; - go.GoRouter.of(context).go(destination.route); - } - - final current = state.songWithProgress; - return AdaptiveNavigation( - key: _navigationRailKey, - destinations: router.destinations - .map((e) => NavigationDestination( - icon: e.icon, - label: e.label, - )) - .toList(), - selectedIndex: currentIndex, - onDestinationSelected: onSelected, - child: Column( - children: [ - Expanded( - child: _Switcher( - key: _switcherKey, - child: child, + builder: + (context, state) => LayoutBuilder( + builder: (context, dimens) { + void onSelected(int index) { + final destination = router.destinations[index]; + go.GoRouter.of(context).go(destination.route); + } + + final current = state.songWithProgress; + return AdaptiveNavigation( + key: _navigationRailKey, + destinations: + router.destinations + .map( + (e) => NavigationDestination( + icon: e.icon, + label: e.label, + ), + ) + .toList(), + selectedIndex: currentIndex, + onDestinationSelected: onSelected, + child: Column( + children: [ + Expanded(child: _Switcher(key: _switcherKey, child: child)), + if (current != null) const BottomBar(), + ], ), - ), - if (current != null) const BottomBar(), - ], + ); + }, ), - ); - }), ); } } - + class _Switcher extends StatelessWidget { final Widget child; - - const _Switcher({ - required this.child, - super.key, - }); - + + const _Switcher({required this.child, super.key}); + @override Widget build(BuildContext context) { return UniversalPlatform.isDesktop ? child : AnimatedSwitcher( - key: key, - duration: const Duration(milliseconds: 200), - switchInCurve: Curves.easeInOut, - switchOutCurve: Curves.easeInOut, - child: child, - ); + key: key, + duration: const Duration(milliseconds: 200), + switchInCurve: Curves.easeInOut, + switchOutCurve: Curves.easeInOut, + child: child, + ); } } - name: Add lib/src/shared/views/views.dart @@ -4225,21 +4156,22 @@ steps: // Copyright 2022 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. - + import 'package:flutter/material.dart'; - + import '../providers/providers.dart'; - + class BrightnessToggle extends StatelessWidget { const BrightnessToggle({super.key}); - + @override Widget build(BuildContext context) { final isDark = Theme.of(context).brightness == Brightness.dark; return IconButton( - icon: Theme.of(context).brightness == Brightness.light - ? const Icon(Icons.brightness_3) - : const Icon(Icons.brightness_7), + icon: + Theme.of(context).brightness == Brightness.light + ? const Icon(Icons.brightness_3) + : const Icon(Icons.brightness_7), onPressed: () { final themeProvider = ThemeProvider.of(context); final settings = themeProvider.settings.value; @@ -4258,20 +4190,20 @@ steps: // Copyright 2022 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. - + import 'package:flutter/material.dart'; import 'package:url_launcher/url_launcher.dart'; - + import '../classes/classes.dart'; import '../providers/providers.dart'; import 'views.dart'; - + class Events extends StatelessWidget { const Events({super.key, required this.artist, required this.constraints}); - + final Artist artist; final BoxConstraints constraints; - + @override Widget build(BuildContext context) { final theme = ThemeProvider.of(context); @@ -4281,43 +4213,18 @@ steps: child: DataTable( horizontalMargin: 5.0, columns: const [ - DataColumn( - label: Text( - 'Date', - ), - numeric: true, - ), - DataColumn( - label: Text( - 'Event', - ), - ), - DataColumn( - label: Text( - 'Location', - ), - ), - DataColumn( - label: Text( - 'More info', - ), - ), + DataColumn(label: Text('Date'), numeric: true), + DataColumn(label: Text('Event')), + DataColumn(label: Text('Location')), + DataColumn(label: Text('More info')), ], rows: [ for (final event in artist.events) DataRow( cells: [ - DataCell( - Text(event.date), - ), - DataCell( - Row(children: [ - Expanded(child: Text(event.title)), - ]), - ), - DataCell( - Text(event.location), - ), + DataCell(Text(event.date)), + DataCell(Row(children: [Expanded(child: Text(event.title))])), + DataCell(Text(event.location)), DataCell( Clickable( child: Text( @@ -4327,8 +4234,9 @@ steps: decoration: TextDecoration.underline, ), ), - onTap: () => - launchUrl(Uri.parse('https://docs.flutter.dev')), + onTap: + () => + launchUrl(Uri.parse('https://docs.flutter.dev')), ), ), ], @@ -4342,7 +4250,7 @@ steps: children: artist.events.map((e) => buildTile(context, e)).toList(), ); } - + Widget buildTile(BuildContext context, Event event) { final dateParts = event.date.split('/'); final colors = Theme.of(context).colorScheme; @@ -4428,9 +4336,10 @@ steps: cursor: isHovered ? SystemMouseCursors.click : MouseCursor.defer, onEnter: (_) => setMaterialState(WidgetState.hovered, true), onExit: (_) => setMaterialState(WidgetState.hovered, false), - child: widget.mode == HoverMode.replace - ? _buildReplaceableChildren() - : _buildChildrenStack(), + child: + widget.mode == HoverMode.replace + ? _buildReplaceableChildren() + : _buildChildrenStack(), ), ); } @@ -4438,12 +4347,7 @@ steps: Widget _buildChildrenStack() { Widget child = isHovered ? Opacity(opacity: 0.2, child: widget.child) : widget.child; - return Stack( - children: [ - child, - if (isHovered) widget.hoverChild, - ], - ); + return Stack(children: [child, if (isHovered) widget.hoverChild]); } Widget _buildReplaceableChildren() => @@ -4457,20 +4361,20 @@ steps: // Copyright 2022 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. - + import 'package:flutter/material.dart'; import 'package:go_router/go_router.dart'; import '../classes/classes.dart'; import '../extensions.dart'; import '../providers/providers.dart'; import 'image_clipper.dart'; - + final playlistProvider = PlaylistsProvider(); final playlists = playlistProvider.playlists; - + class SideBar extends StatelessWidget { const SideBar({super.key}); - + @override Widget build(BuildContext context) { return SizedBox( @@ -4482,10 +4386,7 @@ steps: title: const Text('Home'), onTap: () => GoRouter.of(context).go('/'), ), - const ListTile( - leading: Icon(Icons.search), - title: Text('Search'), - ), + const ListTile(leading: Icon(Icons.search), title: Text('Search')), ListTile( leading: const Icon(Icons.person), title: const Text('Artists'), @@ -4506,10 +4407,10 @@ steps: ); } } - + class PlaylistNav extends StatelessWidget { const PlaylistNav({super.key}); - + @override Widget build(BuildContext context) { final colors = context.theme.colorScheme; @@ -4520,10 +4421,7 @@ steps: children: [ Padding( padding: const EdgeInsets.only(left: 16, top: 16), - child: Text( - 'Playlists', - style: context.titleMedium, - ), + child: Text('Playlists', style: context.titleMedium), ), Expanded( child: ListView( @@ -4547,35 +4445,34 @@ steps: ); } } - + class _PlaylistNavItem extends StatefulWidget { const _PlaylistNavItem({ required this.image, required this.playlistId, required this.title, }); - + final String image; final String playlistId; final String title; - + @override State<_PlaylistNavItem> createState() => _PlaylistNavItemState(); } - + class _PlaylistNavItemState extends State<_PlaylistNavItem> { bool _isSelected = false; late final FocusNode _focusNode; - + @override void initState() { super.initState(); - _focusNode = FocusNode(debugLabel: widget.title) - ..addListener(() { - setState(() => _isSelected = _focusNode.hasPrimaryFocus); - }); + _focusNode = FocusNode(debugLabel: widget.title)..addListener(() { + setState(() => _isSelected = _focusNode.hasPrimaryFocus); + }); } - + @override Widget build(BuildContext context) { return ListTile( @@ -4602,63 +4499,67 @@ steps: // Copyright 2022 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. - + import 'package:dynamic_color/dynamic_color.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; - + import 'playback/bloc/bloc.dart'; import 'providers/theme.dart'; import 'router.dart'; import 'views/views.dart'; - + class MyApp extends StatefulWidget { const MyApp({super.key}); - + @override State createState() => _MyAppState(); } - + class _MyAppState extends State { - final settings = ValueNotifier(ThemeSettings( - sourceColor: Colors.pink, // Replace this color - themeMode: ThemeMode.system, - )); + final settings = ValueNotifier( + ThemeSettings( + sourceColor: Colors.pink, // Replace this color + themeMode: ThemeMode.system, + ), + ); @override Widget build(BuildContext context) { return BlocProvider( create: (context) => PlaybackBloc(), child: DynamicColorBuilder( - builder: (lightDynamic, darkDynamic) => ThemeProvider( - lightDynamic: lightDynamic, - darkDynamic: darkDynamic, - settings: settings, - child: NotificationListener( - onNotification: (notification) { - settings.value = notification.settings; - return true; - }, - child: ValueListenableBuilder( - valueListenable: settings, - builder: (context, value, _) { - // Create theme instance - return MaterialApp.router( - debugShowCheckedModeBanner: false, - title: 'Flutter Demo', - // Add theme - // Add dark theme - // Add theme mode - routeInformationParser: appRouter.routeInformationParser, - routeInformationProvider: - appRouter.routeInformationProvider, - routerDelegate: appRouter.routerDelegate, - builder: (context, child) { - return PlayPauseListener(child: child!); - }, - ); + builder: + (lightDynamic, darkDynamic) => ThemeProvider( + lightDynamic: lightDynamic, + darkDynamic: darkDynamic, + settings: settings, + child: NotificationListener( + onNotification: (notification) { + settings.value = notification.settings; + return true; }, + child: ValueListenableBuilder( + valueListenable: settings, + builder: (context, value, _) { + // Create theme instance + return MaterialApp.router( + debugShowCheckedModeBanner: false, + title: 'Flutter Demo', + // Add theme + // Add dark theme + // Add theme mode + routeInformationParser: appRouter.routeInformationParser, + routeInformationProvider: + appRouter.routeInformationProvider, + routerDelegate: appRouter.routerDelegate, + builder: (context, child) { + return PlayPauseListener(child: child!); + }, + ); + }, + ), ), - )), + ), ), ); } @@ -73289,6 +73190,9 @@ steps: - name: flutter pub run build_runner path: myartist flutter: pub run build_runner build + - name: Format generated file + path: myartist + dart: format ./lib/src/shared/playback/bloc/playback_bloc.freezed.dart - name: Build iOS simulator bundle platforms: [ macos ] path: myartist @@ -73327,14 +73231,16 @@ steps: patch-u: | --- b/boring_to_beautiful/step_02/lib/src/shared/router.dart +++ a/boring_to_beautiful/step_02/lib/src/shared/router.dart - @@ -22,17 +22,17 @@ final playlistsProvider = PlaylistsProvider(); + @@ -20,19 +20,15 @@ final artistsProvider = ArtistsProvider(); + final playlistsProvider = PlaylistsProvider(); + const List destinations = [ - NavigationDestination( - label: 'Home', + - NavigationDestination( + - label: 'Home', - icon: Icon(Icons.arrow_right_rounded), // Modify this line - + icon: Icon(Icons.home), - route: '/', - ), + - route: '/', + - ), + + NavigationDestination(label: 'Home', icon: Icon(Icons.home), route: '/'), NavigationDestination( label: 'Playlists', - icon: Icon(Icons.arrow_right_rounded), // Modify this line @@ -73367,7 +73273,9 @@ steps: patch-u: | --- b/boring_to_beautiful/step_03/lib/src/shared/extensions.dart +++ a/boring_to_beautiful/step_03/lib/src/shared/extensions.dart - @@ -5,9 +5,9 @@ + @@ -3,11 +3,11 @@ + // found in the LICENSE file. + import 'package:flutter/material.dart'; -// Add Google Fonts Package import +import 'package:google_fonts/google_fonts.dart'; @@ -73377,8 +73285,8 @@ steps: - TextTheme get textTheme => theme.textTheme; // Modify this line + TextTheme get textTheme => GoogleFonts.montserratTextTheme(theme.textTheme); ColorScheme get colors => theme.colorScheme; - TextStyle? get displayLarge => textTheme.displayLarge?.copyWith( - color: colors.onSurface, + TextStyle? get displayLarge => + textTheme.displayLarge?.copyWith(color: colors.onSurface); - name: dart analyze path: myartist dart: analyze --fatal-infos @@ -73395,41 +73303,44 @@ steps: patch-u: | --- b/boring_to_beautiful/step_04/lib/src/shared/app.dart +++ a/boring_to_beautiful/step_04/lib/src/shared/app.dart - @@ -20,7 +20,7 @@ class MyApp extends StatefulWidget { + @@ -20,10 +20,7 @@ class MyApp extends StatefulWidget { class _MyAppState extends State { - final settings = ValueNotifier(ThemeSettings( - - sourceColor: Colors.pink, // Replace this color - + sourceColor: Colors.pink, - themeMode: ThemeMode.system, - )); + final settings = ValueNotifier( + - ThemeSettings( + - sourceColor: Colors.pink, // Replace this color + - themeMode: ThemeMode.system, + - ), + + ThemeSettings(sourceColor: Colors.pink, themeMode: ThemeMode.system), + ); @override - @@ -40,13 +40,13 @@ class _MyAppState extends State { - child: ValueListenableBuilder( - valueListenable: settings, - builder: (context, value, _) { - - // Create theme instance - + final theme = ThemeProvider.of(context); - return MaterialApp.router( - debugShowCheckedModeBanner: false, - title: 'Flutter Demo', - - // Add theme - - // Add dark theme - - // Add theme mode - + theme: theme.light(settings.value.sourceColor), - + darkTheme: theme.dark(settings.value.sourceColor), - + themeMode: theme.themeMode(), - routeInformationParser: appRouter.routeInformationParser, - routeInformationProvider: - appRouter.routeInformationProvider, + Widget build(BuildContext context) { + @@ -43,13 +40,13 @@ class _MyAppState extends State { + child: ValueListenableBuilder( + valueListenable: settings, + builder: (context, value, _) { + - // Create theme instance + + final theme = ThemeProvider.of(context); + return MaterialApp.router( + debugShowCheckedModeBanner: false, + title: 'Flutter Demo', + - // Add theme + - // Add dark theme + - // Add theme mode + + theme: theme.light(settings.value.sourceColor), + + darkTheme: theme.dark(settings.value.sourceColor), + + themeMode: theme.themeMode(), + routeInformationParser: appRouter.routeInformationParser, + routeInformationProvider: + appRouter.routeInformationProvider, - name: Patch lib/src/shared/views/outlined_card.dart path: myartist/lib/src/shared/views/outlined_card.dart patch-u: | --- b/boring_to_beautiful/step_04/lib/src/shared/views/outlined_card.dart +++ a/boring_to_beautiful/step_04/lib/src/shared/views/outlined_card.dart - @@ -26,7 +26,12 @@ class _OutlinedCardState extends State { - ? SystemMouseCursors.click - : SystemMouseCursors.basic, + @@ -23,7 +23,12 @@ class _OutlinedCardState extends State { + ? SystemMouseCursors.click + : SystemMouseCursors.basic, child: Container( - // Add box decoration here + decoration: BoxDecoration( @@ -73457,7 +73368,7 @@ steps: patch-u: | --- b/boring_to_beautiful/step_05/lib/src/features/home/view/home_screen.dart +++ a/boring_to_beautiful/step_05/lib/src/features/home/view/home_screen.dart - @@ -30,8 +30,56 @@ class _HomeScreenState extends State { + @@ -30,8 +30,54 @@ class _HomeScreenState extends State { final List artists = artistsProvider.artists; return LayoutBuilder( builder: (context, constraints) { @@ -73482,33 +73393,31 @@ steps: + ), + ), + body: LayoutBuilder( - + builder: (context, constraints) => TabBarView( - + children: [ - + SingleChildScrollView( - + child: Column( - + children: [ - + const HomeHighlight(), - + HomeArtists( - + artists: artists, - + constraints: constraints, + + builder: + + (context, constraints) => TabBarView( + + children: [ + + SingleChildScrollView( + + child: Column( + + children: [ + + const HomeHighlight(), + + HomeArtists( + + artists: artists, + + constraints: constraints, + + ), + + ], + ), - + ], - + ), - + ), - + HomeRecent( - + playlists: playlists, - + axis: Axis.vertical, - + ), - + PlaylistSongs( - + playlist: topSongs, - + constraints: constraints, - + ), - + PlaylistSongs( - + playlist: newReleases, - + constraints: constraints, + + ), + + HomeRecent(playlists: playlists, axis: Axis.vertical), + + PlaylistSongs( + + playlist: topSongs, + + constraints: constraints, + + ), + + PlaylistSongs( + + playlist: newReleases, + + constraints: constraints, + + ), + + ], + ), - + ], - + ), + ), + ), + ); @@ -73521,7 +73430,7 @@ steps: patch-u: | --- b/boring_to_beautiful/step_05/lib/src/shared/views/adaptive_navigation.dart +++ a/boring_to_beautiful/step_05/lib/src/shared/views/adaptive_navigation.dart - @@ -23,29 +23,36 @@ class AdaptiveNavigation extends StatelessWidget { + @@ -23,32 +23,39 @@ class AdaptiveNavigation extends StatelessWidget { return LayoutBuilder( builder: (context, dimens) { // Tablet Layout @@ -73533,12 +73442,15 @@ steps: + NavigationRail( + extended: dimens.maxWidth >= 800, + minExtendedWidth: 180, - + destinations: destinations - + .map((e) => NavigationRailDestination( - + icon: e.icon, - + label: Text(e.label), - + )) - + .toList(), + + destinations: + + destinations + + .map( + + (e) => NavigationRailDestination( + + icon: e.icon, + + label: Text(e.label), + + ), + + ) + + .toList(), + selectedIndex: selectedIndex, + onDestinationSelected: onDestinationSelected, + ), @@ -73554,12 +73466,15 @@ steps: - NavigationRail( - extended: dimens.maxWidth >= 800, - minExtendedWidth: 180, - - destinations: destinations - - .map((e) => NavigationRailDestination( - - icon: e.icon, - - label: Text(e.label), - - )) - - .toList(), + - destinations: + - destinations + - .map( + - (e) => NavigationRailDestination( + - icon: e.icon, + - label: Text(e.label), + - ), + - ) + - .toList(), - selectedIndex: selectedIndex, - onDestinationSelected: onDestinationSelected, - ), @@ -73608,7 +73523,7 @@ steps: patch-u: | --- b/boring_to_beautiful/step_06/lib/src/features/home/view/home_screen.dart +++ a/boring_to_beautiful/step_06/lib/src/features/home/view/home_screen.dart - @@ -87,7 +87,7 @@ class _HomeScreenState extends State { + @@ -85,7 +85,7 @@ class _HomeScreenState extends State { AdaptiveContainer( columnSpan: 12, child: Padding( @@ -73617,7 +73532,7 @@ steps: child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ - @@ -123,7 +123,10 @@ class _HomeScreenState extends State { + @@ -122,7 +122,10 @@ class _HomeScreenState extends State { crossAxisAlignment: CrossAxisAlignment.start, children: [ Padding( @@ -73629,7 +73544,7 @@ steps: child: Text( 'Recently played', style: context.headlineSmall, - @@ -138,7 +141,7 @@ class _HomeScreenState extends State { + @@ -135,7 +138,7 @@ class _HomeScreenState extends State { AdaptiveContainer( columnSpan: 12, child: Padding( @@ -73638,16 +73553,21 @@ steps: child: Row( crossAxisAlignment: CrossAxisAlignment.start, children: [ - @@ -150,7 +153,7 @@ class _HomeScreenState extends State { + @@ -146,9 +149,10 @@ class _HomeScreenState extends State { + crossAxisAlignment: CrossAxisAlignment.start, children: [ Padding( - padding: - - const EdgeInsets.all(2), // Modify this line - + const EdgeInsets.only(left: 8, bottom: 8), + - padding: const EdgeInsets.all( + - 2, + - ), // Modify this line + + padding: const EdgeInsets.only( + + left: 8, + + bottom: 8, + + ), child: Text( 'Top Songs Today', style: context.titleLarge, - @@ -166,7 +169,7 @@ class _HomeScreenState extends State { + @@ -164,7 +168,7 @@ class _HomeScreenState extends State { ], ), ), @@ -73656,12 +73576,17 @@ steps: Flexible( flex: 10, child: Column( - @@ -175,7 +178,7 @@ class _HomeScreenState extends State { + @@ -172,9 +176,10 @@ class _HomeScreenState extends State { + crossAxisAlignment: CrossAxisAlignment.start, children: [ Padding( - padding: - - const EdgeInsets.all(2), // Modify this line - + const EdgeInsets.only(left: 8, bottom: 8), + - padding: const EdgeInsets.all( + - 2, + - ), // Modify this line + + padding: const EdgeInsets.only( + + left: 8, + + bottom: 8, + + ), child: Text( 'New Releases', style: context.titleLarge, @@ -73681,7 +73606,7 @@ steps: patch-u: | --- b/boring_to_beautiful/step_07/lib/src/shared/providers/theme.dart +++ a/boring_to_beautiful/step_07/lib/src/shared/providers/theme.dart - @@ -154,7 +154,7 @@ class ThemeProvider extends InheritedWidget { + @@ -146,7 +146,7 @@ class ThemeProvider extends InheritedWidget { ThemeData light([Color? targetColor]) { final colorScheme = colors(Brightness.light, targetColor); return ThemeData.light(useMaterial3: true).copyWith( @@ -73690,7 +73615,7 @@ steps: colorScheme: colorScheme, appBarTheme: appBarTheme(colorScheme), cardTheme: cardTheme(), - @@ -171,7 +171,7 @@ class ThemeProvider extends InheritedWidget { + @@ -163,7 +163,7 @@ class ThemeProvider extends InheritedWidget { ThemeData dark([Color? targetColor]) { final colorScheme = colors(Brightness.dark, targetColor); return ThemeData.dark(useMaterial3: true).copyWith( @@ -73715,32 +73640,32 @@ steps: patch-u: | --- b/boring_to_beautiful/final/lib/src/features/playlists/view/playlist_songs.dart +++ a/boring_to_beautiful/final/lib/src/features/playlists/view/playlist_songs.dart - @@ -44,11 +44,14 @@ class PlaylistSongs extends StatelessWidget { - index: index, - cells: [ - DataCell( - - // Add HoverableSongPlayButton - - Center( - - child: Text( - - (index + 1).toString(), - - textAlign: TextAlign.center, - + HoverableSongPlayButton( - + hoverMode: HoverMode.overlay, - + song: playlist.songs[index], - + child: Center( - + child: Text( - + (index + 1).toString(), - + textAlign: TextAlign.center, - + ), + @@ -43,11 +43,14 @@ class PlaylistSongs extends StatelessWidget { + index: index, + cells: [ + DataCell( + - // Add HoverableSongPlayButton + - Center( + - child: Text( + - (index + 1).toString(), + - textAlign: TextAlign.center, + + HoverableSongPlayButton( + + hoverMode: HoverMode.overlay, + + song: playlist.songs[index], + + child: Center( + + child: Text( + + (index + 1).toString(), + + textAlign: TextAlign.center, + + ), + ), + ), ), - ), - ), - name: Patch lib/src/shared/views/outlined_card.dart path: myartist/lib/src/shared/views/outlined_card.dart patch-u: | --- b/boring_to_beautiful/final/lib/src/shared/views/outlined_card.dart +++ a/boring_to_beautiful/final/lib/src/shared/views/outlined_card.dart - @@ -19,20 +19,55 @@ class OutlinedCard extends StatefulWidget { + @@ -15,21 +15,57 @@ class OutlinedCard extends StatefulWidget { } class _OutlinedCardState extends State { @@ -73763,9 +73688,10 @@ steps: + _hovered = false; + }); + }, - cursor: widget.clickable - ? SystemMouseCursors.click - : SystemMouseCursors.basic, + cursor: + widget.clickable + ? SystemMouseCursors.click + : SystemMouseCursors.basic, - child: Container( + child: AnimatedContainer( + duration: kThemeAnimationDuration, @@ -73778,20 +73704,21 @@ steps: + borderRadius: borderRadius, + ), + foregroundDecoration: BoxDecoration( - + color: Theme.of(context).colorScheme.onSurface.withAlpha( - + _hovered ? 30 : 0, - + ), + + color: Theme.of( + + context, + + ).colorScheme.onSurface.withAlpha(_hovered ? 30 : 0), + borderRadius: borderRadius, + ), + child: TweenAnimationBuilder( + duration: kThemeAnimationDuration, + curve: animationCurve, + tween: Tween(begin: BorderRadius.zero, end: borderRadius), - + builder: (context, borderRadius, child) => ClipRRect( - + clipBehavior: Clip.antiAlias, - + borderRadius: borderRadius, - + child: child, - + ), + + builder: + + (context, borderRadius, child) => ClipRRect( + + clipBehavior: Clip.antiAlias, + + borderRadius: borderRadius, + + child: child, + + ), + child: widget.child, ), - child: widget.child, From 40262053178b872bcd412d2005259ee9ab04f3e0 Mon Sep 17 00:00:00 2001 From: Brett Morgan Date: Fri, 15 Nov 2024 11:33:04 +1100 Subject: [PATCH 068/108] Update `brick_breaker` part 1 --- .../app/{build.gradle => build.gradle.kts} | 10 +- brick_breaker/step_03/android/build.gradle | 18 --- .../step_03/android/build.gradle.kts | 21 ++++ .../step_03/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- brick_breaker/step_03/android/settings.gradle | 25 ---- .../step_03/android/settings.gradle.kts | 25 ++++ brick_breaker/step_03/ios/Podfile | 1 - .../ios/Runner.xcodeproj/project.pbxproj | 112 +++++++++--------- brick_breaker/step_03/macos/Podfile | 1 - .../macos/Runner.xcodeproj/project.pbxproj | 98 +++++++-------- .../android/app/build.gradle.kts} | 10 +- brick_breaker/step_04/android/build.gradle | 18 --- .../step_04/android/build.gradle.kts | 21 ++++ .../step_04/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- brick_breaker/step_04/android/settings.gradle | 25 ---- .../step_04/android/settings.gradle.kts | 25 ++++ brick_breaker/step_04/ios/Podfile | 1 - .../ios/Runner.xcodeproj/project.pbxproj | 112 +++++++++--------- brick_breaker/step_04/macos/Podfile | 1 - .../macos/Runner.xcodeproj/project.pbxproj | 98 +++++++-------- .../android/app/build.gradle.kts} | 10 +- brick_breaker/step_05/android/build.gradle | 18 --- .../step_05/android/build.gradle.kts | 21 ++++ .../step_05/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- brick_breaker/step_05/android/settings.gradle | 25 ---- .../step_05/android/settings.gradle.kts | 25 ++++ brick_breaker/step_05/ios/Podfile | 1 - .../ios/Runner.xcodeproj/project.pbxproj | 112 +++++++++--------- brick_breaker/step_05/macos/Podfile | 1 - .../macos/Runner.xcodeproj/project.pbxproj | 98 +++++++-------- .../android/app/build.gradle.kts} | 10 +- brick_breaker/step_06/android/build.gradle | 18 --- .../step_06/android/build.gradle.kts | 21 ++++ .../step_06/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- brick_breaker/step_06/android/settings.gradle | 25 ---- .../step_06/android/settings.gradle.kts | 25 ++++ brick_breaker/step_06/ios/Podfile | 1 - .../ios/Runner.xcodeproj/project.pbxproj | 112 +++++++++--------- brick_breaker/step_06/macos/Podfile | 1 - .../macos/Runner.xcodeproj/project.pbxproj | 98 +++++++-------- .../step_07/android/app/build.gradle | 44 ------- .../step_07/android/app/build.gradle.kts | 44 +++++++ brick_breaker/step_07/android/build.gradle | 18 --- .../step_07/android/build.gradle.kts | 21 ++++ .../step_07/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- brick_breaker/step_07/android/settings.gradle | 25 ---- .../step_07/android/settings.gradle.kts | 25 ++++ brick_breaker/step_07/ios/Podfile | 1 - .../ios/Runner.xcodeproj/project.pbxproj | 112 +++++++++--------- brick_breaker/step_07/macos/Podfile | 1 - .../macos/Runner.xcodeproj/project.pbxproj | 98 +++++++-------- .../step_08/android/app/build.gradle | 44 ------- .../step_08/android/app/build.gradle.kts | 44 +++++++ brick_breaker/step_08/android/build.gradle | 18 --- .../step_08/android/build.gradle.kts | 21 ++++ .../step_08/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- brick_breaker/step_08/android/settings.gradle | 25 ---- .../step_08/android/settings.gradle.kts | 25 ++++ brick_breaker/step_08/ios/Podfile | 1 - .../ios/Runner.xcodeproj/project.pbxproj | 112 +++++++++--------- brick_breaker/step_08/macos/Podfile | 1 - .../macos/Runner.xcodeproj/project.pbxproj | 98 +++++++-------- .../step_09/android/app/build.gradle | 44 ------- .../step_09/android/app/build.gradle.kts | 44 +++++++ brick_breaker/step_09/android/build.gradle | 18 --- .../step_09/android/build.gradle.kts | 21 ++++ .../step_09/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- brick_breaker/step_09/android/settings.gradle | 25 ---- .../step_09/android/settings.gradle.kts | 25 ++++ brick_breaker/step_09/ios/Podfile | 1 - .../ios/Runner.xcodeproj/project.pbxproj | 112 +++++++++--------- brick_breaker/step_09/macos/Podfile | 1 - .../macos/Runner.xcodeproj/project.pbxproj | 98 +++++++-------- .../step_10/android/app/build.gradle | 44 ------- .../step_10/android/app/build.gradle.kts | 44 +++++++ brick_breaker/step_10/android/build.gradle | 18 --- .../step_10/android/build.gradle.kts | 21 ++++ .../step_10/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- brick_breaker/step_10/android/settings.gradle | 25 ---- .../step_10/android/settings.gradle.kts | 25 ++++ brick_breaker/step_10/ios/Podfile | 1 - .../ios/Runner.xcodeproj/project.pbxproj | 112 +++++++++--------- brick_breaker/step_10/macos/Podfile | 1 - .../macos/Runner.xcodeproj/project.pbxproj | 98 +++++++-------- 92 files changed, 1420 insertions(+), 1412 deletions(-) rename brick_breaker/step_03/android/app/{build.gradle => build.gradle.kts} (84%) delete mode 100644 brick_breaker/step_03/android/build.gradle create mode 100644 brick_breaker/step_03/android/build.gradle.kts delete mode 100644 brick_breaker/step_03/android/settings.gradle create mode 100644 brick_breaker/step_03/android/settings.gradle.kts rename brick_breaker/{step_05/android/app/build.gradle => step_04/android/app/build.gradle.kts} (84%) delete mode 100644 brick_breaker/step_04/android/build.gradle create mode 100644 brick_breaker/step_04/android/build.gradle.kts delete mode 100644 brick_breaker/step_04/android/settings.gradle create mode 100644 brick_breaker/step_04/android/settings.gradle.kts rename brick_breaker/{step_06/android/app/build.gradle => step_05/android/app/build.gradle.kts} (84%) delete mode 100644 brick_breaker/step_05/android/build.gradle create mode 100644 brick_breaker/step_05/android/build.gradle.kts delete mode 100644 brick_breaker/step_05/android/settings.gradle create mode 100644 brick_breaker/step_05/android/settings.gradle.kts rename brick_breaker/{step_04/android/app/build.gradle => step_06/android/app/build.gradle.kts} (84%) delete mode 100644 brick_breaker/step_06/android/build.gradle create mode 100644 brick_breaker/step_06/android/build.gradle.kts delete mode 100644 brick_breaker/step_06/android/settings.gradle create mode 100644 brick_breaker/step_06/android/settings.gradle.kts delete mode 100644 brick_breaker/step_07/android/app/build.gradle create mode 100644 brick_breaker/step_07/android/app/build.gradle.kts delete mode 100644 brick_breaker/step_07/android/build.gradle create mode 100644 brick_breaker/step_07/android/build.gradle.kts delete mode 100644 brick_breaker/step_07/android/settings.gradle create mode 100644 brick_breaker/step_07/android/settings.gradle.kts delete mode 100644 brick_breaker/step_08/android/app/build.gradle create mode 100644 brick_breaker/step_08/android/app/build.gradle.kts delete mode 100644 brick_breaker/step_08/android/build.gradle create mode 100644 brick_breaker/step_08/android/build.gradle.kts delete mode 100644 brick_breaker/step_08/android/settings.gradle create mode 100644 brick_breaker/step_08/android/settings.gradle.kts delete mode 100644 brick_breaker/step_09/android/app/build.gradle create mode 100644 brick_breaker/step_09/android/app/build.gradle.kts delete mode 100644 brick_breaker/step_09/android/build.gradle create mode 100644 brick_breaker/step_09/android/build.gradle.kts delete mode 100644 brick_breaker/step_09/android/settings.gradle create mode 100644 brick_breaker/step_09/android/settings.gradle.kts delete mode 100644 brick_breaker/step_10/android/app/build.gradle create mode 100644 brick_breaker/step_10/android/app/build.gradle.kts delete mode 100644 brick_breaker/step_10/android/build.gradle create mode 100644 brick_breaker/step_10/android/build.gradle.kts delete mode 100644 brick_breaker/step_10/android/settings.gradle create mode 100644 brick_breaker/step_10/android/settings.gradle.kts diff --git a/brick_breaker/step_03/android/app/build.gradle b/brick_breaker/step_03/android/app/build.gradle.kts similarity index 84% rename from brick_breaker/step_03/android/app/build.gradle rename to brick_breaker/step_03/android/app/build.gradle.kts index e40a92adc6..e4258bcf72 100644 --- a/brick_breaker/step_03/android/app/build.gradle +++ b/brick_breaker/step_03/android/app/build.gradle.kts @@ -1,8 +1,8 @@ plugins { - id "com.android.application" - id "kotlin-android" + id("com.android.application") + id("kotlin-android") // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. - id "dev.flutter.flutter-gradle-plugin" + id("dev.flutter.flutter-gradle-plugin") } android { @@ -16,7 +16,7 @@ android { } kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8 + jvmTarget = JavaVersion.VERSION_1_8.toString() } defaultConfig { @@ -34,7 +34,7 @@ android { release { // TODO: Add your own signing config for the release build. // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig = signingConfigs.debug + signingConfig = signingConfigs.getByName("debug") } } } diff --git a/brick_breaker/step_03/android/build.gradle b/brick_breaker/step_03/android/build.gradle deleted file mode 100644 index d2ffbffa4c..0000000000 --- a/brick_breaker/step_03/android/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = "../build" -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(":app") -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/brick_breaker/step_03/android/build.gradle.kts b/brick_breaker/step_03/android/build.gradle.kts new file mode 100644 index 0000000000..89176ef44e --- /dev/null +++ b/brick_breaker/step_03/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/brick_breaker/step_03/android/gradle.properties b/brick_breaker/step_03/android/gradle.properties index 2597170821..f018a61817 100644 --- a/brick_breaker/step_03/android/gradle.properties +++ b/brick_breaker/step_03/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/brick_breaker/step_03/android/gradle/wrapper/gradle-wrapper.properties b/brick_breaker/step_03/android/gradle/wrapper/gradle-wrapper.properties index 7bb2df6ba6..afa1e8eb0a 100644 --- a/brick_breaker/step_03/android/gradle/wrapper/gradle-wrapper.properties +++ b/brick_breaker/step_03/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip diff --git a/brick_breaker/step_03/android/settings.gradle b/brick_breaker/step_03/android/settings.gradle deleted file mode 100644 index b9e43bd376..0000000000 --- a/brick_breaker/step_03/android/settings.gradle +++ /dev/null @@ -1,25 +0,0 @@ -pluginManagement { - def flutterSdkPath = { - def properties = new Properties() - file("local.properties").withInputStream { properties.load(it) } - def flutterSdkPath = properties.getProperty("flutter.sdk") - assert flutterSdkPath != null, "flutter.sdk not set in local.properties" - return flutterSdkPath - }() - - includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") - - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} - -plugins { - id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.1.0" apply false - id "org.jetbrains.kotlin.android" version "1.8.22" apply false -} - -include ":app" diff --git a/brick_breaker/step_03/android/settings.gradle.kts b/brick_breaker/step_03/android/settings.gradle.kts new file mode 100644 index 0000000000..a439442c20 --- /dev/null +++ b/brick_breaker/step_03/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.0" apply false + id("org.jetbrains.kotlin.android") version "1.8.22" apply false +} + +include(":app") diff --git a/brick_breaker/step_03/ios/Podfile b/brick_breaker/step_03/ios/Podfile index d97f17e223..e549ee22f3 100644 --- a/brick_breaker/step_03/ios/Podfile +++ b/brick_breaker/step_03/ios/Podfile @@ -29,7 +29,6 @@ flutter_ios_podfile_setup target 'Runner' do use_frameworks! - use_modular_headers! flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) target 'RunnerTests' do diff --git a/brick_breaker/step_03/ios/Runner.xcodeproj/project.pbxproj b/brick_breaker/step_03/ios/Runner.xcodeproj/project.pbxproj index add9e55410..a1543efc86 100644 --- a/brick_breaker/step_03/ios/Runner.xcodeproj/project.pbxproj +++ b/brick_breaker/step_03/ios/Runner.xcodeproj/project.pbxproj @@ -8,14 +8,14 @@ /* Begin PBXBuildFile section */ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; - 29AD4F65B90DCD21875C2A4C /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C931705C418493DC02E52C6A /* Pods_Runner.framework */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; + 731668CE0733C8A6D3030D66 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D53959E4A5C0448BA84E4476 /* Pods_Runner.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - BB5BED3E580B45F0CD80E554 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B5F63ADA01AF049FFFC5CB39 /* Pods_RunnerTests.framework */; }; + C2A8C02781BE528B5B759C49 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A6B8CF3595E8A39D19DF86BD /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,18 +42,19 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 1109D92F379AA7567325FD73 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; + 2A1A7CE56A03FD7DE84BF271 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 58E4120D718D183216E2F816 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - 71F43AEF029360DE99B40B6F /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 45B06D23A2EFC8599A32C572 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 4CC2809B9EB434B78907439E /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 6E4CD9BBF138CD00B1395359 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 7D4452472D5AF425A635039C /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 87D6F4AFB2A01D1CBC283DBE /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -61,41 +62,31 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - B5F63ADA01AF049FFFC5CB39 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - C931705C418493DC02E52C6A /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - D510FFBF1E5D8C842D1A1042 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - D5D7E82A3FEE48552A1B1A9A /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + A6B8CF3595E8A39D19DF86BD /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + CD683244A747851B5E3BDE9D /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + D53959E4A5C0448BA84E4476 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 97C146EB1CF9000F007C117D /* Frameworks */ = { + 76F635906FE0A22BBD65F778 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 29AD4F65B90DCD21875C2A4C /* Pods_Runner.framework in Frameworks */, + C2A8C02781BE528B5B759C49 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - CF0381FD905E27D8E4FA4E94 /* Frameworks */ = { + 97C146EB1CF9000F007C117D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - BB5BED3E580B45F0CD80E554 /* Pods_RunnerTests.framework in Frameworks */, + 731668CE0733C8A6D3030D66 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 2078C8554440C2F9205D6B5A /* Frameworks */ = { - isa = PBXGroup; - children = ( - C931705C418493DC02E52C6A /* Pods_Runner.framework */, - B5F63ADA01AF049FFFC5CB39 /* Pods_RunnerTests.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; 331C8082294A63A400263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -104,15 +95,15 @@ path = RunnerTests; sourceTree = ""; }; - 56387D4532B1071467568739 /* Pods */ = { + 50A5776E1A511FE3A4E570DF /* Pods */ = { isa = PBXGroup; children = ( - 87D6F4AFB2A01D1CBC283DBE /* Pods-Runner.debug.xcconfig */, - 71F43AEF029360DE99B40B6F /* Pods-Runner.release.xcconfig */, - D510FFBF1E5D8C842D1A1042 /* Pods-Runner.profile.xcconfig */, - 7D4452472D5AF425A635039C /* Pods-RunnerTests.debug.xcconfig */, - 58E4120D718D183216E2F816 /* Pods-RunnerTests.release.xcconfig */, - D5D7E82A3FEE48552A1B1A9A /* Pods-RunnerTests.profile.xcconfig */, + 1109D92F379AA7567325FD73 /* Pods-Runner.debug.xcconfig */, + 2A1A7CE56A03FD7DE84BF271 /* Pods-Runner.release.xcconfig */, + CD683244A747851B5E3BDE9D /* Pods-Runner.profile.xcconfig */, + 4CC2809B9EB434B78907439E /* Pods-RunnerTests.debug.xcconfig */, + 6E4CD9BBF138CD00B1395359 /* Pods-RunnerTests.release.xcconfig */, + 45B06D23A2EFC8599A32C572 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -136,8 +127,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - 56387D4532B1071467568739 /* Pods */, - 2078C8554440C2F9205D6B5A /* Frameworks */, + 50A5776E1A511FE3A4E570DF /* Pods */, + DB8CE5BFDF3881F32F94FB43 /* Frameworks */, ); sourceTree = ""; }; @@ -165,6 +156,15 @@ path = Runner; sourceTree = ""; }; + DB8CE5BFDF3881F32F94FB43 /* Frameworks */ = { + isa = PBXGroup; + children = ( + D53959E4A5C0448BA84E4476 /* Pods_Runner.framework */, + A6B8CF3595E8A39D19DF86BD /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 6B43BA0ED7A59E5F9E7824A9 /* [CP] Check Pods Manifest.lock */, + B3B6826C80ECFD9CE5768CA8 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - CF0381FD905E27D8E4FA4E94 /* Frameworks */, + 76F635906FE0A22BBD65F778 /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - AD7073F8B2A8B9D7C73C1E2B /* [CP] Check Pods Manifest.lock */, + 3303C36477CF41E7A6E7C820 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 16BE037FF21DCFBC30C993A0 /* [CP] Embed Pods Frameworks */, + 3EF9D3E10CA143399518195C /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -270,21 +270,26 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 16BE037FF21DCFBC30C993A0 /* [CP] Embed Pods Frameworks */ = { + 3303C36477CF41E7A6E7C820 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { @@ -303,26 +308,21 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 6B43BA0ED7A59E5F9E7824A9 /* [CP] Check Pods Manifest.lock */ = { + 3EF9D3E10CA143399518195C /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; 9740EEB61CF901F6004384FC /* Run Script */ = { @@ -340,7 +340,7 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - AD7073F8B2A8B9D7C73C1E2B /* [CP] Check Pods Manifest.lock */ = { + B3B6826C80ECFD9CE5768CA8 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -355,7 +355,7 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 7D4452472D5AF425A635039C /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 4CC2809B9EB434B78907439E /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 58E4120D718D183216E2F816 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 6E4CD9BBF138CD00B1395359 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = D5D7E82A3FEE48552A1B1A9A /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 45B06D23A2EFC8599A32C572 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/brick_breaker/step_03/macos/Podfile b/brick_breaker/step_03/macos/Podfile index c795730db8..29c8eb3294 100644 --- a/brick_breaker/step_03/macos/Podfile +++ b/brick_breaker/step_03/macos/Podfile @@ -28,7 +28,6 @@ flutter_macos_podfile_setup target 'Runner' do use_frameworks! - use_modular_headers! flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__)) target 'RunnerTests' do diff --git a/brick_breaker/step_03/macos/Runner.xcodeproj/project.pbxproj b/brick_breaker/step_03/macos/Runner.xcodeproj/project.pbxproj index 8a694eeb67..5870d87d9f 100644 --- a/brick_breaker/step_03/macos/Runner.xcodeproj/project.pbxproj +++ b/brick_breaker/step_03/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ + 1E88EC466838A4046C71ACA4 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 655911A7233000A473A6612F /* Pods_Runner.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 5658E56B62B605B138A9F111 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B7BD0B1970D1897B74F07A89 /* Pods_Runner.framework */; }; - 9F81B80161B2124A9F488A1C /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DA8EE3E1AF83156D1A12CA68 /* Pods_RunnerTests.framework */; }; + FFFF9908871A656CF4E0DB05 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7A95BD85FF91B74BFEAD21F3 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,11 +62,12 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 029007D811D27C62B6B8B6FB /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 1FB4AB4E52BF313C58E4B234 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; }; - 338EE091C1F9F5450098813D /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 33CC10ED2044A3C60003C045 /* brick_breaker.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = brick_breaker.app; sourceTree = BUILT_PRODUCTS_DIR; }; 33CC10F02044A3C60003C045 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 33CC10F22044A3C60003C045 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = Runner/Assets.xcassets; sourceTree = ""; }; @@ -79,15 +80,14 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; + 4243F7F89A402C1D44C0CD4A /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 655911A7233000A473A6612F /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 7A95BD85FF91B74BFEAD21F3 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 8267E521E815EC0C64F08901 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - 9FD3C4B0DFBFF16743BD5FAF /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - B286950BC95C7F770C832B6E /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - B65E8CAEC95BEF8588C418A4 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - B7BD0B1970D1897B74F07A89 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - BCBDA775B0BEE126A464E62B /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - DA8EE3E1AF83156D1A12CA68 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + A4999189D6647736240DAB5D /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + C60C75E8C141A9F4C4D1BA41 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + EC59B169181141F9E0BFB9B0 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 9F81B80161B2124A9F488A1C /* Pods_RunnerTests.framework in Frameworks */, + FFFF9908871A656CF4E0DB05 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,7 +103,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 5658E56B62B605B138A9F111 /* Pods_Runner.framework in Frameworks */, + 1E88EC466838A4046C71ACA4 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -137,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - C14890065505BEA860C9C768 /* Pods */, + A46C58CBD702644809D0C415 /* Pods */, ); sourceTree = ""; }; @@ -185,15 +185,15 @@ path = Runner; sourceTree = ""; }; - C14890065505BEA860C9C768 /* Pods */ = { + A46C58CBD702644809D0C415 /* Pods */ = { isa = PBXGroup; children = ( - 8267E521E815EC0C64F08901 /* Pods-Runner.debug.xcconfig */, - 338EE091C1F9F5450098813D /* Pods-Runner.release.xcconfig */, - B286950BC95C7F770C832B6E /* Pods-Runner.profile.xcconfig */, - B65E8CAEC95BEF8588C418A4 /* Pods-RunnerTests.debug.xcconfig */, - 9FD3C4B0DFBFF16743BD5FAF /* Pods-RunnerTests.release.xcconfig */, - BCBDA775B0BEE126A464E62B /* Pods-RunnerTests.profile.xcconfig */, + 4243F7F89A402C1D44C0CD4A /* Pods-Runner.debug.xcconfig */, + 1FB4AB4E52BF313C58E4B234 /* Pods-Runner.release.xcconfig */, + A4999189D6647736240DAB5D /* Pods-Runner.profile.xcconfig */, + EC59B169181141F9E0BFB9B0 /* Pods-RunnerTests.debug.xcconfig */, + C60C75E8C141A9F4C4D1BA41 /* Pods-RunnerTests.release.xcconfig */, + 029007D811D27C62B6B8B6FB /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -202,8 +202,8 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - B7BD0B1970D1897B74F07A89 /* Pods_Runner.framework */, - DA8EE3E1AF83156D1A12CA68 /* Pods_RunnerTests.framework */, + 655911A7233000A473A6612F /* Pods_Runner.framework */, + 7A95BD85FF91B74BFEAD21F3 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - D9060D80D88FD22DB1DE6C3A /* [CP] Check Pods Manifest.lock */, + A59E86C64983E180D58EBFDA /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - E437887DD480199527592E81 /* [CP] Check Pods Manifest.lock */, + 9C2926C7FA4AA32A98047E80 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 23E4B333ADF5FCEE5E2EE136 /* [CP] Embed Pods Frameworks */, + F2A92AFE0AB9D0B0757B4D6E /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,23 +323,6 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 23E4B333ADF5FCEE5E2EE136 /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -378,7 +361,7 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - D9060D80D88FD22DB1DE6C3A /* [CP] Check Pods Manifest.lock */ = { + 9C2926C7FA4AA32A98047E80 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -393,14 +376,14 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - E437887DD480199527592E81 /* [CP] Check Pods Manifest.lock */ = { + A59E86C64983E180D58EBFDA /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -415,13 +398,30 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; + F2A92AFE0AB9D0B0757B4D6E /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = B65E8CAEC95BEF8588C418A4 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = EC59B169181141F9E0BFB9B0 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 9FD3C4B0DFBFF16743BD5FAF /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = C60C75E8C141A9F4C4D1BA41 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = BCBDA775B0BEE126A464E62B /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 029007D811D27C62B6B8B6FB /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/brick_breaker/step_05/android/app/build.gradle b/brick_breaker/step_04/android/app/build.gradle.kts similarity index 84% rename from brick_breaker/step_05/android/app/build.gradle rename to brick_breaker/step_04/android/app/build.gradle.kts index e40a92adc6..e4258bcf72 100644 --- a/brick_breaker/step_05/android/app/build.gradle +++ b/brick_breaker/step_04/android/app/build.gradle.kts @@ -1,8 +1,8 @@ plugins { - id "com.android.application" - id "kotlin-android" + id("com.android.application") + id("kotlin-android") // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. - id "dev.flutter.flutter-gradle-plugin" + id("dev.flutter.flutter-gradle-plugin") } android { @@ -16,7 +16,7 @@ android { } kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8 + jvmTarget = JavaVersion.VERSION_1_8.toString() } defaultConfig { @@ -34,7 +34,7 @@ android { release { // TODO: Add your own signing config for the release build. // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig = signingConfigs.debug + signingConfig = signingConfigs.getByName("debug") } } } diff --git a/brick_breaker/step_04/android/build.gradle b/brick_breaker/step_04/android/build.gradle deleted file mode 100644 index d2ffbffa4c..0000000000 --- a/brick_breaker/step_04/android/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = "../build" -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(":app") -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/brick_breaker/step_04/android/build.gradle.kts b/brick_breaker/step_04/android/build.gradle.kts new file mode 100644 index 0000000000..89176ef44e --- /dev/null +++ b/brick_breaker/step_04/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/brick_breaker/step_04/android/gradle.properties b/brick_breaker/step_04/android/gradle.properties index 2597170821..f018a61817 100644 --- a/brick_breaker/step_04/android/gradle.properties +++ b/brick_breaker/step_04/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/brick_breaker/step_04/android/gradle/wrapper/gradle-wrapper.properties b/brick_breaker/step_04/android/gradle/wrapper/gradle-wrapper.properties index 7bb2df6ba6..afa1e8eb0a 100644 --- a/brick_breaker/step_04/android/gradle/wrapper/gradle-wrapper.properties +++ b/brick_breaker/step_04/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip diff --git a/brick_breaker/step_04/android/settings.gradle b/brick_breaker/step_04/android/settings.gradle deleted file mode 100644 index b9e43bd376..0000000000 --- a/brick_breaker/step_04/android/settings.gradle +++ /dev/null @@ -1,25 +0,0 @@ -pluginManagement { - def flutterSdkPath = { - def properties = new Properties() - file("local.properties").withInputStream { properties.load(it) } - def flutterSdkPath = properties.getProperty("flutter.sdk") - assert flutterSdkPath != null, "flutter.sdk not set in local.properties" - return flutterSdkPath - }() - - includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") - - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} - -plugins { - id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.1.0" apply false - id "org.jetbrains.kotlin.android" version "1.8.22" apply false -} - -include ":app" diff --git a/brick_breaker/step_04/android/settings.gradle.kts b/brick_breaker/step_04/android/settings.gradle.kts new file mode 100644 index 0000000000..a439442c20 --- /dev/null +++ b/brick_breaker/step_04/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.0" apply false + id("org.jetbrains.kotlin.android") version "1.8.22" apply false +} + +include(":app") diff --git a/brick_breaker/step_04/ios/Podfile b/brick_breaker/step_04/ios/Podfile index d97f17e223..e549ee22f3 100644 --- a/brick_breaker/step_04/ios/Podfile +++ b/brick_breaker/step_04/ios/Podfile @@ -29,7 +29,6 @@ flutter_ios_podfile_setup target 'Runner' do use_frameworks! - use_modular_headers! flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) target 'RunnerTests' do diff --git a/brick_breaker/step_04/ios/Runner.xcodeproj/project.pbxproj b/brick_breaker/step_04/ios/Runner.xcodeproj/project.pbxproj index add9e55410..a1543efc86 100644 --- a/brick_breaker/step_04/ios/Runner.xcodeproj/project.pbxproj +++ b/brick_breaker/step_04/ios/Runner.xcodeproj/project.pbxproj @@ -8,14 +8,14 @@ /* Begin PBXBuildFile section */ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; - 29AD4F65B90DCD21875C2A4C /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C931705C418493DC02E52C6A /* Pods_Runner.framework */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; + 731668CE0733C8A6D3030D66 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D53959E4A5C0448BA84E4476 /* Pods_Runner.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - BB5BED3E580B45F0CD80E554 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B5F63ADA01AF049FFFC5CB39 /* Pods_RunnerTests.framework */; }; + C2A8C02781BE528B5B759C49 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A6B8CF3595E8A39D19DF86BD /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,18 +42,19 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 1109D92F379AA7567325FD73 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; + 2A1A7CE56A03FD7DE84BF271 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 58E4120D718D183216E2F816 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - 71F43AEF029360DE99B40B6F /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 45B06D23A2EFC8599A32C572 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 4CC2809B9EB434B78907439E /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 6E4CD9BBF138CD00B1395359 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 7D4452472D5AF425A635039C /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 87D6F4AFB2A01D1CBC283DBE /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -61,41 +62,31 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - B5F63ADA01AF049FFFC5CB39 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - C931705C418493DC02E52C6A /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - D510FFBF1E5D8C842D1A1042 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - D5D7E82A3FEE48552A1B1A9A /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + A6B8CF3595E8A39D19DF86BD /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + CD683244A747851B5E3BDE9D /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + D53959E4A5C0448BA84E4476 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 97C146EB1CF9000F007C117D /* Frameworks */ = { + 76F635906FE0A22BBD65F778 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 29AD4F65B90DCD21875C2A4C /* Pods_Runner.framework in Frameworks */, + C2A8C02781BE528B5B759C49 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - CF0381FD905E27D8E4FA4E94 /* Frameworks */ = { + 97C146EB1CF9000F007C117D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - BB5BED3E580B45F0CD80E554 /* Pods_RunnerTests.framework in Frameworks */, + 731668CE0733C8A6D3030D66 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 2078C8554440C2F9205D6B5A /* Frameworks */ = { - isa = PBXGroup; - children = ( - C931705C418493DC02E52C6A /* Pods_Runner.framework */, - B5F63ADA01AF049FFFC5CB39 /* Pods_RunnerTests.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; 331C8082294A63A400263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -104,15 +95,15 @@ path = RunnerTests; sourceTree = ""; }; - 56387D4532B1071467568739 /* Pods */ = { + 50A5776E1A511FE3A4E570DF /* Pods */ = { isa = PBXGroup; children = ( - 87D6F4AFB2A01D1CBC283DBE /* Pods-Runner.debug.xcconfig */, - 71F43AEF029360DE99B40B6F /* Pods-Runner.release.xcconfig */, - D510FFBF1E5D8C842D1A1042 /* Pods-Runner.profile.xcconfig */, - 7D4452472D5AF425A635039C /* Pods-RunnerTests.debug.xcconfig */, - 58E4120D718D183216E2F816 /* Pods-RunnerTests.release.xcconfig */, - D5D7E82A3FEE48552A1B1A9A /* Pods-RunnerTests.profile.xcconfig */, + 1109D92F379AA7567325FD73 /* Pods-Runner.debug.xcconfig */, + 2A1A7CE56A03FD7DE84BF271 /* Pods-Runner.release.xcconfig */, + CD683244A747851B5E3BDE9D /* Pods-Runner.profile.xcconfig */, + 4CC2809B9EB434B78907439E /* Pods-RunnerTests.debug.xcconfig */, + 6E4CD9BBF138CD00B1395359 /* Pods-RunnerTests.release.xcconfig */, + 45B06D23A2EFC8599A32C572 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -136,8 +127,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - 56387D4532B1071467568739 /* Pods */, - 2078C8554440C2F9205D6B5A /* Frameworks */, + 50A5776E1A511FE3A4E570DF /* Pods */, + DB8CE5BFDF3881F32F94FB43 /* Frameworks */, ); sourceTree = ""; }; @@ -165,6 +156,15 @@ path = Runner; sourceTree = ""; }; + DB8CE5BFDF3881F32F94FB43 /* Frameworks */ = { + isa = PBXGroup; + children = ( + D53959E4A5C0448BA84E4476 /* Pods_Runner.framework */, + A6B8CF3595E8A39D19DF86BD /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 6B43BA0ED7A59E5F9E7824A9 /* [CP] Check Pods Manifest.lock */, + B3B6826C80ECFD9CE5768CA8 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - CF0381FD905E27D8E4FA4E94 /* Frameworks */, + 76F635906FE0A22BBD65F778 /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - AD7073F8B2A8B9D7C73C1E2B /* [CP] Check Pods Manifest.lock */, + 3303C36477CF41E7A6E7C820 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 16BE037FF21DCFBC30C993A0 /* [CP] Embed Pods Frameworks */, + 3EF9D3E10CA143399518195C /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -270,21 +270,26 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 16BE037FF21DCFBC30C993A0 /* [CP] Embed Pods Frameworks */ = { + 3303C36477CF41E7A6E7C820 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { @@ -303,26 +308,21 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 6B43BA0ED7A59E5F9E7824A9 /* [CP] Check Pods Manifest.lock */ = { + 3EF9D3E10CA143399518195C /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; 9740EEB61CF901F6004384FC /* Run Script */ = { @@ -340,7 +340,7 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - AD7073F8B2A8B9D7C73C1E2B /* [CP] Check Pods Manifest.lock */ = { + B3B6826C80ECFD9CE5768CA8 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -355,7 +355,7 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 7D4452472D5AF425A635039C /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 4CC2809B9EB434B78907439E /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 58E4120D718D183216E2F816 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 6E4CD9BBF138CD00B1395359 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = D5D7E82A3FEE48552A1B1A9A /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 45B06D23A2EFC8599A32C572 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/brick_breaker/step_04/macos/Podfile b/brick_breaker/step_04/macos/Podfile index c795730db8..29c8eb3294 100644 --- a/brick_breaker/step_04/macos/Podfile +++ b/brick_breaker/step_04/macos/Podfile @@ -28,7 +28,6 @@ flutter_macos_podfile_setup target 'Runner' do use_frameworks! - use_modular_headers! flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__)) target 'RunnerTests' do diff --git a/brick_breaker/step_04/macos/Runner.xcodeproj/project.pbxproj b/brick_breaker/step_04/macos/Runner.xcodeproj/project.pbxproj index 8a694eeb67..5870d87d9f 100644 --- a/brick_breaker/step_04/macos/Runner.xcodeproj/project.pbxproj +++ b/brick_breaker/step_04/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ + 1E88EC466838A4046C71ACA4 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 655911A7233000A473A6612F /* Pods_Runner.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 5658E56B62B605B138A9F111 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B7BD0B1970D1897B74F07A89 /* Pods_Runner.framework */; }; - 9F81B80161B2124A9F488A1C /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DA8EE3E1AF83156D1A12CA68 /* Pods_RunnerTests.framework */; }; + FFFF9908871A656CF4E0DB05 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7A95BD85FF91B74BFEAD21F3 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,11 +62,12 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 029007D811D27C62B6B8B6FB /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 1FB4AB4E52BF313C58E4B234 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; }; - 338EE091C1F9F5450098813D /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 33CC10ED2044A3C60003C045 /* brick_breaker.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = brick_breaker.app; sourceTree = BUILT_PRODUCTS_DIR; }; 33CC10F02044A3C60003C045 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 33CC10F22044A3C60003C045 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = Runner/Assets.xcassets; sourceTree = ""; }; @@ -79,15 +80,14 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; + 4243F7F89A402C1D44C0CD4A /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 655911A7233000A473A6612F /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 7A95BD85FF91B74BFEAD21F3 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 8267E521E815EC0C64F08901 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - 9FD3C4B0DFBFF16743BD5FAF /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - B286950BC95C7F770C832B6E /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - B65E8CAEC95BEF8588C418A4 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - B7BD0B1970D1897B74F07A89 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - BCBDA775B0BEE126A464E62B /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - DA8EE3E1AF83156D1A12CA68 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + A4999189D6647736240DAB5D /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + C60C75E8C141A9F4C4D1BA41 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + EC59B169181141F9E0BFB9B0 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 9F81B80161B2124A9F488A1C /* Pods_RunnerTests.framework in Frameworks */, + FFFF9908871A656CF4E0DB05 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,7 +103,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 5658E56B62B605B138A9F111 /* Pods_Runner.framework in Frameworks */, + 1E88EC466838A4046C71ACA4 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -137,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - C14890065505BEA860C9C768 /* Pods */, + A46C58CBD702644809D0C415 /* Pods */, ); sourceTree = ""; }; @@ -185,15 +185,15 @@ path = Runner; sourceTree = ""; }; - C14890065505BEA860C9C768 /* Pods */ = { + A46C58CBD702644809D0C415 /* Pods */ = { isa = PBXGroup; children = ( - 8267E521E815EC0C64F08901 /* Pods-Runner.debug.xcconfig */, - 338EE091C1F9F5450098813D /* Pods-Runner.release.xcconfig */, - B286950BC95C7F770C832B6E /* Pods-Runner.profile.xcconfig */, - B65E8CAEC95BEF8588C418A4 /* Pods-RunnerTests.debug.xcconfig */, - 9FD3C4B0DFBFF16743BD5FAF /* Pods-RunnerTests.release.xcconfig */, - BCBDA775B0BEE126A464E62B /* Pods-RunnerTests.profile.xcconfig */, + 4243F7F89A402C1D44C0CD4A /* Pods-Runner.debug.xcconfig */, + 1FB4AB4E52BF313C58E4B234 /* Pods-Runner.release.xcconfig */, + A4999189D6647736240DAB5D /* Pods-Runner.profile.xcconfig */, + EC59B169181141F9E0BFB9B0 /* Pods-RunnerTests.debug.xcconfig */, + C60C75E8C141A9F4C4D1BA41 /* Pods-RunnerTests.release.xcconfig */, + 029007D811D27C62B6B8B6FB /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -202,8 +202,8 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - B7BD0B1970D1897B74F07A89 /* Pods_Runner.framework */, - DA8EE3E1AF83156D1A12CA68 /* Pods_RunnerTests.framework */, + 655911A7233000A473A6612F /* Pods_Runner.framework */, + 7A95BD85FF91B74BFEAD21F3 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - D9060D80D88FD22DB1DE6C3A /* [CP] Check Pods Manifest.lock */, + A59E86C64983E180D58EBFDA /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - E437887DD480199527592E81 /* [CP] Check Pods Manifest.lock */, + 9C2926C7FA4AA32A98047E80 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 23E4B333ADF5FCEE5E2EE136 /* [CP] Embed Pods Frameworks */, + F2A92AFE0AB9D0B0757B4D6E /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,23 +323,6 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 23E4B333ADF5FCEE5E2EE136 /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -378,7 +361,7 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - D9060D80D88FD22DB1DE6C3A /* [CP] Check Pods Manifest.lock */ = { + 9C2926C7FA4AA32A98047E80 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -393,14 +376,14 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - E437887DD480199527592E81 /* [CP] Check Pods Manifest.lock */ = { + A59E86C64983E180D58EBFDA /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -415,13 +398,30 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; + F2A92AFE0AB9D0B0757B4D6E /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = B65E8CAEC95BEF8588C418A4 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = EC59B169181141F9E0BFB9B0 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 9FD3C4B0DFBFF16743BD5FAF /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = C60C75E8C141A9F4C4D1BA41 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = BCBDA775B0BEE126A464E62B /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 029007D811D27C62B6B8B6FB /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/brick_breaker/step_06/android/app/build.gradle b/brick_breaker/step_05/android/app/build.gradle.kts similarity index 84% rename from brick_breaker/step_06/android/app/build.gradle rename to brick_breaker/step_05/android/app/build.gradle.kts index e40a92adc6..e4258bcf72 100644 --- a/brick_breaker/step_06/android/app/build.gradle +++ b/brick_breaker/step_05/android/app/build.gradle.kts @@ -1,8 +1,8 @@ plugins { - id "com.android.application" - id "kotlin-android" + id("com.android.application") + id("kotlin-android") // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. - id "dev.flutter.flutter-gradle-plugin" + id("dev.flutter.flutter-gradle-plugin") } android { @@ -16,7 +16,7 @@ android { } kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8 + jvmTarget = JavaVersion.VERSION_1_8.toString() } defaultConfig { @@ -34,7 +34,7 @@ android { release { // TODO: Add your own signing config for the release build. // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig = signingConfigs.debug + signingConfig = signingConfigs.getByName("debug") } } } diff --git a/brick_breaker/step_05/android/build.gradle b/brick_breaker/step_05/android/build.gradle deleted file mode 100644 index d2ffbffa4c..0000000000 --- a/brick_breaker/step_05/android/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = "../build" -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(":app") -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/brick_breaker/step_05/android/build.gradle.kts b/brick_breaker/step_05/android/build.gradle.kts new file mode 100644 index 0000000000..89176ef44e --- /dev/null +++ b/brick_breaker/step_05/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/brick_breaker/step_05/android/gradle.properties b/brick_breaker/step_05/android/gradle.properties index 2597170821..f018a61817 100644 --- a/brick_breaker/step_05/android/gradle.properties +++ b/brick_breaker/step_05/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/brick_breaker/step_05/android/gradle/wrapper/gradle-wrapper.properties b/brick_breaker/step_05/android/gradle/wrapper/gradle-wrapper.properties index 7bb2df6ba6..afa1e8eb0a 100644 --- a/brick_breaker/step_05/android/gradle/wrapper/gradle-wrapper.properties +++ b/brick_breaker/step_05/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip diff --git a/brick_breaker/step_05/android/settings.gradle b/brick_breaker/step_05/android/settings.gradle deleted file mode 100644 index b9e43bd376..0000000000 --- a/brick_breaker/step_05/android/settings.gradle +++ /dev/null @@ -1,25 +0,0 @@ -pluginManagement { - def flutterSdkPath = { - def properties = new Properties() - file("local.properties").withInputStream { properties.load(it) } - def flutterSdkPath = properties.getProperty("flutter.sdk") - assert flutterSdkPath != null, "flutter.sdk not set in local.properties" - return flutterSdkPath - }() - - includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") - - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} - -plugins { - id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.1.0" apply false - id "org.jetbrains.kotlin.android" version "1.8.22" apply false -} - -include ":app" diff --git a/brick_breaker/step_05/android/settings.gradle.kts b/brick_breaker/step_05/android/settings.gradle.kts new file mode 100644 index 0000000000..a439442c20 --- /dev/null +++ b/brick_breaker/step_05/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.0" apply false + id("org.jetbrains.kotlin.android") version "1.8.22" apply false +} + +include(":app") diff --git a/brick_breaker/step_05/ios/Podfile b/brick_breaker/step_05/ios/Podfile index d97f17e223..e549ee22f3 100644 --- a/brick_breaker/step_05/ios/Podfile +++ b/brick_breaker/step_05/ios/Podfile @@ -29,7 +29,6 @@ flutter_ios_podfile_setup target 'Runner' do use_frameworks! - use_modular_headers! flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) target 'RunnerTests' do diff --git a/brick_breaker/step_05/ios/Runner.xcodeproj/project.pbxproj b/brick_breaker/step_05/ios/Runner.xcodeproj/project.pbxproj index add9e55410..a1543efc86 100644 --- a/brick_breaker/step_05/ios/Runner.xcodeproj/project.pbxproj +++ b/brick_breaker/step_05/ios/Runner.xcodeproj/project.pbxproj @@ -8,14 +8,14 @@ /* Begin PBXBuildFile section */ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; - 29AD4F65B90DCD21875C2A4C /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C931705C418493DC02E52C6A /* Pods_Runner.framework */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; + 731668CE0733C8A6D3030D66 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D53959E4A5C0448BA84E4476 /* Pods_Runner.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - BB5BED3E580B45F0CD80E554 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B5F63ADA01AF049FFFC5CB39 /* Pods_RunnerTests.framework */; }; + C2A8C02781BE528B5B759C49 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A6B8CF3595E8A39D19DF86BD /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,18 +42,19 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 1109D92F379AA7567325FD73 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; + 2A1A7CE56A03FD7DE84BF271 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 58E4120D718D183216E2F816 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - 71F43AEF029360DE99B40B6F /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 45B06D23A2EFC8599A32C572 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 4CC2809B9EB434B78907439E /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 6E4CD9BBF138CD00B1395359 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 7D4452472D5AF425A635039C /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 87D6F4AFB2A01D1CBC283DBE /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -61,41 +62,31 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - B5F63ADA01AF049FFFC5CB39 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - C931705C418493DC02E52C6A /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - D510FFBF1E5D8C842D1A1042 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - D5D7E82A3FEE48552A1B1A9A /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + A6B8CF3595E8A39D19DF86BD /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + CD683244A747851B5E3BDE9D /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + D53959E4A5C0448BA84E4476 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 97C146EB1CF9000F007C117D /* Frameworks */ = { + 76F635906FE0A22BBD65F778 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 29AD4F65B90DCD21875C2A4C /* Pods_Runner.framework in Frameworks */, + C2A8C02781BE528B5B759C49 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - CF0381FD905E27D8E4FA4E94 /* Frameworks */ = { + 97C146EB1CF9000F007C117D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - BB5BED3E580B45F0CD80E554 /* Pods_RunnerTests.framework in Frameworks */, + 731668CE0733C8A6D3030D66 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 2078C8554440C2F9205D6B5A /* Frameworks */ = { - isa = PBXGroup; - children = ( - C931705C418493DC02E52C6A /* Pods_Runner.framework */, - B5F63ADA01AF049FFFC5CB39 /* Pods_RunnerTests.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; 331C8082294A63A400263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -104,15 +95,15 @@ path = RunnerTests; sourceTree = ""; }; - 56387D4532B1071467568739 /* Pods */ = { + 50A5776E1A511FE3A4E570DF /* Pods */ = { isa = PBXGroup; children = ( - 87D6F4AFB2A01D1CBC283DBE /* Pods-Runner.debug.xcconfig */, - 71F43AEF029360DE99B40B6F /* Pods-Runner.release.xcconfig */, - D510FFBF1E5D8C842D1A1042 /* Pods-Runner.profile.xcconfig */, - 7D4452472D5AF425A635039C /* Pods-RunnerTests.debug.xcconfig */, - 58E4120D718D183216E2F816 /* Pods-RunnerTests.release.xcconfig */, - D5D7E82A3FEE48552A1B1A9A /* Pods-RunnerTests.profile.xcconfig */, + 1109D92F379AA7567325FD73 /* Pods-Runner.debug.xcconfig */, + 2A1A7CE56A03FD7DE84BF271 /* Pods-Runner.release.xcconfig */, + CD683244A747851B5E3BDE9D /* Pods-Runner.profile.xcconfig */, + 4CC2809B9EB434B78907439E /* Pods-RunnerTests.debug.xcconfig */, + 6E4CD9BBF138CD00B1395359 /* Pods-RunnerTests.release.xcconfig */, + 45B06D23A2EFC8599A32C572 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -136,8 +127,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - 56387D4532B1071467568739 /* Pods */, - 2078C8554440C2F9205D6B5A /* Frameworks */, + 50A5776E1A511FE3A4E570DF /* Pods */, + DB8CE5BFDF3881F32F94FB43 /* Frameworks */, ); sourceTree = ""; }; @@ -165,6 +156,15 @@ path = Runner; sourceTree = ""; }; + DB8CE5BFDF3881F32F94FB43 /* Frameworks */ = { + isa = PBXGroup; + children = ( + D53959E4A5C0448BA84E4476 /* Pods_Runner.framework */, + A6B8CF3595E8A39D19DF86BD /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 6B43BA0ED7A59E5F9E7824A9 /* [CP] Check Pods Manifest.lock */, + B3B6826C80ECFD9CE5768CA8 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - CF0381FD905E27D8E4FA4E94 /* Frameworks */, + 76F635906FE0A22BBD65F778 /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - AD7073F8B2A8B9D7C73C1E2B /* [CP] Check Pods Manifest.lock */, + 3303C36477CF41E7A6E7C820 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 16BE037FF21DCFBC30C993A0 /* [CP] Embed Pods Frameworks */, + 3EF9D3E10CA143399518195C /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -270,21 +270,26 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 16BE037FF21DCFBC30C993A0 /* [CP] Embed Pods Frameworks */ = { + 3303C36477CF41E7A6E7C820 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { @@ -303,26 +308,21 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 6B43BA0ED7A59E5F9E7824A9 /* [CP] Check Pods Manifest.lock */ = { + 3EF9D3E10CA143399518195C /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; 9740EEB61CF901F6004384FC /* Run Script */ = { @@ -340,7 +340,7 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - AD7073F8B2A8B9D7C73C1E2B /* [CP] Check Pods Manifest.lock */ = { + B3B6826C80ECFD9CE5768CA8 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -355,7 +355,7 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 7D4452472D5AF425A635039C /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 4CC2809B9EB434B78907439E /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 58E4120D718D183216E2F816 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 6E4CD9BBF138CD00B1395359 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = D5D7E82A3FEE48552A1B1A9A /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 45B06D23A2EFC8599A32C572 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/brick_breaker/step_05/macos/Podfile b/brick_breaker/step_05/macos/Podfile index c795730db8..29c8eb3294 100644 --- a/brick_breaker/step_05/macos/Podfile +++ b/brick_breaker/step_05/macos/Podfile @@ -28,7 +28,6 @@ flutter_macos_podfile_setup target 'Runner' do use_frameworks! - use_modular_headers! flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__)) target 'RunnerTests' do diff --git a/brick_breaker/step_05/macos/Runner.xcodeproj/project.pbxproj b/brick_breaker/step_05/macos/Runner.xcodeproj/project.pbxproj index 8a694eeb67..5870d87d9f 100644 --- a/brick_breaker/step_05/macos/Runner.xcodeproj/project.pbxproj +++ b/brick_breaker/step_05/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ + 1E88EC466838A4046C71ACA4 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 655911A7233000A473A6612F /* Pods_Runner.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 5658E56B62B605B138A9F111 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B7BD0B1970D1897B74F07A89 /* Pods_Runner.framework */; }; - 9F81B80161B2124A9F488A1C /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DA8EE3E1AF83156D1A12CA68 /* Pods_RunnerTests.framework */; }; + FFFF9908871A656CF4E0DB05 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7A95BD85FF91B74BFEAD21F3 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,11 +62,12 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 029007D811D27C62B6B8B6FB /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 1FB4AB4E52BF313C58E4B234 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; }; - 338EE091C1F9F5450098813D /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 33CC10ED2044A3C60003C045 /* brick_breaker.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = brick_breaker.app; sourceTree = BUILT_PRODUCTS_DIR; }; 33CC10F02044A3C60003C045 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 33CC10F22044A3C60003C045 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = Runner/Assets.xcassets; sourceTree = ""; }; @@ -79,15 +80,14 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; + 4243F7F89A402C1D44C0CD4A /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 655911A7233000A473A6612F /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 7A95BD85FF91B74BFEAD21F3 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 8267E521E815EC0C64F08901 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - 9FD3C4B0DFBFF16743BD5FAF /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - B286950BC95C7F770C832B6E /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - B65E8CAEC95BEF8588C418A4 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - B7BD0B1970D1897B74F07A89 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - BCBDA775B0BEE126A464E62B /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - DA8EE3E1AF83156D1A12CA68 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + A4999189D6647736240DAB5D /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + C60C75E8C141A9F4C4D1BA41 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + EC59B169181141F9E0BFB9B0 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 9F81B80161B2124A9F488A1C /* Pods_RunnerTests.framework in Frameworks */, + FFFF9908871A656CF4E0DB05 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,7 +103,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 5658E56B62B605B138A9F111 /* Pods_Runner.framework in Frameworks */, + 1E88EC466838A4046C71ACA4 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -137,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - C14890065505BEA860C9C768 /* Pods */, + A46C58CBD702644809D0C415 /* Pods */, ); sourceTree = ""; }; @@ -185,15 +185,15 @@ path = Runner; sourceTree = ""; }; - C14890065505BEA860C9C768 /* Pods */ = { + A46C58CBD702644809D0C415 /* Pods */ = { isa = PBXGroup; children = ( - 8267E521E815EC0C64F08901 /* Pods-Runner.debug.xcconfig */, - 338EE091C1F9F5450098813D /* Pods-Runner.release.xcconfig */, - B286950BC95C7F770C832B6E /* Pods-Runner.profile.xcconfig */, - B65E8CAEC95BEF8588C418A4 /* Pods-RunnerTests.debug.xcconfig */, - 9FD3C4B0DFBFF16743BD5FAF /* Pods-RunnerTests.release.xcconfig */, - BCBDA775B0BEE126A464E62B /* Pods-RunnerTests.profile.xcconfig */, + 4243F7F89A402C1D44C0CD4A /* Pods-Runner.debug.xcconfig */, + 1FB4AB4E52BF313C58E4B234 /* Pods-Runner.release.xcconfig */, + A4999189D6647736240DAB5D /* Pods-Runner.profile.xcconfig */, + EC59B169181141F9E0BFB9B0 /* Pods-RunnerTests.debug.xcconfig */, + C60C75E8C141A9F4C4D1BA41 /* Pods-RunnerTests.release.xcconfig */, + 029007D811D27C62B6B8B6FB /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -202,8 +202,8 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - B7BD0B1970D1897B74F07A89 /* Pods_Runner.framework */, - DA8EE3E1AF83156D1A12CA68 /* Pods_RunnerTests.framework */, + 655911A7233000A473A6612F /* Pods_Runner.framework */, + 7A95BD85FF91B74BFEAD21F3 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - D9060D80D88FD22DB1DE6C3A /* [CP] Check Pods Manifest.lock */, + A59E86C64983E180D58EBFDA /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - E437887DD480199527592E81 /* [CP] Check Pods Manifest.lock */, + 9C2926C7FA4AA32A98047E80 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 23E4B333ADF5FCEE5E2EE136 /* [CP] Embed Pods Frameworks */, + F2A92AFE0AB9D0B0757B4D6E /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,23 +323,6 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 23E4B333ADF5FCEE5E2EE136 /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -378,7 +361,7 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - D9060D80D88FD22DB1DE6C3A /* [CP] Check Pods Manifest.lock */ = { + 9C2926C7FA4AA32A98047E80 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -393,14 +376,14 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - E437887DD480199527592E81 /* [CP] Check Pods Manifest.lock */ = { + A59E86C64983E180D58EBFDA /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -415,13 +398,30 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; + F2A92AFE0AB9D0B0757B4D6E /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = B65E8CAEC95BEF8588C418A4 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = EC59B169181141F9E0BFB9B0 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 9FD3C4B0DFBFF16743BD5FAF /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = C60C75E8C141A9F4C4D1BA41 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = BCBDA775B0BEE126A464E62B /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 029007D811D27C62B6B8B6FB /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/brick_breaker/step_04/android/app/build.gradle b/brick_breaker/step_06/android/app/build.gradle.kts similarity index 84% rename from brick_breaker/step_04/android/app/build.gradle rename to brick_breaker/step_06/android/app/build.gradle.kts index e40a92adc6..e4258bcf72 100644 --- a/brick_breaker/step_04/android/app/build.gradle +++ b/brick_breaker/step_06/android/app/build.gradle.kts @@ -1,8 +1,8 @@ plugins { - id "com.android.application" - id "kotlin-android" + id("com.android.application") + id("kotlin-android") // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. - id "dev.flutter.flutter-gradle-plugin" + id("dev.flutter.flutter-gradle-plugin") } android { @@ -16,7 +16,7 @@ android { } kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8 + jvmTarget = JavaVersion.VERSION_1_8.toString() } defaultConfig { @@ -34,7 +34,7 @@ android { release { // TODO: Add your own signing config for the release build. // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig = signingConfigs.debug + signingConfig = signingConfigs.getByName("debug") } } } diff --git a/brick_breaker/step_06/android/build.gradle b/brick_breaker/step_06/android/build.gradle deleted file mode 100644 index d2ffbffa4c..0000000000 --- a/brick_breaker/step_06/android/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = "../build" -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(":app") -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/brick_breaker/step_06/android/build.gradle.kts b/brick_breaker/step_06/android/build.gradle.kts new file mode 100644 index 0000000000..89176ef44e --- /dev/null +++ b/brick_breaker/step_06/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/brick_breaker/step_06/android/gradle.properties b/brick_breaker/step_06/android/gradle.properties index 2597170821..f018a61817 100644 --- a/brick_breaker/step_06/android/gradle.properties +++ b/brick_breaker/step_06/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/brick_breaker/step_06/android/gradle/wrapper/gradle-wrapper.properties b/brick_breaker/step_06/android/gradle/wrapper/gradle-wrapper.properties index 7bb2df6ba6..afa1e8eb0a 100644 --- a/brick_breaker/step_06/android/gradle/wrapper/gradle-wrapper.properties +++ b/brick_breaker/step_06/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip diff --git a/brick_breaker/step_06/android/settings.gradle b/brick_breaker/step_06/android/settings.gradle deleted file mode 100644 index b9e43bd376..0000000000 --- a/brick_breaker/step_06/android/settings.gradle +++ /dev/null @@ -1,25 +0,0 @@ -pluginManagement { - def flutterSdkPath = { - def properties = new Properties() - file("local.properties").withInputStream { properties.load(it) } - def flutterSdkPath = properties.getProperty("flutter.sdk") - assert flutterSdkPath != null, "flutter.sdk not set in local.properties" - return flutterSdkPath - }() - - includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") - - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} - -plugins { - id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.1.0" apply false - id "org.jetbrains.kotlin.android" version "1.8.22" apply false -} - -include ":app" diff --git a/brick_breaker/step_06/android/settings.gradle.kts b/brick_breaker/step_06/android/settings.gradle.kts new file mode 100644 index 0000000000..a439442c20 --- /dev/null +++ b/brick_breaker/step_06/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.0" apply false + id("org.jetbrains.kotlin.android") version "1.8.22" apply false +} + +include(":app") diff --git a/brick_breaker/step_06/ios/Podfile b/brick_breaker/step_06/ios/Podfile index d97f17e223..e549ee22f3 100644 --- a/brick_breaker/step_06/ios/Podfile +++ b/brick_breaker/step_06/ios/Podfile @@ -29,7 +29,6 @@ flutter_ios_podfile_setup target 'Runner' do use_frameworks! - use_modular_headers! flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) target 'RunnerTests' do diff --git a/brick_breaker/step_06/ios/Runner.xcodeproj/project.pbxproj b/brick_breaker/step_06/ios/Runner.xcodeproj/project.pbxproj index add9e55410..a1543efc86 100644 --- a/brick_breaker/step_06/ios/Runner.xcodeproj/project.pbxproj +++ b/brick_breaker/step_06/ios/Runner.xcodeproj/project.pbxproj @@ -8,14 +8,14 @@ /* Begin PBXBuildFile section */ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; - 29AD4F65B90DCD21875C2A4C /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C931705C418493DC02E52C6A /* Pods_Runner.framework */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; + 731668CE0733C8A6D3030D66 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D53959E4A5C0448BA84E4476 /* Pods_Runner.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - BB5BED3E580B45F0CD80E554 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B5F63ADA01AF049FFFC5CB39 /* Pods_RunnerTests.framework */; }; + C2A8C02781BE528B5B759C49 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A6B8CF3595E8A39D19DF86BD /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,18 +42,19 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 1109D92F379AA7567325FD73 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; + 2A1A7CE56A03FD7DE84BF271 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 58E4120D718D183216E2F816 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - 71F43AEF029360DE99B40B6F /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 45B06D23A2EFC8599A32C572 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 4CC2809B9EB434B78907439E /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 6E4CD9BBF138CD00B1395359 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 7D4452472D5AF425A635039C /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 87D6F4AFB2A01D1CBC283DBE /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -61,41 +62,31 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - B5F63ADA01AF049FFFC5CB39 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - C931705C418493DC02E52C6A /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - D510FFBF1E5D8C842D1A1042 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - D5D7E82A3FEE48552A1B1A9A /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + A6B8CF3595E8A39D19DF86BD /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + CD683244A747851B5E3BDE9D /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + D53959E4A5C0448BA84E4476 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 97C146EB1CF9000F007C117D /* Frameworks */ = { + 76F635906FE0A22BBD65F778 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 29AD4F65B90DCD21875C2A4C /* Pods_Runner.framework in Frameworks */, + C2A8C02781BE528B5B759C49 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - CF0381FD905E27D8E4FA4E94 /* Frameworks */ = { + 97C146EB1CF9000F007C117D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - BB5BED3E580B45F0CD80E554 /* Pods_RunnerTests.framework in Frameworks */, + 731668CE0733C8A6D3030D66 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 2078C8554440C2F9205D6B5A /* Frameworks */ = { - isa = PBXGroup; - children = ( - C931705C418493DC02E52C6A /* Pods_Runner.framework */, - B5F63ADA01AF049FFFC5CB39 /* Pods_RunnerTests.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; 331C8082294A63A400263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -104,15 +95,15 @@ path = RunnerTests; sourceTree = ""; }; - 56387D4532B1071467568739 /* Pods */ = { + 50A5776E1A511FE3A4E570DF /* Pods */ = { isa = PBXGroup; children = ( - 87D6F4AFB2A01D1CBC283DBE /* Pods-Runner.debug.xcconfig */, - 71F43AEF029360DE99B40B6F /* Pods-Runner.release.xcconfig */, - D510FFBF1E5D8C842D1A1042 /* Pods-Runner.profile.xcconfig */, - 7D4452472D5AF425A635039C /* Pods-RunnerTests.debug.xcconfig */, - 58E4120D718D183216E2F816 /* Pods-RunnerTests.release.xcconfig */, - D5D7E82A3FEE48552A1B1A9A /* Pods-RunnerTests.profile.xcconfig */, + 1109D92F379AA7567325FD73 /* Pods-Runner.debug.xcconfig */, + 2A1A7CE56A03FD7DE84BF271 /* Pods-Runner.release.xcconfig */, + CD683244A747851B5E3BDE9D /* Pods-Runner.profile.xcconfig */, + 4CC2809B9EB434B78907439E /* Pods-RunnerTests.debug.xcconfig */, + 6E4CD9BBF138CD00B1395359 /* Pods-RunnerTests.release.xcconfig */, + 45B06D23A2EFC8599A32C572 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -136,8 +127,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - 56387D4532B1071467568739 /* Pods */, - 2078C8554440C2F9205D6B5A /* Frameworks */, + 50A5776E1A511FE3A4E570DF /* Pods */, + DB8CE5BFDF3881F32F94FB43 /* Frameworks */, ); sourceTree = ""; }; @@ -165,6 +156,15 @@ path = Runner; sourceTree = ""; }; + DB8CE5BFDF3881F32F94FB43 /* Frameworks */ = { + isa = PBXGroup; + children = ( + D53959E4A5C0448BA84E4476 /* Pods_Runner.framework */, + A6B8CF3595E8A39D19DF86BD /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 6B43BA0ED7A59E5F9E7824A9 /* [CP] Check Pods Manifest.lock */, + B3B6826C80ECFD9CE5768CA8 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - CF0381FD905E27D8E4FA4E94 /* Frameworks */, + 76F635906FE0A22BBD65F778 /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - AD7073F8B2A8B9D7C73C1E2B /* [CP] Check Pods Manifest.lock */, + 3303C36477CF41E7A6E7C820 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 16BE037FF21DCFBC30C993A0 /* [CP] Embed Pods Frameworks */, + 3EF9D3E10CA143399518195C /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -270,21 +270,26 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 16BE037FF21DCFBC30C993A0 /* [CP] Embed Pods Frameworks */ = { + 3303C36477CF41E7A6E7C820 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { @@ -303,26 +308,21 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 6B43BA0ED7A59E5F9E7824A9 /* [CP] Check Pods Manifest.lock */ = { + 3EF9D3E10CA143399518195C /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; 9740EEB61CF901F6004384FC /* Run Script */ = { @@ -340,7 +340,7 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - AD7073F8B2A8B9D7C73C1E2B /* [CP] Check Pods Manifest.lock */ = { + B3B6826C80ECFD9CE5768CA8 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -355,7 +355,7 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 7D4452472D5AF425A635039C /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 4CC2809B9EB434B78907439E /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 58E4120D718D183216E2F816 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 6E4CD9BBF138CD00B1395359 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = D5D7E82A3FEE48552A1B1A9A /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 45B06D23A2EFC8599A32C572 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/brick_breaker/step_06/macos/Podfile b/brick_breaker/step_06/macos/Podfile index c795730db8..29c8eb3294 100644 --- a/brick_breaker/step_06/macos/Podfile +++ b/brick_breaker/step_06/macos/Podfile @@ -28,7 +28,6 @@ flutter_macos_podfile_setup target 'Runner' do use_frameworks! - use_modular_headers! flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__)) target 'RunnerTests' do diff --git a/brick_breaker/step_06/macos/Runner.xcodeproj/project.pbxproj b/brick_breaker/step_06/macos/Runner.xcodeproj/project.pbxproj index 8a694eeb67..5870d87d9f 100644 --- a/brick_breaker/step_06/macos/Runner.xcodeproj/project.pbxproj +++ b/brick_breaker/step_06/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ + 1E88EC466838A4046C71ACA4 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 655911A7233000A473A6612F /* Pods_Runner.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 5658E56B62B605B138A9F111 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B7BD0B1970D1897B74F07A89 /* Pods_Runner.framework */; }; - 9F81B80161B2124A9F488A1C /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DA8EE3E1AF83156D1A12CA68 /* Pods_RunnerTests.framework */; }; + FFFF9908871A656CF4E0DB05 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7A95BD85FF91B74BFEAD21F3 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,11 +62,12 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 029007D811D27C62B6B8B6FB /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 1FB4AB4E52BF313C58E4B234 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; }; - 338EE091C1F9F5450098813D /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 33CC10ED2044A3C60003C045 /* brick_breaker.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = brick_breaker.app; sourceTree = BUILT_PRODUCTS_DIR; }; 33CC10F02044A3C60003C045 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 33CC10F22044A3C60003C045 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = Runner/Assets.xcassets; sourceTree = ""; }; @@ -79,15 +80,14 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; + 4243F7F89A402C1D44C0CD4A /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 655911A7233000A473A6612F /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 7A95BD85FF91B74BFEAD21F3 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 8267E521E815EC0C64F08901 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - 9FD3C4B0DFBFF16743BD5FAF /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - B286950BC95C7F770C832B6E /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - B65E8CAEC95BEF8588C418A4 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - B7BD0B1970D1897B74F07A89 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - BCBDA775B0BEE126A464E62B /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - DA8EE3E1AF83156D1A12CA68 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + A4999189D6647736240DAB5D /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + C60C75E8C141A9F4C4D1BA41 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + EC59B169181141F9E0BFB9B0 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 9F81B80161B2124A9F488A1C /* Pods_RunnerTests.framework in Frameworks */, + FFFF9908871A656CF4E0DB05 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,7 +103,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 5658E56B62B605B138A9F111 /* Pods_Runner.framework in Frameworks */, + 1E88EC466838A4046C71ACA4 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -137,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - C14890065505BEA860C9C768 /* Pods */, + A46C58CBD702644809D0C415 /* Pods */, ); sourceTree = ""; }; @@ -185,15 +185,15 @@ path = Runner; sourceTree = ""; }; - C14890065505BEA860C9C768 /* Pods */ = { + A46C58CBD702644809D0C415 /* Pods */ = { isa = PBXGroup; children = ( - 8267E521E815EC0C64F08901 /* Pods-Runner.debug.xcconfig */, - 338EE091C1F9F5450098813D /* Pods-Runner.release.xcconfig */, - B286950BC95C7F770C832B6E /* Pods-Runner.profile.xcconfig */, - B65E8CAEC95BEF8588C418A4 /* Pods-RunnerTests.debug.xcconfig */, - 9FD3C4B0DFBFF16743BD5FAF /* Pods-RunnerTests.release.xcconfig */, - BCBDA775B0BEE126A464E62B /* Pods-RunnerTests.profile.xcconfig */, + 4243F7F89A402C1D44C0CD4A /* Pods-Runner.debug.xcconfig */, + 1FB4AB4E52BF313C58E4B234 /* Pods-Runner.release.xcconfig */, + A4999189D6647736240DAB5D /* Pods-Runner.profile.xcconfig */, + EC59B169181141F9E0BFB9B0 /* Pods-RunnerTests.debug.xcconfig */, + C60C75E8C141A9F4C4D1BA41 /* Pods-RunnerTests.release.xcconfig */, + 029007D811D27C62B6B8B6FB /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -202,8 +202,8 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - B7BD0B1970D1897B74F07A89 /* Pods_Runner.framework */, - DA8EE3E1AF83156D1A12CA68 /* Pods_RunnerTests.framework */, + 655911A7233000A473A6612F /* Pods_Runner.framework */, + 7A95BD85FF91B74BFEAD21F3 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - D9060D80D88FD22DB1DE6C3A /* [CP] Check Pods Manifest.lock */, + A59E86C64983E180D58EBFDA /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - E437887DD480199527592E81 /* [CP] Check Pods Manifest.lock */, + 9C2926C7FA4AA32A98047E80 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 23E4B333ADF5FCEE5E2EE136 /* [CP] Embed Pods Frameworks */, + F2A92AFE0AB9D0B0757B4D6E /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,23 +323,6 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 23E4B333ADF5FCEE5E2EE136 /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -378,7 +361,7 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - D9060D80D88FD22DB1DE6C3A /* [CP] Check Pods Manifest.lock */ = { + 9C2926C7FA4AA32A98047E80 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -393,14 +376,14 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - E437887DD480199527592E81 /* [CP] Check Pods Manifest.lock */ = { + A59E86C64983E180D58EBFDA /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -415,13 +398,30 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; + F2A92AFE0AB9D0B0757B4D6E /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = B65E8CAEC95BEF8588C418A4 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = EC59B169181141F9E0BFB9B0 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 9FD3C4B0DFBFF16743BD5FAF /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = C60C75E8C141A9F4C4D1BA41 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = BCBDA775B0BEE126A464E62B /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 029007D811D27C62B6B8B6FB /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/brick_breaker/step_07/android/app/build.gradle b/brick_breaker/step_07/android/app/build.gradle deleted file mode 100644 index e40a92adc6..0000000000 --- a/brick_breaker/step_07/android/app/build.gradle +++ /dev/null @@ -1,44 +0,0 @@ -plugins { - id "com.android.application" - id "kotlin-android" - // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. - id "dev.flutter.flutter-gradle-plugin" -} - -android { - namespace = "com.example.brick_breaker" - compileSdk = flutter.compileSdkVersion - ndkVersion = flutter.ndkVersion - - compileOptions { - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 - } - - kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8 - } - - defaultConfig { - // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). - applicationId = "com.example.brick_breaker" - // You can update the following values to match your application needs. - // For more information, see: https://flutter.dev/to/review-gradle-config. - minSdk = flutter.minSdkVersion - targetSdk = flutter.targetSdkVersion - versionCode = flutter.versionCode - versionName = flutter.versionName - } - - buildTypes { - release { - // TODO: Add your own signing config for the release build. - // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig = signingConfigs.debug - } - } -} - -flutter { - source = "../.." -} diff --git a/brick_breaker/step_07/android/app/build.gradle.kts b/brick_breaker/step_07/android/app/build.gradle.kts new file mode 100644 index 0000000000..e4258bcf72 --- /dev/null +++ b/brick_breaker/step_07/android/app/build.gradle.kts @@ -0,0 +1,44 @@ +plugins { + id("com.android.application") + id("kotlin-android") + // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. + id("dev.flutter.flutter-gradle-plugin") +} + +android { + namespace = "com.example.brick_breaker" + compileSdk = flutter.compileSdkVersion + ndkVersion = flutter.ndkVersion + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 + } + + kotlinOptions { + jvmTarget = JavaVersion.VERSION_1_8.toString() + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId = "com.example.brick_breaker" + // You can update the following values to match your application needs. + // For more information, see: https://flutter.dev/to/review-gradle-config. + minSdk = flutter.minSdkVersion + targetSdk = flutter.targetSdkVersion + versionCode = flutter.versionCode + versionName = flutter.versionName + } + + buildTypes { + release { + // TODO: Add your own signing config for the release build. + // Signing with the debug keys for now, so `flutter run --release` works. + signingConfig = signingConfigs.getByName("debug") + } + } +} + +flutter { + source = "../.." +} diff --git a/brick_breaker/step_07/android/build.gradle b/brick_breaker/step_07/android/build.gradle deleted file mode 100644 index d2ffbffa4c..0000000000 --- a/brick_breaker/step_07/android/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = "../build" -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(":app") -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/brick_breaker/step_07/android/build.gradle.kts b/brick_breaker/step_07/android/build.gradle.kts new file mode 100644 index 0000000000..89176ef44e --- /dev/null +++ b/brick_breaker/step_07/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/brick_breaker/step_07/android/gradle.properties b/brick_breaker/step_07/android/gradle.properties index 2597170821..f018a61817 100644 --- a/brick_breaker/step_07/android/gradle.properties +++ b/brick_breaker/step_07/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/brick_breaker/step_07/android/gradle/wrapper/gradle-wrapper.properties b/brick_breaker/step_07/android/gradle/wrapper/gradle-wrapper.properties index 7bb2df6ba6..afa1e8eb0a 100644 --- a/brick_breaker/step_07/android/gradle/wrapper/gradle-wrapper.properties +++ b/brick_breaker/step_07/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip diff --git a/brick_breaker/step_07/android/settings.gradle b/brick_breaker/step_07/android/settings.gradle deleted file mode 100644 index b9e43bd376..0000000000 --- a/brick_breaker/step_07/android/settings.gradle +++ /dev/null @@ -1,25 +0,0 @@ -pluginManagement { - def flutterSdkPath = { - def properties = new Properties() - file("local.properties").withInputStream { properties.load(it) } - def flutterSdkPath = properties.getProperty("flutter.sdk") - assert flutterSdkPath != null, "flutter.sdk not set in local.properties" - return flutterSdkPath - }() - - includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") - - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} - -plugins { - id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.1.0" apply false - id "org.jetbrains.kotlin.android" version "1.8.22" apply false -} - -include ":app" diff --git a/brick_breaker/step_07/android/settings.gradle.kts b/brick_breaker/step_07/android/settings.gradle.kts new file mode 100644 index 0000000000..a439442c20 --- /dev/null +++ b/brick_breaker/step_07/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.0" apply false + id("org.jetbrains.kotlin.android") version "1.8.22" apply false +} + +include(":app") diff --git a/brick_breaker/step_07/ios/Podfile b/brick_breaker/step_07/ios/Podfile index d97f17e223..e549ee22f3 100644 --- a/brick_breaker/step_07/ios/Podfile +++ b/brick_breaker/step_07/ios/Podfile @@ -29,7 +29,6 @@ flutter_ios_podfile_setup target 'Runner' do use_frameworks! - use_modular_headers! flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) target 'RunnerTests' do diff --git a/brick_breaker/step_07/ios/Runner.xcodeproj/project.pbxproj b/brick_breaker/step_07/ios/Runner.xcodeproj/project.pbxproj index add9e55410..a1543efc86 100644 --- a/brick_breaker/step_07/ios/Runner.xcodeproj/project.pbxproj +++ b/brick_breaker/step_07/ios/Runner.xcodeproj/project.pbxproj @@ -8,14 +8,14 @@ /* Begin PBXBuildFile section */ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; - 29AD4F65B90DCD21875C2A4C /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C931705C418493DC02E52C6A /* Pods_Runner.framework */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; + 731668CE0733C8A6D3030D66 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D53959E4A5C0448BA84E4476 /* Pods_Runner.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - BB5BED3E580B45F0CD80E554 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B5F63ADA01AF049FFFC5CB39 /* Pods_RunnerTests.framework */; }; + C2A8C02781BE528B5B759C49 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A6B8CF3595E8A39D19DF86BD /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,18 +42,19 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 1109D92F379AA7567325FD73 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; + 2A1A7CE56A03FD7DE84BF271 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 58E4120D718D183216E2F816 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - 71F43AEF029360DE99B40B6F /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 45B06D23A2EFC8599A32C572 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 4CC2809B9EB434B78907439E /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 6E4CD9BBF138CD00B1395359 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 7D4452472D5AF425A635039C /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 87D6F4AFB2A01D1CBC283DBE /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -61,41 +62,31 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - B5F63ADA01AF049FFFC5CB39 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - C931705C418493DC02E52C6A /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - D510FFBF1E5D8C842D1A1042 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - D5D7E82A3FEE48552A1B1A9A /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + A6B8CF3595E8A39D19DF86BD /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + CD683244A747851B5E3BDE9D /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + D53959E4A5C0448BA84E4476 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 97C146EB1CF9000F007C117D /* Frameworks */ = { + 76F635906FE0A22BBD65F778 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 29AD4F65B90DCD21875C2A4C /* Pods_Runner.framework in Frameworks */, + C2A8C02781BE528B5B759C49 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - CF0381FD905E27D8E4FA4E94 /* Frameworks */ = { + 97C146EB1CF9000F007C117D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - BB5BED3E580B45F0CD80E554 /* Pods_RunnerTests.framework in Frameworks */, + 731668CE0733C8A6D3030D66 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 2078C8554440C2F9205D6B5A /* Frameworks */ = { - isa = PBXGroup; - children = ( - C931705C418493DC02E52C6A /* Pods_Runner.framework */, - B5F63ADA01AF049FFFC5CB39 /* Pods_RunnerTests.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; 331C8082294A63A400263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -104,15 +95,15 @@ path = RunnerTests; sourceTree = ""; }; - 56387D4532B1071467568739 /* Pods */ = { + 50A5776E1A511FE3A4E570DF /* Pods */ = { isa = PBXGroup; children = ( - 87D6F4AFB2A01D1CBC283DBE /* Pods-Runner.debug.xcconfig */, - 71F43AEF029360DE99B40B6F /* Pods-Runner.release.xcconfig */, - D510FFBF1E5D8C842D1A1042 /* Pods-Runner.profile.xcconfig */, - 7D4452472D5AF425A635039C /* Pods-RunnerTests.debug.xcconfig */, - 58E4120D718D183216E2F816 /* Pods-RunnerTests.release.xcconfig */, - D5D7E82A3FEE48552A1B1A9A /* Pods-RunnerTests.profile.xcconfig */, + 1109D92F379AA7567325FD73 /* Pods-Runner.debug.xcconfig */, + 2A1A7CE56A03FD7DE84BF271 /* Pods-Runner.release.xcconfig */, + CD683244A747851B5E3BDE9D /* Pods-Runner.profile.xcconfig */, + 4CC2809B9EB434B78907439E /* Pods-RunnerTests.debug.xcconfig */, + 6E4CD9BBF138CD00B1395359 /* Pods-RunnerTests.release.xcconfig */, + 45B06D23A2EFC8599A32C572 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -136,8 +127,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - 56387D4532B1071467568739 /* Pods */, - 2078C8554440C2F9205D6B5A /* Frameworks */, + 50A5776E1A511FE3A4E570DF /* Pods */, + DB8CE5BFDF3881F32F94FB43 /* Frameworks */, ); sourceTree = ""; }; @@ -165,6 +156,15 @@ path = Runner; sourceTree = ""; }; + DB8CE5BFDF3881F32F94FB43 /* Frameworks */ = { + isa = PBXGroup; + children = ( + D53959E4A5C0448BA84E4476 /* Pods_Runner.framework */, + A6B8CF3595E8A39D19DF86BD /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 6B43BA0ED7A59E5F9E7824A9 /* [CP] Check Pods Manifest.lock */, + B3B6826C80ECFD9CE5768CA8 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - CF0381FD905E27D8E4FA4E94 /* Frameworks */, + 76F635906FE0A22BBD65F778 /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - AD7073F8B2A8B9D7C73C1E2B /* [CP] Check Pods Manifest.lock */, + 3303C36477CF41E7A6E7C820 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 16BE037FF21DCFBC30C993A0 /* [CP] Embed Pods Frameworks */, + 3EF9D3E10CA143399518195C /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -270,21 +270,26 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 16BE037FF21DCFBC30C993A0 /* [CP] Embed Pods Frameworks */ = { + 3303C36477CF41E7A6E7C820 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { @@ -303,26 +308,21 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 6B43BA0ED7A59E5F9E7824A9 /* [CP] Check Pods Manifest.lock */ = { + 3EF9D3E10CA143399518195C /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; 9740EEB61CF901F6004384FC /* Run Script */ = { @@ -340,7 +340,7 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - AD7073F8B2A8B9D7C73C1E2B /* [CP] Check Pods Manifest.lock */ = { + B3B6826C80ECFD9CE5768CA8 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -355,7 +355,7 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 7D4452472D5AF425A635039C /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 4CC2809B9EB434B78907439E /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 58E4120D718D183216E2F816 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 6E4CD9BBF138CD00B1395359 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = D5D7E82A3FEE48552A1B1A9A /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 45B06D23A2EFC8599A32C572 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/brick_breaker/step_07/macos/Podfile b/brick_breaker/step_07/macos/Podfile index c795730db8..29c8eb3294 100644 --- a/brick_breaker/step_07/macos/Podfile +++ b/brick_breaker/step_07/macos/Podfile @@ -28,7 +28,6 @@ flutter_macos_podfile_setup target 'Runner' do use_frameworks! - use_modular_headers! flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__)) target 'RunnerTests' do diff --git a/brick_breaker/step_07/macos/Runner.xcodeproj/project.pbxproj b/brick_breaker/step_07/macos/Runner.xcodeproj/project.pbxproj index 8a694eeb67..5870d87d9f 100644 --- a/brick_breaker/step_07/macos/Runner.xcodeproj/project.pbxproj +++ b/brick_breaker/step_07/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ + 1E88EC466838A4046C71ACA4 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 655911A7233000A473A6612F /* Pods_Runner.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 5658E56B62B605B138A9F111 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B7BD0B1970D1897B74F07A89 /* Pods_Runner.framework */; }; - 9F81B80161B2124A9F488A1C /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DA8EE3E1AF83156D1A12CA68 /* Pods_RunnerTests.framework */; }; + FFFF9908871A656CF4E0DB05 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7A95BD85FF91B74BFEAD21F3 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,11 +62,12 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 029007D811D27C62B6B8B6FB /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 1FB4AB4E52BF313C58E4B234 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; }; - 338EE091C1F9F5450098813D /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 33CC10ED2044A3C60003C045 /* brick_breaker.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = brick_breaker.app; sourceTree = BUILT_PRODUCTS_DIR; }; 33CC10F02044A3C60003C045 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 33CC10F22044A3C60003C045 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = Runner/Assets.xcassets; sourceTree = ""; }; @@ -79,15 +80,14 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; + 4243F7F89A402C1D44C0CD4A /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 655911A7233000A473A6612F /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 7A95BD85FF91B74BFEAD21F3 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 8267E521E815EC0C64F08901 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - 9FD3C4B0DFBFF16743BD5FAF /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - B286950BC95C7F770C832B6E /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - B65E8CAEC95BEF8588C418A4 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - B7BD0B1970D1897B74F07A89 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - BCBDA775B0BEE126A464E62B /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - DA8EE3E1AF83156D1A12CA68 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + A4999189D6647736240DAB5D /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + C60C75E8C141A9F4C4D1BA41 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + EC59B169181141F9E0BFB9B0 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 9F81B80161B2124A9F488A1C /* Pods_RunnerTests.framework in Frameworks */, + FFFF9908871A656CF4E0DB05 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,7 +103,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 5658E56B62B605B138A9F111 /* Pods_Runner.framework in Frameworks */, + 1E88EC466838A4046C71ACA4 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -137,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - C14890065505BEA860C9C768 /* Pods */, + A46C58CBD702644809D0C415 /* Pods */, ); sourceTree = ""; }; @@ -185,15 +185,15 @@ path = Runner; sourceTree = ""; }; - C14890065505BEA860C9C768 /* Pods */ = { + A46C58CBD702644809D0C415 /* Pods */ = { isa = PBXGroup; children = ( - 8267E521E815EC0C64F08901 /* Pods-Runner.debug.xcconfig */, - 338EE091C1F9F5450098813D /* Pods-Runner.release.xcconfig */, - B286950BC95C7F770C832B6E /* Pods-Runner.profile.xcconfig */, - B65E8CAEC95BEF8588C418A4 /* Pods-RunnerTests.debug.xcconfig */, - 9FD3C4B0DFBFF16743BD5FAF /* Pods-RunnerTests.release.xcconfig */, - BCBDA775B0BEE126A464E62B /* Pods-RunnerTests.profile.xcconfig */, + 4243F7F89A402C1D44C0CD4A /* Pods-Runner.debug.xcconfig */, + 1FB4AB4E52BF313C58E4B234 /* Pods-Runner.release.xcconfig */, + A4999189D6647736240DAB5D /* Pods-Runner.profile.xcconfig */, + EC59B169181141F9E0BFB9B0 /* Pods-RunnerTests.debug.xcconfig */, + C60C75E8C141A9F4C4D1BA41 /* Pods-RunnerTests.release.xcconfig */, + 029007D811D27C62B6B8B6FB /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -202,8 +202,8 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - B7BD0B1970D1897B74F07A89 /* Pods_Runner.framework */, - DA8EE3E1AF83156D1A12CA68 /* Pods_RunnerTests.framework */, + 655911A7233000A473A6612F /* Pods_Runner.framework */, + 7A95BD85FF91B74BFEAD21F3 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - D9060D80D88FD22DB1DE6C3A /* [CP] Check Pods Manifest.lock */, + A59E86C64983E180D58EBFDA /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - E437887DD480199527592E81 /* [CP] Check Pods Manifest.lock */, + 9C2926C7FA4AA32A98047E80 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 23E4B333ADF5FCEE5E2EE136 /* [CP] Embed Pods Frameworks */, + F2A92AFE0AB9D0B0757B4D6E /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,23 +323,6 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 23E4B333ADF5FCEE5E2EE136 /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -378,7 +361,7 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - D9060D80D88FD22DB1DE6C3A /* [CP] Check Pods Manifest.lock */ = { + 9C2926C7FA4AA32A98047E80 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -393,14 +376,14 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - E437887DD480199527592E81 /* [CP] Check Pods Manifest.lock */ = { + A59E86C64983E180D58EBFDA /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -415,13 +398,30 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; + F2A92AFE0AB9D0B0757B4D6E /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = B65E8CAEC95BEF8588C418A4 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = EC59B169181141F9E0BFB9B0 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 9FD3C4B0DFBFF16743BD5FAF /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = C60C75E8C141A9F4C4D1BA41 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = BCBDA775B0BEE126A464E62B /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 029007D811D27C62B6B8B6FB /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/brick_breaker/step_08/android/app/build.gradle b/brick_breaker/step_08/android/app/build.gradle deleted file mode 100644 index e40a92adc6..0000000000 --- a/brick_breaker/step_08/android/app/build.gradle +++ /dev/null @@ -1,44 +0,0 @@ -plugins { - id "com.android.application" - id "kotlin-android" - // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. - id "dev.flutter.flutter-gradle-plugin" -} - -android { - namespace = "com.example.brick_breaker" - compileSdk = flutter.compileSdkVersion - ndkVersion = flutter.ndkVersion - - compileOptions { - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 - } - - kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8 - } - - defaultConfig { - // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). - applicationId = "com.example.brick_breaker" - // You can update the following values to match your application needs. - // For more information, see: https://flutter.dev/to/review-gradle-config. - minSdk = flutter.minSdkVersion - targetSdk = flutter.targetSdkVersion - versionCode = flutter.versionCode - versionName = flutter.versionName - } - - buildTypes { - release { - // TODO: Add your own signing config for the release build. - // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig = signingConfigs.debug - } - } -} - -flutter { - source = "../.." -} diff --git a/brick_breaker/step_08/android/app/build.gradle.kts b/brick_breaker/step_08/android/app/build.gradle.kts new file mode 100644 index 0000000000..e4258bcf72 --- /dev/null +++ b/brick_breaker/step_08/android/app/build.gradle.kts @@ -0,0 +1,44 @@ +plugins { + id("com.android.application") + id("kotlin-android") + // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. + id("dev.flutter.flutter-gradle-plugin") +} + +android { + namespace = "com.example.brick_breaker" + compileSdk = flutter.compileSdkVersion + ndkVersion = flutter.ndkVersion + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 + } + + kotlinOptions { + jvmTarget = JavaVersion.VERSION_1_8.toString() + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId = "com.example.brick_breaker" + // You can update the following values to match your application needs. + // For more information, see: https://flutter.dev/to/review-gradle-config. + minSdk = flutter.minSdkVersion + targetSdk = flutter.targetSdkVersion + versionCode = flutter.versionCode + versionName = flutter.versionName + } + + buildTypes { + release { + // TODO: Add your own signing config for the release build. + // Signing with the debug keys for now, so `flutter run --release` works. + signingConfig = signingConfigs.getByName("debug") + } + } +} + +flutter { + source = "../.." +} diff --git a/brick_breaker/step_08/android/build.gradle b/brick_breaker/step_08/android/build.gradle deleted file mode 100644 index d2ffbffa4c..0000000000 --- a/brick_breaker/step_08/android/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = "../build" -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(":app") -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/brick_breaker/step_08/android/build.gradle.kts b/brick_breaker/step_08/android/build.gradle.kts new file mode 100644 index 0000000000..89176ef44e --- /dev/null +++ b/brick_breaker/step_08/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/brick_breaker/step_08/android/gradle.properties b/brick_breaker/step_08/android/gradle.properties index 2597170821..f018a61817 100644 --- a/brick_breaker/step_08/android/gradle.properties +++ b/brick_breaker/step_08/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/brick_breaker/step_08/android/gradle/wrapper/gradle-wrapper.properties b/brick_breaker/step_08/android/gradle/wrapper/gradle-wrapper.properties index 7bb2df6ba6..afa1e8eb0a 100644 --- a/brick_breaker/step_08/android/gradle/wrapper/gradle-wrapper.properties +++ b/brick_breaker/step_08/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip diff --git a/brick_breaker/step_08/android/settings.gradle b/brick_breaker/step_08/android/settings.gradle deleted file mode 100644 index b9e43bd376..0000000000 --- a/brick_breaker/step_08/android/settings.gradle +++ /dev/null @@ -1,25 +0,0 @@ -pluginManagement { - def flutterSdkPath = { - def properties = new Properties() - file("local.properties").withInputStream { properties.load(it) } - def flutterSdkPath = properties.getProperty("flutter.sdk") - assert flutterSdkPath != null, "flutter.sdk not set in local.properties" - return flutterSdkPath - }() - - includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") - - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} - -plugins { - id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.1.0" apply false - id "org.jetbrains.kotlin.android" version "1.8.22" apply false -} - -include ":app" diff --git a/brick_breaker/step_08/android/settings.gradle.kts b/brick_breaker/step_08/android/settings.gradle.kts new file mode 100644 index 0000000000..a439442c20 --- /dev/null +++ b/brick_breaker/step_08/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.0" apply false + id("org.jetbrains.kotlin.android") version "1.8.22" apply false +} + +include(":app") diff --git a/brick_breaker/step_08/ios/Podfile b/brick_breaker/step_08/ios/Podfile index d97f17e223..e549ee22f3 100644 --- a/brick_breaker/step_08/ios/Podfile +++ b/brick_breaker/step_08/ios/Podfile @@ -29,7 +29,6 @@ flutter_ios_podfile_setup target 'Runner' do use_frameworks! - use_modular_headers! flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) target 'RunnerTests' do diff --git a/brick_breaker/step_08/ios/Runner.xcodeproj/project.pbxproj b/brick_breaker/step_08/ios/Runner.xcodeproj/project.pbxproj index add9e55410..a1543efc86 100644 --- a/brick_breaker/step_08/ios/Runner.xcodeproj/project.pbxproj +++ b/brick_breaker/step_08/ios/Runner.xcodeproj/project.pbxproj @@ -8,14 +8,14 @@ /* Begin PBXBuildFile section */ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; - 29AD4F65B90DCD21875C2A4C /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C931705C418493DC02E52C6A /* Pods_Runner.framework */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; + 731668CE0733C8A6D3030D66 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D53959E4A5C0448BA84E4476 /* Pods_Runner.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - BB5BED3E580B45F0CD80E554 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B5F63ADA01AF049FFFC5CB39 /* Pods_RunnerTests.framework */; }; + C2A8C02781BE528B5B759C49 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A6B8CF3595E8A39D19DF86BD /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,18 +42,19 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 1109D92F379AA7567325FD73 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; + 2A1A7CE56A03FD7DE84BF271 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 58E4120D718D183216E2F816 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - 71F43AEF029360DE99B40B6F /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 45B06D23A2EFC8599A32C572 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 4CC2809B9EB434B78907439E /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 6E4CD9BBF138CD00B1395359 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 7D4452472D5AF425A635039C /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 87D6F4AFB2A01D1CBC283DBE /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -61,41 +62,31 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - B5F63ADA01AF049FFFC5CB39 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - C931705C418493DC02E52C6A /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - D510FFBF1E5D8C842D1A1042 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - D5D7E82A3FEE48552A1B1A9A /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + A6B8CF3595E8A39D19DF86BD /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + CD683244A747851B5E3BDE9D /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + D53959E4A5C0448BA84E4476 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 97C146EB1CF9000F007C117D /* Frameworks */ = { + 76F635906FE0A22BBD65F778 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 29AD4F65B90DCD21875C2A4C /* Pods_Runner.framework in Frameworks */, + C2A8C02781BE528B5B759C49 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - CF0381FD905E27D8E4FA4E94 /* Frameworks */ = { + 97C146EB1CF9000F007C117D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - BB5BED3E580B45F0CD80E554 /* Pods_RunnerTests.framework in Frameworks */, + 731668CE0733C8A6D3030D66 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 2078C8554440C2F9205D6B5A /* Frameworks */ = { - isa = PBXGroup; - children = ( - C931705C418493DC02E52C6A /* Pods_Runner.framework */, - B5F63ADA01AF049FFFC5CB39 /* Pods_RunnerTests.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; 331C8082294A63A400263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -104,15 +95,15 @@ path = RunnerTests; sourceTree = ""; }; - 56387D4532B1071467568739 /* Pods */ = { + 50A5776E1A511FE3A4E570DF /* Pods */ = { isa = PBXGroup; children = ( - 87D6F4AFB2A01D1CBC283DBE /* Pods-Runner.debug.xcconfig */, - 71F43AEF029360DE99B40B6F /* Pods-Runner.release.xcconfig */, - D510FFBF1E5D8C842D1A1042 /* Pods-Runner.profile.xcconfig */, - 7D4452472D5AF425A635039C /* Pods-RunnerTests.debug.xcconfig */, - 58E4120D718D183216E2F816 /* Pods-RunnerTests.release.xcconfig */, - D5D7E82A3FEE48552A1B1A9A /* Pods-RunnerTests.profile.xcconfig */, + 1109D92F379AA7567325FD73 /* Pods-Runner.debug.xcconfig */, + 2A1A7CE56A03FD7DE84BF271 /* Pods-Runner.release.xcconfig */, + CD683244A747851B5E3BDE9D /* Pods-Runner.profile.xcconfig */, + 4CC2809B9EB434B78907439E /* Pods-RunnerTests.debug.xcconfig */, + 6E4CD9BBF138CD00B1395359 /* Pods-RunnerTests.release.xcconfig */, + 45B06D23A2EFC8599A32C572 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -136,8 +127,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - 56387D4532B1071467568739 /* Pods */, - 2078C8554440C2F9205D6B5A /* Frameworks */, + 50A5776E1A511FE3A4E570DF /* Pods */, + DB8CE5BFDF3881F32F94FB43 /* Frameworks */, ); sourceTree = ""; }; @@ -165,6 +156,15 @@ path = Runner; sourceTree = ""; }; + DB8CE5BFDF3881F32F94FB43 /* Frameworks */ = { + isa = PBXGroup; + children = ( + D53959E4A5C0448BA84E4476 /* Pods_Runner.framework */, + A6B8CF3595E8A39D19DF86BD /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 6B43BA0ED7A59E5F9E7824A9 /* [CP] Check Pods Manifest.lock */, + B3B6826C80ECFD9CE5768CA8 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - CF0381FD905E27D8E4FA4E94 /* Frameworks */, + 76F635906FE0A22BBD65F778 /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - AD7073F8B2A8B9D7C73C1E2B /* [CP] Check Pods Manifest.lock */, + 3303C36477CF41E7A6E7C820 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 16BE037FF21DCFBC30C993A0 /* [CP] Embed Pods Frameworks */, + 3EF9D3E10CA143399518195C /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -270,21 +270,26 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 16BE037FF21DCFBC30C993A0 /* [CP] Embed Pods Frameworks */ = { + 3303C36477CF41E7A6E7C820 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { @@ -303,26 +308,21 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 6B43BA0ED7A59E5F9E7824A9 /* [CP] Check Pods Manifest.lock */ = { + 3EF9D3E10CA143399518195C /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; 9740EEB61CF901F6004384FC /* Run Script */ = { @@ -340,7 +340,7 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - AD7073F8B2A8B9D7C73C1E2B /* [CP] Check Pods Manifest.lock */ = { + B3B6826C80ECFD9CE5768CA8 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -355,7 +355,7 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 7D4452472D5AF425A635039C /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 4CC2809B9EB434B78907439E /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 58E4120D718D183216E2F816 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 6E4CD9BBF138CD00B1395359 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = D5D7E82A3FEE48552A1B1A9A /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 45B06D23A2EFC8599A32C572 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/brick_breaker/step_08/macos/Podfile b/brick_breaker/step_08/macos/Podfile index c795730db8..29c8eb3294 100644 --- a/brick_breaker/step_08/macos/Podfile +++ b/brick_breaker/step_08/macos/Podfile @@ -28,7 +28,6 @@ flutter_macos_podfile_setup target 'Runner' do use_frameworks! - use_modular_headers! flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__)) target 'RunnerTests' do diff --git a/brick_breaker/step_08/macos/Runner.xcodeproj/project.pbxproj b/brick_breaker/step_08/macos/Runner.xcodeproj/project.pbxproj index 8a694eeb67..5870d87d9f 100644 --- a/brick_breaker/step_08/macos/Runner.xcodeproj/project.pbxproj +++ b/brick_breaker/step_08/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ + 1E88EC466838A4046C71ACA4 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 655911A7233000A473A6612F /* Pods_Runner.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 5658E56B62B605B138A9F111 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B7BD0B1970D1897B74F07A89 /* Pods_Runner.framework */; }; - 9F81B80161B2124A9F488A1C /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DA8EE3E1AF83156D1A12CA68 /* Pods_RunnerTests.framework */; }; + FFFF9908871A656CF4E0DB05 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7A95BD85FF91B74BFEAD21F3 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,11 +62,12 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 029007D811D27C62B6B8B6FB /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 1FB4AB4E52BF313C58E4B234 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; }; - 338EE091C1F9F5450098813D /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 33CC10ED2044A3C60003C045 /* brick_breaker.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = brick_breaker.app; sourceTree = BUILT_PRODUCTS_DIR; }; 33CC10F02044A3C60003C045 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 33CC10F22044A3C60003C045 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = Runner/Assets.xcassets; sourceTree = ""; }; @@ -79,15 +80,14 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; + 4243F7F89A402C1D44C0CD4A /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 655911A7233000A473A6612F /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 7A95BD85FF91B74BFEAD21F3 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 8267E521E815EC0C64F08901 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - 9FD3C4B0DFBFF16743BD5FAF /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - B286950BC95C7F770C832B6E /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - B65E8CAEC95BEF8588C418A4 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - B7BD0B1970D1897B74F07A89 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - BCBDA775B0BEE126A464E62B /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - DA8EE3E1AF83156D1A12CA68 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + A4999189D6647736240DAB5D /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + C60C75E8C141A9F4C4D1BA41 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + EC59B169181141F9E0BFB9B0 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 9F81B80161B2124A9F488A1C /* Pods_RunnerTests.framework in Frameworks */, + FFFF9908871A656CF4E0DB05 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,7 +103,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 5658E56B62B605B138A9F111 /* Pods_Runner.framework in Frameworks */, + 1E88EC466838A4046C71ACA4 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -137,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - C14890065505BEA860C9C768 /* Pods */, + A46C58CBD702644809D0C415 /* Pods */, ); sourceTree = ""; }; @@ -185,15 +185,15 @@ path = Runner; sourceTree = ""; }; - C14890065505BEA860C9C768 /* Pods */ = { + A46C58CBD702644809D0C415 /* Pods */ = { isa = PBXGroup; children = ( - 8267E521E815EC0C64F08901 /* Pods-Runner.debug.xcconfig */, - 338EE091C1F9F5450098813D /* Pods-Runner.release.xcconfig */, - B286950BC95C7F770C832B6E /* Pods-Runner.profile.xcconfig */, - B65E8CAEC95BEF8588C418A4 /* Pods-RunnerTests.debug.xcconfig */, - 9FD3C4B0DFBFF16743BD5FAF /* Pods-RunnerTests.release.xcconfig */, - BCBDA775B0BEE126A464E62B /* Pods-RunnerTests.profile.xcconfig */, + 4243F7F89A402C1D44C0CD4A /* Pods-Runner.debug.xcconfig */, + 1FB4AB4E52BF313C58E4B234 /* Pods-Runner.release.xcconfig */, + A4999189D6647736240DAB5D /* Pods-Runner.profile.xcconfig */, + EC59B169181141F9E0BFB9B0 /* Pods-RunnerTests.debug.xcconfig */, + C60C75E8C141A9F4C4D1BA41 /* Pods-RunnerTests.release.xcconfig */, + 029007D811D27C62B6B8B6FB /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -202,8 +202,8 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - B7BD0B1970D1897B74F07A89 /* Pods_Runner.framework */, - DA8EE3E1AF83156D1A12CA68 /* Pods_RunnerTests.framework */, + 655911A7233000A473A6612F /* Pods_Runner.framework */, + 7A95BD85FF91B74BFEAD21F3 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - D9060D80D88FD22DB1DE6C3A /* [CP] Check Pods Manifest.lock */, + A59E86C64983E180D58EBFDA /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - E437887DD480199527592E81 /* [CP] Check Pods Manifest.lock */, + 9C2926C7FA4AA32A98047E80 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 23E4B333ADF5FCEE5E2EE136 /* [CP] Embed Pods Frameworks */, + F2A92AFE0AB9D0B0757B4D6E /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,23 +323,6 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 23E4B333ADF5FCEE5E2EE136 /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -378,7 +361,7 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - D9060D80D88FD22DB1DE6C3A /* [CP] Check Pods Manifest.lock */ = { + 9C2926C7FA4AA32A98047E80 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -393,14 +376,14 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - E437887DD480199527592E81 /* [CP] Check Pods Manifest.lock */ = { + A59E86C64983E180D58EBFDA /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -415,13 +398,30 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; + F2A92AFE0AB9D0B0757B4D6E /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = B65E8CAEC95BEF8588C418A4 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = EC59B169181141F9E0BFB9B0 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 9FD3C4B0DFBFF16743BD5FAF /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = C60C75E8C141A9F4C4D1BA41 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = BCBDA775B0BEE126A464E62B /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 029007D811D27C62B6B8B6FB /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/brick_breaker/step_09/android/app/build.gradle b/brick_breaker/step_09/android/app/build.gradle deleted file mode 100644 index e40a92adc6..0000000000 --- a/brick_breaker/step_09/android/app/build.gradle +++ /dev/null @@ -1,44 +0,0 @@ -plugins { - id "com.android.application" - id "kotlin-android" - // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. - id "dev.flutter.flutter-gradle-plugin" -} - -android { - namespace = "com.example.brick_breaker" - compileSdk = flutter.compileSdkVersion - ndkVersion = flutter.ndkVersion - - compileOptions { - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 - } - - kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8 - } - - defaultConfig { - // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). - applicationId = "com.example.brick_breaker" - // You can update the following values to match your application needs. - // For more information, see: https://flutter.dev/to/review-gradle-config. - minSdk = flutter.minSdkVersion - targetSdk = flutter.targetSdkVersion - versionCode = flutter.versionCode - versionName = flutter.versionName - } - - buildTypes { - release { - // TODO: Add your own signing config for the release build. - // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig = signingConfigs.debug - } - } -} - -flutter { - source = "../.." -} diff --git a/brick_breaker/step_09/android/app/build.gradle.kts b/brick_breaker/step_09/android/app/build.gradle.kts new file mode 100644 index 0000000000..e4258bcf72 --- /dev/null +++ b/brick_breaker/step_09/android/app/build.gradle.kts @@ -0,0 +1,44 @@ +plugins { + id("com.android.application") + id("kotlin-android") + // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. + id("dev.flutter.flutter-gradle-plugin") +} + +android { + namespace = "com.example.brick_breaker" + compileSdk = flutter.compileSdkVersion + ndkVersion = flutter.ndkVersion + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 + } + + kotlinOptions { + jvmTarget = JavaVersion.VERSION_1_8.toString() + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId = "com.example.brick_breaker" + // You can update the following values to match your application needs. + // For more information, see: https://flutter.dev/to/review-gradle-config. + minSdk = flutter.minSdkVersion + targetSdk = flutter.targetSdkVersion + versionCode = flutter.versionCode + versionName = flutter.versionName + } + + buildTypes { + release { + // TODO: Add your own signing config for the release build. + // Signing with the debug keys for now, so `flutter run --release` works. + signingConfig = signingConfigs.getByName("debug") + } + } +} + +flutter { + source = "../.." +} diff --git a/brick_breaker/step_09/android/build.gradle b/brick_breaker/step_09/android/build.gradle deleted file mode 100644 index d2ffbffa4c..0000000000 --- a/brick_breaker/step_09/android/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = "../build" -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(":app") -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/brick_breaker/step_09/android/build.gradle.kts b/brick_breaker/step_09/android/build.gradle.kts new file mode 100644 index 0000000000..89176ef44e --- /dev/null +++ b/brick_breaker/step_09/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/brick_breaker/step_09/android/gradle.properties b/brick_breaker/step_09/android/gradle.properties index 2597170821..f018a61817 100644 --- a/brick_breaker/step_09/android/gradle.properties +++ b/brick_breaker/step_09/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/brick_breaker/step_09/android/gradle/wrapper/gradle-wrapper.properties b/brick_breaker/step_09/android/gradle/wrapper/gradle-wrapper.properties index 7bb2df6ba6..afa1e8eb0a 100644 --- a/brick_breaker/step_09/android/gradle/wrapper/gradle-wrapper.properties +++ b/brick_breaker/step_09/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip diff --git a/brick_breaker/step_09/android/settings.gradle b/brick_breaker/step_09/android/settings.gradle deleted file mode 100644 index b9e43bd376..0000000000 --- a/brick_breaker/step_09/android/settings.gradle +++ /dev/null @@ -1,25 +0,0 @@ -pluginManagement { - def flutterSdkPath = { - def properties = new Properties() - file("local.properties").withInputStream { properties.load(it) } - def flutterSdkPath = properties.getProperty("flutter.sdk") - assert flutterSdkPath != null, "flutter.sdk not set in local.properties" - return flutterSdkPath - }() - - includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") - - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} - -plugins { - id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.1.0" apply false - id "org.jetbrains.kotlin.android" version "1.8.22" apply false -} - -include ":app" diff --git a/brick_breaker/step_09/android/settings.gradle.kts b/brick_breaker/step_09/android/settings.gradle.kts new file mode 100644 index 0000000000..a439442c20 --- /dev/null +++ b/brick_breaker/step_09/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.0" apply false + id("org.jetbrains.kotlin.android") version "1.8.22" apply false +} + +include(":app") diff --git a/brick_breaker/step_09/ios/Podfile b/brick_breaker/step_09/ios/Podfile index d97f17e223..e549ee22f3 100644 --- a/brick_breaker/step_09/ios/Podfile +++ b/brick_breaker/step_09/ios/Podfile @@ -29,7 +29,6 @@ flutter_ios_podfile_setup target 'Runner' do use_frameworks! - use_modular_headers! flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) target 'RunnerTests' do diff --git a/brick_breaker/step_09/ios/Runner.xcodeproj/project.pbxproj b/brick_breaker/step_09/ios/Runner.xcodeproj/project.pbxproj index add9e55410..a1543efc86 100644 --- a/brick_breaker/step_09/ios/Runner.xcodeproj/project.pbxproj +++ b/brick_breaker/step_09/ios/Runner.xcodeproj/project.pbxproj @@ -8,14 +8,14 @@ /* Begin PBXBuildFile section */ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; - 29AD4F65B90DCD21875C2A4C /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C931705C418493DC02E52C6A /* Pods_Runner.framework */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; + 731668CE0733C8A6D3030D66 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D53959E4A5C0448BA84E4476 /* Pods_Runner.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - BB5BED3E580B45F0CD80E554 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B5F63ADA01AF049FFFC5CB39 /* Pods_RunnerTests.framework */; }; + C2A8C02781BE528B5B759C49 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A6B8CF3595E8A39D19DF86BD /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,18 +42,19 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 1109D92F379AA7567325FD73 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; + 2A1A7CE56A03FD7DE84BF271 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 58E4120D718D183216E2F816 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - 71F43AEF029360DE99B40B6F /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 45B06D23A2EFC8599A32C572 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 4CC2809B9EB434B78907439E /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 6E4CD9BBF138CD00B1395359 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 7D4452472D5AF425A635039C /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 87D6F4AFB2A01D1CBC283DBE /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -61,41 +62,31 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - B5F63ADA01AF049FFFC5CB39 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - C931705C418493DC02E52C6A /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - D510FFBF1E5D8C842D1A1042 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - D5D7E82A3FEE48552A1B1A9A /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + A6B8CF3595E8A39D19DF86BD /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + CD683244A747851B5E3BDE9D /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + D53959E4A5C0448BA84E4476 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 97C146EB1CF9000F007C117D /* Frameworks */ = { + 76F635906FE0A22BBD65F778 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 29AD4F65B90DCD21875C2A4C /* Pods_Runner.framework in Frameworks */, + C2A8C02781BE528B5B759C49 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - CF0381FD905E27D8E4FA4E94 /* Frameworks */ = { + 97C146EB1CF9000F007C117D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - BB5BED3E580B45F0CD80E554 /* Pods_RunnerTests.framework in Frameworks */, + 731668CE0733C8A6D3030D66 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 2078C8554440C2F9205D6B5A /* Frameworks */ = { - isa = PBXGroup; - children = ( - C931705C418493DC02E52C6A /* Pods_Runner.framework */, - B5F63ADA01AF049FFFC5CB39 /* Pods_RunnerTests.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; 331C8082294A63A400263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -104,15 +95,15 @@ path = RunnerTests; sourceTree = ""; }; - 56387D4532B1071467568739 /* Pods */ = { + 50A5776E1A511FE3A4E570DF /* Pods */ = { isa = PBXGroup; children = ( - 87D6F4AFB2A01D1CBC283DBE /* Pods-Runner.debug.xcconfig */, - 71F43AEF029360DE99B40B6F /* Pods-Runner.release.xcconfig */, - D510FFBF1E5D8C842D1A1042 /* Pods-Runner.profile.xcconfig */, - 7D4452472D5AF425A635039C /* Pods-RunnerTests.debug.xcconfig */, - 58E4120D718D183216E2F816 /* Pods-RunnerTests.release.xcconfig */, - D5D7E82A3FEE48552A1B1A9A /* Pods-RunnerTests.profile.xcconfig */, + 1109D92F379AA7567325FD73 /* Pods-Runner.debug.xcconfig */, + 2A1A7CE56A03FD7DE84BF271 /* Pods-Runner.release.xcconfig */, + CD683244A747851B5E3BDE9D /* Pods-Runner.profile.xcconfig */, + 4CC2809B9EB434B78907439E /* Pods-RunnerTests.debug.xcconfig */, + 6E4CD9BBF138CD00B1395359 /* Pods-RunnerTests.release.xcconfig */, + 45B06D23A2EFC8599A32C572 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -136,8 +127,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - 56387D4532B1071467568739 /* Pods */, - 2078C8554440C2F9205D6B5A /* Frameworks */, + 50A5776E1A511FE3A4E570DF /* Pods */, + DB8CE5BFDF3881F32F94FB43 /* Frameworks */, ); sourceTree = ""; }; @@ -165,6 +156,15 @@ path = Runner; sourceTree = ""; }; + DB8CE5BFDF3881F32F94FB43 /* Frameworks */ = { + isa = PBXGroup; + children = ( + D53959E4A5C0448BA84E4476 /* Pods_Runner.framework */, + A6B8CF3595E8A39D19DF86BD /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 6B43BA0ED7A59E5F9E7824A9 /* [CP] Check Pods Manifest.lock */, + B3B6826C80ECFD9CE5768CA8 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - CF0381FD905E27D8E4FA4E94 /* Frameworks */, + 76F635906FE0A22BBD65F778 /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - AD7073F8B2A8B9D7C73C1E2B /* [CP] Check Pods Manifest.lock */, + 3303C36477CF41E7A6E7C820 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 16BE037FF21DCFBC30C993A0 /* [CP] Embed Pods Frameworks */, + 3EF9D3E10CA143399518195C /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -270,21 +270,26 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 16BE037FF21DCFBC30C993A0 /* [CP] Embed Pods Frameworks */ = { + 3303C36477CF41E7A6E7C820 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { @@ -303,26 +308,21 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 6B43BA0ED7A59E5F9E7824A9 /* [CP] Check Pods Manifest.lock */ = { + 3EF9D3E10CA143399518195C /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; 9740EEB61CF901F6004384FC /* Run Script */ = { @@ -340,7 +340,7 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - AD7073F8B2A8B9D7C73C1E2B /* [CP] Check Pods Manifest.lock */ = { + B3B6826C80ECFD9CE5768CA8 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -355,7 +355,7 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 7D4452472D5AF425A635039C /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 4CC2809B9EB434B78907439E /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 58E4120D718D183216E2F816 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 6E4CD9BBF138CD00B1395359 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = D5D7E82A3FEE48552A1B1A9A /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 45B06D23A2EFC8599A32C572 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/brick_breaker/step_09/macos/Podfile b/brick_breaker/step_09/macos/Podfile index c795730db8..29c8eb3294 100644 --- a/brick_breaker/step_09/macos/Podfile +++ b/brick_breaker/step_09/macos/Podfile @@ -28,7 +28,6 @@ flutter_macos_podfile_setup target 'Runner' do use_frameworks! - use_modular_headers! flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__)) target 'RunnerTests' do diff --git a/brick_breaker/step_09/macos/Runner.xcodeproj/project.pbxproj b/brick_breaker/step_09/macos/Runner.xcodeproj/project.pbxproj index 8a694eeb67..5870d87d9f 100644 --- a/brick_breaker/step_09/macos/Runner.xcodeproj/project.pbxproj +++ b/brick_breaker/step_09/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ + 1E88EC466838A4046C71ACA4 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 655911A7233000A473A6612F /* Pods_Runner.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 5658E56B62B605B138A9F111 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B7BD0B1970D1897B74F07A89 /* Pods_Runner.framework */; }; - 9F81B80161B2124A9F488A1C /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DA8EE3E1AF83156D1A12CA68 /* Pods_RunnerTests.framework */; }; + FFFF9908871A656CF4E0DB05 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7A95BD85FF91B74BFEAD21F3 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,11 +62,12 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 029007D811D27C62B6B8B6FB /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 1FB4AB4E52BF313C58E4B234 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; }; - 338EE091C1F9F5450098813D /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 33CC10ED2044A3C60003C045 /* brick_breaker.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = brick_breaker.app; sourceTree = BUILT_PRODUCTS_DIR; }; 33CC10F02044A3C60003C045 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 33CC10F22044A3C60003C045 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = Runner/Assets.xcassets; sourceTree = ""; }; @@ -79,15 +80,14 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; + 4243F7F89A402C1D44C0CD4A /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 655911A7233000A473A6612F /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 7A95BD85FF91B74BFEAD21F3 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 8267E521E815EC0C64F08901 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - 9FD3C4B0DFBFF16743BD5FAF /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - B286950BC95C7F770C832B6E /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - B65E8CAEC95BEF8588C418A4 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - B7BD0B1970D1897B74F07A89 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - BCBDA775B0BEE126A464E62B /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - DA8EE3E1AF83156D1A12CA68 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + A4999189D6647736240DAB5D /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + C60C75E8C141A9F4C4D1BA41 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + EC59B169181141F9E0BFB9B0 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 9F81B80161B2124A9F488A1C /* Pods_RunnerTests.framework in Frameworks */, + FFFF9908871A656CF4E0DB05 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,7 +103,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 5658E56B62B605B138A9F111 /* Pods_Runner.framework in Frameworks */, + 1E88EC466838A4046C71ACA4 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -137,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - C14890065505BEA860C9C768 /* Pods */, + A46C58CBD702644809D0C415 /* Pods */, ); sourceTree = ""; }; @@ -185,15 +185,15 @@ path = Runner; sourceTree = ""; }; - C14890065505BEA860C9C768 /* Pods */ = { + A46C58CBD702644809D0C415 /* Pods */ = { isa = PBXGroup; children = ( - 8267E521E815EC0C64F08901 /* Pods-Runner.debug.xcconfig */, - 338EE091C1F9F5450098813D /* Pods-Runner.release.xcconfig */, - B286950BC95C7F770C832B6E /* Pods-Runner.profile.xcconfig */, - B65E8CAEC95BEF8588C418A4 /* Pods-RunnerTests.debug.xcconfig */, - 9FD3C4B0DFBFF16743BD5FAF /* Pods-RunnerTests.release.xcconfig */, - BCBDA775B0BEE126A464E62B /* Pods-RunnerTests.profile.xcconfig */, + 4243F7F89A402C1D44C0CD4A /* Pods-Runner.debug.xcconfig */, + 1FB4AB4E52BF313C58E4B234 /* Pods-Runner.release.xcconfig */, + A4999189D6647736240DAB5D /* Pods-Runner.profile.xcconfig */, + EC59B169181141F9E0BFB9B0 /* Pods-RunnerTests.debug.xcconfig */, + C60C75E8C141A9F4C4D1BA41 /* Pods-RunnerTests.release.xcconfig */, + 029007D811D27C62B6B8B6FB /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -202,8 +202,8 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - B7BD0B1970D1897B74F07A89 /* Pods_Runner.framework */, - DA8EE3E1AF83156D1A12CA68 /* Pods_RunnerTests.framework */, + 655911A7233000A473A6612F /* Pods_Runner.framework */, + 7A95BD85FF91B74BFEAD21F3 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - D9060D80D88FD22DB1DE6C3A /* [CP] Check Pods Manifest.lock */, + A59E86C64983E180D58EBFDA /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - E437887DD480199527592E81 /* [CP] Check Pods Manifest.lock */, + 9C2926C7FA4AA32A98047E80 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 23E4B333ADF5FCEE5E2EE136 /* [CP] Embed Pods Frameworks */, + F2A92AFE0AB9D0B0757B4D6E /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,23 +323,6 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 23E4B333ADF5FCEE5E2EE136 /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -378,7 +361,7 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - D9060D80D88FD22DB1DE6C3A /* [CP] Check Pods Manifest.lock */ = { + 9C2926C7FA4AA32A98047E80 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -393,14 +376,14 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - E437887DD480199527592E81 /* [CP] Check Pods Manifest.lock */ = { + A59E86C64983E180D58EBFDA /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -415,13 +398,30 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; + F2A92AFE0AB9D0B0757B4D6E /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = B65E8CAEC95BEF8588C418A4 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = EC59B169181141F9E0BFB9B0 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 9FD3C4B0DFBFF16743BD5FAF /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = C60C75E8C141A9F4C4D1BA41 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = BCBDA775B0BEE126A464E62B /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 029007D811D27C62B6B8B6FB /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/brick_breaker/step_10/android/app/build.gradle b/brick_breaker/step_10/android/app/build.gradle deleted file mode 100644 index e40a92adc6..0000000000 --- a/brick_breaker/step_10/android/app/build.gradle +++ /dev/null @@ -1,44 +0,0 @@ -plugins { - id "com.android.application" - id "kotlin-android" - // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. - id "dev.flutter.flutter-gradle-plugin" -} - -android { - namespace = "com.example.brick_breaker" - compileSdk = flutter.compileSdkVersion - ndkVersion = flutter.ndkVersion - - compileOptions { - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 - } - - kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8 - } - - defaultConfig { - // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). - applicationId = "com.example.brick_breaker" - // You can update the following values to match your application needs. - // For more information, see: https://flutter.dev/to/review-gradle-config. - minSdk = flutter.minSdkVersion - targetSdk = flutter.targetSdkVersion - versionCode = flutter.versionCode - versionName = flutter.versionName - } - - buildTypes { - release { - // TODO: Add your own signing config for the release build. - // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig = signingConfigs.debug - } - } -} - -flutter { - source = "../.." -} diff --git a/brick_breaker/step_10/android/app/build.gradle.kts b/brick_breaker/step_10/android/app/build.gradle.kts new file mode 100644 index 0000000000..e4258bcf72 --- /dev/null +++ b/brick_breaker/step_10/android/app/build.gradle.kts @@ -0,0 +1,44 @@ +plugins { + id("com.android.application") + id("kotlin-android") + // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. + id("dev.flutter.flutter-gradle-plugin") +} + +android { + namespace = "com.example.brick_breaker" + compileSdk = flutter.compileSdkVersion + ndkVersion = flutter.ndkVersion + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 + } + + kotlinOptions { + jvmTarget = JavaVersion.VERSION_1_8.toString() + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId = "com.example.brick_breaker" + // You can update the following values to match your application needs. + // For more information, see: https://flutter.dev/to/review-gradle-config. + minSdk = flutter.minSdkVersion + targetSdk = flutter.targetSdkVersion + versionCode = flutter.versionCode + versionName = flutter.versionName + } + + buildTypes { + release { + // TODO: Add your own signing config for the release build. + // Signing with the debug keys for now, so `flutter run --release` works. + signingConfig = signingConfigs.getByName("debug") + } + } +} + +flutter { + source = "../.." +} diff --git a/brick_breaker/step_10/android/build.gradle b/brick_breaker/step_10/android/build.gradle deleted file mode 100644 index d2ffbffa4c..0000000000 --- a/brick_breaker/step_10/android/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = "../build" -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(":app") -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/brick_breaker/step_10/android/build.gradle.kts b/brick_breaker/step_10/android/build.gradle.kts new file mode 100644 index 0000000000..89176ef44e --- /dev/null +++ b/brick_breaker/step_10/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/brick_breaker/step_10/android/gradle.properties b/brick_breaker/step_10/android/gradle.properties index 2597170821..f018a61817 100644 --- a/brick_breaker/step_10/android/gradle.properties +++ b/brick_breaker/step_10/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/brick_breaker/step_10/android/gradle/wrapper/gradle-wrapper.properties b/brick_breaker/step_10/android/gradle/wrapper/gradle-wrapper.properties index 7bb2df6ba6..afa1e8eb0a 100644 --- a/brick_breaker/step_10/android/gradle/wrapper/gradle-wrapper.properties +++ b/brick_breaker/step_10/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip diff --git a/brick_breaker/step_10/android/settings.gradle b/brick_breaker/step_10/android/settings.gradle deleted file mode 100644 index b9e43bd376..0000000000 --- a/brick_breaker/step_10/android/settings.gradle +++ /dev/null @@ -1,25 +0,0 @@ -pluginManagement { - def flutterSdkPath = { - def properties = new Properties() - file("local.properties").withInputStream { properties.load(it) } - def flutterSdkPath = properties.getProperty("flutter.sdk") - assert flutterSdkPath != null, "flutter.sdk not set in local.properties" - return flutterSdkPath - }() - - includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") - - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} - -plugins { - id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.1.0" apply false - id "org.jetbrains.kotlin.android" version "1.8.22" apply false -} - -include ":app" diff --git a/brick_breaker/step_10/android/settings.gradle.kts b/brick_breaker/step_10/android/settings.gradle.kts new file mode 100644 index 0000000000..a439442c20 --- /dev/null +++ b/brick_breaker/step_10/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.0" apply false + id("org.jetbrains.kotlin.android") version "1.8.22" apply false +} + +include(":app") diff --git a/brick_breaker/step_10/ios/Podfile b/brick_breaker/step_10/ios/Podfile index d97f17e223..e549ee22f3 100644 --- a/brick_breaker/step_10/ios/Podfile +++ b/brick_breaker/step_10/ios/Podfile @@ -29,7 +29,6 @@ flutter_ios_podfile_setup target 'Runner' do use_frameworks! - use_modular_headers! flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) target 'RunnerTests' do diff --git a/brick_breaker/step_10/ios/Runner.xcodeproj/project.pbxproj b/brick_breaker/step_10/ios/Runner.xcodeproj/project.pbxproj index add9e55410..a1543efc86 100644 --- a/brick_breaker/step_10/ios/Runner.xcodeproj/project.pbxproj +++ b/brick_breaker/step_10/ios/Runner.xcodeproj/project.pbxproj @@ -8,14 +8,14 @@ /* Begin PBXBuildFile section */ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; - 29AD4F65B90DCD21875C2A4C /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C931705C418493DC02E52C6A /* Pods_Runner.framework */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; + 731668CE0733C8A6D3030D66 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D53959E4A5C0448BA84E4476 /* Pods_Runner.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - BB5BED3E580B45F0CD80E554 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B5F63ADA01AF049FFFC5CB39 /* Pods_RunnerTests.framework */; }; + C2A8C02781BE528B5B759C49 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A6B8CF3595E8A39D19DF86BD /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,18 +42,19 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 1109D92F379AA7567325FD73 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; + 2A1A7CE56A03FD7DE84BF271 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 58E4120D718D183216E2F816 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - 71F43AEF029360DE99B40B6F /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 45B06D23A2EFC8599A32C572 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 4CC2809B9EB434B78907439E /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 6E4CD9BBF138CD00B1395359 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 7D4452472D5AF425A635039C /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 87D6F4AFB2A01D1CBC283DBE /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -61,41 +62,31 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - B5F63ADA01AF049FFFC5CB39 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - C931705C418493DC02E52C6A /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - D510FFBF1E5D8C842D1A1042 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - D5D7E82A3FEE48552A1B1A9A /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + A6B8CF3595E8A39D19DF86BD /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + CD683244A747851B5E3BDE9D /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + D53959E4A5C0448BA84E4476 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 97C146EB1CF9000F007C117D /* Frameworks */ = { + 76F635906FE0A22BBD65F778 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 29AD4F65B90DCD21875C2A4C /* Pods_Runner.framework in Frameworks */, + C2A8C02781BE528B5B759C49 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - CF0381FD905E27D8E4FA4E94 /* Frameworks */ = { + 97C146EB1CF9000F007C117D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - BB5BED3E580B45F0CD80E554 /* Pods_RunnerTests.framework in Frameworks */, + 731668CE0733C8A6D3030D66 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 2078C8554440C2F9205D6B5A /* Frameworks */ = { - isa = PBXGroup; - children = ( - C931705C418493DC02E52C6A /* Pods_Runner.framework */, - B5F63ADA01AF049FFFC5CB39 /* Pods_RunnerTests.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; 331C8082294A63A400263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -104,15 +95,15 @@ path = RunnerTests; sourceTree = ""; }; - 56387D4532B1071467568739 /* Pods */ = { + 50A5776E1A511FE3A4E570DF /* Pods */ = { isa = PBXGroup; children = ( - 87D6F4AFB2A01D1CBC283DBE /* Pods-Runner.debug.xcconfig */, - 71F43AEF029360DE99B40B6F /* Pods-Runner.release.xcconfig */, - D510FFBF1E5D8C842D1A1042 /* Pods-Runner.profile.xcconfig */, - 7D4452472D5AF425A635039C /* Pods-RunnerTests.debug.xcconfig */, - 58E4120D718D183216E2F816 /* Pods-RunnerTests.release.xcconfig */, - D5D7E82A3FEE48552A1B1A9A /* Pods-RunnerTests.profile.xcconfig */, + 1109D92F379AA7567325FD73 /* Pods-Runner.debug.xcconfig */, + 2A1A7CE56A03FD7DE84BF271 /* Pods-Runner.release.xcconfig */, + CD683244A747851B5E3BDE9D /* Pods-Runner.profile.xcconfig */, + 4CC2809B9EB434B78907439E /* Pods-RunnerTests.debug.xcconfig */, + 6E4CD9BBF138CD00B1395359 /* Pods-RunnerTests.release.xcconfig */, + 45B06D23A2EFC8599A32C572 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -136,8 +127,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - 56387D4532B1071467568739 /* Pods */, - 2078C8554440C2F9205D6B5A /* Frameworks */, + 50A5776E1A511FE3A4E570DF /* Pods */, + DB8CE5BFDF3881F32F94FB43 /* Frameworks */, ); sourceTree = ""; }; @@ -165,6 +156,15 @@ path = Runner; sourceTree = ""; }; + DB8CE5BFDF3881F32F94FB43 /* Frameworks */ = { + isa = PBXGroup; + children = ( + D53959E4A5C0448BA84E4476 /* Pods_Runner.framework */, + A6B8CF3595E8A39D19DF86BD /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 6B43BA0ED7A59E5F9E7824A9 /* [CP] Check Pods Manifest.lock */, + B3B6826C80ECFD9CE5768CA8 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - CF0381FD905E27D8E4FA4E94 /* Frameworks */, + 76F635906FE0A22BBD65F778 /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - AD7073F8B2A8B9D7C73C1E2B /* [CP] Check Pods Manifest.lock */, + 3303C36477CF41E7A6E7C820 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 16BE037FF21DCFBC30C993A0 /* [CP] Embed Pods Frameworks */, + 3EF9D3E10CA143399518195C /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -270,21 +270,26 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 16BE037FF21DCFBC30C993A0 /* [CP] Embed Pods Frameworks */ = { + 3303C36477CF41E7A6E7C820 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { @@ -303,26 +308,21 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 6B43BA0ED7A59E5F9E7824A9 /* [CP] Check Pods Manifest.lock */ = { + 3EF9D3E10CA143399518195C /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; 9740EEB61CF901F6004384FC /* Run Script */ = { @@ -340,7 +340,7 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - AD7073F8B2A8B9D7C73C1E2B /* [CP] Check Pods Manifest.lock */ = { + B3B6826C80ECFD9CE5768CA8 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -355,7 +355,7 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 7D4452472D5AF425A635039C /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 4CC2809B9EB434B78907439E /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 58E4120D718D183216E2F816 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 6E4CD9BBF138CD00B1395359 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = D5D7E82A3FEE48552A1B1A9A /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 45B06D23A2EFC8599A32C572 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/brick_breaker/step_10/macos/Podfile b/brick_breaker/step_10/macos/Podfile index c795730db8..29c8eb3294 100644 --- a/brick_breaker/step_10/macos/Podfile +++ b/brick_breaker/step_10/macos/Podfile @@ -28,7 +28,6 @@ flutter_macos_podfile_setup target 'Runner' do use_frameworks! - use_modular_headers! flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__)) target 'RunnerTests' do diff --git a/brick_breaker/step_10/macos/Runner.xcodeproj/project.pbxproj b/brick_breaker/step_10/macos/Runner.xcodeproj/project.pbxproj index 8a694eeb67..5870d87d9f 100644 --- a/brick_breaker/step_10/macos/Runner.xcodeproj/project.pbxproj +++ b/brick_breaker/step_10/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ + 1E88EC466838A4046C71ACA4 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 655911A7233000A473A6612F /* Pods_Runner.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 5658E56B62B605B138A9F111 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B7BD0B1970D1897B74F07A89 /* Pods_Runner.framework */; }; - 9F81B80161B2124A9F488A1C /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DA8EE3E1AF83156D1A12CA68 /* Pods_RunnerTests.framework */; }; + FFFF9908871A656CF4E0DB05 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7A95BD85FF91B74BFEAD21F3 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,11 +62,12 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 029007D811D27C62B6B8B6FB /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 1FB4AB4E52BF313C58E4B234 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; }; - 338EE091C1F9F5450098813D /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 33CC10ED2044A3C60003C045 /* brick_breaker.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = brick_breaker.app; sourceTree = BUILT_PRODUCTS_DIR; }; 33CC10F02044A3C60003C045 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 33CC10F22044A3C60003C045 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = Runner/Assets.xcassets; sourceTree = ""; }; @@ -79,15 +80,14 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; + 4243F7F89A402C1D44C0CD4A /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 655911A7233000A473A6612F /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 7A95BD85FF91B74BFEAD21F3 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 8267E521E815EC0C64F08901 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - 9FD3C4B0DFBFF16743BD5FAF /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - B286950BC95C7F770C832B6E /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - B65E8CAEC95BEF8588C418A4 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - B7BD0B1970D1897B74F07A89 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - BCBDA775B0BEE126A464E62B /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - DA8EE3E1AF83156D1A12CA68 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + A4999189D6647736240DAB5D /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + C60C75E8C141A9F4C4D1BA41 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + EC59B169181141F9E0BFB9B0 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 9F81B80161B2124A9F488A1C /* Pods_RunnerTests.framework in Frameworks */, + FFFF9908871A656CF4E0DB05 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,7 +103,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 5658E56B62B605B138A9F111 /* Pods_Runner.framework in Frameworks */, + 1E88EC466838A4046C71ACA4 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -137,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - C14890065505BEA860C9C768 /* Pods */, + A46C58CBD702644809D0C415 /* Pods */, ); sourceTree = ""; }; @@ -185,15 +185,15 @@ path = Runner; sourceTree = ""; }; - C14890065505BEA860C9C768 /* Pods */ = { + A46C58CBD702644809D0C415 /* Pods */ = { isa = PBXGroup; children = ( - 8267E521E815EC0C64F08901 /* Pods-Runner.debug.xcconfig */, - 338EE091C1F9F5450098813D /* Pods-Runner.release.xcconfig */, - B286950BC95C7F770C832B6E /* Pods-Runner.profile.xcconfig */, - B65E8CAEC95BEF8588C418A4 /* Pods-RunnerTests.debug.xcconfig */, - 9FD3C4B0DFBFF16743BD5FAF /* Pods-RunnerTests.release.xcconfig */, - BCBDA775B0BEE126A464E62B /* Pods-RunnerTests.profile.xcconfig */, + 4243F7F89A402C1D44C0CD4A /* Pods-Runner.debug.xcconfig */, + 1FB4AB4E52BF313C58E4B234 /* Pods-Runner.release.xcconfig */, + A4999189D6647736240DAB5D /* Pods-Runner.profile.xcconfig */, + EC59B169181141F9E0BFB9B0 /* Pods-RunnerTests.debug.xcconfig */, + C60C75E8C141A9F4C4D1BA41 /* Pods-RunnerTests.release.xcconfig */, + 029007D811D27C62B6B8B6FB /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -202,8 +202,8 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - B7BD0B1970D1897B74F07A89 /* Pods_Runner.framework */, - DA8EE3E1AF83156D1A12CA68 /* Pods_RunnerTests.framework */, + 655911A7233000A473A6612F /* Pods_Runner.framework */, + 7A95BD85FF91B74BFEAD21F3 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - D9060D80D88FD22DB1DE6C3A /* [CP] Check Pods Manifest.lock */, + A59E86C64983E180D58EBFDA /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - E437887DD480199527592E81 /* [CP] Check Pods Manifest.lock */, + 9C2926C7FA4AA32A98047E80 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 23E4B333ADF5FCEE5E2EE136 /* [CP] Embed Pods Frameworks */, + F2A92AFE0AB9D0B0757B4D6E /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,23 +323,6 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 23E4B333ADF5FCEE5E2EE136 /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -378,7 +361,7 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - D9060D80D88FD22DB1DE6C3A /* [CP] Check Pods Manifest.lock */ = { + 9C2926C7FA4AA32A98047E80 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -393,14 +376,14 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - E437887DD480199527592E81 /* [CP] Check Pods Manifest.lock */ = { + A59E86C64983E180D58EBFDA /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -415,13 +398,30 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; + F2A92AFE0AB9D0B0757B4D6E /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = B65E8CAEC95BEF8588C418A4 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = EC59B169181141F9E0BFB9B0 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 9FD3C4B0DFBFF16743BD5FAF /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = C60C75E8C141A9F4C4D1BA41 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = BCBDA775B0BEE126A464E62B /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 029007D811D27C62B6B8B6FB /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; From 43374484c1481996076e73f54765bf2811b06a6e Mon Sep 17 00:00:00 2001 From: Brett Morgan Date: Fri, 15 Nov 2024 13:57:00 +1100 Subject: [PATCH 069/108] Update `brick_breaker` part 2 --- brick_breaker/codelab_rebuild.yaml | 191 +++++++++++++++-------------- 1 file changed, 101 insertions(+), 90 deletions(-) diff --git a/brick_breaker/codelab_rebuild.yaml b/brick_breaker/codelab_rebuild.yaml index 6915c69e65..c704caebc2 100644 --- a/brick_breaker/codelab_rebuild.yaml +++ b/brick_breaker/codelab_rebuild.yaml @@ -128,31 +128,31 @@ steps: // found in the LICENSE file. import 'dart:async'; - + import 'package:flame/components.dart'; import 'package:flame/game.dart'; - + import 'components/components.dart'; import 'config.dart'; - + class BrickBreaker extends FlameGame { BrickBreaker() - : super( - camera: CameraComponent.withFixedResolution( - width: gameWidth, - height: gameHeight, - ), - ); - + : super( + camera: CameraComponent.withFixedResolution( + width: gameWidth, + height: gameHeight, + ), + ); + double get width => size.x; double get height => size.y; - + @override FutureOr onLoad() async { super.onLoad(); - + camera.viewfinder.anchor = Anchor.topLeft; - + world.add(PlayArea()); } } @@ -183,18 +183,15 @@ steps: // found in the LICENSE file. import 'dart:async'; - + import 'package:flame/components.dart'; import 'package:flutter/material.dart'; - + import '../brick_breaker.dart'; - + class PlayArea extends RectangleComponent with HasGameReference { - PlayArea() - : super( - paint: Paint()..color = const Color(0xfff2e8cf), - ); - + PlayArea() : super(paint: Paint()..color = const Color(0xfff2e8cf)); + @override FutureOr onLoad() async { super.onLoad(); @@ -226,24 +223,30 @@ steps: import 'package:flame/components.dart'; import 'package:flame/game.dart'; @@ -19,6 +20,7 @@ class BrickBreaker extends FlameGame { - ), - ); + ), + ); + final rand = math.Random(); double get width => size.x; double get height => size.y; - @@ -29,5 +31,14 @@ class BrickBreaker extends FlameGame { + @@ -29,5 +31,20 @@ class BrickBreaker extends FlameGame { camera.viewfinder.anchor = Anchor.topLeft; world.add(PlayArea()); + - + world.add(Ball( + + world.add( + + Ball( + radius: ballRadius, + position: size / 2, - + velocity: Vector2((rand.nextDouble() - 0.5) * width, height * 0.2) - + .normalized() - + ..scale(height / 4))); + + velocity: + + Vector2( + + (rand.nextDouble() - 0.5) * width, + + height * 0.2, + + ).normalized() + + ..scale(height / 4), + + ), + + ); + + debugMode = true; } @@ -278,21 +281,23 @@ steps: import 'package:flame/components.dart'; import 'package:flutter/material.dart'; - + class Ball extends CircleComponent { Ball({ required this.velocity, required super.position, required double radius, }) : super( - radius: radius, - anchor: Anchor.center, - paint: Paint() + radius: radius, + anchor: Anchor.center, + paint: + Paint() ..color = const Color(0xff1e6091) - ..style = PaintingStyle.fill); - + ..style = PaintingStyle.fill, + ); + final Vector2 velocity; - + @override void update(double dt) { super.update(dt); @@ -322,8 +327,8 @@ steps: -class BrickBreaker extends FlameGame { +class BrickBreaker extends FlameGame with HasCollisionDetection { BrickBreaker() - : super( - camera: CameraComponent.withFixedResolution( + : super( + camera: CameraComponent.withFixedResolution( - name: Patch lib/src/components/ball.dart path: brick_breaker/lib/src/components/ball.dart patch-u: | @@ -346,24 +351,24 @@ steps: Ball({ required this.velocity, required super.position, - @@ -15,7 +20,8 @@ class Ball extends CircleComponent { - anchor: Anchor.center, - paint: Paint() - ..color = const Color(0xff1e6091) - - ..style = PaintingStyle.fill); - + ..style = PaintingStyle.fill, - + children: [CircleHitbox()]); + @@ -17,6 +22,7 @@ class Ball extends CircleComponent { + Paint() + ..color = const Color(0xff1e6091) + ..style = PaintingStyle.fill, + + children: [CircleHitbox()], + ); final Vector2 velocity; - - @@ -24,4 +30,23 @@ class Ball extends CircleComponent { + @@ -26,4 +32,25 @@ class Ball extends CircleComponent { super.update(dt); position += velocity * dt; } + + @override + void onCollisionStart( - + Set intersectionPoints, PositionComponent other) { + + Set intersectionPoints, + + PositionComponent other, + + ) { + super.onCollisionStart(intersectionPoints, other); + if (other is PlayArea) { + if (intersectionPoints.first.y <= 0) { @@ -385,7 +390,7 @@ steps: patch-u: | --- b/brick_breaker/step_06/lib/src/components/play_area.dart +++ a/brick_breaker/step_06/lib/src/components/play_area.dart - @@ -4,6 +4,7 @@ + @@ -4,13 +4,18 @@ import 'dart:async'; @@ -393,14 +398,18 @@ steps: import 'package:flame/components.dart'; import 'package:flutter/material.dart'; - @@ -13,6 +14,7 @@ class PlayArea extends RectangleComponent with HasGameReference { - PlayArea() - : super( - paint: Paint()..color = const Color(0xfff2e8cf), - + children: [RectangleHitbox()], - ); + import '../brick_breaker.dart'; + + class PlayArea extends RectangleComponent with HasGameReference { + - PlayArea() : super(paint: Paint()..color = const Color(0xfff2e8cf)); + + PlayArea() + + : super( + + paint: Paint()..color = const Color(0xfff2e8cf), + + children: [RectangleHitbox()], + + ); @override + FutureOr onLoad() async { - name: Copy step_06 copydir: from: brick_breaker @@ -433,23 +442,28 @@ steps: +class BrickBreaker extends FlameGame + with HasCollisionDetection, KeyboardEvents { BrickBreaker() - : super( - camera: CameraComponent.withFixedResolution( - @@ -39,6 +43,24 @@ class BrickBreaker extends FlameGame with HasCollisionDetection { - .normalized() - ..scale(height / 4))); + : super( + camera: CameraComponent.withFixedResolution( + @@ -45,6 +49,29 @@ class BrickBreaker extends FlameGame with HasCollisionDetection { + ), + ); - + world.add(Bat( + + world.add( + + Bat( + size: Vector2(batWidth, batHeight), + cornerRadius: const Radius.circular(ballRadius / 2), - + position: Vector2(width / 2, height * 0.95))); + + position: Vector2(width / 2, height * 0.95), + + ), + + ); + debugMode = true; } + + @override + KeyEventResult onKeyEvent( - + KeyEvent event, Set keysPressed) { + + KeyEvent event, + + Set keysPressed, + + ) { + super.onKeyEvent(event, keysPressed); + switch (event.logicalKey) { + case LogicalKeyboardKey.arrowLeft: @@ -489,18 +503,17 @@ steps: import 'play_area.dart'; class Ball extends CircleComponent - @@ -43,8 +45,14 @@ class Ball extends CircleComponent + @@ -47,8 +49,13 @@ class Ball extends CircleComponent } else if (intersectionPoints.first.x >= game.width) { velocity.x = -velocity.x; } else if (intersectionPoints.first.y >= game.height) { - removeFromParent(); - + add(RemoveEffect( - + delay: 0.35, - + )); + + add(RemoveEffect(delay: 0.35)); } + } else if (other is Bat) { + velocity.y = -velocity.y; - + velocity.x = velocity.x + + + velocity.x = + + velocity.x + + (position.x - other.position.x) / other.size.x * game.width * 0.3; } else { debugPrint('collision with $other'); @@ -528,48 +541,46 @@ steps: import 'package:flame/effects.dart'; import 'package:flame/events.dart'; import 'package:flutter/material.dart'; - + import '../brick_breaker.dart'; - + class Bat extends PositionComponent with DragCallbacks, HasGameReference { Bat({ required this.cornerRadius, required super.position, required super.size, - }) : super( - anchor: Anchor.center, - children: [RectangleHitbox()], - ); - + }) : super(anchor: Anchor.center, children: [RectangleHitbox()]); + final Radius cornerRadius; - - final _paint = Paint() - ..color = const Color(0xff1e6091) - ..style = PaintingStyle.fill; - + + final _paint = + Paint() + ..color = const Color(0xff1e6091) + ..style = PaintingStyle.fill; + @override void render(Canvas canvas) { super.render(canvas); canvas.drawRRect( - RRect.fromRectAndRadius( - Offset.zero & size.toSize(), - cornerRadius, - ), - _paint); + RRect.fromRectAndRadius(Offset.zero & size.toSize(), cornerRadius), + _paint, + ); } - + @override void onDragUpdate(DragUpdateEvent event) { super.onDragUpdate(event); position.x = (position.x + event.localDelta.x).clamp(0, game.width); } - + void moveBy(double dx) { - add(MoveToEffect( - Vector2((position.x + dx).clamp(0, game.width), position.y), - EffectController(duration: 0.1), - )); + add( + MoveToEffect( + Vector2((position.x + dx).clamp(0, game.width), position.y), + EffectController(duration: 0.1), + ), + ); } } - name: Copy step_07 From 4c55db4d006cd3f901fa179a3c0edfcec83e6347 Mon Sep 17 00:00:00 2001 From: Brett Morgan Date: Fri, 15 Nov 2024 14:19:55 +1100 Subject: [PATCH 070/108] Update `dart-patterns-and-records`, part 1 --- .../app/{build.gradle => build.gradle.kts} | 10 ++--- .../step_03/android/build.gradle | 18 -------- .../step_03/android/build.gradle.kts | 21 +++++++++ .../step_03/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../step_03/android/settings.gradle | 25 ----------- .../step_03/android/settings.gradle.kts | 25 +++++++++++ .../android/app/build.gradle.kts} | 10 ++--- .../step_04/android/build.gradle | 18 -------- .../step_04/android/build.gradle.kts | 21 +++++++++ .../step_04/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../step_04/android/settings.gradle | 25 ----------- .../step_04/android/settings.gradle.kts | 25 +++++++++++ .../android/app/build.gradle.kts} | 10 ++--- .../step_05/android/build.gradle | 18 -------- .../step_05/android/build.gradle.kts | 21 +++++++++ .../step_05/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../step_05/android/settings.gradle | 25 ----------- .../step_05/android/settings.gradle.kts | 25 +++++++++++ .../android/app/build.gradle.kts} | 10 ++--- .../step_06_a/android/build.gradle | 18 -------- .../step_06_a/android/build.gradle.kts | 21 +++++++++ .../step_06_a/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../step_06_a/android/settings.gradle | 25 ----------- .../step_06_a/android/settings.gradle.kts | 25 +++++++++++ .../step_06_b/android/app/build.gradle | 44 ------------------- .../step_06_b/android/app/build.gradle.kts | 44 +++++++++++++++++++ .../step_06_b/android/build.gradle | 18 -------- .../step_06_b/android/build.gradle.kts | 21 +++++++++ .../step_06_b/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../step_06_b/android/settings.gradle | 25 ----------- .../step_06_b/android/settings.gradle.kts | 25 +++++++++++ .../step_07_a/android/app/build.gradle | 44 ------------------- .../step_07_a/android/app/build.gradle.kts | 44 +++++++++++++++++++ .../step_07_a/android/build.gradle | 18 -------- .../step_07_a/android/build.gradle.kts | 21 +++++++++ .../step_07_a/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../step_07_a/android/settings.gradle | 25 ----------- .../step_07_a/android/settings.gradle.kts | 25 +++++++++++ .../step_07_b/android/app/build.gradle | 44 ------------------- .../step_07_b/android/app/build.gradle.kts | 44 +++++++++++++++++++ .../step_07_b/android/build.gradle | 18 -------- .../step_07_b/android/build.gradle.kts | 21 +++++++++ .../step_07_b/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../step_07_b/android/settings.gradle | 25 ----------- .../step_07_b/android/settings.gradle.kts | 25 +++++++++++ .../step_08/android/app/build.gradle | 44 ------------------- .../step_08/android/app/build.gradle.kts | 44 +++++++++++++++++++ .../step_08/android/build.gradle | 18 -------- .../step_08/android/build.gradle.kts | 21 +++++++++ .../step_08/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../step_08/android/settings.gradle | 25 ----------- .../step_08/android/settings.gradle.kts | 25 +++++++++++ .../step_09/android/app/build.gradle | 44 ------------------- .../step_09/android/app/build.gradle.kts | 44 +++++++++++++++++++ .../step_09/android/build.gradle | 18 -------- .../step_09/android/build.gradle.kts | 21 +++++++++ .../step_09/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../step_09/android/settings.gradle | 25 ----------- .../step_09/android/settings.gradle.kts | 25 +++++++++++ .../step_10/android/app/build.gradle | 44 ------------------- .../step_10/android/app/build.gradle.kts | 44 +++++++++++++++++++ .../step_10/android/build.gradle | 18 -------- .../step_10/android/build.gradle.kts | 21 +++++++++ .../step_10/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../step_10/android/settings.gradle | 25 ----------- .../step_10/android/settings.gradle.kts | 25 +++++++++++ .../step_11_a/android/app/build.gradle | 44 ------------------- .../step_11_a/android/app/build.gradle.kts | 44 +++++++++++++++++++ .../step_11_a/android/build.gradle | 18 -------- .../step_11_a/android/build.gradle.kts | 21 +++++++++ .../step_11_a/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../step_11_a/android/settings.gradle | 25 ----------- .../step_11_a/android/settings.gradle.kts | 25 +++++++++++ .../step_11_b/android/app/build.gradle | 44 ------------------- .../step_11_b/android/app/build.gradle.kts | 44 +++++++++++++++++++ .../step_11_b/android/build.gradle | 18 -------- .../step_11_b/android/build.gradle.kts | 21 +++++++++ .../step_11_b/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../step_11_b/android/settings.gradle | 25 ----------- .../step_11_b/android/settings.gradle.kts | 25 +++++++++++ .../step_12/android/app/build.gradle | 44 ------------------- .../step_12/android/app/build.gradle.kts | 44 +++++++++++++++++++ .../step_12/android/build.gradle | 18 -------- .../step_12/android/build.gradle.kts | 21 +++++++++ .../step_12/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../step_12/android/settings.gradle | 25 ----------- .../step_12/android/settings.gradle.kts | 25 +++++++++++ 100 files changed, 1040 insertions(+), 1001 deletions(-) rename dart-patterns-and-records/step_03/android/app/{build.gradle => build.gradle.kts} (84%) delete mode 100644 dart-patterns-and-records/step_03/android/build.gradle create mode 100644 dart-patterns-and-records/step_03/android/build.gradle.kts delete mode 100644 dart-patterns-and-records/step_03/android/settings.gradle create mode 100644 dart-patterns-and-records/step_03/android/settings.gradle.kts rename dart-patterns-and-records/{step_05/android/app/build.gradle => step_04/android/app/build.gradle.kts} (84%) delete mode 100644 dart-patterns-and-records/step_04/android/build.gradle create mode 100644 dart-patterns-and-records/step_04/android/build.gradle.kts delete mode 100644 dart-patterns-and-records/step_04/android/settings.gradle create mode 100644 dart-patterns-and-records/step_04/android/settings.gradle.kts rename dart-patterns-and-records/{step_06_a/android/app/build.gradle => step_05/android/app/build.gradle.kts} (84%) delete mode 100644 dart-patterns-and-records/step_05/android/build.gradle create mode 100644 dart-patterns-and-records/step_05/android/build.gradle.kts delete mode 100644 dart-patterns-and-records/step_05/android/settings.gradle create mode 100644 dart-patterns-and-records/step_05/android/settings.gradle.kts rename dart-patterns-and-records/{step_04/android/app/build.gradle => step_06_a/android/app/build.gradle.kts} (84%) delete mode 100644 dart-patterns-and-records/step_06_a/android/build.gradle create mode 100644 dart-patterns-and-records/step_06_a/android/build.gradle.kts delete mode 100644 dart-patterns-and-records/step_06_a/android/settings.gradle create mode 100644 dart-patterns-and-records/step_06_a/android/settings.gradle.kts delete mode 100644 dart-patterns-and-records/step_06_b/android/app/build.gradle create mode 100644 dart-patterns-and-records/step_06_b/android/app/build.gradle.kts delete mode 100644 dart-patterns-and-records/step_06_b/android/build.gradle create mode 100644 dart-patterns-and-records/step_06_b/android/build.gradle.kts delete mode 100644 dart-patterns-and-records/step_06_b/android/settings.gradle create mode 100644 dart-patterns-and-records/step_06_b/android/settings.gradle.kts delete mode 100644 dart-patterns-and-records/step_07_a/android/app/build.gradle create mode 100644 dart-patterns-and-records/step_07_a/android/app/build.gradle.kts delete mode 100644 dart-patterns-and-records/step_07_a/android/build.gradle create mode 100644 dart-patterns-and-records/step_07_a/android/build.gradle.kts delete mode 100644 dart-patterns-and-records/step_07_a/android/settings.gradle create mode 100644 dart-patterns-and-records/step_07_a/android/settings.gradle.kts delete mode 100644 dart-patterns-and-records/step_07_b/android/app/build.gradle create mode 100644 dart-patterns-and-records/step_07_b/android/app/build.gradle.kts delete mode 100644 dart-patterns-and-records/step_07_b/android/build.gradle create mode 100644 dart-patterns-and-records/step_07_b/android/build.gradle.kts delete mode 100644 dart-patterns-and-records/step_07_b/android/settings.gradle create mode 100644 dart-patterns-and-records/step_07_b/android/settings.gradle.kts delete mode 100644 dart-patterns-and-records/step_08/android/app/build.gradle create mode 100644 dart-patterns-and-records/step_08/android/app/build.gradle.kts delete mode 100644 dart-patterns-and-records/step_08/android/build.gradle create mode 100644 dart-patterns-and-records/step_08/android/build.gradle.kts delete mode 100644 dart-patterns-and-records/step_08/android/settings.gradle create mode 100644 dart-patterns-and-records/step_08/android/settings.gradle.kts delete mode 100644 dart-patterns-and-records/step_09/android/app/build.gradle create mode 100644 dart-patterns-and-records/step_09/android/app/build.gradle.kts delete mode 100644 dart-patterns-and-records/step_09/android/build.gradle create mode 100644 dart-patterns-and-records/step_09/android/build.gradle.kts delete mode 100644 dart-patterns-and-records/step_09/android/settings.gradle create mode 100644 dart-patterns-and-records/step_09/android/settings.gradle.kts delete mode 100644 dart-patterns-and-records/step_10/android/app/build.gradle create mode 100644 dart-patterns-and-records/step_10/android/app/build.gradle.kts delete mode 100644 dart-patterns-and-records/step_10/android/build.gradle create mode 100644 dart-patterns-and-records/step_10/android/build.gradle.kts delete mode 100644 dart-patterns-and-records/step_10/android/settings.gradle create mode 100644 dart-patterns-and-records/step_10/android/settings.gradle.kts delete mode 100644 dart-patterns-and-records/step_11_a/android/app/build.gradle create mode 100644 dart-patterns-and-records/step_11_a/android/app/build.gradle.kts delete mode 100644 dart-patterns-and-records/step_11_a/android/build.gradle create mode 100644 dart-patterns-and-records/step_11_a/android/build.gradle.kts delete mode 100644 dart-patterns-and-records/step_11_a/android/settings.gradle create mode 100644 dart-patterns-and-records/step_11_a/android/settings.gradle.kts delete mode 100644 dart-patterns-and-records/step_11_b/android/app/build.gradle create mode 100644 dart-patterns-and-records/step_11_b/android/app/build.gradle.kts delete mode 100644 dart-patterns-and-records/step_11_b/android/build.gradle create mode 100644 dart-patterns-and-records/step_11_b/android/build.gradle.kts delete mode 100644 dart-patterns-and-records/step_11_b/android/settings.gradle create mode 100644 dart-patterns-and-records/step_11_b/android/settings.gradle.kts delete mode 100644 dart-patterns-and-records/step_12/android/app/build.gradle create mode 100644 dart-patterns-and-records/step_12/android/app/build.gradle.kts delete mode 100644 dart-patterns-and-records/step_12/android/build.gradle create mode 100644 dart-patterns-and-records/step_12/android/build.gradle.kts delete mode 100644 dart-patterns-and-records/step_12/android/settings.gradle create mode 100644 dart-patterns-and-records/step_12/android/settings.gradle.kts diff --git a/dart-patterns-and-records/step_03/android/app/build.gradle b/dart-patterns-and-records/step_03/android/app/build.gradle.kts similarity index 84% rename from dart-patterns-and-records/step_03/android/app/build.gradle rename to dart-patterns-and-records/step_03/android/app/build.gradle.kts index 49f88182ca..fb516455a9 100644 --- a/dart-patterns-and-records/step_03/android/app/build.gradle +++ b/dart-patterns-and-records/step_03/android/app/build.gradle.kts @@ -1,8 +1,8 @@ plugins { - id "com.android.application" - id "kotlin-android" + id("com.android.application") + id("kotlin-android") // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. - id "dev.flutter.flutter-gradle-plugin" + id("dev.flutter.flutter-gradle-plugin") } android { @@ -16,7 +16,7 @@ android { } kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8 + jvmTarget = JavaVersion.VERSION_1_8.toString() } defaultConfig { @@ -34,7 +34,7 @@ android { release { // TODO: Add your own signing config for the release build. // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig = signingConfigs.debug + signingConfig = signingConfigs.getByName("debug") } } } diff --git a/dart-patterns-and-records/step_03/android/build.gradle b/dart-patterns-and-records/step_03/android/build.gradle deleted file mode 100644 index d2ffbffa4c..0000000000 --- a/dart-patterns-and-records/step_03/android/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = "../build" -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(":app") -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/dart-patterns-and-records/step_03/android/build.gradle.kts b/dart-patterns-and-records/step_03/android/build.gradle.kts new file mode 100644 index 0000000000..89176ef44e --- /dev/null +++ b/dart-patterns-and-records/step_03/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/dart-patterns-and-records/step_03/android/gradle.properties b/dart-patterns-and-records/step_03/android/gradle.properties index 2597170821..f018a61817 100644 --- a/dart-patterns-and-records/step_03/android/gradle.properties +++ b/dart-patterns-and-records/step_03/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/dart-patterns-and-records/step_03/android/gradle/wrapper/gradle-wrapper.properties b/dart-patterns-and-records/step_03/android/gradle/wrapper/gradle-wrapper.properties index 7bb2df6ba6..afa1e8eb0a 100644 --- a/dart-patterns-and-records/step_03/android/gradle/wrapper/gradle-wrapper.properties +++ b/dart-patterns-and-records/step_03/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip diff --git a/dart-patterns-and-records/step_03/android/settings.gradle b/dart-patterns-and-records/step_03/android/settings.gradle deleted file mode 100644 index b9e43bd376..0000000000 --- a/dart-patterns-and-records/step_03/android/settings.gradle +++ /dev/null @@ -1,25 +0,0 @@ -pluginManagement { - def flutterSdkPath = { - def properties = new Properties() - file("local.properties").withInputStream { properties.load(it) } - def flutterSdkPath = properties.getProperty("flutter.sdk") - assert flutterSdkPath != null, "flutter.sdk not set in local.properties" - return flutterSdkPath - }() - - includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") - - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} - -plugins { - id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.1.0" apply false - id "org.jetbrains.kotlin.android" version "1.8.22" apply false -} - -include ":app" diff --git a/dart-patterns-and-records/step_03/android/settings.gradle.kts b/dart-patterns-and-records/step_03/android/settings.gradle.kts new file mode 100644 index 0000000000..a439442c20 --- /dev/null +++ b/dart-patterns-and-records/step_03/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.0" apply false + id("org.jetbrains.kotlin.android") version "1.8.22" apply false +} + +include(":app") diff --git a/dart-patterns-and-records/step_05/android/app/build.gradle b/dart-patterns-and-records/step_04/android/app/build.gradle.kts similarity index 84% rename from dart-patterns-and-records/step_05/android/app/build.gradle rename to dart-patterns-and-records/step_04/android/app/build.gradle.kts index 49f88182ca..fb516455a9 100644 --- a/dart-patterns-and-records/step_05/android/app/build.gradle +++ b/dart-patterns-and-records/step_04/android/app/build.gradle.kts @@ -1,8 +1,8 @@ plugins { - id "com.android.application" - id "kotlin-android" + id("com.android.application") + id("kotlin-android") // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. - id "dev.flutter.flutter-gradle-plugin" + id("dev.flutter.flutter-gradle-plugin") } android { @@ -16,7 +16,7 @@ android { } kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8 + jvmTarget = JavaVersion.VERSION_1_8.toString() } defaultConfig { @@ -34,7 +34,7 @@ android { release { // TODO: Add your own signing config for the release build. // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig = signingConfigs.debug + signingConfig = signingConfigs.getByName("debug") } } } diff --git a/dart-patterns-and-records/step_04/android/build.gradle b/dart-patterns-and-records/step_04/android/build.gradle deleted file mode 100644 index d2ffbffa4c..0000000000 --- a/dart-patterns-and-records/step_04/android/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = "../build" -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(":app") -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/dart-patterns-and-records/step_04/android/build.gradle.kts b/dart-patterns-and-records/step_04/android/build.gradle.kts new file mode 100644 index 0000000000..89176ef44e --- /dev/null +++ b/dart-patterns-and-records/step_04/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/dart-patterns-and-records/step_04/android/gradle.properties b/dart-patterns-and-records/step_04/android/gradle.properties index 2597170821..f018a61817 100644 --- a/dart-patterns-and-records/step_04/android/gradle.properties +++ b/dart-patterns-and-records/step_04/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/dart-patterns-and-records/step_04/android/gradle/wrapper/gradle-wrapper.properties b/dart-patterns-and-records/step_04/android/gradle/wrapper/gradle-wrapper.properties index 7bb2df6ba6..afa1e8eb0a 100644 --- a/dart-patterns-and-records/step_04/android/gradle/wrapper/gradle-wrapper.properties +++ b/dart-patterns-and-records/step_04/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip diff --git a/dart-patterns-and-records/step_04/android/settings.gradle b/dart-patterns-and-records/step_04/android/settings.gradle deleted file mode 100644 index b9e43bd376..0000000000 --- a/dart-patterns-and-records/step_04/android/settings.gradle +++ /dev/null @@ -1,25 +0,0 @@ -pluginManagement { - def flutterSdkPath = { - def properties = new Properties() - file("local.properties").withInputStream { properties.load(it) } - def flutterSdkPath = properties.getProperty("flutter.sdk") - assert flutterSdkPath != null, "flutter.sdk not set in local.properties" - return flutterSdkPath - }() - - includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") - - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} - -plugins { - id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.1.0" apply false - id "org.jetbrains.kotlin.android" version "1.8.22" apply false -} - -include ":app" diff --git a/dart-patterns-and-records/step_04/android/settings.gradle.kts b/dart-patterns-and-records/step_04/android/settings.gradle.kts new file mode 100644 index 0000000000..a439442c20 --- /dev/null +++ b/dart-patterns-and-records/step_04/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.0" apply false + id("org.jetbrains.kotlin.android") version "1.8.22" apply false +} + +include(":app") diff --git a/dart-patterns-and-records/step_06_a/android/app/build.gradle b/dart-patterns-and-records/step_05/android/app/build.gradle.kts similarity index 84% rename from dart-patterns-and-records/step_06_a/android/app/build.gradle rename to dart-patterns-and-records/step_05/android/app/build.gradle.kts index 49f88182ca..fb516455a9 100644 --- a/dart-patterns-and-records/step_06_a/android/app/build.gradle +++ b/dart-patterns-and-records/step_05/android/app/build.gradle.kts @@ -1,8 +1,8 @@ plugins { - id "com.android.application" - id "kotlin-android" + id("com.android.application") + id("kotlin-android") // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. - id "dev.flutter.flutter-gradle-plugin" + id("dev.flutter.flutter-gradle-plugin") } android { @@ -16,7 +16,7 @@ android { } kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8 + jvmTarget = JavaVersion.VERSION_1_8.toString() } defaultConfig { @@ -34,7 +34,7 @@ android { release { // TODO: Add your own signing config for the release build. // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig = signingConfigs.debug + signingConfig = signingConfigs.getByName("debug") } } } diff --git a/dart-patterns-and-records/step_05/android/build.gradle b/dart-patterns-and-records/step_05/android/build.gradle deleted file mode 100644 index d2ffbffa4c..0000000000 --- a/dart-patterns-and-records/step_05/android/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = "../build" -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(":app") -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/dart-patterns-and-records/step_05/android/build.gradle.kts b/dart-patterns-and-records/step_05/android/build.gradle.kts new file mode 100644 index 0000000000..89176ef44e --- /dev/null +++ b/dart-patterns-and-records/step_05/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/dart-patterns-and-records/step_05/android/gradle.properties b/dart-patterns-and-records/step_05/android/gradle.properties index 2597170821..f018a61817 100644 --- a/dart-patterns-and-records/step_05/android/gradle.properties +++ b/dart-patterns-and-records/step_05/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/dart-patterns-and-records/step_05/android/gradle/wrapper/gradle-wrapper.properties b/dart-patterns-and-records/step_05/android/gradle/wrapper/gradle-wrapper.properties index 7bb2df6ba6..afa1e8eb0a 100644 --- a/dart-patterns-and-records/step_05/android/gradle/wrapper/gradle-wrapper.properties +++ b/dart-patterns-and-records/step_05/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip diff --git a/dart-patterns-and-records/step_05/android/settings.gradle b/dart-patterns-and-records/step_05/android/settings.gradle deleted file mode 100644 index b9e43bd376..0000000000 --- a/dart-patterns-and-records/step_05/android/settings.gradle +++ /dev/null @@ -1,25 +0,0 @@ -pluginManagement { - def flutterSdkPath = { - def properties = new Properties() - file("local.properties").withInputStream { properties.load(it) } - def flutterSdkPath = properties.getProperty("flutter.sdk") - assert flutterSdkPath != null, "flutter.sdk not set in local.properties" - return flutterSdkPath - }() - - includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") - - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} - -plugins { - id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.1.0" apply false - id "org.jetbrains.kotlin.android" version "1.8.22" apply false -} - -include ":app" diff --git a/dart-patterns-and-records/step_05/android/settings.gradle.kts b/dart-patterns-and-records/step_05/android/settings.gradle.kts new file mode 100644 index 0000000000..a439442c20 --- /dev/null +++ b/dart-patterns-and-records/step_05/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.0" apply false + id("org.jetbrains.kotlin.android") version "1.8.22" apply false +} + +include(":app") diff --git a/dart-patterns-and-records/step_04/android/app/build.gradle b/dart-patterns-and-records/step_06_a/android/app/build.gradle.kts similarity index 84% rename from dart-patterns-and-records/step_04/android/app/build.gradle rename to dart-patterns-and-records/step_06_a/android/app/build.gradle.kts index 49f88182ca..fb516455a9 100644 --- a/dart-patterns-and-records/step_04/android/app/build.gradle +++ b/dart-patterns-and-records/step_06_a/android/app/build.gradle.kts @@ -1,8 +1,8 @@ plugins { - id "com.android.application" - id "kotlin-android" + id("com.android.application") + id("kotlin-android") // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. - id "dev.flutter.flutter-gradle-plugin" + id("dev.flutter.flutter-gradle-plugin") } android { @@ -16,7 +16,7 @@ android { } kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8 + jvmTarget = JavaVersion.VERSION_1_8.toString() } defaultConfig { @@ -34,7 +34,7 @@ android { release { // TODO: Add your own signing config for the release build. // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig = signingConfigs.debug + signingConfig = signingConfigs.getByName("debug") } } } diff --git a/dart-patterns-and-records/step_06_a/android/build.gradle b/dart-patterns-and-records/step_06_a/android/build.gradle deleted file mode 100644 index d2ffbffa4c..0000000000 --- a/dart-patterns-and-records/step_06_a/android/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = "../build" -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(":app") -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/dart-patterns-and-records/step_06_a/android/build.gradle.kts b/dart-patterns-and-records/step_06_a/android/build.gradle.kts new file mode 100644 index 0000000000..89176ef44e --- /dev/null +++ b/dart-patterns-and-records/step_06_a/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/dart-patterns-and-records/step_06_a/android/gradle.properties b/dart-patterns-and-records/step_06_a/android/gradle.properties index 2597170821..f018a61817 100644 --- a/dart-patterns-and-records/step_06_a/android/gradle.properties +++ b/dart-patterns-and-records/step_06_a/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/dart-patterns-and-records/step_06_a/android/gradle/wrapper/gradle-wrapper.properties b/dart-patterns-and-records/step_06_a/android/gradle/wrapper/gradle-wrapper.properties index 7bb2df6ba6..afa1e8eb0a 100644 --- a/dart-patterns-and-records/step_06_a/android/gradle/wrapper/gradle-wrapper.properties +++ b/dart-patterns-and-records/step_06_a/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip diff --git a/dart-patterns-and-records/step_06_a/android/settings.gradle b/dart-patterns-and-records/step_06_a/android/settings.gradle deleted file mode 100644 index b9e43bd376..0000000000 --- a/dart-patterns-and-records/step_06_a/android/settings.gradle +++ /dev/null @@ -1,25 +0,0 @@ -pluginManagement { - def flutterSdkPath = { - def properties = new Properties() - file("local.properties").withInputStream { properties.load(it) } - def flutterSdkPath = properties.getProperty("flutter.sdk") - assert flutterSdkPath != null, "flutter.sdk not set in local.properties" - return flutterSdkPath - }() - - includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") - - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} - -plugins { - id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.1.0" apply false - id "org.jetbrains.kotlin.android" version "1.8.22" apply false -} - -include ":app" diff --git a/dart-patterns-and-records/step_06_a/android/settings.gradle.kts b/dart-patterns-and-records/step_06_a/android/settings.gradle.kts new file mode 100644 index 0000000000..a439442c20 --- /dev/null +++ b/dart-patterns-and-records/step_06_a/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.0" apply false + id("org.jetbrains.kotlin.android") version "1.8.22" apply false +} + +include(":app") diff --git a/dart-patterns-and-records/step_06_b/android/app/build.gradle b/dart-patterns-and-records/step_06_b/android/app/build.gradle deleted file mode 100644 index 49f88182ca..0000000000 --- a/dart-patterns-and-records/step_06_b/android/app/build.gradle +++ /dev/null @@ -1,44 +0,0 @@ -plugins { - id "com.android.application" - id "kotlin-android" - // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. - id "dev.flutter.flutter-gradle-plugin" -} - -android { - namespace = "com.example.patterns_codelab" - compileSdk = flutter.compileSdkVersion - ndkVersion = flutter.ndkVersion - - compileOptions { - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 - } - - kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8 - } - - defaultConfig { - // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). - applicationId = "com.example.patterns_codelab" - // You can update the following values to match your application needs. - // For more information, see: https://flutter.dev/to/review-gradle-config. - minSdk = flutter.minSdkVersion - targetSdk = flutter.targetSdkVersion - versionCode = flutter.versionCode - versionName = flutter.versionName - } - - buildTypes { - release { - // TODO: Add your own signing config for the release build. - // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig = signingConfigs.debug - } - } -} - -flutter { - source = "../.." -} diff --git a/dart-patterns-and-records/step_06_b/android/app/build.gradle.kts b/dart-patterns-and-records/step_06_b/android/app/build.gradle.kts new file mode 100644 index 0000000000..fb516455a9 --- /dev/null +++ b/dart-patterns-and-records/step_06_b/android/app/build.gradle.kts @@ -0,0 +1,44 @@ +plugins { + id("com.android.application") + id("kotlin-android") + // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. + id("dev.flutter.flutter-gradle-plugin") +} + +android { + namespace = "com.example.patterns_codelab" + compileSdk = flutter.compileSdkVersion + ndkVersion = flutter.ndkVersion + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 + } + + kotlinOptions { + jvmTarget = JavaVersion.VERSION_1_8.toString() + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId = "com.example.patterns_codelab" + // You can update the following values to match your application needs. + // For more information, see: https://flutter.dev/to/review-gradle-config. + minSdk = flutter.minSdkVersion + targetSdk = flutter.targetSdkVersion + versionCode = flutter.versionCode + versionName = flutter.versionName + } + + buildTypes { + release { + // TODO: Add your own signing config for the release build. + // Signing with the debug keys for now, so `flutter run --release` works. + signingConfig = signingConfigs.getByName("debug") + } + } +} + +flutter { + source = "../.." +} diff --git a/dart-patterns-and-records/step_06_b/android/build.gradle b/dart-patterns-and-records/step_06_b/android/build.gradle deleted file mode 100644 index d2ffbffa4c..0000000000 --- a/dart-patterns-and-records/step_06_b/android/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = "../build" -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(":app") -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/dart-patterns-and-records/step_06_b/android/build.gradle.kts b/dart-patterns-and-records/step_06_b/android/build.gradle.kts new file mode 100644 index 0000000000..89176ef44e --- /dev/null +++ b/dart-patterns-and-records/step_06_b/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/dart-patterns-and-records/step_06_b/android/gradle.properties b/dart-patterns-and-records/step_06_b/android/gradle.properties index 2597170821..f018a61817 100644 --- a/dart-patterns-and-records/step_06_b/android/gradle.properties +++ b/dart-patterns-and-records/step_06_b/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/dart-patterns-and-records/step_06_b/android/gradle/wrapper/gradle-wrapper.properties b/dart-patterns-and-records/step_06_b/android/gradle/wrapper/gradle-wrapper.properties index 7bb2df6ba6..afa1e8eb0a 100644 --- a/dart-patterns-and-records/step_06_b/android/gradle/wrapper/gradle-wrapper.properties +++ b/dart-patterns-and-records/step_06_b/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip diff --git a/dart-patterns-and-records/step_06_b/android/settings.gradle b/dart-patterns-and-records/step_06_b/android/settings.gradle deleted file mode 100644 index b9e43bd376..0000000000 --- a/dart-patterns-and-records/step_06_b/android/settings.gradle +++ /dev/null @@ -1,25 +0,0 @@ -pluginManagement { - def flutterSdkPath = { - def properties = new Properties() - file("local.properties").withInputStream { properties.load(it) } - def flutterSdkPath = properties.getProperty("flutter.sdk") - assert flutterSdkPath != null, "flutter.sdk not set in local.properties" - return flutterSdkPath - }() - - includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") - - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} - -plugins { - id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.1.0" apply false - id "org.jetbrains.kotlin.android" version "1.8.22" apply false -} - -include ":app" diff --git a/dart-patterns-and-records/step_06_b/android/settings.gradle.kts b/dart-patterns-and-records/step_06_b/android/settings.gradle.kts new file mode 100644 index 0000000000..a439442c20 --- /dev/null +++ b/dart-patterns-and-records/step_06_b/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.0" apply false + id("org.jetbrains.kotlin.android") version "1.8.22" apply false +} + +include(":app") diff --git a/dart-patterns-and-records/step_07_a/android/app/build.gradle b/dart-patterns-and-records/step_07_a/android/app/build.gradle deleted file mode 100644 index 49f88182ca..0000000000 --- a/dart-patterns-and-records/step_07_a/android/app/build.gradle +++ /dev/null @@ -1,44 +0,0 @@ -plugins { - id "com.android.application" - id "kotlin-android" - // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. - id "dev.flutter.flutter-gradle-plugin" -} - -android { - namespace = "com.example.patterns_codelab" - compileSdk = flutter.compileSdkVersion - ndkVersion = flutter.ndkVersion - - compileOptions { - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 - } - - kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8 - } - - defaultConfig { - // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). - applicationId = "com.example.patterns_codelab" - // You can update the following values to match your application needs. - // For more information, see: https://flutter.dev/to/review-gradle-config. - minSdk = flutter.minSdkVersion - targetSdk = flutter.targetSdkVersion - versionCode = flutter.versionCode - versionName = flutter.versionName - } - - buildTypes { - release { - // TODO: Add your own signing config for the release build. - // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig = signingConfigs.debug - } - } -} - -flutter { - source = "../.." -} diff --git a/dart-patterns-and-records/step_07_a/android/app/build.gradle.kts b/dart-patterns-and-records/step_07_a/android/app/build.gradle.kts new file mode 100644 index 0000000000..fb516455a9 --- /dev/null +++ b/dart-patterns-and-records/step_07_a/android/app/build.gradle.kts @@ -0,0 +1,44 @@ +plugins { + id("com.android.application") + id("kotlin-android") + // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. + id("dev.flutter.flutter-gradle-plugin") +} + +android { + namespace = "com.example.patterns_codelab" + compileSdk = flutter.compileSdkVersion + ndkVersion = flutter.ndkVersion + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 + } + + kotlinOptions { + jvmTarget = JavaVersion.VERSION_1_8.toString() + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId = "com.example.patterns_codelab" + // You can update the following values to match your application needs. + // For more information, see: https://flutter.dev/to/review-gradle-config. + minSdk = flutter.minSdkVersion + targetSdk = flutter.targetSdkVersion + versionCode = flutter.versionCode + versionName = flutter.versionName + } + + buildTypes { + release { + // TODO: Add your own signing config for the release build. + // Signing with the debug keys for now, so `flutter run --release` works. + signingConfig = signingConfigs.getByName("debug") + } + } +} + +flutter { + source = "../.." +} diff --git a/dart-patterns-and-records/step_07_a/android/build.gradle b/dart-patterns-and-records/step_07_a/android/build.gradle deleted file mode 100644 index d2ffbffa4c..0000000000 --- a/dart-patterns-and-records/step_07_a/android/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = "../build" -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(":app") -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/dart-patterns-and-records/step_07_a/android/build.gradle.kts b/dart-patterns-and-records/step_07_a/android/build.gradle.kts new file mode 100644 index 0000000000..89176ef44e --- /dev/null +++ b/dart-patterns-and-records/step_07_a/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/dart-patterns-and-records/step_07_a/android/gradle.properties b/dart-patterns-and-records/step_07_a/android/gradle.properties index 2597170821..f018a61817 100644 --- a/dart-patterns-and-records/step_07_a/android/gradle.properties +++ b/dart-patterns-and-records/step_07_a/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/dart-patterns-and-records/step_07_a/android/gradle/wrapper/gradle-wrapper.properties b/dart-patterns-and-records/step_07_a/android/gradle/wrapper/gradle-wrapper.properties index 7bb2df6ba6..afa1e8eb0a 100644 --- a/dart-patterns-and-records/step_07_a/android/gradle/wrapper/gradle-wrapper.properties +++ b/dart-patterns-and-records/step_07_a/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip diff --git a/dart-patterns-and-records/step_07_a/android/settings.gradle b/dart-patterns-and-records/step_07_a/android/settings.gradle deleted file mode 100644 index b9e43bd376..0000000000 --- a/dart-patterns-and-records/step_07_a/android/settings.gradle +++ /dev/null @@ -1,25 +0,0 @@ -pluginManagement { - def flutterSdkPath = { - def properties = new Properties() - file("local.properties").withInputStream { properties.load(it) } - def flutterSdkPath = properties.getProperty("flutter.sdk") - assert flutterSdkPath != null, "flutter.sdk not set in local.properties" - return flutterSdkPath - }() - - includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") - - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} - -plugins { - id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.1.0" apply false - id "org.jetbrains.kotlin.android" version "1.8.22" apply false -} - -include ":app" diff --git a/dart-patterns-and-records/step_07_a/android/settings.gradle.kts b/dart-patterns-and-records/step_07_a/android/settings.gradle.kts new file mode 100644 index 0000000000..a439442c20 --- /dev/null +++ b/dart-patterns-and-records/step_07_a/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.0" apply false + id("org.jetbrains.kotlin.android") version "1.8.22" apply false +} + +include(":app") diff --git a/dart-patterns-and-records/step_07_b/android/app/build.gradle b/dart-patterns-and-records/step_07_b/android/app/build.gradle deleted file mode 100644 index 49f88182ca..0000000000 --- a/dart-patterns-and-records/step_07_b/android/app/build.gradle +++ /dev/null @@ -1,44 +0,0 @@ -plugins { - id "com.android.application" - id "kotlin-android" - // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. - id "dev.flutter.flutter-gradle-plugin" -} - -android { - namespace = "com.example.patterns_codelab" - compileSdk = flutter.compileSdkVersion - ndkVersion = flutter.ndkVersion - - compileOptions { - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 - } - - kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8 - } - - defaultConfig { - // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). - applicationId = "com.example.patterns_codelab" - // You can update the following values to match your application needs. - // For more information, see: https://flutter.dev/to/review-gradle-config. - minSdk = flutter.minSdkVersion - targetSdk = flutter.targetSdkVersion - versionCode = flutter.versionCode - versionName = flutter.versionName - } - - buildTypes { - release { - // TODO: Add your own signing config for the release build. - // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig = signingConfigs.debug - } - } -} - -flutter { - source = "../.." -} diff --git a/dart-patterns-and-records/step_07_b/android/app/build.gradle.kts b/dart-patterns-and-records/step_07_b/android/app/build.gradle.kts new file mode 100644 index 0000000000..fb516455a9 --- /dev/null +++ b/dart-patterns-and-records/step_07_b/android/app/build.gradle.kts @@ -0,0 +1,44 @@ +plugins { + id("com.android.application") + id("kotlin-android") + // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. + id("dev.flutter.flutter-gradle-plugin") +} + +android { + namespace = "com.example.patterns_codelab" + compileSdk = flutter.compileSdkVersion + ndkVersion = flutter.ndkVersion + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 + } + + kotlinOptions { + jvmTarget = JavaVersion.VERSION_1_8.toString() + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId = "com.example.patterns_codelab" + // You can update the following values to match your application needs. + // For more information, see: https://flutter.dev/to/review-gradle-config. + minSdk = flutter.minSdkVersion + targetSdk = flutter.targetSdkVersion + versionCode = flutter.versionCode + versionName = flutter.versionName + } + + buildTypes { + release { + // TODO: Add your own signing config for the release build. + // Signing with the debug keys for now, so `flutter run --release` works. + signingConfig = signingConfigs.getByName("debug") + } + } +} + +flutter { + source = "../.." +} diff --git a/dart-patterns-and-records/step_07_b/android/build.gradle b/dart-patterns-and-records/step_07_b/android/build.gradle deleted file mode 100644 index d2ffbffa4c..0000000000 --- a/dart-patterns-and-records/step_07_b/android/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = "../build" -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(":app") -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/dart-patterns-and-records/step_07_b/android/build.gradle.kts b/dart-patterns-and-records/step_07_b/android/build.gradle.kts new file mode 100644 index 0000000000..89176ef44e --- /dev/null +++ b/dart-patterns-and-records/step_07_b/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/dart-patterns-and-records/step_07_b/android/gradle.properties b/dart-patterns-and-records/step_07_b/android/gradle.properties index 2597170821..f018a61817 100644 --- a/dart-patterns-and-records/step_07_b/android/gradle.properties +++ b/dart-patterns-and-records/step_07_b/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/dart-patterns-and-records/step_07_b/android/gradle/wrapper/gradle-wrapper.properties b/dart-patterns-and-records/step_07_b/android/gradle/wrapper/gradle-wrapper.properties index 7bb2df6ba6..afa1e8eb0a 100644 --- a/dart-patterns-and-records/step_07_b/android/gradle/wrapper/gradle-wrapper.properties +++ b/dart-patterns-and-records/step_07_b/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip diff --git a/dart-patterns-and-records/step_07_b/android/settings.gradle b/dart-patterns-and-records/step_07_b/android/settings.gradle deleted file mode 100644 index b9e43bd376..0000000000 --- a/dart-patterns-and-records/step_07_b/android/settings.gradle +++ /dev/null @@ -1,25 +0,0 @@ -pluginManagement { - def flutterSdkPath = { - def properties = new Properties() - file("local.properties").withInputStream { properties.load(it) } - def flutterSdkPath = properties.getProperty("flutter.sdk") - assert flutterSdkPath != null, "flutter.sdk not set in local.properties" - return flutterSdkPath - }() - - includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") - - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} - -plugins { - id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.1.0" apply false - id "org.jetbrains.kotlin.android" version "1.8.22" apply false -} - -include ":app" diff --git a/dart-patterns-and-records/step_07_b/android/settings.gradle.kts b/dart-patterns-and-records/step_07_b/android/settings.gradle.kts new file mode 100644 index 0000000000..a439442c20 --- /dev/null +++ b/dart-patterns-and-records/step_07_b/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.0" apply false + id("org.jetbrains.kotlin.android") version "1.8.22" apply false +} + +include(":app") diff --git a/dart-patterns-and-records/step_08/android/app/build.gradle b/dart-patterns-and-records/step_08/android/app/build.gradle deleted file mode 100644 index 49f88182ca..0000000000 --- a/dart-patterns-and-records/step_08/android/app/build.gradle +++ /dev/null @@ -1,44 +0,0 @@ -plugins { - id "com.android.application" - id "kotlin-android" - // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. - id "dev.flutter.flutter-gradle-plugin" -} - -android { - namespace = "com.example.patterns_codelab" - compileSdk = flutter.compileSdkVersion - ndkVersion = flutter.ndkVersion - - compileOptions { - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 - } - - kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8 - } - - defaultConfig { - // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). - applicationId = "com.example.patterns_codelab" - // You can update the following values to match your application needs. - // For more information, see: https://flutter.dev/to/review-gradle-config. - minSdk = flutter.minSdkVersion - targetSdk = flutter.targetSdkVersion - versionCode = flutter.versionCode - versionName = flutter.versionName - } - - buildTypes { - release { - // TODO: Add your own signing config for the release build. - // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig = signingConfigs.debug - } - } -} - -flutter { - source = "../.." -} diff --git a/dart-patterns-and-records/step_08/android/app/build.gradle.kts b/dart-patterns-and-records/step_08/android/app/build.gradle.kts new file mode 100644 index 0000000000..fb516455a9 --- /dev/null +++ b/dart-patterns-and-records/step_08/android/app/build.gradle.kts @@ -0,0 +1,44 @@ +plugins { + id("com.android.application") + id("kotlin-android") + // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. + id("dev.flutter.flutter-gradle-plugin") +} + +android { + namespace = "com.example.patterns_codelab" + compileSdk = flutter.compileSdkVersion + ndkVersion = flutter.ndkVersion + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 + } + + kotlinOptions { + jvmTarget = JavaVersion.VERSION_1_8.toString() + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId = "com.example.patterns_codelab" + // You can update the following values to match your application needs. + // For more information, see: https://flutter.dev/to/review-gradle-config. + minSdk = flutter.minSdkVersion + targetSdk = flutter.targetSdkVersion + versionCode = flutter.versionCode + versionName = flutter.versionName + } + + buildTypes { + release { + // TODO: Add your own signing config for the release build. + // Signing with the debug keys for now, so `flutter run --release` works. + signingConfig = signingConfigs.getByName("debug") + } + } +} + +flutter { + source = "../.." +} diff --git a/dart-patterns-and-records/step_08/android/build.gradle b/dart-patterns-and-records/step_08/android/build.gradle deleted file mode 100644 index d2ffbffa4c..0000000000 --- a/dart-patterns-and-records/step_08/android/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = "../build" -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(":app") -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/dart-patterns-and-records/step_08/android/build.gradle.kts b/dart-patterns-and-records/step_08/android/build.gradle.kts new file mode 100644 index 0000000000..89176ef44e --- /dev/null +++ b/dart-patterns-and-records/step_08/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/dart-patterns-and-records/step_08/android/gradle.properties b/dart-patterns-and-records/step_08/android/gradle.properties index 2597170821..f018a61817 100644 --- a/dart-patterns-and-records/step_08/android/gradle.properties +++ b/dart-patterns-and-records/step_08/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/dart-patterns-and-records/step_08/android/gradle/wrapper/gradle-wrapper.properties b/dart-patterns-and-records/step_08/android/gradle/wrapper/gradle-wrapper.properties index 7bb2df6ba6..afa1e8eb0a 100644 --- a/dart-patterns-and-records/step_08/android/gradle/wrapper/gradle-wrapper.properties +++ b/dart-patterns-and-records/step_08/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip diff --git a/dart-patterns-and-records/step_08/android/settings.gradle b/dart-patterns-and-records/step_08/android/settings.gradle deleted file mode 100644 index b9e43bd376..0000000000 --- a/dart-patterns-and-records/step_08/android/settings.gradle +++ /dev/null @@ -1,25 +0,0 @@ -pluginManagement { - def flutterSdkPath = { - def properties = new Properties() - file("local.properties").withInputStream { properties.load(it) } - def flutterSdkPath = properties.getProperty("flutter.sdk") - assert flutterSdkPath != null, "flutter.sdk not set in local.properties" - return flutterSdkPath - }() - - includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") - - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} - -plugins { - id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.1.0" apply false - id "org.jetbrains.kotlin.android" version "1.8.22" apply false -} - -include ":app" diff --git a/dart-patterns-and-records/step_08/android/settings.gradle.kts b/dart-patterns-and-records/step_08/android/settings.gradle.kts new file mode 100644 index 0000000000..a439442c20 --- /dev/null +++ b/dart-patterns-and-records/step_08/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.0" apply false + id("org.jetbrains.kotlin.android") version "1.8.22" apply false +} + +include(":app") diff --git a/dart-patterns-and-records/step_09/android/app/build.gradle b/dart-patterns-and-records/step_09/android/app/build.gradle deleted file mode 100644 index 49f88182ca..0000000000 --- a/dart-patterns-and-records/step_09/android/app/build.gradle +++ /dev/null @@ -1,44 +0,0 @@ -plugins { - id "com.android.application" - id "kotlin-android" - // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. - id "dev.flutter.flutter-gradle-plugin" -} - -android { - namespace = "com.example.patterns_codelab" - compileSdk = flutter.compileSdkVersion - ndkVersion = flutter.ndkVersion - - compileOptions { - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 - } - - kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8 - } - - defaultConfig { - // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). - applicationId = "com.example.patterns_codelab" - // You can update the following values to match your application needs. - // For more information, see: https://flutter.dev/to/review-gradle-config. - minSdk = flutter.minSdkVersion - targetSdk = flutter.targetSdkVersion - versionCode = flutter.versionCode - versionName = flutter.versionName - } - - buildTypes { - release { - // TODO: Add your own signing config for the release build. - // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig = signingConfigs.debug - } - } -} - -flutter { - source = "../.." -} diff --git a/dart-patterns-and-records/step_09/android/app/build.gradle.kts b/dart-patterns-and-records/step_09/android/app/build.gradle.kts new file mode 100644 index 0000000000..fb516455a9 --- /dev/null +++ b/dart-patterns-and-records/step_09/android/app/build.gradle.kts @@ -0,0 +1,44 @@ +plugins { + id("com.android.application") + id("kotlin-android") + // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. + id("dev.flutter.flutter-gradle-plugin") +} + +android { + namespace = "com.example.patterns_codelab" + compileSdk = flutter.compileSdkVersion + ndkVersion = flutter.ndkVersion + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 + } + + kotlinOptions { + jvmTarget = JavaVersion.VERSION_1_8.toString() + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId = "com.example.patterns_codelab" + // You can update the following values to match your application needs. + // For more information, see: https://flutter.dev/to/review-gradle-config. + minSdk = flutter.minSdkVersion + targetSdk = flutter.targetSdkVersion + versionCode = flutter.versionCode + versionName = flutter.versionName + } + + buildTypes { + release { + // TODO: Add your own signing config for the release build. + // Signing with the debug keys for now, so `flutter run --release` works. + signingConfig = signingConfigs.getByName("debug") + } + } +} + +flutter { + source = "../.." +} diff --git a/dart-patterns-and-records/step_09/android/build.gradle b/dart-patterns-and-records/step_09/android/build.gradle deleted file mode 100644 index d2ffbffa4c..0000000000 --- a/dart-patterns-and-records/step_09/android/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = "../build" -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(":app") -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/dart-patterns-and-records/step_09/android/build.gradle.kts b/dart-patterns-and-records/step_09/android/build.gradle.kts new file mode 100644 index 0000000000..89176ef44e --- /dev/null +++ b/dart-patterns-and-records/step_09/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/dart-patterns-and-records/step_09/android/gradle.properties b/dart-patterns-and-records/step_09/android/gradle.properties index 2597170821..f018a61817 100644 --- a/dart-patterns-and-records/step_09/android/gradle.properties +++ b/dart-patterns-and-records/step_09/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/dart-patterns-and-records/step_09/android/gradle/wrapper/gradle-wrapper.properties b/dart-patterns-and-records/step_09/android/gradle/wrapper/gradle-wrapper.properties index 7bb2df6ba6..afa1e8eb0a 100644 --- a/dart-patterns-and-records/step_09/android/gradle/wrapper/gradle-wrapper.properties +++ b/dart-patterns-and-records/step_09/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip diff --git a/dart-patterns-and-records/step_09/android/settings.gradle b/dart-patterns-and-records/step_09/android/settings.gradle deleted file mode 100644 index b9e43bd376..0000000000 --- a/dart-patterns-and-records/step_09/android/settings.gradle +++ /dev/null @@ -1,25 +0,0 @@ -pluginManagement { - def flutterSdkPath = { - def properties = new Properties() - file("local.properties").withInputStream { properties.load(it) } - def flutterSdkPath = properties.getProperty("flutter.sdk") - assert flutterSdkPath != null, "flutter.sdk not set in local.properties" - return flutterSdkPath - }() - - includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") - - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} - -plugins { - id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.1.0" apply false - id "org.jetbrains.kotlin.android" version "1.8.22" apply false -} - -include ":app" diff --git a/dart-patterns-and-records/step_09/android/settings.gradle.kts b/dart-patterns-and-records/step_09/android/settings.gradle.kts new file mode 100644 index 0000000000..a439442c20 --- /dev/null +++ b/dart-patterns-and-records/step_09/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.0" apply false + id("org.jetbrains.kotlin.android") version "1.8.22" apply false +} + +include(":app") diff --git a/dart-patterns-and-records/step_10/android/app/build.gradle b/dart-patterns-and-records/step_10/android/app/build.gradle deleted file mode 100644 index 49f88182ca..0000000000 --- a/dart-patterns-and-records/step_10/android/app/build.gradle +++ /dev/null @@ -1,44 +0,0 @@ -plugins { - id "com.android.application" - id "kotlin-android" - // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. - id "dev.flutter.flutter-gradle-plugin" -} - -android { - namespace = "com.example.patterns_codelab" - compileSdk = flutter.compileSdkVersion - ndkVersion = flutter.ndkVersion - - compileOptions { - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 - } - - kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8 - } - - defaultConfig { - // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). - applicationId = "com.example.patterns_codelab" - // You can update the following values to match your application needs. - // For more information, see: https://flutter.dev/to/review-gradle-config. - minSdk = flutter.minSdkVersion - targetSdk = flutter.targetSdkVersion - versionCode = flutter.versionCode - versionName = flutter.versionName - } - - buildTypes { - release { - // TODO: Add your own signing config for the release build. - // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig = signingConfigs.debug - } - } -} - -flutter { - source = "../.." -} diff --git a/dart-patterns-and-records/step_10/android/app/build.gradle.kts b/dart-patterns-and-records/step_10/android/app/build.gradle.kts new file mode 100644 index 0000000000..fb516455a9 --- /dev/null +++ b/dart-patterns-and-records/step_10/android/app/build.gradle.kts @@ -0,0 +1,44 @@ +plugins { + id("com.android.application") + id("kotlin-android") + // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. + id("dev.flutter.flutter-gradle-plugin") +} + +android { + namespace = "com.example.patterns_codelab" + compileSdk = flutter.compileSdkVersion + ndkVersion = flutter.ndkVersion + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 + } + + kotlinOptions { + jvmTarget = JavaVersion.VERSION_1_8.toString() + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId = "com.example.patterns_codelab" + // You can update the following values to match your application needs. + // For more information, see: https://flutter.dev/to/review-gradle-config. + minSdk = flutter.minSdkVersion + targetSdk = flutter.targetSdkVersion + versionCode = flutter.versionCode + versionName = flutter.versionName + } + + buildTypes { + release { + // TODO: Add your own signing config for the release build. + // Signing with the debug keys for now, so `flutter run --release` works. + signingConfig = signingConfigs.getByName("debug") + } + } +} + +flutter { + source = "../.." +} diff --git a/dart-patterns-and-records/step_10/android/build.gradle b/dart-patterns-and-records/step_10/android/build.gradle deleted file mode 100644 index d2ffbffa4c..0000000000 --- a/dart-patterns-and-records/step_10/android/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = "../build" -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(":app") -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/dart-patterns-and-records/step_10/android/build.gradle.kts b/dart-patterns-and-records/step_10/android/build.gradle.kts new file mode 100644 index 0000000000..89176ef44e --- /dev/null +++ b/dart-patterns-and-records/step_10/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/dart-patterns-and-records/step_10/android/gradle.properties b/dart-patterns-and-records/step_10/android/gradle.properties index 2597170821..f018a61817 100644 --- a/dart-patterns-and-records/step_10/android/gradle.properties +++ b/dart-patterns-and-records/step_10/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/dart-patterns-and-records/step_10/android/gradle/wrapper/gradle-wrapper.properties b/dart-patterns-and-records/step_10/android/gradle/wrapper/gradle-wrapper.properties index 7bb2df6ba6..afa1e8eb0a 100644 --- a/dart-patterns-and-records/step_10/android/gradle/wrapper/gradle-wrapper.properties +++ b/dart-patterns-and-records/step_10/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip diff --git a/dart-patterns-and-records/step_10/android/settings.gradle b/dart-patterns-and-records/step_10/android/settings.gradle deleted file mode 100644 index b9e43bd376..0000000000 --- a/dart-patterns-and-records/step_10/android/settings.gradle +++ /dev/null @@ -1,25 +0,0 @@ -pluginManagement { - def flutterSdkPath = { - def properties = new Properties() - file("local.properties").withInputStream { properties.load(it) } - def flutterSdkPath = properties.getProperty("flutter.sdk") - assert flutterSdkPath != null, "flutter.sdk not set in local.properties" - return flutterSdkPath - }() - - includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") - - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} - -plugins { - id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.1.0" apply false - id "org.jetbrains.kotlin.android" version "1.8.22" apply false -} - -include ":app" diff --git a/dart-patterns-and-records/step_10/android/settings.gradle.kts b/dart-patterns-and-records/step_10/android/settings.gradle.kts new file mode 100644 index 0000000000..a439442c20 --- /dev/null +++ b/dart-patterns-and-records/step_10/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.0" apply false + id("org.jetbrains.kotlin.android") version "1.8.22" apply false +} + +include(":app") diff --git a/dart-patterns-and-records/step_11_a/android/app/build.gradle b/dart-patterns-and-records/step_11_a/android/app/build.gradle deleted file mode 100644 index 49f88182ca..0000000000 --- a/dart-patterns-and-records/step_11_a/android/app/build.gradle +++ /dev/null @@ -1,44 +0,0 @@ -plugins { - id "com.android.application" - id "kotlin-android" - // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. - id "dev.flutter.flutter-gradle-plugin" -} - -android { - namespace = "com.example.patterns_codelab" - compileSdk = flutter.compileSdkVersion - ndkVersion = flutter.ndkVersion - - compileOptions { - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 - } - - kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8 - } - - defaultConfig { - // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). - applicationId = "com.example.patterns_codelab" - // You can update the following values to match your application needs. - // For more information, see: https://flutter.dev/to/review-gradle-config. - minSdk = flutter.minSdkVersion - targetSdk = flutter.targetSdkVersion - versionCode = flutter.versionCode - versionName = flutter.versionName - } - - buildTypes { - release { - // TODO: Add your own signing config for the release build. - // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig = signingConfigs.debug - } - } -} - -flutter { - source = "../.." -} diff --git a/dart-patterns-and-records/step_11_a/android/app/build.gradle.kts b/dart-patterns-and-records/step_11_a/android/app/build.gradle.kts new file mode 100644 index 0000000000..fb516455a9 --- /dev/null +++ b/dart-patterns-and-records/step_11_a/android/app/build.gradle.kts @@ -0,0 +1,44 @@ +plugins { + id("com.android.application") + id("kotlin-android") + // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. + id("dev.flutter.flutter-gradle-plugin") +} + +android { + namespace = "com.example.patterns_codelab" + compileSdk = flutter.compileSdkVersion + ndkVersion = flutter.ndkVersion + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 + } + + kotlinOptions { + jvmTarget = JavaVersion.VERSION_1_8.toString() + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId = "com.example.patterns_codelab" + // You can update the following values to match your application needs. + // For more information, see: https://flutter.dev/to/review-gradle-config. + minSdk = flutter.minSdkVersion + targetSdk = flutter.targetSdkVersion + versionCode = flutter.versionCode + versionName = flutter.versionName + } + + buildTypes { + release { + // TODO: Add your own signing config for the release build. + // Signing with the debug keys for now, so `flutter run --release` works. + signingConfig = signingConfigs.getByName("debug") + } + } +} + +flutter { + source = "../.." +} diff --git a/dart-patterns-and-records/step_11_a/android/build.gradle b/dart-patterns-and-records/step_11_a/android/build.gradle deleted file mode 100644 index d2ffbffa4c..0000000000 --- a/dart-patterns-and-records/step_11_a/android/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = "../build" -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(":app") -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/dart-patterns-and-records/step_11_a/android/build.gradle.kts b/dart-patterns-and-records/step_11_a/android/build.gradle.kts new file mode 100644 index 0000000000..89176ef44e --- /dev/null +++ b/dart-patterns-and-records/step_11_a/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/dart-patterns-and-records/step_11_a/android/gradle.properties b/dart-patterns-and-records/step_11_a/android/gradle.properties index 2597170821..f018a61817 100644 --- a/dart-patterns-and-records/step_11_a/android/gradle.properties +++ b/dart-patterns-and-records/step_11_a/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/dart-patterns-and-records/step_11_a/android/gradle/wrapper/gradle-wrapper.properties b/dart-patterns-and-records/step_11_a/android/gradle/wrapper/gradle-wrapper.properties index 7bb2df6ba6..afa1e8eb0a 100644 --- a/dart-patterns-and-records/step_11_a/android/gradle/wrapper/gradle-wrapper.properties +++ b/dart-patterns-and-records/step_11_a/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip diff --git a/dart-patterns-and-records/step_11_a/android/settings.gradle b/dart-patterns-and-records/step_11_a/android/settings.gradle deleted file mode 100644 index b9e43bd376..0000000000 --- a/dart-patterns-and-records/step_11_a/android/settings.gradle +++ /dev/null @@ -1,25 +0,0 @@ -pluginManagement { - def flutterSdkPath = { - def properties = new Properties() - file("local.properties").withInputStream { properties.load(it) } - def flutterSdkPath = properties.getProperty("flutter.sdk") - assert flutterSdkPath != null, "flutter.sdk not set in local.properties" - return flutterSdkPath - }() - - includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") - - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} - -plugins { - id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.1.0" apply false - id "org.jetbrains.kotlin.android" version "1.8.22" apply false -} - -include ":app" diff --git a/dart-patterns-and-records/step_11_a/android/settings.gradle.kts b/dart-patterns-and-records/step_11_a/android/settings.gradle.kts new file mode 100644 index 0000000000..a439442c20 --- /dev/null +++ b/dart-patterns-and-records/step_11_a/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.0" apply false + id("org.jetbrains.kotlin.android") version "1.8.22" apply false +} + +include(":app") diff --git a/dart-patterns-and-records/step_11_b/android/app/build.gradle b/dart-patterns-and-records/step_11_b/android/app/build.gradle deleted file mode 100644 index 49f88182ca..0000000000 --- a/dart-patterns-and-records/step_11_b/android/app/build.gradle +++ /dev/null @@ -1,44 +0,0 @@ -plugins { - id "com.android.application" - id "kotlin-android" - // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. - id "dev.flutter.flutter-gradle-plugin" -} - -android { - namespace = "com.example.patterns_codelab" - compileSdk = flutter.compileSdkVersion - ndkVersion = flutter.ndkVersion - - compileOptions { - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 - } - - kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8 - } - - defaultConfig { - // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). - applicationId = "com.example.patterns_codelab" - // You can update the following values to match your application needs. - // For more information, see: https://flutter.dev/to/review-gradle-config. - minSdk = flutter.minSdkVersion - targetSdk = flutter.targetSdkVersion - versionCode = flutter.versionCode - versionName = flutter.versionName - } - - buildTypes { - release { - // TODO: Add your own signing config for the release build. - // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig = signingConfigs.debug - } - } -} - -flutter { - source = "../.." -} diff --git a/dart-patterns-and-records/step_11_b/android/app/build.gradle.kts b/dart-patterns-and-records/step_11_b/android/app/build.gradle.kts new file mode 100644 index 0000000000..fb516455a9 --- /dev/null +++ b/dart-patterns-and-records/step_11_b/android/app/build.gradle.kts @@ -0,0 +1,44 @@ +plugins { + id("com.android.application") + id("kotlin-android") + // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. + id("dev.flutter.flutter-gradle-plugin") +} + +android { + namespace = "com.example.patterns_codelab" + compileSdk = flutter.compileSdkVersion + ndkVersion = flutter.ndkVersion + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 + } + + kotlinOptions { + jvmTarget = JavaVersion.VERSION_1_8.toString() + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId = "com.example.patterns_codelab" + // You can update the following values to match your application needs. + // For more information, see: https://flutter.dev/to/review-gradle-config. + minSdk = flutter.minSdkVersion + targetSdk = flutter.targetSdkVersion + versionCode = flutter.versionCode + versionName = flutter.versionName + } + + buildTypes { + release { + // TODO: Add your own signing config for the release build. + // Signing with the debug keys for now, so `flutter run --release` works. + signingConfig = signingConfigs.getByName("debug") + } + } +} + +flutter { + source = "../.." +} diff --git a/dart-patterns-and-records/step_11_b/android/build.gradle b/dart-patterns-and-records/step_11_b/android/build.gradle deleted file mode 100644 index d2ffbffa4c..0000000000 --- a/dart-patterns-and-records/step_11_b/android/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = "../build" -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(":app") -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/dart-patterns-and-records/step_11_b/android/build.gradle.kts b/dart-patterns-and-records/step_11_b/android/build.gradle.kts new file mode 100644 index 0000000000..89176ef44e --- /dev/null +++ b/dart-patterns-and-records/step_11_b/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/dart-patterns-and-records/step_11_b/android/gradle.properties b/dart-patterns-and-records/step_11_b/android/gradle.properties index 2597170821..f018a61817 100644 --- a/dart-patterns-and-records/step_11_b/android/gradle.properties +++ b/dart-patterns-and-records/step_11_b/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/dart-patterns-and-records/step_11_b/android/gradle/wrapper/gradle-wrapper.properties b/dart-patterns-and-records/step_11_b/android/gradle/wrapper/gradle-wrapper.properties index 7bb2df6ba6..afa1e8eb0a 100644 --- a/dart-patterns-and-records/step_11_b/android/gradle/wrapper/gradle-wrapper.properties +++ b/dart-patterns-and-records/step_11_b/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip diff --git a/dart-patterns-and-records/step_11_b/android/settings.gradle b/dart-patterns-and-records/step_11_b/android/settings.gradle deleted file mode 100644 index b9e43bd376..0000000000 --- a/dart-patterns-and-records/step_11_b/android/settings.gradle +++ /dev/null @@ -1,25 +0,0 @@ -pluginManagement { - def flutterSdkPath = { - def properties = new Properties() - file("local.properties").withInputStream { properties.load(it) } - def flutterSdkPath = properties.getProperty("flutter.sdk") - assert flutterSdkPath != null, "flutter.sdk not set in local.properties" - return flutterSdkPath - }() - - includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") - - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} - -plugins { - id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.1.0" apply false - id "org.jetbrains.kotlin.android" version "1.8.22" apply false -} - -include ":app" diff --git a/dart-patterns-and-records/step_11_b/android/settings.gradle.kts b/dart-patterns-and-records/step_11_b/android/settings.gradle.kts new file mode 100644 index 0000000000..a439442c20 --- /dev/null +++ b/dart-patterns-and-records/step_11_b/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.0" apply false + id("org.jetbrains.kotlin.android") version "1.8.22" apply false +} + +include(":app") diff --git a/dart-patterns-and-records/step_12/android/app/build.gradle b/dart-patterns-and-records/step_12/android/app/build.gradle deleted file mode 100644 index 49f88182ca..0000000000 --- a/dart-patterns-and-records/step_12/android/app/build.gradle +++ /dev/null @@ -1,44 +0,0 @@ -plugins { - id "com.android.application" - id "kotlin-android" - // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. - id "dev.flutter.flutter-gradle-plugin" -} - -android { - namespace = "com.example.patterns_codelab" - compileSdk = flutter.compileSdkVersion - ndkVersion = flutter.ndkVersion - - compileOptions { - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 - } - - kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8 - } - - defaultConfig { - // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). - applicationId = "com.example.patterns_codelab" - // You can update the following values to match your application needs. - // For more information, see: https://flutter.dev/to/review-gradle-config. - minSdk = flutter.minSdkVersion - targetSdk = flutter.targetSdkVersion - versionCode = flutter.versionCode - versionName = flutter.versionName - } - - buildTypes { - release { - // TODO: Add your own signing config for the release build. - // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig = signingConfigs.debug - } - } -} - -flutter { - source = "../.." -} diff --git a/dart-patterns-and-records/step_12/android/app/build.gradle.kts b/dart-patterns-and-records/step_12/android/app/build.gradle.kts new file mode 100644 index 0000000000..fb516455a9 --- /dev/null +++ b/dart-patterns-and-records/step_12/android/app/build.gradle.kts @@ -0,0 +1,44 @@ +plugins { + id("com.android.application") + id("kotlin-android") + // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. + id("dev.flutter.flutter-gradle-plugin") +} + +android { + namespace = "com.example.patterns_codelab" + compileSdk = flutter.compileSdkVersion + ndkVersion = flutter.ndkVersion + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 + } + + kotlinOptions { + jvmTarget = JavaVersion.VERSION_1_8.toString() + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId = "com.example.patterns_codelab" + // You can update the following values to match your application needs. + // For more information, see: https://flutter.dev/to/review-gradle-config. + minSdk = flutter.minSdkVersion + targetSdk = flutter.targetSdkVersion + versionCode = flutter.versionCode + versionName = flutter.versionName + } + + buildTypes { + release { + // TODO: Add your own signing config for the release build. + // Signing with the debug keys for now, so `flutter run --release` works. + signingConfig = signingConfigs.getByName("debug") + } + } +} + +flutter { + source = "../.." +} diff --git a/dart-patterns-and-records/step_12/android/build.gradle b/dart-patterns-and-records/step_12/android/build.gradle deleted file mode 100644 index d2ffbffa4c..0000000000 --- a/dart-patterns-and-records/step_12/android/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = "../build" -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(":app") -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/dart-patterns-and-records/step_12/android/build.gradle.kts b/dart-patterns-and-records/step_12/android/build.gradle.kts new file mode 100644 index 0000000000..89176ef44e --- /dev/null +++ b/dart-patterns-and-records/step_12/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/dart-patterns-and-records/step_12/android/gradle.properties b/dart-patterns-and-records/step_12/android/gradle.properties index 2597170821..f018a61817 100644 --- a/dart-patterns-and-records/step_12/android/gradle.properties +++ b/dart-patterns-and-records/step_12/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/dart-patterns-and-records/step_12/android/gradle/wrapper/gradle-wrapper.properties b/dart-patterns-and-records/step_12/android/gradle/wrapper/gradle-wrapper.properties index 7bb2df6ba6..afa1e8eb0a 100644 --- a/dart-patterns-and-records/step_12/android/gradle/wrapper/gradle-wrapper.properties +++ b/dart-patterns-and-records/step_12/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip diff --git a/dart-patterns-and-records/step_12/android/settings.gradle b/dart-patterns-and-records/step_12/android/settings.gradle deleted file mode 100644 index b9e43bd376..0000000000 --- a/dart-patterns-and-records/step_12/android/settings.gradle +++ /dev/null @@ -1,25 +0,0 @@ -pluginManagement { - def flutterSdkPath = { - def properties = new Properties() - file("local.properties").withInputStream { properties.load(it) } - def flutterSdkPath = properties.getProperty("flutter.sdk") - assert flutterSdkPath != null, "flutter.sdk not set in local.properties" - return flutterSdkPath - }() - - includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") - - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} - -plugins { - id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.1.0" apply false - id "org.jetbrains.kotlin.android" version "1.8.22" apply false -} - -include ":app" diff --git a/dart-patterns-and-records/step_12/android/settings.gradle.kts b/dart-patterns-and-records/step_12/android/settings.gradle.kts new file mode 100644 index 0000000000..a439442c20 --- /dev/null +++ b/dart-patterns-and-records/step_12/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.0" apply false + id("org.jetbrains.kotlin.android") version "1.8.22" apply false +} + +include(":app") From b8a38319d2d8c683ee8866ee34ef52d2026cb72d Mon Sep 17 00:00:00 2001 From: Brett Morgan Date: Fri, 15 Nov 2024 16:15:44 +1100 Subject: [PATCH 071/108] Update `dart-patterns-and-records`, part 2 --- .../codelab_rebuild.yaml | 223 +++++++----------- .../step_03/pubspec.yaml | 2 +- .../step_04/pubspec.yaml | 2 +- .../step_05/pubspec.yaml | 2 +- .../step_06_a/pubspec.yaml | 2 +- .../step_06_b/pubspec.yaml | 2 +- .../step_07_a/pubspec.yaml | 2 +- .../step_07_b/pubspec.yaml | 2 +- .../step_08/pubspec.yaml | 2 +- .../step_09/pubspec.yaml | 2 +- .../step_10/pubspec.yaml | 2 +- .../step_11_a/pubspec.yaml | 2 +- .../step_11_b/pubspec.yaml | 2 +- .../step_12/pubspec.yaml | 2 +- 14 files changed, 96 insertions(+), 153 deletions(-) diff --git a/dart-patterns-and-records/codelab_rebuild.yaml b/dart-patterns-and-records/codelab_rebuild.yaml index c3cc497461..5ba6721c82 100644 --- a/dart-patterns-and-records/codelab_rebuild.yaml +++ b/dart-patterns-and-records/codelab_rebuild.yaml @@ -44,6 +44,9 @@ steps: } ] } + - name: Format lib/main.dart + path: patterns_codelab + dart: format lib/main.dart - name: Patch lib/main.dart path: patterns_codelab/lib/main.dart patch-u: | @@ -57,28 +60,6 @@ steps: import 'package:flutter/material.dart'; void main() { - - name: Replace pubspec.yaml - path: patterns_codelab/pubspec.yaml - replace-contents: | - name: patterns_codelab - description: "A new Flutter project." - publish_to: 'none' - version: 0.1.0 - - environment: - sdk: ^3.7.0-0 - - dependencies: - flutter: - sdk: flutter - - dev_dependencies: - flutter_test: - sdk: flutter - flutter_lints: ^4.0.0 - - flutter: - uses-material-design: true - name: Build web app path: patterns_codelab flutter: build web @@ -136,50 +117,37 @@ steps: // Copyright 2023 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. - + import 'package:flutter/material.dart'; - + import 'data.dart'; - + void main() { runApp(const DocumentApp()); } - + class DocumentApp extends StatelessWidget { const DocumentApp({super.key}); - + @override Widget build(BuildContext context) { return MaterialApp( theme: ThemeData(useMaterial3: true), - home: DocumentScreen( - document: Document(), - ), + home: DocumentScreen(document: Document()), ); } } - + class DocumentScreen extends StatelessWidget { final Document document; - - const DocumentScreen({ - required this.document, - super.key, - }); - + + const DocumentScreen({required this.document, super.key}); + @override Widget build(BuildContext context) { return Scaffold( - appBar: AppBar( - title: const Text('Title goes here'), - ), - body: const Column( - children: [ - Center( - child: Text('Body goes here'), - ), - ], - ), + appBar: AppBar(title: const Text('Title goes here')), + body: const Column(children: [Center(child: Text('Body goes here'))]), ); } } @@ -221,28 +189,24 @@ steps: patch-u: | --- b/dart-patterns-and-records/step_05/lib/main.dart +++ a/dart-patterns-and-records/step_05/lib/main.dart - @@ -34,14 +34,18 @@ class DocumentScreen extends StatelessWidget { + @@ -29,9 +29,15 @@ class DocumentScreen extends StatelessWidget { @override Widget build(BuildContext context) { + final metadataRecord = document.metadata; + return Scaffold( - appBar: AppBar( - - title: const Text('Title goes here'), - + title: Text(metadataRecord.$1), - ), - - body: const Column( + - appBar: AppBar(title: const Text('Title goes here')), + - body: const Column(children: [Center(child: Text('Body goes here'))]), + + appBar: AppBar(title: Text(metadataRecord.$1)), + body: Column( - children: [ - Center( - - child: Text('Body goes here'), - + child: Text( - + 'Last modified ${metadataRecord.modified}', - + ), - ), - ], - ), + + children: [ + + Center(child: Text('Last modified ${metadataRecord.modified}')), + + ], + + ), + ); + } + } - name: Build web app path: patterns_codelab flutter: build web @@ -262,7 +226,7 @@ steps: patch-u: | --- b/dart-patterns-and-records/step_06_a/lib/main.dart +++ a/dart-patterns-and-records/step_06_a/lib/main.dart - @@ -34,17 +34,17 @@ class DocumentScreen extends StatelessWidget { + @@ -29,15 +29,11 @@ class DocumentScreen extends StatelessWidget { @override Widget build(BuildContext context) { @@ -270,19 +234,17 @@ steps: + final (title, modified: modified) = document.metadata; return Scaffold( - appBar: AppBar( - - title: Text(metadataRecord.$1), - + title: Text(title), - ), - body: Column( - children: [ - Center( - child: Text( - - 'Last modified ${metadataRecord.modified}', - + 'Last modified $modified', - ), - ), - ], + - appBar: AppBar(title: Text(metadataRecord.$1)), + - body: Column( + - children: [ + - Center(child: Text('Last modified ${metadataRecord.modified}')), + - ], + - ), + + appBar: AppBar(title: Text(title)), + + body: Column(children: [Center(child: Text('Last modified $modified'))]), + ); + } + } - name: Build web app path: patterns_codelab flutter: build web @@ -302,7 +264,7 @@ steps: patch-u: | --- b/dart-patterns-and-records/step_06_b/lib/main.dart +++ a/dart-patterns-and-records/step_06_b/lib/main.dart - @@ -34,7 +34,7 @@ class DocumentScreen extends StatelessWidget { + @@ -29,7 +29,7 @@ class DocumentScreen extends StatelessWidget { @override Widget build(BuildContext context) { @@ -310,7 +272,7 @@ steps: + final (title, :modified) = document.metadata; return Scaffold( - appBar: AppBar( + appBar: AppBar(title: Text(title)), - name: Build web app path: patterns_codelab flutter: build web @@ -330,7 +292,7 @@ steps: patch-u: | --- b/dart-patterns-and-records/step_07_a/lib/data.dart +++ a/dart-patterns-and-records/step_07_a/lib/data.dart - @@ -9,10 +9,16 @@ class Document { + @@ -9,10 +9,17 @@ class Document { Document() : _json = jsonDecode(documentJson); (String, {DateTime modified}) get metadata { @@ -342,8 +304,9 @@ steps: + final metadataJson = _json['metadata']; + if (metadataJson is Map) { + final title = metadataJson['title'] as String; - + final localModified = - + DateTime.parse(metadataJson['modified'] as String); + + final localModified = DateTime.parse( + + metadataJson['modified'] as String, + + ); + return (title, modified: localModified); + } + } @@ -369,7 +332,7 @@ steps: patch-u: | --- b/dart-patterns-and-records/step_07_b/lib/data.dart +++ a/dart-patterns-and-records/step_07_b/lib/data.dart - @@ -9,16 +9,17 @@ class Document { + @@ -9,17 +9,13 @@ class Document { Document() : _json = jsonDecode(documentJson); (String, {DateTime modified}) get metadata { @@ -377,17 +340,14 @@ steps: - final metadataJson = _json['metadata']; - if (metadataJson is Map) { - final title = metadataJson['title'] as String; - - final localModified = - - DateTime.parse(metadataJson['modified'] as String); + - final localModified = DateTime.parse( + - metadataJson['modified'] as String, + - ); - return (title, modified: localModified); - } - + if (_json - + case { - + 'metadata': { - + 'title': String title, - + 'modified': String localModified, - + } - + }) { + + if (_json case { + + 'metadata': {'title': String title, 'modified': String localModified}, + + }) { + return (title, modified: DateTime.parse(localModified)); + } else { + throw const FormatException('Unexpected JSON'); @@ -414,7 +374,7 @@ steps: patch-u: | --- b/dart-patterns-and-records/step_08/lib/data.dart +++ a/dart-patterns-and-records/step_08/lib/data.dart - @@ -21,6 +21,14 @@ class Document { + @@ -17,6 +17,14 @@ class Document { throw const FormatException('Unexpected JSON'); } } @@ -429,7 +389,7 @@ steps: } const documentJson = ''' - @@ -46,3 +56,17 @@ const documentJson = ''' + @@ -42,3 +50,17 @@ const documentJson = ''' ] } '''; @@ -466,21 +426,17 @@ steps: patch-u: | --- b/dart-patterns-and-records/step_09/lib/main.dart +++ a/dart-patterns-and-records/step_09/lib/main.dart - @@ -35,6 +35,7 @@ class DocumentScreen extends StatelessWidget { + @@ -30,10 +30,47 @@ class DocumentScreen extends StatelessWidget { @override Widget build(BuildContext context) { final (title, :modified) = document.metadata; + final blocks = document.getBlocks(); return Scaffold( - appBar: AppBar( - @@ -42,9 +43,13 @@ class DocumentScreen extends StatelessWidget { - ), - body: Column( - children: [ - - Center( - - child: Text( - - 'Last modified $modified', + appBar: AppBar(title: Text(title)), + - body: Column(children: [Center(child: Text('Last modified $modified'))]), + + body: Column( + + children: [ + Text('Last modified: $modified'), + Expanded( + child: ListView.builder( @@ -488,21 +444,18 @@ steps: + itemBuilder: (context, index) { + return BlockWidget(block: blocks[index]); + }, - ), - ), - ], - @@ -52,3 +57,33 @@ class DocumentScreen extends StatelessWidget { - ); - } - } + + ), + + ), + + ], + + ), + + ); + + } + +} + +class BlockWidget extends StatelessWidget { + final Block block; + - + const BlockWidget({ - + required this.block, - + super.key, - + }); + + const BlockWidget({required this.block, super.key}); + + @override + Widget build(BuildContext context) { @@ -518,13 +471,10 @@ steps: + + return Container( + margin: const EdgeInsets.all(8), - + child: Text( - + block.text, - + style: textStyle, - + ), - + ); - + } - +} + + child: Text(block.text, style: textStyle), + ); + } + } - name: Build web app path: patterns_codelab flutter: build web @@ -544,7 +494,7 @@ steps: patch-u: | --- b/dart-patterns-and-records/step_10/lib/main.dart +++ a/dart-patterns-and-records/step_10/lib/main.dart - @@ -69,14 +69,11 @@ class BlockWidget extends StatelessWidget { + @@ -59,14 +59,11 @@ class BlockWidget extends StatelessWidget { @override Widget build(BuildContext context) { TextStyle? textStyle; @@ -559,7 +509,7 @@ steps: + textStyle = switch (block.type) { + 'h1' => Theme.of(context).textTheme.displayMedium, + 'p' || 'checkbox' => Theme.of(context).textTheme.bodyMedium, - + _ => Theme.of(context).textTheme.bodySmall + + _ => Theme.of(context).textTheme.bodySmall, + }; return Container( @@ -631,7 +581,7 @@ steps: Duration(inDays: final days, isNegative: true) => '${days.abs()} days ago', Duration(inDays: final days) => '$days days from now', }; - @@ -48,6 +51,7 @@ class DocumentScreen extends StatelessWidget { + @@ -43,13 +46,14 @@ class DocumentScreen extends StatelessWidget { @override Widget build(BuildContext context) { final (title, :modified) = document.metadata; @@ -639,8 +589,7 @@ steps: final blocks = document.getBlocks(); return Scaffold( - @@ -56,7 +60,7 @@ class DocumentScreen extends StatelessWidget { - ), + appBar: AppBar(title: Text(title)), body: Column( children: [ - Text('Last modified: $modified'), @@ -667,7 +616,7 @@ steps: patch-u: | --- b/dart-patterns-and-records/step_12/lib/data.dart +++ a/dart-patterns-and-records/step_12/lib/data.dart - @@ -55,16 +55,32 @@ const documentJson = ''' + @@ -51,16 +51,32 @@ const documentJson = ''' } '''; @@ -715,7 +664,7 @@ steps: patch-u: | --- b/dart-patterns-and-records/step_12/lib/main.dart +++ a/dart-patterns-and-records/step_12/lib/main.dart - @@ -85,19 +85,21 @@ class BlockWidget extends StatelessWidget { + @@ -75,16 +75,18 @@ class BlockWidget extends StatelessWidget { @override Widget build(BuildContext context) { @@ -723,27 +672,21 @@ steps: - textStyle = switch (block.type) { - 'h1' => Theme.of(context).textTheme.displayMedium, - 'p' || 'checkbox' => Theme.of(context).textTheme.bodyMedium, - - _ => Theme.of(context).textTheme.bodySmall + - _ => Theme.of(context).textTheme.bodySmall, - }; - return Container( margin: const EdgeInsets.all(8), - - child: Text( - - block.text, - - style: textStyle, - - ), + - child: Text(block.text, style: textStyle), + child: switch (block) { + HeaderBlock(:final text) => Text( - + text, - + style: Theme.of(context).textTheme.displayMedium, - + ), + + text, + + style: Theme.of(context).textTheme.displayMedium, + + ), + ParagraphBlock(:final text) => Text(text), + CheckboxBlock(:final text, :final isChecked) => Row( - + children: [ - + Checkbox(value: isChecked, onChanged: (_) {}), - + Text(text), - + ], - + ), + + children: [Checkbox(value: isChecked, onChanged: (_) {}), Text(text)], + + ), + }, ); } diff --git a/dart-patterns-and-records/step_03/pubspec.yaml b/dart-patterns-and-records/step_03/pubspec.yaml index bbd4f3a909..44478e7314 100644 --- a/dart-patterns-and-records/step_03/pubspec.yaml +++ b/dart-patterns-and-records/step_03/pubspec.yaml @@ -13,7 +13,7 @@ dependencies: dev_dependencies: flutter_test: sdk: flutter - flutter_lints: ^4.0.0 + flutter_lints: ^5.0.0 flutter: uses-material-design: true diff --git a/dart-patterns-and-records/step_04/pubspec.yaml b/dart-patterns-and-records/step_04/pubspec.yaml index bbd4f3a909..44478e7314 100644 --- a/dart-patterns-and-records/step_04/pubspec.yaml +++ b/dart-patterns-and-records/step_04/pubspec.yaml @@ -13,7 +13,7 @@ dependencies: dev_dependencies: flutter_test: sdk: flutter - flutter_lints: ^4.0.0 + flutter_lints: ^5.0.0 flutter: uses-material-design: true diff --git a/dart-patterns-and-records/step_05/pubspec.yaml b/dart-patterns-and-records/step_05/pubspec.yaml index bbd4f3a909..44478e7314 100644 --- a/dart-patterns-and-records/step_05/pubspec.yaml +++ b/dart-patterns-and-records/step_05/pubspec.yaml @@ -13,7 +13,7 @@ dependencies: dev_dependencies: flutter_test: sdk: flutter - flutter_lints: ^4.0.0 + flutter_lints: ^5.0.0 flutter: uses-material-design: true diff --git a/dart-patterns-and-records/step_06_a/pubspec.yaml b/dart-patterns-and-records/step_06_a/pubspec.yaml index bbd4f3a909..44478e7314 100644 --- a/dart-patterns-and-records/step_06_a/pubspec.yaml +++ b/dart-patterns-and-records/step_06_a/pubspec.yaml @@ -13,7 +13,7 @@ dependencies: dev_dependencies: flutter_test: sdk: flutter - flutter_lints: ^4.0.0 + flutter_lints: ^5.0.0 flutter: uses-material-design: true diff --git a/dart-patterns-and-records/step_06_b/pubspec.yaml b/dart-patterns-and-records/step_06_b/pubspec.yaml index bbd4f3a909..44478e7314 100644 --- a/dart-patterns-and-records/step_06_b/pubspec.yaml +++ b/dart-patterns-and-records/step_06_b/pubspec.yaml @@ -13,7 +13,7 @@ dependencies: dev_dependencies: flutter_test: sdk: flutter - flutter_lints: ^4.0.0 + flutter_lints: ^5.0.0 flutter: uses-material-design: true diff --git a/dart-patterns-and-records/step_07_a/pubspec.yaml b/dart-patterns-and-records/step_07_a/pubspec.yaml index bbd4f3a909..44478e7314 100644 --- a/dart-patterns-and-records/step_07_a/pubspec.yaml +++ b/dart-patterns-and-records/step_07_a/pubspec.yaml @@ -13,7 +13,7 @@ dependencies: dev_dependencies: flutter_test: sdk: flutter - flutter_lints: ^4.0.0 + flutter_lints: ^5.0.0 flutter: uses-material-design: true diff --git a/dart-patterns-and-records/step_07_b/pubspec.yaml b/dart-patterns-and-records/step_07_b/pubspec.yaml index bbd4f3a909..44478e7314 100644 --- a/dart-patterns-and-records/step_07_b/pubspec.yaml +++ b/dart-patterns-and-records/step_07_b/pubspec.yaml @@ -13,7 +13,7 @@ dependencies: dev_dependencies: flutter_test: sdk: flutter - flutter_lints: ^4.0.0 + flutter_lints: ^5.0.0 flutter: uses-material-design: true diff --git a/dart-patterns-and-records/step_08/pubspec.yaml b/dart-patterns-and-records/step_08/pubspec.yaml index bbd4f3a909..44478e7314 100644 --- a/dart-patterns-and-records/step_08/pubspec.yaml +++ b/dart-patterns-and-records/step_08/pubspec.yaml @@ -13,7 +13,7 @@ dependencies: dev_dependencies: flutter_test: sdk: flutter - flutter_lints: ^4.0.0 + flutter_lints: ^5.0.0 flutter: uses-material-design: true diff --git a/dart-patterns-and-records/step_09/pubspec.yaml b/dart-patterns-and-records/step_09/pubspec.yaml index bbd4f3a909..44478e7314 100644 --- a/dart-patterns-and-records/step_09/pubspec.yaml +++ b/dart-patterns-and-records/step_09/pubspec.yaml @@ -13,7 +13,7 @@ dependencies: dev_dependencies: flutter_test: sdk: flutter - flutter_lints: ^4.0.0 + flutter_lints: ^5.0.0 flutter: uses-material-design: true diff --git a/dart-patterns-and-records/step_10/pubspec.yaml b/dart-patterns-and-records/step_10/pubspec.yaml index bbd4f3a909..44478e7314 100644 --- a/dart-patterns-and-records/step_10/pubspec.yaml +++ b/dart-patterns-and-records/step_10/pubspec.yaml @@ -13,7 +13,7 @@ dependencies: dev_dependencies: flutter_test: sdk: flutter - flutter_lints: ^4.0.0 + flutter_lints: ^5.0.0 flutter: uses-material-design: true diff --git a/dart-patterns-and-records/step_11_a/pubspec.yaml b/dart-patterns-and-records/step_11_a/pubspec.yaml index bbd4f3a909..44478e7314 100644 --- a/dart-patterns-and-records/step_11_a/pubspec.yaml +++ b/dart-patterns-and-records/step_11_a/pubspec.yaml @@ -13,7 +13,7 @@ dependencies: dev_dependencies: flutter_test: sdk: flutter - flutter_lints: ^4.0.0 + flutter_lints: ^5.0.0 flutter: uses-material-design: true diff --git a/dart-patterns-and-records/step_11_b/pubspec.yaml b/dart-patterns-and-records/step_11_b/pubspec.yaml index bbd4f3a909..44478e7314 100644 --- a/dart-patterns-and-records/step_11_b/pubspec.yaml +++ b/dart-patterns-and-records/step_11_b/pubspec.yaml @@ -13,7 +13,7 @@ dependencies: dev_dependencies: flutter_test: sdk: flutter - flutter_lints: ^4.0.0 + flutter_lints: ^5.0.0 flutter: uses-material-design: true diff --git a/dart-patterns-and-records/step_12/pubspec.yaml b/dart-patterns-and-records/step_12/pubspec.yaml index bbd4f3a909..44478e7314 100644 --- a/dart-patterns-and-records/step_12/pubspec.yaml +++ b/dart-patterns-and-records/step_12/pubspec.yaml @@ -13,7 +13,7 @@ dependencies: dev_dependencies: flutter_test: sdk: flutter - flutter_lints: ^4.0.0 + flutter_lints: ^5.0.0 flutter: uses-material-design: true From f669208d1c191d82addc4d3ef2276bf53efba650 Mon Sep 17 00:00:00 2001 From: Brett Morgan Date: Fri, 15 Nov 2024 16:39:53 +1100 Subject: [PATCH 072/108] Update `firebase-auth-flutterfire-ui` --- .../codelab_rebuild.yaml | 99 ++++++------- .../app/{build.gradle => build.gradle.kts} | 10 +- .../complete/android/build.gradle | 18 --- .../complete/android/build.gradle.kts | 21 +++ .../complete/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../complete/android/settings.gradle | 25 ---- .../complete/android/settings.gradle.kts | 25 ++++ .../complete/ios/Podfile | 1 - .../ios/Runner.xcodeproj/project.pbxproj | 126 ++++++++-------- .../complete/pubspec.yaml | 4 +- .../app/{build.gradle => build.gradle.kts} | 10 +- .../start/android/build.gradle | 18 --- .../start/android/build.gradle.kts | 21 +++ .../start/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../start/android/settings.gradle | 25 ---- .../start/android/settings.gradle.kts | 25 ++++ .../start/ios/Podfile | 1 - .../ios/Runner.xcodeproj/project.pbxproj | 136 +++++++++--------- .../start/pubspec.yaml | 4 +- 21 files changed, 288 insertions(+), 289 deletions(-) rename firebase-auth-flutterfire-ui/complete/android/app/{build.gradle => build.gradle.kts} (84%) delete mode 100644 firebase-auth-flutterfire-ui/complete/android/build.gradle create mode 100644 firebase-auth-flutterfire-ui/complete/android/build.gradle.kts delete mode 100644 firebase-auth-flutterfire-ui/complete/android/settings.gradle create mode 100644 firebase-auth-flutterfire-ui/complete/android/settings.gradle.kts rename firebase-auth-flutterfire-ui/start/android/app/{build.gradle => build.gradle.kts} (84%) delete mode 100644 firebase-auth-flutterfire-ui/start/android/build.gradle create mode 100644 firebase-auth-flutterfire-ui/start/android/build.gradle.kts delete mode 100644 firebase-auth-flutterfire-ui/start/android/settings.gradle create mode 100644 firebase-auth-flutterfire-ui/start/android/settings.gradle.kts diff --git a/firebase-auth-flutterfire-ui/codelab_rebuild.yaml b/firebase-auth-flutterfire-ui/codelab_rebuild.yaml index 1998dd9d6a..0c2bdb05ec 100644 --- a/firebase-auth-flutterfire-ui/codelab_rebuild.yaml +++ b/firebase-auth-flutterfire-ui/codelab_rebuild.yaml @@ -94,7 +94,7 @@ steps: import 'package:firebase_core/firebase_core.dart' show FirebaseOptions; import 'package:flutter/foundation.dart' show defaultTargetPlatform, kIsWeb, TargetPlatform; - + /// Default [FirebaseOptions] for use with your Firebase apps. /// /// Example: @@ -120,10 +120,11 @@ steps: return macos; default: throw UnsupportedError( - 'DefaultFirebaseOptions are not supported for this platform.'); + 'DefaultFirebaseOptions are not supported for this platform.', + ); } } - + // TODO (codelab user): Replace with your Firebase credentials // Generate this file with credentials with the FlutterFire CLI static const FirebaseOptions web = FirebaseOptions( @@ -135,7 +136,7 @@ steps: storageBucket: 'flutterfire-ui-codelab.appspot.com', measurementId: 'MEASUREMENT ID', ); - + static const FirebaseOptions android = FirebaseOptions( apiKey: 'YOUR API KEY', appId: 'YOUR APP ID', @@ -143,7 +144,7 @@ steps: projectId: 'flutterfire-ui-codelab', storageBucket: 'flutterfire-ui-codelab.appspot.com', ); - + static const FirebaseOptions ios = FirebaseOptions( apiKey: 'YOUR API KEY', appId: 'YOUR APP ID', @@ -153,7 +154,7 @@ steps: iosClientId: 'IOS CLIENT ID', iosBundleId: 'com.example.BUNDLE', ); - + static const FirebaseOptions macos = FirebaseOptions( apiKey: 'YOUR API KEY', appId: 'YOUR APP ID', @@ -168,24 +169,19 @@ steps: path: start/lib/home.dart replace-contents: | import 'package:flutter/material.dart'; - + class HomeScreen extends StatelessWidget { const HomeScreen({super.key}); - + @override Widget build(BuildContext context) { return Scaffold( - appBar: AppBar( - automaticallyImplyLeading: false, - ), + appBar: AppBar(automaticallyImplyLeading: false), body: Center( child: Column( children: [ Image.asset('dash.png'), - Text( - 'Welcome!', - style: Theme.of(context).textTheme.displaySmall, - ), + Text('Welcome!', style: Theme.of(context).textTheme.displaySmall), ], ), ), @@ -425,7 +421,6 @@ steps: flutter_additional_macos_build_settings(target) end end - - name: Mkdir assets path: start mkdir: assets @@ -4919,7 +4914,7 @@ steps: patch-u: | --- b/firebase-auth-flutterfire-ui/complete/lib/auth_gate.dart +++ a/firebase-auth-flutterfire-ui/complete/lib/auth_gate.dart - @@ -1,12 +1,56 @@ + @@ -1,12 +1,57 @@ +import 'package:firebase_auth/firebase_auth.dart' hide EmailAuthProvider; +import 'package:firebase_ui_auth/firebase_ui_auth.dart'; +import 'package:firebase_ui_oauth_google/firebase_ui_oauth_google.dart'; @@ -4955,9 +4950,10 @@ steps: + subtitleBuilder: (context, action) { + return Padding( + padding: const EdgeInsets.symmetric(vertical: 8.0), - + child: action == AuthAction.signIn - + ? const Text('Welcome to FlutterFire, please sign in!') - + : const Text('Welcome to Flutterfire, please sign up!'), + + child: + + action == AuthAction.signIn + + ? const Text('Welcome to FlutterFire, please sign in!') + + : const Text('Welcome to Flutterfire, please sign up!'), + ); + }, + footerBuilder: (context, action) { @@ -4987,10 +4983,12 @@ steps: import 'package:flutter/material.dart'; class HomeScreen extends StatelessWidget { - @@ -7,6 +8,38 @@ class HomeScreen extends StatelessWidget { + @@ -6,12 +7,46 @@ class HomeScreen extends StatelessWidget { + @override Widget build(BuildContext context) { return Scaffold( - appBar: AppBar( + - appBar: AppBar(automaticallyImplyLeading: false), + + appBar: AppBar( + actions: [ + IconButton( + icon: const Icon(Icons.person), @@ -4998,38 +4996,37 @@ steps: + Navigator.push( + context, + MaterialPageRoute( - + builder: (context) => ProfileScreen( - + appBar: AppBar( - + title: const Text('User Profile'), - + ), - + actions: [ - + SignedOutAction((context) { - + Navigator.of(context).pop(); - + }) - + ], - + children: [ - + const Divider(), - + Padding( - + padding: const EdgeInsets.all(2), - + child: AspectRatio( - + aspectRatio: 1, - + child: Image.asset('flutterfire_300x.png'), - + ), + + builder: + + (context) => ProfileScreen( + + appBar: AppBar(title: const Text('User Profile')), + + actions: [ + + SignedOutAction((context) { + + Navigator.of(context).pop(); + + }), + + ], + + children: [ + + const Divider(), + + Padding( + + padding: const EdgeInsets.all(2), + + child: AspectRatio( + + aspectRatio: 1, + + child: Image.asset('flutterfire_300x.png'), + + ), + + ), + + ], + ), - + ], - + ), + ), + ); + }, - + ) + + ), + ], - automaticallyImplyLeading: false, - ), + + automaticallyImplyLeading: false, + + ), body: Center( - @@ -17,6 +50,7 @@ class HomeScreen extends StatelessWidget { - 'Welcome!', - style: Theme.of(context).textTheme.displaySmall, - ), + child: Column( + children: [ + Image.asset('dash.png'), + Text('Welcome!', style: Theme.of(context).textTheme.displaySmall), + const SignOutButton(), ], ), @@ -5039,7 +5036,7 @@ steps: patch-u: | --- b/firebase-auth-flutterfire-ui/complete/lib/main.dart +++ a/firebase-auth-flutterfire-ui/complete/lib/main.dart - @@ -1,10 +1,17 @@ + @@ -1,10 +1,15 @@ +import 'package:firebase_core/firebase_core.dart'; import 'package:flutter/material.dart'; @@ -5051,9 +5048,7 @@ steps: void main() async { + WidgetsFlutterBinding.ensureInitialized(); - + await Firebase.initializeApp( - + options: DefaultFirebaseOptions.currentPlatform, - + ); + + await Firebase.initializeApp(options: DefaultFirebaseOptions.currentPlatform); + runApp(const MyApp()); } diff --git a/firebase-auth-flutterfire-ui/complete/android/app/build.gradle b/firebase-auth-flutterfire-ui/complete/android/app/build.gradle.kts similarity index 84% rename from firebase-auth-flutterfire-ui/complete/android/app/build.gradle rename to firebase-auth-flutterfire-ui/complete/android/app/build.gradle.kts index 99b6909075..801dcf1d58 100644 --- a/firebase-auth-flutterfire-ui/complete/android/app/build.gradle +++ b/firebase-auth-flutterfire-ui/complete/android/app/build.gradle.kts @@ -1,8 +1,8 @@ plugins { - id "com.android.application" - id "kotlin-android" + id("com.android.application") + id("kotlin-android") // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. - id "dev.flutter.flutter-gradle-plugin" + id("dev.flutter.flutter-gradle-plugin") } android { @@ -16,7 +16,7 @@ android { } kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8 + jvmTarget = JavaVersion.VERSION_1_8.toString() } defaultConfig { @@ -34,7 +34,7 @@ android { release { // TODO: Add your own signing config for the release build. // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig = signingConfigs.debug + signingConfig = signingConfigs.getByName("debug") } } } diff --git a/firebase-auth-flutterfire-ui/complete/android/build.gradle b/firebase-auth-flutterfire-ui/complete/android/build.gradle deleted file mode 100644 index d2ffbffa4c..0000000000 --- a/firebase-auth-flutterfire-ui/complete/android/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = "../build" -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(":app") -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/firebase-auth-flutterfire-ui/complete/android/build.gradle.kts b/firebase-auth-flutterfire-ui/complete/android/build.gradle.kts new file mode 100644 index 0000000000..89176ef44e --- /dev/null +++ b/firebase-auth-flutterfire-ui/complete/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/firebase-auth-flutterfire-ui/complete/android/gradle.properties b/firebase-auth-flutterfire-ui/complete/android/gradle.properties index 2597170821..f018a61817 100644 --- a/firebase-auth-flutterfire-ui/complete/android/gradle.properties +++ b/firebase-auth-flutterfire-ui/complete/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/firebase-auth-flutterfire-ui/complete/android/gradle/wrapper/gradle-wrapper.properties b/firebase-auth-flutterfire-ui/complete/android/gradle/wrapper/gradle-wrapper.properties index 7bb2df6ba6..afa1e8eb0a 100644 --- a/firebase-auth-flutterfire-ui/complete/android/gradle/wrapper/gradle-wrapper.properties +++ b/firebase-auth-flutterfire-ui/complete/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip diff --git a/firebase-auth-flutterfire-ui/complete/android/settings.gradle b/firebase-auth-flutterfire-ui/complete/android/settings.gradle deleted file mode 100644 index b9e43bd376..0000000000 --- a/firebase-auth-flutterfire-ui/complete/android/settings.gradle +++ /dev/null @@ -1,25 +0,0 @@ -pluginManagement { - def flutterSdkPath = { - def properties = new Properties() - file("local.properties").withInputStream { properties.load(it) } - def flutterSdkPath = properties.getProperty("flutter.sdk") - assert flutterSdkPath != null, "flutter.sdk not set in local.properties" - return flutterSdkPath - }() - - includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") - - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} - -plugins { - id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.1.0" apply false - id "org.jetbrains.kotlin.android" version "1.8.22" apply false -} - -include ":app" diff --git a/firebase-auth-flutterfire-ui/complete/android/settings.gradle.kts b/firebase-auth-flutterfire-ui/complete/android/settings.gradle.kts new file mode 100644 index 0000000000..a439442c20 --- /dev/null +++ b/firebase-auth-flutterfire-ui/complete/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.0" apply false + id("org.jetbrains.kotlin.android") version "1.8.22" apply false +} + +include(":app") diff --git a/firebase-auth-flutterfire-ui/complete/ios/Podfile b/firebase-auth-flutterfire-ui/complete/ios/Podfile index 003d660108..a35276b04c 100644 --- a/firebase-auth-flutterfire-ui/complete/ios/Podfile +++ b/firebase-auth-flutterfire-ui/complete/ios/Podfile @@ -29,7 +29,6 @@ flutter_ios_podfile_setup target 'Runner' do use_frameworks! - use_modular_headers! flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) target 'RunnerTests' do diff --git a/firebase-auth-flutterfire-ui/complete/ios/Runner.xcodeproj/project.pbxproj b/firebase-auth-flutterfire-ui/complete/ios/Runner.xcodeproj/project.pbxproj index 8083692142..41ec3df68d 100644 --- a/firebase-auth-flutterfire-ui/complete/ios/Runner.xcodeproj/project.pbxproj +++ b/firebase-auth-flutterfire-ui/complete/ios/Runner.xcodeproj/project.pbxproj @@ -9,13 +9,13 @@ /* Begin PBXBuildFile section */ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; + 372B0831CB8387E1B7509E44 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0631852E446C858D3E2740C5 /* Pods_Runner.framework */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; - 69EF89ADA82A72DA3881CDF6 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0476C85E88C31A6F565A07AF /* Pods_Runner.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - C676BCFCC403C7BF44F00C79 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8F999D25D86BB866E9E3C49B /* Pods_RunnerTests.framework */; }; + E966366A3DE5DCCE976066D9 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F38CB1757029E15E6F119DE7 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,20 +42,18 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 0476C85E88C31A6F565A07AF /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 0ADD10ED00FC0CB63E99198E /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - 110502C638D57F5328838636 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 0631852E446C858D3E2740C5 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 55123A7016018E07052DB56D /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 57E9F3B6BF5103BA416A705C /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 855A4DC09F765371C79CEF19 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 8F999D25D86BB866E9E3C49B /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 905536B2B0CC8D5F12E88E3A /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 913C1B4EF65EF1BAE10CEC93 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -63,8 +61,10 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 9D5B5C63DA2812283B469410 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - EC1A70118CD3900BB5C1775B /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 99CBB293335806730AA36792 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + BFD924C8A5D1B84D3663945A /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + E810700CE9E15666F2F856C7 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + F38CB1757029E15E6F119DE7 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -72,15 +72,15 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 69EF89ADA82A72DA3881CDF6 /* Pods_Runner.framework in Frameworks */, + 372B0831CB8387E1B7509E44 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - DE0DCF4CF20C18D658FB7980 /* Frameworks */ = { + A7C3D356A71F4361DF941F27 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - C676BCFCC403C7BF44F00C79 /* Pods_RunnerTests.framework in Frameworks */, + E966366A3DE5DCCE976066D9 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -113,8 +113,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - D254548154833717963296E9 /* Pods */, - 9D1F3FB87AD01F86FE5AAB8C /* Frameworks */, + A7EA7A01F3E2461F480E90B9 /* Pods */, + 9E86C8845F34E2BC148936CE /* Frameworks */, ); sourceTree = ""; }; @@ -142,24 +142,24 @@ path = Runner; sourceTree = ""; }; - 9D1F3FB87AD01F86FE5AAB8C /* Frameworks */ = { + 9E86C8845F34E2BC148936CE /* Frameworks */ = { isa = PBXGroup; children = ( - 0476C85E88C31A6F565A07AF /* Pods_Runner.framework */, - 8F999D25D86BB866E9E3C49B /* Pods_RunnerTests.framework */, + 0631852E446C858D3E2740C5 /* Pods_Runner.framework */, + F38CB1757029E15E6F119DE7 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; }; - D254548154833717963296E9 /* Pods */ = { + A7EA7A01F3E2461F480E90B9 /* Pods */ = { isa = PBXGroup; children = ( - 855A4DC09F765371C79CEF19 /* Pods-Runner.debug.xcconfig */, - 110502C638D57F5328838636 /* Pods-Runner.release.xcconfig */, - 0ADD10ED00FC0CB63E99198E /* Pods-Runner.profile.xcconfig */, - EC1A70118CD3900BB5C1775B /* Pods-RunnerTests.debug.xcconfig */, - 9D5B5C63DA2812283B469410 /* Pods-RunnerTests.release.xcconfig */, - 55123A7016018E07052DB56D /* Pods-RunnerTests.profile.xcconfig */, + 57E9F3B6BF5103BA416A705C /* Pods-Runner.debug.xcconfig */, + BFD924C8A5D1B84D3663945A /* Pods-Runner.release.xcconfig */, + 905536B2B0CC8D5F12E88E3A /* Pods-Runner.profile.xcconfig */, + 913C1B4EF65EF1BAE10CEC93 /* Pods-RunnerTests.debug.xcconfig */, + E810700CE9E15666F2F856C7 /* Pods-RunnerTests.release.xcconfig */, + 99CBB293335806730AA36792 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - DFED4E6724E4877050886AC3 /* [CP] Check Pods Manifest.lock */, + 065766047C5AA10DA0449F82 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - DE0DCF4CF20C18D658FB7980 /* Frameworks */, + A7C3D356A71F4361DF941F27 /* Frameworks */, ); buildRules = ( ); @@ -191,15 +191,15 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 8ED98B07ABD148701D578D93 /* [CP] Check Pods Manifest.lock */, + CFF8198FCCE9A977074E7F07 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 4E1AF0179CC7D0A0E903F3EC /* [CP] Embed Pods Frameworks */, - D43E0DD30FFAE4BDC616FE6A /* [CP] Copy Pods Resources */, + 570115B598277CFBD6772EEB /* [CP] Embed Pods Frameworks */, + 8ED2C163770BA0E086053A7A /* [CP] Copy Pods Resources */, ); buildRules = ( ); @@ -271,6 +271,28 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ + 065766047C5AA10DA0449F82 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -287,7 +309,7 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 4E1AF0179CC7D0A0E903F3EC /* [CP] Embed Pods Frameworks */ = { + 570115B598277CFBD6772EEB /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -304,26 +326,21 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - 8ED98B07ABD148701D578D93 /* [CP] Check Pods Manifest.lock */ = { + 8ED2C163770BA0E086053A7A /* [CP] Copy Pods Resources */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; + name = "[CP] Copy Pods Resources"; outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n"; showEnvVarsInLog = 0; }; 9740EEB61CF901F6004384FC /* Run Script */ = { @@ -341,24 +358,7 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - D43E0DD30FFAE4BDC616FE6A /* [CP] Copy Pods Resources */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Copy Pods Resources"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n"; - showEnvVarsInLog = 0; - }; - DFED4E6724E4877050886AC3 /* [CP] Check Pods Manifest.lock */ = { + CFF8198FCCE9A977074E7F07 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -373,7 +373,7 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -505,7 +505,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = EC1A70118CD3900BB5C1775B /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 913C1B4EF65EF1BAE10CEC93 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -523,7 +523,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 9D5B5C63DA2812283B469410 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = E810700CE9E15666F2F856C7 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -539,7 +539,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 55123A7016018E07052DB56D /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 99CBB293335806730AA36792 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/firebase-auth-flutterfire-ui/complete/pubspec.yaml b/firebase-auth-flutterfire-ui/complete/pubspec.yaml index 7244dceddd..bbe130128e 100644 --- a/firebase-auth-flutterfire-ui/complete/pubspec.yaml +++ b/firebase-auth-flutterfire-ui/complete/pubspec.yaml @@ -9,8 +9,8 @@ environment: dependencies: flutter: sdk: flutter - firebase_auth: ^5.3.2 - firebase_core: ^3.7.0 + firebase_auth: ^5.3.3 + firebase_core: ^3.8.0 firebase_ui_auth: ^1.16.0 firebase_ui_oauth_google: ^1.4.0 google_sign_in: ^6.2.2 diff --git a/firebase-auth-flutterfire-ui/start/android/app/build.gradle b/firebase-auth-flutterfire-ui/start/android/app/build.gradle.kts similarity index 84% rename from firebase-auth-flutterfire-ui/start/android/app/build.gradle rename to firebase-auth-flutterfire-ui/start/android/app/build.gradle.kts index c739731c4e..84afc3413f 100644 --- a/firebase-auth-flutterfire-ui/start/android/app/build.gradle +++ b/firebase-auth-flutterfire-ui/start/android/app/build.gradle.kts @@ -1,8 +1,8 @@ plugins { - id "com.android.application" - id "kotlin-android" + id("com.android.application") + id("kotlin-android") // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. - id "dev.flutter.flutter-gradle-plugin" + id("dev.flutter.flutter-gradle-plugin") } android { @@ -16,7 +16,7 @@ android { } kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8 + jvmTarget = JavaVersion.VERSION_1_8.toString() } defaultConfig { @@ -34,7 +34,7 @@ android { release { // TODO: Add your own signing config for the release build. // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig = signingConfigs.debug + signingConfig = signingConfigs.getByName("debug") } } } diff --git a/firebase-auth-flutterfire-ui/start/android/build.gradle b/firebase-auth-flutterfire-ui/start/android/build.gradle deleted file mode 100644 index d2ffbffa4c..0000000000 --- a/firebase-auth-flutterfire-ui/start/android/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = "../build" -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(":app") -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/firebase-auth-flutterfire-ui/start/android/build.gradle.kts b/firebase-auth-flutterfire-ui/start/android/build.gradle.kts new file mode 100644 index 0000000000..89176ef44e --- /dev/null +++ b/firebase-auth-flutterfire-ui/start/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/firebase-auth-flutterfire-ui/start/android/gradle.properties b/firebase-auth-flutterfire-ui/start/android/gradle.properties index 2597170821..f018a61817 100644 --- a/firebase-auth-flutterfire-ui/start/android/gradle.properties +++ b/firebase-auth-flutterfire-ui/start/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/firebase-auth-flutterfire-ui/start/android/gradle/wrapper/gradle-wrapper.properties b/firebase-auth-flutterfire-ui/start/android/gradle/wrapper/gradle-wrapper.properties index 7bb2df6ba6..afa1e8eb0a 100644 --- a/firebase-auth-flutterfire-ui/start/android/gradle/wrapper/gradle-wrapper.properties +++ b/firebase-auth-flutterfire-ui/start/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip diff --git a/firebase-auth-flutterfire-ui/start/android/settings.gradle b/firebase-auth-flutterfire-ui/start/android/settings.gradle deleted file mode 100644 index b9e43bd376..0000000000 --- a/firebase-auth-flutterfire-ui/start/android/settings.gradle +++ /dev/null @@ -1,25 +0,0 @@ -pluginManagement { - def flutterSdkPath = { - def properties = new Properties() - file("local.properties").withInputStream { properties.load(it) } - def flutterSdkPath = properties.getProperty("flutter.sdk") - assert flutterSdkPath != null, "flutter.sdk not set in local.properties" - return flutterSdkPath - }() - - includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") - - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} - -plugins { - id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.1.0" apply false - id "org.jetbrains.kotlin.android" version "1.8.22" apply false -} - -include ":app" diff --git a/firebase-auth-flutterfire-ui/start/android/settings.gradle.kts b/firebase-auth-flutterfire-ui/start/android/settings.gradle.kts new file mode 100644 index 0000000000..a439442c20 --- /dev/null +++ b/firebase-auth-flutterfire-ui/start/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.0" apply false + id("org.jetbrains.kotlin.android") version "1.8.22" apply false +} + +include(":app") diff --git a/firebase-auth-flutterfire-ui/start/ios/Podfile b/firebase-auth-flutterfire-ui/start/ios/Podfile index 003d660108..a35276b04c 100644 --- a/firebase-auth-flutterfire-ui/start/ios/Podfile +++ b/firebase-auth-flutterfire-ui/start/ios/Podfile @@ -29,7 +29,6 @@ flutter_ios_podfile_setup target 'Runner' do use_frameworks! - use_modular_headers! flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) target 'RunnerTests' do diff --git a/firebase-auth-flutterfire-ui/start/ios/Runner.xcodeproj/project.pbxproj b/firebase-auth-flutterfire-ui/start/ios/Runner.xcodeproj/project.pbxproj index 3be689b67e..7f09462eab 100644 --- a/firebase-auth-flutterfire-ui/start/ios/Runner.xcodeproj/project.pbxproj +++ b/firebase-auth-flutterfire-ui/start/ios/Runner.xcodeproj/project.pbxproj @@ -10,12 +10,12 @@ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; - 443F764ED798C9DFD2B130C5 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 34D15CA8EF158803DA869A44 /* Pods_RunnerTests.framework */; }; - 4666D8422B0F2BD2E82E03BB /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D19101DE22A025570B39A7AD /* Pods_Runner.framework */; }; + 3C64136A3D8F4084E397F3D2 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EA360B110AA1C85D8014ECFF /* Pods_Runner.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; + E93AEFAA1A3DAEFF6636F0A8 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2745765AC1FF91F4C66D17BA /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -44,17 +44,17 @@ /* Begin PBXFileReference section */ 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 1BCC7D9445536296BC7E431F /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 2745765AC1FF91F4C66D17BA /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 3304CDC6DD6471102E9FAC01 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 34D15CA8EF158803DA869A44 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 3968CE793823057BB2DCB33A /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 3ADAA08EF9193F96E308E534 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 486DB6C37D192B38932006EA /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - 54ABD578C85E930B284F041F /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 8F0B3CD65B7069614D2B7524 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 95EF194DEA3C595780A1145A /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -62,17 +62,17 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - C32AB61298A3D8DD335DE923 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - D19101DE22A025570B39A7AD /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - DF0319A8570734F490E3B177 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + EA360B110AA1C85D8014ECFF /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + EF6FC16267DECBB699307806 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + F6C9FA9FD0167F39B2D2F13F /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 5EE5A4D49DB4CB9BD448C39B /* Frameworks */ = { + 0750BFECA0ACAA6A6D0B2792 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 443F764ED798C9DFD2B130C5 /* Pods_RunnerTests.framework in Frameworks */, + E93AEFAA1A3DAEFF6636F0A8 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -80,7 +80,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 4666D8422B0F2BD2E82E03BB /* Pods_Runner.framework in Frameworks */, + 3C64136A3D8F4084E397F3D2 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -95,18 +95,13 @@ path = RunnerTests; sourceTree = ""; }; - 8861306E9DDF7BE1DF640380 /* Pods */ = { + 74537CC61C97D18EE04214CC /* Frameworks */ = { isa = PBXGroup; children = ( - 54ABD578C85E930B284F041F /* Pods-Runner.debug.xcconfig */, - DF0319A8570734F490E3B177 /* Pods-Runner.release.xcconfig */, - 1BCC7D9445536296BC7E431F /* Pods-Runner.profile.xcconfig */, - 8F0B3CD65B7069614D2B7524 /* Pods-RunnerTests.debug.xcconfig */, - 486DB6C37D192B38932006EA /* Pods-RunnerTests.release.xcconfig */, - C32AB61298A3D8DD335DE923 /* Pods-RunnerTests.profile.xcconfig */, + EA360B110AA1C85D8014ECFF /* Pods_Runner.framework */, + 2745765AC1FF91F4C66D17BA /* Pods_RunnerTests.framework */, ); - name = Pods; - path = Pods; + name = Frameworks; sourceTree = ""; }; 9740EEB11CF90186004384FC /* Flutter */ = { @@ -127,8 +122,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - 8861306E9DDF7BE1DF640380 /* Pods */, - A962A53FDD62F302A9B63326 /* Frameworks */, + A6E82E03DEF6FE381D4A0A27 /* Pods */, + 74537CC61C97D18EE04214CC /* Frameworks */, ); sourceTree = ""; }; @@ -156,13 +151,18 @@ path = Runner; sourceTree = ""; }; - A962A53FDD62F302A9B63326 /* Frameworks */ = { + A6E82E03DEF6FE381D4A0A27 /* Pods */ = { isa = PBXGroup; children = ( - D19101DE22A025570B39A7AD /* Pods_Runner.framework */, - 34D15CA8EF158803DA869A44 /* Pods_RunnerTests.framework */, + 3ADAA08EF9193F96E308E534 /* Pods-Runner.debug.xcconfig */, + F6C9FA9FD0167F39B2D2F13F /* Pods-Runner.release.xcconfig */, + EF6FC16267DECBB699307806 /* Pods-Runner.profile.xcconfig */, + 95EF194DEA3C595780A1145A /* Pods-RunnerTests.debug.xcconfig */, + 3304CDC6DD6471102E9FAC01 /* Pods-RunnerTests.release.xcconfig */, + 3968CE793823057BB2DCB33A /* Pods-RunnerTests.profile.xcconfig */, ); - name = Frameworks; + name = Pods; + path = Pods; sourceTree = ""; }; /* End PBXGroup section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 3793842EAEA0843610A7ACE1 /* [CP] Check Pods Manifest.lock */, + EEC45F4DBC5EE156C98E3634 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 5EE5A4D49DB4CB9BD448C39B /* Frameworks */, + 0750BFECA0ACAA6A6D0B2792 /* Frameworks */, ); buildRules = ( ); @@ -191,15 +191,15 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - C0DE0A68C884B72011038EA1 /* [CP] Check Pods Manifest.lock */, + C25D1EF0033460BCC9C60618 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 36013CABA6004AC7677B624D /* [CP] Embed Pods Frameworks */, - A7E66519D960BCAD7A7E0E96 /* [CP] Copy Pods Resources */, + 79868937EA04D3665B361266 /* [CP] Embed Pods Frameworks */, + 3DD3589567C9F2B00249E50E /* [CP] Copy Pods Resources */, ); buildRules = ( ); @@ -271,60 +271,55 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 36013CABA6004AC7677B624D /* [CP] Embed Pods Frameworks */ = { + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + inputPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + name = "Thin Binary"; + outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 3793842EAEA0843610A7ACE1 /* [CP] Check Pods Manifest.lock */ = { + 3DD3589567C9F2B00249E50E /* [CP] Copy Pods Resources */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; + name = "[CP] Copy Pods Resources"; outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n"; showEnvVarsInLog = 0; }; - 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + 79868937EA04D3665B361266 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputPaths = ( - "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "Thin Binary"; - outputPaths = ( + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; }; 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; @@ -341,24 +336,29 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - A7E66519D960BCAD7A7E0E96 /* [CP] Copy Pods Resources */ = { + C25D1EF0033460BCC9C60618 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Copy Pods Resources"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - C0DE0A68C884B72011038EA1 /* [CP] Check Pods Manifest.lock */ = { + EEC45F4DBC5EE156C98E3634 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -373,7 +373,7 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -505,7 +505,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 8F0B3CD65B7069614D2B7524 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 95EF194DEA3C595780A1145A /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -523,7 +523,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 486DB6C37D192B38932006EA /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 3304CDC6DD6471102E9FAC01 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -539,7 +539,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C32AB61298A3D8DD335DE923 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 3968CE793823057BB2DCB33A /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/firebase-auth-flutterfire-ui/start/pubspec.yaml b/firebase-auth-flutterfire-ui/start/pubspec.yaml index 2eb02d8d7b..5b72dfff2b 100644 --- a/firebase-auth-flutterfire-ui/start/pubspec.yaml +++ b/firebase-auth-flutterfire-ui/start/pubspec.yaml @@ -9,8 +9,8 @@ environment: dependencies: flutter: sdk: flutter - firebase_auth: ^5.3.2 - firebase_core: ^3.7.0 + firebase_auth: ^5.3.3 + firebase_core: ^3.8.0 firebase_ui_auth: ^1.16.0 firebase_ui_oauth_google: ^1.4.0 google_sign_in: ^6.2.2 From 16b50c2367ab4bcb079b57677759524edfc10f5f Mon Sep 17 00:00:00 2001 From: Brett Morgan Date: Fri, 15 Nov 2024 17:45:48 +1100 Subject: [PATCH 073/108] Update `ffigen_codelab` --- ffigen_codelab/codelab_rebuild.yaml | 267 +++++++++--------- ffigen_codelab/step_03/android/build.gradle | 10 +- .../app/{build.gradle => build.gradle.kts} | 10 +- .../step_03/example/android/build.gradle | 18 -- .../step_03/example/android/build.gradle.kts | 21 ++ .../step_03/example/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../step_03/example/android/settings.gradle | 25 -- .../example/android/settings.gradle.kts | 25 ++ ffigen_codelab/step_03/example/ios/Podfile | 1 - .../ios/Runner.xcodeproj/project.pbxproj | 134 ++++----- ffigen_codelab/step_03/example/macos/Podfile | 1 - .../macos/Runner.xcodeproj/project.pbxproj | 70 ++--- ffigen_codelab/step_03/pubspec.yaml | 2 +- ffigen_codelab/step_05/android/build.gradle | 10 +- .../example/android/app/build.gradle.kts} | 10 +- .../step_05/example/android/build.gradle | 18 -- .../step_05/example/android/build.gradle.kts | 21 ++ .../step_05/example/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../step_05/example/android/settings.gradle | 25 -- .../example/android/settings.gradle.kts | 25 ++ ffigen_codelab/step_05/example/ios/Podfile | 1 - .../ios/Runner.xcodeproj/project.pbxproj | 134 ++++----- ffigen_codelab/step_05/example/macos/Podfile | 1 - .../macos/Runner.xcodeproj/project.pbxproj | 70 ++--- .../lib/duktape_bindings_generated.dart | 180 ++++++------ ffigen_codelab/step_05/pubspec.yaml | 2 +- ffigen_codelab/step_06/android/build.gradle | 10 +- .../example/android/app/build.gradle.kts} | 10 +- .../step_06/example/android/build.gradle | 18 -- .../step_06/example/android/build.gradle.kts | 21 ++ .../step_06/example/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../step_06/example/android/settings.gradle | 25 -- .../example/android/settings.gradle.kts | 25 ++ ffigen_codelab/step_06/example/ios/Podfile | 1 - .../ios/Runner.xcodeproj/project.pbxproj | 134 ++++----- ffigen_codelab/step_06/example/macos/Podfile | 1 - .../macos/Runner.xcodeproj/project.pbxproj | 70 ++--- .../lib/duktape_bindings_generated.dart | 180 ++++++------ ffigen_codelab/step_06/pubspec.yaml | 2 +- ffigen_codelab/step_07/android/build.gradle | 10 +- .../example/android/app/build.gradle.kts} | 10 +- .../step_07/example/android/build.gradle | 18 -- .../step_07/example/android/build.gradle.kts | 21 ++ .../step_07/example/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../step_07/example/android/settings.gradle | 25 -- .../example/android/settings.gradle.kts | 25 ++ ffigen_codelab/step_07/example/ios/Podfile | 1 - .../ios/Runner.xcodeproj/project.pbxproj | 134 ++++----- ffigen_codelab/step_07/example/macos/Podfile | 1 - .../macos/Runner.xcodeproj/project.pbxproj | 70 ++--- .../lib/duktape_bindings_generated.dart | 180 ++++++------ ffigen_codelab/step_07/pubspec.yaml | 4 +- 56 files changed, 1045 insertions(+), 1048 deletions(-) rename ffigen_codelab/step_03/example/android/app/{build.gradle => build.gradle.kts} (84%) delete mode 100644 ffigen_codelab/step_03/example/android/build.gradle create mode 100644 ffigen_codelab/step_03/example/android/build.gradle.kts delete mode 100644 ffigen_codelab/step_03/example/android/settings.gradle create mode 100644 ffigen_codelab/step_03/example/android/settings.gradle.kts rename ffigen_codelab/{step_06/example/android/app/build.gradle => step_05/example/android/app/build.gradle.kts} (84%) delete mode 100644 ffigen_codelab/step_05/example/android/build.gradle create mode 100644 ffigen_codelab/step_05/example/android/build.gradle.kts delete mode 100644 ffigen_codelab/step_05/example/android/settings.gradle create mode 100644 ffigen_codelab/step_05/example/android/settings.gradle.kts rename ffigen_codelab/{step_07/example/android/app/build.gradle => step_06/example/android/app/build.gradle.kts} (84%) delete mode 100644 ffigen_codelab/step_06/example/android/build.gradle create mode 100644 ffigen_codelab/step_06/example/android/build.gradle.kts delete mode 100644 ffigen_codelab/step_06/example/android/settings.gradle create mode 100644 ffigen_codelab/step_06/example/android/settings.gradle.kts rename ffigen_codelab/{step_05/example/android/app/build.gradle => step_07/example/android/app/build.gradle.kts} (84%) delete mode 100644 ffigen_codelab/step_07/example/android/build.gradle create mode 100644 ffigen_codelab/step_07/example/android/build.gradle.kts delete mode 100644 ffigen_codelab/step_07/example/android/settings.gradle create mode 100644 ffigen_codelab/step_07/example/android/settings.gradle.kts diff --git a/ffigen_codelab/codelab_rebuild.yaml b/ffigen_codelab/codelab_rebuild.yaml index 088f568bd5..9dc2dfb6ce 100644 --- a/ffigen_codelab/codelab_rebuild.yaml +++ b/ffigen_codelab/codelab_rebuild.yaml @@ -162,27 +162,27 @@ steps: // Copyright 2022 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. - + import 'package:ffigen_app/ffigen_app.dart'; import 'package:flutter/material.dart'; - + const String jsCode = '1+2'; - + void main() { runApp(const MyApp()); } - + class MyApp extends StatefulWidget { const MyApp({super.key}); - + @override State createState() => _MyAppState(); } - + class _MyAppState extends State { late Duktape duktape; String output = ''; - + @override void initState() { super.initState(); @@ -191,33 +191,27 @@ steps: output = 'Initialized Duktape'; }); } - + @override void dispose() { duktape.dispose(); super.dispose(); } - + @override Widget build(BuildContext context) { const textStyle = TextStyle(fontSize: 25); const spacerSmall = SizedBox(height: 10); return MaterialApp( home: Scaffold( - appBar: AppBar( - title: const Text('Duktape Test'), - ), + appBar: AppBar(title: const Text('Duktape Test')), body: Center( child: Container( padding: const EdgeInsets.all(10), child: Column( mainAxisSize: MainAxisSize.min, children: [ - Text( - output, - style: textStyle, - textAlign: TextAlign.center, - ), + Text(output, style: textStyle, textAlign: TextAlign.center), spacerSmall, ElevatedButton( child: const Text('Run JavaScript'), @@ -242,15 +236,15 @@ steps: // Copyright 2022 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. - + import 'dart:ffi'; import 'dart:io' show Platform; import 'package:ffi/ffi.dart' as ffi; - + import 'duktape_bindings_generated.dart'; - + const String _libName = 'ffigen_app'; - + /// The dynamic library in which the symbols for [DuktapeBindings] can be found. final DynamicLibrary _dylib = () { if (Platform.isMacOS || Platform.isIOS) { @@ -264,44 +258,50 @@ steps: } throw UnsupportedError('Unknown platform: ${Platform.operatingSystem}'); }(); - + /// The bindings to the native functions in [_dylib]. final DuktapeBindings _bindings = DuktapeBindings(_dylib); - + class Duktape { Duktape() { - ctx = - _bindings.duk_create_heap(nullptr, nullptr, nullptr, nullptr, nullptr); + ctx = _bindings.duk_create_heap( + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + ); } - + void evalString(String jsCode) { // From duktape.h: // #define duk_peval_string(ctx,src) \ // (duk_eval_raw((ctx), (src), 0, 0 /*args*/ | DUK_COMPILE_EVAL | DUK_COMPILE_SAFE | DUK_COMPILE_NOSOURCE | DUK_COMPILE_STRLEN | DUK_COMPILE_NOFILENAME)) - + var nativeUtf8 = jsCode.toNativeUtf8(); _bindings.duk_eval_raw( - ctx, - nativeUtf8.cast(), - 0, - 0 /*args*/ | - DUK_COMPILE_EVAL | - DUK_COMPILE_SAFE | - DUK_COMPILE_NOSOURCE | - DUK_COMPILE_STRLEN | - DUK_COMPILE_NOFILENAME); + ctx, + nativeUtf8.cast(), + 0, + 0 /*args*/ | + DUK_COMPILE_EVAL | + DUK_COMPILE_SAFE | + DUK_COMPILE_NOSOURCE | + DUK_COMPILE_STRLEN | + DUK_COMPILE_NOFILENAME, + ); ffi.malloc.free(nativeUtf8); } - + int getInt(int index) { return _bindings.duk_get_int(ctx, index); } - + void dispose() { _bindings.duk_destroy_heap(ctx); ctx = nullptr; } - + late Pointer ctx; } - name: Patch src/CMakeLists.txt @@ -355,6 +355,9 @@ steps: - name: Run ffigen path: ffigen_app dart: run ffigen --config ffigen.yaml + - name: format duktape bindings + path: ffigen_app + dart: format lib/duktape_bindings_generated.dart - name: dart analyze path: ffigen_app dart: analyze --fatal-infos @@ -447,38 +450,46 @@ steps: import 'duktape_bindings_generated.dart'; - @@ -13,12 +14,29 @@ const String _libName = 'ffigen_app'; + @@ -13,12 +14,37 @@ const String _libName = 'ffigen_app'; /// The dynamic library in which the symbols for [DuktapeBindings] can be found. final DynamicLibrary _dylib = () { if (Platform.isMacOS || Platform.isIOS) { + if (Platform.environment.containsKey('FLUTTER_TEST')) { + return DynamicLibrary.open( - + 'build/macos/Build/Products/Debug/$_libName/$_libName.framework/$_libName'); + + 'build/macos/Build/Products/Debug/$_libName/$_libName.framework/$_libName', + + ); + } return DynamicLibrary.open('$_libName.framework/$_libName'); } if (Platform.isAndroid || Platform.isLinux) { + if (Platform.environment.containsKey('FLUTTER_TEST')) { + return DynamicLibrary.open( - + 'build/linux/x64/debug/bundle/lib/lib$_libName.so'); + + 'build/linux/x64/debug/bundle/lib/lib$_libName.so', + + ); + } return DynamicLibrary.open('lib$_libName.so'); } if (Platform.isWindows) { + if (Platform.environment.containsKey('FLUTTER_TEST')) { + return switch (Abi.current()) { - + Abi.windowsArm64 => DynamicLibrary.open(p.canonicalize( - + p.join(r'build\windows\arm64\runner\Debug', '$_libName.dll'))), - + Abi.windowsX64 => DynamicLibrary.open(p.canonicalize( - + p.join(r'build\windows\x64\runner\Debug', '$_libName.dll'))), + + Abi.windowsArm64 => DynamicLibrary.open( + + p.canonicalize( + + p.join(r'build\windows\arm64\runner\Debug', '$_libName.dll'), + + ), + + ), + + Abi.windowsX64 => DynamicLibrary.open( + + p.canonicalize( + + p.join(r'build\windows\x64\runner\Debug', '$_libName.dll'), + + ), + + ), + _ => throw 'Unsupported platform', + }; + } return DynamicLibrary.open('$_libName.dll'); } throw UnsupportedError('Unknown platform: ${Platform.operatingSystem}'); - @@ -33,13 +51,13 @@ class Duktape { - _bindings.duk_create_heap(nullptr, nullptr, nullptr, nullptr, nullptr); + @@ -38,13 +64,13 @@ class Duktape { + ); } - void evalString(String jsCode) { @@ -490,12 +501,12 @@ steps: var nativeUtf8 = jsCode.toNativeUtf8(); - _bindings.duk_eval_raw( + final evalResult = _bindings.duk_eval_raw( - ctx, - nativeUtf8.cast(), - 0, - @@ -50,10 +68,21 @@ class Duktape { - DUK_COMPILE_STRLEN | - DUK_COMPILE_NOFILENAME); + ctx, + nativeUtf8.cast(), + 0, + @@ -56,10 +82,22 @@ class Duktape { + DUK_COMPILE_NOFILENAME, + ); ffi.malloc.free(nativeUtf8); + + if (evalResult != 0) { @@ -510,8 +521,9 @@ steps: + String _retrieveTopOfStackAsString() { + Pointer outLengthPtr = ffi.calloc(); + final errorStrPtr = _bindings.duk_safe_to_lstring(ctx, -1, outLengthPtr); - + final returnVal = - + errorStrPtr.cast().toDartString(length: outLengthPtr.value); + + final returnVal = errorStrPtr.cast().toDartString( + + length: outLengthPtr.value, + + ); + ffi.calloc.free(outLengthPtr); + return returnVal; } @@ -539,75 +551,61 @@ steps: // Copyright 2017, 2020, 2022 The Flutter team. All rights reserved. // Use of this source code is governed by a BSD-style license // that can be found in the LICENSE file. - + import 'package:ffigen_app/ffigen_app.dart'; import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:google_fonts/google_fonts.dart'; - + import 'duktape_message.dart'; - + void main() { runApp(const ProviderScope(child: DuktapeApp())); } - + final duktapeMessagesProvider = StateNotifierProvider>((ref) { - return DuktapeMessageNotifier(messages: []); - }); - + return DuktapeMessageNotifier(messages: []); + }); + class DuktapeMessageNotifier extends StateNotifier> { DuktapeMessageNotifier({required List messages}) - : duktape = Duktape(), - super(messages); + : duktape = Duktape(), + super(messages); final Duktape duktape; - + void eval(String code) { - state = [ - DuktapeMessage.evaluate(code), - ...state, - ]; + state = [DuktapeMessage.evaluate(code), ...state]; try { final response = duktape.evalString(code); - state = [ - DuktapeMessage.response(response), - ...state, - ]; + state = [DuktapeMessage.response(response), ...state]; } catch (e) { - state = [ - DuktapeMessage.error('$e'), - ...state, - ]; + state = [DuktapeMessage.error('$e'), ...state]; } } } - + class DuktapeApp extends StatelessWidget { const DuktapeApp({super.key}); - + @override Widget build(BuildContext context) { - return const MaterialApp( - title: 'Duktape App', - home: DuktapeRepl(), - ); + return const MaterialApp(title: 'Duktape App', home: DuktapeRepl()); } } - + class DuktapeRepl extends ConsumerStatefulWidget { - const DuktapeRepl({ - super.key, - }); - + const DuktapeRepl({super.key}); + @override ConsumerState createState() => _DuktapeReplState(); } - + class _DuktapeReplState extends ConsumerState { final _controller = TextEditingController(); final _focusNode = FocusNode(); var _isComposing = false; - + void _handleSubmitted(String text) { _controller.clear(); setState(() { @@ -618,7 +616,7 @@ steps: }); _focusNode.requestFocus(); } - + @override Widget build(BuildContext context) { final messages = ref.watch(duktapeMessagesProvider); @@ -638,38 +636,45 @@ steps: child: ListView.builder( padding: const EdgeInsets.all(8.0), reverse: true, - itemBuilder: (context, idx) => messages[idx].when( - evaluate: (str) => Padding( - padding: const EdgeInsets.symmetric(vertical: 2), - child: Text( - '> $str', - style: GoogleFonts.firaCode( - textStyle: Theme.of(context).textTheme.titleMedium, - ), + itemBuilder: + (context, idx) => messages[idx].when( + evaluate: + (str) => Padding( + padding: const EdgeInsets.symmetric(vertical: 2), + child: Text( + '> $str', + style: GoogleFonts.firaCode( + textStyle: + Theme.of(context).textTheme.titleMedium, + ), + ), + ), + response: + (str) => Padding( + padding: const EdgeInsets.symmetric(vertical: 2), + child: Text( + '= $str', + style: GoogleFonts.firaCode( + textStyle: + Theme.of(context).textTheme.titleMedium, + color: Colors.blue[800], + ), + ), + ), + error: + (str) => Padding( + padding: const EdgeInsets.symmetric(vertical: 2), + child: Text( + str, + style: GoogleFonts.firaCode( + textStyle: + Theme.of(context).textTheme.titleSmall, + color: Colors.red[800], + fontWeight: FontWeight.bold, + ), + ), + ), ), - ), - response: (str) => Padding( - padding: const EdgeInsets.symmetric(vertical: 2), - child: Text( - '= $str', - style: GoogleFonts.firaCode( - textStyle: Theme.of(context).textTheme.titleMedium, - color: Colors.blue[800], - ), - ), - ), - error: (str) => Padding( - padding: const EdgeInsets.symmetric(vertical: 2), - child: Text( - str, - style: GoogleFonts.firaCode( - textStyle: Theme.of(context).textTheme.titleSmall, - color: Colors.red[800], - fontWeight: FontWeight.bold, - ), - ), - ), - ), itemCount: messages.length, ), ), @@ -687,7 +692,7 @@ steps: ), ); } - + Widget _buildTextComposer() { return IconTheme( data: IconThemeData(color: Theme.of(context).colorScheme.secondary), @@ -700,9 +705,7 @@ steps: Flexible( child: TextField( controller: _controller, - decoration: const InputDecoration( - border: InputBorder.none, - ), + decoration: const InputDecoration(border: InputBorder.none), onChanged: (text) { setState(() { _isComposing = text.isNotEmpty; @@ -716,9 +719,10 @@ steps: margin: const EdgeInsets.symmetric(horizontal: 4.0), child: IconButton( icon: const Icon(Icons.send), - onPressed: _isComposing - ? () => _handleSubmitted(_controller.text) - : null, + onPressed: + _isComposing + ? () => _handleSubmitted(_controller.text) + : null, ), ), ], @@ -801,6 +805,9 @@ steps: - name: build runner path: ffigen_app/example dart: run build_runner build --delete-conflicting-outputs + - name: format duktape_message + path: ffigen_app/example + dart: format lib/duktape_message.freezed.dart - name: dart analyze path: ffigen_app dart: analyze --fatal-infos diff --git a/ffigen_codelab/step_03/android/build.gradle b/ffigen_codelab/step_03/android/build.gradle index 09a2474ff1..adff069975 100644 --- a/ffigen_codelab/step_03/android/build.gradle +++ b/ffigen_codelab/step_03/android/build.gradle @@ -11,7 +11,7 @@ buildscript { dependencies { // The Android Gradle Plugin knows how to build native code with the NDK. - classpath("com.android.tools.build:gradle:8.1.0") + classpath("com.android.tools.build:gradle:8.7.0") } } @@ -25,9 +25,7 @@ rootProject.allprojects { apply plugin: "com.android.library" android { - if (project.android.hasProperty("namespace")) { - namespace = "com.example.ffigen_app" - } + namespace = "com.example.ffigen_app" // Bumping the plugin compileSdk version requires all clients of this plugin // to bump the version in their app. @@ -55,8 +53,8 @@ android { } compileOptions { - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 + sourceCompatibility = JavaVersion.VERSION_11 + targetCompatibility = JavaVersion.VERSION_11 } defaultConfig { diff --git a/ffigen_codelab/step_03/example/android/app/build.gradle b/ffigen_codelab/step_03/example/android/app/build.gradle.kts similarity index 84% rename from ffigen_codelab/step_03/example/android/app/build.gradle rename to ffigen_codelab/step_03/example/android/app/build.gradle.kts index 858c9239e7..225c36472e 100644 --- a/ffigen_codelab/step_03/example/android/app/build.gradle +++ b/ffigen_codelab/step_03/example/android/app/build.gradle.kts @@ -1,8 +1,8 @@ plugins { - id "com.android.application" - id "kotlin-android" + id("com.android.application") + id("kotlin-android") // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. - id "dev.flutter.flutter-gradle-plugin" + id("dev.flutter.flutter-gradle-plugin") } android { @@ -16,7 +16,7 @@ android { } kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8 + jvmTarget = JavaVersion.VERSION_1_8.toString() } defaultConfig { @@ -34,7 +34,7 @@ android { release { // TODO: Add your own signing config for the release build. // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig = signingConfigs.debug + signingConfig = signingConfigs.getByName("debug") } } } diff --git a/ffigen_codelab/step_03/example/android/build.gradle b/ffigen_codelab/step_03/example/android/build.gradle deleted file mode 100644 index d2ffbffa4c..0000000000 --- a/ffigen_codelab/step_03/example/android/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = "../build" -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(":app") -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/ffigen_codelab/step_03/example/android/build.gradle.kts b/ffigen_codelab/step_03/example/android/build.gradle.kts new file mode 100644 index 0000000000..89176ef44e --- /dev/null +++ b/ffigen_codelab/step_03/example/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/ffigen_codelab/step_03/example/android/gradle.properties b/ffigen_codelab/step_03/example/android/gradle.properties index 2597170821..f018a61817 100644 --- a/ffigen_codelab/step_03/example/android/gradle.properties +++ b/ffigen_codelab/step_03/example/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/ffigen_codelab/step_03/example/android/gradle/wrapper/gradle-wrapper.properties b/ffigen_codelab/step_03/example/android/gradle/wrapper/gradle-wrapper.properties index 7bb2df6ba6..afa1e8eb0a 100644 --- a/ffigen_codelab/step_03/example/android/gradle/wrapper/gradle-wrapper.properties +++ b/ffigen_codelab/step_03/example/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip diff --git a/ffigen_codelab/step_03/example/android/settings.gradle b/ffigen_codelab/step_03/example/android/settings.gradle deleted file mode 100644 index b9e43bd376..0000000000 --- a/ffigen_codelab/step_03/example/android/settings.gradle +++ /dev/null @@ -1,25 +0,0 @@ -pluginManagement { - def flutterSdkPath = { - def properties = new Properties() - file("local.properties").withInputStream { properties.load(it) } - def flutterSdkPath = properties.getProperty("flutter.sdk") - assert flutterSdkPath != null, "flutter.sdk not set in local.properties" - return flutterSdkPath - }() - - includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") - - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} - -plugins { - id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.1.0" apply false - id "org.jetbrains.kotlin.android" version "1.8.22" apply false -} - -include ":app" diff --git a/ffigen_codelab/step_03/example/android/settings.gradle.kts b/ffigen_codelab/step_03/example/android/settings.gradle.kts new file mode 100644 index 0000000000..a439442c20 --- /dev/null +++ b/ffigen_codelab/step_03/example/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.0" apply false + id("org.jetbrains.kotlin.android") version "1.8.22" apply false +} + +include(":app") diff --git a/ffigen_codelab/step_03/example/ios/Podfile b/ffigen_codelab/step_03/example/ios/Podfile index d97f17e223..e549ee22f3 100644 --- a/ffigen_codelab/step_03/example/ios/Podfile +++ b/ffigen_codelab/step_03/example/ios/Podfile @@ -29,7 +29,6 @@ flutter_ios_podfile_setup target 'Runner' do use_frameworks! - use_modular_headers! flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) target 'RunnerTests' do diff --git a/ffigen_codelab/step_03/example/ios/Runner.xcodeproj/project.pbxproj b/ffigen_codelab/step_03/example/ios/Runner.xcodeproj/project.pbxproj index c92da01762..56cfc32ab5 100644 --- a/ffigen_codelab/step_03/example/ios/Runner.xcodeproj/project.pbxproj +++ b/ffigen_codelab/step_03/example/ios/Runner.xcodeproj/project.pbxproj @@ -7,15 +7,15 @@ objects = { /* Begin PBXBuildFile section */ + 044F9546D51B393B0B020A22 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 737403045BF1B572BF3D78CE /* Pods_Runner.framework */; }; 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; + 23ABC77C023C46FFD093136C /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A3C54131D13247ABAE830E17 /* Pods_RunnerTests.framework */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; - 35C2CDB992BA71FF454706DA /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 246CD2A9C634D9DCB84C492B /* Pods_Runner.framework */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - E29460EE2F58B491AE1B7420 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7B9B3B203B051AA61D71708D /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -44,18 +44,16 @@ /* Begin PBXFileReference section */ 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 246CD2A9C634D9DCB84C492B /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 252C44AFA3F33C974291B8BE /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - 26082E8AF6245A022710FD35 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; + 53845C6BF36C2E5E9E3A5035 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 5F9346421AC22D5E5E320F4D /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 6C3E075EA861EAC2C9A65FC3 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 737403045BF1B572BF3D78CE /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 7B9B3B203B051AA61D71708D /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 7CDD9C80886B67FDD2457CED /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - 83FDFB5C26D8493094669E02 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -63,24 +61,26 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - A8FCCC20319F4779C587CA5D /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - AA3048732925F51D849F53E6 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + A3C54131D13247ABAE830E17 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + B9FE39C60B6C92CCBE46C781 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + BACB0A29AC8EE89321B84F49 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + FB125CF693F2D6150B5BB74D /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 4B97B91A1F54FFB579CD55FC /* Frameworks */ = { + 97C146EB1CF9000F007C117D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - E29460EE2F58B491AE1B7420 /* Pods_RunnerTests.framework in Frameworks */, + 044F9546D51B393B0B020A22 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 97C146EB1CF9000F007C117D /* Frameworks */ = { + 99B38960C7964E4DF6303B2A /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 35C2CDB992BA71FF454706DA /* Pods_Runner.framework in Frameworks */, + 23ABC77C023C46FFD093136C /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -95,20 +95,6 @@ path = RunnerTests; sourceTree = ""; }; - 8F8C07E618915BEA66718CB1 /* Pods */ = { - isa = PBXGroup; - children = ( - 26082E8AF6245A022710FD35 /* Pods-Runner.debug.xcconfig */, - 83FDFB5C26D8493094669E02 /* Pods-Runner.release.xcconfig */, - 7CDD9C80886B67FDD2457CED /* Pods-Runner.profile.xcconfig */, - A8FCCC20319F4779C587CA5D /* Pods-RunnerTests.debug.xcconfig */, - AA3048732925F51D849F53E6 /* Pods-RunnerTests.release.xcconfig */, - 252C44AFA3F33C974291B8BE /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( @@ -127,8 +113,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - 8F8C07E618915BEA66718CB1 /* Pods */, - AAE566CDF0EA1C0DFD383D83 /* Frameworks */, + 99FF07FFDFF8D2980D00FD89 /* Pods */, + C5708B7978C43768F608998E /* Frameworks */, ); sourceTree = ""; }; @@ -156,11 +142,25 @@ path = Runner; sourceTree = ""; }; - AAE566CDF0EA1C0DFD383D83 /* Frameworks */ = { + 99FF07FFDFF8D2980D00FD89 /* Pods */ = { + isa = PBXGroup; + children = ( + 6C3E075EA861EAC2C9A65FC3 /* Pods-Runner.debug.xcconfig */, + FB125CF693F2D6150B5BB74D /* Pods-Runner.release.xcconfig */, + BACB0A29AC8EE89321B84F49 /* Pods-Runner.profile.xcconfig */, + 53845C6BF36C2E5E9E3A5035 /* Pods-RunnerTests.debug.xcconfig */, + B9FE39C60B6C92CCBE46C781 /* Pods-RunnerTests.release.xcconfig */, + 5F9346421AC22D5E5E320F4D /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; + C5708B7978C43768F608998E /* Frameworks */ = { isa = PBXGroup; children = ( - 246CD2A9C634D9DCB84C492B /* Pods_Runner.framework */, - 7B9B3B203B051AA61D71708D /* Pods_RunnerTests.framework */, + 737403045BF1B572BF3D78CE /* Pods_Runner.framework */, + A3C54131D13247ABAE830E17 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 3A1AE33A8C0CA1C146B254EA /* [CP] Check Pods Manifest.lock */, + 012E12F8DDA59CCC3C74FACC /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 4B97B91A1F54FFB579CD55FC /* Frameworks */, + 99B38960C7964E4DF6303B2A /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - CE5503F89FD8B6227DC56BBE /* [CP] Check Pods Manifest.lock */, + 2A249B9D5FFFA2F89090A593 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - ECE47E0D65094DD667AA5D03 /* [CP] Embed Pods Frameworks */, + 4300EFEAE8DBCC0B4183ADFA /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -270,7 +270,7 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 3A1AE33A8C0CA1C146B254EA /* [CP] Check Pods Manifest.lock */ = { + 012E12F8DDA59CCC3C74FACC /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -292,75 +292,75 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + 2A249B9D5FFFA2F89090A593 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( - "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "Thin Binary"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); - name = "Run Script"; + name = "Thin Binary"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - CE5503F89FD8B6227DC56BBE /* [CP] Check Pods Manifest.lock */ = { + 4300EFEAE8DBCC0B4183ADFA /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - ECE47E0D65094DD667AA5D03 /* [CP] Embed Pods Frameworks */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + inputPaths = ( ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + name = "Run Script"; + outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; /* End PBXShellScriptBuildPhase section */ @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = A8FCCC20319F4779C587CA5D /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 53845C6BF36C2E5E9E3A5035 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = AA3048732925F51D849F53E6 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = B9FE39C60B6C92CCBE46C781 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 252C44AFA3F33C974291B8BE /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 5F9346421AC22D5E5E320F4D /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/ffigen_codelab/step_03/example/macos/Podfile b/ffigen_codelab/step_03/example/macos/Podfile index c795730db8..29c8eb3294 100644 --- a/ffigen_codelab/step_03/example/macos/Podfile +++ b/ffigen_codelab/step_03/example/macos/Podfile @@ -28,7 +28,6 @@ flutter_macos_podfile_setup target 'Runner' do use_frameworks! - use_modular_headers! flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__)) target 'RunnerTests' do diff --git a/ffigen_codelab/step_03/example/macos/Runner.xcodeproj/project.pbxproj b/ffigen_codelab/step_03/example/macos/Runner.xcodeproj/project.pbxproj index 5d066c56cd..5011175dbe 100644 --- a/ffigen_codelab/step_03/example/macos/Runner.xcodeproj/project.pbxproj +++ b/ffigen_codelab/step_03/example/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ + 23A6231FF418E850358F6441 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 04C81706F163DB08A9043286 /* Pods_Runner.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 34C11F32AC13E549EAC19C9A /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9111221EFB74204A99FADA45 /* Pods_Runner.framework */; }; - F87322B26DD8D853E9CB39B2 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3F631A83DC0FBC6522DF7C62 /* Pods_RunnerTests.framework */; }; + CBBFC818490C1199F67A34ED /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FD747B2193CBA28F4412B052 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,6 +62,7 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 04C81706F163DB08A9043286 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -78,16 +79,15 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 3F631A83DC0FBC6522DF7C62 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 71BD6EA5154E76B5396EE90D /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 74406D118E64F0271B406A7F /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 4A1B61DC13BF467522EE4597 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 586A6D11F96D888385B0EA9B /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 830A7422CDCD433EA41C308D /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - 9111221EFB74204A99FADA45 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - AC73A378F377F50F98A1B559 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - BD2810150294EE7B0861D857 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - C913AD53FEBD6CCC01058575 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + A0B79203F9F4D935EFFD6087 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + C87438A25A0CD5F890E428C0 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + D00064E34BCCC8D640128A17 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + E94C149843CA029E5F4F5034 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + FD747B2193CBA28F4412B052 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - F87322B26DD8D853E9CB39B2 /* Pods_RunnerTests.framework in Frameworks */, + CBBFC818490C1199F67A34ED /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,7 +103,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 34C11F32AC13E549EAC19C9A /* Pods_Runner.framework in Frameworks */, + 23A6231FF418E850358F6441 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -137,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - EDC5819FB59C73891ABAD209 /* Pods */, + 8561B675EC77B28D16492612 /* Pods */, ); sourceTree = ""; }; @@ -185,27 +185,27 @@ path = Runner; sourceTree = ""; }; - D73912EC22F37F3D000D13A0 /* Frameworks */ = { + 8561B675EC77B28D16492612 /* Pods */ = { isa = PBXGroup; children = ( - 9111221EFB74204A99FADA45 /* Pods_Runner.framework */, - 3F631A83DC0FBC6522DF7C62 /* Pods_RunnerTests.framework */, + 4A1B61DC13BF467522EE4597 /* Pods-Runner.debug.xcconfig */, + E94C149843CA029E5F4F5034 /* Pods-Runner.release.xcconfig */, + A0B79203F9F4D935EFFD6087 /* Pods-Runner.profile.xcconfig */, + D00064E34BCCC8D640128A17 /* Pods-RunnerTests.debug.xcconfig */, + C87438A25A0CD5F890E428C0 /* Pods-RunnerTests.release.xcconfig */, + 586A6D11F96D888385B0EA9B /* Pods-RunnerTests.profile.xcconfig */, ); - name = Frameworks; + name = Pods; + path = Pods; sourceTree = ""; }; - EDC5819FB59C73891ABAD209 /* Pods */ = { + D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - C913AD53FEBD6CCC01058575 /* Pods-Runner.debug.xcconfig */, - 74406D118E64F0271B406A7F /* Pods-Runner.release.xcconfig */, - AC73A378F377F50F98A1B559 /* Pods-Runner.profile.xcconfig */, - 71BD6EA5154E76B5396EE90D /* Pods-RunnerTests.debug.xcconfig */, - BD2810150294EE7B0861D857 /* Pods-RunnerTests.release.xcconfig */, - 830A7422CDCD433EA41C308D /* Pods-RunnerTests.profile.xcconfig */, + 04C81706F163DB08A9043286 /* Pods_Runner.framework */, + FD747B2193CBA28F4412B052 /* Pods_RunnerTests.framework */, ); - name = Pods; - path = Pods; + name = Frameworks; sourceTree = ""; }; /* End PBXGroup section */ @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 84A3A37EB6F5F6C593457D11 /* [CP] Check Pods Manifest.lock */, + 4E06478F590845CD93E25872 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - D02496A41717E29108D3EE35 /* [CP] Check Pods Manifest.lock */, + 5F0E69767E8114D2A744FE00 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 1654127F8324C89D6EBD6228 /* [CP] Embed Pods Frameworks */, + 28C6E02EA0C73823A5A69556 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,7 +323,7 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 1654127F8324C89D6EBD6228 /* [CP] Embed Pods Frameworks */ = { + 28C6E02EA0C73823A5A69556 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -378,7 +378,7 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 84A3A37EB6F5F6C593457D11 /* [CP] Check Pods Manifest.lock */ = { + 4E06478F590845CD93E25872 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -400,7 +400,7 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - D02496A41717E29108D3EE35 /* [CP] Check Pods Manifest.lock */ = { + 5F0E69767E8114D2A744FE00 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 71BD6EA5154E76B5396EE90D /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = D00064E34BCCC8D640128A17 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = BD2810150294EE7B0861D857 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = C87438A25A0CD5F890E428C0 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 830A7422CDCD433EA41C308D /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 586A6D11F96D888385B0EA9B /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/ffigen_codelab/step_03/pubspec.yaml b/ffigen_codelab/step_03/pubspec.yaml index 67498f7e55..1570daf24d 100644 --- a/ffigen_codelab/step_03/pubspec.yaml +++ b/ffigen_codelab/step_03/pubspec.yaml @@ -14,7 +14,7 @@ dependencies: dev_dependencies: ffi: ^2.1.3 - ffigen: ^15.0.0 + ffigen: ^16.0.0 flutter_test: sdk: flutter flutter_lints: ^5.0.0 diff --git a/ffigen_codelab/step_05/android/build.gradle b/ffigen_codelab/step_05/android/build.gradle index 09a2474ff1..adff069975 100644 --- a/ffigen_codelab/step_05/android/build.gradle +++ b/ffigen_codelab/step_05/android/build.gradle @@ -11,7 +11,7 @@ buildscript { dependencies { // The Android Gradle Plugin knows how to build native code with the NDK. - classpath("com.android.tools.build:gradle:8.1.0") + classpath("com.android.tools.build:gradle:8.7.0") } } @@ -25,9 +25,7 @@ rootProject.allprojects { apply plugin: "com.android.library" android { - if (project.android.hasProperty("namespace")) { - namespace = "com.example.ffigen_app" - } + namespace = "com.example.ffigen_app" // Bumping the plugin compileSdk version requires all clients of this plugin // to bump the version in their app. @@ -55,8 +53,8 @@ android { } compileOptions { - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 + sourceCompatibility = JavaVersion.VERSION_11 + targetCompatibility = JavaVersion.VERSION_11 } defaultConfig { diff --git a/ffigen_codelab/step_06/example/android/app/build.gradle b/ffigen_codelab/step_05/example/android/app/build.gradle.kts similarity index 84% rename from ffigen_codelab/step_06/example/android/app/build.gradle rename to ffigen_codelab/step_05/example/android/app/build.gradle.kts index 858c9239e7..225c36472e 100644 --- a/ffigen_codelab/step_06/example/android/app/build.gradle +++ b/ffigen_codelab/step_05/example/android/app/build.gradle.kts @@ -1,8 +1,8 @@ plugins { - id "com.android.application" - id "kotlin-android" + id("com.android.application") + id("kotlin-android") // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. - id "dev.flutter.flutter-gradle-plugin" + id("dev.flutter.flutter-gradle-plugin") } android { @@ -16,7 +16,7 @@ android { } kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8 + jvmTarget = JavaVersion.VERSION_1_8.toString() } defaultConfig { @@ -34,7 +34,7 @@ android { release { // TODO: Add your own signing config for the release build. // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig = signingConfigs.debug + signingConfig = signingConfigs.getByName("debug") } } } diff --git a/ffigen_codelab/step_05/example/android/build.gradle b/ffigen_codelab/step_05/example/android/build.gradle deleted file mode 100644 index d2ffbffa4c..0000000000 --- a/ffigen_codelab/step_05/example/android/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = "../build" -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(":app") -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/ffigen_codelab/step_05/example/android/build.gradle.kts b/ffigen_codelab/step_05/example/android/build.gradle.kts new file mode 100644 index 0000000000..89176ef44e --- /dev/null +++ b/ffigen_codelab/step_05/example/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/ffigen_codelab/step_05/example/android/gradle.properties b/ffigen_codelab/step_05/example/android/gradle.properties index 2597170821..f018a61817 100644 --- a/ffigen_codelab/step_05/example/android/gradle.properties +++ b/ffigen_codelab/step_05/example/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/ffigen_codelab/step_05/example/android/gradle/wrapper/gradle-wrapper.properties b/ffigen_codelab/step_05/example/android/gradle/wrapper/gradle-wrapper.properties index 7bb2df6ba6..afa1e8eb0a 100644 --- a/ffigen_codelab/step_05/example/android/gradle/wrapper/gradle-wrapper.properties +++ b/ffigen_codelab/step_05/example/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip diff --git a/ffigen_codelab/step_05/example/android/settings.gradle b/ffigen_codelab/step_05/example/android/settings.gradle deleted file mode 100644 index b9e43bd376..0000000000 --- a/ffigen_codelab/step_05/example/android/settings.gradle +++ /dev/null @@ -1,25 +0,0 @@ -pluginManagement { - def flutterSdkPath = { - def properties = new Properties() - file("local.properties").withInputStream { properties.load(it) } - def flutterSdkPath = properties.getProperty("flutter.sdk") - assert flutterSdkPath != null, "flutter.sdk not set in local.properties" - return flutterSdkPath - }() - - includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") - - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} - -plugins { - id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.1.0" apply false - id "org.jetbrains.kotlin.android" version "1.8.22" apply false -} - -include ":app" diff --git a/ffigen_codelab/step_05/example/android/settings.gradle.kts b/ffigen_codelab/step_05/example/android/settings.gradle.kts new file mode 100644 index 0000000000..a439442c20 --- /dev/null +++ b/ffigen_codelab/step_05/example/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.0" apply false + id("org.jetbrains.kotlin.android") version "1.8.22" apply false +} + +include(":app") diff --git a/ffigen_codelab/step_05/example/ios/Podfile b/ffigen_codelab/step_05/example/ios/Podfile index d97f17e223..e549ee22f3 100644 --- a/ffigen_codelab/step_05/example/ios/Podfile +++ b/ffigen_codelab/step_05/example/ios/Podfile @@ -29,7 +29,6 @@ flutter_ios_podfile_setup target 'Runner' do use_frameworks! - use_modular_headers! flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) target 'RunnerTests' do diff --git a/ffigen_codelab/step_05/example/ios/Runner.xcodeproj/project.pbxproj b/ffigen_codelab/step_05/example/ios/Runner.xcodeproj/project.pbxproj index c92da01762..56cfc32ab5 100644 --- a/ffigen_codelab/step_05/example/ios/Runner.xcodeproj/project.pbxproj +++ b/ffigen_codelab/step_05/example/ios/Runner.xcodeproj/project.pbxproj @@ -7,15 +7,15 @@ objects = { /* Begin PBXBuildFile section */ + 044F9546D51B393B0B020A22 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 737403045BF1B572BF3D78CE /* Pods_Runner.framework */; }; 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; + 23ABC77C023C46FFD093136C /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A3C54131D13247ABAE830E17 /* Pods_RunnerTests.framework */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; - 35C2CDB992BA71FF454706DA /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 246CD2A9C634D9DCB84C492B /* Pods_Runner.framework */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - E29460EE2F58B491AE1B7420 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7B9B3B203B051AA61D71708D /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -44,18 +44,16 @@ /* Begin PBXFileReference section */ 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 246CD2A9C634D9DCB84C492B /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 252C44AFA3F33C974291B8BE /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - 26082E8AF6245A022710FD35 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; + 53845C6BF36C2E5E9E3A5035 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 5F9346421AC22D5E5E320F4D /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 6C3E075EA861EAC2C9A65FC3 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 737403045BF1B572BF3D78CE /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 7B9B3B203B051AA61D71708D /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 7CDD9C80886B67FDD2457CED /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - 83FDFB5C26D8493094669E02 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -63,24 +61,26 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - A8FCCC20319F4779C587CA5D /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - AA3048732925F51D849F53E6 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + A3C54131D13247ABAE830E17 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + B9FE39C60B6C92CCBE46C781 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + BACB0A29AC8EE89321B84F49 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + FB125CF693F2D6150B5BB74D /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 4B97B91A1F54FFB579CD55FC /* Frameworks */ = { + 97C146EB1CF9000F007C117D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - E29460EE2F58B491AE1B7420 /* Pods_RunnerTests.framework in Frameworks */, + 044F9546D51B393B0B020A22 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 97C146EB1CF9000F007C117D /* Frameworks */ = { + 99B38960C7964E4DF6303B2A /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 35C2CDB992BA71FF454706DA /* Pods_Runner.framework in Frameworks */, + 23ABC77C023C46FFD093136C /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -95,20 +95,6 @@ path = RunnerTests; sourceTree = ""; }; - 8F8C07E618915BEA66718CB1 /* Pods */ = { - isa = PBXGroup; - children = ( - 26082E8AF6245A022710FD35 /* Pods-Runner.debug.xcconfig */, - 83FDFB5C26D8493094669E02 /* Pods-Runner.release.xcconfig */, - 7CDD9C80886B67FDD2457CED /* Pods-Runner.profile.xcconfig */, - A8FCCC20319F4779C587CA5D /* Pods-RunnerTests.debug.xcconfig */, - AA3048732925F51D849F53E6 /* Pods-RunnerTests.release.xcconfig */, - 252C44AFA3F33C974291B8BE /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( @@ -127,8 +113,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - 8F8C07E618915BEA66718CB1 /* Pods */, - AAE566CDF0EA1C0DFD383D83 /* Frameworks */, + 99FF07FFDFF8D2980D00FD89 /* Pods */, + C5708B7978C43768F608998E /* Frameworks */, ); sourceTree = ""; }; @@ -156,11 +142,25 @@ path = Runner; sourceTree = ""; }; - AAE566CDF0EA1C0DFD383D83 /* Frameworks */ = { + 99FF07FFDFF8D2980D00FD89 /* Pods */ = { + isa = PBXGroup; + children = ( + 6C3E075EA861EAC2C9A65FC3 /* Pods-Runner.debug.xcconfig */, + FB125CF693F2D6150B5BB74D /* Pods-Runner.release.xcconfig */, + BACB0A29AC8EE89321B84F49 /* Pods-Runner.profile.xcconfig */, + 53845C6BF36C2E5E9E3A5035 /* Pods-RunnerTests.debug.xcconfig */, + B9FE39C60B6C92CCBE46C781 /* Pods-RunnerTests.release.xcconfig */, + 5F9346421AC22D5E5E320F4D /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; + C5708B7978C43768F608998E /* Frameworks */ = { isa = PBXGroup; children = ( - 246CD2A9C634D9DCB84C492B /* Pods_Runner.framework */, - 7B9B3B203B051AA61D71708D /* Pods_RunnerTests.framework */, + 737403045BF1B572BF3D78CE /* Pods_Runner.framework */, + A3C54131D13247ABAE830E17 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 3A1AE33A8C0CA1C146B254EA /* [CP] Check Pods Manifest.lock */, + 012E12F8DDA59CCC3C74FACC /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 4B97B91A1F54FFB579CD55FC /* Frameworks */, + 99B38960C7964E4DF6303B2A /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - CE5503F89FD8B6227DC56BBE /* [CP] Check Pods Manifest.lock */, + 2A249B9D5FFFA2F89090A593 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - ECE47E0D65094DD667AA5D03 /* [CP] Embed Pods Frameworks */, + 4300EFEAE8DBCC0B4183ADFA /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -270,7 +270,7 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 3A1AE33A8C0CA1C146B254EA /* [CP] Check Pods Manifest.lock */ = { + 012E12F8DDA59CCC3C74FACC /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -292,75 +292,75 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + 2A249B9D5FFFA2F89090A593 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( - "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "Thin Binary"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); - name = "Run Script"; + name = "Thin Binary"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - CE5503F89FD8B6227DC56BBE /* [CP] Check Pods Manifest.lock */ = { + 4300EFEAE8DBCC0B4183ADFA /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - ECE47E0D65094DD667AA5D03 /* [CP] Embed Pods Frameworks */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + inputPaths = ( ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + name = "Run Script"; + outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; /* End PBXShellScriptBuildPhase section */ @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = A8FCCC20319F4779C587CA5D /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 53845C6BF36C2E5E9E3A5035 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = AA3048732925F51D849F53E6 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = B9FE39C60B6C92CCBE46C781 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 252C44AFA3F33C974291B8BE /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 5F9346421AC22D5E5E320F4D /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/ffigen_codelab/step_05/example/macos/Podfile b/ffigen_codelab/step_05/example/macos/Podfile index c795730db8..29c8eb3294 100644 --- a/ffigen_codelab/step_05/example/macos/Podfile +++ b/ffigen_codelab/step_05/example/macos/Podfile @@ -28,7 +28,6 @@ flutter_macos_podfile_setup target 'Runner' do use_frameworks! - use_modular_headers! flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__)) target 'RunnerTests' do diff --git a/ffigen_codelab/step_05/example/macos/Runner.xcodeproj/project.pbxproj b/ffigen_codelab/step_05/example/macos/Runner.xcodeproj/project.pbxproj index 5d066c56cd..5011175dbe 100644 --- a/ffigen_codelab/step_05/example/macos/Runner.xcodeproj/project.pbxproj +++ b/ffigen_codelab/step_05/example/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ + 23A6231FF418E850358F6441 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 04C81706F163DB08A9043286 /* Pods_Runner.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 34C11F32AC13E549EAC19C9A /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9111221EFB74204A99FADA45 /* Pods_Runner.framework */; }; - F87322B26DD8D853E9CB39B2 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3F631A83DC0FBC6522DF7C62 /* Pods_RunnerTests.framework */; }; + CBBFC818490C1199F67A34ED /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FD747B2193CBA28F4412B052 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,6 +62,7 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 04C81706F163DB08A9043286 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -78,16 +79,15 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 3F631A83DC0FBC6522DF7C62 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 71BD6EA5154E76B5396EE90D /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 74406D118E64F0271B406A7F /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 4A1B61DC13BF467522EE4597 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 586A6D11F96D888385B0EA9B /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 830A7422CDCD433EA41C308D /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - 9111221EFB74204A99FADA45 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - AC73A378F377F50F98A1B559 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - BD2810150294EE7B0861D857 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - C913AD53FEBD6CCC01058575 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + A0B79203F9F4D935EFFD6087 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + C87438A25A0CD5F890E428C0 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + D00064E34BCCC8D640128A17 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + E94C149843CA029E5F4F5034 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + FD747B2193CBA28F4412B052 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - F87322B26DD8D853E9CB39B2 /* Pods_RunnerTests.framework in Frameworks */, + CBBFC818490C1199F67A34ED /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,7 +103,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 34C11F32AC13E549EAC19C9A /* Pods_Runner.framework in Frameworks */, + 23A6231FF418E850358F6441 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -137,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - EDC5819FB59C73891ABAD209 /* Pods */, + 8561B675EC77B28D16492612 /* Pods */, ); sourceTree = ""; }; @@ -185,27 +185,27 @@ path = Runner; sourceTree = ""; }; - D73912EC22F37F3D000D13A0 /* Frameworks */ = { + 8561B675EC77B28D16492612 /* Pods */ = { isa = PBXGroup; children = ( - 9111221EFB74204A99FADA45 /* Pods_Runner.framework */, - 3F631A83DC0FBC6522DF7C62 /* Pods_RunnerTests.framework */, + 4A1B61DC13BF467522EE4597 /* Pods-Runner.debug.xcconfig */, + E94C149843CA029E5F4F5034 /* Pods-Runner.release.xcconfig */, + A0B79203F9F4D935EFFD6087 /* Pods-Runner.profile.xcconfig */, + D00064E34BCCC8D640128A17 /* Pods-RunnerTests.debug.xcconfig */, + C87438A25A0CD5F890E428C0 /* Pods-RunnerTests.release.xcconfig */, + 586A6D11F96D888385B0EA9B /* Pods-RunnerTests.profile.xcconfig */, ); - name = Frameworks; + name = Pods; + path = Pods; sourceTree = ""; }; - EDC5819FB59C73891ABAD209 /* Pods */ = { + D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - C913AD53FEBD6CCC01058575 /* Pods-Runner.debug.xcconfig */, - 74406D118E64F0271B406A7F /* Pods-Runner.release.xcconfig */, - AC73A378F377F50F98A1B559 /* Pods-Runner.profile.xcconfig */, - 71BD6EA5154E76B5396EE90D /* Pods-RunnerTests.debug.xcconfig */, - BD2810150294EE7B0861D857 /* Pods-RunnerTests.release.xcconfig */, - 830A7422CDCD433EA41C308D /* Pods-RunnerTests.profile.xcconfig */, + 04C81706F163DB08A9043286 /* Pods_Runner.framework */, + FD747B2193CBA28F4412B052 /* Pods_RunnerTests.framework */, ); - name = Pods; - path = Pods; + name = Frameworks; sourceTree = ""; }; /* End PBXGroup section */ @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 84A3A37EB6F5F6C593457D11 /* [CP] Check Pods Manifest.lock */, + 4E06478F590845CD93E25872 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - D02496A41717E29108D3EE35 /* [CP] Check Pods Manifest.lock */, + 5F0E69767E8114D2A744FE00 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 1654127F8324C89D6EBD6228 /* [CP] Embed Pods Frameworks */, + 28C6E02EA0C73823A5A69556 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,7 +323,7 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 1654127F8324C89D6EBD6228 /* [CP] Embed Pods Frameworks */ = { + 28C6E02EA0C73823A5A69556 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -378,7 +378,7 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 84A3A37EB6F5F6C593457D11 /* [CP] Check Pods Manifest.lock */ = { + 4E06478F590845CD93E25872 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -400,7 +400,7 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - D02496A41717E29108D3EE35 /* [CP] Check Pods Manifest.lock */ = { + 5F0E69767E8114D2A744FE00 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 71BD6EA5154E76B5396EE90D /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = D00064E34BCCC8D640128A17 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = BD2810150294EE7B0861D857 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = C87438A25A0CD5F890E428C0 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 830A7422CDCD433EA41C308D /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 586A6D11F96D888385B0EA9B /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/ffigen_codelab/step_05/lib/duktape_bindings_generated.dart b/ffigen_codelab/step_05/lib/duktape_bindings_generated.dart index 7579ae6633..0eb041df40 100644 --- a/ffigen_codelab/step_05/lib/duktape_bindings_generated.dart +++ b/ffigen_codelab/step_05/lib/duktape_bindings_generated.dart @@ -4798,18 +4798,9 @@ final class duk_thread_state extends ffi.Struct { external ffi.Array data; } -final class duk_memory_functions extends ffi.Struct { - external duk_alloc_function alloc_func; - - external duk_realloc_function realloc_func; - - external duk_free_function free_func; - - external ffi.Pointer udata; -} - -typedef duk_alloc_function = - ffi.Pointer>; +/// A few types are assumed to always exist. +typedef duk_size_t = ffi.Size; +typedef Dartduk_size_t = int; typedef duk_alloc_functionFunction = ffi.Pointer Function( ffi.Pointer udata, @@ -4820,12 +4811,8 @@ typedef Dartduk_alloc_functionFunction = ffi.Pointer udata, Dartduk_size_t size, ); - -/// A few types are assumed to always exist. -typedef duk_size_t = ffi.Size; -typedef Dartduk_size_t = int; -typedef duk_realloc_function = - ffi.Pointer>; +typedef duk_alloc_function = + ffi.Pointer>; typedef duk_realloc_functionFunction = ffi.Pointer Function( ffi.Pointer udata, @@ -4838,61 +4825,72 @@ typedef Dartduk_realloc_functionFunction = ffi.Pointer ptr, Dartduk_size_t size, ); -typedef duk_free_function = - ffi.Pointer>; +typedef duk_realloc_function = + ffi.Pointer>; typedef duk_free_functionFunction = ffi.Void Function(ffi.Pointer udata, ffi.Pointer ptr); typedef Dartduk_free_functionFunction = void Function(ffi.Pointer udata, ffi.Pointer ptr); +typedef duk_free_function = + ffi.Pointer>; -final class duk_function_list_entry extends ffi.Struct { - external ffi.Pointer key; +final class duk_memory_functions extends ffi.Struct { + external duk_alloc_function alloc_func; - external duk_c_function value; + external duk_realloc_function realloc_func; - @duk_idx_t() - external int nargs; + external duk_free_function free_func; + + external ffi.Pointer udata; } -typedef duk_c_function = - ffi.Pointer>; -typedef duk_c_functionFunction = - duk_ret_t Function(ffi.Pointer ctx); -typedef Dartduk_c_functionFunction = - Dartduk_small_int_t Function(ffi.Pointer ctx); +/// Small integers (16 bits or more) can fall back to the 'int' type, but +/// have a typedef so they are marked "small" explicitly. +typedef duk_small_int_t = ffi.Int; +typedef Dartduk_small_int_t = int; /// Duktape/C function return value, platform int is enough for now to /// represent 0, 1, or negative error code. Must be compatible with /// assigning truth values (e.g. duk_ret_t rc = (foo == bar);). typedef duk_ret_t = duk_small_int_t; -/// Small integers (16 bits or more) can fall back to the 'int' type, but -/// have a typedef so they are marked "small" explicitly. -typedef duk_small_int_t = ffi.Int; -typedef Dartduk_small_int_t = int; +final class duk_hthread extends ffi.Opaque {} /// Type used in public API declarations and user code. Typedef maps to /// 'struct duk_hthread' like the 'duk_hthread' typedef which is used /// exclusively in internals. typedef duk_context = duk_hthread; - -final class duk_hthread extends ffi.Opaque {} +typedef duk_c_functionFunction = + duk_ret_t Function(ffi.Pointer ctx); +typedef Dartduk_c_functionFunction = + Dartduk_small_int_t Function(ffi.Pointer ctx); +typedef duk_c_function = + ffi.Pointer>; +typedef duk_int_t = ffi.Int; +typedef Dartduk_int_t = int; /// Index values must have at least 32-bit signed range. typedef duk_idx_t = duk_int_t; -typedef duk_int_t = ffi.Int; -typedef Dartduk_int_t = int; -final class duk_number_list_entry extends ffi.Struct { +final class duk_function_list_entry extends ffi.Struct { external ffi.Pointer key; - @duk_double_t() - external double value; + external duk_c_function value; + + @duk_idx_t() + external int nargs; } typedef duk_double_t = ffi.Double; typedef Dartduk_double_t = double; +final class duk_number_list_entry extends ffi.Struct { + external ffi.Pointer key; + + @duk_double_t() + external double value; +} + final class duk_time_components extends ffi.Struct { /// year, e.g. 2016, ECMAScript year range @duk_double_t() @@ -4927,41 +4925,12 @@ final class duk_time_components extends ffi.Struct { external double weekday; } -typedef duk_fatal_function = - ffi.Pointer>; typedef duk_fatal_functionFunction = ffi.Void Function(ffi.Pointer udata, ffi.Pointer msg); typedef Dartduk_fatal_functionFunction = void Function(ffi.Pointer udata, ffi.Pointer msg); -typedef duk_uint_t = ffi.UnsignedInt; -typedef Dartduk_uint_t = int; - -/// Error codes are represented with platform int. High bits are used -/// for flags and such, so 32 bits are needed. -typedef duk_errcode_t = duk_int_t; -typedef va_list = __builtin_va_list; -typedef __builtin_va_list = ffi.Pointer; - -/// Boolean values are represented with the platform 'unsigned int'. -typedef duk_bool_t = duk_small_uint_t; -typedef duk_small_uint_t = ffi.UnsignedInt; -typedef Dartduk_small_uint_t = int; -typedef duk_int32_t = ffi.Int32; -typedef Dartduk_int32_t = int; -typedef duk_uint32_t = ffi.Uint32; -typedef Dartduk_uint32_t = int; -typedef duk_uint16_t = ffi.Uint16; -typedef Dartduk_uint16_t = int; - -/// Array index values, could be exact 32 bits. -/// Currently no need for signed duk_arridx_t. -typedef duk_uarridx_t = duk_uint_t; -typedef duk_decode_char_function = - ffi.Pointer>; -typedef duk_decode_char_functionFunction = - ffi.Void Function(ffi.Pointer udata, duk_codepoint_t codepoint); -typedef Dartduk_decode_char_functionFunction = - void Function(ffi.Pointer udata, Dartduk_int_t codepoint); +typedef duk_fatal_function = + ffi.Pointer>; /// Codepoint type. Must be 32 bits or more because it is used also for /// internal codepoints. The type is signed because negative codepoints @@ -4970,8 +4939,12 @@ typedef Dartduk_decode_char_functionFunction = /// ensure duk_uint32_t casts back and forth nicely. Almost everything /// else uses the signed one. typedef duk_codepoint_t = duk_int_t; -typedef duk_map_char_function = - ffi.Pointer>; +typedef duk_decode_char_functionFunction = + ffi.Void Function(ffi.Pointer udata, duk_codepoint_t codepoint); +typedef Dartduk_decode_char_functionFunction = + void Function(ffi.Pointer udata, Dartduk_int_t codepoint); +typedef duk_decode_char_function = + ffi.Pointer>; typedef duk_map_char_functionFunction = duk_codepoint_t Function( ffi.Pointer udata, @@ -4982,8 +4955,8 @@ typedef Dartduk_map_char_functionFunction = ffi.Pointer udata, Dartduk_int_t codepoint, ); -typedef duk_safe_call_function = - ffi.Pointer>; +typedef duk_map_char_function = + ffi.Pointer>; typedef duk_safe_call_functionFunction = duk_ret_t Function( ffi.Pointer ctx, @@ -4994,8 +4967,8 @@ typedef Dartduk_safe_call_functionFunction = ffi.Pointer ctx, ffi.Pointer udata, ); -typedef duk_debug_read_function = - ffi.Pointer>; +typedef duk_safe_call_function = + ffi.Pointer>; typedef duk_debug_read_functionFunction = duk_size_t Function( ffi.Pointer udata, @@ -5008,8 +4981,8 @@ typedef Dartduk_debug_read_functionFunction = ffi.Pointer buffer, Dartduk_size_t length, ); -typedef duk_debug_write_function = - ffi.Pointer>; +typedef duk_debug_read_function = + ffi.Pointer>; typedef duk_debug_write_functionFunction = duk_size_t Function( ffi.Pointer udata, @@ -5022,26 +4995,26 @@ typedef Dartduk_debug_write_functionFunction = ffi.Pointer buffer, Dartduk_size_t length, ); -typedef duk_debug_peek_function = - ffi.Pointer>; +typedef duk_debug_write_function = + ffi.Pointer>; typedef duk_debug_peek_functionFunction = duk_size_t Function(ffi.Pointer udata); typedef Dartduk_debug_peek_functionFunction = Dartduk_size_t Function(ffi.Pointer udata); -typedef duk_debug_read_flush_function = - ffi.Pointer>; +typedef duk_debug_peek_function = + ffi.Pointer>; typedef duk_debug_read_flush_functionFunction = ffi.Void Function(ffi.Pointer udata); typedef Dartduk_debug_read_flush_functionFunction = void Function(ffi.Pointer udata); -typedef duk_debug_write_flush_function = - ffi.Pointer>; +typedef duk_debug_read_flush_function = + ffi.Pointer>; typedef duk_debug_write_flush_functionFunction = ffi.Void Function(ffi.Pointer udata); typedef Dartduk_debug_write_flush_functionFunction = void Function(ffi.Pointer udata); -typedef duk_debug_request_function = - ffi.Pointer>; +typedef duk_debug_write_flush_function = + ffi.Pointer>; typedef duk_debug_request_functionFunction = duk_idx_t Function( ffi.Pointer ctx, @@ -5054,8 +5027,8 @@ typedef Dartduk_debug_request_functionFunction = ffi.Pointer udata, Dartduk_int_t nvalues, ); -typedef duk_debug_detached_function = - ffi.Pointer>; +typedef duk_debug_request_function = + ffi.Pointer>; typedef duk_debug_detached_functionFunction = ffi.Void Function( ffi.Pointer ctx, @@ -5063,6 +5036,31 @@ typedef duk_debug_detached_functionFunction = ); typedef Dartduk_debug_detached_functionFunction = void Function(ffi.Pointer ctx, ffi.Pointer udata); +typedef duk_debug_detached_function = + ffi.Pointer>; +typedef duk_uint_t = ffi.UnsignedInt; +typedef Dartduk_uint_t = int; + +/// Error codes are represented with platform int. High bits are used +/// for flags and such, so 32 bits are needed. +typedef duk_errcode_t = duk_int_t; +typedef __builtin_va_list = ffi.Pointer; +typedef va_list = __builtin_va_list; +typedef duk_small_uint_t = ffi.UnsignedInt; +typedef Dartduk_small_uint_t = int; + +/// Boolean values are represented with the platform 'unsigned int'. +typedef duk_bool_t = duk_small_uint_t; +typedef duk_int32_t = ffi.Int32; +typedef Dartduk_int32_t = int; +typedef duk_uint32_t = ffi.Uint32; +typedef Dartduk_uint32_t = int; +typedef duk_uint16_t = ffi.Uint16; +typedef Dartduk_uint16_t = int; + +/// Array index values, could be exact 32 bits. +/// Currently no need for signed duk_arridx_t. +typedef duk_uarridx_t = duk_uint_t; const int DUK_VERSION = 20700; diff --git a/ffigen_codelab/step_05/pubspec.yaml b/ffigen_codelab/step_05/pubspec.yaml index e72ef0d828..4cf9be4511 100644 --- a/ffigen_codelab/step_05/pubspec.yaml +++ b/ffigen_codelab/step_05/pubspec.yaml @@ -14,7 +14,7 @@ dependencies: plugin_platform_interface: ^2.0.2 dev_dependencies: - ffigen: ^15.0.0 + ffigen: ^16.0.0 flutter_test: sdk: flutter flutter_lints: ^5.0.0 diff --git a/ffigen_codelab/step_06/android/build.gradle b/ffigen_codelab/step_06/android/build.gradle index 09a2474ff1..adff069975 100644 --- a/ffigen_codelab/step_06/android/build.gradle +++ b/ffigen_codelab/step_06/android/build.gradle @@ -11,7 +11,7 @@ buildscript { dependencies { // The Android Gradle Plugin knows how to build native code with the NDK. - classpath("com.android.tools.build:gradle:8.1.0") + classpath("com.android.tools.build:gradle:8.7.0") } } @@ -25,9 +25,7 @@ rootProject.allprojects { apply plugin: "com.android.library" android { - if (project.android.hasProperty("namespace")) { - namespace = "com.example.ffigen_app" - } + namespace = "com.example.ffigen_app" // Bumping the plugin compileSdk version requires all clients of this plugin // to bump the version in their app. @@ -55,8 +53,8 @@ android { } compileOptions { - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 + sourceCompatibility = JavaVersion.VERSION_11 + targetCompatibility = JavaVersion.VERSION_11 } defaultConfig { diff --git a/ffigen_codelab/step_07/example/android/app/build.gradle b/ffigen_codelab/step_06/example/android/app/build.gradle.kts similarity index 84% rename from ffigen_codelab/step_07/example/android/app/build.gradle rename to ffigen_codelab/step_06/example/android/app/build.gradle.kts index 858c9239e7..225c36472e 100644 --- a/ffigen_codelab/step_07/example/android/app/build.gradle +++ b/ffigen_codelab/step_06/example/android/app/build.gradle.kts @@ -1,8 +1,8 @@ plugins { - id "com.android.application" - id "kotlin-android" + id("com.android.application") + id("kotlin-android") // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. - id "dev.flutter.flutter-gradle-plugin" + id("dev.flutter.flutter-gradle-plugin") } android { @@ -16,7 +16,7 @@ android { } kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8 + jvmTarget = JavaVersion.VERSION_1_8.toString() } defaultConfig { @@ -34,7 +34,7 @@ android { release { // TODO: Add your own signing config for the release build. // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig = signingConfigs.debug + signingConfig = signingConfigs.getByName("debug") } } } diff --git a/ffigen_codelab/step_06/example/android/build.gradle b/ffigen_codelab/step_06/example/android/build.gradle deleted file mode 100644 index d2ffbffa4c..0000000000 --- a/ffigen_codelab/step_06/example/android/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = "../build" -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(":app") -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/ffigen_codelab/step_06/example/android/build.gradle.kts b/ffigen_codelab/step_06/example/android/build.gradle.kts new file mode 100644 index 0000000000..89176ef44e --- /dev/null +++ b/ffigen_codelab/step_06/example/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/ffigen_codelab/step_06/example/android/gradle.properties b/ffigen_codelab/step_06/example/android/gradle.properties index 2597170821..f018a61817 100644 --- a/ffigen_codelab/step_06/example/android/gradle.properties +++ b/ffigen_codelab/step_06/example/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/ffigen_codelab/step_06/example/android/gradle/wrapper/gradle-wrapper.properties b/ffigen_codelab/step_06/example/android/gradle/wrapper/gradle-wrapper.properties index 7bb2df6ba6..afa1e8eb0a 100644 --- a/ffigen_codelab/step_06/example/android/gradle/wrapper/gradle-wrapper.properties +++ b/ffigen_codelab/step_06/example/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip diff --git a/ffigen_codelab/step_06/example/android/settings.gradle b/ffigen_codelab/step_06/example/android/settings.gradle deleted file mode 100644 index b9e43bd376..0000000000 --- a/ffigen_codelab/step_06/example/android/settings.gradle +++ /dev/null @@ -1,25 +0,0 @@ -pluginManagement { - def flutterSdkPath = { - def properties = new Properties() - file("local.properties").withInputStream { properties.load(it) } - def flutterSdkPath = properties.getProperty("flutter.sdk") - assert flutterSdkPath != null, "flutter.sdk not set in local.properties" - return flutterSdkPath - }() - - includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") - - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} - -plugins { - id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.1.0" apply false - id "org.jetbrains.kotlin.android" version "1.8.22" apply false -} - -include ":app" diff --git a/ffigen_codelab/step_06/example/android/settings.gradle.kts b/ffigen_codelab/step_06/example/android/settings.gradle.kts new file mode 100644 index 0000000000..a439442c20 --- /dev/null +++ b/ffigen_codelab/step_06/example/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.0" apply false + id("org.jetbrains.kotlin.android") version "1.8.22" apply false +} + +include(":app") diff --git a/ffigen_codelab/step_06/example/ios/Podfile b/ffigen_codelab/step_06/example/ios/Podfile index d97f17e223..e549ee22f3 100644 --- a/ffigen_codelab/step_06/example/ios/Podfile +++ b/ffigen_codelab/step_06/example/ios/Podfile @@ -29,7 +29,6 @@ flutter_ios_podfile_setup target 'Runner' do use_frameworks! - use_modular_headers! flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) target 'RunnerTests' do diff --git a/ffigen_codelab/step_06/example/ios/Runner.xcodeproj/project.pbxproj b/ffigen_codelab/step_06/example/ios/Runner.xcodeproj/project.pbxproj index c92da01762..56cfc32ab5 100644 --- a/ffigen_codelab/step_06/example/ios/Runner.xcodeproj/project.pbxproj +++ b/ffigen_codelab/step_06/example/ios/Runner.xcodeproj/project.pbxproj @@ -7,15 +7,15 @@ objects = { /* Begin PBXBuildFile section */ + 044F9546D51B393B0B020A22 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 737403045BF1B572BF3D78CE /* Pods_Runner.framework */; }; 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; + 23ABC77C023C46FFD093136C /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A3C54131D13247ABAE830E17 /* Pods_RunnerTests.framework */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; - 35C2CDB992BA71FF454706DA /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 246CD2A9C634D9DCB84C492B /* Pods_Runner.framework */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - E29460EE2F58B491AE1B7420 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7B9B3B203B051AA61D71708D /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -44,18 +44,16 @@ /* Begin PBXFileReference section */ 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 246CD2A9C634D9DCB84C492B /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 252C44AFA3F33C974291B8BE /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - 26082E8AF6245A022710FD35 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; + 53845C6BF36C2E5E9E3A5035 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 5F9346421AC22D5E5E320F4D /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 6C3E075EA861EAC2C9A65FC3 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 737403045BF1B572BF3D78CE /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 7B9B3B203B051AA61D71708D /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 7CDD9C80886B67FDD2457CED /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - 83FDFB5C26D8493094669E02 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -63,24 +61,26 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - A8FCCC20319F4779C587CA5D /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - AA3048732925F51D849F53E6 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + A3C54131D13247ABAE830E17 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + B9FE39C60B6C92CCBE46C781 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + BACB0A29AC8EE89321B84F49 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + FB125CF693F2D6150B5BB74D /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 4B97B91A1F54FFB579CD55FC /* Frameworks */ = { + 97C146EB1CF9000F007C117D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - E29460EE2F58B491AE1B7420 /* Pods_RunnerTests.framework in Frameworks */, + 044F9546D51B393B0B020A22 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 97C146EB1CF9000F007C117D /* Frameworks */ = { + 99B38960C7964E4DF6303B2A /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 35C2CDB992BA71FF454706DA /* Pods_Runner.framework in Frameworks */, + 23ABC77C023C46FFD093136C /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -95,20 +95,6 @@ path = RunnerTests; sourceTree = ""; }; - 8F8C07E618915BEA66718CB1 /* Pods */ = { - isa = PBXGroup; - children = ( - 26082E8AF6245A022710FD35 /* Pods-Runner.debug.xcconfig */, - 83FDFB5C26D8493094669E02 /* Pods-Runner.release.xcconfig */, - 7CDD9C80886B67FDD2457CED /* Pods-Runner.profile.xcconfig */, - A8FCCC20319F4779C587CA5D /* Pods-RunnerTests.debug.xcconfig */, - AA3048732925F51D849F53E6 /* Pods-RunnerTests.release.xcconfig */, - 252C44AFA3F33C974291B8BE /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( @@ -127,8 +113,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - 8F8C07E618915BEA66718CB1 /* Pods */, - AAE566CDF0EA1C0DFD383D83 /* Frameworks */, + 99FF07FFDFF8D2980D00FD89 /* Pods */, + C5708B7978C43768F608998E /* Frameworks */, ); sourceTree = ""; }; @@ -156,11 +142,25 @@ path = Runner; sourceTree = ""; }; - AAE566CDF0EA1C0DFD383D83 /* Frameworks */ = { + 99FF07FFDFF8D2980D00FD89 /* Pods */ = { + isa = PBXGroup; + children = ( + 6C3E075EA861EAC2C9A65FC3 /* Pods-Runner.debug.xcconfig */, + FB125CF693F2D6150B5BB74D /* Pods-Runner.release.xcconfig */, + BACB0A29AC8EE89321B84F49 /* Pods-Runner.profile.xcconfig */, + 53845C6BF36C2E5E9E3A5035 /* Pods-RunnerTests.debug.xcconfig */, + B9FE39C60B6C92CCBE46C781 /* Pods-RunnerTests.release.xcconfig */, + 5F9346421AC22D5E5E320F4D /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; + C5708B7978C43768F608998E /* Frameworks */ = { isa = PBXGroup; children = ( - 246CD2A9C634D9DCB84C492B /* Pods_Runner.framework */, - 7B9B3B203B051AA61D71708D /* Pods_RunnerTests.framework */, + 737403045BF1B572BF3D78CE /* Pods_Runner.framework */, + A3C54131D13247ABAE830E17 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 3A1AE33A8C0CA1C146B254EA /* [CP] Check Pods Manifest.lock */, + 012E12F8DDA59CCC3C74FACC /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 4B97B91A1F54FFB579CD55FC /* Frameworks */, + 99B38960C7964E4DF6303B2A /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - CE5503F89FD8B6227DC56BBE /* [CP] Check Pods Manifest.lock */, + 2A249B9D5FFFA2F89090A593 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - ECE47E0D65094DD667AA5D03 /* [CP] Embed Pods Frameworks */, + 4300EFEAE8DBCC0B4183ADFA /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -270,7 +270,7 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 3A1AE33A8C0CA1C146B254EA /* [CP] Check Pods Manifest.lock */ = { + 012E12F8DDA59CCC3C74FACC /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -292,75 +292,75 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + 2A249B9D5FFFA2F89090A593 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( - "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "Thin Binary"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); - name = "Run Script"; + name = "Thin Binary"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - CE5503F89FD8B6227DC56BBE /* [CP] Check Pods Manifest.lock */ = { + 4300EFEAE8DBCC0B4183ADFA /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - ECE47E0D65094DD667AA5D03 /* [CP] Embed Pods Frameworks */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + inputPaths = ( ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + name = "Run Script"; + outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; /* End PBXShellScriptBuildPhase section */ @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = A8FCCC20319F4779C587CA5D /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 53845C6BF36C2E5E9E3A5035 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = AA3048732925F51D849F53E6 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = B9FE39C60B6C92CCBE46C781 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 252C44AFA3F33C974291B8BE /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 5F9346421AC22D5E5E320F4D /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/ffigen_codelab/step_06/example/macos/Podfile b/ffigen_codelab/step_06/example/macos/Podfile index c795730db8..29c8eb3294 100644 --- a/ffigen_codelab/step_06/example/macos/Podfile +++ b/ffigen_codelab/step_06/example/macos/Podfile @@ -28,7 +28,6 @@ flutter_macos_podfile_setup target 'Runner' do use_frameworks! - use_modular_headers! flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__)) target 'RunnerTests' do diff --git a/ffigen_codelab/step_06/example/macos/Runner.xcodeproj/project.pbxproj b/ffigen_codelab/step_06/example/macos/Runner.xcodeproj/project.pbxproj index 5d066c56cd..5011175dbe 100644 --- a/ffigen_codelab/step_06/example/macos/Runner.xcodeproj/project.pbxproj +++ b/ffigen_codelab/step_06/example/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ + 23A6231FF418E850358F6441 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 04C81706F163DB08A9043286 /* Pods_Runner.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 34C11F32AC13E549EAC19C9A /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9111221EFB74204A99FADA45 /* Pods_Runner.framework */; }; - F87322B26DD8D853E9CB39B2 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3F631A83DC0FBC6522DF7C62 /* Pods_RunnerTests.framework */; }; + CBBFC818490C1199F67A34ED /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FD747B2193CBA28F4412B052 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,6 +62,7 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 04C81706F163DB08A9043286 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -78,16 +79,15 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 3F631A83DC0FBC6522DF7C62 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 71BD6EA5154E76B5396EE90D /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 74406D118E64F0271B406A7F /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 4A1B61DC13BF467522EE4597 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 586A6D11F96D888385B0EA9B /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 830A7422CDCD433EA41C308D /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - 9111221EFB74204A99FADA45 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - AC73A378F377F50F98A1B559 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - BD2810150294EE7B0861D857 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - C913AD53FEBD6CCC01058575 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + A0B79203F9F4D935EFFD6087 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + C87438A25A0CD5F890E428C0 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + D00064E34BCCC8D640128A17 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + E94C149843CA029E5F4F5034 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + FD747B2193CBA28F4412B052 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - F87322B26DD8D853E9CB39B2 /* Pods_RunnerTests.framework in Frameworks */, + CBBFC818490C1199F67A34ED /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,7 +103,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 34C11F32AC13E549EAC19C9A /* Pods_Runner.framework in Frameworks */, + 23A6231FF418E850358F6441 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -137,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - EDC5819FB59C73891ABAD209 /* Pods */, + 8561B675EC77B28D16492612 /* Pods */, ); sourceTree = ""; }; @@ -185,27 +185,27 @@ path = Runner; sourceTree = ""; }; - D73912EC22F37F3D000D13A0 /* Frameworks */ = { + 8561B675EC77B28D16492612 /* Pods */ = { isa = PBXGroup; children = ( - 9111221EFB74204A99FADA45 /* Pods_Runner.framework */, - 3F631A83DC0FBC6522DF7C62 /* Pods_RunnerTests.framework */, + 4A1B61DC13BF467522EE4597 /* Pods-Runner.debug.xcconfig */, + E94C149843CA029E5F4F5034 /* Pods-Runner.release.xcconfig */, + A0B79203F9F4D935EFFD6087 /* Pods-Runner.profile.xcconfig */, + D00064E34BCCC8D640128A17 /* Pods-RunnerTests.debug.xcconfig */, + C87438A25A0CD5F890E428C0 /* Pods-RunnerTests.release.xcconfig */, + 586A6D11F96D888385B0EA9B /* Pods-RunnerTests.profile.xcconfig */, ); - name = Frameworks; + name = Pods; + path = Pods; sourceTree = ""; }; - EDC5819FB59C73891ABAD209 /* Pods */ = { + D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - C913AD53FEBD6CCC01058575 /* Pods-Runner.debug.xcconfig */, - 74406D118E64F0271B406A7F /* Pods-Runner.release.xcconfig */, - AC73A378F377F50F98A1B559 /* Pods-Runner.profile.xcconfig */, - 71BD6EA5154E76B5396EE90D /* Pods-RunnerTests.debug.xcconfig */, - BD2810150294EE7B0861D857 /* Pods-RunnerTests.release.xcconfig */, - 830A7422CDCD433EA41C308D /* Pods-RunnerTests.profile.xcconfig */, + 04C81706F163DB08A9043286 /* Pods_Runner.framework */, + FD747B2193CBA28F4412B052 /* Pods_RunnerTests.framework */, ); - name = Pods; - path = Pods; + name = Frameworks; sourceTree = ""; }; /* End PBXGroup section */ @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 84A3A37EB6F5F6C593457D11 /* [CP] Check Pods Manifest.lock */, + 4E06478F590845CD93E25872 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - D02496A41717E29108D3EE35 /* [CP] Check Pods Manifest.lock */, + 5F0E69767E8114D2A744FE00 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 1654127F8324C89D6EBD6228 /* [CP] Embed Pods Frameworks */, + 28C6E02EA0C73823A5A69556 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,7 +323,7 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 1654127F8324C89D6EBD6228 /* [CP] Embed Pods Frameworks */ = { + 28C6E02EA0C73823A5A69556 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -378,7 +378,7 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 84A3A37EB6F5F6C593457D11 /* [CP] Check Pods Manifest.lock */ = { + 4E06478F590845CD93E25872 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -400,7 +400,7 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - D02496A41717E29108D3EE35 /* [CP] Check Pods Manifest.lock */ = { + 5F0E69767E8114D2A744FE00 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 71BD6EA5154E76B5396EE90D /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = D00064E34BCCC8D640128A17 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = BD2810150294EE7B0861D857 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = C87438A25A0CD5F890E428C0 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 830A7422CDCD433EA41C308D /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 586A6D11F96D888385B0EA9B /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/ffigen_codelab/step_06/lib/duktape_bindings_generated.dart b/ffigen_codelab/step_06/lib/duktape_bindings_generated.dart index 7579ae6633..0eb041df40 100644 --- a/ffigen_codelab/step_06/lib/duktape_bindings_generated.dart +++ b/ffigen_codelab/step_06/lib/duktape_bindings_generated.dart @@ -4798,18 +4798,9 @@ final class duk_thread_state extends ffi.Struct { external ffi.Array data; } -final class duk_memory_functions extends ffi.Struct { - external duk_alloc_function alloc_func; - - external duk_realloc_function realloc_func; - - external duk_free_function free_func; - - external ffi.Pointer udata; -} - -typedef duk_alloc_function = - ffi.Pointer>; +/// A few types are assumed to always exist. +typedef duk_size_t = ffi.Size; +typedef Dartduk_size_t = int; typedef duk_alloc_functionFunction = ffi.Pointer Function( ffi.Pointer udata, @@ -4820,12 +4811,8 @@ typedef Dartduk_alloc_functionFunction = ffi.Pointer udata, Dartduk_size_t size, ); - -/// A few types are assumed to always exist. -typedef duk_size_t = ffi.Size; -typedef Dartduk_size_t = int; -typedef duk_realloc_function = - ffi.Pointer>; +typedef duk_alloc_function = + ffi.Pointer>; typedef duk_realloc_functionFunction = ffi.Pointer Function( ffi.Pointer udata, @@ -4838,61 +4825,72 @@ typedef Dartduk_realloc_functionFunction = ffi.Pointer ptr, Dartduk_size_t size, ); -typedef duk_free_function = - ffi.Pointer>; +typedef duk_realloc_function = + ffi.Pointer>; typedef duk_free_functionFunction = ffi.Void Function(ffi.Pointer udata, ffi.Pointer ptr); typedef Dartduk_free_functionFunction = void Function(ffi.Pointer udata, ffi.Pointer ptr); +typedef duk_free_function = + ffi.Pointer>; -final class duk_function_list_entry extends ffi.Struct { - external ffi.Pointer key; +final class duk_memory_functions extends ffi.Struct { + external duk_alloc_function alloc_func; - external duk_c_function value; + external duk_realloc_function realloc_func; - @duk_idx_t() - external int nargs; + external duk_free_function free_func; + + external ffi.Pointer udata; } -typedef duk_c_function = - ffi.Pointer>; -typedef duk_c_functionFunction = - duk_ret_t Function(ffi.Pointer ctx); -typedef Dartduk_c_functionFunction = - Dartduk_small_int_t Function(ffi.Pointer ctx); +/// Small integers (16 bits or more) can fall back to the 'int' type, but +/// have a typedef so they are marked "small" explicitly. +typedef duk_small_int_t = ffi.Int; +typedef Dartduk_small_int_t = int; /// Duktape/C function return value, platform int is enough for now to /// represent 0, 1, or negative error code. Must be compatible with /// assigning truth values (e.g. duk_ret_t rc = (foo == bar);). typedef duk_ret_t = duk_small_int_t; -/// Small integers (16 bits or more) can fall back to the 'int' type, but -/// have a typedef so they are marked "small" explicitly. -typedef duk_small_int_t = ffi.Int; -typedef Dartduk_small_int_t = int; +final class duk_hthread extends ffi.Opaque {} /// Type used in public API declarations and user code. Typedef maps to /// 'struct duk_hthread' like the 'duk_hthread' typedef which is used /// exclusively in internals. typedef duk_context = duk_hthread; - -final class duk_hthread extends ffi.Opaque {} +typedef duk_c_functionFunction = + duk_ret_t Function(ffi.Pointer ctx); +typedef Dartduk_c_functionFunction = + Dartduk_small_int_t Function(ffi.Pointer ctx); +typedef duk_c_function = + ffi.Pointer>; +typedef duk_int_t = ffi.Int; +typedef Dartduk_int_t = int; /// Index values must have at least 32-bit signed range. typedef duk_idx_t = duk_int_t; -typedef duk_int_t = ffi.Int; -typedef Dartduk_int_t = int; -final class duk_number_list_entry extends ffi.Struct { +final class duk_function_list_entry extends ffi.Struct { external ffi.Pointer key; - @duk_double_t() - external double value; + external duk_c_function value; + + @duk_idx_t() + external int nargs; } typedef duk_double_t = ffi.Double; typedef Dartduk_double_t = double; +final class duk_number_list_entry extends ffi.Struct { + external ffi.Pointer key; + + @duk_double_t() + external double value; +} + final class duk_time_components extends ffi.Struct { /// year, e.g. 2016, ECMAScript year range @duk_double_t() @@ -4927,41 +4925,12 @@ final class duk_time_components extends ffi.Struct { external double weekday; } -typedef duk_fatal_function = - ffi.Pointer>; typedef duk_fatal_functionFunction = ffi.Void Function(ffi.Pointer udata, ffi.Pointer msg); typedef Dartduk_fatal_functionFunction = void Function(ffi.Pointer udata, ffi.Pointer msg); -typedef duk_uint_t = ffi.UnsignedInt; -typedef Dartduk_uint_t = int; - -/// Error codes are represented with platform int. High bits are used -/// for flags and such, so 32 bits are needed. -typedef duk_errcode_t = duk_int_t; -typedef va_list = __builtin_va_list; -typedef __builtin_va_list = ffi.Pointer; - -/// Boolean values are represented with the platform 'unsigned int'. -typedef duk_bool_t = duk_small_uint_t; -typedef duk_small_uint_t = ffi.UnsignedInt; -typedef Dartduk_small_uint_t = int; -typedef duk_int32_t = ffi.Int32; -typedef Dartduk_int32_t = int; -typedef duk_uint32_t = ffi.Uint32; -typedef Dartduk_uint32_t = int; -typedef duk_uint16_t = ffi.Uint16; -typedef Dartduk_uint16_t = int; - -/// Array index values, could be exact 32 bits. -/// Currently no need for signed duk_arridx_t. -typedef duk_uarridx_t = duk_uint_t; -typedef duk_decode_char_function = - ffi.Pointer>; -typedef duk_decode_char_functionFunction = - ffi.Void Function(ffi.Pointer udata, duk_codepoint_t codepoint); -typedef Dartduk_decode_char_functionFunction = - void Function(ffi.Pointer udata, Dartduk_int_t codepoint); +typedef duk_fatal_function = + ffi.Pointer>; /// Codepoint type. Must be 32 bits or more because it is used also for /// internal codepoints. The type is signed because negative codepoints @@ -4970,8 +4939,12 @@ typedef Dartduk_decode_char_functionFunction = /// ensure duk_uint32_t casts back and forth nicely. Almost everything /// else uses the signed one. typedef duk_codepoint_t = duk_int_t; -typedef duk_map_char_function = - ffi.Pointer>; +typedef duk_decode_char_functionFunction = + ffi.Void Function(ffi.Pointer udata, duk_codepoint_t codepoint); +typedef Dartduk_decode_char_functionFunction = + void Function(ffi.Pointer udata, Dartduk_int_t codepoint); +typedef duk_decode_char_function = + ffi.Pointer>; typedef duk_map_char_functionFunction = duk_codepoint_t Function( ffi.Pointer udata, @@ -4982,8 +4955,8 @@ typedef Dartduk_map_char_functionFunction = ffi.Pointer udata, Dartduk_int_t codepoint, ); -typedef duk_safe_call_function = - ffi.Pointer>; +typedef duk_map_char_function = + ffi.Pointer>; typedef duk_safe_call_functionFunction = duk_ret_t Function( ffi.Pointer ctx, @@ -4994,8 +4967,8 @@ typedef Dartduk_safe_call_functionFunction = ffi.Pointer ctx, ffi.Pointer udata, ); -typedef duk_debug_read_function = - ffi.Pointer>; +typedef duk_safe_call_function = + ffi.Pointer>; typedef duk_debug_read_functionFunction = duk_size_t Function( ffi.Pointer udata, @@ -5008,8 +4981,8 @@ typedef Dartduk_debug_read_functionFunction = ffi.Pointer buffer, Dartduk_size_t length, ); -typedef duk_debug_write_function = - ffi.Pointer>; +typedef duk_debug_read_function = + ffi.Pointer>; typedef duk_debug_write_functionFunction = duk_size_t Function( ffi.Pointer udata, @@ -5022,26 +4995,26 @@ typedef Dartduk_debug_write_functionFunction = ffi.Pointer buffer, Dartduk_size_t length, ); -typedef duk_debug_peek_function = - ffi.Pointer>; +typedef duk_debug_write_function = + ffi.Pointer>; typedef duk_debug_peek_functionFunction = duk_size_t Function(ffi.Pointer udata); typedef Dartduk_debug_peek_functionFunction = Dartduk_size_t Function(ffi.Pointer udata); -typedef duk_debug_read_flush_function = - ffi.Pointer>; +typedef duk_debug_peek_function = + ffi.Pointer>; typedef duk_debug_read_flush_functionFunction = ffi.Void Function(ffi.Pointer udata); typedef Dartduk_debug_read_flush_functionFunction = void Function(ffi.Pointer udata); -typedef duk_debug_write_flush_function = - ffi.Pointer>; +typedef duk_debug_read_flush_function = + ffi.Pointer>; typedef duk_debug_write_flush_functionFunction = ffi.Void Function(ffi.Pointer udata); typedef Dartduk_debug_write_flush_functionFunction = void Function(ffi.Pointer udata); -typedef duk_debug_request_function = - ffi.Pointer>; +typedef duk_debug_write_flush_function = + ffi.Pointer>; typedef duk_debug_request_functionFunction = duk_idx_t Function( ffi.Pointer ctx, @@ -5054,8 +5027,8 @@ typedef Dartduk_debug_request_functionFunction = ffi.Pointer udata, Dartduk_int_t nvalues, ); -typedef duk_debug_detached_function = - ffi.Pointer>; +typedef duk_debug_request_function = + ffi.Pointer>; typedef duk_debug_detached_functionFunction = ffi.Void Function( ffi.Pointer ctx, @@ -5063,6 +5036,31 @@ typedef duk_debug_detached_functionFunction = ); typedef Dartduk_debug_detached_functionFunction = void Function(ffi.Pointer ctx, ffi.Pointer udata); +typedef duk_debug_detached_function = + ffi.Pointer>; +typedef duk_uint_t = ffi.UnsignedInt; +typedef Dartduk_uint_t = int; + +/// Error codes are represented with platform int. High bits are used +/// for flags and such, so 32 bits are needed. +typedef duk_errcode_t = duk_int_t; +typedef __builtin_va_list = ffi.Pointer; +typedef va_list = __builtin_va_list; +typedef duk_small_uint_t = ffi.UnsignedInt; +typedef Dartduk_small_uint_t = int; + +/// Boolean values are represented with the platform 'unsigned int'. +typedef duk_bool_t = duk_small_uint_t; +typedef duk_int32_t = ffi.Int32; +typedef Dartduk_int32_t = int; +typedef duk_uint32_t = ffi.Uint32; +typedef Dartduk_uint32_t = int; +typedef duk_uint16_t = ffi.Uint16; +typedef Dartduk_uint16_t = int; + +/// Array index values, could be exact 32 bits. +/// Currently no need for signed duk_arridx_t. +typedef duk_uarridx_t = duk_uint_t; const int DUK_VERSION = 20700; diff --git a/ffigen_codelab/step_06/pubspec.yaml b/ffigen_codelab/step_06/pubspec.yaml index e72ef0d828..4cf9be4511 100644 --- a/ffigen_codelab/step_06/pubspec.yaml +++ b/ffigen_codelab/step_06/pubspec.yaml @@ -14,7 +14,7 @@ dependencies: plugin_platform_interface: ^2.0.2 dev_dependencies: - ffigen: ^15.0.0 + ffigen: ^16.0.0 flutter_test: sdk: flutter flutter_lints: ^5.0.0 diff --git a/ffigen_codelab/step_07/android/build.gradle b/ffigen_codelab/step_07/android/build.gradle index 09a2474ff1..adff069975 100644 --- a/ffigen_codelab/step_07/android/build.gradle +++ b/ffigen_codelab/step_07/android/build.gradle @@ -11,7 +11,7 @@ buildscript { dependencies { // The Android Gradle Plugin knows how to build native code with the NDK. - classpath("com.android.tools.build:gradle:8.1.0") + classpath("com.android.tools.build:gradle:8.7.0") } } @@ -25,9 +25,7 @@ rootProject.allprojects { apply plugin: "com.android.library" android { - if (project.android.hasProperty("namespace")) { - namespace = "com.example.ffigen_app" - } + namespace = "com.example.ffigen_app" // Bumping the plugin compileSdk version requires all clients of this plugin // to bump the version in their app. @@ -55,8 +53,8 @@ android { } compileOptions { - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 + sourceCompatibility = JavaVersion.VERSION_11 + targetCompatibility = JavaVersion.VERSION_11 } defaultConfig { diff --git a/ffigen_codelab/step_05/example/android/app/build.gradle b/ffigen_codelab/step_07/example/android/app/build.gradle.kts similarity index 84% rename from ffigen_codelab/step_05/example/android/app/build.gradle rename to ffigen_codelab/step_07/example/android/app/build.gradle.kts index 858c9239e7..225c36472e 100644 --- a/ffigen_codelab/step_05/example/android/app/build.gradle +++ b/ffigen_codelab/step_07/example/android/app/build.gradle.kts @@ -1,8 +1,8 @@ plugins { - id "com.android.application" - id "kotlin-android" + id("com.android.application") + id("kotlin-android") // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. - id "dev.flutter.flutter-gradle-plugin" + id("dev.flutter.flutter-gradle-plugin") } android { @@ -16,7 +16,7 @@ android { } kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8 + jvmTarget = JavaVersion.VERSION_1_8.toString() } defaultConfig { @@ -34,7 +34,7 @@ android { release { // TODO: Add your own signing config for the release build. // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig = signingConfigs.debug + signingConfig = signingConfigs.getByName("debug") } } } diff --git a/ffigen_codelab/step_07/example/android/build.gradle b/ffigen_codelab/step_07/example/android/build.gradle deleted file mode 100644 index d2ffbffa4c..0000000000 --- a/ffigen_codelab/step_07/example/android/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = "../build" -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(":app") -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/ffigen_codelab/step_07/example/android/build.gradle.kts b/ffigen_codelab/step_07/example/android/build.gradle.kts new file mode 100644 index 0000000000..89176ef44e --- /dev/null +++ b/ffigen_codelab/step_07/example/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/ffigen_codelab/step_07/example/android/gradle.properties b/ffigen_codelab/step_07/example/android/gradle.properties index 2597170821..f018a61817 100644 --- a/ffigen_codelab/step_07/example/android/gradle.properties +++ b/ffigen_codelab/step_07/example/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/ffigen_codelab/step_07/example/android/gradle/wrapper/gradle-wrapper.properties b/ffigen_codelab/step_07/example/android/gradle/wrapper/gradle-wrapper.properties index 7bb2df6ba6..afa1e8eb0a 100644 --- a/ffigen_codelab/step_07/example/android/gradle/wrapper/gradle-wrapper.properties +++ b/ffigen_codelab/step_07/example/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip diff --git a/ffigen_codelab/step_07/example/android/settings.gradle b/ffigen_codelab/step_07/example/android/settings.gradle deleted file mode 100644 index b9e43bd376..0000000000 --- a/ffigen_codelab/step_07/example/android/settings.gradle +++ /dev/null @@ -1,25 +0,0 @@ -pluginManagement { - def flutterSdkPath = { - def properties = new Properties() - file("local.properties").withInputStream { properties.load(it) } - def flutterSdkPath = properties.getProperty("flutter.sdk") - assert flutterSdkPath != null, "flutter.sdk not set in local.properties" - return flutterSdkPath - }() - - includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") - - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} - -plugins { - id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.1.0" apply false - id "org.jetbrains.kotlin.android" version "1.8.22" apply false -} - -include ":app" diff --git a/ffigen_codelab/step_07/example/android/settings.gradle.kts b/ffigen_codelab/step_07/example/android/settings.gradle.kts new file mode 100644 index 0000000000..a439442c20 --- /dev/null +++ b/ffigen_codelab/step_07/example/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.0" apply false + id("org.jetbrains.kotlin.android") version "1.8.22" apply false +} + +include(":app") diff --git a/ffigen_codelab/step_07/example/ios/Podfile b/ffigen_codelab/step_07/example/ios/Podfile index d97f17e223..e549ee22f3 100644 --- a/ffigen_codelab/step_07/example/ios/Podfile +++ b/ffigen_codelab/step_07/example/ios/Podfile @@ -29,7 +29,6 @@ flutter_ios_podfile_setup target 'Runner' do use_frameworks! - use_modular_headers! flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) target 'RunnerTests' do diff --git a/ffigen_codelab/step_07/example/ios/Runner.xcodeproj/project.pbxproj b/ffigen_codelab/step_07/example/ios/Runner.xcodeproj/project.pbxproj index c92da01762..56cfc32ab5 100644 --- a/ffigen_codelab/step_07/example/ios/Runner.xcodeproj/project.pbxproj +++ b/ffigen_codelab/step_07/example/ios/Runner.xcodeproj/project.pbxproj @@ -7,15 +7,15 @@ objects = { /* Begin PBXBuildFile section */ + 044F9546D51B393B0B020A22 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 737403045BF1B572BF3D78CE /* Pods_Runner.framework */; }; 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; + 23ABC77C023C46FFD093136C /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A3C54131D13247ABAE830E17 /* Pods_RunnerTests.framework */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; - 35C2CDB992BA71FF454706DA /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 246CD2A9C634D9DCB84C492B /* Pods_Runner.framework */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - E29460EE2F58B491AE1B7420 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7B9B3B203B051AA61D71708D /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -44,18 +44,16 @@ /* Begin PBXFileReference section */ 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 246CD2A9C634D9DCB84C492B /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 252C44AFA3F33C974291B8BE /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - 26082E8AF6245A022710FD35 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; + 53845C6BF36C2E5E9E3A5035 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 5F9346421AC22D5E5E320F4D /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 6C3E075EA861EAC2C9A65FC3 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 737403045BF1B572BF3D78CE /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 7B9B3B203B051AA61D71708D /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 7CDD9C80886B67FDD2457CED /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - 83FDFB5C26D8493094669E02 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -63,24 +61,26 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - A8FCCC20319F4779C587CA5D /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - AA3048732925F51D849F53E6 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + A3C54131D13247ABAE830E17 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + B9FE39C60B6C92CCBE46C781 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + BACB0A29AC8EE89321B84F49 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + FB125CF693F2D6150B5BB74D /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 4B97B91A1F54FFB579CD55FC /* Frameworks */ = { + 97C146EB1CF9000F007C117D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - E29460EE2F58B491AE1B7420 /* Pods_RunnerTests.framework in Frameworks */, + 044F9546D51B393B0B020A22 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 97C146EB1CF9000F007C117D /* Frameworks */ = { + 99B38960C7964E4DF6303B2A /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 35C2CDB992BA71FF454706DA /* Pods_Runner.framework in Frameworks */, + 23ABC77C023C46FFD093136C /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -95,20 +95,6 @@ path = RunnerTests; sourceTree = ""; }; - 8F8C07E618915BEA66718CB1 /* Pods */ = { - isa = PBXGroup; - children = ( - 26082E8AF6245A022710FD35 /* Pods-Runner.debug.xcconfig */, - 83FDFB5C26D8493094669E02 /* Pods-Runner.release.xcconfig */, - 7CDD9C80886B67FDD2457CED /* Pods-Runner.profile.xcconfig */, - A8FCCC20319F4779C587CA5D /* Pods-RunnerTests.debug.xcconfig */, - AA3048732925F51D849F53E6 /* Pods-RunnerTests.release.xcconfig */, - 252C44AFA3F33C974291B8BE /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( @@ -127,8 +113,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - 8F8C07E618915BEA66718CB1 /* Pods */, - AAE566CDF0EA1C0DFD383D83 /* Frameworks */, + 99FF07FFDFF8D2980D00FD89 /* Pods */, + C5708B7978C43768F608998E /* Frameworks */, ); sourceTree = ""; }; @@ -156,11 +142,25 @@ path = Runner; sourceTree = ""; }; - AAE566CDF0EA1C0DFD383D83 /* Frameworks */ = { + 99FF07FFDFF8D2980D00FD89 /* Pods */ = { + isa = PBXGroup; + children = ( + 6C3E075EA861EAC2C9A65FC3 /* Pods-Runner.debug.xcconfig */, + FB125CF693F2D6150B5BB74D /* Pods-Runner.release.xcconfig */, + BACB0A29AC8EE89321B84F49 /* Pods-Runner.profile.xcconfig */, + 53845C6BF36C2E5E9E3A5035 /* Pods-RunnerTests.debug.xcconfig */, + B9FE39C60B6C92CCBE46C781 /* Pods-RunnerTests.release.xcconfig */, + 5F9346421AC22D5E5E320F4D /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; + C5708B7978C43768F608998E /* Frameworks */ = { isa = PBXGroup; children = ( - 246CD2A9C634D9DCB84C492B /* Pods_Runner.framework */, - 7B9B3B203B051AA61D71708D /* Pods_RunnerTests.framework */, + 737403045BF1B572BF3D78CE /* Pods_Runner.framework */, + A3C54131D13247ABAE830E17 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 3A1AE33A8C0CA1C146B254EA /* [CP] Check Pods Manifest.lock */, + 012E12F8DDA59CCC3C74FACC /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 4B97B91A1F54FFB579CD55FC /* Frameworks */, + 99B38960C7964E4DF6303B2A /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - CE5503F89FD8B6227DC56BBE /* [CP] Check Pods Manifest.lock */, + 2A249B9D5FFFA2F89090A593 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - ECE47E0D65094DD667AA5D03 /* [CP] Embed Pods Frameworks */, + 4300EFEAE8DBCC0B4183ADFA /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -270,7 +270,7 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 3A1AE33A8C0CA1C146B254EA /* [CP] Check Pods Manifest.lock */ = { + 012E12F8DDA59CCC3C74FACC /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -292,75 +292,75 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + 2A249B9D5FFFA2F89090A593 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( - "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "Thin Binary"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); - name = "Run Script"; + name = "Thin Binary"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - CE5503F89FD8B6227DC56BBE /* [CP] Check Pods Manifest.lock */ = { + 4300EFEAE8DBCC0B4183ADFA /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - ECE47E0D65094DD667AA5D03 /* [CP] Embed Pods Frameworks */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + inputPaths = ( ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + name = "Run Script"; + outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; /* End PBXShellScriptBuildPhase section */ @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = A8FCCC20319F4779C587CA5D /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 53845C6BF36C2E5E9E3A5035 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = AA3048732925F51D849F53E6 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = B9FE39C60B6C92CCBE46C781 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 252C44AFA3F33C974291B8BE /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 5F9346421AC22D5E5E320F4D /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/ffigen_codelab/step_07/example/macos/Podfile b/ffigen_codelab/step_07/example/macos/Podfile index c795730db8..29c8eb3294 100644 --- a/ffigen_codelab/step_07/example/macos/Podfile +++ b/ffigen_codelab/step_07/example/macos/Podfile @@ -28,7 +28,6 @@ flutter_macos_podfile_setup target 'Runner' do use_frameworks! - use_modular_headers! flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__)) target 'RunnerTests' do diff --git a/ffigen_codelab/step_07/example/macos/Runner.xcodeproj/project.pbxproj b/ffigen_codelab/step_07/example/macos/Runner.xcodeproj/project.pbxproj index 5d066c56cd..5011175dbe 100644 --- a/ffigen_codelab/step_07/example/macos/Runner.xcodeproj/project.pbxproj +++ b/ffigen_codelab/step_07/example/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ + 23A6231FF418E850358F6441 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 04C81706F163DB08A9043286 /* Pods_Runner.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 34C11F32AC13E549EAC19C9A /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9111221EFB74204A99FADA45 /* Pods_Runner.framework */; }; - F87322B26DD8D853E9CB39B2 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3F631A83DC0FBC6522DF7C62 /* Pods_RunnerTests.framework */; }; + CBBFC818490C1199F67A34ED /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FD747B2193CBA28F4412B052 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,6 +62,7 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 04C81706F163DB08A9043286 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -78,16 +79,15 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 3F631A83DC0FBC6522DF7C62 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 71BD6EA5154E76B5396EE90D /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 74406D118E64F0271B406A7F /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 4A1B61DC13BF467522EE4597 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 586A6D11F96D888385B0EA9B /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 830A7422CDCD433EA41C308D /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - 9111221EFB74204A99FADA45 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - AC73A378F377F50F98A1B559 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - BD2810150294EE7B0861D857 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - C913AD53FEBD6CCC01058575 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + A0B79203F9F4D935EFFD6087 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + C87438A25A0CD5F890E428C0 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + D00064E34BCCC8D640128A17 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + E94C149843CA029E5F4F5034 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + FD747B2193CBA28F4412B052 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - F87322B26DD8D853E9CB39B2 /* Pods_RunnerTests.framework in Frameworks */, + CBBFC818490C1199F67A34ED /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,7 +103,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 34C11F32AC13E549EAC19C9A /* Pods_Runner.framework in Frameworks */, + 23A6231FF418E850358F6441 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -137,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - EDC5819FB59C73891ABAD209 /* Pods */, + 8561B675EC77B28D16492612 /* Pods */, ); sourceTree = ""; }; @@ -185,27 +185,27 @@ path = Runner; sourceTree = ""; }; - D73912EC22F37F3D000D13A0 /* Frameworks */ = { + 8561B675EC77B28D16492612 /* Pods */ = { isa = PBXGroup; children = ( - 9111221EFB74204A99FADA45 /* Pods_Runner.framework */, - 3F631A83DC0FBC6522DF7C62 /* Pods_RunnerTests.framework */, + 4A1B61DC13BF467522EE4597 /* Pods-Runner.debug.xcconfig */, + E94C149843CA029E5F4F5034 /* Pods-Runner.release.xcconfig */, + A0B79203F9F4D935EFFD6087 /* Pods-Runner.profile.xcconfig */, + D00064E34BCCC8D640128A17 /* Pods-RunnerTests.debug.xcconfig */, + C87438A25A0CD5F890E428C0 /* Pods-RunnerTests.release.xcconfig */, + 586A6D11F96D888385B0EA9B /* Pods-RunnerTests.profile.xcconfig */, ); - name = Frameworks; + name = Pods; + path = Pods; sourceTree = ""; }; - EDC5819FB59C73891ABAD209 /* Pods */ = { + D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - C913AD53FEBD6CCC01058575 /* Pods-Runner.debug.xcconfig */, - 74406D118E64F0271B406A7F /* Pods-Runner.release.xcconfig */, - AC73A378F377F50F98A1B559 /* Pods-Runner.profile.xcconfig */, - 71BD6EA5154E76B5396EE90D /* Pods-RunnerTests.debug.xcconfig */, - BD2810150294EE7B0861D857 /* Pods-RunnerTests.release.xcconfig */, - 830A7422CDCD433EA41C308D /* Pods-RunnerTests.profile.xcconfig */, + 04C81706F163DB08A9043286 /* Pods_Runner.framework */, + FD747B2193CBA28F4412B052 /* Pods_RunnerTests.framework */, ); - name = Pods; - path = Pods; + name = Frameworks; sourceTree = ""; }; /* End PBXGroup section */ @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 84A3A37EB6F5F6C593457D11 /* [CP] Check Pods Manifest.lock */, + 4E06478F590845CD93E25872 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - D02496A41717E29108D3EE35 /* [CP] Check Pods Manifest.lock */, + 5F0E69767E8114D2A744FE00 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 1654127F8324C89D6EBD6228 /* [CP] Embed Pods Frameworks */, + 28C6E02EA0C73823A5A69556 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,7 +323,7 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 1654127F8324C89D6EBD6228 /* [CP] Embed Pods Frameworks */ = { + 28C6E02EA0C73823A5A69556 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -378,7 +378,7 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 84A3A37EB6F5F6C593457D11 /* [CP] Check Pods Manifest.lock */ = { + 4E06478F590845CD93E25872 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -400,7 +400,7 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - D02496A41717E29108D3EE35 /* [CP] Check Pods Manifest.lock */ = { + 5F0E69767E8114D2A744FE00 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 71BD6EA5154E76B5396EE90D /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = D00064E34BCCC8D640128A17 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = BD2810150294EE7B0861D857 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = C87438A25A0CD5F890E428C0 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 830A7422CDCD433EA41C308D /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 586A6D11F96D888385B0EA9B /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/ffigen_codelab/step_07/lib/duktape_bindings_generated.dart b/ffigen_codelab/step_07/lib/duktape_bindings_generated.dart index 7579ae6633..0eb041df40 100644 --- a/ffigen_codelab/step_07/lib/duktape_bindings_generated.dart +++ b/ffigen_codelab/step_07/lib/duktape_bindings_generated.dart @@ -4798,18 +4798,9 @@ final class duk_thread_state extends ffi.Struct { external ffi.Array data; } -final class duk_memory_functions extends ffi.Struct { - external duk_alloc_function alloc_func; - - external duk_realloc_function realloc_func; - - external duk_free_function free_func; - - external ffi.Pointer udata; -} - -typedef duk_alloc_function = - ffi.Pointer>; +/// A few types are assumed to always exist. +typedef duk_size_t = ffi.Size; +typedef Dartduk_size_t = int; typedef duk_alloc_functionFunction = ffi.Pointer Function( ffi.Pointer udata, @@ -4820,12 +4811,8 @@ typedef Dartduk_alloc_functionFunction = ffi.Pointer udata, Dartduk_size_t size, ); - -/// A few types are assumed to always exist. -typedef duk_size_t = ffi.Size; -typedef Dartduk_size_t = int; -typedef duk_realloc_function = - ffi.Pointer>; +typedef duk_alloc_function = + ffi.Pointer>; typedef duk_realloc_functionFunction = ffi.Pointer Function( ffi.Pointer udata, @@ -4838,61 +4825,72 @@ typedef Dartduk_realloc_functionFunction = ffi.Pointer ptr, Dartduk_size_t size, ); -typedef duk_free_function = - ffi.Pointer>; +typedef duk_realloc_function = + ffi.Pointer>; typedef duk_free_functionFunction = ffi.Void Function(ffi.Pointer udata, ffi.Pointer ptr); typedef Dartduk_free_functionFunction = void Function(ffi.Pointer udata, ffi.Pointer ptr); +typedef duk_free_function = + ffi.Pointer>; -final class duk_function_list_entry extends ffi.Struct { - external ffi.Pointer key; +final class duk_memory_functions extends ffi.Struct { + external duk_alloc_function alloc_func; - external duk_c_function value; + external duk_realloc_function realloc_func; - @duk_idx_t() - external int nargs; + external duk_free_function free_func; + + external ffi.Pointer udata; } -typedef duk_c_function = - ffi.Pointer>; -typedef duk_c_functionFunction = - duk_ret_t Function(ffi.Pointer ctx); -typedef Dartduk_c_functionFunction = - Dartduk_small_int_t Function(ffi.Pointer ctx); +/// Small integers (16 bits or more) can fall back to the 'int' type, but +/// have a typedef so they are marked "small" explicitly. +typedef duk_small_int_t = ffi.Int; +typedef Dartduk_small_int_t = int; /// Duktape/C function return value, platform int is enough for now to /// represent 0, 1, or negative error code. Must be compatible with /// assigning truth values (e.g. duk_ret_t rc = (foo == bar);). typedef duk_ret_t = duk_small_int_t; -/// Small integers (16 bits or more) can fall back to the 'int' type, but -/// have a typedef so they are marked "small" explicitly. -typedef duk_small_int_t = ffi.Int; -typedef Dartduk_small_int_t = int; +final class duk_hthread extends ffi.Opaque {} /// Type used in public API declarations and user code. Typedef maps to /// 'struct duk_hthread' like the 'duk_hthread' typedef which is used /// exclusively in internals. typedef duk_context = duk_hthread; - -final class duk_hthread extends ffi.Opaque {} +typedef duk_c_functionFunction = + duk_ret_t Function(ffi.Pointer ctx); +typedef Dartduk_c_functionFunction = + Dartduk_small_int_t Function(ffi.Pointer ctx); +typedef duk_c_function = + ffi.Pointer>; +typedef duk_int_t = ffi.Int; +typedef Dartduk_int_t = int; /// Index values must have at least 32-bit signed range. typedef duk_idx_t = duk_int_t; -typedef duk_int_t = ffi.Int; -typedef Dartduk_int_t = int; -final class duk_number_list_entry extends ffi.Struct { +final class duk_function_list_entry extends ffi.Struct { external ffi.Pointer key; - @duk_double_t() - external double value; + external duk_c_function value; + + @duk_idx_t() + external int nargs; } typedef duk_double_t = ffi.Double; typedef Dartduk_double_t = double; +final class duk_number_list_entry extends ffi.Struct { + external ffi.Pointer key; + + @duk_double_t() + external double value; +} + final class duk_time_components extends ffi.Struct { /// year, e.g. 2016, ECMAScript year range @duk_double_t() @@ -4927,41 +4925,12 @@ final class duk_time_components extends ffi.Struct { external double weekday; } -typedef duk_fatal_function = - ffi.Pointer>; typedef duk_fatal_functionFunction = ffi.Void Function(ffi.Pointer udata, ffi.Pointer msg); typedef Dartduk_fatal_functionFunction = void Function(ffi.Pointer udata, ffi.Pointer msg); -typedef duk_uint_t = ffi.UnsignedInt; -typedef Dartduk_uint_t = int; - -/// Error codes are represented with platform int. High bits are used -/// for flags and such, so 32 bits are needed. -typedef duk_errcode_t = duk_int_t; -typedef va_list = __builtin_va_list; -typedef __builtin_va_list = ffi.Pointer; - -/// Boolean values are represented with the platform 'unsigned int'. -typedef duk_bool_t = duk_small_uint_t; -typedef duk_small_uint_t = ffi.UnsignedInt; -typedef Dartduk_small_uint_t = int; -typedef duk_int32_t = ffi.Int32; -typedef Dartduk_int32_t = int; -typedef duk_uint32_t = ffi.Uint32; -typedef Dartduk_uint32_t = int; -typedef duk_uint16_t = ffi.Uint16; -typedef Dartduk_uint16_t = int; - -/// Array index values, could be exact 32 bits. -/// Currently no need for signed duk_arridx_t. -typedef duk_uarridx_t = duk_uint_t; -typedef duk_decode_char_function = - ffi.Pointer>; -typedef duk_decode_char_functionFunction = - ffi.Void Function(ffi.Pointer udata, duk_codepoint_t codepoint); -typedef Dartduk_decode_char_functionFunction = - void Function(ffi.Pointer udata, Dartduk_int_t codepoint); +typedef duk_fatal_function = + ffi.Pointer>; /// Codepoint type. Must be 32 bits or more because it is used also for /// internal codepoints. The type is signed because negative codepoints @@ -4970,8 +4939,12 @@ typedef Dartduk_decode_char_functionFunction = /// ensure duk_uint32_t casts back and forth nicely. Almost everything /// else uses the signed one. typedef duk_codepoint_t = duk_int_t; -typedef duk_map_char_function = - ffi.Pointer>; +typedef duk_decode_char_functionFunction = + ffi.Void Function(ffi.Pointer udata, duk_codepoint_t codepoint); +typedef Dartduk_decode_char_functionFunction = + void Function(ffi.Pointer udata, Dartduk_int_t codepoint); +typedef duk_decode_char_function = + ffi.Pointer>; typedef duk_map_char_functionFunction = duk_codepoint_t Function( ffi.Pointer udata, @@ -4982,8 +4955,8 @@ typedef Dartduk_map_char_functionFunction = ffi.Pointer udata, Dartduk_int_t codepoint, ); -typedef duk_safe_call_function = - ffi.Pointer>; +typedef duk_map_char_function = + ffi.Pointer>; typedef duk_safe_call_functionFunction = duk_ret_t Function( ffi.Pointer ctx, @@ -4994,8 +4967,8 @@ typedef Dartduk_safe_call_functionFunction = ffi.Pointer ctx, ffi.Pointer udata, ); -typedef duk_debug_read_function = - ffi.Pointer>; +typedef duk_safe_call_function = + ffi.Pointer>; typedef duk_debug_read_functionFunction = duk_size_t Function( ffi.Pointer udata, @@ -5008,8 +4981,8 @@ typedef Dartduk_debug_read_functionFunction = ffi.Pointer buffer, Dartduk_size_t length, ); -typedef duk_debug_write_function = - ffi.Pointer>; +typedef duk_debug_read_function = + ffi.Pointer>; typedef duk_debug_write_functionFunction = duk_size_t Function( ffi.Pointer udata, @@ -5022,26 +4995,26 @@ typedef Dartduk_debug_write_functionFunction = ffi.Pointer buffer, Dartduk_size_t length, ); -typedef duk_debug_peek_function = - ffi.Pointer>; +typedef duk_debug_write_function = + ffi.Pointer>; typedef duk_debug_peek_functionFunction = duk_size_t Function(ffi.Pointer udata); typedef Dartduk_debug_peek_functionFunction = Dartduk_size_t Function(ffi.Pointer udata); -typedef duk_debug_read_flush_function = - ffi.Pointer>; +typedef duk_debug_peek_function = + ffi.Pointer>; typedef duk_debug_read_flush_functionFunction = ffi.Void Function(ffi.Pointer udata); typedef Dartduk_debug_read_flush_functionFunction = void Function(ffi.Pointer udata); -typedef duk_debug_write_flush_function = - ffi.Pointer>; +typedef duk_debug_read_flush_function = + ffi.Pointer>; typedef duk_debug_write_flush_functionFunction = ffi.Void Function(ffi.Pointer udata); typedef Dartduk_debug_write_flush_functionFunction = void Function(ffi.Pointer udata); -typedef duk_debug_request_function = - ffi.Pointer>; +typedef duk_debug_write_flush_function = + ffi.Pointer>; typedef duk_debug_request_functionFunction = duk_idx_t Function( ffi.Pointer ctx, @@ -5054,8 +5027,8 @@ typedef Dartduk_debug_request_functionFunction = ffi.Pointer udata, Dartduk_int_t nvalues, ); -typedef duk_debug_detached_function = - ffi.Pointer>; +typedef duk_debug_request_function = + ffi.Pointer>; typedef duk_debug_detached_functionFunction = ffi.Void Function( ffi.Pointer ctx, @@ -5063,6 +5036,31 @@ typedef duk_debug_detached_functionFunction = ); typedef Dartduk_debug_detached_functionFunction = void Function(ffi.Pointer ctx, ffi.Pointer udata); +typedef duk_debug_detached_function = + ffi.Pointer>; +typedef duk_uint_t = ffi.UnsignedInt; +typedef Dartduk_uint_t = int; + +/// Error codes are represented with platform int. High bits are used +/// for flags and such, so 32 bits are needed. +typedef duk_errcode_t = duk_int_t; +typedef __builtin_va_list = ffi.Pointer; +typedef va_list = __builtin_va_list; +typedef duk_small_uint_t = ffi.UnsignedInt; +typedef Dartduk_small_uint_t = int; + +/// Boolean values are represented with the platform 'unsigned int'. +typedef duk_bool_t = duk_small_uint_t; +typedef duk_int32_t = ffi.Int32; +typedef Dartduk_int32_t = int; +typedef duk_uint32_t = ffi.Uint32; +typedef Dartduk_uint32_t = int; +typedef duk_uint16_t = ffi.Uint16; +typedef Dartduk_uint16_t = int; + +/// Array index values, could be exact 32 bits. +/// Currently no need for signed duk_arridx_t. +typedef duk_uarridx_t = duk_uint_t; const int DUK_VERSION = 20700; diff --git a/ffigen_codelab/step_07/pubspec.yaml b/ffigen_codelab/step_07/pubspec.yaml index 7814f4b781..a717caacd9 100644 --- a/ffigen_codelab/step_07/pubspec.yaml +++ b/ffigen_codelab/step_07/pubspec.yaml @@ -11,11 +11,11 @@ dependencies: ffi: ^2.1.3 flutter: sdk: flutter - path: ^1.9.0 + path: ^1.9.1 plugin_platform_interface: ^2.0.2 dev_dependencies: - ffigen: ^15.0.0 + ffigen: ^16.0.0 flutter_test: sdk: flutter flutter_lints: ^5.0.0 From 0b9aa6ec2f10edb56001f75bc7252c36f12fcfa4 Mon Sep 17 00:00:00 2001 From: Brett Morgan Date: Fri, 15 Nov 2024 18:25:38 +1100 Subject: [PATCH 074/108] Update `firebase-emulator-suite` --- firebase-emulator-suite/codelab_rebuild.yaml | 204 +++++++++--------- .../app/{build.gradle => build.gradle.kts} | 10 +- .../complete/android/build.gradle | 18 -- .../complete/android/build.gradle.kts | 21 ++ .../complete/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../complete/android/settings.gradle | 25 --- .../complete/android/settings.gradle.kts | 25 +++ firebase-emulator-suite/complete/ios/Podfile | 1 - .../complete/macos/Podfile | 1 - firebase-emulator-suite/complete/pubspec.yaml | 8 +- .../app/{build.gradle => build.gradle.kts} | 10 +- .../start/android/build.gradle | 18 -- .../start/android/build.gradle.kts | 21 ++ .../start/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../start/android/settings.gradle | 25 --- .../start/android/settings.gradle.kts | 25 +++ firebase-emulator-suite/start/pubspec.yaml | 2 +- 19 files changed, 207 insertions(+), 215 deletions(-) rename firebase-emulator-suite/complete/android/app/{build.gradle => build.gradle.kts} (84%) delete mode 100644 firebase-emulator-suite/complete/android/build.gradle create mode 100644 firebase-emulator-suite/complete/android/build.gradle.kts delete mode 100644 firebase-emulator-suite/complete/android/settings.gradle create mode 100644 firebase-emulator-suite/complete/android/settings.gradle.kts rename firebase-emulator-suite/start/android/app/{build.gradle => build.gradle.kts} (84%) delete mode 100644 firebase-emulator-suite/start/android/build.gradle create mode 100644 firebase-emulator-suite/start/android/build.gradle.kts delete mode 100644 firebase-emulator-suite/start/android/settings.gradle create mode 100644 firebase-emulator-suite/start/android/settings.gradle.kts diff --git a/firebase-emulator-suite/codelab_rebuild.yaml b/firebase-emulator-suite/codelab_rebuild.yaml index 9a8a23cd36..82af41671e 100644 --- a/firebase-emulator-suite/codelab_rebuild.yaml +++ b/firebase-emulator-suite/codelab_rebuild.yaml @@ -1,7 +1,7 @@ name: Firebase Emulator Suite steps: - - name: complete + - name: start steps: - name: Remove complete rmdir: complete @@ -44,44 +44,46 @@ steps: path: complete/lib/app_state.dart replace-contents: | import 'dart:async'; - + import 'entry.dart'; - + class AppState { AppState() { - _entriesStreamController = StreamController.broadcast(onListen: () { - _entriesStreamController.add([ - Entry( - date: '10/09/2022', - text: lorem, - title: '[Example] My Journal Entry', - ) - ]); - }); + _entriesStreamController = StreamController.broadcast( + onListen: () { + _entriesStreamController.add([ + Entry( + date: '10/09/2022', + text: lorem, + title: '[Example] My Journal Entry', + ), + ]); + }, + ); } - + // This will change to the type User from the Firebase Authentication package // Changing it’s type now would cause the app to throw an error Object? user; late StreamController> _entriesStreamController; Stream> get entries => _entriesStreamController.stream.asBroadcastStream(); - + Future logIn(String email, String password) async { print('TODO: AppState.login'); user = Object(); await _listenForEntries(); } - + void writeEntryToFirebase(Entry entry) { print('TODO: AppState.writeEntryToFirebase'); } - + Future _listenForEntries() async { print('TODO: AppState._listenForEntries'); } } - + const lorem = '''Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum '''; @@ -92,37 +94,33 @@ steps: final String date; final String text; final String title; - - Entry({ - required this.date, - required this.text, - required this.title, - }); + + Entry({required this.date, required this.text, required this.title}); } - name: Add lib/journal_entry_form.dart path: complete/lib/journal_entry_form.dart replace-contents: | import 'package:flutter/material.dart'; - + import 'entry.dart'; - + typedef SubmitCallback = void Function(Entry); - + class EntryForm extends StatefulWidget { final SubmitCallback onSubmit; const EntryForm({super.key, required this.onSubmit}); - + @override State createState() => _EntryFormState(); } - + class _EntryFormState extends State { final _formKey = GlobalKey(); - + late String title; late String text; late String date; - + @override Widget build(BuildContext context) { return Card( @@ -146,8 +144,9 @@ steps: }, ), TextFormField( - decoration: - const InputDecoration(labelText: 'Date (DD/MM/YYYY):'), + decoration: const InputDecoration( + labelText: 'Date (DD/MM/YYYY):', + ), validator: (value) { if (value == null || value.isEmpty) { return 'Please enter some text'; @@ -180,9 +179,9 @@ steps: text: text, date: date, ); - + widget.onSubmit(entry); - + ScaffoldMessenger.of(context).showSnackBar( const SnackBar(content: Text('Submitting Entry')), ); @@ -203,14 +202,14 @@ steps: path: complete/lib/journal_entry_widget.dart replace-contents: | import 'package:flutter/material.dart'; - + import 'entry.dart'; - + class EntryView extends StatelessWidget { final Entry entry; - + const EntryView({super.key, required this.entry}); - + @override Widget build(BuildContext context) { return Card( @@ -239,10 +238,10 @@ steps: child: Text( entry.text, style: Theme.of(context).textTheme.bodyLarge!.copyWith( - height: 1.3, - wordSpacing: 1.2, - letterSpacing: 1.05, - ), + height: 1.3, + wordSpacing: 1.2, + letterSpacing: 1.05, + ), ), ), ], @@ -255,20 +254,20 @@ steps: path: complete/lib/logged_in_view.dart replace-contents: | import 'dart:math'; - + import 'package:flutter/material.dart'; - + import 'app_state.dart'; import 'entry.dart'; import 'journal_entry_form.dart'; import 'journal_entry_widget.dart'; - + class LoggedInView extends StatelessWidget { final AppState state; LoggedInView({super.key, required this.state}); - + final PageController _controller = PageController(initialPage: 1); - + @override Widget build(BuildContext context) { // TODO: get name from Firebase User @@ -278,9 +277,7 @@ steps: children: [ Center( child: Padding( - padding: const EdgeInsets.symmetric( - vertical: 16.0, - ), + padding: const EdgeInsets.symmetric(vertical: 16.0), child: Text( 'Welcome back, $name!', style: Theme.of(context).textTheme.headlineSmall!.copyWith(), @@ -305,16 +302,13 @@ steps: state.writeEntryToFirebase(e); }, ), - for (var entry in allEntries!) - EntryView( - entry: entry, - ) + for (var entry in allEntries!) EntryView(entry: entry), ], ); }, ), ), - ) + ), ], ), ); @@ -325,18 +319,16 @@ steps: replace-contents: | import 'package:flutter/material.dart'; import 'package:go_router/go_router.dart'; - + import 'app_state.dart'; - + class LoggedOutView extends StatelessWidget { final AppState state; const LoggedOutView({super.key, required this.state}); @override Widget build(BuildContext context) { return Scaffold( - appBar: AppBar( - title: const Text('Firebase Emulator Suite Codelab'), - ), + appBar: AppBar(title: const Text('Firebase Emulator Suite Codelab')), body: Center( child: Column( mainAxisAlignment: MainAxisAlignment.center, @@ -372,21 +364,21 @@ steps: import 'package:flutter/gestures.dart'; import 'package:flutter/material.dart'; import 'package:go_router/go_router.dart'; - + import 'app_state.dart'; import 'logged_in_view.dart'; import 'logged_out_view.dart'; - + void main() async { // TODO: Initialize Firebase runApp(MyApp()); } - + class MyApp extends StatelessWidget { final state = AppState(); - + MyApp({super.key}); - + @override Widget build(BuildContext context) { return MaterialApp.router( @@ -395,7 +387,7 @@ steps: theme: ThemeData(useMaterial3: true), ); } - + GoRouter _router() { return GoRouter( redirect: (context, routerState) => state.user == null ? '/login' : null, @@ -412,13 +404,13 @@ steps: ); } } - + class AppScrollBehavior extends MaterialScrollBehavior { @override Set get dragDevices => { - PointerDeviceKind.touch, - PointerDeviceKind.mouse, - }; + PointerDeviceKind.touch, + PointerDeviceKind.mouse, + }; } - name: Build web path: complete @@ -499,8 +491,8 @@ steps: import 'entry.dart'; class AppState { - @@ -15,28 +18,51 @@ class AppState { - }); + @@ -17,28 +20,53 @@ class AppState { + ); } - // This will change to the type User from the Firebase Authentication package @@ -517,8 +509,10 @@ steps: - print('TODO: AppState.login'); - user = Object(); - await _listenForEntries(); - + final credential = await FirebaseAuth.instance - + .signInWithEmailAndPassword(email: email, password: password); + + final credential = await FirebaseAuth.instance.signInWithEmailAndPassword( + + email: email, + + password: password, + + ); + if (credential.user != null) { + user = credential.user!; + _listenForEntries(); @@ -537,18 +531,18 @@ steps: + } + + void _listenForEntries() { - + FirebaseFirestore.instance - + .collection('Entries') - + .snapshots() - + .listen((event) { - + final entries = event.docs.map((doc) { - + final data = doc.data(); - + return Entry( - + date: data['date'] as String, - + text: data['text'] as String, - + title: data['title'] as String, - + ); - + }).toList(); + + FirebaseFirestore.instance.collection('Entries').snapshots().listen(( + + event, + + ) { + + final entries = + + event.docs.map((doc) { + + final data = doc.data(); + + return Entry( + + date: data['date'] as String, + + text: data['text'] as String, + + title: data['title'] as String, + + ); + + }).toList(); + + _entriesStreamController.add(entries); + }); @@ -570,7 +564,7 @@ steps: patch-u: | --- b/firebase-emulator-suite/complete/lib/journal_entry_form.dart +++ a/firebase-emulator-suite/complete/lib/journal_entry_form.dart - @@ -80,7 +80,7 @@ class _EntryFormState extends State { + @@ -81,7 +81,7 @@ class _EntryFormState extends State { widget.onSubmit(entry); ScaffoldMessenger.of(context).showSnackBar( @@ -584,7 +578,7 @@ steps: patch-u: | --- b/firebase-emulator-suite/complete/lib/logged_in_view.dart +++ a/firebase-emulator-suite/complete/lib/logged_in_view.dart - @@ -15,20 +15,14 @@ class LoggedInView extends StatelessWidget { + @@ -15,18 +15,14 @@ class LoggedInView extends StatelessWidget { @override Widget build(BuildContext context) { @@ -596,9 +590,7 @@ steps: children: [ Center( - child: Padding( - - padding: const EdgeInsets.symmetric( - - vertical: 16.0, - - ), + - padding: const EdgeInsets.symmetric(vertical: 16.0), - child: Text( - 'Welcome back, $name!', - style: Theme.of(context).textTheme.headlineSmall!.copyWith(), @@ -609,7 +601,7 @@ steps: ), ), Flexible( - @@ -36,25 +30,29 @@ class LoggedInView extends StatelessWidget { + @@ -34,22 +30,29 @@ class LoggedInView extends StatelessWidget { padding: const EdgeInsets.all(16.0), child: StreamBuilder>( stream: state.entries, @@ -626,10 +618,7 @@ steps: - state.writeEntryToFirebase(e); - }, - ), - - for (var entry in allEntries!) - - EntryView( - - entry: entry, - - ) + - for (var entry in allEntries!) EntryView(entry: entry), - ], - ); + if (snapshot.hasData) { @@ -648,7 +637,7 @@ steps: + EntryView( + key: Key('${Random().nextDouble()}'), + entry: entry, - + ) + + ), + ], + ); + } else { @@ -662,7 +651,7 @@ steps: patch-u: | --- b/firebase-emulator-suite/complete/lib/logged_out_view.dart +++ a/firebase-emulator-suite/complete/lib/logged_out_view.dart - @@ -24,10 +24,8 @@ class LoggedOutView extends StatelessWidget { + @@ -22,10 +22,8 @@ class LoggedOutView extends StatelessWidget { padding: const EdgeInsets.all(8.0), child: FilledButton( onPressed: () async { @@ -680,7 +669,7 @@ steps: patch-u: | --- b/firebase-emulator-suite/complete/lib/main.dart +++ a/firebase-emulator-suite/complete/lib/main.dart - @@ -1,13 +1,32 @@ + @@ -1,13 +1,30 @@ +import 'package:cloud_firestore/cloud_firestore.dart'; +import 'package:firebase_auth/firebase_auth.dart'; +import 'package:firebase_core/firebase_core.dart'; @@ -697,9 +686,7 @@ steps: void main() async { - // TODO: Initialize Firebase + WidgetsFlutterBinding.ensureInitialized(); - + await Firebase.initializeApp( - + options: DefaultFirebaseOptions.currentPlatform, - + ); + + await Firebase.initializeApp(options: DefaultFirebaseOptions.currentPlatform); + + if (kDebugMode) { + try { @@ -721,7 +708,7 @@ steps: import 'package:firebase_core/firebase_core.dart' show FirebaseOptions; import 'package:flutter/foundation.dart' show defaultTargetPlatform, kIsWeb, TargetPlatform; - + /// Default [FirebaseOptions] for use with your Firebase apps. /// /// Example: @@ -747,10 +734,11 @@ steps: return macos; default: throw UnsupportedError( - 'DefaultFirebaseOptions are not supported for this platform.'); + 'DefaultFirebaseOptions are not supported for this platform.', + ); } } - + static const FirebaseOptions web = FirebaseOptions( apiKey: 'AIzaSyBqTAGMEPyYPrraQColhTWE3gpBCHwBHaY', appId: '1:249605288217:web:f8441e30c5cc335b089588', @@ -759,7 +747,7 @@ steps: authDomain: 'flutter-firebase-codelab-d6b79.firebaseapp.com', storageBucket: 'flutter-firebase-codelab-d6b79.appspot.com', ); - + static const FirebaseOptions android = FirebaseOptions( apiKey: 'AIzaSyDOhizxfIPR8Qs4_isZnE_AnteC0zOxod4', appId: '1:249605288217:android:27c0f0a1ef464773089588', @@ -767,7 +755,7 @@ steps: projectId: 'flutter-firebase-codelab-d6b79', storageBucket: 'flutter-firebase-codelab-d6b79.appspot.com', ); - + static const FirebaseOptions ios = FirebaseOptions( apiKey: 'AIzaSyCvSrqVklmfWxE_SM8HNHvxqOLZTQCsUtk', appId: '1:249605288217:ios:ef9f4946a0d08a35089588', @@ -778,7 +766,7 @@ steps: '249605288217-9sn136tgsd0vg7nae831gahubpoph3ih.apps.googleusercontent.com', iosBundleId: 'com.example.complete', ); - + static const FirebaseOptions macos = FirebaseOptions( apiKey: 'AIzaSyCvSrqVklmfWxE_SM8HNHvxqOLZTQCsUtk', appId: '1:249605288217:ios:ef9f4946a0d08a35089588', diff --git a/firebase-emulator-suite/complete/android/app/build.gradle b/firebase-emulator-suite/complete/android/app/build.gradle.kts similarity index 84% rename from firebase-emulator-suite/complete/android/app/build.gradle rename to firebase-emulator-suite/complete/android/app/build.gradle.kts index 99b6909075..801dcf1d58 100644 --- a/firebase-emulator-suite/complete/android/app/build.gradle +++ b/firebase-emulator-suite/complete/android/app/build.gradle.kts @@ -1,8 +1,8 @@ plugins { - id "com.android.application" - id "kotlin-android" + id("com.android.application") + id("kotlin-android") // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. - id "dev.flutter.flutter-gradle-plugin" + id("dev.flutter.flutter-gradle-plugin") } android { @@ -16,7 +16,7 @@ android { } kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8 + jvmTarget = JavaVersion.VERSION_1_8.toString() } defaultConfig { @@ -34,7 +34,7 @@ android { release { // TODO: Add your own signing config for the release build. // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig = signingConfigs.debug + signingConfig = signingConfigs.getByName("debug") } } } diff --git a/firebase-emulator-suite/complete/android/build.gradle b/firebase-emulator-suite/complete/android/build.gradle deleted file mode 100644 index d2ffbffa4c..0000000000 --- a/firebase-emulator-suite/complete/android/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = "../build" -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(":app") -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/firebase-emulator-suite/complete/android/build.gradle.kts b/firebase-emulator-suite/complete/android/build.gradle.kts new file mode 100644 index 0000000000..89176ef44e --- /dev/null +++ b/firebase-emulator-suite/complete/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/firebase-emulator-suite/complete/android/gradle.properties b/firebase-emulator-suite/complete/android/gradle.properties index 2597170821..f018a61817 100644 --- a/firebase-emulator-suite/complete/android/gradle.properties +++ b/firebase-emulator-suite/complete/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/firebase-emulator-suite/complete/android/gradle/wrapper/gradle-wrapper.properties b/firebase-emulator-suite/complete/android/gradle/wrapper/gradle-wrapper.properties index 7bb2df6ba6..afa1e8eb0a 100644 --- a/firebase-emulator-suite/complete/android/gradle/wrapper/gradle-wrapper.properties +++ b/firebase-emulator-suite/complete/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip diff --git a/firebase-emulator-suite/complete/android/settings.gradle b/firebase-emulator-suite/complete/android/settings.gradle deleted file mode 100644 index b9e43bd376..0000000000 --- a/firebase-emulator-suite/complete/android/settings.gradle +++ /dev/null @@ -1,25 +0,0 @@ -pluginManagement { - def flutterSdkPath = { - def properties = new Properties() - file("local.properties").withInputStream { properties.load(it) } - def flutterSdkPath = properties.getProperty("flutter.sdk") - assert flutterSdkPath != null, "flutter.sdk not set in local.properties" - return flutterSdkPath - }() - - includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") - - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} - -plugins { - id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.1.0" apply false - id "org.jetbrains.kotlin.android" version "1.8.22" apply false -} - -include ":app" diff --git a/firebase-emulator-suite/complete/android/settings.gradle.kts b/firebase-emulator-suite/complete/android/settings.gradle.kts new file mode 100644 index 0000000000..a439442c20 --- /dev/null +++ b/firebase-emulator-suite/complete/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.0" apply false + id("org.jetbrains.kotlin.android") version "1.8.22" apply false +} + +include(":app") diff --git a/firebase-emulator-suite/complete/ios/Podfile b/firebase-emulator-suite/complete/ios/Podfile index d97f17e223..e549ee22f3 100644 --- a/firebase-emulator-suite/complete/ios/Podfile +++ b/firebase-emulator-suite/complete/ios/Podfile @@ -29,7 +29,6 @@ flutter_ios_podfile_setup target 'Runner' do use_frameworks! - use_modular_headers! flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) target 'RunnerTests' do diff --git a/firebase-emulator-suite/complete/macos/Podfile b/firebase-emulator-suite/complete/macos/Podfile index c795730db8..29c8eb3294 100644 --- a/firebase-emulator-suite/complete/macos/Podfile +++ b/firebase-emulator-suite/complete/macos/Podfile @@ -28,7 +28,6 @@ flutter_macos_podfile_setup target 'Runner' do use_frameworks! - use_modular_headers! flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__)) target 'RunnerTests' do diff --git a/firebase-emulator-suite/complete/pubspec.yaml b/firebase-emulator-suite/complete/pubspec.yaml index c08fc2d737..13ce7f958c 100644 --- a/firebase-emulator-suite/complete/pubspec.yaml +++ b/firebase-emulator-suite/complete/pubspec.yaml @@ -34,10 +34,10 @@ dependencies: # The following adds the Cupertino Icons font to your application. # Use with the CupertinoIcons class for iOS style icons. cupertino_icons: ^1.0.8 - go_router: ^14.5.0 - firebase_core: ^3.7.0 - firebase_auth: ^5.3.2 - cloud_firestore: ^5.4.5 + go_router: ^14.6.0 + firebase_core: ^3.8.0 + firebase_auth: ^5.3.3 + cloud_firestore: ^5.5.0 dev_dependencies: flutter_test: diff --git a/firebase-emulator-suite/start/android/app/build.gradle b/firebase-emulator-suite/start/android/app/build.gradle.kts similarity index 84% rename from firebase-emulator-suite/start/android/app/build.gradle rename to firebase-emulator-suite/start/android/app/build.gradle.kts index 99b6909075..801dcf1d58 100644 --- a/firebase-emulator-suite/start/android/app/build.gradle +++ b/firebase-emulator-suite/start/android/app/build.gradle.kts @@ -1,8 +1,8 @@ plugins { - id "com.android.application" - id "kotlin-android" + id("com.android.application") + id("kotlin-android") // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. - id "dev.flutter.flutter-gradle-plugin" + id("dev.flutter.flutter-gradle-plugin") } android { @@ -16,7 +16,7 @@ android { } kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8 + jvmTarget = JavaVersion.VERSION_1_8.toString() } defaultConfig { @@ -34,7 +34,7 @@ android { release { // TODO: Add your own signing config for the release build. // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig = signingConfigs.debug + signingConfig = signingConfigs.getByName("debug") } } } diff --git a/firebase-emulator-suite/start/android/build.gradle b/firebase-emulator-suite/start/android/build.gradle deleted file mode 100644 index d2ffbffa4c..0000000000 --- a/firebase-emulator-suite/start/android/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = "../build" -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(":app") -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/firebase-emulator-suite/start/android/build.gradle.kts b/firebase-emulator-suite/start/android/build.gradle.kts new file mode 100644 index 0000000000..89176ef44e --- /dev/null +++ b/firebase-emulator-suite/start/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/firebase-emulator-suite/start/android/gradle.properties b/firebase-emulator-suite/start/android/gradle.properties index 2597170821..f018a61817 100644 --- a/firebase-emulator-suite/start/android/gradle.properties +++ b/firebase-emulator-suite/start/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/firebase-emulator-suite/start/android/gradle/wrapper/gradle-wrapper.properties b/firebase-emulator-suite/start/android/gradle/wrapper/gradle-wrapper.properties index 7bb2df6ba6..afa1e8eb0a 100644 --- a/firebase-emulator-suite/start/android/gradle/wrapper/gradle-wrapper.properties +++ b/firebase-emulator-suite/start/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip diff --git a/firebase-emulator-suite/start/android/settings.gradle b/firebase-emulator-suite/start/android/settings.gradle deleted file mode 100644 index b9e43bd376..0000000000 --- a/firebase-emulator-suite/start/android/settings.gradle +++ /dev/null @@ -1,25 +0,0 @@ -pluginManagement { - def flutterSdkPath = { - def properties = new Properties() - file("local.properties").withInputStream { properties.load(it) } - def flutterSdkPath = properties.getProperty("flutter.sdk") - assert flutterSdkPath != null, "flutter.sdk not set in local.properties" - return flutterSdkPath - }() - - includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") - - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} - -plugins { - id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.1.0" apply false - id "org.jetbrains.kotlin.android" version "1.8.22" apply false -} - -include ":app" diff --git a/firebase-emulator-suite/start/android/settings.gradle.kts b/firebase-emulator-suite/start/android/settings.gradle.kts new file mode 100644 index 0000000000..a439442c20 --- /dev/null +++ b/firebase-emulator-suite/start/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.0" apply false + id("org.jetbrains.kotlin.android") version "1.8.22" apply false +} + +include(":app") diff --git a/firebase-emulator-suite/start/pubspec.yaml b/firebase-emulator-suite/start/pubspec.yaml index c792031e4f..6846decd70 100644 --- a/firebase-emulator-suite/start/pubspec.yaml +++ b/firebase-emulator-suite/start/pubspec.yaml @@ -34,7 +34,7 @@ dependencies: # The following adds the Cupertino Icons font to your application. # Use with the CupertinoIcons class for iOS style icons. cupertino_icons: ^1.0.8 - go_router: ^14.5.0 + go_router: ^14.6.0 dev_dependencies: flutter_test: From 08b896852927e59d6760212cbace667b818eb339 Mon Sep 17 00:00:00 2001 From: Brett Morgan Date: Fri, 15 Nov 2024 19:17:30 +1100 Subject: [PATCH 075/108] Update `firebase-get-to-know-flutter`, part 1 --- .../app/{build.gradle => build.gradle.kts} | 10 +- .../step_02/android/build.gradle | 18 --- .../step_02/android/build.gradle.kts | 21 +++ .../step_02/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../step_02/android/settings.gradle | 25 ---- .../step_02/android/settings.gradle.kts | 25 ++++ .../step_02/ios/Podfile | 1 - .../ios/Runner.xcodeproj/project.pbxproj | 116 ++++++++-------- .../step_02/macos/Podfile | 1 - .../macos/Runner.xcodeproj/project.pbxproj | 128 +++++++++--------- .../step_02/pubspec.yaml | 2 +- .../android/app/build.gradle.kts} | 10 +- .../step_04/android/build.gradle | 18 --- .../step_04/android/build.gradle.kts | 21 +++ .../step_04/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../step_04/android/settings.gradle | 25 ---- .../step_04/android/settings.gradle.kts | 25 ++++ .../step_04/ios/Podfile | 1 - .../ios/Runner.xcodeproj/project.pbxproj | 116 ++++++++-------- .../step_04/macos/Podfile | 1 - .../macos/Runner.xcodeproj/project.pbxproj | 128 +++++++++--------- .../step_04/pubspec.yaml | 8 +- .../android/app/build.gradle.kts} | 10 +- .../step_05/android/build.gradle | 18 --- .../step_05/android/build.gradle.kts | 21 +++ .../step_05/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../step_05/android/settings.gradle | 25 ---- .../step_05/android/settings.gradle.kts | 25 ++++ .../step_05/ios/Podfile | 1 - .../ios/Runner.xcodeproj/project.pbxproj | 116 ++++++++-------- .../step_05/macos/Podfile | 1 - .../macos/Runner.xcodeproj/project.pbxproj | 128 +++++++++--------- .../step_05/pubspec.yaml | 8 +- .../android/app/build.gradle.kts} | 10 +- .../step_06/android/build.gradle | 18 --- .../step_06/android/build.gradle.kts | 21 +++ .../step_06/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../step_06/android/settings.gradle | 25 ---- .../step_06/android/settings.gradle.kts | 25 ++++ .../step_06/ios/Podfile | 1 - .../ios/Runner.xcodeproj/project.pbxproj | 116 ++++++++-------- .../step_06/macos/Podfile | 1 - .../macos/Runner.xcodeproj/project.pbxproj | 128 +++++++++--------- .../step_06/pubspec.yaml | 8 +- .../step_07/android/app/build.gradle | 44 ------ .../step_07/android/app/build.gradle.kts | 44 ++++++ .../step_07/android/build.gradle | 18 --- .../step_07/android/build.gradle.kts | 21 +++ .../step_07/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../step_07/android/settings.gradle | 25 ---- .../step_07/android/settings.gradle.kts | 25 ++++ .../step_07/ios/Podfile | 1 - .../ios/Runner.xcodeproj/project.pbxproj | 116 ++++++++-------- .../step_07/macos/Podfile | 1 - .../macos/Runner.xcodeproj/project.pbxproj | 128 +++++++++--------- .../step_07/pubspec.yaml | 8 +- .../step_09/android/app/build.gradle | 44 ------ .../step_09/android/app/build.gradle.kts | 44 ++++++ .../step_09/android/build.gradle | 18 --- .../step_09/android/build.gradle.kts | 21 +++ .../step_09/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../step_09/android/settings.gradle | 25 ---- .../step_09/android/settings.gradle.kts | 25 ++++ .../step_09/ios/Podfile | 1 - .../ios/Runner.xcodeproj/project.pbxproj | 116 ++++++++-------- .../step_09/macos/Podfile | 1 - .../macos/Runner.xcodeproj/project.pbxproj | 128 +++++++++--------- .../step_09/pubspec.yaml | 8 +- 74 files changed, 1149 insertions(+), 1143 deletions(-) rename firebase-get-to-know-flutter/step_02/android/app/{build.gradle => build.gradle.kts} (84%) delete mode 100644 firebase-get-to-know-flutter/step_02/android/build.gradle create mode 100644 firebase-get-to-know-flutter/step_02/android/build.gradle.kts delete mode 100644 firebase-get-to-know-flutter/step_02/android/settings.gradle create mode 100644 firebase-get-to-know-flutter/step_02/android/settings.gradle.kts rename firebase-get-to-know-flutter/{step_05/android/app/build.gradle => step_04/android/app/build.gradle.kts} (84%) delete mode 100644 firebase-get-to-know-flutter/step_04/android/build.gradle create mode 100644 firebase-get-to-know-flutter/step_04/android/build.gradle.kts delete mode 100644 firebase-get-to-know-flutter/step_04/android/settings.gradle create mode 100644 firebase-get-to-know-flutter/step_04/android/settings.gradle.kts rename firebase-get-to-know-flutter/{step_06/android/app/build.gradle => step_05/android/app/build.gradle.kts} (84%) delete mode 100644 firebase-get-to-know-flutter/step_05/android/build.gradle create mode 100644 firebase-get-to-know-flutter/step_05/android/build.gradle.kts delete mode 100644 firebase-get-to-know-flutter/step_05/android/settings.gradle create mode 100644 firebase-get-to-know-flutter/step_05/android/settings.gradle.kts rename firebase-get-to-know-flutter/{step_04/android/app/build.gradle => step_06/android/app/build.gradle.kts} (84%) delete mode 100644 firebase-get-to-know-flutter/step_06/android/build.gradle create mode 100644 firebase-get-to-know-flutter/step_06/android/build.gradle.kts delete mode 100644 firebase-get-to-know-flutter/step_06/android/settings.gradle create mode 100644 firebase-get-to-know-flutter/step_06/android/settings.gradle.kts delete mode 100644 firebase-get-to-know-flutter/step_07/android/app/build.gradle create mode 100644 firebase-get-to-know-flutter/step_07/android/app/build.gradle.kts delete mode 100644 firebase-get-to-know-flutter/step_07/android/build.gradle create mode 100644 firebase-get-to-know-flutter/step_07/android/build.gradle.kts delete mode 100644 firebase-get-to-know-flutter/step_07/android/settings.gradle create mode 100644 firebase-get-to-know-flutter/step_07/android/settings.gradle.kts delete mode 100644 firebase-get-to-know-flutter/step_09/android/app/build.gradle create mode 100644 firebase-get-to-know-flutter/step_09/android/app/build.gradle.kts delete mode 100644 firebase-get-to-know-flutter/step_09/android/build.gradle create mode 100644 firebase-get-to-know-flutter/step_09/android/build.gradle.kts delete mode 100644 firebase-get-to-know-flutter/step_09/android/settings.gradle create mode 100644 firebase-get-to-know-flutter/step_09/android/settings.gradle.kts diff --git a/firebase-get-to-know-flutter/step_02/android/app/build.gradle b/firebase-get-to-know-flutter/step_02/android/app/build.gradle.kts similarity index 84% rename from firebase-get-to-know-flutter/step_02/android/app/build.gradle rename to firebase-get-to-know-flutter/step_02/android/app/build.gradle.kts index ad5859ad24..f1c6d28ba4 100644 --- a/firebase-get-to-know-flutter/step_02/android/app/build.gradle +++ b/firebase-get-to-know-flutter/step_02/android/app/build.gradle.kts @@ -1,8 +1,8 @@ plugins { - id "com.android.application" - id "kotlin-android" + id("com.android.application") + id("kotlin-android") // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. - id "dev.flutter.flutter-gradle-plugin" + id("dev.flutter.flutter-gradle-plugin") } android { @@ -16,7 +16,7 @@ android { } kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8 + jvmTarget = JavaVersion.VERSION_1_8.toString() } defaultConfig { @@ -34,7 +34,7 @@ android { release { // TODO: Add your own signing config for the release build. // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig = signingConfigs.debug + signingConfig = signingConfigs.getByName("debug") } } } diff --git a/firebase-get-to-know-flutter/step_02/android/build.gradle b/firebase-get-to-know-flutter/step_02/android/build.gradle deleted file mode 100644 index d2ffbffa4c..0000000000 --- a/firebase-get-to-know-flutter/step_02/android/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = "../build" -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(":app") -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/firebase-get-to-know-flutter/step_02/android/build.gradle.kts b/firebase-get-to-know-flutter/step_02/android/build.gradle.kts new file mode 100644 index 0000000000..89176ef44e --- /dev/null +++ b/firebase-get-to-know-flutter/step_02/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/firebase-get-to-know-flutter/step_02/android/gradle.properties b/firebase-get-to-know-flutter/step_02/android/gradle.properties index 2597170821..f018a61817 100644 --- a/firebase-get-to-know-flutter/step_02/android/gradle.properties +++ b/firebase-get-to-know-flutter/step_02/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/firebase-get-to-know-flutter/step_02/android/gradle/wrapper/gradle-wrapper.properties b/firebase-get-to-know-flutter/step_02/android/gradle/wrapper/gradle-wrapper.properties index 7bb2df6ba6..afa1e8eb0a 100644 --- a/firebase-get-to-know-flutter/step_02/android/gradle/wrapper/gradle-wrapper.properties +++ b/firebase-get-to-know-flutter/step_02/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip diff --git a/firebase-get-to-know-flutter/step_02/android/settings.gradle b/firebase-get-to-know-flutter/step_02/android/settings.gradle deleted file mode 100644 index b9e43bd376..0000000000 --- a/firebase-get-to-know-flutter/step_02/android/settings.gradle +++ /dev/null @@ -1,25 +0,0 @@ -pluginManagement { - def flutterSdkPath = { - def properties = new Properties() - file("local.properties").withInputStream { properties.load(it) } - def flutterSdkPath = properties.getProperty("flutter.sdk") - assert flutterSdkPath != null, "flutter.sdk not set in local.properties" - return flutterSdkPath - }() - - includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") - - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} - -plugins { - id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.1.0" apply false - id "org.jetbrains.kotlin.android" version "1.8.22" apply false -} - -include ":app" diff --git a/firebase-get-to-know-flutter/step_02/android/settings.gradle.kts b/firebase-get-to-know-flutter/step_02/android/settings.gradle.kts new file mode 100644 index 0000000000..a439442c20 --- /dev/null +++ b/firebase-get-to-know-flutter/step_02/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.0" apply false + id("org.jetbrains.kotlin.android") version "1.8.22" apply false +} + +include(":app") diff --git a/firebase-get-to-know-flutter/step_02/ios/Podfile b/firebase-get-to-know-flutter/step_02/ios/Podfile index 3e44f9c6f7..2dbf7d728d 100644 --- a/firebase-get-to-know-flutter/step_02/ios/Podfile +++ b/firebase-get-to-know-flutter/step_02/ios/Podfile @@ -29,7 +29,6 @@ flutter_ios_podfile_setup target 'Runner' do use_frameworks! - use_modular_headers! flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) target 'RunnerTests' do diff --git a/firebase-get-to-know-flutter/step_02/ios/Runner.xcodeproj/project.pbxproj b/firebase-get-to-know-flutter/step_02/ios/Runner.xcodeproj/project.pbxproj index b36a0695b4..88487db888 100644 --- a/firebase-get-to-know-flutter/step_02/ios/Runner.xcodeproj/project.pbxproj +++ b/firebase-get-to-know-flutter/step_02/ios/Runner.xcodeproj/project.pbxproj @@ -7,15 +7,15 @@ objects = { /* Begin PBXBuildFile section */ + 082C04D0C743E5A06E960950 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F110CAAAFB2B4F9B9A1E8F31 /* Pods_RunnerTests.framework */; }; 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; - 7A9C31C280F37822AC10EFC6 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A775D781AAFB6ECC974BD650 /* Pods_RunnerTests.framework */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - 9BC295015BFD0F95DA7CDEC1 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D072F4A6C2FEFE989564BCB0 /* Pods_Runner.framework */; }; + CC6FCAC971084E1245544BFA /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E6B516B47CEB51AB31DC92D4 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -44,16 +44,15 @@ /* Begin PBXFileReference section */ 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; + 16FA2CF1141436F952A89855 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 1B2433436ABF8198621D7409 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 5358ABFFB547340BADE91E57 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - 55C5C4278824A4EDF6B82BEC /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - 5CD039B3AB9EC2E131E6C8F5 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - 6DED744C3D22EF43057EEE48 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 67DBA47582AFA4BE4ED6D83C /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 73E271138B4D025FCE58DB98 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; - 775B7D9A711AD243E7CC900F /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; @@ -62,17 +61,18 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 9A20A943144662A86F585ABF /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - A775D781AAFB6ECC974BD650 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - D072F4A6C2FEFE989564BCB0 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 9D64B6D91D2D07CC9EF7FE49 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + E6A8E045350DD7826A5C5E5C /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + E6B516B47CEB51AB31DC92D4 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + F110CAAAFB2B4F9B9A1E8F31 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 7DD45768AC8C7D43ABCA9DE3 /* Frameworks */ = { + 39B7411714C973C7723733FB /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 7A9C31C280F37822AC10EFC6 /* Pods_RunnerTests.framework in Frameworks */, + 082C04D0C743E5A06E960950 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -80,13 +80,27 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 9BC295015BFD0F95DA7CDEC1 /* Pods_Runner.framework in Frameworks */, + CC6FCAC971084E1245544BFA /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 1F5D1AD7679A13B9E59E256F /* Pods */ = { + isa = PBXGroup; + children = ( + E6A8E045350DD7826A5C5E5C /* Pods-Runner.debug.xcconfig */, + 67DBA47582AFA4BE4ED6D83C /* Pods-Runner.release.xcconfig */, + 1B2433436ABF8198621D7409 /* Pods-Runner.profile.xcconfig */, + 16FA2CF1141436F952A89855 /* Pods-RunnerTests.debug.xcconfig */, + 9D64B6D91D2D07CC9EF7FE49 /* Pods-RunnerTests.release.xcconfig */, + 73E271138B4D025FCE58DB98 /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; 331C8082294A63A400263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -95,11 +109,11 @@ path = RunnerTests; sourceTree = ""; }; - 561E40DE921F40D44603A357 /* Frameworks */ = { + 7C6C33056D42C35511132C9E /* Frameworks */ = { isa = PBXGroup; children = ( - D072F4A6C2FEFE989564BCB0 /* Pods_Runner.framework */, - A775D781AAFB6ECC974BD650 /* Pods_RunnerTests.framework */, + E6B516B47CEB51AB31DC92D4 /* Pods_Runner.framework */, + F110CAAAFB2B4F9B9A1E8F31 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -122,8 +136,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - B7525EDD33924E7F2C905A28 /* Pods */, - 561E40DE921F40D44603A357 /* Frameworks */, + 1F5D1AD7679A13B9E59E256F /* Pods */, + 7C6C33056D42C35511132C9E /* Frameworks */, ); sourceTree = ""; }; @@ -151,20 +165,6 @@ path = Runner; sourceTree = ""; }; - B7525EDD33924E7F2C905A28 /* Pods */ = { - isa = PBXGroup; - children = ( - 6DED744C3D22EF43057EEE48 /* Pods-Runner.debug.xcconfig */, - 9A20A943144662A86F585ABF /* Pods-Runner.release.xcconfig */, - 5358ABFFB547340BADE91E57 /* Pods-Runner.profile.xcconfig */, - 775B7D9A711AD243E7CC900F /* Pods-RunnerTests.debug.xcconfig */, - 5CD039B3AB9EC2E131E6C8F5 /* Pods-RunnerTests.release.xcconfig */, - 55C5C4278824A4EDF6B82BEC /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 24615447E6AA9E5E76B95A56 /* [CP] Check Pods Manifest.lock */, + 37E93A95A15B8D583768D758 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 7DD45768AC8C7D43ABCA9DE3 /* Frameworks */, + 39B7411714C973C7723733FB /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - FE3AC9F7FF7CA03E86CBC134 /* [CP] Check Pods Manifest.lock */, + D0CFBE200EDA4DA52FD6E09C /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 04B52FCD7D9AF7EB0D333921 /* [CP] Embed Pods Frameworks */, + 93F4C06206A82D754D92A8CF /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -270,24 +270,7 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 04B52FCD7D9AF7EB0D333921 /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; - 24615447E6AA9E5E76B95A56 /* [CP] Check Pods Manifest.lock */ = { + 37E93A95A15B8D583768D758 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -325,6 +308,23 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; + 93F4C06206A82D754D92A8CF /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -340,7 +340,7 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - FE3AC9F7FF7CA03E86CBC134 /* [CP] Check Pods Manifest.lock */ = { + D0CFBE200EDA4DA52FD6E09C /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -488,7 +488,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 775B7D9A711AD243E7CC900F /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 16FA2CF1141436F952A89855 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -507,7 +507,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 5CD039B3AB9EC2E131E6C8F5 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 9D64B6D91D2D07CC9EF7FE49 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -524,7 +524,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 55C5C4278824A4EDF6B82BEC /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 73E271138B4D025FCE58DB98 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/firebase-get-to-know-flutter/step_02/macos/Podfile b/firebase-get-to-know-flutter/step_02/macos/Podfile index b52666a103..ff5ddb3b8b 100644 --- a/firebase-get-to-know-flutter/step_02/macos/Podfile +++ b/firebase-get-to-know-flutter/step_02/macos/Podfile @@ -28,7 +28,6 @@ flutter_macos_podfile_setup target 'Runner' do use_frameworks! - use_modular_headers! flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__)) target 'RunnerTests' do diff --git a/firebase-get-to-know-flutter/step_02/macos/Runner.xcodeproj/project.pbxproj b/firebase-get-to-know-flutter/step_02/macos/Runner.xcodeproj/project.pbxproj index d85fcc90de..eca001f8f3 100644 --- a/firebase-get-to-know-flutter/step_02/macos/Runner.xcodeproj/project.pbxproj +++ b/firebase-get-to-know-flutter/step_02/macos/Runner.xcodeproj/project.pbxproj @@ -27,8 +27,8 @@ 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 6773A496AD7A5686E2DD29BD /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5AD57AEB256EF9C78131F228 /* Pods_RunnerTests.framework */; }; - 8D4861BD95308793990CB833 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8F12630335546B1C0688E5A2 /* Pods_Runner.framework */; }; + 6AFABF12BBC519D5C4A901F1 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C036F44EC867685CEAB8A8BE /* Pods_Runner.framework */; }; + 9F0DCF96D98359E7727F33C2 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FA1C88B2C8FD60041891B74C /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,7 +62,7 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 0ED29D5295E06CA4849433BA /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 27A12D55B0E1779D5984B001 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -79,15 +79,15 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 4DA808B3C32EB1D9F3FC18B3 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 5AD57AEB256EF9C78131F228 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 434DA5476F159D3D34FBDBA4 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 44323EED11D5023C4A1B67DB /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 8F12630335546B1C0688E5A2 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 921768E3C0134A61232C251B /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - A109CB21F52E718A03B81B57 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - B2CEB86711238F049F19BEB9 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - E072F90EF015017AAEF964C6 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + C036F44EC867685CEAB8A8BE /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + ECD8A5491B41D17E29E95AE1 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + ECE40685908C07B2A5040FAF /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + F65ECCB5512FECB3E8673CC2 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + FA1C88B2C8FD60041891B74C /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 6773A496AD7A5686E2DD29BD /* Pods_RunnerTests.framework in Frameworks */, + 9F0DCF96D98359E7727F33C2 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,27 +103,13 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 8D4861BD95308793990CB833 /* Pods_Runner.framework in Frameworks */, + 6AFABF12BBC519D5C4A901F1 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 06338C9EC6CCDC584FFFB260 /* Pods */ = { - isa = PBXGroup; - children = ( - 921768E3C0134A61232C251B /* Pods-Runner.debug.xcconfig */, - A109CB21F52E718A03B81B57 /* Pods-Runner.release.xcconfig */, - E072F90EF015017AAEF964C6 /* Pods-Runner.profile.xcconfig */, - 4DA808B3C32EB1D9F3FC18B3 /* Pods-RunnerTests.debug.xcconfig */, - 0ED29D5295E06CA4849433BA /* Pods-RunnerTests.release.xcconfig */, - B2CEB86711238F049F19BEB9 /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; 331C80D6294CF71000263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -151,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 06338C9EC6CCDC584FFFB260 /* Pods */, + 732A0D8F978DD3061D16CF02 /* Pods */, ); sourceTree = ""; }; @@ -199,11 +185,25 @@ path = Runner; sourceTree = ""; }; + 732A0D8F978DD3061D16CF02 /* Pods */ = { + isa = PBXGroup; + children = ( + 27A12D55B0E1779D5984B001 /* Pods-Runner.debug.xcconfig */, + 44323EED11D5023C4A1B67DB /* Pods-Runner.release.xcconfig */, + F65ECCB5512FECB3E8673CC2 /* Pods-Runner.profile.xcconfig */, + ECE40685908C07B2A5040FAF /* Pods-RunnerTests.debug.xcconfig */, + 434DA5476F159D3D34FBDBA4 /* Pods-RunnerTests.release.xcconfig */, + ECD8A5491B41D17E29E95AE1 /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - 8F12630335546B1C0688E5A2 /* Pods_Runner.framework */, - 5AD57AEB256EF9C78131F228 /* Pods_RunnerTests.framework */, + C036F44EC867685CEAB8A8BE /* Pods_Runner.framework */, + FA1C88B2C8FD60041891B74C /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 028AD4DD9A19B93A662AECAF /* [CP] Check Pods Manifest.lock */, + 8B20AB343C49FA1A88CE9F4C /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - F1E17869CBA61BDB552EF98E /* [CP] Check Pods Manifest.lock */, + 3C67C9C385BE70FC522DCB83 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 3B746273FB6BFBEE317579ED /* [CP] Embed Pods Frameworks */, + DCAFE8444F0E285F11EAB403 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,28 +323,6 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 028AD4DD9A19B93A662AECAF /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -383,24 +361,29 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 3B746273FB6BFBEE317579ED /* [CP] Embed Pods Frameworks */ = { + 3C67C9C385BE70FC522DCB83 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - F1E17869CBA61BDB552EF98E /* [CP] Check Pods Manifest.lock */ = { + 8B20AB343C49FA1A88CE9F4C /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -415,13 +398,30 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; + DCAFE8444F0E285F11EAB403 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 4DA808B3C32EB1D9F3FC18B3 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = ECE40685908C07B2A5040FAF /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -489,7 +489,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 0ED29D5295E06CA4849433BA /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 434DA5476F159D3D34FBDBA4 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -505,7 +505,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = B2CEB86711238F049F19BEB9 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = ECD8A5491B41D17E29E95AE1 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/firebase-get-to-know-flutter/step_02/pubspec.yaml b/firebase-get-to-know-flutter/step_02/pubspec.yaml index 55bbd86ec5..aa89d48269 100644 --- a/firebase-get-to-know-flutter/step_02/pubspec.yaml +++ b/firebase-get-to-know-flutter/step_02/pubspec.yaml @@ -36,7 +36,7 @@ dependencies: # Use with the CupertinoIcons class for iOS style icons. cupertino_icons: ^1.0.8 google_fonts: ^6.2.1 - go_router: ^14.5.0 + go_router: ^14.6.0 dev_dependencies: flutter_test: diff --git a/firebase-get-to-know-flutter/step_05/android/app/build.gradle b/firebase-get-to-know-flutter/step_04/android/app/build.gradle.kts similarity index 84% rename from firebase-get-to-know-flutter/step_05/android/app/build.gradle rename to firebase-get-to-know-flutter/step_04/android/app/build.gradle.kts index ad5859ad24..f1c6d28ba4 100644 --- a/firebase-get-to-know-flutter/step_05/android/app/build.gradle +++ b/firebase-get-to-know-flutter/step_04/android/app/build.gradle.kts @@ -1,8 +1,8 @@ plugins { - id "com.android.application" - id "kotlin-android" + id("com.android.application") + id("kotlin-android") // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. - id "dev.flutter.flutter-gradle-plugin" + id("dev.flutter.flutter-gradle-plugin") } android { @@ -16,7 +16,7 @@ android { } kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8 + jvmTarget = JavaVersion.VERSION_1_8.toString() } defaultConfig { @@ -34,7 +34,7 @@ android { release { // TODO: Add your own signing config for the release build. // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig = signingConfigs.debug + signingConfig = signingConfigs.getByName("debug") } } } diff --git a/firebase-get-to-know-flutter/step_04/android/build.gradle b/firebase-get-to-know-flutter/step_04/android/build.gradle deleted file mode 100644 index d2ffbffa4c..0000000000 --- a/firebase-get-to-know-flutter/step_04/android/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = "../build" -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(":app") -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/firebase-get-to-know-flutter/step_04/android/build.gradle.kts b/firebase-get-to-know-flutter/step_04/android/build.gradle.kts new file mode 100644 index 0000000000..89176ef44e --- /dev/null +++ b/firebase-get-to-know-flutter/step_04/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/firebase-get-to-know-flutter/step_04/android/gradle.properties b/firebase-get-to-know-flutter/step_04/android/gradle.properties index 2597170821..f018a61817 100644 --- a/firebase-get-to-know-flutter/step_04/android/gradle.properties +++ b/firebase-get-to-know-flutter/step_04/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/firebase-get-to-know-flutter/step_04/android/gradle/wrapper/gradle-wrapper.properties b/firebase-get-to-know-flutter/step_04/android/gradle/wrapper/gradle-wrapper.properties index 7bb2df6ba6..afa1e8eb0a 100644 --- a/firebase-get-to-know-flutter/step_04/android/gradle/wrapper/gradle-wrapper.properties +++ b/firebase-get-to-know-flutter/step_04/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip diff --git a/firebase-get-to-know-flutter/step_04/android/settings.gradle b/firebase-get-to-know-flutter/step_04/android/settings.gradle deleted file mode 100644 index b9e43bd376..0000000000 --- a/firebase-get-to-know-flutter/step_04/android/settings.gradle +++ /dev/null @@ -1,25 +0,0 @@ -pluginManagement { - def flutterSdkPath = { - def properties = new Properties() - file("local.properties").withInputStream { properties.load(it) } - def flutterSdkPath = properties.getProperty("flutter.sdk") - assert flutterSdkPath != null, "flutter.sdk not set in local.properties" - return flutterSdkPath - }() - - includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") - - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} - -plugins { - id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.1.0" apply false - id "org.jetbrains.kotlin.android" version "1.8.22" apply false -} - -include ":app" diff --git a/firebase-get-to-know-flutter/step_04/android/settings.gradle.kts b/firebase-get-to-know-flutter/step_04/android/settings.gradle.kts new file mode 100644 index 0000000000..a439442c20 --- /dev/null +++ b/firebase-get-to-know-flutter/step_04/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.0" apply false + id("org.jetbrains.kotlin.android") version "1.8.22" apply false +} + +include(":app") diff --git a/firebase-get-to-know-flutter/step_04/ios/Podfile b/firebase-get-to-know-flutter/step_04/ios/Podfile index 3e44f9c6f7..2dbf7d728d 100644 --- a/firebase-get-to-know-flutter/step_04/ios/Podfile +++ b/firebase-get-to-know-flutter/step_04/ios/Podfile @@ -29,7 +29,6 @@ flutter_ios_podfile_setup target 'Runner' do use_frameworks! - use_modular_headers! flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) target 'RunnerTests' do diff --git a/firebase-get-to-know-flutter/step_04/ios/Runner.xcodeproj/project.pbxproj b/firebase-get-to-know-flutter/step_04/ios/Runner.xcodeproj/project.pbxproj index b36a0695b4..88487db888 100644 --- a/firebase-get-to-know-flutter/step_04/ios/Runner.xcodeproj/project.pbxproj +++ b/firebase-get-to-know-flutter/step_04/ios/Runner.xcodeproj/project.pbxproj @@ -7,15 +7,15 @@ objects = { /* Begin PBXBuildFile section */ + 082C04D0C743E5A06E960950 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F110CAAAFB2B4F9B9A1E8F31 /* Pods_RunnerTests.framework */; }; 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; - 7A9C31C280F37822AC10EFC6 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A775D781AAFB6ECC974BD650 /* Pods_RunnerTests.framework */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - 9BC295015BFD0F95DA7CDEC1 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D072F4A6C2FEFE989564BCB0 /* Pods_Runner.framework */; }; + CC6FCAC971084E1245544BFA /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E6B516B47CEB51AB31DC92D4 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -44,16 +44,15 @@ /* Begin PBXFileReference section */ 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; + 16FA2CF1141436F952A89855 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 1B2433436ABF8198621D7409 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 5358ABFFB547340BADE91E57 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - 55C5C4278824A4EDF6B82BEC /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - 5CD039B3AB9EC2E131E6C8F5 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - 6DED744C3D22EF43057EEE48 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 67DBA47582AFA4BE4ED6D83C /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 73E271138B4D025FCE58DB98 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; - 775B7D9A711AD243E7CC900F /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; @@ -62,17 +61,18 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 9A20A943144662A86F585ABF /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - A775D781AAFB6ECC974BD650 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - D072F4A6C2FEFE989564BCB0 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 9D64B6D91D2D07CC9EF7FE49 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + E6A8E045350DD7826A5C5E5C /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + E6B516B47CEB51AB31DC92D4 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + F110CAAAFB2B4F9B9A1E8F31 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 7DD45768AC8C7D43ABCA9DE3 /* Frameworks */ = { + 39B7411714C973C7723733FB /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 7A9C31C280F37822AC10EFC6 /* Pods_RunnerTests.framework in Frameworks */, + 082C04D0C743E5A06E960950 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -80,13 +80,27 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 9BC295015BFD0F95DA7CDEC1 /* Pods_Runner.framework in Frameworks */, + CC6FCAC971084E1245544BFA /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 1F5D1AD7679A13B9E59E256F /* Pods */ = { + isa = PBXGroup; + children = ( + E6A8E045350DD7826A5C5E5C /* Pods-Runner.debug.xcconfig */, + 67DBA47582AFA4BE4ED6D83C /* Pods-Runner.release.xcconfig */, + 1B2433436ABF8198621D7409 /* Pods-Runner.profile.xcconfig */, + 16FA2CF1141436F952A89855 /* Pods-RunnerTests.debug.xcconfig */, + 9D64B6D91D2D07CC9EF7FE49 /* Pods-RunnerTests.release.xcconfig */, + 73E271138B4D025FCE58DB98 /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; 331C8082294A63A400263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -95,11 +109,11 @@ path = RunnerTests; sourceTree = ""; }; - 561E40DE921F40D44603A357 /* Frameworks */ = { + 7C6C33056D42C35511132C9E /* Frameworks */ = { isa = PBXGroup; children = ( - D072F4A6C2FEFE989564BCB0 /* Pods_Runner.framework */, - A775D781AAFB6ECC974BD650 /* Pods_RunnerTests.framework */, + E6B516B47CEB51AB31DC92D4 /* Pods_Runner.framework */, + F110CAAAFB2B4F9B9A1E8F31 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -122,8 +136,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - B7525EDD33924E7F2C905A28 /* Pods */, - 561E40DE921F40D44603A357 /* Frameworks */, + 1F5D1AD7679A13B9E59E256F /* Pods */, + 7C6C33056D42C35511132C9E /* Frameworks */, ); sourceTree = ""; }; @@ -151,20 +165,6 @@ path = Runner; sourceTree = ""; }; - B7525EDD33924E7F2C905A28 /* Pods */ = { - isa = PBXGroup; - children = ( - 6DED744C3D22EF43057EEE48 /* Pods-Runner.debug.xcconfig */, - 9A20A943144662A86F585ABF /* Pods-Runner.release.xcconfig */, - 5358ABFFB547340BADE91E57 /* Pods-Runner.profile.xcconfig */, - 775B7D9A711AD243E7CC900F /* Pods-RunnerTests.debug.xcconfig */, - 5CD039B3AB9EC2E131E6C8F5 /* Pods-RunnerTests.release.xcconfig */, - 55C5C4278824A4EDF6B82BEC /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 24615447E6AA9E5E76B95A56 /* [CP] Check Pods Manifest.lock */, + 37E93A95A15B8D583768D758 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 7DD45768AC8C7D43ABCA9DE3 /* Frameworks */, + 39B7411714C973C7723733FB /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - FE3AC9F7FF7CA03E86CBC134 /* [CP] Check Pods Manifest.lock */, + D0CFBE200EDA4DA52FD6E09C /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 04B52FCD7D9AF7EB0D333921 /* [CP] Embed Pods Frameworks */, + 93F4C06206A82D754D92A8CF /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -270,24 +270,7 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 04B52FCD7D9AF7EB0D333921 /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; - 24615447E6AA9E5E76B95A56 /* [CP] Check Pods Manifest.lock */ = { + 37E93A95A15B8D583768D758 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -325,6 +308,23 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; + 93F4C06206A82D754D92A8CF /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -340,7 +340,7 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - FE3AC9F7FF7CA03E86CBC134 /* [CP] Check Pods Manifest.lock */ = { + D0CFBE200EDA4DA52FD6E09C /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -488,7 +488,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 775B7D9A711AD243E7CC900F /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 16FA2CF1141436F952A89855 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -507,7 +507,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 5CD039B3AB9EC2E131E6C8F5 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 9D64B6D91D2D07CC9EF7FE49 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -524,7 +524,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 55C5C4278824A4EDF6B82BEC /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 73E271138B4D025FCE58DB98 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/firebase-get-to-know-flutter/step_04/macos/Podfile b/firebase-get-to-know-flutter/step_04/macos/Podfile index b52666a103..ff5ddb3b8b 100644 --- a/firebase-get-to-know-flutter/step_04/macos/Podfile +++ b/firebase-get-to-know-flutter/step_04/macos/Podfile @@ -28,7 +28,6 @@ flutter_macos_podfile_setup target 'Runner' do use_frameworks! - use_modular_headers! flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__)) target 'RunnerTests' do diff --git a/firebase-get-to-know-flutter/step_04/macos/Runner.xcodeproj/project.pbxproj b/firebase-get-to-know-flutter/step_04/macos/Runner.xcodeproj/project.pbxproj index d85fcc90de..eca001f8f3 100644 --- a/firebase-get-to-know-flutter/step_04/macos/Runner.xcodeproj/project.pbxproj +++ b/firebase-get-to-know-flutter/step_04/macos/Runner.xcodeproj/project.pbxproj @@ -27,8 +27,8 @@ 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 6773A496AD7A5686E2DD29BD /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5AD57AEB256EF9C78131F228 /* Pods_RunnerTests.framework */; }; - 8D4861BD95308793990CB833 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8F12630335546B1C0688E5A2 /* Pods_Runner.framework */; }; + 6AFABF12BBC519D5C4A901F1 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C036F44EC867685CEAB8A8BE /* Pods_Runner.framework */; }; + 9F0DCF96D98359E7727F33C2 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FA1C88B2C8FD60041891B74C /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,7 +62,7 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 0ED29D5295E06CA4849433BA /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 27A12D55B0E1779D5984B001 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -79,15 +79,15 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 4DA808B3C32EB1D9F3FC18B3 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 5AD57AEB256EF9C78131F228 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 434DA5476F159D3D34FBDBA4 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 44323EED11D5023C4A1B67DB /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 8F12630335546B1C0688E5A2 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 921768E3C0134A61232C251B /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - A109CB21F52E718A03B81B57 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - B2CEB86711238F049F19BEB9 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - E072F90EF015017AAEF964C6 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + C036F44EC867685CEAB8A8BE /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + ECD8A5491B41D17E29E95AE1 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + ECE40685908C07B2A5040FAF /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + F65ECCB5512FECB3E8673CC2 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + FA1C88B2C8FD60041891B74C /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 6773A496AD7A5686E2DD29BD /* Pods_RunnerTests.framework in Frameworks */, + 9F0DCF96D98359E7727F33C2 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,27 +103,13 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 8D4861BD95308793990CB833 /* Pods_Runner.framework in Frameworks */, + 6AFABF12BBC519D5C4A901F1 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 06338C9EC6CCDC584FFFB260 /* Pods */ = { - isa = PBXGroup; - children = ( - 921768E3C0134A61232C251B /* Pods-Runner.debug.xcconfig */, - A109CB21F52E718A03B81B57 /* Pods-Runner.release.xcconfig */, - E072F90EF015017AAEF964C6 /* Pods-Runner.profile.xcconfig */, - 4DA808B3C32EB1D9F3FC18B3 /* Pods-RunnerTests.debug.xcconfig */, - 0ED29D5295E06CA4849433BA /* Pods-RunnerTests.release.xcconfig */, - B2CEB86711238F049F19BEB9 /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; 331C80D6294CF71000263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -151,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 06338C9EC6CCDC584FFFB260 /* Pods */, + 732A0D8F978DD3061D16CF02 /* Pods */, ); sourceTree = ""; }; @@ -199,11 +185,25 @@ path = Runner; sourceTree = ""; }; + 732A0D8F978DD3061D16CF02 /* Pods */ = { + isa = PBXGroup; + children = ( + 27A12D55B0E1779D5984B001 /* Pods-Runner.debug.xcconfig */, + 44323EED11D5023C4A1B67DB /* Pods-Runner.release.xcconfig */, + F65ECCB5512FECB3E8673CC2 /* Pods-Runner.profile.xcconfig */, + ECE40685908C07B2A5040FAF /* Pods-RunnerTests.debug.xcconfig */, + 434DA5476F159D3D34FBDBA4 /* Pods-RunnerTests.release.xcconfig */, + ECD8A5491B41D17E29E95AE1 /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - 8F12630335546B1C0688E5A2 /* Pods_Runner.framework */, - 5AD57AEB256EF9C78131F228 /* Pods_RunnerTests.framework */, + C036F44EC867685CEAB8A8BE /* Pods_Runner.framework */, + FA1C88B2C8FD60041891B74C /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 028AD4DD9A19B93A662AECAF /* [CP] Check Pods Manifest.lock */, + 8B20AB343C49FA1A88CE9F4C /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - F1E17869CBA61BDB552EF98E /* [CP] Check Pods Manifest.lock */, + 3C67C9C385BE70FC522DCB83 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 3B746273FB6BFBEE317579ED /* [CP] Embed Pods Frameworks */, + DCAFE8444F0E285F11EAB403 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,28 +323,6 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 028AD4DD9A19B93A662AECAF /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -383,24 +361,29 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 3B746273FB6BFBEE317579ED /* [CP] Embed Pods Frameworks */ = { + 3C67C9C385BE70FC522DCB83 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - F1E17869CBA61BDB552EF98E /* [CP] Check Pods Manifest.lock */ = { + 8B20AB343C49FA1A88CE9F4C /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -415,13 +398,30 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; + DCAFE8444F0E285F11EAB403 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 4DA808B3C32EB1D9F3FC18B3 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = ECE40685908C07B2A5040FAF /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -489,7 +489,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 0ED29D5295E06CA4849433BA /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 434DA5476F159D3D34FBDBA4 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -505,7 +505,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = B2CEB86711238F049F19BEB9 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = ECD8A5491B41D17E29E95AE1 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/firebase-get-to-know-flutter/step_04/pubspec.yaml b/firebase-get-to-know-flutter/step_04/pubspec.yaml index d7f35cbe41..ad5dc1885b 100644 --- a/firebase-get-to-know-flutter/step_04/pubspec.yaml +++ b/firebase-get-to-know-flutter/step_04/pubspec.yaml @@ -36,10 +36,10 @@ dependencies: # Use with the CupertinoIcons class for iOS style icons. cupertino_icons: ^1.0.8 google_fonts: ^6.2.1 - go_router: ^14.5.0 - cloud_firestore: ^5.4.5 - firebase_auth: ^5.3.2 - firebase_core: ^3.7.0 + go_router: ^14.6.0 + cloud_firestore: ^5.5.0 + firebase_auth: ^5.3.3 + firebase_core: ^3.8.0 provider: ^6.1.2 firebase_ui_auth: ^1.16.0 diff --git a/firebase-get-to-know-flutter/step_06/android/app/build.gradle b/firebase-get-to-know-flutter/step_05/android/app/build.gradle.kts similarity index 84% rename from firebase-get-to-know-flutter/step_06/android/app/build.gradle rename to firebase-get-to-know-flutter/step_05/android/app/build.gradle.kts index ad5859ad24..f1c6d28ba4 100644 --- a/firebase-get-to-know-flutter/step_06/android/app/build.gradle +++ b/firebase-get-to-know-flutter/step_05/android/app/build.gradle.kts @@ -1,8 +1,8 @@ plugins { - id "com.android.application" - id "kotlin-android" + id("com.android.application") + id("kotlin-android") // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. - id "dev.flutter.flutter-gradle-plugin" + id("dev.flutter.flutter-gradle-plugin") } android { @@ -16,7 +16,7 @@ android { } kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8 + jvmTarget = JavaVersion.VERSION_1_8.toString() } defaultConfig { @@ -34,7 +34,7 @@ android { release { // TODO: Add your own signing config for the release build. // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig = signingConfigs.debug + signingConfig = signingConfigs.getByName("debug") } } } diff --git a/firebase-get-to-know-flutter/step_05/android/build.gradle b/firebase-get-to-know-flutter/step_05/android/build.gradle deleted file mode 100644 index d2ffbffa4c..0000000000 --- a/firebase-get-to-know-flutter/step_05/android/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = "../build" -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(":app") -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/firebase-get-to-know-flutter/step_05/android/build.gradle.kts b/firebase-get-to-know-flutter/step_05/android/build.gradle.kts new file mode 100644 index 0000000000..89176ef44e --- /dev/null +++ b/firebase-get-to-know-flutter/step_05/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/firebase-get-to-know-flutter/step_05/android/gradle.properties b/firebase-get-to-know-flutter/step_05/android/gradle.properties index 2597170821..f018a61817 100644 --- a/firebase-get-to-know-flutter/step_05/android/gradle.properties +++ b/firebase-get-to-know-flutter/step_05/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/firebase-get-to-know-flutter/step_05/android/gradle/wrapper/gradle-wrapper.properties b/firebase-get-to-know-flutter/step_05/android/gradle/wrapper/gradle-wrapper.properties index 7bb2df6ba6..afa1e8eb0a 100644 --- a/firebase-get-to-know-flutter/step_05/android/gradle/wrapper/gradle-wrapper.properties +++ b/firebase-get-to-know-flutter/step_05/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip diff --git a/firebase-get-to-know-flutter/step_05/android/settings.gradle b/firebase-get-to-know-flutter/step_05/android/settings.gradle deleted file mode 100644 index b9e43bd376..0000000000 --- a/firebase-get-to-know-flutter/step_05/android/settings.gradle +++ /dev/null @@ -1,25 +0,0 @@ -pluginManagement { - def flutterSdkPath = { - def properties = new Properties() - file("local.properties").withInputStream { properties.load(it) } - def flutterSdkPath = properties.getProperty("flutter.sdk") - assert flutterSdkPath != null, "flutter.sdk not set in local.properties" - return flutterSdkPath - }() - - includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") - - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} - -plugins { - id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.1.0" apply false - id "org.jetbrains.kotlin.android" version "1.8.22" apply false -} - -include ":app" diff --git a/firebase-get-to-know-flutter/step_05/android/settings.gradle.kts b/firebase-get-to-know-flutter/step_05/android/settings.gradle.kts new file mode 100644 index 0000000000..a439442c20 --- /dev/null +++ b/firebase-get-to-know-flutter/step_05/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.0" apply false + id("org.jetbrains.kotlin.android") version "1.8.22" apply false +} + +include(":app") diff --git a/firebase-get-to-know-flutter/step_05/ios/Podfile b/firebase-get-to-know-flutter/step_05/ios/Podfile index 3e44f9c6f7..2dbf7d728d 100644 --- a/firebase-get-to-know-flutter/step_05/ios/Podfile +++ b/firebase-get-to-know-flutter/step_05/ios/Podfile @@ -29,7 +29,6 @@ flutter_ios_podfile_setup target 'Runner' do use_frameworks! - use_modular_headers! flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) target 'RunnerTests' do diff --git a/firebase-get-to-know-flutter/step_05/ios/Runner.xcodeproj/project.pbxproj b/firebase-get-to-know-flutter/step_05/ios/Runner.xcodeproj/project.pbxproj index b36a0695b4..88487db888 100644 --- a/firebase-get-to-know-flutter/step_05/ios/Runner.xcodeproj/project.pbxproj +++ b/firebase-get-to-know-flutter/step_05/ios/Runner.xcodeproj/project.pbxproj @@ -7,15 +7,15 @@ objects = { /* Begin PBXBuildFile section */ + 082C04D0C743E5A06E960950 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F110CAAAFB2B4F9B9A1E8F31 /* Pods_RunnerTests.framework */; }; 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; - 7A9C31C280F37822AC10EFC6 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A775D781AAFB6ECC974BD650 /* Pods_RunnerTests.framework */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - 9BC295015BFD0F95DA7CDEC1 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D072F4A6C2FEFE989564BCB0 /* Pods_Runner.framework */; }; + CC6FCAC971084E1245544BFA /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E6B516B47CEB51AB31DC92D4 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -44,16 +44,15 @@ /* Begin PBXFileReference section */ 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; + 16FA2CF1141436F952A89855 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 1B2433436ABF8198621D7409 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 5358ABFFB547340BADE91E57 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - 55C5C4278824A4EDF6B82BEC /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - 5CD039B3AB9EC2E131E6C8F5 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - 6DED744C3D22EF43057EEE48 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 67DBA47582AFA4BE4ED6D83C /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 73E271138B4D025FCE58DB98 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; - 775B7D9A711AD243E7CC900F /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; @@ -62,17 +61,18 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 9A20A943144662A86F585ABF /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - A775D781AAFB6ECC974BD650 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - D072F4A6C2FEFE989564BCB0 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 9D64B6D91D2D07CC9EF7FE49 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + E6A8E045350DD7826A5C5E5C /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + E6B516B47CEB51AB31DC92D4 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + F110CAAAFB2B4F9B9A1E8F31 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 7DD45768AC8C7D43ABCA9DE3 /* Frameworks */ = { + 39B7411714C973C7723733FB /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 7A9C31C280F37822AC10EFC6 /* Pods_RunnerTests.framework in Frameworks */, + 082C04D0C743E5A06E960950 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -80,13 +80,27 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 9BC295015BFD0F95DA7CDEC1 /* Pods_Runner.framework in Frameworks */, + CC6FCAC971084E1245544BFA /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 1F5D1AD7679A13B9E59E256F /* Pods */ = { + isa = PBXGroup; + children = ( + E6A8E045350DD7826A5C5E5C /* Pods-Runner.debug.xcconfig */, + 67DBA47582AFA4BE4ED6D83C /* Pods-Runner.release.xcconfig */, + 1B2433436ABF8198621D7409 /* Pods-Runner.profile.xcconfig */, + 16FA2CF1141436F952A89855 /* Pods-RunnerTests.debug.xcconfig */, + 9D64B6D91D2D07CC9EF7FE49 /* Pods-RunnerTests.release.xcconfig */, + 73E271138B4D025FCE58DB98 /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; 331C8082294A63A400263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -95,11 +109,11 @@ path = RunnerTests; sourceTree = ""; }; - 561E40DE921F40D44603A357 /* Frameworks */ = { + 7C6C33056D42C35511132C9E /* Frameworks */ = { isa = PBXGroup; children = ( - D072F4A6C2FEFE989564BCB0 /* Pods_Runner.framework */, - A775D781AAFB6ECC974BD650 /* Pods_RunnerTests.framework */, + E6B516B47CEB51AB31DC92D4 /* Pods_Runner.framework */, + F110CAAAFB2B4F9B9A1E8F31 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -122,8 +136,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - B7525EDD33924E7F2C905A28 /* Pods */, - 561E40DE921F40D44603A357 /* Frameworks */, + 1F5D1AD7679A13B9E59E256F /* Pods */, + 7C6C33056D42C35511132C9E /* Frameworks */, ); sourceTree = ""; }; @@ -151,20 +165,6 @@ path = Runner; sourceTree = ""; }; - B7525EDD33924E7F2C905A28 /* Pods */ = { - isa = PBXGroup; - children = ( - 6DED744C3D22EF43057EEE48 /* Pods-Runner.debug.xcconfig */, - 9A20A943144662A86F585ABF /* Pods-Runner.release.xcconfig */, - 5358ABFFB547340BADE91E57 /* Pods-Runner.profile.xcconfig */, - 775B7D9A711AD243E7CC900F /* Pods-RunnerTests.debug.xcconfig */, - 5CD039B3AB9EC2E131E6C8F5 /* Pods-RunnerTests.release.xcconfig */, - 55C5C4278824A4EDF6B82BEC /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 24615447E6AA9E5E76B95A56 /* [CP] Check Pods Manifest.lock */, + 37E93A95A15B8D583768D758 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 7DD45768AC8C7D43ABCA9DE3 /* Frameworks */, + 39B7411714C973C7723733FB /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - FE3AC9F7FF7CA03E86CBC134 /* [CP] Check Pods Manifest.lock */, + D0CFBE200EDA4DA52FD6E09C /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 04B52FCD7D9AF7EB0D333921 /* [CP] Embed Pods Frameworks */, + 93F4C06206A82D754D92A8CF /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -270,24 +270,7 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 04B52FCD7D9AF7EB0D333921 /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; - 24615447E6AA9E5E76B95A56 /* [CP] Check Pods Manifest.lock */ = { + 37E93A95A15B8D583768D758 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -325,6 +308,23 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; + 93F4C06206A82D754D92A8CF /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -340,7 +340,7 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - FE3AC9F7FF7CA03E86CBC134 /* [CP] Check Pods Manifest.lock */ = { + D0CFBE200EDA4DA52FD6E09C /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -488,7 +488,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 775B7D9A711AD243E7CC900F /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 16FA2CF1141436F952A89855 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -507,7 +507,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 5CD039B3AB9EC2E131E6C8F5 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 9D64B6D91D2D07CC9EF7FE49 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -524,7 +524,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 55C5C4278824A4EDF6B82BEC /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 73E271138B4D025FCE58DB98 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/firebase-get-to-know-flutter/step_05/macos/Podfile b/firebase-get-to-know-flutter/step_05/macos/Podfile index b52666a103..ff5ddb3b8b 100644 --- a/firebase-get-to-know-flutter/step_05/macos/Podfile +++ b/firebase-get-to-know-flutter/step_05/macos/Podfile @@ -28,7 +28,6 @@ flutter_macos_podfile_setup target 'Runner' do use_frameworks! - use_modular_headers! flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__)) target 'RunnerTests' do diff --git a/firebase-get-to-know-flutter/step_05/macos/Runner.xcodeproj/project.pbxproj b/firebase-get-to-know-flutter/step_05/macos/Runner.xcodeproj/project.pbxproj index d85fcc90de..eca001f8f3 100644 --- a/firebase-get-to-know-flutter/step_05/macos/Runner.xcodeproj/project.pbxproj +++ b/firebase-get-to-know-flutter/step_05/macos/Runner.xcodeproj/project.pbxproj @@ -27,8 +27,8 @@ 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 6773A496AD7A5686E2DD29BD /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5AD57AEB256EF9C78131F228 /* Pods_RunnerTests.framework */; }; - 8D4861BD95308793990CB833 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8F12630335546B1C0688E5A2 /* Pods_Runner.framework */; }; + 6AFABF12BBC519D5C4A901F1 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C036F44EC867685CEAB8A8BE /* Pods_Runner.framework */; }; + 9F0DCF96D98359E7727F33C2 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FA1C88B2C8FD60041891B74C /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,7 +62,7 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 0ED29D5295E06CA4849433BA /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 27A12D55B0E1779D5984B001 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -79,15 +79,15 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 4DA808B3C32EB1D9F3FC18B3 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 5AD57AEB256EF9C78131F228 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 434DA5476F159D3D34FBDBA4 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 44323EED11D5023C4A1B67DB /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 8F12630335546B1C0688E5A2 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 921768E3C0134A61232C251B /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - A109CB21F52E718A03B81B57 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - B2CEB86711238F049F19BEB9 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - E072F90EF015017AAEF964C6 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + C036F44EC867685CEAB8A8BE /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + ECD8A5491B41D17E29E95AE1 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + ECE40685908C07B2A5040FAF /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + F65ECCB5512FECB3E8673CC2 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + FA1C88B2C8FD60041891B74C /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 6773A496AD7A5686E2DD29BD /* Pods_RunnerTests.framework in Frameworks */, + 9F0DCF96D98359E7727F33C2 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,27 +103,13 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 8D4861BD95308793990CB833 /* Pods_Runner.framework in Frameworks */, + 6AFABF12BBC519D5C4A901F1 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 06338C9EC6CCDC584FFFB260 /* Pods */ = { - isa = PBXGroup; - children = ( - 921768E3C0134A61232C251B /* Pods-Runner.debug.xcconfig */, - A109CB21F52E718A03B81B57 /* Pods-Runner.release.xcconfig */, - E072F90EF015017AAEF964C6 /* Pods-Runner.profile.xcconfig */, - 4DA808B3C32EB1D9F3FC18B3 /* Pods-RunnerTests.debug.xcconfig */, - 0ED29D5295E06CA4849433BA /* Pods-RunnerTests.release.xcconfig */, - B2CEB86711238F049F19BEB9 /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; 331C80D6294CF71000263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -151,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 06338C9EC6CCDC584FFFB260 /* Pods */, + 732A0D8F978DD3061D16CF02 /* Pods */, ); sourceTree = ""; }; @@ -199,11 +185,25 @@ path = Runner; sourceTree = ""; }; + 732A0D8F978DD3061D16CF02 /* Pods */ = { + isa = PBXGroup; + children = ( + 27A12D55B0E1779D5984B001 /* Pods-Runner.debug.xcconfig */, + 44323EED11D5023C4A1B67DB /* Pods-Runner.release.xcconfig */, + F65ECCB5512FECB3E8673CC2 /* Pods-Runner.profile.xcconfig */, + ECE40685908C07B2A5040FAF /* Pods-RunnerTests.debug.xcconfig */, + 434DA5476F159D3D34FBDBA4 /* Pods-RunnerTests.release.xcconfig */, + ECD8A5491B41D17E29E95AE1 /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - 8F12630335546B1C0688E5A2 /* Pods_Runner.framework */, - 5AD57AEB256EF9C78131F228 /* Pods_RunnerTests.framework */, + C036F44EC867685CEAB8A8BE /* Pods_Runner.framework */, + FA1C88B2C8FD60041891B74C /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 028AD4DD9A19B93A662AECAF /* [CP] Check Pods Manifest.lock */, + 8B20AB343C49FA1A88CE9F4C /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - F1E17869CBA61BDB552EF98E /* [CP] Check Pods Manifest.lock */, + 3C67C9C385BE70FC522DCB83 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 3B746273FB6BFBEE317579ED /* [CP] Embed Pods Frameworks */, + DCAFE8444F0E285F11EAB403 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,28 +323,6 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 028AD4DD9A19B93A662AECAF /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -383,24 +361,29 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 3B746273FB6BFBEE317579ED /* [CP] Embed Pods Frameworks */ = { + 3C67C9C385BE70FC522DCB83 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - F1E17869CBA61BDB552EF98E /* [CP] Check Pods Manifest.lock */ = { + 8B20AB343C49FA1A88CE9F4C /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -415,13 +398,30 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; + DCAFE8444F0E285F11EAB403 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 4DA808B3C32EB1D9F3FC18B3 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = ECE40685908C07B2A5040FAF /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -489,7 +489,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 0ED29D5295E06CA4849433BA /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 434DA5476F159D3D34FBDBA4 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -505,7 +505,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = B2CEB86711238F049F19BEB9 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = ECD8A5491B41D17E29E95AE1 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/firebase-get-to-know-flutter/step_05/pubspec.yaml b/firebase-get-to-know-flutter/step_05/pubspec.yaml index d7f35cbe41..ad5dc1885b 100644 --- a/firebase-get-to-know-flutter/step_05/pubspec.yaml +++ b/firebase-get-to-know-flutter/step_05/pubspec.yaml @@ -36,10 +36,10 @@ dependencies: # Use with the CupertinoIcons class for iOS style icons. cupertino_icons: ^1.0.8 google_fonts: ^6.2.1 - go_router: ^14.5.0 - cloud_firestore: ^5.4.5 - firebase_auth: ^5.3.2 - firebase_core: ^3.7.0 + go_router: ^14.6.0 + cloud_firestore: ^5.5.0 + firebase_auth: ^5.3.3 + firebase_core: ^3.8.0 provider: ^6.1.2 firebase_ui_auth: ^1.16.0 diff --git a/firebase-get-to-know-flutter/step_04/android/app/build.gradle b/firebase-get-to-know-flutter/step_06/android/app/build.gradle.kts similarity index 84% rename from firebase-get-to-know-flutter/step_04/android/app/build.gradle rename to firebase-get-to-know-flutter/step_06/android/app/build.gradle.kts index ad5859ad24..f1c6d28ba4 100644 --- a/firebase-get-to-know-flutter/step_04/android/app/build.gradle +++ b/firebase-get-to-know-flutter/step_06/android/app/build.gradle.kts @@ -1,8 +1,8 @@ plugins { - id "com.android.application" - id "kotlin-android" + id("com.android.application") + id("kotlin-android") // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. - id "dev.flutter.flutter-gradle-plugin" + id("dev.flutter.flutter-gradle-plugin") } android { @@ -16,7 +16,7 @@ android { } kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8 + jvmTarget = JavaVersion.VERSION_1_8.toString() } defaultConfig { @@ -34,7 +34,7 @@ android { release { // TODO: Add your own signing config for the release build. // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig = signingConfigs.debug + signingConfig = signingConfigs.getByName("debug") } } } diff --git a/firebase-get-to-know-flutter/step_06/android/build.gradle b/firebase-get-to-know-flutter/step_06/android/build.gradle deleted file mode 100644 index d2ffbffa4c..0000000000 --- a/firebase-get-to-know-flutter/step_06/android/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = "../build" -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(":app") -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/firebase-get-to-know-flutter/step_06/android/build.gradle.kts b/firebase-get-to-know-flutter/step_06/android/build.gradle.kts new file mode 100644 index 0000000000..89176ef44e --- /dev/null +++ b/firebase-get-to-know-flutter/step_06/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/firebase-get-to-know-flutter/step_06/android/gradle.properties b/firebase-get-to-know-flutter/step_06/android/gradle.properties index 2597170821..f018a61817 100644 --- a/firebase-get-to-know-flutter/step_06/android/gradle.properties +++ b/firebase-get-to-know-flutter/step_06/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/firebase-get-to-know-flutter/step_06/android/gradle/wrapper/gradle-wrapper.properties b/firebase-get-to-know-flutter/step_06/android/gradle/wrapper/gradle-wrapper.properties index 7bb2df6ba6..afa1e8eb0a 100644 --- a/firebase-get-to-know-flutter/step_06/android/gradle/wrapper/gradle-wrapper.properties +++ b/firebase-get-to-know-flutter/step_06/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip diff --git a/firebase-get-to-know-flutter/step_06/android/settings.gradle b/firebase-get-to-know-flutter/step_06/android/settings.gradle deleted file mode 100644 index b9e43bd376..0000000000 --- a/firebase-get-to-know-flutter/step_06/android/settings.gradle +++ /dev/null @@ -1,25 +0,0 @@ -pluginManagement { - def flutterSdkPath = { - def properties = new Properties() - file("local.properties").withInputStream { properties.load(it) } - def flutterSdkPath = properties.getProperty("flutter.sdk") - assert flutterSdkPath != null, "flutter.sdk not set in local.properties" - return flutterSdkPath - }() - - includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") - - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} - -plugins { - id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.1.0" apply false - id "org.jetbrains.kotlin.android" version "1.8.22" apply false -} - -include ":app" diff --git a/firebase-get-to-know-flutter/step_06/android/settings.gradle.kts b/firebase-get-to-know-flutter/step_06/android/settings.gradle.kts new file mode 100644 index 0000000000..a439442c20 --- /dev/null +++ b/firebase-get-to-know-flutter/step_06/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.0" apply false + id("org.jetbrains.kotlin.android") version "1.8.22" apply false +} + +include(":app") diff --git a/firebase-get-to-know-flutter/step_06/ios/Podfile b/firebase-get-to-know-flutter/step_06/ios/Podfile index 3e44f9c6f7..2dbf7d728d 100644 --- a/firebase-get-to-know-flutter/step_06/ios/Podfile +++ b/firebase-get-to-know-flutter/step_06/ios/Podfile @@ -29,7 +29,6 @@ flutter_ios_podfile_setup target 'Runner' do use_frameworks! - use_modular_headers! flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) target 'RunnerTests' do diff --git a/firebase-get-to-know-flutter/step_06/ios/Runner.xcodeproj/project.pbxproj b/firebase-get-to-know-flutter/step_06/ios/Runner.xcodeproj/project.pbxproj index b36a0695b4..88487db888 100644 --- a/firebase-get-to-know-flutter/step_06/ios/Runner.xcodeproj/project.pbxproj +++ b/firebase-get-to-know-flutter/step_06/ios/Runner.xcodeproj/project.pbxproj @@ -7,15 +7,15 @@ objects = { /* Begin PBXBuildFile section */ + 082C04D0C743E5A06E960950 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F110CAAAFB2B4F9B9A1E8F31 /* Pods_RunnerTests.framework */; }; 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; - 7A9C31C280F37822AC10EFC6 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A775D781AAFB6ECC974BD650 /* Pods_RunnerTests.framework */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - 9BC295015BFD0F95DA7CDEC1 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D072F4A6C2FEFE989564BCB0 /* Pods_Runner.framework */; }; + CC6FCAC971084E1245544BFA /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E6B516B47CEB51AB31DC92D4 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -44,16 +44,15 @@ /* Begin PBXFileReference section */ 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; + 16FA2CF1141436F952A89855 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 1B2433436ABF8198621D7409 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 5358ABFFB547340BADE91E57 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - 55C5C4278824A4EDF6B82BEC /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - 5CD039B3AB9EC2E131E6C8F5 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - 6DED744C3D22EF43057EEE48 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 67DBA47582AFA4BE4ED6D83C /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 73E271138B4D025FCE58DB98 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; - 775B7D9A711AD243E7CC900F /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; @@ -62,17 +61,18 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 9A20A943144662A86F585ABF /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - A775D781AAFB6ECC974BD650 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - D072F4A6C2FEFE989564BCB0 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 9D64B6D91D2D07CC9EF7FE49 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + E6A8E045350DD7826A5C5E5C /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + E6B516B47CEB51AB31DC92D4 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + F110CAAAFB2B4F9B9A1E8F31 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 7DD45768AC8C7D43ABCA9DE3 /* Frameworks */ = { + 39B7411714C973C7723733FB /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 7A9C31C280F37822AC10EFC6 /* Pods_RunnerTests.framework in Frameworks */, + 082C04D0C743E5A06E960950 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -80,13 +80,27 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 9BC295015BFD0F95DA7CDEC1 /* Pods_Runner.framework in Frameworks */, + CC6FCAC971084E1245544BFA /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 1F5D1AD7679A13B9E59E256F /* Pods */ = { + isa = PBXGroup; + children = ( + E6A8E045350DD7826A5C5E5C /* Pods-Runner.debug.xcconfig */, + 67DBA47582AFA4BE4ED6D83C /* Pods-Runner.release.xcconfig */, + 1B2433436ABF8198621D7409 /* Pods-Runner.profile.xcconfig */, + 16FA2CF1141436F952A89855 /* Pods-RunnerTests.debug.xcconfig */, + 9D64B6D91D2D07CC9EF7FE49 /* Pods-RunnerTests.release.xcconfig */, + 73E271138B4D025FCE58DB98 /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; 331C8082294A63A400263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -95,11 +109,11 @@ path = RunnerTests; sourceTree = ""; }; - 561E40DE921F40D44603A357 /* Frameworks */ = { + 7C6C33056D42C35511132C9E /* Frameworks */ = { isa = PBXGroup; children = ( - D072F4A6C2FEFE989564BCB0 /* Pods_Runner.framework */, - A775D781AAFB6ECC974BD650 /* Pods_RunnerTests.framework */, + E6B516B47CEB51AB31DC92D4 /* Pods_Runner.framework */, + F110CAAAFB2B4F9B9A1E8F31 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -122,8 +136,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - B7525EDD33924E7F2C905A28 /* Pods */, - 561E40DE921F40D44603A357 /* Frameworks */, + 1F5D1AD7679A13B9E59E256F /* Pods */, + 7C6C33056D42C35511132C9E /* Frameworks */, ); sourceTree = ""; }; @@ -151,20 +165,6 @@ path = Runner; sourceTree = ""; }; - B7525EDD33924E7F2C905A28 /* Pods */ = { - isa = PBXGroup; - children = ( - 6DED744C3D22EF43057EEE48 /* Pods-Runner.debug.xcconfig */, - 9A20A943144662A86F585ABF /* Pods-Runner.release.xcconfig */, - 5358ABFFB547340BADE91E57 /* Pods-Runner.profile.xcconfig */, - 775B7D9A711AD243E7CC900F /* Pods-RunnerTests.debug.xcconfig */, - 5CD039B3AB9EC2E131E6C8F5 /* Pods-RunnerTests.release.xcconfig */, - 55C5C4278824A4EDF6B82BEC /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 24615447E6AA9E5E76B95A56 /* [CP] Check Pods Manifest.lock */, + 37E93A95A15B8D583768D758 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 7DD45768AC8C7D43ABCA9DE3 /* Frameworks */, + 39B7411714C973C7723733FB /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - FE3AC9F7FF7CA03E86CBC134 /* [CP] Check Pods Manifest.lock */, + D0CFBE200EDA4DA52FD6E09C /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 04B52FCD7D9AF7EB0D333921 /* [CP] Embed Pods Frameworks */, + 93F4C06206A82D754D92A8CF /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -270,24 +270,7 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 04B52FCD7D9AF7EB0D333921 /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; - 24615447E6AA9E5E76B95A56 /* [CP] Check Pods Manifest.lock */ = { + 37E93A95A15B8D583768D758 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -325,6 +308,23 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; + 93F4C06206A82D754D92A8CF /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -340,7 +340,7 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - FE3AC9F7FF7CA03E86CBC134 /* [CP] Check Pods Manifest.lock */ = { + D0CFBE200EDA4DA52FD6E09C /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -488,7 +488,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 775B7D9A711AD243E7CC900F /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 16FA2CF1141436F952A89855 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -507,7 +507,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 5CD039B3AB9EC2E131E6C8F5 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 9D64B6D91D2D07CC9EF7FE49 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -524,7 +524,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 55C5C4278824A4EDF6B82BEC /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 73E271138B4D025FCE58DB98 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/firebase-get-to-know-flutter/step_06/macos/Podfile b/firebase-get-to-know-flutter/step_06/macos/Podfile index b52666a103..ff5ddb3b8b 100644 --- a/firebase-get-to-know-flutter/step_06/macos/Podfile +++ b/firebase-get-to-know-flutter/step_06/macos/Podfile @@ -28,7 +28,6 @@ flutter_macos_podfile_setup target 'Runner' do use_frameworks! - use_modular_headers! flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__)) target 'RunnerTests' do diff --git a/firebase-get-to-know-flutter/step_06/macos/Runner.xcodeproj/project.pbxproj b/firebase-get-to-know-flutter/step_06/macos/Runner.xcodeproj/project.pbxproj index d85fcc90de..eca001f8f3 100644 --- a/firebase-get-to-know-flutter/step_06/macos/Runner.xcodeproj/project.pbxproj +++ b/firebase-get-to-know-flutter/step_06/macos/Runner.xcodeproj/project.pbxproj @@ -27,8 +27,8 @@ 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 6773A496AD7A5686E2DD29BD /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5AD57AEB256EF9C78131F228 /* Pods_RunnerTests.framework */; }; - 8D4861BD95308793990CB833 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8F12630335546B1C0688E5A2 /* Pods_Runner.framework */; }; + 6AFABF12BBC519D5C4A901F1 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C036F44EC867685CEAB8A8BE /* Pods_Runner.framework */; }; + 9F0DCF96D98359E7727F33C2 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FA1C88B2C8FD60041891B74C /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,7 +62,7 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 0ED29D5295E06CA4849433BA /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 27A12D55B0E1779D5984B001 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -79,15 +79,15 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 4DA808B3C32EB1D9F3FC18B3 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 5AD57AEB256EF9C78131F228 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 434DA5476F159D3D34FBDBA4 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 44323EED11D5023C4A1B67DB /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 8F12630335546B1C0688E5A2 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 921768E3C0134A61232C251B /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - A109CB21F52E718A03B81B57 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - B2CEB86711238F049F19BEB9 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - E072F90EF015017AAEF964C6 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + C036F44EC867685CEAB8A8BE /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + ECD8A5491B41D17E29E95AE1 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + ECE40685908C07B2A5040FAF /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + F65ECCB5512FECB3E8673CC2 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + FA1C88B2C8FD60041891B74C /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 6773A496AD7A5686E2DD29BD /* Pods_RunnerTests.framework in Frameworks */, + 9F0DCF96D98359E7727F33C2 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,27 +103,13 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 8D4861BD95308793990CB833 /* Pods_Runner.framework in Frameworks */, + 6AFABF12BBC519D5C4A901F1 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 06338C9EC6CCDC584FFFB260 /* Pods */ = { - isa = PBXGroup; - children = ( - 921768E3C0134A61232C251B /* Pods-Runner.debug.xcconfig */, - A109CB21F52E718A03B81B57 /* Pods-Runner.release.xcconfig */, - E072F90EF015017AAEF964C6 /* Pods-Runner.profile.xcconfig */, - 4DA808B3C32EB1D9F3FC18B3 /* Pods-RunnerTests.debug.xcconfig */, - 0ED29D5295E06CA4849433BA /* Pods-RunnerTests.release.xcconfig */, - B2CEB86711238F049F19BEB9 /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; 331C80D6294CF71000263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -151,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 06338C9EC6CCDC584FFFB260 /* Pods */, + 732A0D8F978DD3061D16CF02 /* Pods */, ); sourceTree = ""; }; @@ -199,11 +185,25 @@ path = Runner; sourceTree = ""; }; + 732A0D8F978DD3061D16CF02 /* Pods */ = { + isa = PBXGroup; + children = ( + 27A12D55B0E1779D5984B001 /* Pods-Runner.debug.xcconfig */, + 44323EED11D5023C4A1B67DB /* Pods-Runner.release.xcconfig */, + F65ECCB5512FECB3E8673CC2 /* Pods-Runner.profile.xcconfig */, + ECE40685908C07B2A5040FAF /* Pods-RunnerTests.debug.xcconfig */, + 434DA5476F159D3D34FBDBA4 /* Pods-RunnerTests.release.xcconfig */, + ECD8A5491B41D17E29E95AE1 /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - 8F12630335546B1C0688E5A2 /* Pods_Runner.framework */, - 5AD57AEB256EF9C78131F228 /* Pods_RunnerTests.framework */, + C036F44EC867685CEAB8A8BE /* Pods_Runner.framework */, + FA1C88B2C8FD60041891B74C /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 028AD4DD9A19B93A662AECAF /* [CP] Check Pods Manifest.lock */, + 8B20AB343C49FA1A88CE9F4C /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - F1E17869CBA61BDB552EF98E /* [CP] Check Pods Manifest.lock */, + 3C67C9C385BE70FC522DCB83 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 3B746273FB6BFBEE317579ED /* [CP] Embed Pods Frameworks */, + DCAFE8444F0E285F11EAB403 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,28 +323,6 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 028AD4DD9A19B93A662AECAF /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -383,24 +361,29 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 3B746273FB6BFBEE317579ED /* [CP] Embed Pods Frameworks */ = { + 3C67C9C385BE70FC522DCB83 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - F1E17869CBA61BDB552EF98E /* [CP] Check Pods Manifest.lock */ = { + 8B20AB343C49FA1A88CE9F4C /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -415,13 +398,30 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; + DCAFE8444F0E285F11EAB403 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 4DA808B3C32EB1D9F3FC18B3 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = ECE40685908C07B2A5040FAF /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -489,7 +489,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 0ED29D5295E06CA4849433BA /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 434DA5476F159D3D34FBDBA4 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -505,7 +505,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = B2CEB86711238F049F19BEB9 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = ECD8A5491B41D17E29E95AE1 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/firebase-get-to-know-flutter/step_06/pubspec.yaml b/firebase-get-to-know-flutter/step_06/pubspec.yaml index d7f35cbe41..ad5dc1885b 100644 --- a/firebase-get-to-know-flutter/step_06/pubspec.yaml +++ b/firebase-get-to-know-flutter/step_06/pubspec.yaml @@ -36,10 +36,10 @@ dependencies: # Use with the CupertinoIcons class for iOS style icons. cupertino_icons: ^1.0.8 google_fonts: ^6.2.1 - go_router: ^14.5.0 - cloud_firestore: ^5.4.5 - firebase_auth: ^5.3.2 - firebase_core: ^3.7.0 + go_router: ^14.6.0 + cloud_firestore: ^5.5.0 + firebase_auth: ^5.3.3 + firebase_core: ^3.8.0 provider: ^6.1.2 firebase_ui_auth: ^1.16.0 diff --git a/firebase-get-to-know-flutter/step_07/android/app/build.gradle b/firebase-get-to-know-flutter/step_07/android/app/build.gradle deleted file mode 100644 index ad5859ad24..0000000000 --- a/firebase-get-to-know-flutter/step_07/android/app/build.gradle +++ /dev/null @@ -1,44 +0,0 @@ -plugins { - id "com.android.application" - id "kotlin-android" - // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. - id "dev.flutter.flutter-gradle-plugin" -} - -android { - namespace = "com.example.gtk_flutter" - compileSdk = flutter.compileSdkVersion - ndkVersion = flutter.ndkVersion - - compileOptions { - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 - } - - kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8 - } - - defaultConfig { - // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). - applicationId = "com.example.gtk_flutter" - // You can update the following values to match your application needs. - // For more information, see: https://flutter.dev/to/review-gradle-config. - minSdk = 23 - targetSdk = flutter.targetSdkVersion - versionCode = flutter.versionCode - versionName = flutter.versionName - } - - buildTypes { - release { - // TODO: Add your own signing config for the release build. - // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig = signingConfigs.debug - } - } -} - -flutter { - source = "../.." -} diff --git a/firebase-get-to-know-flutter/step_07/android/app/build.gradle.kts b/firebase-get-to-know-flutter/step_07/android/app/build.gradle.kts new file mode 100644 index 0000000000..f1c6d28ba4 --- /dev/null +++ b/firebase-get-to-know-flutter/step_07/android/app/build.gradle.kts @@ -0,0 +1,44 @@ +plugins { + id("com.android.application") + id("kotlin-android") + // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. + id("dev.flutter.flutter-gradle-plugin") +} + +android { + namespace = "com.example.gtk_flutter" + compileSdk = flutter.compileSdkVersion + ndkVersion = flutter.ndkVersion + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 + } + + kotlinOptions { + jvmTarget = JavaVersion.VERSION_1_8.toString() + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId = "com.example.gtk_flutter" + // You can update the following values to match your application needs. + // For more information, see: https://flutter.dev/to/review-gradle-config. + minSdk = 23 + targetSdk = flutter.targetSdkVersion + versionCode = flutter.versionCode + versionName = flutter.versionName + } + + buildTypes { + release { + // TODO: Add your own signing config for the release build. + // Signing with the debug keys for now, so `flutter run --release` works. + signingConfig = signingConfigs.getByName("debug") + } + } +} + +flutter { + source = "../.." +} diff --git a/firebase-get-to-know-flutter/step_07/android/build.gradle b/firebase-get-to-know-flutter/step_07/android/build.gradle deleted file mode 100644 index d2ffbffa4c..0000000000 --- a/firebase-get-to-know-flutter/step_07/android/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = "../build" -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(":app") -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/firebase-get-to-know-flutter/step_07/android/build.gradle.kts b/firebase-get-to-know-flutter/step_07/android/build.gradle.kts new file mode 100644 index 0000000000..89176ef44e --- /dev/null +++ b/firebase-get-to-know-flutter/step_07/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/firebase-get-to-know-flutter/step_07/android/gradle.properties b/firebase-get-to-know-flutter/step_07/android/gradle.properties index 2597170821..f018a61817 100644 --- a/firebase-get-to-know-flutter/step_07/android/gradle.properties +++ b/firebase-get-to-know-flutter/step_07/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/firebase-get-to-know-flutter/step_07/android/gradle/wrapper/gradle-wrapper.properties b/firebase-get-to-know-flutter/step_07/android/gradle/wrapper/gradle-wrapper.properties index 7bb2df6ba6..afa1e8eb0a 100644 --- a/firebase-get-to-know-flutter/step_07/android/gradle/wrapper/gradle-wrapper.properties +++ b/firebase-get-to-know-flutter/step_07/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip diff --git a/firebase-get-to-know-flutter/step_07/android/settings.gradle b/firebase-get-to-know-flutter/step_07/android/settings.gradle deleted file mode 100644 index b9e43bd376..0000000000 --- a/firebase-get-to-know-flutter/step_07/android/settings.gradle +++ /dev/null @@ -1,25 +0,0 @@ -pluginManagement { - def flutterSdkPath = { - def properties = new Properties() - file("local.properties").withInputStream { properties.load(it) } - def flutterSdkPath = properties.getProperty("flutter.sdk") - assert flutterSdkPath != null, "flutter.sdk not set in local.properties" - return flutterSdkPath - }() - - includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") - - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} - -plugins { - id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.1.0" apply false - id "org.jetbrains.kotlin.android" version "1.8.22" apply false -} - -include ":app" diff --git a/firebase-get-to-know-flutter/step_07/android/settings.gradle.kts b/firebase-get-to-know-flutter/step_07/android/settings.gradle.kts new file mode 100644 index 0000000000..a439442c20 --- /dev/null +++ b/firebase-get-to-know-flutter/step_07/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.0" apply false + id("org.jetbrains.kotlin.android") version "1.8.22" apply false +} + +include(":app") diff --git a/firebase-get-to-know-flutter/step_07/ios/Podfile b/firebase-get-to-know-flutter/step_07/ios/Podfile index 3e44f9c6f7..2dbf7d728d 100644 --- a/firebase-get-to-know-flutter/step_07/ios/Podfile +++ b/firebase-get-to-know-flutter/step_07/ios/Podfile @@ -29,7 +29,6 @@ flutter_ios_podfile_setup target 'Runner' do use_frameworks! - use_modular_headers! flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) target 'RunnerTests' do diff --git a/firebase-get-to-know-flutter/step_07/ios/Runner.xcodeproj/project.pbxproj b/firebase-get-to-know-flutter/step_07/ios/Runner.xcodeproj/project.pbxproj index b36a0695b4..88487db888 100644 --- a/firebase-get-to-know-flutter/step_07/ios/Runner.xcodeproj/project.pbxproj +++ b/firebase-get-to-know-flutter/step_07/ios/Runner.xcodeproj/project.pbxproj @@ -7,15 +7,15 @@ objects = { /* Begin PBXBuildFile section */ + 082C04D0C743E5A06E960950 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F110CAAAFB2B4F9B9A1E8F31 /* Pods_RunnerTests.framework */; }; 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; - 7A9C31C280F37822AC10EFC6 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A775D781AAFB6ECC974BD650 /* Pods_RunnerTests.framework */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - 9BC295015BFD0F95DA7CDEC1 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D072F4A6C2FEFE989564BCB0 /* Pods_Runner.framework */; }; + CC6FCAC971084E1245544BFA /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E6B516B47CEB51AB31DC92D4 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -44,16 +44,15 @@ /* Begin PBXFileReference section */ 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; + 16FA2CF1141436F952A89855 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 1B2433436ABF8198621D7409 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 5358ABFFB547340BADE91E57 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - 55C5C4278824A4EDF6B82BEC /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - 5CD039B3AB9EC2E131E6C8F5 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - 6DED744C3D22EF43057EEE48 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 67DBA47582AFA4BE4ED6D83C /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 73E271138B4D025FCE58DB98 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; - 775B7D9A711AD243E7CC900F /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; @@ -62,17 +61,18 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 9A20A943144662A86F585ABF /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - A775D781AAFB6ECC974BD650 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - D072F4A6C2FEFE989564BCB0 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 9D64B6D91D2D07CC9EF7FE49 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + E6A8E045350DD7826A5C5E5C /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + E6B516B47CEB51AB31DC92D4 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + F110CAAAFB2B4F9B9A1E8F31 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 7DD45768AC8C7D43ABCA9DE3 /* Frameworks */ = { + 39B7411714C973C7723733FB /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 7A9C31C280F37822AC10EFC6 /* Pods_RunnerTests.framework in Frameworks */, + 082C04D0C743E5A06E960950 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -80,13 +80,27 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 9BC295015BFD0F95DA7CDEC1 /* Pods_Runner.framework in Frameworks */, + CC6FCAC971084E1245544BFA /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 1F5D1AD7679A13B9E59E256F /* Pods */ = { + isa = PBXGroup; + children = ( + E6A8E045350DD7826A5C5E5C /* Pods-Runner.debug.xcconfig */, + 67DBA47582AFA4BE4ED6D83C /* Pods-Runner.release.xcconfig */, + 1B2433436ABF8198621D7409 /* Pods-Runner.profile.xcconfig */, + 16FA2CF1141436F952A89855 /* Pods-RunnerTests.debug.xcconfig */, + 9D64B6D91D2D07CC9EF7FE49 /* Pods-RunnerTests.release.xcconfig */, + 73E271138B4D025FCE58DB98 /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; 331C8082294A63A400263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -95,11 +109,11 @@ path = RunnerTests; sourceTree = ""; }; - 561E40DE921F40D44603A357 /* Frameworks */ = { + 7C6C33056D42C35511132C9E /* Frameworks */ = { isa = PBXGroup; children = ( - D072F4A6C2FEFE989564BCB0 /* Pods_Runner.framework */, - A775D781AAFB6ECC974BD650 /* Pods_RunnerTests.framework */, + E6B516B47CEB51AB31DC92D4 /* Pods_Runner.framework */, + F110CAAAFB2B4F9B9A1E8F31 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -122,8 +136,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - B7525EDD33924E7F2C905A28 /* Pods */, - 561E40DE921F40D44603A357 /* Frameworks */, + 1F5D1AD7679A13B9E59E256F /* Pods */, + 7C6C33056D42C35511132C9E /* Frameworks */, ); sourceTree = ""; }; @@ -151,20 +165,6 @@ path = Runner; sourceTree = ""; }; - B7525EDD33924E7F2C905A28 /* Pods */ = { - isa = PBXGroup; - children = ( - 6DED744C3D22EF43057EEE48 /* Pods-Runner.debug.xcconfig */, - 9A20A943144662A86F585ABF /* Pods-Runner.release.xcconfig */, - 5358ABFFB547340BADE91E57 /* Pods-Runner.profile.xcconfig */, - 775B7D9A711AD243E7CC900F /* Pods-RunnerTests.debug.xcconfig */, - 5CD039B3AB9EC2E131E6C8F5 /* Pods-RunnerTests.release.xcconfig */, - 55C5C4278824A4EDF6B82BEC /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 24615447E6AA9E5E76B95A56 /* [CP] Check Pods Manifest.lock */, + 37E93A95A15B8D583768D758 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 7DD45768AC8C7D43ABCA9DE3 /* Frameworks */, + 39B7411714C973C7723733FB /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - FE3AC9F7FF7CA03E86CBC134 /* [CP] Check Pods Manifest.lock */, + D0CFBE200EDA4DA52FD6E09C /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 04B52FCD7D9AF7EB0D333921 /* [CP] Embed Pods Frameworks */, + 93F4C06206A82D754D92A8CF /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -270,24 +270,7 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 04B52FCD7D9AF7EB0D333921 /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; - 24615447E6AA9E5E76B95A56 /* [CP] Check Pods Manifest.lock */ = { + 37E93A95A15B8D583768D758 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -325,6 +308,23 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; + 93F4C06206A82D754D92A8CF /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -340,7 +340,7 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - FE3AC9F7FF7CA03E86CBC134 /* [CP] Check Pods Manifest.lock */ = { + D0CFBE200EDA4DA52FD6E09C /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -488,7 +488,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 775B7D9A711AD243E7CC900F /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 16FA2CF1141436F952A89855 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -507,7 +507,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 5CD039B3AB9EC2E131E6C8F5 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 9D64B6D91D2D07CC9EF7FE49 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -524,7 +524,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 55C5C4278824A4EDF6B82BEC /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 73E271138B4D025FCE58DB98 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/firebase-get-to-know-flutter/step_07/macos/Podfile b/firebase-get-to-know-flutter/step_07/macos/Podfile index b52666a103..ff5ddb3b8b 100644 --- a/firebase-get-to-know-flutter/step_07/macos/Podfile +++ b/firebase-get-to-know-flutter/step_07/macos/Podfile @@ -28,7 +28,6 @@ flutter_macos_podfile_setup target 'Runner' do use_frameworks! - use_modular_headers! flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__)) target 'RunnerTests' do diff --git a/firebase-get-to-know-flutter/step_07/macos/Runner.xcodeproj/project.pbxproj b/firebase-get-to-know-flutter/step_07/macos/Runner.xcodeproj/project.pbxproj index d85fcc90de..eca001f8f3 100644 --- a/firebase-get-to-know-flutter/step_07/macos/Runner.xcodeproj/project.pbxproj +++ b/firebase-get-to-know-flutter/step_07/macos/Runner.xcodeproj/project.pbxproj @@ -27,8 +27,8 @@ 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 6773A496AD7A5686E2DD29BD /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5AD57AEB256EF9C78131F228 /* Pods_RunnerTests.framework */; }; - 8D4861BD95308793990CB833 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8F12630335546B1C0688E5A2 /* Pods_Runner.framework */; }; + 6AFABF12BBC519D5C4A901F1 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C036F44EC867685CEAB8A8BE /* Pods_Runner.framework */; }; + 9F0DCF96D98359E7727F33C2 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FA1C88B2C8FD60041891B74C /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,7 +62,7 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 0ED29D5295E06CA4849433BA /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 27A12D55B0E1779D5984B001 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -79,15 +79,15 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 4DA808B3C32EB1D9F3FC18B3 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 5AD57AEB256EF9C78131F228 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 434DA5476F159D3D34FBDBA4 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 44323EED11D5023C4A1B67DB /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 8F12630335546B1C0688E5A2 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 921768E3C0134A61232C251B /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - A109CB21F52E718A03B81B57 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - B2CEB86711238F049F19BEB9 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - E072F90EF015017AAEF964C6 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + C036F44EC867685CEAB8A8BE /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + ECD8A5491B41D17E29E95AE1 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + ECE40685908C07B2A5040FAF /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + F65ECCB5512FECB3E8673CC2 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + FA1C88B2C8FD60041891B74C /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 6773A496AD7A5686E2DD29BD /* Pods_RunnerTests.framework in Frameworks */, + 9F0DCF96D98359E7727F33C2 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,27 +103,13 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 8D4861BD95308793990CB833 /* Pods_Runner.framework in Frameworks */, + 6AFABF12BBC519D5C4A901F1 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 06338C9EC6CCDC584FFFB260 /* Pods */ = { - isa = PBXGroup; - children = ( - 921768E3C0134A61232C251B /* Pods-Runner.debug.xcconfig */, - A109CB21F52E718A03B81B57 /* Pods-Runner.release.xcconfig */, - E072F90EF015017AAEF964C6 /* Pods-Runner.profile.xcconfig */, - 4DA808B3C32EB1D9F3FC18B3 /* Pods-RunnerTests.debug.xcconfig */, - 0ED29D5295E06CA4849433BA /* Pods-RunnerTests.release.xcconfig */, - B2CEB86711238F049F19BEB9 /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; 331C80D6294CF71000263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -151,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 06338C9EC6CCDC584FFFB260 /* Pods */, + 732A0D8F978DD3061D16CF02 /* Pods */, ); sourceTree = ""; }; @@ -199,11 +185,25 @@ path = Runner; sourceTree = ""; }; + 732A0D8F978DD3061D16CF02 /* Pods */ = { + isa = PBXGroup; + children = ( + 27A12D55B0E1779D5984B001 /* Pods-Runner.debug.xcconfig */, + 44323EED11D5023C4A1B67DB /* Pods-Runner.release.xcconfig */, + F65ECCB5512FECB3E8673CC2 /* Pods-Runner.profile.xcconfig */, + ECE40685908C07B2A5040FAF /* Pods-RunnerTests.debug.xcconfig */, + 434DA5476F159D3D34FBDBA4 /* Pods-RunnerTests.release.xcconfig */, + ECD8A5491B41D17E29E95AE1 /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - 8F12630335546B1C0688E5A2 /* Pods_Runner.framework */, - 5AD57AEB256EF9C78131F228 /* Pods_RunnerTests.framework */, + C036F44EC867685CEAB8A8BE /* Pods_Runner.framework */, + FA1C88B2C8FD60041891B74C /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 028AD4DD9A19B93A662AECAF /* [CP] Check Pods Manifest.lock */, + 8B20AB343C49FA1A88CE9F4C /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - F1E17869CBA61BDB552EF98E /* [CP] Check Pods Manifest.lock */, + 3C67C9C385BE70FC522DCB83 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 3B746273FB6BFBEE317579ED /* [CP] Embed Pods Frameworks */, + DCAFE8444F0E285F11EAB403 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,28 +323,6 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 028AD4DD9A19B93A662AECAF /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -383,24 +361,29 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 3B746273FB6BFBEE317579ED /* [CP] Embed Pods Frameworks */ = { + 3C67C9C385BE70FC522DCB83 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - F1E17869CBA61BDB552EF98E /* [CP] Check Pods Manifest.lock */ = { + 8B20AB343C49FA1A88CE9F4C /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -415,13 +398,30 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; + DCAFE8444F0E285F11EAB403 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 4DA808B3C32EB1D9F3FC18B3 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = ECE40685908C07B2A5040FAF /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -489,7 +489,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 0ED29D5295E06CA4849433BA /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 434DA5476F159D3D34FBDBA4 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -505,7 +505,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = B2CEB86711238F049F19BEB9 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = ECD8A5491B41D17E29E95AE1 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/firebase-get-to-know-flutter/step_07/pubspec.yaml b/firebase-get-to-know-flutter/step_07/pubspec.yaml index d7f35cbe41..ad5dc1885b 100644 --- a/firebase-get-to-know-flutter/step_07/pubspec.yaml +++ b/firebase-get-to-know-flutter/step_07/pubspec.yaml @@ -36,10 +36,10 @@ dependencies: # Use with the CupertinoIcons class for iOS style icons. cupertino_icons: ^1.0.8 google_fonts: ^6.2.1 - go_router: ^14.5.0 - cloud_firestore: ^5.4.5 - firebase_auth: ^5.3.2 - firebase_core: ^3.7.0 + go_router: ^14.6.0 + cloud_firestore: ^5.5.0 + firebase_auth: ^5.3.3 + firebase_core: ^3.8.0 provider: ^6.1.2 firebase_ui_auth: ^1.16.0 diff --git a/firebase-get-to-know-flutter/step_09/android/app/build.gradle b/firebase-get-to-know-flutter/step_09/android/app/build.gradle deleted file mode 100644 index ad5859ad24..0000000000 --- a/firebase-get-to-know-flutter/step_09/android/app/build.gradle +++ /dev/null @@ -1,44 +0,0 @@ -plugins { - id "com.android.application" - id "kotlin-android" - // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. - id "dev.flutter.flutter-gradle-plugin" -} - -android { - namespace = "com.example.gtk_flutter" - compileSdk = flutter.compileSdkVersion - ndkVersion = flutter.ndkVersion - - compileOptions { - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 - } - - kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8 - } - - defaultConfig { - // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). - applicationId = "com.example.gtk_flutter" - // You can update the following values to match your application needs. - // For more information, see: https://flutter.dev/to/review-gradle-config. - minSdk = 23 - targetSdk = flutter.targetSdkVersion - versionCode = flutter.versionCode - versionName = flutter.versionName - } - - buildTypes { - release { - // TODO: Add your own signing config for the release build. - // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig = signingConfigs.debug - } - } -} - -flutter { - source = "../.." -} diff --git a/firebase-get-to-know-flutter/step_09/android/app/build.gradle.kts b/firebase-get-to-know-flutter/step_09/android/app/build.gradle.kts new file mode 100644 index 0000000000..f1c6d28ba4 --- /dev/null +++ b/firebase-get-to-know-flutter/step_09/android/app/build.gradle.kts @@ -0,0 +1,44 @@ +plugins { + id("com.android.application") + id("kotlin-android") + // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. + id("dev.flutter.flutter-gradle-plugin") +} + +android { + namespace = "com.example.gtk_flutter" + compileSdk = flutter.compileSdkVersion + ndkVersion = flutter.ndkVersion + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 + } + + kotlinOptions { + jvmTarget = JavaVersion.VERSION_1_8.toString() + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId = "com.example.gtk_flutter" + // You can update the following values to match your application needs. + // For more information, see: https://flutter.dev/to/review-gradle-config. + minSdk = 23 + targetSdk = flutter.targetSdkVersion + versionCode = flutter.versionCode + versionName = flutter.versionName + } + + buildTypes { + release { + // TODO: Add your own signing config for the release build. + // Signing with the debug keys for now, so `flutter run --release` works. + signingConfig = signingConfigs.getByName("debug") + } + } +} + +flutter { + source = "../.." +} diff --git a/firebase-get-to-know-flutter/step_09/android/build.gradle b/firebase-get-to-know-flutter/step_09/android/build.gradle deleted file mode 100644 index d2ffbffa4c..0000000000 --- a/firebase-get-to-know-flutter/step_09/android/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = "../build" -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(":app") -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/firebase-get-to-know-flutter/step_09/android/build.gradle.kts b/firebase-get-to-know-flutter/step_09/android/build.gradle.kts new file mode 100644 index 0000000000..89176ef44e --- /dev/null +++ b/firebase-get-to-know-flutter/step_09/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/firebase-get-to-know-flutter/step_09/android/gradle.properties b/firebase-get-to-know-flutter/step_09/android/gradle.properties index 2597170821..f018a61817 100644 --- a/firebase-get-to-know-flutter/step_09/android/gradle.properties +++ b/firebase-get-to-know-flutter/step_09/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/firebase-get-to-know-flutter/step_09/android/gradle/wrapper/gradle-wrapper.properties b/firebase-get-to-know-flutter/step_09/android/gradle/wrapper/gradle-wrapper.properties index 7bb2df6ba6..afa1e8eb0a 100644 --- a/firebase-get-to-know-flutter/step_09/android/gradle/wrapper/gradle-wrapper.properties +++ b/firebase-get-to-know-flutter/step_09/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip diff --git a/firebase-get-to-know-flutter/step_09/android/settings.gradle b/firebase-get-to-know-flutter/step_09/android/settings.gradle deleted file mode 100644 index b9e43bd376..0000000000 --- a/firebase-get-to-know-flutter/step_09/android/settings.gradle +++ /dev/null @@ -1,25 +0,0 @@ -pluginManagement { - def flutterSdkPath = { - def properties = new Properties() - file("local.properties").withInputStream { properties.load(it) } - def flutterSdkPath = properties.getProperty("flutter.sdk") - assert flutterSdkPath != null, "flutter.sdk not set in local.properties" - return flutterSdkPath - }() - - includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") - - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} - -plugins { - id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.1.0" apply false - id "org.jetbrains.kotlin.android" version "1.8.22" apply false -} - -include ":app" diff --git a/firebase-get-to-know-flutter/step_09/android/settings.gradle.kts b/firebase-get-to-know-flutter/step_09/android/settings.gradle.kts new file mode 100644 index 0000000000..a439442c20 --- /dev/null +++ b/firebase-get-to-know-flutter/step_09/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.0" apply false + id("org.jetbrains.kotlin.android") version "1.8.22" apply false +} + +include(":app") diff --git a/firebase-get-to-know-flutter/step_09/ios/Podfile b/firebase-get-to-know-flutter/step_09/ios/Podfile index 3e44f9c6f7..2dbf7d728d 100644 --- a/firebase-get-to-know-flutter/step_09/ios/Podfile +++ b/firebase-get-to-know-flutter/step_09/ios/Podfile @@ -29,7 +29,6 @@ flutter_ios_podfile_setup target 'Runner' do use_frameworks! - use_modular_headers! flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) target 'RunnerTests' do diff --git a/firebase-get-to-know-flutter/step_09/ios/Runner.xcodeproj/project.pbxproj b/firebase-get-to-know-flutter/step_09/ios/Runner.xcodeproj/project.pbxproj index b36a0695b4..88487db888 100644 --- a/firebase-get-to-know-flutter/step_09/ios/Runner.xcodeproj/project.pbxproj +++ b/firebase-get-to-know-flutter/step_09/ios/Runner.xcodeproj/project.pbxproj @@ -7,15 +7,15 @@ objects = { /* Begin PBXBuildFile section */ + 082C04D0C743E5A06E960950 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F110CAAAFB2B4F9B9A1E8F31 /* Pods_RunnerTests.framework */; }; 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; - 7A9C31C280F37822AC10EFC6 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A775D781AAFB6ECC974BD650 /* Pods_RunnerTests.framework */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - 9BC295015BFD0F95DA7CDEC1 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D072F4A6C2FEFE989564BCB0 /* Pods_Runner.framework */; }; + CC6FCAC971084E1245544BFA /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E6B516B47CEB51AB31DC92D4 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -44,16 +44,15 @@ /* Begin PBXFileReference section */ 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; + 16FA2CF1141436F952A89855 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 1B2433436ABF8198621D7409 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 5358ABFFB547340BADE91E57 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - 55C5C4278824A4EDF6B82BEC /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - 5CD039B3AB9EC2E131E6C8F5 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - 6DED744C3D22EF43057EEE48 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 67DBA47582AFA4BE4ED6D83C /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 73E271138B4D025FCE58DB98 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; - 775B7D9A711AD243E7CC900F /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; @@ -62,17 +61,18 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 9A20A943144662A86F585ABF /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - A775D781AAFB6ECC974BD650 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - D072F4A6C2FEFE989564BCB0 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 9D64B6D91D2D07CC9EF7FE49 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + E6A8E045350DD7826A5C5E5C /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + E6B516B47CEB51AB31DC92D4 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + F110CAAAFB2B4F9B9A1E8F31 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 7DD45768AC8C7D43ABCA9DE3 /* Frameworks */ = { + 39B7411714C973C7723733FB /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 7A9C31C280F37822AC10EFC6 /* Pods_RunnerTests.framework in Frameworks */, + 082C04D0C743E5A06E960950 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -80,13 +80,27 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 9BC295015BFD0F95DA7CDEC1 /* Pods_Runner.framework in Frameworks */, + CC6FCAC971084E1245544BFA /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 1F5D1AD7679A13B9E59E256F /* Pods */ = { + isa = PBXGroup; + children = ( + E6A8E045350DD7826A5C5E5C /* Pods-Runner.debug.xcconfig */, + 67DBA47582AFA4BE4ED6D83C /* Pods-Runner.release.xcconfig */, + 1B2433436ABF8198621D7409 /* Pods-Runner.profile.xcconfig */, + 16FA2CF1141436F952A89855 /* Pods-RunnerTests.debug.xcconfig */, + 9D64B6D91D2D07CC9EF7FE49 /* Pods-RunnerTests.release.xcconfig */, + 73E271138B4D025FCE58DB98 /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; 331C8082294A63A400263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -95,11 +109,11 @@ path = RunnerTests; sourceTree = ""; }; - 561E40DE921F40D44603A357 /* Frameworks */ = { + 7C6C33056D42C35511132C9E /* Frameworks */ = { isa = PBXGroup; children = ( - D072F4A6C2FEFE989564BCB0 /* Pods_Runner.framework */, - A775D781AAFB6ECC974BD650 /* Pods_RunnerTests.framework */, + E6B516B47CEB51AB31DC92D4 /* Pods_Runner.framework */, + F110CAAAFB2B4F9B9A1E8F31 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -122,8 +136,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - B7525EDD33924E7F2C905A28 /* Pods */, - 561E40DE921F40D44603A357 /* Frameworks */, + 1F5D1AD7679A13B9E59E256F /* Pods */, + 7C6C33056D42C35511132C9E /* Frameworks */, ); sourceTree = ""; }; @@ -151,20 +165,6 @@ path = Runner; sourceTree = ""; }; - B7525EDD33924E7F2C905A28 /* Pods */ = { - isa = PBXGroup; - children = ( - 6DED744C3D22EF43057EEE48 /* Pods-Runner.debug.xcconfig */, - 9A20A943144662A86F585ABF /* Pods-Runner.release.xcconfig */, - 5358ABFFB547340BADE91E57 /* Pods-Runner.profile.xcconfig */, - 775B7D9A711AD243E7CC900F /* Pods-RunnerTests.debug.xcconfig */, - 5CD039B3AB9EC2E131E6C8F5 /* Pods-RunnerTests.release.xcconfig */, - 55C5C4278824A4EDF6B82BEC /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 24615447E6AA9E5E76B95A56 /* [CP] Check Pods Manifest.lock */, + 37E93A95A15B8D583768D758 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 7DD45768AC8C7D43ABCA9DE3 /* Frameworks */, + 39B7411714C973C7723733FB /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - FE3AC9F7FF7CA03E86CBC134 /* [CP] Check Pods Manifest.lock */, + D0CFBE200EDA4DA52FD6E09C /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 04B52FCD7D9AF7EB0D333921 /* [CP] Embed Pods Frameworks */, + 93F4C06206A82D754D92A8CF /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -270,24 +270,7 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 04B52FCD7D9AF7EB0D333921 /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; - 24615447E6AA9E5E76B95A56 /* [CP] Check Pods Manifest.lock */ = { + 37E93A95A15B8D583768D758 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -325,6 +308,23 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; + 93F4C06206A82D754D92A8CF /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -340,7 +340,7 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - FE3AC9F7FF7CA03E86CBC134 /* [CP] Check Pods Manifest.lock */ = { + D0CFBE200EDA4DA52FD6E09C /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -488,7 +488,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 775B7D9A711AD243E7CC900F /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 16FA2CF1141436F952A89855 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -507,7 +507,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 5CD039B3AB9EC2E131E6C8F5 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 9D64B6D91D2D07CC9EF7FE49 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -524,7 +524,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 55C5C4278824A4EDF6B82BEC /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 73E271138B4D025FCE58DB98 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/firebase-get-to-know-flutter/step_09/macos/Podfile b/firebase-get-to-know-flutter/step_09/macos/Podfile index b52666a103..ff5ddb3b8b 100644 --- a/firebase-get-to-know-flutter/step_09/macos/Podfile +++ b/firebase-get-to-know-flutter/step_09/macos/Podfile @@ -28,7 +28,6 @@ flutter_macos_podfile_setup target 'Runner' do use_frameworks! - use_modular_headers! flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__)) target 'RunnerTests' do diff --git a/firebase-get-to-know-flutter/step_09/macos/Runner.xcodeproj/project.pbxproj b/firebase-get-to-know-flutter/step_09/macos/Runner.xcodeproj/project.pbxproj index d85fcc90de..eca001f8f3 100644 --- a/firebase-get-to-know-flutter/step_09/macos/Runner.xcodeproj/project.pbxproj +++ b/firebase-get-to-know-flutter/step_09/macos/Runner.xcodeproj/project.pbxproj @@ -27,8 +27,8 @@ 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 6773A496AD7A5686E2DD29BD /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5AD57AEB256EF9C78131F228 /* Pods_RunnerTests.framework */; }; - 8D4861BD95308793990CB833 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8F12630335546B1C0688E5A2 /* Pods_Runner.framework */; }; + 6AFABF12BBC519D5C4A901F1 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C036F44EC867685CEAB8A8BE /* Pods_Runner.framework */; }; + 9F0DCF96D98359E7727F33C2 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FA1C88B2C8FD60041891B74C /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,7 +62,7 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 0ED29D5295E06CA4849433BA /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 27A12D55B0E1779D5984B001 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -79,15 +79,15 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 4DA808B3C32EB1D9F3FC18B3 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 5AD57AEB256EF9C78131F228 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 434DA5476F159D3D34FBDBA4 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 44323EED11D5023C4A1B67DB /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 8F12630335546B1C0688E5A2 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 921768E3C0134A61232C251B /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - A109CB21F52E718A03B81B57 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - B2CEB86711238F049F19BEB9 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - E072F90EF015017AAEF964C6 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + C036F44EC867685CEAB8A8BE /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + ECD8A5491B41D17E29E95AE1 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + ECE40685908C07B2A5040FAF /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + F65ECCB5512FECB3E8673CC2 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + FA1C88B2C8FD60041891B74C /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 6773A496AD7A5686E2DD29BD /* Pods_RunnerTests.framework in Frameworks */, + 9F0DCF96D98359E7727F33C2 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,27 +103,13 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 8D4861BD95308793990CB833 /* Pods_Runner.framework in Frameworks */, + 6AFABF12BBC519D5C4A901F1 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 06338C9EC6CCDC584FFFB260 /* Pods */ = { - isa = PBXGroup; - children = ( - 921768E3C0134A61232C251B /* Pods-Runner.debug.xcconfig */, - A109CB21F52E718A03B81B57 /* Pods-Runner.release.xcconfig */, - E072F90EF015017AAEF964C6 /* Pods-Runner.profile.xcconfig */, - 4DA808B3C32EB1D9F3FC18B3 /* Pods-RunnerTests.debug.xcconfig */, - 0ED29D5295E06CA4849433BA /* Pods-RunnerTests.release.xcconfig */, - B2CEB86711238F049F19BEB9 /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; 331C80D6294CF71000263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -151,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 06338C9EC6CCDC584FFFB260 /* Pods */, + 732A0D8F978DD3061D16CF02 /* Pods */, ); sourceTree = ""; }; @@ -199,11 +185,25 @@ path = Runner; sourceTree = ""; }; + 732A0D8F978DD3061D16CF02 /* Pods */ = { + isa = PBXGroup; + children = ( + 27A12D55B0E1779D5984B001 /* Pods-Runner.debug.xcconfig */, + 44323EED11D5023C4A1B67DB /* Pods-Runner.release.xcconfig */, + F65ECCB5512FECB3E8673CC2 /* Pods-Runner.profile.xcconfig */, + ECE40685908C07B2A5040FAF /* Pods-RunnerTests.debug.xcconfig */, + 434DA5476F159D3D34FBDBA4 /* Pods-RunnerTests.release.xcconfig */, + ECD8A5491B41D17E29E95AE1 /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - 8F12630335546B1C0688E5A2 /* Pods_Runner.framework */, - 5AD57AEB256EF9C78131F228 /* Pods_RunnerTests.framework */, + C036F44EC867685CEAB8A8BE /* Pods_Runner.framework */, + FA1C88B2C8FD60041891B74C /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 028AD4DD9A19B93A662AECAF /* [CP] Check Pods Manifest.lock */, + 8B20AB343C49FA1A88CE9F4C /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - F1E17869CBA61BDB552EF98E /* [CP] Check Pods Manifest.lock */, + 3C67C9C385BE70FC522DCB83 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 3B746273FB6BFBEE317579ED /* [CP] Embed Pods Frameworks */, + DCAFE8444F0E285F11EAB403 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,28 +323,6 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 028AD4DD9A19B93A662AECAF /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -383,24 +361,29 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 3B746273FB6BFBEE317579ED /* [CP] Embed Pods Frameworks */ = { + 3C67C9C385BE70FC522DCB83 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - F1E17869CBA61BDB552EF98E /* [CP] Check Pods Manifest.lock */ = { + 8B20AB343C49FA1A88CE9F4C /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -415,13 +398,30 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; + DCAFE8444F0E285F11EAB403 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 4DA808B3C32EB1D9F3FC18B3 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = ECE40685908C07B2A5040FAF /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -489,7 +489,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 0ED29D5295E06CA4849433BA /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 434DA5476F159D3D34FBDBA4 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -505,7 +505,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = B2CEB86711238F049F19BEB9 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = ECD8A5491B41D17E29E95AE1 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/firebase-get-to-know-flutter/step_09/pubspec.yaml b/firebase-get-to-know-flutter/step_09/pubspec.yaml index d7f35cbe41..ad5dc1885b 100644 --- a/firebase-get-to-know-flutter/step_09/pubspec.yaml +++ b/firebase-get-to-know-flutter/step_09/pubspec.yaml @@ -36,10 +36,10 @@ dependencies: # Use with the CupertinoIcons class for iOS style icons. cupertino_icons: ^1.0.8 google_fonts: ^6.2.1 - go_router: ^14.5.0 - cloud_firestore: ^5.4.5 - firebase_auth: ^5.3.2 - firebase_core: ^3.7.0 + go_router: ^14.6.0 + cloud_firestore: ^5.5.0 + firebase_auth: ^5.3.3 + firebase_core: ^3.8.0 provider: ^6.1.2 firebase_ui_auth: ^1.16.0 From ff5b2e1641e3d9c13f574f684df286e50a530fb9 Mon Sep 17 00:00:00 2001 From: Brett Morgan Date: Fri, 15 Nov 2024 22:15:06 +1100 Subject: [PATCH 076/108] Update `firebase-get-to-know-flutter`, part 2 --- .../codelab_rebuild.yaml | 588 ++++++++---------- 1 file changed, 269 insertions(+), 319 deletions(-) diff --git a/firebase-get-to-know-flutter/codelab_rebuild.yaml b/firebase-get-to-know-flutter/codelab_rebuild.yaml index 251b26158e..4ac10ca5d3 100644 --- a/firebase-get-to-know-flutter/codelab_rebuild.yaml +++ b/firebase-get-to-know-flutter/codelab_rebuild.yaml @@ -41,8 +41,8 @@ steps: # To add assets to your application, add an assets section, like this: # assets: - - name: Patch android/app/build.gradle - path: gtk_flutter/android/app/build.gradle + - name: Patch android/app/build.gradle.kts + path: gtk_flutter/android/app/build.gradle.kts patch-u: | --- b/firebase-get-to-know-flutter/step_02/android/app/build.gradle +++ a/firebase-get-to-know-flutter/step_02/android/app/build.gradle @@ -111,31 +111,29 @@ steps: // Copyright 2022 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. - + import 'package:flutter/material.dart'; import 'package:google_fonts/google_fonts.dart'; - + import 'home_page.dart'; - + void main() { runApp(const App()); } - + class App extends StatelessWidget { const App({super.key}); - + @override Widget build(BuildContext context) { return MaterialApp( title: 'Firebase Meetup', theme: ThemeData( - buttonTheme: Theme.of(context).buttonTheme.copyWith( - highlightColor: Colors.deepPurple, - ), + buttonTheme: Theme.of( + context, + ).buttonTheme.copyWith(highlightColor: Colors.deepPurple), colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple), - textTheme: GoogleFonts.robotoTextTheme( - Theme.of(context).textTheme, - ), + textTheme: GoogleFonts.robotoTextTheme(Theme.of(context).textTheme), visualDensity: VisualDensity.adaptivePlatformDensity, useMaterial3: true, ), @@ -149,20 +147,18 @@ steps: // Copyright 2022 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. - + import 'package:flutter/material.dart'; - + import 'src/widgets.dart'; - + class HomePage extends StatelessWidget { const HomePage({super.key}); - + @override Widget build(BuildContext context) { return Scaffold( - appBar: AppBar( - title: const Text('Firebase Meetup'), - ), + appBar: AppBar(title: const Text('Firebase Meetup')), body: ListView( children: [ Image.asset('assets/codelab.png'), @@ -194,22 +190,18 @@ steps: // Copyright 2022 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. - + import 'package:flutter/material.dart'; import 'package:go_router/go_router.dart'; - + import 'widgets.dart'; - + class AuthFunc extends StatelessWidget { - const AuthFunc({ - super.key, - required this.loggedIn, - required this.signOut, - }); - + const AuthFunc({super.key, required this.loggedIn, required this.signOut}); + final bool loggedIn; final void Function() signOut; - + @override Widget build(BuildContext context) { return Row( @@ -217,22 +209,24 @@ steps: Padding( padding: const EdgeInsets.only(left: 24, bottom: 8), child: StyledButton( - onPressed: () { - !loggedIn ? context.push('/sign-in') : signOut(); - }, - child: !loggedIn ? const Text('RSVP') : const Text('Logout')), + onPressed: () { + !loggedIn ? context.push('/sign-in') : signOut(); + }, + child: !loggedIn ? const Text('RSVP') : const Text('Logout'), + ), ), Visibility( visible: loggedIn, child: Padding( padding: const EdgeInsets.only(left: 24, bottom: 8), child: StyledButton( - onPressed: () { - context.push('/profile'); - }, - child: const Text('Profile')), + onPressed: () { + context.push('/profile'); + }, + child: const Text('Profile'), + ), ), - ) + ), ], ); } @@ -243,7 +237,7 @@ steps: // Copyright 2022 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. - + import 'package:flutter/material.dart'; class Header extends StatelessWidget { @@ -252,12 +246,9 @@ steps: @override Widget build(BuildContext context) => Padding( - padding: const EdgeInsets.all(8.0), - child: Text( - heading, - style: const TextStyle(fontSize: 24), - ), - ); + padding: const EdgeInsets.all(8.0), + child: Text(heading, style: const TextStyle(fontSize: 24)), + ); } class Paragraph extends StatelessWidget { @@ -265,12 +256,9 @@ steps: final String content; @override Widget build(BuildContext context) => Padding( - padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 4), - child: Text( - content, - style: const TextStyle(fontSize: 18), - ), - ); + padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 4), + child: Text(content, style: const TextStyle(fontSize: 18)), + ); } class IconAndDetail extends StatelessWidget { @@ -280,18 +268,15 @@ steps: @override Widget build(BuildContext context) => Padding( - padding: const EdgeInsets.all(8.0), - child: Row( - children: [ - Icon(icon), - const SizedBox(width: 8), - Text( - detail, - style: const TextStyle(fontSize: 18), - ) - ], - ), - ); + padding: const EdgeInsets.all(8.0), + child: Row( + children: [ + Icon(icon), + const SizedBox(width: 8), + Text(detail, style: const TextStyle(fontSize: 18)), + ], + ), + ); } class StyledButton extends StatelessWidget { @@ -301,11 +286,12 @@ steps: @override Widget build(BuildContext context) => OutlinedButton( - style: OutlinedButton.styleFrom( - side: const BorderSide(color: Colors.deepPurple)), - onPressed: onPressed, - child: child, - ); + style: OutlinedButton.styleFrom( + side: const BorderSide(color: Colors.deepPurple), + ), + onPressed: onPressed, + child: child, + ); } - name: Replace test/widget_test.dart path: gtk_flutter/test/widget_test.dart @@ -1753,7 +1739,8 @@ steps: return macos; default: throw UnsupportedError( - 'DefaultFirebaseOptions are not supported for this platform.'); + 'DefaultFirebaseOptions are not supported for this platform.', + ); } } @@ -1841,7 +1828,7 @@ steps: patch-u: | --- b/firebase-get-to-know-flutter/step_05/lib/main.dart +++ a/firebase-get-to-know-flutter/step_05/lib/main.dart - @@ -2,21 +2,105 @@ + @@ -2,21 +2,107 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. @@ -1858,10 +1845,12 @@ steps: - runApp(const App()); + WidgetsFlutterBinding.ensureInitialized(); + - + runApp(ChangeNotifierProvider( - + create: (context) => ApplicationState(), - + builder: ((context, child) => const App()), - + )); + + runApp( + + ChangeNotifierProvider( + + create: (context) => ApplicationState(), + + builder: ((context, child) => const App()), + + ), + + ); } +final _router = GoRouter( @@ -1878,9 +1867,7 @@ steps: + ForgotPasswordAction(((context, email) { + final uri = Uri( + path: '/sign-in/forgot-password', - + queryParameters: { - + 'email': email, - + }, + + queryParameters: {'email': email}, + ); + context.push(uri.toString()); + })), @@ -1888,7 +1875,7 @@ steps: + final user = switch (state) { + SignedIn state => state.user, + UserCreated state => state.credential.user, - + _ => null + + _ => null, + }; + if (user == null) { + return; @@ -1899,8 +1886,10 @@ steps: + if (!user.emailVerified) { + user.sendEmailVerification(); + const snackBar = SnackBar( - + content: Text( - + 'Please check your email to verify your email address')); + + content: Text( + + 'Please check your email to verify your email address', + + ), + + ); + ScaffoldMessenger.of(context).showSnackBar(snackBar); + } + context.pushReplacement('/'); @@ -1948,8 +1937,8 @@ steps: + return MaterialApp.router( title: 'Firebase Meetup', theme: ThemeData( - buttonTheme: Theme.of(context).buttonTheme.copyWith( - @@ -29,7 +113,7 @@ class App extends StatelessWidget { + buttonTheme: Theme.of( + @@ -27,7 +113,7 @@ class App extends StatelessWidget { visualDensity: VisualDensity.adaptivePlatformDensity, useMaterial3: true, ), @@ -1990,31 +1979,30 @@ steps: // Copyright 2022 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. - + import 'package:firebase_auth/firebase_auth.dart' hide EmailAuthProvider, PhoneAuthProvider; import 'package:firebase_core/firebase_core.dart'; import 'package:firebase_ui_auth/firebase_ui_auth.dart'; import 'package:flutter/material.dart'; - + import 'firebase_options.dart'; - + class ApplicationState extends ChangeNotifier { ApplicationState() { init(); } - + bool _loggedIn = false; bool get loggedIn => _loggedIn; - + Future init() async { await Firebase.initializeApp( - options: DefaultFirebaseOptions.currentPlatform); - - FirebaseUIAuth.configureProviders([ - EmailAuthProvider(), - ]); - + options: DefaultFirebaseOptions.currentPlatform, + ); + + FirebaseUIAuth.configureProviders([EmailAuthProvider()]); + FirebaseAuth.instance.userChanges().listen((user) { if (user != null) { _loggedIn = true; @@ -2044,51 +2032,22 @@ steps: import 'src/widgets.dart'; class HomePage extends StatelessWidget { - @@ -21,6 +26,13 @@ class HomePage extends StatelessWidget { + @@ -19,6 +24,15 @@ class HomePage extends StatelessWidget { const SizedBox(height: 8), const IconAndDetail(Icons.calendar_today, 'October 30'), const IconAndDetail(Icons.location_city, 'San Francisco'), + Consumer( - + builder: (context, appState, _) => AuthFunc( - + loggedIn: appState.loggedIn, - + signOut: () { - + FirebaseAuth.instance.signOut(); - + }), + + builder: + + (context, appState, _) => AuthFunc( + + loggedIn: appState.loggedIn, + + signOut: () { + + FirebaseAuth.instance.signOut(); + + }, + + ), + ), const Divider( height: 8, thickness: 1, - - name: Patch lib/src/authentication.dart - path: gtk_flutter/lib/src/authentication.dart - patch-u: | - --- b/firebase-get-to-know-flutter/step_05/lib/src/authentication.dart - +++ a/firebase-get-to-know-flutter/step_05/lib/src/authentication.dart - @@ -30,16 +30,15 @@ class AuthFunc extends StatelessWidget { - child: !loggedIn ? const Text('RSVP') : const Text('Logout')), - ), - Visibility( - - visible: loggedIn, - - child: Padding( - - padding: const EdgeInsets.only(left: 24, bottom: 8), - - child: StyledButton( - - onPressed: () { - - context.push('/profile'); - - }, - - child: const Text('Profile')), - - ), - - ) - + visible: loggedIn, - + child: Padding( - + padding: const EdgeInsets.only(left: 24, bottom: 8), - + child: StyledButton( - + onPressed: () { - + context.push('/profile'); - + }, - + child: const Text('Profile')), - + )) - ], - ); - } - name: Copy step_05 copydir: from: gtk_flutter @@ -2118,7 +2077,7 @@ steps: bool get loggedIn => _loggedIn; Future init() async { - @@ -35,4 +37,19 @@ class ApplicationState extends ChangeNotifier { + @@ -34,4 +36,19 @@ class ApplicationState extends ChangeNotifier { notifyListeners(); }); } @@ -2131,11 +2090,11 @@ steps: + return FirebaseFirestore.instance + .collection('guestbook') + .add({ - + 'text': message, - + 'timestamp': DateTime.now().millisecondsSinceEpoch, - + 'name': FirebaseAuth.instance.currentUser!.displayName, - + 'userId': FirebaseAuth.instance.currentUser!.uid, - + }); + + 'text': message, + + 'timestamp': DateTime.now().millisecondsSinceEpoch, + + 'name': FirebaseAuth.instance.currentUser!.displayName, + + 'userId': FirebaseAuth.instance.currentUser!.uid, + + }); + } } - name: Add lib/guest_book.dart @@ -2144,26 +2103,26 @@ steps: // Copyright 2022 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. - + import 'dart:async'; - + import 'package:flutter/material.dart'; - + import 'src/widgets.dart'; - + class GuestBook extends StatefulWidget { const GuestBook({required this.addMessage, super.key}); - + final FutureOr Function(String message) addMessage; - + @override State createState() => _GuestBookState(); } - + class _GuestBookState extends State { final _formKey = GlobalKey(debugLabel: '_GuestBookState'); final _controller = TextEditingController(); - + @override Widget build(BuildContext context) { return Padding( @@ -2175,9 +2134,7 @@ steps: Expanded( child: TextFormField( controller: _controller, - decoration: const InputDecoration( - hintText: 'Leave a message', - ), + decoration: const InputDecoration(hintText: 'Leave a message'), validator: (value) { if (value == null || value.isEmpty) { return 'Enter your message to continue'; @@ -2195,11 +2152,7 @@ steps: } }, child: const Row( - children: [ - Icon(Icons.send), - SizedBox(width: 4), - Text('SEND'), - ], + children: [Icon(Icons.send), SizedBox(width: 4), Text('SEND')], ), ), ], @@ -2207,7 +2160,7 @@ steps: ), ); } - + @override void dispose() { _controller.dispose(); @@ -2227,23 +2180,25 @@ steps: import 'src/authentication.dart'; import 'src/widgets.dart'; - @@ -44,6 +45,20 @@ class HomePage extends StatelessWidget { + @@ -44,6 +45,22 @@ class HomePage extends StatelessWidget { const Paragraph( 'Join us for a day full of Firebase Workshops and Pizza!', ), + Consumer( - + builder: (context, appState, _) => Column( - + crossAxisAlignment: CrossAxisAlignment.start, - + children: [ - + if (appState.loggedIn) ...[ - + const Header('Discussion'), - + GuestBook( - + addMessage: (message) => - + appState.addMessageToGuestBook(message), - + ), - + ], - + ], - + ), + + builder: + + (context, appState, _) => Column( + + crossAxisAlignment: CrossAxisAlignment.start, + + children: [ + + if (appState.loggedIn) ...[ + + const Header('Discussion'), + + GuestBook( + + addMessage: + + (message) => + + appState.addMessageToGuestBook(message), + + ), + + ], + + ], + + ), + ), ], ), @@ -2291,8 +2246,8 @@ steps: + Future init() async { await Firebase.initializeApp( - options: DefaultFirebaseOptions.currentPlatform); - @@ -31,8 +37,26 @@ class ApplicationState extends ChangeNotifier { + options: DefaultFirebaseOptions.currentPlatform, + @@ -30,8 +36,26 @@ class ApplicationState extends ChangeNotifier { FirebaseAuth.instance.userChanges().listen((user) { if (user != null) { _loggedIn = true; @@ -2301,17 +2256,17 @@ steps: + .orderBy('timestamp', descending: true) + .snapshots() + .listen((snapshot) { - + _guestBookMessages = []; - + for (final document in snapshot.docs) { - + _guestBookMessages.add( - + GuestBookMessage( - + name: document.data()['name'] as String, - + message: document.data()['text'] as String, - + ), - + ); - + } - + notifyListeners(); - + }); + + _guestBookMessages = []; + + for (final document in snapshot.docs) { + + _guestBookMessages.add( + + GuestBookMessage( + + name: document.data()['name'] as String, + + message: document.data()['text'] as String, + + ), + + ); + + } + + notifyListeners(); + + }); } else { _loggedIn = false; + _guestBookMessages = []; @@ -2357,7 +2312,7 @@ steps: @override State createState() => _GuestBookState(); - @@ -23,45 +29,54 @@ class _GuestBookState extends State { + @@ -23,39 +29,54 @@ class _GuestBookState extends State { @override Widget build(BuildContext context) { @@ -2370,8 +2325,14 @@ steps: - Expanded( - child: TextFormField( - controller: _controller, - - decoration: const InputDecoration( - - hintText: 'Leave a message', + - decoration: const InputDecoration(hintText: 'Leave a message'), + - validator: (value) { + - if (value == null || value.isEmpty) { + - return 'Enter your message to continue'; + - } + - return null; + - }, + - ), + return Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ @@ -2394,30 +2355,7 @@ steps: + return null; + }, + ), - ), - - validator: (value) { - - if (value == null || value.isEmpty) { - - return 'Enter your message to continue'; - - } - - return null; - - }, - - ), - - ), - - const SizedBox(width: 8), - - StyledButton( - - onPressed: () async { - - if (_formKey.currentState!.validate()) { - - await widget.addMessage(_controller.text); - - _controller.clear(); - - } - - }, - - child: const Row( - - children: [ - - Icon(Icons.send), - - SizedBox(width: 4), - - Text('SEND'), - - ], - - ), + + ), + const SizedBox(width: 8), + StyledButton( + onPressed: () async { @@ -2436,6 +2374,18 @@ steps: + ), + ], ), + - const SizedBox(width: 8), + - StyledButton( + - onPressed: () async { + - if (_formKey.currentState!.validate()) { + - await widget.addMessage(_controller.text); + - _controller.clear(); + - } + - }, + - child: const Row( + - children: [Icon(Icons.send), SizedBox(width: 4), Text('SEND')], + - ), + - ), - ], + ), ), @@ -2447,20 +2397,19 @@ steps: + ], ); } - } - name: Patch lib/home_page.dart path: gtk_flutter/lib/home_page.dart patch-u: | --- b/firebase-get-to-know-flutter/step_07/lib/home_page.dart +++ a/firebase-get-to-know-flutter/step_07/lib/home_page.dart - @@ -54,6 +54,7 @@ class HomePage extends StatelessWidget { - GuestBook( - addMessage: (message) => - appState.addMessageToGuestBook(message), - + messages: appState.guestBookMessages, - ), - ], - ], + @@ -56,6 +56,7 @@ class HomePage extends StatelessWidget { + addMessage: + (message) => + appState.addMessageToGuestBook(message), + + messages: appState.guestBookMessages, + ), + ], + ], - name: Copy step_07 copydir: from: gtk_flutter @@ -2474,12 +2423,17 @@ steps: patch-u: | --- b/firebase-get-to-know-flutter/step_09/lib/src/authentication.dart +++ a/firebase-get-to-know-flutter/step_09/lib/src/authentication.dart - @@ -12,10 +12,12 @@ class AuthFunc extends StatelessWidget { - super.key, - required this.loggedIn, - required this.signOut, + @@ -8,10 +8,16 @@ import 'package:go_router/go_router.dart'; + import 'widgets.dart'; + + class AuthFunc extends StatelessWidget { + - const AuthFunc({super.key, required this.loggedIn, required this.signOut}); + + const AuthFunc({ + + super.key, + + required this.loggedIn, + + required this.signOut, + this.enableFreeSwag = false, - }); + + }); final bool loggedIn; final void Function() signOut; @@ -2487,22 +2441,22 @@ steps: @override Widget build(BuildContext context) { - @@ -38,7 +40,17 @@ class AuthFunc extends StatelessWidget { - context.push('/profile'); - }, - child: const Text('Profile')), - - )) - + )), + @@ -38,6 +44,18 @@ class AuthFunc extends StatelessWidget { + ), + ), + ), + Visibility( - + visible: enableFreeSwag, - + child: Padding( - + padding: const EdgeInsets.only(left: 24, bottom: 8), - + child: StyledButton( - + onPressed: () { - + throw Exception('free swag unimplemented'); - + }, - + child: const Text('Free swag!')), - + )), + + visible: enableFreeSwag, + + child: Padding( + + padding: const EdgeInsets.only(left: 24, bottom: 8), + + child: StyledButton( + + onPressed: () { + + throw Exception('free swag unimplemented'); + + }, + + child: const Text('Free swag!'), + + ), + + ), + + ), ], ); } @@ -2580,19 +2534,19 @@ steps: + Future init() async { await Firebase.initializeApp( - options: DefaultFirebaseOptions.currentPlatform); - @@ -34,9 +85,19 @@ class ApplicationState extends ChangeNotifier { - EmailAuthProvider(), - ]); + options: DefaultFirebaseOptions.currentPlatform, + @@ -33,9 +84,19 @@ class ApplicationState extends ChangeNotifier { + + FirebaseUIAuth.configureProviders([EmailAuthProvider()]); + FirebaseFirestore.instance + .collection('attendees') + .where('attending', isEqualTo: true) + .snapshots() + .listen((snapshot) { - + _attendees = snapshot.docs.length; - + notifyListeners(); - + }); + + _attendees = snapshot.docs.length; + + notifyListeners(); + + }); + FirebaseAuth.instance.userChanges().listen((user) { if (user != null) { @@ -2601,26 +2555,26 @@ steps: _guestBookSubscription = FirebaseFirestore.instance .collection('guestbook') .orderBy('timestamp', descending: true) - @@ -53,15 +114,43 @@ class ApplicationState extends ChangeNotifier { - } - notifyListeners(); - }); + @@ -52,15 +113,43 @@ class ApplicationState extends ChangeNotifier { + } + notifyListeners(); + }); + _attendingSubscription = FirebaseFirestore.instance + .collection('attendees') + .doc(user.uid) + .snapshots() + .listen((snapshot) { - + if (snapshot.data() != null) { - + if (snapshot.data()!['attending'] as bool) { - + _attending = Attending.yes; - + } else { - + _attending = Attending.no; - + } - + } else { - + _attending = Attending.unknown; - + } - + notifyListeners(); - + }); + + if (snapshot.data() != null) { + + if (snapshot.data()!['attending'] as bool) { + + _attending = Attending.yes; + + } else { + + _attending = Attending.no; + + } + + } else { + + _attending = Attending.unknown; + + } + + notifyListeners(); + + }); } else { _loggedIn = false; + _emailVerified = false; @@ -2658,65 +2612,61 @@ steps: class HomePage extends StatelessWidget { const HomePage({super.key}); - @@ -25,14 +26,19 @@ class HomePage extends StatelessWidget { + @@ -23,7 +24,11 @@ class HomePage extends StatelessWidget { children: [ Image.asset('assets/codelab.png'), const SizedBox(height: 8), - const IconAndDetail(Icons.calendar_today, 'October 30'), + Consumer( - + builder: (context, appState, _) => - + IconAndDetail(Icons.calendar_today, appState.eventDate), + + builder: + + (context, appState, _) => + + IconAndDetail(Icons.calendar_today, appState.eventDate), + ), const IconAndDetail(Icons.location_city, 'San Francisco'), Consumer( - builder: (context, appState, _) => AuthFunc( - - loggedIn: appState.loggedIn, - - signOut: () { - - FirebaseAuth.instance.signOut(); - - }), - + loggedIn: appState.loggedIn, - + signOut: () { - + FirebaseAuth.instance.signOut(); - + }, - + enableFreeSwag: appState.enableFreeSwag, - + ), + builder: + @@ -32,6 +37,7 @@ class HomePage extends StatelessWidget { + signOut: () { + FirebaseAuth.instance.signOut(); + }, + + enableFreeSwag: appState.enableFreeSwag, + ), ), const Divider( - height: 8, - @@ -42,14 +48,25 @@ class HomePage extends StatelessWidget { + @@ -42,15 +48,25 @@ class HomePage extends StatelessWidget { color: Colors.grey, ), const Header("What we'll be doing"), - const Paragraph( - 'Join us for a day full of Firebase Workshops and Pizza!', + Consumer( - + builder: (context, appState, _) => Paragraph( - + appState.callToAction, - + ), + + builder: (context, appState, _) => Paragraph(appState.callToAction), ), Consumer( - builder: (context, appState, _) => Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - + switch (appState.attendees) { - + 1 => const Paragraph('1 person going'), - + >= 2 => Paragraph('${appState.attendees} people going'), - + _ => const Paragraph('No one going'), - + }, - if (appState.loggedIn) ...[ - + YesNoSelection( - + state: appState.attending, - + onSelection: (attending) => appState.attending = attending, - + ), - const Header('Discussion'), - GuestBook( - addMessage: (message) => + builder: + (context, appState, _) => Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + + switch (appState.attendees) { + + 1 => const Paragraph('1 person going'), + + >= 2 => Paragraph('${appState.attendees} people going'), + + _ => const Paragraph('No one going'), + + }, + if (appState.loggedIn) ...[ + + YesNoSelection( + + state: appState.attending, + + onSelection: + + (attending) => appState.attending = attending, + + ), + const Header('Discussion'), + GuestBook( + addMessage: - name: Patch lib/main.dart path: gtk_flutter/lib/main.dart patch-u: | --- b/firebase-get-to-know-flutter/step_09/lib/main.dart +++ a/firebase-get-to-know-flutter/step_09/lib/main.dart - @@ -80,13 +80,28 @@ final _router = GoRouter( + @@ -82,13 +82,28 @@ final _router = GoRouter( GoRoute( path: 'profile', builder: (context, state) { @@ -2728,27 +2678,27 @@ steps: - }), - ], + return Consumer( - + builder: (context, appState, _) => ProfileScreen( - + key: ValueKey(appState.emailVerified), - + providers: const [], - + actions: [ - + SignedOutAction( - + ((context) { - + context.pushReplacement('/'); - + }), + + builder: + + (context, appState, _) => ProfileScreen( + + key: ValueKey(appState.emailVerified), + + providers: const [], + + actions: [ + + SignedOutAction(((context) { + + context.pushReplacement('/'); + + })), + + ], + + children: [ + + Visibility( + + visible: !appState.emailVerified, + + child: OutlinedButton( + + child: const Text('Recheck Verification State'), + + onPressed: () { + + appState.refreshLoggedInUser(); + + }, + + ), + + ), + + ], + ), - + ], - + children: [ - + Visibility( - + visible: !appState.emailVerified, - + child: OutlinedButton( - + child: const Text('Recheck Verification State'), - + onPressed: () { - + appState.refreshLoggedInUser(); - + }, - + )) - + ], - + ), ); }, ), @@ -2758,22 +2708,22 @@ steps: // Copyright 2022 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. - + import 'package:flutter/material.dart'; - + import 'app_state.dart'; import 'src/widgets.dart'; - + class YesNoSelection extends StatelessWidget { const YesNoSelection({ super.key, required this.state, required this.onSelection, }); - + final Attending state; final void Function(Attending selection) onSelection; - + @override Widget build(BuildContext context) { switch (state) { From f9bbe85aa544b09b939004eada6d22e39307e1f2 Mon Sep 17 00:00:00 2001 From: Brett Morgan Date: Sat, 16 Nov 2024 00:08:51 +1100 Subject: [PATCH 077/108] Update `forge2d_game` --- forge2d_game/codelab_rebuild.yaml | 655 +++++++++--------- .../app/{build.gradle => build.gradle.kts} | 10 +- forge2d_game/step_02/android/build.gradle | 18 - forge2d_game/step_02/android/build.gradle.kts | 21 + .../step_02/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- forge2d_game/step_02/android/settings.gradle | 25 - .../step_02/android/settings.gradle.kts | 25 + .../android/app/build.gradle.kts} | 10 +- forge2d_game/step_03/android/build.gradle | 18 - forge2d_game/step_03/android/build.gradle.kts | 21 + .../step_03/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- forge2d_game/step_03/android/settings.gradle | 25 - .../step_03/android/settings.gradle.kts | 25 + .../android/app/build.gradle.kts} | 10 +- forge2d_game/step_04/android/build.gradle | 18 - forge2d_game/step_04/android/build.gradle.kts | 21 + .../step_04/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- forge2d_game/step_04/android/settings.gradle | 25 - .../step_04/android/settings.gradle.kts | 25 + .../android/app/build.gradle.kts} | 10 +- forge2d_game/step_05/android/build.gradle | 18 - forge2d_game/step_05/android/build.gradle.kts | 21 + .../step_05/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- forge2d_game/step_05/android/settings.gradle | 25 - .../step_05/android/settings.gradle.kts | 25 + forge2d_game/step_06/android/app/build.gradle | 44 -- .../step_06/android/app/build.gradle.kts | 44 ++ forge2d_game/step_06/android/build.gradle | 18 - forge2d_game/step_06/android/build.gradle.kts | 21 + .../step_06/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- forge2d_game/step_06/android/settings.gradle | 25 - .../step_06/android/settings.gradle.kts | 25 + forge2d_game/step_07/android/app/build.gradle | 44 -- .../step_07/android/app/build.gradle.kts | 44 ++ forge2d_game/step_07/android/build.gradle | 18 - forge2d_game/step_07/android/build.gradle.kts | 21 + .../step_07/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- forge2d_game/step_07/android/settings.gradle | 25 - .../step_07/android/settings.gradle.kts | 25 + 45 files changed, 723 insertions(+), 706 deletions(-) rename forge2d_game/step_02/android/app/{build.gradle => build.gradle.kts} (84%) delete mode 100644 forge2d_game/step_02/android/build.gradle create mode 100644 forge2d_game/step_02/android/build.gradle.kts delete mode 100644 forge2d_game/step_02/android/settings.gradle create mode 100644 forge2d_game/step_02/android/settings.gradle.kts rename forge2d_game/{step_04/android/app/build.gradle => step_03/android/app/build.gradle.kts} (84%) delete mode 100644 forge2d_game/step_03/android/build.gradle create mode 100644 forge2d_game/step_03/android/build.gradle.kts delete mode 100644 forge2d_game/step_03/android/settings.gradle create mode 100644 forge2d_game/step_03/android/settings.gradle.kts rename forge2d_game/{step_05/android/app/build.gradle => step_04/android/app/build.gradle.kts} (84%) delete mode 100644 forge2d_game/step_04/android/build.gradle create mode 100644 forge2d_game/step_04/android/build.gradle.kts delete mode 100644 forge2d_game/step_04/android/settings.gradle create mode 100644 forge2d_game/step_04/android/settings.gradle.kts rename forge2d_game/{step_03/android/app/build.gradle => step_05/android/app/build.gradle.kts} (84%) delete mode 100644 forge2d_game/step_05/android/build.gradle create mode 100644 forge2d_game/step_05/android/build.gradle.kts delete mode 100644 forge2d_game/step_05/android/settings.gradle create mode 100644 forge2d_game/step_05/android/settings.gradle.kts delete mode 100644 forge2d_game/step_06/android/app/build.gradle create mode 100644 forge2d_game/step_06/android/app/build.gradle.kts delete mode 100644 forge2d_game/step_06/android/build.gradle create mode 100644 forge2d_game/step_06/android/build.gradle.kts delete mode 100644 forge2d_game/step_06/android/settings.gradle create mode 100644 forge2d_game/step_06/android/settings.gradle.kts delete mode 100644 forge2d_game/step_07/android/app/build.gradle create mode 100644 forge2d_game/step_07/android/app/build.gradle.kts delete mode 100644 forge2d_game/step_07/android/build.gradle create mode 100644 forge2d_game/step_07/android/build.gradle.kts delete mode 100644 forge2d_game/step_07/android/settings.gradle create mode 100644 forge2d_game/step_07/android/settings.gradle.kts diff --git a/forge2d_game/codelab_rebuild.yaml b/forge2d_game/codelab_rebuild.yaml index 693b3acacd..4854ea303f 100644 --- a/forge2d_game/codelab_rebuild.yaml +++ b/forge2d_game/codelab_rebuild.yaml @@ -65,11 +65,7 @@ steps: import 'package:flutter/material.dart'; void main() { - runApp( - GameWidget.controlled( - gameFactory: FlameGame.new, - ), - ); + runApp(GameWidget.controlled(gameFactory: FlameGame.new)); } - name: mkdir bin mkdir: forge2d_game/bin @@ -11676,19 +11672,18 @@ steps: class Background extends SpriteComponent with HasGameReference { Background({required super.sprite}) - : super( - anchor: Anchor.center, - position: Vector2(0, 0), - ); + : super(anchor: Anchor.center, position: Vector2(0, 0)); @override void onMount() { super.onMount(); - size = Vector2.all(max( - game.camera.visibleWorldRect.width, - game.camera.visibleWorldRect.height, - )); + size = Vector2.all( + max( + game.camera.visibleWorldRect.width, + game.camera.visibleWorldRect.height, + ), + ); } } - name: Add lib/components/game.dart @@ -11697,26 +11692,26 @@ steps: // Copyright 2024 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. - + import 'dart:async'; - + import 'package:flame/components.dart'; import 'package:flame_forge2d/flame_forge2d.dart'; import 'package:flame_kenney_xml/flame_kenney_xml.dart'; - + import 'background.dart'; - + class MyPhysicsGame extends Forge2DGame { MyPhysicsGame() - : super( - gravity: Vector2(0, 10), - camera: CameraComponent.withFixedResolution(width: 800, height: 600), - ); - + : super( + gravity: Vector2(0, 10), + camera: CameraComponent.withFixedResolution(width: 800, height: 600), + ); + late final XmlSpriteSheet aliens; late final XmlSpriteSheet elements; late final XmlSpriteSheet tiles; - + @override FutureOr onLoad() async { final backgroundImage = await images.load('colored_grass.png'); @@ -11734,13 +11729,13 @@ steps: xmlPath: 'spritesheet_tiles.xml', ), ]); - + aliens = spriteSheets[0]; elements = spriteSheets[1]; tiles = spriteSheets[2]; - + await world.add(Background(sprite: Sprite(backgroundImage))); - + return super.onLoad(); } } @@ -11749,19 +11744,15 @@ steps: patch: | --- b/forge2d_game/step_03/lib/main.dart +++ a/forge2d_game/step_03/lib/main.dart - @@ -5,10 +5,12 @@ + @@ -5,6 +5,8 @@ import 'package:flame/game.dart'; import 'package:flutter/material.dart'; +import 'components/game.dart'; + void main() { - runApp( - GameWidget.controlled( - - gameFactory: FlameGame.new, - + gameFactory: MyPhysicsGame.new, - ), - ); + - runApp(GameWidget.controlled(gameFactory: FlameGame.new)); + + runApp(GameWidget.controlled(gameFactory: MyPhysicsGame.new)); } - name: Build web app path: forge2d_game @@ -11791,26 +11782,27 @@ steps: class Ground extends BodyComponent { Ground(Vector2 position, Sprite sprite) - : super( - renderBody: false, - bodyDef: BodyDef() - ..position = position - ..type = BodyType.static, - fixtureDefs: [ - FixtureDef( - PolygonShape()..setAsBoxXY(groundSize / 2, groundSize / 2), - friction: 0.3, - ) - ], - children: [ - SpriteComponent( - anchor: Anchor.center, - sprite: sprite, - size: Vector2.all(groundSize), - position: Vector2(0, 0), - ), - ], - ); + : super( + renderBody: false, + bodyDef: + BodyDef() + ..position = position + ..type = BodyType.static, + fixtureDefs: [ + FixtureDef( + PolygonShape()..setAsBoxXY(groundSize / 2, groundSize / 2), + friction: 0.3, + ), + ], + children: [ + SpriteComponent( + anchor: Anchor.center, + sprite: sprite, + size: Vector2.all(groundSize), + position: Vector2(0, 0), + ), + ], + ); } - name: Patch lib/components/game.dart path: forge2d_game/lib/components/game.dart @@ -11825,7 +11817,7 @@ steps: class MyPhysicsGame extends Forge2DGame { MyPhysicsGame() - @@ -44,7 +45,20 @@ class MyPhysicsGame extends Forge2DGame { + @@ -44,7 +45,22 @@ class MyPhysicsGame extends Forge2DGame { tiles = spriteSheets[2]; await world.add(Background(sprite: Sprite(backgroundImage))); @@ -11836,9 +11828,11 @@ steps: + + Future addGround() { + return world.addAll([ - + for (var x = camera.visibleWorldRect.left; - + x < camera.visibleWorldRect.right + groundSize; - + x += groundSize) + + for ( + + var x = camera.visibleWorldRect.left; + + x < camera.visibleWorldRect.right + groundSize; + + x += groundSize + + ) + Ground( + Vector2(x, (camera.visibleWorldRect.height - groundSize) / 2), + tiles.getSprite('grass.png'), @@ -11898,11 +11892,12 @@ steps: final int y; final int width; final int height; - const Rect( - {required this.x, - required this.y, - required this.width, - required this.height}); + const Rect({ + required this.x, + required this.y, + required this.width, + required this.height, + }); Size get size => Size(width, height); @@ -11975,30 +11970,30 @@ steps: // Copyright 2024 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. - + import 'dart:math'; import 'dart:ui' as ui; - + import 'package:flame/components.dart'; import 'package:flame/extensions.dart'; import 'package:flame_forge2d/flame_forge2d.dart'; - + const brickScale = 0.5; - + enum BrickType { explosive(density: 1, friction: 0.5), glass(density: 0.5, friction: 0.2), metal(density: 1, friction: 0.4), stone(density: 2, friction: 1), wood(density: 0.25, friction: 0.6); - + final double density; final double friction; - + const BrickType({required this.density, required this.friction}); static BrickType get randomType => values[Random().nextInt(values.length)]; } - + enum BrickSize { size70x70(ui.Size(70, 70)), size140x70(ui.Size(140, 70)), @@ -12008,221 +12003,221 @@ steps: size220x140(ui.Size(220, 140)), size140x220(ui.Size(140, 220)), size70x220(ui.Size(70, 220)); - + final ui.Size size; - + const BrickSize(this.size); - + static BrickSize get randomSize => values[Random().nextInt(values.length)]; } - + enum BrickDamage { none, some, lots } - + Map brickFileNames(BrickType type, BrickSize size) { return switch ((type, size)) { (BrickType.explosive, BrickSize.size140x70) => { - BrickDamage.none: 'elementExplosive009.png', - BrickDamage.some: 'elementExplosive012.png', - BrickDamage.lots: 'elementExplosive050.png', - }, + BrickDamage.none: 'elementExplosive009.png', + BrickDamage.some: 'elementExplosive012.png', + BrickDamage.lots: 'elementExplosive050.png', + }, (BrickType.glass, BrickSize.size140x70) => { - BrickDamage.none: 'elementGlass010.png', - BrickDamage.some: 'elementGlass013.png', - BrickDamage.lots: 'elementGlass048.png', - }, + BrickDamage.none: 'elementGlass010.png', + BrickDamage.some: 'elementGlass013.png', + BrickDamage.lots: 'elementGlass048.png', + }, (BrickType.metal, BrickSize.size140x70) => { - BrickDamage.none: 'elementMetal009.png', - BrickDamage.some: 'elementMetal012.png', - BrickDamage.lots: 'elementMetal050.png', - }, + BrickDamage.none: 'elementMetal009.png', + BrickDamage.some: 'elementMetal012.png', + BrickDamage.lots: 'elementMetal050.png', + }, (BrickType.stone, BrickSize.size140x70) => { - BrickDamage.none: 'elementStone009.png', - BrickDamage.some: 'elementStone012.png', - BrickDamage.lots: 'elementStone047.png', - }, + BrickDamage.none: 'elementStone009.png', + BrickDamage.some: 'elementStone012.png', + BrickDamage.lots: 'elementStone047.png', + }, (BrickType.wood, BrickSize.size140x70) => { - BrickDamage.none: 'elementWood011.png', - BrickDamage.some: 'elementWood014.png', - BrickDamage.lots: 'elementWood054.png', - }, + BrickDamage.none: 'elementWood011.png', + BrickDamage.some: 'elementWood014.png', + BrickDamage.lots: 'elementWood054.png', + }, (BrickType.explosive, BrickSize.size70x70) => { - BrickDamage.none: 'elementExplosive011.png', - BrickDamage.some: 'elementExplosive014.png', - BrickDamage.lots: 'elementExplosive049.png', - }, + BrickDamage.none: 'elementExplosive011.png', + BrickDamage.some: 'elementExplosive014.png', + BrickDamage.lots: 'elementExplosive049.png', + }, (BrickType.glass, BrickSize.size70x70) => { - BrickDamage.none: 'elementGlass011.png', - BrickDamage.some: 'elementGlass012.png', - BrickDamage.lots: 'elementGlass046.png', - }, + BrickDamage.none: 'elementGlass011.png', + BrickDamage.some: 'elementGlass012.png', + BrickDamage.lots: 'elementGlass046.png', + }, (BrickType.metal, BrickSize.size70x70) => { - BrickDamage.none: 'elementMetal011.png', - BrickDamage.some: 'elementMetal014.png', - BrickDamage.lots: 'elementMetal049.png', - }, + BrickDamage.none: 'elementMetal011.png', + BrickDamage.some: 'elementMetal014.png', + BrickDamage.lots: 'elementMetal049.png', + }, (BrickType.stone, BrickSize.size70x70) => { - BrickDamage.none: 'elementStone011.png', - BrickDamage.some: 'elementStone014.png', - BrickDamage.lots: 'elementStone046.png', - }, + BrickDamage.none: 'elementStone011.png', + BrickDamage.some: 'elementStone014.png', + BrickDamage.lots: 'elementStone046.png', + }, (BrickType.wood, BrickSize.size70x70) => { - BrickDamage.none: 'elementWood010.png', - BrickDamage.some: 'elementWood013.png', - BrickDamage.lots: 'elementWood045.png', - }, + BrickDamage.none: 'elementWood010.png', + BrickDamage.some: 'elementWood013.png', + BrickDamage.lots: 'elementWood045.png', + }, (BrickType.explosive, BrickSize.size220x70) => { - BrickDamage.none: 'elementExplosive013.png', - BrickDamage.some: 'elementExplosive016.png', - BrickDamage.lots: 'elementExplosive051.png', - }, + BrickDamage.none: 'elementExplosive013.png', + BrickDamage.some: 'elementExplosive016.png', + BrickDamage.lots: 'elementExplosive051.png', + }, (BrickType.glass, BrickSize.size220x70) => { - BrickDamage.none: 'elementGlass014.png', - BrickDamage.some: 'elementGlass017.png', - BrickDamage.lots: 'elementGlass049.png', - }, + BrickDamage.none: 'elementGlass014.png', + BrickDamage.some: 'elementGlass017.png', + BrickDamage.lots: 'elementGlass049.png', + }, (BrickType.metal, BrickSize.size220x70) => { - BrickDamage.none: 'elementMetal013.png', - BrickDamage.some: 'elementMetal016.png', - BrickDamage.lots: 'elementMetal051.png', - }, + BrickDamage.none: 'elementMetal013.png', + BrickDamage.some: 'elementMetal016.png', + BrickDamage.lots: 'elementMetal051.png', + }, (BrickType.stone, BrickSize.size220x70) => { - BrickDamage.none: 'elementStone013.png', - BrickDamage.some: 'elementStone016.png', - BrickDamage.lots: 'elementStone048.png', - }, + BrickDamage.none: 'elementStone013.png', + BrickDamage.some: 'elementStone016.png', + BrickDamage.lots: 'elementStone048.png', + }, (BrickType.wood, BrickSize.size220x70) => { - BrickDamage.none: 'elementWood012.png', - BrickDamage.some: 'elementWood015.png', - BrickDamage.lots: 'elementWood047.png', - }, + BrickDamage.none: 'elementWood012.png', + BrickDamage.some: 'elementWood015.png', + BrickDamage.lots: 'elementWood047.png', + }, (BrickType.explosive, BrickSize.size70x140) => { - BrickDamage.none: 'elementExplosive017.png', - BrickDamage.some: 'elementExplosive022.png', - BrickDamage.lots: 'elementExplosive052.png', - }, + BrickDamage.none: 'elementExplosive017.png', + BrickDamage.some: 'elementExplosive022.png', + BrickDamage.lots: 'elementExplosive052.png', + }, (BrickType.glass, BrickSize.size70x140) => { - BrickDamage.none: 'elementGlass018.png', - BrickDamage.some: 'elementGlass023.png', - BrickDamage.lots: 'elementGlass050.png', - }, + BrickDamage.none: 'elementGlass018.png', + BrickDamage.some: 'elementGlass023.png', + BrickDamage.lots: 'elementGlass050.png', + }, (BrickType.metal, BrickSize.size70x140) => { - BrickDamage.none: 'elementMetal017.png', - BrickDamage.some: 'elementMetal022.png', - BrickDamage.lots: 'elementMetal052.png', - }, + BrickDamage.none: 'elementMetal017.png', + BrickDamage.some: 'elementMetal022.png', + BrickDamage.lots: 'elementMetal052.png', + }, (BrickType.stone, BrickSize.size70x140) => { - BrickDamage.none: 'elementStone017.png', - BrickDamage.some: 'elementStone022.png', - BrickDamage.lots: 'elementStone049.png', - }, + BrickDamage.none: 'elementStone017.png', + BrickDamage.some: 'elementStone022.png', + BrickDamage.lots: 'elementStone049.png', + }, (BrickType.wood, BrickSize.size70x140) => { - BrickDamage.none: 'elementWood016.png', - BrickDamage.some: 'elementWood021.png', - BrickDamage.lots: 'elementWood048.png', - }, + BrickDamage.none: 'elementWood016.png', + BrickDamage.some: 'elementWood021.png', + BrickDamage.lots: 'elementWood048.png', + }, (BrickType.explosive, BrickSize.size140x140) => { - BrickDamage.none: 'elementExplosive018.png', - BrickDamage.some: 'elementExplosive023.png', - BrickDamage.lots: 'elementExplosive053.png', - }, + BrickDamage.none: 'elementExplosive018.png', + BrickDamage.some: 'elementExplosive023.png', + BrickDamage.lots: 'elementExplosive053.png', + }, (BrickType.glass, BrickSize.size140x140) => { - BrickDamage.none: 'elementGlass019.png', - BrickDamage.some: 'elementGlass024.png', - BrickDamage.lots: 'elementGlass051.png', - }, + BrickDamage.none: 'elementGlass019.png', + BrickDamage.some: 'elementGlass024.png', + BrickDamage.lots: 'elementGlass051.png', + }, (BrickType.metal, BrickSize.size140x140) => { - BrickDamage.none: 'elementMetal018.png', - BrickDamage.some: 'elementMetal023.png', - BrickDamage.lots: 'elementMetal053.png', - }, + BrickDamage.none: 'elementMetal018.png', + BrickDamage.some: 'elementMetal023.png', + BrickDamage.lots: 'elementMetal053.png', + }, (BrickType.stone, BrickSize.size140x140) => { - BrickDamage.none: 'elementStone018.png', - BrickDamage.some: 'elementStone023.png', - BrickDamage.lots: 'elementStone050.png', - }, + BrickDamage.none: 'elementStone018.png', + BrickDamage.some: 'elementStone023.png', + BrickDamage.lots: 'elementStone050.png', + }, (BrickType.wood, BrickSize.size140x140) => { - BrickDamage.none: 'elementWood017.png', - BrickDamage.some: 'elementWood022.png', - BrickDamage.lots: 'elementWood049.png', - }, + BrickDamage.none: 'elementWood017.png', + BrickDamage.some: 'elementWood022.png', + BrickDamage.lots: 'elementWood049.png', + }, (BrickType.explosive, BrickSize.size220x140) => { - BrickDamage.none: 'elementExplosive019.png', - BrickDamage.some: 'elementExplosive024.png', - BrickDamage.lots: 'elementExplosive054.png', - }, + BrickDamage.none: 'elementExplosive019.png', + BrickDamage.some: 'elementExplosive024.png', + BrickDamage.lots: 'elementExplosive054.png', + }, (BrickType.glass, BrickSize.size220x140) => { - BrickDamage.none: 'elementGlass020.png', - BrickDamage.some: 'elementGlass025.png', - BrickDamage.lots: 'elementGlass052.png', - }, + BrickDamage.none: 'elementGlass020.png', + BrickDamage.some: 'elementGlass025.png', + BrickDamage.lots: 'elementGlass052.png', + }, (BrickType.metal, BrickSize.size220x140) => { - BrickDamage.none: 'elementMetal019.png', - BrickDamage.some: 'elementMetal024.png', - BrickDamage.lots: 'elementMetal054.png', - }, + BrickDamage.none: 'elementMetal019.png', + BrickDamage.some: 'elementMetal024.png', + BrickDamage.lots: 'elementMetal054.png', + }, (BrickType.stone, BrickSize.size220x140) => { - BrickDamage.none: 'elementStone019.png', - BrickDamage.some: 'elementStone024.png', - BrickDamage.lots: 'elementStone051.png', - }, + BrickDamage.none: 'elementStone019.png', + BrickDamage.some: 'elementStone024.png', + BrickDamage.lots: 'elementStone051.png', + }, (BrickType.wood, BrickSize.size220x140) => { - BrickDamage.none: 'elementWood018.png', - BrickDamage.some: 'elementWood023.png', - BrickDamage.lots: 'elementWood050.png', - }, + BrickDamage.none: 'elementWood018.png', + BrickDamage.some: 'elementWood023.png', + BrickDamage.lots: 'elementWood050.png', + }, (BrickType.explosive, BrickSize.size70x220) => { - BrickDamage.none: 'elementExplosive020.png', - BrickDamage.some: 'elementExplosive025.png', - BrickDamage.lots: 'elementExplosive055.png', - }, + BrickDamage.none: 'elementExplosive020.png', + BrickDamage.some: 'elementExplosive025.png', + BrickDamage.lots: 'elementExplosive055.png', + }, (BrickType.glass, BrickSize.size70x220) => { - BrickDamage.none: 'elementGlass021.png', - BrickDamage.some: 'elementGlass026.png', - BrickDamage.lots: 'elementGlass053.png', - }, + BrickDamage.none: 'elementGlass021.png', + BrickDamage.some: 'elementGlass026.png', + BrickDamage.lots: 'elementGlass053.png', + }, (BrickType.metal, BrickSize.size70x220) => { - BrickDamage.none: 'elementMetal020.png', - BrickDamage.some: 'elementMetal025.png', - BrickDamage.lots: 'elementMetal055.png', - }, + BrickDamage.none: 'elementMetal020.png', + BrickDamage.some: 'elementMetal025.png', + BrickDamage.lots: 'elementMetal055.png', + }, (BrickType.stone, BrickSize.size70x220) => { - BrickDamage.none: 'elementStone020.png', - BrickDamage.some: 'elementStone025.png', - BrickDamage.lots: 'elementStone052.png', - }, + BrickDamage.none: 'elementStone020.png', + BrickDamage.some: 'elementStone025.png', + BrickDamage.lots: 'elementStone052.png', + }, (BrickType.wood, BrickSize.size70x220) => { - BrickDamage.none: 'elementWood019.png', - BrickDamage.some: 'elementWood024.png', - BrickDamage.lots: 'elementWood051.png', - }, + BrickDamage.none: 'elementWood019.png', + BrickDamage.some: 'elementWood024.png', + BrickDamage.lots: 'elementWood051.png', + }, (BrickType.explosive, BrickSize.size140x220) => { - BrickDamage.none: 'elementExplosive021.png', - BrickDamage.some: 'elementExplosive026.png', - BrickDamage.lots: 'elementExplosive056.png', - }, + BrickDamage.none: 'elementExplosive021.png', + BrickDamage.some: 'elementExplosive026.png', + BrickDamage.lots: 'elementExplosive056.png', + }, (BrickType.glass, BrickSize.size140x220) => { - BrickDamage.none: 'elementGlass022.png', - BrickDamage.some: 'elementGlass027.png', - BrickDamage.lots: 'elementGlass054.png', - }, + BrickDamage.none: 'elementGlass022.png', + BrickDamage.some: 'elementGlass027.png', + BrickDamage.lots: 'elementGlass054.png', + }, (BrickType.metal, BrickSize.size140x220) => { - BrickDamage.none: 'elementMetal021.png', - BrickDamage.some: 'elementMetal026.png', - BrickDamage.lots: 'elementMetal056.png', - }, + BrickDamage.none: 'elementMetal021.png', + BrickDamage.some: 'elementMetal026.png', + BrickDamage.lots: 'elementMetal056.png', + }, (BrickType.stone, BrickSize.size140x220) => { - BrickDamage.none: 'elementStone021.png', - BrickDamage.some: 'elementStone026.png', - BrickDamage.lots: 'elementStone053.png', - }, + BrickDamage.none: 'elementStone021.png', + BrickDamage.some: 'elementStone026.png', + BrickDamage.lots: 'elementStone053.png', + }, (BrickType.wood, BrickSize.size140x220) => { - BrickDamage.none: 'elementWood020.png', - BrickDamage.some: 'elementWood025.png', - BrickDamage.lots: 'elementWood052.png', - }, + BrickDamage.none: 'elementWood020.png', + BrickDamage.some: 'elementWood025.png', + BrickDamage.lots: 'elementWood052.png', + }, }; } - + class Brick extends BodyComponent { Brick({ required this.type, @@ -12230,39 +12225,40 @@ steps: required BrickDamage damage, required Vector2 position, required Map sprites, - }) : _damage = damage, - _sprites = sprites, - super( - renderBody: false, - bodyDef: BodyDef() - ..position = position - ..type = BodyType.dynamic, - fixtureDefs: [ - FixtureDef( - PolygonShape() - ..setAsBoxXY( - size.size.width / 20 * brickScale, - size.size.height / 20 * brickScale, - ), - ) - ..restitution = 0.4 - ..density = type.density - ..friction = type.friction - ]); - + }) : _damage = damage, + _sprites = sprites, + super( + renderBody: false, + bodyDef: + BodyDef() + ..position = position + ..type = BodyType.dynamic, + fixtureDefs: [ + FixtureDef( + PolygonShape()..setAsBoxXY( + size.size.width / 20 * brickScale, + size.size.height / 20 * brickScale, + ), + ) + ..restitution = 0.4 + ..density = type.density + ..friction = type.friction, + ], + ); + late final SpriteComponent _spriteComponent; - + final BrickType type; final BrickSize size; final Map _sprites; - + BrickDamage _damage; BrickDamage get damage => _damage; set damage(BrickDamage value) { _damage = value; _spriteComponent.sprite = _sprites[value]; } - + @override Future onLoad() { _spriteComponent = SpriteComponent( @@ -12304,7 +12300,7 @@ steps: return super.onLoad(); } - @@ -61,4 +64,31 @@ class MyPhysicsGame extends Forge2DGame { + @@ -63,4 +66,30 @@ class MyPhysicsGame extends Forge2DGame { ), ]); } @@ -12321,21 +12317,23 @@ steps: + size: size, + damage: BrickDamage.some, + position: Vector2( - + camera.visibleWorldRect.right / 3 + - + (_random.nextDouble() * 5 - 2.5), - + 0), - + sprites: brickFileNames(type, size).map( - + (key, filename) => MapEntry( - + key, - + elements.getSprite(filename), - + ), + + camera.visibleWorldRect.right / 3 + + + (_random.nextDouble() * 5 - 2.5), + + 0, + ), + + sprites: brickFileNames( + + type, + + size, + + ).map((key, filename) => MapEntry(key, elements.getSprite(filename))), + ), + ); + await Future.delayed(const Duration(milliseconds: 500)); + } + } } + - name: Format lib/components/game.dart + path: forge2d_game + dart: format lib/components/game.dart - name: Build web app path: forge2d_game flutter: build web @@ -12382,21 +12380,22 @@ steps: class Player extends BodyComponent with DragCallbacks { Player(Vector2 position, Sprite sprite) - : _sprite = sprite, - super( - renderBody: false, - bodyDef: BodyDef() - ..position = position - ..type = BodyType.static - ..angularDamping = 0.1 - ..linearDamping = 0.1, - fixtureDefs: [ - FixtureDef(CircleShape()..radius = playerSize / 2) - ..restitution = 0.4 - ..density = 0.75 - ..friction = 0.5 - ], - ); + : _sprite = sprite, + super( + renderBody: false, + bodyDef: + BodyDef() + ..position = position + ..type = BodyType.static + ..angularDamping = 0.1 + ..linearDamping = 0.1, + fixtureDefs: [ + FixtureDef(CircleShape()..radius = playerSize / 2) + ..restitution = 0.4 + ..density = 0.75 + ..friction = 0.5, + ], + ); final Sprite _sprite; @@ -12414,7 +12413,7 @@ steps: sprite: _sprite, size: Vector2(playerSize, playerSize), position: Vector2(0, 0), - ) + ), ]); return super.onLoad(); } @@ -12462,9 +12461,7 @@ steps: ?.removeFromParent(); body.setType(BodyType.dynamic); body.applyLinearImpulse(_dragDelta * -50); - add(RemoveEffect( - delay: 5.0, - )); + add(RemoveEffect(delay: 5.0)); } } } @@ -12484,12 +12481,13 @@ steps: if (player.dragDelta != Vector2.zero()) { var center = size.center(Offset.zero); canvas.drawLine( - center, - center + (player.dragDelta * -1).toOffset(), - Paint() - ..color = Colors.orange.withAlpha(180) - ..strokeWidth = 0.4 - ..strokeCap = StrokeCap.round); + center, + center + (player.dragDelta * -1).toOffset(), + Paint() + ..color = Colors.orange.withAlpha(180) + ..strokeWidth = 0.4 + ..strokeCap = StrokeCap.round, + ); } } @@ -12517,17 +12515,17 @@ steps: return super.onLoad(); } - @@ -91,4 +93,19 @@ class MyPhysicsGame extends Forge2DGame { + @@ -92,4 +94,19 @@ class MyPhysicsGame extends Forge2DGame { await Future.delayed(const Duration(milliseconds: 500)); } } + + Future addPlayer() async => world.add( - + Player( - + Vector2(camera.visibleWorldRect.left * 2 / 3, 0), - + aliens.getSprite(PlayerColor.randomColor.fileName), - + ), - + ); + + Player( + + Vector2(camera.visibleWorldRect.left * 2 / 3, 0), + + aliens.getSprite(PlayerColor.randomColor.fileName), + + ), + + ); + + @override + void update(double dt) { @@ -12617,8 +12615,8 @@ steps: -class Ground extends BodyComponent { +class Ground extends BodyComponentWithUserData { Ground(Vector2 position, Sprite sprite) - : super( - renderBody: false, + : super( + renderBody: false, - name: Patch lib/components/player.dart path: forge2d_game/lib/components/player.dart patch: | @@ -12640,8 +12638,8 @@ steps: -class Player extends BodyComponent with DragCallbacks { +class Player extends BodyComponentWithUserData with DragCallbacks { Player(Vector2 position, Sprite sprite) - : _sprite = sprite, - super( + : _sprite = sprite, + super( - name: Add lib/components/enemy.dart path: forge2d_game/lib/components/enemy.dart replace-contents: | @@ -12683,32 +12681,32 @@ steps: class Enemy extends BodyComponentWithUserData with ContactCallbacks { Enemy(Vector2 position, Sprite sprite) - : super( - renderBody: false, - bodyDef: BodyDef() - ..position = position - ..type = BodyType.dynamic, - fixtureDefs: [ - FixtureDef( - PolygonShape()..setAsBoxXY(enemySize / 2, enemySize / 2), - friction: 0.3, - ) - ], - children: [ - SpriteComponent( - anchor: Anchor.center, - sprite: sprite, - size: Vector2.all(enemySize), - position: Vector2(0, 0), - ), - ], - ); + : super( + renderBody: false, + bodyDef: + BodyDef() + ..position = position + ..type = BodyType.dynamic, + fixtureDefs: [ + FixtureDef( + PolygonShape()..setAsBoxXY(enemySize / 2, enemySize / 2), + friction: 0.3, + ), + ], + children: [ + SpriteComponent( + anchor: Anchor.center, + sprite: sprite, + size: Vector2.all(enemySize), + position: Vector2(0, 0), + ), + ], + ); @override void beginContact(Object other, Contact contact) { var interceptVelocity = - (contact.bodyA.linearVelocity - contact.bodyB.linearVelocity) - .length + (contact.bodyA.linearVelocity - contact.bodyB.linearVelocity).length .abs(); if (interceptVelocity > 35) { removeFromParent(); @@ -12758,7 +12756,7 @@ steps: await addPlayer(); return super.onLoad(); - @@ -104,8 +106,49 @@ class MyPhysicsGame extends Forge2DGame { + @@ -105,8 +107,50 @@ class MyPhysicsGame extends Forge2DGame { @override void update(double dt) { super.update(dt); @@ -12798,9 +12796,10 @@ steps: + await world.add( + Enemy( + Vector2( - + camera.visibleWorldRect.right / 3 + - + (_random.nextDouble() * 7 - 3.5), - + (_random.nextDouble() * 3)), + + camera.visibleWorldRect.right / 3 + + + (_random.nextDouble() * 7 - 3.5), + + (_random.nextDouble() * 3), + + ), + aliens.getSprite(EnemyColor.randomColor.fileName), + ), + ); diff --git a/forge2d_game/step_02/android/app/build.gradle b/forge2d_game/step_02/android/app/build.gradle.kts similarity index 84% rename from forge2d_game/step_02/android/app/build.gradle rename to forge2d_game/step_02/android/app/build.gradle.kts index b365ef7190..7fae3514a8 100644 --- a/forge2d_game/step_02/android/app/build.gradle +++ b/forge2d_game/step_02/android/app/build.gradle.kts @@ -1,8 +1,8 @@ plugins { - id "com.android.application" - id "kotlin-android" + id("com.android.application") + id("kotlin-android") // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. - id "dev.flutter.flutter-gradle-plugin" + id("dev.flutter.flutter-gradle-plugin") } android { @@ -16,7 +16,7 @@ android { } kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8 + jvmTarget = JavaVersion.VERSION_1_8.toString() } defaultConfig { @@ -34,7 +34,7 @@ android { release { // TODO: Add your own signing config for the release build. // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig = signingConfigs.debug + signingConfig = signingConfigs.getByName("debug") } } } diff --git a/forge2d_game/step_02/android/build.gradle b/forge2d_game/step_02/android/build.gradle deleted file mode 100644 index d2ffbffa4c..0000000000 --- a/forge2d_game/step_02/android/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = "../build" -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(":app") -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/forge2d_game/step_02/android/build.gradle.kts b/forge2d_game/step_02/android/build.gradle.kts new file mode 100644 index 0000000000..89176ef44e --- /dev/null +++ b/forge2d_game/step_02/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/forge2d_game/step_02/android/gradle.properties b/forge2d_game/step_02/android/gradle.properties index 2597170821..f018a61817 100644 --- a/forge2d_game/step_02/android/gradle.properties +++ b/forge2d_game/step_02/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/forge2d_game/step_02/android/gradle/wrapper/gradle-wrapper.properties b/forge2d_game/step_02/android/gradle/wrapper/gradle-wrapper.properties index 7bb2df6ba6..afa1e8eb0a 100644 --- a/forge2d_game/step_02/android/gradle/wrapper/gradle-wrapper.properties +++ b/forge2d_game/step_02/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip diff --git a/forge2d_game/step_02/android/settings.gradle b/forge2d_game/step_02/android/settings.gradle deleted file mode 100644 index b9e43bd376..0000000000 --- a/forge2d_game/step_02/android/settings.gradle +++ /dev/null @@ -1,25 +0,0 @@ -pluginManagement { - def flutterSdkPath = { - def properties = new Properties() - file("local.properties").withInputStream { properties.load(it) } - def flutterSdkPath = properties.getProperty("flutter.sdk") - assert flutterSdkPath != null, "flutter.sdk not set in local.properties" - return flutterSdkPath - }() - - includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") - - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} - -plugins { - id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.1.0" apply false - id "org.jetbrains.kotlin.android" version "1.8.22" apply false -} - -include ":app" diff --git a/forge2d_game/step_02/android/settings.gradle.kts b/forge2d_game/step_02/android/settings.gradle.kts new file mode 100644 index 0000000000..a439442c20 --- /dev/null +++ b/forge2d_game/step_02/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.0" apply false + id("org.jetbrains.kotlin.android") version "1.8.22" apply false +} + +include(":app") diff --git a/forge2d_game/step_04/android/app/build.gradle b/forge2d_game/step_03/android/app/build.gradle.kts similarity index 84% rename from forge2d_game/step_04/android/app/build.gradle rename to forge2d_game/step_03/android/app/build.gradle.kts index b365ef7190..7fae3514a8 100644 --- a/forge2d_game/step_04/android/app/build.gradle +++ b/forge2d_game/step_03/android/app/build.gradle.kts @@ -1,8 +1,8 @@ plugins { - id "com.android.application" - id "kotlin-android" + id("com.android.application") + id("kotlin-android") // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. - id "dev.flutter.flutter-gradle-plugin" + id("dev.flutter.flutter-gradle-plugin") } android { @@ -16,7 +16,7 @@ android { } kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8 + jvmTarget = JavaVersion.VERSION_1_8.toString() } defaultConfig { @@ -34,7 +34,7 @@ android { release { // TODO: Add your own signing config for the release build. // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig = signingConfigs.debug + signingConfig = signingConfigs.getByName("debug") } } } diff --git a/forge2d_game/step_03/android/build.gradle b/forge2d_game/step_03/android/build.gradle deleted file mode 100644 index d2ffbffa4c..0000000000 --- a/forge2d_game/step_03/android/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = "../build" -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(":app") -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/forge2d_game/step_03/android/build.gradle.kts b/forge2d_game/step_03/android/build.gradle.kts new file mode 100644 index 0000000000..89176ef44e --- /dev/null +++ b/forge2d_game/step_03/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/forge2d_game/step_03/android/gradle.properties b/forge2d_game/step_03/android/gradle.properties index 2597170821..f018a61817 100644 --- a/forge2d_game/step_03/android/gradle.properties +++ b/forge2d_game/step_03/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/forge2d_game/step_03/android/gradle/wrapper/gradle-wrapper.properties b/forge2d_game/step_03/android/gradle/wrapper/gradle-wrapper.properties index 7bb2df6ba6..afa1e8eb0a 100644 --- a/forge2d_game/step_03/android/gradle/wrapper/gradle-wrapper.properties +++ b/forge2d_game/step_03/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip diff --git a/forge2d_game/step_03/android/settings.gradle b/forge2d_game/step_03/android/settings.gradle deleted file mode 100644 index b9e43bd376..0000000000 --- a/forge2d_game/step_03/android/settings.gradle +++ /dev/null @@ -1,25 +0,0 @@ -pluginManagement { - def flutterSdkPath = { - def properties = new Properties() - file("local.properties").withInputStream { properties.load(it) } - def flutterSdkPath = properties.getProperty("flutter.sdk") - assert flutterSdkPath != null, "flutter.sdk not set in local.properties" - return flutterSdkPath - }() - - includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") - - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} - -plugins { - id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.1.0" apply false - id "org.jetbrains.kotlin.android" version "1.8.22" apply false -} - -include ":app" diff --git a/forge2d_game/step_03/android/settings.gradle.kts b/forge2d_game/step_03/android/settings.gradle.kts new file mode 100644 index 0000000000..a439442c20 --- /dev/null +++ b/forge2d_game/step_03/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.0" apply false + id("org.jetbrains.kotlin.android") version "1.8.22" apply false +} + +include(":app") diff --git a/forge2d_game/step_05/android/app/build.gradle b/forge2d_game/step_04/android/app/build.gradle.kts similarity index 84% rename from forge2d_game/step_05/android/app/build.gradle rename to forge2d_game/step_04/android/app/build.gradle.kts index b365ef7190..7fae3514a8 100644 --- a/forge2d_game/step_05/android/app/build.gradle +++ b/forge2d_game/step_04/android/app/build.gradle.kts @@ -1,8 +1,8 @@ plugins { - id "com.android.application" - id "kotlin-android" + id("com.android.application") + id("kotlin-android") // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. - id "dev.flutter.flutter-gradle-plugin" + id("dev.flutter.flutter-gradle-plugin") } android { @@ -16,7 +16,7 @@ android { } kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8 + jvmTarget = JavaVersion.VERSION_1_8.toString() } defaultConfig { @@ -34,7 +34,7 @@ android { release { // TODO: Add your own signing config for the release build. // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig = signingConfigs.debug + signingConfig = signingConfigs.getByName("debug") } } } diff --git a/forge2d_game/step_04/android/build.gradle b/forge2d_game/step_04/android/build.gradle deleted file mode 100644 index d2ffbffa4c..0000000000 --- a/forge2d_game/step_04/android/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = "../build" -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(":app") -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/forge2d_game/step_04/android/build.gradle.kts b/forge2d_game/step_04/android/build.gradle.kts new file mode 100644 index 0000000000..89176ef44e --- /dev/null +++ b/forge2d_game/step_04/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/forge2d_game/step_04/android/gradle.properties b/forge2d_game/step_04/android/gradle.properties index 2597170821..f018a61817 100644 --- a/forge2d_game/step_04/android/gradle.properties +++ b/forge2d_game/step_04/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/forge2d_game/step_04/android/gradle/wrapper/gradle-wrapper.properties b/forge2d_game/step_04/android/gradle/wrapper/gradle-wrapper.properties index 7bb2df6ba6..afa1e8eb0a 100644 --- a/forge2d_game/step_04/android/gradle/wrapper/gradle-wrapper.properties +++ b/forge2d_game/step_04/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip diff --git a/forge2d_game/step_04/android/settings.gradle b/forge2d_game/step_04/android/settings.gradle deleted file mode 100644 index b9e43bd376..0000000000 --- a/forge2d_game/step_04/android/settings.gradle +++ /dev/null @@ -1,25 +0,0 @@ -pluginManagement { - def flutterSdkPath = { - def properties = new Properties() - file("local.properties").withInputStream { properties.load(it) } - def flutterSdkPath = properties.getProperty("flutter.sdk") - assert flutterSdkPath != null, "flutter.sdk not set in local.properties" - return flutterSdkPath - }() - - includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") - - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} - -plugins { - id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.1.0" apply false - id "org.jetbrains.kotlin.android" version "1.8.22" apply false -} - -include ":app" diff --git a/forge2d_game/step_04/android/settings.gradle.kts b/forge2d_game/step_04/android/settings.gradle.kts new file mode 100644 index 0000000000..a439442c20 --- /dev/null +++ b/forge2d_game/step_04/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.0" apply false + id("org.jetbrains.kotlin.android") version "1.8.22" apply false +} + +include(":app") diff --git a/forge2d_game/step_03/android/app/build.gradle b/forge2d_game/step_05/android/app/build.gradle.kts similarity index 84% rename from forge2d_game/step_03/android/app/build.gradle rename to forge2d_game/step_05/android/app/build.gradle.kts index b365ef7190..7fae3514a8 100644 --- a/forge2d_game/step_03/android/app/build.gradle +++ b/forge2d_game/step_05/android/app/build.gradle.kts @@ -1,8 +1,8 @@ plugins { - id "com.android.application" - id "kotlin-android" + id("com.android.application") + id("kotlin-android") // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. - id "dev.flutter.flutter-gradle-plugin" + id("dev.flutter.flutter-gradle-plugin") } android { @@ -16,7 +16,7 @@ android { } kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8 + jvmTarget = JavaVersion.VERSION_1_8.toString() } defaultConfig { @@ -34,7 +34,7 @@ android { release { // TODO: Add your own signing config for the release build. // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig = signingConfigs.debug + signingConfig = signingConfigs.getByName("debug") } } } diff --git a/forge2d_game/step_05/android/build.gradle b/forge2d_game/step_05/android/build.gradle deleted file mode 100644 index d2ffbffa4c..0000000000 --- a/forge2d_game/step_05/android/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = "../build" -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(":app") -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/forge2d_game/step_05/android/build.gradle.kts b/forge2d_game/step_05/android/build.gradle.kts new file mode 100644 index 0000000000..89176ef44e --- /dev/null +++ b/forge2d_game/step_05/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/forge2d_game/step_05/android/gradle.properties b/forge2d_game/step_05/android/gradle.properties index 2597170821..f018a61817 100644 --- a/forge2d_game/step_05/android/gradle.properties +++ b/forge2d_game/step_05/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/forge2d_game/step_05/android/gradle/wrapper/gradle-wrapper.properties b/forge2d_game/step_05/android/gradle/wrapper/gradle-wrapper.properties index 7bb2df6ba6..afa1e8eb0a 100644 --- a/forge2d_game/step_05/android/gradle/wrapper/gradle-wrapper.properties +++ b/forge2d_game/step_05/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip diff --git a/forge2d_game/step_05/android/settings.gradle b/forge2d_game/step_05/android/settings.gradle deleted file mode 100644 index b9e43bd376..0000000000 --- a/forge2d_game/step_05/android/settings.gradle +++ /dev/null @@ -1,25 +0,0 @@ -pluginManagement { - def flutterSdkPath = { - def properties = new Properties() - file("local.properties").withInputStream { properties.load(it) } - def flutterSdkPath = properties.getProperty("flutter.sdk") - assert flutterSdkPath != null, "flutter.sdk not set in local.properties" - return flutterSdkPath - }() - - includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") - - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} - -plugins { - id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.1.0" apply false - id "org.jetbrains.kotlin.android" version "1.8.22" apply false -} - -include ":app" diff --git a/forge2d_game/step_05/android/settings.gradle.kts b/forge2d_game/step_05/android/settings.gradle.kts new file mode 100644 index 0000000000..a439442c20 --- /dev/null +++ b/forge2d_game/step_05/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.0" apply false + id("org.jetbrains.kotlin.android") version "1.8.22" apply false +} + +include(":app") diff --git a/forge2d_game/step_06/android/app/build.gradle b/forge2d_game/step_06/android/app/build.gradle deleted file mode 100644 index b365ef7190..0000000000 --- a/forge2d_game/step_06/android/app/build.gradle +++ /dev/null @@ -1,44 +0,0 @@ -plugins { - id "com.android.application" - id "kotlin-android" - // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. - id "dev.flutter.flutter-gradle-plugin" -} - -android { - namespace = "com.example.forge2d_game" - compileSdk = flutter.compileSdkVersion - ndkVersion = flutter.ndkVersion - - compileOptions { - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 - } - - kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8 - } - - defaultConfig { - // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). - applicationId = "com.example.forge2d_game" - // You can update the following values to match your application needs. - // For more information, see: https://flutter.dev/to/review-gradle-config. - minSdk = flutter.minSdkVersion - targetSdk = flutter.targetSdkVersion - versionCode = flutter.versionCode - versionName = flutter.versionName - } - - buildTypes { - release { - // TODO: Add your own signing config for the release build. - // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig = signingConfigs.debug - } - } -} - -flutter { - source = "../.." -} diff --git a/forge2d_game/step_06/android/app/build.gradle.kts b/forge2d_game/step_06/android/app/build.gradle.kts new file mode 100644 index 0000000000..7fae3514a8 --- /dev/null +++ b/forge2d_game/step_06/android/app/build.gradle.kts @@ -0,0 +1,44 @@ +plugins { + id("com.android.application") + id("kotlin-android") + // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. + id("dev.flutter.flutter-gradle-plugin") +} + +android { + namespace = "com.example.forge2d_game" + compileSdk = flutter.compileSdkVersion + ndkVersion = flutter.ndkVersion + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 + } + + kotlinOptions { + jvmTarget = JavaVersion.VERSION_1_8.toString() + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId = "com.example.forge2d_game" + // You can update the following values to match your application needs. + // For more information, see: https://flutter.dev/to/review-gradle-config. + minSdk = flutter.minSdkVersion + targetSdk = flutter.targetSdkVersion + versionCode = flutter.versionCode + versionName = flutter.versionName + } + + buildTypes { + release { + // TODO: Add your own signing config for the release build. + // Signing with the debug keys for now, so `flutter run --release` works. + signingConfig = signingConfigs.getByName("debug") + } + } +} + +flutter { + source = "../.." +} diff --git a/forge2d_game/step_06/android/build.gradle b/forge2d_game/step_06/android/build.gradle deleted file mode 100644 index d2ffbffa4c..0000000000 --- a/forge2d_game/step_06/android/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = "../build" -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(":app") -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/forge2d_game/step_06/android/build.gradle.kts b/forge2d_game/step_06/android/build.gradle.kts new file mode 100644 index 0000000000..89176ef44e --- /dev/null +++ b/forge2d_game/step_06/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/forge2d_game/step_06/android/gradle.properties b/forge2d_game/step_06/android/gradle.properties index 2597170821..f018a61817 100644 --- a/forge2d_game/step_06/android/gradle.properties +++ b/forge2d_game/step_06/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/forge2d_game/step_06/android/gradle/wrapper/gradle-wrapper.properties b/forge2d_game/step_06/android/gradle/wrapper/gradle-wrapper.properties index 7bb2df6ba6..afa1e8eb0a 100644 --- a/forge2d_game/step_06/android/gradle/wrapper/gradle-wrapper.properties +++ b/forge2d_game/step_06/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip diff --git a/forge2d_game/step_06/android/settings.gradle b/forge2d_game/step_06/android/settings.gradle deleted file mode 100644 index b9e43bd376..0000000000 --- a/forge2d_game/step_06/android/settings.gradle +++ /dev/null @@ -1,25 +0,0 @@ -pluginManagement { - def flutterSdkPath = { - def properties = new Properties() - file("local.properties").withInputStream { properties.load(it) } - def flutterSdkPath = properties.getProperty("flutter.sdk") - assert flutterSdkPath != null, "flutter.sdk not set in local.properties" - return flutterSdkPath - }() - - includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") - - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} - -plugins { - id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.1.0" apply false - id "org.jetbrains.kotlin.android" version "1.8.22" apply false -} - -include ":app" diff --git a/forge2d_game/step_06/android/settings.gradle.kts b/forge2d_game/step_06/android/settings.gradle.kts new file mode 100644 index 0000000000..a439442c20 --- /dev/null +++ b/forge2d_game/step_06/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.0" apply false + id("org.jetbrains.kotlin.android") version "1.8.22" apply false +} + +include(":app") diff --git a/forge2d_game/step_07/android/app/build.gradle b/forge2d_game/step_07/android/app/build.gradle deleted file mode 100644 index b365ef7190..0000000000 --- a/forge2d_game/step_07/android/app/build.gradle +++ /dev/null @@ -1,44 +0,0 @@ -plugins { - id "com.android.application" - id "kotlin-android" - // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. - id "dev.flutter.flutter-gradle-plugin" -} - -android { - namespace = "com.example.forge2d_game" - compileSdk = flutter.compileSdkVersion - ndkVersion = flutter.ndkVersion - - compileOptions { - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 - } - - kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8 - } - - defaultConfig { - // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). - applicationId = "com.example.forge2d_game" - // You can update the following values to match your application needs. - // For more information, see: https://flutter.dev/to/review-gradle-config. - minSdk = flutter.minSdkVersion - targetSdk = flutter.targetSdkVersion - versionCode = flutter.versionCode - versionName = flutter.versionName - } - - buildTypes { - release { - // TODO: Add your own signing config for the release build. - // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig = signingConfigs.debug - } - } -} - -flutter { - source = "../.." -} diff --git a/forge2d_game/step_07/android/app/build.gradle.kts b/forge2d_game/step_07/android/app/build.gradle.kts new file mode 100644 index 0000000000..7fae3514a8 --- /dev/null +++ b/forge2d_game/step_07/android/app/build.gradle.kts @@ -0,0 +1,44 @@ +plugins { + id("com.android.application") + id("kotlin-android") + // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. + id("dev.flutter.flutter-gradle-plugin") +} + +android { + namespace = "com.example.forge2d_game" + compileSdk = flutter.compileSdkVersion + ndkVersion = flutter.ndkVersion + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 + } + + kotlinOptions { + jvmTarget = JavaVersion.VERSION_1_8.toString() + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId = "com.example.forge2d_game" + // You can update the following values to match your application needs. + // For more information, see: https://flutter.dev/to/review-gradle-config. + minSdk = flutter.minSdkVersion + targetSdk = flutter.targetSdkVersion + versionCode = flutter.versionCode + versionName = flutter.versionName + } + + buildTypes { + release { + // TODO: Add your own signing config for the release build. + // Signing with the debug keys for now, so `flutter run --release` works. + signingConfig = signingConfigs.getByName("debug") + } + } +} + +flutter { + source = "../.." +} diff --git a/forge2d_game/step_07/android/build.gradle b/forge2d_game/step_07/android/build.gradle deleted file mode 100644 index d2ffbffa4c..0000000000 --- a/forge2d_game/step_07/android/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = "../build" -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(":app") -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/forge2d_game/step_07/android/build.gradle.kts b/forge2d_game/step_07/android/build.gradle.kts new file mode 100644 index 0000000000..89176ef44e --- /dev/null +++ b/forge2d_game/step_07/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/forge2d_game/step_07/android/gradle.properties b/forge2d_game/step_07/android/gradle.properties index 2597170821..f018a61817 100644 --- a/forge2d_game/step_07/android/gradle.properties +++ b/forge2d_game/step_07/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/forge2d_game/step_07/android/gradle/wrapper/gradle-wrapper.properties b/forge2d_game/step_07/android/gradle/wrapper/gradle-wrapper.properties index 7bb2df6ba6..afa1e8eb0a 100644 --- a/forge2d_game/step_07/android/gradle/wrapper/gradle-wrapper.properties +++ b/forge2d_game/step_07/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip diff --git a/forge2d_game/step_07/android/settings.gradle b/forge2d_game/step_07/android/settings.gradle deleted file mode 100644 index b9e43bd376..0000000000 --- a/forge2d_game/step_07/android/settings.gradle +++ /dev/null @@ -1,25 +0,0 @@ -pluginManagement { - def flutterSdkPath = { - def properties = new Properties() - file("local.properties").withInputStream { properties.load(it) } - def flutterSdkPath = properties.getProperty("flutter.sdk") - assert flutterSdkPath != null, "flutter.sdk not set in local.properties" - return flutterSdkPath - }() - - includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") - - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} - -plugins { - id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.1.0" apply false - id "org.jetbrains.kotlin.android" version "1.8.22" apply false -} - -include ":app" diff --git a/forge2d_game/step_07/android/settings.gradle.kts b/forge2d_game/step_07/android/settings.gradle.kts new file mode 100644 index 0000000000..a439442c20 --- /dev/null +++ b/forge2d_game/step_07/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.0" apply false + id("org.jetbrains.kotlin.android") version "1.8.22" apply false +} + +include(":app") From 6de3e645bed05bf5baef9b22ef0af7b9a8d10efc Mon Sep 17 00:00:00 2001 From: Brett Morgan Date: Mon, 18 Nov 2024 08:09:46 +1100 Subject: [PATCH 078/108] Update `generate_crossword` --- generate_crossword/codelab_rebuild.yaml | 2029 ++++++++++------- .../app/{build.gradle => build.gradle.kts} | 10 +- .../step_02/android/build.gradle | 18 - .../step_02/android/build.gradle.kts | 21 + .../step_02/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../step_02/android/settings.gradle | 25 - .../step_02/android/settings.gradle.kts | 25 + generate_crossword/step_02/pubspec.yaml | 2 +- .../android/app/build.gradle.kts} | 10 +- .../step_03/android/build.gradle | 18 - .../step_03/android/build.gradle.kts | 21 + .../step_03/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../step_03/android/settings.gradle | 25 - .../step_03/android/settings.gradle.kts | 25 + generate_crossword/step_03/pubspec.yaml | 2 +- .../android/app/build.gradle.kts} | 10 +- .../step_04/android/build.gradle | 18 - .../step_04/android/build.gradle.kts | 21 + .../step_04/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../step_04/android/settings.gradle | 25 - .../step_04/android/settings.gradle.kts | 25 + generate_crossword/step_04/pubspec.yaml | 2 +- .../android/app/build.gradle.kts} | 10 +- .../step_05_a/android/build.gradle | 18 - .../step_05_a/android/build.gradle.kts | 21 + .../step_05_a/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../step_05_a/android/settings.gradle | 25 - .../step_05_a/android/settings.gradle.kts | 25 + generate_crossword/step_05_a/pubspec.yaml | 2 +- .../step_05_b/android/app/build.gradle | 44 - .../step_05_b/android/app/build.gradle.kts | 44 + .../step_05_b/android/build.gradle | 18 - .../step_05_b/android/build.gradle.kts | 21 + .../step_05_b/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../step_05_b/android/settings.gradle | 25 - .../step_05_b/android/settings.gradle.kts | 25 + generate_crossword/step_05_b/pubspec.yaml | 2 +- .../step_05_c/android/app/build.gradle | 44 - .../step_05_c/android/app/build.gradle.kts | 44 + .../step_05_c/android/build.gradle | 18 - .../step_05_c/android/build.gradle.kts | 21 + .../step_05_c/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../step_05_c/android/settings.gradle | 25 - .../step_05_c/android/settings.gradle.kts | 25 + generate_crossword/step_05_c/pubspec.yaml | 2 +- .../step_06/android/app/build.gradle | 44 - .../step_06/android/app/build.gradle.kts | 44 + .../step_06/android/build.gradle | 18 - .../step_06/android/build.gradle.kts | 21 + .../step_06/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../step_06/android/settings.gradle | 25 - .../step_06/android/settings.gradle.kts | 25 + generate_crossword/step_06/pubspec.yaml | 2 +- .../step_07/android/app/build.gradle | 44 - .../step_07/android/app/build.gradle.kts | 44 + .../step_07/android/build.gradle | 18 - .../step_07/android/build.gradle.kts | 21 + .../step_07/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../step_07/android/settings.gradle | 25 - .../step_07/android/settings.gradle.kts | 25 + .../step_07/lib/providers.g.dart | 40 +- generate_crossword/step_07/pubspec.yaml | 2 +- .../step_08/android/app/build.gradle | 44 - .../step_08/android/app/build.gradle.kts | 44 + .../step_08/android/build.gradle | 18 - .../step_08/android/build.gradle.kts | 21 + .../step_08/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../step_08/android/settings.gradle | 25 - .../step_08/android/settings.gradle.kts | 25 + .../step_08/lib/providers.g.dart | 56 +- generate_crossword/step_08/pubspec.yaml | 2 +- .../step_09/android/app/build.gradle | 44 - .../step_09/android/app/build.gradle.kts | 44 + .../step_09/android/build.gradle | 18 - .../step_09/android/build.gradle.kts | 21 + .../step_09/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../step_09/android/settings.gradle | 25 - .../step_09/android/settings.gradle.kts | 25 + .../step_09/lib/providers.g.dart | 14 +- generate_crossword/step_09/pubspec.yaml | 2 +- 90 files changed, 1967 insertions(+), 1690 deletions(-) rename generate_crossword/step_02/android/app/{build.gradle => build.gradle.kts} (84%) delete mode 100644 generate_crossword/step_02/android/build.gradle create mode 100644 generate_crossword/step_02/android/build.gradle.kts delete mode 100644 generate_crossword/step_02/android/settings.gradle create mode 100644 generate_crossword/step_02/android/settings.gradle.kts rename generate_crossword/{step_04/android/app/build.gradle => step_03/android/app/build.gradle.kts} (84%) delete mode 100644 generate_crossword/step_03/android/build.gradle create mode 100644 generate_crossword/step_03/android/build.gradle.kts delete mode 100644 generate_crossword/step_03/android/settings.gradle create mode 100644 generate_crossword/step_03/android/settings.gradle.kts rename generate_crossword/{step_05_a/android/app/build.gradle => step_04/android/app/build.gradle.kts} (84%) delete mode 100644 generate_crossword/step_04/android/build.gradle create mode 100644 generate_crossword/step_04/android/build.gradle.kts delete mode 100644 generate_crossword/step_04/android/settings.gradle create mode 100644 generate_crossword/step_04/android/settings.gradle.kts rename generate_crossword/{step_03/android/app/build.gradle => step_05_a/android/app/build.gradle.kts} (84%) delete mode 100644 generate_crossword/step_05_a/android/build.gradle create mode 100644 generate_crossword/step_05_a/android/build.gradle.kts delete mode 100644 generate_crossword/step_05_a/android/settings.gradle create mode 100644 generate_crossword/step_05_a/android/settings.gradle.kts delete mode 100644 generate_crossword/step_05_b/android/app/build.gradle create mode 100644 generate_crossword/step_05_b/android/app/build.gradle.kts delete mode 100644 generate_crossword/step_05_b/android/build.gradle create mode 100644 generate_crossword/step_05_b/android/build.gradle.kts delete mode 100644 generate_crossword/step_05_b/android/settings.gradle create mode 100644 generate_crossword/step_05_b/android/settings.gradle.kts delete mode 100644 generate_crossword/step_05_c/android/app/build.gradle create mode 100644 generate_crossword/step_05_c/android/app/build.gradle.kts delete mode 100644 generate_crossword/step_05_c/android/build.gradle create mode 100644 generate_crossword/step_05_c/android/build.gradle.kts delete mode 100644 generate_crossword/step_05_c/android/settings.gradle create mode 100644 generate_crossword/step_05_c/android/settings.gradle.kts delete mode 100644 generate_crossword/step_06/android/app/build.gradle create mode 100644 generate_crossword/step_06/android/app/build.gradle.kts delete mode 100644 generate_crossword/step_06/android/build.gradle create mode 100644 generate_crossword/step_06/android/build.gradle.kts delete mode 100644 generate_crossword/step_06/android/settings.gradle create mode 100644 generate_crossword/step_06/android/settings.gradle.kts delete mode 100644 generate_crossword/step_07/android/app/build.gradle create mode 100644 generate_crossword/step_07/android/app/build.gradle.kts delete mode 100644 generate_crossword/step_07/android/build.gradle create mode 100644 generate_crossword/step_07/android/build.gradle.kts delete mode 100644 generate_crossword/step_07/android/settings.gradle create mode 100644 generate_crossword/step_07/android/settings.gradle.kts delete mode 100644 generate_crossword/step_08/android/app/build.gradle create mode 100644 generate_crossword/step_08/android/app/build.gradle.kts delete mode 100644 generate_crossword/step_08/android/build.gradle create mode 100644 generate_crossword/step_08/android/build.gradle.kts delete mode 100644 generate_crossword/step_08/android/settings.gradle create mode 100644 generate_crossword/step_08/android/settings.gradle.kts delete mode 100644 generate_crossword/step_09/android/app/build.gradle create mode 100644 generate_crossword/step_09/android/app/build.gradle.kts delete mode 100644 generate_crossword/step_09/android/build.gradle create mode 100644 generate_crossword/step_09/android/build.gradle.kts delete mode 100644 generate_crossword/step_09/android/settings.gradle create mode 100644 generate_crossword/step_09/android/settings.gradle.kts diff --git a/generate_crossword/codelab_rebuild.yaml b/generate_crossword/codelab_rebuild.yaml index 8069e642a9..164ed1d2d7 100644 --- a/generate_crossword/codelab_rebuild.yaml +++ b/generate_crossword/codelab_rebuild.yaml @@ -54,10 +54,10 @@ steps: // Copyright 2024 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. - + import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; - + void main() { runApp( ProviderScope( @@ -71,10 +71,7 @@ steps: ), home: Scaffold( body: Center( - child: Text( - 'Hello, World!', - style: TextStyle(fontSize: 24), - ), + child: Text('Hello, World!', style: TextStyle(fontSize: 24)), ), ), ), @@ -105,7 +102,7 @@ steps: copydir: from: generate_crossword to: step_02 - - name: Flutter clean + - name: Flutter clean step_02 path: step_02 flutter: clean - name: step_03 @@ -131,15 +128,15 @@ steps: // Copyright 2024 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. - + import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; - + import '../providers.dart'; - + class CrosswordGeneratorApp extends StatelessWidget { const CrosswordGeneratorApp({super.key}); - + @override Widget build(BuildContext context) { return _EagerInitialization( @@ -157,20 +154,15 @@ steps: builder: (context, ref, _) { final wordListAsync = ref.watch(wordListProvider); return wordListAsync.when( - data: (wordList) => ListView.builder( - itemCount: wordList.length, - itemBuilder: (context, index) { - return ListTile( - title: Text(wordList.elementAt(index)), - ); - }, - ), - error: (error, stackTrace) => Center( - child: Text('$error'), - ), - loading: () => Center( - child: CircularProgressIndicator(), - ), + data: + (wordList) => ListView.builder( + itemCount: wordList.length, + itemBuilder: (context, index) { + return ListTile(title: Text(wordList.elementAt(index))); + }, + ), + error: (error, stackTrace) => Center(child: Text('$error')), + loading: () => Center(child: CircularProgressIndicator()), ); }, ), @@ -179,11 +171,11 @@ steps: ); } } - + class _EagerInitialization extends ConsumerWidget { const _EagerInitialization({required this.child}); final Widget child; - + @override Widget build(BuildContext context, WidgetRef ref) { ref.watch(wordListProvider); @@ -216,10 +208,16 @@ steps: final re = RegExp(r'^[a-z]+$'); final words = await rootBundle.loadString('assets/words.txt'); - return const LineSplitter().convert(words).toBuiltSet().rebuild((b) => b - ..map((word) => word.toLowerCase().trim()) - ..where((word) => word.length > 2) - ..where((word) => re.hasMatch(word))); + return const LineSplitter() + .convert(words) + .toBuiltSet() + .rebuild( + (b) => + b + ..map((word) => word.toLowerCase().trim()) + ..where((word) => word.length > 2) + ..where((word) => re.hasMatch(word)), + ); } - name: Flutter clean path: generate_crossword @@ -49014,8 +49012,8 @@ steps: - name: Patch lib/main.dart path: generate_crossword/lib/main.dart patch: | - --- a/generate_crossword/step_03/lib/main.dart - +++ b/generate_crossword/step_03/lib/main.dart + --- b/generate_crossword/step_03/lib/main.dart + +++ a/generate_crossword/step_03/lib/main.dart @@ -5,6 +5,8 @@ import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; @@ -49025,16 +49023,13 @@ steps: void main() { runApp( ProviderScope( - @@ -16,14 +18,7 @@ void main() { + @@ -16,11 +18,7 @@ void main() { colorSchemeSeed: Colors.blueGrey, brightness: Brightness.light, ), - home: Scaffold( - body: Center( - - child: Text( - - 'Hello, World!', - - style: TextStyle(fontSize: 24), - - ), + - child: Text('Hello, World!', style: TextStyle(fontSize: 24)), - ), - ), + home: CrosswordGeneratorApp(), @@ -49150,7 +49145,10 @@ steps: static int locationComparator(CrosswordWord a, CrosswordWord b) { final compareRows = a.location.y.compareTo(b.location.y); final compareColumns = a.location.x.compareTo(b.location.x); - return switch (compareColumns) { 0 => compareRows, _ => compareColumns }; + return switch (compareColumns) { + 0 => compareRows, + _ => compareColumns, + }; } /// Constructor for [CrosswordWord]. @@ -49159,10 +49157,13 @@ steps: required Location location, required Direction direction, }) { - return CrosswordWord((b) => b - ..word = word - ..direction = direction - ..location.replace(location)); + return CrosswordWord( + (b) => + b + ..word = word + ..direction = direction + ..location.replace(location), + ); } /// Constructor for [CrosswordWord]. @@ -49209,9 +49210,9 @@ steps: /// Constructor for [CrosswordCharacter]. /// Use [CrosswordCharacter.character] instead. - factory CrosswordCharacter( - [void Function(CrosswordCharacterBuilder)? updates]) = - _$CrosswordCharacter; + factory CrosswordCharacter([ + void Function(CrosswordCharacterBuilder)? updates, + ]) = _$CrosswordCharacter; CrosswordCharacter._(); } @@ -49240,14 +49241,15 @@ steps: required Direction direction, }) { return rebuild( - (b) => b - ..words.add( - CrosswordWord.word( - word: word, - direction: direction, - location: location, - ), - ), + (b) => + b + ..words.add( + CrosswordWord.word( + word: word, + direction: direction, + location: location, + ), + ), ); } @@ -49263,19 +49265,21 @@ steps: b.characters.updateValue( word.location.rightOffset(idx), (b) => b.rebuild((bInner) => bInner.acrossWord.replace(word)), - ifAbsent: () => CrosswordCharacter.character( - acrossWord: word, - character: character, - ), + ifAbsent: + () => CrosswordCharacter.character( + acrossWord: word, + character: character, + ), ); case Direction.down: b.characters.updateValue( word.location.downOffset(idx), (b) => b.rebuild((bInner) => bInner.downWord.replace(word)), - ifAbsent: () => CrosswordCharacter.character( - downWord: word, - character: character, - ), + ifAbsent: + () => CrosswordCharacter.character( + downWord: word, + character: character, + ), ); } } @@ -49289,7 +49293,8 @@ steps: final grid = List.generate( height, (_) => List.generate( - width, (_) => '░', // https://www.compart.com/en/unicode/U+2591 + width, + (_) => '░', // https://www.compart.com/en/unicode/U+2591 ), ); @@ -49344,12 +49349,7 @@ steps: } /// Construct the serialization/deserialization code for the data model. - @SerializersFor([ - Location, - Crossword, - CrosswordWord, - CrosswordCharacter, - ]) + @SerializersFor([Location, Crossword, CrosswordWord, CrosswordCharacter]) final Serializers serializers = _$serializers; - name: Create lib/utils.dart path: generate_crossword/lib/utils.dart @@ -49378,25 +49378,25 @@ steps: +++ a/generate_crossword/step_04/lib/providers.dart @@ -3,12 +3,17 @@ // found in the LICENSE file. - + import 'dart:convert'; +import 'dart:math'; - + import 'package:built_collection/built_collection.dart'; +import 'package:flutter/foundation.dart'; import 'package:flutter/services.dart'; import 'package:riverpod/riverpod.dart'; import 'package:riverpod_annotation/riverpod_annotation.dart'; - + +import 'model.dart' as model; +import 'utils.dart'; + part 'providers.g.dart'; - + /// A provider for the wordlist to use when generating the crossword. - @@ -26,3 +31,72 @@ Future> wordList(Ref ref) async { - ..where((word) => word.length > 2) - ..where((word) => re.hasMatch(word))); + @@ -32,3 +37,76 @@ Future> wordList(Ref ref) async { + ..where((word) => re.hasMatch(word)), + ); } + +/// An enumeration for different sizes of [model.Crossword]s. @@ -49407,10 +49407,7 @@ steps: + xlarge(width: 160, height: 88), + xxlarge(width: 500, height: 500); + - + const CrosswordSize({ - + required this.width, - + required this.height, - + }); + + const CrosswordSize({required this.width, required this.height}); + + final int width; + final int height; @@ -49438,8 +49435,10 @@ steps: + final size = ref.watch(sizeProvider); + final wordListAsync = ref.watch(wordListProvider); + - + var crossword = - + model.Crossword.crossword(width: size.width, height: size.height); + + var crossword = model.Crossword.crossword( + + width: size.width, + + height: size.height, + + ); + + yield* wordListAsync.when( + data: (wordList) async* { @@ -49448,10 +49447,15 @@ steps: + final direction = + _random.nextBool() ? model.Direction.across : model.Direction.down; + final location = model.Location.at( - + _random.nextInt(size.width), _random.nextInt(size.height)); + + _random.nextInt(size.width), + + _random.nextInt(size.height), + + ); + + crossword = crossword.addWord( - + word: word, direction: direction, location: location); + + word: word, + + direction: direction, + + location: location, + + ); + yield crossword; + await Future.delayed(Duration(milliseconds: 100)); + } @@ -49473,17 +49477,17 @@ steps: // Copyright 2024 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. - + import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:two_dimensional_scrollables/two_dimensional_scrollables.dart'; - + import '../model.dart'; import '../providers.dart'; - + class CrosswordWidget extends ConsumerWidget { const CrosswordWidget({super.key}); - + @override Widget build(BuildContext context, WidgetRef ref) { final size = ref.watch(sizeProvider); @@ -49496,10 +49500,10 @@ steps: rowBuilder: (index) => _buildSpan(context, index), ); } - + TableViewCell _buildCell(BuildContext context, TableVicinity vicinity) { final location = Location.at(vicinity.column, vicinity.row); - + return TableViewCell( child: Consumer( builder: (context, ref, _) { @@ -49512,7 +49516,7 @@ steps: ), ), ); - + if (character != null) { return Container( color: Theme.of(context).colorScheme.onPrimary, @@ -49527,7 +49531,7 @@ steps: ), ); } - + return ColoredBox( color: Theme.of(context).colorScheme.primaryContainer, ); @@ -49535,16 +49539,18 @@ steps: ), ); } - + TableSpan _buildSpan(BuildContext context, int index) { return TableSpan( extent: FixedTableSpanExtent(32), foregroundDecoration: TableSpanDecoration( border: TableSpanBorder( leading: BorderSide( - color: Theme.of(context).colorScheme.onPrimaryContainer), + color: Theme.of(context).colorScheme.onPrimaryContainer, + ), trailing: BorderSide( - color: Theme.of(context).colorScheme.onPrimaryContainer), + color: Theme.of(context).colorScheme.onPrimaryContainer, + ), ), ), ); @@ -49571,36 +49577,33 @@ steps: titleTextStyle: TextStyle( color: Theme.of(context).colorScheme.primary, fontSize: 16, - @@ -23,27 +25,7 @@ class CrosswordGeneratorApp extends StatelessWidget { + @@ -22,24 +24,7 @@ class CrosswordGeneratorApp extends StatelessWidget { + ), title: Text('Crossword Generator'), ), - body: SafeArea( + - body: SafeArea( - child: Consumer( - builder: (context, ref, _) { - final wordListAsync = ref.watch(wordListProvider); - return wordListAsync.when( - - data: (wordList) => ListView.builder( - - itemCount: wordList.length, - - itemBuilder: (context, index) { - - return ListTile( - - title: Text(wordList.elementAt(index)), - - ); - - }, - - ), - - error: (error, stackTrace) => Center( - - child: Text('$error'), - - ), - - loading: () => Center( - - child: CircularProgressIndicator(), - - ), + - data: + - (wordList) => ListView.builder( + - itemCount: wordList.length, + - itemBuilder: (context, index) { + - return ListTile(title: Text(wordList.elementAt(index))); + - }, + - ), + - error: (error, stackTrace) => Center(child: Text('$error')), + - loading: () => Center(child: CircularProgressIndicator()), - ); - }, - ), - + child: CrosswordWidget(), - ), + - ), + + body: SafeArea(child: CrosswordWidget()), ), ); - @@ -60,3 +42,23 @@ class _EagerInitialization extends ConsumerWidget { + } + @@ -55,3 +40,25 @@ class _EagerInitialization extends ConsumerWidget { return child; } } @@ -49608,25 +49611,30 @@ steps: +class _CrosswordGeneratorMenu extends ConsumerWidget { + @override + Widget build(BuildContext context, WidgetRef ref) => MenuAnchor( - + menuChildren: [ - + for (final entry in CrosswordSize.values) - + MenuItemButton( - + onPressed: () => ref.read(sizeProvider.notifier).setSize(entry), - + leadingIcon: entry == ref.watch(sizeProvider) + + menuChildren: [ + + for (final entry in CrosswordSize.values) + + MenuItemButton( + + onPressed: () => ref.read(sizeProvider.notifier).setSize(entry), + + leadingIcon: + + entry == ref.watch(sizeProvider) + ? Icon(Icons.radio_button_checked_outlined) + : Icon(Icons.radio_button_unchecked_outlined), - + child: Text(entry.label), - + ), - + ], - + builder: (context, controller, child) => IconButton( + + child: Text(entry.label), + + ), + + ], + + builder: + + (context, controller, child) => IconButton( + onPressed: () => controller.open(), + icon: Icon(Icons.settings), + ), - + ); + + ); +} - name: Run build_runner path: generate_crossword dart: run build_runner build --delete-conflicting-outputs + - name: format model.g.dart + path: generate_crossword + dart: format lib/model.g.dart - name: Build macOS app platforms: [ macos ] path: generate_crossword @@ -49688,28 +49696,27 @@ steps: expect(crossword.words.isNotEmpty, true); expect(crossword.words.length, 2); expect( - crossword.words - .rebuild( - (b) => b.where((b) => b.direction == Direction.across), - ) - .length, - 1); + crossword.words + .rebuild((b) => b.where((b) => b.direction == Direction.across)) + .length, + 1, + ); expect( - crossword.words - .rebuild( - (b) => b.where((b) => b.direction == Direction.down), - ) - .length, - 1); + crossword.words + .rebuild((b) => b.where((b) => b.direction == Direction.down)) + .length, + 1, + ); expect(crossword.characters.isNotEmpty, isTrue); expect(crossword.characters.length, 7); expect( - crossword.characters[topLeft], - CrosswordCharacter.character( - acrossWord: thisWord, - downWord: thatWord, - character: 't', - )); + crossword.characters[topLeft], + CrosswordCharacter.character( + acrossWord: thisWord, + downWord: thatWord, + character: 't', + ), + ); expect(crossword.valid, isTrue); }); @@ -49735,19 +49742,17 @@ steps: expect(crossword.words.isNotEmpty, true); expect( - crossword.words - .rebuild( - (b) => b.where((b) => b.direction == Direction.across), - ) - .length, - 2); + crossword.words + .rebuild((b) => b.where((b) => b.direction == Direction.across)) + .length, + 2, + ); expect( - crossword.words - .rebuild( - (b) => b.where((b) => b.direction == Direction.down), - ) - .isEmpty, - true); + crossword.words + .rebuild((b) => b.where((b) => b.direction == Direction.down)) + .isEmpty, + true, + ); expect(crossword.characters.isNotEmpty, isTrue); expect(crossword.characters.length, 8); expect(crossword.valid, isFalse); @@ -49757,11 +49762,12 @@ steps: Crossword crossword = Crossword.crossword(width: 50, height: 50); expect(crossword.valid, true); - crossword = crossword.addWord( - direction: Direction.across, - location: Location.at(0, 0), - word: 'this', - )!; + crossword = + crossword.addWord( + direction: Direction.across, + location: Location.at(0, 0), + word: 'this', + )!; expect(crossword.valid, true); final crossword2 = crossword.addWord( @@ -49823,17 +49829,18 @@ steps: final topLeft = Location.at(0, 0); - crossword = crossword - .addWord( - location: topLeft, - word: 'this', - direction: Direction.down, - )! - .addWord( - location: topLeft, - word: 'total', - direction: Direction.across, - )!; + crossword = + crossword + .addWord( + location: topLeft, + word: 'this', + direction: Direction.down, + )! + .addWord( + location: topLeft, + word: 'total', + direction: Direction.across, + )!; expect(crossword.valid, isTrue); @@ -49884,77 +49891,85 @@ steps: }); test('Crossword is not valid with run-on across words', () { - Crossword crossword = - Crossword.crossword(width: 50, height: 50).rebuild((b) => b - ..words.addAll([ - CrosswordWord.word( - direction: Direction.across, - location: Location.at(0, 0), - word: 'word', - ), - CrosswordWord.word( - direction: Direction.across, - location: Location.at(4, 0), - word: 'another', - ), - ])); + Crossword crossword = Crossword.crossword(width: 50, height: 50).rebuild( + (b) => + b + ..words.addAll([ + CrosswordWord.word( + direction: Direction.across, + location: Location.at(0, 0), + word: 'word', + ), + CrosswordWord.word( + direction: Direction.across, + location: Location.at(4, 0), + word: 'another', + ), + ]), + ); expect(crossword.valid, false); }); test('Crossword is not valid with run-on down words', () { - Crossword crossword = - Crossword.crossword(width: 50, height: 50).rebuild((b) => b - ..words.addAll([ - CrosswordWord.word( - direction: Direction.down, - location: Location.at(0, 0), - word: 'word', - ), - CrosswordWord.word( - direction: Direction.down, - location: Location.at(0, 4), - word: 'another', - ), - ])); + Crossword crossword = Crossword.crossword(width: 50, height: 50).rebuild( + (b) => + b + ..words.addAll([ + CrosswordWord.word( + direction: Direction.down, + location: Location.at(0, 0), + word: 'word', + ), + CrosswordWord.word( + direction: Direction.down, + location: Location.at(0, 4), + word: 'another', + ), + ]), + ); expect(crossword.valid, false); }); test('Crossword is not valid with run-on across/down words', () { - Crossword crossword = - Crossword.crossword(width: 50, height: 50).rebuild((b) => b - ..words.addAll([ - CrosswordWord.word( - direction: Direction.across, - location: Location.at(0, 0), - word: 'word', - ), - CrosswordWord.word( - direction: Direction.down, - location: Location.at(4, 0), - word: 'another', - ), - ])); + Crossword crossword = Crossword.crossword(width: 50, height: 50).rebuild( + (b) => + b + ..words.addAll([ + CrosswordWord.word( + direction: Direction.across, + location: Location.at(0, 0), + word: 'word', + ), + CrosswordWord.word( + direction: Direction.down, + location: Location.at(4, 0), + word: 'another', + ), + ]), + ); expect(crossword.valid, false); }); test('Crossword is not valid with run-on down/across words', () { - Crossword? crossword = - Crossword.crossword(width: 50, height: 50).rebuild((b) => b - ..words.addAll([ - CrosswordWord.word( - direction: Direction.down, - location: Location.at(0, 0), - word: 'word', - ), - CrosswordWord.word( - direction: Direction.across, - location: Location.at(0, 4), - word: 'another', - ), - ])); + Crossword? crossword = Crossword.crossword(width: 50, height: 50).rebuild( + (b) => + b + ..words.addAll([ + CrosswordWord.word( + direction: Direction.down, + location: Location.at(0, 0), + word: 'word', + ), + CrosswordWord.word( + direction: Direction.across, + location: Location.at(0, 4), + word: 'another', + ), + ]), + ); expect(crossword.valid, false); }); @@ -49962,36 +49977,40 @@ steps: test('Adding duplicate across words returns null', () { Crossword? crossword = Crossword.crossword(width: 50, height: 50); - crossword = crossword.addWord( - direction: Direction.across, - location: Location.at(0, 0), - word: 'duplicated', - )!; - - expect( + crossword = crossword.addWord( direction: Direction.across, - location: Location.at(4, 4), + location: Location.at(0, 0), word: 'duplicated', - ), - isNull); + )!; + + expect( + crossword.addWord( + direction: Direction.across, + location: Location.at(4, 4), + word: 'duplicated', + ), + isNull, + ); }); test('Crossword is not valid with duplicate across words', () { - Crossword? crossword = - Crossword.crossword(width: 50, height: 50).rebuild((b) => b - ..words.addAll([ - CrosswordWord.word( - direction: Direction.across, - location: Location.at(0, 0), - word: 'duplicated', - ), - CrosswordWord.word( - direction: Direction.across, - location: Location.at(4, 4), - word: 'duplicated', - ), - ])); + Crossword? crossword = Crossword.crossword(width: 50, height: 50).rebuild( + (b) => + b + ..words.addAll([ + CrosswordWord.word( + direction: Direction.across, + location: Location.at(0, 0), + word: 'duplicated', + ), + CrosswordWord.word( + direction: Direction.across, + location: Location.at(4, 4), + word: 'duplicated', + ), + ]), + ); expect(crossword.valid, false); }); @@ -49999,36 +50018,40 @@ steps: test('Adding duplicate down words returns null', () { Crossword? crossword = Crossword.crossword(width: 50, height: 50); - crossword = crossword.addWord( - direction: Direction.down, - location: Location.at(0, 0), - word: 'duplicated', - )!; - - expect( + crossword = crossword.addWord( direction: Direction.down, - location: Location.at(4, 4), + location: Location.at(0, 0), word: 'duplicated', - ), - isNull); + )!; + + expect( + crossword.addWord( + direction: Direction.down, + location: Location.at(4, 4), + word: 'duplicated', + ), + isNull, + ); }); test('Crossword is not valid with duplicate down words', () { - Crossword? crossword = - Crossword.crossword(width: 50, height: 50).rebuild((b) => b - ..words.addAll([ - CrosswordWord.word( - direction: Direction.down, - location: Location.at(0, 0), - word: 'duplicated', - ), - CrosswordWord.word( - direction: Direction.down, - location: Location.at(4, 4), - word: 'duplicated', - ), - ])); + Crossword? crossword = Crossword.crossword(width: 50, height: 50).rebuild( + (b) => + b + ..words.addAll([ + CrosswordWord.word( + direction: Direction.down, + location: Location.at(0, 0), + word: 'duplicated', + ), + CrosswordWord.word( + direction: Direction.down, + location: Location.at(4, 4), + word: 'duplicated', + ), + ]), + ); expect(crossword.valid, false); }); @@ -50038,7 +50061,7 @@ steps: patch: | --- b/generate_crossword/step_05_a/lib/model.dart +++ a/generate_crossword/step_05_a/lib/model.dart - @@ -169,16 +169,118 @@ abstract class Crossword implements Built { + @@ -175,16 +175,118 @@ abstract class Crossword implements Built { /// The words in the crossword. BuiltList get words; @@ -50157,12 +50180,12 @@ steps: + } + + final candidate = rebuild( - (b) => b - ..words.add( - CrosswordWord.word( - @@ -188,6 +290,12 @@ abstract class Crossword implements Built { - ), - ), + (b) => + b + ..words.add( + @@ -195,6 +297,12 @@ abstract class Crossword implements Built { + ), + ), ); + + if (candidate.valid) { @@ -50178,13 +50201,16 @@ steps: patch: | --- b/generate_crossword/step_05_a/lib/providers.dart +++ a/generate_crossword/step_05_a/lib/providers.dart - @@ -83,10 +83,16 @@ Stream crossword(Ref ref) async* { - final location = model.Location.at( - _random.nextInt(size.width), _random.nextInt(size.height)); + @@ -90,13 +90,19 @@ Stream crossword(Ref ref) async* { + _random.nextInt(size.height), + ); - crossword = crossword.addWord( + var candidate = crossword.addWord( - word: word, direction: direction, location: location); + word: word, + direction: direction, + location: location, + ); - yield crossword; - await Future.delayed(Duration(milliseconds: 100)); + await Future.delayed(Duration(milliseconds: 10)); @@ -50201,6 +50227,9 @@ steps: - name: Run build_runner path: generate_crossword dart: run build_runner build --delete-conflicting-outputs + - name: format model.g.dart + path: generate_crossword + dart: format lib/model.g.dart - name: Flutter test path: generate_crossword flutter: test @@ -50236,13 +50265,16 @@ steps: patch: | --- b/generate_crossword/step_05_b/lib/providers.dart +++ a/generate_crossword/step_05_b/lib/providers.dart - @@ -82,16 +82,20 @@ Stream crossword(Ref ref) async* { - _random.nextBool() ? model.Direction.across : model.Direction.down; - final location = model.Location.at( - _random.nextInt(size.width), _random.nextInt(size.height)); + @@ -89,19 +89,24 @@ Stream crossword(Ref ref) async* { + _random.nextInt(size.width), + _random.nextInt(size.height), + ); - - var candidate = crossword.addWord( - - word: word, direction: direction, location: location); + - word: word, + - direction: direction, + - location: location, + - ); - await Future.delayed(Duration(milliseconds: 10)); - if (candidate != null) { - debugPrint('Added word: $word'); @@ -50251,11 +50283,15 @@ steps: - } else { - debugPrint('Failed to add word: $word'); + try { - + var candidate = await compute( - + ((String, model.Direction, model.Location) wordToAdd) { + + var candidate = await compute(( + + (String, model.Direction, model.Location) wordToAdd, + + ) { + final (word, direction, location) = wordToAdd; + return crossword.addWord( - + word: word, direction: direction, location: location); + + word: word, + + direction: direction, + + location: location, + + ); + }, (word, direction, location)); + + if (candidate != null) { @@ -50269,6 +50305,9 @@ steps: - name: Run build_runner path: generate_crossword dart: run build_runner build --delete-conflicting-outputs + - name: format model.g.dart + path: generate_crossword + dart: format lib/model.g.dart - name: Flutter test path: generate_crossword flutter: test @@ -50320,17 +50359,22 @@ steps: required Crossword crossword, required BuiltSet wordList, }) async* { - while ( - crossword.characters.length < crossword.width * crossword.height * 0.8) { + while (crossword.characters.length < + crossword.width * crossword.height * 0.8) { final word = wordList.randomElement(); final direction = _random.nextBool() ? Direction.across : Direction.down; final location = Location.at( - _random.nextInt(crossword.width), _random.nextInt(crossword.height)); + _random.nextInt(crossword.width), + _random.nextInt(crossword.height), + ); try { var candidate = await compute(((String, Direction, Location) wordToAdd) { final (word, direction, location) = wordToAdd; return crossword.addWord( - word: word, direction: direction, location: location); + word: word, + direction: direction, + location: location, + ); }, (word, direction, location)); if (candidate != null) { @@ -50365,7 +50409,7 @@ steps: part 'providers.g.dart'; - @@ -64,49 +63,25 @@ class Size extends _$Size { + @@ -67,57 +66,28 @@ class Size extends _$Size { } } @@ -50376,9 +50420,11 @@ steps: final size = ref.watch(sizeProvider); final wordListAsync = ref.watch(wordListProvider); - - var crossword = - + final emptyCrossword = - model.Crossword.crossword(width: size.width, height: size.height); + - var crossword = model.Crossword.crossword( + + final emptyCrossword = model.Crossword.crossword( + width: size.width, + height: size.height, + ); yield* wordListAsync.when( - data: (wordList) async* { @@ -50387,13 +50433,19 @@ steps: - final direction = - _random.nextBool() ? model.Direction.across : model.Direction.down; - final location = model.Location.at( - - _random.nextInt(size.width), _random.nextInt(size.height)); + - _random.nextInt(size.width), + - _random.nextInt(size.height), + - ); - try { - - var candidate = await compute( - - ((String, model.Direction, model.Location) wordToAdd) { + - var candidate = await compute(( + - (String, model.Direction, model.Location) wordToAdd, + - ) { - final (word, direction, location) = wordToAdd; - return crossword.addWord( - - word: word, direction: direction, location: location); + - word: word, + - direction: direction, + - location: location, + - ); - }, (word, direction, location)); - - if (candidate != null) { @@ -50407,10 +50459,11 @@ steps: - - yield crossword; - }, - + data: (wordList) => exploreCrosswordSolutions( - + crossword: emptyCrossword, - + wordList: wordList, - + ), + + data: + + (wordList) => exploreCrosswordSolutions( + + crossword: emptyCrossword, + + wordList: wordList, + + ), error: (error, stackTrace) async* { debugPrint('Error loading word list: $error'); - yield crossword; @@ -50425,6 +50478,9 @@ steps: - name: Run build_runner path: generate_crossword dart: run build_runner build --delete-conflicting-outputs + - name: format model.g.dart + path: generate_crossword + dart: format lib/model.g.dart - name: Flutter test path: generate_crossword flutter: test @@ -50468,7 +50524,7 @@ steps: import 'package:flutter_test/flutter_test.dart'; import 'package:generate_crossword/model.dart'; - @@ -382,4 +383,105 @@ void main() { + @@ -397,4 +398,121 @@ void main() { expect(crossword.valid, false); }); @@ -50482,10 +50538,12 @@ steps: + ); + expect(queue.locationsToTry.length, 1); + - + crossword = crossword.addWord( - + direction: Direction.across, - + location: Location.at(0, 0), - + word: 'word')!; + + crossword = + + crossword.addWord( + + direction: Direction.across, + + location: Location.at(0, 0), + + word: 'word', + + )!; + queue = WorkQueue.from( + crossword: crossword, + candidateWords: ['words', 'and', 'moar', 'wordz'], @@ -50493,21 +50551,26 @@ steps: + ); + expect(queue.locationsToTry.length, 4); + expect( - + queue.locationsToTry.entries - + .every((element) => element.value == Direction.down), - + isTrue); + + queue.locationsToTry.entries.every( + + (element) => element.value == Direction.down, + + ), + + isTrue, + + ); + final entries = queue.locationsToTry.entries; + expect(entries.every((element) => element.key.y == 0), isTrue); - + expect(entries.map((element) => element.key.x).toBuiltSet(), - + equals(BuiltSet([0, 1, 2, 3]))); + + expect( + + entries.map((element) => element.key.x).toBuiltSet(), + + equals(BuiltSet([0, 1, 2, 3])), + + ); + }); + + test('WorkQueue from down word', () { - + Crossword crossword = Crossword.crossword(width: 50, height: 50).addWord( - + direction: Direction.down, - + location: Location.at(0, 0), - + word: 'word', - + )!; + + Crossword crossword = + + Crossword.crossword(width: 50, height: 50).addWord( + + direction: Direction.down, + + location: Location.at(0, 0), + + word: 'word', + + )!; + + WorkQueue queue = WorkQueue.from( + crossword: crossword, @@ -50516,27 +50579,32 @@ steps: + ); + expect(queue.locationsToTry.length, 4); + expect( - + queue.locationsToTry.entries - + .every((element) => element.value == Direction.across), - + isTrue); + + queue.locationsToTry.entries.every( + + (element) => element.value == Direction.across, + + ), + + isTrue, + + ); + final entries = queue.locationsToTry.entries; + expect(entries.every((element) => element.key.x == 0), isTrue); - + expect(entries.map((element) => element.key.y).toBuiltSet(), - + equals(BuiltSet([0, 1, 2, 3]))); + + expect( + + entries.map((element) => element.key.y).toBuiltSet(), + + equals(BuiltSet([0, 1, 2, 3])), + + ); + }); + + test('WorkQueue from two words', () { - + Crossword crossword = Crossword.crossword(width: 50, height: 50) - + .addWord( - + direction: Direction.across, - + location: Location.at(0, 0), - + word: 'word', - + )! - + .addWord( - + direction: Direction.down, - + location: Location.at(0, 0), - + word: 'work', - + )!; + + Crossword crossword = + + Crossword.crossword(width: 50, height: 50) + + .addWord( + + direction: Direction.across, + + location: Location.at(0, 0), + + word: 'word', + + )! + + .addWord( + + direction: Direction.down, + + location: Location.at(0, 0), + + word: 'work', + + )!; + + WorkQueue queue = WorkQueue.from( + crossword: crossword, @@ -50544,27 +50612,31 @@ steps: + startLocation: Location.at(0, 0), + ); + expect( - + queue.locationsToTry, - + equals(BuiltMap({ + + queue.locationsToTry, + + equals( + + BuiltMap({ + Location.at(2, 0): Direction.down, + Location.at(0, 2): Direction.across, + Location.at(3, 0): Direction.down, + Location.at(0, 3): Direction.across, - + }))); + + }), + + ), + + ); + }); + + test('WorkQueue removes used words from candidate list', () { - + Crossword crossword = Crossword.crossword(width: 50, height: 50) - + .addWord( - + direction: Direction.across, - + location: Location.at(0, 0), - + word: 'word', - + )! - + .addWord( - + direction: Direction.down, - + location: Location.at(0, 0), - + word: 'work', - + )!; + + Crossword crossword = + + Crossword.crossword(width: 50, height: 50) + + .addWord( + + direction: Direction.across, + + location: Location.at(0, 0), + + word: 'word', + + )! + + .addWord( + + direction: Direction.down, + + location: Location.at(0, 0), + + word: 'work', + + )!; + + WorkQueue queue = WorkQueue.from( + crossword: crossword, @@ -50579,7 +50651,7 @@ steps: patch: | --- b/generate_crossword/step_06/lib/model.dart +++ a/generate_crossword/step_06/lib/model.dart - @@ -390,11 +390,108 @@ abstract class Crossword implements Built { + @@ -400,6 +400,120 @@ abstract class Crossword implements Built { Crossword._(); } @@ -50609,40 +50681,44 @@ steps: + required Crossword crossword, + required Iterable candidateWords, + required Location startLocation, - + }) => - + WorkQueue((b) { - + if (crossword.words.isEmpty) { - + // Strip candidate words too long to fit in the crossword - + b.candidateWords.addAll(candidateWords - + .where((word) => word.characters.length <= crossword.width)); + + }) => WorkQueue((b) { + + if (crossword.words.isEmpty) { + + // Strip candidate words too long to fit in the crossword + + b.candidateWords.addAll( + + candidateWords.where( + + (word) => word.characters.length <= crossword.width, + + ), + + ); + - + b.crossword.replace(crossword); + + b.crossword.replace(crossword); + - + b.locationsToTry.addAll({startLocation: Direction.across}); - + } else { - + // Assuming words have already been stripped to length - + b.candidateWords.addAll( - + candidateWords.toBuiltSet().rebuild( - + (b) => b.removeAll(crossword.words.map((word) => word.word))), - + ); - + b.crossword.replace(crossword); - + crossword.characters - + .rebuild((b) => b.removeWhere((location, character) { - + if (character.acrossWord != null && - + character.downWord != null) { - + return true; - + } - + final left = crossword.characters[location.left]; - + if (left != null && left.downWord != null) return true; - + final right = crossword.characters[location.right]; - + if (right != null && right.downWord != null) return true; - + final up = crossword.characters[location.up]; - + if (up != null && up.acrossWord != null) return true; - + final down = crossword.characters[location.down]; - + if (down != null && down.acrossWord != null) return true; - + return false; - + })) - + .forEach((location, character) { + + b.locationsToTry.addAll({startLocation: Direction.across}); + + } else { + + // Assuming words have already been stripped to length + + b.candidateWords.addAll( + + candidateWords.toBuiltSet().rebuild( + + (b) => b.removeAll(crossword.words.map((word) => word.word)), + + ), + + ); + + b.crossword.replace(crossword); + + crossword.characters + + .rebuild( + + (b) => b.removeWhere((location, character) { + + if (character.acrossWord != null && character.downWord != null) { + + return true; + + } + + final left = crossword.characters[location.left]; + + if (left != null && left.downWord != null) return true; + + final right = crossword.characters[location.right]; + + if (right != null && right.downWord != null) return true; + + final up = crossword.characters[location.up]; + + if (up != null && up.acrossWord != null) return true; + + final down = crossword.characters[location.down]; + + if (down != null && down.acrossWord != null) return true; + + return false; + + }), + + ) + + .forEach((location, character) { + b.locationsToTry.addAll({ + location: switch ((character.acrossWord, character.downWord)) { + (null, null) => @@ -50650,28 +50726,36 @@ steps: + (null, _) => Direction.across, + (_, null) => Direction.down, + (_, _) => throw StateError('Character is part of two words'), - + } + + }, + }); + }); - + } - + }); + + } + + }); + - + WorkQueue remove(Location location) => rebuild((b) => b - + ..locationsToTry.remove(location) - + ..badLocations.add(location)); + + WorkQueue remove(Location location) => rebuild( + + (b) => + + b + + ..locationsToTry.remove(location) + + ..badLocations.add(location), + + ); + + /// Update the work queue from a crossword derived from the current crossword + /// that this work queue is built from. + WorkQueue updateFrom(final Crossword crossword) => WorkQueue.from( - + crossword: crossword, - + candidateWords: candidateWords, - + startLocation: locationsToTry.isNotEmpty + + crossword: crossword, + + candidateWords: candidateWords, + + startLocation: + + locationsToTry.isNotEmpty + ? locationsToTry.keys.first + : Location.at(0, 0), - + ).rebuild((b) => b - + ..badLocations.addAll(badLocations) - + ..locationsToTry - + .removeWhere((location, _) => badLocations.contains(location))); + + ).rebuild( + + (b) => + + b + + ..badLocations.addAll(badLocations) + + ..locationsToTry.removeWhere( + + (location, _) => badLocations.contains(location), + + ), + + ); + + /// Factory constructor for [WorkQueue] + factory WorkQueue([void Function(WorkQueueBuilder)? updates]) = _$WorkQueue; @@ -50680,13 +50764,14 @@ steps: +} + /// Construct the serialization/deserialization code for the data model. - @SerializersFor([ - Location, - Crossword, - CrosswordWord, - CrosswordCharacter, + -@SerializersFor([Location, Crossword, CrosswordWord, CrosswordCharacter]) + +@SerializersFor([ + + Location, + + Crossword, + + CrosswordWord, + + CrosswordCharacter, + WorkQueue, - ]) + +]) final Serializers serializers = _$serializers; - name: Patch lib/utils.dart path: generate_crossword/lib/utils.dart @@ -50719,7 +50804,7 @@ steps: patch: | --- b/generate_crossword/step_06/lib/isolates.dart +++ a/generate_crossword/step_06/lib/isolates.dart - @@ -2,39 +2,73 @@ + @@ -2,44 +2,78 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. @@ -50738,12 +50823,14 @@ steps: required Crossword crossword, required BuiltSet wordList, }) async* { - - while ( - - crossword.characters.length < crossword.width * crossword.height * 0.8) { + - while (crossword.characters.length < + - crossword.width * crossword.height * 0.8) { - final word = wordList.randomElement(); - final direction = _random.nextBool() ? Direction.across : Direction.down; - final location = Location.at( - - _random.nextInt(crossword.width), _random.nextInt(crossword.height)); + - _random.nextInt(crossword.width), + - _random.nextInt(crossword.height), + - ); + final start = DateTime.now(); + var workQueue = WorkQueue.from( + crossword: crossword, @@ -50756,8 +50843,9 @@ steps: - var candidate = await compute(((String, Direction, Location) wordToAdd) { - final (word, direction, location) = wordToAdd; - return crossword.addWord( - - word: word, direction: direction, location: location); - - }, (word, direction, location)); + - word: word, + - direction: direction, + - location: location, + final crossword = await compute(((WorkQueue, Location) workMessage) { + final (workQueue, location) = workMessage; + final direction = workQueue.locationsToTry[location]!; @@ -50769,9 +50857,13 @@ steps: + word: workQueue.candidateWords.randomElement(), + ); + } - + var words = workQueue.candidateWords.toBuiltList().rebuild((b) => b - + ..where((b) => b.characters.contains(target.character)) - + ..shuffle()); + + var words = workQueue.candidateWords.toBuiltList().rebuild( + + (b) => + + b + + ..where((b) => b.characters.contains(target.character)) + + ..shuffle(), + ); + - }, (word, direction, location)); + int tryCount = 0; + for (final word in words) { + tryCount++; @@ -50807,12 +50899,17 @@ steps: debugPrint('Error running isolate: $e'); } } - + debugPrint('${crossword.width} x ${crossword.height} Crossword generated in ' - + '${DateTime.now().difference(start).formatted}'); + + debugPrint( + + '${crossword.width} x ${crossword.height} Crossword generated in ' + + '${DateTime.now().difference(start).formatted}', + + ); } - name: Run build_runner path: generate_crossword dart: run build_runner build --delete-conflicting-outputs + - name: format model.g.dart + path: generate_crossword + dart: format lib/model.g.dart - name: Flutter test path: generate_crossword flutter: test @@ -50856,7 +50953,7 @@ steps: part 'model.g.dart'; - @@ -486,6 +487,52 @@ abstract class WorkQueue implements Built { + @@ -508,6 +509,62 @@ abstract class WorkQueue implements Built { WorkQueue._(); } @@ -50881,25 +50978,35 @@ steps: + + /// Construct a [DisplayInfo] instance from a [WorkQueue]. + factory DisplayInfo.from({required WorkQueue workQueue}) { - + final gridFilled = (workQueue.crossword.characters.length / - + (workQueue.crossword.width * workQueue.crossword.height)); + + final gridFilled = + + (workQueue.crossword.characters.length / + + (workQueue.crossword.width * workQueue.crossword.height)); + final fmt = NumberFormat.decimalPattern(); + - + return DisplayInfo((b) => b - + ..wordsInGridCount = fmt.format(workQueue.crossword.words.length) - + ..candidateWordsCount = fmt.format(workQueue.candidateWords.length) - + ..locationsToExploreCount = fmt.format(workQueue.locationsToTry.length) - + ..knownBadLocationsCount = fmt.format(workQueue.badLocations.length) - + ..gridFilledPercentage = '${(gridFilled * 100).toStringAsFixed(2)}%'); + + return DisplayInfo( + + (b) => + + b + + ..wordsInGridCount = fmt.format(workQueue.crossword.words.length) + + ..candidateWordsCount = fmt.format(workQueue.candidateWords.length) + + ..locationsToExploreCount = fmt.format( + + workQueue.locationsToTry.length, + + ) + + ..knownBadLocationsCount = fmt.format(workQueue.badLocations.length) + + ..gridFilledPercentage = + + '${(gridFilled * 100).toStringAsFixed(2)}%', + + ); + } + + /// An empty [DisplayInfo] instance. - + static DisplayInfo get empty => DisplayInfo((b) => b - + ..wordsInGridCount = '0' - + ..candidateWordsCount = '0' - + ..locationsToExploreCount = '0' - + ..knownBadLocationsCount = '0' - + ..gridFilledPercentage = '0%'); + + static DisplayInfo get empty => DisplayInfo( + + (b) => + + b + + ..wordsInGridCount = '0' + + ..candidateWordsCount = '0' + + ..locationsToExploreCount = '0' + + ..knownBadLocationsCount = '0' + + ..gridFilledPercentage = '0%', + + ); + + factory DisplayInfo([void Function(DisplayInfoBuilder)? updates]) = + _$DisplayInfo; @@ -50909,7 +51016,7 @@ steps: /// Construct the serialization/deserialization code for the data model. @SerializersFor([ Location, - @@ -493,5 +540,6 @@ abstract class WorkQueue implements Built { + @@ -515,5 +572,6 @@ abstract class WorkQueue implements Built { CrosswordWord, CrosswordCharacter, WorkQueue, @@ -50930,7 +51037,7 @@ steps: required Crossword crossword, required BuiltSet wordList, }) async* { - @@ -61,10 +61,10 @@ Stream exploreCrosswordSolutions({ + @@ -64,10 +64,10 @@ Stream exploreCrosswordSolutions({ }, (workQueue, location)); if (crossword != null) { workQueue = workQueue.updateFrom(crossword); @@ -50955,7 +51062,7 @@ steps: import 'package:built_collection/built_collection.dart'; import 'package:flutter/foundation.dart'; - @@ -64,12 +65,19 @@ class Size extends _$Size { + @@ -67,14 +68,21 @@ class Size extends _$Size { } @riverpod @@ -50964,8 +51071,10 @@ steps: final size = ref.watch(sizeProvider); final wordListAsync = ref.watch(wordListProvider); - - final emptyCrossword = - model.Crossword.crossword(width: size.width, height: size.height); + final emptyCrossword = model.Crossword.crossword( + width: size.width, + height: size.height, + ); + final emptyWorkQueue = model.WorkQueue.from( + crossword: emptyCrossword, + candidateWords: BuiltSet(), @@ -50976,9 +51085,9 @@ steps: + ref.read(endTimeProvider.notifier).clear(); yield* wordListAsync.when( - data: (wordList) => exploreCrosswordSolutions( - @@ -78,10 +86,100 @@ Stream crossword(Ref ref) async* { - ), + data: + @@ -84,10 +92,103 @@ Stream crossword(Ref ref) async* { + ), error: (error, stackTrace) async* { debugPrint('Error loading word list: $error'); - yield emptyCrossword; @@ -50987,8 +51096,8 @@ steps: loading: () async* { - yield emptyCrossword; + yield emptyWorkQueue; - + }, - + ); + }, + ); + + ref.read(endTimeProvider.notifier).end(); +} @@ -51040,21 +51149,22 @@ steps: + try { + final soFar = DateTime.now().difference(startTime); + final completedPercentage = min( - + 0.99, - + (workQueue.crossword.characters.length / - + (workQueue.crossword.width * workQueue.crossword.height) / - + _estimatedTotalCoverage)); + + 0.99, + + (workQueue.crossword.characters.length / + + (workQueue.crossword.width * workQueue.crossword.height) / + + _estimatedTotalCoverage), + + ); + final expectedTotal = soFar.inSeconds / completedPercentage; + final expectedRemaining = expectedTotal - soFar.inSeconds; + return Duration(seconds: expectedRemaining.toInt()); + } catch (e) { + return Duration.zero; + } - }, + + }, + error: (error, stackTrace) => Duration.zero, + loading: () => Duration.zero, - ); - } + + ); + +} + +/// A provider that holds whether to display info. +@Riverpod(keepAlive: true) @@ -51074,17 +51184,19 @@ steps: +@riverpod +class DisplayInfo extends _$DisplayInfo { + @override - + model.DisplayInfo build() => ref.watch(workQueueProvider).when( + + model.DisplayInfo build() => ref + + .watch(workQueueProvider) + + .when( + data: (workQueue) => model.DisplayInfo.from(workQueue: workQueue), + error: (error, stackTrace) => model.DisplayInfo.empty, + loading: () => model.DisplayInfo.empty, + ); - +} + } - name: Patch lib/widgets/crossword_widget.dart path: generate_crossword/lib/widgets/crossword_widget.dart patch: | - --- a/generate_crossword/step_07/lib/widgets/crossword_widget.dart - +++ b/generate_crossword/step_07/lib/widgets/crossword_widget.dart + --- b/generate_crossword/step_07/lib/widgets/crossword_widget.dart + +++ a/generate_crossword/step_07/lib/widgets/crossword_widget.dart @@ -32,9 +32,9 @@ class CrosswordWidget extends ConsumerWidget { child: Consumer( builder: (context, ref, _) { @@ -51156,9 +51268,7 @@ steps: import 'ticker_builder.dart'; class CrosswordInfoWidget extends ConsumerWidget { - const CrosswordInfoWidget({ - super.key, - }); + const CrosswordInfoWidget({super.key}); @override Widget build(BuildContext context, WidgetRef ref) { @@ -51171,62 +51281,68 @@ steps: return Align( alignment: Alignment.bottomRight, child: Padding( - padding: const EdgeInsets.only( - right: 32.0, - bottom: 32.0, - ), + padding: const EdgeInsets.only(right: 32.0, bottom: 32.0), child: ClipRRect( borderRadius: BorderRadius.circular(8), child: ColoredBox( color: Theme.of(context).colorScheme.onPrimary.withAlpha(230), child: Padding( - padding: const EdgeInsets.symmetric( - horizontal: 12, - vertical: 8, - ), + padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 8), child: DefaultTextStyle( style: TextStyle( - fontSize: 16, color: Theme.of(context).colorScheme.primary), + fontSize: 16, + color: Theme.of(context).colorScheme.primary, + ), child: Column( mainAxisSize: MainAxisSize.min, crossAxisAlignment: CrossAxisAlignment.start, children: [ _CrosswordInfoRichText( - label: 'Grid Size', - value: '${size.width} x ${size.height}'), + label: 'Grid Size', + value: '${size.width} x ${size.height}', + ), _CrosswordInfoRichText( - label: 'Words in grid', - value: displayInfo.wordsInGridCount), + label: 'Words in grid', + value: displayInfo.wordsInGridCount, + ), _CrosswordInfoRichText( - label: 'Candidate words', - value: displayInfo.candidateWordsCount), + label: 'Candidate words', + value: displayInfo.candidateWordsCount, + ), _CrosswordInfoRichText( - label: 'Locations to explore', - value: displayInfo.locationsToExploreCount), + label: 'Locations to explore', + value: displayInfo.locationsToExploreCount, + ), _CrosswordInfoRichText( - label: 'Known bad locations', - value: displayInfo.knownBadLocationsCount), + label: 'Known bad locations', + value: displayInfo.knownBadLocationsCount, + ), _CrosswordInfoRichText( - label: 'Grid filled', - value: displayInfo.gridFilledPercentage), + label: 'Grid filled', + value: displayInfo.gridFilledPercentage, + ), switch ((startTime, endTime)) { (null, _) => _CrosswordInfoRichText( - label: 'Time elapsed', - value: 'Not started yet', - ), + label: 'Time elapsed', + value: 'Not started yet', + ), (DateTime start, null) => TickerBuilder( - builder: (context) => _CrosswordInfoRichText( - label: 'Time elapsed', - value: DateTime.now().difference(start).formatted, - ), - ), + builder: + (context) => _CrosswordInfoRichText( + label: 'Time elapsed', + value: DateTime.now().difference(start).formatted, + ), + ), (DateTime start, DateTime end) => _CrosswordInfoRichText( - label: 'Completed in', - value: end.difference(start).formatted), + label: 'Completed in', + value: end.difference(start).formatted, + ), }, if (startTime != null && endTime == null) _CrosswordInfoRichText( - label: 'Est. remaining', value: remaining.formatted), + label: 'Est. remaining', + value: remaining.formatted, + ), ], ), ), @@ -51246,27 +51362,24 @@ steps: @override Widget build(BuildContext context) => RichText( - text: TextSpan( - children: [ - TextSpan( - text: '$label ', - style: DefaultTextStyle.of(context).style, - ), - TextSpan( - text: value, - style: DefaultTextStyle.of(context) - .style - .copyWith(fontWeight: FontWeight.bold), - ), - ], + text: TextSpan( + children: [ + TextSpan(text: '$label ', style: DefaultTextStyle.of(context).style), + TextSpan( + text: value, + style: DefaultTextStyle.of( + context, + ).style.copyWith(fontWeight: FontWeight.bold), ), - ); + ], + ), + ); } - name: Patch lib/widgets/crossword_generator_app.dart path: generate_crossword/lib/widgets/crossword_generator_app.dart patch: | - --- a/generate_crossword/step_07/lib/widgets/crossword_generator_app.dart - +++ b/generate_crossword/step_07/lib/widgets/crossword_generator_app.dart + --- b/generate_crossword/step_07/lib/widgets/crossword_generator_app.dart + +++ a/generate_crossword/step_07/lib/widgets/crossword_generator_app.dart @@ -6,6 +6,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; @@ -51275,44 +51388,47 @@ steps: import 'crossword_widget.dart'; class CrosswordGeneratorApp extends StatelessWidget { - @@ -25,7 +26,18 @@ class CrosswordGeneratorApp extends StatelessWidget { + @@ -24,7 +25,18 @@ class CrosswordGeneratorApp extends StatelessWidget { + ), title: Text('Crossword Generator'), ), - body: SafeArea( - - child: CrosswordWidget(), + - body: SafeArea(child: CrosswordWidget()), + + body: SafeArea( + child: Consumer( + builder: (context, ref, child) { + return Stack( + children: [ - + Positioned.fill( - + child: CrosswordWidget(), - + ), + + Positioned.fill(child: CrosswordWidget()), + if (ref.watch(showDisplayInfoProvider)) CrosswordInfoWidget(), + ], + ); + }, + ), - ), + + ), ), ); - @@ -55,6 +67,14 @@ class _CrosswordGeneratorMenu extends ConsumerWidget { + } + @@ -54,6 +66,14 @@ class _CrosswordGeneratorMenu extends ConsumerWidget { : Icon(Icons.radio_button_unchecked_outlined), - child: Text(entry.label), - ), - + MenuItemButton( - + leadingIcon: ref.watch(showDisplayInfoProvider) + child: Text(entry.label), + ), + + MenuItemButton( + + leadingIcon: + + ref.watch(showDisplayInfoProvider) + ? Icon(Icons.check_box_outlined) + : Icon(Icons.check_box_outline_blank_outlined), - + onPressed: () => - + ref.read(showDisplayInfoProvider.notifier).toggle(), - + child: Text('Display Info'), - + ), - ], - builder: (context, controller, child) => IconButton( - onPressed: () => controller.open(), + + onPressed: () => ref.read(showDisplayInfoProvider.notifier).toggle(), + + child: Text('Display Info'), + + ), + ], + builder: + (context, controller, child) => IconButton( - name: Run build_runner path: generate_crossword dart: run build_runner build --delete-conflicting-outputs + - name: format model.g.dart + path: generate_crossword + dart: format lib/model.g.dart - name: Flutter test path: generate_crossword flutter: test @@ -51348,15 +51464,16 @@ steps: patch: | --- b/generate_crossword/step_08/lib/widgets/crossword_widget.dart +++ a/generate_crossword/step_08/lib/widgets/crossword_widget.dart - @@ -41,16 +41,35 @@ class CrosswordWidget extends ConsumerWidget { + @@ -41,16 +41,38 @@ class CrosswordWidget extends ConsumerWidget { ), ); + final explorationCell = ref.watch( + workQueueProvider.select( + (workQueueAsync) => workQueueAsync.when( - + data: (workQueue) => - + workQueue.locationsToTry.keys.contains(location), + + data: + + (workQueue) => + + workQueue.locationsToTry.keys.contains(location), + error: (error, stackTrace) => false, + loading: () => false, + ), @@ -51369,9 +51486,10 @@ steps: + return AnimatedContainer( + duration: Durations.extralong1, + curve: Curves.easeInOut, - + color: explorationCell - + ? Theme.of(context).colorScheme.primary - + : Theme.of(context).colorScheme.onPrimary, + + color: + + explorationCell + + ? Theme.of(context).colorScheme.primary + + : Theme.of(context).colorScheme.onPrimary, child: Center( - child: Text( - character.character, @@ -51381,9 +51499,10 @@ steps: style: TextStyle( fontSize: 24, - color: Theme.of(context).colorScheme.primary, - + color: explorationCell - + ? Theme.of(context).colorScheme.onPrimary - + : Theme.of(context).colorScheme.primary, + + color: + + explorationCell + + ? Theme.of(context).colorScheme.onPrimary + + : Theme.of(context).colorScheme.primary, ), + child: Text(character.character), ), @@ -51402,7 +51521,7 @@ steps: }) async* { final start = DateTime.now(); var workQueue = WorkQueue.from( - @@ -20,55 +21,98 @@ Stream exploreCrosswordSolutions({ + @@ -20,60 +21,116 @@ Stream exploreCrosswordSolutions({ startLocation: Location.at(0, 0), ); while (!workQueue.isCompleted) { @@ -51419,9 +51538,12 @@ steps: - word: workQueue.candidateWords.randomElement(), - ); - } - - var words = workQueue.candidateWords.toBuiltList().rebuild((b) => b - - ..where((b) => b.characters.contains(target.character)) - - ..shuffle()); + - var words = workQueue.candidateWords.toBuiltList().rebuild( + - (b) => + - b + - ..where((b) => b.characters.contains(target.character)) + - ..shuffle(), + - ); - int tryCount = 0; - for (final word in words) { - tryCount++; @@ -51434,11 +51556,26 @@ steps: + } + } + - + debugPrint('Generated ${workQueue.crossword.width} x ' - + '${workQueue.crossword.height} crossword in ' - + '${DateTime.now().difference(start).formatted} ' - + 'with $maxWorkerCount workers.'); + + debugPrint( + + 'Generated ${workQueue.crossword.width} x ' + + '${workQueue.crossword.height} crossword in ' + + '${DateTime.now().difference(start).formatted} ' + + 'with $maxWorkerCount workers.', + + ); +} + + + +Future _generate((WorkQueue, int) workMessage) async { + + var (workQueue, maxWorkerCount) = workMessage; + + final candidateGeneratorFutures = >[]; + + final locations = workQueue.locationsToTry.keys.toBuiltList().rebuild( + + (b) => + + b + + ..shuffle() + + ..take(maxWorkerCount), + + ); + + + + for (final location in locations) { + + final direction = workQueue.locationsToTry[location]!; - final candidate = workQueue.crossword.addWord( - location: switch (direction) { @@ -51455,18 +51592,14 @@ steps: - if (tryCount > 1000) { - break; - } - +Future _generate((WorkQueue, int) workMessage) async { - + var (workQueue, maxWorkerCount) = workMessage; - + final candidateGeneratorFutures = >[]; - + final locations = workQueue.locationsToTry.keys.toBuiltList().rebuild((b) => b - + ..shuffle() - + ..take(maxWorkerCount)); - + - + for (final location in locations) { - + final direction = workQueue.locationsToTry[location]!; - + - + candidateGeneratorFutures.add(compute(_generateCandidate, - + (workQueue.crossword, workQueue.candidateWords, location, direction))); + + candidateGeneratorFutures.add( + + compute(_generateCandidate, ( + + workQueue.crossword, + + workQueue.candidateWords, + + location, + + direction, + + )), + + ); + } + + try { @@ -51475,7 +51608,10 @@ steps: + for (final (location, direction, word) in results) { + if (word != null) { + final candidate = crossword.addWord( - + location: location, word: word, direction: direction); + + location: location, + + word: word, + + direction: direction, + + ); + if (candidate != null) { + crossword = candidate; } @@ -51488,18 +51624,22 @@ steps: - yield workQueue; - } catch (e) { - debugPrint('Error running isolate: $e'); - + } + } + + workQueue = workQueue.updateFrom(crossword); + } catch (e) { + debugPrint('$e'); - + } + } + - debugPrint( + - '${crossword.width} x ${crossword.height} Crossword generated in ' + - '${DateTime.now().difference(start).formatted}', + + return workQueue; +} + +(Location, Direction, String?) _generateCandidate( - + (Crossword, BuiltSet, Location, Direction) searchDetailMessage) { + + (Crossword, BuiltSet, Location, Direction) searchDetailMessage, + +) { + final (crossword, candidateWords, location, direction) = searchDetailMessage; + + final target = crossword.characters[location]; @@ -51509,9 +51649,12 @@ steps: + + // Filter down the candidate word list to those that contain the letter + // at the current location - + final words = candidateWords.toBuiltList().rebuild((b) => b - + ..where((b) => b.characters.contains(target.character)) - + ..shuffle()); + + final words = candidateWords.toBuiltList().rebuild( + + (b) => + + b + + ..where((b) => b.characters.contains(target.character)) + + ..shuffle(), + ); + int tryCount = 0; + final start = DateTime.now(); + for (final word in words) { @@ -51537,10 +51680,8 @@ steps: + if (tryCount >= 1000 || deltaTime > Duration(seconds: 10)) { + return (location, direction, null); + } - } - } - - debugPrint('${crossword.width} x ${crossword.height} Crossword generated in ' - - '${DateTime.now().difference(start).formatted}'); + + } + + } + + return (location, direction, null); } @@ -51549,23 +51690,23 @@ steps: patch: | --- b/generate_crossword/step_08/lib/providers.dart +++ a/generate_crossword/step_08/lib/providers.dart - @@ -66,6 +66,7 @@ class Size extends _$Size { + @@ -69,6 +69,7 @@ class Size extends _$Size { @riverpod Stream workQueue(Ref ref) async* { + final workers = ref.watch(workerCountProvider); final size = ref.watch(sizeProvider); final wordListAsync = ref.watch(wordListProvider); - final emptyCrossword = - @@ -83,6 +84,7 @@ Stream workQueue(Ref ref) async* { - data: (wordList) => exploreCrosswordSolutions( - crossword: emptyCrossword, - wordList: wordList, - + maxWorkerCount: workers.count, - ), + final emptyCrossword = model.Crossword.crossword( + @@ -89,6 +90,7 @@ Stream workQueue(Ref ref) async* { + (wordList) => exploreCrosswordSolutions( + crossword: emptyCrossword, + wordList: wordList, + + maxWorkerCount: workers.count, + ), error: (error, stackTrace) async* { debugPrint('Error loading word list: $error'); - @@ -183,3 +185,33 @@ class DisplayInfo extends _$DisplayInfo { + @@ -192,3 +194,33 @@ class DisplayInfo extends _$DisplayInfo { loading: () => model.DisplayInfo.empty, ); } @@ -51602,9 +51743,9 @@ steps: - name: Patch lib/widgets/crossword_info_widget.dart path: generate_crossword/lib/widgets/crossword_info_widget.dart patch: | - --- a/generate_crossword/step_08/lib/widgets/crossword_info_widget.dart - +++ b/generate_crossword/step_08/lib/widgets/crossword_info_widget.dart - @@ -18,6 +18,7 @@ class CrosswordInfoWidget extends ConsumerWidget { + --- b/generate_crossword/step_08/lib/widgets/crossword_info_widget.dart + +++ a/generate_crossword/step_08/lib/widgets/crossword_info_widget.dart + @@ -16,6 +16,7 @@ class CrosswordInfoWidget extends ConsumerWidget { Widget build(BuildContext context, WidgetRef ref) { final size = ref.watch(sizeProvider); final displayInfo = ref.watch(displayInfoProvider); @@ -51612,39 +51753,45 @@ steps: final startTime = ref.watch(startTimeProvider); final endTime = ref.watch(endTimeProvider); final remaining = ref.watch(expectedRemainingTimeProvider); - @@ -63,6 +64,8 @@ class CrosswordInfoWidget extends ConsumerWidget { - _CrosswordInfoRichText( - label: 'Grid filled', - value: displayInfo.gridFilledPercentage), + @@ -63,6 +64,10 @@ class CrosswordInfoWidget extends ConsumerWidget { + label: 'Grid filled', + value: displayInfo.gridFilledPercentage, + ), + _CrosswordInfoRichText( - + label: 'Max worker count', value: workerCount), + + label: 'Max worker count', + + value: workerCount, + + ), switch ((startTime, endTime)) { (null, _) => _CrosswordInfoRichText( - label: 'Time elapsed', + label: 'Time elapsed', - name: Patch lib/widgets/crossword_generator_app.dart path: generate_crossword/lib/widgets/crossword_generator_app.dart patch: | - --- a/generate_crossword/step_08/lib/widgets/crossword_generator_app.dart - +++ b/generate_crossword/step_08/lib/widgets/crossword_generator_app.dart - @@ -75,6 +75,15 @@ class _CrosswordGeneratorMenu extends ConsumerWidget { - ref.read(showDisplayInfoProvider.notifier).toggle(), - child: Text('Display Info'), - ), - + for (final count in BackgroundWorkers.values) - + MenuItemButton( - + leadingIcon: count == ref.watch(workerCountProvider) + --- b/generate_crossword/step_08/lib/widgets/crossword_generator_app.dart + +++ a/generate_crossword/step_08/lib/widgets/crossword_generator_app.dart + @@ -74,6 +74,16 @@ class _CrosswordGeneratorMenu extends ConsumerWidget { + onPressed: () => ref.read(showDisplayInfoProvider.notifier).toggle(), + child: Text('Display Info'), + ), + + for (final count in BackgroundWorkers.values) + + MenuItemButton( + + leadingIcon: + + count == ref.watch(workerCountProvider) + ? Icon(Icons.radio_button_checked_outlined) + : Icon(Icons.radio_button_unchecked_outlined), - + onPressed: () => - + ref.read(workerCountProvider.notifier).setCount(count), - + child: Text(count.label), - + ), - ], - builder: (context, controller, child) => IconButton( - onPressed: () => controller.open(), + + onPressed: + + () => ref.read(workerCountProvider.notifier).setCount(count), + + child: Text(count.label), + + ), + ], + builder: + (context, controller, child) => IconButton( - name: Run build_runner path: generate_crossword dart: run build_runner build --delete-conflicting-outputs + - name: format model.g.dart + path: generate_crossword + dart: format lib/model.g.dart - name: Flutter test path: generate_crossword flutter: test @@ -51688,7 +51835,7 @@ steps: import 'package:flutter_test/flutter_test.dart'; import 'package:generate_crossword/model.dart'; - @@ -484,4 +485,298 @@ void main() { + @@ -515,4 +516,339 @@ void main() { ); expect(queue.candidateWords.length, equals(0)); }); @@ -51707,16 +51854,22 @@ steps: + word: 'works', + location: Location.at(0, 0), + direction: Direction.down, - + ) + + ), + ], + ); + + final re = RegExp('^[a-z]+\$'); + final str = await rootBundle.loadString('assets/words.txt'); - + final words = str.split('\n').toBuiltSet().rebuild((b) => b - + ..map((str) => str.toLowerCase().trim()) - + ..removeWhere((str) => str.length < 3) - + ..removeWhere((str) => re.stringMatch(str) == null)); + + final words = str + + .split('\n') + + .toBuiltSet() + + .rebuild( + + (b) => + + b + + ..map((str) => str.toLowerCase().trim()) + + ..removeWhere((str) => str.length < 3) + + ..removeWhere((str) => re.stringMatch(str) == null), + + ); + + final puzzle = CrosswordPuzzleGame.from( + crossword: crossword, @@ -51727,132 +51880,144 @@ steps: + expect(puzzle.alternateWords.keys.length, 1); + expect(puzzle.alternateWords[Location.at(0, 0)]?.keys.length, 2); + expect( - + puzzle.alternateWords[Location.at(0, 0)]?[Direction.down]?.length, 4); + + puzzle.alternateWords[Location.at(0, 0)]?[Direction.down]?.length, + + 4, + + ); + expect( - + puzzle.alternateWords[Location.at(0, 0)]?[Direction.across]?.length, 4); + + puzzle.alternateWords[Location.at(0, 0)]?[Direction.across]?.length, + + 4, + + ); + }); + + test('Allow non-overlapping words with requireOverlap: false', () { + Crossword? crossword = Crossword.crossword(width: 50, height: 50); + + crossword = crossword.addWord( - + direction: Direction.across, - + location: Location.at(0, 0), - + word: 'word', - + requireOverlap: false); + + direction: Direction.across, + + location: Location.at(0, 0), + + word: 'word', + + requireOverlap: false, + + ); + + if (crossword == null) fail("crossword shouldn't be null"); + + crossword = crossword.addWord( - + direction: Direction.across, - + location: Location.at(3, 3), - + word: 'another', - + requireOverlap: false); + + direction: Direction.across, + + location: Location.at(3, 3), + + word: 'another', + + requireOverlap: false, + + ); + + if (crossword == null) fail("crossword shouldn't be null"); + }); + + test( - + 'Adding overlapping across words returns null with requireOverlap: false', - + () { - + Crossword? crossword = Crossword.crossword(width: 50, height: 50); - + expect(crossword.valid, isTrue); + + 'Adding overlapping across words returns null with requireOverlap: false', + + () { + + Crossword? crossword = Crossword.crossword(width: 50, height: 50); + + expect(crossword.valid, isTrue); + - + final topLeft = Location.at(0, 0); + + final topLeft = Location.at(0, 0); + - + crossword = crossword.addWord( - + direction: Direction.across, - + location: topLeft, - + word: 'this', - + requireOverlap: false, - + ); - + if (crossword == null) fail("crossword shouldn't be null"); - + expect(crossword.valid, true); + + crossword = crossword.addWord( + + direction: Direction.across, + + location: topLeft, + + word: 'this', + + requireOverlap: false, + + ); + + if (crossword == null) fail("crossword shouldn't be null"); + + expect(crossword.valid, true); + - + final crossword2 = crossword.addWord( - + direction: Direction.across, - + location: topLeft, - + word: 'that', - + requireOverlap: false, - + ); - + expect(crossword2, isNull); - + }); + + final crossword2 = crossword.addWord( + + direction: Direction.across, + + location: topLeft, + + word: 'that', + + requireOverlap: false, + + ); + + expect(crossword2, isNull); + + }, + + ); + - + test('Adding overlapping down words returns null with requireOverlap: false', - + () { - + Crossword? crossword = Crossword.crossword(width: 50, height: 50); + + test( + + 'Adding overlapping down words returns null with requireOverlap: false', + + () { + + Crossword? crossword = Crossword.crossword(width: 50, height: 50); + - + expect(crossword.valid, true); + + expect(crossword.valid, true); + - + final topLeft = Location.at(0, 0); + + final topLeft = Location.at(0, 0); + - + crossword = crossword - + .addWord( - + location: topLeft, - + word: 'this', - + direction: Direction.down, - + requireOverlap: false, - + )! - + .addWord( - + location: topLeft, - + word: 'total', - + direction: Direction.across, - + requireOverlap: false, - + )!; + + crossword = + + crossword + + .addWord( + + location: topLeft, + + word: 'this', + + direction: Direction.down, + + requireOverlap: false, + + )! + + .addWord( + + location: topLeft, + + word: 'total', + + direction: Direction.across, + + requireOverlap: false, + + )!; + - + expect(crossword.valid, isTrue); + + expect(crossword.valid, isTrue); + - + final crossword2 = crossword.addWord( - + direction: Direction.down, - + location: topLeft, - + word: 'that', - + requireOverlap: false, - + ); - + expect(crossword2, isNull); - + }); + + final crossword2 = crossword.addWord( + + direction: Direction.down, + + location: topLeft, + + word: 'that', + + requireOverlap: false, + + ); + + expect(crossword2, isNull); + + }, + + ); + - + test('Adding words out of bounds returns null with requireOverlap: false', - + () { - + final crossword = Crossword.crossword(width: 50, height: 50); + + test( + + 'Adding words out of bounds returns null with requireOverlap: false', + + () { + + final crossword = Crossword.crossword(width: 50, height: 50); + - + expect(crossword.valid, true); + + expect(crossword.valid, true); + - + // Above the top of the board - + final crossword1 = crossword.addWord( - + direction: Direction.down, - + location: Location.at(0, -1), - + word: 'this', - + requireOverlap: false, - + ); - + expect(crossword1, isNull); + + // Above the top of the board + + final crossword1 = crossword.addWord( + + direction: Direction.down, + + location: Location.at(0, -1), + + word: 'this', + + requireOverlap: false, + + ); + + expect(crossword1, isNull); + - + // To the left of the board - + final crossword2 = crossword.addWord( - + direction: Direction.down, - + location: Location.at(-1, 0), - + word: 'that', - + requireOverlap: false, - + ); - + expect(crossword2, isNull); + + // To the left of the board + + final crossword2 = crossword.addWord( + + direction: Direction.down, + + location: Location.at(-1, 0), + + word: 'that', + + requireOverlap: false, + + ); + + expect(crossword2, isNull); + - + // To the right of the board - + final crossword3 = crossword.addWord( - + direction: Direction.down, - + location: Location.at(51, 0), - + word: 'this', - + requireOverlap: false, - + ); - + expect(crossword3, isNull); + + // To the right of the board + + final crossword3 = crossword.addWord( + + direction: Direction.down, + + location: Location.at(51, 0), + + word: 'this', + + requireOverlap: false, + + ); + + expect(crossword3, isNull); + - + // Below the bottom of the board - + final crossword4 = crossword.addWord( - + direction: Direction.down, - + location: Location.at(0, 51), - + word: 'that', - + requireOverlap: false, - + ); - + expect(crossword4, isNull); - + }); + + // Below the bottom of the board + + final crossword4 = crossword.addWord( + + direction: Direction.down, + + location: Location.at(0, 51), + + word: 'that', + + requireOverlap: false, + + ); + + expect(crossword4, isNull); + + }, + + ); + + test('CrosswordPuzzleGame allows alternate play', () async { + final topLeft = Location.at(0, 0); @@ -51883,10 +52048,16 @@ steps: + + final re = RegExp('^[a-z]+\$'); + final str = await rootBundle.loadString('assets/words.txt'); - + final words = str.split('\n').toBuiltSet().rebuild((b) => b - + ..map((str) => str.toLowerCase().trim()) - + ..removeWhere((str) => str.length < 3) - + ..removeWhere((str) => re.stringMatch(str) == null)); + + final words = str + + .split('\n') + + .toBuiltSet() + + .rebuild( + + (b) => + + b + + ..map((str) => str.toLowerCase().trim()) + + ..removeWhere((str) => str.length < 3) + + ..removeWhere((str) => re.stringMatch(str) == null), + + ); + + CrosswordPuzzleGame? puzzle = CrosswordPuzzleGame.from( + crossword: crossword, @@ -51909,17 +52080,19 @@ steps: + } + + puzzle = puzzle.selectWord( - + location: topLeft, - + word: topLeftAcrossAlternates.first, - + direction: Direction.across); + + location: topLeft, + + word: topLeftAcrossAlternates.first, + + direction: Direction.across, + + ); + if (puzzle == null) { + fail('puzzle should not be null'); + } + + puzzle = puzzle.selectWord( - + location: downBy4, - + word: downBy4AcrossAlternates.first, - + direction: Direction.across); + + location: downBy4, + + word: downBy4AcrossAlternates.first, + + direction: Direction.across, + + ); + if (puzzle == null) { + fail('puzzle should not be null'); + } @@ -51956,10 +52129,16 @@ steps: + + final re = RegExp('^[a-z]+\$'); + final str = await rootBundle.loadString('assets/words.txt'); - + final words = str.split('\n').toBuiltSet().rebuild((b) => b - + ..map((str) => str.toLowerCase().trim()) - + ..removeWhere((str) => str.length < 3) - + ..removeWhere((str) => re.stringMatch(str) == null)); + + final words = str + + .split('\n') + + .toBuiltSet() + + .rebuild( + + (b) => + + b + + ..map((str) => str.toLowerCase().trim()) + + ..removeWhere((str) => str.length < 3) + + ..removeWhere((str) => re.stringMatch(str) == null), + + ); + + CrosswordPuzzleGame? puzzle = CrosswordPuzzleGame.from( + crossword: crossword, @@ -51967,19 +52146,28 @@ steps: + ); + + puzzle = puzzle.selectWord( - + location: topLeft, word: 'word', direction: Direction.across); + + location: topLeft, + + word: 'word', + + direction: Direction.across, + + ); + if (puzzle == null) { + fail('puzzle should not be null'); + } + + puzzle = puzzle.selectWord( - + location: topLeft, word: 'works', direction: Direction.down); + + location: topLeft, + + word: 'works', + + direction: Direction.down, + + ); + if (puzzle == null) { + fail('puzzle should not be null'); + } + + puzzle = puzzle.selectWord( - + location: downBy4, word: 'silent', direction: Direction.across); + + location: downBy4, + + word: 'silent', + + direction: Direction.across, + + ); + if (puzzle == null) { + fail('puzzle should not be null'); + } @@ -51992,7 +52180,7 @@ steps: patch: | --- b/generate_crossword/step_09/lib/model.dart +++ a/generate_crossword/step_09/lib/model.dart - @@ -249,6 +249,7 @@ abstract class Crossword implements Built { + @@ -255,6 +255,7 @@ abstract class Crossword implements Built { required Location location, required String word, required Direction direction, @@ -52000,7 +52188,7 @@ steps: }) { // Require that the word is not already in the crossword. if (words.map((crosswordWord) => crosswordWord.word).contains(word)) { - @@ -277,7 +278,10 @@ abstract class Crossword implements Built { + @@ -283,7 +284,10 @@ abstract class Crossword implements Built { } } } @@ -52012,7 +52200,7 @@ steps: return null; } - @@ -533,6 +537,173 @@ abstract class DisplayInfo implements Built { + @@ -565,6 +569,196 @@ abstract class DisplayInfo implements Built { DisplayInfo._(); } @@ -52051,20 +52239,24 @@ steps: + if (puzzle.selectedWords + .where((b) => b.direction == direction && b.location == location) + .isNotEmpty) { - + puzzle = puzzle.rebuild((b) => b - + ..selectedWords.removeWhere( - + (selectedWord) => - + selectedWord.location == location && - + selectedWord.direction == direction, - + )); + + puzzle = puzzle.rebuild( + + (b) => + + b + + ..selectedWords.removeWhere( + + (selectedWord) => + + selectedWord.location == location && + + selectedWord.direction == direction, + + ), + + ); + } + + return null != + puzzle.crosswordFromSelectedWords.addWord( - + location: location, - + word: word, - + direction: direction, - + requireOverlap: false); + + location: location, + + word: word, + + direction: direction, + + requireOverlap: false, + + ); + } + + CrosswordPuzzleGame? selectWord({ @@ -52087,33 +52279,44 @@ steps: + if (puzzle.selectedWords + .where((b) => b.direction == direction && b.location == location) + .isNotEmpty) { - + puzzle = puzzle.rebuild((b) => b - + ..selectedWords.removeWhere( - + (selectedWord) => - + selectedWord.location == location && - + selectedWord.direction == direction, - + )); + + puzzle = puzzle.rebuild( + + (b) => + + b + + ..selectedWords.removeWhere( + + (selectedWord) => + + selectedWord.location == location && + + selectedWord.direction == direction, + + ), + + ); + } + + // Check if the selected word meshes with the already selected words. + // Note this version of the crossword does not enforce overlap to + // allow the player to select words anywhere on the grid. Enforcing words + // to be solved in order is a possible alternative. - + final updatedSelectedWordsCrossword = - + puzzle.crosswordFromSelectedWords.addWord( - + location: location, - + word: word, - + direction: direction, - + requireOverlap: false, - + ); + + final updatedSelectedWordsCrossword = puzzle.crosswordFromSelectedWords + + .addWord( + + location: location, + + word: word, + + direction: direction, + + requireOverlap: false, + + ); + + // Make sure the selected word is in the crossword or is an alternate word. + if (updatedSelectedWordsCrossword != null) { + if (puzzle.crossword.words.contains(crosswordWord) || + puzzle.alternateWords[location]?[direction]?.contains(word) == true) { - + return puzzle.rebuild((b) => b - + ..selectedWords.add(CrosswordWord.word( - + word: word, location: location, direction: direction))); + + return puzzle.rebuild( + + (b) => + + b + + ..selectedWords.add( + + CrosswordWord.word( + + word: word, + + location: location, + + direction: direction, + + ), + + ), + + ); + } + } + return null; @@ -52121,7 +52324,10 @@ steps: + + /// The crossword from the selected words. + Crossword get crosswordFromSelectedWords => Crossword.crossword( - + width: crossword.width, height: crossword.height, words: selectedWords); + + width: crossword.width, + + height: crossword.height, + + words: selectedWords, + + ); + + /// Test if the puzzle is solved. Note, this allows for the possibility of + /// multiple solutions. @@ -52137,8 +52343,9 @@ steps: + required BuiltSet candidateWords, + }) { + // Remove all of the currently used words from the list of candidates - + candidateWords = candidateWords - + .rebuild((p0) => p0.removeAll(crossword.words.map((p1) => p1.word))); + + candidateWords = candidateWords.rebuild( + + (p0) => p0.removeAll(crossword.words.map((p1) => p1.word)), + + ); + + // This is the list of alternate words for each word in the crossword + var alternates = @@ -52146,14 +52353,18 @@ steps: + + // Build the alternate words for each word in the crossword + for (final crosswordWord in crossword.words) { - + final alternateWords = candidateWords.toBuiltList().rebuild((b) => b - + ..where((b) => b.length == crosswordWord.word.length) - + ..shuffle() - + ..take(4) - + ..sort()); + + final alternateWords = candidateWords.toBuiltList().rebuild( + + (b) => + + b + + ..where((b) => b.length == crosswordWord.word.length) + + ..shuffle() + + ..take(4) + + ..sort(), + + ); + - + candidateWords = - + candidateWords.rebuild((b) => b.removeAll(alternateWords)); + + candidateWords = candidateWords.rebuild( + + (b) => b.removeAll(alternateWords), + + ); + + alternates = alternates.rebuild( + (b) => b.updateValue( @@ -52177,16 +52388,16 @@ steps: + }); + } + - + factory CrosswordPuzzleGame( - + [void Function(CrosswordPuzzleGameBuilder)? updates]) = - + _$CrosswordPuzzleGame; + + factory CrosswordPuzzleGame([ + + void Function(CrosswordPuzzleGameBuilder)? updates, + + ]) = _$CrosswordPuzzleGame; + CrosswordPuzzleGame._(); +} + /// Construct the serialization/deserialization code for the data model. @SerializersFor([ Location, - @@ -541,5 +712,6 @@ abstract class DisplayInfo implements Built { + @@ -573,5 +767,6 @@ abstract class DisplayInfo implements Built { CrosswordCharacter, WorkQueue, DisplayInfo, @@ -52215,15 +52426,15 @@ steps: /// A provider for the wordlist to use when generating the crossword. @riverpod Future> wordList(Ref ref) async { - @@ -66,7 +67,6 @@ class Size extends _$Size { + @@ -69,7 +70,6 @@ class Size extends _$Size { @riverpod Stream workQueue(Ref ref) async* { - final workers = ref.watch(workerCountProvider); final size = ref.watch(sizeProvider); final wordListAsync = ref.watch(wordListProvider); - final emptyCrossword = - @@ -77,14 +77,11 @@ Stream workQueue(Ref ref) async* { + final emptyCrossword = model.Crossword.crossword( + @@ -82,15 +82,12 @@ Stream workQueue(Ref ref) async* { startLocation: model.Location.at(0, 0), ); @@ -52231,15 +52442,16 @@ steps: - ref.read(endTimeProvider.notifier).clear(); - yield* wordListAsync.when( - data: (wordList) => exploreCrosswordSolutions( - crossword: emptyCrossword, - wordList: wordList, - - maxWorkerCount: workers.count, - + maxWorkerCount: backgroundWorkerCount, - ), + data: + (wordList) => exploreCrosswordSolutions( + crossword: emptyCrossword, + wordList: wordList, + - maxWorkerCount: workers.count, + + maxWorkerCount: backgroundWorkerCount, + ), error: (error, stackTrace) async* { debugPrint('Error loading word list: $error'); - @@ -94,124 +91,78 @@ Stream workQueue(Ref ref) async* { + @@ -100,127 +97,80 @@ Stream workQueue(Ref ref) async* { yield emptyWorkQueue; }, ); @@ -52258,8 +52470,8 @@ steps: - _start = DateTime.now(); - ref.invalidateSelf(); - } - } - + -} + - -@Riverpod(keepAlive: true) -class EndTime extends _$EndTime { - @override @@ -52276,8 +52488,8 @@ steps: - _end = DateTime.now(); - ref.invalidateSelf(); - } - -} - - + } + -const _estimatedTotalCoverage = 0.54; - @riverpod @@ -52294,10 +52506,11 @@ steps: - try { - final soFar = DateTime.now().difference(startTime); - final completedPercentage = min( - - 0.99, - - (workQueue.crossword.characters.length / - - (workQueue.crossword.width * workQueue.crossword.height) / - - _estimatedTotalCoverage)); + - 0.99, + - (workQueue.crossword.characters.length / + - (workQueue.crossword.width * workQueue.crossword.height) / + - _estimatedTotalCoverage), + - ); - final expectedTotal = soFar.inSeconds / completedPercentage; - final expectedRemaining = expectedTotal - soFar.inSeconds; - return Duration(seconds: expectedRemaining.toInt()); @@ -52336,8 +52549,10 @@ steps: + (_puzzle.crossword.height != size.height || + _puzzle.crossword.width != size.width || + _puzzle.crossword != workQueue.crossword)) { - + compute(_puzzleFromCrosswordTrampoline, (workQueue.crossword, wordList)) - + .then((puzzle) { + + compute(_puzzleFromCrosswordTrampoline, ( + + workQueue.crossword, + + wordList, + + )).then((puzzle) { + _puzzle = puzzle; + ref.invalidateSelf(); + }); @@ -52351,13 +52566,15 @@ steps: -@riverpod -class DisplayInfo extends _$DisplayInfo { - @override - - model.DisplayInfo build() => ref.watch(workQueueProvider).when( + - model.DisplayInfo build() => ref + - .watch(workQueueProvider) + - .when( - data: (workQueue) => model.DisplayInfo.from(workQueue: workQueue), - error: (error, stackTrace) => model.DisplayInfo.empty, - loading: () => model.DisplayInfo.empty, - ); -} - - + -enum BackgroundWorkers { - one(1), - two(2), @@ -52369,25 +52586,17 @@ steps: - oneTwentyEight(128); - - const BackgroundWorkers(this.count); - - - final int count; - - String get label => count.toString(); - -} - - - -/// A provider that holds the current number of background workers to use. - -@Riverpod(keepAlive: true) - -class WorkerCount extends _$WorkerCount { - - var _count = BackgroundWorkers.four; - - - - @override - - BackgroundWorkers build() => _count; + Future selectWord({ + required model.Location location, + required String word, + required model.Direction direction, + }) async { - + final candidate = await compute( - + _puzzleSelectWordTrampoline, (_puzzle, location, word, direction)); + + final candidate = await compute(_puzzleSelectWordTrampoline, ( + + _puzzle, + + location, + + word, + + direction, + + )); + + if (candidate != null) { + _puzzle = candidate; @@ -52397,9 +52606,8 @@ steps: + } + } - - void setCount(BackgroundWorkers count) { - - _count = count; - - ref.invalidateSelf(); + - final int count; + - String get label => count.toString(); + bool canSelectWord({ + required model.Location location, + required String word, @@ -52410,24 +52618,31 @@ steps: + word: word, + direction: direction, + ); - } + + } } - + + + -/// A provider that holds the current number of background workers to use. + -@Riverpod(keepAlive: true) + -class WorkerCount extends _$WorkerCount { + - var _count = BackgroundWorkers.four; +// Trampoline functions to disentangle these Isolate target calls from the +// unsendable reference to the [Puzzle] provider. - + + + - @override + - BackgroundWorkers build() => _count; +Future _puzzleFromCrosswordTrampoline( - + (model.Crossword, BuiltSet) args) async => + + (model.Crossword, BuiltSet) args, + +) async => + model.CrosswordPuzzleGame.from(crossword: args.$1, candidateWords: args.$2); - + + + - void setCount(BackgroundWorkers count) { + - _count = count; + - ref.invalidateSelf(); + - } + -} +model.CrosswordPuzzleGame? _puzzleSelectWordTrampoline( - + ( - + model.CrosswordPuzzleGame, - + model.Location, - + String, - + model.Direction - + ) args) => - + args.$1.selectWord(location: args.$2, word: args.$3, direction: args.$4); + + (model.CrosswordPuzzleGame, model.Location, String, model.Direction) args, + +) => args.$1.selectWord(location: args.$2, word: args.$3, direction: args.$4); - name: Remove the old widgets rmdir: generate_crossword/lib/widgets - name: Create the new widgets @@ -52464,26 +52679,29 @@ steps: title: Text('Crossword Puzzle'), ), body: SafeArea( - child: Consumer(builder: (context, ref, _) { - final workQueueAsync = ref.watch(workQueueProvider); - final puzzleSolved = - ref.watch(puzzleProvider.select((puzzle) => puzzle.solved)); + child: Consumer( + builder: (context, ref, _) { + final workQueueAsync = ref.watch(workQueueProvider); + final puzzleSolved = ref.watch( + puzzleProvider.select((puzzle) => puzzle.solved), + ); - return workQueueAsync.when( - data: (workQueue) { - if (puzzleSolved) { - return PuzzleCompletedWidget(); - } - if (workQueue.isCompleted && - workQueue.crossword.characters.isNotEmpty) { - return CrosswordPuzzleWidget(); - } - return CrosswordGeneratorWidget(); - }, - loading: () => Center(child: CircularProgressIndicator()), - error: (error, stackTrace) => Center(child: Text('$error')), - ); - }), + return workQueueAsync.when( + data: (workQueue) { + if (puzzleSolved) { + return PuzzleCompletedWidget(); + } + if (workQueue.isCompleted && + workQueue.crossword.characters.isNotEmpty) { + return CrosswordPuzzleWidget(); + } + return CrosswordGeneratorWidget(); + }, + loading: () => Center(child: CircularProgressIndicator()), + error: (error, stackTrace) => Center(child: Text('$error')), + ); + }, + ), ), ), ); @@ -52504,21 +52722,23 @@ steps: class _CrosswordPuzzleAppMenu extends ConsumerWidget { @override Widget build(BuildContext context, WidgetRef ref) => MenuAnchor( - menuChildren: [ - for (final entry in CrosswordSize.values) - MenuItemButton( - onPressed: () => ref.read(sizeProvider.notifier).setSize(entry), - leadingIcon: entry == ref.watch(sizeProvider) + menuChildren: [ + for (final entry in CrosswordSize.values) + MenuItemButton( + onPressed: () => ref.read(sizeProvider.notifier).setSize(entry), + leadingIcon: + entry == ref.watch(sizeProvider) ? Icon(Icons.radio_button_checked_outlined) : Icon(Icons.radio_button_unchecked_outlined), - child: Text(entry.label), - ), - ], - builder: (context, controller, child) => IconButton( + child: Text(entry.label), + ), + ], + builder: + (context, controller, child) => IconButton( onPressed: () => controller.open(), icon: Icon(Icons.settings), ), - ); + ); } - name: Add lib/widgets/crossword_generator_widget.dart path: generate_crossword/lib/widgets/crossword_generator_widget.dart @@ -52569,8 +52789,9 @@ steps: final explorationCell = ref.watch( workQueueProvider.select( (workQueueAsync) => workQueueAsync.when( - data: (workQueue) => - workQueue.locationsToTry.keys.contains(location), + data: + (workQueue) => + workQueue.locationsToTry.keys.contains(location), error: (error, stackTrace) => false, loading: () => false, ), @@ -52581,18 +52802,20 @@ steps: return AnimatedContainer( duration: Durations.extralong1, curve: Curves.easeInOut, - color: explorationCell - ? Theme.of(context).colorScheme.primary - : Theme.of(context).colorScheme.onPrimary, + color: + explorationCell + ? Theme.of(context).colorScheme.primary + : Theme.of(context).colorScheme.onPrimary, child: Center( child: AnimatedDefaultTextStyle( duration: Durations.extralong1, curve: Curves.easeInOut, style: TextStyle( fontSize: 24, - color: explorationCell - ? Theme.of(context).colorScheme.onPrimary - : Theme.of(context).colorScheme.primary, + color: + explorationCell + ? Theme.of(context).colorScheme.onPrimary + : Theme.of(context).colorScheme.primary, ), child: Text('•'), // https://www.compart.com/en/unicode/U+2022 ), @@ -52614,9 +52837,11 @@ steps: foregroundDecoration: TableSpanDecoration( border: TableSpanBorder( leading: BorderSide( - color: Theme.of(context).colorScheme.onPrimaryContainer), + color: Theme.of(context).colorScheme.onPrimaryContainer, + ), trailing: BorderSide( - color: Theme.of(context).colorScheme.onPrimaryContainer), + color: Theme.of(context).colorScheme.onPrimaryContainer, + ), ), ), ); @@ -52659,41 +52884,60 @@ steps: return TableViewCell( child: Consumer( builder: (context, ref, _) { - final character = ref.watch(puzzleProvider - .select((puzzle) => puzzle.crossword.characters[location])); - final selectedCharacter = ref.watch(puzzleProvider.select((puzzle) => - puzzle.crosswordFromSelectedWords.characters[location])); - final alternateWords = ref - .watch(puzzleProvider.select((puzzle) => puzzle.alternateWords)); + final character = ref.watch( + puzzleProvider.select( + (puzzle) => puzzle.crossword.characters[location], + ), + ); + final selectedCharacter = ref.watch( + puzzleProvider.select( + (puzzle) => + puzzle.crosswordFromSelectedWords.characters[location], + ), + ); + final alternateWords = ref.watch( + puzzleProvider.select((puzzle) => puzzle.alternateWords), + ); if (character != null) { final acrossWord = character.acrossWord; var acrossWords = BuiltList(); if (acrossWord != null) { - acrossWords = acrossWords.rebuild((b) => b - ..add(acrossWord.word) - ..addAll(alternateWords[acrossWord.location] - ?[acrossWord.direction] ?? - []) - ..sort()); + acrossWords = acrossWords.rebuild( + (b) => + b + ..add(acrossWord.word) + ..addAll( + alternateWords[acrossWord.location]?[acrossWord + .direction] ?? + [], + ) + ..sort(), + ); } final downWord = character.downWord; var downWords = BuiltList(); if (downWord != null) { - downWords = downWords.rebuild((b) => b - ..add(downWord.word) - ..addAll(alternateWords[downWord.location] - ?[downWord.direction] ?? - []) - ..sort()); + downWords = downWords.rebuild( + (b) => + b + ..add(downWord.word) + ..addAll( + alternateWords[downWord.location]?[downWord + .direction] ?? + [], + ) + ..sort(), + ); } return MenuAnchor( builder: (context, controller, _) { return GestureDetector( - onTapDown: (details) => - controller.open(position: details.localPosition), + onTapDown: + (details) => + controller.open(position: details.localPosition), child: AnimatedContainer( duration: Durations.extralong1, curve: Curves.easeInOut, @@ -52755,9 +52999,11 @@ steps: foregroundDecoration: TableSpanDecoration( border: TableSpanBorder( leading: BorderSide( - color: Theme.of(context).colorScheme.onPrimaryContainer), + color: Theme.of(context).colorScheme.onPrimaryContainer, + ), trailing: BorderSide( - color: Theme.of(context).colorScheme.onPrimaryContainer), + color: Theme.of(context).colorScheme.onPrimaryContainer, + ), ), ), ); @@ -52781,18 +53027,29 @@ steps: Widget build(BuildContext context, WidgetRef ref) { final notifier = ref.read(puzzleProvider.notifier); return MenuItemButton( - onPressed: ref.watch(puzzleProvider.select((puzzle) => - puzzle.canSelectWord( - location: location, word: word, direction: direction))) - ? () => notifier.selectWord( - location: location, word: word, direction: direction) - : null, - leadingIcon: switch (direction) { - Direction.across => selectedCharacter?.acrossWord?.word == word, - Direction.down => selectedCharacter?.downWord?.word == word, - } - ? Icon(Icons.radio_button_checked_outlined) - : Icon(Icons.radio_button_unchecked_outlined), + onPressed: + ref.watch( + puzzleProvider.select( + (puzzle) => puzzle.canSelectWord( + location: location, + word: word, + direction: direction, + ), + ), + ) + ? () => notifier.selectWord( + location: location, + word: word, + direction: direction, + ) + : null, + leadingIcon: + switch (direction) { + Direction.across => selectedCharacter?.acrossWord?.word == word, + Direction.down => selectedCharacter?.downWord?.word == word, + } + ? Icon(Icons.radio_button_checked_outlined) + : Icon(Icons.radio_button_unchecked_outlined), child: Text(word), ); } @@ -52814,10 +53071,7 @@ steps: return Center( child: Text( 'Puzzle Completed!', - style: TextStyle( - fontSize: 36, - fontWeight: FontWeight.bold, - ), + style: TextStyle(fontSize: 36, fontWeight: FontWeight.bold), ), ); } @@ -52854,6 +53108,9 @@ steps: - name: Run build_runner path: generate_crossword dart: run build_runner build --delete-conflicting-outputs + - name: format model.g.dart + path: generate_crossword + dart: format lib/model.g.dart - name: Flutter test path: generate_crossword flutter: test diff --git a/generate_crossword/step_02/android/app/build.gradle b/generate_crossword/step_02/android/app/build.gradle.kts similarity index 84% rename from generate_crossword/step_02/android/app/build.gradle rename to generate_crossword/step_02/android/app/build.gradle.kts index d4a93e6565..3d3cf0bf13 100644 --- a/generate_crossword/step_02/android/app/build.gradle +++ b/generate_crossword/step_02/android/app/build.gradle.kts @@ -1,8 +1,8 @@ plugins { - id "com.android.application" - id "kotlin-android" + id("com.android.application") + id("kotlin-android") // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. - id "dev.flutter.flutter-gradle-plugin" + id("dev.flutter.flutter-gradle-plugin") } android { @@ -16,7 +16,7 @@ android { } kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8 + jvmTarget = JavaVersion.VERSION_1_8.toString() } defaultConfig { @@ -34,7 +34,7 @@ android { release { // TODO: Add your own signing config for the release build. // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig = signingConfigs.debug + signingConfig = signingConfigs.getByName("debug") } } } diff --git a/generate_crossword/step_02/android/build.gradle b/generate_crossword/step_02/android/build.gradle deleted file mode 100644 index d2ffbffa4c..0000000000 --- a/generate_crossword/step_02/android/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = "../build" -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(":app") -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/generate_crossword/step_02/android/build.gradle.kts b/generate_crossword/step_02/android/build.gradle.kts new file mode 100644 index 0000000000..89176ef44e --- /dev/null +++ b/generate_crossword/step_02/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/generate_crossword/step_02/android/gradle.properties b/generate_crossword/step_02/android/gradle.properties index 2597170821..f018a61817 100644 --- a/generate_crossword/step_02/android/gradle.properties +++ b/generate_crossword/step_02/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/generate_crossword/step_02/android/gradle/wrapper/gradle-wrapper.properties b/generate_crossword/step_02/android/gradle/wrapper/gradle-wrapper.properties index 7bb2df6ba6..afa1e8eb0a 100644 --- a/generate_crossword/step_02/android/gradle/wrapper/gradle-wrapper.properties +++ b/generate_crossword/step_02/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip diff --git a/generate_crossword/step_02/android/settings.gradle b/generate_crossword/step_02/android/settings.gradle deleted file mode 100644 index b9e43bd376..0000000000 --- a/generate_crossword/step_02/android/settings.gradle +++ /dev/null @@ -1,25 +0,0 @@ -pluginManagement { - def flutterSdkPath = { - def properties = new Properties() - file("local.properties").withInputStream { properties.load(it) } - def flutterSdkPath = properties.getProperty("flutter.sdk") - assert flutterSdkPath != null, "flutter.sdk not set in local.properties" - return flutterSdkPath - }() - - includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") - - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} - -plugins { - id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.1.0" apply false - id "org.jetbrains.kotlin.android" version "1.8.22" apply false -} - -include ":app" diff --git a/generate_crossword/step_02/android/settings.gradle.kts b/generate_crossword/step_02/android/settings.gradle.kts new file mode 100644 index 0000000000..a439442c20 --- /dev/null +++ b/generate_crossword/step_02/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.0" apply false + id("org.jetbrains.kotlin.android") version "1.8.22" apply false +} + +include(":app") diff --git a/generate_crossword/step_02/pubspec.yaml b/generate_crossword/step_02/pubspec.yaml index 7661a00a30..2409920f75 100644 --- a/generate_crossword/step_02/pubspec.yaml +++ b/generate_crossword/step_02/pubspec.yaml @@ -13,7 +13,7 @@ dependencies: built_value: ^8.9.2 characters: ^1.3.0 flutter_riverpod: ^2.6.1 - intl: ^0.19.0 + intl: ^0.20.0 riverpod: ^2.6.1 riverpod_annotation: ^2.6.1 two_dimensional_scrollables: ^0.3.3 diff --git a/generate_crossword/step_04/android/app/build.gradle b/generate_crossword/step_03/android/app/build.gradle.kts similarity index 84% rename from generate_crossword/step_04/android/app/build.gradle rename to generate_crossword/step_03/android/app/build.gradle.kts index d4a93e6565..3d3cf0bf13 100644 --- a/generate_crossword/step_04/android/app/build.gradle +++ b/generate_crossword/step_03/android/app/build.gradle.kts @@ -1,8 +1,8 @@ plugins { - id "com.android.application" - id "kotlin-android" + id("com.android.application") + id("kotlin-android") // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. - id "dev.flutter.flutter-gradle-plugin" + id("dev.flutter.flutter-gradle-plugin") } android { @@ -16,7 +16,7 @@ android { } kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8 + jvmTarget = JavaVersion.VERSION_1_8.toString() } defaultConfig { @@ -34,7 +34,7 @@ android { release { // TODO: Add your own signing config for the release build. // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig = signingConfigs.debug + signingConfig = signingConfigs.getByName("debug") } } } diff --git a/generate_crossword/step_03/android/build.gradle b/generate_crossword/step_03/android/build.gradle deleted file mode 100644 index d2ffbffa4c..0000000000 --- a/generate_crossword/step_03/android/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = "../build" -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(":app") -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/generate_crossword/step_03/android/build.gradle.kts b/generate_crossword/step_03/android/build.gradle.kts new file mode 100644 index 0000000000..89176ef44e --- /dev/null +++ b/generate_crossword/step_03/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/generate_crossword/step_03/android/gradle.properties b/generate_crossword/step_03/android/gradle.properties index 2597170821..f018a61817 100644 --- a/generate_crossword/step_03/android/gradle.properties +++ b/generate_crossword/step_03/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/generate_crossword/step_03/android/gradle/wrapper/gradle-wrapper.properties b/generate_crossword/step_03/android/gradle/wrapper/gradle-wrapper.properties index 7bb2df6ba6..afa1e8eb0a 100644 --- a/generate_crossword/step_03/android/gradle/wrapper/gradle-wrapper.properties +++ b/generate_crossword/step_03/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip diff --git a/generate_crossword/step_03/android/settings.gradle b/generate_crossword/step_03/android/settings.gradle deleted file mode 100644 index b9e43bd376..0000000000 --- a/generate_crossword/step_03/android/settings.gradle +++ /dev/null @@ -1,25 +0,0 @@ -pluginManagement { - def flutterSdkPath = { - def properties = new Properties() - file("local.properties").withInputStream { properties.load(it) } - def flutterSdkPath = properties.getProperty("flutter.sdk") - assert flutterSdkPath != null, "flutter.sdk not set in local.properties" - return flutterSdkPath - }() - - includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") - - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} - -plugins { - id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.1.0" apply false - id "org.jetbrains.kotlin.android" version "1.8.22" apply false -} - -include ":app" diff --git a/generate_crossword/step_03/android/settings.gradle.kts b/generate_crossword/step_03/android/settings.gradle.kts new file mode 100644 index 0000000000..a439442c20 --- /dev/null +++ b/generate_crossword/step_03/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.0" apply false + id("org.jetbrains.kotlin.android") version "1.8.22" apply false +} + +include(":app") diff --git a/generate_crossword/step_03/pubspec.yaml b/generate_crossword/step_03/pubspec.yaml index 23da5fd396..0790c94371 100644 --- a/generate_crossword/step_03/pubspec.yaml +++ b/generate_crossword/step_03/pubspec.yaml @@ -13,7 +13,7 @@ dependencies: built_value: ^8.9.2 characters: ^1.3.0 flutter_riverpod: ^2.6.1 - intl: ^0.19.0 + intl: ^0.20.0 riverpod: ^2.6.1 riverpod_annotation: ^2.6.1 two_dimensional_scrollables: ^0.3.3 diff --git a/generate_crossword/step_05_a/android/app/build.gradle b/generate_crossword/step_04/android/app/build.gradle.kts similarity index 84% rename from generate_crossword/step_05_a/android/app/build.gradle rename to generate_crossword/step_04/android/app/build.gradle.kts index d4a93e6565..3d3cf0bf13 100644 --- a/generate_crossword/step_05_a/android/app/build.gradle +++ b/generate_crossword/step_04/android/app/build.gradle.kts @@ -1,8 +1,8 @@ plugins { - id "com.android.application" - id "kotlin-android" + id("com.android.application") + id("kotlin-android") // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. - id "dev.flutter.flutter-gradle-plugin" + id("dev.flutter.flutter-gradle-plugin") } android { @@ -16,7 +16,7 @@ android { } kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8 + jvmTarget = JavaVersion.VERSION_1_8.toString() } defaultConfig { @@ -34,7 +34,7 @@ android { release { // TODO: Add your own signing config for the release build. // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig = signingConfigs.debug + signingConfig = signingConfigs.getByName("debug") } } } diff --git a/generate_crossword/step_04/android/build.gradle b/generate_crossword/step_04/android/build.gradle deleted file mode 100644 index d2ffbffa4c..0000000000 --- a/generate_crossword/step_04/android/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = "../build" -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(":app") -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/generate_crossword/step_04/android/build.gradle.kts b/generate_crossword/step_04/android/build.gradle.kts new file mode 100644 index 0000000000..89176ef44e --- /dev/null +++ b/generate_crossword/step_04/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/generate_crossword/step_04/android/gradle.properties b/generate_crossword/step_04/android/gradle.properties index 2597170821..f018a61817 100644 --- a/generate_crossword/step_04/android/gradle.properties +++ b/generate_crossword/step_04/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/generate_crossword/step_04/android/gradle/wrapper/gradle-wrapper.properties b/generate_crossword/step_04/android/gradle/wrapper/gradle-wrapper.properties index 7bb2df6ba6..afa1e8eb0a 100644 --- a/generate_crossword/step_04/android/gradle/wrapper/gradle-wrapper.properties +++ b/generate_crossword/step_04/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip diff --git a/generate_crossword/step_04/android/settings.gradle b/generate_crossword/step_04/android/settings.gradle deleted file mode 100644 index b9e43bd376..0000000000 --- a/generate_crossword/step_04/android/settings.gradle +++ /dev/null @@ -1,25 +0,0 @@ -pluginManagement { - def flutterSdkPath = { - def properties = new Properties() - file("local.properties").withInputStream { properties.load(it) } - def flutterSdkPath = properties.getProperty("flutter.sdk") - assert flutterSdkPath != null, "flutter.sdk not set in local.properties" - return flutterSdkPath - }() - - includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") - - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} - -plugins { - id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.1.0" apply false - id "org.jetbrains.kotlin.android" version "1.8.22" apply false -} - -include ":app" diff --git a/generate_crossword/step_04/android/settings.gradle.kts b/generate_crossword/step_04/android/settings.gradle.kts new file mode 100644 index 0000000000..a439442c20 --- /dev/null +++ b/generate_crossword/step_04/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.0" apply false + id("org.jetbrains.kotlin.android") version "1.8.22" apply false +} + +include(":app") diff --git a/generate_crossword/step_04/pubspec.yaml b/generate_crossword/step_04/pubspec.yaml index 23da5fd396..0790c94371 100644 --- a/generate_crossword/step_04/pubspec.yaml +++ b/generate_crossword/step_04/pubspec.yaml @@ -13,7 +13,7 @@ dependencies: built_value: ^8.9.2 characters: ^1.3.0 flutter_riverpod: ^2.6.1 - intl: ^0.19.0 + intl: ^0.20.0 riverpod: ^2.6.1 riverpod_annotation: ^2.6.1 two_dimensional_scrollables: ^0.3.3 diff --git a/generate_crossword/step_03/android/app/build.gradle b/generate_crossword/step_05_a/android/app/build.gradle.kts similarity index 84% rename from generate_crossword/step_03/android/app/build.gradle rename to generate_crossword/step_05_a/android/app/build.gradle.kts index d4a93e6565..3d3cf0bf13 100644 --- a/generate_crossword/step_03/android/app/build.gradle +++ b/generate_crossword/step_05_a/android/app/build.gradle.kts @@ -1,8 +1,8 @@ plugins { - id "com.android.application" - id "kotlin-android" + id("com.android.application") + id("kotlin-android") // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. - id "dev.flutter.flutter-gradle-plugin" + id("dev.flutter.flutter-gradle-plugin") } android { @@ -16,7 +16,7 @@ android { } kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8 + jvmTarget = JavaVersion.VERSION_1_8.toString() } defaultConfig { @@ -34,7 +34,7 @@ android { release { // TODO: Add your own signing config for the release build. // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig = signingConfigs.debug + signingConfig = signingConfigs.getByName("debug") } } } diff --git a/generate_crossword/step_05_a/android/build.gradle b/generate_crossword/step_05_a/android/build.gradle deleted file mode 100644 index d2ffbffa4c..0000000000 --- a/generate_crossword/step_05_a/android/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = "../build" -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(":app") -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/generate_crossword/step_05_a/android/build.gradle.kts b/generate_crossword/step_05_a/android/build.gradle.kts new file mode 100644 index 0000000000..89176ef44e --- /dev/null +++ b/generate_crossword/step_05_a/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/generate_crossword/step_05_a/android/gradle.properties b/generate_crossword/step_05_a/android/gradle.properties index 2597170821..f018a61817 100644 --- a/generate_crossword/step_05_a/android/gradle.properties +++ b/generate_crossword/step_05_a/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/generate_crossword/step_05_a/android/gradle/wrapper/gradle-wrapper.properties b/generate_crossword/step_05_a/android/gradle/wrapper/gradle-wrapper.properties index 7bb2df6ba6..afa1e8eb0a 100644 --- a/generate_crossword/step_05_a/android/gradle/wrapper/gradle-wrapper.properties +++ b/generate_crossword/step_05_a/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip diff --git a/generate_crossword/step_05_a/android/settings.gradle b/generate_crossword/step_05_a/android/settings.gradle deleted file mode 100644 index b9e43bd376..0000000000 --- a/generate_crossword/step_05_a/android/settings.gradle +++ /dev/null @@ -1,25 +0,0 @@ -pluginManagement { - def flutterSdkPath = { - def properties = new Properties() - file("local.properties").withInputStream { properties.load(it) } - def flutterSdkPath = properties.getProperty("flutter.sdk") - assert flutterSdkPath != null, "flutter.sdk not set in local.properties" - return flutterSdkPath - }() - - includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") - - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} - -plugins { - id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.1.0" apply false - id "org.jetbrains.kotlin.android" version "1.8.22" apply false -} - -include ":app" diff --git a/generate_crossword/step_05_a/android/settings.gradle.kts b/generate_crossword/step_05_a/android/settings.gradle.kts new file mode 100644 index 0000000000..a439442c20 --- /dev/null +++ b/generate_crossword/step_05_a/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.0" apply false + id("org.jetbrains.kotlin.android") version "1.8.22" apply false +} + +include(":app") diff --git a/generate_crossword/step_05_a/pubspec.yaml b/generate_crossword/step_05_a/pubspec.yaml index 23da5fd396..0790c94371 100644 --- a/generate_crossword/step_05_a/pubspec.yaml +++ b/generate_crossword/step_05_a/pubspec.yaml @@ -13,7 +13,7 @@ dependencies: built_value: ^8.9.2 characters: ^1.3.0 flutter_riverpod: ^2.6.1 - intl: ^0.19.0 + intl: ^0.20.0 riverpod: ^2.6.1 riverpod_annotation: ^2.6.1 two_dimensional_scrollables: ^0.3.3 diff --git a/generate_crossword/step_05_b/android/app/build.gradle b/generate_crossword/step_05_b/android/app/build.gradle deleted file mode 100644 index d4a93e6565..0000000000 --- a/generate_crossword/step_05_b/android/app/build.gradle +++ /dev/null @@ -1,44 +0,0 @@ -plugins { - id "com.android.application" - id "kotlin-android" - // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. - id "dev.flutter.flutter-gradle-plugin" -} - -android { - namespace = "com.example.generate_crossword" - compileSdk = flutter.compileSdkVersion - ndkVersion = flutter.ndkVersion - - compileOptions { - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 - } - - kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8 - } - - defaultConfig { - // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). - applicationId = "com.example.generate_crossword" - // You can update the following values to match your application needs. - // For more information, see: https://flutter.dev/to/review-gradle-config. - minSdk = flutter.minSdkVersion - targetSdk = flutter.targetSdkVersion - versionCode = flutter.versionCode - versionName = flutter.versionName - } - - buildTypes { - release { - // TODO: Add your own signing config for the release build. - // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig = signingConfigs.debug - } - } -} - -flutter { - source = "../.." -} diff --git a/generate_crossword/step_05_b/android/app/build.gradle.kts b/generate_crossword/step_05_b/android/app/build.gradle.kts new file mode 100644 index 0000000000..3d3cf0bf13 --- /dev/null +++ b/generate_crossword/step_05_b/android/app/build.gradle.kts @@ -0,0 +1,44 @@ +plugins { + id("com.android.application") + id("kotlin-android") + // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. + id("dev.flutter.flutter-gradle-plugin") +} + +android { + namespace = "com.example.generate_crossword" + compileSdk = flutter.compileSdkVersion + ndkVersion = flutter.ndkVersion + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 + } + + kotlinOptions { + jvmTarget = JavaVersion.VERSION_1_8.toString() + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId = "com.example.generate_crossword" + // You can update the following values to match your application needs. + // For more information, see: https://flutter.dev/to/review-gradle-config. + minSdk = flutter.minSdkVersion + targetSdk = flutter.targetSdkVersion + versionCode = flutter.versionCode + versionName = flutter.versionName + } + + buildTypes { + release { + // TODO: Add your own signing config for the release build. + // Signing with the debug keys for now, so `flutter run --release` works. + signingConfig = signingConfigs.getByName("debug") + } + } +} + +flutter { + source = "../.." +} diff --git a/generate_crossword/step_05_b/android/build.gradle b/generate_crossword/step_05_b/android/build.gradle deleted file mode 100644 index d2ffbffa4c..0000000000 --- a/generate_crossword/step_05_b/android/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = "../build" -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(":app") -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/generate_crossword/step_05_b/android/build.gradle.kts b/generate_crossword/step_05_b/android/build.gradle.kts new file mode 100644 index 0000000000..89176ef44e --- /dev/null +++ b/generate_crossword/step_05_b/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/generate_crossword/step_05_b/android/gradle.properties b/generate_crossword/step_05_b/android/gradle.properties index 2597170821..f018a61817 100644 --- a/generate_crossword/step_05_b/android/gradle.properties +++ b/generate_crossword/step_05_b/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/generate_crossword/step_05_b/android/gradle/wrapper/gradle-wrapper.properties b/generate_crossword/step_05_b/android/gradle/wrapper/gradle-wrapper.properties index 7bb2df6ba6..afa1e8eb0a 100644 --- a/generate_crossword/step_05_b/android/gradle/wrapper/gradle-wrapper.properties +++ b/generate_crossword/step_05_b/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip diff --git a/generate_crossword/step_05_b/android/settings.gradle b/generate_crossword/step_05_b/android/settings.gradle deleted file mode 100644 index b9e43bd376..0000000000 --- a/generate_crossword/step_05_b/android/settings.gradle +++ /dev/null @@ -1,25 +0,0 @@ -pluginManagement { - def flutterSdkPath = { - def properties = new Properties() - file("local.properties").withInputStream { properties.load(it) } - def flutterSdkPath = properties.getProperty("flutter.sdk") - assert flutterSdkPath != null, "flutter.sdk not set in local.properties" - return flutterSdkPath - }() - - includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") - - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} - -plugins { - id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.1.0" apply false - id "org.jetbrains.kotlin.android" version "1.8.22" apply false -} - -include ":app" diff --git a/generate_crossword/step_05_b/android/settings.gradle.kts b/generate_crossword/step_05_b/android/settings.gradle.kts new file mode 100644 index 0000000000..a439442c20 --- /dev/null +++ b/generate_crossword/step_05_b/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.0" apply false + id("org.jetbrains.kotlin.android") version "1.8.22" apply false +} + +include(":app") diff --git a/generate_crossword/step_05_b/pubspec.yaml b/generate_crossword/step_05_b/pubspec.yaml index 23da5fd396..0790c94371 100644 --- a/generate_crossword/step_05_b/pubspec.yaml +++ b/generate_crossword/step_05_b/pubspec.yaml @@ -13,7 +13,7 @@ dependencies: built_value: ^8.9.2 characters: ^1.3.0 flutter_riverpod: ^2.6.1 - intl: ^0.19.0 + intl: ^0.20.0 riverpod: ^2.6.1 riverpod_annotation: ^2.6.1 two_dimensional_scrollables: ^0.3.3 diff --git a/generate_crossword/step_05_c/android/app/build.gradle b/generate_crossword/step_05_c/android/app/build.gradle deleted file mode 100644 index d4a93e6565..0000000000 --- a/generate_crossword/step_05_c/android/app/build.gradle +++ /dev/null @@ -1,44 +0,0 @@ -plugins { - id "com.android.application" - id "kotlin-android" - // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. - id "dev.flutter.flutter-gradle-plugin" -} - -android { - namespace = "com.example.generate_crossword" - compileSdk = flutter.compileSdkVersion - ndkVersion = flutter.ndkVersion - - compileOptions { - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 - } - - kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8 - } - - defaultConfig { - // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). - applicationId = "com.example.generate_crossword" - // You can update the following values to match your application needs. - // For more information, see: https://flutter.dev/to/review-gradle-config. - minSdk = flutter.minSdkVersion - targetSdk = flutter.targetSdkVersion - versionCode = flutter.versionCode - versionName = flutter.versionName - } - - buildTypes { - release { - // TODO: Add your own signing config for the release build. - // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig = signingConfigs.debug - } - } -} - -flutter { - source = "../.." -} diff --git a/generate_crossword/step_05_c/android/app/build.gradle.kts b/generate_crossword/step_05_c/android/app/build.gradle.kts new file mode 100644 index 0000000000..3d3cf0bf13 --- /dev/null +++ b/generate_crossword/step_05_c/android/app/build.gradle.kts @@ -0,0 +1,44 @@ +plugins { + id("com.android.application") + id("kotlin-android") + // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. + id("dev.flutter.flutter-gradle-plugin") +} + +android { + namespace = "com.example.generate_crossword" + compileSdk = flutter.compileSdkVersion + ndkVersion = flutter.ndkVersion + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 + } + + kotlinOptions { + jvmTarget = JavaVersion.VERSION_1_8.toString() + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId = "com.example.generate_crossword" + // You can update the following values to match your application needs. + // For more information, see: https://flutter.dev/to/review-gradle-config. + minSdk = flutter.minSdkVersion + targetSdk = flutter.targetSdkVersion + versionCode = flutter.versionCode + versionName = flutter.versionName + } + + buildTypes { + release { + // TODO: Add your own signing config for the release build. + // Signing with the debug keys for now, so `flutter run --release` works. + signingConfig = signingConfigs.getByName("debug") + } + } +} + +flutter { + source = "../.." +} diff --git a/generate_crossword/step_05_c/android/build.gradle b/generate_crossword/step_05_c/android/build.gradle deleted file mode 100644 index d2ffbffa4c..0000000000 --- a/generate_crossword/step_05_c/android/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = "../build" -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(":app") -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/generate_crossword/step_05_c/android/build.gradle.kts b/generate_crossword/step_05_c/android/build.gradle.kts new file mode 100644 index 0000000000..89176ef44e --- /dev/null +++ b/generate_crossword/step_05_c/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/generate_crossword/step_05_c/android/gradle.properties b/generate_crossword/step_05_c/android/gradle.properties index 2597170821..f018a61817 100644 --- a/generate_crossword/step_05_c/android/gradle.properties +++ b/generate_crossword/step_05_c/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/generate_crossword/step_05_c/android/gradle/wrapper/gradle-wrapper.properties b/generate_crossword/step_05_c/android/gradle/wrapper/gradle-wrapper.properties index 7bb2df6ba6..afa1e8eb0a 100644 --- a/generate_crossword/step_05_c/android/gradle/wrapper/gradle-wrapper.properties +++ b/generate_crossword/step_05_c/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip diff --git a/generate_crossword/step_05_c/android/settings.gradle b/generate_crossword/step_05_c/android/settings.gradle deleted file mode 100644 index b9e43bd376..0000000000 --- a/generate_crossword/step_05_c/android/settings.gradle +++ /dev/null @@ -1,25 +0,0 @@ -pluginManagement { - def flutterSdkPath = { - def properties = new Properties() - file("local.properties").withInputStream { properties.load(it) } - def flutterSdkPath = properties.getProperty("flutter.sdk") - assert flutterSdkPath != null, "flutter.sdk not set in local.properties" - return flutterSdkPath - }() - - includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") - - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} - -plugins { - id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.1.0" apply false - id "org.jetbrains.kotlin.android" version "1.8.22" apply false -} - -include ":app" diff --git a/generate_crossword/step_05_c/android/settings.gradle.kts b/generate_crossword/step_05_c/android/settings.gradle.kts new file mode 100644 index 0000000000..a439442c20 --- /dev/null +++ b/generate_crossword/step_05_c/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.0" apply false + id("org.jetbrains.kotlin.android") version "1.8.22" apply false +} + +include(":app") diff --git a/generate_crossword/step_05_c/pubspec.yaml b/generate_crossword/step_05_c/pubspec.yaml index 23da5fd396..0790c94371 100644 --- a/generate_crossword/step_05_c/pubspec.yaml +++ b/generate_crossword/step_05_c/pubspec.yaml @@ -13,7 +13,7 @@ dependencies: built_value: ^8.9.2 characters: ^1.3.0 flutter_riverpod: ^2.6.1 - intl: ^0.19.0 + intl: ^0.20.0 riverpod: ^2.6.1 riverpod_annotation: ^2.6.1 two_dimensional_scrollables: ^0.3.3 diff --git a/generate_crossword/step_06/android/app/build.gradle b/generate_crossword/step_06/android/app/build.gradle deleted file mode 100644 index d4a93e6565..0000000000 --- a/generate_crossword/step_06/android/app/build.gradle +++ /dev/null @@ -1,44 +0,0 @@ -plugins { - id "com.android.application" - id "kotlin-android" - // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. - id "dev.flutter.flutter-gradle-plugin" -} - -android { - namespace = "com.example.generate_crossword" - compileSdk = flutter.compileSdkVersion - ndkVersion = flutter.ndkVersion - - compileOptions { - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 - } - - kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8 - } - - defaultConfig { - // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). - applicationId = "com.example.generate_crossword" - // You can update the following values to match your application needs. - // For more information, see: https://flutter.dev/to/review-gradle-config. - minSdk = flutter.minSdkVersion - targetSdk = flutter.targetSdkVersion - versionCode = flutter.versionCode - versionName = flutter.versionName - } - - buildTypes { - release { - // TODO: Add your own signing config for the release build. - // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig = signingConfigs.debug - } - } -} - -flutter { - source = "../.." -} diff --git a/generate_crossword/step_06/android/app/build.gradle.kts b/generate_crossword/step_06/android/app/build.gradle.kts new file mode 100644 index 0000000000..3d3cf0bf13 --- /dev/null +++ b/generate_crossword/step_06/android/app/build.gradle.kts @@ -0,0 +1,44 @@ +plugins { + id("com.android.application") + id("kotlin-android") + // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. + id("dev.flutter.flutter-gradle-plugin") +} + +android { + namespace = "com.example.generate_crossword" + compileSdk = flutter.compileSdkVersion + ndkVersion = flutter.ndkVersion + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 + } + + kotlinOptions { + jvmTarget = JavaVersion.VERSION_1_8.toString() + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId = "com.example.generate_crossword" + // You can update the following values to match your application needs. + // For more information, see: https://flutter.dev/to/review-gradle-config. + minSdk = flutter.minSdkVersion + targetSdk = flutter.targetSdkVersion + versionCode = flutter.versionCode + versionName = flutter.versionName + } + + buildTypes { + release { + // TODO: Add your own signing config for the release build. + // Signing with the debug keys for now, so `flutter run --release` works. + signingConfig = signingConfigs.getByName("debug") + } + } +} + +flutter { + source = "../.." +} diff --git a/generate_crossword/step_06/android/build.gradle b/generate_crossword/step_06/android/build.gradle deleted file mode 100644 index d2ffbffa4c..0000000000 --- a/generate_crossword/step_06/android/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = "../build" -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(":app") -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/generate_crossword/step_06/android/build.gradle.kts b/generate_crossword/step_06/android/build.gradle.kts new file mode 100644 index 0000000000..89176ef44e --- /dev/null +++ b/generate_crossword/step_06/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/generate_crossword/step_06/android/gradle.properties b/generate_crossword/step_06/android/gradle.properties index 2597170821..f018a61817 100644 --- a/generate_crossword/step_06/android/gradle.properties +++ b/generate_crossword/step_06/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/generate_crossword/step_06/android/gradle/wrapper/gradle-wrapper.properties b/generate_crossword/step_06/android/gradle/wrapper/gradle-wrapper.properties index 7bb2df6ba6..afa1e8eb0a 100644 --- a/generate_crossword/step_06/android/gradle/wrapper/gradle-wrapper.properties +++ b/generate_crossword/step_06/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip diff --git a/generate_crossword/step_06/android/settings.gradle b/generate_crossword/step_06/android/settings.gradle deleted file mode 100644 index b9e43bd376..0000000000 --- a/generate_crossword/step_06/android/settings.gradle +++ /dev/null @@ -1,25 +0,0 @@ -pluginManagement { - def flutterSdkPath = { - def properties = new Properties() - file("local.properties").withInputStream { properties.load(it) } - def flutterSdkPath = properties.getProperty("flutter.sdk") - assert flutterSdkPath != null, "flutter.sdk not set in local.properties" - return flutterSdkPath - }() - - includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") - - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} - -plugins { - id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.1.0" apply false - id "org.jetbrains.kotlin.android" version "1.8.22" apply false -} - -include ":app" diff --git a/generate_crossword/step_06/android/settings.gradle.kts b/generate_crossword/step_06/android/settings.gradle.kts new file mode 100644 index 0000000000..a439442c20 --- /dev/null +++ b/generate_crossword/step_06/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.0" apply false + id("org.jetbrains.kotlin.android") version "1.8.22" apply false +} + +include(":app") diff --git a/generate_crossword/step_06/pubspec.yaml b/generate_crossword/step_06/pubspec.yaml index 23da5fd396..0790c94371 100644 --- a/generate_crossword/step_06/pubspec.yaml +++ b/generate_crossword/step_06/pubspec.yaml @@ -13,7 +13,7 @@ dependencies: built_value: ^8.9.2 characters: ^1.3.0 flutter_riverpod: ^2.6.1 - intl: ^0.19.0 + intl: ^0.20.0 riverpod: ^2.6.1 riverpod_annotation: ^2.6.1 two_dimensional_scrollables: ^0.3.3 diff --git a/generate_crossword/step_07/android/app/build.gradle b/generate_crossword/step_07/android/app/build.gradle deleted file mode 100644 index d4a93e6565..0000000000 --- a/generate_crossword/step_07/android/app/build.gradle +++ /dev/null @@ -1,44 +0,0 @@ -plugins { - id "com.android.application" - id "kotlin-android" - // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. - id "dev.flutter.flutter-gradle-plugin" -} - -android { - namespace = "com.example.generate_crossword" - compileSdk = flutter.compileSdkVersion - ndkVersion = flutter.ndkVersion - - compileOptions { - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 - } - - kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8 - } - - defaultConfig { - // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). - applicationId = "com.example.generate_crossword" - // You can update the following values to match your application needs. - // For more information, see: https://flutter.dev/to/review-gradle-config. - minSdk = flutter.minSdkVersion - targetSdk = flutter.targetSdkVersion - versionCode = flutter.versionCode - versionName = flutter.versionName - } - - buildTypes { - release { - // TODO: Add your own signing config for the release build. - // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig = signingConfigs.debug - } - } -} - -flutter { - source = "../.." -} diff --git a/generate_crossword/step_07/android/app/build.gradle.kts b/generate_crossword/step_07/android/app/build.gradle.kts new file mode 100644 index 0000000000..3d3cf0bf13 --- /dev/null +++ b/generate_crossword/step_07/android/app/build.gradle.kts @@ -0,0 +1,44 @@ +plugins { + id("com.android.application") + id("kotlin-android") + // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. + id("dev.flutter.flutter-gradle-plugin") +} + +android { + namespace = "com.example.generate_crossword" + compileSdk = flutter.compileSdkVersion + ndkVersion = flutter.ndkVersion + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 + } + + kotlinOptions { + jvmTarget = JavaVersion.VERSION_1_8.toString() + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId = "com.example.generate_crossword" + // You can update the following values to match your application needs. + // For more information, see: https://flutter.dev/to/review-gradle-config. + minSdk = flutter.minSdkVersion + targetSdk = flutter.targetSdkVersion + versionCode = flutter.versionCode + versionName = flutter.versionName + } + + buildTypes { + release { + // TODO: Add your own signing config for the release build. + // Signing with the debug keys for now, so `flutter run --release` works. + signingConfig = signingConfigs.getByName("debug") + } + } +} + +flutter { + source = "../.." +} diff --git a/generate_crossword/step_07/android/build.gradle b/generate_crossword/step_07/android/build.gradle deleted file mode 100644 index d2ffbffa4c..0000000000 --- a/generate_crossword/step_07/android/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = "../build" -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(":app") -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/generate_crossword/step_07/android/build.gradle.kts b/generate_crossword/step_07/android/build.gradle.kts new file mode 100644 index 0000000000..89176ef44e --- /dev/null +++ b/generate_crossword/step_07/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/generate_crossword/step_07/android/gradle.properties b/generate_crossword/step_07/android/gradle.properties index 2597170821..f018a61817 100644 --- a/generate_crossword/step_07/android/gradle.properties +++ b/generate_crossword/step_07/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/generate_crossword/step_07/android/gradle/wrapper/gradle-wrapper.properties b/generate_crossword/step_07/android/gradle/wrapper/gradle-wrapper.properties index 7bb2df6ba6..afa1e8eb0a 100644 --- a/generate_crossword/step_07/android/gradle/wrapper/gradle-wrapper.properties +++ b/generate_crossword/step_07/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip diff --git a/generate_crossword/step_07/android/settings.gradle b/generate_crossword/step_07/android/settings.gradle deleted file mode 100644 index b9e43bd376..0000000000 --- a/generate_crossword/step_07/android/settings.gradle +++ /dev/null @@ -1,25 +0,0 @@ -pluginManagement { - def flutterSdkPath = { - def properties = new Properties() - file("local.properties").withInputStream { properties.load(it) } - def flutterSdkPath = properties.getProperty("flutter.sdk") - assert flutterSdkPath != null, "flutter.sdk not set in local.properties" - return flutterSdkPath - }() - - includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") - - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} - -plugins { - id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.1.0" apply false - id "org.jetbrains.kotlin.android" version "1.8.22" apply false -} - -include ":app" diff --git a/generate_crossword/step_07/android/settings.gradle.kts b/generate_crossword/step_07/android/settings.gradle.kts new file mode 100644 index 0000000000..a439442c20 --- /dev/null +++ b/generate_crossword/step_07/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.0" apply false + id("org.jetbrains.kotlin.android") version "1.8.22" apply false +} + +include(":app") diff --git a/generate_crossword/step_07/lib/providers.g.dart b/generate_crossword/step_07/lib/providers.g.dart index 322f686f1d..6363546d41 100644 --- a/generate_crossword/step_07/lib/providers.g.dart +++ b/generate_crossword/step_07/lib/providers.g.dart @@ -48,10 +48,9 @@ String _$expectedRemainingTimeHash() => final expectedRemainingTimeProvider = AutoDisposeProvider.internal( expectedRemainingTime, name: r'expectedRemainingTimeProvider', - debugGetCreateSourceHash: - const bool.fromEnvironment('dart.vm.product') - ? null - : _$expectedRemainingTimeHash, + debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') + ? null + : _$expectedRemainingTimeHash, dependencies: null, allTransitiveDependencies: null, ); @@ -111,15 +110,14 @@ String _$showDisplayInfoHash() => r'75a0679db4cc1a0d5cfa7aa33afc633faf08fc24'; @ProviderFor(ShowDisplayInfo) final showDisplayInfoProvider = NotifierProvider.internal( - ShowDisplayInfo.new, - name: r'showDisplayInfoProvider', - debugGetCreateSourceHash: - const bool.fromEnvironment('dart.vm.product') - ? null - : _$showDisplayInfoHash, - dependencies: null, - allTransitiveDependencies: null, - ); + ShowDisplayInfo.new, + name: r'showDisplayInfoProvider', + debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') + ? null + : _$showDisplayInfoHash, + dependencies: null, + allTransitiveDependencies: null, +); typedef _$ShowDisplayInfo = Notifier; String _$displayInfoHash() => r'6516f6bf346baa6914fdfffad1ccee8a5345a137'; @@ -130,15 +128,13 @@ String _$displayInfoHash() => r'6516f6bf346baa6914fdfffad1ccee8a5345a137'; @ProviderFor(DisplayInfo) final displayInfoProvider = AutoDisposeNotifierProvider.internal( - DisplayInfo.new, - name: r'displayInfoProvider', - debugGetCreateSourceHash: - const bool.fromEnvironment('dart.vm.product') - ? null - : _$displayInfoHash, - dependencies: null, - allTransitiveDependencies: null, - ); + DisplayInfo.new, + name: r'displayInfoProvider', + debugGetCreateSourceHash: + const bool.fromEnvironment('dart.vm.product') ? null : _$displayInfoHash, + dependencies: null, + allTransitiveDependencies: null, +); typedef _$DisplayInfo = AutoDisposeNotifier; // ignore_for_file: type=lint diff --git a/generate_crossword/step_07/pubspec.yaml b/generate_crossword/step_07/pubspec.yaml index 23da5fd396..0790c94371 100644 --- a/generate_crossword/step_07/pubspec.yaml +++ b/generate_crossword/step_07/pubspec.yaml @@ -13,7 +13,7 @@ dependencies: built_value: ^8.9.2 characters: ^1.3.0 flutter_riverpod: ^2.6.1 - intl: ^0.19.0 + intl: ^0.20.0 riverpod: ^2.6.1 riverpod_annotation: ^2.6.1 two_dimensional_scrollables: ^0.3.3 diff --git a/generate_crossword/step_08/android/app/build.gradle b/generate_crossword/step_08/android/app/build.gradle deleted file mode 100644 index d4a93e6565..0000000000 --- a/generate_crossword/step_08/android/app/build.gradle +++ /dev/null @@ -1,44 +0,0 @@ -plugins { - id "com.android.application" - id "kotlin-android" - // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. - id "dev.flutter.flutter-gradle-plugin" -} - -android { - namespace = "com.example.generate_crossword" - compileSdk = flutter.compileSdkVersion - ndkVersion = flutter.ndkVersion - - compileOptions { - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 - } - - kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8 - } - - defaultConfig { - // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). - applicationId = "com.example.generate_crossword" - // You can update the following values to match your application needs. - // For more information, see: https://flutter.dev/to/review-gradle-config. - minSdk = flutter.minSdkVersion - targetSdk = flutter.targetSdkVersion - versionCode = flutter.versionCode - versionName = flutter.versionName - } - - buildTypes { - release { - // TODO: Add your own signing config for the release build. - // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig = signingConfigs.debug - } - } -} - -flutter { - source = "../.." -} diff --git a/generate_crossword/step_08/android/app/build.gradle.kts b/generate_crossword/step_08/android/app/build.gradle.kts new file mode 100644 index 0000000000..3d3cf0bf13 --- /dev/null +++ b/generate_crossword/step_08/android/app/build.gradle.kts @@ -0,0 +1,44 @@ +plugins { + id("com.android.application") + id("kotlin-android") + // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. + id("dev.flutter.flutter-gradle-plugin") +} + +android { + namespace = "com.example.generate_crossword" + compileSdk = flutter.compileSdkVersion + ndkVersion = flutter.ndkVersion + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 + } + + kotlinOptions { + jvmTarget = JavaVersion.VERSION_1_8.toString() + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId = "com.example.generate_crossword" + // You can update the following values to match your application needs. + // For more information, see: https://flutter.dev/to/review-gradle-config. + minSdk = flutter.minSdkVersion + targetSdk = flutter.targetSdkVersion + versionCode = flutter.versionCode + versionName = flutter.versionName + } + + buildTypes { + release { + // TODO: Add your own signing config for the release build. + // Signing with the debug keys for now, so `flutter run --release` works. + signingConfig = signingConfigs.getByName("debug") + } + } +} + +flutter { + source = "../.." +} diff --git a/generate_crossword/step_08/android/build.gradle b/generate_crossword/step_08/android/build.gradle deleted file mode 100644 index d2ffbffa4c..0000000000 --- a/generate_crossword/step_08/android/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = "../build" -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(":app") -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/generate_crossword/step_08/android/build.gradle.kts b/generate_crossword/step_08/android/build.gradle.kts new file mode 100644 index 0000000000..89176ef44e --- /dev/null +++ b/generate_crossword/step_08/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/generate_crossword/step_08/android/gradle.properties b/generate_crossword/step_08/android/gradle.properties index 2597170821..f018a61817 100644 --- a/generate_crossword/step_08/android/gradle.properties +++ b/generate_crossword/step_08/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/generate_crossword/step_08/android/gradle/wrapper/gradle-wrapper.properties b/generate_crossword/step_08/android/gradle/wrapper/gradle-wrapper.properties index 7bb2df6ba6..afa1e8eb0a 100644 --- a/generate_crossword/step_08/android/gradle/wrapper/gradle-wrapper.properties +++ b/generate_crossword/step_08/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip diff --git a/generate_crossword/step_08/android/settings.gradle b/generate_crossword/step_08/android/settings.gradle deleted file mode 100644 index b9e43bd376..0000000000 --- a/generate_crossword/step_08/android/settings.gradle +++ /dev/null @@ -1,25 +0,0 @@ -pluginManagement { - def flutterSdkPath = { - def properties = new Properties() - file("local.properties").withInputStream { properties.load(it) } - def flutterSdkPath = properties.getProperty("flutter.sdk") - assert flutterSdkPath != null, "flutter.sdk not set in local.properties" - return flutterSdkPath - }() - - includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") - - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} - -plugins { - id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.1.0" apply false - id "org.jetbrains.kotlin.android" version "1.8.22" apply false -} - -include ":app" diff --git a/generate_crossword/step_08/android/settings.gradle.kts b/generate_crossword/step_08/android/settings.gradle.kts new file mode 100644 index 0000000000..a439442c20 --- /dev/null +++ b/generate_crossword/step_08/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.0" apply false + id("org.jetbrains.kotlin.android") version "1.8.22" apply false +} + +include(":app") diff --git a/generate_crossword/step_08/lib/providers.g.dart b/generate_crossword/step_08/lib/providers.g.dart index e29c2fd6fa..c5660762c1 100644 --- a/generate_crossword/step_08/lib/providers.g.dart +++ b/generate_crossword/step_08/lib/providers.g.dart @@ -48,10 +48,9 @@ String _$expectedRemainingTimeHash() => final expectedRemainingTimeProvider = AutoDisposeProvider.internal( expectedRemainingTime, name: r'expectedRemainingTimeProvider', - debugGetCreateSourceHash: - const bool.fromEnvironment('dart.vm.product') - ? null - : _$expectedRemainingTimeHash, + debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') + ? null + : _$expectedRemainingTimeHash, dependencies: null, allTransitiveDependencies: null, ); @@ -111,15 +110,14 @@ String _$showDisplayInfoHash() => r'75a0679db4cc1a0d5cfa7aa33afc633faf08fc24'; @ProviderFor(ShowDisplayInfo) final showDisplayInfoProvider = NotifierProvider.internal( - ShowDisplayInfo.new, - name: r'showDisplayInfoProvider', - debugGetCreateSourceHash: - const bool.fromEnvironment('dart.vm.product') - ? null - : _$showDisplayInfoHash, - dependencies: null, - allTransitiveDependencies: null, - ); + ShowDisplayInfo.new, + name: r'showDisplayInfoProvider', + debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') + ? null + : _$showDisplayInfoHash, + dependencies: null, + allTransitiveDependencies: null, +); typedef _$ShowDisplayInfo = Notifier; String _$displayInfoHash() => r'6516f6bf346baa6914fdfffad1ccee8a5345a137'; @@ -130,15 +128,13 @@ String _$displayInfoHash() => r'6516f6bf346baa6914fdfffad1ccee8a5345a137'; @ProviderFor(DisplayInfo) final displayInfoProvider = AutoDisposeNotifierProvider.internal( - DisplayInfo.new, - name: r'displayInfoProvider', - debugGetCreateSourceHash: - const bool.fromEnvironment('dart.vm.product') - ? null - : _$displayInfoHash, - dependencies: null, - allTransitiveDependencies: null, - ); + DisplayInfo.new, + name: r'displayInfoProvider', + debugGetCreateSourceHash: + const bool.fromEnvironment('dart.vm.product') ? null : _$displayInfoHash, + dependencies: null, + allTransitiveDependencies: null, +); typedef _$DisplayInfo = AutoDisposeNotifier; String _$workerCountHash() => r'36dad09ba2cfe03b0879e7bf20059cec12e5118c'; @@ -149,15 +145,13 @@ String _$workerCountHash() => r'36dad09ba2cfe03b0879e7bf20059cec12e5118c'; @ProviderFor(WorkerCount) final workerCountProvider = NotifierProvider.internal( - WorkerCount.new, - name: r'workerCountProvider', - debugGetCreateSourceHash: - const bool.fromEnvironment('dart.vm.product') - ? null - : _$workerCountHash, - dependencies: null, - allTransitiveDependencies: null, - ); + WorkerCount.new, + name: r'workerCountProvider', + debugGetCreateSourceHash: + const bool.fromEnvironment('dart.vm.product') ? null : _$workerCountHash, + dependencies: null, + allTransitiveDependencies: null, +); typedef _$WorkerCount = Notifier; // ignore_for_file: type=lint diff --git a/generate_crossword/step_08/pubspec.yaml b/generate_crossword/step_08/pubspec.yaml index 23da5fd396..0790c94371 100644 --- a/generate_crossword/step_08/pubspec.yaml +++ b/generate_crossword/step_08/pubspec.yaml @@ -13,7 +13,7 @@ dependencies: built_value: ^8.9.2 characters: ^1.3.0 flutter_riverpod: ^2.6.1 - intl: ^0.19.0 + intl: ^0.20.0 riverpod: ^2.6.1 riverpod_annotation: ^2.6.1 two_dimensional_scrollables: ^0.3.3 diff --git a/generate_crossword/step_09/android/app/build.gradle b/generate_crossword/step_09/android/app/build.gradle deleted file mode 100644 index d4a93e6565..0000000000 --- a/generate_crossword/step_09/android/app/build.gradle +++ /dev/null @@ -1,44 +0,0 @@ -plugins { - id "com.android.application" - id "kotlin-android" - // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. - id "dev.flutter.flutter-gradle-plugin" -} - -android { - namespace = "com.example.generate_crossword" - compileSdk = flutter.compileSdkVersion - ndkVersion = flutter.ndkVersion - - compileOptions { - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 - } - - kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8 - } - - defaultConfig { - // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). - applicationId = "com.example.generate_crossword" - // You can update the following values to match your application needs. - // For more information, see: https://flutter.dev/to/review-gradle-config. - minSdk = flutter.minSdkVersion - targetSdk = flutter.targetSdkVersion - versionCode = flutter.versionCode - versionName = flutter.versionName - } - - buildTypes { - release { - // TODO: Add your own signing config for the release build. - // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig = signingConfigs.debug - } - } -} - -flutter { - source = "../.." -} diff --git a/generate_crossword/step_09/android/app/build.gradle.kts b/generate_crossword/step_09/android/app/build.gradle.kts new file mode 100644 index 0000000000..3d3cf0bf13 --- /dev/null +++ b/generate_crossword/step_09/android/app/build.gradle.kts @@ -0,0 +1,44 @@ +plugins { + id("com.android.application") + id("kotlin-android") + // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. + id("dev.flutter.flutter-gradle-plugin") +} + +android { + namespace = "com.example.generate_crossword" + compileSdk = flutter.compileSdkVersion + ndkVersion = flutter.ndkVersion + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 + } + + kotlinOptions { + jvmTarget = JavaVersion.VERSION_1_8.toString() + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId = "com.example.generate_crossword" + // You can update the following values to match your application needs. + // For more information, see: https://flutter.dev/to/review-gradle-config. + minSdk = flutter.minSdkVersion + targetSdk = flutter.targetSdkVersion + versionCode = flutter.versionCode + versionName = flutter.versionName + } + + buildTypes { + release { + // TODO: Add your own signing config for the release build. + // Signing with the debug keys for now, so `flutter run --release` works. + signingConfig = signingConfigs.getByName("debug") + } + } +} + +flutter { + source = "../.." +} diff --git a/generate_crossword/step_09/android/build.gradle b/generate_crossword/step_09/android/build.gradle deleted file mode 100644 index d2ffbffa4c..0000000000 --- a/generate_crossword/step_09/android/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = "../build" -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(":app") -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/generate_crossword/step_09/android/build.gradle.kts b/generate_crossword/step_09/android/build.gradle.kts new file mode 100644 index 0000000000..89176ef44e --- /dev/null +++ b/generate_crossword/step_09/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/generate_crossword/step_09/android/gradle.properties b/generate_crossword/step_09/android/gradle.properties index 2597170821..f018a61817 100644 --- a/generate_crossword/step_09/android/gradle.properties +++ b/generate_crossword/step_09/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/generate_crossword/step_09/android/gradle/wrapper/gradle-wrapper.properties b/generate_crossword/step_09/android/gradle/wrapper/gradle-wrapper.properties index 7bb2df6ba6..afa1e8eb0a 100644 --- a/generate_crossword/step_09/android/gradle/wrapper/gradle-wrapper.properties +++ b/generate_crossword/step_09/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip diff --git a/generate_crossword/step_09/android/settings.gradle b/generate_crossword/step_09/android/settings.gradle deleted file mode 100644 index b9e43bd376..0000000000 --- a/generate_crossword/step_09/android/settings.gradle +++ /dev/null @@ -1,25 +0,0 @@ -pluginManagement { - def flutterSdkPath = { - def properties = new Properties() - file("local.properties").withInputStream { properties.load(it) } - def flutterSdkPath = properties.getProperty("flutter.sdk") - assert flutterSdkPath != null, "flutter.sdk not set in local.properties" - return flutterSdkPath - }() - - includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") - - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} - -plugins { - id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.1.0" apply false - id "org.jetbrains.kotlin.android" version "1.8.22" apply false -} - -include ":app" diff --git a/generate_crossword/step_09/android/settings.gradle.kts b/generate_crossword/step_09/android/settings.gradle.kts new file mode 100644 index 0000000000..a439442c20 --- /dev/null +++ b/generate_crossword/step_09/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.0" apply false + id("org.jetbrains.kotlin.android") version "1.8.22" apply false +} + +include(":app") diff --git a/generate_crossword/step_09/lib/providers.g.dart b/generate_crossword/step_09/lib/providers.g.dart index aa7fed7e1d..18b1cd60e7 100644 --- a/generate_crossword/step_09/lib/providers.g.dart +++ b/generate_crossword/step_09/lib/providers.g.dart @@ -62,13 +62,13 @@ String _$puzzleHash() => r'dddad218b4318b008af2db67dd0ff284bcef3231'; @ProviderFor(Puzzle) final puzzleProvider = AutoDisposeNotifierProvider.internal( - Puzzle.new, - name: r'puzzleProvider', - debugGetCreateSourceHash: - const bool.fromEnvironment('dart.vm.product') ? null : _$puzzleHash, - dependencies: null, - allTransitiveDependencies: null, - ); + Puzzle.new, + name: r'puzzleProvider', + debugGetCreateSourceHash: + const bool.fromEnvironment('dart.vm.product') ? null : _$puzzleHash, + dependencies: null, + allTransitiveDependencies: null, +); typedef _$Puzzle = AutoDisposeNotifier; // ignore_for_file: type=lint diff --git a/generate_crossword/step_09/pubspec.yaml b/generate_crossword/step_09/pubspec.yaml index 23da5fd396..0790c94371 100644 --- a/generate_crossword/step_09/pubspec.yaml +++ b/generate_crossword/step_09/pubspec.yaml @@ -13,7 +13,7 @@ dependencies: built_value: ^8.9.2 characters: ^1.3.0 flutter_riverpod: ^2.6.1 - intl: ^0.19.0 + intl: ^0.20.0 riverpod: ^2.6.1 riverpod_annotation: ^2.6.1 two_dimensional_scrollables: ^0.3.3 From eb32694c1202cabd3925a5b116630c3b2cfc2a77 Mon Sep 17 00:00:00 2001 From: Brett Morgan Date: Mon, 18 Nov 2024 08:26:50 +1100 Subject: [PATCH 079/108] Update `adaptive_app` --- adaptive_app/step_04/pubspec.yaml | 2 +- adaptive_app/step_05/pubspec.yaml | 2 +- adaptive_app/step_06/pubspec.yaml | 2 +- adaptive_app/step_07/pubspec.yaml | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/adaptive_app/step_04/pubspec.yaml b/adaptive_app/step_04/pubspec.yaml index fb07a5c2f2..6752c912d2 100644 --- a/adaptive_app/step_04/pubspec.yaml +++ b/adaptive_app/step_04/pubspec.yaml @@ -38,7 +38,7 @@ dependencies: http: ^1.2.2 provider: ^6.1.2 url_launcher: ^6.3.1 - flex_color_scheme: ^8.0.0 + flex_color_scheme: ^8.0.1 go_router: ^14.6.0 dev_dependencies: diff --git a/adaptive_app/step_05/pubspec.yaml b/adaptive_app/step_05/pubspec.yaml index cc02634920..30cc3dcbb0 100644 --- a/adaptive_app/step_05/pubspec.yaml +++ b/adaptive_app/step_05/pubspec.yaml @@ -38,7 +38,7 @@ dependencies: http: ^1.2.2 provider: ^6.1.2 url_launcher: ^6.3.1 - flex_color_scheme: ^8.0.0 + flex_color_scheme: ^8.0.1 go_router: ^14.6.0 split_view: ^3.2.1 diff --git a/adaptive_app/step_06/pubspec.yaml b/adaptive_app/step_06/pubspec.yaml index cc02634920..30cc3dcbb0 100644 --- a/adaptive_app/step_06/pubspec.yaml +++ b/adaptive_app/step_06/pubspec.yaml @@ -38,7 +38,7 @@ dependencies: http: ^1.2.2 provider: ^6.1.2 url_launcher: ^6.3.1 - flex_color_scheme: ^8.0.0 + flex_color_scheme: ^8.0.1 go_router: ^14.6.0 split_view: ^3.2.1 diff --git a/adaptive_app/step_07/pubspec.yaml b/adaptive_app/step_07/pubspec.yaml index d42eee20fb..71e46fc72e 100644 --- a/adaptive_app/step_07/pubspec.yaml +++ b/adaptive_app/step_07/pubspec.yaml @@ -37,7 +37,7 @@ dependencies: googleapis: ^13.2.0 provider: ^6.1.2 url_launcher: ^6.3.1 - flex_color_scheme: ^8.0.0 + flex_color_scheme: ^8.0.1 go_router: ^14.6.0 split_view: ^3.2.1 googleapis_auth: ^1.6.0 From d18508ec01e5eba8bfaaef7e9bfd31390ab3d7e2 Mon Sep 17 00:00:00 2001 From: Brett Morgan Date: Mon, 18 Nov 2024 12:04:25 +1100 Subject: [PATCH 080/108] Update `brick_breaker` --- brick_breaker/codelab_rebuild.yaml | 189 ++++++++++++++--------------- 1 file changed, 94 insertions(+), 95 deletions(-) diff --git a/brick_breaker/codelab_rebuild.yaml b/brick_breaker/codelab_rebuild.yaml index c704caebc2..5e05c8c166 100644 --- a/brick_breaker/codelab_rebuild.yaml +++ b/brick_breaker/codelab_rebuild.yaml @@ -278,26 +278,26 @@ steps: // Copyright 2023 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. - + import 'package:flame/components.dart'; import 'package:flutter/material.dart'; - + class Ball extends CircleComponent { Ball({ required this.velocity, required super.position, required double radius, }) : super( - radius: radius, - anchor: Anchor.center, - paint: - Paint() - ..color = const Color(0xff1e6091) - ..style = PaintingStyle.fill, - ); - + radius: radius, + anchor: Anchor.center, + paint: + Paint() + ..color = const Color(0xff1e6091) + ..style = PaintingStyle.fill, + ); + final Vector2 velocity; - + @override void update(double dt) { super.update(dt); @@ -599,17 +599,17 @@ steps: patch-u: | --- b/brick_breaker/step_08/lib/src/brick_breaker.dart +++ a/brick_breaker/step_08/lib/src/brick_breaker.dart - @@ -37,6 +37,7 @@ class BrickBreaker extends FlameGame - world.add(PlayArea()); + @@ -38,6 +38,7 @@ class BrickBreaker extends FlameGame - world.add(Ball( + world.add( + Ball( + difficultyModifier: difficultyModifier, radius: ballRadius, position: size / 2, - velocity: Vector2((rand.nextDouble() - 0.5) * width, height * 0.2) - @@ -48,6 +49,18 @@ class BrickBreaker extends FlameGame - cornerRadius: const Radius.circular(ballRadius / 2), - position: Vector2(width / 2, height * 0.95))); + velocity: + @@ -57,6 +58,18 @@ class BrickBreaker extends FlameGame + ), + ); + await world.addAll([ + for (var i = 0; i < brickColors.length; i++) @@ -679,19 +679,19 @@ steps: required double radius, + required this.difficultyModifier, }) : super( - radius: radius, - anchor: Anchor.center, - @@ -26,6 +28,7 @@ class Ball extends CircleComponent - children: [CircleHitbox()]); + radius: radius, + anchor: Anchor.center, + @@ -28,6 +30,7 @@ class Ball extends CircleComponent + ); final Vector2 velocity; + final double difficultyModifier; @override void update(double dt) { - @@ -53,8 +56,17 @@ class Ball extends CircleComponent - velocity.y = -velocity.y; - velocity.x = velocity.x + + @@ -56,8 +59,17 @@ class Ball extends CircleComponent + velocity.x = + velocity.x + (position.x - other.position.x) / other.size.x * game.width * 0.3; - } else { - debugPrint('collision with $other'); @@ -726,7 +726,7 @@ steps: // Copyright 2023 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. - + import 'package:flame/collisions.dart'; import 'package:flame/components.dart'; import 'package:flutter/material.dart'; @@ -739,18 +739,21 @@ steps: class Brick extends RectangleComponent with CollisionCallbacks, HasGameReference { Brick({required super.position, required Color color}) - : super( - size: Vector2(brickWidth, brickHeight), - anchor: Anchor.center, - paint: Paint() - ..color = color - ..style = PaintingStyle.fill, - children: [RectangleHitbox()], - ); + : super( + size: Vector2(brickWidth, brickHeight), + anchor: Anchor.center, + paint: + Paint() + ..color = color + ..style = PaintingStyle.fill, + children: [RectangleHitbox()], + ); @override void onCollisionStart( - Set intersectionPoints, PositionComponent other) { + Set intersectionPoints, + PositionComponent other, + ) { super.onCollisionStart(intersectionPoints, other); removeFromParent(); @@ -806,8 +809,8 @@ steps: - with HasCollisionDetection, KeyboardEvents { + with HasCollisionDetection, KeyboardEvents, TapDetector { BrickBreaker() - : super( - camera: CameraComponent.withFixedResolution( + : super( + camera: CameraComponent.withFixedResolution( @@ -28,6 +30,22 @@ class BrickBreaker extends FlameGame double get width => size.x; double get height => size.y; @@ -847,19 +850,19 @@ steps: + + playState = PlayState.playing; + - world.add(Ball( + world.add( + Ball( difficultyModifier: difficultyModifier, - radius: ballRadius, - @@ -49,7 +79,7 @@ class BrickBreaker extends FlameGame - cornerRadius: const Radius.circular(ballRadius / 2), - position: Vector2(width / 2, height * 0.95))); + @@ -58,7 +88,7 @@ class BrickBreaker extends FlameGame + ), + ); - await world.addAll([ + world.addAll([ for (var i = 0; i < brickColors.length; i++) for (var j = 1; j <= 5; j++) Brick( - @@ -60,8 +90,12 @@ class BrickBreaker extends FlameGame + @@ -69,8 +99,12 @@ class BrickBreaker extends FlameGame color: brickColors[i], ), ]); @@ -873,7 +876,7 @@ steps: } @override - @@ -73,7 +107,13 @@ class BrickBreaker extends FlameGame + @@ -84,7 +118,13 @@ class BrickBreaker extends FlameGame world.children.query().first.moveBy(-batStep); case LogicalKeyboardKey.arrowRight: world.children.query().first.moveBy(batStep); @@ -892,16 +895,19 @@ steps: patch-u: | --- b/brick_breaker/step_09/lib/src/components/ball.dart +++ a/brick_breaker/step_09/lib/src/components/ball.dart - @@ -49,8 +49,10 @@ class Ball extends CircleComponent + @@ -52,7 +52,14 @@ class Ball extends CircleComponent + } else if (intersectionPoints.first.x >= game.width) { velocity.x = -velocity.x; } else if (intersectionPoints.first.y >= game.height) { - add(RemoveEffect( - - delay: 0.35, - - )); + - add(RemoveEffect(delay: 0.35)); + + add( + + RemoveEffect( + delay: 0.35, + onComplete: () { + game.playState = PlayState.gameOver; - + })); + + }, + + ), + + ); } } else if (other is Bat) { velocity.y = -velocity.y; @@ -910,7 +916,7 @@ steps: patch-u: | --- b/brick_breaker/step_09/lib/src/components/brick.dart +++ a/brick_breaker/step_09/lib/src/components/brick.dart - @@ -30,6 +30,7 @@ class Brick extends RectangleComponent + @@ -33,6 +33,7 @@ class Brick extends RectangleComponent removeFromParent(); if (game.world.children.query().length == 1) { @@ -930,13 +936,13 @@ steps: import 'package:flame/game.dart'; import 'package:flutter/material.dart'; import 'package:google_fonts/google_fonts.dart'; - + import '../brick_breaker.dart'; import '../config.dart'; - + class GameApp extends StatelessWidget { const GameApp({super.key}); - + @override Widget build(BuildContext context) { return MaterialApp( @@ -954,10 +960,7 @@ steps: gradient: LinearGradient( begin: Alignment.topCenter, end: Alignment.bottomCenter, - colors: [ - Color(0xffa9d6e5), - Color(0xfff2e8cf), - ], + colors: [Color(0xffa9d6e5), Color(0xfff2e8cf)], ), ), child: SafeArea( @@ -971,21 +974,24 @@ steps: child: GameWidget.controlled( gameFactory: BrickBreaker.new, overlayBuilderMap: { - PlayState.welcome.name: (context, game) => Center( + PlayState.welcome.name: + (context, game) => Center( child: Text( 'TAP TO PLAY', style: Theme.of(context).textTheme.headlineLarge, ), ), - PlayState.gameOver.name: (context, game) => Center( + PlayState.gameOver.name: + (context, game) => Center( child: Text( 'G A M E O V E R', style: Theme.of(context).textTheme.headlineLarge, ), ), - PlayState.won.name: (context, game) => Center( + PlayState.won.name: + (context, game) => Center( child: Text( 'Y O U W O N ! ! !', style: @@ -1058,8 +1064,8 @@ steps: --- b/brick_breaker/step_10/lib/src/brick_breaker.dart +++ a/brick_breaker/step_10/lib/src/brick_breaker.dart @@ -26,6 +26,7 @@ class BrickBreaker extends FlameGame - ), - ); + ), + ); + final ValueNotifier score = ValueNotifier(0); final rand = math.Random(); @@ -1071,15 +1077,15 @@ steps: playState = PlayState.playing; + score.value = 0; - world.add(Ball( - difficultyModifier: difficultyModifier, + world.add( + Ball( - name: Patch lib/src/components/brick.dart path: brick_breaker/lib/src/components/brick.dart patch-u: | --- b/brick_breaker/step_10/lib/src/components/brick.dart +++ a/brick_breaker/step_10/lib/src/components/brick.dart - @@ -28,6 +28,7 @@ class Brick extends RectangleComponent - Set intersectionPoints, PositionComponent other) { + @@ -31,6 +31,7 @@ class Brick extends RectangleComponent + ) { super.onCollisionStart(intersectionPoints, other); removeFromParent(); + game.score.value++; @@ -1118,7 +1124,7 @@ steps: @override Widget build(BuildContext context) { return MaterialApp( - @@ -39,37 +54,38 @@ class GameApp extends StatelessWidget { + @@ -36,40 +51,38 @@ class GameApp extends StatelessWidget { child: Padding( padding: const EdgeInsets.all(16), child: Center( @@ -1129,21 +1135,24 @@ steps: - child: GameWidget.controlled( - gameFactory: BrickBreaker.new, - overlayBuilderMap: { - - PlayState.welcome.name: (context, game) => Center( + - PlayState.welcome.name: + - (context, game) => Center( - child: Text( - 'TAP TO PLAY', - style: - Theme.of(context).textTheme.headlineLarge, - ), - ), - - PlayState.gameOver.name: (context, game) => Center( + - PlayState.gameOver.name: + - (context, game) => Center( - child: Text( - 'G A M E O V E R', - style: - Theme.of(context).textTheme.headlineLarge, - ), - ), - - PlayState.won.name: (context, game) => Center( + - PlayState.won.name: + - (context, game) => Center( - child: Text( - 'Y O U W O N ! ! !', - style: @@ -1162,18 +1171,18 @@ steps: + child: GameWidget( + game: game, + overlayBuilderMap: { - + PlayState.welcome.name: (context, game) => - + const OverlayScreen( + + PlayState.welcome.name: + + (context, game) => const OverlayScreen( + title: 'TAP TO PLAY', + subtitle: 'Use arrow keys or swipe', + ), - + PlayState.gameOver.name: (context, game) => - + const OverlayScreen( + + PlayState.gameOver.name: + + (context, game) => const OverlayScreen( + title: 'G A M E O V E R', + subtitle: 'Tap to Play Again', + ), - + PlayState.won.name: (context, game) => - + const OverlayScreen( + + PlayState.won.name: + + (context, game) => const OverlayScreen( + title: 'Y O U W O N ! ! !', + subtitle: 'Tap to Play Again', + ), @@ -1196,17 +1205,13 @@ steps: import 'package:flutter/material.dart'; import 'package:flutter_animate/flutter_animate.dart'; - + class OverlayScreen extends StatelessWidget { - const OverlayScreen({ - super.key, - required this.title, - required this.subtitle, - }); - + const OverlayScreen({super.key, required this.title, required this.subtitle}); + final String title; final String subtitle; - + @override Widget build(BuildContext context) { return Container( @@ -1219,10 +1224,7 @@ steps: style: Theme.of(context).textTheme.headlineLarge, ).animate().slideY(duration: 750.ms, begin: -3, end: 0), const SizedBox(height: 16), - Text( - subtitle, - style: Theme.of(context).textTheme.headlineSmall, - ) + Text(subtitle, style: Theme.of(context).textTheme.headlineSmall) .animate(onPlay: (controller) => controller.repeat()) .fadeIn(duration: 1.seconds) .then() @@ -1240,15 +1242,12 @@ steps: // found in the LICENSE file. import 'package:flutter/material.dart'; - + class ScoreCard extends StatelessWidget { - const ScoreCard({ - super.key, - required this.score, - }); - + const ScoreCard({super.key, required this.score}); + final ValueNotifier score; - + @override Widget build(BuildContext context) { return ValueListenableBuilder( From 7ae08af7ec566bc6c3111678fe1d8d20727c97e5 Mon Sep 17 00:00:00 2001 From: Brett Morgan Date: Mon, 18 Nov 2024 12:44:04 +1100 Subject: [PATCH 081/108] Update github-client --- github-client/codelab_rebuild.yaml | 187 ++++++++---------- github-client/step_04/macos/Podfile | 1 - .../macos/Runner.xcodeproj/project.pbxproj | 90 ++++----- github-client/step_05/macos/Podfile | 1 - .../macos/Runner.xcodeproj/project.pbxproj | 90 ++++----- github-client/step_06/macos/Podfile | 1 - .../macos/Runner.xcodeproj/project.pbxproj | 90 ++++----- github-client/step_07/macos/Podfile | 1 - .../macos/Runner.xcodeproj/project.pbxproj | 90 ++++----- 9 files changed, 267 insertions(+), 284 deletions(-) diff --git a/github-client/codelab_rebuild.yaml b/github-client/codelab_rebuild.yaml index fe95367d78..729d313c33 100644 --- a/github-client/codelab_rebuild.yaml +++ b/github-client/codelab_rebuild.yaml @@ -492,18 +492,18 @@ steps: // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. - + import 'package:flutter/material.dart'; import 'github_oauth_credentials.dart'; import 'src/github_login.dart'; - + void main() { runApp(const MyApp()); } - + class MyApp extends StatelessWidget { const MyApp({super.key}); - + @override Widget build(BuildContext context) { return MaterialApp( @@ -517,25 +517,18 @@ steps: ); } } - + class MyHomePage extends StatelessWidget { const MyHomePage({super.key, required this.title}); final String title; - + @override Widget build(BuildContext context) { return GithubLoginWidget( builder: (context, httpClient) { return Scaffold( - appBar: AppBar( - title: Text(title), - elevation: 2, - ), - body: const Center( - child: Text( - 'You are logged in to GitHub!', - ), - ), + appBar: AppBar(title: Text(title), elevation: 2), + body: const Center(child: Text('You are logged in to GitHub!')), ); }, githubClientId: githubClientId, @@ -594,8 +587,9 @@ steps: import 'package:oauth2/oauth2.dart' as oauth2; import 'package:url_launcher/url_launcher.dart'; - final _authorizationEndpoint = - Uri.parse('https://github.com/login/oauth/authorize'); + final _authorizationEndpoint = Uri.parse( + 'https://github.com/login/oauth/authorize', + ); final _tokenEndpoint = Uri.parse('https://github.com/login/oauth/access_token'); class GithubLoginWidget extends StatefulWidget { @@ -615,8 +609,8 @@ steps: State createState() => _GithubLoginState(); } - typedef AuthenticatedBuilder = Widget Function( - BuildContext context, oauth2.Client client); + typedef AuthenticatedBuilder = + Widget Function(BuildContext context, oauth2.Client client); class _GithubLoginState extends State { HttpServer? _redirectServer; @@ -630,10 +624,7 @@ steps: } return Scaffold( - appBar: AppBar( - title: const Text('Github Login'), - elevation: 2, - ), + appBar: AppBar(title: const Text('Github Login'), elevation: 2), body: Center( child: ElevatedButton( onPressed: () async { @@ -641,7 +632,8 @@ steps: // Bind to an ephemeral port on localhost _redirectServer = await HttpServer.bind('localhost', 0); var authenticatedHttpClient = await _getOAuth2Client( - Uri.parse('http://localhost:${_redirectServer!.port}/auth')); + Uri.parse('http://localhost:${_redirectServer!.port}/auth'), + ); setState(() { _client = authenticatedHttpClient; }); @@ -655,8 +647,9 @@ steps: Future _getOAuth2Client(Uri redirectUrl) async { if (widget.githubClientId.isEmpty || widget.githubClientSecret.isEmpty) { throw const GithubLoginException( - 'githubClientId and githubClientSecret must be not empty. ' - 'See `lib/github_oauth_credentials.dart` for more detail.'); + 'githubClientId and githubClientSecret must be not empty. ' + 'See `lib/github_oauth_credentials.dart` for more detail.', + ); } var grant = oauth2.AuthorizationCodeGrant( widget.githubClientId, @@ -665,13 +658,16 @@ steps: secret: widget.githubClientSecret, httpClient: _JsonAcceptingHttpClient(), ); - var authorizationUrl = - grant.getAuthorizationUrl(redirectUrl, scopes: widget.githubScopes); + var authorizationUrl = grant.getAuthorizationUrl( + redirectUrl, + scopes: widget.githubScopes, + ); await _redirect(authorizationUrl); var responseQueryParameters = await _listen(); - var client = - await grant.handleAuthorizationResponse(responseQueryParameters); + var client = await grant.handleAuthorizationResponse( + responseQueryParameters, + ); return client; } @@ -800,28 +796,18 @@ steps: import 'github_oauth_credentials.dart'; import 'src/github_login.dart'; - @@ -45,16 +47,23 @@ class MyHomePage extends StatelessWidget { + @@ -45,9 +47,20 @@ class MyHomePage extends StatelessWidget { Widget build(BuildContext context) { return GithubLoginWidget( builder: (context, httpClient) { - return Scaffold( - - appBar: AppBar( - - title: Text(title), - - elevation: 2, - - ), - - body: const Center( - - child: Text( - - 'You are logged in to GitHub!', - - ), - - ), + - appBar: AppBar(title: Text(title), elevation: 2), + - body: const Center(child: Text('You are logged in to GitHub!')), + return FutureBuilder( + future: viewerDetail(httpClient.credentials.accessToken), + builder: (context, snapshot) { + return Scaffold( - + appBar: AppBar( - + title: Text(title), - + elevation: 2, - + ), + + appBar: AppBar(title: Text(title), elevation: 2), + body: Center( + child: Text( + snapshot.hasData @@ -834,7 +820,7 @@ steps: ); }, githubClientId: githubClientId, - @@ -63,3 +72,8 @@ class MyHomePage extends StatelessWidget { + @@ -56,3 +69,8 @@ class MyHomePage extends StatelessWidget { ); } } @@ -914,23 +900,23 @@ steps: // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. - + import 'package:flutter/material.dart'; import 'package:fluttericon/octicons_icons.dart'; import 'package:github/github.dart'; import 'package:url_launcher/url_launcher_string.dart'; - + class GitHubSummary extends StatefulWidget { const GitHubSummary({required this.gitHub, super.key}); final GitHub gitHub; - + @override State createState() => _GitHubSummaryState(); } - + class _GitHubSummaryState extends State { int _selectedIndex = 0; - + @override Widget build(BuildContext context) { return Row( @@ -974,24 +960,24 @@ steps: ); } } - + class RepositoriesList extends StatefulWidget { const RepositoriesList({required this.gitHub, super.key}); final GitHub gitHub; - + @override State createState() => _RepositoriesListState(); } - + class _RepositoriesListState extends State { @override initState() { super.initState(); _repositories = widget.gitHub.repositories.listRepositories().toList(); } - + late Future> _repositories; - + @override Widget build(BuildContext context) { return FutureBuilder>( @@ -1009,8 +995,9 @@ steps: itemBuilder: (context, index) { var repository = repositories[index]; return ListTile( - title: - Text('${repository.owner?.login ?? ''}/${repository.name}'), + title: Text( + '${repository.owner?.login ?? ''}/${repository.name}', + ), subtitle: Text(repository.description), onTap: () => _launchUrl(this, repository.htmlUrl), ); @@ -1021,24 +1008,24 @@ steps: ); } } - + class AssignedIssuesList extends StatefulWidget { const AssignedIssuesList({required this.gitHub, super.key}); final GitHub gitHub; - + @override State createState() => _AssignedIssuesListState(); } - + class _AssignedIssuesListState extends State { @override initState() { super.initState(); _assignedIssues = widget.gitHub.issues.listByUser().toList(); } - + late Future> _assignedIssues; - + @override Widget build(BuildContext context) { return FutureBuilder>( @@ -1057,9 +1044,11 @@ steps: var assignedIssue = assignedIssues[index]; return ListTile( title: Text(assignedIssue.title), - subtitle: Text('${_nameWithOwner(assignedIssue)} ' - 'Issue #${assignedIssue.number} ' - 'opened by ${assignedIssue.user?.login ?? ''}'), + subtitle: Text( + '${_nameWithOwner(assignedIssue)} ' + 'Issue #${assignedIssue.number} ' + 'opened by ${assignedIssue.user?.login ?? ''}', + ), onTap: () => _launchUrl(this, assignedIssue.htmlUrl), ); }, @@ -1068,32 +1057,33 @@ steps: }, ); } - + String _nameWithOwner(Issue assignedIssue) { final endIndex = assignedIssue.url.lastIndexOf('/issues/'); return assignedIssue.url.substring(29, endIndex); } } - + class PullRequestsList extends StatefulWidget { const PullRequestsList({required this.gitHub, super.key}); final GitHub gitHub; - + @override State createState() => _PullRequestsListState(); } - + class _PullRequestsListState extends State { @override initState() { super.initState(); - _pullRequests = widget.gitHub.pullRequests - .list(RepositorySlug('flutter', 'flutter')) - .toList(); + _pullRequests = + widget.gitHub.pullRequests + .list(RepositorySlug('flutter', 'flutter')) + .toList(); } - + late Future> _pullRequests; - + @override Widget build(BuildContext context) { return FutureBuilder>( @@ -1112,10 +1102,12 @@ steps: var pullRequest = pullRequests[index]; return ListTile( title: Text(pullRequest.title ?? ''), - subtitle: Text('flutter/flutter ' - 'PR #${pullRequest.number} ' - 'opened by ${pullRequest.user?.login ?? ''} ' - '(${pullRequest.state?.toLowerCase() ?? ''})'), + subtitle: Text( + 'flutter/flutter ' + 'PR #${pullRequest.number} ' + 'opened by ${pullRequest.user?.login ?? ''} ' + '(${pullRequest.state?.toLowerCase() ?? ''})', + ), onTap: () => _launchUrl(this, pullRequest.htmlUrl ?? ''), ); }, @@ -1125,7 +1117,7 @@ steps: ); } } - + Future _launchUrl(State state, String url) async { if (await canLaunchUrlString(url)) { await launchUrlString(url); @@ -1133,18 +1125,19 @@ steps: if (state.mounted) { return showDialog( context: state.context, - builder: (context) => AlertDialog( - title: const Text('Navigation error'), - content: Text('Could not launch $url'), - actions: [ - TextButton( - onPressed: () { - Navigator.of(context).pop(); - }, - child: const Text('Close'), + builder: + (context) => AlertDialog( + title: const Text('Navigation error'), + content: Text('Could not launch $url'), + actions: [ + TextButton( + onPressed: () { + Navigator.of(context).pop(); + }, + child: const Text('Close'), + ), + ], ), - ], - ), ); } } @@ -1162,7 +1155,7 @@ steps: void main() { runApp(const MyApp()); - @@ -49,23 +50,14 @@ class MyHomePage extends StatelessWidget { + @@ -49,20 +50,11 @@ class MyHomePage extends StatelessWidget { return GithubLoginWidget( builder: (context, httpClient) { WindowToFront.activate(); @@ -1170,10 +1163,7 @@ steps: - future: viewerDetail(httpClient.credentials.accessToken), - builder: (context, snapshot) { - return Scaffold( - - appBar: AppBar( - - title: Text(title), - - elevation: 2, - - ), + - appBar: AppBar(title: Text(title), elevation: 2), - body: Center( - child: Text( - snapshot.hasData @@ -1184,17 +1174,14 @@ steps: - ); - }, + return Scaffold( - + appBar: AppBar( - + title: Text(title), - + elevation: 2, - + ), + + appBar: AppBar(title: Text(title), elevation: 2), + body: GitHubSummary( + gitHub: _getGitHub(httpClient.credentials.accessToken), + ), ); }, githubClientId: githubClientId, - @@ -75,7 +67,6 @@ class MyHomePage extends StatelessWidget { + @@ -72,7 +64,6 @@ class MyHomePage extends StatelessWidget { } } diff --git a/github-client/step_04/macos/Podfile b/github-client/step_04/macos/Podfile index c795730db8..29c8eb3294 100644 --- a/github-client/step_04/macos/Podfile +++ b/github-client/step_04/macos/Podfile @@ -28,7 +28,6 @@ flutter_macos_podfile_setup target 'Runner' do use_frameworks! - use_modular_headers! flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__)) target 'RunnerTests' do diff --git a/github-client/step_04/macos/Runner.xcodeproj/project.pbxproj b/github-client/step_04/macos/Runner.xcodeproj/project.pbxproj index 9c547ced8c..274a6eb277 100644 --- a/github-client/step_04/macos/Runner.xcodeproj/project.pbxproj +++ b/github-client/step_04/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ - 302773E1AEE43F058B27E47E /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B74A8B2F285D5B191087173B /* Pods_Runner.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - ECAF2AB7EA1C06DA530A51CE /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FE8C391B092623A44BF6FE36 /* Pods_RunnerTests.framework */; }; + 54C4E5A865C590D2992E7F3A /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0A3A2B0617929155E0535E0A /* Pods_RunnerTests.framework */; }; + A57C0FEF83F710DC898B9152 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6DC9BBE6BDDE0206508D885A /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,8 +62,8 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 2087AEE23C5C318CFCFDC00B /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 219F633DE5BEABF086F4C06A /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 0A3A2B0617929155E0535E0A /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 2F4CDBDBEA791BEB991808D9 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -80,14 +80,14 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 368FAF2B4663B14E56BE757B /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 585C986D447038F9DB61FCA0 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 6DC9BBE6BDDE0206508D885A /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 768770B6BD0081540D34BEB2 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; + 7B8FD90549B7DE7CBC8DD414 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - A84A6122508992F73FD579BF /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - B74A8B2F285D5B191087173B /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - C7555FBA428DB388D97A495B /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - EA699ECC9DACD6A7CFAE2B74 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - FE8C391B092623A44BF6FE36 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + B1DA81F7B78A0B9FB84B0395 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + F2D9095ADF457A563D82AB72 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - ECAF2AB7EA1C06DA530A51CE /* Pods_RunnerTests.framework in Frameworks */, + 54C4E5A865C590D2992E7F3A /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,7 +103,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 302773E1AEE43F058B27E47E /* Pods_Runner.framework in Frameworks */, + A57C0FEF83F710DC898B9152 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -137,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 613D46063BF07D19DF03D025 /* Pods */, + B71B38B239AF088CC4074E54 /* Pods */, ); sourceTree = ""; }; @@ -185,15 +185,15 @@ path = Runner; sourceTree = ""; }; - 613D46063BF07D19DF03D025 /* Pods */ = { + B71B38B239AF088CC4074E54 /* Pods */ = { isa = PBXGroup; children = ( - 368FAF2B4663B14E56BE757B /* Pods-Runner.debug.xcconfig */, - 219F633DE5BEABF086F4C06A /* Pods-Runner.release.xcconfig */, - EA699ECC9DACD6A7CFAE2B74 /* Pods-Runner.profile.xcconfig */, - 2087AEE23C5C318CFCFDC00B /* Pods-RunnerTests.debug.xcconfig */, - A84A6122508992F73FD579BF /* Pods-RunnerTests.release.xcconfig */, - C7555FBA428DB388D97A495B /* Pods-RunnerTests.profile.xcconfig */, + 585C986D447038F9DB61FCA0 /* Pods-Runner.debug.xcconfig */, + B1DA81F7B78A0B9FB84B0395 /* Pods-Runner.release.xcconfig */, + 768770B6BD0081540D34BEB2 /* Pods-Runner.profile.xcconfig */, + F2D9095ADF457A563D82AB72 /* Pods-RunnerTests.debug.xcconfig */, + 7B8FD90549B7DE7CBC8DD414 /* Pods-RunnerTests.release.xcconfig */, + 2F4CDBDBEA791BEB991808D9 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -202,8 +202,8 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - B74A8B2F285D5B191087173B /* Pods_Runner.framework */, - FE8C391B092623A44BF6FE36 /* Pods_RunnerTests.framework */, + 6DC9BBE6BDDE0206508D885A /* Pods_Runner.framework */, + 0A3A2B0617929155E0535E0A /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 1BBB1539B6F2B069E29309AD /* [CP] Check Pods Manifest.lock */, + 504B14C3FA08048615B2AADD /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - F4AE982DDE29CB666CD5E9FF /* [CP] Check Pods Manifest.lock */, + CA16EFAF21D4B2FD89A56123 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - BC6732D8A6B4C5F75ED1D31F /* [CP] Embed Pods Frameworks */, + 9F09EE39EF44B81C4C614785 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,67 +323,67 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 1BBB1539B6F2B069E29309AD /* [CP] Check Pods Manifest.lock */ = { + 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", ); - name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; }; - 3399D490228B24CF009A79C7 /* ShellScript */ = { + 33CC111E2044C6BF0003C045 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + Flutter/ephemeral/FlutterInputs.xcfilelist, ); inputPaths = ( + Flutter/ephemeral/tripwire, ); outputFileListPaths = ( + Flutter/ephemeral/FlutterOutputs.xcfilelist, ); outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; + shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 33CC111E2044C6BF0003C045 /* ShellScript */ = { + 504B14C3FA08048615B2AADD /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - Flutter/ephemeral/FlutterInputs.xcfilelist, ); inputPaths = ( - Flutter/ephemeral/tripwire, + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - Flutter/ephemeral/FlutterOutputs.xcfilelist, ); outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - BC6732D8A6B4C5F75ED1D31F /* [CP] Embed Pods Frameworks */ = { + 9F09EE39EF44B81C4C614785 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -400,7 +400,7 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - F4AE982DDE29CB666CD5E9FF /* [CP] Check Pods Manifest.lock */ = { + CA16EFAF21D4B2FD89A56123 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 2087AEE23C5C318CFCFDC00B /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = F2D9095ADF457A563D82AB72 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = A84A6122508992F73FD579BF /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 7B8FD90549B7DE7CBC8DD414 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C7555FBA428DB388D97A495B /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 2F4CDBDBEA791BEB991808D9 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/github-client/step_05/macos/Podfile b/github-client/step_05/macos/Podfile index c795730db8..29c8eb3294 100644 --- a/github-client/step_05/macos/Podfile +++ b/github-client/step_05/macos/Podfile @@ -28,7 +28,6 @@ flutter_macos_podfile_setup target 'Runner' do use_frameworks! - use_modular_headers! flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__)) target 'RunnerTests' do diff --git a/github-client/step_05/macos/Runner.xcodeproj/project.pbxproj b/github-client/step_05/macos/Runner.xcodeproj/project.pbxproj index 9c547ced8c..274a6eb277 100644 --- a/github-client/step_05/macos/Runner.xcodeproj/project.pbxproj +++ b/github-client/step_05/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ - 302773E1AEE43F058B27E47E /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B74A8B2F285D5B191087173B /* Pods_Runner.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - ECAF2AB7EA1C06DA530A51CE /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FE8C391B092623A44BF6FE36 /* Pods_RunnerTests.framework */; }; + 54C4E5A865C590D2992E7F3A /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0A3A2B0617929155E0535E0A /* Pods_RunnerTests.framework */; }; + A57C0FEF83F710DC898B9152 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6DC9BBE6BDDE0206508D885A /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,8 +62,8 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 2087AEE23C5C318CFCFDC00B /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 219F633DE5BEABF086F4C06A /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 0A3A2B0617929155E0535E0A /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 2F4CDBDBEA791BEB991808D9 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -80,14 +80,14 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 368FAF2B4663B14E56BE757B /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 585C986D447038F9DB61FCA0 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 6DC9BBE6BDDE0206508D885A /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 768770B6BD0081540D34BEB2 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; + 7B8FD90549B7DE7CBC8DD414 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - A84A6122508992F73FD579BF /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - B74A8B2F285D5B191087173B /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - C7555FBA428DB388D97A495B /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - EA699ECC9DACD6A7CFAE2B74 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - FE8C391B092623A44BF6FE36 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + B1DA81F7B78A0B9FB84B0395 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + F2D9095ADF457A563D82AB72 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - ECAF2AB7EA1C06DA530A51CE /* Pods_RunnerTests.framework in Frameworks */, + 54C4E5A865C590D2992E7F3A /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,7 +103,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 302773E1AEE43F058B27E47E /* Pods_Runner.framework in Frameworks */, + A57C0FEF83F710DC898B9152 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -137,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 613D46063BF07D19DF03D025 /* Pods */, + B71B38B239AF088CC4074E54 /* Pods */, ); sourceTree = ""; }; @@ -185,15 +185,15 @@ path = Runner; sourceTree = ""; }; - 613D46063BF07D19DF03D025 /* Pods */ = { + B71B38B239AF088CC4074E54 /* Pods */ = { isa = PBXGroup; children = ( - 368FAF2B4663B14E56BE757B /* Pods-Runner.debug.xcconfig */, - 219F633DE5BEABF086F4C06A /* Pods-Runner.release.xcconfig */, - EA699ECC9DACD6A7CFAE2B74 /* Pods-Runner.profile.xcconfig */, - 2087AEE23C5C318CFCFDC00B /* Pods-RunnerTests.debug.xcconfig */, - A84A6122508992F73FD579BF /* Pods-RunnerTests.release.xcconfig */, - C7555FBA428DB388D97A495B /* Pods-RunnerTests.profile.xcconfig */, + 585C986D447038F9DB61FCA0 /* Pods-Runner.debug.xcconfig */, + B1DA81F7B78A0B9FB84B0395 /* Pods-Runner.release.xcconfig */, + 768770B6BD0081540D34BEB2 /* Pods-Runner.profile.xcconfig */, + F2D9095ADF457A563D82AB72 /* Pods-RunnerTests.debug.xcconfig */, + 7B8FD90549B7DE7CBC8DD414 /* Pods-RunnerTests.release.xcconfig */, + 2F4CDBDBEA791BEB991808D9 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -202,8 +202,8 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - B74A8B2F285D5B191087173B /* Pods_Runner.framework */, - FE8C391B092623A44BF6FE36 /* Pods_RunnerTests.framework */, + 6DC9BBE6BDDE0206508D885A /* Pods_Runner.framework */, + 0A3A2B0617929155E0535E0A /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 1BBB1539B6F2B069E29309AD /* [CP] Check Pods Manifest.lock */, + 504B14C3FA08048615B2AADD /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - F4AE982DDE29CB666CD5E9FF /* [CP] Check Pods Manifest.lock */, + CA16EFAF21D4B2FD89A56123 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - BC6732D8A6B4C5F75ED1D31F /* [CP] Embed Pods Frameworks */, + 9F09EE39EF44B81C4C614785 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,67 +323,67 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 1BBB1539B6F2B069E29309AD /* [CP] Check Pods Manifest.lock */ = { + 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", ); - name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; }; - 3399D490228B24CF009A79C7 /* ShellScript */ = { + 33CC111E2044C6BF0003C045 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + Flutter/ephemeral/FlutterInputs.xcfilelist, ); inputPaths = ( + Flutter/ephemeral/tripwire, ); outputFileListPaths = ( + Flutter/ephemeral/FlutterOutputs.xcfilelist, ); outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; + shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 33CC111E2044C6BF0003C045 /* ShellScript */ = { + 504B14C3FA08048615B2AADD /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - Flutter/ephemeral/FlutterInputs.xcfilelist, ); inputPaths = ( - Flutter/ephemeral/tripwire, + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - Flutter/ephemeral/FlutterOutputs.xcfilelist, ); outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - BC6732D8A6B4C5F75ED1D31F /* [CP] Embed Pods Frameworks */ = { + 9F09EE39EF44B81C4C614785 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -400,7 +400,7 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - F4AE982DDE29CB666CD5E9FF /* [CP] Check Pods Manifest.lock */ = { + CA16EFAF21D4B2FD89A56123 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 2087AEE23C5C318CFCFDC00B /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = F2D9095ADF457A563D82AB72 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = A84A6122508992F73FD579BF /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 7B8FD90549B7DE7CBC8DD414 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C7555FBA428DB388D97A495B /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 2F4CDBDBEA791BEB991808D9 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/github-client/step_06/macos/Podfile b/github-client/step_06/macos/Podfile index c795730db8..29c8eb3294 100644 --- a/github-client/step_06/macos/Podfile +++ b/github-client/step_06/macos/Podfile @@ -28,7 +28,6 @@ flutter_macos_podfile_setup target 'Runner' do use_frameworks! - use_modular_headers! flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__)) target 'RunnerTests' do diff --git a/github-client/step_06/macos/Runner.xcodeproj/project.pbxproj b/github-client/step_06/macos/Runner.xcodeproj/project.pbxproj index 9c547ced8c..274a6eb277 100644 --- a/github-client/step_06/macos/Runner.xcodeproj/project.pbxproj +++ b/github-client/step_06/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ - 302773E1AEE43F058B27E47E /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B74A8B2F285D5B191087173B /* Pods_Runner.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - ECAF2AB7EA1C06DA530A51CE /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FE8C391B092623A44BF6FE36 /* Pods_RunnerTests.framework */; }; + 54C4E5A865C590D2992E7F3A /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0A3A2B0617929155E0535E0A /* Pods_RunnerTests.framework */; }; + A57C0FEF83F710DC898B9152 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6DC9BBE6BDDE0206508D885A /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,8 +62,8 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 2087AEE23C5C318CFCFDC00B /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 219F633DE5BEABF086F4C06A /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 0A3A2B0617929155E0535E0A /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 2F4CDBDBEA791BEB991808D9 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -80,14 +80,14 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 368FAF2B4663B14E56BE757B /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 585C986D447038F9DB61FCA0 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 6DC9BBE6BDDE0206508D885A /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 768770B6BD0081540D34BEB2 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; + 7B8FD90549B7DE7CBC8DD414 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - A84A6122508992F73FD579BF /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - B74A8B2F285D5B191087173B /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - C7555FBA428DB388D97A495B /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - EA699ECC9DACD6A7CFAE2B74 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - FE8C391B092623A44BF6FE36 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + B1DA81F7B78A0B9FB84B0395 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + F2D9095ADF457A563D82AB72 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - ECAF2AB7EA1C06DA530A51CE /* Pods_RunnerTests.framework in Frameworks */, + 54C4E5A865C590D2992E7F3A /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,7 +103,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 302773E1AEE43F058B27E47E /* Pods_Runner.framework in Frameworks */, + A57C0FEF83F710DC898B9152 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -137,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 613D46063BF07D19DF03D025 /* Pods */, + B71B38B239AF088CC4074E54 /* Pods */, ); sourceTree = ""; }; @@ -185,15 +185,15 @@ path = Runner; sourceTree = ""; }; - 613D46063BF07D19DF03D025 /* Pods */ = { + B71B38B239AF088CC4074E54 /* Pods */ = { isa = PBXGroup; children = ( - 368FAF2B4663B14E56BE757B /* Pods-Runner.debug.xcconfig */, - 219F633DE5BEABF086F4C06A /* Pods-Runner.release.xcconfig */, - EA699ECC9DACD6A7CFAE2B74 /* Pods-Runner.profile.xcconfig */, - 2087AEE23C5C318CFCFDC00B /* Pods-RunnerTests.debug.xcconfig */, - A84A6122508992F73FD579BF /* Pods-RunnerTests.release.xcconfig */, - C7555FBA428DB388D97A495B /* Pods-RunnerTests.profile.xcconfig */, + 585C986D447038F9DB61FCA0 /* Pods-Runner.debug.xcconfig */, + B1DA81F7B78A0B9FB84B0395 /* Pods-Runner.release.xcconfig */, + 768770B6BD0081540D34BEB2 /* Pods-Runner.profile.xcconfig */, + F2D9095ADF457A563D82AB72 /* Pods-RunnerTests.debug.xcconfig */, + 7B8FD90549B7DE7CBC8DD414 /* Pods-RunnerTests.release.xcconfig */, + 2F4CDBDBEA791BEB991808D9 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -202,8 +202,8 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - B74A8B2F285D5B191087173B /* Pods_Runner.framework */, - FE8C391B092623A44BF6FE36 /* Pods_RunnerTests.framework */, + 6DC9BBE6BDDE0206508D885A /* Pods_Runner.framework */, + 0A3A2B0617929155E0535E0A /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 1BBB1539B6F2B069E29309AD /* [CP] Check Pods Manifest.lock */, + 504B14C3FA08048615B2AADD /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - F4AE982DDE29CB666CD5E9FF /* [CP] Check Pods Manifest.lock */, + CA16EFAF21D4B2FD89A56123 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - BC6732D8A6B4C5F75ED1D31F /* [CP] Embed Pods Frameworks */, + 9F09EE39EF44B81C4C614785 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,67 +323,67 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 1BBB1539B6F2B069E29309AD /* [CP] Check Pods Manifest.lock */ = { + 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", ); - name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; }; - 3399D490228B24CF009A79C7 /* ShellScript */ = { + 33CC111E2044C6BF0003C045 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + Flutter/ephemeral/FlutterInputs.xcfilelist, ); inputPaths = ( + Flutter/ephemeral/tripwire, ); outputFileListPaths = ( + Flutter/ephemeral/FlutterOutputs.xcfilelist, ); outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; + shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 33CC111E2044C6BF0003C045 /* ShellScript */ = { + 504B14C3FA08048615B2AADD /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - Flutter/ephemeral/FlutterInputs.xcfilelist, ); inputPaths = ( - Flutter/ephemeral/tripwire, + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - Flutter/ephemeral/FlutterOutputs.xcfilelist, ); outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - BC6732D8A6B4C5F75ED1D31F /* [CP] Embed Pods Frameworks */ = { + 9F09EE39EF44B81C4C614785 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -400,7 +400,7 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - F4AE982DDE29CB666CD5E9FF /* [CP] Check Pods Manifest.lock */ = { + CA16EFAF21D4B2FD89A56123 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 2087AEE23C5C318CFCFDC00B /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = F2D9095ADF457A563D82AB72 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = A84A6122508992F73FD579BF /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 7B8FD90549B7DE7CBC8DD414 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C7555FBA428DB388D97A495B /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 2F4CDBDBEA791BEB991808D9 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/github-client/step_07/macos/Podfile b/github-client/step_07/macos/Podfile index c795730db8..29c8eb3294 100644 --- a/github-client/step_07/macos/Podfile +++ b/github-client/step_07/macos/Podfile @@ -28,7 +28,6 @@ flutter_macos_podfile_setup target 'Runner' do use_frameworks! - use_modular_headers! flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__)) target 'RunnerTests' do diff --git a/github-client/step_07/macos/Runner.xcodeproj/project.pbxproj b/github-client/step_07/macos/Runner.xcodeproj/project.pbxproj index 9c547ced8c..274a6eb277 100644 --- a/github-client/step_07/macos/Runner.xcodeproj/project.pbxproj +++ b/github-client/step_07/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ - 302773E1AEE43F058B27E47E /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B74A8B2F285D5B191087173B /* Pods_Runner.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - ECAF2AB7EA1C06DA530A51CE /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FE8C391B092623A44BF6FE36 /* Pods_RunnerTests.framework */; }; + 54C4E5A865C590D2992E7F3A /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0A3A2B0617929155E0535E0A /* Pods_RunnerTests.framework */; }; + A57C0FEF83F710DC898B9152 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6DC9BBE6BDDE0206508D885A /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,8 +62,8 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 2087AEE23C5C318CFCFDC00B /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 219F633DE5BEABF086F4C06A /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 0A3A2B0617929155E0535E0A /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 2F4CDBDBEA791BEB991808D9 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -80,14 +80,14 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 368FAF2B4663B14E56BE757B /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 585C986D447038F9DB61FCA0 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 6DC9BBE6BDDE0206508D885A /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 768770B6BD0081540D34BEB2 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; + 7B8FD90549B7DE7CBC8DD414 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - A84A6122508992F73FD579BF /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - B74A8B2F285D5B191087173B /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - C7555FBA428DB388D97A495B /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - EA699ECC9DACD6A7CFAE2B74 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - FE8C391B092623A44BF6FE36 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + B1DA81F7B78A0B9FB84B0395 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + F2D9095ADF457A563D82AB72 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - ECAF2AB7EA1C06DA530A51CE /* Pods_RunnerTests.framework in Frameworks */, + 54C4E5A865C590D2992E7F3A /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,7 +103,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 302773E1AEE43F058B27E47E /* Pods_Runner.framework in Frameworks */, + A57C0FEF83F710DC898B9152 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -137,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 613D46063BF07D19DF03D025 /* Pods */, + B71B38B239AF088CC4074E54 /* Pods */, ); sourceTree = ""; }; @@ -185,15 +185,15 @@ path = Runner; sourceTree = ""; }; - 613D46063BF07D19DF03D025 /* Pods */ = { + B71B38B239AF088CC4074E54 /* Pods */ = { isa = PBXGroup; children = ( - 368FAF2B4663B14E56BE757B /* Pods-Runner.debug.xcconfig */, - 219F633DE5BEABF086F4C06A /* Pods-Runner.release.xcconfig */, - EA699ECC9DACD6A7CFAE2B74 /* Pods-Runner.profile.xcconfig */, - 2087AEE23C5C318CFCFDC00B /* Pods-RunnerTests.debug.xcconfig */, - A84A6122508992F73FD579BF /* Pods-RunnerTests.release.xcconfig */, - C7555FBA428DB388D97A495B /* Pods-RunnerTests.profile.xcconfig */, + 585C986D447038F9DB61FCA0 /* Pods-Runner.debug.xcconfig */, + B1DA81F7B78A0B9FB84B0395 /* Pods-Runner.release.xcconfig */, + 768770B6BD0081540D34BEB2 /* Pods-Runner.profile.xcconfig */, + F2D9095ADF457A563D82AB72 /* Pods-RunnerTests.debug.xcconfig */, + 7B8FD90549B7DE7CBC8DD414 /* Pods-RunnerTests.release.xcconfig */, + 2F4CDBDBEA791BEB991808D9 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -202,8 +202,8 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - B74A8B2F285D5B191087173B /* Pods_Runner.framework */, - FE8C391B092623A44BF6FE36 /* Pods_RunnerTests.framework */, + 6DC9BBE6BDDE0206508D885A /* Pods_Runner.framework */, + 0A3A2B0617929155E0535E0A /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 1BBB1539B6F2B069E29309AD /* [CP] Check Pods Manifest.lock */, + 504B14C3FA08048615B2AADD /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - F4AE982DDE29CB666CD5E9FF /* [CP] Check Pods Manifest.lock */, + CA16EFAF21D4B2FD89A56123 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - BC6732D8A6B4C5F75ED1D31F /* [CP] Embed Pods Frameworks */, + 9F09EE39EF44B81C4C614785 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,67 +323,67 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 1BBB1539B6F2B069E29309AD /* [CP] Check Pods Manifest.lock */ = { + 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", ); - name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; }; - 3399D490228B24CF009A79C7 /* ShellScript */ = { + 33CC111E2044C6BF0003C045 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + Flutter/ephemeral/FlutterInputs.xcfilelist, ); inputPaths = ( + Flutter/ephemeral/tripwire, ); outputFileListPaths = ( + Flutter/ephemeral/FlutterOutputs.xcfilelist, ); outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; + shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 33CC111E2044C6BF0003C045 /* ShellScript */ = { + 504B14C3FA08048615B2AADD /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - Flutter/ephemeral/FlutterInputs.xcfilelist, ); inputPaths = ( - Flutter/ephemeral/tripwire, + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - Flutter/ephemeral/FlutterOutputs.xcfilelist, ); outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - BC6732D8A6B4C5F75ED1D31F /* [CP] Embed Pods Frameworks */ = { + 9F09EE39EF44B81C4C614785 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -400,7 +400,7 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - F4AE982DDE29CB666CD5E9FF /* [CP] Check Pods Manifest.lock */ = { + CA16EFAF21D4B2FD89A56123 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 2087AEE23C5C318CFCFDC00B /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = F2D9095ADF457A563D82AB72 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = A84A6122508992F73FD579BF /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 7B8FD90549B7DE7CBC8DD414 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C7555FBA428DB388D97A495B /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 2F4CDBDBEA791BEB991808D9 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; From 5b6131e3c5984720f41aabebd0fb1bb4f7b042db Mon Sep 17 00:00:00 2001 From: Brett Morgan Date: Mon, 18 Nov 2024 13:14:07 +1100 Subject: [PATCH 082/108] Update `google-maps-in-flutter` --- google-maps-in-flutter/codelab_rebuild.yaml | 102 ++++++-------- .../app/{build.gradle => build.gradle.kts} | 10 +- .../step_3/android/build.gradle | 18 --- .../step_3/android/build.gradle.kts | 21 +++ .../step_3/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../step_3/android/settings.gradle | 25 ---- .../step_3/android/settings.gradle.kts | 25 ++++ google-maps-in-flutter/step_3/ios/Podfile | 1 - .../ios/Runner.xcodeproj/project.pbxproj | 124 +++++++++--------- google-maps-in-flutter/step_3/pubspec.yaml | 2 +- .../android/app/build.gradle.kts} | 10 +- .../step_4/android/build.gradle | 18 --- .../step_4/android/build.gradle.kts | 21 +++ .../step_4/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../step_4/android/settings.gradle | 25 ---- .../step_4/android/settings.gradle.kts | 25 ++++ google-maps-in-flutter/step_4/ios/Podfile | 1 - .../ios/Runner.xcodeproj/project.pbxproj | 124 +++++++++--------- google-maps-in-flutter/step_4/pubspec.yaml | 2 +- .../android/app/build.gradle.kts} | 10 +- .../step_5/android/build.gradle | 18 --- .../step_5/android/build.gradle.kts | 21 +++ .../step_5/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../step_5/android/settings.gradle | 25 ---- .../step_5/android/settings.gradle.kts | 25 ++++ google-maps-in-flutter/step_5/ios/Podfile | 1 - .../ios/Runner.xcodeproj/project.pbxproj | 124 +++++++++--------- google-maps-in-flutter/step_5/pubspec.yaml | 2 +- 31 files changed, 391 insertions(+), 401 deletions(-) rename google-maps-in-flutter/step_3/android/app/{build.gradle => build.gradle.kts} (83%) delete mode 100644 google-maps-in-flutter/step_3/android/build.gradle create mode 100644 google-maps-in-flutter/step_3/android/build.gradle.kts delete mode 100644 google-maps-in-flutter/step_3/android/settings.gradle create mode 100644 google-maps-in-flutter/step_3/android/settings.gradle.kts rename google-maps-in-flutter/{step_5/android/app/build.gradle => step_4/android/app/build.gradle.kts} (83%) delete mode 100644 google-maps-in-flutter/step_4/android/build.gradle create mode 100644 google-maps-in-flutter/step_4/android/build.gradle.kts delete mode 100644 google-maps-in-flutter/step_4/android/settings.gradle create mode 100644 google-maps-in-flutter/step_4/android/settings.gradle.kts rename google-maps-in-flutter/{step_4/android/app/build.gradle => step_5/android/app/build.gradle.kts} (83%) delete mode 100644 google-maps-in-flutter/step_5/android/build.gradle create mode 100644 google-maps-in-flutter/step_5/android/build.gradle.kts delete mode 100644 google-maps-in-flutter/step_5/android/settings.gradle create mode 100644 google-maps-in-flutter/step_5/android/settings.gradle.kts diff --git a/google-maps-in-flutter/codelab_rebuild.yaml b/google-maps-in-flutter/codelab_rebuild.yaml index 6d46ce26b6..33a8f436e0 100644 --- a/google-maps-in-flutter/codelab_rebuild.yaml +++ b/google-maps-in-flutter/codelab_rebuild.yaml @@ -47,8 +47,8 @@ steps: } ] } - - name: Patch android/app/build.gradle - path: google_maps_in_flutter/android/app/build.gradle + - name: Patch android/app/build.gradle.kts + path: google_maps_in_flutter/android/app/build.gradle.kts patch-u: | --- b/google-maps-in-flutter/step_3/android/app/build.gradle +++ a/google-maps-in-flutter/step_3/android/app/build.gradle @@ -268,21 +268,12 @@ steps: @override Widget build(BuildContext context) { return MaterialApp( - theme: ThemeData( - useMaterial3: true, - colorSchemeSeed: Colors.green[700], - ), + theme: ThemeData(useMaterial3: true, colorSchemeSeed: Colors.green[700]), home: Scaffold( - appBar: AppBar( - title: const Text('Maps Sample App'), - elevation: 2, - ), + appBar: AppBar(title: const Text('Maps Sample App'), elevation: 2), body: GoogleMap( onMapCreated: _onMapCreated, - initialCameraPosition: CameraPosition( - target: _center, - zoom: 11.0, - ), + initialCameraPosition: CameraPosition(target: _center, zoom: 11.0), ), ), ); @@ -1256,30 +1247,27 @@ steps: * See the License for the specific language governing permissions and * limitations under the License. */ - + import 'dart:convert'; - + import 'package:flutter/foundation.dart'; import 'package:flutter/services.dart' show rootBundle; import 'package:http/http.dart' as http; import 'package:json_annotation/json_annotation.dart'; - + part 'locations.g.dart'; - + @JsonSerializable() class LatLng { - LatLng({ - required this.lat, - required this.lng, - }); - + LatLng({required this.lat, required this.lng}); + factory LatLng.fromJson(Map json) => _$LatLngFromJson(json); Map toJson() => _$LatLngToJson(this); - + final double lat; final double lng; } - + @JsonSerializable() class Region { Region({ @@ -1288,16 +1276,16 @@ steps: required this.name, required this.zoom, }); - + factory Region.fromJson(Map json) => _$RegionFromJson(json); Map toJson() => _$RegionToJson(this); - + final LatLng coords; final String id; final String name; final double zoom; } - + @JsonSerializable() class Office { Office({ @@ -1310,10 +1298,10 @@ steps: required this.phone, required this.region, }); - + factory Office.fromJson(Map json) => _$OfficeFromJson(json); Map toJson() => _$OfficeToJson(this); - + final String address; final String id; final String image; @@ -1323,43 +1311,40 @@ steps: final String phone; final String region; } - + @JsonSerializable() class Locations { - Locations({ - required this.offices, - required this.regions, - }); - + Locations({required this.offices, required this.regions}); + factory Locations.fromJson(Map json) => _$LocationsFromJson(json); Map toJson() => _$LocationsToJson(this); - + final List offices; final List regions; } - + Future getGoogleOffices() async { const googleLocationsURL = 'https://about.google/static/data/locations.json'; - + // Retrieve the locations of Google offices try { final response = await http.get(Uri.parse(googleLocationsURL)); if (response.statusCode == 200) { return Locations.fromJson( - json.decode(response.body) as Map); + json.decode(response.body) as Map, + ); } } catch (e) { if (kDebugMode) { print(e); } } - + // Fallback for when the above HTTP request fails. return Locations.fromJson( - json.decode( - await rootBundle.loadString('assets/locations.json'), - ) as Map, + json.decode(await rootBundle.loadString('assets/locations.json')) + as Map, ); } - name: Patch lib/main.dart @@ -1375,7 +1360,7 @@ steps: void main() { runApp(const MyApp()); - @@ -29,12 +30,23 @@ class MyApp extends StatefulWidget { + @@ -29,12 +30,20 @@ class MyApp extends StatefulWidget { } class _MyAppState extends State { @@ -1394,10 +1379,7 @@ steps: + final marker = Marker( + markerId: MarkerId(office.name), + position: LatLng(office.lat, office.lng), - + infoWindow: InfoWindow( - + title: office.name, - + snippet: office.address, - + ), + + infoWindow: InfoWindow(title: office.name, snippet: office.address), + ); + _markers[office.name] = marker; + } @@ -1405,23 +1387,22 @@ steps: } @override - @@ -46,15 +58,16 @@ class _MyAppState extends State { - ), + @@ -42,10 +51,17 @@ class _MyAppState extends State { + return MaterialApp( + theme: ThemeData(useMaterial3: true, colorSchemeSeed: Colors.green[700]), home: Scaffold( - appBar: AppBar( - - title: const Text('Maps Sample App'), + - appBar: AppBar(title: const Text('Maps Sample App'), elevation: 2), + + appBar: AppBar( + title: const Text('Google Office Locations'), - elevation: 2, - ), + + elevation: 2, + + ), body: GoogleMap( onMapCreated: _onMapCreated, - - initialCameraPosition: CameraPosition( - - target: _center, - - zoom: 11.0, + - initialCameraPosition: CameraPosition(target: _center, zoom: 11.0), + initialCameraPosition: const CameraPosition( + target: LatLng(0, 0), + zoom: 2, - ), + + ), + markers: _markers.values.toSet(), ), ), @@ -1443,6 +1424,9 @@ steps: - name: Run build_runner path: google_maps_in_flutter dart: run build_runner build + - name: format locations.g.dart + path: google_maps_in_flutter + dart: format lib/src/locations.g.dart - name: Patch lib/src/locations.g.dart path: google_maps_in_flutter/lib/src/locations.g.dart patch-u: | diff --git a/google-maps-in-flutter/step_3/android/app/build.gradle b/google-maps-in-flutter/step_3/android/app/build.gradle.kts similarity index 83% rename from google-maps-in-flutter/step_3/android/app/build.gradle rename to google-maps-in-flutter/step_3/android/app/build.gradle.kts index ff699ddc54..0cc8363782 100644 --- a/google-maps-in-flutter/step_3/android/app/build.gradle +++ b/google-maps-in-flutter/step_3/android/app/build.gradle.kts @@ -1,8 +1,8 @@ plugins { - id "com.android.application" - id "kotlin-android" + id("com.android.application") + id("kotlin-android") // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. - id "dev.flutter.flutter-gradle-plugin" + id("dev.flutter.flutter-gradle-plugin") } android { @@ -16,7 +16,7 @@ android { } kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8 + jvmTarget = JavaVersion.VERSION_1_8.toString() } defaultConfig { @@ -34,7 +34,7 @@ android { release { // TODO: Add your own signing config for the release build. // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig = signingConfigs.debug + signingConfig = signingConfigs.getByName("debug") } } } diff --git a/google-maps-in-flutter/step_3/android/build.gradle b/google-maps-in-flutter/step_3/android/build.gradle deleted file mode 100644 index d2ffbffa4c..0000000000 --- a/google-maps-in-flutter/step_3/android/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = "../build" -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(":app") -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/google-maps-in-flutter/step_3/android/build.gradle.kts b/google-maps-in-flutter/step_3/android/build.gradle.kts new file mode 100644 index 0000000000..89176ef44e --- /dev/null +++ b/google-maps-in-flutter/step_3/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/google-maps-in-flutter/step_3/android/gradle.properties b/google-maps-in-flutter/step_3/android/gradle.properties index 2597170821..f018a61817 100644 --- a/google-maps-in-flutter/step_3/android/gradle.properties +++ b/google-maps-in-flutter/step_3/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/google-maps-in-flutter/step_3/android/gradle/wrapper/gradle-wrapper.properties b/google-maps-in-flutter/step_3/android/gradle/wrapper/gradle-wrapper.properties index 7bb2df6ba6..afa1e8eb0a 100644 --- a/google-maps-in-flutter/step_3/android/gradle/wrapper/gradle-wrapper.properties +++ b/google-maps-in-flutter/step_3/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip diff --git a/google-maps-in-flutter/step_3/android/settings.gradle b/google-maps-in-flutter/step_3/android/settings.gradle deleted file mode 100644 index b9e43bd376..0000000000 --- a/google-maps-in-flutter/step_3/android/settings.gradle +++ /dev/null @@ -1,25 +0,0 @@ -pluginManagement { - def flutterSdkPath = { - def properties = new Properties() - file("local.properties").withInputStream { properties.load(it) } - def flutterSdkPath = properties.getProperty("flutter.sdk") - assert flutterSdkPath != null, "flutter.sdk not set in local.properties" - return flutterSdkPath - }() - - includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") - - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} - -plugins { - id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.1.0" apply false - id "org.jetbrains.kotlin.android" version "1.8.22" apply false -} - -include ":app" diff --git a/google-maps-in-flutter/step_3/android/settings.gradle.kts b/google-maps-in-flutter/step_3/android/settings.gradle.kts new file mode 100644 index 0000000000..a439442c20 --- /dev/null +++ b/google-maps-in-flutter/step_3/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.0" apply false + id("org.jetbrains.kotlin.android") version "1.8.22" apply false +} + +include(":app") diff --git a/google-maps-in-flutter/step_3/ios/Podfile b/google-maps-in-flutter/step_3/ios/Podfile index f0e7de1f75..0f7f6d3141 100644 --- a/google-maps-in-flutter/step_3/ios/Podfile +++ b/google-maps-in-flutter/step_3/ios/Podfile @@ -30,7 +30,6 @@ flutter_ios_podfile_setup target 'Runner' do use_frameworks! - use_modular_headers! flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) target 'RunnerTests' do diff --git a/google-maps-in-flutter/step_3/ios/Runner.xcodeproj/project.pbxproj b/google-maps-in-flutter/step_3/ios/Runner.xcodeproj/project.pbxproj index 1b0ceacd8f..73c19ac869 100644 --- a/google-maps-in-flutter/step_3/ios/Runner.xcodeproj/project.pbxproj +++ b/google-maps-in-flutter/step_3/ios/Runner.xcodeproj/project.pbxproj @@ -8,11 +8,11 @@ /* Begin PBXBuildFile section */ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; - 2BEEB64B58A4CC47C5BA3D5C /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D21CC7852FBCE765A8E29EB9 /* Pods_Runner.framework */; }; + 28CC3C1848779D6684ADF700 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BD1327A38E93D778A66AEC57 /* Pods_Runner.framework */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; + 3FF1927440CA2B7BD5DDA69F /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1B979C6B7D3B336657A73C80 /* Pods_RunnerTests.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; - 95C52519924F04652DEE717D /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9DEB695FFCE25C7FE2E8B21D /* Pods_RunnerTests.framework */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; @@ -42,19 +42,17 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 01BA76AC0F05E4D2F132F2FB /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 18175D11E7FC399A72E51A25 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 1B979C6B7D3B336657A73C80 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 311DF58401EE75B737CC80EC /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 36DEDEF52FEAD25679B7182C /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 402560276B7A48DAA9D1293B /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 4311878BD38D7CBC5CC089F9 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 922BE8DA384F5C2168247CEB /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -62,25 +60,27 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 9DEB695FFCE25C7FE2E8B21D /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - A57FAD46CB92C0B82A04AD97 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - D21CC7852FBCE765A8E29EB9 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + B61D5CB716E3D61DA0B15DE9 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + BD1327A38E93D778A66AEC57 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + BFB2408940720B38D8365BC6 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + D7C6D5A748B199088AD5BBAD /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + F33C64691B485273B7502C70 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 168928E2C49EF880A92771E3 /* Frameworks */ = { + 97C146EB1CF9000F007C117D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 95C52519924F04652DEE717D /* Pods_RunnerTests.framework in Frameworks */, + 28CC3C1848779D6684ADF700 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 97C146EB1CF9000F007C117D /* Frameworks */ = { + F882BA8B46A3EDC256F6066A /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 2BEEB64B58A4CC47C5BA3D5C /* Pods_Runner.framework in Frameworks */, + 3FF1927440CA2B7BD5DDA69F /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -95,15 +95,6 @@ path = RunnerTests; sourceTree = ""; }; - 3BC05D7D41AFDF8AF00CE37D /* Frameworks */ = { - isa = PBXGroup; - children = ( - D21CC7852FBCE765A8E29EB9 /* Pods_Runner.framework */, - 9DEB695FFCE25C7FE2E8B21D /* Pods_RunnerTests.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( @@ -122,8 +113,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - D259A5B5078AC22609F1BC1A /* Pods */, - 3BC05D7D41AFDF8AF00CE37D /* Frameworks */, + F798BE37FCEA54C5E923EB08 /* Pods */, + B8E8DF0C435C15C15879343D /* Frameworks */, ); sourceTree = ""; }; @@ -151,15 +142,24 @@ path = Runner; sourceTree = ""; }; - D259A5B5078AC22609F1BC1A /* Pods */ = { + B8E8DF0C435C15C15879343D /* Frameworks */ = { + isa = PBXGroup; + children = ( + BD1327A38E93D778A66AEC57 /* Pods_Runner.framework */, + 1B979C6B7D3B336657A73C80 /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; + F798BE37FCEA54C5E923EB08 /* Pods */ = { isa = PBXGroup; children = ( - A57FAD46CB92C0B82A04AD97 /* Pods-Runner.debug.xcconfig */, - 01BA76AC0F05E4D2F132F2FB /* Pods-Runner.release.xcconfig */, - 18175D11E7FC399A72E51A25 /* Pods-Runner.profile.xcconfig */, - 402560276B7A48DAA9D1293B /* Pods-RunnerTests.debug.xcconfig */, - 922BE8DA384F5C2168247CEB /* Pods-RunnerTests.release.xcconfig */, - 4311878BD38D7CBC5CC089F9 /* Pods-RunnerTests.profile.xcconfig */, + 36DEDEF52FEAD25679B7182C /* Pods-Runner.debug.xcconfig */, + BFB2408940720B38D8365BC6 /* Pods-Runner.release.xcconfig */, + 311DF58401EE75B737CC80EC /* Pods-Runner.profile.xcconfig */, + B61D5CB716E3D61DA0B15DE9 /* Pods-RunnerTests.debug.xcconfig */, + F33C64691B485273B7502C70 /* Pods-RunnerTests.release.xcconfig */, + D7C6D5A748B199088AD5BBAD /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 23C0E03B6C7A00FD9BDABC8D /* [CP] Check Pods Manifest.lock */, + 1CF2B207D27227391A10AC2A /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 168928E2C49EF880A92771E3 /* Frameworks */, + F882BA8B46A3EDC256F6066A /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - F94B251853526A3F2BCE8A79 /* [CP] Check Pods Manifest.lock */, + 3D7B8BEFBDE7E0CBAF2415E2 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - E457A3C0D24B0E7B348F48F8 /* [CP] Copy Pods Resources */, + C4265DB3B1CC2DB727E47FD3 /* [CP] Copy Pods Resources */, ); buildRules = ( ); @@ -270,7 +270,7 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 23C0E03B6C7A00FD9BDABC8D /* [CP] Check Pods Manifest.lock */ = { + 1CF2B207D27227391A10AC2A /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -308,58 +308,58 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { + 3D7B8BEFBDE7E0CBAF2415E2 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "Run Script"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - E457A3C0D24B0E7B348F48F8 /* [CP] Copy Pods Resources */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-input-files.xcfilelist", + inputPaths = ( ); - name = "[CP] Copy Pods Resources"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-output-files.xcfilelist", + name = "Run Script"; + outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - F94B251853526A3F2BCE8A79 /* [CP] Check Pods Manifest.lock */ = { + C4265DB3B1CC2DB727E47FD3 /* [CP] Copy Pods Resources */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; + name = "[CP] Copy Pods Resources"; outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n"; showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 402560276B7A48DAA9D1293B /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = B61D5CB716E3D61DA0B15DE9 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 922BE8DA384F5C2168247CEB /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = F33C64691B485273B7502C70 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 4311878BD38D7CBC5CC089F9 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = D7C6D5A748B199088AD5BBAD /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/google-maps-in-flutter/step_3/pubspec.yaml b/google-maps-in-flutter/step_3/pubspec.yaml index 55a905dacb..ee7adbd841 100644 --- a/google-maps-in-flutter/step_3/pubspec.yaml +++ b/google-maps-in-flutter/step_3/pubspec.yaml @@ -34,7 +34,7 @@ dependencies: # The following adds the Cupertino Icons font to your application. # Use with the CupertinoIcons class for iOS style icons. cupertino_icons: ^1.0.8 - google_maps_flutter: ^2.9.0 + google_maps_flutter: ^2.10.0 dev_dependencies: flutter_test: diff --git a/google-maps-in-flutter/step_5/android/app/build.gradle b/google-maps-in-flutter/step_4/android/app/build.gradle.kts similarity index 83% rename from google-maps-in-flutter/step_5/android/app/build.gradle rename to google-maps-in-flutter/step_4/android/app/build.gradle.kts index ff699ddc54..0cc8363782 100644 --- a/google-maps-in-flutter/step_5/android/app/build.gradle +++ b/google-maps-in-flutter/step_4/android/app/build.gradle.kts @@ -1,8 +1,8 @@ plugins { - id "com.android.application" - id "kotlin-android" + id("com.android.application") + id("kotlin-android") // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. - id "dev.flutter.flutter-gradle-plugin" + id("dev.flutter.flutter-gradle-plugin") } android { @@ -16,7 +16,7 @@ android { } kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8 + jvmTarget = JavaVersion.VERSION_1_8.toString() } defaultConfig { @@ -34,7 +34,7 @@ android { release { // TODO: Add your own signing config for the release build. // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig = signingConfigs.debug + signingConfig = signingConfigs.getByName("debug") } } } diff --git a/google-maps-in-flutter/step_4/android/build.gradle b/google-maps-in-flutter/step_4/android/build.gradle deleted file mode 100644 index d2ffbffa4c..0000000000 --- a/google-maps-in-flutter/step_4/android/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = "../build" -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(":app") -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/google-maps-in-flutter/step_4/android/build.gradle.kts b/google-maps-in-flutter/step_4/android/build.gradle.kts new file mode 100644 index 0000000000..89176ef44e --- /dev/null +++ b/google-maps-in-flutter/step_4/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/google-maps-in-flutter/step_4/android/gradle.properties b/google-maps-in-flutter/step_4/android/gradle.properties index 2597170821..f018a61817 100644 --- a/google-maps-in-flutter/step_4/android/gradle.properties +++ b/google-maps-in-flutter/step_4/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/google-maps-in-flutter/step_4/android/gradle/wrapper/gradle-wrapper.properties b/google-maps-in-flutter/step_4/android/gradle/wrapper/gradle-wrapper.properties index 7bb2df6ba6..afa1e8eb0a 100644 --- a/google-maps-in-flutter/step_4/android/gradle/wrapper/gradle-wrapper.properties +++ b/google-maps-in-flutter/step_4/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip diff --git a/google-maps-in-flutter/step_4/android/settings.gradle b/google-maps-in-flutter/step_4/android/settings.gradle deleted file mode 100644 index b9e43bd376..0000000000 --- a/google-maps-in-flutter/step_4/android/settings.gradle +++ /dev/null @@ -1,25 +0,0 @@ -pluginManagement { - def flutterSdkPath = { - def properties = new Properties() - file("local.properties").withInputStream { properties.load(it) } - def flutterSdkPath = properties.getProperty("flutter.sdk") - assert flutterSdkPath != null, "flutter.sdk not set in local.properties" - return flutterSdkPath - }() - - includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") - - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} - -plugins { - id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.1.0" apply false - id "org.jetbrains.kotlin.android" version "1.8.22" apply false -} - -include ":app" diff --git a/google-maps-in-flutter/step_4/android/settings.gradle.kts b/google-maps-in-flutter/step_4/android/settings.gradle.kts new file mode 100644 index 0000000000..a439442c20 --- /dev/null +++ b/google-maps-in-flutter/step_4/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.0" apply false + id("org.jetbrains.kotlin.android") version "1.8.22" apply false +} + +include(":app") diff --git a/google-maps-in-flutter/step_4/ios/Podfile b/google-maps-in-flutter/step_4/ios/Podfile index f0e7de1f75..0f7f6d3141 100644 --- a/google-maps-in-flutter/step_4/ios/Podfile +++ b/google-maps-in-flutter/step_4/ios/Podfile @@ -30,7 +30,6 @@ flutter_ios_podfile_setup target 'Runner' do use_frameworks! - use_modular_headers! flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) target 'RunnerTests' do diff --git a/google-maps-in-flutter/step_4/ios/Runner.xcodeproj/project.pbxproj b/google-maps-in-flutter/step_4/ios/Runner.xcodeproj/project.pbxproj index 1b0ceacd8f..73c19ac869 100644 --- a/google-maps-in-flutter/step_4/ios/Runner.xcodeproj/project.pbxproj +++ b/google-maps-in-flutter/step_4/ios/Runner.xcodeproj/project.pbxproj @@ -8,11 +8,11 @@ /* Begin PBXBuildFile section */ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; - 2BEEB64B58A4CC47C5BA3D5C /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D21CC7852FBCE765A8E29EB9 /* Pods_Runner.framework */; }; + 28CC3C1848779D6684ADF700 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BD1327A38E93D778A66AEC57 /* Pods_Runner.framework */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; + 3FF1927440CA2B7BD5DDA69F /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1B979C6B7D3B336657A73C80 /* Pods_RunnerTests.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; - 95C52519924F04652DEE717D /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9DEB695FFCE25C7FE2E8B21D /* Pods_RunnerTests.framework */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; @@ -42,19 +42,17 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 01BA76AC0F05E4D2F132F2FB /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 18175D11E7FC399A72E51A25 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 1B979C6B7D3B336657A73C80 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 311DF58401EE75B737CC80EC /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 36DEDEF52FEAD25679B7182C /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 402560276B7A48DAA9D1293B /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 4311878BD38D7CBC5CC089F9 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 922BE8DA384F5C2168247CEB /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -62,25 +60,27 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 9DEB695FFCE25C7FE2E8B21D /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - A57FAD46CB92C0B82A04AD97 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - D21CC7852FBCE765A8E29EB9 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + B61D5CB716E3D61DA0B15DE9 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + BD1327A38E93D778A66AEC57 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + BFB2408940720B38D8365BC6 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + D7C6D5A748B199088AD5BBAD /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + F33C64691B485273B7502C70 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 168928E2C49EF880A92771E3 /* Frameworks */ = { + 97C146EB1CF9000F007C117D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 95C52519924F04652DEE717D /* Pods_RunnerTests.framework in Frameworks */, + 28CC3C1848779D6684ADF700 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 97C146EB1CF9000F007C117D /* Frameworks */ = { + F882BA8B46A3EDC256F6066A /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 2BEEB64B58A4CC47C5BA3D5C /* Pods_Runner.framework in Frameworks */, + 3FF1927440CA2B7BD5DDA69F /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -95,15 +95,6 @@ path = RunnerTests; sourceTree = ""; }; - 3BC05D7D41AFDF8AF00CE37D /* Frameworks */ = { - isa = PBXGroup; - children = ( - D21CC7852FBCE765A8E29EB9 /* Pods_Runner.framework */, - 9DEB695FFCE25C7FE2E8B21D /* Pods_RunnerTests.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( @@ -122,8 +113,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - D259A5B5078AC22609F1BC1A /* Pods */, - 3BC05D7D41AFDF8AF00CE37D /* Frameworks */, + F798BE37FCEA54C5E923EB08 /* Pods */, + B8E8DF0C435C15C15879343D /* Frameworks */, ); sourceTree = ""; }; @@ -151,15 +142,24 @@ path = Runner; sourceTree = ""; }; - D259A5B5078AC22609F1BC1A /* Pods */ = { + B8E8DF0C435C15C15879343D /* Frameworks */ = { + isa = PBXGroup; + children = ( + BD1327A38E93D778A66AEC57 /* Pods_Runner.framework */, + 1B979C6B7D3B336657A73C80 /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; + F798BE37FCEA54C5E923EB08 /* Pods */ = { isa = PBXGroup; children = ( - A57FAD46CB92C0B82A04AD97 /* Pods-Runner.debug.xcconfig */, - 01BA76AC0F05E4D2F132F2FB /* Pods-Runner.release.xcconfig */, - 18175D11E7FC399A72E51A25 /* Pods-Runner.profile.xcconfig */, - 402560276B7A48DAA9D1293B /* Pods-RunnerTests.debug.xcconfig */, - 922BE8DA384F5C2168247CEB /* Pods-RunnerTests.release.xcconfig */, - 4311878BD38D7CBC5CC089F9 /* Pods-RunnerTests.profile.xcconfig */, + 36DEDEF52FEAD25679B7182C /* Pods-Runner.debug.xcconfig */, + BFB2408940720B38D8365BC6 /* Pods-Runner.release.xcconfig */, + 311DF58401EE75B737CC80EC /* Pods-Runner.profile.xcconfig */, + B61D5CB716E3D61DA0B15DE9 /* Pods-RunnerTests.debug.xcconfig */, + F33C64691B485273B7502C70 /* Pods-RunnerTests.release.xcconfig */, + D7C6D5A748B199088AD5BBAD /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 23C0E03B6C7A00FD9BDABC8D /* [CP] Check Pods Manifest.lock */, + 1CF2B207D27227391A10AC2A /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 168928E2C49EF880A92771E3 /* Frameworks */, + F882BA8B46A3EDC256F6066A /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - F94B251853526A3F2BCE8A79 /* [CP] Check Pods Manifest.lock */, + 3D7B8BEFBDE7E0CBAF2415E2 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - E457A3C0D24B0E7B348F48F8 /* [CP] Copy Pods Resources */, + C4265DB3B1CC2DB727E47FD3 /* [CP] Copy Pods Resources */, ); buildRules = ( ); @@ -270,7 +270,7 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 23C0E03B6C7A00FD9BDABC8D /* [CP] Check Pods Manifest.lock */ = { + 1CF2B207D27227391A10AC2A /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -308,58 +308,58 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { + 3D7B8BEFBDE7E0CBAF2415E2 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "Run Script"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - E457A3C0D24B0E7B348F48F8 /* [CP] Copy Pods Resources */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-input-files.xcfilelist", + inputPaths = ( ); - name = "[CP] Copy Pods Resources"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-output-files.xcfilelist", + name = "Run Script"; + outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - F94B251853526A3F2BCE8A79 /* [CP] Check Pods Manifest.lock */ = { + C4265DB3B1CC2DB727E47FD3 /* [CP] Copy Pods Resources */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; + name = "[CP] Copy Pods Resources"; outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n"; showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 402560276B7A48DAA9D1293B /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = B61D5CB716E3D61DA0B15DE9 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 922BE8DA384F5C2168247CEB /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = F33C64691B485273B7502C70 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 4311878BD38D7CBC5CC089F9 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = D7C6D5A748B199088AD5BBAD /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/google-maps-in-flutter/step_4/pubspec.yaml b/google-maps-in-flutter/step_4/pubspec.yaml index 55a905dacb..ee7adbd841 100644 --- a/google-maps-in-flutter/step_4/pubspec.yaml +++ b/google-maps-in-flutter/step_4/pubspec.yaml @@ -34,7 +34,7 @@ dependencies: # The following adds the Cupertino Icons font to your application. # Use with the CupertinoIcons class for iOS style icons. cupertino_icons: ^1.0.8 - google_maps_flutter: ^2.9.0 + google_maps_flutter: ^2.10.0 dev_dependencies: flutter_test: diff --git a/google-maps-in-flutter/step_4/android/app/build.gradle b/google-maps-in-flutter/step_5/android/app/build.gradle.kts similarity index 83% rename from google-maps-in-flutter/step_4/android/app/build.gradle rename to google-maps-in-flutter/step_5/android/app/build.gradle.kts index ff699ddc54..0cc8363782 100644 --- a/google-maps-in-flutter/step_4/android/app/build.gradle +++ b/google-maps-in-flutter/step_5/android/app/build.gradle.kts @@ -1,8 +1,8 @@ plugins { - id "com.android.application" - id "kotlin-android" + id("com.android.application") + id("kotlin-android") // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. - id "dev.flutter.flutter-gradle-plugin" + id("dev.flutter.flutter-gradle-plugin") } android { @@ -16,7 +16,7 @@ android { } kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8 + jvmTarget = JavaVersion.VERSION_1_8.toString() } defaultConfig { @@ -34,7 +34,7 @@ android { release { // TODO: Add your own signing config for the release build. // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig = signingConfigs.debug + signingConfig = signingConfigs.getByName("debug") } } } diff --git a/google-maps-in-flutter/step_5/android/build.gradle b/google-maps-in-flutter/step_5/android/build.gradle deleted file mode 100644 index d2ffbffa4c..0000000000 --- a/google-maps-in-flutter/step_5/android/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = "../build" -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(":app") -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/google-maps-in-flutter/step_5/android/build.gradle.kts b/google-maps-in-flutter/step_5/android/build.gradle.kts new file mode 100644 index 0000000000..89176ef44e --- /dev/null +++ b/google-maps-in-flutter/step_5/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/google-maps-in-flutter/step_5/android/gradle.properties b/google-maps-in-flutter/step_5/android/gradle.properties index 2597170821..f018a61817 100644 --- a/google-maps-in-flutter/step_5/android/gradle.properties +++ b/google-maps-in-flutter/step_5/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/google-maps-in-flutter/step_5/android/gradle/wrapper/gradle-wrapper.properties b/google-maps-in-flutter/step_5/android/gradle/wrapper/gradle-wrapper.properties index 7bb2df6ba6..afa1e8eb0a 100644 --- a/google-maps-in-flutter/step_5/android/gradle/wrapper/gradle-wrapper.properties +++ b/google-maps-in-flutter/step_5/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip diff --git a/google-maps-in-flutter/step_5/android/settings.gradle b/google-maps-in-flutter/step_5/android/settings.gradle deleted file mode 100644 index b9e43bd376..0000000000 --- a/google-maps-in-flutter/step_5/android/settings.gradle +++ /dev/null @@ -1,25 +0,0 @@ -pluginManagement { - def flutterSdkPath = { - def properties = new Properties() - file("local.properties").withInputStream { properties.load(it) } - def flutterSdkPath = properties.getProperty("flutter.sdk") - assert flutterSdkPath != null, "flutter.sdk not set in local.properties" - return flutterSdkPath - }() - - includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") - - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} - -plugins { - id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.1.0" apply false - id "org.jetbrains.kotlin.android" version "1.8.22" apply false -} - -include ":app" diff --git a/google-maps-in-flutter/step_5/android/settings.gradle.kts b/google-maps-in-flutter/step_5/android/settings.gradle.kts new file mode 100644 index 0000000000..a439442c20 --- /dev/null +++ b/google-maps-in-flutter/step_5/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.0" apply false + id("org.jetbrains.kotlin.android") version "1.8.22" apply false +} + +include(":app") diff --git a/google-maps-in-flutter/step_5/ios/Podfile b/google-maps-in-flutter/step_5/ios/Podfile index f0e7de1f75..0f7f6d3141 100644 --- a/google-maps-in-flutter/step_5/ios/Podfile +++ b/google-maps-in-flutter/step_5/ios/Podfile @@ -30,7 +30,6 @@ flutter_ios_podfile_setup target 'Runner' do use_frameworks! - use_modular_headers! flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) target 'RunnerTests' do diff --git a/google-maps-in-flutter/step_5/ios/Runner.xcodeproj/project.pbxproj b/google-maps-in-flutter/step_5/ios/Runner.xcodeproj/project.pbxproj index 1b0ceacd8f..73c19ac869 100644 --- a/google-maps-in-flutter/step_5/ios/Runner.xcodeproj/project.pbxproj +++ b/google-maps-in-flutter/step_5/ios/Runner.xcodeproj/project.pbxproj @@ -8,11 +8,11 @@ /* Begin PBXBuildFile section */ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; - 2BEEB64B58A4CC47C5BA3D5C /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D21CC7852FBCE765A8E29EB9 /* Pods_Runner.framework */; }; + 28CC3C1848779D6684ADF700 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BD1327A38E93D778A66AEC57 /* Pods_Runner.framework */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; + 3FF1927440CA2B7BD5DDA69F /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1B979C6B7D3B336657A73C80 /* Pods_RunnerTests.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; - 95C52519924F04652DEE717D /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9DEB695FFCE25C7FE2E8B21D /* Pods_RunnerTests.framework */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; @@ -42,19 +42,17 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 01BA76AC0F05E4D2F132F2FB /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 18175D11E7FC399A72E51A25 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 1B979C6B7D3B336657A73C80 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 311DF58401EE75B737CC80EC /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 36DEDEF52FEAD25679B7182C /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 402560276B7A48DAA9D1293B /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 4311878BD38D7CBC5CC089F9 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 922BE8DA384F5C2168247CEB /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -62,25 +60,27 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 9DEB695FFCE25C7FE2E8B21D /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - A57FAD46CB92C0B82A04AD97 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - D21CC7852FBCE765A8E29EB9 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + B61D5CB716E3D61DA0B15DE9 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + BD1327A38E93D778A66AEC57 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + BFB2408940720B38D8365BC6 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + D7C6D5A748B199088AD5BBAD /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + F33C64691B485273B7502C70 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 168928E2C49EF880A92771E3 /* Frameworks */ = { + 97C146EB1CF9000F007C117D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 95C52519924F04652DEE717D /* Pods_RunnerTests.framework in Frameworks */, + 28CC3C1848779D6684ADF700 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 97C146EB1CF9000F007C117D /* Frameworks */ = { + F882BA8B46A3EDC256F6066A /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 2BEEB64B58A4CC47C5BA3D5C /* Pods_Runner.framework in Frameworks */, + 3FF1927440CA2B7BD5DDA69F /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -95,15 +95,6 @@ path = RunnerTests; sourceTree = ""; }; - 3BC05D7D41AFDF8AF00CE37D /* Frameworks */ = { - isa = PBXGroup; - children = ( - D21CC7852FBCE765A8E29EB9 /* Pods_Runner.framework */, - 9DEB695FFCE25C7FE2E8B21D /* Pods_RunnerTests.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( @@ -122,8 +113,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - D259A5B5078AC22609F1BC1A /* Pods */, - 3BC05D7D41AFDF8AF00CE37D /* Frameworks */, + F798BE37FCEA54C5E923EB08 /* Pods */, + B8E8DF0C435C15C15879343D /* Frameworks */, ); sourceTree = ""; }; @@ -151,15 +142,24 @@ path = Runner; sourceTree = ""; }; - D259A5B5078AC22609F1BC1A /* Pods */ = { + B8E8DF0C435C15C15879343D /* Frameworks */ = { + isa = PBXGroup; + children = ( + BD1327A38E93D778A66AEC57 /* Pods_Runner.framework */, + 1B979C6B7D3B336657A73C80 /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; + F798BE37FCEA54C5E923EB08 /* Pods */ = { isa = PBXGroup; children = ( - A57FAD46CB92C0B82A04AD97 /* Pods-Runner.debug.xcconfig */, - 01BA76AC0F05E4D2F132F2FB /* Pods-Runner.release.xcconfig */, - 18175D11E7FC399A72E51A25 /* Pods-Runner.profile.xcconfig */, - 402560276B7A48DAA9D1293B /* Pods-RunnerTests.debug.xcconfig */, - 922BE8DA384F5C2168247CEB /* Pods-RunnerTests.release.xcconfig */, - 4311878BD38D7CBC5CC089F9 /* Pods-RunnerTests.profile.xcconfig */, + 36DEDEF52FEAD25679B7182C /* Pods-Runner.debug.xcconfig */, + BFB2408940720B38D8365BC6 /* Pods-Runner.release.xcconfig */, + 311DF58401EE75B737CC80EC /* Pods-Runner.profile.xcconfig */, + B61D5CB716E3D61DA0B15DE9 /* Pods-RunnerTests.debug.xcconfig */, + F33C64691B485273B7502C70 /* Pods-RunnerTests.release.xcconfig */, + D7C6D5A748B199088AD5BBAD /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 23C0E03B6C7A00FD9BDABC8D /* [CP] Check Pods Manifest.lock */, + 1CF2B207D27227391A10AC2A /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 168928E2C49EF880A92771E3 /* Frameworks */, + F882BA8B46A3EDC256F6066A /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - F94B251853526A3F2BCE8A79 /* [CP] Check Pods Manifest.lock */, + 3D7B8BEFBDE7E0CBAF2415E2 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - E457A3C0D24B0E7B348F48F8 /* [CP] Copy Pods Resources */, + C4265DB3B1CC2DB727E47FD3 /* [CP] Copy Pods Resources */, ); buildRules = ( ); @@ -270,7 +270,7 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 23C0E03B6C7A00FD9BDABC8D /* [CP] Check Pods Manifest.lock */ = { + 1CF2B207D27227391A10AC2A /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -308,58 +308,58 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { + 3D7B8BEFBDE7E0CBAF2415E2 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "Run Script"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - E457A3C0D24B0E7B348F48F8 /* [CP] Copy Pods Resources */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-input-files.xcfilelist", + inputPaths = ( ); - name = "[CP] Copy Pods Resources"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-output-files.xcfilelist", + name = "Run Script"; + outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - F94B251853526A3F2BCE8A79 /* [CP] Check Pods Manifest.lock */ = { + C4265DB3B1CC2DB727E47FD3 /* [CP] Copy Pods Resources */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; + name = "[CP] Copy Pods Resources"; outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n"; showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 402560276B7A48DAA9D1293B /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = B61D5CB716E3D61DA0B15DE9 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 922BE8DA384F5C2168247CEB /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = F33C64691B485273B7502C70 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 4311878BD38D7CBC5CC089F9 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = D7C6D5A748B199088AD5BBAD /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/google-maps-in-flutter/step_5/pubspec.yaml b/google-maps-in-flutter/step_5/pubspec.yaml index 803b8d08fc..197da37010 100644 --- a/google-maps-in-flutter/step_5/pubspec.yaml +++ b/google-maps-in-flutter/step_5/pubspec.yaml @@ -34,7 +34,7 @@ dependencies: # The following adds the Cupertino Icons font to your application. # Use with the CupertinoIcons class for iOS style icons. cupertino_icons: ^1.0.8 - google_maps_flutter: ^2.9.0 + google_maps_flutter: ^2.10.0 http: ^1.2.2 json_annotation: ^4.9.0 json_serializable: ^6.8.0 From aad5e8dfa0e603c4c9a54031b0f45aa0c6dcdc1b Mon Sep 17 00:00:00 2001 From: Brett Morgan Date: Mon, 18 Nov 2024 14:19:52 +1100 Subject: [PATCH 083/108] Update `namer` --- namer/codelab_rebuild.yaml | 260 +++++++++--------- .../app/{build.gradle => build.gradle.kts} | 10 +- namer/step_03/android/build.gradle | 18 -- namer/step_03/android/build.gradle.kts | 21 ++ namer/step_03/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- namer/step_03/android/settings.gradle | 25 -- namer/step_03/android/settings.gradle.kts | 25 ++ .../android/app/build.gradle.kts} | 10 +- namer/step_04_a_widget/android/build.gradle | 18 -- .../step_04_a_widget/android/build.gradle.kts | 21 ++ .../android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../step_04_a_widget/android/settings.gradle | 25 -- .../android/settings.gradle.kts | 25 ++ .../android/app/build.gradle.kts} | 10 +- namer/step_04_b_behavior/android/build.gradle | 18 -- .../android/build.gradle.kts | 21 ++ .../android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../android/settings.gradle | 25 -- .../android/settings.gradle.kts | 25 ++ .../android/app/build.gradle.kts} | 10 +- namer/step_05_a_pair/android/build.gradle | 18 -- namer/step_05_a_pair/android/build.gradle.kts | 21 ++ .../step_05_a_pair/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- namer/step_05_a_pair/android/settings.gradle | 25 -- .../android/settings.gradle.kts | 25 ++ .../android/app/build.gradle | 44 --- .../android/app/build.gradle.kts | 44 +++ namer/step_05_b_extract/android/build.gradle | 18 -- .../android/build.gradle.kts | 21 ++ .../android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../step_05_b_extract/android/settings.gradle | 25 -- .../android/settings.gradle.kts | 25 ++ .../android/app/build.gradle | 44 --- .../android/app/build.gradle.kts | 44 +++ .../android/build.gradle | 18 -- .../android/build.gradle.kts | 21 ++ .../android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../android/settings.gradle | 25 -- .../android/settings.gradle.kts | 25 ++ .../step_05_d_theme/android/app/build.gradle | 44 --- .../android/app/build.gradle.kts | 44 +++ namer/step_05_d_theme/android/build.gradle | 18 -- .../step_05_d_theme/android/build.gradle.kts | 21 ++ .../step_05_d_theme/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- namer/step_05_d_theme/android/settings.gradle | 25 -- .../android/settings.gradle.kts | 25 ++ .../android/app/build.gradle | 44 --- .../android/app/build.gradle.kts | 44 +++ .../step_05_e_text_style/android/build.gradle | 18 -- .../android/build.gradle.kts | 21 ++ .../android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../android/settings.gradle | 25 -- .../android/settings.gradle.kts | 25 ++ .../android/app/build.gradle | 44 --- .../android/app/build.gradle.kts | 44 +++ .../android/build.gradle | 18 -- .../android/build.gradle.kts | 21 ++ .../android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../android/settings.gradle | 25 -- .../android/settings.gradle.kts | 25 ++ .../android/app/build.gradle | 44 --- .../android/app/build.gradle.kts | 44 +++ .../android/build.gradle | 18 -- .../android/build.gradle.kts | 21 ++ .../android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../android/settings.gradle | 25 -- .../android/settings.gradle.kts | 25 ++ .../android/app/build.gradle | 44 --- .../android/app/build.gradle.kts | 44 +++ .../android/build.gradle | 18 -- .../android/build.gradle.kts | 21 ++ .../android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../android/settings.gradle | 25 -- .../android/settings.gradle.kts | 25 ++ .../android/app/build.gradle | 44 --- .../android/app/build.gradle.kts | 44 +++ .../android/build.gradle | 18 -- .../android/build.gradle.kts | 21 ++ .../android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../android/settings.gradle | 25 -- .../android/settings.gradle.kts | 25 ++ .../android/app/build.gradle | 44 --- .../android/app/build.gradle.kts | 44 +++ .../android/build.gradle | 18 -- .../android/build.gradle.kts | 21 ++ .../android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../android/settings.gradle | 25 -- .../android/settings.gradle.kts | 25 ++ .../android/app/build.gradle | 44 --- .../android/app/build.gradle.kts | 44 +++ namer/step_06_b_add_row/android/build.gradle | 18 -- .../android/build.gradle.kts | 21 ++ .../android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../step_06_b_add_row/android/settings.gradle | 25 -- .../android/settings.gradle.kts | 25 ++ .../android/app/build.gradle | 44 --- .../android/app/build.gradle.kts | 44 +++ .../android/build.gradle | 18 -- .../android/build.gradle.kts | 21 ++ .../android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../android/settings.gradle | 25 -- .../android/settings.gradle.kts | 25 ++ .../android/app/build.gradle | 44 --- .../android/app/build.gradle.kts | 44 +++ .../android/build.gradle | 18 -- .../android/build.gradle.kts | 21 ++ .../android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../android/settings.gradle | 25 -- .../android/settings.gradle.kts | 25 ++ .../android/app/build.gradle | 44 --- .../android/app/build.gradle.kts | 44 +++ .../android/build.gradle | 18 -- .../android/build.gradle.kts | 21 ++ .../android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../android/settings.gradle | 25 -- .../android/settings.gradle.kts | 25 ++ .../android/app/build.gradle | 44 --- .../android/app/build.gradle.kts | 44 +++ .../android/build.gradle | 18 -- .../android/build.gradle.kts | 21 ++ .../android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../android/settings.gradle | 25 -- .../android/settings.gradle.kts | 25 ++ .../android/app/build.gradle | 44 --- .../android/app/build.gradle.kts | 44 +++ .../android/build.gradle | 18 -- .../android/build.gradle.kts | 21 ++ .../android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../android/settings.gradle | 25 -- .../android/settings.gradle.kts | 25 ++ .../android/app/build.gradle | 44 --- .../android/app/build.gradle.kts | 44 +++ .../android/build.gradle | 18 -- .../android/build.gradle.kts | 21 ++ .../android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../android/settings.gradle | 25 -- .../android/settings.gradle.kts | 25 ++ namer/step_08/android/app/build.gradle | 44 --- namer/step_08/android/app/build.gradle.kts | 44 +++ namer/step_08/android/build.gradle | 18 -- namer/step_08/android/build.gradle.kts | 21 ++ namer/step_08/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- namer/step_08/android/settings.gradle | 25 -- namer/step_08/android/settings.gradle.kts | 25 ++ 165 files changed, 1906 insertions(+), 1843 deletions(-) rename namer/step_03/android/app/{build.gradle => build.gradle.kts} (84%) delete mode 100644 namer/step_03/android/build.gradle create mode 100644 namer/step_03/android/build.gradle.kts delete mode 100644 namer/step_03/android/settings.gradle create mode 100644 namer/step_03/android/settings.gradle.kts rename namer/{step_04_b_behavior/android/app/build.gradle => step_04_a_widget/android/app/build.gradle.kts} (84%) delete mode 100644 namer/step_04_a_widget/android/build.gradle create mode 100644 namer/step_04_a_widget/android/build.gradle.kts delete mode 100644 namer/step_04_a_widget/android/settings.gradle create mode 100644 namer/step_04_a_widget/android/settings.gradle.kts rename namer/{step_05_a_pair/android/app/build.gradle => step_04_b_behavior/android/app/build.gradle.kts} (84%) delete mode 100644 namer/step_04_b_behavior/android/build.gradle create mode 100644 namer/step_04_b_behavior/android/build.gradle.kts delete mode 100644 namer/step_04_b_behavior/android/settings.gradle create mode 100644 namer/step_04_b_behavior/android/settings.gradle.kts rename namer/{step_04_a_widget/android/app/build.gradle => step_05_a_pair/android/app/build.gradle.kts} (84%) delete mode 100644 namer/step_05_a_pair/android/build.gradle create mode 100644 namer/step_05_a_pair/android/build.gradle.kts delete mode 100644 namer/step_05_a_pair/android/settings.gradle create mode 100644 namer/step_05_a_pair/android/settings.gradle.kts delete mode 100644 namer/step_05_b_extract/android/app/build.gradle create mode 100644 namer/step_05_b_extract/android/app/build.gradle.kts delete mode 100644 namer/step_05_b_extract/android/build.gradle create mode 100644 namer/step_05_b_extract/android/build.gradle.kts delete mode 100644 namer/step_05_b_extract/android/settings.gradle create mode 100644 namer/step_05_b_extract/android/settings.gradle.kts delete mode 100644 namer/step_05_c_card_padding/android/app/build.gradle create mode 100644 namer/step_05_c_card_padding/android/app/build.gradle.kts delete mode 100644 namer/step_05_c_card_padding/android/build.gradle create mode 100644 namer/step_05_c_card_padding/android/build.gradle.kts delete mode 100644 namer/step_05_c_card_padding/android/settings.gradle create mode 100644 namer/step_05_c_card_padding/android/settings.gradle.kts delete mode 100644 namer/step_05_d_theme/android/app/build.gradle create mode 100644 namer/step_05_d_theme/android/app/build.gradle.kts delete mode 100644 namer/step_05_d_theme/android/build.gradle create mode 100644 namer/step_05_d_theme/android/build.gradle.kts delete mode 100644 namer/step_05_d_theme/android/settings.gradle create mode 100644 namer/step_05_d_theme/android/settings.gradle.kts delete mode 100644 namer/step_05_e_text_style/android/app/build.gradle create mode 100644 namer/step_05_e_text_style/android/app/build.gradle.kts delete mode 100644 namer/step_05_e_text_style/android/build.gradle create mode 100644 namer/step_05_e_text_style/android/build.gradle.kts delete mode 100644 namer/step_05_e_text_style/android/settings.gradle create mode 100644 namer/step_05_e_text_style/android/settings.gradle.kts delete mode 100644 namer/step_05_f_accessibility/android/app/build.gradle create mode 100644 namer/step_05_f_accessibility/android/app/build.gradle.kts delete mode 100644 namer/step_05_f_accessibility/android/build.gradle create mode 100644 namer/step_05_f_accessibility/android/build.gradle.kts delete mode 100644 namer/step_05_f_accessibility/android/settings.gradle create mode 100644 namer/step_05_f_accessibility/android/settings.gradle.kts delete mode 100644 namer/step_05_g_center_vertical/android/app/build.gradle create mode 100644 namer/step_05_g_center_vertical/android/app/build.gradle.kts delete mode 100644 namer/step_05_g_center_vertical/android/build.gradle create mode 100644 namer/step_05_g_center_vertical/android/build.gradle.kts delete mode 100644 namer/step_05_g_center_vertical/android/settings.gradle create mode 100644 namer/step_05_g_center_vertical/android/settings.gradle.kts delete mode 100644 namer/step_05_h_center_horizontal/android/app/build.gradle create mode 100644 namer/step_05_h_center_horizontal/android/app/build.gradle.kts delete mode 100644 namer/step_05_h_center_horizontal/android/build.gradle create mode 100644 namer/step_05_h_center_horizontal/android/build.gradle.kts delete mode 100644 namer/step_05_h_center_horizontal/android/settings.gradle create mode 100644 namer/step_05_h_center_horizontal/android/settings.gradle.kts delete mode 100644 namer/step_05_i_optional_changes/android/app/build.gradle create mode 100644 namer/step_05_i_optional_changes/android/app/build.gradle.kts delete mode 100644 namer/step_05_i_optional_changes/android/build.gradle create mode 100644 namer/step_05_i_optional_changes/android/build.gradle.kts delete mode 100644 namer/step_05_i_optional_changes/android/settings.gradle create mode 100644 namer/step_05_i_optional_changes/android/settings.gradle.kts delete mode 100644 namer/step_06_a_business_logic/android/app/build.gradle create mode 100644 namer/step_06_a_business_logic/android/app/build.gradle.kts delete mode 100644 namer/step_06_a_business_logic/android/build.gradle create mode 100644 namer/step_06_a_business_logic/android/build.gradle.kts delete mode 100644 namer/step_06_a_business_logic/android/settings.gradle create mode 100644 namer/step_06_a_business_logic/android/settings.gradle.kts delete mode 100644 namer/step_06_b_add_row/android/app/build.gradle create mode 100644 namer/step_06_b_add_row/android/app/build.gradle.kts delete mode 100644 namer/step_06_b_add_row/android/build.gradle create mode 100644 namer/step_06_b_add_row/android/build.gradle.kts delete mode 100644 namer/step_06_b_add_row/android/settings.gradle create mode 100644 namer/step_06_b_add_row/android/settings.gradle.kts delete mode 100644 namer/step_06_c_add_like_button/android/app/build.gradle create mode 100644 namer/step_06_c_add_like_button/android/app/build.gradle.kts delete mode 100644 namer/step_06_c_add_like_button/android/build.gradle create mode 100644 namer/step_06_c_add_like_button/android/build.gradle.kts delete mode 100644 namer/step_06_c_add_like_button/android/settings.gradle create mode 100644 namer/step_06_c_add_like_button/android/settings.gradle.kts delete mode 100644 namer/step_07_a_split_my_home_page/android/app/build.gradle create mode 100644 namer/step_07_a_split_my_home_page/android/app/build.gradle.kts delete mode 100644 namer/step_07_a_split_my_home_page/android/build.gradle create mode 100644 namer/step_07_a_split_my_home_page/android/build.gradle.kts delete mode 100644 namer/step_07_a_split_my_home_page/android/settings.gradle create mode 100644 namer/step_07_a_split_my_home_page/android/settings.gradle.kts delete mode 100644 namer/step_07_b_convert_to_stateful/android/app/build.gradle create mode 100644 namer/step_07_b_convert_to_stateful/android/app/build.gradle.kts delete mode 100644 namer/step_07_b_convert_to_stateful/android/build.gradle create mode 100644 namer/step_07_b_convert_to_stateful/android/build.gradle.kts delete mode 100644 namer/step_07_b_convert_to_stateful/android/settings.gradle create mode 100644 namer/step_07_b_convert_to_stateful/android/settings.gradle.kts delete mode 100644 namer/step_07_c_add_selectedindex/android/app/build.gradle create mode 100644 namer/step_07_c_add_selectedindex/android/app/build.gradle.kts delete mode 100644 namer/step_07_c_add_selectedindex/android/build.gradle create mode 100644 namer/step_07_c_add_selectedindex/android/build.gradle.kts delete mode 100644 namer/step_07_c_add_selectedindex/android/settings.gradle create mode 100644 namer/step_07_c_add_selectedindex/android/settings.gradle.kts delete mode 100644 namer/step_07_d_use_selectedindex/android/app/build.gradle create mode 100644 namer/step_07_d_use_selectedindex/android/app/build.gradle.kts delete mode 100644 namer/step_07_d_use_selectedindex/android/build.gradle create mode 100644 namer/step_07_d_use_selectedindex/android/build.gradle.kts delete mode 100644 namer/step_07_d_use_selectedindex/android/settings.gradle create mode 100644 namer/step_07_d_use_selectedindex/android/settings.gradle.kts delete mode 100644 namer/step_07_e_add_layout_builder/android/app/build.gradle create mode 100644 namer/step_07_e_add_layout_builder/android/app/build.gradle.kts delete mode 100644 namer/step_07_e_add_layout_builder/android/build.gradle create mode 100644 namer/step_07_e_add_layout_builder/android/build.gradle.kts delete mode 100644 namer/step_07_e_add_layout_builder/android/settings.gradle create mode 100644 namer/step_07_e_add_layout_builder/android/settings.gradle.kts delete mode 100644 namer/step_08/android/app/build.gradle create mode 100644 namer/step_08/android/app/build.gradle.kts delete mode 100644 namer/step_08/android/build.gradle create mode 100644 namer/step_08/android/build.gradle.kts delete mode 100644 namer/step_08/android/settings.gradle create mode 100644 namer/step_08/android/settings.gradle.kts diff --git a/namer/codelab_rebuild.yaml b/namer/codelab_rebuild.yaml index f1913b439b..b6bf1ba29c 100644 --- a/namer/codelab_rebuild.yaml +++ b/namer/codelab_rebuild.yaml @@ -54,7 +54,6 @@ steps: prefer_final_fields: false unnecessary_breaks: true use_key_in_widget_constructors: false - - name: Replace lib/main.dart path: namer_app/lib/main.dart replace-contents: | @@ -96,10 +95,7 @@ steps: return Scaffold( body: Column( - children: [ - Text('A random idea:'), - Text(appState.current.asLowerCase), - ], + children: [Text('A random idea:'), Text(appState.current.asLowerCase)], ), ); } @@ -151,22 +147,24 @@ steps: patch-u: | --- b/namer/step_04_a_widget/lib/main.dart +++ a/namer/step_04_a_widget/lib/main.dart - @@ -37,8 +37,14 @@ class MyHomePage extends StatelessWidget { + @@ -36,7 +36,16 @@ class MyHomePage extends StatelessWidget { + return Scaffold( body: Column( - children: [ - - Text('A random idea:'), + - children: [Text('A random idea:'), Text(appState.current.asLowerCase)], + + children: [ + Text('A random AWESOME idea:'), - Text(appState.current.asLowerCase), + + Text(appState.current.asLowerCase), + ElevatedButton( + onPressed: () { + print('button pressed!'); + }, + child: Text('Next'), + ), - ], + + ], ), ); + } - name: Patch test/widget_test.dart path: namer_app/test/widget_test.dart patch-u: | @@ -217,38 +215,36 @@ steps: - name: Add additional test path: namer_app/test/widget_test.dart patch-u: | - --- a/namer_app/test/widget_test.dart - +++ b/namer_app/test/widget_test.dart + --- b/namer/step_04_b_behavior/test/widget_test.dart + +++ a/namer/step_04_b_behavior/test/widget_test.dart @@ -1,3 +1,4 @@ +import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:namer_app/main.dart'; - @@ -6,5 +7,45 @@ - testWidgets('App starts', (WidgetTester tester) async { + @@ -7,4 +8,44 @@ void main() { await tester.pumpWidget(const MyApp()); expect(find.text('A random AWESOME idea:'), findsOneWidget); - + }); + }); + + testWidgets('Tapping button changes word pair', (WidgetTester tester) async { + await tester.pumpWidget(const MyApp()); + + String findWordPair() { - + final wordPairTextWidget = tester - + // Get all Text widgets... - + .widgetList(find.byType(Text)) - + // ... skip one ('A random AWESOME idea:') ... - + .skip(1) - + // ... and take the first after it. - + .first; + + final wordPairTextWidget = + + tester + + // Get all Text widgets... + + .widgetList(find.byType(Text)) + + // ... skip one ('A random AWESOME idea:') ... + + .skip(1) + + // ... and take the first after it. + + .first; + return wordPairTextWidget.data!; + } + + // Tap several times and keep a list of word pair values. + const tryCount = 5; - + final pairs = [ - + findWordPair(), - + ]; + + final pairs = [findWordPair()]; + for (var i = 1; i < tryCount; i++) { + await tester.tap(find.text('Next')); + await tester.pumpAndSettle(); @@ -262,13 +258,14 @@ steps: + // We only fail this test when there is zero variance - all the + // word pairs are the same, even though we clicked 'Next' several times. + hasLength(greaterThan(1)), - + reason: 'After clicking $tryCount times, ' + + reason: + + 'After clicking $tryCount times, ' + 'the app should have generated at least two different word pairs. ' + 'Instead, the app showed these: $pairs. ' + 'That almost certainly means that the word pair is not being ' + 'randomly generated at all. The button does not work.', + ); - }); + + }); } - name: Copy step_04_b_behavior copydir: @@ -320,16 +317,13 @@ steps: ElevatedButton( onPressed: () { appState.getNext(); - @@ -56,3 +56,17 @@ class MyHomePage extends StatelessWidget { + @@ -56,3 +56,14 @@ class MyHomePage extends StatelessWidget { ); } } + +class BigCard extends StatelessWidget { - + const BigCard({ - + super.key, - + required this.pair, - + }); + + const BigCard({super.key, required this.pair}); + + final WordPair pair; + @@ -341,23 +335,23 @@ steps: - name: Update test to use BigCard path: namer_app/test/widget_test.dart patch-u: | - --- a/namer_app/test/widget_test.dart - +++ b/namer_app/test/widget_test.dart - @@ -13,13 +13,10 @@ void main() { + --- b/namer/step_05_b_extract/test/widget_test.dart + +++ a/namer/step_05_b_extract/test/widget_test.dart + @@ -13,14 +13,9 @@ void main() { await tester.pumpWidget(const MyApp()); String findWordPair() { - - final wordPairTextWidget = tester - - // Get all Text widgets... - - .widgetList(find.byType(Text)) - - // ... skip one ('A random AWESOME idea:') ... - - .skip(1) - - // ... and take the first after it. - - .first; - + final wordPairTextWidget = tester.widget(find.descendant( - + of: find.byType(BigCard), - + matching: find.byType(Text), - + )); + - final wordPairTextWidget = + - tester + - // Get all Text widgets... + - .widgetList(find.byType(Text)) + - // ... skip one ('A random AWESOME idea:') ... + - .skip(1) + - // ... and take the first after it. + - .first; + + final wordPairTextWidget = tester.widget( + + find.descendant(of: find.byType(BigCard), matching: find.byType(Text)), + + ); return wordPairTextWidget.data!; } - name: Copy step_05_b_extract @@ -371,9 +365,9 @@ steps: - name: Add Card and Padding path: namer_app/lib/main.dart patch-u: | - --- a/namer_app/lib/main.dart - +++ b/namer_app/lib/main.dart - @@ -67,6 +67,11 @@ class BigCard extends StatelessWidget { + --- b/namer/step_05_c_card_padding/lib/main.dart + +++ a/namer/step_05_c_card_padding/lib/main.dart + @@ -64,6 +64,11 @@ class BigCard extends StatelessWidget { @override Widget build(BuildContext context) { @@ -397,9 +391,9 @@ steps: - name: Add Theme path: namer_app/lib/main.dart patch-u: | - --- a/namer_app/lib/main.dart - +++ b/namer_app/lib/main.dart - @@ -67,7 +67,10 @@ class BigCard extends StatelessWidget { + --- b/namer/step_05_d_theme/lib/main.dart + +++ a/namer/step_05_d_theme/lib/main.dart + @@ -64,7 +64,10 @@ class BigCard extends StatelessWidget { @override Widget build(BuildContext context) { @@ -421,9 +415,9 @@ steps: - name: Add textStyle path: namer_app/lib/main.dart patch-u: | - --- a/namer_app/lib/main.dart - +++ b/namer_app/lib/main.dart - @@ -68,12 +68,15 @@ class BigCard extends StatelessWidget { + --- b/namer/step_05_e_text_style/lib/main.dart + +++ a/namer/step_05_e_text_style/lib/main.dart + @@ -65,12 +65,15 @@ class BigCard extends StatelessWidget { @override Widget build(BuildContext context) { final theme = Theme.of(context); @@ -451,9 +445,9 @@ steps: - name: Add semanticsLabel path: namer_app/lib/main.dart patch-u: | - --- a/namer_app/lib/main.dart - +++ b/namer_app/lib/main.dart - @@ -76,7 +76,11 @@ class BigCard extends StatelessWidget { + --- b/namer/step_05_f_accessibility/lib/main.dart + +++ a/namer/step_05_f_accessibility/lib/main.dart + @@ -73,7 +73,11 @@ class BigCard extends StatelessWidget { color: theme.colorScheme.primary, child: Padding( padding: const EdgeInsets.all(20), @@ -681,9 +675,9 @@ steps: - name: Add test to check 'Like' button path: namer_app/test/widget_test.dart patch-u: | - --- a/namer_app/test/widget_test.dart - +++ b/namer_app/test/widget_test.dart - @@ -45,4 +45,26 @@ + --- b/namer/step_06_c_add_like_button/test/widget_test.dart + +++ a/namer/step_06_c_add_like_button/test/widget_test.dart + @@ -43,4 +43,26 @@ void main() { 'randomly generated at all. The button does not work.', ); }); @@ -941,12 +935,12 @@ steps: - name: Add LayoutBuilder path: namer_app/lib/main.dart patch-u: | - --- a/namer_app/lib/main.dart - +++ b/namer_app/lib/main.dart - @@ -65,39 +65,41 @@ + --- b/namer/step_07_e_add_layout_builder/lib/main.dart + +++ a/namer/step_07_e_add_layout_builder/lib/main.dart + @@ -65,38 +65,42 @@ class _MyHomePageState extends State { throw UnimplementedError('no widget for $selectedIndex'); } - + - return Scaffold( - body: Row( - children: [ @@ -957,11 +951,40 @@ steps: - NavigationRailDestination( - icon: Icon(Icons.home), - label: Text('Home'), - - ), + + return LayoutBuilder( + + builder: (context, constraints) { + + return Scaffold( + + body: Row( + + children: [ + + SafeArea( + + child: NavigationRail( + + extended: constraints.maxWidth >= 600, + + destinations: [ + + NavigationRailDestination( + + icon: Icon(Icons.home), + + label: Text('Home'), + + ), + + NavigationRailDestination( + + icon: Icon(Icons.favorite), + + label: Text('Favorites'), + + ), + + ], + + selectedIndex: selectedIndex, + + onDestinationSelected: (value) { + + setState(() { + + selectedIndex = value; + + }); + + }, + ), - NavigationRailDestination( - icon: Icon(Icons.favorite), - label: Text('Favorites'), - - ), + + ), + + Expanded( + + child: Container( + + color: Theme.of(context).colorScheme.primaryContainer, + + child: page, + ), - ], - selectedIndex: selectedIndex, - onDestinationSelected: (value) { @@ -969,50 +992,21 @@ steps: - selectedIndex = value; - }); - }, - + return LayoutBuilder(builder: (context, constraints) { - + return Scaffold( - + body: Row( - + children: [ - + SafeArea( - + child: NavigationRail( - + extended: constraints.maxWidth >= 600, - + destinations: [ - + NavigationRailDestination( - + icon: Icon(Icons.home), - + label: Text('Home'), - + ), - + NavigationRailDestination( - + icon: Icon(Icons.favorite), - + label: Text('Favorites'), - + ), - + ], - + selectedIndex: selectedIndex, - + onDestinationSelected: (value) { - + setState(() { - + selectedIndex = value; - + }); - + }, - + ), - ), + - ), - ), - Expanded( - child: Container( - color: Theme.of(context).colorScheme.primaryContainer, - child: page, - + Expanded( - + child: Container( - + color: Theme.of(context).colorScheme.primaryContainer, - + child: page, + - ), + ), - ), - - ), + + ], + ), - ], - ), - - ); - + ], - + ), - + ); - + }); + + ); + + }, + ); } } - name: Copy step_07_e_add_layout_builder @@ -1037,7 +1031,7 @@ steps: default: throw UnimplementedError('no widget for $selectedIndex'); } - @@ -175,3 +175,31 @@ class BigCard extends StatelessWidget { + @@ -174,3 +174,31 @@ class BigCard extends StatelessWidget { ); } } @@ -1048,17 +1042,17 @@ steps: + var appState = context.watch(); + + if (appState.favorites.isEmpty) { - + return Center( - + child: Text('No favorites yet.'), - + ); + + return Center(child: Text('No favorites yet.')); + } + + return ListView( + children: [ + Padding( + padding: const EdgeInsets.all(20), - + child: Text('You have ' - + '${appState.favorites.length} favorites:'), + + child: Text( + + 'You have ' + + '${appState.favorites.length} favorites:', + + ), + ), + for (var pair in appState.favorites) + ListTile( @@ -1072,48 +1066,54 @@ steps: - name: Add test to check FavoritesPage path: namer_app/test/widget_test.dart patch-u: | - --- a/namer_app/test/widget_test.dart - +++ b/namer_app/test/widget_test.dart - @@ -67,4 +67,45 @@ void main() { + --- b/namer/step_08/test/widget_test.dart + +++ a/namer/step_08/test/widget_test.dart + @@ -65,4 +65,51 @@ void main() { expect(findElevatedButtonByIcon(Icons.favorite_border), findsNothing); expect(findElevatedButtonByIcon(Icons.favorite), findsOneWidget); }); + - + testWidgets('Liked word pair shows up in Favorites', - + (WidgetTester tester) async { + + testWidgets('Liked word pair shows up in Favorites', ( + + WidgetTester tester, + + ) async { + await tester.pumpWidget(const MyApp()); + + // Find the currently shown word pair. - + final wordPairTextWidget = tester.widget(find.descendant( - + of: find.byType(BigCard), - + matching: find.byType(Text), - + )); + + final wordPairTextWidget = tester.widget( + + find.descendant(of: find.byType(BigCard), matching: find.byType(Text)), + + ); + final current = wordPairTextWidget.data!; + + // Go to the Favorites page. - + await tester.tap(find.descendant( - + of: find.byType(NavigationRail), - + matching: find.byIcon(Icons.favorite), - + )); + + await tester.tap( + + find.descendant( + + of: find.byType(NavigationRail), + + matching: find.byIcon(Icons.favorite), + + ), + + ); + await tester.pumpAndSettle(); + + // Not there yet. + expect(find.text(current), findsNothing); + + // Go back to the Generator page. - + await tester.tap(find.descendant( - + of: find.byType(NavigationRail), - + matching: find.byIcon(Icons.home), - + )); + + await tester.tap( + + find.descendant( + + of: find.byType(NavigationRail), + + matching: find.byIcon(Icons.home), + + ), + + ); + await tester.pumpAndSettle(); + + await tester.tap(find.text('Like')); + + // Go to Favorites page once again. - + await tester.tap(find.descendant( - + of: find.byType(NavigationRail), - + matching: find.byIcon(Icons.favorite), - + )); + + await tester.tap( + + find.descendant( + + of: find.byType(NavigationRail), + + matching: find.byIcon(Icons.favorite), + + ), + + ); + await tester.pumpAndSettle(); + + // Should be there. diff --git a/namer/step_03/android/app/build.gradle b/namer/step_03/android/app/build.gradle.kts similarity index 84% rename from namer/step_03/android/app/build.gradle rename to namer/step_03/android/app/build.gradle.kts index 5537b83860..63a84eeb5c 100644 --- a/namer/step_03/android/app/build.gradle +++ b/namer/step_03/android/app/build.gradle.kts @@ -1,8 +1,8 @@ plugins { - id "com.android.application" - id "kotlin-android" + id("com.android.application") + id("kotlin-android") // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. - id "dev.flutter.flutter-gradle-plugin" + id("dev.flutter.flutter-gradle-plugin") } android { @@ -16,7 +16,7 @@ android { } kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8 + jvmTarget = JavaVersion.VERSION_1_8.toString() } defaultConfig { @@ -34,7 +34,7 @@ android { release { // TODO: Add your own signing config for the release build. // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig = signingConfigs.debug + signingConfig = signingConfigs.getByName("debug") } } } diff --git a/namer/step_03/android/build.gradle b/namer/step_03/android/build.gradle deleted file mode 100644 index d2ffbffa4c..0000000000 --- a/namer/step_03/android/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = "../build" -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(":app") -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/namer/step_03/android/build.gradle.kts b/namer/step_03/android/build.gradle.kts new file mode 100644 index 0000000000..89176ef44e --- /dev/null +++ b/namer/step_03/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/namer/step_03/android/gradle.properties b/namer/step_03/android/gradle.properties index 2597170821..f018a61817 100644 --- a/namer/step_03/android/gradle.properties +++ b/namer/step_03/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/namer/step_03/android/gradle/wrapper/gradle-wrapper.properties b/namer/step_03/android/gradle/wrapper/gradle-wrapper.properties index 7bb2df6ba6..afa1e8eb0a 100644 --- a/namer/step_03/android/gradle/wrapper/gradle-wrapper.properties +++ b/namer/step_03/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip diff --git a/namer/step_03/android/settings.gradle b/namer/step_03/android/settings.gradle deleted file mode 100644 index b9e43bd376..0000000000 --- a/namer/step_03/android/settings.gradle +++ /dev/null @@ -1,25 +0,0 @@ -pluginManagement { - def flutterSdkPath = { - def properties = new Properties() - file("local.properties").withInputStream { properties.load(it) } - def flutterSdkPath = properties.getProperty("flutter.sdk") - assert flutterSdkPath != null, "flutter.sdk not set in local.properties" - return flutterSdkPath - }() - - includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") - - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} - -plugins { - id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.1.0" apply false - id "org.jetbrains.kotlin.android" version "1.8.22" apply false -} - -include ":app" diff --git a/namer/step_03/android/settings.gradle.kts b/namer/step_03/android/settings.gradle.kts new file mode 100644 index 0000000000..a439442c20 --- /dev/null +++ b/namer/step_03/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.0" apply false + id("org.jetbrains.kotlin.android") version "1.8.22" apply false +} + +include(":app") diff --git a/namer/step_04_b_behavior/android/app/build.gradle b/namer/step_04_a_widget/android/app/build.gradle.kts similarity index 84% rename from namer/step_04_b_behavior/android/app/build.gradle rename to namer/step_04_a_widget/android/app/build.gradle.kts index 5537b83860..63a84eeb5c 100644 --- a/namer/step_04_b_behavior/android/app/build.gradle +++ b/namer/step_04_a_widget/android/app/build.gradle.kts @@ -1,8 +1,8 @@ plugins { - id "com.android.application" - id "kotlin-android" + id("com.android.application") + id("kotlin-android") // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. - id "dev.flutter.flutter-gradle-plugin" + id("dev.flutter.flutter-gradle-plugin") } android { @@ -16,7 +16,7 @@ android { } kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8 + jvmTarget = JavaVersion.VERSION_1_8.toString() } defaultConfig { @@ -34,7 +34,7 @@ android { release { // TODO: Add your own signing config for the release build. // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig = signingConfigs.debug + signingConfig = signingConfigs.getByName("debug") } } } diff --git a/namer/step_04_a_widget/android/build.gradle b/namer/step_04_a_widget/android/build.gradle deleted file mode 100644 index d2ffbffa4c..0000000000 --- a/namer/step_04_a_widget/android/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = "../build" -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(":app") -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/namer/step_04_a_widget/android/build.gradle.kts b/namer/step_04_a_widget/android/build.gradle.kts new file mode 100644 index 0000000000..89176ef44e --- /dev/null +++ b/namer/step_04_a_widget/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/namer/step_04_a_widget/android/gradle.properties b/namer/step_04_a_widget/android/gradle.properties index 2597170821..f018a61817 100644 --- a/namer/step_04_a_widget/android/gradle.properties +++ b/namer/step_04_a_widget/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/namer/step_04_a_widget/android/gradle/wrapper/gradle-wrapper.properties b/namer/step_04_a_widget/android/gradle/wrapper/gradle-wrapper.properties index 7bb2df6ba6..afa1e8eb0a 100644 --- a/namer/step_04_a_widget/android/gradle/wrapper/gradle-wrapper.properties +++ b/namer/step_04_a_widget/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip diff --git a/namer/step_04_a_widget/android/settings.gradle b/namer/step_04_a_widget/android/settings.gradle deleted file mode 100644 index b9e43bd376..0000000000 --- a/namer/step_04_a_widget/android/settings.gradle +++ /dev/null @@ -1,25 +0,0 @@ -pluginManagement { - def flutterSdkPath = { - def properties = new Properties() - file("local.properties").withInputStream { properties.load(it) } - def flutterSdkPath = properties.getProperty("flutter.sdk") - assert flutterSdkPath != null, "flutter.sdk not set in local.properties" - return flutterSdkPath - }() - - includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") - - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} - -plugins { - id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.1.0" apply false - id "org.jetbrains.kotlin.android" version "1.8.22" apply false -} - -include ":app" diff --git a/namer/step_04_a_widget/android/settings.gradle.kts b/namer/step_04_a_widget/android/settings.gradle.kts new file mode 100644 index 0000000000..a439442c20 --- /dev/null +++ b/namer/step_04_a_widget/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.0" apply false + id("org.jetbrains.kotlin.android") version "1.8.22" apply false +} + +include(":app") diff --git a/namer/step_05_a_pair/android/app/build.gradle b/namer/step_04_b_behavior/android/app/build.gradle.kts similarity index 84% rename from namer/step_05_a_pair/android/app/build.gradle rename to namer/step_04_b_behavior/android/app/build.gradle.kts index 5537b83860..63a84eeb5c 100644 --- a/namer/step_05_a_pair/android/app/build.gradle +++ b/namer/step_04_b_behavior/android/app/build.gradle.kts @@ -1,8 +1,8 @@ plugins { - id "com.android.application" - id "kotlin-android" + id("com.android.application") + id("kotlin-android") // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. - id "dev.flutter.flutter-gradle-plugin" + id("dev.flutter.flutter-gradle-plugin") } android { @@ -16,7 +16,7 @@ android { } kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8 + jvmTarget = JavaVersion.VERSION_1_8.toString() } defaultConfig { @@ -34,7 +34,7 @@ android { release { // TODO: Add your own signing config for the release build. // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig = signingConfigs.debug + signingConfig = signingConfigs.getByName("debug") } } } diff --git a/namer/step_04_b_behavior/android/build.gradle b/namer/step_04_b_behavior/android/build.gradle deleted file mode 100644 index d2ffbffa4c..0000000000 --- a/namer/step_04_b_behavior/android/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = "../build" -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(":app") -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/namer/step_04_b_behavior/android/build.gradle.kts b/namer/step_04_b_behavior/android/build.gradle.kts new file mode 100644 index 0000000000..89176ef44e --- /dev/null +++ b/namer/step_04_b_behavior/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/namer/step_04_b_behavior/android/gradle.properties b/namer/step_04_b_behavior/android/gradle.properties index 2597170821..f018a61817 100644 --- a/namer/step_04_b_behavior/android/gradle.properties +++ b/namer/step_04_b_behavior/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/namer/step_04_b_behavior/android/gradle/wrapper/gradle-wrapper.properties b/namer/step_04_b_behavior/android/gradle/wrapper/gradle-wrapper.properties index 7bb2df6ba6..afa1e8eb0a 100644 --- a/namer/step_04_b_behavior/android/gradle/wrapper/gradle-wrapper.properties +++ b/namer/step_04_b_behavior/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip diff --git a/namer/step_04_b_behavior/android/settings.gradle b/namer/step_04_b_behavior/android/settings.gradle deleted file mode 100644 index b9e43bd376..0000000000 --- a/namer/step_04_b_behavior/android/settings.gradle +++ /dev/null @@ -1,25 +0,0 @@ -pluginManagement { - def flutterSdkPath = { - def properties = new Properties() - file("local.properties").withInputStream { properties.load(it) } - def flutterSdkPath = properties.getProperty("flutter.sdk") - assert flutterSdkPath != null, "flutter.sdk not set in local.properties" - return flutterSdkPath - }() - - includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") - - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} - -plugins { - id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.1.0" apply false - id "org.jetbrains.kotlin.android" version "1.8.22" apply false -} - -include ":app" diff --git a/namer/step_04_b_behavior/android/settings.gradle.kts b/namer/step_04_b_behavior/android/settings.gradle.kts new file mode 100644 index 0000000000..a439442c20 --- /dev/null +++ b/namer/step_04_b_behavior/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.0" apply false + id("org.jetbrains.kotlin.android") version "1.8.22" apply false +} + +include(":app") diff --git a/namer/step_04_a_widget/android/app/build.gradle b/namer/step_05_a_pair/android/app/build.gradle.kts similarity index 84% rename from namer/step_04_a_widget/android/app/build.gradle rename to namer/step_05_a_pair/android/app/build.gradle.kts index 5537b83860..63a84eeb5c 100644 --- a/namer/step_04_a_widget/android/app/build.gradle +++ b/namer/step_05_a_pair/android/app/build.gradle.kts @@ -1,8 +1,8 @@ plugins { - id "com.android.application" - id "kotlin-android" + id("com.android.application") + id("kotlin-android") // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. - id "dev.flutter.flutter-gradle-plugin" + id("dev.flutter.flutter-gradle-plugin") } android { @@ -16,7 +16,7 @@ android { } kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8 + jvmTarget = JavaVersion.VERSION_1_8.toString() } defaultConfig { @@ -34,7 +34,7 @@ android { release { // TODO: Add your own signing config for the release build. // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig = signingConfigs.debug + signingConfig = signingConfigs.getByName("debug") } } } diff --git a/namer/step_05_a_pair/android/build.gradle b/namer/step_05_a_pair/android/build.gradle deleted file mode 100644 index d2ffbffa4c..0000000000 --- a/namer/step_05_a_pair/android/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = "../build" -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(":app") -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/namer/step_05_a_pair/android/build.gradle.kts b/namer/step_05_a_pair/android/build.gradle.kts new file mode 100644 index 0000000000..89176ef44e --- /dev/null +++ b/namer/step_05_a_pair/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/namer/step_05_a_pair/android/gradle.properties b/namer/step_05_a_pair/android/gradle.properties index 2597170821..f018a61817 100644 --- a/namer/step_05_a_pair/android/gradle.properties +++ b/namer/step_05_a_pair/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/namer/step_05_a_pair/android/gradle/wrapper/gradle-wrapper.properties b/namer/step_05_a_pair/android/gradle/wrapper/gradle-wrapper.properties index 7bb2df6ba6..afa1e8eb0a 100644 --- a/namer/step_05_a_pair/android/gradle/wrapper/gradle-wrapper.properties +++ b/namer/step_05_a_pair/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip diff --git a/namer/step_05_a_pair/android/settings.gradle b/namer/step_05_a_pair/android/settings.gradle deleted file mode 100644 index b9e43bd376..0000000000 --- a/namer/step_05_a_pair/android/settings.gradle +++ /dev/null @@ -1,25 +0,0 @@ -pluginManagement { - def flutterSdkPath = { - def properties = new Properties() - file("local.properties").withInputStream { properties.load(it) } - def flutterSdkPath = properties.getProperty("flutter.sdk") - assert flutterSdkPath != null, "flutter.sdk not set in local.properties" - return flutterSdkPath - }() - - includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") - - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} - -plugins { - id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.1.0" apply false - id "org.jetbrains.kotlin.android" version "1.8.22" apply false -} - -include ":app" diff --git a/namer/step_05_a_pair/android/settings.gradle.kts b/namer/step_05_a_pair/android/settings.gradle.kts new file mode 100644 index 0000000000..a439442c20 --- /dev/null +++ b/namer/step_05_a_pair/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.0" apply false + id("org.jetbrains.kotlin.android") version "1.8.22" apply false +} + +include(":app") diff --git a/namer/step_05_b_extract/android/app/build.gradle b/namer/step_05_b_extract/android/app/build.gradle deleted file mode 100644 index 5537b83860..0000000000 --- a/namer/step_05_b_extract/android/app/build.gradle +++ /dev/null @@ -1,44 +0,0 @@ -plugins { - id "com.android.application" - id "kotlin-android" - // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. - id "dev.flutter.flutter-gradle-plugin" -} - -android { - namespace = "com.example.namer_app" - compileSdk = flutter.compileSdkVersion - ndkVersion = flutter.ndkVersion - - compileOptions { - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 - } - - kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8 - } - - defaultConfig { - // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). - applicationId = "com.example.namer_app" - // You can update the following values to match your application needs. - // For more information, see: https://flutter.dev/to/review-gradle-config. - minSdk = flutter.minSdkVersion - targetSdk = flutter.targetSdkVersion - versionCode = flutter.versionCode - versionName = flutter.versionName - } - - buildTypes { - release { - // TODO: Add your own signing config for the release build. - // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig = signingConfigs.debug - } - } -} - -flutter { - source = "../.." -} diff --git a/namer/step_05_b_extract/android/app/build.gradle.kts b/namer/step_05_b_extract/android/app/build.gradle.kts new file mode 100644 index 0000000000..63a84eeb5c --- /dev/null +++ b/namer/step_05_b_extract/android/app/build.gradle.kts @@ -0,0 +1,44 @@ +plugins { + id("com.android.application") + id("kotlin-android") + // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. + id("dev.flutter.flutter-gradle-plugin") +} + +android { + namespace = "com.example.namer_app" + compileSdk = flutter.compileSdkVersion + ndkVersion = flutter.ndkVersion + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 + } + + kotlinOptions { + jvmTarget = JavaVersion.VERSION_1_8.toString() + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId = "com.example.namer_app" + // You can update the following values to match your application needs. + // For more information, see: https://flutter.dev/to/review-gradle-config. + minSdk = flutter.minSdkVersion + targetSdk = flutter.targetSdkVersion + versionCode = flutter.versionCode + versionName = flutter.versionName + } + + buildTypes { + release { + // TODO: Add your own signing config for the release build. + // Signing with the debug keys for now, so `flutter run --release` works. + signingConfig = signingConfigs.getByName("debug") + } + } +} + +flutter { + source = "../.." +} diff --git a/namer/step_05_b_extract/android/build.gradle b/namer/step_05_b_extract/android/build.gradle deleted file mode 100644 index d2ffbffa4c..0000000000 --- a/namer/step_05_b_extract/android/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = "../build" -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(":app") -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/namer/step_05_b_extract/android/build.gradle.kts b/namer/step_05_b_extract/android/build.gradle.kts new file mode 100644 index 0000000000..89176ef44e --- /dev/null +++ b/namer/step_05_b_extract/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/namer/step_05_b_extract/android/gradle.properties b/namer/step_05_b_extract/android/gradle.properties index 2597170821..f018a61817 100644 --- a/namer/step_05_b_extract/android/gradle.properties +++ b/namer/step_05_b_extract/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/namer/step_05_b_extract/android/gradle/wrapper/gradle-wrapper.properties b/namer/step_05_b_extract/android/gradle/wrapper/gradle-wrapper.properties index 7bb2df6ba6..afa1e8eb0a 100644 --- a/namer/step_05_b_extract/android/gradle/wrapper/gradle-wrapper.properties +++ b/namer/step_05_b_extract/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip diff --git a/namer/step_05_b_extract/android/settings.gradle b/namer/step_05_b_extract/android/settings.gradle deleted file mode 100644 index b9e43bd376..0000000000 --- a/namer/step_05_b_extract/android/settings.gradle +++ /dev/null @@ -1,25 +0,0 @@ -pluginManagement { - def flutterSdkPath = { - def properties = new Properties() - file("local.properties").withInputStream { properties.load(it) } - def flutterSdkPath = properties.getProperty("flutter.sdk") - assert flutterSdkPath != null, "flutter.sdk not set in local.properties" - return flutterSdkPath - }() - - includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") - - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} - -plugins { - id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.1.0" apply false - id "org.jetbrains.kotlin.android" version "1.8.22" apply false -} - -include ":app" diff --git a/namer/step_05_b_extract/android/settings.gradle.kts b/namer/step_05_b_extract/android/settings.gradle.kts new file mode 100644 index 0000000000..a439442c20 --- /dev/null +++ b/namer/step_05_b_extract/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.0" apply false + id("org.jetbrains.kotlin.android") version "1.8.22" apply false +} + +include(":app") diff --git a/namer/step_05_c_card_padding/android/app/build.gradle b/namer/step_05_c_card_padding/android/app/build.gradle deleted file mode 100644 index 5537b83860..0000000000 --- a/namer/step_05_c_card_padding/android/app/build.gradle +++ /dev/null @@ -1,44 +0,0 @@ -plugins { - id "com.android.application" - id "kotlin-android" - // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. - id "dev.flutter.flutter-gradle-plugin" -} - -android { - namespace = "com.example.namer_app" - compileSdk = flutter.compileSdkVersion - ndkVersion = flutter.ndkVersion - - compileOptions { - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 - } - - kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8 - } - - defaultConfig { - // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). - applicationId = "com.example.namer_app" - // You can update the following values to match your application needs. - // For more information, see: https://flutter.dev/to/review-gradle-config. - minSdk = flutter.minSdkVersion - targetSdk = flutter.targetSdkVersion - versionCode = flutter.versionCode - versionName = flutter.versionName - } - - buildTypes { - release { - // TODO: Add your own signing config for the release build. - // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig = signingConfigs.debug - } - } -} - -flutter { - source = "../.." -} diff --git a/namer/step_05_c_card_padding/android/app/build.gradle.kts b/namer/step_05_c_card_padding/android/app/build.gradle.kts new file mode 100644 index 0000000000..63a84eeb5c --- /dev/null +++ b/namer/step_05_c_card_padding/android/app/build.gradle.kts @@ -0,0 +1,44 @@ +plugins { + id("com.android.application") + id("kotlin-android") + // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. + id("dev.flutter.flutter-gradle-plugin") +} + +android { + namespace = "com.example.namer_app" + compileSdk = flutter.compileSdkVersion + ndkVersion = flutter.ndkVersion + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 + } + + kotlinOptions { + jvmTarget = JavaVersion.VERSION_1_8.toString() + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId = "com.example.namer_app" + // You can update the following values to match your application needs. + // For more information, see: https://flutter.dev/to/review-gradle-config. + minSdk = flutter.minSdkVersion + targetSdk = flutter.targetSdkVersion + versionCode = flutter.versionCode + versionName = flutter.versionName + } + + buildTypes { + release { + // TODO: Add your own signing config for the release build. + // Signing with the debug keys for now, so `flutter run --release` works. + signingConfig = signingConfigs.getByName("debug") + } + } +} + +flutter { + source = "../.." +} diff --git a/namer/step_05_c_card_padding/android/build.gradle b/namer/step_05_c_card_padding/android/build.gradle deleted file mode 100644 index d2ffbffa4c..0000000000 --- a/namer/step_05_c_card_padding/android/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = "../build" -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(":app") -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/namer/step_05_c_card_padding/android/build.gradle.kts b/namer/step_05_c_card_padding/android/build.gradle.kts new file mode 100644 index 0000000000..89176ef44e --- /dev/null +++ b/namer/step_05_c_card_padding/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/namer/step_05_c_card_padding/android/gradle.properties b/namer/step_05_c_card_padding/android/gradle.properties index 2597170821..f018a61817 100644 --- a/namer/step_05_c_card_padding/android/gradle.properties +++ b/namer/step_05_c_card_padding/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/namer/step_05_c_card_padding/android/gradle/wrapper/gradle-wrapper.properties b/namer/step_05_c_card_padding/android/gradle/wrapper/gradle-wrapper.properties index 7bb2df6ba6..afa1e8eb0a 100644 --- a/namer/step_05_c_card_padding/android/gradle/wrapper/gradle-wrapper.properties +++ b/namer/step_05_c_card_padding/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip diff --git a/namer/step_05_c_card_padding/android/settings.gradle b/namer/step_05_c_card_padding/android/settings.gradle deleted file mode 100644 index b9e43bd376..0000000000 --- a/namer/step_05_c_card_padding/android/settings.gradle +++ /dev/null @@ -1,25 +0,0 @@ -pluginManagement { - def flutterSdkPath = { - def properties = new Properties() - file("local.properties").withInputStream { properties.load(it) } - def flutterSdkPath = properties.getProperty("flutter.sdk") - assert flutterSdkPath != null, "flutter.sdk not set in local.properties" - return flutterSdkPath - }() - - includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") - - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} - -plugins { - id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.1.0" apply false - id "org.jetbrains.kotlin.android" version "1.8.22" apply false -} - -include ":app" diff --git a/namer/step_05_c_card_padding/android/settings.gradle.kts b/namer/step_05_c_card_padding/android/settings.gradle.kts new file mode 100644 index 0000000000..a439442c20 --- /dev/null +++ b/namer/step_05_c_card_padding/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.0" apply false + id("org.jetbrains.kotlin.android") version "1.8.22" apply false +} + +include(":app") diff --git a/namer/step_05_d_theme/android/app/build.gradle b/namer/step_05_d_theme/android/app/build.gradle deleted file mode 100644 index 5537b83860..0000000000 --- a/namer/step_05_d_theme/android/app/build.gradle +++ /dev/null @@ -1,44 +0,0 @@ -plugins { - id "com.android.application" - id "kotlin-android" - // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. - id "dev.flutter.flutter-gradle-plugin" -} - -android { - namespace = "com.example.namer_app" - compileSdk = flutter.compileSdkVersion - ndkVersion = flutter.ndkVersion - - compileOptions { - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 - } - - kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8 - } - - defaultConfig { - // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). - applicationId = "com.example.namer_app" - // You can update the following values to match your application needs. - // For more information, see: https://flutter.dev/to/review-gradle-config. - minSdk = flutter.minSdkVersion - targetSdk = flutter.targetSdkVersion - versionCode = flutter.versionCode - versionName = flutter.versionName - } - - buildTypes { - release { - // TODO: Add your own signing config for the release build. - // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig = signingConfigs.debug - } - } -} - -flutter { - source = "../.." -} diff --git a/namer/step_05_d_theme/android/app/build.gradle.kts b/namer/step_05_d_theme/android/app/build.gradle.kts new file mode 100644 index 0000000000..63a84eeb5c --- /dev/null +++ b/namer/step_05_d_theme/android/app/build.gradle.kts @@ -0,0 +1,44 @@ +plugins { + id("com.android.application") + id("kotlin-android") + // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. + id("dev.flutter.flutter-gradle-plugin") +} + +android { + namespace = "com.example.namer_app" + compileSdk = flutter.compileSdkVersion + ndkVersion = flutter.ndkVersion + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 + } + + kotlinOptions { + jvmTarget = JavaVersion.VERSION_1_8.toString() + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId = "com.example.namer_app" + // You can update the following values to match your application needs. + // For more information, see: https://flutter.dev/to/review-gradle-config. + minSdk = flutter.minSdkVersion + targetSdk = flutter.targetSdkVersion + versionCode = flutter.versionCode + versionName = flutter.versionName + } + + buildTypes { + release { + // TODO: Add your own signing config for the release build. + // Signing with the debug keys for now, so `flutter run --release` works. + signingConfig = signingConfigs.getByName("debug") + } + } +} + +flutter { + source = "../.." +} diff --git a/namer/step_05_d_theme/android/build.gradle b/namer/step_05_d_theme/android/build.gradle deleted file mode 100644 index d2ffbffa4c..0000000000 --- a/namer/step_05_d_theme/android/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = "../build" -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(":app") -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/namer/step_05_d_theme/android/build.gradle.kts b/namer/step_05_d_theme/android/build.gradle.kts new file mode 100644 index 0000000000..89176ef44e --- /dev/null +++ b/namer/step_05_d_theme/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/namer/step_05_d_theme/android/gradle.properties b/namer/step_05_d_theme/android/gradle.properties index 2597170821..f018a61817 100644 --- a/namer/step_05_d_theme/android/gradle.properties +++ b/namer/step_05_d_theme/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/namer/step_05_d_theme/android/gradle/wrapper/gradle-wrapper.properties b/namer/step_05_d_theme/android/gradle/wrapper/gradle-wrapper.properties index 7bb2df6ba6..afa1e8eb0a 100644 --- a/namer/step_05_d_theme/android/gradle/wrapper/gradle-wrapper.properties +++ b/namer/step_05_d_theme/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip diff --git a/namer/step_05_d_theme/android/settings.gradle b/namer/step_05_d_theme/android/settings.gradle deleted file mode 100644 index b9e43bd376..0000000000 --- a/namer/step_05_d_theme/android/settings.gradle +++ /dev/null @@ -1,25 +0,0 @@ -pluginManagement { - def flutterSdkPath = { - def properties = new Properties() - file("local.properties").withInputStream { properties.load(it) } - def flutterSdkPath = properties.getProperty("flutter.sdk") - assert flutterSdkPath != null, "flutter.sdk not set in local.properties" - return flutterSdkPath - }() - - includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") - - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} - -plugins { - id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.1.0" apply false - id "org.jetbrains.kotlin.android" version "1.8.22" apply false -} - -include ":app" diff --git a/namer/step_05_d_theme/android/settings.gradle.kts b/namer/step_05_d_theme/android/settings.gradle.kts new file mode 100644 index 0000000000..a439442c20 --- /dev/null +++ b/namer/step_05_d_theme/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.0" apply false + id("org.jetbrains.kotlin.android") version "1.8.22" apply false +} + +include(":app") diff --git a/namer/step_05_e_text_style/android/app/build.gradle b/namer/step_05_e_text_style/android/app/build.gradle deleted file mode 100644 index 5537b83860..0000000000 --- a/namer/step_05_e_text_style/android/app/build.gradle +++ /dev/null @@ -1,44 +0,0 @@ -plugins { - id "com.android.application" - id "kotlin-android" - // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. - id "dev.flutter.flutter-gradle-plugin" -} - -android { - namespace = "com.example.namer_app" - compileSdk = flutter.compileSdkVersion - ndkVersion = flutter.ndkVersion - - compileOptions { - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 - } - - kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8 - } - - defaultConfig { - // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). - applicationId = "com.example.namer_app" - // You can update the following values to match your application needs. - // For more information, see: https://flutter.dev/to/review-gradle-config. - minSdk = flutter.minSdkVersion - targetSdk = flutter.targetSdkVersion - versionCode = flutter.versionCode - versionName = flutter.versionName - } - - buildTypes { - release { - // TODO: Add your own signing config for the release build. - // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig = signingConfigs.debug - } - } -} - -flutter { - source = "../.." -} diff --git a/namer/step_05_e_text_style/android/app/build.gradle.kts b/namer/step_05_e_text_style/android/app/build.gradle.kts new file mode 100644 index 0000000000..63a84eeb5c --- /dev/null +++ b/namer/step_05_e_text_style/android/app/build.gradle.kts @@ -0,0 +1,44 @@ +plugins { + id("com.android.application") + id("kotlin-android") + // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. + id("dev.flutter.flutter-gradle-plugin") +} + +android { + namespace = "com.example.namer_app" + compileSdk = flutter.compileSdkVersion + ndkVersion = flutter.ndkVersion + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 + } + + kotlinOptions { + jvmTarget = JavaVersion.VERSION_1_8.toString() + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId = "com.example.namer_app" + // You can update the following values to match your application needs. + // For more information, see: https://flutter.dev/to/review-gradle-config. + minSdk = flutter.minSdkVersion + targetSdk = flutter.targetSdkVersion + versionCode = flutter.versionCode + versionName = flutter.versionName + } + + buildTypes { + release { + // TODO: Add your own signing config for the release build. + // Signing with the debug keys for now, so `flutter run --release` works. + signingConfig = signingConfigs.getByName("debug") + } + } +} + +flutter { + source = "../.." +} diff --git a/namer/step_05_e_text_style/android/build.gradle b/namer/step_05_e_text_style/android/build.gradle deleted file mode 100644 index d2ffbffa4c..0000000000 --- a/namer/step_05_e_text_style/android/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = "../build" -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(":app") -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/namer/step_05_e_text_style/android/build.gradle.kts b/namer/step_05_e_text_style/android/build.gradle.kts new file mode 100644 index 0000000000..89176ef44e --- /dev/null +++ b/namer/step_05_e_text_style/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/namer/step_05_e_text_style/android/gradle.properties b/namer/step_05_e_text_style/android/gradle.properties index 2597170821..f018a61817 100644 --- a/namer/step_05_e_text_style/android/gradle.properties +++ b/namer/step_05_e_text_style/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/namer/step_05_e_text_style/android/gradle/wrapper/gradle-wrapper.properties b/namer/step_05_e_text_style/android/gradle/wrapper/gradle-wrapper.properties index 7bb2df6ba6..afa1e8eb0a 100644 --- a/namer/step_05_e_text_style/android/gradle/wrapper/gradle-wrapper.properties +++ b/namer/step_05_e_text_style/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip diff --git a/namer/step_05_e_text_style/android/settings.gradle b/namer/step_05_e_text_style/android/settings.gradle deleted file mode 100644 index b9e43bd376..0000000000 --- a/namer/step_05_e_text_style/android/settings.gradle +++ /dev/null @@ -1,25 +0,0 @@ -pluginManagement { - def flutterSdkPath = { - def properties = new Properties() - file("local.properties").withInputStream { properties.load(it) } - def flutterSdkPath = properties.getProperty("flutter.sdk") - assert flutterSdkPath != null, "flutter.sdk not set in local.properties" - return flutterSdkPath - }() - - includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") - - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} - -plugins { - id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.1.0" apply false - id "org.jetbrains.kotlin.android" version "1.8.22" apply false -} - -include ":app" diff --git a/namer/step_05_e_text_style/android/settings.gradle.kts b/namer/step_05_e_text_style/android/settings.gradle.kts new file mode 100644 index 0000000000..a439442c20 --- /dev/null +++ b/namer/step_05_e_text_style/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.0" apply false + id("org.jetbrains.kotlin.android") version "1.8.22" apply false +} + +include(":app") diff --git a/namer/step_05_f_accessibility/android/app/build.gradle b/namer/step_05_f_accessibility/android/app/build.gradle deleted file mode 100644 index 5537b83860..0000000000 --- a/namer/step_05_f_accessibility/android/app/build.gradle +++ /dev/null @@ -1,44 +0,0 @@ -plugins { - id "com.android.application" - id "kotlin-android" - // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. - id "dev.flutter.flutter-gradle-plugin" -} - -android { - namespace = "com.example.namer_app" - compileSdk = flutter.compileSdkVersion - ndkVersion = flutter.ndkVersion - - compileOptions { - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 - } - - kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8 - } - - defaultConfig { - // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). - applicationId = "com.example.namer_app" - // You can update the following values to match your application needs. - // For more information, see: https://flutter.dev/to/review-gradle-config. - minSdk = flutter.minSdkVersion - targetSdk = flutter.targetSdkVersion - versionCode = flutter.versionCode - versionName = flutter.versionName - } - - buildTypes { - release { - // TODO: Add your own signing config for the release build. - // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig = signingConfigs.debug - } - } -} - -flutter { - source = "../.." -} diff --git a/namer/step_05_f_accessibility/android/app/build.gradle.kts b/namer/step_05_f_accessibility/android/app/build.gradle.kts new file mode 100644 index 0000000000..63a84eeb5c --- /dev/null +++ b/namer/step_05_f_accessibility/android/app/build.gradle.kts @@ -0,0 +1,44 @@ +plugins { + id("com.android.application") + id("kotlin-android") + // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. + id("dev.flutter.flutter-gradle-plugin") +} + +android { + namespace = "com.example.namer_app" + compileSdk = flutter.compileSdkVersion + ndkVersion = flutter.ndkVersion + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 + } + + kotlinOptions { + jvmTarget = JavaVersion.VERSION_1_8.toString() + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId = "com.example.namer_app" + // You can update the following values to match your application needs. + // For more information, see: https://flutter.dev/to/review-gradle-config. + minSdk = flutter.minSdkVersion + targetSdk = flutter.targetSdkVersion + versionCode = flutter.versionCode + versionName = flutter.versionName + } + + buildTypes { + release { + // TODO: Add your own signing config for the release build. + // Signing with the debug keys for now, so `flutter run --release` works. + signingConfig = signingConfigs.getByName("debug") + } + } +} + +flutter { + source = "../.." +} diff --git a/namer/step_05_f_accessibility/android/build.gradle b/namer/step_05_f_accessibility/android/build.gradle deleted file mode 100644 index d2ffbffa4c..0000000000 --- a/namer/step_05_f_accessibility/android/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = "../build" -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(":app") -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/namer/step_05_f_accessibility/android/build.gradle.kts b/namer/step_05_f_accessibility/android/build.gradle.kts new file mode 100644 index 0000000000..89176ef44e --- /dev/null +++ b/namer/step_05_f_accessibility/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/namer/step_05_f_accessibility/android/gradle.properties b/namer/step_05_f_accessibility/android/gradle.properties index 2597170821..f018a61817 100644 --- a/namer/step_05_f_accessibility/android/gradle.properties +++ b/namer/step_05_f_accessibility/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/namer/step_05_f_accessibility/android/gradle/wrapper/gradle-wrapper.properties b/namer/step_05_f_accessibility/android/gradle/wrapper/gradle-wrapper.properties index 7bb2df6ba6..afa1e8eb0a 100644 --- a/namer/step_05_f_accessibility/android/gradle/wrapper/gradle-wrapper.properties +++ b/namer/step_05_f_accessibility/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip diff --git a/namer/step_05_f_accessibility/android/settings.gradle b/namer/step_05_f_accessibility/android/settings.gradle deleted file mode 100644 index b9e43bd376..0000000000 --- a/namer/step_05_f_accessibility/android/settings.gradle +++ /dev/null @@ -1,25 +0,0 @@ -pluginManagement { - def flutterSdkPath = { - def properties = new Properties() - file("local.properties").withInputStream { properties.load(it) } - def flutterSdkPath = properties.getProperty("flutter.sdk") - assert flutterSdkPath != null, "flutter.sdk not set in local.properties" - return flutterSdkPath - }() - - includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") - - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} - -plugins { - id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.1.0" apply false - id "org.jetbrains.kotlin.android" version "1.8.22" apply false -} - -include ":app" diff --git a/namer/step_05_f_accessibility/android/settings.gradle.kts b/namer/step_05_f_accessibility/android/settings.gradle.kts new file mode 100644 index 0000000000..a439442c20 --- /dev/null +++ b/namer/step_05_f_accessibility/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.0" apply false + id("org.jetbrains.kotlin.android") version "1.8.22" apply false +} + +include(":app") diff --git a/namer/step_05_g_center_vertical/android/app/build.gradle b/namer/step_05_g_center_vertical/android/app/build.gradle deleted file mode 100644 index 5537b83860..0000000000 --- a/namer/step_05_g_center_vertical/android/app/build.gradle +++ /dev/null @@ -1,44 +0,0 @@ -plugins { - id "com.android.application" - id "kotlin-android" - // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. - id "dev.flutter.flutter-gradle-plugin" -} - -android { - namespace = "com.example.namer_app" - compileSdk = flutter.compileSdkVersion - ndkVersion = flutter.ndkVersion - - compileOptions { - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 - } - - kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8 - } - - defaultConfig { - // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). - applicationId = "com.example.namer_app" - // You can update the following values to match your application needs. - // For more information, see: https://flutter.dev/to/review-gradle-config. - minSdk = flutter.minSdkVersion - targetSdk = flutter.targetSdkVersion - versionCode = flutter.versionCode - versionName = flutter.versionName - } - - buildTypes { - release { - // TODO: Add your own signing config for the release build. - // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig = signingConfigs.debug - } - } -} - -flutter { - source = "../.." -} diff --git a/namer/step_05_g_center_vertical/android/app/build.gradle.kts b/namer/step_05_g_center_vertical/android/app/build.gradle.kts new file mode 100644 index 0000000000..63a84eeb5c --- /dev/null +++ b/namer/step_05_g_center_vertical/android/app/build.gradle.kts @@ -0,0 +1,44 @@ +plugins { + id("com.android.application") + id("kotlin-android") + // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. + id("dev.flutter.flutter-gradle-plugin") +} + +android { + namespace = "com.example.namer_app" + compileSdk = flutter.compileSdkVersion + ndkVersion = flutter.ndkVersion + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 + } + + kotlinOptions { + jvmTarget = JavaVersion.VERSION_1_8.toString() + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId = "com.example.namer_app" + // You can update the following values to match your application needs. + // For more information, see: https://flutter.dev/to/review-gradle-config. + minSdk = flutter.minSdkVersion + targetSdk = flutter.targetSdkVersion + versionCode = flutter.versionCode + versionName = flutter.versionName + } + + buildTypes { + release { + // TODO: Add your own signing config for the release build. + // Signing with the debug keys for now, so `flutter run --release` works. + signingConfig = signingConfigs.getByName("debug") + } + } +} + +flutter { + source = "../.." +} diff --git a/namer/step_05_g_center_vertical/android/build.gradle b/namer/step_05_g_center_vertical/android/build.gradle deleted file mode 100644 index d2ffbffa4c..0000000000 --- a/namer/step_05_g_center_vertical/android/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = "../build" -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(":app") -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/namer/step_05_g_center_vertical/android/build.gradle.kts b/namer/step_05_g_center_vertical/android/build.gradle.kts new file mode 100644 index 0000000000..89176ef44e --- /dev/null +++ b/namer/step_05_g_center_vertical/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/namer/step_05_g_center_vertical/android/gradle.properties b/namer/step_05_g_center_vertical/android/gradle.properties index 2597170821..f018a61817 100644 --- a/namer/step_05_g_center_vertical/android/gradle.properties +++ b/namer/step_05_g_center_vertical/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/namer/step_05_g_center_vertical/android/gradle/wrapper/gradle-wrapper.properties b/namer/step_05_g_center_vertical/android/gradle/wrapper/gradle-wrapper.properties index 7bb2df6ba6..afa1e8eb0a 100644 --- a/namer/step_05_g_center_vertical/android/gradle/wrapper/gradle-wrapper.properties +++ b/namer/step_05_g_center_vertical/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip diff --git a/namer/step_05_g_center_vertical/android/settings.gradle b/namer/step_05_g_center_vertical/android/settings.gradle deleted file mode 100644 index b9e43bd376..0000000000 --- a/namer/step_05_g_center_vertical/android/settings.gradle +++ /dev/null @@ -1,25 +0,0 @@ -pluginManagement { - def flutterSdkPath = { - def properties = new Properties() - file("local.properties").withInputStream { properties.load(it) } - def flutterSdkPath = properties.getProperty("flutter.sdk") - assert flutterSdkPath != null, "flutter.sdk not set in local.properties" - return flutterSdkPath - }() - - includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") - - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} - -plugins { - id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.1.0" apply false - id "org.jetbrains.kotlin.android" version "1.8.22" apply false -} - -include ":app" diff --git a/namer/step_05_g_center_vertical/android/settings.gradle.kts b/namer/step_05_g_center_vertical/android/settings.gradle.kts new file mode 100644 index 0000000000..a439442c20 --- /dev/null +++ b/namer/step_05_g_center_vertical/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.0" apply false + id("org.jetbrains.kotlin.android") version "1.8.22" apply false +} + +include(":app") diff --git a/namer/step_05_h_center_horizontal/android/app/build.gradle b/namer/step_05_h_center_horizontal/android/app/build.gradle deleted file mode 100644 index 5537b83860..0000000000 --- a/namer/step_05_h_center_horizontal/android/app/build.gradle +++ /dev/null @@ -1,44 +0,0 @@ -plugins { - id "com.android.application" - id "kotlin-android" - // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. - id "dev.flutter.flutter-gradle-plugin" -} - -android { - namespace = "com.example.namer_app" - compileSdk = flutter.compileSdkVersion - ndkVersion = flutter.ndkVersion - - compileOptions { - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 - } - - kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8 - } - - defaultConfig { - // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). - applicationId = "com.example.namer_app" - // You can update the following values to match your application needs. - // For more information, see: https://flutter.dev/to/review-gradle-config. - minSdk = flutter.minSdkVersion - targetSdk = flutter.targetSdkVersion - versionCode = flutter.versionCode - versionName = flutter.versionName - } - - buildTypes { - release { - // TODO: Add your own signing config for the release build. - // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig = signingConfigs.debug - } - } -} - -flutter { - source = "../.." -} diff --git a/namer/step_05_h_center_horizontal/android/app/build.gradle.kts b/namer/step_05_h_center_horizontal/android/app/build.gradle.kts new file mode 100644 index 0000000000..63a84eeb5c --- /dev/null +++ b/namer/step_05_h_center_horizontal/android/app/build.gradle.kts @@ -0,0 +1,44 @@ +plugins { + id("com.android.application") + id("kotlin-android") + // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. + id("dev.flutter.flutter-gradle-plugin") +} + +android { + namespace = "com.example.namer_app" + compileSdk = flutter.compileSdkVersion + ndkVersion = flutter.ndkVersion + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 + } + + kotlinOptions { + jvmTarget = JavaVersion.VERSION_1_8.toString() + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId = "com.example.namer_app" + // You can update the following values to match your application needs. + // For more information, see: https://flutter.dev/to/review-gradle-config. + minSdk = flutter.minSdkVersion + targetSdk = flutter.targetSdkVersion + versionCode = flutter.versionCode + versionName = flutter.versionName + } + + buildTypes { + release { + // TODO: Add your own signing config for the release build. + // Signing with the debug keys for now, so `flutter run --release` works. + signingConfig = signingConfigs.getByName("debug") + } + } +} + +flutter { + source = "../.." +} diff --git a/namer/step_05_h_center_horizontal/android/build.gradle b/namer/step_05_h_center_horizontal/android/build.gradle deleted file mode 100644 index d2ffbffa4c..0000000000 --- a/namer/step_05_h_center_horizontal/android/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = "../build" -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(":app") -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/namer/step_05_h_center_horizontal/android/build.gradle.kts b/namer/step_05_h_center_horizontal/android/build.gradle.kts new file mode 100644 index 0000000000..89176ef44e --- /dev/null +++ b/namer/step_05_h_center_horizontal/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/namer/step_05_h_center_horizontal/android/gradle.properties b/namer/step_05_h_center_horizontal/android/gradle.properties index 2597170821..f018a61817 100644 --- a/namer/step_05_h_center_horizontal/android/gradle.properties +++ b/namer/step_05_h_center_horizontal/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/namer/step_05_h_center_horizontal/android/gradle/wrapper/gradle-wrapper.properties b/namer/step_05_h_center_horizontal/android/gradle/wrapper/gradle-wrapper.properties index 7bb2df6ba6..afa1e8eb0a 100644 --- a/namer/step_05_h_center_horizontal/android/gradle/wrapper/gradle-wrapper.properties +++ b/namer/step_05_h_center_horizontal/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip diff --git a/namer/step_05_h_center_horizontal/android/settings.gradle b/namer/step_05_h_center_horizontal/android/settings.gradle deleted file mode 100644 index b9e43bd376..0000000000 --- a/namer/step_05_h_center_horizontal/android/settings.gradle +++ /dev/null @@ -1,25 +0,0 @@ -pluginManagement { - def flutterSdkPath = { - def properties = new Properties() - file("local.properties").withInputStream { properties.load(it) } - def flutterSdkPath = properties.getProperty("flutter.sdk") - assert flutterSdkPath != null, "flutter.sdk not set in local.properties" - return flutterSdkPath - }() - - includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") - - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} - -plugins { - id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.1.0" apply false - id "org.jetbrains.kotlin.android" version "1.8.22" apply false -} - -include ":app" diff --git a/namer/step_05_h_center_horizontal/android/settings.gradle.kts b/namer/step_05_h_center_horizontal/android/settings.gradle.kts new file mode 100644 index 0000000000..a439442c20 --- /dev/null +++ b/namer/step_05_h_center_horizontal/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.0" apply false + id("org.jetbrains.kotlin.android") version "1.8.22" apply false +} + +include(":app") diff --git a/namer/step_05_i_optional_changes/android/app/build.gradle b/namer/step_05_i_optional_changes/android/app/build.gradle deleted file mode 100644 index 5537b83860..0000000000 --- a/namer/step_05_i_optional_changes/android/app/build.gradle +++ /dev/null @@ -1,44 +0,0 @@ -plugins { - id "com.android.application" - id "kotlin-android" - // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. - id "dev.flutter.flutter-gradle-plugin" -} - -android { - namespace = "com.example.namer_app" - compileSdk = flutter.compileSdkVersion - ndkVersion = flutter.ndkVersion - - compileOptions { - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 - } - - kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8 - } - - defaultConfig { - // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). - applicationId = "com.example.namer_app" - // You can update the following values to match your application needs. - // For more information, see: https://flutter.dev/to/review-gradle-config. - minSdk = flutter.minSdkVersion - targetSdk = flutter.targetSdkVersion - versionCode = flutter.versionCode - versionName = flutter.versionName - } - - buildTypes { - release { - // TODO: Add your own signing config for the release build. - // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig = signingConfigs.debug - } - } -} - -flutter { - source = "../.." -} diff --git a/namer/step_05_i_optional_changes/android/app/build.gradle.kts b/namer/step_05_i_optional_changes/android/app/build.gradle.kts new file mode 100644 index 0000000000..63a84eeb5c --- /dev/null +++ b/namer/step_05_i_optional_changes/android/app/build.gradle.kts @@ -0,0 +1,44 @@ +plugins { + id("com.android.application") + id("kotlin-android") + // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. + id("dev.flutter.flutter-gradle-plugin") +} + +android { + namespace = "com.example.namer_app" + compileSdk = flutter.compileSdkVersion + ndkVersion = flutter.ndkVersion + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 + } + + kotlinOptions { + jvmTarget = JavaVersion.VERSION_1_8.toString() + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId = "com.example.namer_app" + // You can update the following values to match your application needs. + // For more information, see: https://flutter.dev/to/review-gradle-config. + minSdk = flutter.minSdkVersion + targetSdk = flutter.targetSdkVersion + versionCode = flutter.versionCode + versionName = flutter.versionName + } + + buildTypes { + release { + // TODO: Add your own signing config for the release build. + // Signing with the debug keys for now, so `flutter run --release` works. + signingConfig = signingConfigs.getByName("debug") + } + } +} + +flutter { + source = "../.." +} diff --git a/namer/step_05_i_optional_changes/android/build.gradle b/namer/step_05_i_optional_changes/android/build.gradle deleted file mode 100644 index d2ffbffa4c..0000000000 --- a/namer/step_05_i_optional_changes/android/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = "../build" -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(":app") -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/namer/step_05_i_optional_changes/android/build.gradle.kts b/namer/step_05_i_optional_changes/android/build.gradle.kts new file mode 100644 index 0000000000..89176ef44e --- /dev/null +++ b/namer/step_05_i_optional_changes/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/namer/step_05_i_optional_changes/android/gradle.properties b/namer/step_05_i_optional_changes/android/gradle.properties index 2597170821..f018a61817 100644 --- a/namer/step_05_i_optional_changes/android/gradle.properties +++ b/namer/step_05_i_optional_changes/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/namer/step_05_i_optional_changes/android/gradle/wrapper/gradle-wrapper.properties b/namer/step_05_i_optional_changes/android/gradle/wrapper/gradle-wrapper.properties index 7bb2df6ba6..afa1e8eb0a 100644 --- a/namer/step_05_i_optional_changes/android/gradle/wrapper/gradle-wrapper.properties +++ b/namer/step_05_i_optional_changes/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip diff --git a/namer/step_05_i_optional_changes/android/settings.gradle b/namer/step_05_i_optional_changes/android/settings.gradle deleted file mode 100644 index b9e43bd376..0000000000 --- a/namer/step_05_i_optional_changes/android/settings.gradle +++ /dev/null @@ -1,25 +0,0 @@ -pluginManagement { - def flutterSdkPath = { - def properties = new Properties() - file("local.properties").withInputStream { properties.load(it) } - def flutterSdkPath = properties.getProperty("flutter.sdk") - assert flutterSdkPath != null, "flutter.sdk not set in local.properties" - return flutterSdkPath - }() - - includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") - - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} - -plugins { - id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.1.0" apply false - id "org.jetbrains.kotlin.android" version "1.8.22" apply false -} - -include ":app" diff --git a/namer/step_05_i_optional_changes/android/settings.gradle.kts b/namer/step_05_i_optional_changes/android/settings.gradle.kts new file mode 100644 index 0000000000..a439442c20 --- /dev/null +++ b/namer/step_05_i_optional_changes/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.0" apply false + id("org.jetbrains.kotlin.android") version "1.8.22" apply false +} + +include(":app") diff --git a/namer/step_06_a_business_logic/android/app/build.gradle b/namer/step_06_a_business_logic/android/app/build.gradle deleted file mode 100644 index 5537b83860..0000000000 --- a/namer/step_06_a_business_logic/android/app/build.gradle +++ /dev/null @@ -1,44 +0,0 @@ -plugins { - id "com.android.application" - id "kotlin-android" - // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. - id "dev.flutter.flutter-gradle-plugin" -} - -android { - namespace = "com.example.namer_app" - compileSdk = flutter.compileSdkVersion - ndkVersion = flutter.ndkVersion - - compileOptions { - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 - } - - kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8 - } - - defaultConfig { - // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). - applicationId = "com.example.namer_app" - // You can update the following values to match your application needs. - // For more information, see: https://flutter.dev/to/review-gradle-config. - minSdk = flutter.minSdkVersion - targetSdk = flutter.targetSdkVersion - versionCode = flutter.versionCode - versionName = flutter.versionName - } - - buildTypes { - release { - // TODO: Add your own signing config for the release build. - // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig = signingConfigs.debug - } - } -} - -flutter { - source = "../.." -} diff --git a/namer/step_06_a_business_logic/android/app/build.gradle.kts b/namer/step_06_a_business_logic/android/app/build.gradle.kts new file mode 100644 index 0000000000..63a84eeb5c --- /dev/null +++ b/namer/step_06_a_business_logic/android/app/build.gradle.kts @@ -0,0 +1,44 @@ +plugins { + id("com.android.application") + id("kotlin-android") + // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. + id("dev.flutter.flutter-gradle-plugin") +} + +android { + namespace = "com.example.namer_app" + compileSdk = flutter.compileSdkVersion + ndkVersion = flutter.ndkVersion + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 + } + + kotlinOptions { + jvmTarget = JavaVersion.VERSION_1_8.toString() + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId = "com.example.namer_app" + // You can update the following values to match your application needs. + // For more information, see: https://flutter.dev/to/review-gradle-config. + minSdk = flutter.minSdkVersion + targetSdk = flutter.targetSdkVersion + versionCode = flutter.versionCode + versionName = flutter.versionName + } + + buildTypes { + release { + // TODO: Add your own signing config for the release build. + // Signing with the debug keys for now, so `flutter run --release` works. + signingConfig = signingConfigs.getByName("debug") + } + } +} + +flutter { + source = "../.." +} diff --git a/namer/step_06_a_business_logic/android/build.gradle b/namer/step_06_a_business_logic/android/build.gradle deleted file mode 100644 index d2ffbffa4c..0000000000 --- a/namer/step_06_a_business_logic/android/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = "../build" -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(":app") -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/namer/step_06_a_business_logic/android/build.gradle.kts b/namer/step_06_a_business_logic/android/build.gradle.kts new file mode 100644 index 0000000000..89176ef44e --- /dev/null +++ b/namer/step_06_a_business_logic/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/namer/step_06_a_business_logic/android/gradle.properties b/namer/step_06_a_business_logic/android/gradle.properties index 2597170821..f018a61817 100644 --- a/namer/step_06_a_business_logic/android/gradle.properties +++ b/namer/step_06_a_business_logic/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/namer/step_06_a_business_logic/android/gradle/wrapper/gradle-wrapper.properties b/namer/step_06_a_business_logic/android/gradle/wrapper/gradle-wrapper.properties index 7bb2df6ba6..afa1e8eb0a 100644 --- a/namer/step_06_a_business_logic/android/gradle/wrapper/gradle-wrapper.properties +++ b/namer/step_06_a_business_logic/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip diff --git a/namer/step_06_a_business_logic/android/settings.gradle b/namer/step_06_a_business_logic/android/settings.gradle deleted file mode 100644 index b9e43bd376..0000000000 --- a/namer/step_06_a_business_logic/android/settings.gradle +++ /dev/null @@ -1,25 +0,0 @@ -pluginManagement { - def flutterSdkPath = { - def properties = new Properties() - file("local.properties").withInputStream { properties.load(it) } - def flutterSdkPath = properties.getProperty("flutter.sdk") - assert flutterSdkPath != null, "flutter.sdk not set in local.properties" - return flutterSdkPath - }() - - includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") - - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} - -plugins { - id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.1.0" apply false - id "org.jetbrains.kotlin.android" version "1.8.22" apply false -} - -include ":app" diff --git a/namer/step_06_a_business_logic/android/settings.gradle.kts b/namer/step_06_a_business_logic/android/settings.gradle.kts new file mode 100644 index 0000000000..a439442c20 --- /dev/null +++ b/namer/step_06_a_business_logic/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.0" apply false + id("org.jetbrains.kotlin.android") version "1.8.22" apply false +} + +include(":app") diff --git a/namer/step_06_b_add_row/android/app/build.gradle b/namer/step_06_b_add_row/android/app/build.gradle deleted file mode 100644 index 5537b83860..0000000000 --- a/namer/step_06_b_add_row/android/app/build.gradle +++ /dev/null @@ -1,44 +0,0 @@ -plugins { - id "com.android.application" - id "kotlin-android" - // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. - id "dev.flutter.flutter-gradle-plugin" -} - -android { - namespace = "com.example.namer_app" - compileSdk = flutter.compileSdkVersion - ndkVersion = flutter.ndkVersion - - compileOptions { - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 - } - - kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8 - } - - defaultConfig { - // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). - applicationId = "com.example.namer_app" - // You can update the following values to match your application needs. - // For more information, see: https://flutter.dev/to/review-gradle-config. - minSdk = flutter.minSdkVersion - targetSdk = flutter.targetSdkVersion - versionCode = flutter.versionCode - versionName = flutter.versionName - } - - buildTypes { - release { - // TODO: Add your own signing config for the release build. - // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig = signingConfigs.debug - } - } -} - -flutter { - source = "../.." -} diff --git a/namer/step_06_b_add_row/android/app/build.gradle.kts b/namer/step_06_b_add_row/android/app/build.gradle.kts new file mode 100644 index 0000000000..63a84eeb5c --- /dev/null +++ b/namer/step_06_b_add_row/android/app/build.gradle.kts @@ -0,0 +1,44 @@ +plugins { + id("com.android.application") + id("kotlin-android") + // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. + id("dev.flutter.flutter-gradle-plugin") +} + +android { + namespace = "com.example.namer_app" + compileSdk = flutter.compileSdkVersion + ndkVersion = flutter.ndkVersion + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 + } + + kotlinOptions { + jvmTarget = JavaVersion.VERSION_1_8.toString() + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId = "com.example.namer_app" + // You can update the following values to match your application needs. + // For more information, see: https://flutter.dev/to/review-gradle-config. + minSdk = flutter.minSdkVersion + targetSdk = flutter.targetSdkVersion + versionCode = flutter.versionCode + versionName = flutter.versionName + } + + buildTypes { + release { + // TODO: Add your own signing config for the release build. + // Signing with the debug keys for now, so `flutter run --release` works. + signingConfig = signingConfigs.getByName("debug") + } + } +} + +flutter { + source = "../.." +} diff --git a/namer/step_06_b_add_row/android/build.gradle b/namer/step_06_b_add_row/android/build.gradle deleted file mode 100644 index d2ffbffa4c..0000000000 --- a/namer/step_06_b_add_row/android/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = "../build" -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(":app") -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/namer/step_06_b_add_row/android/build.gradle.kts b/namer/step_06_b_add_row/android/build.gradle.kts new file mode 100644 index 0000000000..89176ef44e --- /dev/null +++ b/namer/step_06_b_add_row/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/namer/step_06_b_add_row/android/gradle.properties b/namer/step_06_b_add_row/android/gradle.properties index 2597170821..f018a61817 100644 --- a/namer/step_06_b_add_row/android/gradle.properties +++ b/namer/step_06_b_add_row/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/namer/step_06_b_add_row/android/gradle/wrapper/gradle-wrapper.properties b/namer/step_06_b_add_row/android/gradle/wrapper/gradle-wrapper.properties index 7bb2df6ba6..afa1e8eb0a 100644 --- a/namer/step_06_b_add_row/android/gradle/wrapper/gradle-wrapper.properties +++ b/namer/step_06_b_add_row/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip diff --git a/namer/step_06_b_add_row/android/settings.gradle b/namer/step_06_b_add_row/android/settings.gradle deleted file mode 100644 index b9e43bd376..0000000000 --- a/namer/step_06_b_add_row/android/settings.gradle +++ /dev/null @@ -1,25 +0,0 @@ -pluginManagement { - def flutterSdkPath = { - def properties = new Properties() - file("local.properties").withInputStream { properties.load(it) } - def flutterSdkPath = properties.getProperty("flutter.sdk") - assert flutterSdkPath != null, "flutter.sdk not set in local.properties" - return flutterSdkPath - }() - - includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") - - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} - -plugins { - id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.1.0" apply false - id "org.jetbrains.kotlin.android" version "1.8.22" apply false -} - -include ":app" diff --git a/namer/step_06_b_add_row/android/settings.gradle.kts b/namer/step_06_b_add_row/android/settings.gradle.kts new file mode 100644 index 0000000000..a439442c20 --- /dev/null +++ b/namer/step_06_b_add_row/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.0" apply false + id("org.jetbrains.kotlin.android") version "1.8.22" apply false +} + +include(":app") diff --git a/namer/step_06_c_add_like_button/android/app/build.gradle b/namer/step_06_c_add_like_button/android/app/build.gradle deleted file mode 100644 index 5537b83860..0000000000 --- a/namer/step_06_c_add_like_button/android/app/build.gradle +++ /dev/null @@ -1,44 +0,0 @@ -plugins { - id "com.android.application" - id "kotlin-android" - // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. - id "dev.flutter.flutter-gradle-plugin" -} - -android { - namespace = "com.example.namer_app" - compileSdk = flutter.compileSdkVersion - ndkVersion = flutter.ndkVersion - - compileOptions { - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 - } - - kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8 - } - - defaultConfig { - // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). - applicationId = "com.example.namer_app" - // You can update the following values to match your application needs. - // For more information, see: https://flutter.dev/to/review-gradle-config. - minSdk = flutter.minSdkVersion - targetSdk = flutter.targetSdkVersion - versionCode = flutter.versionCode - versionName = flutter.versionName - } - - buildTypes { - release { - // TODO: Add your own signing config for the release build. - // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig = signingConfigs.debug - } - } -} - -flutter { - source = "../.." -} diff --git a/namer/step_06_c_add_like_button/android/app/build.gradle.kts b/namer/step_06_c_add_like_button/android/app/build.gradle.kts new file mode 100644 index 0000000000..63a84eeb5c --- /dev/null +++ b/namer/step_06_c_add_like_button/android/app/build.gradle.kts @@ -0,0 +1,44 @@ +plugins { + id("com.android.application") + id("kotlin-android") + // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. + id("dev.flutter.flutter-gradle-plugin") +} + +android { + namespace = "com.example.namer_app" + compileSdk = flutter.compileSdkVersion + ndkVersion = flutter.ndkVersion + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 + } + + kotlinOptions { + jvmTarget = JavaVersion.VERSION_1_8.toString() + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId = "com.example.namer_app" + // You can update the following values to match your application needs. + // For more information, see: https://flutter.dev/to/review-gradle-config. + minSdk = flutter.minSdkVersion + targetSdk = flutter.targetSdkVersion + versionCode = flutter.versionCode + versionName = flutter.versionName + } + + buildTypes { + release { + // TODO: Add your own signing config for the release build. + // Signing with the debug keys for now, so `flutter run --release` works. + signingConfig = signingConfigs.getByName("debug") + } + } +} + +flutter { + source = "../.." +} diff --git a/namer/step_06_c_add_like_button/android/build.gradle b/namer/step_06_c_add_like_button/android/build.gradle deleted file mode 100644 index d2ffbffa4c..0000000000 --- a/namer/step_06_c_add_like_button/android/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = "../build" -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(":app") -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/namer/step_06_c_add_like_button/android/build.gradle.kts b/namer/step_06_c_add_like_button/android/build.gradle.kts new file mode 100644 index 0000000000..89176ef44e --- /dev/null +++ b/namer/step_06_c_add_like_button/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/namer/step_06_c_add_like_button/android/gradle.properties b/namer/step_06_c_add_like_button/android/gradle.properties index 2597170821..f018a61817 100644 --- a/namer/step_06_c_add_like_button/android/gradle.properties +++ b/namer/step_06_c_add_like_button/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/namer/step_06_c_add_like_button/android/gradle/wrapper/gradle-wrapper.properties b/namer/step_06_c_add_like_button/android/gradle/wrapper/gradle-wrapper.properties index 7bb2df6ba6..afa1e8eb0a 100644 --- a/namer/step_06_c_add_like_button/android/gradle/wrapper/gradle-wrapper.properties +++ b/namer/step_06_c_add_like_button/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip diff --git a/namer/step_06_c_add_like_button/android/settings.gradle b/namer/step_06_c_add_like_button/android/settings.gradle deleted file mode 100644 index b9e43bd376..0000000000 --- a/namer/step_06_c_add_like_button/android/settings.gradle +++ /dev/null @@ -1,25 +0,0 @@ -pluginManagement { - def flutterSdkPath = { - def properties = new Properties() - file("local.properties").withInputStream { properties.load(it) } - def flutterSdkPath = properties.getProperty("flutter.sdk") - assert flutterSdkPath != null, "flutter.sdk not set in local.properties" - return flutterSdkPath - }() - - includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") - - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} - -plugins { - id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.1.0" apply false - id "org.jetbrains.kotlin.android" version "1.8.22" apply false -} - -include ":app" diff --git a/namer/step_06_c_add_like_button/android/settings.gradle.kts b/namer/step_06_c_add_like_button/android/settings.gradle.kts new file mode 100644 index 0000000000..a439442c20 --- /dev/null +++ b/namer/step_06_c_add_like_button/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.0" apply false + id("org.jetbrains.kotlin.android") version "1.8.22" apply false +} + +include(":app") diff --git a/namer/step_07_a_split_my_home_page/android/app/build.gradle b/namer/step_07_a_split_my_home_page/android/app/build.gradle deleted file mode 100644 index 5537b83860..0000000000 --- a/namer/step_07_a_split_my_home_page/android/app/build.gradle +++ /dev/null @@ -1,44 +0,0 @@ -plugins { - id "com.android.application" - id "kotlin-android" - // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. - id "dev.flutter.flutter-gradle-plugin" -} - -android { - namespace = "com.example.namer_app" - compileSdk = flutter.compileSdkVersion - ndkVersion = flutter.ndkVersion - - compileOptions { - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 - } - - kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8 - } - - defaultConfig { - // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). - applicationId = "com.example.namer_app" - // You can update the following values to match your application needs. - // For more information, see: https://flutter.dev/to/review-gradle-config. - minSdk = flutter.minSdkVersion - targetSdk = flutter.targetSdkVersion - versionCode = flutter.versionCode - versionName = flutter.versionName - } - - buildTypes { - release { - // TODO: Add your own signing config for the release build. - // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig = signingConfigs.debug - } - } -} - -flutter { - source = "../.." -} diff --git a/namer/step_07_a_split_my_home_page/android/app/build.gradle.kts b/namer/step_07_a_split_my_home_page/android/app/build.gradle.kts new file mode 100644 index 0000000000..63a84eeb5c --- /dev/null +++ b/namer/step_07_a_split_my_home_page/android/app/build.gradle.kts @@ -0,0 +1,44 @@ +plugins { + id("com.android.application") + id("kotlin-android") + // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. + id("dev.flutter.flutter-gradle-plugin") +} + +android { + namespace = "com.example.namer_app" + compileSdk = flutter.compileSdkVersion + ndkVersion = flutter.ndkVersion + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 + } + + kotlinOptions { + jvmTarget = JavaVersion.VERSION_1_8.toString() + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId = "com.example.namer_app" + // You can update the following values to match your application needs. + // For more information, see: https://flutter.dev/to/review-gradle-config. + minSdk = flutter.minSdkVersion + targetSdk = flutter.targetSdkVersion + versionCode = flutter.versionCode + versionName = flutter.versionName + } + + buildTypes { + release { + // TODO: Add your own signing config for the release build. + // Signing with the debug keys for now, so `flutter run --release` works. + signingConfig = signingConfigs.getByName("debug") + } + } +} + +flutter { + source = "../.." +} diff --git a/namer/step_07_a_split_my_home_page/android/build.gradle b/namer/step_07_a_split_my_home_page/android/build.gradle deleted file mode 100644 index d2ffbffa4c..0000000000 --- a/namer/step_07_a_split_my_home_page/android/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = "../build" -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(":app") -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/namer/step_07_a_split_my_home_page/android/build.gradle.kts b/namer/step_07_a_split_my_home_page/android/build.gradle.kts new file mode 100644 index 0000000000..89176ef44e --- /dev/null +++ b/namer/step_07_a_split_my_home_page/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/namer/step_07_a_split_my_home_page/android/gradle.properties b/namer/step_07_a_split_my_home_page/android/gradle.properties index 2597170821..f018a61817 100644 --- a/namer/step_07_a_split_my_home_page/android/gradle.properties +++ b/namer/step_07_a_split_my_home_page/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/namer/step_07_a_split_my_home_page/android/gradle/wrapper/gradle-wrapper.properties b/namer/step_07_a_split_my_home_page/android/gradle/wrapper/gradle-wrapper.properties index 7bb2df6ba6..afa1e8eb0a 100644 --- a/namer/step_07_a_split_my_home_page/android/gradle/wrapper/gradle-wrapper.properties +++ b/namer/step_07_a_split_my_home_page/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip diff --git a/namer/step_07_a_split_my_home_page/android/settings.gradle b/namer/step_07_a_split_my_home_page/android/settings.gradle deleted file mode 100644 index b9e43bd376..0000000000 --- a/namer/step_07_a_split_my_home_page/android/settings.gradle +++ /dev/null @@ -1,25 +0,0 @@ -pluginManagement { - def flutterSdkPath = { - def properties = new Properties() - file("local.properties").withInputStream { properties.load(it) } - def flutterSdkPath = properties.getProperty("flutter.sdk") - assert flutterSdkPath != null, "flutter.sdk not set in local.properties" - return flutterSdkPath - }() - - includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") - - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} - -plugins { - id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.1.0" apply false - id "org.jetbrains.kotlin.android" version "1.8.22" apply false -} - -include ":app" diff --git a/namer/step_07_a_split_my_home_page/android/settings.gradle.kts b/namer/step_07_a_split_my_home_page/android/settings.gradle.kts new file mode 100644 index 0000000000..a439442c20 --- /dev/null +++ b/namer/step_07_a_split_my_home_page/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.0" apply false + id("org.jetbrains.kotlin.android") version "1.8.22" apply false +} + +include(":app") diff --git a/namer/step_07_b_convert_to_stateful/android/app/build.gradle b/namer/step_07_b_convert_to_stateful/android/app/build.gradle deleted file mode 100644 index 5537b83860..0000000000 --- a/namer/step_07_b_convert_to_stateful/android/app/build.gradle +++ /dev/null @@ -1,44 +0,0 @@ -plugins { - id "com.android.application" - id "kotlin-android" - // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. - id "dev.flutter.flutter-gradle-plugin" -} - -android { - namespace = "com.example.namer_app" - compileSdk = flutter.compileSdkVersion - ndkVersion = flutter.ndkVersion - - compileOptions { - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 - } - - kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8 - } - - defaultConfig { - // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). - applicationId = "com.example.namer_app" - // You can update the following values to match your application needs. - // For more information, see: https://flutter.dev/to/review-gradle-config. - minSdk = flutter.minSdkVersion - targetSdk = flutter.targetSdkVersion - versionCode = flutter.versionCode - versionName = flutter.versionName - } - - buildTypes { - release { - // TODO: Add your own signing config for the release build. - // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig = signingConfigs.debug - } - } -} - -flutter { - source = "../.." -} diff --git a/namer/step_07_b_convert_to_stateful/android/app/build.gradle.kts b/namer/step_07_b_convert_to_stateful/android/app/build.gradle.kts new file mode 100644 index 0000000000..63a84eeb5c --- /dev/null +++ b/namer/step_07_b_convert_to_stateful/android/app/build.gradle.kts @@ -0,0 +1,44 @@ +plugins { + id("com.android.application") + id("kotlin-android") + // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. + id("dev.flutter.flutter-gradle-plugin") +} + +android { + namespace = "com.example.namer_app" + compileSdk = flutter.compileSdkVersion + ndkVersion = flutter.ndkVersion + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 + } + + kotlinOptions { + jvmTarget = JavaVersion.VERSION_1_8.toString() + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId = "com.example.namer_app" + // You can update the following values to match your application needs. + // For more information, see: https://flutter.dev/to/review-gradle-config. + minSdk = flutter.minSdkVersion + targetSdk = flutter.targetSdkVersion + versionCode = flutter.versionCode + versionName = flutter.versionName + } + + buildTypes { + release { + // TODO: Add your own signing config for the release build. + // Signing with the debug keys for now, so `flutter run --release` works. + signingConfig = signingConfigs.getByName("debug") + } + } +} + +flutter { + source = "../.." +} diff --git a/namer/step_07_b_convert_to_stateful/android/build.gradle b/namer/step_07_b_convert_to_stateful/android/build.gradle deleted file mode 100644 index d2ffbffa4c..0000000000 --- a/namer/step_07_b_convert_to_stateful/android/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = "../build" -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(":app") -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/namer/step_07_b_convert_to_stateful/android/build.gradle.kts b/namer/step_07_b_convert_to_stateful/android/build.gradle.kts new file mode 100644 index 0000000000..89176ef44e --- /dev/null +++ b/namer/step_07_b_convert_to_stateful/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/namer/step_07_b_convert_to_stateful/android/gradle.properties b/namer/step_07_b_convert_to_stateful/android/gradle.properties index 2597170821..f018a61817 100644 --- a/namer/step_07_b_convert_to_stateful/android/gradle.properties +++ b/namer/step_07_b_convert_to_stateful/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/namer/step_07_b_convert_to_stateful/android/gradle/wrapper/gradle-wrapper.properties b/namer/step_07_b_convert_to_stateful/android/gradle/wrapper/gradle-wrapper.properties index 7bb2df6ba6..afa1e8eb0a 100644 --- a/namer/step_07_b_convert_to_stateful/android/gradle/wrapper/gradle-wrapper.properties +++ b/namer/step_07_b_convert_to_stateful/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip diff --git a/namer/step_07_b_convert_to_stateful/android/settings.gradle b/namer/step_07_b_convert_to_stateful/android/settings.gradle deleted file mode 100644 index b9e43bd376..0000000000 --- a/namer/step_07_b_convert_to_stateful/android/settings.gradle +++ /dev/null @@ -1,25 +0,0 @@ -pluginManagement { - def flutterSdkPath = { - def properties = new Properties() - file("local.properties").withInputStream { properties.load(it) } - def flutterSdkPath = properties.getProperty("flutter.sdk") - assert flutterSdkPath != null, "flutter.sdk not set in local.properties" - return flutterSdkPath - }() - - includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") - - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} - -plugins { - id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.1.0" apply false - id "org.jetbrains.kotlin.android" version "1.8.22" apply false -} - -include ":app" diff --git a/namer/step_07_b_convert_to_stateful/android/settings.gradle.kts b/namer/step_07_b_convert_to_stateful/android/settings.gradle.kts new file mode 100644 index 0000000000..a439442c20 --- /dev/null +++ b/namer/step_07_b_convert_to_stateful/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.0" apply false + id("org.jetbrains.kotlin.android") version "1.8.22" apply false +} + +include(":app") diff --git a/namer/step_07_c_add_selectedindex/android/app/build.gradle b/namer/step_07_c_add_selectedindex/android/app/build.gradle deleted file mode 100644 index 5537b83860..0000000000 --- a/namer/step_07_c_add_selectedindex/android/app/build.gradle +++ /dev/null @@ -1,44 +0,0 @@ -plugins { - id "com.android.application" - id "kotlin-android" - // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. - id "dev.flutter.flutter-gradle-plugin" -} - -android { - namespace = "com.example.namer_app" - compileSdk = flutter.compileSdkVersion - ndkVersion = flutter.ndkVersion - - compileOptions { - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 - } - - kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8 - } - - defaultConfig { - // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). - applicationId = "com.example.namer_app" - // You can update the following values to match your application needs. - // For more information, see: https://flutter.dev/to/review-gradle-config. - minSdk = flutter.minSdkVersion - targetSdk = flutter.targetSdkVersion - versionCode = flutter.versionCode - versionName = flutter.versionName - } - - buildTypes { - release { - // TODO: Add your own signing config for the release build. - // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig = signingConfigs.debug - } - } -} - -flutter { - source = "../.." -} diff --git a/namer/step_07_c_add_selectedindex/android/app/build.gradle.kts b/namer/step_07_c_add_selectedindex/android/app/build.gradle.kts new file mode 100644 index 0000000000..63a84eeb5c --- /dev/null +++ b/namer/step_07_c_add_selectedindex/android/app/build.gradle.kts @@ -0,0 +1,44 @@ +plugins { + id("com.android.application") + id("kotlin-android") + // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. + id("dev.flutter.flutter-gradle-plugin") +} + +android { + namespace = "com.example.namer_app" + compileSdk = flutter.compileSdkVersion + ndkVersion = flutter.ndkVersion + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 + } + + kotlinOptions { + jvmTarget = JavaVersion.VERSION_1_8.toString() + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId = "com.example.namer_app" + // You can update the following values to match your application needs. + // For more information, see: https://flutter.dev/to/review-gradle-config. + minSdk = flutter.minSdkVersion + targetSdk = flutter.targetSdkVersion + versionCode = flutter.versionCode + versionName = flutter.versionName + } + + buildTypes { + release { + // TODO: Add your own signing config for the release build. + // Signing with the debug keys for now, so `flutter run --release` works. + signingConfig = signingConfigs.getByName("debug") + } + } +} + +flutter { + source = "../.." +} diff --git a/namer/step_07_c_add_selectedindex/android/build.gradle b/namer/step_07_c_add_selectedindex/android/build.gradle deleted file mode 100644 index d2ffbffa4c..0000000000 --- a/namer/step_07_c_add_selectedindex/android/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = "../build" -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(":app") -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/namer/step_07_c_add_selectedindex/android/build.gradle.kts b/namer/step_07_c_add_selectedindex/android/build.gradle.kts new file mode 100644 index 0000000000..89176ef44e --- /dev/null +++ b/namer/step_07_c_add_selectedindex/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/namer/step_07_c_add_selectedindex/android/gradle.properties b/namer/step_07_c_add_selectedindex/android/gradle.properties index 2597170821..f018a61817 100644 --- a/namer/step_07_c_add_selectedindex/android/gradle.properties +++ b/namer/step_07_c_add_selectedindex/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/namer/step_07_c_add_selectedindex/android/gradle/wrapper/gradle-wrapper.properties b/namer/step_07_c_add_selectedindex/android/gradle/wrapper/gradle-wrapper.properties index 7bb2df6ba6..afa1e8eb0a 100644 --- a/namer/step_07_c_add_selectedindex/android/gradle/wrapper/gradle-wrapper.properties +++ b/namer/step_07_c_add_selectedindex/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip diff --git a/namer/step_07_c_add_selectedindex/android/settings.gradle b/namer/step_07_c_add_selectedindex/android/settings.gradle deleted file mode 100644 index b9e43bd376..0000000000 --- a/namer/step_07_c_add_selectedindex/android/settings.gradle +++ /dev/null @@ -1,25 +0,0 @@ -pluginManagement { - def flutterSdkPath = { - def properties = new Properties() - file("local.properties").withInputStream { properties.load(it) } - def flutterSdkPath = properties.getProperty("flutter.sdk") - assert flutterSdkPath != null, "flutter.sdk not set in local.properties" - return flutterSdkPath - }() - - includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") - - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} - -plugins { - id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.1.0" apply false - id "org.jetbrains.kotlin.android" version "1.8.22" apply false -} - -include ":app" diff --git a/namer/step_07_c_add_selectedindex/android/settings.gradle.kts b/namer/step_07_c_add_selectedindex/android/settings.gradle.kts new file mode 100644 index 0000000000..a439442c20 --- /dev/null +++ b/namer/step_07_c_add_selectedindex/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.0" apply false + id("org.jetbrains.kotlin.android") version "1.8.22" apply false +} + +include(":app") diff --git a/namer/step_07_d_use_selectedindex/android/app/build.gradle b/namer/step_07_d_use_selectedindex/android/app/build.gradle deleted file mode 100644 index 5537b83860..0000000000 --- a/namer/step_07_d_use_selectedindex/android/app/build.gradle +++ /dev/null @@ -1,44 +0,0 @@ -plugins { - id "com.android.application" - id "kotlin-android" - // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. - id "dev.flutter.flutter-gradle-plugin" -} - -android { - namespace = "com.example.namer_app" - compileSdk = flutter.compileSdkVersion - ndkVersion = flutter.ndkVersion - - compileOptions { - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 - } - - kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8 - } - - defaultConfig { - // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). - applicationId = "com.example.namer_app" - // You can update the following values to match your application needs. - // For more information, see: https://flutter.dev/to/review-gradle-config. - minSdk = flutter.minSdkVersion - targetSdk = flutter.targetSdkVersion - versionCode = flutter.versionCode - versionName = flutter.versionName - } - - buildTypes { - release { - // TODO: Add your own signing config for the release build. - // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig = signingConfigs.debug - } - } -} - -flutter { - source = "../.." -} diff --git a/namer/step_07_d_use_selectedindex/android/app/build.gradle.kts b/namer/step_07_d_use_selectedindex/android/app/build.gradle.kts new file mode 100644 index 0000000000..63a84eeb5c --- /dev/null +++ b/namer/step_07_d_use_selectedindex/android/app/build.gradle.kts @@ -0,0 +1,44 @@ +plugins { + id("com.android.application") + id("kotlin-android") + // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. + id("dev.flutter.flutter-gradle-plugin") +} + +android { + namespace = "com.example.namer_app" + compileSdk = flutter.compileSdkVersion + ndkVersion = flutter.ndkVersion + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 + } + + kotlinOptions { + jvmTarget = JavaVersion.VERSION_1_8.toString() + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId = "com.example.namer_app" + // You can update the following values to match your application needs. + // For more information, see: https://flutter.dev/to/review-gradle-config. + minSdk = flutter.minSdkVersion + targetSdk = flutter.targetSdkVersion + versionCode = flutter.versionCode + versionName = flutter.versionName + } + + buildTypes { + release { + // TODO: Add your own signing config for the release build. + // Signing with the debug keys for now, so `flutter run --release` works. + signingConfig = signingConfigs.getByName("debug") + } + } +} + +flutter { + source = "../.." +} diff --git a/namer/step_07_d_use_selectedindex/android/build.gradle b/namer/step_07_d_use_selectedindex/android/build.gradle deleted file mode 100644 index d2ffbffa4c..0000000000 --- a/namer/step_07_d_use_selectedindex/android/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = "../build" -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(":app") -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/namer/step_07_d_use_selectedindex/android/build.gradle.kts b/namer/step_07_d_use_selectedindex/android/build.gradle.kts new file mode 100644 index 0000000000..89176ef44e --- /dev/null +++ b/namer/step_07_d_use_selectedindex/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/namer/step_07_d_use_selectedindex/android/gradle.properties b/namer/step_07_d_use_selectedindex/android/gradle.properties index 2597170821..f018a61817 100644 --- a/namer/step_07_d_use_selectedindex/android/gradle.properties +++ b/namer/step_07_d_use_selectedindex/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/namer/step_07_d_use_selectedindex/android/gradle/wrapper/gradle-wrapper.properties b/namer/step_07_d_use_selectedindex/android/gradle/wrapper/gradle-wrapper.properties index 7bb2df6ba6..afa1e8eb0a 100644 --- a/namer/step_07_d_use_selectedindex/android/gradle/wrapper/gradle-wrapper.properties +++ b/namer/step_07_d_use_selectedindex/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip diff --git a/namer/step_07_d_use_selectedindex/android/settings.gradle b/namer/step_07_d_use_selectedindex/android/settings.gradle deleted file mode 100644 index b9e43bd376..0000000000 --- a/namer/step_07_d_use_selectedindex/android/settings.gradle +++ /dev/null @@ -1,25 +0,0 @@ -pluginManagement { - def flutterSdkPath = { - def properties = new Properties() - file("local.properties").withInputStream { properties.load(it) } - def flutterSdkPath = properties.getProperty("flutter.sdk") - assert flutterSdkPath != null, "flutter.sdk not set in local.properties" - return flutterSdkPath - }() - - includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") - - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} - -plugins { - id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.1.0" apply false - id "org.jetbrains.kotlin.android" version "1.8.22" apply false -} - -include ":app" diff --git a/namer/step_07_d_use_selectedindex/android/settings.gradle.kts b/namer/step_07_d_use_selectedindex/android/settings.gradle.kts new file mode 100644 index 0000000000..a439442c20 --- /dev/null +++ b/namer/step_07_d_use_selectedindex/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.0" apply false + id("org.jetbrains.kotlin.android") version "1.8.22" apply false +} + +include(":app") diff --git a/namer/step_07_e_add_layout_builder/android/app/build.gradle b/namer/step_07_e_add_layout_builder/android/app/build.gradle deleted file mode 100644 index 5537b83860..0000000000 --- a/namer/step_07_e_add_layout_builder/android/app/build.gradle +++ /dev/null @@ -1,44 +0,0 @@ -plugins { - id "com.android.application" - id "kotlin-android" - // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. - id "dev.flutter.flutter-gradle-plugin" -} - -android { - namespace = "com.example.namer_app" - compileSdk = flutter.compileSdkVersion - ndkVersion = flutter.ndkVersion - - compileOptions { - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 - } - - kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8 - } - - defaultConfig { - // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). - applicationId = "com.example.namer_app" - // You can update the following values to match your application needs. - // For more information, see: https://flutter.dev/to/review-gradle-config. - minSdk = flutter.minSdkVersion - targetSdk = flutter.targetSdkVersion - versionCode = flutter.versionCode - versionName = flutter.versionName - } - - buildTypes { - release { - // TODO: Add your own signing config for the release build. - // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig = signingConfigs.debug - } - } -} - -flutter { - source = "../.." -} diff --git a/namer/step_07_e_add_layout_builder/android/app/build.gradle.kts b/namer/step_07_e_add_layout_builder/android/app/build.gradle.kts new file mode 100644 index 0000000000..63a84eeb5c --- /dev/null +++ b/namer/step_07_e_add_layout_builder/android/app/build.gradle.kts @@ -0,0 +1,44 @@ +plugins { + id("com.android.application") + id("kotlin-android") + // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. + id("dev.flutter.flutter-gradle-plugin") +} + +android { + namespace = "com.example.namer_app" + compileSdk = flutter.compileSdkVersion + ndkVersion = flutter.ndkVersion + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 + } + + kotlinOptions { + jvmTarget = JavaVersion.VERSION_1_8.toString() + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId = "com.example.namer_app" + // You can update the following values to match your application needs. + // For more information, see: https://flutter.dev/to/review-gradle-config. + minSdk = flutter.minSdkVersion + targetSdk = flutter.targetSdkVersion + versionCode = flutter.versionCode + versionName = flutter.versionName + } + + buildTypes { + release { + // TODO: Add your own signing config for the release build. + // Signing with the debug keys for now, so `flutter run --release` works. + signingConfig = signingConfigs.getByName("debug") + } + } +} + +flutter { + source = "../.." +} diff --git a/namer/step_07_e_add_layout_builder/android/build.gradle b/namer/step_07_e_add_layout_builder/android/build.gradle deleted file mode 100644 index d2ffbffa4c..0000000000 --- a/namer/step_07_e_add_layout_builder/android/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = "../build" -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(":app") -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/namer/step_07_e_add_layout_builder/android/build.gradle.kts b/namer/step_07_e_add_layout_builder/android/build.gradle.kts new file mode 100644 index 0000000000..89176ef44e --- /dev/null +++ b/namer/step_07_e_add_layout_builder/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/namer/step_07_e_add_layout_builder/android/gradle.properties b/namer/step_07_e_add_layout_builder/android/gradle.properties index 2597170821..f018a61817 100644 --- a/namer/step_07_e_add_layout_builder/android/gradle.properties +++ b/namer/step_07_e_add_layout_builder/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/namer/step_07_e_add_layout_builder/android/gradle/wrapper/gradle-wrapper.properties b/namer/step_07_e_add_layout_builder/android/gradle/wrapper/gradle-wrapper.properties index 7bb2df6ba6..afa1e8eb0a 100644 --- a/namer/step_07_e_add_layout_builder/android/gradle/wrapper/gradle-wrapper.properties +++ b/namer/step_07_e_add_layout_builder/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip diff --git a/namer/step_07_e_add_layout_builder/android/settings.gradle b/namer/step_07_e_add_layout_builder/android/settings.gradle deleted file mode 100644 index b9e43bd376..0000000000 --- a/namer/step_07_e_add_layout_builder/android/settings.gradle +++ /dev/null @@ -1,25 +0,0 @@ -pluginManagement { - def flutterSdkPath = { - def properties = new Properties() - file("local.properties").withInputStream { properties.load(it) } - def flutterSdkPath = properties.getProperty("flutter.sdk") - assert flutterSdkPath != null, "flutter.sdk not set in local.properties" - return flutterSdkPath - }() - - includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") - - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} - -plugins { - id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.1.0" apply false - id "org.jetbrains.kotlin.android" version "1.8.22" apply false -} - -include ":app" diff --git a/namer/step_07_e_add_layout_builder/android/settings.gradle.kts b/namer/step_07_e_add_layout_builder/android/settings.gradle.kts new file mode 100644 index 0000000000..a439442c20 --- /dev/null +++ b/namer/step_07_e_add_layout_builder/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.0" apply false + id("org.jetbrains.kotlin.android") version "1.8.22" apply false +} + +include(":app") diff --git a/namer/step_08/android/app/build.gradle b/namer/step_08/android/app/build.gradle deleted file mode 100644 index 5537b83860..0000000000 --- a/namer/step_08/android/app/build.gradle +++ /dev/null @@ -1,44 +0,0 @@ -plugins { - id "com.android.application" - id "kotlin-android" - // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. - id "dev.flutter.flutter-gradle-plugin" -} - -android { - namespace = "com.example.namer_app" - compileSdk = flutter.compileSdkVersion - ndkVersion = flutter.ndkVersion - - compileOptions { - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 - } - - kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8 - } - - defaultConfig { - // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). - applicationId = "com.example.namer_app" - // You can update the following values to match your application needs. - // For more information, see: https://flutter.dev/to/review-gradle-config. - minSdk = flutter.minSdkVersion - targetSdk = flutter.targetSdkVersion - versionCode = flutter.versionCode - versionName = flutter.versionName - } - - buildTypes { - release { - // TODO: Add your own signing config for the release build. - // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig = signingConfigs.debug - } - } -} - -flutter { - source = "../.." -} diff --git a/namer/step_08/android/app/build.gradle.kts b/namer/step_08/android/app/build.gradle.kts new file mode 100644 index 0000000000..63a84eeb5c --- /dev/null +++ b/namer/step_08/android/app/build.gradle.kts @@ -0,0 +1,44 @@ +plugins { + id("com.android.application") + id("kotlin-android") + // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. + id("dev.flutter.flutter-gradle-plugin") +} + +android { + namespace = "com.example.namer_app" + compileSdk = flutter.compileSdkVersion + ndkVersion = flutter.ndkVersion + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 + } + + kotlinOptions { + jvmTarget = JavaVersion.VERSION_1_8.toString() + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId = "com.example.namer_app" + // You can update the following values to match your application needs. + // For more information, see: https://flutter.dev/to/review-gradle-config. + minSdk = flutter.minSdkVersion + targetSdk = flutter.targetSdkVersion + versionCode = flutter.versionCode + versionName = flutter.versionName + } + + buildTypes { + release { + // TODO: Add your own signing config for the release build. + // Signing with the debug keys for now, so `flutter run --release` works. + signingConfig = signingConfigs.getByName("debug") + } + } +} + +flutter { + source = "../.." +} diff --git a/namer/step_08/android/build.gradle b/namer/step_08/android/build.gradle deleted file mode 100644 index d2ffbffa4c..0000000000 --- a/namer/step_08/android/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = "../build" -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(":app") -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/namer/step_08/android/build.gradle.kts b/namer/step_08/android/build.gradle.kts new file mode 100644 index 0000000000..89176ef44e --- /dev/null +++ b/namer/step_08/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/namer/step_08/android/gradle.properties b/namer/step_08/android/gradle.properties index 2597170821..f018a61817 100644 --- a/namer/step_08/android/gradle.properties +++ b/namer/step_08/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/namer/step_08/android/gradle/wrapper/gradle-wrapper.properties b/namer/step_08/android/gradle/wrapper/gradle-wrapper.properties index 7bb2df6ba6..afa1e8eb0a 100644 --- a/namer/step_08/android/gradle/wrapper/gradle-wrapper.properties +++ b/namer/step_08/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip diff --git a/namer/step_08/android/settings.gradle b/namer/step_08/android/settings.gradle deleted file mode 100644 index b9e43bd376..0000000000 --- a/namer/step_08/android/settings.gradle +++ /dev/null @@ -1,25 +0,0 @@ -pluginManagement { - def flutterSdkPath = { - def properties = new Properties() - file("local.properties").withInputStream { properties.load(it) } - def flutterSdkPath = properties.getProperty("flutter.sdk") - assert flutterSdkPath != null, "flutter.sdk not set in local.properties" - return flutterSdkPath - }() - - includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") - - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} - -plugins { - id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.1.0" apply false - id "org.jetbrains.kotlin.android" version "1.8.22" apply false -} - -include ":app" diff --git a/namer/step_08/android/settings.gradle.kts b/namer/step_08/android/settings.gradle.kts new file mode 100644 index 0000000000..a439442c20 --- /dev/null +++ b/namer/step_08/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.0" apply false + id("org.jetbrains.kotlin.android") version "1.8.22" apply false +} + +include(":app") From 0bbc246cd1379ece8a057368366f9a4dd7a8b7b9 Mon Sep 17 00:00:00 2001 From: Brett Morgan Date: Tue, 19 Nov 2024 07:52:48 +1100 Subject: [PATCH 084/108] Update `next-gen-ui` --- next-gen-ui/codelab_rebuild.yaml | 712 ++++++++++-------- .../app/{build.gradle => build.gradle.kts} | 10 +- next-gen-ui/step_01/android/build.gradle | 18 - next-gen-ui/step_01/android/build.gradle.kts | 21 + next-gen-ui/step_01/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- next-gen-ui/step_01/android/settings.gradle | 25 - .../step_01/android/settings.gradle.kts | 25 + next-gen-ui/step_01/ios/Podfile | 1 - .../ios/Runner.xcodeproj/project.pbxproj | 116 +-- next-gen-ui/step_01/macos/Podfile | 1 - .../macos/Runner.xcodeproj/project.pbxproj | 122 +-- .../android/app/build.gradle.kts} | 10 +- next-gen-ui/step_02_a/android/build.gradle | 18 - .../step_02_a/android/build.gradle.kts | 21 + .../step_02_a/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- next-gen-ui/step_02_a/android/settings.gradle | 25 - .../step_02_a/android/settings.gradle.kts | 25 + next-gen-ui/step_02_a/ios/Podfile | 1 - .../ios/Runner.xcodeproj/project.pbxproj | 116 +-- next-gen-ui/step_02_a/macos/Podfile | 1 - .../macos/Runner.xcodeproj/project.pbxproj | 122 +-- .../android/app/build.gradle.kts} | 10 +- next-gen-ui/step_02_b/android/build.gradle | 18 - .../step_02_b/android/build.gradle.kts | 21 + .../step_02_b/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- next-gen-ui/step_02_b/android/settings.gradle | 25 - .../step_02_b/android/settings.gradle.kts | 25 + next-gen-ui/step_02_b/ios/Podfile | 1 - .../ios/Runner.xcodeproj/project.pbxproj | 116 +-- next-gen-ui/step_02_b/macos/Podfile | 1 - .../macos/Runner.xcodeproj/project.pbxproj | 122 +-- .../android/app/build.gradle.kts} | 10 +- next-gen-ui/step_02_c/android/build.gradle | 18 - .../step_02_c/android/build.gradle.kts | 21 + .../step_02_c/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- next-gen-ui/step_02_c/android/settings.gradle | 25 - .../step_02_c/android/settings.gradle.kts | 25 + next-gen-ui/step_02_c/ios/Podfile | 1 - .../ios/Runner.xcodeproj/project.pbxproj | 116 +-- next-gen-ui/step_02_c/macos/Podfile | 1 - .../macos/Runner.xcodeproj/project.pbxproj | 122 +-- .../step_03_a/android/app/build.gradle | 44 -- .../step_03_a/android/app/build.gradle.kts | 44 ++ next-gen-ui/step_03_a/android/build.gradle | 18 - .../step_03_a/android/build.gradle.kts | 21 + .../step_03_a/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- next-gen-ui/step_03_a/android/settings.gradle | 25 - .../step_03_a/android/settings.gradle.kts | 25 + next-gen-ui/step_03_a/ios/Podfile | 1 - .../ios/Runner.xcodeproj/project.pbxproj | 116 +-- next-gen-ui/step_03_a/macos/Podfile | 1 - .../macos/Runner.xcodeproj/project.pbxproj | 122 +-- .../step_03_b/android/app/build.gradle | 44 -- .../step_03_b/android/app/build.gradle.kts | 44 ++ next-gen-ui/step_03_b/android/build.gradle | 18 - .../step_03_b/android/build.gradle.kts | 21 + .../step_03_b/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- next-gen-ui/step_03_b/android/settings.gradle | 25 - .../step_03_b/android/settings.gradle.kts | 25 + next-gen-ui/step_03_b/ios/Podfile | 1 - .../ios/Runner.xcodeproj/project.pbxproj | 116 +-- next-gen-ui/step_03_b/macos/Podfile | 1 - .../macos/Runner.xcodeproj/project.pbxproj | 122 +-- .../step_03_c/android/app/build.gradle | 44 -- .../step_03_c/android/app/build.gradle.kts | 44 ++ next-gen-ui/step_03_c/android/build.gradle | 18 - .../step_03_c/android/build.gradle.kts | 21 + .../step_03_c/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- next-gen-ui/step_03_c/android/settings.gradle | 25 - .../step_03_c/android/settings.gradle.kts | 25 + next-gen-ui/step_03_c/ios/Podfile | 1 - .../ios/Runner.xcodeproj/project.pbxproj | 116 +-- next-gen-ui/step_03_c/macos/Podfile | 1 - .../macos/Runner.xcodeproj/project.pbxproj | 122 +-- .../step_04_a/android/app/build.gradle | 44 -- .../step_04_a/android/app/build.gradle.kts | 44 ++ next-gen-ui/step_04_a/android/build.gradle | 18 - .../step_04_a/android/build.gradle.kts | 21 + .../step_04_a/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- next-gen-ui/step_04_a/android/settings.gradle | 25 - .../step_04_a/android/settings.gradle.kts | 25 + next-gen-ui/step_04_a/ios/Podfile | 1 - .../ios/Runner.xcodeproj/project.pbxproj | 116 +-- next-gen-ui/step_04_a/macos/Podfile | 1 - .../macos/Runner.xcodeproj/project.pbxproj | 122 +-- .../step_04_b/android/app/build.gradle | 44 -- .../step_04_b/android/app/build.gradle.kts | 44 ++ next-gen-ui/step_04_b/android/build.gradle | 18 - .../step_04_b/android/build.gradle.kts | 21 + .../step_04_b/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- next-gen-ui/step_04_b/android/settings.gradle | 25 - .../step_04_b/android/settings.gradle.kts | 25 + next-gen-ui/step_04_b/ios/Podfile | 1 - .../ios/Runner.xcodeproj/project.pbxproj | 116 +-- next-gen-ui/step_04_b/macos/Podfile | 1 - .../macos/Runner.xcodeproj/project.pbxproj | 122 +-- .../step_04_c/android/app/build.gradle | 44 -- .../step_04_c/android/app/build.gradle.kts | 44 ++ next-gen-ui/step_04_c/android/build.gradle | 18 - .../step_04_c/android/build.gradle.kts | 21 + .../step_04_c/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- next-gen-ui/step_04_c/android/settings.gradle | 25 - .../step_04_c/android/settings.gradle.kts | 25 + next-gen-ui/step_04_c/ios/Podfile | 1 - .../ios/Runner.xcodeproj/project.pbxproj | 116 +-- next-gen-ui/step_04_c/macos/Podfile | 1 - .../macos/Runner.xcodeproj/project.pbxproj | 122 +-- .../step_04_d/android/app/build.gradle | 44 -- .../step_04_d/android/app/build.gradle.kts | 44 ++ next-gen-ui/step_04_d/android/build.gradle | 18 - .../step_04_d/android/build.gradle.kts | 21 + .../step_04_d/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- next-gen-ui/step_04_d/android/settings.gradle | 25 - .../step_04_d/android/settings.gradle.kts | 25 + next-gen-ui/step_04_d/ios/Podfile | 1 - .../ios/Runner.xcodeproj/project.pbxproj | 116 +-- next-gen-ui/step_04_d/macos/Podfile | 1 - .../macos/Runner.xcodeproj/project.pbxproj | 122 +-- .../step_04_e/android/app/build.gradle | 44 -- .../step_04_e/android/app/build.gradle.kts | 44 ++ next-gen-ui/step_04_e/android/build.gradle | 18 - .../step_04_e/android/build.gradle.kts | 21 + .../step_04_e/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- next-gen-ui/step_04_e/android/settings.gradle | 25 - .../step_04_e/android/settings.gradle.kts | 25 + next-gen-ui/step_04_e/ios/Podfile | 1 - .../ios/Runner.xcodeproj/project.pbxproj | 116 +-- next-gen-ui/step_04_e/macos/Podfile | 1 - .../macos/Runner.xcodeproj/project.pbxproj | 122 +-- .../step_05_a/android/app/build.gradle | 44 -- .../step_05_a/android/app/build.gradle.kts | 44 ++ next-gen-ui/step_05_a/android/build.gradle | 18 - .../step_05_a/android/build.gradle.kts | 21 + .../step_05_a/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- next-gen-ui/step_05_a/android/settings.gradle | 25 - .../step_05_a/android/settings.gradle.kts | 25 + next-gen-ui/step_05_a/ios/Podfile | 1 - .../ios/Runner.xcodeproj/project.pbxproj | 116 +-- next-gen-ui/step_05_a/macos/Podfile | 1 - .../macos/Runner.xcodeproj/project.pbxproj | 122 +-- .../step_05_b/android/app/build.gradle | 44 -- .../step_05_b/android/app/build.gradle.kts | 44 ++ next-gen-ui/step_05_b/android/build.gradle | 18 - .../step_05_b/android/build.gradle.kts | 21 + .../step_05_b/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- next-gen-ui/step_05_b/android/settings.gradle | 25 - .../step_05_b/android/settings.gradle.kts | 25 + next-gen-ui/step_05_b/ios/Podfile | 1 - .../ios/Runner.xcodeproj/project.pbxproj | 116 +-- next-gen-ui/step_05_b/macos/Podfile | 1 - .../macos/Runner.xcodeproj/project.pbxproj | 122 +-- next-gen-ui/step_06/android/app/build.gradle | 44 -- .../step_06/android/app/build.gradle.kts | 44 ++ next-gen-ui/step_06/android/build.gradle | 18 - next-gen-ui/step_06/android/build.gradle.kts | 21 + next-gen-ui/step_06/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- next-gen-ui/step_06/android/settings.gradle | 25 - .../step_06/android/settings.gradle.kts | 25 + next-gen-ui/step_06/ios/Podfile | 1 - .../ios/Runner.xcodeproj/project.pbxproj | 116 +-- next-gen-ui/step_06/macos/Podfile | 1 - .../macos/Runner.xcodeproj/project.pbxproj | 122 +-- 177 files changed, 3403 insertions(+), 3312 deletions(-) rename next-gen-ui/step_01/android/app/{build.gradle => build.gradle.kts} (84%) delete mode 100644 next-gen-ui/step_01/android/build.gradle create mode 100644 next-gen-ui/step_01/android/build.gradle.kts delete mode 100644 next-gen-ui/step_01/android/settings.gradle create mode 100644 next-gen-ui/step_01/android/settings.gradle.kts rename next-gen-ui/{step_02_b/android/app/build.gradle => step_02_a/android/app/build.gradle.kts} (84%) delete mode 100644 next-gen-ui/step_02_a/android/build.gradle create mode 100644 next-gen-ui/step_02_a/android/build.gradle.kts delete mode 100644 next-gen-ui/step_02_a/android/settings.gradle create mode 100644 next-gen-ui/step_02_a/android/settings.gradle.kts rename next-gen-ui/{step_02_c/android/app/build.gradle => step_02_b/android/app/build.gradle.kts} (84%) delete mode 100644 next-gen-ui/step_02_b/android/build.gradle create mode 100644 next-gen-ui/step_02_b/android/build.gradle.kts delete mode 100644 next-gen-ui/step_02_b/android/settings.gradle create mode 100644 next-gen-ui/step_02_b/android/settings.gradle.kts rename next-gen-ui/{step_02_a/android/app/build.gradle => step_02_c/android/app/build.gradle.kts} (84%) delete mode 100644 next-gen-ui/step_02_c/android/build.gradle create mode 100644 next-gen-ui/step_02_c/android/build.gradle.kts delete mode 100644 next-gen-ui/step_02_c/android/settings.gradle create mode 100644 next-gen-ui/step_02_c/android/settings.gradle.kts delete mode 100644 next-gen-ui/step_03_a/android/app/build.gradle create mode 100644 next-gen-ui/step_03_a/android/app/build.gradle.kts delete mode 100644 next-gen-ui/step_03_a/android/build.gradle create mode 100644 next-gen-ui/step_03_a/android/build.gradle.kts delete mode 100644 next-gen-ui/step_03_a/android/settings.gradle create mode 100644 next-gen-ui/step_03_a/android/settings.gradle.kts delete mode 100644 next-gen-ui/step_03_b/android/app/build.gradle create mode 100644 next-gen-ui/step_03_b/android/app/build.gradle.kts delete mode 100644 next-gen-ui/step_03_b/android/build.gradle create mode 100644 next-gen-ui/step_03_b/android/build.gradle.kts delete mode 100644 next-gen-ui/step_03_b/android/settings.gradle create mode 100644 next-gen-ui/step_03_b/android/settings.gradle.kts delete mode 100644 next-gen-ui/step_03_c/android/app/build.gradle create mode 100644 next-gen-ui/step_03_c/android/app/build.gradle.kts delete mode 100644 next-gen-ui/step_03_c/android/build.gradle create mode 100644 next-gen-ui/step_03_c/android/build.gradle.kts delete mode 100644 next-gen-ui/step_03_c/android/settings.gradle create mode 100644 next-gen-ui/step_03_c/android/settings.gradle.kts delete mode 100644 next-gen-ui/step_04_a/android/app/build.gradle create mode 100644 next-gen-ui/step_04_a/android/app/build.gradle.kts delete mode 100644 next-gen-ui/step_04_a/android/build.gradle create mode 100644 next-gen-ui/step_04_a/android/build.gradle.kts delete mode 100644 next-gen-ui/step_04_a/android/settings.gradle create mode 100644 next-gen-ui/step_04_a/android/settings.gradle.kts delete mode 100644 next-gen-ui/step_04_b/android/app/build.gradle create mode 100644 next-gen-ui/step_04_b/android/app/build.gradle.kts delete mode 100644 next-gen-ui/step_04_b/android/build.gradle create mode 100644 next-gen-ui/step_04_b/android/build.gradle.kts delete mode 100644 next-gen-ui/step_04_b/android/settings.gradle create mode 100644 next-gen-ui/step_04_b/android/settings.gradle.kts delete mode 100644 next-gen-ui/step_04_c/android/app/build.gradle create mode 100644 next-gen-ui/step_04_c/android/app/build.gradle.kts delete mode 100644 next-gen-ui/step_04_c/android/build.gradle create mode 100644 next-gen-ui/step_04_c/android/build.gradle.kts delete mode 100644 next-gen-ui/step_04_c/android/settings.gradle create mode 100644 next-gen-ui/step_04_c/android/settings.gradle.kts delete mode 100644 next-gen-ui/step_04_d/android/app/build.gradle create mode 100644 next-gen-ui/step_04_d/android/app/build.gradle.kts delete mode 100644 next-gen-ui/step_04_d/android/build.gradle create mode 100644 next-gen-ui/step_04_d/android/build.gradle.kts delete mode 100644 next-gen-ui/step_04_d/android/settings.gradle create mode 100644 next-gen-ui/step_04_d/android/settings.gradle.kts delete mode 100644 next-gen-ui/step_04_e/android/app/build.gradle create mode 100644 next-gen-ui/step_04_e/android/app/build.gradle.kts delete mode 100644 next-gen-ui/step_04_e/android/build.gradle create mode 100644 next-gen-ui/step_04_e/android/build.gradle.kts delete mode 100644 next-gen-ui/step_04_e/android/settings.gradle create mode 100644 next-gen-ui/step_04_e/android/settings.gradle.kts delete mode 100644 next-gen-ui/step_05_a/android/app/build.gradle create mode 100644 next-gen-ui/step_05_a/android/app/build.gradle.kts delete mode 100644 next-gen-ui/step_05_a/android/build.gradle create mode 100644 next-gen-ui/step_05_a/android/build.gradle.kts delete mode 100644 next-gen-ui/step_05_a/android/settings.gradle create mode 100644 next-gen-ui/step_05_a/android/settings.gradle.kts delete mode 100644 next-gen-ui/step_05_b/android/app/build.gradle create mode 100644 next-gen-ui/step_05_b/android/app/build.gradle.kts delete mode 100644 next-gen-ui/step_05_b/android/build.gradle create mode 100644 next-gen-ui/step_05_b/android/build.gradle.kts delete mode 100644 next-gen-ui/step_05_b/android/settings.gradle create mode 100644 next-gen-ui/step_05_b/android/settings.gradle.kts delete mode 100644 next-gen-ui/step_06/android/app/build.gradle create mode 100644 next-gen-ui/step_06/android/app/build.gradle.kts delete mode 100644 next-gen-ui/step_06/android/build.gradle create mode 100644 next-gen-ui/step_06/android/build.gradle.kts delete mode 100644 next-gen-ui/step_06/android/settings.gradle create mode 100644 next-gen-ui/step_06/android/settings.gradle.kts diff --git a/next-gen-ui/codelab_rebuild.yaml b/next-gen-ui/codelab_rebuild.yaml index d085a11a71..e0b0a5293d 100644 --- a/next-gen-ui/codelab_rebuild.yaml +++ b/next-gen-ui/codelab_rebuild.yaml @@ -697,13 +697,13 @@ steps: // Copyright 2023 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. - + import 'dart:ui'; - + class AssetPaths { /// Images static const String _images = 'assets/images'; - + static const String titleBgBase = '$_images/bg-base.jpg'; static const String titleBgReceive = '$_images/bg-light-receive.png'; static const String titleFgEmit = '$_images/fg-light-emit.png'; @@ -718,20 +718,20 @@ steps: static const String titleSelectedLeft = '$_images/select-left.png'; static const String titleSelectedRight = '$_images/select-right.png'; static const String pulseParticle = '$_images/particle3.png'; - + /// Shaders static const String _shaders = 'assets/shaders'; static const String orbShader = '$_shaders/orb_shader.frag'; static const String uiShader = '$_shaders/ui_glitch.frag'; } - + typedef FragmentPrograms = ({FragmentProgram orb, FragmentProgram ui}); - + Future loadFragmentPrograms() async => ( - orb: (await _loadFragmentProgram(AssetPaths.orbShader)), - ui: (await _loadFragmentProgram(AssetPaths.uiShader)), - ); - + orb: (await _loadFragmentProgram(AssetPaths.orbShader)), + ui: (await _loadFragmentProgram(AssetPaths.uiShader)), + ); + Future _loadFragmentProgram(String path) async { return (await FragmentProgram.fromAsset(path)); } @@ -741,32 +741,35 @@ steps: // Copyright 2023 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. - + import 'package:flutter/material.dart'; - + class TextStyles { static const _font1 = TextStyle(fontFamily: 'Exo', color: Colors.white); - + static TextStyle get h1 => _font1.copyWith( - fontSize: 75, letterSpacing: 35, fontWeight: FontWeight.w700); + fontSize: 75, + letterSpacing: 35, + fontWeight: FontWeight.w700, + ); static TextStyle get h2 => h1.copyWith(fontSize: 40, letterSpacing: 0); static TextStyle get h3 => h1.copyWith(fontSize: 24, letterSpacing: 20, fontWeight: FontWeight.w400); static TextStyle get body => _font1.copyWith(fontSize: 16); static TextStyle get btn => _font1.copyWith( - fontSize: 16, - fontWeight: FontWeight.bold, - letterSpacing: 10, - ); + fontSize: 16, + fontWeight: FontWeight.bold, + letterSpacing: 10, + ); } - + abstract class AppColors { static const orbColors = [ Color(0xFF71FDBF), Color(0xFFCE33FF), Color(0xFFFF5033), ]; - + static const emitColors = [ Color(0xFF96FF33), Color(0xFF00FFFF), @@ -782,24 +785,21 @@ steps: // Copyright 2023 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. - + import 'package:flutter/material.dart'; - + import 'ticking_builder.dart'; - - typedef ReactiveWidgetBuilder = Widget Function( - BuildContext context, double time, Size bounds); - + + typedef ReactiveWidgetBuilder = + Widget Function(BuildContext context, double time, Size bounds); + class ReactiveWidget extends StatefulWidget { - const ReactiveWidget({ - super.key, - required this.builder, - }); + const ReactiveWidget({super.key, required this.builder}); final ReactiveWidgetBuilder builder; @override State createState() => _ReactiveWidgetState(); } - + class _ReactiveWidgetState extends State { @override Widget build(BuildContext context) { @@ -820,13 +820,13 @@ steps: // Copyright 2023 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. - + import 'dart:ui' as ui; - + import 'package:flutter/rendering.dart'; import 'package:flutter/widgets.dart'; import 'package:flutter_animate/flutter_animate.dart'; - + /** * This is an unfinished, pre-release effect for Flutter Animate: * https://pub.dev/packages/flutter_animate @@ -838,9 +838,9 @@ steps: * SDK, this effect will be updated, tested, refined, and added to the * effects.dart file. */ - + // TODO: document. - + /// An effect that lets you apply an animated fragment shader to a target. @immutable class ShaderEffect extends Effect { @@ -851,16 +851,13 @@ steps: this.shader, this.update, ShaderLayer? layer, - }) : layer = layer ?? ShaderLayer.replace, - super( - begin: 0, - end: 1, - ); - + }) : layer = layer ?? ShaderLayer.replace, + super(begin: 0, end: 1); + final ui.FragmentShader? shader; final ShaderUpdateCallback? update; final ShaderLayer layer; - + @override Widget build( BuildContext context, @@ -881,14 +878,14 @@ steps: } Rect rect = Rect.fromLTWH(0, 0, size.width, size.height); rect = insets?.inflateRect(rect) ?? rect; - + void drawImage() { canvas.save(); canvas.scale(ratio, ratio); canvas.drawImage(image, Offset.zero, Paint()); canvas.restore(); } - + if (layer == ShaderLayer.foreground) drawImage(); if (shader != null) canvas.drawRect(rect, Paint()..shader = shader); if (layer == ShaderLayer.background) drawImage(); @@ -900,7 +897,7 @@ steps: ); } } - + extension ShaderEffectExtensions on AnimateManager { /// Adds a [shader] extension to [AnimateManager] ([Animate] and [AnimateList]). T shader({ @@ -910,38 +907,41 @@ steps: ui.FragmentShader? shader, ShaderUpdateCallback? update, ShaderLayer? layer, - }) => - addEffect(ShaderEffect( - delay: delay, - duration: duration, - curve: curve, - shader: shader, - update: update, - layer: layer, - )); + }) => addEffect( + ShaderEffect( + delay: delay, + duration: duration, + curve: curve, + shader: shader, + update: update, + layer: layer, + ), + ); } - + enum ShaderLayer { foreground, background, replace } - + /// Function signature for [ShaderEffect] update handlers. - typedef ShaderUpdateCallback = EdgeInsets? Function( - ui.FragmentShader shader, double value, Size size, ui.Image image); - + typedef ShaderUpdateCallback = + EdgeInsets? Function( + ui.FragmentShader shader, + double value, + Size size, + ui.Image image, + ); + /******************************************************************************/ // TODO: add this as a dependency instead of copying it in once it is stable: // https://github.com/jonahwilliams/flutter_shaders - + // Copyright 2013 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. - + /// A callback for the [AnimatedSamplerBuilder] widget. - typedef AnimatedSamplerBuilder = void Function( - ui.Image image, - Size size, - ui.Canvas canvas, - ); - + typedef AnimatedSamplerBuilder = + void Function(ui.Image image, Size size, ui.Canvas canvas); + /// A widget that allows access to a snapshot of the child widgets for painting /// with a sampler applied to a [FragmentProgram]. /// @@ -986,38 +986,34 @@ steps: super.key, this.enabled = true, }); - + /// A callback used by this widget to provide the children captured in /// a texture. final AnimatedSamplerBuilder builder; - + /// Whether the children should be captured in a texture or displayed as /// normal. final bool enabled; - + /// The child widget. final Widget child; - + @override Widget build(BuildContext context) { - return _ShaderSamplerBuilder( - builder, - enabled: enabled, - child: child, - ); + return _ShaderSamplerBuilder(builder, enabled: enabled, child: child); } } - + class _ShaderSamplerBuilder extends SingleChildRenderObjectWidget { const _ShaderSamplerBuilder( this.builder, { super.child, required this.enabled, }); - + final AnimatedSamplerBuilder builder; final bool enabled; - + @override RenderObject createRenderObject(BuildContext context) { return _RenderShaderSamplerBuilderWidget( @@ -1026,17 +1022,19 @@ steps: enabled: enabled, ); } - + @override void updateRenderObject( - BuildContext context, covariant RenderObject renderObject) { + BuildContext context, + covariant RenderObject renderObject, + ) { (renderObject as _RenderShaderSamplerBuilderWidget) ..devicePixelRatio = MediaQuery.of(context).devicePixelRatio ..builder = builder ..enabled = enabled; } } - + // A render object that conditionally converts its child into a [ui.Image] // and then paints it in place of the child. class _RenderShaderSamplerBuilderWidget extends RenderProxyBox { @@ -1045,13 +1043,14 @@ steps: required double devicePixelRatio, required AnimatedSamplerBuilder builder, required bool enabled, - }) : _devicePixelRatio = devicePixelRatio, - _builder = builder, - _enabled = enabled; - + }) : _devicePixelRatio = devicePixelRatio, + _builder = builder, + _enabled = enabled; + @override - OffsetLayer updateCompositedLayer( - {required covariant _ShaderSamplerBuilderLayer? oldLayer}) { + OffsetLayer updateCompositedLayer({ + required covariant _ShaderSamplerBuilderLayer? oldLayer, + }) { final _ShaderSamplerBuilderLayer layer = oldLayer ?? _ShaderSamplerBuilderLayer(builder); layer @@ -1060,7 +1059,7 @@ steps: ..devicePixelRatio = devicePixelRatio; return layer; } - + /// The device pixel ratio used to create the child image. double get devicePixelRatio => _devicePixelRatio; double _devicePixelRatio; @@ -1071,7 +1070,7 @@ steps: _devicePixelRatio = value; markNeedsCompositedLayerUpdate(); } - + /// The painter used to paint the child snapshot or child widgets. AnimatedSamplerBuilder get builder => _builder; AnimatedSamplerBuilder _builder; @@ -1082,7 +1081,7 @@ steps: _builder = value; markNeedsCompositedLayerUpdate(); } - + bool get enabled => _enabled; bool _enabled; set enabled(bool value) { @@ -1093,13 +1092,13 @@ steps: markNeedsPaint(); markNeedsCompositingBitsUpdate(); } - + @override bool get isRepaintBoundary => alwaysNeedsCompositing; - + @override bool get alwaysNeedsCompositing => enabled; - + @override void paint(PaintingContext context, Offset offset) { if (size.isEmpty || !_enabled) { @@ -1109,12 +1108,12 @@ steps: return super.paint(context, offset); } } - + /// A [Layer] that uses an [AnimatedSamplerBuilder] to create a [ui.Picture] /// every time it is added to a scene. class _ShaderSamplerBuilderLayer extends OffsetLayer { _ShaderSamplerBuilderLayer(this._callback); - + Size get size => _size; Size _size = Size.zero; set size(Size value) { @@ -1124,7 +1123,7 @@ steps: _size = value; markNeedsAddToScene(); } - + double get devicePixelRatio => _devicePixelRatio; double _devicePixelRatio = 1.0; set devicePixelRatio(double value) { @@ -1134,7 +1133,7 @@ steps: _devicePixelRatio = value; markNeedsAddToScene(); } - + AnimatedSamplerBuilder get callback => _callback; AnimatedSamplerBuilder _callback; set callback(AnimatedSamplerBuilder value) { @@ -1144,27 +1143,27 @@ steps: _callback = value; markNeedsAddToScene(); } - + ui.Image _buildChildScene(Rect bounds, double pixelRatio) { final ui.SceneBuilder builder = ui.SceneBuilder(); - final Matrix4 transform = - Matrix4.diagonal3Values(pixelRatio, pixelRatio, 1); + final Matrix4 transform = Matrix4.diagonal3Values( + pixelRatio, + pixelRatio, + 1, + ); builder.pushTransform(transform.storage); addChildrenToScene(builder); builder.pop(); return builder.build().toImageSync( - (pixelRatio * bounds.width).ceil(), - (pixelRatio * bounds.height).ceil(), - ); + (pixelRatio * bounds.width).ceil(), + (pixelRatio * bounds.height).ceil(), + ); } - + @override void addToScene(ui.SceneBuilder builder) { if (size.isEmpty) return; - final ui.Image image = _buildChildScene( - offset & size, - devicePixelRatio, - ); + final ui.Image image = _buildChildScene(offset & size, devicePixelRatio); final ui.PictureRecorder pictureRecorder = ui.PictureRecorder(); final Canvas canvas = Canvas(pictureRecorder); try { @@ -1254,11 +1253,11 @@ steps: // Copyright 2023 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. - + import 'dart:math'; - + import 'package:flutter/material.dart'; - + class UiScaler extends StatelessWidget { const UiScaler({ super.key, @@ -1266,20 +1265,16 @@ steps: required this.alignment, this.referenceHeight = 1080, }); - + final int referenceHeight; final Widget child; final Alignment alignment; - + @override Widget build(BuildContext context) { final screenSize = MediaQuery.of(context).size; final double scale = min(screenSize.height / referenceHeight, 1.0); - return Transform.scale( - scale: scale, - alignment: alignment, - child: child, - ); + return Transform.scale(scale: scale, alignment: alignment, child: child); } } - name: mkdir lib/orb_shader @@ -1312,14 +1307,14 @@ steps: this.lightOffsetX = 0, this.lightOffsetY = 0.1, this.lightOffsetZ = -0.66, - }) : assert(zoom >= 0 && zoom <= 1), - assert(exposure >= 0), - assert(metalness >= 0 && metalness <= 1), - assert(lightRadius >= 0), - assert(lightBrightness >= 1), - assert(ior >= 0 && ior <= 2), - assert(lightAttenuation >= 0 && lightAttenuation <= 1), - assert(ambientLightBrightness >= 0); + }) : assert(zoom >= 0 && zoom <= 1), + assert(exposure >= 0), + assert(metalness >= 0 && metalness <= 1), + assert(lightRadius >= 0), + assert(lightBrightness >= 1), + assert(ior >= 0 && ior <= 2), + assert(lightAttenuation >= 0 && lightAttenuation <= 1), + assert(ambientLightBrightness >= 0); final double zoom; @@ -1454,11 +1449,13 @@ steps: v64.Vector3 colorToVector3(Color c) => v64.Vector3(c.r, c.g, c.b); - v64.Vector3 lightLumP = colorToVector3(config.lightColor).normalized() * + v64.Vector3 lightLumP = + colorToVector3(config.lightColor).normalized() * max(0.0, config.lightBrightness); v64.Vector3 albedo = colorToVector3(config.materialColor); - v64.Vector3 ambientLight = colorToVector3(config.ambientLightColor) * + v64.Vector3 ambientLight = + colorToVector3(config.ambientLightColor) * max(0.0, config.ambientLightBrightness); shader.setFloat(0, size.width); @@ -1507,20 +1504,20 @@ steps: // Copyright 2023 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. - + import 'dart:async'; import 'dart:math'; import 'dart:ui'; - + import 'package:flutter/material.dart'; import 'package:flutter_animate/flutter_animate.dart'; import 'package:provider/provider.dart'; - + import '../assets.dart'; import '../common/reactive_widget.dart'; import 'orb_shader_config.dart'; import 'orb_shader_painter.dart'; - + class OrbShaderWidget extends StatefulWidget { const OrbShaderWidget({ super.key, @@ -1529,84 +1526,94 @@ steps: required this.mousePos, required this.minEnergy, }); - + final double minEnergy; final OrbShaderConfig config; final Offset mousePos; final void Function(double energy)? onUpdate; - + @override State createState() => OrbShaderWidgetState(); } - + class OrbShaderWidgetState extends State with SingleTickerProviderStateMixin { - final _heartbeatSequence = TweenSequence( - [ - TweenSequenceItem(tween: ConstantTween(0), weight: 40), - TweenSequenceItem( - tween: Tween(begin: 0.0, end: 1.0) - .chain(CurveTween(curve: Curves.easeInOutCubic)), - weight: 8), - TweenSequenceItem( - tween: Tween(begin: 1.0, end: 0.2) - .chain(CurveTween(curve: Curves.easeInOutCubic)), - weight: 12), - TweenSequenceItem( - tween: Tween(begin: 0.2, end: 0.8) - .chain(CurveTween(curve: Curves.easeInOutCubic)), - weight: 6), - TweenSequenceItem( - tween: Tween(begin: 0.8, end: 0.0) - .chain(CurveTween(curve: Curves.easeInOutCubic)), - weight: 10), - ], - ); - - late final _heartbeatAnim = - AnimationController(vsync: this, duration: 3000.ms)..repeat(); - + final _heartbeatSequence = TweenSequence([ + TweenSequenceItem(tween: ConstantTween(0), weight: 40), + TweenSequenceItem( + tween: Tween( + begin: 0.0, + end: 1.0, + ).chain(CurveTween(curve: Curves.easeInOutCubic)), + weight: 8, + ), + TweenSequenceItem( + tween: Tween( + begin: 1.0, + end: 0.2, + ).chain(CurveTween(curve: Curves.easeInOutCubic)), + weight: 12, + ), + TweenSequenceItem( + tween: Tween( + begin: 0.2, + end: 0.8, + ).chain(CurveTween(curve: Curves.easeInOutCubic)), + weight: 6, + ), + TweenSequenceItem( + tween: Tween( + begin: 0.8, + end: 0.0, + ).chain(CurveTween(curve: Curves.easeInOutCubic)), + weight: 10, + ), + ]); + + late final _heartbeatAnim = AnimationController( + vsync: this, + duration: 3000.ms, + )..repeat(); + @override Widget build(BuildContext context) => Consumer( - builder: (context, fragmentPrograms, _) { - if (fragmentPrograms == null) return const SizedBox.expand(); - return ListenableBuilder( - listenable: _heartbeatAnim, - builder: (_, __) { - final heartbeatEnergy = - _heartbeatAnim.drive(_heartbeatSequence).value; - return TweenAnimationBuilder( - tween: Tween( - begin: widget.minEnergy, end: widget.minEnergy), - duration: 300.ms, - curve: Curves.easeOutCubic, - builder: (context, minEnergy, child) { - return ReactiveWidget( - builder: (context, time, size) { - double energyLevel = 0; - if (size.shortestSide != 0) { - final d = (Offset(size.width, size.height) / 2 - - widget.mousePos) + builder: (context, fragmentPrograms, _) { + if (fragmentPrograms == null) return const SizedBox.expand(); + return ListenableBuilder( + listenable: _heartbeatAnim, + builder: (_, __) { + final heartbeatEnergy = + _heartbeatAnim.drive(_heartbeatSequence).value; + return TweenAnimationBuilder( + tween: Tween( + begin: widget.minEnergy, + end: widget.minEnergy, + ), + duration: 300.ms, + curve: Curves.easeOutCubic, + builder: (context, minEnergy, child) { + return ReactiveWidget( + builder: (context, time, size) { + double energyLevel = 0; + if (size.shortestSide != 0) { + final d = + (Offset(size.width, size.height) / 2 - widget.mousePos) .distance; - final hitSize = size.shortestSide * .5; - energyLevel = 1 - min(1, (d / hitSize)); - scheduleMicrotask( - () => widget.onUpdate?.call(energyLevel)); - } - energyLevel += - (1.3 - energyLevel) * heartbeatEnergy * 0.1; - energyLevel = lerpDouble(minEnergy, 1, energyLevel)!; - return CustomPaint( - size: size, - painter: OrbShaderPainter( - fragmentPrograms.orb.fragmentShader(), - config: widget.config, - time: time, - mousePos: widget.mousePos, - energy: energyLevel, - ), - ); - }, + final hitSize = size.shortestSide * .5; + energyLevel = 1 - min(1, (d / hitSize)); + scheduleMicrotask(() => widget.onUpdate?.call(energyLevel)); + } + energyLevel += (1.3 - energyLevel) * heartbeatEnergy * 0.1; + energyLevel = lerpDouble(minEnergy, 1, energyLevel)!; + return CustomPaint( + size: size, + painter: OrbShaderPainter( + fragmentPrograms.orb.fragmentShader(), + config: widget.config, + time: time, + mousePos: widget.mousePos, + energy: energyLevel, + ), ); }, ); @@ -1614,6 +1621,8 @@ steps: ); }, ); + }, + ); } - name: Replace lib/main.dart path: next_gen_ui/lib/main.dart @@ -1944,9 +1953,7 @@ steps: import '../styles.dart'; class TitleScreenUi extends StatelessWidget { - const TitleScreenUi({ - super.key, - }); + const TitleScreenUi({super.key}); @override Widget build(BuildContext context) { return const Padding( @@ -1955,10 +1962,7 @@ steps: children: [ /// Title Text TopLeft( - child: UiScaler( - alignment: Alignment.topLeft, - child: _TitleText(), - ), + child: UiScaler(alignment: Alignment.topLeft, child: _TitleText()), ), ], ), @@ -2006,15 +2010,13 @@ steps: class TitleScreen extends StatelessWidget { const TitleScreen({super.key}); - @@ -70,6 +71,11 @@ class TitleScreen extends StatelessWidget { + @@ -70,6 +71,9 @@ class TitleScreen extends StatelessWidget { color: emitColor, lightAmt: _finalEmitLightAmt, ), + + /// UI - + const Positioned.fill( - + child: TitleScreenUi(), - + ), + + const Positioned.fill(child: TitleScreenUi()), ], ), ), @@ -2048,14 +2050,17 @@ steps: import 'package:gap/gap.dart'; import '../assets.dart'; - @@ -13,20 +14,40 @@ import '../styles.dart'; + @@ -11,17 +12,39 @@ import '../common/ui_scaler.dart'; + import '../styles.dart'; + class TitleScreenUi extends StatelessWidget { - const TitleScreenUi({ - super.key, + - const TitleScreenUi({super.key}); + + const TitleScreenUi({ + + super.key, + required this.difficulty, + required this.onDifficultyPressed, + required this.onDifficultyFocused, - }); + + }); + + final int difficulty; + final void Function(int difficulty) onDifficultyPressed; @@ -2072,10 +2077,7 @@ steps: /// Title Text - TopLeft( + const TopLeft( - child: UiScaler( - alignment: Alignment.topLeft, - child: _TitleText(), - ), + child: UiScaler(alignment: Alignment.topLeft, child: _TitleText()), ), + + /// Difficulty Btns @@ -2092,7 +2094,7 @@ steps: ], ), ); - @@ -60,3 +81,107 @@ class _TitleText extends StatelessWidget { + @@ -55,3 +78,103 @@ class _TitleText extends StatelessWidget { ); } } @@ -2180,18 +2182,14 @@ steps: + + /// cross-hairs (selected state) + if (selected) ...[ - + CenterLeft( - + child: Image.asset(AssetPaths.titleSelectedLeft), - + ), + + CenterLeft(child: Image.asset(AssetPaths.titleSelectedLeft)), + CenterRight( + child: Image.asset(AssetPaths.titleSelectedRight), + ), + ], + + /// Label - + Center( - + child: Text(label.toUpperCase(), style: TextStyles.btn), - + ), + + Center(child: Text(label.toUpperCase(), style: TextStyles.btn)), + ], + ), + ), @@ -2282,7 +2280,7 @@ steps: lightAmt: _finalEmitLightAmt, ), - @@ -61,20 +82,24 @@ class TitleScreen extends StatelessWidget { + @@ -61,19 +82,25 @@ class TitleScreen extends StatelessWidget { /// Fg-Receive _LitImage( imgSrc: AssetPaths.titleFgReceive, @@ -2300,17 +2298,17 @@ steps: ), /// UI - - const Positioned.fill( - - child: TitleScreenUi(), + - const Positioned.fill(child: TitleScreenUi()), + Positioned.fill( + child: TitleScreenUi( + difficulty: _difficulty, + onDifficultyFocused: _handleDifficultyFocused, + onDifficultyPressed: _handleDifficultyPressed, + ), - ), + + ), ], ), + ), - name: Build Web app path: next_gen_ui flutter: build web @@ -2333,7 +2331,7 @@ steps: patch-u: | --- b/next-gen-ui/step_03_c/lib/title_screen/title_screen_ui.dart +++ a/next-gen-ui/step_03_c/lib/title_screen/title_screen_ui.dart - @@ -48,6 +48,17 @@ class TitleScreenUi extends StatelessWidget { + @@ -45,6 +45,17 @@ class TitleScreenUi extends StatelessWidget { ), ), ), @@ -2351,7 +2349,7 @@ steps: ], ), ); - @@ -185,3 +196,55 @@ class _DifficultyBtn extends StatelessWidget { + @@ -178,3 +189,60 @@ class _DifficultyBtn extends StatelessWidget { ); } } @@ -2388,15 +2386,20 @@ steps: + Positioned.fill(child: Image.asset(AssetPaths.titleStartBtn)), + if (state.isHovered || state.isFocused) ...[ + Positioned.fill( - + child: Image.asset(AssetPaths.titleStartBtnHover)), + + child: Image.asset(AssetPaths.titleStartBtnHover), + + ), + ], + Center( + child: Row( + mainAxisAlignment: MainAxisAlignment.end, + children: [ - + Text('START MISSION', - + style: TextStyles.btn - + .copyWith(fontSize: 24, letterSpacing: 18)), + + Text( + + 'START MISSION', + + style: TextStyles.btn.copyWith( + + fontSize: 24, + + letterSpacing: 18, + + ), + + ), + ], + ), + ), @@ -2457,16 +2460,17 @@ steps: import 'package:focusable_control_builder/focusable_control_builder.dart'; import 'package:gap/gap.dart'; - @@ -86,8 +87,10 @@ class _TitleText extends StatelessWidget { + @@ -83,8 +84,11 @@ class _TitleText extends StatelessWidget { Text('57', style: TextStyles.h2), Image.asset(AssetPaths.titleSelectedRight, height: 65), ], - ), - Text('INTO THE UNKNOWN', style: TextStyles.h3), + ).animate().fadeIn(delay: .8.seconds, duration: .7.seconds), - + Text('INTO THE UNKNOWN', style: TextStyles.h3) - + .animate() - + .fadeIn(delay: 1.seconds, duration: .7.seconds), + + Text( + + 'INTO THE UNKNOWN', + + style: TextStyles.h3, + + ).animate().fadeIn(delay: 1.seconds, duration: .7.seconds), ], ); } @@ -2492,32 +2496,48 @@ steps: patch-u: | --- b/next-gen-ui/step_04_b/lib/title_screen/title_screen_ui.dart +++ a/next-gen-ui/step_04_b/lib/title_screen/title_screen_ui.dart - @@ -117,19 +117,28 @@ class _DifficultyBtns extends StatelessWidget { - selected: difficulty == 0, - onPressed: () => onDifficultyPressed(0), - onHover: (over) => onDifficultyFocused(over ? 0 : null), + @@ -111,23 +111,32 @@ class _DifficultyBtns extends StatelessWidget { + mainAxisSize: MainAxisSize.min, + children: [ + _DifficultyBtn( + - label: 'Casual', + - selected: difficulty == 0, + - onPressed: () => onDifficultyPressed(0), + - onHover: (over) => onDifficultyFocused(over ? 0 : null), - ), - + ) + + label: 'Casual', + + selected: difficulty == 0, + + onPressed: () => onDifficultyPressed(0), + + onHover: (over) => onDifficultyFocused(over ? 0 : null), + + ) + .animate() + .fadeIn(delay: 1.3.seconds, duration: .35.seconds) + .slide(begin: const Offset(0, .2)), _DifficultyBtn( - label: 'Normal', - selected: difficulty == 1, - onPressed: () => onDifficultyPressed(1), - onHover: (over) => onDifficultyFocused(over ? 1 : null), + - label: 'Normal', + - selected: difficulty == 1, + - onPressed: () => onDifficultyPressed(1), + - onHover: (over) => onDifficultyFocused(over ? 1 : null), - ), - + ) + + label: 'Normal', + + selected: difficulty == 1, + + onPressed: () => onDifficultyPressed(1), + + onHover: (over) => onDifficultyFocused(over ? 1 : null), + + ) + .animate() + .fadeIn(delay: 1.5.seconds, duration: .35.seconds) + .slide(begin: const Offset(0, .2)), _DifficultyBtn( - label: 'Hardcore', - selected: difficulty == 2, - onPressed: () => onDifficultyPressed(2), - onHover: (over) => onDifficultyFocused(over ? 2 : null), + - label: 'Hardcore', + - selected: difficulty == 2, + - onPressed: () => onDifficultyPressed(2), + - onHover: (over) => onDifficultyFocused(over ? 2 : null), - ), - + ) + + label: 'Hardcore', + + selected: difficulty == 2, + + onPressed: () => onDifficultyPressed(2), + + onHover: (over) => onDifficultyFocused(over ? 2 : null), + + ) + .animate() + .fadeIn(delay: 1.7.seconds, duration: .35.seconds) + .slide(begin: const Offset(0, .2)), @@ -2546,16 +2566,67 @@ steps: patch-u: | --- b/next-gen-ui/step_04_c/lib/title_screen/title_screen_ui.dart +++ a/next-gen-ui/step_04_c/lib/title_screen/title_screen_ui.dart - @@ -254,8 +254,13 @@ class _StartBtnState extends State<_StartBtn> { - ), - ), - ], + @@ -228,33 +228,40 @@ class _StartBtnState extends State<_StartBtn> { + } + _wasHovered = (state.isHovered || state.isFocused); + return SizedBox( + - width: 520, + - height: 100, + - child: Stack( + - children: [ + - Positioned.fill(child: Image.asset(AssetPaths.titleStartBtn)), + - if (state.isHovered || state.isFocused) ...[ + - Positioned.fill( + - child: Image.asset(AssetPaths.titleStartBtnHover), + - ), + - ], + - Center( + - child: Row( + - mainAxisAlignment: MainAxisAlignment.end, + - children: [ + - Text( + - 'START MISSION', + - style: TextStyles.btn.copyWith( + - fontSize: 24, + - letterSpacing: 18, + + width: 520, + + height: 100, + + child: Stack( + + children: [ + + Positioned.fill( + + child: Image.asset(AssetPaths.titleStartBtn), + ), + - ), + - ], + - ), + - ), + - ], - ), - ); - + ) - + .animate(autoPlay: false, onInit: (c) => _btnAnim = c) - + .shimmer(duration: .7.seconds, color: Colors.black), - + ) + + if (state.isHovered || state.isFocused) ...[ + + Positioned.fill( + + child: Image.asset(AssetPaths.titleStartBtnHover), + + ), + + ], + + Center( + + child: Row( + + mainAxisAlignment: MainAxisAlignment.end, + + children: [ + + Text( + + 'START MISSION', + + style: TextStyles.btn.copyWith( + + fontSize: 24, + + letterSpacing: 18, + + ), + + ), + + ], + + ), + + ), + + ], + + ) + + .animate(autoPlay: false, onInit: (c) => _btnAnim = c) + + .shimmer(duration: .7.seconds, color: Colors.black), + + ) + .animate() + .fadeIn(delay: 2.3.seconds) + .slide(begin: const Offset(0, .2)); @@ -2584,7 +2655,7 @@ steps: patch-u: | --- b/next-gen-ui/step_04_d/lib/title_screen/title_screen_ui.dart +++ a/next-gen-ui/step_04_d/lib/title_screen/title_screen_ui.dart - @@ -171,10 +171,16 @@ class _DifficultyBtn extends StatelessWidget { + @@ -169,10 +169,17 @@ class _DifficultyBtn extends StatelessWidget { child: Stack( children: [ /// Bg with fill and outline @@ -2593,9 +2664,10 @@ steps: - color: const Color(0xFF00D1FF).withAlpha(25), - border: Border.all(color: Colors.white, width: 5), + AnimatedOpacity( - + opacity: (!selected && (state.isHovered || state.isFocused)) - + ? 1 - + : 0, + + opacity: + + (!selected && (state.isHovered || state.isFocused)) + + ? 1 + + : 0, + duration: .3.seconds, + child: Container( + decoration: BoxDecoration( @@ -2781,7 +2853,7 @@ steps: + final Color orbColor; + + final Widget Function(BuildContext context, Color orbColor, Color emitColor) - + builder; + + builder; + + @override + Widget build(BuildContext context) { @@ -2866,7 +2938,7 @@ steps: import '../common/ui_scaler.dart'; import '../styles.dart'; - @@ -71,7 +74,7 @@ class _TitleText extends StatelessWidget { + @@ -68,7 +71,7 @@ class _TitleText extends StatelessWidget { @override Widget build(BuildContext context) { @@ -2875,8 +2947,8 @@ steps: mainAxisSize: MainAxisSize.min, crossAxisAlignment: CrossAxisAlignment.start, children: [ - @@ -93,6 +96,30 @@ class _TitleText extends StatelessWidget { - .fadeIn(delay: 1.seconds, duration: .7.seconds), + @@ -91,6 +94,31 @@ class _TitleText extends StatelessWidget { + ).animate().fadeIn(delay: 1.seconds, duration: .7.seconds), ], ); + return Consumer( @@ -2884,21 +2956,22 @@ steps: + if (fragmentPrograms == null) return content; + return TickingBuilder( + builder: (context, time) { - + return AnimatedSampler( - + (image, size, canvas) { - + const double overdrawPx = 30; - + final shader = fragmentPrograms.ui.fragmentShader(); - + shader - + ..setFloat(0, size.width) - + ..setFloat(1, size.height) - + ..setFloat(2, time) - + ..setImageSampler(0, image); - + Rect rect = Rect.fromLTWH(-overdrawPx, -overdrawPx, - + size.width + overdrawPx, size.height + overdrawPx); - + canvas.drawRect(rect, Paint()..shader = shader); - + }, - + child: content, - + ); + + return AnimatedSampler((image, size, canvas) { + + const double overdrawPx = 30; + + final shader = fragmentPrograms.ui.fragmentShader(); + + shader + + ..setFloat(0, size.width) + + ..setFloat(1, size.height) + + ..setFloat(2, time) + + ..setImageSampler(0, image); + + Rect rect = Rect.fromLTWH( + + -overdrawPx, + + -overdrawPx, + + size.width + overdrawPx, + + size.height + overdrawPx, + + ); + + canvas.drawRect(rect, Paint()..shader = shader); + + }, child: content); + }, + ); + }, @@ -2941,7 +3014,7 @@ steps: @override Widget build(BuildContext context) { - @@ -59,7 +61,7 @@ class TitleScreenUi extends StatelessWidget { + @@ -56,7 +58,7 @@ class TitleScreenUi extends StatelessWidget { alignment: Alignment.bottomRight, child: Padding( padding: const EdgeInsets.only(bottom: 20, right: 40), @@ -2996,7 +3069,7 @@ steps: Color get _emitColor => AppColors.emitColors[_difficultyOverride ?? _difficulty]; Color get _orbColor => - @@ -27,88 +48,189 @@ class _TitleScreenState extends State { + @@ -27,88 +48,190 @@ class _TitleScreenState extends State { /// Currently focused difficulty (if any) int? _difficultyOverride; @@ -3023,10 +3096,10 @@ steps: + Duration _getRndPulseDuration() => 100.ms + 200.ms * Random().nextDouble(); + + double _getMinEnergyForDifficulty(int difficulty) => switch (difficulty) { - + 1 => 0.3, - + 2 => 0.6, - + _ => 0, - + }; + + 1 => 0.3, + + 2 => 0.6, + + _ => 0, + + }; + + @override + void initState() { @@ -3186,9 +3259,10 @@ steps: + materialColor: orbColor, + lightColor: orbColor, + ), - + onUpdate: (energy) => setState(() { - + _orbEnergy = energy; - + }), + + onUpdate: + + (energy) => setState(() { + + _orbEnergy = energy; + + }), + ), + ], + ), @@ -3253,7 +3327,7 @@ steps: ), ), ); - @@ -119,19 +241,26 @@ class _LitImage extends StatelessWidget { + @@ -119,19 +242,26 @@ class _LitImage extends StatelessWidget { const _LitImage({ required this.color, required this.imgSrc, @@ -3307,19 +3381,19 @@ steps: // Copyright 2023 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. - + import 'dart:math'; - + import 'package:flutter/material.dart'; import 'package:particle_field/particle_field.dart'; import 'package:rnd/rnd.dart'; - + class ParticleOverlay extends StatelessWidget { const ParticleOverlay({super.key, required this.color, required this.energy}); - + final Color color; final double energy; - + @override Widget build(BuildContext context) { return ParticleField( @@ -3328,29 +3402,31 @@ steps: ), // blend the image's alpha with the specified color: blendMode: BlendMode.dstIn, - + // this runs every tick: onTick: (controller, _, size) { List particles = controller.particles; - + // add a new particle with random angle, distance & velocity: double a = rnd(pi * 2); double dist = rnd(1, 4) * 35 + 150 * energy; double vel = rnd(1, 2) * (1 + energy * 1.8); - particles.add(Particle( - // how many ticks this particle will live: - lifespan: rnd(1, 2) * 20 + energy * 15, - // starting distance from center: - x: cos(a) * dist, - y: sin(a) * dist, - // starting velocity: - vx: cos(a) * vel, - vy: sin(a) * vel, - // other starting values: - rotation: a, - scale: rnd(1, 2) * 0.6 + energy * 0.5, - )); - + particles.add( + Particle( + // how many ticks this particle will live: + lifespan: rnd(1, 2) * 20 + energy * 15, + // starting distance from center: + x: cos(a) * dist, + y: sin(a) * dist, + // starting velocity: + vx: cos(a) * vel, + vy: sin(a) * vel, + // other starting values: + rotation: a, + scale: rnd(1, 2) * 0.6 + energy * 0.5, + ), + ); + // update all of the particles: for (int i = particles.length - 1; i >= 0; i--) { Particle p = particles[i]; @@ -3384,7 +3460,7 @@ steps: import 'title_screen_ui.dart'; class TitleScreen extends StatefulWidget { - @@ -199,6 +200,16 @@ class _TitleScreenState extends State + @@ -200,6 +201,16 @@ class _TitleScreenState extends State lightAmt: _finalEmitLightAmt, ), diff --git a/next-gen-ui/step_01/android/app/build.gradle b/next-gen-ui/step_01/android/app/build.gradle.kts similarity index 84% rename from next-gen-ui/step_01/android/app/build.gradle rename to next-gen-ui/step_01/android/app/build.gradle.kts index b6fad008f9..7876ce7a57 100644 --- a/next-gen-ui/step_01/android/app/build.gradle +++ b/next-gen-ui/step_01/android/app/build.gradle.kts @@ -1,8 +1,8 @@ plugins { - id "com.android.application" - id "kotlin-android" + id("com.android.application") + id("kotlin-android") // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. - id "dev.flutter.flutter-gradle-plugin" + id("dev.flutter.flutter-gradle-plugin") } android { @@ -16,7 +16,7 @@ android { } kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8 + jvmTarget = JavaVersion.VERSION_1_8.toString() } defaultConfig { @@ -34,7 +34,7 @@ android { release { // TODO: Add your own signing config for the release build. // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig = signingConfigs.debug + signingConfig = signingConfigs.getByName("debug") } } } diff --git a/next-gen-ui/step_01/android/build.gradle b/next-gen-ui/step_01/android/build.gradle deleted file mode 100644 index d2ffbffa4c..0000000000 --- a/next-gen-ui/step_01/android/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = "../build" -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(":app") -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/next-gen-ui/step_01/android/build.gradle.kts b/next-gen-ui/step_01/android/build.gradle.kts new file mode 100644 index 0000000000..89176ef44e --- /dev/null +++ b/next-gen-ui/step_01/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/next-gen-ui/step_01/android/gradle.properties b/next-gen-ui/step_01/android/gradle.properties index 2597170821..f018a61817 100644 --- a/next-gen-ui/step_01/android/gradle.properties +++ b/next-gen-ui/step_01/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/next-gen-ui/step_01/android/gradle/wrapper/gradle-wrapper.properties b/next-gen-ui/step_01/android/gradle/wrapper/gradle-wrapper.properties index 7bb2df6ba6..afa1e8eb0a 100644 --- a/next-gen-ui/step_01/android/gradle/wrapper/gradle-wrapper.properties +++ b/next-gen-ui/step_01/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip diff --git a/next-gen-ui/step_01/android/settings.gradle b/next-gen-ui/step_01/android/settings.gradle deleted file mode 100644 index b9e43bd376..0000000000 --- a/next-gen-ui/step_01/android/settings.gradle +++ /dev/null @@ -1,25 +0,0 @@ -pluginManagement { - def flutterSdkPath = { - def properties = new Properties() - file("local.properties").withInputStream { properties.load(it) } - def flutterSdkPath = properties.getProperty("flutter.sdk") - assert flutterSdkPath != null, "flutter.sdk not set in local.properties" - return flutterSdkPath - }() - - includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") - - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} - -plugins { - id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.1.0" apply false - id "org.jetbrains.kotlin.android" version "1.8.22" apply false -} - -include ":app" diff --git a/next-gen-ui/step_01/android/settings.gradle.kts b/next-gen-ui/step_01/android/settings.gradle.kts new file mode 100644 index 0000000000..a439442c20 --- /dev/null +++ b/next-gen-ui/step_01/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.0" apply false + id("org.jetbrains.kotlin.android") version "1.8.22" apply false +} + +include(":app") diff --git a/next-gen-ui/step_01/ios/Podfile b/next-gen-ui/step_01/ios/Podfile index d97f17e223..e549ee22f3 100644 --- a/next-gen-ui/step_01/ios/Podfile +++ b/next-gen-ui/step_01/ios/Podfile @@ -29,7 +29,6 @@ flutter_ios_podfile_setup target 'Runner' do use_frameworks! - use_modular_headers! flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) target 'RunnerTests' do diff --git a/next-gen-ui/step_01/ios/Runner.xcodeproj/project.pbxproj b/next-gen-ui/step_01/ios/Runner.xcodeproj/project.pbxproj index 8f047bdf00..e6e561d8b2 100644 --- a/next-gen-ui/step_01/ios/Runner.xcodeproj/project.pbxproj +++ b/next-gen-ui/step_01/ios/Runner.xcodeproj/project.pbxproj @@ -10,12 +10,12 @@ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; + 66AB0B66A73F1975E64A8177 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 20BB5BDAE26490ECF22F2507 /* Pods_RunnerTests.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - B62141185A2A64CE6AE671F2 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B1CF946366B840164A5B6A19 /* Pods_Runner.framework */; }; - B81AE38132A98A311F8F51B8 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 249FB81AECD9AE84FFA40AD0 /* Pods_RunnerTests.framework */; }; + CE4E96F7F9B6D48487EB3E31 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F57E7A6E02C2CD3ED18C8215 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,29 +42,29 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 0FBB97D3B77C3F8ABBBA69D1 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 1065108C466C107C635700F4 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 249FB81AECD9AE84FFA40AD0 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 174850BBD948073483DE44FD /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 20BB5BDAE26490ECF22F2507 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 29D2F0C3F335C05D8707828B /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 3440B8D33B7DF5E678FB8D73 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 5220EC7DF66B6FF52474A86B /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - 64F96334240D4715F67078C9 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 6641BE7C3FD295E85E2B1262 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 678B757D90C77B71F96114E8 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; + 943161019A9EC85C7A66EE19 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; - 9790F6561207E583E84D4FF9 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - B1CF946366B840164A5B6A19 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + C840685EE99E8FA6D49D591E /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + F57E7A6E02C2CD3ED18C8215 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -72,26 +72,26 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - B62141185A2A64CE6AE671F2 /* Pods_Runner.framework in Frameworks */, + CE4E96F7F9B6D48487EB3E31 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - C266D94F39398FF0845062EB /* Frameworks */ = { + D4AFF78F5AE2E8EE0BD7286F /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - B81AE38132A98A311F8F51B8 /* Pods_RunnerTests.framework in Frameworks */, + 66AB0B66A73F1975E64A8177 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 29779CA63CE39E764210D572 /* Frameworks */ = { + 1B41929933729C3C4452D755 /* Frameworks */ = { isa = PBXGroup; children = ( - B1CF946366B840164A5B6A19 /* Pods_Runner.framework */, - 249FB81AECD9AE84FFA40AD0 /* Pods_RunnerTests.framework */, + F57E7A6E02C2CD3ED18C8215 /* Pods_Runner.framework */, + 20BB5BDAE26490ECF22F2507 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -104,20 +104,6 @@ path = RunnerTests; sourceTree = ""; }; - 67CB01004931F5EAE1484002 /* Pods */ = { - isa = PBXGroup; - children = ( - 64F96334240D4715F67078C9 /* Pods-Runner.debug.xcconfig */, - 1065108C466C107C635700F4 /* Pods-Runner.release.xcconfig */, - 9790F6561207E583E84D4FF9 /* Pods-Runner.profile.xcconfig */, - 0FBB97D3B77C3F8ABBBA69D1 /* Pods-RunnerTests.debug.xcconfig */, - 5220EC7DF66B6FF52474A86B /* Pods-RunnerTests.release.xcconfig */, - 6641BE7C3FD295E85E2B1262 /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( @@ -136,8 +122,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - 67CB01004931F5EAE1484002 /* Pods */, - 29779CA63CE39E764210D572 /* Frameworks */, + CB8608376662DCF167CF091D /* Pods */, + 1B41929933729C3C4452D755 /* Frameworks */, ); sourceTree = ""; }; @@ -165,6 +151,20 @@ path = Runner; sourceTree = ""; }; + CB8608376662DCF167CF091D /* Pods */ = { + isa = PBXGroup; + children = ( + 678B757D90C77B71F96114E8 /* Pods-Runner.debug.xcconfig */, + 3440B8D33B7DF5E678FB8D73 /* Pods-Runner.release.xcconfig */, + 174850BBD948073483DE44FD /* Pods-Runner.profile.xcconfig */, + 29D2F0C3F335C05D8707828B /* Pods-RunnerTests.debug.xcconfig */, + 943161019A9EC85C7A66EE19 /* Pods-RunnerTests.release.xcconfig */, + C840685EE99E8FA6D49D591E /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 1A41435D909B4A5BA59DA804 /* [CP] Check Pods Manifest.lock */, + AC04A6680CE49A8AB43B1FFA /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - C266D94F39398FF0845062EB /* Frameworks */, + D4AFF78F5AE2E8EE0BD7286F /* Frameworks */, ); buildRules = ( ); @@ -191,7 +191,7 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 15FA0791F2F6E4DEC3602581 /* [CP] Check Pods Manifest.lock */, + 214492064922C9E65703CF3F /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, @@ -269,7 +269,7 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 15FA0791F2F6E4DEC3602581 /* [CP] Check Pods Manifest.lock */ = { + 214492064922C9E65703CF3F /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -291,58 +291,58 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 1A41435D909B4A5BA59DA804 /* [CP] Check Pods Manifest.lock */ = { + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); + name = "Thin Binary"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputPaths = ( - "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); - name = "Thin Binary"; + name = "Run Script"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { + AC04A6680CE49A8AB43B1FFA /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "Run Script"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -469,7 +469,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 0FBB97D3B77C3F8ABBBA69D1 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 29D2F0C3F335C05D8707828B /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -487,7 +487,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 5220EC7DF66B6FF52474A86B /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 943161019A9EC85C7A66EE19 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -503,7 +503,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 6641BE7C3FD295E85E2B1262 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = C840685EE99E8FA6D49D591E /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/next-gen-ui/step_01/macos/Podfile b/next-gen-ui/step_01/macos/Podfile index c795730db8..29c8eb3294 100644 --- a/next-gen-ui/step_01/macos/Podfile +++ b/next-gen-ui/step_01/macos/Podfile @@ -28,7 +28,6 @@ flutter_macos_podfile_setup target 'Runner' do use_frameworks! - use_modular_headers! flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__)) target 'RunnerTests' do diff --git a/next-gen-ui/step_01/macos/Runner.xcodeproj/project.pbxproj b/next-gen-ui/step_01/macos/Runner.xcodeproj/project.pbxproj index 5ca8a3231e..4579683b58 100644 --- a/next-gen-ui/step_01/macos/Runner.xcodeproj/project.pbxproj +++ b/next-gen-ui/step_01/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ - 2E6B87224BF317E31F74B0D6 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FF5748F504BD5E56042DEADB /* Pods_RunnerTests.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 56635C0EC97E7F426A37B2E0 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 70907F10D88B462804477CEC /* Pods_Runner.framework */; }; + 36138DB3332DEE6FFE0E1FE3 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2A728D4E207B0278F8F9C593 /* Pods_Runner.framework */; }; + 52B0D23BFA4C286CA0E41B69 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0A2DA58632C7ECDDC6F5CE67 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,8 +62,9 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 1084579C46BDDCE9E7DF16AC /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 2D475486DFFA8C60E5710DB0 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 0A2DA58632C7ECDDC6F5CE67 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 0D3D188B329D045CE36B21CF /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 2A728D4E207B0278F8F9C593 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -80,14 +81,13 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 70907F10D88B462804477CEC /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 812DEB8E378C986DF221D831 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - 86295B0784C4F550CBE8BD69 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 949451BBF3DF607E13DBB265 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 913FEB323BDFFD347FB2351B /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - E57940CC1AE193EDBC7E60BC /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - FF5748F504BD5E56042DEADB /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + B0D72C78FFC1C48205B1AD6E /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + BFB07E0B350C6948876BAE8A /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + C3E70C64D6EEF1D329D99AEA /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + E7724C6A3503B208E4E9A53C /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 2E6B87224BF317E31F74B0D6 /* Pods_RunnerTests.framework in Frameworks */, + 52B0D23BFA4C286CA0E41B69 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,27 +103,13 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 56635C0EC97E7F426A37B2E0 /* Pods_Runner.framework in Frameworks */, + 36138DB3332DEE6FFE0E1FE3 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 0EB950B6EBBA8562ED05E9C6 /* Pods */ = { - isa = PBXGroup; - children = ( - 1084579C46BDDCE9E7DF16AC /* Pods-Runner.debug.xcconfig */, - 2D475486DFFA8C60E5710DB0 /* Pods-Runner.release.xcconfig */, - E57940CC1AE193EDBC7E60BC /* Pods-Runner.profile.xcconfig */, - 86295B0784C4F550CBE8BD69 /* Pods-RunnerTests.debug.xcconfig */, - 949451BBF3DF607E13DBB265 /* Pods-RunnerTests.release.xcconfig */, - 812DEB8E378C986DF221D831 /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; 331C80D6294CF71000263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -151,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 0EB950B6EBBA8562ED05E9C6 /* Pods */, + E6BCE486B4BBFADC211C60FF /* Pods */, ); sourceTree = ""; }; @@ -202,12 +188,26 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - 70907F10D88B462804477CEC /* Pods_Runner.framework */, - FF5748F504BD5E56042DEADB /* Pods_RunnerTests.framework */, + 2A728D4E207B0278F8F9C593 /* Pods_Runner.framework */, + 0A2DA58632C7ECDDC6F5CE67 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; }; + E6BCE486B4BBFADC211C60FF /* Pods */ = { + isa = PBXGroup; + children = ( + E7724C6A3503B208E4E9A53C /* Pods-Runner.debug.xcconfig */, + 913FEB323BDFFD347FB2351B /* Pods-Runner.release.xcconfig */, + B0D72C78FFC1C48205B1AD6E /* Pods-Runner.profile.xcconfig */, + C3E70C64D6EEF1D329D99AEA /* Pods-RunnerTests.debug.xcconfig */, + 0D3D188B329D045CE36B21CF /* Pods-RunnerTests.release.xcconfig */, + BFB07E0B350C6948876BAE8A /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 24CA264AC7C1AA37F685BC19 /* [CP] Check Pods Manifest.lock */, + 8915FA819FCC8B1FF9C2CD9A /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 9936C57FFCBF37419AE7561E /* [CP] Check Pods Manifest.lock */, + E5CD31409482E85EF68F0E33 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 038DC0986A46E5F2839BD12E /* [CP] Embed Pods Frameworks */, + 8C531C68C243175172E5DA1B /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,84 +323,84 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 038DC0986A46E5F2839BD12E /* [CP] Embed Pods Frameworks */ = { + 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + ); outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; + shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; }; - 24CA264AC7C1AA37F685BC19 /* [CP] Check Pods Manifest.lock */ = { + 33CC111E2044C6BF0003C045 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + Flutter/ephemeral/FlutterInputs.xcfilelist, ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", + Flutter/ephemeral/tripwire, ); - name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( + Flutter/ephemeral/FlutterOutputs.xcfilelist, ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 3399D490228B24CF009A79C7 /* ShellScript */ = { + 8915FA819FCC8B1FF9C2CD9A /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( ); outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - 33CC111E2044C6BF0003C045 /* ShellScript */ = { + 8C531C68C243175172E5DA1B /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - Flutter/ephemeral/FlutterInputs.xcfilelist, - ); - inputPaths = ( - Flutter/ephemeral/tripwire, + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - Flutter/ephemeral/FlutterOutputs.xcfilelist, - ); - outputPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; }; - 9936C57FFCBF37419AE7561E /* [CP] Check Pods Manifest.lock */ = { + E5CD31409482E85EF68F0E33 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 86295B0784C4F550CBE8BD69 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = C3E70C64D6EEF1D329D99AEA /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 949451BBF3DF607E13DBB265 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 0D3D188B329D045CE36B21CF /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 812DEB8E378C986DF221D831 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = BFB07E0B350C6948876BAE8A /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/next-gen-ui/step_02_b/android/app/build.gradle b/next-gen-ui/step_02_a/android/app/build.gradle.kts similarity index 84% rename from next-gen-ui/step_02_b/android/app/build.gradle rename to next-gen-ui/step_02_a/android/app/build.gradle.kts index b6fad008f9..7876ce7a57 100644 --- a/next-gen-ui/step_02_b/android/app/build.gradle +++ b/next-gen-ui/step_02_a/android/app/build.gradle.kts @@ -1,8 +1,8 @@ plugins { - id "com.android.application" - id "kotlin-android" + id("com.android.application") + id("kotlin-android") // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. - id "dev.flutter.flutter-gradle-plugin" + id("dev.flutter.flutter-gradle-plugin") } android { @@ -16,7 +16,7 @@ android { } kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8 + jvmTarget = JavaVersion.VERSION_1_8.toString() } defaultConfig { @@ -34,7 +34,7 @@ android { release { // TODO: Add your own signing config for the release build. // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig = signingConfigs.debug + signingConfig = signingConfigs.getByName("debug") } } } diff --git a/next-gen-ui/step_02_a/android/build.gradle b/next-gen-ui/step_02_a/android/build.gradle deleted file mode 100644 index d2ffbffa4c..0000000000 --- a/next-gen-ui/step_02_a/android/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = "../build" -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(":app") -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/next-gen-ui/step_02_a/android/build.gradle.kts b/next-gen-ui/step_02_a/android/build.gradle.kts new file mode 100644 index 0000000000..89176ef44e --- /dev/null +++ b/next-gen-ui/step_02_a/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/next-gen-ui/step_02_a/android/gradle.properties b/next-gen-ui/step_02_a/android/gradle.properties index 2597170821..f018a61817 100644 --- a/next-gen-ui/step_02_a/android/gradle.properties +++ b/next-gen-ui/step_02_a/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/next-gen-ui/step_02_a/android/gradle/wrapper/gradle-wrapper.properties b/next-gen-ui/step_02_a/android/gradle/wrapper/gradle-wrapper.properties index 7bb2df6ba6..afa1e8eb0a 100644 --- a/next-gen-ui/step_02_a/android/gradle/wrapper/gradle-wrapper.properties +++ b/next-gen-ui/step_02_a/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip diff --git a/next-gen-ui/step_02_a/android/settings.gradle b/next-gen-ui/step_02_a/android/settings.gradle deleted file mode 100644 index b9e43bd376..0000000000 --- a/next-gen-ui/step_02_a/android/settings.gradle +++ /dev/null @@ -1,25 +0,0 @@ -pluginManagement { - def flutterSdkPath = { - def properties = new Properties() - file("local.properties").withInputStream { properties.load(it) } - def flutterSdkPath = properties.getProperty("flutter.sdk") - assert flutterSdkPath != null, "flutter.sdk not set in local.properties" - return flutterSdkPath - }() - - includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") - - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} - -plugins { - id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.1.0" apply false - id "org.jetbrains.kotlin.android" version "1.8.22" apply false -} - -include ":app" diff --git a/next-gen-ui/step_02_a/android/settings.gradle.kts b/next-gen-ui/step_02_a/android/settings.gradle.kts new file mode 100644 index 0000000000..a439442c20 --- /dev/null +++ b/next-gen-ui/step_02_a/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.0" apply false + id("org.jetbrains.kotlin.android") version "1.8.22" apply false +} + +include(":app") diff --git a/next-gen-ui/step_02_a/ios/Podfile b/next-gen-ui/step_02_a/ios/Podfile index d97f17e223..e549ee22f3 100644 --- a/next-gen-ui/step_02_a/ios/Podfile +++ b/next-gen-ui/step_02_a/ios/Podfile @@ -29,7 +29,6 @@ flutter_ios_podfile_setup target 'Runner' do use_frameworks! - use_modular_headers! flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) target 'RunnerTests' do diff --git a/next-gen-ui/step_02_a/ios/Runner.xcodeproj/project.pbxproj b/next-gen-ui/step_02_a/ios/Runner.xcodeproj/project.pbxproj index 8f047bdf00..e6e561d8b2 100644 --- a/next-gen-ui/step_02_a/ios/Runner.xcodeproj/project.pbxproj +++ b/next-gen-ui/step_02_a/ios/Runner.xcodeproj/project.pbxproj @@ -10,12 +10,12 @@ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; + 66AB0B66A73F1975E64A8177 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 20BB5BDAE26490ECF22F2507 /* Pods_RunnerTests.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - B62141185A2A64CE6AE671F2 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B1CF946366B840164A5B6A19 /* Pods_Runner.framework */; }; - B81AE38132A98A311F8F51B8 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 249FB81AECD9AE84FFA40AD0 /* Pods_RunnerTests.framework */; }; + CE4E96F7F9B6D48487EB3E31 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F57E7A6E02C2CD3ED18C8215 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,29 +42,29 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 0FBB97D3B77C3F8ABBBA69D1 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 1065108C466C107C635700F4 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 249FB81AECD9AE84FFA40AD0 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 174850BBD948073483DE44FD /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 20BB5BDAE26490ECF22F2507 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 29D2F0C3F335C05D8707828B /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 3440B8D33B7DF5E678FB8D73 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 5220EC7DF66B6FF52474A86B /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - 64F96334240D4715F67078C9 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 6641BE7C3FD295E85E2B1262 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 678B757D90C77B71F96114E8 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; + 943161019A9EC85C7A66EE19 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; - 9790F6561207E583E84D4FF9 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - B1CF946366B840164A5B6A19 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + C840685EE99E8FA6D49D591E /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + F57E7A6E02C2CD3ED18C8215 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -72,26 +72,26 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - B62141185A2A64CE6AE671F2 /* Pods_Runner.framework in Frameworks */, + CE4E96F7F9B6D48487EB3E31 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - C266D94F39398FF0845062EB /* Frameworks */ = { + D4AFF78F5AE2E8EE0BD7286F /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - B81AE38132A98A311F8F51B8 /* Pods_RunnerTests.framework in Frameworks */, + 66AB0B66A73F1975E64A8177 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 29779CA63CE39E764210D572 /* Frameworks */ = { + 1B41929933729C3C4452D755 /* Frameworks */ = { isa = PBXGroup; children = ( - B1CF946366B840164A5B6A19 /* Pods_Runner.framework */, - 249FB81AECD9AE84FFA40AD0 /* Pods_RunnerTests.framework */, + F57E7A6E02C2CD3ED18C8215 /* Pods_Runner.framework */, + 20BB5BDAE26490ECF22F2507 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -104,20 +104,6 @@ path = RunnerTests; sourceTree = ""; }; - 67CB01004931F5EAE1484002 /* Pods */ = { - isa = PBXGroup; - children = ( - 64F96334240D4715F67078C9 /* Pods-Runner.debug.xcconfig */, - 1065108C466C107C635700F4 /* Pods-Runner.release.xcconfig */, - 9790F6561207E583E84D4FF9 /* Pods-Runner.profile.xcconfig */, - 0FBB97D3B77C3F8ABBBA69D1 /* Pods-RunnerTests.debug.xcconfig */, - 5220EC7DF66B6FF52474A86B /* Pods-RunnerTests.release.xcconfig */, - 6641BE7C3FD295E85E2B1262 /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( @@ -136,8 +122,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - 67CB01004931F5EAE1484002 /* Pods */, - 29779CA63CE39E764210D572 /* Frameworks */, + CB8608376662DCF167CF091D /* Pods */, + 1B41929933729C3C4452D755 /* Frameworks */, ); sourceTree = ""; }; @@ -165,6 +151,20 @@ path = Runner; sourceTree = ""; }; + CB8608376662DCF167CF091D /* Pods */ = { + isa = PBXGroup; + children = ( + 678B757D90C77B71F96114E8 /* Pods-Runner.debug.xcconfig */, + 3440B8D33B7DF5E678FB8D73 /* Pods-Runner.release.xcconfig */, + 174850BBD948073483DE44FD /* Pods-Runner.profile.xcconfig */, + 29D2F0C3F335C05D8707828B /* Pods-RunnerTests.debug.xcconfig */, + 943161019A9EC85C7A66EE19 /* Pods-RunnerTests.release.xcconfig */, + C840685EE99E8FA6D49D591E /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 1A41435D909B4A5BA59DA804 /* [CP] Check Pods Manifest.lock */, + AC04A6680CE49A8AB43B1FFA /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - C266D94F39398FF0845062EB /* Frameworks */, + D4AFF78F5AE2E8EE0BD7286F /* Frameworks */, ); buildRules = ( ); @@ -191,7 +191,7 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 15FA0791F2F6E4DEC3602581 /* [CP] Check Pods Manifest.lock */, + 214492064922C9E65703CF3F /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, @@ -269,7 +269,7 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 15FA0791F2F6E4DEC3602581 /* [CP] Check Pods Manifest.lock */ = { + 214492064922C9E65703CF3F /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -291,58 +291,58 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 1A41435D909B4A5BA59DA804 /* [CP] Check Pods Manifest.lock */ = { + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); + name = "Thin Binary"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputPaths = ( - "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); - name = "Thin Binary"; + name = "Run Script"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { + AC04A6680CE49A8AB43B1FFA /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "Run Script"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -469,7 +469,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 0FBB97D3B77C3F8ABBBA69D1 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 29D2F0C3F335C05D8707828B /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -487,7 +487,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 5220EC7DF66B6FF52474A86B /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 943161019A9EC85C7A66EE19 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -503,7 +503,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 6641BE7C3FD295E85E2B1262 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = C840685EE99E8FA6D49D591E /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/next-gen-ui/step_02_a/macos/Podfile b/next-gen-ui/step_02_a/macos/Podfile index c795730db8..29c8eb3294 100644 --- a/next-gen-ui/step_02_a/macos/Podfile +++ b/next-gen-ui/step_02_a/macos/Podfile @@ -28,7 +28,6 @@ flutter_macos_podfile_setup target 'Runner' do use_frameworks! - use_modular_headers! flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__)) target 'RunnerTests' do diff --git a/next-gen-ui/step_02_a/macos/Runner.xcodeproj/project.pbxproj b/next-gen-ui/step_02_a/macos/Runner.xcodeproj/project.pbxproj index 5ca8a3231e..4579683b58 100644 --- a/next-gen-ui/step_02_a/macos/Runner.xcodeproj/project.pbxproj +++ b/next-gen-ui/step_02_a/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ - 2E6B87224BF317E31F74B0D6 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FF5748F504BD5E56042DEADB /* Pods_RunnerTests.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 56635C0EC97E7F426A37B2E0 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 70907F10D88B462804477CEC /* Pods_Runner.framework */; }; + 36138DB3332DEE6FFE0E1FE3 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2A728D4E207B0278F8F9C593 /* Pods_Runner.framework */; }; + 52B0D23BFA4C286CA0E41B69 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0A2DA58632C7ECDDC6F5CE67 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,8 +62,9 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 1084579C46BDDCE9E7DF16AC /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 2D475486DFFA8C60E5710DB0 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 0A2DA58632C7ECDDC6F5CE67 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 0D3D188B329D045CE36B21CF /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 2A728D4E207B0278F8F9C593 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -80,14 +81,13 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 70907F10D88B462804477CEC /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 812DEB8E378C986DF221D831 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - 86295B0784C4F550CBE8BD69 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 949451BBF3DF607E13DBB265 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 913FEB323BDFFD347FB2351B /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - E57940CC1AE193EDBC7E60BC /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - FF5748F504BD5E56042DEADB /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + B0D72C78FFC1C48205B1AD6E /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + BFB07E0B350C6948876BAE8A /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + C3E70C64D6EEF1D329D99AEA /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + E7724C6A3503B208E4E9A53C /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 2E6B87224BF317E31F74B0D6 /* Pods_RunnerTests.framework in Frameworks */, + 52B0D23BFA4C286CA0E41B69 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,27 +103,13 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 56635C0EC97E7F426A37B2E0 /* Pods_Runner.framework in Frameworks */, + 36138DB3332DEE6FFE0E1FE3 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 0EB950B6EBBA8562ED05E9C6 /* Pods */ = { - isa = PBXGroup; - children = ( - 1084579C46BDDCE9E7DF16AC /* Pods-Runner.debug.xcconfig */, - 2D475486DFFA8C60E5710DB0 /* Pods-Runner.release.xcconfig */, - E57940CC1AE193EDBC7E60BC /* Pods-Runner.profile.xcconfig */, - 86295B0784C4F550CBE8BD69 /* Pods-RunnerTests.debug.xcconfig */, - 949451BBF3DF607E13DBB265 /* Pods-RunnerTests.release.xcconfig */, - 812DEB8E378C986DF221D831 /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; 331C80D6294CF71000263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -151,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 0EB950B6EBBA8562ED05E9C6 /* Pods */, + E6BCE486B4BBFADC211C60FF /* Pods */, ); sourceTree = ""; }; @@ -202,12 +188,26 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - 70907F10D88B462804477CEC /* Pods_Runner.framework */, - FF5748F504BD5E56042DEADB /* Pods_RunnerTests.framework */, + 2A728D4E207B0278F8F9C593 /* Pods_Runner.framework */, + 0A2DA58632C7ECDDC6F5CE67 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; }; + E6BCE486B4BBFADC211C60FF /* Pods */ = { + isa = PBXGroup; + children = ( + E7724C6A3503B208E4E9A53C /* Pods-Runner.debug.xcconfig */, + 913FEB323BDFFD347FB2351B /* Pods-Runner.release.xcconfig */, + B0D72C78FFC1C48205B1AD6E /* Pods-Runner.profile.xcconfig */, + C3E70C64D6EEF1D329D99AEA /* Pods-RunnerTests.debug.xcconfig */, + 0D3D188B329D045CE36B21CF /* Pods-RunnerTests.release.xcconfig */, + BFB07E0B350C6948876BAE8A /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 24CA264AC7C1AA37F685BC19 /* [CP] Check Pods Manifest.lock */, + 8915FA819FCC8B1FF9C2CD9A /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 9936C57FFCBF37419AE7561E /* [CP] Check Pods Manifest.lock */, + E5CD31409482E85EF68F0E33 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 038DC0986A46E5F2839BD12E /* [CP] Embed Pods Frameworks */, + 8C531C68C243175172E5DA1B /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,84 +323,84 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 038DC0986A46E5F2839BD12E /* [CP] Embed Pods Frameworks */ = { + 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + ); outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; + shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; }; - 24CA264AC7C1AA37F685BC19 /* [CP] Check Pods Manifest.lock */ = { + 33CC111E2044C6BF0003C045 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + Flutter/ephemeral/FlutterInputs.xcfilelist, ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", + Flutter/ephemeral/tripwire, ); - name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( + Flutter/ephemeral/FlutterOutputs.xcfilelist, ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 3399D490228B24CF009A79C7 /* ShellScript */ = { + 8915FA819FCC8B1FF9C2CD9A /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( ); outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - 33CC111E2044C6BF0003C045 /* ShellScript */ = { + 8C531C68C243175172E5DA1B /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - Flutter/ephemeral/FlutterInputs.xcfilelist, - ); - inputPaths = ( - Flutter/ephemeral/tripwire, + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - Flutter/ephemeral/FlutterOutputs.xcfilelist, - ); - outputPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; }; - 9936C57FFCBF37419AE7561E /* [CP] Check Pods Manifest.lock */ = { + E5CD31409482E85EF68F0E33 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 86295B0784C4F550CBE8BD69 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = C3E70C64D6EEF1D329D99AEA /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 949451BBF3DF607E13DBB265 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 0D3D188B329D045CE36B21CF /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 812DEB8E378C986DF221D831 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = BFB07E0B350C6948876BAE8A /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/next-gen-ui/step_02_c/android/app/build.gradle b/next-gen-ui/step_02_b/android/app/build.gradle.kts similarity index 84% rename from next-gen-ui/step_02_c/android/app/build.gradle rename to next-gen-ui/step_02_b/android/app/build.gradle.kts index b6fad008f9..7876ce7a57 100644 --- a/next-gen-ui/step_02_c/android/app/build.gradle +++ b/next-gen-ui/step_02_b/android/app/build.gradle.kts @@ -1,8 +1,8 @@ plugins { - id "com.android.application" - id "kotlin-android" + id("com.android.application") + id("kotlin-android") // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. - id "dev.flutter.flutter-gradle-plugin" + id("dev.flutter.flutter-gradle-plugin") } android { @@ -16,7 +16,7 @@ android { } kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8 + jvmTarget = JavaVersion.VERSION_1_8.toString() } defaultConfig { @@ -34,7 +34,7 @@ android { release { // TODO: Add your own signing config for the release build. // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig = signingConfigs.debug + signingConfig = signingConfigs.getByName("debug") } } } diff --git a/next-gen-ui/step_02_b/android/build.gradle b/next-gen-ui/step_02_b/android/build.gradle deleted file mode 100644 index d2ffbffa4c..0000000000 --- a/next-gen-ui/step_02_b/android/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = "../build" -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(":app") -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/next-gen-ui/step_02_b/android/build.gradle.kts b/next-gen-ui/step_02_b/android/build.gradle.kts new file mode 100644 index 0000000000..89176ef44e --- /dev/null +++ b/next-gen-ui/step_02_b/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/next-gen-ui/step_02_b/android/gradle.properties b/next-gen-ui/step_02_b/android/gradle.properties index 2597170821..f018a61817 100644 --- a/next-gen-ui/step_02_b/android/gradle.properties +++ b/next-gen-ui/step_02_b/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/next-gen-ui/step_02_b/android/gradle/wrapper/gradle-wrapper.properties b/next-gen-ui/step_02_b/android/gradle/wrapper/gradle-wrapper.properties index 7bb2df6ba6..afa1e8eb0a 100644 --- a/next-gen-ui/step_02_b/android/gradle/wrapper/gradle-wrapper.properties +++ b/next-gen-ui/step_02_b/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip diff --git a/next-gen-ui/step_02_b/android/settings.gradle b/next-gen-ui/step_02_b/android/settings.gradle deleted file mode 100644 index b9e43bd376..0000000000 --- a/next-gen-ui/step_02_b/android/settings.gradle +++ /dev/null @@ -1,25 +0,0 @@ -pluginManagement { - def flutterSdkPath = { - def properties = new Properties() - file("local.properties").withInputStream { properties.load(it) } - def flutterSdkPath = properties.getProperty("flutter.sdk") - assert flutterSdkPath != null, "flutter.sdk not set in local.properties" - return flutterSdkPath - }() - - includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") - - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} - -plugins { - id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.1.0" apply false - id "org.jetbrains.kotlin.android" version "1.8.22" apply false -} - -include ":app" diff --git a/next-gen-ui/step_02_b/android/settings.gradle.kts b/next-gen-ui/step_02_b/android/settings.gradle.kts new file mode 100644 index 0000000000..a439442c20 --- /dev/null +++ b/next-gen-ui/step_02_b/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.0" apply false + id("org.jetbrains.kotlin.android") version "1.8.22" apply false +} + +include(":app") diff --git a/next-gen-ui/step_02_b/ios/Podfile b/next-gen-ui/step_02_b/ios/Podfile index d97f17e223..e549ee22f3 100644 --- a/next-gen-ui/step_02_b/ios/Podfile +++ b/next-gen-ui/step_02_b/ios/Podfile @@ -29,7 +29,6 @@ flutter_ios_podfile_setup target 'Runner' do use_frameworks! - use_modular_headers! flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) target 'RunnerTests' do diff --git a/next-gen-ui/step_02_b/ios/Runner.xcodeproj/project.pbxproj b/next-gen-ui/step_02_b/ios/Runner.xcodeproj/project.pbxproj index 8f047bdf00..e6e561d8b2 100644 --- a/next-gen-ui/step_02_b/ios/Runner.xcodeproj/project.pbxproj +++ b/next-gen-ui/step_02_b/ios/Runner.xcodeproj/project.pbxproj @@ -10,12 +10,12 @@ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; + 66AB0B66A73F1975E64A8177 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 20BB5BDAE26490ECF22F2507 /* Pods_RunnerTests.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - B62141185A2A64CE6AE671F2 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B1CF946366B840164A5B6A19 /* Pods_Runner.framework */; }; - B81AE38132A98A311F8F51B8 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 249FB81AECD9AE84FFA40AD0 /* Pods_RunnerTests.framework */; }; + CE4E96F7F9B6D48487EB3E31 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F57E7A6E02C2CD3ED18C8215 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,29 +42,29 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 0FBB97D3B77C3F8ABBBA69D1 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 1065108C466C107C635700F4 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 249FB81AECD9AE84FFA40AD0 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 174850BBD948073483DE44FD /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 20BB5BDAE26490ECF22F2507 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 29D2F0C3F335C05D8707828B /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 3440B8D33B7DF5E678FB8D73 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 5220EC7DF66B6FF52474A86B /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - 64F96334240D4715F67078C9 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 6641BE7C3FD295E85E2B1262 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 678B757D90C77B71F96114E8 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; + 943161019A9EC85C7A66EE19 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; - 9790F6561207E583E84D4FF9 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - B1CF946366B840164A5B6A19 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + C840685EE99E8FA6D49D591E /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + F57E7A6E02C2CD3ED18C8215 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -72,26 +72,26 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - B62141185A2A64CE6AE671F2 /* Pods_Runner.framework in Frameworks */, + CE4E96F7F9B6D48487EB3E31 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - C266D94F39398FF0845062EB /* Frameworks */ = { + D4AFF78F5AE2E8EE0BD7286F /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - B81AE38132A98A311F8F51B8 /* Pods_RunnerTests.framework in Frameworks */, + 66AB0B66A73F1975E64A8177 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 29779CA63CE39E764210D572 /* Frameworks */ = { + 1B41929933729C3C4452D755 /* Frameworks */ = { isa = PBXGroup; children = ( - B1CF946366B840164A5B6A19 /* Pods_Runner.framework */, - 249FB81AECD9AE84FFA40AD0 /* Pods_RunnerTests.framework */, + F57E7A6E02C2CD3ED18C8215 /* Pods_Runner.framework */, + 20BB5BDAE26490ECF22F2507 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -104,20 +104,6 @@ path = RunnerTests; sourceTree = ""; }; - 67CB01004931F5EAE1484002 /* Pods */ = { - isa = PBXGroup; - children = ( - 64F96334240D4715F67078C9 /* Pods-Runner.debug.xcconfig */, - 1065108C466C107C635700F4 /* Pods-Runner.release.xcconfig */, - 9790F6561207E583E84D4FF9 /* Pods-Runner.profile.xcconfig */, - 0FBB97D3B77C3F8ABBBA69D1 /* Pods-RunnerTests.debug.xcconfig */, - 5220EC7DF66B6FF52474A86B /* Pods-RunnerTests.release.xcconfig */, - 6641BE7C3FD295E85E2B1262 /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( @@ -136,8 +122,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - 67CB01004931F5EAE1484002 /* Pods */, - 29779CA63CE39E764210D572 /* Frameworks */, + CB8608376662DCF167CF091D /* Pods */, + 1B41929933729C3C4452D755 /* Frameworks */, ); sourceTree = ""; }; @@ -165,6 +151,20 @@ path = Runner; sourceTree = ""; }; + CB8608376662DCF167CF091D /* Pods */ = { + isa = PBXGroup; + children = ( + 678B757D90C77B71F96114E8 /* Pods-Runner.debug.xcconfig */, + 3440B8D33B7DF5E678FB8D73 /* Pods-Runner.release.xcconfig */, + 174850BBD948073483DE44FD /* Pods-Runner.profile.xcconfig */, + 29D2F0C3F335C05D8707828B /* Pods-RunnerTests.debug.xcconfig */, + 943161019A9EC85C7A66EE19 /* Pods-RunnerTests.release.xcconfig */, + C840685EE99E8FA6D49D591E /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 1A41435D909B4A5BA59DA804 /* [CP] Check Pods Manifest.lock */, + AC04A6680CE49A8AB43B1FFA /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - C266D94F39398FF0845062EB /* Frameworks */, + D4AFF78F5AE2E8EE0BD7286F /* Frameworks */, ); buildRules = ( ); @@ -191,7 +191,7 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 15FA0791F2F6E4DEC3602581 /* [CP] Check Pods Manifest.lock */, + 214492064922C9E65703CF3F /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, @@ -269,7 +269,7 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 15FA0791F2F6E4DEC3602581 /* [CP] Check Pods Manifest.lock */ = { + 214492064922C9E65703CF3F /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -291,58 +291,58 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 1A41435D909B4A5BA59DA804 /* [CP] Check Pods Manifest.lock */ = { + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); + name = "Thin Binary"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputPaths = ( - "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); - name = "Thin Binary"; + name = "Run Script"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { + AC04A6680CE49A8AB43B1FFA /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "Run Script"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -469,7 +469,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 0FBB97D3B77C3F8ABBBA69D1 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 29D2F0C3F335C05D8707828B /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -487,7 +487,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 5220EC7DF66B6FF52474A86B /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 943161019A9EC85C7A66EE19 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -503,7 +503,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 6641BE7C3FD295E85E2B1262 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = C840685EE99E8FA6D49D591E /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/next-gen-ui/step_02_b/macos/Podfile b/next-gen-ui/step_02_b/macos/Podfile index c795730db8..29c8eb3294 100644 --- a/next-gen-ui/step_02_b/macos/Podfile +++ b/next-gen-ui/step_02_b/macos/Podfile @@ -28,7 +28,6 @@ flutter_macos_podfile_setup target 'Runner' do use_frameworks! - use_modular_headers! flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__)) target 'RunnerTests' do diff --git a/next-gen-ui/step_02_b/macos/Runner.xcodeproj/project.pbxproj b/next-gen-ui/step_02_b/macos/Runner.xcodeproj/project.pbxproj index 5ca8a3231e..4579683b58 100644 --- a/next-gen-ui/step_02_b/macos/Runner.xcodeproj/project.pbxproj +++ b/next-gen-ui/step_02_b/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ - 2E6B87224BF317E31F74B0D6 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FF5748F504BD5E56042DEADB /* Pods_RunnerTests.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 56635C0EC97E7F426A37B2E0 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 70907F10D88B462804477CEC /* Pods_Runner.framework */; }; + 36138DB3332DEE6FFE0E1FE3 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2A728D4E207B0278F8F9C593 /* Pods_Runner.framework */; }; + 52B0D23BFA4C286CA0E41B69 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0A2DA58632C7ECDDC6F5CE67 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,8 +62,9 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 1084579C46BDDCE9E7DF16AC /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 2D475486DFFA8C60E5710DB0 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 0A2DA58632C7ECDDC6F5CE67 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 0D3D188B329D045CE36B21CF /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 2A728D4E207B0278F8F9C593 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -80,14 +81,13 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 70907F10D88B462804477CEC /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 812DEB8E378C986DF221D831 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - 86295B0784C4F550CBE8BD69 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 949451BBF3DF607E13DBB265 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 913FEB323BDFFD347FB2351B /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - E57940CC1AE193EDBC7E60BC /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - FF5748F504BD5E56042DEADB /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + B0D72C78FFC1C48205B1AD6E /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + BFB07E0B350C6948876BAE8A /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + C3E70C64D6EEF1D329D99AEA /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + E7724C6A3503B208E4E9A53C /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 2E6B87224BF317E31F74B0D6 /* Pods_RunnerTests.framework in Frameworks */, + 52B0D23BFA4C286CA0E41B69 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,27 +103,13 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 56635C0EC97E7F426A37B2E0 /* Pods_Runner.framework in Frameworks */, + 36138DB3332DEE6FFE0E1FE3 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 0EB950B6EBBA8562ED05E9C6 /* Pods */ = { - isa = PBXGroup; - children = ( - 1084579C46BDDCE9E7DF16AC /* Pods-Runner.debug.xcconfig */, - 2D475486DFFA8C60E5710DB0 /* Pods-Runner.release.xcconfig */, - E57940CC1AE193EDBC7E60BC /* Pods-Runner.profile.xcconfig */, - 86295B0784C4F550CBE8BD69 /* Pods-RunnerTests.debug.xcconfig */, - 949451BBF3DF607E13DBB265 /* Pods-RunnerTests.release.xcconfig */, - 812DEB8E378C986DF221D831 /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; 331C80D6294CF71000263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -151,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 0EB950B6EBBA8562ED05E9C6 /* Pods */, + E6BCE486B4BBFADC211C60FF /* Pods */, ); sourceTree = ""; }; @@ -202,12 +188,26 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - 70907F10D88B462804477CEC /* Pods_Runner.framework */, - FF5748F504BD5E56042DEADB /* Pods_RunnerTests.framework */, + 2A728D4E207B0278F8F9C593 /* Pods_Runner.framework */, + 0A2DA58632C7ECDDC6F5CE67 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; }; + E6BCE486B4BBFADC211C60FF /* Pods */ = { + isa = PBXGroup; + children = ( + E7724C6A3503B208E4E9A53C /* Pods-Runner.debug.xcconfig */, + 913FEB323BDFFD347FB2351B /* Pods-Runner.release.xcconfig */, + B0D72C78FFC1C48205B1AD6E /* Pods-Runner.profile.xcconfig */, + C3E70C64D6EEF1D329D99AEA /* Pods-RunnerTests.debug.xcconfig */, + 0D3D188B329D045CE36B21CF /* Pods-RunnerTests.release.xcconfig */, + BFB07E0B350C6948876BAE8A /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 24CA264AC7C1AA37F685BC19 /* [CP] Check Pods Manifest.lock */, + 8915FA819FCC8B1FF9C2CD9A /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 9936C57FFCBF37419AE7561E /* [CP] Check Pods Manifest.lock */, + E5CD31409482E85EF68F0E33 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 038DC0986A46E5F2839BD12E /* [CP] Embed Pods Frameworks */, + 8C531C68C243175172E5DA1B /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,84 +323,84 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 038DC0986A46E5F2839BD12E /* [CP] Embed Pods Frameworks */ = { + 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + ); outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; + shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; }; - 24CA264AC7C1AA37F685BC19 /* [CP] Check Pods Manifest.lock */ = { + 33CC111E2044C6BF0003C045 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + Flutter/ephemeral/FlutterInputs.xcfilelist, ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", + Flutter/ephemeral/tripwire, ); - name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( + Flutter/ephemeral/FlutterOutputs.xcfilelist, ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 3399D490228B24CF009A79C7 /* ShellScript */ = { + 8915FA819FCC8B1FF9C2CD9A /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( ); outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - 33CC111E2044C6BF0003C045 /* ShellScript */ = { + 8C531C68C243175172E5DA1B /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - Flutter/ephemeral/FlutterInputs.xcfilelist, - ); - inputPaths = ( - Flutter/ephemeral/tripwire, + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - Flutter/ephemeral/FlutterOutputs.xcfilelist, - ); - outputPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; }; - 9936C57FFCBF37419AE7561E /* [CP] Check Pods Manifest.lock */ = { + E5CD31409482E85EF68F0E33 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 86295B0784C4F550CBE8BD69 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = C3E70C64D6EEF1D329D99AEA /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 949451BBF3DF607E13DBB265 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 0D3D188B329D045CE36B21CF /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 812DEB8E378C986DF221D831 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = BFB07E0B350C6948876BAE8A /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/next-gen-ui/step_02_a/android/app/build.gradle b/next-gen-ui/step_02_c/android/app/build.gradle.kts similarity index 84% rename from next-gen-ui/step_02_a/android/app/build.gradle rename to next-gen-ui/step_02_c/android/app/build.gradle.kts index b6fad008f9..7876ce7a57 100644 --- a/next-gen-ui/step_02_a/android/app/build.gradle +++ b/next-gen-ui/step_02_c/android/app/build.gradle.kts @@ -1,8 +1,8 @@ plugins { - id "com.android.application" - id "kotlin-android" + id("com.android.application") + id("kotlin-android") // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. - id "dev.flutter.flutter-gradle-plugin" + id("dev.flutter.flutter-gradle-plugin") } android { @@ -16,7 +16,7 @@ android { } kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8 + jvmTarget = JavaVersion.VERSION_1_8.toString() } defaultConfig { @@ -34,7 +34,7 @@ android { release { // TODO: Add your own signing config for the release build. // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig = signingConfigs.debug + signingConfig = signingConfigs.getByName("debug") } } } diff --git a/next-gen-ui/step_02_c/android/build.gradle b/next-gen-ui/step_02_c/android/build.gradle deleted file mode 100644 index d2ffbffa4c..0000000000 --- a/next-gen-ui/step_02_c/android/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = "../build" -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(":app") -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/next-gen-ui/step_02_c/android/build.gradle.kts b/next-gen-ui/step_02_c/android/build.gradle.kts new file mode 100644 index 0000000000..89176ef44e --- /dev/null +++ b/next-gen-ui/step_02_c/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/next-gen-ui/step_02_c/android/gradle.properties b/next-gen-ui/step_02_c/android/gradle.properties index 2597170821..f018a61817 100644 --- a/next-gen-ui/step_02_c/android/gradle.properties +++ b/next-gen-ui/step_02_c/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/next-gen-ui/step_02_c/android/gradle/wrapper/gradle-wrapper.properties b/next-gen-ui/step_02_c/android/gradle/wrapper/gradle-wrapper.properties index 7bb2df6ba6..afa1e8eb0a 100644 --- a/next-gen-ui/step_02_c/android/gradle/wrapper/gradle-wrapper.properties +++ b/next-gen-ui/step_02_c/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip diff --git a/next-gen-ui/step_02_c/android/settings.gradle b/next-gen-ui/step_02_c/android/settings.gradle deleted file mode 100644 index b9e43bd376..0000000000 --- a/next-gen-ui/step_02_c/android/settings.gradle +++ /dev/null @@ -1,25 +0,0 @@ -pluginManagement { - def flutterSdkPath = { - def properties = new Properties() - file("local.properties").withInputStream { properties.load(it) } - def flutterSdkPath = properties.getProperty("flutter.sdk") - assert flutterSdkPath != null, "flutter.sdk not set in local.properties" - return flutterSdkPath - }() - - includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") - - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} - -plugins { - id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.1.0" apply false - id "org.jetbrains.kotlin.android" version "1.8.22" apply false -} - -include ":app" diff --git a/next-gen-ui/step_02_c/android/settings.gradle.kts b/next-gen-ui/step_02_c/android/settings.gradle.kts new file mode 100644 index 0000000000..a439442c20 --- /dev/null +++ b/next-gen-ui/step_02_c/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.0" apply false + id("org.jetbrains.kotlin.android") version "1.8.22" apply false +} + +include(":app") diff --git a/next-gen-ui/step_02_c/ios/Podfile b/next-gen-ui/step_02_c/ios/Podfile index d97f17e223..e549ee22f3 100644 --- a/next-gen-ui/step_02_c/ios/Podfile +++ b/next-gen-ui/step_02_c/ios/Podfile @@ -29,7 +29,6 @@ flutter_ios_podfile_setup target 'Runner' do use_frameworks! - use_modular_headers! flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) target 'RunnerTests' do diff --git a/next-gen-ui/step_02_c/ios/Runner.xcodeproj/project.pbxproj b/next-gen-ui/step_02_c/ios/Runner.xcodeproj/project.pbxproj index 8f047bdf00..e6e561d8b2 100644 --- a/next-gen-ui/step_02_c/ios/Runner.xcodeproj/project.pbxproj +++ b/next-gen-ui/step_02_c/ios/Runner.xcodeproj/project.pbxproj @@ -10,12 +10,12 @@ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; + 66AB0B66A73F1975E64A8177 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 20BB5BDAE26490ECF22F2507 /* Pods_RunnerTests.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - B62141185A2A64CE6AE671F2 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B1CF946366B840164A5B6A19 /* Pods_Runner.framework */; }; - B81AE38132A98A311F8F51B8 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 249FB81AECD9AE84FFA40AD0 /* Pods_RunnerTests.framework */; }; + CE4E96F7F9B6D48487EB3E31 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F57E7A6E02C2CD3ED18C8215 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,29 +42,29 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 0FBB97D3B77C3F8ABBBA69D1 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 1065108C466C107C635700F4 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 249FB81AECD9AE84FFA40AD0 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 174850BBD948073483DE44FD /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 20BB5BDAE26490ECF22F2507 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 29D2F0C3F335C05D8707828B /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 3440B8D33B7DF5E678FB8D73 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 5220EC7DF66B6FF52474A86B /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - 64F96334240D4715F67078C9 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 6641BE7C3FD295E85E2B1262 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 678B757D90C77B71F96114E8 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; + 943161019A9EC85C7A66EE19 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; - 9790F6561207E583E84D4FF9 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - B1CF946366B840164A5B6A19 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + C840685EE99E8FA6D49D591E /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + F57E7A6E02C2CD3ED18C8215 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -72,26 +72,26 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - B62141185A2A64CE6AE671F2 /* Pods_Runner.framework in Frameworks */, + CE4E96F7F9B6D48487EB3E31 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - C266D94F39398FF0845062EB /* Frameworks */ = { + D4AFF78F5AE2E8EE0BD7286F /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - B81AE38132A98A311F8F51B8 /* Pods_RunnerTests.framework in Frameworks */, + 66AB0B66A73F1975E64A8177 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 29779CA63CE39E764210D572 /* Frameworks */ = { + 1B41929933729C3C4452D755 /* Frameworks */ = { isa = PBXGroup; children = ( - B1CF946366B840164A5B6A19 /* Pods_Runner.framework */, - 249FB81AECD9AE84FFA40AD0 /* Pods_RunnerTests.framework */, + F57E7A6E02C2CD3ED18C8215 /* Pods_Runner.framework */, + 20BB5BDAE26490ECF22F2507 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -104,20 +104,6 @@ path = RunnerTests; sourceTree = ""; }; - 67CB01004931F5EAE1484002 /* Pods */ = { - isa = PBXGroup; - children = ( - 64F96334240D4715F67078C9 /* Pods-Runner.debug.xcconfig */, - 1065108C466C107C635700F4 /* Pods-Runner.release.xcconfig */, - 9790F6561207E583E84D4FF9 /* Pods-Runner.profile.xcconfig */, - 0FBB97D3B77C3F8ABBBA69D1 /* Pods-RunnerTests.debug.xcconfig */, - 5220EC7DF66B6FF52474A86B /* Pods-RunnerTests.release.xcconfig */, - 6641BE7C3FD295E85E2B1262 /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( @@ -136,8 +122,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - 67CB01004931F5EAE1484002 /* Pods */, - 29779CA63CE39E764210D572 /* Frameworks */, + CB8608376662DCF167CF091D /* Pods */, + 1B41929933729C3C4452D755 /* Frameworks */, ); sourceTree = ""; }; @@ -165,6 +151,20 @@ path = Runner; sourceTree = ""; }; + CB8608376662DCF167CF091D /* Pods */ = { + isa = PBXGroup; + children = ( + 678B757D90C77B71F96114E8 /* Pods-Runner.debug.xcconfig */, + 3440B8D33B7DF5E678FB8D73 /* Pods-Runner.release.xcconfig */, + 174850BBD948073483DE44FD /* Pods-Runner.profile.xcconfig */, + 29D2F0C3F335C05D8707828B /* Pods-RunnerTests.debug.xcconfig */, + 943161019A9EC85C7A66EE19 /* Pods-RunnerTests.release.xcconfig */, + C840685EE99E8FA6D49D591E /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 1A41435D909B4A5BA59DA804 /* [CP] Check Pods Manifest.lock */, + AC04A6680CE49A8AB43B1FFA /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - C266D94F39398FF0845062EB /* Frameworks */, + D4AFF78F5AE2E8EE0BD7286F /* Frameworks */, ); buildRules = ( ); @@ -191,7 +191,7 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 15FA0791F2F6E4DEC3602581 /* [CP] Check Pods Manifest.lock */, + 214492064922C9E65703CF3F /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, @@ -269,7 +269,7 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 15FA0791F2F6E4DEC3602581 /* [CP] Check Pods Manifest.lock */ = { + 214492064922C9E65703CF3F /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -291,58 +291,58 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 1A41435D909B4A5BA59DA804 /* [CP] Check Pods Manifest.lock */ = { + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); + name = "Thin Binary"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputPaths = ( - "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); - name = "Thin Binary"; + name = "Run Script"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { + AC04A6680CE49A8AB43B1FFA /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "Run Script"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -469,7 +469,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 0FBB97D3B77C3F8ABBBA69D1 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 29D2F0C3F335C05D8707828B /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -487,7 +487,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 5220EC7DF66B6FF52474A86B /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 943161019A9EC85C7A66EE19 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -503,7 +503,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 6641BE7C3FD295E85E2B1262 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = C840685EE99E8FA6D49D591E /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/next-gen-ui/step_02_c/macos/Podfile b/next-gen-ui/step_02_c/macos/Podfile index c795730db8..29c8eb3294 100644 --- a/next-gen-ui/step_02_c/macos/Podfile +++ b/next-gen-ui/step_02_c/macos/Podfile @@ -28,7 +28,6 @@ flutter_macos_podfile_setup target 'Runner' do use_frameworks! - use_modular_headers! flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__)) target 'RunnerTests' do diff --git a/next-gen-ui/step_02_c/macos/Runner.xcodeproj/project.pbxproj b/next-gen-ui/step_02_c/macos/Runner.xcodeproj/project.pbxproj index 5ca8a3231e..4579683b58 100644 --- a/next-gen-ui/step_02_c/macos/Runner.xcodeproj/project.pbxproj +++ b/next-gen-ui/step_02_c/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ - 2E6B87224BF317E31F74B0D6 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FF5748F504BD5E56042DEADB /* Pods_RunnerTests.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 56635C0EC97E7F426A37B2E0 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 70907F10D88B462804477CEC /* Pods_Runner.framework */; }; + 36138DB3332DEE6FFE0E1FE3 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2A728D4E207B0278F8F9C593 /* Pods_Runner.framework */; }; + 52B0D23BFA4C286CA0E41B69 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0A2DA58632C7ECDDC6F5CE67 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,8 +62,9 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 1084579C46BDDCE9E7DF16AC /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 2D475486DFFA8C60E5710DB0 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 0A2DA58632C7ECDDC6F5CE67 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 0D3D188B329D045CE36B21CF /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 2A728D4E207B0278F8F9C593 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -80,14 +81,13 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 70907F10D88B462804477CEC /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 812DEB8E378C986DF221D831 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - 86295B0784C4F550CBE8BD69 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 949451BBF3DF607E13DBB265 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 913FEB323BDFFD347FB2351B /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - E57940CC1AE193EDBC7E60BC /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - FF5748F504BD5E56042DEADB /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + B0D72C78FFC1C48205B1AD6E /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + BFB07E0B350C6948876BAE8A /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + C3E70C64D6EEF1D329D99AEA /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + E7724C6A3503B208E4E9A53C /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 2E6B87224BF317E31F74B0D6 /* Pods_RunnerTests.framework in Frameworks */, + 52B0D23BFA4C286CA0E41B69 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,27 +103,13 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 56635C0EC97E7F426A37B2E0 /* Pods_Runner.framework in Frameworks */, + 36138DB3332DEE6FFE0E1FE3 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 0EB950B6EBBA8562ED05E9C6 /* Pods */ = { - isa = PBXGroup; - children = ( - 1084579C46BDDCE9E7DF16AC /* Pods-Runner.debug.xcconfig */, - 2D475486DFFA8C60E5710DB0 /* Pods-Runner.release.xcconfig */, - E57940CC1AE193EDBC7E60BC /* Pods-Runner.profile.xcconfig */, - 86295B0784C4F550CBE8BD69 /* Pods-RunnerTests.debug.xcconfig */, - 949451BBF3DF607E13DBB265 /* Pods-RunnerTests.release.xcconfig */, - 812DEB8E378C986DF221D831 /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; 331C80D6294CF71000263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -151,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 0EB950B6EBBA8562ED05E9C6 /* Pods */, + E6BCE486B4BBFADC211C60FF /* Pods */, ); sourceTree = ""; }; @@ -202,12 +188,26 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - 70907F10D88B462804477CEC /* Pods_Runner.framework */, - FF5748F504BD5E56042DEADB /* Pods_RunnerTests.framework */, + 2A728D4E207B0278F8F9C593 /* Pods_Runner.framework */, + 0A2DA58632C7ECDDC6F5CE67 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; }; + E6BCE486B4BBFADC211C60FF /* Pods */ = { + isa = PBXGroup; + children = ( + E7724C6A3503B208E4E9A53C /* Pods-Runner.debug.xcconfig */, + 913FEB323BDFFD347FB2351B /* Pods-Runner.release.xcconfig */, + B0D72C78FFC1C48205B1AD6E /* Pods-Runner.profile.xcconfig */, + C3E70C64D6EEF1D329D99AEA /* Pods-RunnerTests.debug.xcconfig */, + 0D3D188B329D045CE36B21CF /* Pods-RunnerTests.release.xcconfig */, + BFB07E0B350C6948876BAE8A /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 24CA264AC7C1AA37F685BC19 /* [CP] Check Pods Manifest.lock */, + 8915FA819FCC8B1FF9C2CD9A /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 9936C57FFCBF37419AE7561E /* [CP] Check Pods Manifest.lock */, + E5CD31409482E85EF68F0E33 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 038DC0986A46E5F2839BD12E /* [CP] Embed Pods Frameworks */, + 8C531C68C243175172E5DA1B /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,84 +323,84 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 038DC0986A46E5F2839BD12E /* [CP] Embed Pods Frameworks */ = { + 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + ); outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; + shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; }; - 24CA264AC7C1AA37F685BC19 /* [CP] Check Pods Manifest.lock */ = { + 33CC111E2044C6BF0003C045 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + Flutter/ephemeral/FlutterInputs.xcfilelist, ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", + Flutter/ephemeral/tripwire, ); - name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( + Flutter/ephemeral/FlutterOutputs.xcfilelist, ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 3399D490228B24CF009A79C7 /* ShellScript */ = { + 8915FA819FCC8B1FF9C2CD9A /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( ); outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - 33CC111E2044C6BF0003C045 /* ShellScript */ = { + 8C531C68C243175172E5DA1B /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - Flutter/ephemeral/FlutterInputs.xcfilelist, - ); - inputPaths = ( - Flutter/ephemeral/tripwire, + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - Flutter/ephemeral/FlutterOutputs.xcfilelist, - ); - outputPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; }; - 9936C57FFCBF37419AE7561E /* [CP] Check Pods Manifest.lock */ = { + E5CD31409482E85EF68F0E33 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 86295B0784C4F550CBE8BD69 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = C3E70C64D6EEF1D329D99AEA /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 949451BBF3DF607E13DBB265 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 0D3D188B329D045CE36B21CF /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 812DEB8E378C986DF221D831 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = BFB07E0B350C6948876BAE8A /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/next-gen-ui/step_03_a/android/app/build.gradle b/next-gen-ui/step_03_a/android/app/build.gradle deleted file mode 100644 index b6fad008f9..0000000000 --- a/next-gen-ui/step_03_a/android/app/build.gradle +++ /dev/null @@ -1,44 +0,0 @@ -plugins { - id "com.android.application" - id "kotlin-android" - // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. - id "dev.flutter.flutter-gradle-plugin" -} - -android { - namespace = "com.example.next_gen_ui" - compileSdk = flutter.compileSdkVersion - ndkVersion = flutter.ndkVersion - - compileOptions { - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 - } - - kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8 - } - - defaultConfig { - // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). - applicationId = "com.example.next_gen_ui" - // You can update the following values to match your application needs. - // For more information, see: https://flutter.dev/to/review-gradle-config. - minSdk = flutter.minSdkVersion - targetSdk = flutter.targetSdkVersion - versionCode = flutter.versionCode - versionName = flutter.versionName - } - - buildTypes { - release { - // TODO: Add your own signing config for the release build. - // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig = signingConfigs.debug - } - } -} - -flutter { - source = "../.." -} diff --git a/next-gen-ui/step_03_a/android/app/build.gradle.kts b/next-gen-ui/step_03_a/android/app/build.gradle.kts new file mode 100644 index 0000000000..7876ce7a57 --- /dev/null +++ b/next-gen-ui/step_03_a/android/app/build.gradle.kts @@ -0,0 +1,44 @@ +plugins { + id("com.android.application") + id("kotlin-android") + // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. + id("dev.flutter.flutter-gradle-plugin") +} + +android { + namespace = "com.example.next_gen_ui" + compileSdk = flutter.compileSdkVersion + ndkVersion = flutter.ndkVersion + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 + } + + kotlinOptions { + jvmTarget = JavaVersion.VERSION_1_8.toString() + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId = "com.example.next_gen_ui" + // You can update the following values to match your application needs. + // For more information, see: https://flutter.dev/to/review-gradle-config. + minSdk = flutter.minSdkVersion + targetSdk = flutter.targetSdkVersion + versionCode = flutter.versionCode + versionName = flutter.versionName + } + + buildTypes { + release { + // TODO: Add your own signing config for the release build. + // Signing with the debug keys for now, so `flutter run --release` works. + signingConfig = signingConfigs.getByName("debug") + } + } +} + +flutter { + source = "../.." +} diff --git a/next-gen-ui/step_03_a/android/build.gradle b/next-gen-ui/step_03_a/android/build.gradle deleted file mode 100644 index d2ffbffa4c..0000000000 --- a/next-gen-ui/step_03_a/android/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = "../build" -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(":app") -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/next-gen-ui/step_03_a/android/build.gradle.kts b/next-gen-ui/step_03_a/android/build.gradle.kts new file mode 100644 index 0000000000..89176ef44e --- /dev/null +++ b/next-gen-ui/step_03_a/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/next-gen-ui/step_03_a/android/gradle.properties b/next-gen-ui/step_03_a/android/gradle.properties index 2597170821..f018a61817 100644 --- a/next-gen-ui/step_03_a/android/gradle.properties +++ b/next-gen-ui/step_03_a/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/next-gen-ui/step_03_a/android/gradle/wrapper/gradle-wrapper.properties b/next-gen-ui/step_03_a/android/gradle/wrapper/gradle-wrapper.properties index 7bb2df6ba6..afa1e8eb0a 100644 --- a/next-gen-ui/step_03_a/android/gradle/wrapper/gradle-wrapper.properties +++ b/next-gen-ui/step_03_a/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip diff --git a/next-gen-ui/step_03_a/android/settings.gradle b/next-gen-ui/step_03_a/android/settings.gradle deleted file mode 100644 index b9e43bd376..0000000000 --- a/next-gen-ui/step_03_a/android/settings.gradle +++ /dev/null @@ -1,25 +0,0 @@ -pluginManagement { - def flutterSdkPath = { - def properties = new Properties() - file("local.properties").withInputStream { properties.load(it) } - def flutterSdkPath = properties.getProperty("flutter.sdk") - assert flutterSdkPath != null, "flutter.sdk not set in local.properties" - return flutterSdkPath - }() - - includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") - - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} - -plugins { - id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.1.0" apply false - id "org.jetbrains.kotlin.android" version "1.8.22" apply false -} - -include ":app" diff --git a/next-gen-ui/step_03_a/android/settings.gradle.kts b/next-gen-ui/step_03_a/android/settings.gradle.kts new file mode 100644 index 0000000000..a439442c20 --- /dev/null +++ b/next-gen-ui/step_03_a/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.0" apply false + id("org.jetbrains.kotlin.android") version "1.8.22" apply false +} + +include(":app") diff --git a/next-gen-ui/step_03_a/ios/Podfile b/next-gen-ui/step_03_a/ios/Podfile index d97f17e223..e549ee22f3 100644 --- a/next-gen-ui/step_03_a/ios/Podfile +++ b/next-gen-ui/step_03_a/ios/Podfile @@ -29,7 +29,6 @@ flutter_ios_podfile_setup target 'Runner' do use_frameworks! - use_modular_headers! flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) target 'RunnerTests' do diff --git a/next-gen-ui/step_03_a/ios/Runner.xcodeproj/project.pbxproj b/next-gen-ui/step_03_a/ios/Runner.xcodeproj/project.pbxproj index 8f047bdf00..e6e561d8b2 100644 --- a/next-gen-ui/step_03_a/ios/Runner.xcodeproj/project.pbxproj +++ b/next-gen-ui/step_03_a/ios/Runner.xcodeproj/project.pbxproj @@ -10,12 +10,12 @@ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; + 66AB0B66A73F1975E64A8177 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 20BB5BDAE26490ECF22F2507 /* Pods_RunnerTests.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - B62141185A2A64CE6AE671F2 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B1CF946366B840164A5B6A19 /* Pods_Runner.framework */; }; - B81AE38132A98A311F8F51B8 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 249FB81AECD9AE84FFA40AD0 /* Pods_RunnerTests.framework */; }; + CE4E96F7F9B6D48487EB3E31 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F57E7A6E02C2CD3ED18C8215 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,29 +42,29 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 0FBB97D3B77C3F8ABBBA69D1 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 1065108C466C107C635700F4 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 249FB81AECD9AE84FFA40AD0 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 174850BBD948073483DE44FD /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 20BB5BDAE26490ECF22F2507 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 29D2F0C3F335C05D8707828B /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 3440B8D33B7DF5E678FB8D73 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 5220EC7DF66B6FF52474A86B /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - 64F96334240D4715F67078C9 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 6641BE7C3FD295E85E2B1262 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 678B757D90C77B71F96114E8 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; + 943161019A9EC85C7A66EE19 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; - 9790F6561207E583E84D4FF9 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - B1CF946366B840164A5B6A19 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + C840685EE99E8FA6D49D591E /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + F57E7A6E02C2CD3ED18C8215 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -72,26 +72,26 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - B62141185A2A64CE6AE671F2 /* Pods_Runner.framework in Frameworks */, + CE4E96F7F9B6D48487EB3E31 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - C266D94F39398FF0845062EB /* Frameworks */ = { + D4AFF78F5AE2E8EE0BD7286F /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - B81AE38132A98A311F8F51B8 /* Pods_RunnerTests.framework in Frameworks */, + 66AB0B66A73F1975E64A8177 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 29779CA63CE39E764210D572 /* Frameworks */ = { + 1B41929933729C3C4452D755 /* Frameworks */ = { isa = PBXGroup; children = ( - B1CF946366B840164A5B6A19 /* Pods_Runner.framework */, - 249FB81AECD9AE84FFA40AD0 /* Pods_RunnerTests.framework */, + F57E7A6E02C2CD3ED18C8215 /* Pods_Runner.framework */, + 20BB5BDAE26490ECF22F2507 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -104,20 +104,6 @@ path = RunnerTests; sourceTree = ""; }; - 67CB01004931F5EAE1484002 /* Pods */ = { - isa = PBXGroup; - children = ( - 64F96334240D4715F67078C9 /* Pods-Runner.debug.xcconfig */, - 1065108C466C107C635700F4 /* Pods-Runner.release.xcconfig */, - 9790F6561207E583E84D4FF9 /* Pods-Runner.profile.xcconfig */, - 0FBB97D3B77C3F8ABBBA69D1 /* Pods-RunnerTests.debug.xcconfig */, - 5220EC7DF66B6FF52474A86B /* Pods-RunnerTests.release.xcconfig */, - 6641BE7C3FD295E85E2B1262 /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( @@ -136,8 +122,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - 67CB01004931F5EAE1484002 /* Pods */, - 29779CA63CE39E764210D572 /* Frameworks */, + CB8608376662DCF167CF091D /* Pods */, + 1B41929933729C3C4452D755 /* Frameworks */, ); sourceTree = ""; }; @@ -165,6 +151,20 @@ path = Runner; sourceTree = ""; }; + CB8608376662DCF167CF091D /* Pods */ = { + isa = PBXGroup; + children = ( + 678B757D90C77B71F96114E8 /* Pods-Runner.debug.xcconfig */, + 3440B8D33B7DF5E678FB8D73 /* Pods-Runner.release.xcconfig */, + 174850BBD948073483DE44FD /* Pods-Runner.profile.xcconfig */, + 29D2F0C3F335C05D8707828B /* Pods-RunnerTests.debug.xcconfig */, + 943161019A9EC85C7A66EE19 /* Pods-RunnerTests.release.xcconfig */, + C840685EE99E8FA6D49D591E /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 1A41435D909B4A5BA59DA804 /* [CP] Check Pods Manifest.lock */, + AC04A6680CE49A8AB43B1FFA /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - C266D94F39398FF0845062EB /* Frameworks */, + D4AFF78F5AE2E8EE0BD7286F /* Frameworks */, ); buildRules = ( ); @@ -191,7 +191,7 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 15FA0791F2F6E4DEC3602581 /* [CP] Check Pods Manifest.lock */, + 214492064922C9E65703CF3F /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, @@ -269,7 +269,7 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 15FA0791F2F6E4DEC3602581 /* [CP] Check Pods Manifest.lock */ = { + 214492064922C9E65703CF3F /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -291,58 +291,58 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 1A41435D909B4A5BA59DA804 /* [CP] Check Pods Manifest.lock */ = { + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); + name = "Thin Binary"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputPaths = ( - "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); - name = "Thin Binary"; + name = "Run Script"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { + AC04A6680CE49A8AB43B1FFA /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "Run Script"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -469,7 +469,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 0FBB97D3B77C3F8ABBBA69D1 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 29D2F0C3F335C05D8707828B /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -487,7 +487,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 5220EC7DF66B6FF52474A86B /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 943161019A9EC85C7A66EE19 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -503,7 +503,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 6641BE7C3FD295E85E2B1262 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = C840685EE99E8FA6D49D591E /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/next-gen-ui/step_03_a/macos/Podfile b/next-gen-ui/step_03_a/macos/Podfile index c795730db8..29c8eb3294 100644 --- a/next-gen-ui/step_03_a/macos/Podfile +++ b/next-gen-ui/step_03_a/macos/Podfile @@ -28,7 +28,6 @@ flutter_macos_podfile_setup target 'Runner' do use_frameworks! - use_modular_headers! flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__)) target 'RunnerTests' do diff --git a/next-gen-ui/step_03_a/macos/Runner.xcodeproj/project.pbxproj b/next-gen-ui/step_03_a/macos/Runner.xcodeproj/project.pbxproj index 5ca8a3231e..4579683b58 100644 --- a/next-gen-ui/step_03_a/macos/Runner.xcodeproj/project.pbxproj +++ b/next-gen-ui/step_03_a/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ - 2E6B87224BF317E31F74B0D6 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FF5748F504BD5E56042DEADB /* Pods_RunnerTests.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 56635C0EC97E7F426A37B2E0 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 70907F10D88B462804477CEC /* Pods_Runner.framework */; }; + 36138DB3332DEE6FFE0E1FE3 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2A728D4E207B0278F8F9C593 /* Pods_Runner.framework */; }; + 52B0D23BFA4C286CA0E41B69 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0A2DA58632C7ECDDC6F5CE67 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,8 +62,9 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 1084579C46BDDCE9E7DF16AC /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 2D475486DFFA8C60E5710DB0 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 0A2DA58632C7ECDDC6F5CE67 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 0D3D188B329D045CE36B21CF /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 2A728D4E207B0278F8F9C593 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -80,14 +81,13 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 70907F10D88B462804477CEC /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 812DEB8E378C986DF221D831 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - 86295B0784C4F550CBE8BD69 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 949451BBF3DF607E13DBB265 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 913FEB323BDFFD347FB2351B /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - E57940CC1AE193EDBC7E60BC /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - FF5748F504BD5E56042DEADB /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + B0D72C78FFC1C48205B1AD6E /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + BFB07E0B350C6948876BAE8A /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + C3E70C64D6EEF1D329D99AEA /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + E7724C6A3503B208E4E9A53C /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 2E6B87224BF317E31F74B0D6 /* Pods_RunnerTests.framework in Frameworks */, + 52B0D23BFA4C286CA0E41B69 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,27 +103,13 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 56635C0EC97E7F426A37B2E0 /* Pods_Runner.framework in Frameworks */, + 36138DB3332DEE6FFE0E1FE3 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 0EB950B6EBBA8562ED05E9C6 /* Pods */ = { - isa = PBXGroup; - children = ( - 1084579C46BDDCE9E7DF16AC /* Pods-Runner.debug.xcconfig */, - 2D475486DFFA8C60E5710DB0 /* Pods-Runner.release.xcconfig */, - E57940CC1AE193EDBC7E60BC /* Pods-Runner.profile.xcconfig */, - 86295B0784C4F550CBE8BD69 /* Pods-RunnerTests.debug.xcconfig */, - 949451BBF3DF607E13DBB265 /* Pods-RunnerTests.release.xcconfig */, - 812DEB8E378C986DF221D831 /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; 331C80D6294CF71000263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -151,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 0EB950B6EBBA8562ED05E9C6 /* Pods */, + E6BCE486B4BBFADC211C60FF /* Pods */, ); sourceTree = ""; }; @@ -202,12 +188,26 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - 70907F10D88B462804477CEC /* Pods_Runner.framework */, - FF5748F504BD5E56042DEADB /* Pods_RunnerTests.framework */, + 2A728D4E207B0278F8F9C593 /* Pods_Runner.framework */, + 0A2DA58632C7ECDDC6F5CE67 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; }; + E6BCE486B4BBFADC211C60FF /* Pods */ = { + isa = PBXGroup; + children = ( + E7724C6A3503B208E4E9A53C /* Pods-Runner.debug.xcconfig */, + 913FEB323BDFFD347FB2351B /* Pods-Runner.release.xcconfig */, + B0D72C78FFC1C48205B1AD6E /* Pods-Runner.profile.xcconfig */, + C3E70C64D6EEF1D329D99AEA /* Pods-RunnerTests.debug.xcconfig */, + 0D3D188B329D045CE36B21CF /* Pods-RunnerTests.release.xcconfig */, + BFB07E0B350C6948876BAE8A /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 24CA264AC7C1AA37F685BC19 /* [CP] Check Pods Manifest.lock */, + 8915FA819FCC8B1FF9C2CD9A /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 9936C57FFCBF37419AE7561E /* [CP] Check Pods Manifest.lock */, + E5CD31409482E85EF68F0E33 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 038DC0986A46E5F2839BD12E /* [CP] Embed Pods Frameworks */, + 8C531C68C243175172E5DA1B /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,84 +323,84 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 038DC0986A46E5F2839BD12E /* [CP] Embed Pods Frameworks */ = { + 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + ); outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; + shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; }; - 24CA264AC7C1AA37F685BC19 /* [CP] Check Pods Manifest.lock */ = { + 33CC111E2044C6BF0003C045 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + Flutter/ephemeral/FlutterInputs.xcfilelist, ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", + Flutter/ephemeral/tripwire, ); - name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( + Flutter/ephemeral/FlutterOutputs.xcfilelist, ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 3399D490228B24CF009A79C7 /* ShellScript */ = { + 8915FA819FCC8B1FF9C2CD9A /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( ); outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - 33CC111E2044C6BF0003C045 /* ShellScript */ = { + 8C531C68C243175172E5DA1B /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - Flutter/ephemeral/FlutterInputs.xcfilelist, - ); - inputPaths = ( - Flutter/ephemeral/tripwire, + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - Flutter/ephemeral/FlutterOutputs.xcfilelist, - ); - outputPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; }; - 9936C57FFCBF37419AE7561E /* [CP] Check Pods Manifest.lock */ = { + E5CD31409482E85EF68F0E33 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 86295B0784C4F550CBE8BD69 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = C3E70C64D6EEF1D329D99AEA /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 949451BBF3DF607E13DBB265 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 0D3D188B329D045CE36B21CF /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 812DEB8E378C986DF221D831 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = BFB07E0B350C6948876BAE8A /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/next-gen-ui/step_03_b/android/app/build.gradle b/next-gen-ui/step_03_b/android/app/build.gradle deleted file mode 100644 index b6fad008f9..0000000000 --- a/next-gen-ui/step_03_b/android/app/build.gradle +++ /dev/null @@ -1,44 +0,0 @@ -plugins { - id "com.android.application" - id "kotlin-android" - // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. - id "dev.flutter.flutter-gradle-plugin" -} - -android { - namespace = "com.example.next_gen_ui" - compileSdk = flutter.compileSdkVersion - ndkVersion = flutter.ndkVersion - - compileOptions { - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 - } - - kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8 - } - - defaultConfig { - // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). - applicationId = "com.example.next_gen_ui" - // You can update the following values to match your application needs. - // For more information, see: https://flutter.dev/to/review-gradle-config. - minSdk = flutter.minSdkVersion - targetSdk = flutter.targetSdkVersion - versionCode = flutter.versionCode - versionName = flutter.versionName - } - - buildTypes { - release { - // TODO: Add your own signing config for the release build. - // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig = signingConfigs.debug - } - } -} - -flutter { - source = "../.." -} diff --git a/next-gen-ui/step_03_b/android/app/build.gradle.kts b/next-gen-ui/step_03_b/android/app/build.gradle.kts new file mode 100644 index 0000000000..7876ce7a57 --- /dev/null +++ b/next-gen-ui/step_03_b/android/app/build.gradle.kts @@ -0,0 +1,44 @@ +plugins { + id("com.android.application") + id("kotlin-android") + // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. + id("dev.flutter.flutter-gradle-plugin") +} + +android { + namespace = "com.example.next_gen_ui" + compileSdk = flutter.compileSdkVersion + ndkVersion = flutter.ndkVersion + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 + } + + kotlinOptions { + jvmTarget = JavaVersion.VERSION_1_8.toString() + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId = "com.example.next_gen_ui" + // You can update the following values to match your application needs. + // For more information, see: https://flutter.dev/to/review-gradle-config. + minSdk = flutter.minSdkVersion + targetSdk = flutter.targetSdkVersion + versionCode = flutter.versionCode + versionName = flutter.versionName + } + + buildTypes { + release { + // TODO: Add your own signing config for the release build. + // Signing with the debug keys for now, so `flutter run --release` works. + signingConfig = signingConfigs.getByName("debug") + } + } +} + +flutter { + source = "../.." +} diff --git a/next-gen-ui/step_03_b/android/build.gradle b/next-gen-ui/step_03_b/android/build.gradle deleted file mode 100644 index d2ffbffa4c..0000000000 --- a/next-gen-ui/step_03_b/android/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = "../build" -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(":app") -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/next-gen-ui/step_03_b/android/build.gradle.kts b/next-gen-ui/step_03_b/android/build.gradle.kts new file mode 100644 index 0000000000..89176ef44e --- /dev/null +++ b/next-gen-ui/step_03_b/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/next-gen-ui/step_03_b/android/gradle.properties b/next-gen-ui/step_03_b/android/gradle.properties index 2597170821..f018a61817 100644 --- a/next-gen-ui/step_03_b/android/gradle.properties +++ b/next-gen-ui/step_03_b/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/next-gen-ui/step_03_b/android/gradle/wrapper/gradle-wrapper.properties b/next-gen-ui/step_03_b/android/gradle/wrapper/gradle-wrapper.properties index 7bb2df6ba6..afa1e8eb0a 100644 --- a/next-gen-ui/step_03_b/android/gradle/wrapper/gradle-wrapper.properties +++ b/next-gen-ui/step_03_b/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip diff --git a/next-gen-ui/step_03_b/android/settings.gradle b/next-gen-ui/step_03_b/android/settings.gradle deleted file mode 100644 index b9e43bd376..0000000000 --- a/next-gen-ui/step_03_b/android/settings.gradle +++ /dev/null @@ -1,25 +0,0 @@ -pluginManagement { - def flutterSdkPath = { - def properties = new Properties() - file("local.properties").withInputStream { properties.load(it) } - def flutterSdkPath = properties.getProperty("flutter.sdk") - assert flutterSdkPath != null, "flutter.sdk not set in local.properties" - return flutterSdkPath - }() - - includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") - - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} - -plugins { - id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.1.0" apply false - id "org.jetbrains.kotlin.android" version "1.8.22" apply false -} - -include ":app" diff --git a/next-gen-ui/step_03_b/android/settings.gradle.kts b/next-gen-ui/step_03_b/android/settings.gradle.kts new file mode 100644 index 0000000000..a439442c20 --- /dev/null +++ b/next-gen-ui/step_03_b/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.0" apply false + id("org.jetbrains.kotlin.android") version "1.8.22" apply false +} + +include(":app") diff --git a/next-gen-ui/step_03_b/ios/Podfile b/next-gen-ui/step_03_b/ios/Podfile index d97f17e223..e549ee22f3 100644 --- a/next-gen-ui/step_03_b/ios/Podfile +++ b/next-gen-ui/step_03_b/ios/Podfile @@ -29,7 +29,6 @@ flutter_ios_podfile_setup target 'Runner' do use_frameworks! - use_modular_headers! flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) target 'RunnerTests' do diff --git a/next-gen-ui/step_03_b/ios/Runner.xcodeproj/project.pbxproj b/next-gen-ui/step_03_b/ios/Runner.xcodeproj/project.pbxproj index 8f047bdf00..e6e561d8b2 100644 --- a/next-gen-ui/step_03_b/ios/Runner.xcodeproj/project.pbxproj +++ b/next-gen-ui/step_03_b/ios/Runner.xcodeproj/project.pbxproj @@ -10,12 +10,12 @@ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; + 66AB0B66A73F1975E64A8177 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 20BB5BDAE26490ECF22F2507 /* Pods_RunnerTests.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - B62141185A2A64CE6AE671F2 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B1CF946366B840164A5B6A19 /* Pods_Runner.framework */; }; - B81AE38132A98A311F8F51B8 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 249FB81AECD9AE84FFA40AD0 /* Pods_RunnerTests.framework */; }; + CE4E96F7F9B6D48487EB3E31 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F57E7A6E02C2CD3ED18C8215 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,29 +42,29 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 0FBB97D3B77C3F8ABBBA69D1 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 1065108C466C107C635700F4 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 249FB81AECD9AE84FFA40AD0 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 174850BBD948073483DE44FD /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 20BB5BDAE26490ECF22F2507 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 29D2F0C3F335C05D8707828B /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 3440B8D33B7DF5E678FB8D73 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 5220EC7DF66B6FF52474A86B /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - 64F96334240D4715F67078C9 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 6641BE7C3FD295E85E2B1262 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 678B757D90C77B71F96114E8 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; + 943161019A9EC85C7A66EE19 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; - 9790F6561207E583E84D4FF9 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - B1CF946366B840164A5B6A19 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + C840685EE99E8FA6D49D591E /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + F57E7A6E02C2CD3ED18C8215 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -72,26 +72,26 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - B62141185A2A64CE6AE671F2 /* Pods_Runner.framework in Frameworks */, + CE4E96F7F9B6D48487EB3E31 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - C266D94F39398FF0845062EB /* Frameworks */ = { + D4AFF78F5AE2E8EE0BD7286F /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - B81AE38132A98A311F8F51B8 /* Pods_RunnerTests.framework in Frameworks */, + 66AB0B66A73F1975E64A8177 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 29779CA63CE39E764210D572 /* Frameworks */ = { + 1B41929933729C3C4452D755 /* Frameworks */ = { isa = PBXGroup; children = ( - B1CF946366B840164A5B6A19 /* Pods_Runner.framework */, - 249FB81AECD9AE84FFA40AD0 /* Pods_RunnerTests.framework */, + F57E7A6E02C2CD3ED18C8215 /* Pods_Runner.framework */, + 20BB5BDAE26490ECF22F2507 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -104,20 +104,6 @@ path = RunnerTests; sourceTree = ""; }; - 67CB01004931F5EAE1484002 /* Pods */ = { - isa = PBXGroup; - children = ( - 64F96334240D4715F67078C9 /* Pods-Runner.debug.xcconfig */, - 1065108C466C107C635700F4 /* Pods-Runner.release.xcconfig */, - 9790F6561207E583E84D4FF9 /* Pods-Runner.profile.xcconfig */, - 0FBB97D3B77C3F8ABBBA69D1 /* Pods-RunnerTests.debug.xcconfig */, - 5220EC7DF66B6FF52474A86B /* Pods-RunnerTests.release.xcconfig */, - 6641BE7C3FD295E85E2B1262 /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( @@ -136,8 +122,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - 67CB01004931F5EAE1484002 /* Pods */, - 29779CA63CE39E764210D572 /* Frameworks */, + CB8608376662DCF167CF091D /* Pods */, + 1B41929933729C3C4452D755 /* Frameworks */, ); sourceTree = ""; }; @@ -165,6 +151,20 @@ path = Runner; sourceTree = ""; }; + CB8608376662DCF167CF091D /* Pods */ = { + isa = PBXGroup; + children = ( + 678B757D90C77B71F96114E8 /* Pods-Runner.debug.xcconfig */, + 3440B8D33B7DF5E678FB8D73 /* Pods-Runner.release.xcconfig */, + 174850BBD948073483DE44FD /* Pods-Runner.profile.xcconfig */, + 29D2F0C3F335C05D8707828B /* Pods-RunnerTests.debug.xcconfig */, + 943161019A9EC85C7A66EE19 /* Pods-RunnerTests.release.xcconfig */, + C840685EE99E8FA6D49D591E /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 1A41435D909B4A5BA59DA804 /* [CP] Check Pods Manifest.lock */, + AC04A6680CE49A8AB43B1FFA /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - C266D94F39398FF0845062EB /* Frameworks */, + D4AFF78F5AE2E8EE0BD7286F /* Frameworks */, ); buildRules = ( ); @@ -191,7 +191,7 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 15FA0791F2F6E4DEC3602581 /* [CP] Check Pods Manifest.lock */, + 214492064922C9E65703CF3F /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, @@ -269,7 +269,7 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 15FA0791F2F6E4DEC3602581 /* [CP] Check Pods Manifest.lock */ = { + 214492064922C9E65703CF3F /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -291,58 +291,58 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 1A41435D909B4A5BA59DA804 /* [CP] Check Pods Manifest.lock */ = { + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); + name = "Thin Binary"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputPaths = ( - "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); - name = "Thin Binary"; + name = "Run Script"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { + AC04A6680CE49A8AB43B1FFA /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "Run Script"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -469,7 +469,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 0FBB97D3B77C3F8ABBBA69D1 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 29D2F0C3F335C05D8707828B /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -487,7 +487,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 5220EC7DF66B6FF52474A86B /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 943161019A9EC85C7A66EE19 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -503,7 +503,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 6641BE7C3FD295E85E2B1262 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = C840685EE99E8FA6D49D591E /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/next-gen-ui/step_03_b/macos/Podfile b/next-gen-ui/step_03_b/macos/Podfile index c795730db8..29c8eb3294 100644 --- a/next-gen-ui/step_03_b/macos/Podfile +++ b/next-gen-ui/step_03_b/macos/Podfile @@ -28,7 +28,6 @@ flutter_macos_podfile_setup target 'Runner' do use_frameworks! - use_modular_headers! flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__)) target 'RunnerTests' do diff --git a/next-gen-ui/step_03_b/macos/Runner.xcodeproj/project.pbxproj b/next-gen-ui/step_03_b/macos/Runner.xcodeproj/project.pbxproj index 5ca8a3231e..4579683b58 100644 --- a/next-gen-ui/step_03_b/macos/Runner.xcodeproj/project.pbxproj +++ b/next-gen-ui/step_03_b/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ - 2E6B87224BF317E31F74B0D6 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FF5748F504BD5E56042DEADB /* Pods_RunnerTests.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 56635C0EC97E7F426A37B2E0 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 70907F10D88B462804477CEC /* Pods_Runner.framework */; }; + 36138DB3332DEE6FFE0E1FE3 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2A728D4E207B0278F8F9C593 /* Pods_Runner.framework */; }; + 52B0D23BFA4C286CA0E41B69 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0A2DA58632C7ECDDC6F5CE67 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,8 +62,9 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 1084579C46BDDCE9E7DF16AC /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 2D475486DFFA8C60E5710DB0 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 0A2DA58632C7ECDDC6F5CE67 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 0D3D188B329D045CE36B21CF /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 2A728D4E207B0278F8F9C593 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -80,14 +81,13 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 70907F10D88B462804477CEC /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 812DEB8E378C986DF221D831 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - 86295B0784C4F550CBE8BD69 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 949451BBF3DF607E13DBB265 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 913FEB323BDFFD347FB2351B /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - E57940CC1AE193EDBC7E60BC /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - FF5748F504BD5E56042DEADB /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + B0D72C78FFC1C48205B1AD6E /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + BFB07E0B350C6948876BAE8A /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + C3E70C64D6EEF1D329D99AEA /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + E7724C6A3503B208E4E9A53C /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 2E6B87224BF317E31F74B0D6 /* Pods_RunnerTests.framework in Frameworks */, + 52B0D23BFA4C286CA0E41B69 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,27 +103,13 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 56635C0EC97E7F426A37B2E0 /* Pods_Runner.framework in Frameworks */, + 36138DB3332DEE6FFE0E1FE3 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 0EB950B6EBBA8562ED05E9C6 /* Pods */ = { - isa = PBXGroup; - children = ( - 1084579C46BDDCE9E7DF16AC /* Pods-Runner.debug.xcconfig */, - 2D475486DFFA8C60E5710DB0 /* Pods-Runner.release.xcconfig */, - E57940CC1AE193EDBC7E60BC /* Pods-Runner.profile.xcconfig */, - 86295B0784C4F550CBE8BD69 /* Pods-RunnerTests.debug.xcconfig */, - 949451BBF3DF607E13DBB265 /* Pods-RunnerTests.release.xcconfig */, - 812DEB8E378C986DF221D831 /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; 331C80D6294CF71000263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -151,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 0EB950B6EBBA8562ED05E9C6 /* Pods */, + E6BCE486B4BBFADC211C60FF /* Pods */, ); sourceTree = ""; }; @@ -202,12 +188,26 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - 70907F10D88B462804477CEC /* Pods_Runner.framework */, - FF5748F504BD5E56042DEADB /* Pods_RunnerTests.framework */, + 2A728D4E207B0278F8F9C593 /* Pods_Runner.framework */, + 0A2DA58632C7ECDDC6F5CE67 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; }; + E6BCE486B4BBFADC211C60FF /* Pods */ = { + isa = PBXGroup; + children = ( + E7724C6A3503B208E4E9A53C /* Pods-Runner.debug.xcconfig */, + 913FEB323BDFFD347FB2351B /* Pods-Runner.release.xcconfig */, + B0D72C78FFC1C48205B1AD6E /* Pods-Runner.profile.xcconfig */, + C3E70C64D6EEF1D329D99AEA /* Pods-RunnerTests.debug.xcconfig */, + 0D3D188B329D045CE36B21CF /* Pods-RunnerTests.release.xcconfig */, + BFB07E0B350C6948876BAE8A /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 24CA264AC7C1AA37F685BC19 /* [CP] Check Pods Manifest.lock */, + 8915FA819FCC8B1FF9C2CD9A /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 9936C57FFCBF37419AE7561E /* [CP] Check Pods Manifest.lock */, + E5CD31409482E85EF68F0E33 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 038DC0986A46E5F2839BD12E /* [CP] Embed Pods Frameworks */, + 8C531C68C243175172E5DA1B /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,84 +323,84 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 038DC0986A46E5F2839BD12E /* [CP] Embed Pods Frameworks */ = { + 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + ); outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; + shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; }; - 24CA264AC7C1AA37F685BC19 /* [CP] Check Pods Manifest.lock */ = { + 33CC111E2044C6BF0003C045 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + Flutter/ephemeral/FlutterInputs.xcfilelist, ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", + Flutter/ephemeral/tripwire, ); - name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( + Flutter/ephemeral/FlutterOutputs.xcfilelist, ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 3399D490228B24CF009A79C7 /* ShellScript */ = { + 8915FA819FCC8B1FF9C2CD9A /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( ); outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - 33CC111E2044C6BF0003C045 /* ShellScript */ = { + 8C531C68C243175172E5DA1B /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - Flutter/ephemeral/FlutterInputs.xcfilelist, - ); - inputPaths = ( - Flutter/ephemeral/tripwire, + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - Flutter/ephemeral/FlutterOutputs.xcfilelist, - ); - outputPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; }; - 9936C57FFCBF37419AE7561E /* [CP] Check Pods Manifest.lock */ = { + E5CD31409482E85EF68F0E33 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 86295B0784C4F550CBE8BD69 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = C3E70C64D6EEF1D329D99AEA /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 949451BBF3DF607E13DBB265 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 0D3D188B329D045CE36B21CF /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 812DEB8E378C986DF221D831 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = BFB07E0B350C6948876BAE8A /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/next-gen-ui/step_03_c/android/app/build.gradle b/next-gen-ui/step_03_c/android/app/build.gradle deleted file mode 100644 index b6fad008f9..0000000000 --- a/next-gen-ui/step_03_c/android/app/build.gradle +++ /dev/null @@ -1,44 +0,0 @@ -plugins { - id "com.android.application" - id "kotlin-android" - // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. - id "dev.flutter.flutter-gradle-plugin" -} - -android { - namespace = "com.example.next_gen_ui" - compileSdk = flutter.compileSdkVersion - ndkVersion = flutter.ndkVersion - - compileOptions { - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 - } - - kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8 - } - - defaultConfig { - // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). - applicationId = "com.example.next_gen_ui" - // You can update the following values to match your application needs. - // For more information, see: https://flutter.dev/to/review-gradle-config. - minSdk = flutter.minSdkVersion - targetSdk = flutter.targetSdkVersion - versionCode = flutter.versionCode - versionName = flutter.versionName - } - - buildTypes { - release { - // TODO: Add your own signing config for the release build. - // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig = signingConfigs.debug - } - } -} - -flutter { - source = "../.." -} diff --git a/next-gen-ui/step_03_c/android/app/build.gradle.kts b/next-gen-ui/step_03_c/android/app/build.gradle.kts new file mode 100644 index 0000000000..7876ce7a57 --- /dev/null +++ b/next-gen-ui/step_03_c/android/app/build.gradle.kts @@ -0,0 +1,44 @@ +plugins { + id("com.android.application") + id("kotlin-android") + // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. + id("dev.flutter.flutter-gradle-plugin") +} + +android { + namespace = "com.example.next_gen_ui" + compileSdk = flutter.compileSdkVersion + ndkVersion = flutter.ndkVersion + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 + } + + kotlinOptions { + jvmTarget = JavaVersion.VERSION_1_8.toString() + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId = "com.example.next_gen_ui" + // You can update the following values to match your application needs. + // For more information, see: https://flutter.dev/to/review-gradle-config. + minSdk = flutter.minSdkVersion + targetSdk = flutter.targetSdkVersion + versionCode = flutter.versionCode + versionName = flutter.versionName + } + + buildTypes { + release { + // TODO: Add your own signing config for the release build. + // Signing with the debug keys for now, so `flutter run --release` works. + signingConfig = signingConfigs.getByName("debug") + } + } +} + +flutter { + source = "../.." +} diff --git a/next-gen-ui/step_03_c/android/build.gradle b/next-gen-ui/step_03_c/android/build.gradle deleted file mode 100644 index d2ffbffa4c..0000000000 --- a/next-gen-ui/step_03_c/android/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = "../build" -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(":app") -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/next-gen-ui/step_03_c/android/build.gradle.kts b/next-gen-ui/step_03_c/android/build.gradle.kts new file mode 100644 index 0000000000..89176ef44e --- /dev/null +++ b/next-gen-ui/step_03_c/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/next-gen-ui/step_03_c/android/gradle.properties b/next-gen-ui/step_03_c/android/gradle.properties index 2597170821..f018a61817 100644 --- a/next-gen-ui/step_03_c/android/gradle.properties +++ b/next-gen-ui/step_03_c/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/next-gen-ui/step_03_c/android/gradle/wrapper/gradle-wrapper.properties b/next-gen-ui/step_03_c/android/gradle/wrapper/gradle-wrapper.properties index 7bb2df6ba6..afa1e8eb0a 100644 --- a/next-gen-ui/step_03_c/android/gradle/wrapper/gradle-wrapper.properties +++ b/next-gen-ui/step_03_c/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip diff --git a/next-gen-ui/step_03_c/android/settings.gradle b/next-gen-ui/step_03_c/android/settings.gradle deleted file mode 100644 index b9e43bd376..0000000000 --- a/next-gen-ui/step_03_c/android/settings.gradle +++ /dev/null @@ -1,25 +0,0 @@ -pluginManagement { - def flutterSdkPath = { - def properties = new Properties() - file("local.properties").withInputStream { properties.load(it) } - def flutterSdkPath = properties.getProperty("flutter.sdk") - assert flutterSdkPath != null, "flutter.sdk not set in local.properties" - return flutterSdkPath - }() - - includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") - - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} - -plugins { - id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.1.0" apply false - id "org.jetbrains.kotlin.android" version "1.8.22" apply false -} - -include ":app" diff --git a/next-gen-ui/step_03_c/android/settings.gradle.kts b/next-gen-ui/step_03_c/android/settings.gradle.kts new file mode 100644 index 0000000000..a439442c20 --- /dev/null +++ b/next-gen-ui/step_03_c/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.0" apply false + id("org.jetbrains.kotlin.android") version "1.8.22" apply false +} + +include(":app") diff --git a/next-gen-ui/step_03_c/ios/Podfile b/next-gen-ui/step_03_c/ios/Podfile index d97f17e223..e549ee22f3 100644 --- a/next-gen-ui/step_03_c/ios/Podfile +++ b/next-gen-ui/step_03_c/ios/Podfile @@ -29,7 +29,6 @@ flutter_ios_podfile_setup target 'Runner' do use_frameworks! - use_modular_headers! flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) target 'RunnerTests' do diff --git a/next-gen-ui/step_03_c/ios/Runner.xcodeproj/project.pbxproj b/next-gen-ui/step_03_c/ios/Runner.xcodeproj/project.pbxproj index 8f047bdf00..e6e561d8b2 100644 --- a/next-gen-ui/step_03_c/ios/Runner.xcodeproj/project.pbxproj +++ b/next-gen-ui/step_03_c/ios/Runner.xcodeproj/project.pbxproj @@ -10,12 +10,12 @@ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; + 66AB0B66A73F1975E64A8177 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 20BB5BDAE26490ECF22F2507 /* Pods_RunnerTests.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - B62141185A2A64CE6AE671F2 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B1CF946366B840164A5B6A19 /* Pods_Runner.framework */; }; - B81AE38132A98A311F8F51B8 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 249FB81AECD9AE84FFA40AD0 /* Pods_RunnerTests.framework */; }; + CE4E96F7F9B6D48487EB3E31 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F57E7A6E02C2CD3ED18C8215 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,29 +42,29 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 0FBB97D3B77C3F8ABBBA69D1 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 1065108C466C107C635700F4 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 249FB81AECD9AE84FFA40AD0 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 174850BBD948073483DE44FD /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 20BB5BDAE26490ECF22F2507 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 29D2F0C3F335C05D8707828B /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 3440B8D33B7DF5E678FB8D73 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 5220EC7DF66B6FF52474A86B /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - 64F96334240D4715F67078C9 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 6641BE7C3FD295E85E2B1262 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 678B757D90C77B71F96114E8 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; + 943161019A9EC85C7A66EE19 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; - 9790F6561207E583E84D4FF9 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - B1CF946366B840164A5B6A19 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + C840685EE99E8FA6D49D591E /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + F57E7A6E02C2CD3ED18C8215 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -72,26 +72,26 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - B62141185A2A64CE6AE671F2 /* Pods_Runner.framework in Frameworks */, + CE4E96F7F9B6D48487EB3E31 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - C266D94F39398FF0845062EB /* Frameworks */ = { + D4AFF78F5AE2E8EE0BD7286F /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - B81AE38132A98A311F8F51B8 /* Pods_RunnerTests.framework in Frameworks */, + 66AB0B66A73F1975E64A8177 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 29779CA63CE39E764210D572 /* Frameworks */ = { + 1B41929933729C3C4452D755 /* Frameworks */ = { isa = PBXGroup; children = ( - B1CF946366B840164A5B6A19 /* Pods_Runner.framework */, - 249FB81AECD9AE84FFA40AD0 /* Pods_RunnerTests.framework */, + F57E7A6E02C2CD3ED18C8215 /* Pods_Runner.framework */, + 20BB5BDAE26490ECF22F2507 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -104,20 +104,6 @@ path = RunnerTests; sourceTree = ""; }; - 67CB01004931F5EAE1484002 /* Pods */ = { - isa = PBXGroup; - children = ( - 64F96334240D4715F67078C9 /* Pods-Runner.debug.xcconfig */, - 1065108C466C107C635700F4 /* Pods-Runner.release.xcconfig */, - 9790F6561207E583E84D4FF9 /* Pods-Runner.profile.xcconfig */, - 0FBB97D3B77C3F8ABBBA69D1 /* Pods-RunnerTests.debug.xcconfig */, - 5220EC7DF66B6FF52474A86B /* Pods-RunnerTests.release.xcconfig */, - 6641BE7C3FD295E85E2B1262 /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( @@ -136,8 +122,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - 67CB01004931F5EAE1484002 /* Pods */, - 29779CA63CE39E764210D572 /* Frameworks */, + CB8608376662DCF167CF091D /* Pods */, + 1B41929933729C3C4452D755 /* Frameworks */, ); sourceTree = ""; }; @@ -165,6 +151,20 @@ path = Runner; sourceTree = ""; }; + CB8608376662DCF167CF091D /* Pods */ = { + isa = PBXGroup; + children = ( + 678B757D90C77B71F96114E8 /* Pods-Runner.debug.xcconfig */, + 3440B8D33B7DF5E678FB8D73 /* Pods-Runner.release.xcconfig */, + 174850BBD948073483DE44FD /* Pods-Runner.profile.xcconfig */, + 29D2F0C3F335C05D8707828B /* Pods-RunnerTests.debug.xcconfig */, + 943161019A9EC85C7A66EE19 /* Pods-RunnerTests.release.xcconfig */, + C840685EE99E8FA6D49D591E /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 1A41435D909B4A5BA59DA804 /* [CP] Check Pods Manifest.lock */, + AC04A6680CE49A8AB43B1FFA /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - C266D94F39398FF0845062EB /* Frameworks */, + D4AFF78F5AE2E8EE0BD7286F /* Frameworks */, ); buildRules = ( ); @@ -191,7 +191,7 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 15FA0791F2F6E4DEC3602581 /* [CP] Check Pods Manifest.lock */, + 214492064922C9E65703CF3F /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, @@ -269,7 +269,7 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 15FA0791F2F6E4DEC3602581 /* [CP] Check Pods Manifest.lock */ = { + 214492064922C9E65703CF3F /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -291,58 +291,58 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 1A41435D909B4A5BA59DA804 /* [CP] Check Pods Manifest.lock */ = { + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); + name = "Thin Binary"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputPaths = ( - "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); - name = "Thin Binary"; + name = "Run Script"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { + AC04A6680CE49A8AB43B1FFA /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "Run Script"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -469,7 +469,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 0FBB97D3B77C3F8ABBBA69D1 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 29D2F0C3F335C05D8707828B /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -487,7 +487,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 5220EC7DF66B6FF52474A86B /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 943161019A9EC85C7A66EE19 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -503,7 +503,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 6641BE7C3FD295E85E2B1262 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = C840685EE99E8FA6D49D591E /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/next-gen-ui/step_03_c/macos/Podfile b/next-gen-ui/step_03_c/macos/Podfile index c795730db8..29c8eb3294 100644 --- a/next-gen-ui/step_03_c/macos/Podfile +++ b/next-gen-ui/step_03_c/macos/Podfile @@ -28,7 +28,6 @@ flutter_macos_podfile_setup target 'Runner' do use_frameworks! - use_modular_headers! flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__)) target 'RunnerTests' do diff --git a/next-gen-ui/step_03_c/macos/Runner.xcodeproj/project.pbxproj b/next-gen-ui/step_03_c/macos/Runner.xcodeproj/project.pbxproj index 5ca8a3231e..4579683b58 100644 --- a/next-gen-ui/step_03_c/macos/Runner.xcodeproj/project.pbxproj +++ b/next-gen-ui/step_03_c/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ - 2E6B87224BF317E31F74B0D6 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FF5748F504BD5E56042DEADB /* Pods_RunnerTests.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 56635C0EC97E7F426A37B2E0 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 70907F10D88B462804477CEC /* Pods_Runner.framework */; }; + 36138DB3332DEE6FFE0E1FE3 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2A728D4E207B0278F8F9C593 /* Pods_Runner.framework */; }; + 52B0D23BFA4C286CA0E41B69 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0A2DA58632C7ECDDC6F5CE67 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,8 +62,9 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 1084579C46BDDCE9E7DF16AC /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 2D475486DFFA8C60E5710DB0 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 0A2DA58632C7ECDDC6F5CE67 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 0D3D188B329D045CE36B21CF /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 2A728D4E207B0278F8F9C593 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -80,14 +81,13 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 70907F10D88B462804477CEC /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 812DEB8E378C986DF221D831 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - 86295B0784C4F550CBE8BD69 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 949451BBF3DF607E13DBB265 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 913FEB323BDFFD347FB2351B /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - E57940CC1AE193EDBC7E60BC /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - FF5748F504BD5E56042DEADB /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + B0D72C78FFC1C48205B1AD6E /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + BFB07E0B350C6948876BAE8A /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + C3E70C64D6EEF1D329D99AEA /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + E7724C6A3503B208E4E9A53C /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 2E6B87224BF317E31F74B0D6 /* Pods_RunnerTests.framework in Frameworks */, + 52B0D23BFA4C286CA0E41B69 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,27 +103,13 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 56635C0EC97E7F426A37B2E0 /* Pods_Runner.framework in Frameworks */, + 36138DB3332DEE6FFE0E1FE3 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 0EB950B6EBBA8562ED05E9C6 /* Pods */ = { - isa = PBXGroup; - children = ( - 1084579C46BDDCE9E7DF16AC /* Pods-Runner.debug.xcconfig */, - 2D475486DFFA8C60E5710DB0 /* Pods-Runner.release.xcconfig */, - E57940CC1AE193EDBC7E60BC /* Pods-Runner.profile.xcconfig */, - 86295B0784C4F550CBE8BD69 /* Pods-RunnerTests.debug.xcconfig */, - 949451BBF3DF607E13DBB265 /* Pods-RunnerTests.release.xcconfig */, - 812DEB8E378C986DF221D831 /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; 331C80D6294CF71000263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -151,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 0EB950B6EBBA8562ED05E9C6 /* Pods */, + E6BCE486B4BBFADC211C60FF /* Pods */, ); sourceTree = ""; }; @@ -202,12 +188,26 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - 70907F10D88B462804477CEC /* Pods_Runner.framework */, - FF5748F504BD5E56042DEADB /* Pods_RunnerTests.framework */, + 2A728D4E207B0278F8F9C593 /* Pods_Runner.framework */, + 0A2DA58632C7ECDDC6F5CE67 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; }; + E6BCE486B4BBFADC211C60FF /* Pods */ = { + isa = PBXGroup; + children = ( + E7724C6A3503B208E4E9A53C /* Pods-Runner.debug.xcconfig */, + 913FEB323BDFFD347FB2351B /* Pods-Runner.release.xcconfig */, + B0D72C78FFC1C48205B1AD6E /* Pods-Runner.profile.xcconfig */, + C3E70C64D6EEF1D329D99AEA /* Pods-RunnerTests.debug.xcconfig */, + 0D3D188B329D045CE36B21CF /* Pods-RunnerTests.release.xcconfig */, + BFB07E0B350C6948876BAE8A /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 24CA264AC7C1AA37F685BC19 /* [CP] Check Pods Manifest.lock */, + 8915FA819FCC8B1FF9C2CD9A /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 9936C57FFCBF37419AE7561E /* [CP] Check Pods Manifest.lock */, + E5CD31409482E85EF68F0E33 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 038DC0986A46E5F2839BD12E /* [CP] Embed Pods Frameworks */, + 8C531C68C243175172E5DA1B /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,84 +323,84 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 038DC0986A46E5F2839BD12E /* [CP] Embed Pods Frameworks */ = { + 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + ); outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; + shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; }; - 24CA264AC7C1AA37F685BC19 /* [CP] Check Pods Manifest.lock */ = { + 33CC111E2044C6BF0003C045 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + Flutter/ephemeral/FlutterInputs.xcfilelist, ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", + Flutter/ephemeral/tripwire, ); - name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( + Flutter/ephemeral/FlutterOutputs.xcfilelist, ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 3399D490228B24CF009A79C7 /* ShellScript */ = { + 8915FA819FCC8B1FF9C2CD9A /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( ); outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - 33CC111E2044C6BF0003C045 /* ShellScript */ = { + 8C531C68C243175172E5DA1B /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - Flutter/ephemeral/FlutterInputs.xcfilelist, - ); - inputPaths = ( - Flutter/ephemeral/tripwire, + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - Flutter/ephemeral/FlutterOutputs.xcfilelist, - ); - outputPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; }; - 9936C57FFCBF37419AE7561E /* [CP] Check Pods Manifest.lock */ = { + E5CD31409482E85EF68F0E33 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 86295B0784C4F550CBE8BD69 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = C3E70C64D6EEF1D329D99AEA /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 949451BBF3DF607E13DBB265 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 0D3D188B329D045CE36B21CF /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 812DEB8E378C986DF221D831 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = BFB07E0B350C6948876BAE8A /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/next-gen-ui/step_04_a/android/app/build.gradle b/next-gen-ui/step_04_a/android/app/build.gradle deleted file mode 100644 index b6fad008f9..0000000000 --- a/next-gen-ui/step_04_a/android/app/build.gradle +++ /dev/null @@ -1,44 +0,0 @@ -plugins { - id "com.android.application" - id "kotlin-android" - // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. - id "dev.flutter.flutter-gradle-plugin" -} - -android { - namespace = "com.example.next_gen_ui" - compileSdk = flutter.compileSdkVersion - ndkVersion = flutter.ndkVersion - - compileOptions { - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 - } - - kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8 - } - - defaultConfig { - // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). - applicationId = "com.example.next_gen_ui" - // You can update the following values to match your application needs. - // For more information, see: https://flutter.dev/to/review-gradle-config. - minSdk = flutter.minSdkVersion - targetSdk = flutter.targetSdkVersion - versionCode = flutter.versionCode - versionName = flutter.versionName - } - - buildTypes { - release { - // TODO: Add your own signing config for the release build. - // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig = signingConfigs.debug - } - } -} - -flutter { - source = "../.." -} diff --git a/next-gen-ui/step_04_a/android/app/build.gradle.kts b/next-gen-ui/step_04_a/android/app/build.gradle.kts new file mode 100644 index 0000000000..7876ce7a57 --- /dev/null +++ b/next-gen-ui/step_04_a/android/app/build.gradle.kts @@ -0,0 +1,44 @@ +plugins { + id("com.android.application") + id("kotlin-android") + // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. + id("dev.flutter.flutter-gradle-plugin") +} + +android { + namespace = "com.example.next_gen_ui" + compileSdk = flutter.compileSdkVersion + ndkVersion = flutter.ndkVersion + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 + } + + kotlinOptions { + jvmTarget = JavaVersion.VERSION_1_8.toString() + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId = "com.example.next_gen_ui" + // You can update the following values to match your application needs. + // For more information, see: https://flutter.dev/to/review-gradle-config. + minSdk = flutter.minSdkVersion + targetSdk = flutter.targetSdkVersion + versionCode = flutter.versionCode + versionName = flutter.versionName + } + + buildTypes { + release { + // TODO: Add your own signing config for the release build. + // Signing with the debug keys for now, so `flutter run --release` works. + signingConfig = signingConfigs.getByName("debug") + } + } +} + +flutter { + source = "../.." +} diff --git a/next-gen-ui/step_04_a/android/build.gradle b/next-gen-ui/step_04_a/android/build.gradle deleted file mode 100644 index d2ffbffa4c..0000000000 --- a/next-gen-ui/step_04_a/android/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = "../build" -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(":app") -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/next-gen-ui/step_04_a/android/build.gradle.kts b/next-gen-ui/step_04_a/android/build.gradle.kts new file mode 100644 index 0000000000..89176ef44e --- /dev/null +++ b/next-gen-ui/step_04_a/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/next-gen-ui/step_04_a/android/gradle.properties b/next-gen-ui/step_04_a/android/gradle.properties index 2597170821..f018a61817 100644 --- a/next-gen-ui/step_04_a/android/gradle.properties +++ b/next-gen-ui/step_04_a/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/next-gen-ui/step_04_a/android/gradle/wrapper/gradle-wrapper.properties b/next-gen-ui/step_04_a/android/gradle/wrapper/gradle-wrapper.properties index 7bb2df6ba6..afa1e8eb0a 100644 --- a/next-gen-ui/step_04_a/android/gradle/wrapper/gradle-wrapper.properties +++ b/next-gen-ui/step_04_a/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip diff --git a/next-gen-ui/step_04_a/android/settings.gradle b/next-gen-ui/step_04_a/android/settings.gradle deleted file mode 100644 index b9e43bd376..0000000000 --- a/next-gen-ui/step_04_a/android/settings.gradle +++ /dev/null @@ -1,25 +0,0 @@ -pluginManagement { - def flutterSdkPath = { - def properties = new Properties() - file("local.properties").withInputStream { properties.load(it) } - def flutterSdkPath = properties.getProperty("flutter.sdk") - assert flutterSdkPath != null, "flutter.sdk not set in local.properties" - return flutterSdkPath - }() - - includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") - - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} - -plugins { - id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.1.0" apply false - id "org.jetbrains.kotlin.android" version "1.8.22" apply false -} - -include ":app" diff --git a/next-gen-ui/step_04_a/android/settings.gradle.kts b/next-gen-ui/step_04_a/android/settings.gradle.kts new file mode 100644 index 0000000000..a439442c20 --- /dev/null +++ b/next-gen-ui/step_04_a/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.0" apply false + id("org.jetbrains.kotlin.android") version "1.8.22" apply false +} + +include(":app") diff --git a/next-gen-ui/step_04_a/ios/Podfile b/next-gen-ui/step_04_a/ios/Podfile index d97f17e223..e549ee22f3 100644 --- a/next-gen-ui/step_04_a/ios/Podfile +++ b/next-gen-ui/step_04_a/ios/Podfile @@ -29,7 +29,6 @@ flutter_ios_podfile_setup target 'Runner' do use_frameworks! - use_modular_headers! flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) target 'RunnerTests' do diff --git a/next-gen-ui/step_04_a/ios/Runner.xcodeproj/project.pbxproj b/next-gen-ui/step_04_a/ios/Runner.xcodeproj/project.pbxproj index 8f047bdf00..e6e561d8b2 100644 --- a/next-gen-ui/step_04_a/ios/Runner.xcodeproj/project.pbxproj +++ b/next-gen-ui/step_04_a/ios/Runner.xcodeproj/project.pbxproj @@ -10,12 +10,12 @@ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; + 66AB0B66A73F1975E64A8177 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 20BB5BDAE26490ECF22F2507 /* Pods_RunnerTests.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - B62141185A2A64CE6AE671F2 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B1CF946366B840164A5B6A19 /* Pods_Runner.framework */; }; - B81AE38132A98A311F8F51B8 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 249FB81AECD9AE84FFA40AD0 /* Pods_RunnerTests.framework */; }; + CE4E96F7F9B6D48487EB3E31 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F57E7A6E02C2CD3ED18C8215 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,29 +42,29 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 0FBB97D3B77C3F8ABBBA69D1 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 1065108C466C107C635700F4 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 249FB81AECD9AE84FFA40AD0 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 174850BBD948073483DE44FD /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 20BB5BDAE26490ECF22F2507 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 29D2F0C3F335C05D8707828B /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 3440B8D33B7DF5E678FB8D73 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 5220EC7DF66B6FF52474A86B /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - 64F96334240D4715F67078C9 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 6641BE7C3FD295E85E2B1262 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 678B757D90C77B71F96114E8 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; + 943161019A9EC85C7A66EE19 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; - 9790F6561207E583E84D4FF9 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - B1CF946366B840164A5B6A19 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + C840685EE99E8FA6D49D591E /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + F57E7A6E02C2CD3ED18C8215 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -72,26 +72,26 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - B62141185A2A64CE6AE671F2 /* Pods_Runner.framework in Frameworks */, + CE4E96F7F9B6D48487EB3E31 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - C266D94F39398FF0845062EB /* Frameworks */ = { + D4AFF78F5AE2E8EE0BD7286F /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - B81AE38132A98A311F8F51B8 /* Pods_RunnerTests.framework in Frameworks */, + 66AB0B66A73F1975E64A8177 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 29779CA63CE39E764210D572 /* Frameworks */ = { + 1B41929933729C3C4452D755 /* Frameworks */ = { isa = PBXGroup; children = ( - B1CF946366B840164A5B6A19 /* Pods_Runner.framework */, - 249FB81AECD9AE84FFA40AD0 /* Pods_RunnerTests.framework */, + F57E7A6E02C2CD3ED18C8215 /* Pods_Runner.framework */, + 20BB5BDAE26490ECF22F2507 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -104,20 +104,6 @@ path = RunnerTests; sourceTree = ""; }; - 67CB01004931F5EAE1484002 /* Pods */ = { - isa = PBXGroup; - children = ( - 64F96334240D4715F67078C9 /* Pods-Runner.debug.xcconfig */, - 1065108C466C107C635700F4 /* Pods-Runner.release.xcconfig */, - 9790F6561207E583E84D4FF9 /* Pods-Runner.profile.xcconfig */, - 0FBB97D3B77C3F8ABBBA69D1 /* Pods-RunnerTests.debug.xcconfig */, - 5220EC7DF66B6FF52474A86B /* Pods-RunnerTests.release.xcconfig */, - 6641BE7C3FD295E85E2B1262 /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( @@ -136,8 +122,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - 67CB01004931F5EAE1484002 /* Pods */, - 29779CA63CE39E764210D572 /* Frameworks */, + CB8608376662DCF167CF091D /* Pods */, + 1B41929933729C3C4452D755 /* Frameworks */, ); sourceTree = ""; }; @@ -165,6 +151,20 @@ path = Runner; sourceTree = ""; }; + CB8608376662DCF167CF091D /* Pods */ = { + isa = PBXGroup; + children = ( + 678B757D90C77B71F96114E8 /* Pods-Runner.debug.xcconfig */, + 3440B8D33B7DF5E678FB8D73 /* Pods-Runner.release.xcconfig */, + 174850BBD948073483DE44FD /* Pods-Runner.profile.xcconfig */, + 29D2F0C3F335C05D8707828B /* Pods-RunnerTests.debug.xcconfig */, + 943161019A9EC85C7A66EE19 /* Pods-RunnerTests.release.xcconfig */, + C840685EE99E8FA6D49D591E /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 1A41435D909B4A5BA59DA804 /* [CP] Check Pods Manifest.lock */, + AC04A6680CE49A8AB43B1FFA /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - C266D94F39398FF0845062EB /* Frameworks */, + D4AFF78F5AE2E8EE0BD7286F /* Frameworks */, ); buildRules = ( ); @@ -191,7 +191,7 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 15FA0791F2F6E4DEC3602581 /* [CP] Check Pods Manifest.lock */, + 214492064922C9E65703CF3F /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, @@ -269,7 +269,7 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 15FA0791F2F6E4DEC3602581 /* [CP] Check Pods Manifest.lock */ = { + 214492064922C9E65703CF3F /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -291,58 +291,58 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 1A41435D909B4A5BA59DA804 /* [CP] Check Pods Manifest.lock */ = { + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); + name = "Thin Binary"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputPaths = ( - "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); - name = "Thin Binary"; + name = "Run Script"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { + AC04A6680CE49A8AB43B1FFA /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "Run Script"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -469,7 +469,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 0FBB97D3B77C3F8ABBBA69D1 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 29D2F0C3F335C05D8707828B /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -487,7 +487,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 5220EC7DF66B6FF52474A86B /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 943161019A9EC85C7A66EE19 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -503,7 +503,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 6641BE7C3FD295E85E2B1262 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = C840685EE99E8FA6D49D591E /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/next-gen-ui/step_04_a/macos/Podfile b/next-gen-ui/step_04_a/macos/Podfile index c795730db8..29c8eb3294 100644 --- a/next-gen-ui/step_04_a/macos/Podfile +++ b/next-gen-ui/step_04_a/macos/Podfile @@ -28,7 +28,6 @@ flutter_macos_podfile_setup target 'Runner' do use_frameworks! - use_modular_headers! flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__)) target 'RunnerTests' do diff --git a/next-gen-ui/step_04_a/macos/Runner.xcodeproj/project.pbxproj b/next-gen-ui/step_04_a/macos/Runner.xcodeproj/project.pbxproj index 5ca8a3231e..4579683b58 100644 --- a/next-gen-ui/step_04_a/macos/Runner.xcodeproj/project.pbxproj +++ b/next-gen-ui/step_04_a/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ - 2E6B87224BF317E31F74B0D6 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FF5748F504BD5E56042DEADB /* Pods_RunnerTests.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 56635C0EC97E7F426A37B2E0 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 70907F10D88B462804477CEC /* Pods_Runner.framework */; }; + 36138DB3332DEE6FFE0E1FE3 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2A728D4E207B0278F8F9C593 /* Pods_Runner.framework */; }; + 52B0D23BFA4C286CA0E41B69 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0A2DA58632C7ECDDC6F5CE67 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,8 +62,9 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 1084579C46BDDCE9E7DF16AC /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 2D475486DFFA8C60E5710DB0 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 0A2DA58632C7ECDDC6F5CE67 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 0D3D188B329D045CE36B21CF /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 2A728D4E207B0278F8F9C593 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -80,14 +81,13 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 70907F10D88B462804477CEC /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 812DEB8E378C986DF221D831 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - 86295B0784C4F550CBE8BD69 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 949451BBF3DF607E13DBB265 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 913FEB323BDFFD347FB2351B /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - E57940CC1AE193EDBC7E60BC /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - FF5748F504BD5E56042DEADB /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + B0D72C78FFC1C48205B1AD6E /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + BFB07E0B350C6948876BAE8A /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + C3E70C64D6EEF1D329D99AEA /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + E7724C6A3503B208E4E9A53C /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 2E6B87224BF317E31F74B0D6 /* Pods_RunnerTests.framework in Frameworks */, + 52B0D23BFA4C286CA0E41B69 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,27 +103,13 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 56635C0EC97E7F426A37B2E0 /* Pods_Runner.framework in Frameworks */, + 36138DB3332DEE6FFE0E1FE3 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 0EB950B6EBBA8562ED05E9C6 /* Pods */ = { - isa = PBXGroup; - children = ( - 1084579C46BDDCE9E7DF16AC /* Pods-Runner.debug.xcconfig */, - 2D475486DFFA8C60E5710DB0 /* Pods-Runner.release.xcconfig */, - E57940CC1AE193EDBC7E60BC /* Pods-Runner.profile.xcconfig */, - 86295B0784C4F550CBE8BD69 /* Pods-RunnerTests.debug.xcconfig */, - 949451BBF3DF607E13DBB265 /* Pods-RunnerTests.release.xcconfig */, - 812DEB8E378C986DF221D831 /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; 331C80D6294CF71000263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -151,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 0EB950B6EBBA8562ED05E9C6 /* Pods */, + E6BCE486B4BBFADC211C60FF /* Pods */, ); sourceTree = ""; }; @@ -202,12 +188,26 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - 70907F10D88B462804477CEC /* Pods_Runner.framework */, - FF5748F504BD5E56042DEADB /* Pods_RunnerTests.framework */, + 2A728D4E207B0278F8F9C593 /* Pods_Runner.framework */, + 0A2DA58632C7ECDDC6F5CE67 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; }; + E6BCE486B4BBFADC211C60FF /* Pods */ = { + isa = PBXGroup; + children = ( + E7724C6A3503B208E4E9A53C /* Pods-Runner.debug.xcconfig */, + 913FEB323BDFFD347FB2351B /* Pods-Runner.release.xcconfig */, + B0D72C78FFC1C48205B1AD6E /* Pods-Runner.profile.xcconfig */, + C3E70C64D6EEF1D329D99AEA /* Pods-RunnerTests.debug.xcconfig */, + 0D3D188B329D045CE36B21CF /* Pods-RunnerTests.release.xcconfig */, + BFB07E0B350C6948876BAE8A /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 24CA264AC7C1AA37F685BC19 /* [CP] Check Pods Manifest.lock */, + 8915FA819FCC8B1FF9C2CD9A /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 9936C57FFCBF37419AE7561E /* [CP] Check Pods Manifest.lock */, + E5CD31409482E85EF68F0E33 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 038DC0986A46E5F2839BD12E /* [CP] Embed Pods Frameworks */, + 8C531C68C243175172E5DA1B /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,84 +323,84 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 038DC0986A46E5F2839BD12E /* [CP] Embed Pods Frameworks */ = { + 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + ); outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; + shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; }; - 24CA264AC7C1AA37F685BC19 /* [CP] Check Pods Manifest.lock */ = { + 33CC111E2044C6BF0003C045 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + Flutter/ephemeral/FlutterInputs.xcfilelist, ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", + Flutter/ephemeral/tripwire, ); - name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( + Flutter/ephemeral/FlutterOutputs.xcfilelist, ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 3399D490228B24CF009A79C7 /* ShellScript */ = { + 8915FA819FCC8B1FF9C2CD9A /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( ); outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - 33CC111E2044C6BF0003C045 /* ShellScript */ = { + 8C531C68C243175172E5DA1B /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - Flutter/ephemeral/FlutterInputs.xcfilelist, - ); - inputPaths = ( - Flutter/ephemeral/tripwire, + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - Flutter/ephemeral/FlutterOutputs.xcfilelist, - ); - outputPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; }; - 9936C57FFCBF37419AE7561E /* [CP] Check Pods Manifest.lock */ = { + E5CD31409482E85EF68F0E33 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 86295B0784C4F550CBE8BD69 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = C3E70C64D6EEF1D329D99AEA /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 949451BBF3DF607E13DBB265 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 0D3D188B329D045CE36B21CF /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 812DEB8E378C986DF221D831 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = BFB07E0B350C6948876BAE8A /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/next-gen-ui/step_04_b/android/app/build.gradle b/next-gen-ui/step_04_b/android/app/build.gradle deleted file mode 100644 index b6fad008f9..0000000000 --- a/next-gen-ui/step_04_b/android/app/build.gradle +++ /dev/null @@ -1,44 +0,0 @@ -plugins { - id "com.android.application" - id "kotlin-android" - // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. - id "dev.flutter.flutter-gradle-plugin" -} - -android { - namespace = "com.example.next_gen_ui" - compileSdk = flutter.compileSdkVersion - ndkVersion = flutter.ndkVersion - - compileOptions { - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 - } - - kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8 - } - - defaultConfig { - // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). - applicationId = "com.example.next_gen_ui" - // You can update the following values to match your application needs. - // For more information, see: https://flutter.dev/to/review-gradle-config. - minSdk = flutter.minSdkVersion - targetSdk = flutter.targetSdkVersion - versionCode = flutter.versionCode - versionName = flutter.versionName - } - - buildTypes { - release { - // TODO: Add your own signing config for the release build. - // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig = signingConfigs.debug - } - } -} - -flutter { - source = "../.." -} diff --git a/next-gen-ui/step_04_b/android/app/build.gradle.kts b/next-gen-ui/step_04_b/android/app/build.gradle.kts new file mode 100644 index 0000000000..7876ce7a57 --- /dev/null +++ b/next-gen-ui/step_04_b/android/app/build.gradle.kts @@ -0,0 +1,44 @@ +plugins { + id("com.android.application") + id("kotlin-android") + // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. + id("dev.flutter.flutter-gradle-plugin") +} + +android { + namespace = "com.example.next_gen_ui" + compileSdk = flutter.compileSdkVersion + ndkVersion = flutter.ndkVersion + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 + } + + kotlinOptions { + jvmTarget = JavaVersion.VERSION_1_8.toString() + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId = "com.example.next_gen_ui" + // You can update the following values to match your application needs. + // For more information, see: https://flutter.dev/to/review-gradle-config. + minSdk = flutter.minSdkVersion + targetSdk = flutter.targetSdkVersion + versionCode = flutter.versionCode + versionName = flutter.versionName + } + + buildTypes { + release { + // TODO: Add your own signing config for the release build. + // Signing with the debug keys for now, so `flutter run --release` works. + signingConfig = signingConfigs.getByName("debug") + } + } +} + +flutter { + source = "../.." +} diff --git a/next-gen-ui/step_04_b/android/build.gradle b/next-gen-ui/step_04_b/android/build.gradle deleted file mode 100644 index d2ffbffa4c..0000000000 --- a/next-gen-ui/step_04_b/android/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = "../build" -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(":app") -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/next-gen-ui/step_04_b/android/build.gradle.kts b/next-gen-ui/step_04_b/android/build.gradle.kts new file mode 100644 index 0000000000..89176ef44e --- /dev/null +++ b/next-gen-ui/step_04_b/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/next-gen-ui/step_04_b/android/gradle.properties b/next-gen-ui/step_04_b/android/gradle.properties index 2597170821..f018a61817 100644 --- a/next-gen-ui/step_04_b/android/gradle.properties +++ b/next-gen-ui/step_04_b/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/next-gen-ui/step_04_b/android/gradle/wrapper/gradle-wrapper.properties b/next-gen-ui/step_04_b/android/gradle/wrapper/gradle-wrapper.properties index 7bb2df6ba6..afa1e8eb0a 100644 --- a/next-gen-ui/step_04_b/android/gradle/wrapper/gradle-wrapper.properties +++ b/next-gen-ui/step_04_b/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip diff --git a/next-gen-ui/step_04_b/android/settings.gradle b/next-gen-ui/step_04_b/android/settings.gradle deleted file mode 100644 index b9e43bd376..0000000000 --- a/next-gen-ui/step_04_b/android/settings.gradle +++ /dev/null @@ -1,25 +0,0 @@ -pluginManagement { - def flutterSdkPath = { - def properties = new Properties() - file("local.properties").withInputStream { properties.load(it) } - def flutterSdkPath = properties.getProperty("flutter.sdk") - assert flutterSdkPath != null, "flutter.sdk not set in local.properties" - return flutterSdkPath - }() - - includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") - - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} - -plugins { - id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.1.0" apply false - id "org.jetbrains.kotlin.android" version "1.8.22" apply false -} - -include ":app" diff --git a/next-gen-ui/step_04_b/android/settings.gradle.kts b/next-gen-ui/step_04_b/android/settings.gradle.kts new file mode 100644 index 0000000000..a439442c20 --- /dev/null +++ b/next-gen-ui/step_04_b/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.0" apply false + id("org.jetbrains.kotlin.android") version "1.8.22" apply false +} + +include(":app") diff --git a/next-gen-ui/step_04_b/ios/Podfile b/next-gen-ui/step_04_b/ios/Podfile index d97f17e223..e549ee22f3 100644 --- a/next-gen-ui/step_04_b/ios/Podfile +++ b/next-gen-ui/step_04_b/ios/Podfile @@ -29,7 +29,6 @@ flutter_ios_podfile_setup target 'Runner' do use_frameworks! - use_modular_headers! flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) target 'RunnerTests' do diff --git a/next-gen-ui/step_04_b/ios/Runner.xcodeproj/project.pbxproj b/next-gen-ui/step_04_b/ios/Runner.xcodeproj/project.pbxproj index 8f047bdf00..e6e561d8b2 100644 --- a/next-gen-ui/step_04_b/ios/Runner.xcodeproj/project.pbxproj +++ b/next-gen-ui/step_04_b/ios/Runner.xcodeproj/project.pbxproj @@ -10,12 +10,12 @@ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; + 66AB0B66A73F1975E64A8177 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 20BB5BDAE26490ECF22F2507 /* Pods_RunnerTests.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - B62141185A2A64CE6AE671F2 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B1CF946366B840164A5B6A19 /* Pods_Runner.framework */; }; - B81AE38132A98A311F8F51B8 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 249FB81AECD9AE84FFA40AD0 /* Pods_RunnerTests.framework */; }; + CE4E96F7F9B6D48487EB3E31 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F57E7A6E02C2CD3ED18C8215 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,29 +42,29 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 0FBB97D3B77C3F8ABBBA69D1 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 1065108C466C107C635700F4 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 249FB81AECD9AE84FFA40AD0 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 174850BBD948073483DE44FD /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 20BB5BDAE26490ECF22F2507 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 29D2F0C3F335C05D8707828B /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 3440B8D33B7DF5E678FB8D73 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 5220EC7DF66B6FF52474A86B /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - 64F96334240D4715F67078C9 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 6641BE7C3FD295E85E2B1262 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 678B757D90C77B71F96114E8 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; + 943161019A9EC85C7A66EE19 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; - 9790F6561207E583E84D4FF9 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - B1CF946366B840164A5B6A19 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + C840685EE99E8FA6D49D591E /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + F57E7A6E02C2CD3ED18C8215 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -72,26 +72,26 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - B62141185A2A64CE6AE671F2 /* Pods_Runner.framework in Frameworks */, + CE4E96F7F9B6D48487EB3E31 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - C266D94F39398FF0845062EB /* Frameworks */ = { + D4AFF78F5AE2E8EE0BD7286F /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - B81AE38132A98A311F8F51B8 /* Pods_RunnerTests.framework in Frameworks */, + 66AB0B66A73F1975E64A8177 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 29779CA63CE39E764210D572 /* Frameworks */ = { + 1B41929933729C3C4452D755 /* Frameworks */ = { isa = PBXGroup; children = ( - B1CF946366B840164A5B6A19 /* Pods_Runner.framework */, - 249FB81AECD9AE84FFA40AD0 /* Pods_RunnerTests.framework */, + F57E7A6E02C2CD3ED18C8215 /* Pods_Runner.framework */, + 20BB5BDAE26490ECF22F2507 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -104,20 +104,6 @@ path = RunnerTests; sourceTree = ""; }; - 67CB01004931F5EAE1484002 /* Pods */ = { - isa = PBXGroup; - children = ( - 64F96334240D4715F67078C9 /* Pods-Runner.debug.xcconfig */, - 1065108C466C107C635700F4 /* Pods-Runner.release.xcconfig */, - 9790F6561207E583E84D4FF9 /* Pods-Runner.profile.xcconfig */, - 0FBB97D3B77C3F8ABBBA69D1 /* Pods-RunnerTests.debug.xcconfig */, - 5220EC7DF66B6FF52474A86B /* Pods-RunnerTests.release.xcconfig */, - 6641BE7C3FD295E85E2B1262 /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( @@ -136,8 +122,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - 67CB01004931F5EAE1484002 /* Pods */, - 29779CA63CE39E764210D572 /* Frameworks */, + CB8608376662DCF167CF091D /* Pods */, + 1B41929933729C3C4452D755 /* Frameworks */, ); sourceTree = ""; }; @@ -165,6 +151,20 @@ path = Runner; sourceTree = ""; }; + CB8608376662DCF167CF091D /* Pods */ = { + isa = PBXGroup; + children = ( + 678B757D90C77B71F96114E8 /* Pods-Runner.debug.xcconfig */, + 3440B8D33B7DF5E678FB8D73 /* Pods-Runner.release.xcconfig */, + 174850BBD948073483DE44FD /* Pods-Runner.profile.xcconfig */, + 29D2F0C3F335C05D8707828B /* Pods-RunnerTests.debug.xcconfig */, + 943161019A9EC85C7A66EE19 /* Pods-RunnerTests.release.xcconfig */, + C840685EE99E8FA6D49D591E /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 1A41435D909B4A5BA59DA804 /* [CP] Check Pods Manifest.lock */, + AC04A6680CE49A8AB43B1FFA /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - C266D94F39398FF0845062EB /* Frameworks */, + D4AFF78F5AE2E8EE0BD7286F /* Frameworks */, ); buildRules = ( ); @@ -191,7 +191,7 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 15FA0791F2F6E4DEC3602581 /* [CP] Check Pods Manifest.lock */, + 214492064922C9E65703CF3F /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, @@ -269,7 +269,7 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 15FA0791F2F6E4DEC3602581 /* [CP] Check Pods Manifest.lock */ = { + 214492064922C9E65703CF3F /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -291,58 +291,58 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 1A41435D909B4A5BA59DA804 /* [CP] Check Pods Manifest.lock */ = { + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); + name = "Thin Binary"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputPaths = ( - "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); - name = "Thin Binary"; + name = "Run Script"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { + AC04A6680CE49A8AB43B1FFA /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "Run Script"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -469,7 +469,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 0FBB97D3B77C3F8ABBBA69D1 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 29D2F0C3F335C05D8707828B /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -487,7 +487,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 5220EC7DF66B6FF52474A86B /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 943161019A9EC85C7A66EE19 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -503,7 +503,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 6641BE7C3FD295E85E2B1262 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = C840685EE99E8FA6D49D591E /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/next-gen-ui/step_04_b/macos/Podfile b/next-gen-ui/step_04_b/macos/Podfile index c795730db8..29c8eb3294 100644 --- a/next-gen-ui/step_04_b/macos/Podfile +++ b/next-gen-ui/step_04_b/macos/Podfile @@ -28,7 +28,6 @@ flutter_macos_podfile_setup target 'Runner' do use_frameworks! - use_modular_headers! flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__)) target 'RunnerTests' do diff --git a/next-gen-ui/step_04_b/macos/Runner.xcodeproj/project.pbxproj b/next-gen-ui/step_04_b/macos/Runner.xcodeproj/project.pbxproj index 5ca8a3231e..4579683b58 100644 --- a/next-gen-ui/step_04_b/macos/Runner.xcodeproj/project.pbxproj +++ b/next-gen-ui/step_04_b/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ - 2E6B87224BF317E31F74B0D6 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FF5748F504BD5E56042DEADB /* Pods_RunnerTests.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 56635C0EC97E7F426A37B2E0 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 70907F10D88B462804477CEC /* Pods_Runner.framework */; }; + 36138DB3332DEE6FFE0E1FE3 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2A728D4E207B0278F8F9C593 /* Pods_Runner.framework */; }; + 52B0D23BFA4C286CA0E41B69 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0A2DA58632C7ECDDC6F5CE67 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,8 +62,9 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 1084579C46BDDCE9E7DF16AC /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 2D475486DFFA8C60E5710DB0 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 0A2DA58632C7ECDDC6F5CE67 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 0D3D188B329D045CE36B21CF /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 2A728D4E207B0278F8F9C593 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -80,14 +81,13 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 70907F10D88B462804477CEC /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 812DEB8E378C986DF221D831 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - 86295B0784C4F550CBE8BD69 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 949451BBF3DF607E13DBB265 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 913FEB323BDFFD347FB2351B /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - E57940CC1AE193EDBC7E60BC /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - FF5748F504BD5E56042DEADB /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + B0D72C78FFC1C48205B1AD6E /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + BFB07E0B350C6948876BAE8A /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + C3E70C64D6EEF1D329D99AEA /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + E7724C6A3503B208E4E9A53C /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 2E6B87224BF317E31F74B0D6 /* Pods_RunnerTests.framework in Frameworks */, + 52B0D23BFA4C286CA0E41B69 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,27 +103,13 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 56635C0EC97E7F426A37B2E0 /* Pods_Runner.framework in Frameworks */, + 36138DB3332DEE6FFE0E1FE3 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 0EB950B6EBBA8562ED05E9C6 /* Pods */ = { - isa = PBXGroup; - children = ( - 1084579C46BDDCE9E7DF16AC /* Pods-Runner.debug.xcconfig */, - 2D475486DFFA8C60E5710DB0 /* Pods-Runner.release.xcconfig */, - E57940CC1AE193EDBC7E60BC /* Pods-Runner.profile.xcconfig */, - 86295B0784C4F550CBE8BD69 /* Pods-RunnerTests.debug.xcconfig */, - 949451BBF3DF607E13DBB265 /* Pods-RunnerTests.release.xcconfig */, - 812DEB8E378C986DF221D831 /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; 331C80D6294CF71000263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -151,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 0EB950B6EBBA8562ED05E9C6 /* Pods */, + E6BCE486B4BBFADC211C60FF /* Pods */, ); sourceTree = ""; }; @@ -202,12 +188,26 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - 70907F10D88B462804477CEC /* Pods_Runner.framework */, - FF5748F504BD5E56042DEADB /* Pods_RunnerTests.framework */, + 2A728D4E207B0278F8F9C593 /* Pods_Runner.framework */, + 0A2DA58632C7ECDDC6F5CE67 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; }; + E6BCE486B4BBFADC211C60FF /* Pods */ = { + isa = PBXGroup; + children = ( + E7724C6A3503B208E4E9A53C /* Pods-Runner.debug.xcconfig */, + 913FEB323BDFFD347FB2351B /* Pods-Runner.release.xcconfig */, + B0D72C78FFC1C48205B1AD6E /* Pods-Runner.profile.xcconfig */, + C3E70C64D6EEF1D329D99AEA /* Pods-RunnerTests.debug.xcconfig */, + 0D3D188B329D045CE36B21CF /* Pods-RunnerTests.release.xcconfig */, + BFB07E0B350C6948876BAE8A /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 24CA264AC7C1AA37F685BC19 /* [CP] Check Pods Manifest.lock */, + 8915FA819FCC8B1FF9C2CD9A /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 9936C57FFCBF37419AE7561E /* [CP] Check Pods Manifest.lock */, + E5CD31409482E85EF68F0E33 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 038DC0986A46E5F2839BD12E /* [CP] Embed Pods Frameworks */, + 8C531C68C243175172E5DA1B /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,84 +323,84 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 038DC0986A46E5F2839BD12E /* [CP] Embed Pods Frameworks */ = { + 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + ); outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; + shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; }; - 24CA264AC7C1AA37F685BC19 /* [CP] Check Pods Manifest.lock */ = { + 33CC111E2044C6BF0003C045 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + Flutter/ephemeral/FlutterInputs.xcfilelist, ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", + Flutter/ephemeral/tripwire, ); - name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( + Flutter/ephemeral/FlutterOutputs.xcfilelist, ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 3399D490228B24CF009A79C7 /* ShellScript */ = { + 8915FA819FCC8B1FF9C2CD9A /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( ); outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - 33CC111E2044C6BF0003C045 /* ShellScript */ = { + 8C531C68C243175172E5DA1B /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - Flutter/ephemeral/FlutterInputs.xcfilelist, - ); - inputPaths = ( - Flutter/ephemeral/tripwire, + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - Flutter/ephemeral/FlutterOutputs.xcfilelist, - ); - outputPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; }; - 9936C57FFCBF37419AE7561E /* [CP] Check Pods Manifest.lock */ = { + E5CD31409482E85EF68F0E33 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 86295B0784C4F550CBE8BD69 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = C3E70C64D6EEF1D329D99AEA /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 949451BBF3DF607E13DBB265 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 0D3D188B329D045CE36B21CF /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 812DEB8E378C986DF221D831 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = BFB07E0B350C6948876BAE8A /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/next-gen-ui/step_04_c/android/app/build.gradle b/next-gen-ui/step_04_c/android/app/build.gradle deleted file mode 100644 index b6fad008f9..0000000000 --- a/next-gen-ui/step_04_c/android/app/build.gradle +++ /dev/null @@ -1,44 +0,0 @@ -plugins { - id "com.android.application" - id "kotlin-android" - // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. - id "dev.flutter.flutter-gradle-plugin" -} - -android { - namespace = "com.example.next_gen_ui" - compileSdk = flutter.compileSdkVersion - ndkVersion = flutter.ndkVersion - - compileOptions { - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 - } - - kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8 - } - - defaultConfig { - // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). - applicationId = "com.example.next_gen_ui" - // You can update the following values to match your application needs. - // For more information, see: https://flutter.dev/to/review-gradle-config. - minSdk = flutter.minSdkVersion - targetSdk = flutter.targetSdkVersion - versionCode = flutter.versionCode - versionName = flutter.versionName - } - - buildTypes { - release { - // TODO: Add your own signing config for the release build. - // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig = signingConfigs.debug - } - } -} - -flutter { - source = "../.." -} diff --git a/next-gen-ui/step_04_c/android/app/build.gradle.kts b/next-gen-ui/step_04_c/android/app/build.gradle.kts new file mode 100644 index 0000000000..7876ce7a57 --- /dev/null +++ b/next-gen-ui/step_04_c/android/app/build.gradle.kts @@ -0,0 +1,44 @@ +plugins { + id("com.android.application") + id("kotlin-android") + // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. + id("dev.flutter.flutter-gradle-plugin") +} + +android { + namespace = "com.example.next_gen_ui" + compileSdk = flutter.compileSdkVersion + ndkVersion = flutter.ndkVersion + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 + } + + kotlinOptions { + jvmTarget = JavaVersion.VERSION_1_8.toString() + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId = "com.example.next_gen_ui" + // You can update the following values to match your application needs. + // For more information, see: https://flutter.dev/to/review-gradle-config. + minSdk = flutter.minSdkVersion + targetSdk = flutter.targetSdkVersion + versionCode = flutter.versionCode + versionName = flutter.versionName + } + + buildTypes { + release { + // TODO: Add your own signing config for the release build. + // Signing with the debug keys for now, so `flutter run --release` works. + signingConfig = signingConfigs.getByName("debug") + } + } +} + +flutter { + source = "../.." +} diff --git a/next-gen-ui/step_04_c/android/build.gradle b/next-gen-ui/step_04_c/android/build.gradle deleted file mode 100644 index d2ffbffa4c..0000000000 --- a/next-gen-ui/step_04_c/android/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = "../build" -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(":app") -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/next-gen-ui/step_04_c/android/build.gradle.kts b/next-gen-ui/step_04_c/android/build.gradle.kts new file mode 100644 index 0000000000..89176ef44e --- /dev/null +++ b/next-gen-ui/step_04_c/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/next-gen-ui/step_04_c/android/gradle.properties b/next-gen-ui/step_04_c/android/gradle.properties index 2597170821..f018a61817 100644 --- a/next-gen-ui/step_04_c/android/gradle.properties +++ b/next-gen-ui/step_04_c/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/next-gen-ui/step_04_c/android/gradle/wrapper/gradle-wrapper.properties b/next-gen-ui/step_04_c/android/gradle/wrapper/gradle-wrapper.properties index 7bb2df6ba6..afa1e8eb0a 100644 --- a/next-gen-ui/step_04_c/android/gradle/wrapper/gradle-wrapper.properties +++ b/next-gen-ui/step_04_c/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip diff --git a/next-gen-ui/step_04_c/android/settings.gradle b/next-gen-ui/step_04_c/android/settings.gradle deleted file mode 100644 index b9e43bd376..0000000000 --- a/next-gen-ui/step_04_c/android/settings.gradle +++ /dev/null @@ -1,25 +0,0 @@ -pluginManagement { - def flutterSdkPath = { - def properties = new Properties() - file("local.properties").withInputStream { properties.load(it) } - def flutterSdkPath = properties.getProperty("flutter.sdk") - assert flutterSdkPath != null, "flutter.sdk not set in local.properties" - return flutterSdkPath - }() - - includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") - - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} - -plugins { - id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.1.0" apply false - id "org.jetbrains.kotlin.android" version "1.8.22" apply false -} - -include ":app" diff --git a/next-gen-ui/step_04_c/android/settings.gradle.kts b/next-gen-ui/step_04_c/android/settings.gradle.kts new file mode 100644 index 0000000000..a439442c20 --- /dev/null +++ b/next-gen-ui/step_04_c/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.0" apply false + id("org.jetbrains.kotlin.android") version "1.8.22" apply false +} + +include(":app") diff --git a/next-gen-ui/step_04_c/ios/Podfile b/next-gen-ui/step_04_c/ios/Podfile index d97f17e223..e549ee22f3 100644 --- a/next-gen-ui/step_04_c/ios/Podfile +++ b/next-gen-ui/step_04_c/ios/Podfile @@ -29,7 +29,6 @@ flutter_ios_podfile_setup target 'Runner' do use_frameworks! - use_modular_headers! flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) target 'RunnerTests' do diff --git a/next-gen-ui/step_04_c/ios/Runner.xcodeproj/project.pbxproj b/next-gen-ui/step_04_c/ios/Runner.xcodeproj/project.pbxproj index 8f047bdf00..e6e561d8b2 100644 --- a/next-gen-ui/step_04_c/ios/Runner.xcodeproj/project.pbxproj +++ b/next-gen-ui/step_04_c/ios/Runner.xcodeproj/project.pbxproj @@ -10,12 +10,12 @@ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; + 66AB0B66A73F1975E64A8177 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 20BB5BDAE26490ECF22F2507 /* Pods_RunnerTests.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - B62141185A2A64CE6AE671F2 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B1CF946366B840164A5B6A19 /* Pods_Runner.framework */; }; - B81AE38132A98A311F8F51B8 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 249FB81AECD9AE84FFA40AD0 /* Pods_RunnerTests.framework */; }; + CE4E96F7F9B6D48487EB3E31 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F57E7A6E02C2CD3ED18C8215 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,29 +42,29 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 0FBB97D3B77C3F8ABBBA69D1 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 1065108C466C107C635700F4 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 249FB81AECD9AE84FFA40AD0 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 174850BBD948073483DE44FD /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 20BB5BDAE26490ECF22F2507 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 29D2F0C3F335C05D8707828B /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 3440B8D33B7DF5E678FB8D73 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 5220EC7DF66B6FF52474A86B /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - 64F96334240D4715F67078C9 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 6641BE7C3FD295E85E2B1262 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 678B757D90C77B71F96114E8 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; + 943161019A9EC85C7A66EE19 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; - 9790F6561207E583E84D4FF9 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - B1CF946366B840164A5B6A19 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + C840685EE99E8FA6D49D591E /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + F57E7A6E02C2CD3ED18C8215 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -72,26 +72,26 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - B62141185A2A64CE6AE671F2 /* Pods_Runner.framework in Frameworks */, + CE4E96F7F9B6D48487EB3E31 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - C266D94F39398FF0845062EB /* Frameworks */ = { + D4AFF78F5AE2E8EE0BD7286F /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - B81AE38132A98A311F8F51B8 /* Pods_RunnerTests.framework in Frameworks */, + 66AB0B66A73F1975E64A8177 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 29779CA63CE39E764210D572 /* Frameworks */ = { + 1B41929933729C3C4452D755 /* Frameworks */ = { isa = PBXGroup; children = ( - B1CF946366B840164A5B6A19 /* Pods_Runner.framework */, - 249FB81AECD9AE84FFA40AD0 /* Pods_RunnerTests.framework */, + F57E7A6E02C2CD3ED18C8215 /* Pods_Runner.framework */, + 20BB5BDAE26490ECF22F2507 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -104,20 +104,6 @@ path = RunnerTests; sourceTree = ""; }; - 67CB01004931F5EAE1484002 /* Pods */ = { - isa = PBXGroup; - children = ( - 64F96334240D4715F67078C9 /* Pods-Runner.debug.xcconfig */, - 1065108C466C107C635700F4 /* Pods-Runner.release.xcconfig */, - 9790F6561207E583E84D4FF9 /* Pods-Runner.profile.xcconfig */, - 0FBB97D3B77C3F8ABBBA69D1 /* Pods-RunnerTests.debug.xcconfig */, - 5220EC7DF66B6FF52474A86B /* Pods-RunnerTests.release.xcconfig */, - 6641BE7C3FD295E85E2B1262 /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( @@ -136,8 +122,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - 67CB01004931F5EAE1484002 /* Pods */, - 29779CA63CE39E764210D572 /* Frameworks */, + CB8608376662DCF167CF091D /* Pods */, + 1B41929933729C3C4452D755 /* Frameworks */, ); sourceTree = ""; }; @@ -165,6 +151,20 @@ path = Runner; sourceTree = ""; }; + CB8608376662DCF167CF091D /* Pods */ = { + isa = PBXGroup; + children = ( + 678B757D90C77B71F96114E8 /* Pods-Runner.debug.xcconfig */, + 3440B8D33B7DF5E678FB8D73 /* Pods-Runner.release.xcconfig */, + 174850BBD948073483DE44FD /* Pods-Runner.profile.xcconfig */, + 29D2F0C3F335C05D8707828B /* Pods-RunnerTests.debug.xcconfig */, + 943161019A9EC85C7A66EE19 /* Pods-RunnerTests.release.xcconfig */, + C840685EE99E8FA6D49D591E /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 1A41435D909B4A5BA59DA804 /* [CP] Check Pods Manifest.lock */, + AC04A6680CE49A8AB43B1FFA /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - C266D94F39398FF0845062EB /* Frameworks */, + D4AFF78F5AE2E8EE0BD7286F /* Frameworks */, ); buildRules = ( ); @@ -191,7 +191,7 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 15FA0791F2F6E4DEC3602581 /* [CP] Check Pods Manifest.lock */, + 214492064922C9E65703CF3F /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, @@ -269,7 +269,7 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 15FA0791F2F6E4DEC3602581 /* [CP] Check Pods Manifest.lock */ = { + 214492064922C9E65703CF3F /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -291,58 +291,58 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 1A41435D909B4A5BA59DA804 /* [CP] Check Pods Manifest.lock */ = { + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); + name = "Thin Binary"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputPaths = ( - "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); - name = "Thin Binary"; + name = "Run Script"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { + AC04A6680CE49A8AB43B1FFA /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "Run Script"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -469,7 +469,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 0FBB97D3B77C3F8ABBBA69D1 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 29D2F0C3F335C05D8707828B /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -487,7 +487,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 5220EC7DF66B6FF52474A86B /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 943161019A9EC85C7A66EE19 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -503,7 +503,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 6641BE7C3FD295E85E2B1262 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = C840685EE99E8FA6D49D591E /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/next-gen-ui/step_04_c/macos/Podfile b/next-gen-ui/step_04_c/macos/Podfile index c795730db8..29c8eb3294 100644 --- a/next-gen-ui/step_04_c/macos/Podfile +++ b/next-gen-ui/step_04_c/macos/Podfile @@ -28,7 +28,6 @@ flutter_macos_podfile_setup target 'Runner' do use_frameworks! - use_modular_headers! flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__)) target 'RunnerTests' do diff --git a/next-gen-ui/step_04_c/macos/Runner.xcodeproj/project.pbxproj b/next-gen-ui/step_04_c/macos/Runner.xcodeproj/project.pbxproj index 5ca8a3231e..4579683b58 100644 --- a/next-gen-ui/step_04_c/macos/Runner.xcodeproj/project.pbxproj +++ b/next-gen-ui/step_04_c/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ - 2E6B87224BF317E31F74B0D6 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FF5748F504BD5E56042DEADB /* Pods_RunnerTests.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 56635C0EC97E7F426A37B2E0 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 70907F10D88B462804477CEC /* Pods_Runner.framework */; }; + 36138DB3332DEE6FFE0E1FE3 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2A728D4E207B0278F8F9C593 /* Pods_Runner.framework */; }; + 52B0D23BFA4C286CA0E41B69 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0A2DA58632C7ECDDC6F5CE67 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,8 +62,9 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 1084579C46BDDCE9E7DF16AC /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 2D475486DFFA8C60E5710DB0 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 0A2DA58632C7ECDDC6F5CE67 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 0D3D188B329D045CE36B21CF /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 2A728D4E207B0278F8F9C593 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -80,14 +81,13 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 70907F10D88B462804477CEC /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 812DEB8E378C986DF221D831 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - 86295B0784C4F550CBE8BD69 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 949451BBF3DF607E13DBB265 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 913FEB323BDFFD347FB2351B /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - E57940CC1AE193EDBC7E60BC /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - FF5748F504BD5E56042DEADB /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + B0D72C78FFC1C48205B1AD6E /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + BFB07E0B350C6948876BAE8A /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + C3E70C64D6EEF1D329D99AEA /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + E7724C6A3503B208E4E9A53C /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 2E6B87224BF317E31F74B0D6 /* Pods_RunnerTests.framework in Frameworks */, + 52B0D23BFA4C286CA0E41B69 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,27 +103,13 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 56635C0EC97E7F426A37B2E0 /* Pods_Runner.framework in Frameworks */, + 36138DB3332DEE6FFE0E1FE3 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 0EB950B6EBBA8562ED05E9C6 /* Pods */ = { - isa = PBXGroup; - children = ( - 1084579C46BDDCE9E7DF16AC /* Pods-Runner.debug.xcconfig */, - 2D475486DFFA8C60E5710DB0 /* Pods-Runner.release.xcconfig */, - E57940CC1AE193EDBC7E60BC /* Pods-Runner.profile.xcconfig */, - 86295B0784C4F550CBE8BD69 /* Pods-RunnerTests.debug.xcconfig */, - 949451BBF3DF607E13DBB265 /* Pods-RunnerTests.release.xcconfig */, - 812DEB8E378C986DF221D831 /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; 331C80D6294CF71000263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -151,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 0EB950B6EBBA8562ED05E9C6 /* Pods */, + E6BCE486B4BBFADC211C60FF /* Pods */, ); sourceTree = ""; }; @@ -202,12 +188,26 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - 70907F10D88B462804477CEC /* Pods_Runner.framework */, - FF5748F504BD5E56042DEADB /* Pods_RunnerTests.framework */, + 2A728D4E207B0278F8F9C593 /* Pods_Runner.framework */, + 0A2DA58632C7ECDDC6F5CE67 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; }; + E6BCE486B4BBFADC211C60FF /* Pods */ = { + isa = PBXGroup; + children = ( + E7724C6A3503B208E4E9A53C /* Pods-Runner.debug.xcconfig */, + 913FEB323BDFFD347FB2351B /* Pods-Runner.release.xcconfig */, + B0D72C78FFC1C48205B1AD6E /* Pods-Runner.profile.xcconfig */, + C3E70C64D6EEF1D329D99AEA /* Pods-RunnerTests.debug.xcconfig */, + 0D3D188B329D045CE36B21CF /* Pods-RunnerTests.release.xcconfig */, + BFB07E0B350C6948876BAE8A /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 24CA264AC7C1AA37F685BC19 /* [CP] Check Pods Manifest.lock */, + 8915FA819FCC8B1FF9C2CD9A /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 9936C57FFCBF37419AE7561E /* [CP] Check Pods Manifest.lock */, + E5CD31409482E85EF68F0E33 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 038DC0986A46E5F2839BD12E /* [CP] Embed Pods Frameworks */, + 8C531C68C243175172E5DA1B /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,84 +323,84 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 038DC0986A46E5F2839BD12E /* [CP] Embed Pods Frameworks */ = { + 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + ); outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; + shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; }; - 24CA264AC7C1AA37F685BC19 /* [CP] Check Pods Manifest.lock */ = { + 33CC111E2044C6BF0003C045 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + Flutter/ephemeral/FlutterInputs.xcfilelist, ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", + Flutter/ephemeral/tripwire, ); - name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( + Flutter/ephemeral/FlutterOutputs.xcfilelist, ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 3399D490228B24CF009A79C7 /* ShellScript */ = { + 8915FA819FCC8B1FF9C2CD9A /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( ); outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - 33CC111E2044C6BF0003C045 /* ShellScript */ = { + 8C531C68C243175172E5DA1B /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - Flutter/ephemeral/FlutterInputs.xcfilelist, - ); - inputPaths = ( - Flutter/ephemeral/tripwire, + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - Flutter/ephemeral/FlutterOutputs.xcfilelist, - ); - outputPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; }; - 9936C57FFCBF37419AE7561E /* [CP] Check Pods Manifest.lock */ = { + E5CD31409482E85EF68F0E33 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 86295B0784C4F550CBE8BD69 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = C3E70C64D6EEF1D329D99AEA /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 949451BBF3DF607E13DBB265 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 0D3D188B329D045CE36B21CF /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 812DEB8E378C986DF221D831 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = BFB07E0B350C6948876BAE8A /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/next-gen-ui/step_04_d/android/app/build.gradle b/next-gen-ui/step_04_d/android/app/build.gradle deleted file mode 100644 index b6fad008f9..0000000000 --- a/next-gen-ui/step_04_d/android/app/build.gradle +++ /dev/null @@ -1,44 +0,0 @@ -plugins { - id "com.android.application" - id "kotlin-android" - // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. - id "dev.flutter.flutter-gradle-plugin" -} - -android { - namespace = "com.example.next_gen_ui" - compileSdk = flutter.compileSdkVersion - ndkVersion = flutter.ndkVersion - - compileOptions { - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 - } - - kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8 - } - - defaultConfig { - // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). - applicationId = "com.example.next_gen_ui" - // You can update the following values to match your application needs. - // For more information, see: https://flutter.dev/to/review-gradle-config. - minSdk = flutter.minSdkVersion - targetSdk = flutter.targetSdkVersion - versionCode = flutter.versionCode - versionName = flutter.versionName - } - - buildTypes { - release { - // TODO: Add your own signing config for the release build. - // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig = signingConfigs.debug - } - } -} - -flutter { - source = "../.." -} diff --git a/next-gen-ui/step_04_d/android/app/build.gradle.kts b/next-gen-ui/step_04_d/android/app/build.gradle.kts new file mode 100644 index 0000000000..7876ce7a57 --- /dev/null +++ b/next-gen-ui/step_04_d/android/app/build.gradle.kts @@ -0,0 +1,44 @@ +plugins { + id("com.android.application") + id("kotlin-android") + // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. + id("dev.flutter.flutter-gradle-plugin") +} + +android { + namespace = "com.example.next_gen_ui" + compileSdk = flutter.compileSdkVersion + ndkVersion = flutter.ndkVersion + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 + } + + kotlinOptions { + jvmTarget = JavaVersion.VERSION_1_8.toString() + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId = "com.example.next_gen_ui" + // You can update the following values to match your application needs. + // For more information, see: https://flutter.dev/to/review-gradle-config. + minSdk = flutter.minSdkVersion + targetSdk = flutter.targetSdkVersion + versionCode = flutter.versionCode + versionName = flutter.versionName + } + + buildTypes { + release { + // TODO: Add your own signing config for the release build. + // Signing with the debug keys for now, so `flutter run --release` works. + signingConfig = signingConfigs.getByName("debug") + } + } +} + +flutter { + source = "../.." +} diff --git a/next-gen-ui/step_04_d/android/build.gradle b/next-gen-ui/step_04_d/android/build.gradle deleted file mode 100644 index d2ffbffa4c..0000000000 --- a/next-gen-ui/step_04_d/android/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = "../build" -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(":app") -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/next-gen-ui/step_04_d/android/build.gradle.kts b/next-gen-ui/step_04_d/android/build.gradle.kts new file mode 100644 index 0000000000..89176ef44e --- /dev/null +++ b/next-gen-ui/step_04_d/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/next-gen-ui/step_04_d/android/gradle.properties b/next-gen-ui/step_04_d/android/gradle.properties index 2597170821..f018a61817 100644 --- a/next-gen-ui/step_04_d/android/gradle.properties +++ b/next-gen-ui/step_04_d/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/next-gen-ui/step_04_d/android/gradle/wrapper/gradle-wrapper.properties b/next-gen-ui/step_04_d/android/gradle/wrapper/gradle-wrapper.properties index 7bb2df6ba6..afa1e8eb0a 100644 --- a/next-gen-ui/step_04_d/android/gradle/wrapper/gradle-wrapper.properties +++ b/next-gen-ui/step_04_d/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip diff --git a/next-gen-ui/step_04_d/android/settings.gradle b/next-gen-ui/step_04_d/android/settings.gradle deleted file mode 100644 index b9e43bd376..0000000000 --- a/next-gen-ui/step_04_d/android/settings.gradle +++ /dev/null @@ -1,25 +0,0 @@ -pluginManagement { - def flutterSdkPath = { - def properties = new Properties() - file("local.properties").withInputStream { properties.load(it) } - def flutterSdkPath = properties.getProperty("flutter.sdk") - assert flutterSdkPath != null, "flutter.sdk not set in local.properties" - return flutterSdkPath - }() - - includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") - - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} - -plugins { - id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.1.0" apply false - id "org.jetbrains.kotlin.android" version "1.8.22" apply false -} - -include ":app" diff --git a/next-gen-ui/step_04_d/android/settings.gradle.kts b/next-gen-ui/step_04_d/android/settings.gradle.kts new file mode 100644 index 0000000000..a439442c20 --- /dev/null +++ b/next-gen-ui/step_04_d/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.0" apply false + id("org.jetbrains.kotlin.android") version "1.8.22" apply false +} + +include(":app") diff --git a/next-gen-ui/step_04_d/ios/Podfile b/next-gen-ui/step_04_d/ios/Podfile index d97f17e223..e549ee22f3 100644 --- a/next-gen-ui/step_04_d/ios/Podfile +++ b/next-gen-ui/step_04_d/ios/Podfile @@ -29,7 +29,6 @@ flutter_ios_podfile_setup target 'Runner' do use_frameworks! - use_modular_headers! flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) target 'RunnerTests' do diff --git a/next-gen-ui/step_04_d/ios/Runner.xcodeproj/project.pbxproj b/next-gen-ui/step_04_d/ios/Runner.xcodeproj/project.pbxproj index 8f047bdf00..e6e561d8b2 100644 --- a/next-gen-ui/step_04_d/ios/Runner.xcodeproj/project.pbxproj +++ b/next-gen-ui/step_04_d/ios/Runner.xcodeproj/project.pbxproj @@ -10,12 +10,12 @@ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; + 66AB0B66A73F1975E64A8177 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 20BB5BDAE26490ECF22F2507 /* Pods_RunnerTests.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - B62141185A2A64CE6AE671F2 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B1CF946366B840164A5B6A19 /* Pods_Runner.framework */; }; - B81AE38132A98A311F8F51B8 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 249FB81AECD9AE84FFA40AD0 /* Pods_RunnerTests.framework */; }; + CE4E96F7F9B6D48487EB3E31 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F57E7A6E02C2CD3ED18C8215 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,29 +42,29 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 0FBB97D3B77C3F8ABBBA69D1 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 1065108C466C107C635700F4 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 249FB81AECD9AE84FFA40AD0 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 174850BBD948073483DE44FD /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 20BB5BDAE26490ECF22F2507 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 29D2F0C3F335C05D8707828B /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 3440B8D33B7DF5E678FB8D73 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 5220EC7DF66B6FF52474A86B /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - 64F96334240D4715F67078C9 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 6641BE7C3FD295E85E2B1262 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 678B757D90C77B71F96114E8 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; + 943161019A9EC85C7A66EE19 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; - 9790F6561207E583E84D4FF9 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - B1CF946366B840164A5B6A19 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + C840685EE99E8FA6D49D591E /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + F57E7A6E02C2CD3ED18C8215 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -72,26 +72,26 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - B62141185A2A64CE6AE671F2 /* Pods_Runner.framework in Frameworks */, + CE4E96F7F9B6D48487EB3E31 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - C266D94F39398FF0845062EB /* Frameworks */ = { + D4AFF78F5AE2E8EE0BD7286F /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - B81AE38132A98A311F8F51B8 /* Pods_RunnerTests.framework in Frameworks */, + 66AB0B66A73F1975E64A8177 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 29779CA63CE39E764210D572 /* Frameworks */ = { + 1B41929933729C3C4452D755 /* Frameworks */ = { isa = PBXGroup; children = ( - B1CF946366B840164A5B6A19 /* Pods_Runner.framework */, - 249FB81AECD9AE84FFA40AD0 /* Pods_RunnerTests.framework */, + F57E7A6E02C2CD3ED18C8215 /* Pods_Runner.framework */, + 20BB5BDAE26490ECF22F2507 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -104,20 +104,6 @@ path = RunnerTests; sourceTree = ""; }; - 67CB01004931F5EAE1484002 /* Pods */ = { - isa = PBXGroup; - children = ( - 64F96334240D4715F67078C9 /* Pods-Runner.debug.xcconfig */, - 1065108C466C107C635700F4 /* Pods-Runner.release.xcconfig */, - 9790F6561207E583E84D4FF9 /* Pods-Runner.profile.xcconfig */, - 0FBB97D3B77C3F8ABBBA69D1 /* Pods-RunnerTests.debug.xcconfig */, - 5220EC7DF66B6FF52474A86B /* Pods-RunnerTests.release.xcconfig */, - 6641BE7C3FD295E85E2B1262 /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( @@ -136,8 +122,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - 67CB01004931F5EAE1484002 /* Pods */, - 29779CA63CE39E764210D572 /* Frameworks */, + CB8608376662DCF167CF091D /* Pods */, + 1B41929933729C3C4452D755 /* Frameworks */, ); sourceTree = ""; }; @@ -165,6 +151,20 @@ path = Runner; sourceTree = ""; }; + CB8608376662DCF167CF091D /* Pods */ = { + isa = PBXGroup; + children = ( + 678B757D90C77B71F96114E8 /* Pods-Runner.debug.xcconfig */, + 3440B8D33B7DF5E678FB8D73 /* Pods-Runner.release.xcconfig */, + 174850BBD948073483DE44FD /* Pods-Runner.profile.xcconfig */, + 29D2F0C3F335C05D8707828B /* Pods-RunnerTests.debug.xcconfig */, + 943161019A9EC85C7A66EE19 /* Pods-RunnerTests.release.xcconfig */, + C840685EE99E8FA6D49D591E /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 1A41435D909B4A5BA59DA804 /* [CP] Check Pods Manifest.lock */, + AC04A6680CE49A8AB43B1FFA /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - C266D94F39398FF0845062EB /* Frameworks */, + D4AFF78F5AE2E8EE0BD7286F /* Frameworks */, ); buildRules = ( ); @@ -191,7 +191,7 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 15FA0791F2F6E4DEC3602581 /* [CP] Check Pods Manifest.lock */, + 214492064922C9E65703CF3F /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, @@ -269,7 +269,7 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 15FA0791F2F6E4DEC3602581 /* [CP] Check Pods Manifest.lock */ = { + 214492064922C9E65703CF3F /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -291,58 +291,58 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 1A41435D909B4A5BA59DA804 /* [CP] Check Pods Manifest.lock */ = { + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); + name = "Thin Binary"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputPaths = ( - "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); - name = "Thin Binary"; + name = "Run Script"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { + AC04A6680CE49A8AB43B1FFA /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "Run Script"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -469,7 +469,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 0FBB97D3B77C3F8ABBBA69D1 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 29D2F0C3F335C05D8707828B /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -487,7 +487,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 5220EC7DF66B6FF52474A86B /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 943161019A9EC85C7A66EE19 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -503,7 +503,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 6641BE7C3FD295E85E2B1262 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = C840685EE99E8FA6D49D591E /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/next-gen-ui/step_04_d/macos/Podfile b/next-gen-ui/step_04_d/macos/Podfile index c795730db8..29c8eb3294 100644 --- a/next-gen-ui/step_04_d/macos/Podfile +++ b/next-gen-ui/step_04_d/macos/Podfile @@ -28,7 +28,6 @@ flutter_macos_podfile_setup target 'Runner' do use_frameworks! - use_modular_headers! flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__)) target 'RunnerTests' do diff --git a/next-gen-ui/step_04_d/macos/Runner.xcodeproj/project.pbxproj b/next-gen-ui/step_04_d/macos/Runner.xcodeproj/project.pbxproj index 5ca8a3231e..4579683b58 100644 --- a/next-gen-ui/step_04_d/macos/Runner.xcodeproj/project.pbxproj +++ b/next-gen-ui/step_04_d/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ - 2E6B87224BF317E31F74B0D6 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FF5748F504BD5E56042DEADB /* Pods_RunnerTests.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 56635C0EC97E7F426A37B2E0 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 70907F10D88B462804477CEC /* Pods_Runner.framework */; }; + 36138DB3332DEE6FFE0E1FE3 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2A728D4E207B0278F8F9C593 /* Pods_Runner.framework */; }; + 52B0D23BFA4C286CA0E41B69 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0A2DA58632C7ECDDC6F5CE67 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,8 +62,9 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 1084579C46BDDCE9E7DF16AC /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 2D475486DFFA8C60E5710DB0 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 0A2DA58632C7ECDDC6F5CE67 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 0D3D188B329D045CE36B21CF /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 2A728D4E207B0278F8F9C593 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -80,14 +81,13 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 70907F10D88B462804477CEC /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 812DEB8E378C986DF221D831 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - 86295B0784C4F550CBE8BD69 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 949451BBF3DF607E13DBB265 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 913FEB323BDFFD347FB2351B /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - E57940CC1AE193EDBC7E60BC /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - FF5748F504BD5E56042DEADB /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + B0D72C78FFC1C48205B1AD6E /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + BFB07E0B350C6948876BAE8A /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + C3E70C64D6EEF1D329D99AEA /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + E7724C6A3503B208E4E9A53C /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 2E6B87224BF317E31F74B0D6 /* Pods_RunnerTests.framework in Frameworks */, + 52B0D23BFA4C286CA0E41B69 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,27 +103,13 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 56635C0EC97E7F426A37B2E0 /* Pods_Runner.framework in Frameworks */, + 36138DB3332DEE6FFE0E1FE3 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 0EB950B6EBBA8562ED05E9C6 /* Pods */ = { - isa = PBXGroup; - children = ( - 1084579C46BDDCE9E7DF16AC /* Pods-Runner.debug.xcconfig */, - 2D475486DFFA8C60E5710DB0 /* Pods-Runner.release.xcconfig */, - E57940CC1AE193EDBC7E60BC /* Pods-Runner.profile.xcconfig */, - 86295B0784C4F550CBE8BD69 /* Pods-RunnerTests.debug.xcconfig */, - 949451BBF3DF607E13DBB265 /* Pods-RunnerTests.release.xcconfig */, - 812DEB8E378C986DF221D831 /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; 331C80D6294CF71000263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -151,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 0EB950B6EBBA8562ED05E9C6 /* Pods */, + E6BCE486B4BBFADC211C60FF /* Pods */, ); sourceTree = ""; }; @@ -202,12 +188,26 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - 70907F10D88B462804477CEC /* Pods_Runner.framework */, - FF5748F504BD5E56042DEADB /* Pods_RunnerTests.framework */, + 2A728D4E207B0278F8F9C593 /* Pods_Runner.framework */, + 0A2DA58632C7ECDDC6F5CE67 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; }; + E6BCE486B4BBFADC211C60FF /* Pods */ = { + isa = PBXGroup; + children = ( + E7724C6A3503B208E4E9A53C /* Pods-Runner.debug.xcconfig */, + 913FEB323BDFFD347FB2351B /* Pods-Runner.release.xcconfig */, + B0D72C78FFC1C48205B1AD6E /* Pods-Runner.profile.xcconfig */, + C3E70C64D6EEF1D329D99AEA /* Pods-RunnerTests.debug.xcconfig */, + 0D3D188B329D045CE36B21CF /* Pods-RunnerTests.release.xcconfig */, + BFB07E0B350C6948876BAE8A /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 24CA264AC7C1AA37F685BC19 /* [CP] Check Pods Manifest.lock */, + 8915FA819FCC8B1FF9C2CD9A /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 9936C57FFCBF37419AE7561E /* [CP] Check Pods Manifest.lock */, + E5CD31409482E85EF68F0E33 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 038DC0986A46E5F2839BD12E /* [CP] Embed Pods Frameworks */, + 8C531C68C243175172E5DA1B /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,84 +323,84 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 038DC0986A46E5F2839BD12E /* [CP] Embed Pods Frameworks */ = { + 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + ); outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; + shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; }; - 24CA264AC7C1AA37F685BC19 /* [CP] Check Pods Manifest.lock */ = { + 33CC111E2044C6BF0003C045 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + Flutter/ephemeral/FlutterInputs.xcfilelist, ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", + Flutter/ephemeral/tripwire, ); - name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( + Flutter/ephemeral/FlutterOutputs.xcfilelist, ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 3399D490228B24CF009A79C7 /* ShellScript */ = { + 8915FA819FCC8B1FF9C2CD9A /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( ); outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - 33CC111E2044C6BF0003C045 /* ShellScript */ = { + 8C531C68C243175172E5DA1B /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - Flutter/ephemeral/FlutterInputs.xcfilelist, - ); - inputPaths = ( - Flutter/ephemeral/tripwire, + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - Flutter/ephemeral/FlutterOutputs.xcfilelist, - ); - outputPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; }; - 9936C57FFCBF37419AE7561E /* [CP] Check Pods Manifest.lock */ = { + E5CD31409482E85EF68F0E33 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 86295B0784C4F550CBE8BD69 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = C3E70C64D6EEF1D329D99AEA /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 949451BBF3DF607E13DBB265 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 0D3D188B329D045CE36B21CF /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 812DEB8E378C986DF221D831 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = BFB07E0B350C6948876BAE8A /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/next-gen-ui/step_04_e/android/app/build.gradle b/next-gen-ui/step_04_e/android/app/build.gradle deleted file mode 100644 index b6fad008f9..0000000000 --- a/next-gen-ui/step_04_e/android/app/build.gradle +++ /dev/null @@ -1,44 +0,0 @@ -plugins { - id "com.android.application" - id "kotlin-android" - // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. - id "dev.flutter.flutter-gradle-plugin" -} - -android { - namespace = "com.example.next_gen_ui" - compileSdk = flutter.compileSdkVersion - ndkVersion = flutter.ndkVersion - - compileOptions { - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 - } - - kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8 - } - - defaultConfig { - // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). - applicationId = "com.example.next_gen_ui" - // You can update the following values to match your application needs. - // For more information, see: https://flutter.dev/to/review-gradle-config. - minSdk = flutter.minSdkVersion - targetSdk = flutter.targetSdkVersion - versionCode = flutter.versionCode - versionName = flutter.versionName - } - - buildTypes { - release { - // TODO: Add your own signing config for the release build. - // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig = signingConfigs.debug - } - } -} - -flutter { - source = "../.." -} diff --git a/next-gen-ui/step_04_e/android/app/build.gradle.kts b/next-gen-ui/step_04_e/android/app/build.gradle.kts new file mode 100644 index 0000000000..7876ce7a57 --- /dev/null +++ b/next-gen-ui/step_04_e/android/app/build.gradle.kts @@ -0,0 +1,44 @@ +plugins { + id("com.android.application") + id("kotlin-android") + // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. + id("dev.flutter.flutter-gradle-plugin") +} + +android { + namespace = "com.example.next_gen_ui" + compileSdk = flutter.compileSdkVersion + ndkVersion = flutter.ndkVersion + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 + } + + kotlinOptions { + jvmTarget = JavaVersion.VERSION_1_8.toString() + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId = "com.example.next_gen_ui" + // You can update the following values to match your application needs. + // For more information, see: https://flutter.dev/to/review-gradle-config. + minSdk = flutter.minSdkVersion + targetSdk = flutter.targetSdkVersion + versionCode = flutter.versionCode + versionName = flutter.versionName + } + + buildTypes { + release { + // TODO: Add your own signing config for the release build. + // Signing with the debug keys for now, so `flutter run --release` works. + signingConfig = signingConfigs.getByName("debug") + } + } +} + +flutter { + source = "../.." +} diff --git a/next-gen-ui/step_04_e/android/build.gradle b/next-gen-ui/step_04_e/android/build.gradle deleted file mode 100644 index d2ffbffa4c..0000000000 --- a/next-gen-ui/step_04_e/android/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = "../build" -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(":app") -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/next-gen-ui/step_04_e/android/build.gradle.kts b/next-gen-ui/step_04_e/android/build.gradle.kts new file mode 100644 index 0000000000..89176ef44e --- /dev/null +++ b/next-gen-ui/step_04_e/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/next-gen-ui/step_04_e/android/gradle.properties b/next-gen-ui/step_04_e/android/gradle.properties index 2597170821..f018a61817 100644 --- a/next-gen-ui/step_04_e/android/gradle.properties +++ b/next-gen-ui/step_04_e/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/next-gen-ui/step_04_e/android/gradle/wrapper/gradle-wrapper.properties b/next-gen-ui/step_04_e/android/gradle/wrapper/gradle-wrapper.properties index 7bb2df6ba6..afa1e8eb0a 100644 --- a/next-gen-ui/step_04_e/android/gradle/wrapper/gradle-wrapper.properties +++ b/next-gen-ui/step_04_e/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip diff --git a/next-gen-ui/step_04_e/android/settings.gradle b/next-gen-ui/step_04_e/android/settings.gradle deleted file mode 100644 index b9e43bd376..0000000000 --- a/next-gen-ui/step_04_e/android/settings.gradle +++ /dev/null @@ -1,25 +0,0 @@ -pluginManagement { - def flutterSdkPath = { - def properties = new Properties() - file("local.properties").withInputStream { properties.load(it) } - def flutterSdkPath = properties.getProperty("flutter.sdk") - assert flutterSdkPath != null, "flutter.sdk not set in local.properties" - return flutterSdkPath - }() - - includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") - - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} - -plugins { - id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.1.0" apply false - id "org.jetbrains.kotlin.android" version "1.8.22" apply false -} - -include ":app" diff --git a/next-gen-ui/step_04_e/android/settings.gradle.kts b/next-gen-ui/step_04_e/android/settings.gradle.kts new file mode 100644 index 0000000000..a439442c20 --- /dev/null +++ b/next-gen-ui/step_04_e/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.0" apply false + id("org.jetbrains.kotlin.android") version "1.8.22" apply false +} + +include(":app") diff --git a/next-gen-ui/step_04_e/ios/Podfile b/next-gen-ui/step_04_e/ios/Podfile index d97f17e223..e549ee22f3 100644 --- a/next-gen-ui/step_04_e/ios/Podfile +++ b/next-gen-ui/step_04_e/ios/Podfile @@ -29,7 +29,6 @@ flutter_ios_podfile_setup target 'Runner' do use_frameworks! - use_modular_headers! flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) target 'RunnerTests' do diff --git a/next-gen-ui/step_04_e/ios/Runner.xcodeproj/project.pbxproj b/next-gen-ui/step_04_e/ios/Runner.xcodeproj/project.pbxproj index 8f047bdf00..e6e561d8b2 100644 --- a/next-gen-ui/step_04_e/ios/Runner.xcodeproj/project.pbxproj +++ b/next-gen-ui/step_04_e/ios/Runner.xcodeproj/project.pbxproj @@ -10,12 +10,12 @@ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; + 66AB0B66A73F1975E64A8177 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 20BB5BDAE26490ECF22F2507 /* Pods_RunnerTests.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - B62141185A2A64CE6AE671F2 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B1CF946366B840164A5B6A19 /* Pods_Runner.framework */; }; - B81AE38132A98A311F8F51B8 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 249FB81AECD9AE84FFA40AD0 /* Pods_RunnerTests.framework */; }; + CE4E96F7F9B6D48487EB3E31 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F57E7A6E02C2CD3ED18C8215 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,29 +42,29 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 0FBB97D3B77C3F8ABBBA69D1 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 1065108C466C107C635700F4 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 249FB81AECD9AE84FFA40AD0 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 174850BBD948073483DE44FD /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 20BB5BDAE26490ECF22F2507 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 29D2F0C3F335C05D8707828B /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 3440B8D33B7DF5E678FB8D73 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 5220EC7DF66B6FF52474A86B /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - 64F96334240D4715F67078C9 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 6641BE7C3FD295E85E2B1262 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 678B757D90C77B71F96114E8 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; + 943161019A9EC85C7A66EE19 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; - 9790F6561207E583E84D4FF9 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - B1CF946366B840164A5B6A19 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + C840685EE99E8FA6D49D591E /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + F57E7A6E02C2CD3ED18C8215 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -72,26 +72,26 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - B62141185A2A64CE6AE671F2 /* Pods_Runner.framework in Frameworks */, + CE4E96F7F9B6D48487EB3E31 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - C266D94F39398FF0845062EB /* Frameworks */ = { + D4AFF78F5AE2E8EE0BD7286F /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - B81AE38132A98A311F8F51B8 /* Pods_RunnerTests.framework in Frameworks */, + 66AB0B66A73F1975E64A8177 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 29779CA63CE39E764210D572 /* Frameworks */ = { + 1B41929933729C3C4452D755 /* Frameworks */ = { isa = PBXGroup; children = ( - B1CF946366B840164A5B6A19 /* Pods_Runner.framework */, - 249FB81AECD9AE84FFA40AD0 /* Pods_RunnerTests.framework */, + F57E7A6E02C2CD3ED18C8215 /* Pods_Runner.framework */, + 20BB5BDAE26490ECF22F2507 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -104,20 +104,6 @@ path = RunnerTests; sourceTree = ""; }; - 67CB01004931F5EAE1484002 /* Pods */ = { - isa = PBXGroup; - children = ( - 64F96334240D4715F67078C9 /* Pods-Runner.debug.xcconfig */, - 1065108C466C107C635700F4 /* Pods-Runner.release.xcconfig */, - 9790F6561207E583E84D4FF9 /* Pods-Runner.profile.xcconfig */, - 0FBB97D3B77C3F8ABBBA69D1 /* Pods-RunnerTests.debug.xcconfig */, - 5220EC7DF66B6FF52474A86B /* Pods-RunnerTests.release.xcconfig */, - 6641BE7C3FD295E85E2B1262 /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( @@ -136,8 +122,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - 67CB01004931F5EAE1484002 /* Pods */, - 29779CA63CE39E764210D572 /* Frameworks */, + CB8608376662DCF167CF091D /* Pods */, + 1B41929933729C3C4452D755 /* Frameworks */, ); sourceTree = ""; }; @@ -165,6 +151,20 @@ path = Runner; sourceTree = ""; }; + CB8608376662DCF167CF091D /* Pods */ = { + isa = PBXGroup; + children = ( + 678B757D90C77B71F96114E8 /* Pods-Runner.debug.xcconfig */, + 3440B8D33B7DF5E678FB8D73 /* Pods-Runner.release.xcconfig */, + 174850BBD948073483DE44FD /* Pods-Runner.profile.xcconfig */, + 29D2F0C3F335C05D8707828B /* Pods-RunnerTests.debug.xcconfig */, + 943161019A9EC85C7A66EE19 /* Pods-RunnerTests.release.xcconfig */, + C840685EE99E8FA6D49D591E /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 1A41435D909B4A5BA59DA804 /* [CP] Check Pods Manifest.lock */, + AC04A6680CE49A8AB43B1FFA /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - C266D94F39398FF0845062EB /* Frameworks */, + D4AFF78F5AE2E8EE0BD7286F /* Frameworks */, ); buildRules = ( ); @@ -191,7 +191,7 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 15FA0791F2F6E4DEC3602581 /* [CP] Check Pods Manifest.lock */, + 214492064922C9E65703CF3F /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, @@ -269,7 +269,7 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 15FA0791F2F6E4DEC3602581 /* [CP] Check Pods Manifest.lock */ = { + 214492064922C9E65703CF3F /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -291,58 +291,58 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 1A41435D909B4A5BA59DA804 /* [CP] Check Pods Manifest.lock */ = { + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); + name = "Thin Binary"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputPaths = ( - "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); - name = "Thin Binary"; + name = "Run Script"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { + AC04A6680CE49A8AB43B1FFA /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "Run Script"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -469,7 +469,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 0FBB97D3B77C3F8ABBBA69D1 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 29D2F0C3F335C05D8707828B /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -487,7 +487,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 5220EC7DF66B6FF52474A86B /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 943161019A9EC85C7A66EE19 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -503,7 +503,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 6641BE7C3FD295E85E2B1262 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = C840685EE99E8FA6D49D591E /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/next-gen-ui/step_04_e/macos/Podfile b/next-gen-ui/step_04_e/macos/Podfile index c795730db8..29c8eb3294 100644 --- a/next-gen-ui/step_04_e/macos/Podfile +++ b/next-gen-ui/step_04_e/macos/Podfile @@ -28,7 +28,6 @@ flutter_macos_podfile_setup target 'Runner' do use_frameworks! - use_modular_headers! flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__)) target 'RunnerTests' do diff --git a/next-gen-ui/step_04_e/macos/Runner.xcodeproj/project.pbxproj b/next-gen-ui/step_04_e/macos/Runner.xcodeproj/project.pbxproj index 5ca8a3231e..4579683b58 100644 --- a/next-gen-ui/step_04_e/macos/Runner.xcodeproj/project.pbxproj +++ b/next-gen-ui/step_04_e/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ - 2E6B87224BF317E31F74B0D6 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FF5748F504BD5E56042DEADB /* Pods_RunnerTests.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 56635C0EC97E7F426A37B2E0 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 70907F10D88B462804477CEC /* Pods_Runner.framework */; }; + 36138DB3332DEE6FFE0E1FE3 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2A728D4E207B0278F8F9C593 /* Pods_Runner.framework */; }; + 52B0D23BFA4C286CA0E41B69 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0A2DA58632C7ECDDC6F5CE67 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,8 +62,9 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 1084579C46BDDCE9E7DF16AC /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 2D475486DFFA8C60E5710DB0 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 0A2DA58632C7ECDDC6F5CE67 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 0D3D188B329D045CE36B21CF /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 2A728D4E207B0278F8F9C593 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -80,14 +81,13 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 70907F10D88B462804477CEC /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 812DEB8E378C986DF221D831 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - 86295B0784C4F550CBE8BD69 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 949451BBF3DF607E13DBB265 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 913FEB323BDFFD347FB2351B /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - E57940CC1AE193EDBC7E60BC /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - FF5748F504BD5E56042DEADB /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + B0D72C78FFC1C48205B1AD6E /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + BFB07E0B350C6948876BAE8A /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + C3E70C64D6EEF1D329D99AEA /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + E7724C6A3503B208E4E9A53C /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 2E6B87224BF317E31F74B0D6 /* Pods_RunnerTests.framework in Frameworks */, + 52B0D23BFA4C286CA0E41B69 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,27 +103,13 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 56635C0EC97E7F426A37B2E0 /* Pods_Runner.framework in Frameworks */, + 36138DB3332DEE6FFE0E1FE3 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 0EB950B6EBBA8562ED05E9C6 /* Pods */ = { - isa = PBXGroup; - children = ( - 1084579C46BDDCE9E7DF16AC /* Pods-Runner.debug.xcconfig */, - 2D475486DFFA8C60E5710DB0 /* Pods-Runner.release.xcconfig */, - E57940CC1AE193EDBC7E60BC /* Pods-Runner.profile.xcconfig */, - 86295B0784C4F550CBE8BD69 /* Pods-RunnerTests.debug.xcconfig */, - 949451BBF3DF607E13DBB265 /* Pods-RunnerTests.release.xcconfig */, - 812DEB8E378C986DF221D831 /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; 331C80D6294CF71000263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -151,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 0EB950B6EBBA8562ED05E9C6 /* Pods */, + E6BCE486B4BBFADC211C60FF /* Pods */, ); sourceTree = ""; }; @@ -202,12 +188,26 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - 70907F10D88B462804477CEC /* Pods_Runner.framework */, - FF5748F504BD5E56042DEADB /* Pods_RunnerTests.framework */, + 2A728D4E207B0278F8F9C593 /* Pods_Runner.framework */, + 0A2DA58632C7ECDDC6F5CE67 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; }; + E6BCE486B4BBFADC211C60FF /* Pods */ = { + isa = PBXGroup; + children = ( + E7724C6A3503B208E4E9A53C /* Pods-Runner.debug.xcconfig */, + 913FEB323BDFFD347FB2351B /* Pods-Runner.release.xcconfig */, + B0D72C78FFC1C48205B1AD6E /* Pods-Runner.profile.xcconfig */, + C3E70C64D6EEF1D329D99AEA /* Pods-RunnerTests.debug.xcconfig */, + 0D3D188B329D045CE36B21CF /* Pods-RunnerTests.release.xcconfig */, + BFB07E0B350C6948876BAE8A /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 24CA264AC7C1AA37F685BC19 /* [CP] Check Pods Manifest.lock */, + 8915FA819FCC8B1FF9C2CD9A /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 9936C57FFCBF37419AE7561E /* [CP] Check Pods Manifest.lock */, + E5CD31409482E85EF68F0E33 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 038DC0986A46E5F2839BD12E /* [CP] Embed Pods Frameworks */, + 8C531C68C243175172E5DA1B /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,84 +323,84 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 038DC0986A46E5F2839BD12E /* [CP] Embed Pods Frameworks */ = { + 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + ); outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; + shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; }; - 24CA264AC7C1AA37F685BC19 /* [CP] Check Pods Manifest.lock */ = { + 33CC111E2044C6BF0003C045 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + Flutter/ephemeral/FlutterInputs.xcfilelist, ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", + Flutter/ephemeral/tripwire, ); - name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( + Flutter/ephemeral/FlutterOutputs.xcfilelist, ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 3399D490228B24CF009A79C7 /* ShellScript */ = { + 8915FA819FCC8B1FF9C2CD9A /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( ); outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - 33CC111E2044C6BF0003C045 /* ShellScript */ = { + 8C531C68C243175172E5DA1B /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - Flutter/ephemeral/FlutterInputs.xcfilelist, - ); - inputPaths = ( - Flutter/ephemeral/tripwire, + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - Flutter/ephemeral/FlutterOutputs.xcfilelist, - ); - outputPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; }; - 9936C57FFCBF37419AE7561E /* [CP] Check Pods Manifest.lock */ = { + E5CD31409482E85EF68F0E33 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 86295B0784C4F550CBE8BD69 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = C3E70C64D6EEF1D329D99AEA /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 949451BBF3DF607E13DBB265 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 0D3D188B329D045CE36B21CF /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 812DEB8E378C986DF221D831 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = BFB07E0B350C6948876BAE8A /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/next-gen-ui/step_05_a/android/app/build.gradle b/next-gen-ui/step_05_a/android/app/build.gradle deleted file mode 100644 index b6fad008f9..0000000000 --- a/next-gen-ui/step_05_a/android/app/build.gradle +++ /dev/null @@ -1,44 +0,0 @@ -plugins { - id "com.android.application" - id "kotlin-android" - // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. - id "dev.flutter.flutter-gradle-plugin" -} - -android { - namespace = "com.example.next_gen_ui" - compileSdk = flutter.compileSdkVersion - ndkVersion = flutter.ndkVersion - - compileOptions { - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 - } - - kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8 - } - - defaultConfig { - // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). - applicationId = "com.example.next_gen_ui" - // You can update the following values to match your application needs. - // For more information, see: https://flutter.dev/to/review-gradle-config. - minSdk = flutter.minSdkVersion - targetSdk = flutter.targetSdkVersion - versionCode = flutter.versionCode - versionName = flutter.versionName - } - - buildTypes { - release { - // TODO: Add your own signing config for the release build. - // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig = signingConfigs.debug - } - } -} - -flutter { - source = "../.." -} diff --git a/next-gen-ui/step_05_a/android/app/build.gradle.kts b/next-gen-ui/step_05_a/android/app/build.gradle.kts new file mode 100644 index 0000000000..7876ce7a57 --- /dev/null +++ b/next-gen-ui/step_05_a/android/app/build.gradle.kts @@ -0,0 +1,44 @@ +plugins { + id("com.android.application") + id("kotlin-android") + // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. + id("dev.flutter.flutter-gradle-plugin") +} + +android { + namespace = "com.example.next_gen_ui" + compileSdk = flutter.compileSdkVersion + ndkVersion = flutter.ndkVersion + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 + } + + kotlinOptions { + jvmTarget = JavaVersion.VERSION_1_8.toString() + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId = "com.example.next_gen_ui" + // You can update the following values to match your application needs. + // For more information, see: https://flutter.dev/to/review-gradle-config. + minSdk = flutter.minSdkVersion + targetSdk = flutter.targetSdkVersion + versionCode = flutter.versionCode + versionName = flutter.versionName + } + + buildTypes { + release { + // TODO: Add your own signing config for the release build. + // Signing with the debug keys for now, so `flutter run --release` works. + signingConfig = signingConfigs.getByName("debug") + } + } +} + +flutter { + source = "../.." +} diff --git a/next-gen-ui/step_05_a/android/build.gradle b/next-gen-ui/step_05_a/android/build.gradle deleted file mode 100644 index d2ffbffa4c..0000000000 --- a/next-gen-ui/step_05_a/android/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = "../build" -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(":app") -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/next-gen-ui/step_05_a/android/build.gradle.kts b/next-gen-ui/step_05_a/android/build.gradle.kts new file mode 100644 index 0000000000..89176ef44e --- /dev/null +++ b/next-gen-ui/step_05_a/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/next-gen-ui/step_05_a/android/gradle.properties b/next-gen-ui/step_05_a/android/gradle.properties index 2597170821..f018a61817 100644 --- a/next-gen-ui/step_05_a/android/gradle.properties +++ b/next-gen-ui/step_05_a/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/next-gen-ui/step_05_a/android/gradle/wrapper/gradle-wrapper.properties b/next-gen-ui/step_05_a/android/gradle/wrapper/gradle-wrapper.properties index 7bb2df6ba6..afa1e8eb0a 100644 --- a/next-gen-ui/step_05_a/android/gradle/wrapper/gradle-wrapper.properties +++ b/next-gen-ui/step_05_a/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip diff --git a/next-gen-ui/step_05_a/android/settings.gradle b/next-gen-ui/step_05_a/android/settings.gradle deleted file mode 100644 index b9e43bd376..0000000000 --- a/next-gen-ui/step_05_a/android/settings.gradle +++ /dev/null @@ -1,25 +0,0 @@ -pluginManagement { - def flutterSdkPath = { - def properties = new Properties() - file("local.properties").withInputStream { properties.load(it) } - def flutterSdkPath = properties.getProperty("flutter.sdk") - assert flutterSdkPath != null, "flutter.sdk not set in local.properties" - return flutterSdkPath - }() - - includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") - - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} - -plugins { - id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.1.0" apply false - id "org.jetbrains.kotlin.android" version "1.8.22" apply false -} - -include ":app" diff --git a/next-gen-ui/step_05_a/android/settings.gradle.kts b/next-gen-ui/step_05_a/android/settings.gradle.kts new file mode 100644 index 0000000000..a439442c20 --- /dev/null +++ b/next-gen-ui/step_05_a/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.0" apply false + id("org.jetbrains.kotlin.android") version "1.8.22" apply false +} + +include(":app") diff --git a/next-gen-ui/step_05_a/ios/Podfile b/next-gen-ui/step_05_a/ios/Podfile index d97f17e223..e549ee22f3 100644 --- a/next-gen-ui/step_05_a/ios/Podfile +++ b/next-gen-ui/step_05_a/ios/Podfile @@ -29,7 +29,6 @@ flutter_ios_podfile_setup target 'Runner' do use_frameworks! - use_modular_headers! flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) target 'RunnerTests' do diff --git a/next-gen-ui/step_05_a/ios/Runner.xcodeproj/project.pbxproj b/next-gen-ui/step_05_a/ios/Runner.xcodeproj/project.pbxproj index 8f047bdf00..e6e561d8b2 100644 --- a/next-gen-ui/step_05_a/ios/Runner.xcodeproj/project.pbxproj +++ b/next-gen-ui/step_05_a/ios/Runner.xcodeproj/project.pbxproj @@ -10,12 +10,12 @@ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; + 66AB0B66A73F1975E64A8177 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 20BB5BDAE26490ECF22F2507 /* Pods_RunnerTests.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - B62141185A2A64CE6AE671F2 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B1CF946366B840164A5B6A19 /* Pods_Runner.framework */; }; - B81AE38132A98A311F8F51B8 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 249FB81AECD9AE84FFA40AD0 /* Pods_RunnerTests.framework */; }; + CE4E96F7F9B6D48487EB3E31 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F57E7A6E02C2CD3ED18C8215 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,29 +42,29 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 0FBB97D3B77C3F8ABBBA69D1 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 1065108C466C107C635700F4 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 249FB81AECD9AE84FFA40AD0 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 174850BBD948073483DE44FD /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 20BB5BDAE26490ECF22F2507 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 29D2F0C3F335C05D8707828B /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 3440B8D33B7DF5E678FB8D73 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 5220EC7DF66B6FF52474A86B /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - 64F96334240D4715F67078C9 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 6641BE7C3FD295E85E2B1262 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 678B757D90C77B71F96114E8 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; + 943161019A9EC85C7A66EE19 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; - 9790F6561207E583E84D4FF9 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - B1CF946366B840164A5B6A19 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + C840685EE99E8FA6D49D591E /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + F57E7A6E02C2CD3ED18C8215 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -72,26 +72,26 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - B62141185A2A64CE6AE671F2 /* Pods_Runner.framework in Frameworks */, + CE4E96F7F9B6D48487EB3E31 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - C266D94F39398FF0845062EB /* Frameworks */ = { + D4AFF78F5AE2E8EE0BD7286F /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - B81AE38132A98A311F8F51B8 /* Pods_RunnerTests.framework in Frameworks */, + 66AB0B66A73F1975E64A8177 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 29779CA63CE39E764210D572 /* Frameworks */ = { + 1B41929933729C3C4452D755 /* Frameworks */ = { isa = PBXGroup; children = ( - B1CF946366B840164A5B6A19 /* Pods_Runner.framework */, - 249FB81AECD9AE84FFA40AD0 /* Pods_RunnerTests.framework */, + F57E7A6E02C2CD3ED18C8215 /* Pods_Runner.framework */, + 20BB5BDAE26490ECF22F2507 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -104,20 +104,6 @@ path = RunnerTests; sourceTree = ""; }; - 67CB01004931F5EAE1484002 /* Pods */ = { - isa = PBXGroup; - children = ( - 64F96334240D4715F67078C9 /* Pods-Runner.debug.xcconfig */, - 1065108C466C107C635700F4 /* Pods-Runner.release.xcconfig */, - 9790F6561207E583E84D4FF9 /* Pods-Runner.profile.xcconfig */, - 0FBB97D3B77C3F8ABBBA69D1 /* Pods-RunnerTests.debug.xcconfig */, - 5220EC7DF66B6FF52474A86B /* Pods-RunnerTests.release.xcconfig */, - 6641BE7C3FD295E85E2B1262 /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( @@ -136,8 +122,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - 67CB01004931F5EAE1484002 /* Pods */, - 29779CA63CE39E764210D572 /* Frameworks */, + CB8608376662DCF167CF091D /* Pods */, + 1B41929933729C3C4452D755 /* Frameworks */, ); sourceTree = ""; }; @@ -165,6 +151,20 @@ path = Runner; sourceTree = ""; }; + CB8608376662DCF167CF091D /* Pods */ = { + isa = PBXGroup; + children = ( + 678B757D90C77B71F96114E8 /* Pods-Runner.debug.xcconfig */, + 3440B8D33B7DF5E678FB8D73 /* Pods-Runner.release.xcconfig */, + 174850BBD948073483DE44FD /* Pods-Runner.profile.xcconfig */, + 29D2F0C3F335C05D8707828B /* Pods-RunnerTests.debug.xcconfig */, + 943161019A9EC85C7A66EE19 /* Pods-RunnerTests.release.xcconfig */, + C840685EE99E8FA6D49D591E /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 1A41435D909B4A5BA59DA804 /* [CP] Check Pods Manifest.lock */, + AC04A6680CE49A8AB43B1FFA /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - C266D94F39398FF0845062EB /* Frameworks */, + D4AFF78F5AE2E8EE0BD7286F /* Frameworks */, ); buildRules = ( ); @@ -191,7 +191,7 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 15FA0791F2F6E4DEC3602581 /* [CP] Check Pods Manifest.lock */, + 214492064922C9E65703CF3F /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, @@ -269,7 +269,7 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 15FA0791F2F6E4DEC3602581 /* [CP] Check Pods Manifest.lock */ = { + 214492064922C9E65703CF3F /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -291,58 +291,58 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 1A41435D909B4A5BA59DA804 /* [CP] Check Pods Manifest.lock */ = { + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); + name = "Thin Binary"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputPaths = ( - "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); - name = "Thin Binary"; + name = "Run Script"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { + AC04A6680CE49A8AB43B1FFA /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "Run Script"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -469,7 +469,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 0FBB97D3B77C3F8ABBBA69D1 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 29D2F0C3F335C05D8707828B /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -487,7 +487,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 5220EC7DF66B6FF52474A86B /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 943161019A9EC85C7A66EE19 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -503,7 +503,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 6641BE7C3FD295E85E2B1262 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = C840685EE99E8FA6D49D591E /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/next-gen-ui/step_05_a/macos/Podfile b/next-gen-ui/step_05_a/macos/Podfile index c795730db8..29c8eb3294 100644 --- a/next-gen-ui/step_05_a/macos/Podfile +++ b/next-gen-ui/step_05_a/macos/Podfile @@ -28,7 +28,6 @@ flutter_macos_podfile_setup target 'Runner' do use_frameworks! - use_modular_headers! flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__)) target 'RunnerTests' do diff --git a/next-gen-ui/step_05_a/macos/Runner.xcodeproj/project.pbxproj b/next-gen-ui/step_05_a/macos/Runner.xcodeproj/project.pbxproj index 5ca8a3231e..4579683b58 100644 --- a/next-gen-ui/step_05_a/macos/Runner.xcodeproj/project.pbxproj +++ b/next-gen-ui/step_05_a/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ - 2E6B87224BF317E31F74B0D6 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FF5748F504BD5E56042DEADB /* Pods_RunnerTests.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 56635C0EC97E7F426A37B2E0 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 70907F10D88B462804477CEC /* Pods_Runner.framework */; }; + 36138DB3332DEE6FFE0E1FE3 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2A728D4E207B0278F8F9C593 /* Pods_Runner.framework */; }; + 52B0D23BFA4C286CA0E41B69 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0A2DA58632C7ECDDC6F5CE67 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,8 +62,9 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 1084579C46BDDCE9E7DF16AC /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 2D475486DFFA8C60E5710DB0 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 0A2DA58632C7ECDDC6F5CE67 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 0D3D188B329D045CE36B21CF /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 2A728D4E207B0278F8F9C593 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -80,14 +81,13 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 70907F10D88B462804477CEC /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 812DEB8E378C986DF221D831 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - 86295B0784C4F550CBE8BD69 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 949451BBF3DF607E13DBB265 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 913FEB323BDFFD347FB2351B /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - E57940CC1AE193EDBC7E60BC /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - FF5748F504BD5E56042DEADB /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + B0D72C78FFC1C48205B1AD6E /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + BFB07E0B350C6948876BAE8A /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + C3E70C64D6EEF1D329D99AEA /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + E7724C6A3503B208E4E9A53C /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 2E6B87224BF317E31F74B0D6 /* Pods_RunnerTests.framework in Frameworks */, + 52B0D23BFA4C286CA0E41B69 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,27 +103,13 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 56635C0EC97E7F426A37B2E0 /* Pods_Runner.framework in Frameworks */, + 36138DB3332DEE6FFE0E1FE3 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 0EB950B6EBBA8562ED05E9C6 /* Pods */ = { - isa = PBXGroup; - children = ( - 1084579C46BDDCE9E7DF16AC /* Pods-Runner.debug.xcconfig */, - 2D475486DFFA8C60E5710DB0 /* Pods-Runner.release.xcconfig */, - E57940CC1AE193EDBC7E60BC /* Pods-Runner.profile.xcconfig */, - 86295B0784C4F550CBE8BD69 /* Pods-RunnerTests.debug.xcconfig */, - 949451BBF3DF607E13DBB265 /* Pods-RunnerTests.release.xcconfig */, - 812DEB8E378C986DF221D831 /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; 331C80D6294CF71000263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -151,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 0EB950B6EBBA8562ED05E9C6 /* Pods */, + E6BCE486B4BBFADC211C60FF /* Pods */, ); sourceTree = ""; }; @@ -202,12 +188,26 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - 70907F10D88B462804477CEC /* Pods_Runner.framework */, - FF5748F504BD5E56042DEADB /* Pods_RunnerTests.framework */, + 2A728D4E207B0278F8F9C593 /* Pods_Runner.framework */, + 0A2DA58632C7ECDDC6F5CE67 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; }; + E6BCE486B4BBFADC211C60FF /* Pods */ = { + isa = PBXGroup; + children = ( + E7724C6A3503B208E4E9A53C /* Pods-Runner.debug.xcconfig */, + 913FEB323BDFFD347FB2351B /* Pods-Runner.release.xcconfig */, + B0D72C78FFC1C48205B1AD6E /* Pods-Runner.profile.xcconfig */, + C3E70C64D6EEF1D329D99AEA /* Pods-RunnerTests.debug.xcconfig */, + 0D3D188B329D045CE36B21CF /* Pods-RunnerTests.release.xcconfig */, + BFB07E0B350C6948876BAE8A /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 24CA264AC7C1AA37F685BC19 /* [CP] Check Pods Manifest.lock */, + 8915FA819FCC8B1FF9C2CD9A /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 9936C57FFCBF37419AE7561E /* [CP] Check Pods Manifest.lock */, + E5CD31409482E85EF68F0E33 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 038DC0986A46E5F2839BD12E /* [CP] Embed Pods Frameworks */, + 8C531C68C243175172E5DA1B /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,84 +323,84 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 038DC0986A46E5F2839BD12E /* [CP] Embed Pods Frameworks */ = { + 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + ); outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; + shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; }; - 24CA264AC7C1AA37F685BC19 /* [CP] Check Pods Manifest.lock */ = { + 33CC111E2044C6BF0003C045 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + Flutter/ephemeral/FlutterInputs.xcfilelist, ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", + Flutter/ephemeral/tripwire, ); - name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( + Flutter/ephemeral/FlutterOutputs.xcfilelist, ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 3399D490228B24CF009A79C7 /* ShellScript */ = { + 8915FA819FCC8B1FF9C2CD9A /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( ); outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - 33CC111E2044C6BF0003C045 /* ShellScript */ = { + 8C531C68C243175172E5DA1B /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - Flutter/ephemeral/FlutterInputs.xcfilelist, - ); - inputPaths = ( - Flutter/ephemeral/tripwire, + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - Flutter/ephemeral/FlutterOutputs.xcfilelist, - ); - outputPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; }; - 9936C57FFCBF37419AE7561E /* [CP] Check Pods Manifest.lock */ = { + E5CD31409482E85EF68F0E33 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 86295B0784C4F550CBE8BD69 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = C3E70C64D6EEF1D329D99AEA /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 949451BBF3DF607E13DBB265 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 0D3D188B329D045CE36B21CF /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 812DEB8E378C986DF221D831 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = BFB07E0B350C6948876BAE8A /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/next-gen-ui/step_05_b/android/app/build.gradle b/next-gen-ui/step_05_b/android/app/build.gradle deleted file mode 100644 index b6fad008f9..0000000000 --- a/next-gen-ui/step_05_b/android/app/build.gradle +++ /dev/null @@ -1,44 +0,0 @@ -plugins { - id "com.android.application" - id "kotlin-android" - // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. - id "dev.flutter.flutter-gradle-plugin" -} - -android { - namespace = "com.example.next_gen_ui" - compileSdk = flutter.compileSdkVersion - ndkVersion = flutter.ndkVersion - - compileOptions { - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 - } - - kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8 - } - - defaultConfig { - // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). - applicationId = "com.example.next_gen_ui" - // You can update the following values to match your application needs. - // For more information, see: https://flutter.dev/to/review-gradle-config. - minSdk = flutter.minSdkVersion - targetSdk = flutter.targetSdkVersion - versionCode = flutter.versionCode - versionName = flutter.versionName - } - - buildTypes { - release { - // TODO: Add your own signing config for the release build. - // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig = signingConfigs.debug - } - } -} - -flutter { - source = "../.." -} diff --git a/next-gen-ui/step_05_b/android/app/build.gradle.kts b/next-gen-ui/step_05_b/android/app/build.gradle.kts new file mode 100644 index 0000000000..7876ce7a57 --- /dev/null +++ b/next-gen-ui/step_05_b/android/app/build.gradle.kts @@ -0,0 +1,44 @@ +plugins { + id("com.android.application") + id("kotlin-android") + // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. + id("dev.flutter.flutter-gradle-plugin") +} + +android { + namespace = "com.example.next_gen_ui" + compileSdk = flutter.compileSdkVersion + ndkVersion = flutter.ndkVersion + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 + } + + kotlinOptions { + jvmTarget = JavaVersion.VERSION_1_8.toString() + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId = "com.example.next_gen_ui" + // You can update the following values to match your application needs. + // For more information, see: https://flutter.dev/to/review-gradle-config. + minSdk = flutter.minSdkVersion + targetSdk = flutter.targetSdkVersion + versionCode = flutter.versionCode + versionName = flutter.versionName + } + + buildTypes { + release { + // TODO: Add your own signing config for the release build. + // Signing with the debug keys for now, so `flutter run --release` works. + signingConfig = signingConfigs.getByName("debug") + } + } +} + +flutter { + source = "../.." +} diff --git a/next-gen-ui/step_05_b/android/build.gradle b/next-gen-ui/step_05_b/android/build.gradle deleted file mode 100644 index d2ffbffa4c..0000000000 --- a/next-gen-ui/step_05_b/android/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = "../build" -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(":app") -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/next-gen-ui/step_05_b/android/build.gradle.kts b/next-gen-ui/step_05_b/android/build.gradle.kts new file mode 100644 index 0000000000..89176ef44e --- /dev/null +++ b/next-gen-ui/step_05_b/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/next-gen-ui/step_05_b/android/gradle.properties b/next-gen-ui/step_05_b/android/gradle.properties index 2597170821..f018a61817 100644 --- a/next-gen-ui/step_05_b/android/gradle.properties +++ b/next-gen-ui/step_05_b/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/next-gen-ui/step_05_b/android/gradle/wrapper/gradle-wrapper.properties b/next-gen-ui/step_05_b/android/gradle/wrapper/gradle-wrapper.properties index 7bb2df6ba6..afa1e8eb0a 100644 --- a/next-gen-ui/step_05_b/android/gradle/wrapper/gradle-wrapper.properties +++ b/next-gen-ui/step_05_b/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip diff --git a/next-gen-ui/step_05_b/android/settings.gradle b/next-gen-ui/step_05_b/android/settings.gradle deleted file mode 100644 index b9e43bd376..0000000000 --- a/next-gen-ui/step_05_b/android/settings.gradle +++ /dev/null @@ -1,25 +0,0 @@ -pluginManagement { - def flutterSdkPath = { - def properties = new Properties() - file("local.properties").withInputStream { properties.load(it) } - def flutterSdkPath = properties.getProperty("flutter.sdk") - assert flutterSdkPath != null, "flutter.sdk not set in local.properties" - return flutterSdkPath - }() - - includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") - - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} - -plugins { - id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.1.0" apply false - id "org.jetbrains.kotlin.android" version "1.8.22" apply false -} - -include ":app" diff --git a/next-gen-ui/step_05_b/android/settings.gradle.kts b/next-gen-ui/step_05_b/android/settings.gradle.kts new file mode 100644 index 0000000000..a439442c20 --- /dev/null +++ b/next-gen-ui/step_05_b/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.0" apply false + id("org.jetbrains.kotlin.android") version "1.8.22" apply false +} + +include(":app") diff --git a/next-gen-ui/step_05_b/ios/Podfile b/next-gen-ui/step_05_b/ios/Podfile index d97f17e223..e549ee22f3 100644 --- a/next-gen-ui/step_05_b/ios/Podfile +++ b/next-gen-ui/step_05_b/ios/Podfile @@ -29,7 +29,6 @@ flutter_ios_podfile_setup target 'Runner' do use_frameworks! - use_modular_headers! flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) target 'RunnerTests' do diff --git a/next-gen-ui/step_05_b/ios/Runner.xcodeproj/project.pbxproj b/next-gen-ui/step_05_b/ios/Runner.xcodeproj/project.pbxproj index 8f047bdf00..e6e561d8b2 100644 --- a/next-gen-ui/step_05_b/ios/Runner.xcodeproj/project.pbxproj +++ b/next-gen-ui/step_05_b/ios/Runner.xcodeproj/project.pbxproj @@ -10,12 +10,12 @@ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; + 66AB0B66A73F1975E64A8177 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 20BB5BDAE26490ECF22F2507 /* Pods_RunnerTests.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - B62141185A2A64CE6AE671F2 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B1CF946366B840164A5B6A19 /* Pods_Runner.framework */; }; - B81AE38132A98A311F8F51B8 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 249FB81AECD9AE84FFA40AD0 /* Pods_RunnerTests.framework */; }; + CE4E96F7F9B6D48487EB3E31 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F57E7A6E02C2CD3ED18C8215 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,29 +42,29 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 0FBB97D3B77C3F8ABBBA69D1 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 1065108C466C107C635700F4 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 249FB81AECD9AE84FFA40AD0 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 174850BBD948073483DE44FD /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 20BB5BDAE26490ECF22F2507 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 29D2F0C3F335C05D8707828B /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 3440B8D33B7DF5E678FB8D73 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 5220EC7DF66B6FF52474A86B /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - 64F96334240D4715F67078C9 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 6641BE7C3FD295E85E2B1262 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 678B757D90C77B71F96114E8 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; + 943161019A9EC85C7A66EE19 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; - 9790F6561207E583E84D4FF9 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - B1CF946366B840164A5B6A19 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + C840685EE99E8FA6D49D591E /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + F57E7A6E02C2CD3ED18C8215 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -72,26 +72,26 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - B62141185A2A64CE6AE671F2 /* Pods_Runner.framework in Frameworks */, + CE4E96F7F9B6D48487EB3E31 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - C266D94F39398FF0845062EB /* Frameworks */ = { + D4AFF78F5AE2E8EE0BD7286F /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - B81AE38132A98A311F8F51B8 /* Pods_RunnerTests.framework in Frameworks */, + 66AB0B66A73F1975E64A8177 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 29779CA63CE39E764210D572 /* Frameworks */ = { + 1B41929933729C3C4452D755 /* Frameworks */ = { isa = PBXGroup; children = ( - B1CF946366B840164A5B6A19 /* Pods_Runner.framework */, - 249FB81AECD9AE84FFA40AD0 /* Pods_RunnerTests.framework */, + F57E7A6E02C2CD3ED18C8215 /* Pods_Runner.framework */, + 20BB5BDAE26490ECF22F2507 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -104,20 +104,6 @@ path = RunnerTests; sourceTree = ""; }; - 67CB01004931F5EAE1484002 /* Pods */ = { - isa = PBXGroup; - children = ( - 64F96334240D4715F67078C9 /* Pods-Runner.debug.xcconfig */, - 1065108C466C107C635700F4 /* Pods-Runner.release.xcconfig */, - 9790F6561207E583E84D4FF9 /* Pods-Runner.profile.xcconfig */, - 0FBB97D3B77C3F8ABBBA69D1 /* Pods-RunnerTests.debug.xcconfig */, - 5220EC7DF66B6FF52474A86B /* Pods-RunnerTests.release.xcconfig */, - 6641BE7C3FD295E85E2B1262 /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( @@ -136,8 +122,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - 67CB01004931F5EAE1484002 /* Pods */, - 29779CA63CE39E764210D572 /* Frameworks */, + CB8608376662DCF167CF091D /* Pods */, + 1B41929933729C3C4452D755 /* Frameworks */, ); sourceTree = ""; }; @@ -165,6 +151,20 @@ path = Runner; sourceTree = ""; }; + CB8608376662DCF167CF091D /* Pods */ = { + isa = PBXGroup; + children = ( + 678B757D90C77B71F96114E8 /* Pods-Runner.debug.xcconfig */, + 3440B8D33B7DF5E678FB8D73 /* Pods-Runner.release.xcconfig */, + 174850BBD948073483DE44FD /* Pods-Runner.profile.xcconfig */, + 29D2F0C3F335C05D8707828B /* Pods-RunnerTests.debug.xcconfig */, + 943161019A9EC85C7A66EE19 /* Pods-RunnerTests.release.xcconfig */, + C840685EE99E8FA6D49D591E /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 1A41435D909B4A5BA59DA804 /* [CP] Check Pods Manifest.lock */, + AC04A6680CE49A8AB43B1FFA /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - C266D94F39398FF0845062EB /* Frameworks */, + D4AFF78F5AE2E8EE0BD7286F /* Frameworks */, ); buildRules = ( ); @@ -191,7 +191,7 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 15FA0791F2F6E4DEC3602581 /* [CP] Check Pods Manifest.lock */, + 214492064922C9E65703CF3F /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, @@ -269,7 +269,7 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 15FA0791F2F6E4DEC3602581 /* [CP] Check Pods Manifest.lock */ = { + 214492064922C9E65703CF3F /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -291,58 +291,58 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 1A41435D909B4A5BA59DA804 /* [CP] Check Pods Manifest.lock */ = { + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); + name = "Thin Binary"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputPaths = ( - "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); - name = "Thin Binary"; + name = "Run Script"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { + AC04A6680CE49A8AB43B1FFA /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "Run Script"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -469,7 +469,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 0FBB97D3B77C3F8ABBBA69D1 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 29D2F0C3F335C05D8707828B /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -487,7 +487,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 5220EC7DF66B6FF52474A86B /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 943161019A9EC85C7A66EE19 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -503,7 +503,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 6641BE7C3FD295E85E2B1262 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = C840685EE99E8FA6D49D591E /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/next-gen-ui/step_05_b/macos/Podfile b/next-gen-ui/step_05_b/macos/Podfile index c795730db8..29c8eb3294 100644 --- a/next-gen-ui/step_05_b/macos/Podfile +++ b/next-gen-ui/step_05_b/macos/Podfile @@ -28,7 +28,6 @@ flutter_macos_podfile_setup target 'Runner' do use_frameworks! - use_modular_headers! flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__)) target 'RunnerTests' do diff --git a/next-gen-ui/step_05_b/macos/Runner.xcodeproj/project.pbxproj b/next-gen-ui/step_05_b/macos/Runner.xcodeproj/project.pbxproj index 5ca8a3231e..4579683b58 100644 --- a/next-gen-ui/step_05_b/macos/Runner.xcodeproj/project.pbxproj +++ b/next-gen-ui/step_05_b/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ - 2E6B87224BF317E31F74B0D6 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FF5748F504BD5E56042DEADB /* Pods_RunnerTests.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 56635C0EC97E7F426A37B2E0 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 70907F10D88B462804477CEC /* Pods_Runner.framework */; }; + 36138DB3332DEE6FFE0E1FE3 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2A728D4E207B0278F8F9C593 /* Pods_Runner.framework */; }; + 52B0D23BFA4C286CA0E41B69 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0A2DA58632C7ECDDC6F5CE67 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,8 +62,9 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 1084579C46BDDCE9E7DF16AC /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 2D475486DFFA8C60E5710DB0 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 0A2DA58632C7ECDDC6F5CE67 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 0D3D188B329D045CE36B21CF /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 2A728D4E207B0278F8F9C593 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -80,14 +81,13 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 70907F10D88B462804477CEC /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 812DEB8E378C986DF221D831 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - 86295B0784C4F550CBE8BD69 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 949451BBF3DF607E13DBB265 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 913FEB323BDFFD347FB2351B /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - E57940CC1AE193EDBC7E60BC /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - FF5748F504BD5E56042DEADB /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + B0D72C78FFC1C48205B1AD6E /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + BFB07E0B350C6948876BAE8A /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + C3E70C64D6EEF1D329D99AEA /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + E7724C6A3503B208E4E9A53C /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 2E6B87224BF317E31F74B0D6 /* Pods_RunnerTests.framework in Frameworks */, + 52B0D23BFA4C286CA0E41B69 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,27 +103,13 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 56635C0EC97E7F426A37B2E0 /* Pods_Runner.framework in Frameworks */, + 36138DB3332DEE6FFE0E1FE3 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 0EB950B6EBBA8562ED05E9C6 /* Pods */ = { - isa = PBXGroup; - children = ( - 1084579C46BDDCE9E7DF16AC /* Pods-Runner.debug.xcconfig */, - 2D475486DFFA8C60E5710DB0 /* Pods-Runner.release.xcconfig */, - E57940CC1AE193EDBC7E60BC /* Pods-Runner.profile.xcconfig */, - 86295B0784C4F550CBE8BD69 /* Pods-RunnerTests.debug.xcconfig */, - 949451BBF3DF607E13DBB265 /* Pods-RunnerTests.release.xcconfig */, - 812DEB8E378C986DF221D831 /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; 331C80D6294CF71000263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -151,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 0EB950B6EBBA8562ED05E9C6 /* Pods */, + E6BCE486B4BBFADC211C60FF /* Pods */, ); sourceTree = ""; }; @@ -202,12 +188,26 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - 70907F10D88B462804477CEC /* Pods_Runner.framework */, - FF5748F504BD5E56042DEADB /* Pods_RunnerTests.framework */, + 2A728D4E207B0278F8F9C593 /* Pods_Runner.framework */, + 0A2DA58632C7ECDDC6F5CE67 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; }; + E6BCE486B4BBFADC211C60FF /* Pods */ = { + isa = PBXGroup; + children = ( + E7724C6A3503B208E4E9A53C /* Pods-Runner.debug.xcconfig */, + 913FEB323BDFFD347FB2351B /* Pods-Runner.release.xcconfig */, + B0D72C78FFC1C48205B1AD6E /* Pods-Runner.profile.xcconfig */, + C3E70C64D6EEF1D329D99AEA /* Pods-RunnerTests.debug.xcconfig */, + 0D3D188B329D045CE36B21CF /* Pods-RunnerTests.release.xcconfig */, + BFB07E0B350C6948876BAE8A /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 24CA264AC7C1AA37F685BC19 /* [CP] Check Pods Manifest.lock */, + 8915FA819FCC8B1FF9C2CD9A /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 9936C57FFCBF37419AE7561E /* [CP] Check Pods Manifest.lock */, + E5CD31409482E85EF68F0E33 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 038DC0986A46E5F2839BD12E /* [CP] Embed Pods Frameworks */, + 8C531C68C243175172E5DA1B /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,84 +323,84 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 038DC0986A46E5F2839BD12E /* [CP] Embed Pods Frameworks */ = { + 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + ); outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; + shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; }; - 24CA264AC7C1AA37F685BC19 /* [CP] Check Pods Manifest.lock */ = { + 33CC111E2044C6BF0003C045 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + Flutter/ephemeral/FlutterInputs.xcfilelist, ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", + Flutter/ephemeral/tripwire, ); - name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( + Flutter/ephemeral/FlutterOutputs.xcfilelist, ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 3399D490228B24CF009A79C7 /* ShellScript */ = { + 8915FA819FCC8B1FF9C2CD9A /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( ); outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - 33CC111E2044C6BF0003C045 /* ShellScript */ = { + 8C531C68C243175172E5DA1B /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - Flutter/ephemeral/FlutterInputs.xcfilelist, - ); - inputPaths = ( - Flutter/ephemeral/tripwire, + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - Flutter/ephemeral/FlutterOutputs.xcfilelist, - ); - outputPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; }; - 9936C57FFCBF37419AE7561E /* [CP] Check Pods Manifest.lock */ = { + E5CD31409482E85EF68F0E33 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 86295B0784C4F550CBE8BD69 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = C3E70C64D6EEF1D329D99AEA /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 949451BBF3DF607E13DBB265 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 0D3D188B329D045CE36B21CF /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 812DEB8E378C986DF221D831 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = BFB07E0B350C6948876BAE8A /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/next-gen-ui/step_06/android/app/build.gradle b/next-gen-ui/step_06/android/app/build.gradle deleted file mode 100644 index b6fad008f9..0000000000 --- a/next-gen-ui/step_06/android/app/build.gradle +++ /dev/null @@ -1,44 +0,0 @@ -plugins { - id "com.android.application" - id "kotlin-android" - // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. - id "dev.flutter.flutter-gradle-plugin" -} - -android { - namespace = "com.example.next_gen_ui" - compileSdk = flutter.compileSdkVersion - ndkVersion = flutter.ndkVersion - - compileOptions { - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 - } - - kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8 - } - - defaultConfig { - // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). - applicationId = "com.example.next_gen_ui" - // You can update the following values to match your application needs. - // For more information, see: https://flutter.dev/to/review-gradle-config. - minSdk = flutter.minSdkVersion - targetSdk = flutter.targetSdkVersion - versionCode = flutter.versionCode - versionName = flutter.versionName - } - - buildTypes { - release { - // TODO: Add your own signing config for the release build. - // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig = signingConfigs.debug - } - } -} - -flutter { - source = "../.." -} diff --git a/next-gen-ui/step_06/android/app/build.gradle.kts b/next-gen-ui/step_06/android/app/build.gradle.kts new file mode 100644 index 0000000000..7876ce7a57 --- /dev/null +++ b/next-gen-ui/step_06/android/app/build.gradle.kts @@ -0,0 +1,44 @@ +plugins { + id("com.android.application") + id("kotlin-android") + // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. + id("dev.flutter.flutter-gradle-plugin") +} + +android { + namespace = "com.example.next_gen_ui" + compileSdk = flutter.compileSdkVersion + ndkVersion = flutter.ndkVersion + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 + } + + kotlinOptions { + jvmTarget = JavaVersion.VERSION_1_8.toString() + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId = "com.example.next_gen_ui" + // You can update the following values to match your application needs. + // For more information, see: https://flutter.dev/to/review-gradle-config. + minSdk = flutter.minSdkVersion + targetSdk = flutter.targetSdkVersion + versionCode = flutter.versionCode + versionName = flutter.versionName + } + + buildTypes { + release { + // TODO: Add your own signing config for the release build. + // Signing with the debug keys for now, so `flutter run --release` works. + signingConfig = signingConfigs.getByName("debug") + } + } +} + +flutter { + source = "../.." +} diff --git a/next-gen-ui/step_06/android/build.gradle b/next-gen-ui/step_06/android/build.gradle deleted file mode 100644 index d2ffbffa4c..0000000000 --- a/next-gen-ui/step_06/android/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = "../build" -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(":app") -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/next-gen-ui/step_06/android/build.gradle.kts b/next-gen-ui/step_06/android/build.gradle.kts new file mode 100644 index 0000000000..89176ef44e --- /dev/null +++ b/next-gen-ui/step_06/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/next-gen-ui/step_06/android/gradle.properties b/next-gen-ui/step_06/android/gradle.properties index 2597170821..f018a61817 100644 --- a/next-gen-ui/step_06/android/gradle.properties +++ b/next-gen-ui/step_06/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/next-gen-ui/step_06/android/gradle/wrapper/gradle-wrapper.properties b/next-gen-ui/step_06/android/gradle/wrapper/gradle-wrapper.properties index 7bb2df6ba6..afa1e8eb0a 100644 --- a/next-gen-ui/step_06/android/gradle/wrapper/gradle-wrapper.properties +++ b/next-gen-ui/step_06/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip diff --git a/next-gen-ui/step_06/android/settings.gradle b/next-gen-ui/step_06/android/settings.gradle deleted file mode 100644 index b9e43bd376..0000000000 --- a/next-gen-ui/step_06/android/settings.gradle +++ /dev/null @@ -1,25 +0,0 @@ -pluginManagement { - def flutterSdkPath = { - def properties = new Properties() - file("local.properties").withInputStream { properties.load(it) } - def flutterSdkPath = properties.getProperty("flutter.sdk") - assert flutterSdkPath != null, "flutter.sdk not set in local.properties" - return flutterSdkPath - }() - - includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") - - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} - -plugins { - id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.1.0" apply false - id "org.jetbrains.kotlin.android" version "1.8.22" apply false -} - -include ":app" diff --git a/next-gen-ui/step_06/android/settings.gradle.kts b/next-gen-ui/step_06/android/settings.gradle.kts new file mode 100644 index 0000000000..a439442c20 --- /dev/null +++ b/next-gen-ui/step_06/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.0" apply false + id("org.jetbrains.kotlin.android") version "1.8.22" apply false +} + +include(":app") diff --git a/next-gen-ui/step_06/ios/Podfile b/next-gen-ui/step_06/ios/Podfile index d97f17e223..e549ee22f3 100644 --- a/next-gen-ui/step_06/ios/Podfile +++ b/next-gen-ui/step_06/ios/Podfile @@ -29,7 +29,6 @@ flutter_ios_podfile_setup target 'Runner' do use_frameworks! - use_modular_headers! flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) target 'RunnerTests' do diff --git a/next-gen-ui/step_06/ios/Runner.xcodeproj/project.pbxproj b/next-gen-ui/step_06/ios/Runner.xcodeproj/project.pbxproj index 8f047bdf00..e6e561d8b2 100644 --- a/next-gen-ui/step_06/ios/Runner.xcodeproj/project.pbxproj +++ b/next-gen-ui/step_06/ios/Runner.xcodeproj/project.pbxproj @@ -10,12 +10,12 @@ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; + 66AB0B66A73F1975E64A8177 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 20BB5BDAE26490ECF22F2507 /* Pods_RunnerTests.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - B62141185A2A64CE6AE671F2 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B1CF946366B840164A5B6A19 /* Pods_Runner.framework */; }; - B81AE38132A98A311F8F51B8 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 249FB81AECD9AE84FFA40AD0 /* Pods_RunnerTests.framework */; }; + CE4E96F7F9B6D48487EB3E31 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F57E7A6E02C2CD3ED18C8215 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,29 +42,29 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 0FBB97D3B77C3F8ABBBA69D1 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 1065108C466C107C635700F4 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 249FB81AECD9AE84FFA40AD0 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 174850BBD948073483DE44FD /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 20BB5BDAE26490ECF22F2507 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 29D2F0C3F335C05D8707828B /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 3440B8D33B7DF5E678FB8D73 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 5220EC7DF66B6FF52474A86B /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - 64F96334240D4715F67078C9 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 6641BE7C3FD295E85E2B1262 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 678B757D90C77B71F96114E8 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; + 943161019A9EC85C7A66EE19 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; - 9790F6561207E583E84D4FF9 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - B1CF946366B840164A5B6A19 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + C840685EE99E8FA6D49D591E /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + F57E7A6E02C2CD3ED18C8215 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -72,26 +72,26 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - B62141185A2A64CE6AE671F2 /* Pods_Runner.framework in Frameworks */, + CE4E96F7F9B6D48487EB3E31 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - C266D94F39398FF0845062EB /* Frameworks */ = { + D4AFF78F5AE2E8EE0BD7286F /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - B81AE38132A98A311F8F51B8 /* Pods_RunnerTests.framework in Frameworks */, + 66AB0B66A73F1975E64A8177 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 29779CA63CE39E764210D572 /* Frameworks */ = { + 1B41929933729C3C4452D755 /* Frameworks */ = { isa = PBXGroup; children = ( - B1CF946366B840164A5B6A19 /* Pods_Runner.framework */, - 249FB81AECD9AE84FFA40AD0 /* Pods_RunnerTests.framework */, + F57E7A6E02C2CD3ED18C8215 /* Pods_Runner.framework */, + 20BB5BDAE26490ECF22F2507 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -104,20 +104,6 @@ path = RunnerTests; sourceTree = ""; }; - 67CB01004931F5EAE1484002 /* Pods */ = { - isa = PBXGroup; - children = ( - 64F96334240D4715F67078C9 /* Pods-Runner.debug.xcconfig */, - 1065108C466C107C635700F4 /* Pods-Runner.release.xcconfig */, - 9790F6561207E583E84D4FF9 /* Pods-Runner.profile.xcconfig */, - 0FBB97D3B77C3F8ABBBA69D1 /* Pods-RunnerTests.debug.xcconfig */, - 5220EC7DF66B6FF52474A86B /* Pods-RunnerTests.release.xcconfig */, - 6641BE7C3FD295E85E2B1262 /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( @@ -136,8 +122,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - 67CB01004931F5EAE1484002 /* Pods */, - 29779CA63CE39E764210D572 /* Frameworks */, + CB8608376662DCF167CF091D /* Pods */, + 1B41929933729C3C4452D755 /* Frameworks */, ); sourceTree = ""; }; @@ -165,6 +151,20 @@ path = Runner; sourceTree = ""; }; + CB8608376662DCF167CF091D /* Pods */ = { + isa = PBXGroup; + children = ( + 678B757D90C77B71F96114E8 /* Pods-Runner.debug.xcconfig */, + 3440B8D33B7DF5E678FB8D73 /* Pods-Runner.release.xcconfig */, + 174850BBD948073483DE44FD /* Pods-Runner.profile.xcconfig */, + 29D2F0C3F335C05D8707828B /* Pods-RunnerTests.debug.xcconfig */, + 943161019A9EC85C7A66EE19 /* Pods-RunnerTests.release.xcconfig */, + C840685EE99E8FA6D49D591E /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 1A41435D909B4A5BA59DA804 /* [CP] Check Pods Manifest.lock */, + AC04A6680CE49A8AB43B1FFA /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - C266D94F39398FF0845062EB /* Frameworks */, + D4AFF78F5AE2E8EE0BD7286F /* Frameworks */, ); buildRules = ( ); @@ -191,7 +191,7 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 15FA0791F2F6E4DEC3602581 /* [CP] Check Pods Manifest.lock */, + 214492064922C9E65703CF3F /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, @@ -269,7 +269,7 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 15FA0791F2F6E4DEC3602581 /* [CP] Check Pods Manifest.lock */ = { + 214492064922C9E65703CF3F /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -291,58 +291,58 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 1A41435D909B4A5BA59DA804 /* [CP] Check Pods Manifest.lock */ = { + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); + name = "Thin Binary"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputPaths = ( - "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); - name = "Thin Binary"; + name = "Run Script"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { + AC04A6680CE49A8AB43B1FFA /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "Run Script"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -469,7 +469,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 0FBB97D3B77C3F8ABBBA69D1 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 29D2F0C3F335C05D8707828B /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -487,7 +487,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 5220EC7DF66B6FF52474A86B /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 943161019A9EC85C7A66EE19 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -503,7 +503,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 6641BE7C3FD295E85E2B1262 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = C840685EE99E8FA6D49D591E /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/next-gen-ui/step_06/macos/Podfile b/next-gen-ui/step_06/macos/Podfile index c795730db8..29c8eb3294 100644 --- a/next-gen-ui/step_06/macos/Podfile +++ b/next-gen-ui/step_06/macos/Podfile @@ -28,7 +28,6 @@ flutter_macos_podfile_setup target 'Runner' do use_frameworks! - use_modular_headers! flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__)) target 'RunnerTests' do diff --git a/next-gen-ui/step_06/macos/Runner.xcodeproj/project.pbxproj b/next-gen-ui/step_06/macos/Runner.xcodeproj/project.pbxproj index 5ca8a3231e..4579683b58 100644 --- a/next-gen-ui/step_06/macos/Runner.xcodeproj/project.pbxproj +++ b/next-gen-ui/step_06/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ - 2E6B87224BF317E31F74B0D6 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FF5748F504BD5E56042DEADB /* Pods_RunnerTests.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 56635C0EC97E7F426A37B2E0 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 70907F10D88B462804477CEC /* Pods_Runner.framework */; }; + 36138DB3332DEE6FFE0E1FE3 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2A728D4E207B0278F8F9C593 /* Pods_Runner.framework */; }; + 52B0D23BFA4C286CA0E41B69 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0A2DA58632C7ECDDC6F5CE67 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,8 +62,9 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 1084579C46BDDCE9E7DF16AC /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 2D475486DFFA8C60E5710DB0 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 0A2DA58632C7ECDDC6F5CE67 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 0D3D188B329D045CE36B21CF /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 2A728D4E207B0278F8F9C593 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -80,14 +81,13 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 70907F10D88B462804477CEC /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 812DEB8E378C986DF221D831 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - 86295B0784C4F550CBE8BD69 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 949451BBF3DF607E13DBB265 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 913FEB323BDFFD347FB2351B /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - E57940CC1AE193EDBC7E60BC /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - FF5748F504BD5E56042DEADB /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + B0D72C78FFC1C48205B1AD6E /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + BFB07E0B350C6948876BAE8A /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + C3E70C64D6EEF1D329D99AEA /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + E7724C6A3503B208E4E9A53C /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 2E6B87224BF317E31F74B0D6 /* Pods_RunnerTests.framework in Frameworks */, + 52B0D23BFA4C286CA0E41B69 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,27 +103,13 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 56635C0EC97E7F426A37B2E0 /* Pods_Runner.framework in Frameworks */, + 36138DB3332DEE6FFE0E1FE3 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 0EB950B6EBBA8562ED05E9C6 /* Pods */ = { - isa = PBXGroup; - children = ( - 1084579C46BDDCE9E7DF16AC /* Pods-Runner.debug.xcconfig */, - 2D475486DFFA8C60E5710DB0 /* Pods-Runner.release.xcconfig */, - E57940CC1AE193EDBC7E60BC /* Pods-Runner.profile.xcconfig */, - 86295B0784C4F550CBE8BD69 /* Pods-RunnerTests.debug.xcconfig */, - 949451BBF3DF607E13DBB265 /* Pods-RunnerTests.release.xcconfig */, - 812DEB8E378C986DF221D831 /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; 331C80D6294CF71000263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -151,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 0EB950B6EBBA8562ED05E9C6 /* Pods */, + E6BCE486B4BBFADC211C60FF /* Pods */, ); sourceTree = ""; }; @@ -202,12 +188,26 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - 70907F10D88B462804477CEC /* Pods_Runner.framework */, - FF5748F504BD5E56042DEADB /* Pods_RunnerTests.framework */, + 2A728D4E207B0278F8F9C593 /* Pods_Runner.framework */, + 0A2DA58632C7ECDDC6F5CE67 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; }; + E6BCE486B4BBFADC211C60FF /* Pods */ = { + isa = PBXGroup; + children = ( + E7724C6A3503B208E4E9A53C /* Pods-Runner.debug.xcconfig */, + 913FEB323BDFFD347FB2351B /* Pods-Runner.release.xcconfig */, + B0D72C78FFC1C48205B1AD6E /* Pods-Runner.profile.xcconfig */, + C3E70C64D6EEF1D329D99AEA /* Pods-RunnerTests.debug.xcconfig */, + 0D3D188B329D045CE36B21CF /* Pods-RunnerTests.release.xcconfig */, + BFB07E0B350C6948876BAE8A /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 24CA264AC7C1AA37F685BC19 /* [CP] Check Pods Manifest.lock */, + 8915FA819FCC8B1FF9C2CD9A /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 9936C57FFCBF37419AE7561E /* [CP] Check Pods Manifest.lock */, + E5CD31409482E85EF68F0E33 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 038DC0986A46E5F2839BD12E /* [CP] Embed Pods Frameworks */, + 8C531C68C243175172E5DA1B /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,84 +323,84 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 038DC0986A46E5F2839BD12E /* [CP] Embed Pods Frameworks */ = { + 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + ); outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; + shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; }; - 24CA264AC7C1AA37F685BC19 /* [CP] Check Pods Manifest.lock */ = { + 33CC111E2044C6BF0003C045 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + Flutter/ephemeral/FlutterInputs.xcfilelist, ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", + Flutter/ephemeral/tripwire, ); - name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( + Flutter/ephemeral/FlutterOutputs.xcfilelist, ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 3399D490228B24CF009A79C7 /* ShellScript */ = { + 8915FA819FCC8B1FF9C2CD9A /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( ); outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - 33CC111E2044C6BF0003C045 /* ShellScript */ = { + 8C531C68C243175172E5DA1B /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - Flutter/ephemeral/FlutterInputs.xcfilelist, - ); - inputPaths = ( - Flutter/ephemeral/tripwire, + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - Flutter/ephemeral/FlutterOutputs.xcfilelist, - ); - outputPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; }; - 9936C57FFCBF37419AE7561E /* [CP] Check Pods Manifest.lock */ = { + E5CD31409482E85EF68F0E33 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 86295B0784C4F550CBE8BD69 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = C3E70C64D6EEF1D329D99AEA /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 949451BBF3DF607E13DBB265 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 0D3D188B329D045CE36B21CF /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 812DEB8E378C986DF221D831 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = BFB07E0B350C6948876BAE8A /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; From 513a05ead047e1a988fde7949b652c1abb5f9249 Mon Sep 17 00:00:00 2001 From: Brett Morgan Date: Tue, 19 Nov 2024 20:45:56 +1100 Subject: [PATCH 085/108] Update `testing_codelab` --- testing_codelab/codelab_rebuild.yaml | 159 ++++++++---------- .../app/{build.gradle => build.gradle.kts} | 10 +- testing_codelab/step_03/android/build.gradle | 18 -- .../step_03/android/build.gradle.kts | 21 +++ .../step_03/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../step_03/android/settings.gradle | 25 --- .../step_03/android/settings.gradle.kts | 25 +++ testing_codelab/step_03/ios/Podfile | 1 - testing_codelab/step_03/macos/Podfile | 1 - .../android/app/build.gradle.kts} | 10 +- testing_codelab/step_04/android/build.gradle | 18 -- .../step_04/android/build.gradle.kts | 21 +++ .../step_04/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../step_04/android/settings.gradle | 25 --- .../step_04/android/settings.gradle.kts | 25 +++ testing_codelab/step_04/ios/Podfile | 1 - testing_codelab/step_04/macos/Podfile | 1 - .../android/app/build.gradle.kts} | 10 +- testing_codelab/step_05/android/build.gradle | 18 -- .../step_05/android/build.gradle.kts | 21 +++ .../step_05/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../step_05/android/settings.gradle | 25 --- .../step_05/android/settings.gradle.kts | 25 +++ testing_codelab/step_05/ios/Podfile | 1 - testing_codelab/step_05/macos/Podfile | 1 - .../android/app/build.gradle.kts} | 10 +- testing_codelab/step_06/android/build.gradle | 18 -- .../step_06/android/build.gradle.kts | 21 +++ .../step_06/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../step_06/android/settings.gradle | 25 --- .../step_06/android/settings.gradle.kts | 25 +++ testing_codelab/step_06/ios/Podfile | 1 - testing_codelab/step_06/macos/Podfile | 1 - .../step_07/android/app/build.gradle | 44 ----- .../step_07/android/app/build.gradle.kts | 44 +++++ testing_codelab/step_07/android/build.gradle | 18 -- .../step_07/android/build.gradle.kts | 21 +++ .../step_07/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../step_07/android/settings.gradle | 25 --- .../step_07/android/settings.gradle.kts | 25 +++ testing_codelab/step_07/ios/Podfile | 1 - testing_codelab/step_07/macos/Podfile | 1 - .../macos/Runner.xcodeproj/project.pbxproj | 76 ++++----- .../step_08/android/app/build.gradle | 44 ----- .../step_08/android/app/build.gradle.kts | 44 +++++ testing_codelab/step_08/android/build.gradle | 18 -- .../step_08/android/build.gradle.kts | 21 +++ .../step_08/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../step_08/android/settings.gradle | 25 --- .../step_08/android/settings.gradle.kts | 25 +++ testing_codelab/step_08/ios/Podfile | 1 - testing_codelab/step_08/macos/Podfile | 1 - .../macos/Runner.xcodeproj/project.pbxproj | 76 ++++----- 59 files changed, 546 insertions(+), 551 deletions(-) rename testing_codelab/step_03/android/app/{build.gradle => build.gradle.kts} (84%) delete mode 100644 testing_codelab/step_03/android/build.gradle create mode 100644 testing_codelab/step_03/android/build.gradle.kts delete mode 100644 testing_codelab/step_03/android/settings.gradle create mode 100644 testing_codelab/step_03/android/settings.gradle.kts rename testing_codelab/{step_05/android/app/build.gradle => step_04/android/app/build.gradle.kts} (84%) delete mode 100644 testing_codelab/step_04/android/build.gradle create mode 100644 testing_codelab/step_04/android/build.gradle.kts delete mode 100644 testing_codelab/step_04/android/settings.gradle create mode 100644 testing_codelab/step_04/android/settings.gradle.kts rename testing_codelab/{step_06/android/app/build.gradle => step_05/android/app/build.gradle.kts} (84%) delete mode 100644 testing_codelab/step_05/android/build.gradle create mode 100644 testing_codelab/step_05/android/build.gradle.kts delete mode 100644 testing_codelab/step_05/android/settings.gradle create mode 100644 testing_codelab/step_05/android/settings.gradle.kts rename testing_codelab/{step_04/android/app/build.gradle => step_06/android/app/build.gradle.kts} (84%) delete mode 100644 testing_codelab/step_06/android/build.gradle create mode 100644 testing_codelab/step_06/android/build.gradle.kts delete mode 100644 testing_codelab/step_06/android/settings.gradle create mode 100644 testing_codelab/step_06/android/settings.gradle.kts delete mode 100644 testing_codelab/step_07/android/app/build.gradle create mode 100644 testing_codelab/step_07/android/app/build.gradle.kts delete mode 100644 testing_codelab/step_07/android/build.gradle create mode 100644 testing_codelab/step_07/android/build.gradle.kts delete mode 100644 testing_codelab/step_07/android/settings.gradle create mode 100644 testing_codelab/step_07/android/settings.gradle.kts delete mode 100644 testing_codelab/step_08/android/app/build.gradle create mode 100644 testing_codelab/step_08/android/app/build.gradle.kts delete mode 100644 testing_codelab/step_08/android/build.gradle create mode 100644 testing_codelab/step_08/android/build.gradle.kts delete mode 100644 testing_codelab/step_08/android/settings.gradle create mode 100644 testing_codelab/step_08/android/settings.gradle.kts diff --git a/testing_codelab/codelab_rebuild.yaml b/testing_codelab/codelab_rebuild.yaml index a3cfc699b6..2100c1ac96 100644 --- a/testing_codelab/codelab_rebuild.yaml +++ b/testing_codelab/codelab_rebuild.yaml @@ -66,6 +66,9 @@ steps: import 'package:flutter/material.dart'; void main() { + - name: Format lib/main.dart + path: testing_app + dart: format lib/main.dart - name: Copy step_03 copydir: from: testing_app @@ -121,9 +124,7 @@ steps: child: MaterialApp.router( title: 'Testing Sample', theme: ThemeData( - colorScheme: ColorScheme.fromSeed( - seedColor: Colors.deepPurple, - ), + colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple), useMaterial3: true, ), routerConfig: _router, @@ -168,39 +169,39 @@ steps: // Copyright 2020 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. - + import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; - + import '../models/favorites.dart'; - + class FavoritesPage extends StatelessWidget { const FavoritesPage({super.key}); - + static String routeName = 'favorites_page'; - + @override Widget build(BuildContext context) { return Scaffold( - appBar: AppBar( - title: const Text('Favorites'), - ), + appBar: AppBar(title: const Text('Favorites')), body: Consumer( - builder: (context, value, child) => ListView.builder( - itemCount: value.items.length, - padding: const EdgeInsets.symmetric(vertical: 16), - itemBuilder: (context, index) => FavoriteItemTile(value.items[index]), - ), + builder: + (context, value, child) => ListView.builder( + itemCount: value.items.length, + padding: const EdgeInsets.symmetric(vertical: 16), + itemBuilder: + (context, index) => FavoriteItemTile(value.items[index]), + ), ), ); } } - + class FavoriteItemTile extends StatelessWidget { const FavoriteItemTile(this.itemNo, {super.key}); - + final int itemNo; - + @override Widget build(BuildContext context) { return Padding( @@ -209,10 +210,7 @@ steps: leading: CircleAvatar( backgroundColor: Colors.primaries[itemNo % Colors.primaries.length], ), - title: Text( - 'Item $itemNo', - key: Key('favorites_text_$itemNo'), - ), + title: Text('Item $itemNo', key: Key('favorites_text_$itemNo')), trailing: IconButton( key: Key('remove_icon_$itemNo'), icon: const Icon(Icons.close), @@ -236,18 +234,18 @@ steps: // Copyright 2020 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. - + import 'package:flutter/material.dart'; import 'package:go_router/go_router.dart'; import 'package:provider/provider.dart'; import '../models/favorites.dart'; import 'favorites.dart'; - + class HomePage extends StatelessWidget { static String routeName = '/'; - + const HomePage({super.key}); - + @override Widget build(BuildContext context) { return Scaffold( @@ -272,40 +270,40 @@ steps: ); } } - + class ItemTile extends StatelessWidget { final int itemNo; - + const ItemTile(this.itemNo, {super.key}); - + @override Widget build(BuildContext context) { var favoritesList = Provider.of(context); - + return Padding( padding: const EdgeInsets.all(8.0), child: ListTile( leading: CircleAvatar( backgroundColor: Colors.primaries[itemNo % Colors.primaries.length], ), - title: Text( - 'Item $itemNo', - key: Key('text_$itemNo'), - ), + title: Text('Item $itemNo', key: Key('text_$itemNo')), trailing: IconButton( key: Key('icon_$itemNo'), - icon: favoritesList.items.contains(itemNo) - ? const Icon(Icons.favorite) - : const Icon(Icons.favorite_border), + icon: + favoritesList.items.contains(itemNo) + ? const Icon(Icons.favorite) + : const Icon(Icons.favorite_border), onPressed: () { !favoritesList.items.contains(itemNo) ? favoritesList.add(itemNo) : favoritesList.remove(itemNo); ScaffoldMessenger.of(context).showSnackBar( SnackBar( - content: Text(favoritesList.items.contains(itemNo) - ? 'Added to favorites.' - : 'Removed from favorites.'), + content: Text( + favoritesList.items.contains(itemNo) + ? 'Added to favorites.' + : 'Removed from favorites.', + ), duration: const Duration(seconds: 1), ), ); @@ -413,14 +411,12 @@ steps: late Favorites favoritesList; Widget createFavoritesScreen() => ChangeNotifierProvider( - create: (context) { - favoritesList = Favorites(); - return favoritesList; - }, - child: const MaterialApp( - home: FavoritesPage(), - ), - ); + create: (context) { + favoritesList = Favorites(); + return favoritesList; + }, + child: const MaterialApp(home: FavoritesPage()), + ); void addItems() { for (var i = 0; i < 10; i += 2) { @@ -444,8 +440,10 @@ steps: var totalItems = tester.widgetList(find.byIcon(Icons.close)).length; await tester.tap(find.byIcon(Icons.close).first); await tester.pumpAndSettle(); - expect(tester.widgetList(find.byIcon(Icons.close)).length, - lessThan(totalItems)); + expect( + tester.widgetList(find.byIcon(Icons.close)).length, + lessThan(totalItems), + ); expect(find.text('Removed from favorites.'), findsOneWidget); }); }); @@ -456,39 +454,33 @@ steps: // Copyright 2020 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. - + import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:provider/provider.dart'; import 'package:testing_app/models/favorites.dart'; import 'package:testing_app/screens/home.dart'; - + Widget createHomeScreen() => ChangeNotifierProvider( - create: (context) => Favorites(), - child: const MaterialApp( - home: HomePage(), - ), - ); - + create: (context) => Favorites(), + child: const MaterialApp(home: HomePage()), + ); + void main() { group('Home Page Widget Tests', () { testWidgets('Testing if ListView shows up', (tester) async { await tester.pumpWidget(createHomeScreen()); expect(find.byType(ListView), findsOneWidget); }); - + testWidgets('Testing Scrolling', (tester) async { await tester.pumpWidget(createHomeScreen()); expect(find.text('Item 0'), findsOneWidget); - await tester.fling( - find.byType(ListView), - const Offset(0, -200), - 3000, - ); + await tester.fling(find.byType(ListView), const Offset(0, -200), 3000); await tester.pumpAndSettle(); expect(find.text('Item 0'), findsNothing); }); - + testWidgets('Testing IconButtons', (tester) async { await tester.pumpWidget(createHomeScreen()); expect(find.byIcon(Icons.favorite), findsNothing); @@ -526,42 +518,38 @@ steps: // Copyright 2021 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. - + import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:testing_app/main.dart'; - + void main() { group('Testing App', () { testWidgets('Favorites operations test', (tester) async { await tester.pumpWidget(const TestingApp()); - - final iconKeys = [ - 'icon_0', - 'icon_1', - 'icon_2', - ]; - + + final iconKeys = ['icon_0', 'icon_1', 'icon_2']; + for (var icon in iconKeys) { await tester.tap(find.byKey(ValueKey(icon))); await tester.pumpAndSettle(const Duration(seconds: 1)); - + expect(find.text('Added to favorites.'), findsOneWidget); } - + await tester.tap(find.text('Favorites')); await tester.pumpAndSettle(); - + final removeIconKeys = [ 'remove_icon_0', 'remove_icon_1', 'remove_icon_2', ]; - + for (final iconKey in removeIconKeys) { await tester.tap(find.byKey(ValueKey(iconKey))); await tester.pumpAndSettle(const Duration(seconds: 1)); - + expect(find.text('Removed from favorites.'), findsOneWidget); } }); @@ -634,19 +622,20 @@ steps: // Copyright 2020 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. - + import 'package:flutter_driver/flutter_driver.dart' as driver; import 'package:integration_test/integration_test_driver.dart'; - + Future main() { return integrationDriver( responseDataCallback: (data) async { if (data != null) { final timeline = driver.Timeline.fromJson( - data['scrolling_summary'] as Map); - + data['scrolling_summary'] as Map, + ); + final summary = driver.TimelineSummary.summarize(timeline); - + await summary.writeTimelineToFile( 'scrolling_summary', pretty: true, diff --git a/testing_codelab/step_03/android/app/build.gradle b/testing_codelab/step_03/android/app/build.gradle.kts similarity index 84% rename from testing_codelab/step_03/android/app/build.gradle rename to testing_codelab/step_03/android/app/build.gradle.kts index 10e017b858..3c92fcf2d1 100644 --- a/testing_codelab/step_03/android/app/build.gradle +++ b/testing_codelab/step_03/android/app/build.gradle.kts @@ -1,8 +1,8 @@ plugins { - id "com.android.application" - id "kotlin-android" + id("com.android.application") + id("kotlin-android") // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. - id "dev.flutter.flutter-gradle-plugin" + id("dev.flutter.flutter-gradle-plugin") } android { @@ -16,7 +16,7 @@ android { } kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8 + jvmTarget = JavaVersion.VERSION_1_8.toString() } defaultConfig { @@ -34,7 +34,7 @@ android { release { // TODO: Add your own signing config for the release build. // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig = signingConfigs.debug + signingConfig = signingConfigs.getByName("debug") } } } diff --git a/testing_codelab/step_03/android/build.gradle b/testing_codelab/step_03/android/build.gradle deleted file mode 100644 index d2ffbffa4c..0000000000 --- a/testing_codelab/step_03/android/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = "../build" -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(":app") -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/testing_codelab/step_03/android/build.gradle.kts b/testing_codelab/step_03/android/build.gradle.kts new file mode 100644 index 0000000000..89176ef44e --- /dev/null +++ b/testing_codelab/step_03/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/testing_codelab/step_03/android/gradle.properties b/testing_codelab/step_03/android/gradle.properties index 2597170821..f018a61817 100644 --- a/testing_codelab/step_03/android/gradle.properties +++ b/testing_codelab/step_03/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/testing_codelab/step_03/android/gradle/wrapper/gradle-wrapper.properties b/testing_codelab/step_03/android/gradle/wrapper/gradle-wrapper.properties index 7bb2df6ba6..afa1e8eb0a 100644 --- a/testing_codelab/step_03/android/gradle/wrapper/gradle-wrapper.properties +++ b/testing_codelab/step_03/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip diff --git a/testing_codelab/step_03/android/settings.gradle b/testing_codelab/step_03/android/settings.gradle deleted file mode 100644 index b9e43bd376..0000000000 --- a/testing_codelab/step_03/android/settings.gradle +++ /dev/null @@ -1,25 +0,0 @@ -pluginManagement { - def flutterSdkPath = { - def properties = new Properties() - file("local.properties").withInputStream { properties.load(it) } - def flutterSdkPath = properties.getProperty("flutter.sdk") - assert flutterSdkPath != null, "flutter.sdk not set in local.properties" - return flutterSdkPath - }() - - includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") - - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} - -plugins { - id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.1.0" apply false - id "org.jetbrains.kotlin.android" version "1.8.22" apply false -} - -include ":app" diff --git a/testing_codelab/step_03/android/settings.gradle.kts b/testing_codelab/step_03/android/settings.gradle.kts new file mode 100644 index 0000000000..a439442c20 --- /dev/null +++ b/testing_codelab/step_03/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.0" apply false + id("org.jetbrains.kotlin.android") version "1.8.22" apply false +} + +include(":app") diff --git a/testing_codelab/step_03/ios/Podfile b/testing_codelab/step_03/ios/Podfile index d97f17e223..e549ee22f3 100644 --- a/testing_codelab/step_03/ios/Podfile +++ b/testing_codelab/step_03/ios/Podfile @@ -29,7 +29,6 @@ flutter_ios_podfile_setup target 'Runner' do use_frameworks! - use_modular_headers! flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) target 'RunnerTests' do diff --git a/testing_codelab/step_03/macos/Podfile b/testing_codelab/step_03/macos/Podfile index c795730db8..29c8eb3294 100644 --- a/testing_codelab/step_03/macos/Podfile +++ b/testing_codelab/step_03/macos/Podfile @@ -28,7 +28,6 @@ flutter_macos_podfile_setup target 'Runner' do use_frameworks! - use_modular_headers! flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__)) target 'RunnerTests' do diff --git a/testing_codelab/step_05/android/app/build.gradle b/testing_codelab/step_04/android/app/build.gradle.kts similarity index 84% rename from testing_codelab/step_05/android/app/build.gradle rename to testing_codelab/step_04/android/app/build.gradle.kts index 10e017b858..3c92fcf2d1 100644 --- a/testing_codelab/step_05/android/app/build.gradle +++ b/testing_codelab/step_04/android/app/build.gradle.kts @@ -1,8 +1,8 @@ plugins { - id "com.android.application" - id "kotlin-android" + id("com.android.application") + id("kotlin-android") // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. - id "dev.flutter.flutter-gradle-plugin" + id("dev.flutter.flutter-gradle-plugin") } android { @@ -16,7 +16,7 @@ android { } kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8 + jvmTarget = JavaVersion.VERSION_1_8.toString() } defaultConfig { @@ -34,7 +34,7 @@ android { release { // TODO: Add your own signing config for the release build. // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig = signingConfigs.debug + signingConfig = signingConfigs.getByName("debug") } } } diff --git a/testing_codelab/step_04/android/build.gradle b/testing_codelab/step_04/android/build.gradle deleted file mode 100644 index d2ffbffa4c..0000000000 --- a/testing_codelab/step_04/android/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = "../build" -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(":app") -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/testing_codelab/step_04/android/build.gradle.kts b/testing_codelab/step_04/android/build.gradle.kts new file mode 100644 index 0000000000..89176ef44e --- /dev/null +++ b/testing_codelab/step_04/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/testing_codelab/step_04/android/gradle.properties b/testing_codelab/step_04/android/gradle.properties index 2597170821..f018a61817 100644 --- a/testing_codelab/step_04/android/gradle.properties +++ b/testing_codelab/step_04/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/testing_codelab/step_04/android/gradle/wrapper/gradle-wrapper.properties b/testing_codelab/step_04/android/gradle/wrapper/gradle-wrapper.properties index 7bb2df6ba6..afa1e8eb0a 100644 --- a/testing_codelab/step_04/android/gradle/wrapper/gradle-wrapper.properties +++ b/testing_codelab/step_04/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip diff --git a/testing_codelab/step_04/android/settings.gradle b/testing_codelab/step_04/android/settings.gradle deleted file mode 100644 index b9e43bd376..0000000000 --- a/testing_codelab/step_04/android/settings.gradle +++ /dev/null @@ -1,25 +0,0 @@ -pluginManagement { - def flutterSdkPath = { - def properties = new Properties() - file("local.properties").withInputStream { properties.load(it) } - def flutterSdkPath = properties.getProperty("flutter.sdk") - assert flutterSdkPath != null, "flutter.sdk not set in local.properties" - return flutterSdkPath - }() - - includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") - - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} - -plugins { - id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.1.0" apply false - id "org.jetbrains.kotlin.android" version "1.8.22" apply false -} - -include ":app" diff --git a/testing_codelab/step_04/android/settings.gradle.kts b/testing_codelab/step_04/android/settings.gradle.kts new file mode 100644 index 0000000000..a439442c20 --- /dev/null +++ b/testing_codelab/step_04/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.0" apply false + id("org.jetbrains.kotlin.android") version "1.8.22" apply false +} + +include(":app") diff --git a/testing_codelab/step_04/ios/Podfile b/testing_codelab/step_04/ios/Podfile index d97f17e223..e549ee22f3 100644 --- a/testing_codelab/step_04/ios/Podfile +++ b/testing_codelab/step_04/ios/Podfile @@ -29,7 +29,6 @@ flutter_ios_podfile_setup target 'Runner' do use_frameworks! - use_modular_headers! flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) target 'RunnerTests' do diff --git a/testing_codelab/step_04/macos/Podfile b/testing_codelab/step_04/macos/Podfile index c795730db8..29c8eb3294 100644 --- a/testing_codelab/step_04/macos/Podfile +++ b/testing_codelab/step_04/macos/Podfile @@ -28,7 +28,6 @@ flutter_macos_podfile_setup target 'Runner' do use_frameworks! - use_modular_headers! flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__)) target 'RunnerTests' do diff --git a/testing_codelab/step_06/android/app/build.gradle b/testing_codelab/step_05/android/app/build.gradle.kts similarity index 84% rename from testing_codelab/step_06/android/app/build.gradle rename to testing_codelab/step_05/android/app/build.gradle.kts index 10e017b858..3c92fcf2d1 100644 --- a/testing_codelab/step_06/android/app/build.gradle +++ b/testing_codelab/step_05/android/app/build.gradle.kts @@ -1,8 +1,8 @@ plugins { - id "com.android.application" - id "kotlin-android" + id("com.android.application") + id("kotlin-android") // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. - id "dev.flutter.flutter-gradle-plugin" + id("dev.flutter.flutter-gradle-plugin") } android { @@ -16,7 +16,7 @@ android { } kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8 + jvmTarget = JavaVersion.VERSION_1_8.toString() } defaultConfig { @@ -34,7 +34,7 @@ android { release { // TODO: Add your own signing config for the release build. // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig = signingConfigs.debug + signingConfig = signingConfigs.getByName("debug") } } } diff --git a/testing_codelab/step_05/android/build.gradle b/testing_codelab/step_05/android/build.gradle deleted file mode 100644 index d2ffbffa4c..0000000000 --- a/testing_codelab/step_05/android/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = "../build" -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(":app") -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/testing_codelab/step_05/android/build.gradle.kts b/testing_codelab/step_05/android/build.gradle.kts new file mode 100644 index 0000000000..89176ef44e --- /dev/null +++ b/testing_codelab/step_05/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/testing_codelab/step_05/android/gradle.properties b/testing_codelab/step_05/android/gradle.properties index 2597170821..f018a61817 100644 --- a/testing_codelab/step_05/android/gradle.properties +++ b/testing_codelab/step_05/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/testing_codelab/step_05/android/gradle/wrapper/gradle-wrapper.properties b/testing_codelab/step_05/android/gradle/wrapper/gradle-wrapper.properties index 7bb2df6ba6..afa1e8eb0a 100644 --- a/testing_codelab/step_05/android/gradle/wrapper/gradle-wrapper.properties +++ b/testing_codelab/step_05/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip diff --git a/testing_codelab/step_05/android/settings.gradle b/testing_codelab/step_05/android/settings.gradle deleted file mode 100644 index b9e43bd376..0000000000 --- a/testing_codelab/step_05/android/settings.gradle +++ /dev/null @@ -1,25 +0,0 @@ -pluginManagement { - def flutterSdkPath = { - def properties = new Properties() - file("local.properties").withInputStream { properties.load(it) } - def flutterSdkPath = properties.getProperty("flutter.sdk") - assert flutterSdkPath != null, "flutter.sdk not set in local.properties" - return flutterSdkPath - }() - - includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") - - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} - -plugins { - id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.1.0" apply false - id "org.jetbrains.kotlin.android" version "1.8.22" apply false -} - -include ":app" diff --git a/testing_codelab/step_05/android/settings.gradle.kts b/testing_codelab/step_05/android/settings.gradle.kts new file mode 100644 index 0000000000..a439442c20 --- /dev/null +++ b/testing_codelab/step_05/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.0" apply false + id("org.jetbrains.kotlin.android") version "1.8.22" apply false +} + +include(":app") diff --git a/testing_codelab/step_05/ios/Podfile b/testing_codelab/step_05/ios/Podfile index d97f17e223..e549ee22f3 100644 --- a/testing_codelab/step_05/ios/Podfile +++ b/testing_codelab/step_05/ios/Podfile @@ -29,7 +29,6 @@ flutter_ios_podfile_setup target 'Runner' do use_frameworks! - use_modular_headers! flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) target 'RunnerTests' do diff --git a/testing_codelab/step_05/macos/Podfile b/testing_codelab/step_05/macos/Podfile index c795730db8..29c8eb3294 100644 --- a/testing_codelab/step_05/macos/Podfile +++ b/testing_codelab/step_05/macos/Podfile @@ -28,7 +28,6 @@ flutter_macos_podfile_setup target 'Runner' do use_frameworks! - use_modular_headers! flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__)) target 'RunnerTests' do diff --git a/testing_codelab/step_04/android/app/build.gradle b/testing_codelab/step_06/android/app/build.gradle.kts similarity index 84% rename from testing_codelab/step_04/android/app/build.gradle rename to testing_codelab/step_06/android/app/build.gradle.kts index 10e017b858..3c92fcf2d1 100644 --- a/testing_codelab/step_04/android/app/build.gradle +++ b/testing_codelab/step_06/android/app/build.gradle.kts @@ -1,8 +1,8 @@ plugins { - id "com.android.application" - id "kotlin-android" + id("com.android.application") + id("kotlin-android") // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. - id "dev.flutter.flutter-gradle-plugin" + id("dev.flutter.flutter-gradle-plugin") } android { @@ -16,7 +16,7 @@ android { } kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8 + jvmTarget = JavaVersion.VERSION_1_8.toString() } defaultConfig { @@ -34,7 +34,7 @@ android { release { // TODO: Add your own signing config for the release build. // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig = signingConfigs.debug + signingConfig = signingConfigs.getByName("debug") } } } diff --git a/testing_codelab/step_06/android/build.gradle b/testing_codelab/step_06/android/build.gradle deleted file mode 100644 index d2ffbffa4c..0000000000 --- a/testing_codelab/step_06/android/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = "../build" -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(":app") -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/testing_codelab/step_06/android/build.gradle.kts b/testing_codelab/step_06/android/build.gradle.kts new file mode 100644 index 0000000000..89176ef44e --- /dev/null +++ b/testing_codelab/step_06/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/testing_codelab/step_06/android/gradle.properties b/testing_codelab/step_06/android/gradle.properties index 2597170821..f018a61817 100644 --- a/testing_codelab/step_06/android/gradle.properties +++ b/testing_codelab/step_06/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/testing_codelab/step_06/android/gradle/wrapper/gradle-wrapper.properties b/testing_codelab/step_06/android/gradle/wrapper/gradle-wrapper.properties index 7bb2df6ba6..afa1e8eb0a 100644 --- a/testing_codelab/step_06/android/gradle/wrapper/gradle-wrapper.properties +++ b/testing_codelab/step_06/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip diff --git a/testing_codelab/step_06/android/settings.gradle b/testing_codelab/step_06/android/settings.gradle deleted file mode 100644 index b9e43bd376..0000000000 --- a/testing_codelab/step_06/android/settings.gradle +++ /dev/null @@ -1,25 +0,0 @@ -pluginManagement { - def flutterSdkPath = { - def properties = new Properties() - file("local.properties").withInputStream { properties.load(it) } - def flutterSdkPath = properties.getProperty("flutter.sdk") - assert flutterSdkPath != null, "flutter.sdk not set in local.properties" - return flutterSdkPath - }() - - includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") - - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} - -plugins { - id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.1.0" apply false - id "org.jetbrains.kotlin.android" version "1.8.22" apply false -} - -include ":app" diff --git a/testing_codelab/step_06/android/settings.gradle.kts b/testing_codelab/step_06/android/settings.gradle.kts new file mode 100644 index 0000000000..a439442c20 --- /dev/null +++ b/testing_codelab/step_06/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.0" apply false + id("org.jetbrains.kotlin.android") version "1.8.22" apply false +} + +include(":app") diff --git a/testing_codelab/step_06/ios/Podfile b/testing_codelab/step_06/ios/Podfile index d97f17e223..e549ee22f3 100644 --- a/testing_codelab/step_06/ios/Podfile +++ b/testing_codelab/step_06/ios/Podfile @@ -29,7 +29,6 @@ flutter_ios_podfile_setup target 'Runner' do use_frameworks! - use_modular_headers! flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) target 'RunnerTests' do diff --git a/testing_codelab/step_06/macos/Podfile b/testing_codelab/step_06/macos/Podfile index c795730db8..29c8eb3294 100644 --- a/testing_codelab/step_06/macos/Podfile +++ b/testing_codelab/step_06/macos/Podfile @@ -28,7 +28,6 @@ flutter_macos_podfile_setup target 'Runner' do use_frameworks! - use_modular_headers! flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__)) target 'RunnerTests' do diff --git a/testing_codelab/step_07/android/app/build.gradle b/testing_codelab/step_07/android/app/build.gradle deleted file mode 100644 index 10e017b858..0000000000 --- a/testing_codelab/step_07/android/app/build.gradle +++ /dev/null @@ -1,44 +0,0 @@ -plugins { - id "com.android.application" - id "kotlin-android" - // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. - id "dev.flutter.flutter-gradle-plugin" -} - -android { - namespace = "com.example.testing_app" - compileSdk = flutter.compileSdkVersion - ndkVersion = flutter.ndkVersion - - compileOptions { - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 - } - - kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8 - } - - defaultConfig { - // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). - applicationId = "com.example.testing_app" - // You can update the following values to match your application needs. - // For more information, see: https://flutter.dev/to/review-gradle-config. - minSdk = flutter.minSdkVersion - targetSdk = flutter.targetSdkVersion - versionCode = flutter.versionCode - versionName = flutter.versionName - } - - buildTypes { - release { - // TODO: Add your own signing config for the release build. - // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig = signingConfigs.debug - } - } -} - -flutter { - source = "../.." -} diff --git a/testing_codelab/step_07/android/app/build.gradle.kts b/testing_codelab/step_07/android/app/build.gradle.kts new file mode 100644 index 0000000000..3c92fcf2d1 --- /dev/null +++ b/testing_codelab/step_07/android/app/build.gradle.kts @@ -0,0 +1,44 @@ +plugins { + id("com.android.application") + id("kotlin-android") + // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. + id("dev.flutter.flutter-gradle-plugin") +} + +android { + namespace = "com.example.testing_app" + compileSdk = flutter.compileSdkVersion + ndkVersion = flutter.ndkVersion + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 + } + + kotlinOptions { + jvmTarget = JavaVersion.VERSION_1_8.toString() + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId = "com.example.testing_app" + // You can update the following values to match your application needs. + // For more information, see: https://flutter.dev/to/review-gradle-config. + minSdk = flutter.minSdkVersion + targetSdk = flutter.targetSdkVersion + versionCode = flutter.versionCode + versionName = flutter.versionName + } + + buildTypes { + release { + // TODO: Add your own signing config for the release build. + // Signing with the debug keys for now, so `flutter run --release` works. + signingConfig = signingConfigs.getByName("debug") + } + } +} + +flutter { + source = "../.." +} diff --git a/testing_codelab/step_07/android/build.gradle b/testing_codelab/step_07/android/build.gradle deleted file mode 100644 index d2ffbffa4c..0000000000 --- a/testing_codelab/step_07/android/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = "../build" -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(":app") -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/testing_codelab/step_07/android/build.gradle.kts b/testing_codelab/step_07/android/build.gradle.kts new file mode 100644 index 0000000000..89176ef44e --- /dev/null +++ b/testing_codelab/step_07/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/testing_codelab/step_07/android/gradle.properties b/testing_codelab/step_07/android/gradle.properties index 2597170821..f018a61817 100644 --- a/testing_codelab/step_07/android/gradle.properties +++ b/testing_codelab/step_07/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/testing_codelab/step_07/android/gradle/wrapper/gradle-wrapper.properties b/testing_codelab/step_07/android/gradle/wrapper/gradle-wrapper.properties index 7bb2df6ba6..afa1e8eb0a 100644 --- a/testing_codelab/step_07/android/gradle/wrapper/gradle-wrapper.properties +++ b/testing_codelab/step_07/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip diff --git a/testing_codelab/step_07/android/settings.gradle b/testing_codelab/step_07/android/settings.gradle deleted file mode 100644 index b9e43bd376..0000000000 --- a/testing_codelab/step_07/android/settings.gradle +++ /dev/null @@ -1,25 +0,0 @@ -pluginManagement { - def flutterSdkPath = { - def properties = new Properties() - file("local.properties").withInputStream { properties.load(it) } - def flutterSdkPath = properties.getProperty("flutter.sdk") - assert flutterSdkPath != null, "flutter.sdk not set in local.properties" - return flutterSdkPath - }() - - includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") - - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} - -plugins { - id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.1.0" apply false - id "org.jetbrains.kotlin.android" version "1.8.22" apply false -} - -include ":app" diff --git a/testing_codelab/step_07/android/settings.gradle.kts b/testing_codelab/step_07/android/settings.gradle.kts new file mode 100644 index 0000000000..a439442c20 --- /dev/null +++ b/testing_codelab/step_07/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.0" apply false + id("org.jetbrains.kotlin.android") version "1.8.22" apply false +} + +include(":app") diff --git a/testing_codelab/step_07/ios/Podfile b/testing_codelab/step_07/ios/Podfile index d97f17e223..e549ee22f3 100644 --- a/testing_codelab/step_07/ios/Podfile +++ b/testing_codelab/step_07/ios/Podfile @@ -29,7 +29,6 @@ flutter_ios_podfile_setup target 'Runner' do use_frameworks! - use_modular_headers! flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) target 'RunnerTests' do diff --git a/testing_codelab/step_07/macos/Podfile b/testing_codelab/step_07/macos/Podfile index c795730db8..29c8eb3294 100644 --- a/testing_codelab/step_07/macos/Podfile +++ b/testing_codelab/step_07/macos/Podfile @@ -28,7 +28,6 @@ flutter_macos_podfile_setup target 'Runner' do use_frameworks! - use_modular_headers! flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__)) target 'RunnerTests' do diff --git a/testing_codelab/step_07/macos/Runner.xcodeproj/project.pbxproj b/testing_codelab/step_07/macos/Runner.xcodeproj/project.pbxproj index cd83f23f77..63e39a1762 100644 --- a/testing_codelab/step_07/macos/Runner.xcodeproj/project.pbxproj +++ b/testing_codelab/step_07/macos/Runner.xcodeproj/project.pbxproj @@ -27,8 +27,8 @@ 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - B65C92C381CA9018A58BBA19 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 70DFB5FA3411B71198D038C7 /* Pods_RunnerTests.framework */; }; - E791E39CFF2DC617398FBC25 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 41141BDB78C9B7879AD87928 /* Pods_Runner.framework */; }; + 840FE1D1EB7AFD9A1C8868D6 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B59DDFC21A45BE2DBC291267 /* Pods_Runner.framework */; }; + C23FE474807C53E1D81E797D /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 92D91691EA3CA464EC6B5796 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,8 +62,8 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 19D22309C9361CA5BF391004 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 2557D195CA6689B1E010EF94 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 05D0E26C1BD6E41F4D9FB770 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 2EF285FACBA8BD63AE308F54 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -80,14 +80,14 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 41141BDB78C9B7879AD87928 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 5BAD1EABF5C1472CA22B2C8A /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - 70DFB5FA3411B71198D038C7 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; + 91AF6A71B5D41CCD460D8FDF /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 92D91691EA3CA464EC6B5796 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - C0BBA2573FD0ACA3FC5987C0 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - EEDB2B6A45DF18985C1FD78A /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - F2CBADA2F3474A835A24D1A1 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + B59DDFC21A45BE2DBC291267 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + E57E1E289434DC16083CD414 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + F0B051DA4FD669DC0547955B /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + F9A86C45070CD73FF1AEC6E5 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - B65C92C381CA9018A58BBA19 /* Pods_RunnerTests.framework in Frameworks */, + C23FE474807C53E1D81E797D /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,27 +103,13 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - E791E39CFF2DC617398FBC25 /* Pods_Runner.framework in Frameworks */, + 840FE1D1EB7AFD9A1C8868D6 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 1F4ACE59BF9531126BFD8920 /* Pods */ = { - isa = PBXGroup; - children = ( - F2CBADA2F3474A835A24D1A1 /* Pods-Runner.debug.xcconfig */, - EEDB2B6A45DF18985C1FD78A /* Pods-Runner.release.xcconfig */, - C0BBA2573FD0ACA3FC5987C0 /* Pods-Runner.profile.xcconfig */, - 19D22309C9361CA5BF391004 /* Pods-RunnerTests.debug.xcconfig */, - 5BAD1EABF5C1472CA22B2C8A /* Pods-RunnerTests.release.xcconfig */, - 2557D195CA6689B1E010EF94 /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; 331C80D6294CF71000263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -151,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 1F4ACE59BF9531126BFD8920 /* Pods */, + 33CE7EC3087363FA2263FD68 /* Pods */, ); sourceTree = ""; }; @@ -175,6 +161,20 @@ path = ..; sourceTree = ""; }; + 33CE7EC3087363FA2263FD68 /* Pods */ = { + isa = PBXGroup; + children = ( + 2EF285FACBA8BD63AE308F54 /* Pods-Runner.debug.xcconfig */, + F9A86C45070CD73FF1AEC6E5 /* Pods-Runner.release.xcconfig */, + 05D0E26C1BD6E41F4D9FB770 /* Pods-Runner.profile.xcconfig */, + F0B051DA4FD669DC0547955B /* Pods-RunnerTests.debug.xcconfig */, + E57E1E289434DC16083CD414 /* Pods-RunnerTests.release.xcconfig */, + 91AF6A71B5D41CCD460D8FDF /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; 33CEB47122A05771004F2AC0 /* Flutter */ = { isa = PBXGroup; children = ( @@ -202,8 +202,8 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - 41141BDB78C9B7879AD87928 /* Pods_Runner.framework */, - 70DFB5FA3411B71198D038C7 /* Pods_RunnerTests.framework */, + B59DDFC21A45BE2DBC291267 /* Pods_Runner.framework */, + 92D91691EA3CA464EC6B5796 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - A7FD17A8E725E7D4153EDBE0 /* [CP] Check Pods Manifest.lock */, + 14915E8420678D7AC4BA9CB9 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,7 +234,7 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 14FA6C21241474C6BC862A81 /* [CP] Check Pods Manifest.lock */, + D4EA5C77FDBD22B74D378E14 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, @@ -322,7 +322,7 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 14FA6C21241474C6BC862A81 /* [CP] Check Pods Manifest.lock */ = { + 14915E8420678D7AC4BA9CB9 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -337,7 +337,7 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -382,7 +382,7 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - A7FD17A8E725E7D4153EDBE0 /* [CP] Check Pods Manifest.lock */ = { + D4EA5C77FDBD22B74D378E14 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -397,7 +397,7 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -455,7 +455,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 19D22309C9361CA5BF391004 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = F0B051DA4FD669DC0547955B /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -470,7 +470,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 5BAD1EABF5C1472CA22B2C8A /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = E57E1E289434DC16083CD414 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -485,7 +485,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 2557D195CA6689B1E010EF94 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 91AF6A71B5D41CCD460D8FDF /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/testing_codelab/step_08/android/app/build.gradle b/testing_codelab/step_08/android/app/build.gradle deleted file mode 100644 index 10e017b858..0000000000 --- a/testing_codelab/step_08/android/app/build.gradle +++ /dev/null @@ -1,44 +0,0 @@ -plugins { - id "com.android.application" - id "kotlin-android" - // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. - id "dev.flutter.flutter-gradle-plugin" -} - -android { - namespace = "com.example.testing_app" - compileSdk = flutter.compileSdkVersion - ndkVersion = flutter.ndkVersion - - compileOptions { - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 - } - - kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8 - } - - defaultConfig { - // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). - applicationId = "com.example.testing_app" - // You can update the following values to match your application needs. - // For more information, see: https://flutter.dev/to/review-gradle-config. - minSdk = flutter.minSdkVersion - targetSdk = flutter.targetSdkVersion - versionCode = flutter.versionCode - versionName = flutter.versionName - } - - buildTypes { - release { - // TODO: Add your own signing config for the release build. - // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig = signingConfigs.debug - } - } -} - -flutter { - source = "../.." -} diff --git a/testing_codelab/step_08/android/app/build.gradle.kts b/testing_codelab/step_08/android/app/build.gradle.kts new file mode 100644 index 0000000000..3c92fcf2d1 --- /dev/null +++ b/testing_codelab/step_08/android/app/build.gradle.kts @@ -0,0 +1,44 @@ +plugins { + id("com.android.application") + id("kotlin-android") + // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. + id("dev.flutter.flutter-gradle-plugin") +} + +android { + namespace = "com.example.testing_app" + compileSdk = flutter.compileSdkVersion + ndkVersion = flutter.ndkVersion + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 + } + + kotlinOptions { + jvmTarget = JavaVersion.VERSION_1_8.toString() + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId = "com.example.testing_app" + // You can update the following values to match your application needs. + // For more information, see: https://flutter.dev/to/review-gradle-config. + minSdk = flutter.minSdkVersion + targetSdk = flutter.targetSdkVersion + versionCode = flutter.versionCode + versionName = flutter.versionName + } + + buildTypes { + release { + // TODO: Add your own signing config for the release build. + // Signing with the debug keys for now, so `flutter run --release` works. + signingConfig = signingConfigs.getByName("debug") + } + } +} + +flutter { + source = "../.." +} diff --git a/testing_codelab/step_08/android/build.gradle b/testing_codelab/step_08/android/build.gradle deleted file mode 100644 index d2ffbffa4c..0000000000 --- a/testing_codelab/step_08/android/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = "../build" -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(":app") -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/testing_codelab/step_08/android/build.gradle.kts b/testing_codelab/step_08/android/build.gradle.kts new file mode 100644 index 0000000000..89176ef44e --- /dev/null +++ b/testing_codelab/step_08/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/testing_codelab/step_08/android/gradle.properties b/testing_codelab/step_08/android/gradle.properties index 2597170821..f018a61817 100644 --- a/testing_codelab/step_08/android/gradle.properties +++ b/testing_codelab/step_08/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/testing_codelab/step_08/android/gradle/wrapper/gradle-wrapper.properties b/testing_codelab/step_08/android/gradle/wrapper/gradle-wrapper.properties index 7bb2df6ba6..afa1e8eb0a 100644 --- a/testing_codelab/step_08/android/gradle/wrapper/gradle-wrapper.properties +++ b/testing_codelab/step_08/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip diff --git a/testing_codelab/step_08/android/settings.gradle b/testing_codelab/step_08/android/settings.gradle deleted file mode 100644 index b9e43bd376..0000000000 --- a/testing_codelab/step_08/android/settings.gradle +++ /dev/null @@ -1,25 +0,0 @@ -pluginManagement { - def flutterSdkPath = { - def properties = new Properties() - file("local.properties").withInputStream { properties.load(it) } - def flutterSdkPath = properties.getProperty("flutter.sdk") - assert flutterSdkPath != null, "flutter.sdk not set in local.properties" - return flutterSdkPath - }() - - includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") - - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} - -plugins { - id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.1.0" apply false - id "org.jetbrains.kotlin.android" version "1.8.22" apply false -} - -include ":app" diff --git a/testing_codelab/step_08/android/settings.gradle.kts b/testing_codelab/step_08/android/settings.gradle.kts new file mode 100644 index 0000000000..a439442c20 --- /dev/null +++ b/testing_codelab/step_08/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.0" apply false + id("org.jetbrains.kotlin.android") version "1.8.22" apply false +} + +include(":app") diff --git a/testing_codelab/step_08/ios/Podfile b/testing_codelab/step_08/ios/Podfile index d97f17e223..e549ee22f3 100644 --- a/testing_codelab/step_08/ios/Podfile +++ b/testing_codelab/step_08/ios/Podfile @@ -29,7 +29,6 @@ flutter_ios_podfile_setup target 'Runner' do use_frameworks! - use_modular_headers! flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) target 'RunnerTests' do diff --git a/testing_codelab/step_08/macos/Podfile b/testing_codelab/step_08/macos/Podfile index c795730db8..29c8eb3294 100644 --- a/testing_codelab/step_08/macos/Podfile +++ b/testing_codelab/step_08/macos/Podfile @@ -28,7 +28,6 @@ flutter_macos_podfile_setup target 'Runner' do use_frameworks! - use_modular_headers! flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__)) target 'RunnerTests' do diff --git a/testing_codelab/step_08/macos/Runner.xcodeproj/project.pbxproj b/testing_codelab/step_08/macos/Runner.xcodeproj/project.pbxproj index cd83f23f77..63e39a1762 100644 --- a/testing_codelab/step_08/macos/Runner.xcodeproj/project.pbxproj +++ b/testing_codelab/step_08/macos/Runner.xcodeproj/project.pbxproj @@ -27,8 +27,8 @@ 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - B65C92C381CA9018A58BBA19 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 70DFB5FA3411B71198D038C7 /* Pods_RunnerTests.framework */; }; - E791E39CFF2DC617398FBC25 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 41141BDB78C9B7879AD87928 /* Pods_Runner.framework */; }; + 840FE1D1EB7AFD9A1C8868D6 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B59DDFC21A45BE2DBC291267 /* Pods_Runner.framework */; }; + C23FE474807C53E1D81E797D /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 92D91691EA3CA464EC6B5796 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,8 +62,8 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 19D22309C9361CA5BF391004 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 2557D195CA6689B1E010EF94 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 05D0E26C1BD6E41F4D9FB770 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 2EF285FACBA8BD63AE308F54 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -80,14 +80,14 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 41141BDB78C9B7879AD87928 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 5BAD1EABF5C1472CA22B2C8A /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - 70DFB5FA3411B71198D038C7 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; + 91AF6A71B5D41CCD460D8FDF /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 92D91691EA3CA464EC6B5796 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - C0BBA2573FD0ACA3FC5987C0 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - EEDB2B6A45DF18985C1FD78A /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - F2CBADA2F3474A835A24D1A1 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + B59DDFC21A45BE2DBC291267 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + E57E1E289434DC16083CD414 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + F0B051DA4FD669DC0547955B /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + F9A86C45070CD73FF1AEC6E5 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - B65C92C381CA9018A58BBA19 /* Pods_RunnerTests.framework in Frameworks */, + C23FE474807C53E1D81E797D /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,27 +103,13 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - E791E39CFF2DC617398FBC25 /* Pods_Runner.framework in Frameworks */, + 840FE1D1EB7AFD9A1C8868D6 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 1F4ACE59BF9531126BFD8920 /* Pods */ = { - isa = PBXGroup; - children = ( - F2CBADA2F3474A835A24D1A1 /* Pods-Runner.debug.xcconfig */, - EEDB2B6A45DF18985C1FD78A /* Pods-Runner.release.xcconfig */, - C0BBA2573FD0ACA3FC5987C0 /* Pods-Runner.profile.xcconfig */, - 19D22309C9361CA5BF391004 /* Pods-RunnerTests.debug.xcconfig */, - 5BAD1EABF5C1472CA22B2C8A /* Pods-RunnerTests.release.xcconfig */, - 2557D195CA6689B1E010EF94 /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; 331C80D6294CF71000263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -151,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 1F4ACE59BF9531126BFD8920 /* Pods */, + 33CE7EC3087363FA2263FD68 /* Pods */, ); sourceTree = ""; }; @@ -175,6 +161,20 @@ path = ..; sourceTree = ""; }; + 33CE7EC3087363FA2263FD68 /* Pods */ = { + isa = PBXGroup; + children = ( + 2EF285FACBA8BD63AE308F54 /* Pods-Runner.debug.xcconfig */, + F9A86C45070CD73FF1AEC6E5 /* Pods-Runner.release.xcconfig */, + 05D0E26C1BD6E41F4D9FB770 /* Pods-Runner.profile.xcconfig */, + F0B051DA4FD669DC0547955B /* Pods-RunnerTests.debug.xcconfig */, + E57E1E289434DC16083CD414 /* Pods-RunnerTests.release.xcconfig */, + 91AF6A71B5D41CCD460D8FDF /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; 33CEB47122A05771004F2AC0 /* Flutter */ = { isa = PBXGroup; children = ( @@ -202,8 +202,8 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - 41141BDB78C9B7879AD87928 /* Pods_Runner.framework */, - 70DFB5FA3411B71198D038C7 /* Pods_RunnerTests.framework */, + B59DDFC21A45BE2DBC291267 /* Pods_Runner.framework */, + 92D91691EA3CA464EC6B5796 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - A7FD17A8E725E7D4153EDBE0 /* [CP] Check Pods Manifest.lock */, + 14915E8420678D7AC4BA9CB9 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,7 +234,7 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 14FA6C21241474C6BC862A81 /* [CP] Check Pods Manifest.lock */, + D4EA5C77FDBD22B74D378E14 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, @@ -322,7 +322,7 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 14FA6C21241474C6BC862A81 /* [CP] Check Pods Manifest.lock */ = { + 14915E8420678D7AC4BA9CB9 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -337,7 +337,7 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -382,7 +382,7 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - A7FD17A8E725E7D4153EDBE0 /* [CP] Check Pods Manifest.lock */ = { + D4EA5C77FDBD22B74D378E14 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -397,7 +397,7 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -455,7 +455,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 19D22309C9361CA5BF391004 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = F0B051DA4FD669DC0547955B /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -470,7 +470,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 5BAD1EABF5C1472CA22B2C8A /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = E57E1E289434DC16083CD414 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -485,7 +485,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 2557D195CA6689B1E010EF94 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 91AF6A71B5D41CCD460D8FDF /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; From fda1e5e370ebb9f58e0ec5a7aecc08e9284c1feb Mon Sep 17 00:00:00 2001 From: Brett Morgan Date: Tue, 19 Nov 2024 21:09:19 +1100 Subject: [PATCH 086/108] Fixup `generate_crossword` --- generate_crossword/codelab_rebuild.yaml | 12 ++-- generate_crossword/step_02/pubspec.yaml | 4 +- generate_crossword/step_03/pubspec.yaml | 4 +- generate_crossword/step_04/pubspec.yaml | 4 +- generate_crossword/step_05_a/pubspec.yaml | 4 +- generate_crossword/step_05_b/pubspec.yaml | 4 +- generate_crossword/step_05_c/pubspec.yaml | 4 +- generate_crossword/step_06/pubspec.yaml | 4 +- .../step_07/lib/providers.g.dart | 40 +++++++------ generate_crossword/step_07/pubspec.yaml | 4 +- .../step_08/lib/providers.g.dart | 56 ++++++++++--------- generate_crossword/step_08/pubspec.yaml | 4 +- .../step_09/lib/providers.g.dart | 14 ++--- generate_crossword/step_09/pubspec.yaml | 4 +- 14 files changed, 86 insertions(+), 76 deletions(-) diff --git a/generate_crossword/codelab_rebuild.yaml b/generate_crossword/codelab_rebuild.yaml index 164ed1d2d7..456b52fb1c 100644 --- a/generate_crossword/codelab_rebuild.yaml +++ b/generate_crossword/codelab_rebuild.yaml @@ -51426,9 +51426,9 @@ steps: - name: Run build_runner path: generate_crossword dart: run build_runner build --delete-conflicting-outputs - - name: format model.g.dart + - name: format model.g.dart lib/providers.g.dart path: generate_crossword - dart: format lib/model.g.dart + dart: format lib/model.g.dart lib/providers.g.dart - name: Flutter test path: generate_crossword flutter: test @@ -51789,9 +51789,9 @@ steps: - name: Run build_runner path: generate_crossword dart: run build_runner build --delete-conflicting-outputs - - name: format model.g.dart + - name: format model.g.dart lib/providers.g.dart path: generate_crossword - dart: format lib/model.g.dart + dart: format lib/model.g.dart lib/providers.g.dart - name: Flutter test path: generate_crossword flutter: test @@ -53108,9 +53108,9 @@ steps: - name: Run build_runner path: generate_crossword dart: run build_runner build --delete-conflicting-outputs - - name: format model.g.dart + - name: format model.g.dart lib/providers.g.dart path: generate_crossword - dart: format lib/model.g.dart + dart: format lib/model.g.dart lib/providers.g.dart - name: Flutter test path: generate_crossword flutter: test diff --git a/generate_crossword/step_02/pubspec.yaml b/generate_crossword/step_02/pubspec.yaml index 2409920f75..df8ab13539 100644 --- a/generate_crossword/step_02/pubspec.yaml +++ b/generate_crossword/step_02/pubspec.yaml @@ -25,8 +25,8 @@ dev_dependencies: build_runner: ^2.4.13 built_value_generator: ^8.9.2 custom_lint: ^0.7.0 - riverpod_generator: ^2.6.2 - riverpod_lint: ^2.6.2 + riverpod_generator: ^2.6.3 + riverpod_lint: ^2.6.3 flutter: uses-material-design: true diff --git a/generate_crossword/step_03/pubspec.yaml b/generate_crossword/step_03/pubspec.yaml index 0790c94371..8d01e9e851 100644 --- a/generate_crossword/step_03/pubspec.yaml +++ b/generate_crossword/step_03/pubspec.yaml @@ -25,8 +25,8 @@ dev_dependencies: build_runner: ^2.4.13 built_value_generator: ^8.9.2 custom_lint: ^0.7.0 - riverpod_generator: ^2.6.2 - riverpod_lint: ^2.6.2 + riverpod_generator: ^2.6.3 + riverpod_lint: ^2.6.3 flutter: uses-material-design: true diff --git a/generate_crossword/step_04/pubspec.yaml b/generate_crossword/step_04/pubspec.yaml index 0790c94371..8d01e9e851 100644 --- a/generate_crossword/step_04/pubspec.yaml +++ b/generate_crossword/step_04/pubspec.yaml @@ -25,8 +25,8 @@ dev_dependencies: build_runner: ^2.4.13 built_value_generator: ^8.9.2 custom_lint: ^0.7.0 - riverpod_generator: ^2.6.2 - riverpod_lint: ^2.6.2 + riverpod_generator: ^2.6.3 + riverpod_lint: ^2.6.3 flutter: uses-material-design: true diff --git a/generate_crossword/step_05_a/pubspec.yaml b/generate_crossword/step_05_a/pubspec.yaml index 0790c94371..8d01e9e851 100644 --- a/generate_crossword/step_05_a/pubspec.yaml +++ b/generate_crossword/step_05_a/pubspec.yaml @@ -25,8 +25,8 @@ dev_dependencies: build_runner: ^2.4.13 built_value_generator: ^8.9.2 custom_lint: ^0.7.0 - riverpod_generator: ^2.6.2 - riverpod_lint: ^2.6.2 + riverpod_generator: ^2.6.3 + riverpod_lint: ^2.6.3 flutter: uses-material-design: true diff --git a/generate_crossword/step_05_b/pubspec.yaml b/generate_crossword/step_05_b/pubspec.yaml index 0790c94371..8d01e9e851 100644 --- a/generate_crossword/step_05_b/pubspec.yaml +++ b/generate_crossword/step_05_b/pubspec.yaml @@ -25,8 +25,8 @@ dev_dependencies: build_runner: ^2.4.13 built_value_generator: ^8.9.2 custom_lint: ^0.7.0 - riverpod_generator: ^2.6.2 - riverpod_lint: ^2.6.2 + riverpod_generator: ^2.6.3 + riverpod_lint: ^2.6.3 flutter: uses-material-design: true diff --git a/generate_crossword/step_05_c/pubspec.yaml b/generate_crossword/step_05_c/pubspec.yaml index 0790c94371..8d01e9e851 100644 --- a/generate_crossword/step_05_c/pubspec.yaml +++ b/generate_crossword/step_05_c/pubspec.yaml @@ -25,8 +25,8 @@ dev_dependencies: build_runner: ^2.4.13 built_value_generator: ^8.9.2 custom_lint: ^0.7.0 - riverpod_generator: ^2.6.2 - riverpod_lint: ^2.6.2 + riverpod_generator: ^2.6.3 + riverpod_lint: ^2.6.3 flutter: uses-material-design: true diff --git a/generate_crossword/step_06/pubspec.yaml b/generate_crossword/step_06/pubspec.yaml index 0790c94371..8d01e9e851 100644 --- a/generate_crossword/step_06/pubspec.yaml +++ b/generate_crossword/step_06/pubspec.yaml @@ -25,8 +25,8 @@ dev_dependencies: build_runner: ^2.4.13 built_value_generator: ^8.9.2 custom_lint: ^0.7.0 - riverpod_generator: ^2.6.2 - riverpod_lint: ^2.6.2 + riverpod_generator: ^2.6.3 + riverpod_lint: ^2.6.3 flutter: uses-material-design: true diff --git a/generate_crossword/step_07/lib/providers.g.dart b/generate_crossword/step_07/lib/providers.g.dart index 6363546d41..322f686f1d 100644 --- a/generate_crossword/step_07/lib/providers.g.dart +++ b/generate_crossword/step_07/lib/providers.g.dart @@ -48,9 +48,10 @@ String _$expectedRemainingTimeHash() => final expectedRemainingTimeProvider = AutoDisposeProvider.internal( expectedRemainingTime, name: r'expectedRemainingTimeProvider', - debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') - ? null - : _$expectedRemainingTimeHash, + debugGetCreateSourceHash: + const bool.fromEnvironment('dart.vm.product') + ? null + : _$expectedRemainingTimeHash, dependencies: null, allTransitiveDependencies: null, ); @@ -110,14 +111,15 @@ String _$showDisplayInfoHash() => r'75a0679db4cc1a0d5cfa7aa33afc633faf08fc24'; @ProviderFor(ShowDisplayInfo) final showDisplayInfoProvider = NotifierProvider.internal( - ShowDisplayInfo.new, - name: r'showDisplayInfoProvider', - debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') - ? null - : _$showDisplayInfoHash, - dependencies: null, - allTransitiveDependencies: null, -); + ShowDisplayInfo.new, + name: r'showDisplayInfoProvider', + debugGetCreateSourceHash: + const bool.fromEnvironment('dart.vm.product') + ? null + : _$showDisplayInfoHash, + dependencies: null, + allTransitiveDependencies: null, + ); typedef _$ShowDisplayInfo = Notifier; String _$displayInfoHash() => r'6516f6bf346baa6914fdfffad1ccee8a5345a137'; @@ -128,13 +130,15 @@ String _$displayInfoHash() => r'6516f6bf346baa6914fdfffad1ccee8a5345a137'; @ProviderFor(DisplayInfo) final displayInfoProvider = AutoDisposeNotifierProvider.internal( - DisplayInfo.new, - name: r'displayInfoProvider', - debugGetCreateSourceHash: - const bool.fromEnvironment('dart.vm.product') ? null : _$displayInfoHash, - dependencies: null, - allTransitiveDependencies: null, -); + DisplayInfo.new, + name: r'displayInfoProvider', + debugGetCreateSourceHash: + const bool.fromEnvironment('dart.vm.product') + ? null + : _$displayInfoHash, + dependencies: null, + allTransitiveDependencies: null, + ); typedef _$DisplayInfo = AutoDisposeNotifier; // ignore_for_file: type=lint diff --git a/generate_crossword/step_07/pubspec.yaml b/generate_crossword/step_07/pubspec.yaml index 0790c94371..8d01e9e851 100644 --- a/generate_crossword/step_07/pubspec.yaml +++ b/generate_crossword/step_07/pubspec.yaml @@ -25,8 +25,8 @@ dev_dependencies: build_runner: ^2.4.13 built_value_generator: ^8.9.2 custom_lint: ^0.7.0 - riverpod_generator: ^2.6.2 - riverpod_lint: ^2.6.2 + riverpod_generator: ^2.6.3 + riverpod_lint: ^2.6.3 flutter: uses-material-design: true diff --git a/generate_crossword/step_08/lib/providers.g.dart b/generate_crossword/step_08/lib/providers.g.dart index c5660762c1..e29c2fd6fa 100644 --- a/generate_crossword/step_08/lib/providers.g.dart +++ b/generate_crossword/step_08/lib/providers.g.dart @@ -48,9 +48,10 @@ String _$expectedRemainingTimeHash() => final expectedRemainingTimeProvider = AutoDisposeProvider.internal( expectedRemainingTime, name: r'expectedRemainingTimeProvider', - debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') - ? null - : _$expectedRemainingTimeHash, + debugGetCreateSourceHash: + const bool.fromEnvironment('dart.vm.product') + ? null + : _$expectedRemainingTimeHash, dependencies: null, allTransitiveDependencies: null, ); @@ -110,14 +111,15 @@ String _$showDisplayInfoHash() => r'75a0679db4cc1a0d5cfa7aa33afc633faf08fc24'; @ProviderFor(ShowDisplayInfo) final showDisplayInfoProvider = NotifierProvider.internal( - ShowDisplayInfo.new, - name: r'showDisplayInfoProvider', - debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') - ? null - : _$showDisplayInfoHash, - dependencies: null, - allTransitiveDependencies: null, -); + ShowDisplayInfo.new, + name: r'showDisplayInfoProvider', + debugGetCreateSourceHash: + const bool.fromEnvironment('dart.vm.product') + ? null + : _$showDisplayInfoHash, + dependencies: null, + allTransitiveDependencies: null, + ); typedef _$ShowDisplayInfo = Notifier; String _$displayInfoHash() => r'6516f6bf346baa6914fdfffad1ccee8a5345a137'; @@ -128,13 +130,15 @@ String _$displayInfoHash() => r'6516f6bf346baa6914fdfffad1ccee8a5345a137'; @ProviderFor(DisplayInfo) final displayInfoProvider = AutoDisposeNotifierProvider.internal( - DisplayInfo.new, - name: r'displayInfoProvider', - debugGetCreateSourceHash: - const bool.fromEnvironment('dart.vm.product') ? null : _$displayInfoHash, - dependencies: null, - allTransitiveDependencies: null, -); + DisplayInfo.new, + name: r'displayInfoProvider', + debugGetCreateSourceHash: + const bool.fromEnvironment('dart.vm.product') + ? null + : _$displayInfoHash, + dependencies: null, + allTransitiveDependencies: null, + ); typedef _$DisplayInfo = AutoDisposeNotifier; String _$workerCountHash() => r'36dad09ba2cfe03b0879e7bf20059cec12e5118c'; @@ -145,13 +149,15 @@ String _$workerCountHash() => r'36dad09ba2cfe03b0879e7bf20059cec12e5118c'; @ProviderFor(WorkerCount) final workerCountProvider = NotifierProvider.internal( - WorkerCount.new, - name: r'workerCountProvider', - debugGetCreateSourceHash: - const bool.fromEnvironment('dart.vm.product') ? null : _$workerCountHash, - dependencies: null, - allTransitiveDependencies: null, -); + WorkerCount.new, + name: r'workerCountProvider', + debugGetCreateSourceHash: + const bool.fromEnvironment('dart.vm.product') + ? null + : _$workerCountHash, + dependencies: null, + allTransitiveDependencies: null, + ); typedef _$WorkerCount = Notifier; // ignore_for_file: type=lint diff --git a/generate_crossword/step_08/pubspec.yaml b/generate_crossword/step_08/pubspec.yaml index 0790c94371..8d01e9e851 100644 --- a/generate_crossword/step_08/pubspec.yaml +++ b/generate_crossword/step_08/pubspec.yaml @@ -25,8 +25,8 @@ dev_dependencies: build_runner: ^2.4.13 built_value_generator: ^8.9.2 custom_lint: ^0.7.0 - riverpod_generator: ^2.6.2 - riverpod_lint: ^2.6.2 + riverpod_generator: ^2.6.3 + riverpod_lint: ^2.6.3 flutter: uses-material-design: true diff --git a/generate_crossword/step_09/lib/providers.g.dart b/generate_crossword/step_09/lib/providers.g.dart index 18b1cd60e7..aa7fed7e1d 100644 --- a/generate_crossword/step_09/lib/providers.g.dart +++ b/generate_crossword/step_09/lib/providers.g.dart @@ -62,13 +62,13 @@ String _$puzzleHash() => r'dddad218b4318b008af2db67dd0ff284bcef3231'; @ProviderFor(Puzzle) final puzzleProvider = AutoDisposeNotifierProvider.internal( - Puzzle.new, - name: r'puzzleProvider', - debugGetCreateSourceHash: - const bool.fromEnvironment('dart.vm.product') ? null : _$puzzleHash, - dependencies: null, - allTransitiveDependencies: null, -); + Puzzle.new, + name: r'puzzleProvider', + debugGetCreateSourceHash: + const bool.fromEnvironment('dart.vm.product') ? null : _$puzzleHash, + dependencies: null, + allTransitiveDependencies: null, + ); typedef _$Puzzle = AutoDisposeNotifier; // ignore_for_file: type=lint diff --git a/generate_crossword/step_09/pubspec.yaml b/generate_crossword/step_09/pubspec.yaml index 0790c94371..8d01e9e851 100644 --- a/generate_crossword/step_09/pubspec.yaml +++ b/generate_crossword/step_09/pubspec.yaml @@ -25,8 +25,8 @@ dev_dependencies: build_runner: ^2.4.13 built_value_generator: ^8.9.2 custom_lint: ^0.7.0 - riverpod_generator: ^2.6.2 - riverpod_lint: ^2.6.2 + riverpod_generator: ^2.6.3 + riverpod_lint: ^2.6.3 flutter: uses-material-design: true From 7e77da7df774299d4260d00f8f1e0cdb20a31dfd Mon Sep 17 00:00:00 2001 From: Brett Morgan Date: Wed, 20 Nov 2024 04:55:01 +1100 Subject: [PATCH 087/108] Update `webview_flutter` --- webview_flutter/codelab_rebuild.yaml | 527 +++++++++--------- .../app/{build.gradle => build.gradle.kts} | 10 +- webview_flutter/step_03/android/build.gradle | 18 - .../step_03/android/build.gradle.kts | 21 + .../step_03/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../step_03/android/settings.gradle | 25 - .../step_03/android/settings.gradle.kts | 25 + webview_flutter/step_03/ios/Podfile | 1 - .../ios/Runner.xcodeproj/project.pbxproj | 102 ++-- .../android/app/build.gradle.kts} | 10 +- webview_flutter/step_04/android/build.gradle | 18 - .../step_04/android/build.gradle.kts | 21 + .../step_04/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../step_04/android/settings.gradle | 25 - .../step_04/android/settings.gradle.kts | 25 + webview_flutter/step_04/ios/Podfile | 1 - .../ios/Runner.xcodeproj/project.pbxproj | 102 ++-- .../android/app/build.gradle.kts} | 10 +- webview_flutter/step_05/android/build.gradle | 18 - .../step_05/android/build.gradle.kts | 21 + .../step_05/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../step_05/android/settings.gradle | 25 - .../step_05/android/settings.gradle.kts | 25 + webview_flutter/step_05/ios/Podfile | 1 - .../ios/Runner.xcodeproj/project.pbxproj | 102 ++-- .../android/app/build.gradle.kts} | 10 +- webview_flutter/step_06/android/build.gradle | 18 - .../step_06/android/build.gradle.kts | 21 + .../step_06/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../step_06/android/settings.gradle | 25 - .../step_06/android/settings.gradle.kts | 25 + webview_flutter/step_06/ios/Podfile | 1 - .../ios/Runner.xcodeproj/project.pbxproj | 102 ++-- .../step_07/android/app/build.gradle | 44 -- .../step_07/android/app/build.gradle.kts | 44 ++ webview_flutter/step_07/android/build.gradle | 18 - .../step_07/android/build.gradle.kts | 21 + .../step_07/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../step_07/android/settings.gradle | 25 - .../step_07/android/settings.gradle.kts | 25 + webview_flutter/step_07/ios/Podfile | 1 - .../ios/Runner.xcodeproj/project.pbxproj | 102 ++-- .../step_08/android/app/build.gradle | 44 -- .../step_08/android/app/build.gradle.kts | 44 ++ webview_flutter/step_08/android/build.gradle | 18 - .../step_08/android/build.gradle.kts | 21 + .../step_08/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../step_08/android/settings.gradle | 25 - .../step_08/android/settings.gradle.kts | 25 + webview_flutter/step_08/ios/Podfile | 1 - .../ios/Runner.xcodeproj/project.pbxproj | 102 ++-- .../step_09/android/app/build.gradle | 44 -- .../step_09/android/app/build.gradle.kts | 44 ++ webview_flutter/step_09/android/build.gradle | 18 - .../step_09/android/build.gradle.kts | 21 + .../step_09/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../step_09/android/settings.gradle | 25 - .../step_09/android/settings.gradle.kts | 25 + webview_flutter/step_09/ios/Podfile | 1 - .../ios/Runner.xcodeproj/project.pbxproj | 102 ++-- .../step_10/android/app/build.gradle | 44 -- .../step_10/android/app/build.gradle.kts | 44 ++ webview_flutter/step_10/android/build.gradle | 18 - .../step_10/android/build.gradle.kts | 21 + .../step_10/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../step_10/android/settings.gradle | 25 - .../step_10/android/settings.gradle.kts | 25 + webview_flutter/step_10/ios/Podfile | 1 - .../ios/Runner.xcodeproj/project.pbxproj | 102 ++-- .../step_11/android/app/build.gradle | 44 -- .../step_11/android/app/build.gradle.kts | 44 ++ webview_flutter/step_11/android/build.gradle | 18 - .../step_11/android/build.gradle.kts | 21 + .../step_11/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../step_11/android/settings.gradle | 25 - .../step_11/android/settings.gradle.kts | 25 + webview_flutter/step_11/ios/Podfile | 1 - .../ios/Runner.xcodeproj/project.pbxproj | 102 ++-- .../step_12/android/app/build.gradle | 44 -- .../step_12/android/app/build.gradle.kts | 44 ++ webview_flutter/step_12/android/build.gradle | 18 - .../step_12/android/build.gradle.kts | 21 + .../step_12/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../step_12/android/settings.gradle | 25 - .../step_12/android/settings.gradle.kts | 25 + webview_flutter/step_12/ios/Podfile | 1 - .../ios/Runner.xcodeproj/project.pbxproj | 102 ++-- 97 files changed, 1539 insertions(+), 1516 deletions(-) rename webview_flutter/step_03/android/app/{build.gradle => build.gradle.kts} (84%) delete mode 100644 webview_flutter/step_03/android/build.gradle create mode 100644 webview_flutter/step_03/android/build.gradle.kts delete mode 100644 webview_flutter/step_03/android/settings.gradle create mode 100644 webview_flutter/step_03/android/settings.gradle.kts rename webview_flutter/{step_05/android/app/build.gradle => step_04/android/app/build.gradle.kts} (84%) delete mode 100644 webview_flutter/step_04/android/build.gradle create mode 100644 webview_flutter/step_04/android/build.gradle.kts delete mode 100644 webview_flutter/step_04/android/settings.gradle create mode 100644 webview_flutter/step_04/android/settings.gradle.kts rename webview_flutter/{step_06/android/app/build.gradle => step_05/android/app/build.gradle.kts} (84%) delete mode 100644 webview_flutter/step_05/android/build.gradle create mode 100644 webview_flutter/step_05/android/build.gradle.kts delete mode 100644 webview_flutter/step_05/android/settings.gradle create mode 100644 webview_flutter/step_05/android/settings.gradle.kts rename webview_flutter/{step_04/android/app/build.gradle => step_06/android/app/build.gradle.kts} (84%) delete mode 100644 webview_flutter/step_06/android/build.gradle create mode 100644 webview_flutter/step_06/android/build.gradle.kts delete mode 100644 webview_flutter/step_06/android/settings.gradle create mode 100644 webview_flutter/step_06/android/settings.gradle.kts delete mode 100644 webview_flutter/step_07/android/app/build.gradle create mode 100644 webview_flutter/step_07/android/app/build.gradle.kts delete mode 100644 webview_flutter/step_07/android/build.gradle create mode 100644 webview_flutter/step_07/android/build.gradle.kts delete mode 100644 webview_flutter/step_07/android/settings.gradle create mode 100644 webview_flutter/step_07/android/settings.gradle.kts delete mode 100644 webview_flutter/step_08/android/app/build.gradle create mode 100644 webview_flutter/step_08/android/app/build.gradle.kts delete mode 100644 webview_flutter/step_08/android/build.gradle create mode 100644 webview_flutter/step_08/android/build.gradle.kts delete mode 100644 webview_flutter/step_08/android/settings.gradle create mode 100644 webview_flutter/step_08/android/settings.gradle.kts delete mode 100644 webview_flutter/step_09/android/app/build.gradle create mode 100644 webview_flutter/step_09/android/app/build.gradle.kts delete mode 100644 webview_flutter/step_09/android/build.gradle create mode 100644 webview_flutter/step_09/android/build.gradle.kts delete mode 100644 webview_flutter/step_09/android/settings.gradle create mode 100644 webview_flutter/step_09/android/settings.gradle.kts delete mode 100644 webview_flutter/step_10/android/app/build.gradle create mode 100644 webview_flutter/step_10/android/app/build.gradle.kts delete mode 100644 webview_flutter/step_10/android/build.gradle create mode 100644 webview_flutter/step_10/android/build.gradle.kts delete mode 100644 webview_flutter/step_10/android/settings.gradle create mode 100644 webview_flutter/step_10/android/settings.gradle.kts delete mode 100644 webview_flutter/step_11/android/app/build.gradle create mode 100644 webview_flutter/step_11/android/app/build.gradle.kts delete mode 100644 webview_flutter/step_11/android/build.gradle create mode 100644 webview_flutter/step_11/android/build.gradle.kts delete mode 100644 webview_flutter/step_11/android/settings.gradle create mode 100644 webview_flutter/step_11/android/settings.gradle.kts delete mode 100644 webview_flutter/step_12/android/app/build.gradle create mode 100644 webview_flutter/step_12/android/app/build.gradle.kts delete mode 100644 webview_flutter/step_12/android/build.gradle create mode 100644 webview_flutter/step_12/android/build.gradle.kts delete mode 100644 webview_flutter/step_12/android/settings.gradle create mode 100644 webview_flutter/step_12/android/settings.gradle.kts diff --git a/webview_flutter/codelab_rebuild.yaml b/webview_flutter/codelab_rebuild.yaml index a03315bda5..a9ab998d8c 100644 --- a/webview_flutter/codelab_rebuild.yaml +++ b/webview_flutter/codelab_rebuild.yaml @@ -42,8 +42,8 @@ steps: - name: Add webview_flutter path: webview_in_flutter flutter: pub add webview_flutter - - name: Patch android/app/build.gradle - path: webview_in_flutter/android/app/build.gradle + - name: Patch android/app/build.gradle.kts + path: webview_in_flutter/android/app/build.gradle.kts patch-u: | --- b/webview_flutter/step_03/android/app/build.gradle +++ a/webview_flutter/step_03/android/app/build.gradle @@ -78,47 +78,38 @@ steps: // Copyright 2022 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. - + import 'package:flutter/material.dart'; import 'package:webview_flutter/webview_flutter.dart'; - + void main() { runApp( - MaterialApp( - theme: ThemeData(useMaterial3: true), - home: const WebViewApp(), - ), + MaterialApp(theme: ThemeData(useMaterial3: true), home: const WebViewApp()), ); } - + class WebViewApp extends StatefulWidget { const WebViewApp({super.key}); - + @override State createState() => _WebViewAppState(); } - + class _WebViewAppState extends State { late final WebViewController controller; - + @override void initState() { super.initState(); - controller = WebViewController() - ..loadRequest( - Uri.parse('https://flutter.dev'), - ); + controller = + WebViewController()..loadRequest(Uri.parse('https://flutter.dev')); } - + @override Widget build(BuildContext context) { return Scaffold( - appBar: AppBar( - title: const Text('Flutter WebView'), - ), - body: WebViewWidget( - controller: controller, - ), + appBar: AppBar(title: const Text('Flutter WebView')), + body: WebViewWidget(controller: controller), ); } } @@ -144,55 +135,52 @@ steps: import 'package:flutter/material.dart'; import 'package:webview_flutter/webview_flutter.dart'; - + class WebViewStack extends StatefulWidget { const WebViewStack({super.key}); - + @override State createState() => _WebViewStackState(); } - + class _WebViewStackState extends State { var loadingPercentage = 0; late final WebViewController controller; - + @override void initState() { super.initState(); - controller = WebViewController() - ..setNavigationDelegate(NavigationDelegate( - onPageStarted: (url) { - setState(() { - loadingPercentage = 0; - }); - }, - onProgress: (progress) { - setState(() { - loadingPercentage = progress; - }); - }, - onPageFinished: (url) { - setState(() { - loadingPercentage = 100; - }); - }, - )) - ..loadRequest( - Uri.parse('https://flutter.dev'), - ); + controller = + WebViewController() + ..setNavigationDelegate( + NavigationDelegate( + onPageStarted: (url) { + setState(() { + loadingPercentage = 0; + }); + }, + onProgress: (progress) { + setState(() { + loadingPercentage = progress; + }); + }, + onPageFinished: (url) { + setState(() { + loadingPercentage = 100; + }); + }, + ), + ) + ..loadRequest(Uri.parse('https://flutter.dev')); } - + @override Widget build(BuildContext context) { return Stack( children: [ - WebViewWidget( - controller: controller, - ), + WebViewWidget(controller: controller), if (loadingPercentage < 100) - LinearProgressIndicator( - value: loadingPercentage / 100.0, - ), + LinearProgressIndicator(value: loadingPercentage / 100.0), ], ); } @@ -212,7 +200,7 @@ steps: void main() { runApp( - @@ -22,26 +23,13 @@ class WebViewApp extends StatefulWidget { + @@ -19,20 +20,11 @@ class WebViewApp extends StatefulWidget { } class _WebViewAppState extends State { @@ -221,21 +209,15 @@ steps: - @override - void initState() { - super.initState(); - - controller = WebViewController() - - ..loadRequest( - - Uri.parse('https://flutter.dev'), - - ); + - controller = + - WebViewController()..loadRequest(Uri.parse('https://flutter.dev')); - } - @override Widget build(BuildContext context) { return Scaffold( - appBar: AppBar( - title: const Text('Flutter WebView'), - ), - - body: WebViewWidget( - - controller: controller, - - ), + appBar: AppBar(title: const Text('Flutter WebView')), + - body: WebViewWidget(controller: controller), + body: const WebViewStack(), ); } @@ -320,7 +302,7 @@ steps: import 'src/web_view_stack.dart'; void main() { - @@ -23,13 +25,27 @@ class WebViewApp extends StatefulWidget { + @@ -20,11 +22,23 @@ class WebViewApp extends StatefulWidget { } class _WebViewAppState extends State { @@ -329,22 +311,19 @@ steps: + @override + void initState() { + super.initState(); - + controller = WebViewController() - + ..loadRequest( - + Uri.parse('https://flutter.dev'), - + ); + + controller = + + WebViewController()..loadRequest(Uri.parse('https://flutter.dev')); + } + @override Widget build(BuildContext context) { return Scaffold( - appBar: AppBar( - title: const Text('Flutter WebView'), - + actions: [ - + NavigationControls(controller: controller), - + ], - ), + - appBar: AppBar(title: const Text('Flutter WebView')), - body: const WebViewStack(), + + appBar: AppBar( + + title: const Text('Flutter WebView'), + + actions: [NavigationControls(controller: controller)], + + ), + body: WebViewStack(controller: controller), ); } @@ -365,7 +344,7 @@ steps: @override State createState() => _WebViewStackState(); - @@ -14,13 +16,12 @@ class WebViewStack extends StatefulWidget { + @@ -14,40 +16,36 @@ class WebViewStack extends StatefulWidget { class _WebViewStackState extends State { var loadingPercentage = 0; @@ -374,35 +353,58 @@ steps: @override void initState() { super.initState(); - - controller = WebViewController() - - ..setNavigationDelegate(NavigationDelegate( + - controller = + - WebViewController() + - ..setNavigationDelegate( + - NavigationDelegate( + - onPageStarted: (url) { + - setState(() { + - loadingPercentage = 0; + - }); + - }, + - onProgress: (progress) { + - setState(() { + - loadingPercentage = progress; + - }); + - }, + - onPageFinished: (url) { + - setState(() { + - loadingPercentage = 100; + - }); + - }, + - ), + - ) + - ..loadRequest(Uri.parse('https://flutter.dev')); + widget.controller.setNavigationDelegate( + NavigationDelegate( - onPageStarted: (url) { - setState(() { - loadingPercentage = 0; - @@ -36,10 +37,8 @@ class _WebViewStackState extends State { - loadingPercentage = 100; - }); - }, - - )) - - ..loadRequest( - - Uri.parse('https://flutter.dev'), - - ); + + onPageStarted: (url) { + + setState(() { + + loadingPercentage = 0; + + }); + + }, + + onProgress: (progress) { + + setState(() { + + loadingPercentage = progress; + + }); + + }, + + onPageFinished: (url) { + + setState(() { + + loadingPercentage = 100; + + }); + + }, + ), + ); } @override - @@ -47,7 +46,7 @@ class _WebViewStackState extends State { + Widget build(BuildContext context) { return Stack( children: [ - WebViewWidget( - - controller: controller, - + controller: widget.controller, - ), + - WebViewWidget(controller: controller), + + WebViewWidget(controller: widget.controller), if (loadingPercentage < 100) - LinearProgressIndicator( + LinearProgressIndicator(value: loadingPercentage / 100.0), + ], - name: Copy step_06 copydir: from: webview_in_flutter @@ -416,7 +418,7 @@ steps: patch-u: | --- b/webview_flutter/step_07/lib/src/web_view_stack.dart +++ a/webview_flutter/step_07/lib/src/web_view_stack.dart - @@ -37,6 +37,20 @@ class _WebViewStackState extends State { + @@ -37,6 +37,16 @@ class _WebViewStackState extends State { loadingPercentage = 100; }); }, @@ -424,11 +426,7 @@ steps: + final host = Uri.parse(navigation.url).host; + if (host.contains('youtube.com')) { + ScaffoldMessenger.of(context).showSnackBar( - + SnackBar( - + content: Text( - + 'Blocking navigation to $host', - + ), - + ), + + SnackBar(content: Text('Blocking navigation to $host')), + ); + return NavigationDecision.prevent; + } @@ -451,19 +449,17 @@ steps: // Copyright 2022 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. - + import 'package:flutter/material.dart'; import 'package:webview_flutter/webview_flutter.dart'; - - enum _MenuOptions { - navigationDelegate, - } - + + enum _MenuOptions { navigationDelegate } + class Menu extends StatelessWidget { const Menu({required this.controller, super.key}); - + final WebViewController controller; - + @override Widget build(BuildContext context) { return PopupMenuButton<_MenuOptions>( @@ -473,12 +469,13 @@ steps: await controller.loadRequest(Uri.parse('https://youtube.com')); } }, - itemBuilder: (context) => [ - const PopupMenuItem<_MenuOptions>( - value: _MenuOptions.navigationDelegate, - child: Text('Navigate to YouTube'), - ), - ], + itemBuilder: + (context) => [ + const PopupMenuItem<_MenuOptions>( + value: _MenuOptions.navigationDelegate, + child: Text('Navigate to YouTube'), + ), + ], ); } } @@ -495,14 +492,18 @@ steps: import 'src/navigation_controls.dart'; import 'src/web_view_stack.dart'; - @@ -43,6 +44,7 @@ class _WebViewAppState extends State { + @@ -36,7 +37,10 @@ class _WebViewAppState extends State { + return Scaffold( + appBar: AppBar( title: const Text('Flutter WebView'), - actions: [ - NavigationControls(controller: controller), + - actions: [NavigationControls(controller: controller)], + + actions: [ + + NavigationControls(controller: controller), + Menu(controller: controller), - ], + + ], ), body: WebViewStack(controller: controller), + ); - name: Copy step_08 copydir: from: webview_in_flutter @@ -516,12 +517,12 @@ steps: patch-u: | --- b/webview_flutter/step_09/lib/src/menu.dart +++ a/webview_flutter/step_09/lib/src/menu.dart - @@ -7,20 +7,34 @@ import 'package:webview_flutter/webview_flutter.dart'; + @@ -5,20 +5,34 @@ + import 'package:flutter/material.dart'; + import 'package:webview_flutter/webview_flutter.dart'; - enum _MenuOptions { - navigationDelegate, - + userAgent, - } + -enum _MenuOptions { navigationDelegate } + +enum _MenuOptions { navigationDelegate, userAgent } -class Menu extends StatelessWidget { +class Menu extends StatefulWidget { @@ -541,27 +542,28 @@ steps: switch (value) { case _MenuOptions.navigationDelegate: - await controller.loadRequest(Uri.parse('https://youtube.com')); - + await widget.controller - + .loadRequest(Uri.parse('https://youtube.com')); + + await widget.controller.loadRequest( + + Uri.parse('https://youtube.com'), + + ); + case _MenuOptions.userAgent: + final userAgent = await widget.controller + .runJavaScriptReturningResult('navigator.userAgent'); + if (!context.mounted) return; - + ScaffoldMessenger.of(context).showSnackBar(SnackBar( - + content: Text('$userAgent'), - + )); + + ScaffoldMessenger.of( + + context, + + ).showSnackBar(SnackBar(content: Text('$userAgent'))); } }, - itemBuilder: (context) => [ - @@ -28,6 +42,10 @@ class Menu extends StatelessWidget { - value: _MenuOptions.navigationDelegate, - child: Text('Navigate to YouTube'), - ), - + const PopupMenuItem<_MenuOptions>( - + value: _MenuOptions.userAgent, - + child: Text('Show user-agent'), - + ), - ], + itemBuilder: + @@ -27,6 +41,10 @@ class Menu extends StatelessWidget { + value: _MenuOptions.navigationDelegate, + child: Text('Navigate to YouTube'), + ), + + const PopupMenuItem<_MenuOptions>( + + value: _MenuOptions.userAgent, + + child: Text('Show user-agent'), + + ), + ], ); } - name: Patch lib/src/web_view_stack.dart @@ -569,7 +571,7 @@ steps: patch-u: | --- b/webview_flutter/step_09/lib/src/web_view_stack.dart +++ a/webview_flutter/step_09/lib/src/web_view_stack.dart - @@ -20,39 +20,41 @@ class _WebViewStackState extends State { + @@ -20,35 +20,37 @@ class _WebViewStackState extends State { @override void initState() { super.initState(); @@ -594,9 +596,14 @@ steps: - final host = Uri.parse(navigation.url).host; - if (host.contains('youtube.com')) { - ScaffoldMessenger.of(context).showSnackBar( - - SnackBar( - - content: Text( - - 'Blocking navigation to $host', + - SnackBar(content: Text('Blocking navigation to $host')), + - ); + - return NavigationDecision.prevent; + - } + - return NavigationDecision.navigate; + - }, + - ), + - ); + widget.controller + ..setNavigationDelegate( + NavigationDelegate( @@ -619,19 +626,7 @@ steps: + final host = Uri.parse(navigation.url).host; + if (host.contains('youtube.com')) { + ScaffoldMessenger.of(context).showSnackBar( - + SnackBar( - + content: Text( - + 'Blocking navigation to $host', - + ), - ), - - ), - - ); - - return NavigationDecision.prevent; - - } - - return NavigationDecision.navigate; - - }, - - ), - - ); + + SnackBar(content: Text('Blocking navigation to $host')), + ); + return NavigationDecision.prevent; + } @@ -656,18 +651,19 @@ steps: patch-u: | --- b/webview_flutter/step_10/lib/src/menu.dart +++ a/webview_flutter/step_10/lib/src/menu.dart - @@ -8,6 +8,7 @@ import 'package:webview_flutter/webview_flutter.dart'; - enum _MenuOptions { - navigationDelegate, - userAgent, - + javascriptChannel, - } + @@ -5,7 +5,7 @@ + import 'package:flutter/material.dart'; + import 'package:webview_flutter/webview_flutter.dart'; + + -enum _MenuOptions { navigationDelegate, userAgent } + +enum _MenuOptions { navigationDelegate, userAgent, javascriptChannel } class Menu extends StatefulWidget { - @@ -35,6 +36,19 @@ class _MenuState extends State { - ScaffoldMessenger.of(context).showSnackBar(SnackBar( - content: Text('$userAgent'), - )); + const Menu({required this.controller, super.key}); + @@ -33,6 +33,19 @@ class _MenuState extends State { + ScaffoldMessenger.of( + context, + ).showSnackBar(SnackBar(content: Text('$userAgent'))); + case _MenuOptions.javascriptChannel: + await widget.controller.runJavaScript(''' +var req = new XMLHttpRequest(); @@ -683,16 +679,16 @@ steps: +req.send();'''); } }, - itemBuilder: (context) => [ - @@ -46,6 +60,10 @@ class _MenuState extends State { - value: _MenuOptions.userAgent, - child: Text('Show user-agent'), - ), - + const PopupMenuItem<_MenuOptions>( - + value: _MenuOptions.javascriptChannel, - + child: Text('Lookup IP Address'), - + ), - ], + itemBuilder: + @@ -45,6 +58,10 @@ class _MenuState extends State { + value: _MenuOptions.userAgent, + child: Text('Show user-agent'), + ), + + const PopupMenuItem<_MenuOptions>( + + value: _MenuOptions.javascriptChannel, + + child: Text('Lookup IP Address'), + + ), + ], ); } - name: Patch lib/src/web_view_stack.dart @@ -700,7 +696,7 @@ steps: patch-u: | --- b/webview_flutter/step_10/lib/src/web_view_stack.dart +++ a/webview_flutter/step_10/lib/src/web_view_stack.dart - @@ -54,7 +54,14 @@ class _WebViewStackState extends State { + @@ -50,7 +50,15 @@ class _WebViewStackState extends State { }, ), ) @@ -709,8 +705,9 @@ steps: + ..addJavaScriptChannel( + 'SnackBar', + onMessageReceived: (message) { - + ScaffoldMessenger.of(context) - + .showSnackBar(SnackBar(content: Text(message.message))); + + ScaffoldMessenger.of( + + context, + + ).showSnackBar(SnackBar(content: Text(message.message))); + }, + ); } @@ -729,19 +726,25 @@ steps: patch-u: | --- b/webview_flutter/step_11/lib/src/menu.dart +++ a/webview_flutter/step_11/lib/src/menu.dart - @@ -9,6 +9,11 @@ enum _MenuOptions { - navigationDelegate, - userAgent, - javascriptChannel, + @@ -5,7 +5,16 @@ + import 'package:flutter/material.dart'; + import 'package:webview_flutter/webview_flutter.dart'; + + -enum _MenuOptions { navigationDelegate, userAgent, javascriptChannel } + +enum _MenuOptions { + + navigationDelegate, + + userAgent, + + javascriptChannel, + listCookies, + clearCookies, + addCookie, + setCookie, + removeCookie, - } + +} class Menu extends StatefulWidget { - @@ -21,6 +26,8 @@ class Menu extends StatefulWidget { + const Menu({required this.controller, super.key}); + @@ -17,6 +26,8 @@ class Menu extends StatefulWidget { } class _MenuState extends State { @@ -750,7 +753,7 @@ steps: @override Widget build(BuildContext context) { return PopupMenuButton<_MenuOptions>( - @@ -49,6 +56,16 @@ req.onload = function() { + @@ -46,6 +57,16 @@ req.onload = function() { } } req.send();'''); @@ -766,38 +769,39 @@ steps: + await _onRemoveCookie(widget.controller); } }, - itemBuilder: (context) => [ - @@ -64,7 +81,87 @@ req.send();'''); - value: _MenuOptions.javascriptChannel, - child: Text('Lookup IP Address'), - ), - + const PopupMenuItem<_MenuOptions>( - + value: _MenuOptions.clearCookies, - + child: Text('Clear cookies'), - + ), - + const PopupMenuItem<_MenuOptions>( - + value: _MenuOptions.listCookies, - + child: Text('List cookies'), - + ), - + const PopupMenuItem<_MenuOptions>( - + value: _MenuOptions.addCookie, - + child: Text('Add cookie'), - + ), - + const PopupMenuItem<_MenuOptions>( - + value: _MenuOptions.setCookie, - + child: Text('Set cookie'), - + ), - + const PopupMenuItem<_MenuOptions>( - + value: _MenuOptions.removeCookie, - + child: Text('Remove cookie'), - + ), - ], + itemBuilder: + @@ -62,7 +83,81 @@ req.send();'''); + value: _MenuOptions.javascriptChannel, + child: Text('Lookup IP Address'), + ), + + const PopupMenuItem<_MenuOptions>( + + value: _MenuOptions.clearCookies, + + child: Text('Clear cookies'), + + ), + + const PopupMenuItem<_MenuOptions>( + + value: _MenuOptions.listCookies, + + child: Text('List cookies'), + + ), + + const PopupMenuItem<_MenuOptions>( + + value: _MenuOptions.addCookie, + + child: Text('Add cookie'), + + ), + + const PopupMenuItem<_MenuOptions>( + + value: _MenuOptions.setCookie, + + child: Text('Set cookie'), + + ), + + const PopupMenuItem<_MenuOptions>( + + value: _MenuOptions.removeCookie, + + child: Text('Remove cookie'), + + ), + ], ); } + + Future _onListCookies(WebViewController controller) async { - + final String cookies = await controller - + .runJavaScriptReturningResult('document.cookie') as String; + + final String cookies = + + await controller.runJavaScriptReturningResult('document.cookie') + + as String; + if (!mounted) return; + ScaffoldMessenger.of(context).showSnackBar( + SnackBar( @@ -813,11 +817,9 @@ steps: + message = 'There were no cookies to clear.'; + } + if (!mounted) return; - + ScaffoldMessenger.of(context).showSnackBar( - + SnackBar( - + content: Text(message), - + ), - + ); + + ScaffoldMessenger.of( + + context, + + ).showSnackBar(SnackBar(content: Text(message))); + } + + Future _onAddCookie(WebViewController controller) async { @@ -825,11 +827,9 @@ steps: + date.setTime(date.getTime()+(30*24*60*60*1000)); + document.cookie = "FirstName=John; expires=" + date.toGMTString();'''); + if (!mounted) return; - + ScaffoldMessenger.of(context).showSnackBar( - + const SnackBar( - + content: Text('Custom cookie added.'), - + ), - + ); + + ScaffoldMessenger.of( + + context, + + ).showSnackBar(const SnackBar(content: Text('Custom cookie added.'))); + } + + Future _onSetCookie(WebViewController controller) async { @@ -837,22 +837,19 @@ steps: + const WebViewCookie(name: 'foo', value: 'bar', domain: 'flutter.dev'), + ); + if (!mounted) return; - + ScaffoldMessenger.of(context).showSnackBar( - + const SnackBar( - + content: Text('Custom cookie is set.'), - + ), - + ); + + ScaffoldMessenger.of( + + context, + + ).showSnackBar(const SnackBar(content: Text('Custom cookie is set.'))); + } + + Future _onRemoveCookie(WebViewController controller) async { + await controller.runJavaScript( - + 'document.cookie="FirstName=John; expires=Thu, 01 Jan 1970 00:00:00 UTC" '); - + if (!mounted) return; - + ScaffoldMessenger.of(context).showSnackBar( - + const SnackBar( - + content: Text('Custom cookie removed.'), - + ), + + 'document.cookie="FirstName=John; expires=Thu, 01 Jan 1970 00:00:00 UTC" ', + ); + + if (!mounted) return; + + ScaffoldMessenger.of( + + context, + + ).showSnackBar(const SnackBar(content: Text('Custom cookie removed.'))); + } } - name: Copy step_11 @@ -927,7 +924,7 @@ steps: } class Menu extends StatefulWidget { - @@ -66,6 +90,15 @@ req.send();'''); + @@ -67,6 +91,15 @@ req.send();'''); await _onSetCookie(widget.controller); case _MenuOptions.removeCookie: await _onRemoveCookie(widget.controller); @@ -942,38 +939,42 @@ steps: + await _onLoadHtmlStringExample(widget.controller, context); } }, - itemBuilder: (context) => [ - @@ -101,6 +134,18 @@ req.send();'''); - value: _MenuOptions.removeCookie, - child: Text('Remove cookie'), - ), - + const PopupMenuItem<_MenuOptions>( - + value: _MenuOptions.loadFlutterAsset, - + child: Text('Load Flutter Asset'), - + ), - + const PopupMenuItem<_MenuOptions>( - + value: _MenuOptions.loadHtmlString, - + child: Text('Load HTML string'), - + ), - + const PopupMenuItem<_MenuOptions>( - + value: _MenuOptions.loadLocalFile, - + child: Text('Load local file'), - + ), - ], + itemBuilder: + @@ -103,6 +136,18 @@ req.send();'''); + value: _MenuOptions.removeCookie, + child: Text('Remove cookie'), + ), + + const PopupMenuItem<_MenuOptions>( + + value: _MenuOptions.loadFlutterAsset, + + child: Text('Load Flutter Asset'), + + ), + + const PopupMenuItem<_MenuOptions>( + + value: _MenuOptions.loadHtmlString, + + child: Text('Load HTML string'), + + ), + + const PopupMenuItem<_MenuOptions>( + + value: _MenuOptions.loadLocalFile, + + child: Text('Load local file'), + + ), + ], ); } - @@ -164,4 +209,31 @@ req.send();'''); - ), - ); + @@ -160,4 +205,37 @@ req.send();'''); + context, + ).showSnackBar(const SnackBar(content: Text('Custom cookie removed.'))); } + + Future _onLoadFlutterAssetExample( - + WebViewController controller, BuildContext context) async { + + WebViewController controller, + + BuildContext context, + + ) async { + await controller.loadFlutterAsset('assets/www/index.html'); + } + + Future _onLoadLocalFileExample( - + WebViewController controller, BuildContext context) async { + + WebViewController controller, + + BuildContext context, + + ) async { + final String pathToIndex = await _prepareLocalFile(); + + await controller.loadFile(pathToIndex); @@ -990,7 +991,9 @@ steps: + } + + Future _onLoadHtmlStringExample( - + WebViewController controller, BuildContext context) async { + + WebViewController controller, + + BuildContext context, + + ) async { + await controller.loadHtmlString(kExamplePage); + } } diff --git a/webview_flutter/step_03/android/app/build.gradle b/webview_flutter/step_03/android/app/build.gradle.kts similarity index 84% rename from webview_flutter/step_03/android/app/build.gradle rename to webview_flutter/step_03/android/app/build.gradle.kts index 9e345ad06f..561db25cb8 100644 --- a/webview_flutter/step_03/android/app/build.gradle +++ b/webview_flutter/step_03/android/app/build.gradle.kts @@ -1,8 +1,8 @@ plugins { - id "com.android.application" - id "kotlin-android" + id("com.android.application") + id("kotlin-android") // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. - id "dev.flutter.flutter-gradle-plugin" + id("dev.flutter.flutter-gradle-plugin") } android { @@ -16,7 +16,7 @@ android { } kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8 + jvmTarget = JavaVersion.VERSION_1_8.toString() } defaultConfig { @@ -34,7 +34,7 @@ android { release { // TODO: Add your own signing config for the release build. // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig = signingConfigs.debug + signingConfig = signingConfigs.getByName("debug") } } } diff --git a/webview_flutter/step_03/android/build.gradle b/webview_flutter/step_03/android/build.gradle deleted file mode 100644 index d2ffbffa4c..0000000000 --- a/webview_flutter/step_03/android/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = "../build" -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(":app") -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/webview_flutter/step_03/android/build.gradle.kts b/webview_flutter/step_03/android/build.gradle.kts new file mode 100644 index 0000000000..89176ef44e --- /dev/null +++ b/webview_flutter/step_03/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/webview_flutter/step_03/android/gradle.properties b/webview_flutter/step_03/android/gradle.properties index 2597170821..f018a61817 100644 --- a/webview_flutter/step_03/android/gradle.properties +++ b/webview_flutter/step_03/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/webview_flutter/step_03/android/gradle/wrapper/gradle-wrapper.properties b/webview_flutter/step_03/android/gradle/wrapper/gradle-wrapper.properties index 7bb2df6ba6..afa1e8eb0a 100644 --- a/webview_flutter/step_03/android/gradle/wrapper/gradle-wrapper.properties +++ b/webview_flutter/step_03/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip diff --git a/webview_flutter/step_03/android/settings.gradle b/webview_flutter/step_03/android/settings.gradle deleted file mode 100644 index b9e43bd376..0000000000 --- a/webview_flutter/step_03/android/settings.gradle +++ /dev/null @@ -1,25 +0,0 @@ -pluginManagement { - def flutterSdkPath = { - def properties = new Properties() - file("local.properties").withInputStream { properties.load(it) } - def flutterSdkPath = properties.getProperty("flutter.sdk") - assert flutterSdkPath != null, "flutter.sdk not set in local.properties" - return flutterSdkPath - }() - - includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") - - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} - -plugins { - id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.1.0" apply false - id "org.jetbrains.kotlin.android" version "1.8.22" apply false -} - -include ":app" diff --git a/webview_flutter/step_03/android/settings.gradle.kts b/webview_flutter/step_03/android/settings.gradle.kts new file mode 100644 index 0000000000..a439442c20 --- /dev/null +++ b/webview_flutter/step_03/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.0" apply false + id("org.jetbrains.kotlin.android") version "1.8.22" apply false +} + +include(":app") diff --git a/webview_flutter/step_03/ios/Podfile b/webview_flutter/step_03/ios/Podfile index d97f17e223..e549ee22f3 100644 --- a/webview_flutter/step_03/ios/Podfile +++ b/webview_flutter/step_03/ios/Podfile @@ -29,7 +29,6 @@ flutter_ios_podfile_setup target 'Runner' do use_frameworks! - use_modular_headers! flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) target 'RunnerTests' do diff --git a/webview_flutter/step_03/ios/Runner.xcodeproj/project.pbxproj b/webview_flutter/step_03/ios/Runner.xcodeproj/project.pbxproj index 1fdcd8b9c4..5e19f2c4d1 100644 --- a/webview_flutter/step_03/ios/Runner.xcodeproj/project.pbxproj +++ b/webview_flutter/step_03/ios/Runner.xcodeproj/project.pbxproj @@ -7,15 +7,15 @@ objects = { /* Begin PBXBuildFile section */ + 05272810B72430980143DF90 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CB9FA53391D1A32BDDEA3E87 /* Pods_Runner.framework */; }; 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; - 592CCEDE047ADE7BC089AB41 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 350ED558E29135D9B6DA12A0 /* Pods_RunnerTests.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; + 8A32D95BED860F9AC031A67E /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FEAB59B22DE3C64EC37DFFD5 /* Pods_RunnerTests.framework */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - F6A231591C01867C1A1268AD /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EB0168EEDEA46D37DCEF97FD /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -44,13 +44,13 @@ /* Begin PBXFileReference section */ 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 200C0FB6EC3E67446721343D /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 2977D5E158DFA7D2F27A99BF /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 350ED558E29135D9B6DA12A0 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 3E22E37926EFF42C5471F6F9 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 46517A87257E58848B507D86 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 3B931D9D5BDEF5F8AED640E4 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 3E74CF1EC03F0980AF113239 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 58180B72E22C56C89D565649 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; @@ -61,18 +61,18 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - CFA80CA756DDB3C5B27EB87C /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - DCF5FFDDA11243897B692074 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - E43B580CA757421F14EDB9D7 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - EB0168EEDEA46D37DCEF97FD /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + C044D445D331457C527D3B3D /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + CB9FA53391D1A32BDDEA3E87 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + DC9C88328BEF59130E86C035 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + FEAB59B22DE3C64EC37DFFD5 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 02874EA149F2669FBBBEFA6B /* Frameworks */ = { + 5388680779C9C5F3CE22300B /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 592CCEDE047ADE7BC089AB41 /* Pods_RunnerTests.framework in Frameworks */, + 8A32D95BED860F9AC031A67E /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -80,7 +80,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - F6A231591C01867C1A1268AD /* Pods_Runner.framework in Frameworks */, + 05272810B72430980143DF90 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -113,8 +113,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - E9103E523A78BA47FE7905A7 /* Pods */, - 9E8FC7C3B77A794057B5F5A5 /* Frameworks */, + B723ED16A6C04D4D93C38F5C /* Pods */, + A17C049FCE05B8E29D563C53 /* Frameworks */, ); sourceTree = ""; }; @@ -142,24 +142,24 @@ path = Runner; sourceTree = ""; }; - 9E8FC7C3B77A794057B5F5A5 /* Frameworks */ = { + A17C049FCE05B8E29D563C53 /* Frameworks */ = { isa = PBXGroup; children = ( - EB0168EEDEA46D37DCEF97FD /* Pods_Runner.framework */, - 350ED558E29135D9B6DA12A0 /* Pods_RunnerTests.framework */, + CB9FA53391D1A32BDDEA3E87 /* Pods_Runner.framework */, + FEAB59B22DE3C64EC37DFFD5 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; }; - E9103E523A78BA47FE7905A7 /* Pods */ = { + B723ED16A6C04D4D93C38F5C /* Pods */ = { isa = PBXGroup; children = ( - 3E22E37926EFF42C5471F6F9 /* Pods-Runner.debug.xcconfig */, - 46517A87257E58848B507D86 /* Pods-Runner.release.xcconfig */, - E43B580CA757421F14EDB9D7 /* Pods-Runner.profile.xcconfig */, - 200C0FB6EC3E67446721343D /* Pods-RunnerTests.debug.xcconfig */, - CFA80CA756DDB3C5B27EB87C /* Pods-RunnerTests.release.xcconfig */, - DCF5FFDDA11243897B692074 /* Pods-RunnerTests.profile.xcconfig */, + DC9C88328BEF59130E86C035 /* Pods-Runner.debug.xcconfig */, + 2977D5E158DFA7D2F27A99BF /* Pods-Runner.release.xcconfig */, + 58180B72E22C56C89D565649 /* Pods-Runner.profile.xcconfig */, + C044D445D331457C527D3B3D /* Pods-RunnerTests.debug.xcconfig */, + 3B931D9D5BDEF5F8AED640E4 /* Pods-RunnerTests.release.xcconfig */, + 3E74CF1EC03F0980AF113239 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 7CAAD9ACDE3FCDD0AF1C7888 /* [CP] Check Pods Manifest.lock */, + 8C23ADF02B7F6F79EF53DD46 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 02874EA149F2669FBBBEFA6B /* Frameworks */, + 5388680779C9C5F3CE22300B /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 9999291836084819C4E0C140 /* [CP] Check Pods Manifest.lock */, + EB54B6DE05C1CFD6665DA2F7 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - FBFF1AF5B95EAA422EAE27A3 /* [CP] Embed Pods Frameworks */, + 89521D76C9BA9FCF2E9DF2E9 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -286,7 +286,24 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 7CAAD9ACDE3FCDD0AF1C7888 /* [CP] Check Pods Manifest.lock */ = { + 89521D76C9BA9FCF2E9DF2E9 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; + 8C23ADF02B7F6F79EF53DD46 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -323,7 +340,7 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - 9999291836084819C4E0C140 /* [CP] Check Pods Manifest.lock */ = { + EB54B6DE05C1CFD6665DA2F7 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -345,23 +362,6 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - FBFF1AF5B95EAA422EAE27A3 /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 200C0FB6EC3E67446721343D /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = C044D445D331457C527D3B3D /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = CFA80CA756DDB3C5B27EB87C /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 3B931D9D5BDEF5F8AED640E4 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = DCF5FFDDA11243897B692074 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 3E74CF1EC03F0980AF113239 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/webview_flutter/step_05/android/app/build.gradle b/webview_flutter/step_04/android/app/build.gradle.kts similarity index 84% rename from webview_flutter/step_05/android/app/build.gradle rename to webview_flutter/step_04/android/app/build.gradle.kts index 9e345ad06f..561db25cb8 100644 --- a/webview_flutter/step_05/android/app/build.gradle +++ b/webview_flutter/step_04/android/app/build.gradle.kts @@ -1,8 +1,8 @@ plugins { - id "com.android.application" - id "kotlin-android" + id("com.android.application") + id("kotlin-android") // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. - id "dev.flutter.flutter-gradle-plugin" + id("dev.flutter.flutter-gradle-plugin") } android { @@ -16,7 +16,7 @@ android { } kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8 + jvmTarget = JavaVersion.VERSION_1_8.toString() } defaultConfig { @@ -34,7 +34,7 @@ android { release { // TODO: Add your own signing config for the release build. // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig = signingConfigs.debug + signingConfig = signingConfigs.getByName("debug") } } } diff --git a/webview_flutter/step_04/android/build.gradle b/webview_flutter/step_04/android/build.gradle deleted file mode 100644 index d2ffbffa4c..0000000000 --- a/webview_flutter/step_04/android/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = "../build" -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(":app") -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/webview_flutter/step_04/android/build.gradle.kts b/webview_flutter/step_04/android/build.gradle.kts new file mode 100644 index 0000000000..89176ef44e --- /dev/null +++ b/webview_flutter/step_04/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/webview_flutter/step_04/android/gradle.properties b/webview_flutter/step_04/android/gradle.properties index 2597170821..f018a61817 100644 --- a/webview_flutter/step_04/android/gradle.properties +++ b/webview_flutter/step_04/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/webview_flutter/step_04/android/gradle/wrapper/gradle-wrapper.properties b/webview_flutter/step_04/android/gradle/wrapper/gradle-wrapper.properties index 7bb2df6ba6..afa1e8eb0a 100644 --- a/webview_flutter/step_04/android/gradle/wrapper/gradle-wrapper.properties +++ b/webview_flutter/step_04/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip diff --git a/webview_flutter/step_04/android/settings.gradle b/webview_flutter/step_04/android/settings.gradle deleted file mode 100644 index b9e43bd376..0000000000 --- a/webview_flutter/step_04/android/settings.gradle +++ /dev/null @@ -1,25 +0,0 @@ -pluginManagement { - def flutterSdkPath = { - def properties = new Properties() - file("local.properties").withInputStream { properties.load(it) } - def flutterSdkPath = properties.getProperty("flutter.sdk") - assert flutterSdkPath != null, "flutter.sdk not set in local.properties" - return flutterSdkPath - }() - - includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") - - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} - -plugins { - id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.1.0" apply false - id "org.jetbrains.kotlin.android" version "1.8.22" apply false -} - -include ":app" diff --git a/webview_flutter/step_04/android/settings.gradle.kts b/webview_flutter/step_04/android/settings.gradle.kts new file mode 100644 index 0000000000..a439442c20 --- /dev/null +++ b/webview_flutter/step_04/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.0" apply false + id("org.jetbrains.kotlin.android") version "1.8.22" apply false +} + +include(":app") diff --git a/webview_flutter/step_04/ios/Podfile b/webview_flutter/step_04/ios/Podfile index d97f17e223..e549ee22f3 100644 --- a/webview_flutter/step_04/ios/Podfile +++ b/webview_flutter/step_04/ios/Podfile @@ -29,7 +29,6 @@ flutter_ios_podfile_setup target 'Runner' do use_frameworks! - use_modular_headers! flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) target 'RunnerTests' do diff --git a/webview_flutter/step_04/ios/Runner.xcodeproj/project.pbxproj b/webview_flutter/step_04/ios/Runner.xcodeproj/project.pbxproj index 1fdcd8b9c4..5e19f2c4d1 100644 --- a/webview_flutter/step_04/ios/Runner.xcodeproj/project.pbxproj +++ b/webview_flutter/step_04/ios/Runner.xcodeproj/project.pbxproj @@ -7,15 +7,15 @@ objects = { /* Begin PBXBuildFile section */ + 05272810B72430980143DF90 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CB9FA53391D1A32BDDEA3E87 /* Pods_Runner.framework */; }; 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; - 592CCEDE047ADE7BC089AB41 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 350ED558E29135D9B6DA12A0 /* Pods_RunnerTests.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; + 8A32D95BED860F9AC031A67E /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FEAB59B22DE3C64EC37DFFD5 /* Pods_RunnerTests.framework */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - F6A231591C01867C1A1268AD /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EB0168EEDEA46D37DCEF97FD /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -44,13 +44,13 @@ /* Begin PBXFileReference section */ 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 200C0FB6EC3E67446721343D /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 2977D5E158DFA7D2F27A99BF /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 350ED558E29135D9B6DA12A0 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 3E22E37926EFF42C5471F6F9 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 46517A87257E58848B507D86 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 3B931D9D5BDEF5F8AED640E4 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 3E74CF1EC03F0980AF113239 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 58180B72E22C56C89D565649 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; @@ -61,18 +61,18 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - CFA80CA756DDB3C5B27EB87C /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - DCF5FFDDA11243897B692074 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - E43B580CA757421F14EDB9D7 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - EB0168EEDEA46D37DCEF97FD /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + C044D445D331457C527D3B3D /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + CB9FA53391D1A32BDDEA3E87 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + DC9C88328BEF59130E86C035 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + FEAB59B22DE3C64EC37DFFD5 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 02874EA149F2669FBBBEFA6B /* Frameworks */ = { + 5388680779C9C5F3CE22300B /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 592CCEDE047ADE7BC089AB41 /* Pods_RunnerTests.framework in Frameworks */, + 8A32D95BED860F9AC031A67E /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -80,7 +80,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - F6A231591C01867C1A1268AD /* Pods_Runner.framework in Frameworks */, + 05272810B72430980143DF90 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -113,8 +113,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - E9103E523A78BA47FE7905A7 /* Pods */, - 9E8FC7C3B77A794057B5F5A5 /* Frameworks */, + B723ED16A6C04D4D93C38F5C /* Pods */, + A17C049FCE05B8E29D563C53 /* Frameworks */, ); sourceTree = ""; }; @@ -142,24 +142,24 @@ path = Runner; sourceTree = ""; }; - 9E8FC7C3B77A794057B5F5A5 /* Frameworks */ = { + A17C049FCE05B8E29D563C53 /* Frameworks */ = { isa = PBXGroup; children = ( - EB0168EEDEA46D37DCEF97FD /* Pods_Runner.framework */, - 350ED558E29135D9B6DA12A0 /* Pods_RunnerTests.framework */, + CB9FA53391D1A32BDDEA3E87 /* Pods_Runner.framework */, + FEAB59B22DE3C64EC37DFFD5 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; }; - E9103E523A78BA47FE7905A7 /* Pods */ = { + B723ED16A6C04D4D93C38F5C /* Pods */ = { isa = PBXGroup; children = ( - 3E22E37926EFF42C5471F6F9 /* Pods-Runner.debug.xcconfig */, - 46517A87257E58848B507D86 /* Pods-Runner.release.xcconfig */, - E43B580CA757421F14EDB9D7 /* Pods-Runner.profile.xcconfig */, - 200C0FB6EC3E67446721343D /* Pods-RunnerTests.debug.xcconfig */, - CFA80CA756DDB3C5B27EB87C /* Pods-RunnerTests.release.xcconfig */, - DCF5FFDDA11243897B692074 /* Pods-RunnerTests.profile.xcconfig */, + DC9C88328BEF59130E86C035 /* Pods-Runner.debug.xcconfig */, + 2977D5E158DFA7D2F27A99BF /* Pods-Runner.release.xcconfig */, + 58180B72E22C56C89D565649 /* Pods-Runner.profile.xcconfig */, + C044D445D331457C527D3B3D /* Pods-RunnerTests.debug.xcconfig */, + 3B931D9D5BDEF5F8AED640E4 /* Pods-RunnerTests.release.xcconfig */, + 3E74CF1EC03F0980AF113239 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 7CAAD9ACDE3FCDD0AF1C7888 /* [CP] Check Pods Manifest.lock */, + 8C23ADF02B7F6F79EF53DD46 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 02874EA149F2669FBBBEFA6B /* Frameworks */, + 5388680779C9C5F3CE22300B /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 9999291836084819C4E0C140 /* [CP] Check Pods Manifest.lock */, + EB54B6DE05C1CFD6665DA2F7 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - FBFF1AF5B95EAA422EAE27A3 /* [CP] Embed Pods Frameworks */, + 89521D76C9BA9FCF2E9DF2E9 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -286,7 +286,24 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 7CAAD9ACDE3FCDD0AF1C7888 /* [CP] Check Pods Manifest.lock */ = { + 89521D76C9BA9FCF2E9DF2E9 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; + 8C23ADF02B7F6F79EF53DD46 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -323,7 +340,7 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - 9999291836084819C4E0C140 /* [CP] Check Pods Manifest.lock */ = { + EB54B6DE05C1CFD6665DA2F7 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -345,23 +362,6 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - FBFF1AF5B95EAA422EAE27A3 /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 200C0FB6EC3E67446721343D /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = C044D445D331457C527D3B3D /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = CFA80CA756DDB3C5B27EB87C /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 3B931D9D5BDEF5F8AED640E4 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = DCF5FFDDA11243897B692074 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 3E74CF1EC03F0980AF113239 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/webview_flutter/step_06/android/app/build.gradle b/webview_flutter/step_05/android/app/build.gradle.kts similarity index 84% rename from webview_flutter/step_06/android/app/build.gradle rename to webview_flutter/step_05/android/app/build.gradle.kts index 9e345ad06f..561db25cb8 100644 --- a/webview_flutter/step_06/android/app/build.gradle +++ b/webview_flutter/step_05/android/app/build.gradle.kts @@ -1,8 +1,8 @@ plugins { - id "com.android.application" - id "kotlin-android" + id("com.android.application") + id("kotlin-android") // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. - id "dev.flutter.flutter-gradle-plugin" + id("dev.flutter.flutter-gradle-plugin") } android { @@ -16,7 +16,7 @@ android { } kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8 + jvmTarget = JavaVersion.VERSION_1_8.toString() } defaultConfig { @@ -34,7 +34,7 @@ android { release { // TODO: Add your own signing config for the release build. // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig = signingConfigs.debug + signingConfig = signingConfigs.getByName("debug") } } } diff --git a/webview_flutter/step_05/android/build.gradle b/webview_flutter/step_05/android/build.gradle deleted file mode 100644 index d2ffbffa4c..0000000000 --- a/webview_flutter/step_05/android/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = "../build" -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(":app") -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/webview_flutter/step_05/android/build.gradle.kts b/webview_flutter/step_05/android/build.gradle.kts new file mode 100644 index 0000000000..89176ef44e --- /dev/null +++ b/webview_flutter/step_05/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/webview_flutter/step_05/android/gradle.properties b/webview_flutter/step_05/android/gradle.properties index 2597170821..f018a61817 100644 --- a/webview_flutter/step_05/android/gradle.properties +++ b/webview_flutter/step_05/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/webview_flutter/step_05/android/gradle/wrapper/gradle-wrapper.properties b/webview_flutter/step_05/android/gradle/wrapper/gradle-wrapper.properties index 7bb2df6ba6..afa1e8eb0a 100644 --- a/webview_flutter/step_05/android/gradle/wrapper/gradle-wrapper.properties +++ b/webview_flutter/step_05/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip diff --git a/webview_flutter/step_05/android/settings.gradle b/webview_flutter/step_05/android/settings.gradle deleted file mode 100644 index b9e43bd376..0000000000 --- a/webview_flutter/step_05/android/settings.gradle +++ /dev/null @@ -1,25 +0,0 @@ -pluginManagement { - def flutterSdkPath = { - def properties = new Properties() - file("local.properties").withInputStream { properties.load(it) } - def flutterSdkPath = properties.getProperty("flutter.sdk") - assert flutterSdkPath != null, "flutter.sdk not set in local.properties" - return flutterSdkPath - }() - - includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") - - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} - -plugins { - id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.1.0" apply false - id "org.jetbrains.kotlin.android" version "1.8.22" apply false -} - -include ":app" diff --git a/webview_flutter/step_05/android/settings.gradle.kts b/webview_flutter/step_05/android/settings.gradle.kts new file mode 100644 index 0000000000..a439442c20 --- /dev/null +++ b/webview_flutter/step_05/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.0" apply false + id("org.jetbrains.kotlin.android") version "1.8.22" apply false +} + +include(":app") diff --git a/webview_flutter/step_05/ios/Podfile b/webview_flutter/step_05/ios/Podfile index d97f17e223..e549ee22f3 100644 --- a/webview_flutter/step_05/ios/Podfile +++ b/webview_flutter/step_05/ios/Podfile @@ -29,7 +29,6 @@ flutter_ios_podfile_setup target 'Runner' do use_frameworks! - use_modular_headers! flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) target 'RunnerTests' do diff --git a/webview_flutter/step_05/ios/Runner.xcodeproj/project.pbxproj b/webview_flutter/step_05/ios/Runner.xcodeproj/project.pbxproj index 1fdcd8b9c4..5e19f2c4d1 100644 --- a/webview_flutter/step_05/ios/Runner.xcodeproj/project.pbxproj +++ b/webview_flutter/step_05/ios/Runner.xcodeproj/project.pbxproj @@ -7,15 +7,15 @@ objects = { /* Begin PBXBuildFile section */ + 05272810B72430980143DF90 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CB9FA53391D1A32BDDEA3E87 /* Pods_Runner.framework */; }; 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; - 592CCEDE047ADE7BC089AB41 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 350ED558E29135D9B6DA12A0 /* Pods_RunnerTests.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; + 8A32D95BED860F9AC031A67E /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FEAB59B22DE3C64EC37DFFD5 /* Pods_RunnerTests.framework */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - F6A231591C01867C1A1268AD /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EB0168EEDEA46D37DCEF97FD /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -44,13 +44,13 @@ /* Begin PBXFileReference section */ 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 200C0FB6EC3E67446721343D /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 2977D5E158DFA7D2F27A99BF /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 350ED558E29135D9B6DA12A0 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 3E22E37926EFF42C5471F6F9 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 46517A87257E58848B507D86 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 3B931D9D5BDEF5F8AED640E4 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 3E74CF1EC03F0980AF113239 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 58180B72E22C56C89D565649 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; @@ -61,18 +61,18 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - CFA80CA756DDB3C5B27EB87C /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - DCF5FFDDA11243897B692074 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - E43B580CA757421F14EDB9D7 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - EB0168EEDEA46D37DCEF97FD /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + C044D445D331457C527D3B3D /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + CB9FA53391D1A32BDDEA3E87 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + DC9C88328BEF59130E86C035 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + FEAB59B22DE3C64EC37DFFD5 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 02874EA149F2669FBBBEFA6B /* Frameworks */ = { + 5388680779C9C5F3CE22300B /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 592CCEDE047ADE7BC089AB41 /* Pods_RunnerTests.framework in Frameworks */, + 8A32D95BED860F9AC031A67E /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -80,7 +80,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - F6A231591C01867C1A1268AD /* Pods_Runner.framework in Frameworks */, + 05272810B72430980143DF90 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -113,8 +113,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - E9103E523A78BA47FE7905A7 /* Pods */, - 9E8FC7C3B77A794057B5F5A5 /* Frameworks */, + B723ED16A6C04D4D93C38F5C /* Pods */, + A17C049FCE05B8E29D563C53 /* Frameworks */, ); sourceTree = ""; }; @@ -142,24 +142,24 @@ path = Runner; sourceTree = ""; }; - 9E8FC7C3B77A794057B5F5A5 /* Frameworks */ = { + A17C049FCE05B8E29D563C53 /* Frameworks */ = { isa = PBXGroup; children = ( - EB0168EEDEA46D37DCEF97FD /* Pods_Runner.framework */, - 350ED558E29135D9B6DA12A0 /* Pods_RunnerTests.framework */, + CB9FA53391D1A32BDDEA3E87 /* Pods_Runner.framework */, + FEAB59B22DE3C64EC37DFFD5 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; }; - E9103E523A78BA47FE7905A7 /* Pods */ = { + B723ED16A6C04D4D93C38F5C /* Pods */ = { isa = PBXGroup; children = ( - 3E22E37926EFF42C5471F6F9 /* Pods-Runner.debug.xcconfig */, - 46517A87257E58848B507D86 /* Pods-Runner.release.xcconfig */, - E43B580CA757421F14EDB9D7 /* Pods-Runner.profile.xcconfig */, - 200C0FB6EC3E67446721343D /* Pods-RunnerTests.debug.xcconfig */, - CFA80CA756DDB3C5B27EB87C /* Pods-RunnerTests.release.xcconfig */, - DCF5FFDDA11243897B692074 /* Pods-RunnerTests.profile.xcconfig */, + DC9C88328BEF59130E86C035 /* Pods-Runner.debug.xcconfig */, + 2977D5E158DFA7D2F27A99BF /* Pods-Runner.release.xcconfig */, + 58180B72E22C56C89D565649 /* Pods-Runner.profile.xcconfig */, + C044D445D331457C527D3B3D /* Pods-RunnerTests.debug.xcconfig */, + 3B931D9D5BDEF5F8AED640E4 /* Pods-RunnerTests.release.xcconfig */, + 3E74CF1EC03F0980AF113239 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 7CAAD9ACDE3FCDD0AF1C7888 /* [CP] Check Pods Manifest.lock */, + 8C23ADF02B7F6F79EF53DD46 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 02874EA149F2669FBBBEFA6B /* Frameworks */, + 5388680779C9C5F3CE22300B /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 9999291836084819C4E0C140 /* [CP] Check Pods Manifest.lock */, + EB54B6DE05C1CFD6665DA2F7 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - FBFF1AF5B95EAA422EAE27A3 /* [CP] Embed Pods Frameworks */, + 89521D76C9BA9FCF2E9DF2E9 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -286,7 +286,24 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 7CAAD9ACDE3FCDD0AF1C7888 /* [CP] Check Pods Manifest.lock */ = { + 89521D76C9BA9FCF2E9DF2E9 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; + 8C23ADF02B7F6F79EF53DD46 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -323,7 +340,7 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - 9999291836084819C4E0C140 /* [CP] Check Pods Manifest.lock */ = { + EB54B6DE05C1CFD6665DA2F7 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -345,23 +362,6 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - FBFF1AF5B95EAA422EAE27A3 /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 200C0FB6EC3E67446721343D /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = C044D445D331457C527D3B3D /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = CFA80CA756DDB3C5B27EB87C /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 3B931D9D5BDEF5F8AED640E4 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = DCF5FFDDA11243897B692074 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 3E74CF1EC03F0980AF113239 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/webview_flutter/step_04/android/app/build.gradle b/webview_flutter/step_06/android/app/build.gradle.kts similarity index 84% rename from webview_flutter/step_04/android/app/build.gradle rename to webview_flutter/step_06/android/app/build.gradle.kts index 9e345ad06f..561db25cb8 100644 --- a/webview_flutter/step_04/android/app/build.gradle +++ b/webview_flutter/step_06/android/app/build.gradle.kts @@ -1,8 +1,8 @@ plugins { - id "com.android.application" - id "kotlin-android" + id("com.android.application") + id("kotlin-android") // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. - id "dev.flutter.flutter-gradle-plugin" + id("dev.flutter.flutter-gradle-plugin") } android { @@ -16,7 +16,7 @@ android { } kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8 + jvmTarget = JavaVersion.VERSION_1_8.toString() } defaultConfig { @@ -34,7 +34,7 @@ android { release { // TODO: Add your own signing config for the release build. // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig = signingConfigs.debug + signingConfig = signingConfigs.getByName("debug") } } } diff --git a/webview_flutter/step_06/android/build.gradle b/webview_flutter/step_06/android/build.gradle deleted file mode 100644 index d2ffbffa4c..0000000000 --- a/webview_flutter/step_06/android/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = "../build" -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(":app") -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/webview_flutter/step_06/android/build.gradle.kts b/webview_flutter/step_06/android/build.gradle.kts new file mode 100644 index 0000000000..89176ef44e --- /dev/null +++ b/webview_flutter/step_06/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/webview_flutter/step_06/android/gradle.properties b/webview_flutter/step_06/android/gradle.properties index 2597170821..f018a61817 100644 --- a/webview_flutter/step_06/android/gradle.properties +++ b/webview_flutter/step_06/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/webview_flutter/step_06/android/gradle/wrapper/gradle-wrapper.properties b/webview_flutter/step_06/android/gradle/wrapper/gradle-wrapper.properties index 7bb2df6ba6..afa1e8eb0a 100644 --- a/webview_flutter/step_06/android/gradle/wrapper/gradle-wrapper.properties +++ b/webview_flutter/step_06/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip diff --git a/webview_flutter/step_06/android/settings.gradle b/webview_flutter/step_06/android/settings.gradle deleted file mode 100644 index b9e43bd376..0000000000 --- a/webview_flutter/step_06/android/settings.gradle +++ /dev/null @@ -1,25 +0,0 @@ -pluginManagement { - def flutterSdkPath = { - def properties = new Properties() - file("local.properties").withInputStream { properties.load(it) } - def flutterSdkPath = properties.getProperty("flutter.sdk") - assert flutterSdkPath != null, "flutter.sdk not set in local.properties" - return flutterSdkPath - }() - - includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") - - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} - -plugins { - id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.1.0" apply false - id "org.jetbrains.kotlin.android" version "1.8.22" apply false -} - -include ":app" diff --git a/webview_flutter/step_06/android/settings.gradle.kts b/webview_flutter/step_06/android/settings.gradle.kts new file mode 100644 index 0000000000..a439442c20 --- /dev/null +++ b/webview_flutter/step_06/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.0" apply false + id("org.jetbrains.kotlin.android") version "1.8.22" apply false +} + +include(":app") diff --git a/webview_flutter/step_06/ios/Podfile b/webview_flutter/step_06/ios/Podfile index d97f17e223..e549ee22f3 100644 --- a/webview_flutter/step_06/ios/Podfile +++ b/webview_flutter/step_06/ios/Podfile @@ -29,7 +29,6 @@ flutter_ios_podfile_setup target 'Runner' do use_frameworks! - use_modular_headers! flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) target 'RunnerTests' do diff --git a/webview_flutter/step_06/ios/Runner.xcodeproj/project.pbxproj b/webview_flutter/step_06/ios/Runner.xcodeproj/project.pbxproj index 1fdcd8b9c4..5e19f2c4d1 100644 --- a/webview_flutter/step_06/ios/Runner.xcodeproj/project.pbxproj +++ b/webview_flutter/step_06/ios/Runner.xcodeproj/project.pbxproj @@ -7,15 +7,15 @@ objects = { /* Begin PBXBuildFile section */ + 05272810B72430980143DF90 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CB9FA53391D1A32BDDEA3E87 /* Pods_Runner.framework */; }; 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; - 592CCEDE047ADE7BC089AB41 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 350ED558E29135D9B6DA12A0 /* Pods_RunnerTests.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; + 8A32D95BED860F9AC031A67E /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FEAB59B22DE3C64EC37DFFD5 /* Pods_RunnerTests.framework */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - F6A231591C01867C1A1268AD /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EB0168EEDEA46D37DCEF97FD /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -44,13 +44,13 @@ /* Begin PBXFileReference section */ 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 200C0FB6EC3E67446721343D /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 2977D5E158DFA7D2F27A99BF /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 350ED558E29135D9B6DA12A0 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 3E22E37926EFF42C5471F6F9 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 46517A87257E58848B507D86 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 3B931D9D5BDEF5F8AED640E4 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 3E74CF1EC03F0980AF113239 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 58180B72E22C56C89D565649 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; @@ -61,18 +61,18 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - CFA80CA756DDB3C5B27EB87C /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - DCF5FFDDA11243897B692074 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - E43B580CA757421F14EDB9D7 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - EB0168EEDEA46D37DCEF97FD /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + C044D445D331457C527D3B3D /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + CB9FA53391D1A32BDDEA3E87 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + DC9C88328BEF59130E86C035 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + FEAB59B22DE3C64EC37DFFD5 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 02874EA149F2669FBBBEFA6B /* Frameworks */ = { + 5388680779C9C5F3CE22300B /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 592CCEDE047ADE7BC089AB41 /* Pods_RunnerTests.framework in Frameworks */, + 8A32D95BED860F9AC031A67E /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -80,7 +80,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - F6A231591C01867C1A1268AD /* Pods_Runner.framework in Frameworks */, + 05272810B72430980143DF90 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -113,8 +113,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - E9103E523A78BA47FE7905A7 /* Pods */, - 9E8FC7C3B77A794057B5F5A5 /* Frameworks */, + B723ED16A6C04D4D93C38F5C /* Pods */, + A17C049FCE05B8E29D563C53 /* Frameworks */, ); sourceTree = ""; }; @@ -142,24 +142,24 @@ path = Runner; sourceTree = ""; }; - 9E8FC7C3B77A794057B5F5A5 /* Frameworks */ = { + A17C049FCE05B8E29D563C53 /* Frameworks */ = { isa = PBXGroup; children = ( - EB0168EEDEA46D37DCEF97FD /* Pods_Runner.framework */, - 350ED558E29135D9B6DA12A0 /* Pods_RunnerTests.framework */, + CB9FA53391D1A32BDDEA3E87 /* Pods_Runner.framework */, + FEAB59B22DE3C64EC37DFFD5 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; }; - E9103E523A78BA47FE7905A7 /* Pods */ = { + B723ED16A6C04D4D93C38F5C /* Pods */ = { isa = PBXGroup; children = ( - 3E22E37926EFF42C5471F6F9 /* Pods-Runner.debug.xcconfig */, - 46517A87257E58848B507D86 /* Pods-Runner.release.xcconfig */, - E43B580CA757421F14EDB9D7 /* Pods-Runner.profile.xcconfig */, - 200C0FB6EC3E67446721343D /* Pods-RunnerTests.debug.xcconfig */, - CFA80CA756DDB3C5B27EB87C /* Pods-RunnerTests.release.xcconfig */, - DCF5FFDDA11243897B692074 /* Pods-RunnerTests.profile.xcconfig */, + DC9C88328BEF59130E86C035 /* Pods-Runner.debug.xcconfig */, + 2977D5E158DFA7D2F27A99BF /* Pods-Runner.release.xcconfig */, + 58180B72E22C56C89D565649 /* Pods-Runner.profile.xcconfig */, + C044D445D331457C527D3B3D /* Pods-RunnerTests.debug.xcconfig */, + 3B931D9D5BDEF5F8AED640E4 /* Pods-RunnerTests.release.xcconfig */, + 3E74CF1EC03F0980AF113239 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 7CAAD9ACDE3FCDD0AF1C7888 /* [CP] Check Pods Manifest.lock */, + 8C23ADF02B7F6F79EF53DD46 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 02874EA149F2669FBBBEFA6B /* Frameworks */, + 5388680779C9C5F3CE22300B /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 9999291836084819C4E0C140 /* [CP] Check Pods Manifest.lock */, + EB54B6DE05C1CFD6665DA2F7 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - FBFF1AF5B95EAA422EAE27A3 /* [CP] Embed Pods Frameworks */, + 89521D76C9BA9FCF2E9DF2E9 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -286,7 +286,24 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 7CAAD9ACDE3FCDD0AF1C7888 /* [CP] Check Pods Manifest.lock */ = { + 89521D76C9BA9FCF2E9DF2E9 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; + 8C23ADF02B7F6F79EF53DD46 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -323,7 +340,7 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - 9999291836084819C4E0C140 /* [CP] Check Pods Manifest.lock */ = { + EB54B6DE05C1CFD6665DA2F7 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -345,23 +362,6 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - FBFF1AF5B95EAA422EAE27A3 /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 200C0FB6EC3E67446721343D /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = C044D445D331457C527D3B3D /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = CFA80CA756DDB3C5B27EB87C /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 3B931D9D5BDEF5F8AED640E4 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = DCF5FFDDA11243897B692074 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 3E74CF1EC03F0980AF113239 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/webview_flutter/step_07/android/app/build.gradle b/webview_flutter/step_07/android/app/build.gradle deleted file mode 100644 index 9e345ad06f..0000000000 --- a/webview_flutter/step_07/android/app/build.gradle +++ /dev/null @@ -1,44 +0,0 @@ -plugins { - id "com.android.application" - id "kotlin-android" - // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. - id "dev.flutter.flutter-gradle-plugin" -} - -android { - namespace = "com.example.webview_in_flutter" - compileSdk = flutter.compileSdkVersion - ndkVersion = flutter.ndkVersion - - compileOptions { - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 - } - - kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8 - } - - defaultConfig { - // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). - applicationId = "com.example.webview_in_flutter" - // You can update the following values to match your application needs. - // For more information, see: https://flutter.dev/to/review-gradle-config. - minSdk = 21 - targetSdk = flutter.targetSdkVersion - versionCode = flutter.versionCode - versionName = flutter.versionName - } - - buildTypes { - release { - // TODO: Add your own signing config for the release build. - // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig = signingConfigs.debug - } - } -} - -flutter { - source = "../.." -} diff --git a/webview_flutter/step_07/android/app/build.gradle.kts b/webview_flutter/step_07/android/app/build.gradle.kts new file mode 100644 index 0000000000..561db25cb8 --- /dev/null +++ b/webview_flutter/step_07/android/app/build.gradle.kts @@ -0,0 +1,44 @@ +plugins { + id("com.android.application") + id("kotlin-android") + // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. + id("dev.flutter.flutter-gradle-plugin") +} + +android { + namespace = "com.example.webview_in_flutter" + compileSdk = flutter.compileSdkVersion + ndkVersion = flutter.ndkVersion + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 + } + + kotlinOptions { + jvmTarget = JavaVersion.VERSION_1_8.toString() + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId = "com.example.webview_in_flutter" + // You can update the following values to match your application needs. + // For more information, see: https://flutter.dev/to/review-gradle-config. + minSdk = 21 + targetSdk = flutter.targetSdkVersion + versionCode = flutter.versionCode + versionName = flutter.versionName + } + + buildTypes { + release { + // TODO: Add your own signing config for the release build. + // Signing with the debug keys for now, so `flutter run --release` works. + signingConfig = signingConfigs.getByName("debug") + } + } +} + +flutter { + source = "../.." +} diff --git a/webview_flutter/step_07/android/build.gradle b/webview_flutter/step_07/android/build.gradle deleted file mode 100644 index d2ffbffa4c..0000000000 --- a/webview_flutter/step_07/android/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = "../build" -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(":app") -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/webview_flutter/step_07/android/build.gradle.kts b/webview_flutter/step_07/android/build.gradle.kts new file mode 100644 index 0000000000..89176ef44e --- /dev/null +++ b/webview_flutter/step_07/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/webview_flutter/step_07/android/gradle.properties b/webview_flutter/step_07/android/gradle.properties index 2597170821..f018a61817 100644 --- a/webview_flutter/step_07/android/gradle.properties +++ b/webview_flutter/step_07/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/webview_flutter/step_07/android/gradle/wrapper/gradle-wrapper.properties b/webview_flutter/step_07/android/gradle/wrapper/gradle-wrapper.properties index 7bb2df6ba6..afa1e8eb0a 100644 --- a/webview_flutter/step_07/android/gradle/wrapper/gradle-wrapper.properties +++ b/webview_flutter/step_07/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip diff --git a/webview_flutter/step_07/android/settings.gradle b/webview_flutter/step_07/android/settings.gradle deleted file mode 100644 index b9e43bd376..0000000000 --- a/webview_flutter/step_07/android/settings.gradle +++ /dev/null @@ -1,25 +0,0 @@ -pluginManagement { - def flutterSdkPath = { - def properties = new Properties() - file("local.properties").withInputStream { properties.load(it) } - def flutterSdkPath = properties.getProperty("flutter.sdk") - assert flutterSdkPath != null, "flutter.sdk not set in local.properties" - return flutterSdkPath - }() - - includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") - - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} - -plugins { - id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.1.0" apply false - id "org.jetbrains.kotlin.android" version "1.8.22" apply false -} - -include ":app" diff --git a/webview_flutter/step_07/android/settings.gradle.kts b/webview_flutter/step_07/android/settings.gradle.kts new file mode 100644 index 0000000000..a439442c20 --- /dev/null +++ b/webview_flutter/step_07/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.0" apply false + id("org.jetbrains.kotlin.android") version "1.8.22" apply false +} + +include(":app") diff --git a/webview_flutter/step_07/ios/Podfile b/webview_flutter/step_07/ios/Podfile index d97f17e223..e549ee22f3 100644 --- a/webview_flutter/step_07/ios/Podfile +++ b/webview_flutter/step_07/ios/Podfile @@ -29,7 +29,6 @@ flutter_ios_podfile_setup target 'Runner' do use_frameworks! - use_modular_headers! flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) target 'RunnerTests' do diff --git a/webview_flutter/step_07/ios/Runner.xcodeproj/project.pbxproj b/webview_flutter/step_07/ios/Runner.xcodeproj/project.pbxproj index 1fdcd8b9c4..5e19f2c4d1 100644 --- a/webview_flutter/step_07/ios/Runner.xcodeproj/project.pbxproj +++ b/webview_flutter/step_07/ios/Runner.xcodeproj/project.pbxproj @@ -7,15 +7,15 @@ objects = { /* Begin PBXBuildFile section */ + 05272810B72430980143DF90 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CB9FA53391D1A32BDDEA3E87 /* Pods_Runner.framework */; }; 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; - 592CCEDE047ADE7BC089AB41 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 350ED558E29135D9B6DA12A0 /* Pods_RunnerTests.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; + 8A32D95BED860F9AC031A67E /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FEAB59B22DE3C64EC37DFFD5 /* Pods_RunnerTests.framework */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - F6A231591C01867C1A1268AD /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EB0168EEDEA46D37DCEF97FD /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -44,13 +44,13 @@ /* Begin PBXFileReference section */ 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 200C0FB6EC3E67446721343D /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 2977D5E158DFA7D2F27A99BF /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 350ED558E29135D9B6DA12A0 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 3E22E37926EFF42C5471F6F9 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 46517A87257E58848B507D86 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 3B931D9D5BDEF5F8AED640E4 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 3E74CF1EC03F0980AF113239 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 58180B72E22C56C89D565649 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; @@ -61,18 +61,18 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - CFA80CA756DDB3C5B27EB87C /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - DCF5FFDDA11243897B692074 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - E43B580CA757421F14EDB9D7 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - EB0168EEDEA46D37DCEF97FD /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + C044D445D331457C527D3B3D /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + CB9FA53391D1A32BDDEA3E87 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + DC9C88328BEF59130E86C035 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + FEAB59B22DE3C64EC37DFFD5 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 02874EA149F2669FBBBEFA6B /* Frameworks */ = { + 5388680779C9C5F3CE22300B /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 592CCEDE047ADE7BC089AB41 /* Pods_RunnerTests.framework in Frameworks */, + 8A32D95BED860F9AC031A67E /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -80,7 +80,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - F6A231591C01867C1A1268AD /* Pods_Runner.framework in Frameworks */, + 05272810B72430980143DF90 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -113,8 +113,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - E9103E523A78BA47FE7905A7 /* Pods */, - 9E8FC7C3B77A794057B5F5A5 /* Frameworks */, + B723ED16A6C04D4D93C38F5C /* Pods */, + A17C049FCE05B8E29D563C53 /* Frameworks */, ); sourceTree = ""; }; @@ -142,24 +142,24 @@ path = Runner; sourceTree = ""; }; - 9E8FC7C3B77A794057B5F5A5 /* Frameworks */ = { + A17C049FCE05B8E29D563C53 /* Frameworks */ = { isa = PBXGroup; children = ( - EB0168EEDEA46D37DCEF97FD /* Pods_Runner.framework */, - 350ED558E29135D9B6DA12A0 /* Pods_RunnerTests.framework */, + CB9FA53391D1A32BDDEA3E87 /* Pods_Runner.framework */, + FEAB59B22DE3C64EC37DFFD5 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; }; - E9103E523A78BA47FE7905A7 /* Pods */ = { + B723ED16A6C04D4D93C38F5C /* Pods */ = { isa = PBXGroup; children = ( - 3E22E37926EFF42C5471F6F9 /* Pods-Runner.debug.xcconfig */, - 46517A87257E58848B507D86 /* Pods-Runner.release.xcconfig */, - E43B580CA757421F14EDB9D7 /* Pods-Runner.profile.xcconfig */, - 200C0FB6EC3E67446721343D /* Pods-RunnerTests.debug.xcconfig */, - CFA80CA756DDB3C5B27EB87C /* Pods-RunnerTests.release.xcconfig */, - DCF5FFDDA11243897B692074 /* Pods-RunnerTests.profile.xcconfig */, + DC9C88328BEF59130E86C035 /* Pods-Runner.debug.xcconfig */, + 2977D5E158DFA7D2F27A99BF /* Pods-Runner.release.xcconfig */, + 58180B72E22C56C89D565649 /* Pods-Runner.profile.xcconfig */, + C044D445D331457C527D3B3D /* Pods-RunnerTests.debug.xcconfig */, + 3B931D9D5BDEF5F8AED640E4 /* Pods-RunnerTests.release.xcconfig */, + 3E74CF1EC03F0980AF113239 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 7CAAD9ACDE3FCDD0AF1C7888 /* [CP] Check Pods Manifest.lock */, + 8C23ADF02B7F6F79EF53DD46 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 02874EA149F2669FBBBEFA6B /* Frameworks */, + 5388680779C9C5F3CE22300B /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 9999291836084819C4E0C140 /* [CP] Check Pods Manifest.lock */, + EB54B6DE05C1CFD6665DA2F7 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - FBFF1AF5B95EAA422EAE27A3 /* [CP] Embed Pods Frameworks */, + 89521D76C9BA9FCF2E9DF2E9 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -286,7 +286,24 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 7CAAD9ACDE3FCDD0AF1C7888 /* [CP] Check Pods Manifest.lock */ = { + 89521D76C9BA9FCF2E9DF2E9 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; + 8C23ADF02B7F6F79EF53DD46 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -323,7 +340,7 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - 9999291836084819C4E0C140 /* [CP] Check Pods Manifest.lock */ = { + EB54B6DE05C1CFD6665DA2F7 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -345,23 +362,6 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - FBFF1AF5B95EAA422EAE27A3 /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 200C0FB6EC3E67446721343D /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = C044D445D331457C527D3B3D /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = CFA80CA756DDB3C5B27EB87C /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 3B931D9D5BDEF5F8AED640E4 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = DCF5FFDDA11243897B692074 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 3E74CF1EC03F0980AF113239 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/webview_flutter/step_08/android/app/build.gradle b/webview_flutter/step_08/android/app/build.gradle deleted file mode 100644 index 9e345ad06f..0000000000 --- a/webview_flutter/step_08/android/app/build.gradle +++ /dev/null @@ -1,44 +0,0 @@ -plugins { - id "com.android.application" - id "kotlin-android" - // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. - id "dev.flutter.flutter-gradle-plugin" -} - -android { - namespace = "com.example.webview_in_flutter" - compileSdk = flutter.compileSdkVersion - ndkVersion = flutter.ndkVersion - - compileOptions { - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 - } - - kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8 - } - - defaultConfig { - // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). - applicationId = "com.example.webview_in_flutter" - // You can update the following values to match your application needs. - // For more information, see: https://flutter.dev/to/review-gradle-config. - minSdk = 21 - targetSdk = flutter.targetSdkVersion - versionCode = flutter.versionCode - versionName = flutter.versionName - } - - buildTypes { - release { - // TODO: Add your own signing config for the release build. - // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig = signingConfigs.debug - } - } -} - -flutter { - source = "../.." -} diff --git a/webview_flutter/step_08/android/app/build.gradle.kts b/webview_flutter/step_08/android/app/build.gradle.kts new file mode 100644 index 0000000000..561db25cb8 --- /dev/null +++ b/webview_flutter/step_08/android/app/build.gradle.kts @@ -0,0 +1,44 @@ +plugins { + id("com.android.application") + id("kotlin-android") + // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. + id("dev.flutter.flutter-gradle-plugin") +} + +android { + namespace = "com.example.webview_in_flutter" + compileSdk = flutter.compileSdkVersion + ndkVersion = flutter.ndkVersion + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 + } + + kotlinOptions { + jvmTarget = JavaVersion.VERSION_1_8.toString() + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId = "com.example.webview_in_flutter" + // You can update the following values to match your application needs. + // For more information, see: https://flutter.dev/to/review-gradle-config. + minSdk = 21 + targetSdk = flutter.targetSdkVersion + versionCode = flutter.versionCode + versionName = flutter.versionName + } + + buildTypes { + release { + // TODO: Add your own signing config for the release build. + // Signing with the debug keys for now, so `flutter run --release` works. + signingConfig = signingConfigs.getByName("debug") + } + } +} + +flutter { + source = "../.." +} diff --git a/webview_flutter/step_08/android/build.gradle b/webview_flutter/step_08/android/build.gradle deleted file mode 100644 index d2ffbffa4c..0000000000 --- a/webview_flutter/step_08/android/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = "../build" -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(":app") -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/webview_flutter/step_08/android/build.gradle.kts b/webview_flutter/step_08/android/build.gradle.kts new file mode 100644 index 0000000000..89176ef44e --- /dev/null +++ b/webview_flutter/step_08/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/webview_flutter/step_08/android/gradle.properties b/webview_flutter/step_08/android/gradle.properties index 2597170821..f018a61817 100644 --- a/webview_flutter/step_08/android/gradle.properties +++ b/webview_flutter/step_08/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/webview_flutter/step_08/android/gradle/wrapper/gradle-wrapper.properties b/webview_flutter/step_08/android/gradle/wrapper/gradle-wrapper.properties index 7bb2df6ba6..afa1e8eb0a 100644 --- a/webview_flutter/step_08/android/gradle/wrapper/gradle-wrapper.properties +++ b/webview_flutter/step_08/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip diff --git a/webview_flutter/step_08/android/settings.gradle b/webview_flutter/step_08/android/settings.gradle deleted file mode 100644 index b9e43bd376..0000000000 --- a/webview_flutter/step_08/android/settings.gradle +++ /dev/null @@ -1,25 +0,0 @@ -pluginManagement { - def flutterSdkPath = { - def properties = new Properties() - file("local.properties").withInputStream { properties.load(it) } - def flutterSdkPath = properties.getProperty("flutter.sdk") - assert flutterSdkPath != null, "flutter.sdk not set in local.properties" - return flutterSdkPath - }() - - includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") - - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} - -plugins { - id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.1.0" apply false - id "org.jetbrains.kotlin.android" version "1.8.22" apply false -} - -include ":app" diff --git a/webview_flutter/step_08/android/settings.gradle.kts b/webview_flutter/step_08/android/settings.gradle.kts new file mode 100644 index 0000000000..a439442c20 --- /dev/null +++ b/webview_flutter/step_08/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.0" apply false + id("org.jetbrains.kotlin.android") version "1.8.22" apply false +} + +include(":app") diff --git a/webview_flutter/step_08/ios/Podfile b/webview_flutter/step_08/ios/Podfile index d97f17e223..e549ee22f3 100644 --- a/webview_flutter/step_08/ios/Podfile +++ b/webview_flutter/step_08/ios/Podfile @@ -29,7 +29,6 @@ flutter_ios_podfile_setup target 'Runner' do use_frameworks! - use_modular_headers! flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) target 'RunnerTests' do diff --git a/webview_flutter/step_08/ios/Runner.xcodeproj/project.pbxproj b/webview_flutter/step_08/ios/Runner.xcodeproj/project.pbxproj index 1fdcd8b9c4..5e19f2c4d1 100644 --- a/webview_flutter/step_08/ios/Runner.xcodeproj/project.pbxproj +++ b/webview_flutter/step_08/ios/Runner.xcodeproj/project.pbxproj @@ -7,15 +7,15 @@ objects = { /* Begin PBXBuildFile section */ + 05272810B72430980143DF90 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CB9FA53391D1A32BDDEA3E87 /* Pods_Runner.framework */; }; 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; - 592CCEDE047ADE7BC089AB41 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 350ED558E29135D9B6DA12A0 /* Pods_RunnerTests.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; + 8A32D95BED860F9AC031A67E /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FEAB59B22DE3C64EC37DFFD5 /* Pods_RunnerTests.framework */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - F6A231591C01867C1A1268AD /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EB0168EEDEA46D37DCEF97FD /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -44,13 +44,13 @@ /* Begin PBXFileReference section */ 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 200C0FB6EC3E67446721343D /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 2977D5E158DFA7D2F27A99BF /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 350ED558E29135D9B6DA12A0 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 3E22E37926EFF42C5471F6F9 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 46517A87257E58848B507D86 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 3B931D9D5BDEF5F8AED640E4 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 3E74CF1EC03F0980AF113239 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 58180B72E22C56C89D565649 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; @@ -61,18 +61,18 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - CFA80CA756DDB3C5B27EB87C /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - DCF5FFDDA11243897B692074 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - E43B580CA757421F14EDB9D7 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - EB0168EEDEA46D37DCEF97FD /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + C044D445D331457C527D3B3D /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + CB9FA53391D1A32BDDEA3E87 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + DC9C88328BEF59130E86C035 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + FEAB59B22DE3C64EC37DFFD5 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 02874EA149F2669FBBBEFA6B /* Frameworks */ = { + 5388680779C9C5F3CE22300B /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 592CCEDE047ADE7BC089AB41 /* Pods_RunnerTests.framework in Frameworks */, + 8A32D95BED860F9AC031A67E /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -80,7 +80,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - F6A231591C01867C1A1268AD /* Pods_Runner.framework in Frameworks */, + 05272810B72430980143DF90 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -113,8 +113,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - E9103E523A78BA47FE7905A7 /* Pods */, - 9E8FC7C3B77A794057B5F5A5 /* Frameworks */, + B723ED16A6C04D4D93C38F5C /* Pods */, + A17C049FCE05B8E29D563C53 /* Frameworks */, ); sourceTree = ""; }; @@ -142,24 +142,24 @@ path = Runner; sourceTree = ""; }; - 9E8FC7C3B77A794057B5F5A5 /* Frameworks */ = { + A17C049FCE05B8E29D563C53 /* Frameworks */ = { isa = PBXGroup; children = ( - EB0168EEDEA46D37DCEF97FD /* Pods_Runner.framework */, - 350ED558E29135D9B6DA12A0 /* Pods_RunnerTests.framework */, + CB9FA53391D1A32BDDEA3E87 /* Pods_Runner.framework */, + FEAB59B22DE3C64EC37DFFD5 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; }; - E9103E523A78BA47FE7905A7 /* Pods */ = { + B723ED16A6C04D4D93C38F5C /* Pods */ = { isa = PBXGroup; children = ( - 3E22E37926EFF42C5471F6F9 /* Pods-Runner.debug.xcconfig */, - 46517A87257E58848B507D86 /* Pods-Runner.release.xcconfig */, - E43B580CA757421F14EDB9D7 /* Pods-Runner.profile.xcconfig */, - 200C0FB6EC3E67446721343D /* Pods-RunnerTests.debug.xcconfig */, - CFA80CA756DDB3C5B27EB87C /* Pods-RunnerTests.release.xcconfig */, - DCF5FFDDA11243897B692074 /* Pods-RunnerTests.profile.xcconfig */, + DC9C88328BEF59130E86C035 /* Pods-Runner.debug.xcconfig */, + 2977D5E158DFA7D2F27A99BF /* Pods-Runner.release.xcconfig */, + 58180B72E22C56C89D565649 /* Pods-Runner.profile.xcconfig */, + C044D445D331457C527D3B3D /* Pods-RunnerTests.debug.xcconfig */, + 3B931D9D5BDEF5F8AED640E4 /* Pods-RunnerTests.release.xcconfig */, + 3E74CF1EC03F0980AF113239 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 7CAAD9ACDE3FCDD0AF1C7888 /* [CP] Check Pods Manifest.lock */, + 8C23ADF02B7F6F79EF53DD46 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 02874EA149F2669FBBBEFA6B /* Frameworks */, + 5388680779C9C5F3CE22300B /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 9999291836084819C4E0C140 /* [CP] Check Pods Manifest.lock */, + EB54B6DE05C1CFD6665DA2F7 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - FBFF1AF5B95EAA422EAE27A3 /* [CP] Embed Pods Frameworks */, + 89521D76C9BA9FCF2E9DF2E9 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -286,7 +286,24 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 7CAAD9ACDE3FCDD0AF1C7888 /* [CP] Check Pods Manifest.lock */ = { + 89521D76C9BA9FCF2E9DF2E9 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; + 8C23ADF02B7F6F79EF53DD46 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -323,7 +340,7 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - 9999291836084819C4E0C140 /* [CP] Check Pods Manifest.lock */ = { + EB54B6DE05C1CFD6665DA2F7 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -345,23 +362,6 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - FBFF1AF5B95EAA422EAE27A3 /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 200C0FB6EC3E67446721343D /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = C044D445D331457C527D3B3D /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = CFA80CA756DDB3C5B27EB87C /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 3B931D9D5BDEF5F8AED640E4 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = DCF5FFDDA11243897B692074 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 3E74CF1EC03F0980AF113239 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/webview_flutter/step_09/android/app/build.gradle b/webview_flutter/step_09/android/app/build.gradle deleted file mode 100644 index 9e345ad06f..0000000000 --- a/webview_flutter/step_09/android/app/build.gradle +++ /dev/null @@ -1,44 +0,0 @@ -plugins { - id "com.android.application" - id "kotlin-android" - // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. - id "dev.flutter.flutter-gradle-plugin" -} - -android { - namespace = "com.example.webview_in_flutter" - compileSdk = flutter.compileSdkVersion - ndkVersion = flutter.ndkVersion - - compileOptions { - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 - } - - kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8 - } - - defaultConfig { - // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). - applicationId = "com.example.webview_in_flutter" - // You can update the following values to match your application needs. - // For more information, see: https://flutter.dev/to/review-gradle-config. - minSdk = 21 - targetSdk = flutter.targetSdkVersion - versionCode = flutter.versionCode - versionName = flutter.versionName - } - - buildTypes { - release { - // TODO: Add your own signing config for the release build. - // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig = signingConfigs.debug - } - } -} - -flutter { - source = "../.." -} diff --git a/webview_flutter/step_09/android/app/build.gradle.kts b/webview_flutter/step_09/android/app/build.gradle.kts new file mode 100644 index 0000000000..561db25cb8 --- /dev/null +++ b/webview_flutter/step_09/android/app/build.gradle.kts @@ -0,0 +1,44 @@ +plugins { + id("com.android.application") + id("kotlin-android") + // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. + id("dev.flutter.flutter-gradle-plugin") +} + +android { + namespace = "com.example.webview_in_flutter" + compileSdk = flutter.compileSdkVersion + ndkVersion = flutter.ndkVersion + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 + } + + kotlinOptions { + jvmTarget = JavaVersion.VERSION_1_8.toString() + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId = "com.example.webview_in_flutter" + // You can update the following values to match your application needs. + // For more information, see: https://flutter.dev/to/review-gradle-config. + minSdk = 21 + targetSdk = flutter.targetSdkVersion + versionCode = flutter.versionCode + versionName = flutter.versionName + } + + buildTypes { + release { + // TODO: Add your own signing config for the release build. + // Signing with the debug keys for now, so `flutter run --release` works. + signingConfig = signingConfigs.getByName("debug") + } + } +} + +flutter { + source = "../.." +} diff --git a/webview_flutter/step_09/android/build.gradle b/webview_flutter/step_09/android/build.gradle deleted file mode 100644 index d2ffbffa4c..0000000000 --- a/webview_flutter/step_09/android/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = "../build" -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(":app") -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/webview_flutter/step_09/android/build.gradle.kts b/webview_flutter/step_09/android/build.gradle.kts new file mode 100644 index 0000000000..89176ef44e --- /dev/null +++ b/webview_flutter/step_09/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/webview_flutter/step_09/android/gradle.properties b/webview_flutter/step_09/android/gradle.properties index 2597170821..f018a61817 100644 --- a/webview_flutter/step_09/android/gradle.properties +++ b/webview_flutter/step_09/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/webview_flutter/step_09/android/gradle/wrapper/gradle-wrapper.properties b/webview_flutter/step_09/android/gradle/wrapper/gradle-wrapper.properties index 7bb2df6ba6..afa1e8eb0a 100644 --- a/webview_flutter/step_09/android/gradle/wrapper/gradle-wrapper.properties +++ b/webview_flutter/step_09/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip diff --git a/webview_flutter/step_09/android/settings.gradle b/webview_flutter/step_09/android/settings.gradle deleted file mode 100644 index b9e43bd376..0000000000 --- a/webview_flutter/step_09/android/settings.gradle +++ /dev/null @@ -1,25 +0,0 @@ -pluginManagement { - def flutterSdkPath = { - def properties = new Properties() - file("local.properties").withInputStream { properties.load(it) } - def flutterSdkPath = properties.getProperty("flutter.sdk") - assert flutterSdkPath != null, "flutter.sdk not set in local.properties" - return flutterSdkPath - }() - - includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") - - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} - -plugins { - id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.1.0" apply false - id "org.jetbrains.kotlin.android" version "1.8.22" apply false -} - -include ":app" diff --git a/webview_flutter/step_09/android/settings.gradle.kts b/webview_flutter/step_09/android/settings.gradle.kts new file mode 100644 index 0000000000..a439442c20 --- /dev/null +++ b/webview_flutter/step_09/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.0" apply false + id("org.jetbrains.kotlin.android") version "1.8.22" apply false +} + +include(":app") diff --git a/webview_flutter/step_09/ios/Podfile b/webview_flutter/step_09/ios/Podfile index d97f17e223..e549ee22f3 100644 --- a/webview_flutter/step_09/ios/Podfile +++ b/webview_flutter/step_09/ios/Podfile @@ -29,7 +29,6 @@ flutter_ios_podfile_setup target 'Runner' do use_frameworks! - use_modular_headers! flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) target 'RunnerTests' do diff --git a/webview_flutter/step_09/ios/Runner.xcodeproj/project.pbxproj b/webview_flutter/step_09/ios/Runner.xcodeproj/project.pbxproj index 1fdcd8b9c4..5e19f2c4d1 100644 --- a/webview_flutter/step_09/ios/Runner.xcodeproj/project.pbxproj +++ b/webview_flutter/step_09/ios/Runner.xcodeproj/project.pbxproj @@ -7,15 +7,15 @@ objects = { /* Begin PBXBuildFile section */ + 05272810B72430980143DF90 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CB9FA53391D1A32BDDEA3E87 /* Pods_Runner.framework */; }; 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; - 592CCEDE047ADE7BC089AB41 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 350ED558E29135D9B6DA12A0 /* Pods_RunnerTests.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; + 8A32D95BED860F9AC031A67E /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FEAB59B22DE3C64EC37DFFD5 /* Pods_RunnerTests.framework */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - F6A231591C01867C1A1268AD /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EB0168EEDEA46D37DCEF97FD /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -44,13 +44,13 @@ /* Begin PBXFileReference section */ 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 200C0FB6EC3E67446721343D /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 2977D5E158DFA7D2F27A99BF /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 350ED558E29135D9B6DA12A0 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 3E22E37926EFF42C5471F6F9 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 46517A87257E58848B507D86 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 3B931D9D5BDEF5F8AED640E4 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 3E74CF1EC03F0980AF113239 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 58180B72E22C56C89D565649 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; @@ -61,18 +61,18 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - CFA80CA756DDB3C5B27EB87C /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - DCF5FFDDA11243897B692074 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - E43B580CA757421F14EDB9D7 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - EB0168EEDEA46D37DCEF97FD /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + C044D445D331457C527D3B3D /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + CB9FA53391D1A32BDDEA3E87 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + DC9C88328BEF59130E86C035 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + FEAB59B22DE3C64EC37DFFD5 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 02874EA149F2669FBBBEFA6B /* Frameworks */ = { + 5388680779C9C5F3CE22300B /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 592CCEDE047ADE7BC089AB41 /* Pods_RunnerTests.framework in Frameworks */, + 8A32D95BED860F9AC031A67E /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -80,7 +80,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - F6A231591C01867C1A1268AD /* Pods_Runner.framework in Frameworks */, + 05272810B72430980143DF90 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -113,8 +113,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - E9103E523A78BA47FE7905A7 /* Pods */, - 9E8FC7C3B77A794057B5F5A5 /* Frameworks */, + B723ED16A6C04D4D93C38F5C /* Pods */, + A17C049FCE05B8E29D563C53 /* Frameworks */, ); sourceTree = ""; }; @@ -142,24 +142,24 @@ path = Runner; sourceTree = ""; }; - 9E8FC7C3B77A794057B5F5A5 /* Frameworks */ = { + A17C049FCE05B8E29D563C53 /* Frameworks */ = { isa = PBXGroup; children = ( - EB0168EEDEA46D37DCEF97FD /* Pods_Runner.framework */, - 350ED558E29135D9B6DA12A0 /* Pods_RunnerTests.framework */, + CB9FA53391D1A32BDDEA3E87 /* Pods_Runner.framework */, + FEAB59B22DE3C64EC37DFFD5 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; }; - E9103E523A78BA47FE7905A7 /* Pods */ = { + B723ED16A6C04D4D93C38F5C /* Pods */ = { isa = PBXGroup; children = ( - 3E22E37926EFF42C5471F6F9 /* Pods-Runner.debug.xcconfig */, - 46517A87257E58848B507D86 /* Pods-Runner.release.xcconfig */, - E43B580CA757421F14EDB9D7 /* Pods-Runner.profile.xcconfig */, - 200C0FB6EC3E67446721343D /* Pods-RunnerTests.debug.xcconfig */, - CFA80CA756DDB3C5B27EB87C /* Pods-RunnerTests.release.xcconfig */, - DCF5FFDDA11243897B692074 /* Pods-RunnerTests.profile.xcconfig */, + DC9C88328BEF59130E86C035 /* Pods-Runner.debug.xcconfig */, + 2977D5E158DFA7D2F27A99BF /* Pods-Runner.release.xcconfig */, + 58180B72E22C56C89D565649 /* Pods-Runner.profile.xcconfig */, + C044D445D331457C527D3B3D /* Pods-RunnerTests.debug.xcconfig */, + 3B931D9D5BDEF5F8AED640E4 /* Pods-RunnerTests.release.xcconfig */, + 3E74CF1EC03F0980AF113239 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 7CAAD9ACDE3FCDD0AF1C7888 /* [CP] Check Pods Manifest.lock */, + 8C23ADF02B7F6F79EF53DD46 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 02874EA149F2669FBBBEFA6B /* Frameworks */, + 5388680779C9C5F3CE22300B /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 9999291836084819C4E0C140 /* [CP] Check Pods Manifest.lock */, + EB54B6DE05C1CFD6665DA2F7 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - FBFF1AF5B95EAA422EAE27A3 /* [CP] Embed Pods Frameworks */, + 89521D76C9BA9FCF2E9DF2E9 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -286,7 +286,24 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 7CAAD9ACDE3FCDD0AF1C7888 /* [CP] Check Pods Manifest.lock */ = { + 89521D76C9BA9FCF2E9DF2E9 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; + 8C23ADF02B7F6F79EF53DD46 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -323,7 +340,7 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - 9999291836084819C4E0C140 /* [CP] Check Pods Manifest.lock */ = { + EB54B6DE05C1CFD6665DA2F7 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -345,23 +362,6 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - FBFF1AF5B95EAA422EAE27A3 /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 200C0FB6EC3E67446721343D /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = C044D445D331457C527D3B3D /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = CFA80CA756DDB3C5B27EB87C /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 3B931D9D5BDEF5F8AED640E4 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = DCF5FFDDA11243897B692074 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 3E74CF1EC03F0980AF113239 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/webview_flutter/step_10/android/app/build.gradle b/webview_flutter/step_10/android/app/build.gradle deleted file mode 100644 index 9e345ad06f..0000000000 --- a/webview_flutter/step_10/android/app/build.gradle +++ /dev/null @@ -1,44 +0,0 @@ -plugins { - id "com.android.application" - id "kotlin-android" - // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. - id "dev.flutter.flutter-gradle-plugin" -} - -android { - namespace = "com.example.webview_in_flutter" - compileSdk = flutter.compileSdkVersion - ndkVersion = flutter.ndkVersion - - compileOptions { - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 - } - - kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8 - } - - defaultConfig { - // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). - applicationId = "com.example.webview_in_flutter" - // You can update the following values to match your application needs. - // For more information, see: https://flutter.dev/to/review-gradle-config. - minSdk = 21 - targetSdk = flutter.targetSdkVersion - versionCode = flutter.versionCode - versionName = flutter.versionName - } - - buildTypes { - release { - // TODO: Add your own signing config for the release build. - // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig = signingConfigs.debug - } - } -} - -flutter { - source = "../.." -} diff --git a/webview_flutter/step_10/android/app/build.gradle.kts b/webview_flutter/step_10/android/app/build.gradle.kts new file mode 100644 index 0000000000..561db25cb8 --- /dev/null +++ b/webview_flutter/step_10/android/app/build.gradle.kts @@ -0,0 +1,44 @@ +plugins { + id("com.android.application") + id("kotlin-android") + // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. + id("dev.flutter.flutter-gradle-plugin") +} + +android { + namespace = "com.example.webview_in_flutter" + compileSdk = flutter.compileSdkVersion + ndkVersion = flutter.ndkVersion + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 + } + + kotlinOptions { + jvmTarget = JavaVersion.VERSION_1_8.toString() + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId = "com.example.webview_in_flutter" + // You can update the following values to match your application needs. + // For more information, see: https://flutter.dev/to/review-gradle-config. + minSdk = 21 + targetSdk = flutter.targetSdkVersion + versionCode = flutter.versionCode + versionName = flutter.versionName + } + + buildTypes { + release { + // TODO: Add your own signing config for the release build. + // Signing with the debug keys for now, so `flutter run --release` works. + signingConfig = signingConfigs.getByName("debug") + } + } +} + +flutter { + source = "../.." +} diff --git a/webview_flutter/step_10/android/build.gradle b/webview_flutter/step_10/android/build.gradle deleted file mode 100644 index d2ffbffa4c..0000000000 --- a/webview_flutter/step_10/android/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = "../build" -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(":app") -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/webview_flutter/step_10/android/build.gradle.kts b/webview_flutter/step_10/android/build.gradle.kts new file mode 100644 index 0000000000..89176ef44e --- /dev/null +++ b/webview_flutter/step_10/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/webview_flutter/step_10/android/gradle.properties b/webview_flutter/step_10/android/gradle.properties index 2597170821..f018a61817 100644 --- a/webview_flutter/step_10/android/gradle.properties +++ b/webview_flutter/step_10/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/webview_flutter/step_10/android/gradle/wrapper/gradle-wrapper.properties b/webview_flutter/step_10/android/gradle/wrapper/gradle-wrapper.properties index 7bb2df6ba6..afa1e8eb0a 100644 --- a/webview_flutter/step_10/android/gradle/wrapper/gradle-wrapper.properties +++ b/webview_flutter/step_10/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip diff --git a/webview_flutter/step_10/android/settings.gradle b/webview_flutter/step_10/android/settings.gradle deleted file mode 100644 index b9e43bd376..0000000000 --- a/webview_flutter/step_10/android/settings.gradle +++ /dev/null @@ -1,25 +0,0 @@ -pluginManagement { - def flutterSdkPath = { - def properties = new Properties() - file("local.properties").withInputStream { properties.load(it) } - def flutterSdkPath = properties.getProperty("flutter.sdk") - assert flutterSdkPath != null, "flutter.sdk not set in local.properties" - return flutterSdkPath - }() - - includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") - - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} - -plugins { - id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.1.0" apply false - id "org.jetbrains.kotlin.android" version "1.8.22" apply false -} - -include ":app" diff --git a/webview_flutter/step_10/android/settings.gradle.kts b/webview_flutter/step_10/android/settings.gradle.kts new file mode 100644 index 0000000000..a439442c20 --- /dev/null +++ b/webview_flutter/step_10/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.0" apply false + id("org.jetbrains.kotlin.android") version "1.8.22" apply false +} + +include(":app") diff --git a/webview_flutter/step_10/ios/Podfile b/webview_flutter/step_10/ios/Podfile index d97f17e223..e549ee22f3 100644 --- a/webview_flutter/step_10/ios/Podfile +++ b/webview_flutter/step_10/ios/Podfile @@ -29,7 +29,6 @@ flutter_ios_podfile_setup target 'Runner' do use_frameworks! - use_modular_headers! flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) target 'RunnerTests' do diff --git a/webview_flutter/step_10/ios/Runner.xcodeproj/project.pbxproj b/webview_flutter/step_10/ios/Runner.xcodeproj/project.pbxproj index 1fdcd8b9c4..5e19f2c4d1 100644 --- a/webview_flutter/step_10/ios/Runner.xcodeproj/project.pbxproj +++ b/webview_flutter/step_10/ios/Runner.xcodeproj/project.pbxproj @@ -7,15 +7,15 @@ objects = { /* Begin PBXBuildFile section */ + 05272810B72430980143DF90 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CB9FA53391D1A32BDDEA3E87 /* Pods_Runner.framework */; }; 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; - 592CCEDE047ADE7BC089AB41 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 350ED558E29135D9B6DA12A0 /* Pods_RunnerTests.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; + 8A32D95BED860F9AC031A67E /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FEAB59B22DE3C64EC37DFFD5 /* Pods_RunnerTests.framework */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - F6A231591C01867C1A1268AD /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EB0168EEDEA46D37DCEF97FD /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -44,13 +44,13 @@ /* Begin PBXFileReference section */ 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 200C0FB6EC3E67446721343D /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 2977D5E158DFA7D2F27A99BF /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 350ED558E29135D9B6DA12A0 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 3E22E37926EFF42C5471F6F9 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 46517A87257E58848B507D86 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 3B931D9D5BDEF5F8AED640E4 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 3E74CF1EC03F0980AF113239 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 58180B72E22C56C89D565649 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; @@ -61,18 +61,18 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - CFA80CA756DDB3C5B27EB87C /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - DCF5FFDDA11243897B692074 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - E43B580CA757421F14EDB9D7 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - EB0168EEDEA46D37DCEF97FD /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + C044D445D331457C527D3B3D /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + CB9FA53391D1A32BDDEA3E87 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + DC9C88328BEF59130E86C035 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + FEAB59B22DE3C64EC37DFFD5 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 02874EA149F2669FBBBEFA6B /* Frameworks */ = { + 5388680779C9C5F3CE22300B /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 592CCEDE047ADE7BC089AB41 /* Pods_RunnerTests.framework in Frameworks */, + 8A32D95BED860F9AC031A67E /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -80,7 +80,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - F6A231591C01867C1A1268AD /* Pods_Runner.framework in Frameworks */, + 05272810B72430980143DF90 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -113,8 +113,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - E9103E523A78BA47FE7905A7 /* Pods */, - 9E8FC7C3B77A794057B5F5A5 /* Frameworks */, + B723ED16A6C04D4D93C38F5C /* Pods */, + A17C049FCE05B8E29D563C53 /* Frameworks */, ); sourceTree = ""; }; @@ -142,24 +142,24 @@ path = Runner; sourceTree = ""; }; - 9E8FC7C3B77A794057B5F5A5 /* Frameworks */ = { + A17C049FCE05B8E29D563C53 /* Frameworks */ = { isa = PBXGroup; children = ( - EB0168EEDEA46D37DCEF97FD /* Pods_Runner.framework */, - 350ED558E29135D9B6DA12A0 /* Pods_RunnerTests.framework */, + CB9FA53391D1A32BDDEA3E87 /* Pods_Runner.framework */, + FEAB59B22DE3C64EC37DFFD5 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; }; - E9103E523A78BA47FE7905A7 /* Pods */ = { + B723ED16A6C04D4D93C38F5C /* Pods */ = { isa = PBXGroup; children = ( - 3E22E37926EFF42C5471F6F9 /* Pods-Runner.debug.xcconfig */, - 46517A87257E58848B507D86 /* Pods-Runner.release.xcconfig */, - E43B580CA757421F14EDB9D7 /* Pods-Runner.profile.xcconfig */, - 200C0FB6EC3E67446721343D /* Pods-RunnerTests.debug.xcconfig */, - CFA80CA756DDB3C5B27EB87C /* Pods-RunnerTests.release.xcconfig */, - DCF5FFDDA11243897B692074 /* Pods-RunnerTests.profile.xcconfig */, + DC9C88328BEF59130E86C035 /* Pods-Runner.debug.xcconfig */, + 2977D5E158DFA7D2F27A99BF /* Pods-Runner.release.xcconfig */, + 58180B72E22C56C89D565649 /* Pods-Runner.profile.xcconfig */, + C044D445D331457C527D3B3D /* Pods-RunnerTests.debug.xcconfig */, + 3B931D9D5BDEF5F8AED640E4 /* Pods-RunnerTests.release.xcconfig */, + 3E74CF1EC03F0980AF113239 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 7CAAD9ACDE3FCDD0AF1C7888 /* [CP] Check Pods Manifest.lock */, + 8C23ADF02B7F6F79EF53DD46 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 02874EA149F2669FBBBEFA6B /* Frameworks */, + 5388680779C9C5F3CE22300B /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 9999291836084819C4E0C140 /* [CP] Check Pods Manifest.lock */, + EB54B6DE05C1CFD6665DA2F7 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - FBFF1AF5B95EAA422EAE27A3 /* [CP] Embed Pods Frameworks */, + 89521D76C9BA9FCF2E9DF2E9 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -286,7 +286,24 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 7CAAD9ACDE3FCDD0AF1C7888 /* [CP] Check Pods Manifest.lock */ = { + 89521D76C9BA9FCF2E9DF2E9 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; + 8C23ADF02B7F6F79EF53DD46 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -323,7 +340,7 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - 9999291836084819C4E0C140 /* [CP] Check Pods Manifest.lock */ = { + EB54B6DE05C1CFD6665DA2F7 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -345,23 +362,6 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - FBFF1AF5B95EAA422EAE27A3 /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 200C0FB6EC3E67446721343D /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = C044D445D331457C527D3B3D /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = CFA80CA756DDB3C5B27EB87C /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 3B931D9D5BDEF5F8AED640E4 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = DCF5FFDDA11243897B692074 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 3E74CF1EC03F0980AF113239 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/webview_flutter/step_11/android/app/build.gradle b/webview_flutter/step_11/android/app/build.gradle deleted file mode 100644 index 9e345ad06f..0000000000 --- a/webview_flutter/step_11/android/app/build.gradle +++ /dev/null @@ -1,44 +0,0 @@ -plugins { - id "com.android.application" - id "kotlin-android" - // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. - id "dev.flutter.flutter-gradle-plugin" -} - -android { - namespace = "com.example.webview_in_flutter" - compileSdk = flutter.compileSdkVersion - ndkVersion = flutter.ndkVersion - - compileOptions { - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 - } - - kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8 - } - - defaultConfig { - // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). - applicationId = "com.example.webview_in_flutter" - // You can update the following values to match your application needs. - // For more information, see: https://flutter.dev/to/review-gradle-config. - minSdk = 21 - targetSdk = flutter.targetSdkVersion - versionCode = flutter.versionCode - versionName = flutter.versionName - } - - buildTypes { - release { - // TODO: Add your own signing config for the release build. - // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig = signingConfigs.debug - } - } -} - -flutter { - source = "../.." -} diff --git a/webview_flutter/step_11/android/app/build.gradle.kts b/webview_flutter/step_11/android/app/build.gradle.kts new file mode 100644 index 0000000000..561db25cb8 --- /dev/null +++ b/webview_flutter/step_11/android/app/build.gradle.kts @@ -0,0 +1,44 @@ +plugins { + id("com.android.application") + id("kotlin-android") + // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. + id("dev.flutter.flutter-gradle-plugin") +} + +android { + namespace = "com.example.webview_in_flutter" + compileSdk = flutter.compileSdkVersion + ndkVersion = flutter.ndkVersion + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 + } + + kotlinOptions { + jvmTarget = JavaVersion.VERSION_1_8.toString() + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId = "com.example.webview_in_flutter" + // You can update the following values to match your application needs. + // For more information, see: https://flutter.dev/to/review-gradle-config. + minSdk = 21 + targetSdk = flutter.targetSdkVersion + versionCode = flutter.versionCode + versionName = flutter.versionName + } + + buildTypes { + release { + // TODO: Add your own signing config for the release build. + // Signing with the debug keys for now, so `flutter run --release` works. + signingConfig = signingConfigs.getByName("debug") + } + } +} + +flutter { + source = "../.." +} diff --git a/webview_flutter/step_11/android/build.gradle b/webview_flutter/step_11/android/build.gradle deleted file mode 100644 index d2ffbffa4c..0000000000 --- a/webview_flutter/step_11/android/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = "../build" -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(":app") -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/webview_flutter/step_11/android/build.gradle.kts b/webview_flutter/step_11/android/build.gradle.kts new file mode 100644 index 0000000000..89176ef44e --- /dev/null +++ b/webview_flutter/step_11/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/webview_flutter/step_11/android/gradle.properties b/webview_flutter/step_11/android/gradle.properties index 2597170821..f018a61817 100644 --- a/webview_flutter/step_11/android/gradle.properties +++ b/webview_flutter/step_11/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/webview_flutter/step_11/android/gradle/wrapper/gradle-wrapper.properties b/webview_flutter/step_11/android/gradle/wrapper/gradle-wrapper.properties index 7bb2df6ba6..afa1e8eb0a 100644 --- a/webview_flutter/step_11/android/gradle/wrapper/gradle-wrapper.properties +++ b/webview_flutter/step_11/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip diff --git a/webview_flutter/step_11/android/settings.gradle b/webview_flutter/step_11/android/settings.gradle deleted file mode 100644 index b9e43bd376..0000000000 --- a/webview_flutter/step_11/android/settings.gradle +++ /dev/null @@ -1,25 +0,0 @@ -pluginManagement { - def flutterSdkPath = { - def properties = new Properties() - file("local.properties").withInputStream { properties.load(it) } - def flutterSdkPath = properties.getProperty("flutter.sdk") - assert flutterSdkPath != null, "flutter.sdk not set in local.properties" - return flutterSdkPath - }() - - includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") - - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} - -plugins { - id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.1.0" apply false - id "org.jetbrains.kotlin.android" version "1.8.22" apply false -} - -include ":app" diff --git a/webview_flutter/step_11/android/settings.gradle.kts b/webview_flutter/step_11/android/settings.gradle.kts new file mode 100644 index 0000000000..a439442c20 --- /dev/null +++ b/webview_flutter/step_11/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.0" apply false + id("org.jetbrains.kotlin.android") version "1.8.22" apply false +} + +include(":app") diff --git a/webview_flutter/step_11/ios/Podfile b/webview_flutter/step_11/ios/Podfile index d97f17e223..e549ee22f3 100644 --- a/webview_flutter/step_11/ios/Podfile +++ b/webview_flutter/step_11/ios/Podfile @@ -29,7 +29,6 @@ flutter_ios_podfile_setup target 'Runner' do use_frameworks! - use_modular_headers! flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) target 'RunnerTests' do diff --git a/webview_flutter/step_11/ios/Runner.xcodeproj/project.pbxproj b/webview_flutter/step_11/ios/Runner.xcodeproj/project.pbxproj index 1fdcd8b9c4..5e19f2c4d1 100644 --- a/webview_flutter/step_11/ios/Runner.xcodeproj/project.pbxproj +++ b/webview_flutter/step_11/ios/Runner.xcodeproj/project.pbxproj @@ -7,15 +7,15 @@ objects = { /* Begin PBXBuildFile section */ + 05272810B72430980143DF90 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CB9FA53391D1A32BDDEA3E87 /* Pods_Runner.framework */; }; 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; - 592CCEDE047ADE7BC089AB41 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 350ED558E29135D9B6DA12A0 /* Pods_RunnerTests.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; + 8A32D95BED860F9AC031A67E /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FEAB59B22DE3C64EC37DFFD5 /* Pods_RunnerTests.framework */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - F6A231591C01867C1A1268AD /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EB0168EEDEA46D37DCEF97FD /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -44,13 +44,13 @@ /* Begin PBXFileReference section */ 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 200C0FB6EC3E67446721343D /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 2977D5E158DFA7D2F27A99BF /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 350ED558E29135D9B6DA12A0 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 3E22E37926EFF42C5471F6F9 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 46517A87257E58848B507D86 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 3B931D9D5BDEF5F8AED640E4 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 3E74CF1EC03F0980AF113239 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 58180B72E22C56C89D565649 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; @@ -61,18 +61,18 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - CFA80CA756DDB3C5B27EB87C /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - DCF5FFDDA11243897B692074 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - E43B580CA757421F14EDB9D7 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - EB0168EEDEA46D37DCEF97FD /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + C044D445D331457C527D3B3D /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + CB9FA53391D1A32BDDEA3E87 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + DC9C88328BEF59130E86C035 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + FEAB59B22DE3C64EC37DFFD5 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 02874EA149F2669FBBBEFA6B /* Frameworks */ = { + 5388680779C9C5F3CE22300B /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 592CCEDE047ADE7BC089AB41 /* Pods_RunnerTests.framework in Frameworks */, + 8A32D95BED860F9AC031A67E /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -80,7 +80,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - F6A231591C01867C1A1268AD /* Pods_Runner.framework in Frameworks */, + 05272810B72430980143DF90 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -113,8 +113,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - E9103E523A78BA47FE7905A7 /* Pods */, - 9E8FC7C3B77A794057B5F5A5 /* Frameworks */, + B723ED16A6C04D4D93C38F5C /* Pods */, + A17C049FCE05B8E29D563C53 /* Frameworks */, ); sourceTree = ""; }; @@ -142,24 +142,24 @@ path = Runner; sourceTree = ""; }; - 9E8FC7C3B77A794057B5F5A5 /* Frameworks */ = { + A17C049FCE05B8E29D563C53 /* Frameworks */ = { isa = PBXGroup; children = ( - EB0168EEDEA46D37DCEF97FD /* Pods_Runner.framework */, - 350ED558E29135D9B6DA12A0 /* Pods_RunnerTests.framework */, + CB9FA53391D1A32BDDEA3E87 /* Pods_Runner.framework */, + FEAB59B22DE3C64EC37DFFD5 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; }; - E9103E523A78BA47FE7905A7 /* Pods */ = { + B723ED16A6C04D4D93C38F5C /* Pods */ = { isa = PBXGroup; children = ( - 3E22E37926EFF42C5471F6F9 /* Pods-Runner.debug.xcconfig */, - 46517A87257E58848B507D86 /* Pods-Runner.release.xcconfig */, - E43B580CA757421F14EDB9D7 /* Pods-Runner.profile.xcconfig */, - 200C0FB6EC3E67446721343D /* Pods-RunnerTests.debug.xcconfig */, - CFA80CA756DDB3C5B27EB87C /* Pods-RunnerTests.release.xcconfig */, - DCF5FFDDA11243897B692074 /* Pods-RunnerTests.profile.xcconfig */, + DC9C88328BEF59130E86C035 /* Pods-Runner.debug.xcconfig */, + 2977D5E158DFA7D2F27A99BF /* Pods-Runner.release.xcconfig */, + 58180B72E22C56C89D565649 /* Pods-Runner.profile.xcconfig */, + C044D445D331457C527D3B3D /* Pods-RunnerTests.debug.xcconfig */, + 3B931D9D5BDEF5F8AED640E4 /* Pods-RunnerTests.release.xcconfig */, + 3E74CF1EC03F0980AF113239 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 7CAAD9ACDE3FCDD0AF1C7888 /* [CP] Check Pods Manifest.lock */, + 8C23ADF02B7F6F79EF53DD46 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 02874EA149F2669FBBBEFA6B /* Frameworks */, + 5388680779C9C5F3CE22300B /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 9999291836084819C4E0C140 /* [CP] Check Pods Manifest.lock */, + EB54B6DE05C1CFD6665DA2F7 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - FBFF1AF5B95EAA422EAE27A3 /* [CP] Embed Pods Frameworks */, + 89521D76C9BA9FCF2E9DF2E9 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -286,7 +286,24 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 7CAAD9ACDE3FCDD0AF1C7888 /* [CP] Check Pods Manifest.lock */ = { + 89521D76C9BA9FCF2E9DF2E9 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; + 8C23ADF02B7F6F79EF53DD46 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -323,7 +340,7 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - 9999291836084819C4E0C140 /* [CP] Check Pods Manifest.lock */ = { + EB54B6DE05C1CFD6665DA2F7 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -345,23 +362,6 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - FBFF1AF5B95EAA422EAE27A3 /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 200C0FB6EC3E67446721343D /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = C044D445D331457C527D3B3D /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = CFA80CA756DDB3C5B27EB87C /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 3B931D9D5BDEF5F8AED640E4 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = DCF5FFDDA11243897B692074 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 3E74CF1EC03F0980AF113239 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/webview_flutter/step_12/android/app/build.gradle b/webview_flutter/step_12/android/app/build.gradle deleted file mode 100644 index 9e345ad06f..0000000000 --- a/webview_flutter/step_12/android/app/build.gradle +++ /dev/null @@ -1,44 +0,0 @@ -plugins { - id "com.android.application" - id "kotlin-android" - // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. - id "dev.flutter.flutter-gradle-plugin" -} - -android { - namespace = "com.example.webview_in_flutter" - compileSdk = flutter.compileSdkVersion - ndkVersion = flutter.ndkVersion - - compileOptions { - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 - } - - kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8 - } - - defaultConfig { - // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). - applicationId = "com.example.webview_in_flutter" - // You can update the following values to match your application needs. - // For more information, see: https://flutter.dev/to/review-gradle-config. - minSdk = 21 - targetSdk = flutter.targetSdkVersion - versionCode = flutter.versionCode - versionName = flutter.versionName - } - - buildTypes { - release { - // TODO: Add your own signing config for the release build. - // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig = signingConfigs.debug - } - } -} - -flutter { - source = "../.." -} diff --git a/webview_flutter/step_12/android/app/build.gradle.kts b/webview_flutter/step_12/android/app/build.gradle.kts new file mode 100644 index 0000000000..561db25cb8 --- /dev/null +++ b/webview_flutter/step_12/android/app/build.gradle.kts @@ -0,0 +1,44 @@ +plugins { + id("com.android.application") + id("kotlin-android") + // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. + id("dev.flutter.flutter-gradle-plugin") +} + +android { + namespace = "com.example.webview_in_flutter" + compileSdk = flutter.compileSdkVersion + ndkVersion = flutter.ndkVersion + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 + } + + kotlinOptions { + jvmTarget = JavaVersion.VERSION_1_8.toString() + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId = "com.example.webview_in_flutter" + // You can update the following values to match your application needs. + // For more information, see: https://flutter.dev/to/review-gradle-config. + minSdk = 21 + targetSdk = flutter.targetSdkVersion + versionCode = flutter.versionCode + versionName = flutter.versionName + } + + buildTypes { + release { + // TODO: Add your own signing config for the release build. + // Signing with the debug keys for now, so `flutter run --release` works. + signingConfig = signingConfigs.getByName("debug") + } + } +} + +flutter { + source = "../.." +} diff --git a/webview_flutter/step_12/android/build.gradle b/webview_flutter/step_12/android/build.gradle deleted file mode 100644 index d2ffbffa4c..0000000000 --- a/webview_flutter/step_12/android/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = "../build" -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(":app") -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/webview_flutter/step_12/android/build.gradle.kts b/webview_flutter/step_12/android/build.gradle.kts new file mode 100644 index 0000000000..89176ef44e --- /dev/null +++ b/webview_flutter/step_12/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/webview_flutter/step_12/android/gradle.properties b/webview_flutter/step_12/android/gradle.properties index 2597170821..f018a61817 100644 --- a/webview_flutter/step_12/android/gradle.properties +++ b/webview_flutter/step_12/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/webview_flutter/step_12/android/gradle/wrapper/gradle-wrapper.properties b/webview_flutter/step_12/android/gradle/wrapper/gradle-wrapper.properties index 7bb2df6ba6..afa1e8eb0a 100644 --- a/webview_flutter/step_12/android/gradle/wrapper/gradle-wrapper.properties +++ b/webview_flutter/step_12/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip diff --git a/webview_flutter/step_12/android/settings.gradle b/webview_flutter/step_12/android/settings.gradle deleted file mode 100644 index b9e43bd376..0000000000 --- a/webview_flutter/step_12/android/settings.gradle +++ /dev/null @@ -1,25 +0,0 @@ -pluginManagement { - def flutterSdkPath = { - def properties = new Properties() - file("local.properties").withInputStream { properties.load(it) } - def flutterSdkPath = properties.getProperty("flutter.sdk") - assert flutterSdkPath != null, "flutter.sdk not set in local.properties" - return flutterSdkPath - }() - - includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") - - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} - -plugins { - id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.1.0" apply false - id "org.jetbrains.kotlin.android" version "1.8.22" apply false -} - -include ":app" diff --git a/webview_flutter/step_12/android/settings.gradle.kts b/webview_flutter/step_12/android/settings.gradle.kts new file mode 100644 index 0000000000..a439442c20 --- /dev/null +++ b/webview_flutter/step_12/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.0" apply false + id("org.jetbrains.kotlin.android") version "1.8.22" apply false +} + +include(":app") diff --git a/webview_flutter/step_12/ios/Podfile b/webview_flutter/step_12/ios/Podfile index d97f17e223..e549ee22f3 100644 --- a/webview_flutter/step_12/ios/Podfile +++ b/webview_flutter/step_12/ios/Podfile @@ -29,7 +29,6 @@ flutter_ios_podfile_setup target 'Runner' do use_frameworks! - use_modular_headers! flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) target 'RunnerTests' do diff --git a/webview_flutter/step_12/ios/Runner.xcodeproj/project.pbxproj b/webview_flutter/step_12/ios/Runner.xcodeproj/project.pbxproj index 1fdcd8b9c4..5e19f2c4d1 100644 --- a/webview_flutter/step_12/ios/Runner.xcodeproj/project.pbxproj +++ b/webview_flutter/step_12/ios/Runner.xcodeproj/project.pbxproj @@ -7,15 +7,15 @@ objects = { /* Begin PBXBuildFile section */ + 05272810B72430980143DF90 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CB9FA53391D1A32BDDEA3E87 /* Pods_Runner.framework */; }; 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; - 592CCEDE047ADE7BC089AB41 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 350ED558E29135D9B6DA12A0 /* Pods_RunnerTests.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; + 8A32D95BED860F9AC031A67E /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FEAB59B22DE3C64EC37DFFD5 /* Pods_RunnerTests.framework */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - F6A231591C01867C1A1268AD /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EB0168EEDEA46D37DCEF97FD /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -44,13 +44,13 @@ /* Begin PBXFileReference section */ 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 200C0FB6EC3E67446721343D /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 2977D5E158DFA7D2F27A99BF /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 350ED558E29135D9B6DA12A0 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 3E22E37926EFF42C5471F6F9 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 46517A87257E58848B507D86 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 3B931D9D5BDEF5F8AED640E4 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 3E74CF1EC03F0980AF113239 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 58180B72E22C56C89D565649 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; @@ -61,18 +61,18 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - CFA80CA756DDB3C5B27EB87C /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - DCF5FFDDA11243897B692074 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - E43B580CA757421F14EDB9D7 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - EB0168EEDEA46D37DCEF97FD /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + C044D445D331457C527D3B3D /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + CB9FA53391D1A32BDDEA3E87 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + DC9C88328BEF59130E86C035 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + FEAB59B22DE3C64EC37DFFD5 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 02874EA149F2669FBBBEFA6B /* Frameworks */ = { + 5388680779C9C5F3CE22300B /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 592CCEDE047ADE7BC089AB41 /* Pods_RunnerTests.framework in Frameworks */, + 8A32D95BED860F9AC031A67E /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -80,7 +80,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - F6A231591C01867C1A1268AD /* Pods_Runner.framework in Frameworks */, + 05272810B72430980143DF90 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -113,8 +113,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - E9103E523A78BA47FE7905A7 /* Pods */, - 9E8FC7C3B77A794057B5F5A5 /* Frameworks */, + B723ED16A6C04D4D93C38F5C /* Pods */, + A17C049FCE05B8E29D563C53 /* Frameworks */, ); sourceTree = ""; }; @@ -142,24 +142,24 @@ path = Runner; sourceTree = ""; }; - 9E8FC7C3B77A794057B5F5A5 /* Frameworks */ = { + A17C049FCE05B8E29D563C53 /* Frameworks */ = { isa = PBXGroup; children = ( - EB0168EEDEA46D37DCEF97FD /* Pods_Runner.framework */, - 350ED558E29135D9B6DA12A0 /* Pods_RunnerTests.framework */, + CB9FA53391D1A32BDDEA3E87 /* Pods_Runner.framework */, + FEAB59B22DE3C64EC37DFFD5 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; }; - E9103E523A78BA47FE7905A7 /* Pods */ = { + B723ED16A6C04D4D93C38F5C /* Pods */ = { isa = PBXGroup; children = ( - 3E22E37926EFF42C5471F6F9 /* Pods-Runner.debug.xcconfig */, - 46517A87257E58848B507D86 /* Pods-Runner.release.xcconfig */, - E43B580CA757421F14EDB9D7 /* Pods-Runner.profile.xcconfig */, - 200C0FB6EC3E67446721343D /* Pods-RunnerTests.debug.xcconfig */, - CFA80CA756DDB3C5B27EB87C /* Pods-RunnerTests.release.xcconfig */, - DCF5FFDDA11243897B692074 /* Pods-RunnerTests.profile.xcconfig */, + DC9C88328BEF59130E86C035 /* Pods-Runner.debug.xcconfig */, + 2977D5E158DFA7D2F27A99BF /* Pods-Runner.release.xcconfig */, + 58180B72E22C56C89D565649 /* Pods-Runner.profile.xcconfig */, + C044D445D331457C527D3B3D /* Pods-RunnerTests.debug.xcconfig */, + 3B931D9D5BDEF5F8AED640E4 /* Pods-RunnerTests.release.xcconfig */, + 3E74CF1EC03F0980AF113239 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 7CAAD9ACDE3FCDD0AF1C7888 /* [CP] Check Pods Manifest.lock */, + 8C23ADF02B7F6F79EF53DD46 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 02874EA149F2669FBBBEFA6B /* Frameworks */, + 5388680779C9C5F3CE22300B /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 9999291836084819C4E0C140 /* [CP] Check Pods Manifest.lock */, + EB54B6DE05C1CFD6665DA2F7 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - FBFF1AF5B95EAA422EAE27A3 /* [CP] Embed Pods Frameworks */, + 89521D76C9BA9FCF2E9DF2E9 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -286,7 +286,24 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 7CAAD9ACDE3FCDD0AF1C7888 /* [CP] Check Pods Manifest.lock */ = { + 89521D76C9BA9FCF2E9DF2E9 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; + 8C23ADF02B7F6F79EF53DD46 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -323,7 +340,7 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - 9999291836084819C4E0C140 /* [CP] Check Pods Manifest.lock */ = { + EB54B6DE05C1CFD6665DA2F7 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -345,23 +362,6 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - FBFF1AF5B95EAA422EAE27A3 /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 200C0FB6EC3E67446721343D /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = C044D445D331457C527D3B3D /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = CFA80CA756DDB3C5B27EB87C /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 3B931D9D5BDEF5F8AED640E4 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = DCF5FFDDA11243897B692074 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 3E74CF1EC03F0980AF113239 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; From 4c1cb6eca60fdbf70fb83c2d685e16e8bec82fe1 Mon Sep 17 00:00:00 2001 From: Brett Morgan Date: Wed, 22 Jan 2025 11:50:06 +1100 Subject: [PATCH 088/108] Update `adaptive_app` --- .../com/example/adaptive_app/MainActivity.kt | 2 +- .../macos/Runner/Configs/AppInfo.xcconfig | 2 +- adaptive_app/step_03/windows/runner/Runner.rc | 2 +- .../com/example/adaptive_app/MainActivity.kt | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 126 ++++++++-------- .../macos/Runner.xcodeproj/project.pbxproj | 90 +++++------ .../macos/Runner/Configs/AppInfo.xcconfig | 2 +- adaptive_app/step_04/pubspec.yaml | 6 +- adaptive_app/step_04/windows/runner/Runner.rc | 2 +- .../com/example/adaptive_app/MainActivity.kt | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 126 ++++++++-------- .../macos/Runner.xcodeproj/project.pbxproj | 90 +++++------ .../macos/Runner/Configs/AppInfo.xcconfig | 2 +- adaptive_app/step_05/pubspec.yaml | 6 +- adaptive_app/step_05/windows/runner/Runner.rc | 2 +- .../com/example/adaptive_app/MainActivity.kt | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 126 ++++++++-------- .../macos/Runner.xcodeproj/project.pbxproj | 90 +++++------ .../macos/Runner/Configs/AppInfo.xcconfig | 2 +- adaptive_app/step_06/pubspec.yaml | 6 +- adaptive_app/step_06/windows/runner/Runner.rc | 2 +- .../step_06/yt_cors_proxy/pubspec.yaml | 2 +- .../com/example/adaptive_app/MainActivity.kt | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 142 +++++++++--------- .../macos/Runner.xcodeproj/project.pbxproj | 110 +++++++------- .../macos/Runner/Configs/AppInfo.xcconfig | 2 +- adaptive_app/step_07/pubspec.yaml | 6 +- adaptive_app/step_07/windows/runner/Runner.rc | 2 +- .../step_07/yt_cors_proxy/pubspec.yaml | 2 +- 29 files changed, 479 insertions(+), 479 deletions(-) diff --git a/adaptive_app/step_03/android/app/src/main/kotlin/com/example/adaptive_app/MainActivity.kt b/adaptive_app/step_03/android/app/src/main/kotlin/com/example/adaptive_app/MainActivity.kt index eff7feefc3..2fd5d1107d 100644 --- a/adaptive_app/step_03/android/app/src/main/kotlin/com/example/adaptive_app/MainActivity.kt +++ b/adaptive_app/step_03/android/app/src/main/kotlin/com/example/adaptive_app/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.adaptive_app import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/adaptive_app/step_03/macos/Runner/Configs/AppInfo.xcconfig b/adaptive_app/step_03/macos/Runner/Configs/AppInfo.xcconfig index c7af076bc5..102f116a18 100644 --- a/adaptive_app/step_03/macos/Runner/Configs/AppInfo.xcconfig +++ b/adaptive_app/step_03/macos/Runner/Configs/AppInfo.xcconfig @@ -11,4 +11,4 @@ PRODUCT_NAME = adaptive_app PRODUCT_BUNDLE_IDENTIFIER = com.example.adaptiveApp // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. diff --git a/adaptive_app/step_03/windows/runner/Runner.rc b/adaptive_app/step_03/windows/runner/Runner.rc index 977fe27e2e..60cce64e27 100644 --- a/adaptive_app/step_03/windows/runner/Runner.rc +++ b/adaptive_app/step_03/windows/runner/Runner.rc @@ -93,7 +93,7 @@ BEGIN VALUE "FileDescription", "adaptive_app" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "InternalName", "adaptive_app" "\0" - VALUE "LegalCopyright", "Copyright (C) 2024 com.example. All rights reserved." "\0" + VALUE "LegalCopyright", "Copyright (C) 2025 com.example. All rights reserved." "\0" VALUE "OriginalFilename", "adaptive_app.exe" "\0" VALUE "ProductName", "adaptive_app" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" diff --git a/adaptive_app/step_04/android/app/src/main/kotlin/com/example/adaptive_app/MainActivity.kt b/adaptive_app/step_04/android/app/src/main/kotlin/com/example/adaptive_app/MainActivity.kt index eff7feefc3..2fd5d1107d 100644 --- a/adaptive_app/step_04/android/app/src/main/kotlin/com/example/adaptive_app/MainActivity.kt +++ b/adaptive_app/step_04/android/app/src/main/kotlin/com/example/adaptive_app/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.adaptive_app import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/adaptive_app/step_04/ios/Runner.xcodeproj/project.pbxproj b/adaptive_app/step_04/ios/Runner.xcodeproj/project.pbxproj index e777adb635..d2eda04b66 100644 --- a/adaptive_app/step_04/ios/Runner.xcodeproj/project.pbxproj +++ b/adaptive_app/step_04/ios/Runner.xcodeproj/project.pbxproj @@ -10,12 +10,12 @@ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; - 52369E9F9C734A4F48FF99ED /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 015D17BCEE401739B9729343 /* Pods_RunnerTests.framework */; }; - 6C125213CBD1E7214BECCE33 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E587FD78267483E354A68BB7 /* Pods_Runner.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; + 94FFE047F9A305E9EE462440 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 360835476802F599551BBE7D /* Pods_Runner.framework */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; + E63C5AAC3E1F33E9F318C064 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 62A3DCCF7E0E04026FE1DD1B /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,37 +42,37 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 015D17BCEE401739B9729343 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 360835476802F599551BBE7D /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 6B9CD15F1DBCCE2092BAE0DB /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 4BED96C1231F9757D959929D /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 62A3DCCF7E0E04026FE1DD1B /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; + 84AFEB5BF2C9F807DB07CEA3 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 8B30579C1095B90E7C7C8BCB /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 8C58E7A72C5E65C45DF39D23 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; - 9744AE1283827981AF4167DC /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - AE08C164719A25F18D6BB273 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - E3BCFAD1E5B1A783BDD3FD42 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - E587FD78267483E354A68BB7 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - F3614C5CD5E4CCAE84824820 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - F5966D91E7A5A03F5357E24C /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + DE125DCA3A9E04717FADFD78 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + EBAA5D0106EA7A909F6831B3 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 7CE66558CA4B23594702E397 /* Frameworks */ = { + 0CD2621A6297217BEF7AA86B /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 52369E9F9C734A4F48FF99ED /* Pods_RunnerTests.framework in Frameworks */, + E63C5AAC3E1F33E9F318C064 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -80,22 +80,13 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 6C125213CBD1E7214BECCE33 /* Pods_Runner.framework in Frameworks */, + 94FFE047F9A305E9EE462440 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 32FA04C14CED6811AD957D64 /* Frameworks */ = { - isa = PBXGroup; - children = ( - E587FD78267483E354A68BB7 /* Pods_Runner.framework */, - 015D17BCEE401739B9729343 /* Pods_RunnerTests.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; 331C8082294A63A400263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -104,20 +95,6 @@ path = RunnerTests; sourceTree = ""; }; - 90046627DA493A555F1D8EC7 /* Pods */ = { - isa = PBXGroup; - children = ( - 9744AE1283827981AF4167DC /* Pods-Runner.debug.xcconfig */, - AE08C164719A25F18D6BB273 /* Pods-Runner.release.xcconfig */, - F3614C5CD5E4CCAE84824820 /* Pods-Runner.profile.xcconfig */, - 6B9CD15F1DBCCE2092BAE0DB /* Pods-RunnerTests.debug.xcconfig */, - E3BCFAD1E5B1A783BDD3FD42 /* Pods-RunnerTests.release.xcconfig */, - F5966D91E7A5A03F5357E24C /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( @@ -136,8 +113,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - 90046627DA493A555F1D8EC7 /* Pods */, - 32FA04C14CED6811AD957D64 /* Frameworks */, + AD9E5E8DCC441F3264B99245 /* Pods */, + B9120C5128440A3394963F5D /* Frameworks */, ); sourceTree = ""; }; @@ -165,6 +142,29 @@ path = Runner; sourceTree = ""; }; + AD9E5E8DCC441F3264B99245 /* Pods */ = { + isa = PBXGroup; + children = ( + 4BED96C1231F9757D959929D /* Pods-Runner.debug.xcconfig */, + EBAA5D0106EA7A909F6831B3 /* Pods-Runner.release.xcconfig */, + 8B30579C1095B90E7C7C8BCB /* Pods-Runner.profile.xcconfig */, + 8C58E7A72C5E65C45DF39D23 /* Pods-RunnerTests.debug.xcconfig */, + 84AFEB5BF2C9F807DB07CEA3 /* Pods-RunnerTests.release.xcconfig */, + DE125DCA3A9E04717FADFD78 /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; + B9120C5128440A3394963F5D /* Frameworks */ = { + isa = PBXGroup; + children = ( + 360835476802F599551BBE7D /* Pods_Runner.framework */, + 62A3DCCF7E0E04026FE1DD1B /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - FF09F730230E5EBD0F7C0E0A /* [CP] Check Pods Manifest.lock */, + 56EA03820D55E05C8CE43A66 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 7CE66558CA4B23594702E397 /* Frameworks */, + 0CD2621A6297217BEF7AA86B /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 651EF3668A33E0258701B703 /* [CP] Check Pods Manifest.lock */, + 8E132CA40FBA12175AD37399 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 3210F9BE53FA8C694DEF5D79 /* [CP] Embed Pods Frameworks */, + 1CF45D5F00D6586E78074238 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -270,7 +270,7 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 3210F9BE53FA8C694DEF5D79 /* [CP] Embed Pods Frameworks */ = { + 1CF45D5F00D6586E78074238 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -303,7 +303,7 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 651EF3668A33E0258701B703 /* [CP] Check Pods Manifest.lock */ = { + 56EA03820D55E05C8CE43A66 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -318,49 +318,49 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { + 8E132CA40FBA12175AD37399 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "Run Script"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - FF09F730230E5EBD0F7C0E0A /* [CP] Check Pods Manifest.lock */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( ); + name = "Run Script"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; /* End PBXShellScriptBuildPhase section */ @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 6B9CD15F1DBCCE2092BAE0DB /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 8C58E7A72C5E65C45DF39D23 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = E3BCFAD1E5B1A783BDD3FD42 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 84AFEB5BF2C9F807DB07CEA3 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = F5966D91E7A5A03F5357E24C /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = DE125DCA3A9E04717FADFD78 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/adaptive_app/step_04/macos/Runner.xcodeproj/project.pbxproj b/adaptive_app/step_04/macos/Runner.xcodeproj/project.pbxproj index d7b81be067..bdc8e1d3d1 100644 --- a/adaptive_app/step_04/macos/Runner.xcodeproj/project.pbxproj +++ b/adaptive_app/step_04/macos/Runner.xcodeproj/project.pbxproj @@ -27,8 +27,8 @@ 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 754C33D7DD538CA4B9245FF1 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3A16363F3C841A671FE533A6 /* Pods_RunnerTests.framework */; }; - 75E6E416924BB4F6ECF02542 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F3AD8B29B155F5745DD25129 /* Pods_Runner.framework */; }; + 8BE38A41215551D491C087B5 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 688A6E33B0B9892D85EE3901 /* Pods_Runner.framework */; }; + F5ED6EC140950E80C2B3E529 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7279677E39115824340B6D55 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,7 +62,8 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 21F5A103A9076EB884AEE6B1 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 088C02CFF1970250ABE17CCA /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 13AE9DA4AE4ED09538F85F92 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -79,15 +80,14 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 398C42BBC4A6ED04B81A2E1C /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 3A16363F3C841A671FE533A6 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 3A3CF2FB38AD4FB159140847 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 734E1C29EA7D6CA1B19932F0 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 61CD80F2C80CF1823627F216 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 688A6E33B0B9892D85EE3901 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 725472D3D1B66F34938A7DC0 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 7279677E39115824340B6D55 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; + 8BF5F216D044A0B0A9AB02D3 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - CF1C693E56126C7F30D9DC27 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - F3AD8B29B155F5745DD25129 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - F60DA437E388151AB7686516 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + A0B5BC87ED76C37B7FBEC654 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 754C33D7DD538CA4B9245FF1 /* Pods_RunnerTests.framework in Frameworks */, + F5ED6EC140950E80C2B3E529 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,7 +103,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 75E6E416924BB4F6ECF02542 /* Pods_Runner.framework in Frameworks */, + 8BE38A41215551D491C087B5 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -137,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 669FF290FA952C5AB5574D89 /* Pods */, + B17D1C551E658EA004F67779 /* Pods */, ); sourceTree = ""; }; @@ -185,15 +185,15 @@ path = Runner; sourceTree = ""; }; - 669FF290FA952C5AB5574D89 /* Pods */ = { + B17D1C551E658EA004F67779 /* Pods */ = { isa = PBXGroup; children = ( - 398C42BBC4A6ED04B81A2E1C /* Pods-Runner.debug.xcconfig */, - F60DA437E388151AB7686516 /* Pods-Runner.release.xcconfig */, - 734E1C29EA7D6CA1B19932F0 /* Pods-Runner.profile.xcconfig */, - 3A3CF2FB38AD4FB159140847 /* Pods-RunnerTests.debug.xcconfig */, - 21F5A103A9076EB884AEE6B1 /* Pods-RunnerTests.release.xcconfig */, - CF1C693E56126C7F30D9DC27 /* Pods-RunnerTests.profile.xcconfig */, + 8BF5F216D044A0B0A9AB02D3 /* Pods-Runner.debug.xcconfig */, + 725472D3D1B66F34938A7DC0 /* Pods-Runner.release.xcconfig */, + 61CD80F2C80CF1823627F216 /* Pods-Runner.profile.xcconfig */, + 13AE9DA4AE4ED09538F85F92 /* Pods-RunnerTests.debug.xcconfig */, + 088C02CFF1970250ABE17CCA /* Pods-RunnerTests.release.xcconfig */, + A0B5BC87ED76C37B7FBEC654 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -202,8 +202,8 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - F3AD8B29B155F5745DD25129 /* Pods_Runner.framework */, - 3A16363F3C841A671FE533A6 /* Pods_RunnerTests.framework */, + 688A6E33B0B9892D85EE3901 /* Pods_Runner.framework */, + 7279677E39115824340B6D55 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - FB50BD472F8A791A5D828B44 /* [CP] Check Pods Manifest.lock */, + AF8130FAEF87D6ECC7DCBC31 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 3AC9718EBA2223B5B4EA92B0 /* [CP] Check Pods Manifest.lock */, + F4DBD0F6635D2F309C9A6E68 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 38663780583486333E80B0C0 /* [CP] Embed Pods Frameworks */, + D4E073A1AFF96A52A6FA002C /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -361,46 +361,46 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 38663780583486333E80B0C0 /* [CP] Embed Pods Frameworks */ = { + AF8130FAEF87D6ECC7DCBC31 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 3AC9718EBA2223B5B4EA92B0 /* [CP] Check Pods Manifest.lock */ = { + D4E073A1AFF96A52A6FA002C /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - FB50BD472F8A791A5D828B44 /* [CP] Check Pods Manifest.lock */ = { + F4DBD0F6635D2F309C9A6E68 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -415,7 +415,7 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 3A3CF2FB38AD4FB159140847 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 13AE9DA4AE4ED09538F85F92 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 21F5A103A9076EB884AEE6B1 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 088C02CFF1970250ABE17CCA /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = CF1C693E56126C7F30D9DC27 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = A0B5BC87ED76C37B7FBEC654 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/adaptive_app/step_04/macos/Runner/Configs/AppInfo.xcconfig b/adaptive_app/step_04/macos/Runner/Configs/AppInfo.xcconfig index c7af076bc5..102f116a18 100644 --- a/adaptive_app/step_04/macos/Runner/Configs/AppInfo.xcconfig +++ b/adaptive_app/step_04/macos/Runner/Configs/AppInfo.xcconfig @@ -11,4 +11,4 @@ PRODUCT_NAME = adaptive_app PRODUCT_BUNDLE_IDENTIFIER = com.example.adaptiveApp // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. diff --git a/adaptive_app/step_04/pubspec.yaml b/adaptive_app/step_04/pubspec.yaml index 884510a6d2..cc8ab42d77 100644 --- a/adaptive_app/step_04/pubspec.yaml +++ b/adaptive_app/step_04/pubspec.yaml @@ -35,11 +35,11 @@ dependencies: # Use with the CupertinoIcons class for iOS style icons. cupertino_icons: ^1.0.8 googleapis: ^13.2.0 - http: ^1.2.2 + http: ^1.3.0 provider: ^6.1.2 url_launcher: ^6.3.1 - flex_color_scheme: ^8.0.2 - go_router: ^14.6.2 + flex_color_scheme: ^8.1.0 + go_router: ^14.6.3 dev_dependencies: flutter_test: diff --git a/adaptive_app/step_04/windows/runner/Runner.rc b/adaptive_app/step_04/windows/runner/Runner.rc index 977fe27e2e..60cce64e27 100644 --- a/adaptive_app/step_04/windows/runner/Runner.rc +++ b/adaptive_app/step_04/windows/runner/Runner.rc @@ -93,7 +93,7 @@ BEGIN VALUE "FileDescription", "adaptive_app" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "InternalName", "adaptive_app" "\0" - VALUE "LegalCopyright", "Copyright (C) 2024 com.example. All rights reserved." "\0" + VALUE "LegalCopyright", "Copyright (C) 2025 com.example. All rights reserved." "\0" VALUE "OriginalFilename", "adaptive_app.exe" "\0" VALUE "ProductName", "adaptive_app" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" diff --git a/adaptive_app/step_05/android/app/src/main/kotlin/com/example/adaptive_app/MainActivity.kt b/adaptive_app/step_05/android/app/src/main/kotlin/com/example/adaptive_app/MainActivity.kt index eff7feefc3..2fd5d1107d 100644 --- a/adaptive_app/step_05/android/app/src/main/kotlin/com/example/adaptive_app/MainActivity.kt +++ b/adaptive_app/step_05/android/app/src/main/kotlin/com/example/adaptive_app/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.adaptive_app import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/adaptive_app/step_05/ios/Runner.xcodeproj/project.pbxproj b/adaptive_app/step_05/ios/Runner.xcodeproj/project.pbxproj index e777adb635..d2eda04b66 100644 --- a/adaptive_app/step_05/ios/Runner.xcodeproj/project.pbxproj +++ b/adaptive_app/step_05/ios/Runner.xcodeproj/project.pbxproj @@ -10,12 +10,12 @@ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; - 52369E9F9C734A4F48FF99ED /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 015D17BCEE401739B9729343 /* Pods_RunnerTests.framework */; }; - 6C125213CBD1E7214BECCE33 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E587FD78267483E354A68BB7 /* Pods_Runner.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; + 94FFE047F9A305E9EE462440 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 360835476802F599551BBE7D /* Pods_Runner.framework */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; + E63C5AAC3E1F33E9F318C064 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 62A3DCCF7E0E04026FE1DD1B /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,37 +42,37 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 015D17BCEE401739B9729343 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 360835476802F599551BBE7D /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 6B9CD15F1DBCCE2092BAE0DB /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 4BED96C1231F9757D959929D /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 62A3DCCF7E0E04026FE1DD1B /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; + 84AFEB5BF2C9F807DB07CEA3 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 8B30579C1095B90E7C7C8BCB /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 8C58E7A72C5E65C45DF39D23 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; - 9744AE1283827981AF4167DC /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - AE08C164719A25F18D6BB273 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - E3BCFAD1E5B1A783BDD3FD42 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - E587FD78267483E354A68BB7 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - F3614C5CD5E4CCAE84824820 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - F5966D91E7A5A03F5357E24C /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + DE125DCA3A9E04717FADFD78 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + EBAA5D0106EA7A909F6831B3 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 7CE66558CA4B23594702E397 /* Frameworks */ = { + 0CD2621A6297217BEF7AA86B /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 52369E9F9C734A4F48FF99ED /* Pods_RunnerTests.framework in Frameworks */, + E63C5AAC3E1F33E9F318C064 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -80,22 +80,13 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 6C125213CBD1E7214BECCE33 /* Pods_Runner.framework in Frameworks */, + 94FFE047F9A305E9EE462440 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 32FA04C14CED6811AD957D64 /* Frameworks */ = { - isa = PBXGroup; - children = ( - E587FD78267483E354A68BB7 /* Pods_Runner.framework */, - 015D17BCEE401739B9729343 /* Pods_RunnerTests.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; 331C8082294A63A400263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -104,20 +95,6 @@ path = RunnerTests; sourceTree = ""; }; - 90046627DA493A555F1D8EC7 /* Pods */ = { - isa = PBXGroup; - children = ( - 9744AE1283827981AF4167DC /* Pods-Runner.debug.xcconfig */, - AE08C164719A25F18D6BB273 /* Pods-Runner.release.xcconfig */, - F3614C5CD5E4CCAE84824820 /* Pods-Runner.profile.xcconfig */, - 6B9CD15F1DBCCE2092BAE0DB /* Pods-RunnerTests.debug.xcconfig */, - E3BCFAD1E5B1A783BDD3FD42 /* Pods-RunnerTests.release.xcconfig */, - F5966D91E7A5A03F5357E24C /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( @@ -136,8 +113,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - 90046627DA493A555F1D8EC7 /* Pods */, - 32FA04C14CED6811AD957D64 /* Frameworks */, + AD9E5E8DCC441F3264B99245 /* Pods */, + B9120C5128440A3394963F5D /* Frameworks */, ); sourceTree = ""; }; @@ -165,6 +142,29 @@ path = Runner; sourceTree = ""; }; + AD9E5E8DCC441F3264B99245 /* Pods */ = { + isa = PBXGroup; + children = ( + 4BED96C1231F9757D959929D /* Pods-Runner.debug.xcconfig */, + EBAA5D0106EA7A909F6831B3 /* Pods-Runner.release.xcconfig */, + 8B30579C1095B90E7C7C8BCB /* Pods-Runner.profile.xcconfig */, + 8C58E7A72C5E65C45DF39D23 /* Pods-RunnerTests.debug.xcconfig */, + 84AFEB5BF2C9F807DB07CEA3 /* Pods-RunnerTests.release.xcconfig */, + DE125DCA3A9E04717FADFD78 /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; + B9120C5128440A3394963F5D /* Frameworks */ = { + isa = PBXGroup; + children = ( + 360835476802F599551BBE7D /* Pods_Runner.framework */, + 62A3DCCF7E0E04026FE1DD1B /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - FF09F730230E5EBD0F7C0E0A /* [CP] Check Pods Manifest.lock */, + 56EA03820D55E05C8CE43A66 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 7CE66558CA4B23594702E397 /* Frameworks */, + 0CD2621A6297217BEF7AA86B /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 651EF3668A33E0258701B703 /* [CP] Check Pods Manifest.lock */, + 8E132CA40FBA12175AD37399 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 3210F9BE53FA8C694DEF5D79 /* [CP] Embed Pods Frameworks */, + 1CF45D5F00D6586E78074238 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -270,7 +270,7 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 3210F9BE53FA8C694DEF5D79 /* [CP] Embed Pods Frameworks */ = { + 1CF45D5F00D6586E78074238 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -303,7 +303,7 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 651EF3668A33E0258701B703 /* [CP] Check Pods Manifest.lock */ = { + 56EA03820D55E05C8CE43A66 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -318,49 +318,49 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { + 8E132CA40FBA12175AD37399 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "Run Script"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - FF09F730230E5EBD0F7C0E0A /* [CP] Check Pods Manifest.lock */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( ); + name = "Run Script"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; /* End PBXShellScriptBuildPhase section */ @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 6B9CD15F1DBCCE2092BAE0DB /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 8C58E7A72C5E65C45DF39D23 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = E3BCFAD1E5B1A783BDD3FD42 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 84AFEB5BF2C9F807DB07CEA3 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = F5966D91E7A5A03F5357E24C /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = DE125DCA3A9E04717FADFD78 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/adaptive_app/step_05/macos/Runner.xcodeproj/project.pbxproj b/adaptive_app/step_05/macos/Runner.xcodeproj/project.pbxproj index d7b81be067..bdc8e1d3d1 100644 --- a/adaptive_app/step_05/macos/Runner.xcodeproj/project.pbxproj +++ b/adaptive_app/step_05/macos/Runner.xcodeproj/project.pbxproj @@ -27,8 +27,8 @@ 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 754C33D7DD538CA4B9245FF1 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3A16363F3C841A671FE533A6 /* Pods_RunnerTests.framework */; }; - 75E6E416924BB4F6ECF02542 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F3AD8B29B155F5745DD25129 /* Pods_Runner.framework */; }; + 8BE38A41215551D491C087B5 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 688A6E33B0B9892D85EE3901 /* Pods_Runner.framework */; }; + F5ED6EC140950E80C2B3E529 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7279677E39115824340B6D55 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,7 +62,8 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 21F5A103A9076EB884AEE6B1 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 088C02CFF1970250ABE17CCA /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 13AE9DA4AE4ED09538F85F92 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -79,15 +80,14 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 398C42BBC4A6ED04B81A2E1C /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 3A16363F3C841A671FE533A6 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 3A3CF2FB38AD4FB159140847 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 734E1C29EA7D6CA1B19932F0 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 61CD80F2C80CF1823627F216 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 688A6E33B0B9892D85EE3901 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 725472D3D1B66F34938A7DC0 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 7279677E39115824340B6D55 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; + 8BF5F216D044A0B0A9AB02D3 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - CF1C693E56126C7F30D9DC27 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - F3AD8B29B155F5745DD25129 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - F60DA437E388151AB7686516 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + A0B5BC87ED76C37B7FBEC654 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 754C33D7DD538CA4B9245FF1 /* Pods_RunnerTests.framework in Frameworks */, + F5ED6EC140950E80C2B3E529 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,7 +103,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 75E6E416924BB4F6ECF02542 /* Pods_Runner.framework in Frameworks */, + 8BE38A41215551D491C087B5 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -137,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 669FF290FA952C5AB5574D89 /* Pods */, + B17D1C551E658EA004F67779 /* Pods */, ); sourceTree = ""; }; @@ -185,15 +185,15 @@ path = Runner; sourceTree = ""; }; - 669FF290FA952C5AB5574D89 /* Pods */ = { + B17D1C551E658EA004F67779 /* Pods */ = { isa = PBXGroup; children = ( - 398C42BBC4A6ED04B81A2E1C /* Pods-Runner.debug.xcconfig */, - F60DA437E388151AB7686516 /* Pods-Runner.release.xcconfig */, - 734E1C29EA7D6CA1B19932F0 /* Pods-Runner.profile.xcconfig */, - 3A3CF2FB38AD4FB159140847 /* Pods-RunnerTests.debug.xcconfig */, - 21F5A103A9076EB884AEE6B1 /* Pods-RunnerTests.release.xcconfig */, - CF1C693E56126C7F30D9DC27 /* Pods-RunnerTests.profile.xcconfig */, + 8BF5F216D044A0B0A9AB02D3 /* Pods-Runner.debug.xcconfig */, + 725472D3D1B66F34938A7DC0 /* Pods-Runner.release.xcconfig */, + 61CD80F2C80CF1823627F216 /* Pods-Runner.profile.xcconfig */, + 13AE9DA4AE4ED09538F85F92 /* Pods-RunnerTests.debug.xcconfig */, + 088C02CFF1970250ABE17CCA /* Pods-RunnerTests.release.xcconfig */, + A0B5BC87ED76C37B7FBEC654 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -202,8 +202,8 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - F3AD8B29B155F5745DD25129 /* Pods_Runner.framework */, - 3A16363F3C841A671FE533A6 /* Pods_RunnerTests.framework */, + 688A6E33B0B9892D85EE3901 /* Pods_Runner.framework */, + 7279677E39115824340B6D55 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - FB50BD472F8A791A5D828B44 /* [CP] Check Pods Manifest.lock */, + AF8130FAEF87D6ECC7DCBC31 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 3AC9718EBA2223B5B4EA92B0 /* [CP] Check Pods Manifest.lock */, + F4DBD0F6635D2F309C9A6E68 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 38663780583486333E80B0C0 /* [CP] Embed Pods Frameworks */, + D4E073A1AFF96A52A6FA002C /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -361,46 +361,46 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 38663780583486333E80B0C0 /* [CP] Embed Pods Frameworks */ = { + AF8130FAEF87D6ECC7DCBC31 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 3AC9718EBA2223B5B4EA92B0 /* [CP] Check Pods Manifest.lock */ = { + D4E073A1AFF96A52A6FA002C /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - FB50BD472F8A791A5D828B44 /* [CP] Check Pods Manifest.lock */ = { + F4DBD0F6635D2F309C9A6E68 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -415,7 +415,7 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 3A3CF2FB38AD4FB159140847 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 13AE9DA4AE4ED09538F85F92 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 21F5A103A9076EB884AEE6B1 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 088C02CFF1970250ABE17CCA /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = CF1C693E56126C7F30D9DC27 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = A0B5BC87ED76C37B7FBEC654 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/adaptive_app/step_05/macos/Runner/Configs/AppInfo.xcconfig b/adaptive_app/step_05/macos/Runner/Configs/AppInfo.xcconfig index c7af076bc5..102f116a18 100644 --- a/adaptive_app/step_05/macos/Runner/Configs/AppInfo.xcconfig +++ b/adaptive_app/step_05/macos/Runner/Configs/AppInfo.xcconfig @@ -11,4 +11,4 @@ PRODUCT_NAME = adaptive_app PRODUCT_BUNDLE_IDENTIFIER = com.example.adaptiveApp // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. diff --git a/adaptive_app/step_05/pubspec.yaml b/adaptive_app/step_05/pubspec.yaml index 4cb174545d..d650169360 100644 --- a/adaptive_app/step_05/pubspec.yaml +++ b/adaptive_app/step_05/pubspec.yaml @@ -35,11 +35,11 @@ dependencies: # Use with the CupertinoIcons class for iOS style icons. cupertino_icons: ^1.0.8 googleapis: ^13.2.0 - http: ^1.2.2 + http: ^1.3.0 provider: ^6.1.2 url_launcher: ^6.3.1 - flex_color_scheme: ^8.0.2 - go_router: ^14.6.2 + flex_color_scheme: ^8.1.0 + go_router: ^14.6.3 split_view: ^3.2.1 dev_dependencies: diff --git a/adaptive_app/step_05/windows/runner/Runner.rc b/adaptive_app/step_05/windows/runner/Runner.rc index 977fe27e2e..60cce64e27 100644 --- a/adaptive_app/step_05/windows/runner/Runner.rc +++ b/adaptive_app/step_05/windows/runner/Runner.rc @@ -93,7 +93,7 @@ BEGIN VALUE "FileDescription", "adaptive_app" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "InternalName", "adaptive_app" "\0" - VALUE "LegalCopyright", "Copyright (C) 2024 com.example. All rights reserved." "\0" + VALUE "LegalCopyright", "Copyright (C) 2025 com.example. All rights reserved." "\0" VALUE "OriginalFilename", "adaptive_app.exe" "\0" VALUE "ProductName", "adaptive_app" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" diff --git a/adaptive_app/step_06/android/app/src/main/kotlin/com/example/adaptive_app/MainActivity.kt b/adaptive_app/step_06/android/app/src/main/kotlin/com/example/adaptive_app/MainActivity.kt index eff7feefc3..2fd5d1107d 100644 --- a/adaptive_app/step_06/android/app/src/main/kotlin/com/example/adaptive_app/MainActivity.kt +++ b/adaptive_app/step_06/android/app/src/main/kotlin/com/example/adaptive_app/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.adaptive_app import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/adaptive_app/step_06/ios/Runner.xcodeproj/project.pbxproj b/adaptive_app/step_06/ios/Runner.xcodeproj/project.pbxproj index e777adb635..d2eda04b66 100644 --- a/adaptive_app/step_06/ios/Runner.xcodeproj/project.pbxproj +++ b/adaptive_app/step_06/ios/Runner.xcodeproj/project.pbxproj @@ -10,12 +10,12 @@ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; - 52369E9F9C734A4F48FF99ED /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 015D17BCEE401739B9729343 /* Pods_RunnerTests.framework */; }; - 6C125213CBD1E7214BECCE33 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E587FD78267483E354A68BB7 /* Pods_Runner.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; + 94FFE047F9A305E9EE462440 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 360835476802F599551BBE7D /* Pods_Runner.framework */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; + E63C5AAC3E1F33E9F318C064 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 62A3DCCF7E0E04026FE1DD1B /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,37 +42,37 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 015D17BCEE401739B9729343 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 360835476802F599551BBE7D /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 6B9CD15F1DBCCE2092BAE0DB /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 4BED96C1231F9757D959929D /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 62A3DCCF7E0E04026FE1DD1B /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; + 84AFEB5BF2C9F807DB07CEA3 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 8B30579C1095B90E7C7C8BCB /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 8C58E7A72C5E65C45DF39D23 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; - 9744AE1283827981AF4167DC /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - AE08C164719A25F18D6BB273 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - E3BCFAD1E5B1A783BDD3FD42 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - E587FD78267483E354A68BB7 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - F3614C5CD5E4CCAE84824820 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - F5966D91E7A5A03F5357E24C /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + DE125DCA3A9E04717FADFD78 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + EBAA5D0106EA7A909F6831B3 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 7CE66558CA4B23594702E397 /* Frameworks */ = { + 0CD2621A6297217BEF7AA86B /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 52369E9F9C734A4F48FF99ED /* Pods_RunnerTests.framework in Frameworks */, + E63C5AAC3E1F33E9F318C064 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -80,22 +80,13 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 6C125213CBD1E7214BECCE33 /* Pods_Runner.framework in Frameworks */, + 94FFE047F9A305E9EE462440 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 32FA04C14CED6811AD957D64 /* Frameworks */ = { - isa = PBXGroup; - children = ( - E587FD78267483E354A68BB7 /* Pods_Runner.framework */, - 015D17BCEE401739B9729343 /* Pods_RunnerTests.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; 331C8082294A63A400263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -104,20 +95,6 @@ path = RunnerTests; sourceTree = ""; }; - 90046627DA493A555F1D8EC7 /* Pods */ = { - isa = PBXGroup; - children = ( - 9744AE1283827981AF4167DC /* Pods-Runner.debug.xcconfig */, - AE08C164719A25F18D6BB273 /* Pods-Runner.release.xcconfig */, - F3614C5CD5E4CCAE84824820 /* Pods-Runner.profile.xcconfig */, - 6B9CD15F1DBCCE2092BAE0DB /* Pods-RunnerTests.debug.xcconfig */, - E3BCFAD1E5B1A783BDD3FD42 /* Pods-RunnerTests.release.xcconfig */, - F5966D91E7A5A03F5357E24C /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( @@ -136,8 +113,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - 90046627DA493A555F1D8EC7 /* Pods */, - 32FA04C14CED6811AD957D64 /* Frameworks */, + AD9E5E8DCC441F3264B99245 /* Pods */, + B9120C5128440A3394963F5D /* Frameworks */, ); sourceTree = ""; }; @@ -165,6 +142,29 @@ path = Runner; sourceTree = ""; }; + AD9E5E8DCC441F3264B99245 /* Pods */ = { + isa = PBXGroup; + children = ( + 4BED96C1231F9757D959929D /* Pods-Runner.debug.xcconfig */, + EBAA5D0106EA7A909F6831B3 /* Pods-Runner.release.xcconfig */, + 8B30579C1095B90E7C7C8BCB /* Pods-Runner.profile.xcconfig */, + 8C58E7A72C5E65C45DF39D23 /* Pods-RunnerTests.debug.xcconfig */, + 84AFEB5BF2C9F807DB07CEA3 /* Pods-RunnerTests.release.xcconfig */, + DE125DCA3A9E04717FADFD78 /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; + B9120C5128440A3394963F5D /* Frameworks */ = { + isa = PBXGroup; + children = ( + 360835476802F599551BBE7D /* Pods_Runner.framework */, + 62A3DCCF7E0E04026FE1DD1B /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - FF09F730230E5EBD0F7C0E0A /* [CP] Check Pods Manifest.lock */, + 56EA03820D55E05C8CE43A66 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 7CE66558CA4B23594702E397 /* Frameworks */, + 0CD2621A6297217BEF7AA86B /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 651EF3668A33E0258701B703 /* [CP] Check Pods Manifest.lock */, + 8E132CA40FBA12175AD37399 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 3210F9BE53FA8C694DEF5D79 /* [CP] Embed Pods Frameworks */, + 1CF45D5F00D6586E78074238 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -270,7 +270,7 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 3210F9BE53FA8C694DEF5D79 /* [CP] Embed Pods Frameworks */ = { + 1CF45D5F00D6586E78074238 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -303,7 +303,7 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 651EF3668A33E0258701B703 /* [CP] Check Pods Manifest.lock */ = { + 56EA03820D55E05C8CE43A66 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -318,49 +318,49 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { + 8E132CA40FBA12175AD37399 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "Run Script"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - FF09F730230E5EBD0F7C0E0A /* [CP] Check Pods Manifest.lock */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( ); + name = "Run Script"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; /* End PBXShellScriptBuildPhase section */ @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 6B9CD15F1DBCCE2092BAE0DB /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 8C58E7A72C5E65C45DF39D23 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = E3BCFAD1E5B1A783BDD3FD42 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 84AFEB5BF2C9F807DB07CEA3 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = F5966D91E7A5A03F5357E24C /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = DE125DCA3A9E04717FADFD78 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/adaptive_app/step_06/macos/Runner.xcodeproj/project.pbxproj b/adaptive_app/step_06/macos/Runner.xcodeproj/project.pbxproj index d7b81be067..bdc8e1d3d1 100644 --- a/adaptive_app/step_06/macos/Runner.xcodeproj/project.pbxproj +++ b/adaptive_app/step_06/macos/Runner.xcodeproj/project.pbxproj @@ -27,8 +27,8 @@ 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 754C33D7DD538CA4B9245FF1 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3A16363F3C841A671FE533A6 /* Pods_RunnerTests.framework */; }; - 75E6E416924BB4F6ECF02542 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F3AD8B29B155F5745DD25129 /* Pods_Runner.framework */; }; + 8BE38A41215551D491C087B5 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 688A6E33B0B9892D85EE3901 /* Pods_Runner.framework */; }; + F5ED6EC140950E80C2B3E529 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7279677E39115824340B6D55 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,7 +62,8 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 21F5A103A9076EB884AEE6B1 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 088C02CFF1970250ABE17CCA /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 13AE9DA4AE4ED09538F85F92 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -79,15 +80,14 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 398C42BBC4A6ED04B81A2E1C /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 3A16363F3C841A671FE533A6 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 3A3CF2FB38AD4FB159140847 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 734E1C29EA7D6CA1B19932F0 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 61CD80F2C80CF1823627F216 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 688A6E33B0B9892D85EE3901 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 725472D3D1B66F34938A7DC0 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 7279677E39115824340B6D55 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; + 8BF5F216D044A0B0A9AB02D3 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - CF1C693E56126C7F30D9DC27 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - F3AD8B29B155F5745DD25129 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - F60DA437E388151AB7686516 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + A0B5BC87ED76C37B7FBEC654 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 754C33D7DD538CA4B9245FF1 /* Pods_RunnerTests.framework in Frameworks */, + F5ED6EC140950E80C2B3E529 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,7 +103,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 75E6E416924BB4F6ECF02542 /* Pods_Runner.framework in Frameworks */, + 8BE38A41215551D491C087B5 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -137,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 669FF290FA952C5AB5574D89 /* Pods */, + B17D1C551E658EA004F67779 /* Pods */, ); sourceTree = ""; }; @@ -185,15 +185,15 @@ path = Runner; sourceTree = ""; }; - 669FF290FA952C5AB5574D89 /* Pods */ = { + B17D1C551E658EA004F67779 /* Pods */ = { isa = PBXGroup; children = ( - 398C42BBC4A6ED04B81A2E1C /* Pods-Runner.debug.xcconfig */, - F60DA437E388151AB7686516 /* Pods-Runner.release.xcconfig */, - 734E1C29EA7D6CA1B19932F0 /* Pods-Runner.profile.xcconfig */, - 3A3CF2FB38AD4FB159140847 /* Pods-RunnerTests.debug.xcconfig */, - 21F5A103A9076EB884AEE6B1 /* Pods-RunnerTests.release.xcconfig */, - CF1C693E56126C7F30D9DC27 /* Pods-RunnerTests.profile.xcconfig */, + 8BF5F216D044A0B0A9AB02D3 /* Pods-Runner.debug.xcconfig */, + 725472D3D1B66F34938A7DC0 /* Pods-Runner.release.xcconfig */, + 61CD80F2C80CF1823627F216 /* Pods-Runner.profile.xcconfig */, + 13AE9DA4AE4ED09538F85F92 /* Pods-RunnerTests.debug.xcconfig */, + 088C02CFF1970250ABE17CCA /* Pods-RunnerTests.release.xcconfig */, + A0B5BC87ED76C37B7FBEC654 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -202,8 +202,8 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - F3AD8B29B155F5745DD25129 /* Pods_Runner.framework */, - 3A16363F3C841A671FE533A6 /* Pods_RunnerTests.framework */, + 688A6E33B0B9892D85EE3901 /* Pods_Runner.framework */, + 7279677E39115824340B6D55 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - FB50BD472F8A791A5D828B44 /* [CP] Check Pods Manifest.lock */, + AF8130FAEF87D6ECC7DCBC31 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 3AC9718EBA2223B5B4EA92B0 /* [CP] Check Pods Manifest.lock */, + F4DBD0F6635D2F309C9A6E68 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 38663780583486333E80B0C0 /* [CP] Embed Pods Frameworks */, + D4E073A1AFF96A52A6FA002C /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -361,46 +361,46 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 38663780583486333E80B0C0 /* [CP] Embed Pods Frameworks */ = { + AF8130FAEF87D6ECC7DCBC31 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 3AC9718EBA2223B5B4EA92B0 /* [CP] Check Pods Manifest.lock */ = { + D4E073A1AFF96A52A6FA002C /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - FB50BD472F8A791A5D828B44 /* [CP] Check Pods Manifest.lock */ = { + F4DBD0F6635D2F309C9A6E68 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -415,7 +415,7 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 3A3CF2FB38AD4FB159140847 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 13AE9DA4AE4ED09538F85F92 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 21F5A103A9076EB884AEE6B1 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 088C02CFF1970250ABE17CCA /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = CF1C693E56126C7F30D9DC27 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = A0B5BC87ED76C37B7FBEC654 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/adaptive_app/step_06/macos/Runner/Configs/AppInfo.xcconfig b/adaptive_app/step_06/macos/Runner/Configs/AppInfo.xcconfig index c7af076bc5..102f116a18 100644 --- a/adaptive_app/step_06/macos/Runner/Configs/AppInfo.xcconfig +++ b/adaptive_app/step_06/macos/Runner/Configs/AppInfo.xcconfig @@ -11,4 +11,4 @@ PRODUCT_NAME = adaptive_app PRODUCT_BUNDLE_IDENTIFIER = com.example.adaptiveApp // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. diff --git a/adaptive_app/step_06/pubspec.yaml b/adaptive_app/step_06/pubspec.yaml index 4cb174545d..d650169360 100644 --- a/adaptive_app/step_06/pubspec.yaml +++ b/adaptive_app/step_06/pubspec.yaml @@ -35,11 +35,11 @@ dependencies: # Use with the CupertinoIcons class for iOS style icons. cupertino_icons: ^1.0.8 googleapis: ^13.2.0 - http: ^1.2.2 + http: ^1.3.0 provider: ^6.1.2 url_launcher: ^6.3.1 - flex_color_scheme: ^8.0.2 - go_router: ^14.6.2 + flex_color_scheme: ^8.1.0 + go_router: ^14.6.3 split_view: ^3.2.1 dev_dependencies: diff --git a/adaptive_app/step_06/windows/runner/Runner.rc b/adaptive_app/step_06/windows/runner/Runner.rc index 977fe27e2e..60cce64e27 100644 --- a/adaptive_app/step_06/windows/runner/Runner.rc +++ b/adaptive_app/step_06/windows/runner/Runner.rc @@ -93,7 +93,7 @@ BEGIN VALUE "FileDescription", "adaptive_app" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "InternalName", "adaptive_app" "\0" - VALUE "LegalCopyright", "Copyright (C) 2024 com.example. All rights reserved." "\0" + VALUE "LegalCopyright", "Copyright (C) 2025 com.example. All rights reserved." "\0" VALUE "OriginalFilename", "adaptive_app.exe" "\0" VALUE "ProductName", "adaptive_app" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" diff --git a/adaptive_app/step_06/yt_cors_proxy/pubspec.yaml b/adaptive_app/step_06/yt_cors_proxy/pubspec.yaml index 4e63106b20..62d859166c 100644 --- a/adaptive_app/step_06/yt_cors_proxy/pubspec.yaml +++ b/adaptive_app/step_06/yt_cors_proxy/pubspec.yaml @@ -7,7 +7,7 @@ environment: dependencies: shelf: ^1.4.0 - http: ^1.2.2 + http: ^1.3.0 shelf_cors_headers: ^0.1.5 dev_dependencies: diff --git a/adaptive_app/step_07/android/app/src/main/kotlin/com/example/adaptive_app/MainActivity.kt b/adaptive_app/step_07/android/app/src/main/kotlin/com/example/adaptive_app/MainActivity.kt index eff7feefc3..2fd5d1107d 100644 --- a/adaptive_app/step_07/android/app/src/main/kotlin/com/example/adaptive_app/MainActivity.kt +++ b/adaptive_app/step_07/android/app/src/main/kotlin/com/example/adaptive_app/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.adaptive_app import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/adaptive_app/step_07/ios/Runner.xcodeproj/project.pbxproj b/adaptive_app/step_07/ios/Runner.xcodeproj/project.pbxproj index 6d93a42230..9e24d5e3a5 100644 --- a/adaptive_app/step_07/ios/Runner.xcodeproj/project.pbxproj +++ b/adaptive_app/step_07/ios/Runner.xcodeproj/project.pbxproj @@ -10,12 +10,12 @@ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; - 52369E9F9C734A4F48FF99ED /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 015D17BCEE401739B9729343 /* Pods_RunnerTests.framework */; }; - 6C125213CBD1E7214BECCE33 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E587FD78267483E354A68BB7 /* Pods_Runner.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; + 94FFE047F9A305E9EE462440 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 360835476802F599551BBE7D /* Pods_Runner.framework */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; + E63C5AAC3E1F33E9F318C064 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 62A3DCCF7E0E04026FE1DD1B /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,37 +42,37 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 015D17BCEE401739B9729343 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 360835476802F599551BBE7D /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 6B9CD15F1DBCCE2092BAE0DB /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 4BED96C1231F9757D959929D /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 62A3DCCF7E0E04026FE1DD1B /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; + 84AFEB5BF2C9F807DB07CEA3 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 8B30579C1095B90E7C7C8BCB /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 8C58E7A72C5E65C45DF39D23 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; - 9744AE1283827981AF4167DC /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - AE08C164719A25F18D6BB273 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - E3BCFAD1E5B1A783BDD3FD42 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - E587FD78267483E354A68BB7 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - F3614C5CD5E4CCAE84824820 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - F5966D91E7A5A03F5357E24C /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + DE125DCA3A9E04717FADFD78 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + EBAA5D0106EA7A909F6831B3 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 7CE66558CA4B23594702E397 /* Frameworks */ = { + 0CD2621A6297217BEF7AA86B /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 52369E9F9C734A4F48FF99ED /* Pods_RunnerTests.framework in Frameworks */, + E63C5AAC3E1F33E9F318C064 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -80,22 +80,13 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 6C125213CBD1E7214BECCE33 /* Pods_Runner.framework in Frameworks */, + 94FFE047F9A305E9EE462440 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 32FA04C14CED6811AD957D64 /* Frameworks */ = { - isa = PBXGroup; - children = ( - E587FD78267483E354A68BB7 /* Pods_Runner.framework */, - 015D17BCEE401739B9729343 /* Pods_RunnerTests.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; 331C8082294A63A400263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -104,20 +95,6 @@ path = RunnerTests; sourceTree = ""; }; - 90046627DA493A555F1D8EC7 /* Pods */ = { - isa = PBXGroup; - children = ( - 9744AE1283827981AF4167DC /* Pods-Runner.debug.xcconfig */, - AE08C164719A25F18D6BB273 /* Pods-Runner.release.xcconfig */, - F3614C5CD5E4CCAE84824820 /* Pods-Runner.profile.xcconfig */, - 6B9CD15F1DBCCE2092BAE0DB /* Pods-RunnerTests.debug.xcconfig */, - E3BCFAD1E5B1A783BDD3FD42 /* Pods-RunnerTests.release.xcconfig */, - F5966D91E7A5A03F5357E24C /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( @@ -136,8 +113,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - 90046627DA493A555F1D8EC7 /* Pods */, - 32FA04C14CED6811AD957D64 /* Frameworks */, + AD9E5E8DCC441F3264B99245 /* Pods */, + B9120C5128440A3394963F5D /* Frameworks */, ); sourceTree = ""; }; @@ -165,6 +142,29 @@ path = Runner; sourceTree = ""; }; + AD9E5E8DCC441F3264B99245 /* Pods */ = { + isa = PBXGroup; + children = ( + 4BED96C1231F9757D959929D /* Pods-Runner.debug.xcconfig */, + EBAA5D0106EA7A909F6831B3 /* Pods-Runner.release.xcconfig */, + 8B30579C1095B90E7C7C8BCB /* Pods-Runner.profile.xcconfig */, + 8C58E7A72C5E65C45DF39D23 /* Pods-RunnerTests.debug.xcconfig */, + 84AFEB5BF2C9F807DB07CEA3 /* Pods-RunnerTests.release.xcconfig */, + DE125DCA3A9E04717FADFD78 /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; + B9120C5128440A3394963F5D /* Frameworks */ = { + isa = PBXGroup; + children = ( + 360835476802F599551BBE7D /* Pods_Runner.framework */, + 62A3DCCF7E0E04026FE1DD1B /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - FF09F730230E5EBD0F7C0E0A /* [CP] Check Pods Manifest.lock */, + 56EA03820D55E05C8CE43A66 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 7CE66558CA4B23594702E397 /* Frameworks */, + 0CD2621A6297217BEF7AA86B /* Frameworks */, ); buildRules = ( ); @@ -191,15 +191,15 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 651EF3668A33E0258701B703 /* [CP] Check Pods Manifest.lock */, + 8E132CA40FBA12175AD37399 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 3210F9BE53FA8C694DEF5D79 /* [CP] Embed Pods Frameworks */, - E5DF417553BA5DA1AE6B12E3 /* [CP] Copy Pods Resources */, + 1CF45D5F00D6586E78074238 /* [CP] Embed Pods Frameworks */, + DB0B08950BCDC9B503D30629 /* [CP] Copy Pods Resources */, ); buildRules = ( ); @@ -271,7 +271,7 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 3210F9BE53FA8C694DEF5D79 /* [CP] Embed Pods Frameworks */ = { + 1CF45D5F00D6586E78074238 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -304,7 +304,7 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 651EF3668A33E0258701B703 /* [CP] Check Pods Manifest.lock */ = { + 56EA03820D55E05C8CE43A66 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -319,65 +319,65 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { + 8E132CA40FBA12175AD37399 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "Run Script"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - E5DF417553BA5DA1AE6B12E3 /* [CP] Copy Pods Resources */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-input-files.xcfilelist", + inputPaths = ( ); - name = "[CP] Copy Pods Resources"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-output-files.xcfilelist", + name = "Run Script"; + outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - FF09F730230E5EBD0F7C0E0A /* [CP] Check Pods Manifest.lock */ = { + DB0B08950BCDC9B503D30629 /* [CP] Copy Pods Resources */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; + name = "[CP] Copy Pods Resources"; outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n"; showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -505,7 +505,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 6B9CD15F1DBCCE2092BAE0DB /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 8C58E7A72C5E65C45DF39D23 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -523,7 +523,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = E3BCFAD1E5B1A783BDD3FD42 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 84AFEB5BF2C9F807DB07CEA3 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -539,7 +539,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = F5966D91E7A5A03F5357E24C /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = DE125DCA3A9E04717FADFD78 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/adaptive_app/step_07/macos/Runner.xcodeproj/project.pbxproj b/adaptive_app/step_07/macos/Runner.xcodeproj/project.pbxproj index 4071fb371b..bf967f7800 100644 --- a/adaptive_app/step_07/macos/Runner.xcodeproj/project.pbxproj +++ b/adaptive_app/step_07/macos/Runner.xcodeproj/project.pbxproj @@ -27,8 +27,8 @@ 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 754C33D7DD538CA4B9245FF1 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3A16363F3C841A671FE533A6 /* Pods_RunnerTests.framework */; }; - 75E6E416924BB4F6ECF02542 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F3AD8B29B155F5745DD25129 /* Pods_Runner.framework */; }; + 8BE38A41215551D491C087B5 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 688A6E33B0B9892D85EE3901 /* Pods_Runner.framework */; }; + F5ED6EC140950E80C2B3E529 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7279677E39115824340B6D55 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,7 +62,8 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 21F5A103A9076EB884AEE6B1 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 088C02CFF1970250ABE17CCA /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 13AE9DA4AE4ED09538F85F92 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -79,15 +80,14 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 398C42BBC4A6ED04B81A2E1C /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 3A16363F3C841A671FE533A6 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 3A3CF2FB38AD4FB159140847 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 734E1C29EA7D6CA1B19932F0 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 61CD80F2C80CF1823627F216 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 688A6E33B0B9892D85EE3901 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 725472D3D1B66F34938A7DC0 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 7279677E39115824340B6D55 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; + 8BF5F216D044A0B0A9AB02D3 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - CF1C693E56126C7F30D9DC27 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - F3AD8B29B155F5745DD25129 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - F60DA437E388151AB7686516 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + A0B5BC87ED76C37B7FBEC654 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 754C33D7DD538CA4B9245FF1 /* Pods_RunnerTests.framework in Frameworks */, + F5ED6EC140950E80C2B3E529 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,7 +103,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 75E6E416924BB4F6ECF02542 /* Pods_Runner.framework in Frameworks */, + 8BE38A41215551D491C087B5 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -137,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 669FF290FA952C5AB5574D89 /* Pods */, + B17D1C551E658EA004F67779 /* Pods */, ); sourceTree = ""; }; @@ -185,15 +185,15 @@ path = Runner; sourceTree = ""; }; - 669FF290FA952C5AB5574D89 /* Pods */ = { + B17D1C551E658EA004F67779 /* Pods */ = { isa = PBXGroup; children = ( - 398C42BBC4A6ED04B81A2E1C /* Pods-Runner.debug.xcconfig */, - F60DA437E388151AB7686516 /* Pods-Runner.release.xcconfig */, - 734E1C29EA7D6CA1B19932F0 /* Pods-Runner.profile.xcconfig */, - 3A3CF2FB38AD4FB159140847 /* Pods-RunnerTests.debug.xcconfig */, - 21F5A103A9076EB884AEE6B1 /* Pods-RunnerTests.release.xcconfig */, - CF1C693E56126C7F30D9DC27 /* Pods-RunnerTests.profile.xcconfig */, + 8BF5F216D044A0B0A9AB02D3 /* Pods-Runner.debug.xcconfig */, + 725472D3D1B66F34938A7DC0 /* Pods-Runner.release.xcconfig */, + 61CD80F2C80CF1823627F216 /* Pods-Runner.profile.xcconfig */, + 13AE9DA4AE4ED09538F85F92 /* Pods-RunnerTests.debug.xcconfig */, + 088C02CFF1970250ABE17CCA /* Pods-RunnerTests.release.xcconfig */, + A0B5BC87ED76C37B7FBEC654 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -202,8 +202,8 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - F3AD8B29B155F5745DD25129 /* Pods_Runner.framework */, - 3A16363F3C841A671FE533A6 /* Pods_RunnerTests.framework */, + 688A6E33B0B9892D85EE3901 /* Pods_Runner.framework */, + 7279677E39115824340B6D55 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - FB50BD472F8A791A5D828B44 /* [CP] Check Pods Manifest.lock */, + AF8130FAEF87D6ECC7DCBC31 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,14 +234,14 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 3AC9718EBA2223B5B4EA92B0 /* [CP] Check Pods Manifest.lock */, + F4DBD0F6635D2F309C9A6E68 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 38663780583486333E80B0C0 /* [CP] Embed Pods Frameworks */, - B4FF5F25B689D8638AC8B8F2 /* [CP] Copy Pods Resources */, + D4E073A1AFF96A52A6FA002C /* [CP] Embed Pods Frameworks */, + 30B7B7C019B287623EF424BB /* [CP] Copy Pods Resources */, ); buildRules = ( ); @@ -324,6 +324,23 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ + 30B7B7C019B287623EF424BB /* [CP] Copy Pods Resources */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Copy Pods Resources"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n"; + showEnvVarsInLog = 0; + }; 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -362,24 +379,7 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 38663780583486333E80B0C0 /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; - 3AC9718EBA2223B5B4EA92B0 /* [CP] Check Pods Manifest.lock */ = { + AF8130FAEF87D6ECC7DCBC31 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -394,31 +394,31 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - B4FF5F25B689D8638AC8B8F2 /* [CP] Copy Pods Resources */ = { + D4E073A1AFF96A52A6FA002C /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-input-files.xcfilelist", + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Copy Pods Resources"; + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-output-files.xcfilelist", + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - FB50BD472F8A791A5D828B44 /* [CP] Check Pods Manifest.lock */ = { + F4DBD0F6635D2F309C9A6E68 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -433,7 +433,7 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -491,7 +491,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 3A3CF2FB38AD4FB159140847 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 13AE9DA4AE4ED09538F85F92 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -506,7 +506,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 21F5A103A9076EB884AEE6B1 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 088C02CFF1970250ABE17CCA /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -521,7 +521,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = CF1C693E56126C7F30D9DC27 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = A0B5BC87ED76C37B7FBEC654 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/adaptive_app/step_07/macos/Runner/Configs/AppInfo.xcconfig b/adaptive_app/step_07/macos/Runner/Configs/AppInfo.xcconfig index c7af076bc5..102f116a18 100644 --- a/adaptive_app/step_07/macos/Runner/Configs/AppInfo.xcconfig +++ b/adaptive_app/step_07/macos/Runner/Configs/AppInfo.xcconfig @@ -11,4 +11,4 @@ PRODUCT_NAME = adaptive_app PRODUCT_BUNDLE_IDENTIFIER = com.example.adaptiveApp // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. diff --git a/adaptive_app/step_07/pubspec.yaml b/adaptive_app/step_07/pubspec.yaml index e7e8ee7f9f..786f7e8e14 100644 --- a/adaptive_app/step_07/pubspec.yaml +++ b/adaptive_app/step_07/pubspec.yaml @@ -37,13 +37,13 @@ dependencies: googleapis: ^13.2.0 provider: ^6.1.2 url_launcher: ^6.3.1 - flex_color_scheme: ^8.0.2 - go_router: ^14.6.2 + flex_color_scheme: ^8.1.0 + go_router: ^14.6.3 split_view: ^3.2.1 googleapis_auth: ^1.6.0 google_sign_in: ^6.2.2 extension_google_sign_in_as_googleapis_auth: ^2.0.12 - http: ^1.2.2 + http: ^1.3.0 dev_dependencies: flutter_test: diff --git a/adaptive_app/step_07/windows/runner/Runner.rc b/adaptive_app/step_07/windows/runner/Runner.rc index 977fe27e2e..60cce64e27 100644 --- a/adaptive_app/step_07/windows/runner/Runner.rc +++ b/adaptive_app/step_07/windows/runner/Runner.rc @@ -93,7 +93,7 @@ BEGIN VALUE "FileDescription", "adaptive_app" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "InternalName", "adaptive_app" "\0" - VALUE "LegalCopyright", "Copyright (C) 2024 com.example. All rights reserved." "\0" + VALUE "LegalCopyright", "Copyright (C) 2025 com.example. All rights reserved." "\0" VALUE "OriginalFilename", "adaptive_app.exe" "\0" VALUE "ProductName", "adaptive_app" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" diff --git a/adaptive_app/step_07/yt_cors_proxy/pubspec.yaml b/adaptive_app/step_07/yt_cors_proxy/pubspec.yaml index 4e63106b20..62d859166c 100644 --- a/adaptive_app/step_07/yt_cors_proxy/pubspec.yaml +++ b/adaptive_app/step_07/yt_cors_proxy/pubspec.yaml @@ -7,7 +7,7 @@ environment: dependencies: shelf: ^1.4.0 - http: ^1.2.2 + http: ^1.3.0 shelf_cors_headers: ^0.1.5 dev_dependencies: From 45c3c1cbf5200507605181a2c56f4ec1812f239b Mon Sep 17 00:00:00 2001 From: Brett Morgan Date: Wed, 22 Jan 2025 11:52:46 +1100 Subject: [PATCH 089/108] Update `animated-responsive-layout` --- .../com/example/animated_responsive_layout/MainActivity.kt | 2 +- .../step_03/macos/Runner/Configs/AppInfo.xcconfig | 2 +- animated-responsive-layout/step_03/windows/runner/Runner.rc | 2 +- .../com/example/animated_responsive_layout/MainActivity.kt | 2 +- .../step_04/macos/Runner/Configs/AppInfo.xcconfig | 2 +- animated-responsive-layout/step_04/windows/runner/Runner.rc | 2 +- .../com/example/animated_responsive_layout/MainActivity.kt | 2 +- .../step_05/macos/Runner/Configs/AppInfo.xcconfig | 2 +- animated-responsive-layout/step_05/windows/runner/Runner.rc | 2 +- .../com/example/animated_responsive_layout/MainActivity.kt | 2 +- .../step_06/macos/Runner/Configs/AppInfo.xcconfig | 2 +- animated-responsive-layout/step_06/windows/runner/Runner.rc | 2 +- .../com/example/animated_responsive_layout/MainActivity.kt | 2 +- .../step_07/macos/Runner/Configs/AppInfo.xcconfig | 2 +- animated-responsive-layout/step_07/windows/runner/Runner.rc | 2 +- .../com/example/animated_responsive_layout/MainActivity.kt | 2 +- .../step_08/macos/Runner/Configs/AppInfo.xcconfig | 2 +- animated-responsive-layout/step_08/windows/runner/Runner.rc | 2 +- 18 files changed, 18 insertions(+), 18 deletions(-) diff --git a/animated-responsive-layout/step_03/android/app/src/main/kotlin/com/example/animated_responsive_layout/MainActivity.kt b/animated-responsive-layout/step_03/android/app/src/main/kotlin/com/example/animated_responsive_layout/MainActivity.kt index bc998e4d9d..90b88210c3 100644 --- a/animated-responsive-layout/step_03/android/app/src/main/kotlin/com/example/animated_responsive_layout/MainActivity.kt +++ b/animated-responsive-layout/step_03/android/app/src/main/kotlin/com/example/animated_responsive_layout/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.animated_responsive_layout import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/animated-responsive-layout/step_03/macos/Runner/Configs/AppInfo.xcconfig b/animated-responsive-layout/step_03/macos/Runner/Configs/AppInfo.xcconfig index f349999357..9ced951181 100644 --- a/animated-responsive-layout/step_03/macos/Runner/Configs/AppInfo.xcconfig +++ b/animated-responsive-layout/step_03/macos/Runner/Configs/AppInfo.xcconfig @@ -11,4 +11,4 @@ PRODUCT_NAME = animated_responsive_layout PRODUCT_BUNDLE_IDENTIFIER = com.example.animatedResponsiveLayout // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. diff --git a/animated-responsive-layout/step_03/windows/runner/Runner.rc b/animated-responsive-layout/step_03/windows/runner/Runner.rc index a9ab3c263a..92dcfa2f5e 100644 --- a/animated-responsive-layout/step_03/windows/runner/Runner.rc +++ b/animated-responsive-layout/step_03/windows/runner/Runner.rc @@ -93,7 +93,7 @@ BEGIN VALUE "FileDescription", "animated_responsive_layout" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "InternalName", "animated_responsive_layout" "\0" - VALUE "LegalCopyright", "Copyright (C) 2024 com.example. All rights reserved." "\0" + VALUE "LegalCopyright", "Copyright (C) 2025 com.example. All rights reserved." "\0" VALUE "OriginalFilename", "animated_responsive_layout.exe" "\0" VALUE "ProductName", "animated_responsive_layout" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" diff --git a/animated-responsive-layout/step_04/android/app/src/main/kotlin/com/example/animated_responsive_layout/MainActivity.kt b/animated-responsive-layout/step_04/android/app/src/main/kotlin/com/example/animated_responsive_layout/MainActivity.kt index bc998e4d9d..90b88210c3 100644 --- a/animated-responsive-layout/step_04/android/app/src/main/kotlin/com/example/animated_responsive_layout/MainActivity.kt +++ b/animated-responsive-layout/step_04/android/app/src/main/kotlin/com/example/animated_responsive_layout/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.animated_responsive_layout import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/animated-responsive-layout/step_04/macos/Runner/Configs/AppInfo.xcconfig b/animated-responsive-layout/step_04/macos/Runner/Configs/AppInfo.xcconfig index f349999357..9ced951181 100644 --- a/animated-responsive-layout/step_04/macos/Runner/Configs/AppInfo.xcconfig +++ b/animated-responsive-layout/step_04/macos/Runner/Configs/AppInfo.xcconfig @@ -11,4 +11,4 @@ PRODUCT_NAME = animated_responsive_layout PRODUCT_BUNDLE_IDENTIFIER = com.example.animatedResponsiveLayout // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. diff --git a/animated-responsive-layout/step_04/windows/runner/Runner.rc b/animated-responsive-layout/step_04/windows/runner/Runner.rc index a9ab3c263a..92dcfa2f5e 100644 --- a/animated-responsive-layout/step_04/windows/runner/Runner.rc +++ b/animated-responsive-layout/step_04/windows/runner/Runner.rc @@ -93,7 +93,7 @@ BEGIN VALUE "FileDescription", "animated_responsive_layout" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "InternalName", "animated_responsive_layout" "\0" - VALUE "LegalCopyright", "Copyright (C) 2024 com.example. All rights reserved." "\0" + VALUE "LegalCopyright", "Copyright (C) 2025 com.example. All rights reserved." "\0" VALUE "OriginalFilename", "animated_responsive_layout.exe" "\0" VALUE "ProductName", "animated_responsive_layout" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" diff --git a/animated-responsive-layout/step_05/android/app/src/main/kotlin/com/example/animated_responsive_layout/MainActivity.kt b/animated-responsive-layout/step_05/android/app/src/main/kotlin/com/example/animated_responsive_layout/MainActivity.kt index bc998e4d9d..90b88210c3 100644 --- a/animated-responsive-layout/step_05/android/app/src/main/kotlin/com/example/animated_responsive_layout/MainActivity.kt +++ b/animated-responsive-layout/step_05/android/app/src/main/kotlin/com/example/animated_responsive_layout/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.animated_responsive_layout import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/animated-responsive-layout/step_05/macos/Runner/Configs/AppInfo.xcconfig b/animated-responsive-layout/step_05/macos/Runner/Configs/AppInfo.xcconfig index f349999357..9ced951181 100644 --- a/animated-responsive-layout/step_05/macos/Runner/Configs/AppInfo.xcconfig +++ b/animated-responsive-layout/step_05/macos/Runner/Configs/AppInfo.xcconfig @@ -11,4 +11,4 @@ PRODUCT_NAME = animated_responsive_layout PRODUCT_BUNDLE_IDENTIFIER = com.example.animatedResponsiveLayout // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. diff --git a/animated-responsive-layout/step_05/windows/runner/Runner.rc b/animated-responsive-layout/step_05/windows/runner/Runner.rc index a9ab3c263a..92dcfa2f5e 100644 --- a/animated-responsive-layout/step_05/windows/runner/Runner.rc +++ b/animated-responsive-layout/step_05/windows/runner/Runner.rc @@ -93,7 +93,7 @@ BEGIN VALUE "FileDescription", "animated_responsive_layout" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "InternalName", "animated_responsive_layout" "\0" - VALUE "LegalCopyright", "Copyright (C) 2024 com.example. All rights reserved." "\0" + VALUE "LegalCopyright", "Copyright (C) 2025 com.example. All rights reserved." "\0" VALUE "OriginalFilename", "animated_responsive_layout.exe" "\0" VALUE "ProductName", "animated_responsive_layout" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" diff --git a/animated-responsive-layout/step_06/android/app/src/main/kotlin/com/example/animated_responsive_layout/MainActivity.kt b/animated-responsive-layout/step_06/android/app/src/main/kotlin/com/example/animated_responsive_layout/MainActivity.kt index bc998e4d9d..90b88210c3 100644 --- a/animated-responsive-layout/step_06/android/app/src/main/kotlin/com/example/animated_responsive_layout/MainActivity.kt +++ b/animated-responsive-layout/step_06/android/app/src/main/kotlin/com/example/animated_responsive_layout/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.animated_responsive_layout import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/animated-responsive-layout/step_06/macos/Runner/Configs/AppInfo.xcconfig b/animated-responsive-layout/step_06/macos/Runner/Configs/AppInfo.xcconfig index f349999357..9ced951181 100644 --- a/animated-responsive-layout/step_06/macos/Runner/Configs/AppInfo.xcconfig +++ b/animated-responsive-layout/step_06/macos/Runner/Configs/AppInfo.xcconfig @@ -11,4 +11,4 @@ PRODUCT_NAME = animated_responsive_layout PRODUCT_BUNDLE_IDENTIFIER = com.example.animatedResponsiveLayout // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. diff --git a/animated-responsive-layout/step_06/windows/runner/Runner.rc b/animated-responsive-layout/step_06/windows/runner/Runner.rc index a9ab3c263a..92dcfa2f5e 100644 --- a/animated-responsive-layout/step_06/windows/runner/Runner.rc +++ b/animated-responsive-layout/step_06/windows/runner/Runner.rc @@ -93,7 +93,7 @@ BEGIN VALUE "FileDescription", "animated_responsive_layout" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "InternalName", "animated_responsive_layout" "\0" - VALUE "LegalCopyright", "Copyright (C) 2024 com.example. All rights reserved." "\0" + VALUE "LegalCopyright", "Copyright (C) 2025 com.example. All rights reserved." "\0" VALUE "OriginalFilename", "animated_responsive_layout.exe" "\0" VALUE "ProductName", "animated_responsive_layout" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" diff --git a/animated-responsive-layout/step_07/android/app/src/main/kotlin/com/example/animated_responsive_layout/MainActivity.kt b/animated-responsive-layout/step_07/android/app/src/main/kotlin/com/example/animated_responsive_layout/MainActivity.kt index bc998e4d9d..90b88210c3 100644 --- a/animated-responsive-layout/step_07/android/app/src/main/kotlin/com/example/animated_responsive_layout/MainActivity.kt +++ b/animated-responsive-layout/step_07/android/app/src/main/kotlin/com/example/animated_responsive_layout/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.animated_responsive_layout import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/animated-responsive-layout/step_07/macos/Runner/Configs/AppInfo.xcconfig b/animated-responsive-layout/step_07/macos/Runner/Configs/AppInfo.xcconfig index f349999357..9ced951181 100644 --- a/animated-responsive-layout/step_07/macos/Runner/Configs/AppInfo.xcconfig +++ b/animated-responsive-layout/step_07/macos/Runner/Configs/AppInfo.xcconfig @@ -11,4 +11,4 @@ PRODUCT_NAME = animated_responsive_layout PRODUCT_BUNDLE_IDENTIFIER = com.example.animatedResponsiveLayout // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. diff --git a/animated-responsive-layout/step_07/windows/runner/Runner.rc b/animated-responsive-layout/step_07/windows/runner/Runner.rc index a9ab3c263a..92dcfa2f5e 100644 --- a/animated-responsive-layout/step_07/windows/runner/Runner.rc +++ b/animated-responsive-layout/step_07/windows/runner/Runner.rc @@ -93,7 +93,7 @@ BEGIN VALUE "FileDescription", "animated_responsive_layout" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "InternalName", "animated_responsive_layout" "\0" - VALUE "LegalCopyright", "Copyright (C) 2024 com.example. All rights reserved." "\0" + VALUE "LegalCopyright", "Copyright (C) 2025 com.example. All rights reserved." "\0" VALUE "OriginalFilename", "animated_responsive_layout.exe" "\0" VALUE "ProductName", "animated_responsive_layout" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" diff --git a/animated-responsive-layout/step_08/android/app/src/main/kotlin/com/example/animated_responsive_layout/MainActivity.kt b/animated-responsive-layout/step_08/android/app/src/main/kotlin/com/example/animated_responsive_layout/MainActivity.kt index bc998e4d9d..90b88210c3 100644 --- a/animated-responsive-layout/step_08/android/app/src/main/kotlin/com/example/animated_responsive_layout/MainActivity.kt +++ b/animated-responsive-layout/step_08/android/app/src/main/kotlin/com/example/animated_responsive_layout/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.animated_responsive_layout import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/animated-responsive-layout/step_08/macos/Runner/Configs/AppInfo.xcconfig b/animated-responsive-layout/step_08/macos/Runner/Configs/AppInfo.xcconfig index f349999357..9ced951181 100644 --- a/animated-responsive-layout/step_08/macos/Runner/Configs/AppInfo.xcconfig +++ b/animated-responsive-layout/step_08/macos/Runner/Configs/AppInfo.xcconfig @@ -11,4 +11,4 @@ PRODUCT_NAME = animated_responsive_layout PRODUCT_BUNDLE_IDENTIFIER = com.example.animatedResponsiveLayout // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. diff --git a/animated-responsive-layout/step_08/windows/runner/Runner.rc b/animated-responsive-layout/step_08/windows/runner/Runner.rc index a9ab3c263a..92dcfa2f5e 100644 --- a/animated-responsive-layout/step_08/windows/runner/Runner.rc +++ b/animated-responsive-layout/step_08/windows/runner/Runner.rc @@ -93,7 +93,7 @@ BEGIN VALUE "FileDescription", "animated_responsive_layout" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "InternalName", "animated_responsive_layout" "\0" - VALUE "LegalCopyright", "Copyright (C) 2024 com.example. All rights reserved." "\0" + VALUE "LegalCopyright", "Copyright (C) 2025 com.example. All rights reserved." "\0" VALUE "OriginalFilename", "animated_responsive_layout.exe" "\0" VALUE "ProductName", "animated_responsive_layout" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" From cc95f40fed49f97a416e8773e09cdf4c130356b4 Mon Sep 17 00:00:00 2001 From: Brett Morgan Date: Wed, 22 Jan 2025 11:57:16 +1100 Subject: [PATCH 090/108] Update `animations` --- .../kotlin/com/example/quiz/MainActivity.kt | 2 +- .../macos/Runner/Configs/AppInfo.xcconfig | 2 +- animations/step_01/windows/runner/Runner.rc | 2 +- .../step_02/linux/runner/CMakeLists.txt | 26 ---- .../step_02/linux/runner/my_application.cc | 130 ------------------ .../kotlin/com/example/quiz/MainActivity.kt | 2 +- .../macos/Runner/Configs/AppInfo.xcconfig | 2 +- animations/step_02_a/windows/runner/Runner.rc | 2 +- .../kotlin/com/example/quiz/MainActivity.kt | 2 +- .../macos/Runner/Configs/AppInfo.xcconfig | 2 +- animations/step_02_b/windows/runner/Runner.rc | 2 +- .../kotlin/com/example/quiz/MainActivity.kt | 2 +- .../macos/Runner/Configs/AppInfo.xcconfig | 2 +- animations/step_02_c/windows/runner/Runner.rc | 2 +- .../kotlin/com/example/quiz/MainActivity.kt | 2 +- .../macos/Runner/Configs/AppInfo.xcconfig | 2 +- animations/step_02_d/windows/runner/Runner.rc | 2 +- .../kotlin/com/example/quiz/MainActivity.kt | 2 +- .../macos/Runner/Configs/AppInfo.xcconfig | 2 +- animations/step_02_e/windows/runner/Runner.rc | 2 +- .../step_03/linux/runner/CMakeLists.txt | 26 ---- .../step_03/linux/runner/my_application.cc | 130 ------------------ .../kotlin/com/example/quiz/MainActivity.kt | 2 +- .../macos/Runner/Configs/AppInfo.xcconfig | 2 +- animations/step_03_a/windows/runner/Runner.rc | 2 +- .../kotlin/com/example/quiz/MainActivity.kt | 2 +- .../macos/Runner/Configs/AppInfo.xcconfig | 2 +- animations/step_03_b/windows/runner/Runner.rc | 2 +- .../kotlin/com/example/quiz/MainActivity.kt | 2 +- .../macos/Runner/Configs/AppInfo.xcconfig | 2 +- animations/step_03_c/windows/runner/Runner.rc | 2 +- .../kotlin/com/example/quiz/MainActivity.kt | 2 +- .../macos/Runner/Configs/AppInfo.xcconfig | 2 +- animations/step_03_d/windows/runner/Runner.rc | 2 +- .../step_04/linux/runner/CMakeLists.txt | 26 ---- .../kotlin/com/example/quiz/MainActivity.kt | 2 +- .../macos/Runner/Configs/AppInfo.xcconfig | 2 +- animations/step_04_a/windows/runner/Runner.rc | 2 +- .../kotlin/com/example/quiz/MainActivity.kt | 2 +- .../macos/Runner/Configs/AppInfo.xcconfig | 2 +- animations/step_04_b/windows/runner/Runner.rc | 2 +- .../kotlin/com/example/quiz/MainActivity.kt | 2 +- .../macos/Runner/Configs/AppInfo.xcconfig | 2 +- animations/step_04_c/windows/runner/Runner.rc | 2 +- .../kotlin/com/example/quiz/MainActivity.kt | 2 +- .../macos/Runner/Configs/AppInfo.xcconfig | 2 +- animations/step_04_d/windows/runner/Runner.rc | 2 +- .../step_05/linux/runner/CMakeLists.txt | 26 ---- .../step_05/linux/runner/my_application.cc | 130 ------------------ .../kotlin/com/example/quiz/MainActivity.kt | 2 +- .../macos/Runner/Configs/AppInfo.xcconfig | 2 +- animations/step_05_a/windows/runner/Runner.rc | 2 +- .../kotlin/com/example/quiz/MainActivity.kt | 2 +- .../macos/Runner/Configs/AppInfo.xcconfig | 2 +- animations/step_05_b/windows/runner/Runner.rc | 2 +- .../kotlin/com/example/quiz/MainActivity.kt | 2 +- .../macos/Runner/Configs/AppInfo.xcconfig | 2 +- animations/step_05_c/windows/runner/Runner.rc | 2 +- .../kotlin/com/example/quiz/MainActivity.kt | 2 +- .../macos/Runner/Configs/AppInfo.xcconfig | 2 +- animations/step_05_d/windows/runner/Runner.rc | 2 +- 61 files changed, 54 insertions(+), 548 deletions(-) delete mode 100644 animations/step_02/linux/runner/CMakeLists.txt delete mode 100644 animations/step_02/linux/runner/my_application.cc delete mode 100644 animations/step_03/linux/runner/CMakeLists.txt delete mode 100644 animations/step_03/linux/runner/my_application.cc delete mode 100644 animations/step_04/linux/runner/CMakeLists.txt delete mode 100644 animations/step_05/linux/runner/CMakeLists.txt delete mode 100644 animations/step_05/linux/runner/my_application.cc diff --git a/animations/step_01/android/app/src/main/kotlin/com/example/quiz/MainActivity.kt b/animations/step_01/android/app/src/main/kotlin/com/example/quiz/MainActivity.kt index 3df56280d1..87081bb97c 100644 --- a/animations/step_01/android/app/src/main/kotlin/com/example/quiz/MainActivity.kt +++ b/animations/step_01/android/app/src/main/kotlin/com/example/quiz/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.quiz import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/animations/step_01/macos/Runner/Configs/AppInfo.xcconfig b/animations/step_01/macos/Runner/Configs/AppInfo.xcconfig index 28c7905763..cced5a518f 100644 --- a/animations/step_01/macos/Runner/Configs/AppInfo.xcconfig +++ b/animations/step_01/macos/Runner/Configs/AppInfo.xcconfig @@ -11,4 +11,4 @@ PRODUCT_NAME = quiz PRODUCT_BUNDLE_IDENTIFIER = com.example.quiz // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. diff --git a/animations/step_01/windows/runner/Runner.rc b/animations/step_01/windows/runner/Runner.rc index f0d8342b40..51988405c3 100644 --- a/animations/step_01/windows/runner/Runner.rc +++ b/animations/step_01/windows/runner/Runner.rc @@ -93,7 +93,7 @@ BEGIN VALUE "FileDescription", "quiz" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "InternalName", "quiz" "\0" - VALUE "LegalCopyright", "Copyright (C) 2024 com.example. All rights reserved." "\0" + VALUE "LegalCopyright", "Copyright (C) 2025 com.example. All rights reserved." "\0" VALUE "OriginalFilename", "quiz.exe" "\0" VALUE "ProductName", "quiz" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" diff --git a/animations/step_02/linux/runner/CMakeLists.txt b/animations/step_02/linux/runner/CMakeLists.txt deleted file mode 100644 index e97dabc702..0000000000 --- a/animations/step_02/linux/runner/CMakeLists.txt +++ /dev/null @@ -1,26 +0,0 @@ -cmake_minimum_required(VERSION 3.13) -project(runner LANGUAGES CXX) - -# Define the application target. To change its name, change BINARY_NAME in the -# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer -# work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add preprocessor definitions for the application ID. -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) - -target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/animations/step_02/linux/runner/my_application.cc b/animations/step_02/linux/runner/my_application.cc deleted file mode 100644 index 0040d7e46c..0000000000 --- a/animations/step_02/linux/runner/my_application.cc +++ /dev/null @@ -1,130 +0,0 @@ -#include "my_application.h" - -#include -#ifdef GDK_WINDOWING_X11 -#include -#endif - -#include "flutter/generated_plugin_registrant.h" - -struct _MyApplication { - GtkApplication parent_instance; - char** dart_entrypoint_arguments; -}; - -G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) - -// Implements GApplication::activate. -static void my_application_activate(GApplication* application) { - MyApplication* self = MY_APPLICATION(application); - GtkWindow* window = - GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); - - // Use a header bar when running in GNOME as this is the common style used - // by applications and is the setup most users will be using (e.g. Ubuntu - // desktop). - // If running on X and not using GNOME then just use a traditional title bar - // in case the window manager does more exotic layout, e.g. tiling. - // If running on Wayland assume the header bar will work (may need changing - // if future cases occur). - gboolean use_header_bar = TRUE; -#ifdef GDK_WINDOWING_X11 - GdkScreen* screen = gtk_window_get_screen(window); - if (GDK_IS_X11_SCREEN(screen)) { - const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); - if (g_strcmp0(wm_name, "GNOME Shell") != 0) { - use_header_bar = FALSE; - } - } -#endif - if (use_header_bar) { - GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); - gtk_widget_show(GTK_WIDGET(header_bar)); - gtk_header_bar_set_title(header_bar, "quiz"); - gtk_header_bar_set_show_close_button(header_bar, TRUE); - gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); - } else { - gtk_window_set_title(window, "quiz"); - } - - gtk_window_set_default_size(window, 1280, 720); - gtk_widget_show(GTK_WIDGET(window)); - - g_autoptr(FlDartProject) project = fl_dart_project_new(); - fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); - - FlView* view = fl_view_new(project); - gtk_widget_show(GTK_WIDGET(view)); - gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); - - fl_register_plugins(FL_PLUGIN_REGISTRY(view)); - - gtk_widget_grab_focus(GTK_WIDGET(view)); -} - -// Implements GApplication::local_command_line. -static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { - MyApplication* self = MY_APPLICATION(application); - // Strip out the first argument as it is the binary name. - self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); - - g_autoptr(GError) error = nullptr; - if (!g_application_register(application, nullptr, &error)) { - g_warning("Failed to register: %s", error->message); - *exit_status = 1; - return TRUE; - } - - g_application_activate(application); - *exit_status = 0; - - return TRUE; -} - -// Implements GApplication::startup. -static void my_application_startup(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application startup. - - G_APPLICATION_CLASS(my_application_parent_class)->startup(application); -} - -// Implements GApplication::shutdown. -static void my_application_shutdown(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application shutdown. - - G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); -} - -// Implements GObject::dispose. -static void my_application_dispose(GObject* object) { - MyApplication* self = MY_APPLICATION(object); - g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); - G_OBJECT_CLASS(my_application_parent_class)->dispose(object); -} - -static void my_application_class_init(MyApplicationClass* klass) { - G_APPLICATION_CLASS(klass)->activate = my_application_activate; - G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; - G_APPLICATION_CLASS(klass)->startup = my_application_startup; - G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; - G_OBJECT_CLASS(klass)->dispose = my_application_dispose; -} - -static void my_application_init(MyApplication* self) {} - -MyApplication* my_application_new() { - // Set the program name to the application ID, which helps various systems - // like GTK and desktop environments map this running application to its - // corresponding .desktop file. This ensures better integration by allowing - // the application to be recognized beyond its binary name. - g_set_prgname(APPLICATION_ID); - - return MY_APPLICATION(g_object_new(my_application_get_type(), - "application-id", APPLICATION_ID, - "flags", G_APPLICATION_NON_UNIQUE, - nullptr)); -} diff --git a/animations/step_02_a/android/app/src/main/kotlin/com/example/quiz/MainActivity.kt b/animations/step_02_a/android/app/src/main/kotlin/com/example/quiz/MainActivity.kt index 3df56280d1..87081bb97c 100644 --- a/animations/step_02_a/android/app/src/main/kotlin/com/example/quiz/MainActivity.kt +++ b/animations/step_02_a/android/app/src/main/kotlin/com/example/quiz/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.quiz import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/animations/step_02_a/macos/Runner/Configs/AppInfo.xcconfig b/animations/step_02_a/macos/Runner/Configs/AppInfo.xcconfig index 28c7905763..cced5a518f 100644 --- a/animations/step_02_a/macos/Runner/Configs/AppInfo.xcconfig +++ b/animations/step_02_a/macos/Runner/Configs/AppInfo.xcconfig @@ -11,4 +11,4 @@ PRODUCT_NAME = quiz PRODUCT_BUNDLE_IDENTIFIER = com.example.quiz // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. diff --git a/animations/step_02_a/windows/runner/Runner.rc b/animations/step_02_a/windows/runner/Runner.rc index f0d8342b40..51988405c3 100644 --- a/animations/step_02_a/windows/runner/Runner.rc +++ b/animations/step_02_a/windows/runner/Runner.rc @@ -93,7 +93,7 @@ BEGIN VALUE "FileDescription", "quiz" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "InternalName", "quiz" "\0" - VALUE "LegalCopyright", "Copyright (C) 2024 com.example. All rights reserved." "\0" + VALUE "LegalCopyright", "Copyright (C) 2025 com.example. All rights reserved." "\0" VALUE "OriginalFilename", "quiz.exe" "\0" VALUE "ProductName", "quiz" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" diff --git a/animations/step_02_b/android/app/src/main/kotlin/com/example/quiz/MainActivity.kt b/animations/step_02_b/android/app/src/main/kotlin/com/example/quiz/MainActivity.kt index 3df56280d1..87081bb97c 100644 --- a/animations/step_02_b/android/app/src/main/kotlin/com/example/quiz/MainActivity.kt +++ b/animations/step_02_b/android/app/src/main/kotlin/com/example/quiz/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.quiz import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/animations/step_02_b/macos/Runner/Configs/AppInfo.xcconfig b/animations/step_02_b/macos/Runner/Configs/AppInfo.xcconfig index 28c7905763..cced5a518f 100644 --- a/animations/step_02_b/macos/Runner/Configs/AppInfo.xcconfig +++ b/animations/step_02_b/macos/Runner/Configs/AppInfo.xcconfig @@ -11,4 +11,4 @@ PRODUCT_NAME = quiz PRODUCT_BUNDLE_IDENTIFIER = com.example.quiz // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. diff --git a/animations/step_02_b/windows/runner/Runner.rc b/animations/step_02_b/windows/runner/Runner.rc index f0d8342b40..51988405c3 100644 --- a/animations/step_02_b/windows/runner/Runner.rc +++ b/animations/step_02_b/windows/runner/Runner.rc @@ -93,7 +93,7 @@ BEGIN VALUE "FileDescription", "quiz" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "InternalName", "quiz" "\0" - VALUE "LegalCopyright", "Copyright (C) 2024 com.example. All rights reserved." "\0" + VALUE "LegalCopyright", "Copyright (C) 2025 com.example. All rights reserved." "\0" VALUE "OriginalFilename", "quiz.exe" "\0" VALUE "ProductName", "quiz" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" diff --git a/animations/step_02_c/android/app/src/main/kotlin/com/example/quiz/MainActivity.kt b/animations/step_02_c/android/app/src/main/kotlin/com/example/quiz/MainActivity.kt index 3df56280d1..87081bb97c 100644 --- a/animations/step_02_c/android/app/src/main/kotlin/com/example/quiz/MainActivity.kt +++ b/animations/step_02_c/android/app/src/main/kotlin/com/example/quiz/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.quiz import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/animations/step_02_c/macos/Runner/Configs/AppInfo.xcconfig b/animations/step_02_c/macos/Runner/Configs/AppInfo.xcconfig index 28c7905763..cced5a518f 100644 --- a/animations/step_02_c/macos/Runner/Configs/AppInfo.xcconfig +++ b/animations/step_02_c/macos/Runner/Configs/AppInfo.xcconfig @@ -11,4 +11,4 @@ PRODUCT_NAME = quiz PRODUCT_BUNDLE_IDENTIFIER = com.example.quiz // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. diff --git a/animations/step_02_c/windows/runner/Runner.rc b/animations/step_02_c/windows/runner/Runner.rc index f0d8342b40..51988405c3 100644 --- a/animations/step_02_c/windows/runner/Runner.rc +++ b/animations/step_02_c/windows/runner/Runner.rc @@ -93,7 +93,7 @@ BEGIN VALUE "FileDescription", "quiz" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "InternalName", "quiz" "\0" - VALUE "LegalCopyright", "Copyright (C) 2024 com.example. All rights reserved." "\0" + VALUE "LegalCopyright", "Copyright (C) 2025 com.example. All rights reserved." "\0" VALUE "OriginalFilename", "quiz.exe" "\0" VALUE "ProductName", "quiz" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" diff --git a/animations/step_02_d/android/app/src/main/kotlin/com/example/quiz/MainActivity.kt b/animations/step_02_d/android/app/src/main/kotlin/com/example/quiz/MainActivity.kt index 3df56280d1..87081bb97c 100644 --- a/animations/step_02_d/android/app/src/main/kotlin/com/example/quiz/MainActivity.kt +++ b/animations/step_02_d/android/app/src/main/kotlin/com/example/quiz/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.quiz import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/animations/step_02_d/macos/Runner/Configs/AppInfo.xcconfig b/animations/step_02_d/macos/Runner/Configs/AppInfo.xcconfig index 28c7905763..cced5a518f 100644 --- a/animations/step_02_d/macos/Runner/Configs/AppInfo.xcconfig +++ b/animations/step_02_d/macos/Runner/Configs/AppInfo.xcconfig @@ -11,4 +11,4 @@ PRODUCT_NAME = quiz PRODUCT_BUNDLE_IDENTIFIER = com.example.quiz // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. diff --git a/animations/step_02_d/windows/runner/Runner.rc b/animations/step_02_d/windows/runner/Runner.rc index f0d8342b40..51988405c3 100644 --- a/animations/step_02_d/windows/runner/Runner.rc +++ b/animations/step_02_d/windows/runner/Runner.rc @@ -93,7 +93,7 @@ BEGIN VALUE "FileDescription", "quiz" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "InternalName", "quiz" "\0" - VALUE "LegalCopyright", "Copyright (C) 2024 com.example. All rights reserved." "\0" + VALUE "LegalCopyright", "Copyright (C) 2025 com.example. All rights reserved." "\0" VALUE "OriginalFilename", "quiz.exe" "\0" VALUE "ProductName", "quiz" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" diff --git a/animations/step_02_e/android/app/src/main/kotlin/com/example/quiz/MainActivity.kt b/animations/step_02_e/android/app/src/main/kotlin/com/example/quiz/MainActivity.kt index 3df56280d1..87081bb97c 100644 --- a/animations/step_02_e/android/app/src/main/kotlin/com/example/quiz/MainActivity.kt +++ b/animations/step_02_e/android/app/src/main/kotlin/com/example/quiz/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.quiz import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/animations/step_02_e/macos/Runner/Configs/AppInfo.xcconfig b/animations/step_02_e/macos/Runner/Configs/AppInfo.xcconfig index 28c7905763..cced5a518f 100644 --- a/animations/step_02_e/macos/Runner/Configs/AppInfo.xcconfig +++ b/animations/step_02_e/macos/Runner/Configs/AppInfo.xcconfig @@ -11,4 +11,4 @@ PRODUCT_NAME = quiz PRODUCT_BUNDLE_IDENTIFIER = com.example.quiz // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. diff --git a/animations/step_02_e/windows/runner/Runner.rc b/animations/step_02_e/windows/runner/Runner.rc index f0d8342b40..51988405c3 100644 --- a/animations/step_02_e/windows/runner/Runner.rc +++ b/animations/step_02_e/windows/runner/Runner.rc @@ -93,7 +93,7 @@ BEGIN VALUE "FileDescription", "quiz" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "InternalName", "quiz" "\0" - VALUE "LegalCopyright", "Copyright (C) 2024 com.example. All rights reserved." "\0" + VALUE "LegalCopyright", "Copyright (C) 2025 com.example. All rights reserved." "\0" VALUE "OriginalFilename", "quiz.exe" "\0" VALUE "ProductName", "quiz" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" diff --git a/animations/step_03/linux/runner/CMakeLists.txt b/animations/step_03/linux/runner/CMakeLists.txt deleted file mode 100644 index e97dabc702..0000000000 --- a/animations/step_03/linux/runner/CMakeLists.txt +++ /dev/null @@ -1,26 +0,0 @@ -cmake_minimum_required(VERSION 3.13) -project(runner LANGUAGES CXX) - -# Define the application target. To change its name, change BINARY_NAME in the -# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer -# work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add preprocessor definitions for the application ID. -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) - -target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/animations/step_03/linux/runner/my_application.cc b/animations/step_03/linux/runner/my_application.cc deleted file mode 100644 index 0040d7e46c..0000000000 --- a/animations/step_03/linux/runner/my_application.cc +++ /dev/null @@ -1,130 +0,0 @@ -#include "my_application.h" - -#include -#ifdef GDK_WINDOWING_X11 -#include -#endif - -#include "flutter/generated_plugin_registrant.h" - -struct _MyApplication { - GtkApplication parent_instance; - char** dart_entrypoint_arguments; -}; - -G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) - -// Implements GApplication::activate. -static void my_application_activate(GApplication* application) { - MyApplication* self = MY_APPLICATION(application); - GtkWindow* window = - GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); - - // Use a header bar when running in GNOME as this is the common style used - // by applications and is the setup most users will be using (e.g. Ubuntu - // desktop). - // If running on X and not using GNOME then just use a traditional title bar - // in case the window manager does more exotic layout, e.g. tiling. - // If running on Wayland assume the header bar will work (may need changing - // if future cases occur). - gboolean use_header_bar = TRUE; -#ifdef GDK_WINDOWING_X11 - GdkScreen* screen = gtk_window_get_screen(window); - if (GDK_IS_X11_SCREEN(screen)) { - const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); - if (g_strcmp0(wm_name, "GNOME Shell") != 0) { - use_header_bar = FALSE; - } - } -#endif - if (use_header_bar) { - GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); - gtk_widget_show(GTK_WIDGET(header_bar)); - gtk_header_bar_set_title(header_bar, "quiz"); - gtk_header_bar_set_show_close_button(header_bar, TRUE); - gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); - } else { - gtk_window_set_title(window, "quiz"); - } - - gtk_window_set_default_size(window, 1280, 720); - gtk_widget_show(GTK_WIDGET(window)); - - g_autoptr(FlDartProject) project = fl_dart_project_new(); - fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); - - FlView* view = fl_view_new(project); - gtk_widget_show(GTK_WIDGET(view)); - gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); - - fl_register_plugins(FL_PLUGIN_REGISTRY(view)); - - gtk_widget_grab_focus(GTK_WIDGET(view)); -} - -// Implements GApplication::local_command_line. -static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { - MyApplication* self = MY_APPLICATION(application); - // Strip out the first argument as it is the binary name. - self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); - - g_autoptr(GError) error = nullptr; - if (!g_application_register(application, nullptr, &error)) { - g_warning("Failed to register: %s", error->message); - *exit_status = 1; - return TRUE; - } - - g_application_activate(application); - *exit_status = 0; - - return TRUE; -} - -// Implements GApplication::startup. -static void my_application_startup(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application startup. - - G_APPLICATION_CLASS(my_application_parent_class)->startup(application); -} - -// Implements GApplication::shutdown. -static void my_application_shutdown(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application shutdown. - - G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); -} - -// Implements GObject::dispose. -static void my_application_dispose(GObject* object) { - MyApplication* self = MY_APPLICATION(object); - g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); - G_OBJECT_CLASS(my_application_parent_class)->dispose(object); -} - -static void my_application_class_init(MyApplicationClass* klass) { - G_APPLICATION_CLASS(klass)->activate = my_application_activate; - G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; - G_APPLICATION_CLASS(klass)->startup = my_application_startup; - G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; - G_OBJECT_CLASS(klass)->dispose = my_application_dispose; -} - -static void my_application_init(MyApplication* self) {} - -MyApplication* my_application_new() { - // Set the program name to the application ID, which helps various systems - // like GTK and desktop environments map this running application to its - // corresponding .desktop file. This ensures better integration by allowing - // the application to be recognized beyond its binary name. - g_set_prgname(APPLICATION_ID); - - return MY_APPLICATION(g_object_new(my_application_get_type(), - "application-id", APPLICATION_ID, - "flags", G_APPLICATION_NON_UNIQUE, - nullptr)); -} diff --git a/animations/step_03_a/android/app/src/main/kotlin/com/example/quiz/MainActivity.kt b/animations/step_03_a/android/app/src/main/kotlin/com/example/quiz/MainActivity.kt index 3df56280d1..87081bb97c 100644 --- a/animations/step_03_a/android/app/src/main/kotlin/com/example/quiz/MainActivity.kt +++ b/animations/step_03_a/android/app/src/main/kotlin/com/example/quiz/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.quiz import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/animations/step_03_a/macos/Runner/Configs/AppInfo.xcconfig b/animations/step_03_a/macos/Runner/Configs/AppInfo.xcconfig index 28c7905763..cced5a518f 100644 --- a/animations/step_03_a/macos/Runner/Configs/AppInfo.xcconfig +++ b/animations/step_03_a/macos/Runner/Configs/AppInfo.xcconfig @@ -11,4 +11,4 @@ PRODUCT_NAME = quiz PRODUCT_BUNDLE_IDENTIFIER = com.example.quiz // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. diff --git a/animations/step_03_a/windows/runner/Runner.rc b/animations/step_03_a/windows/runner/Runner.rc index f0d8342b40..51988405c3 100644 --- a/animations/step_03_a/windows/runner/Runner.rc +++ b/animations/step_03_a/windows/runner/Runner.rc @@ -93,7 +93,7 @@ BEGIN VALUE "FileDescription", "quiz" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "InternalName", "quiz" "\0" - VALUE "LegalCopyright", "Copyright (C) 2024 com.example. All rights reserved." "\0" + VALUE "LegalCopyright", "Copyright (C) 2025 com.example. All rights reserved." "\0" VALUE "OriginalFilename", "quiz.exe" "\0" VALUE "ProductName", "quiz" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" diff --git a/animations/step_03_b/android/app/src/main/kotlin/com/example/quiz/MainActivity.kt b/animations/step_03_b/android/app/src/main/kotlin/com/example/quiz/MainActivity.kt index 3df56280d1..87081bb97c 100644 --- a/animations/step_03_b/android/app/src/main/kotlin/com/example/quiz/MainActivity.kt +++ b/animations/step_03_b/android/app/src/main/kotlin/com/example/quiz/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.quiz import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/animations/step_03_b/macos/Runner/Configs/AppInfo.xcconfig b/animations/step_03_b/macos/Runner/Configs/AppInfo.xcconfig index 28c7905763..cced5a518f 100644 --- a/animations/step_03_b/macos/Runner/Configs/AppInfo.xcconfig +++ b/animations/step_03_b/macos/Runner/Configs/AppInfo.xcconfig @@ -11,4 +11,4 @@ PRODUCT_NAME = quiz PRODUCT_BUNDLE_IDENTIFIER = com.example.quiz // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. diff --git a/animations/step_03_b/windows/runner/Runner.rc b/animations/step_03_b/windows/runner/Runner.rc index f0d8342b40..51988405c3 100644 --- a/animations/step_03_b/windows/runner/Runner.rc +++ b/animations/step_03_b/windows/runner/Runner.rc @@ -93,7 +93,7 @@ BEGIN VALUE "FileDescription", "quiz" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "InternalName", "quiz" "\0" - VALUE "LegalCopyright", "Copyright (C) 2024 com.example. All rights reserved." "\0" + VALUE "LegalCopyright", "Copyright (C) 2025 com.example. All rights reserved." "\0" VALUE "OriginalFilename", "quiz.exe" "\0" VALUE "ProductName", "quiz" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" diff --git a/animations/step_03_c/android/app/src/main/kotlin/com/example/quiz/MainActivity.kt b/animations/step_03_c/android/app/src/main/kotlin/com/example/quiz/MainActivity.kt index 3df56280d1..87081bb97c 100644 --- a/animations/step_03_c/android/app/src/main/kotlin/com/example/quiz/MainActivity.kt +++ b/animations/step_03_c/android/app/src/main/kotlin/com/example/quiz/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.quiz import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/animations/step_03_c/macos/Runner/Configs/AppInfo.xcconfig b/animations/step_03_c/macos/Runner/Configs/AppInfo.xcconfig index 28c7905763..cced5a518f 100644 --- a/animations/step_03_c/macos/Runner/Configs/AppInfo.xcconfig +++ b/animations/step_03_c/macos/Runner/Configs/AppInfo.xcconfig @@ -11,4 +11,4 @@ PRODUCT_NAME = quiz PRODUCT_BUNDLE_IDENTIFIER = com.example.quiz // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. diff --git a/animations/step_03_c/windows/runner/Runner.rc b/animations/step_03_c/windows/runner/Runner.rc index f0d8342b40..51988405c3 100644 --- a/animations/step_03_c/windows/runner/Runner.rc +++ b/animations/step_03_c/windows/runner/Runner.rc @@ -93,7 +93,7 @@ BEGIN VALUE "FileDescription", "quiz" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "InternalName", "quiz" "\0" - VALUE "LegalCopyright", "Copyright (C) 2024 com.example. All rights reserved." "\0" + VALUE "LegalCopyright", "Copyright (C) 2025 com.example. All rights reserved." "\0" VALUE "OriginalFilename", "quiz.exe" "\0" VALUE "ProductName", "quiz" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" diff --git a/animations/step_03_d/android/app/src/main/kotlin/com/example/quiz/MainActivity.kt b/animations/step_03_d/android/app/src/main/kotlin/com/example/quiz/MainActivity.kt index 3df56280d1..87081bb97c 100644 --- a/animations/step_03_d/android/app/src/main/kotlin/com/example/quiz/MainActivity.kt +++ b/animations/step_03_d/android/app/src/main/kotlin/com/example/quiz/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.quiz import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/animations/step_03_d/macos/Runner/Configs/AppInfo.xcconfig b/animations/step_03_d/macos/Runner/Configs/AppInfo.xcconfig index 28c7905763..cced5a518f 100644 --- a/animations/step_03_d/macos/Runner/Configs/AppInfo.xcconfig +++ b/animations/step_03_d/macos/Runner/Configs/AppInfo.xcconfig @@ -11,4 +11,4 @@ PRODUCT_NAME = quiz PRODUCT_BUNDLE_IDENTIFIER = com.example.quiz // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. diff --git a/animations/step_03_d/windows/runner/Runner.rc b/animations/step_03_d/windows/runner/Runner.rc index f0d8342b40..51988405c3 100644 --- a/animations/step_03_d/windows/runner/Runner.rc +++ b/animations/step_03_d/windows/runner/Runner.rc @@ -93,7 +93,7 @@ BEGIN VALUE "FileDescription", "quiz" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "InternalName", "quiz" "\0" - VALUE "LegalCopyright", "Copyright (C) 2024 com.example. All rights reserved." "\0" + VALUE "LegalCopyright", "Copyright (C) 2025 com.example. All rights reserved." "\0" VALUE "OriginalFilename", "quiz.exe" "\0" VALUE "ProductName", "quiz" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" diff --git a/animations/step_04/linux/runner/CMakeLists.txt b/animations/step_04/linux/runner/CMakeLists.txt deleted file mode 100644 index e97dabc702..0000000000 --- a/animations/step_04/linux/runner/CMakeLists.txt +++ /dev/null @@ -1,26 +0,0 @@ -cmake_minimum_required(VERSION 3.13) -project(runner LANGUAGES CXX) - -# Define the application target. To change its name, change BINARY_NAME in the -# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer -# work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add preprocessor definitions for the application ID. -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) - -target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/animations/step_04_a/android/app/src/main/kotlin/com/example/quiz/MainActivity.kt b/animations/step_04_a/android/app/src/main/kotlin/com/example/quiz/MainActivity.kt index 3df56280d1..87081bb97c 100644 --- a/animations/step_04_a/android/app/src/main/kotlin/com/example/quiz/MainActivity.kt +++ b/animations/step_04_a/android/app/src/main/kotlin/com/example/quiz/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.quiz import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/animations/step_04_a/macos/Runner/Configs/AppInfo.xcconfig b/animations/step_04_a/macos/Runner/Configs/AppInfo.xcconfig index 28c7905763..cced5a518f 100644 --- a/animations/step_04_a/macos/Runner/Configs/AppInfo.xcconfig +++ b/animations/step_04_a/macos/Runner/Configs/AppInfo.xcconfig @@ -11,4 +11,4 @@ PRODUCT_NAME = quiz PRODUCT_BUNDLE_IDENTIFIER = com.example.quiz // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. diff --git a/animations/step_04_a/windows/runner/Runner.rc b/animations/step_04_a/windows/runner/Runner.rc index f0d8342b40..51988405c3 100644 --- a/animations/step_04_a/windows/runner/Runner.rc +++ b/animations/step_04_a/windows/runner/Runner.rc @@ -93,7 +93,7 @@ BEGIN VALUE "FileDescription", "quiz" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "InternalName", "quiz" "\0" - VALUE "LegalCopyright", "Copyright (C) 2024 com.example. All rights reserved." "\0" + VALUE "LegalCopyright", "Copyright (C) 2025 com.example. All rights reserved." "\0" VALUE "OriginalFilename", "quiz.exe" "\0" VALUE "ProductName", "quiz" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" diff --git a/animations/step_04_b/android/app/src/main/kotlin/com/example/quiz/MainActivity.kt b/animations/step_04_b/android/app/src/main/kotlin/com/example/quiz/MainActivity.kt index 3df56280d1..87081bb97c 100644 --- a/animations/step_04_b/android/app/src/main/kotlin/com/example/quiz/MainActivity.kt +++ b/animations/step_04_b/android/app/src/main/kotlin/com/example/quiz/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.quiz import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/animations/step_04_b/macos/Runner/Configs/AppInfo.xcconfig b/animations/step_04_b/macos/Runner/Configs/AppInfo.xcconfig index 28c7905763..cced5a518f 100644 --- a/animations/step_04_b/macos/Runner/Configs/AppInfo.xcconfig +++ b/animations/step_04_b/macos/Runner/Configs/AppInfo.xcconfig @@ -11,4 +11,4 @@ PRODUCT_NAME = quiz PRODUCT_BUNDLE_IDENTIFIER = com.example.quiz // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. diff --git a/animations/step_04_b/windows/runner/Runner.rc b/animations/step_04_b/windows/runner/Runner.rc index f0d8342b40..51988405c3 100644 --- a/animations/step_04_b/windows/runner/Runner.rc +++ b/animations/step_04_b/windows/runner/Runner.rc @@ -93,7 +93,7 @@ BEGIN VALUE "FileDescription", "quiz" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "InternalName", "quiz" "\0" - VALUE "LegalCopyright", "Copyright (C) 2024 com.example. All rights reserved." "\0" + VALUE "LegalCopyright", "Copyright (C) 2025 com.example. All rights reserved." "\0" VALUE "OriginalFilename", "quiz.exe" "\0" VALUE "ProductName", "quiz" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" diff --git a/animations/step_04_c/android/app/src/main/kotlin/com/example/quiz/MainActivity.kt b/animations/step_04_c/android/app/src/main/kotlin/com/example/quiz/MainActivity.kt index 3df56280d1..87081bb97c 100644 --- a/animations/step_04_c/android/app/src/main/kotlin/com/example/quiz/MainActivity.kt +++ b/animations/step_04_c/android/app/src/main/kotlin/com/example/quiz/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.quiz import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/animations/step_04_c/macos/Runner/Configs/AppInfo.xcconfig b/animations/step_04_c/macos/Runner/Configs/AppInfo.xcconfig index 28c7905763..cced5a518f 100644 --- a/animations/step_04_c/macos/Runner/Configs/AppInfo.xcconfig +++ b/animations/step_04_c/macos/Runner/Configs/AppInfo.xcconfig @@ -11,4 +11,4 @@ PRODUCT_NAME = quiz PRODUCT_BUNDLE_IDENTIFIER = com.example.quiz // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. diff --git a/animations/step_04_c/windows/runner/Runner.rc b/animations/step_04_c/windows/runner/Runner.rc index f0d8342b40..51988405c3 100644 --- a/animations/step_04_c/windows/runner/Runner.rc +++ b/animations/step_04_c/windows/runner/Runner.rc @@ -93,7 +93,7 @@ BEGIN VALUE "FileDescription", "quiz" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "InternalName", "quiz" "\0" - VALUE "LegalCopyright", "Copyright (C) 2024 com.example. All rights reserved." "\0" + VALUE "LegalCopyright", "Copyright (C) 2025 com.example. All rights reserved." "\0" VALUE "OriginalFilename", "quiz.exe" "\0" VALUE "ProductName", "quiz" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" diff --git a/animations/step_04_d/android/app/src/main/kotlin/com/example/quiz/MainActivity.kt b/animations/step_04_d/android/app/src/main/kotlin/com/example/quiz/MainActivity.kt index 3df56280d1..87081bb97c 100644 --- a/animations/step_04_d/android/app/src/main/kotlin/com/example/quiz/MainActivity.kt +++ b/animations/step_04_d/android/app/src/main/kotlin/com/example/quiz/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.quiz import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/animations/step_04_d/macos/Runner/Configs/AppInfo.xcconfig b/animations/step_04_d/macos/Runner/Configs/AppInfo.xcconfig index 28c7905763..cced5a518f 100644 --- a/animations/step_04_d/macos/Runner/Configs/AppInfo.xcconfig +++ b/animations/step_04_d/macos/Runner/Configs/AppInfo.xcconfig @@ -11,4 +11,4 @@ PRODUCT_NAME = quiz PRODUCT_BUNDLE_IDENTIFIER = com.example.quiz // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. diff --git a/animations/step_04_d/windows/runner/Runner.rc b/animations/step_04_d/windows/runner/Runner.rc index f0d8342b40..51988405c3 100644 --- a/animations/step_04_d/windows/runner/Runner.rc +++ b/animations/step_04_d/windows/runner/Runner.rc @@ -93,7 +93,7 @@ BEGIN VALUE "FileDescription", "quiz" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "InternalName", "quiz" "\0" - VALUE "LegalCopyright", "Copyright (C) 2024 com.example. All rights reserved." "\0" + VALUE "LegalCopyright", "Copyright (C) 2025 com.example. All rights reserved." "\0" VALUE "OriginalFilename", "quiz.exe" "\0" VALUE "ProductName", "quiz" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" diff --git a/animations/step_05/linux/runner/CMakeLists.txt b/animations/step_05/linux/runner/CMakeLists.txt deleted file mode 100644 index e97dabc702..0000000000 --- a/animations/step_05/linux/runner/CMakeLists.txt +++ /dev/null @@ -1,26 +0,0 @@ -cmake_minimum_required(VERSION 3.13) -project(runner LANGUAGES CXX) - -# Define the application target. To change its name, change BINARY_NAME in the -# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer -# work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add preprocessor definitions for the application ID. -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) - -target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/animations/step_05/linux/runner/my_application.cc b/animations/step_05/linux/runner/my_application.cc deleted file mode 100644 index 0040d7e46c..0000000000 --- a/animations/step_05/linux/runner/my_application.cc +++ /dev/null @@ -1,130 +0,0 @@ -#include "my_application.h" - -#include -#ifdef GDK_WINDOWING_X11 -#include -#endif - -#include "flutter/generated_plugin_registrant.h" - -struct _MyApplication { - GtkApplication parent_instance; - char** dart_entrypoint_arguments; -}; - -G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) - -// Implements GApplication::activate. -static void my_application_activate(GApplication* application) { - MyApplication* self = MY_APPLICATION(application); - GtkWindow* window = - GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); - - // Use a header bar when running in GNOME as this is the common style used - // by applications and is the setup most users will be using (e.g. Ubuntu - // desktop). - // If running on X and not using GNOME then just use a traditional title bar - // in case the window manager does more exotic layout, e.g. tiling. - // If running on Wayland assume the header bar will work (may need changing - // if future cases occur). - gboolean use_header_bar = TRUE; -#ifdef GDK_WINDOWING_X11 - GdkScreen* screen = gtk_window_get_screen(window); - if (GDK_IS_X11_SCREEN(screen)) { - const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); - if (g_strcmp0(wm_name, "GNOME Shell") != 0) { - use_header_bar = FALSE; - } - } -#endif - if (use_header_bar) { - GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); - gtk_widget_show(GTK_WIDGET(header_bar)); - gtk_header_bar_set_title(header_bar, "quiz"); - gtk_header_bar_set_show_close_button(header_bar, TRUE); - gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); - } else { - gtk_window_set_title(window, "quiz"); - } - - gtk_window_set_default_size(window, 1280, 720); - gtk_widget_show(GTK_WIDGET(window)); - - g_autoptr(FlDartProject) project = fl_dart_project_new(); - fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); - - FlView* view = fl_view_new(project); - gtk_widget_show(GTK_WIDGET(view)); - gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); - - fl_register_plugins(FL_PLUGIN_REGISTRY(view)); - - gtk_widget_grab_focus(GTK_WIDGET(view)); -} - -// Implements GApplication::local_command_line. -static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { - MyApplication* self = MY_APPLICATION(application); - // Strip out the first argument as it is the binary name. - self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); - - g_autoptr(GError) error = nullptr; - if (!g_application_register(application, nullptr, &error)) { - g_warning("Failed to register: %s", error->message); - *exit_status = 1; - return TRUE; - } - - g_application_activate(application); - *exit_status = 0; - - return TRUE; -} - -// Implements GApplication::startup. -static void my_application_startup(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application startup. - - G_APPLICATION_CLASS(my_application_parent_class)->startup(application); -} - -// Implements GApplication::shutdown. -static void my_application_shutdown(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application shutdown. - - G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); -} - -// Implements GObject::dispose. -static void my_application_dispose(GObject* object) { - MyApplication* self = MY_APPLICATION(object); - g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); - G_OBJECT_CLASS(my_application_parent_class)->dispose(object); -} - -static void my_application_class_init(MyApplicationClass* klass) { - G_APPLICATION_CLASS(klass)->activate = my_application_activate; - G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; - G_APPLICATION_CLASS(klass)->startup = my_application_startup; - G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; - G_OBJECT_CLASS(klass)->dispose = my_application_dispose; -} - -static void my_application_init(MyApplication* self) {} - -MyApplication* my_application_new() { - // Set the program name to the application ID, which helps various systems - // like GTK and desktop environments map this running application to its - // corresponding .desktop file. This ensures better integration by allowing - // the application to be recognized beyond its binary name. - g_set_prgname(APPLICATION_ID); - - return MY_APPLICATION(g_object_new(my_application_get_type(), - "application-id", APPLICATION_ID, - "flags", G_APPLICATION_NON_UNIQUE, - nullptr)); -} diff --git a/animations/step_05_a/android/app/src/main/kotlin/com/example/quiz/MainActivity.kt b/animations/step_05_a/android/app/src/main/kotlin/com/example/quiz/MainActivity.kt index 3df56280d1..87081bb97c 100644 --- a/animations/step_05_a/android/app/src/main/kotlin/com/example/quiz/MainActivity.kt +++ b/animations/step_05_a/android/app/src/main/kotlin/com/example/quiz/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.quiz import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/animations/step_05_a/macos/Runner/Configs/AppInfo.xcconfig b/animations/step_05_a/macos/Runner/Configs/AppInfo.xcconfig index 28c7905763..cced5a518f 100644 --- a/animations/step_05_a/macos/Runner/Configs/AppInfo.xcconfig +++ b/animations/step_05_a/macos/Runner/Configs/AppInfo.xcconfig @@ -11,4 +11,4 @@ PRODUCT_NAME = quiz PRODUCT_BUNDLE_IDENTIFIER = com.example.quiz // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. diff --git a/animations/step_05_a/windows/runner/Runner.rc b/animations/step_05_a/windows/runner/Runner.rc index f0d8342b40..51988405c3 100644 --- a/animations/step_05_a/windows/runner/Runner.rc +++ b/animations/step_05_a/windows/runner/Runner.rc @@ -93,7 +93,7 @@ BEGIN VALUE "FileDescription", "quiz" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "InternalName", "quiz" "\0" - VALUE "LegalCopyright", "Copyright (C) 2024 com.example. All rights reserved." "\0" + VALUE "LegalCopyright", "Copyright (C) 2025 com.example. All rights reserved." "\0" VALUE "OriginalFilename", "quiz.exe" "\0" VALUE "ProductName", "quiz" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" diff --git a/animations/step_05_b/android/app/src/main/kotlin/com/example/quiz/MainActivity.kt b/animations/step_05_b/android/app/src/main/kotlin/com/example/quiz/MainActivity.kt index 3df56280d1..87081bb97c 100644 --- a/animations/step_05_b/android/app/src/main/kotlin/com/example/quiz/MainActivity.kt +++ b/animations/step_05_b/android/app/src/main/kotlin/com/example/quiz/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.quiz import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/animations/step_05_b/macos/Runner/Configs/AppInfo.xcconfig b/animations/step_05_b/macos/Runner/Configs/AppInfo.xcconfig index 28c7905763..cced5a518f 100644 --- a/animations/step_05_b/macos/Runner/Configs/AppInfo.xcconfig +++ b/animations/step_05_b/macos/Runner/Configs/AppInfo.xcconfig @@ -11,4 +11,4 @@ PRODUCT_NAME = quiz PRODUCT_BUNDLE_IDENTIFIER = com.example.quiz // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. diff --git a/animations/step_05_b/windows/runner/Runner.rc b/animations/step_05_b/windows/runner/Runner.rc index f0d8342b40..51988405c3 100644 --- a/animations/step_05_b/windows/runner/Runner.rc +++ b/animations/step_05_b/windows/runner/Runner.rc @@ -93,7 +93,7 @@ BEGIN VALUE "FileDescription", "quiz" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "InternalName", "quiz" "\0" - VALUE "LegalCopyright", "Copyright (C) 2024 com.example. All rights reserved." "\0" + VALUE "LegalCopyright", "Copyright (C) 2025 com.example. All rights reserved." "\0" VALUE "OriginalFilename", "quiz.exe" "\0" VALUE "ProductName", "quiz" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" diff --git a/animations/step_05_c/android/app/src/main/kotlin/com/example/quiz/MainActivity.kt b/animations/step_05_c/android/app/src/main/kotlin/com/example/quiz/MainActivity.kt index 3df56280d1..87081bb97c 100644 --- a/animations/step_05_c/android/app/src/main/kotlin/com/example/quiz/MainActivity.kt +++ b/animations/step_05_c/android/app/src/main/kotlin/com/example/quiz/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.quiz import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/animations/step_05_c/macos/Runner/Configs/AppInfo.xcconfig b/animations/step_05_c/macos/Runner/Configs/AppInfo.xcconfig index 28c7905763..cced5a518f 100644 --- a/animations/step_05_c/macos/Runner/Configs/AppInfo.xcconfig +++ b/animations/step_05_c/macos/Runner/Configs/AppInfo.xcconfig @@ -11,4 +11,4 @@ PRODUCT_NAME = quiz PRODUCT_BUNDLE_IDENTIFIER = com.example.quiz // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. diff --git a/animations/step_05_c/windows/runner/Runner.rc b/animations/step_05_c/windows/runner/Runner.rc index f0d8342b40..51988405c3 100644 --- a/animations/step_05_c/windows/runner/Runner.rc +++ b/animations/step_05_c/windows/runner/Runner.rc @@ -93,7 +93,7 @@ BEGIN VALUE "FileDescription", "quiz" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "InternalName", "quiz" "\0" - VALUE "LegalCopyright", "Copyright (C) 2024 com.example. All rights reserved." "\0" + VALUE "LegalCopyright", "Copyright (C) 2025 com.example. All rights reserved." "\0" VALUE "OriginalFilename", "quiz.exe" "\0" VALUE "ProductName", "quiz" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" diff --git a/animations/step_05_d/android/app/src/main/kotlin/com/example/quiz/MainActivity.kt b/animations/step_05_d/android/app/src/main/kotlin/com/example/quiz/MainActivity.kt index 3df56280d1..87081bb97c 100644 --- a/animations/step_05_d/android/app/src/main/kotlin/com/example/quiz/MainActivity.kt +++ b/animations/step_05_d/android/app/src/main/kotlin/com/example/quiz/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.quiz import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/animations/step_05_d/macos/Runner/Configs/AppInfo.xcconfig b/animations/step_05_d/macos/Runner/Configs/AppInfo.xcconfig index 28c7905763..cced5a518f 100644 --- a/animations/step_05_d/macos/Runner/Configs/AppInfo.xcconfig +++ b/animations/step_05_d/macos/Runner/Configs/AppInfo.xcconfig @@ -11,4 +11,4 @@ PRODUCT_NAME = quiz PRODUCT_BUNDLE_IDENTIFIER = com.example.quiz // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. diff --git a/animations/step_05_d/windows/runner/Runner.rc b/animations/step_05_d/windows/runner/Runner.rc index f0d8342b40..51988405c3 100644 --- a/animations/step_05_d/windows/runner/Runner.rc +++ b/animations/step_05_d/windows/runner/Runner.rc @@ -93,7 +93,7 @@ BEGIN VALUE "FileDescription", "quiz" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "InternalName", "quiz" "\0" - VALUE "LegalCopyright", "Copyright (C) 2024 com.example. All rights reserved." "\0" + VALUE "LegalCopyright", "Copyright (C) 2025 com.example. All rights reserved." "\0" VALUE "OriginalFilename", "quiz.exe" "\0" VALUE "ProductName", "quiz" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" From 8089b068b06950762e0795c1ba9f9203661cea23 Mon Sep 17 00:00:00 2001 From: Brett Morgan Date: Wed, 22 Jan 2025 12:08:10 +1100 Subject: [PATCH 091/108] Update `audio_soloud` --- .../com/example/audio_soloud/MainActivity.kt | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 134 +++++++++--------- .../macos/Runner.xcodeproj/project.pbxproj | 66 ++++----- .../macos/Runner/Configs/AppInfo.xcconfig | 2 +- audio_soloud/step_02/windows/runner/Runner.rc | 2 +- .../com/example/audio_soloud/MainActivity.kt | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 134 +++++++++--------- .../macos/Runner.xcodeproj/project.pbxproj | 66 ++++----- .../macos/Runner/Configs/AppInfo.xcconfig | 2 +- audio_soloud/step_03/windows/runner/Runner.rc | 2 +- .../com/example/audio_soloud/MainActivity.kt | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 134 +++++++++--------- .../macos/Runner.xcodeproj/project.pbxproj | 66 ++++----- .../macos/Runner/Configs/AppInfo.xcconfig | 2 +- .../step_04a/windows/runner/Runner.rc | 2 +- .../com/example/audio_soloud/MainActivity.kt | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 134 +++++++++--------- .../macos/Runner.xcodeproj/project.pbxproj | 66 ++++----- .../macos/Runner/Configs/AppInfo.xcconfig | 2 +- .../step_04b/windows/runner/Runner.rc | 2 +- .../com/example/audio_soloud/MainActivity.kt | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 134 +++++++++--------- .../macos/Runner.xcodeproj/project.pbxproj | 66 ++++----- .../macos/Runner/Configs/AppInfo.xcconfig | 2 +- audio_soloud/step_05/windows/runner/Runner.rc | 2 +- .../com/example/audio_soloud/MainActivity.kt | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 134 +++++++++--------- .../macos/Runner.xcodeproj/project.pbxproj | 66 ++++----- .../macos/Runner/Configs/AppInfo.xcconfig | 2 +- audio_soloud/step_06/windows/runner/Runner.rc | 2 +- 30 files changed, 618 insertions(+), 618 deletions(-) diff --git a/audio_soloud/step_02/android/app/src/main/kotlin/com/example/audio_soloud/MainActivity.kt b/audio_soloud/step_02/android/app/src/main/kotlin/com/example/audio_soloud/MainActivity.kt index 97f37d1195..b859911758 100644 --- a/audio_soloud/step_02/android/app/src/main/kotlin/com/example/audio_soloud/MainActivity.kt +++ b/audio_soloud/step_02/android/app/src/main/kotlin/com/example/audio_soloud/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.audio_soloud import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/audio_soloud/step_02/ios/Runner.xcodeproj/project.pbxproj b/audio_soloud/step_02/ios/Runner.xcodeproj/project.pbxproj index 41c76d5787..f83bbbc429 100644 --- a/audio_soloud/step_02/ios/Runner.xcodeproj/project.pbxproj +++ b/audio_soloud/step_02/ios/Runner.xcodeproj/project.pbxproj @@ -11,11 +11,11 @@ 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; - 7A3E185740DAC63465A5A0E6 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DB783E9FB0A9B4C82122A30C /* Pods_Runner.framework */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - A4219F6AC4D00D3034FC548D /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3E0492A4185411528F5DAD04 /* Pods_RunnerTests.framework */; }; + 9AB22009A18820706AD81113 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4084FD514DF2FE771D67623D /* Pods_Runner.framework */; }; + DC27A8CB56CD5DE4E84A224C /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9BF5425D050B38EE5507F70E /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,20 +42,19 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 0809AFAB09BE400CC9C71632 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 2032B207FF08187AED54B9FC /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 243E04C58B5A84246D9A035F /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 39C628DD2A4C446CBD810133 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 3E0492A4185411528F5DAD04 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 41D80782A2C029BE1DD3246B /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 4084FD514DF2FE771D67623D /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 55CC8D4541E22C5B25AD0833 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 7BAA2A1961D6FE30EC03121E /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 920AB902BB043618331EFA35 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 87F24E329974E2818B029853 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -63,8 +62,9 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - AC5FD504755D21290C41360B /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - DB783E9FB0A9B4C82122A30C /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 9BF5425D050B38EE5507F70E /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + C107378B45E65427339B504F /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + F9AE1B71347201EE89BE0806 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -72,15 +72,15 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 7A3E185740DAC63465A5A0E6 /* Pods_Runner.framework in Frameworks */, + 9AB22009A18820706AD81113 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - AC1D73307BAC81B2B806AF93 /* Frameworks */ = { + AFA30A28CE543CC77A75F9AB /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - A4219F6AC4D00D3034FC548D /* Pods_RunnerTests.framework in Frameworks */, + DC27A8CB56CD5DE4E84A224C /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -95,20 +95,29 @@ path = RunnerTests; sourceTree = ""; }; - 7A94E796F07EDE3F82EC35DE /* Pods */ = { + 654BBC5DC56CA3A081A1ADED /* Pods */ = { isa = PBXGroup; children = ( - 920AB902BB043618331EFA35 /* Pods-Runner.debug.xcconfig */, - 7BAA2A1961D6FE30EC03121E /* Pods-Runner.release.xcconfig */, - AC5FD504755D21290C41360B /* Pods-Runner.profile.xcconfig */, - 41D80782A2C029BE1DD3246B /* Pods-RunnerTests.debug.xcconfig */, - 39C628DD2A4C446CBD810133 /* Pods-RunnerTests.release.xcconfig */, - 2032B207FF08187AED54B9FC /* Pods-RunnerTests.profile.xcconfig */, + 243E04C58B5A84246D9A035F /* Pods-Runner.debug.xcconfig */, + 87F24E329974E2818B029853 /* Pods-Runner.release.xcconfig */, + 0809AFAB09BE400CC9C71632 /* Pods-Runner.profile.xcconfig */, + C107378B45E65427339B504F /* Pods-RunnerTests.debug.xcconfig */, + F9AE1B71347201EE89BE0806 /* Pods-RunnerTests.release.xcconfig */, + 55CC8D4541E22C5B25AD0833 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; sourceTree = ""; }; + 8E8D3BD59E0E5BF1AE8F2297 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 4084FD514DF2FE771D67623D /* Pods_Runner.framework */, + 9BF5425D050B38EE5507F70E /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( @@ -127,8 +136,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - 7A94E796F07EDE3F82EC35DE /* Pods */, - A732726D197A8A98F267BB38 /* Frameworks */, + 654BBC5DC56CA3A081A1ADED /* Pods */, + 8E8D3BD59E0E5BF1AE8F2297 /* Frameworks */, ); sourceTree = ""; }; @@ -156,15 +165,6 @@ path = Runner; sourceTree = ""; }; - A732726D197A8A98F267BB38 /* Frameworks */ = { - isa = PBXGroup; - children = ( - DB783E9FB0A9B4C82122A30C /* Pods_Runner.framework */, - 3E0492A4185411528F5DAD04 /* Pods_RunnerTests.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - C9C0B9C43F58F666E1099DB6 /* [CP] Check Pods Manifest.lock */, + 4F6DEC4D3A323AEA9C1B473B /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - AC1D73307BAC81B2B806AF93 /* Frameworks */, + AFA30A28CE543CC77A75F9AB /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 1BDA73C66D8E0962580B61CE /* [CP] Check Pods Manifest.lock */, + FE4AA9357DF3941274A1CE72 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - E14EB5B7FC900F3DD6C59281 /* [CP] Embed Pods Frameworks */, + 30432F4012B8682E6E80D861 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -270,26 +270,21 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 1BDA73C66D8E0962580B61CE /* [CP] Check Pods Manifest.lock */ = { + 30432F4012B8682E6E80D861 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { @@ -308,6 +303,28 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; + 4F6DEC4D3A323AEA9C1B473B /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -323,7 +340,7 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - C9C0B9C43F58F666E1099DB6 /* [CP] Check Pods Manifest.lock */ = { + FE4AA9357DF3941274A1CE72 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -338,30 +355,13 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - E14EB5B7FC900F3DD6C59281 /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 41D80782A2C029BE1DD3246B /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = C107378B45E65427339B504F /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 39C628DD2A4C446CBD810133 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = F9AE1B71347201EE89BE0806 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 2032B207FF08187AED54B9FC /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 55CC8D4541E22C5B25AD0833 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/audio_soloud/step_02/macos/Runner.xcodeproj/project.pbxproj b/audio_soloud/step_02/macos/Runner.xcodeproj/project.pbxproj index 97e3f10812..5e02e9dcef 100644 --- a/audio_soloud/step_02/macos/Runner.xcodeproj/project.pbxproj +++ b/audio_soloud/step_02/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ + 021F759E721EF64C544A8363 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6D73FB09AEC34D9A29A84861 /* Pods_RunnerTests.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 63FE1165F951769BF06347FE /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3B86527FB38C0DF3A31A993D /* Pods_RunnerTests.framework */; }; - 9562110F7C3EE4D27DC39713 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 528B075E892C92A1497BC5F8 /* Pods_Runner.framework */; }; + F0DB804B75023E840A67AC08 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F26B0CD6A6A6579AAAD05895 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,7 +62,8 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 042B79579D0C246C002451EF /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 14EA7F03C71924E5E8482549 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 2DEDA63086BAD8245C408DA0 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -79,15 +80,14 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 3B86527FB38C0DF3A31A993D /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 528B075E892C92A1497BC5F8 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 611D011EF4B1D75B226AC58A /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 3C4682DB4904E9E40A0D3744 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 6D73FB09AEC34D9A29A84861 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 7F677BC8FF75C95809A52828 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 8BEE52B223164EF40716553C /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - D47806E81D005579F7359B75 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - DDD6890BB5392767E3D25BF1 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 9828B5D08E218D80A809C7C2 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 9A0E60FB5B3E199FF0419D8D /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + DEA1E41A45C9C8F9312B81B9 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + F26B0CD6A6A6579AAAD05895 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 63FE1165F951769BF06347FE /* Pods_RunnerTests.framework in Frameworks */, + 021F759E721EF64C544A8363 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,7 +103,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 9562110F7C3EE4D27DC39713 /* Pods_Runner.framework in Frameworks */, + F0DB804B75023E840A67AC08 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -137,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 86EEC1D932993C343FFEBD96 /* Pods */, + 7F7E7662DDCA89EC700943C7 /* Pods */, ); sourceTree = ""; }; @@ -185,15 +185,15 @@ path = Runner; sourceTree = ""; }; - 86EEC1D932993C343FFEBD96 /* Pods */ = { + 7F7E7662DDCA89EC700943C7 /* Pods */ = { isa = PBXGroup; children = ( - 7F677BC8FF75C95809A52828 /* Pods-Runner.debug.xcconfig */, - 042B79579D0C246C002451EF /* Pods-Runner.release.xcconfig */, - 8BEE52B223164EF40716553C /* Pods-Runner.profile.xcconfig */, - DDD6890BB5392767E3D25BF1 /* Pods-RunnerTests.debug.xcconfig */, - D47806E81D005579F7359B75 /* Pods-RunnerTests.release.xcconfig */, - 611D011EF4B1D75B226AC58A /* Pods-RunnerTests.profile.xcconfig */, + 2DEDA63086BAD8245C408DA0 /* Pods-Runner.debug.xcconfig */, + 9A0E60FB5B3E199FF0419D8D /* Pods-Runner.release.xcconfig */, + 3C4682DB4904E9E40A0D3744 /* Pods-Runner.profile.xcconfig */, + 9828B5D08E218D80A809C7C2 /* Pods-RunnerTests.debug.xcconfig */, + 14EA7F03C71924E5E8482549 /* Pods-RunnerTests.release.xcconfig */, + DEA1E41A45C9C8F9312B81B9 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -202,8 +202,8 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - 528B075E892C92A1497BC5F8 /* Pods_Runner.framework */, - 3B86527FB38C0DF3A31A993D /* Pods_RunnerTests.framework */, + F26B0CD6A6A6579AAAD05895 /* Pods_Runner.framework */, + 6D73FB09AEC34D9A29A84861 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - FD6E47669C69DEF45E11B96D /* [CP] Check Pods Manifest.lock */, + 4B6B13A4559E7B5D33266C8F /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 60447F611E9A6283CDB5086A /* [CP] Check Pods Manifest.lock */, + E66D866C1A242277B6B38D20 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 8EACF5ACF629A57301D9AD23 /* [CP] Embed Pods Frameworks */, + D860BD48C73949EB26D8E809 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -361,7 +361,7 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 60447F611E9A6283CDB5086A /* [CP] Check Pods Manifest.lock */ = { + 4B6B13A4559E7B5D33266C8F /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -376,14 +376,14 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 8EACF5ACF629A57301D9AD23 /* [CP] Embed Pods Frameworks */ = { + D860BD48C73949EB26D8E809 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -400,7 +400,7 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - FD6E47669C69DEF45E11B96D /* [CP] Check Pods Manifest.lock */ = { + E66D866C1A242277B6B38D20 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -415,7 +415,7 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = DDD6890BB5392767E3D25BF1 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 9828B5D08E218D80A809C7C2 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = D47806E81D005579F7359B75 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 14EA7F03C71924E5E8482549 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 611D011EF4B1D75B226AC58A /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = DEA1E41A45C9C8F9312B81B9 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/audio_soloud/step_02/macos/Runner/Configs/AppInfo.xcconfig b/audio_soloud/step_02/macos/Runner/Configs/AppInfo.xcconfig index a5c6fc7009..7674c48079 100644 --- a/audio_soloud/step_02/macos/Runner/Configs/AppInfo.xcconfig +++ b/audio_soloud/step_02/macos/Runner/Configs/AppInfo.xcconfig @@ -11,4 +11,4 @@ PRODUCT_NAME = audio_soloud PRODUCT_BUNDLE_IDENTIFIER = com.example.audioSoloud // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. diff --git a/audio_soloud/step_02/windows/runner/Runner.rc b/audio_soloud/step_02/windows/runner/Runner.rc index c4be3ef074..3a8f5df939 100644 --- a/audio_soloud/step_02/windows/runner/Runner.rc +++ b/audio_soloud/step_02/windows/runner/Runner.rc @@ -93,7 +93,7 @@ BEGIN VALUE "FileDescription", "audio_soloud" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "InternalName", "audio_soloud" "\0" - VALUE "LegalCopyright", "Copyright (C) 2024 com.example. All rights reserved." "\0" + VALUE "LegalCopyright", "Copyright (C) 2025 com.example. All rights reserved." "\0" VALUE "OriginalFilename", "audio_soloud.exe" "\0" VALUE "ProductName", "audio_soloud" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" diff --git a/audio_soloud/step_03/android/app/src/main/kotlin/com/example/audio_soloud/MainActivity.kt b/audio_soloud/step_03/android/app/src/main/kotlin/com/example/audio_soloud/MainActivity.kt index 97f37d1195..b859911758 100644 --- a/audio_soloud/step_03/android/app/src/main/kotlin/com/example/audio_soloud/MainActivity.kt +++ b/audio_soloud/step_03/android/app/src/main/kotlin/com/example/audio_soloud/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.audio_soloud import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/audio_soloud/step_03/ios/Runner.xcodeproj/project.pbxproj b/audio_soloud/step_03/ios/Runner.xcodeproj/project.pbxproj index 41c76d5787..f83bbbc429 100644 --- a/audio_soloud/step_03/ios/Runner.xcodeproj/project.pbxproj +++ b/audio_soloud/step_03/ios/Runner.xcodeproj/project.pbxproj @@ -11,11 +11,11 @@ 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; - 7A3E185740DAC63465A5A0E6 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DB783E9FB0A9B4C82122A30C /* Pods_Runner.framework */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - A4219F6AC4D00D3034FC548D /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3E0492A4185411528F5DAD04 /* Pods_RunnerTests.framework */; }; + 9AB22009A18820706AD81113 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4084FD514DF2FE771D67623D /* Pods_Runner.framework */; }; + DC27A8CB56CD5DE4E84A224C /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9BF5425D050B38EE5507F70E /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,20 +42,19 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 0809AFAB09BE400CC9C71632 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 2032B207FF08187AED54B9FC /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 243E04C58B5A84246D9A035F /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 39C628DD2A4C446CBD810133 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 3E0492A4185411528F5DAD04 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 41D80782A2C029BE1DD3246B /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 4084FD514DF2FE771D67623D /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 55CC8D4541E22C5B25AD0833 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 7BAA2A1961D6FE30EC03121E /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 920AB902BB043618331EFA35 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 87F24E329974E2818B029853 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -63,8 +62,9 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - AC5FD504755D21290C41360B /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - DB783E9FB0A9B4C82122A30C /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 9BF5425D050B38EE5507F70E /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + C107378B45E65427339B504F /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + F9AE1B71347201EE89BE0806 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -72,15 +72,15 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 7A3E185740DAC63465A5A0E6 /* Pods_Runner.framework in Frameworks */, + 9AB22009A18820706AD81113 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - AC1D73307BAC81B2B806AF93 /* Frameworks */ = { + AFA30A28CE543CC77A75F9AB /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - A4219F6AC4D00D3034FC548D /* Pods_RunnerTests.framework in Frameworks */, + DC27A8CB56CD5DE4E84A224C /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -95,20 +95,29 @@ path = RunnerTests; sourceTree = ""; }; - 7A94E796F07EDE3F82EC35DE /* Pods */ = { + 654BBC5DC56CA3A081A1ADED /* Pods */ = { isa = PBXGroup; children = ( - 920AB902BB043618331EFA35 /* Pods-Runner.debug.xcconfig */, - 7BAA2A1961D6FE30EC03121E /* Pods-Runner.release.xcconfig */, - AC5FD504755D21290C41360B /* Pods-Runner.profile.xcconfig */, - 41D80782A2C029BE1DD3246B /* Pods-RunnerTests.debug.xcconfig */, - 39C628DD2A4C446CBD810133 /* Pods-RunnerTests.release.xcconfig */, - 2032B207FF08187AED54B9FC /* Pods-RunnerTests.profile.xcconfig */, + 243E04C58B5A84246D9A035F /* Pods-Runner.debug.xcconfig */, + 87F24E329974E2818B029853 /* Pods-Runner.release.xcconfig */, + 0809AFAB09BE400CC9C71632 /* Pods-Runner.profile.xcconfig */, + C107378B45E65427339B504F /* Pods-RunnerTests.debug.xcconfig */, + F9AE1B71347201EE89BE0806 /* Pods-RunnerTests.release.xcconfig */, + 55CC8D4541E22C5B25AD0833 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; sourceTree = ""; }; + 8E8D3BD59E0E5BF1AE8F2297 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 4084FD514DF2FE771D67623D /* Pods_Runner.framework */, + 9BF5425D050B38EE5507F70E /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( @@ -127,8 +136,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - 7A94E796F07EDE3F82EC35DE /* Pods */, - A732726D197A8A98F267BB38 /* Frameworks */, + 654BBC5DC56CA3A081A1ADED /* Pods */, + 8E8D3BD59E0E5BF1AE8F2297 /* Frameworks */, ); sourceTree = ""; }; @@ -156,15 +165,6 @@ path = Runner; sourceTree = ""; }; - A732726D197A8A98F267BB38 /* Frameworks */ = { - isa = PBXGroup; - children = ( - DB783E9FB0A9B4C82122A30C /* Pods_Runner.framework */, - 3E0492A4185411528F5DAD04 /* Pods_RunnerTests.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - C9C0B9C43F58F666E1099DB6 /* [CP] Check Pods Manifest.lock */, + 4F6DEC4D3A323AEA9C1B473B /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - AC1D73307BAC81B2B806AF93 /* Frameworks */, + AFA30A28CE543CC77A75F9AB /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 1BDA73C66D8E0962580B61CE /* [CP] Check Pods Manifest.lock */, + FE4AA9357DF3941274A1CE72 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - E14EB5B7FC900F3DD6C59281 /* [CP] Embed Pods Frameworks */, + 30432F4012B8682E6E80D861 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -270,26 +270,21 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 1BDA73C66D8E0962580B61CE /* [CP] Check Pods Manifest.lock */ = { + 30432F4012B8682E6E80D861 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { @@ -308,6 +303,28 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; + 4F6DEC4D3A323AEA9C1B473B /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -323,7 +340,7 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - C9C0B9C43F58F666E1099DB6 /* [CP] Check Pods Manifest.lock */ = { + FE4AA9357DF3941274A1CE72 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -338,30 +355,13 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - E14EB5B7FC900F3DD6C59281 /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 41D80782A2C029BE1DD3246B /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = C107378B45E65427339B504F /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 39C628DD2A4C446CBD810133 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = F9AE1B71347201EE89BE0806 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 2032B207FF08187AED54B9FC /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 55CC8D4541E22C5B25AD0833 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/audio_soloud/step_03/macos/Runner.xcodeproj/project.pbxproj b/audio_soloud/step_03/macos/Runner.xcodeproj/project.pbxproj index 97e3f10812..5e02e9dcef 100644 --- a/audio_soloud/step_03/macos/Runner.xcodeproj/project.pbxproj +++ b/audio_soloud/step_03/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ + 021F759E721EF64C544A8363 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6D73FB09AEC34D9A29A84861 /* Pods_RunnerTests.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 63FE1165F951769BF06347FE /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3B86527FB38C0DF3A31A993D /* Pods_RunnerTests.framework */; }; - 9562110F7C3EE4D27DC39713 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 528B075E892C92A1497BC5F8 /* Pods_Runner.framework */; }; + F0DB804B75023E840A67AC08 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F26B0CD6A6A6579AAAD05895 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,7 +62,8 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 042B79579D0C246C002451EF /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 14EA7F03C71924E5E8482549 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 2DEDA63086BAD8245C408DA0 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -79,15 +80,14 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 3B86527FB38C0DF3A31A993D /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 528B075E892C92A1497BC5F8 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 611D011EF4B1D75B226AC58A /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 3C4682DB4904E9E40A0D3744 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 6D73FB09AEC34D9A29A84861 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 7F677BC8FF75C95809A52828 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 8BEE52B223164EF40716553C /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - D47806E81D005579F7359B75 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - DDD6890BB5392767E3D25BF1 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 9828B5D08E218D80A809C7C2 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 9A0E60FB5B3E199FF0419D8D /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + DEA1E41A45C9C8F9312B81B9 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + F26B0CD6A6A6579AAAD05895 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 63FE1165F951769BF06347FE /* Pods_RunnerTests.framework in Frameworks */, + 021F759E721EF64C544A8363 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,7 +103,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 9562110F7C3EE4D27DC39713 /* Pods_Runner.framework in Frameworks */, + F0DB804B75023E840A67AC08 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -137,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 86EEC1D932993C343FFEBD96 /* Pods */, + 7F7E7662DDCA89EC700943C7 /* Pods */, ); sourceTree = ""; }; @@ -185,15 +185,15 @@ path = Runner; sourceTree = ""; }; - 86EEC1D932993C343FFEBD96 /* Pods */ = { + 7F7E7662DDCA89EC700943C7 /* Pods */ = { isa = PBXGroup; children = ( - 7F677BC8FF75C95809A52828 /* Pods-Runner.debug.xcconfig */, - 042B79579D0C246C002451EF /* Pods-Runner.release.xcconfig */, - 8BEE52B223164EF40716553C /* Pods-Runner.profile.xcconfig */, - DDD6890BB5392767E3D25BF1 /* Pods-RunnerTests.debug.xcconfig */, - D47806E81D005579F7359B75 /* Pods-RunnerTests.release.xcconfig */, - 611D011EF4B1D75B226AC58A /* Pods-RunnerTests.profile.xcconfig */, + 2DEDA63086BAD8245C408DA0 /* Pods-Runner.debug.xcconfig */, + 9A0E60FB5B3E199FF0419D8D /* Pods-Runner.release.xcconfig */, + 3C4682DB4904E9E40A0D3744 /* Pods-Runner.profile.xcconfig */, + 9828B5D08E218D80A809C7C2 /* Pods-RunnerTests.debug.xcconfig */, + 14EA7F03C71924E5E8482549 /* Pods-RunnerTests.release.xcconfig */, + DEA1E41A45C9C8F9312B81B9 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -202,8 +202,8 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - 528B075E892C92A1497BC5F8 /* Pods_Runner.framework */, - 3B86527FB38C0DF3A31A993D /* Pods_RunnerTests.framework */, + F26B0CD6A6A6579AAAD05895 /* Pods_Runner.framework */, + 6D73FB09AEC34D9A29A84861 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - FD6E47669C69DEF45E11B96D /* [CP] Check Pods Manifest.lock */, + 4B6B13A4559E7B5D33266C8F /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 60447F611E9A6283CDB5086A /* [CP] Check Pods Manifest.lock */, + E66D866C1A242277B6B38D20 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 8EACF5ACF629A57301D9AD23 /* [CP] Embed Pods Frameworks */, + D860BD48C73949EB26D8E809 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -361,7 +361,7 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 60447F611E9A6283CDB5086A /* [CP] Check Pods Manifest.lock */ = { + 4B6B13A4559E7B5D33266C8F /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -376,14 +376,14 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 8EACF5ACF629A57301D9AD23 /* [CP] Embed Pods Frameworks */ = { + D860BD48C73949EB26D8E809 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -400,7 +400,7 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - FD6E47669C69DEF45E11B96D /* [CP] Check Pods Manifest.lock */ = { + E66D866C1A242277B6B38D20 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -415,7 +415,7 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = DDD6890BB5392767E3D25BF1 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 9828B5D08E218D80A809C7C2 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = D47806E81D005579F7359B75 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 14EA7F03C71924E5E8482549 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 611D011EF4B1D75B226AC58A /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = DEA1E41A45C9C8F9312B81B9 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/audio_soloud/step_03/macos/Runner/Configs/AppInfo.xcconfig b/audio_soloud/step_03/macos/Runner/Configs/AppInfo.xcconfig index a5c6fc7009..7674c48079 100644 --- a/audio_soloud/step_03/macos/Runner/Configs/AppInfo.xcconfig +++ b/audio_soloud/step_03/macos/Runner/Configs/AppInfo.xcconfig @@ -11,4 +11,4 @@ PRODUCT_NAME = audio_soloud PRODUCT_BUNDLE_IDENTIFIER = com.example.audioSoloud // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. diff --git a/audio_soloud/step_03/windows/runner/Runner.rc b/audio_soloud/step_03/windows/runner/Runner.rc index c4be3ef074..3a8f5df939 100644 --- a/audio_soloud/step_03/windows/runner/Runner.rc +++ b/audio_soloud/step_03/windows/runner/Runner.rc @@ -93,7 +93,7 @@ BEGIN VALUE "FileDescription", "audio_soloud" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "InternalName", "audio_soloud" "\0" - VALUE "LegalCopyright", "Copyright (C) 2024 com.example. All rights reserved." "\0" + VALUE "LegalCopyright", "Copyright (C) 2025 com.example. All rights reserved." "\0" VALUE "OriginalFilename", "audio_soloud.exe" "\0" VALUE "ProductName", "audio_soloud" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" diff --git a/audio_soloud/step_04a/android/app/src/main/kotlin/com/example/audio_soloud/MainActivity.kt b/audio_soloud/step_04a/android/app/src/main/kotlin/com/example/audio_soloud/MainActivity.kt index 97f37d1195..b859911758 100644 --- a/audio_soloud/step_04a/android/app/src/main/kotlin/com/example/audio_soloud/MainActivity.kt +++ b/audio_soloud/step_04a/android/app/src/main/kotlin/com/example/audio_soloud/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.audio_soloud import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/audio_soloud/step_04a/ios/Runner.xcodeproj/project.pbxproj b/audio_soloud/step_04a/ios/Runner.xcodeproj/project.pbxproj index 41c76d5787..f83bbbc429 100644 --- a/audio_soloud/step_04a/ios/Runner.xcodeproj/project.pbxproj +++ b/audio_soloud/step_04a/ios/Runner.xcodeproj/project.pbxproj @@ -11,11 +11,11 @@ 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; - 7A3E185740DAC63465A5A0E6 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DB783E9FB0A9B4C82122A30C /* Pods_Runner.framework */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - A4219F6AC4D00D3034FC548D /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3E0492A4185411528F5DAD04 /* Pods_RunnerTests.framework */; }; + 9AB22009A18820706AD81113 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4084FD514DF2FE771D67623D /* Pods_Runner.framework */; }; + DC27A8CB56CD5DE4E84A224C /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9BF5425D050B38EE5507F70E /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,20 +42,19 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 0809AFAB09BE400CC9C71632 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 2032B207FF08187AED54B9FC /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 243E04C58B5A84246D9A035F /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 39C628DD2A4C446CBD810133 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 3E0492A4185411528F5DAD04 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 41D80782A2C029BE1DD3246B /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 4084FD514DF2FE771D67623D /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 55CC8D4541E22C5B25AD0833 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 7BAA2A1961D6FE30EC03121E /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 920AB902BB043618331EFA35 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 87F24E329974E2818B029853 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -63,8 +62,9 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - AC5FD504755D21290C41360B /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - DB783E9FB0A9B4C82122A30C /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 9BF5425D050B38EE5507F70E /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + C107378B45E65427339B504F /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + F9AE1B71347201EE89BE0806 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -72,15 +72,15 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 7A3E185740DAC63465A5A0E6 /* Pods_Runner.framework in Frameworks */, + 9AB22009A18820706AD81113 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - AC1D73307BAC81B2B806AF93 /* Frameworks */ = { + AFA30A28CE543CC77A75F9AB /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - A4219F6AC4D00D3034FC548D /* Pods_RunnerTests.framework in Frameworks */, + DC27A8CB56CD5DE4E84A224C /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -95,20 +95,29 @@ path = RunnerTests; sourceTree = ""; }; - 7A94E796F07EDE3F82EC35DE /* Pods */ = { + 654BBC5DC56CA3A081A1ADED /* Pods */ = { isa = PBXGroup; children = ( - 920AB902BB043618331EFA35 /* Pods-Runner.debug.xcconfig */, - 7BAA2A1961D6FE30EC03121E /* Pods-Runner.release.xcconfig */, - AC5FD504755D21290C41360B /* Pods-Runner.profile.xcconfig */, - 41D80782A2C029BE1DD3246B /* Pods-RunnerTests.debug.xcconfig */, - 39C628DD2A4C446CBD810133 /* Pods-RunnerTests.release.xcconfig */, - 2032B207FF08187AED54B9FC /* Pods-RunnerTests.profile.xcconfig */, + 243E04C58B5A84246D9A035F /* Pods-Runner.debug.xcconfig */, + 87F24E329974E2818B029853 /* Pods-Runner.release.xcconfig */, + 0809AFAB09BE400CC9C71632 /* Pods-Runner.profile.xcconfig */, + C107378B45E65427339B504F /* Pods-RunnerTests.debug.xcconfig */, + F9AE1B71347201EE89BE0806 /* Pods-RunnerTests.release.xcconfig */, + 55CC8D4541E22C5B25AD0833 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; sourceTree = ""; }; + 8E8D3BD59E0E5BF1AE8F2297 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 4084FD514DF2FE771D67623D /* Pods_Runner.framework */, + 9BF5425D050B38EE5507F70E /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( @@ -127,8 +136,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - 7A94E796F07EDE3F82EC35DE /* Pods */, - A732726D197A8A98F267BB38 /* Frameworks */, + 654BBC5DC56CA3A081A1ADED /* Pods */, + 8E8D3BD59E0E5BF1AE8F2297 /* Frameworks */, ); sourceTree = ""; }; @@ -156,15 +165,6 @@ path = Runner; sourceTree = ""; }; - A732726D197A8A98F267BB38 /* Frameworks */ = { - isa = PBXGroup; - children = ( - DB783E9FB0A9B4C82122A30C /* Pods_Runner.framework */, - 3E0492A4185411528F5DAD04 /* Pods_RunnerTests.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - C9C0B9C43F58F666E1099DB6 /* [CP] Check Pods Manifest.lock */, + 4F6DEC4D3A323AEA9C1B473B /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - AC1D73307BAC81B2B806AF93 /* Frameworks */, + AFA30A28CE543CC77A75F9AB /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 1BDA73C66D8E0962580B61CE /* [CP] Check Pods Manifest.lock */, + FE4AA9357DF3941274A1CE72 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - E14EB5B7FC900F3DD6C59281 /* [CP] Embed Pods Frameworks */, + 30432F4012B8682E6E80D861 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -270,26 +270,21 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 1BDA73C66D8E0962580B61CE /* [CP] Check Pods Manifest.lock */ = { + 30432F4012B8682E6E80D861 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { @@ -308,6 +303,28 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; + 4F6DEC4D3A323AEA9C1B473B /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -323,7 +340,7 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - C9C0B9C43F58F666E1099DB6 /* [CP] Check Pods Manifest.lock */ = { + FE4AA9357DF3941274A1CE72 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -338,30 +355,13 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - E14EB5B7FC900F3DD6C59281 /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 41D80782A2C029BE1DD3246B /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = C107378B45E65427339B504F /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 39C628DD2A4C446CBD810133 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = F9AE1B71347201EE89BE0806 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 2032B207FF08187AED54B9FC /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 55CC8D4541E22C5B25AD0833 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/audio_soloud/step_04a/macos/Runner.xcodeproj/project.pbxproj b/audio_soloud/step_04a/macos/Runner.xcodeproj/project.pbxproj index 97e3f10812..5e02e9dcef 100644 --- a/audio_soloud/step_04a/macos/Runner.xcodeproj/project.pbxproj +++ b/audio_soloud/step_04a/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ + 021F759E721EF64C544A8363 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6D73FB09AEC34D9A29A84861 /* Pods_RunnerTests.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 63FE1165F951769BF06347FE /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3B86527FB38C0DF3A31A993D /* Pods_RunnerTests.framework */; }; - 9562110F7C3EE4D27DC39713 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 528B075E892C92A1497BC5F8 /* Pods_Runner.framework */; }; + F0DB804B75023E840A67AC08 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F26B0CD6A6A6579AAAD05895 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,7 +62,8 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 042B79579D0C246C002451EF /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 14EA7F03C71924E5E8482549 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 2DEDA63086BAD8245C408DA0 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -79,15 +80,14 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 3B86527FB38C0DF3A31A993D /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 528B075E892C92A1497BC5F8 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 611D011EF4B1D75B226AC58A /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 3C4682DB4904E9E40A0D3744 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 6D73FB09AEC34D9A29A84861 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 7F677BC8FF75C95809A52828 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 8BEE52B223164EF40716553C /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - D47806E81D005579F7359B75 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - DDD6890BB5392767E3D25BF1 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 9828B5D08E218D80A809C7C2 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 9A0E60FB5B3E199FF0419D8D /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + DEA1E41A45C9C8F9312B81B9 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + F26B0CD6A6A6579AAAD05895 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 63FE1165F951769BF06347FE /* Pods_RunnerTests.framework in Frameworks */, + 021F759E721EF64C544A8363 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,7 +103,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 9562110F7C3EE4D27DC39713 /* Pods_Runner.framework in Frameworks */, + F0DB804B75023E840A67AC08 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -137,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 86EEC1D932993C343FFEBD96 /* Pods */, + 7F7E7662DDCA89EC700943C7 /* Pods */, ); sourceTree = ""; }; @@ -185,15 +185,15 @@ path = Runner; sourceTree = ""; }; - 86EEC1D932993C343FFEBD96 /* Pods */ = { + 7F7E7662DDCA89EC700943C7 /* Pods */ = { isa = PBXGroup; children = ( - 7F677BC8FF75C95809A52828 /* Pods-Runner.debug.xcconfig */, - 042B79579D0C246C002451EF /* Pods-Runner.release.xcconfig */, - 8BEE52B223164EF40716553C /* Pods-Runner.profile.xcconfig */, - DDD6890BB5392767E3D25BF1 /* Pods-RunnerTests.debug.xcconfig */, - D47806E81D005579F7359B75 /* Pods-RunnerTests.release.xcconfig */, - 611D011EF4B1D75B226AC58A /* Pods-RunnerTests.profile.xcconfig */, + 2DEDA63086BAD8245C408DA0 /* Pods-Runner.debug.xcconfig */, + 9A0E60FB5B3E199FF0419D8D /* Pods-Runner.release.xcconfig */, + 3C4682DB4904E9E40A0D3744 /* Pods-Runner.profile.xcconfig */, + 9828B5D08E218D80A809C7C2 /* Pods-RunnerTests.debug.xcconfig */, + 14EA7F03C71924E5E8482549 /* Pods-RunnerTests.release.xcconfig */, + DEA1E41A45C9C8F9312B81B9 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -202,8 +202,8 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - 528B075E892C92A1497BC5F8 /* Pods_Runner.framework */, - 3B86527FB38C0DF3A31A993D /* Pods_RunnerTests.framework */, + F26B0CD6A6A6579AAAD05895 /* Pods_Runner.framework */, + 6D73FB09AEC34D9A29A84861 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - FD6E47669C69DEF45E11B96D /* [CP] Check Pods Manifest.lock */, + 4B6B13A4559E7B5D33266C8F /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 60447F611E9A6283CDB5086A /* [CP] Check Pods Manifest.lock */, + E66D866C1A242277B6B38D20 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 8EACF5ACF629A57301D9AD23 /* [CP] Embed Pods Frameworks */, + D860BD48C73949EB26D8E809 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -361,7 +361,7 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 60447F611E9A6283CDB5086A /* [CP] Check Pods Manifest.lock */ = { + 4B6B13A4559E7B5D33266C8F /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -376,14 +376,14 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 8EACF5ACF629A57301D9AD23 /* [CP] Embed Pods Frameworks */ = { + D860BD48C73949EB26D8E809 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -400,7 +400,7 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - FD6E47669C69DEF45E11B96D /* [CP] Check Pods Manifest.lock */ = { + E66D866C1A242277B6B38D20 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -415,7 +415,7 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = DDD6890BB5392767E3D25BF1 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 9828B5D08E218D80A809C7C2 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = D47806E81D005579F7359B75 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 14EA7F03C71924E5E8482549 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 611D011EF4B1D75B226AC58A /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = DEA1E41A45C9C8F9312B81B9 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/audio_soloud/step_04a/macos/Runner/Configs/AppInfo.xcconfig b/audio_soloud/step_04a/macos/Runner/Configs/AppInfo.xcconfig index a5c6fc7009..7674c48079 100644 --- a/audio_soloud/step_04a/macos/Runner/Configs/AppInfo.xcconfig +++ b/audio_soloud/step_04a/macos/Runner/Configs/AppInfo.xcconfig @@ -11,4 +11,4 @@ PRODUCT_NAME = audio_soloud PRODUCT_BUNDLE_IDENTIFIER = com.example.audioSoloud // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. diff --git a/audio_soloud/step_04a/windows/runner/Runner.rc b/audio_soloud/step_04a/windows/runner/Runner.rc index c4be3ef074..3a8f5df939 100644 --- a/audio_soloud/step_04a/windows/runner/Runner.rc +++ b/audio_soloud/step_04a/windows/runner/Runner.rc @@ -93,7 +93,7 @@ BEGIN VALUE "FileDescription", "audio_soloud" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "InternalName", "audio_soloud" "\0" - VALUE "LegalCopyright", "Copyright (C) 2024 com.example. All rights reserved." "\0" + VALUE "LegalCopyright", "Copyright (C) 2025 com.example. All rights reserved." "\0" VALUE "OriginalFilename", "audio_soloud.exe" "\0" VALUE "ProductName", "audio_soloud" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" diff --git a/audio_soloud/step_04b/android/app/src/main/kotlin/com/example/audio_soloud/MainActivity.kt b/audio_soloud/step_04b/android/app/src/main/kotlin/com/example/audio_soloud/MainActivity.kt index 97f37d1195..b859911758 100644 --- a/audio_soloud/step_04b/android/app/src/main/kotlin/com/example/audio_soloud/MainActivity.kt +++ b/audio_soloud/step_04b/android/app/src/main/kotlin/com/example/audio_soloud/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.audio_soloud import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/audio_soloud/step_04b/ios/Runner.xcodeproj/project.pbxproj b/audio_soloud/step_04b/ios/Runner.xcodeproj/project.pbxproj index 41c76d5787..f83bbbc429 100644 --- a/audio_soloud/step_04b/ios/Runner.xcodeproj/project.pbxproj +++ b/audio_soloud/step_04b/ios/Runner.xcodeproj/project.pbxproj @@ -11,11 +11,11 @@ 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; - 7A3E185740DAC63465A5A0E6 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DB783E9FB0A9B4C82122A30C /* Pods_Runner.framework */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - A4219F6AC4D00D3034FC548D /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3E0492A4185411528F5DAD04 /* Pods_RunnerTests.framework */; }; + 9AB22009A18820706AD81113 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4084FD514DF2FE771D67623D /* Pods_Runner.framework */; }; + DC27A8CB56CD5DE4E84A224C /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9BF5425D050B38EE5507F70E /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,20 +42,19 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 0809AFAB09BE400CC9C71632 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 2032B207FF08187AED54B9FC /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 243E04C58B5A84246D9A035F /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 39C628DD2A4C446CBD810133 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 3E0492A4185411528F5DAD04 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 41D80782A2C029BE1DD3246B /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 4084FD514DF2FE771D67623D /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 55CC8D4541E22C5B25AD0833 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 7BAA2A1961D6FE30EC03121E /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 920AB902BB043618331EFA35 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 87F24E329974E2818B029853 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -63,8 +62,9 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - AC5FD504755D21290C41360B /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - DB783E9FB0A9B4C82122A30C /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 9BF5425D050B38EE5507F70E /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + C107378B45E65427339B504F /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + F9AE1B71347201EE89BE0806 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -72,15 +72,15 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 7A3E185740DAC63465A5A0E6 /* Pods_Runner.framework in Frameworks */, + 9AB22009A18820706AD81113 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - AC1D73307BAC81B2B806AF93 /* Frameworks */ = { + AFA30A28CE543CC77A75F9AB /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - A4219F6AC4D00D3034FC548D /* Pods_RunnerTests.framework in Frameworks */, + DC27A8CB56CD5DE4E84A224C /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -95,20 +95,29 @@ path = RunnerTests; sourceTree = ""; }; - 7A94E796F07EDE3F82EC35DE /* Pods */ = { + 654BBC5DC56CA3A081A1ADED /* Pods */ = { isa = PBXGroup; children = ( - 920AB902BB043618331EFA35 /* Pods-Runner.debug.xcconfig */, - 7BAA2A1961D6FE30EC03121E /* Pods-Runner.release.xcconfig */, - AC5FD504755D21290C41360B /* Pods-Runner.profile.xcconfig */, - 41D80782A2C029BE1DD3246B /* Pods-RunnerTests.debug.xcconfig */, - 39C628DD2A4C446CBD810133 /* Pods-RunnerTests.release.xcconfig */, - 2032B207FF08187AED54B9FC /* Pods-RunnerTests.profile.xcconfig */, + 243E04C58B5A84246D9A035F /* Pods-Runner.debug.xcconfig */, + 87F24E329974E2818B029853 /* Pods-Runner.release.xcconfig */, + 0809AFAB09BE400CC9C71632 /* Pods-Runner.profile.xcconfig */, + C107378B45E65427339B504F /* Pods-RunnerTests.debug.xcconfig */, + F9AE1B71347201EE89BE0806 /* Pods-RunnerTests.release.xcconfig */, + 55CC8D4541E22C5B25AD0833 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; sourceTree = ""; }; + 8E8D3BD59E0E5BF1AE8F2297 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 4084FD514DF2FE771D67623D /* Pods_Runner.framework */, + 9BF5425D050B38EE5507F70E /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( @@ -127,8 +136,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - 7A94E796F07EDE3F82EC35DE /* Pods */, - A732726D197A8A98F267BB38 /* Frameworks */, + 654BBC5DC56CA3A081A1ADED /* Pods */, + 8E8D3BD59E0E5BF1AE8F2297 /* Frameworks */, ); sourceTree = ""; }; @@ -156,15 +165,6 @@ path = Runner; sourceTree = ""; }; - A732726D197A8A98F267BB38 /* Frameworks */ = { - isa = PBXGroup; - children = ( - DB783E9FB0A9B4C82122A30C /* Pods_Runner.framework */, - 3E0492A4185411528F5DAD04 /* Pods_RunnerTests.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - C9C0B9C43F58F666E1099DB6 /* [CP] Check Pods Manifest.lock */, + 4F6DEC4D3A323AEA9C1B473B /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - AC1D73307BAC81B2B806AF93 /* Frameworks */, + AFA30A28CE543CC77A75F9AB /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 1BDA73C66D8E0962580B61CE /* [CP] Check Pods Manifest.lock */, + FE4AA9357DF3941274A1CE72 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - E14EB5B7FC900F3DD6C59281 /* [CP] Embed Pods Frameworks */, + 30432F4012B8682E6E80D861 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -270,26 +270,21 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 1BDA73C66D8E0962580B61CE /* [CP] Check Pods Manifest.lock */ = { + 30432F4012B8682E6E80D861 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { @@ -308,6 +303,28 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; + 4F6DEC4D3A323AEA9C1B473B /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -323,7 +340,7 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - C9C0B9C43F58F666E1099DB6 /* [CP] Check Pods Manifest.lock */ = { + FE4AA9357DF3941274A1CE72 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -338,30 +355,13 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - E14EB5B7FC900F3DD6C59281 /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 41D80782A2C029BE1DD3246B /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = C107378B45E65427339B504F /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 39C628DD2A4C446CBD810133 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = F9AE1B71347201EE89BE0806 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 2032B207FF08187AED54B9FC /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 55CC8D4541E22C5B25AD0833 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/audio_soloud/step_04b/macos/Runner.xcodeproj/project.pbxproj b/audio_soloud/step_04b/macos/Runner.xcodeproj/project.pbxproj index 97e3f10812..5e02e9dcef 100644 --- a/audio_soloud/step_04b/macos/Runner.xcodeproj/project.pbxproj +++ b/audio_soloud/step_04b/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ + 021F759E721EF64C544A8363 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6D73FB09AEC34D9A29A84861 /* Pods_RunnerTests.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 63FE1165F951769BF06347FE /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3B86527FB38C0DF3A31A993D /* Pods_RunnerTests.framework */; }; - 9562110F7C3EE4D27DC39713 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 528B075E892C92A1497BC5F8 /* Pods_Runner.framework */; }; + F0DB804B75023E840A67AC08 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F26B0CD6A6A6579AAAD05895 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,7 +62,8 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 042B79579D0C246C002451EF /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 14EA7F03C71924E5E8482549 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 2DEDA63086BAD8245C408DA0 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -79,15 +80,14 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 3B86527FB38C0DF3A31A993D /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 528B075E892C92A1497BC5F8 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 611D011EF4B1D75B226AC58A /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 3C4682DB4904E9E40A0D3744 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 6D73FB09AEC34D9A29A84861 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 7F677BC8FF75C95809A52828 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 8BEE52B223164EF40716553C /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - D47806E81D005579F7359B75 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - DDD6890BB5392767E3D25BF1 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 9828B5D08E218D80A809C7C2 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 9A0E60FB5B3E199FF0419D8D /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + DEA1E41A45C9C8F9312B81B9 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + F26B0CD6A6A6579AAAD05895 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 63FE1165F951769BF06347FE /* Pods_RunnerTests.framework in Frameworks */, + 021F759E721EF64C544A8363 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,7 +103,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 9562110F7C3EE4D27DC39713 /* Pods_Runner.framework in Frameworks */, + F0DB804B75023E840A67AC08 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -137,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 86EEC1D932993C343FFEBD96 /* Pods */, + 7F7E7662DDCA89EC700943C7 /* Pods */, ); sourceTree = ""; }; @@ -185,15 +185,15 @@ path = Runner; sourceTree = ""; }; - 86EEC1D932993C343FFEBD96 /* Pods */ = { + 7F7E7662DDCA89EC700943C7 /* Pods */ = { isa = PBXGroup; children = ( - 7F677BC8FF75C95809A52828 /* Pods-Runner.debug.xcconfig */, - 042B79579D0C246C002451EF /* Pods-Runner.release.xcconfig */, - 8BEE52B223164EF40716553C /* Pods-Runner.profile.xcconfig */, - DDD6890BB5392767E3D25BF1 /* Pods-RunnerTests.debug.xcconfig */, - D47806E81D005579F7359B75 /* Pods-RunnerTests.release.xcconfig */, - 611D011EF4B1D75B226AC58A /* Pods-RunnerTests.profile.xcconfig */, + 2DEDA63086BAD8245C408DA0 /* Pods-Runner.debug.xcconfig */, + 9A0E60FB5B3E199FF0419D8D /* Pods-Runner.release.xcconfig */, + 3C4682DB4904E9E40A0D3744 /* Pods-Runner.profile.xcconfig */, + 9828B5D08E218D80A809C7C2 /* Pods-RunnerTests.debug.xcconfig */, + 14EA7F03C71924E5E8482549 /* Pods-RunnerTests.release.xcconfig */, + DEA1E41A45C9C8F9312B81B9 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -202,8 +202,8 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - 528B075E892C92A1497BC5F8 /* Pods_Runner.framework */, - 3B86527FB38C0DF3A31A993D /* Pods_RunnerTests.framework */, + F26B0CD6A6A6579AAAD05895 /* Pods_Runner.framework */, + 6D73FB09AEC34D9A29A84861 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - FD6E47669C69DEF45E11B96D /* [CP] Check Pods Manifest.lock */, + 4B6B13A4559E7B5D33266C8F /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 60447F611E9A6283CDB5086A /* [CP] Check Pods Manifest.lock */, + E66D866C1A242277B6B38D20 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 8EACF5ACF629A57301D9AD23 /* [CP] Embed Pods Frameworks */, + D860BD48C73949EB26D8E809 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -361,7 +361,7 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 60447F611E9A6283CDB5086A /* [CP] Check Pods Manifest.lock */ = { + 4B6B13A4559E7B5D33266C8F /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -376,14 +376,14 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 8EACF5ACF629A57301D9AD23 /* [CP] Embed Pods Frameworks */ = { + D860BD48C73949EB26D8E809 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -400,7 +400,7 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - FD6E47669C69DEF45E11B96D /* [CP] Check Pods Manifest.lock */ = { + E66D866C1A242277B6B38D20 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -415,7 +415,7 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = DDD6890BB5392767E3D25BF1 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 9828B5D08E218D80A809C7C2 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = D47806E81D005579F7359B75 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 14EA7F03C71924E5E8482549 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 611D011EF4B1D75B226AC58A /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = DEA1E41A45C9C8F9312B81B9 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/audio_soloud/step_04b/macos/Runner/Configs/AppInfo.xcconfig b/audio_soloud/step_04b/macos/Runner/Configs/AppInfo.xcconfig index a5c6fc7009..7674c48079 100644 --- a/audio_soloud/step_04b/macos/Runner/Configs/AppInfo.xcconfig +++ b/audio_soloud/step_04b/macos/Runner/Configs/AppInfo.xcconfig @@ -11,4 +11,4 @@ PRODUCT_NAME = audio_soloud PRODUCT_BUNDLE_IDENTIFIER = com.example.audioSoloud // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. diff --git a/audio_soloud/step_04b/windows/runner/Runner.rc b/audio_soloud/step_04b/windows/runner/Runner.rc index c4be3ef074..3a8f5df939 100644 --- a/audio_soloud/step_04b/windows/runner/Runner.rc +++ b/audio_soloud/step_04b/windows/runner/Runner.rc @@ -93,7 +93,7 @@ BEGIN VALUE "FileDescription", "audio_soloud" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "InternalName", "audio_soloud" "\0" - VALUE "LegalCopyright", "Copyright (C) 2024 com.example. All rights reserved." "\0" + VALUE "LegalCopyright", "Copyright (C) 2025 com.example. All rights reserved." "\0" VALUE "OriginalFilename", "audio_soloud.exe" "\0" VALUE "ProductName", "audio_soloud" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" diff --git a/audio_soloud/step_05/android/app/src/main/kotlin/com/example/audio_soloud/MainActivity.kt b/audio_soloud/step_05/android/app/src/main/kotlin/com/example/audio_soloud/MainActivity.kt index 97f37d1195..b859911758 100644 --- a/audio_soloud/step_05/android/app/src/main/kotlin/com/example/audio_soloud/MainActivity.kt +++ b/audio_soloud/step_05/android/app/src/main/kotlin/com/example/audio_soloud/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.audio_soloud import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/audio_soloud/step_05/ios/Runner.xcodeproj/project.pbxproj b/audio_soloud/step_05/ios/Runner.xcodeproj/project.pbxproj index 41c76d5787..f83bbbc429 100644 --- a/audio_soloud/step_05/ios/Runner.xcodeproj/project.pbxproj +++ b/audio_soloud/step_05/ios/Runner.xcodeproj/project.pbxproj @@ -11,11 +11,11 @@ 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; - 7A3E185740DAC63465A5A0E6 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DB783E9FB0A9B4C82122A30C /* Pods_Runner.framework */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - A4219F6AC4D00D3034FC548D /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3E0492A4185411528F5DAD04 /* Pods_RunnerTests.framework */; }; + 9AB22009A18820706AD81113 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4084FD514DF2FE771D67623D /* Pods_Runner.framework */; }; + DC27A8CB56CD5DE4E84A224C /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9BF5425D050B38EE5507F70E /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,20 +42,19 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 0809AFAB09BE400CC9C71632 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 2032B207FF08187AED54B9FC /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 243E04C58B5A84246D9A035F /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 39C628DD2A4C446CBD810133 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 3E0492A4185411528F5DAD04 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 41D80782A2C029BE1DD3246B /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 4084FD514DF2FE771D67623D /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 55CC8D4541E22C5B25AD0833 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 7BAA2A1961D6FE30EC03121E /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 920AB902BB043618331EFA35 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 87F24E329974E2818B029853 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -63,8 +62,9 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - AC5FD504755D21290C41360B /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - DB783E9FB0A9B4C82122A30C /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 9BF5425D050B38EE5507F70E /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + C107378B45E65427339B504F /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + F9AE1B71347201EE89BE0806 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -72,15 +72,15 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 7A3E185740DAC63465A5A0E6 /* Pods_Runner.framework in Frameworks */, + 9AB22009A18820706AD81113 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - AC1D73307BAC81B2B806AF93 /* Frameworks */ = { + AFA30A28CE543CC77A75F9AB /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - A4219F6AC4D00D3034FC548D /* Pods_RunnerTests.framework in Frameworks */, + DC27A8CB56CD5DE4E84A224C /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -95,20 +95,29 @@ path = RunnerTests; sourceTree = ""; }; - 7A94E796F07EDE3F82EC35DE /* Pods */ = { + 654BBC5DC56CA3A081A1ADED /* Pods */ = { isa = PBXGroup; children = ( - 920AB902BB043618331EFA35 /* Pods-Runner.debug.xcconfig */, - 7BAA2A1961D6FE30EC03121E /* Pods-Runner.release.xcconfig */, - AC5FD504755D21290C41360B /* Pods-Runner.profile.xcconfig */, - 41D80782A2C029BE1DD3246B /* Pods-RunnerTests.debug.xcconfig */, - 39C628DD2A4C446CBD810133 /* Pods-RunnerTests.release.xcconfig */, - 2032B207FF08187AED54B9FC /* Pods-RunnerTests.profile.xcconfig */, + 243E04C58B5A84246D9A035F /* Pods-Runner.debug.xcconfig */, + 87F24E329974E2818B029853 /* Pods-Runner.release.xcconfig */, + 0809AFAB09BE400CC9C71632 /* Pods-Runner.profile.xcconfig */, + C107378B45E65427339B504F /* Pods-RunnerTests.debug.xcconfig */, + F9AE1B71347201EE89BE0806 /* Pods-RunnerTests.release.xcconfig */, + 55CC8D4541E22C5B25AD0833 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; sourceTree = ""; }; + 8E8D3BD59E0E5BF1AE8F2297 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 4084FD514DF2FE771D67623D /* Pods_Runner.framework */, + 9BF5425D050B38EE5507F70E /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( @@ -127,8 +136,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - 7A94E796F07EDE3F82EC35DE /* Pods */, - A732726D197A8A98F267BB38 /* Frameworks */, + 654BBC5DC56CA3A081A1ADED /* Pods */, + 8E8D3BD59E0E5BF1AE8F2297 /* Frameworks */, ); sourceTree = ""; }; @@ -156,15 +165,6 @@ path = Runner; sourceTree = ""; }; - A732726D197A8A98F267BB38 /* Frameworks */ = { - isa = PBXGroup; - children = ( - DB783E9FB0A9B4C82122A30C /* Pods_Runner.framework */, - 3E0492A4185411528F5DAD04 /* Pods_RunnerTests.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - C9C0B9C43F58F666E1099DB6 /* [CP] Check Pods Manifest.lock */, + 4F6DEC4D3A323AEA9C1B473B /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - AC1D73307BAC81B2B806AF93 /* Frameworks */, + AFA30A28CE543CC77A75F9AB /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 1BDA73C66D8E0962580B61CE /* [CP] Check Pods Manifest.lock */, + FE4AA9357DF3941274A1CE72 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - E14EB5B7FC900F3DD6C59281 /* [CP] Embed Pods Frameworks */, + 30432F4012B8682E6E80D861 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -270,26 +270,21 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 1BDA73C66D8E0962580B61CE /* [CP] Check Pods Manifest.lock */ = { + 30432F4012B8682E6E80D861 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { @@ -308,6 +303,28 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; + 4F6DEC4D3A323AEA9C1B473B /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -323,7 +340,7 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - C9C0B9C43F58F666E1099DB6 /* [CP] Check Pods Manifest.lock */ = { + FE4AA9357DF3941274A1CE72 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -338,30 +355,13 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - E14EB5B7FC900F3DD6C59281 /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 41D80782A2C029BE1DD3246B /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = C107378B45E65427339B504F /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 39C628DD2A4C446CBD810133 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = F9AE1B71347201EE89BE0806 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 2032B207FF08187AED54B9FC /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 55CC8D4541E22C5B25AD0833 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/audio_soloud/step_05/macos/Runner.xcodeproj/project.pbxproj b/audio_soloud/step_05/macos/Runner.xcodeproj/project.pbxproj index 97e3f10812..5e02e9dcef 100644 --- a/audio_soloud/step_05/macos/Runner.xcodeproj/project.pbxproj +++ b/audio_soloud/step_05/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ + 021F759E721EF64C544A8363 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6D73FB09AEC34D9A29A84861 /* Pods_RunnerTests.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 63FE1165F951769BF06347FE /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3B86527FB38C0DF3A31A993D /* Pods_RunnerTests.framework */; }; - 9562110F7C3EE4D27DC39713 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 528B075E892C92A1497BC5F8 /* Pods_Runner.framework */; }; + F0DB804B75023E840A67AC08 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F26B0CD6A6A6579AAAD05895 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,7 +62,8 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 042B79579D0C246C002451EF /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 14EA7F03C71924E5E8482549 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 2DEDA63086BAD8245C408DA0 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -79,15 +80,14 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 3B86527FB38C0DF3A31A993D /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 528B075E892C92A1497BC5F8 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 611D011EF4B1D75B226AC58A /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 3C4682DB4904E9E40A0D3744 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 6D73FB09AEC34D9A29A84861 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 7F677BC8FF75C95809A52828 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 8BEE52B223164EF40716553C /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - D47806E81D005579F7359B75 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - DDD6890BB5392767E3D25BF1 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 9828B5D08E218D80A809C7C2 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 9A0E60FB5B3E199FF0419D8D /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + DEA1E41A45C9C8F9312B81B9 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + F26B0CD6A6A6579AAAD05895 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 63FE1165F951769BF06347FE /* Pods_RunnerTests.framework in Frameworks */, + 021F759E721EF64C544A8363 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,7 +103,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 9562110F7C3EE4D27DC39713 /* Pods_Runner.framework in Frameworks */, + F0DB804B75023E840A67AC08 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -137,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 86EEC1D932993C343FFEBD96 /* Pods */, + 7F7E7662DDCA89EC700943C7 /* Pods */, ); sourceTree = ""; }; @@ -185,15 +185,15 @@ path = Runner; sourceTree = ""; }; - 86EEC1D932993C343FFEBD96 /* Pods */ = { + 7F7E7662DDCA89EC700943C7 /* Pods */ = { isa = PBXGroup; children = ( - 7F677BC8FF75C95809A52828 /* Pods-Runner.debug.xcconfig */, - 042B79579D0C246C002451EF /* Pods-Runner.release.xcconfig */, - 8BEE52B223164EF40716553C /* Pods-Runner.profile.xcconfig */, - DDD6890BB5392767E3D25BF1 /* Pods-RunnerTests.debug.xcconfig */, - D47806E81D005579F7359B75 /* Pods-RunnerTests.release.xcconfig */, - 611D011EF4B1D75B226AC58A /* Pods-RunnerTests.profile.xcconfig */, + 2DEDA63086BAD8245C408DA0 /* Pods-Runner.debug.xcconfig */, + 9A0E60FB5B3E199FF0419D8D /* Pods-Runner.release.xcconfig */, + 3C4682DB4904E9E40A0D3744 /* Pods-Runner.profile.xcconfig */, + 9828B5D08E218D80A809C7C2 /* Pods-RunnerTests.debug.xcconfig */, + 14EA7F03C71924E5E8482549 /* Pods-RunnerTests.release.xcconfig */, + DEA1E41A45C9C8F9312B81B9 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -202,8 +202,8 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - 528B075E892C92A1497BC5F8 /* Pods_Runner.framework */, - 3B86527FB38C0DF3A31A993D /* Pods_RunnerTests.framework */, + F26B0CD6A6A6579AAAD05895 /* Pods_Runner.framework */, + 6D73FB09AEC34D9A29A84861 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - FD6E47669C69DEF45E11B96D /* [CP] Check Pods Manifest.lock */, + 4B6B13A4559E7B5D33266C8F /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 60447F611E9A6283CDB5086A /* [CP] Check Pods Manifest.lock */, + E66D866C1A242277B6B38D20 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 8EACF5ACF629A57301D9AD23 /* [CP] Embed Pods Frameworks */, + D860BD48C73949EB26D8E809 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -361,7 +361,7 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 60447F611E9A6283CDB5086A /* [CP] Check Pods Manifest.lock */ = { + 4B6B13A4559E7B5D33266C8F /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -376,14 +376,14 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 8EACF5ACF629A57301D9AD23 /* [CP] Embed Pods Frameworks */ = { + D860BD48C73949EB26D8E809 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -400,7 +400,7 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - FD6E47669C69DEF45E11B96D /* [CP] Check Pods Manifest.lock */ = { + E66D866C1A242277B6B38D20 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -415,7 +415,7 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = DDD6890BB5392767E3D25BF1 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 9828B5D08E218D80A809C7C2 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = D47806E81D005579F7359B75 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 14EA7F03C71924E5E8482549 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 611D011EF4B1D75B226AC58A /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = DEA1E41A45C9C8F9312B81B9 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/audio_soloud/step_05/macos/Runner/Configs/AppInfo.xcconfig b/audio_soloud/step_05/macos/Runner/Configs/AppInfo.xcconfig index a5c6fc7009..7674c48079 100644 --- a/audio_soloud/step_05/macos/Runner/Configs/AppInfo.xcconfig +++ b/audio_soloud/step_05/macos/Runner/Configs/AppInfo.xcconfig @@ -11,4 +11,4 @@ PRODUCT_NAME = audio_soloud PRODUCT_BUNDLE_IDENTIFIER = com.example.audioSoloud // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. diff --git a/audio_soloud/step_05/windows/runner/Runner.rc b/audio_soloud/step_05/windows/runner/Runner.rc index c4be3ef074..3a8f5df939 100644 --- a/audio_soloud/step_05/windows/runner/Runner.rc +++ b/audio_soloud/step_05/windows/runner/Runner.rc @@ -93,7 +93,7 @@ BEGIN VALUE "FileDescription", "audio_soloud" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "InternalName", "audio_soloud" "\0" - VALUE "LegalCopyright", "Copyright (C) 2024 com.example. All rights reserved." "\0" + VALUE "LegalCopyright", "Copyright (C) 2025 com.example. All rights reserved." "\0" VALUE "OriginalFilename", "audio_soloud.exe" "\0" VALUE "ProductName", "audio_soloud" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" diff --git a/audio_soloud/step_06/android/app/src/main/kotlin/com/example/audio_soloud/MainActivity.kt b/audio_soloud/step_06/android/app/src/main/kotlin/com/example/audio_soloud/MainActivity.kt index 97f37d1195..b859911758 100644 --- a/audio_soloud/step_06/android/app/src/main/kotlin/com/example/audio_soloud/MainActivity.kt +++ b/audio_soloud/step_06/android/app/src/main/kotlin/com/example/audio_soloud/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.audio_soloud import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/audio_soloud/step_06/ios/Runner.xcodeproj/project.pbxproj b/audio_soloud/step_06/ios/Runner.xcodeproj/project.pbxproj index 41c76d5787..f83bbbc429 100644 --- a/audio_soloud/step_06/ios/Runner.xcodeproj/project.pbxproj +++ b/audio_soloud/step_06/ios/Runner.xcodeproj/project.pbxproj @@ -11,11 +11,11 @@ 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; - 7A3E185740DAC63465A5A0E6 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DB783E9FB0A9B4C82122A30C /* Pods_Runner.framework */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - A4219F6AC4D00D3034FC548D /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3E0492A4185411528F5DAD04 /* Pods_RunnerTests.framework */; }; + 9AB22009A18820706AD81113 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4084FD514DF2FE771D67623D /* Pods_Runner.framework */; }; + DC27A8CB56CD5DE4E84A224C /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9BF5425D050B38EE5507F70E /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,20 +42,19 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 0809AFAB09BE400CC9C71632 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 2032B207FF08187AED54B9FC /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 243E04C58B5A84246D9A035F /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 39C628DD2A4C446CBD810133 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 3E0492A4185411528F5DAD04 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 41D80782A2C029BE1DD3246B /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 4084FD514DF2FE771D67623D /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 55CC8D4541E22C5B25AD0833 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 7BAA2A1961D6FE30EC03121E /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 920AB902BB043618331EFA35 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 87F24E329974E2818B029853 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -63,8 +62,9 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - AC5FD504755D21290C41360B /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - DB783E9FB0A9B4C82122A30C /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 9BF5425D050B38EE5507F70E /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + C107378B45E65427339B504F /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + F9AE1B71347201EE89BE0806 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -72,15 +72,15 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 7A3E185740DAC63465A5A0E6 /* Pods_Runner.framework in Frameworks */, + 9AB22009A18820706AD81113 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - AC1D73307BAC81B2B806AF93 /* Frameworks */ = { + AFA30A28CE543CC77A75F9AB /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - A4219F6AC4D00D3034FC548D /* Pods_RunnerTests.framework in Frameworks */, + DC27A8CB56CD5DE4E84A224C /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -95,20 +95,29 @@ path = RunnerTests; sourceTree = ""; }; - 7A94E796F07EDE3F82EC35DE /* Pods */ = { + 654BBC5DC56CA3A081A1ADED /* Pods */ = { isa = PBXGroup; children = ( - 920AB902BB043618331EFA35 /* Pods-Runner.debug.xcconfig */, - 7BAA2A1961D6FE30EC03121E /* Pods-Runner.release.xcconfig */, - AC5FD504755D21290C41360B /* Pods-Runner.profile.xcconfig */, - 41D80782A2C029BE1DD3246B /* Pods-RunnerTests.debug.xcconfig */, - 39C628DD2A4C446CBD810133 /* Pods-RunnerTests.release.xcconfig */, - 2032B207FF08187AED54B9FC /* Pods-RunnerTests.profile.xcconfig */, + 243E04C58B5A84246D9A035F /* Pods-Runner.debug.xcconfig */, + 87F24E329974E2818B029853 /* Pods-Runner.release.xcconfig */, + 0809AFAB09BE400CC9C71632 /* Pods-Runner.profile.xcconfig */, + C107378B45E65427339B504F /* Pods-RunnerTests.debug.xcconfig */, + F9AE1B71347201EE89BE0806 /* Pods-RunnerTests.release.xcconfig */, + 55CC8D4541E22C5B25AD0833 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; sourceTree = ""; }; + 8E8D3BD59E0E5BF1AE8F2297 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 4084FD514DF2FE771D67623D /* Pods_Runner.framework */, + 9BF5425D050B38EE5507F70E /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( @@ -127,8 +136,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - 7A94E796F07EDE3F82EC35DE /* Pods */, - A732726D197A8A98F267BB38 /* Frameworks */, + 654BBC5DC56CA3A081A1ADED /* Pods */, + 8E8D3BD59E0E5BF1AE8F2297 /* Frameworks */, ); sourceTree = ""; }; @@ -156,15 +165,6 @@ path = Runner; sourceTree = ""; }; - A732726D197A8A98F267BB38 /* Frameworks */ = { - isa = PBXGroup; - children = ( - DB783E9FB0A9B4C82122A30C /* Pods_Runner.framework */, - 3E0492A4185411528F5DAD04 /* Pods_RunnerTests.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - C9C0B9C43F58F666E1099DB6 /* [CP] Check Pods Manifest.lock */, + 4F6DEC4D3A323AEA9C1B473B /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - AC1D73307BAC81B2B806AF93 /* Frameworks */, + AFA30A28CE543CC77A75F9AB /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 1BDA73C66D8E0962580B61CE /* [CP] Check Pods Manifest.lock */, + FE4AA9357DF3941274A1CE72 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - E14EB5B7FC900F3DD6C59281 /* [CP] Embed Pods Frameworks */, + 30432F4012B8682E6E80D861 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -270,26 +270,21 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 1BDA73C66D8E0962580B61CE /* [CP] Check Pods Manifest.lock */ = { + 30432F4012B8682E6E80D861 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { @@ -308,6 +303,28 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; + 4F6DEC4D3A323AEA9C1B473B /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -323,7 +340,7 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - C9C0B9C43F58F666E1099DB6 /* [CP] Check Pods Manifest.lock */ = { + FE4AA9357DF3941274A1CE72 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -338,30 +355,13 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - E14EB5B7FC900F3DD6C59281 /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 41D80782A2C029BE1DD3246B /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = C107378B45E65427339B504F /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 39C628DD2A4C446CBD810133 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = F9AE1B71347201EE89BE0806 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 2032B207FF08187AED54B9FC /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 55CC8D4541E22C5B25AD0833 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/audio_soloud/step_06/macos/Runner.xcodeproj/project.pbxproj b/audio_soloud/step_06/macos/Runner.xcodeproj/project.pbxproj index 97e3f10812..5e02e9dcef 100644 --- a/audio_soloud/step_06/macos/Runner.xcodeproj/project.pbxproj +++ b/audio_soloud/step_06/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ + 021F759E721EF64C544A8363 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6D73FB09AEC34D9A29A84861 /* Pods_RunnerTests.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 63FE1165F951769BF06347FE /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3B86527FB38C0DF3A31A993D /* Pods_RunnerTests.framework */; }; - 9562110F7C3EE4D27DC39713 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 528B075E892C92A1497BC5F8 /* Pods_Runner.framework */; }; + F0DB804B75023E840A67AC08 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F26B0CD6A6A6579AAAD05895 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,7 +62,8 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 042B79579D0C246C002451EF /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 14EA7F03C71924E5E8482549 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 2DEDA63086BAD8245C408DA0 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -79,15 +80,14 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 3B86527FB38C0DF3A31A993D /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 528B075E892C92A1497BC5F8 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 611D011EF4B1D75B226AC58A /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 3C4682DB4904E9E40A0D3744 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 6D73FB09AEC34D9A29A84861 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 7F677BC8FF75C95809A52828 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 8BEE52B223164EF40716553C /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - D47806E81D005579F7359B75 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - DDD6890BB5392767E3D25BF1 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 9828B5D08E218D80A809C7C2 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 9A0E60FB5B3E199FF0419D8D /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + DEA1E41A45C9C8F9312B81B9 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + F26B0CD6A6A6579AAAD05895 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 63FE1165F951769BF06347FE /* Pods_RunnerTests.framework in Frameworks */, + 021F759E721EF64C544A8363 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,7 +103,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 9562110F7C3EE4D27DC39713 /* Pods_Runner.framework in Frameworks */, + F0DB804B75023E840A67AC08 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -137,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 86EEC1D932993C343FFEBD96 /* Pods */, + 7F7E7662DDCA89EC700943C7 /* Pods */, ); sourceTree = ""; }; @@ -185,15 +185,15 @@ path = Runner; sourceTree = ""; }; - 86EEC1D932993C343FFEBD96 /* Pods */ = { + 7F7E7662DDCA89EC700943C7 /* Pods */ = { isa = PBXGroup; children = ( - 7F677BC8FF75C95809A52828 /* Pods-Runner.debug.xcconfig */, - 042B79579D0C246C002451EF /* Pods-Runner.release.xcconfig */, - 8BEE52B223164EF40716553C /* Pods-Runner.profile.xcconfig */, - DDD6890BB5392767E3D25BF1 /* Pods-RunnerTests.debug.xcconfig */, - D47806E81D005579F7359B75 /* Pods-RunnerTests.release.xcconfig */, - 611D011EF4B1D75B226AC58A /* Pods-RunnerTests.profile.xcconfig */, + 2DEDA63086BAD8245C408DA0 /* Pods-Runner.debug.xcconfig */, + 9A0E60FB5B3E199FF0419D8D /* Pods-Runner.release.xcconfig */, + 3C4682DB4904E9E40A0D3744 /* Pods-Runner.profile.xcconfig */, + 9828B5D08E218D80A809C7C2 /* Pods-RunnerTests.debug.xcconfig */, + 14EA7F03C71924E5E8482549 /* Pods-RunnerTests.release.xcconfig */, + DEA1E41A45C9C8F9312B81B9 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -202,8 +202,8 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - 528B075E892C92A1497BC5F8 /* Pods_Runner.framework */, - 3B86527FB38C0DF3A31A993D /* Pods_RunnerTests.framework */, + F26B0CD6A6A6579AAAD05895 /* Pods_Runner.framework */, + 6D73FB09AEC34D9A29A84861 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - FD6E47669C69DEF45E11B96D /* [CP] Check Pods Manifest.lock */, + 4B6B13A4559E7B5D33266C8F /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 60447F611E9A6283CDB5086A /* [CP] Check Pods Manifest.lock */, + E66D866C1A242277B6B38D20 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 8EACF5ACF629A57301D9AD23 /* [CP] Embed Pods Frameworks */, + D860BD48C73949EB26D8E809 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -361,7 +361,7 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 60447F611E9A6283CDB5086A /* [CP] Check Pods Manifest.lock */ = { + 4B6B13A4559E7B5D33266C8F /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -376,14 +376,14 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 8EACF5ACF629A57301D9AD23 /* [CP] Embed Pods Frameworks */ = { + D860BD48C73949EB26D8E809 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -400,7 +400,7 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - FD6E47669C69DEF45E11B96D /* [CP] Check Pods Manifest.lock */ = { + E66D866C1A242277B6B38D20 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -415,7 +415,7 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = DDD6890BB5392767E3D25BF1 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 9828B5D08E218D80A809C7C2 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = D47806E81D005579F7359B75 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 14EA7F03C71924E5E8482549 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 611D011EF4B1D75B226AC58A /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = DEA1E41A45C9C8F9312B81B9 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/audio_soloud/step_06/macos/Runner/Configs/AppInfo.xcconfig b/audio_soloud/step_06/macos/Runner/Configs/AppInfo.xcconfig index a5c6fc7009..7674c48079 100644 --- a/audio_soloud/step_06/macos/Runner/Configs/AppInfo.xcconfig +++ b/audio_soloud/step_06/macos/Runner/Configs/AppInfo.xcconfig @@ -11,4 +11,4 @@ PRODUCT_NAME = audio_soloud PRODUCT_BUNDLE_IDENTIFIER = com.example.audioSoloud // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. diff --git a/audio_soloud/step_06/windows/runner/Runner.rc b/audio_soloud/step_06/windows/runner/Runner.rc index c4be3ef074..3a8f5df939 100644 --- a/audio_soloud/step_06/windows/runner/Runner.rc +++ b/audio_soloud/step_06/windows/runner/Runner.rc @@ -93,7 +93,7 @@ BEGIN VALUE "FileDescription", "audio_soloud" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "InternalName", "audio_soloud" "\0" - VALUE "LegalCopyright", "Copyright (C) 2024 com.example. All rights reserved." "\0" + VALUE "LegalCopyright", "Copyright (C) 2025 com.example. All rights reserved." "\0" VALUE "OriginalFilename", "audio_soloud.exe" "\0" VALUE "ProductName", "audio_soloud" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" From f616aa00ba57fb7f6a469547b4ac12ec93446dd0 Mon Sep 17 00:00:00 2001 From: Brett Morgan Date: Wed, 22 Jan 2025 12:25:08 +1100 Subject: [PATCH 092/108] Update `boring_to_beautiful` --- .../com/example/myartist/MainActivity.kt | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 126 +++++++++--------- .../macos/Runner.xcodeproj/project.pbxproj | 96 ++++++------- .../macos/Runner/Configs/AppInfo.xcconfig | 2 +- boring_to_beautiful/final/pubspec.yaml | 8 +- .../final/windows/runner/Runner.rc | 2 +- .../com/example/myartist/MainActivity.kt | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 126 +++++++++--------- .../macos/Runner.xcodeproj/project.pbxproj | 96 ++++++------- .../macos/Runner/Configs/AppInfo.xcconfig | 2 +- boring_to_beautiful/step_01/pubspec.yaml | 8 +- .../step_01/windows/runner/Runner.rc | 2 +- .../com/example/myartist/MainActivity.kt | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 126 +++++++++--------- .../macos/Runner.xcodeproj/project.pbxproj | 96 ++++++------- .../macos/Runner/Configs/AppInfo.xcconfig | 2 +- boring_to_beautiful/step_02/pubspec.yaml | 8 +- .../step_02/windows/runner/Runner.rc | 2 +- .../com/example/myartist/MainActivity.kt | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 126 +++++++++--------- .../macos/Runner.xcodeproj/project.pbxproj | 96 ++++++------- .../macos/Runner/Configs/AppInfo.xcconfig | 2 +- boring_to_beautiful/step_03/pubspec.yaml | 8 +- .../step_03/windows/runner/Runner.rc | 2 +- .../com/example/myartist/MainActivity.kt | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 126 +++++++++--------- .../macos/Runner.xcodeproj/project.pbxproj | 96 ++++++------- .../macos/Runner/Configs/AppInfo.xcconfig | 2 +- boring_to_beautiful/step_04/pubspec.yaml | 8 +- .../step_04/windows/runner/Runner.rc | 2 +- .../com/example/myartist/MainActivity.kt | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 126 +++++++++--------- .../macos/Runner.xcodeproj/project.pbxproj | 96 ++++++------- .../macos/Runner/Configs/AppInfo.xcconfig | 2 +- boring_to_beautiful/step_05/pubspec.yaml | 8 +- .../step_05/windows/runner/Runner.rc | 2 +- .../com/example/myartist/MainActivity.kt | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 126 +++++++++--------- .../macos/Runner.xcodeproj/project.pbxproj | 96 ++++++------- .../macos/Runner/Configs/AppInfo.xcconfig | 2 +- boring_to_beautiful/step_06/pubspec.yaml | 8 +- .../step_06/windows/runner/Runner.rc | 2 +- .../com/example/myartist/MainActivity.kt | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 126 +++++++++--------- .../macos/Runner.xcodeproj/project.pbxproj | 96 ++++++------- .../macos/Runner/Configs/AppInfo.xcconfig | 2 +- boring_to_beautiful/step_07/pubspec.yaml | 8 +- .../step_07/windows/runner/Runner.rc | 2 +- 48 files changed, 944 insertions(+), 944 deletions(-) diff --git a/boring_to_beautiful/final/android/app/src/main/kotlin/com/example/myartist/MainActivity.kt b/boring_to_beautiful/final/android/app/src/main/kotlin/com/example/myartist/MainActivity.kt index b724a01056..1e328c8556 100644 --- a/boring_to_beautiful/final/android/app/src/main/kotlin/com/example/myartist/MainActivity.kt +++ b/boring_to_beautiful/final/android/app/src/main/kotlin/com/example/myartist/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.myartist import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/boring_to_beautiful/final/ios/Runner.xcodeproj/project.pbxproj b/boring_to_beautiful/final/ios/Runner.xcodeproj/project.pbxproj index b3c1ee164f..6861a51941 100644 --- a/boring_to_beautiful/final/ios/Runner.xcodeproj/project.pbxproj +++ b/boring_to_beautiful/final/ios/Runner.xcodeproj/project.pbxproj @@ -10,9 +10,9 @@ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; - 4A42DFD328E0C2B11408D3A4 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A02EA99B51CD516C48F82B4E /* Pods_Runner.framework */; }; + 5D265AD7AE143CD184DAEC85 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8268D8C4F148188A17517348 /* Pods_RunnerTests.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; - 8B011954D9D5132E3C2239DA /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 38BF2318834F482DB8E14E2F /* Pods_RunnerTests.framework */; }; + 950BD5DB50746D52FA789638 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D2D48B5E56C94A19C89C8C03 /* Pods_Runner.framework */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; @@ -44,16 +44,16 @@ /* Begin PBXFileReference section */ 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; + 1ED7A7E88E6CCF719CB6DAC9 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 38BF2318834F482DB8E14E2F /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 6051B81DFE61FB123E553BE1 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 643807BDC78C0383EF22EEDE /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 894A76F52AB0EFA9A4A14CAF /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 8268D8C4F148188A17517348 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 87131577985E3393D3F27215 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 8FE5EA0C6F2B1340299150E1 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -61,32 +61,46 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - A02EA99B51CD516C48F82B4E /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - C95026BDC8B11A144B745B0F /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - E3C370D2330CDDCE7C7A1F28 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - E7909BB54F5FE45499392BA1 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + ACB57CED31D1A4F32F703235 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + B58FBDC83D68252855385083 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + D2D48B5E56C94A19C89C8C03 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D59AC870764873088B0F5386 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 382585DD6068E1C378B9C0A5 /* Frameworks */ = { + 97C146EB1CF9000F007C117D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 8B011954D9D5132E3C2239DA /* Pods_RunnerTests.framework in Frameworks */, + 950BD5DB50746D52FA789638 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 97C146EB1CF9000F007C117D /* Frameworks */ = { + B08DB3FEBC152015B17EEAE2 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 4A42DFD328E0C2B11408D3A4 /* Pods_Runner.framework in Frameworks */, + 5D265AD7AE143CD184DAEC85 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 2059A7B824563811B495255D /* Pods */ = { + isa = PBXGroup; + children = ( + 87131577985E3393D3F27215 /* Pods-Runner.debug.xcconfig */, + B58FBDC83D68252855385083 /* Pods-Runner.release.xcconfig */, + 8FE5EA0C6F2B1340299150E1 /* Pods-Runner.profile.xcconfig */, + 1ED7A7E88E6CCF719CB6DAC9 /* Pods-RunnerTests.debug.xcconfig */, + D59AC870764873088B0F5386 /* Pods-RunnerTests.release.xcconfig */, + ACB57CED31D1A4F32F703235 /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; 331C8082294A63A400263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -95,6 +109,15 @@ path = RunnerTests; sourceTree = ""; }; + 781E91E7C136FCD5F8C1FF46 /* Frameworks */ = { + isa = PBXGroup; + children = ( + D2D48B5E56C94A19C89C8C03 /* Pods_Runner.framework */, + 8268D8C4F148188A17517348 /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( @@ -113,8 +136,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - D8480061B1B10D02253D3FB3 /* Pods */, - C5F5B9731F65E009FD2CF172 /* Frameworks */, + 2059A7B824563811B495255D /* Pods */, + 781E91E7C136FCD5F8C1FF46 /* Frameworks */, ); sourceTree = ""; }; @@ -142,29 +165,6 @@ path = Runner; sourceTree = ""; }; - C5F5B9731F65E009FD2CF172 /* Frameworks */ = { - isa = PBXGroup; - children = ( - A02EA99B51CD516C48F82B4E /* Pods_Runner.framework */, - 38BF2318834F482DB8E14E2F /* Pods_RunnerTests.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; - D8480061B1B10D02253D3FB3 /* Pods */ = { - isa = PBXGroup; - children = ( - 643807BDC78C0383EF22EEDE /* Pods-Runner.debug.xcconfig */, - E3C370D2330CDDCE7C7A1F28 /* Pods-Runner.release.xcconfig */, - C95026BDC8B11A144B745B0F /* Pods-Runner.profile.xcconfig */, - 6051B81DFE61FB123E553BE1 /* Pods-RunnerTests.debug.xcconfig */, - 894A76F52AB0EFA9A4A14CAF /* Pods-RunnerTests.release.xcconfig */, - E7909BB54F5FE45499392BA1 /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 5933D500DE35F134BBF37298 /* [CP] Check Pods Manifest.lock */, + DA1A9725D0F67A848DF38576 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 382585DD6068E1C378B9C0A5 /* Frameworks */, + B08DB3FEBC152015B17EEAE2 /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 90A4664A0493DFE5BA3F0C78 /* [CP] Check Pods Manifest.lock */, + CE6B051E5DD2E4A8A63EDB9B /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 588E11D3E264FFA3FCD8329B /* [CP] Embed Pods Frameworks */, + 910A46B266D0EDE811A7754F /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -286,7 +286,7 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 588E11D3E264FFA3FCD8329B /* [CP] Embed Pods Frameworks */ = { + 910A46B266D0EDE811A7754F /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -303,29 +303,22 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - 5933D500DE35F134BBF37298 /* [CP] Check Pods Manifest.lock */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( ); + name = "Run Script"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - 90A4664A0493DFE5BA3F0C78 /* [CP] Check Pods Manifest.lock */ = { + CE6B051E5DD2E4A8A63EDB9B /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -347,20 +340,27 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { + DA1A9725D0F67A848DF38576 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "Run Script"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 6051B81DFE61FB123E553BE1 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 1ED7A7E88E6CCF719CB6DAC9 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 894A76F52AB0EFA9A4A14CAF /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = D59AC870764873088B0F5386 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = E7909BB54F5FE45499392BA1 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = ACB57CED31D1A4F32F703235 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/boring_to_beautiful/final/macos/Runner.xcodeproj/project.pbxproj b/boring_to_beautiful/final/macos/Runner.xcodeproj/project.pbxproj index 550d580704..fef5644e2b 100644 --- a/boring_to_beautiful/final/macos/Runner.xcodeproj/project.pbxproj +++ b/boring_to_beautiful/final/macos/Runner.xcodeproj/project.pbxproj @@ -27,8 +27,8 @@ 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 51C1678A490EFAA9FD4EA1D8 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 78D281624421AE1E5EBDC669 /* Pods_Runner.framework */; }; - 815ABAC7310F28FE9DE17C90 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F5118B6D9BB7780F9EA132CE /* Pods_RunnerTests.framework */; }; + 8F86CC48F84BC945E6BB473E /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E4ACB22C2282ABF3956B25A9 /* Pods_RunnerTests.framework */; }; + B86B413C29212C31FC38EC3F /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 04ABCC5B449296110056E869 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,6 +62,9 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 04ABCC5B449296110056E869 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 25AEB0B4D9F2B7DE622ADD81 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 2C1F704CCF23FEB170D14D8D /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -78,16 +81,13 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 4B4A8142B74E7DB324D6CEC7 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - 78D281624421AE1E5EBDC669 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 6472EEBBCF09C3B25D8B2B86 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 78748BFA245045FBDE6ADA5B /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; + 95A6C08F876848F75FEA8E45 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - C443135232D66CD6898F295B /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - C5AA25FE3D1893D2D323B0E5 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - CA69B878DDE343EF556D0913 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - CA79325D6AA2D545A5650B98 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - D557F6B84B2A2A778999E43D /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - F5118B6D9BB7780F9EA132CE /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + C50E54638BEDED6CDD076255 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + E4ACB22C2282ABF3956B25A9 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 815ABAC7310F28FE9DE17C90 /* Pods_RunnerTests.framework in Frameworks */, + 8F86CC48F84BC945E6BB473E /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,7 +103,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 51C1678A490EFAA9FD4EA1D8 /* Pods_Runner.framework in Frameworks */, + B86B413C29212C31FC38EC3F /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -137,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - D9C725E837347320472EF00E /* Pods */, + 387E452E15F75ADFE5831EB2 /* Pods */, ); sourceTree = ""; }; @@ -185,27 +185,27 @@ path = Runner; sourceTree = ""; }; - D73912EC22F37F3D000D13A0 /* Frameworks */ = { + 387E452E15F75ADFE5831EB2 /* Pods */ = { isa = PBXGroup; children = ( - 78D281624421AE1E5EBDC669 /* Pods_Runner.framework */, - F5118B6D9BB7780F9EA132CE /* Pods_RunnerTests.framework */, + 25AEB0B4D9F2B7DE622ADD81 /* Pods-Runner.debug.xcconfig */, + 6472EEBBCF09C3B25D8B2B86 /* Pods-Runner.release.xcconfig */, + C50E54638BEDED6CDD076255 /* Pods-Runner.profile.xcconfig */, + 2C1F704CCF23FEB170D14D8D /* Pods-RunnerTests.debug.xcconfig */, + 78748BFA245045FBDE6ADA5B /* Pods-RunnerTests.release.xcconfig */, + 95A6C08F876848F75FEA8E45 /* Pods-RunnerTests.profile.xcconfig */, ); - name = Frameworks; + name = Pods; + path = Pods; sourceTree = ""; }; - D9C725E837347320472EF00E /* Pods */ = { + D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - D557F6B84B2A2A778999E43D /* Pods-Runner.debug.xcconfig */, - C443135232D66CD6898F295B /* Pods-Runner.release.xcconfig */, - 4B4A8142B74E7DB324D6CEC7 /* Pods-Runner.profile.xcconfig */, - C5AA25FE3D1893D2D323B0E5 /* Pods-RunnerTests.debug.xcconfig */, - CA69B878DDE343EF556D0913 /* Pods-RunnerTests.release.xcconfig */, - CA79325D6AA2D545A5650B98 /* Pods-RunnerTests.profile.xcconfig */, + 04ABCC5B449296110056E869 /* Pods_Runner.framework */, + E4ACB22C2282ABF3956B25A9 /* Pods_RunnerTests.framework */, ); - name = Pods; - path = Pods; + name = Frameworks; sourceTree = ""; }; /* End PBXGroup section */ @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - D25673144C910A3282177B04 /* [CP] Check Pods Manifest.lock */, + DD21301A874393BF3ACDAA55 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - ABB374ED3576FD858355276B /* [CP] Check Pods Manifest.lock */, + 6CF97FA4FC5D30AA4AB0F085 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - A43F5D11D0093E10F947CBCA /* [CP] Embed Pods Frameworks */, + A536B83DA650A5A2D045D27C /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -361,46 +361,46 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - A43F5D11D0093E10F947CBCA /* [CP] Embed Pods Frameworks */ = { + 6CF97FA4FC5D30AA4AB0F085 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - ABB374ED3576FD858355276B /* [CP] Check Pods Manifest.lock */ = { + A536B83DA650A5A2D045D27C /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - D25673144C910A3282177B04 /* [CP] Check Pods Manifest.lock */ = { + DD21301A874393BF3ACDAA55 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C5AA25FE3D1893D2D323B0E5 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 2C1F704CCF23FEB170D14D8D /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = CA69B878DDE343EF556D0913 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 78748BFA245045FBDE6ADA5B /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = CA79325D6AA2D545A5650B98 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 95A6C08F876848F75FEA8E45 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/boring_to_beautiful/final/macos/Runner/Configs/AppInfo.xcconfig b/boring_to_beautiful/final/macos/Runner/Configs/AppInfo.xcconfig index ecc8702534..e31e407170 100644 --- a/boring_to_beautiful/final/macos/Runner/Configs/AppInfo.xcconfig +++ b/boring_to_beautiful/final/macos/Runner/Configs/AppInfo.xcconfig @@ -11,4 +11,4 @@ PRODUCT_NAME = myartist PRODUCT_BUNDLE_IDENTIFIER = com.example.myartist // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. diff --git a/boring_to_beautiful/final/pubspec.yaml b/boring_to_beautiful/final/pubspec.yaml index 0dcd53a572..52e0f25e78 100644 --- a/boring_to_beautiful/final/pubspec.yaml +++ b/boring_to_beautiful/final/pubspec.yaml @@ -18,9 +18,9 @@ dependencies: desktop_window: ^0.4.2 dynamic_color: ^1.7.0 english_words: ^4.0.0 - flutter_bloc: ^8.1.6 + flutter_bloc: ^9.0.0 freezed_annotation: ^2.4.4 - go_router: ^14.6.2 + go_router: ^14.6.3 material_color_utilities: any universal_platform: ^1.1.0 url_launcher: ^6.3.1 @@ -29,9 +29,9 @@ dependencies: dev_dependencies: flutter_test: sdk: flutter - build_runner: ^2.4.13 + build_runner: ^2.4.14 flutter_lints: ^5.0.0 - freezed: ^2.5.7 + freezed: ^2.5.8 flutter: uses-material-design: true diff --git a/boring_to_beautiful/final/windows/runner/Runner.rc b/boring_to_beautiful/final/windows/runner/Runner.rc index daf7b58804..e652dd348f 100644 --- a/boring_to_beautiful/final/windows/runner/Runner.rc +++ b/boring_to_beautiful/final/windows/runner/Runner.rc @@ -93,7 +93,7 @@ BEGIN VALUE "FileDescription", "myartist" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "InternalName", "myartist" "\0" - VALUE "LegalCopyright", "Copyright (C) 2024 com.example. All rights reserved." "\0" + VALUE "LegalCopyright", "Copyright (C) 2025 com.example. All rights reserved." "\0" VALUE "OriginalFilename", "myartist.exe" "\0" VALUE "ProductName", "myartist" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" diff --git a/boring_to_beautiful/step_01/android/app/src/main/kotlin/com/example/myartist/MainActivity.kt b/boring_to_beautiful/step_01/android/app/src/main/kotlin/com/example/myartist/MainActivity.kt index b724a01056..1e328c8556 100644 --- a/boring_to_beautiful/step_01/android/app/src/main/kotlin/com/example/myartist/MainActivity.kt +++ b/boring_to_beautiful/step_01/android/app/src/main/kotlin/com/example/myartist/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.myartist import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/boring_to_beautiful/step_01/ios/Runner.xcodeproj/project.pbxproj b/boring_to_beautiful/step_01/ios/Runner.xcodeproj/project.pbxproj index b3c1ee164f..6861a51941 100644 --- a/boring_to_beautiful/step_01/ios/Runner.xcodeproj/project.pbxproj +++ b/boring_to_beautiful/step_01/ios/Runner.xcodeproj/project.pbxproj @@ -10,9 +10,9 @@ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; - 4A42DFD328E0C2B11408D3A4 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A02EA99B51CD516C48F82B4E /* Pods_Runner.framework */; }; + 5D265AD7AE143CD184DAEC85 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8268D8C4F148188A17517348 /* Pods_RunnerTests.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; - 8B011954D9D5132E3C2239DA /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 38BF2318834F482DB8E14E2F /* Pods_RunnerTests.framework */; }; + 950BD5DB50746D52FA789638 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D2D48B5E56C94A19C89C8C03 /* Pods_Runner.framework */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; @@ -44,16 +44,16 @@ /* Begin PBXFileReference section */ 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; + 1ED7A7E88E6CCF719CB6DAC9 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 38BF2318834F482DB8E14E2F /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 6051B81DFE61FB123E553BE1 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 643807BDC78C0383EF22EEDE /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 894A76F52AB0EFA9A4A14CAF /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 8268D8C4F148188A17517348 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 87131577985E3393D3F27215 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 8FE5EA0C6F2B1340299150E1 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -61,32 +61,46 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - A02EA99B51CD516C48F82B4E /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - C95026BDC8B11A144B745B0F /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - E3C370D2330CDDCE7C7A1F28 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - E7909BB54F5FE45499392BA1 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + ACB57CED31D1A4F32F703235 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + B58FBDC83D68252855385083 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + D2D48B5E56C94A19C89C8C03 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D59AC870764873088B0F5386 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 382585DD6068E1C378B9C0A5 /* Frameworks */ = { + 97C146EB1CF9000F007C117D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 8B011954D9D5132E3C2239DA /* Pods_RunnerTests.framework in Frameworks */, + 950BD5DB50746D52FA789638 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 97C146EB1CF9000F007C117D /* Frameworks */ = { + B08DB3FEBC152015B17EEAE2 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 4A42DFD328E0C2B11408D3A4 /* Pods_Runner.framework in Frameworks */, + 5D265AD7AE143CD184DAEC85 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 2059A7B824563811B495255D /* Pods */ = { + isa = PBXGroup; + children = ( + 87131577985E3393D3F27215 /* Pods-Runner.debug.xcconfig */, + B58FBDC83D68252855385083 /* Pods-Runner.release.xcconfig */, + 8FE5EA0C6F2B1340299150E1 /* Pods-Runner.profile.xcconfig */, + 1ED7A7E88E6CCF719CB6DAC9 /* Pods-RunnerTests.debug.xcconfig */, + D59AC870764873088B0F5386 /* Pods-RunnerTests.release.xcconfig */, + ACB57CED31D1A4F32F703235 /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; 331C8082294A63A400263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -95,6 +109,15 @@ path = RunnerTests; sourceTree = ""; }; + 781E91E7C136FCD5F8C1FF46 /* Frameworks */ = { + isa = PBXGroup; + children = ( + D2D48B5E56C94A19C89C8C03 /* Pods_Runner.framework */, + 8268D8C4F148188A17517348 /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( @@ -113,8 +136,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - D8480061B1B10D02253D3FB3 /* Pods */, - C5F5B9731F65E009FD2CF172 /* Frameworks */, + 2059A7B824563811B495255D /* Pods */, + 781E91E7C136FCD5F8C1FF46 /* Frameworks */, ); sourceTree = ""; }; @@ -142,29 +165,6 @@ path = Runner; sourceTree = ""; }; - C5F5B9731F65E009FD2CF172 /* Frameworks */ = { - isa = PBXGroup; - children = ( - A02EA99B51CD516C48F82B4E /* Pods_Runner.framework */, - 38BF2318834F482DB8E14E2F /* Pods_RunnerTests.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; - D8480061B1B10D02253D3FB3 /* Pods */ = { - isa = PBXGroup; - children = ( - 643807BDC78C0383EF22EEDE /* Pods-Runner.debug.xcconfig */, - E3C370D2330CDDCE7C7A1F28 /* Pods-Runner.release.xcconfig */, - C95026BDC8B11A144B745B0F /* Pods-Runner.profile.xcconfig */, - 6051B81DFE61FB123E553BE1 /* Pods-RunnerTests.debug.xcconfig */, - 894A76F52AB0EFA9A4A14CAF /* Pods-RunnerTests.release.xcconfig */, - E7909BB54F5FE45499392BA1 /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 5933D500DE35F134BBF37298 /* [CP] Check Pods Manifest.lock */, + DA1A9725D0F67A848DF38576 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 382585DD6068E1C378B9C0A5 /* Frameworks */, + B08DB3FEBC152015B17EEAE2 /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 90A4664A0493DFE5BA3F0C78 /* [CP] Check Pods Manifest.lock */, + CE6B051E5DD2E4A8A63EDB9B /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 588E11D3E264FFA3FCD8329B /* [CP] Embed Pods Frameworks */, + 910A46B266D0EDE811A7754F /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -286,7 +286,7 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 588E11D3E264FFA3FCD8329B /* [CP] Embed Pods Frameworks */ = { + 910A46B266D0EDE811A7754F /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -303,29 +303,22 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - 5933D500DE35F134BBF37298 /* [CP] Check Pods Manifest.lock */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( ); + name = "Run Script"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - 90A4664A0493DFE5BA3F0C78 /* [CP] Check Pods Manifest.lock */ = { + CE6B051E5DD2E4A8A63EDB9B /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -347,20 +340,27 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { + DA1A9725D0F67A848DF38576 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "Run Script"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 6051B81DFE61FB123E553BE1 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 1ED7A7E88E6CCF719CB6DAC9 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 894A76F52AB0EFA9A4A14CAF /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = D59AC870764873088B0F5386 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = E7909BB54F5FE45499392BA1 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = ACB57CED31D1A4F32F703235 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/boring_to_beautiful/step_01/macos/Runner.xcodeproj/project.pbxproj b/boring_to_beautiful/step_01/macos/Runner.xcodeproj/project.pbxproj index 550d580704..fef5644e2b 100644 --- a/boring_to_beautiful/step_01/macos/Runner.xcodeproj/project.pbxproj +++ b/boring_to_beautiful/step_01/macos/Runner.xcodeproj/project.pbxproj @@ -27,8 +27,8 @@ 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 51C1678A490EFAA9FD4EA1D8 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 78D281624421AE1E5EBDC669 /* Pods_Runner.framework */; }; - 815ABAC7310F28FE9DE17C90 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F5118B6D9BB7780F9EA132CE /* Pods_RunnerTests.framework */; }; + 8F86CC48F84BC945E6BB473E /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E4ACB22C2282ABF3956B25A9 /* Pods_RunnerTests.framework */; }; + B86B413C29212C31FC38EC3F /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 04ABCC5B449296110056E869 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,6 +62,9 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 04ABCC5B449296110056E869 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 25AEB0B4D9F2B7DE622ADD81 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 2C1F704CCF23FEB170D14D8D /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -78,16 +81,13 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 4B4A8142B74E7DB324D6CEC7 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - 78D281624421AE1E5EBDC669 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 6472EEBBCF09C3B25D8B2B86 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 78748BFA245045FBDE6ADA5B /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; + 95A6C08F876848F75FEA8E45 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - C443135232D66CD6898F295B /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - C5AA25FE3D1893D2D323B0E5 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - CA69B878DDE343EF556D0913 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - CA79325D6AA2D545A5650B98 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - D557F6B84B2A2A778999E43D /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - F5118B6D9BB7780F9EA132CE /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + C50E54638BEDED6CDD076255 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + E4ACB22C2282ABF3956B25A9 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 815ABAC7310F28FE9DE17C90 /* Pods_RunnerTests.framework in Frameworks */, + 8F86CC48F84BC945E6BB473E /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,7 +103,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 51C1678A490EFAA9FD4EA1D8 /* Pods_Runner.framework in Frameworks */, + B86B413C29212C31FC38EC3F /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -137,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - D9C725E837347320472EF00E /* Pods */, + 387E452E15F75ADFE5831EB2 /* Pods */, ); sourceTree = ""; }; @@ -185,27 +185,27 @@ path = Runner; sourceTree = ""; }; - D73912EC22F37F3D000D13A0 /* Frameworks */ = { + 387E452E15F75ADFE5831EB2 /* Pods */ = { isa = PBXGroup; children = ( - 78D281624421AE1E5EBDC669 /* Pods_Runner.framework */, - F5118B6D9BB7780F9EA132CE /* Pods_RunnerTests.framework */, + 25AEB0B4D9F2B7DE622ADD81 /* Pods-Runner.debug.xcconfig */, + 6472EEBBCF09C3B25D8B2B86 /* Pods-Runner.release.xcconfig */, + C50E54638BEDED6CDD076255 /* Pods-Runner.profile.xcconfig */, + 2C1F704CCF23FEB170D14D8D /* Pods-RunnerTests.debug.xcconfig */, + 78748BFA245045FBDE6ADA5B /* Pods-RunnerTests.release.xcconfig */, + 95A6C08F876848F75FEA8E45 /* Pods-RunnerTests.profile.xcconfig */, ); - name = Frameworks; + name = Pods; + path = Pods; sourceTree = ""; }; - D9C725E837347320472EF00E /* Pods */ = { + D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - D557F6B84B2A2A778999E43D /* Pods-Runner.debug.xcconfig */, - C443135232D66CD6898F295B /* Pods-Runner.release.xcconfig */, - 4B4A8142B74E7DB324D6CEC7 /* Pods-Runner.profile.xcconfig */, - C5AA25FE3D1893D2D323B0E5 /* Pods-RunnerTests.debug.xcconfig */, - CA69B878DDE343EF556D0913 /* Pods-RunnerTests.release.xcconfig */, - CA79325D6AA2D545A5650B98 /* Pods-RunnerTests.profile.xcconfig */, + 04ABCC5B449296110056E869 /* Pods_Runner.framework */, + E4ACB22C2282ABF3956B25A9 /* Pods_RunnerTests.framework */, ); - name = Pods; - path = Pods; + name = Frameworks; sourceTree = ""; }; /* End PBXGroup section */ @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - D25673144C910A3282177B04 /* [CP] Check Pods Manifest.lock */, + DD21301A874393BF3ACDAA55 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - ABB374ED3576FD858355276B /* [CP] Check Pods Manifest.lock */, + 6CF97FA4FC5D30AA4AB0F085 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - A43F5D11D0093E10F947CBCA /* [CP] Embed Pods Frameworks */, + A536B83DA650A5A2D045D27C /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -361,46 +361,46 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - A43F5D11D0093E10F947CBCA /* [CP] Embed Pods Frameworks */ = { + 6CF97FA4FC5D30AA4AB0F085 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - ABB374ED3576FD858355276B /* [CP] Check Pods Manifest.lock */ = { + A536B83DA650A5A2D045D27C /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - D25673144C910A3282177B04 /* [CP] Check Pods Manifest.lock */ = { + DD21301A874393BF3ACDAA55 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C5AA25FE3D1893D2D323B0E5 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 2C1F704CCF23FEB170D14D8D /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = CA69B878DDE343EF556D0913 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 78748BFA245045FBDE6ADA5B /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = CA79325D6AA2D545A5650B98 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 95A6C08F876848F75FEA8E45 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/boring_to_beautiful/step_01/macos/Runner/Configs/AppInfo.xcconfig b/boring_to_beautiful/step_01/macos/Runner/Configs/AppInfo.xcconfig index ecc8702534..e31e407170 100644 --- a/boring_to_beautiful/step_01/macos/Runner/Configs/AppInfo.xcconfig +++ b/boring_to_beautiful/step_01/macos/Runner/Configs/AppInfo.xcconfig @@ -11,4 +11,4 @@ PRODUCT_NAME = myartist PRODUCT_BUNDLE_IDENTIFIER = com.example.myartist // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. diff --git a/boring_to_beautiful/step_01/pubspec.yaml b/boring_to_beautiful/step_01/pubspec.yaml index afc2f0df52..c596dd2ad0 100644 --- a/boring_to_beautiful/step_01/pubspec.yaml +++ b/boring_to_beautiful/step_01/pubspec.yaml @@ -18,9 +18,9 @@ dependencies: desktop_window: ^0.4.2 dynamic_color: ^1.7.0 english_words: ^4.0.0 - flutter_bloc: ^8.1.6 + flutter_bloc: ^9.0.0 freezed_annotation: ^2.4.4 - go_router: ^14.6.2 + go_router: ^14.6.3 material_color_utilities: any universal_platform: ^1.1.0 url_launcher: ^6.3.1 @@ -28,9 +28,9 @@ dependencies: dev_dependencies: flutter_test: sdk: flutter - build_runner: ^2.4.13 + build_runner: ^2.4.14 flutter_lints: ^5.0.0 - freezed: ^2.5.7 + freezed: ^2.5.8 flutter: uses-material-design: true diff --git a/boring_to_beautiful/step_01/windows/runner/Runner.rc b/boring_to_beautiful/step_01/windows/runner/Runner.rc index daf7b58804..e652dd348f 100644 --- a/boring_to_beautiful/step_01/windows/runner/Runner.rc +++ b/boring_to_beautiful/step_01/windows/runner/Runner.rc @@ -93,7 +93,7 @@ BEGIN VALUE "FileDescription", "myartist" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "InternalName", "myartist" "\0" - VALUE "LegalCopyright", "Copyright (C) 2024 com.example. All rights reserved." "\0" + VALUE "LegalCopyright", "Copyright (C) 2025 com.example. All rights reserved." "\0" VALUE "OriginalFilename", "myartist.exe" "\0" VALUE "ProductName", "myartist" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" diff --git a/boring_to_beautiful/step_02/android/app/src/main/kotlin/com/example/myartist/MainActivity.kt b/boring_to_beautiful/step_02/android/app/src/main/kotlin/com/example/myartist/MainActivity.kt index b724a01056..1e328c8556 100644 --- a/boring_to_beautiful/step_02/android/app/src/main/kotlin/com/example/myartist/MainActivity.kt +++ b/boring_to_beautiful/step_02/android/app/src/main/kotlin/com/example/myartist/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.myartist import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/boring_to_beautiful/step_02/ios/Runner.xcodeproj/project.pbxproj b/boring_to_beautiful/step_02/ios/Runner.xcodeproj/project.pbxproj index b3c1ee164f..6861a51941 100644 --- a/boring_to_beautiful/step_02/ios/Runner.xcodeproj/project.pbxproj +++ b/boring_to_beautiful/step_02/ios/Runner.xcodeproj/project.pbxproj @@ -10,9 +10,9 @@ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; - 4A42DFD328E0C2B11408D3A4 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A02EA99B51CD516C48F82B4E /* Pods_Runner.framework */; }; + 5D265AD7AE143CD184DAEC85 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8268D8C4F148188A17517348 /* Pods_RunnerTests.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; - 8B011954D9D5132E3C2239DA /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 38BF2318834F482DB8E14E2F /* Pods_RunnerTests.framework */; }; + 950BD5DB50746D52FA789638 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D2D48B5E56C94A19C89C8C03 /* Pods_Runner.framework */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; @@ -44,16 +44,16 @@ /* Begin PBXFileReference section */ 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; + 1ED7A7E88E6CCF719CB6DAC9 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 38BF2318834F482DB8E14E2F /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 6051B81DFE61FB123E553BE1 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 643807BDC78C0383EF22EEDE /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 894A76F52AB0EFA9A4A14CAF /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 8268D8C4F148188A17517348 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 87131577985E3393D3F27215 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 8FE5EA0C6F2B1340299150E1 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -61,32 +61,46 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - A02EA99B51CD516C48F82B4E /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - C95026BDC8B11A144B745B0F /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - E3C370D2330CDDCE7C7A1F28 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - E7909BB54F5FE45499392BA1 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + ACB57CED31D1A4F32F703235 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + B58FBDC83D68252855385083 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + D2D48B5E56C94A19C89C8C03 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D59AC870764873088B0F5386 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 382585DD6068E1C378B9C0A5 /* Frameworks */ = { + 97C146EB1CF9000F007C117D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 8B011954D9D5132E3C2239DA /* Pods_RunnerTests.framework in Frameworks */, + 950BD5DB50746D52FA789638 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 97C146EB1CF9000F007C117D /* Frameworks */ = { + B08DB3FEBC152015B17EEAE2 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 4A42DFD328E0C2B11408D3A4 /* Pods_Runner.framework in Frameworks */, + 5D265AD7AE143CD184DAEC85 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 2059A7B824563811B495255D /* Pods */ = { + isa = PBXGroup; + children = ( + 87131577985E3393D3F27215 /* Pods-Runner.debug.xcconfig */, + B58FBDC83D68252855385083 /* Pods-Runner.release.xcconfig */, + 8FE5EA0C6F2B1340299150E1 /* Pods-Runner.profile.xcconfig */, + 1ED7A7E88E6CCF719CB6DAC9 /* Pods-RunnerTests.debug.xcconfig */, + D59AC870764873088B0F5386 /* Pods-RunnerTests.release.xcconfig */, + ACB57CED31D1A4F32F703235 /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; 331C8082294A63A400263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -95,6 +109,15 @@ path = RunnerTests; sourceTree = ""; }; + 781E91E7C136FCD5F8C1FF46 /* Frameworks */ = { + isa = PBXGroup; + children = ( + D2D48B5E56C94A19C89C8C03 /* Pods_Runner.framework */, + 8268D8C4F148188A17517348 /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( @@ -113,8 +136,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - D8480061B1B10D02253D3FB3 /* Pods */, - C5F5B9731F65E009FD2CF172 /* Frameworks */, + 2059A7B824563811B495255D /* Pods */, + 781E91E7C136FCD5F8C1FF46 /* Frameworks */, ); sourceTree = ""; }; @@ -142,29 +165,6 @@ path = Runner; sourceTree = ""; }; - C5F5B9731F65E009FD2CF172 /* Frameworks */ = { - isa = PBXGroup; - children = ( - A02EA99B51CD516C48F82B4E /* Pods_Runner.framework */, - 38BF2318834F482DB8E14E2F /* Pods_RunnerTests.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; - D8480061B1B10D02253D3FB3 /* Pods */ = { - isa = PBXGroup; - children = ( - 643807BDC78C0383EF22EEDE /* Pods-Runner.debug.xcconfig */, - E3C370D2330CDDCE7C7A1F28 /* Pods-Runner.release.xcconfig */, - C95026BDC8B11A144B745B0F /* Pods-Runner.profile.xcconfig */, - 6051B81DFE61FB123E553BE1 /* Pods-RunnerTests.debug.xcconfig */, - 894A76F52AB0EFA9A4A14CAF /* Pods-RunnerTests.release.xcconfig */, - E7909BB54F5FE45499392BA1 /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 5933D500DE35F134BBF37298 /* [CP] Check Pods Manifest.lock */, + DA1A9725D0F67A848DF38576 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 382585DD6068E1C378B9C0A5 /* Frameworks */, + B08DB3FEBC152015B17EEAE2 /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 90A4664A0493DFE5BA3F0C78 /* [CP] Check Pods Manifest.lock */, + CE6B051E5DD2E4A8A63EDB9B /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 588E11D3E264FFA3FCD8329B /* [CP] Embed Pods Frameworks */, + 910A46B266D0EDE811A7754F /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -286,7 +286,7 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 588E11D3E264FFA3FCD8329B /* [CP] Embed Pods Frameworks */ = { + 910A46B266D0EDE811A7754F /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -303,29 +303,22 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - 5933D500DE35F134BBF37298 /* [CP] Check Pods Manifest.lock */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( ); + name = "Run Script"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - 90A4664A0493DFE5BA3F0C78 /* [CP] Check Pods Manifest.lock */ = { + CE6B051E5DD2E4A8A63EDB9B /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -347,20 +340,27 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { + DA1A9725D0F67A848DF38576 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "Run Script"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 6051B81DFE61FB123E553BE1 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 1ED7A7E88E6CCF719CB6DAC9 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 894A76F52AB0EFA9A4A14CAF /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = D59AC870764873088B0F5386 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = E7909BB54F5FE45499392BA1 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = ACB57CED31D1A4F32F703235 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/boring_to_beautiful/step_02/macos/Runner.xcodeproj/project.pbxproj b/boring_to_beautiful/step_02/macos/Runner.xcodeproj/project.pbxproj index 550d580704..fef5644e2b 100644 --- a/boring_to_beautiful/step_02/macos/Runner.xcodeproj/project.pbxproj +++ b/boring_to_beautiful/step_02/macos/Runner.xcodeproj/project.pbxproj @@ -27,8 +27,8 @@ 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 51C1678A490EFAA9FD4EA1D8 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 78D281624421AE1E5EBDC669 /* Pods_Runner.framework */; }; - 815ABAC7310F28FE9DE17C90 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F5118B6D9BB7780F9EA132CE /* Pods_RunnerTests.framework */; }; + 8F86CC48F84BC945E6BB473E /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E4ACB22C2282ABF3956B25A9 /* Pods_RunnerTests.framework */; }; + B86B413C29212C31FC38EC3F /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 04ABCC5B449296110056E869 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,6 +62,9 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 04ABCC5B449296110056E869 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 25AEB0B4D9F2B7DE622ADD81 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 2C1F704CCF23FEB170D14D8D /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -78,16 +81,13 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 4B4A8142B74E7DB324D6CEC7 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - 78D281624421AE1E5EBDC669 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 6472EEBBCF09C3B25D8B2B86 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 78748BFA245045FBDE6ADA5B /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; + 95A6C08F876848F75FEA8E45 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - C443135232D66CD6898F295B /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - C5AA25FE3D1893D2D323B0E5 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - CA69B878DDE343EF556D0913 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - CA79325D6AA2D545A5650B98 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - D557F6B84B2A2A778999E43D /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - F5118B6D9BB7780F9EA132CE /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + C50E54638BEDED6CDD076255 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + E4ACB22C2282ABF3956B25A9 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 815ABAC7310F28FE9DE17C90 /* Pods_RunnerTests.framework in Frameworks */, + 8F86CC48F84BC945E6BB473E /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,7 +103,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 51C1678A490EFAA9FD4EA1D8 /* Pods_Runner.framework in Frameworks */, + B86B413C29212C31FC38EC3F /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -137,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - D9C725E837347320472EF00E /* Pods */, + 387E452E15F75ADFE5831EB2 /* Pods */, ); sourceTree = ""; }; @@ -185,27 +185,27 @@ path = Runner; sourceTree = ""; }; - D73912EC22F37F3D000D13A0 /* Frameworks */ = { + 387E452E15F75ADFE5831EB2 /* Pods */ = { isa = PBXGroup; children = ( - 78D281624421AE1E5EBDC669 /* Pods_Runner.framework */, - F5118B6D9BB7780F9EA132CE /* Pods_RunnerTests.framework */, + 25AEB0B4D9F2B7DE622ADD81 /* Pods-Runner.debug.xcconfig */, + 6472EEBBCF09C3B25D8B2B86 /* Pods-Runner.release.xcconfig */, + C50E54638BEDED6CDD076255 /* Pods-Runner.profile.xcconfig */, + 2C1F704CCF23FEB170D14D8D /* Pods-RunnerTests.debug.xcconfig */, + 78748BFA245045FBDE6ADA5B /* Pods-RunnerTests.release.xcconfig */, + 95A6C08F876848F75FEA8E45 /* Pods-RunnerTests.profile.xcconfig */, ); - name = Frameworks; + name = Pods; + path = Pods; sourceTree = ""; }; - D9C725E837347320472EF00E /* Pods */ = { + D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - D557F6B84B2A2A778999E43D /* Pods-Runner.debug.xcconfig */, - C443135232D66CD6898F295B /* Pods-Runner.release.xcconfig */, - 4B4A8142B74E7DB324D6CEC7 /* Pods-Runner.profile.xcconfig */, - C5AA25FE3D1893D2D323B0E5 /* Pods-RunnerTests.debug.xcconfig */, - CA69B878DDE343EF556D0913 /* Pods-RunnerTests.release.xcconfig */, - CA79325D6AA2D545A5650B98 /* Pods-RunnerTests.profile.xcconfig */, + 04ABCC5B449296110056E869 /* Pods_Runner.framework */, + E4ACB22C2282ABF3956B25A9 /* Pods_RunnerTests.framework */, ); - name = Pods; - path = Pods; + name = Frameworks; sourceTree = ""; }; /* End PBXGroup section */ @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - D25673144C910A3282177B04 /* [CP] Check Pods Manifest.lock */, + DD21301A874393BF3ACDAA55 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - ABB374ED3576FD858355276B /* [CP] Check Pods Manifest.lock */, + 6CF97FA4FC5D30AA4AB0F085 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - A43F5D11D0093E10F947CBCA /* [CP] Embed Pods Frameworks */, + A536B83DA650A5A2D045D27C /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -361,46 +361,46 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - A43F5D11D0093E10F947CBCA /* [CP] Embed Pods Frameworks */ = { + 6CF97FA4FC5D30AA4AB0F085 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - ABB374ED3576FD858355276B /* [CP] Check Pods Manifest.lock */ = { + A536B83DA650A5A2D045D27C /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - D25673144C910A3282177B04 /* [CP] Check Pods Manifest.lock */ = { + DD21301A874393BF3ACDAA55 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C5AA25FE3D1893D2D323B0E5 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 2C1F704CCF23FEB170D14D8D /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = CA69B878DDE343EF556D0913 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 78748BFA245045FBDE6ADA5B /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = CA79325D6AA2D545A5650B98 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 95A6C08F876848F75FEA8E45 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/boring_to_beautiful/step_02/macos/Runner/Configs/AppInfo.xcconfig b/boring_to_beautiful/step_02/macos/Runner/Configs/AppInfo.xcconfig index ecc8702534..e31e407170 100644 --- a/boring_to_beautiful/step_02/macos/Runner/Configs/AppInfo.xcconfig +++ b/boring_to_beautiful/step_02/macos/Runner/Configs/AppInfo.xcconfig @@ -11,4 +11,4 @@ PRODUCT_NAME = myartist PRODUCT_BUNDLE_IDENTIFIER = com.example.myartist // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. diff --git a/boring_to_beautiful/step_02/pubspec.yaml b/boring_to_beautiful/step_02/pubspec.yaml index afc2f0df52..c596dd2ad0 100644 --- a/boring_to_beautiful/step_02/pubspec.yaml +++ b/boring_to_beautiful/step_02/pubspec.yaml @@ -18,9 +18,9 @@ dependencies: desktop_window: ^0.4.2 dynamic_color: ^1.7.0 english_words: ^4.0.0 - flutter_bloc: ^8.1.6 + flutter_bloc: ^9.0.0 freezed_annotation: ^2.4.4 - go_router: ^14.6.2 + go_router: ^14.6.3 material_color_utilities: any universal_platform: ^1.1.0 url_launcher: ^6.3.1 @@ -28,9 +28,9 @@ dependencies: dev_dependencies: flutter_test: sdk: flutter - build_runner: ^2.4.13 + build_runner: ^2.4.14 flutter_lints: ^5.0.0 - freezed: ^2.5.7 + freezed: ^2.5.8 flutter: uses-material-design: true diff --git a/boring_to_beautiful/step_02/windows/runner/Runner.rc b/boring_to_beautiful/step_02/windows/runner/Runner.rc index daf7b58804..e652dd348f 100644 --- a/boring_to_beautiful/step_02/windows/runner/Runner.rc +++ b/boring_to_beautiful/step_02/windows/runner/Runner.rc @@ -93,7 +93,7 @@ BEGIN VALUE "FileDescription", "myartist" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "InternalName", "myartist" "\0" - VALUE "LegalCopyright", "Copyright (C) 2024 com.example. All rights reserved." "\0" + VALUE "LegalCopyright", "Copyright (C) 2025 com.example. All rights reserved." "\0" VALUE "OriginalFilename", "myartist.exe" "\0" VALUE "ProductName", "myartist" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" diff --git a/boring_to_beautiful/step_03/android/app/src/main/kotlin/com/example/myartist/MainActivity.kt b/boring_to_beautiful/step_03/android/app/src/main/kotlin/com/example/myartist/MainActivity.kt index b724a01056..1e328c8556 100644 --- a/boring_to_beautiful/step_03/android/app/src/main/kotlin/com/example/myartist/MainActivity.kt +++ b/boring_to_beautiful/step_03/android/app/src/main/kotlin/com/example/myartist/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.myartist import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/boring_to_beautiful/step_03/ios/Runner.xcodeproj/project.pbxproj b/boring_to_beautiful/step_03/ios/Runner.xcodeproj/project.pbxproj index b3c1ee164f..6861a51941 100644 --- a/boring_to_beautiful/step_03/ios/Runner.xcodeproj/project.pbxproj +++ b/boring_to_beautiful/step_03/ios/Runner.xcodeproj/project.pbxproj @@ -10,9 +10,9 @@ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; - 4A42DFD328E0C2B11408D3A4 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A02EA99B51CD516C48F82B4E /* Pods_Runner.framework */; }; + 5D265AD7AE143CD184DAEC85 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8268D8C4F148188A17517348 /* Pods_RunnerTests.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; - 8B011954D9D5132E3C2239DA /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 38BF2318834F482DB8E14E2F /* Pods_RunnerTests.framework */; }; + 950BD5DB50746D52FA789638 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D2D48B5E56C94A19C89C8C03 /* Pods_Runner.framework */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; @@ -44,16 +44,16 @@ /* Begin PBXFileReference section */ 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; + 1ED7A7E88E6CCF719CB6DAC9 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 38BF2318834F482DB8E14E2F /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 6051B81DFE61FB123E553BE1 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 643807BDC78C0383EF22EEDE /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 894A76F52AB0EFA9A4A14CAF /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 8268D8C4F148188A17517348 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 87131577985E3393D3F27215 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 8FE5EA0C6F2B1340299150E1 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -61,32 +61,46 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - A02EA99B51CD516C48F82B4E /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - C95026BDC8B11A144B745B0F /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - E3C370D2330CDDCE7C7A1F28 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - E7909BB54F5FE45499392BA1 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + ACB57CED31D1A4F32F703235 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + B58FBDC83D68252855385083 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + D2D48B5E56C94A19C89C8C03 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D59AC870764873088B0F5386 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 382585DD6068E1C378B9C0A5 /* Frameworks */ = { + 97C146EB1CF9000F007C117D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 8B011954D9D5132E3C2239DA /* Pods_RunnerTests.framework in Frameworks */, + 950BD5DB50746D52FA789638 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 97C146EB1CF9000F007C117D /* Frameworks */ = { + B08DB3FEBC152015B17EEAE2 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 4A42DFD328E0C2B11408D3A4 /* Pods_Runner.framework in Frameworks */, + 5D265AD7AE143CD184DAEC85 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 2059A7B824563811B495255D /* Pods */ = { + isa = PBXGroup; + children = ( + 87131577985E3393D3F27215 /* Pods-Runner.debug.xcconfig */, + B58FBDC83D68252855385083 /* Pods-Runner.release.xcconfig */, + 8FE5EA0C6F2B1340299150E1 /* Pods-Runner.profile.xcconfig */, + 1ED7A7E88E6CCF719CB6DAC9 /* Pods-RunnerTests.debug.xcconfig */, + D59AC870764873088B0F5386 /* Pods-RunnerTests.release.xcconfig */, + ACB57CED31D1A4F32F703235 /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; 331C8082294A63A400263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -95,6 +109,15 @@ path = RunnerTests; sourceTree = ""; }; + 781E91E7C136FCD5F8C1FF46 /* Frameworks */ = { + isa = PBXGroup; + children = ( + D2D48B5E56C94A19C89C8C03 /* Pods_Runner.framework */, + 8268D8C4F148188A17517348 /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( @@ -113,8 +136,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - D8480061B1B10D02253D3FB3 /* Pods */, - C5F5B9731F65E009FD2CF172 /* Frameworks */, + 2059A7B824563811B495255D /* Pods */, + 781E91E7C136FCD5F8C1FF46 /* Frameworks */, ); sourceTree = ""; }; @@ -142,29 +165,6 @@ path = Runner; sourceTree = ""; }; - C5F5B9731F65E009FD2CF172 /* Frameworks */ = { - isa = PBXGroup; - children = ( - A02EA99B51CD516C48F82B4E /* Pods_Runner.framework */, - 38BF2318834F482DB8E14E2F /* Pods_RunnerTests.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; - D8480061B1B10D02253D3FB3 /* Pods */ = { - isa = PBXGroup; - children = ( - 643807BDC78C0383EF22EEDE /* Pods-Runner.debug.xcconfig */, - E3C370D2330CDDCE7C7A1F28 /* Pods-Runner.release.xcconfig */, - C95026BDC8B11A144B745B0F /* Pods-Runner.profile.xcconfig */, - 6051B81DFE61FB123E553BE1 /* Pods-RunnerTests.debug.xcconfig */, - 894A76F52AB0EFA9A4A14CAF /* Pods-RunnerTests.release.xcconfig */, - E7909BB54F5FE45499392BA1 /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 5933D500DE35F134BBF37298 /* [CP] Check Pods Manifest.lock */, + DA1A9725D0F67A848DF38576 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 382585DD6068E1C378B9C0A5 /* Frameworks */, + B08DB3FEBC152015B17EEAE2 /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 90A4664A0493DFE5BA3F0C78 /* [CP] Check Pods Manifest.lock */, + CE6B051E5DD2E4A8A63EDB9B /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 588E11D3E264FFA3FCD8329B /* [CP] Embed Pods Frameworks */, + 910A46B266D0EDE811A7754F /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -286,7 +286,7 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 588E11D3E264FFA3FCD8329B /* [CP] Embed Pods Frameworks */ = { + 910A46B266D0EDE811A7754F /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -303,29 +303,22 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - 5933D500DE35F134BBF37298 /* [CP] Check Pods Manifest.lock */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( ); + name = "Run Script"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - 90A4664A0493DFE5BA3F0C78 /* [CP] Check Pods Manifest.lock */ = { + CE6B051E5DD2E4A8A63EDB9B /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -347,20 +340,27 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { + DA1A9725D0F67A848DF38576 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "Run Script"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 6051B81DFE61FB123E553BE1 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 1ED7A7E88E6CCF719CB6DAC9 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 894A76F52AB0EFA9A4A14CAF /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = D59AC870764873088B0F5386 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = E7909BB54F5FE45499392BA1 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = ACB57CED31D1A4F32F703235 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/boring_to_beautiful/step_03/macos/Runner.xcodeproj/project.pbxproj b/boring_to_beautiful/step_03/macos/Runner.xcodeproj/project.pbxproj index 550d580704..fef5644e2b 100644 --- a/boring_to_beautiful/step_03/macos/Runner.xcodeproj/project.pbxproj +++ b/boring_to_beautiful/step_03/macos/Runner.xcodeproj/project.pbxproj @@ -27,8 +27,8 @@ 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 51C1678A490EFAA9FD4EA1D8 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 78D281624421AE1E5EBDC669 /* Pods_Runner.framework */; }; - 815ABAC7310F28FE9DE17C90 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F5118B6D9BB7780F9EA132CE /* Pods_RunnerTests.framework */; }; + 8F86CC48F84BC945E6BB473E /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E4ACB22C2282ABF3956B25A9 /* Pods_RunnerTests.framework */; }; + B86B413C29212C31FC38EC3F /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 04ABCC5B449296110056E869 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,6 +62,9 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 04ABCC5B449296110056E869 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 25AEB0B4D9F2B7DE622ADD81 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 2C1F704CCF23FEB170D14D8D /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -78,16 +81,13 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 4B4A8142B74E7DB324D6CEC7 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - 78D281624421AE1E5EBDC669 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 6472EEBBCF09C3B25D8B2B86 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 78748BFA245045FBDE6ADA5B /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; + 95A6C08F876848F75FEA8E45 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - C443135232D66CD6898F295B /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - C5AA25FE3D1893D2D323B0E5 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - CA69B878DDE343EF556D0913 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - CA79325D6AA2D545A5650B98 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - D557F6B84B2A2A778999E43D /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - F5118B6D9BB7780F9EA132CE /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + C50E54638BEDED6CDD076255 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + E4ACB22C2282ABF3956B25A9 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 815ABAC7310F28FE9DE17C90 /* Pods_RunnerTests.framework in Frameworks */, + 8F86CC48F84BC945E6BB473E /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,7 +103,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 51C1678A490EFAA9FD4EA1D8 /* Pods_Runner.framework in Frameworks */, + B86B413C29212C31FC38EC3F /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -137,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - D9C725E837347320472EF00E /* Pods */, + 387E452E15F75ADFE5831EB2 /* Pods */, ); sourceTree = ""; }; @@ -185,27 +185,27 @@ path = Runner; sourceTree = ""; }; - D73912EC22F37F3D000D13A0 /* Frameworks */ = { + 387E452E15F75ADFE5831EB2 /* Pods */ = { isa = PBXGroup; children = ( - 78D281624421AE1E5EBDC669 /* Pods_Runner.framework */, - F5118B6D9BB7780F9EA132CE /* Pods_RunnerTests.framework */, + 25AEB0B4D9F2B7DE622ADD81 /* Pods-Runner.debug.xcconfig */, + 6472EEBBCF09C3B25D8B2B86 /* Pods-Runner.release.xcconfig */, + C50E54638BEDED6CDD076255 /* Pods-Runner.profile.xcconfig */, + 2C1F704CCF23FEB170D14D8D /* Pods-RunnerTests.debug.xcconfig */, + 78748BFA245045FBDE6ADA5B /* Pods-RunnerTests.release.xcconfig */, + 95A6C08F876848F75FEA8E45 /* Pods-RunnerTests.profile.xcconfig */, ); - name = Frameworks; + name = Pods; + path = Pods; sourceTree = ""; }; - D9C725E837347320472EF00E /* Pods */ = { + D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - D557F6B84B2A2A778999E43D /* Pods-Runner.debug.xcconfig */, - C443135232D66CD6898F295B /* Pods-Runner.release.xcconfig */, - 4B4A8142B74E7DB324D6CEC7 /* Pods-Runner.profile.xcconfig */, - C5AA25FE3D1893D2D323B0E5 /* Pods-RunnerTests.debug.xcconfig */, - CA69B878DDE343EF556D0913 /* Pods-RunnerTests.release.xcconfig */, - CA79325D6AA2D545A5650B98 /* Pods-RunnerTests.profile.xcconfig */, + 04ABCC5B449296110056E869 /* Pods_Runner.framework */, + E4ACB22C2282ABF3956B25A9 /* Pods_RunnerTests.framework */, ); - name = Pods; - path = Pods; + name = Frameworks; sourceTree = ""; }; /* End PBXGroup section */ @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - D25673144C910A3282177B04 /* [CP] Check Pods Manifest.lock */, + DD21301A874393BF3ACDAA55 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - ABB374ED3576FD858355276B /* [CP] Check Pods Manifest.lock */, + 6CF97FA4FC5D30AA4AB0F085 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - A43F5D11D0093E10F947CBCA /* [CP] Embed Pods Frameworks */, + A536B83DA650A5A2D045D27C /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -361,46 +361,46 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - A43F5D11D0093E10F947CBCA /* [CP] Embed Pods Frameworks */ = { + 6CF97FA4FC5D30AA4AB0F085 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - ABB374ED3576FD858355276B /* [CP] Check Pods Manifest.lock */ = { + A536B83DA650A5A2D045D27C /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - D25673144C910A3282177B04 /* [CP] Check Pods Manifest.lock */ = { + DD21301A874393BF3ACDAA55 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C5AA25FE3D1893D2D323B0E5 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 2C1F704CCF23FEB170D14D8D /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = CA69B878DDE343EF556D0913 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 78748BFA245045FBDE6ADA5B /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = CA79325D6AA2D545A5650B98 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 95A6C08F876848F75FEA8E45 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/boring_to_beautiful/step_03/macos/Runner/Configs/AppInfo.xcconfig b/boring_to_beautiful/step_03/macos/Runner/Configs/AppInfo.xcconfig index ecc8702534..e31e407170 100644 --- a/boring_to_beautiful/step_03/macos/Runner/Configs/AppInfo.xcconfig +++ b/boring_to_beautiful/step_03/macos/Runner/Configs/AppInfo.xcconfig @@ -11,4 +11,4 @@ PRODUCT_NAME = myartist PRODUCT_BUNDLE_IDENTIFIER = com.example.myartist // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. diff --git a/boring_to_beautiful/step_03/pubspec.yaml b/boring_to_beautiful/step_03/pubspec.yaml index 0dcd53a572..52e0f25e78 100644 --- a/boring_to_beautiful/step_03/pubspec.yaml +++ b/boring_to_beautiful/step_03/pubspec.yaml @@ -18,9 +18,9 @@ dependencies: desktop_window: ^0.4.2 dynamic_color: ^1.7.0 english_words: ^4.0.0 - flutter_bloc: ^8.1.6 + flutter_bloc: ^9.0.0 freezed_annotation: ^2.4.4 - go_router: ^14.6.2 + go_router: ^14.6.3 material_color_utilities: any universal_platform: ^1.1.0 url_launcher: ^6.3.1 @@ -29,9 +29,9 @@ dependencies: dev_dependencies: flutter_test: sdk: flutter - build_runner: ^2.4.13 + build_runner: ^2.4.14 flutter_lints: ^5.0.0 - freezed: ^2.5.7 + freezed: ^2.5.8 flutter: uses-material-design: true diff --git a/boring_to_beautiful/step_03/windows/runner/Runner.rc b/boring_to_beautiful/step_03/windows/runner/Runner.rc index daf7b58804..e652dd348f 100644 --- a/boring_to_beautiful/step_03/windows/runner/Runner.rc +++ b/boring_to_beautiful/step_03/windows/runner/Runner.rc @@ -93,7 +93,7 @@ BEGIN VALUE "FileDescription", "myartist" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "InternalName", "myartist" "\0" - VALUE "LegalCopyright", "Copyright (C) 2024 com.example. All rights reserved." "\0" + VALUE "LegalCopyright", "Copyright (C) 2025 com.example. All rights reserved." "\0" VALUE "OriginalFilename", "myartist.exe" "\0" VALUE "ProductName", "myartist" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" diff --git a/boring_to_beautiful/step_04/android/app/src/main/kotlin/com/example/myartist/MainActivity.kt b/boring_to_beautiful/step_04/android/app/src/main/kotlin/com/example/myartist/MainActivity.kt index b724a01056..1e328c8556 100644 --- a/boring_to_beautiful/step_04/android/app/src/main/kotlin/com/example/myartist/MainActivity.kt +++ b/boring_to_beautiful/step_04/android/app/src/main/kotlin/com/example/myartist/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.myartist import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/boring_to_beautiful/step_04/ios/Runner.xcodeproj/project.pbxproj b/boring_to_beautiful/step_04/ios/Runner.xcodeproj/project.pbxproj index b3c1ee164f..6861a51941 100644 --- a/boring_to_beautiful/step_04/ios/Runner.xcodeproj/project.pbxproj +++ b/boring_to_beautiful/step_04/ios/Runner.xcodeproj/project.pbxproj @@ -10,9 +10,9 @@ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; - 4A42DFD328E0C2B11408D3A4 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A02EA99B51CD516C48F82B4E /* Pods_Runner.framework */; }; + 5D265AD7AE143CD184DAEC85 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8268D8C4F148188A17517348 /* Pods_RunnerTests.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; - 8B011954D9D5132E3C2239DA /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 38BF2318834F482DB8E14E2F /* Pods_RunnerTests.framework */; }; + 950BD5DB50746D52FA789638 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D2D48B5E56C94A19C89C8C03 /* Pods_Runner.framework */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; @@ -44,16 +44,16 @@ /* Begin PBXFileReference section */ 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; + 1ED7A7E88E6CCF719CB6DAC9 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 38BF2318834F482DB8E14E2F /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 6051B81DFE61FB123E553BE1 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 643807BDC78C0383EF22EEDE /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 894A76F52AB0EFA9A4A14CAF /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 8268D8C4F148188A17517348 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 87131577985E3393D3F27215 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 8FE5EA0C6F2B1340299150E1 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -61,32 +61,46 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - A02EA99B51CD516C48F82B4E /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - C95026BDC8B11A144B745B0F /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - E3C370D2330CDDCE7C7A1F28 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - E7909BB54F5FE45499392BA1 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + ACB57CED31D1A4F32F703235 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + B58FBDC83D68252855385083 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + D2D48B5E56C94A19C89C8C03 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D59AC870764873088B0F5386 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 382585DD6068E1C378B9C0A5 /* Frameworks */ = { + 97C146EB1CF9000F007C117D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 8B011954D9D5132E3C2239DA /* Pods_RunnerTests.framework in Frameworks */, + 950BD5DB50746D52FA789638 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 97C146EB1CF9000F007C117D /* Frameworks */ = { + B08DB3FEBC152015B17EEAE2 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 4A42DFD328E0C2B11408D3A4 /* Pods_Runner.framework in Frameworks */, + 5D265AD7AE143CD184DAEC85 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 2059A7B824563811B495255D /* Pods */ = { + isa = PBXGroup; + children = ( + 87131577985E3393D3F27215 /* Pods-Runner.debug.xcconfig */, + B58FBDC83D68252855385083 /* Pods-Runner.release.xcconfig */, + 8FE5EA0C6F2B1340299150E1 /* Pods-Runner.profile.xcconfig */, + 1ED7A7E88E6CCF719CB6DAC9 /* Pods-RunnerTests.debug.xcconfig */, + D59AC870764873088B0F5386 /* Pods-RunnerTests.release.xcconfig */, + ACB57CED31D1A4F32F703235 /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; 331C8082294A63A400263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -95,6 +109,15 @@ path = RunnerTests; sourceTree = ""; }; + 781E91E7C136FCD5F8C1FF46 /* Frameworks */ = { + isa = PBXGroup; + children = ( + D2D48B5E56C94A19C89C8C03 /* Pods_Runner.framework */, + 8268D8C4F148188A17517348 /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( @@ -113,8 +136,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - D8480061B1B10D02253D3FB3 /* Pods */, - C5F5B9731F65E009FD2CF172 /* Frameworks */, + 2059A7B824563811B495255D /* Pods */, + 781E91E7C136FCD5F8C1FF46 /* Frameworks */, ); sourceTree = ""; }; @@ -142,29 +165,6 @@ path = Runner; sourceTree = ""; }; - C5F5B9731F65E009FD2CF172 /* Frameworks */ = { - isa = PBXGroup; - children = ( - A02EA99B51CD516C48F82B4E /* Pods_Runner.framework */, - 38BF2318834F482DB8E14E2F /* Pods_RunnerTests.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; - D8480061B1B10D02253D3FB3 /* Pods */ = { - isa = PBXGroup; - children = ( - 643807BDC78C0383EF22EEDE /* Pods-Runner.debug.xcconfig */, - E3C370D2330CDDCE7C7A1F28 /* Pods-Runner.release.xcconfig */, - C95026BDC8B11A144B745B0F /* Pods-Runner.profile.xcconfig */, - 6051B81DFE61FB123E553BE1 /* Pods-RunnerTests.debug.xcconfig */, - 894A76F52AB0EFA9A4A14CAF /* Pods-RunnerTests.release.xcconfig */, - E7909BB54F5FE45499392BA1 /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 5933D500DE35F134BBF37298 /* [CP] Check Pods Manifest.lock */, + DA1A9725D0F67A848DF38576 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 382585DD6068E1C378B9C0A5 /* Frameworks */, + B08DB3FEBC152015B17EEAE2 /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 90A4664A0493DFE5BA3F0C78 /* [CP] Check Pods Manifest.lock */, + CE6B051E5DD2E4A8A63EDB9B /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 588E11D3E264FFA3FCD8329B /* [CP] Embed Pods Frameworks */, + 910A46B266D0EDE811A7754F /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -286,7 +286,7 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 588E11D3E264FFA3FCD8329B /* [CP] Embed Pods Frameworks */ = { + 910A46B266D0EDE811A7754F /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -303,29 +303,22 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - 5933D500DE35F134BBF37298 /* [CP] Check Pods Manifest.lock */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( ); + name = "Run Script"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - 90A4664A0493DFE5BA3F0C78 /* [CP] Check Pods Manifest.lock */ = { + CE6B051E5DD2E4A8A63EDB9B /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -347,20 +340,27 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { + DA1A9725D0F67A848DF38576 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "Run Script"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 6051B81DFE61FB123E553BE1 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 1ED7A7E88E6CCF719CB6DAC9 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 894A76F52AB0EFA9A4A14CAF /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = D59AC870764873088B0F5386 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = E7909BB54F5FE45499392BA1 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = ACB57CED31D1A4F32F703235 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/boring_to_beautiful/step_04/macos/Runner.xcodeproj/project.pbxproj b/boring_to_beautiful/step_04/macos/Runner.xcodeproj/project.pbxproj index 550d580704..fef5644e2b 100644 --- a/boring_to_beautiful/step_04/macos/Runner.xcodeproj/project.pbxproj +++ b/boring_to_beautiful/step_04/macos/Runner.xcodeproj/project.pbxproj @@ -27,8 +27,8 @@ 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 51C1678A490EFAA9FD4EA1D8 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 78D281624421AE1E5EBDC669 /* Pods_Runner.framework */; }; - 815ABAC7310F28FE9DE17C90 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F5118B6D9BB7780F9EA132CE /* Pods_RunnerTests.framework */; }; + 8F86CC48F84BC945E6BB473E /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E4ACB22C2282ABF3956B25A9 /* Pods_RunnerTests.framework */; }; + B86B413C29212C31FC38EC3F /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 04ABCC5B449296110056E869 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,6 +62,9 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 04ABCC5B449296110056E869 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 25AEB0B4D9F2B7DE622ADD81 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 2C1F704CCF23FEB170D14D8D /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -78,16 +81,13 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 4B4A8142B74E7DB324D6CEC7 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - 78D281624421AE1E5EBDC669 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 6472EEBBCF09C3B25D8B2B86 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 78748BFA245045FBDE6ADA5B /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; + 95A6C08F876848F75FEA8E45 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - C443135232D66CD6898F295B /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - C5AA25FE3D1893D2D323B0E5 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - CA69B878DDE343EF556D0913 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - CA79325D6AA2D545A5650B98 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - D557F6B84B2A2A778999E43D /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - F5118B6D9BB7780F9EA132CE /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + C50E54638BEDED6CDD076255 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + E4ACB22C2282ABF3956B25A9 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 815ABAC7310F28FE9DE17C90 /* Pods_RunnerTests.framework in Frameworks */, + 8F86CC48F84BC945E6BB473E /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,7 +103,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 51C1678A490EFAA9FD4EA1D8 /* Pods_Runner.framework in Frameworks */, + B86B413C29212C31FC38EC3F /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -137,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - D9C725E837347320472EF00E /* Pods */, + 387E452E15F75ADFE5831EB2 /* Pods */, ); sourceTree = ""; }; @@ -185,27 +185,27 @@ path = Runner; sourceTree = ""; }; - D73912EC22F37F3D000D13A0 /* Frameworks */ = { + 387E452E15F75ADFE5831EB2 /* Pods */ = { isa = PBXGroup; children = ( - 78D281624421AE1E5EBDC669 /* Pods_Runner.framework */, - F5118B6D9BB7780F9EA132CE /* Pods_RunnerTests.framework */, + 25AEB0B4D9F2B7DE622ADD81 /* Pods-Runner.debug.xcconfig */, + 6472EEBBCF09C3B25D8B2B86 /* Pods-Runner.release.xcconfig */, + C50E54638BEDED6CDD076255 /* Pods-Runner.profile.xcconfig */, + 2C1F704CCF23FEB170D14D8D /* Pods-RunnerTests.debug.xcconfig */, + 78748BFA245045FBDE6ADA5B /* Pods-RunnerTests.release.xcconfig */, + 95A6C08F876848F75FEA8E45 /* Pods-RunnerTests.profile.xcconfig */, ); - name = Frameworks; + name = Pods; + path = Pods; sourceTree = ""; }; - D9C725E837347320472EF00E /* Pods */ = { + D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - D557F6B84B2A2A778999E43D /* Pods-Runner.debug.xcconfig */, - C443135232D66CD6898F295B /* Pods-Runner.release.xcconfig */, - 4B4A8142B74E7DB324D6CEC7 /* Pods-Runner.profile.xcconfig */, - C5AA25FE3D1893D2D323B0E5 /* Pods-RunnerTests.debug.xcconfig */, - CA69B878DDE343EF556D0913 /* Pods-RunnerTests.release.xcconfig */, - CA79325D6AA2D545A5650B98 /* Pods-RunnerTests.profile.xcconfig */, + 04ABCC5B449296110056E869 /* Pods_Runner.framework */, + E4ACB22C2282ABF3956B25A9 /* Pods_RunnerTests.framework */, ); - name = Pods; - path = Pods; + name = Frameworks; sourceTree = ""; }; /* End PBXGroup section */ @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - D25673144C910A3282177B04 /* [CP] Check Pods Manifest.lock */, + DD21301A874393BF3ACDAA55 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - ABB374ED3576FD858355276B /* [CP] Check Pods Manifest.lock */, + 6CF97FA4FC5D30AA4AB0F085 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - A43F5D11D0093E10F947CBCA /* [CP] Embed Pods Frameworks */, + A536B83DA650A5A2D045D27C /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -361,46 +361,46 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - A43F5D11D0093E10F947CBCA /* [CP] Embed Pods Frameworks */ = { + 6CF97FA4FC5D30AA4AB0F085 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - ABB374ED3576FD858355276B /* [CP] Check Pods Manifest.lock */ = { + A536B83DA650A5A2D045D27C /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - D25673144C910A3282177B04 /* [CP] Check Pods Manifest.lock */ = { + DD21301A874393BF3ACDAA55 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C5AA25FE3D1893D2D323B0E5 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 2C1F704CCF23FEB170D14D8D /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = CA69B878DDE343EF556D0913 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 78748BFA245045FBDE6ADA5B /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = CA79325D6AA2D545A5650B98 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 95A6C08F876848F75FEA8E45 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/boring_to_beautiful/step_04/macos/Runner/Configs/AppInfo.xcconfig b/boring_to_beautiful/step_04/macos/Runner/Configs/AppInfo.xcconfig index ecc8702534..e31e407170 100644 --- a/boring_to_beautiful/step_04/macos/Runner/Configs/AppInfo.xcconfig +++ b/boring_to_beautiful/step_04/macos/Runner/Configs/AppInfo.xcconfig @@ -11,4 +11,4 @@ PRODUCT_NAME = myartist PRODUCT_BUNDLE_IDENTIFIER = com.example.myartist // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. diff --git a/boring_to_beautiful/step_04/pubspec.yaml b/boring_to_beautiful/step_04/pubspec.yaml index 0dcd53a572..52e0f25e78 100644 --- a/boring_to_beautiful/step_04/pubspec.yaml +++ b/boring_to_beautiful/step_04/pubspec.yaml @@ -18,9 +18,9 @@ dependencies: desktop_window: ^0.4.2 dynamic_color: ^1.7.0 english_words: ^4.0.0 - flutter_bloc: ^8.1.6 + flutter_bloc: ^9.0.0 freezed_annotation: ^2.4.4 - go_router: ^14.6.2 + go_router: ^14.6.3 material_color_utilities: any universal_platform: ^1.1.0 url_launcher: ^6.3.1 @@ -29,9 +29,9 @@ dependencies: dev_dependencies: flutter_test: sdk: flutter - build_runner: ^2.4.13 + build_runner: ^2.4.14 flutter_lints: ^5.0.0 - freezed: ^2.5.7 + freezed: ^2.5.8 flutter: uses-material-design: true diff --git a/boring_to_beautiful/step_04/windows/runner/Runner.rc b/boring_to_beautiful/step_04/windows/runner/Runner.rc index daf7b58804..e652dd348f 100644 --- a/boring_to_beautiful/step_04/windows/runner/Runner.rc +++ b/boring_to_beautiful/step_04/windows/runner/Runner.rc @@ -93,7 +93,7 @@ BEGIN VALUE "FileDescription", "myartist" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "InternalName", "myartist" "\0" - VALUE "LegalCopyright", "Copyright (C) 2024 com.example. All rights reserved." "\0" + VALUE "LegalCopyright", "Copyright (C) 2025 com.example. All rights reserved." "\0" VALUE "OriginalFilename", "myartist.exe" "\0" VALUE "ProductName", "myartist" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" diff --git a/boring_to_beautiful/step_05/android/app/src/main/kotlin/com/example/myartist/MainActivity.kt b/boring_to_beautiful/step_05/android/app/src/main/kotlin/com/example/myartist/MainActivity.kt index b724a01056..1e328c8556 100644 --- a/boring_to_beautiful/step_05/android/app/src/main/kotlin/com/example/myartist/MainActivity.kt +++ b/boring_to_beautiful/step_05/android/app/src/main/kotlin/com/example/myartist/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.myartist import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/boring_to_beautiful/step_05/ios/Runner.xcodeproj/project.pbxproj b/boring_to_beautiful/step_05/ios/Runner.xcodeproj/project.pbxproj index b3c1ee164f..6861a51941 100644 --- a/boring_to_beautiful/step_05/ios/Runner.xcodeproj/project.pbxproj +++ b/boring_to_beautiful/step_05/ios/Runner.xcodeproj/project.pbxproj @@ -10,9 +10,9 @@ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; - 4A42DFD328E0C2B11408D3A4 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A02EA99B51CD516C48F82B4E /* Pods_Runner.framework */; }; + 5D265AD7AE143CD184DAEC85 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8268D8C4F148188A17517348 /* Pods_RunnerTests.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; - 8B011954D9D5132E3C2239DA /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 38BF2318834F482DB8E14E2F /* Pods_RunnerTests.framework */; }; + 950BD5DB50746D52FA789638 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D2D48B5E56C94A19C89C8C03 /* Pods_Runner.framework */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; @@ -44,16 +44,16 @@ /* Begin PBXFileReference section */ 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; + 1ED7A7E88E6CCF719CB6DAC9 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 38BF2318834F482DB8E14E2F /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 6051B81DFE61FB123E553BE1 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 643807BDC78C0383EF22EEDE /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 894A76F52AB0EFA9A4A14CAF /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 8268D8C4F148188A17517348 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 87131577985E3393D3F27215 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 8FE5EA0C6F2B1340299150E1 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -61,32 +61,46 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - A02EA99B51CD516C48F82B4E /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - C95026BDC8B11A144B745B0F /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - E3C370D2330CDDCE7C7A1F28 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - E7909BB54F5FE45499392BA1 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + ACB57CED31D1A4F32F703235 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + B58FBDC83D68252855385083 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + D2D48B5E56C94A19C89C8C03 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D59AC870764873088B0F5386 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 382585DD6068E1C378B9C0A5 /* Frameworks */ = { + 97C146EB1CF9000F007C117D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 8B011954D9D5132E3C2239DA /* Pods_RunnerTests.framework in Frameworks */, + 950BD5DB50746D52FA789638 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 97C146EB1CF9000F007C117D /* Frameworks */ = { + B08DB3FEBC152015B17EEAE2 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 4A42DFD328E0C2B11408D3A4 /* Pods_Runner.framework in Frameworks */, + 5D265AD7AE143CD184DAEC85 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 2059A7B824563811B495255D /* Pods */ = { + isa = PBXGroup; + children = ( + 87131577985E3393D3F27215 /* Pods-Runner.debug.xcconfig */, + B58FBDC83D68252855385083 /* Pods-Runner.release.xcconfig */, + 8FE5EA0C6F2B1340299150E1 /* Pods-Runner.profile.xcconfig */, + 1ED7A7E88E6CCF719CB6DAC9 /* Pods-RunnerTests.debug.xcconfig */, + D59AC870764873088B0F5386 /* Pods-RunnerTests.release.xcconfig */, + ACB57CED31D1A4F32F703235 /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; 331C8082294A63A400263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -95,6 +109,15 @@ path = RunnerTests; sourceTree = ""; }; + 781E91E7C136FCD5F8C1FF46 /* Frameworks */ = { + isa = PBXGroup; + children = ( + D2D48B5E56C94A19C89C8C03 /* Pods_Runner.framework */, + 8268D8C4F148188A17517348 /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( @@ -113,8 +136,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - D8480061B1B10D02253D3FB3 /* Pods */, - C5F5B9731F65E009FD2CF172 /* Frameworks */, + 2059A7B824563811B495255D /* Pods */, + 781E91E7C136FCD5F8C1FF46 /* Frameworks */, ); sourceTree = ""; }; @@ -142,29 +165,6 @@ path = Runner; sourceTree = ""; }; - C5F5B9731F65E009FD2CF172 /* Frameworks */ = { - isa = PBXGroup; - children = ( - A02EA99B51CD516C48F82B4E /* Pods_Runner.framework */, - 38BF2318834F482DB8E14E2F /* Pods_RunnerTests.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; - D8480061B1B10D02253D3FB3 /* Pods */ = { - isa = PBXGroup; - children = ( - 643807BDC78C0383EF22EEDE /* Pods-Runner.debug.xcconfig */, - E3C370D2330CDDCE7C7A1F28 /* Pods-Runner.release.xcconfig */, - C95026BDC8B11A144B745B0F /* Pods-Runner.profile.xcconfig */, - 6051B81DFE61FB123E553BE1 /* Pods-RunnerTests.debug.xcconfig */, - 894A76F52AB0EFA9A4A14CAF /* Pods-RunnerTests.release.xcconfig */, - E7909BB54F5FE45499392BA1 /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 5933D500DE35F134BBF37298 /* [CP] Check Pods Manifest.lock */, + DA1A9725D0F67A848DF38576 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 382585DD6068E1C378B9C0A5 /* Frameworks */, + B08DB3FEBC152015B17EEAE2 /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 90A4664A0493DFE5BA3F0C78 /* [CP] Check Pods Manifest.lock */, + CE6B051E5DD2E4A8A63EDB9B /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 588E11D3E264FFA3FCD8329B /* [CP] Embed Pods Frameworks */, + 910A46B266D0EDE811A7754F /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -286,7 +286,7 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 588E11D3E264FFA3FCD8329B /* [CP] Embed Pods Frameworks */ = { + 910A46B266D0EDE811A7754F /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -303,29 +303,22 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - 5933D500DE35F134BBF37298 /* [CP] Check Pods Manifest.lock */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( ); + name = "Run Script"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - 90A4664A0493DFE5BA3F0C78 /* [CP] Check Pods Manifest.lock */ = { + CE6B051E5DD2E4A8A63EDB9B /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -347,20 +340,27 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { + DA1A9725D0F67A848DF38576 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "Run Script"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 6051B81DFE61FB123E553BE1 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 1ED7A7E88E6CCF719CB6DAC9 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 894A76F52AB0EFA9A4A14CAF /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = D59AC870764873088B0F5386 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = E7909BB54F5FE45499392BA1 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = ACB57CED31D1A4F32F703235 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/boring_to_beautiful/step_05/macos/Runner.xcodeproj/project.pbxproj b/boring_to_beautiful/step_05/macos/Runner.xcodeproj/project.pbxproj index 550d580704..fef5644e2b 100644 --- a/boring_to_beautiful/step_05/macos/Runner.xcodeproj/project.pbxproj +++ b/boring_to_beautiful/step_05/macos/Runner.xcodeproj/project.pbxproj @@ -27,8 +27,8 @@ 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 51C1678A490EFAA9FD4EA1D8 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 78D281624421AE1E5EBDC669 /* Pods_Runner.framework */; }; - 815ABAC7310F28FE9DE17C90 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F5118B6D9BB7780F9EA132CE /* Pods_RunnerTests.framework */; }; + 8F86CC48F84BC945E6BB473E /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E4ACB22C2282ABF3956B25A9 /* Pods_RunnerTests.framework */; }; + B86B413C29212C31FC38EC3F /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 04ABCC5B449296110056E869 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,6 +62,9 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 04ABCC5B449296110056E869 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 25AEB0B4D9F2B7DE622ADD81 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 2C1F704CCF23FEB170D14D8D /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -78,16 +81,13 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 4B4A8142B74E7DB324D6CEC7 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - 78D281624421AE1E5EBDC669 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 6472EEBBCF09C3B25D8B2B86 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 78748BFA245045FBDE6ADA5B /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; + 95A6C08F876848F75FEA8E45 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - C443135232D66CD6898F295B /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - C5AA25FE3D1893D2D323B0E5 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - CA69B878DDE343EF556D0913 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - CA79325D6AA2D545A5650B98 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - D557F6B84B2A2A778999E43D /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - F5118B6D9BB7780F9EA132CE /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + C50E54638BEDED6CDD076255 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + E4ACB22C2282ABF3956B25A9 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 815ABAC7310F28FE9DE17C90 /* Pods_RunnerTests.framework in Frameworks */, + 8F86CC48F84BC945E6BB473E /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,7 +103,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 51C1678A490EFAA9FD4EA1D8 /* Pods_Runner.framework in Frameworks */, + B86B413C29212C31FC38EC3F /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -137,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - D9C725E837347320472EF00E /* Pods */, + 387E452E15F75ADFE5831EB2 /* Pods */, ); sourceTree = ""; }; @@ -185,27 +185,27 @@ path = Runner; sourceTree = ""; }; - D73912EC22F37F3D000D13A0 /* Frameworks */ = { + 387E452E15F75ADFE5831EB2 /* Pods */ = { isa = PBXGroup; children = ( - 78D281624421AE1E5EBDC669 /* Pods_Runner.framework */, - F5118B6D9BB7780F9EA132CE /* Pods_RunnerTests.framework */, + 25AEB0B4D9F2B7DE622ADD81 /* Pods-Runner.debug.xcconfig */, + 6472EEBBCF09C3B25D8B2B86 /* Pods-Runner.release.xcconfig */, + C50E54638BEDED6CDD076255 /* Pods-Runner.profile.xcconfig */, + 2C1F704CCF23FEB170D14D8D /* Pods-RunnerTests.debug.xcconfig */, + 78748BFA245045FBDE6ADA5B /* Pods-RunnerTests.release.xcconfig */, + 95A6C08F876848F75FEA8E45 /* Pods-RunnerTests.profile.xcconfig */, ); - name = Frameworks; + name = Pods; + path = Pods; sourceTree = ""; }; - D9C725E837347320472EF00E /* Pods */ = { + D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - D557F6B84B2A2A778999E43D /* Pods-Runner.debug.xcconfig */, - C443135232D66CD6898F295B /* Pods-Runner.release.xcconfig */, - 4B4A8142B74E7DB324D6CEC7 /* Pods-Runner.profile.xcconfig */, - C5AA25FE3D1893D2D323B0E5 /* Pods-RunnerTests.debug.xcconfig */, - CA69B878DDE343EF556D0913 /* Pods-RunnerTests.release.xcconfig */, - CA79325D6AA2D545A5650B98 /* Pods-RunnerTests.profile.xcconfig */, + 04ABCC5B449296110056E869 /* Pods_Runner.framework */, + E4ACB22C2282ABF3956B25A9 /* Pods_RunnerTests.framework */, ); - name = Pods; - path = Pods; + name = Frameworks; sourceTree = ""; }; /* End PBXGroup section */ @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - D25673144C910A3282177B04 /* [CP] Check Pods Manifest.lock */, + DD21301A874393BF3ACDAA55 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - ABB374ED3576FD858355276B /* [CP] Check Pods Manifest.lock */, + 6CF97FA4FC5D30AA4AB0F085 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - A43F5D11D0093E10F947CBCA /* [CP] Embed Pods Frameworks */, + A536B83DA650A5A2D045D27C /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -361,46 +361,46 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - A43F5D11D0093E10F947CBCA /* [CP] Embed Pods Frameworks */ = { + 6CF97FA4FC5D30AA4AB0F085 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - ABB374ED3576FD858355276B /* [CP] Check Pods Manifest.lock */ = { + A536B83DA650A5A2D045D27C /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - D25673144C910A3282177B04 /* [CP] Check Pods Manifest.lock */ = { + DD21301A874393BF3ACDAA55 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C5AA25FE3D1893D2D323B0E5 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 2C1F704CCF23FEB170D14D8D /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = CA69B878DDE343EF556D0913 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 78748BFA245045FBDE6ADA5B /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = CA79325D6AA2D545A5650B98 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 95A6C08F876848F75FEA8E45 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/boring_to_beautiful/step_05/macos/Runner/Configs/AppInfo.xcconfig b/boring_to_beautiful/step_05/macos/Runner/Configs/AppInfo.xcconfig index ecc8702534..e31e407170 100644 --- a/boring_to_beautiful/step_05/macos/Runner/Configs/AppInfo.xcconfig +++ b/boring_to_beautiful/step_05/macos/Runner/Configs/AppInfo.xcconfig @@ -11,4 +11,4 @@ PRODUCT_NAME = myartist PRODUCT_BUNDLE_IDENTIFIER = com.example.myartist // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. diff --git a/boring_to_beautiful/step_05/pubspec.yaml b/boring_to_beautiful/step_05/pubspec.yaml index 0dcd53a572..52e0f25e78 100644 --- a/boring_to_beautiful/step_05/pubspec.yaml +++ b/boring_to_beautiful/step_05/pubspec.yaml @@ -18,9 +18,9 @@ dependencies: desktop_window: ^0.4.2 dynamic_color: ^1.7.0 english_words: ^4.0.0 - flutter_bloc: ^8.1.6 + flutter_bloc: ^9.0.0 freezed_annotation: ^2.4.4 - go_router: ^14.6.2 + go_router: ^14.6.3 material_color_utilities: any universal_platform: ^1.1.0 url_launcher: ^6.3.1 @@ -29,9 +29,9 @@ dependencies: dev_dependencies: flutter_test: sdk: flutter - build_runner: ^2.4.13 + build_runner: ^2.4.14 flutter_lints: ^5.0.0 - freezed: ^2.5.7 + freezed: ^2.5.8 flutter: uses-material-design: true diff --git a/boring_to_beautiful/step_05/windows/runner/Runner.rc b/boring_to_beautiful/step_05/windows/runner/Runner.rc index daf7b58804..e652dd348f 100644 --- a/boring_to_beautiful/step_05/windows/runner/Runner.rc +++ b/boring_to_beautiful/step_05/windows/runner/Runner.rc @@ -93,7 +93,7 @@ BEGIN VALUE "FileDescription", "myartist" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "InternalName", "myartist" "\0" - VALUE "LegalCopyright", "Copyright (C) 2024 com.example. All rights reserved." "\0" + VALUE "LegalCopyright", "Copyright (C) 2025 com.example. All rights reserved." "\0" VALUE "OriginalFilename", "myartist.exe" "\0" VALUE "ProductName", "myartist" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" diff --git a/boring_to_beautiful/step_06/android/app/src/main/kotlin/com/example/myartist/MainActivity.kt b/boring_to_beautiful/step_06/android/app/src/main/kotlin/com/example/myartist/MainActivity.kt index b724a01056..1e328c8556 100644 --- a/boring_to_beautiful/step_06/android/app/src/main/kotlin/com/example/myartist/MainActivity.kt +++ b/boring_to_beautiful/step_06/android/app/src/main/kotlin/com/example/myartist/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.myartist import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/boring_to_beautiful/step_06/ios/Runner.xcodeproj/project.pbxproj b/boring_to_beautiful/step_06/ios/Runner.xcodeproj/project.pbxproj index b3c1ee164f..6861a51941 100644 --- a/boring_to_beautiful/step_06/ios/Runner.xcodeproj/project.pbxproj +++ b/boring_to_beautiful/step_06/ios/Runner.xcodeproj/project.pbxproj @@ -10,9 +10,9 @@ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; - 4A42DFD328E0C2B11408D3A4 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A02EA99B51CD516C48F82B4E /* Pods_Runner.framework */; }; + 5D265AD7AE143CD184DAEC85 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8268D8C4F148188A17517348 /* Pods_RunnerTests.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; - 8B011954D9D5132E3C2239DA /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 38BF2318834F482DB8E14E2F /* Pods_RunnerTests.framework */; }; + 950BD5DB50746D52FA789638 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D2D48B5E56C94A19C89C8C03 /* Pods_Runner.framework */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; @@ -44,16 +44,16 @@ /* Begin PBXFileReference section */ 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; + 1ED7A7E88E6CCF719CB6DAC9 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 38BF2318834F482DB8E14E2F /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 6051B81DFE61FB123E553BE1 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 643807BDC78C0383EF22EEDE /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 894A76F52AB0EFA9A4A14CAF /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 8268D8C4F148188A17517348 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 87131577985E3393D3F27215 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 8FE5EA0C6F2B1340299150E1 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -61,32 +61,46 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - A02EA99B51CD516C48F82B4E /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - C95026BDC8B11A144B745B0F /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - E3C370D2330CDDCE7C7A1F28 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - E7909BB54F5FE45499392BA1 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + ACB57CED31D1A4F32F703235 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + B58FBDC83D68252855385083 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + D2D48B5E56C94A19C89C8C03 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D59AC870764873088B0F5386 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 382585DD6068E1C378B9C0A5 /* Frameworks */ = { + 97C146EB1CF9000F007C117D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 8B011954D9D5132E3C2239DA /* Pods_RunnerTests.framework in Frameworks */, + 950BD5DB50746D52FA789638 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 97C146EB1CF9000F007C117D /* Frameworks */ = { + B08DB3FEBC152015B17EEAE2 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 4A42DFD328E0C2B11408D3A4 /* Pods_Runner.framework in Frameworks */, + 5D265AD7AE143CD184DAEC85 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 2059A7B824563811B495255D /* Pods */ = { + isa = PBXGroup; + children = ( + 87131577985E3393D3F27215 /* Pods-Runner.debug.xcconfig */, + B58FBDC83D68252855385083 /* Pods-Runner.release.xcconfig */, + 8FE5EA0C6F2B1340299150E1 /* Pods-Runner.profile.xcconfig */, + 1ED7A7E88E6CCF719CB6DAC9 /* Pods-RunnerTests.debug.xcconfig */, + D59AC870764873088B0F5386 /* Pods-RunnerTests.release.xcconfig */, + ACB57CED31D1A4F32F703235 /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; 331C8082294A63A400263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -95,6 +109,15 @@ path = RunnerTests; sourceTree = ""; }; + 781E91E7C136FCD5F8C1FF46 /* Frameworks */ = { + isa = PBXGroup; + children = ( + D2D48B5E56C94A19C89C8C03 /* Pods_Runner.framework */, + 8268D8C4F148188A17517348 /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( @@ -113,8 +136,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - D8480061B1B10D02253D3FB3 /* Pods */, - C5F5B9731F65E009FD2CF172 /* Frameworks */, + 2059A7B824563811B495255D /* Pods */, + 781E91E7C136FCD5F8C1FF46 /* Frameworks */, ); sourceTree = ""; }; @@ -142,29 +165,6 @@ path = Runner; sourceTree = ""; }; - C5F5B9731F65E009FD2CF172 /* Frameworks */ = { - isa = PBXGroup; - children = ( - A02EA99B51CD516C48F82B4E /* Pods_Runner.framework */, - 38BF2318834F482DB8E14E2F /* Pods_RunnerTests.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; - D8480061B1B10D02253D3FB3 /* Pods */ = { - isa = PBXGroup; - children = ( - 643807BDC78C0383EF22EEDE /* Pods-Runner.debug.xcconfig */, - E3C370D2330CDDCE7C7A1F28 /* Pods-Runner.release.xcconfig */, - C95026BDC8B11A144B745B0F /* Pods-Runner.profile.xcconfig */, - 6051B81DFE61FB123E553BE1 /* Pods-RunnerTests.debug.xcconfig */, - 894A76F52AB0EFA9A4A14CAF /* Pods-RunnerTests.release.xcconfig */, - E7909BB54F5FE45499392BA1 /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 5933D500DE35F134BBF37298 /* [CP] Check Pods Manifest.lock */, + DA1A9725D0F67A848DF38576 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 382585DD6068E1C378B9C0A5 /* Frameworks */, + B08DB3FEBC152015B17EEAE2 /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 90A4664A0493DFE5BA3F0C78 /* [CP] Check Pods Manifest.lock */, + CE6B051E5DD2E4A8A63EDB9B /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 588E11D3E264FFA3FCD8329B /* [CP] Embed Pods Frameworks */, + 910A46B266D0EDE811A7754F /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -286,7 +286,7 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 588E11D3E264FFA3FCD8329B /* [CP] Embed Pods Frameworks */ = { + 910A46B266D0EDE811A7754F /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -303,29 +303,22 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - 5933D500DE35F134BBF37298 /* [CP] Check Pods Manifest.lock */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( ); + name = "Run Script"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - 90A4664A0493DFE5BA3F0C78 /* [CP] Check Pods Manifest.lock */ = { + CE6B051E5DD2E4A8A63EDB9B /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -347,20 +340,27 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { + DA1A9725D0F67A848DF38576 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "Run Script"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 6051B81DFE61FB123E553BE1 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 1ED7A7E88E6CCF719CB6DAC9 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 894A76F52AB0EFA9A4A14CAF /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = D59AC870764873088B0F5386 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = E7909BB54F5FE45499392BA1 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = ACB57CED31D1A4F32F703235 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/boring_to_beautiful/step_06/macos/Runner.xcodeproj/project.pbxproj b/boring_to_beautiful/step_06/macos/Runner.xcodeproj/project.pbxproj index 550d580704..fef5644e2b 100644 --- a/boring_to_beautiful/step_06/macos/Runner.xcodeproj/project.pbxproj +++ b/boring_to_beautiful/step_06/macos/Runner.xcodeproj/project.pbxproj @@ -27,8 +27,8 @@ 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 51C1678A490EFAA9FD4EA1D8 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 78D281624421AE1E5EBDC669 /* Pods_Runner.framework */; }; - 815ABAC7310F28FE9DE17C90 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F5118B6D9BB7780F9EA132CE /* Pods_RunnerTests.framework */; }; + 8F86CC48F84BC945E6BB473E /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E4ACB22C2282ABF3956B25A9 /* Pods_RunnerTests.framework */; }; + B86B413C29212C31FC38EC3F /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 04ABCC5B449296110056E869 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,6 +62,9 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 04ABCC5B449296110056E869 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 25AEB0B4D9F2B7DE622ADD81 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 2C1F704CCF23FEB170D14D8D /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -78,16 +81,13 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 4B4A8142B74E7DB324D6CEC7 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - 78D281624421AE1E5EBDC669 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 6472EEBBCF09C3B25D8B2B86 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 78748BFA245045FBDE6ADA5B /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; + 95A6C08F876848F75FEA8E45 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - C443135232D66CD6898F295B /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - C5AA25FE3D1893D2D323B0E5 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - CA69B878DDE343EF556D0913 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - CA79325D6AA2D545A5650B98 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - D557F6B84B2A2A778999E43D /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - F5118B6D9BB7780F9EA132CE /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + C50E54638BEDED6CDD076255 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + E4ACB22C2282ABF3956B25A9 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 815ABAC7310F28FE9DE17C90 /* Pods_RunnerTests.framework in Frameworks */, + 8F86CC48F84BC945E6BB473E /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,7 +103,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 51C1678A490EFAA9FD4EA1D8 /* Pods_Runner.framework in Frameworks */, + B86B413C29212C31FC38EC3F /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -137,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - D9C725E837347320472EF00E /* Pods */, + 387E452E15F75ADFE5831EB2 /* Pods */, ); sourceTree = ""; }; @@ -185,27 +185,27 @@ path = Runner; sourceTree = ""; }; - D73912EC22F37F3D000D13A0 /* Frameworks */ = { + 387E452E15F75ADFE5831EB2 /* Pods */ = { isa = PBXGroup; children = ( - 78D281624421AE1E5EBDC669 /* Pods_Runner.framework */, - F5118B6D9BB7780F9EA132CE /* Pods_RunnerTests.framework */, + 25AEB0B4D9F2B7DE622ADD81 /* Pods-Runner.debug.xcconfig */, + 6472EEBBCF09C3B25D8B2B86 /* Pods-Runner.release.xcconfig */, + C50E54638BEDED6CDD076255 /* Pods-Runner.profile.xcconfig */, + 2C1F704CCF23FEB170D14D8D /* Pods-RunnerTests.debug.xcconfig */, + 78748BFA245045FBDE6ADA5B /* Pods-RunnerTests.release.xcconfig */, + 95A6C08F876848F75FEA8E45 /* Pods-RunnerTests.profile.xcconfig */, ); - name = Frameworks; + name = Pods; + path = Pods; sourceTree = ""; }; - D9C725E837347320472EF00E /* Pods */ = { + D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - D557F6B84B2A2A778999E43D /* Pods-Runner.debug.xcconfig */, - C443135232D66CD6898F295B /* Pods-Runner.release.xcconfig */, - 4B4A8142B74E7DB324D6CEC7 /* Pods-Runner.profile.xcconfig */, - C5AA25FE3D1893D2D323B0E5 /* Pods-RunnerTests.debug.xcconfig */, - CA69B878DDE343EF556D0913 /* Pods-RunnerTests.release.xcconfig */, - CA79325D6AA2D545A5650B98 /* Pods-RunnerTests.profile.xcconfig */, + 04ABCC5B449296110056E869 /* Pods_Runner.framework */, + E4ACB22C2282ABF3956B25A9 /* Pods_RunnerTests.framework */, ); - name = Pods; - path = Pods; + name = Frameworks; sourceTree = ""; }; /* End PBXGroup section */ @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - D25673144C910A3282177B04 /* [CP] Check Pods Manifest.lock */, + DD21301A874393BF3ACDAA55 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - ABB374ED3576FD858355276B /* [CP] Check Pods Manifest.lock */, + 6CF97FA4FC5D30AA4AB0F085 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - A43F5D11D0093E10F947CBCA /* [CP] Embed Pods Frameworks */, + A536B83DA650A5A2D045D27C /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -361,46 +361,46 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - A43F5D11D0093E10F947CBCA /* [CP] Embed Pods Frameworks */ = { + 6CF97FA4FC5D30AA4AB0F085 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - ABB374ED3576FD858355276B /* [CP] Check Pods Manifest.lock */ = { + A536B83DA650A5A2D045D27C /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - D25673144C910A3282177B04 /* [CP] Check Pods Manifest.lock */ = { + DD21301A874393BF3ACDAA55 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C5AA25FE3D1893D2D323B0E5 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 2C1F704CCF23FEB170D14D8D /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = CA69B878DDE343EF556D0913 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 78748BFA245045FBDE6ADA5B /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = CA79325D6AA2D545A5650B98 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 95A6C08F876848F75FEA8E45 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/boring_to_beautiful/step_06/macos/Runner/Configs/AppInfo.xcconfig b/boring_to_beautiful/step_06/macos/Runner/Configs/AppInfo.xcconfig index ecc8702534..e31e407170 100644 --- a/boring_to_beautiful/step_06/macos/Runner/Configs/AppInfo.xcconfig +++ b/boring_to_beautiful/step_06/macos/Runner/Configs/AppInfo.xcconfig @@ -11,4 +11,4 @@ PRODUCT_NAME = myartist PRODUCT_BUNDLE_IDENTIFIER = com.example.myartist // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. diff --git a/boring_to_beautiful/step_06/pubspec.yaml b/boring_to_beautiful/step_06/pubspec.yaml index 0dcd53a572..52e0f25e78 100644 --- a/boring_to_beautiful/step_06/pubspec.yaml +++ b/boring_to_beautiful/step_06/pubspec.yaml @@ -18,9 +18,9 @@ dependencies: desktop_window: ^0.4.2 dynamic_color: ^1.7.0 english_words: ^4.0.0 - flutter_bloc: ^8.1.6 + flutter_bloc: ^9.0.0 freezed_annotation: ^2.4.4 - go_router: ^14.6.2 + go_router: ^14.6.3 material_color_utilities: any universal_platform: ^1.1.0 url_launcher: ^6.3.1 @@ -29,9 +29,9 @@ dependencies: dev_dependencies: flutter_test: sdk: flutter - build_runner: ^2.4.13 + build_runner: ^2.4.14 flutter_lints: ^5.0.0 - freezed: ^2.5.7 + freezed: ^2.5.8 flutter: uses-material-design: true diff --git a/boring_to_beautiful/step_06/windows/runner/Runner.rc b/boring_to_beautiful/step_06/windows/runner/Runner.rc index daf7b58804..e652dd348f 100644 --- a/boring_to_beautiful/step_06/windows/runner/Runner.rc +++ b/boring_to_beautiful/step_06/windows/runner/Runner.rc @@ -93,7 +93,7 @@ BEGIN VALUE "FileDescription", "myartist" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "InternalName", "myartist" "\0" - VALUE "LegalCopyright", "Copyright (C) 2024 com.example. All rights reserved." "\0" + VALUE "LegalCopyright", "Copyright (C) 2025 com.example. All rights reserved." "\0" VALUE "OriginalFilename", "myartist.exe" "\0" VALUE "ProductName", "myartist" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" diff --git a/boring_to_beautiful/step_07/android/app/src/main/kotlin/com/example/myartist/MainActivity.kt b/boring_to_beautiful/step_07/android/app/src/main/kotlin/com/example/myartist/MainActivity.kt index b724a01056..1e328c8556 100644 --- a/boring_to_beautiful/step_07/android/app/src/main/kotlin/com/example/myartist/MainActivity.kt +++ b/boring_to_beautiful/step_07/android/app/src/main/kotlin/com/example/myartist/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.myartist import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/boring_to_beautiful/step_07/ios/Runner.xcodeproj/project.pbxproj b/boring_to_beautiful/step_07/ios/Runner.xcodeproj/project.pbxproj index b3c1ee164f..6861a51941 100644 --- a/boring_to_beautiful/step_07/ios/Runner.xcodeproj/project.pbxproj +++ b/boring_to_beautiful/step_07/ios/Runner.xcodeproj/project.pbxproj @@ -10,9 +10,9 @@ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; - 4A42DFD328E0C2B11408D3A4 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A02EA99B51CD516C48F82B4E /* Pods_Runner.framework */; }; + 5D265AD7AE143CD184DAEC85 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8268D8C4F148188A17517348 /* Pods_RunnerTests.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; - 8B011954D9D5132E3C2239DA /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 38BF2318834F482DB8E14E2F /* Pods_RunnerTests.framework */; }; + 950BD5DB50746D52FA789638 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D2D48B5E56C94A19C89C8C03 /* Pods_Runner.framework */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; @@ -44,16 +44,16 @@ /* Begin PBXFileReference section */ 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; + 1ED7A7E88E6CCF719CB6DAC9 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 38BF2318834F482DB8E14E2F /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 6051B81DFE61FB123E553BE1 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 643807BDC78C0383EF22EEDE /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 894A76F52AB0EFA9A4A14CAF /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 8268D8C4F148188A17517348 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 87131577985E3393D3F27215 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 8FE5EA0C6F2B1340299150E1 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -61,32 +61,46 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - A02EA99B51CD516C48F82B4E /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - C95026BDC8B11A144B745B0F /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - E3C370D2330CDDCE7C7A1F28 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - E7909BB54F5FE45499392BA1 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + ACB57CED31D1A4F32F703235 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + B58FBDC83D68252855385083 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + D2D48B5E56C94A19C89C8C03 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D59AC870764873088B0F5386 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 382585DD6068E1C378B9C0A5 /* Frameworks */ = { + 97C146EB1CF9000F007C117D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 8B011954D9D5132E3C2239DA /* Pods_RunnerTests.framework in Frameworks */, + 950BD5DB50746D52FA789638 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 97C146EB1CF9000F007C117D /* Frameworks */ = { + B08DB3FEBC152015B17EEAE2 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 4A42DFD328E0C2B11408D3A4 /* Pods_Runner.framework in Frameworks */, + 5D265AD7AE143CD184DAEC85 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 2059A7B824563811B495255D /* Pods */ = { + isa = PBXGroup; + children = ( + 87131577985E3393D3F27215 /* Pods-Runner.debug.xcconfig */, + B58FBDC83D68252855385083 /* Pods-Runner.release.xcconfig */, + 8FE5EA0C6F2B1340299150E1 /* Pods-Runner.profile.xcconfig */, + 1ED7A7E88E6CCF719CB6DAC9 /* Pods-RunnerTests.debug.xcconfig */, + D59AC870764873088B0F5386 /* Pods-RunnerTests.release.xcconfig */, + ACB57CED31D1A4F32F703235 /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; 331C8082294A63A400263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -95,6 +109,15 @@ path = RunnerTests; sourceTree = ""; }; + 781E91E7C136FCD5F8C1FF46 /* Frameworks */ = { + isa = PBXGroup; + children = ( + D2D48B5E56C94A19C89C8C03 /* Pods_Runner.framework */, + 8268D8C4F148188A17517348 /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( @@ -113,8 +136,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - D8480061B1B10D02253D3FB3 /* Pods */, - C5F5B9731F65E009FD2CF172 /* Frameworks */, + 2059A7B824563811B495255D /* Pods */, + 781E91E7C136FCD5F8C1FF46 /* Frameworks */, ); sourceTree = ""; }; @@ -142,29 +165,6 @@ path = Runner; sourceTree = ""; }; - C5F5B9731F65E009FD2CF172 /* Frameworks */ = { - isa = PBXGroup; - children = ( - A02EA99B51CD516C48F82B4E /* Pods_Runner.framework */, - 38BF2318834F482DB8E14E2F /* Pods_RunnerTests.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; - D8480061B1B10D02253D3FB3 /* Pods */ = { - isa = PBXGroup; - children = ( - 643807BDC78C0383EF22EEDE /* Pods-Runner.debug.xcconfig */, - E3C370D2330CDDCE7C7A1F28 /* Pods-Runner.release.xcconfig */, - C95026BDC8B11A144B745B0F /* Pods-Runner.profile.xcconfig */, - 6051B81DFE61FB123E553BE1 /* Pods-RunnerTests.debug.xcconfig */, - 894A76F52AB0EFA9A4A14CAF /* Pods-RunnerTests.release.xcconfig */, - E7909BB54F5FE45499392BA1 /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 5933D500DE35F134BBF37298 /* [CP] Check Pods Manifest.lock */, + DA1A9725D0F67A848DF38576 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 382585DD6068E1C378B9C0A5 /* Frameworks */, + B08DB3FEBC152015B17EEAE2 /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 90A4664A0493DFE5BA3F0C78 /* [CP] Check Pods Manifest.lock */, + CE6B051E5DD2E4A8A63EDB9B /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 588E11D3E264FFA3FCD8329B /* [CP] Embed Pods Frameworks */, + 910A46B266D0EDE811A7754F /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -286,7 +286,7 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 588E11D3E264FFA3FCD8329B /* [CP] Embed Pods Frameworks */ = { + 910A46B266D0EDE811A7754F /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -303,29 +303,22 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - 5933D500DE35F134BBF37298 /* [CP] Check Pods Manifest.lock */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( ); + name = "Run Script"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - 90A4664A0493DFE5BA3F0C78 /* [CP] Check Pods Manifest.lock */ = { + CE6B051E5DD2E4A8A63EDB9B /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -347,20 +340,27 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { + DA1A9725D0F67A848DF38576 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "Run Script"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 6051B81DFE61FB123E553BE1 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 1ED7A7E88E6CCF719CB6DAC9 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 894A76F52AB0EFA9A4A14CAF /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = D59AC870764873088B0F5386 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = E7909BB54F5FE45499392BA1 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = ACB57CED31D1A4F32F703235 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/boring_to_beautiful/step_07/macos/Runner.xcodeproj/project.pbxproj b/boring_to_beautiful/step_07/macos/Runner.xcodeproj/project.pbxproj index 550d580704..fef5644e2b 100644 --- a/boring_to_beautiful/step_07/macos/Runner.xcodeproj/project.pbxproj +++ b/boring_to_beautiful/step_07/macos/Runner.xcodeproj/project.pbxproj @@ -27,8 +27,8 @@ 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 51C1678A490EFAA9FD4EA1D8 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 78D281624421AE1E5EBDC669 /* Pods_Runner.framework */; }; - 815ABAC7310F28FE9DE17C90 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F5118B6D9BB7780F9EA132CE /* Pods_RunnerTests.framework */; }; + 8F86CC48F84BC945E6BB473E /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E4ACB22C2282ABF3956B25A9 /* Pods_RunnerTests.framework */; }; + B86B413C29212C31FC38EC3F /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 04ABCC5B449296110056E869 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,6 +62,9 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 04ABCC5B449296110056E869 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 25AEB0B4D9F2B7DE622ADD81 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 2C1F704CCF23FEB170D14D8D /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -78,16 +81,13 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 4B4A8142B74E7DB324D6CEC7 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - 78D281624421AE1E5EBDC669 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 6472EEBBCF09C3B25D8B2B86 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 78748BFA245045FBDE6ADA5B /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; + 95A6C08F876848F75FEA8E45 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - C443135232D66CD6898F295B /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - C5AA25FE3D1893D2D323B0E5 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - CA69B878DDE343EF556D0913 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - CA79325D6AA2D545A5650B98 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - D557F6B84B2A2A778999E43D /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - F5118B6D9BB7780F9EA132CE /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + C50E54638BEDED6CDD076255 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + E4ACB22C2282ABF3956B25A9 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 815ABAC7310F28FE9DE17C90 /* Pods_RunnerTests.framework in Frameworks */, + 8F86CC48F84BC945E6BB473E /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,7 +103,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 51C1678A490EFAA9FD4EA1D8 /* Pods_Runner.framework in Frameworks */, + B86B413C29212C31FC38EC3F /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -137,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - D9C725E837347320472EF00E /* Pods */, + 387E452E15F75ADFE5831EB2 /* Pods */, ); sourceTree = ""; }; @@ -185,27 +185,27 @@ path = Runner; sourceTree = ""; }; - D73912EC22F37F3D000D13A0 /* Frameworks */ = { + 387E452E15F75ADFE5831EB2 /* Pods */ = { isa = PBXGroup; children = ( - 78D281624421AE1E5EBDC669 /* Pods_Runner.framework */, - F5118B6D9BB7780F9EA132CE /* Pods_RunnerTests.framework */, + 25AEB0B4D9F2B7DE622ADD81 /* Pods-Runner.debug.xcconfig */, + 6472EEBBCF09C3B25D8B2B86 /* Pods-Runner.release.xcconfig */, + C50E54638BEDED6CDD076255 /* Pods-Runner.profile.xcconfig */, + 2C1F704CCF23FEB170D14D8D /* Pods-RunnerTests.debug.xcconfig */, + 78748BFA245045FBDE6ADA5B /* Pods-RunnerTests.release.xcconfig */, + 95A6C08F876848F75FEA8E45 /* Pods-RunnerTests.profile.xcconfig */, ); - name = Frameworks; + name = Pods; + path = Pods; sourceTree = ""; }; - D9C725E837347320472EF00E /* Pods */ = { + D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - D557F6B84B2A2A778999E43D /* Pods-Runner.debug.xcconfig */, - C443135232D66CD6898F295B /* Pods-Runner.release.xcconfig */, - 4B4A8142B74E7DB324D6CEC7 /* Pods-Runner.profile.xcconfig */, - C5AA25FE3D1893D2D323B0E5 /* Pods-RunnerTests.debug.xcconfig */, - CA69B878DDE343EF556D0913 /* Pods-RunnerTests.release.xcconfig */, - CA79325D6AA2D545A5650B98 /* Pods-RunnerTests.profile.xcconfig */, + 04ABCC5B449296110056E869 /* Pods_Runner.framework */, + E4ACB22C2282ABF3956B25A9 /* Pods_RunnerTests.framework */, ); - name = Pods; - path = Pods; + name = Frameworks; sourceTree = ""; }; /* End PBXGroup section */ @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - D25673144C910A3282177B04 /* [CP] Check Pods Manifest.lock */, + DD21301A874393BF3ACDAA55 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - ABB374ED3576FD858355276B /* [CP] Check Pods Manifest.lock */, + 6CF97FA4FC5D30AA4AB0F085 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - A43F5D11D0093E10F947CBCA /* [CP] Embed Pods Frameworks */, + A536B83DA650A5A2D045D27C /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -361,46 +361,46 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - A43F5D11D0093E10F947CBCA /* [CP] Embed Pods Frameworks */ = { + 6CF97FA4FC5D30AA4AB0F085 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - ABB374ED3576FD858355276B /* [CP] Check Pods Manifest.lock */ = { + A536B83DA650A5A2D045D27C /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - D25673144C910A3282177B04 /* [CP] Check Pods Manifest.lock */ = { + DD21301A874393BF3ACDAA55 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C5AA25FE3D1893D2D323B0E5 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 2C1F704CCF23FEB170D14D8D /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = CA69B878DDE343EF556D0913 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 78748BFA245045FBDE6ADA5B /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = CA79325D6AA2D545A5650B98 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 95A6C08F876848F75FEA8E45 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/boring_to_beautiful/step_07/macos/Runner/Configs/AppInfo.xcconfig b/boring_to_beautiful/step_07/macos/Runner/Configs/AppInfo.xcconfig index ecc8702534..e31e407170 100644 --- a/boring_to_beautiful/step_07/macos/Runner/Configs/AppInfo.xcconfig +++ b/boring_to_beautiful/step_07/macos/Runner/Configs/AppInfo.xcconfig @@ -11,4 +11,4 @@ PRODUCT_NAME = myartist PRODUCT_BUNDLE_IDENTIFIER = com.example.myartist // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. diff --git a/boring_to_beautiful/step_07/pubspec.yaml b/boring_to_beautiful/step_07/pubspec.yaml index 0dcd53a572..52e0f25e78 100644 --- a/boring_to_beautiful/step_07/pubspec.yaml +++ b/boring_to_beautiful/step_07/pubspec.yaml @@ -18,9 +18,9 @@ dependencies: desktop_window: ^0.4.2 dynamic_color: ^1.7.0 english_words: ^4.0.0 - flutter_bloc: ^8.1.6 + flutter_bloc: ^9.0.0 freezed_annotation: ^2.4.4 - go_router: ^14.6.2 + go_router: ^14.6.3 material_color_utilities: any universal_platform: ^1.1.0 url_launcher: ^6.3.1 @@ -29,9 +29,9 @@ dependencies: dev_dependencies: flutter_test: sdk: flutter - build_runner: ^2.4.13 + build_runner: ^2.4.14 flutter_lints: ^5.0.0 - freezed: ^2.5.7 + freezed: ^2.5.8 flutter: uses-material-design: true diff --git a/boring_to_beautiful/step_07/windows/runner/Runner.rc b/boring_to_beautiful/step_07/windows/runner/Runner.rc index daf7b58804..e652dd348f 100644 --- a/boring_to_beautiful/step_07/windows/runner/Runner.rc +++ b/boring_to_beautiful/step_07/windows/runner/Runner.rc @@ -93,7 +93,7 @@ BEGIN VALUE "FileDescription", "myartist" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "InternalName", "myartist" "\0" - VALUE "LegalCopyright", "Copyright (C) 2024 com.example. All rights reserved." "\0" + VALUE "LegalCopyright", "Copyright (C) 2025 com.example. All rights reserved." "\0" VALUE "OriginalFilename", "myartist.exe" "\0" VALUE "ProductName", "myartist" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" From 0544fd8c5428975ac7eccf9e2b86a3124cf70dcf Mon Sep 17 00:00:00 2001 From: Brett Morgan Date: Wed, 22 Jan 2025 13:09:25 +1100 Subject: [PATCH 093/108] Update `brick_breaker` --- .../com/example/brick_breaker/MainActivity.kt | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 110 +++++++++--------- .../macos/Runner.xcodeproj/project.pbxproj | 108 ++++++++--------- .../macos/Runner/Configs/AppInfo.xcconfig | 2 +- .../step_03/windows/runner/Runner.rc | 2 +- .../com/example/brick_breaker/MainActivity.kt | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 110 +++++++++--------- .../macos/Runner.xcodeproj/project.pbxproj | 108 ++++++++--------- .../macos/Runner/Configs/AppInfo.xcconfig | 2 +- .../step_04/windows/runner/Runner.rc | 2 +- .../com/example/brick_breaker/MainActivity.kt | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 110 +++++++++--------- .../macos/Runner.xcodeproj/project.pbxproj | 108 ++++++++--------- .../macos/Runner/Configs/AppInfo.xcconfig | 2 +- .../step_05/windows/runner/Runner.rc | 2 +- .../com/example/brick_breaker/MainActivity.kt | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 110 +++++++++--------- .../macos/Runner.xcodeproj/project.pbxproj | 108 ++++++++--------- .../macos/Runner/Configs/AppInfo.xcconfig | 2 +- .../step_06/windows/runner/Runner.rc | 2 +- .../com/example/brick_breaker/MainActivity.kt | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 110 +++++++++--------- .../macos/Runner.xcodeproj/project.pbxproj | 108 ++++++++--------- .../macos/Runner/Configs/AppInfo.xcconfig | 2 +- .../step_07/windows/runner/Runner.rc | 2 +- .../com/example/brick_breaker/MainActivity.kt | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 110 +++++++++--------- .../macos/Runner.xcodeproj/project.pbxproj | 108 ++++++++--------- .../macos/Runner/Configs/AppInfo.xcconfig | 2 +- .../step_08/windows/runner/Runner.rc | 2 +- .../com/example/brick_breaker/MainActivity.kt | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 110 +++++++++--------- .../macos/Runner.xcodeproj/project.pbxproj | 108 ++++++++--------- .../macos/Runner/Configs/AppInfo.xcconfig | 2 +- .../step_09/windows/runner/Runner.rc | 2 +- .../com/example/brick_breaker/MainActivity.kt | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 110 +++++++++--------- .../macos/Runner.xcodeproj/project.pbxproj | 108 ++++++++--------- .../macos/Runner/Configs/AppInfo.xcconfig | 2 +- .../step_10/windows/runner/Runner.rc | 2 +- 40 files changed, 896 insertions(+), 896 deletions(-) diff --git a/brick_breaker/step_03/android/app/src/main/kotlin/com/example/brick_breaker/MainActivity.kt b/brick_breaker/step_03/android/app/src/main/kotlin/com/example/brick_breaker/MainActivity.kt index 74a09e998d..7f4414ee4a 100644 --- a/brick_breaker/step_03/android/app/src/main/kotlin/com/example/brick_breaker/MainActivity.kt +++ b/brick_breaker/step_03/android/app/src/main/kotlin/com/example/brick_breaker/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.brick_breaker import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/brick_breaker/step_03/ios/Runner.xcodeproj/project.pbxproj b/brick_breaker/step_03/ios/Runner.xcodeproj/project.pbxproj index 30066aa2cd..1af34be3fd 100644 --- a/brick_breaker/step_03/ios/Runner.xcodeproj/project.pbxproj +++ b/brick_breaker/step_03/ios/Runner.xcodeproj/project.pbxproj @@ -7,15 +7,15 @@ objects = { /* Begin PBXBuildFile section */ - 124136F5D0A7F933C33809B9 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 27AB1FDB61F7EFA18C7E0C37 /* Pods_RunnerTests.framework */; }; 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; + 16412B2BBE9DF83AFFE1C4F3 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5073259FF0E041D4A20CDB47 /* Pods_Runner.framework */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - D17E67BAFF6CBB4802D1BAE9 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FD3A88A617EB41D61FEC5F85 /* Pods_Runner.framework */; }; + A459070B64CED6A1EA97E95E /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6BFFE5CD3DF2B69B1CDBDA56 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,18 +42,19 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 11455C70F3A35908CFB73C4C /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 27AB1FDB61F7EFA18C7E0C37 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 44E0C7F06C49CB96A5847578 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 4B9CB300B7DEF06F9EE989F6 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 5A6A6DE8DF6F50895C3E5A39 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 45B65D22BC79CEA3BE8A3168 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 5073259FF0E041D4A20CDB47 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 6BFFE5CD3DF2B69B1CDBDA56 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; + 96E72E87BAF1EBBB611A662D /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -61,18 +62,17 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 9AD2F05105704247A2B664B6 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - AD4797C2B873300FB44F8AA8 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - F7507B05AAF1181BE28B35BF /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - FD3A88A617EB41D61FEC5F85 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + A13F37D436F70914AE6725A8 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + C71FF5AA05FD3BFF419E3045 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + CC559457A99977ED9C571323 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 49D69B12016413FDD74E1C79 /* Frameworks */ = { + 45B96668265977AFBAE25004 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 124136F5D0A7F933C33809B9 /* Pods_RunnerTests.framework in Frameworks */, + A459070B64CED6A1EA97E95E /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -80,22 +80,13 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - D17E67BAFF6CBB4802D1BAE9 /* Pods_Runner.framework in Frameworks */, + 16412B2BBE9DF83AFFE1C4F3 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 085B178DD0BBD60C20AD056B /* Frameworks */ = { - isa = PBXGroup; - children = ( - FD3A88A617EB41D61FEC5F85 /* Pods_Runner.framework */, - 27AB1FDB61F7EFA18C7E0C37 /* Pods_RunnerTests.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; 331C8082294A63A400263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -104,15 +95,15 @@ path = RunnerTests; sourceTree = ""; }; - 3EF3C2D65BCFB10B53E2A055 /* Pods */ = { + 70FA5D61F4E5EB911087D730 /* Pods */ = { isa = PBXGroup; children = ( - AD4797C2B873300FB44F8AA8 /* Pods-Runner.debug.xcconfig */, - 4B9CB300B7DEF06F9EE989F6 /* Pods-Runner.release.xcconfig */, - 9AD2F05105704247A2B664B6 /* Pods-Runner.profile.xcconfig */, - 44E0C7F06C49CB96A5847578 /* Pods-RunnerTests.debug.xcconfig */, - 5A6A6DE8DF6F50895C3E5A39 /* Pods-RunnerTests.release.xcconfig */, - F7507B05AAF1181BE28B35BF /* Pods-RunnerTests.profile.xcconfig */, + A13F37D436F70914AE6725A8 /* Pods-Runner.debug.xcconfig */, + 11455C70F3A35908CFB73C4C /* Pods-Runner.release.xcconfig */, + 96E72E87BAF1EBBB611A662D /* Pods-Runner.profile.xcconfig */, + CC559457A99977ED9C571323 /* Pods-RunnerTests.debug.xcconfig */, + C71FF5AA05FD3BFF419E3045 /* Pods-RunnerTests.release.xcconfig */, + 45B65D22BC79CEA3BE8A3168 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -136,8 +127,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - 3EF3C2D65BCFB10B53E2A055 /* Pods */, - 085B178DD0BBD60C20AD056B /* Frameworks */, + 70FA5D61F4E5EB911087D730 /* Pods */, + A0250122B87A7F70B5B15D11 /* Frameworks */, ); sourceTree = ""; }; @@ -165,6 +156,15 @@ path = Runner; sourceTree = ""; }; + A0250122B87A7F70B5B15D11 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 5073259FF0E041D4A20CDB47 /* Pods_Runner.framework */, + 6BFFE5CD3DF2B69B1CDBDA56 /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - F3625ABFABAD7DEE60A5EFF0 /* [CP] Check Pods Manifest.lock */, + 0AB04FA11061CE70D81EE758 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 49D69B12016413FDD74E1C79 /* Frameworks */, + 45B96668265977AFBAE25004 /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 31EDF6437177E940D5C99867 /* [CP] Check Pods Manifest.lock */, + 45341BF5BF96927FD1AF17EC /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 7032893BEEADAF68AEE7E2D5 /* [CP] Embed Pods Frameworks */, + EC54BA3A477B08B054EB3B58 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -270,7 +270,7 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 31EDF6437177E940D5C99867 /* [CP] Check Pods Manifest.lock */ = { + 0AB04FA11061CE70D81EE758 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -285,7 +285,7 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -308,21 +308,26 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 7032893BEEADAF68AEE7E2D5 /* [CP] Embed Pods Frameworks */ = { + 45341BF5BF96927FD1AF17EC /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; 9740EEB61CF901F6004384FC /* Run Script */ = { @@ -340,26 +345,21 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - F3625ABFABAD7DEE60A5EFF0 /* [CP] Check Pods Manifest.lock */ = { + EC54BA3A477B08B054EB3B58 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 44E0C7F06C49CB96A5847578 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = CC559457A99977ED9C571323 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 5A6A6DE8DF6F50895C3E5A39 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = C71FF5AA05FD3BFF419E3045 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = F7507B05AAF1181BE28B35BF /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 45B65D22BC79CEA3BE8A3168 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/brick_breaker/step_03/macos/Runner.xcodeproj/project.pbxproj b/brick_breaker/step_03/macos/Runner.xcodeproj/project.pbxproj index 56d66afde0..25bdef5fc2 100644 --- a/brick_breaker/step_03/macos/Runner.xcodeproj/project.pbxproj +++ b/brick_breaker/step_03/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ - 22C298D65C4A41DD02AAEDC0 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A5D295326948221FD077A049 /* Pods_Runner.framework */; }; + 16437C8D841CE52C6E992400 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 56D647FEB41021142EAAE817 /* Pods_Runner.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - A1798DF22E9E8F245592515E /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7F08A230F9EB9E9A4781176E /* Pods_RunnerTests.framework */; }; + F89F1AAA1324AE7E3DD5C5CA /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FEAB0B2BDB3505A1268F9E75 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,7 +62,7 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 3198E92D2AC0FF9E71015587 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 28E6650B654A9838F4BC754D /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -79,15 +79,15 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 60A5F2D17DC4E97002864529 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - 6993DDD977CBE37C8788E05D /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 56D647FEB41021142EAAE817 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 7F08A230F9EB9E9A4781176E /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - A5D295326948221FD077A049 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - B6A2C2BE919F71BEF08A457D /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - B772976BED82CD21FAC21917 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - C588DD34F47228F313138254 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + A94626AB4F8134D1CE35B95E /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + AE75D9ABF8118D94B26D31A6 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + B493EFF6C4A291A6BE28DBF9 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + BD3A0F8A638DFB117A3B12AE /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + D4A4CAF902F42F2C275D5140 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + FEAB0B2BDB3505A1268F9E75 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - A1798DF22E9E8F245592515E /* Pods_RunnerTests.framework in Frameworks */, + F89F1AAA1324AE7E3DD5C5CA /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,7 +103,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 22C298D65C4A41DD02AAEDC0 /* Pods_Runner.framework in Frameworks */, + 16437C8D841CE52C6E992400 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -137,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 50631F2D68042C5EE36E82AD /* Pods */, + 48561E3700181DB4D4E3151D /* Pods */, ); sourceTree = ""; }; @@ -185,15 +185,15 @@ path = Runner; sourceTree = ""; }; - 50631F2D68042C5EE36E82AD /* Pods */ = { + 48561E3700181DB4D4E3151D /* Pods */ = { isa = PBXGroup; children = ( - 6993DDD977CBE37C8788E05D /* Pods-Runner.debug.xcconfig */, - C588DD34F47228F313138254 /* Pods-Runner.release.xcconfig */, - 3198E92D2AC0FF9E71015587 /* Pods-Runner.profile.xcconfig */, - B772976BED82CD21FAC21917 /* Pods-RunnerTests.debug.xcconfig */, - 60A5F2D17DC4E97002864529 /* Pods-RunnerTests.release.xcconfig */, - B6A2C2BE919F71BEF08A457D /* Pods-RunnerTests.profile.xcconfig */, + B493EFF6C4A291A6BE28DBF9 /* Pods-Runner.debug.xcconfig */, + D4A4CAF902F42F2C275D5140 /* Pods-Runner.release.xcconfig */, + BD3A0F8A638DFB117A3B12AE /* Pods-Runner.profile.xcconfig */, + A94626AB4F8134D1CE35B95E /* Pods-RunnerTests.debug.xcconfig */, + 28E6650B654A9838F4BC754D /* Pods-RunnerTests.release.xcconfig */, + AE75D9ABF8118D94B26D31A6 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -202,8 +202,8 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - A5D295326948221FD077A049 /* Pods_Runner.framework */, - 7F08A230F9EB9E9A4781176E /* Pods_RunnerTests.framework */, + 56D647FEB41021142EAAE817 /* Pods_Runner.framework */, + FEAB0B2BDB3505A1268F9E75 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - B260F14E41F933FEB31E7D79 /* [CP] Check Pods Manifest.lock */, + F91EDBACE4FD3BC98B932C34 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 059F483F30DF9E5B020E19E9 /* [CP] Check Pods Manifest.lock */, + BCDF0270DF5CD351358E3A05 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - F864432775D8970F2B07DC68 /* [CP] Embed Pods Frameworks */, + B0C0E7DD7A7301A643A0AED9 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,67 +323,62 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 059F483F30DF9E5B020E19E9 /* [CP] Check Pods Manifest.lock */ = { + 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", ); - name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; }; - 3399D490228B24CF009A79C7 /* ShellScript */ = { + 33CC111E2044C6BF0003C045 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + Flutter/ephemeral/FlutterInputs.xcfilelist, ); inputPaths = ( + Flutter/ephemeral/tripwire, ); outputFileListPaths = ( + Flutter/ephemeral/FlutterOutputs.xcfilelist, ); outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; + shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 33CC111E2044C6BF0003C045 /* ShellScript */ = { + B0C0E7DD7A7301A643A0AED9 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - Flutter/ephemeral/FlutterInputs.xcfilelist, - ); - inputPaths = ( - Flutter/ephemeral/tripwire, + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - Flutter/ephemeral/FlutterOutputs.xcfilelist, - ); - outputPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; }; - B260F14E41F933FEB31E7D79 /* [CP] Check Pods Manifest.lock */ = { + BCDF0270DF5CD351358E3A05 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -398,28 +393,33 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - F864432775D8970F2B07DC68 /* [CP] Embed Pods Frameworks */ = { + F91EDBACE4FD3BC98B932C34 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = B772976BED82CD21FAC21917 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = A94626AB4F8134D1CE35B95E /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 60A5F2D17DC4E97002864529 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 28E6650B654A9838F4BC754D /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = B6A2C2BE919F71BEF08A457D /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = AE75D9ABF8118D94B26D31A6 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/brick_breaker/step_03/macos/Runner/Configs/AppInfo.xcconfig b/brick_breaker/step_03/macos/Runner/Configs/AppInfo.xcconfig index 63448c49a5..c6af9507a6 100644 --- a/brick_breaker/step_03/macos/Runner/Configs/AppInfo.xcconfig +++ b/brick_breaker/step_03/macos/Runner/Configs/AppInfo.xcconfig @@ -11,4 +11,4 @@ PRODUCT_NAME = brick_breaker PRODUCT_BUNDLE_IDENTIFIER = com.example.brickBreaker // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. diff --git a/brick_breaker/step_03/windows/runner/Runner.rc b/brick_breaker/step_03/windows/runner/Runner.rc index ae27c9042e..aa2737073d 100644 --- a/brick_breaker/step_03/windows/runner/Runner.rc +++ b/brick_breaker/step_03/windows/runner/Runner.rc @@ -93,7 +93,7 @@ BEGIN VALUE "FileDescription", "brick_breaker" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "InternalName", "brick_breaker" "\0" - VALUE "LegalCopyright", "Copyright (C) 2024 com.example. All rights reserved." "\0" + VALUE "LegalCopyright", "Copyright (C) 2025 com.example. All rights reserved." "\0" VALUE "OriginalFilename", "brick_breaker.exe" "\0" VALUE "ProductName", "brick_breaker" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" diff --git a/brick_breaker/step_04/android/app/src/main/kotlin/com/example/brick_breaker/MainActivity.kt b/brick_breaker/step_04/android/app/src/main/kotlin/com/example/brick_breaker/MainActivity.kt index 74a09e998d..7f4414ee4a 100644 --- a/brick_breaker/step_04/android/app/src/main/kotlin/com/example/brick_breaker/MainActivity.kt +++ b/brick_breaker/step_04/android/app/src/main/kotlin/com/example/brick_breaker/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.brick_breaker import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/brick_breaker/step_04/ios/Runner.xcodeproj/project.pbxproj b/brick_breaker/step_04/ios/Runner.xcodeproj/project.pbxproj index 30066aa2cd..1af34be3fd 100644 --- a/brick_breaker/step_04/ios/Runner.xcodeproj/project.pbxproj +++ b/brick_breaker/step_04/ios/Runner.xcodeproj/project.pbxproj @@ -7,15 +7,15 @@ objects = { /* Begin PBXBuildFile section */ - 124136F5D0A7F933C33809B9 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 27AB1FDB61F7EFA18C7E0C37 /* Pods_RunnerTests.framework */; }; 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; + 16412B2BBE9DF83AFFE1C4F3 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5073259FF0E041D4A20CDB47 /* Pods_Runner.framework */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - D17E67BAFF6CBB4802D1BAE9 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FD3A88A617EB41D61FEC5F85 /* Pods_Runner.framework */; }; + A459070B64CED6A1EA97E95E /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6BFFE5CD3DF2B69B1CDBDA56 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,18 +42,19 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 11455C70F3A35908CFB73C4C /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 27AB1FDB61F7EFA18C7E0C37 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 44E0C7F06C49CB96A5847578 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 4B9CB300B7DEF06F9EE989F6 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 5A6A6DE8DF6F50895C3E5A39 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 45B65D22BC79CEA3BE8A3168 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 5073259FF0E041D4A20CDB47 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 6BFFE5CD3DF2B69B1CDBDA56 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; + 96E72E87BAF1EBBB611A662D /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -61,18 +62,17 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 9AD2F05105704247A2B664B6 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - AD4797C2B873300FB44F8AA8 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - F7507B05AAF1181BE28B35BF /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - FD3A88A617EB41D61FEC5F85 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + A13F37D436F70914AE6725A8 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + C71FF5AA05FD3BFF419E3045 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + CC559457A99977ED9C571323 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 49D69B12016413FDD74E1C79 /* Frameworks */ = { + 45B96668265977AFBAE25004 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 124136F5D0A7F933C33809B9 /* Pods_RunnerTests.framework in Frameworks */, + A459070B64CED6A1EA97E95E /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -80,22 +80,13 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - D17E67BAFF6CBB4802D1BAE9 /* Pods_Runner.framework in Frameworks */, + 16412B2BBE9DF83AFFE1C4F3 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 085B178DD0BBD60C20AD056B /* Frameworks */ = { - isa = PBXGroup; - children = ( - FD3A88A617EB41D61FEC5F85 /* Pods_Runner.framework */, - 27AB1FDB61F7EFA18C7E0C37 /* Pods_RunnerTests.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; 331C8082294A63A400263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -104,15 +95,15 @@ path = RunnerTests; sourceTree = ""; }; - 3EF3C2D65BCFB10B53E2A055 /* Pods */ = { + 70FA5D61F4E5EB911087D730 /* Pods */ = { isa = PBXGroup; children = ( - AD4797C2B873300FB44F8AA8 /* Pods-Runner.debug.xcconfig */, - 4B9CB300B7DEF06F9EE989F6 /* Pods-Runner.release.xcconfig */, - 9AD2F05105704247A2B664B6 /* Pods-Runner.profile.xcconfig */, - 44E0C7F06C49CB96A5847578 /* Pods-RunnerTests.debug.xcconfig */, - 5A6A6DE8DF6F50895C3E5A39 /* Pods-RunnerTests.release.xcconfig */, - F7507B05AAF1181BE28B35BF /* Pods-RunnerTests.profile.xcconfig */, + A13F37D436F70914AE6725A8 /* Pods-Runner.debug.xcconfig */, + 11455C70F3A35908CFB73C4C /* Pods-Runner.release.xcconfig */, + 96E72E87BAF1EBBB611A662D /* Pods-Runner.profile.xcconfig */, + CC559457A99977ED9C571323 /* Pods-RunnerTests.debug.xcconfig */, + C71FF5AA05FD3BFF419E3045 /* Pods-RunnerTests.release.xcconfig */, + 45B65D22BC79CEA3BE8A3168 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -136,8 +127,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - 3EF3C2D65BCFB10B53E2A055 /* Pods */, - 085B178DD0BBD60C20AD056B /* Frameworks */, + 70FA5D61F4E5EB911087D730 /* Pods */, + A0250122B87A7F70B5B15D11 /* Frameworks */, ); sourceTree = ""; }; @@ -165,6 +156,15 @@ path = Runner; sourceTree = ""; }; + A0250122B87A7F70B5B15D11 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 5073259FF0E041D4A20CDB47 /* Pods_Runner.framework */, + 6BFFE5CD3DF2B69B1CDBDA56 /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - F3625ABFABAD7DEE60A5EFF0 /* [CP] Check Pods Manifest.lock */, + 0AB04FA11061CE70D81EE758 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 49D69B12016413FDD74E1C79 /* Frameworks */, + 45B96668265977AFBAE25004 /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 31EDF6437177E940D5C99867 /* [CP] Check Pods Manifest.lock */, + 45341BF5BF96927FD1AF17EC /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 7032893BEEADAF68AEE7E2D5 /* [CP] Embed Pods Frameworks */, + EC54BA3A477B08B054EB3B58 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -270,7 +270,7 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 31EDF6437177E940D5C99867 /* [CP] Check Pods Manifest.lock */ = { + 0AB04FA11061CE70D81EE758 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -285,7 +285,7 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -308,21 +308,26 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 7032893BEEADAF68AEE7E2D5 /* [CP] Embed Pods Frameworks */ = { + 45341BF5BF96927FD1AF17EC /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; 9740EEB61CF901F6004384FC /* Run Script */ = { @@ -340,26 +345,21 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - F3625ABFABAD7DEE60A5EFF0 /* [CP] Check Pods Manifest.lock */ = { + EC54BA3A477B08B054EB3B58 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 44E0C7F06C49CB96A5847578 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = CC559457A99977ED9C571323 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 5A6A6DE8DF6F50895C3E5A39 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = C71FF5AA05FD3BFF419E3045 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = F7507B05AAF1181BE28B35BF /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 45B65D22BC79CEA3BE8A3168 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/brick_breaker/step_04/macos/Runner.xcodeproj/project.pbxproj b/brick_breaker/step_04/macos/Runner.xcodeproj/project.pbxproj index 56d66afde0..25bdef5fc2 100644 --- a/brick_breaker/step_04/macos/Runner.xcodeproj/project.pbxproj +++ b/brick_breaker/step_04/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ - 22C298D65C4A41DD02AAEDC0 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A5D295326948221FD077A049 /* Pods_Runner.framework */; }; + 16437C8D841CE52C6E992400 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 56D647FEB41021142EAAE817 /* Pods_Runner.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - A1798DF22E9E8F245592515E /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7F08A230F9EB9E9A4781176E /* Pods_RunnerTests.framework */; }; + F89F1AAA1324AE7E3DD5C5CA /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FEAB0B2BDB3505A1268F9E75 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,7 +62,7 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 3198E92D2AC0FF9E71015587 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 28E6650B654A9838F4BC754D /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -79,15 +79,15 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 60A5F2D17DC4E97002864529 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - 6993DDD977CBE37C8788E05D /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 56D647FEB41021142EAAE817 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 7F08A230F9EB9E9A4781176E /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - A5D295326948221FD077A049 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - B6A2C2BE919F71BEF08A457D /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - B772976BED82CD21FAC21917 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - C588DD34F47228F313138254 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + A94626AB4F8134D1CE35B95E /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + AE75D9ABF8118D94B26D31A6 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + B493EFF6C4A291A6BE28DBF9 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + BD3A0F8A638DFB117A3B12AE /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + D4A4CAF902F42F2C275D5140 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + FEAB0B2BDB3505A1268F9E75 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - A1798DF22E9E8F245592515E /* Pods_RunnerTests.framework in Frameworks */, + F89F1AAA1324AE7E3DD5C5CA /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,7 +103,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 22C298D65C4A41DD02AAEDC0 /* Pods_Runner.framework in Frameworks */, + 16437C8D841CE52C6E992400 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -137,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 50631F2D68042C5EE36E82AD /* Pods */, + 48561E3700181DB4D4E3151D /* Pods */, ); sourceTree = ""; }; @@ -185,15 +185,15 @@ path = Runner; sourceTree = ""; }; - 50631F2D68042C5EE36E82AD /* Pods */ = { + 48561E3700181DB4D4E3151D /* Pods */ = { isa = PBXGroup; children = ( - 6993DDD977CBE37C8788E05D /* Pods-Runner.debug.xcconfig */, - C588DD34F47228F313138254 /* Pods-Runner.release.xcconfig */, - 3198E92D2AC0FF9E71015587 /* Pods-Runner.profile.xcconfig */, - B772976BED82CD21FAC21917 /* Pods-RunnerTests.debug.xcconfig */, - 60A5F2D17DC4E97002864529 /* Pods-RunnerTests.release.xcconfig */, - B6A2C2BE919F71BEF08A457D /* Pods-RunnerTests.profile.xcconfig */, + B493EFF6C4A291A6BE28DBF9 /* Pods-Runner.debug.xcconfig */, + D4A4CAF902F42F2C275D5140 /* Pods-Runner.release.xcconfig */, + BD3A0F8A638DFB117A3B12AE /* Pods-Runner.profile.xcconfig */, + A94626AB4F8134D1CE35B95E /* Pods-RunnerTests.debug.xcconfig */, + 28E6650B654A9838F4BC754D /* Pods-RunnerTests.release.xcconfig */, + AE75D9ABF8118D94B26D31A6 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -202,8 +202,8 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - A5D295326948221FD077A049 /* Pods_Runner.framework */, - 7F08A230F9EB9E9A4781176E /* Pods_RunnerTests.framework */, + 56D647FEB41021142EAAE817 /* Pods_Runner.framework */, + FEAB0B2BDB3505A1268F9E75 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - B260F14E41F933FEB31E7D79 /* [CP] Check Pods Manifest.lock */, + F91EDBACE4FD3BC98B932C34 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 059F483F30DF9E5B020E19E9 /* [CP] Check Pods Manifest.lock */, + BCDF0270DF5CD351358E3A05 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - F864432775D8970F2B07DC68 /* [CP] Embed Pods Frameworks */, + B0C0E7DD7A7301A643A0AED9 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,67 +323,62 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 059F483F30DF9E5B020E19E9 /* [CP] Check Pods Manifest.lock */ = { + 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", ); - name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; }; - 3399D490228B24CF009A79C7 /* ShellScript */ = { + 33CC111E2044C6BF0003C045 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + Flutter/ephemeral/FlutterInputs.xcfilelist, ); inputPaths = ( + Flutter/ephemeral/tripwire, ); outputFileListPaths = ( + Flutter/ephemeral/FlutterOutputs.xcfilelist, ); outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; + shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 33CC111E2044C6BF0003C045 /* ShellScript */ = { + B0C0E7DD7A7301A643A0AED9 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - Flutter/ephemeral/FlutterInputs.xcfilelist, - ); - inputPaths = ( - Flutter/ephemeral/tripwire, + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - Flutter/ephemeral/FlutterOutputs.xcfilelist, - ); - outputPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; }; - B260F14E41F933FEB31E7D79 /* [CP] Check Pods Manifest.lock */ = { + BCDF0270DF5CD351358E3A05 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -398,28 +393,33 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - F864432775D8970F2B07DC68 /* [CP] Embed Pods Frameworks */ = { + F91EDBACE4FD3BC98B932C34 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = B772976BED82CD21FAC21917 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = A94626AB4F8134D1CE35B95E /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 60A5F2D17DC4E97002864529 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 28E6650B654A9838F4BC754D /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = B6A2C2BE919F71BEF08A457D /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = AE75D9ABF8118D94B26D31A6 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/brick_breaker/step_04/macos/Runner/Configs/AppInfo.xcconfig b/brick_breaker/step_04/macos/Runner/Configs/AppInfo.xcconfig index 63448c49a5..c6af9507a6 100644 --- a/brick_breaker/step_04/macos/Runner/Configs/AppInfo.xcconfig +++ b/brick_breaker/step_04/macos/Runner/Configs/AppInfo.xcconfig @@ -11,4 +11,4 @@ PRODUCT_NAME = brick_breaker PRODUCT_BUNDLE_IDENTIFIER = com.example.brickBreaker // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. diff --git a/brick_breaker/step_04/windows/runner/Runner.rc b/brick_breaker/step_04/windows/runner/Runner.rc index ae27c9042e..aa2737073d 100644 --- a/brick_breaker/step_04/windows/runner/Runner.rc +++ b/brick_breaker/step_04/windows/runner/Runner.rc @@ -93,7 +93,7 @@ BEGIN VALUE "FileDescription", "brick_breaker" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "InternalName", "brick_breaker" "\0" - VALUE "LegalCopyright", "Copyright (C) 2024 com.example. All rights reserved." "\0" + VALUE "LegalCopyright", "Copyright (C) 2025 com.example. All rights reserved." "\0" VALUE "OriginalFilename", "brick_breaker.exe" "\0" VALUE "ProductName", "brick_breaker" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" diff --git a/brick_breaker/step_05/android/app/src/main/kotlin/com/example/brick_breaker/MainActivity.kt b/brick_breaker/step_05/android/app/src/main/kotlin/com/example/brick_breaker/MainActivity.kt index 74a09e998d..7f4414ee4a 100644 --- a/brick_breaker/step_05/android/app/src/main/kotlin/com/example/brick_breaker/MainActivity.kt +++ b/brick_breaker/step_05/android/app/src/main/kotlin/com/example/brick_breaker/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.brick_breaker import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/brick_breaker/step_05/ios/Runner.xcodeproj/project.pbxproj b/brick_breaker/step_05/ios/Runner.xcodeproj/project.pbxproj index 30066aa2cd..1af34be3fd 100644 --- a/brick_breaker/step_05/ios/Runner.xcodeproj/project.pbxproj +++ b/brick_breaker/step_05/ios/Runner.xcodeproj/project.pbxproj @@ -7,15 +7,15 @@ objects = { /* Begin PBXBuildFile section */ - 124136F5D0A7F933C33809B9 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 27AB1FDB61F7EFA18C7E0C37 /* Pods_RunnerTests.framework */; }; 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; + 16412B2BBE9DF83AFFE1C4F3 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5073259FF0E041D4A20CDB47 /* Pods_Runner.framework */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - D17E67BAFF6CBB4802D1BAE9 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FD3A88A617EB41D61FEC5F85 /* Pods_Runner.framework */; }; + A459070B64CED6A1EA97E95E /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6BFFE5CD3DF2B69B1CDBDA56 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,18 +42,19 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 11455C70F3A35908CFB73C4C /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 27AB1FDB61F7EFA18C7E0C37 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 44E0C7F06C49CB96A5847578 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 4B9CB300B7DEF06F9EE989F6 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 5A6A6DE8DF6F50895C3E5A39 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 45B65D22BC79CEA3BE8A3168 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 5073259FF0E041D4A20CDB47 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 6BFFE5CD3DF2B69B1CDBDA56 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; + 96E72E87BAF1EBBB611A662D /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -61,18 +62,17 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 9AD2F05105704247A2B664B6 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - AD4797C2B873300FB44F8AA8 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - F7507B05AAF1181BE28B35BF /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - FD3A88A617EB41D61FEC5F85 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + A13F37D436F70914AE6725A8 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + C71FF5AA05FD3BFF419E3045 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + CC559457A99977ED9C571323 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 49D69B12016413FDD74E1C79 /* Frameworks */ = { + 45B96668265977AFBAE25004 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 124136F5D0A7F933C33809B9 /* Pods_RunnerTests.framework in Frameworks */, + A459070B64CED6A1EA97E95E /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -80,22 +80,13 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - D17E67BAFF6CBB4802D1BAE9 /* Pods_Runner.framework in Frameworks */, + 16412B2BBE9DF83AFFE1C4F3 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 085B178DD0BBD60C20AD056B /* Frameworks */ = { - isa = PBXGroup; - children = ( - FD3A88A617EB41D61FEC5F85 /* Pods_Runner.framework */, - 27AB1FDB61F7EFA18C7E0C37 /* Pods_RunnerTests.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; 331C8082294A63A400263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -104,15 +95,15 @@ path = RunnerTests; sourceTree = ""; }; - 3EF3C2D65BCFB10B53E2A055 /* Pods */ = { + 70FA5D61F4E5EB911087D730 /* Pods */ = { isa = PBXGroup; children = ( - AD4797C2B873300FB44F8AA8 /* Pods-Runner.debug.xcconfig */, - 4B9CB300B7DEF06F9EE989F6 /* Pods-Runner.release.xcconfig */, - 9AD2F05105704247A2B664B6 /* Pods-Runner.profile.xcconfig */, - 44E0C7F06C49CB96A5847578 /* Pods-RunnerTests.debug.xcconfig */, - 5A6A6DE8DF6F50895C3E5A39 /* Pods-RunnerTests.release.xcconfig */, - F7507B05AAF1181BE28B35BF /* Pods-RunnerTests.profile.xcconfig */, + A13F37D436F70914AE6725A8 /* Pods-Runner.debug.xcconfig */, + 11455C70F3A35908CFB73C4C /* Pods-Runner.release.xcconfig */, + 96E72E87BAF1EBBB611A662D /* Pods-Runner.profile.xcconfig */, + CC559457A99977ED9C571323 /* Pods-RunnerTests.debug.xcconfig */, + C71FF5AA05FD3BFF419E3045 /* Pods-RunnerTests.release.xcconfig */, + 45B65D22BC79CEA3BE8A3168 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -136,8 +127,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - 3EF3C2D65BCFB10B53E2A055 /* Pods */, - 085B178DD0BBD60C20AD056B /* Frameworks */, + 70FA5D61F4E5EB911087D730 /* Pods */, + A0250122B87A7F70B5B15D11 /* Frameworks */, ); sourceTree = ""; }; @@ -165,6 +156,15 @@ path = Runner; sourceTree = ""; }; + A0250122B87A7F70B5B15D11 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 5073259FF0E041D4A20CDB47 /* Pods_Runner.framework */, + 6BFFE5CD3DF2B69B1CDBDA56 /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - F3625ABFABAD7DEE60A5EFF0 /* [CP] Check Pods Manifest.lock */, + 0AB04FA11061CE70D81EE758 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 49D69B12016413FDD74E1C79 /* Frameworks */, + 45B96668265977AFBAE25004 /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 31EDF6437177E940D5C99867 /* [CP] Check Pods Manifest.lock */, + 45341BF5BF96927FD1AF17EC /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 7032893BEEADAF68AEE7E2D5 /* [CP] Embed Pods Frameworks */, + EC54BA3A477B08B054EB3B58 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -270,7 +270,7 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 31EDF6437177E940D5C99867 /* [CP] Check Pods Manifest.lock */ = { + 0AB04FA11061CE70D81EE758 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -285,7 +285,7 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -308,21 +308,26 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 7032893BEEADAF68AEE7E2D5 /* [CP] Embed Pods Frameworks */ = { + 45341BF5BF96927FD1AF17EC /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; 9740EEB61CF901F6004384FC /* Run Script */ = { @@ -340,26 +345,21 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - F3625ABFABAD7DEE60A5EFF0 /* [CP] Check Pods Manifest.lock */ = { + EC54BA3A477B08B054EB3B58 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 44E0C7F06C49CB96A5847578 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = CC559457A99977ED9C571323 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 5A6A6DE8DF6F50895C3E5A39 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = C71FF5AA05FD3BFF419E3045 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = F7507B05AAF1181BE28B35BF /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 45B65D22BC79CEA3BE8A3168 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/brick_breaker/step_05/macos/Runner.xcodeproj/project.pbxproj b/brick_breaker/step_05/macos/Runner.xcodeproj/project.pbxproj index 56d66afde0..25bdef5fc2 100644 --- a/brick_breaker/step_05/macos/Runner.xcodeproj/project.pbxproj +++ b/brick_breaker/step_05/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ - 22C298D65C4A41DD02AAEDC0 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A5D295326948221FD077A049 /* Pods_Runner.framework */; }; + 16437C8D841CE52C6E992400 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 56D647FEB41021142EAAE817 /* Pods_Runner.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - A1798DF22E9E8F245592515E /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7F08A230F9EB9E9A4781176E /* Pods_RunnerTests.framework */; }; + F89F1AAA1324AE7E3DD5C5CA /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FEAB0B2BDB3505A1268F9E75 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,7 +62,7 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 3198E92D2AC0FF9E71015587 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 28E6650B654A9838F4BC754D /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -79,15 +79,15 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 60A5F2D17DC4E97002864529 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - 6993DDD977CBE37C8788E05D /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 56D647FEB41021142EAAE817 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 7F08A230F9EB9E9A4781176E /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - A5D295326948221FD077A049 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - B6A2C2BE919F71BEF08A457D /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - B772976BED82CD21FAC21917 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - C588DD34F47228F313138254 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + A94626AB4F8134D1CE35B95E /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + AE75D9ABF8118D94B26D31A6 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + B493EFF6C4A291A6BE28DBF9 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + BD3A0F8A638DFB117A3B12AE /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + D4A4CAF902F42F2C275D5140 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + FEAB0B2BDB3505A1268F9E75 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - A1798DF22E9E8F245592515E /* Pods_RunnerTests.framework in Frameworks */, + F89F1AAA1324AE7E3DD5C5CA /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,7 +103,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 22C298D65C4A41DD02AAEDC0 /* Pods_Runner.framework in Frameworks */, + 16437C8D841CE52C6E992400 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -137,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 50631F2D68042C5EE36E82AD /* Pods */, + 48561E3700181DB4D4E3151D /* Pods */, ); sourceTree = ""; }; @@ -185,15 +185,15 @@ path = Runner; sourceTree = ""; }; - 50631F2D68042C5EE36E82AD /* Pods */ = { + 48561E3700181DB4D4E3151D /* Pods */ = { isa = PBXGroup; children = ( - 6993DDD977CBE37C8788E05D /* Pods-Runner.debug.xcconfig */, - C588DD34F47228F313138254 /* Pods-Runner.release.xcconfig */, - 3198E92D2AC0FF9E71015587 /* Pods-Runner.profile.xcconfig */, - B772976BED82CD21FAC21917 /* Pods-RunnerTests.debug.xcconfig */, - 60A5F2D17DC4E97002864529 /* Pods-RunnerTests.release.xcconfig */, - B6A2C2BE919F71BEF08A457D /* Pods-RunnerTests.profile.xcconfig */, + B493EFF6C4A291A6BE28DBF9 /* Pods-Runner.debug.xcconfig */, + D4A4CAF902F42F2C275D5140 /* Pods-Runner.release.xcconfig */, + BD3A0F8A638DFB117A3B12AE /* Pods-Runner.profile.xcconfig */, + A94626AB4F8134D1CE35B95E /* Pods-RunnerTests.debug.xcconfig */, + 28E6650B654A9838F4BC754D /* Pods-RunnerTests.release.xcconfig */, + AE75D9ABF8118D94B26D31A6 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -202,8 +202,8 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - A5D295326948221FD077A049 /* Pods_Runner.framework */, - 7F08A230F9EB9E9A4781176E /* Pods_RunnerTests.framework */, + 56D647FEB41021142EAAE817 /* Pods_Runner.framework */, + FEAB0B2BDB3505A1268F9E75 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - B260F14E41F933FEB31E7D79 /* [CP] Check Pods Manifest.lock */, + F91EDBACE4FD3BC98B932C34 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 059F483F30DF9E5B020E19E9 /* [CP] Check Pods Manifest.lock */, + BCDF0270DF5CD351358E3A05 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - F864432775D8970F2B07DC68 /* [CP] Embed Pods Frameworks */, + B0C0E7DD7A7301A643A0AED9 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,67 +323,62 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 059F483F30DF9E5B020E19E9 /* [CP] Check Pods Manifest.lock */ = { + 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", ); - name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; }; - 3399D490228B24CF009A79C7 /* ShellScript */ = { + 33CC111E2044C6BF0003C045 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + Flutter/ephemeral/FlutterInputs.xcfilelist, ); inputPaths = ( + Flutter/ephemeral/tripwire, ); outputFileListPaths = ( + Flutter/ephemeral/FlutterOutputs.xcfilelist, ); outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; + shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 33CC111E2044C6BF0003C045 /* ShellScript */ = { + B0C0E7DD7A7301A643A0AED9 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - Flutter/ephemeral/FlutterInputs.xcfilelist, - ); - inputPaths = ( - Flutter/ephemeral/tripwire, + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - Flutter/ephemeral/FlutterOutputs.xcfilelist, - ); - outputPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; }; - B260F14E41F933FEB31E7D79 /* [CP] Check Pods Manifest.lock */ = { + BCDF0270DF5CD351358E3A05 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -398,28 +393,33 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - F864432775D8970F2B07DC68 /* [CP] Embed Pods Frameworks */ = { + F91EDBACE4FD3BC98B932C34 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = B772976BED82CD21FAC21917 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = A94626AB4F8134D1CE35B95E /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 60A5F2D17DC4E97002864529 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 28E6650B654A9838F4BC754D /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = B6A2C2BE919F71BEF08A457D /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = AE75D9ABF8118D94B26D31A6 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/brick_breaker/step_05/macos/Runner/Configs/AppInfo.xcconfig b/brick_breaker/step_05/macos/Runner/Configs/AppInfo.xcconfig index 63448c49a5..c6af9507a6 100644 --- a/brick_breaker/step_05/macos/Runner/Configs/AppInfo.xcconfig +++ b/brick_breaker/step_05/macos/Runner/Configs/AppInfo.xcconfig @@ -11,4 +11,4 @@ PRODUCT_NAME = brick_breaker PRODUCT_BUNDLE_IDENTIFIER = com.example.brickBreaker // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. diff --git a/brick_breaker/step_05/windows/runner/Runner.rc b/brick_breaker/step_05/windows/runner/Runner.rc index ae27c9042e..aa2737073d 100644 --- a/brick_breaker/step_05/windows/runner/Runner.rc +++ b/brick_breaker/step_05/windows/runner/Runner.rc @@ -93,7 +93,7 @@ BEGIN VALUE "FileDescription", "brick_breaker" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "InternalName", "brick_breaker" "\0" - VALUE "LegalCopyright", "Copyright (C) 2024 com.example. All rights reserved." "\0" + VALUE "LegalCopyright", "Copyright (C) 2025 com.example. All rights reserved." "\0" VALUE "OriginalFilename", "brick_breaker.exe" "\0" VALUE "ProductName", "brick_breaker" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" diff --git a/brick_breaker/step_06/android/app/src/main/kotlin/com/example/brick_breaker/MainActivity.kt b/brick_breaker/step_06/android/app/src/main/kotlin/com/example/brick_breaker/MainActivity.kt index 74a09e998d..7f4414ee4a 100644 --- a/brick_breaker/step_06/android/app/src/main/kotlin/com/example/brick_breaker/MainActivity.kt +++ b/brick_breaker/step_06/android/app/src/main/kotlin/com/example/brick_breaker/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.brick_breaker import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/brick_breaker/step_06/ios/Runner.xcodeproj/project.pbxproj b/brick_breaker/step_06/ios/Runner.xcodeproj/project.pbxproj index 30066aa2cd..1af34be3fd 100644 --- a/brick_breaker/step_06/ios/Runner.xcodeproj/project.pbxproj +++ b/brick_breaker/step_06/ios/Runner.xcodeproj/project.pbxproj @@ -7,15 +7,15 @@ objects = { /* Begin PBXBuildFile section */ - 124136F5D0A7F933C33809B9 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 27AB1FDB61F7EFA18C7E0C37 /* Pods_RunnerTests.framework */; }; 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; + 16412B2BBE9DF83AFFE1C4F3 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5073259FF0E041D4A20CDB47 /* Pods_Runner.framework */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - D17E67BAFF6CBB4802D1BAE9 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FD3A88A617EB41D61FEC5F85 /* Pods_Runner.framework */; }; + A459070B64CED6A1EA97E95E /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6BFFE5CD3DF2B69B1CDBDA56 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,18 +42,19 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 11455C70F3A35908CFB73C4C /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 27AB1FDB61F7EFA18C7E0C37 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 44E0C7F06C49CB96A5847578 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 4B9CB300B7DEF06F9EE989F6 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 5A6A6DE8DF6F50895C3E5A39 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 45B65D22BC79CEA3BE8A3168 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 5073259FF0E041D4A20CDB47 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 6BFFE5CD3DF2B69B1CDBDA56 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; + 96E72E87BAF1EBBB611A662D /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -61,18 +62,17 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 9AD2F05105704247A2B664B6 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - AD4797C2B873300FB44F8AA8 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - F7507B05AAF1181BE28B35BF /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - FD3A88A617EB41D61FEC5F85 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + A13F37D436F70914AE6725A8 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + C71FF5AA05FD3BFF419E3045 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + CC559457A99977ED9C571323 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 49D69B12016413FDD74E1C79 /* Frameworks */ = { + 45B96668265977AFBAE25004 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 124136F5D0A7F933C33809B9 /* Pods_RunnerTests.framework in Frameworks */, + A459070B64CED6A1EA97E95E /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -80,22 +80,13 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - D17E67BAFF6CBB4802D1BAE9 /* Pods_Runner.framework in Frameworks */, + 16412B2BBE9DF83AFFE1C4F3 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 085B178DD0BBD60C20AD056B /* Frameworks */ = { - isa = PBXGroup; - children = ( - FD3A88A617EB41D61FEC5F85 /* Pods_Runner.framework */, - 27AB1FDB61F7EFA18C7E0C37 /* Pods_RunnerTests.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; 331C8082294A63A400263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -104,15 +95,15 @@ path = RunnerTests; sourceTree = ""; }; - 3EF3C2D65BCFB10B53E2A055 /* Pods */ = { + 70FA5D61F4E5EB911087D730 /* Pods */ = { isa = PBXGroup; children = ( - AD4797C2B873300FB44F8AA8 /* Pods-Runner.debug.xcconfig */, - 4B9CB300B7DEF06F9EE989F6 /* Pods-Runner.release.xcconfig */, - 9AD2F05105704247A2B664B6 /* Pods-Runner.profile.xcconfig */, - 44E0C7F06C49CB96A5847578 /* Pods-RunnerTests.debug.xcconfig */, - 5A6A6DE8DF6F50895C3E5A39 /* Pods-RunnerTests.release.xcconfig */, - F7507B05AAF1181BE28B35BF /* Pods-RunnerTests.profile.xcconfig */, + A13F37D436F70914AE6725A8 /* Pods-Runner.debug.xcconfig */, + 11455C70F3A35908CFB73C4C /* Pods-Runner.release.xcconfig */, + 96E72E87BAF1EBBB611A662D /* Pods-Runner.profile.xcconfig */, + CC559457A99977ED9C571323 /* Pods-RunnerTests.debug.xcconfig */, + C71FF5AA05FD3BFF419E3045 /* Pods-RunnerTests.release.xcconfig */, + 45B65D22BC79CEA3BE8A3168 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -136,8 +127,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - 3EF3C2D65BCFB10B53E2A055 /* Pods */, - 085B178DD0BBD60C20AD056B /* Frameworks */, + 70FA5D61F4E5EB911087D730 /* Pods */, + A0250122B87A7F70B5B15D11 /* Frameworks */, ); sourceTree = ""; }; @@ -165,6 +156,15 @@ path = Runner; sourceTree = ""; }; + A0250122B87A7F70B5B15D11 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 5073259FF0E041D4A20CDB47 /* Pods_Runner.framework */, + 6BFFE5CD3DF2B69B1CDBDA56 /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - F3625ABFABAD7DEE60A5EFF0 /* [CP] Check Pods Manifest.lock */, + 0AB04FA11061CE70D81EE758 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 49D69B12016413FDD74E1C79 /* Frameworks */, + 45B96668265977AFBAE25004 /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 31EDF6437177E940D5C99867 /* [CP] Check Pods Manifest.lock */, + 45341BF5BF96927FD1AF17EC /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 7032893BEEADAF68AEE7E2D5 /* [CP] Embed Pods Frameworks */, + EC54BA3A477B08B054EB3B58 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -270,7 +270,7 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 31EDF6437177E940D5C99867 /* [CP] Check Pods Manifest.lock */ = { + 0AB04FA11061CE70D81EE758 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -285,7 +285,7 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -308,21 +308,26 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 7032893BEEADAF68AEE7E2D5 /* [CP] Embed Pods Frameworks */ = { + 45341BF5BF96927FD1AF17EC /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; 9740EEB61CF901F6004384FC /* Run Script */ = { @@ -340,26 +345,21 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - F3625ABFABAD7DEE60A5EFF0 /* [CP] Check Pods Manifest.lock */ = { + EC54BA3A477B08B054EB3B58 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 44E0C7F06C49CB96A5847578 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = CC559457A99977ED9C571323 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 5A6A6DE8DF6F50895C3E5A39 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = C71FF5AA05FD3BFF419E3045 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = F7507B05AAF1181BE28B35BF /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 45B65D22BC79CEA3BE8A3168 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/brick_breaker/step_06/macos/Runner.xcodeproj/project.pbxproj b/brick_breaker/step_06/macos/Runner.xcodeproj/project.pbxproj index 56d66afde0..25bdef5fc2 100644 --- a/brick_breaker/step_06/macos/Runner.xcodeproj/project.pbxproj +++ b/brick_breaker/step_06/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ - 22C298D65C4A41DD02AAEDC0 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A5D295326948221FD077A049 /* Pods_Runner.framework */; }; + 16437C8D841CE52C6E992400 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 56D647FEB41021142EAAE817 /* Pods_Runner.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - A1798DF22E9E8F245592515E /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7F08A230F9EB9E9A4781176E /* Pods_RunnerTests.framework */; }; + F89F1AAA1324AE7E3DD5C5CA /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FEAB0B2BDB3505A1268F9E75 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,7 +62,7 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 3198E92D2AC0FF9E71015587 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 28E6650B654A9838F4BC754D /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -79,15 +79,15 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 60A5F2D17DC4E97002864529 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - 6993DDD977CBE37C8788E05D /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 56D647FEB41021142EAAE817 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 7F08A230F9EB9E9A4781176E /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - A5D295326948221FD077A049 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - B6A2C2BE919F71BEF08A457D /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - B772976BED82CD21FAC21917 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - C588DD34F47228F313138254 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + A94626AB4F8134D1CE35B95E /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + AE75D9ABF8118D94B26D31A6 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + B493EFF6C4A291A6BE28DBF9 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + BD3A0F8A638DFB117A3B12AE /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + D4A4CAF902F42F2C275D5140 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + FEAB0B2BDB3505A1268F9E75 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - A1798DF22E9E8F245592515E /* Pods_RunnerTests.framework in Frameworks */, + F89F1AAA1324AE7E3DD5C5CA /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,7 +103,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 22C298D65C4A41DD02AAEDC0 /* Pods_Runner.framework in Frameworks */, + 16437C8D841CE52C6E992400 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -137,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 50631F2D68042C5EE36E82AD /* Pods */, + 48561E3700181DB4D4E3151D /* Pods */, ); sourceTree = ""; }; @@ -185,15 +185,15 @@ path = Runner; sourceTree = ""; }; - 50631F2D68042C5EE36E82AD /* Pods */ = { + 48561E3700181DB4D4E3151D /* Pods */ = { isa = PBXGroup; children = ( - 6993DDD977CBE37C8788E05D /* Pods-Runner.debug.xcconfig */, - C588DD34F47228F313138254 /* Pods-Runner.release.xcconfig */, - 3198E92D2AC0FF9E71015587 /* Pods-Runner.profile.xcconfig */, - B772976BED82CD21FAC21917 /* Pods-RunnerTests.debug.xcconfig */, - 60A5F2D17DC4E97002864529 /* Pods-RunnerTests.release.xcconfig */, - B6A2C2BE919F71BEF08A457D /* Pods-RunnerTests.profile.xcconfig */, + B493EFF6C4A291A6BE28DBF9 /* Pods-Runner.debug.xcconfig */, + D4A4CAF902F42F2C275D5140 /* Pods-Runner.release.xcconfig */, + BD3A0F8A638DFB117A3B12AE /* Pods-Runner.profile.xcconfig */, + A94626AB4F8134D1CE35B95E /* Pods-RunnerTests.debug.xcconfig */, + 28E6650B654A9838F4BC754D /* Pods-RunnerTests.release.xcconfig */, + AE75D9ABF8118D94B26D31A6 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -202,8 +202,8 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - A5D295326948221FD077A049 /* Pods_Runner.framework */, - 7F08A230F9EB9E9A4781176E /* Pods_RunnerTests.framework */, + 56D647FEB41021142EAAE817 /* Pods_Runner.framework */, + FEAB0B2BDB3505A1268F9E75 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - B260F14E41F933FEB31E7D79 /* [CP] Check Pods Manifest.lock */, + F91EDBACE4FD3BC98B932C34 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 059F483F30DF9E5B020E19E9 /* [CP] Check Pods Manifest.lock */, + BCDF0270DF5CD351358E3A05 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - F864432775D8970F2B07DC68 /* [CP] Embed Pods Frameworks */, + B0C0E7DD7A7301A643A0AED9 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,67 +323,62 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 059F483F30DF9E5B020E19E9 /* [CP] Check Pods Manifest.lock */ = { + 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", ); - name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; }; - 3399D490228B24CF009A79C7 /* ShellScript */ = { + 33CC111E2044C6BF0003C045 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + Flutter/ephemeral/FlutterInputs.xcfilelist, ); inputPaths = ( + Flutter/ephemeral/tripwire, ); outputFileListPaths = ( + Flutter/ephemeral/FlutterOutputs.xcfilelist, ); outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; + shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 33CC111E2044C6BF0003C045 /* ShellScript */ = { + B0C0E7DD7A7301A643A0AED9 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - Flutter/ephemeral/FlutterInputs.xcfilelist, - ); - inputPaths = ( - Flutter/ephemeral/tripwire, + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - Flutter/ephemeral/FlutterOutputs.xcfilelist, - ); - outputPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; }; - B260F14E41F933FEB31E7D79 /* [CP] Check Pods Manifest.lock */ = { + BCDF0270DF5CD351358E3A05 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -398,28 +393,33 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - F864432775D8970F2B07DC68 /* [CP] Embed Pods Frameworks */ = { + F91EDBACE4FD3BC98B932C34 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = B772976BED82CD21FAC21917 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = A94626AB4F8134D1CE35B95E /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 60A5F2D17DC4E97002864529 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 28E6650B654A9838F4BC754D /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = B6A2C2BE919F71BEF08A457D /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = AE75D9ABF8118D94B26D31A6 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/brick_breaker/step_06/macos/Runner/Configs/AppInfo.xcconfig b/brick_breaker/step_06/macos/Runner/Configs/AppInfo.xcconfig index 63448c49a5..c6af9507a6 100644 --- a/brick_breaker/step_06/macos/Runner/Configs/AppInfo.xcconfig +++ b/brick_breaker/step_06/macos/Runner/Configs/AppInfo.xcconfig @@ -11,4 +11,4 @@ PRODUCT_NAME = brick_breaker PRODUCT_BUNDLE_IDENTIFIER = com.example.brickBreaker // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. diff --git a/brick_breaker/step_06/windows/runner/Runner.rc b/brick_breaker/step_06/windows/runner/Runner.rc index ae27c9042e..aa2737073d 100644 --- a/brick_breaker/step_06/windows/runner/Runner.rc +++ b/brick_breaker/step_06/windows/runner/Runner.rc @@ -93,7 +93,7 @@ BEGIN VALUE "FileDescription", "brick_breaker" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "InternalName", "brick_breaker" "\0" - VALUE "LegalCopyright", "Copyright (C) 2024 com.example. All rights reserved." "\0" + VALUE "LegalCopyright", "Copyright (C) 2025 com.example. All rights reserved." "\0" VALUE "OriginalFilename", "brick_breaker.exe" "\0" VALUE "ProductName", "brick_breaker" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" diff --git a/brick_breaker/step_07/android/app/src/main/kotlin/com/example/brick_breaker/MainActivity.kt b/brick_breaker/step_07/android/app/src/main/kotlin/com/example/brick_breaker/MainActivity.kt index 74a09e998d..7f4414ee4a 100644 --- a/brick_breaker/step_07/android/app/src/main/kotlin/com/example/brick_breaker/MainActivity.kt +++ b/brick_breaker/step_07/android/app/src/main/kotlin/com/example/brick_breaker/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.brick_breaker import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/brick_breaker/step_07/ios/Runner.xcodeproj/project.pbxproj b/brick_breaker/step_07/ios/Runner.xcodeproj/project.pbxproj index 30066aa2cd..1af34be3fd 100644 --- a/brick_breaker/step_07/ios/Runner.xcodeproj/project.pbxproj +++ b/brick_breaker/step_07/ios/Runner.xcodeproj/project.pbxproj @@ -7,15 +7,15 @@ objects = { /* Begin PBXBuildFile section */ - 124136F5D0A7F933C33809B9 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 27AB1FDB61F7EFA18C7E0C37 /* Pods_RunnerTests.framework */; }; 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; + 16412B2BBE9DF83AFFE1C4F3 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5073259FF0E041D4A20CDB47 /* Pods_Runner.framework */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - D17E67BAFF6CBB4802D1BAE9 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FD3A88A617EB41D61FEC5F85 /* Pods_Runner.framework */; }; + A459070B64CED6A1EA97E95E /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6BFFE5CD3DF2B69B1CDBDA56 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,18 +42,19 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 11455C70F3A35908CFB73C4C /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 27AB1FDB61F7EFA18C7E0C37 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 44E0C7F06C49CB96A5847578 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 4B9CB300B7DEF06F9EE989F6 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 5A6A6DE8DF6F50895C3E5A39 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 45B65D22BC79CEA3BE8A3168 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 5073259FF0E041D4A20CDB47 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 6BFFE5CD3DF2B69B1CDBDA56 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; + 96E72E87BAF1EBBB611A662D /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -61,18 +62,17 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 9AD2F05105704247A2B664B6 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - AD4797C2B873300FB44F8AA8 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - F7507B05AAF1181BE28B35BF /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - FD3A88A617EB41D61FEC5F85 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + A13F37D436F70914AE6725A8 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + C71FF5AA05FD3BFF419E3045 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + CC559457A99977ED9C571323 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 49D69B12016413FDD74E1C79 /* Frameworks */ = { + 45B96668265977AFBAE25004 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 124136F5D0A7F933C33809B9 /* Pods_RunnerTests.framework in Frameworks */, + A459070B64CED6A1EA97E95E /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -80,22 +80,13 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - D17E67BAFF6CBB4802D1BAE9 /* Pods_Runner.framework in Frameworks */, + 16412B2BBE9DF83AFFE1C4F3 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 085B178DD0BBD60C20AD056B /* Frameworks */ = { - isa = PBXGroup; - children = ( - FD3A88A617EB41D61FEC5F85 /* Pods_Runner.framework */, - 27AB1FDB61F7EFA18C7E0C37 /* Pods_RunnerTests.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; 331C8082294A63A400263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -104,15 +95,15 @@ path = RunnerTests; sourceTree = ""; }; - 3EF3C2D65BCFB10B53E2A055 /* Pods */ = { + 70FA5D61F4E5EB911087D730 /* Pods */ = { isa = PBXGroup; children = ( - AD4797C2B873300FB44F8AA8 /* Pods-Runner.debug.xcconfig */, - 4B9CB300B7DEF06F9EE989F6 /* Pods-Runner.release.xcconfig */, - 9AD2F05105704247A2B664B6 /* Pods-Runner.profile.xcconfig */, - 44E0C7F06C49CB96A5847578 /* Pods-RunnerTests.debug.xcconfig */, - 5A6A6DE8DF6F50895C3E5A39 /* Pods-RunnerTests.release.xcconfig */, - F7507B05AAF1181BE28B35BF /* Pods-RunnerTests.profile.xcconfig */, + A13F37D436F70914AE6725A8 /* Pods-Runner.debug.xcconfig */, + 11455C70F3A35908CFB73C4C /* Pods-Runner.release.xcconfig */, + 96E72E87BAF1EBBB611A662D /* Pods-Runner.profile.xcconfig */, + CC559457A99977ED9C571323 /* Pods-RunnerTests.debug.xcconfig */, + C71FF5AA05FD3BFF419E3045 /* Pods-RunnerTests.release.xcconfig */, + 45B65D22BC79CEA3BE8A3168 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -136,8 +127,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - 3EF3C2D65BCFB10B53E2A055 /* Pods */, - 085B178DD0BBD60C20AD056B /* Frameworks */, + 70FA5D61F4E5EB911087D730 /* Pods */, + A0250122B87A7F70B5B15D11 /* Frameworks */, ); sourceTree = ""; }; @@ -165,6 +156,15 @@ path = Runner; sourceTree = ""; }; + A0250122B87A7F70B5B15D11 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 5073259FF0E041D4A20CDB47 /* Pods_Runner.framework */, + 6BFFE5CD3DF2B69B1CDBDA56 /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - F3625ABFABAD7DEE60A5EFF0 /* [CP] Check Pods Manifest.lock */, + 0AB04FA11061CE70D81EE758 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 49D69B12016413FDD74E1C79 /* Frameworks */, + 45B96668265977AFBAE25004 /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 31EDF6437177E940D5C99867 /* [CP] Check Pods Manifest.lock */, + 45341BF5BF96927FD1AF17EC /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 7032893BEEADAF68AEE7E2D5 /* [CP] Embed Pods Frameworks */, + EC54BA3A477B08B054EB3B58 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -270,7 +270,7 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 31EDF6437177E940D5C99867 /* [CP] Check Pods Manifest.lock */ = { + 0AB04FA11061CE70D81EE758 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -285,7 +285,7 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -308,21 +308,26 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 7032893BEEADAF68AEE7E2D5 /* [CP] Embed Pods Frameworks */ = { + 45341BF5BF96927FD1AF17EC /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; 9740EEB61CF901F6004384FC /* Run Script */ = { @@ -340,26 +345,21 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - F3625ABFABAD7DEE60A5EFF0 /* [CP] Check Pods Manifest.lock */ = { + EC54BA3A477B08B054EB3B58 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 44E0C7F06C49CB96A5847578 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = CC559457A99977ED9C571323 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 5A6A6DE8DF6F50895C3E5A39 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = C71FF5AA05FD3BFF419E3045 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = F7507B05AAF1181BE28B35BF /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 45B65D22BC79CEA3BE8A3168 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/brick_breaker/step_07/macos/Runner.xcodeproj/project.pbxproj b/brick_breaker/step_07/macos/Runner.xcodeproj/project.pbxproj index 56d66afde0..25bdef5fc2 100644 --- a/brick_breaker/step_07/macos/Runner.xcodeproj/project.pbxproj +++ b/brick_breaker/step_07/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ - 22C298D65C4A41DD02AAEDC0 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A5D295326948221FD077A049 /* Pods_Runner.framework */; }; + 16437C8D841CE52C6E992400 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 56D647FEB41021142EAAE817 /* Pods_Runner.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - A1798DF22E9E8F245592515E /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7F08A230F9EB9E9A4781176E /* Pods_RunnerTests.framework */; }; + F89F1AAA1324AE7E3DD5C5CA /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FEAB0B2BDB3505A1268F9E75 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,7 +62,7 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 3198E92D2AC0FF9E71015587 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 28E6650B654A9838F4BC754D /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -79,15 +79,15 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 60A5F2D17DC4E97002864529 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - 6993DDD977CBE37C8788E05D /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 56D647FEB41021142EAAE817 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 7F08A230F9EB9E9A4781176E /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - A5D295326948221FD077A049 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - B6A2C2BE919F71BEF08A457D /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - B772976BED82CD21FAC21917 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - C588DD34F47228F313138254 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + A94626AB4F8134D1CE35B95E /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + AE75D9ABF8118D94B26D31A6 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + B493EFF6C4A291A6BE28DBF9 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + BD3A0F8A638DFB117A3B12AE /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + D4A4CAF902F42F2C275D5140 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + FEAB0B2BDB3505A1268F9E75 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - A1798DF22E9E8F245592515E /* Pods_RunnerTests.framework in Frameworks */, + F89F1AAA1324AE7E3DD5C5CA /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,7 +103,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 22C298D65C4A41DD02AAEDC0 /* Pods_Runner.framework in Frameworks */, + 16437C8D841CE52C6E992400 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -137,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 50631F2D68042C5EE36E82AD /* Pods */, + 48561E3700181DB4D4E3151D /* Pods */, ); sourceTree = ""; }; @@ -185,15 +185,15 @@ path = Runner; sourceTree = ""; }; - 50631F2D68042C5EE36E82AD /* Pods */ = { + 48561E3700181DB4D4E3151D /* Pods */ = { isa = PBXGroup; children = ( - 6993DDD977CBE37C8788E05D /* Pods-Runner.debug.xcconfig */, - C588DD34F47228F313138254 /* Pods-Runner.release.xcconfig */, - 3198E92D2AC0FF9E71015587 /* Pods-Runner.profile.xcconfig */, - B772976BED82CD21FAC21917 /* Pods-RunnerTests.debug.xcconfig */, - 60A5F2D17DC4E97002864529 /* Pods-RunnerTests.release.xcconfig */, - B6A2C2BE919F71BEF08A457D /* Pods-RunnerTests.profile.xcconfig */, + B493EFF6C4A291A6BE28DBF9 /* Pods-Runner.debug.xcconfig */, + D4A4CAF902F42F2C275D5140 /* Pods-Runner.release.xcconfig */, + BD3A0F8A638DFB117A3B12AE /* Pods-Runner.profile.xcconfig */, + A94626AB4F8134D1CE35B95E /* Pods-RunnerTests.debug.xcconfig */, + 28E6650B654A9838F4BC754D /* Pods-RunnerTests.release.xcconfig */, + AE75D9ABF8118D94B26D31A6 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -202,8 +202,8 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - A5D295326948221FD077A049 /* Pods_Runner.framework */, - 7F08A230F9EB9E9A4781176E /* Pods_RunnerTests.framework */, + 56D647FEB41021142EAAE817 /* Pods_Runner.framework */, + FEAB0B2BDB3505A1268F9E75 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - B260F14E41F933FEB31E7D79 /* [CP] Check Pods Manifest.lock */, + F91EDBACE4FD3BC98B932C34 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 059F483F30DF9E5B020E19E9 /* [CP] Check Pods Manifest.lock */, + BCDF0270DF5CD351358E3A05 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - F864432775D8970F2B07DC68 /* [CP] Embed Pods Frameworks */, + B0C0E7DD7A7301A643A0AED9 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,67 +323,62 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 059F483F30DF9E5B020E19E9 /* [CP] Check Pods Manifest.lock */ = { + 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", ); - name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; }; - 3399D490228B24CF009A79C7 /* ShellScript */ = { + 33CC111E2044C6BF0003C045 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + Flutter/ephemeral/FlutterInputs.xcfilelist, ); inputPaths = ( + Flutter/ephemeral/tripwire, ); outputFileListPaths = ( + Flutter/ephemeral/FlutterOutputs.xcfilelist, ); outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; + shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 33CC111E2044C6BF0003C045 /* ShellScript */ = { + B0C0E7DD7A7301A643A0AED9 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - Flutter/ephemeral/FlutterInputs.xcfilelist, - ); - inputPaths = ( - Flutter/ephemeral/tripwire, + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - Flutter/ephemeral/FlutterOutputs.xcfilelist, - ); - outputPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; }; - B260F14E41F933FEB31E7D79 /* [CP] Check Pods Manifest.lock */ = { + BCDF0270DF5CD351358E3A05 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -398,28 +393,33 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - F864432775D8970F2B07DC68 /* [CP] Embed Pods Frameworks */ = { + F91EDBACE4FD3BC98B932C34 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = B772976BED82CD21FAC21917 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = A94626AB4F8134D1CE35B95E /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 60A5F2D17DC4E97002864529 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 28E6650B654A9838F4BC754D /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = B6A2C2BE919F71BEF08A457D /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = AE75D9ABF8118D94B26D31A6 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/brick_breaker/step_07/macos/Runner/Configs/AppInfo.xcconfig b/brick_breaker/step_07/macos/Runner/Configs/AppInfo.xcconfig index 63448c49a5..c6af9507a6 100644 --- a/brick_breaker/step_07/macos/Runner/Configs/AppInfo.xcconfig +++ b/brick_breaker/step_07/macos/Runner/Configs/AppInfo.xcconfig @@ -11,4 +11,4 @@ PRODUCT_NAME = brick_breaker PRODUCT_BUNDLE_IDENTIFIER = com.example.brickBreaker // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. diff --git a/brick_breaker/step_07/windows/runner/Runner.rc b/brick_breaker/step_07/windows/runner/Runner.rc index ae27c9042e..aa2737073d 100644 --- a/brick_breaker/step_07/windows/runner/Runner.rc +++ b/brick_breaker/step_07/windows/runner/Runner.rc @@ -93,7 +93,7 @@ BEGIN VALUE "FileDescription", "brick_breaker" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "InternalName", "brick_breaker" "\0" - VALUE "LegalCopyright", "Copyright (C) 2024 com.example. All rights reserved." "\0" + VALUE "LegalCopyright", "Copyright (C) 2025 com.example. All rights reserved." "\0" VALUE "OriginalFilename", "brick_breaker.exe" "\0" VALUE "ProductName", "brick_breaker" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" diff --git a/brick_breaker/step_08/android/app/src/main/kotlin/com/example/brick_breaker/MainActivity.kt b/brick_breaker/step_08/android/app/src/main/kotlin/com/example/brick_breaker/MainActivity.kt index 74a09e998d..7f4414ee4a 100644 --- a/brick_breaker/step_08/android/app/src/main/kotlin/com/example/brick_breaker/MainActivity.kt +++ b/brick_breaker/step_08/android/app/src/main/kotlin/com/example/brick_breaker/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.brick_breaker import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/brick_breaker/step_08/ios/Runner.xcodeproj/project.pbxproj b/brick_breaker/step_08/ios/Runner.xcodeproj/project.pbxproj index 30066aa2cd..1af34be3fd 100644 --- a/brick_breaker/step_08/ios/Runner.xcodeproj/project.pbxproj +++ b/brick_breaker/step_08/ios/Runner.xcodeproj/project.pbxproj @@ -7,15 +7,15 @@ objects = { /* Begin PBXBuildFile section */ - 124136F5D0A7F933C33809B9 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 27AB1FDB61F7EFA18C7E0C37 /* Pods_RunnerTests.framework */; }; 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; + 16412B2BBE9DF83AFFE1C4F3 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5073259FF0E041D4A20CDB47 /* Pods_Runner.framework */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - D17E67BAFF6CBB4802D1BAE9 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FD3A88A617EB41D61FEC5F85 /* Pods_Runner.framework */; }; + A459070B64CED6A1EA97E95E /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6BFFE5CD3DF2B69B1CDBDA56 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,18 +42,19 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 11455C70F3A35908CFB73C4C /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 27AB1FDB61F7EFA18C7E0C37 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 44E0C7F06C49CB96A5847578 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 4B9CB300B7DEF06F9EE989F6 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 5A6A6DE8DF6F50895C3E5A39 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 45B65D22BC79CEA3BE8A3168 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 5073259FF0E041D4A20CDB47 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 6BFFE5CD3DF2B69B1CDBDA56 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; + 96E72E87BAF1EBBB611A662D /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -61,18 +62,17 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 9AD2F05105704247A2B664B6 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - AD4797C2B873300FB44F8AA8 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - F7507B05AAF1181BE28B35BF /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - FD3A88A617EB41D61FEC5F85 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + A13F37D436F70914AE6725A8 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + C71FF5AA05FD3BFF419E3045 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + CC559457A99977ED9C571323 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 49D69B12016413FDD74E1C79 /* Frameworks */ = { + 45B96668265977AFBAE25004 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 124136F5D0A7F933C33809B9 /* Pods_RunnerTests.framework in Frameworks */, + A459070B64CED6A1EA97E95E /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -80,22 +80,13 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - D17E67BAFF6CBB4802D1BAE9 /* Pods_Runner.framework in Frameworks */, + 16412B2BBE9DF83AFFE1C4F3 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 085B178DD0BBD60C20AD056B /* Frameworks */ = { - isa = PBXGroup; - children = ( - FD3A88A617EB41D61FEC5F85 /* Pods_Runner.framework */, - 27AB1FDB61F7EFA18C7E0C37 /* Pods_RunnerTests.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; 331C8082294A63A400263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -104,15 +95,15 @@ path = RunnerTests; sourceTree = ""; }; - 3EF3C2D65BCFB10B53E2A055 /* Pods */ = { + 70FA5D61F4E5EB911087D730 /* Pods */ = { isa = PBXGroup; children = ( - AD4797C2B873300FB44F8AA8 /* Pods-Runner.debug.xcconfig */, - 4B9CB300B7DEF06F9EE989F6 /* Pods-Runner.release.xcconfig */, - 9AD2F05105704247A2B664B6 /* Pods-Runner.profile.xcconfig */, - 44E0C7F06C49CB96A5847578 /* Pods-RunnerTests.debug.xcconfig */, - 5A6A6DE8DF6F50895C3E5A39 /* Pods-RunnerTests.release.xcconfig */, - F7507B05AAF1181BE28B35BF /* Pods-RunnerTests.profile.xcconfig */, + A13F37D436F70914AE6725A8 /* Pods-Runner.debug.xcconfig */, + 11455C70F3A35908CFB73C4C /* Pods-Runner.release.xcconfig */, + 96E72E87BAF1EBBB611A662D /* Pods-Runner.profile.xcconfig */, + CC559457A99977ED9C571323 /* Pods-RunnerTests.debug.xcconfig */, + C71FF5AA05FD3BFF419E3045 /* Pods-RunnerTests.release.xcconfig */, + 45B65D22BC79CEA3BE8A3168 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -136,8 +127,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - 3EF3C2D65BCFB10B53E2A055 /* Pods */, - 085B178DD0BBD60C20AD056B /* Frameworks */, + 70FA5D61F4E5EB911087D730 /* Pods */, + A0250122B87A7F70B5B15D11 /* Frameworks */, ); sourceTree = ""; }; @@ -165,6 +156,15 @@ path = Runner; sourceTree = ""; }; + A0250122B87A7F70B5B15D11 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 5073259FF0E041D4A20CDB47 /* Pods_Runner.framework */, + 6BFFE5CD3DF2B69B1CDBDA56 /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - F3625ABFABAD7DEE60A5EFF0 /* [CP] Check Pods Manifest.lock */, + 0AB04FA11061CE70D81EE758 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 49D69B12016413FDD74E1C79 /* Frameworks */, + 45B96668265977AFBAE25004 /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 31EDF6437177E940D5C99867 /* [CP] Check Pods Manifest.lock */, + 45341BF5BF96927FD1AF17EC /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 7032893BEEADAF68AEE7E2D5 /* [CP] Embed Pods Frameworks */, + EC54BA3A477B08B054EB3B58 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -270,7 +270,7 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 31EDF6437177E940D5C99867 /* [CP] Check Pods Manifest.lock */ = { + 0AB04FA11061CE70D81EE758 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -285,7 +285,7 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -308,21 +308,26 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 7032893BEEADAF68AEE7E2D5 /* [CP] Embed Pods Frameworks */ = { + 45341BF5BF96927FD1AF17EC /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; 9740EEB61CF901F6004384FC /* Run Script */ = { @@ -340,26 +345,21 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - F3625ABFABAD7DEE60A5EFF0 /* [CP] Check Pods Manifest.lock */ = { + EC54BA3A477B08B054EB3B58 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 44E0C7F06C49CB96A5847578 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = CC559457A99977ED9C571323 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 5A6A6DE8DF6F50895C3E5A39 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = C71FF5AA05FD3BFF419E3045 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = F7507B05AAF1181BE28B35BF /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 45B65D22BC79CEA3BE8A3168 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/brick_breaker/step_08/macos/Runner.xcodeproj/project.pbxproj b/brick_breaker/step_08/macos/Runner.xcodeproj/project.pbxproj index 56d66afde0..25bdef5fc2 100644 --- a/brick_breaker/step_08/macos/Runner.xcodeproj/project.pbxproj +++ b/brick_breaker/step_08/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ - 22C298D65C4A41DD02AAEDC0 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A5D295326948221FD077A049 /* Pods_Runner.framework */; }; + 16437C8D841CE52C6E992400 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 56D647FEB41021142EAAE817 /* Pods_Runner.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - A1798DF22E9E8F245592515E /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7F08A230F9EB9E9A4781176E /* Pods_RunnerTests.framework */; }; + F89F1AAA1324AE7E3DD5C5CA /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FEAB0B2BDB3505A1268F9E75 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,7 +62,7 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 3198E92D2AC0FF9E71015587 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 28E6650B654A9838F4BC754D /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -79,15 +79,15 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 60A5F2D17DC4E97002864529 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - 6993DDD977CBE37C8788E05D /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 56D647FEB41021142EAAE817 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 7F08A230F9EB9E9A4781176E /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - A5D295326948221FD077A049 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - B6A2C2BE919F71BEF08A457D /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - B772976BED82CD21FAC21917 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - C588DD34F47228F313138254 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + A94626AB4F8134D1CE35B95E /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + AE75D9ABF8118D94B26D31A6 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + B493EFF6C4A291A6BE28DBF9 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + BD3A0F8A638DFB117A3B12AE /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + D4A4CAF902F42F2C275D5140 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + FEAB0B2BDB3505A1268F9E75 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - A1798DF22E9E8F245592515E /* Pods_RunnerTests.framework in Frameworks */, + F89F1AAA1324AE7E3DD5C5CA /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,7 +103,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 22C298D65C4A41DD02AAEDC0 /* Pods_Runner.framework in Frameworks */, + 16437C8D841CE52C6E992400 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -137,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 50631F2D68042C5EE36E82AD /* Pods */, + 48561E3700181DB4D4E3151D /* Pods */, ); sourceTree = ""; }; @@ -185,15 +185,15 @@ path = Runner; sourceTree = ""; }; - 50631F2D68042C5EE36E82AD /* Pods */ = { + 48561E3700181DB4D4E3151D /* Pods */ = { isa = PBXGroup; children = ( - 6993DDD977CBE37C8788E05D /* Pods-Runner.debug.xcconfig */, - C588DD34F47228F313138254 /* Pods-Runner.release.xcconfig */, - 3198E92D2AC0FF9E71015587 /* Pods-Runner.profile.xcconfig */, - B772976BED82CD21FAC21917 /* Pods-RunnerTests.debug.xcconfig */, - 60A5F2D17DC4E97002864529 /* Pods-RunnerTests.release.xcconfig */, - B6A2C2BE919F71BEF08A457D /* Pods-RunnerTests.profile.xcconfig */, + B493EFF6C4A291A6BE28DBF9 /* Pods-Runner.debug.xcconfig */, + D4A4CAF902F42F2C275D5140 /* Pods-Runner.release.xcconfig */, + BD3A0F8A638DFB117A3B12AE /* Pods-Runner.profile.xcconfig */, + A94626AB4F8134D1CE35B95E /* Pods-RunnerTests.debug.xcconfig */, + 28E6650B654A9838F4BC754D /* Pods-RunnerTests.release.xcconfig */, + AE75D9ABF8118D94B26D31A6 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -202,8 +202,8 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - A5D295326948221FD077A049 /* Pods_Runner.framework */, - 7F08A230F9EB9E9A4781176E /* Pods_RunnerTests.framework */, + 56D647FEB41021142EAAE817 /* Pods_Runner.framework */, + FEAB0B2BDB3505A1268F9E75 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - B260F14E41F933FEB31E7D79 /* [CP] Check Pods Manifest.lock */, + F91EDBACE4FD3BC98B932C34 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 059F483F30DF9E5B020E19E9 /* [CP] Check Pods Manifest.lock */, + BCDF0270DF5CD351358E3A05 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - F864432775D8970F2B07DC68 /* [CP] Embed Pods Frameworks */, + B0C0E7DD7A7301A643A0AED9 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,67 +323,62 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 059F483F30DF9E5B020E19E9 /* [CP] Check Pods Manifest.lock */ = { + 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", ); - name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; }; - 3399D490228B24CF009A79C7 /* ShellScript */ = { + 33CC111E2044C6BF0003C045 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + Flutter/ephemeral/FlutterInputs.xcfilelist, ); inputPaths = ( + Flutter/ephemeral/tripwire, ); outputFileListPaths = ( + Flutter/ephemeral/FlutterOutputs.xcfilelist, ); outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; + shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 33CC111E2044C6BF0003C045 /* ShellScript */ = { + B0C0E7DD7A7301A643A0AED9 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - Flutter/ephemeral/FlutterInputs.xcfilelist, - ); - inputPaths = ( - Flutter/ephemeral/tripwire, + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - Flutter/ephemeral/FlutterOutputs.xcfilelist, - ); - outputPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; }; - B260F14E41F933FEB31E7D79 /* [CP] Check Pods Manifest.lock */ = { + BCDF0270DF5CD351358E3A05 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -398,28 +393,33 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - F864432775D8970F2B07DC68 /* [CP] Embed Pods Frameworks */ = { + F91EDBACE4FD3BC98B932C34 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = B772976BED82CD21FAC21917 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = A94626AB4F8134D1CE35B95E /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 60A5F2D17DC4E97002864529 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 28E6650B654A9838F4BC754D /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = B6A2C2BE919F71BEF08A457D /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = AE75D9ABF8118D94B26D31A6 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/brick_breaker/step_08/macos/Runner/Configs/AppInfo.xcconfig b/brick_breaker/step_08/macos/Runner/Configs/AppInfo.xcconfig index 63448c49a5..c6af9507a6 100644 --- a/brick_breaker/step_08/macos/Runner/Configs/AppInfo.xcconfig +++ b/brick_breaker/step_08/macos/Runner/Configs/AppInfo.xcconfig @@ -11,4 +11,4 @@ PRODUCT_NAME = brick_breaker PRODUCT_BUNDLE_IDENTIFIER = com.example.brickBreaker // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. diff --git a/brick_breaker/step_08/windows/runner/Runner.rc b/brick_breaker/step_08/windows/runner/Runner.rc index ae27c9042e..aa2737073d 100644 --- a/brick_breaker/step_08/windows/runner/Runner.rc +++ b/brick_breaker/step_08/windows/runner/Runner.rc @@ -93,7 +93,7 @@ BEGIN VALUE "FileDescription", "brick_breaker" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "InternalName", "brick_breaker" "\0" - VALUE "LegalCopyright", "Copyright (C) 2024 com.example. All rights reserved." "\0" + VALUE "LegalCopyright", "Copyright (C) 2025 com.example. All rights reserved." "\0" VALUE "OriginalFilename", "brick_breaker.exe" "\0" VALUE "ProductName", "brick_breaker" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" diff --git a/brick_breaker/step_09/android/app/src/main/kotlin/com/example/brick_breaker/MainActivity.kt b/brick_breaker/step_09/android/app/src/main/kotlin/com/example/brick_breaker/MainActivity.kt index 74a09e998d..7f4414ee4a 100644 --- a/brick_breaker/step_09/android/app/src/main/kotlin/com/example/brick_breaker/MainActivity.kt +++ b/brick_breaker/step_09/android/app/src/main/kotlin/com/example/brick_breaker/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.brick_breaker import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/brick_breaker/step_09/ios/Runner.xcodeproj/project.pbxproj b/brick_breaker/step_09/ios/Runner.xcodeproj/project.pbxproj index 30066aa2cd..1af34be3fd 100644 --- a/brick_breaker/step_09/ios/Runner.xcodeproj/project.pbxproj +++ b/brick_breaker/step_09/ios/Runner.xcodeproj/project.pbxproj @@ -7,15 +7,15 @@ objects = { /* Begin PBXBuildFile section */ - 124136F5D0A7F933C33809B9 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 27AB1FDB61F7EFA18C7E0C37 /* Pods_RunnerTests.framework */; }; 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; + 16412B2BBE9DF83AFFE1C4F3 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5073259FF0E041D4A20CDB47 /* Pods_Runner.framework */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - D17E67BAFF6CBB4802D1BAE9 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FD3A88A617EB41D61FEC5F85 /* Pods_Runner.framework */; }; + A459070B64CED6A1EA97E95E /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6BFFE5CD3DF2B69B1CDBDA56 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,18 +42,19 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 11455C70F3A35908CFB73C4C /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 27AB1FDB61F7EFA18C7E0C37 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 44E0C7F06C49CB96A5847578 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 4B9CB300B7DEF06F9EE989F6 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 5A6A6DE8DF6F50895C3E5A39 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 45B65D22BC79CEA3BE8A3168 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 5073259FF0E041D4A20CDB47 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 6BFFE5CD3DF2B69B1CDBDA56 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; + 96E72E87BAF1EBBB611A662D /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -61,18 +62,17 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 9AD2F05105704247A2B664B6 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - AD4797C2B873300FB44F8AA8 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - F7507B05AAF1181BE28B35BF /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - FD3A88A617EB41D61FEC5F85 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + A13F37D436F70914AE6725A8 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + C71FF5AA05FD3BFF419E3045 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + CC559457A99977ED9C571323 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 49D69B12016413FDD74E1C79 /* Frameworks */ = { + 45B96668265977AFBAE25004 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 124136F5D0A7F933C33809B9 /* Pods_RunnerTests.framework in Frameworks */, + A459070B64CED6A1EA97E95E /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -80,22 +80,13 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - D17E67BAFF6CBB4802D1BAE9 /* Pods_Runner.framework in Frameworks */, + 16412B2BBE9DF83AFFE1C4F3 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 085B178DD0BBD60C20AD056B /* Frameworks */ = { - isa = PBXGroup; - children = ( - FD3A88A617EB41D61FEC5F85 /* Pods_Runner.framework */, - 27AB1FDB61F7EFA18C7E0C37 /* Pods_RunnerTests.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; 331C8082294A63A400263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -104,15 +95,15 @@ path = RunnerTests; sourceTree = ""; }; - 3EF3C2D65BCFB10B53E2A055 /* Pods */ = { + 70FA5D61F4E5EB911087D730 /* Pods */ = { isa = PBXGroup; children = ( - AD4797C2B873300FB44F8AA8 /* Pods-Runner.debug.xcconfig */, - 4B9CB300B7DEF06F9EE989F6 /* Pods-Runner.release.xcconfig */, - 9AD2F05105704247A2B664B6 /* Pods-Runner.profile.xcconfig */, - 44E0C7F06C49CB96A5847578 /* Pods-RunnerTests.debug.xcconfig */, - 5A6A6DE8DF6F50895C3E5A39 /* Pods-RunnerTests.release.xcconfig */, - F7507B05AAF1181BE28B35BF /* Pods-RunnerTests.profile.xcconfig */, + A13F37D436F70914AE6725A8 /* Pods-Runner.debug.xcconfig */, + 11455C70F3A35908CFB73C4C /* Pods-Runner.release.xcconfig */, + 96E72E87BAF1EBBB611A662D /* Pods-Runner.profile.xcconfig */, + CC559457A99977ED9C571323 /* Pods-RunnerTests.debug.xcconfig */, + C71FF5AA05FD3BFF419E3045 /* Pods-RunnerTests.release.xcconfig */, + 45B65D22BC79CEA3BE8A3168 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -136,8 +127,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - 3EF3C2D65BCFB10B53E2A055 /* Pods */, - 085B178DD0BBD60C20AD056B /* Frameworks */, + 70FA5D61F4E5EB911087D730 /* Pods */, + A0250122B87A7F70B5B15D11 /* Frameworks */, ); sourceTree = ""; }; @@ -165,6 +156,15 @@ path = Runner; sourceTree = ""; }; + A0250122B87A7F70B5B15D11 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 5073259FF0E041D4A20CDB47 /* Pods_Runner.framework */, + 6BFFE5CD3DF2B69B1CDBDA56 /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - F3625ABFABAD7DEE60A5EFF0 /* [CP] Check Pods Manifest.lock */, + 0AB04FA11061CE70D81EE758 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 49D69B12016413FDD74E1C79 /* Frameworks */, + 45B96668265977AFBAE25004 /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 31EDF6437177E940D5C99867 /* [CP] Check Pods Manifest.lock */, + 45341BF5BF96927FD1AF17EC /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 7032893BEEADAF68AEE7E2D5 /* [CP] Embed Pods Frameworks */, + EC54BA3A477B08B054EB3B58 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -270,7 +270,7 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 31EDF6437177E940D5C99867 /* [CP] Check Pods Manifest.lock */ = { + 0AB04FA11061CE70D81EE758 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -285,7 +285,7 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -308,21 +308,26 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 7032893BEEADAF68AEE7E2D5 /* [CP] Embed Pods Frameworks */ = { + 45341BF5BF96927FD1AF17EC /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; 9740EEB61CF901F6004384FC /* Run Script */ = { @@ -340,26 +345,21 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - F3625ABFABAD7DEE60A5EFF0 /* [CP] Check Pods Manifest.lock */ = { + EC54BA3A477B08B054EB3B58 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 44E0C7F06C49CB96A5847578 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = CC559457A99977ED9C571323 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 5A6A6DE8DF6F50895C3E5A39 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = C71FF5AA05FD3BFF419E3045 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = F7507B05AAF1181BE28B35BF /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 45B65D22BC79CEA3BE8A3168 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/brick_breaker/step_09/macos/Runner.xcodeproj/project.pbxproj b/brick_breaker/step_09/macos/Runner.xcodeproj/project.pbxproj index 56d66afde0..25bdef5fc2 100644 --- a/brick_breaker/step_09/macos/Runner.xcodeproj/project.pbxproj +++ b/brick_breaker/step_09/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ - 22C298D65C4A41DD02AAEDC0 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A5D295326948221FD077A049 /* Pods_Runner.framework */; }; + 16437C8D841CE52C6E992400 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 56D647FEB41021142EAAE817 /* Pods_Runner.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - A1798DF22E9E8F245592515E /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7F08A230F9EB9E9A4781176E /* Pods_RunnerTests.framework */; }; + F89F1AAA1324AE7E3DD5C5CA /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FEAB0B2BDB3505A1268F9E75 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,7 +62,7 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 3198E92D2AC0FF9E71015587 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 28E6650B654A9838F4BC754D /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -79,15 +79,15 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 60A5F2D17DC4E97002864529 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - 6993DDD977CBE37C8788E05D /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 56D647FEB41021142EAAE817 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 7F08A230F9EB9E9A4781176E /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - A5D295326948221FD077A049 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - B6A2C2BE919F71BEF08A457D /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - B772976BED82CD21FAC21917 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - C588DD34F47228F313138254 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + A94626AB4F8134D1CE35B95E /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + AE75D9ABF8118D94B26D31A6 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + B493EFF6C4A291A6BE28DBF9 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + BD3A0F8A638DFB117A3B12AE /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + D4A4CAF902F42F2C275D5140 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + FEAB0B2BDB3505A1268F9E75 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - A1798DF22E9E8F245592515E /* Pods_RunnerTests.framework in Frameworks */, + F89F1AAA1324AE7E3DD5C5CA /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,7 +103,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 22C298D65C4A41DD02AAEDC0 /* Pods_Runner.framework in Frameworks */, + 16437C8D841CE52C6E992400 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -137,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 50631F2D68042C5EE36E82AD /* Pods */, + 48561E3700181DB4D4E3151D /* Pods */, ); sourceTree = ""; }; @@ -185,15 +185,15 @@ path = Runner; sourceTree = ""; }; - 50631F2D68042C5EE36E82AD /* Pods */ = { + 48561E3700181DB4D4E3151D /* Pods */ = { isa = PBXGroup; children = ( - 6993DDD977CBE37C8788E05D /* Pods-Runner.debug.xcconfig */, - C588DD34F47228F313138254 /* Pods-Runner.release.xcconfig */, - 3198E92D2AC0FF9E71015587 /* Pods-Runner.profile.xcconfig */, - B772976BED82CD21FAC21917 /* Pods-RunnerTests.debug.xcconfig */, - 60A5F2D17DC4E97002864529 /* Pods-RunnerTests.release.xcconfig */, - B6A2C2BE919F71BEF08A457D /* Pods-RunnerTests.profile.xcconfig */, + B493EFF6C4A291A6BE28DBF9 /* Pods-Runner.debug.xcconfig */, + D4A4CAF902F42F2C275D5140 /* Pods-Runner.release.xcconfig */, + BD3A0F8A638DFB117A3B12AE /* Pods-Runner.profile.xcconfig */, + A94626AB4F8134D1CE35B95E /* Pods-RunnerTests.debug.xcconfig */, + 28E6650B654A9838F4BC754D /* Pods-RunnerTests.release.xcconfig */, + AE75D9ABF8118D94B26D31A6 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -202,8 +202,8 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - A5D295326948221FD077A049 /* Pods_Runner.framework */, - 7F08A230F9EB9E9A4781176E /* Pods_RunnerTests.framework */, + 56D647FEB41021142EAAE817 /* Pods_Runner.framework */, + FEAB0B2BDB3505A1268F9E75 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - B260F14E41F933FEB31E7D79 /* [CP] Check Pods Manifest.lock */, + F91EDBACE4FD3BC98B932C34 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 059F483F30DF9E5B020E19E9 /* [CP] Check Pods Manifest.lock */, + BCDF0270DF5CD351358E3A05 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - F864432775D8970F2B07DC68 /* [CP] Embed Pods Frameworks */, + B0C0E7DD7A7301A643A0AED9 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,67 +323,62 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 059F483F30DF9E5B020E19E9 /* [CP] Check Pods Manifest.lock */ = { + 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", ); - name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; }; - 3399D490228B24CF009A79C7 /* ShellScript */ = { + 33CC111E2044C6BF0003C045 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + Flutter/ephemeral/FlutterInputs.xcfilelist, ); inputPaths = ( + Flutter/ephemeral/tripwire, ); outputFileListPaths = ( + Flutter/ephemeral/FlutterOutputs.xcfilelist, ); outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; + shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 33CC111E2044C6BF0003C045 /* ShellScript */ = { + B0C0E7DD7A7301A643A0AED9 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - Flutter/ephemeral/FlutterInputs.xcfilelist, - ); - inputPaths = ( - Flutter/ephemeral/tripwire, + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - Flutter/ephemeral/FlutterOutputs.xcfilelist, - ); - outputPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; }; - B260F14E41F933FEB31E7D79 /* [CP] Check Pods Manifest.lock */ = { + BCDF0270DF5CD351358E3A05 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -398,28 +393,33 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - F864432775D8970F2B07DC68 /* [CP] Embed Pods Frameworks */ = { + F91EDBACE4FD3BC98B932C34 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = B772976BED82CD21FAC21917 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = A94626AB4F8134D1CE35B95E /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 60A5F2D17DC4E97002864529 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 28E6650B654A9838F4BC754D /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = B6A2C2BE919F71BEF08A457D /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = AE75D9ABF8118D94B26D31A6 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/brick_breaker/step_09/macos/Runner/Configs/AppInfo.xcconfig b/brick_breaker/step_09/macos/Runner/Configs/AppInfo.xcconfig index 63448c49a5..c6af9507a6 100644 --- a/brick_breaker/step_09/macos/Runner/Configs/AppInfo.xcconfig +++ b/brick_breaker/step_09/macos/Runner/Configs/AppInfo.xcconfig @@ -11,4 +11,4 @@ PRODUCT_NAME = brick_breaker PRODUCT_BUNDLE_IDENTIFIER = com.example.brickBreaker // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. diff --git a/brick_breaker/step_09/windows/runner/Runner.rc b/brick_breaker/step_09/windows/runner/Runner.rc index ae27c9042e..aa2737073d 100644 --- a/brick_breaker/step_09/windows/runner/Runner.rc +++ b/brick_breaker/step_09/windows/runner/Runner.rc @@ -93,7 +93,7 @@ BEGIN VALUE "FileDescription", "brick_breaker" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "InternalName", "brick_breaker" "\0" - VALUE "LegalCopyright", "Copyright (C) 2024 com.example. All rights reserved." "\0" + VALUE "LegalCopyright", "Copyright (C) 2025 com.example. All rights reserved." "\0" VALUE "OriginalFilename", "brick_breaker.exe" "\0" VALUE "ProductName", "brick_breaker" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" diff --git a/brick_breaker/step_10/android/app/src/main/kotlin/com/example/brick_breaker/MainActivity.kt b/brick_breaker/step_10/android/app/src/main/kotlin/com/example/brick_breaker/MainActivity.kt index 74a09e998d..7f4414ee4a 100644 --- a/brick_breaker/step_10/android/app/src/main/kotlin/com/example/brick_breaker/MainActivity.kt +++ b/brick_breaker/step_10/android/app/src/main/kotlin/com/example/brick_breaker/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.brick_breaker import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/brick_breaker/step_10/ios/Runner.xcodeproj/project.pbxproj b/brick_breaker/step_10/ios/Runner.xcodeproj/project.pbxproj index 30066aa2cd..1af34be3fd 100644 --- a/brick_breaker/step_10/ios/Runner.xcodeproj/project.pbxproj +++ b/brick_breaker/step_10/ios/Runner.xcodeproj/project.pbxproj @@ -7,15 +7,15 @@ objects = { /* Begin PBXBuildFile section */ - 124136F5D0A7F933C33809B9 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 27AB1FDB61F7EFA18C7E0C37 /* Pods_RunnerTests.framework */; }; 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; + 16412B2BBE9DF83AFFE1C4F3 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5073259FF0E041D4A20CDB47 /* Pods_Runner.framework */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - D17E67BAFF6CBB4802D1BAE9 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FD3A88A617EB41D61FEC5F85 /* Pods_Runner.framework */; }; + A459070B64CED6A1EA97E95E /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6BFFE5CD3DF2B69B1CDBDA56 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,18 +42,19 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 11455C70F3A35908CFB73C4C /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 27AB1FDB61F7EFA18C7E0C37 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 44E0C7F06C49CB96A5847578 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 4B9CB300B7DEF06F9EE989F6 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 5A6A6DE8DF6F50895C3E5A39 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 45B65D22BC79CEA3BE8A3168 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 5073259FF0E041D4A20CDB47 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 6BFFE5CD3DF2B69B1CDBDA56 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; + 96E72E87BAF1EBBB611A662D /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -61,18 +62,17 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 9AD2F05105704247A2B664B6 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - AD4797C2B873300FB44F8AA8 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - F7507B05AAF1181BE28B35BF /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - FD3A88A617EB41D61FEC5F85 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + A13F37D436F70914AE6725A8 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + C71FF5AA05FD3BFF419E3045 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + CC559457A99977ED9C571323 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 49D69B12016413FDD74E1C79 /* Frameworks */ = { + 45B96668265977AFBAE25004 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 124136F5D0A7F933C33809B9 /* Pods_RunnerTests.framework in Frameworks */, + A459070B64CED6A1EA97E95E /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -80,22 +80,13 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - D17E67BAFF6CBB4802D1BAE9 /* Pods_Runner.framework in Frameworks */, + 16412B2BBE9DF83AFFE1C4F3 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 085B178DD0BBD60C20AD056B /* Frameworks */ = { - isa = PBXGroup; - children = ( - FD3A88A617EB41D61FEC5F85 /* Pods_Runner.framework */, - 27AB1FDB61F7EFA18C7E0C37 /* Pods_RunnerTests.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; 331C8082294A63A400263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -104,15 +95,15 @@ path = RunnerTests; sourceTree = ""; }; - 3EF3C2D65BCFB10B53E2A055 /* Pods */ = { + 70FA5D61F4E5EB911087D730 /* Pods */ = { isa = PBXGroup; children = ( - AD4797C2B873300FB44F8AA8 /* Pods-Runner.debug.xcconfig */, - 4B9CB300B7DEF06F9EE989F6 /* Pods-Runner.release.xcconfig */, - 9AD2F05105704247A2B664B6 /* Pods-Runner.profile.xcconfig */, - 44E0C7F06C49CB96A5847578 /* Pods-RunnerTests.debug.xcconfig */, - 5A6A6DE8DF6F50895C3E5A39 /* Pods-RunnerTests.release.xcconfig */, - F7507B05AAF1181BE28B35BF /* Pods-RunnerTests.profile.xcconfig */, + A13F37D436F70914AE6725A8 /* Pods-Runner.debug.xcconfig */, + 11455C70F3A35908CFB73C4C /* Pods-Runner.release.xcconfig */, + 96E72E87BAF1EBBB611A662D /* Pods-Runner.profile.xcconfig */, + CC559457A99977ED9C571323 /* Pods-RunnerTests.debug.xcconfig */, + C71FF5AA05FD3BFF419E3045 /* Pods-RunnerTests.release.xcconfig */, + 45B65D22BC79CEA3BE8A3168 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -136,8 +127,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - 3EF3C2D65BCFB10B53E2A055 /* Pods */, - 085B178DD0BBD60C20AD056B /* Frameworks */, + 70FA5D61F4E5EB911087D730 /* Pods */, + A0250122B87A7F70B5B15D11 /* Frameworks */, ); sourceTree = ""; }; @@ -165,6 +156,15 @@ path = Runner; sourceTree = ""; }; + A0250122B87A7F70B5B15D11 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 5073259FF0E041D4A20CDB47 /* Pods_Runner.framework */, + 6BFFE5CD3DF2B69B1CDBDA56 /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - F3625ABFABAD7DEE60A5EFF0 /* [CP] Check Pods Manifest.lock */, + 0AB04FA11061CE70D81EE758 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 49D69B12016413FDD74E1C79 /* Frameworks */, + 45B96668265977AFBAE25004 /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 31EDF6437177E940D5C99867 /* [CP] Check Pods Manifest.lock */, + 45341BF5BF96927FD1AF17EC /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 7032893BEEADAF68AEE7E2D5 /* [CP] Embed Pods Frameworks */, + EC54BA3A477B08B054EB3B58 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -270,7 +270,7 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 31EDF6437177E940D5C99867 /* [CP] Check Pods Manifest.lock */ = { + 0AB04FA11061CE70D81EE758 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -285,7 +285,7 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -308,21 +308,26 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 7032893BEEADAF68AEE7E2D5 /* [CP] Embed Pods Frameworks */ = { + 45341BF5BF96927FD1AF17EC /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; 9740EEB61CF901F6004384FC /* Run Script */ = { @@ -340,26 +345,21 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - F3625ABFABAD7DEE60A5EFF0 /* [CP] Check Pods Manifest.lock */ = { + EC54BA3A477B08B054EB3B58 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 44E0C7F06C49CB96A5847578 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = CC559457A99977ED9C571323 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 5A6A6DE8DF6F50895C3E5A39 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = C71FF5AA05FD3BFF419E3045 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = F7507B05AAF1181BE28B35BF /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 45B65D22BC79CEA3BE8A3168 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/brick_breaker/step_10/macos/Runner.xcodeproj/project.pbxproj b/brick_breaker/step_10/macos/Runner.xcodeproj/project.pbxproj index 56d66afde0..25bdef5fc2 100644 --- a/brick_breaker/step_10/macos/Runner.xcodeproj/project.pbxproj +++ b/brick_breaker/step_10/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ - 22C298D65C4A41DD02AAEDC0 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A5D295326948221FD077A049 /* Pods_Runner.framework */; }; + 16437C8D841CE52C6E992400 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 56D647FEB41021142EAAE817 /* Pods_Runner.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - A1798DF22E9E8F245592515E /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7F08A230F9EB9E9A4781176E /* Pods_RunnerTests.framework */; }; + F89F1AAA1324AE7E3DD5C5CA /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FEAB0B2BDB3505A1268F9E75 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,7 +62,7 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 3198E92D2AC0FF9E71015587 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 28E6650B654A9838F4BC754D /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -79,15 +79,15 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 60A5F2D17DC4E97002864529 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - 6993DDD977CBE37C8788E05D /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 56D647FEB41021142EAAE817 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 7F08A230F9EB9E9A4781176E /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - A5D295326948221FD077A049 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - B6A2C2BE919F71BEF08A457D /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - B772976BED82CD21FAC21917 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - C588DD34F47228F313138254 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + A94626AB4F8134D1CE35B95E /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + AE75D9ABF8118D94B26D31A6 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + B493EFF6C4A291A6BE28DBF9 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + BD3A0F8A638DFB117A3B12AE /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + D4A4CAF902F42F2C275D5140 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + FEAB0B2BDB3505A1268F9E75 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - A1798DF22E9E8F245592515E /* Pods_RunnerTests.framework in Frameworks */, + F89F1AAA1324AE7E3DD5C5CA /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,7 +103,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 22C298D65C4A41DD02AAEDC0 /* Pods_Runner.framework in Frameworks */, + 16437C8D841CE52C6E992400 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -137,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 50631F2D68042C5EE36E82AD /* Pods */, + 48561E3700181DB4D4E3151D /* Pods */, ); sourceTree = ""; }; @@ -185,15 +185,15 @@ path = Runner; sourceTree = ""; }; - 50631F2D68042C5EE36E82AD /* Pods */ = { + 48561E3700181DB4D4E3151D /* Pods */ = { isa = PBXGroup; children = ( - 6993DDD977CBE37C8788E05D /* Pods-Runner.debug.xcconfig */, - C588DD34F47228F313138254 /* Pods-Runner.release.xcconfig */, - 3198E92D2AC0FF9E71015587 /* Pods-Runner.profile.xcconfig */, - B772976BED82CD21FAC21917 /* Pods-RunnerTests.debug.xcconfig */, - 60A5F2D17DC4E97002864529 /* Pods-RunnerTests.release.xcconfig */, - B6A2C2BE919F71BEF08A457D /* Pods-RunnerTests.profile.xcconfig */, + B493EFF6C4A291A6BE28DBF9 /* Pods-Runner.debug.xcconfig */, + D4A4CAF902F42F2C275D5140 /* Pods-Runner.release.xcconfig */, + BD3A0F8A638DFB117A3B12AE /* Pods-Runner.profile.xcconfig */, + A94626AB4F8134D1CE35B95E /* Pods-RunnerTests.debug.xcconfig */, + 28E6650B654A9838F4BC754D /* Pods-RunnerTests.release.xcconfig */, + AE75D9ABF8118D94B26D31A6 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -202,8 +202,8 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - A5D295326948221FD077A049 /* Pods_Runner.framework */, - 7F08A230F9EB9E9A4781176E /* Pods_RunnerTests.framework */, + 56D647FEB41021142EAAE817 /* Pods_Runner.framework */, + FEAB0B2BDB3505A1268F9E75 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - B260F14E41F933FEB31E7D79 /* [CP] Check Pods Manifest.lock */, + F91EDBACE4FD3BC98B932C34 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 059F483F30DF9E5B020E19E9 /* [CP] Check Pods Manifest.lock */, + BCDF0270DF5CD351358E3A05 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - F864432775D8970F2B07DC68 /* [CP] Embed Pods Frameworks */, + B0C0E7DD7A7301A643A0AED9 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,67 +323,62 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 059F483F30DF9E5B020E19E9 /* [CP] Check Pods Manifest.lock */ = { + 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", ); - name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; }; - 3399D490228B24CF009A79C7 /* ShellScript */ = { + 33CC111E2044C6BF0003C045 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + Flutter/ephemeral/FlutterInputs.xcfilelist, ); inputPaths = ( + Flutter/ephemeral/tripwire, ); outputFileListPaths = ( + Flutter/ephemeral/FlutterOutputs.xcfilelist, ); outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; + shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 33CC111E2044C6BF0003C045 /* ShellScript */ = { + B0C0E7DD7A7301A643A0AED9 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - Flutter/ephemeral/FlutterInputs.xcfilelist, - ); - inputPaths = ( - Flutter/ephemeral/tripwire, + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - Flutter/ephemeral/FlutterOutputs.xcfilelist, - ); - outputPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; }; - B260F14E41F933FEB31E7D79 /* [CP] Check Pods Manifest.lock */ = { + BCDF0270DF5CD351358E3A05 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -398,28 +393,33 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - F864432775D8970F2B07DC68 /* [CP] Embed Pods Frameworks */ = { + F91EDBACE4FD3BC98B932C34 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = B772976BED82CD21FAC21917 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = A94626AB4F8134D1CE35B95E /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 60A5F2D17DC4E97002864529 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 28E6650B654A9838F4BC754D /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = B6A2C2BE919F71BEF08A457D /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = AE75D9ABF8118D94B26D31A6 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/brick_breaker/step_10/macos/Runner/Configs/AppInfo.xcconfig b/brick_breaker/step_10/macos/Runner/Configs/AppInfo.xcconfig index 63448c49a5..c6af9507a6 100644 --- a/brick_breaker/step_10/macos/Runner/Configs/AppInfo.xcconfig +++ b/brick_breaker/step_10/macos/Runner/Configs/AppInfo.xcconfig @@ -11,4 +11,4 @@ PRODUCT_NAME = brick_breaker PRODUCT_BUNDLE_IDENTIFIER = com.example.brickBreaker // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. diff --git a/brick_breaker/step_10/windows/runner/Runner.rc b/brick_breaker/step_10/windows/runner/Runner.rc index ae27c9042e..aa2737073d 100644 --- a/brick_breaker/step_10/windows/runner/Runner.rc +++ b/brick_breaker/step_10/windows/runner/Runner.rc @@ -93,7 +93,7 @@ BEGIN VALUE "FileDescription", "brick_breaker" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "InternalName", "brick_breaker" "\0" - VALUE "LegalCopyright", "Copyright (C) 2024 com.example. All rights reserved." "\0" + VALUE "LegalCopyright", "Copyright (C) 2025 com.example. All rights reserved." "\0" VALUE "OriginalFilename", "brick_breaker.exe" "\0" VALUE "ProductName", "brick_breaker" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" From 576e302d361f9e255f75ac711df39ce1b8d399fe Mon Sep 17 00:00:00 2001 From: Brett Morgan Date: Wed, 22 Jan 2025 13:39:55 +1100 Subject: [PATCH 094/108] Update `dart-patterns-and-records` --- .../main/kotlin/com/example/patterns_codelab/MainActivity.kt | 2 +- .../step_03/macos/Runner/Configs/AppInfo.xcconfig | 2 +- dart-patterns-and-records/step_03/windows/runner/Runner.rc | 2 +- .../main/kotlin/com/example/patterns_codelab/MainActivity.kt | 2 +- .../step_04/macos/Runner/Configs/AppInfo.xcconfig | 2 +- dart-patterns-and-records/step_04/windows/runner/Runner.rc | 2 +- .../main/kotlin/com/example/patterns_codelab/MainActivity.kt | 2 +- .../step_05/macos/Runner/Configs/AppInfo.xcconfig | 2 +- dart-patterns-and-records/step_05/windows/runner/Runner.rc | 2 +- .../main/kotlin/com/example/patterns_codelab/MainActivity.kt | 2 +- .../step_06_a/macos/Runner/Configs/AppInfo.xcconfig | 2 +- dart-patterns-and-records/step_06_a/windows/runner/Runner.rc | 2 +- .../main/kotlin/com/example/patterns_codelab/MainActivity.kt | 2 +- .../step_06_b/macos/Runner/Configs/AppInfo.xcconfig | 2 +- dart-patterns-and-records/step_06_b/windows/runner/Runner.rc | 2 +- .../main/kotlin/com/example/patterns_codelab/MainActivity.kt | 2 +- .../step_07_a/macos/Runner/Configs/AppInfo.xcconfig | 2 +- dart-patterns-and-records/step_07_a/windows/runner/Runner.rc | 2 +- .../main/kotlin/com/example/patterns_codelab/MainActivity.kt | 2 +- .../step_07_b/macos/Runner/Configs/AppInfo.xcconfig | 2 +- dart-patterns-and-records/step_07_b/windows/runner/Runner.rc | 2 +- .../main/kotlin/com/example/patterns_codelab/MainActivity.kt | 2 +- .../step_08/macos/Runner/Configs/AppInfo.xcconfig | 2 +- dart-patterns-and-records/step_08/windows/runner/Runner.rc | 2 +- .../main/kotlin/com/example/patterns_codelab/MainActivity.kt | 2 +- .../step_09/macos/Runner/Configs/AppInfo.xcconfig | 2 +- dart-patterns-and-records/step_09/windows/runner/Runner.rc | 2 +- .../main/kotlin/com/example/patterns_codelab/MainActivity.kt | 2 +- .../step_10/macos/Runner/Configs/AppInfo.xcconfig | 2 +- dart-patterns-and-records/step_10/windows/runner/Runner.rc | 2 +- .../main/kotlin/com/example/patterns_codelab/MainActivity.kt | 2 +- .../step_11_a/macos/Runner/Configs/AppInfo.xcconfig | 2 +- dart-patterns-and-records/step_11_a/windows/runner/Runner.rc | 2 +- .../main/kotlin/com/example/patterns_codelab/MainActivity.kt | 2 +- .../step_11_b/macos/Runner/Configs/AppInfo.xcconfig | 2 +- dart-patterns-and-records/step_11_b/windows/runner/Runner.rc | 2 +- .../main/kotlin/com/example/patterns_codelab/MainActivity.kt | 2 +- .../step_12/macos/Runner/Configs/AppInfo.xcconfig | 2 +- dart-patterns-and-records/step_12/windows/runner/Runner.rc | 2 +- 39 files changed, 39 insertions(+), 39 deletions(-) diff --git a/dart-patterns-and-records/step_03/android/app/src/main/kotlin/com/example/patterns_codelab/MainActivity.kt b/dart-patterns-and-records/step_03/android/app/src/main/kotlin/com/example/patterns_codelab/MainActivity.kt index f322b113b7..062942413e 100644 --- a/dart-patterns-and-records/step_03/android/app/src/main/kotlin/com/example/patterns_codelab/MainActivity.kt +++ b/dart-patterns-and-records/step_03/android/app/src/main/kotlin/com/example/patterns_codelab/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.patterns_codelab import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/dart-patterns-and-records/step_03/macos/Runner/Configs/AppInfo.xcconfig b/dart-patterns-and-records/step_03/macos/Runner/Configs/AppInfo.xcconfig index ee0c864766..a93c281390 100644 --- a/dart-patterns-and-records/step_03/macos/Runner/Configs/AppInfo.xcconfig +++ b/dart-patterns-and-records/step_03/macos/Runner/Configs/AppInfo.xcconfig @@ -11,4 +11,4 @@ PRODUCT_NAME = patterns_codelab PRODUCT_BUNDLE_IDENTIFIER = com.example.patternsCodelab // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. diff --git a/dart-patterns-and-records/step_03/windows/runner/Runner.rc b/dart-patterns-and-records/step_03/windows/runner/Runner.rc index 1df32b7bd9..ec00474669 100644 --- a/dart-patterns-and-records/step_03/windows/runner/Runner.rc +++ b/dart-patterns-and-records/step_03/windows/runner/Runner.rc @@ -93,7 +93,7 @@ BEGIN VALUE "FileDescription", "patterns_codelab" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "InternalName", "patterns_codelab" "\0" - VALUE "LegalCopyright", "Copyright (C) 2024 com.example. All rights reserved." "\0" + VALUE "LegalCopyright", "Copyright (C) 2025 com.example. All rights reserved." "\0" VALUE "OriginalFilename", "patterns_codelab.exe" "\0" VALUE "ProductName", "patterns_codelab" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" diff --git a/dart-patterns-and-records/step_04/android/app/src/main/kotlin/com/example/patterns_codelab/MainActivity.kt b/dart-patterns-and-records/step_04/android/app/src/main/kotlin/com/example/patterns_codelab/MainActivity.kt index f322b113b7..062942413e 100644 --- a/dart-patterns-and-records/step_04/android/app/src/main/kotlin/com/example/patterns_codelab/MainActivity.kt +++ b/dart-patterns-and-records/step_04/android/app/src/main/kotlin/com/example/patterns_codelab/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.patterns_codelab import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/dart-patterns-and-records/step_04/macos/Runner/Configs/AppInfo.xcconfig b/dart-patterns-and-records/step_04/macos/Runner/Configs/AppInfo.xcconfig index ee0c864766..a93c281390 100644 --- a/dart-patterns-and-records/step_04/macos/Runner/Configs/AppInfo.xcconfig +++ b/dart-patterns-and-records/step_04/macos/Runner/Configs/AppInfo.xcconfig @@ -11,4 +11,4 @@ PRODUCT_NAME = patterns_codelab PRODUCT_BUNDLE_IDENTIFIER = com.example.patternsCodelab // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. diff --git a/dart-patterns-and-records/step_04/windows/runner/Runner.rc b/dart-patterns-and-records/step_04/windows/runner/Runner.rc index 1df32b7bd9..ec00474669 100644 --- a/dart-patterns-and-records/step_04/windows/runner/Runner.rc +++ b/dart-patterns-and-records/step_04/windows/runner/Runner.rc @@ -93,7 +93,7 @@ BEGIN VALUE "FileDescription", "patterns_codelab" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "InternalName", "patterns_codelab" "\0" - VALUE "LegalCopyright", "Copyright (C) 2024 com.example. All rights reserved." "\0" + VALUE "LegalCopyright", "Copyright (C) 2025 com.example. All rights reserved." "\0" VALUE "OriginalFilename", "patterns_codelab.exe" "\0" VALUE "ProductName", "patterns_codelab" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" diff --git a/dart-patterns-and-records/step_05/android/app/src/main/kotlin/com/example/patterns_codelab/MainActivity.kt b/dart-patterns-and-records/step_05/android/app/src/main/kotlin/com/example/patterns_codelab/MainActivity.kt index f322b113b7..062942413e 100644 --- a/dart-patterns-and-records/step_05/android/app/src/main/kotlin/com/example/patterns_codelab/MainActivity.kt +++ b/dart-patterns-and-records/step_05/android/app/src/main/kotlin/com/example/patterns_codelab/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.patterns_codelab import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/dart-patterns-and-records/step_05/macos/Runner/Configs/AppInfo.xcconfig b/dart-patterns-and-records/step_05/macos/Runner/Configs/AppInfo.xcconfig index ee0c864766..a93c281390 100644 --- a/dart-patterns-and-records/step_05/macos/Runner/Configs/AppInfo.xcconfig +++ b/dart-patterns-and-records/step_05/macos/Runner/Configs/AppInfo.xcconfig @@ -11,4 +11,4 @@ PRODUCT_NAME = patterns_codelab PRODUCT_BUNDLE_IDENTIFIER = com.example.patternsCodelab // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. diff --git a/dart-patterns-and-records/step_05/windows/runner/Runner.rc b/dart-patterns-and-records/step_05/windows/runner/Runner.rc index 1df32b7bd9..ec00474669 100644 --- a/dart-patterns-and-records/step_05/windows/runner/Runner.rc +++ b/dart-patterns-and-records/step_05/windows/runner/Runner.rc @@ -93,7 +93,7 @@ BEGIN VALUE "FileDescription", "patterns_codelab" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "InternalName", "patterns_codelab" "\0" - VALUE "LegalCopyright", "Copyright (C) 2024 com.example. All rights reserved." "\0" + VALUE "LegalCopyright", "Copyright (C) 2025 com.example. All rights reserved." "\0" VALUE "OriginalFilename", "patterns_codelab.exe" "\0" VALUE "ProductName", "patterns_codelab" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" diff --git a/dart-patterns-and-records/step_06_a/android/app/src/main/kotlin/com/example/patterns_codelab/MainActivity.kt b/dart-patterns-and-records/step_06_a/android/app/src/main/kotlin/com/example/patterns_codelab/MainActivity.kt index f322b113b7..062942413e 100644 --- a/dart-patterns-and-records/step_06_a/android/app/src/main/kotlin/com/example/patterns_codelab/MainActivity.kt +++ b/dart-patterns-and-records/step_06_a/android/app/src/main/kotlin/com/example/patterns_codelab/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.patterns_codelab import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/dart-patterns-and-records/step_06_a/macos/Runner/Configs/AppInfo.xcconfig b/dart-patterns-and-records/step_06_a/macos/Runner/Configs/AppInfo.xcconfig index ee0c864766..a93c281390 100644 --- a/dart-patterns-and-records/step_06_a/macos/Runner/Configs/AppInfo.xcconfig +++ b/dart-patterns-and-records/step_06_a/macos/Runner/Configs/AppInfo.xcconfig @@ -11,4 +11,4 @@ PRODUCT_NAME = patterns_codelab PRODUCT_BUNDLE_IDENTIFIER = com.example.patternsCodelab // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. diff --git a/dart-patterns-and-records/step_06_a/windows/runner/Runner.rc b/dart-patterns-and-records/step_06_a/windows/runner/Runner.rc index 1df32b7bd9..ec00474669 100644 --- a/dart-patterns-and-records/step_06_a/windows/runner/Runner.rc +++ b/dart-patterns-and-records/step_06_a/windows/runner/Runner.rc @@ -93,7 +93,7 @@ BEGIN VALUE "FileDescription", "patterns_codelab" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "InternalName", "patterns_codelab" "\0" - VALUE "LegalCopyright", "Copyright (C) 2024 com.example. All rights reserved." "\0" + VALUE "LegalCopyright", "Copyright (C) 2025 com.example. All rights reserved." "\0" VALUE "OriginalFilename", "patterns_codelab.exe" "\0" VALUE "ProductName", "patterns_codelab" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" diff --git a/dart-patterns-and-records/step_06_b/android/app/src/main/kotlin/com/example/patterns_codelab/MainActivity.kt b/dart-patterns-and-records/step_06_b/android/app/src/main/kotlin/com/example/patterns_codelab/MainActivity.kt index f322b113b7..062942413e 100644 --- a/dart-patterns-and-records/step_06_b/android/app/src/main/kotlin/com/example/patterns_codelab/MainActivity.kt +++ b/dart-patterns-and-records/step_06_b/android/app/src/main/kotlin/com/example/patterns_codelab/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.patterns_codelab import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/dart-patterns-and-records/step_06_b/macos/Runner/Configs/AppInfo.xcconfig b/dart-patterns-and-records/step_06_b/macos/Runner/Configs/AppInfo.xcconfig index ee0c864766..a93c281390 100644 --- a/dart-patterns-and-records/step_06_b/macos/Runner/Configs/AppInfo.xcconfig +++ b/dart-patterns-and-records/step_06_b/macos/Runner/Configs/AppInfo.xcconfig @@ -11,4 +11,4 @@ PRODUCT_NAME = patterns_codelab PRODUCT_BUNDLE_IDENTIFIER = com.example.patternsCodelab // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. diff --git a/dart-patterns-and-records/step_06_b/windows/runner/Runner.rc b/dart-patterns-and-records/step_06_b/windows/runner/Runner.rc index 1df32b7bd9..ec00474669 100644 --- a/dart-patterns-and-records/step_06_b/windows/runner/Runner.rc +++ b/dart-patterns-and-records/step_06_b/windows/runner/Runner.rc @@ -93,7 +93,7 @@ BEGIN VALUE "FileDescription", "patterns_codelab" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "InternalName", "patterns_codelab" "\0" - VALUE "LegalCopyright", "Copyright (C) 2024 com.example. All rights reserved." "\0" + VALUE "LegalCopyright", "Copyright (C) 2025 com.example. All rights reserved." "\0" VALUE "OriginalFilename", "patterns_codelab.exe" "\0" VALUE "ProductName", "patterns_codelab" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" diff --git a/dart-patterns-and-records/step_07_a/android/app/src/main/kotlin/com/example/patterns_codelab/MainActivity.kt b/dart-patterns-and-records/step_07_a/android/app/src/main/kotlin/com/example/patterns_codelab/MainActivity.kt index f322b113b7..062942413e 100644 --- a/dart-patterns-and-records/step_07_a/android/app/src/main/kotlin/com/example/patterns_codelab/MainActivity.kt +++ b/dart-patterns-and-records/step_07_a/android/app/src/main/kotlin/com/example/patterns_codelab/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.patterns_codelab import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/dart-patterns-and-records/step_07_a/macos/Runner/Configs/AppInfo.xcconfig b/dart-patterns-and-records/step_07_a/macos/Runner/Configs/AppInfo.xcconfig index ee0c864766..a93c281390 100644 --- a/dart-patterns-and-records/step_07_a/macos/Runner/Configs/AppInfo.xcconfig +++ b/dart-patterns-and-records/step_07_a/macos/Runner/Configs/AppInfo.xcconfig @@ -11,4 +11,4 @@ PRODUCT_NAME = patterns_codelab PRODUCT_BUNDLE_IDENTIFIER = com.example.patternsCodelab // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. diff --git a/dart-patterns-and-records/step_07_a/windows/runner/Runner.rc b/dart-patterns-and-records/step_07_a/windows/runner/Runner.rc index 1df32b7bd9..ec00474669 100644 --- a/dart-patterns-and-records/step_07_a/windows/runner/Runner.rc +++ b/dart-patterns-and-records/step_07_a/windows/runner/Runner.rc @@ -93,7 +93,7 @@ BEGIN VALUE "FileDescription", "patterns_codelab" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "InternalName", "patterns_codelab" "\0" - VALUE "LegalCopyright", "Copyright (C) 2024 com.example. All rights reserved." "\0" + VALUE "LegalCopyright", "Copyright (C) 2025 com.example. All rights reserved." "\0" VALUE "OriginalFilename", "patterns_codelab.exe" "\0" VALUE "ProductName", "patterns_codelab" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" diff --git a/dart-patterns-and-records/step_07_b/android/app/src/main/kotlin/com/example/patterns_codelab/MainActivity.kt b/dart-patterns-and-records/step_07_b/android/app/src/main/kotlin/com/example/patterns_codelab/MainActivity.kt index f322b113b7..062942413e 100644 --- a/dart-patterns-and-records/step_07_b/android/app/src/main/kotlin/com/example/patterns_codelab/MainActivity.kt +++ b/dart-patterns-and-records/step_07_b/android/app/src/main/kotlin/com/example/patterns_codelab/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.patterns_codelab import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/dart-patterns-and-records/step_07_b/macos/Runner/Configs/AppInfo.xcconfig b/dart-patterns-and-records/step_07_b/macos/Runner/Configs/AppInfo.xcconfig index ee0c864766..a93c281390 100644 --- a/dart-patterns-and-records/step_07_b/macos/Runner/Configs/AppInfo.xcconfig +++ b/dart-patterns-and-records/step_07_b/macos/Runner/Configs/AppInfo.xcconfig @@ -11,4 +11,4 @@ PRODUCT_NAME = patterns_codelab PRODUCT_BUNDLE_IDENTIFIER = com.example.patternsCodelab // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. diff --git a/dart-patterns-and-records/step_07_b/windows/runner/Runner.rc b/dart-patterns-and-records/step_07_b/windows/runner/Runner.rc index 1df32b7bd9..ec00474669 100644 --- a/dart-patterns-and-records/step_07_b/windows/runner/Runner.rc +++ b/dart-patterns-and-records/step_07_b/windows/runner/Runner.rc @@ -93,7 +93,7 @@ BEGIN VALUE "FileDescription", "patterns_codelab" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "InternalName", "patterns_codelab" "\0" - VALUE "LegalCopyright", "Copyright (C) 2024 com.example. All rights reserved." "\0" + VALUE "LegalCopyright", "Copyright (C) 2025 com.example. All rights reserved." "\0" VALUE "OriginalFilename", "patterns_codelab.exe" "\0" VALUE "ProductName", "patterns_codelab" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" diff --git a/dart-patterns-and-records/step_08/android/app/src/main/kotlin/com/example/patterns_codelab/MainActivity.kt b/dart-patterns-and-records/step_08/android/app/src/main/kotlin/com/example/patterns_codelab/MainActivity.kt index f322b113b7..062942413e 100644 --- a/dart-patterns-and-records/step_08/android/app/src/main/kotlin/com/example/patterns_codelab/MainActivity.kt +++ b/dart-patterns-and-records/step_08/android/app/src/main/kotlin/com/example/patterns_codelab/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.patterns_codelab import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/dart-patterns-and-records/step_08/macos/Runner/Configs/AppInfo.xcconfig b/dart-patterns-and-records/step_08/macos/Runner/Configs/AppInfo.xcconfig index ee0c864766..a93c281390 100644 --- a/dart-patterns-and-records/step_08/macos/Runner/Configs/AppInfo.xcconfig +++ b/dart-patterns-and-records/step_08/macos/Runner/Configs/AppInfo.xcconfig @@ -11,4 +11,4 @@ PRODUCT_NAME = patterns_codelab PRODUCT_BUNDLE_IDENTIFIER = com.example.patternsCodelab // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. diff --git a/dart-patterns-and-records/step_08/windows/runner/Runner.rc b/dart-patterns-and-records/step_08/windows/runner/Runner.rc index 1df32b7bd9..ec00474669 100644 --- a/dart-patterns-and-records/step_08/windows/runner/Runner.rc +++ b/dart-patterns-and-records/step_08/windows/runner/Runner.rc @@ -93,7 +93,7 @@ BEGIN VALUE "FileDescription", "patterns_codelab" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "InternalName", "patterns_codelab" "\0" - VALUE "LegalCopyright", "Copyright (C) 2024 com.example. All rights reserved." "\0" + VALUE "LegalCopyright", "Copyright (C) 2025 com.example. All rights reserved." "\0" VALUE "OriginalFilename", "patterns_codelab.exe" "\0" VALUE "ProductName", "patterns_codelab" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" diff --git a/dart-patterns-and-records/step_09/android/app/src/main/kotlin/com/example/patterns_codelab/MainActivity.kt b/dart-patterns-and-records/step_09/android/app/src/main/kotlin/com/example/patterns_codelab/MainActivity.kt index f322b113b7..062942413e 100644 --- a/dart-patterns-and-records/step_09/android/app/src/main/kotlin/com/example/patterns_codelab/MainActivity.kt +++ b/dart-patterns-and-records/step_09/android/app/src/main/kotlin/com/example/patterns_codelab/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.patterns_codelab import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/dart-patterns-and-records/step_09/macos/Runner/Configs/AppInfo.xcconfig b/dart-patterns-and-records/step_09/macos/Runner/Configs/AppInfo.xcconfig index ee0c864766..a93c281390 100644 --- a/dart-patterns-and-records/step_09/macos/Runner/Configs/AppInfo.xcconfig +++ b/dart-patterns-and-records/step_09/macos/Runner/Configs/AppInfo.xcconfig @@ -11,4 +11,4 @@ PRODUCT_NAME = patterns_codelab PRODUCT_BUNDLE_IDENTIFIER = com.example.patternsCodelab // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. diff --git a/dart-patterns-and-records/step_09/windows/runner/Runner.rc b/dart-patterns-and-records/step_09/windows/runner/Runner.rc index 1df32b7bd9..ec00474669 100644 --- a/dart-patterns-and-records/step_09/windows/runner/Runner.rc +++ b/dart-patterns-and-records/step_09/windows/runner/Runner.rc @@ -93,7 +93,7 @@ BEGIN VALUE "FileDescription", "patterns_codelab" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "InternalName", "patterns_codelab" "\0" - VALUE "LegalCopyright", "Copyright (C) 2024 com.example. All rights reserved." "\0" + VALUE "LegalCopyright", "Copyright (C) 2025 com.example. All rights reserved." "\0" VALUE "OriginalFilename", "patterns_codelab.exe" "\0" VALUE "ProductName", "patterns_codelab" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" diff --git a/dart-patterns-and-records/step_10/android/app/src/main/kotlin/com/example/patterns_codelab/MainActivity.kt b/dart-patterns-and-records/step_10/android/app/src/main/kotlin/com/example/patterns_codelab/MainActivity.kt index f322b113b7..062942413e 100644 --- a/dart-patterns-and-records/step_10/android/app/src/main/kotlin/com/example/patterns_codelab/MainActivity.kt +++ b/dart-patterns-and-records/step_10/android/app/src/main/kotlin/com/example/patterns_codelab/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.patterns_codelab import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/dart-patterns-and-records/step_10/macos/Runner/Configs/AppInfo.xcconfig b/dart-patterns-and-records/step_10/macos/Runner/Configs/AppInfo.xcconfig index ee0c864766..a93c281390 100644 --- a/dart-patterns-and-records/step_10/macos/Runner/Configs/AppInfo.xcconfig +++ b/dart-patterns-and-records/step_10/macos/Runner/Configs/AppInfo.xcconfig @@ -11,4 +11,4 @@ PRODUCT_NAME = patterns_codelab PRODUCT_BUNDLE_IDENTIFIER = com.example.patternsCodelab // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. diff --git a/dart-patterns-and-records/step_10/windows/runner/Runner.rc b/dart-patterns-and-records/step_10/windows/runner/Runner.rc index 1df32b7bd9..ec00474669 100644 --- a/dart-patterns-and-records/step_10/windows/runner/Runner.rc +++ b/dart-patterns-and-records/step_10/windows/runner/Runner.rc @@ -93,7 +93,7 @@ BEGIN VALUE "FileDescription", "patterns_codelab" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "InternalName", "patterns_codelab" "\0" - VALUE "LegalCopyright", "Copyright (C) 2024 com.example. All rights reserved." "\0" + VALUE "LegalCopyright", "Copyright (C) 2025 com.example. All rights reserved." "\0" VALUE "OriginalFilename", "patterns_codelab.exe" "\0" VALUE "ProductName", "patterns_codelab" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" diff --git a/dart-patterns-and-records/step_11_a/android/app/src/main/kotlin/com/example/patterns_codelab/MainActivity.kt b/dart-patterns-and-records/step_11_a/android/app/src/main/kotlin/com/example/patterns_codelab/MainActivity.kt index f322b113b7..062942413e 100644 --- a/dart-patterns-and-records/step_11_a/android/app/src/main/kotlin/com/example/patterns_codelab/MainActivity.kt +++ b/dart-patterns-and-records/step_11_a/android/app/src/main/kotlin/com/example/patterns_codelab/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.patterns_codelab import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/dart-patterns-and-records/step_11_a/macos/Runner/Configs/AppInfo.xcconfig b/dart-patterns-and-records/step_11_a/macos/Runner/Configs/AppInfo.xcconfig index ee0c864766..a93c281390 100644 --- a/dart-patterns-and-records/step_11_a/macos/Runner/Configs/AppInfo.xcconfig +++ b/dart-patterns-and-records/step_11_a/macos/Runner/Configs/AppInfo.xcconfig @@ -11,4 +11,4 @@ PRODUCT_NAME = patterns_codelab PRODUCT_BUNDLE_IDENTIFIER = com.example.patternsCodelab // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. diff --git a/dart-patterns-and-records/step_11_a/windows/runner/Runner.rc b/dart-patterns-and-records/step_11_a/windows/runner/Runner.rc index 1df32b7bd9..ec00474669 100644 --- a/dart-patterns-and-records/step_11_a/windows/runner/Runner.rc +++ b/dart-patterns-and-records/step_11_a/windows/runner/Runner.rc @@ -93,7 +93,7 @@ BEGIN VALUE "FileDescription", "patterns_codelab" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "InternalName", "patterns_codelab" "\0" - VALUE "LegalCopyright", "Copyright (C) 2024 com.example. All rights reserved." "\0" + VALUE "LegalCopyright", "Copyright (C) 2025 com.example. All rights reserved." "\0" VALUE "OriginalFilename", "patterns_codelab.exe" "\0" VALUE "ProductName", "patterns_codelab" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" diff --git a/dart-patterns-and-records/step_11_b/android/app/src/main/kotlin/com/example/patterns_codelab/MainActivity.kt b/dart-patterns-and-records/step_11_b/android/app/src/main/kotlin/com/example/patterns_codelab/MainActivity.kt index f322b113b7..062942413e 100644 --- a/dart-patterns-and-records/step_11_b/android/app/src/main/kotlin/com/example/patterns_codelab/MainActivity.kt +++ b/dart-patterns-and-records/step_11_b/android/app/src/main/kotlin/com/example/patterns_codelab/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.patterns_codelab import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/dart-patterns-and-records/step_11_b/macos/Runner/Configs/AppInfo.xcconfig b/dart-patterns-and-records/step_11_b/macos/Runner/Configs/AppInfo.xcconfig index ee0c864766..a93c281390 100644 --- a/dart-patterns-and-records/step_11_b/macos/Runner/Configs/AppInfo.xcconfig +++ b/dart-patterns-and-records/step_11_b/macos/Runner/Configs/AppInfo.xcconfig @@ -11,4 +11,4 @@ PRODUCT_NAME = patterns_codelab PRODUCT_BUNDLE_IDENTIFIER = com.example.patternsCodelab // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. diff --git a/dart-patterns-and-records/step_11_b/windows/runner/Runner.rc b/dart-patterns-and-records/step_11_b/windows/runner/Runner.rc index 1df32b7bd9..ec00474669 100644 --- a/dart-patterns-and-records/step_11_b/windows/runner/Runner.rc +++ b/dart-patterns-and-records/step_11_b/windows/runner/Runner.rc @@ -93,7 +93,7 @@ BEGIN VALUE "FileDescription", "patterns_codelab" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "InternalName", "patterns_codelab" "\0" - VALUE "LegalCopyright", "Copyright (C) 2024 com.example. All rights reserved." "\0" + VALUE "LegalCopyright", "Copyright (C) 2025 com.example. All rights reserved." "\0" VALUE "OriginalFilename", "patterns_codelab.exe" "\0" VALUE "ProductName", "patterns_codelab" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" diff --git a/dart-patterns-and-records/step_12/android/app/src/main/kotlin/com/example/patterns_codelab/MainActivity.kt b/dart-patterns-and-records/step_12/android/app/src/main/kotlin/com/example/patterns_codelab/MainActivity.kt index f322b113b7..062942413e 100644 --- a/dart-patterns-and-records/step_12/android/app/src/main/kotlin/com/example/patterns_codelab/MainActivity.kt +++ b/dart-patterns-and-records/step_12/android/app/src/main/kotlin/com/example/patterns_codelab/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.patterns_codelab import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/dart-patterns-and-records/step_12/macos/Runner/Configs/AppInfo.xcconfig b/dart-patterns-and-records/step_12/macos/Runner/Configs/AppInfo.xcconfig index ee0c864766..a93c281390 100644 --- a/dart-patterns-and-records/step_12/macos/Runner/Configs/AppInfo.xcconfig +++ b/dart-patterns-and-records/step_12/macos/Runner/Configs/AppInfo.xcconfig @@ -11,4 +11,4 @@ PRODUCT_NAME = patterns_codelab PRODUCT_BUNDLE_IDENTIFIER = com.example.patternsCodelab // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. diff --git a/dart-patterns-and-records/step_12/windows/runner/Runner.rc b/dart-patterns-and-records/step_12/windows/runner/Runner.rc index 1df32b7bd9..ec00474669 100644 --- a/dart-patterns-and-records/step_12/windows/runner/Runner.rc +++ b/dart-patterns-and-records/step_12/windows/runner/Runner.rc @@ -93,7 +93,7 @@ BEGIN VALUE "FileDescription", "patterns_codelab" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "InternalName", "patterns_codelab" "\0" - VALUE "LegalCopyright", "Copyright (C) 2024 com.example. All rights reserved." "\0" + VALUE "LegalCopyright", "Copyright (C) 2025 com.example. All rights reserved." "\0" VALUE "OriginalFilename", "patterns_codelab.exe" "\0" VALUE "ProductName", "patterns_codelab" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" From 95ad13fbf00f520596497e912869db032fa9cc46 Mon Sep 17 00:00:00 2001 From: Brett Morgan Date: Wed, 22 Jan 2025 13:47:50 +1100 Subject: [PATCH 095/108] Update `ffigen_codelab` --- .../ffigen_app_example/MainActivity.kt | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 152 +++++++++--------- .../macos/Runner.xcodeproj/project.pbxproj | 102 ++++++------ .../macos/Runner/Configs/AppInfo.xcconfig | 2 +- ffigen_codelab/step_03/example/pubspec.yaml | 2 +- .../step_03/example/windows/runner/Runner.rc | 2 +- ffigen_codelab/step_03/pubspec.yaml | 4 +- .../ffigen_app_example/MainActivity.kt | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 152 +++++++++--------- .../macos/Runner.xcodeproj/project.pbxproj | 102 ++++++------ .../macos/Runner/Configs/AppInfo.xcconfig | 2 +- ffigen_codelab/step_05/example/pubspec.yaml | 2 +- .../step_05/example/windows/runner/Runner.rc | 2 +- ffigen_codelab/step_05/pubspec.yaml | 4 +- .../ffigen_app_example/MainActivity.kt | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 152 +++++++++--------- .../macos/Runner.xcodeproj/project.pbxproj | 102 ++++++------ .../macos/Runner/Configs/AppInfo.xcconfig | 2 +- ffigen_codelab/step_06/example/pubspec.yaml | 2 +- .../step_06/example/windows/runner/Runner.rc | 2 +- ffigen_codelab/step_06/pubspec.yaml | 4 +- .../ffigen_app_example/MainActivity.kt | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 152 +++++++++--------- .../macos/Runner.xcodeproj/project.pbxproj | 102 ++++++------ .../macos/Runner/Configs/AppInfo.xcconfig | 2 +- ffigen_codelab/step_07/example/pubspec.yaml | 6 +- .../step_07/example/windows/runner/Runner.rc | 2 +- ffigen_codelab/step_07/pubspec.yaml | 4 +- 28 files changed, 534 insertions(+), 534 deletions(-) diff --git a/ffigen_codelab/step_03/example/android/app/src/main/kotlin/com/example/ffigen_app_example/MainActivity.kt b/ffigen_codelab/step_03/example/android/app/src/main/kotlin/com/example/ffigen_app_example/MainActivity.kt index 68b7000537..bd55dde018 100644 --- a/ffigen_codelab/step_03/example/android/app/src/main/kotlin/com/example/ffigen_app_example/MainActivity.kt +++ b/ffigen_codelab/step_03/example/android/app/src/main/kotlin/com/example/ffigen_app_example/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.ffigen_app_example import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/ffigen_codelab/step_03/example/ios/Runner.xcodeproj/project.pbxproj b/ffigen_codelab/step_03/example/ios/Runner.xcodeproj/project.pbxproj index 370c8cc036..f07fad9d1b 100644 --- a/ffigen_codelab/step_03/example/ios/Runner.xcodeproj/project.pbxproj +++ b/ffigen_codelab/step_03/example/ios/Runner.xcodeproj/project.pbxproj @@ -7,15 +7,15 @@ objects = { /* Begin PBXBuildFile section */ - 0D6AC8D24333C25E8F9A1134 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E4956423BEC57EF1268EE7AA /* Pods_RunnerTests.framework */; }; 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; + 3124197035D663DFDA7A7486 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 87ECCFBFC445CCC43C5E6456 /* Pods_Runner.framework */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; + 90F96CA2FEBED8A95CE4414B /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1D9C16B72CBF1A1801DEB11C /* Pods_RunnerTests.framework */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - B9492A79D2B4CCDB8D90C67F /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2995406CCD0C9022D76274A0 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,20 +42,20 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 06EF5962C2F825CA103C10CF /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - 0EFD952B0BB96360874A0AAD /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 2995406CCD0C9022D76274A0 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 2FE60B6E9C9F46CC5F06AE6F /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 1D9C16B72CBF1A1801DEB11C /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 2AC35BD896EF887BA47551D6 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 54C597CCEB8B0F04B95C2533 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 6CBF1CEF95AC062BCE98454E /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 43B72FDFDBBD4098B5ABB2B6 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; + 83CB8552D8007FD22823A832 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 87C8D450A323C3C2A55B1948 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 87ECCFBFC445CCC43C5E6456 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -63,16 +63,16 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - DB439CAF5D7F1FFB0071716F /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - E4956423BEC57EF1268EE7AA /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + B87A3878A2A5D3DAF550B405 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + C988240780D863BA706266CB /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 7C3C456AFB803877F5B72C93 /* Frameworks */ = { + 8109C5A3450779C05E02CBCF /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 0D6AC8D24333C25E8F9A1134 /* Pods_RunnerTests.framework in Frameworks */, + 90F96CA2FEBED8A95CE4414B /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -80,7 +80,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - B9492A79D2B4CCDB8D90C67F /* Pods_Runner.framework in Frameworks */, + 3124197035D663DFDA7A7486 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -95,6 +95,29 @@ path = RunnerTests; sourceTree = ""; }; + 774357A91C85EBECBA8DB713 /* Pods */ = { + isa = PBXGroup; + children = ( + C988240780D863BA706266CB /* Pods-Runner.debug.xcconfig */, + 43B72FDFDBBD4098B5ABB2B6 /* Pods-Runner.release.xcconfig */, + 83CB8552D8007FD22823A832 /* Pods-Runner.profile.xcconfig */, + 2AC35BD896EF887BA47551D6 /* Pods-RunnerTests.debug.xcconfig */, + 87C8D450A323C3C2A55B1948 /* Pods-RunnerTests.release.xcconfig */, + B87A3878A2A5D3DAF550B405 /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; + 79B9CD23D4718AA065551918 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 87ECCFBFC445CCC43C5E6456 /* Pods_Runner.framework */, + 1D9C16B72CBF1A1801DEB11C /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( @@ -113,8 +136,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - AE7B306CA784B875CEF03F51 /* Pods */, - E3018D9C2AA94B22B9FC4419 /* Frameworks */, + 774357A91C85EBECBA8DB713 /* Pods */, + 79B9CD23D4718AA065551918 /* Frameworks */, ); sourceTree = ""; }; @@ -142,29 +165,6 @@ path = Runner; sourceTree = ""; }; - AE7B306CA784B875CEF03F51 /* Pods */ = { - isa = PBXGroup; - children = ( - 6CBF1CEF95AC062BCE98454E /* Pods-Runner.debug.xcconfig */, - 54C597CCEB8B0F04B95C2533 /* Pods-Runner.release.xcconfig */, - 06EF5962C2F825CA103C10CF /* Pods-Runner.profile.xcconfig */, - DB439CAF5D7F1FFB0071716F /* Pods-RunnerTests.debug.xcconfig */, - 2FE60B6E9C9F46CC5F06AE6F /* Pods-RunnerTests.release.xcconfig */, - 0EFD952B0BB96360874A0AAD /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; - E3018D9C2AA94B22B9FC4419 /* Frameworks */ = { - isa = PBXGroup; - children = ( - 2995406CCD0C9022D76274A0 /* Pods_Runner.framework */, - E4956423BEC57EF1268EE7AA /* Pods_RunnerTests.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 8C873E1199EBB5E704E40285 /* [CP] Check Pods Manifest.lock */, + 76AB1D2FFDC57A55A9DBED7D /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 7C3C456AFB803877F5B72C93 /* Frameworks */, + 8109C5A3450779C05E02CBCF /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 62CB88A09631F9E820A43B38 /* [CP] Check Pods Manifest.lock */, + D28CC41FA55B08A50999C215 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 973B944D165073F010483328 /* [CP] Embed Pods Frameworks */, + 14BDAB70B98CD7CB5570B2A9 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -270,45 +270,40 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + 14BDAB70B98CD7CB5570B2A9 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputPaths = ( - "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "Thin Binary"; - outputPaths = ( + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; }; - 62CB88A09631F9E820A43B38 /* [CP] Check Pods Manifest.lock */ = { + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); + name = "Thin Binary"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 8C873E1199EBB5E704E40285 /* [CP] Check Pods Manifest.lock */ = { + 76AB1D2FFDC57A55A9DBED7D /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -330,37 +325,42 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 973B944D165073F010483328 /* [CP] Embed Pods Frameworks */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + inputPaths = ( ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + name = "Run Script"; + outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { + D28CC41FA55B08A50999C215 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "Run Script"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = DB439CAF5D7F1FFB0071716F /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 2AC35BD896EF887BA47551D6 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 2FE60B6E9C9F46CC5F06AE6F /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 87C8D450A323C3C2A55B1948 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 0EFD952B0BB96360874A0AAD /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = B87A3878A2A5D3DAF550B405 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/ffigen_codelab/step_03/example/macos/Runner.xcodeproj/project.pbxproj b/ffigen_codelab/step_03/example/macos/Runner.xcodeproj/project.pbxproj index d201c457e7..d211b6fe70 100644 --- a/ffigen_codelab/step_03/example/macos/Runner.xcodeproj/project.pbxproj +++ b/ffigen_codelab/step_03/example/macos/Runner.xcodeproj/project.pbxproj @@ -27,8 +27,8 @@ 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 62FEF9A7C97159FC0DEB105E /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A7FE070184F188AEC164D1D9 /* Pods_Runner.framework */; }; - 638F7046C4C2B5AB997F9DB0 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 669DB278478E3EC6B6822B5C /* Pods_RunnerTests.framework */; }; + 8C05C559182A06B310E391AD /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 74369075D97ADE5FF9855354 /* Pods_RunnerTests.framework */; }; + AD8B16AD3B53698F8AA06401 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8B35DB67E6C3A53EC195826D /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,8 +62,9 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 1F85CB872DC9F8F98CEEABF4 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 23BECF297E5B22F741D8D2BC /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 061B2EAE6A67826D513E6A18 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 27FC957FA33ADAA35F370E36 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 2FF2CF2C599DD601FE5A75AF /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -80,14 +81,13 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 3BFC1E21C9EA9BD0D3A868EF /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 669DB278478E3EC6B6822B5C /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 74369075D97ADE5FF9855354 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; + 834A82023CFA1369E91A10A6 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 8B35DB67E6C3A53EC195826D /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - A75DFC48EA0D8AB8B9C239F0 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - A7FE070184F188AEC164D1D9 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - D3A2ADB71CD2C1687C65F098 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - EFF5374F5F980ADEDBD3CBB3 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + A9D2869CA91444C3AFAA8EB4 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + AC0AAA4DB2D26593AB717608 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 638F7046C4C2B5AB997F9DB0 /* Pods_RunnerTests.framework in Frameworks */, + 8C05C559182A06B310E391AD /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,7 +103,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 62FEF9A7C97159FC0DEB105E /* Pods_Runner.framework in Frameworks */, + AD8B16AD3B53698F8AA06401 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -137,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - F41B48B645D52EE1B172CF3C /* Pods */, + EC6DB45443E42AE9DA4820F9 /* Pods */, ); sourceTree = ""; }; @@ -188,21 +188,21 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - A7FE070184F188AEC164D1D9 /* Pods_Runner.framework */, - 669DB278478E3EC6B6822B5C /* Pods_RunnerTests.framework */, + 8B35DB67E6C3A53EC195826D /* Pods_Runner.framework */, + 74369075D97ADE5FF9855354 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; }; - F41B48B645D52EE1B172CF3C /* Pods */ = { + EC6DB45443E42AE9DA4820F9 /* Pods */ = { isa = PBXGroup; children = ( - 3BFC1E21C9EA9BD0D3A868EF /* Pods-Runner.debug.xcconfig */, - 23BECF297E5B22F741D8D2BC /* Pods-Runner.release.xcconfig */, - EFF5374F5F980ADEDBD3CBB3 /* Pods-Runner.profile.xcconfig */, - 1F85CB872DC9F8F98CEEABF4 /* Pods-RunnerTests.debug.xcconfig */, - A75DFC48EA0D8AB8B9C239F0 /* Pods-RunnerTests.release.xcconfig */, - D3A2ADB71CD2C1687C65F098 /* Pods-RunnerTests.profile.xcconfig */, + 061B2EAE6A67826D513E6A18 /* Pods-Runner.debug.xcconfig */, + 834A82023CFA1369E91A10A6 /* Pods-Runner.release.xcconfig */, + AC0AAA4DB2D26593AB717608 /* Pods-Runner.profile.xcconfig */, + 27FC957FA33ADAA35F370E36 /* Pods-RunnerTests.debug.xcconfig */, + A9D2869CA91444C3AFAA8EB4 /* Pods-RunnerTests.release.xcconfig */, + 2FF2CF2C599DD601FE5A75AF /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - E21CCFA79A4545FC47AA094F /* [CP] Check Pods Manifest.lock */, + 0FEF25B54DD2C958B949F554 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - C65A4CB3403561B71CB66F5B /* [CP] Check Pods Manifest.lock */, + 03241FCCE9F4FECEC6A0D07F /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - EC623A2D0CFCFCE5730CEF1B /* [CP] Embed Pods Frameworks */, + 69CB4DB4A47437F664FBAD81 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,89 +323,89 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 3399D490228B24CF009A79C7 /* ShellScript */ = { + 03241FCCE9F4FECEC6A0D07F /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( ); outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - 33CC111E2044C6BF0003C045 /* ShellScript */ = { + 0FEF25B54DD2C958B949F554 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - Flutter/ephemeral/FlutterInputs.xcfilelist, ); inputPaths = ( - Flutter/ephemeral/tripwire, + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - Flutter/ephemeral/FlutterOutputs.xcfilelist, ); outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - C65A4CB3403561B71CB66F5B /* [CP] Check Pods Manifest.lock */ = { + 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", ); - name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; }; - E21CCFA79A4545FC47AA094F /* [CP] Check Pods Manifest.lock */ = { + 33CC111E2044C6BF0003C045 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + Flutter/ephemeral/FlutterInputs.xcfilelist, ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", + Flutter/ephemeral/tripwire, ); - name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( + Flutter/ephemeral/FlutterOutputs.xcfilelist, ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - EC623A2D0CFCFCE5730CEF1B /* [CP] Embed Pods Frameworks */ = { + 69CB4DB4A47437F664FBAD81 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 1F85CB872DC9F8F98CEEABF4 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 27FC957FA33ADAA35F370E36 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = A75DFC48EA0D8AB8B9C239F0 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = A9D2869CA91444C3AFAA8EB4 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = D3A2ADB71CD2C1687C65F098 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 2FF2CF2C599DD601FE5A75AF /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/ffigen_codelab/step_03/example/macos/Runner/Configs/AppInfo.xcconfig b/ffigen_codelab/step_03/example/macos/Runner/Configs/AppInfo.xcconfig index 3768521ef5..3084161706 100644 --- a/ffigen_codelab/step_03/example/macos/Runner/Configs/AppInfo.xcconfig +++ b/ffigen_codelab/step_03/example/macos/Runner/Configs/AppInfo.xcconfig @@ -11,4 +11,4 @@ PRODUCT_NAME = ffigen_app_example PRODUCT_BUNDLE_IDENTIFIER = com.example.ffigenAppExample // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. diff --git a/ffigen_codelab/step_03/example/pubspec.yaml b/ffigen_codelab/step_03/example/pubspec.yaml index b6a8f5e004..bb9b2fc9ba 100644 --- a/ffigen_codelab/step_03/example/pubspec.yaml +++ b/ffigen_codelab/step_03/example/pubspec.yaml @@ -19,7 +19,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev version: 1.0.0+1 environment: - sdk: ^3.7.0-236.0.dev + sdk: ^3.7.0-0 # Dependencies specify other packages that your package needs in order to work. # To automatically upgrade your package dependencies to the latest versions diff --git a/ffigen_codelab/step_03/example/windows/runner/Runner.rc b/ffigen_codelab/step_03/example/windows/runner/Runner.rc index 86bd3e786a..d53145ba92 100644 --- a/ffigen_codelab/step_03/example/windows/runner/Runner.rc +++ b/ffigen_codelab/step_03/example/windows/runner/Runner.rc @@ -93,7 +93,7 @@ BEGIN VALUE "FileDescription", "ffigen_app_example" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "InternalName", "ffigen_app_example" "\0" - VALUE "LegalCopyright", "Copyright (C) 2024 com.example. All rights reserved." "\0" + VALUE "LegalCopyright", "Copyright (C) 2025 com.example. All rights reserved." "\0" VALUE "OriginalFilename", "ffigen_app_example.exe" "\0" VALUE "ProductName", "ffigen_app_example" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" diff --git a/ffigen_codelab/step_03/pubspec.yaml b/ffigen_codelab/step_03/pubspec.yaml index 2b79b7004e..e11a860b72 100644 --- a/ffigen_codelab/step_03/pubspec.yaml +++ b/ffigen_codelab/step_03/pubspec.yaml @@ -4,7 +4,7 @@ version: 0.0.1 homepage: environment: - sdk: ^3.7.0-236.0.dev + sdk: ^3.7.0-0 flutter: '>=3.3.0' dependencies: @@ -14,7 +14,7 @@ dependencies: dev_dependencies: ffi: ^2.1.3 - ffigen: ^16.0.0 + ffigen: ^16.1.0 flutter_test: sdk: flutter flutter_lints: ^5.0.0 diff --git a/ffigen_codelab/step_05/example/android/app/src/main/kotlin/com/example/ffigen_app_example/MainActivity.kt b/ffigen_codelab/step_05/example/android/app/src/main/kotlin/com/example/ffigen_app_example/MainActivity.kt index 68b7000537..bd55dde018 100644 --- a/ffigen_codelab/step_05/example/android/app/src/main/kotlin/com/example/ffigen_app_example/MainActivity.kt +++ b/ffigen_codelab/step_05/example/android/app/src/main/kotlin/com/example/ffigen_app_example/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.ffigen_app_example import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/ffigen_codelab/step_05/example/ios/Runner.xcodeproj/project.pbxproj b/ffigen_codelab/step_05/example/ios/Runner.xcodeproj/project.pbxproj index 370c8cc036..f07fad9d1b 100644 --- a/ffigen_codelab/step_05/example/ios/Runner.xcodeproj/project.pbxproj +++ b/ffigen_codelab/step_05/example/ios/Runner.xcodeproj/project.pbxproj @@ -7,15 +7,15 @@ objects = { /* Begin PBXBuildFile section */ - 0D6AC8D24333C25E8F9A1134 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E4956423BEC57EF1268EE7AA /* Pods_RunnerTests.framework */; }; 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; + 3124197035D663DFDA7A7486 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 87ECCFBFC445CCC43C5E6456 /* Pods_Runner.framework */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; + 90F96CA2FEBED8A95CE4414B /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1D9C16B72CBF1A1801DEB11C /* Pods_RunnerTests.framework */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - B9492A79D2B4CCDB8D90C67F /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2995406CCD0C9022D76274A0 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,20 +42,20 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 06EF5962C2F825CA103C10CF /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - 0EFD952B0BB96360874A0AAD /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 2995406CCD0C9022D76274A0 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 2FE60B6E9C9F46CC5F06AE6F /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 1D9C16B72CBF1A1801DEB11C /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 2AC35BD896EF887BA47551D6 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 54C597CCEB8B0F04B95C2533 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 6CBF1CEF95AC062BCE98454E /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 43B72FDFDBBD4098B5ABB2B6 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; + 83CB8552D8007FD22823A832 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 87C8D450A323C3C2A55B1948 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 87ECCFBFC445CCC43C5E6456 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -63,16 +63,16 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - DB439CAF5D7F1FFB0071716F /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - E4956423BEC57EF1268EE7AA /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + B87A3878A2A5D3DAF550B405 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + C988240780D863BA706266CB /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 7C3C456AFB803877F5B72C93 /* Frameworks */ = { + 8109C5A3450779C05E02CBCF /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 0D6AC8D24333C25E8F9A1134 /* Pods_RunnerTests.framework in Frameworks */, + 90F96CA2FEBED8A95CE4414B /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -80,7 +80,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - B9492A79D2B4CCDB8D90C67F /* Pods_Runner.framework in Frameworks */, + 3124197035D663DFDA7A7486 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -95,6 +95,29 @@ path = RunnerTests; sourceTree = ""; }; + 774357A91C85EBECBA8DB713 /* Pods */ = { + isa = PBXGroup; + children = ( + C988240780D863BA706266CB /* Pods-Runner.debug.xcconfig */, + 43B72FDFDBBD4098B5ABB2B6 /* Pods-Runner.release.xcconfig */, + 83CB8552D8007FD22823A832 /* Pods-Runner.profile.xcconfig */, + 2AC35BD896EF887BA47551D6 /* Pods-RunnerTests.debug.xcconfig */, + 87C8D450A323C3C2A55B1948 /* Pods-RunnerTests.release.xcconfig */, + B87A3878A2A5D3DAF550B405 /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; + 79B9CD23D4718AA065551918 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 87ECCFBFC445CCC43C5E6456 /* Pods_Runner.framework */, + 1D9C16B72CBF1A1801DEB11C /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( @@ -113,8 +136,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - AE7B306CA784B875CEF03F51 /* Pods */, - E3018D9C2AA94B22B9FC4419 /* Frameworks */, + 774357A91C85EBECBA8DB713 /* Pods */, + 79B9CD23D4718AA065551918 /* Frameworks */, ); sourceTree = ""; }; @@ -142,29 +165,6 @@ path = Runner; sourceTree = ""; }; - AE7B306CA784B875CEF03F51 /* Pods */ = { - isa = PBXGroup; - children = ( - 6CBF1CEF95AC062BCE98454E /* Pods-Runner.debug.xcconfig */, - 54C597CCEB8B0F04B95C2533 /* Pods-Runner.release.xcconfig */, - 06EF5962C2F825CA103C10CF /* Pods-Runner.profile.xcconfig */, - DB439CAF5D7F1FFB0071716F /* Pods-RunnerTests.debug.xcconfig */, - 2FE60B6E9C9F46CC5F06AE6F /* Pods-RunnerTests.release.xcconfig */, - 0EFD952B0BB96360874A0AAD /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; - E3018D9C2AA94B22B9FC4419 /* Frameworks */ = { - isa = PBXGroup; - children = ( - 2995406CCD0C9022D76274A0 /* Pods_Runner.framework */, - E4956423BEC57EF1268EE7AA /* Pods_RunnerTests.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 8C873E1199EBB5E704E40285 /* [CP] Check Pods Manifest.lock */, + 76AB1D2FFDC57A55A9DBED7D /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 7C3C456AFB803877F5B72C93 /* Frameworks */, + 8109C5A3450779C05E02CBCF /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 62CB88A09631F9E820A43B38 /* [CP] Check Pods Manifest.lock */, + D28CC41FA55B08A50999C215 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 973B944D165073F010483328 /* [CP] Embed Pods Frameworks */, + 14BDAB70B98CD7CB5570B2A9 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -270,45 +270,40 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + 14BDAB70B98CD7CB5570B2A9 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputPaths = ( - "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "Thin Binary"; - outputPaths = ( + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; }; - 62CB88A09631F9E820A43B38 /* [CP] Check Pods Manifest.lock */ = { + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); + name = "Thin Binary"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 8C873E1199EBB5E704E40285 /* [CP] Check Pods Manifest.lock */ = { + 76AB1D2FFDC57A55A9DBED7D /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -330,37 +325,42 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 973B944D165073F010483328 /* [CP] Embed Pods Frameworks */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + inputPaths = ( ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + name = "Run Script"; + outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { + D28CC41FA55B08A50999C215 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "Run Script"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = DB439CAF5D7F1FFB0071716F /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 2AC35BD896EF887BA47551D6 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 2FE60B6E9C9F46CC5F06AE6F /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 87C8D450A323C3C2A55B1948 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 0EFD952B0BB96360874A0AAD /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = B87A3878A2A5D3DAF550B405 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/ffigen_codelab/step_05/example/macos/Runner.xcodeproj/project.pbxproj b/ffigen_codelab/step_05/example/macos/Runner.xcodeproj/project.pbxproj index d201c457e7..d211b6fe70 100644 --- a/ffigen_codelab/step_05/example/macos/Runner.xcodeproj/project.pbxproj +++ b/ffigen_codelab/step_05/example/macos/Runner.xcodeproj/project.pbxproj @@ -27,8 +27,8 @@ 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 62FEF9A7C97159FC0DEB105E /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A7FE070184F188AEC164D1D9 /* Pods_Runner.framework */; }; - 638F7046C4C2B5AB997F9DB0 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 669DB278478E3EC6B6822B5C /* Pods_RunnerTests.framework */; }; + 8C05C559182A06B310E391AD /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 74369075D97ADE5FF9855354 /* Pods_RunnerTests.framework */; }; + AD8B16AD3B53698F8AA06401 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8B35DB67E6C3A53EC195826D /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,8 +62,9 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 1F85CB872DC9F8F98CEEABF4 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 23BECF297E5B22F741D8D2BC /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 061B2EAE6A67826D513E6A18 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 27FC957FA33ADAA35F370E36 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 2FF2CF2C599DD601FE5A75AF /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -80,14 +81,13 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 3BFC1E21C9EA9BD0D3A868EF /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 669DB278478E3EC6B6822B5C /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 74369075D97ADE5FF9855354 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; + 834A82023CFA1369E91A10A6 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 8B35DB67E6C3A53EC195826D /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - A75DFC48EA0D8AB8B9C239F0 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - A7FE070184F188AEC164D1D9 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - D3A2ADB71CD2C1687C65F098 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - EFF5374F5F980ADEDBD3CBB3 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + A9D2869CA91444C3AFAA8EB4 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + AC0AAA4DB2D26593AB717608 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 638F7046C4C2B5AB997F9DB0 /* Pods_RunnerTests.framework in Frameworks */, + 8C05C559182A06B310E391AD /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,7 +103,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 62FEF9A7C97159FC0DEB105E /* Pods_Runner.framework in Frameworks */, + AD8B16AD3B53698F8AA06401 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -137,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - F41B48B645D52EE1B172CF3C /* Pods */, + EC6DB45443E42AE9DA4820F9 /* Pods */, ); sourceTree = ""; }; @@ -188,21 +188,21 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - A7FE070184F188AEC164D1D9 /* Pods_Runner.framework */, - 669DB278478E3EC6B6822B5C /* Pods_RunnerTests.framework */, + 8B35DB67E6C3A53EC195826D /* Pods_Runner.framework */, + 74369075D97ADE5FF9855354 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; }; - F41B48B645D52EE1B172CF3C /* Pods */ = { + EC6DB45443E42AE9DA4820F9 /* Pods */ = { isa = PBXGroup; children = ( - 3BFC1E21C9EA9BD0D3A868EF /* Pods-Runner.debug.xcconfig */, - 23BECF297E5B22F741D8D2BC /* Pods-Runner.release.xcconfig */, - EFF5374F5F980ADEDBD3CBB3 /* Pods-Runner.profile.xcconfig */, - 1F85CB872DC9F8F98CEEABF4 /* Pods-RunnerTests.debug.xcconfig */, - A75DFC48EA0D8AB8B9C239F0 /* Pods-RunnerTests.release.xcconfig */, - D3A2ADB71CD2C1687C65F098 /* Pods-RunnerTests.profile.xcconfig */, + 061B2EAE6A67826D513E6A18 /* Pods-Runner.debug.xcconfig */, + 834A82023CFA1369E91A10A6 /* Pods-Runner.release.xcconfig */, + AC0AAA4DB2D26593AB717608 /* Pods-Runner.profile.xcconfig */, + 27FC957FA33ADAA35F370E36 /* Pods-RunnerTests.debug.xcconfig */, + A9D2869CA91444C3AFAA8EB4 /* Pods-RunnerTests.release.xcconfig */, + 2FF2CF2C599DD601FE5A75AF /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - E21CCFA79A4545FC47AA094F /* [CP] Check Pods Manifest.lock */, + 0FEF25B54DD2C958B949F554 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - C65A4CB3403561B71CB66F5B /* [CP] Check Pods Manifest.lock */, + 03241FCCE9F4FECEC6A0D07F /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - EC623A2D0CFCFCE5730CEF1B /* [CP] Embed Pods Frameworks */, + 69CB4DB4A47437F664FBAD81 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,89 +323,89 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 3399D490228B24CF009A79C7 /* ShellScript */ = { + 03241FCCE9F4FECEC6A0D07F /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( ); outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - 33CC111E2044C6BF0003C045 /* ShellScript */ = { + 0FEF25B54DD2C958B949F554 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - Flutter/ephemeral/FlutterInputs.xcfilelist, ); inputPaths = ( - Flutter/ephemeral/tripwire, + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - Flutter/ephemeral/FlutterOutputs.xcfilelist, ); outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - C65A4CB3403561B71CB66F5B /* [CP] Check Pods Manifest.lock */ = { + 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", ); - name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; }; - E21CCFA79A4545FC47AA094F /* [CP] Check Pods Manifest.lock */ = { + 33CC111E2044C6BF0003C045 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + Flutter/ephemeral/FlutterInputs.xcfilelist, ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", + Flutter/ephemeral/tripwire, ); - name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( + Flutter/ephemeral/FlutterOutputs.xcfilelist, ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - EC623A2D0CFCFCE5730CEF1B /* [CP] Embed Pods Frameworks */ = { + 69CB4DB4A47437F664FBAD81 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 1F85CB872DC9F8F98CEEABF4 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 27FC957FA33ADAA35F370E36 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = A75DFC48EA0D8AB8B9C239F0 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = A9D2869CA91444C3AFAA8EB4 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = D3A2ADB71CD2C1687C65F098 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 2FF2CF2C599DD601FE5A75AF /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/ffigen_codelab/step_05/example/macos/Runner/Configs/AppInfo.xcconfig b/ffigen_codelab/step_05/example/macos/Runner/Configs/AppInfo.xcconfig index 3768521ef5..3084161706 100644 --- a/ffigen_codelab/step_05/example/macos/Runner/Configs/AppInfo.xcconfig +++ b/ffigen_codelab/step_05/example/macos/Runner/Configs/AppInfo.xcconfig @@ -11,4 +11,4 @@ PRODUCT_NAME = ffigen_app_example PRODUCT_BUNDLE_IDENTIFIER = com.example.ffigenAppExample // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. diff --git a/ffigen_codelab/step_05/example/pubspec.yaml b/ffigen_codelab/step_05/example/pubspec.yaml index b6a8f5e004..bb9b2fc9ba 100644 --- a/ffigen_codelab/step_05/example/pubspec.yaml +++ b/ffigen_codelab/step_05/example/pubspec.yaml @@ -19,7 +19,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev version: 1.0.0+1 environment: - sdk: ^3.7.0-236.0.dev + sdk: ^3.7.0-0 # Dependencies specify other packages that your package needs in order to work. # To automatically upgrade your package dependencies to the latest versions diff --git a/ffigen_codelab/step_05/example/windows/runner/Runner.rc b/ffigen_codelab/step_05/example/windows/runner/Runner.rc index 86bd3e786a..d53145ba92 100644 --- a/ffigen_codelab/step_05/example/windows/runner/Runner.rc +++ b/ffigen_codelab/step_05/example/windows/runner/Runner.rc @@ -93,7 +93,7 @@ BEGIN VALUE "FileDescription", "ffigen_app_example" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "InternalName", "ffigen_app_example" "\0" - VALUE "LegalCopyright", "Copyright (C) 2024 com.example. All rights reserved." "\0" + VALUE "LegalCopyright", "Copyright (C) 2025 com.example. All rights reserved." "\0" VALUE "OriginalFilename", "ffigen_app_example.exe" "\0" VALUE "ProductName", "ffigen_app_example" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" diff --git a/ffigen_codelab/step_05/pubspec.yaml b/ffigen_codelab/step_05/pubspec.yaml index b68234b677..cb3df64592 100644 --- a/ffigen_codelab/step_05/pubspec.yaml +++ b/ffigen_codelab/step_05/pubspec.yaml @@ -4,7 +4,7 @@ version: 0.0.1 homepage: environment: - sdk: ^3.7.0-236.0.dev + sdk: ^3.7.0-0 flutter: '>=3.3.0' dependencies: @@ -14,7 +14,7 @@ dependencies: plugin_platform_interface: ^2.0.2 dev_dependencies: - ffigen: ^16.0.0 + ffigen: ^16.1.0 flutter_test: sdk: flutter flutter_lints: ^5.0.0 diff --git a/ffigen_codelab/step_06/example/android/app/src/main/kotlin/com/example/ffigen_app_example/MainActivity.kt b/ffigen_codelab/step_06/example/android/app/src/main/kotlin/com/example/ffigen_app_example/MainActivity.kt index 68b7000537..bd55dde018 100644 --- a/ffigen_codelab/step_06/example/android/app/src/main/kotlin/com/example/ffigen_app_example/MainActivity.kt +++ b/ffigen_codelab/step_06/example/android/app/src/main/kotlin/com/example/ffigen_app_example/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.ffigen_app_example import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/ffigen_codelab/step_06/example/ios/Runner.xcodeproj/project.pbxproj b/ffigen_codelab/step_06/example/ios/Runner.xcodeproj/project.pbxproj index 370c8cc036..f07fad9d1b 100644 --- a/ffigen_codelab/step_06/example/ios/Runner.xcodeproj/project.pbxproj +++ b/ffigen_codelab/step_06/example/ios/Runner.xcodeproj/project.pbxproj @@ -7,15 +7,15 @@ objects = { /* Begin PBXBuildFile section */ - 0D6AC8D24333C25E8F9A1134 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E4956423BEC57EF1268EE7AA /* Pods_RunnerTests.framework */; }; 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; + 3124197035D663DFDA7A7486 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 87ECCFBFC445CCC43C5E6456 /* Pods_Runner.framework */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; + 90F96CA2FEBED8A95CE4414B /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1D9C16B72CBF1A1801DEB11C /* Pods_RunnerTests.framework */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - B9492A79D2B4CCDB8D90C67F /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2995406CCD0C9022D76274A0 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,20 +42,20 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 06EF5962C2F825CA103C10CF /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - 0EFD952B0BB96360874A0AAD /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 2995406CCD0C9022D76274A0 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 2FE60B6E9C9F46CC5F06AE6F /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 1D9C16B72CBF1A1801DEB11C /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 2AC35BD896EF887BA47551D6 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 54C597CCEB8B0F04B95C2533 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 6CBF1CEF95AC062BCE98454E /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 43B72FDFDBBD4098B5ABB2B6 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; + 83CB8552D8007FD22823A832 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 87C8D450A323C3C2A55B1948 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 87ECCFBFC445CCC43C5E6456 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -63,16 +63,16 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - DB439CAF5D7F1FFB0071716F /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - E4956423BEC57EF1268EE7AA /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + B87A3878A2A5D3DAF550B405 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + C988240780D863BA706266CB /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 7C3C456AFB803877F5B72C93 /* Frameworks */ = { + 8109C5A3450779C05E02CBCF /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 0D6AC8D24333C25E8F9A1134 /* Pods_RunnerTests.framework in Frameworks */, + 90F96CA2FEBED8A95CE4414B /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -80,7 +80,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - B9492A79D2B4CCDB8D90C67F /* Pods_Runner.framework in Frameworks */, + 3124197035D663DFDA7A7486 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -95,6 +95,29 @@ path = RunnerTests; sourceTree = ""; }; + 774357A91C85EBECBA8DB713 /* Pods */ = { + isa = PBXGroup; + children = ( + C988240780D863BA706266CB /* Pods-Runner.debug.xcconfig */, + 43B72FDFDBBD4098B5ABB2B6 /* Pods-Runner.release.xcconfig */, + 83CB8552D8007FD22823A832 /* Pods-Runner.profile.xcconfig */, + 2AC35BD896EF887BA47551D6 /* Pods-RunnerTests.debug.xcconfig */, + 87C8D450A323C3C2A55B1948 /* Pods-RunnerTests.release.xcconfig */, + B87A3878A2A5D3DAF550B405 /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; + 79B9CD23D4718AA065551918 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 87ECCFBFC445CCC43C5E6456 /* Pods_Runner.framework */, + 1D9C16B72CBF1A1801DEB11C /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( @@ -113,8 +136,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - AE7B306CA784B875CEF03F51 /* Pods */, - E3018D9C2AA94B22B9FC4419 /* Frameworks */, + 774357A91C85EBECBA8DB713 /* Pods */, + 79B9CD23D4718AA065551918 /* Frameworks */, ); sourceTree = ""; }; @@ -142,29 +165,6 @@ path = Runner; sourceTree = ""; }; - AE7B306CA784B875CEF03F51 /* Pods */ = { - isa = PBXGroup; - children = ( - 6CBF1CEF95AC062BCE98454E /* Pods-Runner.debug.xcconfig */, - 54C597CCEB8B0F04B95C2533 /* Pods-Runner.release.xcconfig */, - 06EF5962C2F825CA103C10CF /* Pods-Runner.profile.xcconfig */, - DB439CAF5D7F1FFB0071716F /* Pods-RunnerTests.debug.xcconfig */, - 2FE60B6E9C9F46CC5F06AE6F /* Pods-RunnerTests.release.xcconfig */, - 0EFD952B0BB96360874A0AAD /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; - E3018D9C2AA94B22B9FC4419 /* Frameworks */ = { - isa = PBXGroup; - children = ( - 2995406CCD0C9022D76274A0 /* Pods_Runner.framework */, - E4956423BEC57EF1268EE7AA /* Pods_RunnerTests.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 8C873E1199EBB5E704E40285 /* [CP] Check Pods Manifest.lock */, + 76AB1D2FFDC57A55A9DBED7D /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 7C3C456AFB803877F5B72C93 /* Frameworks */, + 8109C5A3450779C05E02CBCF /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 62CB88A09631F9E820A43B38 /* [CP] Check Pods Manifest.lock */, + D28CC41FA55B08A50999C215 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 973B944D165073F010483328 /* [CP] Embed Pods Frameworks */, + 14BDAB70B98CD7CB5570B2A9 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -270,45 +270,40 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + 14BDAB70B98CD7CB5570B2A9 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputPaths = ( - "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "Thin Binary"; - outputPaths = ( + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; }; - 62CB88A09631F9E820A43B38 /* [CP] Check Pods Manifest.lock */ = { + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); + name = "Thin Binary"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 8C873E1199EBB5E704E40285 /* [CP] Check Pods Manifest.lock */ = { + 76AB1D2FFDC57A55A9DBED7D /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -330,37 +325,42 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 973B944D165073F010483328 /* [CP] Embed Pods Frameworks */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + inputPaths = ( ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + name = "Run Script"; + outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { + D28CC41FA55B08A50999C215 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "Run Script"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = DB439CAF5D7F1FFB0071716F /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 2AC35BD896EF887BA47551D6 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 2FE60B6E9C9F46CC5F06AE6F /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 87C8D450A323C3C2A55B1948 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 0EFD952B0BB96360874A0AAD /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = B87A3878A2A5D3DAF550B405 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/ffigen_codelab/step_06/example/macos/Runner.xcodeproj/project.pbxproj b/ffigen_codelab/step_06/example/macos/Runner.xcodeproj/project.pbxproj index d201c457e7..d211b6fe70 100644 --- a/ffigen_codelab/step_06/example/macos/Runner.xcodeproj/project.pbxproj +++ b/ffigen_codelab/step_06/example/macos/Runner.xcodeproj/project.pbxproj @@ -27,8 +27,8 @@ 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 62FEF9A7C97159FC0DEB105E /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A7FE070184F188AEC164D1D9 /* Pods_Runner.framework */; }; - 638F7046C4C2B5AB997F9DB0 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 669DB278478E3EC6B6822B5C /* Pods_RunnerTests.framework */; }; + 8C05C559182A06B310E391AD /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 74369075D97ADE5FF9855354 /* Pods_RunnerTests.framework */; }; + AD8B16AD3B53698F8AA06401 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8B35DB67E6C3A53EC195826D /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,8 +62,9 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 1F85CB872DC9F8F98CEEABF4 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 23BECF297E5B22F741D8D2BC /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 061B2EAE6A67826D513E6A18 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 27FC957FA33ADAA35F370E36 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 2FF2CF2C599DD601FE5A75AF /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -80,14 +81,13 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 3BFC1E21C9EA9BD0D3A868EF /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 669DB278478E3EC6B6822B5C /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 74369075D97ADE5FF9855354 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; + 834A82023CFA1369E91A10A6 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 8B35DB67E6C3A53EC195826D /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - A75DFC48EA0D8AB8B9C239F0 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - A7FE070184F188AEC164D1D9 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - D3A2ADB71CD2C1687C65F098 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - EFF5374F5F980ADEDBD3CBB3 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + A9D2869CA91444C3AFAA8EB4 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + AC0AAA4DB2D26593AB717608 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 638F7046C4C2B5AB997F9DB0 /* Pods_RunnerTests.framework in Frameworks */, + 8C05C559182A06B310E391AD /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,7 +103,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 62FEF9A7C97159FC0DEB105E /* Pods_Runner.framework in Frameworks */, + AD8B16AD3B53698F8AA06401 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -137,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - F41B48B645D52EE1B172CF3C /* Pods */, + EC6DB45443E42AE9DA4820F9 /* Pods */, ); sourceTree = ""; }; @@ -188,21 +188,21 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - A7FE070184F188AEC164D1D9 /* Pods_Runner.framework */, - 669DB278478E3EC6B6822B5C /* Pods_RunnerTests.framework */, + 8B35DB67E6C3A53EC195826D /* Pods_Runner.framework */, + 74369075D97ADE5FF9855354 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; }; - F41B48B645D52EE1B172CF3C /* Pods */ = { + EC6DB45443E42AE9DA4820F9 /* Pods */ = { isa = PBXGroup; children = ( - 3BFC1E21C9EA9BD0D3A868EF /* Pods-Runner.debug.xcconfig */, - 23BECF297E5B22F741D8D2BC /* Pods-Runner.release.xcconfig */, - EFF5374F5F980ADEDBD3CBB3 /* Pods-Runner.profile.xcconfig */, - 1F85CB872DC9F8F98CEEABF4 /* Pods-RunnerTests.debug.xcconfig */, - A75DFC48EA0D8AB8B9C239F0 /* Pods-RunnerTests.release.xcconfig */, - D3A2ADB71CD2C1687C65F098 /* Pods-RunnerTests.profile.xcconfig */, + 061B2EAE6A67826D513E6A18 /* Pods-Runner.debug.xcconfig */, + 834A82023CFA1369E91A10A6 /* Pods-Runner.release.xcconfig */, + AC0AAA4DB2D26593AB717608 /* Pods-Runner.profile.xcconfig */, + 27FC957FA33ADAA35F370E36 /* Pods-RunnerTests.debug.xcconfig */, + A9D2869CA91444C3AFAA8EB4 /* Pods-RunnerTests.release.xcconfig */, + 2FF2CF2C599DD601FE5A75AF /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - E21CCFA79A4545FC47AA094F /* [CP] Check Pods Manifest.lock */, + 0FEF25B54DD2C958B949F554 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - C65A4CB3403561B71CB66F5B /* [CP] Check Pods Manifest.lock */, + 03241FCCE9F4FECEC6A0D07F /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - EC623A2D0CFCFCE5730CEF1B /* [CP] Embed Pods Frameworks */, + 69CB4DB4A47437F664FBAD81 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,89 +323,89 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 3399D490228B24CF009A79C7 /* ShellScript */ = { + 03241FCCE9F4FECEC6A0D07F /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( ); outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - 33CC111E2044C6BF0003C045 /* ShellScript */ = { + 0FEF25B54DD2C958B949F554 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - Flutter/ephemeral/FlutterInputs.xcfilelist, ); inputPaths = ( - Flutter/ephemeral/tripwire, + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - Flutter/ephemeral/FlutterOutputs.xcfilelist, ); outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - C65A4CB3403561B71CB66F5B /* [CP] Check Pods Manifest.lock */ = { + 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", ); - name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; }; - E21CCFA79A4545FC47AA094F /* [CP] Check Pods Manifest.lock */ = { + 33CC111E2044C6BF0003C045 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + Flutter/ephemeral/FlutterInputs.xcfilelist, ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", + Flutter/ephemeral/tripwire, ); - name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( + Flutter/ephemeral/FlutterOutputs.xcfilelist, ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - EC623A2D0CFCFCE5730CEF1B /* [CP] Embed Pods Frameworks */ = { + 69CB4DB4A47437F664FBAD81 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 1F85CB872DC9F8F98CEEABF4 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 27FC957FA33ADAA35F370E36 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = A75DFC48EA0D8AB8B9C239F0 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = A9D2869CA91444C3AFAA8EB4 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = D3A2ADB71CD2C1687C65F098 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 2FF2CF2C599DD601FE5A75AF /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/ffigen_codelab/step_06/example/macos/Runner/Configs/AppInfo.xcconfig b/ffigen_codelab/step_06/example/macos/Runner/Configs/AppInfo.xcconfig index 3768521ef5..3084161706 100644 --- a/ffigen_codelab/step_06/example/macos/Runner/Configs/AppInfo.xcconfig +++ b/ffigen_codelab/step_06/example/macos/Runner/Configs/AppInfo.xcconfig @@ -11,4 +11,4 @@ PRODUCT_NAME = ffigen_app_example PRODUCT_BUNDLE_IDENTIFIER = com.example.ffigenAppExample // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. diff --git a/ffigen_codelab/step_06/example/pubspec.yaml b/ffigen_codelab/step_06/example/pubspec.yaml index b6a8f5e004..bb9b2fc9ba 100644 --- a/ffigen_codelab/step_06/example/pubspec.yaml +++ b/ffigen_codelab/step_06/example/pubspec.yaml @@ -19,7 +19,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev version: 1.0.0+1 environment: - sdk: ^3.7.0-236.0.dev + sdk: ^3.7.0-0 # Dependencies specify other packages that your package needs in order to work. # To automatically upgrade your package dependencies to the latest versions diff --git a/ffigen_codelab/step_06/example/windows/runner/Runner.rc b/ffigen_codelab/step_06/example/windows/runner/Runner.rc index 86bd3e786a..d53145ba92 100644 --- a/ffigen_codelab/step_06/example/windows/runner/Runner.rc +++ b/ffigen_codelab/step_06/example/windows/runner/Runner.rc @@ -93,7 +93,7 @@ BEGIN VALUE "FileDescription", "ffigen_app_example" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "InternalName", "ffigen_app_example" "\0" - VALUE "LegalCopyright", "Copyright (C) 2024 com.example. All rights reserved." "\0" + VALUE "LegalCopyright", "Copyright (C) 2025 com.example. All rights reserved." "\0" VALUE "OriginalFilename", "ffigen_app_example.exe" "\0" VALUE "ProductName", "ffigen_app_example" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" diff --git a/ffigen_codelab/step_06/pubspec.yaml b/ffigen_codelab/step_06/pubspec.yaml index b68234b677..cb3df64592 100644 --- a/ffigen_codelab/step_06/pubspec.yaml +++ b/ffigen_codelab/step_06/pubspec.yaml @@ -4,7 +4,7 @@ version: 0.0.1 homepage: environment: - sdk: ^3.7.0-236.0.dev + sdk: ^3.7.0-0 flutter: '>=3.3.0' dependencies: @@ -14,7 +14,7 @@ dependencies: plugin_platform_interface: ^2.0.2 dev_dependencies: - ffigen: ^16.0.0 + ffigen: ^16.1.0 flutter_test: sdk: flutter flutter_lints: ^5.0.0 diff --git a/ffigen_codelab/step_07/example/android/app/src/main/kotlin/com/example/ffigen_app_example/MainActivity.kt b/ffigen_codelab/step_07/example/android/app/src/main/kotlin/com/example/ffigen_app_example/MainActivity.kt index 68b7000537..bd55dde018 100644 --- a/ffigen_codelab/step_07/example/android/app/src/main/kotlin/com/example/ffigen_app_example/MainActivity.kt +++ b/ffigen_codelab/step_07/example/android/app/src/main/kotlin/com/example/ffigen_app_example/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.ffigen_app_example import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/ffigen_codelab/step_07/example/ios/Runner.xcodeproj/project.pbxproj b/ffigen_codelab/step_07/example/ios/Runner.xcodeproj/project.pbxproj index 370c8cc036..f07fad9d1b 100644 --- a/ffigen_codelab/step_07/example/ios/Runner.xcodeproj/project.pbxproj +++ b/ffigen_codelab/step_07/example/ios/Runner.xcodeproj/project.pbxproj @@ -7,15 +7,15 @@ objects = { /* Begin PBXBuildFile section */ - 0D6AC8D24333C25E8F9A1134 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E4956423BEC57EF1268EE7AA /* Pods_RunnerTests.framework */; }; 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; + 3124197035D663DFDA7A7486 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 87ECCFBFC445CCC43C5E6456 /* Pods_Runner.framework */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; + 90F96CA2FEBED8A95CE4414B /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1D9C16B72CBF1A1801DEB11C /* Pods_RunnerTests.framework */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - B9492A79D2B4CCDB8D90C67F /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2995406CCD0C9022D76274A0 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,20 +42,20 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 06EF5962C2F825CA103C10CF /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - 0EFD952B0BB96360874A0AAD /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 2995406CCD0C9022D76274A0 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 2FE60B6E9C9F46CC5F06AE6F /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 1D9C16B72CBF1A1801DEB11C /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 2AC35BD896EF887BA47551D6 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 54C597CCEB8B0F04B95C2533 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 6CBF1CEF95AC062BCE98454E /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 43B72FDFDBBD4098B5ABB2B6 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; + 83CB8552D8007FD22823A832 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 87C8D450A323C3C2A55B1948 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 87ECCFBFC445CCC43C5E6456 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -63,16 +63,16 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - DB439CAF5D7F1FFB0071716F /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - E4956423BEC57EF1268EE7AA /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + B87A3878A2A5D3DAF550B405 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + C988240780D863BA706266CB /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 7C3C456AFB803877F5B72C93 /* Frameworks */ = { + 8109C5A3450779C05E02CBCF /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 0D6AC8D24333C25E8F9A1134 /* Pods_RunnerTests.framework in Frameworks */, + 90F96CA2FEBED8A95CE4414B /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -80,7 +80,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - B9492A79D2B4CCDB8D90C67F /* Pods_Runner.framework in Frameworks */, + 3124197035D663DFDA7A7486 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -95,6 +95,29 @@ path = RunnerTests; sourceTree = ""; }; + 774357A91C85EBECBA8DB713 /* Pods */ = { + isa = PBXGroup; + children = ( + C988240780D863BA706266CB /* Pods-Runner.debug.xcconfig */, + 43B72FDFDBBD4098B5ABB2B6 /* Pods-Runner.release.xcconfig */, + 83CB8552D8007FD22823A832 /* Pods-Runner.profile.xcconfig */, + 2AC35BD896EF887BA47551D6 /* Pods-RunnerTests.debug.xcconfig */, + 87C8D450A323C3C2A55B1948 /* Pods-RunnerTests.release.xcconfig */, + B87A3878A2A5D3DAF550B405 /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; + 79B9CD23D4718AA065551918 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 87ECCFBFC445CCC43C5E6456 /* Pods_Runner.framework */, + 1D9C16B72CBF1A1801DEB11C /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( @@ -113,8 +136,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - AE7B306CA784B875CEF03F51 /* Pods */, - E3018D9C2AA94B22B9FC4419 /* Frameworks */, + 774357A91C85EBECBA8DB713 /* Pods */, + 79B9CD23D4718AA065551918 /* Frameworks */, ); sourceTree = ""; }; @@ -142,29 +165,6 @@ path = Runner; sourceTree = ""; }; - AE7B306CA784B875CEF03F51 /* Pods */ = { - isa = PBXGroup; - children = ( - 6CBF1CEF95AC062BCE98454E /* Pods-Runner.debug.xcconfig */, - 54C597CCEB8B0F04B95C2533 /* Pods-Runner.release.xcconfig */, - 06EF5962C2F825CA103C10CF /* Pods-Runner.profile.xcconfig */, - DB439CAF5D7F1FFB0071716F /* Pods-RunnerTests.debug.xcconfig */, - 2FE60B6E9C9F46CC5F06AE6F /* Pods-RunnerTests.release.xcconfig */, - 0EFD952B0BB96360874A0AAD /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; - E3018D9C2AA94B22B9FC4419 /* Frameworks */ = { - isa = PBXGroup; - children = ( - 2995406CCD0C9022D76274A0 /* Pods_Runner.framework */, - E4956423BEC57EF1268EE7AA /* Pods_RunnerTests.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 8C873E1199EBB5E704E40285 /* [CP] Check Pods Manifest.lock */, + 76AB1D2FFDC57A55A9DBED7D /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 7C3C456AFB803877F5B72C93 /* Frameworks */, + 8109C5A3450779C05E02CBCF /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 62CB88A09631F9E820A43B38 /* [CP] Check Pods Manifest.lock */, + D28CC41FA55B08A50999C215 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 973B944D165073F010483328 /* [CP] Embed Pods Frameworks */, + 14BDAB70B98CD7CB5570B2A9 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -270,45 +270,40 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + 14BDAB70B98CD7CB5570B2A9 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputPaths = ( - "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "Thin Binary"; - outputPaths = ( + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; }; - 62CB88A09631F9E820A43B38 /* [CP] Check Pods Manifest.lock */ = { + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); + name = "Thin Binary"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 8C873E1199EBB5E704E40285 /* [CP] Check Pods Manifest.lock */ = { + 76AB1D2FFDC57A55A9DBED7D /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -330,37 +325,42 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 973B944D165073F010483328 /* [CP] Embed Pods Frameworks */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + inputPaths = ( ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + name = "Run Script"; + outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { + D28CC41FA55B08A50999C215 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "Run Script"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = DB439CAF5D7F1FFB0071716F /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 2AC35BD896EF887BA47551D6 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 2FE60B6E9C9F46CC5F06AE6F /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 87C8D450A323C3C2A55B1948 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 0EFD952B0BB96360874A0AAD /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = B87A3878A2A5D3DAF550B405 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/ffigen_codelab/step_07/example/macos/Runner.xcodeproj/project.pbxproj b/ffigen_codelab/step_07/example/macos/Runner.xcodeproj/project.pbxproj index d201c457e7..d211b6fe70 100644 --- a/ffigen_codelab/step_07/example/macos/Runner.xcodeproj/project.pbxproj +++ b/ffigen_codelab/step_07/example/macos/Runner.xcodeproj/project.pbxproj @@ -27,8 +27,8 @@ 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 62FEF9A7C97159FC0DEB105E /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A7FE070184F188AEC164D1D9 /* Pods_Runner.framework */; }; - 638F7046C4C2B5AB997F9DB0 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 669DB278478E3EC6B6822B5C /* Pods_RunnerTests.framework */; }; + 8C05C559182A06B310E391AD /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 74369075D97ADE5FF9855354 /* Pods_RunnerTests.framework */; }; + AD8B16AD3B53698F8AA06401 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8B35DB67E6C3A53EC195826D /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,8 +62,9 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 1F85CB872DC9F8F98CEEABF4 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 23BECF297E5B22F741D8D2BC /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 061B2EAE6A67826D513E6A18 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 27FC957FA33ADAA35F370E36 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 2FF2CF2C599DD601FE5A75AF /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -80,14 +81,13 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 3BFC1E21C9EA9BD0D3A868EF /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 669DB278478E3EC6B6822B5C /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 74369075D97ADE5FF9855354 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; + 834A82023CFA1369E91A10A6 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 8B35DB67E6C3A53EC195826D /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - A75DFC48EA0D8AB8B9C239F0 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - A7FE070184F188AEC164D1D9 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - D3A2ADB71CD2C1687C65F098 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - EFF5374F5F980ADEDBD3CBB3 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + A9D2869CA91444C3AFAA8EB4 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + AC0AAA4DB2D26593AB717608 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 638F7046C4C2B5AB997F9DB0 /* Pods_RunnerTests.framework in Frameworks */, + 8C05C559182A06B310E391AD /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,7 +103,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 62FEF9A7C97159FC0DEB105E /* Pods_Runner.framework in Frameworks */, + AD8B16AD3B53698F8AA06401 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -137,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - F41B48B645D52EE1B172CF3C /* Pods */, + EC6DB45443E42AE9DA4820F9 /* Pods */, ); sourceTree = ""; }; @@ -188,21 +188,21 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - A7FE070184F188AEC164D1D9 /* Pods_Runner.framework */, - 669DB278478E3EC6B6822B5C /* Pods_RunnerTests.framework */, + 8B35DB67E6C3A53EC195826D /* Pods_Runner.framework */, + 74369075D97ADE5FF9855354 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; }; - F41B48B645D52EE1B172CF3C /* Pods */ = { + EC6DB45443E42AE9DA4820F9 /* Pods */ = { isa = PBXGroup; children = ( - 3BFC1E21C9EA9BD0D3A868EF /* Pods-Runner.debug.xcconfig */, - 23BECF297E5B22F741D8D2BC /* Pods-Runner.release.xcconfig */, - EFF5374F5F980ADEDBD3CBB3 /* Pods-Runner.profile.xcconfig */, - 1F85CB872DC9F8F98CEEABF4 /* Pods-RunnerTests.debug.xcconfig */, - A75DFC48EA0D8AB8B9C239F0 /* Pods-RunnerTests.release.xcconfig */, - D3A2ADB71CD2C1687C65F098 /* Pods-RunnerTests.profile.xcconfig */, + 061B2EAE6A67826D513E6A18 /* Pods-Runner.debug.xcconfig */, + 834A82023CFA1369E91A10A6 /* Pods-Runner.release.xcconfig */, + AC0AAA4DB2D26593AB717608 /* Pods-Runner.profile.xcconfig */, + 27FC957FA33ADAA35F370E36 /* Pods-RunnerTests.debug.xcconfig */, + A9D2869CA91444C3AFAA8EB4 /* Pods-RunnerTests.release.xcconfig */, + 2FF2CF2C599DD601FE5A75AF /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - E21CCFA79A4545FC47AA094F /* [CP] Check Pods Manifest.lock */, + 0FEF25B54DD2C958B949F554 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - C65A4CB3403561B71CB66F5B /* [CP] Check Pods Manifest.lock */, + 03241FCCE9F4FECEC6A0D07F /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - EC623A2D0CFCFCE5730CEF1B /* [CP] Embed Pods Frameworks */, + 69CB4DB4A47437F664FBAD81 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,89 +323,89 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 3399D490228B24CF009A79C7 /* ShellScript */ = { + 03241FCCE9F4FECEC6A0D07F /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( ); outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - 33CC111E2044C6BF0003C045 /* ShellScript */ = { + 0FEF25B54DD2C958B949F554 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - Flutter/ephemeral/FlutterInputs.xcfilelist, ); inputPaths = ( - Flutter/ephemeral/tripwire, + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - Flutter/ephemeral/FlutterOutputs.xcfilelist, ); outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - C65A4CB3403561B71CB66F5B /* [CP] Check Pods Manifest.lock */ = { + 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", ); - name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; }; - E21CCFA79A4545FC47AA094F /* [CP] Check Pods Manifest.lock */ = { + 33CC111E2044C6BF0003C045 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + Flutter/ephemeral/FlutterInputs.xcfilelist, ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", + Flutter/ephemeral/tripwire, ); - name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( + Flutter/ephemeral/FlutterOutputs.xcfilelist, ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - EC623A2D0CFCFCE5730CEF1B /* [CP] Embed Pods Frameworks */ = { + 69CB4DB4A47437F664FBAD81 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 1F85CB872DC9F8F98CEEABF4 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 27FC957FA33ADAA35F370E36 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = A75DFC48EA0D8AB8B9C239F0 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = A9D2869CA91444C3AFAA8EB4 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = D3A2ADB71CD2C1687C65F098 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 2FF2CF2C599DD601FE5A75AF /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/ffigen_codelab/step_07/example/macos/Runner/Configs/AppInfo.xcconfig b/ffigen_codelab/step_07/example/macos/Runner/Configs/AppInfo.xcconfig index 3768521ef5..3084161706 100644 --- a/ffigen_codelab/step_07/example/macos/Runner/Configs/AppInfo.xcconfig +++ b/ffigen_codelab/step_07/example/macos/Runner/Configs/AppInfo.xcconfig @@ -11,4 +11,4 @@ PRODUCT_NAME = ffigen_app_example PRODUCT_BUNDLE_IDENTIFIER = com.example.ffigenAppExample // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. diff --git a/ffigen_codelab/step_07/example/pubspec.yaml b/ffigen_codelab/step_07/example/pubspec.yaml index 03dadd1809..586bee839a 100644 --- a/ffigen_codelab/step_07/example/pubspec.yaml +++ b/ffigen_codelab/step_07/example/pubspec.yaml @@ -19,7 +19,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev version: 1.0.0+1 environment: - sdk: ^3.7.0-236.0.dev + sdk: ^3.7.0-0 # Dependencies specify other packages that your package needs in order to work. # To automatically upgrade your package dependencies to the latest versions @@ -56,8 +56,8 @@ dev_dependencies: # package. See that file for information about deactivating specific lint # rules and activating additional ones. flutter_lints: ^5.0.0 - build_runner: ^2.4.13 - freezed: ^2.5.7 + build_runner: ^2.4.14 + freezed: ^2.5.8 # For information on the generic Dart part of this file, see the # following page: https://dart.dev/tools/pub/pubspec diff --git a/ffigen_codelab/step_07/example/windows/runner/Runner.rc b/ffigen_codelab/step_07/example/windows/runner/Runner.rc index 86bd3e786a..d53145ba92 100644 --- a/ffigen_codelab/step_07/example/windows/runner/Runner.rc +++ b/ffigen_codelab/step_07/example/windows/runner/Runner.rc @@ -93,7 +93,7 @@ BEGIN VALUE "FileDescription", "ffigen_app_example" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "InternalName", "ffigen_app_example" "\0" - VALUE "LegalCopyright", "Copyright (C) 2024 com.example. All rights reserved." "\0" + VALUE "LegalCopyright", "Copyright (C) 2025 com.example. All rights reserved." "\0" VALUE "OriginalFilename", "ffigen_app_example.exe" "\0" VALUE "ProductName", "ffigen_app_example" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" diff --git a/ffigen_codelab/step_07/pubspec.yaml b/ffigen_codelab/step_07/pubspec.yaml index c328af514a..c2bfb24564 100644 --- a/ffigen_codelab/step_07/pubspec.yaml +++ b/ffigen_codelab/step_07/pubspec.yaml @@ -4,7 +4,7 @@ version: 0.0.1 homepage: environment: - sdk: ^3.7.0-236.0.dev + sdk: ^3.7.0-0 flutter: '>=3.3.0' dependencies: @@ -15,7 +15,7 @@ dependencies: plugin_platform_interface: ^2.0.2 dev_dependencies: - ffigen: ^16.0.0 + ffigen: ^16.1.0 flutter_test: sdk: flutter flutter_lints: ^5.0.0 From 5d0bdebe6dcb141e17e98c8d35fa7cccaadb83f5 Mon Sep 17 00:00:00 2001 From: Brett Morgan Date: Wed, 22 Jan 2025 13:49:19 +1100 Subject: [PATCH 096/108] Update `firebase-auth-flutterfire-ui` --- .../com/example/complete/MainActivity.kt | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 138 +++++++-------- .../macos/Runner/Configs/AppInfo.xcconfig | 2 +- .../complete/pubspec.yaml | 8 +- .../kotlin/com/example/start/MainActivity.kt | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 160 +++++++++--------- .../macos/Runner/Configs/AppInfo.xcconfig | 2 +- .../start/pubspec.yaml | 8 +- 8 files changed, 161 insertions(+), 161 deletions(-) diff --git a/firebase-auth-flutterfire-ui/complete/android/app/src/main/kotlin/com/example/complete/MainActivity.kt b/firebase-auth-flutterfire-ui/complete/android/app/src/main/kotlin/com/example/complete/MainActivity.kt index 01345b35bb..ff48ab805a 100644 --- a/firebase-auth-flutterfire-ui/complete/android/app/src/main/kotlin/com/example/complete/MainActivity.kt +++ b/firebase-auth-flutterfire-ui/complete/android/app/src/main/kotlin/com/example/complete/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.complete import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/firebase-auth-flutterfire-ui/complete/ios/Runner.xcodeproj/project.pbxproj b/firebase-auth-flutterfire-ui/complete/ios/Runner.xcodeproj/project.pbxproj index 852e16c47d..49098a5b7d 100644 --- a/firebase-auth-flutterfire-ui/complete/ios/Runner.xcodeproj/project.pbxproj +++ b/firebase-auth-flutterfire-ui/complete/ios/Runner.xcodeproj/project.pbxproj @@ -10,12 +10,12 @@ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; + 4E4188860DC694049806EFC4 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8ED783A2E71934665CCE35A5 /* Pods_RunnerTests.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - DD722D630D56049ACA487C07 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 07966A94B0E60114E490ABD4 /* Pods_RunnerTests.framework */; }; - FE8B4C388318108DA2542BB8 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AC11EEC6A2E18B56DC480F37 /* Pods_Runner.framework */; }; + BD6BF0F655725A99934DE7C4 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7B0992EDF66138FE3AE24B53 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,20 +42,21 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 07966A94B0E60114E490ABD4 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 0E679F08EABD161B0E15B940 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; + 279D6B586272B455FE691DF3 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 43A82A0F67229FE80A031D9A /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - 4B99604D131F7C56901C96C6 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 4DDF5D91A5C43A93EDC55596 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 43A4EF535A9053D17229C2E0 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 51A7F8851019EE6528071BE6 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 69BCF5B71CAA6EE60804635F /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 7CD918936B2C9306CCD9C88F /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 7B0992EDF66138FE3AE24B53 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 88F21AAE349A84E2BEE4A01B /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 8ED783A2E71934665CCE35A5 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -63,39 +64,29 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - AC11EEC6A2E18B56DC480F37 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - AEF2E5C3356F32E89F710B8C /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + DD080E3F94CB8A8A4AFB0782 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 97C146EB1CF9000F007C117D /* Frameworks */ = { + 21BA01EFF3FB39274F893C47 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - FE8B4C388318108DA2542BB8 /* Pods_Runner.framework in Frameworks */, + 4E4188860DC694049806EFC4 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - DDE20A45642F29BDD4FAB09B /* Frameworks */ = { + 97C146EB1CF9000F007C117D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - DD722D630D56049ACA487C07 /* Pods_RunnerTests.framework in Frameworks */, + BD6BF0F655725A99934DE7C4 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 2793DEC4FCA96141F77A831A /* Frameworks */ = { - isa = PBXGroup; - children = ( - AC11EEC6A2E18B56DC480F37 /* Pods_Runner.framework */, - 07966A94B0E60114E490ABD4 /* Pods_RunnerTests.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; 331C8082294A63A400263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -104,15 +95,15 @@ path = RunnerTests; sourceTree = ""; }; - 38A2E46C6D93291AD2D58678 /* Pods */ = { + 908F0208D0116418F66171C2 /* Pods */ = { isa = PBXGroup; children = ( - 4B99604D131F7C56901C96C6 /* Pods-Runner.debug.xcconfig */, - AEF2E5C3356F32E89F710B8C /* Pods-Runner.release.xcconfig */, - 43A82A0F67229FE80A031D9A /* Pods-Runner.profile.xcconfig */, - 0E679F08EABD161B0E15B940 /* Pods-RunnerTests.debug.xcconfig */, - 4DDF5D91A5C43A93EDC55596 /* Pods-RunnerTests.release.xcconfig */, - 7CD918936B2C9306CCD9C88F /* Pods-RunnerTests.profile.xcconfig */, + 88F21AAE349A84E2BEE4A01B /* Pods-Runner.debug.xcconfig */, + 69BCF5B71CAA6EE60804635F /* Pods-Runner.release.xcconfig */, + 279D6B586272B455FE691DF3 /* Pods-Runner.profile.xcconfig */, + 51A7F8851019EE6528071BE6 /* Pods-RunnerTests.debug.xcconfig */, + DD080E3F94CB8A8A4AFB0782 /* Pods-RunnerTests.release.xcconfig */, + 43A4EF535A9053D17229C2E0 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -136,8 +127,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - 38A2E46C6D93291AD2D58678 /* Pods */, - 2793DEC4FCA96141F77A831A /* Frameworks */, + 908F0208D0116418F66171C2 /* Pods */, + D142896E6055CBF8527B69C5 /* Frameworks */, ); sourceTree = ""; }; @@ -165,6 +156,15 @@ path = Runner; sourceTree = ""; }; + D142896E6055CBF8527B69C5 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 7B0992EDF66138FE3AE24B53 /* Pods_Runner.framework */, + 8ED783A2E71934665CCE35A5 /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - FE56B3F91F8CE46B2EC9BB3C /* [CP] Check Pods Manifest.lock */, + 895033B41316FE198F335382 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - DDE20A45642F29BDD4FAB09B /* Frameworks */, + 21BA01EFF3FB39274F893C47 /* Frameworks */, ); buildRules = ( ); @@ -191,15 +191,15 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - E6DB6567CC8F8A941338C44A /* [CP] Check Pods Manifest.lock */, + 876D3A01CE431405F8D67BED /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 59683C0D98BA329422038E21 /* [CP] Embed Pods Frameworks */, - 9880E4500D2DC072215C3CA5 /* [CP] Copy Pods Resources */, + 0C29589DA63AEDCB91638060 /* [CP] Embed Pods Frameworks */, + 01AD92408C5168622AAA8FF5 /* [CP] Copy Pods Resources */, ); buildRules = ( ); @@ -271,23 +271,24 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + 01AD92408C5168622AAA8FF5 /* [CP] Copy Pods Resources */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputPaths = ( - "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-input-files.xcfilelist", ); - name = "Thin Binary"; - outputPaths = ( + name = "[CP] Copy Pods Resources"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n"; + showEnvVarsInLog = 0; }; - 59683C0D98BA329422038E21 /* [CP] Embed Pods Frameworks */ = { + 0C29589DA63AEDCB91638060 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -304,39 +305,45 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); - name = "Run Script"; + name = "Thin Binary"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 9880E4500D2DC072215C3CA5 /* [CP] Copy Pods Resources */ = { + 876D3A01CE431405F8D67BED /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Copy Pods Resources"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - E6DB6567CC8F8A941338C44A /* [CP] Check Pods Manifest.lock */ = { + 895033B41316FE198F335382 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -351,34 +358,27 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - FE56B3F91F8CE46B2EC9BB3C /* [CP] Check Pods Manifest.lock */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( ); + name = "Run Script"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; /* End PBXShellScriptBuildPhase section */ @@ -505,7 +505,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 0E679F08EABD161B0E15B940 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 51A7F8851019EE6528071BE6 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -523,7 +523,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 4DDF5D91A5C43A93EDC55596 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = DD080E3F94CB8A8A4AFB0782 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -539,7 +539,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 7CD918936B2C9306CCD9C88F /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 43A4EF535A9053D17229C2E0 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/firebase-auth-flutterfire-ui/complete/macos/Runner/Configs/AppInfo.xcconfig b/firebase-auth-flutterfire-ui/complete/macos/Runner/Configs/AppInfo.xcconfig index 31cf3e2089..888cccbf24 100644 --- a/firebase-auth-flutterfire-ui/complete/macos/Runner/Configs/AppInfo.xcconfig +++ b/firebase-auth-flutterfire-ui/complete/macos/Runner/Configs/AppInfo.xcconfig @@ -11,4 +11,4 @@ PRODUCT_NAME = complete PRODUCT_BUNDLE_IDENTIFIER = com.example.complete // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. diff --git a/firebase-auth-flutterfire-ui/complete/pubspec.yaml b/firebase-auth-flutterfire-ui/complete/pubspec.yaml index f6813113f1..340fef54e5 100644 --- a/firebase-auth-flutterfire-ui/complete/pubspec.yaml +++ b/firebase-auth-flutterfire-ui/complete/pubspec.yaml @@ -9,10 +9,10 @@ environment: dependencies: flutter: sdk: flutter - firebase_auth: ^5.3.4 - firebase_core: ^3.8.1 - firebase_ui_auth: ^1.16.0 - firebase_ui_oauth_google: ^1.4.0 + firebase_auth: ^5.4.1 + firebase_core: ^3.10.1 + firebase_ui_auth: ^1.16.1 + firebase_ui_oauth_google: ^1.4.1 google_sign_in: ^6.2.2 dev_dependencies: diff --git a/firebase-auth-flutterfire-ui/start/android/app/src/main/kotlin/com/example/start/MainActivity.kt b/firebase-auth-flutterfire-ui/start/android/app/src/main/kotlin/com/example/start/MainActivity.kt index c7b1f64b8d..dd811f6f25 100644 --- a/firebase-auth-flutterfire-ui/start/android/app/src/main/kotlin/com/example/start/MainActivity.kt +++ b/firebase-auth-flutterfire-ui/start/android/app/src/main/kotlin/com/example/start/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.start import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/firebase-auth-flutterfire-ui/start/ios/Runner.xcodeproj/project.pbxproj b/firebase-auth-flutterfire-ui/start/ios/Runner.xcodeproj/project.pbxproj index fc9aace2fb..d381201bf2 100644 --- a/firebase-auth-flutterfire-ui/start/ios/Runner.xcodeproj/project.pbxproj +++ b/firebase-auth-flutterfire-ui/start/ios/Runner.xcodeproj/project.pbxproj @@ -8,10 +8,10 @@ /* Begin PBXBuildFile section */ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; - 311B3668FFA24DEF955A3416 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 74F3C624C991CCE1DA599C6C /* Pods_Runner.framework */; }; + 185A66B72A212A15F49E992C /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 81853ADFB941307ABAC1724A /* Pods_RunnerTests.framework */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; - 409D3CD9F94034C951BD29C8 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4DD85B91BCC4B68FED963646 /* Pods_RunnerTests.framework */; }; + 506A824E3502B247C6820830 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BA1CBCAE0E47AB6567D4A522 /* Pods_Runner.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; @@ -46,13 +46,14 @@ 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 3663FF88C7657E90E6E909B3 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 4DD85B91BCC4B68FED963646 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 52F000A7551A59CAC202F752 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; - 74F3C624C991CCE1DA599C6C /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 76F2C1269BFB7CFCC4C2A9CF /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; + 81853ADFB941307ABAC1724A /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 951BAB120996CABAA9B908DA /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -60,27 +61,26 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - C87427E9B75E6D3794BA8921 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - D5427DB42CB7DF228DE1AFBD /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - E36A70270766BA9C55F7857D /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - E37BDCA4955E87960CE34932 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - E77235FCA095EE8518E3166A /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + BA1CBCAE0E47AB6567D4A522 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + BBFB271AA1DDCFD20041DDDC /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + BD5E7FC7ADC5029B8D8357AF /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + D5A92DADC1203C7CEB5C2554 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 97C146EB1CF9000F007C117D /* Frameworks */ = { + 412A6955EEA6DFF13C9CB852 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 311B3668FFA24DEF955A3416 /* Pods_Runner.framework in Frameworks */, + 185A66B72A212A15F49E992C /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - DE3F5587073F6C06A570C64D /* Frameworks */ = { + 97C146EB1CF9000F007C117D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 409D3CD9F94034C951BD29C8 /* Pods_RunnerTests.framework in Frameworks */, + 506A824E3502B247C6820830 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -95,24 +95,15 @@ path = RunnerTests; sourceTree = ""; }; - 47099DC45F121C7B6306C869 /* Frameworks */ = { + 7F66DE568F922346D9A9C8F5 /* Pods */ = { isa = PBXGroup; children = ( - 74F3C624C991CCE1DA599C6C /* Pods_Runner.framework */, - 4DD85B91BCC4B68FED963646 /* Pods_RunnerTests.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; - 5AD83E32E75FC7910C2B6471 /* Pods */ = { - isa = PBXGroup; - children = ( - C87427E9B75E6D3794BA8921 /* Pods-Runner.debug.xcconfig */, - E37BDCA4955E87960CE34932 /* Pods-Runner.release.xcconfig */, - E36A70270766BA9C55F7857D /* Pods-Runner.profile.xcconfig */, - 76F2C1269BFB7CFCC4C2A9CF /* Pods-RunnerTests.debug.xcconfig */, - D5427DB42CB7DF228DE1AFBD /* Pods-RunnerTests.release.xcconfig */, - E77235FCA095EE8518E3166A /* Pods-RunnerTests.profile.xcconfig */, + 3663FF88C7657E90E6E909B3 /* Pods-Runner.debug.xcconfig */, + BBFB271AA1DDCFD20041DDDC /* Pods-Runner.release.xcconfig */, + D5A92DADC1203C7CEB5C2554 /* Pods-Runner.profile.xcconfig */, + 951BAB120996CABAA9B908DA /* Pods-RunnerTests.debug.xcconfig */, + 52F000A7551A59CAC202F752 /* Pods-RunnerTests.release.xcconfig */, + BD5E7FC7ADC5029B8D8357AF /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -136,8 +127,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - 5AD83E32E75FC7910C2B6471 /* Pods */, - 47099DC45F121C7B6306C869 /* Frameworks */, + 7F66DE568F922346D9A9C8F5 /* Pods */, + F6AF004C525FB38E47242A16 /* Frameworks */, ); sourceTree = ""; }; @@ -165,6 +156,15 @@ path = Runner; sourceTree = ""; }; + F6AF004C525FB38E47242A16 /* Frameworks */ = { + isa = PBXGroup; + children = ( + BA1CBCAE0E47AB6567D4A522 /* Pods_Runner.framework */, + 81853ADFB941307ABAC1724A /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - CB76C0379E827466CC9F72BE /* [CP] Check Pods Manifest.lock */, + BD2CADA5713D87860E5260B6 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - DE3F5587073F6C06A570C64D /* Frameworks */, + 412A6955EEA6DFF13C9CB852 /* Frameworks */, ); buildRules = ( ); @@ -191,15 +191,15 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 31CC5900407E5E73017DAE80 /* [CP] Check Pods Manifest.lock */, + 449302DBA03159084B0E81C4 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - BEDC285E91B0728C7E278528 /* [CP] Embed Pods Frameworks */, - FB9825D862CF6255834CF4AD /* [CP] Copy Pods Resources */, + 7546E19A2CCB12890B259459 /* [CP] Embed Pods Frameworks */, + 8ABFD35D033299205F420915 /* [CP] Copy Pods Resources */, ); buildRules = ( ); @@ -271,7 +271,23 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 31CC5900407E5E73017DAE80 /* [CP] Check Pods Manifest.lock */ = { + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", + ); + name = "Thin Binary"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + }; + 449302DBA03159084B0E81C4 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -293,55 +309,56 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + 7546E19A2CCB12890B259459 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputPaths = ( - "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "Thin Binary"; - outputPaths = ( + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { + 8ABFD35D033299205F420915 /* [CP] Copy Pods Resources */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputPaths = ( + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-input-files.xcfilelist", ); - name = "Run Script"; - outputPaths = ( + name = "[CP] Copy Pods Resources"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n"; + showEnvVarsInLog = 0; }; - BEDC285E91B0728C7E278528 /* [CP] Embed Pods Frameworks */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + inputPaths = ( ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + name = "Run Script"; + outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - CB76C0379E827466CC9F72BE /* [CP] Check Pods Manifest.lock */ = { + BD2CADA5713D87860E5260B6 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -363,23 +380,6 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - FB9825D862CF6255834CF4AD /* [CP] Copy Pods Resources */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Copy Pods Resources"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n"; - showEnvVarsInLog = 0; - }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -505,7 +505,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 76F2C1269BFB7CFCC4C2A9CF /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 951BAB120996CABAA9B908DA /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -523,7 +523,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = D5427DB42CB7DF228DE1AFBD /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 52F000A7551A59CAC202F752 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -539,7 +539,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = E77235FCA095EE8518E3166A /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = BD5E7FC7ADC5029B8D8357AF /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/firebase-auth-flutterfire-ui/start/macos/Runner/Configs/AppInfo.xcconfig b/firebase-auth-flutterfire-ui/start/macos/Runner/Configs/AppInfo.xcconfig index 50b839ba2d..6b442a8783 100644 --- a/firebase-auth-flutterfire-ui/start/macos/Runner/Configs/AppInfo.xcconfig +++ b/firebase-auth-flutterfire-ui/start/macos/Runner/Configs/AppInfo.xcconfig @@ -11,4 +11,4 @@ PRODUCT_NAME = start PRODUCT_BUNDLE_IDENTIFIER = com.example.start // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. diff --git a/firebase-auth-flutterfire-ui/start/pubspec.yaml b/firebase-auth-flutterfire-ui/start/pubspec.yaml index 9ab8d431dc..56736e9e55 100644 --- a/firebase-auth-flutterfire-ui/start/pubspec.yaml +++ b/firebase-auth-flutterfire-ui/start/pubspec.yaml @@ -9,10 +9,10 @@ environment: dependencies: flutter: sdk: flutter - firebase_auth: ^5.3.4 - firebase_core: ^3.8.1 - firebase_ui_auth: ^1.16.0 - firebase_ui_oauth_google: ^1.4.0 + firebase_auth: ^5.4.1 + firebase_core: ^3.10.1 + firebase_ui_auth: ^1.16.1 + firebase_ui_oauth_google: ^1.4.1 google_sign_in: ^6.2.2 dev_dependencies: From 0664cb8fd1f1e7dcdd15aaaccbf672619488fe7c Mon Sep 17 00:00:00 2001 From: Brett Morgan Date: Wed, 22 Jan 2025 13:52:02 +1100 Subject: [PATCH 097/108] Update `firebase-emulator-suite` --- .../xcshareddata/xcschemes/Runner.xcscheme | 1 + .../xcshareddata/xcschemes/Runner.xcscheme | 1 + .../complete/macos/Runner/Configs/AppInfo.xcconfig | 2 +- firebase-emulator-suite/complete/pubspec.yaml | 8 ++++---- .../xcshareddata/xcschemes/Runner.xcscheme | 1 + .../xcshareddata/xcschemes/Runner.xcscheme | 1 + .../start/macos/Runner/Configs/AppInfo.xcconfig | 2 +- firebase-emulator-suite/start/pubspec.yaml | 2 +- 8 files changed, 11 insertions(+), 7 deletions(-) diff --git a/firebase-emulator-suite/complete/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/firebase-emulator-suite/complete/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme index 8e3ca5dfe1..15cada4838 100644 --- a/firebase-emulator-suite/complete/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme +++ b/firebase-emulator-suite/complete/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -59,6 +59,7 @@ ignoresPersistentStateOnLaunch = "NO" debugDocumentVersioning = "YES" debugServiceExtension = "internal" + enableGPUValidationMode = "1" allowLocationSimulation = "YES"> diff --git a/firebase-emulator-suite/complete/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/firebase-emulator-suite/complete/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme index 549cf605dd..0387a7a877 100644 --- a/firebase-emulator-suite/complete/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme +++ b/firebase-emulator-suite/complete/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -59,6 +59,7 @@ ignoresPersistentStateOnLaunch = "NO" debugDocumentVersioning = "YES" debugServiceExtension = "internal" + enableGPUValidationMode = "1" allowLocationSimulation = "YES"> diff --git a/firebase-emulator-suite/complete/macos/Runner/Configs/AppInfo.xcconfig b/firebase-emulator-suite/complete/macos/Runner/Configs/AppInfo.xcconfig index 31cf3e2089..888cccbf24 100644 --- a/firebase-emulator-suite/complete/macos/Runner/Configs/AppInfo.xcconfig +++ b/firebase-emulator-suite/complete/macos/Runner/Configs/AppInfo.xcconfig @@ -11,4 +11,4 @@ PRODUCT_NAME = complete PRODUCT_BUNDLE_IDENTIFIER = com.example.complete // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. diff --git a/firebase-emulator-suite/complete/pubspec.yaml b/firebase-emulator-suite/complete/pubspec.yaml index 13ce7f958c..4b59199254 100644 --- a/firebase-emulator-suite/complete/pubspec.yaml +++ b/firebase-emulator-suite/complete/pubspec.yaml @@ -34,10 +34,10 @@ dependencies: # The following adds the Cupertino Icons font to your application. # Use with the CupertinoIcons class for iOS style icons. cupertino_icons: ^1.0.8 - go_router: ^14.6.0 - firebase_core: ^3.8.0 - firebase_auth: ^5.3.3 - cloud_firestore: ^5.5.0 + go_router: ^14.6.3 + firebase_core: ^3.10.1 + firebase_auth: ^5.4.1 + cloud_firestore: ^5.6.2 dev_dependencies: flutter_test: diff --git a/firebase-emulator-suite/start/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/firebase-emulator-suite/start/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme index 8e3ca5dfe1..15cada4838 100644 --- a/firebase-emulator-suite/start/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme +++ b/firebase-emulator-suite/start/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -59,6 +59,7 @@ ignoresPersistentStateOnLaunch = "NO" debugDocumentVersioning = "YES" debugServiceExtension = "internal" + enableGPUValidationMode = "1" allowLocationSimulation = "YES"> diff --git a/firebase-emulator-suite/start/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/firebase-emulator-suite/start/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme index 549cf605dd..0387a7a877 100644 --- a/firebase-emulator-suite/start/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme +++ b/firebase-emulator-suite/start/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -59,6 +59,7 @@ ignoresPersistentStateOnLaunch = "NO" debugDocumentVersioning = "YES" debugServiceExtension = "internal" + enableGPUValidationMode = "1" allowLocationSimulation = "YES"> diff --git a/firebase-emulator-suite/start/macos/Runner/Configs/AppInfo.xcconfig b/firebase-emulator-suite/start/macos/Runner/Configs/AppInfo.xcconfig index 31cf3e2089..888cccbf24 100644 --- a/firebase-emulator-suite/start/macos/Runner/Configs/AppInfo.xcconfig +++ b/firebase-emulator-suite/start/macos/Runner/Configs/AppInfo.xcconfig @@ -11,4 +11,4 @@ PRODUCT_NAME = complete PRODUCT_BUNDLE_IDENTIFIER = com.example.complete // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. diff --git a/firebase-emulator-suite/start/pubspec.yaml b/firebase-emulator-suite/start/pubspec.yaml index 6846decd70..83cdfa4d85 100644 --- a/firebase-emulator-suite/start/pubspec.yaml +++ b/firebase-emulator-suite/start/pubspec.yaml @@ -34,7 +34,7 @@ dependencies: # The following adds the Cupertino Icons font to your application. # Use with the CupertinoIcons class for iOS style icons. cupertino_icons: ^1.0.8 - go_router: ^14.6.0 + go_router: ^14.6.3 dev_dependencies: flutter_test: From 420c849a3050ee1e5f4c40f463da8c9f2cb59dd7 Mon Sep 17 00:00:00 2001 From: Brett Morgan Date: Wed, 22 Jan 2025 14:13:19 +1100 Subject: [PATCH 098/108] Update `firebase-get-to-know-flutter` --- .../com/example/gtk_flutter/MainActivity.kt | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 122 +++++++++--------- .../macos/Runner.xcodeproj/project.pbxproj | 90 ++++++------- .../macos/Runner/Configs/AppInfo.xcconfig | 2 +- .../step_02/pubspec.yaml | 2 +- .../com/example/gtk_flutter/MainActivity.kt | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 122 +++++++++--------- .../macos/Runner.xcodeproj/project.pbxproj | 90 ++++++------- .../macos/Runner/Configs/AppInfo.xcconfig | 2 +- .../step_04/pubspec.yaml | 10 +- .../com/example/gtk_flutter/MainActivity.kt | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 122 +++++++++--------- .../macos/Runner.xcodeproj/project.pbxproj | 90 ++++++------- .../macos/Runner/Configs/AppInfo.xcconfig | 2 +- .../step_05/pubspec.yaml | 10 +- .../com/example/gtk_flutter/MainActivity.kt | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 122 +++++++++--------- .../macos/Runner.xcodeproj/project.pbxproj | 90 ++++++------- .../macos/Runner/Configs/AppInfo.xcconfig | 2 +- .../step_06/pubspec.yaml | 10 +- .../com/example/gtk_flutter/MainActivity.kt | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 122 +++++++++--------- .../macos/Runner.xcodeproj/project.pbxproj | 90 ++++++------- .../macos/Runner/Configs/AppInfo.xcconfig | 2 +- .../step_07/pubspec.yaml | 10 +- .../com/example/gtk_flutter/MainActivity.kt | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 122 +++++++++--------- .../macos/Runner.xcodeproj/project.pbxproj | 90 ++++++------- .../macos/Runner/Configs/AppInfo.xcconfig | 2 +- .../step_09/pubspec.yaml | 10 +- 30 files changed, 674 insertions(+), 674 deletions(-) diff --git a/firebase-get-to-know-flutter/step_02/android/app/src/main/kotlin/com/example/gtk_flutter/MainActivity.kt b/firebase-get-to-know-flutter/step_02/android/app/src/main/kotlin/com/example/gtk_flutter/MainActivity.kt index 2ea667c39a..039c1b0e7d 100644 --- a/firebase-get-to-know-flutter/step_02/android/app/src/main/kotlin/com/example/gtk_flutter/MainActivity.kt +++ b/firebase-get-to-know-flutter/step_02/android/app/src/main/kotlin/com/example/gtk_flutter/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.gtk_flutter import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/firebase-get-to-know-flutter/step_02/ios/Runner.xcodeproj/project.pbxproj b/firebase-get-to-know-flutter/step_02/ios/Runner.xcodeproj/project.pbxproj index 6a14d1d6d3..7c62549b41 100644 --- a/firebase-get-to-know-flutter/step_02/ios/Runner.xcodeproj/project.pbxproj +++ b/firebase-get-to-know-flutter/step_02/ios/Runner.xcodeproj/project.pbxproj @@ -7,11 +7,11 @@ objects = { /* Begin PBXBuildFile section */ + 0ED26007290EA3D5E75B377F /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5240183F61DA8A8FC0254D84 /* Pods_Runner.framework */; }; 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; - 26A67BC071A1E44FAF5FB007 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CE3B1A6238A94043D6C542C5 /* Pods_RunnerTests.framework */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; - 59561718A3F71B80D4802B6A /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 34F652C948921A136545596B /* Pods_Runner.framework */; }; + 49D198BDC63CEC147F098DA6 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A8A0142C22F2FA089DB25793 /* Pods_RunnerTests.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; @@ -44,16 +44,15 @@ /* Begin PBXFileReference section */ 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; + 2C7CC5A4494A9AF84AD43BD0 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 34F652C948921A136545596B /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 4F344103F99F2954040A4794 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 5240183F61DA8A8FC0254D84 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; - 7606D037451DDA9C9CB99439 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 817FB0757B913E92D33B5224 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 81AD38F3254AF766B44374BE /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -61,10 +60,11 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - A851E4FADD54B968E7912E42 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - B0FB8B70D41CE3C074C46E36 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - CE3B1A6238A94043D6C542C5 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - FBCCF58708334AB623BC3CE1 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 9D637643A08CE55DA600B334 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + A8A0142C22F2FA089DB25793 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + CF6468CDCC02CE7CDEDAC3C3 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + D277ABD06457C792F0484DB1 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + F1E5D4B06500D04D58393D47 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -72,36 +72,50 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 59561718A3F71B80D4802B6A /* Pods_Runner.framework in Frameworks */, + 0ED26007290EA3D5E75B377F /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - B16F1C1597E0A3E42200C36A /* Frameworks */ = { + F529CF8DFC7E84EEDD41715C /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 26A67BC071A1E44FAF5FB007 /* Pods_RunnerTests.framework in Frameworks */, + 49D198BDC63CEC147F098DA6 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 1E4280D7315AC1A06A73C90B /* Frameworks */ = { + 331C8082294A63A400263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( - 34F652C948921A136545596B /* Pods_Runner.framework */, - CE3B1A6238A94043D6C542C5 /* Pods_RunnerTests.framework */, + 331C807B294A618700263BE5 /* RunnerTests.swift */, + ); + path = RunnerTests; + sourceTree = ""; + }; + 44194491505288F3B1EB6F9C /* Frameworks */ = { + isa = PBXGroup; + children = ( + 5240183F61DA8A8FC0254D84 /* Pods_Runner.framework */, + A8A0142C22F2FA089DB25793 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; }; - 331C8082294A63A400263BE5 /* RunnerTests */ = { + 800B1FD0EB75F8F780F5365F /* Pods */ = { isa = PBXGroup; children = ( - 331C807B294A618700263BE5 /* RunnerTests.swift */, + F1E5D4B06500D04D58393D47 /* Pods-Runner.debug.xcconfig */, + CF6468CDCC02CE7CDEDAC3C3 /* Pods-Runner.release.xcconfig */, + 81AD38F3254AF766B44374BE /* Pods-Runner.profile.xcconfig */, + 2C7CC5A4494A9AF84AD43BD0 /* Pods-RunnerTests.debug.xcconfig */, + 9D637643A08CE55DA600B334 /* Pods-RunnerTests.release.xcconfig */, + D277ABD06457C792F0484DB1 /* Pods-RunnerTests.profile.xcconfig */, ); - path = RunnerTests; + name = Pods; + path = Pods; sourceTree = ""; }; 9740EEB11CF90186004384FC /* Flutter */ = { @@ -122,8 +136,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - F66D06AEF2EA6DAAE42EB1D1 /* Pods */, - 1E4280D7315AC1A06A73C90B /* Frameworks */, + 800B1FD0EB75F8F780F5365F /* Pods */, + 44194491505288F3B1EB6F9C /* Frameworks */, ); sourceTree = ""; }; @@ -151,20 +165,6 @@ path = Runner; sourceTree = ""; }; - F66D06AEF2EA6DAAE42EB1D1 /* Pods */ = { - isa = PBXGroup; - children = ( - 4F344103F99F2954040A4794 /* Pods-Runner.debug.xcconfig */, - B0FB8B70D41CE3C074C46E36 /* Pods-Runner.release.xcconfig */, - 7606D037451DDA9C9CB99439 /* Pods-Runner.profile.xcconfig */, - 817FB0757B913E92D33B5224 /* Pods-RunnerTests.debug.xcconfig */, - A851E4FADD54B968E7912E42 /* Pods-RunnerTests.release.xcconfig */, - FBCCF58708334AB623BC3CE1 /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - A5B9C6729A9A2E5D418B5848 /* [CP] Check Pods Manifest.lock */, + 347D9C45009646F156A56561 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - B16F1C1597E0A3E42200C36A /* Frameworks */, + F529CF8DFC7E84EEDD41715C /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 4A321C127D16D10825A21514 /* [CP] Check Pods Manifest.lock */, + ABA98A39958F206929736459 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 6461ABAEF6C0070A9775DCA9 /* [CP] Embed Pods Frameworks */, + 2B8D463816038C813EF074D6 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -270,23 +270,24 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + 2B8D463816038C813EF074D6 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputPaths = ( - "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "Thin Binary"; - outputPaths = ( + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; }; - 4A321C127D16D10825A21514 /* [CP] Check Pods Manifest.lock */ = { + 347D9C45009646F156A56561 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -301,29 +302,28 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 6461ABAEF6C0070A9775DCA9 /* [CP] Embed Pods Frameworks */ = { + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + inputPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + name = "Thin Binary"; + outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; @@ -340,7 +340,7 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - A5B9C6729A9A2E5D418B5848 /* [CP] Check Pods Manifest.lock */ = { + ABA98A39958F206929736459 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -355,7 +355,7 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -488,7 +488,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 817FB0757B913E92D33B5224 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 2C7CC5A4494A9AF84AD43BD0 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -507,7 +507,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = A851E4FADD54B968E7912E42 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 9D637643A08CE55DA600B334 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -524,7 +524,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = FBCCF58708334AB623BC3CE1 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = D277ABD06457C792F0484DB1 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/firebase-get-to-know-flutter/step_02/macos/Runner.xcodeproj/project.pbxproj b/firebase-get-to-know-flutter/step_02/macos/Runner.xcodeproj/project.pbxproj index 122ac1deee..6ceb116530 100644 --- a/firebase-get-to-know-flutter/step_02/macos/Runner.xcodeproj/project.pbxproj +++ b/firebase-get-to-know-flutter/step_02/macos/Runner.xcodeproj/project.pbxproj @@ -27,8 +27,8 @@ 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - A86FDD942983673205DBA194 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 681DCCA03F83465D5BB029E9 /* Pods_Runner.framework */; }; - BE6117CC493FA14760A2CF92 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 499787B02D50EBB94B2C6D38 /* Pods_RunnerTests.framework */; }; + 3A8C47B9A40B0618B4620FFF /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A02E91E7562C3155FF4831A4 /* Pods_RunnerTests.framework */; }; + BED58A00E6A21CA04E91C453 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5941DEE552519A9D50710A35 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,6 +62,8 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 00457B7AB0A601D5147FAF94 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 153ABA282F5996FD7C0C7C28 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -78,16 +80,14 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 499787B02D50EBB94B2C6D38 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 62C667D6919AF0154C6FF8D4 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - 681DCCA03F83465D5BB029E9 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 76ABAC08E7B63C52F6B3C748 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 507C3A5354F5863F7E0A0353 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 5941DEE552519A9D50710A35 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 6F132D3D45CE9032602D36CD /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 8669E2B7785C32ADA14E0679 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - A54E58738E4F4397AF324E8A /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - CB2E6F2B0D20F48B826E9E2D /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - EB9231503C0DE961F8F5162E /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + A02E91E7562C3155FF4831A4 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + B81DCAA8C0A3895BFBD50B18 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + DB85D0DA40A458628B87A242 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - BE6117CC493FA14760A2CF92 /* Pods_RunnerTests.framework in Frameworks */, + 3A8C47B9A40B0618B4620FFF /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,7 +103,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - A86FDD942983673205DBA194 /* Pods_Runner.framework in Frameworks */, + BED58A00E6A21CA04E91C453 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -137,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 6DD8F5E4D6FB4754E2AFDEBE /* Pods */, + 80995BE2DEF49C0B056E70AF /* Pods */, ); sourceTree = ""; }; @@ -185,15 +185,15 @@ path = Runner; sourceTree = ""; }; - 6DD8F5E4D6FB4754E2AFDEBE /* Pods */ = { + 80995BE2DEF49C0B056E70AF /* Pods */ = { isa = PBXGroup; children = ( - A54E58738E4F4397AF324E8A /* Pods-Runner.debug.xcconfig */, - 8669E2B7785C32ADA14E0679 /* Pods-Runner.release.xcconfig */, - EB9231503C0DE961F8F5162E /* Pods-Runner.profile.xcconfig */, - CB2E6F2B0D20F48B826E9E2D /* Pods-RunnerTests.debug.xcconfig */, - 76ABAC08E7B63C52F6B3C748 /* Pods-RunnerTests.release.xcconfig */, - 62C667D6919AF0154C6FF8D4 /* Pods-RunnerTests.profile.xcconfig */, + 6F132D3D45CE9032602D36CD /* Pods-Runner.debug.xcconfig */, + 507C3A5354F5863F7E0A0353 /* Pods-Runner.release.xcconfig */, + B81DCAA8C0A3895BFBD50B18 /* Pods-Runner.profile.xcconfig */, + 00457B7AB0A601D5147FAF94 /* Pods-RunnerTests.debug.xcconfig */, + DB85D0DA40A458628B87A242 /* Pods-RunnerTests.release.xcconfig */, + 153ABA282F5996FD7C0C7C28 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -202,8 +202,8 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - 681DCCA03F83465D5BB029E9 /* Pods_Runner.framework */, - 499787B02D50EBB94B2C6D38 /* Pods_RunnerTests.framework */, + 5941DEE552519A9D50710A35 /* Pods_Runner.framework */, + A02E91E7562C3155FF4831A4 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 516C6C601F2B87EBB2590060 /* [CP] Check Pods Manifest.lock */, + 9400122DE76AACC4164C9A41 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - CC1AAF52FCCCF07E1B709EAB /* [CP] Check Pods Manifest.lock */, + 7753B0FC76A1B397D4C8D76E /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 3F19957924D48F9FE3A1561D /* [CP] Embed Pods Frameworks */, + 81B4BA93D9F2EA518E0F2233 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -361,46 +361,46 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 3F19957924D48F9FE3A1561D /* [CP] Embed Pods Frameworks */ = { + 7753B0FC76A1B397D4C8D76E /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 516C6C601F2B87EBB2590060 /* [CP] Check Pods Manifest.lock */ = { + 81B4BA93D9F2EA518E0F2233 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - CC1AAF52FCCCF07E1B709EAB /* [CP] Check Pods Manifest.lock */ = { + 9400122DE76AACC4164C9A41 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -415,7 +415,7 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = CB2E6F2B0D20F48B826E9E2D /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 00457B7AB0A601D5147FAF94 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -489,7 +489,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 76ABAC08E7B63C52F6B3C748 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = DB85D0DA40A458628B87A242 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -505,7 +505,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 62C667D6919AF0154C6FF8D4 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 153ABA282F5996FD7C0C7C28 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/firebase-get-to-know-flutter/step_02/macos/Runner/Configs/AppInfo.xcconfig b/firebase-get-to-know-flutter/step_02/macos/Runner/Configs/AppInfo.xcconfig index bdd13a85f8..4bc3e44a18 100644 --- a/firebase-get-to-know-flutter/step_02/macos/Runner/Configs/AppInfo.xcconfig +++ b/firebase-get-to-know-flutter/step_02/macos/Runner/Configs/AppInfo.xcconfig @@ -11,4 +11,4 @@ PRODUCT_NAME = gtk_flutter PRODUCT_BUNDLE_IDENTIFIER = com.example.gtkFlutter // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. diff --git a/firebase-get-to-know-flutter/step_02/pubspec.yaml b/firebase-get-to-know-flutter/step_02/pubspec.yaml index f672ff69d8..3d3a38f1bc 100644 --- a/firebase-get-to-know-flutter/step_02/pubspec.yaml +++ b/firebase-get-to-know-flutter/step_02/pubspec.yaml @@ -36,7 +36,7 @@ dependencies: # Use with the CupertinoIcons class for iOS style icons. cupertino_icons: ^1.0.8 google_fonts: ^6.2.1 - go_router: ^14.6.2 + go_router: ^14.6.3 dev_dependencies: flutter_test: diff --git a/firebase-get-to-know-flutter/step_04/android/app/src/main/kotlin/com/example/gtk_flutter/MainActivity.kt b/firebase-get-to-know-flutter/step_04/android/app/src/main/kotlin/com/example/gtk_flutter/MainActivity.kt index 2ea667c39a..039c1b0e7d 100644 --- a/firebase-get-to-know-flutter/step_04/android/app/src/main/kotlin/com/example/gtk_flutter/MainActivity.kt +++ b/firebase-get-to-know-flutter/step_04/android/app/src/main/kotlin/com/example/gtk_flutter/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.gtk_flutter import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/firebase-get-to-know-flutter/step_04/ios/Runner.xcodeproj/project.pbxproj b/firebase-get-to-know-flutter/step_04/ios/Runner.xcodeproj/project.pbxproj index 6a14d1d6d3..7c62549b41 100644 --- a/firebase-get-to-know-flutter/step_04/ios/Runner.xcodeproj/project.pbxproj +++ b/firebase-get-to-know-flutter/step_04/ios/Runner.xcodeproj/project.pbxproj @@ -7,11 +7,11 @@ objects = { /* Begin PBXBuildFile section */ + 0ED26007290EA3D5E75B377F /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5240183F61DA8A8FC0254D84 /* Pods_Runner.framework */; }; 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; - 26A67BC071A1E44FAF5FB007 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CE3B1A6238A94043D6C542C5 /* Pods_RunnerTests.framework */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; - 59561718A3F71B80D4802B6A /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 34F652C948921A136545596B /* Pods_Runner.framework */; }; + 49D198BDC63CEC147F098DA6 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A8A0142C22F2FA089DB25793 /* Pods_RunnerTests.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; @@ -44,16 +44,15 @@ /* Begin PBXFileReference section */ 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; + 2C7CC5A4494A9AF84AD43BD0 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 34F652C948921A136545596B /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 4F344103F99F2954040A4794 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 5240183F61DA8A8FC0254D84 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; - 7606D037451DDA9C9CB99439 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 817FB0757B913E92D33B5224 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 81AD38F3254AF766B44374BE /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -61,10 +60,11 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - A851E4FADD54B968E7912E42 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - B0FB8B70D41CE3C074C46E36 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - CE3B1A6238A94043D6C542C5 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - FBCCF58708334AB623BC3CE1 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 9D637643A08CE55DA600B334 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + A8A0142C22F2FA089DB25793 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + CF6468CDCC02CE7CDEDAC3C3 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + D277ABD06457C792F0484DB1 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + F1E5D4B06500D04D58393D47 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -72,36 +72,50 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 59561718A3F71B80D4802B6A /* Pods_Runner.framework in Frameworks */, + 0ED26007290EA3D5E75B377F /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - B16F1C1597E0A3E42200C36A /* Frameworks */ = { + F529CF8DFC7E84EEDD41715C /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 26A67BC071A1E44FAF5FB007 /* Pods_RunnerTests.framework in Frameworks */, + 49D198BDC63CEC147F098DA6 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 1E4280D7315AC1A06A73C90B /* Frameworks */ = { + 331C8082294A63A400263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( - 34F652C948921A136545596B /* Pods_Runner.framework */, - CE3B1A6238A94043D6C542C5 /* Pods_RunnerTests.framework */, + 331C807B294A618700263BE5 /* RunnerTests.swift */, + ); + path = RunnerTests; + sourceTree = ""; + }; + 44194491505288F3B1EB6F9C /* Frameworks */ = { + isa = PBXGroup; + children = ( + 5240183F61DA8A8FC0254D84 /* Pods_Runner.framework */, + A8A0142C22F2FA089DB25793 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; }; - 331C8082294A63A400263BE5 /* RunnerTests */ = { + 800B1FD0EB75F8F780F5365F /* Pods */ = { isa = PBXGroup; children = ( - 331C807B294A618700263BE5 /* RunnerTests.swift */, + F1E5D4B06500D04D58393D47 /* Pods-Runner.debug.xcconfig */, + CF6468CDCC02CE7CDEDAC3C3 /* Pods-Runner.release.xcconfig */, + 81AD38F3254AF766B44374BE /* Pods-Runner.profile.xcconfig */, + 2C7CC5A4494A9AF84AD43BD0 /* Pods-RunnerTests.debug.xcconfig */, + 9D637643A08CE55DA600B334 /* Pods-RunnerTests.release.xcconfig */, + D277ABD06457C792F0484DB1 /* Pods-RunnerTests.profile.xcconfig */, ); - path = RunnerTests; + name = Pods; + path = Pods; sourceTree = ""; }; 9740EEB11CF90186004384FC /* Flutter */ = { @@ -122,8 +136,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - F66D06AEF2EA6DAAE42EB1D1 /* Pods */, - 1E4280D7315AC1A06A73C90B /* Frameworks */, + 800B1FD0EB75F8F780F5365F /* Pods */, + 44194491505288F3B1EB6F9C /* Frameworks */, ); sourceTree = ""; }; @@ -151,20 +165,6 @@ path = Runner; sourceTree = ""; }; - F66D06AEF2EA6DAAE42EB1D1 /* Pods */ = { - isa = PBXGroup; - children = ( - 4F344103F99F2954040A4794 /* Pods-Runner.debug.xcconfig */, - B0FB8B70D41CE3C074C46E36 /* Pods-Runner.release.xcconfig */, - 7606D037451DDA9C9CB99439 /* Pods-Runner.profile.xcconfig */, - 817FB0757B913E92D33B5224 /* Pods-RunnerTests.debug.xcconfig */, - A851E4FADD54B968E7912E42 /* Pods-RunnerTests.release.xcconfig */, - FBCCF58708334AB623BC3CE1 /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - A5B9C6729A9A2E5D418B5848 /* [CP] Check Pods Manifest.lock */, + 347D9C45009646F156A56561 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - B16F1C1597E0A3E42200C36A /* Frameworks */, + F529CF8DFC7E84EEDD41715C /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 4A321C127D16D10825A21514 /* [CP] Check Pods Manifest.lock */, + ABA98A39958F206929736459 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 6461ABAEF6C0070A9775DCA9 /* [CP] Embed Pods Frameworks */, + 2B8D463816038C813EF074D6 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -270,23 +270,24 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + 2B8D463816038C813EF074D6 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputPaths = ( - "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "Thin Binary"; - outputPaths = ( + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; }; - 4A321C127D16D10825A21514 /* [CP] Check Pods Manifest.lock */ = { + 347D9C45009646F156A56561 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -301,29 +302,28 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 6461ABAEF6C0070A9775DCA9 /* [CP] Embed Pods Frameworks */ = { + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + inputPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + name = "Thin Binary"; + outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; @@ -340,7 +340,7 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - A5B9C6729A9A2E5D418B5848 /* [CP] Check Pods Manifest.lock */ = { + ABA98A39958F206929736459 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -355,7 +355,7 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -488,7 +488,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 817FB0757B913E92D33B5224 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 2C7CC5A4494A9AF84AD43BD0 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -507,7 +507,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = A851E4FADD54B968E7912E42 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 9D637643A08CE55DA600B334 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -524,7 +524,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = FBCCF58708334AB623BC3CE1 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = D277ABD06457C792F0484DB1 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/firebase-get-to-know-flutter/step_04/macos/Runner.xcodeproj/project.pbxproj b/firebase-get-to-know-flutter/step_04/macos/Runner.xcodeproj/project.pbxproj index 122ac1deee..6ceb116530 100644 --- a/firebase-get-to-know-flutter/step_04/macos/Runner.xcodeproj/project.pbxproj +++ b/firebase-get-to-know-flutter/step_04/macos/Runner.xcodeproj/project.pbxproj @@ -27,8 +27,8 @@ 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - A86FDD942983673205DBA194 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 681DCCA03F83465D5BB029E9 /* Pods_Runner.framework */; }; - BE6117CC493FA14760A2CF92 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 499787B02D50EBB94B2C6D38 /* Pods_RunnerTests.framework */; }; + 3A8C47B9A40B0618B4620FFF /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A02E91E7562C3155FF4831A4 /* Pods_RunnerTests.framework */; }; + BED58A00E6A21CA04E91C453 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5941DEE552519A9D50710A35 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,6 +62,8 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 00457B7AB0A601D5147FAF94 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 153ABA282F5996FD7C0C7C28 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -78,16 +80,14 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 499787B02D50EBB94B2C6D38 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 62C667D6919AF0154C6FF8D4 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - 681DCCA03F83465D5BB029E9 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 76ABAC08E7B63C52F6B3C748 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 507C3A5354F5863F7E0A0353 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 5941DEE552519A9D50710A35 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 6F132D3D45CE9032602D36CD /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 8669E2B7785C32ADA14E0679 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - A54E58738E4F4397AF324E8A /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - CB2E6F2B0D20F48B826E9E2D /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - EB9231503C0DE961F8F5162E /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + A02E91E7562C3155FF4831A4 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + B81DCAA8C0A3895BFBD50B18 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + DB85D0DA40A458628B87A242 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - BE6117CC493FA14760A2CF92 /* Pods_RunnerTests.framework in Frameworks */, + 3A8C47B9A40B0618B4620FFF /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,7 +103,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - A86FDD942983673205DBA194 /* Pods_Runner.framework in Frameworks */, + BED58A00E6A21CA04E91C453 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -137,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 6DD8F5E4D6FB4754E2AFDEBE /* Pods */, + 80995BE2DEF49C0B056E70AF /* Pods */, ); sourceTree = ""; }; @@ -185,15 +185,15 @@ path = Runner; sourceTree = ""; }; - 6DD8F5E4D6FB4754E2AFDEBE /* Pods */ = { + 80995BE2DEF49C0B056E70AF /* Pods */ = { isa = PBXGroup; children = ( - A54E58738E4F4397AF324E8A /* Pods-Runner.debug.xcconfig */, - 8669E2B7785C32ADA14E0679 /* Pods-Runner.release.xcconfig */, - EB9231503C0DE961F8F5162E /* Pods-Runner.profile.xcconfig */, - CB2E6F2B0D20F48B826E9E2D /* Pods-RunnerTests.debug.xcconfig */, - 76ABAC08E7B63C52F6B3C748 /* Pods-RunnerTests.release.xcconfig */, - 62C667D6919AF0154C6FF8D4 /* Pods-RunnerTests.profile.xcconfig */, + 6F132D3D45CE9032602D36CD /* Pods-Runner.debug.xcconfig */, + 507C3A5354F5863F7E0A0353 /* Pods-Runner.release.xcconfig */, + B81DCAA8C0A3895BFBD50B18 /* Pods-Runner.profile.xcconfig */, + 00457B7AB0A601D5147FAF94 /* Pods-RunnerTests.debug.xcconfig */, + DB85D0DA40A458628B87A242 /* Pods-RunnerTests.release.xcconfig */, + 153ABA282F5996FD7C0C7C28 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -202,8 +202,8 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - 681DCCA03F83465D5BB029E9 /* Pods_Runner.framework */, - 499787B02D50EBB94B2C6D38 /* Pods_RunnerTests.framework */, + 5941DEE552519A9D50710A35 /* Pods_Runner.framework */, + A02E91E7562C3155FF4831A4 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 516C6C601F2B87EBB2590060 /* [CP] Check Pods Manifest.lock */, + 9400122DE76AACC4164C9A41 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - CC1AAF52FCCCF07E1B709EAB /* [CP] Check Pods Manifest.lock */, + 7753B0FC76A1B397D4C8D76E /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 3F19957924D48F9FE3A1561D /* [CP] Embed Pods Frameworks */, + 81B4BA93D9F2EA518E0F2233 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -361,46 +361,46 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 3F19957924D48F9FE3A1561D /* [CP] Embed Pods Frameworks */ = { + 7753B0FC76A1B397D4C8D76E /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 516C6C601F2B87EBB2590060 /* [CP] Check Pods Manifest.lock */ = { + 81B4BA93D9F2EA518E0F2233 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - CC1AAF52FCCCF07E1B709EAB /* [CP] Check Pods Manifest.lock */ = { + 9400122DE76AACC4164C9A41 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -415,7 +415,7 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = CB2E6F2B0D20F48B826E9E2D /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 00457B7AB0A601D5147FAF94 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -489,7 +489,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 76ABAC08E7B63C52F6B3C748 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = DB85D0DA40A458628B87A242 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -505,7 +505,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 62C667D6919AF0154C6FF8D4 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 153ABA282F5996FD7C0C7C28 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/firebase-get-to-know-flutter/step_04/macos/Runner/Configs/AppInfo.xcconfig b/firebase-get-to-know-flutter/step_04/macos/Runner/Configs/AppInfo.xcconfig index bdd13a85f8..4bc3e44a18 100644 --- a/firebase-get-to-know-flutter/step_04/macos/Runner/Configs/AppInfo.xcconfig +++ b/firebase-get-to-know-flutter/step_04/macos/Runner/Configs/AppInfo.xcconfig @@ -11,4 +11,4 @@ PRODUCT_NAME = gtk_flutter PRODUCT_BUNDLE_IDENTIFIER = com.example.gtkFlutter // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. diff --git a/firebase-get-to-know-flutter/step_04/pubspec.yaml b/firebase-get-to-know-flutter/step_04/pubspec.yaml index 349e1f3d22..c7248bbdc7 100644 --- a/firebase-get-to-know-flutter/step_04/pubspec.yaml +++ b/firebase-get-to-know-flutter/step_04/pubspec.yaml @@ -36,12 +36,12 @@ dependencies: # Use with the CupertinoIcons class for iOS style icons. cupertino_icons: ^1.0.8 google_fonts: ^6.2.1 - go_router: ^14.6.2 - cloud_firestore: ^5.5.1 - firebase_auth: ^5.3.4 - firebase_core: ^3.8.1 + go_router: ^14.6.3 + cloud_firestore: ^5.6.2 + firebase_auth: ^5.4.1 + firebase_core: ^3.10.1 provider: ^6.1.2 - firebase_ui_auth: ^1.16.0 + firebase_ui_auth: ^1.16.1 dev_dependencies: flutter_test: diff --git a/firebase-get-to-know-flutter/step_05/android/app/src/main/kotlin/com/example/gtk_flutter/MainActivity.kt b/firebase-get-to-know-flutter/step_05/android/app/src/main/kotlin/com/example/gtk_flutter/MainActivity.kt index 2ea667c39a..039c1b0e7d 100644 --- a/firebase-get-to-know-flutter/step_05/android/app/src/main/kotlin/com/example/gtk_flutter/MainActivity.kt +++ b/firebase-get-to-know-flutter/step_05/android/app/src/main/kotlin/com/example/gtk_flutter/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.gtk_flutter import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/firebase-get-to-know-flutter/step_05/ios/Runner.xcodeproj/project.pbxproj b/firebase-get-to-know-flutter/step_05/ios/Runner.xcodeproj/project.pbxproj index 6a14d1d6d3..7c62549b41 100644 --- a/firebase-get-to-know-flutter/step_05/ios/Runner.xcodeproj/project.pbxproj +++ b/firebase-get-to-know-flutter/step_05/ios/Runner.xcodeproj/project.pbxproj @@ -7,11 +7,11 @@ objects = { /* Begin PBXBuildFile section */ + 0ED26007290EA3D5E75B377F /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5240183F61DA8A8FC0254D84 /* Pods_Runner.framework */; }; 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; - 26A67BC071A1E44FAF5FB007 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CE3B1A6238A94043D6C542C5 /* Pods_RunnerTests.framework */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; - 59561718A3F71B80D4802B6A /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 34F652C948921A136545596B /* Pods_Runner.framework */; }; + 49D198BDC63CEC147F098DA6 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A8A0142C22F2FA089DB25793 /* Pods_RunnerTests.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; @@ -44,16 +44,15 @@ /* Begin PBXFileReference section */ 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; + 2C7CC5A4494A9AF84AD43BD0 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 34F652C948921A136545596B /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 4F344103F99F2954040A4794 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 5240183F61DA8A8FC0254D84 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; - 7606D037451DDA9C9CB99439 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 817FB0757B913E92D33B5224 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 81AD38F3254AF766B44374BE /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -61,10 +60,11 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - A851E4FADD54B968E7912E42 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - B0FB8B70D41CE3C074C46E36 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - CE3B1A6238A94043D6C542C5 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - FBCCF58708334AB623BC3CE1 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 9D637643A08CE55DA600B334 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + A8A0142C22F2FA089DB25793 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + CF6468CDCC02CE7CDEDAC3C3 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + D277ABD06457C792F0484DB1 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + F1E5D4B06500D04D58393D47 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -72,36 +72,50 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 59561718A3F71B80D4802B6A /* Pods_Runner.framework in Frameworks */, + 0ED26007290EA3D5E75B377F /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - B16F1C1597E0A3E42200C36A /* Frameworks */ = { + F529CF8DFC7E84EEDD41715C /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 26A67BC071A1E44FAF5FB007 /* Pods_RunnerTests.framework in Frameworks */, + 49D198BDC63CEC147F098DA6 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 1E4280D7315AC1A06A73C90B /* Frameworks */ = { + 331C8082294A63A400263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( - 34F652C948921A136545596B /* Pods_Runner.framework */, - CE3B1A6238A94043D6C542C5 /* Pods_RunnerTests.framework */, + 331C807B294A618700263BE5 /* RunnerTests.swift */, + ); + path = RunnerTests; + sourceTree = ""; + }; + 44194491505288F3B1EB6F9C /* Frameworks */ = { + isa = PBXGroup; + children = ( + 5240183F61DA8A8FC0254D84 /* Pods_Runner.framework */, + A8A0142C22F2FA089DB25793 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; }; - 331C8082294A63A400263BE5 /* RunnerTests */ = { + 800B1FD0EB75F8F780F5365F /* Pods */ = { isa = PBXGroup; children = ( - 331C807B294A618700263BE5 /* RunnerTests.swift */, + F1E5D4B06500D04D58393D47 /* Pods-Runner.debug.xcconfig */, + CF6468CDCC02CE7CDEDAC3C3 /* Pods-Runner.release.xcconfig */, + 81AD38F3254AF766B44374BE /* Pods-Runner.profile.xcconfig */, + 2C7CC5A4494A9AF84AD43BD0 /* Pods-RunnerTests.debug.xcconfig */, + 9D637643A08CE55DA600B334 /* Pods-RunnerTests.release.xcconfig */, + D277ABD06457C792F0484DB1 /* Pods-RunnerTests.profile.xcconfig */, ); - path = RunnerTests; + name = Pods; + path = Pods; sourceTree = ""; }; 9740EEB11CF90186004384FC /* Flutter */ = { @@ -122,8 +136,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - F66D06AEF2EA6DAAE42EB1D1 /* Pods */, - 1E4280D7315AC1A06A73C90B /* Frameworks */, + 800B1FD0EB75F8F780F5365F /* Pods */, + 44194491505288F3B1EB6F9C /* Frameworks */, ); sourceTree = ""; }; @@ -151,20 +165,6 @@ path = Runner; sourceTree = ""; }; - F66D06AEF2EA6DAAE42EB1D1 /* Pods */ = { - isa = PBXGroup; - children = ( - 4F344103F99F2954040A4794 /* Pods-Runner.debug.xcconfig */, - B0FB8B70D41CE3C074C46E36 /* Pods-Runner.release.xcconfig */, - 7606D037451DDA9C9CB99439 /* Pods-Runner.profile.xcconfig */, - 817FB0757B913E92D33B5224 /* Pods-RunnerTests.debug.xcconfig */, - A851E4FADD54B968E7912E42 /* Pods-RunnerTests.release.xcconfig */, - FBCCF58708334AB623BC3CE1 /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - A5B9C6729A9A2E5D418B5848 /* [CP] Check Pods Manifest.lock */, + 347D9C45009646F156A56561 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - B16F1C1597E0A3E42200C36A /* Frameworks */, + F529CF8DFC7E84EEDD41715C /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 4A321C127D16D10825A21514 /* [CP] Check Pods Manifest.lock */, + ABA98A39958F206929736459 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 6461ABAEF6C0070A9775DCA9 /* [CP] Embed Pods Frameworks */, + 2B8D463816038C813EF074D6 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -270,23 +270,24 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + 2B8D463816038C813EF074D6 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputPaths = ( - "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "Thin Binary"; - outputPaths = ( + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; }; - 4A321C127D16D10825A21514 /* [CP] Check Pods Manifest.lock */ = { + 347D9C45009646F156A56561 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -301,29 +302,28 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 6461ABAEF6C0070A9775DCA9 /* [CP] Embed Pods Frameworks */ = { + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + inputPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + name = "Thin Binary"; + outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; @@ -340,7 +340,7 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - A5B9C6729A9A2E5D418B5848 /* [CP] Check Pods Manifest.lock */ = { + ABA98A39958F206929736459 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -355,7 +355,7 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -488,7 +488,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 817FB0757B913E92D33B5224 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 2C7CC5A4494A9AF84AD43BD0 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -507,7 +507,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = A851E4FADD54B968E7912E42 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 9D637643A08CE55DA600B334 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -524,7 +524,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = FBCCF58708334AB623BC3CE1 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = D277ABD06457C792F0484DB1 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/firebase-get-to-know-flutter/step_05/macos/Runner.xcodeproj/project.pbxproj b/firebase-get-to-know-flutter/step_05/macos/Runner.xcodeproj/project.pbxproj index 122ac1deee..6ceb116530 100644 --- a/firebase-get-to-know-flutter/step_05/macos/Runner.xcodeproj/project.pbxproj +++ b/firebase-get-to-know-flutter/step_05/macos/Runner.xcodeproj/project.pbxproj @@ -27,8 +27,8 @@ 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - A86FDD942983673205DBA194 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 681DCCA03F83465D5BB029E9 /* Pods_Runner.framework */; }; - BE6117CC493FA14760A2CF92 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 499787B02D50EBB94B2C6D38 /* Pods_RunnerTests.framework */; }; + 3A8C47B9A40B0618B4620FFF /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A02E91E7562C3155FF4831A4 /* Pods_RunnerTests.framework */; }; + BED58A00E6A21CA04E91C453 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5941DEE552519A9D50710A35 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,6 +62,8 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 00457B7AB0A601D5147FAF94 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 153ABA282F5996FD7C0C7C28 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -78,16 +80,14 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 499787B02D50EBB94B2C6D38 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 62C667D6919AF0154C6FF8D4 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - 681DCCA03F83465D5BB029E9 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 76ABAC08E7B63C52F6B3C748 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 507C3A5354F5863F7E0A0353 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 5941DEE552519A9D50710A35 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 6F132D3D45CE9032602D36CD /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 8669E2B7785C32ADA14E0679 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - A54E58738E4F4397AF324E8A /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - CB2E6F2B0D20F48B826E9E2D /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - EB9231503C0DE961F8F5162E /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + A02E91E7562C3155FF4831A4 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + B81DCAA8C0A3895BFBD50B18 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + DB85D0DA40A458628B87A242 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - BE6117CC493FA14760A2CF92 /* Pods_RunnerTests.framework in Frameworks */, + 3A8C47B9A40B0618B4620FFF /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,7 +103,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - A86FDD942983673205DBA194 /* Pods_Runner.framework in Frameworks */, + BED58A00E6A21CA04E91C453 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -137,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 6DD8F5E4D6FB4754E2AFDEBE /* Pods */, + 80995BE2DEF49C0B056E70AF /* Pods */, ); sourceTree = ""; }; @@ -185,15 +185,15 @@ path = Runner; sourceTree = ""; }; - 6DD8F5E4D6FB4754E2AFDEBE /* Pods */ = { + 80995BE2DEF49C0B056E70AF /* Pods */ = { isa = PBXGroup; children = ( - A54E58738E4F4397AF324E8A /* Pods-Runner.debug.xcconfig */, - 8669E2B7785C32ADA14E0679 /* Pods-Runner.release.xcconfig */, - EB9231503C0DE961F8F5162E /* Pods-Runner.profile.xcconfig */, - CB2E6F2B0D20F48B826E9E2D /* Pods-RunnerTests.debug.xcconfig */, - 76ABAC08E7B63C52F6B3C748 /* Pods-RunnerTests.release.xcconfig */, - 62C667D6919AF0154C6FF8D4 /* Pods-RunnerTests.profile.xcconfig */, + 6F132D3D45CE9032602D36CD /* Pods-Runner.debug.xcconfig */, + 507C3A5354F5863F7E0A0353 /* Pods-Runner.release.xcconfig */, + B81DCAA8C0A3895BFBD50B18 /* Pods-Runner.profile.xcconfig */, + 00457B7AB0A601D5147FAF94 /* Pods-RunnerTests.debug.xcconfig */, + DB85D0DA40A458628B87A242 /* Pods-RunnerTests.release.xcconfig */, + 153ABA282F5996FD7C0C7C28 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -202,8 +202,8 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - 681DCCA03F83465D5BB029E9 /* Pods_Runner.framework */, - 499787B02D50EBB94B2C6D38 /* Pods_RunnerTests.framework */, + 5941DEE552519A9D50710A35 /* Pods_Runner.framework */, + A02E91E7562C3155FF4831A4 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 516C6C601F2B87EBB2590060 /* [CP] Check Pods Manifest.lock */, + 9400122DE76AACC4164C9A41 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - CC1AAF52FCCCF07E1B709EAB /* [CP] Check Pods Manifest.lock */, + 7753B0FC76A1B397D4C8D76E /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 3F19957924D48F9FE3A1561D /* [CP] Embed Pods Frameworks */, + 81B4BA93D9F2EA518E0F2233 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -361,46 +361,46 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 3F19957924D48F9FE3A1561D /* [CP] Embed Pods Frameworks */ = { + 7753B0FC76A1B397D4C8D76E /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 516C6C601F2B87EBB2590060 /* [CP] Check Pods Manifest.lock */ = { + 81B4BA93D9F2EA518E0F2233 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - CC1AAF52FCCCF07E1B709EAB /* [CP] Check Pods Manifest.lock */ = { + 9400122DE76AACC4164C9A41 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -415,7 +415,7 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = CB2E6F2B0D20F48B826E9E2D /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 00457B7AB0A601D5147FAF94 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -489,7 +489,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 76ABAC08E7B63C52F6B3C748 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = DB85D0DA40A458628B87A242 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -505,7 +505,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 62C667D6919AF0154C6FF8D4 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 153ABA282F5996FD7C0C7C28 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/firebase-get-to-know-flutter/step_05/macos/Runner/Configs/AppInfo.xcconfig b/firebase-get-to-know-flutter/step_05/macos/Runner/Configs/AppInfo.xcconfig index bdd13a85f8..4bc3e44a18 100644 --- a/firebase-get-to-know-flutter/step_05/macos/Runner/Configs/AppInfo.xcconfig +++ b/firebase-get-to-know-flutter/step_05/macos/Runner/Configs/AppInfo.xcconfig @@ -11,4 +11,4 @@ PRODUCT_NAME = gtk_flutter PRODUCT_BUNDLE_IDENTIFIER = com.example.gtkFlutter // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. diff --git a/firebase-get-to-know-flutter/step_05/pubspec.yaml b/firebase-get-to-know-flutter/step_05/pubspec.yaml index 349e1f3d22..c7248bbdc7 100644 --- a/firebase-get-to-know-flutter/step_05/pubspec.yaml +++ b/firebase-get-to-know-flutter/step_05/pubspec.yaml @@ -36,12 +36,12 @@ dependencies: # Use with the CupertinoIcons class for iOS style icons. cupertino_icons: ^1.0.8 google_fonts: ^6.2.1 - go_router: ^14.6.2 - cloud_firestore: ^5.5.1 - firebase_auth: ^5.3.4 - firebase_core: ^3.8.1 + go_router: ^14.6.3 + cloud_firestore: ^5.6.2 + firebase_auth: ^5.4.1 + firebase_core: ^3.10.1 provider: ^6.1.2 - firebase_ui_auth: ^1.16.0 + firebase_ui_auth: ^1.16.1 dev_dependencies: flutter_test: diff --git a/firebase-get-to-know-flutter/step_06/android/app/src/main/kotlin/com/example/gtk_flutter/MainActivity.kt b/firebase-get-to-know-flutter/step_06/android/app/src/main/kotlin/com/example/gtk_flutter/MainActivity.kt index 2ea667c39a..039c1b0e7d 100644 --- a/firebase-get-to-know-flutter/step_06/android/app/src/main/kotlin/com/example/gtk_flutter/MainActivity.kt +++ b/firebase-get-to-know-flutter/step_06/android/app/src/main/kotlin/com/example/gtk_flutter/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.gtk_flutter import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/firebase-get-to-know-flutter/step_06/ios/Runner.xcodeproj/project.pbxproj b/firebase-get-to-know-flutter/step_06/ios/Runner.xcodeproj/project.pbxproj index 6a14d1d6d3..7c62549b41 100644 --- a/firebase-get-to-know-flutter/step_06/ios/Runner.xcodeproj/project.pbxproj +++ b/firebase-get-to-know-flutter/step_06/ios/Runner.xcodeproj/project.pbxproj @@ -7,11 +7,11 @@ objects = { /* Begin PBXBuildFile section */ + 0ED26007290EA3D5E75B377F /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5240183F61DA8A8FC0254D84 /* Pods_Runner.framework */; }; 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; - 26A67BC071A1E44FAF5FB007 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CE3B1A6238A94043D6C542C5 /* Pods_RunnerTests.framework */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; - 59561718A3F71B80D4802B6A /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 34F652C948921A136545596B /* Pods_Runner.framework */; }; + 49D198BDC63CEC147F098DA6 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A8A0142C22F2FA089DB25793 /* Pods_RunnerTests.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; @@ -44,16 +44,15 @@ /* Begin PBXFileReference section */ 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; + 2C7CC5A4494A9AF84AD43BD0 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 34F652C948921A136545596B /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 4F344103F99F2954040A4794 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 5240183F61DA8A8FC0254D84 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; - 7606D037451DDA9C9CB99439 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 817FB0757B913E92D33B5224 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 81AD38F3254AF766B44374BE /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -61,10 +60,11 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - A851E4FADD54B968E7912E42 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - B0FB8B70D41CE3C074C46E36 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - CE3B1A6238A94043D6C542C5 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - FBCCF58708334AB623BC3CE1 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 9D637643A08CE55DA600B334 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + A8A0142C22F2FA089DB25793 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + CF6468CDCC02CE7CDEDAC3C3 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + D277ABD06457C792F0484DB1 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + F1E5D4B06500D04D58393D47 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -72,36 +72,50 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 59561718A3F71B80D4802B6A /* Pods_Runner.framework in Frameworks */, + 0ED26007290EA3D5E75B377F /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - B16F1C1597E0A3E42200C36A /* Frameworks */ = { + F529CF8DFC7E84EEDD41715C /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 26A67BC071A1E44FAF5FB007 /* Pods_RunnerTests.framework in Frameworks */, + 49D198BDC63CEC147F098DA6 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 1E4280D7315AC1A06A73C90B /* Frameworks */ = { + 331C8082294A63A400263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( - 34F652C948921A136545596B /* Pods_Runner.framework */, - CE3B1A6238A94043D6C542C5 /* Pods_RunnerTests.framework */, + 331C807B294A618700263BE5 /* RunnerTests.swift */, + ); + path = RunnerTests; + sourceTree = ""; + }; + 44194491505288F3B1EB6F9C /* Frameworks */ = { + isa = PBXGroup; + children = ( + 5240183F61DA8A8FC0254D84 /* Pods_Runner.framework */, + A8A0142C22F2FA089DB25793 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; }; - 331C8082294A63A400263BE5 /* RunnerTests */ = { + 800B1FD0EB75F8F780F5365F /* Pods */ = { isa = PBXGroup; children = ( - 331C807B294A618700263BE5 /* RunnerTests.swift */, + F1E5D4B06500D04D58393D47 /* Pods-Runner.debug.xcconfig */, + CF6468CDCC02CE7CDEDAC3C3 /* Pods-Runner.release.xcconfig */, + 81AD38F3254AF766B44374BE /* Pods-Runner.profile.xcconfig */, + 2C7CC5A4494A9AF84AD43BD0 /* Pods-RunnerTests.debug.xcconfig */, + 9D637643A08CE55DA600B334 /* Pods-RunnerTests.release.xcconfig */, + D277ABD06457C792F0484DB1 /* Pods-RunnerTests.profile.xcconfig */, ); - path = RunnerTests; + name = Pods; + path = Pods; sourceTree = ""; }; 9740EEB11CF90186004384FC /* Flutter */ = { @@ -122,8 +136,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - F66D06AEF2EA6DAAE42EB1D1 /* Pods */, - 1E4280D7315AC1A06A73C90B /* Frameworks */, + 800B1FD0EB75F8F780F5365F /* Pods */, + 44194491505288F3B1EB6F9C /* Frameworks */, ); sourceTree = ""; }; @@ -151,20 +165,6 @@ path = Runner; sourceTree = ""; }; - F66D06AEF2EA6DAAE42EB1D1 /* Pods */ = { - isa = PBXGroup; - children = ( - 4F344103F99F2954040A4794 /* Pods-Runner.debug.xcconfig */, - B0FB8B70D41CE3C074C46E36 /* Pods-Runner.release.xcconfig */, - 7606D037451DDA9C9CB99439 /* Pods-Runner.profile.xcconfig */, - 817FB0757B913E92D33B5224 /* Pods-RunnerTests.debug.xcconfig */, - A851E4FADD54B968E7912E42 /* Pods-RunnerTests.release.xcconfig */, - FBCCF58708334AB623BC3CE1 /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - A5B9C6729A9A2E5D418B5848 /* [CP] Check Pods Manifest.lock */, + 347D9C45009646F156A56561 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - B16F1C1597E0A3E42200C36A /* Frameworks */, + F529CF8DFC7E84EEDD41715C /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 4A321C127D16D10825A21514 /* [CP] Check Pods Manifest.lock */, + ABA98A39958F206929736459 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 6461ABAEF6C0070A9775DCA9 /* [CP] Embed Pods Frameworks */, + 2B8D463816038C813EF074D6 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -270,23 +270,24 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + 2B8D463816038C813EF074D6 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputPaths = ( - "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "Thin Binary"; - outputPaths = ( + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; }; - 4A321C127D16D10825A21514 /* [CP] Check Pods Manifest.lock */ = { + 347D9C45009646F156A56561 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -301,29 +302,28 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 6461ABAEF6C0070A9775DCA9 /* [CP] Embed Pods Frameworks */ = { + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + inputPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + name = "Thin Binary"; + outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; @@ -340,7 +340,7 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - A5B9C6729A9A2E5D418B5848 /* [CP] Check Pods Manifest.lock */ = { + ABA98A39958F206929736459 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -355,7 +355,7 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -488,7 +488,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 817FB0757B913E92D33B5224 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 2C7CC5A4494A9AF84AD43BD0 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -507,7 +507,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = A851E4FADD54B968E7912E42 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 9D637643A08CE55DA600B334 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -524,7 +524,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = FBCCF58708334AB623BC3CE1 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = D277ABD06457C792F0484DB1 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/firebase-get-to-know-flutter/step_06/macos/Runner.xcodeproj/project.pbxproj b/firebase-get-to-know-flutter/step_06/macos/Runner.xcodeproj/project.pbxproj index 122ac1deee..6ceb116530 100644 --- a/firebase-get-to-know-flutter/step_06/macos/Runner.xcodeproj/project.pbxproj +++ b/firebase-get-to-know-flutter/step_06/macos/Runner.xcodeproj/project.pbxproj @@ -27,8 +27,8 @@ 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - A86FDD942983673205DBA194 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 681DCCA03F83465D5BB029E9 /* Pods_Runner.framework */; }; - BE6117CC493FA14760A2CF92 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 499787B02D50EBB94B2C6D38 /* Pods_RunnerTests.framework */; }; + 3A8C47B9A40B0618B4620FFF /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A02E91E7562C3155FF4831A4 /* Pods_RunnerTests.framework */; }; + BED58A00E6A21CA04E91C453 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5941DEE552519A9D50710A35 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,6 +62,8 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 00457B7AB0A601D5147FAF94 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 153ABA282F5996FD7C0C7C28 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -78,16 +80,14 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 499787B02D50EBB94B2C6D38 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 62C667D6919AF0154C6FF8D4 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - 681DCCA03F83465D5BB029E9 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 76ABAC08E7B63C52F6B3C748 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 507C3A5354F5863F7E0A0353 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 5941DEE552519A9D50710A35 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 6F132D3D45CE9032602D36CD /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 8669E2B7785C32ADA14E0679 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - A54E58738E4F4397AF324E8A /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - CB2E6F2B0D20F48B826E9E2D /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - EB9231503C0DE961F8F5162E /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + A02E91E7562C3155FF4831A4 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + B81DCAA8C0A3895BFBD50B18 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + DB85D0DA40A458628B87A242 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - BE6117CC493FA14760A2CF92 /* Pods_RunnerTests.framework in Frameworks */, + 3A8C47B9A40B0618B4620FFF /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,7 +103,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - A86FDD942983673205DBA194 /* Pods_Runner.framework in Frameworks */, + BED58A00E6A21CA04E91C453 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -137,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 6DD8F5E4D6FB4754E2AFDEBE /* Pods */, + 80995BE2DEF49C0B056E70AF /* Pods */, ); sourceTree = ""; }; @@ -185,15 +185,15 @@ path = Runner; sourceTree = ""; }; - 6DD8F5E4D6FB4754E2AFDEBE /* Pods */ = { + 80995BE2DEF49C0B056E70AF /* Pods */ = { isa = PBXGroup; children = ( - A54E58738E4F4397AF324E8A /* Pods-Runner.debug.xcconfig */, - 8669E2B7785C32ADA14E0679 /* Pods-Runner.release.xcconfig */, - EB9231503C0DE961F8F5162E /* Pods-Runner.profile.xcconfig */, - CB2E6F2B0D20F48B826E9E2D /* Pods-RunnerTests.debug.xcconfig */, - 76ABAC08E7B63C52F6B3C748 /* Pods-RunnerTests.release.xcconfig */, - 62C667D6919AF0154C6FF8D4 /* Pods-RunnerTests.profile.xcconfig */, + 6F132D3D45CE9032602D36CD /* Pods-Runner.debug.xcconfig */, + 507C3A5354F5863F7E0A0353 /* Pods-Runner.release.xcconfig */, + B81DCAA8C0A3895BFBD50B18 /* Pods-Runner.profile.xcconfig */, + 00457B7AB0A601D5147FAF94 /* Pods-RunnerTests.debug.xcconfig */, + DB85D0DA40A458628B87A242 /* Pods-RunnerTests.release.xcconfig */, + 153ABA282F5996FD7C0C7C28 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -202,8 +202,8 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - 681DCCA03F83465D5BB029E9 /* Pods_Runner.framework */, - 499787B02D50EBB94B2C6D38 /* Pods_RunnerTests.framework */, + 5941DEE552519A9D50710A35 /* Pods_Runner.framework */, + A02E91E7562C3155FF4831A4 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 516C6C601F2B87EBB2590060 /* [CP] Check Pods Manifest.lock */, + 9400122DE76AACC4164C9A41 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - CC1AAF52FCCCF07E1B709EAB /* [CP] Check Pods Manifest.lock */, + 7753B0FC76A1B397D4C8D76E /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 3F19957924D48F9FE3A1561D /* [CP] Embed Pods Frameworks */, + 81B4BA93D9F2EA518E0F2233 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -361,46 +361,46 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 3F19957924D48F9FE3A1561D /* [CP] Embed Pods Frameworks */ = { + 7753B0FC76A1B397D4C8D76E /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 516C6C601F2B87EBB2590060 /* [CP] Check Pods Manifest.lock */ = { + 81B4BA93D9F2EA518E0F2233 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - CC1AAF52FCCCF07E1B709EAB /* [CP] Check Pods Manifest.lock */ = { + 9400122DE76AACC4164C9A41 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -415,7 +415,7 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = CB2E6F2B0D20F48B826E9E2D /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 00457B7AB0A601D5147FAF94 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -489,7 +489,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 76ABAC08E7B63C52F6B3C748 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = DB85D0DA40A458628B87A242 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -505,7 +505,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 62C667D6919AF0154C6FF8D4 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 153ABA282F5996FD7C0C7C28 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/firebase-get-to-know-flutter/step_06/macos/Runner/Configs/AppInfo.xcconfig b/firebase-get-to-know-flutter/step_06/macos/Runner/Configs/AppInfo.xcconfig index bdd13a85f8..4bc3e44a18 100644 --- a/firebase-get-to-know-flutter/step_06/macos/Runner/Configs/AppInfo.xcconfig +++ b/firebase-get-to-know-flutter/step_06/macos/Runner/Configs/AppInfo.xcconfig @@ -11,4 +11,4 @@ PRODUCT_NAME = gtk_flutter PRODUCT_BUNDLE_IDENTIFIER = com.example.gtkFlutter // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. diff --git a/firebase-get-to-know-flutter/step_06/pubspec.yaml b/firebase-get-to-know-flutter/step_06/pubspec.yaml index 349e1f3d22..c7248bbdc7 100644 --- a/firebase-get-to-know-flutter/step_06/pubspec.yaml +++ b/firebase-get-to-know-flutter/step_06/pubspec.yaml @@ -36,12 +36,12 @@ dependencies: # Use with the CupertinoIcons class for iOS style icons. cupertino_icons: ^1.0.8 google_fonts: ^6.2.1 - go_router: ^14.6.2 - cloud_firestore: ^5.5.1 - firebase_auth: ^5.3.4 - firebase_core: ^3.8.1 + go_router: ^14.6.3 + cloud_firestore: ^5.6.2 + firebase_auth: ^5.4.1 + firebase_core: ^3.10.1 provider: ^6.1.2 - firebase_ui_auth: ^1.16.0 + firebase_ui_auth: ^1.16.1 dev_dependencies: flutter_test: diff --git a/firebase-get-to-know-flutter/step_07/android/app/src/main/kotlin/com/example/gtk_flutter/MainActivity.kt b/firebase-get-to-know-flutter/step_07/android/app/src/main/kotlin/com/example/gtk_flutter/MainActivity.kt index 2ea667c39a..039c1b0e7d 100644 --- a/firebase-get-to-know-flutter/step_07/android/app/src/main/kotlin/com/example/gtk_flutter/MainActivity.kt +++ b/firebase-get-to-know-flutter/step_07/android/app/src/main/kotlin/com/example/gtk_flutter/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.gtk_flutter import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/firebase-get-to-know-flutter/step_07/ios/Runner.xcodeproj/project.pbxproj b/firebase-get-to-know-flutter/step_07/ios/Runner.xcodeproj/project.pbxproj index 6a14d1d6d3..7c62549b41 100644 --- a/firebase-get-to-know-flutter/step_07/ios/Runner.xcodeproj/project.pbxproj +++ b/firebase-get-to-know-flutter/step_07/ios/Runner.xcodeproj/project.pbxproj @@ -7,11 +7,11 @@ objects = { /* Begin PBXBuildFile section */ + 0ED26007290EA3D5E75B377F /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5240183F61DA8A8FC0254D84 /* Pods_Runner.framework */; }; 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; - 26A67BC071A1E44FAF5FB007 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CE3B1A6238A94043D6C542C5 /* Pods_RunnerTests.framework */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; - 59561718A3F71B80D4802B6A /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 34F652C948921A136545596B /* Pods_Runner.framework */; }; + 49D198BDC63CEC147F098DA6 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A8A0142C22F2FA089DB25793 /* Pods_RunnerTests.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; @@ -44,16 +44,15 @@ /* Begin PBXFileReference section */ 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; + 2C7CC5A4494A9AF84AD43BD0 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 34F652C948921A136545596B /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 4F344103F99F2954040A4794 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 5240183F61DA8A8FC0254D84 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; - 7606D037451DDA9C9CB99439 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 817FB0757B913E92D33B5224 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 81AD38F3254AF766B44374BE /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -61,10 +60,11 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - A851E4FADD54B968E7912E42 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - B0FB8B70D41CE3C074C46E36 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - CE3B1A6238A94043D6C542C5 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - FBCCF58708334AB623BC3CE1 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 9D637643A08CE55DA600B334 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + A8A0142C22F2FA089DB25793 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + CF6468CDCC02CE7CDEDAC3C3 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + D277ABD06457C792F0484DB1 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + F1E5D4B06500D04D58393D47 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -72,36 +72,50 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 59561718A3F71B80D4802B6A /* Pods_Runner.framework in Frameworks */, + 0ED26007290EA3D5E75B377F /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - B16F1C1597E0A3E42200C36A /* Frameworks */ = { + F529CF8DFC7E84EEDD41715C /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 26A67BC071A1E44FAF5FB007 /* Pods_RunnerTests.framework in Frameworks */, + 49D198BDC63CEC147F098DA6 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 1E4280D7315AC1A06A73C90B /* Frameworks */ = { + 331C8082294A63A400263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( - 34F652C948921A136545596B /* Pods_Runner.framework */, - CE3B1A6238A94043D6C542C5 /* Pods_RunnerTests.framework */, + 331C807B294A618700263BE5 /* RunnerTests.swift */, + ); + path = RunnerTests; + sourceTree = ""; + }; + 44194491505288F3B1EB6F9C /* Frameworks */ = { + isa = PBXGroup; + children = ( + 5240183F61DA8A8FC0254D84 /* Pods_Runner.framework */, + A8A0142C22F2FA089DB25793 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; }; - 331C8082294A63A400263BE5 /* RunnerTests */ = { + 800B1FD0EB75F8F780F5365F /* Pods */ = { isa = PBXGroup; children = ( - 331C807B294A618700263BE5 /* RunnerTests.swift */, + F1E5D4B06500D04D58393D47 /* Pods-Runner.debug.xcconfig */, + CF6468CDCC02CE7CDEDAC3C3 /* Pods-Runner.release.xcconfig */, + 81AD38F3254AF766B44374BE /* Pods-Runner.profile.xcconfig */, + 2C7CC5A4494A9AF84AD43BD0 /* Pods-RunnerTests.debug.xcconfig */, + 9D637643A08CE55DA600B334 /* Pods-RunnerTests.release.xcconfig */, + D277ABD06457C792F0484DB1 /* Pods-RunnerTests.profile.xcconfig */, ); - path = RunnerTests; + name = Pods; + path = Pods; sourceTree = ""; }; 9740EEB11CF90186004384FC /* Flutter */ = { @@ -122,8 +136,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - F66D06AEF2EA6DAAE42EB1D1 /* Pods */, - 1E4280D7315AC1A06A73C90B /* Frameworks */, + 800B1FD0EB75F8F780F5365F /* Pods */, + 44194491505288F3B1EB6F9C /* Frameworks */, ); sourceTree = ""; }; @@ -151,20 +165,6 @@ path = Runner; sourceTree = ""; }; - F66D06AEF2EA6DAAE42EB1D1 /* Pods */ = { - isa = PBXGroup; - children = ( - 4F344103F99F2954040A4794 /* Pods-Runner.debug.xcconfig */, - B0FB8B70D41CE3C074C46E36 /* Pods-Runner.release.xcconfig */, - 7606D037451DDA9C9CB99439 /* Pods-Runner.profile.xcconfig */, - 817FB0757B913E92D33B5224 /* Pods-RunnerTests.debug.xcconfig */, - A851E4FADD54B968E7912E42 /* Pods-RunnerTests.release.xcconfig */, - FBCCF58708334AB623BC3CE1 /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - A5B9C6729A9A2E5D418B5848 /* [CP] Check Pods Manifest.lock */, + 347D9C45009646F156A56561 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - B16F1C1597E0A3E42200C36A /* Frameworks */, + F529CF8DFC7E84EEDD41715C /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 4A321C127D16D10825A21514 /* [CP] Check Pods Manifest.lock */, + ABA98A39958F206929736459 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 6461ABAEF6C0070A9775DCA9 /* [CP] Embed Pods Frameworks */, + 2B8D463816038C813EF074D6 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -270,23 +270,24 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + 2B8D463816038C813EF074D6 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputPaths = ( - "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "Thin Binary"; - outputPaths = ( + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; }; - 4A321C127D16D10825A21514 /* [CP] Check Pods Manifest.lock */ = { + 347D9C45009646F156A56561 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -301,29 +302,28 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 6461ABAEF6C0070A9775DCA9 /* [CP] Embed Pods Frameworks */ = { + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + inputPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + name = "Thin Binary"; + outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; @@ -340,7 +340,7 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - A5B9C6729A9A2E5D418B5848 /* [CP] Check Pods Manifest.lock */ = { + ABA98A39958F206929736459 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -355,7 +355,7 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -488,7 +488,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 817FB0757B913E92D33B5224 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 2C7CC5A4494A9AF84AD43BD0 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -507,7 +507,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = A851E4FADD54B968E7912E42 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 9D637643A08CE55DA600B334 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -524,7 +524,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = FBCCF58708334AB623BC3CE1 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = D277ABD06457C792F0484DB1 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/firebase-get-to-know-flutter/step_07/macos/Runner.xcodeproj/project.pbxproj b/firebase-get-to-know-flutter/step_07/macos/Runner.xcodeproj/project.pbxproj index 122ac1deee..6ceb116530 100644 --- a/firebase-get-to-know-flutter/step_07/macos/Runner.xcodeproj/project.pbxproj +++ b/firebase-get-to-know-flutter/step_07/macos/Runner.xcodeproj/project.pbxproj @@ -27,8 +27,8 @@ 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - A86FDD942983673205DBA194 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 681DCCA03F83465D5BB029E9 /* Pods_Runner.framework */; }; - BE6117CC493FA14760A2CF92 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 499787B02D50EBB94B2C6D38 /* Pods_RunnerTests.framework */; }; + 3A8C47B9A40B0618B4620FFF /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A02E91E7562C3155FF4831A4 /* Pods_RunnerTests.framework */; }; + BED58A00E6A21CA04E91C453 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5941DEE552519A9D50710A35 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,6 +62,8 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 00457B7AB0A601D5147FAF94 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 153ABA282F5996FD7C0C7C28 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -78,16 +80,14 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 499787B02D50EBB94B2C6D38 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 62C667D6919AF0154C6FF8D4 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - 681DCCA03F83465D5BB029E9 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 76ABAC08E7B63C52F6B3C748 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 507C3A5354F5863F7E0A0353 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 5941DEE552519A9D50710A35 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 6F132D3D45CE9032602D36CD /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 8669E2B7785C32ADA14E0679 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - A54E58738E4F4397AF324E8A /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - CB2E6F2B0D20F48B826E9E2D /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - EB9231503C0DE961F8F5162E /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + A02E91E7562C3155FF4831A4 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + B81DCAA8C0A3895BFBD50B18 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + DB85D0DA40A458628B87A242 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - BE6117CC493FA14760A2CF92 /* Pods_RunnerTests.framework in Frameworks */, + 3A8C47B9A40B0618B4620FFF /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,7 +103,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - A86FDD942983673205DBA194 /* Pods_Runner.framework in Frameworks */, + BED58A00E6A21CA04E91C453 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -137,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 6DD8F5E4D6FB4754E2AFDEBE /* Pods */, + 80995BE2DEF49C0B056E70AF /* Pods */, ); sourceTree = ""; }; @@ -185,15 +185,15 @@ path = Runner; sourceTree = ""; }; - 6DD8F5E4D6FB4754E2AFDEBE /* Pods */ = { + 80995BE2DEF49C0B056E70AF /* Pods */ = { isa = PBXGroup; children = ( - A54E58738E4F4397AF324E8A /* Pods-Runner.debug.xcconfig */, - 8669E2B7785C32ADA14E0679 /* Pods-Runner.release.xcconfig */, - EB9231503C0DE961F8F5162E /* Pods-Runner.profile.xcconfig */, - CB2E6F2B0D20F48B826E9E2D /* Pods-RunnerTests.debug.xcconfig */, - 76ABAC08E7B63C52F6B3C748 /* Pods-RunnerTests.release.xcconfig */, - 62C667D6919AF0154C6FF8D4 /* Pods-RunnerTests.profile.xcconfig */, + 6F132D3D45CE9032602D36CD /* Pods-Runner.debug.xcconfig */, + 507C3A5354F5863F7E0A0353 /* Pods-Runner.release.xcconfig */, + B81DCAA8C0A3895BFBD50B18 /* Pods-Runner.profile.xcconfig */, + 00457B7AB0A601D5147FAF94 /* Pods-RunnerTests.debug.xcconfig */, + DB85D0DA40A458628B87A242 /* Pods-RunnerTests.release.xcconfig */, + 153ABA282F5996FD7C0C7C28 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -202,8 +202,8 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - 681DCCA03F83465D5BB029E9 /* Pods_Runner.framework */, - 499787B02D50EBB94B2C6D38 /* Pods_RunnerTests.framework */, + 5941DEE552519A9D50710A35 /* Pods_Runner.framework */, + A02E91E7562C3155FF4831A4 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 516C6C601F2B87EBB2590060 /* [CP] Check Pods Manifest.lock */, + 9400122DE76AACC4164C9A41 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - CC1AAF52FCCCF07E1B709EAB /* [CP] Check Pods Manifest.lock */, + 7753B0FC76A1B397D4C8D76E /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 3F19957924D48F9FE3A1561D /* [CP] Embed Pods Frameworks */, + 81B4BA93D9F2EA518E0F2233 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -361,46 +361,46 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 3F19957924D48F9FE3A1561D /* [CP] Embed Pods Frameworks */ = { + 7753B0FC76A1B397D4C8D76E /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 516C6C601F2B87EBB2590060 /* [CP] Check Pods Manifest.lock */ = { + 81B4BA93D9F2EA518E0F2233 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - CC1AAF52FCCCF07E1B709EAB /* [CP] Check Pods Manifest.lock */ = { + 9400122DE76AACC4164C9A41 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -415,7 +415,7 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = CB2E6F2B0D20F48B826E9E2D /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 00457B7AB0A601D5147FAF94 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -489,7 +489,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 76ABAC08E7B63C52F6B3C748 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = DB85D0DA40A458628B87A242 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -505,7 +505,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 62C667D6919AF0154C6FF8D4 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 153ABA282F5996FD7C0C7C28 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/firebase-get-to-know-flutter/step_07/macos/Runner/Configs/AppInfo.xcconfig b/firebase-get-to-know-flutter/step_07/macos/Runner/Configs/AppInfo.xcconfig index bdd13a85f8..4bc3e44a18 100644 --- a/firebase-get-to-know-flutter/step_07/macos/Runner/Configs/AppInfo.xcconfig +++ b/firebase-get-to-know-flutter/step_07/macos/Runner/Configs/AppInfo.xcconfig @@ -11,4 +11,4 @@ PRODUCT_NAME = gtk_flutter PRODUCT_BUNDLE_IDENTIFIER = com.example.gtkFlutter // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. diff --git a/firebase-get-to-know-flutter/step_07/pubspec.yaml b/firebase-get-to-know-flutter/step_07/pubspec.yaml index 349e1f3d22..c7248bbdc7 100644 --- a/firebase-get-to-know-flutter/step_07/pubspec.yaml +++ b/firebase-get-to-know-flutter/step_07/pubspec.yaml @@ -36,12 +36,12 @@ dependencies: # Use with the CupertinoIcons class for iOS style icons. cupertino_icons: ^1.0.8 google_fonts: ^6.2.1 - go_router: ^14.6.2 - cloud_firestore: ^5.5.1 - firebase_auth: ^5.3.4 - firebase_core: ^3.8.1 + go_router: ^14.6.3 + cloud_firestore: ^5.6.2 + firebase_auth: ^5.4.1 + firebase_core: ^3.10.1 provider: ^6.1.2 - firebase_ui_auth: ^1.16.0 + firebase_ui_auth: ^1.16.1 dev_dependencies: flutter_test: diff --git a/firebase-get-to-know-flutter/step_09/android/app/src/main/kotlin/com/example/gtk_flutter/MainActivity.kt b/firebase-get-to-know-flutter/step_09/android/app/src/main/kotlin/com/example/gtk_flutter/MainActivity.kt index 2ea667c39a..039c1b0e7d 100644 --- a/firebase-get-to-know-flutter/step_09/android/app/src/main/kotlin/com/example/gtk_flutter/MainActivity.kt +++ b/firebase-get-to-know-flutter/step_09/android/app/src/main/kotlin/com/example/gtk_flutter/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.gtk_flutter import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/firebase-get-to-know-flutter/step_09/ios/Runner.xcodeproj/project.pbxproj b/firebase-get-to-know-flutter/step_09/ios/Runner.xcodeproj/project.pbxproj index 6a14d1d6d3..7c62549b41 100644 --- a/firebase-get-to-know-flutter/step_09/ios/Runner.xcodeproj/project.pbxproj +++ b/firebase-get-to-know-flutter/step_09/ios/Runner.xcodeproj/project.pbxproj @@ -7,11 +7,11 @@ objects = { /* Begin PBXBuildFile section */ + 0ED26007290EA3D5E75B377F /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5240183F61DA8A8FC0254D84 /* Pods_Runner.framework */; }; 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; - 26A67BC071A1E44FAF5FB007 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CE3B1A6238A94043D6C542C5 /* Pods_RunnerTests.framework */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; - 59561718A3F71B80D4802B6A /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 34F652C948921A136545596B /* Pods_Runner.framework */; }; + 49D198BDC63CEC147F098DA6 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A8A0142C22F2FA089DB25793 /* Pods_RunnerTests.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; @@ -44,16 +44,15 @@ /* Begin PBXFileReference section */ 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; + 2C7CC5A4494A9AF84AD43BD0 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 34F652C948921A136545596B /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 4F344103F99F2954040A4794 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 5240183F61DA8A8FC0254D84 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; - 7606D037451DDA9C9CB99439 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 817FB0757B913E92D33B5224 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 81AD38F3254AF766B44374BE /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -61,10 +60,11 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - A851E4FADD54B968E7912E42 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - B0FB8B70D41CE3C074C46E36 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - CE3B1A6238A94043D6C542C5 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - FBCCF58708334AB623BC3CE1 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 9D637643A08CE55DA600B334 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + A8A0142C22F2FA089DB25793 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + CF6468CDCC02CE7CDEDAC3C3 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + D277ABD06457C792F0484DB1 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + F1E5D4B06500D04D58393D47 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -72,36 +72,50 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 59561718A3F71B80D4802B6A /* Pods_Runner.framework in Frameworks */, + 0ED26007290EA3D5E75B377F /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - B16F1C1597E0A3E42200C36A /* Frameworks */ = { + F529CF8DFC7E84EEDD41715C /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 26A67BC071A1E44FAF5FB007 /* Pods_RunnerTests.framework in Frameworks */, + 49D198BDC63CEC147F098DA6 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 1E4280D7315AC1A06A73C90B /* Frameworks */ = { + 331C8082294A63A400263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( - 34F652C948921A136545596B /* Pods_Runner.framework */, - CE3B1A6238A94043D6C542C5 /* Pods_RunnerTests.framework */, + 331C807B294A618700263BE5 /* RunnerTests.swift */, + ); + path = RunnerTests; + sourceTree = ""; + }; + 44194491505288F3B1EB6F9C /* Frameworks */ = { + isa = PBXGroup; + children = ( + 5240183F61DA8A8FC0254D84 /* Pods_Runner.framework */, + A8A0142C22F2FA089DB25793 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; }; - 331C8082294A63A400263BE5 /* RunnerTests */ = { + 800B1FD0EB75F8F780F5365F /* Pods */ = { isa = PBXGroup; children = ( - 331C807B294A618700263BE5 /* RunnerTests.swift */, + F1E5D4B06500D04D58393D47 /* Pods-Runner.debug.xcconfig */, + CF6468CDCC02CE7CDEDAC3C3 /* Pods-Runner.release.xcconfig */, + 81AD38F3254AF766B44374BE /* Pods-Runner.profile.xcconfig */, + 2C7CC5A4494A9AF84AD43BD0 /* Pods-RunnerTests.debug.xcconfig */, + 9D637643A08CE55DA600B334 /* Pods-RunnerTests.release.xcconfig */, + D277ABD06457C792F0484DB1 /* Pods-RunnerTests.profile.xcconfig */, ); - path = RunnerTests; + name = Pods; + path = Pods; sourceTree = ""; }; 9740EEB11CF90186004384FC /* Flutter */ = { @@ -122,8 +136,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - F66D06AEF2EA6DAAE42EB1D1 /* Pods */, - 1E4280D7315AC1A06A73C90B /* Frameworks */, + 800B1FD0EB75F8F780F5365F /* Pods */, + 44194491505288F3B1EB6F9C /* Frameworks */, ); sourceTree = ""; }; @@ -151,20 +165,6 @@ path = Runner; sourceTree = ""; }; - F66D06AEF2EA6DAAE42EB1D1 /* Pods */ = { - isa = PBXGroup; - children = ( - 4F344103F99F2954040A4794 /* Pods-Runner.debug.xcconfig */, - B0FB8B70D41CE3C074C46E36 /* Pods-Runner.release.xcconfig */, - 7606D037451DDA9C9CB99439 /* Pods-Runner.profile.xcconfig */, - 817FB0757B913E92D33B5224 /* Pods-RunnerTests.debug.xcconfig */, - A851E4FADD54B968E7912E42 /* Pods-RunnerTests.release.xcconfig */, - FBCCF58708334AB623BC3CE1 /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - A5B9C6729A9A2E5D418B5848 /* [CP] Check Pods Manifest.lock */, + 347D9C45009646F156A56561 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - B16F1C1597E0A3E42200C36A /* Frameworks */, + F529CF8DFC7E84EEDD41715C /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 4A321C127D16D10825A21514 /* [CP] Check Pods Manifest.lock */, + ABA98A39958F206929736459 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 6461ABAEF6C0070A9775DCA9 /* [CP] Embed Pods Frameworks */, + 2B8D463816038C813EF074D6 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -270,23 +270,24 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + 2B8D463816038C813EF074D6 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputPaths = ( - "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "Thin Binary"; - outputPaths = ( + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; }; - 4A321C127D16D10825A21514 /* [CP] Check Pods Manifest.lock */ = { + 347D9C45009646F156A56561 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -301,29 +302,28 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 6461ABAEF6C0070A9775DCA9 /* [CP] Embed Pods Frameworks */ = { + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + inputPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + name = "Thin Binary"; + outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; @@ -340,7 +340,7 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - A5B9C6729A9A2E5D418B5848 /* [CP] Check Pods Manifest.lock */ = { + ABA98A39958F206929736459 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -355,7 +355,7 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -488,7 +488,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 817FB0757B913E92D33B5224 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 2C7CC5A4494A9AF84AD43BD0 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -507,7 +507,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = A851E4FADD54B968E7912E42 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 9D637643A08CE55DA600B334 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -524,7 +524,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = FBCCF58708334AB623BC3CE1 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = D277ABD06457C792F0484DB1 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/firebase-get-to-know-flutter/step_09/macos/Runner.xcodeproj/project.pbxproj b/firebase-get-to-know-flutter/step_09/macos/Runner.xcodeproj/project.pbxproj index 122ac1deee..6ceb116530 100644 --- a/firebase-get-to-know-flutter/step_09/macos/Runner.xcodeproj/project.pbxproj +++ b/firebase-get-to-know-flutter/step_09/macos/Runner.xcodeproj/project.pbxproj @@ -27,8 +27,8 @@ 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - A86FDD942983673205DBA194 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 681DCCA03F83465D5BB029E9 /* Pods_Runner.framework */; }; - BE6117CC493FA14760A2CF92 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 499787B02D50EBB94B2C6D38 /* Pods_RunnerTests.framework */; }; + 3A8C47B9A40B0618B4620FFF /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A02E91E7562C3155FF4831A4 /* Pods_RunnerTests.framework */; }; + BED58A00E6A21CA04E91C453 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5941DEE552519A9D50710A35 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,6 +62,8 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 00457B7AB0A601D5147FAF94 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 153ABA282F5996FD7C0C7C28 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -78,16 +80,14 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 499787B02D50EBB94B2C6D38 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 62C667D6919AF0154C6FF8D4 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - 681DCCA03F83465D5BB029E9 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 76ABAC08E7B63C52F6B3C748 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 507C3A5354F5863F7E0A0353 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 5941DEE552519A9D50710A35 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 6F132D3D45CE9032602D36CD /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 8669E2B7785C32ADA14E0679 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - A54E58738E4F4397AF324E8A /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - CB2E6F2B0D20F48B826E9E2D /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - EB9231503C0DE961F8F5162E /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + A02E91E7562C3155FF4831A4 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + B81DCAA8C0A3895BFBD50B18 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + DB85D0DA40A458628B87A242 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - BE6117CC493FA14760A2CF92 /* Pods_RunnerTests.framework in Frameworks */, + 3A8C47B9A40B0618B4620FFF /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,7 +103,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - A86FDD942983673205DBA194 /* Pods_Runner.framework in Frameworks */, + BED58A00E6A21CA04E91C453 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -137,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 6DD8F5E4D6FB4754E2AFDEBE /* Pods */, + 80995BE2DEF49C0B056E70AF /* Pods */, ); sourceTree = ""; }; @@ -185,15 +185,15 @@ path = Runner; sourceTree = ""; }; - 6DD8F5E4D6FB4754E2AFDEBE /* Pods */ = { + 80995BE2DEF49C0B056E70AF /* Pods */ = { isa = PBXGroup; children = ( - A54E58738E4F4397AF324E8A /* Pods-Runner.debug.xcconfig */, - 8669E2B7785C32ADA14E0679 /* Pods-Runner.release.xcconfig */, - EB9231503C0DE961F8F5162E /* Pods-Runner.profile.xcconfig */, - CB2E6F2B0D20F48B826E9E2D /* Pods-RunnerTests.debug.xcconfig */, - 76ABAC08E7B63C52F6B3C748 /* Pods-RunnerTests.release.xcconfig */, - 62C667D6919AF0154C6FF8D4 /* Pods-RunnerTests.profile.xcconfig */, + 6F132D3D45CE9032602D36CD /* Pods-Runner.debug.xcconfig */, + 507C3A5354F5863F7E0A0353 /* Pods-Runner.release.xcconfig */, + B81DCAA8C0A3895BFBD50B18 /* Pods-Runner.profile.xcconfig */, + 00457B7AB0A601D5147FAF94 /* Pods-RunnerTests.debug.xcconfig */, + DB85D0DA40A458628B87A242 /* Pods-RunnerTests.release.xcconfig */, + 153ABA282F5996FD7C0C7C28 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -202,8 +202,8 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - 681DCCA03F83465D5BB029E9 /* Pods_Runner.framework */, - 499787B02D50EBB94B2C6D38 /* Pods_RunnerTests.framework */, + 5941DEE552519A9D50710A35 /* Pods_Runner.framework */, + A02E91E7562C3155FF4831A4 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 516C6C601F2B87EBB2590060 /* [CP] Check Pods Manifest.lock */, + 9400122DE76AACC4164C9A41 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - CC1AAF52FCCCF07E1B709EAB /* [CP] Check Pods Manifest.lock */, + 7753B0FC76A1B397D4C8D76E /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 3F19957924D48F9FE3A1561D /* [CP] Embed Pods Frameworks */, + 81B4BA93D9F2EA518E0F2233 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -361,46 +361,46 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 3F19957924D48F9FE3A1561D /* [CP] Embed Pods Frameworks */ = { + 7753B0FC76A1B397D4C8D76E /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 516C6C601F2B87EBB2590060 /* [CP] Check Pods Manifest.lock */ = { + 81B4BA93D9F2EA518E0F2233 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - CC1AAF52FCCCF07E1B709EAB /* [CP] Check Pods Manifest.lock */ = { + 9400122DE76AACC4164C9A41 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -415,7 +415,7 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = CB2E6F2B0D20F48B826E9E2D /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 00457B7AB0A601D5147FAF94 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -489,7 +489,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 76ABAC08E7B63C52F6B3C748 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = DB85D0DA40A458628B87A242 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -505,7 +505,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 62C667D6919AF0154C6FF8D4 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 153ABA282F5996FD7C0C7C28 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/firebase-get-to-know-flutter/step_09/macos/Runner/Configs/AppInfo.xcconfig b/firebase-get-to-know-flutter/step_09/macos/Runner/Configs/AppInfo.xcconfig index bdd13a85f8..4bc3e44a18 100644 --- a/firebase-get-to-know-flutter/step_09/macos/Runner/Configs/AppInfo.xcconfig +++ b/firebase-get-to-know-flutter/step_09/macos/Runner/Configs/AppInfo.xcconfig @@ -11,4 +11,4 @@ PRODUCT_NAME = gtk_flutter PRODUCT_BUNDLE_IDENTIFIER = com.example.gtkFlutter // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. diff --git a/firebase-get-to-know-flutter/step_09/pubspec.yaml b/firebase-get-to-know-flutter/step_09/pubspec.yaml index 349e1f3d22..c7248bbdc7 100644 --- a/firebase-get-to-know-flutter/step_09/pubspec.yaml +++ b/firebase-get-to-know-flutter/step_09/pubspec.yaml @@ -36,12 +36,12 @@ dependencies: # Use with the CupertinoIcons class for iOS style icons. cupertino_icons: ^1.0.8 google_fonts: ^6.2.1 - go_router: ^14.6.2 - cloud_firestore: ^5.5.1 - firebase_auth: ^5.3.4 - firebase_core: ^3.8.1 + go_router: ^14.6.3 + cloud_firestore: ^5.6.2 + firebase_auth: ^5.4.1 + firebase_core: ^3.10.1 provider: ^6.1.2 - firebase_ui_auth: ^1.16.0 + firebase_ui_auth: ^1.16.1 dev_dependencies: flutter_test: From 5e7e2df63cdc59e7338e6edec9eaac7323a32191 Mon Sep 17 00:00:00 2001 From: Brett Morgan Date: Wed, 22 Jan 2025 14:24:08 +1100 Subject: [PATCH 099/108] Update `forge2d_game` --- .../main/kotlin/com/example/forge2d_game/MainActivity.kt | 2 +- forge2d_game/step_02/macos/Runner/Configs/AppInfo.xcconfig | 2 +- forge2d_game/step_02/pubspec.yaml | 6 +++--- forge2d_game/step_02/windows/runner/Runner.rc | 2 +- .../main/kotlin/com/example/forge2d_game/MainActivity.kt | 2 +- forge2d_game/step_03/macos/Runner/Configs/AppInfo.xcconfig | 2 +- forge2d_game/step_03/pubspec.yaml | 6 +++--- forge2d_game/step_03/windows/runner/Runner.rc | 2 +- .../main/kotlin/com/example/forge2d_game/MainActivity.kt | 2 +- forge2d_game/step_04/macos/Runner/Configs/AppInfo.xcconfig | 2 +- forge2d_game/step_04/pubspec.yaml | 6 +++--- forge2d_game/step_04/windows/runner/Runner.rc | 2 +- .../main/kotlin/com/example/forge2d_game/MainActivity.kt | 2 +- forge2d_game/step_05/macos/Runner/Configs/AppInfo.xcconfig | 2 +- forge2d_game/step_05/pubspec.yaml | 6 +++--- forge2d_game/step_05/windows/runner/Runner.rc | 2 +- .../main/kotlin/com/example/forge2d_game/MainActivity.kt | 2 +- forge2d_game/step_06/macos/Runner/Configs/AppInfo.xcconfig | 2 +- forge2d_game/step_06/pubspec.yaml | 6 +++--- forge2d_game/step_06/windows/runner/Runner.rc | 2 +- .../main/kotlin/com/example/forge2d_game/MainActivity.kt | 2 +- forge2d_game/step_07/macos/Runner/Configs/AppInfo.xcconfig | 2 +- forge2d_game/step_07/pubspec.yaml | 6 +++--- forge2d_game/step_07/windows/runner/Runner.rc | 2 +- 24 files changed, 36 insertions(+), 36 deletions(-) diff --git a/forge2d_game/step_02/android/app/src/main/kotlin/com/example/forge2d_game/MainActivity.kt b/forge2d_game/step_02/android/app/src/main/kotlin/com/example/forge2d_game/MainActivity.kt index e9323498dd..459f03328b 100644 --- a/forge2d_game/step_02/android/app/src/main/kotlin/com/example/forge2d_game/MainActivity.kt +++ b/forge2d_game/step_02/android/app/src/main/kotlin/com/example/forge2d_game/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.forge2d_game import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/forge2d_game/step_02/macos/Runner/Configs/AppInfo.xcconfig b/forge2d_game/step_02/macos/Runner/Configs/AppInfo.xcconfig index d425581497..89320b1f52 100644 --- a/forge2d_game/step_02/macos/Runner/Configs/AppInfo.xcconfig +++ b/forge2d_game/step_02/macos/Runner/Configs/AppInfo.xcconfig @@ -11,4 +11,4 @@ PRODUCT_NAME = forge2d_game PRODUCT_BUNDLE_IDENTIFIER = com.example.forge2dGame // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. diff --git a/forge2d_game/step_02/pubspec.yaml b/forge2d_game/step_02/pubspec.yaml index a2f8e14cae..0c407021f7 100644 --- a/forge2d_game/step_02/pubspec.yaml +++ b/forge2d_game/step_02/pubspec.yaml @@ -10,9 +10,9 @@ dependencies: flutter: sdk: flutter characters: ^1.3.0 - flame: ^1.22.0 - flame_forge2d: ^0.18.2+3 - flame_kenney_xml: ^0.1.1+3 + flame: ^1.23.0 + flame_forge2d: ^0.18.2+4 + flame_kenney_xml: ^0.1.1+4 xml: ^6.5.0 dev_dependencies: diff --git a/forge2d_game/step_02/windows/runner/Runner.rc b/forge2d_game/step_02/windows/runner/Runner.rc index 9d8cc6bf49..a95e8e246b 100644 --- a/forge2d_game/step_02/windows/runner/Runner.rc +++ b/forge2d_game/step_02/windows/runner/Runner.rc @@ -93,7 +93,7 @@ BEGIN VALUE "FileDescription", "forge2d_game" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "InternalName", "forge2d_game" "\0" - VALUE "LegalCopyright", "Copyright (C) 2024 com.example. All rights reserved." "\0" + VALUE "LegalCopyright", "Copyright (C) 2025 com.example. All rights reserved." "\0" VALUE "OriginalFilename", "forge2d_game.exe" "\0" VALUE "ProductName", "forge2d_game" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" diff --git a/forge2d_game/step_03/android/app/src/main/kotlin/com/example/forge2d_game/MainActivity.kt b/forge2d_game/step_03/android/app/src/main/kotlin/com/example/forge2d_game/MainActivity.kt index e9323498dd..459f03328b 100644 --- a/forge2d_game/step_03/android/app/src/main/kotlin/com/example/forge2d_game/MainActivity.kt +++ b/forge2d_game/step_03/android/app/src/main/kotlin/com/example/forge2d_game/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.forge2d_game import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/forge2d_game/step_03/macos/Runner/Configs/AppInfo.xcconfig b/forge2d_game/step_03/macos/Runner/Configs/AppInfo.xcconfig index d425581497..89320b1f52 100644 --- a/forge2d_game/step_03/macos/Runner/Configs/AppInfo.xcconfig +++ b/forge2d_game/step_03/macos/Runner/Configs/AppInfo.xcconfig @@ -11,4 +11,4 @@ PRODUCT_NAME = forge2d_game PRODUCT_BUNDLE_IDENTIFIER = com.example.forge2dGame // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. diff --git a/forge2d_game/step_03/pubspec.yaml b/forge2d_game/step_03/pubspec.yaml index 6f0f279c4a..576cdd93f3 100644 --- a/forge2d_game/step_03/pubspec.yaml +++ b/forge2d_game/step_03/pubspec.yaml @@ -10,9 +10,9 @@ dependencies: flutter: sdk: flutter characters: ^1.3.0 - flame: ^1.22.0 - flame_forge2d: ^0.18.2+3 - flame_kenney_xml: ^0.1.1+3 + flame: ^1.23.0 + flame_forge2d: ^0.18.2+4 + flame_kenney_xml: ^0.1.1+4 xml: ^6.5.0 dev_dependencies: diff --git a/forge2d_game/step_03/windows/runner/Runner.rc b/forge2d_game/step_03/windows/runner/Runner.rc index 9d8cc6bf49..a95e8e246b 100644 --- a/forge2d_game/step_03/windows/runner/Runner.rc +++ b/forge2d_game/step_03/windows/runner/Runner.rc @@ -93,7 +93,7 @@ BEGIN VALUE "FileDescription", "forge2d_game" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "InternalName", "forge2d_game" "\0" - VALUE "LegalCopyright", "Copyright (C) 2024 com.example. All rights reserved." "\0" + VALUE "LegalCopyright", "Copyright (C) 2025 com.example. All rights reserved." "\0" VALUE "OriginalFilename", "forge2d_game.exe" "\0" VALUE "ProductName", "forge2d_game" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" diff --git a/forge2d_game/step_04/android/app/src/main/kotlin/com/example/forge2d_game/MainActivity.kt b/forge2d_game/step_04/android/app/src/main/kotlin/com/example/forge2d_game/MainActivity.kt index e9323498dd..459f03328b 100644 --- a/forge2d_game/step_04/android/app/src/main/kotlin/com/example/forge2d_game/MainActivity.kt +++ b/forge2d_game/step_04/android/app/src/main/kotlin/com/example/forge2d_game/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.forge2d_game import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/forge2d_game/step_04/macos/Runner/Configs/AppInfo.xcconfig b/forge2d_game/step_04/macos/Runner/Configs/AppInfo.xcconfig index d425581497..89320b1f52 100644 --- a/forge2d_game/step_04/macos/Runner/Configs/AppInfo.xcconfig +++ b/forge2d_game/step_04/macos/Runner/Configs/AppInfo.xcconfig @@ -11,4 +11,4 @@ PRODUCT_NAME = forge2d_game PRODUCT_BUNDLE_IDENTIFIER = com.example.forge2dGame // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. diff --git a/forge2d_game/step_04/pubspec.yaml b/forge2d_game/step_04/pubspec.yaml index 6f0f279c4a..576cdd93f3 100644 --- a/forge2d_game/step_04/pubspec.yaml +++ b/forge2d_game/step_04/pubspec.yaml @@ -10,9 +10,9 @@ dependencies: flutter: sdk: flutter characters: ^1.3.0 - flame: ^1.22.0 - flame_forge2d: ^0.18.2+3 - flame_kenney_xml: ^0.1.1+3 + flame: ^1.23.0 + flame_forge2d: ^0.18.2+4 + flame_kenney_xml: ^0.1.1+4 xml: ^6.5.0 dev_dependencies: diff --git a/forge2d_game/step_04/windows/runner/Runner.rc b/forge2d_game/step_04/windows/runner/Runner.rc index 9d8cc6bf49..a95e8e246b 100644 --- a/forge2d_game/step_04/windows/runner/Runner.rc +++ b/forge2d_game/step_04/windows/runner/Runner.rc @@ -93,7 +93,7 @@ BEGIN VALUE "FileDescription", "forge2d_game" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "InternalName", "forge2d_game" "\0" - VALUE "LegalCopyright", "Copyright (C) 2024 com.example. All rights reserved." "\0" + VALUE "LegalCopyright", "Copyright (C) 2025 com.example. All rights reserved." "\0" VALUE "OriginalFilename", "forge2d_game.exe" "\0" VALUE "ProductName", "forge2d_game" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" diff --git a/forge2d_game/step_05/android/app/src/main/kotlin/com/example/forge2d_game/MainActivity.kt b/forge2d_game/step_05/android/app/src/main/kotlin/com/example/forge2d_game/MainActivity.kt index e9323498dd..459f03328b 100644 --- a/forge2d_game/step_05/android/app/src/main/kotlin/com/example/forge2d_game/MainActivity.kt +++ b/forge2d_game/step_05/android/app/src/main/kotlin/com/example/forge2d_game/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.forge2d_game import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/forge2d_game/step_05/macos/Runner/Configs/AppInfo.xcconfig b/forge2d_game/step_05/macos/Runner/Configs/AppInfo.xcconfig index d425581497..89320b1f52 100644 --- a/forge2d_game/step_05/macos/Runner/Configs/AppInfo.xcconfig +++ b/forge2d_game/step_05/macos/Runner/Configs/AppInfo.xcconfig @@ -11,4 +11,4 @@ PRODUCT_NAME = forge2d_game PRODUCT_BUNDLE_IDENTIFIER = com.example.forge2dGame // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. diff --git a/forge2d_game/step_05/pubspec.yaml b/forge2d_game/step_05/pubspec.yaml index 7221e48d01..0ab0aeaf08 100644 --- a/forge2d_game/step_05/pubspec.yaml +++ b/forge2d_game/step_05/pubspec.yaml @@ -10,9 +10,9 @@ dependencies: flutter: sdk: flutter characters: ^1.3.0 - flame: ^1.22.0 - flame_forge2d: ^0.18.2+3 - flame_kenney_xml: ^0.1.1+3 + flame: ^1.23.0 + flame_forge2d: ^0.18.2+4 + flame_kenney_xml: ^0.1.1+4 xml: ^6.5.0 equatable: ^2.0.7 diff --git a/forge2d_game/step_05/windows/runner/Runner.rc b/forge2d_game/step_05/windows/runner/Runner.rc index 9d8cc6bf49..a95e8e246b 100644 --- a/forge2d_game/step_05/windows/runner/Runner.rc +++ b/forge2d_game/step_05/windows/runner/Runner.rc @@ -93,7 +93,7 @@ BEGIN VALUE "FileDescription", "forge2d_game" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "InternalName", "forge2d_game" "\0" - VALUE "LegalCopyright", "Copyright (C) 2024 com.example. All rights reserved." "\0" + VALUE "LegalCopyright", "Copyright (C) 2025 com.example. All rights reserved." "\0" VALUE "OriginalFilename", "forge2d_game.exe" "\0" VALUE "ProductName", "forge2d_game" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" diff --git a/forge2d_game/step_06/android/app/src/main/kotlin/com/example/forge2d_game/MainActivity.kt b/forge2d_game/step_06/android/app/src/main/kotlin/com/example/forge2d_game/MainActivity.kt index e9323498dd..459f03328b 100644 --- a/forge2d_game/step_06/android/app/src/main/kotlin/com/example/forge2d_game/MainActivity.kt +++ b/forge2d_game/step_06/android/app/src/main/kotlin/com/example/forge2d_game/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.forge2d_game import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/forge2d_game/step_06/macos/Runner/Configs/AppInfo.xcconfig b/forge2d_game/step_06/macos/Runner/Configs/AppInfo.xcconfig index d425581497..89320b1f52 100644 --- a/forge2d_game/step_06/macos/Runner/Configs/AppInfo.xcconfig +++ b/forge2d_game/step_06/macos/Runner/Configs/AppInfo.xcconfig @@ -11,4 +11,4 @@ PRODUCT_NAME = forge2d_game PRODUCT_BUNDLE_IDENTIFIER = com.example.forge2dGame // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. diff --git a/forge2d_game/step_06/pubspec.yaml b/forge2d_game/step_06/pubspec.yaml index 7221e48d01..0ab0aeaf08 100644 --- a/forge2d_game/step_06/pubspec.yaml +++ b/forge2d_game/step_06/pubspec.yaml @@ -10,9 +10,9 @@ dependencies: flutter: sdk: flutter characters: ^1.3.0 - flame: ^1.22.0 - flame_forge2d: ^0.18.2+3 - flame_kenney_xml: ^0.1.1+3 + flame: ^1.23.0 + flame_forge2d: ^0.18.2+4 + flame_kenney_xml: ^0.1.1+4 xml: ^6.5.0 equatable: ^2.0.7 diff --git a/forge2d_game/step_06/windows/runner/Runner.rc b/forge2d_game/step_06/windows/runner/Runner.rc index 9d8cc6bf49..a95e8e246b 100644 --- a/forge2d_game/step_06/windows/runner/Runner.rc +++ b/forge2d_game/step_06/windows/runner/Runner.rc @@ -93,7 +93,7 @@ BEGIN VALUE "FileDescription", "forge2d_game" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "InternalName", "forge2d_game" "\0" - VALUE "LegalCopyright", "Copyright (C) 2024 com.example. All rights reserved." "\0" + VALUE "LegalCopyright", "Copyright (C) 2025 com.example. All rights reserved." "\0" VALUE "OriginalFilename", "forge2d_game.exe" "\0" VALUE "ProductName", "forge2d_game" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" diff --git a/forge2d_game/step_07/android/app/src/main/kotlin/com/example/forge2d_game/MainActivity.kt b/forge2d_game/step_07/android/app/src/main/kotlin/com/example/forge2d_game/MainActivity.kt index e9323498dd..459f03328b 100644 --- a/forge2d_game/step_07/android/app/src/main/kotlin/com/example/forge2d_game/MainActivity.kt +++ b/forge2d_game/step_07/android/app/src/main/kotlin/com/example/forge2d_game/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.forge2d_game import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/forge2d_game/step_07/macos/Runner/Configs/AppInfo.xcconfig b/forge2d_game/step_07/macos/Runner/Configs/AppInfo.xcconfig index d425581497..89320b1f52 100644 --- a/forge2d_game/step_07/macos/Runner/Configs/AppInfo.xcconfig +++ b/forge2d_game/step_07/macos/Runner/Configs/AppInfo.xcconfig @@ -11,4 +11,4 @@ PRODUCT_NAME = forge2d_game PRODUCT_BUNDLE_IDENTIFIER = com.example.forge2dGame // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. diff --git a/forge2d_game/step_07/pubspec.yaml b/forge2d_game/step_07/pubspec.yaml index 7221e48d01..0ab0aeaf08 100644 --- a/forge2d_game/step_07/pubspec.yaml +++ b/forge2d_game/step_07/pubspec.yaml @@ -10,9 +10,9 @@ dependencies: flutter: sdk: flutter characters: ^1.3.0 - flame: ^1.22.0 - flame_forge2d: ^0.18.2+3 - flame_kenney_xml: ^0.1.1+3 + flame: ^1.23.0 + flame_forge2d: ^0.18.2+4 + flame_kenney_xml: ^0.1.1+4 xml: ^6.5.0 equatable: ^2.0.7 diff --git a/forge2d_game/step_07/windows/runner/Runner.rc b/forge2d_game/step_07/windows/runner/Runner.rc index 9d8cc6bf49..a95e8e246b 100644 --- a/forge2d_game/step_07/windows/runner/Runner.rc +++ b/forge2d_game/step_07/windows/runner/Runner.rc @@ -93,7 +93,7 @@ BEGIN VALUE "FileDescription", "forge2d_game" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "InternalName", "forge2d_game" "\0" - VALUE "LegalCopyright", "Copyright (C) 2024 com.example. All rights reserved." "\0" + VALUE "LegalCopyright", "Copyright (C) 2025 com.example. All rights reserved." "\0" VALUE "OriginalFilename", "forge2d_game.exe" "\0" VALUE "ProductName", "forge2d_game" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" From 3436dc32283196964810a31cf0c6f666af626e2e Mon Sep 17 00:00:00 2001 From: Brett Morgan Date: Wed, 22 Jan 2025 14:44:27 +1100 Subject: [PATCH 100/108] Update `generate_crossword` --- .../kotlin/com/example/generate_crossword/MainActivity.kt | 2 +- .../step_02/macos/Runner/Configs/AppInfo.xcconfig | 2 +- generate_crossword/step_02/pubspec.yaml | 6 +++--- generate_crossword/step_02/windows/runner/Runner.rc | 2 +- .../kotlin/com/example/generate_crossword/MainActivity.kt | 2 +- .../step_03/macos/Runner/Configs/AppInfo.xcconfig | 2 +- generate_crossword/step_03/pubspec.yaml | 6 +++--- generate_crossword/step_03/windows/runner/Runner.rc | 2 +- .../kotlin/com/example/generate_crossword/MainActivity.kt | 2 +- .../step_04/macos/Runner/Configs/AppInfo.xcconfig | 2 +- generate_crossword/step_04/pubspec.yaml | 6 +++--- generate_crossword/step_04/windows/runner/Runner.rc | 2 +- .../kotlin/com/example/generate_crossword/MainActivity.kt | 2 +- .../step_05_a/macos/Runner/Configs/AppInfo.xcconfig | 2 +- generate_crossword/step_05_a/pubspec.yaml | 6 +++--- generate_crossword/step_05_a/windows/runner/Runner.rc | 2 +- .../kotlin/com/example/generate_crossword/MainActivity.kt | 2 +- .../step_05_b/macos/Runner/Configs/AppInfo.xcconfig | 2 +- generate_crossword/step_05_b/pubspec.yaml | 6 +++--- generate_crossword/step_05_b/windows/runner/Runner.rc | 2 +- .../kotlin/com/example/generate_crossword/MainActivity.kt | 2 +- .../step_05_c/macos/Runner/Configs/AppInfo.xcconfig | 2 +- generate_crossword/step_05_c/pubspec.yaml | 6 +++--- generate_crossword/step_05_c/windows/runner/Runner.rc | 2 +- .../kotlin/com/example/generate_crossword/MainActivity.kt | 2 +- .../step_06/macos/Runner/Configs/AppInfo.xcconfig | 2 +- generate_crossword/step_06/pubspec.yaml | 6 +++--- generate_crossword/step_06/windows/runner/Runner.rc | 2 +- .../kotlin/com/example/generate_crossword/MainActivity.kt | 2 +- .../step_07/macos/Runner/Configs/AppInfo.xcconfig | 2 +- generate_crossword/step_07/pubspec.yaml | 6 +++--- generate_crossword/step_07/windows/runner/Runner.rc | 2 +- .../kotlin/com/example/generate_crossword/MainActivity.kt | 2 +- .../step_08/macos/Runner/Configs/AppInfo.xcconfig | 2 +- generate_crossword/step_08/pubspec.yaml | 6 +++--- generate_crossword/step_08/windows/runner/Runner.rc | 2 +- .../kotlin/com/example/generate_crossword/MainActivity.kt | 2 +- .../step_09/macos/Runner/Configs/AppInfo.xcconfig | 2 +- generate_crossword/step_09/pubspec.yaml | 6 +++--- generate_crossword/step_09/windows/runner/Runner.rc | 2 +- 40 files changed, 60 insertions(+), 60 deletions(-) diff --git a/generate_crossword/step_02/android/app/src/main/kotlin/com/example/generate_crossword/MainActivity.kt b/generate_crossword/step_02/android/app/src/main/kotlin/com/example/generate_crossword/MainActivity.kt index e1bbbdcb4c..7011ed9ff4 100644 --- a/generate_crossword/step_02/android/app/src/main/kotlin/com/example/generate_crossword/MainActivity.kt +++ b/generate_crossword/step_02/android/app/src/main/kotlin/com/example/generate_crossword/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.generate_crossword import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/generate_crossword/step_02/macos/Runner/Configs/AppInfo.xcconfig b/generate_crossword/step_02/macos/Runner/Configs/AppInfo.xcconfig index 4679c2a912..ee84b04ec4 100644 --- a/generate_crossword/step_02/macos/Runner/Configs/AppInfo.xcconfig +++ b/generate_crossword/step_02/macos/Runner/Configs/AppInfo.xcconfig @@ -11,4 +11,4 @@ PRODUCT_NAME = generate_crossword PRODUCT_BUNDLE_IDENTIFIER = com.example.generateCrossword // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. diff --git a/generate_crossword/step_02/pubspec.yaml b/generate_crossword/step_02/pubspec.yaml index 0401ca9491..873a519cb9 100644 --- a/generate_crossword/step_02/pubspec.yaml +++ b/generate_crossword/step_02/pubspec.yaml @@ -10,7 +10,7 @@ dependencies: flutter: sdk: flutter built_collection: ^5.1.1 - built_value: ^8.9.2 + built_value: ^8.9.3 characters: ^1.3.0 flutter_riverpod: ^2.6.1 intl: ^0.20.1 @@ -22,8 +22,8 @@ dev_dependencies: flutter_test: sdk: flutter flutter_lints: ^5.0.0 - build_runner: ^2.4.13 - built_value_generator: ^8.9.2 + build_runner: ^2.4.14 + built_value_generator: ^8.9.3 custom_lint: ^0.7.0 riverpod_generator: ^2.6.3 riverpod_lint: ^2.6.3 diff --git a/generate_crossword/step_02/windows/runner/Runner.rc b/generate_crossword/step_02/windows/runner/Runner.rc index c975d9e9a1..ca49aa9839 100644 --- a/generate_crossword/step_02/windows/runner/Runner.rc +++ b/generate_crossword/step_02/windows/runner/Runner.rc @@ -93,7 +93,7 @@ BEGIN VALUE "FileDescription", "generate_crossword" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "InternalName", "generate_crossword" "\0" - VALUE "LegalCopyright", "Copyright (C) 2024 com.example. All rights reserved." "\0" + VALUE "LegalCopyright", "Copyright (C) 2025 com.example. All rights reserved." "\0" VALUE "OriginalFilename", "generate_crossword.exe" "\0" VALUE "ProductName", "generate_crossword" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" diff --git a/generate_crossword/step_03/android/app/src/main/kotlin/com/example/generate_crossword/MainActivity.kt b/generate_crossword/step_03/android/app/src/main/kotlin/com/example/generate_crossword/MainActivity.kt index e1bbbdcb4c..7011ed9ff4 100644 --- a/generate_crossword/step_03/android/app/src/main/kotlin/com/example/generate_crossword/MainActivity.kt +++ b/generate_crossword/step_03/android/app/src/main/kotlin/com/example/generate_crossword/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.generate_crossword import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/generate_crossword/step_03/macos/Runner/Configs/AppInfo.xcconfig b/generate_crossword/step_03/macos/Runner/Configs/AppInfo.xcconfig index 4679c2a912..ee84b04ec4 100644 --- a/generate_crossword/step_03/macos/Runner/Configs/AppInfo.xcconfig +++ b/generate_crossword/step_03/macos/Runner/Configs/AppInfo.xcconfig @@ -11,4 +11,4 @@ PRODUCT_NAME = generate_crossword PRODUCT_BUNDLE_IDENTIFIER = com.example.generateCrossword // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. diff --git a/generate_crossword/step_03/pubspec.yaml b/generate_crossword/step_03/pubspec.yaml index 20751448cc..5741edfdd6 100644 --- a/generate_crossword/step_03/pubspec.yaml +++ b/generate_crossword/step_03/pubspec.yaml @@ -10,7 +10,7 @@ dependencies: flutter: sdk: flutter built_collection: ^5.1.1 - built_value: ^8.9.2 + built_value: ^8.9.3 characters: ^1.3.0 flutter_riverpod: ^2.6.1 intl: ^0.20.1 @@ -22,8 +22,8 @@ dev_dependencies: flutter_test: sdk: flutter flutter_lints: ^5.0.0 - build_runner: ^2.4.13 - built_value_generator: ^8.9.2 + build_runner: ^2.4.14 + built_value_generator: ^8.9.3 custom_lint: ^0.7.0 riverpod_generator: ^2.6.3 riverpod_lint: ^2.6.3 diff --git a/generate_crossword/step_03/windows/runner/Runner.rc b/generate_crossword/step_03/windows/runner/Runner.rc index c975d9e9a1..ca49aa9839 100644 --- a/generate_crossword/step_03/windows/runner/Runner.rc +++ b/generate_crossword/step_03/windows/runner/Runner.rc @@ -93,7 +93,7 @@ BEGIN VALUE "FileDescription", "generate_crossword" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "InternalName", "generate_crossword" "\0" - VALUE "LegalCopyright", "Copyright (C) 2024 com.example. All rights reserved." "\0" + VALUE "LegalCopyright", "Copyright (C) 2025 com.example. All rights reserved." "\0" VALUE "OriginalFilename", "generate_crossword.exe" "\0" VALUE "ProductName", "generate_crossword" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" diff --git a/generate_crossword/step_04/android/app/src/main/kotlin/com/example/generate_crossword/MainActivity.kt b/generate_crossword/step_04/android/app/src/main/kotlin/com/example/generate_crossword/MainActivity.kt index e1bbbdcb4c..7011ed9ff4 100644 --- a/generate_crossword/step_04/android/app/src/main/kotlin/com/example/generate_crossword/MainActivity.kt +++ b/generate_crossword/step_04/android/app/src/main/kotlin/com/example/generate_crossword/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.generate_crossword import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/generate_crossword/step_04/macos/Runner/Configs/AppInfo.xcconfig b/generate_crossword/step_04/macos/Runner/Configs/AppInfo.xcconfig index 4679c2a912..ee84b04ec4 100644 --- a/generate_crossword/step_04/macos/Runner/Configs/AppInfo.xcconfig +++ b/generate_crossword/step_04/macos/Runner/Configs/AppInfo.xcconfig @@ -11,4 +11,4 @@ PRODUCT_NAME = generate_crossword PRODUCT_BUNDLE_IDENTIFIER = com.example.generateCrossword // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. diff --git a/generate_crossword/step_04/pubspec.yaml b/generate_crossword/step_04/pubspec.yaml index 20751448cc..5741edfdd6 100644 --- a/generate_crossword/step_04/pubspec.yaml +++ b/generate_crossword/step_04/pubspec.yaml @@ -10,7 +10,7 @@ dependencies: flutter: sdk: flutter built_collection: ^5.1.1 - built_value: ^8.9.2 + built_value: ^8.9.3 characters: ^1.3.0 flutter_riverpod: ^2.6.1 intl: ^0.20.1 @@ -22,8 +22,8 @@ dev_dependencies: flutter_test: sdk: flutter flutter_lints: ^5.0.0 - build_runner: ^2.4.13 - built_value_generator: ^8.9.2 + build_runner: ^2.4.14 + built_value_generator: ^8.9.3 custom_lint: ^0.7.0 riverpod_generator: ^2.6.3 riverpod_lint: ^2.6.3 diff --git a/generate_crossword/step_04/windows/runner/Runner.rc b/generate_crossword/step_04/windows/runner/Runner.rc index c975d9e9a1..ca49aa9839 100644 --- a/generate_crossword/step_04/windows/runner/Runner.rc +++ b/generate_crossword/step_04/windows/runner/Runner.rc @@ -93,7 +93,7 @@ BEGIN VALUE "FileDescription", "generate_crossword" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "InternalName", "generate_crossword" "\0" - VALUE "LegalCopyright", "Copyright (C) 2024 com.example. All rights reserved." "\0" + VALUE "LegalCopyright", "Copyright (C) 2025 com.example. All rights reserved." "\0" VALUE "OriginalFilename", "generate_crossword.exe" "\0" VALUE "ProductName", "generate_crossword" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" diff --git a/generate_crossword/step_05_a/android/app/src/main/kotlin/com/example/generate_crossword/MainActivity.kt b/generate_crossword/step_05_a/android/app/src/main/kotlin/com/example/generate_crossword/MainActivity.kt index e1bbbdcb4c..7011ed9ff4 100644 --- a/generate_crossword/step_05_a/android/app/src/main/kotlin/com/example/generate_crossword/MainActivity.kt +++ b/generate_crossword/step_05_a/android/app/src/main/kotlin/com/example/generate_crossword/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.generate_crossword import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/generate_crossword/step_05_a/macos/Runner/Configs/AppInfo.xcconfig b/generate_crossword/step_05_a/macos/Runner/Configs/AppInfo.xcconfig index 4679c2a912..ee84b04ec4 100644 --- a/generate_crossword/step_05_a/macos/Runner/Configs/AppInfo.xcconfig +++ b/generate_crossword/step_05_a/macos/Runner/Configs/AppInfo.xcconfig @@ -11,4 +11,4 @@ PRODUCT_NAME = generate_crossword PRODUCT_BUNDLE_IDENTIFIER = com.example.generateCrossword // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. diff --git a/generate_crossword/step_05_a/pubspec.yaml b/generate_crossword/step_05_a/pubspec.yaml index 20751448cc..5741edfdd6 100644 --- a/generate_crossword/step_05_a/pubspec.yaml +++ b/generate_crossword/step_05_a/pubspec.yaml @@ -10,7 +10,7 @@ dependencies: flutter: sdk: flutter built_collection: ^5.1.1 - built_value: ^8.9.2 + built_value: ^8.9.3 characters: ^1.3.0 flutter_riverpod: ^2.6.1 intl: ^0.20.1 @@ -22,8 +22,8 @@ dev_dependencies: flutter_test: sdk: flutter flutter_lints: ^5.0.0 - build_runner: ^2.4.13 - built_value_generator: ^8.9.2 + build_runner: ^2.4.14 + built_value_generator: ^8.9.3 custom_lint: ^0.7.0 riverpod_generator: ^2.6.3 riverpod_lint: ^2.6.3 diff --git a/generate_crossword/step_05_a/windows/runner/Runner.rc b/generate_crossword/step_05_a/windows/runner/Runner.rc index c975d9e9a1..ca49aa9839 100644 --- a/generate_crossword/step_05_a/windows/runner/Runner.rc +++ b/generate_crossword/step_05_a/windows/runner/Runner.rc @@ -93,7 +93,7 @@ BEGIN VALUE "FileDescription", "generate_crossword" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "InternalName", "generate_crossword" "\0" - VALUE "LegalCopyright", "Copyright (C) 2024 com.example. All rights reserved." "\0" + VALUE "LegalCopyright", "Copyright (C) 2025 com.example. All rights reserved." "\0" VALUE "OriginalFilename", "generate_crossword.exe" "\0" VALUE "ProductName", "generate_crossword" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" diff --git a/generate_crossword/step_05_b/android/app/src/main/kotlin/com/example/generate_crossword/MainActivity.kt b/generate_crossword/step_05_b/android/app/src/main/kotlin/com/example/generate_crossword/MainActivity.kt index e1bbbdcb4c..7011ed9ff4 100644 --- a/generate_crossword/step_05_b/android/app/src/main/kotlin/com/example/generate_crossword/MainActivity.kt +++ b/generate_crossword/step_05_b/android/app/src/main/kotlin/com/example/generate_crossword/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.generate_crossword import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/generate_crossword/step_05_b/macos/Runner/Configs/AppInfo.xcconfig b/generate_crossword/step_05_b/macos/Runner/Configs/AppInfo.xcconfig index 4679c2a912..ee84b04ec4 100644 --- a/generate_crossword/step_05_b/macos/Runner/Configs/AppInfo.xcconfig +++ b/generate_crossword/step_05_b/macos/Runner/Configs/AppInfo.xcconfig @@ -11,4 +11,4 @@ PRODUCT_NAME = generate_crossword PRODUCT_BUNDLE_IDENTIFIER = com.example.generateCrossword // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. diff --git a/generate_crossword/step_05_b/pubspec.yaml b/generate_crossword/step_05_b/pubspec.yaml index 20751448cc..5741edfdd6 100644 --- a/generate_crossword/step_05_b/pubspec.yaml +++ b/generate_crossword/step_05_b/pubspec.yaml @@ -10,7 +10,7 @@ dependencies: flutter: sdk: flutter built_collection: ^5.1.1 - built_value: ^8.9.2 + built_value: ^8.9.3 characters: ^1.3.0 flutter_riverpod: ^2.6.1 intl: ^0.20.1 @@ -22,8 +22,8 @@ dev_dependencies: flutter_test: sdk: flutter flutter_lints: ^5.0.0 - build_runner: ^2.4.13 - built_value_generator: ^8.9.2 + build_runner: ^2.4.14 + built_value_generator: ^8.9.3 custom_lint: ^0.7.0 riverpod_generator: ^2.6.3 riverpod_lint: ^2.6.3 diff --git a/generate_crossword/step_05_b/windows/runner/Runner.rc b/generate_crossword/step_05_b/windows/runner/Runner.rc index c975d9e9a1..ca49aa9839 100644 --- a/generate_crossword/step_05_b/windows/runner/Runner.rc +++ b/generate_crossword/step_05_b/windows/runner/Runner.rc @@ -93,7 +93,7 @@ BEGIN VALUE "FileDescription", "generate_crossword" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "InternalName", "generate_crossword" "\0" - VALUE "LegalCopyright", "Copyright (C) 2024 com.example. All rights reserved." "\0" + VALUE "LegalCopyright", "Copyright (C) 2025 com.example. All rights reserved." "\0" VALUE "OriginalFilename", "generate_crossword.exe" "\0" VALUE "ProductName", "generate_crossword" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" diff --git a/generate_crossword/step_05_c/android/app/src/main/kotlin/com/example/generate_crossword/MainActivity.kt b/generate_crossword/step_05_c/android/app/src/main/kotlin/com/example/generate_crossword/MainActivity.kt index e1bbbdcb4c..7011ed9ff4 100644 --- a/generate_crossword/step_05_c/android/app/src/main/kotlin/com/example/generate_crossword/MainActivity.kt +++ b/generate_crossword/step_05_c/android/app/src/main/kotlin/com/example/generate_crossword/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.generate_crossword import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/generate_crossword/step_05_c/macos/Runner/Configs/AppInfo.xcconfig b/generate_crossword/step_05_c/macos/Runner/Configs/AppInfo.xcconfig index 4679c2a912..ee84b04ec4 100644 --- a/generate_crossword/step_05_c/macos/Runner/Configs/AppInfo.xcconfig +++ b/generate_crossword/step_05_c/macos/Runner/Configs/AppInfo.xcconfig @@ -11,4 +11,4 @@ PRODUCT_NAME = generate_crossword PRODUCT_BUNDLE_IDENTIFIER = com.example.generateCrossword // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. diff --git a/generate_crossword/step_05_c/pubspec.yaml b/generate_crossword/step_05_c/pubspec.yaml index 20751448cc..5741edfdd6 100644 --- a/generate_crossword/step_05_c/pubspec.yaml +++ b/generate_crossword/step_05_c/pubspec.yaml @@ -10,7 +10,7 @@ dependencies: flutter: sdk: flutter built_collection: ^5.1.1 - built_value: ^8.9.2 + built_value: ^8.9.3 characters: ^1.3.0 flutter_riverpod: ^2.6.1 intl: ^0.20.1 @@ -22,8 +22,8 @@ dev_dependencies: flutter_test: sdk: flutter flutter_lints: ^5.0.0 - build_runner: ^2.4.13 - built_value_generator: ^8.9.2 + build_runner: ^2.4.14 + built_value_generator: ^8.9.3 custom_lint: ^0.7.0 riverpod_generator: ^2.6.3 riverpod_lint: ^2.6.3 diff --git a/generate_crossword/step_05_c/windows/runner/Runner.rc b/generate_crossword/step_05_c/windows/runner/Runner.rc index c975d9e9a1..ca49aa9839 100644 --- a/generate_crossword/step_05_c/windows/runner/Runner.rc +++ b/generate_crossword/step_05_c/windows/runner/Runner.rc @@ -93,7 +93,7 @@ BEGIN VALUE "FileDescription", "generate_crossword" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "InternalName", "generate_crossword" "\0" - VALUE "LegalCopyright", "Copyright (C) 2024 com.example. All rights reserved." "\0" + VALUE "LegalCopyright", "Copyright (C) 2025 com.example. All rights reserved." "\0" VALUE "OriginalFilename", "generate_crossword.exe" "\0" VALUE "ProductName", "generate_crossword" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" diff --git a/generate_crossword/step_06/android/app/src/main/kotlin/com/example/generate_crossword/MainActivity.kt b/generate_crossword/step_06/android/app/src/main/kotlin/com/example/generate_crossword/MainActivity.kt index e1bbbdcb4c..7011ed9ff4 100644 --- a/generate_crossword/step_06/android/app/src/main/kotlin/com/example/generate_crossword/MainActivity.kt +++ b/generate_crossword/step_06/android/app/src/main/kotlin/com/example/generate_crossword/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.generate_crossword import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/generate_crossword/step_06/macos/Runner/Configs/AppInfo.xcconfig b/generate_crossword/step_06/macos/Runner/Configs/AppInfo.xcconfig index 4679c2a912..ee84b04ec4 100644 --- a/generate_crossword/step_06/macos/Runner/Configs/AppInfo.xcconfig +++ b/generate_crossword/step_06/macos/Runner/Configs/AppInfo.xcconfig @@ -11,4 +11,4 @@ PRODUCT_NAME = generate_crossword PRODUCT_BUNDLE_IDENTIFIER = com.example.generateCrossword // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. diff --git a/generate_crossword/step_06/pubspec.yaml b/generate_crossword/step_06/pubspec.yaml index 20751448cc..5741edfdd6 100644 --- a/generate_crossword/step_06/pubspec.yaml +++ b/generate_crossword/step_06/pubspec.yaml @@ -10,7 +10,7 @@ dependencies: flutter: sdk: flutter built_collection: ^5.1.1 - built_value: ^8.9.2 + built_value: ^8.9.3 characters: ^1.3.0 flutter_riverpod: ^2.6.1 intl: ^0.20.1 @@ -22,8 +22,8 @@ dev_dependencies: flutter_test: sdk: flutter flutter_lints: ^5.0.0 - build_runner: ^2.4.13 - built_value_generator: ^8.9.2 + build_runner: ^2.4.14 + built_value_generator: ^8.9.3 custom_lint: ^0.7.0 riverpod_generator: ^2.6.3 riverpod_lint: ^2.6.3 diff --git a/generate_crossword/step_06/windows/runner/Runner.rc b/generate_crossword/step_06/windows/runner/Runner.rc index c975d9e9a1..ca49aa9839 100644 --- a/generate_crossword/step_06/windows/runner/Runner.rc +++ b/generate_crossword/step_06/windows/runner/Runner.rc @@ -93,7 +93,7 @@ BEGIN VALUE "FileDescription", "generate_crossword" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "InternalName", "generate_crossword" "\0" - VALUE "LegalCopyright", "Copyright (C) 2024 com.example. All rights reserved." "\0" + VALUE "LegalCopyright", "Copyright (C) 2025 com.example. All rights reserved." "\0" VALUE "OriginalFilename", "generate_crossword.exe" "\0" VALUE "ProductName", "generate_crossword" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" diff --git a/generate_crossword/step_07/android/app/src/main/kotlin/com/example/generate_crossword/MainActivity.kt b/generate_crossword/step_07/android/app/src/main/kotlin/com/example/generate_crossword/MainActivity.kt index e1bbbdcb4c..7011ed9ff4 100644 --- a/generate_crossword/step_07/android/app/src/main/kotlin/com/example/generate_crossword/MainActivity.kt +++ b/generate_crossword/step_07/android/app/src/main/kotlin/com/example/generate_crossword/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.generate_crossword import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/generate_crossword/step_07/macos/Runner/Configs/AppInfo.xcconfig b/generate_crossword/step_07/macos/Runner/Configs/AppInfo.xcconfig index 4679c2a912..ee84b04ec4 100644 --- a/generate_crossword/step_07/macos/Runner/Configs/AppInfo.xcconfig +++ b/generate_crossword/step_07/macos/Runner/Configs/AppInfo.xcconfig @@ -11,4 +11,4 @@ PRODUCT_NAME = generate_crossword PRODUCT_BUNDLE_IDENTIFIER = com.example.generateCrossword // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. diff --git a/generate_crossword/step_07/pubspec.yaml b/generate_crossword/step_07/pubspec.yaml index 20751448cc..5741edfdd6 100644 --- a/generate_crossword/step_07/pubspec.yaml +++ b/generate_crossword/step_07/pubspec.yaml @@ -10,7 +10,7 @@ dependencies: flutter: sdk: flutter built_collection: ^5.1.1 - built_value: ^8.9.2 + built_value: ^8.9.3 characters: ^1.3.0 flutter_riverpod: ^2.6.1 intl: ^0.20.1 @@ -22,8 +22,8 @@ dev_dependencies: flutter_test: sdk: flutter flutter_lints: ^5.0.0 - build_runner: ^2.4.13 - built_value_generator: ^8.9.2 + build_runner: ^2.4.14 + built_value_generator: ^8.9.3 custom_lint: ^0.7.0 riverpod_generator: ^2.6.3 riverpod_lint: ^2.6.3 diff --git a/generate_crossword/step_07/windows/runner/Runner.rc b/generate_crossword/step_07/windows/runner/Runner.rc index c975d9e9a1..ca49aa9839 100644 --- a/generate_crossword/step_07/windows/runner/Runner.rc +++ b/generate_crossword/step_07/windows/runner/Runner.rc @@ -93,7 +93,7 @@ BEGIN VALUE "FileDescription", "generate_crossword" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "InternalName", "generate_crossword" "\0" - VALUE "LegalCopyright", "Copyright (C) 2024 com.example. All rights reserved." "\0" + VALUE "LegalCopyright", "Copyright (C) 2025 com.example. All rights reserved." "\0" VALUE "OriginalFilename", "generate_crossword.exe" "\0" VALUE "ProductName", "generate_crossword" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" diff --git a/generate_crossword/step_08/android/app/src/main/kotlin/com/example/generate_crossword/MainActivity.kt b/generate_crossword/step_08/android/app/src/main/kotlin/com/example/generate_crossword/MainActivity.kt index e1bbbdcb4c..7011ed9ff4 100644 --- a/generate_crossword/step_08/android/app/src/main/kotlin/com/example/generate_crossword/MainActivity.kt +++ b/generate_crossword/step_08/android/app/src/main/kotlin/com/example/generate_crossword/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.generate_crossword import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/generate_crossword/step_08/macos/Runner/Configs/AppInfo.xcconfig b/generate_crossword/step_08/macos/Runner/Configs/AppInfo.xcconfig index 4679c2a912..ee84b04ec4 100644 --- a/generate_crossword/step_08/macos/Runner/Configs/AppInfo.xcconfig +++ b/generate_crossword/step_08/macos/Runner/Configs/AppInfo.xcconfig @@ -11,4 +11,4 @@ PRODUCT_NAME = generate_crossword PRODUCT_BUNDLE_IDENTIFIER = com.example.generateCrossword // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. diff --git a/generate_crossword/step_08/pubspec.yaml b/generate_crossword/step_08/pubspec.yaml index 20751448cc..5741edfdd6 100644 --- a/generate_crossword/step_08/pubspec.yaml +++ b/generate_crossword/step_08/pubspec.yaml @@ -10,7 +10,7 @@ dependencies: flutter: sdk: flutter built_collection: ^5.1.1 - built_value: ^8.9.2 + built_value: ^8.9.3 characters: ^1.3.0 flutter_riverpod: ^2.6.1 intl: ^0.20.1 @@ -22,8 +22,8 @@ dev_dependencies: flutter_test: sdk: flutter flutter_lints: ^5.0.0 - build_runner: ^2.4.13 - built_value_generator: ^8.9.2 + build_runner: ^2.4.14 + built_value_generator: ^8.9.3 custom_lint: ^0.7.0 riverpod_generator: ^2.6.3 riverpod_lint: ^2.6.3 diff --git a/generate_crossword/step_08/windows/runner/Runner.rc b/generate_crossword/step_08/windows/runner/Runner.rc index c975d9e9a1..ca49aa9839 100644 --- a/generate_crossword/step_08/windows/runner/Runner.rc +++ b/generate_crossword/step_08/windows/runner/Runner.rc @@ -93,7 +93,7 @@ BEGIN VALUE "FileDescription", "generate_crossword" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "InternalName", "generate_crossword" "\0" - VALUE "LegalCopyright", "Copyright (C) 2024 com.example. All rights reserved." "\0" + VALUE "LegalCopyright", "Copyright (C) 2025 com.example. All rights reserved." "\0" VALUE "OriginalFilename", "generate_crossword.exe" "\0" VALUE "ProductName", "generate_crossword" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" diff --git a/generate_crossword/step_09/android/app/src/main/kotlin/com/example/generate_crossword/MainActivity.kt b/generate_crossword/step_09/android/app/src/main/kotlin/com/example/generate_crossword/MainActivity.kt index e1bbbdcb4c..7011ed9ff4 100644 --- a/generate_crossword/step_09/android/app/src/main/kotlin/com/example/generate_crossword/MainActivity.kt +++ b/generate_crossword/step_09/android/app/src/main/kotlin/com/example/generate_crossword/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.generate_crossword import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/generate_crossword/step_09/macos/Runner/Configs/AppInfo.xcconfig b/generate_crossword/step_09/macos/Runner/Configs/AppInfo.xcconfig index 4679c2a912..ee84b04ec4 100644 --- a/generate_crossword/step_09/macos/Runner/Configs/AppInfo.xcconfig +++ b/generate_crossword/step_09/macos/Runner/Configs/AppInfo.xcconfig @@ -11,4 +11,4 @@ PRODUCT_NAME = generate_crossword PRODUCT_BUNDLE_IDENTIFIER = com.example.generateCrossword // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. diff --git a/generate_crossword/step_09/pubspec.yaml b/generate_crossword/step_09/pubspec.yaml index 20751448cc..5741edfdd6 100644 --- a/generate_crossword/step_09/pubspec.yaml +++ b/generate_crossword/step_09/pubspec.yaml @@ -10,7 +10,7 @@ dependencies: flutter: sdk: flutter built_collection: ^5.1.1 - built_value: ^8.9.2 + built_value: ^8.9.3 characters: ^1.3.0 flutter_riverpod: ^2.6.1 intl: ^0.20.1 @@ -22,8 +22,8 @@ dev_dependencies: flutter_test: sdk: flutter flutter_lints: ^5.0.0 - build_runner: ^2.4.13 - built_value_generator: ^8.9.2 + build_runner: ^2.4.14 + built_value_generator: ^8.9.3 custom_lint: ^0.7.0 riverpod_generator: ^2.6.3 riverpod_lint: ^2.6.3 diff --git a/generate_crossword/step_09/windows/runner/Runner.rc b/generate_crossword/step_09/windows/runner/Runner.rc index c975d9e9a1..ca49aa9839 100644 --- a/generate_crossword/step_09/windows/runner/Runner.rc +++ b/generate_crossword/step_09/windows/runner/Runner.rc @@ -93,7 +93,7 @@ BEGIN VALUE "FileDescription", "generate_crossword" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "InternalName", "generate_crossword" "\0" - VALUE "LegalCopyright", "Copyright (C) 2024 com.example. All rights reserved." "\0" + VALUE "LegalCopyright", "Copyright (C) 2025 com.example. All rights reserved." "\0" VALUE "OriginalFilename", "generate_crossword.exe" "\0" VALUE "ProductName", "generate_crossword" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" From 143acc8f887f28887a21ddf223b445f48aef0193 Mon Sep 17 00:00:00 2001 From: Brett Morgan Date: Wed, 22 Jan 2025 14:50:51 +1100 Subject: [PATCH 101/108] Update `github-client` --- .../macos/Runner/Configs/AppInfo.xcconfig | 2 +- github-client/step_03/pubspec.yaml | 2 +- .../step_03/windows/runner/Runner.rc | 2 +- .../macos/Runner.xcodeproj/project.pbxproj | 112 +++++++++--------- .../macos/Runner/Configs/AppInfo.xcconfig | 2 +- github-client/step_04/pubspec.yaml | 4 +- .../step_04/windows/runner/Runner.rc | 2 +- .../macos/Runner.xcodeproj/project.pbxproj | 112 +++++++++--------- .../macos/Runner/Configs/AppInfo.xcconfig | 2 +- github-client/step_05/pubspec.yaml | 4 +- .../step_05/windows/runner/Runner.rc | 2 +- .../macos/Runner.xcodeproj/project.pbxproj | 112 +++++++++--------- .../macos/Runner/Configs/AppInfo.xcconfig | 2 +- github-client/step_06/pubspec.yaml | 4 +- .../step_06/windows/runner/Runner.rc | 2 +- .../macos/Runner.xcodeproj/project.pbxproj | 112 +++++++++--------- .../macos/Runner/Configs/AppInfo.xcconfig | 2 +- github-client/step_07/pubspec.yaml | 4 +- .../step_07/windows/runner/Runner.rc | 2 +- github-client/window_to_front/pubspec.yaml | 2 +- 20 files changed, 244 insertions(+), 244 deletions(-) diff --git a/github-client/step_03/macos/Runner/Configs/AppInfo.xcconfig b/github-client/step_03/macos/Runner/Configs/AppInfo.xcconfig index 4fe9e159bd..a722abdb4b 100644 --- a/github-client/step_03/macos/Runner/Configs/AppInfo.xcconfig +++ b/github-client/step_03/macos/Runner/Configs/AppInfo.xcconfig @@ -11,4 +11,4 @@ PRODUCT_NAME = github_client PRODUCT_BUNDLE_IDENTIFIER = com.example.githubClient // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. diff --git a/github-client/step_03/pubspec.yaml b/github-client/step_03/pubspec.yaml index 0278c4a5c9..6bddde2c65 100644 --- a/github-client/step_03/pubspec.yaml +++ b/github-client/step_03/pubspec.yaml @@ -19,7 +19,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev version: 1.0.0+1 environment: - sdk: ^3.7.0-236.0.dev + sdk: ^3.7.0-0 # Dependencies specify other packages that your package needs in order to work. # To automatically upgrade your package dependencies to the latest versions diff --git a/github-client/step_03/windows/runner/Runner.rc b/github-client/step_03/windows/runner/Runner.rc index 61cffd2cc2..c361d86877 100644 --- a/github-client/step_03/windows/runner/Runner.rc +++ b/github-client/step_03/windows/runner/Runner.rc @@ -93,7 +93,7 @@ BEGIN VALUE "FileDescription", "github_client" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "InternalName", "github_client" "\0" - VALUE "LegalCopyright", "Copyright (C) 2024 com.example. All rights reserved." "\0" + VALUE "LegalCopyright", "Copyright (C) 2025 com.example. All rights reserved." "\0" VALUE "OriginalFilename", "github_client.exe" "\0" VALUE "ProductName", "github_client" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" diff --git a/github-client/step_04/macos/Runner.xcodeproj/project.pbxproj b/github-client/step_04/macos/Runner.xcodeproj/project.pbxproj index 7f2b195b2c..e76a023427 100644 --- a/github-client/step_04/macos/Runner.xcodeproj/project.pbxproj +++ b/github-client/step_04/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ - 1B9A5C6874927D5191AD0FB7 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F0334E5381D50182362C01E6 /* Pods_Runner.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - BD53817A686F91402582EDA0 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5D98AB5A9512B719E7847930 /* Pods_RunnerTests.framework */; }; + 4B9F36447ECD7E01E7C23E5E /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DFC8915137E276D71E146E06 /* Pods_Runner.framework */; }; + 5999A2C47A172B9630E0B05B /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6AF9150345997D4716E2B966 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,9 +62,7 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 10B1A52A02B6E43AD84DCE8A /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 2DB5BD147C26211E5F942F51 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 2FBB5A5B46F9FF9BAB4771D0 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 18AC8611E562B098AF3F81FA /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -81,13 +79,15 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 5D98AB5A9512B719E7847930 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 655C369966165A9211B03B86 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 405456754B052AF41B133931 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 4F1F92BA87A2AE9D1F821B29 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 56CAE46EE83992C1B6313E87 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 599372CA31DCEAD4BD64F0D2 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 6039640DDAF4704A3734EE57 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 6AF9150345997D4716E2B966 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - B94A3CC5524819586F1C23AF /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - CC5E7B38BE88420A42E09058 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - F0334E5381D50182362C01E6 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + DFC8915137E276D71E146E06 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - BD53817A686F91402582EDA0 /* Pods_RunnerTests.framework in Frameworks */, + 5999A2C47A172B9630E0B05B /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,27 +103,13 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 1B9A5C6874927D5191AD0FB7 /* Pods_Runner.framework in Frameworks */, + 4B9F36447ECD7E01E7C23E5E /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 2157F81FB5C80C543EC6B1F3 /* Pods */ = { - isa = PBXGroup; - children = ( - CC5E7B38BE88420A42E09058 /* Pods-Runner.debug.xcconfig */, - 2DB5BD147C26211E5F942F51 /* Pods-Runner.release.xcconfig */, - 2FBB5A5B46F9FF9BAB4771D0 /* Pods-Runner.profile.xcconfig */, - 10B1A52A02B6E43AD84DCE8A /* Pods-RunnerTests.debug.xcconfig */, - 655C369966165A9211B03B86 /* Pods-RunnerTests.release.xcconfig */, - B94A3CC5524819586F1C23AF /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; 331C80D6294CF71000263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -151,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 2157F81FB5C80C543EC6B1F3 /* Pods */, + E7AC335EB1C5A39F5707C90D /* Pods */, ); sourceTree = ""; }; @@ -202,12 +188,26 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - F0334E5381D50182362C01E6 /* Pods_Runner.framework */, - 5D98AB5A9512B719E7847930 /* Pods_RunnerTests.framework */, + DFC8915137E276D71E146E06 /* Pods_Runner.framework */, + 6AF9150345997D4716E2B966 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; }; + E7AC335EB1C5A39F5707C90D /* Pods */ = { + isa = PBXGroup; + children = ( + 6039640DDAF4704A3734EE57 /* Pods-Runner.debug.xcconfig */, + 18AC8611E562B098AF3F81FA /* Pods-Runner.release.xcconfig */, + 56CAE46EE83992C1B6313E87 /* Pods-Runner.profile.xcconfig */, + 405456754B052AF41B133931 /* Pods-RunnerTests.debug.xcconfig */, + 4F1F92BA87A2AE9D1F821B29 /* Pods-RunnerTests.release.xcconfig */, + 599372CA31DCEAD4BD64F0D2 /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - E3EA0EC0FBC9811879946C6E /* [CP] Check Pods Manifest.lock */, + 6B97B1686FA6D1B9C5A79E38 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 740F6191F50D945B9EB0405A /* [CP] Check Pods Manifest.lock */, + 76F6452E207F4162FB5F721A /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 068C58F29A3925A6655A7596 /* [CP] Embed Pods Frameworks */, + 5D9B8F4E4BE9E1C0BE3052E2 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,23 +323,6 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 068C58F29A3925A6655A7596 /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -378,7 +361,24 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 740F6191F50D945B9EB0405A /* [CP] Check Pods Manifest.lock */ = { + 5D9B8F4E4BE9E1C0BE3052E2 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; + 6B97B1686FA6D1B9C5A79E38 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -393,14 +393,14 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - E3EA0EC0FBC9811879946C6E /* [CP] Check Pods Manifest.lock */ = { + 76F6452E207F4162FB5F721A /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -415,7 +415,7 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 10B1A52A02B6E43AD84DCE8A /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 405456754B052AF41B133931 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 655C369966165A9211B03B86 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 4F1F92BA87A2AE9D1F821B29 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = B94A3CC5524819586F1C23AF /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 599372CA31DCEAD4BD64F0D2 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/github-client/step_04/macos/Runner/Configs/AppInfo.xcconfig b/github-client/step_04/macos/Runner/Configs/AppInfo.xcconfig index 4fe9e159bd..a722abdb4b 100644 --- a/github-client/step_04/macos/Runner/Configs/AppInfo.xcconfig +++ b/github-client/step_04/macos/Runner/Configs/AppInfo.xcconfig @@ -11,4 +11,4 @@ PRODUCT_NAME = github_client PRODUCT_BUNDLE_IDENTIFIER = com.example.githubClient // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. diff --git a/github-client/step_04/pubspec.yaml b/github-client/step_04/pubspec.yaml index e2e48074c2..9091ee516c 100644 --- a/github-client/step_04/pubspec.yaml +++ b/github-client/step_04/pubspec.yaml @@ -19,7 +19,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev version: 1.0.0+1 environment: - sdk: ^3.7.0-236.0.dev + sdk: ^3.7.0-0 # Dependencies specify other packages that your package needs in order to work. # To automatically upgrade your package dependencies to the latest versions @@ -34,7 +34,7 @@ dependencies: # The following adds the Cupertino Icons font to your application. # Use with the CupertinoIcons class for iOS style icons. cupertino_icons: ^1.0.8 - http: ^1.2.2 + http: ^1.3.0 oauth2: ^2.0.3 url_launcher: ^6.3.1 diff --git a/github-client/step_04/windows/runner/Runner.rc b/github-client/step_04/windows/runner/Runner.rc index 61cffd2cc2..c361d86877 100644 --- a/github-client/step_04/windows/runner/Runner.rc +++ b/github-client/step_04/windows/runner/Runner.rc @@ -93,7 +93,7 @@ BEGIN VALUE "FileDescription", "github_client" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "InternalName", "github_client" "\0" - VALUE "LegalCopyright", "Copyright (C) 2024 com.example. All rights reserved." "\0" + VALUE "LegalCopyright", "Copyright (C) 2025 com.example. All rights reserved." "\0" VALUE "OriginalFilename", "github_client.exe" "\0" VALUE "ProductName", "github_client" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" diff --git a/github-client/step_05/macos/Runner.xcodeproj/project.pbxproj b/github-client/step_05/macos/Runner.xcodeproj/project.pbxproj index 7f2b195b2c..e76a023427 100644 --- a/github-client/step_05/macos/Runner.xcodeproj/project.pbxproj +++ b/github-client/step_05/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ - 1B9A5C6874927D5191AD0FB7 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F0334E5381D50182362C01E6 /* Pods_Runner.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - BD53817A686F91402582EDA0 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5D98AB5A9512B719E7847930 /* Pods_RunnerTests.framework */; }; + 4B9F36447ECD7E01E7C23E5E /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DFC8915137E276D71E146E06 /* Pods_Runner.framework */; }; + 5999A2C47A172B9630E0B05B /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6AF9150345997D4716E2B966 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,9 +62,7 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 10B1A52A02B6E43AD84DCE8A /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 2DB5BD147C26211E5F942F51 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 2FBB5A5B46F9FF9BAB4771D0 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 18AC8611E562B098AF3F81FA /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -81,13 +79,15 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 5D98AB5A9512B719E7847930 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 655C369966165A9211B03B86 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 405456754B052AF41B133931 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 4F1F92BA87A2AE9D1F821B29 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 56CAE46EE83992C1B6313E87 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 599372CA31DCEAD4BD64F0D2 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 6039640DDAF4704A3734EE57 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 6AF9150345997D4716E2B966 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - B94A3CC5524819586F1C23AF /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - CC5E7B38BE88420A42E09058 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - F0334E5381D50182362C01E6 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + DFC8915137E276D71E146E06 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - BD53817A686F91402582EDA0 /* Pods_RunnerTests.framework in Frameworks */, + 5999A2C47A172B9630E0B05B /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,27 +103,13 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 1B9A5C6874927D5191AD0FB7 /* Pods_Runner.framework in Frameworks */, + 4B9F36447ECD7E01E7C23E5E /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 2157F81FB5C80C543EC6B1F3 /* Pods */ = { - isa = PBXGroup; - children = ( - CC5E7B38BE88420A42E09058 /* Pods-Runner.debug.xcconfig */, - 2DB5BD147C26211E5F942F51 /* Pods-Runner.release.xcconfig */, - 2FBB5A5B46F9FF9BAB4771D0 /* Pods-Runner.profile.xcconfig */, - 10B1A52A02B6E43AD84DCE8A /* Pods-RunnerTests.debug.xcconfig */, - 655C369966165A9211B03B86 /* Pods-RunnerTests.release.xcconfig */, - B94A3CC5524819586F1C23AF /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; 331C80D6294CF71000263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -151,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 2157F81FB5C80C543EC6B1F3 /* Pods */, + E7AC335EB1C5A39F5707C90D /* Pods */, ); sourceTree = ""; }; @@ -202,12 +188,26 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - F0334E5381D50182362C01E6 /* Pods_Runner.framework */, - 5D98AB5A9512B719E7847930 /* Pods_RunnerTests.framework */, + DFC8915137E276D71E146E06 /* Pods_Runner.framework */, + 6AF9150345997D4716E2B966 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; }; + E7AC335EB1C5A39F5707C90D /* Pods */ = { + isa = PBXGroup; + children = ( + 6039640DDAF4704A3734EE57 /* Pods-Runner.debug.xcconfig */, + 18AC8611E562B098AF3F81FA /* Pods-Runner.release.xcconfig */, + 56CAE46EE83992C1B6313E87 /* Pods-Runner.profile.xcconfig */, + 405456754B052AF41B133931 /* Pods-RunnerTests.debug.xcconfig */, + 4F1F92BA87A2AE9D1F821B29 /* Pods-RunnerTests.release.xcconfig */, + 599372CA31DCEAD4BD64F0D2 /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - E3EA0EC0FBC9811879946C6E /* [CP] Check Pods Manifest.lock */, + 6B97B1686FA6D1B9C5A79E38 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 740F6191F50D945B9EB0405A /* [CP] Check Pods Manifest.lock */, + 76F6452E207F4162FB5F721A /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 068C58F29A3925A6655A7596 /* [CP] Embed Pods Frameworks */, + 5D9B8F4E4BE9E1C0BE3052E2 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,23 +323,6 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 068C58F29A3925A6655A7596 /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -378,7 +361,24 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 740F6191F50D945B9EB0405A /* [CP] Check Pods Manifest.lock */ = { + 5D9B8F4E4BE9E1C0BE3052E2 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; + 6B97B1686FA6D1B9C5A79E38 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -393,14 +393,14 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - E3EA0EC0FBC9811879946C6E /* [CP] Check Pods Manifest.lock */ = { + 76F6452E207F4162FB5F721A /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -415,7 +415,7 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 10B1A52A02B6E43AD84DCE8A /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 405456754B052AF41B133931 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 655C369966165A9211B03B86 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 4F1F92BA87A2AE9D1F821B29 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = B94A3CC5524819586F1C23AF /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 599372CA31DCEAD4BD64F0D2 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/github-client/step_05/macos/Runner/Configs/AppInfo.xcconfig b/github-client/step_05/macos/Runner/Configs/AppInfo.xcconfig index 4fe9e159bd..a722abdb4b 100644 --- a/github-client/step_05/macos/Runner/Configs/AppInfo.xcconfig +++ b/github-client/step_05/macos/Runner/Configs/AppInfo.xcconfig @@ -11,4 +11,4 @@ PRODUCT_NAME = github_client PRODUCT_BUNDLE_IDENTIFIER = com.example.githubClient // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. diff --git a/github-client/step_05/pubspec.yaml b/github-client/step_05/pubspec.yaml index 51514ae543..13e43b5f33 100644 --- a/github-client/step_05/pubspec.yaml +++ b/github-client/step_05/pubspec.yaml @@ -19,7 +19,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev version: 1.0.0+1 environment: - sdk: ^3.7.0-236.0.dev + sdk: ^3.7.0-0 # Dependencies specify other packages that your package needs in order to work. # To automatically upgrade your package dependencies to the latest versions @@ -34,7 +34,7 @@ dependencies: # The following adds the Cupertino Icons font to your application. # Use with the CupertinoIcons class for iOS style icons. cupertino_icons: ^1.0.8 - http: ^1.2.2 + http: ^1.3.0 oauth2: ^2.0.3 url_launcher: ^6.3.1 github: ^9.24.0 diff --git a/github-client/step_05/windows/runner/Runner.rc b/github-client/step_05/windows/runner/Runner.rc index 61cffd2cc2..c361d86877 100644 --- a/github-client/step_05/windows/runner/Runner.rc +++ b/github-client/step_05/windows/runner/Runner.rc @@ -93,7 +93,7 @@ BEGIN VALUE "FileDescription", "github_client" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "InternalName", "github_client" "\0" - VALUE "LegalCopyright", "Copyright (C) 2024 com.example. All rights reserved." "\0" + VALUE "LegalCopyright", "Copyright (C) 2025 com.example. All rights reserved." "\0" VALUE "OriginalFilename", "github_client.exe" "\0" VALUE "ProductName", "github_client" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" diff --git a/github-client/step_06/macos/Runner.xcodeproj/project.pbxproj b/github-client/step_06/macos/Runner.xcodeproj/project.pbxproj index 7f2b195b2c..e76a023427 100644 --- a/github-client/step_06/macos/Runner.xcodeproj/project.pbxproj +++ b/github-client/step_06/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ - 1B9A5C6874927D5191AD0FB7 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F0334E5381D50182362C01E6 /* Pods_Runner.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - BD53817A686F91402582EDA0 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5D98AB5A9512B719E7847930 /* Pods_RunnerTests.framework */; }; + 4B9F36447ECD7E01E7C23E5E /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DFC8915137E276D71E146E06 /* Pods_Runner.framework */; }; + 5999A2C47A172B9630E0B05B /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6AF9150345997D4716E2B966 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,9 +62,7 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 10B1A52A02B6E43AD84DCE8A /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 2DB5BD147C26211E5F942F51 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 2FBB5A5B46F9FF9BAB4771D0 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 18AC8611E562B098AF3F81FA /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -81,13 +79,15 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 5D98AB5A9512B719E7847930 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 655C369966165A9211B03B86 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 405456754B052AF41B133931 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 4F1F92BA87A2AE9D1F821B29 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 56CAE46EE83992C1B6313E87 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 599372CA31DCEAD4BD64F0D2 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 6039640DDAF4704A3734EE57 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 6AF9150345997D4716E2B966 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - B94A3CC5524819586F1C23AF /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - CC5E7B38BE88420A42E09058 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - F0334E5381D50182362C01E6 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + DFC8915137E276D71E146E06 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - BD53817A686F91402582EDA0 /* Pods_RunnerTests.framework in Frameworks */, + 5999A2C47A172B9630E0B05B /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,27 +103,13 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 1B9A5C6874927D5191AD0FB7 /* Pods_Runner.framework in Frameworks */, + 4B9F36447ECD7E01E7C23E5E /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 2157F81FB5C80C543EC6B1F3 /* Pods */ = { - isa = PBXGroup; - children = ( - CC5E7B38BE88420A42E09058 /* Pods-Runner.debug.xcconfig */, - 2DB5BD147C26211E5F942F51 /* Pods-Runner.release.xcconfig */, - 2FBB5A5B46F9FF9BAB4771D0 /* Pods-Runner.profile.xcconfig */, - 10B1A52A02B6E43AD84DCE8A /* Pods-RunnerTests.debug.xcconfig */, - 655C369966165A9211B03B86 /* Pods-RunnerTests.release.xcconfig */, - B94A3CC5524819586F1C23AF /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; 331C80D6294CF71000263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -151,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 2157F81FB5C80C543EC6B1F3 /* Pods */, + E7AC335EB1C5A39F5707C90D /* Pods */, ); sourceTree = ""; }; @@ -202,12 +188,26 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - F0334E5381D50182362C01E6 /* Pods_Runner.framework */, - 5D98AB5A9512B719E7847930 /* Pods_RunnerTests.framework */, + DFC8915137E276D71E146E06 /* Pods_Runner.framework */, + 6AF9150345997D4716E2B966 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; }; + E7AC335EB1C5A39F5707C90D /* Pods */ = { + isa = PBXGroup; + children = ( + 6039640DDAF4704A3734EE57 /* Pods-Runner.debug.xcconfig */, + 18AC8611E562B098AF3F81FA /* Pods-Runner.release.xcconfig */, + 56CAE46EE83992C1B6313E87 /* Pods-Runner.profile.xcconfig */, + 405456754B052AF41B133931 /* Pods-RunnerTests.debug.xcconfig */, + 4F1F92BA87A2AE9D1F821B29 /* Pods-RunnerTests.release.xcconfig */, + 599372CA31DCEAD4BD64F0D2 /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - E3EA0EC0FBC9811879946C6E /* [CP] Check Pods Manifest.lock */, + 6B97B1686FA6D1B9C5A79E38 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 740F6191F50D945B9EB0405A /* [CP] Check Pods Manifest.lock */, + 76F6452E207F4162FB5F721A /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 068C58F29A3925A6655A7596 /* [CP] Embed Pods Frameworks */, + 5D9B8F4E4BE9E1C0BE3052E2 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,23 +323,6 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 068C58F29A3925A6655A7596 /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -378,7 +361,24 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 740F6191F50D945B9EB0405A /* [CP] Check Pods Manifest.lock */ = { + 5D9B8F4E4BE9E1C0BE3052E2 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; + 6B97B1686FA6D1B9C5A79E38 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -393,14 +393,14 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - E3EA0EC0FBC9811879946C6E /* [CP] Check Pods Manifest.lock */ = { + 76F6452E207F4162FB5F721A /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -415,7 +415,7 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 10B1A52A02B6E43AD84DCE8A /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 405456754B052AF41B133931 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 655C369966165A9211B03B86 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 4F1F92BA87A2AE9D1F821B29 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = B94A3CC5524819586F1C23AF /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 599372CA31DCEAD4BD64F0D2 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/github-client/step_06/macos/Runner/Configs/AppInfo.xcconfig b/github-client/step_06/macos/Runner/Configs/AppInfo.xcconfig index 4fe9e159bd..a722abdb4b 100644 --- a/github-client/step_06/macos/Runner/Configs/AppInfo.xcconfig +++ b/github-client/step_06/macos/Runner/Configs/AppInfo.xcconfig @@ -11,4 +11,4 @@ PRODUCT_NAME = github_client PRODUCT_BUNDLE_IDENTIFIER = com.example.githubClient // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. diff --git a/github-client/step_06/pubspec.yaml b/github-client/step_06/pubspec.yaml index 80f7266674..fedf5570ef 100644 --- a/github-client/step_06/pubspec.yaml +++ b/github-client/step_06/pubspec.yaml @@ -19,7 +19,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev version: 1.0.0+1 environment: - sdk: ^3.7.0-236.0.dev + sdk: ^3.7.0-0 # Dependencies specify other packages that your package needs in order to work. # To automatically upgrade your package dependencies to the latest versions @@ -34,7 +34,7 @@ dependencies: # The following adds the Cupertino Icons font to your application. # Use with the CupertinoIcons class for iOS style icons. cupertino_icons: ^1.0.8 - http: ^1.2.2 + http: ^1.3.0 oauth2: ^2.0.3 url_launcher: ^6.3.1 github: ^9.24.0 diff --git a/github-client/step_06/windows/runner/Runner.rc b/github-client/step_06/windows/runner/Runner.rc index 61cffd2cc2..c361d86877 100644 --- a/github-client/step_06/windows/runner/Runner.rc +++ b/github-client/step_06/windows/runner/Runner.rc @@ -93,7 +93,7 @@ BEGIN VALUE "FileDescription", "github_client" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "InternalName", "github_client" "\0" - VALUE "LegalCopyright", "Copyright (C) 2024 com.example. All rights reserved." "\0" + VALUE "LegalCopyright", "Copyright (C) 2025 com.example. All rights reserved." "\0" VALUE "OriginalFilename", "github_client.exe" "\0" VALUE "ProductName", "github_client" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" diff --git a/github-client/step_07/macos/Runner.xcodeproj/project.pbxproj b/github-client/step_07/macos/Runner.xcodeproj/project.pbxproj index 7f2b195b2c..e76a023427 100644 --- a/github-client/step_07/macos/Runner.xcodeproj/project.pbxproj +++ b/github-client/step_07/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ - 1B9A5C6874927D5191AD0FB7 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F0334E5381D50182362C01E6 /* Pods_Runner.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - BD53817A686F91402582EDA0 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5D98AB5A9512B719E7847930 /* Pods_RunnerTests.framework */; }; + 4B9F36447ECD7E01E7C23E5E /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DFC8915137E276D71E146E06 /* Pods_Runner.framework */; }; + 5999A2C47A172B9630E0B05B /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6AF9150345997D4716E2B966 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,9 +62,7 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 10B1A52A02B6E43AD84DCE8A /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 2DB5BD147C26211E5F942F51 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 2FBB5A5B46F9FF9BAB4771D0 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 18AC8611E562B098AF3F81FA /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -81,13 +79,15 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 5D98AB5A9512B719E7847930 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 655C369966165A9211B03B86 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 405456754B052AF41B133931 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 4F1F92BA87A2AE9D1F821B29 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 56CAE46EE83992C1B6313E87 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 599372CA31DCEAD4BD64F0D2 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 6039640DDAF4704A3734EE57 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 6AF9150345997D4716E2B966 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - B94A3CC5524819586F1C23AF /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - CC5E7B38BE88420A42E09058 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - F0334E5381D50182362C01E6 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + DFC8915137E276D71E146E06 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - BD53817A686F91402582EDA0 /* Pods_RunnerTests.framework in Frameworks */, + 5999A2C47A172B9630E0B05B /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,27 +103,13 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 1B9A5C6874927D5191AD0FB7 /* Pods_Runner.framework in Frameworks */, + 4B9F36447ECD7E01E7C23E5E /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 2157F81FB5C80C543EC6B1F3 /* Pods */ = { - isa = PBXGroup; - children = ( - CC5E7B38BE88420A42E09058 /* Pods-Runner.debug.xcconfig */, - 2DB5BD147C26211E5F942F51 /* Pods-Runner.release.xcconfig */, - 2FBB5A5B46F9FF9BAB4771D0 /* Pods-Runner.profile.xcconfig */, - 10B1A52A02B6E43AD84DCE8A /* Pods-RunnerTests.debug.xcconfig */, - 655C369966165A9211B03B86 /* Pods-RunnerTests.release.xcconfig */, - B94A3CC5524819586F1C23AF /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; 331C80D6294CF71000263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -151,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 2157F81FB5C80C543EC6B1F3 /* Pods */, + E7AC335EB1C5A39F5707C90D /* Pods */, ); sourceTree = ""; }; @@ -202,12 +188,26 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - F0334E5381D50182362C01E6 /* Pods_Runner.framework */, - 5D98AB5A9512B719E7847930 /* Pods_RunnerTests.framework */, + DFC8915137E276D71E146E06 /* Pods_Runner.framework */, + 6AF9150345997D4716E2B966 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; }; + E7AC335EB1C5A39F5707C90D /* Pods */ = { + isa = PBXGroup; + children = ( + 6039640DDAF4704A3734EE57 /* Pods-Runner.debug.xcconfig */, + 18AC8611E562B098AF3F81FA /* Pods-Runner.release.xcconfig */, + 56CAE46EE83992C1B6313E87 /* Pods-Runner.profile.xcconfig */, + 405456754B052AF41B133931 /* Pods-RunnerTests.debug.xcconfig */, + 4F1F92BA87A2AE9D1F821B29 /* Pods-RunnerTests.release.xcconfig */, + 599372CA31DCEAD4BD64F0D2 /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - E3EA0EC0FBC9811879946C6E /* [CP] Check Pods Manifest.lock */, + 6B97B1686FA6D1B9C5A79E38 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 740F6191F50D945B9EB0405A /* [CP] Check Pods Manifest.lock */, + 76F6452E207F4162FB5F721A /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 068C58F29A3925A6655A7596 /* [CP] Embed Pods Frameworks */, + 5D9B8F4E4BE9E1C0BE3052E2 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,23 +323,6 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 068C58F29A3925A6655A7596 /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -378,7 +361,24 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 740F6191F50D945B9EB0405A /* [CP] Check Pods Manifest.lock */ = { + 5D9B8F4E4BE9E1C0BE3052E2 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; + 6B97B1686FA6D1B9C5A79E38 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -393,14 +393,14 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - E3EA0EC0FBC9811879946C6E /* [CP] Check Pods Manifest.lock */ = { + 76F6452E207F4162FB5F721A /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -415,7 +415,7 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 10B1A52A02B6E43AD84DCE8A /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 405456754B052AF41B133931 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 655C369966165A9211B03B86 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 4F1F92BA87A2AE9D1F821B29 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = B94A3CC5524819586F1C23AF /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 599372CA31DCEAD4BD64F0D2 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/github-client/step_07/macos/Runner/Configs/AppInfo.xcconfig b/github-client/step_07/macos/Runner/Configs/AppInfo.xcconfig index 4fe9e159bd..a722abdb4b 100644 --- a/github-client/step_07/macos/Runner/Configs/AppInfo.xcconfig +++ b/github-client/step_07/macos/Runner/Configs/AppInfo.xcconfig @@ -11,4 +11,4 @@ PRODUCT_NAME = github_client PRODUCT_BUNDLE_IDENTIFIER = com.example.githubClient // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. diff --git a/github-client/step_07/pubspec.yaml b/github-client/step_07/pubspec.yaml index 4f6fd9ce49..425c033f52 100644 --- a/github-client/step_07/pubspec.yaml +++ b/github-client/step_07/pubspec.yaml @@ -19,7 +19,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev version: 1.0.0+1 environment: - sdk: ^3.7.0-236.0.dev + sdk: ^3.7.0-0 # Dependencies specify other packages that your package needs in order to work. # To automatically upgrade your package dependencies to the latest versions @@ -34,7 +34,7 @@ dependencies: # The following adds the Cupertino Icons font to your application. # Use with the CupertinoIcons class for iOS style icons. cupertino_icons: ^1.0.8 - http: ^1.2.2 + http: ^1.3.0 oauth2: ^2.0.3 url_launcher: ^6.3.1 github: ^9.24.0 diff --git a/github-client/step_07/windows/runner/Runner.rc b/github-client/step_07/windows/runner/Runner.rc index 61cffd2cc2..c361d86877 100644 --- a/github-client/step_07/windows/runner/Runner.rc +++ b/github-client/step_07/windows/runner/Runner.rc @@ -93,7 +93,7 @@ BEGIN VALUE "FileDescription", "github_client" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "InternalName", "github_client" "\0" - VALUE "LegalCopyright", "Copyright (C) 2024 com.example. All rights reserved." "\0" + VALUE "LegalCopyright", "Copyright (C) 2025 com.example. All rights reserved." "\0" VALUE "OriginalFilename", "github_client.exe" "\0" VALUE "ProductName", "github_client" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" diff --git a/github-client/window_to_front/pubspec.yaml b/github-client/window_to_front/pubspec.yaml index 8d96c119a9..7e4c04475a 100644 --- a/github-client/window_to_front/pubspec.yaml +++ b/github-client/window_to_front/pubspec.yaml @@ -18,7 +18,7 @@ version: 0.0.1 homepage: environment: - sdk: ^3.7.0-236.0.dev + sdk: ^3.7.0-0 flutter: '>=3.3.0' dependencies: From bdbf3d38f287dd5e410bdf7215d7dbddacd1a3fe Mon Sep 17 00:00:00 2001 From: Brett Morgan Date: Wed, 22 Jan 2025 14:56:49 +1100 Subject: [PATCH 102/108] Update `google-maps-in-flutter` --- .../google_maps_in_flutter/MainActivity.kt | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 108 +++++++++--------- .../google_maps_in_flutter/MainActivity.kt | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 108 +++++++++--------- .../google_maps_in_flutter/MainActivity.kt | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 108 +++++++++--------- google-maps-in-flutter/step_5/pubspec.yaml | 6 +- 7 files changed, 168 insertions(+), 168 deletions(-) diff --git a/google-maps-in-flutter/step_3/android/app/src/main/kotlin/com/example/google_maps_in_flutter/MainActivity.kt b/google-maps-in-flutter/step_3/android/app/src/main/kotlin/com/example/google_maps_in_flutter/MainActivity.kt index b5b7a72224..6d114a9167 100644 --- a/google-maps-in-flutter/step_3/android/app/src/main/kotlin/com/example/google_maps_in_flutter/MainActivity.kt +++ b/google-maps-in-flutter/step_3/android/app/src/main/kotlin/com/example/google_maps_in_flutter/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.google_maps_in_flutter import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/google-maps-in-flutter/step_3/ios/Runner.xcodeproj/project.pbxproj b/google-maps-in-flutter/step_3/ios/Runner.xcodeproj/project.pbxproj index 6d0634cf44..f2ec6e6760 100644 --- a/google-maps-in-flutter/step_3/ios/Runner.xcodeproj/project.pbxproj +++ b/google-maps-in-flutter/step_3/ios/Runner.xcodeproj/project.pbxproj @@ -8,14 +8,14 @@ /* Begin PBXBuildFile section */ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; - 15CB4448C0666DBE64D63525 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D435EDFF226F45C09F1E0AF3 /* Pods_RunnerTests.framework */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; + 66521CA336CC9A2D568DB591 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2FB07A6400922F23C347CD77 /* Pods_Runner.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; + 96B64A9C24AC8DA146B9C025 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9EC1A4CF1046031DD009066B /* Pods_RunnerTests.framework */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - E9F396A3D9DF65E476EB31D1 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7316F83B3E1B7BE3701A6A8B /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,19 +42,19 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 0C1BC6B0E8D09E978D15DC18 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 055A85BA052519C77945DF93 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 1CC9794FA1935535864E0EB9 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 1D74AB4352CE2AC855B1C03B /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 2FB07A6400922F23C347CD77 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 4F706A6A35F8F7D5B8CBD5BC /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - 5258DA07B17577327514E3D4 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 7316F83B3E1B7BE3701A6A8B /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 6E3A54599EBD72B53C21CA3A /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; + 863AF1D1CC93DE99F101FD53 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -62,46 +62,46 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - A376A3988FDA0D514D82BA16 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - D435EDFF226F45C09F1E0AF3 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - D4AE46C9813FABD3363B6F67 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 98AF64FCF79BBC76912B0E3C /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 9EC1A4CF1046031DD009066B /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + E60BD41CE562EA804FCCB36C /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 97C146EB1CF9000F007C117D /* Frameworks */ = { + 642EFD4D3AF80C961C79FE61 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - E9F396A3D9DF65E476EB31D1 /* Pods_Runner.framework in Frameworks */, + 96B64A9C24AC8DA146B9C025 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - BFD0CA950B08F3008F855504 /* Frameworks */ = { + 97C146EB1CF9000F007C117D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 15CB4448C0666DBE64D63525 /* Pods_RunnerTests.framework in Frameworks */, + 66521CA336CC9A2D568DB591 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 2255DFEF649B8775AD1F3DAB /* Frameworks */ = { + 331C8082294A63A400263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( - 7316F83B3E1B7BE3701A6A8B /* Pods_Runner.framework */, - D435EDFF226F45C09F1E0AF3 /* Pods_RunnerTests.framework */, + 331C807B294A618700263BE5 /* RunnerTests.swift */, ); - name = Frameworks; + path = RunnerTests; sourceTree = ""; }; - 331C8082294A63A400263BE5 /* RunnerTests */ = { + 840C0954EDBA163EE19B8ED7 /* Frameworks */ = { isa = PBXGroup; children = ( - 331C807B294A618700263BE5 /* RunnerTests.swift */, + 2FB07A6400922F23C347CD77 /* Pods_Runner.framework */, + 9EC1A4CF1046031DD009066B /* Pods_RunnerTests.framework */, ); - path = RunnerTests; + name = Frameworks; sourceTree = ""; }; 9740EEB11CF90186004384FC /* Flutter */ = { @@ -122,8 +122,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - DE2AB8BDF7610763426CE0AC /* Pods */, - 2255DFEF649B8775AD1F3DAB /* Frameworks */, + ABAC9EDC5AD56A6979453646 /* Pods */, + 840C0954EDBA163EE19B8ED7 /* Frameworks */, ); sourceTree = ""; }; @@ -151,15 +151,15 @@ path = Runner; sourceTree = ""; }; - DE2AB8BDF7610763426CE0AC /* Pods */ = { + ABAC9EDC5AD56A6979453646 /* Pods */ = { isa = PBXGroup; children = ( - 0C1BC6B0E8D09E978D15DC18 /* Pods-Runner.debug.xcconfig */, - D4AE46C9813FABD3363B6F67 /* Pods-Runner.release.xcconfig */, - 4F706A6A35F8F7D5B8CBD5BC /* Pods-Runner.profile.xcconfig */, - 5258DA07B17577327514E3D4 /* Pods-RunnerTests.debug.xcconfig */, - 1CC9794FA1935535864E0EB9 /* Pods-RunnerTests.release.xcconfig */, - A376A3988FDA0D514D82BA16 /* Pods-RunnerTests.profile.xcconfig */, + 6E3A54599EBD72B53C21CA3A /* Pods-Runner.debug.xcconfig */, + 863AF1D1CC93DE99F101FD53 /* Pods-Runner.release.xcconfig */, + E60BD41CE562EA804FCCB36C /* Pods-Runner.profile.xcconfig */, + 98AF64FCF79BBC76912B0E3C /* Pods-RunnerTests.debug.xcconfig */, + 055A85BA052519C77945DF93 /* Pods-RunnerTests.release.xcconfig */, + 1D74AB4352CE2AC855B1C03B /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 6EEAB3C1FCFABCAAF09F9610 /* [CP] Check Pods Manifest.lock */, + B68C60FD94971DAD51352BE1 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - BFD0CA950B08F3008F855504 /* Frameworks */, + 642EFD4D3AF80C961C79FE61 /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - EE07638F163BC0D59D8A53F7 /* [CP] Check Pods Manifest.lock */, + 2300DE967191F4E2638D13A1 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 211E126C2355BF2F63B64CD0 /* [CP] Copy Pods Resources */, + 43DA2718412BE18230A5D9CA /* [CP] Copy Pods Resources */, ); buildRules = ( ); @@ -270,21 +270,26 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 211E126C2355BF2F63B64CD0 /* [CP] Copy Pods Resources */ = { + 2300DE967191F4E2638D13A1 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Copy Pods Resources"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { @@ -303,26 +308,21 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 6EEAB3C1FCFABCAAF09F9610 /* [CP] Check Pods Manifest.lock */ = { + 43DA2718412BE18230A5D9CA /* [CP] Copy Pods Resources */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; + name = "[CP] Copy Pods Resources"; outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n"; showEnvVarsInLog = 0; }; 9740EEB61CF901F6004384FC /* Run Script */ = { @@ -340,7 +340,7 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - EE07638F163BC0D59D8A53F7 /* [CP] Check Pods Manifest.lock */ = { + B68C60FD94971DAD51352BE1 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -355,7 +355,7 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 5258DA07B17577327514E3D4 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 98AF64FCF79BBC76912B0E3C /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 1CC9794FA1935535864E0EB9 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 055A85BA052519C77945DF93 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = A376A3988FDA0D514D82BA16 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 1D74AB4352CE2AC855B1C03B /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/google-maps-in-flutter/step_4/android/app/src/main/kotlin/com/example/google_maps_in_flutter/MainActivity.kt b/google-maps-in-flutter/step_4/android/app/src/main/kotlin/com/example/google_maps_in_flutter/MainActivity.kt index b5b7a72224..6d114a9167 100644 --- a/google-maps-in-flutter/step_4/android/app/src/main/kotlin/com/example/google_maps_in_flutter/MainActivity.kt +++ b/google-maps-in-flutter/step_4/android/app/src/main/kotlin/com/example/google_maps_in_flutter/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.google_maps_in_flutter import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/google-maps-in-flutter/step_4/ios/Runner.xcodeproj/project.pbxproj b/google-maps-in-flutter/step_4/ios/Runner.xcodeproj/project.pbxproj index 6d0634cf44..f2ec6e6760 100644 --- a/google-maps-in-flutter/step_4/ios/Runner.xcodeproj/project.pbxproj +++ b/google-maps-in-flutter/step_4/ios/Runner.xcodeproj/project.pbxproj @@ -8,14 +8,14 @@ /* Begin PBXBuildFile section */ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; - 15CB4448C0666DBE64D63525 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D435EDFF226F45C09F1E0AF3 /* Pods_RunnerTests.framework */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; + 66521CA336CC9A2D568DB591 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2FB07A6400922F23C347CD77 /* Pods_Runner.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; + 96B64A9C24AC8DA146B9C025 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9EC1A4CF1046031DD009066B /* Pods_RunnerTests.framework */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - E9F396A3D9DF65E476EB31D1 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7316F83B3E1B7BE3701A6A8B /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,19 +42,19 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 0C1BC6B0E8D09E978D15DC18 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 055A85BA052519C77945DF93 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 1CC9794FA1935535864E0EB9 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 1D74AB4352CE2AC855B1C03B /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 2FB07A6400922F23C347CD77 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 4F706A6A35F8F7D5B8CBD5BC /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - 5258DA07B17577327514E3D4 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 7316F83B3E1B7BE3701A6A8B /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 6E3A54599EBD72B53C21CA3A /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; + 863AF1D1CC93DE99F101FD53 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -62,46 +62,46 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - A376A3988FDA0D514D82BA16 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - D435EDFF226F45C09F1E0AF3 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - D4AE46C9813FABD3363B6F67 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 98AF64FCF79BBC76912B0E3C /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 9EC1A4CF1046031DD009066B /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + E60BD41CE562EA804FCCB36C /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 97C146EB1CF9000F007C117D /* Frameworks */ = { + 642EFD4D3AF80C961C79FE61 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - E9F396A3D9DF65E476EB31D1 /* Pods_Runner.framework in Frameworks */, + 96B64A9C24AC8DA146B9C025 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - BFD0CA950B08F3008F855504 /* Frameworks */ = { + 97C146EB1CF9000F007C117D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 15CB4448C0666DBE64D63525 /* Pods_RunnerTests.framework in Frameworks */, + 66521CA336CC9A2D568DB591 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 2255DFEF649B8775AD1F3DAB /* Frameworks */ = { + 331C8082294A63A400263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( - 7316F83B3E1B7BE3701A6A8B /* Pods_Runner.framework */, - D435EDFF226F45C09F1E0AF3 /* Pods_RunnerTests.framework */, + 331C807B294A618700263BE5 /* RunnerTests.swift */, ); - name = Frameworks; + path = RunnerTests; sourceTree = ""; }; - 331C8082294A63A400263BE5 /* RunnerTests */ = { + 840C0954EDBA163EE19B8ED7 /* Frameworks */ = { isa = PBXGroup; children = ( - 331C807B294A618700263BE5 /* RunnerTests.swift */, + 2FB07A6400922F23C347CD77 /* Pods_Runner.framework */, + 9EC1A4CF1046031DD009066B /* Pods_RunnerTests.framework */, ); - path = RunnerTests; + name = Frameworks; sourceTree = ""; }; 9740EEB11CF90186004384FC /* Flutter */ = { @@ -122,8 +122,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - DE2AB8BDF7610763426CE0AC /* Pods */, - 2255DFEF649B8775AD1F3DAB /* Frameworks */, + ABAC9EDC5AD56A6979453646 /* Pods */, + 840C0954EDBA163EE19B8ED7 /* Frameworks */, ); sourceTree = ""; }; @@ -151,15 +151,15 @@ path = Runner; sourceTree = ""; }; - DE2AB8BDF7610763426CE0AC /* Pods */ = { + ABAC9EDC5AD56A6979453646 /* Pods */ = { isa = PBXGroup; children = ( - 0C1BC6B0E8D09E978D15DC18 /* Pods-Runner.debug.xcconfig */, - D4AE46C9813FABD3363B6F67 /* Pods-Runner.release.xcconfig */, - 4F706A6A35F8F7D5B8CBD5BC /* Pods-Runner.profile.xcconfig */, - 5258DA07B17577327514E3D4 /* Pods-RunnerTests.debug.xcconfig */, - 1CC9794FA1935535864E0EB9 /* Pods-RunnerTests.release.xcconfig */, - A376A3988FDA0D514D82BA16 /* Pods-RunnerTests.profile.xcconfig */, + 6E3A54599EBD72B53C21CA3A /* Pods-Runner.debug.xcconfig */, + 863AF1D1CC93DE99F101FD53 /* Pods-Runner.release.xcconfig */, + E60BD41CE562EA804FCCB36C /* Pods-Runner.profile.xcconfig */, + 98AF64FCF79BBC76912B0E3C /* Pods-RunnerTests.debug.xcconfig */, + 055A85BA052519C77945DF93 /* Pods-RunnerTests.release.xcconfig */, + 1D74AB4352CE2AC855B1C03B /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 6EEAB3C1FCFABCAAF09F9610 /* [CP] Check Pods Manifest.lock */, + B68C60FD94971DAD51352BE1 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - BFD0CA950B08F3008F855504 /* Frameworks */, + 642EFD4D3AF80C961C79FE61 /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - EE07638F163BC0D59D8A53F7 /* [CP] Check Pods Manifest.lock */, + 2300DE967191F4E2638D13A1 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 211E126C2355BF2F63B64CD0 /* [CP] Copy Pods Resources */, + 43DA2718412BE18230A5D9CA /* [CP] Copy Pods Resources */, ); buildRules = ( ); @@ -270,21 +270,26 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 211E126C2355BF2F63B64CD0 /* [CP] Copy Pods Resources */ = { + 2300DE967191F4E2638D13A1 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Copy Pods Resources"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { @@ -303,26 +308,21 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 6EEAB3C1FCFABCAAF09F9610 /* [CP] Check Pods Manifest.lock */ = { + 43DA2718412BE18230A5D9CA /* [CP] Copy Pods Resources */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; + name = "[CP] Copy Pods Resources"; outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n"; showEnvVarsInLog = 0; }; 9740EEB61CF901F6004384FC /* Run Script */ = { @@ -340,7 +340,7 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - EE07638F163BC0D59D8A53F7 /* [CP] Check Pods Manifest.lock */ = { + B68C60FD94971DAD51352BE1 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -355,7 +355,7 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 5258DA07B17577327514E3D4 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 98AF64FCF79BBC76912B0E3C /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 1CC9794FA1935535864E0EB9 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 055A85BA052519C77945DF93 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = A376A3988FDA0D514D82BA16 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 1D74AB4352CE2AC855B1C03B /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/google-maps-in-flutter/step_5/android/app/src/main/kotlin/com/example/google_maps_in_flutter/MainActivity.kt b/google-maps-in-flutter/step_5/android/app/src/main/kotlin/com/example/google_maps_in_flutter/MainActivity.kt index b5b7a72224..6d114a9167 100644 --- a/google-maps-in-flutter/step_5/android/app/src/main/kotlin/com/example/google_maps_in_flutter/MainActivity.kt +++ b/google-maps-in-flutter/step_5/android/app/src/main/kotlin/com/example/google_maps_in_flutter/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.google_maps_in_flutter import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/google-maps-in-flutter/step_5/ios/Runner.xcodeproj/project.pbxproj b/google-maps-in-flutter/step_5/ios/Runner.xcodeproj/project.pbxproj index 6d0634cf44..f2ec6e6760 100644 --- a/google-maps-in-flutter/step_5/ios/Runner.xcodeproj/project.pbxproj +++ b/google-maps-in-flutter/step_5/ios/Runner.xcodeproj/project.pbxproj @@ -8,14 +8,14 @@ /* Begin PBXBuildFile section */ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; - 15CB4448C0666DBE64D63525 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D435EDFF226F45C09F1E0AF3 /* Pods_RunnerTests.framework */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; + 66521CA336CC9A2D568DB591 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2FB07A6400922F23C347CD77 /* Pods_Runner.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; + 96B64A9C24AC8DA146B9C025 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9EC1A4CF1046031DD009066B /* Pods_RunnerTests.framework */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - E9F396A3D9DF65E476EB31D1 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7316F83B3E1B7BE3701A6A8B /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,19 +42,19 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 0C1BC6B0E8D09E978D15DC18 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 055A85BA052519C77945DF93 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 1CC9794FA1935535864E0EB9 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 1D74AB4352CE2AC855B1C03B /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 2FB07A6400922F23C347CD77 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 4F706A6A35F8F7D5B8CBD5BC /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - 5258DA07B17577327514E3D4 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 7316F83B3E1B7BE3701A6A8B /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 6E3A54599EBD72B53C21CA3A /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; + 863AF1D1CC93DE99F101FD53 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -62,46 +62,46 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - A376A3988FDA0D514D82BA16 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - D435EDFF226F45C09F1E0AF3 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - D4AE46C9813FABD3363B6F67 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 98AF64FCF79BBC76912B0E3C /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 9EC1A4CF1046031DD009066B /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + E60BD41CE562EA804FCCB36C /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 97C146EB1CF9000F007C117D /* Frameworks */ = { + 642EFD4D3AF80C961C79FE61 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - E9F396A3D9DF65E476EB31D1 /* Pods_Runner.framework in Frameworks */, + 96B64A9C24AC8DA146B9C025 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - BFD0CA950B08F3008F855504 /* Frameworks */ = { + 97C146EB1CF9000F007C117D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 15CB4448C0666DBE64D63525 /* Pods_RunnerTests.framework in Frameworks */, + 66521CA336CC9A2D568DB591 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 2255DFEF649B8775AD1F3DAB /* Frameworks */ = { + 331C8082294A63A400263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( - 7316F83B3E1B7BE3701A6A8B /* Pods_Runner.framework */, - D435EDFF226F45C09F1E0AF3 /* Pods_RunnerTests.framework */, + 331C807B294A618700263BE5 /* RunnerTests.swift */, ); - name = Frameworks; + path = RunnerTests; sourceTree = ""; }; - 331C8082294A63A400263BE5 /* RunnerTests */ = { + 840C0954EDBA163EE19B8ED7 /* Frameworks */ = { isa = PBXGroup; children = ( - 331C807B294A618700263BE5 /* RunnerTests.swift */, + 2FB07A6400922F23C347CD77 /* Pods_Runner.framework */, + 9EC1A4CF1046031DD009066B /* Pods_RunnerTests.framework */, ); - path = RunnerTests; + name = Frameworks; sourceTree = ""; }; 9740EEB11CF90186004384FC /* Flutter */ = { @@ -122,8 +122,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - DE2AB8BDF7610763426CE0AC /* Pods */, - 2255DFEF649B8775AD1F3DAB /* Frameworks */, + ABAC9EDC5AD56A6979453646 /* Pods */, + 840C0954EDBA163EE19B8ED7 /* Frameworks */, ); sourceTree = ""; }; @@ -151,15 +151,15 @@ path = Runner; sourceTree = ""; }; - DE2AB8BDF7610763426CE0AC /* Pods */ = { + ABAC9EDC5AD56A6979453646 /* Pods */ = { isa = PBXGroup; children = ( - 0C1BC6B0E8D09E978D15DC18 /* Pods-Runner.debug.xcconfig */, - D4AE46C9813FABD3363B6F67 /* Pods-Runner.release.xcconfig */, - 4F706A6A35F8F7D5B8CBD5BC /* Pods-Runner.profile.xcconfig */, - 5258DA07B17577327514E3D4 /* Pods-RunnerTests.debug.xcconfig */, - 1CC9794FA1935535864E0EB9 /* Pods-RunnerTests.release.xcconfig */, - A376A3988FDA0D514D82BA16 /* Pods-RunnerTests.profile.xcconfig */, + 6E3A54599EBD72B53C21CA3A /* Pods-Runner.debug.xcconfig */, + 863AF1D1CC93DE99F101FD53 /* Pods-Runner.release.xcconfig */, + E60BD41CE562EA804FCCB36C /* Pods-Runner.profile.xcconfig */, + 98AF64FCF79BBC76912B0E3C /* Pods-RunnerTests.debug.xcconfig */, + 055A85BA052519C77945DF93 /* Pods-RunnerTests.release.xcconfig */, + 1D74AB4352CE2AC855B1C03B /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 6EEAB3C1FCFABCAAF09F9610 /* [CP] Check Pods Manifest.lock */, + B68C60FD94971DAD51352BE1 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - BFD0CA950B08F3008F855504 /* Frameworks */, + 642EFD4D3AF80C961C79FE61 /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - EE07638F163BC0D59D8A53F7 /* [CP] Check Pods Manifest.lock */, + 2300DE967191F4E2638D13A1 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 211E126C2355BF2F63B64CD0 /* [CP] Copy Pods Resources */, + 43DA2718412BE18230A5D9CA /* [CP] Copy Pods Resources */, ); buildRules = ( ); @@ -270,21 +270,26 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 211E126C2355BF2F63B64CD0 /* [CP] Copy Pods Resources */ = { + 2300DE967191F4E2638D13A1 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Copy Pods Resources"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { @@ -303,26 +308,21 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 6EEAB3C1FCFABCAAF09F9610 /* [CP] Check Pods Manifest.lock */ = { + 43DA2718412BE18230A5D9CA /* [CP] Copy Pods Resources */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; + name = "[CP] Copy Pods Resources"; outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n"; showEnvVarsInLog = 0; }; 9740EEB61CF901F6004384FC /* Run Script */ = { @@ -340,7 +340,7 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - EE07638F163BC0D59D8A53F7 /* [CP] Check Pods Manifest.lock */ = { + B68C60FD94971DAD51352BE1 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -355,7 +355,7 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 5258DA07B17577327514E3D4 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 98AF64FCF79BBC76912B0E3C /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 1CC9794FA1935535864E0EB9 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 055A85BA052519C77945DF93 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = A376A3988FDA0D514D82BA16 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 1D74AB4352CE2AC855B1C03B /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/google-maps-in-flutter/step_5/pubspec.yaml b/google-maps-in-flutter/step_5/pubspec.yaml index 15fbbc22ad..9dcadb2c69 100644 --- a/google-maps-in-flutter/step_5/pubspec.yaml +++ b/google-maps-in-flutter/step_5/pubspec.yaml @@ -35,9 +35,9 @@ dependencies: # Use with the CupertinoIcons class for iOS style icons. cupertino_icons: ^1.0.8 google_maps_flutter: ^2.10.0 - http: ^1.2.2 + http: ^1.3.0 json_annotation: ^4.9.0 - json_serializable: ^6.9.0 + json_serializable: ^6.9.3 dev_dependencies: flutter_test: @@ -49,7 +49,7 @@ dev_dependencies: # package. See that file for information about deactivating specific lint # rules and activating additional ones. flutter_lints: ^5.0.0 - build_runner: ^2.4.13 + build_runner: ^2.4.14 # For information on the generic Dart part of this file, see the # following page: https://dart.dev/tools/pub/pubspec From d256462c2fcec9be6e9122c93bcd3f78f629bb67 Mon Sep 17 00:00:00 2001 From: Brett Morgan Date: Wed, 22 Jan 2025 15:01:09 +1100 Subject: [PATCH 103/108] Update `in_app_purchases` --- .../main/kotlin/com/example/dashclicker/MainActivity.kt | 2 +- in_app_purchases/complete/app/pubspec.yaml | 8 ++++---- in_app_purchases/complete/dart-backend/pubspec.yaml | 2 +- .../main/kotlin/com/example/dashclicker/MainActivity.kt | 2 +- in_app_purchases/step_00/app/pubspec.yaml | 8 ++++---- in_app_purchases/step_00/dart-backend/pubspec.yaml | 2 +- .../main/kotlin/com/example/dashclicker/MainActivity.kt | 2 +- in_app_purchases/step_07/app/pubspec.yaml | 8 ++++---- in_app_purchases/step_07/dart-backend/pubspec.yaml | 2 +- .../main/kotlin/com/example/dashclicker/MainActivity.kt | 2 +- in_app_purchases/step_08/app/pubspec.yaml | 8 ++++---- in_app_purchases/step_08/dart-backend/pubspec.yaml | 2 +- .../main/kotlin/com/example/dashclicker/MainActivity.kt | 2 +- in_app_purchases/step_09/app/pubspec.yaml | 8 ++++---- in_app_purchases/step_09/dart-backend/pubspec.yaml | 2 +- .../main/kotlin/com/example/dashclicker/MainActivity.kt | 2 +- in_app_purchases/step_10/app/pubspec.yaml | 8 ++++---- in_app_purchases/step_10/dart-backend/pubspec.yaml | 2 +- 18 files changed, 36 insertions(+), 36 deletions(-) diff --git a/in_app_purchases/complete/app/android/app/src/main/kotlin/com/example/dashclicker/MainActivity.kt b/in_app_purchases/complete/app/android/app/src/main/kotlin/com/example/dashclicker/MainActivity.kt index c136c711c8..2879c0343b 100644 --- a/in_app_purchases/complete/app/android/app/src/main/kotlin/com/example/dashclicker/MainActivity.kt +++ b/in_app_purchases/complete/app/android/app/src/main/kotlin/com/example/dashclicker/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.dashclicker import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/in_app_purchases/complete/app/pubspec.yaml b/in_app_purchases/complete/app/pubspec.yaml index 2db8981794..f92b9311fb 100644 --- a/in_app_purchases/complete/app/pubspec.yaml +++ b/in_app_purchases/complete/app/pubspec.yaml @@ -9,12 +9,12 @@ environment: dependencies: flutter: sdk: flutter - cloud_firestore: ^5.5.1 + cloud_firestore: ^5.6.2 cupertino_icons: ^1.0.8 - firebase_auth: ^5.3.4 - firebase_core: ^3.8.1 + firebase_auth: ^5.4.1 + firebase_core: ^3.10.1 google_sign_in: ^6.2.2 - http: ^1.2.2 + http: ^1.3.0 in_app_purchase: ^3.2.0 in_app_purchase_platform_interface: ^1.4.0 intl: ^0.20.1 diff --git a/in_app_purchases/complete/dart-backend/pubspec.yaml b/in_app_purchases/complete/dart-backend/pubspec.yaml index 58f606f54d..68a14f2c1e 100644 --- a/in_app_purchases/complete/dart-backend/pubspec.yaml +++ b/in_app_purchases/complete/dart-backend/pubspec.yaml @@ -10,7 +10,7 @@ dependencies: app_store_server_sdk: ^1.2.9 googleapis: ^13.2.0 googleapis_auth: ^1.6.0 - http: ^1.2.2 + http: ^1.3.0 shelf: ^1.4.0 shelf_router: ^1.1.0 diff --git a/in_app_purchases/step_00/app/android/app/src/main/kotlin/com/example/dashclicker/MainActivity.kt b/in_app_purchases/step_00/app/android/app/src/main/kotlin/com/example/dashclicker/MainActivity.kt index c136c711c8..2879c0343b 100644 --- a/in_app_purchases/step_00/app/android/app/src/main/kotlin/com/example/dashclicker/MainActivity.kt +++ b/in_app_purchases/step_00/app/android/app/src/main/kotlin/com/example/dashclicker/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.dashclicker import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/in_app_purchases/step_00/app/pubspec.yaml b/in_app_purchases/step_00/app/pubspec.yaml index 2db8981794..f92b9311fb 100644 --- a/in_app_purchases/step_00/app/pubspec.yaml +++ b/in_app_purchases/step_00/app/pubspec.yaml @@ -9,12 +9,12 @@ environment: dependencies: flutter: sdk: flutter - cloud_firestore: ^5.5.1 + cloud_firestore: ^5.6.2 cupertino_icons: ^1.0.8 - firebase_auth: ^5.3.4 - firebase_core: ^3.8.1 + firebase_auth: ^5.4.1 + firebase_core: ^3.10.1 google_sign_in: ^6.2.2 - http: ^1.2.2 + http: ^1.3.0 in_app_purchase: ^3.2.0 in_app_purchase_platform_interface: ^1.4.0 intl: ^0.20.1 diff --git a/in_app_purchases/step_00/dart-backend/pubspec.yaml b/in_app_purchases/step_00/dart-backend/pubspec.yaml index 58f606f54d..68a14f2c1e 100644 --- a/in_app_purchases/step_00/dart-backend/pubspec.yaml +++ b/in_app_purchases/step_00/dart-backend/pubspec.yaml @@ -10,7 +10,7 @@ dependencies: app_store_server_sdk: ^1.2.9 googleapis: ^13.2.0 googleapis_auth: ^1.6.0 - http: ^1.2.2 + http: ^1.3.0 shelf: ^1.4.0 shelf_router: ^1.1.0 diff --git a/in_app_purchases/step_07/app/android/app/src/main/kotlin/com/example/dashclicker/MainActivity.kt b/in_app_purchases/step_07/app/android/app/src/main/kotlin/com/example/dashclicker/MainActivity.kt index c136c711c8..2879c0343b 100644 --- a/in_app_purchases/step_07/app/android/app/src/main/kotlin/com/example/dashclicker/MainActivity.kt +++ b/in_app_purchases/step_07/app/android/app/src/main/kotlin/com/example/dashclicker/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.dashclicker import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/in_app_purchases/step_07/app/pubspec.yaml b/in_app_purchases/step_07/app/pubspec.yaml index 2db8981794..f92b9311fb 100644 --- a/in_app_purchases/step_07/app/pubspec.yaml +++ b/in_app_purchases/step_07/app/pubspec.yaml @@ -9,12 +9,12 @@ environment: dependencies: flutter: sdk: flutter - cloud_firestore: ^5.5.1 + cloud_firestore: ^5.6.2 cupertino_icons: ^1.0.8 - firebase_auth: ^5.3.4 - firebase_core: ^3.8.1 + firebase_auth: ^5.4.1 + firebase_core: ^3.10.1 google_sign_in: ^6.2.2 - http: ^1.2.2 + http: ^1.3.0 in_app_purchase: ^3.2.0 in_app_purchase_platform_interface: ^1.4.0 intl: ^0.20.1 diff --git a/in_app_purchases/step_07/dart-backend/pubspec.yaml b/in_app_purchases/step_07/dart-backend/pubspec.yaml index 58f606f54d..68a14f2c1e 100644 --- a/in_app_purchases/step_07/dart-backend/pubspec.yaml +++ b/in_app_purchases/step_07/dart-backend/pubspec.yaml @@ -10,7 +10,7 @@ dependencies: app_store_server_sdk: ^1.2.9 googleapis: ^13.2.0 googleapis_auth: ^1.6.0 - http: ^1.2.2 + http: ^1.3.0 shelf: ^1.4.0 shelf_router: ^1.1.0 diff --git a/in_app_purchases/step_08/app/android/app/src/main/kotlin/com/example/dashclicker/MainActivity.kt b/in_app_purchases/step_08/app/android/app/src/main/kotlin/com/example/dashclicker/MainActivity.kt index c136c711c8..2879c0343b 100644 --- a/in_app_purchases/step_08/app/android/app/src/main/kotlin/com/example/dashclicker/MainActivity.kt +++ b/in_app_purchases/step_08/app/android/app/src/main/kotlin/com/example/dashclicker/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.dashclicker import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/in_app_purchases/step_08/app/pubspec.yaml b/in_app_purchases/step_08/app/pubspec.yaml index 2db8981794..f92b9311fb 100644 --- a/in_app_purchases/step_08/app/pubspec.yaml +++ b/in_app_purchases/step_08/app/pubspec.yaml @@ -9,12 +9,12 @@ environment: dependencies: flutter: sdk: flutter - cloud_firestore: ^5.5.1 + cloud_firestore: ^5.6.2 cupertino_icons: ^1.0.8 - firebase_auth: ^5.3.4 - firebase_core: ^3.8.1 + firebase_auth: ^5.4.1 + firebase_core: ^3.10.1 google_sign_in: ^6.2.2 - http: ^1.2.2 + http: ^1.3.0 in_app_purchase: ^3.2.0 in_app_purchase_platform_interface: ^1.4.0 intl: ^0.20.1 diff --git a/in_app_purchases/step_08/dart-backend/pubspec.yaml b/in_app_purchases/step_08/dart-backend/pubspec.yaml index 58f606f54d..68a14f2c1e 100644 --- a/in_app_purchases/step_08/dart-backend/pubspec.yaml +++ b/in_app_purchases/step_08/dart-backend/pubspec.yaml @@ -10,7 +10,7 @@ dependencies: app_store_server_sdk: ^1.2.9 googleapis: ^13.2.0 googleapis_auth: ^1.6.0 - http: ^1.2.2 + http: ^1.3.0 shelf: ^1.4.0 shelf_router: ^1.1.0 diff --git a/in_app_purchases/step_09/app/android/app/src/main/kotlin/com/example/dashclicker/MainActivity.kt b/in_app_purchases/step_09/app/android/app/src/main/kotlin/com/example/dashclicker/MainActivity.kt index c136c711c8..2879c0343b 100644 --- a/in_app_purchases/step_09/app/android/app/src/main/kotlin/com/example/dashclicker/MainActivity.kt +++ b/in_app_purchases/step_09/app/android/app/src/main/kotlin/com/example/dashclicker/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.dashclicker import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/in_app_purchases/step_09/app/pubspec.yaml b/in_app_purchases/step_09/app/pubspec.yaml index 2db8981794..f92b9311fb 100644 --- a/in_app_purchases/step_09/app/pubspec.yaml +++ b/in_app_purchases/step_09/app/pubspec.yaml @@ -9,12 +9,12 @@ environment: dependencies: flutter: sdk: flutter - cloud_firestore: ^5.5.1 + cloud_firestore: ^5.6.2 cupertino_icons: ^1.0.8 - firebase_auth: ^5.3.4 - firebase_core: ^3.8.1 + firebase_auth: ^5.4.1 + firebase_core: ^3.10.1 google_sign_in: ^6.2.2 - http: ^1.2.2 + http: ^1.3.0 in_app_purchase: ^3.2.0 in_app_purchase_platform_interface: ^1.4.0 intl: ^0.20.1 diff --git a/in_app_purchases/step_09/dart-backend/pubspec.yaml b/in_app_purchases/step_09/dart-backend/pubspec.yaml index 58f606f54d..68a14f2c1e 100644 --- a/in_app_purchases/step_09/dart-backend/pubspec.yaml +++ b/in_app_purchases/step_09/dart-backend/pubspec.yaml @@ -10,7 +10,7 @@ dependencies: app_store_server_sdk: ^1.2.9 googleapis: ^13.2.0 googleapis_auth: ^1.6.0 - http: ^1.2.2 + http: ^1.3.0 shelf: ^1.4.0 shelf_router: ^1.1.0 diff --git a/in_app_purchases/step_10/app/android/app/src/main/kotlin/com/example/dashclicker/MainActivity.kt b/in_app_purchases/step_10/app/android/app/src/main/kotlin/com/example/dashclicker/MainActivity.kt index c136c711c8..2879c0343b 100644 --- a/in_app_purchases/step_10/app/android/app/src/main/kotlin/com/example/dashclicker/MainActivity.kt +++ b/in_app_purchases/step_10/app/android/app/src/main/kotlin/com/example/dashclicker/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.dashclicker import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/in_app_purchases/step_10/app/pubspec.yaml b/in_app_purchases/step_10/app/pubspec.yaml index 2db8981794..f92b9311fb 100644 --- a/in_app_purchases/step_10/app/pubspec.yaml +++ b/in_app_purchases/step_10/app/pubspec.yaml @@ -9,12 +9,12 @@ environment: dependencies: flutter: sdk: flutter - cloud_firestore: ^5.5.1 + cloud_firestore: ^5.6.2 cupertino_icons: ^1.0.8 - firebase_auth: ^5.3.4 - firebase_core: ^3.8.1 + firebase_auth: ^5.4.1 + firebase_core: ^3.10.1 google_sign_in: ^6.2.2 - http: ^1.2.2 + http: ^1.3.0 in_app_purchase: ^3.2.0 in_app_purchase_platform_interface: ^1.4.0 intl: ^0.20.1 diff --git a/in_app_purchases/step_10/dart-backend/pubspec.yaml b/in_app_purchases/step_10/dart-backend/pubspec.yaml index 58f606f54d..68a14f2c1e 100644 --- a/in_app_purchases/step_10/dart-backend/pubspec.yaml +++ b/in_app_purchases/step_10/dart-backend/pubspec.yaml @@ -10,7 +10,7 @@ dependencies: app_store_server_sdk: ^1.2.9 googleapis: ^13.2.0 googleapis_auth: ^1.6.0 - http: ^1.2.2 + http: ^1.3.0 shelf: ^1.4.0 shelf_router: ^1.1.0 From 1f4835bd613d7584220d855d240e0992ce4633ea Mon Sep 17 00:00:00 2001 From: Brett Morgan Date: Wed, 22 Jan 2025 15:04:43 +1100 Subject: [PATCH 104/108] Update `intro_flutter_gpu` --- intro_flutter_gpu/step_01/android/.gitignore | 1 - intro_flutter_gpu/step_01/android/app/build.gradle.kts | 6 +++--- .../kotlin/com/example/intro_flutter_gpu/MainActivity.kt | 2 +- intro_flutter_gpu/step_02/android/.gitignore | 1 - intro_flutter_gpu/step_02/android/app/build.gradle.kts | 6 +++--- .../kotlin/com/example/intro_flutter_gpu/MainActivity.kt | 2 +- intro_flutter_gpu/step_03/android/.gitignore | 1 - intro_flutter_gpu/step_03/android/app/build.gradle.kts | 6 +++--- .../kotlin/com/example/intro_flutter_gpu/MainActivity.kt | 2 +- intro_flutter_gpu/step_04/android/.gitignore | 1 - intro_flutter_gpu/step_04/android/app/build.gradle.kts | 6 +++--- .../kotlin/com/example/intro_flutter_gpu/MainActivity.kt | 2 +- intro_flutter_gpu/step_05/android/.gitignore | 1 - intro_flutter_gpu/step_05/android/app/build.gradle.kts | 6 +++--- .../kotlin/com/example/intro_flutter_gpu/MainActivity.kt | 2 +- intro_flutter_gpu/step_06/android/.gitignore | 1 - intro_flutter_gpu/step_06/android/app/build.gradle.kts | 6 +++--- .../kotlin/com/example/intro_flutter_gpu/MainActivity.kt | 2 +- intro_flutter_gpu/step_07/android/.gitignore | 1 - intro_flutter_gpu/step_07/android/app/build.gradle.kts | 6 +++--- .../kotlin/com/example/intro_flutter_gpu/MainActivity.kt | 2 +- intro_flutter_gpu/step_08/android/.gitignore | 1 - intro_flutter_gpu/step_08/android/app/build.gradle.kts | 6 +++--- .../kotlin/com/example/intro_flutter_gpu/MainActivity.kt | 2 +- intro_flutter_gpu/step_09/android/.gitignore | 1 - intro_flutter_gpu/step_09/android/app/build.gradle.kts | 6 +++--- .../kotlin/com/example/intro_flutter_gpu/MainActivity.kt | 2 +- intro_flutter_gpu/step_10/android/.gitignore | 1 - intro_flutter_gpu/step_10/android/app/build.gradle.kts | 6 +++--- .../kotlin/com/example/intro_flutter_gpu/MainActivity.kt | 2 +- intro_flutter_gpu/step_11/android/.gitignore | 1 - intro_flutter_gpu/step_11/android/app/build.gradle.kts | 6 +++--- .../kotlin/com/example/intro_flutter_gpu/MainActivity.kt | 2 +- intro_flutter_gpu/step_12/android/.gitignore | 1 - intro_flutter_gpu/step_12/android/app/build.gradle.kts | 6 +++--- .../kotlin/com/example/intro_flutter_gpu/MainActivity.kt | 2 +- 36 files changed, 48 insertions(+), 60 deletions(-) diff --git a/intro_flutter_gpu/step_01/android/.gitignore b/intro_flutter_gpu/step_01/android/.gitignore index be3943c96d..55afd919c6 100644 --- a/intro_flutter_gpu/step_01/android/.gitignore +++ b/intro_flutter_gpu/step_01/android/.gitignore @@ -5,7 +5,6 @@ gradle-wrapper.jar /gradlew.bat /local.properties GeneratedPluginRegistrant.java -.cxx/ # Remember to never publicly share your keystore. # See https://flutter.dev/to/reference-keystore diff --git a/intro_flutter_gpu/step_01/android/app/build.gradle.kts b/intro_flutter_gpu/step_01/android/app/build.gradle.kts index ba03f47e22..857326fb7b 100644 --- a/intro_flutter_gpu/step_01/android/app/build.gradle.kts +++ b/intro_flutter_gpu/step_01/android/app/build.gradle.kts @@ -11,12 +11,12 @@ android { ndkVersion = flutter.ndkVersion compileOptions { - sourceCompatibility = JavaVersion.VERSION_11 - targetCompatibility = JavaVersion.VERSION_11 + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 } kotlinOptions { - jvmTarget = JavaVersion.VERSION_11.toString() + jvmTarget = JavaVersion.VERSION_1_8.toString() } defaultConfig { diff --git a/intro_flutter_gpu/step_01/android/app/src/main/kotlin/com/example/intro_flutter_gpu/MainActivity.kt b/intro_flutter_gpu/step_01/android/app/src/main/kotlin/com/example/intro_flutter_gpu/MainActivity.kt index 309b877fe4..28c6a72dea 100644 --- a/intro_flutter_gpu/step_01/android/app/src/main/kotlin/com/example/intro_flutter_gpu/MainActivity.kt +++ b/intro_flutter_gpu/step_01/android/app/src/main/kotlin/com/example/intro_flutter_gpu/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.intro_flutter_gpu import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/intro_flutter_gpu/step_02/android/.gitignore b/intro_flutter_gpu/step_02/android/.gitignore index be3943c96d..55afd919c6 100644 --- a/intro_flutter_gpu/step_02/android/.gitignore +++ b/intro_flutter_gpu/step_02/android/.gitignore @@ -5,7 +5,6 @@ gradle-wrapper.jar /gradlew.bat /local.properties GeneratedPluginRegistrant.java -.cxx/ # Remember to never publicly share your keystore. # See https://flutter.dev/to/reference-keystore diff --git a/intro_flutter_gpu/step_02/android/app/build.gradle.kts b/intro_flutter_gpu/step_02/android/app/build.gradle.kts index ba03f47e22..857326fb7b 100644 --- a/intro_flutter_gpu/step_02/android/app/build.gradle.kts +++ b/intro_flutter_gpu/step_02/android/app/build.gradle.kts @@ -11,12 +11,12 @@ android { ndkVersion = flutter.ndkVersion compileOptions { - sourceCompatibility = JavaVersion.VERSION_11 - targetCompatibility = JavaVersion.VERSION_11 + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 } kotlinOptions { - jvmTarget = JavaVersion.VERSION_11.toString() + jvmTarget = JavaVersion.VERSION_1_8.toString() } defaultConfig { diff --git a/intro_flutter_gpu/step_02/android/app/src/main/kotlin/com/example/intro_flutter_gpu/MainActivity.kt b/intro_flutter_gpu/step_02/android/app/src/main/kotlin/com/example/intro_flutter_gpu/MainActivity.kt index 309b877fe4..28c6a72dea 100644 --- a/intro_flutter_gpu/step_02/android/app/src/main/kotlin/com/example/intro_flutter_gpu/MainActivity.kt +++ b/intro_flutter_gpu/step_02/android/app/src/main/kotlin/com/example/intro_flutter_gpu/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.intro_flutter_gpu import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/intro_flutter_gpu/step_03/android/.gitignore b/intro_flutter_gpu/step_03/android/.gitignore index be3943c96d..55afd919c6 100644 --- a/intro_flutter_gpu/step_03/android/.gitignore +++ b/intro_flutter_gpu/step_03/android/.gitignore @@ -5,7 +5,6 @@ gradle-wrapper.jar /gradlew.bat /local.properties GeneratedPluginRegistrant.java -.cxx/ # Remember to never publicly share your keystore. # See https://flutter.dev/to/reference-keystore diff --git a/intro_flutter_gpu/step_03/android/app/build.gradle.kts b/intro_flutter_gpu/step_03/android/app/build.gradle.kts index ba03f47e22..857326fb7b 100644 --- a/intro_flutter_gpu/step_03/android/app/build.gradle.kts +++ b/intro_flutter_gpu/step_03/android/app/build.gradle.kts @@ -11,12 +11,12 @@ android { ndkVersion = flutter.ndkVersion compileOptions { - sourceCompatibility = JavaVersion.VERSION_11 - targetCompatibility = JavaVersion.VERSION_11 + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 } kotlinOptions { - jvmTarget = JavaVersion.VERSION_11.toString() + jvmTarget = JavaVersion.VERSION_1_8.toString() } defaultConfig { diff --git a/intro_flutter_gpu/step_03/android/app/src/main/kotlin/com/example/intro_flutter_gpu/MainActivity.kt b/intro_flutter_gpu/step_03/android/app/src/main/kotlin/com/example/intro_flutter_gpu/MainActivity.kt index 309b877fe4..28c6a72dea 100644 --- a/intro_flutter_gpu/step_03/android/app/src/main/kotlin/com/example/intro_flutter_gpu/MainActivity.kt +++ b/intro_flutter_gpu/step_03/android/app/src/main/kotlin/com/example/intro_flutter_gpu/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.intro_flutter_gpu import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/intro_flutter_gpu/step_04/android/.gitignore b/intro_flutter_gpu/step_04/android/.gitignore index be3943c96d..55afd919c6 100644 --- a/intro_flutter_gpu/step_04/android/.gitignore +++ b/intro_flutter_gpu/step_04/android/.gitignore @@ -5,7 +5,6 @@ gradle-wrapper.jar /gradlew.bat /local.properties GeneratedPluginRegistrant.java -.cxx/ # Remember to never publicly share your keystore. # See https://flutter.dev/to/reference-keystore diff --git a/intro_flutter_gpu/step_04/android/app/build.gradle.kts b/intro_flutter_gpu/step_04/android/app/build.gradle.kts index ba03f47e22..857326fb7b 100644 --- a/intro_flutter_gpu/step_04/android/app/build.gradle.kts +++ b/intro_flutter_gpu/step_04/android/app/build.gradle.kts @@ -11,12 +11,12 @@ android { ndkVersion = flutter.ndkVersion compileOptions { - sourceCompatibility = JavaVersion.VERSION_11 - targetCompatibility = JavaVersion.VERSION_11 + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 } kotlinOptions { - jvmTarget = JavaVersion.VERSION_11.toString() + jvmTarget = JavaVersion.VERSION_1_8.toString() } defaultConfig { diff --git a/intro_flutter_gpu/step_04/android/app/src/main/kotlin/com/example/intro_flutter_gpu/MainActivity.kt b/intro_flutter_gpu/step_04/android/app/src/main/kotlin/com/example/intro_flutter_gpu/MainActivity.kt index 309b877fe4..28c6a72dea 100644 --- a/intro_flutter_gpu/step_04/android/app/src/main/kotlin/com/example/intro_flutter_gpu/MainActivity.kt +++ b/intro_flutter_gpu/step_04/android/app/src/main/kotlin/com/example/intro_flutter_gpu/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.intro_flutter_gpu import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/intro_flutter_gpu/step_05/android/.gitignore b/intro_flutter_gpu/step_05/android/.gitignore index be3943c96d..55afd919c6 100644 --- a/intro_flutter_gpu/step_05/android/.gitignore +++ b/intro_flutter_gpu/step_05/android/.gitignore @@ -5,7 +5,6 @@ gradle-wrapper.jar /gradlew.bat /local.properties GeneratedPluginRegistrant.java -.cxx/ # Remember to never publicly share your keystore. # See https://flutter.dev/to/reference-keystore diff --git a/intro_flutter_gpu/step_05/android/app/build.gradle.kts b/intro_flutter_gpu/step_05/android/app/build.gradle.kts index ba03f47e22..857326fb7b 100644 --- a/intro_flutter_gpu/step_05/android/app/build.gradle.kts +++ b/intro_flutter_gpu/step_05/android/app/build.gradle.kts @@ -11,12 +11,12 @@ android { ndkVersion = flutter.ndkVersion compileOptions { - sourceCompatibility = JavaVersion.VERSION_11 - targetCompatibility = JavaVersion.VERSION_11 + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 } kotlinOptions { - jvmTarget = JavaVersion.VERSION_11.toString() + jvmTarget = JavaVersion.VERSION_1_8.toString() } defaultConfig { diff --git a/intro_flutter_gpu/step_05/android/app/src/main/kotlin/com/example/intro_flutter_gpu/MainActivity.kt b/intro_flutter_gpu/step_05/android/app/src/main/kotlin/com/example/intro_flutter_gpu/MainActivity.kt index 309b877fe4..28c6a72dea 100644 --- a/intro_flutter_gpu/step_05/android/app/src/main/kotlin/com/example/intro_flutter_gpu/MainActivity.kt +++ b/intro_flutter_gpu/step_05/android/app/src/main/kotlin/com/example/intro_flutter_gpu/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.intro_flutter_gpu import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/intro_flutter_gpu/step_06/android/.gitignore b/intro_flutter_gpu/step_06/android/.gitignore index be3943c96d..55afd919c6 100644 --- a/intro_flutter_gpu/step_06/android/.gitignore +++ b/intro_flutter_gpu/step_06/android/.gitignore @@ -5,7 +5,6 @@ gradle-wrapper.jar /gradlew.bat /local.properties GeneratedPluginRegistrant.java -.cxx/ # Remember to never publicly share your keystore. # See https://flutter.dev/to/reference-keystore diff --git a/intro_flutter_gpu/step_06/android/app/build.gradle.kts b/intro_flutter_gpu/step_06/android/app/build.gradle.kts index ba03f47e22..857326fb7b 100644 --- a/intro_flutter_gpu/step_06/android/app/build.gradle.kts +++ b/intro_flutter_gpu/step_06/android/app/build.gradle.kts @@ -11,12 +11,12 @@ android { ndkVersion = flutter.ndkVersion compileOptions { - sourceCompatibility = JavaVersion.VERSION_11 - targetCompatibility = JavaVersion.VERSION_11 + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 } kotlinOptions { - jvmTarget = JavaVersion.VERSION_11.toString() + jvmTarget = JavaVersion.VERSION_1_8.toString() } defaultConfig { diff --git a/intro_flutter_gpu/step_06/android/app/src/main/kotlin/com/example/intro_flutter_gpu/MainActivity.kt b/intro_flutter_gpu/step_06/android/app/src/main/kotlin/com/example/intro_flutter_gpu/MainActivity.kt index 309b877fe4..28c6a72dea 100644 --- a/intro_flutter_gpu/step_06/android/app/src/main/kotlin/com/example/intro_flutter_gpu/MainActivity.kt +++ b/intro_flutter_gpu/step_06/android/app/src/main/kotlin/com/example/intro_flutter_gpu/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.intro_flutter_gpu import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/intro_flutter_gpu/step_07/android/.gitignore b/intro_flutter_gpu/step_07/android/.gitignore index be3943c96d..55afd919c6 100644 --- a/intro_flutter_gpu/step_07/android/.gitignore +++ b/intro_flutter_gpu/step_07/android/.gitignore @@ -5,7 +5,6 @@ gradle-wrapper.jar /gradlew.bat /local.properties GeneratedPluginRegistrant.java -.cxx/ # Remember to never publicly share your keystore. # See https://flutter.dev/to/reference-keystore diff --git a/intro_flutter_gpu/step_07/android/app/build.gradle.kts b/intro_flutter_gpu/step_07/android/app/build.gradle.kts index ba03f47e22..857326fb7b 100644 --- a/intro_flutter_gpu/step_07/android/app/build.gradle.kts +++ b/intro_flutter_gpu/step_07/android/app/build.gradle.kts @@ -11,12 +11,12 @@ android { ndkVersion = flutter.ndkVersion compileOptions { - sourceCompatibility = JavaVersion.VERSION_11 - targetCompatibility = JavaVersion.VERSION_11 + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 } kotlinOptions { - jvmTarget = JavaVersion.VERSION_11.toString() + jvmTarget = JavaVersion.VERSION_1_8.toString() } defaultConfig { diff --git a/intro_flutter_gpu/step_07/android/app/src/main/kotlin/com/example/intro_flutter_gpu/MainActivity.kt b/intro_flutter_gpu/step_07/android/app/src/main/kotlin/com/example/intro_flutter_gpu/MainActivity.kt index 309b877fe4..28c6a72dea 100644 --- a/intro_flutter_gpu/step_07/android/app/src/main/kotlin/com/example/intro_flutter_gpu/MainActivity.kt +++ b/intro_flutter_gpu/step_07/android/app/src/main/kotlin/com/example/intro_flutter_gpu/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.intro_flutter_gpu import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/intro_flutter_gpu/step_08/android/.gitignore b/intro_flutter_gpu/step_08/android/.gitignore index be3943c96d..55afd919c6 100644 --- a/intro_flutter_gpu/step_08/android/.gitignore +++ b/intro_flutter_gpu/step_08/android/.gitignore @@ -5,7 +5,6 @@ gradle-wrapper.jar /gradlew.bat /local.properties GeneratedPluginRegistrant.java -.cxx/ # Remember to never publicly share your keystore. # See https://flutter.dev/to/reference-keystore diff --git a/intro_flutter_gpu/step_08/android/app/build.gradle.kts b/intro_flutter_gpu/step_08/android/app/build.gradle.kts index ba03f47e22..857326fb7b 100644 --- a/intro_flutter_gpu/step_08/android/app/build.gradle.kts +++ b/intro_flutter_gpu/step_08/android/app/build.gradle.kts @@ -11,12 +11,12 @@ android { ndkVersion = flutter.ndkVersion compileOptions { - sourceCompatibility = JavaVersion.VERSION_11 - targetCompatibility = JavaVersion.VERSION_11 + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 } kotlinOptions { - jvmTarget = JavaVersion.VERSION_11.toString() + jvmTarget = JavaVersion.VERSION_1_8.toString() } defaultConfig { diff --git a/intro_flutter_gpu/step_08/android/app/src/main/kotlin/com/example/intro_flutter_gpu/MainActivity.kt b/intro_flutter_gpu/step_08/android/app/src/main/kotlin/com/example/intro_flutter_gpu/MainActivity.kt index 309b877fe4..28c6a72dea 100644 --- a/intro_flutter_gpu/step_08/android/app/src/main/kotlin/com/example/intro_flutter_gpu/MainActivity.kt +++ b/intro_flutter_gpu/step_08/android/app/src/main/kotlin/com/example/intro_flutter_gpu/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.intro_flutter_gpu import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/intro_flutter_gpu/step_09/android/.gitignore b/intro_flutter_gpu/step_09/android/.gitignore index be3943c96d..55afd919c6 100644 --- a/intro_flutter_gpu/step_09/android/.gitignore +++ b/intro_flutter_gpu/step_09/android/.gitignore @@ -5,7 +5,6 @@ gradle-wrapper.jar /gradlew.bat /local.properties GeneratedPluginRegistrant.java -.cxx/ # Remember to never publicly share your keystore. # See https://flutter.dev/to/reference-keystore diff --git a/intro_flutter_gpu/step_09/android/app/build.gradle.kts b/intro_flutter_gpu/step_09/android/app/build.gradle.kts index ba03f47e22..857326fb7b 100644 --- a/intro_flutter_gpu/step_09/android/app/build.gradle.kts +++ b/intro_flutter_gpu/step_09/android/app/build.gradle.kts @@ -11,12 +11,12 @@ android { ndkVersion = flutter.ndkVersion compileOptions { - sourceCompatibility = JavaVersion.VERSION_11 - targetCompatibility = JavaVersion.VERSION_11 + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 } kotlinOptions { - jvmTarget = JavaVersion.VERSION_11.toString() + jvmTarget = JavaVersion.VERSION_1_8.toString() } defaultConfig { diff --git a/intro_flutter_gpu/step_09/android/app/src/main/kotlin/com/example/intro_flutter_gpu/MainActivity.kt b/intro_flutter_gpu/step_09/android/app/src/main/kotlin/com/example/intro_flutter_gpu/MainActivity.kt index 309b877fe4..28c6a72dea 100644 --- a/intro_flutter_gpu/step_09/android/app/src/main/kotlin/com/example/intro_flutter_gpu/MainActivity.kt +++ b/intro_flutter_gpu/step_09/android/app/src/main/kotlin/com/example/intro_flutter_gpu/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.intro_flutter_gpu import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/intro_flutter_gpu/step_10/android/.gitignore b/intro_flutter_gpu/step_10/android/.gitignore index be3943c96d..55afd919c6 100644 --- a/intro_flutter_gpu/step_10/android/.gitignore +++ b/intro_flutter_gpu/step_10/android/.gitignore @@ -5,7 +5,6 @@ gradle-wrapper.jar /gradlew.bat /local.properties GeneratedPluginRegistrant.java -.cxx/ # Remember to never publicly share your keystore. # See https://flutter.dev/to/reference-keystore diff --git a/intro_flutter_gpu/step_10/android/app/build.gradle.kts b/intro_flutter_gpu/step_10/android/app/build.gradle.kts index ba03f47e22..857326fb7b 100644 --- a/intro_flutter_gpu/step_10/android/app/build.gradle.kts +++ b/intro_flutter_gpu/step_10/android/app/build.gradle.kts @@ -11,12 +11,12 @@ android { ndkVersion = flutter.ndkVersion compileOptions { - sourceCompatibility = JavaVersion.VERSION_11 - targetCompatibility = JavaVersion.VERSION_11 + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 } kotlinOptions { - jvmTarget = JavaVersion.VERSION_11.toString() + jvmTarget = JavaVersion.VERSION_1_8.toString() } defaultConfig { diff --git a/intro_flutter_gpu/step_10/android/app/src/main/kotlin/com/example/intro_flutter_gpu/MainActivity.kt b/intro_flutter_gpu/step_10/android/app/src/main/kotlin/com/example/intro_flutter_gpu/MainActivity.kt index 309b877fe4..28c6a72dea 100644 --- a/intro_flutter_gpu/step_10/android/app/src/main/kotlin/com/example/intro_flutter_gpu/MainActivity.kt +++ b/intro_flutter_gpu/step_10/android/app/src/main/kotlin/com/example/intro_flutter_gpu/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.intro_flutter_gpu import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/intro_flutter_gpu/step_11/android/.gitignore b/intro_flutter_gpu/step_11/android/.gitignore index be3943c96d..55afd919c6 100644 --- a/intro_flutter_gpu/step_11/android/.gitignore +++ b/intro_flutter_gpu/step_11/android/.gitignore @@ -5,7 +5,6 @@ gradle-wrapper.jar /gradlew.bat /local.properties GeneratedPluginRegistrant.java -.cxx/ # Remember to never publicly share your keystore. # See https://flutter.dev/to/reference-keystore diff --git a/intro_flutter_gpu/step_11/android/app/build.gradle.kts b/intro_flutter_gpu/step_11/android/app/build.gradle.kts index ba03f47e22..857326fb7b 100644 --- a/intro_flutter_gpu/step_11/android/app/build.gradle.kts +++ b/intro_flutter_gpu/step_11/android/app/build.gradle.kts @@ -11,12 +11,12 @@ android { ndkVersion = flutter.ndkVersion compileOptions { - sourceCompatibility = JavaVersion.VERSION_11 - targetCompatibility = JavaVersion.VERSION_11 + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 } kotlinOptions { - jvmTarget = JavaVersion.VERSION_11.toString() + jvmTarget = JavaVersion.VERSION_1_8.toString() } defaultConfig { diff --git a/intro_flutter_gpu/step_11/android/app/src/main/kotlin/com/example/intro_flutter_gpu/MainActivity.kt b/intro_flutter_gpu/step_11/android/app/src/main/kotlin/com/example/intro_flutter_gpu/MainActivity.kt index 309b877fe4..28c6a72dea 100644 --- a/intro_flutter_gpu/step_11/android/app/src/main/kotlin/com/example/intro_flutter_gpu/MainActivity.kt +++ b/intro_flutter_gpu/step_11/android/app/src/main/kotlin/com/example/intro_flutter_gpu/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.intro_flutter_gpu import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/intro_flutter_gpu/step_12/android/.gitignore b/intro_flutter_gpu/step_12/android/.gitignore index be3943c96d..55afd919c6 100644 --- a/intro_flutter_gpu/step_12/android/.gitignore +++ b/intro_flutter_gpu/step_12/android/.gitignore @@ -5,7 +5,6 @@ gradle-wrapper.jar /gradlew.bat /local.properties GeneratedPluginRegistrant.java -.cxx/ # Remember to never publicly share your keystore. # See https://flutter.dev/to/reference-keystore diff --git a/intro_flutter_gpu/step_12/android/app/build.gradle.kts b/intro_flutter_gpu/step_12/android/app/build.gradle.kts index ba03f47e22..857326fb7b 100644 --- a/intro_flutter_gpu/step_12/android/app/build.gradle.kts +++ b/intro_flutter_gpu/step_12/android/app/build.gradle.kts @@ -11,12 +11,12 @@ android { ndkVersion = flutter.ndkVersion compileOptions { - sourceCompatibility = JavaVersion.VERSION_11 - targetCompatibility = JavaVersion.VERSION_11 + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 } kotlinOptions { - jvmTarget = JavaVersion.VERSION_11.toString() + jvmTarget = JavaVersion.VERSION_1_8.toString() } defaultConfig { diff --git a/intro_flutter_gpu/step_12/android/app/src/main/kotlin/com/example/intro_flutter_gpu/MainActivity.kt b/intro_flutter_gpu/step_12/android/app/src/main/kotlin/com/example/intro_flutter_gpu/MainActivity.kt index 309b877fe4..28c6a72dea 100644 --- a/intro_flutter_gpu/step_12/android/app/src/main/kotlin/com/example/intro_flutter_gpu/MainActivity.kt +++ b/intro_flutter_gpu/step_12/android/app/src/main/kotlin/com/example/intro_flutter_gpu/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.intro_flutter_gpu import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() From e3f39a03a1cb510c11c823cbd7c7ecc4e036ac43 Mon Sep 17 00:00:00 2001 From: Brett Morgan Date: Wed, 22 Jan 2025 15:07:45 +1100 Subject: [PATCH 105/108] Update `namer` --- .../app/src/main/kotlin/com/example/namer_app/MainActivity.kt | 2 +- namer/step_03/macos/Runner/Configs/AppInfo.xcconfig | 2 +- namer/step_03/windows/runner/Runner.rc | 2 +- .../app/src/main/kotlin/com/example/namer_app/MainActivity.kt | 2 +- namer/step_04_a_widget/macos/Runner/Configs/AppInfo.xcconfig | 2 +- namer/step_04_a_widget/windows/runner/Runner.rc | 2 +- .../app/src/main/kotlin/com/example/namer_app/MainActivity.kt | 2 +- namer/step_04_b_behavior/macos/Runner/Configs/AppInfo.xcconfig | 2 +- namer/step_04_b_behavior/windows/runner/Runner.rc | 2 +- .../app/src/main/kotlin/com/example/namer_app/MainActivity.kt | 2 +- namer/step_05_a_pair/macos/Runner/Configs/AppInfo.xcconfig | 2 +- namer/step_05_a_pair/windows/runner/Runner.rc | 2 +- .../app/src/main/kotlin/com/example/namer_app/MainActivity.kt | 2 +- namer/step_05_b_extract/macos/Runner/Configs/AppInfo.xcconfig | 2 +- namer/step_05_b_extract/windows/runner/Runner.rc | 2 +- .../app/src/main/kotlin/com/example/namer_app/MainActivity.kt | 2 +- .../macos/Runner/Configs/AppInfo.xcconfig | 2 +- namer/step_05_c_card_padding/windows/runner/Runner.rc | 2 +- .../app/src/main/kotlin/com/example/namer_app/MainActivity.kt | 2 +- namer/step_05_d_theme/macos/Runner/Configs/AppInfo.xcconfig | 2 +- namer/step_05_d_theme/windows/runner/Runner.rc | 2 +- .../app/src/main/kotlin/com/example/namer_app/MainActivity.kt | 2 +- .../step_05_e_text_style/macos/Runner/Configs/AppInfo.xcconfig | 2 +- namer/step_05_e_text_style/windows/runner/Runner.rc | 2 +- .../app/src/main/kotlin/com/example/namer_app/MainActivity.kt | 2 +- .../macos/Runner/Configs/AppInfo.xcconfig | 2 +- namer/step_05_f_accessibility/windows/runner/Runner.rc | 2 +- .../app/src/main/kotlin/com/example/namer_app/MainActivity.kt | 2 +- .../macos/Runner/Configs/AppInfo.xcconfig | 2 +- namer/step_05_g_center_vertical/windows/runner/Runner.rc | 2 +- .../app/src/main/kotlin/com/example/namer_app/MainActivity.kt | 2 +- .../macos/Runner/Configs/AppInfo.xcconfig | 2 +- namer/step_05_h_center_horizontal/windows/runner/Runner.rc | 2 +- .../app/src/main/kotlin/com/example/namer_app/MainActivity.kt | 2 +- .../macos/Runner/Configs/AppInfo.xcconfig | 2 +- namer/step_05_i_optional_changes/windows/runner/Runner.rc | 2 +- .../app/src/main/kotlin/com/example/namer_app/MainActivity.kt | 2 +- .../macos/Runner/Configs/AppInfo.xcconfig | 2 +- namer/step_06_a_business_logic/windows/runner/Runner.rc | 2 +- .../app/src/main/kotlin/com/example/namer_app/MainActivity.kt | 2 +- namer/step_06_b_add_row/macos/Runner/Configs/AppInfo.xcconfig | 2 +- namer/step_06_b_add_row/windows/runner/Runner.rc | 2 +- .../app/src/main/kotlin/com/example/namer_app/MainActivity.kt | 2 +- .../macos/Runner/Configs/AppInfo.xcconfig | 2 +- namer/step_06_c_add_like_button/windows/runner/Runner.rc | 2 +- .../app/src/main/kotlin/com/example/namer_app/MainActivity.kt | 2 +- .../macos/Runner/Configs/AppInfo.xcconfig | 2 +- namer/step_07_a_split_my_home_page/windows/runner/Runner.rc | 2 +- .../app/src/main/kotlin/com/example/namer_app/MainActivity.kt | 2 +- .../macos/Runner/Configs/AppInfo.xcconfig | 2 +- namer/step_07_b_convert_to_stateful/windows/runner/Runner.rc | 2 +- .../app/src/main/kotlin/com/example/namer_app/MainActivity.kt | 2 +- .../macos/Runner/Configs/AppInfo.xcconfig | 2 +- namer/step_07_c_add_selectedindex/windows/runner/Runner.rc | 2 +- .../app/src/main/kotlin/com/example/namer_app/MainActivity.kt | 2 +- .../macos/Runner/Configs/AppInfo.xcconfig | 2 +- namer/step_07_d_use_selectedindex/windows/runner/Runner.rc | 2 +- .../app/src/main/kotlin/com/example/namer_app/MainActivity.kt | 2 +- .../macos/Runner/Configs/AppInfo.xcconfig | 2 +- namer/step_07_e_add_layout_builder/windows/runner/Runner.rc | 2 +- .../app/src/main/kotlin/com/example/namer_app/MainActivity.kt | 2 +- namer/step_08/macos/Runner/Configs/AppInfo.xcconfig | 2 +- namer/step_08/windows/runner/Runner.rc | 2 +- 63 files changed, 63 insertions(+), 63 deletions(-) diff --git a/namer/step_03/android/app/src/main/kotlin/com/example/namer_app/MainActivity.kt b/namer/step_03/android/app/src/main/kotlin/com/example/namer_app/MainActivity.kt index 712f297754..461d0f8fc8 100644 --- a/namer/step_03/android/app/src/main/kotlin/com/example/namer_app/MainActivity.kt +++ b/namer/step_03/android/app/src/main/kotlin/com/example/namer_app/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.namer_app import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/namer/step_03/macos/Runner/Configs/AppInfo.xcconfig b/namer/step_03/macos/Runner/Configs/AppInfo.xcconfig index 65b878fd38..546247b232 100644 --- a/namer/step_03/macos/Runner/Configs/AppInfo.xcconfig +++ b/namer/step_03/macos/Runner/Configs/AppInfo.xcconfig @@ -11,4 +11,4 @@ PRODUCT_NAME = namer_app PRODUCT_BUNDLE_IDENTIFIER = com.example.namerApp // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. diff --git a/namer/step_03/windows/runner/Runner.rc b/namer/step_03/windows/runner/Runner.rc index a8e432753f..9e81a0e8df 100644 --- a/namer/step_03/windows/runner/Runner.rc +++ b/namer/step_03/windows/runner/Runner.rc @@ -93,7 +93,7 @@ BEGIN VALUE "FileDescription", "namer_app" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "InternalName", "namer_app" "\0" - VALUE "LegalCopyright", "Copyright (C) 2024 com.example. All rights reserved." "\0" + VALUE "LegalCopyright", "Copyright (C) 2025 com.example. All rights reserved." "\0" VALUE "OriginalFilename", "namer_app.exe" "\0" VALUE "ProductName", "namer_app" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" diff --git a/namer/step_04_a_widget/android/app/src/main/kotlin/com/example/namer_app/MainActivity.kt b/namer/step_04_a_widget/android/app/src/main/kotlin/com/example/namer_app/MainActivity.kt index 712f297754..461d0f8fc8 100644 --- a/namer/step_04_a_widget/android/app/src/main/kotlin/com/example/namer_app/MainActivity.kt +++ b/namer/step_04_a_widget/android/app/src/main/kotlin/com/example/namer_app/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.namer_app import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/namer/step_04_a_widget/macos/Runner/Configs/AppInfo.xcconfig b/namer/step_04_a_widget/macos/Runner/Configs/AppInfo.xcconfig index 65b878fd38..546247b232 100644 --- a/namer/step_04_a_widget/macos/Runner/Configs/AppInfo.xcconfig +++ b/namer/step_04_a_widget/macos/Runner/Configs/AppInfo.xcconfig @@ -11,4 +11,4 @@ PRODUCT_NAME = namer_app PRODUCT_BUNDLE_IDENTIFIER = com.example.namerApp // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. diff --git a/namer/step_04_a_widget/windows/runner/Runner.rc b/namer/step_04_a_widget/windows/runner/Runner.rc index a8e432753f..9e81a0e8df 100644 --- a/namer/step_04_a_widget/windows/runner/Runner.rc +++ b/namer/step_04_a_widget/windows/runner/Runner.rc @@ -93,7 +93,7 @@ BEGIN VALUE "FileDescription", "namer_app" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "InternalName", "namer_app" "\0" - VALUE "LegalCopyright", "Copyright (C) 2024 com.example. All rights reserved." "\0" + VALUE "LegalCopyright", "Copyright (C) 2025 com.example. All rights reserved." "\0" VALUE "OriginalFilename", "namer_app.exe" "\0" VALUE "ProductName", "namer_app" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" diff --git a/namer/step_04_b_behavior/android/app/src/main/kotlin/com/example/namer_app/MainActivity.kt b/namer/step_04_b_behavior/android/app/src/main/kotlin/com/example/namer_app/MainActivity.kt index 712f297754..461d0f8fc8 100644 --- a/namer/step_04_b_behavior/android/app/src/main/kotlin/com/example/namer_app/MainActivity.kt +++ b/namer/step_04_b_behavior/android/app/src/main/kotlin/com/example/namer_app/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.namer_app import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/namer/step_04_b_behavior/macos/Runner/Configs/AppInfo.xcconfig b/namer/step_04_b_behavior/macos/Runner/Configs/AppInfo.xcconfig index 65b878fd38..546247b232 100644 --- a/namer/step_04_b_behavior/macos/Runner/Configs/AppInfo.xcconfig +++ b/namer/step_04_b_behavior/macos/Runner/Configs/AppInfo.xcconfig @@ -11,4 +11,4 @@ PRODUCT_NAME = namer_app PRODUCT_BUNDLE_IDENTIFIER = com.example.namerApp // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. diff --git a/namer/step_04_b_behavior/windows/runner/Runner.rc b/namer/step_04_b_behavior/windows/runner/Runner.rc index a8e432753f..9e81a0e8df 100644 --- a/namer/step_04_b_behavior/windows/runner/Runner.rc +++ b/namer/step_04_b_behavior/windows/runner/Runner.rc @@ -93,7 +93,7 @@ BEGIN VALUE "FileDescription", "namer_app" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "InternalName", "namer_app" "\0" - VALUE "LegalCopyright", "Copyright (C) 2024 com.example. All rights reserved." "\0" + VALUE "LegalCopyright", "Copyright (C) 2025 com.example. All rights reserved." "\0" VALUE "OriginalFilename", "namer_app.exe" "\0" VALUE "ProductName", "namer_app" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" diff --git a/namer/step_05_a_pair/android/app/src/main/kotlin/com/example/namer_app/MainActivity.kt b/namer/step_05_a_pair/android/app/src/main/kotlin/com/example/namer_app/MainActivity.kt index 712f297754..461d0f8fc8 100644 --- a/namer/step_05_a_pair/android/app/src/main/kotlin/com/example/namer_app/MainActivity.kt +++ b/namer/step_05_a_pair/android/app/src/main/kotlin/com/example/namer_app/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.namer_app import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/namer/step_05_a_pair/macos/Runner/Configs/AppInfo.xcconfig b/namer/step_05_a_pair/macos/Runner/Configs/AppInfo.xcconfig index 65b878fd38..546247b232 100644 --- a/namer/step_05_a_pair/macos/Runner/Configs/AppInfo.xcconfig +++ b/namer/step_05_a_pair/macos/Runner/Configs/AppInfo.xcconfig @@ -11,4 +11,4 @@ PRODUCT_NAME = namer_app PRODUCT_BUNDLE_IDENTIFIER = com.example.namerApp // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. diff --git a/namer/step_05_a_pair/windows/runner/Runner.rc b/namer/step_05_a_pair/windows/runner/Runner.rc index a8e432753f..9e81a0e8df 100644 --- a/namer/step_05_a_pair/windows/runner/Runner.rc +++ b/namer/step_05_a_pair/windows/runner/Runner.rc @@ -93,7 +93,7 @@ BEGIN VALUE "FileDescription", "namer_app" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "InternalName", "namer_app" "\0" - VALUE "LegalCopyright", "Copyright (C) 2024 com.example. All rights reserved." "\0" + VALUE "LegalCopyright", "Copyright (C) 2025 com.example. All rights reserved." "\0" VALUE "OriginalFilename", "namer_app.exe" "\0" VALUE "ProductName", "namer_app" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" diff --git a/namer/step_05_b_extract/android/app/src/main/kotlin/com/example/namer_app/MainActivity.kt b/namer/step_05_b_extract/android/app/src/main/kotlin/com/example/namer_app/MainActivity.kt index 712f297754..461d0f8fc8 100644 --- a/namer/step_05_b_extract/android/app/src/main/kotlin/com/example/namer_app/MainActivity.kt +++ b/namer/step_05_b_extract/android/app/src/main/kotlin/com/example/namer_app/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.namer_app import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/namer/step_05_b_extract/macos/Runner/Configs/AppInfo.xcconfig b/namer/step_05_b_extract/macos/Runner/Configs/AppInfo.xcconfig index 65b878fd38..546247b232 100644 --- a/namer/step_05_b_extract/macos/Runner/Configs/AppInfo.xcconfig +++ b/namer/step_05_b_extract/macos/Runner/Configs/AppInfo.xcconfig @@ -11,4 +11,4 @@ PRODUCT_NAME = namer_app PRODUCT_BUNDLE_IDENTIFIER = com.example.namerApp // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. diff --git a/namer/step_05_b_extract/windows/runner/Runner.rc b/namer/step_05_b_extract/windows/runner/Runner.rc index a8e432753f..9e81a0e8df 100644 --- a/namer/step_05_b_extract/windows/runner/Runner.rc +++ b/namer/step_05_b_extract/windows/runner/Runner.rc @@ -93,7 +93,7 @@ BEGIN VALUE "FileDescription", "namer_app" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "InternalName", "namer_app" "\0" - VALUE "LegalCopyright", "Copyright (C) 2024 com.example. All rights reserved." "\0" + VALUE "LegalCopyright", "Copyright (C) 2025 com.example. All rights reserved." "\0" VALUE "OriginalFilename", "namer_app.exe" "\0" VALUE "ProductName", "namer_app" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" diff --git a/namer/step_05_c_card_padding/android/app/src/main/kotlin/com/example/namer_app/MainActivity.kt b/namer/step_05_c_card_padding/android/app/src/main/kotlin/com/example/namer_app/MainActivity.kt index 712f297754..461d0f8fc8 100644 --- a/namer/step_05_c_card_padding/android/app/src/main/kotlin/com/example/namer_app/MainActivity.kt +++ b/namer/step_05_c_card_padding/android/app/src/main/kotlin/com/example/namer_app/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.namer_app import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/namer/step_05_c_card_padding/macos/Runner/Configs/AppInfo.xcconfig b/namer/step_05_c_card_padding/macos/Runner/Configs/AppInfo.xcconfig index 65b878fd38..546247b232 100644 --- a/namer/step_05_c_card_padding/macos/Runner/Configs/AppInfo.xcconfig +++ b/namer/step_05_c_card_padding/macos/Runner/Configs/AppInfo.xcconfig @@ -11,4 +11,4 @@ PRODUCT_NAME = namer_app PRODUCT_BUNDLE_IDENTIFIER = com.example.namerApp // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. diff --git a/namer/step_05_c_card_padding/windows/runner/Runner.rc b/namer/step_05_c_card_padding/windows/runner/Runner.rc index a8e432753f..9e81a0e8df 100644 --- a/namer/step_05_c_card_padding/windows/runner/Runner.rc +++ b/namer/step_05_c_card_padding/windows/runner/Runner.rc @@ -93,7 +93,7 @@ BEGIN VALUE "FileDescription", "namer_app" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "InternalName", "namer_app" "\0" - VALUE "LegalCopyright", "Copyright (C) 2024 com.example. All rights reserved." "\0" + VALUE "LegalCopyright", "Copyright (C) 2025 com.example. All rights reserved." "\0" VALUE "OriginalFilename", "namer_app.exe" "\0" VALUE "ProductName", "namer_app" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" diff --git a/namer/step_05_d_theme/android/app/src/main/kotlin/com/example/namer_app/MainActivity.kt b/namer/step_05_d_theme/android/app/src/main/kotlin/com/example/namer_app/MainActivity.kt index 712f297754..461d0f8fc8 100644 --- a/namer/step_05_d_theme/android/app/src/main/kotlin/com/example/namer_app/MainActivity.kt +++ b/namer/step_05_d_theme/android/app/src/main/kotlin/com/example/namer_app/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.namer_app import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/namer/step_05_d_theme/macos/Runner/Configs/AppInfo.xcconfig b/namer/step_05_d_theme/macos/Runner/Configs/AppInfo.xcconfig index 65b878fd38..546247b232 100644 --- a/namer/step_05_d_theme/macos/Runner/Configs/AppInfo.xcconfig +++ b/namer/step_05_d_theme/macos/Runner/Configs/AppInfo.xcconfig @@ -11,4 +11,4 @@ PRODUCT_NAME = namer_app PRODUCT_BUNDLE_IDENTIFIER = com.example.namerApp // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. diff --git a/namer/step_05_d_theme/windows/runner/Runner.rc b/namer/step_05_d_theme/windows/runner/Runner.rc index a8e432753f..9e81a0e8df 100644 --- a/namer/step_05_d_theme/windows/runner/Runner.rc +++ b/namer/step_05_d_theme/windows/runner/Runner.rc @@ -93,7 +93,7 @@ BEGIN VALUE "FileDescription", "namer_app" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "InternalName", "namer_app" "\0" - VALUE "LegalCopyright", "Copyright (C) 2024 com.example. All rights reserved." "\0" + VALUE "LegalCopyright", "Copyright (C) 2025 com.example. All rights reserved." "\0" VALUE "OriginalFilename", "namer_app.exe" "\0" VALUE "ProductName", "namer_app" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" diff --git a/namer/step_05_e_text_style/android/app/src/main/kotlin/com/example/namer_app/MainActivity.kt b/namer/step_05_e_text_style/android/app/src/main/kotlin/com/example/namer_app/MainActivity.kt index 712f297754..461d0f8fc8 100644 --- a/namer/step_05_e_text_style/android/app/src/main/kotlin/com/example/namer_app/MainActivity.kt +++ b/namer/step_05_e_text_style/android/app/src/main/kotlin/com/example/namer_app/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.namer_app import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/namer/step_05_e_text_style/macos/Runner/Configs/AppInfo.xcconfig b/namer/step_05_e_text_style/macos/Runner/Configs/AppInfo.xcconfig index 65b878fd38..546247b232 100644 --- a/namer/step_05_e_text_style/macos/Runner/Configs/AppInfo.xcconfig +++ b/namer/step_05_e_text_style/macos/Runner/Configs/AppInfo.xcconfig @@ -11,4 +11,4 @@ PRODUCT_NAME = namer_app PRODUCT_BUNDLE_IDENTIFIER = com.example.namerApp // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. diff --git a/namer/step_05_e_text_style/windows/runner/Runner.rc b/namer/step_05_e_text_style/windows/runner/Runner.rc index a8e432753f..9e81a0e8df 100644 --- a/namer/step_05_e_text_style/windows/runner/Runner.rc +++ b/namer/step_05_e_text_style/windows/runner/Runner.rc @@ -93,7 +93,7 @@ BEGIN VALUE "FileDescription", "namer_app" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "InternalName", "namer_app" "\0" - VALUE "LegalCopyright", "Copyright (C) 2024 com.example. All rights reserved." "\0" + VALUE "LegalCopyright", "Copyright (C) 2025 com.example. All rights reserved." "\0" VALUE "OriginalFilename", "namer_app.exe" "\0" VALUE "ProductName", "namer_app" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" diff --git a/namer/step_05_f_accessibility/android/app/src/main/kotlin/com/example/namer_app/MainActivity.kt b/namer/step_05_f_accessibility/android/app/src/main/kotlin/com/example/namer_app/MainActivity.kt index 712f297754..461d0f8fc8 100644 --- a/namer/step_05_f_accessibility/android/app/src/main/kotlin/com/example/namer_app/MainActivity.kt +++ b/namer/step_05_f_accessibility/android/app/src/main/kotlin/com/example/namer_app/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.namer_app import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/namer/step_05_f_accessibility/macos/Runner/Configs/AppInfo.xcconfig b/namer/step_05_f_accessibility/macos/Runner/Configs/AppInfo.xcconfig index 65b878fd38..546247b232 100644 --- a/namer/step_05_f_accessibility/macos/Runner/Configs/AppInfo.xcconfig +++ b/namer/step_05_f_accessibility/macos/Runner/Configs/AppInfo.xcconfig @@ -11,4 +11,4 @@ PRODUCT_NAME = namer_app PRODUCT_BUNDLE_IDENTIFIER = com.example.namerApp // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. diff --git a/namer/step_05_f_accessibility/windows/runner/Runner.rc b/namer/step_05_f_accessibility/windows/runner/Runner.rc index a8e432753f..9e81a0e8df 100644 --- a/namer/step_05_f_accessibility/windows/runner/Runner.rc +++ b/namer/step_05_f_accessibility/windows/runner/Runner.rc @@ -93,7 +93,7 @@ BEGIN VALUE "FileDescription", "namer_app" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "InternalName", "namer_app" "\0" - VALUE "LegalCopyright", "Copyright (C) 2024 com.example. All rights reserved." "\0" + VALUE "LegalCopyright", "Copyright (C) 2025 com.example. All rights reserved." "\0" VALUE "OriginalFilename", "namer_app.exe" "\0" VALUE "ProductName", "namer_app" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" diff --git a/namer/step_05_g_center_vertical/android/app/src/main/kotlin/com/example/namer_app/MainActivity.kt b/namer/step_05_g_center_vertical/android/app/src/main/kotlin/com/example/namer_app/MainActivity.kt index 712f297754..461d0f8fc8 100644 --- a/namer/step_05_g_center_vertical/android/app/src/main/kotlin/com/example/namer_app/MainActivity.kt +++ b/namer/step_05_g_center_vertical/android/app/src/main/kotlin/com/example/namer_app/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.namer_app import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/namer/step_05_g_center_vertical/macos/Runner/Configs/AppInfo.xcconfig b/namer/step_05_g_center_vertical/macos/Runner/Configs/AppInfo.xcconfig index 65b878fd38..546247b232 100644 --- a/namer/step_05_g_center_vertical/macos/Runner/Configs/AppInfo.xcconfig +++ b/namer/step_05_g_center_vertical/macos/Runner/Configs/AppInfo.xcconfig @@ -11,4 +11,4 @@ PRODUCT_NAME = namer_app PRODUCT_BUNDLE_IDENTIFIER = com.example.namerApp // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. diff --git a/namer/step_05_g_center_vertical/windows/runner/Runner.rc b/namer/step_05_g_center_vertical/windows/runner/Runner.rc index a8e432753f..9e81a0e8df 100644 --- a/namer/step_05_g_center_vertical/windows/runner/Runner.rc +++ b/namer/step_05_g_center_vertical/windows/runner/Runner.rc @@ -93,7 +93,7 @@ BEGIN VALUE "FileDescription", "namer_app" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "InternalName", "namer_app" "\0" - VALUE "LegalCopyright", "Copyright (C) 2024 com.example. All rights reserved." "\0" + VALUE "LegalCopyright", "Copyright (C) 2025 com.example. All rights reserved." "\0" VALUE "OriginalFilename", "namer_app.exe" "\0" VALUE "ProductName", "namer_app" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" diff --git a/namer/step_05_h_center_horizontal/android/app/src/main/kotlin/com/example/namer_app/MainActivity.kt b/namer/step_05_h_center_horizontal/android/app/src/main/kotlin/com/example/namer_app/MainActivity.kt index 712f297754..461d0f8fc8 100644 --- a/namer/step_05_h_center_horizontal/android/app/src/main/kotlin/com/example/namer_app/MainActivity.kt +++ b/namer/step_05_h_center_horizontal/android/app/src/main/kotlin/com/example/namer_app/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.namer_app import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/namer/step_05_h_center_horizontal/macos/Runner/Configs/AppInfo.xcconfig b/namer/step_05_h_center_horizontal/macos/Runner/Configs/AppInfo.xcconfig index 65b878fd38..546247b232 100644 --- a/namer/step_05_h_center_horizontal/macos/Runner/Configs/AppInfo.xcconfig +++ b/namer/step_05_h_center_horizontal/macos/Runner/Configs/AppInfo.xcconfig @@ -11,4 +11,4 @@ PRODUCT_NAME = namer_app PRODUCT_BUNDLE_IDENTIFIER = com.example.namerApp // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. diff --git a/namer/step_05_h_center_horizontal/windows/runner/Runner.rc b/namer/step_05_h_center_horizontal/windows/runner/Runner.rc index a8e432753f..9e81a0e8df 100644 --- a/namer/step_05_h_center_horizontal/windows/runner/Runner.rc +++ b/namer/step_05_h_center_horizontal/windows/runner/Runner.rc @@ -93,7 +93,7 @@ BEGIN VALUE "FileDescription", "namer_app" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "InternalName", "namer_app" "\0" - VALUE "LegalCopyright", "Copyright (C) 2024 com.example. All rights reserved." "\0" + VALUE "LegalCopyright", "Copyright (C) 2025 com.example. All rights reserved." "\0" VALUE "OriginalFilename", "namer_app.exe" "\0" VALUE "ProductName", "namer_app" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" diff --git a/namer/step_05_i_optional_changes/android/app/src/main/kotlin/com/example/namer_app/MainActivity.kt b/namer/step_05_i_optional_changes/android/app/src/main/kotlin/com/example/namer_app/MainActivity.kt index 712f297754..461d0f8fc8 100644 --- a/namer/step_05_i_optional_changes/android/app/src/main/kotlin/com/example/namer_app/MainActivity.kt +++ b/namer/step_05_i_optional_changes/android/app/src/main/kotlin/com/example/namer_app/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.namer_app import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/namer/step_05_i_optional_changes/macos/Runner/Configs/AppInfo.xcconfig b/namer/step_05_i_optional_changes/macos/Runner/Configs/AppInfo.xcconfig index 65b878fd38..546247b232 100644 --- a/namer/step_05_i_optional_changes/macos/Runner/Configs/AppInfo.xcconfig +++ b/namer/step_05_i_optional_changes/macos/Runner/Configs/AppInfo.xcconfig @@ -11,4 +11,4 @@ PRODUCT_NAME = namer_app PRODUCT_BUNDLE_IDENTIFIER = com.example.namerApp // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. diff --git a/namer/step_05_i_optional_changes/windows/runner/Runner.rc b/namer/step_05_i_optional_changes/windows/runner/Runner.rc index a8e432753f..9e81a0e8df 100644 --- a/namer/step_05_i_optional_changes/windows/runner/Runner.rc +++ b/namer/step_05_i_optional_changes/windows/runner/Runner.rc @@ -93,7 +93,7 @@ BEGIN VALUE "FileDescription", "namer_app" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "InternalName", "namer_app" "\0" - VALUE "LegalCopyright", "Copyright (C) 2024 com.example. All rights reserved." "\0" + VALUE "LegalCopyright", "Copyright (C) 2025 com.example. All rights reserved." "\0" VALUE "OriginalFilename", "namer_app.exe" "\0" VALUE "ProductName", "namer_app" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" diff --git a/namer/step_06_a_business_logic/android/app/src/main/kotlin/com/example/namer_app/MainActivity.kt b/namer/step_06_a_business_logic/android/app/src/main/kotlin/com/example/namer_app/MainActivity.kt index 712f297754..461d0f8fc8 100644 --- a/namer/step_06_a_business_logic/android/app/src/main/kotlin/com/example/namer_app/MainActivity.kt +++ b/namer/step_06_a_business_logic/android/app/src/main/kotlin/com/example/namer_app/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.namer_app import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/namer/step_06_a_business_logic/macos/Runner/Configs/AppInfo.xcconfig b/namer/step_06_a_business_logic/macos/Runner/Configs/AppInfo.xcconfig index 65b878fd38..546247b232 100644 --- a/namer/step_06_a_business_logic/macos/Runner/Configs/AppInfo.xcconfig +++ b/namer/step_06_a_business_logic/macos/Runner/Configs/AppInfo.xcconfig @@ -11,4 +11,4 @@ PRODUCT_NAME = namer_app PRODUCT_BUNDLE_IDENTIFIER = com.example.namerApp // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. diff --git a/namer/step_06_a_business_logic/windows/runner/Runner.rc b/namer/step_06_a_business_logic/windows/runner/Runner.rc index a8e432753f..9e81a0e8df 100644 --- a/namer/step_06_a_business_logic/windows/runner/Runner.rc +++ b/namer/step_06_a_business_logic/windows/runner/Runner.rc @@ -93,7 +93,7 @@ BEGIN VALUE "FileDescription", "namer_app" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "InternalName", "namer_app" "\0" - VALUE "LegalCopyright", "Copyright (C) 2024 com.example. All rights reserved." "\0" + VALUE "LegalCopyright", "Copyright (C) 2025 com.example. All rights reserved." "\0" VALUE "OriginalFilename", "namer_app.exe" "\0" VALUE "ProductName", "namer_app" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" diff --git a/namer/step_06_b_add_row/android/app/src/main/kotlin/com/example/namer_app/MainActivity.kt b/namer/step_06_b_add_row/android/app/src/main/kotlin/com/example/namer_app/MainActivity.kt index 712f297754..461d0f8fc8 100644 --- a/namer/step_06_b_add_row/android/app/src/main/kotlin/com/example/namer_app/MainActivity.kt +++ b/namer/step_06_b_add_row/android/app/src/main/kotlin/com/example/namer_app/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.namer_app import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/namer/step_06_b_add_row/macos/Runner/Configs/AppInfo.xcconfig b/namer/step_06_b_add_row/macos/Runner/Configs/AppInfo.xcconfig index 65b878fd38..546247b232 100644 --- a/namer/step_06_b_add_row/macos/Runner/Configs/AppInfo.xcconfig +++ b/namer/step_06_b_add_row/macos/Runner/Configs/AppInfo.xcconfig @@ -11,4 +11,4 @@ PRODUCT_NAME = namer_app PRODUCT_BUNDLE_IDENTIFIER = com.example.namerApp // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. diff --git a/namer/step_06_b_add_row/windows/runner/Runner.rc b/namer/step_06_b_add_row/windows/runner/Runner.rc index a8e432753f..9e81a0e8df 100644 --- a/namer/step_06_b_add_row/windows/runner/Runner.rc +++ b/namer/step_06_b_add_row/windows/runner/Runner.rc @@ -93,7 +93,7 @@ BEGIN VALUE "FileDescription", "namer_app" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "InternalName", "namer_app" "\0" - VALUE "LegalCopyright", "Copyright (C) 2024 com.example. All rights reserved." "\0" + VALUE "LegalCopyright", "Copyright (C) 2025 com.example. All rights reserved." "\0" VALUE "OriginalFilename", "namer_app.exe" "\0" VALUE "ProductName", "namer_app" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" diff --git a/namer/step_06_c_add_like_button/android/app/src/main/kotlin/com/example/namer_app/MainActivity.kt b/namer/step_06_c_add_like_button/android/app/src/main/kotlin/com/example/namer_app/MainActivity.kt index 712f297754..461d0f8fc8 100644 --- a/namer/step_06_c_add_like_button/android/app/src/main/kotlin/com/example/namer_app/MainActivity.kt +++ b/namer/step_06_c_add_like_button/android/app/src/main/kotlin/com/example/namer_app/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.namer_app import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/namer/step_06_c_add_like_button/macos/Runner/Configs/AppInfo.xcconfig b/namer/step_06_c_add_like_button/macos/Runner/Configs/AppInfo.xcconfig index 65b878fd38..546247b232 100644 --- a/namer/step_06_c_add_like_button/macos/Runner/Configs/AppInfo.xcconfig +++ b/namer/step_06_c_add_like_button/macos/Runner/Configs/AppInfo.xcconfig @@ -11,4 +11,4 @@ PRODUCT_NAME = namer_app PRODUCT_BUNDLE_IDENTIFIER = com.example.namerApp // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. diff --git a/namer/step_06_c_add_like_button/windows/runner/Runner.rc b/namer/step_06_c_add_like_button/windows/runner/Runner.rc index a8e432753f..9e81a0e8df 100644 --- a/namer/step_06_c_add_like_button/windows/runner/Runner.rc +++ b/namer/step_06_c_add_like_button/windows/runner/Runner.rc @@ -93,7 +93,7 @@ BEGIN VALUE "FileDescription", "namer_app" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "InternalName", "namer_app" "\0" - VALUE "LegalCopyright", "Copyright (C) 2024 com.example. All rights reserved." "\0" + VALUE "LegalCopyright", "Copyright (C) 2025 com.example. All rights reserved." "\0" VALUE "OriginalFilename", "namer_app.exe" "\0" VALUE "ProductName", "namer_app" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" diff --git a/namer/step_07_a_split_my_home_page/android/app/src/main/kotlin/com/example/namer_app/MainActivity.kt b/namer/step_07_a_split_my_home_page/android/app/src/main/kotlin/com/example/namer_app/MainActivity.kt index 712f297754..461d0f8fc8 100644 --- a/namer/step_07_a_split_my_home_page/android/app/src/main/kotlin/com/example/namer_app/MainActivity.kt +++ b/namer/step_07_a_split_my_home_page/android/app/src/main/kotlin/com/example/namer_app/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.namer_app import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/namer/step_07_a_split_my_home_page/macos/Runner/Configs/AppInfo.xcconfig b/namer/step_07_a_split_my_home_page/macos/Runner/Configs/AppInfo.xcconfig index 65b878fd38..546247b232 100644 --- a/namer/step_07_a_split_my_home_page/macos/Runner/Configs/AppInfo.xcconfig +++ b/namer/step_07_a_split_my_home_page/macos/Runner/Configs/AppInfo.xcconfig @@ -11,4 +11,4 @@ PRODUCT_NAME = namer_app PRODUCT_BUNDLE_IDENTIFIER = com.example.namerApp // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. diff --git a/namer/step_07_a_split_my_home_page/windows/runner/Runner.rc b/namer/step_07_a_split_my_home_page/windows/runner/Runner.rc index a8e432753f..9e81a0e8df 100644 --- a/namer/step_07_a_split_my_home_page/windows/runner/Runner.rc +++ b/namer/step_07_a_split_my_home_page/windows/runner/Runner.rc @@ -93,7 +93,7 @@ BEGIN VALUE "FileDescription", "namer_app" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "InternalName", "namer_app" "\0" - VALUE "LegalCopyright", "Copyright (C) 2024 com.example. All rights reserved." "\0" + VALUE "LegalCopyright", "Copyright (C) 2025 com.example. All rights reserved." "\0" VALUE "OriginalFilename", "namer_app.exe" "\0" VALUE "ProductName", "namer_app" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" diff --git a/namer/step_07_b_convert_to_stateful/android/app/src/main/kotlin/com/example/namer_app/MainActivity.kt b/namer/step_07_b_convert_to_stateful/android/app/src/main/kotlin/com/example/namer_app/MainActivity.kt index 712f297754..461d0f8fc8 100644 --- a/namer/step_07_b_convert_to_stateful/android/app/src/main/kotlin/com/example/namer_app/MainActivity.kt +++ b/namer/step_07_b_convert_to_stateful/android/app/src/main/kotlin/com/example/namer_app/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.namer_app import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/namer/step_07_b_convert_to_stateful/macos/Runner/Configs/AppInfo.xcconfig b/namer/step_07_b_convert_to_stateful/macos/Runner/Configs/AppInfo.xcconfig index 65b878fd38..546247b232 100644 --- a/namer/step_07_b_convert_to_stateful/macos/Runner/Configs/AppInfo.xcconfig +++ b/namer/step_07_b_convert_to_stateful/macos/Runner/Configs/AppInfo.xcconfig @@ -11,4 +11,4 @@ PRODUCT_NAME = namer_app PRODUCT_BUNDLE_IDENTIFIER = com.example.namerApp // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. diff --git a/namer/step_07_b_convert_to_stateful/windows/runner/Runner.rc b/namer/step_07_b_convert_to_stateful/windows/runner/Runner.rc index a8e432753f..9e81a0e8df 100644 --- a/namer/step_07_b_convert_to_stateful/windows/runner/Runner.rc +++ b/namer/step_07_b_convert_to_stateful/windows/runner/Runner.rc @@ -93,7 +93,7 @@ BEGIN VALUE "FileDescription", "namer_app" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "InternalName", "namer_app" "\0" - VALUE "LegalCopyright", "Copyright (C) 2024 com.example. All rights reserved." "\0" + VALUE "LegalCopyright", "Copyright (C) 2025 com.example. All rights reserved." "\0" VALUE "OriginalFilename", "namer_app.exe" "\0" VALUE "ProductName", "namer_app" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" diff --git a/namer/step_07_c_add_selectedindex/android/app/src/main/kotlin/com/example/namer_app/MainActivity.kt b/namer/step_07_c_add_selectedindex/android/app/src/main/kotlin/com/example/namer_app/MainActivity.kt index 712f297754..461d0f8fc8 100644 --- a/namer/step_07_c_add_selectedindex/android/app/src/main/kotlin/com/example/namer_app/MainActivity.kt +++ b/namer/step_07_c_add_selectedindex/android/app/src/main/kotlin/com/example/namer_app/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.namer_app import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/namer/step_07_c_add_selectedindex/macos/Runner/Configs/AppInfo.xcconfig b/namer/step_07_c_add_selectedindex/macos/Runner/Configs/AppInfo.xcconfig index 65b878fd38..546247b232 100644 --- a/namer/step_07_c_add_selectedindex/macos/Runner/Configs/AppInfo.xcconfig +++ b/namer/step_07_c_add_selectedindex/macos/Runner/Configs/AppInfo.xcconfig @@ -11,4 +11,4 @@ PRODUCT_NAME = namer_app PRODUCT_BUNDLE_IDENTIFIER = com.example.namerApp // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. diff --git a/namer/step_07_c_add_selectedindex/windows/runner/Runner.rc b/namer/step_07_c_add_selectedindex/windows/runner/Runner.rc index a8e432753f..9e81a0e8df 100644 --- a/namer/step_07_c_add_selectedindex/windows/runner/Runner.rc +++ b/namer/step_07_c_add_selectedindex/windows/runner/Runner.rc @@ -93,7 +93,7 @@ BEGIN VALUE "FileDescription", "namer_app" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "InternalName", "namer_app" "\0" - VALUE "LegalCopyright", "Copyright (C) 2024 com.example. All rights reserved." "\0" + VALUE "LegalCopyright", "Copyright (C) 2025 com.example. All rights reserved." "\0" VALUE "OriginalFilename", "namer_app.exe" "\0" VALUE "ProductName", "namer_app" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" diff --git a/namer/step_07_d_use_selectedindex/android/app/src/main/kotlin/com/example/namer_app/MainActivity.kt b/namer/step_07_d_use_selectedindex/android/app/src/main/kotlin/com/example/namer_app/MainActivity.kt index 712f297754..461d0f8fc8 100644 --- a/namer/step_07_d_use_selectedindex/android/app/src/main/kotlin/com/example/namer_app/MainActivity.kt +++ b/namer/step_07_d_use_selectedindex/android/app/src/main/kotlin/com/example/namer_app/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.namer_app import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/namer/step_07_d_use_selectedindex/macos/Runner/Configs/AppInfo.xcconfig b/namer/step_07_d_use_selectedindex/macos/Runner/Configs/AppInfo.xcconfig index 65b878fd38..546247b232 100644 --- a/namer/step_07_d_use_selectedindex/macos/Runner/Configs/AppInfo.xcconfig +++ b/namer/step_07_d_use_selectedindex/macos/Runner/Configs/AppInfo.xcconfig @@ -11,4 +11,4 @@ PRODUCT_NAME = namer_app PRODUCT_BUNDLE_IDENTIFIER = com.example.namerApp // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. diff --git a/namer/step_07_d_use_selectedindex/windows/runner/Runner.rc b/namer/step_07_d_use_selectedindex/windows/runner/Runner.rc index a8e432753f..9e81a0e8df 100644 --- a/namer/step_07_d_use_selectedindex/windows/runner/Runner.rc +++ b/namer/step_07_d_use_selectedindex/windows/runner/Runner.rc @@ -93,7 +93,7 @@ BEGIN VALUE "FileDescription", "namer_app" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "InternalName", "namer_app" "\0" - VALUE "LegalCopyright", "Copyright (C) 2024 com.example. All rights reserved." "\0" + VALUE "LegalCopyright", "Copyright (C) 2025 com.example. All rights reserved." "\0" VALUE "OriginalFilename", "namer_app.exe" "\0" VALUE "ProductName", "namer_app" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" diff --git a/namer/step_07_e_add_layout_builder/android/app/src/main/kotlin/com/example/namer_app/MainActivity.kt b/namer/step_07_e_add_layout_builder/android/app/src/main/kotlin/com/example/namer_app/MainActivity.kt index 712f297754..461d0f8fc8 100644 --- a/namer/step_07_e_add_layout_builder/android/app/src/main/kotlin/com/example/namer_app/MainActivity.kt +++ b/namer/step_07_e_add_layout_builder/android/app/src/main/kotlin/com/example/namer_app/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.namer_app import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/namer/step_07_e_add_layout_builder/macos/Runner/Configs/AppInfo.xcconfig b/namer/step_07_e_add_layout_builder/macos/Runner/Configs/AppInfo.xcconfig index 65b878fd38..546247b232 100644 --- a/namer/step_07_e_add_layout_builder/macos/Runner/Configs/AppInfo.xcconfig +++ b/namer/step_07_e_add_layout_builder/macos/Runner/Configs/AppInfo.xcconfig @@ -11,4 +11,4 @@ PRODUCT_NAME = namer_app PRODUCT_BUNDLE_IDENTIFIER = com.example.namerApp // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. diff --git a/namer/step_07_e_add_layout_builder/windows/runner/Runner.rc b/namer/step_07_e_add_layout_builder/windows/runner/Runner.rc index a8e432753f..9e81a0e8df 100644 --- a/namer/step_07_e_add_layout_builder/windows/runner/Runner.rc +++ b/namer/step_07_e_add_layout_builder/windows/runner/Runner.rc @@ -93,7 +93,7 @@ BEGIN VALUE "FileDescription", "namer_app" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "InternalName", "namer_app" "\0" - VALUE "LegalCopyright", "Copyright (C) 2024 com.example. All rights reserved." "\0" + VALUE "LegalCopyright", "Copyright (C) 2025 com.example. All rights reserved." "\0" VALUE "OriginalFilename", "namer_app.exe" "\0" VALUE "ProductName", "namer_app" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" diff --git a/namer/step_08/android/app/src/main/kotlin/com/example/namer_app/MainActivity.kt b/namer/step_08/android/app/src/main/kotlin/com/example/namer_app/MainActivity.kt index 712f297754..461d0f8fc8 100644 --- a/namer/step_08/android/app/src/main/kotlin/com/example/namer_app/MainActivity.kt +++ b/namer/step_08/android/app/src/main/kotlin/com/example/namer_app/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.namer_app import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/namer/step_08/macos/Runner/Configs/AppInfo.xcconfig b/namer/step_08/macos/Runner/Configs/AppInfo.xcconfig index 65b878fd38..546247b232 100644 --- a/namer/step_08/macos/Runner/Configs/AppInfo.xcconfig +++ b/namer/step_08/macos/Runner/Configs/AppInfo.xcconfig @@ -11,4 +11,4 @@ PRODUCT_NAME = namer_app PRODUCT_BUNDLE_IDENTIFIER = com.example.namerApp // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. diff --git a/namer/step_08/windows/runner/Runner.rc b/namer/step_08/windows/runner/Runner.rc index a8e432753f..9e81a0e8df 100644 --- a/namer/step_08/windows/runner/Runner.rc +++ b/namer/step_08/windows/runner/Runner.rc @@ -93,7 +93,7 @@ BEGIN VALUE "FileDescription", "namer_app" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "InternalName", "namer_app" "\0" - VALUE "LegalCopyright", "Copyright (C) 2024 com.example. All rights reserved." "\0" + VALUE "LegalCopyright", "Copyright (C) 2025 com.example. All rights reserved." "\0" VALUE "OriginalFilename", "namer_app.exe" "\0" VALUE "ProductName", "namer_app" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" From 1bccbcfa9230080482dd8257be49ba3274332f2a Mon Sep 17 00:00:00 2001 From: Brett Morgan Date: Wed, 22 Jan 2025 15:15:56 +1100 Subject: [PATCH 106/108] Update `next-gen-ui` --- .../com/example/next_gen_ui/MainActivity.kt | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 74 +++++++++--------- .../macos/Runner.xcodeproj/project.pbxproj | 76 +++++++++---------- .../macos/Runner/Configs/AppInfo.xcconfig | 2 +- next-gen-ui/step_01/windows/runner/Runner.rc | 2 +- .../com/example/next_gen_ui/MainActivity.kt | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 74 +++++++++--------- .../macos/Runner.xcodeproj/project.pbxproj | 76 +++++++++---------- .../macos/Runner/Configs/AppInfo.xcconfig | 2 +- .../step_02_a/windows/runner/Runner.rc | 2 +- .../com/example/next_gen_ui/MainActivity.kt | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 74 +++++++++--------- .../macos/Runner.xcodeproj/project.pbxproj | 76 +++++++++---------- .../macos/Runner/Configs/AppInfo.xcconfig | 2 +- .../step_02_b/windows/runner/Runner.rc | 2 +- .../com/example/next_gen_ui/MainActivity.kt | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 74 +++++++++--------- .../macos/Runner.xcodeproj/project.pbxproj | 76 +++++++++---------- .../macos/Runner/Configs/AppInfo.xcconfig | 2 +- .../step_02_c/windows/runner/Runner.rc | 2 +- .../com/example/next_gen_ui/MainActivity.kt | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 74 +++++++++--------- .../macos/Runner.xcodeproj/project.pbxproj | 76 +++++++++---------- .../macos/Runner/Configs/AppInfo.xcconfig | 2 +- .../step_03_a/windows/runner/Runner.rc | 2 +- .../com/example/next_gen_ui/MainActivity.kt | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 74 +++++++++--------- .../macos/Runner.xcodeproj/project.pbxproj | 76 +++++++++---------- .../macos/Runner/Configs/AppInfo.xcconfig | 2 +- .../step_03_b/windows/runner/Runner.rc | 2 +- .../com/example/next_gen_ui/MainActivity.kt | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 74 +++++++++--------- .../macos/Runner.xcodeproj/project.pbxproj | 76 +++++++++---------- .../macos/Runner/Configs/AppInfo.xcconfig | 2 +- .../step_03_c/windows/runner/Runner.rc | 2 +- .../com/example/next_gen_ui/MainActivity.kt | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 74 +++++++++--------- .../macos/Runner.xcodeproj/project.pbxproj | 76 +++++++++---------- .../macos/Runner/Configs/AppInfo.xcconfig | 2 +- .../step_04_a/windows/runner/Runner.rc | 2 +- .../com/example/next_gen_ui/MainActivity.kt | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 74 +++++++++--------- .../macos/Runner.xcodeproj/project.pbxproj | 76 +++++++++---------- .../macos/Runner/Configs/AppInfo.xcconfig | 2 +- .../step_04_b/windows/runner/Runner.rc | 2 +- .../com/example/next_gen_ui/MainActivity.kt | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 74 +++++++++--------- .../macos/Runner.xcodeproj/project.pbxproj | 76 +++++++++---------- .../macos/Runner/Configs/AppInfo.xcconfig | 2 +- .../step_04_c/windows/runner/Runner.rc | 2 +- .../com/example/next_gen_ui/MainActivity.kt | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 74 +++++++++--------- .../macos/Runner.xcodeproj/project.pbxproj | 76 +++++++++---------- .../macos/Runner/Configs/AppInfo.xcconfig | 2 +- .../step_04_d/windows/runner/Runner.rc | 2 +- .../com/example/next_gen_ui/MainActivity.kt | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 74 +++++++++--------- .../macos/Runner.xcodeproj/project.pbxproj | 76 +++++++++---------- .../macos/Runner/Configs/AppInfo.xcconfig | 2 +- .../step_04_e/windows/runner/Runner.rc | 2 +- .../com/example/next_gen_ui/MainActivity.kt | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 74 +++++++++--------- .../macos/Runner.xcodeproj/project.pbxproj | 76 +++++++++---------- .../macos/Runner/Configs/AppInfo.xcconfig | 2 +- .../step_05_a/windows/runner/Runner.rc | 2 +- .../com/example/next_gen_ui/MainActivity.kt | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 74 +++++++++--------- .../macos/Runner.xcodeproj/project.pbxproj | 76 +++++++++---------- .../macos/Runner/Configs/AppInfo.xcconfig | 2 +- .../step_05_b/windows/runner/Runner.rc | 2 +- .../com/example/next_gen_ui/MainActivity.kt | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 74 +++++++++--------- .../macos/Runner.xcodeproj/project.pbxproj | 76 +++++++++---------- .../macos/Runner/Configs/AppInfo.xcconfig | 2 +- next-gen-ui/step_06/windows/runner/Runner.rc | 2 +- 75 files changed, 1170 insertions(+), 1170 deletions(-) diff --git a/next-gen-ui/step_01/android/app/src/main/kotlin/com/example/next_gen_ui/MainActivity.kt b/next-gen-ui/step_01/android/app/src/main/kotlin/com/example/next_gen_ui/MainActivity.kt index 4c3a19b83d..3e9bc4cccf 100644 --- a/next-gen-ui/step_01/android/app/src/main/kotlin/com/example/next_gen_ui/MainActivity.kt +++ b/next-gen-ui/step_01/android/app/src/main/kotlin/com/example/next_gen_ui/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.next_gen_ui import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/next-gen-ui/step_01/ios/Runner.xcodeproj/project.pbxproj b/next-gen-ui/step_01/ios/Runner.xcodeproj/project.pbxproj index eb46940041..c9b466def7 100644 --- a/next-gen-ui/step_01/ios/Runner.xcodeproj/project.pbxproj +++ b/next-gen-ui/step_01/ios/Runner.xcodeproj/project.pbxproj @@ -8,14 +8,14 @@ /* Begin PBXBuildFile section */ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; - 169D3664121CF87F073D0A77 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F9634AF0E6C913D83790FF7A /* Pods_Runner.framework */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; - 7AC931060C55621E3547182A /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3ED71ECF4B69535D5D4F0C5B /* Pods_RunnerTests.framework */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; + E4B6A902F6D14A78E4601730 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 564E3EC0EE64AAF5EE8B5941 /* Pods_Runner.framework */; }; + F1B7523DE14C169B3CD558E7 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4F3E3591D7B7868A8A99EA32 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,17 +42,18 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 0BC11639E244F6F00A3FBC85 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 0CA38D1629FEBFED89865F4D /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 2AC5F7C12405D4C68B6BAD53 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 17615AC415DE19BB60A979B0 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 2741050B7D56FDBFFE67179E /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 3A533A391A46BC7EA2175D2C /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 3ED71ECF4B69535D5D4F0C5B /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 5F32ACAE9FD93DBC189064ED /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 47A031DE5979B59758E8AACA /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 4F3E3591D7B7868A8A99EA32 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 564E3EC0EE64AAF5EE8B5941 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 688EC1A2A0BEB2E791FD2419 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 6E858B0A6FA8CE397249AD5E /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; @@ -63,8 +64,7 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - C67944307BF5C92030DB21C4 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - F9634AF0E6C913D83790FF7A /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D7400EA9F19C66395528109D /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -72,47 +72,47 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 169D3664121CF87F073D0A77 /* Pods_Runner.framework in Frameworks */, + E4B6A902F6D14A78E4601730 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - B599F8E01F6C175460757162 /* Frameworks */ = { + C81AED8365D0632E9DAFF2C7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 7AC931060C55621E3547182A /* Pods_RunnerTests.framework in Frameworks */, + F1B7523DE14C169B3CD558E7 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 331C8082294A63A400263BE5 /* RunnerTests */ = { + 2D5CA952BBFCFAA928338DD2 /* Frameworks */ = { isa = PBXGroup; children = ( - 331C807B294A618700263BE5 /* RunnerTests.swift */, + 564E3EC0EE64AAF5EE8B5941 /* Pods_Runner.framework */, + 4F3E3591D7B7868A8A99EA32 /* Pods_RunnerTests.framework */, ); - path = RunnerTests; + name = Frameworks; sourceTree = ""; }; - 388B245E8E1C19CA47EFC235 /* Frameworks */ = { + 331C8082294A63A400263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( - F9634AF0E6C913D83790FF7A /* Pods_Runner.framework */, - 3ED71ECF4B69535D5D4F0C5B /* Pods_RunnerTests.framework */, + 331C807B294A618700263BE5 /* RunnerTests.swift */, ); - name = Frameworks; + path = RunnerTests; sourceTree = ""; }; - 6EE8FB4EC31425D552182803 /* Pods */ = { + 8880B12BB2220BC239B76853 /* Pods */ = { isa = PBXGroup; children = ( - 0BC11639E244F6F00A3FBC85 /* Pods-Runner.debug.xcconfig */, - 0CA38D1629FEBFED89865F4D /* Pods-Runner.release.xcconfig */, - C67944307BF5C92030DB21C4 /* Pods-Runner.profile.xcconfig */, - 3A533A391A46BC7EA2175D2C /* Pods-RunnerTests.debug.xcconfig */, - 2AC5F7C12405D4C68B6BAD53 /* Pods-RunnerTests.release.xcconfig */, - 5F32ACAE9FD93DBC189064ED /* Pods-RunnerTests.profile.xcconfig */, + 2741050B7D56FDBFFE67179E /* Pods-Runner.debug.xcconfig */, + 17615AC415DE19BB60A979B0 /* Pods-Runner.release.xcconfig */, + 47A031DE5979B59758E8AACA /* Pods-Runner.profile.xcconfig */, + 6E858B0A6FA8CE397249AD5E /* Pods-RunnerTests.debug.xcconfig */, + D7400EA9F19C66395528109D /* Pods-RunnerTests.release.xcconfig */, + 688EC1A2A0BEB2E791FD2419 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -136,8 +136,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - 6EE8FB4EC31425D552182803 /* Pods */, - 388B245E8E1C19CA47EFC235 /* Frameworks */, + 8880B12BB2220BC239B76853 /* Pods */, + 2D5CA952BBFCFAA928338DD2 /* Frameworks */, ); sourceTree = ""; }; @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - E69418CD4A4220CBB2521465 /* [CP] Check Pods Manifest.lock */, + CC37335F969F4F531B3DE66E /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - B599F8E01F6C175460757162 /* Frameworks */, + C81AED8365D0632E9DAFF2C7 /* Frameworks */, ); buildRules = ( ); @@ -191,7 +191,7 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - E9619697FAD34A9BB6E8DE31 /* [CP] Check Pods Manifest.lock */, + D7D0FE03D3C103AFEE6FBB57 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, @@ -300,7 +300,7 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - E69418CD4A4220CBB2521465 /* [CP] Check Pods Manifest.lock */ = { + CC37335F969F4F531B3DE66E /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -322,7 +322,7 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - E9619697FAD34A9BB6E8DE31 /* [CP] Check Pods Manifest.lock */ = { + D7D0FE03D3C103AFEE6FBB57 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -469,7 +469,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 3A533A391A46BC7EA2175D2C /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 6E858B0A6FA8CE397249AD5E /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -487,7 +487,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 2AC5F7C12405D4C68B6BAD53 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = D7400EA9F19C66395528109D /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -503,7 +503,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 5F32ACAE9FD93DBC189064ED /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 688EC1A2A0BEB2E791FD2419 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/next-gen-ui/step_01/macos/Runner.xcodeproj/project.pbxproj b/next-gen-ui/step_01/macos/Runner.xcodeproj/project.pbxproj index 1ed9abfde3..6f1e9dbf6a 100644 --- a/next-gen-ui/step_01/macos/Runner.xcodeproj/project.pbxproj +++ b/next-gen-ui/step_01/macos/Runner.xcodeproj/project.pbxproj @@ -27,8 +27,8 @@ 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - B8F5B79506013CB116725078 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 76A503B8F3891ED5C81C47B8 /* Pods_RunnerTests.framework */; }; - E51DA10B7307268A92179AD1 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 07EE044A37885A61F17D092E /* Pods_Runner.framework */; }; + 3EC59BF23CE09FFBC71D4F95 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9BAA311AE115BBDDFA7518C4 /* Pods_Runner.framework */; }; + 416A7346011D52C3D6CFDA04 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8D10F6B205F09D6542603E50 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,9 +62,8 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 07EE044A37885A61F17D092E /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 247C85E901FDB571038C9605 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - 2CE7B8C6E450A4A600A67B8A /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 1E12677AA3ECE9C9CBCD58E0 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 2363A83B16D7D8E0AE04E69A /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -81,13 +80,14 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 57FC80673A922C3B3CB305EE /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - 76A503B8F3891ED5C81C47B8 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 4CA0ECC81814306A9E37BBEF /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 563FF228F6F7A8409D35D0A7 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 69AEF7D4F0DBE9AAB0933D96 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 876203A0DFB8A2C5B0D8F399 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 8D10F6B205F09D6542603E50 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - B854B9FFDA0ECA0BE3F7DAA3 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - E8A8B37445EE1D9A1CFF1FF9 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 9BAA311AE115BBDDFA7518C4 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + AB1A0EE9C9F1E1B7A180452F /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - B8F5B79506013CB116725078 /* Pods_RunnerTests.framework in Frameworks */, + 416A7346011D52C3D6CFDA04 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,27 +103,13 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - E51DA10B7307268A92179AD1 /* Pods_Runner.framework in Frameworks */, + 3EC59BF23CE09FFBC71D4F95 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 1658EC80884DF21671E4CC4F /* Pods */ = { - isa = PBXGroup; - children = ( - 876203A0DFB8A2C5B0D8F399 /* Pods-Runner.debug.xcconfig */, - 2CE7B8C6E450A4A600A67B8A /* Pods-Runner.release.xcconfig */, - E8A8B37445EE1D9A1CFF1FF9 /* Pods-Runner.profile.xcconfig */, - B854B9FFDA0ECA0BE3F7DAA3 /* Pods-RunnerTests.debug.xcconfig */, - 247C85E901FDB571038C9605 /* Pods-RunnerTests.release.xcconfig */, - 57FC80673A922C3B3CB305EE /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; 331C80D6294CF71000263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -151,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 1658EC80884DF21671E4CC4F /* Pods */, + 7B5805107A01A0DCE3AEE58D /* Pods */, ); sourceTree = ""; }; @@ -199,11 +185,25 @@ path = Runner; sourceTree = ""; }; + 7B5805107A01A0DCE3AEE58D /* Pods */ = { + isa = PBXGroup; + children = ( + 563FF228F6F7A8409D35D0A7 /* Pods-Runner.debug.xcconfig */, + 69AEF7D4F0DBE9AAB0933D96 /* Pods-Runner.release.xcconfig */, + 1E12677AA3ECE9C9CBCD58E0 /* Pods-Runner.profile.xcconfig */, + 2363A83B16D7D8E0AE04E69A /* Pods-RunnerTests.debug.xcconfig */, + 4CA0ECC81814306A9E37BBEF /* Pods-RunnerTests.release.xcconfig */, + AB1A0EE9C9F1E1B7A180452F /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - 07EE044A37885A61F17D092E /* Pods_Runner.framework */, - 76A503B8F3891ED5C81C47B8 /* Pods_RunnerTests.framework */, + 9BAA311AE115BBDDFA7518C4 /* Pods_Runner.framework */, + 8D10F6B205F09D6542603E50 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - AB635B7056D33FE01A25C627 /* [CP] Check Pods Manifest.lock */, + 58900C32B5DA6E3606417250 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - F0CBBA1C93FC8B16283A43CC /* [CP] Check Pods Manifest.lock */, + 910A7CE209DE8383A0D9EDC7 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - EFA0EBCA56FC67C1CEC93F35 /* [CP] Embed Pods Frameworks */, + 740518C1C8FFA52FA3C3C020 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -361,7 +361,7 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - AB635B7056D33FE01A25C627 /* [CP] Check Pods Manifest.lock */ = { + 58900C32B5DA6E3606417250 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -383,7 +383,7 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - EFA0EBCA56FC67C1CEC93F35 /* [CP] Embed Pods Frameworks */ = { + 740518C1C8FFA52FA3C3C020 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -400,7 +400,7 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - F0CBBA1C93FC8B16283A43CC /* [CP] Check Pods Manifest.lock */ = { + 910A7CE209DE8383A0D9EDC7 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = B854B9FFDA0ECA0BE3F7DAA3 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 2363A83B16D7D8E0AE04E69A /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 247C85E901FDB571038C9605 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 4CA0ECC81814306A9E37BBEF /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 57FC80673A922C3B3CB305EE /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = AB1A0EE9C9F1E1B7A180452F /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/next-gen-ui/step_01/macos/Runner/Configs/AppInfo.xcconfig b/next-gen-ui/step_01/macos/Runner/Configs/AppInfo.xcconfig index 75cb962401..49197d439f 100644 --- a/next-gen-ui/step_01/macos/Runner/Configs/AppInfo.xcconfig +++ b/next-gen-ui/step_01/macos/Runner/Configs/AppInfo.xcconfig @@ -11,4 +11,4 @@ PRODUCT_NAME = next_gen_ui PRODUCT_BUNDLE_IDENTIFIER = com.example.nextGenUi // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. diff --git a/next-gen-ui/step_01/windows/runner/Runner.rc b/next-gen-ui/step_01/windows/runner/Runner.rc index 9818761ddd..64f7731101 100644 --- a/next-gen-ui/step_01/windows/runner/Runner.rc +++ b/next-gen-ui/step_01/windows/runner/Runner.rc @@ -93,7 +93,7 @@ BEGIN VALUE "FileDescription", "next_gen_ui" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "InternalName", "next_gen_ui" "\0" - VALUE "LegalCopyright", "Copyright (C) 2024 com.example. All rights reserved." "\0" + VALUE "LegalCopyright", "Copyright (C) 2025 com.example. All rights reserved." "\0" VALUE "OriginalFilename", "next_gen_ui.exe" "\0" VALUE "ProductName", "next_gen_ui" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" diff --git a/next-gen-ui/step_02_a/android/app/src/main/kotlin/com/example/next_gen_ui/MainActivity.kt b/next-gen-ui/step_02_a/android/app/src/main/kotlin/com/example/next_gen_ui/MainActivity.kt index 4c3a19b83d..3e9bc4cccf 100644 --- a/next-gen-ui/step_02_a/android/app/src/main/kotlin/com/example/next_gen_ui/MainActivity.kt +++ b/next-gen-ui/step_02_a/android/app/src/main/kotlin/com/example/next_gen_ui/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.next_gen_ui import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/next-gen-ui/step_02_a/ios/Runner.xcodeproj/project.pbxproj b/next-gen-ui/step_02_a/ios/Runner.xcodeproj/project.pbxproj index eb46940041..c9b466def7 100644 --- a/next-gen-ui/step_02_a/ios/Runner.xcodeproj/project.pbxproj +++ b/next-gen-ui/step_02_a/ios/Runner.xcodeproj/project.pbxproj @@ -8,14 +8,14 @@ /* Begin PBXBuildFile section */ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; - 169D3664121CF87F073D0A77 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F9634AF0E6C913D83790FF7A /* Pods_Runner.framework */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; - 7AC931060C55621E3547182A /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3ED71ECF4B69535D5D4F0C5B /* Pods_RunnerTests.framework */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; + E4B6A902F6D14A78E4601730 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 564E3EC0EE64AAF5EE8B5941 /* Pods_Runner.framework */; }; + F1B7523DE14C169B3CD558E7 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4F3E3591D7B7868A8A99EA32 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,17 +42,18 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 0BC11639E244F6F00A3FBC85 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 0CA38D1629FEBFED89865F4D /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 2AC5F7C12405D4C68B6BAD53 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 17615AC415DE19BB60A979B0 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 2741050B7D56FDBFFE67179E /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 3A533A391A46BC7EA2175D2C /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 3ED71ECF4B69535D5D4F0C5B /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 5F32ACAE9FD93DBC189064ED /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 47A031DE5979B59758E8AACA /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 4F3E3591D7B7868A8A99EA32 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 564E3EC0EE64AAF5EE8B5941 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 688EC1A2A0BEB2E791FD2419 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 6E858B0A6FA8CE397249AD5E /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; @@ -63,8 +64,7 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - C67944307BF5C92030DB21C4 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - F9634AF0E6C913D83790FF7A /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D7400EA9F19C66395528109D /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -72,47 +72,47 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 169D3664121CF87F073D0A77 /* Pods_Runner.framework in Frameworks */, + E4B6A902F6D14A78E4601730 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - B599F8E01F6C175460757162 /* Frameworks */ = { + C81AED8365D0632E9DAFF2C7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 7AC931060C55621E3547182A /* Pods_RunnerTests.framework in Frameworks */, + F1B7523DE14C169B3CD558E7 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 331C8082294A63A400263BE5 /* RunnerTests */ = { + 2D5CA952BBFCFAA928338DD2 /* Frameworks */ = { isa = PBXGroup; children = ( - 331C807B294A618700263BE5 /* RunnerTests.swift */, + 564E3EC0EE64AAF5EE8B5941 /* Pods_Runner.framework */, + 4F3E3591D7B7868A8A99EA32 /* Pods_RunnerTests.framework */, ); - path = RunnerTests; + name = Frameworks; sourceTree = ""; }; - 388B245E8E1C19CA47EFC235 /* Frameworks */ = { + 331C8082294A63A400263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( - F9634AF0E6C913D83790FF7A /* Pods_Runner.framework */, - 3ED71ECF4B69535D5D4F0C5B /* Pods_RunnerTests.framework */, + 331C807B294A618700263BE5 /* RunnerTests.swift */, ); - name = Frameworks; + path = RunnerTests; sourceTree = ""; }; - 6EE8FB4EC31425D552182803 /* Pods */ = { + 8880B12BB2220BC239B76853 /* Pods */ = { isa = PBXGroup; children = ( - 0BC11639E244F6F00A3FBC85 /* Pods-Runner.debug.xcconfig */, - 0CA38D1629FEBFED89865F4D /* Pods-Runner.release.xcconfig */, - C67944307BF5C92030DB21C4 /* Pods-Runner.profile.xcconfig */, - 3A533A391A46BC7EA2175D2C /* Pods-RunnerTests.debug.xcconfig */, - 2AC5F7C12405D4C68B6BAD53 /* Pods-RunnerTests.release.xcconfig */, - 5F32ACAE9FD93DBC189064ED /* Pods-RunnerTests.profile.xcconfig */, + 2741050B7D56FDBFFE67179E /* Pods-Runner.debug.xcconfig */, + 17615AC415DE19BB60A979B0 /* Pods-Runner.release.xcconfig */, + 47A031DE5979B59758E8AACA /* Pods-Runner.profile.xcconfig */, + 6E858B0A6FA8CE397249AD5E /* Pods-RunnerTests.debug.xcconfig */, + D7400EA9F19C66395528109D /* Pods-RunnerTests.release.xcconfig */, + 688EC1A2A0BEB2E791FD2419 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -136,8 +136,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - 6EE8FB4EC31425D552182803 /* Pods */, - 388B245E8E1C19CA47EFC235 /* Frameworks */, + 8880B12BB2220BC239B76853 /* Pods */, + 2D5CA952BBFCFAA928338DD2 /* Frameworks */, ); sourceTree = ""; }; @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - E69418CD4A4220CBB2521465 /* [CP] Check Pods Manifest.lock */, + CC37335F969F4F531B3DE66E /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - B599F8E01F6C175460757162 /* Frameworks */, + C81AED8365D0632E9DAFF2C7 /* Frameworks */, ); buildRules = ( ); @@ -191,7 +191,7 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - E9619697FAD34A9BB6E8DE31 /* [CP] Check Pods Manifest.lock */, + D7D0FE03D3C103AFEE6FBB57 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, @@ -300,7 +300,7 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - E69418CD4A4220CBB2521465 /* [CP] Check Pods Manifest.lock */ = { + CC37335F969F4F531B3DE66E /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -322,7 +322,7 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - E9619697FAD34A9BB6E8DE31 /* [CP] Check Pods Manifest.lock */ = { + D7D0FE03D3C103AFEE6FBB57 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -469,7 +469,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 3A533A391A46BC7EA2175D2C /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 6E858B0A6FA8CE397249AD5E /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -487,7 +487,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 2AC5F7C12405D4C68B6BAD53 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = D7400EA9F19C66395528109D /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -503,7 +503,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 5F32ACAE9FD93DBC189064ED /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 688EC1A2A0BEB2E791FD2419 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/next-gen-ui/step_02_a/macos/Runner.xcodeproj/project.pbxproj b/next-gen-ui/step_02_a/macos/Runner.xcodeproj/project.pbxproj index 1ed9abfde3..6f1e9dbf6a 100644 --- a/next-gen-ui/step_02_a/macos/Runner.xcodeproj/project.pbxproj +++ b/next-gen-ui/step_02_a/macos/Runner.xcodeproj/project.pbxproj @@ -27,8 +27,8 @@ 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - B8F5B79506013CB116725078 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 76A503B8F3891ED5C81C47B8 /* Pods_RunnerTests.framework */; }; - E51DA10B7307268A92179AD1 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 07EE044A37885A61F17D092E /* Pods_Runner.framework */; }; + 3EC59BF23CE09FFBC71D4F95 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9BAA311AE115BBDDFA7518C4 /* Pods_Runner.framework */; }; + 416A7346011D52C3D6CFDA04 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8D10F6B205F09D6542603E50 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,9 +62,8 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 07EE044A37885A61F17D092E /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 247C85E901FDB571038C9605 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - 2CE7B8C6E450A4A600A67B8A /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 1E12677AA3ECE9C9CBCD58E0 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 2363A83B16D7D8E0AE04E69A /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -81,13 +80,14 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 57FC80673A922C3B3CB305EE /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - 76A503B8F3891ED5C81C47B8 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 4CA0ECC81814306A9E37BBEF /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 563FF228F6F7A8409D35D0A7 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 69AEF7D4F0DBE9AAB0933D96 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 876203A0DFB8A2C5B0D8F399 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 8D10F6B205F09D6542603E50 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - B854B9FFDA0ECA0BE3F7DAA3 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - E8A8B37445EE1D9A1CFF1FF9 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 9BAA311AE115BBDDFA7518C4 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + AB1A0EE9C9F1E1B7A180452F /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - B8F5B79506013CB116725078 /* Pods_RunnerTests.framework in Frameworks */, + 416A7346011D52C3D6CFDA04 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,27 +103,13 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - E51DA10B7307268A92179AD1 /* Pods_Runner.framework in Frameworks */, + 3EC59BF23CE09FFBC71D4F95 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 1658EC80884DF21671E4CC4F /* Pods */ = { - isa = PBXGroup; - children = ( - 876203A0DFB8A2C5B0D8F399 /* Pods-Runner.debug.xcconfig */, - 2CE7B8C6E450A4A600A67B8A /* Pods-Runner.release.xcconfig */, - E8A8B37445EE1D9A1CFF1FF9 /* Pods-Runner.profile.xcconfig */, - B854B9FFDA0ECA0BE3F7DAA3 /* Pods-RunnerTests.debug.xcconfig */, - 247C85E901FDB571038C9605 /* Pods-RunnerTests.release.xcconfig */, - 57FC80673A922C3B3CB305EE /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; 331C80D6294CF71000263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -151,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 1658EC80884DF21671E4CC4F /* Pods */, + 7B5805107A01A0DCE3AEE58D /* Pods */, ); sourceTree = ""; }; @@ -199,11 +185,25 @@ path = Runner; sourceTree = ""; }; + 7B5805107A01A0DCE3AEE58D /* Pods */ = { + isa = PBXGroup; + children = ( + 563FF228F6F7A8409D35D0A7 /* Pods-Runner.debug.xcconfig */, + 69AEF7D4F0DBE9AAB0933D96 /* Pods-Runner.release.xcconfig */, + 1E12677AA3ECE9C9CBCD58E0 /* Pods-Runner.profile.xcconfig */, + 2363A83B16D7D8E0AE04E69A /* Pods-RunnerTests.debug.xcconfig */, + 4CA0ECC81814306A9E37BBEF /* Pods-RunnerTests.release.xcconfig */, + AB1A0EE9C9F1E1B7A180452F /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - 07EE044A37885A61F17D092E /* Pods_Runner.framework */, - 76A503B8F3891ED5C81C47B8 /* Pods_RunnerTests.framework */, + 9BAA311AE115BBDDFA7518C4 /* Pods_Runner.framework */, + 8D10F6B205F09D6542603E50 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - AB635B7056D33FE01A25C627 /* [CP] Check Pods Manifest.lock */, + 58900C32B5DA6E3606417250 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - F0CBBA1C93FC8B16283A43CC /* [CP] Check Pods Manifest.lock */, + 910A7CE209DE8383A0D9EDC7 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - EFA0EBCA56FC67C1CEC93F35 /* [CP] Embed Pods Frameworks */, + 740518C1C8FFA52FA3C3C020 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -361,7 +361,7 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - AB635B7056D33FE01A25C627 /* [CP] Check Pods Manifest.lock */ = { + 58900C32B5DA6E3606417250 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -383,7 +383,7 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - EFA0EBCA56FC67C1CEC93F35 /* [CP] Embed Pods Frameworks */ = { + 740518C1C8FFA52FA3C3C020 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -400,7 +400,7 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - F0CBBA1C93FC8B16283A43CC /* [CP] Check Pods Manifest.lock */ = { + 910A7CE209DE8383A0D9EDC7 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = B854B9FFDA0ECA0BE3F7DAA3 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 2363A83B16D7D8E0AE04E69A /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 247C85E901FDB571038C9605 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 4CA0ECC81814306A9E37BBEF /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 57FC80673A922C3B3CB305EE /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = AB1A0EE9C9F1E1B7A180452F /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/next-gen-ui/step_02_a/macos/Runner/Configs/AppInfo.xcconfig b/next-gen-ui/step_02_a/macos/Runner/Configs/AppInfo.xcconfig index 75cb962401..49197d439f 100644 --- a/next-gen-ui/step_02_a/macos/Runner/Configs/AppInfo.xcconfig +++ b/next-gen-ui/step_02_a/macos/Runner/Configs/AppInfo.xcconfig @@ -11,4 +11,4 @@ PRODUCT_NAME = next_gen_ui PRODUCT_BUNDLE_IDENTIFIER = com.example.nextGenUi // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. diff --git a/next-gen-ui/step_02_a/windows/runner/Runner.rc b/next-gen-ui/step_02_a/windows/runner/Runner.rc index 9818761ddd..64f7731101 100644 --- a/next-gen-ui/step_02_a/windows/runner/Runner.rc +++ b/next-gen-ui/step_02_a/windows/runner/Runner.rc @@ -93,7 +93,7 @@ BEGIN VALUE "FileDescription", "next_gen_ui" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "InternalName", "next_gen_ui" "\0" - VALUE "LegalCopyright", "Copyright (C) 2024 com.example. All rights reserved." "\0" + VALUE "LegalCopyright", "Copyright (C) 2025 com.example. All rights reserved." "\0" VALUE "OriginalFilename", "next_gen_ui.exe" "\0" VALUE "ProductName", "next_gen_ui" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" diff --git a/next-gen-ui/step_02_b/android/app/src/main/kotlin/com/example/next_gen_ui/MainActivity.kt b/next-gen-ui/step_02_b/android/app/src/main/kotlin/com/example/next_gen_ui/MainActivity.kt index 4c3a19b83d..3e9bc4cccf 100644 --- a/next-gen-ui/step_02_b/android/app/src/main/kotlin/com/example/next_gen_ui/MainActivity.kt +++ b/next-gen-ui/step_02_b/android/app/src/main/kotlin/com/example/next_gen_ui/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.next_gen_ui import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/next-gen-ui/step_02_b/ios/Runner.xcodeproj/project.pbxproj b/next-gen-ui/step_02_b/ios/Runner.xcodeproj/project.pbxproj index eb46940041..c9b466def7 100644 --- a/next-gen-ui/step_02_b/ios/Runner.xcodeproj/project.pbxproj +++ b/next-gen-ui/step_02_b/ios/Runner.xcodeproj/project.pbxproj @@ -8,14 +8,14 @@ /* Begin PBXBuildFile section */ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; - 169D3664121CF87F073D0A77 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F9634AF0E6C913D83790FF7A /* Pods_Runner.framework */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; - 7AC931060C55621E3547182A /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3ED71ECF4B69535D5D4F0C5B /* Pods_RunnerTests.framework */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; + E4B6A902F6D14A78E4601730 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 564E3EC0EE64AAF5EE8B5941 /* Pods_Runner.framework */; }; + F1B7523DE14C169B3CD558E7 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4F3E3591D7B7868A8A99EA32 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,17 +42,18 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 0BC11639E244F6F00A3FBC85 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 0CA38D1629FEBFED89865F4D /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 2AC5F7C12405D4C68B6BAD53 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 17615AC415DE19BB60A979B0 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 2741050B7D56FDBFFE67179E /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 3A533A391A46BC7EA2175D2C /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 3ED71ECF4B69535D5D4F0C5B /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 5F32ACAE9FD93DBC189064ED /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 47A031DE5979B59758E8AACA /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 4F3E3591D7B7868A8A99EA32 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 564E3EC0EE64AAF5EE8B5941 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 688EC1A2A0BEB2E791FD2419 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 6E858B0A6FA8CE397249AD5E /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; @@ -63,8 +64,7 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - C67944307BF5C92030DB21C4 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - F9634AF0E6C913D83790FF7A /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D7400EA9F19C66395528109D /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -72,47 +72,47 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 169D3664121CF87F073D0A77 /* Pods_Runner.framework in Frameworks */, + E4B6A902F6D14A78E4601730 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - B599F8E01F6C175460757162 /* Frameworks */ = { + C81AED8365D0632E9DAFF2C7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 7AC931060C55621E3547182A /* Pods_RunnerTests.framework in Frameworks */, + F1B7523DE14C169B3CD558E7 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 331C8082294A63A400263BE5 /* RunnerTests */ = { + 2D5CA952BBFCFAA928338DD2 /* Frameworks */ = { isa = PBXGroup; children = ( - 331C807B294A618700263BE5 /* RunnerTests.swift */, + 564E3EC0EE64AAF5EE8B5941 /* Pods_Runner.framework */, + 4F3E3591D7B7868A8A99EA32 /* Pods_RunnerTests.framework */, ); - path = RunnerTests; + name = Frameworks; sourceTree = ""; }; - 388B245E8E1C19CA47EFC235 /* Frameworks */ = { + 331C8082294A63A400263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( - F9634AF0E6C913D83790FF7A /* Pods_Runner.framework */, - 3ED71ECF4B69535D5D4F0C5B /* Pods_RunnerTests.framework */, + 331C807B294A618700263BE5 /* RunnerTests.swift */, ); - name = Frameworks; + path = RunnerTests; sourceTree = ""; }; - 6EE8FB4EC31425D552182803 /* Pods */ = { + 8880B12BB2220BC239B76853 /* Pods */ = { isa = PBXGroup; children = ( - 0BC11639E244F6F00A3FBC85 /* Pods-Runner.debug.xcconfig */, - 0CA38D1629FEBFED89865F4D /* Pods-Runner.release.xcconfig */, - C67944307BF5C92030DB21C4 /* Pods-Runner.profile.xcconfig */, - 3A533A391A46BC7EA2175D2C /* Pods-RunnerTests.debug.xcconfig */, - 2AC5F7C12405D4C68B6BAD53 /* Pods-RunnerTests.release.xcconfig */, - 5F32ACAE9FD93DBC189064ED /* Pods-RunnerTests.profile.xcconfig */, + 2741050B7D56FDBFFE67179E /* Pods-Runner.debug.xcconfig */, + 17615AC415DE19BB60A979B0 /* Pods-Runner.release.xcconfig */, + 47A031DE5979B59758E8AACA /* Pods-Runner.profile.xcconfig */, + 6E858B0A6FA8CE397249AD5E /* Pods-RunnerTests.debug.xcconfig */, + D7400EA9F19C66395528109D /* Pods-RunnerTests.release.xcconfig */, + 688EC1A2A0BEB2E791FD2419 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -136,8 +136,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - 6EE8FB4EC31425D552182803 /* Pods */, - 388B245E8E1C19CA47EFC235 /* Frameworks */, + 8880B12BB2220BC239B76853 /* Pods */, + 2D5CA952BBFCFAA928338DD2 /* Frameworks */, ); sourceTree = ""; }; @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - E69418CD4A4220CBB2521465 /* [CP] Check Pods Manifest.lock */, + CC37335F969F4F531B3DE66E /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - B599F8E01F6C175460757162 /* Frameworks */, + C81AED8365D0632E9DAFF2C7 /* Frameworks */, ); buildRules = ( ); @@ -191,7 +191,7 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - E9619697FAD34A9BB6E8DE31 /* [CP] Check Pods Manifest.lock */, + D7D0FE03D3C103AFEE6FBB57 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, @@ -300,7 +300,7 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - E69418CD4A4220CBB2521465 /* [CP] Check Pods Manifest.lock */ = { + CC37335F969F4F531B3DE66E /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -322,7 +322,7 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - E9619697FAD34A9BB6E8DE31 /* [CP] Check Pods Manifest.lock */ = { + D7D0FE03D3C103AFEE6FBB57 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -469,7 +469,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 3A533A391A46BC7EA2175D2C /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 6E858B0A6FA8CE397249AD5E /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -487,7 +487,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 2AC5F7C12405D4C68B6BAD53 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = D7400EA9F19C66395528109D /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -503,7 +503,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 5F32ACAE9FD93DBC189064ED /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 688EC1A2A0BEB2E791FD2419 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/next-gen-ui/step_02_b/macos/Runner.xcodeproj/project.pbxproj b/next-gen-ui/step_02_b/macos/Runner.xcodeproj/project.pbxproj index 1ed9abfde3..6f1e9dbf6a 100644 --- a/next-gen-ui/step_02_b/macos/Runner.xcodeproj/project.pbxproj +++ b/next-gen-ui/step_02_b/macos/Runner.xcodeproj/project.pbxproj @@ -27,8 +27,8 @@ 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - B8F5B79506013CB116725078 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 76A503B8F3891ED5C81C47B8 /* Pods_RunnerTests.framework */; }; - E51DA10B7307268A92179AD1 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 07EE044A37885A61F17D092E /* Pods_Runner.framework */; }; + 3EC59BF23CE09FFBC71D4F95 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9BAA311AE115BBDDFA7518C4 /* Pods_Runner.framework */; }; + 416A7346011D52C3D6CFDA04 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8D10F6B205F09D6542603E50 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,9 +62,8 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 07EE044A37885A61F17D092E /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 247C85E901FDB571038C9605 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - 2CE7B8C6E450A4A600A67B8A /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 1E12677AA3ECE9C9CBCD58E0 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 2363A83B16D7D8E0AE04E69A /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -81,13 +80,14 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 57FC80673A922C3B3CB305EE /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - 76A503B8F3891ED5C81C47B8 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 4CA0ECC81814306A9E37BBEF /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 563FF228F6F7A8409D35D0A7 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 69AEF7D4F0DBE9AAB0933D96 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 876203A0DFB8A2C5B0D8F399 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 8D10F6B205F09D6542603E50 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - B854B9FFDA0ECA0BE3F7DAA3 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - E8A8B37445EE1D9A1CFF1FF9 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 9BAA311AE115BBDDFA7518C4 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + AB1A0EE9C9F1E1B7A180452F /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - B8F5B79506013CB116725078 /* Pods_RunnerTests.framework in Frameworks */, + 416A7346011D52C3D6CFDA04 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,27 +103,13 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - E51DA10B7307268A92179AD1 /* Pods_Runner.framework in Frameworks */, + 3EC59BF23CE09FFBC71D4F95 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 1658EC80884DF21671E4CC4F /* Pods */ = { - isa = PBXGroup; - children = ( - 876203A0DFB8A2C5B0D8F399 /* Pods-Runner.debug.xcconfig */, - 2CE7B8C6E450A4A600A67B8A /* Pods-Runner.release.xcconfig */, - E8A8B37445EE1D9A1CFF1FF9 /* Pods-Runner.profile.xcconfig */, - B854B9FFDA0ECA0BE3F7DAA3 /* Pods-RunnerTests.debug.xcconfig */, - 247C85E901FDB571038C9605 /* Pods-RunnerTests.release.xcconfig */, - 57FC80673A922C3B3CB305EE /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; 331C80D6294CF71000263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -151,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 1658EC80884DF21671E4CC4F /* Pods */, + 7B5805107A01A0DCE3AEE58D /* Pods */, ); sourceTree = ""; }; @@ -199,11 +185,25 @@ path = Runner; sourceTree = ""; }; + 7B5805107A01A0DCE3AEE58D /* Pods */ = { + isa = PBXGroup; + children = ( + 563FF228F6F7A8409D35D0A7 /* Pods-Runner.debug.xcconfig */, + 69AEF7D4F0DBE9AAB0933D96 /* Pods-Runner.release.xcconfig */, + 1E12677AA3ECE9C9CBCD58E0 /* Pods-Runner.profile.xcconfig */, + 2363A83B16D7D8E0AE04E69A /* Pods-RunnerTests.debug.xcconfig */, + 4CA0ECC81814306A9E37BBEF /* Pods-RunnerTests.release.xcconfig */, + AB1A0EE9C9F1E1B7A180452F /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - 07EE044A37885A61F17D092E /* Pods_Runner.framework */, - 76A503B8F3891ED5C81C47B8 /* Pods_RunnerTests.framework */, + 9BAA311AE115BBDDFA7518C4 /* Pods_Runner.framework */, + 8D10F6B205F09D6542603E50 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - AB635B7056D33FE01A25C627 /* [CP] Check Pods Manifest.lock */, + 58900C32B5DA6E3606417250 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - F0CBBA1C93FC8B16283A43CC /* [CP] Check Pods Manifest.lock */, + 910A7CE209DE8383A0D9EDC7 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - EFA0EBCA56FC67C1CEC93F35 /* [CP] Embed Pods Frameworks */, + 740518C1C8FFA52FA3C3C020 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -361,7 +361,7 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - AB635B7056D33FE01A25C627 /* [CP] Check Pods Manifest.lock */ = { + 58900C32B5DA6E3606417250 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -383,7 +383,7 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - EFA0EBCA56FC67C1CEC93F35 /* [CP] Embed Pods Frameworks */ = { + 740518C1C8FFA52FA3C3C020 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -400,7 +400,7 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - F0CBBA1C93FC8B16283A43CC /* [CP] Check Pods Manifest.lock */ = { + 910A7CE209DE8383A0D9EDC7 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = B854B9FFDA0ECA0BE3F7DAA3 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 2363A83B16D7D8E0AE04E69A /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 247C85E901FDB571038C9605 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 4CA0ECC81814306A9E37BBEF /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 57FC80673A922C3B3CB305EE /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = AB1A0EE9C9F1E1B7A180452F /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/next-gen-ui/step_02_b/macos/Runner/Configs/AppInfo.xcconfig b/next-gen-ui/step_02_b/macos/Runner/Configs/AppInfo.xcconfig index 75cb962401..49197d439f 100644 --- a/next-gen-ui/step_02_b/macos/Runner/Configs/AppInfo.xcconfig +++ b/next-gen-ui/step_02_b/macos/Runner/Configs/AppInfo.xcconfig @@ -11,4 +11,4 @@ PRODUCT_NAME = next_gen_ui PRODUCT_BUNDLE_IDENTIFIER = com.example.nextGenUi // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. diff --git a/next-gen-ui/step_02_b/windows/runner/Runner.rc b/next-gen-ui/step_02_b/windows/runner/Runner.rc index 9818761ddd..64f7731101 100644 --- a/next-gen-ui/step_02_b/windows/runner/Runner.rc +++ b/next-gen-ui/step_02_b/windows/runner/Runner.rc @@ -93,7 +93,7 @@ BEGIN VALUE "FileDescription", "next_gen_ui" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "InternalName", "next_gen_ui" "\0" - VALUE "LegalCopyright", "Copyright (C) 2024 com.example. All rights reserved." "\0" + VALUE "LegalCopyright", "Copyright (C) 2025 com.example. All rights reserved." "\0" VALUE "OriginalFilename", "next_gen_ui.exe" "\0" VALUE "ProductName", "next_gen_ui" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" diff --git a/next-gen-ui/step_02_c/android/app/src/main/kotlin/com/example/next_gen_ui/MainActivity.kt b/next-gen-ui/step_02_c/android/app/src/main/kotlin/com/example/next_gen_ui/MainActivity.kt index 4c3a19b83d..3e9bc4cccf 100644 --- a/next-gen-ui/step_02_c/android/app/src/main/kotlin/com/example/next_gen_ui/MainActivity.kt +++ b/next-gen-ui/step_02_c/android/app/src/main/kotlin/com/example/next_gen_ui/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.next_gen_ui import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/next-gen-ui/step_02_c/ios/Runner.xcodeproj/project.pbxproj b/next-gen-ui/step_02_c/ios/Runner.xcodeproj/project.pbxproj index eb46940041..c9b466def7 100644 --- a/next-gen-ui/step_02_c/ios/Runner.xcodeproj/project.pbxproj +++ b/next-gen-ui/step_02_c/ios/Runner.xcodeproj/project.pbxproj @@ -8,14 +8,14 @@ /* Begin PBXBuildFile section */ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; - 169D3664121CF87F073D0A77 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F9634AF0E6C913D83790FF7A /* Pods_Runner.framework */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; - 7AC931060C55621E3547182A /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3ED71ECF4B69535D5D4F0C5B /* Pods_RunnerTests.framework */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; + E4B6A902F6D14A78E4601730 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 564E3EC0EE64AAF5EE8B5941 /* Pods_Runner.framework */; }; + F1B7523DE14C169B3CD558E7 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4F3E3591D7B7868A8A99EA32 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,17 +42,18 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 0BC11639E244F6F00A3FBC85 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 0CA38D1629FEBFED89865F4D /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 2AC5F7C12405D4C68B6BAD53 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 17615AC415DE19BB60A979B0 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 2741050B7D56FDBFFE67179E /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 3A533A391A46BC7EA2175D2C /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 3ED71ECF4B69535D5D4F0C5B /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 5F32ACAE9FD93DBC189064ED /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 47A031DE5979B59758E8AACA /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 4F3E3591D7B7868A8A99EA32 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 564E3EC0EE64AAF5EE8B5941 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 688EC1A2A0BEB2E791FD2419 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 6E858B0A6FA8CE397249AD5E /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; @@ -63,8 +64,7 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - C67944307BF5C92030DB21C4 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - F9634AF0E6C913D83790FF7A /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D7400EA9F19C66395528109D /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -72,47 +72,47 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 169D3664121CF87F073D0A77 /* Pods_Runner.framework in Frameworks */, + E4B6A902F6D14A78E4601730 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - B599F8E01F6C175460757162 /* Frameworks */ = { + C81AED8365D0632E9DAFF2C7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 7AC931060C55621E3547182A /* Pods_RunnerTests.framework in Frameworks */, + F1B7523DE14C169B3CD558E7 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 331C8082294A63A400263BE5 /* RunnerTests */ = { + 2D5CA952BBFCFAA928338DD2 /* Frameworks */ = { isa = PBXGroup; children = ( - 331C807B294A618700263BE5 /* RunnerTests.swift */, + 564E3EC0EE64AAF5EE8B5941 /* Pods_Runner.framework */, + 4F3E3591D7B7868A8A99EA32 /* Pods_RunnerTests.framework */, ); - path = RunnerTests; + name = Frameworks; sourceTree = ""; }; - 388B245E8E1C19CA47EFC235 /* Frameworks */ = { + 331C8082294A63A400263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( - F9634AF0E6C913D83790FF7A /* Pods_Runner.framework */, - 3ED71ECF4B69535D5D4F0C5B /* Pods_RunnerTests.framework */, + 331C807B294A618700263BE5 /* RunnerTests.swift */, ); - name = Frameworks; + path = RunnerTests; sourceTree = ""; }; - 6EE8FB4EC31425D552182803 /* Pods */ = { + 8880B12BB2220BC239B76853 /* Pods */ = { isa = PBXGroup; children = ( - 0BC11639E244F6F00A3FBC85 /* Pods-Runner.debug.xcconfig */, - 0CA38D1629FEBFED89865F4D /* Pods-Runner.release.xcconfig */, - C67944307BF5C92030DB21C4 /* Pods-Runner.profile.xcconfig */, - 3A533A391A46BC7EA2175D2C /* Pods-RunnerTests.debug.xcconfig */, - 2AC5F7C12405D4C68B6BAD53 /* Pods-RunnerTests.release.xcconfig */, - 5F32ACAE9FD93DBC189064ED /* Pods-RunnerTests.profile.xcconfig */, + 2741050B7D56FDBFFE67179E /* Pods-Runner.debug.xcconfig */, + 17615AC415DE19BB60A979B0 /* Pods-Runner.release.xcconfig */, + 47A031DE5979B59758E8AACA /* Pods-Runner.profile.xcconfig */, + 6E858B0A6FA8CE397249AD5E /* Pods-RunnerTests.debug.xcconfig */, + D7400EA9F19C66395528109D /* Pods-RunnerTests.release.xcconfig */, + 688EC1A2A0BEB2E791FD2419 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -136,8 +136,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - 6EE8FB4EC31425D552182803 /* Pods */, - 388B245E8E1C19CA47EFC235 /* Frameworks */, + 8880B12BB2220BC239B76853 /* Pods */, + 2D5CA952BBFCFAA928338DD2 /* Frameworks */, ); sourceTree = ""; }; @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - E69418CD4A4220CBB2521465 /* [CP] Check Pods Manifest.lock */, + CC37335F969F4F531B3DE66E /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - B599F8E01F6C175460757162 /* Frameworks */, + C81AED8365D0632E9DAFF2C7 /* Frameworks */, ); buildRules = ( ); @@ -191,7 +191,7 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - E9619697FAD34A9BB6E8DE31 /* [CP] Check Pods Manifest.lock */, + D7D0FE03D3C103AFEE6FBB57 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, @@ -300,7 +300,7 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - E69418CD4A4220CBB2521465 /* [CP] Check Pods Manifest.lock */ = { + CC37335F969F4F531B3DE66E /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -322,7 +322,7 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - E9619697FAD34A9BB6E8DE31 /* [CP] Check Pods Manifest.lock */ = { + D7D0FE03D3C103AFEE6FBB57 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -469,7 +469,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 3A533A391A46BC7EA2175D2C /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 6E858B0A6FA8CE397249AD5E /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -487,7 +487,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 2AC5F7C12405D4C68B6BAD53 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = D7400EA9F19C66395528109D /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -503,7 +503,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 5F32ACAE9FD93DBC189064ED /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 688EC1A2A0BEB2E791FD2419 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/next-gen-ui/step_02_c/macos/Runner.xcodeproj/project.pbxproj b/next-gen-ui/step_02_c/macos/Runner.xcodeproj/project.pbxproj index 1ed9abfde3..6f1e9dbf6a 100644 --- a/next-gen-ui/step_02_c/macos/Runner.xcodeproj/project.pbxproj +++ b/next-gen-ui/step_02_c/macos/Runner.xcodeproj/project.pbxproj @@ -27,8 +27,8 @@ 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - B8F5B79506013CB116725078 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 76A503B8F3891ED5C81C47B8 /* Pods_RunnerTests.framework */; }; - E51DA10B7307268A92179AD1 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 07EE044A37885A61F17D092E /* Pods_Runner.framework */; }; + 3EC59BF23CE09FFBC71D4F95 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9BAA311AE115BBDDFA7518C4 /* Pods_Runner.framework */; }; + 416A7346011D52C3D6CFDA04 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8D10F6B205F09D6542603E50 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,9 +62,8 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 07EE044A37885A61F17D092E /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 247C85E901FDB571038C9605 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - 2CE7B8C6E450A4A600A67B8A /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 1E12677AA3ECE9C9CBCD58E0 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 2363A83B16D7D8E0AE04E69A /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -81,13 +80,14 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 57FC80673A922C3B3CB305EE /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - 76A503B8F3891ED5C81C47B8 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 4CA0ECC81814306A9E37BBEF /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 563FF228F6F7A8409D35D0A7 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 69AEF7D4F0DBE9AAB0933D96 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 876203A0DFB8A2C5B0D8F399 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 8D10F6B205F09D6542603E50 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - B854B9FFDA0ECA0BE3F7DAA3 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - E8A8B37445EE1D9A1CFF1FF9 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 9BAA311AE115BBDDFA7518C4 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + AB1A0EE9C9F1E1B7A180452F /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - B8F5B79506013CB116725078 /* Pods_RunnerTests.framework in Frameworks */, + 416A7346011D52C3D6CFDA04 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,27 +103,13 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - E51DA10B7307268A92179AD1 /* Pods_Runner.framework in Frameworks */, + 3EC59BF23CE09FFBC71D4F95 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 1658EC80884DF21671E4CC4F /* Pods */ = { - isa = PBXGroup; - children = ( - 876203A0DFB8A2C5B0D8F399 /* Pods-Runner.debug.xcconfig */, - 2CE7B8C6E450A4A600A67B8A /* Pods-Runner.release.xcconfig */, - E8A8B37445EE1D9A1CFF1FF9 /* Pods-Runner.profile.xcconfig */, - B854B9FFDA0ECA0BE3F7DAA3 /* Pods-RunnerTests.debug.xcconfig */, - 247C85E901FDB571038C9605 /* Pods-RunnerTests.release.xcconfig */, - 57FC80673A922C3B3CB305EE /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; 331C80D6294CF71000263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -151,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 1658EC80884DF21671E4CC4F /* Pods */, + 7B5805107A01A0DCE3AEE58D /* Pods */, ); sourceTree = ""; }; @@ -199,11 +185,25 @@ path = Runner; sourceTree = ""; }; + 7B5805107A01A0DCE3AEE58D /* Pods */ = { + isa = PBXGroup; + children = ( + 563FF228F6F7A8409D35D0A7 /* Pods-Runner.debug.xcconfig */, + 69AEF7D4F0DBE9AAB0933D96 /* Pods-Runner.release.xcconfig */, + 1E12677AA3ECE9C9CBCD58E0 /* Pods-Runner.profile.xcconfig */, + 2363A83B16D7D8E0AE04E69A /* Pods-RunnerTests.debug.xcconfig */, + 4CA0ECC81814306A9E37BBEF /* Pods-RunnerTests.release.xcconfig */, + AB1A0EE9C9F1E1B7A180452F /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - 07EE044A37885A61F17D092E /* Pods_Runner.framework */, - 76A503B8F3891ED5C81C47B8 /* Pods_RunnerTests.framework */, + 9BAA311AE115BBDDFA7518C4 /* Pods_Runner.framework */, + 8D10F6B205F09D6542603E50 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - AB635B7056D33FE01A25C627 /* [CP] Check Pods Manifest.lock */, + 58900C32B5DA6E3606417250 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - F0CBBA1C93FC8B16283A43CC /* [CP] Check Pods Manifest.lock */, + 910A7CE209DE8383A0D9EDC7 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - EFA0EBCA56FC67C1CEC93F35 /* [CP] Embed Pods Frameworks */, + 740518C1C8FFA52FA3C3C020 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -361,7 +361,7 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - AB635B7056D33FE01A25C627 /* [CP] Check Pods Manifest.lock */ = { + 58900C32B5DA6E3606417250 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -383,7 +383,7 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - EFA0EBCA56FC67C1CEC93F35 /* [CP] Embed Pods Frameworks */ = { + 740518C1C8FFA52FA3C3C020 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -400,7 +400,7 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - F0CBBA1C93FC8B16283A43CC /* [CP] Check Pods Manifest.lock */ = { + 910A7CE209DE8383A0D9EDC7 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = B854B9FFDA0ECA0BE3F7DAA3 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 2363A83B16D7D8E0AE04E69A /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 247C85E901FDB571038C9605 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 4CA0ECC81814306A9E37BBEF /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 57FC80673A922C3B3CB305EE /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = AB1A0EE9C9F1E1B7A180452F /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/next-gen-ui/step_02_c/macos/Runner/Configs/AppInfo.xcconfig b/next-gen-ui/step_02_c/macos/Runner/Configs/AppInfo.xcconfig index 75cb962401..49197d439f 100644 --- a/next-gen-ui/step_02_c/macos/Runner/Configs/AppInfo.xcconfig +++ b/next-gen-ui/step_02_c/macos/Runner/Configs/AppInfo.xcconfig @@ -11,4 +11,4 @@ PRODUCT_NAME = next_gen_ui PRODUCT_BUNDLE_IDENTIFIER = com.example.nextGenUi // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. diff --git a/next-gen-ui/step_02_c/windows/runner/Runner.rc b/next-gen-ui/step_02_c/windows/runner/Runner.rc index 9818761ddd..64f7731101 100644 --- a/next-gen-ui/step_02_c/windows/runner/Runner.rc +++ b/next-gen-ui/step_02_c/windows/runner/Runner.rc @@ -93,7 +93,7 @@ BEGIN VALUE "FileDescription", "next_gen_ui" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "InternalName", "next_gen_ui" "\0" - VALUE "LegalCopyright", "Copyright (C) 2024 com.example. All rights reserved." "\0" + VALUE "LegalCopyright", "Copyright (C) 2025 com.example. All rights reserved." "\0" VALUE "OriginalFilename", "next_gen_ui.exe" "\0" VALUE "ProductName", "next_gen_ui" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" diff --git a/next-gen-ui/step_03_a/android/app/src/main/kotlin/com/example/next_gen_ui/MainActivity.kt b/next-gen-ui/step_03_a/android/app/src/main/kotlin/com/example/next_gen_ui/MainActivity.kt index 4c3a19b83d..3e9bc4cccf 100644 --- a/next-gen-ui/step_03_a/android/app/src/main/kotlin/com/example/next_gen_ui/MainActivity.kt +++ b/next-gen-ui/step_03_a/android/app/src/main/kotlin/com/example/next_gen_ui/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.next_gen_ui import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/next-gen-ui/step_03_a/ios/Runner.xcodeproj/project.pbxproj b/next-gen-ui/step_03_a/ios/Runner.xcodeproj/project.pbxproj index eb46940041..c9b466def7 100644 --- a/next-gen-ui/step_03_a/ios/Runner.xcodeproj/project.pbxproj +++ b/next-gen-ui/step_03_a/ios/Runner.xcodeproj/project.pbxproj @@ -8,14 +8,14 @@ /* Begin PBXBuildFile section */ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; - 169D3664121CF87F073D0A77 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F9634AF0E6C913D83790FF7A /* Pods_Runner.framework */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; - 7AC931060C55621E3547182A /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3ED71ECF4B69535D5D4F0C5B /* Pods_RunnerTests.framework */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; + E4B6A902F6D14A78E4601730 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 564E3EC0EE64AAF5EE8B5941 /* Pods_Runner.framework */; }; + F1B7523DE14C169B3CD558E7 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4F3E3591D7B7868A8A99EA32 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,17 +42,18 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 0BC11639E244F6F00A3FBC85 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 0CA38D1629FEBFED89865F4D /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 2AC5F7C12405D4C68B6BAD53 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 17615AC415DE19BB60A979B0 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 2741050B7D56FDBFFE67179E /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 3A533A391A46BC7EA2175D2C /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 3ED71ECF4B69535D5D4F0C5B /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 5F32ACAE9FD93DBC189064ED /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 47A031DE5979B59758E8AACA /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 4F3E3591D7B7868A8A99EA32 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 564E3EC0EE64AAF5EE8B5941 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 688EC1A2A0BEB2E791FD2419 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 6E858B0A6FA8CE397249AD5E /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; @@ -63,8 +64,7 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - C67944307BF5C92030DB21C4 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - F9634AF0E6C913D83790FF7A /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D7400EA9F19C66395528109D /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -72,47 +72,47 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 169D3664121CF87F073D0A77 /* Pods_Runner.framework in Frameworks */, + E4B6A902F6D14A78E4601730 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - B599F8E01F6C175460757162 /* Frameworks */ = { + C81AED8365D0632E9DAFF2C7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 7AC931060C55621E3547182A /* Pods_RunnerTests.framework in Frameworks */, + F1B7523DE14C169B3CD558E7 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 331C8082294A63A400263BE5 /* RunnerTests */ = { + 2D5CA952BBFCFAA928338DD2 /* Frameworks */ = { isa = PBXGroup; children = ( - 331C807B294A618700263BE5 /* RunnerTests.swift */, + 564E3EC0EE64AAF5EE8B5941 /* Pods_Runner.framework */, + 4F3E3591D7B7868A8A99EA32 /* Pods_RunnerTests.framework */, ); - path = RunnerTests; + name = Frameworks; sourceTree = ""; }; - 388B245E8E1C19CA47EFC235 /* Frameworks */ = { + 331C8082294A63A400263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( - F9634AF0E6C913D83790FF7A /* Pods_Runner.framework */, - 3ED71ECF4B69535D5D4F0C5B /* Pods_RunnerTests.framework */, + 331C807B294A618700263BE5 /* RunnerTests.swift */, ); - name = Frameworks; + path = RunnerTests; sourceTree = ""; }; - 6EE8FB4EC31425D552182803 /* Pods */ = { + 8880B12BB2220BC239B76853 /* Pods */ = { isa = PBXGroup; children = ( - 0BC11639E244F6F00A3FBC85 /* Pods-Runner.debug.xcconfig */, - 0CA38D1629FEBFED89865F4D /* Pods-Runner.release.xcconfig */, - C67944307BF5C92030DB21C4 /* Pods-Runner.profile.xcconfig */, - 3A533A391A46BC7EA2175D2C /* Pods-RunnerTests.debug.xcconfig */, - 2AC5F7C12405D4C68B6BAD53 /* Pods-RunnerTests.release.xcconfig */, - 5F32ACAE9FD93DBC189064ED /* Pods-RunnerTests.profile.xcconfig */, + 2741050B7D56FDBFFE67179E /* Pods-Runner.debug.xcconfig */, + 17615AC415DE19BB60A979B0 /* Pods-Runner.release.xcconfig */, + 47A031DE5979B59758E8AACA /* Pods-Runner.profile.xcconfig */, + 6E858B0A6FA8CE397249AD5E /* Pods-RunnerTests.debug.xcconfig */, + D7400EA9F19C66395528109D /* Pods-RunnerTests.release.xcconfig */, + 688EC1A2A0BEB2E791FD2419 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -136,8 +136,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - 6EE8FB4EC31425D552182803 /* Pods */, - 388B245E8E1C19CA47EFC235 /* Frameworks */, + 8880B12BB2220BC239B76853 /* Pods */, + 2D5CA952BBFCFAA928338DD2 /* Frameworks */, ); sourceTree = ""; }; @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - E69418CD4A4220CBB2521465 /* [CP] Check Pods Manifest.lock */, + CC37335F969F4F531B3DE66E /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - B599F8E01F6C175460757162 /* Frameworks */, + C81AED8365D0632E9DAFF2C7 /* Frameworks */, ); buildRules = ( ); @@ -191,7 +191,7 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - E9619697FAD34A9BB6E8DE31 /* [CP] Check Pods Manifest.lock */, + D7D0FE03D3C103AFEE6FBB57 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, @@ -300,7 +300,7 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - E69418CD4A4220CBB2521465 /* [CP] Check Pods Manifest.lock */ = { + CC37335F969F4F531B3DE66E /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -322,7 +322,7 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - E9619697FAD34A9BB6E8DE31 /* [CP] Check Pods Manifest.lock */ = { + D7D0FE03D3C103AFEE6FBB57 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -469,7 +469,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 3A533A391A46BC7EA2175D2C /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 6E858B0A6FA8CE397249AD5E /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -487,7 +487,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 2AC5F7C12405D4C68B6BAD53 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = D7400EA9F19C66395528109D /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -503,7 +503,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 5F32ACAE9FD93DBC189064ED /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 688EC1A2A0BEB2E791FD2419 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/next-gen-ui/step_03_a/macos/Runner.xcodeproj/project.pbxproj b/next-gen-ui/step_03_a/macos/Runner.xcodeproj/project.pbxproj index 1ed9abfde3..6f1e9dbf6a 100644 --- a/next-gen-ui/step_03_a/macos/Runner.xcodeproj/project.pbxproj +++ b/next-gen-ui/step_03_a/macos/Runner.xcodeproj/project.pbxproj @@ -27,8 +27,8 @@ 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - B8F5B79506013CB116725078 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 76A503B8F3891ED5C81C47B8 /* Pods_RunnerTests.framework */; }; - E51DA10B7307268A92179AD1 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 07EE044A37885A61F17D092E /* Pods_Runner.framework */; }; + 3EC59BF23CE09FFBC71D4F95 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9BAA311AE115BBDDFA7518C4 /* Pods_Runner.framework */; }; + 416A7346011D52C3D6CFDA04 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8D10F6B205F09D6542603E50 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,9 +62,8 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 07EE044A37885A61F17D092E /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 247C85E901FDB571038C9605 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - 2CE7B8C6E450A4A600A67B8A /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 1E12677AA3ECE9C9CBCD58E0 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 2363A83B16D7D8E0AE04E69A /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -81,13 +80,14 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 57FC80673A922C3B3CB305EE /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - 76A503B8F3891ED5C81C47B8 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 4CA0ECC81814306A9E37BBEF /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 563FF228F6F7A8409D35D0A7 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 69AEF7D4F0DBE9AAB0933D96 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 876203A0DFB8A2C5B0D8F399 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 8D10F6B205F09D6542603E50 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - B854B9FFDA0ECA0BE3F7DAA3 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - E8A8B37445EE1D9A1CFF1FF9 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 9BAA311AE115BBDDFA7518C4 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + AB1A0EE9C9F1E1B7A180452F /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - B8F5B79506013CB116725078 /* Pods_RunnerTests.framework in Frameworks */, + 416A7346011D52C3D6CFDA04 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,27 +103,13 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - E51DA10B7307268A92179AD1 /* Pods_Runner.framework in Frameworks */, + 3EC59BF23CE09FFBC71D4F95 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 1658EC80884DF21671E4CC4F /* Pods */ = { - isa = PBXGroup; - children = ( - 876203A0DFB8A2C5B0D8F399 /* Pods-Runner.debug.xcconfig */, - 2CE7B8C6E450A4A600A67B8A /* Pods-Runner.release.xcconfig */, - E8A8B37445EE1D9A1CFF1FF9 /* Pods-Runner.profile.xcconfig */, - B854B9FFDA0ECA0BE3F7DAA3 /* Pods-RunnerTests.debug.xcconfig */, - 247C85E901FDB571038C9605 /* Pods-RunnerTests.release.xcconfig */, - 57FC80673A922C3B3CB305EE /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; 331C80D6294CF71000263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -151,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 1658EC80884DF21671E4CC4F /* Pods */, + 7B5805107A01A0DCE3AEE58D /* Pods */, ); sourceTree = ""; }; @@ -199,11 +185,25 @@ path = Runner; sourceTree = ""; }; + 7B5805107A01A0DCE3AEE58D /* Pods */ = { + isa = PBXGroup; + children = ( + 563FF228F6F7A8409D35D0A7 /* Pods-Runner.debug.xcconfig */, + 69AEF7D4F0DBE9AAB0933D96 /* Pods-Runner.release.xcconfig */, + 1E12677AA3ECE9C9CBCD58E0 /* Pods-Runner.profile.xcconfig */, + 2363A83B16D7D8E0AE04E69A /* Pods-RunnerTests.debug.xcconfig */, + 4CA0ECC81814306A9E37BBEF /* Pods-RunnerTests.release.xcconfig */, + AB1A0EE9C9F1E1B7A180452F /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - 07EE044A37885A61F17D092E /* Pods_Runner.framework */, - 76A503B8F3891ED5C81C47B8 /* Pods_RunnerTests.framework */, + 9BAA311AE115BBDDFA7518C4 /* Pods_Runner.framework */, + 8D10F6B205F09D6542603E50 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - AB635B7056D33FE01A25C627 /* [CP] Check Pods Manifest.lock */, + 58900C32B5DA6E3606417250 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - F0CBBA1C93FC8B16283A43CC /* [CP] Check Pods Manifest.lock */, + 910A7CE209DE8383A0D9EDC7 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - EFA0EBCA56FC67C1CEC93F35 /* [CP] Embed Pods Frameworks */, + 740518C1C8FFA52FA3C3C020 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -361,7 +361,7 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - AB635B7056D33FE01A25C627 /* [CP] Check Pods Manifest.lock */ = { + 58900C32B5DA6E3606417250 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -383,7 +383,7 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - EFA0EBCA56FC67C1CEC93F35 /* [CP] Embed Pods Frameworks */ = { + 740518C1C8FFA52FA3C3C020 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -400,7 +400,7 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - F0CBBA1C93FC8B16283A43CC /* [CP] Check Pods Manifest.lock */ = { + 910A7CE209DE8383A0D9EDC7 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = B854B9FFDA0ECA0BE3F7DAA3 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 2363A83B16D7D8E0AE04E69A /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 247C85E901FDB571038C9605 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 4CA0ECC81814306A9E37BBEF /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 57FC80673A922C3B3CB305EE /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = AB1A0EE9C9F1E1B7A180452F /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/next-gen-ui/step_03_a/macos/Runner/Configs/AppInfo.xcconfig b/next-gen-ui/step_03_a/macos/Runner/Configs/AppInfo.xcconfig index 75cb962401..49197d439f 100644 --- a/next-gen-ui/step_03_a/macos/Runner/Configs/AppInfo.xcconfig +++ b/next-gen-ui/step_03_a/macos/Runner/Configs/AppInfo.xcconfig @@ -11,4 +11,4 @@ PRODUCT_NAME = next_gen_ui PRODUCT_BUNDLE_IDENTIFIER = com.example.nextGenUi // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. diff --git a/next-gen-ui/step_03_a/windows/runner/Runner.rc b/next-gen-ui/step_03_a/windows/runner/Runner.rc index 9818761ddd..64f7731101 100644 --- a/next-gen-ui/step_03_a/windows/runner/Runner.rc +++ b/next-gen-ui/step_03_a/windows/runner/Runner.rc @@ -93,7 +93,7 @@ BEGIN VALUE "FileDescription", "next_gen_ui" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "InternalName", "next_gen_ui" "\0" - VALUE "LegalCopyright", "Copyright (C) 2024 com.example. All rights reserved." "\0" + VALUE "LegalCopyright", "Copyright (C) 2025 com.example. All rights reserved." "\0" VALUE "OriginalFilename", "next_gen_ui.exe" "\0" VALUE "ProductName", "next_gen_ui" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" diff --git a/next-gen-ui/step_03_b/android/app/src/main/kotlin/com/example/next_gen_ui/MainActivity.kt b/next-gen-ui/step_03_b/android/app/src/main/kotlin/com/example/next_gen_ui/MainActivity.kt index 4c3a19b83d..3e9bc4cccf 100644 --- a/next-gen-ui/step_03_b/android/app/src/main/kotlin/com/example/next_gen_ui/MainActivity.kt +++ b/next-gen-ui/step_03_b/android/app/src/main/kotlin/com/example/next_gen_ui/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.next_gen_ui import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/next-gen-ui/step_03_b/ios/Runner.xcodeproj/project.pbxproj b/next-gen-ui/step_03_b/ios/Runner.xcodeproj/project.pbxproj index eb46940041..c9b466def7 100644 --- a/next-gen-ui/step_03_b/ios/Runner.xcodeproj/project.pbxproj +++ b/next-gen-ui/step_03_b/ios/Runner.xcodeproj/project.pbxproj @@ -8,14 +8,14 @@ /* Begin PBXBuildFile section */ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; - 169D3664121CF87F073D0A77 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F9634AF0E6C913D83790FF7A /* Pods_Runner.framework */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; - 7AC931060C55621E3547182A /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3ED71ECF4B69535D5D4F0C5B /* Pods_RunnerTests.framework */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; + E4B6A902F6D14A78E4601730 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 564E3EC0EE64AAF5EE8B5941 /* Pods_Runner.framework */; }; + F1B7523DE14C169B3CD558E7 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4F3E3591D7B7868A8A99EA32 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,17 +42,18 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 0BC11639E244F6F00A3FBC85 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 0CA38D1629FEBFED89865F4D /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 2AC5F7C12405D4C68B6BAD53 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 17615AC415DE19BB60A979B0 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 2741050B7D56FDBFFE67179E /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 3A533A391A46BC7EA2175D2C /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 3ED71ECF4B69535D5D4F0C5B /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 5F32ACAE9FD93DBC189064ED /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 47A031DE5979B59758E8AACA /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 4F3E3591D7B7868A8A99EA32 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 564E3EC0EE64AAF5EE8B5941 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 688EC1A2A0BEB2E791FD2419 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 6E858B0A6FA8CE397249AD5E /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; @@ -63,8 +64,7 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - C67944307BF5C92030DB21C4 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - F9634AF0E6C913D83790FF7A /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D7400EA9F19C66395528109D /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -72,47 +72,47 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 169D3664121CF87F073D0A77 /* Pods_Runner.framework in Frameworks */, + E4B6A902F6D14A78E4601730 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - B599F8E01F6C175460757162 /* Frameworks */ = { + C81AED8365D0632E9DAFF2C7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 7AC931060C55621E3547182A /* Pods_RunnerTests.framework in Frameworks */, + F1B7523DE14C169B3CD558E7 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 331C8082294A63A400263BE5 /* RunnerTests */ = { + 2D5CA952BBFCFAA928338DD2 /* Frameworks */ = { isa = PBXGroup; children = ( - 331C807B294A618700263BE5 /* RunnerTests.swift */, + 564E3EC0EE64AAF5EE8B5941 /* Pods_Runner.framework */, + 4F3E3591D7B7868A8A99EA32 /* Pods_RunnerTests.framework */, ); - path = RunnerTests; + name = Frameworks; sourceTree = ""; }; - 388B245E8E1C19CA47EFC235 /* Frameworks */ = { + 331C8082294A63A400263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( - F9634AF0E6C913D83790FF7A /* Pods_Runner.framework */, - 3ED71ECF4B69535D5D4F0C5B /* Pods_RunnerTests.framework */, + 331C807B294A618700263BE5 /* RunnerTests.swift */, ); - name = Frameworks; + path = RunnerTests; sourceTree = ""; }; - 6EE8FB4EC31425D552182803 /* Pods */ = { + 8880B12BB2220BC239B76853 /* Pods */ = { isa = PBXGroup; children = ( - 0BC11639E244F6F00A3FBC85 /* Pods-Runner.debug.xcconfig */, - 0CA38D1629FEBFED89865F4D /* Pods-Runner.release.xcconfig */, - C67944307BF5C92030DB21C4 /* Pods-Runner.profile.xcconfig */, - 3A533A391A46BC7EA2175D2C /* Pods-RunnerTests.debug.xcconfig */, - 2AC5F7C12405D4C68B6BAD53 /* Pods-RunnerTests.release.xcconfig */, - 5F32ACAE9FD93DBC189064ED /* Pods-RunnerTests.profile.xcconfig */, + 2741050B7D56FDBFFE67179E /* Pods-Runner.debug.xcconfig */, + 17615AC415DE19BB60A979B0 /* Pods-Runner.release.xcconfig */, + 47A031DE5979B59758E8AACA /* Pods-Runner.profile.xcconfig */, + 6E858B0A6FA8CE397249AD5E /* Pods-RunnerTests.debug.xcconfig */, + D7400EA9F19C66395528109D /* Pods-RunnerTests.release.xcconfig */, + 688EC1A2A0BEB2E791FD2419 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -136,8 +136,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - 6EE8FB4EC31425D552182803 /* Pods */, - 388B245E8E1C19CA47EFC235 /* Frameworks */, + 8880B12BB2220BC239B76853 /* Pods */, + 2D5CA952BBFCFAA928338DD2 /* Frameworks */, ); sourceTree = ""; }; @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - E69418CD4A4220CBB2521465 /* [CP] Check Pods Manifest.lock */, + CC37335F969F4F531B3DE66E /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - B599F8E01F6C175460757162 /* Frameworks */, + C81AED8365D0632E9DAFF2C7 /* Frameworks */, ); buildRules = ( ); @@ -191,7 +191,7 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - E9619697FAD34A9BB6E8DE31 /* [CP] Check Pods Manifest.lock */, + D7D0FE03D3C103AFEE6FBB57 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, @@ -300,7 +300,7 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - E69418CD4A4220CBB2521465 /* [CP] Check Pods Manifest.lock */ = { + CC37335F969F4F531B3DE66E /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -322,7 +322,7 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - E9619697FAD34A9BB6E8DE31 /* [CP] Check Pods Manifest.lock */ = { + D7D0FE03D3C103AFEE6FBB57 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -469,7 +469,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 3A533A391A46BC7EA2175D2C /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 6E858B0A6FA8CE397249AD5E /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -487,7 +487,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 2AC5F7C12405D4C68B6BAD53 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = D7400EA9F19C66395528109D /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -503,7 +503,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 5F32ACAE9FD93DBC189064ED /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 688EC1A2A0BEB2E791FD2419 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/next-gen-ui/step_03_b/macos/Runner.xcodeproj/project.pbxproj b/next-gen-ui/step_03_b/macos/Runner.xcodeproj/project.pbxproj index 1ed9abfde3..6f1e9dbf6a 100644 --- a/next-gen-ui/step_03_b/macos/Runner.xcodeproj/project.pbxproj +++ b/next-gen-ui/step_03_b/macos/Runner.xcodeproj/project.pbxproj @@ -27,8 +27,8 @@ 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - B8F5B79506013CB116725078 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 76A503B8F3891ED5C81C47B8 /* Pods_RunnerTests.framework */; }; - E51DA10B7307268A92179AD1 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 07EE044A37885A61F17D092E /* Pods_Runner.framework */; }; + 3EC59BF23CE09FFBC71D4F95 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9BAA311AE115BBDDFA7518C4 /* Pods_Runner.framework */; }; + 416A7346011D52C3D6CFDA04 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8D10F6B205F09D6542603E50 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,9 +62,8 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 07EE044A37885A61F17D092E /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 247C85E901FDB571038C9605 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - 2CE7B8C6E450A4A600A67B8A /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 1E12677AA3ECE9C9CBCD58E0 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 2363A83B16D7D8E0AE04E69A /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -81,13 +80,14 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 57FC80673A922C3B3CB305EE /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - 76A503B8F3891ED5C81C47B8 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 4CA0ECC81814306A9E37BBEF /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 563FF228F6F7A8409D35D0A7 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 69AEF7D4F0DBE9AAB0933D96 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 876203A0DFB8A2C5B0D8F399 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 8D10F6B205F09D6542603E50 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - B854B9FFDA0ECA0BE3F7DAA3 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - E8A8B37445EE1D9A1CFF1FF9 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 9BAA311AE115BBDDFA7518C4 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + AB1A0EE9C9F1E1B7A180452F /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - B8F5B79506013CB116725078 /* Pods_RunnerTests.framework in Frameworks */, + 416A7346011D52C3D6CFDA04 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,27 +103,13 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - E51DA10B7307268A92179AD1 /* Pods_Runner.framework in Frameworks */, + 3EC59BF23CE09FFBC71D4F95 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 1658EC80884DF21671E4CC4F /* Pods */ = { - isa = PBXGroup; - children = ( - 876203A0DFB8A2C5B0D8F399 /* Pods-Runner.debug.xcconfig */, - 2CE7B8C6E450A4A600A67B8A /* Pods-Runner.release.xcconfig */, - E8A8B37445EE1D9A1CFF1FF9 /* Pods-Runner.profile.xcconfig */, - B854B9FFDA0ECA0BE3F7DAA3 /* Pods-RunnerTests.debug.xcconfig */, - 247C85E901FDB571038C9605 /* Pods-RunnerTests.release.xcconfig */, - 57FC80673A922C3B3CB305EE /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; 331C80D6294CF71000263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -151,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 1658EC80884DF21671E4CC4F /* Pods */, + 7B5805107A01A0DCE3AEE58D /* Pods */, ); sourceTree = ""; }; @@ -199,11 +185,25 @@ path = Runner; sourceTree = ""; }; + 7B5805107A01A0DCE3AEE58D /* Pods */ = { + isa = PBXGroup; + children = ( + 563FF228F6F7A8409D35D0A7 /* Pods-Runner.debug.xcconfig */, + 69AEF7D4F0DBE9AAB0933D96 /* Pods-Runner.release.xcconfig */, + 1E12677AA3ECE9C9CBCD58E0 /* Pods-Runner.profile.xcconfig */, + 2363A83B16D7D8E0AE04E69A /* Pods-RunnerTests.debug.xcconfig */, + 4CA0ECC81814306A9E37BBEF /* Pods-RunnerTests.release.xcconfig */, + AB1A0EE9C9F1E1B7A180452F /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - 07EE044A37885A61F17D092E /* Pods_Runner.framework */, - 76A503B8F3891ED5C81C47B8 /* Pods_RunnerTests.framework */, + 9BAA311AE115BBDDFA7518C4 /* Pods_Runner.framework */, + 8D10F6B205F09D6542603E50 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - AB635B7056D33FE01A25C627 /* [CP] Check Pods Manifest.lock */, + 58900C32B5DA6E3606417250 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - F0CBBA1C93FC8B16283A43CC /* [CP] Check Pods Manifest.lock */, + 910A7CE209DE8383A0D9EDC7 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - EFA0EBCA56FC67C1CEC93F35 /* [CP] Embed Pods Frameworks */, + 740518C1C8FFA52FA3C3C020 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -361,7 +361,7 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - AB635B7056D33FE01A25C627 /* [CP] Check Pods Manifest.lock */ = { + 58900C32B5DA6E3606417250 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -383,7 +383,7 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - EFA0EBCA56FC67C1CEC93F35 /* [CP] Embed Pods Frameworks */ = { + 740518C1C8FFA52FA3C3C020 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -400,7 +400,7 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - F0CBBA1C93FC8B16283A43CC /* [CP] Check Pods Manifest.lock */ = { + 910A7CE209DE8383A0D9EDC7 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = B854B9FFDA0ECA0BE3F7DAA3 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 2363A83B16D7D8E0AE04E69A /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 247C85E901FDB571038C9605 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 4CA0ECC81814306A9E37BBEF /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 57FC80673A922C3B3CB305EE /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = AB1A0EE9C9F1E1B7A180452F /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/next-gen-ui/step_03_b/macos/Runner/Configs/AppInfo.xcconfig b/next-gen-ui/step_03_b/macos/Runner/Configs/AppInfo.xcconfig index 75cb962401..49197d439f 100644 --- a/next-gen-ui/step_03_b/macos/Runner/Configs/AppInfo.xcconfig +++ b/next-gen-ui/step_03_b/macos/Runner/Configs/AppInfo.xcconfig @@ -11,4 +11,4 @@ PRODUCT_NAME = next_gen_ui PRODUCT_BUNDLE_IDENTIFIER = com.example.nextGenUi // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. diff --git a/next-gen-ui/step_03_b/windows/runner/Runner.rc b/next-gen-ui/step_03_b/windows/runner/Runner.rc index 9818761ddd..64f7731101 100644 --- a/next-gen-ui/step_03_b/windows/runner/Runner.rc +++ b/next-gen-ui/step_03_b/windows/runner/Runner.rc @@ -93,7 +93,7 @@ BEGIN VALUE "FileDescription", "next_gen_ui" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "InternalName", "next_gen_ui" "\0" - VALUE "LegalCopyright", "Copyright (C) 2024 com.example. All rights reserved." "\0" + VALUE "LegalCopyright", "Copyright (C) 2025 com.example. All rights reserved." "\0" VALUE "OriginalFilename", "next_gen_ui.exe" "\0" VALUE "ProductName", "next_gen_ui" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" diff --git a/next-gen-ui/step_03_c/android/app/src/main/kotlin/com/example/next_gen_ui/MainActivity.kt b/next-gen-ui/step_03_c/android/app/src/main/kotlin/com/example/next_gen_ui/MainActivity.kt index 4c3a19b83d..3e9bc4cccf 100644 --- a/next-gen-ui/step_03_c/android/app/src/main/kotlin/com/example/next_gen_ui/MainActivity.kt +++ b/next-gen-ui/step_03_c/android/app/src/main/kotlin/com/example/next_gen_ui/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.next_gen_ui import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/next-gen-ui/step_03_c/ios/Runner.xcodeproj/project.pbxproj b/next-gen-ui/step_03_c/ios/Runner.xcodeproj/project.pbxproj index eb46940041..c9b466def7 100644 --- a/next-gen-ui/step_03_c/ios/Runner.xcodeproj/project.pbxproj +++ b/next-gen-ui/step_03_c/ios/Runner.xcodeproj/project.pbxproj @@ -8,14 +8,14 @@ /* Begin PBXBuildFile section */ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; - 169D3664121CF87F073D0A77 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F9634AF0E6C913D83790FF7A /* Pods_Runner.framework */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; - 7AC931060C55621E3547182A /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3ED71ECF4B69535D5D4F0C5B /* Pods_RunnerTests.framework */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; + E4B6A902F6D14A78E4601730 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 564E3EC0EE64AAF5EE8B5941 /* Pods_Runner.framework */; }; + F1B7523DE14C169B3CD558E7 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4F3E3591D7B7868A8A99EA32 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,17 +42,18 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 0BC11639E244F6F00A3FBC85 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 0CA38D1629FEBFED89865F4D /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 2AC5F7C12405D4C68B6BAD53 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 17615AC415DE19BB60A979B0 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 2741050B7D56FDBFFE67179E /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 3A533A391A46BC7EA2175D2C /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 3ED71ECF4B69535D5D4F0C5B /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 5F32ACAE9FD93DBC189064ED /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 47A031DE5979B59758E8AACA /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 4F3E3591D7B7868A8A99EA32 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 564E3EC0EE64AAF5EE8B5941 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 688EC1A2A0BEB2E791FD2419 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 6E858B0A6FA8CE397249AD5E /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; @@ -63,8 +64,7 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - C67944307BF5C92030DB21C4 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - F9634AF0E6C913D83790FF7A /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D7400EA9F19C66395528109D /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -72,47 +72,47 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 169D3664121CF87F073D0A77 /* Pods_Runner.framework in Frameworks */, + E4B6A902F6D14A78E4601730 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - B599F8E01F6C175460757162 /* Frameworks */ = { + C81AED8365D0632E9DAFF2C7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 7AC931060C55621E3547182A /* Pods_RunnerTests.framework in Frameworks */, + F1B7523DE14C169B3CD558E7 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 331C8082294A63A400263BE5 /* RunnerTests */ = { + 2D5CA952BBFCFAA928338DD2 /* Frameworks */ = { isa = PBXGroup; children = ( - 331C807B294A618700263BE5 /* RunnerTests.swift */, + 564E3EC0EE64AAF5EE8B5941 /* Pods_Runner.framework */, + 4F3E3591D7B7868A8A99EA32 /* Pods_RunnerTests.framework */, ); - path = RunnerTests; + name = Frameworks; sourceTree = ""; }; - 388B245E8E1C19CA47EFC235 /* Frameworks */ = { + 331C8082294A63A400263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( - F9634AF0E6C913D83790FF7A /* Pods_Runner.framework */, - 3ED71ECF4B69535D5D4F0C5B /* Pods_RunnerTests.framework */, + 331C807B294A618700263BE5 /* RunnerTests.swift */, ); - name = Frameworks; + path = RunnerTests; sourceTree = ""; }; - 6EE8FB4EC31425D552182803 /* Pods */ = { + 8880B12BB2220BC239B76853 /* Pods */ = { isa = PBXGroup; children = ( - 0BC11639E244F6F00A3FBC85 /* Pods-Runner.debug.xcconfig */, - 0CA38D1629FEBFED89865F4D /* Pods-Runner.release.xcconfig */, - C67944307BF5C92030DB21C4 /* Pods-Runner.profile.xcconfig */, - 3A533A391A46BC7EA2175D2C /* Pods-RunnerTests.debug.xcconfig */, - 2AC5F7C12405D4C68B6BAD53 /* Pods-RunnerTests.release.xcconfig */, - 5F32ACAE9FD93DBC189064ED /* Pods-RunnerTests.profile.xcconfig */, + 2741050B7D56FDBFFE67179E /* Pods-Runner.debug.xcconfig */, + 17615AC415DE19BB60A979B0 /* Pods-Runner.release.xcconfig */, + 47A031DE5979B59758E8AACA /* Pods-Runner.profile.xcconfig */, + 6E858B0A6FA8CE397249AD5E /* Pods-RunnerTests.debug.xcconfig */, + D7400EA9F19C66395528109D /* Pods-RunnerTests.release.xcconfig */, + 688EC1A2A0BEB2E791FD2419 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -136,8 +136,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - 6EE8FB4EC31425D552182803 /* Pods */, - 388B245E8E1C19CA47EFC235 /* Frameworks */, + 8880B12BB2220BC239B76853 /* Pods */, + 2D5CA952BBFCFAA928338DD2 /* Frameworks */, ); sourceTree = ""; }; @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - E69418CD4A4220CBB2521465 /* [CP] Check Pods Manifest.lock */, + CC37335F969F4F531B3DE66E /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - B599F8E01F6C175460757162 /* Frameworks */, + C81AED8365D0632E9DAFF2C7 /* Frameworks */, ); buildRules = ( ); @@ -191,7 +191,7 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - E9619697FAD34A9BB6E8DE31 /* [CP] Check Pods Manifest.lock */, + D7D0FE03D3C103AFEE6FBB57 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, @@ -300,7 +300,7 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - E69418CD4A4220CBB2521465 /* [CP] Check Pods Manifest.lock */ = { + CC37335F969F4F531B3DE66E /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -322,7 +322,7 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - E9619697FAD34A9BB6E8DE31 /* [CP] Check Pods Manifest.lock */ = { + D7D0FE03D3C103AFEE6FBB57 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -469,7 +469,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 3A533A391A46BC7EA2175D2C /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 6E858B0A6FA8CE397249AD5E /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -487,7 +487,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 2AC5F7C12405D4C68B6BAD53 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = D7400EA9F19C66395528109D /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -503,7 +503,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 5F32ACAE9FD93DBC189064ED /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 688EC1A2A0BEB2E791FD2419 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/next-gen-ui/step_03_c/macos/Runner.xcodeproj/project.pbxproj b/next-gen-ui/step_03_c/macos/Runner.xcodeproj/project.pbxproj index 1ed9abfde3..6f1e9dbf6a 100644 --- a/next-gen-ui/step_03_c/macos/Runner.xcodeproj/project.pbxproj +++ b/next-gen-ui/step_03_c/macos/Runner.xcodeproj/project.pbxproj @@ -27,8 +27,8 @@ 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - B8F5B79506013CB116725078 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 76A503B8F3891ED5C81C47B8 /* Pods_RunnerTests.framework */; }; - E51DA10B7307268A92179AD1 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 07EE044A37885A61F17D092E /* Pods_Runner.framework */; }; + 3EC59BF23CE09FFBC71D4F95 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9BAA311AE115BBDDFA7518C4 /* Pods_Runner.framework */; }; + 416A7346011D52C3D6CFDA04 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8D10F6B205F09D6542603E50 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,9 +62,8 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 07EE044A37885A61F17D092E /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 247C85E901FDB571038C9605 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - 2CE7B8C6E450A4A600A67B8A /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 1E12677AA3ECE9C9CBCD58E0 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 2363A83B16D7D8E0AE04E69A /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -81,13 +80,14 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 57FC80673A922C3B3CB305EE /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - 76A503B8F3891ED5C81C47B8 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 4CA0ECC81814306A9E37BBEF /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 563FF228F6F7A8409D35D0A7 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 69AEF7D4F0DBE9AAB0933D96 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 876203A0DFB8A2C5B0D8F399 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 8D10F6B205F09D6542603E50 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - B854B9FFDA0ECA0BE3F7DAA3 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - E8A8B37445EE1D9A1CFF1FF9 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 9BAA311AE115BBDDFA7518C4 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + AB1A0EE9C9F1E1B7A180452F /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - B8F5B79506013CB116725078 /* Pods_RunnerTests.framework in Frameworks */, + 416A7346011D52C3D6CFDA04 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,27 +103,13 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - E51DA10B7307268A92179AD1 /* Pods_Runner.framework in Frameworks */, + 3EC59BF23CE09FFBC71D4F95 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 1658EC80884DF21671E4CC4F /* Pods */ = { - isa = PBXGroup; - children = ( - 876203A0DFB8A2C5B0D8F399 /* Pods-Runner.debug.xcconfig */, - 2CE7B8C6E450A4A600A67B8A /* Pods-Runner.release.xcconfig */, - E8A8B37445EE1D9A1CFF1FF9 /* Pods-Runner.profile.xcconfig */, - B854B9FFDA0ECA0BE3F7DAA3 /* Pods-RunnerTests.debug.xcconfig */, - 247C85E901FDB571038C9605 /* Pods-RunnerTests.release.xcconfig */, - 57FC80673A922C3B3CB305EE /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; 331C80D6294CF71000263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -151,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 1658EC80884DF21671E4CC4F /* Pods */, + 7B5805107A01A0DCE3AEE58D /* Pods */, ); sourceTree = ""; }; @@ -199,11 +185,25 @@ path = Runner; sourceTree = ""; }; + 7B5805107A01A0DCE3AEE58D /* Pods */ = { + isa = PBXGroup; + children = ( + 563FF228F6F7A8409D35D0A7 /* Pods-Runner.debug.xcconfig */, + 69AEF7D4F0DBE9AAB0933D96 /* Pods-Runner.release.xcconfig */, + 1E12677AA3ECE9C9CBCD58E0 /* Pods-Runner.profile.xcconfig */, + 2363A83B16D7D8E0AE04E69A /* Pods-RunnerTests.debug.xcconfig */, + 4CA0ECC81814306A9E37BBEF /* Pods-RunnerTests.release.xcconfig */, + AB1A0EE9C9F1E1B7A180452F /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - 07EE044A37885A61F17D092E /* Pods_Runner.framework */, - 76A503B8F3891ED5C81C47B8 /* Pods_RunnerTests.framework */, + 9BAA311AE115BBDDFA7518C4 /* Pods_Runner.framework */, + 8D10F6B205F09D6542603E50 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - AB635B7056D33FE01A25C627 /* [CP] Check Pods Manifest.lock */, + 58900C32B5DA6E3606417250 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - F0CBBA1C93FC8B16283A43CC /* [CP] Check Pods Manifest.lock */, + 910A7CE209DE8383A0D9EDC7 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - EFA0EBCA56FC67C1CEC93F35 /* [CP] Embed Pods Frameworks */, + 740518C1C8FFA52FA3C3C020 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -361,7 +361,7 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - AB635B7056D33FE01A25C627 /* [CP] Check Pods Manifest.lock */ = { + 58900C32B5DA6E3606417250 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -383,7 +383,7 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - EFA0EBCA56FC67C1CEC93F35 /* [CP] Embed Pods Frameworks */ = { + 740518C1C8FFA52FA3C3C020 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -400,7 +400,7 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - F0CBBA1C93FC8B16283A43CC /* [CP] Check Pods Manifest.lock */ = { + 910A7CE209DE8383A0D9EDC7 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = B854B9FFDA0ECA0BE3F7DAA3 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 2363A83B16D7D8E0AE04E69A /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 247C85E901FDB571038C9605 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 4CA0ECC81814306A9E37BBEF /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 57FC80673A922C3B3CB305EE /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = AB1A0EE9C9F1E1B7A180452F /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/next-gen-ui/step_03_c/macos/Runner/Configs/AppInfo.xcconfig b/next-gen-ui/step_03_c/macos/Runner/Configs/AppInfo.xcconfig index 75cb962401..49197d439f 100644 --- a/next-gen-ui/step_03_c/macos/Runner/Configs/AppInfo.xcconfig +++ b/next-gen-ui/step_03_c/macos/Runner/Configs/AppInfo.xcconfig @@ -11,4 +11,4 @@ PRODUCT_NAME = next_gen_ui PRODUCT_BUNDLE_IDENTIFIER = com.example.nextGenUi // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. diff --git a/next-gen-ui/step_03_c/windows/runner/Runner.rc b/next-gen-ui/step_03_c/windows/runner/Runner.rc index 9818761ddd..64f7731101 100644 --- a/next-gen-ui/step_03_c/windows/runner/Runner.rc +++ b/next-gen-ui/step_03_c/windows/runner/Runner.rc @@ -93,7 +93,7 @@ BEGIN VALUE "FileDescription", "next_gen_ui" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "InternalName", "next_gen_ui" "\0" - VALUE "LegalCopyright", "Copyright (C) 2024 com.example. All rights reserved." "\0" + VALUE "LegalCopyright", "Copyright (C) 2025 com.example. All rights reserved." "\0" VALUE "OriginalFilename", "next_gen_ui.exe" "\0" VALUE "ProductName", "next_gen_ui" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" diff --git a/next-gen-ui/step_04_a/android/app/src/main/kotlin/com/example/next_gen_ui/MainActivity.kt b/next-gen-ui/step_04_a/android/app/src/main/kotlin/com/example/next_gen_ui/MainActivity.kt index 4c3a19b83d..3e9bc4cccf 100644 --- a/next-gen-ui/step_04_a/android/app/src/main/kotlin/com/example/next_gen_ui/MainActivity.kt +++ b/next-gen-ui/step_04_a/android/app/src/main/kotlin/com/example/next_gen_ui/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.next_gen_ui import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/next-gen-ui/step_04_a/ios/Runner.xcodeproj/project.pbxproj b/next-gen-ui/step_04_a/ios/Runner.xcodeproj/project.pbxproj index eb46940041..c9b466def7 100644 --- a/next-gen-ui/step_04_a/ios/Runner.xcodeproj/project.pbxproj +++ b/next-gen-ui/step_04_a/ios/Runner.xcodeproj/project.pbxproj @@ -8,14 +8,14 @@ /* Begin PBXBuildFile section */ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; - 169D3664121CF87F073D0A77 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F9634AF0E6C913D83790FF7A /* Pods_Runner.framework */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; - 7AC931060C55621E3547182A /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3ED71ECF4B69535D5D4F0C5B /* Pods_RunnerTests.framework */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; + E4B6A902F6D14A78E4601730 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 564E3EC0EE64AAF5EE8B5941 /* Pods_Runner.framework */; }; + F1B7523DE14C169B3CD558E7 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4F3E3591D7B7868A8A99EA32 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,17 +42,18 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 0BC11639E244F6F00A3FBC85 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 0CA38D1629FEBFED89865F4D /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 2AC5F7C12405D4C68B6BAD53 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 17615AC415DE19BB60A979B0 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 2741050B7D56FDBFFE67179E /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 3A533A391A46BC7EA2175D2C /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 3ED71ECF4B69535D5D4F0C5B /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 5F32ACAE9FD93DBC189064ED /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 47A031DE5979B59758E8AACA /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 4F3E3591D7B7868A8A99EA32 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 564E3EC0EE64AAF5EE8B5941 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 688EC1A2A0BEB2E791FD2419 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 6E858B0A6FA8CE397249AD5E /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; @@ -63,8 +64,7 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - C67944307BF5C92030DB21C4 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - F9634AF0E6C913D83790FF7A /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D7400EA9F19C66395528109D /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -72,47 +72,47 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 169D3664121CF87F073D0A77 /* Pods_Runner.framework in Frameworks */, + E4B6A902F6D14A78E4601730 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - B599F8E01F6C175460757162 /* Frameworks */ = { + C81AED8365D0632E9DAFF2C7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 7AC931060C55621E3547182A /* Pods_RunnerTests.framework in Frameworks */, + F1B7523DE14C169B3CD558E7 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 331C8082294A63A400263BE5 /* RunnerTests */ = { + 2D5CA952BBFCFAA928338DD2 /* Frameworks */ = { isa = PBXGroup; children = ( - 331C807B294A618700263BE5 /* RunnerTests.swift */, + 564E3EC0EE64AAF5EE8B5941 /* Pods_Runner.framework */, + 4F3E3591D7B7868A8A99EA32 /* Pods_RunnerTests.framework */, ); - path = RunnerTests; + name = Frameworks; sourceTree = ""; }; - 388B245E8E1C19CA47EFC235 /* Frameworks */ = { + 331C8082294A63A400263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( - F9634AF0E6C913D83790FF7A /* Pods_Runner.framework */, - 3ED71ECF4B69535D5D4F0C5B /* Pods_RunnerTests.framework */, + 331C807B294A618700263BE5 /* RunnerTests.swift */, ); - name = Frameworks; + path = RunnerTests; sourceTree = ""; }; - 6EE8FB4EC31425D552182803 /* Pods */ = { + 8880B12BB2220BC239B76853 /* Pods */ = { isa = PBXGroup; children = ( - 0BC11639E244F6F00A3FBC85 /* Pods-Runner.debug.xcconfig */, - 0CA38D1629FEBFED89865F4D /* Pods-Runner.release.xcconfig */, - C67944307BF5C92030DB21C4 /* Pods-Runner.profile.xcconfig */, - 3A533A391A46BC7EA2175D2C /* Pods-RunnerTests.debug.xcconfig */, - 2AC5F7C12405D4C68B6BAD53 /* Pods-RunnerTests.release.xcconfig */, - 5F32ACAE9FD93DBC189064ED /* Pods-RunnerTests.profile.xcconfig */, + 2741050B7D56FDBFFE67179E /* Pods-Runner.debug.xcconfig */, + 17615AC415DE19BB60A979B0 /* Pods-Runner.release.xcconfig */, + 47A031DE5979B59758E8AACA /* Pods-Runner.profile.xcconfig */, + 6E858B0A6FA8CE397249AD5E /* Pods-RunnerTests.debug.xcconfig */, + D7400EA9F19C66395528109D /* Pods-RunnerTests.release.xcconfig */, + 688EC1A2A0BEB2E791FD2419 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -136,8 +136,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - 6EE8FB4EC31425D552182803 /* Pods */, - 388B245E8E1C19CA47EFC235 /* Frameworks */, + 8880B12BB2220BC239B76853 /* Pods */, + 2D5CA952BBFCFAA928338DD2 /* Frameworks */, ); sourceTree = ""; }; @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - E69418CD4A4220CBB2521465 /* [CP] Check Pods Manifest.lock */, + CC37335F969F4F531B3DE66E /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - B599F8E01F6C175460757162 /* Frameworks */, + C81AED8365D0632E9DAFF2C7 /* Frameworks */, ); buildRules = ( ); @@ -191,7 +191,7 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - E9619697FAD34A9BB6E8DE31 /* [CP] Check Pods Manifest.lock */, + D7D0FE03D3C103AFEE6FBB57 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, @@ -300,7 +300,7 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - E69418CD4A4220CBB2521465 /* [CP] Check Pods Manifest.lock */ = { + CC37335F969F4F531B3DE66E /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -322,7 +322,7 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - E9619697FAD34A9BB6E8DE31 /* [CP] Check Pods Manifest.lock */ = { + D7D0FE03D3C103AFEE6FBB57 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -469,7 +469,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 3A533A391A46BC7EA2175D2C /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 6E858B0A6FA8CE397249AD5E /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -487,7 +487,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 2AC5F7C12405D4C68B6BAD53 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = D7400EA9F19C66395528109D /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -503,7 +503,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 5F32ACAE9FD93DBC189064ED /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 688EC1A2A0BEB2E791FD2419 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/next-gen-ui/step_04_a/macos/Runner.xcodeproj/project.pbxproj b/next-gen-ui/step_04_a/macos/Runner.xcodeproj/project.pbxproj index 1ed9abfde3..6f1e9dbf6a 100644 --- a/next-gen-ui/step_04_a/macos/Runner.xcodeproj/project.pbxproj +++ b/next-gen-ui/step_04_a/macos/Runner.xcodeproj/project.pbxproj @@ -27,8 +27,8 @@ 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - B8F5B79506013CB116725078 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 76A503B8F3891ED5C81C47B8 /* Pods_RunnerTests.framework */; }; - E51DA10B7307268A92179AD1 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 07EE044A37885A61F17D092E /* Pods_Runner.framework */; }; + 3EC59BF23CE09FFBC71D4F95 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9BAA311AE115BBDDFA7518C4 /* Pods_Runner.framework */; }; + 416A7346011D52C3D6CFDA04 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8D10F6B205F09D6542603E50 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,9 +62,8 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 07EE044A37885A61F17D092E /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 247C85E901FDB571038C9605 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - 2CE7B8C6E450A4A600A67B8A /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 1E12677AA3ECE9C9CBCD58E0 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 2363A83B16D7D8E0AE04E69A /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -81,13 +80,14 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 57FC80673A922C3B3CB305EE /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - 76A503B8F3891ED5C81C47B8 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 4CA0ECC81814306A9E37BBEF /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 563FF228F6F7A8409D35D0A7 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 69AEF7D4F0DBE9AAB0933D96 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 876203A0DFB8A2C5B0D8F399 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 8D10F6B205F09D6542603E50 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - B854B9FFDA0ECA0BE3F7DAA3 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - E8A8B37445EE1D9A1CFF1FF9 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 9BAA311AE115BBDDFA7518C4 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + AB1A0EE9C9F1E1B7A180452F /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - B8F5B79506013CB116725078 /* Pods_RunnerTests.framework in Frameworks */, + 416A7346011D52C3D6CFDA04 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,27 +103,13 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - E51DA10B7307268A92179AD1 /* Pods_Runner.framework in Frameworks */, + 3EC59BF23CE09FFBC71D4F95 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 1658EC80884DF21671E4CC4F /* Pods */ = { - isa = PBXGroup; - children = ( - 876203A0DFB8A2C5B0D8F399 /* Pods-Runner.debug.xcconfig */, - 2CE7B8C6E450A4A600A67B8A /* Pods-Runner.release.xcconfig */, - E8A8B37445EE1D9A1CFF1FF9 /* Pods-Runner.profile.xcconfig */, - B854B9FFDA0ECA0BE3F7DAA3 /* Pods-RunnerTests.debug.xcconfig */, - 247C85E901FDB571038C9605 /* Pods-RunnerTests.release.xcconfig */, - 57FC80673A922C3B3CB305EE /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; 331C80D6294CF71000263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -151,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 1658EC80884DF21671E4CC4F /* Pods */, + 7B5805107A01A0DCE3AEE58D /* Pods */, ); sourceTree = ""; }; @@ -199,11 +185,25 @@ path = Runner; sourceTree = ""; }; + 7B5805107A01A0DCE3AEE58D /* Pods */ = { + isa = PBXGroup; + children = ( + 563FF228F6F7A8409D35D0A7 /* Pods-Runner.debug.xcconfig */, + 69AEF7D4F0DBE9AAB0933D96 /* Pods-Runner.release.xcconfig */, + 1E12677AA3ECE9C9CBCD58E0 /* Pods-Runner.profile.xcconfig */, + 2363A83B16D7D8E0AE04E69A /* Pods-RunnerTests.debug.xcconfig */, + 4CA0ECC81814306A9E37BBEF /* Pods-RunnerTests.release.xcconfig */, + AB1A0EE9C9F1E1B7A180452F /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - 07EE044A37885A61F17D092E /* Pods_Runner.framework */, - 76A503B8F3891ED5C81C47B8 /* Pods_RunnerTests.framework */, + 9BAA311AE115BBDDFA7518C4 /* Pods_Runner.framework */, + 8D10F6B205F09D6542603E50 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - AB635B7056D33FE01A25C627 /* [CP] Check Pods Manifest.lock */, + 58900C32B5DA6E3606417250 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - F0CBBA1C93FC8B16283A43CC /* [CP] Check Pods Manifest.lock */, + 910A7CE209DE8383A0D9EDC7 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - EFA0EBCA56FC67C1CEC93F35 /* [CP] Embed Pods Frameworks */, + 740518C1C8FFA52FA3C3C020 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -361,7 +361,7 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - AB635B7056D33FE01A25C627 /* [CP] Check Pods Manifest.lock */ = { + 58900C32B5DA6E3606417250 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -383,7 +383,7 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - EFA0EBCA56FC67C1CEC93F35 /* [CP] Embed Pods Frameworks */ = { + 740518C1C8FFA52FA3C3C020 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -400,7 +400,7 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - F0CBBA1C93FC8B16283A43CC /* [CP] Check Pods Manifest.lock */ = { + 910A7CE209DE8383A0D9EDC7 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = B854B9FFDA0ECA0BE3F7DAA3 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 2363A83B16D7D8E0AE04E69A /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 247C85E901FDB571038C9605 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 4CA0ECC81814306A9E37BBEF /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 57FC80673A922C3B3CB305EE /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = AB1A0EE9C9F1E1B7A180452F /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/next-gen-ui/step_04_a/macos/Runner/Configs/AppInfo.xcconfig b/next-gen-ui/step_04_a/macos/Runner/Configs/AppInfo.xcconfig index 75cb962401..49197d439f 100644 --- a/next-gen-ui/step_04_a/macos/Runner/Configs/AppInfo.xcconfig +++ b/next-gen-ui/step_04_a/macos/Runner/Configs/AppInfo.xcconfig @@ -11,4 +11,4 @@ PRODUCT_NAME = next_gen_ui PRODUCT_BUNDLE_IDENTIFIER = com.example.nextGenUi // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. diff --git a/next-gen-ui/step_04_a/windows/runner/Runner.rc b/next-gen-ui/step_04_a/windows/runner/Runner.rc index 9818761ddd..64f7731101 100644 --- a/next-gen-ui/step_04_a/windows/runner/Runner.rc +++ b/next-gen-ui/step_04_a/windows/runner/Runner.rc @@ -93,7 +93,7 @@ BEGIN VALUE "FileDescription", "next_gen_ui" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "InternalName", "next_gen_ui" "\0" - VALUE "LegalCopyright", "Copyright (C) 2024 com.example. All rights reserved." "\0" + VALUE "LegalCopyright", "Copyright (C) 2025 com.example. All rights reserved." "\0" VALUE "OriginalFilename", "next_gen_ui.exe" "\0" VALUE "ProductName", "next_gen_ui" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" diff --git a/next-gen-ui/step_04_b/android/app/src/main/kotlin/com/example/next_gen_ui/MainActivity.kt b/next-gen-ui/step_04_b/android/app/src/main/kotlin/com/example/next_gen_ui/MainActivity.kt index 4c3a19b83d..3e9bc4cccf 100644 --- a/next-gen-ui/step_04_b/android/app/src/main/kotlin/com/example/next_gen_ui/MainActivity.kt +++ b/next-gen-ui/step_04_b/android/app/src/main/kotlin/com/example/next_gen_ui/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.next_gen_ui import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/next-gen-ui/step_04_b/ios/Runner.xcodeproj/project.pbxproj b/next-gen-ui/step_04_b/ios/Runner.xcodeproj/project.pbxproj index eb46940041..c9b466def7 100644 --- a/next-gen-ui/step_04_b/ios/Runner.xcodeproj/project.pbxproj +++ b/next-gen-ui/step_04_b/ios/Runner.xcodeproj/project.pbxproj @@ -8,14 +8,14 @@ /* Begin PBXBuildFile section */ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; - 169D3664121CF87F073D0A77 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F9634AF0E6C913D83790FF7A /* Pods_Runner.framework */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; - 7AC931060C55621E3547182A /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3ED71ECF4B69535D5D4F0C5B /* Pods_RunnerTests.framework */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; + E4B6A902F6D14A78E4601730 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 564E3EC0EE64AAF5EE8B5941 /* Pods_Runner.framework */; }; + F1B7523DE14C169B3CD558E7 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4F3E3591D7B7868A8A99EA32 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,17 +42,18 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 0BC11639E244F6F00A3FBC85 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 0CA38D1629FEBFED89865F4D /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 2AC5F7C12405D4C68B6BAD53 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 17615AC415DE19BB60A979B0 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 2741050B7D56FDBFFE67179E /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 3A533A391A46BC7EA2175D2C /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 3ED71ECF4B69535D5D4F0C5B /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 5F32ACAE9FD93DBC189064ED /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 47A031DE5979B59758E8AACA /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 4F3E3591D7B7868A8A99EA32 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 564E3EC0EE64AAF5EE8B5941 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 688EC1A2A0BEB2E791FD2419 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 6E858B0A6FA8CE397249AD5E /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; @@ -63,8 +64,7 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - C67944307BF5C92030DB21C4 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - F9634AF0E6C913D83790FF7A /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D7400EA9F19C66395528109D /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -72,47 +72,47 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 169D3664121CF87F073D0A77 /* Pods_Runner.framework in Frameworks */, + E4B6A902F6D14A78E4601730 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - B599F8E01F6C175460757162 /* Frameworks */ = { + C81AED8365D0632E9DAFF2C7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 7AC931060C55621E3547182A /* Pods_RunnerTests.framework in Frameworks */, + F1B7523DE14C169B3CD558E7 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 331C8082294A63A400263BE5 /* RunnerTests */ = { + 2D5CA952BBFCFAA928338DD2 /* Frameworks */ = { isa = PBXGroup; children = ( - 331C807B294A618700263BE5 /* RunnerTests.swift */, + 564E3EC0EE64AAF5EE8B5941 /* Pods_Runner.framework */, + 4F3E3591D7B7868A8A99EA32 /* Pods_RunnerTests.framework */, ); - path = RunnerTests; + name = Frameworks; sourceTree = ""; }; - 388B245E8E1C19CA47EFC235 /* Frameworks */ = { + 331C8082294A63A400263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( - F9634AF0E6C913D83790FF7A /* Pods_Runner.framework */, - 3ED71ECF4B69535D5D4F0C5B /* Pods_RunnerTests.framework */, + 331C807B294A618700263BE5 /* RunnerTests.swift */, ); - name = Frameworks; + path = RunnerTests; sourceTree = ""; }; - 6EE8FB4EC31425D552182803 /* Pods */ = { + 8880B12BB2220BC239B76853 /* Pods */ = { isa = PBXGroup; children = ( - 0BC11639E244F6F00A3FBC85 /* Pods-Runner.debug.xcconfig */, - 0CA38D1629FEBFED89865F4D /* Pods-Runner.release.xcconfig */, - C67944307BF5C92030DB21C4 /* Pods-Runner.profile.xcconfig */, - 3A533A391A46BC7EA2175D2C /* Pods-RunnerTests.debug.xcconfig */, - 2AC5F7C12405D4C68B6BAD53 /* Pods-RunnerTests.release.xcconfig */, - 5F32ACAE9FD93DBC189064ED /* Pods-RunnerTests.profile.xcconfig */, + 2741050B7D56FDBFFE67179E /* Pods-Runner.debug.xcconfig */, + 17615AC415DE19BB60A979B0 /* Pods-Runner.release.xcconfig */, + 47A031DE5979B59758E8AACA /* Pods-Runner.profile.xcconfig */, + 6E858B0A6FA8CE397249AD5E /* Pods-RunnerTests.debug.xcconfig */, + D7400EA9F19C66395528109D /* Pods-RunnerTests.release.xcconfig */, + 688EC1A2A0BEB2E791FD2419 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -136,8 +136,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - 6EE8FB4EC31425D552182803 /* Pods */, - 388B245E8E1C19CA47EFC235 /* Frameworks */, + 8880B12BB2220BC239B76853 /* Pods */, + 2D5CA952BBFCFAA928338DD2 /* Frameworks */, ); sourceTree = ""; }; @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - E69418CD4A4220CBB2521465 /* [CP] Check Pods Manifest.lock */, + CC37335F969F4F531B3DE66E /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - B599F8E01F6C175460757162 /* Frameworks */, + C81AED8365D0632E9DAFF2C7 /* Frameworks */, ); buildRules = ( ); @@ -191,7 +191,7 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - E9619697FAD34A9BB6E8DE31 /* [CP] Check Pods Manifest.lock */, + D7D0FE03D3C103AFEE6FBB57 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, @@ -300,7 +300,7 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - E69418CD4A4220CBB2521465 /* [CP] Check Pods Manifest.lock */ = { + CC37335F969F4F531B3DE66E /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -322,7 +322,7 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - E9619697FAD34A9BB6E8DE31 /* [CP] Check Pods Manifest.lock */ = { + D7D0FE03D3C103AFEE6FBB57 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -469,7 +469,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 3A533A391A46BC7EA2175D2C /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 6E858B0A6FA8CE397249AD5E /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -487,7 +487,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 2AC5F7C12405D4C68B6BAD53 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = D7400EA9F19C66395528109D /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -503,7 +503,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 5F32ACAE9FD93DBC189064ED /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 688EC1A2A0BEB2E791FD2419 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/next-gen-ui/step_04_b/macos/Runner.xcodeproj/project.pbxproj b/next-gen-ui/step_04_b/macos/Runner.xcodeproj/project.pbxproj index 1ed9abfde3..6f1e9dbf6a 100644 --- a/next-gen-ui/step_04_b/macos/Runner.xcodeproj/project.pbxproj +++ b/next-gen-ui/step_04_b/macos/Runner.xcodeproj/project.pbxproj @@ -27,8 +27,8 @@ 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - B8F5B79506013CB116725078 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 76A503B8F3891ED5C81C47B8 /* Pods_RunnerTests.framework */; }; - E51DA10B7307268A92179AD1 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 07EE044A37885A61F17D092E /* Pods_Runner.framework */; }; + 3EC59BF23CE09FFBC71D4F95 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9BAA311AE115BBDDFA7518C4 /* Pods_Runner.framework */; }; + 416A7346011D52C3D6CFDA04 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8D10F6B205F09D6542603E50 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,9 +62,8 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 07EE044A37885A61F17D092E /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 247C85E901FDB571038C9605 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - 2CE7B8C6E450A4A600A67B8A /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 1E12677AA3ECE9C9CBCD58E0 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 2363A83B16D7D8E0AE04E69A /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -81,13 +80,14 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 57FC80673A922C3B3CB305EE /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - 76A503B8F3891ED5C81C47B8 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 4CA0ECC81814306A9E37BBEF /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 563FF228F6F7A8409D35D0A7 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 69AEF7D4F0DBE9AAB0933D96 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 876203A0DFB8A2C5B0D8F399 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 8D10F6B205F09D6542603E50 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - B854B9FFDA0ECA0BE3F7DAA3 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - E8A8B37445EE1D9A1CFF1FF9 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 9BAA311AE115BBDDFA7518C4 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + AB1A0EE9C9F1E1B7A180452F /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - B8F5B79506013CB116725078 /* Pods_RunnerTests.framework in Frameworks */, + 416A7346011D52C3D6CFDA04 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,27 +103,13 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - E51DA10B7307268A92179AD1 /* Pods_Runner.framework in Frameworks */, + 3EC59BF23CE09FFBC71D4F95 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 1658EC80884DF21671E4CC4F /* Pods */ = { - isa = PBXGroup; - children = ( - 876203A0DFB8A2C5B0D8F399 /* Pods-Runner.debug.xcconfig */, - 2CE7B8C6E450A4A600A67B8A /* Pods-Runner.release.xcconfig */, - E8A8B37445EE1D9A1CFF1FF9 /* Pods-Runner.profile.xcconfig */, - B854B9FFDA0ECA0BE3F7DAA3 /* Pods-RunnerTests.debug.xcconfig */, - 247C85E901FDB571038C9605 /* Pods-RunnerTests.release.xcconfig */, - 57FC80673A922C3B3CB305EE /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; 331C80D6294CF71000263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -151,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 1658EC80884DF21671E4CC4F /* Pods */, + 7B5805107A01A0DCE3AEE58D /* Pods */, ); sourceTree = ""; }; @@ -199,11 +185,25 @@ path = Runner; sourceTree = ""; }; + 7B5805107A01A0DCE3AEE58D /* Pods */ = { + isa = PBXGroup; + children = ( + 563FF228F6F7A8409D35D0A7 /* Pods-Runner.debug.xcconfig */, + 69AEF7D4F0DBE9AAB0933D96 /* Pods-Runner.release.xcconfig */, + 1E12677AA3ECE9C9CBCD58E0 /* Pods-Runner.profile.xcconfig */, + 2363A83B16D7D8E0AE04E69A /* Pods-RunnerTests.debug.xcconfig */, + 4CA0ECC81814306A9E37BBEF /* Pods-RunnerTests.release.xcconfig */, + AB1A0EE9C9F1E1B7A180452F /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - 07EE044A37885A61F17D092E /* Pods_Runner.framework */, - 76A503B8F3891ED5C81C47B8 /* Pods_RunnerTests.framework */, + 9BAA311AE115BBDDFA7518C4 /* Pods_Runner.framework */, + 8D10F6B205F09D6542603E50 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - AB635B7056D33FE01A25C627 /* [CP] Check Pods Manifest.lock */, + 58900C32B5DA6E3606417250 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - F0CBBA1C93FC8B16283A43CC /* [CP] Check Pods Manifest.lock */, + 910A7CE209DE8383A0D9EDC7 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - EFA0EBCA56FC67C1CEC93F35 /* [CP] Embed Pods Frameworks */, + 740518C1C8FFA52FA3C3C020 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -361,7 +361,7 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - AB635B7056D33FE01A25C627 /* [CP] Check Pods Manifest.lock */ = { + 58900C32B5DA6E3606417250 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -383,7 +383,7 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - EFA0EBCA56FC67C1CEC93F35 /* [CP] Embed Pods Frameworks */ = { + 740518C1C8FFA52FA3C3C020 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -400,7 +400,7 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - F0CBBA1C93FC8B16283A43CC /* [CP] Check Pods Manifest.lock */ = { + 910A7CE209DE8383A0D9EDC7 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = B854B9FFDA0ECA0BE3F7DAA3 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 2363A83B16D7D8E0AE04E69A /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 247C85E901FDB571038C9605 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 4CA0ECC81814306A9E37BBEF /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 57FC80673A922C3B3CB305EE /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = AB1A0EE9C9F1E1B7A180452F /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/next-gen-ui/step_04_b/macos/Runner/Configs/AppInfo.xcconfig b/next-gen-ui/step_04_b/macos/Runner/Configs/AppInfo.xcconfig index 75cb962401..49197d439f 100644 --- a/next-gen-ui/step_04_b/macos/Runner/Configs/AppInfo.xcconfig +++ b/next-gen-ui/step_04_b/macos/Runner/Configs/AppInfo.xcconfig @@ -11,4 +11,4 @@ PRODUCT_NAME = next_gen_ui PRODUCT_BUNDLE_IDENTIFIER = com.example.nextGenUi // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. diff --git a/next-gen-ui/step_04_b/windows/runner/Runner.rc b/next-gen-ui/step_04_b/windows/runner/Runner.rc index 9818761ddd..64f7731101 100644 --- a/next-gen-ui/step_04_b/windows/runner/Runner.rc +++ b/next-gen-ui/step_04_b/windows/runner/Runner.rc @@ -93,7 +93,7 @@ BEGIN VALUE "FileDescription", "next_gen_ui" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "InternalName", "next_gen_ui" "\0" - VALUE "LegalCopyright", "Copyright (C) 2024 com.example. All rights reserved." "\0" + VALUE "LegalCopyright", "Copyright (C) 2025 com.example. All rights reserved." "\0" VALUE "OriginalFilename", "next_gen_ui.exe" "\0" VALUE "ProductName", "next_gen_ui" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" diff --git a/next-gen-ui/step_04_c/android/app/src/main/kotlin/com/example/next_gen_ui/MainActivity.kt b/next-gen-ui/step_04_c/android/app/src/main/kotlin/com/example/next_gen_ui/MainActivity.kt index 4c3a19b83d..3e9bc4cccf 100644 --- a/next-gen-ui/step_04_c/android/app/src/main/kotlin/com/example/next_gen_ui/MainActivity.kt +++ b/next-gen-ui/step_04_c/android/app/src/main/kotlin/com/example/next_gen_ui/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.next_gen_ui import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/next-gen-ui/step_04_c/ios/Runner.xcodeproj/project.pbxproj b/next-gen-ui/step_04_c/ios/Runner.xcodeproj/project.pbxproj index eb46940041..c9b466def7 100644 --- a/next-gen-ui/step_04_c/ios/Runner.xcodeproj/project.pbxproj +++ b/next-gen-ui/step_04_c/ios/Runner.xcodeproj/project.pbxproj @@ -8,14 +8,14 @@ /* Begin PBXBuildFile section */ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; - 169D3664121CF87F073D0A77 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F9634AF0E6C913D83790FF7A /* Pods_Runner.framework */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; - 7AC931060C55621E3547182A /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3ED71ECF4B69535D5D4F0C5B /* Pods_RunnerTests.framework */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; + E4B6A902F6D14A78E4601730 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 564E3EC0EE64AAF5EE8B5941 /* Pods_Runner.framework */; }; + F1B7523DE14C169B3CD558E7 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4F3E3591D7B7868A8A99EA32 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,17 +42,18 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 0BC11639E244F6F00A3FBC85 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 0CA38D1629FEBFED89865F4D /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 2AC5F7C12405D4C68B6BAD53 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 17615AC415DE19BB60A979B0 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 2741050B7D56FDBFFE67179E /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 3A533A391A46BC7EA2175D2C /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 3ED71ECF4B69535D5D4F0C5B /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 5F32ACAE9FD93DBC189064ED /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 47A031DE5979B59758E8AACA /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 4F3E3591D7B7868A8A99EA32 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 564E3EC0EE64AAF5EE8B5941 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 688EC1A2A0BEB2E791FD2419 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 6E858B0A6FA8CE397249AD5E /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; @@ -63,8 +64,7 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - C67944307BF5C92030DB21C4 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - F9634AF0E6C913D83790FF7A /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D7400EA9F19C66395528109D /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -72,47 +72,47 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 169D3664121CF87F073D0A77 /* Pods_Runner.framework in Frameworks */, + E4B6A902F6D14A78E4601730 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - B599F8E01F6C175460757162 /* Frameworks */ = { + C81AED8365D0632E9DAFF2C7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 7AC931060C55621E3547182A /* Pods_RunnerTests.framework in Frameworks */, + F1B7523DE14C169B3CD558E7 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 331C8082294A63A400263BE5 /* RunnerTests */ = { + 2D5CA952BBFCFAA928338DD2 /* Frameworks */ = { isa = PBXGroup; children = ( - 331C807B294A618700263BE5 /* RunnerTests.swift */, + 564E3EC0EE64AAF5EE8B5941 /* Pods_Runner.framework */, + 4F3E3591D7B7868A8A99EA32 /* Pods_RunnerTests.framework */, ); - path = RunnerTests; + name = Frameworks; sourceTree = ""; }; - 388B245E8E1C19CA47EFC235 /* Frameworks */ = { + 331C8082294A63A400263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( - F9634AF0E6C913D83790FF7A /* Pods_Runner.framework */, - 3ED71ECF4B69535D5D4F0C5B /* Pods_RunnerTests.framework */, + 331C807B294A618700263BE5 /* RunnerTests.swift */, ); - name = Frameworks; + path = RunnerTests; sourceTree = ""; }; - 6EE8FB4EC31425D552182803 /* Pods */ = { + 8880B12BB2220BC239B76853 /* Pods */ = { isa = PBXGroup; children = ( - 0BC11639E244F6F00A3FBC85 /* Pods-Runner.debug.xcconfig */, - 0CA38D1629FEBFED89865F4D /* Pods-Runner.release.xcconfig */, - C67944307BF5C92030DB21C4 /* Pods-Runner.profile.xcconfig */, - 3A533A391A46BC7EA2175D2C /* Pods-RunnerTests.debug.xcconfig */, - 2AC5F7C12405D4C68B6BAD53 /* Pods-RunnerTests.release.xcconfig */, - 5F32ACAE9FD93DBC189064ED /* Pods-RunnerTests.profile.xcconfig */, + 2741050B7D56FDBFFE67179E /* Pods-Runner.debug.xcconfig */, + 17615AC415DE19BB60A979B0 /* Pods-Runner.release.xcconfig */, + 47A031DE5979B59758E8AACA /* Pods-Runner.profile.xcconfig */, + 6E858B0A6FA8CE397249AD5E /* Pods-RunnerTests.debug.xcconfig */, + D7400EA9F19C66395528109D /* Pods-RunnerTests.release.xcconfig */, + 688EC1A2A0BEB2E791FD2419 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -136,8 +136,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - 6EE8FB4EC31425D552182803 /* Pods */, - 388B245E8E1C19CA47EFC235 /* Frameworks */, + 8880B12BB2220BC239B76853 /* Pods */, + 2D5CA952BBFCFAA928338DD2 /* Frameworks */, ); sourceTree = ""; }; @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - E69418CD4A4220CBB2521465 /* [CP] Check Pods Manifest.lock */, + CC37335F969F4F531B3DE66E /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - B599F8E01F6C175460757162 /* Frameworks */, + C81AED8365D0632E9DAFF2C7 /* Frameworks */, ); buildRules = ( ); @@ -191,7 +191,7 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - E9619697FAD34A9BB6E8DE31 /* [CP] Check Pods Manifest.lock */, + D7D0FE03D3C103AFEE6FBB57 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, @@ -300,7 +300,7 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - E69418CD4A4220CBB2521465 /* [CP] Check Pods Manifest.lock */ = { + CC37335F969F4F531B3DE66E /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -322,7 +322,7 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - E9619697FAD34A9BB6E8DE31 /* [CP] Check Pods Manifest.lock */ = { + D7D0FE03D3C103AFEE6FBB57 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -469,7 +469,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 3A533A391A46BC7EA2175D2C /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 6E858B0A6FA8CE397249AD5E /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -487,7 +487,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 2AC5F7C12405D4C68B6BAD53 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = D7400EA9F19C66395528109D /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -503,7 +503,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 5F32ACAE9FD93DBC189064ED /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 688EC1A2A0BEB2E791FD2419 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/next-gen-ui/step_04_c/macos/Runner.xcodeproj/project.pbxproj b/next-gen-ui/step_04_c/macos/Runner.xcodeproj/project.pbxproj index 1ed9abfde3..6f1e9dbf6a 100644 --- a/next-gen-ui/step_04_c/macos/Runner.xcodeproj/project.pbxproj +++ b/next-gen-ui/step_04_c/macos/Runner.xcodeproj/project.pbxproj @@ -27,8 +27,8 @@ 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - B8F5B79506013CB116725078 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 76A503B8F3891ED5C81C47B8 /* Pods_RunnerTests.framework */; }; - E51DA10B7307268A92179AD1 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 07EE044A37885A61F17D092E /* Pods_Runner.framework */; }; + 3EC59BF23CE09FFBC71D4F95 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9BAA311AE115BBDDFA7518C4 /* Pods_Runner.framework */; }; + 416A7346011D52C3D6CFDA04 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8D10F6B205F09D6542603E50 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,9 +62,8 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 07EE044A37885A61F17D092E /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 247C85E901FDB571038C9605 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - 2CE7B8C6E450A4A600A67B8A /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 1E12677AA3ECE9C9CBCD58E0 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 2363A83B16D7D8E0AE04E69A /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -81,13 +80,14 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 57FC80673A922C3B3CB305EE /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - 76A503B8F3891ED5C81C47B8 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 4CA0ECC81814306A9E37BBEF /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 563FF228F6F7A8409D35D0A7 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 69AEF7D4F0DBE9AAB0933D96 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 876203A0DFB8A2C5B0D8F399 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 8D10F6B205F09D6542603E50 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - B854B9FFDA0ECA0BE3F7DAA3 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - E8A8B37445EE1D9A1CFF1FF9 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 9BAA311AE115BBDDFA7518C4 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + AB1A0EE9C9F1E1B7A180452F /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - B8F5B79506013CB116725078 /* Pods_RunnerTests.framework in Frameworks */, + 416A7346011D52C3D6CFDA04 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,27 +103,13 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - E51DA10B7307268A92179AD1 /* Pods_Runner.framework in Frameworks */, + 3EC59BF23CE09FFBC71D4F95 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 1658EC80884DF21671E4CC4F /* Pods */ = { - isa = PBXGroup; - children = ( - 876203A0DFB8A2C5B0D8F399 /* Pods-Runner.debug.xcconfig */, - 2CE7B8C6E450A4A600A67B8A /* Pods-Runner.release.xcconfig */, - E8A8B37445EE1D9A1CFF1FF9 /* Pods-Runner.profile.xcconfig */, - B854B9FFDA0ECA0BE3F7DAA3 /* Pods-RunnerTests.debug.xcconfig */, - 247C85E901FDB571038C9605 /* Pods-RunnerTests.release.xcconfig */, - 57FC80673A922C3B3CB305EE /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; 331C80D6294CF71000263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -151,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 1658EC80884DF21671E4CC4F /* Pods */, + 7B5805107A01A0DCE3AEE58D /* Pods */, ); sourceTree = ""; }; @@ -199,11 +185,25 @@ path = Runner; sourceTree = ""; }; + 7B5805107A01A0DCE3AEE58D /* Pods */ = { + isa = PBXGroup; + children = ( + 563FF228F6F7A8409D35D0A7 /* Pods-Runner.debug.xcconfig */, + 69AEF7D4F0DBE9AAB0933D96 /* Pods-Runner.release.xcconfig */, + 1E12677AA3ECE9C9CBCD58E0 /* Pods-Runner.profile.xcconfig */, + 2363A83B16D7D8E0AE04E69A /* Pods-RunnerTests.debug.xcconfig */, + 4CA0ECC81814306A9E37BBEF /* Pods-RunnerTests.release.xcconfig */, + AB1A0EE9C9F1E1B7A180452F /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - 07EE044A37885A61F17D092E /* Pods_Runner.framework */, - 76A503B8F3891ED5C81C47B8 /* Pods_RunnerTests.framework */, + 9BAA311AE115BBDDFA7518C4 /* Pods_Runner.framework */, + 8D10F6B205F09D6542603E50 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - AB635B7056D33FE01A25C627 /* [CP] Check Pods Manifest.lock */, + 58900C32B5DA6E3606417250 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - F0CBBA1C93FC8B16283A43CC /* [CP] Check Pods Manifest.lock */, + 910A7CE209DE8383A0D9EDC7 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - EFA0EBCA56FC67C1CEC93F35 /* [CP] Embed Pods Frameworks */, + 740518C1C8FFA52FA3C3C020 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -361,7 +361,7 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - AB635B7056D33FE01A25C627 /* [CP] Check Pods Manifest.lock */ = { + 58900C32B5DA6E3606417250 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -383,7 +383,7 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - EFA0EBCA56FC67C1CEC93F35 /* [CP] Embed Pods Frameworks */ = { + 740518C1C8FFA52FA3C3C020 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -400,7 +400,7 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - F0CBBA1C93FC8B16283A43CC /* [CP] Check Pods Manifest.lock */ = { + 910A7CE209DE8383A0D9EDC7 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = B854B9FFDA0ECA0BE3F7DAA3 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 2363A83B16D7D8E0AE04E69A /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 247C85E901FDB571038C9605 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 4CA0ECC81814306A9E37BBEF /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 57FC80673A922C3B3CB305EE /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = AB1A0EE9C9F1E1B7A180452F /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/next-gen-ui/step_04_c/macos/Runner/Configs/AppInfo.xcconfig b/next-gen-ui/step_04_c/macos/Runner/Configs/AppInfo.xcconfig index 75cb962401..49197d439f 100644 --- a/next-gen-ui/step_04_c/macos/Runner/Configs/AppInfo.xcconfig +++ b/next-gen-ui/step_04_c/macos/Runner/Configs/AppInfo.xcconfig @@ -11,4 +11,4 @@ PRODUCT_NAME = next_gen_ui PRODUCT_BUNDLE_IDENTIFIER = com.example.nextGenUi // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. diff --git a/next-gen-ui/step_04_c/windows/runner/Runner.rc b/next-gen-ui/step_04_c/windows/runner/Runner.rc index 9818761ddd..64f7731101 100644 --- a/next-gen-ui/step_04_c/windows/runner/Runner.rc +++ b/next-gen-ui/step_04_c/windows/runner/Runner.rc @@ -93,7 +93,7 @@ BEGIN VALUE "FileDescription", "next_gen_ui" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "InternalName", "next_gen_ui" "\0" - VALUE "LegalCopyright", "Copyright (C) 2024 com.example. All rights reserved." "\0" + VALUE "LegalCopyright", "Copyright (C) 2025 com.example. All rights reserved." "\0" VALUE "OriginalFilename", "next_gen_ui.exe" "\0" VALUE "ProductName", "next_gen_ui" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" diff --git a/next-gen-ui/step_04_d/android/app/src/main/kotlin/com/example/next_gen_ui/MainActivity.kt b/next-gen-ui/step_04_d/android/app/src/main/kotlin/com/example/next_gen_ui/MainActivity.kt index 4c3a19b83d..3e9bc4cccf 100644 --- a/next-gen-ui/step_04_d/android/app/src/main/kotlin/com/example/next_gen_ui/MainActivity.kt +++ b/next-gen-ui/step_04_d/android/app/src/main/kotlin/com/example/next_gen_ui/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.next_gen_ui import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/next-gen-ui/step_04_d/ios/Runner.xcodeproj/project.pbxproj b/next-gen-ui/step_04_d/ios/Runner.xcodeproj/project.pbxproj index eb46940041..c9b466def7 100644 --- a/next-gen-ui/step_04_d/ios/Runner.xcodeproj/project.pbxproj +++ b/next-gen-ui/step_04_d/ios/Runner.xcodeproj/project.pbxproj @@ -8,14 +8,14 @@ /* Begin PBXBuildFile section */ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; - 169D3664121CF87F073D0A77 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F9634AF0E6C913D83790FF7A /* Pods_Runner.framework */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; - 7AC931060C55621E3547182A /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3ED71ECF4B69535D5D4F0C5B /* Pods_RunnerTests.framework */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; + E4B6A902F6D14A78E4601730 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 564E3EC0EE64AAF5EE8B5941 /* Pods_Runner.framework */; }; + F1B7523DE14C169B3CD558E7 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4F3E3591D7B7868A8A99EA32 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,17 +42,18 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 0BC11639E244F6F00A3FBC85 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 0CA38D1629FEBFED89865F4D /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 2AC5F7C12405D4C68B6BAD53 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 17615AC415DE19BB60A979B0 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 2741050B7D56FDBFFE67179E /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 3A533A391A46BC7EA2175D2C /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 3ED71ECF4B69535D5D4F0C5B /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 5F32ACAE9FD93DBC189064ED /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 47A031DE5979B59758E8AACA /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 4F3E3591D7B7868A8A99EA32 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 564E3EC0EE64AAF5EE8B5941 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 688EC1A2A0BEB2E791FD2419 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 6E858B0A6FA8CE397249AD5E /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; @@ -63,8 +64,7 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - C67944307BF5C92030DB21C4 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - F9634AF0E6C913D83790FF7A /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D7400EA9F19C66395528109D /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -72,47 +72,47 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 169D3664121CF87F073D0A77 /* Pods_Runner.framework in Frameworks */, + E4B6A902F6D14A78E4601730 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - B599F8E01F6C175460757162 /* Frameworks */ = { + C81AED8365D0632E9DAFF2C7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 7AC931060C55621E3547182A /* Pods_RunnerTests.framework in Frameworks */, + F1B7523DE14C169B3CD558E7 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 331C8082294A63A400263BE5 /* RunnerTests */ = { + 2D5CA952BBFCFAA928338DD2 /* Frameworks */ = { isa = PBXGroup; children = ( - 331C807B294A618700263BE5 /* RunnerTests.swift */, + 564E3EC0EE64AAF5EE8B5941 /* Pods_Runner.framework */, + 4F3E3591D7B7868A8A99EA32 /* Pods_RunnerTests.framework */, ); - path = RunnerTests; + name = Frameworks; sourceTree = ""; }; - 388B245E8E1C19CA47EFC235 /* Frameworks */ = { + 331C8082294A63A400263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( - F9634AF0E6C913D83790FF7A /* Pods_Runner.framework */, - 3ED71ECF4B69535D5D4F0C5B /* Pods_RunnerTests.framework */, + 331C807B294A618700263BE5 /* RunnerTests.swift */, ); - name = Frameworks; + path = RunnerTests; sourceTree = ""; }; - 6EE8FB4EC31425D552182803 /* Pods */ = { + 8880B12BB2220BC239B76853 /* Pods */ = { isa = PBXGroup; children = ( - 0BC11639E244F6F00A3FBC85 /* Pods-Runner.debug.xcconfig */, - 0CA38D1629FEBFED89865F4D /* Pods-Runner.release.xcconfig */, - C67944307BF5C92030DB21C4 /* Pods-Runner.profile.xcconfig */, - 3A533A391A46BC7EA2175D2C /* Pods-RunnerTests.debug.xcconfig */, - 2AC5F7C12405D4C68B6BAD53 /* Pods-RunnerTests.release.xcconfig */, - 5F32ACAE9FD93DBC189064ED /* Pods-RunnerTests.profile.xcconfig */, + 2741050B7D56FDBFFE67179E /* Pods-Runner.debug.xcconfig */, + 17615AC415DE19BB60A979B0 /* Pods-Runner.release.xcconfig */, + 47A031DE5979B59758E8AACA /* Pods-Runner.profile.xcconfig */, + 6E858B0A6FA8CE397249AD5E /* Pods-RunnerTests.debug.xcconfig */, + D7400EA9F19C66395528109D /* Pods-RunnerTests.release.xcconfig */, + 688EC1A2A0BEB2E791FD2419 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -136,8 +136,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - 6EE8FB4EC31425D552182803 /* Pods */, - 388B245E8E1C19CA47EFC235 /* Frameworks */, + 8880B12BB2220BC239B76853 /* Pods */, + 2D5CA952BBFCFAA928338DD2 /* Frameworks */, ); sourceTree = ""; }; @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - E69418CD4A4220CBB2521465 /* [CP] Check Pods Manifest.lock */, + CC37335F969F4F531B3DE66E /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - B599F8E01F6C175460757162 /* Frameworks */, + C81AED8365D0632E9DAFF2C7 /* Frameworks */, ); buildRules = ( ); @@ -191,7 +191,7 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - E9619697FAD34A9BB6E8DE31 /* [CP] Check Pods Manifest.lock */, + D7D0FE03D3C103AFEE6FBB57 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, @@ -300,7 +300,7 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - E69418CD4A4220CBB2521465 /* [CP] Check Pods Manifest.lock */ = { + CC37335F969F4F531B3DE66E /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -322,7 +322,7 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - E9619697FAD34A9BB6E8DE31 /* [CP] Check Pods Manifest.lock */ = { + D7D0FE03D3C103AFEE6FBB57 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -469,7 +469,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 3A533A391A46BC7EA2175D2C /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 6E858B0A6FA8CE397249AD5E /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -487,7 +487,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 2AC5F7C12405D4C68B6BAD53 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = D7400EA9F19C66395528109D /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -503,7 +503,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 5F32ACAE9FD93DBC189064ED /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 688EC1A2A0BEB2E791FD2419 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/next-gen-ui/step_04_d/macos/Runner.xcodeproj/project.pbxproj b/next-gen-ui/step_04_d/macos/Runner.xcodeproj/project.pbxproj index 1ed9abfde3..6f1e9dbf6a 100644 --- a/next-gen-ui/step_04_d/macos/Runner.xcodeproj/project.pbxproj +++ b/next-gen-ui/step_04_d/macos/Runner.xcodeproj/project.pbxproj @@ -27,8 +27,8 @@ 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - B8F5B79506013CB116725078 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 76A503B8F3891ED5C81C47B8 /* Pods_RunnerTests.framework */; }; - E51DA10B7307268A92179AD1 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 07EE044A37885A61F17D092E /* Pods_Runner.framework */; }; + 3EC59BF23CE09FFBC71D4F95 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9BAA311AE115BBDDFA7518C4 /* Pods_Runner.framework */; }; + 416A7346011D52C3D6CFDA04 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8D10F6B205F09D6542603E50 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,9 +62,8 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 07EE044A37885A61F17D092E /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 247C85E901FDB571038C9605 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - 2CE7B8C6E450A4A600A67B8A /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 1E12677AA3ECE9C9CBCD58E0 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 2363A83B16D7D8E0AE04E69A /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -81,13 +80,14 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 57FC80673A922C3B3CB305EE /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - 76A503B8F3891ED5C81C47B8 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 4CA0ECC81814306A9E37BBEF /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 563FF228F6F7A8409D35D0A7 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 69AEF7D4F0DBE9AAB0933D96 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 876203A0DFB8A2C5B0D8F399 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 8D10F6B205F09D6542603E50 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - B854B9FFDA0ECA0BE3F7DAA3 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - E8A8B37445EE1D9A1CFF1FF9 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 9BAA311AE115BBDDFA7518C4 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + AB1A0EE9C9F1E1B7A180452F /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - B8F5B79506013CB116725078 /* Pods_RunnerTests.framework in Frameworks */, + 416A7346011D52C3D6CFDA04 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,27 +103,13 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - E51DA10B7307268A92179AD1 /* Pods_Runner.framework in Frameworks */, + 3EC59BF23CE09FFBC71D4F95 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 1658EC80884DF21671E4CC4F /* Pods */ = { - isa = PBXGroup; - children = ( - 876203A0DFB8A2C5B0D8F399 /* Pods-Runner.debug.xcconfig */, - 2CE7B8C6E450A4A600A67B8A /* Pods-Runner.release.xcconfig */, - E8A8B37445EE1D9A1CFF1FF9 /* Pods-Runner.profile.xcconfig */, - B854B9FFDA0ECA0BE3F7DAA3 /* Pods-RunnerTests.debug.xcconfig */, - 247C85E901FDB571038C9605 /* Pods-RunnerTests.release.xcconfig */, - 57FC80673A922C3B3CB305EE /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; 331C80D6294CF71000263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -151,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 1658EC80884DF21671E4CC4F /* Pods */, + 7B5805107A01A0DCE3AEE58D /* Pods */, ); sourceTree = ""; }; @@ -199,11 +185,25 @@ path = Runner; sourceTree = ""; }; + 7B5805107A01A0DCE3AEE58D /* Pods */ = { + isa = PBXGroup; + children = ( + 563FF228F6F7A8409D35D0A7 /* Pods-Runner.debug.xcconfig */, + 69AEF7D4F0DBE9AAB0933D96 /* Pods-Runner.release.xcconfig */, + 1E12677AA3ECE9C9CBCD58E0 /* Pods-Runner.profile.xcconfig */, + 2363A83B16D7D8E0AE04E69A /* Pods-RunnerTests.debug.xcconfig */, + 4CA0ECC81814306A9E37BBEF /* Pods-RunnerTests.release.xcconfig */, + AB1A0EE9C9F1E1B7A180452F /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - 07EE044A37885A61F17D092E /* Pods_Runner.framework */, - 76A503B8F3891ED5C81C47B8 /* Pods_RunnerTests.framework */, + 9BAA311AE115BBDDFA7518C4 /* Pods_Runner.framework */, + 8D10F6B205F09D6542603E50 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - AB635B7056D33FE01A25C627 /* [CP] Check Pods Manifest.lock */, + 58900C32B5DA6E3606417250 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - F0CBBA1C93FC8B16283A43CC /* [CP] Check Pods Manifest.lock */, + 910A7CE209DE8383A0D9EDC7 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - EFA0EBCA56FC67C1CEC93F35 /* [CP] Embed Pods Frameworks */, + 740518C1C8FFA52FA3C3C020 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -361,7 +361,7 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - AB635B7056D33FE01A25C627 /* [CP] Check Pods Manifest.lock */ = { + 58900C32B5DA6E3606417250 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -383,7 +383,7 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - EFA0EBCA56FC67C1CEC93F35 /* [CP] Embed Pods Frameworks */ = { + 740518C1C8FFA52FA3C3C020 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -400,7 +400,7 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - F0CBBA1C93FC8B16283A43CC /* [CP] Check Pods Manifest.lock */ = { + 910A7CE209DE8383A0D9EDC7 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = B854B9FFDA0ECA0BE3F7DAA3 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 2363A83B16D7D8E0AE04E69A /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 247C85E901FDB571038C9605 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 4CA0ECC81814306A9E37BBEF /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 57FC80673A922C3B3CB305EE /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = AB1A0EE9C9F1E1B7A180452F /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/next-gen-ui/step_04_d/macos/Runner/Configs/AppInfo.xcconfig b/next-gen-ui/step_04_d/macos/Runner/Configs/AppInfo.xcconfig index 75cb962401..49197d439f 100644 --- a/next-gen-ui/step_04_d/macos/Runner/Configs/AppInfo.xcconfig +++ b/next-gen-ui/step_04_d/macos/Runner/Configs/AppInfo.xcconfig @@ -11,4 +11,4 @@ PRODUCT_NAME = next_gen_ui PRODUCT_BUNDLE_IDENTIFIER = com.example.nextGenUi // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. diff --git a/next-gen-ui/step_04_d/windows/runner/Runner.rc b/next-gen-ui/step_04_d/windows/runner/Runner.rc index 9818761ddd..64f7731101 100644 --- a/next-gen-ui/step_04_d/windows/runner/Runner.rc +++ b/next-gen-ui/step_04_d/windows/runner/Runner.rc @@ -93,7 +93,7 @@ BEGIN VALUE "FileDescription", "next_gen_ui" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "InternalName", "next_gen_ui" "\0" - VALUE "LegalCopyright", "Copyright (C) 2024 com.example. All rights reserved." "\0" + VALUE "LegalCopyright", "Copyright (C) 2025 com.example. All rights reserved." "\0" VALUE "OriginalFilename", "next_gen_ui.exe" "\0" VALUE "ProductName", "next_gen_ui" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" diff --git a/next-gen-ui/step_04_e/android/app/src/main/kotlin/com/example/next_gen_ui/MainActivity.kt b/next-gen-ui/step_04_e/android/app/src/main/kotlin/com/example/next_gen_ui/MainActivity.kt index 4c3a19b83d..3e9bc4cccf 100644 --- a/next-gen-ui/step_04_e/android/app/src/main/kotlin/com/example/next_gen_ui/MainActivity.kt +++ b/next-gen-ui/step_04_e/android/app/src/main/kotlin/com/example/next_gen_ui/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.next_gen_ui import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/next-gen-ui/step_04_e/ios/Runner.xcodeproj/project.pbxproj b/next-gen-ui/step_04_e/ios/Runner.xcodeproj/project.pbxproj index eb46940041..c9b466def7 100644 --- a/next-gen-ui/step_04_e/ios/Runner.xcodeproj/project.pbxproj +++ b/next-gen-ui/step_04_e/ios/Runner.xcodeproj/project.pbxproj @@ -8,14 +8,14 @@ /* Begin PBXBuildFile section */ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; - 169D3664121CF87F073D0A77 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F9634AF0E6C913D83790FF7A /* Pods_Runner.framework */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; - 7AC931060C55621E3547182A /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3ED71ECF4B69535D5D4F0C5B /* Pods_RunnerTests.framework */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; + E4B6A902F6D14A78E4601730 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 564E3EC0EE64AAF5EE8B5941 /* Pods_Runner.framework */; }; + F1B7523DE14C169B3CD558E7 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4F3E3591D7B7868A8A99EA32 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,17 +42,18 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 0BC11639E244F6F00A3FBC85 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 0CA38D1629FEBFED89865F4D /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 2AC5F7C12405D4C68B6BAD53 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 17615AC415DE19BB60A979B0 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 2741050B7D56FDBFFE67179E /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 3A533A391A46BC7EA2175D2C /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 3ED71ECF4B69535D5D4F0C5B /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 5F32ACAE9FD93DBC189064ED /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 47A031DE5979B59758E8AACA /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 4F3E3591D7B7868A8A99EA32 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 564E3EC0EE64AAF5EE8B5941 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 688EC1A2A0BEB2E791FD2419 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 6E858B0A6FA8CE397249AD5E /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; @@ -63,8 +64,7 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - C67944307BF5C92030DB21C4 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - F9634AF0E6C913D83790FF7A /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D7400EA9F19C66395528109D /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -72,47 +72,47 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 169D3664121CF87F073D0A77 /* Pods_Runner.framework in Frameworks */, + E4B6A902F6D14A78E4601730 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - B599F8E01F6C175460757162 /* Frameworks */ = { + C81AED8365D0632E9DAFF2C7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 7AC931060C55621E3547182A /* Pods_RunnerTests.framework in Frameworks */, + F1B7523DE14C169B3CD558E7 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 331C8082294A63A400263BE5 /* RunnerTests */ = { + 2D5CA952BBFCFAA928338DD2 /* Frameworks */ = { isa = PBXGroup; children = ( - 331C807B294A618700263BE5 /* RunnerTests.swift */, + 564E3EC0EE64AAF5EE8B5941 /* Pods_Runner.framework */, + 4F3E3591D7B7868A8A99EA32 /* Pods_RunnerTests.framework */, ); - path = RunnerTests; + name = Frameworks; sourceTree = ""; }; - 388B245E8E1C19CA47EFC235 /* Frameworks */ = { + 331C8082294A63A400263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( - F9634AF0E6C913D83790FF7A /* Pods_Runner.framework */, - 3ED71ECF4B69535D5D4F0C5B /* Pods_RunnerTests.framework */, + 331C807B294A618700263BE5 /* RunnerTests.swift */, ); - name = Frameworks; + path = RunnerTests; sourceTree = ""; }; - 6EE8FB4EC31425D552182803 /* Pods */ = { + 8880B12BB2220BC239B76853 /* Pods */ = { isa = PBXGroup; children = ( - 0BC11639E244F6F00A3FBC85 /* Pods-Runner.debug.xcconfig */, - 0CA38D1629FEBFED89865F4D /* Pods-Runner.release.xcconfig */, - C67944307BF5C92030DB21C4 /* Pods-Runner.profile.xcconfig */, - 3A533A391A46BC7EA2175D2C /* Pods-RunnerTests.debug.xcconfig */, - 2AC5F7C12405D4C68B6BAD53 /* Pods-RunnerTests.release.xcconfig */, - 5F32ACAE9FD93DBC189064ED /* Pods-RunnerTests.profile.xcconfig */, + 2741050B7D56FDBFFE67179E /* Pods-Runner.debug.xcconfig */, + 17615AC415DE19BB60A979B0 /* Pods-Runner.release.xcconfig */, + 47A031DE5979B59758E8AACA /* Pods-Runner.profile.xcconfig */, + 6E858B0A6FA8CE397249AD5E /* Pods-RunnerTests.debug.xcconfig */, + D7400EA9F19C66395528109D /* Pods-RunnerTests.release.xcconfig */, + 688EC1A2A0BEB2E791FD2419 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -136,8 +136,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - 6EE8FB4EC31425D552182803 /* Pods */, - 388B245E8E1C19CA47EFC235 /* Frameworks */, + 8880B12BB2220BC239B76853 /* Pods */, + 2D5CA952BBFCFAA928338DD2 /* Frameworks */, ); sourceTree = ""; }; @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - E69418CD4A4220CBB2521465 /* [CP] Check Pods Manifest.lock */, + CC37335F969F4F531B3DE66E /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - B599F8E01F6C175460757162 /* Frameworks */, + C81AED8365D0632E9DAFF2C7 /* Frameworks */, ); buildRules = ( ); @@ -191,7 +191,7 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - E9619697FAD34A9BB6E8DE31 /* [CP] Check Pods Manifest.lock */, + D7D0FE03D3C103AFEE6FBB57 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, @@ -300,7 +300,7 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - E69418CD4A4220CBB2521465 /* [CP] Check Pods Manifest.lock */ = { + CC37335F969F4F531B3DE66E /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -322,7 +322,7 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - E9619697FAD34A9BB6E8DE31 /* [CP] Check Pods Manifest.lock */ = { + D7D0FE03D3C103AFEE6FBB57 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -469,7 +469,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 3A533A391A46BC7EA2175D2C /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 6E858B0A6FA8CE397249AD5E /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -487,7 +487,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 2AC5F7C12405D4C68B6BAD53 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = D7400EA9F19C66395528109D /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -503,7 +503,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 5F32ACAE9FD93DBC189064ED /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 688EC1A2A0BEB2E791FD2419 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/next-gen-ui/step_04_e/macos/Runner.xcodeproj/project.pbxproj b/next-gen-ui/step_04_e/macos/Runner.xcodeproj/project.pbxproj index 1ed9abfde3..6f1e9dbf6a 100644 --- a/next-gen-ui/step_04_e/macos/Runner.xcodeproj/project.pbxproj +++ b/next-gen-ui/step_04_e/macos/Runner.xcodeproj/project.pbxproj @@ -27,8 +27,8 @@ 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - B8F5B79506013CB116725078 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 76A503B8F3891ED5C81C47B8 /* Pods_RunnerTests.framework */; }; - E51DA10B7307268A92179AD1 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 07EE044A37885A61F17D092E /* Pods_Runner.framework */; }; + 3EC59BF23CE09FFBC71D4F95 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9BAA311AE115BBDDFA7518C4 /* Pods_Runner.framework */; }; + 416A7346011D52C3D6CFDA04 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8D10F6B205F09D6542603E50 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,9 +62,8 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 07EE044A37885A61F17D092E /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 247C85E901FDB571038C9605 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - 2CE7B8C6E450A4A600A67B8A /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 1E12677AA3ECE9C9CBCD58E0 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 2363A83B16D7D8E0AE04E69A /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -81,13 +80,14 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 57FC80673A922C3B3CB305EE /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - 76A503B8F3891ED5C81C47B8 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 4CA0ECC81814306A9E37BBEF /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 563FF228F6F7A8409D35D0A7 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 69AEF7D4F0DBE9AAB0933D96 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 876203A0DFB8A2C5B0D8F399 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 8D10F6B205F09D6542603E50 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - B854B9FFDA0ECA0BE3F7DAA3 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - E8A8B37445EE1D9A1CFF1FF9 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 9BAA311AE115BBDDFA7518C4 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + AB1A0EE9C9F1E1B7A180452F /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - B8F5B79506013CB116725078 /* Pods_RunnerTests.framework in Frameworks */, + 416A7346011D52C3D6CFDA04 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,27 +103,13 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - E51DA10B7307268A92179AD1 /* Pods_Runner.framework in Frameworks */, + 3EC59BF23CE09FFBC71D4F95 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 1658EC80884DF21671E4CC4F /* Pods */ = { - isa = PBXGroup; - children = ( - 876203A0DFB8A2C5B0D8F399 /* Pods-Runner.debug.xcconfig */, - 2CE7B8C6E450A4A600A67B8A /* Pods-Runner.release.xcconfig */, - E8A8B37445EE1D9A1CFF1FF9 /* Pods-Runner.profile.xcconfig */, - B854B9FFDA0ECA0BE3F7DAA3 /* Pods-RunnerTests.debug.xcconfig */, - 247C85E901FDB571038C9605 /* Pods-RunnerTests.release.xcconfig */, - 57FC80673A922C3B3CB305EE /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; 331C80D6294CF71000263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -151,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 1658EC80884DF21671E4CC4F /* Pods */, + 7B5805107A01A0DCE3AEE58D /* Pods */, ); sourceTree = ""; }; @@ -199,11 +185,25 @@ path = Runner; sourceTree = ""; }; + 7B5805107A01A0DCE3AEE58D /* Pods */ = { + isa = PBXGroup; + children = ( + 563FF228F6F7A8409D35D0A7 /* Pods-Runner.debug.xcconfig */, + 69AEF7D4F0DBE9AAB0933D96 /* Pods-Runner.release.xcconfig */, + 1E12677AA3ECE9C9CBCD58E0 /* Pods-Runner.profile.xcconfig */, + 2363A83B16D7D8E0AE04E69A /* Pods-RunnerTests.debug.xcconfig */, + 4CA0ECC81814306A9E37BBEF /* Pods-RunnerTests.release.xcconfig */, + AB1A0EE9C9F1E1B7A180452F /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - 07EE044A37885A61F17D092E /* Pods_Runner.framework */, - 76A503B8F3891ED5C81C47B8 /* Pods_RunnerTests.framework */, + 9BAA311AE115BBDDFA7518C4 /* Pods_Runner.framework */, + 8D10F6B205F09D6542603E50 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - AB635B7056D33FE01A25C627 /* [CP] Check Pods Manifest.lock */, + 58900C32B5DA6E3606417250 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - F0CBBA1C93FC8B16283A43CC /* [CP] Check Pods Manifest.lock */, + 910A7CE209DE8383A0D9EDC7 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - EFA0EBCA56FC67C1CEC93F35 /* [CP] Embed Pods Frameworks */, + 740518C1C8FFA52FA3C3C020 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -361,7 +361,7 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - AB635B7056D33FE01A25C627 /* [CP] Check Pods Manifest.lock */ = { + 58900C32B5DA6E3606417250 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -383,7 +383,7 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - EFA0EBCA56FC67C1CEC93F35 /* [CP] Embed Pods Frameworks */ = { + 740518C1C8FFA52FA3C3C020 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -400,7 +400,7 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - F0CBBA1C93FC8B16283A43CC /* [CP] Check Pods Manifest.lock */ = { + 910A7CE209DE8383A0D9EDC7 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = B854B9FFDA0ECA0BE3F7DAA3 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 2363A83B16D7D8E0AE04E69A /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 247C85E901FDB571038C9605 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 4CA0ECC81814306A9E37BBEF /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 57FC80673A922C3B3CB305EE /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = AB1A0EE9C9F1E1B7A180452F /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/next-gen-ui/step_04_e/macos/Runner/Configs/AppInfo.xcconfig b/next-gen-ui/step_04_e/macos/Runner/Configs/AppInfo.xcconfig index 75cb962401..49197d439f 100644 --- a/next-gen-ui/step_04_e/macos/Runner/Configs/AppInfo.xcconfig +++ b/next-gen-ui/step_04_e/macos/Runner/Configs/AppInfo.xcconfig @@ -11,4 +11,4 @@ PRODUCT_NAME = next_gen_ui PRODUCT_BUNDLE_IDENTIFIER = com.example.nextGenUi // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. diff --git a/next-gen-ui/step_04_e/windows/runner/Runner.rc b/next-gen-ui/step_04_e/windows/runner/Runner.rc index 9818761ddd..64f7731101 100644 --- a/next-gen-ui/step_04_e/windows/runner/Runner.rc +++ b/next-gen-ui/step_04_e/windows/runner/Runner.rc @@ -93,7 +93,7 @@ BEGIN VALUE "FileDescription", "next_gen_ui" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "InternalName", "next_gen_ui" "\0" - VALUE "LegalCopyright", "Copyright (C) 2024 com.example. All rights reserved." "\0" + VALUE "LegalCopyright", "Copyright (C) 2025 com.example. All rights reserved." "\0" VALUE "OriginalFilename", "next_gen_ui.exe" "\0" VALUE "ProductName", "next_gen_ui" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" diff --git a/next-gen-ui/step_05_a/android/app/src/main/kotlin/com/example/next_gen_ui/MainActivity.kt b/next-gen-ui/step_05_a/android/app/src/main/kotlin/com/example/next_gen_ui/MainActivity.kt index 4c3a19b83d..3e9bc4cccf 100644 --- a/next-gen-ui/step_05_a/android/app/src/main/kotlin/com/example/next_gen_ui/MainActivity.kt +++ b/next-gen-ui/step_05_a/android/app/src/main/kotlin/com/example/next_gen_ui/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.next_gen_ui import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/next-gen-ui/step_05_a/ios/Runner.xcodeproj/project.pbxproj b/next-gen-ui/step_05_a/ios/Runner.xcodeproj/project.pbxproj index eb46940041..c9b466def7 100644 --- a/next-gen-ui/step_05_a/ios/Runner.xcodeproj/project.pbxproj +++ b/next-gen-ui/step_05_a/ios/Runner.xcodeproj/project.pbxproj @@ -8,14 +8,14 @@ /* Begin PBXBuildFile section */ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; - 169D3664121CF87F073D0A77 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F9634AF0E6C913D83790FF7A /* Pods_Runner.framework */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; - 7AC931060C55621E3547182A /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3ED71ECF4B69535D5D4F0C5B /* Pods_RunnerTests.framework */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; + E4B6A902F6D14A78E4601730 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 564E3EC0EE64AAF5EE8B5941 /* Pods_Runner.framework */; }; + F1B7523DE14C169B3CD558E7 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4F3E3591D7B7868A8A99EA32 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,17 +42,18 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 0BC11639E244F6F00A3FBC85 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 0CA38D1629FEBFED89865F4D /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 2AC5F7C12405D4C68B6BAD53 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 17615AC415DE19BB60A979B0 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 2741050B7D56FDBFFE67179E /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 3A533A391A46BC7EA2175D2C /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 3ED71ECF4B69535D5D4F0C5B /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 5F32ACAE9FD93DBC189064ED /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 47A031DE5979B59758E8AACA /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 4F3E3591D7B7868A8A99EA32 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 564E3EC0EE64AAF5EE8B5941 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 688EC1A2A0BEB2E791FD2419 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 6E858B0A6FA8CE397249AD5E /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; @@ -63,8 +64,7 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - C67944307BF5C92030DB21C4 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - F9634AF0E6C913D83790FF7A /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D7400EA9F19C66395528109D /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -72,47 +72,47 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 169D3664121CF87F073D0A77 /* Pods_Runner.framework in Frameworks */, + E4B6A902F6D14A78E4601730 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - B599F8E01F6C175460757162 /* Frameworks */ = { + C81AED8365D0632E9DAFF2C7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 7AC931060C55621E3547182A /* Pods_RunnerTests.framework in Frameworks */, + F1B7523DE14C169B3CD558E7 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 331C8082294A63A400263BE5 /* RunnerTests */ = { + 2D5CA952BBFCFAA928338DD2 /* Frameworks */ = { isa = PBXGroup; children = ( - 331C807B294A618700263BE5 /* RunnerTests.swift */, + 564E3EC0EE64AAF5EE8B5941 /* Pods_Runner.framework */, + 4F3E3591D7B7868A8A99EA32 /* Pods_RunnerTests.framework */, ); - path = RunnerTests; + name = Frameworks; sourceTree = ""; }; - 388B245E8E1C19CA47EFC235 /* Frameworks */ = { + 331C8082294A63A400263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( - F9634AF0E6C913D83790FF7A /* Pods_Runner.framework */, - 3ED71ECF4B69535D5D4F0C5B /* Pods_RunnerTests.framework */, + 331C807B294A618700263BE5 /* RunnerTests.swift */, ); - name = Frameworks; + path = RunnerTests; sourceTree = ""; }; - 6EE8FB4EC31425D552182803 /* Pods */ = { + 8880B12BB2220BC239B76853 /* Pods */ = { isa = PBXGroup; children = ( - 0BC11639E244F6F00A3FBC85 /* Pods-Runner.debug.xcconfig */, - 0CA38D1629FEBFED89865F4D /* Pods-Runner.release.xcconfig */, - C67944307BF5C92030DB21C4 /* Pods-Runner.profile.xcconfig */, - 3A533A391A46BC7EA2175D2C /* Pods-RunnerTests.debug.xcconfig */, - 2AC5F7C12405D4C68B6BAD53 /* Pods-RunnerTests.release.xcconfig */, - 5F32ACAE9FD93DBC189064ED /* Pods-RunnerTests.profile.xcconfig */, + 2741050B7D56FDBFFE67179E /* Pods-Runner.debug.xcconfig */, + 17615AC415DE19BB60A979B0 /* Pods-Runner.release.xcconfig */, + 47A031DE5979B59758E8AACA /* Pods-Runner.profile.xcconfig */, + 6E858B0A6FA8CE397249AD5E /* Pods-RunnerTests.debug.xcconfig */, + D7400EA9F19C66395528109D /* Pods-RunnerTests.release.xcconfig */, + 688EC1A2A0BEB2E791FD2419 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -136,8 +136,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - 6EE8FB4EC31425D552182803 /* Pods */, - 388B245E8E1C19CA47EFC235 /* Frameworks */, + 8880B12BB2220BC239B76853 /* Pods */, + 2D5CA952BBFCFAA928338DD2 /* Frameworks */, ); sourceTree = ""; }; @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - E69418CD4A4220CBB2521465 /* [CP] Check Pods Manifest.lock */, + CC37335F969F4F531B3DE66E /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - B599F8E01F6C175460757162 /* Frameworks */, + C81AED8365D0632E9DAFF2C7 /* Frameworks */, ); buildRules = ( ); @@ -191,7 +191,7 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - E9619697FAD34A9BB6E8DE31 /* [CP] Check Pods Manifest.lock */, + D7D0FE03D3C103AFEE6FBB57 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, @@ -300,7 +300,7 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - E69418CD4A4220CBB2521465 /* [CP] Check Pods Manifest.lock */ = { + CC37335F969F4F531B3DE66E /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -322,7 +322,7 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - E9619697FAD34A9BB6E8DE31 /* [CP] Check Pods Manifest.lock */ = { + D7D0FE03D3C103AFEE6FBB57 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -469,7 +469,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 3A533A391A46BC7EA2175D2C /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 6E858B0A6FA8CE397249AD5E /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -487,7 +487,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 2AC5F7C12405D4C68B6BAD53 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = D7400EA9F19C66395528109D /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -503,7 +503,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 5F32ACAE9FD93DBC189064ED /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 688EC1A2A0BEB2E791FD2419 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/next-gen-ui/step_05_a/macos/Runner.xcodeproj/project.pbxproj b/next-gen-ui/step_05_a/macos/Runner.xcodeproj/project.pbxproj index 1ed9abfde3..6f1e9dbf6a 100644 --- a/next-gen-ui/step_05_a/macos/Runner.xcodeproj/project.pbxproj +++ b/next-gen-ui/step_05_a/macos/Runner.xcodeproj/project.pbxproj @@ -27,8 +27,8 @@ 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - B8F5B79506013CB116725078 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 76A503B8F3891ED5C81C47B8 /* Pods_RunnerTests.framework */; }; - E51DA10B7307268A92179AD1 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 07EE044A37885A61F17D092E /* Pods_Runner.framework */; }; + 3EC59BF23CE09FFBC71D4F95 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9BAA311AE115BBDDFA7518C4 /* Pods_Runner.framework */; }; + 416A7346011D52C3D6CFDA04 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8D10F6B205F09D6542603E50 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,9 +62,8 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 07EE044A37885A61F17D092E /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 247C85E901FDB571038C9605 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - 2CE7B8C6E450A4A600A67B8A /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 1E12677AA3ECE9C9CBCD58E0 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 2363A83B16D7D8E0AE04E69A /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -81,13 +80,14 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 57FC80673A922C3B3CB305EE /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - 76A503B8F3891ED5C81C47B8 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 4CA0ECC81814306A9E37BBEF /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 563FF228F6F7A8409D35D0A7 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 69AEF7D4F0DBE9AAB0933D96 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 876203A0DFB8A2C5B0D8F399 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 8D10F6B205F09D6542603E50 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - B854B9FFDA0ECA0BE3F7DAA3 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - E8A8B37445EE1D9A1CFF1FF9 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 9BAA311AE115BBDDFA7518C4 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + AB1A0EE9C9F1E1B7A180452F /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - B8F5B79506013CB116725078 /* Pods_RunnerTests.framework in Frameworks */, + 416A7346011D52C3D6CFDA04 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,27 +103,13 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - E51DA10B7307268A92179AD1 /* Pods_Runner.framework in Frameworks */, + 3EC59BF23CE09FFBC71D4F95 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 1658EC80884DF21671E4CC4F /* Pods */ = { - isa = PBXGroup; - children = ( - 876203A0DFB8A2C5B0D8F399 /* Pods-Runner.debug.xcconfig */, - 2CE7B8C6E450A4A600A67B8A /* Pods-Runner.release.xcconfig */, - E8A8B37445EE1D9A1CFF1FF9 /* Pods-Runner.profile.xcconfig */, - B854B9FFDA0ECA0BE3F7DAA3 /* Pods-RunnerTests.debug.xcconfig */, - 247C85E901FDB571038C9605 /* Pods-RunnerTests.release.xcconfig */, - 57FC80673A922C3B3CB305EE /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; 331C80D6294CF71000263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -151,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 1658EC80884DF21671E4CC4F /* Pods */, + 7B5805107A01A0DCE3AEE58D /* Pods */, ); sourceTree = ""; }; @@ -199,11 +185,25 @@ path = Runner; sourceTree = ""; }; + 7B5805107A01A0DCE3AEE58D /* Pods */ = { + isa = PBXGroup; + children = ( + 563FF228F6F7A8409D35D0A7 /* Pods-Runner.debug.xcconfig */, + 69AEF7D4F0DBE9AAB0933D96 /* Pods-Runner.release.xcconfig */, + 1E12677AA3ECE9C9CBCD58E0 /* Pods-Runner.profile.xcconfig */, + 2363A83B16D7D8E0AE04E69A /* Pods-RunnerTests.debug.xcconfig */, + 4CA0ECC81814306A9E37BBEF /* Pods-RunnerTests.release.xcconfig */, + AB1A0EE9C9F1E1B7A180452F /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - 07EE044A37885A61F17D092E /* Pods_Runner.framework */, - 76A503B8F3891ED5C81C47B8 /* Pods_RunnerTests.framework */, + 9BAA311AE115BBDDFA7518C4 /* Pods_Runner.framework */, + 8D10F6B205F09D6542603E50 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - AB635B7056D33FE01A25C627 /* [CP] Check Pods Manifest.lock */, + 58900C32B5DA6E3606417250 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - F0CBBA1C93FC8B16283A43CC /* [CP] Check Pods Manifest.lock */, + 910A7CE209DE8383A0D9EDC7 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - EFA0EBCA56FC67C1CEC93F35 /* [CP] Embed Pods Frameworks */, + 740518C1C8FFA52FA3C3C020 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -361,7 +361,7 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - AB635B7056D33FE01A25C627 /* [CP] Check Pods Manifest.lock */ = { + 58900C32B5DA6E3606417250 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -383,7 +383,7 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - EFA0EBCA56FC67C1CEC93F35 /* [CP] Embed Pods Frameworks */ = { + 740518C1C8FFA52FA3C3C020 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -400,7 +400,7 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - F0CBBA1C93FC8B16283A43CC /* [CP] Check Pods Manifest.lock */ = { + 910A7CE209DE8383A0D9EDC7 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = B854B9FFDA0ECA0BE3F7DAA3 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 2363A83B16D7D8E0AE04E69A /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 247C85E901FDB571038C9605 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 4CA0ECC81814306A9E37BBEF /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 57FC80673A922C3B3CB305EE /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = AB1A0EE9C9F1E1B7A180452F /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/next-gen-ui/step_05_a/macos/Runner/Configs/AppInfo.xcconfig b/next-gen-ui/step_05_a/macos/Runner/Configs/AppInfo.xcconfig index 75cb962401..49197d439f 100644 --- a/next-gen-ui/step_05_a/macos/Runner/Configs/AppInfo.xcconfig +++ b/next-gen-ui/step_05_a/macos/Runner/Configs/AppInfo.xcconfig @@ -11,4 +11,4 @@ PRODUCT_NAME = next_gen_ui PRODUCT_BUNDLE_IDENTIFIER = com.example.nextGenUi // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. diff --git a/next-gen-ui/step_05_a/windows/runner/Runner.rc b/next-gen-ui/step_05_a/windows/runner/Runner.rc index 9818761ddd..64f7731101 100644 --- a/next-gen-ui/step_05_a/windows/runner/Runner.rc +++ b/next-gen-ui/step_05_a/windows/runner/Runner.rc @@ -93,7 +93,7 @@ BEGIN VALUE "FileDescription", "next_gen_ui" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "InternalName", "next_gen_ui" "\0" - VALUE "LegalCopyright", "Copyright (C) 2024 com.example. All rights reserved." "\0" + VALUE "LegalCopyright", "Copyright (C) 2025 com.example. All rights reserved." "\0" VALUE "OriginalFilename", "next_gen_ui.exe" "\0" VALUE "ProductName", "next_gen_ui" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" diff --git a/next-gen-ui/step_05_b/android/app/src/main/kotlin/com/example/next_gen_ui/MainActivity.kt b/next-gen-ui/step_05_b/android/app/src/main/kotlin/com/example/next_gen_ui/MainActivity.kt index 4c3a19b83d..3e9bc4cccf 100644 --- a/next-gen-ui/step_05_b/android/app/src/main/kotlin/com/example/next_gen_ui/MainActivity.kt +++ b/next-gen-ui/step_05_b/android/app/src/main/kotlin/com/example/next_gen_ui/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.next_gen_ui import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/next-gen-ui/step_05_b/ios/Runner.xcodeproj/project.pbxproj b/next-gen-ui/step_05_b/ios/Runner.xcodeproj/project.pbxproj index eb46940041..c9b466def7 100644 --- a/next-gen-ui/step_05_b/ios/Runner.xcodeproj/project.pbxproj +++ b/next-gen-ui/step_05_b/ios/Runner.xcodeproj/project.pbxproj @@ -8,14 +8,14 @@ /* Begin PBXBuildFile section */ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; - 169D3664121CF87F073D0A77 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F9634AF0E6C913D83790FF7A /* Pods_Runner.framework */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; - 7AC931060C55621E3547182A /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3ED71ECF4B69535D5D4F0C5B /* Pods_RunnerTests.framework */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; + E4B6A902F6D14A78E4601730 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 564E3EC0EE64AAF5EE8B5941 /* Pods_Runner.framework */; }; + F1B7523DE14C169B3CD558E7 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4F3E3591D7B7868A8A99EA32 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,17 +42,18 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 0BC11639E244F6F00A3FBC85 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 0CA38D1629FEBFED89865F4D /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 2AC5F7C12405D4C68B6BAD53 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 17615AC415DE19BB60A979B0 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 2741050B7D56FDBFFE67179E /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 3A533A391A46BC7EA2175D2C /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 3ED71ECF4B69535D5D4F0C5B /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 5F32ACAE9FD93DBC189064ED /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 47A031DE5979B59758E8AACA /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 4F3E3591D7B7868A8A99EA32 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 564E3EC0EE64AAF5EE8B5941 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 688EC1A2A0BEB2E791FD2419 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 6E858B0A6FA8CE397249AD5E /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; @@ -63,8 +64,7 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - C67944307BF5C92030DB21C4 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - F9634AF0E6C913D83790FF7A /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D7400EA9F19C66395528109D /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -72,47 +72,47 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 169D3664121CF87F073D0A77 /* Pods_Runner.framework in Frameworks */, + E4B6A902F6D14A78E4601730 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - B599F8E01F6C175460757162 /* Frameworks */ = { + C81AED8365D0632E9DAFF2C7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 7AC931060C55621E3547182A /* Pods_RunnerTests.framework in Frameworks */, + F1B7523DE14C169B3CD558E7 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 331C8082294A63A400263BE5 /* RunnerTests */ = { + 2D5CA952BBFCFAA928338DD2 /* Frameworks */ = { isa = PBXGroup; children = ( - 331C807B294A618700263BE5 /* RunnerTests.swift */, + 564E3EC0EE64AAF5EE8B5941 /* Pods_Runner.framework */, + 4F3E3591D7B7868A8A99EA32 /* Pods_RunnerTests.framework */, ); - path = RunnerTests; + name = Frameworks; sourceTree = ""; }; - 388B245E8E1C19CA47EFC235 /* Frameworks */ = { + 331C8082294A63A400263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( - F9634AF0E6C913D83790FF7A /* Pods_Runner.framework */, - 3ED71ECF4B69535D5D4F0C5B /* Pods_RunnerTests.framework */, + 331C807B294A618700263BE5 /* RunnerTests.swift */, ); - name = Frameworks; + path = RunnerTests; sourceTree = ""; }; - 6EE8FB4EC31425D552182803 /* Pods */ = { + 8880B12BB2220BC239B76853 /* Pods */ = { isa = PBXGroup; children = ( - 0BC11639E244F6F00A3FBC85 /* Pods-Runner.debug.xcconfig */, - 0CA38D1629FEBFED89865F4D /* Pods-Runner.release.xcconfig */, - C67944307BF5C92030DB21C4 /* Pods-Runner.profile.xcconfig */, - 3A533A391A46BC7EA2175D2C /* Pods-RunnerTests.debug.xcconfig */, - 2AC5F7C12405D4C68B6BAD53 /* Pods-RunnerTests.release.xcconfig */, - 5F32ACAE9FD93DBC189064ED /* Pods-RunnerTests.profile.xcconfig */, + 2741050B7D56FDBFFE67179E /* Pods-Runner.debug.xcconfig */, + 17615AC415DE19BB60A979B0 /* Pods-Runner.release.xcconfig */, + 47A031DE5979B59758E8AACA /* Pods-Runner.profile.xcconfig */, + 6E858B0A6FA8CE397249AD5E /* Pods-RunnerTests.debug.xcconfig */, + D7400EA9F19C66395528109D /* Pods-RunnerTests.release.xcconfig */, + 688EC1A2A0BEB2E791FD2419 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -136,8 +136,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - 6EE8FB4EC31425D552182803 /* Pods */, - 388B245E8E1C19CA47EFC235 /* Frameworks */, + 8880B12BB2220BC239B76853 /* Pods */, + 2D5CA952BBFCFAA928338DD2 /* Frameworks */, ); sourceTree = ""; }; @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - E69418CD4A4220CBB2521465 /* [CP] Check Pods Manifest.lock */, + CC37335F969F4F531B3DE66E /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - B599F8E01F6C175460757162 /* Frameworks */, + C81AED8365D0632E9DAFF2C7 /* Frameworks */, ); buildRules = ( ); @@ -191,7 +191,7 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - E9619697FAD34A9BB6E8DE31 /* [CP] Check Pods Manifest.lock */, + D7D0FE03D3C103AFEE6FBB57 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, @@ -300,7 +300,7 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - E69418CD4A4220CBB2521465 /* [CP] Check Pods Manifest.lock */ = { + CC37335F969F4F531B3DE66E /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -322,7 +322,7 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - E9619697FAD34A9BB6E8DE31 /* [CP] Check Pods Manifest.lock */ = { + D7D0FE03D3C103AFEE6FBB57 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -469,7 +469,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 3A533A391A46BC7EA2175D2C /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 6E858B0A6FA8CE397249AD5E /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -487,7 +487,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 2AC5F7C12405D4C68B6BAD53 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = D7400EA9F19C66395528109D /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -503,7 +503,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 5F32ACAE9FD93DBC189064ED /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 688EC1A2A0BEB2E791FD2419 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/next-gen-ui/step_05_b/macos/Runner.xcodeproj/project.pbxproj b/next-gen-ui/step_05_b/macos/Runner.xcodeproj/project.pbxproj index 1ed9abfde3..6f1e9dbf6a 100644 --- a/next-gen-ui/step_05_b/macos/Runner.xcodeproj/project.pbxproj +++ b/next-gen-ui/step_05_b/macos/Runner.xcodeproj/project.pbxproj @@ -27,8 +27,8 @@ 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - B8F5B79506013CB116725078 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 76A503B8F3891ED5C81C47B8 /* Pods_RunnerTests.framework */; }; - E51DA10B7307268A92179AD1 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 07EE044A37885A61F17D092E /* Pods_Runner.framework */; }; + 3EC59BF23CE09FFBC71D4F95 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9BAA311AE115BBDDFA7518C4 /* Pods_Runner.framework */; }; + 416A7346011D52C3D6CFDA04 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8D10F6B205F09D6542603E50 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,9 +62,8 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 07EE044A37885A61F17D092E /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 247C85E901FDB571038C9605 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - 2CE7B8C6E450A4A600A67B8A /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 1E12677AA3ECE9C9CBCD58E0 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 2363A83B16D7D8E0AE04E69A /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -81,13 +80,14 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 57FC80673A922C3B3CB305EE /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - 76A503B8F3891ED5C81C47B8 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 4CA0ECC81814306A9E37BBEF /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 563FF228F6F7A8409D35D0A7 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 69AEF7D4F0DBE9AAB0933D96 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 876203A0DFB8A2C5B0D8F399 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 8D10F6B205F09D6542603E50 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - B854B9FFDA0ECA0BE3F7DAA3 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - E8A8B37445EE1D9A1CFF1FF9 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 9BAA311AE115BBDDFA7518C4 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + AB1A0EE9C9F1E1B7A180452F /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - B8F5B79506013CB116725078 /* Pods_RunnerTests.framework in Frameworks */, + 416A7346011D52C3D6CFDA04 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,27 +103,13 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - E51DA10B7307268A92179AD1 /* Pods_Runner.framework in Frameworks */, + 3EC59BF23CE09FFBC71D4F95 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 1658EC80884DF21671E4CC4F /* Pods */ = { - isa = PBXGroup; - children = ( - 876203A0DFB8A2C5B0D8F399 /* Pods-Runner.debug.xcconfig */, - 2CE7B8C6E450A4A600A67B8A /* Pods-Runner.release.xcconfig */, - E8A8B37445EE1D9A1CFF1FF9 /* Pods-Runner.profile.xcconfig */, - B854B9FFDA0ECA0BE3F7DAA3 /* Pods-RunnerTests.debug.xcconfig */, - 247C85E901FDB571038C9605 /* Pods-RunnerTests.release.xcconfig */, - 57FC80673A922C3B3CB305EE /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; 331C80D6294CF71000263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -151,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 1658EC80884DF21671E4CC4F /* Pods */, + 7B5805107A01A0DCE3AEE58D /* Pods */, ); sourceTree = ""; }; @@ -199,11 +185,25 @@ path = Runner; sourceTree = ""; }; + 7B5805107A01A0DCE3AEE58D /* Pods */ = { + isa = PBXGroup; + children = ( + 563FF228F6F7A8409D35D0A7 /* Pods-Runner.debug.xcconfig */, + 69AEF7D4F0DBE9AAB0933D96 /* Pods-Runner.release.xcconfig */, + 1E12677AA3ECE9C9CBCD58E0 /* Pods-Runner.profile.xcconfig */, + 2363A83B16D7D8E0AE04E69A /* Pods-RunnerTests.debug.xcconfig */, + 4CA0ECC81814306A9E37BBEF /* Pods-RunnerTests.release.xcconfig */, + AB1A0EE9C9F1E1B7A180452F /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - 07EE044A37885A61F17D092E /* Pods_Runner.framework */, - 76A503B8F3891ED5C81C47B8 /* Pods_RunnerTests.framework */, + 9BAA311AE115BBDDFA7518C4 /* Pods_Runner.framework */, + 8D10F6B205F09D6542603E50 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - AB635B7056D33FE01A25C627 /* [CP] Check Pods Manifest.lock */, + 58900C32B5DA6E3606417250 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - F0CBBA1C93FC8B16283A43CC /* [CP] Check Pods Manifest.lock */, + 910A7CE209DE8383A0D9EDC7 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - EFA0EBCA56FC67C1CEC93F35 /* [CP] Embed Pods Frameworks */, + 740518C1C8FFA52FA3C3C020 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -361,7 +361,7 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - AB635B7056D33FE01A25C627 /* [CP] Check Pods Manifest.lock */ = { + 58900C32B5DA6E3606417250 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -383,7 +383,7 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - EFA0EBCA56FC67C1CEC93F35 /* [CP] Embed Pods Frameworks */ = { + 740518C1C8FFA52FA3C3C020 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -400,7 +400,7 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - F0CBBA1C93FC8B16283A43CC /* [CP] Check Pods Manifest.lock */ = { + 910A7CE209DE8383A0D9EDC7 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = B854B9FFDA0ECA0BE3F7DAA3 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 2363A83B16D7D8E0AE04E69A /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 247C85E901FDB571038C9605 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 4CA0ECC81814306A9E37BBEF /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 57FC80673A922C3B3CB305EE /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = AB1A0EE9C9F1E1B7A180452F /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/next-gen-ui/step_05_b/macos/Runner/Configs/AppInfo.xcconfig b/next-gen-ui/step_05_b/macos/Runner/Configs/AppInfo.xcconfig index 75cb962401..49197d439f 100644 --- a/next-gen-ui/step_05_b/macos/Runner/Configs/AppInfo.xcconfig +++ b/next-gen-ui/step_05_b/macos/Runner/Configs/AppInfo.xcconfig @@ -11,4 +11,4 @@ PRODUCT_NAME = next_gen_ui PRODUCT_BUNDLE_IDENTIFIER = com.example.nextGenUi // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. diff --git a/next-gen-ui/step_05_b/windows/runner/Runner.rc b/next-gen-ui/step_05_b/windows/runner/Runner.rc index 9818761ddd..64f7731101 100644 --- a/next-gen-ui/step_05_b/windows/runner/Runner.rc +++ b/next-gen-ui/step_05_b/windows/runner/Runner.rc @@ -93,7 +93,7 @@ BEGIN VALUE "FileDescription", "next_gen_ui" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "InternalName", "next_gen_ui" "\0" - VALUE "LegalCopyright", "Copyright (C) 2024 com.example. All rights reserved." "\0" + VALUE "LegalCopyright", "Copyright (C) 2025 com.example. All rights reserved." "\0" VALUE "OriginalFilename", "next_gen_ui.exe" "\0" VALUE "ProductName", "next_gen_ui" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" diff --git a/next-gen-ui/step_06/android/app/src/main/kotlin/com/example/next_gen_ui/MainActivity.kt b/next-gen-ui/step_06/android/app/src/main/kotlin/com/example/next_gen_ui/MainActivity.kt index 4c3a19b83d..3e9bc4cccf 100644 --- a/next-gen-ui/step_06/android/app/src/main/kotlin/com/example/next_gen_ui/MainActivity.kt +++ b/next-gen-ui/step_06/android/app/src/main/kotlin/com/example/next_gen_ui/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.next_gen_ui import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/next-gen-ui/step_06/ios/Runner.xcodeproj/project.pbxproj b/next-gen-ui/step_06/ios/Runner.xcodeproj/project.pbxproj index eb46940041..c9b466def7 100644 --- a/next-gen-ui/step_06/ios/Runner.xcodeproj/project.pbxproj +++ b/next-gen-ui/step_06/ios/Runner.xcodeproj/project.pbxproj @@ -8,14 +8,14 @@ /* Begin PBXBuildFile section */ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; - 169D3664121CF87F073D0A77 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F9634AF0E6C913D83790FF7A /* Pods_Runner.framework */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; - 7AC931060C55621E3547182A /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3ED71ECF4B69535D5D4F0C5B /* Pods_RunnerTests.framework */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; + E4B6A902F6D14A78E4601730 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 564E3EC0EE64AAF5EE8B5941 /* Pods_Runner.framework */; }; + F1B7523DE14C169B3CD558E7 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4F3E3591D7B7868A8A99EA32 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,17 +42,18 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 0BC11639E244F6F00A3FBC85 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 0CA38D1629FEBFED89865F4D /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 2AC5F7C12405D4C68B6BAD53 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 17615AC415DE19BB60A979B0 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 2741050B7D56FDBFFE67179E /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 3A533A391A46BC7EA2175D2C /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 3ED71ECF4B69535D5D4F0C5B /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 5F32ACAE9FD93DBC189064ED /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 47A031DE5979B59758E8AACA /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 4F3E3591D7B7868A8A99EA32 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 564E3EC0EE64AAF5EE8B5941 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 688EC1A2A0BEB2E791FD2419 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 6E858B0A6FA8CE397249AD5E /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; @@ -63,8 +64,7 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - C67944307BF5C92030DB21C4 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - F9634AF0E6C913D83790FF7A /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D7400EA9F19C66395528109D /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -72,47 +72,47 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 169D3664121CF87F073D0A77 /* Pods_Runner.framework in Frameworks */, + E4B6A902F6D14A78E4601730 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - B599F8E01F6C175460757162 /* Frameworks */ = { + C81AED8365D0632E9DAFF2C7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 7AC931060C55621E3547182A /* Pods_RunnerTests.framework in Frameworks */, + F1B7523DE14C169B3CD558E7 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 331C8082294A63A400263BE5 /* RunnerTests */ = { + 2D5CA952BBFCFAA928338DD2 /* Frameworks */ = { isa = PBXGroup; children = ( - 331C807B294A618700263BE5 /* RunnerTests.swift */, + 564E3EC0EE64AAF5EE8B5941 /* Pods_Runner.framework */, + 4F3E3591D7B7868A8A99EA32 /* Pods_RunnerTests.framework */, ); - path = RunnerTests; + name = Frameworks; sourceTree = ""; }; - 388B245E8E1C19CA47EFC235 /* Frameworks */ = { + 331C8082294A63A400263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( - F9634AF0E6C913D83790FF7A /* Pods_Runner.framework */, - 3ED71ECF4B69535D5D4F0C5B /* Pods_RunnerTests.framework */, + 331C807B294A618700263BE5 /* RunnerTests.swift */, ); - name = Frameworks; + path = RunnerTests; sourceTree = ""; }; - 6EE8FB4EC31425D552182803 /* Pods */ = { + 8880B12BB2220BC239B76853 /* Pods */ = { isa = PBXGroup; children = ( - 0BC11639E244F6F00A3FBC85 /* Pods-Runner.debug.xcconfig */, - 0CA38D1629FEBFED89865F4D /* Pods-Runner.release.xcconfig */, - C67944307BF5C92030DB21C4 /* Pods-Runner.profile.xcconfig */, - 3A533A391A46BC7EA2175D2C /* Pods-RunnerTests.debug.xcconfig */, - 2AC5F7C12405D4C68B6BAD53 /* Pods-RunnerTests.release.xcconfig */, - 5F32ACAE9FD93DBC189064ED /* Pods-RunnerTests.profile.xcconfig */, + 2741050B7D56FDBFFE67179E /* Pods-Runner.debug.xcconfig */, + 17615AC415DE19BB60A979B0 /* Pods-Runner.release.xcconfig */, + 47A031DE5979B59758E8AACA /* Pods-Runner.profile.xcconfig */, + 6E858B0A6FA8CE397249AD5E /* Pods-RunnerTests.debug.xcconfig */, + D7400EA9F19C66395528109D /* Pods-RunnerTests.release.xcconfig */, + 688EC1A2A0BEB2E791FD2419 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -136,8 +136,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - 6EE8FB4EC31425D552182803 /* Pods */, - 388B245E8E1C19CA47EFC235 /* Frameworks */, + 8880B12BB2220BC239B76853 /* Pods */, + 2D5CA952BBFCFAA928338DD2 /* Frameworks */, ); sourceTree = ""; }; @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - E69418CD4A4220CBB2521465 /* [CP] Check Pods Manifest.lock */, + CC37335F969F4F531B3DE66E /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - B599F8E01F6C175460757162 /* Frameworks */, + C81AED8365D0632E9DAFF2C7 /* Frameworks */, ); buildRules = ( ); @@ -191,7 +191,7 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - E9619697FAD34A9BB6E8DE31 /* [CP] Check Pods Manifest.lock */, + D7D0FE03D3C103AFEE6FBB57 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, @@ -300,7 +300,7 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - E69418CD4A4220CBB2521465 /* [CP] Check Pods Manifest.lock */ = { + CC37335F969F4F531B3DE66E /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -322,7 +322,7 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - E9619697FAD34A9BB6E8DE31 /* [CP] Check Pods Manifest.lock */ = { + D7D0FE03D3C103AFEE6FBB57 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -469,7 +469,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 3A533A391A46BC7EA2175D2C /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 6E858B0A6FA8CE397249AD5E /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -487,7 +487,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 2AC5F7C12405D4C68B6BAD53 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = D7400EA9F19C66395528109D /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -503,7 +503,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 5F32ACAE9FD93DBC189064ED /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 688EC1A2A0BEB2E791FD2419 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/next-gen-ui/step_06/macos/Runner.xcodeproj/project.pbxproj b/next-gen-ui/step_06/macos/Runner.xcodeproj/project.pbxproj index 1ed9abfde3..6f1e9dbf6a 100644 --- a/next-gen-ui/step_06/macos/Runner.xcodeproj/project.pbxproj +++ b/next-gen-ui/step_06/macos/Runner.xcodeproj/project.pbxproj @@ -27,8 +27,8 @@ 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - B8F5B79506013CB116725078 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 76A503B8F3891ED5C81C47B8 /* Pods_RunnerTests.framework */; }; - E51DA10B7307268A92179AD1 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 07EE044A37885A61F17D092E /* Pods_Runner.framework */; }; + 3EC59BF23CE09FFBC71D4F95 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9BAA311AE115BBDDFA7518C4 /* Pods_Runner.framework */; }; + 416A7346011D52C3D6CFDA04 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8D10F6B205F09D6542603E50 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,9 +62,8 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 07EE044A37885A61F17D092E /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 247C85E901FDB571038C9605 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - 2CE7B8C6E450A4A600A67B8A /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 1E12677AA3ECE9C9CBCD58E0 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 2363A83B16D7D8E0AE04E69A /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -81,13 +80,14 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 57FC80673A922C3B3CB305EE /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - 76A503B8F3891ED5C81C47B8 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 4CA0ECC81814306A9E37BBEF /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 563FF228F6F7A8409D35D0A7 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 69AEF7D4F0DBE9AAB0933D96 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 876203A0DFB8A2C5B0D8F399 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 8D10F6B205F09D6542603E50 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - B854B9FFDA0ECA0BE3F7DAA3 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - E8A8B37445EE1D9A1CFF1FF9 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 9BAA311AE115BBDDFA7518C4 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + AB1A0EE9C9F1E1B7A180452F /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - B8F5B79506013CB116725078 /* Pods_RunnerTests.framework in Frameworks */, + 416A7346011D52C3D6CFDA04 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,27 +103,13 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - E51DA10B7307268A92179AD1 /* Pods_Runner.framework in Frameworks */, + 3EC59BF23CE09FFBC71D4F95 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 1658EC80884DF21671E4CC4F /* Pods */ = { - isa = PBXGroup; - children = ( - 876203A0DFB8A2C5B0D8F399 /* Pods-Runner.debug.xcconfig */, - 2CE7B8C6E450A4A600A67B8A /* Pods-Runner.release.xcconfig */, - E8A8B37445EE1D9A1CFF1FF9 /* Pods-Runner.profile.xcconfig */, - B854B9FFDA0ECA0BE3F7DAA3 /* Pods-RunnerTests.debug.xcconfig */, - 247C85E901FDB571038C9605 /* Pods-RunnerTests.release.xcconfig */, - 57FC80673A922C3B3CB305EE /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; 331C80D6294CF71000263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -151,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 1658EC80884DF21671E4CC4F /* Pods */, + 7B5805107A01A0DCE3AEE58D /* Pods */, ); sourceTree = ""; }; @@ -199,11 +185,25 @@ path = Runner; sourceTree = ""; }; + 7B5805107A01A0DCE3AEE58D /* Pods */ = { + isa = PBXGroup; + children = ( + 563FF228F6F7A8409D35D0A7 /* Pods-Runner.debug.xcconfig */, + 69AEF7D4F0DBE9AAB0933D96 /* Pods-Runner.release.xcconfig */, + 1E12677AA3ECE9C9CBCD58E0 /* Pods-Runner.profile.xcconfig */, + 2363A83B16D7D8E0AE04E69A /* Pods-RunnerTests.debug.xcconfig */, + 4CA0ECC81814306A9E37BBEF /* Pods-RunnerTests.release.xcconfig */, + AB1A0EE9C9F1E1B7A180452F /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - 07EE044A37885A61F17D092E /* Pods_Runner.framework */, - 76A503B8F3891ED5C81C47B8 /* Pods_RunnerTests.framework */, + 9BAA311AE115BBDDFA7518C4 /* Pods_Runner.framework */, + 8D10F6B205F09D6542603E50 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - AB635B7056D33FE01A25C627 /* [CP] Check Pods Manifest.lock */, + 58900C32B5DA6E3606417250 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - F0CBBA1C93FC8B16283A43CC /* [CP] Check Pods Manifest.lock */, + 910A7CE209DE8383A0D9EDC7 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - EFA0EBCA56FC67C1CEC93F35 /* [CP] Embed Pods Frameworks */, + 740518C1C8FFA52FA3C3C020 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -361,7 +361,7 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - AB635B7056D33FE01A25C627 /* [CP] Check Pods Manifest.lock */ = { + 58900C32B5DA6E3606417250 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -383,7 +383,7 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - EFA0EBCA56FC67C1CEC93F35 /* [CP] Embed Pods Frameworks */ = { + 740518C1C8FFA52FA3C3C020 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -400,7 +400,7 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - F0CBBA1C93FC8B16283A43CC /* [CP] Check Pods Manifest.lock */ = { + 910A7CE209DE8383A0D9EDC7 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = B854B9FFDA0ECA0BE3F7DAA3 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 2363A83B16D7D8E0AE04E69A /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 247C85E901FDB571038C9605 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 4CA0ECC81814306A9E37BBEF /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 57FC80673A922C3B3CB305EE /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = AB1A0EE9C9F1E1B7A180452F /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/next-gen-ui/step_06/macos/Runner/Configs/AppInfo.xcconfig b/next-gen-ui/step_06/macos/Runner/Configs/AppInfo.xcconfig index 75cb962401..49197d439f 100644 --- a/next-gen-ui/step_06/macos/Runner/Configs/AppInfo.xcconfig +++ b/next-gen-ui/step_06/macos/Runner/Configs/AppInfo.xcconfig @@ -11,4 +11,4 @@ PRODUCT_NAME = next_gen_ui PRODUCT_BUNDLE_IDENTIFIER = com.example.nextGenUi // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. diff --git a/next-gen-ui/step_06/windows/runner/Runner.rc b/next-gen-ui/step_06/windows/runner/Runner.rc index 9818761ddd..64f7731101 100644 --- a/next-gen-ui/step_06/windows/runner/Runner.rc +++ b/next-gen-ui/step_06/windows/runner/Runner.rc @@ -93,7 +93,7 @@ BEGIN VALUE "FileDescription", "next_gen_ui" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "InternalName", "next_gen_ui" "\0" - VALUE "LegalCopyright", "Copyright (C) 2024 com.example. All rights reserved." "\0" + VALUE "LegalCopyright", "Copyright (C) 2025 com.example. All rights reserved." "\0" VALUE "OriginalFilename", "next_gen_ui.exe" "\0" VALUE "ProductName", "next_gen_ui" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" From 6957a9a9489ae5b1da65af49cfc3a9c3a2066de6 Mon Sep 17 00:00:00 2001 From: Brett Morgan Date: Wed, 22 Jan 2025 15:18:30 +1100 Subject: [PATCH 107/108] Update `testing_codelab` --- .../com/example/testing_app/MainActivity.kt | 2 +- .../macos/Runner/Configs/AppInfo.xcconfig | 2 +- testing_codelab/step_03/pubspec.yaml | 2 +- .../step_03/windows/runner/Runner.rc | 2 +- .../com/example/testing_app/MainActivity.kt | 2 +- .../macos/Runner/Configs/AppInfo.xcconfig | 2 +- testing_codelab/step_04/pubspec.yaml | 2 +- .../step_04/windows/runner/Runner.rc | 2 +- .../com/example/testing_app/MainActivity.kt | 2 +- .../macos/Runner/Configs/AppInfo.xcconfig | 2 +- testing_codelab/step_05/pubspec.yaml | 2 +- .../step_05/windows/runner/Runner.rc | 2 +- .../com/example/testing_app/MainActivity.kt | 2 +- .../macos/Runner/Configs/AppInfo.xcconfig | 2 +- testing_codelab/step_06/pubspec.yaml | 2 +- .../step_06/windows/runner/Runner.rc | 2 +- .../com/example/testing_app/MainActivity.kt | 2 +- .../macos/Runner.xcodeproj/project.pbxproj | 100 +++++++++--------- .../macos/Runner/Configs/AppInfo.xcconfig | 2 +- testing_codelab/step_07/pubspec.yaml | 2 +- .../step_07/windows/runner/Runner.rc | 2 +- .../com/example/testing_app/MainActivity.kt | 2 +- .../macos/Runner.xcodeproj/project.pbxproj | 100 +++++++++--------- .../macos/Runner/Configs/AppInfo.xcconfig | 2 +- testing_codelab/step_08/pubspec.yaml | 2 +- .../step_08/windows/runner/Runner.rc | 2 +- 26 files changed, 124 insertions(+), 124 deletions(-) diff --git a/testing_codelab/step_03/android/app/src/main/kotlin/com/example/testing_app/MainActivity.kt b/testing_codelab/step_03/android/app/src/main/kotlin/com/example/testing_app/MainActivity.kt index c077d2270d..337e691391 100644 --- a/testing_codelab/step_03/android/app/src/main/kotlin/com/example/testing_app/MainActivity.kt +++ b/testing_codelab/step_03/android/app/src/main/kotlin/com/example/testing_app/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.testing_app import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/testing_codelab/step_03/macos/Runner/Configs/AppInfo.xcconfig b/testing_codelab/step_03/macos/Runner/Configs/AppInfo.xcconfig index e4a24b4ad4..3e00195667 100644 --- a/testing_codelab/step_03/macos/Runner/Configs/AppInfo.xcconfig +++ b/testing_codelab/step_03/macos/Runner/Configs/AppInfo.xcconfig @@ -11,4 +11,4 @@ PRODUCT_NAME = testing_app PRODUCT_BUNDLE_IDENTIFIER = com.example.testingApp // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. diff --git a/testing_codelab/step_03/pubspec.yaml b/testing_codelab/step_03/pubspec.yaml index 0c0cdfcd83..197e1abae4 100644 --- a/testing_codelab/step_03/pubspec.yaml +++ b/testing_codelab/step_03/pubspec.yaml @@ -13,7 +13,7 @@ environment: dependencies: flutter: sdk: flutter - go_router: ^14.6.2 + go_router: ^14.6.3 provider: ^6.1.2 dev_dependencies: diff --git a/testing_codelab/step_03/windows/runner/Runner.rc b/testing_codelab/step_03/windows/runner/Runner.rc index af63e77698..2c471b89d2 100644 --- a/testing_codelab/step_03/windows/runner/Runner.rc +++ b/testing_codelab/step_03/windows/runner/Runner.rc @@ -93,7 +93,7 @@ BEGIN VALUE "FileDescription", "testing_app" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "InternalName", "testing_app" "\0" - VALUE "LegalCopyright", "Copyright (C) 2024 com.example. All rights reserved." "\0" + VALUE "LegalCopyright", "Copyright (C) 2025 com.example. All rights reserved." "\0" VALUE "OriginalFilename", "testing_app.exe" "\0" VALUE "ProductName", "testing_app" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" diff --git a/testing_codelab/step_04/android/app/src/main/kotlin/com/example/testing_app/MainActivity.kt b/testing_codelab/step_04/android/app/src/main/kotlin/com/example/testing_app/MainActivity.kt index c077d2270d..337e691391 100644 --- a/testing_codelab/step_04/android/app/src/main/kotlin/com/example/testing_app/MainActivity.kt +++ b/testing_codelab/step_04/android/app/src/main/kotlin/com/example/testing_app/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.testing_app import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/testing_codelab/step_04/macos/Runner/Configs/AppInfo.xcconfig b/testing_codelab/step_04/macos/Runner/Configs/AppInfo.xcconfig index e4a24b4ad4..3e00195667 100644 --- a/testing_codelab/step_04/macos/Runner/Configs/AppInfo.xcconfig +++ b/testing_codelab/step_04/macos/Runner/Configs/AppInfo.xcconfig @@ -11,4 +11,4 @@ PRODUCT_NAME = testing_app PRODUCT_BUNDLE_IDENTIFIER = com.example.testingApp // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. diff --git a/testing_codelab/step_04/pubspec.yaml b/testing_codelab/step_04/pubspec.yaml index 0c0cdfcd83..197e1abae4 100644 --- a/testing_codelab/step_04/pubspec.yaml +++ b/testing_codelab/step_04/pubspec.yaml @@ -13,7 +13,7 @@ environment: dependencies: flutter: sdk: flutter - go_router: ^14.6.2 + go_router: ^14.6.3 provider: ^6.1.2 dev_dependencies: diff --git a/testing_codelab/step_04/windows/runner/Runner.rc b/testing_codelab/step_04/windows/runner/Runner.rc index af63e77698..2c471b89d2 100644 --- a/testing_codelab/step_04/windows/runner/Runner.rc +++ b/testing_codelab/step_04/windows/runner/Runner.rc @@ -93,7 +93,7 @@ BEGIN VALUE "FileDescription", "testing_app" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "InternalName", "testing_app" "\0" - VALUE "LegalCopyright", "Copyright (C) 2024 com.example. All rights reserved." "\0" + VALUE "LegalCopyright", "Copyright (C) 2025 com.example. All rights reserved." "\0" VALUE "OriginalFilename", "testing_app.exe" "\0" VALUE "ProductName", "testing_app" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" diff --git a/testing_codelab/step_05/android/app/src/main/kotlin/com/example/testing_app/MainActivity.kt b/testing_codelab/step_05/android/app/src/main/kotlin/com/example/testing_app/MainActivity.kt index c077d2270d..337e691391 100644 --- a/testing_codelab/step_05/android/app/src/main/kotlin/com/example/testing_app/MainActivity.kt +++ b/testing_codelab/step_05/android/app/src/main/kotlin/com/example/testing_app/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.testing_app import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/testing_codelab/step_05/macos/Runner/Configs/AppInfo.xcconfig b/testing_codelab/step_05/macos/Runner/Configs/AppInfo.xcconfig index e4a24b4ad4..3e00195667 100644 --- a/testing_codelab/step_05/macos/Runner/Configs/AppInfo.xcconfig +++ b/testing_codelab/step_05/macos/Runner/Configs/AppInfo.xcconfig @@ -11,4 +11,4 @@ PRODUCT_NAME = testing_app PRODUCT_BUNDLE_IDENTIFIER = com.example.testingApp // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. diff --git a/testing_codelab/step_05/pubspec.yaml b/testing_codelab/step_05/pubspec.yaml index 0c0cdfcd83..197e1abae4 100644 --- a/testing_codelab/step_05/pubspec.yaml +++ b/testing_codelab/step_05/pubspec.yaml @@ -13,7 +13,7 @@ environment: dependencies: flutter: sdk: flutter - go_router: ^14.6.2 + go_router: ^14.6.3 provider: ^6.1.2 dev_dependencies: diff --git a/testing_codelab/step_05/windows/runner/Runner.rc b/testing_codelab/step_05/windows/runner/Runner.rc index af63e77698..2c471b89d2 100644 --- a/testing_codelab/step_05/windows/runner/Runner.rc +++ b/testing_codelab/step_05/windows/runner/Runner.rc @@ -93,7 +93,7 @@ BEGIN VALUE "FileDescription", "testing_app" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "InternalName", "testing_app" "\0" - VALUE "LegalCopyright", "Copyright (C) 2024 com.example. All rights reserved." "\0" + VALUE "LegalCopyright", "Copyright (C) 2025 com.example. All rights reserved." "\0" VALUE "OriginalFilename", "testing_app.exe" "\0" VALUE "ProductName", "testing_app" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" diff --git a/testing_codelab/step_06/android/app/src/main/kotlin/com/example/testing_app/MainActivity.kt b/testing_codelab/step_06/android/app/src/main/kotlin/com/example/testing_app/MainActivity.kt index c077d2270d..337e691391 100644 --- a/testing_codelab/step_06/android/app/src/main/kotlin/com/example/testing_app/MainActivity.kt +++ b/testing_codelab/step_06/android/app/src/main/kotlin/com/example/testing_app/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.testing_app import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/testing_codelab/step_06/macos/Runner/Configs/AppInfo.xcconfig b/testing_codelab/step_06/macos/Runner/Configs/AppInfo.xcconfig index e4a24b4ad4..3e00195667 100644 --- a/testing_codelab/step_06/macos/Runner/Configs/AppInfo.xcconfig +++ b/testing_codelab/step_06/macos/Runner/Configs/AppInfo.xcconfig @@ -11,4 +11,4 @@ PRODUCT_NAME = testing_app PRODUCT_BUNDLE_IDENTIFIER = com.example.testingApp // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. diff --git a/testing_codelab/step_06/pubspec.yaml b/testing_codelab/step_06/pubspec.yaml index 0c0cdfcd83..197e1abae4 100644 --- a/testing_codelab/step_06/pubspec.yaml +++ b/testing_codelab/step_06/pubspec.yaml @@ -13,7 +13,7 @@ environment: dependencies: flutter: sdk: flutter - go_router: ^14.6.2 + go_router: ^14.6.3 provider: ^6.1.2 dev_dependencies: diff --git a/testing_codelab/step_06/windows/runner/Runner.rc b/testing_codelab/step_06/windows/runner/Runner.rc index af63e77698..2c471b89d2 100644 --- a/testing_codelab/step_06/windows/runner/Runner.rc +++ b/testing_codelab/step_06/windows/runner/Runner.rc @@ -93,7 +93,7 @@ BEGIN VALUE "FileDescription", "testing_app" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "InternalName", "testing_app" "\0" - VALUE "LegalCopyright", "Copyright (C) 2024 com.example. All rights reserved." "\0" + VALUE "LegalCopyright", "Copyright (C) 2025 com.example. All rights reserved." "\0" VALUE "OriginalFilename", "testing_app.exe" "\0" VALUE "ProductName", "testing_app" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" diff --git a/testing_codelab/step_07/android/app/src/main/kotlin/com/example/testing_app/MainActivity.kt b/testing_codelab/step_07/android/app/src/main/kotlin/com/example/testing_app/MainActivity.kt index c077d2270d..337e691391 100644 --- a/testing_codelab/step_07/android/app/src/main/kotlin/com/example/testing_app/MainActivity.kt +++ b/testing_codelab/step_07/android/app/src/main/kotlin/com/example/testing_app/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.testing_app import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/testing_codelab/step_07/macos/Runner.xcodeproj/project.pbxproj b/testing_codelab/step_07/macos/Runner.xcodeproj/project.pbxproj index f73c8dd134..137bdf0759 100644 --- a/testing_codelab/step_07/macos/Runner.xcodeproj/project.pbxproj +++ b/testing_codelab/step_07/macos/Runner.xcodeproj/project.pbxproj @@ -27,8 +27,8 @@ 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 539525273044823767A9A46E /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AA76D1F27BDEBC04894B3B33 /* Pods_Runner.framework */; }; - A84D3E0F2420E0F7F514AA49 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9BD83233D1C91D176C75542E /* Pods_RunnerTests.framework */; }; + D5E8CDC2408FA0B89BA689B9 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 95E094EE4442E09EC399A6E3 /* Pods_RunnerTests.framework */; }; + F90806EA5FA45FE9FFD11185 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 19C2F8CF7766A4C5C9D7431C /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,7 +62,8 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 0D650ADEC29547202904423B /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 19C2F8CF7766A4C5C9D7431C /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 21625DF45E40D23105A730A5 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -79,15 +80,14 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 5BEEE7BF22B079F818CB7393 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 4F17684C0CAD5A8617126723 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 60EA304C2DA542BE9F35EBDB /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 65C28DCB0ED5C988B90B02CB /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 6A2DCA96FA3D8CBA992C9888 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 79A8A18A3B88F9180343E433 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 8829CF80157AC21502A4CE4A /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 95E094EE4442E09EC399A6E3 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - 9BD83233D1C91D176C75542E /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - A3AB83E6041C9E6D984B6F68 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - AA76D1F27BDEBC04894B3B33 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - AC5A9CC099FE904C08B8BE73 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - F4C5A3181D5D771A57141990 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - A84D3E0F2420E0F7F514AA49 /* Pods_RunnerTests.framework in Frameworks */, + D5E8CDC2408FA0B89BA689B9 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,27 +103,13 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 539525273044823767A9A46E /* Pods_Runner.framework in Frameworks */, + F90806EA5FA45FE9FFD11185 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 27AE5769DE8D55C1AF8FAE7D /* Pods */ = { - isa = PBXGroup; - children = ( - 5BEEE7BF22B079F818CB7393 /* Pods-Runner.debug.xcconfig */, - 0D650ADEC29547202904423B /* Pods-Runner.release.xcconfig */, - A3AB83E6041C9E6D984B6F68 /* Pods-Runner.profile.xcconfig */, - AC5A9CC099FE904C08B8BE73 /* Pods-RunnerTests.debug.xcconfig */, - F4C5A3181D5D771A57141990 /* Pods-RunnerTests.release.xcconfig */, - 8829CF80157AC21502A4CE4A /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; 331C80D6294CF71000263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -151,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 27AE5769DE8D55C1AF8FAE7D /* Pods */, + EFB421ED222D4A877FC2743D /* Pods */, ); sourceTree = ""; }; @@ -202,12 +188,26 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - AA76D1F27BDEBC04894B3B33 /* Pods_Runner.framework */, - 9BD83233D1C91D176C75542E /* Pods_RunnerTests.framework */, + 19C2F8CF7766A4C5C9D7431C /* Pods_Runner.framework */, + 95E094EE4442E09EC399A6E3 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; }; + EFB421ED222D4A877FC2743D /* Pods */ = { + isa = PBXGroup; + children = ( + 21625DF45E40D23105A730A5 /* Pods-Runner.debug.xcconfig */, + 4F17684C0CAD5A8617126723 /* Pods-Runner.release.xcconfig */, + 79A8A18A3B88F9180343E433 /* Pods-Runner.profile.xcconfig */, + 65C28DCB0ED5C988B90B02CB /* Pods-RunnerTests.debug.xcconfig */, + 6A2DCA96FA3D8CBA992C9888 /* Pods-RunnerTests.release.xcconfig */, + 60EA304C2DA542BE9F35EBDB /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - CBFF4ED3B408D30DE0516954 /* [CP] Check Pods Manifest.lock */, + E53FD481A79A158F51E3C4EA /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,7 +234,7 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 111262507BD47C2569DD8957 /* [CP] Check Pods Manifest.lock */, + A08533527F9318607696B63F /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, @@ -322,67 +322,67 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 111262507BD47C2569DD8957 /* [CP] Check Pods Manifest.lock */ = { + 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", ); - name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; }; - 3399D490228B24CF009A79C7 /* ShellScript */ = { + 33CC111E2044C6BF0003C045 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + Flutter/ephemeral/FlutterInputs.xcfilelist, ); inputPaths = ( + Flutter/ephemeral/tripwire, ); outputFileListPaths = ( + Flutter/ephemeral/FlutterOutputs.xcfilelist, ); outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; + shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 33CC111E2044C6BF0003C045 /* ShellScript */ = { + A08533527F9318607696B63F /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - Flutter/ephemeral/FlutterInputs.xcfilelist, ); inputPaths = ( - Flutter/ephemeral/tripwire, + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - Flutter/ephemeral/FlutterOutputs.xcfilelist, ); outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - CBFF4ED3B408D30DE0516954 /* [CP] Check Pods Manifest.lock */ = { + E53FD481A79A158F51E3C4EA /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -455,7 +455,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = AC5A9CC099FE904C08B8BE73 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 65C28DCB0ED5C988B90B02CB /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -470,7 +470,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = F4C5A3181D5D771A57141990 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 6A2DCA96FA3D8CBA992C9888 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -485,7 +485,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 8829CF80157AC21502A4CE4A /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 60EA304C2DA542BE9F35EBDB /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/testing_codelab/step_07/macos/Runner/Configs/AppInfo.xcconfig b/testing_codelab/step_07/macos/Runner/Configs/AppInfo.xcconfig index e4a24b4ad4..3e00195667 100644 --- a/testing_codelab/step_07/macos/Runner/Configs/AppInfo.xcconfig +++ b/testing_codelab/step_07/macos/Runner/Configs/AppInfo.xcconfig @@ -11,4 +11,4 @@ PRODUCT_NAME = testing_app PRODUCT_BUNDLE_IDENTIFIER = com.example.testingApp // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. diff --git a/testing_codelab/step_07/pubspec.yaml b/testing_codelab/step_07/pubspec.yaml index 0c0cdfcd83..197e1abae4 100644 --- a/testing_codelab/step_07/pubspec.yaml +++ b/testing_codelab/step_07/pubspec.yaml @@ -13,7 +13,7 @@ environment: dependencies: flutter: sdk: flutter - go_router: ^14.6.2 + go_router: ^14.6.3 provider: ^6.1.2 dev_dependencies: diff --git a/testing_codelab/step_07/windows/runner/Runner.rc b/testing_codelab/step_07/windows/runner/Runner.rc index af63e77698..2c471b89d2 100644 --- a/testing_codelab/step_07/windows/runner/Runner.rc +++ b/testing_codelab/step_07/windows/runner/Runner.rc @@ -93,7 +93,7 @@ BEGIN VALUE "FileDescription", "testing_app" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "InternalName", "testing_app" "\0" - VALUE "LegalCopyright", "Copyright (C) 2024 com.example. All rights reserved." "\0" + VALUE "LegalCopyright", "Copyright (C) 2025 com.example. All rights reserved." "\0" VALUE "OriginalFilename", "testing_app.exe" "\0" VALUE "ProductName", "testing_app" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" diff --git a/testing_codelab/step_08/android/app/src/main/kotlin/com/example/testing_app/MainActivity.kt b/testing_codelab/step_08/android/app/src/main/kotlin/com/example/testing_app/MainActivity.kt index c077d2270d..337e691391 100644 --- a/testing_codelab/step_08/android/app/src/main/kotlin/com/example/testing_app/MainActivity.kt +++ b/testing_codelab/step_08/android/app/src/main/kotlin/com/example/testing_app/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.testing_app import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/testing_codelab/step_08/macos/Runner.xcodeproj/project.pbxproj b/testing_codelab/step_08/macos/Runner.xcodeproj/project.pbxproj index f73c8dd134..137bdf0759 100644 --- a/testing_codelab/step_08/macos/Runner.xcodeproj/project.pbxproj +++ b/testing_codelab/step_08/macos/Runner.xcodeproj/project.pbxproj @@ -27,8 +27,8 @@ 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 539525273044823767A9A46E /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AA76D1F27BDEBC04894B3B33 /* Pods_Runner.framework */; }; - A84D3E0F2420E0F7F514AA49 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9BD83233D1C91D176C75542E /* Pods_RunnerTests.framework */; }; + D5E8CDC2408FA0B89BA689B9 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 95E094EE4442E09EC399A6E3 /* Pods_RunnerTests.framework */; }; + F90806EA5FA45FE9FFD11185 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 19C2F8CF7766A4C5C9D7431C /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,7 +62,8 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 0D650ADEC29547202904423B /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 19C2F8CF7766A4C5C9D7431C /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 21625DF45E40D23105A730A5 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -79,15 +80,14 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 5BEEE7BF22B079F818CB7393 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 4F17684C0CAD5A8617126723 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 60EA304C2DA542BE9F35EBDB /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 65C28DCB0ED5C988B90B02CB /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 6A2DCA96FA3D8CBA992C9888 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 79A8A18A3B88F9180343E433 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 8829CF80157AC21502A4CE4A /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 95E094EE4442E09EC399A6E3 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - 9BD83233D1C91D176C75542E /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - A3AB83E6041C9E6D984B6F68 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - AA76D1F27BDEBC04894B3B33 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - AC5A9CC099FE904C08B8BE73 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - F4C5A3181D5D771A57141990 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - A84D3E0F2420E0F7F514AA49 /* Pods_RunnerTests.framework in Frameworks */, + D5E8CDC2408FA0B89BA689B9 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,27 +103,13 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 539525273044823767A9A46E /* Pods_Runner.framework in Frameworks */, + F90806EA5FA45FE9FFD11185 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 27AE5769DE8D55C1AF8FAE7D /* Pods */ = { - isa = PBXGroup; - children = ( - 5BEEE7BF22B079F818CB7393 /* Pods-Runner.debug.xcconfig */, - 0D650ADEC29547202904423B /* Pods-Runner.release.xcconfig */, - A3AB83E6041C9E6D984B6F68 /* Pods-Runner.profile.xcconfig */, - AC5A9CC099FE904C08B8BE73 /* Pods-RunnerTests.debug.xcconfig */, - F4C5A3181D5D771A57141990 /* Pods-RunnerTests.release.xcconfig */, - 8829CF80157AC21502A4CE4A /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; 331C80D6294CF71000263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -151,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 27AE5769DE8D55C1AF8FAE7D /* Pods */, + EFB421ED222D4A877FC2743D /* Pods */, ); sourceTree = ""; }; @@ -202,12 +188,26 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - AA76D1F27BDEBC04894B3B33 /* Pods_Runner.framework */, - 9BD83233D1C91D176C75542E /* Pods_RunnerTests.framework */, + 19C2F8CF7766A4C5C9D7431C /* Pods_Runner.framework */, + 95E094EE4442E09EC399A6E3 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; }; + EFB421ED222D4A877FC2743D /* Pods */ = { + isa = PBXGroup; + children = ( + 21625DF45E40D23105A730A5 /* Pods-Runner.debug.xcconfig */, + 4F17684C0CAD5A8617126723 /* Pods-Runner.release.xcconfig */, + 79A8A18A3B88F9180343E433 /* Pods-Runner.profile.xcconfig */, + 65C28DCB0ED5C988B90B02CB /* Pods-RunnerTests.debug.xcconfig */, + 6A2DCA96FA3D8CBA992C9888 /* Pods-RunnerTests.release.xcconfig */, + 60EA304C2DA542BE9F35EBDB /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - CBFF4ED3B408D30DE0516954 /* [CP] Check Pods Manifest.lock */, + E53FD481A79A158F51E3C4EA /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,7 +234,7 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 111262507BD47C2569DD8957 /* [CP] Check Pods Manifest.lock */, + A08533527F9318607696B63F /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, @@ -322,67 +322,67 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 111262507BD47C2569DD8957 /* [CP] Check Pods Manifest.lock */ = { + 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", ); - name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; }; - 3399D490228B24CF009A79C7 /* ShellScript */ = { + 33CC111E2044C6BF0003C045 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + Flutter/ephemeral/FlutterInputs.xcfilelist, ); inputPaths = ( + Flutter/ephemeral/tripwire, ); outputFileListPaths = ( + Flutter/ephemeral/FlutterOutputs.xcfilelist, ); outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; + shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 33CC111E2044C6BF0003C045 /* ShellScript */ = { + A08533527F9318607696B63F /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - Flutter/ephemeral/FlutterInputs.xcfilelist, ); inputPaths = ( - Flutter/ephemeral/tripwire, + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - Flutter/ephemeral/FlutterOutputs.xcfilelist, ); outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - CBFF4ED3B408D30DE0516954 /* [CP] Check Pods Manifest.lock */ = { + E53FD481A79A158F51E3C4EA /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -455,7 +455,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = AC5A9CC099FE904C08B8BE73 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 65C28DCB0ED5C988B90B02CB /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -470,7 +470,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = F4C5A3181D5D771A57141990 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 6A2DCA96FA3D8CBA992C9888 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -485,7 +485,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 8829CF80157AC21502A4CE4A /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 60EA304C2DA542BE9F35EBDB /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/testing_codelab/step_08/macos/Runner/Configs/AppInfo.xcconfig b/testing_codelab/step_08/macos/Runner/Configs/AppInfo.xcconfig index e4a24b4ad4..3e00195667 100644 --- a/testing_codelab/step_08/macos/Runner/Configs/AppInfo.xcconfig +++ b/testing_codelab/step_08/macos/Runner/Configs/AppInfo.xcconfig @@ -11,4 +11,4 @@ PRODUCT_NAME = testing_app PRODUCT_BUNDLE_IDENTIFIER = com.example.testingApp // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. diff --git a/testing_codelab/step_08/pubspec.yaml b/testing_codelab/step_08/pubspec.yaml index 0c0cdfcd83..197e1abae4 100644 --- a/testing_codelab/step_08/pubspec.yaml +++ b/testing_codelab/step_08/pubspec.yaml @@ -13,7 +13,7 @@ environment: dependencies: flutter: sdk: flutter - go_router: ^14.6.2 + go_router: ^14.6.3 provider: ^6.1.2 dev_dependencies: diff --git a/testing_codelab/step_08/windows/runner/Runner.rc b/testing_codelab/step_08/windows/runner/Runner.rc index af63e77698..2c471b89d2 100644 --- a/testing_codelab/step_08/windows/runner/Runner.rc +++ b/testing_codelab/step_08/windows/runner/Runner.rc @@ -93,7 +93,7 @@ BEGIN VALUE "FileDescription", "testing_app" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "InternalName", "testing_app" "\0" - VALUE "LegalCopyright", "Copyright (C) 2024 com.example. All rights reserved." "\0" + VALUE "LegalCopyright", "Copyright (C) 2025 com.example. All rights reserved." "\0" VALUE "OriginalFilename", "testing_app.exe" "\0" VALUE "ProductName", "testing_app" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" From 8d21d790e8e99f17c100a8dda982bcfcb9214645 Mon Sep 17 00:00:00 2001 From: Brett Morgan Date: Wed, 22 Jan 2025 15:22:21 +1100 Subject: [PATCH 108/108] Update `webview_flutter` --- .../webview_in_flutter/MainActivity.kt | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 124 +++++++++--------- .../webview_in_flutter/MainActivity.kt | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 124 +++++++++--------- .../webview_in_flutter/MainActivity.kt | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 124 +++++++++--------- .../webview_in_flutter/MainActivity.kt | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 124 +++++++++--------- .../webview_in_flutter/MainActivity.kt | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 124 +++++++++--------- .../webview_in_flutter/MainActivity.kt | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 124 +++++++++--------- .../webview_in_flutter/MainActivity.kt | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 124 +++++++++--------- .../webview_in_flutter/MainActivity.kt | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 124 +++++++++--------- .../webview_in_flutter/MainActivity.kt | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 124 +++++++++--------- .../webview_in_flutter/MainActivity.kt | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 124 +++++++++--------- 20 files changed, 630 insertions(+), 630 deletions(-) diff --git a/webview_flutter/step_03/android/app/src/main/kotlin/com/example/webview_in_flutter/MainActivity.kt b/webview_flutter/step_03/android/app/src/main/kotlin/com/example/webview_in_flutter/MainActivity.kt index 77ec42b157..c92fab4c95 100644 --- a/webview_flutter/step_03/android/app/src/main/kotlin/com/example/webview_in_flutter/MainActivity.kt +++ b/webview_flutter/step_03/android/app/src/main/kotlin/com/example/webview_in_flutter/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.webview_in_flutter import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/webview_flutter/step_03/ios/Runner.xcodeproj/project.pbxproj b/webview_flutter/step_03/ios/Runner.xcodeproj/project.pbxproj index cf934d46a0..276d860231 100644 --- a/webview_flutter/step_03/ios/Runner.xcodeproj/project.pbxproj +++ b/webview_flutter/step_03/ios/Runner.xcodeproj/project.pbxproj @@ -7,15 +7,15 @@ objects = { /* Begin PBXBuildFile section */ - 146E2F4F96B2A7493F61B324 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 483C5459932C12942AFA7E03 /* Pods_RunnerTests.framework */; }; 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; + 1BFB925E1285D3C9D0214163 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 96AA32884CF65C4A1A47E9B5 /* Pods_Runner.framework */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; + 6AD0B947BC47BAD4C716CF4C /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 78FE95319DCB2E65433E6E8E /* Pods_RunnerTests.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - F22C8C345A86CF5C778824A6 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2E98475E49E91C6F42EB5BE9 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,21 +42,20 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 1182BF4D59712941C6E9BDBD /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 08E8807188BD4562E08B8EEC /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 2E16865EFFE10847E22FDC01 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 2E98475E49E91C6F42EB5BE9 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 38FAC263676BF277DC55CC64 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 483C5459932C12942AFA7E03 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 5DA7B107763804EA023008E6 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 5E65E9ADD0436B6FFD569BB0 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 49B2A1158C53D5BE5179EC9E /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 69C215B70FD7E3EE7319CCC9 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 724C51021A4C169467BA5046 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 78FE95319DCB2E65433E6E8E /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; + 96AA32884CF65C4A1A47E9B5 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -64,15 +63,16 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - D5380A55F144988CDD0B9F21 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + BD4C341F93E020834684FA10 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + FFCD1AE0E78039B407BB6D95 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 5AA7A7CC1135011DCBC94448 /* Frameworks */ = { + 7F226ABBED5403415863058E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 146E2F4F96B2A7493F61B324 /* Pods_RunnerTests.framework in Frameworks */, + 6AD0B947BC47BAD4C716CF4C /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -80,42 +80,42 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - F22C8C345A86CF5C778824A6 /* Pods_Runner.framework in Frameworks */, + 1BFB925E1285D3C9D0214163 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 331C8082294A63A400263BE5 /* RunnerTests */ = { + 17381141EAB50EFA562EAEE7 /* Pods */ = { isa = PBXGroup; children = ( - 331C807B294A618700263BE5 /* RunnerTests.swift */, + 724C51021A4C169467BA5046 /* Pods-Runner.debug.xcconfig */, + 69C215B70FD7E3EE7319CCC9 /* Pods-Runner.release.xcconfig */, + BD4C341F93E020834684FA10 /* Pods-Runner.profile.xcconfig */, + 08E8807188BD4562E08B8EEC /* Pods-RunnerTests.debug.xcconfig */, + FFCD1AE0E78039B407BB6D95 /* Pods-RunnerTests.release.xcconfig */, + 49B2A1158C53D5BE5179EC9E /* Pods-RunnerTests.profile.xcconfig */, ); - path = RunnerTests; + name = Pods; + path = Pods; sourceTree = ""; }; - 6406E4F1654585763ECA3FC5 /* Frameworks */ = { + 331C8082294A63A400263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( - 2E98475E49E91C6F42EB5BE9 /* Pods_Runner.framework */, - 483C5459932C12942AFA7E03 /* Pods_RunnerTests.framework */, + 331C807B294A618700263BE5 /* RunnerTests.swift */, ); - name = Frameworks; + path = RunnerTests; sourceTree = ""; }; - 9195E9BC680CC0AFDF5DFFCD /* Pods */ = { + 6329F352C3BC19D6BC97C051 /* Frameworks */ = { isa = PBXGroup; children = ( - 2E16865EFFE10847E22FDC01 /* Pods-Runner.debug.xcconfig */, - 5DA7B107763804EA023008E6 /* Pods-Runner.release.xcconfig */, - D5380A55F144988CDD0B9F21 /* Pods-Runner.profile.xcconfig */, - 38FAC263676BF277DC55CC64 /* Pods-RunnerTests.debug.xcconfig */, - 5E65E9ADD0436B6FFD569BB0 /* Pods-RunnerTests.release.xcconfig */, - 1182BF4D59712941C6E9BDBD /* Pods-RunnerTests.profile.xcconfig */, + 96AA32884CF65C4A1A47E9B5 /* Pods_Runner.framework */, + 78FE95319DCB2E65433E6E8E /* Pods_RunnerTests.framework */, ); - name = Pods; - path = Pods; + name = Frameworks; sourceTree = ""; }; 9740EEB11CF90186004384FC /* Flutter */ = { @@ -136,8 +136,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - 9195E9BC680CC0AFDF5DFFCD /* Pods */, - 6406E4F1654585763ECA3FC5 /* Frameworks */, + 17381141EAB50EFA562EAEE7 /* Pods */, + 6329F352C3BC19D6BC97C051 /* Frameworks */, ); sourceTree = ""; }; @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - ECCFE0282F0AB2316DFFAAA5 /* [CP] Check Pods Manifest.lock */, + D9EEEE05A83707C4344318A4 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 5AA7A7CC1135011DCBC94448 /* Frameworks */, + 7F226ABBED5403415863058E /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 5E22422868B5F66D0EA12B2D /* [CP] Check Pods Manifest.lock */, + E931E5B32D0B6E1B4F0E6521 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 8F294B118B136BC3657E9830 /* [CP] Embed Pods Frameworks */, + 52348E4B337812CFFF83C800 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -286,29 +286,7 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 5E22422868B5F66D0EA12B2D /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; - 8F294B118B136BC3657E9830 /* [CP] Embed Pods Frameworks */ = { + 52348E4B337812CFFF83C800 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -340,7 +318,7 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - ECCFE0282F0AB2316DFFAAA5 /* [CP] Check Pods Manifest.lock */ = { + D9EEEE05A83707C4344318A4 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -362,6 +340,28 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; + E931E5B32D0B6E1B4F0E6521 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 38FAC263676BF277DC55CC64 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 08E8807188BD4562E08B8EEC /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 5E65E9ADD0436B6FFD569BB0 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = FFCD1AE0E78039B407BB6D95 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 1182BF4D59712941C6E9BDBD /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 49B2A1158C53D5BE5179EC9E /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/webview_flutter/step_04/android/app/src/main/kotlin/com/example/webview_in_flutter/MainActivity.kt b/webview_flutter/step_04/android/app/src/main/kotlin/com/example/webview_in_flutter/MainActivity.kt index 77ec42b157..c92fab4c95 100644 --- a/webview_flutter/step_04/android/app/src/main/kotlin/com/example/webview_in_flutter/MainActivity.kt +++ b/webview_flutter/step_04/android/app/src/main/kotlin/com/example/webview_in_flutter/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.webview_in_flutter import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/webview_flutter/step_04/ios/Runner.xcodeproj/project.pbxproj b/webview_flutter/step_04/ios/Runner.xcodeproj/project.pbxproj index cf934d46a0..276d860231 100644 --- a/webview_flutter/step_04/ios/Runner.xcodeproj/project.pbxproj +++ b/webview_flutter/step_04/ios/Runner.xcodeproj/project.pbxproj @@ -7,15 +7,15 @@ objects = { /* Begin PBXBuildFile section */ - 146E2F4F96B2A7493F61B324 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 483C5459932C12942AFA7E03 /* Pods_RunnerTests.framework */; }; 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; + 1BFB925E1285D3C9D0214163 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 96AA32884CF65C4A1A47E9B5 /* Pods_Runner.framework */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; + 6AD0B947BC47BAD4C716CF4C /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 78FE95319DCB2E65433E6E8E /* Pods_RunnerTests.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - F22C8C345A86CF5C778824A6 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2E98475E49E91C6F42EB5BE9 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,21 +42,20 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 1182BF4D59712941C6E9BDBD /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 08E8807188BD4562E08B8EEC /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 2E16865EFFE10847E22FDC01 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 2E98475E49E91C6F42EB5BE9 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 38FAC263676BF277DC55CC64 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 483C5459932C12942AFA7E03 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 5DA7B107763804EA023008E6 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 5E65E9ADD0436B6FFD569BB0 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 49B2A1158C53D5BE5179EC9E /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 69C215B70FD7E3EE7319CCC9 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 724C51021A4C169467BA5046 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 78FE95319DCB2E65433E6E8E /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; + 96AA32884CF65C4A1A47E9B5 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -64,15 +63,16 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - D5380A55F144988CDD0B9F21 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + BD4C341F93E020834684FA10 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + FFCD1AE0E78039B407BB6D95 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 5AA7A7CC1135011DCBC94448 /* Frameworks */ = { + 7F226ABBED5403415863058E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 146E2F4F96B2A7493F61B324 /* Pods_RunnerTests.framework in Frameworks */, + 6AD0B947BC47BAD4C716CF4C /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -80,42 +80,42 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - F22C8C345A86CF5C778824A6 /* Pods_Runner.framework in Frameworks */, + 1BFB925E1285D3C9D0214163 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 331C8082294A63A400263BE5 /* RunnerTests */ = { + 17381141EAB50EFA562EAEE7 /* Pods */ = { isa = PBXGroup; children = ( - 331C807B294A618700263BE5 /* RunnerTests.swift */, + 724C51021A4C169467BA5046 /* Pods-Runner.debug.xcconfig */, + 69C215B70FD7E3EE7319CCC9 /* Pods-Runner.release.xcconfig */, + BD4C341F93E020834684FA10 /* Pods-Runner.profile.xcconfig */, + 08E8807188BD4562E08B8EEC /* Pods-RunnerTests.debug.xcconfig */, + FFCD1AE0E78039B407BB6D95 /* Pods-RunnerTests.release.xcconfig */, + 49B2A1158C53D5BE5179EC9E /* Pods-RunnerTests.profile.xcconfig */, ); - path = RunnerTests; + name = Pods; + path = Pods; sourceTree = ""; }; - 6406E4F1654585763ECA3FC5 /* Frameworks */ = { + 331C8082294A63A400263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( - 2E98475E49E91C6F42EB5BE9 /* Pods_Runner.framework */, - 483C5459932C12942AFA7E03 /* Pods_RunnerTests.framework */, + 331C807B294A618700263BE5 /* RunnerTests.swift */, ); - name = Frameworks; + path = RunnerTests; sourceTree = ""; }; - 9195E9BC680CC0AFDF5DFFCD /* Pods */ = { + 6329F352C3BC19D6BC97C051 /* Frameworks */ = { isa = PBXGroup; children = ( - 2E16865EFFE10847E22FDC01 /* Pods-Runner.debug.xcconfig */, - 5DA7B107763804EA023008E6 /* Pods-Runner.release.xcconfig */, - D5380A55F144988CDD0B9F21 /* Pods-Runner.profile.xcconfig */, - 38FAC263676BF277DC55CC64 /* Pods-RunnerTests.debug.xcconfig */, - 5E65E9ADD0436B6FFD569BB0 /* Pods-RunnerTests.release.xcconfig */, - 1182BF4D59712941C6E9BDBD /* Pods-RunnerTests.profile.xcconfig */, + 96AA32884CF65C4A1A47E9B5 /* Pods_Runner.framework */, + 78FE95319DCB2E65433E6E8E /* Pods_RunnerTests.framework */, ); - name = Pods; - path = Pods; + name = Frameworks; sourceTree = ""; }; 9740EEB11CF90186004384FC /* Flutter */ = { @@ -136,8 +136,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - 9195E9BC680CC0AFDF5DFFCD /* Pods */, - 6406E4F1654585763ECA3FC5 /* Frameworks */, + 17381141EAB50EFA562EAEE7 /* Pods */, + 6329F352C3BC19D6BC97C051 /* Frameworks */, ); sourceTree = ""; }; @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - ECCFE0282F0AB2316DFFAAA5 /* [CP] Check Pods Manifest.lock */, + D9EEEE05A83707C4344318A4 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 5AA7A7CC1135011DCBC94448 /* Frameworks */, + 7F226ABBED5403415863058E /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 5E22422868B5F66D0EA12B2D /* [CP] Check Pods Manifest.lock */, + E931E5B32D0B6E1B4F0E6521 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 8F294B118B136BC3657E9830 /* [CP] Embed Pods Frameworks */, + 52348E4B337812CFFF83C800 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -286,29 +286,7 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 5E22422868B5F66D0EA12B2D /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; - 8F294B118B136BC3657E9830 /* [CP] Embed Pods Frameworks */ = { + 52348E4B337812CFFF83C800 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -340,7 +318,7 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - ECCFE0282F0AB2316DFFAAA5 /* [CP] Check Pods Manifest.lock */ = { + D9EEEE05A83707C4344318A4 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -362,6 +340,28 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; + E931E5B32D0B6E1B4F0E6521 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 38FAC263676BF277DC55CC64 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 08E8807188BD4562E08B8EEC /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 5E65E9ADD0436B6FFD569BB0 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = FFCD1AE0E78039B407BB6D95 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 1182BF4D59712941C6E9BDBD /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 49B2A1158C53D5BE5179EC9E /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/webview_flutter/step_05/android/app/src/main/kotlin/com/example/webview_in_flutter/MainActivity.kt b/webview_flutter/step_05/android/app/src/main/kotlin/com/example/webview_in_flutter/MainActivity.kt index 77ec42b157..c92fab4c95 100644 --- a/webview_flutter/step_05/android/app/src/main/kotlin/com/example/webview_in_flutter/MainActivity.kt +++ b/webview_flutter/step_05/android/app/src/main/kotlin/com/example/webview_in_flutter/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.webview_in_flutter import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/webview_flutter/step_05/ios/Runner.xcodeproj/project.pbxproj b/webview_flutter/step_05/ios/Runner.xcodeproj/project.pbxproj index cf934d46a0..276d860231 100644 --- a/webview_flutter/step_05/ios/Runner.xcodeproj/project.pbxproj +++ b/webview_flutter/step_05/ios/Runner.xcodeproj/project.pbxproj @@ -7,15 +7,15 @@ objects = { /* Begin PBXBuildFile section */ - 146E2F4F96B2A7493F61B324 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 483C5459932C12942AFA7E03 /* Pods_RunnerTests.framework */; }; 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; + 1BFB925E1285D3C9D0214163 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 96AA32884CF65C4A1A47E9B5 /* Pods_Runner.framework */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; + 6AD0B947BC47BAD4C716CF4C /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 78FE95319DCB2E65433E6E8E /* Pods_RunnerTests.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - F22C8C345A86CF5C778824A6 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2E98475E49E91C6F42EB5BE9 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,21 +42,20 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 1182BF4D59712941C6E9BDBD /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 08E8807188BD4562E08B8EEC /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 2E16865EFFE10847E22FDC01 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 2E98475E49E91C6F42EB5BE9 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 38FAC263676BF277DC55CC64 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 483C5459932C12942AFA7E03 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 5DA7B107763804EA023008E6 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 5E65E9ADD0436B6FFD569BB0 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 49B2A1158C53D5BE5179EC9E /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 69C215B70FD7E3EE7319CCC9 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 724C51021A4C169467BA5046 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 78FE95319DCB2E65433E6E8E /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; + 96AA32884CF65C4A1A47E9B5 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -64,15 +63,16 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - D5380A55F144988CDD0B9F21 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + BD4C341F93E020834684FA10 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + FFCD1AE0E78039B407BB6D95 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 5AA7A7CC1135011DCBC94448 /* Frameworks */ = { + 7F226ABBED5403415863058E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 146E2F4F96B2A7493F61B324 /* Pods_RunnerTests.framework in Frameworks */, + 6AD0B947BC47BAD4C716CF4C /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -80,42 +80,42 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - F22C8C345A86CF5C778824A6 /* Pods_Runner.framework in Frameworks */, + 1BFB925E1285D3C9D0214163 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 331C8082294A63A400263BE5 /* RunnerTests */ = { + 17381141EAB50EFA562EAEE7 /* Pods */ = { isa = PBXGroup; children = ( - 331C807B294A618700263BE5 /* RunnerTests.swift */, + 724C51021A4C169467BA5046 /* Pods-Runner.debug.xcconfig */, + 69C215B70FD7E3EE7319CCC9 /* Pods-Runner.release.xcconfig */, + BD4C341F93E020834684FA10 /* Pods-Runner.profile.xcconfig */, + 08E8807188BD4562E08B8EEC /* Pods-RunnerTests.debug.xcconfig */, + FFCD1AE0E78039B407BB6D95 /* Pods-RunnerTests.release.xcconfig */, + 49B2A1158C53D5BE5179EC9E /* Pods-RunnerTests.profile.xcconfig */, ); - path = RunnerTests; + name = Pods; + path = Pods; sourceTree = ""; }; - 6406E4F1654585763ECA3FC5 /* Frameworks */ = { + 331C8082294A63A400263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( - 2E98475E49E91C6F42EB5BE9 /* Pods_Runner.framework */, - 483C5459932C12942AFA7E03 /* Pods_RunnerTests.framework */, + 331C807B294A618700263BE5 /* RunnerTests.swift */, ); - name = Frameworks; + path = RunnerTests; sourceTree = ""; }; - 9195E9BC680CC0AFDF5DFFCD /* Pods */ = { + 6329F352C3BC19D6BC97C051 /* Frameworks */ = { isa = PBXGroup; children = ( - 2E16865EFFE10847E22FDC01 /* Pods-Runner.debug.xcconfig */, - 5DA7B107763804EA023008E6 /* Pods-Runner.release.xcconfig */, - D5380A55F144988CDD0B9F21 /* Pods-Runner.profile.xcconfig */, - 38FAC263676BF277DC55CC64 /* Pods-RunnerTests.debug.xcconfig */, - 5E65E9ADD0436B6FFD569BB0 /* Pods-RunnerTests.release.xcconfig */, - 1182BF4D59712941C6E9BDBD /* Pods-RunnerTests.profile.xcconfig */, + 96AA32884CF65C4A1A47E9B5 /* Pods_Runner.framework */, + 78FE95319DCB2E65433E6E8E /* Pods_RunnerTests.framework */, ); - name = Pods; - path = Pods; + name = Frameworks; sourceTree = ""; }; 9740EEB11CF90186004384FC /* Flutter */ = { @@ -136,8 +136,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - 9195E9BC680CC0AFDF5DFFCD /* Pods */, - 6406E4F1654585763ECA3FC5 /* Frameworks */, + 17381141EAB50EFA562EAEE7 /* Pods */, + 6329F352C3BC19D6BC97C051 /* Frameworks */, ); sourceTree = ""; }; @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - ECCFE0282F0AB2316DFFAAA5 /* [CP] Check Pods Manifest.lock */, + D9EEEE05A83707C4344318A4 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 5AA7A7CC1135011DCBC94448 /* Frameworks */, + 7F226ABBED5403415863058E /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 5E22422868B5F66D0EA12B2D /* [CP] Check Pods Manifest.lock */, + E931E5B32D0B6E1B4F0E6521 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 8F294B118B136BC3657E9830 /* [CP] Embed Pods Frameworks */, + 52348E4B337812CFFF83C800 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -286,29 +286,7 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 5E22422868B5F66D0EA12B2D /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; - 8F294B118B136BC3657E9830 /* [CP] Embed Pods Frameworks */ = { + 52348E4B337812CFFF83C800 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -340,7 +318,7 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - ECCFE0282F0AB2316DFFAAA5 /* [CP] Check Pods Manifest.lock */ = { + D9EEEE05A83707C4344318A4 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -362,6 +340,28 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; + E931E5B32D0B6E1B4F0E6521 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 38FAC263676BF277DC55CC64 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 08E8807188BD4562E08B8EEC /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 5E65E9ADD0436B6FFD569BB0 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = FFCD1AE0E78039B407BB6D95 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 1182BF4D59712941C6E9BDBD /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 49B2A1158C53D5BE5179EC9E /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/webview_flutter/step_06/android/app/src/main/kotlin/com/example/webview_in_flutter/MainActivity.kt b/webview_flutter/step_06/android/app/src/main/kotlin/com/example/webview_in_flutter/MainActivity.kt index 77ec42b157..c92fab4c95 100644 --- a/webview_flutter/step_06/android/app/src/main/kotlin/com/example/webview_in_flutter/MainActivity.kt +++ b/webview_flutter/step_06/android/app/src/main/kotlin/com/example/webview_in_flutter/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.webview_in_flutter import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/webview_flutter/step_06/ios/Runner.xcodeproj/project.pbxproj b/webview_flutter/step_06/ios/Runner.xcodeproj/project.pbxproj index cf934d46a0..276d860231 100644 --- a/webview_flutter/step_06/ios/Runner.xcodeproj/project.pbxproj +++ b/webview_flutter/step_06/ios/Runner.xcodeproj/project.pbxproj @@ -7,15 +7,15 @@ objects = { /* Begin PBXBuildFile section */ - 146E2F4F96B2A7493F61B324 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 483C5459932C12942AFA7E03 /* Pods_RunnerTests.framework */; }; 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; + 1BFB925E1285D3C9D0214163 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 96AA32884CF65C4A1A47E9B5 /* Pods_Runner.framework */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; + 6AD0B947BC47BAD4C716CF4C /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 78FE95319DCB2E65433E6E8E /* Pods_RunnerTests.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - F22C8C345A86CF5C778824A6 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2E98475E49E91C6F42EB5BE9 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,21 +42,20 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 1182BF4D59712941C6E9BDBD /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 08E8807188BD4562E08B8EEC /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 2E16865EFFE10847E22FDC01 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 2E98475E49E91C6F42EB5BE9 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 38FAC263676BF277DC55CC64 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 483C5459932C12942AFA7E03 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 5DA7B107763804EA023008E6 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 5E65E9ADD0436B6FFD569BB0 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 49B2A1158C53D5BE5179EC9E /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 69C215B70FD7E3EE7319CCC9 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 724C51021A4C169467BA5046 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 78FE95319DCB2E65433E6E8E /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; + 96AA32884CF65C4A1A47E9B5 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -64,15 +63,16 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - D5380A55F144988CDD0B9F21 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + BD4C341F93E020834684FA10 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + FFCD1AE0E78039B407BB6D95 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 5AA7A7CC1135011DCBC94448 /* Frameworks */ = { + 7F226ABBED5403415863058E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 146E2F4F96B2A7493F61B324 /* Pods_RunnerTests.framework in Frameworks */, + 6AD0B947BC47BAD4C716CF4C /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -80,42 +80,42 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - F22C8C345A86CF5C778824A6 /* Pods_Runner.framework in Frameworks */, + 1BFB925E1285D3C9D0214163 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 331C8082294A63A400263BE5 /* RunnerTests */ = { + 17381141EAB50EFA562EAEE7 /* Pods */ = { isa = PBXGroup; children = ( - 331C807B294A618700263BE5 /* RunnerTests.swift */, + 724C51021A4C169467BA5046 /* Pods-Runner.debug.xcconfig */, + 69C215B70FD7E3EE7319CCC9 /* Pods-Runner.release.xcconfig */, + BD4C341F93E020834684FA10 /* Pods-Runner.profile.xcconfig */, + 08E8807188BD4562E08B8EEC /* Pods-RunnerTests.debug.xcconfig */, + FFCD1AE0E78039B407BB6D95 /* Pods-RunnerTests.release.xcconfig */, + 49B2A1158C53D5BE5179EC9E /* Pods-RunnerTests.profile.xcconfig */, ); - path = RunnerTests; + name = Pods; + path = Pods; sourceTree = ""; }; - 6406E4F1654585763ECA3FC5 /* Frameworks */ = { + 331C8082294A63A400263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( - 2E98475E49E91C6F42EB5BE9 /* Pods_Runner.framework */, - 483C5459932C12942AFA7E03 /* Pods_RunnerTests.framework */, + 331C807B294A618700263BE5 /* RunnerTests.swift */, ); - name = Frameworks; + path = RunnerTests; sourceTree = ""; }; - 9195E9BC680CC0AFDF5DFFCD /* Pods */ = { + 6329F352C3BC19D6BC97C051 /* Frameworks */ = { isa = PBXGroup; children = ( - 2E16865EFFE10847E22FDC01 /* Pods-Runner.debug.xcconfig */, - 5DA7B107763804EA023008E6 /* Pods-Runner.release.xcconfig */, - D5380A55F144988CDD0B9F21 /* Pods-Runner.profile.xcconfig */, - 38FAC263676BF277DC55CC64 /* Pods-RunnerTests.debug.xcconfig */, - 5E65E9ADD0436B6FFD569BB0 /* Pods-RunnerTests.release.xcconfig */, - 1182BF4D59712941C6E9BDBD /* Pods-RunnerTests.profile.xcconfig */, + 96AA32884CF65C4A1A47E9B5 /* Pods_Runner.framework */, + 78FE95319DCB2E65433E6E8E /* Pods_RunnerTests.framework */, ); - name = Pods; - path = Pods; + name = Frameworks; sourceTree = ""; }; 9740EEB11CF90186004384FC /* Flutter */ = { @@ -136,8 +136,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - 9195E9BC680CC0AFDF5DFFCD /* Pods */, - 6406E4F1654585763ECA3FC5 /* Frameworks */, + 17381141EAB50EFA562EAEE7 /* Pods */, + 6329F352C3BC19D6BC97C051 /* Frameworks */, ); sourceTree = ""; }; @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - ECCFE0282F0AB2316DFFAAA5 /* [CP] Check Pods Manifest.lock */, + D9EEEE05A83707C4344318A4 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 5AA7A7CC1135011DCBC94448 /* Frameworks */, + 7F226ABBED5403415863058E /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 5E22422868B5F66D0EA12B2D /* [CP] Check Pods Manifest.lock */, + E931E5B32D0B6E1B4F0E6521 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 8F294B118B136BC3657E9830 /* [CP] Embed Pods Frameworks */, + 52348E4B337812CFFF83C800 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -286,29 +286,7 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 5E22422868B5F66D0EA12B2D /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; - 8F294B118B136BC3657E9830 /* [CP] Embed Pods Frameworks */ = { + 52348E4B337812CFFF83C800 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -340,7 +318,7 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - ECCFE0282F0AB2316DFFAAA5 /* [CP] Check Pods Manifest.lock */ = { + D9EEEE05A83707C4344318A4 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -362,6 +340,28 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; + E931E5B32D0B6E1B4F0E6521 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 38FAC263676BF277DC55CC64 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 08E8807188BD4562E08B8EEC /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 5E65E9ADD0436B6FFD569BB0 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = FFCD1AE0E78039B407BB6D95 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 1182BF4D59712941C6E9BDBD /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 49B2A1158C53D5BE5179EC9E /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/webview_flutter/step_07/android/app/src/main/kotlin/com/example/webview_in_flutter/MainActivity.kt b/webview_flutter/step_07/android/app/src/main/kotlin/com/example/webview_in_flutter/MainActivity.kt index 77ec42b157..c92fab4c95 100644 --- a/webview_flutter/step_07/android/app/src/main/kotlin/com/example/webview_in_flutter/MainActivity.kt +++ b/webview_flutter/step_07/android/app/src/main/kotlin/com/example/webview_in_flutter/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.webview_in_flutter import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/webview_flutter/step_07/ios/Runner.xcodeproj/project.pbxproj b/webview_flutter/step_07/ios/Runner.xcodeproj/project.pbxproj index cf934d46a0..276d860231 100644 --- a/webview_flutter/step_07/ios/Runner.xcodeproj/project.pbxproj +++ b/webview_flutter/step_07/ios/Runner.xcodeproj/project.pbxproj @@ -7,15 +7,15 @@ objects = { /* Begin PBXBuildFile section */ - 146E2F4F96B2A7493F61B324 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 483C5459932C12942AFA7E03 /* Pods_RunnerTests.framework */; }; 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; + 1BFB925E1285D3C9D0214163 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 96AA32884CF65C4A1A47E9B5 /* Pods_Runner.framework */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; + 6AD0B947BC47BAD4C716CF4C /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 78FE95319DCB2E65433E6E8E /* Pods_RunnerTests.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - F22C8C345A86CF5C778824A6 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2E98475E49E91C6F42EB5BE9 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,21 +42,20 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 1182BF4D59712941C6E9BDBD /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 08E8807188BD4562E08B8EEC /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 2E16865EFFE10847E22FDC01 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 2E98475E49E91C6F42EB5BE9 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 38FAC263676BF277DC55CC64 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 483C5459932C12942AFA7E03 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 5DA7B107763804EA023008E6 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 5E65E9ADD0436B6FFD569BB0 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 49B2A1158C53D5BE5179EC9E /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 69C215B70FD7E3EE7319CCC9 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 724C51021A4C169467BA5046 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 78FE95319DCB2E65433E6E8E /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; + 96AA32884CF65C4A1A47E9B5 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -64,15 +63,16 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - D5380A55F144988CDD0B9F21 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + BD4C341F93E020834684FA10 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + FFCD1AE0E78039B407BB6D95 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 5AA7A7CC1135011DCBC94448 /* Frameworks */ = { + 7F226ABBED5403415863058E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 146E2F4F96B2A7493F61B324 /* Pods_RunnerTests.framework in Frameworks */, + 6AD0B947BC47BAD4C716CF4C /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -80,42 +80,42 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - F22C8C345A86CF5C778824A6 /* Pods_Runner.framework in Frameworks */, + 1BFB925E1285D3C9D0214163 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 331C8082294A63A400263BE5 /* RunnerTests */ = { + 17381141EAB50EFA562EAEE7 /* Pods */ = { isa = PBXGroup; children = ( - 331C807B294A618700263BE5 /* RunnerTests.swift */, + 724C51021A4C169467BA5046 /* Pods-Runner.debug.xcconfig */, + 69C215B70FD7E3EE7319CCC9 /* Pods-Runner.release.xcconfig */, + BD4C341F93E020834684FA10 /* Pods-Runner.profile.xcconfig */, + 08E8807188BD4562E08B8EEC /* Pods-RunnerTests.debug.xcconfig */, + FFCD1AE0E78039B407BB6D95 /* Pods-RunnerTests.release.xcconfig */, + 49B2A1158C53D5BE5179EC9E /* Pods-RunnerTests.profile.xcconfig */, ); - path = RunnerTests; + name = Pods; + path = Pods; sourceTree = ""; }; - 6406E4F1654585763ECA3FC5 /* Frameworks */ = { + 331C8082294A63A400263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( - 2E98475E49E91C6F42EB5BE9 /* Pods_Runner.framework */, - 483C5459932C12942AFA7E03 /* Pods_RunnerTests.framework */, + 331C807B294A618700263BE5 /* RunnerTests.swift */, ); - name = Frameworks; + path = RunnerTests; sourceTree = ""; }; - 9195E9BC680CC0AFDF5DFFCD /* Pods */ = { + 6329F352C3BC19D6BC97C051 /* Frameworks */ = { isa = PBXGroup; children = ( - 2E16865EFFE10847E22FDC01 /* Pods-Runner.debug.xcconfig */, - 5DA7B107763804EA023008E6 /* Pods-Runner.release.xcconfig */, - D5380A55F144988CDD0B9F21 /* Pods-Runner.profile.xcconfig */, - 38FAC263676BF277DC55CC64 /* Pods-RunnerTests.debug.xcconfig */, - 5E65E9ADD0436B6FFD569BB0 /* Pods-RunnerTests.release.xcconfig */, - 1182BF4D59712941C6E9BDBD /* Pods-RunnerTests.profile.xcconfig */, + 96AA32884CF65C4A1A47E9B5 /* Pods_Runner.framework */, + 78FE95319DCB2E65433E6E8E /* Pods_RunnerTests.framework */, ); - name = Pods; - path = Pods; + name = Frameworks; sourceTree = ""; }; 9740EEB11CF90186004384FC /* Flutter */ = { @@ -136,8 +136,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - 9195E9BC680CC0AFDF5DFFCD /* Pods */, - 6406E4F1654585763ECA3FC5 /* Frameworks */, + 17381141EAB50EFA562EAEE7 /* Pods */, + 6329F352C3BC19D6BC97C051 /* Frameworks */, ); sourceTree = ""; }; @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - ECCFE0282F0AB2316DFFAAA5 /* [CP] Check Pods Manifest.lock */, + D9EEEE05A83707C4344318A4 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 5AA7A7CC1135011DCBC94448 /* Frameworks */, + 7F226ABBED5403415863058E /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 5E22422868B5F66D0EA12B2D /* [CP] Check Pods Manifest.lock */, + E931E5B32D0B6E1B4F0E6521 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 8F294B118B136BC3657E9830 /* [CP] Embed Pods Frameworks */, + 52348E4B337812CFFF83C800 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -286,29 +286,7 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 5E22422868B5F66D0EA12B2D /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; - 8F294B118B136BC3657E9830 /* [CP] Embed Pods Frameworks */ = { + 52348E4B337812CFFF83C800 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -340,7 +318,7 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - ECCFE0282F0AB2316DFFAAA5 /* [CP] Check Pods Manifest.lock */ = { + D9EEEE05A83707C4344318A4 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -362,6 +340,28 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; + E931E5B32D0B6E1B4F0E6521 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 38FAC263676BF277DC55CC64 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 08E8807188BD4562E08B8EEC /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 5E65E9ADD0436B6FFD569BB0 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = FFCD1AE0E78039B407BB6D95 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 1182BF4D59712941C6E9BDBD /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 49B2A1158C53D5BE5179EC9E /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/webview_flutter/step_08/android/app/src/main/kotlin/com/example/webview_in_flutter/MainActivity.kt b/webview_flutter/step_08/android/app/src/main/kotlin/com/example/webview_in_flutter/MainActivity.kt index 77ec42b157..c92fab4c95 100644 --- a/webview_flutter/step_08/android/app/src/main/kotlin/com/example/webview_in_flutter/MainActivity.kt +++ b/webview_flutter/step_08/android/app/src/main/kotlin/com/example/webview_in_flutter/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.webview_in_flutter import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/webview_flutter/step_08/ios/Runner.xcodeproj/project.pbxproj b/webview_flutter/step_08/ios/Runner.xcodeproj/project.pbxproj index cf934d46a0..276d860231 100644 --- a/webview_flutter/step_08/ios/Runner.xcodeproj/project.pbxproj +++ b/webview_flutter/step_08/ios/Runner.xcodeproj/project.pbxproj @@ -7,15 +7,15 @@ objects = { /* Begin PBXBuildFile section */ - 146E2F4F96B2A7493F61B324 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 483C5459932C12942AFA7E03 /* Pods_RunnerTests.framework */; }; 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; + 1BFB925E1285D3C9D0214163 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 96AA32884CF65C4A1A47E9B5 /* Pods_Runner.framework */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; + 6AD0B947BC47BAD4C716CF4C /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 78FE95319DCB2E65433E6E8E /* Pods_RunnerTests.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - F22C8C345A86CF5C778824A6 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2E98475E49E91C6F42EB5BE9 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,21 +42,20 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 1182BF4D59712941C6E9BDBD /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 08E8807188BD4562E08B8EEC /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 2E16865EFFE10847E22FDC01 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 2E98475E49E91C6F42EB5BE9 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 38FAC263676BF277DC55CC64 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 483C5459932C12942AFA7E03 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 5DA7B107763804EA023008E6 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 5E65E9ADD0436B6FFD569BB0 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 49B2A1158C53D5BE5179EC9E /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 69C215B70FD7E3EE7319CCC9 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 724C51021A4C169467BA5046 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 78FE95319DCB2E65433E6E8E /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; + 96AA32884CF65C4A1A47E9B5 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -64,15 +63,16 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - D5380A55F144988CDD0B9F21 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + BD4C341F93E020834684FA10 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + FFCD1AE0E78039B407BB6D95 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 5AA7A7CC1135011DCBC94448 /* Frameworks */ = { + 7F226ABBED5403415863058E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 146E2F4F96B2A7493F61B324 /* Pods_RunnerTests.framework in Frameworks */, + 6AD0B947BC47BAD4C716CF4C /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -80,42 +80,42 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - F22C8C345A86CF5C778824A6 /* Pods_Runner.framework in Frameworks */, + 1BFB925E1285D3C9D0214163 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 331C8082294A63A400263BE5 /* RunnerTests */ = { + 17381141EAB50EFA562EAEE7 /* Pods */ = { isa = PBXGroup; children = ( - 331C807B294A618700263BE5 /* RunnerTests.swift */, + 724C51021A4C169467BA5046 /* Pods-Runner.debug.xcconfig */, + 69C215B70FD7E3EE7319CCC9 /* Pods-Runner.release.xcconfig */, + BD4C341F93E020834684FA10 /* Pods-Runner.profile.xcconfig */, + 08E8807188BD4562E08B8EEC /* Pods-RunnerTests.debug.xcconfig */, + FFCD1AE0E78039B407BB6D95 /* Pods-RunnerTests.release.xcconfig */, + 49B2A1158C53D5BE5179EC9E /* Pods-RunnerTests.profile.xcconfig */, ); - path = RunnerTests; + name = Pods; + path = Pods; sourceTree = ""; }; - 6406E4F1654585763ECA3FC5 /* Frameworks */ = { + 331C8082294A63A400263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( - 2E98475E49E91C6F42EB5BE9 /* Pods_Runner.framework */, - 483C5459932C12942AFA7E03 /* Pods_RunnerTests.framework */, + 331C807B294A618700263BE5 /* RunnerTests.swift */, ); - name = Frameworks; + path = RunnerTests; sourceTree = ""; }; - 9195E9BC680CC0AFDF5DFFCD /* Pods */ = { + 6329F352C3BC19D6BC97C051 /* Frameworks */ = { isa = PBXGroup; children = ( - 2E16865EFFE10847E22FDC01 /* Pods-Runner.debug.xcconfig */, - 5DA7B107763804EA023008E6 /* Pods-Runner.release.xcconfig */, - D5380A55F144988CDD0B9F21 /* Pods-Runner.profile.xcconfig */, - 38FAC263676BF277DC55CC64 /* Pods-RunnerTests.debug.xcconfig */, - 5E65E9ADD0436B6FFD569BB0 /* Pods-RunnerTests.release.xcconfig */, - 1182BF4D59712941C6E9BDBD /* Pods-RunnerTests.profile.xcconfig */, + 96AA32884CF65C4A1A47E9B5 /* Pods_Runner.framework */, + 78FE95319DCB2E65433E6E8E /* Pods_RunnerTests.framework */, ); - name = Pods; - path = Pods; + name = Frameworks; sourceTree = ""; }; 9740EEB11CF90186004384FC /* Flutter */ = { @@ -136,8 +136,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - 9195E9BC680CC0AFDF5DFFCD /* Pods */, - 6406E4F1654585763ECA3FC5 /* Frameworks */, + 17381141EAB50EFA562EAEE7 /* Pods */, + 6329F352C3BC19D6BC97C051 /* Frameworks */, ); sourceTree = ""; }; @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - ECCFE0282F0AB2316DFFAAA5 /* [CP] Check Pods Manifest.lock */, + D9EEEE05A83707C4344318A4 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 5AA7A7CC1135011DCBC94448 /* Frameworks */, + 7F226ABBED5403415863058E /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 5E22422868B5F66D0EA12B2D /* [CP] Check Pods Manifest.lock */, + E931E5B32D0B6E1B4F0E6521 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 8F294B118B136BC3657E9830 /* [CP] Embed Pods Frameworks */, + 52348E4B337812CFFF83C800 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -286,29 +286,7 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 5E22422868B5F66D0EA12B2D /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; - 8F294B118B136BC3657E9830 /* [CP] Embed Pods Frameworks */ = { + 52348E4B337812CFFF83C800 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -340,7 +318,7 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - ECCFE0282F0AB2316DFFAAA5 /* [CP] Check Pods Manifest.lock */ = { + D9EEEE05A83707C4344318A4 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -362,6 +340,28 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; + E931E5B32D0B6E1B4F0E6521 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 38FAC263676BF277DC55CC64 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 08E8807188BD4562E08B8EEC /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 5E65E9ADD0436B6FFD569BB0 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = FFCD1AE0E78039B407BB6D95 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 1182BF4D59712941C6E9BDBD /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 49B2A1158C53D5BE5179EC9E /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/webview_flutter/step_09/android/app/src/main/kotlin/com/example/webview_in_flutter/MainActivity.kt b/webview_flutter/step_09/android/app/src/main/kotlin/com/example/webview_in_flutter/MainActivity.kt index 77ec42b157..c92fab4c95 100644 --- a/webview_flutter/step_09/android/app/src/main/kotlin/com/example/webview_in_flutter/MainActivity.kt +++ b/webview_flutter/step_09/android/app/src/main/kotlin/com/example/webview_in_flutter/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.webview_in_flutter import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/webview_flutter/step_09/ios/Runner.xcodeproj/project.pbxproj b/webview_flutter/step_09/ios/Runner.xcodeproj/project.pbxproj index cf934d46a0..276d860231 100644 --- a/webview_flutter/step_09/ios/Runner.xcodeproj/project.pbxproj +++ b/webview_flutter/step_09/ios/Runner.xcodeproj/project.pbxproj @@ -7,15 +7,15 @@ objects = { /* Begin PBXBuildFile section */ - 146E2F4F96B2A7493F61B324 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 483C5459932C12942AFA7E03 /* Pods_RunnerTests.framework */; }; 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; + 1BFB925E1285D3C9D0214163 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 96AA32884CF65C4A1A47E9B5 /* Pods_Runner.framework */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; + 6AD0B947BC47BAD4C716CF4C /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 78FE95319DCB2E65433E6E8E /* Pods_RunnerTests.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - F22C8C345A86CF5C778824A6 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2E98475E49E91C6F42EB5BE9 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,21 +42,20 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 1182BF4D59712941C6E9BDBD /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 08E8807188BD4562E08B8EEC /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 2E16865EFFE10847E22FDC01 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 2E98475E49E91C6F42EB5BE9 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 38FAC263676BF277DC55CC64 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 483C5459932C12942AFA7E03 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 5DA7B107763804EA023008E6 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 5E65E9ADD0436B6FFD569BB0 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 49B2A1158C53D5BE5179EC9E /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 69C215B70FD7E3EE7319CCC9 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 724C51021A4C169467BA5046 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 78FE95319DCB2E65433E6E8E /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; + 96AA32884CF65C4A1A47E9B5 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -64,15 +63,16 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - D5380A55F144988CDD0B9F21 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + BD4C341F93E020834684FA10 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + FFCD1AE0E78039B407BB6D95 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 5AA7A7CC1135011DCBC94448 /* Frameworks */ = { + 7F226ABBED5403415863058E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 146E2F4F96B2A7493F61B324 /* Pods_RunnerTests.framework in Frameworks */, + 6AD0B947BC47BAD4C716CF4C /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -80,42 +80,42 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - F22C8C345A86CF5C778824A6 /* Pods_Runner.framework in Frameworks */, + 1BFB925E1285D3C9D0214163 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 331C8082294A63A400263BE5 /* RunnerTests */ = { + 17381141EAB50EFA562EAEE7 /* Pods */ = { isa = PBXGroup; children = ( - 331C807B294A618700263BE5 /* RunnerTests.swift */, + 724C51021A4C169467BA5046 /* Pods-Runner.debug.xcconfig */, + 69C215B70FD7E3EE7319CCC9 /* Pods-Runner.release.xcconfig */, + BD4C341F93E020834684FA10 /* Pods-Runner.profile.xcconfig */, + 08E8807188BD4562E08B8EEC /* Pods-RunnerTests.debug.xcconfig */, + FFCD1AE0E78039B407BB6D95 /* Pods-RunnerTests.release.xcconfig */, + 49B2A1158C53D5BE5179EC9E /* Pods-RunnerTests.profile.xcconfig */, ); - path = RunnerTests; + name = Pods; + path = Pods; sourceTree = ""; }; - 6406E4F1654585763ECA3FC5 /* Frameworks */ = { + 331C8082294A63A400263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( - 2E98475E49E91C6F42EB5BE9 /* Pods_Runner.framework */, - 483C5459932C12942AFA7E03 /* Pods_RunnerTests.framework */, + 331C807B294A618700263BE5 /* RunnerTests.swift */, ); - name = Frameworks; + path = RunnerTests; sourceTree = ""; }; - 9195E9BC680CC0AFDF5DFFCD /* Pods */ = { + 6329F352C3BC19D6BC97C051 /* Frameworks */ = { isa = PBXGroup; children = ( - 2E16865EFFE10847E22FDC01 /* Pods-Runner.debug.xcconfig */, - 5DA7B107763804EA023008E6 /* Pods-Runner.release.xcconfig */, - D5380A55F144988CDD0B9F21 /* Pods-Runner.profile.xcconfig */, - 38FAC263676BF277DC55CC64 /* Pods-RunnerTests.debug.xcconfig */, - 5E65E9ADD0436B6FFD569BB0 /* Pods-RunnerTests.release.xcconfig */, - 1182BF4D59712941C6E9BDBD /* Pods-RunnerTests.profile.xcconfig */, + 96AA32884CF65C4A1A47E9B5 /* Pods_Runner.framework */, + 78FE95319DCB2E65433E6E8E /* Pods_RunnerTests.framework */, ); - name = Pods; - path = Pods; + name = Frameworks; sourceTree = ""; }; 9740EEB11CF90186004384FC /* Flutter */ = { @@ -136,8 +136,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - 9195E9BC680CC0AFDF5DFFCD /* Pods */, - 6406E4F1654585763ECA3FC5 /* Frameworks */, + 17381141EAB50EFA562EAEE7 /* Pods */, + 6329F352C3BC19D6BC97C051 /* Frameworks */, ); sourceTree = ""; }; @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - ECCFE0282F0AB2316DFFAAA5 /* [CP] Check Pods Manifest.lock */, + D9EEEE05A83707C4344318A4 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 5AA7A7CC1135011DCBC94448 /* Frameworks */, + 7F226ABBED5403415863058E /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 5E22422868B5F66D0EA12B2D /* [CP] Check Pods Manifest.lock */, + E931E5B32D0B6E1B4F0E6521 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 8F294B118B136BC3657E9830 /* [CP] Embed Pods Frameworks */, + 52348E4B337812CFFF83C800 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -286,29 +286,7 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 5E22422868B5F66D0EA12B2D /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; - 8F294B118B136BC3657E9830 /* [CP] Embed Pods Frameworks */ = { + 52348E4B337812CFFF83C800 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -340,7 +318,7 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - ECCFE0282F0AB2316DFFAAA5 /* [CP] Check Pods Manifest.lock */ = { + D9EEEE05A83707C4344318A4 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -362,6 +340,28 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; + E931E5B32D0B6E1B4F0E6521 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 38FAC263676BF277DC55CC64 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 08E8807188BD4562E08B8EEC /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 5E65E9ADD0436B6FFD569BB0 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = FFCD1AE0E78039B407BB6D95 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 1182BF4D59712941C6E9BDBD /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 49B2A1158C53D5BE5179EC9E /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/webview_flutter/step_10/android/app/src/main/kotlin/com/example/webview_in_flutter/MainActivity.kt b/webview_flutter/step_10/android/app/src/main/kotlin/com/example/webview_in_flutter/MainActivity.kt index 77ec42b157..c92fab4c95 100644 --- a/webview_flutter/step_10/android/app/src/main/kotlin/com/example/webview_in_flutter/MainActivity.kt +++ b/webview_flutter/step_10/android/app/src/main/kotlin/com/example/webview_in_flutter/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.webview_in_flutter import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/webview_flutter/step_10/ios/Runner.xcodeproj/project.pbxproj b/webview_flutter/step_10/ios/Runner.xcodeproj/project.pbxproj index cf934d46a0..276d860231 100644 --- a/webview_flutter/step_10/ios/Runner.xcodeproj/project.pbxproj +++ b/webview_flutter/step_10/ios/Runner.xcodeproj/project.pbxproj @@ -7,15 +7,15 @@ objects = { /* Begin PBXBuildFile section */ - 146E2F4F96B2A7493F61B324 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 483C5459932C12942AFA7E03 /* Pods_RunnerTests.framework */; }; 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; + 1BFB925E1285D3C9D0214163 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 96AA32884CF65C4A1A47E9B5 /* Pods_Runner.framework */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; + 6AD0B947BC47BAD4C716CF4C /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 78FE95319DCB2E65433E6E8E /* Pods_RunnerTests.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - F22C8C345A86CF5C778824A6 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2E98475E49E91C6F42EB5BE9 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,21 +42,20 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 1182BF4D59712941C6E9BDBD /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 08E8807188BD4562E08B8EEC /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 2E16865EFFE10847E22FDC01 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 2E98475E49E91C6F42EB5BE9 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 38FAC263676BF277DC55CC64 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 483C5459932C12942AFA7E03 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 5DA7B107763804EA023008E6 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 5E65E9ADD0436B6FFD569BB0 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 49B2A1158C53D5BE5179EC9E /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 69C215B70FD7E3EE7319CCC9 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 724C51021A4C169467BA5046 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 78FE95319DCB2E65433E6E8E /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; + 96AA32884CF65C4A1A47E9B5 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -64,15 +63,16 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - D5380A55F144988CDD0B9F21 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + BD4C341F93E020834684FA10 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + FFCD1AE0E78039B407BB6D95 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 5AA7A7CC1135011DCBC94448 /* Frameworks */ = { + 7F226ABBED5403415863058E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 146E2F4F96B2A7493F61B324 /* Pods_RunnerTests.framework in Frameworks */, + 6AD0B947BC47BAD4C716CF4C /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -80,42 +80,42 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - F22C8C345A86CF5C778824A6 /* Pods_Runner.framework in Frameworks */, + 1BFB925E1285D3C9D0214163 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 331C8082294A63A400263BE5 /* RunnerTests */ = { + 17381141EAB50EFA562EAEE7 /* Pods */ = { isa = PBXGroup; children = ( - 331C807B294A618700263BE5 /* RunnerTests.swift */, + 724C51021A4C169467BA5046 /* Pods-Runner.debug.xcconfig */, + 69C215B70FD7E3EE7319CCC9 /* Pods-Runner.release.xcconfig */, + BD4C341F93E020834684FA10 /* Pods-Runner.profile.xcconfig */, + 08E8807188BD4562E08B8EEC /* Pods-RunnerTests.debug.xcconfig */, + FFCD1AE0E78039B407BB6D95 /* Pods-RunnerTests.release.xcconfig */, + 49B2A1158C53D5BE5179EC9E /* Pods-RunnerTests.profile.xcconfig */, ); - path = RunnerTests; + name = Pods; + path = Pods; sourceTree = ""; }; - 6406E4F1654585763ECA3FC5 /* Frameworks */ = { + 331C8082294A63A400263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( - 2E98475E49E91C6F42EB5BE9 /* Pods_Runner.framework */, - 483C5459932C12942AFA7E03 /* Pods_RunnerTests.framework */, + 331C807B294A618700263BE5 /* RunnerTests.swift */, ); - name = Frameworks; + path = RunnerTests; sourceTree = ""; }; - 9195E9BC680CC0AFDF5DFFCD /* Pods */ = { + 6329F352C3BC19D6BC97C051 /* Frameworks */ = { isa = PBXGroup; children = ( - 2E16865EFFE10847E22FDC01 /* Pods-Runner.debug.xcconfig */, - 5DA7B107763804EA023008E6 /* Pods-Runner.release.xcconfig */, - D5380A55F144988CDD0B9F21 /* Pods-Runner.profile.xcconfig */, - 38FAC263676BF277DC55CC64 /* Pods-RunnerTests.debug.xcconfig */, - 5E65E9ADD0436B6FFD569BB0 /* Pods-RunnerTests.release.xcconfig */, - 1182BF4D59712941C6E9BDBD /* Pods-RunnerTests.profile.xcconfig */, + 96AA32884CF65C4A1A47E9B5 /* Pods_Runner.framework */, + 78FE95319DCB2E65433E6E8E /* Pods_RunnerTests.framework */, ); - name = Pods; - path = Pods; + name = Frameworks; sourceTree = ""; }; 9740EEB11CF90186004384FC /* Flutter */ = { @@ -136,8 +136,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - 9195E9BC680CC0AFDF5DFFCD /* Pods */, - 6406E4F1654585763ECA3FC5 /* Frameworks */, + 17381141EAB50EFA562EAEE7 /* Pods */, + 6329F352C3BC19D6BC97C051 /* Frameworks */, ); sourceTree = ""; }; @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - ECCFE0282F0AB2316DFFAAA5 /* [CP] Check Pods Manifest.lock */, + D9EEEE05A83707C4344318A4 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 5AA7A7CC1135011DCBC94448 /* Frameworks */, + 7F226ABBED5403415863058E /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 5E22422868B5F66D0EA12B2D /* [CP] Check Pods Manifest.lock */, + E931E5B32D0B6E1B4F0E6521 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 8F294B118B136BC3657E9830 /* [CP] Embed Pods Frameworks */, + 52348E4B337812CFFF83C800 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -286,29 +286,7 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 5E22422868B5F66D0EA12B2D /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; - 8F294B118B136BC3657E9830 /* [CP] Embed Pods Frameworks */ = { + 52348E4B337812CFFF83C800 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -340,7 +318,7 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - ECCFE0282F0AB2316DFFAAA5 /* [CP] Check Pods Manifest.lock */ = { + D9EEEE05A83707C4344318A4 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -362,6 +340,28 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; + E931E5B32D0B6E1B4F0E6521 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 38FAC263676BF277DC55CC64 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 08E8807188BD4562E08B8EEC /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 5E65E9ADD0436B6FFD569BB0 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = FFCD1AE0E78039B407BB6D95 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 1182BF4D59712941C6E9BDBD /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 49B2A1158C53D5BE5179EC9E /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/webview_flutter/step_11/android/app/src/main/kotlin/com/example/webview_in_flutter/MainActivity.kt b/webview_flutter/step_11/android/app/src/main/kotlin/com/example/webview_in_flutter/MainActivity.kt index 77ec42b157..c92fab4c95 100644 --- a/webview_flutter/step_11/android/app/src/main/kotlin/com/example/webview_in_flutter/MainActivity.kt +++ b/webview_flutter/step_11/android/app/src/main/kotlin/com/example/webview_in_flutter/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.webview_in_flutter import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/webview_flutter/step_11/ios/Runner.xcodeproj/project.pbxproj b/webview_flutter/step_11/ios/Runner.xcodeproj/project.pbxproj index cf934d46a0..276d860231 100644 --- a/webview_flutter/step_11/ios/Runner.xcodeproj/project.pbxproj +++ b/webview_flutter/step_11/ios/Runner.xcodeproj/project.pbxproj @@ -7,15 +7,15 @@ objects = { /* Begin PBXBuildFile section */ - 146E2F4F96B2A7493F61B324 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 483C5459932C12942AFA7E03 /* Pods_RunnerTests.framework */; }; 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; + 1BFB925E1285D3C9D0214163 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 96AA32884CF65C4A1A47E9B5 /* Pods_Runner.framework */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; + 6AD0B947BC47BAD4C716CF4C /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 78FE95319DCB2E65433E6E8E /* Pods_RunnerTests.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - F22C8C345A86CF5C778824A6 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2E98475E49E91C6F42EB5BE9 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,21 +42,20 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 1182BF4D59712941C6E9BDBD /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 08E8807188BD4562E08B8EEC /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 2E16865EFFE10847E22FDC01 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 2E98475E49E91C6F42EB5BE9 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 38FAC263676BF277DC55CC64 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 483C5459932C12942AFA7E03 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 5DA7B107763804EA023008E6 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 5E65E9ADD0436B6FFD569BB0 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 49B2A1158C53D5BE5179EC9E /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 69C215B70FD7E3EE7319CCC9 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 724C51021A4C169467BA5046 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 78FE95319DCB2E65433E6E8E /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; + 96AA32884CF65C4A1A47E9B5 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -64,15 +63,16 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - D5380A55F144988CDD0B9F21 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + BD4C341F93E020834684FA10 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + FFCD1AE0E78039B407BB6D95 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 5AA7A7CC1135011DCBC94448 /* Frameworks */ = { + 7F226ABBED5403415863058E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 146E2F4F96B2A7493F61B324 /* Pods_RunnerTests.framework in Frameworks */, + 6AD0B947BC47BAD4C716CF4C /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -80,42 +80,42 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - F22C8C345A86CF5C778824A6 /* Pods_Runner.framework in Frameworks */, + 1BFB925E1285D3C9D0214163 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 331C8082294A63A400263BE5 /* RunnerTests */ = { + 17381141EAB50EFA562EAEE7 /* Pods */ = { isa = PBXGroup; children = ( - 331C807B294A618700263BE5 /* RunnerTests.swift */, + 724C51021A4C169467BA5046 /* Pods-Runner.debug.xcconfig */, + 69C215B70FD7E3EE7319CCC9 /* Pods-Runner.release.xcconfig */, + BD4C341F93E020834684FA10 /* Pods-Runner.profile.xcconfig */, + 08E8807188BD4562E08B8EEC /* Pods-RunnerTests.debug.xcconfig */, + FFCD1AE0E78039B407BB6D95 /* Pods-RunnerTests.release.xcconfig */, + 49B2A1158C53D5BE5179EC9E /* Pods-RunnerTests.profile.xcconfig */, ); - path = RunnerTests; + name = Pods; + path = Pods; sourceTree = ""; }; - 6406E4F1654585763ECA3FC5 /* Frameworks */ = { + 331C8082294A63A400263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( - 2E98475E49E91C6F42EB5BE9 /* Pods_Runner.framework */, - 483C5459932C12942AFA7E03 /* Pods_RunnerTests.framework */, + 331C807B294A618700263BE5 /* RunnerTests.swift */, ); - name = Frameworks; + path = RunnerTests; sourceTree = ""; }; - 9195E9BC680CC0AFDF5DFFCD /* Pods */ = { + 6329F352C3BC19D6BC97C051 /* Frameworks */ = { isa = PBXGroup; children = ( - 2E16865EFFE10847E22FDC01 /* Pods-Runner.debug.xcconfig */, - 5DA7B107763804EA023008E6 /* Pods-Runner.release.xcconfig */, - D5380A55F144988CDD0B9F21 /* Pods-Runner.profile.xcconfig */, - 38FAC263676BF277DC55CC64 /* Pods-RunnerTests.debug.xcconfig */, - 5E65E9ADD0436B6FFD569BB0 /* Pods-RunnerTests.release.xcconfig */, - 1182BF4D59712941C6E9BDBD /* Pods-RunnerTests.profile.xcconfig */, + 96AA32884CF65C4A1A47E9B5 /* Pods_Runner.framework */, + 78FE95319DCB2E65433E6E8E /* Pods_RunnerTests.framework */, ); - name = Pods; - path = Pods; + name = Frameworks; sourceTree = ""; }; 9740EEB11CF90186004384FC /* Flutter */ = { @@ -136,8 +136,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - 9195E9BC680CC0AFDF5DFFCD /* Pods */, - 6406E4F1654585763ECA3FC5 /* Frameworks */, + 17381141EAB50EFA562EAEE7 /* Pods */, + 6329F352C3BC19D6BC97C051 /* Frameworks */, ); sourceTree = ""; }; @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - ECCFE0282F0AB2316DFFAAA5 /* [CP] Check Pods Manifest.lock */, + D9EEEE05A83707C4344318A4 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 5AA7A7CC1135011DCBC94448 /* Frameworks */, + 7F226ABBED5403415863058E /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 5E22422868B5F66D0EA12B2D /* [CP] Check Pods Manifest.lock */, + E931E5B32D0B6E1B4F0E6521 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 8F294B118B136BC3657E9830 /* [CP] Embed Pods Frameworks */, + 52348E4B337812CFFF83C800 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -286,29 +286,7 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 5E22422868B5F66D0EA12B2D /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; - 8F294B118B136BC3657E9830 /* [CP] Embed Pods Frameworks */ = { + 52348E4B337812CFFF83C800 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -340,7 +318,7 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - ECCFE0282F0AB2316DFFAAA5 /* [CP] Check Pods Manifest.lock */ = { + D9EEEE05A83707C4344318A4 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -362,6 +340,28 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; + E931E5B32D0B6E1B4F0E6521 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 38FAC263676BF277DC55CC64 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 08E8807188BD4562E08B8EEC /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 5E65E9ADD0436B6FFD569BB0 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = FFCD1AE0E78039B407BB6D95 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 1182BF4D59712941C6E9BDBD /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 49B2A1158C53D5BE5179EC9E /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/webview_flutter/step_12/android/app/src/main/kotlin/com/example/webview_in_flutter/MainActivity.kt b/webview_flutter/step_12/android/app/src/main/kotlin/com/example/webview_in_flutter/MainActivity.kt index 77ec42b157..c92fab4c95 100644 --- a/webview_flutter/step_12/android/app/src/main/kotlin/com/example/webview_in_flutter/MainActivity.kt +++ b/webview_flutter/step_12/android/app/src/main/kotlin/com/example/webview_in_flutter/MainActivity.kt @@ -2,4 +2,4 @@ package com.example.webview_in_flutter import io.flutter.embedding.android.FlutterActivity -class MainActivity : FlutterActivity() +class MainActivity: FlutterActivity() diff --git a/webview_flutter/step_12/ios/Runner.xcodeproj/project.pbxproj b/webview_flutter/step_12/ios/Runner.xcodeproj/project.pbxproj index cf934d46a0..276d860231 100644 --- a/webview_flutter/step_12/ios/Runner.xcodeproj/project.pbxproj +++ b/webview_flutter/step_12/ios/Runner.xcodeproj/project.pbxproj @@ -7,15 +7,15 @@ objects = { /* Begin PBXBuildFile section */ - 146E2F4F96B2A7493F61B324 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 483C5459932C12942AFA7E03 /* Pods_RunnerTests.framework */; }; 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; + 1BFB925E1285D3C9D0214163 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 96AA32884CF65C4A1A47E9B5 /* Pods_Runner.framework */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; + 6AD0B947BC47BAD4C716CF4C /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 78FE95319DCB2E65433E6E8E /* Pods_RunnerTests.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - F22C8C345A86CF5C778824A6 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2E98475E49E91C6F42EB5BE9 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,21 +42,20 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 1182BF4D59712941C6E9BDBD /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 08E8807188BD4562E08B8EEC /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 2E16865EFFE10847E22FDC01 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 2E98475E49E91C6F42EB5BE9 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 38FAC263676BF277DC55CC64 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 483C5459932C12942AFA7E03 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 5DA7B107763804EA023008E6 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 5E65E9ADD0436B6FFD569BB0 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 49B2A1158C53D5BE5179EC9E /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 69C215B70FD7E3EE7319CCC9 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 724C51021A4C169467BA5046 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 78FE95319DCB2E65433E6E8E /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; + 96AA32884CF65C4A1A47E9B5 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -64,15 +63,16 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - D5380A55F144988CDD0B9F21 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + BD4C341F93E020834684FA10 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + FFCD1AE0E78039B407BB6D95 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 5AA7A7CC1135011DCBC94448 /* Frameworks */ = { + 7F226ABBED5403415863058E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 146E2F4F96B2A7493F61B324 /* Pods_RunnerTests.framework in Frameworks */, + 6AD0B947BC47BAD4C716CF4C /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -80,42 +80,42 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - F22C8C345A86CF5C778824A6 /* Pods_Runner.framework in Frameworks */, + 1BFB925E1285D3C9D0214163 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 331C8082294A63A400263BE5 /* RunnerTests */ = { + 17381141EAB50EFA562EAEE7 /* Pods */ = { isa = PBXGroup; children = ( - 331C807B294A618700263BE5 /* RunnerTests.swift */, + 724C51021A4C169467BA5046 /* Pods-Runner.debug.xcconfig */, + 69C215B70FD7E3EE7319CCC9 /* Pods-Runner.release.xcconfig */, + BD4C341F93E020834684FA10 /* Pods-Runner.profile.xcconfig */, + 08E8807188BD4562E08B8EEC /* Pods-RunnerTests.debug.xcconfig */, + FFCD1AE0E78039B407BB6D95 /* Pods-RunnerTests.release.xcconfig */, + 49B2A1158C53D5BE5179EC9E /* Pods-RunnerTests.profile.xcconfig */, ); - path = RunnerTests; + name = Pods; + path = Pods; sourceTree = ""; }; - 6406E4F1654585763ECA3FC5 /* Frameworks */ = { + 331C8082294A63A400263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( - 2E98475E49E91C6F42EB5BE9 /* Pods_Runner.framework */, - 483C5459932C12942AFA7E03 /* Pods_RunnerTests.framework */, + 331C807B294A618700263BE5 /* RunnerTests.swift */, ); - name = Frameworks; + path = RunnerTests; sourceTree = ""; }; - 9195E9BC680CC0AFDF5DFFCD /* Pods */ = { + 6329F352C3BC19D6BC97C051 /* Frameworks */ = { isa = PBXGroup; children = ( - 2E16865EFFE10847E22FDC01 /* Pods-Runner.debug.xcconfig */, - 5DA7B107763804EA023008E6 /* Pods-Runner.release.xcconfig */, - D5380A55F144988CDD0B9F21 /* Pods-Runner.profile.xcconfig */, - 38FAC263676BF277DC55CC64 /* Pods-RunnerTests.debug.xcconfig */, - 5E65E9ADD0436B6FFD569BB0 /* Pods-RunnerTests.release.xcconfig */, - 1182BF4D59712941C6E9BDBD /* Pods-RunnerTests.profile.xcconfig */, + 96AA32884CF65C4A1A47E9B5 /* Pods_Runner.framework */, + 78FE95319DCB2E65433E6E8E /* Pods_RunnerTests.framework */, ); - name = Pods; - path = Pods; + name = Frameworks; sourceTree = ""; }; 9740EEB11CF90186004384FC /* Flutter */ = { @@ -136,8 +136,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - 9195E9BC680CC0AFDF5DFFCD /* Pods */, - 6406E4F1654585763ECA3FC5 /* Frameworks */, + 17381141EAB50EFA562EAEE7 /* Pods */, + 6329F352C3BC19D6BC97C051 /* Frameworks */, ); sourceTree = ""; }; @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - ECCFE0282F0AB2316DFFAAA5 /* [CP] Check Pods Manifest.lock */, + D9EEEE05A83707C4344318A4 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 5AA7A7CC1135011DCBC94448 /* Frameworks */, + 7F226ABBED5403415863058E /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 5E22422868B5F66D0EA12B2D /* [CP] Check Pods Manifest.lock */, + E931E5B32D0B6E1B4F0E6521 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 8F294B118B136BC3657E9830 /* [CP] Embed Pods Frameworks */, + 52348E4B337812CFFF83C800 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -286,29 +286,7 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 5E22422868B5F66D0EA12B2D /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; - 8F294B118B136BC3657E9830 /* [CP] Embed Pods Frameworks */ = { + 52348E4B337812CFFF83C800 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -340,7 +318,7 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - ECCFE0282F0AB2316DFFAAA5 /* [CP] Check Pods Manifest.lock */ = { + D9EEEE05A83707C4344318A4 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -362,6 +340,28 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; + E931E5B32D0B6E1B4F0E6521 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 38FAC263676BF277DC55CC64 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 08E8807188BD4562E08B8EEC /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 5E65E9ADD0436B6FFD569BB0 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = FFCD1AE0E78039B407BB6D95 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 1182BF4D59712941C6E9BDBD /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 49B2A1158C53D5BE5179EC9E /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic;